]> git.proxmox.com Git - mirror_edk2.git/commitdiff
PCI Bus Driver Enhancement
authorxli24 <xli24@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 28 Sep 2007 04:40:49 +0000 (04:40 +0000)
committerxli24 <xli24@6f19259b-4bc3-4df7-8a09-765794883524>
Fri, 28 Sep 2007 04:40:49 +0000 (04:40 +0000)
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@3960 6f19259b-4bc3-4df7-8a09-765794883524

IntelFrameworkModulePkg/Bus/Pci/PciBusDxe/PciEnumerator.c
IntelFrameworkModulePkg/Bus/Pci/PciBusDxe/PciEnumeratorSupport.c
IntelFrameworkModulePkg/Bus/Pci/PciBusDxe/PciLib.c
IntelFrameworkModulePkg/Bus/Pci/PciBusDxe/PciResourceSupport.h

index 988d301969d16f6bf05e7f1a65dbdaa8ddb53012..e0b6694ba2fa174bc0914ce82ccf840c19e1f7bf 100644 (file)
@@ -200,12 +200,21 @@ Returns:
   // Get the bus number to start with\r
   //\r
   StartBusNumber = (UINT8) (pConfiguration->AddrRangeMin);\r
+  PaddedBusRange  = (UINT8) (pConfiguration->AddrRangeMax);\r
 \r
   //\r
   // Initialize the subordinate bus number\r
   //\r
   SubBusNumber = StartBusNumber;\r
 \r
+  //\r
+  // Reset all assigned PCI bus number\r
+  //\r
+  ResetAllPpbBusNumber (\r
+    RootBridgeDev, \r
+    StartBusNumber\r
+  );\r
+\r
   //\r
   // Assign bus number\r
   //\r
index 432c6f77c36ab62c6be8cff9ed9c8d6a7fea9aee..4c9c800147655acca84c50d9b2a27a0201254b4b 100644 (file)
@@ -2161,7 +2161,7 @@ Returns:
 }\r
 \r
 EFI_STATUS\r
-ResetAllPpbBusReg (\r
+ResetAllPpbBusNumber (\r
   IN PCI_IO_DEVICE                      *Bridge,\r
   IN UINT8                              StartBusNumber\r
   )\r
@@ -2188,6 +2188,7 @@ Returns:
   UINT32                          Register;\r
   UINT8                           Func;\r
   UINT64                          Address;\r
+  UINT8                           SecondaryBus;\r
   EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *PciRootBridgeIo;\r
 \r
   PciRootBridgeIo = Bridge->PciRootBridgeIo;\r
@@ -2207,6 +2208,7 @@ Returns:
                 );\r
 \r
       if (!EFI_ERROR (Status) && (IS_PCI_BRIDGE (&Pci))) {\r
+\r
         Register  = 0;\r
         Address   = EFI_PCI_ADDRESS (StartBusNumber, Device, Func, 0x18);\r
         Status   = PciRootBridgeIoRead (\r
@@ -2217,6 +2219,12 @@ Returns:
                                         1,\r
                                         &Register\r
                                         );\r
+        SecondaryBus = (UINT8)(Register >> 8);\r
+\r
+        if (SecondaryBus != 0) {\r
+          ResetAllPpbBusNumber (Bridge, SecondaryBus);\r
+        }\r
+\r
         //\r
         // Reset register 18h, 19h, 1Ah on PCI Bridge\r
         //\r
index 7a4684d96d3331b86e8639a6251f1d27cf97a21b..0812bf03632ae0c4f141695b6b7521f8c7d00137 100644 (file)
@@ -1258,8 +1258,6 @@ Returns:
   SecondBus       = 0;\r
   Register        = 0;\r
 \r
-  ResetAllPpbBusReg (Bridge, StartBusNumber);\r
-\r
   for (Device = 0; Device <= PCI_MAX_DEVICE; Device++) {\r
     for (Func = 0; Func <= PCI_MAX_FUNC; Func++) {\r
 \r
@@ -1278,6 +1276,8 @@ Returns:
           (IS_PCI_BRIDGE (&Pci) ||\r
           IS_CARDBUS_BRIDGE (&Pci))) {\r
 \r
+        DEBUG((EFI_D_ERROR, "Found DEV(%02d,%02d,%02d)\n", StartBusNumber, Device, Func ));\r
+\r
         //\r
         // Get the bridge information\r
         //\r
@@ -1294,6 +1294,14 @@ Returns:
           return Status;\r
         }\r
 \r
+        //\r
+        // Add feature to support customized secondary bus number\r
+        //\r
+               if (*SubBusNumber == 0) {        \r
+          *SubBusNumber   = *PaddedBusRange;\r
+          *PaddedBusRange = 0;\r
+        }\r
+\r
         (*SubBusNumber)++;\r
 \r
         SecondBus = (*SubBusNumber);\r
@@ -1350,6 +1358,7 @@ Returns:
             EfiPciBeforeChildBusEnumeration\r
             );\r
 \r
+          DEBUG((EFI_D_ERROR, "Scan  PPB(%02d,%02d,%02d)\n", PciDevice->BusNumber, PciDevice->DeviceNumber,PciDevice->FunctionNumber ));\r
           Status = PciScanBus (\r
                     PciDevice,\r
                     (UINT8) (SecondBus),\r
@@ -1446,8 +1455,6 @@ Returns:
   Attributes      = (EFI_HPC_PADDING_ATTRIBUTES) 0;\r
   BusRange        = 0;\r
 \r
-  ResetAllPpbBusReg (Bridge, StartBusNumber);\r
-\r
   for (Device = 0; Device <= PCI_MAX_DEVICE; Device++) {\r
     for (Func = 0; Func <= PCI_MAX_FUNC; Func++) {\r
 \r
@@ -1473,6 +1480,8 @@ Returns:
         continue;\r
       }\r
 \r
+      DEBUG((EFI_D_ERROR, "Found DEV(%02d,%02d,%02d)\n", StartBusNumber, Device, Func ));\r
+      \r
       //\r
       // Get the PCI device information\r
       //\r
@@ -1534,7 +1543,6 @@ Returns:
               PciDevice->FunctionNumber,\r
               EfiPciBeforeChildBusEnumeration\r
             );\r
-            continue;\r
           }\r
         }\r
       }\r
@@ -1583,6 +1591,14 @@ Returns:
           }\r
         }\r
 \r
+        //\r
+        // Add feature to support customized secondary bus number\r
+        //\r
+               if (*SubBusNumber == 0) {        \r
+          *SubBusNumber   = *PaddedBusRange;\r
+          *PaddedBusRange = 0;\r
+        }\r
+\r
         (*SubBusNumber)++;\r
         SecondBus = *SubBusNumber;\r
 \r
@@ -1629,6 +1645,7 @@ Returns:
             EfiPciBeforeChildBusEnumeration\r
             );\r
 \r
+          DEBUG((EFI_D_ERROR, "Scan  PPB(%02d,%02d,%02d)\n", PciDevice->BusNumber, PciDevice->DeviceNumber,PciDevice->FunctionNumber ));\r
           Status = PciScanBus (\r
                     PciDevice,\r
                     (UINT8) (SecondBus),\r
@@ -1851,6 +1868,7 @@ Returns:
   //\r
   NotifyPhase (PciResAlloc, EfiPciHostBridgeBeginBusAllocation);\r
 \r
+  DEBUG((EFI_D_ERROR, "PCI Bus First Scanning\n"));\r
   RootBridgeHandle = NULL;\r
   while (PciResAlloc->GetNextRootBridge (PciResAlloc, &RootBridgeHandle) == EFI_SUCCESS) {\r
 \r
@@ -1901,6 +1919,7 @@ Returns:
       //\r
       NotifyPhase (PciResAlloc, EfiPciHostBridgeBeginBusAllocation);\r
 \r
+      DEBUG((EFI_D_ERROR, "PCI Bus Second Scanning\n"));  \r
       RootBridgeHandle = NULL;\r
       while (PciResAlloc->GetNextRootBridge (PciResAlloc, &RootBridgeHandle) == EFI_SUCCESS) {\r
 \r
index 3210a01056857c66d11392218b522d016c0c8604..34a77871961604a0aab7ed0d2447bbc7f399e26a 100644 (file)
@@ -705,7 +705,7 @@ Returns:
 ;\r
 \r
 EFI_STATUS\r
-ResetAllPpbBusReg (\r
+ResetAllPpbBusNumber (\r
   IN PCI_IO_DEVICE                      *Bridge,\r
   IN UINT8                              StartBusNumber\r
   )\r