uefi: Refactor the fwdb/storage setup so it can be used outside of vboot.
The network boot version of depthcharge doesn't need to set up RO/RW vboot
storage areas, but it does need to set up storage for the netboot params.
This makes the code usable by netboot.
Change-Id: Ia55dac70c727889e332ea3e2b91dbe225949dd1c
diff --git a/src/module/uefi/fwdb.c b/src/module/uefi/fwdb.c
index 14b77fe..7d16c90 100644
--- a/src/module/uefi/fwdb.c
+++ b/src/module/uefi/fwdb.c
@@ -86,15 +86,17 @@
return 0;
}
-int uefi_prepare_fwdb_storage(void)
+int uefi_prepare_fwdb_vboot_ro(void)
{
FwdbEntry ro_image_entry = {
.ptr = &_binary_ro_image_start,
.size = &_binary_ro_image_size - &ImageBase,
};
- if (fwdb_access("uefi_ro_image", NULL, &ro_image_entry))
- return 1;
+ return fwdb_access("uefi_ro_image", NULL, &ro_image_entry);
+}
+int uefi_prepare_fwdb_file(CHAR16 *file_name, const char *fwdb_name)
+{
EFI_SYSTEM_TABLE *st = uefi_system_table_ptr();
if (!st)
return 1;
@@ -129,10 +131,7 @@
return 1;
}
- int ret = insert_file_into_fwdb(root, L"depthcharge\\rwa",
- "uefi_rw_a_image");
- ret = ret || insert_file_into_fwdb(root, L"depthcharge\\rwb",
- "uefi_rw_b_image");
+ int ret = insert_file_into_fwdb(root, file_name, fwdb_name);
status = root->Close(root);
if (status != EFI_SUCCESS) {
diff --git a/src/module/uefi/fwdb.h b/src/module/uefi/fwdb.h
index a92886f..367837d 100644
--- a/src/module/uefi/fwdb.h
+++ b/src/module/uefi/fwdb.h
@@ -23,7 +23,10 @@
#ifndef __MODULE_UEFI_FWDB_H__
#define __MODULE_UEFI_FWDB_H__
-int uefi_prepare_fwdb_storage(void);
+#include "uefi/uefi.h"
+
+int uefi_prepare_fwdb_vboot_ro(void);
+int uefi_prepare_fwdb_file(CHAR16 *file_name, const char *fwdb_name);
int uefi_prepare_fwdb_e820_map(void);
int uefi_prepare_fwdb_acpi_rsdp(void);
diff --git a/src/module/uefi/uefi.c b/src/module/uefi/uefi.c
index f3ef270..c61fe84 100644
--- a/src/module/uefi/uefi.c
+++ b/src/module/uefi/uefi.c
@@ -28,14 +28,13 @@
void module_main(void)
{
- if (uefi_prepare_fwdb_storage())
+ if (uefi_prepare_fwdb_vboot_ro() ||
+ uefi_prepare_fwdb_file(L"depthcharge\\rwa", "uefi_rw_a_image") ||
+ uefi_prepare_fwdb_file(L"depthcharge\\rwb", "uefi_rw_b_image") ||
+ uefi_prepare_fwdb_e820_map() ||
+ uefi_prepare_fwdb_acpi_rsdp()) {
halt();
-
- if (uefi_prepare_fwdb_e820_map())
- halt();
-
- if (uefi_prepare_fwdb_acpi_rsdp())
- halt();
+ }
if (vboot_init())
halt();