Hi Peter >> + >> +/* >> + * USBSS-DEV register interface. >> + * This corresponds to the USBSS Device Controller Interface */ >> +/** >> + * struct xhci_cap_regs - xHCI Host Controller Capability Registers. > >struct cdns3_usb_regs - device controller registers thanks, I had this from beginning. I don't know why. I > >> +struct cdns3_device; >> + >> +struct cdns3_endpoint { >> + struct usb_ep endpoint; >> + struct list_head request_list; >> + struct list_head ep_match_pending_list; >> + >> + struct cdns3_trb *trb_pool; >> + dma_addr_t trb_pool_dma; >> + >> + struct cdns3_device *cdns3_dev; >> + char name[20]; >> + >> +#define EP_ENABLED BIT(0) >> +#define EP_STALL BIT(1) >> +#define EP_WEDGE BIT(2) >> +#define EP_TRANSFER_STARTED BIT(3) >> +#define EP_UPDATE_EP_TRBADDR BIT(4) >> +#define EP_PENDING_REQUEST BIT(5) >> +#define EP_USED BIT(5) >> + u32 flags; >> + >> + void *aligned_buff; >> + dma_addr_t aligned_dma_addr; >> + u8 dir; >> + u8 num; >> + u8 type; >> + >> + int free_trbs; >> + u8 pcs; >> + u8 ccs; >> + int enqueue; >> + int dequeue; >> +}; >> + > >Would you please add kernel doc for above structure? Done. > >> +struct cdns3_request { >> + struct usb_request request; >> + struct cdns3_endpoint *priv_ep; >> + struct cdns3_trb *trb; >> + int start_trb; >> + int end_trb; >> + int on_ring:1; >> +}; >> + >> +#define to_cdns3_request(r) (container_of(r, struct cdns3_request, >> +request)) >> + >> +struct cdns3_device { >> + struct device dev; >> + struct cdns3_usb_regs __iomem *regs; >> + >> + struct usb_gadget gadget; >> + struct usb_gadget_driver *gadget_driver; >> + >> + struct usb_ctrlrequest *setup; >> + dma_addr_t setup_dma; >> + dma_addr_t trb_ep0_dma; >> + struct cdns3_trb *trb_ep0; >> + void *zlp_buf; >> + >> + struct cdns3_endpoint *eps[USB_SS_ENDPOINTS_MAX_COUNT]; >> + int ep_nums; >> + /* >> + * field used for improving performance. It holds the last >> + * selected endpoint number >> + */ >> + u32 selected_ep; >> + struct usb_request *ep0_request; >> + int ep0_data_dir; >> + int hw_configured_flag; >> + int wake_up_flag; >> + u16 isoch_delay; >> + /* generic spin-lock for drivers */ >> + spinlock_t lock; >> + >> + unsigned is_connected:1; >> + unsigned in_standby_mode:1; >> + unsigned status_completion_no_call:1; >> + unsigned u1_allowed:1; >> + unsigned u2_allowed:1; >> + >> + u32 usb_ien; >> + u32 ep_ien; >> + int setup_pending; >> + struct device *sysdev; >> + /* The device mode is enabled */ >> + int start_gadget; >> + struct list_head ep_match_list; >> + /* KB */ >> + int onchip_mem_allocated_size; >> + /* Memory is allocated for OUT */ >> + int out_mem_is_allocated:1; >> + struct work_struct pending_status_wq; >> + struct usb_request *pending_status_request; >> +}; >> + Cheers Pawel