|
@@ -61,44 +61,12 @@ static int disk_read(__u32 block, __u32 nr_blocks, void *buf)
|
|
cur_part_info.start + block, nr_blocks, 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);
|
|
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 */
|
|
/* Make sure it has a valid FAT header */
|
|
if (disk_read(0, 1, buffer) != 1) {
|
|
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;
|
|
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.
|
|
* Get the first occurence of a directory delimiter ('/' or '\') in a string.
|