Implement fastboot_func_init() which provides a minimalistic setup of the USB endpoints and requests required by the fastboot gadget.
Signed-off-by: Steve Rae <s...@broadcom.com> --- drivers/usb/gadget/f_fastboot.c | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/drivers/usb/gadget/f_fastboot.c b/drivers/usb/gadget/f_fastboot.c index 6d3f05b..455f768 100644 --- a/drivers/usb/gadget/f_fastboot.c +++ b/drivers/usb/gadget/f_fastboot.c @@ -47,15 +47,18 @@ struct f_fastboot { struct usb_request *in_req, *out_req; }; +#ifndef CONFIG_FASTBOOT_NO_GADGET static inline struct f_fastboot *func_to_fastboot(struct usb_function *f) { return container_of(f, struct f_fastboot, usb_function); } +#endif static struct f_fastboot *fastboot_func; static unsigned int download_size; static unsigned int download_bytes; +#ifndef CONFIG_FASTBOOT_NO_GADGET static struct usb_endpoint_descriptor fs_ep_in = { .bLength = USB_DT_ENDPOINT_SIZE, .bDescriptorType = USB_DT_ENDPOINT, @@ -120,6 +123,7 @@ static struct usb_gadget_strings *fastboot_strings[] = { &stringtab_fastboot, NULL, }; +#endif static void rx_handler_command(struct usb_ep *ep, struct usb_request *req); @@ -131,6 +135,7 @@ static void fastboot_complete(struct usb_ep *ep, struct usb_request *req) printf("status: %d ep '%s' trans: %d\n", status, ep->name, req->actual); } +#ifndef CONFIG_FASTBOOT_NO_GADGET static int fastboot_bind(struct usb_configuration *c, struct usb_function *f) { int id; @@ -293,6 +298,7 @@ static int fastboot_add(struct usb_configuration *c) return status; } DECLARE_GADGET_BIND_CALLBACK(usb_dnl_fastboot, fastboot_add); +#endif static int fastboot_tx_write(const char *buffer, unsigned int buffer_size) { @@ -576,3 +582,36 @@ static void rx_handler_command(struct usb_ep *ep, struct usb_request *req) usb_ep_queue(ep, req, 0); } } + +#ifdef CONFIG_FASTBOOT_NO_GADGET +void fastboot_func_init(struct usb_ep *in_ep, struct usb_ep *out_ep, + struct usb_request *in_req, struct usb_request *out_req) +{ + struct f_fastboot *f_fb = fastboot_func; + + /* see above: fastboot_add() */ + if (!f_fb) { + f_fb = memalign(CONFIG_SYS_CACHELINE_SIZE, sizeof(*f_fb)); + if (!f_fb) { + printf("%s: fatal!\n", __func__); + return; + } + + fastboot_func = f_fb; + memset(f_fb, 0, sizeof(*f_fb)); + } + + /* initialize IN/OUT EP's and corresponding requests */ + f_fb->in_ep = in_ep; + f_fb->out_ep = out_ep; + f_fb->in_req = in_req; + f_fb->out_req = out_req; + + /* initialize 'complete' handlers */ + f_fb->in_req->complete = fastboot_complete; + f_fb->out_req->complete = rx_handler_command; + + /* initialize data */ + f_fb->out_req->length = EP_BUFFER_SIZE; +} +#endif -- 1.8.5 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot