/** @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; }