[kernel][x86] Add ZBI_TYPE_PLATFORM_ID to x86.
Add support to parse (and patch for mexec) the ZBI_TYPE_PLATFORM_ID
record type.
Bug: ZX-2655
Test: Boot on NUC.
Change-Id: I060a2918d7ec39635bc969efc2b26fb3a0d00aac
diff --git a/kernel/platform/pc/include/platform/pc/bootloader.h b/kernel/platform/pc/include/platform/pc/bootloader.h
index 497a63a..5e1edf0 100644
--- a/kernel/platform/pc/include/platform/pc/bootloader.h
+++ b/kernel/platform/pc/include/platform/pc/bootloader.h
@@ -31,6 +31,9 @@
zbi_swfb_t fb;
zbi_uart_t uart;
zbi_nvram_t nvram;
+
+ uint64_t platform_id_size;
+ zbi_platform_id_t platform_id;
} pc_bootloader_info_t;
extern pc_bootloader_info_t bootloader;
diff --git a/kernel/platform/pc/platform.cpp b/kernel/platform/pc/platform.cpp
index d0c6725..e11ed5b 100644
--- a/kernel/platform/pc/platform.cpp
+++ b/kernel/platform/pc/platform.cpp
@@ -86,6 +86,12 @@
zbi_result_t process_zbi_item(zbi_header_t* hdr, void* payload, void* cookie) {
switch (hdr->type) {
+ case ZBI_TYPE_PLATFORM_ID:
+ if (hdr->length >= sizeof(zbi_platform_id_t)) {
+ memcpy(&bootloader.platform_id, payload, sizeof(zbi_platform_id_t));
+ bootloader.platform_id_size = sizeof(zbi_platform_id_t);
+ }
+ break;
case ZBI_TYPE_ACPI_RSDP:
if (hdr->length >= sizeof(uint64_t)) {
bootloader.acpi_rsdp = *((uint64_t*)payload);
@@ -496,7 +502,6 @@
ctx.ret);
return ctx.ret;
}
-
zbi::Zbi image(bootdata, len);
zbi_result_t result;
@@ -513,6 +518,19 @@
return ZX_ERR_INTERNAL;
}
+ // Append platform id
+ if (bootloader.platform_id_size) {
+ result = image.AppendSection(sizeof(bootloader.platform_id),
+ ZBI_TYPE_PLATFORM_ID, kNoZbiExtra,
+ kNoZbiFlags,
+ reinterpret_cast<uint8_t *>(&bootloader.platform_id));
+ if (result != ZBI_RESULT_OK) {
+ printf("mexec: Failed to append platform id to bootdata. "
+ "len = %lu, section length = %lu, retcode = %d\n", len,
+ sizeof(bootloader.platform_id), result);
+ return ZX_ERR_INTERNAL;
+ }
+ }
// Append information about the framebuffer to the bootdata
if (bootloader.fb.base) {
result = image.AppendSection(sizeof(bootloader.fb),