On Mon, Jan 21, 2013 at 04:45:03PM +0800, victor yeo wrote: > Hi, > > >> > ep0_complete() should be called by your UDC driver. Seriously dude, read > >> > the documentation and read other drivers to figure out how things should > >> > be called. A quick look in the storage drivers would have shown you that > >> > ep0_complete() is passed in as req->complete() through the usb_request > >> > structure. That structure (well, a pointer to it) is passed to the UDC > >> > driver through usb_ep_queue(). All you had to figure out is "when it > >> > req->complete called". ANY UDC driver would have given you the answer. > >> > > >> > Likely your UDC driver is still buggy, if you don't call ->complete(), > >> > you're starving your usb_request queue. > >> > > >> > >> Yes, ep0_complete() is called in UDC driver queue function, i just > >> added it in and ep0_complete() is called now. The dmesg output is > >> below. > > > > not in queue function, you should call it when completing. > > > > Is there any mistake in my understanding of ep0 setup data processing? > > 1. usb gadget HW IRQ is triggered if ep0 receives data > 2. fsg_setup() is called > 3. ep0_queue() is called > 4. UDC driver queue function is called > 5. UDC driver sends data to ep0 HW buffer > 6. UDC driver increments req->actual by the amount of transferred bytes > 7. UDC driver call ep0_complete() looks correct -- balbi
Attachment:
signature.asc
Description: Digital signature