Skip to content
Snippets Groups Projects
mtdparts.c 52.4 KiB
Newer Older
  • Learn to ignore specific revisions
  • 		len += strlen(argv[3]);		/* size@offset */
    		len += strlen(argv[4]) + 2;	/* '(' name ')' */
    		if (argv[5] && (strlen(argv[5]) == 2))
    			len += 2;		/* 'ro' */
    
    		if (len >= PART_ADD_DESC_MAXLEN) {
    			printf("too long partition description\n");
    			return 1;
    		}
    		sprintf(tmpbuf, "%s:%s(%s)%s",
    				id->mtd_id, argv[3], argv[4], argv[5] ? argv[5] : "");
    
    		debug("add tmpbuf: %s\n", tmpbuf);
    
    
    		if ((device_parse(tmpbuf, NULL, &dev) != 0) || (!dev))
    			return 1;
    
    
    		debug("+ %s\t%d\t%s\n", MTD_DEV_TYPE(dev->id->type),
    
    				dev->id->num, dev->id->mtd_id);
    
    
    		p = list_entry(dev->parts.next, struct part_info, link);
    
    #if defined(CONFIG_CMD_MTDPARTS_SPREAD)
    		if (get_mtd_info(dev->id->type, dev->id->num, &mtd))
    			return 1;
    
    		if (!strcmp(&argv[1][3], ".spread")) {
    			spread_partition(mtd, p, &next_offset);
    
    Steve Rae's avatar
    Steve Rae committed
    			debug("increased %s to %llu bytes\n", p->name, p->size);
    
    		}
    #endif
    
    		dev_tmp = device_find(dev->id->type, dev->id->num);
    		if (dev_tmp == NULL) {
    
    			device_add(dev);
    
    		} else if (part_add(dev_tmp, p) != 0) {
    
    			/* merge new partition with existing ones*/
    
    		}
    
    		if (generate_mtdparts_save(last_parts, MTDPARTS_MAXLEN) != 0) {
    
    			printf("generated mtdparts too long, resetting to null\n");
    
    			return 1;
    		}
    
    		return 0;
    	}
    
    	/* mtdparts del part-id */
    	if ((argc == 3) && (strcmp(argv[1], "del") == 0)) {
    
    		debug("del: part-id = %s\n", argv[2]);
    
    
    		return delete_partition(argv[2]);
    	}
    
    
    #if defined(CONFIG_CMD_MTDPARTS_SPREAD)
    	if ((argc == 2) && (strcmp(argv[1], "spread") == 0))
    		return spread_partitions();
    #endif /* CONFIG_CMD_MTDPARTS_SPREAD */
    
    
    }
    
    /***************************************************/
    U_BOOT_CMD(
    	chpart,	2,	0,	do_chpart,
    	"change active partition",
    	"part-id\n"
    
    	"    - change active partition (e.g. part-id = nand0,1)"
    
    #ifdef CONFIG_SYS_LONGHELP
    static char mtdparts_help_text[] =
    
    	"\n"
    	"    - list partition table\n"
    	"mtdparts delall\n"
    	"    - delete all partitions\n"
    	"mtdparts del part-id\n"
    	"    - delete partition (e.g. part-id = nand0,1)\n"
    	"mtdparts add <mtd-dev> <size>[@<offset>] [<name>] [ro]\n"
    	"    - add partition\n"
    
    #if defined(CONFIG_CMD_MTDPARTS_SPREAD)
    	"mtdparts add.spread <mtd-dev> <size>[@<offset>] [<name>] [ro]\n"
    	"    - add partition, padding size by skipping bad blocks\n"
    #endif
    
    	"mtdparts default\n"
    
    	"    - reset partition table to defaults\n"
    #if defined(CONFIG_CMD_MTDPARTS_SPREAD)
    	"mtdparts spread\n"
    	"    - adjust the sizes of the partitions so they are\n"
    	"      at least as big as the mtdparts variable specifies\n"
    	"      and they each start on a good block\n\n"
    #else
    	"\n"
    #endif /* CONFIG_CMD_MTDPARTS_SPREAD */
    
    	"-----\n\n"
    	"this command uses three environment variables:\n\n"
    	"'partition' - keeps current partition identifier\n\n"
    	"partition  := <part-id>\n"
    	"<part-id>  := <dev-id>,part_num\n\n"
    	"'mtdids' - linux kernel mtd device id <-> u-boot device id mapping\n\n"
    	"mtdids=<idmap>[,<idmap>,...]\n\n"
    	"<idmap>    := <dev-id>=<mtd-id>\n"
    	"<dev-id>   := 'nand'|'nor'|'onenand'<dev-num>\n"
    	"<dev-num>  := mtd device number, 0...\n"
    	"<mtd-id>   := unique device tag used by linux kernel to find mtd device (mtd->name)\n\n"
    	"'mtdparts' - partition list\n\n"
    	"mtdparts=mtdparts=<mtd-def>[;<mtd-def>...]\n\n"
    	"<mtd-def>  := <mtd-id>:<part-def>[,<part-def>...]\n"
    	"<mtd-id>   := unique device tag used by linux kernel to find mtd device (mtd->name)\n"
    	"<part-def> := <size>[@<offset>][<name>][<ro-flag>]\n"
    	"<size>     := standard linux memsize OR '-' to denote all remaining space\n"
    	"<offset>   := partition start offset within the device\n"
    	"<name>     := '(' NAME ')'\n"
    
    	"<ro-flag>  := when set to 'ro' makes partition read-only (not used, passed to kernel)";
    #endif
    
    U_BOOT_CMD(
    	mtdparts,	6,	0,	do_mtdparts,
    	"define flash/nand partitions", mtdparts_help_text
    
    );
    /***************************************************/