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()
188 static int axienet_dma_bd_init(struct net_device *ndev) in axienet_dma_bd_init() argument
193 struct axienet_local *lp = netdev_priv(ndev); in axienet_dma_bd_init()
201 lp->tx_bd_v = dma_zalloc_coherent(ndev->dev.parent, in axienet_dma_bd_init()
207 lp->rx_bd_v = dma_zalloc_coherent(ndev->dev.parent, in axienet_dma_bd_init()
224 skb = netdev_alloc_skb_ip_align(ndev, lp->max_frm_size); in axienet_dma_bd_init()
229 lp->rx_bd_v[i].phys = dma_map_single(ndev->dev.parent, in axienet_dma_bd_init()
283 axienet_dma_bd_release(ndev); in axienet_dma_bd_init()
295 static void axienet_set_mac_address(struct net_device *ndev, void *address) in axienet_set_mac_address() argument
297 struct axienet_local *lp = netdev_priv(ndev); in axienet_set_mac_address()
300 memcpy(ndev->dev_addr, address, ETH_ALEN); in axienet_set_mac_address()
301 if (!is_valid_ether_addr(ndev->dev_addr)) in axienet_set_mac_address()
302 eth_random_addr(ndev->dev_addr); in axienet_set_mac_address()
306 (ndev->dev_addr[0]) | in axienet_set_mac_address()
307 (ndev->dev_addr[1] << 8) | in axienet_set_mac_address()
308 (ndev->dev_addr[2] << 16) | in axienet_set_mac_address()
309 (ndev->dev_addr[3] << 24)); in axienet_set_mac_address()
313 (ndev->dev_addr[4] | in axienet_set_mac_address()
314 (ndev->dev_addr[5] << 8)))); in axienet_set_mac_address()
328 static int netdev_set_mac_address(struct net_device *ndev, void *p) in netdev_set_mac_address() argument
331 axienet_set_mac_address(ndev, addr->sa_data); in netdev_set_mac_address()
346 static void axienet_set_multicast_list(struct net_device *ndev) in axienet_set_multicast_list() argument
350 struct axienet_local *lp = netdev_priv(ndev); in axienet_set_multicast_list()
352 if (ndev->flags & (IFF_ALLMULTI | IFF_PROMISC) || in axienet_set_multicast_list()
353 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()
448 netdev_err(lp->ndev, "%s: DMA reset timeout!\n", in __axienet_device_reset()
466 static void axienet_device_reset(struct net_device *ndev) in axienet_device_reset() argument
469 struct axienet_local *lp = netdev_priv(ndev); in axienet_device_reset()
471 __axienet_device_reset(lp, &ndev->dev, XAXIDMA_TX_CR_OFFSET); in axienet_device_reset()
472 __axienet_device_reset(lp, &ndev->dev, XAXIDMA_RX_CR_OFFSET); in axienet_device_reset()
478 if ((ndev->mtu > XAE_MTU) && in axienet_device_reset()
479 (ndev->mtu <= XAE_JUMBO_MTU)) { in axienet_device_reset()
480 lp->max_frm_size = ndev->mtu + VLAN_ETH_HLEN + in axienet_device_reset()
487 if (axienet_dma_bd_init(ndev)) { in axienet_device_reset()
488 netdev_err(ndev, "%s: descriptor allocation failed\n", in axienet_device_reset()
505 axienet_setoptions(ndev, lp->options & in axienet_device_reset()
507 axienet_set_mac_address(ndev, NULL); in axienet_device_reset()
508 axienet_set_multicast_list(ndev); in axienet_device_reset()
509 axienet_setoptions(ndev, lp->options); in axienet_device_reset()
511 ndev->trans_start = jiffies; in axienet_device_reset()
522 static void axienet_adjust_link(struct net_device *ndev) in axienet_adjust_link() argument
527 struct axienet_local *lp = netdev_priv(ndev); in axienet_adjust_link()
556 dev_err(&ndev->dev, "Speed other than 10, 100 " in axienet_adjust_link()
565 netdev_err(ndev, in axienet_adjust_link()
582 static void axienet_start_xmit_done(struct net_device *ndev) in axienet_start_xmit_done() argument
586 struct axienet_local *lp = netdev_priv(ndev); in axienet_start_xmit_done()
593 dma_unmap_single(ndev->dev.parent, cur_p->phys, in axienet_start_xmit_done()
614 ndev->stats.tx_packets += packets; in axienet_start_xmit_done()
615 ndev->stats.tx_bytes += size; in axienet_start_xmit_done()
616 netif_wake_queue(ndev); in axienet_start_xmit_done()
655 static int axienet_start_xmit(struct sk_buff *skb, struct net_device *ndev) in axienet_start_xmit() argument
663 struct axienet_local *lp = netdev_priv(ndev); in axienet_start_xmit()
670 if (!netif_queue_stopped(ndev)) in axienet_start_xmit()
671 netif_stop_queue(ndev); in axienet_start_xmit()
691 cur_p->phys = dma_map_single(ndev->dev.parent, skb->data, in axienet_start_xmit()
699 cur_p->phys = dma_map_single(ndev->dev.parent, in axienet_start_xmit()
727 static void axienet_recv(struct net_device *ndev) in axienet_recv() argument
734 struct axienet_local *lp = netdev_priv(ndev); in axienet_recv()
745 dma_unmap_single(ndev->dev.parent, cur_p->phys, in axienet_recv()
750 skb->protocol = eth_type_trans(skb, ndev); in axienet_recv()
774 new_skb = netdev_alloc_skb_ip_align(ndev, lp->max_frm_size); in axienet_recv()
778 cur_p->phys = dma_map_single(ndev->dev.parent, new_skb->data, in axienet_recv()
790 ndev->stats.rx_packets += packets; in axienet_recv()
791 ndev->stats.rx_bytes += size; in axienet_recv()
811 struct net_device *ndev = _ndev; in axienet_tx_irq() local
812 struct axienet_local *lp = netdev_priv(ndev); in axienet_tx_irq()
817 axienet_start_xmit_done(lp->ndev); in axienet_tx_irq()
821 dev_err(&ndev->dev, "No interrupts asserted in Tx path"); in axienet_tx_irq()
823 dev_err(&ndev->dev, "DMA Tx error 0x%x\n", status); in axienet_tx_irq()
824 dev_err(&ndev->dev, "Current BD is at: 0x%x\n", in axienet_tx_irq()
860 struct net_device *ndev = _ndev; in axienet_rx_irq() local
861 struct axienet_local *lp = netdev_priv(ndev); in axienet_rx_irq()
866 axienet_recv(lp->ndev); in axienet_rx_irq()
870 dev_err(&ndev->dev, "No interrupts asserted in Rx path"); in axienet_rx_irq()
872 dev_err(&ndev->dev, "DMA Rx error 0x%x\n", status); in axienet_rx_irq()
873 dev_err(&ndev->dev, "Current BD is at: 0x%x\n", in axienet_rx_irq()
910 static int axienet_open(struct net_device *ndev) in axienet_open() argument
913 struct axienet_local *lp = netdev_priv(ndev); in axienet_open()
915 dev_dbg(&ndev->dev, "axienet_open()\n"); in axienet_open()
928 axienet_device_reset(ndev); in axienet_open()
937 lp->phy_dev = of_phy_connect(lp->ndev, lp->phy_node, in axienet_open()
941 lp->phy_dev = of_phy_connect(lp->ndev, lp->phy_node, in axienet_open()
957 ret = request_irq(lp->tx_irq, axienet_tx_irq, 0, ndev->name, ndev); in axienet_open()
961 ret = request_irq(lp->rx_irq, axienet_rx_irq, 0, ndev->name, ndev); in axienet_open()
968 free_irq(lp->tx_irq, ndev); in axienet_open()
988 static int axienet_stop(struct net_device *ndev) in axienet_stop() argument
991 struct axienet_local *lp = netdev_priv(ndev); in axienet_stop()
993 dev_dbg(&ndev->dev, "axienet_close()\n"); in axienet_stop()
1001 axienet_setoptions(ndev, lp->options & in axienet_stop()
1006 free_irq(lp->tx_irq, ndev); in axienet_stop()
1007 free_irq(lp->rx_irq, ndev); in axienet_stop()
1013 axienet_dma_bd_release(ndev); in axienet_stop()
1028 static int axienet_change_mtu(struct net_device *ndev, int new_mtu) in axienet_change_mtu() argument
1030 struct axienet_local *lp = netdev_priv(ndev); in axienet_change_mtu()
1032 if (netif_running(ndev)) in axienet_change_mtu()
1042 ndev->mtu = new_mtu; in axienet_change_mtu()
1055 static void axienet_poll_controller(struct net_device *ndev) in axienet_poll_controller() argument
1057 struct axienet_local *lp = netdev_priv(ndev); in axienet_poll_controller()
1060 axienet_rx_irq(lp->tx_irq, ndev); in axienet_poll_controller()
1061 axienet_tx_irq(lp->rx_irq, ndev); in axienet_poll_controller()
1092 static int axienet_ethtools_get_settings(struct net_device *ndev, in axienet_ethtools_get_settings() argument
1095 struct axienet_local *lp = netdev_priv(ndev); in axienet_ethtools_get_settings()
1115 static int axienet_ethtools_set_settings(struct net_device *ndev, in axienet_ethtools_set_settings() argument
1118 struct axienet_local *lp = netdev_priv(ndev); in axienet_ethtools_set_settings()
1133 static void axienet_ethtools_get_drvinfo(struct net_device *ndev, in axienet_ethtools_get_drvinfo() argument
1150 static int axienet_ethtools_get_regs_len(struct net_device *ndev) in axienet_ethtools_get_regs_len() argument
1165 static void axienet_ethtools_get_regs(struct net_device *ndev, in axienet_ethtools_get_regs() argument
1170 struct axienet_local *lp = netdev_priv(ndev); in axienet_ethtools_get_regs()
1220 axienet_ethtools_get_pauseparam(struct net_device *ndev, in axienet_ethtools_get_pauseparam() argument
1224 struct axienet_local *lp = netdev_priv(ndev); in axienet_ethtools_get_pauseparam()
1244 axienet_ethtools_set_pauseparam(struct net_device *ndev, in axienet_ethtools_set_pauseparam() argument
1248 struct axienet_local *lp = netdev_priv(ndev); in axienet_ethtools_set_pauseparam()
1250 if (netif_running(ndev)) { in axienet_ethtools_set_pauseparam()
1251 netdev_err(ndev, in axienet_ethtools_set_pauseparam()
1281 static int axienet_ethtools_get_coalesce(struct net_device *ndev, in axienet_ethtools_get_coalesce() argument
1285 struct axienet_local *lp = netdev_priv(ndev); in axienet_ethtools_get_coalesce()
1306 static int axienet_ethtools_set_coalesce(struct net_device *ndev, in axienet_ethtools_set_coalesce() argument
1309 struct axienet_local *lp = netdev_priv(ndev); in axienet_ethtools_set_coalesce()
1311 if (netif_running(ndev)) { in axienet_ethtools_set_coalesce()
1312 netdev_err(ndev, in axienet_ethtools_set_coalesce()
1372 struct net_device *ndev = lp->ndev; in axienet_dma_err_handler() local
1375 axienet_setoptions(ndev, lp->options & in axienet_dma_err_handler()
1387 __axienet_device_reset(lp, &ndev->dev, XAXIDMA_TX_CR_OFFSET); in axienet_dma_err_handler()
1388 __axienet_device_reset(lp, &ndev->dev, XAXIDMA_RX_CR_OFFSET); in axienet_dma_err_handler()
1396 dma_unmap_single(ndev->dev.parent, cur_p->phys, in axienet_dma_err_handler()
1484 axienet_setoptions(ndev, lp->options & in axienet_dma_err_handler()
1486 axienet_set_mac_address(ndev, NULL); in axienet_dma_err_handler()
1487 axienet_set_multicast_list(ndev); in axienet_dma_err_handler()
1488 axienet_setoptions(ndev, lp->options); in axienet_dma_err_handler()
1508 struct net_device *ndev; in axienet_probe() local
1513 ndev = alloc_etherdev(sizeof(*lp)); in axienet_probe()
1514 if (!ndev) in axienet_probe()
1517 platform_set_drvdata(pdev, ndev); in axienet_probe()
1519 SET_NETDEV_DEV(ndev, &pdev->dev); in axienet_probe()
1520 ndev->flags &= ~IFF_MULTICAST; /* clear multicast */ in axienet_probe()
1521 ndev->features = NETIF_F_SG; in axienet_probe()
1522 ndev->netdev_ops = &axienet_netdev_ops; in axienet_probe()
1523 ndev->ethtool_ops = &axienet_ethtool_ops; in axienet_probe()
1525 lp = netdev_priv(ndev); in axienet_probe()
1526 lp->ndev = ndev; in axienet_probe()
1549 ndev->features |= NETIF_F_IP_CSUM; in axienet_probe()
1556 ndev->features |= NETIF_F_IP_CSUM; in axienet_probe()
1622 axienet_set_mac_address(ndev, (void *)mac_addr); in axienet_probe()
1634 ret = register_netdev(lp->ndev); in axienet_probe()
1643 free_netdev(ndev); in axienet_probe()
1650 struct net_device *ndev = platform_get_drvdata(pdev); in axienet_remove() local
1651 struct axienet_local *lp = netdev_priv(ndev); in axienet_remove()
1654 unregister_netdev(ndev); in axienet_remove()
1659 free_netdev(ndev); in axienet_remove()