X-Git-Url: https://git.kernelconcepts.de/?a=blobdiff_plain;f=common%2Fcmd_ubifs.c;h=3cd2d8fa824a074a0b42684cd183818f6000a48f;hb=a9417ce74a8b79b1a3ab879d05f4f54138422c6e;hp=b2e0f4fdfea7dbbdb9ab72926224f9b246ed3b5a;hpb=ee1702d75a30d076139d1841383a1fa7220a0e11;p=karo-tx-uboot.git diff --git a/common/cmd_ubifs.c b/common/cmd_ubifs.c index b2e0f4fdfe..3cd2d8fa82 100644 --- a/common/cmd_ubifs.c +++ b/common/cmd_ubifs.c @@ -33,20 +33,28 @@ #include #include +#include "../fs/ubifs/ubifs.h" + static int ubifs_initialized; static int ubifs_mounted; +extern struct super_block *ubifs_sb; + /* Prototypes */ int ubifs_init(void); int ubifs_mount(char *vol_name); +void ubifs_umount(struct ubifs_info *c); int ubifs_ls(char *dir_name); int ubifs_load(char *filename, u32 addr, u32 size); -int do_ubifs_mount(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) +int do_ubifs_mount(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { char *vol_name; int ret; + if (argc != 2) + return cmd_usage(cmdtp); + vol_name = argv[1]; debug("Using volume %s\n", vol_name); @@ -64,13 +72,47 @@ int do_ubifs_mount(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) return 0; } -int do_ubifs_ls(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) +int ubifs_is_mounted(void) +{ + return ubifs_mounted; +} + +void cmd_ubifs_umount(void) +{ + + if (ubifs_sb) { + printf("Unmounting UBIFS volume %s!\n", + ((struct ubifs_info *)(ubifs_sb->s_fs_info))->vi.name); + ubifs_umount(ubifs_sb->s_fs_info); + } + + ubifs_sb = NULL; + ubifs_mounted = 0; + ubifs_initialized = 0; +} + +int do_ubifs_umount(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) +{ + if (argc != 1) + return cmd_usage(cmdtp); + + if (ubifs_initialized == 0) { + printf("No UBIFS volume mounted!\n"); + return -1; + } + + cmd_ubifs_umount(); + + return 0; +} + +int do_ubifs_ls(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { char *filename = "/"; int ret; if (!ubifs_mounted) { - printf("UBIFS not mounted, use ubifs mount to mount volume first!\n"); + printf("UBIFS not mounted, use ubifsmount to mount volume first!\n"); return -1; } @@ -85,9 +127,10 @@ int do_ubifs_ls(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) return ret; } -int do_ubifs_load(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) +int do_ubifs_load(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) { char *filename; + char *endp; int ret; u32 addr; u32 size = 0; @@ -97,16 +140,20 @@ int do_ubifs_load(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) return -1; } - if (argc < 3) { - printf("Usage:\n%s\n", cmdtp->usage); - return -1; - } + if (argc < 3) + return cmd_usage(cmdtp); + + addr = simple_strtoul(argv[1], &endp, 16); + if (endp == argv[1]) + return cmd_usage(cmdtp); - addr = simple_strtoul(argv[1], NULL, 16); filename = argv[2]; - if (argc == 4) - size = simple_strtoul(argv[3], NULL, 16); + if (argc == 4) { + size = simple_strtoul(argv[3], &endp, 16); + if (endp == argv[3]) + return cmd_usage(cmdtp); + } debug("Loading file '%s' to address 0x%08x (size %d)\n", filename, addr, size); ret = ubifs_load(filename, addr, size); @@ -118,15 +165,27 @@ int do_ubifs_load(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]) U_BOOT_CMD( ubifsmount, 2, 0, do_ubifs_mount, - "ubifsmount- mount UBIFS volume\n", - "\n"); - -U_BOOT_CMD(ubifsls, 2, 0, do_ubifs_ls, - "ubifsls - list files in a directory\n", - "[directory]\n" - " - list files in a 'directory' (default '/')\n"); - -U_BOOT_CMD(ubifsload, 4, 0, do_ubifs_load, - "ubifsload- load file from an UBIFS filesystem\n", - " [bytes]\n" - " - load file 'filename' to address 'addr'\n"); + "mount UBIFS volume", + "\n" + " - mount 'volume-name' volume" +); + +U_BOOT_CMD( + ubifsumount, 1, 0, do_ubifs_umount, + "unmount UBIFS volume", + " - unmount current volume" +); + +U_BOOT_CMD( + ubifsls, 2, 0, do_ubifs_ls, + "list files in a directory", + "[directory]\n" + " - list files in a 'directory' (default '/')" +); + +U_BOOT_CMD( + ubifsload, 4, 0, do_ubifs_load, + "load file from an UBIFS filesystem", + " [bytes]\n" + " - load file 'filename' to address 'addr'" +);