Message ID | 20190704144233.27968-16-anthony.perard@citrix.com (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | Specific platform to run OVMF in Xen PVH and HVM guests | expand |
On 07/04/19 16:42, Anthony PERARD wrote: > If the firmware have been started via the Xen PVH entry point, a RSDP > pointer would have been provided. Use it. > > Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=1689 > Signed-off-by: Anthony PERARD <anthony.perard@citrix.com> > --- > > Notes: > v3: > - patch splited from the previous one > - Fix DEBUG format string, use %p for pointers. > and use gEfiCallerBaseName to print module name > > OvmfPkg/AcpiPlatformDxe/Xen.c | 17 +++++++++++++++++ > 1 file changed, 17 insertions(+) > > diff --git a/OvmfPkg/AcpiPlatformDxe/Xen.c b/OvmfPkg/AcpiPlatformDxe/Xen.c > index 82794b933e..376a6bd3cb 100644 > --- a/OvmfPkg/AcpiPlatformDxe/Xen.c > +++ b/OvmfPkg/AcpiPlatformDxe/Xen.c > @@ -36,10 +36,27 @@ GetXenAcpiRsdp ( > EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER *RsdpStructurePtr; > UINT8 *XenAcpiPtr; > UINT8 Sum; > + EFI_XEN_INFO *XenInfo; > > // > // Detect the RSDP structure > // > + > + // > + // First look for PVH one > + // > + XenInfo = XenGetInfoHOB (); > + ASSERT (XenInfo != NULL); > + if (XenInfo->RsdpPvh != NULL) { > + DEBUG ((DEBUG_INFO, "%a: Use ACPI RSDP table at 0x%p\n", > + gEfiCallerBaseName, XenInfo->RsdpPvh)); (1) Please fix the indentation here; "gEfiCallerBaseName" should start under the "B" in "DEBUG". With that updated: Reviewed-by: Laszlo Ersek <lersek@redhat.com> Thanks Laszlo > + *RsdpPtr = XenInfo->RsdpPvh; > + return EFI_SUCCESS; > + } > + > + // > + // Otherwise, look for the HVM one > + // > for (XenAcpiPtr = (UINT8*)(UINTN) XEN_ACPI_PHYSICAL_ADDRESS; > XenAcpiPtr < (UINT8*)(UINTN) XEN_BIOS_PHYSICAL_END; > XenAcpiPtr += 0x10) { >
diff --git a/OvmfPkg/AcpiPlatformDxe/Xen.c b/OvmfPkg/AcpiPlatformDxe/Xen.c index 82794b933e..376a6bd3cb 100644 --- a/OvmfPkg/AcpiPlatformDxe/Xen.c +++ b/OvmfPkg/AcpiPlatformDxe/Xen.c @@ -36,10 +36,27 @@ GetXenAcpiRsdp ( EFI_ACPI_2_0_ROOT_SYSTEM_DESCRIPTION_POINTER *RsdpStructurePtr; UINT8 *XenAcpiPtr; UINT8 Sum; + EFI_XEN_INFO *XenInfo; // // Detect the RSDP structure // + + // + // First look for PVH one + // + XenInfo = XenGetInfoHOB (); + ASSERT (XenInfo != NULL); + if (XenInfo->RsdpPvh != NULL) { + DEBUG ((DEBUG_INFO, "%a: Use ACPI RSDP table at 0x%p\n", + gEfiCallerBaseName, XenInfo->RsdpPvh)); + *RsdpPtr = XenInfo->RsdpPvh; + return EFI_SUCCESS; + } + + // + // Otherwise, look for the HVM one + // for (XenAcpiPtr = (UINT8*)(UINTN) XEN_ACPI_PHYSICAL_ADDRESS; XenAcpiPtr < (UINT8*)(UINTN) XEN_BIOS_PHYSICAL_END; XenAcpiPtr += 0x10) {
If the firmware have been started via the Xen PVH entry point, a RSDP pointer would have been provided. Use it. Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=1689 Signed-off-by: Anthony PERARD <anthony.perard@citrix.com> --- Notes: v3: - patch splited from the previous one - Fix DEBUG format string, use %p for pointers. and use gEfiCallerBaseName to print module name OvmfPkg/AcpiPlatformDxe/Xen.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+)