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