]> git.proxmox.com Git - mirror_edk2.git/commitdiff
OvmfPkg: PciHostBridgeDxe: embed device path in private root bridge struct
authorLaszlo Ersek <lersek@redhat.com>
Tue, 14 Jul 2015 12:02:06 +0000 (12:02 +0000)
committerlersek <lersek@Edk2>
Tue, 14 Jul 2015 12:02:06 +0000 (12:02 +0000)
Currently we define a device path for each root bridge statically (for all
one of them). Since we'll want to create a dynamic number of root bridges,
replace the static device paths with a common template, embed the actual
device path into the private root bridge structure, and distinguish the
device paths from each other in the UID field (as required by ACPI).

This patch is best viewed with "git show -b".

Cc: Jordan Justen <jordan.l.justen@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Regression-tested-by: Gabriel Somlo <somlo@cmu.edu>
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17957 6f19259b-4bc3-4df7-8a09-765794883524

OvmfPkg/PciHostBridgeDxe/PciHostBridge.c
OvmfPkg/PciHostBridgeDxe/PciHostBridge.h

index 985290928d97b4e661037e271d556a81706f9b3b..c2277bfca352e745f80dd64bdc1c1de457e938f3 100644 (file)
 \r
 #include "PciHostBridge.h"\r
 \r
-//\r
-// Hard code: Root Bridge's device path\r
-//            Root Bridge's resource aperture\r
-//\r
-\r
-EFI_PCI_ROOT_BRIDGE_DEVICE_PATH mEfiPciRootBridgeDevicePath[1] = {\r
+STATIC\r
+CONST\r
+EFI_PCI_ROOT_BRIDGE_DEVICE_PATH mRootBridgeDevicePathTemplate = {\r
   {\r
     {\r
+      ACPI_DEVICE_PATH,\r
+      ACPI_DP,\r
       {\r
-        ACPI_DEVICE_PATH,\r
-        ACPI_DP,\r
-        {\r
-          (UINT8) (sizeof(ACPI_HID_DEVICE_PATH)),\r
-          (UINT8) ((sizeof(ACPI_HID_DEVICE_PATH)) >> 8)\r
-        }\r
-      },\r
-      EISA_PNP_ID(0x0A03),\r
-      0\r
+        (UINT8) (sizeof(ACPI_HID_DEVICE_PATH)),\r
+        (UINT8) ((sizeof(ACPI_HID_DEVICE_PATH)) >> 8)\r
+      }\r
     },\r
+    EISA_PNP_ID(0x0A03), // HID\r
+    0                    // UID\r
+  },\r
 \r
+  {\r
+    END_DEVICE_PATH_TYPE,\r
+    END_ENTIRE_DEVICE_PATH_SUBTYPE,\r
     {\r
-      END_DEVICE_PATH_TYPE,\r
-      END_ENTIRE_DEVICE_PATH_SUBTYPE,\r
-      {\r
-        END_DEVICE_PATH_LENGTH,\r
-        0\r
-      }\r
+      END_DEVICE_PATH_LENGTH,\r
+      0\r
     }\r
   }\r
 };\r
 \r
+//\r
+// Hard code: Root Bridge's resource aperture\r
+//\r
+\r
 PCI_ROOT_BRIDGE_RESOURCE_APERTURE  mResAperture[1] = {\r
   {0, 0xff, 0x80000000, 0xffffffff, 0, 0xffff}\r
 };\r
@@ -135,8 +134,10 @@ InitializePciHostBridge (
     }\r
 \r
     PrivateData->Signature = PCI_ROOT_BRIDGE_SIGNATURE;\r
-    PrivateData->DevicePath =\r
-      (EFI_DEVICE_PATH_PROTOCOL *)&mEfiPciRootBridgeDevicePath[Loop2];\r
+\r
+    CopyMem (&PrivateData->DevicePath, &mRootBridgeDevicePathTemplate,\r
+      sizeof mRootBridgeDevicePathTemplate);\r
+    PrivateData->DevicePath.AcpiDevicePath.UID = Loop2;\r
 \r
     RootBridgeConstructor (\r
       &PrivateData->Io,\r
@@ -148,7 +149,7 @@ InitializePciHostBridge (
     Status = gBS->InstallMultipleProtocolInterfaces(\r
                     &PrivateData->Handle,\r
                     &gEfiDevicePathProtocolGuid,\r
-                    PrivateData->DevicePath,\r
+                    &PrivateData->DevicePath,\r
                     &gEfiPciRootBridgeIoProtocolGuid,\r
                     &PrivateData->Io,\r
                     NULL\r
index 28e0cd0e516ceed7c4a27719d98f1658a54fff28..05b8cecf80d4b88b9ed0058903f92f1640e7af4a 100644 (file)
@@ -1,6 +1,7 @@
 /** @file\r
   The Header file of the Pci Host Bridge Driver\r
 \r
+  Copyright (C) 2015, Red Hat, Inc.\r
   Copyright (c) 2008 - 2010, Intel Corporation. All rights reserved.<BR>\r
 \r
   This program and the accompanying materials are licensed and made available\r
@@ -605,7 +606,7 @@ typedef struct {
   UINT64                 MemLimit;\r
   UINT64                 IoLimit;\r
 \r
-  EFI_DEVICE_PATH_PROTOCOL                *DevicePath;\r
+  EFI_PCI_ROOT_BRIDGE_DEVICE_PATH         DevicePath;\r
   EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL         Io;\r
 \r
 } PCI_ROOT_BRIDGE_INSTANCE;\r