1 /** @file 2 Find and extract QEMU SMBIOS data from fw_cfg. 3 4 Copyright (C) 2014, Gabriel L. Somlo <somlo@cmu.edu> 5 6 This program and the accompanying materials are licensed and made 7 available under the terms and conditions of the BSD License which 8 accompanies this distribution. The full text of the license may 9 be found at http://opensource.org/licenses/bsd-license.php 10 11 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, 12 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. 13 **/ 14 15 #include "SmbiosPlatformDxe.h" 16 #include <Library/QemuFwCfgLib.h> 17 #include <Library/MemoryAllocationLib.h> 18 #include <Library/PcdLib.h> 19 20 /** 21 Locates and extracts the QEMU SMBIOS data if present in fw_cfg 22 23 @return Address of extracted QEMU SMBIOS data 24 25 **/ 26 UINT8 * GetQemuSmbiosTables(VOID)27GetQemuSmbiosTables ( 28 VOID 29 ) 30 { 31 EFI_STATUS Status; 32 FIRMWARE_CONFIG_ITEM Tables; 33 UINTN TablesSize; 34 UINT8 *QemuTables; 35 36 if (!PcdGetBool (PcdQemuSmbiosValidated)) { 37 return NULL; 38 } 39 40 Status = QemuFwCfgFindFile ("etc/smbios/smbios-tables", &Tables, 41 &TablesSize); 42 ASSERT_EFI_ERROR (Status); 43 ASSERT (TablesSize > 0); 44 45 QemuTables = AllocatePool (TablesSize); 46 if (QemuTables == NULL) { 47 return NULL; 48 } 49 50 QemuFwCfgSelectItem (Tables); 51 QemuFwCfgReadBytes (TablesSize, QemuTables); 52 53 return QemuTables; 54 } 55