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