Blame view
cmd/part.c
5.01 KB
83d290c56 SPDX: Convert all... |
1 |
// SPDX-License-Identifier: GPL-2.0+ |
5cf41dccf cmd_part: add par... |
2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
/* * Copyright (c) 2012, NVIDIA CORPORATION. All rights reserved. * * made from cmd_ext2, which was: * * (C) Copyright 2004 * esd gmbh <www.esd-electronics.com> * Reinhard Arlt <reinhard.arlt@esd-electronics.com> * * made from cmd_reiserfs by * * (C) Copyright 2003 - 2004 * Sysgo Real-Time Solutions, AG <www.elinos.com> * Pavel Bartusek <pba@sysgo.com> |
5cf41dccf cmd_part: add par... |
16 17 18 19 20 |
*/ #include <common.h> #include <config.h> #include <command.h> |
9fb625ce0 env: Move env_set... |
21 |
#include <env.h> |
5cf41dccf cmd_part: add par... |
22 23 |
#include <part.h> #include <vsprintf.h> |
64e6a49a1 cmd: part: Extrac... |
24 25 26 |
enum cmd_part_info { CMD_PART_INFO_START = 0, CMD_PART_INFO_SIZE, |
be683756f cmd: part: Add 'n... |
27 |
CMD_PART_INFO_NUMBER |
64e6a49a1 cmd: part: Extrac... |
28 |
}; |
0e350f81e common: commands:... |
29 |
static int do_part_uuid(int argc, char * const argv[]) |
5cf41dccf cmd_part: add par... |
30 31 |
{ int part; |
4101f6879 dm: Drop the bloc... |
32 |
struct blk_desc *dev_desc; |
5cf41dccf cmd_part: add par... |
33 34 35 36 37 38 |
disk_partition_t info; if (argc < 2) return CMD_RET_USAGE; if (argc > 3) return CMD_RET_USAGE; |
e35929e4a dm: blk: Rename g... |
39 |
part = blk_get_device_part_str(argv[0], argv[1], &dev_desc, &info, 0); |
5cf41dccf cmd_part: add par... |
40 41 42 43 |
if (part < 0) return 1; if (argc > 2) |
382bee57f env: Rename seten... |
44 |
env_set(argv[2], info.uuid); |
5cf41dccf cmd_part: add par... |
45 46 47 48 49 50 |
else printf("%s ", info.uuid); return 0; } |
0e350f81e common: commands:... |
51 |
static int do_part_list(int argc, char * const argv[]) |
5cf41dccf cmd_part: add par... |
52 53 |
{ int ret; |
4101f6879 dm: Drop the bloc... |
54 |
struct blk_desc *desc; |
0798d6fd4 part: Add support... |
55 56 57 |
char *var = NULL; bool bootable = false; int i; |
5cf41dccf cmd_part: add par... |
58 |
|
0798d6fd4 part: Add support... |
59 |
if (argc < 2) |
5cf41dccf cmd_part: add par... |
60 |
return CMD_RET_USAGE; |
0798d6fd4 part: Add support... |
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
if (argc > 2) { for (i = 2; i < argc ; i++) { if (argv[i][0] == '-') { if (!strcmp(argv[i], "-bootable")) { bootable = true; } else { printf("Unknown option %s ", argv[i]); return CMD_RET_USAGE; } } else { var = argv[i]; break; } } /* Loops should have been exited at the last argument, which * as it contained the variable */ if (argc != i + 1) return CMD_RET_USAGE; } |
ebac37cfb dm: blk: Rename g... |
82 |
ret = blk_get_device_by_str(argv[0], argv[1], &desc); |
5cf41dccf cmd_part: add par... |
83 84 |
if (ret < 0) return 1; |
0798d6fd4 part: Add support... |
85 |
if (var != NULL) { |
e86df6ef4 part: let list pu... |
86 |
int p; |
0798d6fd4 part: Add support... |
87 |
char str[512] = { '\0', }; |
a78f78ebe common: cmd_part:... |
88 |
disk_partition_t info; |
e86df6ef4 part: let list pu... |
89 |
|
7e2951160 cmd: part: use MA... |
90 |
for (p = 1; p < MAX_SEARCH_PARTITIONS; p++) { |
0798d6fd4 part: Add support... |
91 |
char t[5]; |
3e8bd4695 dm: part: Rename ... |
92 |
int r = part_get_info(desc, p, &info); |
e86df6ef4 part: let list pu... |
93 |
|
0798d6fd4 part: Add support... |
94 95 96 97 98 |
if (r != 0) continue; if (bootable && !info.bootable) continue; |
653447b40 part: fix "part l... |
99 |
sprintf(t, "%s%x", str[0] ? " " : "", p); |
0798d6fd4 part: Add support... |
100 |
strcat(str, t); |
e86df6ef4 part: let list pu... |
101 |
} |
382bee57f env: Rename seten... |
102 |
env_set(var, str); |
e86df6ef4 part: let list pu... |
103 104 |
return 0; } |
3e8bd4695 dm: part: Rename ... |
105 |
part_print(desc); |
5cf41dccf cmd_part: add par... |
106 107 108 |
return 0; } |
64e6a49a1 cmd: part: Extrac... |
109 |
static int do_part_info(int argc, char * const argv[], enum cmd_part_info param) |
8607c4f12 common: cmd_part:... |
110 |
{ |
4101f6879 dm: Drop the bloc... |
111 |
struct blk_desc *desc; |
8607c4f12 common: cmd_part:... |
112 113 |
disk_partition_t info; char buf[512] = { 0 }; |
36df616a2 cmd: part: Allow ... |
114 |
char *endp; |
8607c4f12 common: cmd_part:... |
115 116 117 118 119 120 121 122 |
int part; int err; int ret; if (argc < 3) return CMD_RET_USAGE; if (argc > 4) return CMD_RET_USAGE; |
ebac37cfb dm: blk: Rename g... |
123 |
ret = blk_get_device_by_str(argv[0], argv[1], &desc); |
8607c4f12 common: cmd_part:... |
124 125 |
if (ret < 0) return 1; |
36df616a2 cmd: part: Allow ... |
126 127 128 129 130 131 132 133 134 135 |
part = simple_strtoul(argv[2], &endp, 0); if (*endp == '\0') { err = part_get_info(desc, part, &info); if (err) return 1; } else { part = part_get_info_by_name(desc, argv[2], &info); if (part == -1) return 1; } |
8607c4f12 common: cmd_part:... |
136 |
|
64e6a49a1 cmd: part: Extrac... |
137 138 139 140 141 142 143 |
switch (param) { case CMD_PART_INFO_START: snprintf(buf, sizeof(buf), LBAF, info.start); break; case CMD_PART_INFO_SIZE: snprintf(buf, sizeof(buf), LBAF, info.size); break; |
be683756f cmd: part: Add 'n... |
144 |
case CMD_PART_INFO_NUMBER: |
400b9554c cmd: part: number... |
145 |
snprintf(buf, sizeof(buf), "0x%x", part); |
be683756f cmd: part: Add 'n... |
146 |
break; |
64e6a49a1 cmd: part: Extrac... |
147 148 149 150 151 |
default: printf("** Unknown cmd_part_info value: %d ", param); return 1; } |
8607c4f12 common: cmd_part:... |
152 153 |
if (argc > 3) |
382bee57f env: Rename seten... |
154 |
env_set(argv[3], buf); |
8607c4f12 common: cmd_part:... |
155 156 157 158 159 160 |
else printf("%s ", buf); return 0; } |
64e6a49a1 cmd: part: Extrac... |
161 |
static int do_part_start(int argc, char * const argv[]) |
8607c4f12 common: cmd_part:... |
162 |
{ |
64e6a49a1 cmd: part: Extrac... |
163 164 |
return do_part_info(argc, argv, CMD_PART_INFO_START); } |
8607c4f12 common: cmd_part:... |
165 |
|
64e6a49a1 cmd: part: Extrac... |
166 167 168 |
static int do_part_size(int argc, char * const argv[]) { return do_part_info(argc, argv, CMD_PART_INFO_SIZE); |
8607c4f12 common: cmd_part:... |
169 |
} |
be683756f cmd: part: Add 'n... |
170 171 172 173 |
static int do_part_number(int argc, char * const argv[]) { return do_part_info(argc, argv, CMD_PART_INFO_NUMBER); } |
0e350f81e common: commands:... |
174 |
static int do_part(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) |
5cf41dccf cmd_part: add par... |
175 176 177 178 179 180 181 182 |
{ if (argc < 2) return CMD_RET_USAGE; if (!strcmp(argv[1], "uuid")) return do_part_uuid(argc - 2, argv + 2); else if (!strcmp(argv[1], "list")) return do_part_list(argc - 2, argv + 2); |
8607c4f12 common: cmd_part:... |
183 184 185 186 |
else if (!strcmp(argv[1], "start")) return do_part_start(argc - 2, argv + 2); else if (!strcmp(argv[1], "size")) return do_part_size(argc - 2, argv + 2); |
be683756f cmd: part: Add 'n... |
187 188 |
else if (!strcmp(argv[1], "number")) return do_part_number(argc - 2, argv + 2); |
5cf41dccf cmd_part: add par... |
189 190 191 192 193 |
return CMD_RET_USAGE; } U_BOOT_CMD( |
0798d6fd4 part: Add support... |
194 |
part, CONFIG_SYS_MAXARGS, 1, do_part, |
5cf41dccf cmd_part: add par... |
195 |
"disk partition related commands", |
8ca584ecf cmd_part: fix usa... |
196 197 |
"uuid <interface> <dev>:<part> " |
5cf41dccf cmd_part: add par... |
198 199 200 201 202 203 204 205 |
" - print partition UUID " "part uuid <interface> <dev>:<part> <varname> " " - set environment variable to partition UUID " "part list <interface> <dev> " |
e86df6ef4 part: let list pu... |
206 207 |
" - print a device's partition table " |
0798d6fd4 part: Add support... |
208 209 210 211 |
"part list <interface> <dev> [flags] <varname> " " - set environment variable to the list of partitions " |
8607c4f12 common: cmd_part:... |
212 213 214 215 216 217 |
" flags can be -bootable (list only bootable partitions) " "part start <interface> <dev> <part> <varname> " " - set environment variable to the start of the partition (in blocks) " |
36df616a2 cmd: part: Allow ... |
218 219 |
" part can be either partition number or partition name " |
8607c4f12 common: cmd_part:... |
220 221 |
"part size <interface> <dev> <part> <varname> " |
36df616a2 cmd: part: Allow ... |
222 223 |
" - set environment variable to the size of the partition (in blocks) " |
be683756f cmd: part: Add 'n... |
224 225 226 227 228 229 230 |
" part can be either partition number or partition name " "part number <interface> <dev> <part> <varname> " " - set environment variable to the partition number using the partition name " " part must be specified as partition name" |
5cf41dccf cmd_part: add par... |
231 |
); |