Lines Matching refs:lp
493 struct net_local *lp = netdev_priv(dev); in xemaclite_set_mac_address() local
500 xemaclite_update_address(lp, dev->dev_addr); in xemaclite_set_mac_address()
512 struct net_local *lp = netdev_priv(dev); in xemaclite_tx_timeout() local
515 dev_err(&lp->ndev->dev, "Exceeded transmit timeout of %lu ms\n", in xemaclite_tx_timeout()
521 spin_lock_irqsave(&lp->reset_lock, flags); in xemaclite_tx_timeout()
526 xemaclite_disable_interrupts(lp); in xemaclite_tx_timeout()
527 xemaclite_enable_interrupts(lp); in xemaclite_tx_timeout()
529 if (lp->deferred_skb) { in xemaclite_tx_timeout()
530 dev_kfree_skb(lp->deferred_skb); in xemaclite_tx_timeout()
531 lp->deferred_skb = NULL; in xemaclite_tx_timeout()
540 spin_unlock_irqrestore(&lp->reset_lock, flags); in xemaclite_tx_timeout()
556 struct net_local *lp = netdev_priv(dev); in xemaclite_tx_handler() local
559 if (lp->deferred_skb) { in xemaclite_tx_handler()
560 if (xemaclite_send_data(lp, in xemaclite_tx_handler()
561 (u8 *) lp->deferred_skb->data, in xemaclite_tx_handler()
562 lp->deferred_skb->len) != 0) in xemaclite_tx_handler()
565 dev->stats.tx_bytes += lp->deferred_skb->len; in xemaclite_tx_handler()
566 dev_kfree_skb_irq(lp->deferred_skb); in xemaclite_tx_handler()
567 lp->deferred_skb = NULL; in xemaclite_tx_handler()
583 struct net_local *lp = netdev_priv(dev); in xemaclite_rx_handler() local
593 dev_err(&lp->ndev->dev, "Could not allocate receive buffer\n"); in xemaclite_rx_handler()
608 len = xemaclite_recv_data(lp, (u8 *) skb->data); in xemaclite_rx_handler()
640 struct net_local *lp = netdev_priv(dev); in xemaclite_interrupt() local
641 void __iomem *base_addr = lp->base_addr; in xemaclite_interrupt()
696 static int xemaclite_mdio_wait(struct net_local *lp) in xemaclite_mdio_wait() argument
703 while (__raw_readl(lp->base_addr + XEL_MDIOCTRL_OFFSET) & in xemaclite_mdio_wait()
728 struct net_local *lp = bus->priv; in xemaclite_mdio_read() local
732 if (xemaclite_mdio_wait(lp)) in xemaclite_mdio_read()
739 ctrl_reg = __raw_readl(lp->base_addr + XEL_MDIOCTRL_OFFSET); in xemaclite_mdio_read()
742 lp->base_addr + XEL_MDIOADDR_OFFSET); in xemaclite_mdio_read()
744 lp->base_addr + XEL_MDIOCTRL_OFFSET); in xemaclite_mdio_read()
746 if (xemaclite_mdio_wait(lp)) in xemaclite_mdio_read()
749 rc = __raw_readl(lp->base_addr + XEL_MDIORD_OFFSET); in xemaclite_mdio_read()
751 dev_dbg(&lp->ndev->dev, in xemaclite_mdio_read()
771 struct net_local *lp = bus->priv; in xemaclite_mdio_write() local
774 dev_dbg(&lp->ndev->dev, in xemaclite_mdio_write()
778 if (xemaclite_mdio_wait(lp)) in xemaclite_mdio_write()
786 ctrl_reg = __raw_readl(lp->base_addr + XEL_MDIOCTRL_OFFSET); in xemaclite_mdio_write()
789 lp->base_addr + XEL_MDIOADDR_OFFSET); in xemaclite_mdio_write()
790 __raw_writel(val, lp->base_addr + XEL_MDIOWR_OFFSET); in xemaclite_mdio_write()
792 lp->base_addr + XEL_MDIOCTRL_OFFSET); in xemaclite_mdio_write()
807 static int xemaclite_mdio_setup(struct net_local *lp, struct device *dev) in xemaclite_mdio_setup() argument
812 struct device_node *np = of_get_parent(lp->phy_node); in xemaclite_mdio_setup()
825 if (lp->ndev->mem_start != res.start) { in xemaclite_mdio_setup()
827 phydev = of_phy_find_device(lp->phy_node); in xemaclite_mdio_setup()
840 lp->base_addr + XEL_MDIOCTRL_OFFSET); in xemaclite_mdio_setup()
850 bus->priv = lp; in xemaclite_mdio_setup()
855 bus->irq = lp->mdio_irqs; /* preallocated IRQ table */ in xemaclite_mdio_setup()
857 lp->mii_bus = bus; in xemaclite_mdio_setup()
881 struct net_local *lp = netdev_priv(ndev); in xemaclite_adjust_link() local
882 struct phy_device *phy = lp->phy_dev; in xemaclite_adjust_link()
888 if (lp->last_link != link_state) { in xemaclite_adjust_link()
889 lp->last_link = link_state; in xemaclite_adjust_link()
904 struct net_local *lp = netdev_priv(dev); in xemaclite_open() local
908 xemaclite_disable_interrupts(lp); in xemaclite_open()
910 if (lp->phy_node) { in xemaclite_open()
913 lp->phy_dev = of_phy_connect(lp->ndev, lp->phy_node, in xemaclite_open()
916 if (!lp->phy_dev) { in xemaclite_open()
917 dev_err(&lp->ndev->dev, "of_phy_connect() failed\n"); in xemaclite_open()
922 lp->phy_dev->supported &= (PHY_BASIC_FEATURES); in xemaclite_open()
923 lp->phy_dev->advertising = lp->phy_dev->supported; in xemaclite_open()
926 phy_write(lp->phy_dev, MII_CTRL1000, 0); in xemaclite_open()
929 phy_write(lp->phy_dev, MII_ADVERTISE, ADVERTISE_ALL | in xemaclite_open()
933 bmcr = phy_read(lp->phy_dev, MII_BMCR); in xemaclite_open()
935 phy_write(lp->phy_dev, MII_BMCR, bmcr); in xemaclite_open()
937 phy_start(lp->phy_dev); in xemaclite_open()
941 xemaclite_update_address(lp, dev->dev_addr); in xemaclite_open()
946 dev_err(&lp->ndev->dev, "Could not allocate interrupt %d\n", in xemaclite_open()
948 if (lp->phy_dev) in xemaclite_open()
949 phy_disconnect(lp->phy_dev); in xemaclite_open()
950 lp->phy_dev = NULL; in xemaclite_open()
956 xemaclite_enable_interrupts(lp); in xemaclite_open()
974 struct net_local *lp = netdev_priv(dev); in xemaclite_close() local
977 xemaclite_disable_interrupts(lp); in xemaclite_close()
980 if (lp->phy_dev) in xemaclite_close()
981 phy_disconnect(lp->phy_dev); in xemaclite_close()
982 lp->phy_dev = NULL; in xemaclite_close()
1003 struct net_local *lp = netdev_priv(dev); in xemaclite_send() local
1012 spin_lock_irqsave(&lp->reset_lock, flags); in xemaclite_send()
1013 if (xemaclite_send_data(lp, (u8 *) new_skb->data, len) != 0) { in xemaclite_send()
1018 lp->deferred_skb = new_skb; in xemaclite_send()
1021 spin_unlock_irqrestore(&lp->reset_lock, flags); in xemaclite_send()
1024 spin_unlock_irqrestore(&lp->reset_lock, flags); in xemaclite_send()
1091 struct net_local *lp = NULL; in xemaclite_of_probe() local
1107 lp = netdev_priv(ndev); in xemaclite_of_probe()
1108 lp->ndev = ndev; in xemaclite_of_probe()
1121 lp->base_addr = devm_ioremap_resource(&ofdev->dev, res); in xemaclite_of_probe()
1122 if (IS_ERR(lp->base_addr)) { in xemaclite_of_probe()
1123 rc = PTR_ERR(lp->base_addr); in xemaclite_of_probe()
1130 spin_lock_init(&lp->reset_lock); in xemaclite_of_probe()
1131 lp->next_tx_buf_to_use = 0x0; in xemaclite_of_probe()
1132 lp->next_rx_buf_to_use = 0x0; in xemaclite_of_probe()
1133 lp->tx_ping_pong = get_bool(ofdev, "xlnx,tx-ping-pong"); in xemaclite_of_probe()
1134 lp->rx_ping_pong = get_bool(ofdev, "xlnx,rx-ping-pong"); in xemaclite_of_probe()
1144 __raw_writel(0, lp->base_addr + XEL_TSR_OFFSET); in xemaclite_of_probe()
1145 __raw_writel(0, lp->base_addr + XEL_BUFFER_OFFSET + XEL_TSR_OFFSET); in xemaclite_of_probe()
1148 xemaclite_update_address(lp, ndev->dev_addr); in xemaclite_of_probe()
1150 lp->phy_node = of_parse_phandle(ofdev->dev.of_node, "phy-handle", 0); in xemaclite_of_probe()
1151 rc = xemaclite_mdio_setup(lp, &ofdev->dev); in xemaclite_of_probe()
1172 (unsigned int __force)lp->base_addr, ndev->irq); in xemaclite_of_probe()
1194 struct net_local *lp = netdev_priv(ndev); in xemaclite_of_remove() local
1197 if (lp->has_mdio) { in xemaclite_of_remove()
1198 mdiobus_unregister(lp->mii_bus); in xemaclite_of_remove()
1199 kfree(lp->mii_bus->irq); in xemaclite_of_remove()
1200 mdiobus_free(lp->mii_bus); in xemaclite_of_remove()
1201 lp->mii_bus = NULL; in xemaclite_of_remove()
1206 of_node_put(lp->phy_node); in xemaclite_of_remove()
1207 lp->phy_node = NULL; in xemaclite_of_remove()