usb: dwc3: gadget: add dwc3_request status tracking
This patch starts tracking dwc3_request status. A following patch will build on top of this to prevent a request from being queued twice. Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
This commit is contained in:
parent
546970fdab
commit
a3af5e3ad3
|
@ -863,6 +863,7 @@ struct dwc3_hwparams {
|
|||
* @num_pending_sgs: counter to pending sgs
|
||||
* @num_queued_sgs: counter to the number of sgs which already got queued
|
||||
* @remaining: amount of data remaining
|
||||
* @status: internal dwc3 request status tracking
|
||||
* @epnum: endpoint number to which this request refers
|
||||
* @trb: pointer to struct dwc3_trb
|
||||
* @trb_dma: DMA address of @trb
|
||||
|
@ -883,6 +884,14 @@ struct dwc3_request {
|
|||
unsigned num_pending_sgs;
|
||||
unsigned int num_queued_sgs;
|
||||
unsigned remaining;
|
||||
|
||||
unsigned int status;
|
||||
#define DWC3_REQUEST_STATUS_QUEUED 0
|
||||
#define DWC3_REQUEST_STATUS_STARTED 1
|
||||
#define DWC3_REQUEST_STATUS_CANCELLED 2
|
||||
#define DWC3_REQUEST_STATUS_COMPLETED 3
|
||||
#define DWC3_REQUEST_STATUS_UNKNOWN -1
|
||||
|
||||
u8 epnum;
|
||||
struct dwc3_trb *trb;
|
||||
dma_addr_t trb_dma;
|
||||
|
|
|
@ -209,6 +209,7 @@ void dwc3_gadget_giveback(struct dwc3_ep *dep, struct dwc3_request *req,
|
|||
struct dwc3 *dwc = dep->dwc;
|
||||
|
||||
dwc3_gadget_del_and_unmap_request(dep, req, status);
|
||||
req->status = DWC3_REQUEST_STATUS_COMPLETED;
|
||||
|
||||
spin_unlock(&dwc->lock);
|
||||
usb_gadget_giveback_request(&dep->endpoint, &req->request);
|
||||
|
@ -847,6 +848,7 @@ static struct usb_request *dwc3_gadget_ep_alloc_request(struct usb_ep *ep,
|
|||
req->direction = dep->direction;
|
||||
req->epnum = dep->number;
|
||||
req->dep = dep;
|
||||
req->status = DWC3_REQUEST_STATUS_UNKNOWN;
|
||||
|
||||
trace_dwc3_alloc_request(req);
|
||||
|
||||
|
@ -1443,6 +1445,7 @@ static int __dwc3_gadget_ep_queue(struct dwc3_ep *dep, struct dwc3_request *req)
|
|||
trace_dwc3_ep_queue(req);
|
||||
|
||||
list_add_tail(&req->list, &dep->pending_list);
|
||||
req->status = DWC3_REQUEST_STATUS_QUEUED;
|
||||
|
||||
/*
|
||||
* NOTICE: Isochronous endpoints should NEVER be prestarted. We must
|
||||
|
|
|
@ -76,6 +76,7 @@ static inline void dwc3_gadget_move_started_request(struct dwc3_request *req)
|
|||
struct dwc3_ep *dep = req->dep;
|
||||
|
||||
req->started = true;
|
||||
req->status = DWC3_REQUEST_STATUS_STARTED;
|
||||
list_move_tail(&req->list, &dep->started_list);
|
||||
}
|
||||
|
||||
|
@ -91,6 +92,7 @@ static inline void dwc3_gadget_move_cancelled_request(struct dwc3_request *req)
|
|||
struct dwc3_ep *dep = req->dep;
|
||||
|
||||
req->started = false;
|
||||
req->status = DWC3_REQUEST_STATUS_CANCELLED;
|
||||
list_move_tail(&req->list, &dep->cancelled_list);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue