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
176 struct phy_device *phydev = bp->phy_dev; in dnet_handle_link_change()
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
262 if (bp->mii_bus->phy_map[phy_addr]) { in dnet_mii_probe()
263 phydev = bp->mii_bus->phy_map[phy_addr]; in dnet_mii_probe()
276 if (bp->capabilities & DNET_HAS_RMII) { in dnet_mii_probe()
292 if (bp->capabilities & DNET_HAS_GIGABIT) in dnet_mii_probe()
301 bp->link = 0; in dnet_mii_probe()
302 bp->speed = 0; in dnet_mii_probe()
303 bp->duplex = -1; in dnet_mii_probe()
304 bp->phy_dev = phydev; in dnet_mii_probe()
309 static int dnet_mii_init(struct dnet *bp) in dnet_mii_init() argument
313 bp->mii_bus = mdiobus_alloc(); in dnet_mii_init()
314 if (bp->mii_bus == NULL) in dnet_mii_init()
317 bp->mii_bus->name = "dnet_mii_bus"; in dnet_mii_init()
318 bp->mii_bus->read = &dnet_mdio_read; in dnet_mii_init()
319 bp->mii_bus->write = &dnet_mdio_write; in dnet_mii_init()
321 snprintf(bp->mii_bus->id, MII_BUS_ID_SIZE, "%s-%x", in dnet_mii_init()
322 bp->pdev->name, bp->pdev->id); in dnet_mii_init()
324 bp->mii_bus->priv = bp; in dnet_mii_init()
326 bp->mii_bus->irq = devm_kmalloc(&bp->pdev->dev, in dnet_mii_init()
328 if (!bp->mii_bus->irq) { in dnet_mii_init()
334 bp->mii_bus->irq[i] = PHY_POLL; in dnet_mii_init()
336 if (mdiobus_register(bp->mii_bus)) { in dnet_mii_init()
341 if (dnet_mii_probe(bp->dev) != 0) { in dnet_mii_init()
349 mdiobus_unregister(bp->mii_bus); in dnet_mii_init()
351 mdiobus_free(bp->mii_bus); in dnet_mii_init()
361 static void dnet_update_stats(struct dnet *bp) in dnet_update_stats() argument
363 u32 __iomem *reg = bp->regs + DNET_RX_PKT_IGNR_CNT; in dnet_update_stats()
364 u32 *p = &bp->hw_stats.rx_pkt_ignr; in dnet_update_stats()
365 u32 *end = &bp->hw_stats.rx_byte + 1; in dnet_update_stats()
373 reg = bp->regs + DNET_TX_UNICAST_CNT; in dnet_update_stats()
374 p = &bp->hw_stats.tx_unicast; in dnet_update_stats()
375 end = &bp->hw_stats.tx_byte + 1; in dnet_update_stats()
386 struct dnet *bp = container_of(napi, struct dnet, napi); in dnet_poll() local
387 struct net_device *dev = bp->dev; in dnet_poll()
401 if (!(dnet_readl(bp, RX_FIFO_WCNT) >> 16)) in dnet_poll()
404 cmd_word = dnet_readl(bp, RX_LEN_FIFO); in dnet_poll()
421 *data_ptr++ = dnet_readl(bp, RX_DATA_FIFO); in dnet_poll()
436 int_enable = dnet_readl(bp, INTR_ENB); in dnet_poll()
438 dnet_writel(bp, int_enable, INTR_ENB); in dnet_poll()
447 struct dnet *bp = netdev_priv(dev); in dnet_interrupt() local
452 spin_lock_irqsave(&bp->lock, flags); in dnet_interrupt()
455 int_src = dnet_readl(bp, INTR_SRC); in dnet_interrupt()
456 int_enable = dnet_readl(bp, INTR_ENB); in dnet_interrupt()
461 int_enable = dnet_readl(bp, INTR_ENB); in dnet_interrupt()
463 dnet_writel(bp, int_enable, INTR_ENB); in dnet_interrupt()
472 dnet_readl(bp, RX_STATUS), int_current); in dnet_interrupt()
474 dnet_writel(bp, DNET_SYS_CTL_RXFIFOFLUSH, SYS_CTL); in dnet_interrupt()
476 dnet_writel(bp, 0, SYS_CTL); in dnet_interrupt()
484 dnet_readl(bp, TX_STATUS), int_current); in dnet_interrupt()
486 dnet_writel(bp, DNET_SYS_CTL_TXFIFOFLUSH, SYS_CTL); in dnet_interrupt()
488 dnet_writel(bp, 0, SYS_CTL); in dnet_interrupt()
493 if (napi_schedule_prep(&bp->napi)) { in dnet_interrupt()
499 int_enable = dnet_readl(bp, INTR_ENB); in dnet_interrupt()
501 dnet_writel(bp, int_enable, INTR_ENB); in dnet_interrupt()
502 __napi_schedule(&bp->napi); in dnet_interrupt()
510 spin_unlock_irqrestore(&bp->lock, flags); in dnet_interrupt()
531 struct dnet *bp = netdev_priv(dev); in dnet_start_xmit() local
537 tx_status = dnet_readl(bp, TX_STATUS); in dnet_start_xmit()
546 spin_lock_irqsave(&bp->lock, flags); in dnet_start_xmit()
548 tx_status = dnet_readl(bp, TX_STATUS); in dnet_start_xmit()
557 if (wrsz < (DNET_FIFO_SIZE - dnet_readl(bp, TX_FIFO_WCNT))) { in dnet_start_xmit()
559 dnet_writel(bp, *bufp++, TX_DATA_FIFO); in dnet_start_xmit()
565 dnet_writel(bp, tx_cmd, TX_LEN_FIFO); in dnet_start_xmit()
568 if (dnet_readl(bp, TX_FIFO_WCNT) > DNET_FIFO_TX_DATA_AF_TH) { in dnet_start_xmit()
570 tx_status = dnet_readl(bp, INTR_SRC); in dnet_start_xmit()
571 irq_enable = dnet_readl(bp, INTR_ENB); in dnet_start_xmit()
573 dnet_writel(bp, irq_enable, INTR_ENB); in dnet_start_xmit()
581 spin_unlock_irqrestore(&bp->lock, flags); in dnet_start_xmit()
586 static void dnet_reset_hw(struct dnet *bp) in dnet_reset_hw() argument
589 dnet_writew_mac(bp, DNET_INTERNAL_MODE_REG, DNET_INTERNAL_MODE_FCEN); in dnet_reset_hw()
595 dnet_writel(bp, DNET_FIFO_RX_CMD_AF_TH, RX_FIFO_TH); in dnet_reset_hw()
600 dnet_writel(bp, DNET_FIFO_TX_DATA_AE_TH, TX_FIFO_TH); in dnet_reset_hw()
603 dnet_writel(bp, DNET_SYS_CTL_RXFIFOFLUSH | DNET_SYS_CTL_TXFIFOFLUSH, in dnet_reset_hw()
606 dnet_writel(bp, 0, SYS_CTL); in dnet_reset_hw()
609 static void dnet_init_hw(struct dnet *bp) in dnet_init_hw() argument
613 dnet_reset_hw(bp); in dnet_init_hw()
614 __dnet_set_hwaddr(bp); in dnet_init_hw()
616 config = dnet_readw_mac(bp, DNET_INTERNAL_RXTX_CONTROL_REG); in dnet_init_hw()
618 if (bp->dev->flags & IFF_PROMISC) in dnet_init_hw()
621 if (!(bp->dev->flags & IFF_BROADCAST)) in dnet_init_hw()
630 dnet_writew_mac(bp, DNET_INTERNAL_RXTX_CONTROL_REG, config); in dnet_init_hw()
633 config = dnet_readl(bp, INTR_SRC); in dnet_init_hw()
636 dnet_writel(bp, DNET_INTR_ENB_GLOBAL_ENABLE | DNET_INTR_ENB_RX_SUMMARY | in dnet_init_hw()
645 struct dnet *bp = netdev_priv(dev); in dnet_open() local
648 if (!bp->phy_dev) in dnet_open()
651 napi_enable(&bp->napi); in dnet_open()
652 dnet_init_hw(bp); in dnet_open()
654 phy_start_aneg(bp->phy_dev); in dnet_open()
657 phy_start(bp->phy_dev); in dnet_open()
666 struct dnet *bp = netdev_priv(dev); in dnet_close() local
669 napi_disable(&bp->napi); in dnet_close()
671 if (bp->phy_dev) in dnet_close()
672 phy_stop(bp->phy_dev); in dnet_close()
674 dnet_reset_hw(bp); in dnet_close()
716 struct dnet *bp = netdev_priv(dev); in dnet_get_stats() local
718 struct dnet_stats *hwstat = &bp->hw_stats; in dnet_get_stats()
721 dnet_update_stats(bp); in dnet_get_stats()
752 struct dnet *bp = netdev_priv(dev); in dnet_get_settings() local
753 struct phy_device *phydev = bp->phy_dev; in dnet_get_settings()
763 struct dnet *bp = netdev_priv(dev); in dnet_set_settings() local
764 struct phy_device *phydev = bp->phy_dev; in dnet_set_settings()
774 struct dnet *bp = netdev_priv(dev); in dnet_ioctl() local
775 struct phy_device *phydev = bp->phy_dev; in dnet_ioctl()
817 struct dnet *bp; in dnet_probe() local
824 dev = alloc_etherdev(sizeof(*bp)); in dnet_probe()
831 bp = netdev_priv(dev); in dnet_probe()
832 bp->dev = dev; in dnet_probe()
837 spin_lock_init(&bp->lock); in dnet_probe()
840 bp->regs = devm_ioremap_resource(&pdev->dev, res); in dnet_probe()
841 if (IS_ERR(bp->regs)) { in dnet_probe()
842 err = PTR_ERR(bp->regs); in dnet_probe()
855 netif_napi_add(dev, &bp->napi, dnet_poll, 64); in dnet_probe()
858 dev->base_addr = (unsigned long)bp->regs; in dnet_probe()
860 bp->capabilities = dnet_readl(bp, VERCAPS) & DNET_CAPS_MASK; in dnet_probe()
862 dnet_get_hwaddr(bp); in dnet_probe()
867 __dnet_set_hwaddr(bp); in dnet_probe()
883 err = dnet_mii_init(bp); in dnet_probe()
888 bp->regs, (unsigned int)res->start, dev->irq, dev->dev_addr); in dnet_probe()
890 (bp->capabilities & DNET_HAS_MDIO) ? "" : "no ", in dnet_probe()
891 (bp->capabilities & DNET_HAS_IRQ) ? "" : "no ", in dnet_probe()
892 (bp->capabilities & DNET_HAS_GIGABIT) ? "" : "no ", in dnet_probe()
893 (bp->capabilities & DNET_HAS_DMA) ? "" : "no "); in dnet_probe()
894 phydev = bp->phy_dev; in dnet_probe()
914 struct dnet *bp; in dnet_remove() local
919 bp = netdev_priv(dev); in dnet_remove()
920 if (bp->phy_dev) in dnet_remove()
921 phy_disconnect(bp->phy_dev); in dnet_remove()
922 mdiobus_unregister(bp->mii_bus); in dnet_remove()
923 mdiobus_free(bp->mii_bus); in dnet_remove()