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?
I don't know. It seems not going to happen in the short term.

> 
> > 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 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.
> 
Sounds a good plan. I will amend my patch to make use of XenDetected.

Thanks,

Gary Lin

> -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

Reply via email to