From bbef1aa7208841df7b7075c8c4024cb8ae573dcd Mon Sep 17 00:00:00 2001 From: hwg Date: Sat, 8 Jun 2013 19:32:04 +0800 Subject: [PATCH] modify cdc_ether for usb dma data align: support rtl8152B usb ethernet --- drivers/net/usb/cdc_ether.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/drivers/net/usb/cdc_ether.c b/drivers/net/usb/cdc_ether.c index 544c309e0d95..5fe4f5bcf917 100644 --- a/drivers/net/usb/cdc_ether.c +++ b/drivers/net/usb/cdc_ether.c @@ -460,6 +460,23 @@ static int cdc_manage_power(struct usbnet *dev, int on) return 0; } +static struct sk_buff *android_tx_fixup(struct usbnet *dev, + struct sk_buff *skb, + gfp_t flags) +{ + struct sk_buff *tx_skb; + + if ((unsigned long)skb->data % 4) { + tx_skb = alloc_skb(skb->len + NET_IP_ALIGN, flags); + if (tx_skb) + memcpy(skb_put(tx_skb, skb->len), skb->data, skb->len); + dev_kfree_skb_any(skb); + } else + tx_skb = skb; + + return tx_skb; +} + static const struct driver_info cdc_info = { .description = "CDC Ethernet Device", .flags = FLAG_ETHER | FLAG_POINTTOPOINT, @@ -468,6 +485,7 @@ static const struct driver_info cdc_info = { .unbind = usbnet_cdc_unbind, .status = usbnet_cdc_status, .manage_power = cdc_manage_power, + .tx_fixup = android_tx_fixup, }; static const struct driver_info wwan_info = { -- 2.34.1