//\r
#define CLOUDHV_MMIO_HOLE_SIZE 0x38000000\r
\r
+//\r
+// SMBIOS address\r
+//\r
+#define CLOUDHV_SMBIOS_ADDRESS 0xf0000\r
+\r
#endif // __CLOUDHV_H__\r
--- /dev/null
+/** @file\r
+ Find Cloud Hypervisor SMBIOS data.\r
+\r
+ SPDX-License-Identifier: BSD-2-Clause-Patent\r
+**/\r
+\r
+#include <IndustryStandard/CloudHv.h> // CLOUDHV_SMBIOS_ADDRESS\r
+#include <IndustryStandard/SmBios.h> // SMBIOS_TABLE_3_0_ENTRY_POINT\r
+\r
+/**\r
+ Locates and extracts Cloud Hypervisor SMBIOS data\r
+\r
+ @return Address of extracted Cloud Hypervisor SMBIOS data\r
+\r
+**/\r
+UINT8 *\r
+GetCloudHvSmbiosTables (\r
+ VOID\r
+ )\r
+{\r
+ SMBIOS_TABLE_3_0_ENTRY_POINT *CloudHvTables = (VOID *)CLOUDHV_SMBIOS_ADDRESS;\r
+\r
+ if ((CloudHvTables->AnchorString[0] == '_') &&\r
+ (CloudHvTables->AnchorString[1] == 'S') &&\r
+ (CloudHvTables->AnchorString[2] == 'M') &&\r
+ (CloudHvTables->AnchorString[3] == '3') &&\r
+ (CloudHvTables->AnchorString[4] == '_'))\r
+ {\r
+ return (UINT8 *)(UINTN)CloudHvTables->TableAddress;\r
+ }\r
+\r
+ return NULL;\r
+}\r
**/\r
\r
#include <Library/MemoryAllocationLib.h> // FreePool()\r
+#include <OvmfPlatforms.h> // CLOUDHV_DEVICE_ID\r
\r
#include "SmbiosPlatformDxe.h"\r
\r
{\r
EFI_STATUS Status;\r
UINT8 *SmbiosTables;\r
+ UINT16 HostBridgeDevId;\r
\r
Status = EFI_NOT_FOUND;\r
//\r
- // Add QEMU SMBIOS data if found\r
+ // Add SMBIOS data if found\r
//\r
- SmbiosTables = GetQemuSmbiosTables ();\r
- if (SmbiosTables != NULL) {\r
- Status = InstallAllStructures (SmbiosTables);\r
- FreePool (SmbiosTables);\r
+ HostBridgeDevId = PcdGet16 (PcdOvmfHostBridgePciDevId);\r
+ if (HostBridgeDevId == CLOUDHV_DEVICE_ID) {\r
+ SmbiosTables = GetCloudHvSmbiosTables ();\r
+ if (SmbiosTables != NULL) {\r
+ Status = InstallAllStructures (SmbiosTables);\r
+ }\r
+ } else {\r
+ SmbiosTables = GetQemuSmbiosTables ();\r
+ if (SmbiosTables != NULL) {\r
+ Status = InstallAllStructures (SmbiosTables);\r
+ FreePool (SmbiosTables);\r
+ }\r
}\r
\r
return Status;\r
VOID\r
);\r
\r
+/**\r
+ Locates and extracts Cloud Hypervisor SMBIOS data\r
+\r
+ @return Address of extracted Cloud Hypervisor SMBIOS data\r
+\r
+**/\r
+UINT8 *\r
+GetCloudHvSmbiosTables (\r
+ VOID\r
+ );\r
+\r
#endif\r
#\r
\r
[Sources]\r
+ CloudHv.c\r
EntryPoint.c\r
Qemu.c\r
SmbiosPlatformDxe.c\r
UefiDriverEntryPoint\r
\r
[Pcd]\r
+ gUefiOvmfPkgTokenSpaceGuid.PcdOvmfHostBridgePciDevId\r
gUefiOvmfPkgTokenSpaceGuid.PcdQemuSmbiosValidated\r
\r
[Protocols]\r