xref: /OK3568_Linux_fs/u-boot/cmd/yaffs2.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* Yaffs commands.
2*4882a593Smuzhiyun  * Modified by Charles Manning by adding ydevconfig command.
3*4882a593Smuzhiyun  *
4*4882a593Smuzhiyun  * Use ydevconfig to configure a mountpoint before use.
5*4882a593Smuzhiyun  * For example:
6*4882a593Smuzhiyun  *  # Configure mountpt xxx using nand device 0 using blocks 100-500
7*4882a593Smuzhiyun  *  ydevconfig xxx 0 100 500
8*4882a593Smuzhiyun  *  # Mount it
9*4882a593Smuzhiyun  *  ymount xxx
10*4882a593Smuzhiyun  *  # yls, yrdm etc
11*4882a593Smuzhiyun  *  yls -l xxx
12*4882a593Smuzhiyun  *  yrdm xxx/boot-image 82000000
13*4882a593Smuzhiyun  *  ...
14*4882a593Smuzhiyun  */
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun #include <common.h>
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun #include <config.h>
19*4882a593Smuzhiyun #include <command.h>
20*4882a593Smuzhiyun 
21*4882a593Smuzhiyun #ifdef YAFFS2_DEBUG
22*4882a593Smuzhiyun #define PRINTF(fmt, args...) printf(fmt, ##args)
23*4882a593Smuzhiyun #else
24*4882a593Smuzhiyun #define PRINTF(fmt, args...) do { } while (0)
25*4882a593Smuzhiyun #endif
26*4882a593Smuzhiyun 
27*4882a593Smuzhiyun extern void cmd_yaffs_dev_ls(void);
28*4882a593Smuzhiyun extern void cmd_yaffs_tracemask(unsigned set, unsigned mask);
29*4882a593Smuzhiyun extern void cmd_yaffs_devconfig(char *mp, int flash_dev,
30*4882a593Smuzhiyun 				int start_block, int end_block);
31*4882a593Smuzhiyun extern void cmd_yaffs_mount(char *mp);
32*4882a593Smuzhiyun extern void cmd_yaffs_umount(char *mp);
33*4882a593Smuzhiyun extern void cmd_yaffs_read_file(char *fn);
34*4882a593Smuzhiyun extern void cmd_yaffs_write_file(char *fn, char bval, int sizeOfFile);
35*4882a593Smuzhiyun extern void cmd_yaffs_ls(const char *mountpt, int longlist);
36*4882a593Smuzhiyun extern void cmd_yaffs_mwrite_file(char *fn, char *addr, int size);
37*4882a593Smuzhiyun extern void cmd_yaffs_mread_file(char *fn, char *addr);
38*4882a593Smuzhiyun extern void cmd_yaffs_mkdir(const char *dir);
39*4882a593Smuzhiyun extern void cmd_yaffs_rmdir(const char *dir);
40*4882a593Smuzhiyun extern void cmd_yaffs_rm(const char *path);
41*4882a593Smuzhiyun extern void cmd_yaffs_mv(const char *oldPath, const char *newPath);
42*4882a593Smuzhiyun 
43*4882a593Smuzhiyun extern int yaffs_dump_dev(const char *path);
44*4882a593Smuzhiyun 
45*4882a593Smuzhiyun /* ytrace - show/set yaffs trace mask */
do_ytrace(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])46*4882a593Smuzhiyun int do_ytrace(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
47*4882a593Smuzhiyun {
48*4882a593Smuzhiyun 	if (argc > 1)
49*4882a593Smuzhiyun 		cmd_yaffs_tracemask(1, simple_strtol(argv[1], NULL, 16));
50*4882a593Smuzhiyun 	else
51*4882a593Smuzhiyun 		cmd_yaffs_tracemask(0, 0);
52*4882a593Smuzhiyun 
53*4882a593Smuzhiyun 	return 0;
54*4882a593Smuzhiyun }
55*4882a593Smuzhiyun 
56*4882a593Smuzhiyun /* ydevls - lists yaffs mount points. */
do_ydevls(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])57*4882a593Smuzhiyun int do_ydevls(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
58*4882a593Smuzhiyun {
59*4882a593Smuzhiyun 	cmd_yaffs_dev_ls();
60*4882a593Smuzhiyun 
61*4882a593Smuzhiyun 	return 0;
62*4882a593Smuzhiyun }
63*4882a593Smuzhiyun 
64*4882a593Smuzhiyun /* ydevconfig mount_pt mtd_dev_num start_block end_block */
do_ydevconfig(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])65*4882a593Smuzhiyun int do_ydevconfig(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
66*4882a593Smuzhiyun {
67*4882a593Smuzhiyun 	char *mtpoint;
68*4882a593Smuzhiyun 	int mtd_dev;
69*4882a593Smuzhiyun 	int start_block;
70*4882a593Smuzhiyun 	int end_block;
71*4882a593Smuzhiyun 
72*4882a593Smuzhiyun 	if (argc != 5) {
73*4882a593Smuzhiyun 		printf
74*4882a593Smuzhiyun 		    ("Bad arguments: ydevconfig mount_pt mtd_dev start_block end_block\n");
75*4882a593Smuzhiyun 		return -1;
76*4882a593Smuzhiyun 	}
77*4882a593Smuzhiyun 
78*4882a593Smuzhiyun 	mtpoint = argv[1];
79*4882a593Smuzhiyun 	mtd_dev = simple_strtol(argv[2], NULL, 16);
80*4882a593Smuzhiyun 	start_block = simple_strtol(argv[3], NULL, 16);
81*4882a593Smuzhiyun 	end_block = simple_strtol(argv[4], NULL, 16);
82*4882a593Smuzhiyun 
83*4882a593Smuzhiyun 	cmd_yaffs_devconfig(mtpoint, mtd_dev, start_block, end_block);
84*4882a593Smuzhiyun 
85*4882a593Smuzhiyun 	return 0;
86*4882a593Smuzhiyun }
87*4882a593Smuzhiyun 
do_ymount(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])88*4882a593Smuzhiyun int do_ymount(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
89*4882a593Smuzhiyun {
90*4882a593Smuzhiyun 	char *mtpoint;
91*4882a593Smuzhiyun 
92*4882a593Smuzhiyun 	if (argc != 2) {
93*4882a593Smuzhiyun 		printf("Bad arguments: ymount mount_pt\n");
94*4882a593Smuzhiyun 		return -1;
95*4882a593Smuzhiyun 	}
96*4882a593Smuzhiyun 
97*4882a593Smuzhiyun 	mtpoint = argv[1];
98*4882a593Smuzhiyun 	printf("Mounting yaffs2 mount point %s\n", mtpoint);
99*4882a593Smuzhiyun 
100*4882a593Smuzhiyun 	cmd_yaffs_mount(mtpoint);
101*4882a593Smuzhiyun 
102*4882a593Smuzhiyun 	return 0;
103*4882a593Smuzhiyun }
104*4882a593Smuzhiyun 
do_yumount(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])105*4882a593Smuzhiyun int do_yumount(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
106*4882a593Smuzhiyun {
107*4882a593Smuzhiyun 	char *mtpoint;
108*4882a593Smuzhiyun 
109*4882a593Smuzhiyun 	if (argc != 2) {
110*4882a593Smuzhiyun 		printf("Bad arguments: yumount mount_pt\n");
111*4882a593Smuzhiyun 		return -1;
112*4882a593Smuzhiyun 	}
113*4882a593Smuzhiyun 
114*4882a593Smuzhiyun 	mtpoint = argv[1];
115*4882a593Smuzhiyun 	printf("Unmounting yaffs2 mount point %s\n", mtpoint);
116*4882a593Smuzhiyun 	cmd_yaffs_umount(mtpoint);
117*4882a593Smuzhiyun 
118*4882a593Smuzhiyun 	return 0;
119*4882a593Smuzhiyun }
120*4882a593Smuzhiyun 
do_yls(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])121*4882a593Smuzhiyun int do_yls(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
122*4882a593Smuzhiyun {
123*4882a593Smuzhiyun 	char *dirname;
124*4882a593Smuzhiyun 
125*4882a593Smuzhiyun 	if (argc < 2 || argc > 3 || (argc == 3 && strcmp(argv[1], "-l"))) {
126*4882a593Smuzhiyun 		printf("Bad arguments: yls [-l] dir\n");
127*4882a593Smuzhiyun 		return -1;
128*4882a593Smuzhiyun 	}
129*4882a593Smuzhiyun 
130*4882a593Smuzhiyun 	dirname = argv[argc - 1];
131*4882a593Smuzhiyun 
132*4882a593Smuzhiyun 	cmd_yaffs_ls(dirname, (argc > 2) ? 1 : 0);
133*4882a593Smuzhiyun 
134*4882a593Smuzhiyun 	return 0;
135*4882a593Smuzhiyun }
136*4882a593Smuzhiyun 
do_yrd(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])137*4882a593Smuzhiyun int do_yrd(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
138*4882a593Smuzhiyun {
139*4882a593Smuzhiyun 	char *filename;
140*4882a593Smuzhiyun 
141*4882a593Smuzhiyun 	if (argc != 2) {
142*4882a593Smuzhiyun 		printf("Bad arguments: yrd file_name\n");
143*4882a593Smuzhiyun 		return -1;
144*4882a593Smuzhiyun 	}
145*4882a593Smuzhiyun 
146*4882a593Smuzhiyun 	filename = argv[1];
147*4882a593Smuzhiyun 
148*4882a593Smuzhiyun 	printf("Reading file %s ", filename);
149*4882a593Smuzhiyun 
150*4882a593Smuzhiyun 	cmd_yaffs_read_file(filename);
151*4882a593Smuzhiyun 
152*4882a593Smuzhiyun 	printf("done\n");
153*4882a593Smuzhiyun 	return 0;
154*4882a593Smuzhiyun }
155*4882a593Smuzhiyun 
do_ywr(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])156*4882a593Smuzhiyun int do_ywr(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
157*4882a593Smuzhiyun {
158*4882a593Smuzhiyun 	char *filename;
159*4882a593Smuzhiyun 	ulong value;
160*4882a593Smuzhiyun 	ulong numValues;
161*4882a593Smuzhiyun 
162*4882a593Smuzhiyun 	if (argc != 4) {
163*4882a593Smuzhiyun 		printf("Bad arguments: ywr file_name value n_values\n");
164*4882a593Smuzhiyun 		return -1;
165*4882a593Smuzhiyun 	}
166*4882a593Smuzhiyun 
167*4882a593Smuzhiyun 	filename = argv[1];
168*4882a593Smuzhiyun 	value = simple_strtoul(argv[2], NULL, 16);
169*4882a593Smuzhiyun 	numValues = simple_strtoul(argv[3], NULL, 16);
170*4882a593Smuzhiyun 
171*4882a593Smuzhiyun 	printf("Writing value (%lx) %lx times to %s... ", value, numValues,
172*4882a593Smuzhiyun 	       filename);
173*4882a593Smuzhiyun 
174*4882a593Smuzhiyun 	cmd_yaffs_write_file(filename, value, numValues);
175*4882a593Smuzhiyun 
176*4882a593Smuzhiyun 	printf("done\n");
177*4882a593Smuzhiyun 	return 0;
178*4882a593Smuzhiyun }
179*4882a593Smuzhiyun 
do_yrdm(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])180*4882a593Smuzhiyun int do_yrdm(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
181*4882a593Smuzhiyun {
182*4882a593Smuzhiyun 	char *filename;
183*4882a593Smuzhiyun 	ulong addr;
184*4882a593Smuzhiyun 
185*4882a593Smuzhiyun 	if (argc != 3) {
186*4882a593Smuzhiyun 		printf("Bad arguments: yrdm file_name addr\n");
187*4882a593Smuzhiyun 		return -1;
188*4882a593Smuzhiyun 	}
189*4882a593Smuzhiyun 
190*4882a593Smuzhiyun 	filename = argv[1];
191*4882a593Smuzhiyun 	addr = simple_strtoul(argv[2], NULL, 16);
192*4882a593Smuzhiyun 
193*4882a593Smuzhiyun 	cmd_yaffs_mread_file(filename, (char *)addr);
194*4882a593Smuzhiyun 
195*4882a593Smuzhiyun 	return 0;
196*4882a593Smuzhiyun }
197*4882a593Smuzhiyun 
do_ywrm(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])198*4882a593Smuzhiyun int do_ywrm(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
199*4882a593Smuzhiyun {
200*4882a593Smuzhiyun 	char *filename;
201*4882a593Smuzhiyun 	ulong addr;
202*4882a593Smuzhiyun 	ulong size;
203*4882a593Smuzhiyun 
204*4882a593Smuzhiyun 	if (argc != 4) {
205*4882a593Smuzhiyun 		printf("Bad arguments: ywrm file_name addr size\n");
206*4882a593Smuzhiyun 		return -1;
207*4882a593Smuzhiyun 	}
208*4882a593Smuzhiyun 
209*4882a593Smuzhiyun 	filename = argv[1];
210*4882a593Smuzhiyun 	addr = simple_strtoul(argv[2], NULL, 16);
211*4882a593Smuzhiyun 	size = simple_strtoul(argv[3], NULL, 16);
212*4882a593Smuzhiyun 
213*4882a593Smuzhiyun 	cmd_yaffs_mwrite_file(filename, (char *)addr, size);
214*4882a593Smuzhiyun 
215*4882a593Smuzhiyun 	return 0;
216*4882a593Smuzhiyun }
217*4882a593Smuzhiyun 
do_ymkdir(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])218*4882a593Smuzhiyun int do_ymkdir(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
219*4882a593Smuzhiyun {
220*4882a593Smuzhiyun 	char *dirname;
221*4882a593Smuzhiyun 
222*4882a593Smuzhiyun 	if (argc != 2) {
223*4882a593Smuzhiyun 		printf("Bad arguments: ymkdir dir_name\n");
224*4882a593Smuzhiyun 		return -1;
225*4882a593Smuzhiyun 	}
226*4882a593Smuzhiyun 
227*4882a593Smuzhiyun 	dirname = argv[1];
228*4882a593Smuzhiyun 	cmd_yaffs_mkdir(dirname);
229*4882a593Smuzhiyun 
230*4882a593Smuzhiyun 	return 0;
231*4882a593Smuzhiyun }
232*4882a593Smuzhiyun 
do_yrmdir(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])233*4882a593Smuzhiyun int do_yrmdir(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
234*4882a593Smuzhiyun {
235*4882a593Smuzhiyun 	char *dirname;
236*4882a593Smuzhiyun 
237*4882a593Smuzhiyun 	if (argc != 2) {
238*4882a593Smuzhiyun 		printf("Bad arguments: yrmdir dir_name\n");
239*4882a593Smuzhiyun 		return -1;
240*4882a593Smuzhiyun 	}
241*4882a593Smuzhiyun 
242*4882a593Smuzhiyun 	dirname = argv[1];
243*4882a593Smuzhiyun 	cmd_yaffs_rmdir(dirname);
244*4882a593Smuzhiyun 
245*4882a593Smuzhiyun 	return 0;
246*4882a593Smuzhiyun }
247*4882a593Smuzhiyun 
do_yrm(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])248*4882a593Smuzhiyun int do_yrm(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
249*4882a593Smuzhiyun {
250*4882a593Smuzhiyun 	char *name;
251*4882a593Smuzhiyun 
252*4882a593Smuzhiyun 	if (argc != 2) {
253*4882a593Smuzhiyun 		printf("Bad arguments: yrm name\n");
254*4882a593Smuzhiyun 		return -1;
255*4882a593Smuzhiyun 	}
256*4882a593Smuzhiyun 
257*4882a593Smuzhiyun 	name = argv[1];
258*4882a593Smuzhiyun 
259*4882a593Smuzhiyun 	cmd_yaffs_rm(name);
260*4882a593Smuzhiyun 
261*4882a593Smuzhiyun 	return 0;
262*4882a593Smuzhiyun }
263*4882a593Smuzhiyun 
do_ymv(cmd_tbl_t * cmdtp,int flag,int argc,char * const argv[])264*4882a593Smuzhiyun int do_ymv(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
265*4882a593Smuzhiyun {
266*4882a593Smuzhiyun 	char *oldPath;
267*4882a593Smuzhiyun 	char *newPath;
268*4882a593Smuzhiyun 
269*4882a593Smuzhiyun 	if (argc != 3) {
270*4882a593Smuzhiyun 		printf("Bad arguments: ymv old_path new_path\n");
271*4882a593Smuzhiyun 		return -1;
272*4882a593Smuzhiyun 	}
273*4882a593Smuzhiyun 
274*4882a593Smuzhiyun 	oldPath = argv[1];
275*4882a593Smuzhiyun 	newPath = argv[2];
276*4882a593Smuzhiyun 
277*4882a593Smuzhiyun 	cmd_yaffs_mv(newPath, oldPath);
278*4882a593Smuzhiyun 
279*4882a593Smuzhiyun 	return 0;
280*4882a593Smuzhiyun }
281*4882a593Smuzhiyun 
282*4882a593Smuzhiyun U_BOOT_CMD(ytrace, 2, 0, do_ytrace,
283*4882a593Smuzhiyun 	   "show/set yaffs trace mask",
284*4882a593Smuzhiyun 	   "[new_mask]  show/set yaffs trace mask");
285*4882a593Smuzhiyun 
286*4882a593Smuzhiyun U_BOOT_CMD(ydevls, 1, 0, do_ydevls,
287*4882a593Smuzhiyun 	   "list yaffs mount points", "list yaffs mount points");
288*4882a593Smuzhiyun 
289*4882a593Smuzhiyun U_BOOT_CMD(ydevconfig, 5, 0, do_ydevconfig,
290*4882a593Smuzhiyun 	   "configure yaffs mount point",
291*4882a593Smuzhiyun 	   "mtpoint mtd_id start_block end_block   configures a yaffs2 mount point");
292*4882a593Smuzhiyun 
293*4882a593Smuzhiyun U_BOOT_CMD(ymount, 2, 0, do_ymount,
294*4882a593Smuzhiyun 	   "mount yaffs", "mtpoint  mounts a yaffs2 mount point");
295*4882a593Smuzhiyun 
296*4882a593Smuzhiyun U_BOOT_CMD(yumount, 2, 0, do_yumount,
297*4882a593Smuzhiyun 	   "unmount yaffs", "mtpoint  unmounts a yaffs2 mount point");
298*4882a593Smuzhiyun 
299*4882a593Smuzhiyun U_BOOT_CMD(yls, 3, 0, do_yls, "yaffs ls", "[-l] dirname");
300*4882a593Smuzhiyun 
301*4882a593Smuzhiyun U_BOOT_CMD(yrd, 2, 0, do_yrd,
302*4882a593Smuzhiyun 	   "read file from yaffs", "path   read file from yaffs");
303*4882a593Smuzhiyun 
304*4882a593Smuzhiyun U_BOOT_CMD(ywr, 4, 0, do_ywr,
305*4882a593Smuzhiyun 	   "write file to yaffs",
306*4882a593Smuzhiyun 	   "filename value num_vlues   write values to yaffs file");
307*4882a593Smuzhiyun 
308*4882a593Smuzhiyun U_BOOT_CMD(yrdm, 3, 0, do_yrdm,
309*4882a593Smuzhiyun 	   "read file to memory from yaffs",
310*4882a593Smuzhiyun 	   "filename offset    reads yaffs file into memory");
311*4882a593Smuzhiyun 
312*4882a593Smuzhiyun U_BOOT_CMD(ywrm, 4, 0, do_ywrm,
313*4882a593Smuzhiyun 	   "write file from memory to yaffs",
314*4882a593Smuzhiyun 	   "filename offset size  writes memory to yaffs file");
315*4882a593Smuzhiyun 
316*4882a593Smuzhiyun U_BOOT_CMD(ymkdir, 2, 0, do_ymkdir,
317*4882a593Smuzhiyun 	   "YAFFS mkdir", "dir    create a yaffs directory");
318*4882a593Smuzhiyun 
319*4882a593Smuzhiyun U_BOOT_CMD(yrmdir, 2, 0, do_yrmdir,
320*4882a593Smuzhiyun 	   "YAFFS rmdir", "dirname   removes a yaffs directory");
321*4882a593Smuzhiyun 
322*4882a593Smuzhiyun U_BOOT_CMD(yrm, 2, 0, do_yrm, "YAFFS rm", "path   removes a yaffs file");
323*4882a593Smuzhiyun 
324*4882a593Smuzhiyun U_BOOT_CMD(ymv, 4, 0, do_ymv,
325*4882a593Smuzhiyun 	   "YAFFS mv",
326*4882a593Smuzhiyun 	   "old_path new_path   moves/rename files within a yaffs mount point");
327