Lines Matching refs:ndev
202 static void temac_dma_bd_release(struct net_device *ndev) in temac_dma_bd_release() argument
204 struct temac_local *lp = netdev_priv(ndev); in temac_dma_bd_release()
214 dma_unmap_single(ndev->dev.parent, lp->rx_bd_v[i].phys, in temac_dma_bd_release()
220 dma_free_coherent(ndev->dev.parent, in temac_dma_bd_release()
224 dma_free_coherent(ndev->dev.parent, in temac_dma_bd_release()
233 static int temac_dma_bd_init(struct net_device *ndev) in temac_dma_bd_init() argument
235 struct temac_local *lp = netdev_priv(ndev); in temac_dma_bd_init()
245 lp->tx_bd_v = dma_zalloc_coherent(ndev->dev.parent, in temac_dma_bd_init()
251 lp->rx_bd_v = dma_zalloc_coherent(ndev->dev.parent, in temac_dma_bd_init()
266 skb = netdev_alloc_skb_ip_align(ndev, in temac_dma_bd_init()
273 lp->rx_bd_v[i].phys = dma_map_single(ndev->dev.parent, in temac_dma_bd_init()
308 temac_dma_bd_release(ndev); in temac_dma_bd_init()
316 static void temac_do_set_mac_address(struct net_device *ndev) in temac_do_set_mac_address() argument
318 struct temac_local *lp = netdev_priv(ndev); in temac_do_set_mac_address()
323 (ndev->dev_addr[0]) | in temac_do_set_mac_address()
324 (ndev->dev_addr[1] << 8) | in temac_do_set_mac_address()
325 (ndev->dev_addr[2] << 16) | in temac_do_set_mac_address()
326 (ndev->dev_addr[3] << 24)); in temac_do_set_mac_address()
330 (ndev->dev_addr[4] & 0x000000ff) | in temac_do_set_mac_address()
331 (ndev->dev_addr[5] << 8)); in temac_do_set_mac_address()
335 static int temac_init_mac_address(struct net_device *ndev, void *address) in temac_init_mac_address() argument
337 memcpy(ndev->dev_addr, address, ETH_ALEN); in temac_init_mac_address()
338 if (!is_valid_ether_addr(ndev->dev_addr)) in temac_init_mac_address()
339 eth_hw_addr_random(ndev); in temac_init_mac_address()
340 temac_do_set_mac_address(ndev); in temac_init_mac_address()
344 static int temac_set_mac_address(struct net_device *ndev, void *p) in temac_set_mac_address() argument
350 memcpy(ndev->dev_addr, addr->sa_data, ETH_ALEN); in temac_set_mac_address()
351 temac_do_set_mac_address(ndev); in temac_set_mac_address()
355 static void temac_set_multicast_list(struct net_device *ndev) in temac_set_multicast_list() argument
357 struct temac_local *lp = netdev_priv(ndev); in temac_set_multicast_list()
362 if (ndev->flags & (IFF_ALLMULTI | IFF_PROMISC) || in temac_set_multicast_list()
363 netdev_mc_count(ndev) > MULTICAST_CAM_TABLE_NUM) { in temac_set_multicast_list()
370 ndev->flags |= IFF_PROMISC; in temac_set_multicast_list()
372 dev_info(&ndev->dev, "Promiscuous mode enabled.\n"); in temac_set_multicast_list()
373 } else if (!netdev_mc_empty(ndev)) { in temac_set_multicast_list()
377 netdev_for_each_mc_addr(ha, ndev) { in temac_set_multicast_list()
398 dev_info(&ndev->dev, "Promiscuous mode disabled.\n"); in temac_set_multicast_list()
486 static u32 temac_setoptions(struct net_device *ndev, u32 options) in temac_setoptions() argument
488 struct temac_local *lp = netdev_priv(ndev); in temac_setoptions()
507 static void temac_device_reset(struct net_device *ndev) in temac_device_reset() argument
509 struct temac_local *lp = netdev_priv(ndev); in temac_device_reset()
518 dev_dbg(&ndev->dev, "%s()\n", __func__); in temac_device_reset()
527 dev_err(&ndev->dev, in temac_device_reset()
539 dev_err(&ndev->dev, in temac_device_reset()
555 dev_err(&ndev->dev, in temac_device_reset()
562 if (temac_dma_bd_init(ndev)) { in temac_device_reset()
563 dev_err(&ndev->dev, in temac_device_reset()
576 temac_setoptions(ndev, in temac_device_reset()
579 temac_do_set_mac_address(ndev); in temac_device_reset()
582 temac_set_multicast_list(ndev); in temac_device_reset()
583 if (temac_setoptions(ndev, lp->options)) in temac_device_reset()
584 dev_err(&ndev->dev, "Error setting TEMAC options\n"); in temac_device_reset()
587 ndev->trans_start = jiffies; /* prevent tx timeout */ in temac_device_reset()
590 static void temac_adjust_link(struct net_device *ndev) in temac_adjust_link() argument
592 struct temac_local *lp = netdev_priv(ndev); in temac_adjust_link()
619 static void temac_start_xmit_done(struct net_device *ndev) in temac_start_xmit_done() argument
621 struct temac_local *lp = netdev_priv(ndev); in temac_start_xmit_done()
629 dma_unmap_single(ndev->dev.parent, cur_p->phys, cur_p->len, in temac_start_xmit_done()
639 ndev->stats.tx_packets++; in temac_start_xmit_done()
640 ndev->stats.tx_bytes += cur_p->len; in temac_start_xmit_done()
650 netif_wake_queue(ndev); in temac_start_xmit_done()
676 static int temac_start_xmit(struct sk_buff *skb, struct net_device *ndev) in temac_start_xmit() argument
678 struct temac_local *lp = netdev_priv(ndev); in temac_start_xmit()
691 if (!netif_queue_stopped(ndev)) in temac_start_xmit()
692 netif_stop_queue(ndev); in temac_start_xmit()
708 cur_p->phys = dma_map_single(ndev->dev.parent, skb->data, in temac_start_xmit()
718 cur_p->phys = dma_map_single(ndev->dev.parent, in temac_start_xmit()
741 static void ll_temac_recv(struct net_device *ndev) in ll_temac_recv() argument
743 struct temac_local *lp = netdev_priv(ndev); in ll_temac_recv()
762 dma_unmap_single(ndev->dev.parent, cur_p->phys, length, in ll_temac_recv()
766 skb->protocol = eth_type_trans(skb, ndev); in ll_temac_recv()
781 ndev->stats.rx_packets++; in ll_temac_recv()
782 ndev->stats.rx_bytes += length; in ll_temac_recv()
784 new_skb = netdev_alloc_skb_ip_align(ndev, in ll_temac_recv()
792 cur_p->phys = dma_map_single(ndev->dev.parent, new_skb->data, in ll_temac_recv()
812 struct net_device *ndev = _ndev; in ll_temac_tx_irq() local
813 struct temac_local *lp = netdev_priv(ndev); in ll_temac_tx_irq()
820 temac_start_xmit_done(lp->ndev); in ll_temac_tx_irq()
822 dev_err(&ndev->dev, "DMA error 0x%x\n", status); in ll_temac_tx_irq()
829 struct net_device *ndev = _ndev; in ll_temac_rx_irq() local
830 struct temac_local *lp = netdev_priv(ndev); in ll_temac_rx_irq()
838 ll_temac_recv(lp->ndev); in ll_temac_rx_irq()
843 static int temac_open(struct net_device *ndev) in temac_open() argument
845 struct temac_local *lp = netdev_priv(ndev); in temac_open()
848 dev_dbg(&ndev->dev, "temac_open()\n"); in temac_open()
851 lp->phy_dev = of_phy_connect(lp->ndev, lp->phy_node, in temac_open()
861 temac_device_reset(ndev); in temac_open()
863 rc = request_irq(lp->tx_irq, ll_temac_tx_irq, 0, ndev->name, ndev); in temac_open()
866 rc = request_irq(lp->rx_irq, ll_temac_rx_irq, 0, ndev->name, ndev); in temac_open()
873 free_irq(lp->tx_irq, ndev); in temac_open()
882 static int temac_stop(struct net_device *ndev) in temac_stop() argument
884 struct temac_local *lp = netdev_priv(ndev); in temac_stop()
886 dev_dbg(&ndev->dev, "temac_close()\n"); in temac_stop()
888 free_irq(lp->tx_irq, ndev); in temac_stop()
889 free_irq(lp->rx_irq, ndev); in temac_stop()
895 temac_dma_bd_release(ndev); in temac_stop()
902 temac_poll_controller(struct net_device *ndev) in temac_poll_controller() argument
904 struct temac_local *lp = netdev_priv(ndev); in temac_poll_controller()
909 ll_temac_rx_irq(lp->tx_irq, ndev); in temac_poll_controller()
910 ll_temac_tx_irq(lp->rx_irq, ndev); in temac_poll_controller()
917 static int temac_ioctl(struct net_device *ndev, struct ifreq *rq, int cmd) in temac_ioctl() argument
919 struct temac_local *lp = netdev_priv(ndev); in temac_ioctl()
921 if (!netif_running(ndev)) in temac_ioctl()
948 struct net_device *ndev = dev_get_drvdata(dev); in temac_show_llink_regs() local
949 struct temac_local *lp = netdev_priv(ndev); in temac_show_llink_regs()
972 static int temac_get_settings(struct net_device *ndev, struct ethtool_cmd *cmd) in temac_get_settings() argument
974 struct temac_local *lp = netdev_priv(ndev); in temac_get_settings()
978 static int temac_set_settings(struct net_device *ndev, struct ethtool_cmd *cmd) in temac_set_settings() argument
980 struct temac_local *lp = netdev_priv(ndev); in temac_set_settings()
984 static int temac_nway_reset(struct net_device *ndev) in temac_nway_reset() argument
986 struct temac_local *lp = netdev_priv(ndev); in temac_nway_reset()
1002 struct net_device *ndev; in temac_of_probe() local
1008 ndev = alloc_etherdev(sizeof(*lp)); in temac_of_probe()
1009 if (!ndev) in temac_of_probe()
1012 platform_set_drvdata(op, ndev); in temac_of_probe()
1013 SET_NETDEV_DEV(ndev, &op->dev); in temac_of_probe()
1014 ndev->flags &= ~IFF_MULTICAST; /* clear multicast */ in temac_of_probe()
1015 ndev->features = NETIF_F_SG; in temac_of_probe()
1016 ndev->netdev_ops = &temac_netdev_ops; in temac_of_probe()
1017 ndev->ethtool_ops = &temac_ethtool_ops; in temac_of_probe()
1019 ndev->features |= NETIF_F_IP_CSUM; /* Can checksum TCP/UDP over IPv4. */ in temac_of_probe()
1020 ndev->features |= NETIF_F_HW_CSUM; /* Can checksum all the packets. */ in temac_of_probe()
1021 ndev->features |= NETIF_F_IPV6_CSUM; /* Can checksum IPV6 TCP/UDP */ in temac_of_probe()
1022 ndev->features |= NETIF_F_HIGHDMA; /* Can DMA to high memory. */ in temac_of_probe()
1023 ndev->features |= NETIF_F_HW_VLAN_CTAG_TX; /* Transmit VLAN hw accel */ in temac_of_probe()
1024 ndev->features |= NETIF_F_HW_VLAN_CTAG_RX; /* Receive VLAN hw acceleration */ in temac_of_probe()
1025 ndev->features |= NETIF_F_HW_VLAN_CTAG_FILTER; /* Receive VLAN filtering */ in temac_of_probe()
1026 ndev->features |= NETIF_F_VLAN_CHALLENGED; /* cannot handle VLAN pkts */ in temac_of_probe()
1027 ndev->features |= NETIF_F_GSO; /* Enable software GSO. */ in temac_of_probe()
1028 ndev->features |= NETIF_F_MULTI_QUEUE; /* Has multiple TX/RX queues */ in temac_of_probe()
1029 ndev->features |= NETIF_F_LRO; /* large receive offload */ in temac_of_probe()
1033 lp = netdev_priv(ndev); in temac_of_probe()
1034 lp->ndev = ndev; in temac_of_probe()
1054 ndev->features |= NETIF_F_IP_CSUM; in temac_of_probe()
1103 temac_init_mac_address(ndev, (void *)addr); in temac_of_probe()
1120 rc = register_netdev(lp->ndev); in temac_of_probe()
1136 free_netdev(ndev); in temac_of_probe()
1137 ndev = NULL; in temac_of_probe()
1143 struct net_device *ndev = platform_get_drvdata(op); in temac_of_remove() local
1144 struct temac_local *lp = netdev_priv(ndev); in temac_of_remove()
1147 unregister_netdev(ndev); in temac_of_remove()
1154 free_netdev(ndev); in temac_of_remove()