Lines Matching refs:ndev

152 static void axienet_dma_bd_release(struct net_device *ndev)  in axienet_dma_bd_release()  argument
155 struct axienet_local *lp = netdev_priv(ndev); in axienet_dma_bd_release()
158 dma_unmap_single(ndev->dev.parent, lp->rx_bd_v[i].phys, in axienet_dma_bd_release()
165 dma_free_coherent(ndev->dev.parent, in axienet_dma_bd_release()
171 dma_free_coherent(ndev->dev.parent, in axienet_dma_bd_release()
189 static int axienet_dma_bd_init(struct net_device *ndev) in axienet_dma_bd_init() argument
194 struct axienet_local *lp = netdev_priv(ndev); in axienet_dma_bd_init()
204 lp->tx_bd_v = dma_zalloc_coherent(ndev->dev.parent, in axienet_dma_bd_init()
210 lp->rx_bd_v = dma_zalloc_coherent(ndev->dev.parent, in axienet_dma_bd_init()
227 skb = netdev_alloc_skb_ip_align(ndev, lp->max_frm_size); in axienet_dma_bd_init()
232 lp->rx_bd_v[i].phys = dma_map_single(ndev->dev.parent, in axienet_dma_bd_init()
284 axienet_dma_bd_release(ndev); in axienet_dma_bd_init()
296 static void axienet_set_mac_address(struct net_device *ndev, void *address) in axienet_set_mac_address() argument
298 struct axienet_local *lp = netdev_priv(ndev); in axienet_set_mac_address()
301 memcpy(ndev->dev_addr, address, ETH_ALEN); in axienet_set_mac_address()
302 if (!is_valid_ether_addr(ndev->dev_addr)) in axienet_set_mac_address()
303 eth_random_addr(ndev->dev_addr); in axienet_set_mac_address()
307 (ndev->dev_addr[0]) | in axienet_set_mac_address()
308 (ndev->dev_addr[1] << 8) | in axienet_set_mac_address()
309 (ndev->dev_addr[2] << 16) | in axienet_set_mac_address()
310 (ndev->dev_addr[3] << 24)); in axienet_set_mac_address()
314 (ndev->dev_addr[4] | in axienet_set_mac_address()
315 (ndev->dev_addr[5] << 8)))); in axienet_set_mac_address()
329 static int netdev_set_mac_address(struct net_device *ndev, void *p) in netdev_set_mac_address() argument
332 axienet_set_mac_address(ndev, addr->sa_data); in netdev_set_mac_address()
347 static void axienet_set_multicast_list(struct net_device *ndev) in axienet_set_multicast_list() argument
351 struct axienet_local *lp = netdev_priv(ndev); in axienet_set_multicast_list()
353 if (ndev->flags & (IFF_ALLMULTI | IFF_PROMISC) || in axienet_set_multicast_list()
354 netdev_mc_count(ndev) > XAE_MULTICAST_CAM_TABLE_NUM) { in axienet_set_multicast_list()
358 ndev->flags |= IFF_PROMISC; in axienet_set_multicast_list()
362 dev_info(&ndev->dev, "Promiscuous mode enabled.\n"); in axienet_set_multicast_list()
363 } else if (!netdev_mc_empty(ndev)) { in axienet_set_multicast_list()
367 netdev_for_each_mc_addr(ha, ndev) { in axienet_set_multicast_list()
402 dev_info(&ndev->dev, "Promiscuous mode disabled.\n"); in axienet_set_multicast_list()
417 static void axienet_setoptions(struct net_device *ndev, u32 options) in axienet_setoptions() argument
420 struct axienet_local *lp = netdev_priv(ndev); in axienet_setoptions()
465 static void axienet_device_reset(struct net_device *ndev) in axienet_device_reset() argument
468 struct axienet_local *lp = netdev_priv(ndev); in axienet_device_reset()
470 __axienet_device_reset(lp, &ndev->dev, XAXIDMA_TX_CR_OFFSET); in axienet_device_reset()
471 __axienet_device_reset(lp, &ndev->dev, XAXIDMA_RX_CR_OFFSET); in axienet_device_reset()
476 if ((ndev->mtu > XAE_MTU) && in axienet_device_reset()
477 (ndev->mtu <= XAE_JUMBO_MTU) && in axienet_device_reset()
479 lp->max_frm_size = ndev->mtu + XAE_HDR_VLAN_SIZE + in axienet_device_reset()
484 if (axienet_dma_bd_init(ndev)) { in axienet_device_reset()
485 dev_err(&ndev->dev, "axienet_device_reset descriptor " in axienet_device_reset()
501 axienet_setoptions(ndev, lp->options & in axienet_device_reset()
503 axienet_set_mac_address(ndev, NULL); in axienet_device_reset()
504 axienet_set_multicast_list(ndev); in axienet_device_reset()
505 axienet_setoptions(ndev, lp->options); in axienet_device_reset()
507 ndev->trans_start = jiffies; in axienet_device_reset()
518 static void axienet_adjust_link(struct net_device *ndev) in axienet_adjust_link() argument
523 struct axienet_local *lp = netdev_priv(ndev); in axienet_adjust_link()
552 dev_err(&ndev->dev, "Speed other than 10, 100 " in axienet_adjust_link()
561 dev_err(&ndev->dev, "Error setting Axi Ethernet " in axienet_adjust_link()
578 static void axienet_start_xmit_done(struct net_device *ndev) in axienet_start_xmit_done() argument
582 struct axienet_local *lp = netdev_priv(ndev); in axienet_start_xmit_done()
589 dma_unmap_single(ndev->dev.parent, cur_p->phys, in axienet_start_xmit_done()
610 ndev->stats.tx_packets += packets; in axienet_start_xmit_done()
611 ndev->stats.tx_bytes += size; in axienet_start_xmit_done()
612 netif_wake_queue(ndev); in axienet_start_xmit_done()
651 static int axienet_start_xmit(struct sk_buff *skb, struct net_device *ndev) in axienet_start_xmit() argument
659 struct axienet_local *lp = netdev_priv(ndev); in axienet_start_xmit()
666 if (!netif_queue_stopped(ndev)) in axienet_start_xmit()
667 netif_stop_queue(ndev); in axienet_start_xmit()
687 cur_p->phys = dma_map_single(ndev->dev.parent, skb->data, in axienet_start_xmit()
695 cur_p->phys = dma_map_single(ndev->dev.parent, in axienet_start_xmit()
723 static void axienet_recv(struct net_device *ndev) in axienet_recv() argument
730 struct axienet_local *lp = netdev_priv(ndev); in axienet_recv()
741 dma_unmap_single(ndev->dev.parent, cur_p->phys, in axienet_recv()
746 skb->protocol = eth_type_trans(skb, ndev); in axienet_recv()
770 new_skb = netdev_alloc_skb_ip_align(ndev, lp->max_frm_size); in axienet_recv()
774 cur_p->phys = dma_map_single(ndev->dev.parent, new_skb->data, in axienet_recv()
786 ndev->stats.rx_packets += packets; in axienet_recv()
787 ndev->stats.rx_bytes += size; in axienet_recv()
806 struct net_device *ndev = _ndev; in axienet_tx_irq() local
807 struct axienet_local *lp = netdev_priv(ndev); in axienet_tx_irq()
811 axienet_start_xmit_done(lp->ndev); in axienet_tx_irq()
815 dev_err(&ndev->dev, "No interrupts asserted in Tx path"); in axienet_tx_irq()
817 dev_err(&ndev->dev, "DMA Tx error 0x%x\n", status); in axienet_tx_irq()
818 dev_err(&ndev->dev, "Current BD is at: 0x%x\n", in axienet_tx_irq()
854 struct net_device *ndev = _ndev; in axienet_rx_irq() local
855 struct axienet_local *lp = netdev_priv(ndev); in axienet_rx_irq()
859 axienet_recv(lp->ndev); in axienet_rx_irq()
863 dev_err(&ndev->dev, "No interrupts asserted in Rx path"); in axienet_rx_irq()
865 dev_err(&ndev->dev, "DMA Rx error 0x%x\n", status); in axienet_rx_irq()
866 dev_err(&ndev->dev, "Current BD is at: 0x%x\n", in axienet_rx_irq()
903 static int axienet_open(struct net_device *ndev) in axienet_open() argument
906 struct axienet_local *lp = netdev_priv(ndev); in axienet_open()
908 dev_dbg(&ndev->dev, "axienet_open()\n"); in axienet_open()
920 axienet_device_reset(ndev); in axienet_open()
928 lp->phy_dev = of_phy_connect(lp->ndev, lp->phy_node, in axienet_open()
943 ret = request_irq(lp->tx_irq, axienet_tx_irq, 0, ndev->name, ndev); in axienet_open()
947 ret = request_irq(lp->rx_irq, axienet_rx_irq, 0, ndev->name, ndev); in axienet_open()
954 free_irq(lp->tx_irq, ndev); in axienet_open()
974 static int axienet_stop(struct net_device *ndev) in axienet_stop() argument
977 struct axienet_local *lp = netdev_priv(ndev); in axienet_stop()
979 dev_dbg(&ndev->dev, "axienet_close()\n"); in axienet_stop()
987 axienet_setoptions(ndev, lp->options & in axienet_stop()
992 free_irq(lp->tx_irq, ndev); in axienet_stop()
993 free_irq(lp->rx_irq, ndev); in axienet_stop()
999 axienet_dma_bd_release(ndev); in axienet_stop()
1014 static int axienet_change_mtu(struct net_device *ndev, int new_mtu) in axienet_change_mtu() argument
1016 struct axienet_local *lp = netdev_priv(ndev); in axienet_change_mtu()
1018 if (netif_running(ndev)) in axienet_change_mtu()
1023 ndev->mtu = new_mtu; in axienet_change_mtu()
1027 ndev->mtu = new_mtu; in axienet_change_mtu()
1041 static void axienet_poll_controller(struct net_device *ndev) in axienet_poll_controller() argument
1043 struct axienet_local *lp = netdev_priv(ndev); in axienet_poll_controller()
1046 axienet_rx_irq(lp->tx_irq, ndev); in axienet_poll_controller()
1047 axienet_tx_irq(lp->rx_irq, ndev); in axienet_poll_controller()
1076 static int axienet_ethtools_get_settings(struct net_device *ndev, in axienet_ethtools_get_settings() argument
1079 struct axienet_local *lp = netdev_priv(ndev); in axienet_ethtools_get_settings()
1097 static int axienet_ethtools_set_settings(struct net_device *ndev, in axienet_ethtools_set_settings() argument
1100 struct axienet_local *lp = netdev_priv(ndev); in axienet_ethtools_set_settings()
1115 static void axienet_ethtools_get_drvinfo(struct net_device *ndev, in axienet_ethtools_get_drvinfo() argument
1131 static int axienet_ethtools_get_regs_len(struct net_device *ndev) in axienet_ethtools_get_regs_len() argument
1146 static void axienet_ethtools_get_regs(struct net_device *ndev, in axienet_ethtools_get_regs() argument
1151 struct axienet_local *lp = netdev_priv(ndev); in axienet_ethtools_get_regs()
1201 axienet_ethtools_get_pauseparam(struct net_device *ndev, in axienet_ethtools_get_pauseparam() argument
1205 struct axienet_local *lp = netdev_priv(ndev); in axienet_ethtools_get_pauseparam()
1223 axienet_ethtools_set_pauseparam(struct net_device *ndev, in axienet_ethtools_set_pauseparam() argument
1227 struct axienet_local *lp = netdev_priv(ndev); in axienet_ethtools_set_pauseparam()
1229 if (netif_running(ndev)) { in axienet_ethtools_set_pauseparam()
1231 "configruation\n", ndev->name); in axienet_ethtools_set_pauseparam()
1258 static int axienet_ethtools_get_coalesce(struct net_device *ndev, in axienet_ethtools_get_coalesce() argument
1262 struct axienet_local *lp = netdev_priv(ndev); in axienet_ethtools_get_coalesce()
1281 static int axienet_ethtools_set_coalesce(struct net_device *ndev, in axienet_ethtools_set_coalesce() argument
1284 struct axienet_local *lp = netdev_priv(ndev); in axienet_ethtools_set_coalesce()
1286 if (netif_running(ndev)) { in axienet_ethtools_set_coalesce()
1288 "configruation\n", ndev->name); in axienet_ethtools_set_coalesce()
1347 struct net_device *ndev = lp->ndev; in axienet_dma_err_handler() local
1350 axienet_setoptions(ndev, lp->options & in axienet_dma_err_handler()
1361 __axienet_device_reset(lp, &ndev->dev, XAXIDMA_TX_CR_OFFSET); in axienet_dma_err_handler()
1362 __axienet_device_reset(lp, &ndev->dev, XAXIDMA_RX_CR_OFFSET); in axienet_dma_err_handler()
1370 dma_unmap_single(ndev->dev.parent, cur_p->phys, in axienet_dma_err_handler()
1455 axienet_setoptions(ndev, lp->options & in axienet_dma_err_handler()
1457 axienet_set_mac_address(ndev, NULL); in axienet_dma_err_handler()
1458 axienet_set_multicast_list(ndev); in axienet_dma_err_handler()
1459 axienet_setoptions(ndev, lp->options); in axienet_dma_err_handler()
1481 struct net_device *ndev; in axienet_of_probe() local
1484 ndev = alloc_etherdev(sizeof(*lp)); in axienet_of_probe()
1485 if (!ndev) in axienet_of_probe()
1488 platform_set_drvdata(op, ndev); in axienet_of_probe()
1490 SET_NETDEV_DEV(ndev, &op->dev); in axienet_of_probe()
1491 ndev->flags &= ~IFF_MULTICAST; /* clear multicast */ in axienet_of_probe()
1492 ndev->features = NETIF_F_SG; in axienet_of_probe()
1493 ndev->netdev_ops = &axienet_netdev_ops; in axienet_of_probe()
1494 ndev->ethtool_ops = &axienet_ethtool_ops; in axienet_of_probe()
1496 lp = netdev_priv(ndev); in axienet_of_probe()
1497 lp->ndev = ndev; in axienet_of_probe()
1518 ndev->features |= NETIF_F_IP_CSUM; in axienet_of_probe()
1525 ndev->features |= NETIF_F_IP_CSUM; in axienet_of_probe()
1593 axienet_set_mac_address(ndev, (void *) addr); in axienet_of_probe()
1603 ret = register_netdev(lp->ndev); in axienet_of_probe()
1617 free_netdev(ndev); in axienet_of_probe()
1618 ndev = NULL; in axienet_of_probe()
1624 struct net_device *ndev = platform_get_drvdata(op); in axienet_of_remove() local
1625 struct axienet_local *lp = netdev_priv(ndev); in axienet_of_remove()
1628 unregister_netdev(ndev); in axienet_of_remove()
1636 free_netdev(ndev); in axienet_of_remove()