usb: ums - expose selected partition/s v2
PATCH 1/1 usb: ums - expose selected partition/s v2
By applying this patch, it will give us some flexibility to expose a selected partition/s.
e.g:
1. To expose several partitions
ums 0 mmc 0:1,0:6
2. To expose the all partitions
ums 0 mmc 0:0
3. To expose multiple partititions on several devices ums 0 mmc 0:1,1:6
--- cmd/usb_mass_storage.c | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-)
cmd/usb_mass_storage.c +22 -10
@@ -50,14 +50,16 @@ static void ums_fini(void)#define UMS_NAME_LEN 16 -static int ums_init (const char *devtype,const char *devnums) +static int ums_init (const char *devtype,const char *devnums_part_str) { -char *s, *t, *devnum, *name; +char *s, *t, *devnum_part_str, *name;struct blk_desc *block_dev; +disk_partition_t info; +int partnum;int ret;struct ums *ums_new; - s =strdup (devnums); + s =strdup (devnums_part_str);if (!s)return -1 ;
@@ -65,12 +67,14 @@ static int ums_init(const char *devtype, const char *devnums) ums_count =0 ;for (;;) { - devnum =strsep (&t,"," ); -if (!devnum) + devnum_part_str =strsep (&t,"," ); +if (!devnum_part_str)break ; - ret =blk_get_device_by_str (devtype, devnum, &block_dev); -if (ret <0 ) + partnum =blk_get_device_part_str (devtype, devnum_part_str, + &block_dev, &info,1 ); + +if (partnum <0 ) goto cleanup;/* f_mass_storage.c assumes SECTOR_SIZE sectors */
@@ -86,10 +90,18 @@ static int ums_init(const char *devtype, const char *devnums) } ums = ums_new; +/* if partnum = 0, expose the whole device */ +if (partnum ==0 ) { + ums[ums_count].start_sector =0 ; + ums[ums_count].num_sectors = block_dev->lba; + }else { + ums[ums_count].start_sector = info.start; + ums[ums_count].num_sectors = info.size; + } + ums[ums_count].read_sector = ums_read_sector; ums[ums_count].write_sector = ums_write_sector; - ums[ums_count].start_sector =0 ; - ums[ums_count].num_sectors = block_dev->lba; + name =malloc (UMS_NAME_LEN );if (!name) { ret =-1 ;
@@ -230,6 +242,6 @@ cleanup_ums_init:U_BOOT_CMD (ums,4 ,1 , do_usb_mass_storage,"Use the UMS [USB Mass Storage]" , -"<USB_controller> [<devtype>] <devnum> e.g. ums 0 mmc 0\n" +"<USB_controller> [<devtype>] <dev:part> e.g. ums 0 mmc 0:0\n" " devtype defaults to mmc" );
Signature · 1 line
2.8.1
PATCH 1/1 usb: ums - expose selected partition/s v2
Hi John,
Quoted 9 lines
By applying this patch, it will give us some flexibility to expose a selected partition/s.
e.g:
1. To expose several partitions
ums 0 mmc 0:1,0:62. To expose the all partitions
ums 0 mmc 0:0
During testing, I've found one issue with this code:
Traditionally the ums command was invoked as:
'ums 0 0'
or
'ums 0 mmc 0'
which exposed all SD|eMMC partitions.
Now, when I run 'ums 0 mmc 0' I can only see the first partition.
Could you add some code to preserve the legacy behavior?
I mean all partitions should be exposed when one types:
'ums 0 0' or 'ums 0 mmc 0' or 'ums 0 mmc 0.0'
Quoted 83 lines
3. To expose multiple partititions on several devices ums 0 mmc 0:1,1:6
Signed-off-by John Tobias <[email protected]>--- cmd/usb_mass_storage.c | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-)cmd/usb_mass_storage.c +11
-7@@ -50,14 +50,16 @@ static void ums_fini(void)#define UMS_NAME_LEN 16 -static int ums_init (const char *devtype,const char *devnums) +static int ums_init (const char *devtype,const char *devnums_part_str) { -char *s, *t, *devnum, *name; +char *s, *t, *devnum_part_str, *name;struct blk_desc *block_dev; +disk_partition_t info; +int partnum;int ret;struct ums *ums_new; - s =strdup (devnums); + s =strdup (devnums_part_str);if (!s)return -1 ;@@ -65,12 +67,14 @@ static int ums_init(const char *devtype, const char *devnums) ums_count = 0;for (;;) { - devnum =strsep (&t,"," ); -if (!devnum) + devnum_part_str =strsep (&t,"," ); +if (!devnum_part_str)break ; - ret =blk_get_device_by_str (devtype, devnum, &block_dev); -if (ret <0 ) + partnum =blk_get_device_part_str (devtype, devnum_part_str, + &block_dev, &info,1 ); + +if (partnum <0 ) goto cleanup;cmd/usb_mass_storage.c +11
-3/* f_mass_storage.c assumes SECTOR_SIZE sectors */ @@ -86,10 +90,18 @@ static int ums_init(const char *devtype, const char *devnums) } ums = ums_new; +/* if partnum = 0, expose the whole device */ +if (partnum ==0 ) { + ums[ums_count].start_sector =0 ; + ums[ums_count].num_sectors = block_dev->lba; + }else { + ums[ums_count].start_sector = info.start; + ums[ums_count].num_sectors = info.size; + } + ums[ums_count].read_sector = ums_read_sector; ums[ums_count].write_sector = ums_write_sector; - ums[ums_count].start_sector =0 ; - ums[ums_count].num_sectors = block_dev->lba; + name =malloc (UMS_NAME_LEN );if (!name) { ret =-1 ;@@ -230,6 +242,6 @@ cleanup_ums_init: U_BOOT_CMD(ums, 4, 1, do_usb_mass_storage, "Use the UMS [USB Mass Storage]", - "<USB_controller> [<devtype>] <devnum> e.g. ums 0 mmc 0\n" + "<USB_controller> [<devtype>] <dev:part> e.g. ums 0 mmc0:0\n" " devtype defaults to mmc"
);
Signature · 5 lines
Best regards, Lukasz Majewski Samsung R&D Institute Poland (SRPOL) | Linux Platform Group
PATCH 1/1 usb: ums - expose selected partition/s v2
Hi Lukas,
Sure. I will fix it.
Regards,
John
Quoted 126 lines · Lukasz Majewski
Hi John,
Quoted 9 lines
By applying this patch, it will give us some flexibility to expose a selected partition/s.
e.g:
1. To expose several partitions
ums 0 mmc 0:1,0:62. To expose the all partitions
ums 0 mmc 0:0During testing, I've found one issue with this code:
Traditionally the ums command was invoked as:
'ums 0 0'
or
'ums 0 mmc 0'
which exposed all SD|eMMC partitions.
Now, when I run 'ums 0 mmc 0' I can only see the first partition.
Could you add some code to preserve the legacy behavior?
I mean all partitions should be exposed when one types:
'ums 0 0' or 'ums 0 mmc 0' or 'ums 0 mmc 0.0'
Quoted 81 lines
3. To expose multiple partititions on several devices ums 0 mmc 0:1,1:6
Signed-off-by John Tobias <[email protected]>--- cmd/usb_mass_storage.c | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-)cmd/usb_mass_storage.c +11
-7@@ -50,14 +50,16 @@ static void ums_fini(void)#define UMS_NAME_LEN 16 -static int ums_init (const char *devtype,const char *devnums) +static int ums_init (const char *devtype,const char *devnums_part_str) { -char *s, *t, *devnum, *name; +char *s, *t, *devnum_part_str, *name;struct blk_desc *block_dev; +disk_partition_t info; +int partnum;int ret;struct ums *ums_new; - s =strdup (devnums); + s =strdup (devnums_part_str);if (!s)return -1 ;@@ -65,12 +67,14 @@ static int ums_init(const char *devtype, const char *devnums) ums_count = 0;for (;;) { - devnum =strsep (&t,"," ); -if (!devnum) + devnum_part_str =strsep (&t,"," ); +if (!devnum_part_str)break ; - ret =blk_get_device_by_str (devtype, devnum, &block_dev); -if (ret <0 ) + partnum =blk_get_device_part_str (devtype, devnum_part_str, + &block_dev, &info,1 ); + +if (partnum <0 ) goto cleanup;/* f_mass_storage.c assumes SECTOR_SIZE sectors */cmd/usb_mass_storage.c +11
-3@@ -86,10 +90,18 @@ static int ums_init(const char *devtype, const char *devnums) } ums = ums_new; +/* if partnum = 0, expose the whole device */ +if (partnum ==0 ) { + ums[ums_count].start_sector =0 ; + ums[ums_count].num_sectors = block_dev->lba; + }else { + ums[ums_count].start_sector = info.start; + ums[ums_count].num_sectors = info.size; + } + ums[ums_count].read_sector = ums_read_sector; ums[ums_count].write_sector = ums_write_sector; - ums[ums_count].start_sector =0 ; - ums[ums_count].num_sectors = block_dev->lba; + name =malloc (UMS_NAME_LEN );if (!name) { ret =-1 ;@@ -230,6 +242,6 @@ cleanup_ums_init: U_BOOT_CMD(ums, 4, 1, do_usb_mass_storage, "Use the UMS [USB Mass Storage]", - "<USB_controller> [<devtype>] <devnum> e.g. ums 0 mmc 0\n" + "<USB_controller> [<devtype>] <dev:part> e.g. ums 0 mmcQuoted 2 lines
0:0\n" " devtype defaults to mmc"
);--
Best regards,Lukasz Majewski
Samsung R&D Institute Poland (SRPOL) | Linux Platform Group