/*
 * FILE flash_unlock.c
 *
 * This utility unlock all sectors of flash device.
 *
 */

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <time.h>
#include <sys/ioctl.h>
#include <sys/mount.h>
#include <string.h>

#include <mtd/mtd-user.h>

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)
	{
		fprintf(stderr, "USAGE: %s <mtd device> <offset in hex> <block count in decimal number>\n", argv[0]);
		exit(1);
	}
	else if(strncmp(argv[1], "/dev/mtd", 8) != 0)
	{
		fprintf(stderr, "'%s' is not a MTD device.  Must specify mtd device: /dev/mtd?\n", argv[1]);
		exit(1);
	}

	fd = open(argv[1], O_RDWR);
	if(fd < 0)
	{
		fprintf(stderr, "Could not open mtd device: %s\n", argv[1]);
		exit(1);
	}

	if(ioctl(fd, MEMGETINFO, &mtdInfo))
	{
		fprintf(stderr, "Could not get MTD device info from %s\n", argv[1]);
		close(fd);
		exit(1);
	}

	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]);
		close(fd);
		exit(1);
	}

	return 0;
}
