diff options
author | Jules Maselbas <jmaselbas@kalray.eu> | 2020-08-11 17:16:35 +0200 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2020-08-14 14:05:17 +0200 |
commit | 5e32c21c00228a3e641641e0f8e6806c5f7724ef (patch) | |
tree | f6ed55d8bca06479c22fce95090f572533c54861 /drivers/usb | |
parent | b64e3b65a4952851cd7e608c2a2277203f1557cb (diff) | |
download | barebox-5e32c21c00228a3e641641e0f8e6806c5f7724ef.tar.gz barebox-5e32c21c00228a3e641641e0f8e6806c5f7724ef.tar.xz |
usb: dwc2: Add structure for gadget driver
Signed-off-by: Jules Maselbas <jmaselbas@kalray.eu>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/usb')
-rw-r--r-- | drivers/usb/dwc2/core.h | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/drivers/usb/dwc2/core.h b/drivers/usb/dwc2/core.h index a2ec3ff689..b188990a0b 100644 --- a/drivers/usb/dwc2/core.h +++ b/drivers/usb/dwc2/core.h @@ -416,6 +416,49 @@ struct dwc2_hw_params { #define MAX_DEVICE 16 #define MAX_ENDPOINT DWC2_MAX_EPS_CHANNELS +struct dwc2_ep { + struct usb_ep ep; + struct dwc2 *dwc2; + struct list_head queue; + struct dwc2_request *req; + char name[8]; + + unsigned int size_loaded; + unsigned int last_load; + unsigned short fifo_size; + unsigned short fifo_index; + + u8 dir_in; + u8 epnum; + u8 mc; + u16 interval; + + unsigned int halted:1; + unsigned int periodic:1; + unsigned int isochronous:1; + unsigned int send_zlp:1; + unsigned int target_frame; +#define TARGET_FRAME_INITIAL 0xFFFFFFFF + bool frame_overrun; +}; + +struct dwc2_request { + struct usb_request req; + struct list_head queue; +}; + +/* Gadget ep0 states */ +enum dwc2_ep0_state { + DWC2_EP0_SETUP, + DWC2_EP0_DATA_IN, + DWC2_EP0_DATA_OUT, + DWC2_EP0_STATUS_IN, + DWC2_EP0_STATUS_OUT, +}; + +/* Size of control and EP0 buffers */ +#define DWC2_CTRL_BUFF_SIZE 8 + struct dwc2 { struct device_d *dev; void __iomem *regs; @@ -429,6 +472,18 @@ struct dwc2 { u8 out_data_toggle[MAX_DEVICE][MAX_ENDPOINT]; int root_hub_devnum; #endif + +#ifdef CONFIG_USB_DWC2_GADGET + struct usb_gadget gadget; + struct dwc2_ep *eps_in[MAX_ENDPOINT]; + struct dwc2_ep *eps_out[MAX_ENDPOINT]; + struct usb_request *ctrl_req; + void *ep0_buff; + void *ctrl_buff; + enum dwc2_ep0_state ep0_state; + struct usb_gadget_driver *driver; + int num_eps; +#endif }; #define host_to_dwc2(ptr) container_of(ptr, struct dwc2, host) |