| /** @file | |
| Find and extract QEMU SMBIOS data from fw_cfg. | |
| Copyright (C) 2014, Gabriel L. Somlo <somlo@cmu.edu> | |
| SPDX-License-Identifier: BSD-2-Clause-Patent | |
| **/ | |
| #include <Library/DebugLib.h> // ASSERT_EFI_ERROR() | |
| #include <Library/MemoryAllocationLib.h> // AllocatePool() | |
| #include <Library/PcdLib.h> // PcdGetBool() | |
| #include <Library/QemuFwCfgLib.h> // QemuFwCfgFindFile() | |
| /** | |
| Locates and extracts the QEMU SMBIOS data if present in fw_cfg | |
| @return Address of extracted QEMU SMBIOS data | |
| **/ | |
| UINT8 * | |
| GetQemuSmbiosTables ( | |
| VOID | |
| ) | |
| { | |
| EFI_STATUS Status; | |
| FIRMWARE_CONFIG_ITEM Tables; | |
| UINTN TablesSize; | |
| UINT8 *QemuTables; | |
| if (!PcdGetBool (PcdQemuSmbiosValidated)) { | |
| return NULL; | |
| } | |
| Status = QemuFwCfgFindFile ( | |
| "etc/smbios/smbios-tables", | |
| &Tables, | |
| &TablesSize | |
| ); | |
| ASSERT_EFI_ERROR (Status); | |
| ASSERT (TablesSize > 0); | |
| QemuTables = AllocatePool (TablesSize); | |
| if (QemuTables == NULL) { | |
| return NULL; | |
| } | |
| QemuFwCfgSelectItem (Tables); | |
| QemuFwCfgReadBytes (TablesSize, QemuTables); | |
| return QemuTables; | |
| } |