diff options
author | Wolfgang Denk <wd@denx.de> | 2007-08-06 00:55:51 +0200 |
---|---|---|
committer | Wolfgang Denk <wd@denx.de> | 2007-08-06 00:55:51 +0200 |
commit | 46919751eac7d5c210e6e71ad4bf2bae4805902e (patch) | |
tree | 5a6097aef0f398adb4e60047efb28c37b79bec50 /fs | |
parent | 8092fef4c29b395958bb649647da7e3775731517 (diff) | |
parent | c7e717ebc2b044d7a71062552c9dc0f54ea9b779 (diff) | |
download | u-boot-imx-46919751eac7d5c210e6e71ad4bf2bae4805902e.zip u-boot-imx-46919751eac7d5c210e6e71ad4bf2bae4805902e.tar.gz u-boot-imx-46919751eac7d5c210e6e71ad4bf2bae4805902e.tar.bz2 |
Merge with /home/wd/git/u-boot/custodian/u-boot-mpc85xx
Diffstat (limited to 'fs')
-rw-r--r-- | fs/fat/fat.c | 34 |
1 files changed, 22 insertions, 12 deletions
diff --git a/fs/fat/fat.c b/fs/fat/fat.c index 3824e1d..c068a84 100644 --- a/fs/fat/fat.c +++ b/fs/fat/fat.c @@ -70,10 +70,11 @@ int fat_register_device(block_dev_desc_t *dev_desc, int part_no) { unsigned char buffer[SECTOR_SIZE]; + disk_partition_t info; if (!dev_desc->block_read) return -1; - cur_dev=dev_desc; + cur_dev = dev_desc; /* check if we have a MBR (on floppies we have only a PBR) */ if (dev_desc->block_read (dev_desc->dev, 0, 1, (ulong *) buffer) != 1) { printf ("** Can't read from device %d **\n", dev_desc->dev); @@ -95,25 +96,34 @@ fat_register_device(block_dev_desc_t *dev_desc, int part_no) defined(CONFIG_CMD_USB) || \ (defined(CONFIG_MMC) && defined(CONFIG_LPC2292)) || \ defined(CONFIG_SYSTEMACE) ) - disk_partition_t info; - if(!get_partition_info(dev_desc, part_no, &info)) { - part_offset = info.start; - cur_part = part_no; - } - else { - printf ("** Partition %d not valid on device %d **\n",part_no,dev_desc->dev); - return -1; - } + /* First we assume, there is a MBR */ + if (!get_partition_info (dev_desc, part_no, &info)) { + part_offset = info.start; + cur_part = part_no; + } else if (!strncmp((char *)&buffer[DOS_FS_TYPE_OFFSET], "FAT", 3)) { + /* ok, we assume we are on a PBR only */ + cur_part = 1; + part_offset = 0; + } else { + printf ("** Partition %d not valid on device %d **\n", part_no, dev_desc->dev); + return -1; + } #else + if(!strncmp((char *)&buffer[DOS_FS_TYPE_OFFSET],"FAT",3)) { + /* ok, we assume we are on a PBR only */ + cur_part = 1; + part_offset = 0; + info.start = part_offset; + } else { /* FIXME we need to determine the start block of the * partition where the DOS FS resides. This can be done * by using the get_partition_info routine. For this * purpose the libpart must be included. */ - part_offset=32; + part_offset = 32; cur_part = 1; -#endif } +#endif return 0; } |