LIST_ENTRY *NextChildNodeLink;\r
PCI_RESOURCE_NODE *ResourceNode;\r
\r
- //\r
- // If any child device has both option ROM and 64-bit BAR, degrade its PMEM64/MEM64\r
- // requests in case that if a legacy option ROM image can not access 64-bit resources.\r
- //\r
- ChildDeviceLink = Bridge->ChildList.ForwardLink;\r
- while (ChildDeviceLink != NULL && ChildDeviceLink != &Bridge->ChildList) {\r
- PciIoDevice = PCI_IO_DEVICE_FROM_LINK (ChildDeviceLink);\r
- if (PciIoDevice->RomSize != 0) {\r
- if (!IsListEmpty (&Mem64Node->ChildList)) { \r
- ChildNodeLink = Mem64Node->ChildList.ForwardLink;\r
- while (ChildNodeLink != &Mem64Node->ChildList) {\r
- ResourceNode = RESOURCE_NODE_FROM_LINK (ChildNodeLink);\r
- NextChildNodeLink = ChildNodeLink->ForwardLink;\r
-\r
- if (ResourceNode->PciDev == PciIoDevice) {\r
- RemoveEntryList (ChildNodeLink);\r
- InsertResourceNode (Mem32Node, ResourceNode);\r
+ if (FeaturePcdGet (PcdPciDegradeResourceForOptionRom)) {\r
+ //\r
+ // If any child device has both option ROM and 64-bit BAR, degrade its PMEM64/MEM64\r
+ // requests in case that if a legacy option ROM image can not access 64-bit resources.\r
+ //\r
+ ChildDeviceLink = Bridge->ChildList.ForwardLink;\r
+ while (ChildDeviceLink != NULL && ChildDeviceLink != &Bridge->ChildList) {\r
+ PciIoDevice = PCI_IO_DEVICE_FROM_LINK (ChildDeviceLink);\r
+ if (PciIoDevice->RomSize != 0) {\r
+ if (!IsListEmpty (&Mem64Node->ChildList)) {\r
+ ChildNodeLink = Mem64Node->ChildList.ForwardLink;\r
+ while (ChildNodeLink != &Mem64Node->ChildList) {\r
+ ResourceNode = RESOURCE_NODE_FROM_LINK (ChildNodeLink);\r
+ NextChildNodeLink = ChildNodeLink->ForwardLink;\r
+\r
+ if ((ResourceNode->PciDev == PciIoDevice) &&\r
+ (ResourceNode->Virtual || !PciIoDevice->PciBar[ResourceNode->Bar].BarTypeFixed)\r
+ ) {\r
+ RemoveEntryList (ChildNodeLink);\r
+ InsertResourceNode (Mem32Node, ResourceNode);\r
+ }\r
+ ChildNodeLink = NextChildNodeLink;\r
}\r
- ChildNodeLink = NextChildNodeLink;\r
- } \r
- }\r
-\r
- if (!IsListEmpty (&PMem64Node->ChildList)) { \r
- ChildNodeLink = PMem64Node->ChildList.ForwardLink;\r
- while (ChildNodeLink != &PMem64Node->ChildList) {\r
- ResourceNode = RESOURCE_NODE_FROM_LINK (ChildNodeLink);\r
- NextChildNodeLink = ChildNodeLink->ForwardLink;\r
+ }\r
\r
- if (ResourceNode->PciDev == PciIoDevice) {\r
- RemoveEntryList (ChildNodeLink);\r
- InsertResourceNode (PMem32Node, ResourceNode);\r
+ if (!IsListEmpty (&PMem64Node->ChildList)) {\r
+ ChildNodeLink = PMem64Node->ChildList.ForwardLink;\r
+ while (ChildNodeLink != &PMem64Node->ChildList) {\r
+ ResourceNode = RESOURCE_NODE_FROM_LINK (ChildNodeLink);\r
+ NextChildNodeLink = ChildNodeLink->ForwardLink;\r
+\r
+ if ((ResourceNode->PciDev == PciIoDevice) &&\r
+ (ResourceNode->Virtual || !PciIoDevice->PciBar[ResourceNode->Bar].BarTypeFixed)\r
+ ) {\r
+ RemoveEntryList (ChildNodeLink);\r
+ InsertResourceNode (PMem32Node, ResourceNode);\r
+ }\r
+ ChildNodeLink = NextChildNodeLink;\r
}\r
- ChildNodeLink = NextChildNodeLink;\r
- } \r
- }\r
+ }\r
\r
+ }\r
+ ChildDeviceLink = ChildDeviceLink->ForwardLink;\r
}\r
- ChildDeviceLink = ChildDeviceLink->ForwardLink;\r
}\r
\r
//\r