diff options
-rw-r--r-- | common/cmd_jffs2.c | 44 | ||||
-rw-r--r-- | common/cmd_mtdparts.c | 74 |
2 files changed, 64 insertions, 54 deletions
diff --git a/common/cmd_jffs2.c b/common/cmd_jffs2.c index 860d1d9..3bb6c3c 100644 --- a/common/cmd_jffs2.c +++ b/common/cmd_jffs2.c @@ -137,8 +137,15 @@ #define MTD_WRITEABLE_CMD 1 /* current active device and partition number */ -static struct mtd_device *current_dev = NULL; -static u8 current_partnum = 0; +#ifdef CONFIG_CMD_MTDPARTS +/* Use the ones declared in cmd_mtdparts.c */ +extern struct mtd_device *current_mtd_dev; +extern u8 current_mtd_partnum; +#else +/* Use local ones */ +struct mtd_device *current_mtd_dev = NULL; +u8 current_mtd_partnum = 0; +#endif #if defined(CONFIG_CMD_CRAMFS) extern int cramfs_check (struct part_info *info); @@ -346,6 +353,9 @@ static inline u32 get_part_sector_size(struct mtdids *id, struct part_info *part * Parse and initialize global mtdids mapping and create global * device/partition list. * + * 'Static' version of command line mtdparts_init() routine. Single partition on + * a single device configuration. + * * @return 0 on success, 1 otherwise */ int mtdparts_init(void) @@ -360,18 +370,18 @@ int mtdparts_init(void) struct part_info *part; initialized = 1; - current_dev = (struct mtd_device *) + current_mtd_dev = (struct mtd_device *) malloc(sizeof(struct mtd_device) + sizeof(struct part_info) + sizeof(struct mtdids)); - if (!current_dev) { + if (!current_mtd_dev) { printf("out of memory\n"); return 1; } - memset(current_dev, 0, sizeof(struct mtd_device) + - sizeof(struct part_info) + sizeof(struct mtdids)); + memset(current_mtd_dev, 0, sizeof(struct mtd_device) + + sizeof(struct part_info) + sizeof(struct mtdids)); - id = (struct mtdids *)(current_dev + 1); + id = (struct mtdids *)(current_mtd_dev + 1); part = (struct part_info *)(id + 1); /* id */ @@ -386,7 +396,7 @@ int mtdparts_init(void) if ((mtd_id_parse(dev_name, NULL, &id->type, &id->num) != 0) || (mtd_device_validate(id->type, id->num, &size) != 0)) { printf("incorrect device: %s%d\n", MTD_DEV_TYPE(id->type), id->num); - free(current_dev); + free(current_mtd_dev); return 1; } id->size = size; @@ -413,7 +423,7 @@ int mtdparts_init(void) part->sector_size = get_part_sector_size(id, part); - part->dev = current_dev; + part->dev = current_mtd_dev; INIT_LIST_HEAD(&part->link); /* recalculate size if needed */ @@ -424,11 +434,11 @@ int mtdparts_init(void) part->name, part->size, part->offset); /* device */ - current_dev->id = id; - INIT_LIST_HEAD(¤t_dev->link); - current_dev->num_parts = 1; - INIT_LIST_HEAD(¤t_dev->parts); - list_add(&part->link, ¤t_dev->parts); + current_mtd_dev->id = id; + INIT_LIST_HEAD(¤t_mtd_dev->link); + current_mtd_dev->num_parts = 1; + INIT_LIST_HEAD(¤t_mtd_dev->parts); + list_add(&part->link, ¤t_mtd_dev->parts); } return 0; @@ -516,7 +526,7 @@ int do_jffs2_fsload(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) if (mtdparts_init() !=0) return 1; - if ((part = jffs2_part_info(current_dev, current_partnum))){ + if ((part = jffs2_part_info(current_mtd_dev, current_mtd_partnum))){ /* check partition type for cramfs */ fsname = (cramfs_check(part) ? "CRAMFS" : "JFFS2"); @@ -567,7 +577,7 @@ int do_jffs2_ls(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) if (mtdparts_init() !=0) return 1; - if ((part = jffs2_part_info(current_dev, current_partnum))){ + if ((part = jffs2_part_info(current_mtd_dev, current_mtd_partnum))){ /* check partition type for cramfs */ if (cramfs_check(part)) { @@ -602,7 +612,7 @@ int do_jffs2_fsinfo(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) if (mtdparts_init() !=0) return 1; - if ((part = jffs2_part_info(current_dev, current_partnum))){ + if ((part = jffs2_part_info(current_mtd_dev, current_mtd_partnum))){ /* check partition type for cramfs */ fsname = (cramfs_check(part) ? "CRAMFS" : "JFFS2"); diff --git a/common/cmd_mtdparts.c b/common/cmd_mtdparts.c index e7b6acc..6a0849f 100644 --- a/common/cmd_mtdparts.c +++ b/common/cmd_mtdparts.c @@ -166,8 +166,8 @@ struct list_head mtdids; struct list_head devices; /* current active device and partition number */ -static struct mtd_device *current_dev = NULL; -static u8 current_partnum = 0; +struct mtd_device *current_mtd_dev = NULL; +u8 current_mtd_partnum = 0; static struct part_info* mtd_part_info(struct mtd_device *dev, unsigned int part_num); @@ -251,12 +251,12 @@ static void index_partitions(void) DEBUGF("--- index partitions ---\n"); - if (current_dev) { + if (current_mtd_dev) { mtddevnum = 0; list_for_each(dentry, &devices) { dev = list_entry(dentry, struct mtd_device, link); - if (dev == current_dev) { - mtddevnum += current_partnum; + if (dev == current_mtd_dev) { + mtddevnum += current_mtd_partnum; sprintf(buf, "%d", mtddevnum); setenv("mtddevnum", buf); break; @@ -264,7 +264,7 @@ static void index_partitions(void) mtddevnum += dev->num_parts; } - part = mtd_part_info(current_dev, current_partnum); + part = mtd_part_info(current_mtd_dev, current_mtd_partnum); setenv("mtddevname", part->name); DEBUGF("=> mtddevnum %d,\n=> mtddevname %s\n", mtddevnum, part->name); @@ -285,9 +285,9 @@ static void current_save(void) DEBUGF("--- current_save ---\n"); - if (current_dev) { - sprintf(buf, "%s%d,%d", MTD_DEV_TYPE(current_dev->id->type), - current_dev->id->num, current_partnum); + if (current_mtd_dev) { + sprintf(buf, "%s%d,%d", MTD_DEV_TYPE(current_mtd_dev->id->type), + current_mtd_dev->id->num, current_mtd_partnum); setenv("partition", buf); strncpy(last_partition, buf, 16); @@ -498,18 +498,18 @@ static int part_del(struct mtd_device *dev, struct part_info *part) /* otherwise just delete this partition */ - if (dev == current_dev) { + if (dev == current_mtd_dev) { /* we are modyfing partitions for the current device, * update current */ struct part_info *curr_pi; - curr_pi = mtd_part_info(current_dev, current_partnum); + curr_pi = mtd_part_info(current_mtd_dev, current_mtd_partnum); if (curr_pi) { if (curr_pi == part) { printf("current partition deleted, resetting current to 0\n"); - current_partnum = 0; + current_mtd_partnum = 0; } else if (part->offset <= curr_pi->offset) { - current_partnum--; + current_mtd_partnum--; } current_save_needed = 1; } @@ -579,8 +579,8 @@ static int part_sort_add(struct mtd_device *dev, struct part_info *part) /* get current partition info if we are updating current device */ curr_pi = NULL; - if (dev == current_dev) - curr_pi = mtd_part_info(current_dev, current_partnum); + if (dev == current_mtd_dev) + curr_pi = mtd_part_info(current_mtd_dev, current_mtd_partnum); list_for_each(entry, &dev->parts) { struct part_info *pi; @@ -600,7 +600,7 @@ static int part_sort_add(struct mtd_device *dev, struct part_info *part) if (curr_pi && (pi->offset <= curr_pi->offset)) { /* we are modyfing partitions for the current * device, update current */ - current_partnum++; + current_mtd_partnum++; current_save(); } else { index_partitions(); @@ -842,15 +842,15 @@ static int device_del(struct mtd_device *dev) list_del(&dev->link); free(dev); - if (dev == current_dev) { + if (dev == current_mtd_dev) { /* we just deleted current device */ if (list_empty(&devices)) { - current_dev = NULL; + current_mtd_dev = NULL; } else { /* reset first partition from first dev from the * devices list as current */ - current_dev = list_entry(devices.next, struct mtd_device, link); - current_partnum = 0; + current_mtd_dev = list_entry(devices.next, struct mtd_device, link); + current_mtd_partnum = 0; } current_save(); return 0; @@ -893,8 +893,8 @@ static void device_add(struct mtd_device *dev) u8 current_save_needed = 0; if (list_empty(&devices)) { - current_dev = dev; - current_partnum = 0; + current_mtd_dev = dev; + current_mtd_partnum = 0; current_save_needed = 1; } @@ -1050,7 +1050,7 @@ static int device_parse(const char *const mtd_dev, const char **ret, struct mtd_ static int mtd_devices_init(void) { last_parts[0] = '\0'; - current_dev = NULL; + current_mtd_dev = NULL; current_save(); return device_delall(&devices); @@ -1330,13 +1330,13 @@ static void list_partitions(void) if (list_empty(&devices)) printf("no partitions defined\n"); - /* current_dev is not NULL only when we have non empty device list */ - if (current_dev) { - part = mtd_part_info(current_dev, current_partnum); + /* current_mtd_dev is not NULL only when we have non empty device list */ + if (current_mtd_dev) { + part = mtd_part_info(current_mtd_dev, current_mtd_partnum); if (part) { printf("\nactive partition: %s%d,%d - (%s) 0x%08x @ 0x%08x\n", - MTD_DEV_TYPE(current_dev->id->type), - current_dev->id->num, current_partnum, + MTD_DEV_TYPE(current_mtd_dev->id->type), + current_mtd_dev->id->num, current_mtd_partnum, part->name, part->size, part->offset); } else { printf("could not get current partition info\n\n"); @@ -1709,13 +1709,13 @@ int mtdparts_init(void) strncpy(last_parts, parts, MTDPARTS_MAXLEN); /* reset first partition from first dev from the list as current */ - current_dev = list_entry(devices.next, struct mtd_device, link); - current_partnum = 0; + current_mtd_dev = list_entry(devices.next, struct mtd_device, link); + current_mtd_partnum = 0; current_save(); - DEBUGF("mtdparts_init: current_dev = %s%d, current_partnum = %d\n", - MTD_DEV_TYPE(current_dev->id->type), - current_dev->id->num, current_partnum); + DEBUGF("mtdparts_init: current_mtd_dev = %s%d, current_mtd_partnum = %d\n", + MTD_DEV_TYPE(current_mtd_dev->id->type), + current_mtd_dev->id->num, current_mtd_partnum); } /* mtdparts variable was reset to NULL, delete all devices/partitions */ @@ -1735,8 +1735,8 @@ int mtdparts_init(void) DEBUGF("--- getting current partition: %s\n", tmp_ep); if (find_dev_and_part(tmp_ep, &cdev, &pnum, &p) == 0) { - current_dev = cdev; - current_partnum = pnum; + current_mtd_dev = cdev; + current_mtd_partnum = pnum; current_save(); } } else if (getenv("partition") == NULL) { @@ -1820,8 +1820,8 @@ int do_chpart(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) if (find_dev_and_part(argv[1], &dev, &pnum, &part) != 0) return 1; - current_dev = dev; - current_partnum = pnum; + current_mtd_dev = dev; + current_mtd_partnum = pnum; current_save(); printf("partition changed to %s%d,%d\n", |