Skip to content

Commit

Permalink
usb: dwc3: ep0: use dwc3_request for ep0 requsts instead of usb_request
Browse files Browse the repository at this point in the history
Instead of special functions and shortcuts for sending our internal
answers to the host we started doing what the gadget does and used the
public API for this. Since we only were using a few fields the
usb_request was enough. Later added the list handling in order to
synchronize the host / gadget events and now we require to have the
dwc3_request struct around our usb_request or else we touch memory that
does not belong to us. So this patch does this.

Reported-by: Partha Basak <p-basak2@ti.com>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Signed-off-by: Felipe Balbi <balbi@ti.com>
  • Loading branch information
Sebastian Andrzej Siewior authored and Felipe Balbi committed Dec 12, 2011
1 parent 164d773 commit e0ce0b0
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 18 deletions.
16 changes: 15 additions & 1 deletion drivers/usb/dwc3/core.h
Original file line number Diff line number Diff line change
Expand Up @@ -548,6 +548,20 @@ struct dwc3_hwparams {
/* HWPARAMS1 */
#define DWC3_NUM_INT(n) (((n) & (0x3f << 15)) >> 15)

struct dwc3_request {
struct usb_request request;
struct list_head list;
struct dwc3_ep *dep;

u8 epnum;
struct dwc3_trb_hw *trb;
dma_addr_t trb_dma;

unsigned direction:1;
unsigned mapped:1;
unsigned queued:1;
};

/**
* struct dwc3 - representation of our controller
* @ctrl_req: usb control request which is used for ep0
Expand Down Expand Up @@ -596,7 +610,7 @@ struct dwc3 {
dma_addr_t ep0_trb_addr;
dma_addr_t setup_buf_addr;
dma_addr_t ep0_bounce_addr;
struct usb_request ep0_usb_req;
struct dwc3_request ep0_usb_req;
/* device lock */
spinlock_t lock;
struct device *dev;
Expand Down
8 changes: 4 additions & 4 deletions drivers/usb/dwc3/ep0.c
Original file line number Diff line number Diff line change
Expand Up @@ -302,10 +302,10 @@ static int dwc3_ep0_handle_status(struct dwc3 *dwc,

response_pkt = (__le16 *) dwc->setup_buf;
*response_pkt = cpu_to_le16(usb_status);
dwc->ep0_usb_req.length = sizeof(*response_pkt);
dwc->ep0_usb_req.dma = dwc->setup_buf_addr;
dwc->ep0_usb_req.complete = dwc3_ep0_status_cmpl;
return usb_ep_queue(&dwc->eps[0]->endpoint, &dwc->ep0_usb_req,
dwc->ep0_usb_req.request.length = sizeof(*response_pkt);
dwc->ep0_usb_req.request.dma = dwc->setup_buf_addr;
dwc->ep0_usb_req.request.complete = dwc3_ep0_status_cmpl;
return usb_ep_queue(&dwc->eps[0]->endpoint, &dwc->ep0_usb_req.request,
GFP_ATOMIC);
}

Expand Down
13 changes: 0 additions & 13 deletions drivers/usb/dwc3/gadget.h
Original file line number Diff line number Diff line change
Expand Up @@ -79,19 +79,6 @@ struct dwc3_gadget_ep_cmd_params {

/* -------------------------------------------------------------------------- */

struct dwc3_request {
struct usb_request request;
struct list_head list;
struct dwc3_ep *dep;

u8 epnum;
struct dwc3_trb_hw *trb;
dma_addr_t trb_dma;

unsigned direction:1;
unsigned mapped:1;
unsigned queued:1;
};
#define to_dwc3_request(r) (container_of(r, struct dwc3_request, request))

static inline struct dwc3_request *next_request(struct list_head *list)
Expand Down

0 comments on commit e0ce0b0

Please sign in to comment.