[U-Boot] [PATCH v3] usb_storage : scan all interfaces to find a storage device
From: Franck Jullien Mass storage is not necessary present on interface 0. This patch allow usb_stor_scan to look in every available interface. Signed-off-by: Franck Jullien --- v2: create a new function to improve indentation v3: more indentation improvement common/usb_storage.c | 45 - 1 files changed, 28 insertions(+), 17 deletions(-) diff --git a/common/usb_storage.c b/common/usb_storage.c index 1411737..05c96a8 100644 --- a/common/usb_storage.c +++ b/common/usb_storage.c @@ -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", -- 1.7.1 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH v3] usb_storage : scan all interfaces to find a storage device
On Wednesday, March 04, 2015 at 09:07:00 PM, franck.jull...@gmail.com wrote: > From: Franck Jullien > > Mass storage is not necessary present on interface 0. This > patch allow usb_stor_scan to look in every available interface. > > Signed-off-by: Franck Jullien Thanks! Acked-by: Marek Vasut Are you OK if I apply this for -next (that is, after 2015.04 is out) ? Best regards, Marek Vasut ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH v3] usb_storage : scan all interfaces to find a storage device
2015-03-05 14:52 GMT+01:00 Marek Vasut : > On Wednesday, March 04, 2015 at 09:07:00 PM, franck.jull...@gmail.com wrote: >> From: Franck Jullien >> >> Mass storage is not necessary present on interface 0. This >> patch allow usb_stor_scan to look in every available interface. >> >> Signed-off-by: Franck Jullien > > Thanks! > > Acked-by: Marek Vasut > > 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. ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH v3] usb_storage : scan all interfaces to find a storage device
On Thursday, March 05, 2015 at 03:11:25 PM, Franck Jullien wrote: > 2015-03-05 14:52 GMT+01:00 Marek Vasut : > > On Wednesday, March 04, 2015 at 09:07:00 PM, franck.jull...@gmail.com wrote: > >> From: Franck Jullien > >> > >> Mass storage is not necessary present on interface 0. This > >> patch allow usb_stor_scan to look in every available interface. > >> > >> Signed-off-by: Franck Jullien > > > > Thanks! > > > > Acked-by: Marek Vasut > > > > 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. Applied for -next , thanks! Best regards, Marek Vasut ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH v3] usb_storage : scan all interfaces to find a storage device
+Tom Hi Franck, On 4 March 2015 at 13:07, wrote: > From: Franck Jullien > > Mass storage is not necessary present on interface 0. This > patch allow usb_stor_scan to look in every available interface. > > Signed-off-by: Franck Jullien > --- > > v2: create a new function to improve indentation > > v3: more indentation improvement > > common/usb_storage.c | 45 - > 1 files changed, 28 insertions(+), 17 deletions(-) > > diff --git a/common/usb_storage.c b/common/usb_storage.c > index 1411737..05c96a8 100644 > --- a/common/usb_storage.c > +++ b/common/usb_storage.c > @@ -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++; Should start or usb_max_devs increase here? This will use the same block_dev_desc_t for each device, won't it? > + } > + } > + > + 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", > -- > 1.7.1 > Regards, Simon ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH v3] usb_storage : scan all interfaces to find a storage device
Hi Simon, 2015-04-17 18:33 GMT+02:00 Simon Glass : > +Tom > > Hi Franck, > > On 4 March 2015 at 13:07, wrote: >> From: Franck Jullien >> >> Mass storage is not necessary present on interface 0. This >> patch allow usb_stor_scan to look in every available interface. >> >> Signed-off-by: Franck Jullien >> --- >> >> v2: create a new function to improve indentation >> >> v3: more indentation improvement >> >> common/usb_storage.c | 45 - >> 1 files changed, 28 insertions(+), 17 deletions(-) >> >> diff --git a/common/usb_storage.c b/common/usb_storage.c >> index 1411737..05c96a8 100644 >> --- a/common/usb_storage.c >> +++ b/common/usb_storage.c >> @@ -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++; > > Should start or usb_max_devs increase here? This will use the same > block_dev_desc_t for 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. ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot