Add files to hook up yaffs direct to u-boot
[yaffs2.git] / direct / u-boot / common / cmd_yaffs2.c
diff --git a/direct/u-boot/common/cmd_yaffs2.c b/direct/u-boot/common/cmd_yaffs2.c
new file mode 100644 (file)
index 0000000..fd9b4fa
--- /dev/null
@@ -0,0 +1,325 @@
+/* Yaffs commands.
+ * Modified by Charles Manning by adding ydevconfig command.
+ *
+ */
+
+#include <common.h>
+
+#include <config.h>
+#include <command.h>
+
+#ifdef  YAFFS2_DEBUG
+#define PRINTF(fmt,args...) printf (fmt ,##args)
+#else
+#define PRINTF(fmt,args...) do { } while(0)
+#endif
+
+extern void cmd_yaffs_devconfig(char *mp, int flash_dev, int start_block, int end_block);
+extern void cmd_yaffs_mount(char *mp);
+extern void cmd_yaffs_umount(char *mp);
+extern void cmd_yaffs_read_file(char *fn);
+extern void cmd_yaffs_write_file(char *fn,char bval,int sizeOfFile);
+extern void cmd_yaffs_ls(const char *mountpt, int longlist);
+extern void cmd_yaffs_mwrite_file(char *fn, char *addr, int size);
+extern void cmd_yaffs_mread_file(char *fn, char *addr);
+extern void cmd_yaffs_mkdir(const char *dir);
+extern void cmd_yaffs_rmdir(const char *dir);
+extern void cmd_yaffs_rm(const char *path);
+extern void cmd_yaffs_mv(const char *oldPath, const char *newPath);
+
+extern int yaffs_dump_dev(const char *path);
+
+
+/* ydevconfig mount_pt mtd_dev_num start_block end_block */
+int do_ydevconfig (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+    char *mtpoint;
+    int mtd_dev;
+    int start_block;
+    int end_block;
+
+    if(argc != 5) {
+       printf("Bad arguments: ydevconfig mount_pt mtd_dev start_block end_block\n");
+       return -1;
+    }
+    
+    mtpoint = argv[1];
+    mtd_dev = simple_strtol(argv[2], NULL, 16);
+    start_block = simple_strtol(argv[3], NULL, 16);
+    end_block = simple_strtol(argv[4], NULL, 16);
+    
+    printf("Configure yaffs2 mount point %s on nand device %d from block %x to block %x\n",
+       mtpoint, mtd_dev, start_block, end_block);
+    
+    cmd_yaffs_devconfig(mtpoint, mtd_dev, start_block, end_block);
+
+    return(0);
+}
+
+int do_ymount (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+    char *mtpoint;
+    
+    if(argc != 2) {
+       printf("Bad arguments: ymount mount_pt\n");
+       return -1;
+    }
+    
+    mtpoint = argv[1];
+    printf("Mounting yaffs2 mount point %s\n",mtpoint);
+    
+    cmd_yaffs_mount(mtpoint);
+
+    return(0);
+}
+
+int do_yumount (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+    char *mtpoint;
+    
+    if(argc != 2) {
+       printf("Bad arguments: yumount mount_pt\n");
+       return -1;
+    }
+    
+    mtpoint = argv[1];
+    printf("Unmounting yaffs2 mount point %s\n",mtpoint);
+    cmd_yaffs_umount(mtpoint);
+
+    return(0);
+}
+
+int do_yls (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+    char *dirname;
+    
+    if(argc < 2 || argc > 3 ||
+       (argc == 3 && strcmp(argv[1],"-l"))) {
+       printf("Bad arguments: yls [-l] dir\n");
+       return -1;
+    }
+    
+    dirname = argv[argc-1];
+
+    cmd_yaffs_ls(dirname, (argc>2)?1:0);
+
+    return(0);
+}
+
+int do_yrd (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+    char *filename;
+    
+    if(argc != 2) {
+       printf("Bad arguments: yrd file_name\n");
+       return -1;
+    }
+    
+    filename = argv[1];
+    
+    printf ("Reading file %s ", filename);
+
+    cmd_yaffs_read_file(filename);
+
+    printf ("done\n");
+    return(0);
+}
+
+int do_ywr (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+    char *filename;
+    ulong value;
+    ulong numValues;
+
+    if(argc != 4) {
+       printf("Bad arguments: ywr file_name value n_values\n");
+       return -1;
+    }
+    
+    filename = argv[1];
+    value = simple_strtoul(argv[2], NULL, 16);
+    numValues = simple_strtoul(argv[3], NULL, 16);
+
+    printf ("Writing value (%lx) %lx times to %s... ", value, numValues, filename);
+
+    cmd_yaffs_write_file(filename,value,numValues);
+
+    printf ("done\n");
+    return(0);
+}
+
+int do_yrdm (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+    char *filename;
+    ulong addr;
+
+    if(argc != 3) {
+       printf("Bad arguments: yrdm file_name addr\n");
+       return -1;
+    }
+
+    filename = argv[1];
+    addr = simple_strtoul(argv[2], NULL, 16);
+
+    cmd_yaffs_mread_file(filename, (char *)addr);
+
+    return(0);
+}
+
+int do_ywrm (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+    char *filename;
+    ulong addr;
+    ulong size;
+
+    if(argc != 4) {
+       printf("Bad arguments: ywrm file_name addr size\n");
+       return -1;
+    }
+    
+    filename = argv[1];
+    addr = simple_strtoul(argv[2], NULL, 16);
+    size = simple_strtoul(argv[3], NULL, 16);
+
+    cmd_yaffs_mwrite_file(filename, (char *)addr, size);
+
+    return(0);
+}
+
+int do_ymkdir (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+    char *dirname;
+
+    if(argc != 2) {
+       printf("Bad arguments: ymkdir dir_name\n");
+       return -1;
+    }
+
+    dirname = argv[1];
+    cmd_yaffs_mkdir(dirname);
+
+    return(0);
+}
+
+int do_yrmdir (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+    char *dirname;
+
+    if(argc != 2) {
+       printf("Bad arguments: yrmdir dir_name\n");
+       return -1;
+    }
+
+    dirname = argv[1];
+    cmd_yaffs_rmdir(dirname);
+
+    return(0);
+}
+
+int do_yrm (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+    char *name;
+
+    if(argc != 2) {
+       printf("Bad arguments: yrm name\n");
+       return -1;
+    }
+
+    name = argv[1];
+
+    cmd_yaffs_rm(name);
+
+    return(0);
+}
+
+int do_ymv (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+    char *oldPath;
+    char *newPath;
+
+    if(argc != 3) {
+       printf("Bad arguments: ymv old_path new_path\n");
+       return -1;
+    }
+
+    oldPath = argv[1];
+    newPath = argv[2];
+
+    cmd_yaffs_mv(newPath, oldPath);
+
+    return(0);
+}
+
+U_BOOT_CMD(
+    ydevconfig, 5,  0,  do_ydevconfig,
+    "configure yaffs mount point",
+    "ydevconfig mtpoint mtd_id start_block end_block   configures a yaffs2 mount point"
+);
+
+U_BOOT_CMD(
+    ymount, 2,  0,  do_ymount,
+    "mount yaffs",
+    "ymount mtpoint  mounts a yaffs2 mount point"
+);
+
+
+U_BOOT_CMD(
+    yumount, 2,  0,  do_yumount,
+    "unmount yaffs",
+    "yunmount mtpoint  unmounts a yaffs2 mount point"
+);
+
+U_BOOT_CMD(
+    yls,    3,  0,  do_yls,
+    "yaffs ls",
+    "yls [-l] dirname"
+);
+
+U_BOOT_CMD(
+    yrd,    2,  0,  do_yrd,
+    "read file from yaffs",
+    "yrd path   read file from yaffs"
+);
+
+U_BOOT_CMD(
+    ywr,    4,  0,  do_ywr,
+    "write file to yaffs",
+    "ywr filename value num_vlues   write values to yaffs file"
+);
+
+U_BOOT_CMD(
+    yrdm,   3,  0,  do_yrdm,
+    "read file to memory from yaffs",
+    "yrdm filename offset    reads yaffs file into memory"
+);
+
+U_BOOT_CMD(
+    ywrm,   4,  0,  do_ywrm,
+    "write file from memory to yaffs",
+    "ywrm filename offset size  writes memory to yaffs file"
+);
+
+U_BOOT_CMD(
+    ymkdir, 2,  0,  do_ymkdir,
+    "YAFFS mkdir",
+    "ymkdir dir    create a yaffs directory"
+);
+
+U_BOOT_CMD(
+    yrmdir, 2,  0,  do_yrmdir,
+    "YAFFS rmdir",
+    "yrmdir dirname   removes a yaffs directory"
+);
+
+U_BOOT_CMD(
+    yrm,    2,  0,  do_yrm,
+    "YAFFS rm",
+    "yrm path   removes a yaffs file"
+);
+
+U_BOOT_CMD(
+    ymv,    4,  0,  do_ymv,
+    "YAFFS mv",
+    "ymv old_path new_path   moves/rename files within a yaffs mount point"
+);
+