From 4f8894887d1e3569817a0f1972616bee83c43982 Mon Sep 17 00:00:00 2001 From: nbd Date: Sun, 19 Aug 2007 21:53:44 +0000 Subject: [PATCH] add 'mtd refresh' command git-svn-id: svn://svn.openwrt.org/openwrt/trunk@8439 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- package/mtd/src/mtd.c | 33 ++++++++++++++++++++++++++++++++- package/mtd/src/mtd.h | 1 + 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/package/mtd/src/mtd.c b/package/mtd/src/mtd.c index 9025240e1..85b069f81 100644 --- a/package/mtd/src/mtd.c +++ b/package/mtd/src/mtd.c @@ -241,6 +241,25 @@ mtd_erase(const char *mtd) } +int +mtd_refresh(const char *mtd) +{ + int fd; + + fd = mtd_open(mtd, O_RDWR | O_SYNC); + if(fd < 0) { + fprintf(stderr, "Could not open mtd device: %s\n", mtd); + exit(1); + } + if (ioctl(fd, MTDREFRESH, NULL)) { + fprintf(stderr, "Failed to refresh the MTD device\n"); + close(fd); + exit(1); + } + close(fd); + return 0; +} + int mtd_write(int imagefd, const char *mtd) { @@ -318,6 +337,7 @@ void usage(void) "The device is in the format of mtdX (eg: mtd4) or its label.\n" "mtd recognizes these commands:\n" " unlock unlock the device\n" + " refresh refresh mtd partition\n" " erase erase all data on device\n" " write |- write (use - for stdin) to device\n" "Following options are available:\n" @@ -338,7 +358,8 @@ int main (int argc, char **argv) enum { CMD_ERASE, CMD_WRITE, - CMD_UNLOCK + CMD_UNLOCK, + CMD_REFRESH } cmd; erase[0] = NULL; @@ -380,6 +401,9 @@ int main (int argc, char **argv) if ((strcmp(argv[0], "unlock") == 0) && (argc == 2)) { cmd = CMD_UNLOCK; device = argv[1]; + } else if ((strcmp(argv[0], "refresh") == 0) && (argc == 2)) { + cmd = CMD_REFRESH; + device = argv[1]; } else if ((strcmp(argv[0], "erase") == 0) && (argc == 2)) { cmd = CMD_ERASE; device = argv[1]; @@ -451,6 +475,13 @@ int main (int argc, char **argv) if (quiet < 2) fprintf(stderr, "\n"); break; + case CMD_REFRESH: + if (quiet < 2) + fprintf(stderr, "Refreshing mtd partition %s ... "); + mtd_refresh(device); + if (quiet < 2) + fprintf(stderr, "\n"); + break; } sync(); diff --git a/package/mtd/src/mtd.h b/package/mtd/src/mtd.h index 8b83afd57..6ce62611e 100644 --- a/package/mtd/src/mtd.h +++ b/package/mtd/src/mtd.h @@ -96,6 +96,7 @@ struct region_info_user { #define MEMGETREGIONINFO _IOWR('M', 8, struct region_info_user) #define MEMREADDATA _IOWR('M', 9, struct mtd_oob_buf) #define MEMWRITEDATA _IOWR('M', 10, struct mtd_oob_buf) +#define MTDREFRESH _IO('M', 23) #ifndef __KERNEL__