mirror of
https://github.com/libguestfs/libguestfs.git
synced 2026-03-22 07:03:38 +00:00
aarch64: Use a common table of AAVMF paths.
Previously the code had two places where an identical set of AAVMF paths were stored. Put this information into one place. This is just refactoring.
This commit is contained in:
@@ -443,32 +443,15 @@ dir_contains_files (const char *dir, ...)
|
||||
*
|
||||
* XXX See also v2v/utils.ml:find_uefi_firmware
|
||||
*/
|
||||
#ifdef __aarch64__
|
||||
|
||||
static const char *uefi_firmware[] = {
|
||||
"/usr/share/AAVMF/AAVMF_CODE.fd",
|
||||
"/usr/share/AAVMF/AAVMF_VARS.fd",
|
||||
|
||||
"/usr/share/edk2.git/aarch64/QEMU_EFI-pflash.raw",
|
||||
"/usr/share/edk2.git/aarch64/vars-template-pflash.raw",
|
||||
|
||||
NULL
|
||||
};
|
||||
|
||||
#else
|
||||
|
||||
static const char *uefi_firmware[] = { NULL };
|
||||
|
||||
#endif
|
||||
|
||||
int
|
||||
guestfs_int_get_uefi (guestfs_h *g, char **code, char **vars)
|
||||
{
|
||||
#ifdef __aarch64__
|
||||
size_t i;
|
||||
|
||||
for (i = 0; uefi_firmware[i] != NULL; i += 2) {
|
||||
const char *codefile = uefi_firmware[i];
|
||||
const char *varsfile = uefi_firmware[i+1];
|
||||
for (i = 0; guestfs_int_aavmf_firmware[i] != NULL; i += 2) {
|
||||
const char *codefile = guestfs_int_aavmf_firmware[i];
|
||||
const char *varsfile = guestfs_int_aavmf_firmware[i+1];
|
||||
|
||||
if (access (codefile, R_OK) == 0 && access (varsfile, R_OK) == 0) {
|
||||
CLEANUP_CMD_CLOSE struct command *copycmd = guestfs_int_new_command (g);
|
||||
@@ -495,6 +478,7 @@ guestfs_int_get_uefi (guestfs_h *g, char **code, char **vars)
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
/* Not found. */
|
||||
*code = *vars = NULL;
|
||||
|
||||
@@ -107,6 +107,7 @@ extern int guestfs_int_random_string (char *ret, size_t len);
|
||||
extern char *guestfs_int_drive_name (size_t index, char *ret);
|
||||
extern ssize_t guestfs_int_drive_index (const char *);
|
||||
extern int guestfs_int_is_true (const char *str);
|
||||
extern const char *guestfs_int_aavmf_firmware[];
|
||||
|
||||
/* These functions are used internally by the CLEANUP_* macros.
|
||||
* Don't call them directly.
|
||||
|
||||
12
src/utils.c
12
src/utils.c
@@ -314,3 +314,15 @@ guestfs_int_is_true (const char *str)
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* See src/appliance.c:guestfs_int_get_uefi. */
|
||||
const char *
|
||||
guestfs_int_aavmf_firmware[] = {
|
||||
"/usr/share/AAVMF/AAVMF_CODE.fd",
|
||||
"/usr/share/AAVMF/AAVMF_VARS.fd",
|
||||
|
||||
"/usr/share/edk2.git/aarch64/QEMU_EFI-pflash.raw",
|
||||
"/usr/share/edk2.git/aarch64/vars-template-pflash.raw",
|
||||
|
||||
NULL
|
||||
};
|
||||
|
||||
@@ -57,3 +57,30 @@ v2v_utils_drive_index (value strv)
|
||||
|
||||
CAMLreturn (Val_int (r));
|
||||
}
|
||||
|
||||
value
|
||||
v2v_utils_aavmf_firmware (value unitv)
|
||||
{
|
||||
CAMLparam1 (unitv);
|
||||
CAMLlocal5 (rv, v, v1, v2, cons);
|
||||
size_t i, len;
|
||||
|
||||
rv = Val_int (0);
|
||||
|
||||
/* Build the list backwards so we don't have to reverse it at the end. */
|
||||
len = guestfs_int_count_strings ((char **) guestfs_int_aavmf_firmware);
|
||||
|
||||
for (i = len; i > 0; i -= 2) {
|
||||
v1 = caml_copy_string (guestfs_int_aavmf_firmware[i-2]);
|
||||
v2 = caml_copy_string (guestfs_int_aavmf_firmware[i-1]);
|
||||
v = caml_alloc (2, 0);
|
||||
Store_field (v, 0, v1);
|
||||
Store_field (v, 1, v2);
|
||||
cons = caml_alloc (2, 0);
|
||||
Store_field (cons, 1, rv);
|
||||
rv = cons;
|
||||
Store_field (cons, 0, v);
|
||||
}
|
||||
|
||||
CAMLreturn (rv);
|
||||
}
|
||||
|
||||
@@ -81,6 +81,8 @@ let qemu_supports_sound_card = function
|
||||
| Types.USBAudio
|
||||
-> true
|
||||
|
||||
external aavmf_firmware : unit -> (string * string) list = "v2v_utils_aavmf_firmware"
|
||||
|
||||
(* Find the UEFI firmware. *)
|
||||
let find_uefi_firmware guest_arch =
|
||||
let files =
|
||||
@@ -96,10 +98,7 @@ let find_uefi_firmware guest_arch =
|
||||
"/usr/share/qemu/ovmf-x86_64-code.bin",
|
||||
"/usr/share/qemu/ovmf-x86_64-vars.bin" ]
|
||||
| "aarch64" ->
|
||||
[ "/usr/share/AAVMF/AAVMF_CODE.fd",
|
||||
"/usr/share/AAVMF/AAVMF_VARS.fd";
|
||||
"/usr/share/edk2.git/aarch64/QEMU_EFI-pflash.raw",
|
||||
"/usr/share/edk2.git/aarch64/vars-template-pflash.raw" ]
|
||||
aavmf_firmware () (* actually defined in src/utils.c *)
|
||||
| arch ->
|
||||
error (f_"don't know how to convert UEFI guests for architecture %s")
|
||||
guest_arch in
|
||||
|
||||
Reference in New Issue
Block a user