Lines Matching refs:bp

30 static u16 dnet_readw_mac(struct dnet *bp, u16 reg)  in dnet_readw_mac()  argument
35 dnet_writel(bp, reg, MACREG_ADDR); in dnet_readw_mac()
42 data_read = dnet_readl(bp, MACREG_DATA); in dnet_readw_mac()
49 static void dnet_writew_mac(struct dnet *bp, u16 reg, u16 val) in dnet_writew_mac() argument
52 dnet_writel(bp, val, MACREG_DATA); in dnet_writew_mac()
55 dnet_writel(bp, reg | DNET_INTERNAL_WRITE, MACREG_ADDR); in dnet_writew_mac()
62 static void __dnet_set_hwaddr(struct dnet *bp) in __dnet_set_hwaddr() argument
66 tmp = be16_to_cpup((__be16 *)bp->dev->dev_addr); in __dnet_set_hwaddr()
67 dnet_writew_mac(bp, DNET_INTERNAL_MAC_ADDR_0_REG, tmp); in __dnet_set_hwaddr()
68 tmp = be16_to_cpup((__be16 *)(bp->dev->dev_addr + 2)); in __dnet_set_hwaddr()
69 dnet_writew_mac(bp, DNET_INTERNAL_MAC_ADDR_1_REG, tmp); in __dnet_set_hwaddr()
70 tmp = be16_to_cpup((__be16 *)(bp->dev->dev_addr + 4)); in __dnet_set_hwaddr()
71 dnet_writew_mac(bp, DNET_INTERNAL_MAC_ADDR_2_REG, tmp); in __dnet_set_hwaddr()
74 static void dnet_get_hwaddr(struct dnet *bp) in dnet_get_hwaddr() argument
91 tmp = dnet_readw_mac(bp, DNET_INTERNAL_MAC_ADDR_0_REG); in dnet_get_hwaddr()
93 tmp = dnet_readw_mac(bp, DNET_INTERNAL_MAC_ADDR_1_REG); in dnet_get_hwaddr()
95 tmp = dnet_readw_mac(bp, DNET_INTERNAL_MAC_ADDR_2_REG); in dnet_get_hwaddr()
99 memcpy(bp->dev->dev_addr, addr, sizeof(addr)); in dnet_get_hwaddr()
104 struct dnet *bp = bus->priv; in dnet_mdio_read() local
107 while (!(dnet_readw_mac(bp, DNET_INTERNAL_GMII_MNG_CTL_REG) in dnet_mdio_read()
120 dnet_writew_mac(bp, DNET_INTERNAL_GMII_MNG_CTL_REG, value); in dnet_mdio_read()
123 while (!(dnet_readw_mac(bp, DNET_INTERNAL_GMII_MNG_CTL_REG) in dnet_mdio_read()
127 value = dnet_readw_mac(bp, DNET_INTERNAL_GMII_MNG_DAT_REG); in dnet_mdio_read()
137 struct dnet *bp = bus->priv; in dnet_mdio_write() local
142 while (!(dnet_readw_mac(bp, DNET_INTERNAL_GMII_MNG_CTL_REG) in dnet_mdio_write()
161 dnet_writew_mac(bp, DNET_INTERNAL_GMII_MNG_DAT_REG, value); in dnet_mdio_write()
164 dnet_writew_mac(bp, DNET_INTERNAL_GMII_MNG_CTL_REG, tmp); in dnet_mdio_write()
166 while (!(dnet_readw_mac(bp, DNET_INTERNAL_GMII_MNG_CTL_REG) in dnet_mdio_write()
175 struct dnet *bp = netdev_priv(dev); in dnet_handle_link_change() local
182 spin_lock_irqsave(&bp->lock, flags); in dnet_handle_link_change()
184 mode_reg = dnet_readw_mac(bp, DNET_INTERNAL_MODE_REG); in dnet_handle_link_change()
185 ctl_reg = dnet_readw_mac(bp, DNET_INTERNAL_RXTX_CONTROL_REG); in dnet_handle_link_change()
188 if (bp->duplex != phydev->duplex) { in dnet_handle_link_change()
196 bp->duplex = phydev->duplex; in dnet_handle_link_change()
200 if (bp->speed != phydev->speed) { in dnet_handle_link_change()
217 bp->speed = phydev->speed; in dnet_handle_link_change()
221 if (phydev->link != bp->link) { in dnet_handle_link_change()
229 bp->speed = 0; in dnet_handle_link_change()
230 bp->duplex = -1; in dnet_handle_link_change()
232 bp->link = phydev->link; in dnet_handle_link_change()
238 dnet_writew_mac(bp, DNET_INTERNAL_RXTX_CONTROL_REG, ctl_reg); in dnet_handle_link_change()
239 dnet_writew_mac(bp, DNET_INTERNAL_MODE_REG, mode_reg); in dnet_handle_link_change()
242 spin_unlock_irqrestore(&bp->lock, flags); in dnet_handle_link_change()
256 struct dnet *bp = netdev_priv(dev); in dnet_mii_probe() local
260 phydev = phy_find_first(bp->mii_bus); in dnet_mii_probe()
270 if (bp->capabilities & DNET_HAS_RMII) { in dnet_mii_probe()
286 if (bp->capabilities & DNET_HAS_GIGABIT) in dnet_mii_probe()
295 bp->link = 0; in dnet_mii_probe()
296 bp->speed = 0; in dnet_mii_probe()
297 bp->duplex = -1; in dnet_mii_probe()
302 static int dnet_mii_init(struct dnet *bp) in dnet_mii_init() argument
306 bp->mii_bus = mdiobus_alloc(); in dnet_mii_init()
307 if (bp->mii_bus == NULL) in dnet_mii_init()
310 bp->mii_bus->name = "dnet_mii_bus"; in dnet_mii_init()
311 bp->mii_bus->read = &dnet_mdio_read; in dnet_mii_init()
312 bp->mii_bus->write = &dnet_mdio_write; in dnet_mii_init()
314 snprintf(bp->mii_bus->id, MII_BUS_ID_SIZE, "%s-%x", in dnet_mii_init()
315 bp->pdev->name, bp->pdev->id); in dnet_mii_init()
317 bp->mii_bus->priv = bp; in dnet_mii_init()
319 if (mdiobus_register(bp->mii_bus)) { in dnet_mii_init()
324 if (dnet_mii_probe(bp->dev) != 0) { in dnet_mii_init()
332 mdiobus_unregister(bp->mii_bus); in dnet_mii_init()
334 mdiobus_free(bp->mii_bus); in dnet_mii_init()
344 static void dnet_update_stats(struct dnet *bp) in dnet_update_stats() argument
346 u32 __iomem *reg = bp->regs + DNET_RX_PKT_IGNR_CNT; in dnet_update_stats()
347 u32 *p = &bp->hw_stats.rx_pkt_ignr; in dnet_update_stats()
348 u32 *end = &bp->hw_stats.rx_byte + 1; in dnet_update_stats()
356 reg = bp->regs + DNET_TX_UNICAST_CNT; in dnet_update_stats()
357 p = &bp->hw_stats.tx_unicast; in dnet_update_stats()
358 end = &bp->hw_stats.tx_byte + 1; in dnet_update_stats()
369 struct dnet *bp = container_of(napi, struct dnet, napi); in dnet_poll() local
370 struct net_device *dev = bp->dev; in dnet_poll()
384 if (!(dnet_readl(bp, RX_FIFO_WCNT) >> 16)) in dnet_poll()
387 cmd_word = dnet_readl(bp, RX_LEN_FIFO); in dnet_poll()
404 *data_ptr++ = dnet_readl(bp, RX_DATA_FIFO); in dnet_poll()
419 int_enable = dnet_readl(bp, INTR_ENB); in dnet_poll()
421 dnet_writel(bp, int_enable, INTR_ENB); in dnet_poll()
430 struct dnet *bp = netdev_priv(dev); in dnet_interrupt() local
435 spin_lock_irqsave(&bp->lock, flags); in dnet_interrupt()
438 int_src = dnet_readl(bp, INTR_SRC); in dnet_interrupt()
439 int_enable = dnet_readl(bp, INTR_ENB); in dnet_interrupt()
444 int_enable = dnet_readl(bp, INTR_ENB); in dnet_interrupt()
446 dnet_writel(bp, int_enable, INTR_ENB); in dnet_interrupt()
455 dnet_readl(bp, RX_STATUS), int_current); in dnet_interrupt()
457 dnet_writel(bp, DNET_SYS_CTL_RXFIFOFLUSH, SYS_CTL); in dnet_interrupt()
459 dnet_writel(bp, 0, SYS_CTL); in dnet_interrupt()
467 dnet_readl(bp, TX_STATUS), int_current); in dnet_interrupt()
469 dnet_writel(bp, DNET_SYS_CTL_TXFIFOFLUSH, SYS_CTL); in dnet_interrupt()
471 dnet_writel(bp, 0, SYS_CTL); in dnet_interrupt()
476 if (napi_schedule_prep(&bp->napi)) { in dnet_interrupt()
482 int_enable = dnet_readl(bp, INTR_ENB); in dnet_interrupt()
484 dnet_writel(bp, int_enable, INTR_ENB); in dnet_interrupt()
485 __napi_schedule(&bp->napi); in dnet_interrupt()
493 spin_unlock_irqrestore(&bp->lock, flags); in dnet_interrupt()
514 struct dnet *bp = netdev_priv(dev); in dnet_start_xmit() local
520 tx_status = dnet_readl(bp, TX_STATUS); in dnet_start_xmit()
529 spin_lock_irqsave(&bp->lock, flags); in dnet_start_xmit()
531 tx_status = dnet_readl(bp, TX_STATUS); in dnet_start_xmit()
540 if (wrsz < (DNET_FIFO_SIZE - dnet_readl(bp, TX_FIFO_WCNT))) { in dnet_start_xmit()
542 dnet_writel(bp, *bufp++, TX_DATA_FIFO); in dnet_start_xmit()
548 dnet_writel(bp, tx_cmd, TX_LEN_FIFO); in dnet_start_xmit()
551 if (dnet_readl(bp, TX_FIFO_WCNT) > DNET_FIFO_TX_DATA_AF_TH) { in dnet_start_xmit()
553 tx_status = dnet_readl(bp, INTR_SRC); in dnet_start_xmit()
554 irq_enable = dnet_readl(bp, INTR_ENB); in dnet_start_xmit()
556 dnet_writel(bp, irq_enable, INTR_ENB); in dnet_start_xmit()
564 spin_unlock_irqrestore(&bp->lock, flags); in dnet_start_xmit()
569 static void dnet_reset_hw(struct dnet *bp) in dnet_reset_hw() argument
572 dnet_writew_mac(bp, DNET_INTERNAL_MODE_REG, DNET_INTERNAL_MODE_FCEN); in dnet_reset_hw()
578 dnet_writel(bp, DNET_FIFO_RX_CMD_AF_TH, RX_FIFO_TH); in dnet_reset_hw()
583 dnet_writel(bp, DNET_FIFO_TX_DATA_AE_TH, TX_FIFO_TH); in dnet_reset_hw()
586 dnet_writel(bp, DNET_SYS_CTL_RXFIFOFLUSH | DNET_SYS_CTL_TXFIFOFLUSH, in dnet_reset_hw()
589 dnet_writel(bp, 0, SYS_CTL); in dnet_reset_hw()
592 static void dnet_init_hw(struct dnet *bp) in dnet_init_hw() argument
596 dnet_reset_hw(bp); in dnet_init_hw()
597 __dnet_set_hwaddr(bp); in dnet_init_hw()
599 config = dnet_readw_mac(bp, DNET_INTERNAL_RXTX_CONTROL_REG); in dnet_init_hw()
601 if (bp->dev->flags & IFF_PROMISC) in dnet_init_hw()
604 if (!(bp->dev->flags & IFF_BROADCAST)) in dnet_init_hw()
613 dnet_writew_mac(bp, DNET_INTERNAL_RXTX_CONTROL_REG, config); in dnet_init_hw()
616 config = dnet_readl(bp, INTR_SRC); in dnet_init_hw()
619 dnet_writel(bp, DNET_INTR_ENB_GLOBAL_ENABLE | DNET_INTR_ENB_RX_SUMMARY | in dnet_init_hw()
628 struct dnet *bp = netdev_priv(dev); in dnet_open() local
634 napi_enable(&bp->napi); in dnet_open()
635 dnet_init_hw(bp); in dnet_open()
649 struct dnet *bp = netdev_priv(dev); in dnet_close() local
652 napi_disable(&bp->napi); in dnet_close()
657 dnet_reset_hw(bp); in dnet_close()
699 struct dnet *bp = netdev_priv(dev); in dnet_get_stats() local
701 struct dnet_stats *hwstat = &bp->hw_stats; in dnet_get_stats()
704 dnet_update_stats(bp); in dnet_get_stats()
776 struct dnet *bp; in dnet_probe() local
783 dev = alloc_etherdev(sizeof(*bp)); in dnet_probe()
790 bp = netdev_priv(dev); in dnet_probe()
791 bp->dev = dev; in dnet_probe()
796 spin_lock_init(&bp->lock); in dnet_probe()
799 bp->regs = devm_ioremap_resource(&pdev->dev, res); in dnet_probe()
800 if (IS_ERR(bp->regs)) { in dnet_probe()
801 err = PTR_ERR(bp->regs); in dnet_probe()
814 netif_napi_add(dev, &bp->napi, dnet_poll, 64); in dnet_probe()
817 dev->base_addr = (unsigned long)bp->regs; in dnet_probe()
819 bp->capabilities = dnet_readl(bp, VERCAPS) & DNET_CAPS_MASK; in dnet_probe()
821 dnet_get_hwaddr(bp); in dnet_probe()
826 __dnet_set_hwaddr(bp); in dnet_probe()
842 err = dnet_mii_init(bp); in dnet_probe()
847 bp->regs, (unsigned int)res->start, dev->irq, dev->dev_addr); in dnet_probe()
849 (bp->capabilities & DNET_HAS_MDIO) ? "" : "no ", in dnet_probe()
850 (bp->capabilities & DNET_HAS_IRQ) ? "" : "no ", in dnet_probe()
851 (bp->capabilities & DNET_HAS_GIGABIT) ? "" : "no ", in dnet_probe()
852 (bp->capabilities & DNET_HAS_DMA) ? "" : "no "); in dnet_probe()
871 struct dnet *bp; in dnet_remove() local
876 bp = netdev_priv(dev); in dnet_remove()
879 mdiobus_unregister(bp->mii_bus); in dnet_remove()
880 mdiobus_free(bp->mii_bus); in dnet_remove()