Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP3:GA
ovmf.3457
ovmf-bsc982193-connect-xen-drivers.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File ovmf-bsc982193-connect-xen-drivers.patch of Package ovmf.3457
From da2369d21d2e57a0de8fa7ae954812122c87326e Mon Sep 17 00:00:00 2001 From: Gary Lin <glin@suse.com> Date: Wed, 1 Jun 2016 18:26:20 +0800 Subject: [PATCH] OvmfPkg/PlatformBootManagerLib: Connect the Xen drivers before loading NvVars When OVMF tried to load the file-based NvVars, 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. v3: * Introduce XenDetected() to cache the result of Xen detection instead of relying on PcdPciDisableBusEnumeration. v2: * Cosmetic changes Cc: Jordan Justen <jordan.l.justen@intel.com> Cc: Laszlo Ersek <lersek@redhat.com> Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Gary Lin <glin@suse.com> Reviewed-by: Jordan Justen <jordan.l.justen@intel.com> --- .../Library/PlatformBootManagerLib/BdsPlatform.c | 41 ++++++++++++++++++++-- .../PlatformBootManagerLib.inf | 1 + 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c b/OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c index befcc57..912c5ed 100644 --- a/OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c +++ b/OvmfPkg/Library/PlatformBootManagerLib/BdsPlatform.c @@ -13,6 +13,7 @@ **/ #include "BdsPlatform.h" +#include <Guid/XenInfo.h> #include <Guid/RootBridgesConnectedEventGroup.h> @@ -1037,6 +1038,37 @@ PciAcpiInitialization ( IoOr16 ((PciRead32 (Pmba) & ~BIT0) + 4, BIT0); } +/** + This function detects if OVMF is running on Xen. + +**/ +STATIC +BOOLEAN +XenDetected ( + VOID + ) +{ + EFI_HOB_GUID_TYPE *GuidHob; + STATIC INTN FoundHob = -1; + + if (FoundHob == 0) { + return FALSE; + } else if (FoundHob == 1) { + return TRUE; + } + + // + // See if a XenInfo HOB is available + // + GuidHob = GetFirstGuidHob (&gEfiXenInfoGuid); + if (GuidHob == NULL) { + FoundHob = 0; + return FALSE; + } + + FoundHob = 1; + return TRUE; +} EFI_STATUS EFIAPI @@ -1050,7 +1082,11 @@ ConnectRecursivelyIfPciMassStorage ( EFI_DEVICE_PATH_PROTOCOL *DevicePath; CHAR16 *DevPathStr; - if (IS_CLASS1 (PciHeader, PCI_CLASS_MASS_STORAGE)) { + // + // Recognize PCI Mass Storage, and Xen PCI devices + // + if (IS_CLASS1 (PciHeader, PCI_CLASS_MASS_STORAGE) || + (XenDetected() && IS_CLASS2 (PciHeader, 0xFF, 0x80))) { DevicePath = NULL; Status = gBS->HandleProtocol ( Handle, @@ -1068,7 +1104,8 @@ ConnectRecursivelyIfPciMassStorage ( if (DevPathStr != NULL) { DEBUG(( EFI_D_INFO, - "Found Mass Storage device: %s\n", + "Found %s device: %s\n", + IS_CLASS1 (PciHeader, PCI_CLASS_MASS_STORAGE) ? L"Mass Storage" : L"Xen", DevPathStr )); FreePool(DevPathStr); diff --git a/OvmfPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf b/OvmfPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf index 5fcee3c..ffa1288 100644 --- a/OvmfPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf +++ b/OvmfPkg/Library/PlatformBootManagerLib/PlatformBootManagerLib.inf @@ -74,5 +74,6 @@ [Protocols] gEfiLoadedImageProtocolGuid # PROTOCOL SOMETIMES_PRODUCED [Guids] + gEfiXenInfoGuid gEfiEndOfDxeEventGroupGuid gRootBridgesConnectedEventGroupGuid -- 2.8.3
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor