Hi, >> >> > It sounds like the UDC driver now works okay for control transfers but >> >> > not for bulk transfers. >> >> > >> >> >> >> Some code in file_storage.c that i cannot understand. In >> >> ep0_complete(), the code snippet: >> >> >> >> if (req->status == 0 && req->context) >> >> ((fsg_routine_t) (req->context))(fsg); >> >> >> >> Does the UDC driver provide the context pointer to file_storage.c? >> > >> > That belongs to the gadget driver. file_storage.c maintains that >> > req->context. >> > >> >> Another gadget question: get_next_command() is receiving command from >> >> host PC, UDC HW isr routine is also receiving data from host PC. What >> >> is the difference between these two? >> > >> > hmm... ISR receives data and bounces it back to gadget driver. What do >> > you mean ? >> >> Ok, rephrase the question, is this the flow for bulk transfer? >> >> 1) data is received by Usb mass storage HW, the UDC driver ISR is >> called to read the data to usb_request buffer >> 2) bulk_out_complete() in gadget driver, is called to set buffer state to full >> 3) get_next_command() in gadget driver, is called to read the CBW. >> 4) do_scsi_command() to process SCSI command encoded in CBW >> 5) send_status() sends the CSW to host > > Something like below: > > OUT Token -> ISR -> giveback() -> bulk_out_complete() -> > get_next_command() -> do_scsi_command() -> usb_ep_queue() -> OUT/IN > Token -> ISR -> bulk_out_complete() -> send_status() For the IN Token, i will just write the data to the HW buffer, and the flow will go to send_status(). I use a different USB cable, now the USB gadget is able to receive bulk transfer data from host PC. I am working on the bulk transfer code. Thank you for the very useful answers. victor -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html