Lines Matching refs:sc

286 static int sbdma_add_rcvbuffer(struct sbmac_softc *sc, struct sbmacdma *d,
290 static void sbdma_fillring(struct sbmac_softc *sc, struct sbmacdma *d);
291 static int sbdma_rx_process(struct sbmac_softc *sc, struct sbmacdma *d,
293 static void sbdma_tx_process(struct sbmac_softc *sc, struct sbmacdma *d,
300 static void sbmac_promiscuous_mode(struct sbmac_softc *sc, int onoff);
304 static void sbmac_setmulti(struct sbmac_softc *sc);
437 struct sbmac_softc *sc = (struct sbmac_softc *)bus->priv; in sbmac_mii_read() local
438 void __iomem *sbm_mdio = sc->sbm_mdio; in sbmac_mii_read()
531 struct sbmac_softc *sc = (struct sbmac_softc *)bus->priv; in sbmac_mii_write() local
532 void __iomem *sbm_mdio = sc->sbm_mdio; in sbmac_mii_write()
785 static int sbdma_add_rcvbuffer(struct sbmac_softc *sc, struct sbmacdma *d, in sbdma_add_rcvbuffer() argument
788 struct net_device *dev = sc->sbm_dev; in sbdma_add_rcvbuffer()
1019 static void sbdma_fillring(struct sbmac_softc *sc, struct sbmacdma *d) in sbdma_fillring() argument
1024 if (sbdma_add_rcvbuffer(sc, d, NULL) != 0) in sbdma_fillring()
1032 struct sbmac_softc *sc = netdev_priv(netdev); in sbmac_netpoll() local
1033 int irq = sc->sbm_dev->irq; in sbmac_netpoll()
1035 __raw_writeq(0, sc->sbm_imr); in sbmac_netpoll()
1042 sc->sbm_imr); in sbmac_netpoll()
1045 (M_MAC_INT_CHANNEL << S_MAC_RX_CH0), sc->sbm_imr); in sbmac_netpoll()
1066 static int sbdma_rx_process(struct sbmac_softc *sc, struct sbmacdma *d, in sbdma_rx_process() argument
1069 struct net_device *dev = sc->sbm_dev; in sbdma_rx_process()
1083 += __raw_readq(sc->sbm_rxdma.sbdma_oodpktlost) & 0xffff; in sbdma_rx_process()
1084 __raw_writeq(0, sc->sbm_rxdma.sbdma_oodpktlost); in sbdma_rx_process()
1140 if (unlikely(sbdma_add_rcvbuffer(sc, d, NULL) == in sbdma_rx_process()
1144 sbdma_add_rcvbuffer(sc, d, sb); in sbdma_rx_process()
1162 if (sc->rx_hw_checksum == ENABLE) { in sbdma_rx_process()
1194 sbdma_add_rcvbuffer(sc, d, sb); in sbdma_rx_process()
1231 static void sbdma_tx_process(struct sbmac_softc *sc, struct sbmacdma *d, in sbdma_tx_process() argument
1234 struct net_device *dev = sc->sbm_dev; in sbdma_tx_process()
1242 spin_lock_irqsave(&(sc->sbm_lock), flags); in sbdma_tx_process()
1314 spin_unlock_irqrestore(&(sc->sbm_lock), flags); in sbdma_tx_process()
1383 static void sbmac_uninitctx(struct sbmac_softc *sc) in sbmac_uninitctx() argument
1385 sbdma_uninitctx(&(sc->sbm_txdma)); in sbmac_uninitctx()
1386 sbdma_uninitctx(&(sc->sbm_rxdma)); in sbmac_uninitctx()
1658 static enum sbmac_state sbmac_set_channel_state(struct sbmac_softc *sc, in sbmac_set_channel_state() argument
1661 enum sbmac_state oldstate = sc->sbm_state; in sbmac_set_channel_state()
1676 sbmac_channel_start(sc); in sbmac_set_channel_state()
1679 sbmac_channel_stop(sc); in sbmac_set_channel_state()
1703 static void sbmac_promiscuous_mode(struct sbmac_softc *sc,int onoff) in sbmac_promiscuous_mode() argument
1707 if (sc->sbm_state != sbmac_state_on) in sbmac_promiscuous_mode()
1711 reg = __raw_readq(sc->sbm_rxfilter); in sbmac_promiscuous_mode()
1713 __raw_writeq(reg, sc->sbm_rxfilter); in sbmac_promiscuous_mode()
1716 reg = __raw_readq(sc->sbm_rxfilter); in sbmac_promiscuous_mode()
1718 __raw_writeq(reg, sc->sbm_rxfilter); in sbmac_promiscuous_mode()
1734 static void sbmac_set_iphdr_offset(struct sbmac_softc *sc) in sbmac_set_iphdr_offset() argument
1739 reg = __raw_readq(sc->sbm_rxfilter); in sbmac_set_iphdr_offset()
1741 __raw_writeq(reg, sc->sbm_rxfilter); in sbmac_set_iphdr_offset()
1746 sc->rx_hw_checksum = DISABLE; in sbmac_set_iphdr_offset()
1748 sc->rx_hw_checksum = ENABLE; in sbmac_set_iphdr_offset()
1986 struct sbmac_softc *sc = netdev_priv(dev); in sbmac_intr() local
1995 isr = __raw_readq(sc->sbm_isr) & ~M_MAC_COUNTER_ADDR; in sbmac_intr()
2006 sbdma_tx_process(sc,&(sc->sbm_txdma), 0); in sbmac_intr()
2009 if (napi_schedule_prep(&sc->napi)) { in sbmac_intr()
2010 __raw_writeq(0, sc->sbm_imr); in sbmac_intr()
2011 __napi_schedule(&sc->napi); in sbmac_intr()
2016 sbdma_rx_process(sc,&(sc->sbm_rxdma), in sbmac_intr()
2038 struct sbmac_softc *sc = netdev_priv(dev); in sbmac_start_tx() local
2042 spin_lock_irqsave(&sc->sbm_lock, flags); in sbmac_start_tx()
2049 if (sbdma_add_txbuffer(&(sc->sbm_txdma),skb)) { in sbmac_start_tx()
2052 spin_unlock_irqrestore(&sc->sbm_lock, flags); in sbmac_start_tx()
2057 spin_unlock_irqrestore(&sc->sbm_lock, flags); in sbmac_start_tx()
2076 static void sbmac_setmulti(struct sbmac_softc *sc) in sbmac_setmulti() argument
2082 struct net_device *dev = sc->sbm_dev; in sbmac_setmulti()
2091 port = sc->sbm_base + R_MAC_ADDR_BASE+(idx*sizeof(uint64_t)); in sbmac_setmulti()
2096 port = sc->sbm_base + R_MAC_HASH_BASE+(idx*sizeof(uint64_t)); in sbmac_setmulti()
2104 reg = __raw_readq(sc->sbm_rxfilter); in sbmac_setmulti()
2106 __raw_writeq(reg, sc->sbm_rxfilter); in sbmac_setmulti()
2113 reg = __raw_readq(sc->sbm_rxfilter); in sbmac_setmulti()
2115 __raw_writeq(reg, sc->sbm_rxfilter); in sbmac_setmulti()
2134 port = sc->sbm_base + R_MAC_ADDR_BASE+(idx * sizeof(uint64_t)); in sbmac_setmulti()
2145 reg = __raw_readq(sc->sbm_rxfilter); in sbmac_setmulti()
2147 __raw_writeq(reg, sc->sbm_rxfilter); in sbmac_setmulti()
2191 struct sbmac_softc *sc = netdev_priv(dev); in sbmac_init() local
2197 sc->sbm_dev = dev; in sbmac_init()
2198 sc->sbe_idx = idx; in sbmac_init()
2200 eaddr = sc->sbm_hwaddr; in sbmac_init()
2207 ea_reg = __raw_readq(sc->sbm_base + R_MAC_ETHERNET_ADDR); in sbmac_init()
2208 __raw_writeq(0, sc->sbm_base + R_MAC_ETHERNET_ADDR); in sbmac_init()
2223 sbmac_initctx(sc); in sbmac_init()
2229 spin_lock_init(&(sc->sbm_lock)); in sbmac_init()
2234 netif_napi_add(dev, &sc->napi, sbmac_poll, 16); in sbmac_init()
2239 sbmac_set_iphdr_offset(sc); in sbmac_init()
2241 sc->mii_bus = mdiobus_alloc(); in sbmac_init()
2242 if (sc->mii_bus == NULL) { in sbmac_init()
2247 sc->mii_bus->name = sbmac_mdio_string; in sbmac_init()
2248 snprintf(sc->mii_bus->id, MII_BUS_ID_SIZE, "%s-%x", in sbmac_init()
2250 sc->mii_bus->priv = sc; in sbmac_init()
2251 sc->mii_bus->read = sbmac_mii_read; in sbmac_init()
2252 sc->mii_bus->write = sbmac_mii_write; in sbmac_init()
2253 sc->mii_bus->irq = sc->phy_irq; in sbmac_init()
2255 sc->mii_bus->irq[i] = SBMAC_PHY_INT; in sbmac_init()
2257 sc->mii_bus->parent = &pldev->dev; in sbmac_init()
2261 err = mdiobus_register(sc->mii_bus); in sbmac_init()
2267 platform_set_drvdata(pldev, sc->mii_bus); in sbmac_init()
2278 if (sc->rx_hw_checksum == ENABLE) in sbmac_init()
2291 mdiobus_unregister(sc->mii_bus); in sbmac_init()
2293 mdiobus_free(sc->mii_bus); in sbmac_init()
2295 sbmac_uninitctx(sc); in sbmac_init()
2302 struct sbmac_softc *sc = netdev_priv(dev); in sbmac_open() local
2314 __raw_readq(sc->sbm_isr); in sbmac_open()
2322 sc->sbm_speed = sbmac_speed_none; in sbmac_open()
2323 sc->sbm_duplex = sbmac_duplex_none; in sbmac_open()
2324 sc->sbm_fc = sbmac_fc_none; in sbmac_open()
2325 sc->sbm_pause = -1; in sbmac_open()
2326 sc->sbm_link = 0; in sbmac_open()
2339 sbmac_set_channel_state(sc,sbmac_state_on); in sbmac_open()
2345 phy_start(sc->phy_dev); in sbmac_open()
2347 napi_enable(&sc->napi); in sbmac_open()
2359 struct sbmac_softc *sc = netdev_priv(dev); in sbmac_mii_probe() local
2364 phy_dev = sc->mii_bus->phy_map[i]; in sbmac_mii_probe()
2397 sc->phy_dev = phy_dev; in sbmac_mii_probe()
2405 struct sbmac_softc *sc = netdev_priv(dev); in sbmac_mii_poll() local
2406 struct phy_device *phy_dev = sc->phy_dev; in sbmac_mii_poll()
2411 link_chg = (sc->sbm_link != phy_dev->link); in sbmac_mii_poll()
2412 speed_chg = (sc->sbm_speed != phy_dev->speed); in sbmac_mii_poll()
2413 duplex_chg = (sc->sbm_duplex != phy_dev->duplex); in sbmac_mii_poll()
2414 pause_chg = (sc->sbm_pause != phy_dev->pause); in sbmac_mii_poll()
2421 sc->sbm_link = phy_dev->link; in sbmac_mii_poll()
2422 sc->sbm_speed = sbmac_speed_none; in sbmac_mii_poll()
2423 sc->sbm_duplex = sbmac_duplex_none; in sbmac_mii_poll()
2424 sc->sbm_fc = sbmac_fc_disabled; in sbmac_mii_poll()
2425 sc->sbm_pause = -1; in sbmac_mii_poll()
2438 fc_chg = (sc->sbm_fc != fc); in sbmac_mii_poll()
2443 spin_lock_irqsave(&sc->sbm_lock, flags); in sbmac_mii_poll()
2445 sc->sbm_speed = phy_dev->speed; in sbmac_mii_poll()
2446 sc->sbm_duplex = phy_dev->duplex; in sbmac_mii_poll()
2447 sc->sbm_fc = fc; in sbmac_mii_poll()
2448 sc->sbm_pause = phy_dev->pause; in sbmac_mii_poll()
2449 sc->sbm_link = phy_dev->link; in sbmac_mii_poll()
2452 sc->sbm_state != sbmac_state_off) { in sbmac_mii_poll()
2459 sbmac_channel_stop(sc); in sbmac_mii_poll()
2460 sbmac_channel_start(sc); in sbmac_mii_poll()
2463 spin_unlock_irqrestore(&sc->sbm_lock, flags); in sbmac_mii_poll()
2469 struct sbmac_softc *sc = netdev_priv(dev); in sbmac_tx_timeout() local
2472 spin_lock_irqsave(&sc->sbm_lock, flags); in sbmac_tx_timeout()
2478 spin_unlock_irqrestore(&sc->sbm_lock, flags); in sbmac_tx_timeout()
2489 struct sbmac_softc *sc = netdev_priv(dev); in sbmac_set_rx_mode() local
2491 spin_lock_irqsave(&sc->sbm_lock, flags); in sbmac_set_rx_mode()
2492 if ((dev->flags ^ sc->sbm_devflags) & IFF_PROMISC) { in sbmac_set_rx_mode()
2498 sbmac_promiscuous_mode(sc,1); in sbmac_set_rx_mode()
2501 sbmac_promiscuous_mode(sc,0); in sbmac_set_rx_mode()
2504 spin_unlock_irqrestore(&sc->sbm_lock, flags); in sbmac_set_rx_mode()
2510 sbmac_setmulti(sc); in sbmac_set_rx_mode()
2516 struct sbmac_softc *sc = netdev_priv(dev); in sbmac_mii_ioctl() local
2518 if (!netif_running(dev) || !sc->phy_dev) in sbmac_mii_ioctl()
2521 return phy_mii_ioctl(sc->phy_dev, rq, cmd); in sbmac_mii_ioctl()
2526 struct sbmac_softc *sc = netdev_priv(dev); in sbmac_close() local
2528 napi_disable(&sc->napi); in sbmac_close()
2530 phy_stop(sc->phy_dev); in sbmac_close()
2532 sbmac_set_channel_state(sc, sbmac_state_off); in sbmac_close()
2539 phy_disconnect(sc->phy_dev); in sbmac_close()
2540 sc->phy_dev = NULL; in sbmac_close()
2543 sbdma_emptyring(&(sc->sbm_txdma)); in sbmac_close()
2544 sbdma_emptyring(&(sc->sbm_rxdma)); in sbmac_close()
2551 struct sbmac_softc *sc = container_of(napi, struct sbmac_softc, napi); in sbmac_poll() local
2554 work_done = sbdma_rx_process(sc, &(sc->sbm_rxdma), budget, 1); in sbmac_poll()
2555 sbdma_tx_process(sc, &(sc->sbm_txdma), 1); in sbmac_poll()
2563 sc->sbm_imr); in sbmac_poll()
2566 (M_MAC_INT_CHANNEL << S_MAC_RX_CH0), sc->sbm_imr); in sbmac_poll()
2577 struct sbmac_softc *sc; in sbmac_probe() local
2618 sc = netdev_priv(dev); in sbmac_probe()
2619 sc->sbm_base = sbm_base; in sbmac_probe()
2641 struct sbmac_softc *sc = netdev_priv(dev); in sbmac_remove() local
2644 sbmac_uninitctx(sc); in sbmac_remove()
2645 mdiobus_unregister(sc->mii_bus); in sbmac_remove()
2646 mdiobus_free(sc->mii_bus); in sbmac_remove()
2647 iounmap(sc->sbm_base); in sbmac_remove()