]>
Commit | Line | Data |
---|---|---|
83d290c5 | 1 | // SPDX-License-Identifier: GPL-2.0+ |
ce6d0c8d SR |
2 | /* |
3 | * (C) Copyright 2008 | |
4 | * Stefan Roese, DENX Software Engineering, [email protected]. | |
ce6d0c8d SR |
5 | */ |
6 | ||
7 | ||
8 | /* | |
9 | * UBIFS command support | |
10 | */ | |
11 | ||
12 | #undef DEBUG | |
13 | ||
14 | #include <common.h> | |
15 | #include <config.h> | |
16 | #include <command.h> | |
ad15749b | 17 | #include <ubifs_uboot.h> |
cb9c09d4 | 18 | |
ce6d0c8d SR |
19 | static int ubifs_initialized; |
20 | static int ubifs_mounted; | |
21 | ||
14dfc648 | 22 | int cmd_ubifs_mount(char *vol_name) |
ce6d0c8d | 23 | { |
ce6d0c8d SR |
24 | int ret; |
25 | ||
ce6d0c8d SR |
26 | debug("Using volume %s\n", vol_name); |
27 | ||
28 | if (ubifs_initialized == 0) { | |
29 | ubifs_init(); | |
30 | ubifs_initialized = 1; | |
31 | } | |
32 | ||
ff94bc40 | 33 | ret = uboot_ubifs_mount(vol_name); |
ce6d0c8d SR |
34 | if (ret) |
35 | return -1; | |
36 | ||
37 | ubifs_mounted = 1; | |
38 | ||
14dfc648 TFC |
39 | return ret; |
40 | } | |
41 | static int do_ubifs_mount(cmd_tbl_t *cmdtp, int flag, int argc, | |
42 | char * const argv[]) | |
43 | { | |
44 | char *vol_name; | |
45 | ||
46 | if (argc != 2) | |
47 | return CMD_RET_USAGE; | |
48 | ||
49 | vol_name = argv[1]; | |
50 | ||
51 | return cmd_ubifs_mount(vol_name); | |
ce6d0c8d SR |
52 | } |
53 | ||
2f15cfd1 SR |
54 | int ubifs_is_mounted(void) |
55 | { | |
56 | return ubifs_mounted; | |
57 | } | |
58 | ||
10c20440 | 59 | int cmd_ubifs_umount(void) |
2f15cfd1 | 60 | { |
10c20440 TFC |
61 | if (ubifs_initialized == 0) { |
62 | printf("No UBIFS volume mounted!\n"); | |
63 | return -1; | |
64 | } | |
65 | ||
ad15749b | 66 | uboot_ubifs_umount(); |
2f15cfd1 SR |
67 | ubifs_mounted = 0; |
68 | ubifs_initialized = 0; | |
10c20440 TFC |
69 | |
70 | return 0; | |
2f15cfd1 SR |
71 | } |
72 | ||
0e350f81 JH |
73 | static int do_ubifs_umount(cmd_tbl_t *cmdtp, int flag, int argc, |
74 | char * const argv[]) | |
cb9c09d4 SR |
75 | { |
76 | if (argc != 1) | |
4c12eeb8 | 77 | return CMD_RET_USAGE; |
cb9c09d4 | 78 | |
10c20440 | 79 | return cmd_ubifs_umount(); |
cb9c09d4 SR |
80 | } |
81 | ||
0e350f81 JH |
82 | static int do_ubifs_ls(cmd_tbl_t *cmdtp, int flag, int argc, |
83 | char * const argv[]) | |
ce6d0c8d SR |
84 | { |
85 | char *filename = "/"; | |
86 | int ret; | |
87 | ||
88 | if (!ubifs_mounted) { | |
9a2ea578 | 89 | printf("UBIFS not mounted, use ubifsmount to mount volume first!\n"); |
ce6d0c8d SR |
90 | return -1; |
91 | } | |
92 | ||
93 | if (argc == 2) | |
94 | filename = argv[1]; | |
95 | debug("Using filename %s\n", filename); | |
96 | ||
97 | ret = ubifs_ls(filename); | |
7cdebc32 TH |
98 | if (ret) { |
99 | printf("** File not found %s **\n", filename); | |
100 | ret = CMD_RET_FAILURE; | |
101 | } | |
ce6d0c8d SR |
102 | |
103 | return ret; | |
104 | } | |
105 | ||
0e350f81 JH |
106 | static int do_ubifs_load(cmd_tbl_t *cmdtp, int flag, int argc, |
107 | char * const argv[]) | |
ce6d0c8d SR |
108 | { |
109 | char *filename; | |
2896b585 | 110 | char *endp; |
ce6d0c8d SR |
111 | int ret; |
112 | u32 addr; | |
113 | u32 size = 0; | |
114 | ||
115 | if (!ubifs_mounted) { | |
116 | printf("UBIFS not mounted, use ubifs mount to mount volume first!\n"); | |
117 | return -1; | |
118 | } | |
119 | ||
47e26b1b | 120 | if (argc < 3) |
4c12eeb8 | 121 | return CMD_RET_USAGE; |
ce6d0c8d | 122 | |
2896b585 | 123 | addr = simple_strtoul(argv[1], &endp, 16); |
47e26b1b | 124 | if (endp == argv[1]) |
4c12eeb8 | 125 | return CMD_RET_USAGE; |
2896b585 | 126 | |
ce6d0c8d SR |
127 | filename = argv[2]; |
128 | ||
2896b585 SK |
129 | if (argc == 4) { |
130 | size = simple_strtoul(argv[3], &endp, 16); | |
47e26b1b | 131 | if (endp == argv[3]) |
4c12eeb8 | 132 | return CMD_RET_USAGE; |
2896b585 | 133 | } |
ce6d0c8d SR |
134 | debug("Loading file '%s' to address 0x%08x (size %d)\n", filename, addr, size); |
135 | ||
136 | ret = ubifs_load(filename, addr, size); | |
7cdebc32 TH |
137 | if (ret) { |
138 | printf("** File not found %s **\n", filename); | |
139 | ret = CMD_RET_FAILURE; | |
140 | } | |
ce6d0c8d SR |
141 | |
142 | return ret; | |
143 | } | |
144 | ||
145 | U_BOOT_CMD( | |
146 | ubifsmount, 2, 0, do_ubifs_mount, | |
852dbfdd | 147 | "mount UBIFS volume", |
2896b585 SK |
148 | "<volume-name>\n" |
149 | " - mount 'volume-name' volume" | |
a89c33db | 150 | ); |
ce6d0c8d | 151 | |
cb9c09d4 SR |
152 | U_BOOT_CMD( |
153 | ubifsumount, 1, 0, do_ubifs_umount, | |
154 | "unmount UBIFS volume", | |
155 | " - unmount current volume" | |
156 | ); | |
157 | ||
388a29d0 FM |
158 | U_BOOT_CMD( |
159 | ubifsls, 2, 0, do_ubifs_ls, | |
a89c33db WD |
160 | "list files in a directory", |
161 | "[directory]\n" | |
162 | " - list files in a 'directory' (default '/')" | |
163 | ); | |
ce6d0c8d | 164 | |
388a29d0 FM |
165 | U_BOOT_CMD( |
166 | ubifsload, 4, 0, do_ubifs_load, | |
a89c33db WD |
167 | "load file from an UBIFS filesystem", |
168 | "<addr> <filename> [bytes]\n" | |
169 | " - load file 'filename' to address 'addr'" | |
170 | ); |