Commit 8f608e8a authored by Felipe Balbi's avatar Felipe Balbi

usb: dwc3: gadget: remove unnecessary 'dwc' parameter

Endpoint handlers need to know about endpoints, not dwc. If they
really need access to dwc (e.g. for printing error messages) we have a
reference to it tucked inside the endpoint.

This patch has no functional changes, it's simply moving things around.
Signed-off-by: default avatarFelipe Balbi <felipe.balbi@linux.intel.com>
parent 32033865
...@@ -703,12 +703,12 @@ static int __dwc3_gadget_ep_enable(struct dwc3_ep *dep, ...@@ -703,12 +703,12 @@ static int __dwc3_gadget_ep_enable(struct dwc3_ep *dep,
return 0; return 0;
} }
static void dwc3_stop_active_transfer(struct dwc3 *dwc, u32 epnum, bool force); static void dwc3_stop_active_transfer(struct dwc3_ep *dep, bool force);
static void dwc3_remove_requests(struct dwc3 *dwc, struct dwc3_ep *dep) static void dwc3_remove_requests(struct dwc3 *dwc, struct dwc3_ep *dep)
{ {
struct dwc3_request *req; struct dwc3_request *req;
dwc3_stop_active_transfer(dwc, dep->number, true); dwc3_stop_active_transfer(dep, true);
/* - giveback all requests to gadget driver */ /* - giveback all requests to gadget driver */
while (!list_empty(&dep->started_list)) { while (!list_empty(&dep->started_list)) {
...@@ -1275,11 +1275,10 @@ static int __dwc3_gadget_get_frame(struct dwc3 *dwc) ...@@ -1275,11 +1275,10 @@ static int __dwc3_gadget_get_frame(struct dwc3 *dwc)
return DWC3_DSTS_SOFFN(reg); return DWC3_DSTS_SOFFN(reg);
} }
static void __dwc3_gadget_start_isoc(struct dwc3 *dwc, static void __dwc3_gadget_start_isoc(struct dwc3_ep *dep, u32 cur_uf)
struct dwc3_ep *dep, u32 cur_uf)
{ {
if (list_empty(&dep->pending_list)) { if (list_empty(&dep->pending_list)) {
dev_info(dwc->dev, "%s: ran out of requests\n", dev_info(dep->dwc->dev, "%s: ran out of requests\n",
dep->name); dep->name);
dep->flags |= DWC3_EP_PENDING_REQUEST; dep->flags |= DWC3_EP_PENDING_REQUEST;
return; return;
...@@ -1329,13 +1328,13 @@ static int __dwc3_gadget_ep_queue(struct dwc3_ep *dep, struct dwc3_request *req) ...@@ -1329,13 +1328,13 @@ static int __dwc3_gadget_ep_queue(struct dwc3_ep *dep, struct dwc3_request *req)
if (usb_endpoint_xfer_isoc(dep->endpoint.desc)) { if (usb_endpoint_xfer_isoc(dep->endpoint.desc)) {
if ((dep->flags & DWC3_EP_PENDING_REQUEST)) { if ((dep->flags & DWC3_EP_PENDING_REQUEST)) {
if (dep->flags & DWC3_EP_TRANSFER_STARTED) { if (dep->flags & DWC3_EP_TRANSFER_STARTED) {
dwc3_stop_active_transfer(dwc, dep->number, true); dwc3_stop_active_transfer(dep, true);
dep->flags = DWC3_EP_ENABLED; dep->flags = DWC3_EP_ENABLED;
} else { } else {
u32 cur_uf; u32 cur_uf;
cur_uf = __dwc3_gadget_get_frame(dwc); cur_uf = __dwc3_gadget_get_frame(dwc);
__dwc3_gadget_start_isoc(dwc, dep, cur_uf); __dwc3_gadget_start_isoc(dep, cur_uf);
dep->flags &= ~DWC3_EP_PENDING_REQUEST; dep->flags &= ~DWC3_EP_PENDING_REQUEST;
} }
return 0; return 0;
...@@ -1398,7 +1397,7 @@ static int dwc3_gadget_ep_dequeue(struct usb_ep *ep, ...@@ -1398,7 +1397,7 @@ static int dwc3_gadget_ep_dequeue(struct usb_ep *ep,
} }
if (r == req) { if (r == req) {
/* wait until it is processed */ /* wait until it is processed */
dwc3_stop_active_transfer(dwc, dep->number, true); dwc3_stop_active_transfer(dep, true);
/* /*
* If request was already started, this means we had to * If request was already started, this means we had to
...@@ -2231,10 +2230,9 @@ static void dwc3_gadget_free_endpoints(struct dwc3 *dwc) ...@@ -2231,10 +2230,9 @@ static void dwc3_gadget_free_endpoints(struct dwc3 *dwc)
/* -------------------------------------------------------------------------- */ /* -------------------------------------------------------------------------- */
static int dwc3_gadget_ep_reclaim_completed_trb(struct dwc3 *dwc, static int dwc3_gadget_ep_reclaim_completed_trb(struct dwc3_ep *dep,
struct dwc3_ep *dep, struct dwc3_request *req, struct dwc3_request *req, struct dwc3_trb *trb,
struct dwc3_trb *trb, const struct dwc3_event_depevt *event, const struct dwc3_event_depevt *event, int status, int chain)
int status, int chain)
{ {
unsigned int count; unsigned int count;
unsigned int s_pkt = 0; unsigned int s_pkt = 0;
...@@ -2294,7 +2292,7 @@ static int dwc3_gadget_ep_reclaim_completed_trb(struct dwc3 *dwc, ...@@ -2294,7 +2292,7 @@ static int dwc3_gadget_ep_reclaim_completed_trb(struct dwc3 *dwc,
*/ */
dep->flags |= DWC3_EP_MISSED_ISOC; dep->flags |= DWC3_EP_MISSED_ISOC;
} else { } else {
dev_err(dwc->dev, "incomplete IN transfer %s\n", dev_err(dep->dwc->dev, "incomplete IN transfer %s\n",
dep->name); dep->name);
status = -ECONNRESET; status = -ECONNRESET;
} }
...@@ -2316,9 +2314,8 @@ static int dwc3_gadget_ep_reclaim_completed_trb(struct dwc3 *dwc, ...@@ -2316,9 +2314,8 @@ static int dwc3_gadget_ep_reclaim_completed_trb(struct dwc3 *dwc,
return 0; return 0;
} }
static int dwc3_gadget_ep_cleanup_completed_requests(struct dwc3 *dwc, static int dwc3_gadget_ep_cleanup_completed_requests(struct dwc3_ep *dep,
struct dwc3_ep *dep, const struct dwc3_event_depevt *event, const struct dwc3_event_depevt *event, int status)
int status)
{ {
struct dwc3_request *req, *n; struct dwc3_request *req, *n;
struct dwc3_trb *trb; struct dwc3_trb *trb;
...@@ -2346,22 +2343,22 @@ static int dwc3_gadget_ep_cleanup_completed_requests(struct dwc3 *dwc, ...@@ -2346,22 +2343,22 @@ static int dwc3_gadget_ep_cleanup_completed_requests(struct dwc3 *dwc,
req->sg = sg_next(s); req->sg = sg_next(s);
req->num_pending_sgs--; req->num_pending_sgs--;
ret = dwc3_gadget_ep_reclaim_completed_trb(dwc, ret = dwc3_gadget_ep_reclaim_completed_trb(dep,
dep, req, trb, event, status, req, trb, event, status,
chain); chain);
if (ret) if (ret)
break; break;
} }
} else { } else {
trb = &dep->trb_pool[dep->trb_dequeue]; trb = &dep->trb_pool[dep->trb_dequeue];
ret = dwc3_gadget_ep_reclaim_completed_trb(dwc, dep, ret = dwc3_gadget_ep_reclaim_completed_trb(dep, req,
req, trb, event, status, chain); trb, event, status, chain);
} }
if (req->unaligned || req->zero) { if (req->unaligned || req->zero) {
trb = &dep->trb_pool[dep->trb_dequeue]; trb = &dep->trb_pool[dep->trb_dequeue];
ret = dwc3_gadget_ep_reclaim_completed_trb(dwc, dep, ret = dwc3_gadget_ep_reclaim_completed_trb(dep, req,
req, trb, event, status, false); trb, event, status, false);
req->unaligned = false; req->unaligned = false;
req->zero = false; req->zero = false;
} }
...@@ -2375,7 +2372,7 @@ static int dwc3_gadget_ep_cleanup_completed_requests(struct dwc3 *dwc, ...@@ -2375,7 +2372,7 @@ static int dwc3_gadget_ep_cleanup_completed_requests(struct dwc3 *dwc,
* to kick transfer again if (req->num_pending_sgs > 0) * to kick transfer again if (req->num_pending_sgs > 0)
*/ */
if (req->num_pending_sgs) { if (req->num_pending_sgs) {
dev_WARN_ONCE(dwc->dev, dev_WARN_ONCE(dep->dwc->dev,
(req->request.actual == length), (req->request.actual == length),
"There are some pending sg's that needs to be queued again\n"); "There are some pending sg's that needs to be queued again\n");
return __dwc3_gadget_kick_transfer(dep); return __dwc3_gadget_kick_transfer(dep);
...@@ -2411,7 +2408,7 @@ static int dwc3_gadget_ep_cleanup_completed_requests(struct dwc3 *dwc, ...@@ -2411,7 +2408,7 @@ static int dwc3_gadget_ep_cleanup_completed_requests(struct dwc3 *dwc,
*/ */
dep->flags = DWC3_EP_PENDING_REQUEST; dep->flags = DWC3_EP_PENDING_REQUEST;
} else { } else {
dwc3_stop_active_transfer(dwc, dep->number, true); dwc3_stop_active_transfer(dep, true);
dep->flags = DWC3_EP_ENABLED; dep->flags = DWC3_EP_ENABLED;
} }
return 1; return 1;
...@@ -2423,16 +2420,17 @@ static int dwc3_gadget_ep_cleanup_completed_requests(struct dwc3 *dwc, ...@@ -2423,16 +2420,17 @@ static int dwc3_gadget_ep_cleanup_completed_requests(struct dwc3 *dwc,
return 1; return 1;
} }
static void dwc3_gadget_endpoint_transfer_in_progress(struct dwc3 *dwc, static void dwc3_gadget_endpoint_transfer_in_progress(struct dwc3_ep *dep,
struct dwc3_ep *dep, const struct dwc3_event_depevt *event) const struct dwc3_event_depevt *event)
{ {
struct dwc3 *dwc = dep->dwc;
unsigned status = 0; unsigned status = 0;
int clean_busy; int clean_busy;
if (event->status & DEPEVT_STATUS_BUSERR) if (event->status & DEPEVT_STATUS_BUSERR)
status = -ECONNRESET; status = -ECONNRESET;
clean_busy = dwc3_gadget_ep_cleanup_completed_requests(dwc, dep, event, clean_busy = dwc3_gadget_ep_cleanup_completed_requests(dep, event,
status); status);
if (clean_busy && (!dep->endpoint.desc || if (clean_busy && (!dep->endpoint.desc ||
usb_endpoint_xfer_isoc(dep->endpoint.desc))) usb_endpoint_xfer_isoc(dep->endpoint.desc)))
...@@ -2464,15 +2462,15 @@ static void dwc3_gadget_endpoint_transfer_in_progress(struct dwc3 *dwc, ...@@ -2464,15 +2462,15 @@ static void dwc3_gadget_endpoint_transfer_in_progress(struct dwc3 *dwc,
} }
} }
static void dwc3_gadget_endpoint_transfer_not_ready(struct dwc3 *dwc, static void dwc3_gadget_endpoint_transfer_not_ready(struct dwc3_ep *dep,
struct dwc3_ep *dep, const struct dwc3_event_depevt *event) const struct dwc3_event_depevt *event)
{ {
u32 cur_uf, mask; u32 cur_uf, mask;
mask = ~(dep->interval - 1); mask = ~(dep->interval - 1);
cur_uf = event->parameters & mask; cur_uf = event->parameters & mask;
__dwc3_gadget_start_isoc(dwc, dep, cur_uf); __dwc3_gadget_start_isoc(dep, cur_uf);
} }
static void dwc3_endpoint_interrupt(struct dwc3 *dwc, static void dwc3_endpoint_interrupt(struct dwc3 *dwc,
...@@ -2500,10 +2498,10 @@ static void dwc3_endpoint_interrupt(struct dwc3 *dwc, ...@@ -2500,10 +2498,10 @@ static void dwc3_endpoint_interrupt(struct dwc3 *dwc,
switch (event->endpoint_event) { switch (event->endpoint_event) {
case DWC3_DEPEVT_XFERINPROGRESS: case DWC3_DEPEVT_XFERINPROGRESS:
dwc3_gadget_endpoint_transfer_in_progress(dwc, dep, event); dwc3_gadget_endpoint_transfer_in_progress(dep, event);
break; break;
case DWC3_DEPEVT_XFERNOTREADY: case DWC3_DEPEVT_XFERNOTREADY:
dwc3_gadget_endpoint_transfer_not_ready(dwc, dep, event); dwc3_gadget_endpoint_transfer_not_ready(dep, event);
break; break;
case DWC3_DEPEVT_EPCMDCMPLT: case DWC3_DEPEVT_EPCMDCMPLT:
cmd = DEPEVT_PARAMETER_CMD(event->parameters); cmd = DEPEVT_PARAMETER_CMD(event->parameters);
...@@ -2559,15 +2557,13 @@ static void dwc3_reset_gadget(struct dwc3 *dwc) ...@@ -2559,15 +2557,13 @@ static void dwc3_reset_gadget(struct dwc3 *dwc)
} }
} }
static void dwc3_stop_active_transfer(struct dwc3 *dwc, u32 epnum, bool force) static void dwc3_stop_active_transfer(struct dwc3_ep *dep, bool force)
{ {
struct dwc3_ep *dep; struct dwc3 *dwc = dep->dwc;
struct dwc3_gadget_ep_cmd_params params; struct dwc3_gadget_ep_cmd_params params;
u32 cmd; u32 cmd;
int ret; int ret;
dep = dwc->eps[epnum];
if ((dep->flags & DWC3_EP_END_TRANSFER_PENDING) || if ((dep->flags & DWC3_EP_END_TRANSFER_PENDING) ||
!dep->resource_index) !dep->resource_index)
return; return;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment