diff options
author | Wolfgang Denk <wd@denx.de> | 2007-07-09 23:41:45 +0200 |
---|---|---|
committer | Wolfgang Denk <wd@denx.de> | 2007-07-09 23:41:45 +0200 |
commit | bf6a9ca9b2aa219612c3678444b8123e28aa8940 (patch) | |
tree | e2d6a2c2c8af12dbc6f3438d13de485473f714d5 /fs | |
parent | e80955f07de03fef0196353e77534b2300193c1c (diff) | |
parent | a5d71e290f3673269be8eefb4ec44f53412f9461 (diff) | |
download | u-boot-imx-bf6a9ca9b2aa219612c3678444b8123e28aa8940.zip u-boot-imx-bf6a9ca9b2aa219612c3678444b8123e28aa8940.tar.gz u-boot-imx-bf6a9ca9b2aa219612c3678444b8123e28aa8940.tar.bz2 |
Merge with /home/hs/Atronic/u-boot
Diffstat (limited to 'fs')
-rwxr-xr-x | fs/fat/fat.c | 42 |
1 files changed, 23 insertions, 19 deletions
diff --git a/fs/fat/fat.c b/fs/fat/fat.c index 3007608..21a00b8 100755 --- 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); @@ -84,36 +85,39 @@ fat_register_device(block_dev_desc_t *dev_desc, int part_no) /* no signature found */ return -1; } - 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 { #if ((CONFIG_COMMANDS & CFG_CMD_IDE) || \ (CONFIG_COMMANDS & CFG_CMD_SCSI) || \ (CONFIG_COMMANDS & CFG_CMD_USB) || \ - (defined(CONFIG_MMC) && defined(CONFIG_LPC2292)) || \ + (defined(CONFIG_MMC)) || \ 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; } |