Some software would like to watch for
gEfiPciEnumerationCompleteProtocolGuid to be installed, but when
PcdPciDisableBusEnumeration was enabled, we would not install the
protocol.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Jordan Justen <[email protected]>
Cc: Feng Tian <[email protected]>
Cc: Wei Liu <[email protected]>
---
 Wei: Does this also fix the issue for you?
 https://github.com/jljusten/edk2.git xen-pci-complete

 MdeModulePkg/Bus/Pci/PciBusDxe/PciBus.c        |  6 +---
 MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumerator.c | 46 ++++++++++++++++++++++----
 2 files changed, 40 insertions(+), 12 deletions(-)

diff --git a/MdeModulePkg/Bus/Pci/PciBusDxe/PciBus.c 
b/MdeModulePkg/Bus/Pci/PciBusDxe/PciBus.c
index 2252235..5afbb82 100644
--- a/MdeModulePkg/Bus/Pci/PciBusDxe/PciBus.c
+++ b/MdeModulePkg/Bus/Pci/PciBusDxe/PciBus.c
@@ -284,11 +284,7 @@ PciBusDriverBindingStart (
           );
   }  
 
-  if (PcdGetBool (PcdPciDisableBusEnumeration)) {
-    gFullEnumeration = FALSE;
-  } else {
-    gFullEnumeration = (BOOLEAN) ((SearchHostBridgeHandle (Controller) ? FALSE 
: TRUE));
-  }
+  gFullEnumeration = (BOOLEAN) ((SearchHostBridgeHandle (Controller) ? FALSE : 
TRUE));
 
   //
   // Open Device Path Protocol for PCI root bridge
diff --git a/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumerator.c 
b/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumerator.c
index 7329143..ca4963b 100644
--- a/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumerator.c
+++ b/MdeModulePkg/Bus/Pci/PciBusDxe/PciEnumerator.c
@@ -1,7 +1,7 @@
 /** @file
   PCI eunmeration implementation on entire PCI bus system for PCI Bus module.
 
-Copyright (c) 2006 - 2013, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>
 This program and the accompanying materials
 are licensed and made available under the terms and conditions of the BSD 
License
 which accompanies this distribution.  The full text of the license may be 
found at
@@ -15,6 +15,28 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER 
EXPRESS OR IMPLIED.
 #include "PciBus.h"
 
 /**
+  Installs gEfiPciEnumerationCompleteProtocolGuid on the given handle.
+
+  @param Handle  Handle of device to install the protocol on.
+
+  @retval EFI_SUCCESS    The protocol was installed successfully.
+  @retval other          Some error occurred when installing the protocol.
+
+**/
+EFI_STATUS
+InstallEnumerationCompleteProtocol (
+  IN EFI_HANDLE  Handle
+  )
+{
+  return gBS->InstallProtocolInterface (
+                &Handle,
+                &gEfiPciEnumerationCompleteProtocolGuid,
+                EFI_NATIVE_INTERFACE,
+                NULL
+                );
+}
+
+/**
   This routine is used to enumerate entire pci bus system
   in a given platform.
 
@@ -63,6 +85,21 @@ PciEnumerator (
   HostBridgeHandle = PciRootBridgeIo->ParentHandle;
 
   //
+  // PcdPciDisableBusEnumeration can be used to skip full enumeration,
+  // but we still install gEfiPciEnumerationCompleteProtocolGuid.
+  //
+  if (PcdGetBool (PcdPciDisableBusEnumeration)) {
+    Status = PciEnumeratorLight (Controller);
+    if (EFI_ERROR (Status)) {
+      return Status;
+    }
+
+    gFullEnumeration = FALSE;
+
+    return InstallEnumerationCompleteProtocol (HostBridgeHandle);
+  }
+
+  //
   // Get the pci host bridge resource allocation protocol
   //
   Status = gBS->OpenProtocol (
@@ -133,12 +170,7 @@ PciEnumerator (
 
   gFullEnumeration = FALSE;
 
-  Status = gBS->InstallProtocolInterface (
-                  &HostBridgeHandle,
-                  &gEfiPciEnumerationCompleteProtocolGuid,
-                  EFI_NATIVE_INTERFACE,
-                  NULL
-                  );
+  Status = InstallEnumerationCompleteProtocol (HostBridgeHandle);
   if (EFI_ERROR (Status)) {
     return Status;
   }
-- 
2.1.4


------------------------------------------------------------------------------
Dive into the World of Parallel Programming. The Go Parallel Website,
sponsored by Intel and developed in partnership with Slashdot Media, is your
hub for all things parallel software development, from weekly thought
leadership blogs to news, videos, case studies, tutorials and more. Take a
look and join the conversation now. http://goparallel.sourceforge.net/
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-devel

Reply via email to