Blame view
cmd/part.c
4.51 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 21 22 |
*/ #include <common.h> #include <config.h> #include <command.h> #include <part.h> #include <vsprintf.h> |
64e6a49a1 cmd: part: Extrac... |
23 24 25 26 |
enum cmd_part_info { CMD_PART_INFO_START = 0, CMD_PART_INFO_SIZE, }; |
0e350f81e common: commands:... |
27 |
static int do_part_uuid(int argc, char * const argv[]) |
5cf41dccf cmd_part: add par... |
28 29 |
{ int part; |
4101f6879 dm: Drop the bloc... |
30 |
struct blk_desc *dev_desc; |
5cf41dccf cmd_part: add par... |
31 32 33 34 35 36 |
disk_partition_t info; if (argc < 2) return CMD_RET_USAGE; if (argc > 3) return CMD_RET_USAGE; |
e35929e4a dm: blk: Rename g... |
37 |
part = blk_get_device_part_str(argv[0], argv[1], &dev_desc, &info, 0); |
5cf41dccf cmd_part: add par... |
38 39 40 41 |
if (part < 0) return 1; if (argc > 2) |
382bee57f env: Rename seten... |
42 |
env_set(argv[2], info.uuid); |
5cf41dccf cmd_part: add par... |
43 44 45 46 47 48 |
else printf("%s ", info.uuid); return 0; } |
0e350f81e common: commands:... |
49 |
static int do_part_list(int argc, char * const argv[]) |
5cf41dccf cmd_part: add par... |
50 51 |
{ int ret; |
4101f6879 dm: Drop the bloc... |
52 |
struct blk_desc *desc; |
0798d6fd4 part: Add support... |
53 54 55 |
char *var = NULL; bool bootable = false; int i; |
5cf41dccf cmd_part: add par... |
56 |
|
0798d6fd4 part: Add support... |
57 |
if (argc < 2) |
5cf41dccf cmd_part: add par... |
58 |
return CMD_RET_USAGE; |
0798d6fd4 part: Add support... |
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
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... |
80 |
ret = blk_get_device_by_str(argv[0], argv[1], &desc); |
5cf41dccf cmd_part: add par... |
81 82 |
if (ret < 0) return 1; |
0798d6fd4 part: Add support... |
83 |
if (var != NULL) { |
e86df6ef4 part: let list pu... |
84 |
int p; |
0798d6fd4 part: Add support... |
85 |
char str[512] = { '\0', }; |
a78f78ebe common: cmd_part:... |
86 |
disk_partition_t info; |
e86df6ef4 part: let list pu... |
87 |
|
7e2951160 cmd: part: use MA... |
88 |
for (p = 1; p < MAX_SEARCH_PARTITIONS; p++) { |
0798d6fd4 part: Add support... |
89 |
char t[5]; |
3e8bd4695 dm: part: Rename ... |
90 |
int r = part_get_info(desc, p, &info); |
e86df6ef4 part: let list pu... |
91 |
|
0798d6fd4 part: Add support... |
92 93 94 95 96 |
if (r != 0) continue; if (bootable && !info.bootable) continue; |
653447b40 part: fix "part l... |
97 |
sprintf(t, "%s%x", str[0] ? " " : "", p); |
0798d6fd4 part: Add support... |
98 |
strcat(str, t); |
e86df6ef4 part: let list pu... |
99 |
} |
382bee57f env: Rename seten... |
100 |
env_set(var, str); |
e86df6ef4 part: let list pu... |
101 102 |
return 0; } |
3e8bd4695 dm: part: Rename ... |
103 |
part_print(desc); |
5cf41dccf cmd_part: add par... |
104 105 106 |
return 0; } |
64e6a49a1 cmd: part: Extrac... |
107 |
static int do_part_info(int argc, char * const argv[], enum cmd_part_info param) |
8607c4f12 common: cmd_part:... |
108 |
{ |
4101f6879 dm: Drop the bloc... |
109 |
struct blk_desc *desc; |
8607c4f12 common: cmd_part:... |
110 111 |
disk_partition_t info; char buf[512] = { 0 }; |
36df616a2 cmd: part: Allow ... |
112 |
char *endp; |
8607c4f12 common: cmd_part:... |
113 114 115 116 117 118 119 120 |
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... |
121 |
ret = blk_get_device_by_str(argv[0], argv[1], &desc); |
8607c4f12 common: cmd_part:... |
122 123 |
if (ret < 0) return 1; |
36df616a2 cmd: part: Allow ... |
124 125 126 127 128 129 130 131 132 133 |
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:... |
134 |
|
64e6a49a1 cmd: part: Extrac... |
135 136 137 138 139 140 141 142 143 144 145 146 |
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; default: printf("** Unknown cmd_part_info value: %d ", param); return 1; } |
8607c4f12 common: cmd_part:... |
147 148 |
if (argc > 3) |
382bee57f env: Rename seten... |
149 |
env_set(argv[3], buf); |
8607c4f12 common: cmd_part:... |
150 151 152 153 154 155 |
else printf("%s ", buf); return 0; } |
64e6a49a1 cmd: part: Extrac... |
156 |
static int do_part_start(int argc, char * const argv[]) |
8607c4f12 common: cmd_part:... |
157 |
{ |
64e6a49a1 cmd: part: Extrac... |
158 159 |
return do_part_info(argc, argv, CMD_PART_INFO_START); } |
8607c4f12 common: cmd_part:... |
160 |
|
64e6a49a1 cmd: part: Extrac... |
161 162 163 |
static int do_part_size(int argc, char * const argv[]) { return do_part_info(argc, argv, CMD_PART_INFO_SIZE); |
8607c4f12 common: cmd_part:... |
164 |
} |
0e350f81e common: commands:... |
165 |
static int do_part(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) |
5cf41dccf cmd_part: add par... |
166 167 168 169 170 171 172 173 |
{ 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:... |
174 175 176 177 |
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); |
5cf41dccf cmd_part: add par... |
178 179 180 181 182 |
return CMD_RET_USAGE; } U_BOOT_CMD( |
0798d6fd4 part: Add support... |
183 |
part, CONFIG_SYS_MAXARGS, 1, do_part, |
5cf41dccf cmd_part: add par... |
184 |
"disk partition related commands", |
8ca584ecf cmd_part: fix usa... |
185 186 |
"uuid <interface> <dev>:<part> " |
5cf41dccf cmd_part: add par... |
187 188 189 190 191 192 193 194 |
" - print partition UUID " "part uuid <interface> <dev>:<part> <varname> " " - set environment variable to partition UUID " "part list <interface> <dev> " |
e86df6ef4 part: let list pu... |
195 196 |
" - print a device's partition table " |
0798d6fd4 part: Add support... |
197 198 199 200 |
"part list <interface> <dev> [flags] <varname> " " - set environment variable to the list of partitions " |
8607c4f12 common: cmd_part:... |
201 202 203 204 205 206 |
" 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 ... |
207 208 |
" part can be either partition number or partition name " |
8607c4f12 common: cmd_part:... |
209 210 |
"part size <interface> <dev> <part> <varname> " |
36df616a2 cmd: part: Allow ... |
211 212 213 |
" - set environment variable to the size of the partition (in blocks) " " part can be either partition number or partition name" |
5cf41dccf cmd_part: add par... |
214 |
); |