diff options
Diffstat (limited to 'drivers/net/usb')
| -rw-r--r-- | drivers/net/usb/asix.c | 17 | ||||
| -rw-r--r-- | drivers/net/usb/catc.c | 8 | ||||
| -rw-r--r-- | drivers/net/usb/cdc-phonet.c | 1 | ||||
| -rw-r--r-- | drivers/net/usb/cdc_eem.c | 1 | ||||
| -rw-r--r-- | drivers/net/usb/dm9601.c | 7 | ||||
| -rw-r--r-- | drivers/net/usb/gl620a.c | 1 | ||||
| -rw-r--r-- | drivers/net/usb/int51x1.c | 1 | ||||
| -rw-r--r-- | drivers/net/usb/mcs7830.c | 7 | ||||
| -rw-r--r-- | drivers/net/usb/net1080.c | 1 | ||||
| -rw-r--r-- | drivers/net/usb/rndis_host.c | 1 | ||||
| -rw-r--r-- | drivers/net/usb/smsc75xx.c | 7 | ||||
| -rw-r--r-- | drivers/net/usb/smsc95xx.c | 25 | ||||
| -rw-r--r-- | drivers/net/usb/usbnet.c | 16 |
13 files changed, 58 insertions, 35 deletions
diff --git a/drivers/net/usb/asix.c b/drivers/net/usb/asix.c index 9e05639435f2..8e7d2374558b 100644 --- a/drivers/net/usb/asix.c +++ b/drivers/net/usb/asix.c | |||
| @@ -34,6 +34,7 @@ | |||
| 34 | #include <linux/usb.h> | 34 | #include <linux/usb.h> |
| 35 | #include <linux/crc32.h> | 35 | #include <linux/crc32.h> |
| 36 | #include <linux/usb/usbnet.h> | 36 | #include <linux/usb/usbnet.h> |
| 37 | #include <linux/slab.h> | ||
| 37 | 38 | ||
| 38 | #define DRIVER_VERSION "14-Jun-2006" | 39 | #define DRIVER_VERSION "14-Jun-2006" |
| 39 | static const char driver_name [] = "asix"; | 40 | static const char driver_name [] = "asix"; |
| @@ -557,16 +558,14 @@ static void asix_set_multicast(struct net_device *net) | |||
| 557 | * for our 8 byte filter buffer | 558 | * for our 8 byte filter buffer |
| 558 | * to avoid allocating memory that | 559 | * to avoid allocating memory that |
| 559 | * is tricky to free later */ | 560 | * is tricky to free later */ |
| 560 | struct dev_mc_list *mc_list; | 561 | struct netdev_hw_addr *ha; |
| 561 | u32 crc_bits; | 562 | u32 crc_bits; |
| 562 | 563 | ||
| 563 | memset(data->multi_filter, 0, AX_MCAST_FILTER_SIZE); | 564 | memset(data->multi_filter, 0, AX_MCAST_FILTER_SIZE); |
| 564 | 565 | ||
| 565 | /* Build the multicast hash filter. */ | 566 | /* Build the multicast hash filter. */ |
| 566 | netdev_for_each_mc_addr(mc_list, net) { | 567 | netdev_for_each_mc_addr(ha, net) { |
| 567 | crc_bits = | 568 | crc_bits = ether_crc(ETH_ALEN, ha->addr) >> 26; |
| 568 | ether_crc(ETH_ALEN, | ||
| 569 | mc_list->dmi_addr) >> 26; | ||
| 570 | data->multi_filter[crc_bits >> 3] |= | 569 | data->multi_filter[crc_bits >> 3] |= |
| 571 | 1 << (crc_bits & 7); | 570 | 1 << (crc_bits & 7); |
| 572 | } | 571 | } |
| @@ -793,16 +792,14 @@ static void ax88172_set_multicast(struct net_device *net) | |||
| 793 | * for our 8 byte filter buffer | 792 | * for our 8 byte filter buffer |
| 794 | * to avoid allocating memory that | 793 | * to avoid allocating memory that |
| 795 | * is tricky to free later */ | 794 | * is tricky to free later */ |
| 796 | struct dev_mc_list *mc_list; | 795 | struct netdev_hw_addr *ha; |
| 797 | u32 crc_bits; | 796 | u32 crc_bits; |
| 798 | 797 | ||
| 799 | memset(data->multi_filter, 0, AX_MCAST_FILTER_SIZE); | 798 | memset(data->multi_filter, 0, AX_MCAST_FILTER_SIZE); |
| 800 | 799 | ||
| 801 | /* Build the multicast hash filter. */ | 800 | /* Build the multicast hash filter. */ |
| 802 | netdev_for_each_mc_addr(mc_list, net) { | 801 | netdev_for_each_mc_addr(ha, net) { |
| 803 | crc_bits = | 802 | crc_bits = ether_crc(ETH_ALEN, ha->addr) >> 26; |
| 804 | ether_crc(ETH_ALEN, | ||
| 805 | mc_list->dmi_addr) >> 26; | ||
| 806 | data->multi_filter[crc_bits >> 3] |= | 803 | data->multi_filter[crc_bits >> 3] |= |
| 807 | 1 << (crc_bits & 7); | 804 | 1 << (crc_bits & 7); |
| 808 | } | 805 | } |
diff --git a/drivers/net/usb/catc.c b/drivers/net/usb/catc.c index 96f1ebe0d348..97687d335903 100644 --- a/drivers/net/usb/catc.c +++ b/drivers/net/usb/catc.c | |||
| @@ -36,7 +36,6 @@ | |||
| 36 | #include <linux/module.h> | 36 | #include <linux/module.h> |
| 37 | #include <linux/kernel.h> | 37 | #include <linux/kernel.h> |
| 38 | #include <linux/string.h> | 38 | #include <linux/string.h> |
| 39 | #include <linux/slab.h> | ||
| 40 | #include <linux/netdevice.h> | 39 | #include <linux/netdevice.h> |
| 41 | #include <linux/etherdevice.h> | 40 | #include <linux/etherdevice.h> |
| 42 | #include <linux/skbuff.h> | 41 | #include <linux/skbuff.h> |
| @@ -44,6 +43,7 @@ | |||
| 44 | #include <linux/ethtool.h> | 43 | #include <linux/ethtool.h> |
| 45 | #include <linux/crc32.h> | 44 | #include <linux/crc32.h> |
| 46 | #include <linux/bitops.h> | 45 | #include <linux/bitops.h> |
| 46 | #include <linux/gfp.h> | ||
| 47 | #include <asm/uaccess.h> | 47 | #include <asm/uaccess.h> |
| 48 | 48 | ||
| 49 | #undef DEBUG | 49 | #undef DEBUG |
| @@ -629,7 +629,7 @@ static void catc_multicast(unsigned char *addr, u8 *multicast) | |||
| 629 | static void catc_set_multicast_list(struct net_device *netdev) | 629 | static void catc_set_multicast_list(struct net_device *netdev) |
| 630 | { | 630 | { |
| 631 | struct catc *catc = netdev_priv(netdev); | 631 | struct catc *catc = netdev_priv(netdev); |
| 632 | struct dev_mc_list *mc; | 632 | struct netdev_hw_addr *ha; |
| 633 | u8 broadcast[6]; | 633 | u8 broadcast[6]; |
| 634 | u8 rx = RxEnable | RxPolarity | RxMultiCast; | 634 | u8 rx = RxEnable | RxPolarity | RxMultiCast; |
| 635 | 635 | ||
| @@ -647,8 +647,8 @@ static void catc_set_multicast_list(struct net_device *netdev) | |||
| 647 | if (netdev->flags & IFF_ALLMULTI) { | 647 | if (netdev->flags & IFF_ALLMULTI) { |
| 648 | memset(catc->multicast, 0xff, 64); | 648 | memset(catc->multicast, 0xff, 64); |
| 649 | } else { | 649 | } else { |
| 650 | netdev_for_each_mc_addr(mc, netdev) { | 650 | netdev_for_each_mc_addr(ha, netdev) { |
| 651 | u32 crc = ether_crc_le(6, mc->dmi_addr); | 651 | u32 crc = ether_crc_le(6, ha->addr); |
| 652 | if (!catc->is_f5u011) { | 652 | if (!catc->is_f5u011) { |
| 653 | catc->multicast[(crc >> 3) & 0x3f] |= 1 << (crc & 7); | 653 | catc->multicast[(crc >> 3) & 0x3f] |= 1 << (crc & 7); |
| 654 | } else { | 654 | } else { |
diff --git a/drivers/net/usb/cdc-phonet.c b/drivers/net/usb/cdc-phonet.c index 6491c9c00c83..dc9444525b49 100644 --- a/drivers/net/usb/cdc-phonet.c +++ b/drivers/net/usb/cdc-phonet.c | |||
| @@ -22,6 +22,7 @@ | |||
| 22 | 22 | ||
| 23 | #include <linux/kernel.h> | 23 | #include <linux/kernel.h> |
| 24 | #include <linux/module.h> | 24 | #include <linux/module.h> |
| 25 | #include <linux/gfp.h> | ||
| 25 | #include <linux/usb.h> | 26 | #include <linux/usb.h> |
| 26 | #include <linux/usb/cdc.h> | 27 | #include <linux/usb/cdc.h> |
| 27 | #include <linux/netdevice.h> | 28 | #include <linux/netdevice.h> |
diff --git a/drivers/net/usb/cdc_eem.c b/drivers/net/usb/cdc_eem.c index a4a85a6ed86d..5f3b97668e63 100644 --- a/drivers/net/usb/cdc_eem.c +++ b/drivers/net/usb/cdc_eem.c | |||
| @@ -30,6 +30,7 @@ | |||
| 30 | #include <linux/crc32.h> | 30 | #include <linux/crc32.h> |
| 31 | #include <linux/usb/cdc.h> | 31 | #include <linux/usb/cdc.h> |
| 32 | #include <linux/usb/usbnet.h> | 32 | #include <linux/usb/usbnet.h> |
| 33 | #include <linux/gfp.h> | ||
| 33 | 34 | ||
| 34 | 35 | ||
| 35 | /* | 36 | /* |
diff --git a/drivers/net/usb/dm9601.c b/drivers/net/usb/dm9601.c index 269339769f47..291add255246 100644 --- a/drivers/net/usb/dm9601.c +++ b/drivers/net/usb/dm9601.c | |||
| @@ -21,6 +21,7 @@ | |||
| 21 | #include <linux/usb.h> | 21 | #include <linux/usb.h> |
| 22 | #include <linux/crc32.h> | 22 | #include <linux/crc32.h> |
| 23 | #include <linux/usb/usbnet.h> | 23 | #include <linux/usb/usbnet.h> |
| 24 | #include <linux/slab.h> | ||
| 24 | 25 | ||
| 25 | /* datasheet: | 26 | /* datasheet: |
| 26 | http://ptm2.cc.utu.fi/ftp/network/cards/DM9601/From_NET/DM9601-DS-P01-930914.pdf | 27 | http://ptm2.cc.utu.fi/ftp/network/cards/DM9601/From_NET/DM9601-DS-P01-930914.pdf |
| @@ -386,10 +387,10 @@ static void dm9601_set_multicast(struct net_device *net) | |||
| 386 | netdev_mc_count(net) > DM_MAX_MCAST) { | 387 | netdev_mc_count(net) > DM_MAX_MCAST) { |
| 387 | rx_ctl |= 0x04; | 388 | rx_ctl |= 0x04; |
| 388 | } else if (!netdev_mc_empty(net)) { | 389 | } else if (!netdev_mc_empty(net)) { |
| 389 | struct dev_mc_list *mc_list; | 390 | struct netdev_hw_addr *ha; |
| 390 | 391 | ||
| 391 | netdev_for_each_mc_addr(mc_list, net) { | 392 | netdev_for_each_mc_addr(ha, net) { |
| 392 | u32 crc = ether_crc(ETH_ALEN, mc_list->dmi_addr) >> 26; | 393 | u32 crc = ether_crc(ETH_ALEN, ha->addr) >> 26; |
| 393 | hashes[crc >> 3] |= 1 << (crc & 0x7); | 394 | hashes[crc >> 3] |= 1 << (crc & 0x7); |
| 394 | } | 395 | } |
| 395 | } | 396 | } |
diff --git a/drivers/net/usb/gl620a.c b/drivers/net/usb/gl620a.c index f7ccfad9384e..dcd57c37ef73 100644 --- a/drivers/net/usb/gl620a.c +++ b/drivers/net/usb/gl620a.c | |||
| @@ -30,6 +30,7 @@ | |||
| 30 | #include <linux/mii.h> | 30 | #include <linux/mii.h> |
| 31 | #include <linux/usb.h> | 31 | #include <linux/usb.h> |
| 32 | #include <linux/usb/usbnet.h> | 32 | #include <linux/usb/usbnet.h> |
| 33 | #include <linux/gfp.h> | ||
| 33 | 34 | ||
| 34 | 35 | ||
| 35 | /* | 36 | /* |
diff --git a/drivers/net/usb/int51x1.c b/drivers/net/usb/int51x1.c index 3c228df57062..be02a25da71a 100644 --- a/drivers/net/usb/int51x1.c +++ b/drivers/net/usb/int51x1.c | |||
| @@ -29,6 +29,7 @@ | |||
| 29 | #include <linux/netdevice.h> | 29 | #include <linux/netdevice.h> |
| 30 | #include <linux/etherdevice.h> | 30 | #include <linux/etherdevice.h> |
| 31 | #include <linux/ethtool.h> | 31 | #include <linux/ethtool.h> |
| 32 | #include <linux/slab.h> | ||
| 32 | #include <linux/mii.h> | 33 | #include <linux/mii.h> |
| 33 | #include <linux/usb.h> | 34 | #include <linux/usb.h> |
| 34 | #include <linux/usb/usbnet.h> | 35 | #include <linux/usb/usbnet.h> |
diff --git a/drivers/net/usb/mcs7830.c b/drivers/net/usb/mcs7830.c index 70978219e98a..834d8cd3005d 100644 --- a/drivers/net/usb/mcs7830.c +++ b/drivers/net/usb/mcs7830.c | |||
| @@ -44,6 +44,7 @@ | |||
| 44 | #include <linux/mii.h> | 44 | #include <linux/mii.h> |
| 45 | #include <linux/module.h> | 45 | #include <linux/module.h> |
| 46 | #include <linux/netdevice.h> | 46 | #include <linux/netdevice.h> |
| 47 | #include <linux/slab.h> | ||
| 47 | #include <linux/usb.h> | 48 | #include <linux/usb.h> |
| 48 | #include <linux/usb/usbnet.h> | 49 | #include <linux/usb/usbnet.h> |
| 49 | 50 | ||
| @@ -452,12 +453,12 @@ static void mcs7830_data_set_multicast(struct net_device *net) | |||
| 452 | * for our 8 byte filter buffer | 453 | * for our 8 byte filter buffer |
| 453 | * to avoid allocating memory that | 454 | * to avoid allocating memory that |
| 454 | * is tricky to free later */ | 455 | * is tricky to free later */ |
| 455 | struct dev_mc_list *mc_list; | 456 | struct netdev_hw_addr *ha; |
| 456 | u32 crc_bits; | 457 | u32 crc_bits; |
| 457 | 458 | ||
| 458 | /* Build the multicast hash filter. */ | 459 | /* Build the multicast hash filter. */ |
| 459 | netdev_for_each_mc_addr(mc_list, net) { | 460 | netdev_for_each_mc_addr(ha, net) { |
| 460 | crc_bits = ether_crc(ETH_ALEN, mc_list->dmi_addr) >> 26; | 461 | crc_bits = ether_crc(ETH_ALEN, ha->addr) >> 26; |
| 461 | data->multi_filter[crc_bits >> 3] |= 1 << (crc_bits & 7); | 462 | data->multi_filter[crc_bits >> 3] |= 1 << (crc_bits & 7); |
| 462 | } | 463 | } |
| 463 | } | 464 | } |
diff --git a/drivers/net/usb/net1080.c b/drivers/net/usb/net1080.c index bdcad45954a3..961a8ed38d8f 100644 --- a/drivers/net/usb/net1080.c +++ b/drivers/net/usb/net1080.c | |||
| @@ -29,6 +29,7 @@ | |||
| 29 | #include <linux/mii.h> | 29 | #include <linux/mii.h> |
| 30 | #include <linux/usb.h> | 30 | #include <linux/usb.h> |
| 31 | #include <linux/usb/usbnet.h> | 31 | #include <linux/usb/usbnet.h> |
| 32 | #include <linux/slab.h> | ||
| 32 | 33 | ||
| 33 | #include <asm/unaligned.h> | 34 | #include <asm/unaligned.h> |
| 34 | 35 | ||
diff --git a/drivers/net/usb/rndis_host.c b/drivers/net/usb/rndis_host.c index 4ce331fb1e1e..dd8a4adf48ca 100644 --- a/drivers/net/usb/rndis_host.c +++ b/drivers/net/usb/rndis_host.c | |||
| @@ -22,6 +22,7 @@ | |||
| 22 | #include <linux/etherdevice.h> | 22 | #include <linux/etherdevice.h> |
| 23 | #include <linux/ethtool.h> | 23 | #include <linux/ethtool.h> |
| 24 | #include <linux/workqueue.h> | 24 | #include <linux/workqueue.h> |
| 25 | #include <linux/slab.h> | ||
| 25 | #include <linux/mii.h> | 26 | #include <linux/mii.h> |
| 26 | #include <linux/usb.h> | 27 | #include <linux/usb.h> |
| 27 | #include <linux/usb/cdc.h> | 28 | #include <linux/usb/cdc.h> |
diff --git a/drivers/net/usb/smsc75xx.c b/drivers/net/usb/smsc75xx.c index 300e3e764fa2..753ee6eb7edd 100644 --- a/drivers/net/usb/smsc75xx.c +++ b/drivers/net/usb/smsc75xx.c | |||
| @@ -28,6 +28,7 @@ | |||
| 28 | #include <linux/usb.h> | 28 | #include <linux/usb.h> |
| 29 | #include <linux/crc32.h> | 29 | #include <linux/crc32.h> |
| 30 | #include <linux/usb/usbnet.h> | 30 | #include <linux/usb/usbnet.h> |
| 31 | #include <linux/slab.h> | ||
| 31 | #include "smsc75xx.h" | 32 | #include "smsc75xx.h" |
| 32 | 33 | ||
| 33 | #define SMSC_CHIPNAME "smsc75xx" | 34 | #define SMSC_CHIPNAME "smsc75xx" |
| @@ -444,14 +445,14 @@ static void smsc75xx_set_multicast(struct net_device *netdev) | |||
| 444 | netif_dbg(dev, drv, dev->net, "receive all multicast enabled"); | 445 | netif_dbg(dev, drv, dev->net, "receive all multicast enabled"); |
| 445 | pdata->rfe_ctl |= RFE_CTL_AM | RFE_CTL_DPF; | 446 | pdata->rfe_ctl |= RFE_CTL_AM | RFE_CTL_DPF; |
| 446 | } else if (!netdev_mc_empty(dev->net)) { | 447 | } else if (!netdev_mc_empty(dev->net)) { |
| 447 | struct dev_mc_list *mc_list; | 448 | struct netdev_hw_addr *ha; |
| 448 | 449 | ||
| 449 | netif_dbg(dev, drv, dev->net, "receive multicast hash filter"); | 450 | netif_dbg(dev, drv, dev->net, "receive multicast hash filter"); |
| 450 | 451 | ||
| 451 | pdata->rfe_ctl |= RFE_CTL_MHF | RFE_CTL_DPF; | 452 | pdata->rfe_ctl |= RFE_CTL_MHF | RFE_CTL_DPF; |
| 452 | 453 | ||
| 453 | netdev_for_each_mc_addr(mc_list, netdev) { | 454 | netdev_for_each_mc_addr(ha, netdev) { |
| 454 | u32 bitnum = smsc75xx_hash(mc_list->dmi_addr); | 455 | u32 bitnum = smsc75xx_hash(ha->addr); |
| 455 | pdata->multicast_hash_table[bitnum / 32] |= | 456 | pdata->multicast_hash_table[bitnum / 32] |= |
| 456 | (1 << (bitnum % 32)); | 457 | (1 << (bitnum % 32)); |
| 457 | } | 458 | } |
diff --git a/drivers/net/usb/smsc95xx.c b/drivers/net/usb/smsc95xx.c index d222d7e25273..12a3c88c5282 100644 --- a/drivers/net/usb/smsc95xx.c +++ b/drivers/net/usb/smsc95xx.c | |||
| @@ -28,6 +28,7 @@ | |||
| 28 | #include <linux/usb.h> | 28 | #include <linux/usb.h> |
| 29 | #include <linux/crc32.h> | 29 | #include <linux/crc32.h> |
| 30 | #include <linux/usb/usbnet.h> | 30 | #include <linux/usb/usbnet.h> |
| 31 | #include <linux/slab.h> | ||
| 31 | #include "smsc95xx.h" | 32 | #include "smsc95xx.h" |
| 32 | 33 | ||
| 33 | #define SMSC_CHIPNAME "smsc95xx" | 34 | #define SMSC_CHIPNAME "smsc95xx" |
| @@ -384,13 +385,13 @@ static void smsc95xx_set_multicast(struct net_device *netdev) | |||
| 384 | pdata->mac_cr |= MAC_CR_MCPAS_; | 385 | pdata->mac_cr |= MAC_CR_MCPAS_; |
| 385 | pdata->mac_cr &= ~(MAC_CR_PRMS_ | MAC_CR_HPFILT_); | 386 | pdata->mac_cr &= ~(MAC_CR_PRMS_ | MAC_CR_HPFILT_); |
| 386 | } else if (!netdev_mc_empty(dev->net)) { | 387 | } else if (!netdev_mc_empty(dev->net)) { |
| 387 | struct dev_mc_list *mc_list; | 388 | struct netdev_hw_addr *ha; |
| 388 | 389 | ||
| 389 | pdata->mac_cr |= MAC_CR_HPFILT_; | 390 | pdata->mac_cr |= MAC_CR_HPFILT_; |
| 390 | pdata->mac_cr &= ~(MAC_CR_PRMS_ | MAC_CR_MCPAS_); | 391 | pdata->mac_cr &= ~(MAC_CR_PRMS_ | MAC_CR_MCPAS_); |
| 391 | 392 | ||
| 392 | netdev_for_each_mc_addr(mc_list, netdev) { | 393 | netdev_for_each_mc_addr(ha, netdev) { |
| 393 | u32 bitnum = smsc95xx_hash(mc_list->dmi_addr); | 394 | u32 bitnum = smsc95xx_hash(ha->addr); |
| 394 | u32 mask = 0x01 << (bitnum & 0x1F); | 395 | u32 mask = 0x01 << (bitnum & 0x1F); |
| 395 | if (bitnum & 0x20) | 396 | if (bitnum & 0x20) |
| 396 | hash_hi |= mask; | 397 | hash_hi |= mask; |
| @@ -1189,9 +1190,21 @@ static struct sk_buff *smsc95xx_tx_fixup(struct usbnet *dev, | |||
| 1189 | } | 1190 | } |
| 1190 | 1191 | ||
| 1191 | if (csum) { | 1192 | if (csum) { |
| 1192 | u32 csum_preamble = smsc95xx_calc_csum_preamble(skb); | 1193 | if (skb->len <= 45) { |
| 1193 | skb_push(skb, 4); | 1194 | /* workaround - hardware tx checksum does not work |
| 1194 | memcpy(skb->data, &csum_preamble, 4); | 1195 | * properly with extremely small packets */ |
| 1196 | long csstart = skb->csum_start - skb_headroom(skb); | ||
| 1197 | __wsum calc = csum_partial(skb->data + csstart, | ||
| 1198 | skb->len - csstart, 0); | ||
| 1199 | *((__sum16 *)(skb->data + csstart | ||
| 1200 | + skb->csum_offset)) = csum_fold(calc); | ||
| 1201 | |||
| 1202 | csum = false; | ||
| 1203 | } else { | ||
| 1204 | u32 csum_preamble = smsc95xx_calc_csum_preamble(skb); | ||
| 1205 | skb_push(skb, 4); | ||
| 1206 | memcpy(skb->data, &csum_preamble, 4); | ||
| 1207 | } | ||
| 1195 | } | 1208 | } |
| 1196 | 1209 | ||
| 1197 | skb_push(skb, 4); | 1210 | skb_push(skb, 4); |
diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c index 17b6a62d206e..a95c73de5824 100644 --- a/drivers/net/usb/usbnet.c +++ b/drivers/net/usb/usbnet.c | |||
| @@ -43,6 +43,7 @@ | |||
| 43 | #include <linux/mii.h> | 43 | #include <linux/mii.h> |
| 44 | #include <linux/usb.h> | 44 | #include <linux/usb.h> |
| 45 | #include <linux/usb/usbnet.h> | 45 | #include <linux/usb/usbnet.h> |
| 46 | #include <linux/slab.h> | ||
| 46 | 47 | ||
| 47 | #define DRIVER_VERSION "22-Aug-2005" | 48 | #define DRIVER_VERSION "22-Aug-2005" |
| 48 | 49 | ||
| @@ -1068,12 +1069,15 @@ netdev_tx_t usbnet_start_xmit (struct sk_buff *skb, | |||
| 1068 | * NOTE: strictly conforming cdc-ether devices should expect | 1069 | * NOTE: strictly conforming cdc-ether devices should expect |
| 1069 | * the ZLP here, but ignore the one-byte packet. | 1070 | * the ZLP here, but ignore the one-byte packet. |
| 1070 | */ | 1071 | */ |
| 1071 | if (!(info->flags & FLAG_SEND_ZLP) && (length % dev->maxpacket) == 0) { | 1072 | if (length % dev->maxpacket == 0) { |
| 1072 | urb->transfer_buffer_length++; | 1073 | if (!(info->flags & FLAG_SEND_ZLP)) { |
| 1073 | if (skb_tailroom(skb)) { | 1074 | urb->transfer_buffer_length++; |
| 1074 | skb->data[skb->len] = 0; | 1075 | if (skb_tailroom(skb)) { |
| 1075 | __skb_put(skb, 1); | 1076 | skb->data[skb->len] = 0; |
| 1076 | } | 1077 | __skb_put(skb, 1); |
| 1078 | } | ||
| 1079 | } else | ||
| 1080 | urb->transfer_flags |= URB_ZERO_PACKET; | ||
| 1077 | } | 1081 | } |
| 1078 | 1082 | ||
| 1079 | spin_lock_irqsave(&dev->txq.lock, flags); | 1083 | spin_lock_irqsave(&dev->txq.lock, flags); |
