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