summaryrefslogtreecommitdiffstats
path: root/common/partitions.c
diff options
context:
space:
mode:
Diffstat (limited to 'common/partitions.c')
-rw-r--r--common/partitions.c36
1 files changed, 4 insertions, 32 deletions
diff --git a/common/partitions.c b/common/partitions.c
index 74b4f1201a..78b09fc786 100644
--- a/common/partitions.c
+++ b/common/partitions.c
@@ -31,6 +31,7 @@
#include <block.h>
#include <asm/unaligned.h>
#include <disks.h>
+#include <dma.h>
struct partition {
uint64_t first_sec;
@@ -43,23 +44,6 @@ struct partition_desc {
};
/**
- * Reject values which cannot be used in Barebox
- * @param val Value to be check
- * @return 0 if value can be used in Barebox, -EINVAL if not
- *
- * @note this routine can be removed when Barebox uses file offsets larger
- * than 32 bit
- */
-static int check_offset_value(uint64_t val)
-{
-#if 1 /* until Barebox can handle 64 bit offsets */
- if (val > (__INT_MAX__ / SECTOR_SIZE))
- return -EINVAL;
-#endif
- return 0;
-}
-
-/**
* Guess the size of the disk, based on the partition table entries
* @param dev device to create partitions for
* @param table partition table
@@ -76,12 +60,6 @@ static int disk_guess_size(struct device_d *dev, struct partition_entry *table)
size += get_unaligned(&table[i].partition_size);
}
}
- /* limit disk sector counts we can't handle due to 32 bit limits */
- if (check_offset_value(size) != 0) {
- dev_warn(dev, "Warning: Sector count limited due to 31 bit"
- "contraints\n");
- size = __INT_MAX__ / SECTOR_SIZE;
- }
return (int)size;
}
@@ -102,7 +80,7 @@ static void __maybe_unused try_dos_partition(struct block_device *blk,
struct partition pentry;
int i, rc;
- buffer = xmalloc(SECTOR_SIZE);
+ buffer = dma_alloc(SECTOR_SIZE);
/* read in the MBR to get the partition table */
rc = blk->ops->read(blk, buffer, 0, 1);
@@ -119,19 +97,13 @@ static void __maybe_unused try_dos_partition(struct block_device *blk,
table = (struct partition_entry *)&buffer[446];
/* valid for x86 BIOS based disks only */
- if (blk->num_blocks == 0)
+ if (IS_ENABLED(CONFIG_DISK_BIOS) && blk->num_blocks == 0)
blk->num_blocks = disk_guess_size(blk->dev, table);
for (i = 0; i < 4; i++) {
pentry.first_sec = get_unaligned(&table[i].partition_start);
pentry.size = get_unaligned(&table[i].partition_size);
- /* do we have to ignore this partition due to limitations? */
- if (check_offset_value(pentry.first_sec) != 0)
- continue;
- if (check_offset_value(pentry.size) != 0)
- continue;
-
if (pentry.first_sec != 0) {
pd->parts[pd->used_entries].first_sec = pentry.first_sec;
pd->parts[pd->used_entries].size = pentry.size;
@@ -142,7 +114,7 @@ static void __maybe_unused try_dos_partition(struct block_device *blk,
}
on_error:
- free(buffer);
+ dma_free(buffer);
}
/**