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