usbnet.c (c369898759e0e143a513d022121290370f001d01) | usbnet.c (c8b5d129ee293bcf972e7279ac996bb8a138505c) |
---|---|
1/* 2 * USB Network driver infrastructure 3 * Copyright (C) 2000-2005 by David Brownell 4 * Copyright (C) 2003-2005 David Hollis <dhollis@davehollis.com> 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation; either version 2 of the License, or --- 302 unchanged lines hidden (view full) --- 311} 312 313/* Passes this packet up the stack, updating its accounting. 314 * Some link protocols batch packets, so their rx_fixup paths 315 * can return clones as well as just modify the original skb. 316 */ 317void usbnet_skb_return (struct usbnet *dev, struct sk_buff *skb) 318{ | 1/* 2 * USB Network driver infrastructure 3 * Copyright (C) 2000-2005 by David Brownell 4 * Copyright (C) 2003-2005 David Hollis <dhollis@davehollis.com> 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation; either version 2 of the License, or --- 302 unchanged lines hidden (view full) --- 311} 312 313/* Passes this packet up the stack, updating its accounting. 314 * Some link protocols batch packets, so their rx_fixup paths 315 * can return clones as well as just modify the original skb. 316 */ 317void usbnet_skb_return (struct usbnet *dev, struct sk_buff *skb) 318{ |
319 struct pcpu_sw_netstats *stats64 = this_cpu_ptr(dev->stats64); |
|
319 int status; 320 321 if (test_bit(EVENT_RX_PAUSED, &dev->flags)) { 322 skb_queue_tail(&dev->rxq_pause, skb); 323 return; 324 } 325 326 /* only update if unset to allow minidriver rx_fixup override */ 327 if (skb->protocol == 0) 328 skb->protocol = eth_type_trans (skb, dev->net); 329 | 320 int status; 321 322 if (test_bit(EVENT_RX_PAUSED, &dev->flags)) { 323 skb_queue_tail(&dev->rxq_pause, skb); 324 return; 325 } 326 327 /* only update if unset to allow minidriver rx_fixup override */ 328 if (skb->protocol == 0) 329 skb->protocol = eth_type_trans (skb, dev->net); 330 |
330 dev->net->stats.rx_packets++; 331 dev->net->stats.rx_bytes += skb->len; | 331 u64_stats_update_begin(&stats64->syncp); 332 stats64->rx_packets++; 333 stats64->rx_bytes += skb->len; 334 u64_stats_update_end(&stats64->syncp); |
332 333 netif_dbg(dev, rx_status, dev->net, "< rx, len %zu, type 0x%x\n", 334 skb->len + sizeof (struct ethhdr), skb->protocol); 335 memset (skb->cb, 0, sizeof (struct skb_data)); 336 337 if (skb_defer_rx_timestamp(skb)) 338 return; 339 --- 636 unchanged lines hidden (view full) --- 976 977 /* hard_mtu or rx_urb_size may change in link_reset() */ 978 usbnet_update_max_qlen(dev); 979 980 return retval; 981} 982EXPORT_SYMBOL_GPL(usbnet_set_link_ksettings); 983 | 335 336 netif_dbg(dev, rx_status, dev->net, "< rx, len %zu, type 0x%x\n", 337 skb->len + sizeof (struct ethhdr), skb->protocol); 338 memset (skb->cb, 0, sizeof (struct skb_data)); 339 340 if (skb_defer_rx_timestamp(skb)) 341 return; 342 --- 636 unchanged lines hidden (view full) --- 979 980 /* hard_mtu or rx_urb_size may change in link_reset() */ 981 usbnet_update_max_qlen(dev); 982 983 return retval; 984} 985EXPORT_SYMBOL_GPL(usbnet_set_link_ksettings); 986 |
987void usbnet_get_stats64(struct net_device *net, struct rtnl_link_stats64 *stats) 988{ 989 struct usbnet *dev = netdev_priv(net); 990 unsigned int start; 991 int cpu; 992 993 netdev_stats_to_stats64(stats, &net->stats); 994 995 for_each_possible_cpu(cpu) { 996 struct pcpu_sw_netstats *stats64; 997 u64 rx_packets, rx_bytes; 998 u64 tx_packets, tx_bytes; 999 1000 stats64 = per_cpu_ptr(dev->stats64, cpu); 1001 1002 do { 1003 start = u64_stats_fetch_begin_irq(&stats64->syncp); 1004 rx_packets = stats64->rx_packets; 1005 rx_bytes = stats64->rx_bytes; 1006 tx_packets = stats64->tx_packets; 1007 tx_bytes = stats64->tx_bytes; 1008 } while (u64_stats_fetch_retry_irq(&stats64->syncp, start)); 1009 1010 stats->rx_packets += rx_packets; 1011 stats->rx_bytes += rx_bytes; 1012 stats->tx_packets += tx_packets; 1013 stats->tx_bytes += tx_bytes; 1014 } 1015} 1016EXPORT_SYMBOL_GPL(usbnet_get_stats64); 1017 |
|
984u32 usbnet_get_link (struct net_device *net) 985{ 986 struct usbnet *dev = netdev_priv(net); 987 988 /* If a check_connect is defined, return its result */ 989 if (dev->driver_info->check_connect) 990 return dev->driver_info->check_connect (dev) == 0; 991 --- 215 unchanged lines hidden (view full) --- 1207 1208static void tx_complete (struct urb *urb) 1209{ 1210 struct sk_buff *skb = (struct sk_buff *) urb->context; 1211 struct skb_data *entry = (struct skb_data *) skb->cb; 1212 struct usbnet *dev = entry->dev; 1213 1214 if (urb->status == 0) { | 1018u32 usbnet_get_link (struct net_device *net) 1019{ 1020 struct usbnet *dev = netdev_priv(net); 1021 1022 /* If a check_connect is defined, return its result */ 1023 if (dev->driver_info->check_connect) 1024 return dev->driver_info->check_connect (dev) == 0; 1025 --- 215 unchanged lines hidden (view full) --- 1241 1242static void tx_complete (struct urb *urb) 1243{ 1244 struct sk_buff *skb = (struct sk_buff *) urb->context; 1245 struct skb_data *entry = (struct skb_data *) skb->cb; 1246 struct usbnet *dev = entry->dev; 1247 1248 if (urb->status == 0) { |
1215 dev->net->stats.tx_packets += entry->packets; 1216 dev->net->stats.tx_bytes += entry->length; | 1249 struct pcpu_sw_netstats *stats64 = this_cpu_ptr(dev->stats64); 1250 1251 u64_stats_update_begin(&stats64->syncp); 1252 stats64->tx_packets += entry->packets; 1253 stats64->tx_bytes += entry->length; 1254 u64_stats_update_end(&stats64->syncp); |
1217 } else { 1218 dev->net->stats.tx_errors++; 1219 1220 switch (urb->status) { 1221 case -EPIPE: 1222 usbnet_defer_kevent (dev, EVENT_TX_HALT); 1223 break; 1224 --- 340 unchanged lines hidden (view full) --- 1565 1566 if (dev->driver_info->unbind) 1567 dev->driver_info->unbind (dev, intf); 1568 1569 usb_kill_urb(dev->interrupt); 1570 usb_free_urb(dev->interrupt); 1571 kfree(dev->padding_pkt); 1572 | 1255 } else { 1256 dev->net->stats.tx_errors++; 1257 1258 switch (urb->status) { 1259 case -EPIPE: 1260 usbnet_defer_kevent (dev, EVENT_TX_HALT); 1261 break; 1262 --- 340 unchanged lines hidden (view full) --- 1603 1604 if (dev->driver_info->unbind) 1605 dev->driver_info->unbind (dev, intf); 1606 1607 usb_kill_urb(dev->interrupt); 1608 usb_free_urb(dev->interrupt); 1609 kfree(dev->padding_pkt); 1610 |
1611 free_percpu(dev->stats64); |
|
1573 free_netdev(net); 1574} 1575EXPORT_SYMBOL_GPL(usbnet_disconnect); 1576 1577static const struct net_device_ops usbnet_netdev_ops = { 1578 .ndo_open = usbnet_open, 1579 .ndo_stop = usbnet_stop, 1580 .ndo_start_xmit = usbnet_start_xmit, 1581 .ndo_tx_timeout = usbnet_tx_timeout, 1582 .ndo_set_rx_mode = usbnet_set_rx_mode, 1583 .ndo_change_mtu = usbnet_change_mtu, | 1612 free_netdev(net); 1613} 1614EXPORT_SYMBOL_GPL(usbnet_disconnect); 1615 1616static const struct net_device_ops usbnet_netdev_ops = { 1617 .ndo_open = usbnet_open, 1618 .ndo_stop = usbnet_stop, 1619 .ndo_start_xmit = usbnet_start_xmit, 1620 .ndo_tx_timeout = usbnet_tx_timeout, 1621 .ndo_set_rx_mode = usbnet_set_rx_mode, 1622 .ndo_change_mtu = usbnet_change_mtu, |
1623 .ndo_get_stats64 = usbnet_get_stats64, |
|
1584 .ndo_set_mac_address = eth_mac_addr, 1585 .ndo_validate_addr = eth_validate_addr, 1586}; 1587 1588/*-------------------------------------------------------------------------*/ 1589 1590// precondition: never called in_interrupt 1591 --- 45 unchanged lines hidden (view full) --- 1637 /* netdev_printk() needs this so do it as early as possible */ 1638 SET_NETDEV_DEV(net, &udev->dev); 1639 1640 dev = netdev_priv(net); 1641 dev->udev = xdev; 1642 dev->intf = udev; 1643 dev->driver_info = info; 1644 dev->driver_name = name; | 1624 .ndo_set_mac_address = eth_mac_addr, 1625 .ndo_validate_addr = eth_validate_addr, 1626}; 1627 1628/*-------------------------------------------------------------------------*/ 1629 1630// precondition: never called in_interrupt 1631 --- 45 unchanged lines hidden (view full) --- 1677 /* netdev_printk() needs this so do it as early as possible */ 1678 SET_NETDEV_DEV(net, &udev->dev); 1679 1680 dev = netdev_priv(net); 1681 dev->udev = xdev; 1682 dev->intf = udev; 1683 dev->driver_info = info; 1684 dev->driver_name = name; |
1685 1686 dev->stats64 = netdev_alloc_pcpu_stats(struct pcpu_sw_netstats); 1687 if (!dev->stats64) 1688 goto out0; 1689 |
|
1645 dev->msg_enable = netif_msg_init (msg_level, NETIF_MSG_DRV 1646 | NETIF_MSG_PROBE | NETIF_MSG_LINK); 1647 init_waitqueue_head(&dev->wait); 1648 skb_queue_head_init (&dev->rxq); 1649 skb_queue_head_init (&dev->txq); 1650 skb_queue_head_init (&dev->done); 1651 skb_queue_head_init(&dev->rxq_pause); 1652 dev->bh.func = usbnet_bh; --- 123 unchanged lines hidden (view full) --- 1776out1: 1777 /* subdrivers must undo all they did in bind() if they 1778 * fail it, but we may fail later and a deferred kevent 1779 * may trigger an error resubmitting itself and, worse, 1780 * schedule a timer. So we kill it all just in case. 1781 */ 1782 cancel_work_sync(&dev->kevent); 1783 del_timer_sync(&dev->delay); | 1690 dev->msg_enable = netif_msg_init (msg_level, NETIF_MSG_DRV 1691 | NETIF_MSG_PROBE | NETIF_MSG_LINK); 1692 init_waitqueue_head(&dev->wait); 1693 skb_queue_head_init (&dev->rxq); 1694 skb_queue_head_init (&dev->txq); 1695 skb_queue_head_init (&dev->done); 1696 skb_queue_head_init(&dev->rxq_pause); 1697 dev->bh.func = usbnet_bh; --- 123 unchanged lines hidden (view full) --- 1821out1: 1822 /* subdrivers must undo all they did in bind() if they 1823 * fail it, but we may fail later and a deferred kevent 1824 * may trigger an error resubmitting itself and, worse, 1825 * schedule a timer. So we kill it all just in case. 1826 */ 1827 cancel_work_sync(&dev->kevent); 1828 del_timer_sync(&dev->delay); |
1829 free_percpu(dev->stats64); 1830out0: |
|
1784 free_netdev(net); 1785out: 1786 return status; 1787} 1788EXPORT_SYMBOL_GPL(usbnet_probe); 1789 1790/*-------------------------------------------------------------------------*/ 1791 --- 341 unchanged lines hidden --- | 1831 free_netdev(net); 1832out: 1833 return status; 1834} 1835EXPORT_SYMBOL_GPL(usbnet_probe); 1836 1837/*-------------------------------------------------------------------------*/ 1838 --- 341 unchanged lines hidden --- |