On Tue, May 31, 2016 at 12:21:45AM -0700, Jordan Justen wrote:
> On 2016-05-30 20:19:42, Gary Lin wrote:
> > When OVMF tried to load the file-based NvVars,
>
> Tangent: Will Xen ever add a r/w flash emulation for variables like
> QEMU/KVM?
>
> > it checked all the PCI
> > instances and connected the drivers to the mass storage device. However,
> > Xen registered its PCI device with a special class id (0xFF80), so
> > ConnectRecursivelyIfPciMassStorage() couldn't recognize it and skipped the
> > driver connecting for Xen PCI devices. In the end, the Xen block device
> > wasn't initialized until EfiBootManagerConnectAll() was called, and it's
> > already too late to load NvVars.
> >
> > This commit connects the Xen drivers in ConnectRecursivelyIfPciMassStorage()
> > so that Xen can use the file-based NvVars.
> >
> > Cc: Jordan Justen <[email protected]>
> > Cc: Laszlo Ersek <[email protected]>
> > Contributed-under: TianoCore Contribution Agreement 1.0
> > Signed-off-by: Gary Lin <[email protected]>
> > ---
> > OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c | 12
> > ++++++++++--
> > .../PlatformBootManagerLib/PlatformBootManagerLib.inf | 1 +
> > 2 files changed, 11 insertions(+), 2 deletions(-)
> >
> > diff --git a/OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c
> > b/OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c
> > index befcc57..249b8bc 100644
> > --- a/OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c
> > +++ b/OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c
> > @@ -1049,8 +1049,15 @@ ConnectRecursivelyIfPciMassStorage (
> > EFI_STATUS Status;
> > EFI_DEVICE_PATH_PROTOCOL *DevicePath;
> > CHAR16 *DevPathStr;
> > + BOOLEAN IsPciMassStorage;
> >
>
> I don't think the debug message change is worth adding this variable.
>
> > - if (IS_CLASS1 (PciHeader, PCI_CLASS_MASS_STORAGE)) {
> > + IsPciMassStorage = IS_CLASS1 (PciHeader, PCI_CLASS_MASS_STORAGE);
> > + //
> > + // Recognize PCI Mass Storage, and Xen PCI devices
> > + //
> > + if (IsPciMassStorage ||
> > + (PcdGetBool (PcdPciDisableBusEnumeration) &&
>
> How about instead get XenDetected from OvmfPkg/AcpiPlatformDxe/Xen.c?
> Then use that rather than PcdPciDisableBusEnumeration?
>
I didn't notice that XenDetected is in AcpiPlatformDxe until I started
to implement the code. Is there any suggested library to move XenDetected
to? A standalone header/library for the function seems too much but I
didn't feel it belongs to any existed libraries in OvmfPkg.
Thanks,
Gary Lin
> I think XenDetected could be improved for multiple uses by adding a
> static INTN:
>
> * Initialize to -1, for need to locate HOB
>
> * 0 for Xen is not detected
>
> * 1 for Xen is detected.
>
> -Jordan
>
> > + IS_CLASS2 (PciHeader, 0xFF, 0x80))) {
> > DevicePath = NULL;
> > Status = gBS->HandleProtocol (
> > Handle,
> > @@ -1068,7 +1075,8 @@ ConnectRecursivelyIfPciMassStorage (
> > if (DevPathStr != NULL) {
> > DEBUG((
> > EFI_D_INFO,
> > - "Found Mass Storage device: %s\n",
> > + "Found %s device: %s\n",
> > + IsPciMassStorage ? L"Mass Storage" : L"Xen",
> > DevPathStr
> > ));
> > FreePool(DevPathStr);
> > diff --git
> > a/OvmfPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf
> > b/OvmfPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf
> > index 5fcee3c..cd28be0 100644
> > --- a/OvmfPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf
> > +++ b/OvmfPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf
> > @@ -62,6 +62,7 @@ [Pcd]
> > gUefiOvmfPkgTokenSpaceGuid.PcdOvmfHostBridgePciDevId
> > gEfiMdePkgTokenSpaceGuid.PcdPlatformBootTimeOut
> > gEfiIntelFrameworkModulePkgTokenSpaceGuid.PcdShellFile
> > + gEfiMdeModulePkgTokenSpaceGuid.PcdPciDisableBusEnumeration
> >
> > [Pcd.IA32, Pcd.X64]
> > gEfiMdePkgTokenSpaceGuid.PcdFSBClock
> > --
> > 2.8.3
> >
>
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel