}\r
\r
EFI_STATUS\r
-ResetAllPpbBusReg (\r
+ResetAllPpbBusNumber (\r
IN PCI_IO_DEVICE *Bridge,\r
IN UINT8 StartBusNumber\r
)\r
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
);\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
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
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
(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
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
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
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
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
PciDevice->FunctionNumber,\r
EfiPciBeforeChildBusEnumeration\r
);\r
- continue;\r
}\r
}\r
}\r
}\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
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
//\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
//\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