summaryrefslogtreecommitdiff
path: root/fs/fat/fat.c
diff options
context:
space:
mode:
authorStephen Warren <swarren@nvidia.com>2012-10-17 06:44:59 +0000
committerTom Rini <trini@ti.com>2012-10-25 12:07:47 -0700
commit5e8f98319d8582d6a066610b5f1ec9b1a3f79704 (patch)
tree625c16325a8685444c3fddc6959c526ea62bcd63 /fs/fat/fat.c
parenta1687b858e5670683199f6923b32aec0ea82ba19 (diff)
downloadu-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/fat/fat.c')
-rw-r--r--fs/fat/fat.c66
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.