From 056a695c15e83f4a85305482fadea67f76fb7528 Mon Sep 17 00:00:00 2001 From: Sascha Hauer Date: Mon, 16 Jul 2007 10:29:28 +0200 Subject: implement flash protection --- commands/flash.c | 63 ++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 47 insertions(+), 16 deletions(-) (limited to 'commands/flash.c') 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 + -- cgit v1.2.3