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"); 327