\r
**/\r
\r
-#include <IndustryStandard/CloudHv.h> // CLOUDHV_RSDP_ADDRESS\r
-#include <Library/BaseLib.h> // CpuDeadLoop()\r
-#include <Library/DebugLib.h> // DEBUG()\r
+#include <IndustryStandard/CloudHv.h> // CLOUDHV_RSDP_ADDRESS\r
+#include <IndustryStandard/Xen/arch-x86/hvm/start_info.h> // hvm_start_info\r
+#include <Library/BaseLib.h> // CpuDeadLoop()\r
+#include <Library/DebugLib.h> // DEBUG()\r
+#include <Library/PcdLib.h> // PcdGet32()\r
\r
#include "AcpiPlatform.h"\r
\r
EFI_STATUS Status;\r
UINTN TableHandle;\r
\r
- EFI_ACPI_DESCRIPTION_HEADER *Xsdt;\r
- VOID *CurrentTableEntry;\r
- UINTN CurrentTablePointer;\r
- EFI_ACPI_DESCRIPTION_HEADER *CurrentTable;\r
- UINTN Index;\r
- UINTN NumberOfTableEntries;\r
- EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE *Fadt2Table;\r
- EFI_ACPI_DESCRIPTION_HEADER *DsdtTable;\r
+ EFI_ACPI_DESCRIPTION_HEADER *Xsdt;\r
+ VOID *CurrentTableEntry;\r
+ UINTN CurrentTablePointer;\r
+ EFI_ACPI_DESCRIPTION_HEADER *CurrentTable;\r
+ UINTN Index;\r
+ UINTN NumberOfTableEntries;\r
+ EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE *Fadt2Table;\r
+ EFI_ACPI_DESCRIPTION_HEADER *DsdtTable;\r
+ EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER *AcpiRsdpStructurePtr;\r
+ UINT32 *PVHResetVectorData;\r
+ struct hvm_start_info *pvh_start_info;\r
\r
Fadt2Table = NULL;\r
DsdtTable = NULL;\r
TableHandle = 0;\r
NumberOfTableEntries = 0;\r
- EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER *AcpiRsdpStructurePtr = (VOID *)CLOUDHV_RSDP_ADDRESS;\r
+ AcpiRsdpStructurePtr = NULL;\r
+ PVHResetVectorData = NULL;\r
+ pvh_start_info = NULL;\r
+\r
+ PVHResetVectorData = (VOID *)(UINTN)PcdGet32 (PcdXenPvhStartOfDayStructPtr);\r
+ if (PVHResetVectorData == 0) {\r
+ return EFI_NOT_FOUND;\r
+ }\r
+\r
+ pvh_start_info = (struct hvm_start_info *)(UINTN)PVHResetVectorData[0];\r
+ AcpiRsdpStructurePtr = (EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER *)(UINTN)pvh_start_info->rsdp_paddr;\r
\r
// If XSDT table is found, just install its tables.\r
// Otherwise, try to find and install the RSDT tables.\r