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