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 {