• Home
  • Raw
  • Download

Lines Matching refs:ndev

203 static void temac_dma_bd_release(struct net_device *ndev)  in temac_dma_bd_release()  argument
205 struct temac_local *lp = netdev_priv(ndev); in temac_dma_bd_release()
215 dma_unmap_single(ndev->dev.parent, lp->rx_bd_v[i].phys, in temac_dma_bd_release()
221 dma_free_coherent(ndev->dev.parent, in temac_dma_bd_release()
225 dma_free_coherent(ndev->dev.parent, in temac_dma_bd_release()
234 static int temac_dma_bd_init(struct net_device *ndev) in temac_dma_bd_init() argument
236 struct temac_local *lp = netdev_priv(ndev); in temac_dma_bd_init()
246 lp->tx_bd_v = dma_zalloc_coherent(ndev->dev.parent, in temac_dma_bd_init()
252 lp->rx_bd_v = dma_zalloc_coherent(ndev->dev.parent, in temac_dma_bd_init()
267 skb = netdev_alloc_skb_ip_align(ndev, in temac_dma_bd_init()
274 lp->rx_bd_v[i].phys = dma_map_single(ndev->dev.parent, in temac_dma_bd_init()
309 temac_dma_bd_release(ndev); in temac_dma_bd_init()
317 static void temac_do_set_mac_address(struct net_device *ndev) in temac_do_set_mac_address() argument
319 struct temac_local *lp = netdev_priv(ndev); in temac_do_set_mac_address()
324 (ndev->dev_addr[0]) | in temac_do_set_mac_address()
325 (ndev->dev_addr[1] << 8) | in temac_do_set_mac_address()
326 (ndev->dev_addr[2] << 16) | in temac_do_set_mac_address()
327 (ndev->dev_addr[3] << 24)); in temac_do_set_mac_address()
331 (ndev->dev_addr[4] & 0x000000ff) | in temac_do_set_mac_address()
332 (ndev->dev_addr[5] << 8)); in temac_do_set_mac_address()
336 static int temac_init_mac_address(struct net_device *ndev, const void *address) in temac_init_mac_address() argument
338 memcpy(ndev->dev_addr, address, ETH_ALEN); in temac_init_mac_address()
339 if (!is_valid_ether_addr(ndev->dev_addr)) in temac_init_mac_address()
340 eth_hw_addr_random(ndev); in temac_init_mac_address()
341 temac_do_set_mac_address(ndev); in temac_init_mac_address()
345 static int temac_set_mac_address(struct net_device *ndev, void *p) in temac_set_mac_address() argument
351 memcpy(ndev->dev_addr, addr->sa_data, ETH_ALEN); in temac_set_mac_address()
352 temac_do_set_mac_address(ndev); in temac_set_mac_address()
356 static void temac_set_multicast_list(struct net_device *ndev) in temac_set_multicast_list() argument
358 struct temac_local *lp = netdev_priv(ndev); in temac_set_multicast_list()
363 if (ndev->flags & (IFF_ALLMULTI | IFF_PROMISC) || in temac_set_multicast_list()
364 netdev_mc_count(ndev) > MULTICAST_CAM_TABLE_NUM) { in temac_set_multicast_list()
371 ndev->flags |= IFF_PROMISC; in temac_set_multicast_list()
373 dev_info(&ndev->dev, "Promiscuous mode enabled.\n"); in temac_set_multicast_list()
374 } else if (!netdev_mc_empty(ndev)) { in temac_set_multicast_list()
378 netdev_for_each_mc_addr(ha, ndev) { in temac_set_multicast_list()
399 dev_info(&ndev->dev, "Promiscuous mode disabled.\n"); in temac_set_multicast_list()
487 static u32 temac_setoptions(struct net_device *ndev, u32 options) in temac_setoptions() argument
489 struct temac_local *lp = netdev_priv(ndev); in temac_setoptions()
508 static void temac_device_reset(struct net_device *ndev) in temac_device_reset() argument
510 struct temac_local *lp = netdev_priv(ndev); in temac_device_reset()
519 dev_dbg(&ndev->dev, "%s()\n", __func__); in temac_device_reset()
528 dev_err(&ndev->dev, in temac_device_reset()
540 dev_err(&ndev->dev, in temac_device_reset()
556 dev_err(&ndev->dev, in temac_device_reset()
563 if (temac_dma_bd_init(ndev)) { in temac_device_reset()
564 dev_err(&ndev->dev, in temac_device_reset()
577 temac_setoptions(ndev, in temac_device_reset()
580 temac_do_set_mac_address(ndev); in temac_device_reset()
583 temac_set_multicast_list(ndev); in temac_device_reset()
584 if (temac_setoptions(ndev, lp->options)) in temac_device_reset()
585 dev_err(&ndev->dev, "Error setting TEMAC options\n"); in temac_device_reset()
588 netif_trans_update(ndev); /* prevent tx timeout */ in temac_device_reset()
591 static void temac_adjust_link(struct net_device *ndev) in temac_adjust_link() argument
593 struct temac_local *lp = netdev_priv(ndev); in temac_adjust_link()
594 struct phy_device *phy = ndev->phydev; in temac_adjust_link()
620 static void temac_start_xmit_done(struct net_device *ndev) in temac_start_xmit_done() argument
622 struct temac_local *lp = netdev_priv(ndev); in temac_start_xmit_done()
630 dma_unmap_single(ndev->dev.parent, cur_p->phys, cur_p->len, in temac_start_xmit_done()
640 ndev->stats.tx_packets++; in temac_start_xmit_done()
641 ndev->stats.tx_bytes += cur_p->len; in temac_start_xmit_done()
651 netif_wake_queue(ndev); in temac_start_xmit_done()
678 temac_start_xmit(struct sk_buff *skb, struct net_device *ndev) in temac_start_xmit() argument
680 struct temac_local *lp = netdev_priv(ndev); in temac_start_xmit()
693 if (!netif_queue_stopped(ndev)) in temac_start_xmit()
694 netif_stop_queue(ndev); in temac_start_xmit()
710 cur_p->phys = dma_map_single(ndev->dev.parent, skb->data, in temac_start_xmit()
720 cur_p->phys = dma_map_single(ndev->dev.parent, in temac_start_xmit()
743 static void ll_temac_recv(struct net_device *ndev) in ll_temac_recv() argument
745 struct temac_local *lp = netdev_priv(ndev); in ll_temac_recv()
764 dma_unmap_single(ndev->dev.parent, cur_p->phys, length, in ll_temac_recv()
768 skb->protocol = eth_type_trans(skb, ndev); in ll_temac_recv()
783 ndev->stats.rx_packets++; in ll_temac_recv()
784 ndev->stats.rx_bytes += length; in ll_temac_recv()
786 new_skb = netdev_alloc_skb_ip_align(ndev, in ll_temac_recv()
794 cur_p->phys = dma_map_single(ndev->dev.parent, new_skb->data, in ll_temac_recv()
814 struct net_device *ndev = _ndev; in ll_temac_tx_irq() local
815 struct temac_local *lp = netdev_priv(ndev); in ll_temac_tx_irq()
822 temac_start_xmit_done(lp->ndev); in ll_temac_tx_irq()
824 dev_err(&ndev->dev, "DMA error 0x%x\n", status); in ll_temac_tx_irq()
831 struct net_device *ndev = _ndev; in ll_temac_rx_irq() local
832 struct temac_local *lp = netdev_priv(ndev); in ll_temac_rx_irq()
840 ll_temac_recv(lp->ndev); in ll_temac_rx_irq()
845 static int temac_open(struct net_device *ndev) in temac_open() argument
847 struct temac_local *lp = netdev_priv(ndev); in temac_open()
851 dev_dbg(&ndev->dev, "temac_open()\n"); in temac_open()
854 phydev = of_phy_connect(lp->ndev, lp->phy_node, in temac_open()
864 temac_device_reset(ndev); in temac_open()
866 rc = request_irq(lp->tx_irq, ll_temac_tx_irq, 0, ndev->name, ndev); in temac_open()
869 rc = request_irq(lp->rx_irq, ll_temac_rx_irq, 0, ndev->name, ndev); in temac_open()
876 free_irq(lp->tx_irq, ndev); in temac_open()
884 static int temac_stop(struct net_device *ndev) in temac_stop() argument
886 struct temac_local *lp = netdev_priv(ndev); in temac_stop()
887 struct phy_device *phydev = ndev->phydev; in temac_stop()
889 dev_dbg(&ndev->dev, "temac_close()\n"); in temac_stop()
891 free_irq(lp->tx_irq, ndev); in temac_stop()
892 free_irq(lp->rx_irq, ndev); in temac_stop()
897 temac_dma_bd_release(ndev); in temac_stop()
904 temac_poll_controller(struct net_device *ndev) in temac_poll_controller() argument
906 struct temac_local *lp = netdev_priv(ndev); in temac_poll_controller()
911 ll_temac_rx_irq(lp->tx_irq, ndev); in temac_poll_controller()
912 ll_temac_tx_irq(lp->rx_irq, ndev); in temac_poll_controller()
919 static int temac_ioctl(struct net_device *ndev, struct ifreq *rq, int cmd) in temac_ioctl() argument
921 if (!netif_running(ndev)) in temac_ioctl()
924 if (!ndev->phydev) in temac_ioctl()
927 return phy_mii_ioctl(ndev->phydev, rq, cmd); 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()
984 struct net_device *ndev; in temac_of_probe() local
990 ndev = alloc_etherdev(sizeof(*lp)); in temac_of_probe()
991 if (!ndev) in temac_of_probe()
994 platform_set_drvdata(op, ndev); in temac_of_probe()
995 SET_NETDEV_DEV(ndev, &op->dev); in temac_of_probe()
996 ndev->flags &= ~IFF_MULTICAST; /* clear multicast */ in temac_of_probe()
997 ndev->features = NETIF_F_SG; in temac_of_probe()
998 ndev->netdev_ops = &temac_netdev_ops; in temac_of_probe()
999 ndev->ethtool_ops = &temac_ethtool_ops; in temac_of_probe()
1001 ndev->features |= NETIF_F_IP_CSUM; /* Can checksum TCP/UDP over IPv4. */ in temac_of_probe()
1002 ndev->features |= NETIF_F_HW_CSUM; /* Can checksum all the packets. */ in temac_of_probe()
1003 ndev->features |= NETIF_F_IPV6_CSUM; /* Can checksum IPV6 TCP/UDP */ in temac_of_probe()
1004 ndev->features |= NETIF_F_HIGHDMA; /* Can DMA to high memory. */ in temac_of_probe()
1005 ndev->features |= NETIF_F_HW_VLAN_CTAG_TX; /* Transmit VLAN hw accel */ in temac_of_probe()
1006 ndev->features |= NETIF_F_HW_VLAN_CTAG_RX; /* Receive VLAN hw acceleration */ in temac_of_probe()
1007 ndev->features |= NETIF_F_HW_VLAN_CTAG_FILTER; /* Receive VLAN filtering */ in temac_of_probe()
1008 ndev->features |= NETIF_F_VLAN_CHALLENGED; /* cannot handle VLAN pkts */ in temac_of_probe()
1009 ndev->features |= NETIF_F_GSO; /* Enable software GSO. */ in temac_of_probe()
1010 ndev->features |= NETIF_F_MULTI_QUEUE; /* Has multiple TX/RX queues */ in temac_of_probe()
1011 ndev->features |= NETIF_F_LRO; /* large receive offload */ in temac_of_probe()
1015 lp = netdev_priv(ndev); in temac_of_probe()
1016 lp->ndev = ndev; in temac_of_probe()
1036 ndev->features |= NETIF_F_IP_CSUM; in temac_of_probe()
1085 temac_init_mac_address(ndev, addr); in temac_of_probe()
1102 rc = register_netdev(lp->ndev); in temac_of_probe()
1118 free_netdev(ndev); in temac_of_probe()
1119 ndev = NULL; in temac_of_probe()
1125 struct net_device *ndev = platform_get_drvdata(op); in temac_of_remove() local
1126 struct temac_local *lp = netdev_priv(ndev); in temac_of_remove()
1129 unregister_netdev(ndev); in temac_of_remove()
1136 free_netdev(ndev); in temac_of_remove()