]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - drivers/net/usb/usbnet.c
usbnet: Fix tx_packets stat for FLAG_MULTI_FRAME drivers
[karo-tx-linux.git] / drivers / net / usb / usbnet.c
index 3a6770a65d7836ace177cff2bb45c925b474a84a..0f3ff285f6a163f97a5254741e85851fba2f3a87 100644 (file)
@@ -160,20 +160,19 @@ EXPORT_SYMBOL_GPL(usbnet_get_endpoints);
 
 int usbnet_get_ethernet_addr(struct usbnet *dev, int iMACAddress)
 {
-       int             tmp, i;
+       int             tmp = -1, ret;
        unsigned char   buf [13];
 
-       tmp = usb_string(dev->udev, iMACAddress, buf, sizeof buf);
-       if (tmp != 12) {
+       ret = usb_string(dev->udev, iMACAddress, buf, sizeof buf);
+       if (ret == 12)
+               tmp = hex2bin(dev->net->dev_addr, buf, 6);
+       if (tmp < 0) {
                dev_dbg(&dev->udev->dev,
                        "bad MAC string %d fetch, %d\n", iMACAddress, tmp);
-               if (tmp >= 0)
-                       tmp = -EINVAL;
-               return tmp;
+               if (ret >= 0)
+                       ret = -EINVAL;
+               return ret;
        }
-       for (i = tmp = 0; i < 6; i++, tmp += 2)
-               dev->net->dev_addr [i] =
-                       (hex_to_bin(buf[tmp]) << 4) + hex_to_bin(buf[tmp + 1]);
        return 0;
 }
 EXPORT_SYMBOL_GPL(usbnet_get_ethernet_addr);
@@ -1189,8 +1188,7 @@ static void tx_complete (struct urb *urb)
        struct usbnet           *dev = entry->dev;
 
        if (urb->status == 0) {
-               if (!(dev->driver_info->flags & FLAG_MULTI_PACKET))
-                       dev->net->stats.tx_packets++;
+               dev->net->stats.tx_packets += entry->packets;
                dev->net->stats.tx_bytes += entry->length;
        } else {
                dev->net->stats.tx_errors++;
@@ -1349,6 +1347,8 @@ netdev_tx_t usbnet_start_xmit (struct sk_buff *skb,
                        urb->transfer_flags |= URB_ZERO_PACKET;
        }
        entry->length = urb->transfer_buffer_length = length;
+       if (!(info->flags & FLAG_MULTI_PACKET))
+               usbnet_set_skb_tx_stats(skb, 1);
 
        spin_lock_irqsave(&dev->txq.lock, flags);
        retval = usb_autopm_get_interface_async(dev->intf);