aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>2016-08-22 04:48:26 -0400
committerFelipe Balbi <felipe.balbi@linux.intel.com>2016-08-31 03:06:03 -0400
commit05f6b0ff68429bb7c6b84b35e71b522c3bae76ae (patch)
tree3d59d92dd7c41eb935be159835e2b09e84210dfc
parent60e7396f820fa67a007f2a2eb5d97d3e77a74881 (diff)
usb: gadget: u_ether: add a flag to avoid skb_reserve() calling
This patch adds a flag "no_skb_reserve" in struct eth_dev. So, if a peripheral driver sets the quirk_avoids_skb_reserve flag, upper network gadget drivers (e.g. f_ncm.c) can avoid skb_reserve() calling using the flag as well. Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com> Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
-rw-r--r--drivers/usb/gadget/function/u_ether.c5
-rw-r--r--drivers/usb/gadget/function/u_ether.h1
2 files changed, 5 insertions, 1 deletions
diff --git a/drivers/usb/gadget/function/u_ether.c b/drivers/usb/gadget/function/u_ether.c
index 5f562c1ec795..3be4b93fd415 100644
--- a/drivers/usb/gadget/function/u_ether.c
+++ b/drivers/usb/gadget/function/u_ether.c
@@ -82,6 +82,7 @@ struct eth_dev {
82#define WORK_RX_MEMORY 0 82#define WORK_RX_MEMORY 0
83 83
84 bool zlp; 84 bool zlp;
85 bool no_skb_reserve;
85 u8 host_mac[ETH_ALEN]; 86 u8 host_mac[ETH_ALEN];
86 u8 dev_mac[ETH_ALEN]; 87 u8 dev_mac[ETH_ALEN];
87}; 88};
@@ -233,7 +234,8 @@ rx_submit(struct eth_dev *dev, struct usb_request *req, gfp_t gfp_flags)
233 * but on at least one, checksumming fails otherwise. Note: 234 * but on at least one, checksumming fails otherwise. Note:
234 * RNDIS headers involve variable numbers of LE32 values. 235 * RNDIS headers involve variable numbers of LE32 values.
235 */ 236 */
236 skb_reserve(skb, NET_IP_ALIGN); 237 if (likely(!dev->no_skb_reserve))
238 skb_reserve(skb, NET_IP_ALIGN);
237 239
238 req->buf = skb->data; 240 req->buf = skb->data;
239 req->length = size; 241 req->length = size;
@@ -1063,6 +1065,7 @@ struct net_device *gether_connect(struct gether *link)
1063 1065
1064 if (result == 0) { 1066 if (result == 0) {
1065 dev->zlp = link->is_zlp_ok; 1067 dev->zlp = link->is_zlp_ok;
1068 dev->no_skb_reserve = link->no_skb_reserve;
1066 DBG(dev, "qlen %d\n", qlen(dev->gadget, dev->qmult)); 1069 DBG(dev, "qlen %d\n", qlen(dev->gadget, dev->qmult));
1067 1070
1068 dev->header_len = link->header_len; 1071 dev->header_len = link->header_len;
diff --git a/drivers/usb/gadget/function/u_ether.h b/drivers/usb/gadget/function/u_ether.h
index c77145bd6b5b..81d94a7ae4b4 100644
--- a/drivers/usb/gadget/function/u_ether.h
+++ b/drivers/usb/gadget/function/u_ether.h
@@ -64,6 +64,7 @@ struct gether {
64 struct usb_ep *out_ep; 64 struct usb_ep *out_ep;
65 65
66 bool is_zlp_ok; 66 bool is_zlp_ok;
67 bool no_skb_reserve;
67 68
68 u16 cdc_filter; 69 u16 cdc_filter;
69 70