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