diff options
| -rw-r--r-- | package/mtd/src/mtd.c | 33 | ||||
| -rw-r--r-- | package/mtd/src/mtd.h | 1 | 
2 files changed, 33 insertions, 1 deletions
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 @@ -242,6 +242,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)  {  	int fd, i, result; @@ -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 <imagefile>|-     write <imagefile> (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__  | 
