Lines Matching refs:sc
285 static int sbdma_add_rcvbuffer(struct sbmac_softc *sc, struct sbmacdma *d,
289 static void sbdma_fillring(struct sbmac_softc *sc, struct sbmacdma *d);
290 static int sbdma_rx_process(struct sbmac_softc *sc, struct sbmacdma *d,
292 static void sbdma_tx_process(struct sbmac_softc *sc, struct sbmacdma *d,
299 static void sbmac_promiscuous_mode(struct sbmac_softc *sc, int onoff);
303 static void sbmac_setmulti(struct sbmac_softc *sc);
436 struct sbmac_softc *sc = (struct sbmac_softc *)bus->priv; in sbmac_mii_read() local
437 void __iomem *sbm_mdio = sc->sbm_mdio; in sbmac_mii_read()
530 struct sbmac_softc *sc = (struct sbmac_softc *)bus->priv; in sbmac_mii_write() local
531 void __iomem *sbm_mdio = sc->sbm_mdio; in sbmac_mii_write()
784 static int sbdma_add_rcvbuffer(struct sbmac_softc *sc, struct sbmacdma *d, in sbdma_add_rcvbuffer() argument
787 struct net_device *dev = sc->sbm_dev; in sbdma_add_rcvbuffer()
1018 static void sbdma_fillring(struct sbmac_softc *sc, struct sbmacdma *d) in sbdma_fillring() argument
1023 if (sbdma_add_rcvbuffer(sc, d, NULL) != 0) in sbdma_fillring()
1031 struct sbmac_softc *sc = netdev_priv(netdev); in sbmac_netpoll() local
1032 int irq = sc->sbm_dev->irq; in sbmac_netpoll()
1034 __raw_writeq(0, sc->sbm_imr); in sbmac_netpoll()
1041 sc->sbm_imr); in sbmac_netpoll()
1044 (M_MAC_INT_CHANNEL << S_MAC_RX_CH0), sc->sbm_imr); in sbmac_netpoll()
1065 static int sbdma_rx_process(struct sbmac_softc *sc, struct sbmacdma *d, in sbdma_rx_process() argument
1068 struct net_device *dev = sc->sbm_dev; in sbdma_rx_process()
1082 += __raw_readq(sc->sbm_rxdma.sbdma_oodpktlost) & 0xffff; in sbdma_rx_process()
1083 __raw_writeq(0, sc->sbm_rxdma.sbdma_oodpktlost); in sbdma_rx_process()
1139 if (unlikely(sbdma_add_rcvbuffer(sc, d, NULL) == in sbdma_rx_process()
1143 sbdma_add_rcvbuffer(sc, d, sb); in sbdma_rx_process()
1161 if (sc->rx_hw_checksum == ENABLE) { in sbdma_rx_process()
1193 sbdma_add_rcvbuffer(sc, d, sb); in sbdma_rx_process()
1230 static void sbdma_tx_process(struct sbmac_softc *sc, struct sbmacdma *d, in sbdma_tx_process() argument
1233 struct net_device *dev = sc->sbm_dev; in sbdma_tx_process()
1241 spin_lock_irqsave(&(sc->sbm_lock), flags); in sbdma_tx_process()
1313 spin_unlock_irqrestore(&(sc->sbm_lock), flags); in sbdma_tx_process()
1378 static void sbmac_uninitctx(struct sbmac_softc *sc) in sbmac_uninitctx() argument
1380 sbdma_uninitctx(&(sc->sbm_txdma)); in sbmac_uninitctx()
1381 sbdma_uninitctx(&(sc->sbm_rxdma)); in sbmac_uninitctx()
1653 static enum sbmac_state sbmac_set_channel_state(struct sbmac_softc *sc, in sbmac_set_channel_state() argument
1656 enum sbmac_state oldstate = sc->sbm_state; in sbmac_set_channel_state()
1671 sbmac_channel_start(sc); in sbmac_set_channel_state()
1674 sbmac_channel_stop(sc); in sbmac_set_channel_state()
1698 static void sbmac_promiscuous_mode(struct sbmac_softc *sc,int onoff) in sbmac_promiscuous_mode() argument
1702 if (sc->sbm_state != sbmac_state_on) in sbmac_promiscuous_mode()
1706 reg = __raw_readq(sc->sbm_rxfilter); in sbmac_promiscuous_mode()
1708 __raw_writeq(reg, sc->sbm_rxfilter); 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()
1729 static void sbmac_set_iphdr_offset(struct sbmac_softc *sc) in sbmac_set_iphdr_offset() argument
1734 reg = __raw_readq(sc->sbm_rxfilter); in sbmac_set_iphdr_offset()
1736 __raw_writeq(reg, sc->sbm_rxfilter); in sbmac_set_iphdr_offset()
1741 sc->rx_hw_checksum = DISABLE; in sbmac_set_iphdr_offset()
1743 sc->rx_hw_checksum = ENABLE; in sbmac_set_iphdr_offset()
1981 struct sbmac_softc *sc = netdev_priv(dev); in sbmac_intr() local
1990 isr = __raw_readq(sc->sbm_isr) & ~M_MAC_COUNTER_ADDR; in sbmac_intr()
2001 sbdma_tx_process(sc,&(sc->sbm_txdma), 0); in sbmac_intr()
2004 if (napi_schedule_prep(&sc->napi)) { in sbmac_intr()
2005 __raw_writeq(0, sc->sbm_imr); in sbmac_intr()
2006 __napi_schedule(&sc->napi); in sbmac_intr()
2011 sbdma_rx_process(sc,&(sc->sbm_rxdma), in sbmac_intr()
2033 struct sbmac_softc *sc = netdev_priv(dev); in sbmac_start_tx() local
2037 spin_lock_irqsave(&sc->sbm_lock, flags); in sbmac_start_tx()
2044 if (sbdma_add_txbuffer(&(sc->sbm_txdma),skb)) { in sbmac_start_tx()
2047 spin_unlock_irqrestore(&sc->sbm_lock, flags); in sbmac_start_tx()
2052 spin_unlock_irqrestore(&sc->sbm_lock, flags); in sbmac_start_tx()
2071 static void sbmac_setmulti(struct sbmac_softc *sc) in sbmac_setmulti() argument
2077 struct net_device *dev = sc->sbm_dev; in sbmac_setmulti()
2086 port = sc->sbm_base + R_MAC_ADDR_BASE+(idx*sizeof(uint64_t)); in sbmac_setmulti()
2091 port = sc->sbm_base + R_MAC_HASH_BASE+(idx*sizeof(uint64_t)); in sbmac_setmulti()
2099 reg = __raw_readq(sc->sbm_rxfilter); in sbmac_setmulti()
2101 __raw_writeq(reg, sc->sbm_rxfilter); in sbmac_setmulti()
2108 reg = __raw_readq(sc->sbm_rxfilter); in sbmac_setmulti()
2110 __raw_writeq(reg, sc->sbm_rxfilter); in sbmac_setmulti()
2129 port = sc->sbm_base + R_MAC_ADDR_BASE+(idx * sizeof(uint64_t)); in sbmac_setmulti()
2140 reg = __raw_readq(sc->sbm_rxfilter); in sbmac_setmulti()
2142 __raw_writeq(reg, sc->sbm_rxfilter); in sbmac_setmulti()
2176 struct sbmac_softc *sc = netdev_priv(dev); in sbmac_init() local
2182 sc->sbm_dev = dev; in sbmac_init()
2183 sc->sbe_idx = idx; in sbmac_init()
2185 eaddr = sc->sbm_hwaddr; in sbmac_init()
2192 ea_reg = __raw_readq(sc->sbm_base + R_MAC_ETHERNET_ADDR); in sbmac_init()
2193 __raw_writeq(0, sc->sbm_base + R_MAC_ETHERNET_ADDR); in sbmac_init()
2208 sbmac_initctx(sc); in sbmac_init()
2214 spin_lock_init(&(sc->sbm_lock)); in sbmac_init()
2221 netif_napi_add(dev, &sc->napi, sbmac_poll, 16); in sbmac_init()
2226 sbmac_set_iphdr_offset(sc); in sbmac_init()
2228 sc->mii_bus = mdiobus_alloc(); in sbmac_init()
2229 if (sc->mii_bus == NULL) { in sbmac_init()
2234 sc->mii_bus->name = sbmac_mdio_string; in sbmac_init()
2235 snprintf(sc->mii_bus->id, MII_BUS_ID_SIZE, "%s-%x", in sbmac_init()
2237 sc->mii_bus->priv = sc; in sbmac_init()
2238 sc->mii_bus->read = sbmac_mii_read; in sbmac_init()
2239 sc->mii_bus->write = sbmac_mii_write; in sbmac_init()
2241 sc->mii_bus->parent = &pldev->dev; in sbmac_init()
2245 err = mdiobus_register(sc->mii_bus); in sbmac_init()
2251 platform_set_drvdata(pldev, sc->mii_bus); in sbmac_init()
2262 if (sc->rx_hw_checksum == ENABLE) in sbmac_init()
2275 mdiobus_unregister(sc->mii_bus); in sbmac_init()
2277 mdiobus_free(sc->mii_bus); in sbmac_init()
2279 sbmac_uninitctx(sc); in sbmac_init()
2286 struct sbmac_softc *sc = netdev_priv(dev); in sbmac_open() local
2298 __raw_readq(sc->sbm_isr); in sbmac_open()
2306 sc->sbm_speed = sbmac_speed_none; in sbmac_open()
2307 sc->sbm_duplex = sbmac_duplex_none; in sbmac_open()
2308 sc->sbm_fc = sbmac_fc_none; in sbmac_open()
2309 sc->sbm_pause = -1; in sbmac_open()
2310 sc->sbm_link = 0; in sbmac_open()
2323 sbmac_set_channel_state(sc,sbmac_state_on); in sbmac_open()
2329 phy_start(sc->phy_dev); in sbmac_open()
2331 napi_enable(&sc->napi); in sbmac_open()
2343 struct sbmac_softc *sc = netdev_priv(dev); in sbmac_mii_probe() local
2346 phy_dev = phy_find_first(sc->mii_bus); in sbmac_mii_probe()
2375 sc->phy_dev = phy_dev; in sbmac_mii_probe()
2383 struct sbmac_softc *sc = netdev_priv(dev); in sbmac_mii_poll() local
2384 struct phy_device *phy_dev = sc->phy_dev; in sbmac_mii_poll()
2389 link_chg = (sc->sbm_link != phy_dev->link); in sbmac_mii_poll()
2390 speed_chg = (sc->sbm_speed != phy_dev->speed); in sbmac_mii_poll()
2391 duplex_chg = (sc->sbm_duplex != phy_dev->duplex); in sbmac_mii_poll()
2392 pause_chg = (sc->sbm_pause != phy_dev->pause); in sbmac_mii_poll()
2399 sc->sbm_link = phy_dev->link; in sbmac_mii_poll()
2400 sc->sbm_speed = sbmac_speed_none; in sbmac_mii_poll()
2401 sc->sbm_duplex = sbmac_duplex_none; in sbmac_mii_poll()
2402 sc->sbm_fc = sbmac_fc_disabled; in sbmac_mii_poll()
2403 sc->sbm_pause = -1; in sbmac_mii_poll()
2416 fc_chg = (sc->sbm_fc != fc); in sbmac_mii_poll()
2421 spin_lock_irqsave(&sc->sbm_lock, flags); in sbmac_mii_poll()
2423 sc->sbm_speed = phy_dev->speed; in sbmac_mii_poll()
2424 sc->sbm_duplex = phy_dev->duplex; in sbmac_mii_poll()
2425 sc->sbm_fc = fc; in sbmac_mii_poll()
2426 sc->sbm_pause = phy_dev->pause; in sbmac_mii_poll()
2427 sc->sbm_link = phy_dev->link; in sbmac_mii_poll()
2430 sc->sbm_state != sbmac_state_off) { in sbmac_mii_poll()
2437 sbmac_channel_stop(sc); in sbmac_mii_poll()
2438 sbmac_channel_start(sc); in sbmac_mii_poll()
2441 spin_unlock_irqrestore(&sc->sbm_lock, flags); in sbmac_mii_poll()
2447 struct sbmac_softc *sc = netdev_priv(dev); in sbmac_tx_timeout() local
2450 spin_lock_irqsave(&sc->sbm_lock, flags); in sbmac_tx_timeout()
2456 spin_unlock_irqrestore(&sc->sbm_lock, flags); in sbmac_tx_timeout()
2467 struct sbmac_softc *sc = netdev_priv(dev); in sbmac_set_rx_mode() local
2469 spin_lock_irqsave(&sc->sbm_lock, flags); in sbmac_set_rx_mode()
2470 if ((dev->flags ^ sc->sbm_devflags) & IFF_PROMISC) { in sbmac_set_rx_mode()
2476 sbmac_promiscuous_mode(sc,1); in sbmac_set_rx_mode()
2479 sbmac_promiscuous_mode(sc,0); in sbmac_set_rx_mode()
2482 spin_unlock_irqrestore(&sc->sbm_lock, flags); in sbmac_set_rx_mode()
2488 sbmac_setmulti(sc); in sbmac_set_rx_mode()
2494 struct sbmac_softc *sc = netdev_priv(dev); in sbmac_mii_ioctl() local
2496 if (!netif_running(dev) || !sc->phy_dev) in sbmac_mii_ioctl()
2499 return phy_mii_ioctl(sc->phy_dev, rq, cmd); in sbmac_mii_ioctl()
2504 struct sbmac_softc *sc = netdev_priv(dev); in sbmac_close() local
2506 napi_disable(&sc->napi); in sbmac_close()
2508 phy_stop(sc->phy_dev); in sbmac_close()
2510 sbmac_set_channel_state(sc, sbmac_state_off); in sbmac_close()
2517 phy_disconnect(sc->phy_dev); in sbmac_close()
2518 sc->phy_dev = NULL; in sbmac_close()
2521 sbdma_emptyring(&(sc->sbm_txdma)); in sbmac_close()
2522 sbdma_emptyring(&(sc->sbm_rxdma)); in sbmac_close()
2529 struct sbmac_softc *sc = container_of(napi, struct sbmac_softc, napi); in sbmac_poll() local
2532 work_done = sbdma_rx_process(sc, &(sc->sbm_rxdma), budget, 1); in sbmac_poll()
2533 sbdma_tx_process(sc, &(sc->sbm_txdma), 1); in sbmac_poll()
2541 sc->sbm_imr); in sbmac_poll()
2544 (M_MAC_INT_CHANNEL << S_MAC_RX_CH0), sc->sbm_imr); in sbmac_poll()
2555 struct sbmac_softc *sc; in sbmac_probe() local
2596 sc = netdev_priv(dev); in sbmac_probe()
2597 sc->sbm_base = sbm_base; in sbmac_probe()
2619 struct sbmac_softc *sc = netdev_priv(dev); in sbmac_remove() local
2622 sbmac_uninitctx(sc); in sbmac_remove()
2623 mdiobus_unregister(sc->mii_bus); in sbmac_remove()
2624 mdiobus_free(sc->mii_bus); in sbmac_remove()
2625 iounmap(sc->sbm_base); in sbmac_remove()