diff options
author | Nikunj A Dadhania <nikunj@linux.vnet.ibm.com> | 2013-09-24 15:09:29 +0530 |
---|---|---|
committer | Nikunj A Dadhania <nikunj@linux.vnet.ibm.com> | 2013-10-04 12:01:21 +0530 |
commit | 2b14fb9a9eab6d6d34850bfb8c5cbd2bc3e94286 (patch) | |
tree | 0779c5edd5e98dda0adce54dce264af1e7ffbf10 /lib | |
parent | 2ddd78d4bea9fe2ed8ae84bf325453558b236317 (diff) | |
download | SLOF-2b14fb9a9eab6d6d34850bfb8c5cbd2bc3e94286.zip SLOF-2b14fb9a9eab6d6d34850bfb8c5cbd2bc3e94286.tar.gz SLOF-2b14fb9a9eab6d6d34850bfb8c5cbd2bc3e94286.tar.bz2 |
usb-msc: handle stall and other fixes
* Add Reset Recovery procedure
* Zero cbw and csw memory everytime
* Add delays during cbw, data and csw stage
* Increment tag after every command
Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/libusb/usb-core.c | 16 | ||||
-rw-r--r-- | lib/libusb/usb-core.h | 2 |
2 files changed, 16 insertions, 2 deletions
diff --git a/lib/libusb/usb-core.c b/lib/libusb/usb-core.c index 6fad631..6c40913 100644 --- a/lib/libusb/usb-core.c +++ b/lib/libusb/usb-core.c @@ -435,6 +435,14 @@ static int usb_msc_reset(struct usb_dev *dev) return usb_send_ctrl(dev->control, &req, NULL); } +void usb_msc_resetrecovery(struct usb_dev *dev) +{ + // usb_msc_reset(dev); + usb_clear_halt(dev->bulk_in); + usb_clear_halt(dev->bulk_out); + SLOF_msleep(2); +} + static int usb_handle_device(struct usb_dev *dev, struct usb_dev_config_descr *cfg, uint8_t *ptr, uint16_t len) { @@ -536,7 +544,13 @@ int setup_new_device(struct usb_dev *dev, unsigned int port) slof_usb_handle(dev); break; case 8: - dprintf("MASS STORAGE found %d\n", dev->intf_num); + dprintf("MASS STORAGE found %d %06X\n", dev->intf_num, + dev->class); + if ((dev->class & 0x50) != 0x50) { /* Bulk-only supported */ + printf("Device not supported %06X\n", dev->class); + goto fail_mem_free; + } + if (!usb_msc_reset(dev)) { printf("%s: bulk reset failed\n", __func__); goto fail_mem_free; diff --git a/lib/libusb/usb-core.h b/lib/libusb/usb-core.h index 75aa0f9..fc9a0be 100644 --- a/lib/libusb/usb-core.h +++ b/lib/libusb/usb-core.h @@ -273,5 +273,5 @@ extern int usb_dev_populate_pipe(struct usb_dev *dev, struct usb_ep_descr *ep, void *buf, size_t len); extern int usb_hid_kbd_init(struct usb_dev *dev); extern int usb_hid_kbd_exit(struct usb_dev *dev); - +extern void usb_msc_resetrecovery(struct usb_dev *dev); #endif |