Mercurial > flash_v2
comparison packages/redboot/current/src/flash.c @ 1278:eaf1a693566b
Print FIS directory in sorted order
| author | gthomas |
|---|---|
| date | Mon, 06 Oct 2003 15:42:05 +0000 |
| parents | 205922255412 |
| children | 5e8ec925adf2 |
comparison
equal
deleted
inserted
replaced
| 1277:c2347f41e29f | 1278:eaf1a693566b |
|---|---|
| 437 | 437 |
| 438 static void | 438 static void |
| 439 fis_list(int argc, char *argv[]) | 439 fis_list(int argc, char *argv[]) |
| 440 { | 440 { |
| 441 struct fis_image_desc *img; | 441 struct fis_image_desc *img; |
| 442 int i; | 442 int i, image_indx; |
| 443 bool show_cksums = false; | 443 bool show_cksums = false; |
| 444 bool show_datalen = false; | 444 bool show_datalen = false; |
| 445 struct option_info opts[2]; | 445 struct option_info opts[2]; |
| 446 void *err_addr; | 446 void *err_addr; |
| 447 unsigned long last_addr, lowest_addr; | |
| 448 bool image_found; | |
| 447 | 449 |
| 448 #ifdef CYGHWR_REDBOOT_ARM_FLASH_SIB | 450 #ifdef CYGHWR_REDBOOT_ARM_FLASH_SIB |
| 449 // FIXME: this is somewhat half-baked | 451 // FIXME: this is somewhat half-baked |
| 450 extern void arm_fis_list(void); | 452 extern void arm_fis_list(void); |
| 451 arm_fis_list(); | 453 arm_fis_list(); |
| 464 if (!scan_opts(argc, argv, 2, opts, i, 0, 0, "")) | 466 if (!scan_opts(argc, argv, 2, opts, i, 0, 0, "")) |
| 465 { | 467 { |
| 466 return; | 468 return; |
| 467 } | 469 } |
| 468 flash_read(fis_addr, fis_work_block, fisdir_size, (void **)&err_addr); | 470 flash_read(fis_addr, fis_work_block, fisdir_size, (void **)&err_addr); |
| 469 img = (struct fis_image_desc *) fis_work_block; | |
| 470 // Let diag_printf do the formatting in both cases, rather than counting | 471 // Let diag_printf do the formatting in both cases, rather than counting |
| 471 // cols by hand.... | 472 // cols by hand.... |
| 472 diag_printf("%-16s %-10s %-10s %-10s %-s\n", | 473 diag_printf("%-16s %-10s %-10s %-10s %-s\n", |
| 473 "Name","FLASH addr", | 474 "Name","FLASH addr", |
| 474 show_cksums ? "Checksum" : "Mem addr", | 475 show_cksums ? "Checksum" : "Mem addr", |
| 475 show_datalen ? "Datalen" : "Length", | 476 show_datalen ? "Datalen" : "Length", |
| 476 "Entry point" ); | 477 "Entry point" ); |
| 477 for (i = 0; i < fisdir_size/sizeof(*img); i++, img++) { | 478 last_addr = 0; |
| 478 if (img->name[0] != (unsigned char)0xFF) { | 479 image_indx = 0; |
| 480 do { | |
| 481 image_found = false; | |
| 482 lowest_addr = 0xFFFFFFFF; | |
| 483 img = (struct fis_image_desc *) fis_work_block; | |
| 484 for (i = 0; i < fisdir_size/sizeof(*img); i++, img++) { | |
| 485 if (img->name[0] != (unsigned char)0xFF) { | |
| 486 if ((img->flash_base > last_addr) && (img->flash_base < lowest_addr)) { | |
| 487 lowest_addr = img->flash_base; | |
| 488 image_found = true; | |
| 489 image_indx = i; | |
| 490 } | |
| 491 } | |
| 492 } | |
| 493 if (image_found) { | |
| 494 img = (struct fis_image_desc *) fis_work_block; | |
| 495 img += image_indx; | |
| 479 diag_printf("%-16s 0x%08lX 0x%08lX 0x%08lX 0x%08lX\n", img->name, | 496 diag_printf("%-16s 0x%08lX 0x%08lX 0x%08lX 0x%08lX\n", img->name, |
| 480 img->flash_base, | 497 img->flash_base, |
| 481 #ifdef CYGSEM_REDBOOT_FIS_CRC_CHECK | 498 #ifdef CYGSEM_REDBOOT_FIS_CRC_CHECK |
| 482 show_cksums ? img->file_cksum : img->mem_base, | 499 show_cksums ? img->file_cksum : img->mem_base, |
| 483 show_datalen ? img->data_length : img->size, | 500 show_datalen ? img->data_length : img->size, |
| 485 img->mem_base, | 502 img->mem_base, |
| 486 img->size, | 503 img->size, |
| 487 #endif | 504 #endif |
| 488 img->entry_point); | 505 img->entry_point); |
| 489 } | 506 } |
| 490 } | 507 last_addr = lowest_addr; |
| 508 } while (image_found == true); | |
| 491 } | 509 } |
| 492 | 510 |
| 493 static void | 511 static void |
| 494 fis_free(int argc, char *argv[]) | 512 fis_free(int argc, char *argv[]) |
| 495 { | 513 { |
