add logic to check PCI device has option rom when degrading PCI resources. If one...
authorvanjeff <vanjeff@de2fecce-e211-0410-80a6-f3fac2684e05>
Wed, 23 Jul 2008 02:54:38 +0000 (02:54 +0000)
committervanjeff <vanjeff@de2fecce-e211-0410-80a6-f3fac2684e05>
Wed, 23 Jul 2008 02:54:38 +0000 (02:54 +0000)
git-svn-id: https://edk2.tianocore.org/svn/edk2/trunk@5550 de2fecce-e211-0410-80a6-f3fac2684e05

edk2/IntelFrameworkModulePkg/Bus/Pci/PciBusDxe/PciResourceSupport.c

index a827bab..d8ebadf 100644 (file)
@@ -1,6 +1,6 @@
 /**@file\r
 \r
-Copyright (c) 2006 - 2007, Intel Corporation\r
+Copyright (c) 2006 - 2008, Intel Corporation\r
 All rights reserved. This program and the accompanying materials\r
 are licensed and made available under the terms and conditions of the BSD License\r
 which accompanies this distribution.  The full text of the license may be found at\r
@@ -913,6 +913,25 @@ DegradeResource (
   IN PCI_RESOURCE_NODE *PMem64Node\r
   )\r
 {\r
+  BOOLEAN              HasOprom;\r
+  PCI_IO_DEVICE        *Temp;\r
+  LIST_ENTRY           *CurrentLink;\r
+\r
+  //\r
+  // For RootBridge, PPB , P2C, go recursively to traverse all its children\r
+  // to find if this bridge and downstream has OptionRom.\r
+  // \r
+  HasOprom = FALSE;\r
+  CurrentLink = Bridge->ChildList.ForwardLink;\r
+  while (CurrentLink && CurrentLink != &Bridge->ChildList) {\r
+\r
+    Temp = PCI_IO_DEVICE_FROM_LINK (CurrentLink);\r
+    if (Temp->RomSize != 0) {\r
+      HasOprom = TRUE;\r
+      break;\r
+    }    \r
+    CurrentLink = CurrentLink->ForwardLink;\r
+  }  \r
 \r
   //\r
   // If bridge doesn't support Prefetchable\r
@@ -926,9 +945,9 @@ DegradeResource (
       );\r
   } else {\r
     //\r
-    // if no PMem32 request, still keep PMem64. Otherwise degrade to PMem32\r
+    // if no PMem32 request and no OptionRom request, still keep PMem64. Otherwise degrade to PMem32\r
     //\r
-    if (PMem32Node != NULL && PMem32Node->Length != 0 && Bridge->Parent != NULL ) { \r
+    if ((PMem32Node != NULL && (PMem32Node->Length != 0 && Bridge->Parent != NULL)) || HasOprom) { \r
       //\r
       // Fixed the issue that there is no resource for 64-bit (above 4G)\r
       //\r