Lines Matching refs:sc
272 static int sbdma_add_rcvbuffer(struct sbmac_softc *sc, struct sbmacdma *d,
276 static void sbdma_fillring(struct sbmac_softc *sc, struct sbmacdma *d);
277 static int sbdma_rx_process(struct sbmac_softc *sc, struct sbmacdma *d,
279 static void sbdma_tx_process(struct sbmac_softc *sc, struct sbmacdma *d,
286 static void sbmac_promiscuous_mode(struct sbmac_softc *sc, int onoff);
290 static void sbmac_setmulti(struct sbmac_softc *sc);
423 struct sbmac_softc *sc = (struct sbmac_softc *)bus->priv; in sbmac_mii_read() local
424 void __iomem *sbm_mdio = sc->sbm_mdio; in sbmac_mii_read()
517 struct sbmac_softc *sc = (struct sbmac_softc *)bus->priv; in sbmac_mii_write() local
518 void __iomem *sbm_mdio = sc->sbm_mdio; in sbmac_mii_write()
771 static int sbdma_add_rcvbuffer(struct sbmac_softc *sc, struct sbmacdma *d, in sbdma_add_rcvbuffer() argument
774 struct net_device *dev = sc->sbm_dev; in sbdma_add_rcvbuffer()
1005 static void sbdma_fillring(struct sbmac_softc *sc, struct sbmacdma *d) in sbdma_fillring() argument
1010 if (sbdma_add_rcvbuffer(sc, d, NULL) != 0) in sbdma_fillring()
1018 struct sbmac_softc *sc = netdev_priv(netdev); in sbmac_netpoll() local
1019 int irq = sc->sbm_dev->irq; in sbmac_netpoll()
1021 __raw_writeq(0, sc->sbm_imr); in sbmac_netpoll()
1028 sc->sbm_imr); in sbmac_netpoll()
1031 (M_MAC_INT_CHANNEL << S_MAC_RX_CH0), sc->sbm_imr); in sbmac_netpoll()
1052 static int sbdma_rx_process(struct sbmac_softc *sc, struct sbmacdma *d, in sbdma_rx_process() argument
1055 struct net_device *dev = sc->sbm_dev; in sbdma_rx_process()
1069 += __raw_readq(sc->sbm_rxdma.sbdma_oodpktlost) & 0xffff; in sbdma_rx_process()
1070 __raw_writeq(0, sc->sbm_rxdma.sbdma_oodpktlost); in sbdma_rx_process()
1126 if (unlikely(sbdma_add_rcvbuffer(sc, d, NULL) == in sbdma_rx_process()
1130 sbdma_add_rcvbuffer(sc, d, sb); in sbdma_rx_process()
1148 if (sc->rx_hw_checksum == ENABLE) { in sbdma_rx_process()
1180 sbdma_add_rcvbuffer(sc, d, sb); in sbdma_rx_process()
1217 static void sbdma_tx_process(struct sbmac_softc *sc, struct sbmacdma *d, in sbdma_tx_process() argument
1220 struct net_device *dev = sc->sbm_dev; in sbdma_tx_process()
1228 spin_lock_irqsave(&(sc->sbm_lock), flags); in sbdma_tx_process()
1300 spin_unlock_irqrestore(&(sc->sbm_lock), flags); in sbdma_tx_process()
1365 static void sbmac_uninitctx(struct sbmac_softc *sc) in sbmac_uninitctx() argument
1367 sbdma_uninitctx(&(sc->sbm_txdma)); in sbmac_uninitctx()
1368 sbdma_uninitctx(&(sc->sbm_rxdma)); in sbmac_uninitctx()
1640 static enum sbmac_state sbmac_set_channel_state(struct sbmac_softc *sc, in sbmac_set_channel_state() argument
1643 enum sbmac_state oldstate = sc->sbm_state; in sbmac_set_channel_state()
1658 sbmac_channel_start(sc); in sbmac_set_channel_state()
1661 sbmac_channel_stop(sc); in sbmac_set_channel_state()
1685 static void sbmac_promiscuous_mode(struct sbmac_softc *sc,int onoff) in sbmac_promiscuous_mode() argument
1689 if (sc->sbm_state != sbmac_state_on) in sbmac_promiscuous_mode()
1693 reg = __raw_readq(sc->sbm_rxfilter); in sbmac_promiscuous_mode()
1695 __raw_writeq(reg, sc->sbm_rxfilter); in sbmac_promiscuous_mode()
1698 reg = __raw_readq(sc->sbm_rxfilter); in sbmac_promiscuous_mode()
1700 __raw_writeq(reg, sc->sbm_rxfilter); in sbmac_promiscuous_mode()
1716 static void sbmac_set_iphdr_offset(struct sbmac_softc *sc) in sbmac_set_iphdr_offset() argument
1721 reg = __raw_readq(sc->sbm_rxfilter); in sbmac_set_iphdr_offset()
1723 __raw_writeq(reg, sc->sbm_rxfilter); in sbmac_set_iphdr_offset()
1728 sc->rx_hw_checksum = DISABLE; in sbmac_set_iphdr_offset()
1730 sc->rx_hw_checksum = ENABLE; in sbmac_set_iphdr_offset()
1968 struct sbmac_softc *sc = netdev_priv(dev); in sbmac_intr() local
1977 isr = __raw_readq(sc->sbm_isr) & ~M_MAC_COUNTER_ADDR; in sbmac_intr()
1988 sbdma_tx_process(sc,&(sc->sbm_txdma), 0); in sbmac_intr()
1991 if (napi_schedule_prep(&sc->napi)) { in sbmac_intr()
1992 __raw_writeq(0, sc->sbm_imr); in sbmac_intr()
1993 __napi_schedule(&sc->napi); in sbmac_intr()
1998 sbdma_rx_process(sc,&(sc->sbm_rxdma), in sbmac_intr()
2020 struct sbmac_softc *sc = netdev_priv(dev); in sbmac_start_tx() local
2024 spin_lock_irqsave(&sc->sbm_lock, flags); in sbmac_start_tx()
2031 if (sbdma_add_txbuffer(&(sc->sbm_txdma),skb)) { in sbmac_start_tx()
2034 spin_unlock_irqrestore(&sc->sbm_lock, flags); in sbmac_start_tx()
2039 spin_unlock_irqrestore(&sc->sbm_lock, flags); in sbmac_start_tx()
2058 static void sbmac_setmulti(struct sbmac_softc *sc) in sbmac_setmulti() argument
2064 struct net_device *dev = sc->sbm_dev; in sbmac_setmulti()
2073 port = sc->sbm_base + R_MAC_ADDR_BASE+(idx*sizeof(uint64_t)); in sbmac_setmulti()
2078 port = sc->sbm_base + R_MAC_HASH_BASE+(idx*sizeof(uint64_t)); in sbmac_setmulti()
2086 reg = __raw_readq(sc->sbm_rxfilter); in sbmac_setmulti()
2088 __raw_writeq(reg, sc->sbm_rxfilter); in sbmac_setmulti()
2095 reg = __raw_readq(sc->sbm_rxfilter); in sbmac_setmulti()
2097 __raw_writeq(reg, sc->sbm_rxfilter); in sbmac_setmulti()
2116 port = sc->sbm_base + R_MAC_ADDR_BASE+(idx * sizeof(uint64_t)); in sbmac_setmulti()
2127 reg = __raw_readq(sc->sbm_rxfilter); in sbmac_setmulti()
2129 __raw_writeq(reg, sc->sbm_rxfilter); in sbmac_setmulti()
2163 struct sbmac_softc *sc = netdev_priv(dev); in sbmac_init() local
2169 sc->sbm_dev = dev; in sbmac_init()
2170 sc->sbe_idx = idx; in sbmac_init()
2172 eaddr = sc->sbm_hwaddr; in sbmac_init()
2179 ea_reg = __raw_readq(sc->sbm_base + R_MAC_ETHERNET_ADDR); in sbmac_init()
2180 __raw_writeq(0, sc->sbm_base + R_MAC_ETHERNET_ADDR); in sbmac_init()
2195 sbmac_initctx(sc); in sbmac_init()
2201 spin_lock_init(&(sc->sbm_lock)); in sbmac_init()
2208 netif_napi_add(dev, &sc->napi, sbmac_poll, 16); in sbmac_init()
2213 sbmac_set_iphdr_offset(sc); in sbmac_init()
2215 sc->mii_bus = mdiobus_alloc(); in sbmac_init()
2216 if (sc->mii_bus == NULL) { in sbmac_init()
2221 sc->mii_bus->name = sbmac_mdio_string; in sbmac_init()
2222 snprintf(sc->mii_bus->id, MII_BUS_ID_SIZE, "%s-%x", in sbmac_init()
2224 sc->mii_bus->priv = sc; in sbmac_init()
2225 sc->mii_bus->read = sbmac_mii_read; in sbmac_init()
2226 sc->mii_bus->write = sbmac_mii_write; in sbmac_init()
2228 sc->mii_bus->parent = &pldev->dev; in sbmac_init()
2232 err = mdiobus_register(sc->mii_bus); in sbmac_init()
2238 platform_set_drvdata(pldev, sc->mii_bus); in sbmac_init()
2249 if (sc->rx_hw_checksum == ENABLE) in sbmac_init()
2262 mdiobus_unregister(sc->mii_bus); in sbmac_init()
2264 mdiobus_free(sc->mii_bus); in sbmac_init()
2266 sbmac_uninitctx(sc); in sbmac_init()
2273 struct sbmac_softc *sc = netdev_priv(dev); in sbmac_open() local
2285 __raw_readq(sc->sbm_isr); in sbmac_open()
2293 sc->sbm_speed = sbmac_speed_none; in sbmac_open()
2294 sc->sbm_duplex = sbmac_duplex_none; in sbmac_open()
2295 sc->sbm_fc = sbmac_fc_none; in sbmac_open()
2296 sc->sbm_pause = -1; in sbmac_open()
2297 sc->sbm_link = 0; in sbmac_open()
2310 sbmac_set_channel_state(sc,sbmac_state_on); in sbmac_open()
2316 phy_start(sc->phy_dev); in sbmac_open()
2318 napi_enable(&sc->napi); in sbmac_open()
2330 struct sbmac_softc *sc = netdev_priv(dev); in sbmac_mii_probe() local
2333 phy_dev = phy_find_first(sc->mii_bus); in sbmac_mii_probe()
2352 sc->phy_dev = phy_dev; in sbmac_mii_probe()
2360 struct sbmac_softc *sc = netdev_priv(dev); in sbmac_mii_poll() local
2361 struct phy_device *phy_dev = sc->phy_dev; in sbmac_mii_poll()
2366 link_chg = (sc->sbm_link != phy_dev->link); in sbmac_mii_poll()
2367 speed_chg = (sc->sbm_speed != phy_dev->speed); in sbmac_mii_poll()
2368 duplex_chg = (sc->sbm_duplex != phy_dev->duplex); in sbmac_mii_poll()
2369 pause_chg = (sc->sbm_pause != phy_dev->pause); in sbmac_mii_poll()
2376 sc->sbm_link = phy_dev->link; in sbmac_mii_poll()
2377 sc->sbm_speed = sbmac_speed_none; in sbmac_mii_poll()
2378 sc->sbm_duplex = sbmac_duplex_none; in sbmac_mii_poll()
2379 sc->sbm_fc = sbmac_fc_disabled; in sbmac_mii_poll()
2380 sc->sbm_pause = -1; in sbmac_mii_poll()
2393 fc_chg = (sc->sbm_fc != fc); in sbmac_mii_poll()
2398 spin_lock_irqsave(&sc->sbm_lock, flags); in sbmac_mii_poll()
2400 sc->sbm_speed = phy_dev->speed; in sbmac_mii_poll()
2401 sc->sbm_duplex = phy_dev->duplex; in sbmac_mii_poll()
2402 sc->sbm_fc = fc; in sbmac_mii_poll()
2403 sc->sbm_pause = phy_dev->pause; in sbmac_mii_poll()
2404 sc->sbm_link = phy_dev->link; in sbmac_mii_poll()
2407 sc->sbm_state != sbmac_state_off) { in sbmac_mii_poll()
2414 sbmac_channel_stop(sc); in sbmac_mii_poll()
2415 sbmac_channel_start(sc); in sbmac_mii_poll()
2418 spin_unlock_irqrestore(&sc->sbm_lock, flags); in sbmac_mii_poll()
2424 struct sbmac_softc *sc = netdev_priv(dev); in sbmac_tx_timeout() local
2427 spin_lock_irqsave(&sc->sbm_lock, flags); in sbmac_tx_timeout()
2433 spin_unlock_irqrestore(&sc->sbm_lock, flags); in sbmac_tx_timeout()
2444 struct sbmac_softc *sc = netdev_priv(dev); in sbmac_set_rx_mode() local
2446 spin_lock_irqsave(&sc->sbm_lock, flags); in sbmac_set_rx_mode()
2447 if ((dev->flags ^ sc->sbm_devflags) & IFF_PROMISC) { in sbmac_set_rx_mode()
2453 sbmac_promiscuous_mode(sc,1); in sbmac_set_rx_mode()
2456 sbmac_promiscuous_mode(sc,0); in sbmac_set_rx_mode()
2459 spin_unlock_irqrestore(&sc->sbm_lock, flags); in sbmac_set_rx_mode()
2465 sbmac_setmulti(sc); in sbmac_set_rx_mode()
2471 struct sbmac_softc *sc = netdev_priv(dev); in sbmac_mii_ioctl() local
2473 if (!netif_running(dev) || !sc->phy_dev) in sbmac_mii_ioctl()
2476 return phy_mii_ioctl(sc->phy_dev, rq, cmd); in sbmac_mii_ioctl()
2481 struct sbmac_softc *sc = netdev_priv(dev); in sbmac_close() local
2483 napi_disable(&sc->napi); in sbmac_close()
2485 phy_stop(sc->phy_dev); in sbmac_close()
2487 sbmac_set_channel_state(sc, sbmac_state_off); in sbmac_close()
2494 phy_disconnect(sc->phy_dev); in sbmac_close()
2495 sc->phy_dev = NULL; in sbmac_close()
2498 sbdma_emptyring(&(sc->sbm_txdma)); in sbmac_close()
2499 sbdma_emptyring(&(sc->sbm_rxdma)); in sbmac_close()
2506 struct sbmac_softc *sc = container_of(napi, struct sbmac_softc, napi); in sbmac_poll() local
2509 work_done = sbdma_rx_process(sc, &(sc->sbm_rxdma), budget, 1); in sbmac_poll()
2510 sbdma_tx_process(sc, &(sc->sbm_txdma), 1); in sbmac_poll()
2518 sc->sbm_imr); in sbmac_poll()
2521 (M_MAC_INT_CHANNEL << S_MAC_RX_CH0), sc->sbm_imr); in sbmac_poll()
2532 struct sbmac_softc *sc; in sbmac_probe() local
2573 sc = netdev_priv(dev); in sbmac_probe()
2574 sc->sbm_base = sbm_base; in sbmac_probe()
2596 struct sbmac_softc *sc = netdev_priv(dev); in sbmac_remove() local
2599 sbmac_uninitctx(sc); in sbmac_remove()
2600 mdiobus_unregister(sc->mii_bus); in sbmac_remove()
2601 mdiobus_free(sc->mii_bus); in sbmac_remove()
2602 iounmap(sc->sbm_base); in sbmac_remove()