usb_storage : scan all interfaces to find a storage device
PATCH v3 1/1 usb_storage : scan all interfaces to find a storage device
From: Franck Jullien <[email protected]>
Mass storage is not necessary present on interface 0. This patch allow usb_stor_scan to look in every available interface.
---
v2: create a new function to improve indentation
v3: more indentation improvement
common/usb_storage.c | 45 ++++++++++++++++++++++++++++----------------- 1 files changed, 28 insertions(+), 17 deletions(-)
common/usb_storage.c +28 -17
@@ -208,6 +208,30 @@ static unsigned int usb_get_max_lun(struct us_data *us)return (len >0 ) ? *result :0 ; } +static int usb_storage_register (struct usb_device *dev,unsigned char iface) +{ +int lun, max_lun, start = usb_max_devs; +int nb_dev =0 ; + +if (!usb_storage_probe (dev, iface, &usb_stor[usb_max_devs])) +return nb_dev; + +/* +* OK, it's a storage device. Iterate over its LUNs +* and populate `usb_dev_desc'. +*/ + max_lun =usb_get_max_lun (&usb_stor[usb_max_devs]); +for (lun =0 ; lun <= max_lun && usb_max_devs <USB_MAX_STOR_DEV ; lun++) { + usb_dev_desc[usb_max_devs].lun = lun; +if (usb_stor_get_info (dev, &usb_stor[start], + &usb_dev_desc[usb_max_devs]) ==1 ) { + nb_dev++; + } + } + +return nb_dev; +} +/******************************************************************************* * scan the usb and reports device info * to the user if mode = 1
@@ -215,7 +239,7 @@ static unsigned int usb_get_max_lun(struct us_data *us)*/ int usb_stor_scan (int mode) { -unsigned char i; +unsigned char i, iface;struct usb_device *dev;if (mode ==1 )
@@ -241,23 +265,10 @@ int usb_stor_scan(int mode)if (dev ==NULL )break ;/* no more devices available */ -if (usb_storage_probe (dev,0 , &usb_stor[usb_max_devs])) { -/* OK, it's a storage device. Iterate over its LUNs -* and populate `usb_dev_desc'. -*/ -int lun, max_lun, start = usb_max_devs; - - max_lun =usb_get_max_lun (&usb_stor[usb_max_devs]); -for (lun =0 ; - lun <= max_lun && usb_max_devs <USB_MAX_STOR_DEV ; - lun++) { - usb_dev_desc[usb_max_devs].lun = lun; -if (usb_stor_get_info (dev, &usb_stor[start], - &usb_dev_desc[usb_max_devs]) ==1 ) { - usb_max_devs++; - } - } +for (iface =0 ; iface < dev->config.no_of_if; iface++) { + usb_max_devs +=usb_storage_register (dev, iface); } +/* if storage device */ if (usb_max_devs ==USB_MAX_STOR_DEV ) { printf("max USB Storage Device reached: %d stopping\n",
Signature · 1 line
1.7.1
PATCH v3 1/1 usb_storage : scan all interfaces to find a storage device
Quoted 6 lines · franck.jullien at gmail.com
From: Franck Jullien <[email protected]>
Mass storage is not necessary present on interface 0. This patch allow
usb_stor_scanto look in every available interface.Signed-off-by Franck Jullien <[email protected]>
Thanks!
Are you OK if I apply this for -next (that is, after 2015.04 is out) ?
Best regards,
Marek Vasut
PATCH v3 1/1 usb_storage : scan all interfaces to find a storage device
2015-03-05 14:52 GMT+01:00 Marek Vasut <[email protected]>:
Quoted 8 lines · franck.jullien at gmail.com
Quoted 6 lines
From: Franck Jullien <[email protected]>
Mass storage is not necessary present on interface 0. This patch allow
usb_stor_scanto look in every available interface.Signed-off-by Franck Jullien <[email protected]>
Quoted 8 lines
Thanks!
Acked-by Marek Vasut <[email protected]>Are you OK if I apply this for -next (that is, after 2015.04 is out) ?
Best regards,
Marek Vasut
Sure, there is no hurry.
Franck.
PATCH v3 1/1 usb_storage : scan all interfaces to find a storage device
Quoted 11 lines · Franck Jullien
2015-03-05 14:52 GMT+01:00 Marek Vasut <[email protected]>:
Quoted 10 lines · franck.jullien at gmail.com
Quoted 6 lines
From: Franck Jullien <[email protected]>
Mass storage is not necessary present on interface 0. This patch allow
usb_stor_scanto look in every available interface.Signed-off-by Franck Jullien <[email protected]>Thanks!
Quoted 8 lines
Quoted 6 lines
Acked-by Marek Vasut <[email protected]>Are you OK if I apply this for -next (that is, after 2015.04 is out) ?
Best regards,
Marek VasutSure, there is no hurry.
Applied for -next , thanks!
Best regards,
Marek Vasut
PATCH v3 1/1 usb_storage : scan all interfaces to find a storage device
In reply to franck.jullien at gmail.com+Tom
Hi Franck,
Quoted 31 lines · On 4 March 2015 at 13:07, <[email protected]> wrote:
From: Franck Jullien <[email protected]>
Mass storage is not necessary present on interface 0. This patch allow
usb_stor_scanto look in every available interface.Signed-off-by Franck Jullien <[email protected]>---
v2: create a new function to improve indentation
v3: more indentation improvement
common/usb_storage.c | 45 ++++++++++++++++++++++++++++----------------- 1 files changed, 28 insertions(+), 17 deletions(-)common/usb_storage.c +8
-0@@ -208,6 +208,30 @@ static unsigned int usb_get_max_lun(struct us_data *us)return (len >0 ) ? *result :0 ; } +static int usb_storage_register (struct usb_device *dev,unsigned char iface) +{ +int lun, max_lun, start = usb_max_devs; +int nb_dev =0 ; + +if (!usb_storage_probe (dev, iface, &usb_stor[usb_max_devs])) +return nb_dev; +
common/usb_storage.c static unsigned int usb_get_max_lun(struct us_data *us) · line 228
Quoted 10 lines
common/usb_storage.c +10
-0+/* +* OK, it's a storage device. Iterate over its LUNs +* and populate `usb_dev_desc'. +*/ + max_lun =usb_get_max_lun (&usb_stor[usb_max_devs]); +for (lun =0 ; lun <= max_lun && usb_max_devs <USB_MAX_STOR_DEV ; lun++) { + usb_dev_desc[usb_max_devs].lun = lun; +if (usb_stor_get_info (dev, &usb_stor[start], + &usb_dev_desc[usb_max_devs]) ==1 ) { + nb_dev++;
Should start or usb_max_devs increase here? This will use the same block_dev_desc_t for each device, won't it?
Quoted 46 lines
common/usb_storage.c +10
-18+ } + } + +return nb_dev; +} +/******************************************************************************* * scan the usb and reports device info * to the user if mode = 1 @@ -215,7 +239,7 @@ static unsigned int usb_get_max_lun(struct us_data *us)*/ int usb_stor_scan (int mode) { -unsigned char i; +unsigned char i, iface;struct usb_device *dev;if (mode ==1 )@@ -241,23 +265,10 @@ int usb_stor_scan(int mode)if (dev ==NULL )break ;/* no more devices available */ -if (usb_storage_probe (dev,0 , &usb_stor[usb_max_devs])) { -/* OK, it's a storage device. Iterate over its LUNs -* and populate `usb_dev_desc'. -*/ -int lun, max_lun, start = usb_max_devs; - - max_lun =usb_get_max_lun (&usb_stor[usb_max_devs]); -for (lun =0 ; - lun <= max_lun && usb_max_devs <USB_MAX_STOR_DEV ; - lun++) { - usb_dev_desc[usb_max_devs].lun = lun; -if (usb_stor_get_info (dev, &usb_stor[start], - &usb_dev_desc[usb_max_devs]) ==1 ) { - usb_max_devs++; - } - } +for (iface =0 ; iface < dev->config.no_of_if; iface++) { + usb_max_devs +=usb_storage_register (dev, iface); } +/* if storage device */ if (usb_max_devs ==USB_MAX_STOR_DEV ) { printf("max USB Storage Device reached: %d stopping\n", --
Quoted 2 lines
1.7.1
Regards,
Simon
PATCH v3 1/1 usb_storage : scan all interfaces to find a storage device
Hi Simon,
2015-04-17 18:33 GMT+02:00 Simon Glass <[email protected]>:
Quoted 41 lines
+Tom
Hi Franck,
Quoted 36 lines · On 4 March 2015 at 13:07, <[email protected]> wrote:
From: Franck Jullien <[email protected]>
Mass storage is not necessary present on interface 0. This patch allow
usb_stor_scanto look in every available interface.Signed-off-by Franck Jullien <[email protected]>---
v2: create a new function to improve indentation
v3: more indentation improvement
common/usb_storage.c | 45 ++++++++++++++++++++++++++++----------------- 1 files changed, 28 insertions(+), 17 deletions(-)common/usb_storage.c +13
-0@@ -208,6 +208,30 @@ static unsigned int usb_get_max_lun(struct us_data *us)return (len >0 ) ? *result :0 ; } +static int usb_storage_register (struct usb_device *dev,unsigned char iface) +{ +int lun, max_lun, start = usb_max_devs; +int nb_dev =0 ; + +if (!usb_storage_probe (dev, iface, &usb_stor[usb_max_devs])) +return nb_dev; + +/* +* OK, it's a storage device. Iterate over its LUNs +* and populate `usb_dev_desc'. +*/ + max_lun =usb_get_max_lun (&usb_stor[usb_max_devs]);
Quoted 9 lines
common/usb_storage.c static unsigned int usb_get_max_lun(struct us_data *us) · line 228
Quoted 5 lines
common/usb_storage.c +5
-0+for (lun =0 ; lun <= max_lun && usb_max_devs <USB_MAX_STOR_DEV ; lun++) { + usb_dev_desc[usb_max_devs].lun = lun; +if (usb_stor_get_info (dev, &usb_stor[start], + &usb_dev_desc[usb_max_devs]) ==1 ) { + nb_dev++;Should start or
usb_max_devsincrease here? This will use the sameblock_dev_desc_tfor each device, won't it?
Good catch. I'll write a patch when I have some time (or someone can do that). However, I won't be able to test it on hardware because I don't have access to it anymore.
We could also revert this patch. Sorry for my mistake.
Franck.