diff options
author | Stephen Warren <swarren@nvidia.com> | 2012-10-17 06:44:59 +0000 |
---|---|---|
committer | Tom Rini <trini@ti.com> | 2012-10-25 12:07:47 -0700 |
commit | 5e8f98319d8582d6a066610b5f1ec9b1a3f79704 (patch) | |
tree | 625c16325a8685444c3fddc6959c526ea62bcd63 /fs | |
parent | a1687b858e5670683199f6923b32aec0ea82ba19 (diff) | |
download | u-boot-imx-5e8f98319d8582d6a066610b5f1ec9b1a3f79704.zip u-boot-imx-5e8f98319d8582d6a066610b5f1ec9b1a3f79704.tar.gz u-boot-imx-5e8f98319d8582d6a066610b5f1ec9b1a3f79704.tar.bz2 |
FAT: implement fat_set_blk_dev(), convert cmd_fat.c
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 <swarren@nvidia.com>
Reviewed-by: Benoît Thébaudeau <benoit.thebaudeau@advansee.com>
Diffstat (limited to 'fs')
-rw-r--r-- | fs/fat/fat.c | 66 |
1 files changed, 31 insertions, 35 deletions
diff --git a/fs/fat/fat.c b/fs/fat/fat.c index 31042e5..393c378 100644 --- a/fs/fat/fat.c +++ b/fs/fat/fat.c @@ -61,44 +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.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) { @@ -122,6 +90,34 @@ 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.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. |