On Wednesday, October 10, 2012 8:14:02 PM, Stephen Warren wrote: > This makes the FAT filesystem API more consistent with other > block-based > filesystems. If in the future standard multi-filesystem commands such > as > "ls" or "load" are implemented, having FAT work the same way as other > filesystems will be necessary. > > Convert cmd_fat.c to the new API, so the code looks more like other > files > implementing the same commands for other filesystems. > > Signed-off-by: Stephen Warren <swar...@nvidia.com> > --- > v3: Rebase on new fat.c cleanup patch. > v2: Fix inverted test of get_partition_info() result in > fat_register_device(). > --- > common/cmd_fat.c | 8 +++--- > fs/fat/fat.c | 69 > +++++++++++++++++++++++++----------------------------- > include/fat.h | 1 + > 3 files changed, 37 insertions(+), 41 deletions(-) > > diff --git a/common/cmd_fat.c b/common/cmd_fat.c > index 5a5698b..c38302d 100644 > --- a/common/cmd_fat.c > +++ b/common/cmd_fat.c > @@ -55,7 +55,7 @@ int do_fat_fsload (cmd_tbl_t *cmdtp, int flag, int > argc, char * const argv[]) > return 1; > > dev = dev_desc->dev; > - if (fat_register_device(dev_desc,part)!=0) { > + if (fat_set_blk_dev(dev_desc, &info) != 0) { > printf("\n** Unable to use %s %d:%d for fatload **\n", > argv[1], dev, part); > return 1; > @@ -111,7 +111,7 @@ int do_fat_ls (cmd_tbl_t *cmdtp, int flag, int > argc, char * const argv[]) > return 1; > > dev = dev_desc->dev; > - if (fat_register_device(dev_desc,part)!=0) { > + if (fat_set_blk_dev(dev_desc, &info) != 0) { > printf("\n** Unable to use %s %d:%d for fatls **\n", > argv[1], dev, part); > return 1; > @@ -149,7 +149,7 @@ int do_fat_fsinfo (cmd_tbl_t *cmdtp, int flag, > int argc, char * const argv[]) > return 1; > > dev = dev_desc->dev; > - if (fat_register_device(dev_desc,part)!=0) { > + if (fat_set_blk_dev(dev_desc, &info) != 0) { > printf("\n** Unable to use %s %d:%d for fatinfo **\n", > argv[1], dev, part); > return 1; > @@ -185,7 +185,7 @@ static int do_fat_fswrite(cmd_tbl_t *cmdtp, int > flag, > > dev = dev_desc->dev; > > - if (fat_register_device(dev_desc, part) != 0) { > + if (fat_set_blk_dev(dev_desc, &info) != 0) { > printf("\n** Unable to use %s %d:%d for fatwrite **\n", > argv[1], dev, part); > return 1; > diff --git a/fs/fat/fat.c b/fs/fat/fat.c > index 2863c4b..a6fc07c 100644 > --- a/fs/fat/fat.c > +++ b/fs/fat/fat.c > @@ -61,46 +61,12 @@ static int disk_read(__u32 block, __u32 > nr_blocks, void *buf) > cur_part_info.start + block, nr_blocks, buf); > } > > -int fat_register_device(block_dev_desc_t * dev_desc, int part_no) > +int fat_set_blk_dev(block_dev_desc_t *dev_desc, disk_partition_t > *info) > { > ALLOC_CACHE_ALIGN_BUFFER(unsigned char, buffer, dev_desc->blksz); > > - /* First close any currently found FAT filesystem */ > - cur_dev = NULL; > - > -#if (defined(CONFIG_CMD_IDE) || \ > - defined(CONFIG_CMD_SATA) || \ > - defined(CONFIG_CMD_SCSI) || \ > - defined(CONFIG_CMD_USB) || \ > - defined(CONFIG_MMC) || \ > - defined(CONFIG_SYSTEMACE) ) > - > - /* Read the partition table, if present */ > - if (!get_partition_info(dev_desc, part_no, &cur_part_info)) { > - cur_dev = dev_desc; > - } > -#endif > - > - /* Otherwise it might be a superfloppy (whole-disk FAT filesystem) > */ > - if (!cur_dev) { > - if (part_no != 0) { > - printf("** Partition %d not valid on device %d **\n", > - part_no, dev_desc->dev); > - return -1; > - } > - > - cur_dev = dev_desc; > - cur_part_info.part = 0; > - cur_part_info.start = 0; > - cur_part_info.size = dev_desc->lba; > - cur_part_info.blksz = dev_desc->blksz; > - cur_part_info.name[0] = 0; > - cur_part_info.type[0] = 0; > - cur_part_info.bootable = 0; > -#ifdef CONFIG_PARTITION_UUIDS > - cur_part_info.uuid[0] = 0; > -#endif > - } > + cur_dev = dev_desc; > + cur_part_info = *info; > > /* Make sure it has a valid FAT header */ > if (disk_read(0, 1, buffer) != 1) { > @@ -124,6 +90,35 @@ int fat_register_device(block_dev_desc_t * > dev_desc, int part_no) > return -1; > } > > +int fat_register_device(block_dev_desc_t *dev_desc, int part_no) > +{ > + disk_partition_t info; > + > + /* First close any currently found FAT filesystem */ > + cur_dev = NULL; > + > + /* Read the partition table, if present */ > + if (get_partition_info(dev_desc, part_no, &info)) { > + if (part_no != 0) { > + printf("** Partition %d not valid on device %d **\n", > + part_no, dev_desc->dev); > + return -1; > + } > + > + info.part = 0; > + info.start = 0; > + info.size = dev_desc->lba; > + info.blksz = dev_desc->blksz; > + info.name[0] = 0; > + info.type[0] = 0; > + info.bootable = 0; > +#ifdef CONFIG_PARTITION_UUIDS > + info.uuid[0] = 0; > +#endif > + } > + > + return fat_set_blk_dev(dev_desc, &info); > +} > > /* > * Get the first occurence of a directory delimiter ('/' or '\') in > a string. > diff --git a/include/fat.h b/include/fat.h > index cc85b06..706cd7a 100644 > --- a/include/fat.h > +++ b/include/fat.h > @@ -212,6 +212,7 @@ long file_fat_read_at(const char *filename, > unsigned long pos, void *buffer, > unsigned long maxsize); > long file_fat_read(const char *filename, void *buffer, unsigned long > maxsize); > const char *file_getfsname(int idx); > +int fat_set_blk_dev(block_dev_desc_t *rbdd, disk_partition_t *info); > int fat_register_device(block_dev_desc_t *dev_desc, int part_no); > > int file_fat_write(const char *filename, void *buffer, unsigned long > maxsize);
For the V3 of this series: Reviewed-by: Benoît Thébaudeau <benoit.thebaud...@advansee.com> Best regards, Benoît _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot