From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756360AbbIXPDb (ORCPT ); Thu, 24 Sep 2015 11:03:31 -0400 Received: from mailout4.samsung.com ([203.254.224.34]:34365 "EHLO mailout4.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756073AbbIXPD2 (ORCPT ); Thu, 24 Sep 2015 11:03:28 -0400 X-AuditID: cbfee61b-f79d56d0000048c5-ec-560410be8f59 From: Robert Baldyga To: balbi@ti.com Cc: gregkh@linuxfoundation.org, linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, andrzej.p@samsung.com, b.zolnierkie@samsung.com, Robert Baldyga Subject: [PATCH 2/2] usb: gadget: f_loopfack: fix function params handling Date: Thu, 24 Sep 2015 17:02:47 +0200 Message-id: <1443106967-1972-3-git-send-email-r.baldyga@samsung.com> X-Mailer: git-send-email 1.9.1 In-reply-to: <1443106967-1972-1-git-send-email-r.baldyga@samsung.com> References: <1443106967-1972-1-git-send-email-r.baldyga@samsung.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprELMWRmVeSWpSXmKPExsVy+t9jAd19AixhBusvi1nMetnOYrFxxnpW i4P36y2aF69ns7i8aw6bxaJlrcwWDw7vZHdg99g/dw27R9+WVYwex29sZ/L4vEkugCWKyyYl NSezLLVI3y6BK2PzphmsBctFKx5+WM7SwLhdsIuRk0NCwETi0q4lLBC2mMSFe+vZuhi5OIQE ljJK7Hpwnh3C+ckoce3vLSaQKjYBHYkt3ycwgtgiAgIS619cAitiFtjCKLGqdxlYkbCAl8TT 03tYQWwWAVWJiw9awOK8Ai4S3auuMUGsk5M4eWwyWA2ngKtE08cP7CC2EFDN0UVHWCcw8i5g ZFjFKJFakFxQnJSea5SXWq5XnJhbXJqXrpecn7uJERxSz6R3MB7e5X6IUYCDUYmHd4YOc5gQ a2JZcWXuIUYJDmYlEV6O90Ah3pTEyqrUovz4otKc1OJDjNIcLErivDcOMYQJCaQnlqRmp6YW pBbBZJk4OKUaGDnbdRqPb8t4lv37WPS1qpkB0e7uv+yFleb2fF1sc+vC67iAoggRJ8ZZoQ03 bXnufCs0bNEu0tZ75LViL7+Uc+en/ypRoV4/zs7hOB61NXvD3A+burXnvBdNf3E05svvv9eV Tjmv15/FJtgi05/g9bel6uae1h//HJPr02p5mpZfERBtmtVkoMRSnJFoqMVcVJwIAIrIvCEl AgAA Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Move function parameters to struct f_loopback to make them per instance instead of having them as global variables. Since we can have multiple instances of USB function we also want to have separate set of parameters for each instance. Signed-off-by: Robert Baldyga --- drivers/usb/gadget/function/f_loopback.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/drivers/usb/gadget/function/f_loopback.c b/drivers/usb/gadget/function/f_loopback.c index 300e601..8d2dac8 100644 --- a/drivers/usb/gadget/function/f_loopback.c +++ b/drivers/usb/gadget/function/f_loopback.c @@ -34,6 +34,9 @@ struct f_loopback { struct usb_ep *in_ep; struct usb_ep *out_ep; + + unsigned qlen; + unsigned buflen; }; static inline struct f_loopback *func_to_loop(struct usb_function *f) @@ -41,9 +44,6 @@ static inline struct f_loopback *func_to_loop(struct usb_function *f) return container_of(f, struct f_loopback, function); } -static unsigned qlen; -static unsigned buflen; - /*-------------------------------------------------------------------------*/ static struct usb_interface_descriptor loopback_intf = { @@ -251,7 +251,7 @@ static void loopback_complete(struct usb_ep *ep, struct usb_request *req) } /* queue the buffer for some later OUT packet */ - req->length = buflen; + req->length = loop->buflen; status = usb_ep_queue(ep, req, GFP_ATOMIC); if (status == 0) return; @@ -288,7 +288,9 @@ static void disable_loopback(struct f_loopback *loop) static inline struct usb_request *lb_alloc_ep_req(struct usb_ep *ep, int len) { - return alloc_ep_req(ep, len, buflen); + struct f_loopback *loop = ep->driver_data; + + return alloc_ep_req(ep, len, loop->buflen); } static int enable_endpoint(struct usb_composite_dev *cdev, struct f_loopback *loop, @@ -315,7 +317,7 @@ static int enable_endpoint(struct usb_composite_dev *cdev, struct f_loopback *lo * we buffer at most 'qlen' transfers; fewer if any need more * than 'buflen' bytes each. */ - for (i = 0; i < qlen && result == 0; i++) { + for (i = 0; i < loop->qlen && result == 0; i++) { req = lb_alloc_ep_req(ep, 0); if (!req) goto fail1; @@ -388,10 +390,10 @@ static struct usb_function *loopback_alloc(struct usb_function_instance *fi) lb_opts->refcnt++; mutex_unlock(&lb_opts->lock); - buflen = lb_opts->bulk_buflen; - qlen = lb_opts->qlen; - if (!qlen) - qlen = 32; + loop->buflen = lb_opts->bulk_buflen; + loop->qlen = lb_opts->qlen; + if (!loop->qlen) + loop->qlen = 32; loop->function.name = "loopback"; loop->function.bind = loopback_bind; -- 1.9.1