X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=common%2Fcmd_ubifs.c;h=7752123cd86727099104d7c1f36a2fdf992bfb08;hb=26f7621d99e36d947909273b521eb4a8cead0a96;hp=2cab793e6c86295e69955f222bb0010f4764d664;hpb=9efac4a1eb99d9c5539aa6992025eeacab7980c6;p=u-boot diff --git a/common/cmd_ubifs.c b/common/cmd_ubifs.c index 2cab793e6c..7752123cd8 100644 --- a/common/cmd_ubifs.c +++ b/common/cmd_ubifs.c @@ -33,12 +33,17 @@ #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); @@ -48,7 +53,7 @@ int do_ubifs_mount(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) int ret; if (argc != 2) - return cmd_usage(cmdtp); + return CMD_RET_USAGE; vol_name = argv[1]; debug("Using volume %s\n", vol_name); @@ -67,13 +72,47 @@ int do_ubifs_mount(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) return 0; } +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_RET_USAGE; + + 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; } @@ -102,18 +141,18 @@ int do_ubifs_load(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) } if (argc < 3) - return cmd_usage(cmdtp); + return CMD_RET_USAGE; addr = simple_strtoul(argv[1], &endp, 16); if (endp == argv[1]) - return cmd_usage(cmdtp); + return CMD_RET_USAGE; filename = argv[2]; if (argc == 4) { size = simple_strtoul(argv[3], &endp, 16); if (endp == argv[3]) - return cmd_usage(cmdtp); + return CMD_RET_USAGE; } debug("Loading file '%s' to address 0x%08x (size %d)\n", filename, addr, size); @@ -131,13 +170,21 @@ U_BOOT_CMD( " - mount 'volume-name' volume" ); -U_BOOT_CMD(ubifsls, 2, 0, do_ubifs_ls, +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, +U_BOOT_CMD( + ubifsload, 4, 0, do_ubifs_load, "load file from an UBIFS filesystem", " [bytes]\n" " - load file 'filename' to address 'addr'"