aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorNikunj A Dadhania <nikunj@linux.vnet.ibm.com>2013-09-24 15:09:29 +0530
committerNikunj A Dadhania <nikunj@linux.vnet.ibm.com>2013-10-04 12:01:21 +0530
commit2b14fb9a9eab6d6d34850bfb8c5cbd2bc3e94286 (patch)
tree0779c5edd5e98dda0adce54dce264af1e7ffbf10 /lib
parent2ddd78d4bea9fe2ed8ae84bf325453558b236317 (diff)
downloadSLOF-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.c16
-rw-r--r--lib/libusb/usb-core.h2
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