summaryrefslogtreecommitdiffstats
path: root/commands/flash.c
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2007-07-16 10:29:28 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2007-07-16 10:29:28 +0200
commit056a695c15e83f4a85305482fadea67f76fb7528 (patch)
tree9d94794fa65bab3f8787605a2e3cf3ca4466b72f /commands/flash.c
parentbe6790838d92ebe130f8b66637cef72e40a7b704 (diff)
downloadbarebox-056a695c15e83f4a85305482fadea67f76fb7528.tar.gz
barebox-056a695c15e83f4a85305482fadea67f76fb7528.tar.xz
implement flash protection
Diffstat (limited to 'commands/flash.c')
-rw-r--r--commands/flash.c63
1 files changed, 47 insertions, 16 deletions
diff --git a/commands/flash.c b/commands/flash.c
index 1aa00187e1..68b85495aa 100644
--- a/commands/flash.c
+++ b/commands/flash.c
@@ -90,36 +90,67 @@ U_BOOT_CMD_END
int do_protect (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{
- int p;
- int rcode = 0;
- struct memarea_info mem_info;
+ int opt, fd;
+ char *filename = NULL;
+ struct stat s;
+ int prot = 1;
+ unsigned long start = 0, size = ~0;
+
+ getopt_reset();
+
+ while((opt = getopt(argc, argv, "f:")) > 0) {
+ switch(opt) {
+ case 'f':
+ filename = optarg;
+ break;
+ }
+ }
+
+ if (*argv[0] == 'u')
+ prot = 0;
- if (argc < 3) {
- printf ("Usage:\n%s\n", cmdtp->usage);
+ if (stat(filename, &s)) {
+ printf("stat %s: %s\n", filename, errno_str());
return 1;
}
- if (strcmp(argv[1], "off") == 0) {
- p = 0;
- } else if (strcmp(argv[1], "on") == 0) {
- p = 1;
- } else {
- printf ("Usage:\n%s\n", cmdtp->usage);
+ size = s.st_size;
+
+ if (!filename) {
+ printf("missing filename\n");
+ return 1;
+ }
+
+ fd = open(filename, O_WRONLY);
+ if (fd < 0) {
+ printf("open %s:", filename, errno_str());
return 1;
}
- if (spec_str_to_info(argv[2], &mem_info)) {
- printf ("-EPARSE\n");
+ if (optind < argc)
+ parse_area_spec(argv[optind], &start, &size);
+
+ if(protect(fd, size, start, prot)) {
+ perror("protect");
return 1;
}
-// rcode = flash_sect_protect (p, addr_first, addr_last);
- return rcode;
+ close(fd);
+
+ return 0;
}
U_BOOT_CMD_START(protect)
.maxargs = 4,
.cmd = do_protect,
- .usage = "enable or disable FLASH write protection",
+ .usage = "enable FLASH write protection",
U_BOOT_CMD_HELP("write me\n")
U_BOOT_CMD_END
+
+U_BOOT_CMD_START(unprotect)
+ .maxargs = 4,
+ .cmd = do_protect,
+ .usage = "disable FLASH write protection",
+ U_BOOT_CMD_HELP("write me\n")
+U_BOOT_CMD_END
+