]>
Commit | Line | Data |
---|---|---|
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, | |
30 | int start_block, int end_block); | |
31 | extern void cmd_yaffs_mount(char *mp); | |
32 | extern void cmd_yaffs_umount(char *mp); | |
33 | extern void cmd_yaffs_read_file(char *fn); | |
34 | extern void cmd_yaffs_write_file(char *fn, char bval, int sizeOfFile); | |
35 | extern void cmd_yaffs_ls(const char *mountpt, int longlist); | |
36 | extern void cmd_yaffs_mwrite_file(char *fn, char *addr, int size); | |
37 | extern void cmd_yaffs_mread_file(char *fn, char *addr); | |
38 | extern void cmd_yaffs_mkdir(const char *dir); | |
39 | extern void cmd_yaffs_rmdir(const char *dir); | |
40 | extern void cmd_yaffs_rm(const char *path); | |
41 | extern void cmd_yaffs_mv(const char *oldPath, const char *newPath); | |
42 | ||
43 | extern int yaffs_dump_dev(const char *path); | |
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 | |
74 | ("Bad arguments: ydevconfig mount_pt mtd_dev start_block end_block\n"); | |
75 | return -1; | |
76 | } | |
77 | ||
78 | mtpoint = argv[1]; | |
79 | mtd_dev = simple_strtol(argv[2], NULL, 16); | |
80 | start_block = simple_strtol(argv[3], NULL, 16); | |
81 | end_block = simple_strtol(argv[4], NULL, 16); | |
82 | ||
83 | cmd_yaffs_devconfig(mtpoint, mtd_dev, start_block, end_block); | |
84 | ||
85 | return 0; | |
86 | } | |
87 | ||
88 | int do_ymount(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) | |
89 | { | |
90 | char *mtpoint; | |
91 | ||
92 | if (argc != 2) { | |
93 | printf("Bad arguments: ymount mount_pt\n"); | |
94 | return -1; | |
95 | } | |
96 | ||
97 | mtpoint = argv[1]; | |
98 | printf("Mounting yaffs2 mount point %s\n", mtpoint); | |
99 | ||
100 | cmd_yaffs_mount(mtpoint); | |
101 | ||
102 | return 0; | |
103 | } | |
104 | ||
105 | int do_yumount(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) | |
106 | { | |
107 | char *mtpoint; | |
108 | ||
109 | if (argc != 2) { | |
110 | printf("Bad arguments: yumount mount_pt\n"); | |
111 | return -1; | |
112 | } | |
113 | ||
114 | mtpoint = argv[1]; | |
115 | printf("Unmounting yaffs2 mount point %s\n", mtpoint); | |
116 | cmd_yaffs_umount(mtpoint); | |
117 | ||
118 | return 0; | |
119 | } | |
120 | ||
121 | int do_yls(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) | |
122 | { | |
123 | char *dirname; | |
124 | ||
125 | if (argc < 2 || argc > 3 || (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, | |
172 | filename); | |
173 | ||
174 | cmd_yaffs_write_file(filename, value, numValues); | |
175 | ||
176 | printf("done\n"); | |
177 | return 0; | |
178 | } | |
179 | ||
180 | int do_yrdm(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) | |
181 | { | |
182 | char *filename; | |
183 | ulong addr; | |
184 | ||
185 | if (argc != 3) { | |
186 | printf("Bad arguments: yrdm file_name addr\n"); | |
187 | return -1; | |
188 | } | |
189 | ||
190 | filename = argv[1]; | |
191 | addr = simple_strtoul(argv[2], NULL, 16); | |
192 | ||
193 | cmd_yaffs_mread_file(filename, (char *)addr); | |
194 | ||
195 | return 0; | |
196 | } | |
197 | ||
198 | int do_ywrm(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) | |
199 | { | |
200 | char *filename; | |
201 | ulong addr; | |
202 | ulong size; | |
203 | ||
204 | if (argc != 4) { | |
205 | printf("Bad arguments: ywrm file_name addr size\n"); | |
206 | return -1; | |
207 | } | |
208 | ||
209 | filename = argv[1]; | |
210 | addr = simple_strtoul(argv[2], NULL, 16); | |
211 | size = simple_strtoul(argv[3], NULL, 16); | |
212 | ||
213 | cmd_yaffs_mwrite_file(filename, (char *)addr, size); | |
214 | ||
215 | return 0; | |
216 | } | |
217 | ||
218 | int do_ymkdir(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) | |
219 | { | |
220 | char *dirname; | |
221 | ||
222 | if (argc != 2) { | |
223 | printf("Bad arguments: ymkdir dir_name\n"); | |
224 | return -1; | |
225 | } | |
226 | ||
227 | dirname = argv[1]; | |
228 | cmd_yaffs_mkdir(dirname); | |
229 | ||
230 | return 0; | |
231 | } | |
232 | ||
233 | int do_yrmdir(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) | |
234 | { | |
235 | char *dirname; | |
236 | ||
237 | if (argc != 2) { | |
238 | printf("Bad arguments: yrmdir dir_name\n"); | |
239 | return -1; | |
240 | } | |
241 | ||
242 | dirname = argv[1]; | |
243 | cmd_yaffs_rmdir(dirname); | |
244 | ||
245 | return 0; | |
246 | } | |
247 | ||
248 | int do_yrm(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) | |
249 | { | |
250 | char *name; | |
251 | ||
252 | if (argc != 2) { | |
253 | printf("Bad arguments: yrm name\n"); | |
254 | return -1; | |
255 | } | |
256 | ||
257 | name = argv[1]; | |
258 | ||
259 | cmd_yaffs_rm(name); | |
260 | ||
261 | return 0; | |
262 | } | |
263 | ||
264 | int do_ymv(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) | |
265 | { | |
266 | char *oldPath; | |
267 | char *newPath; | |
268 | ||
269 | if (argc != 3) { | |
270 | printf("Bad arguments: ymv old_path new_path\n"); | |
271 | return -1; | |
272 | } | |
273 | ||
274 | oldPath = argv[1]; | |
275 | newPath = argv[2]; | |
276 | ||
277 | cmd_yaffs_mv(newPath, oldPath); | |
278 | ||
279 | return 0; | |
280 | } | |
281 | ||
282 | U_BOOT_CMD(ytrace, 2, 0, do_ytrace, | |
283 | "show/set yaffs trace mask", | |
284 | "[new_mask] show/set yaffs trace mask"); | |
285 | ||
286 | U_BOOT_CMD(ydevls, 1, 0, do_ydevls, | |
287 | "list yaffs mount points", "list yaffs mount points"); | |
288 | ||
289 | U_BOOT_CMD(ydevconfig, 5, 0, do_ydevconfig, | |
290 | "configure yaffs mount point", | |
291 | "mtpoint mtd_id start_block end_block configures a yaffs2 mount point"); | |
292 | ||
293 | U_BOOT_CMD(ymount, 2, 0, do_ymount, | |
294 | "mount yaffs", "mtpoint mounts a yaffs2 mount point"); | |
295 | ||
296 | U_BOOT_CMD(yumount, 2, 0, do_yumount, | |
297 | "unmount yaffs", "mtpoint unmounts a yaffs2 mount point"); | |
298 | ||
299 | U_BOOT_CMD(yls, 3, 0, do_yls, "yaffs ls", "[-l] dirname"); | |
300 | ||
301 | U_BOOT_CMD(yrd, 2, 0, do_yrd, | |
302 | "read file from yaffs", "path read file from yaffs"); | |
303 | ||
304 | U_BOOT_CMD(ywr, 4, 0, do_ywr, | |
305 | "write file to yaffs", | |
306 | "filename value num_vlues write values to yaffs file"); | |
307 | ||
308 | U_BOOT_CMD(yrdm, 3, 0, do_yrdm, | |
309 | "read file to memory from yaffs", | |
310 | "filename offset reads yaffs file into memory"); | |
311 | ||
312 | U_BOOT_CMD(ywrm, 4, 0, do_ywrm, | |
313 | "write file from memory to yaffs", | |
314 | "filename offset size writes memory to yaffs file"); | |
315 | ||
316 | U_BOOT_CMD(ymkdir, 2, 0, do_ymkdir, | |
317 | "YAFFS mkdir", "dir create a yaffs directory"); | |
318 | ||
319 | U_BOOT_CMD(yrmdir, 2, 0, do_yrmdir, | |
320 | "YAFFS rmdir", "dirname removes a yaffs directory"); | |
321 | ||
322 | U_BOOT_CMD(yrm, 2, 0, do_yrm, "YAFFS rm", "path removes a yaffs file"); | |
323 | ||
324 | U_BOOT_CMD(ymv, 4, 0, do_ymv, | |
325 | "YAFFS mv", | |
326 | "old_path new_path moves/rename files within a yaffs mount point"); |