mirror of
				https://source.denx.de/u-boot/u-boot.git
				synced 2025-10-25 22:41:21 +02:00 
			
		
		
		
	This patch updates the yaffs2 in u-boot to correspond to git://www.aleph1.co.uk/yaffs2 commit id 9ee5d0643e559568dbe62215f76e0a7bd5a63d93 Signed-off-by: Charles Manning <cdhmanning@gmail.com>
		
			
				
	
	
		
			327 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			327 lines
		
	
	
		
			7.1 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* Yaffs commands.
 | |
|  * Modified by Charles Manning by adding ydevconfig command.
 | |
|  *
 | |
|  * Use ydevconfig to configure a mountpoint before use.
 | |
|  * For example:
 | |
|  *  # Configure mountpt xxx using nand device 0 using blocks 100-500
 | |
|  *  ydevconfig xxx 0 100 500
 | |
|  *  # Mount it
 | |
|  *  ymount xxx
 | |
|  *  # yls, yrdm etc
 | |
|  *  yls -l xxx
 | |
|  *  yrdm xxx/boot-image 82000000
 | |
|  *  ...
 | |
|  */
 | |
| 
 | |
| #include <common.h>
 | |
| 
 | |
| #include <config.h>
 | |
| #include <command.h>
 | |
| 
 | |
| #ifdef YAFFS2_DEBUG
 | |
| #define PRINTF(fmt, args...) printf(fmt, ##args)
 | |
| #else
 | |
| #define PRINTF(fmt, args...) do { } while (0)
 | |
| #endif
 | |
| 
 | |
| extern void cmd_yaffs_dev_ls(void);
 | |
| extern void cmd_yaffs_tracemask(unsigned set, unsigned mask);
 | |
| extern void cmd_yaffs_devconfig(char *mp, int flash_dev,
 | |
| 				int start_block, int end_block);
 | |
| extern void cmd_yaffs_mount(char *mp);
 | |
| extern void cmd_yaffs_umount(char *mp);
 | |
| extern void cmd_yaffs_read_file(char *fn);
 | |
| extern void cmd_yaffs_write_file(char *fn, char bval, int sizeOfFile);
 | |
| extern void cmd_yaffs_ls(const char *mountpt, int longlist);
 | |
| extern void cmd_yaffs_mwrite_file(char *fn, char *addr, int size);
 | |
| extern void cmd_yaffs_mread_file(char *fn, char *addr);
 | |
| extern void cmd_yaffs_mkdir(const char *dir);
 | |
| extern void cmd_yaffs_rmdir(const char *dir);
 | |
| extern void cmd_yaffs_rm(const char *path);
 | |
| extern void cmd_yaffs_mv(const char *oldPath, const char *newPath);
 | |
| 
 | |
| extern int yaffs_dump_dev(const char *path);
 | |
| 
 | |
| /* ytrace - show/set yaffs trace mask */
 | |
| int do_ytrace(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
 | |
| {
 | |
| 	if (argc > 1)
 | |
| 		cmd_yaffs_tracemask(1, simple_strtol(argv[1], NULL, 16));
 | |
| 	else
 | |
| 		cmd_yaffs_tracemask(0, 0);
 | |
| 
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| /* ydevls - lists yaffs mount points. */
 | |
| int do_ydevls(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
 | |
| {
 | |
| 	cmd_yaffs_dev_ls();
 | |
| 
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| /* ydevconfig mount_pt mtd_dev_num start_block end_block */
 | |
| int do_ydevconfig(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
 | |
| {
 | |
| 	char *mtpoint;
 | |
| 	int mtd_dev;
 | |
| 	int start_block;
 | |
| 	int end_block;
 | |
| 
 | |
| 	if (argc != 5) {
 | |
| 		printf
 | |
| 		    ("Bad arguments: ydevconfig mount_pt mtd_dev start_block end_block\n");
 | |
| 		return -1;
 | |
| 	}
 | |
| 
 | |
| 	mtpoint = argv[1];
 | |
| 	mtd_dev = simple_strtol(argv[2], NULL, 16);
 | |
| 	start_block = simple_strtol(argv[3], NULL, 16);
 | |
| 	end_block = simple_strtol(argv[4], NULL, 16);
 | |
| 
 | |
| 	cmd_yaffs_devconfig(mtpoint, mtd_dev, start_block, end_block);
 | |
| 
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| int do_ymount(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
 | |
| {
 | |
| 	char *mtpoint;
 | |
| 
 | |
| 	if (argc != 2) {
 | |
| 		printf("Bad arguments: ymount mount_pt\n");
 | |
| 		return -1;
 | |
| 	}
 | |
| 
 | |
| 	mtpoint = argv[1];
 | |
| 	printf("Mounting yaffs2 mount point %s\n", mtpoint);
 | |
| 
 | |
| 	cmd_yaffs_mount(mtpoint);
 | |
| 
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| int do_yumount(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
 | |
| {
 | |
| 	char *mtpoint;
 | |
| 
 | |
| 	if (argc != 2) {
 | |
| 		printf("Bad arguments: yumount mount_pt\n");
 | |
| 		return -1;
 | |
| 	}
 | |
| 
 | |
| 	mtpoint = argv[1];
 | |
| 	printf("Unmounting yaffs2 mount point %s\n", mtpoint);
 | |
| 	cmd_yaffs_umount(mtpoint);
 | |
| 
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| int do_yls(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
 | |
| {
 | |
| 	char *dirname;
 | |
| 
 | |
| 	if (argc < 2 || argc > 3 || (argc == 3 && strcmp(argv[1], "-l"))) {
 | |
| 		printf("Bad arguments: yls [-l] dir\n");
 | |
| 		return -1;
 | |
| 	}
 | |
| 
 | |
| 	dirname = argv[argc - 1];
 | |
| 
 | |
| 	cmd_yaffs_ls(dirname, (argc > 2) ? 1 : 0);
 | |
| 
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| int do_yrd(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
 | |
| {
 | |
| 	char *filename;
 | |
| 
 | |
| 	if (argc != 2) {
 | |
| 		printf("Bad arguments: yrd file_name\n");
 | |
| 		return -1;
 | |
| 	}
 | |
| 
 | |
| 	filename = argv[1];
 | |
| 
 | |
| 	printf("Reading file %s ", filename);
 | |
| 
 | |
| 	cmd_yaffs_read_file(filename);
 | |
| 
 | |
| 	printf("done\n");
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| int do_ywr(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
 | |
| {
 | |
| 	char *filename;
 | |
| 	ulong value;
 | |
| 	ulong numValues;
 | |
| 
 | |
| 	if (argc != 4) {
 | |
| 		printf("Bad arguments: ywr file_name value n_values\n");
 | |
| 		return -1;
 | |
| 	}
 | |
| 
 | |
| 	filename = argv[1];
 | |
| 	value = simple_strtoul(argv[2], NULL, 16);
 | |
| 	numValues = simple_strtoul(argv[3], NULL, 16);
 | |
| 
 | |
| 	printf("Writing value (%lx) %lx times to %s... ", value, numValues,
 | |
| 	       filename);
 | |
| 
 | |
| 	cmd_yaffs_write_file(filename, value, numValues);
 | |
| 
 | |
| 	printf("done\n");
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| int do_yrdm(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
 | |
| {
 | |
| 	char *filename;
 | |
| 	ulong addr;
 | |
| 
 | |
| 	if (argc != 3) {
 | |
| 		printf("Bad arguments: yrdm file_name addr\n");
 | |
| 		return -1;
 | |
| 	}
 | |
| 
 | |
| 	filename = argv[1];
 | |
| 	addr = simple_strtoul(argv[2], NULL, 16);
 | |
| 
 | |
| 	cmd_yaffs_mread_file(filename, (char *)addr);
 | |
| 
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| int do_ywrm(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
 | |
| {
 | |
| 	char *filename;
 | |
| 	ulong addr;
 | |
| 	ulong size;
 | |
| 
 | |
| 	if (argc != 4) {
 | |
| 		printf("Bad arguments: ywrm file_name addr size\n");
 | |
| 		return -1;
 | |
| 	}
 | |
| 
 | |
| 	filename = argv[1];
 | |
| 	addr = simple_strtoul(argv[2], NULL, 16);
 | |
| 	size = simple_strtoul(argv[3], NULL, 16);
 | |
| 
 | |
| 	cmd_yaffs_mwrite_file(filename, (char *)addr, size);
 | |
| 
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| int do_ymkdir(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
 | |
| {
 | |
| 	char *dirname;
 | |
| 
 | |
| 	if (argc != 2) {
 | |
| 		printf("Bad arguments: ymkdir dir_name\n");
 | |
| 		return -1;
 | |
| 	}
 | |
| 
 | |
| 	dirname = argv[1];
 | |
| 	cmd_yaffs_mkdir(dirname);
 | |
| 
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| int do_yrmdir(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
 | |
| {
 | |
| 	char *dirname;
 | |
| 
 | |
| 	if (argc != 2) {
 | |
| 		printf("Bad arguments: yrmdir dir_name\n");
 | |
| 		return -1;
 | |
| 	}
 | |
| 
 | |
| 	dirname = argv[1];
 | |
| 	cmd_yaffs_rmdir(dirname);
 | |
| 
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| int do_yrm(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
 | |
| {
 | |
| 	char *name;
 | |
| 
 | |
| 	if (argc != 2) {
 | |
| 		printf("Bad arguments: yrm name\n");
 | |
| 		return -1;
 | |
| 	}
 | |
| 
 | |
| 	name = argv[1];
 | |
| 
 | |
| 	cmd_yaffs_rm(name);
 | |
| 
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| int do_ymv(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
 | |
| {
 | |
| 	char *oldPath;
 | |
| 	char *newPath;
 | |
| 
 | |
| 	if (argc != 3) {
 | |
| 		printf("Bad arguments: ymv old_path new_path\n");
 | |
| 		return -1;
 | |
| 	}
 | |
| 
 | |
| 	oldPath = argv[1];
 | |
| 	newPath = argv[2];
 | |
| 
 | |
| 	cmd_yaffs_mv(newPath, oldPath);
 | |
| 
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| U_BOOT_CMD(ytrace, 2, 0, do_ytrace,
 | |
| 	   "show/set yaffs trace mask",
 | |
| 	   "ytrace [new_mask]  show/set yaffs trace mask");
 | |
| 
 | |
| U_BOOT_CMD(ydevls, 1, 0, do_ydevls,
 | |
| 	   "list yaffs mount points", "list yaffs mount points");
 | |
| 
 | |
| U_BOOT_CMD(ydevconfig, 5, 0, do_ydevconfig,
 | |
| 	   "configure yaffs mount point",
 | |
| 	   "ydevconfig mtpoint mtd_id start_block end_block   configures a yaffs2 mount point");
 | |
| 
 | |
| U_BOOT_CMD(ymount, 2, 0, do_ymount,
 | |
| 	   "mount yaffs", "ymount mtpoint  mounts a yaffs2 mount point");
 | |
| 
 | |
| U_BOOT_CMD(yumount, 2, 0, do_yumount,
 | |
| 	   "unmount yaffs", "yunmount mtpoint  unmounts a yaffs2 mount point");
 | |
| 
 | |
| U_BOOT_CMD(yls, 3, 0, do_yls, "yaffs ls", "yls [-l] dirname");
 | |
| 
 | |
| U_BOOT_CMD(yrd, 2, 0, do_yrd,
 | |
| 	   "read file from yaffs", "yrd path   read file from yaffs");
 | |
| 
 | |
| U_BOOT_CMD(ywr, 4, 0, do_ywr,
 | |
| 	   "write file to yaffs",
 | |
| 	   "ywr filename value num_vlues   write values to yaffs file");
 | |
| 
 | |
| U_BOOT_CMD(yrdm, 3, 0, do_yrdm,
 | |
| 	   "read file to memory from yaffs",
 | |
| 	   "yrdm filename offset    reads yaffs file into memory");
 | |
| 
 | |
| U_BOOT_CMD(ywrm, 4, 0, do_ywrm,
 | |
| 	   "write file from memory to yaffs",
 | |
| 	   "ywrm filename offset size  writes memory to yaffs file");
 | |
| 
 | |
| U_BOOT_CMD(ymkdir, 2, 0, do_ymkdir,
 | |
| 	   "YAFFS mkdir", "ymkdir dir    create a yaffs directory");
 | |
| 
 | |
| U_BOOT_CMD(yrmdir, 2, 0, do_yrmdir,
 | |
| 	   "YAFFS rmdir", "yrmdir dirname   removes a yaffs directory");
 | |
| 
 | |
| U_BOOT_CMD(yrm, 2, 0, do_yrm, "YAFFS rm", "yrm path   removes a yaffs file");
 | |
| 
 | |
| U_BOOT_CMD(ymv, 4, 0, do_ymv,
 | |
| 	   "YAFFS mv",
 | |
| 	   "ymv old_path new_path   moves/rename files within a yaffs mount point");
 |