Mercurial > flash_v2
comparison packages/redboot/current/src/flash.c @ 119:77cec8369160 ecos-sw-2000-09-01
Merge from eCos master repository on 2000-09-01-07:47:03-BST
| author | jlarmour |
|---|---|
| date | Fri, 01 Sep 2000 13:45:23 +0000 |
| parents | bd1a71e3e476 |
| children | 6bd9d475ed4b |
comparison
equal
deleted
inserted
replaced
| 118:59c1a83fb200 | 119:77cec8369160 |
|---|---|
| 94 "Erase FLASH contents", | 94 "Erase FLASH contents", |
| 95 "-f <flash_addr> -l <length>", | 95 "-f <flash_addr> -l <length>", |
| 96 fis_erase, | 96 fis_erase, |
| 97 FIS_cmds | 97 FIS_cmds |
| 98 ); | 98 ); |
| 99 #ifdef CYGHWR_IO_FLASH_BLOCK_LOCKING | |
| 100 local_cmd_entry("lock", | |
| 101 "LOCK FLASH contents", | |
| 102 "-f <flash_addr> -l <length>", | |
| 103 fis_lock, | |
| 104 FIS_cmds | |
| 105 ); | |
| 106 local_cmd_entry("unlock", | |
| 107 "UNLOCK FLASH contents", | |
| 108 "-f <flash_addr> -l <length>", | |
| 109 fis_unlock, | |
| 110 FIS_cmds | |
| 111 ); | |
| 112 #endif | |
| 99 local_cmd_entry("delete", | 113 local_cmd_entry("delete", |
| 100 "Display an image from FLASH Image System [FIS]", | 114 "Display an image from FLASH Image System [FIS]", |
| 101 "name", | 115 "name", |
| 102 fis_delete, | 116 fis_delete, |
| 103 FIS_cmds | 117 FIS_cmds |
| 467 if ((stat = flash_erase((void *)flash_addr, length, (void **)&err_addr)) != 0) { | 481 if ((stat = flash_erase((void *)flash_addr, length, (void **)&err_addr)) != 0) { |
| 468 printf("Error erasing at %p: %x(%s)\n", err_addr, stat, flash_errmsg(stat)); | 482 printf("Error erasing at %p: %x(%s)\n", err_addr, stat, flash_errmsg(stat)); |
| 469 } | 483 } |
| 470 } | 484 } |
| 471 | 485 |
| 486 #ifdef CYGHWR_IO_FLASH_BLOCK_LOCKING | |
| 487 | |
| 488 static void | |
| 489 fis_lock(int argc, char *argv[]) | |
| 490 { | |
| 491 int stat; | |
| 492 unsigned long flash_addr, length; | |
| 493 bool flash_addr_set = false; | |
| 494 bool length_set = false; | |
| 495 void *err_addr; | |
| 496 struct option_info opts[2]; | |
| 497 | |
| 498 init_opts(&opts[0], 'f', true, OPTION_ARG_TYPE_NUM, | |
| 499 (void **)&flash_addr, (bool *)&flash_addr_set, "FLASH memory base address"); | |
| 500 init_opts(&opts[1], 'l', true, OPTION_ARG_TYPE_NUM, | |
| 501 (void **)&length, (bool *)&length_set, "length"); | |
| 502 if (!scan_opts(argc, argv, 2, opts, 2, (void **)0, 0, "")) | |
| 503 { | |
| 504 fis_usage("invalid arguments"); | |
| 505 return; | |
| 506 } | |
| 507 | |
| 508 if (!flash_addr_set || !length_set) { | |
| 509 fis_usage("missing argument"); | |
| 510 return; | |
| 511 } | |
| 512 if (flash_addr_set && | |
| 513 ((stat = flash_verify_addr((void *)flash_addr)) || | |
| 514 (stat = flash_verify_addr((void *)(flash_addr+length-1))))) { | |
| 515 printf("Invalid FLASH address: %p (%s)\n", (void *)flash_addr, flash_errmsg(stat)); | |
| 516 printf(" valid range is %p-%p\n", (void *)flash_start, (void *)flash_end); | |
| 517 return; | |
| 518 } | |
| 519 if ((stat = flash_lock((void *)flash_addr, length, (void **)&err_addr)) != 0) { | |
| 520 printf("Error locking at %p: %x(%s)\n", err_addr, stat, flash_errmsg(stat)); | |
| 521 } | |
| 522 } | |
| 523 | |
| 524 static void | |
| 525 fis_unlock(int argc, char *argv[]) | |
| 526 { | |
| 527 int stat; | |
| 528 unsigned long flash_addr, length; | |
| 529 bool flash_addr_set = false; | |
| 530 bool length_set = false; | |
| 531 void *err_addr; | |
| 532 struct option_info opts[2]; | |
| 533 | |
| 534 init_opts(&opts[0], 'f', true, OPTION_ARG_TYPE_NUM, | |
| 535 (void **)&flash_addr, (bool *)&flash_addr_set, "FLASH memory base address"); | |
| 536 init_opts(&opts[1], 'l', true, OPTION_ARG_TYPE_NUM, | |
| 537 (void **)&length, (bool *)&length_set, "length"); | |
| 538 if (!scan_opts(argc, argv, 2, opts, 2, (void **)0, 0, "")) | |
| 539 { | |
| 540 fis_usage("invalid arguments"); | |
| 541 return; | |
| 542 } | |
| 543 | |
| 544 if (!flash_addr_set || !length_set) { | |
| 545 fis_usage("missing argument"); | |
| 546 return; | |
| 547 } | |
| 548 if (flash_addr_set && | |
| 549 ((stat = flash_verify_addr((void *)flash_addr)) || | |
| 550 (stat = flash_verify_addr((void *)(flash_addr+length-1))))) { | |
| 551 printf("Invalid FLASH address: %p (%s)\n", (void *)flash_addr, flash_errmsg(stat)); | |
| 552 printf(" valid range is %p-%p\n", (void *)flash_start, (void *)flash_end); | |
| 553 return; | |
| 554 } | |
| 555 if ((stat = flash_unlock((void *)flash_addr, length, (void **)&err_addr)) != 0) { | |
| 556 printf("Error unlocking at %p: %x(%s)\n", err_addr, stat, flash_errmsg(stat)); | |
| 557 } | |
| 558 } | |
| 559 #endif | |
| 560 | |
| 472 static void | 561 static void |
| 473 fis_delete(int argc, char *argv[]) | 562 fis_delete(int argc, char *argv[]) |
| 474 { | 563 { |
| 475 char *name; | 564 char *name; |
| 476 int i, stat; | 565 int i, stat; |
| 501 } | 590 } |
| 502 if (!slot_found) { | 591 if (!slot_found) { |
| 503 printf("No image '%s' found\n", name); | 592 printf("No image '%s' found\n", name); |
| 504 return; | 593 return; |
| 505 } | 594 } |
| 506 // Erase data blocks (free space) | 595 // Erase Data blocks (free space) |
| 507 if ((stat = flash_erase((void *)img->flash_base, img->size, (void **)&err_addr)) != 0) { | 596 if ((stat = flash_erase((void *)img->flash_base, img->size, (void **)&err_addr)) != 0) { |
| 508 printf("Error erasing at %p: %x(%s)\n", err_addr, stat, flash_errmsg(stat)); | 597 printf("Error erasing at %p: %x(%s)\n", err_addr, stat, flash_errmsg(stat)); |
| 509 } | 598 } |
| 510 // Update directory | 599 // Update directory |
| 511 memset(img, 0xFF, sizeof(*img)); | 600 memset(img, 0xFF, sizeof(*img)); |
