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));