|
@@ -21,6 +21,8 @@
|
|
|
|
|
|
#ifdef HAVE_BLOCK_DEVICE
|
|
#ifdef HAVE_BLOCK_DEVICE
|
|
|
|
|
|
|
|
+#define DOS_PART_DEFAULT_SECTOR 512
|
|
|
|
+
|
|
/* Convert char[4] in little endian format to the host format integer
|
|
/* Convert char[4] in little endian format to the host format integer
|
|
*/
|
|
*/
|
|
static inline int le32_to_int(unsigned char *le32)
|
|
static inline int le32_to_int(unsigned char *le32)
|
|
@@ -168,6 +170,7 @@ static int get_partition_info_extended (block_dev_desc_t *dev_desc, int ext_part
|
|
ALLOC_CACHE_ALIGN_BUFFER(unsigned char, buffer, dev_desc->blksz);
|
|
ALLOC_CACHE_ALIGN_BUFFER(unsigned char, buffer, dev_desc->blksz);
|
|
dos_partition_t *pt;
|
|
dos_partition_t *pt;
|
|
int i;
|
|
int i;
|
|
|
|
+ int dos_type;
|
|
|
|
|
|
if (dev_desc->block_read (dev_desc->dev, ext_part_sector, 1, (ulong *) buffer) != 1) {
|
|
if (dev_desc->block_read (dev_desc->dev, ext_part_sector, 1, (ulong *) buffer) != 1) {
|
|
printf ("** Can't read partition table on %d:%d **\n",
|
|
printf ("** Can't read partition table on %d:%d **\n",
|
|
@@ -198,7 +201,7 @@ static int get_partition_info_extended (block_dev_desc_t *dev_desc, int ext_part
|
|
(pt->sys_ind != 0) &&
|
|
(pt->sys_ind != 0) &&
|
|
(part_num == which_part) &&
|
|
(part_num == which_part) &&
|
|
(is_extended(pt->sys_ind) == 0)) {
|
|
(is_extended(pt->sys_ind) == 0)) {
|
|
- info->blksz = 512;
|
|
|
|
|
|
+ info->blksz = DOS_PART_DEFAULT_SECTOR;
|
|
info->start = (lbaint_t)(ext_part_sector +
|
|
info->start = (lbaint_t)(ext_part_sector +
|
|
le32_to_int(pt->start4));
|
|
le32_to_int(pt->start4));
|
|
info->size = (lbaint_t)le32_to_int(pt->size4);
|
|
info->size = (lbaint_t)le32_to_int(pt->size4);
|
|
@@ -253,6 +256,22 @@ static int get_partition_info_extended (block_dev_desc_t *dev_desc, int ext_part
|
|
part_num, which_part, info, disksig);
|
|
part_num, which_part, info, disksig);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ /* Check for DOS PBR if no partition is found */
|
|
|
|
+ dos_type = test_block_type(buffer);
|
|
|
|
+
|
|
|
|
+ if (dos_type == DOS_PBR) {
|
|
|
|
+ info->start = 0;
|
|
|
|
+ info->size = dev_desc->lba;
|
|
|
|
+ info->blksz = DOS_PART_DEFAULT_SECTOR;
|
|
|
|
+ info->bootable = 0;
|
|
|
|
+ sprintf ((char *)info->type, "U-Boot");
|
|
|
|
+#ifdef CONFIG_PARTITION_UUIDS
|
|
|
|
+ info->uuid[0] = 0;
|
|
|
|
+#endif
|
|
|
|
+ return 0;
|
|
|
|
+ }
|
|
|
|
+
|
|
return -1;
|
|
return -1;
|
|
}
|
|
}
|
|
|
|
|