mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-27 07:34:06 +02:00
OvmfPkg: CloudHv: Retrieve RSDP address from PVH
Instead of hardcoding the address of the RSDP in the firmware, let's rely on the PVH structure hvm_start_info to retrieve this information. Acked-by: Gerd Hoffmann <kraxel@redhat.com> Signed-off-by: Sebastien Boeuf <sebastien.boeuf@intel.com> Reviewed-by: Jiewen Yao <jiewen.yao@intel.com>
This commit is contained in:
parent
e1c7f9b4e5
commit
d50d9e5549
@ -56,6 +56,8 @@
|
|||||||
[Pcd]
|
[Pcd]
|
||||||
gEfiMdeModulePkgTokenSpaceGuid.PcdPciDisableBusEnumeration
|
gEfiMdeModulePkgTokenSpaceGuid.PcdPciDisableBusEnumeration
|
||||||
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfHostBridgePciDevId
|
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfHostBridgePciDevId
|
||||||
|
gUefiOvmfPkgTokenSpaceGuid.PcdXenPvhStartOfDayStructPtr
|
||||||
|
gUefiOvmfPkgTokenSpaceGuid.PcdXenPvhStartOfDayStructPtrSize
|
||||||
|
|
||||||
[Depex]
|
[Depex]
|
||||||
gEfiAcpiTableProtocolGuid
|
gEfiAcpiTableProtocolGuid
|
||||||
|
@ -7,9 +7,11 @@
|
|||||||
|
|
||||||
**/
|
**/
|
||||||
|
|
||||||
#include <IndustryStandard/CloudHv.h> // CLOUDHV_RSDP_ADDRESS
|
#include <IndustryStandard/CloudHv.h> // CLOUDHV_RSDP_ADDRESS
|
||||||
#include <Library/BaseLib.h> // CpuDeadLoop()
|
#include <IndustryStandard/Xen/arch-x86/hvm/start_info.h> // hvm_start_info
|
||||||
#include <Library/DebugLib.h> // DEBUG()
|
#include <Library/BaseLib.h> // CpuDeadLoop()
|
||||||
|
#include <Library/DebugLib.h> // DEBUG()
|
||||||
|
#include <Library/PcdLib.h> // PcdGet32()
|
||||||
|
|
||||||
#include "AcpiPlatform.h"
|
#include "AcpiPlatform.h"
|
||||||
|
|
||||||
@ -23,20 +25,33 @@ InstallCloudHvTables (
|
|||||||
EFI_STATUS Status;
|
EFI_STATUS Status;
|
||||||
UINTN TableHandle;
|
UINTN TableHandle;
|
||||||
|
|
||||||
EFI_ACPI_DESCRIPTION_HEADER *Xsdt;
|
EFI_ACPI_DESCRIPTION_HEADER *Xsdt;
|
||||||
VOID *CurrentTableEntry;
|
VOID *CurrentTableEntry;
|
||||||
UINTN CurrentTablePointer;
|
UINTN CurrentTablePointer;
|
||||||
EFI_ACPI_DESCRIPTION_HEADER *CurrentTable;
|
EFI_ACPI_DESCRIPTION_HEADER *CurrentTable;
|
||||||
UINTN Index;
|
UINTN Index;
|
||||||
UINTN NumberOfTableEntries;
|
UINTN NumberOfTableEntries;
|
||||||
EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE *Fadt2Table;
|
EFI_ACPI_2_0_FIXED_ACPI_DESCRIPTION_TABLE *Fadt2Table;
|
||||||
EFI_ACPI_DESCRIPTION_HEADER *DsdtTable;
|
EFI_ACPI_DESCRIPTION_HEADER *DsdtTable;
|
||||||
|
EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER *AcpiRsdpStructurePtr;
|
||||||
|
UINT32 *PVHResetVectorData;
|
||||||
|
struct hvm_start_info *pvh_start_info;
|
||||||
|
|
||||||
Fadt2Table = NULL;
|
Fadt2Table = NULL;
|
||||||
DsdtTable = NULL;
|
DsdtTable = NULL;
|
||||||
TableHandle = 0;
|
TableHandle = 0;
|
||||||
NumberOfTableEntries = 0;
|
NumberOfTableEntries = 0;
|
||||||
EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER *AcpiRsdpStructurePtr = (VOID *)CLOUDHV_RSDP_ADDRESS;
|
AcpiRsdpStructurePtr = NULL;
|
||||||
|
PVHResetVectorData = NULL;
|
||||||
|
pvh_start_info = NULL;
|
||||||
|
|
||||||
|
PVHResetVectorData = (VOID *)(UINTN)PcdGet32 (PcdXenPvhStartOfDayStructPtr);
|
||||||
|
if (PVHResetVectorData == 0) {
|
||||||
|
return EFI_NOT_FOUND;
|
||||||
|
}
|
||||||
|
|
||||||
|
pvh_start_info = (struct hvm_start_info *)(UINTN)PVHResetVectorData[0];
|
||||||
|
AcpiRsdpStructurePtr = (EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER *)(UINTN)pvh_start_info->rsdp_paddr;
|
||||||
|
|
||||||
// If XSDT table is found, just install its tables.
|
// If XSDT table is found, just install its tables.
|
||||||
// Otherwise, try to find and install the RSDT tables.
|
// Otherwise, try to find and install the RSDT tables.
|
||||||
|
@ -73,6 +73,9 @@ gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSnpSecretsBase|gUefiOvmfPkgTokenSpaceGuid.PcdO
|
|||||||
0x00E000|0x001000
|
0x00E000|0x001000
|
||||||
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfCpuidBase|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfCpuidSize
|
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfCpuidBase|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfCpuidSize
|
||||||
|
|
||||||
|
0x00F000|0x001000
|
||||||
|
gUefiOvmfPkgTokenSpaceGuid.PcdXenPvhStartOfDayStructPtr|gUefiOvmfPkgTokenSpaceGuid.PcdXenPvhStartOfDayStructPtrSize
|
||||||
|
|
||||||
0x010000|0x010000
|
0x010000|0x010000
|
||||||
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPeiTempRamBase|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPeiTempRamSize
|
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPeiTempRamBase|gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPeiTempRamSize
|
||||||
|
|
||||||
|
@ -38,9 +38,4 @@
|
|||||||
//
|
//
|
||||||
#define CLOUDHV_SMBIOS_ADDRESS 0xf0000
|
#define CLOUDHV_SMBIOS_ADDRESS 0xf0000
|
||||||
|
|
||||||
//
|
|
||||||
// RSDP address
|
|
||||||
//
|
|
||||||
#define CLOUDHV_RSDP_ADDRESS 0xa0000
|
|
||||||
|
|
||||||
#endif // __CLOUDHV_H__
|
#endif // __CLOUDHV_H__
|
||||||
|
Loading…
x
Reference in New Issue
Block a user