From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-bw0-f212.google.com ([209.85.218.212]) by bombadil.infradead.org with esmtp (Exim 4.69 #1 (Red Hat Linux)) id 1NFqE0-0003qC-9G for linux-mtd@lists.infradead.org; Wed, 02 Dec 2009 14:30:41 +0000 Received: by bwz4 with SMTP id 4so221120bwz.2 for ; Wed, 02 Dec 2009 06:30:35 -0800 (PST) MIME-Version: 1.0 From: Vimal Singh Date: Wed, 2 Dec 2009 20:00:14 +0530 Message-ID: Subject: [RFC] [PATCH] [MTD-UTILS]: flash_unlock: enhancing for unlocking of specified number of blocks To: Linux MTD Content-Type: text/plain; charset=ISO-8859-1 List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , This patch enhances the flash_unlock utility to be able to do unlocking for specified blocks range. This patch also fixes calculation of 'length' as in previous patch. Say there are 240 blocks present in the device. Then: offset starts from: 0x0 and full size of device: 0x1E00000 doing: 240 * 0x20000 gives -> 0x1E00000 But last block address should be 0x1DE0000 (which spans for 0x20000 bytes, adding up to size of 0x1E00000) Signed-off-by: Vimal Singh --- --- a/flash_unlock.c 2009-11-24 19:33:18.000000000 +0530 +++ b/flash_unlock.c 2009-11-24 19:36:18.000000000 +0530 @@ -21,13 +21,14 @@ int main(int argc, char *argv[]) int fd; struct mtd_info_user mtdInfo; struct erase_info_user mtdLockInfo; + int count; /* * Parse command line options */ - if(argc != 2) + if(argc < 2) { - fprintf(stderr, "USAGE: %s \n", argv[0]); + fprintf(stderr, "USAGE: %s \n", argv[0]); exit(1); } else if(strncmp(argv[1], "/dev/mtd", 8) != 0) @@ -50,8 +51,18 @@ int main(int argc, char *argv[]) exit(1); } - mtdLockInfo.start = 0; - mtdLockInfo.length = mtdInfo.size; + if (argc > 2) + mtdLockInfo.start = strtol(argv[2], NULL, 0); + else + mtdLockInfo.start = 0; + + if (argc > 3) { + count = strtol(argv[3], NULL, 0); + mtdLockInfo.length = mtdInfo.erasesize * count; + } else { + mtdLockInfo.length = mtdInfo.size - mtdInfo.erasesize; + } + if(ioctl(fd, MEMUNLOCK, &mtdLockInfo)) { fprintf(stderr, "Could not unlock MTD device: %s\n", argv[1]); @@ -61,4 +72,3 @@ int main(int argc, char *argv[]) return 0; } -