mirror of
https://github.com/Stichting-MINIX-Research-Foundation/u-boot.git
synced 2025-09-10 12:39:22 -04:00
mtdparts: show net size in mtdparts list
This patch adds an additional column to the output of list_partitions. The additional column will contain the net size and a '(!)' beside it if the net size is not equal to the partition size. Signed-off-by: Ben Gardiner <bengardiner@nanometrics.ca> CC: Wolfgang Denk <wd@denx.de> CC: Scott Wood <scottwood@freescale.com>
This commit is contained in:
parent
4ba692fb1e
commit
04ac380288
@ -1215,38 +1215,92 @@ static int generate_mtdparts_save(char *buf, u32 buflen)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(CONFIG_CMD_MTDPARTS_SHOW_NET_SIZES)
|
||||||
/**
|
/**
|
||||||
* Format and print out a partition list for each device from global device
|
* Get the net size (w/o bad blocks) of the given partition.
|
||||||
* list.
|
*
|
||||||
|
* @param mtd the mtd info
|
||||||
|
* @param part the partition
|
||||||
|
* @return the calculated net size of this partition
|
||||||
*/
|
*/
|
||||||
static void list_partitions(void)
|
static uint64_t net_part_size(struct mtd_info *mtd, struct part_info *part)
|
||||||
|
{
|
||||||
|
if (!mtd->block_isbad)
|
||||||
|
return part->size;
|
||||||
|
|
||||||
|
uint64_t i, net_size = 0;
|
||||||
|
|
||||||
|
for (i = 0; i < part->size; i += mtd->erasesize) {
|
||||||
|
if (!mtd->block_isbad(mtd, part->offset + i))
|
||||||
|
net_size += mtd->erasesize;
|
||||||
|
}
|
||||||
|
return net_size;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
static void print_partition_table(void)
|
||||||
{
|
{
|
||||||
struct list_head *dentry, *pentry;
|
struct list_head *dentry, *pentry;
|
||||||
struct part_info *part;
|
struct part_info *part;
|
||||||
struct mtd_device *dev;
|
struct mtd_device *dev;
|
||||||
int part_num;
|
int part_num;
|
||||||
|
|
||||||
debug("\n---list_partitions---\n");
|
|
||||||
list_for_each(dentry, &devices) {
|
list_for_each(dentry, &devices) {
|
||||||
dev = list_entry(dentry, struct mtd_device, link);
|
dev = list_entry(dentry, struct mtd_device, link);
|
||||||
|
/* list partitions for given device */
|
||||||
|
part_num = 0;
|
||||||
|
#if defined(CONFIG_CMD_MTDPARTS_SHOW_NET_SIZES)
|
||||||
|
struct mtd_info *mtd;
|
||||||
|
|
||||||
|
if (get_mtd_info(dev->id->type, dev->id->num, &mtd))
|
||||||
|
return;
|
||||||
|
|
||||||
|
printf("\ndevice %s%d <%s>, # parts = %d\n",
|
||||||
|
MTD_DEV_TYPE(dev->id->type), dev->id->num,
|
||||||
|
dev->id->mtd_id, dev->num_parts);
|
||||||
|
printf(" #: name\t\tsize\t\tnet size\toffset\t\tmask_flags\n");
|
||||||
|
|
||||||
|
list_for_each(pentry, &dev->parts) {
|
||||||
|
u32 net_size;
|
||||||
|
char *size_note;
|
||||||
|
|
||||||
|
part = list_entry(pentry, struct part_info, link);
|
||||||
|
net_size = net_part_size(mtd, part);
|
||||||
|
size_note = part->size == net_size ? " " : " (!)";
|
||||||
|
printf("%2d: %-20s0x%08x\t0x%08x%s\t0x%08x\t%d\n",
|
||||||
|
part_num, part->name, part->size,
|
||||||
|
net_size, size_note, part->offset,
|
||||||
|
part->mask_flags);
|
||||||
|
#else /* !defined(CONFIG_CMD_MTDPARTS_SHOW_NET_SIZES) */
|
||||||
printf("\ndevice %s%d <%s>, # parts = %d\n",
|
printf("\ndevice %s%d <%s>, # parts = %d\n",
|
||||||
MTD_DEV_TYPE(dev->id->type), dev->id->num,
|
MTD_DEV_TYPE(dev->id->type), dev->id->num,
|
||||||
dev->id->mtd_id, dev->num_parts);
|
dev->id->mtd_id, dev->num_parts);
|
||||||
printf(" #: name\t\tsize\t\toffset\t\tmask_flags\n");
|
printf(" #: name\t\tsize\t\toffset\t\tmask_flags\n");
|
||||||
|
|
||||||
/* list partitions for given device */
|
|
||||||
part_num = 0;
|
|
||||||
list_for_each(pentry, &dev->parts) {
|
list_for_each(pentry, &dev->parts) {
|
||||||
part = list_entry(pentry, struct part_info, link);
|
part = list_entry(pentry, struct part_info, link);
|
||||||
printf("%2d: %-20s0x%08x\t0x%08x\t%d\n",
|
printf("%2d: %-20s0x%08x\t0x%08x\t%d\n",
|
||||||
part_num, part->name, part->size,
|
part_num, part->name, part->size,
|
||||||
part->offset, part->mask_flags);
|
part->offset, part->mask_flags);
|
||||||
|
#endif /* defined(CONFIG_CMD_MTDPARTS_SHOW_NET_SIZES) */
|
||||||
part_num++;
|
part_num++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (list_empty(&devices))
|
if (list_empty(&devices))
|
||||||
printf("no partitions defined\n");
|
printf("no partitions defined\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Format and print out a partition list for each device from global device
|
||||||
|
* list.
|
||||||
|
*/
|
||||||
|
static void list_partitions(void)
|
||||||
|
{
|
||||||
|
struct part_info *part;
|
||||||
|
|
||||||
|
debug("\n---list_partitions---\n");
|
||||||
|
print_partition_table();
|
||||||
|
|
||||||
/* current_mtd_dev is not NULL only when we have non empty device list */
|
/* current_mtd_dev is not NULL only when we have non empty device list */
|
||||||
if (current_mtd_dev) {
|
if (current_mtd_dev) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user