Blame view
cmd/jffs2.c
15.2 KB
c609719b8 Initial revision |
1 2 3 |
/* * (C) Copyright 2002 * Wolfgang Denk, DENX Software Engineering, wd@denx.de. |
700a0c648 Add common (with ... |
4 |
* |
dd875c767 * Patch by Robert... |
5 6 |
* (C) Copyright 2002 * Robert Schwebel, Pengutronix, <r.schwebel@pengutronix.de> |
700a0c648 Add common (with ... |
7 |
* |
dd875c767 * Patch by Robert... |
8 9 |
* (C) Copyright 2003 * Kai-Uwe Bloem, Auerswald GmbH & Co KG, <linux-development@auerswald.de> |
c609719b8 Initial revision |
10 |
* |
700a0c648 Add common (with ... |
11 12 13 14 15 16 17 18 19 20 |
* (C) Copyright 2005 * Wolfgang Denk, DENX Software Engineering, wd@denx.de. * * Added support for reading flash partition table from environment. * Parsing routines are based on driver/mtd/cmdline.c from the linux 2.4 * kernel tree. * * $Id: cmdlinepart.c,v 1.17 2004/11/26 11:18:47 lavinen Exp $ * Copyright 2002 SYSGO Real-Time Solutions GmbH * |
1a4596601 Add GPL-2.0+ SPDX... |
21 |
* SPDX-License-Identifier: GPL-2.0+ |
700a0c648 Add common (with ... |
22 23 24 25 26 27 28 29 30 31 |
*/ /* * Three environment variables are used by the parsing routines: * * 'partition' - keeps current partition identifier * * partition := <part-id> * <part-id> := <dev-id>,part_num * |
8f79e4c2d Add configuration... |
32 |
* |
700a0c648 Add common (with ... |
33 34 35 36 37 |
* 'mtdids' - linux kernel mtd device id <-> u-boot device id mapping * * mtdids=<idmap>[,<idmap>,...] * * <idmap> := <dev-id>=<mtd-id> |
1a7f8ccec Add JFFS2 command... |
38 |
* <dev-id> := 'nand'|'nor'|'onenand'<dev-num> |
700a0c648 Add common (with ... |
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
* <dev-num> := mtd device number, 0... * <mtd-id> := unique device tag used by linux kernel to find mtd device (mtd->name) * * * 'mtdparts' - partition list * * mtdparts=mtdparts=<mtd-def>[;<mtd-def>...] * * <mtd-def> := <mtd-id>:<part-def>[,<part-def>...] * <mtd-id> := unique device tag used by linux kernel to find mtd device (mtd->name) * <part-def> := <size>[@<offset>][<name>][<ro-flag>] * <size> := standard linux memsize OR '-' to denote all remaining space * <offset> := partition start offset within the device * <name> := '(' NAME ')' * <ro-flag> := when set to 'ro' makes partition read-only (not used, passed to kernel) * * Notes: * - each <mtd-id> used in mtdparts must albo exist in 'mtddis' mapping * - if the above variables are not set defaults for a given target are used * * Examples: * * 1 NOR Flash, with 1 single writable partition: * mtdids=nor0=edb7312-nor * mtdparts=mtdparts=edb7312-nor:- * * 1 NOR Flash with 2 partitions, 1 NAND with one * mtdids=nor0=edb7312-nor,nand0=edb7312-nand * mtdparts=mtdparts=edb7312-nor:256k(ARMboot)ro,-(root);edb7312-nand:-(home) * */ /* |
991b089d1 Synchronize with ... |
72 |
* JFFS2/CRAMFS support |
700a0c648 Add common (with ... |
73 74 75 76 77 |
*/ #include <common.h> #include <command.h> #include <malloc.h> #include <jffs2/jffs2.h> |
700a0c648 Add common (with ... |
78 79 |
#include <linux/list.h> #include <linux/ctype.h> |
700a0c648 Add common (with ... |
80 |
#include <cramfs/cramfs_fs.h> |
c76fe4742 common/cmd_[i-n]*... |
81 |
#if defined(CONFIG_CMD_NAND) |
6ae3900a8 mtd: nand: Rename... |
82 |
#include <linux/mtd/rawnand.h> |
ac7eb8a31 Update of new NAN... |
83 |
#include <nand.h> |
c76fe4742 common/cmd_[i-n]*... |
84 |
#endif |
1a7f8ccec Add JFFS2 command... |
85 86 87 88 89 90 |
#if defined(CONFIG_CMD_ONENAND) #include <linux/mtd/mtd.h> #include <linux/mtd/onenand.h> #include <onenand_uboot.h> #endif |
700a0c648 Add common (with ... |
91 |
/* enable/disable debugging messages */ |
038ccac51 Merge with /home/... |
92 93 |
#define DEBUG_JFFS #undef DEBUG_JFFS |
700a0c648 Add common (with ... |
94 |
|
ab4b956d3 [FIX] Coding styl... |
95 |
#ifdef DEBUG_JFFS |
700a0c648 Add common (with ... |
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 |
# define DEBUGF(fmt, args...) printf(fmt ,##args) #else # define DEBUGF(fmt, args...) #endif /* special size referring to all the remaining space in a partition */ #define SIZE_REMAINING 0xFFFFFFFF /* special offset value, it is used when not provided by user * * this value is used temporarily during parsing, later such offests * are recalculated */ #define OFFSET_NOT_SPECIFIED 0xFFFFFFFF /* minimum partition size */ #define MIN_PART_SIZE 4096 /* this flag needs to be set in part_info struct mask_flags * field for read-only partitions */ |
038ccac51 Merge with /home/... |
115 |
#define MTD_WRITEABLE_CMD 1 |
700a0c648 Add common (with ... |
116 |
|
68d7d6510 Separate mtdparts... |
117 |
/* current active device and partition number */ |
76b5883da jffs2/mtdparts: F... |
118 119 120 121 122 123 124 125 126 |
#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 |
700a0c648 Add common (with ... |
127 |
|
68d7d6510 Separate mtdparts... |
128 129 130 131 132 133 134 135 136 137 138 139 140 |
#if defined(CONFIG_CMD_CRAMFS) extern int cramfs_check (struct part_info *info); extern int cramfs_load (char *loadoffset, struct part_info *info, char *filename); extern int cramfs_ls (struct part_info *info, char *filename); extern int cramfs_info (struct part_info *info); #else /* defining empty macros for function names is ugly but avoids ifdef clutter * all over the code */ #define cramfs_check(x) (0) #define cramfs_load(x,y,z) (-1) #define cramfs_ls(x,y) (0) #define cramfs_info(x) (0) #endif |
700a0c648 Add common (with ... |
141 |
|
68d7d6510 Separate mtdparts... |
142 |
#ifndef CONFIG_CMD_MTDPARTS |
700a0c648 Add common (with ... |
143 |
/** |
68d7d6510 Separate mtdparts... |
144 |
* Check device number to be within valid range for given device type. |
700a0c648 Add common (with ... |
145 |
* |
68d7d6510 Separate mtdparts... |
146 147 |
* @param dev device to validate * @return 0 if device is valid, 1 otherwise |
c609719b8 Initial revision |
148 |
*/ |
68d7d6510 Separate mtdparts... |
149 |
static int mtd_device_validate(u8 type, u8 num, u32 *size) |
700a0c648 Add common (with ... |
150 |
{ |
68d7d6510 Separate mtdparts... |
151 152 153 154 155 |
if (type == MTD_DEV_TYPE_NOR) { #if defined(CONFIG_CMD_FLASH) if (num < CONFIG_SYS_MAX_FLASH_BANKS) { extern flash_info_t flash_info[]; *size = flash_info[num].size; |
180d3f74e * Fix problems ca... |
156 |
|
68d7d6510 Separate mtdparts... |
157 |
return 0; |
700a0c648 Add common (with ... |
158 |
} |
c609719b8 Initial revision |
159 |
|
68d7d6510 Separate mtdparts... |
160 161 162 163 164 165 166 167 168 |
printf("no such FLASH device: %s%d (valid range 0 ... %d ", MTD_DEV_TYPE(type), num, CONFIG_SYS_MAX_FLASH_BANKS - 1); #else printf("support for FLASH devices not present "); #endif } else if (type == MTD_DEV_TYPE_NAND) { #if defined(CONFIG_JFFS2_NAND) && defined(CONFIG_CMD_NAND) |
bfdba68ea cmd: jffs2: use g... |
169 170 171 |
struct mtd_info *mtd = get_nand_dev_by_index(num); if (mtd) { *size = mtd->size; |
68d7d6510 Separate mtdparts... |
172 |
return 0; |
700a0c648 Add common (with ... |
173 |
} |
6705d81e9 * Patch by Andrea... |
174 |
|
68d7d6510 Separate mtdparts... |
175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 |
printf("no such NAND device: %s%d (valid range 0 ... %d) ", MTD_DEV_TYPE(type), num, CONFIG_SYS_MAX_NAND_DEVICE - 1); #else printf("support for NAND devices not present "); #endif } else if (type == MTD_DEV_TYPE_ONENAND) { #if defined(CONFIG_CMD_ONENAND) *size = onenand_mtd.size; return 0; #else printf("support for OneNAND devices not present "); #endif } else printf("Unknown defice type %d ", type); |
c609719b8 Initial revision |
193 |
|
68d7d6510 Separate mtdparts... |
194 |
return 1; |
700a0c648 Add common (with ... |
195 |
} |
998eaaecd * Configure PPCha... |
196 |
|
700a0c648 Add common (with ... |
197 |
/** |
68d7d6510 Separate mtdparts... |
198 199 |
* Parse device id string <dev-id> := 'nand'|'nor'|'onenand'<dev-num>, * return device type and number. |
700a0c648 Add common (with ... |
200 |
* |
68d7d6510 Separate mtdparts... |
201 202 203 204 |
* @param id string describing device id * @param ret_id output pointer to next char after parse completes (output) * @param dev_type parsed device type (output) * @param dev_num parsed device number (output) |
700a0c648 Add common (with ... |
205 206 |
* @return 0 on success, 1 otherwise */ |
68d7d6510 Separate mtdparts... |
207 |
static int mtd_id_parse(const char *id, const char **ret_id, u8 *dev_type, u8 *dev_num) |
c609719b8 Initial revision |
208 |
{ |
68d7d6510 Separate mtdparts... |
209 |
const char *p = id; |
700a0c648 Add common (with ... |
210 |
|
68d7d6510 Separate mtdparts... |
211 212 213 214 215 216 217 218 219 220 221 222 223 |
*dev_type = 0; if (strncmp(p, "nand", 4) == 0) { *dev_type = MTD_DEV_TYPE_NAND; p += 4; } else if (strncmp(p, "nor", 3) == 0) { *dev_type = MTD_DEV_TYPE_NOR; p += 3; } else if (strncmp(p, "onenand", 7) == 0) { *dev_type = MTD_DEV_TYPE_ONENAND; p += 7; } else { printf("incorrect device type in %s ", id); |
700a0c648 Add common (with ... |
224 225 |
return 1; } |
c609719b8 Initial revision |
226 |
|
68d7d6510 Separate mtdparts... |
227 228 229 |
if (!isdigit(*p)) { printf("incorrect device number in %s ", id); |
700a0c648 Add common (with ... |
230 231 |
return 1; } |
68d7d6510 Separate mtdparts... |
232 233 234 |
*dev_num = simple_strtoul(p, (char **)&p, 0); if (ret_id) *ret_id = p; |
700a0c648 Add common (with ... |
235 236 |
return 0; } |
68d7d6510 Separate mtdparts... |
237 |
|
700a0c648 Add common (with ... |
238 239 240 241 242 243 |
/* * 'Static' version of command line mtdparts_init() routine. Single partition on * a single device configuration. */ /** |
b5b004ad8 jffs2: Fix zero s... |
244 245 246 247 248 249 250 |
* Calculate sector size. * * @return sector size */ static inline u32 get_part_sector_size_nand(struct mtdids *id) { #if defined(CONFIG_JFFS2_NAND) && defined(CONFIG_CMD_NAND) |
151c06ec6 mtd: nand: Remove... |
251 |
struct mtd_info *mtd; |
b5b004ad8 jffs2: Fix zero s... |
252 |
|
bfdba68ea cmd: jffs2: use g... |
253 |
mtd = get_nand_dev_by_index(id->num); |
b5b004ad8 jffs2: Fix zero s... |
254 |
|
151c06ec6 mtd: nand: Remove... |
255 |
return mtd->erasesize; |
b5b004ad8 jffs2: Fix zero s... |
256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 |
#else BUG(); return 0; #endif } static inline u32 get_part_sector_size_nor(struct mtdids *id, struct part_info *part) { #if defined(CONFIG_CMD_FLASH) extern flash_info_t flash_info[]; u32 end_phys, start_phys, sector_size = 0, size = 0; int i; flash_info_t *flash; flash = &flash_info[id->num]; start_phys = flash->start[0] + part->offset; |
141053d60 cmd_jffs2: Fix ge... |
274 |
end_phys = start_phys + part->size - 1; |
b5b004ad8 jffs2: Fix zero s... |
275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 |
for (i = 0; i < flash->sector_count; i++) { if (flash->start[i] >= end_phys) break; if (flash->start[i] >= start_phys) { if (i == flash->sector_count - 1) { size = flash->start[0] + flash->size - flash->start[i]; } else { size = flash->start[i+1] - flash->start[i]; } if (sector_size < size) sector_size = size; } } return sector_size; #else BUG(); return 0; #endif } static inline u32 get_part_sector_size_onenand(void) { #if defined(CONFIG_CMD_ONENAND) struct mtd_info *mtd; mtd = &onenand_mtd; return mtd->erasesize; #else BUG(); return 0; #endif } static inline u32 get_part_sector_size(struct mtdids *id, struct part_info *part) { if (id->type == MTD_DEV_TYPE_NAND) return get_part_sector_size_nand(id); else if (id->type == MTD_DEV_TYPE_NOR) return get_part_sector_size_nor(id, part); else if (id->type == MTD_DEV_TYPE_ONENAND) return get_part_sector_size_onenand(); else DEBUGF("Error: Unknown device type. "); return 0; } /** |
700a0c648 Add common (with ... |
329 |
* Parse and initialize global mtdids mapping and create global |
8f79e4c2d Add configuration... |
330 |
* device/partition list. |
700a0c648 Add common (with ... |
331 |
* |
76b5883da jffs2/mtdparts: F... |
332 333 334 |
* 'Static' version of command line mtdparts_init() routine. Single partition on * a single device configuration. * |
700a0c648 Add common (with ... |
335 336 337 338 339 340 341 342 343 344 345 346 |
* @return 0 on success, 1 otherwise */ int mtdparts_init(void) { static int initialized = 0; u32 size; char *dev_name; DEBUGF(" ---mtdparts_init--- "); if (!initialized) { |
c4e0e6860 Make new "mtdpart... |
347 348 |
struct mtdids *id; struct part_info *part; |
700a0c648 Add common (with ... |
349 |
initialized = 1; |
76b5883da jffs2/mtdparts: F... |
350 |
current_mtd_dev = (struct mtd_device *) |
700a0c648 Add common (with ... |
351 352 353 |
malloc(sizeof(struct mtd_device) + sizeof(struct part_info) + sizeof(struct mtdids)); |
76b5883da jffs2/mtdparts: F... |
354 |
if (!current_mtd_dev) { |
700a0c648 Add common (with ... |
355 356 357 358 |
printf("out of memory "); return 1; } |
76b5883da jffs2/mtdparts: F... |
359 360 |
memset(current_mtd_dev, 0, sizeof(struct mtd_device) + sizeof(struct part_info) + sizeof(struct mtdids)); |
700a0c648 Add common (with ... |
361 |
|
76b5883da jffs2/mtdparts: F... |
362 |
id = (struct mtdids *)(current_mtd_dev + 1); |
c4e0e6860 Make new "mtdpart... |
363 |
part = (struct part_info *)(id + 1); |
c609719b8 Initial revision |
364 |
|
700a0c648 Add common (with ... |
365 366 |
/* id */ id->mtd_id = "single part"; |
c609719b8 Initial revision |
367 |
|
700a0c648 Add common (with ... |
368 369 |
#if defined(CONFIG_JFFS2_DEV) dev_name = CONFIG_JFFS2_DEV; |
c609719b8 Initial revision |
370 |
#else |
700a0c648 Add common (with ... |
371 |
dev_name = "nor0"; |
c609719b8 Initial revision |
372 |
#endif |
68d7d6510 Separate mtdparts... |
373 374 |
if ((mtd_id_parse(dev_name, NULL, &id->type, &id->num) != 0) || (mtd_device_validate(id->type, id->num, &size) != 0)) { |
700a0c648 Add common (with ... |
375 376 |
printf("incorrect device: %s%d ", MTD_DEV_TYPE(id->type), id->num); |
76b5883da jffs2/mtdparts: F... |
377 |
free(current_mtd_dev); |
700a0c648 Add common (with ... |
378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 |
return 1; } id->size = size; INIT_LIST_HEAD(&id->link); DEBUGF("dev id: type = %d, num = %d, size = 0x%08lx, mtd_id = %s ", id->type, id->num, id->size, id->mtd_id); /* partition */ part->name = "static"; part->auto_name = 0; #if defined(CONFIG_JFFS2_PART_SIZE) part->size = CONFIG_JFFS2_PART_SIZE; #else part->size = SIZE_REMAINING; #endif |
c609719b8 Initial revision |
396 |
|
700a0c648 Add common (with ... |
397 398 399 400 |
#if defined(CONFIG_JFFS2_PART_OFFSET) part->offset = CONFIG_JFFS2_PART_OFFSET; #else part->offset = 0x00000000; |
c609719b8 Initial revision |
401 |
#endif |
76b5883da jffs2/mtdparts: F... |
402 |
part->dev = current_mtd_dev; |
700a0c648 Add common (with ... |
403 404 405 406 407 |
INIT_LIST_HEAD(&part->link); /* recalculate size if needed */ if (part->size == SIZE_REMAINING) part->size = id->size - part->offset; |
c609719b8 Initial revision |
408 |
|
2903ad33a jffs2: fix hangs/... |
409 |
part->sector_size = get_part_sector_size(id, part); |
700a0c648 Add common (with ... |
410 411 412 413 414 |
DEBUGF("part : name = %s, size = 0x%08lx, offset = 0x%08lx ", part->name, part->size, part->offset); /* device */ |
76b5883da jffs2/mtdparts: F... |
415 416 417 418 419 |
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); |
c609719b8 Initial revision |
420 |
} |
700a0c648 Add common (with ... |
421 |
|
c609719b8 Initial revision |
422 423 |
return 0; } |
68d7d6510 Separate mtdparts... |
424 |
#endif /* #ifndef CONFIG_CMD_MTDPARTS */ |
998eaaecd * Configure PPCha... |
425 |
|
700a0c648 Add common (with ... |
426 427 428 429 430 431 432 433 434 |
/** * Return pointer to the partition of a requested number from a requested * device. * * @param dev device that is to be searched for a partition * @param part_num requested partition number * @return pointer to the part_info, NULL otherwise */ static struct part_info* jffs2_part_info(struct mtd_device *dev, unsigned int part_num) |
998eaaecd * Configure PPCha... |
435 |
{ |
700a0c648 Add common (with ... |
436 437 438 |
struct list_head *entry; struct part_info *part; int num; |
998eaaecd * Configure PPCha... |
439 |
|
700a0c648 Add common (with ... |
440 441 |
if (!dev) return NULL; |
998eaaecd * Configure PPCha... |
442 |
|
700a0c648 Add common (with ... |
443 444 445 446 447 |
DEBUGF(" --- jffs2_part_info: partition number %d for device %s%d (%s) ", part_num, MTD_DEV_TYPE(dev->id->type), dev->id->num, dev->id->mtd_id); |
998eaaecd * Configure PPCha... |
448 |
|
700a0c648 Add common (with ... |
449 450 451 452 453 454 455 |
if (part_num >= dev->num_parts) { printf("invalid partition number %d for device %s%d (%s) ", part_num, MTD_DEV_TYPE(dev->id->type), dev->id->num, dev->id->mtd_id); return NULL; } |
998eaaecd * Configure PPCha... |
456 |
|
700a0c648 Add common (with ... |
457 458 459 460 461 462 463 464 |
/* locate partition number, return it */ num = 0; list_for_each(entry, &dev->parts) { part = list_entry(entry, struct part_info, link); if (part_num == num++) { return part; } |
998eaaecd * Configure PPCha... |
465 |
} |
700a0c648 Add common (with ... |
466 467 |
return NULL; |
998eaaecd * Configure PPCha... |
468 |
} |
ab4b956d3 [FIX] Coding styl... |
469 |
/***************************************************/ |
a187559e3 Use correct spell... |
470 |
/* U-Boot commands */ |
ab4b956d3 [FIX] Coding styl... |
471 |
/***************************************************/ |
dd875c767 * Patch by Robert... |
472 |
|
700a0c648 Add common (with ... |
473 474 475 476 477 478 479 480 481 482 |
/** * Routine implementing fsload u-boot command. This routine tries to load * a requested file from jffs2/cramfs filesystem on a current partition. * * @param cmdtp command internal data * @param flag command flag * @param argc number of arguments supplied to the command * @param argv arguments list * @return 0 on success, 1 otherwise */ |
54841ab50 Make sure that ar... |
483 |
int do_jffs2_fsload(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) |
c609719b8 Initial revision |
484 |
{ |
39539887e * Code cleanup (A... |
485 |
char *fsname; |
f39748ae8 * Patch by Paul R... |
486 |
char *filename; |
39539887e * Code cleanup (A... |
487 488 489 |
int size; struct part_info *part; ulong offset = load_addr; |
f39748ae8 * Patch by Paul R... |
490 491 |
/* pre-set Boot file name */ |
00caae6d4 env: Rename geten... |
492 493 |
filename = env_get("bootfile"); if (!filename) |
f39748ae8 * Patch by Paul R... |
494 |
filename = "uImage"; |
f39748ae8 * Patch by Paul R... |
495 |
|
c609719b8 Initial revision |
496 497 498 499 500 |
if (argc == 2) { filename = argv[1]; } if (argc == 3) { offset = simple_strtoul(argv[1], NULL, 16); |
4b9206ed5 * Patches by Thom... |
501 |
load_addr = offset; |
c609719b8 Initial revision |
502 503 |
filename = argv[2]; } |
700a0c648 Add common (with ... |
504 505 506 |
/* make sure we are in sync with env variables */ if (mtdparts_init() !=0) return 1; |
76b5883da jffs2/mtdparts: F... |
507 |
if ((part = jffs2_part_info(current_mtd_dev, current_mtd_partnum))){ |
c609719b8 Initial revision |
508 |
|
991b089d1 Synchronize with ... |
509 510 |
/* check partition type for cramfs */ fsname = (cramfs_check(part) ? "CRAMFS" : "JFFS2"); |
dd875c767 * Patch by Robert... |
511 512 513 514 515 516 |
printf("### %s loading '%s' to 0x%lx ", fsname, filename, offset); if (cramfs_check(part)) { size = cramfs_load ((char *) offset, part, filename); } else { |
991b089d1 Synchronize with ... |
517 |
/* if this is not cramfs assume jffs2 */ |
dd875c767 * Patch by Robert... |
518 519 |
size = jffs2_1pass_load((char *)offset, part, filename); } |
c609719b8 Initial revision |
520 521 |
if (size > 0) { |
dd875c767 * Patch by Robert... |
522 523 524 |
printf("### %s load complete: %d bytes loaded to 0x%lx ", fsname, size, offset); |
018f53032 env: Rename commo... |
525 |
env_set_hex("filesize", size); |
c609719b8 Initial revision |
526 |
} else { |
dd875c767 * Patch by Robert... |
527 528 |
printf("### %s LOAD ERROR<%x> for %s! ", fsname, size, filename); |
c609719b8 Initial revision |
529 530 531 532 |
} return !(size > 0); } |
87b8bd5ae Fix return values... |
533 |
return 1; |
c609719b8 Initial revision |
534 |
} |
700a0c648 Add common (with ... |
535 536 537 538 539 540 541 542 543 544 |
/** * Routine implementing u-boot ls command which lists content of a given * directory on a current partition. * * @param cmdtp command internal data * @param flag command flag * @param argc number of arguments supplied to the command * @param argv arguments list * @return 0 on success, 1 otherwise */ |
54841ab50 Make sure that ar... |
545 |
int do_jffs2_ls(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) |
c609719b8 Initial revision |
546 |
{ |
a87589da7 * Add support for... |
547 |
char *filename = "/"; |
c609719b8 Initial revision |
548 549 550 551 552 |
int ret; struct part_info *part; if (argc == 2) filename = argv[1]; |
700a0c648 Add common (with ... |
553 554 555 |
/* make sure we are in sync with env variables */ if (mtdparts_init() !=0) return 1; |
76b5883da jffs2/mtdparts: F... |
556 |
if ((part = jffs2_part_info(current_mtd_dev, current_mtd_partnum))){ |
c609719b8 Initial revision |
557 |
|
dd875c767 * Patch by Robert... |
558 559 560 561 |
/* check partition type for cramfs */ if (cramfs_check(part)) { ret = cramfs_ls (part, filename); } else { |
991b089d1 Synchronize with ... |
562 |
/* if this is not cramfs assume jffs2 */ |
dd875c767 * Patch by Robert... |
563 564 |
ret = jffs2_1pass_ls(part, filename); } |
c609719b8 Initial revision |
565 |
|
87b8bd5ae Fix return values... |
566 |
return ret ? 0 : 1; |
c609719b8 Initial revision |
567 |
} |
87b8bd5ae Fix return values... |
568 |
return 1; |
c609719b8 Initial revision |
569 |
} |
700a0c648 Add common (with ... |
570 571 572 573 574 575 576 577 578 579 |
/** * Routine implementing u-boot fsinfo command. This routine prints out * miscellaneous filesystem informations/statistics. * * @param cmdtp command internal data * @param flag command flag * @param argc number of arguments supplied to the command * @param argv arguments list * @return 0 on success, 1 otherwise */ |
54841ab50 Make sure that ar... |
580 |
int do_jffs2_fsinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) |
c609719b8 Initial revision |
581 |
{ |
c609719b8 Initial revision |
582 |
struct part_info *part; |
991b089d1 Synchronize with ... |
583 |
char *fsname; |
dd875c767 * Patch by Robert... |
584 |
int ret; |
c609719b8 Initial revision |
585 |
|
700a0c648 Add common (with ... |
586 587 588 |
/* make sure we are in sync with env variables */ if (mtdparts_init() !=0) return 1; |
8f79e4c2d Add configuration... |
589 |
|
76b5883da jffs2/mtdparts: F... |
590 |
if ((part = jffs2_part_info(current_mtd_dev, current_mtd_partnum))){ |
dd875c767 * Patch by Robert... |
591 592 |
/* check partition type for cramfs */ |
991b089d1 Synchronize with ... |
593 594 595 |
fsname = (cramfs_check(part) ? "CRAMFS" : "JFFS2"); printf("### filesystem type is %s ", fsname); |
c609719b8 Initial revision |
596 |
|
dd875c767 * Patch by Robert... |
597 598 599 |
if (cramfs_check(part)) { ret = cramfs_info (part); } else { |
991b089d1 Synchronize with ... |
600 |
/* if this is not cramfs assume jffs2 */ |
dd875c767 * Patch by Robert... |
601 602 |
ret = jffs2_1pass_info(part); } |
c609719b8 Initial revision |
603 |
|
87b8bd5ae Fix return values... |
604 |
return ret ? 0 : 1; |
c609719b8 Initial revision |
605 |
} |
87b8bd5ae Fix return values... |
606 |
return 1; |
c609719b8 Initial revision |
607 |
} |
700a0c648 Add common (with ... |
608 |
/***************************************************/ |
0d4983930 Patch by Kenneth ... |
609 610 |
U_BOOT_CMD( fsload, 3, 0, do_jffs2_fsload, |
2fb2604d5 Command usage cle... |
611 |
"load binary file from a filesystem image", |
8bde7f776 * Code cleanup: |
612 613 614 615 |
"[ off ] [ filename ] " " - load binary file from flash bank " |
a89c33db9 General help mess... |
616 |
" with offset 'off'" |
8bde7f776 * Code cleanup: |
617 |
); |
700a0c648 Add common (with ... |
618 |
U_BOOT_CMD( |
314f6362c cmd: jffs2: Renam... |
619 |
fsls, 2, 1, do_jffs2_ls, |
2fb2604d5 Command usage cle... |
620 |
"list files in a directory (default /)", |
a89c33db9 General help mess... |
621 |
"[ directory ]" |
700a0c648 Add common (with ... |
622 |
); |
8bde7f776 * Code cleanup: |
623 |
|
0d4983930 Patch by Kenneth ... |
624 625 |
U_BOOT_CMD( fsinfo, 1, 1, do_jffs2_fsinfo, |
2fb2604d5 Command usage cle... |
626 |
"print information about filesystems", |
a89c33db9 General help mess... |
627 |
"" |
8bde7f776 * Code cleanup: |
628 |
); |
700a0c648 Add common (with ... |
629 |
/***************************************************/ |