]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OvmfPkg/PciHostBridgeDxe/PciRootBridgeIo.c
OvmfPkg: PciHostBridgeDxe: use private buffer in RootBridgeIoConfiguration()
[mirror_edk2.git] / OvmfPkg / PciHostBridgeDxe / PciRootBridgeIo.c
index 5de28b18eb03914ba9d3b1e41709b32b97fe5cd7..c61fd1d7db6ba6290a4e47206a64560ca38385a0 100644 (file)
@@ -1,6 +1,7 @@
 /** @file\r
   PCI Root Bridge Io Protocol implementation\r
 \r
+  Copyright (C) 2015, Red Hat, Inc.\r
   Copyright (c) 2008 - 2012, Intel Corporation. All rights reserved.<BR>\r
 \r
   This program and the accompanying materials are licensed and made available\r
 #include "PciHostBridge.h"\r
 #include "IoFifo.h"\r
 \r
-typedef struct {\r
-  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR     SpaceDesp[TypeMax];\r
-  EFI_ACPI_END_TAG_DESCRIPTOR           EndDesp;\r
-} RESOURCE_CONFIGURATION;\r
-\r
-RESOURCE_CONFIGURATION Configuration = {\r
-  {{0x8A, 0x2B, 1, 0, 0, 0, 0, 0, 0, 0},\r
-  {0x8A, 0x2B, 0, 0, 0, 32, 0, 0, 0, 0},\r
-  {0x8A, 0x2B, 0, 0, 6, 32, 0, 0, 0, 0},\r
-  {0x8A, 0x2B, 0, 0, 0, 64, 0, 0, 0, 0},\r
-  {0x8A, 0x2B, 0, 0, 6, 64, 0, 0, 0, 0},\r
-  {0x8A, 0x2B, 2, 0, 0, 0, 0, 0, 0, 0}},\r
-  {0x79, 0}\r
+STATIC\r
+CONST\r
+RESOURCE_CONFIGURATION mConfigurationTemplate = {\r
+  {\r
+    { 0x8A, 0x2B, 1, 0, 0,  0, 0, 0, 0, 0 }, // SpaceDesc[TypeIo]\r
+    { 0x8A, 0x2B, 0, 0, 0, 32, 0, 0, 0, 0 }, // SpaceDesc[TypeMem32]\r
+    { 0x8A, 0x2B, 0, 0, 6, 32, 0, 0, 0, 0 }, // SpaceDesc[TypePMem32]\r
+    { 0x8A, 0x2B, 0, 0, 0, 64, 0, 0, 0, 0 }, // SpaceDesc[TypeMem64]\r
+    { 0x8A, 0x2B, 0, 0, 6, 64, 0, 0, 0, 0 }, // SpaceDesc[TypePMem64]\r
+    { 0x8A, 0x2B, 2, 0, 0,  0, 0, 0, 0, 0 }  // SpaceDesc[TypeBus]\r
+  },\r
+  { 0x79, 0 }                                // EndDesc\r
 };\r
 \r
 //\r
@@ -2607,12 +2607,14 @@ RootBridgeIoConfiguration (
   UINTN                                 Index;\r
 \r
   PrivateData = DRIVER_INSTANCE_FROM_PCI_ROOT_BRIDGE_IO_THIS (This);\r
+  CopyMem (&PrivateData->ConfigBuffer, &mConfigurationTemplate,\r
+    sizeof mConfigurationTemplate);\r
 \r
   for (Index = 0; Index < TypeMax; Index++) {\r
     if (PrivateData->ResAllocNode[Index].Status == ResAllocated) {\r
       EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *Desc;\r
 \r
-      Desc = &Configuration.SpaceDesp[Index];\r
+      Desc = &PrivateData->ConfigBuffer.SpaceDesc[Index];\r
       Desc->AddrRangeMin = PrivateData->ResAllocNode[Index].Base;\r
       Desc->AddrRangeMax = PrivateData->ResAllocNode[Index].Base +\r
                            PrivateData->ResAllocNode[Index].Length - 1;\r
@@ -2620,7 +2622,7 @@ RootBridgeIoConfiguration (
     }\r
   }\r
 \r
-  *Resources = &Configuration;\r
+  *Resources = &PrivateData->ConfigBuffer;\r
   return EFI_SUCCESS;\r
 }\r
 \r