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>
This commit is contained in:
parent
a1687b858e
commit
5e8f98319d
@ -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;
|
||||
|
66
fs/fat/fat.c
66
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.
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user