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