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 ---