13CHAR16 *mBarTypeStr[] = {
43 UINT64 MaxNumberInRange;
49 while (RootBridge->Parent !=
NULL) {
50 RootBridge = RootBridge->Parent;
57 BusNumberRanges = RootBridge->BusNumberRanges;
58 while (BusNumberRanges->Desc != ACPI_END_TAG_DESCRIPTOR) {
59 MaxNumberInRange = BusNumberRanges->AddrRangeMin + BusNumberRanges->AddrLen - 1;
63 return (UINT16)MaxNumberInRange;
86 if (!gFullEnumeration) {
88 PciIoDevice->PciIo.Pci.Read (
89 &(PciIoDevice->PciIo),
91 PCI_CARD_MEMORY_BASE_0,
96 (PciIoDevice->PciBar)[P2C_MEM_1].BaseAddress = (UINT64)(Address);
97 (PciIoDevice->PciBar)[P2C_MEM_1].Length = 0x2000000;
98 (PciIoDevice->PciBar)[P2C_MEM_1].BarType = PciBarTypeMem32;
101 PciIoDevice->PciIo.Pci.Read (
102 &(PciIoDevice->PciIo),
104 PCI_CARD_MEMORY_BASE_1,
108 (PciIoDevice->PciBar)[P2C_MEM_2].BaseAddress = (UINT64)(Address);
109 (PciIoDevice->PciBar)[P2C_MEM_2].Length = 0x2000000;
110 (PciIoDevice->PciBar)[P2C_MEM_2].BarType = PciBarTypePMem32;
113 PciIoDevice->PciIo.Pci.Read (
114 &(PciIoDevice->PciIo),
116 PCI_CARD_IO_BASE_0_LOWER,
120 (PciIoDevice->PciBar)[P2C_IO_1].BaseAddress = (UINT64)(Address);
121 (PciIoDevice->PciBar)[P2C_IO_1].Length = 0x100;
122 (PciIoDevice->PciBar)[P2C_IO_1].BarType = PciBarTypeIo16;
125 PciIoDevice->PciIo.Pci.Read (
126 &(PciIoDevice->PciIo),
128 PCI_CARD_IO_BASE_1_LOWER,
132 (PciIoDevice->PciBar)[P2C_IO_2].BaseAddress = (UINT64)(Address);
133 (PciIoDevice->PciBar)[P2C_IO_2].Length = 0x100;
134 (PciIoDevice->PciBar)[P2C_IO_2].BarType = PciBarTypeIo16;
137 if ((gPciHotPlugInit !=
NULL) &&
FeaturePcdGet (PcdPciBusHotplugDeviceSupport)) {
164 CurrentLink = Bridge->ChildList.ForwardLink;
166 while (CurrentLink !=
NULL && CurrentLink != &Bridge->ChildList) {
167 Temp = PCI_IO_DEVICE_FROM_LINK (CurrentLink);
189 LastLink = CurrentLink->BackLink;
193 CurrentLink = LastLink;
197 CurrentLink = CurrentLink->ForwardLink;
215 if ((BridgeResource !=
NULL) && (BridgeResource->Length != 0)) {
218 "Type = %s; Base = 0x%lx;\tLength = 0x%lx;\tAlignment = 0x%lx\n",
219 mBarTypeStr[
MIN (BridgeResource->ResType, PciBarTypeMaxType)],
220 BridgeResource->PciDev->PciBar[BridgeResource->Bar].BaseAddress,
221 BridgeResource->Length,
222 BridgeResource->Alignment
225 ; !
IsNull (&BridgeResource->ChildList, Link)
226 ; Link =
GetNextNode (&BridgeResource->ChildList, Link)
229 Resource = RESOURCE_NODE_FROM_LINK (Link);
230 if (Resource->ResourceUsage == PciResUsageTypical) {
231 Bar = Resource->Virtual ? Resource->PciDev->VfPciBar : Resource->PciDev->PciBar;
234 " Base = 0x%lx;\tLength = 0x%lx;\tAlignment = 0x%lx;\tOwner = %s [%02x|%02x|%02x:",
235 Bar[Resource->Bar].BaseAddress,
241 Resource->PciDev->BusNumber,
242 Resource->PciDev->DeviceNumber,
243 Resource->PciDev->FunctionNumber
247 (
IS_PCI_BRIDGE (&Resource->PciDev->Pci) && (Resource->Bar < PPB_IO_RANGE)) ||
254 DEBUG ((DEBUG_INFO,
"%02x]", Bar[Resource->Bar].Offset));
259 DEBUG ((DEBUG_INFO,
"**]"));
262 DEBUG ((DEBUG_INFO,
" Base = Padding;\tLength = 0x%lx;\tAlignment = 0x%lx", Resource->Length, Resource->Alignment));
265 if (BridgeResource->ResType != Resource->ResType) {
266 DEBUG ((DEBUG_INFO,
"; Type = %s", mBarTypeStr[
MIN (Resource->ResType, PciBarTypeMaxType)]));
269 DEBUG ((DEBUG_INFO,
"\n"));
295 for ( Link = BridgeResource->ChildList.ForwardLink
296 ; Link != &BridgeResource->ChildList
297 ; Link = Link->ForwardLink
300 Resource = RESOURCE_NODE_FROM_LINK (Link);
301 if (Resource->PciDev == Device) {
302 if (DeviceResources !=
NULL) {
303 DeviceResources[Count] = Resource;
333 UINTN ChildResourceCount;
335 DEBUG ((DEBUG_INFO,
"PciBus: Resource Map for "));
337 Status =
gBS->OpenProtocol (
339 &gEfiPciRootBridgeIoProtocolGuid,
343 EFI_OPEN_PROTOCOL_TEST_PROTOCOL
345 if (EFI_ERROR (Status)) {
348 "Bridge [%02x|%02x|%02x]\n",
350 Bridge->DeviceNumber,
351 Bridge->FunctionNumber
359 DEBUG ((DEBUG_INFO,
"Root Bridge %s\n", Str !=
NULL ? Str : L
""));
365 for (Index = 0; Index < ResourceCount; Index++) {
369 DEBUG ((DEBUG_INFO,
"\n"));
371 for ( Link = Bridge->ChildList.ForwardLink
372 ; Link != &Bridge->ChildList
373 ; Link = Link->ForwardLink
376 Device = PCI_IO_DEVICE_FROM_LINK (Link);
378 ChildResourceCount = 0;
379 for (Index = 0; Index < ResourceCount; Index++) {
384 ASSERT (ChildResources !=
NULL);
385 ChildResourceCount = 0;
386 for (Index = 0; Index < ResourceCount; Index++) {
387 ChildResourceCount +=
FindResourceNode (Device, Resources[Index], &ChildResources[ChildResourceCount]);
416 CurrentLink = RootBridgeDev->ChildList.ForwardLink;
418 while (CurrentLink !=
NULL && CurrentLink != &RootBridgeDev->ChildList) {
419 PciIoDevice = PCI_IO_DEVICE_FROM_LINK (CurrentLink);
426 if (PciIoDevice->ResizableBarOffset != 0) {
429 "PciBus: [%02x|%02x|%02x] Adjust Pci Device Bar Size\n",
430 PciIoDevice->BusNumber,
431 PciIoDevice->DeviceNumber,
432 PciIoDevice->FunctionNumber
438 for (Offset = 0x10, BarIndex = 0; Offset <= 0x24 && BarIndex < PCI_MAX_BAR; BarIndex++) {
439 Offset =
PciParseBar (PciIoDevice, Offset, BarIndex);
449 CurrentLink = CurrentLink->ForwardLink;
483 UINT64 Mem32ResStatus;
484 UINT64 PMem32ResStatus;
485 UINT64 Mem64ResStatus;
486 UINT64 PMem64ResStatus;
487 UINT32 MaxOptionRomSize;
500 BOOLEAN ResizableBarNeedAdjust;
501 BOOLEAN ResizableBarAdjusted;
503 ResizableBarNeedAdjust =
PcdGetBool (PcdPcieResizableBarSupport);
518 RootBridgeDev =
NULL;
519 RootBridgeHandle = 0;
521 while (PciResAlloc->GetNextRootBridge (PciResAlloc, &RootBridgeHandle) ==
EFI_SUCCESS) {
527 if (RootBridgeDev ==
NULL) {
528 return EFI_NOT_FOUND;
543 FeaturePcdGet (PcdPciBridgeIoAlignmentProbe) ? 0x1FF : 0xFFF,
591 if (MaxOptionRomSize != 0) {
592 RootBridgeDev->PciBar[0].BarType = PciBarTypeOpRom;
593 RootBridgeDev->PciBar[0].Length = MaxOptionRomSize;
594 RootBridgeDev->PciBar[0].Alignment = MaxOptionRomSize - 1;
595 GetResourceFromDevice (RootBridgeDev, IoBridge, Mem32Bridge, PMem32Bridge, Mem64Bridge, PMem64Bridge);
637 Status = PciResAlloc->SubmitResources (
639 RootBridgeDev->Handle,
646 DEBUG ((DEBUG_INFO,
"PciBus: HostBridge->SubmitResources() - %r\n", Status));
653 if (AcpiConfig !=
NULL) {
657 if (EFI_ERROR (Status)) {
673 ASSERT (RootBridgeDev !=
NULL);
679 DEBUG ((DEBUG_INFO,
"PciBus: HostBridge->NotifyPhase(AllocateResources) - %r\n", Status));
684 if (EFI_ERROR (Status)) {
688 return EFI_OUT_OF_RESOURCES;
695 HandleExtendedData.Handle = RootBridgeDev->PciRootBridgeIo->
ParentHandle;
702 if (!EFI_ERROR (Status)) {
713 RootBridgeDev =
NULL;
714 RootBridgeHandle = 0;
722 while (PciResAlloc->GetNextRootBridge (PciResAlloc, &RootBridgeHandle) ==
EFI_SUCCESS) {
727 if (RootBridgeDev ==
NULL) {
728 return EFI_NOT_FOUND;
734 HandleExtendedData.Handle = RootBridgeDev->PciRootBridgeIo->
ParentHandle;
741 Status = PciResAlloc->GetProposedResources (
743 RootBridgeDev->Handle,
747 if (EFI_ERROR (Status)) {
751 if (AcpiConfig !=
NULL) {
778 ZeroMem (&AllocFailExtendedData,
sizeof (AllocFailExtendedData));
782 EFI_IO_BUS_PCI | EFI_IOB_EC_RESOURCE_CONFLICT,
783 (VOID *)&AllocFailExtendedData,
784 sizeof (AllocFailExtendedData)
792 ResizableBarAdjusted =
FALSE;
793 if (ResizableBarNeedAdjust) {
795 ResizableBarNeedAdjust =
FALSE;
798 if (!ResizableBarAdjusted) {
824 if (EFI_ERROR (Status)) {
839 EFI_IO_BUS_PCI | EFI_IOB_PCI_RES_ALLOC,
840 (VOID *)&HandleExtendedData,
841 sizeof (HandleExtendedData)
849 if (EFI_ERROR (Status)) {
853 RootBridgeDev =
NULL;
855 RootBridgeHandle = 0;
857 while (PciResAlloc->GetNextRootBridge (PciResAlloc, &RootBridgeHandle) ==
EFI_SUCCESS) {
863 if (RootBridgeDev ==
NULL) {
864 return EFI_NOT_FOUND;
871 Status = PciResAlloc->GetProposedResources (
873 RootBridgeDev->Handle,
877 if (EFI_ERROR (Status)) {
904 ASSERT (IoBridge !=
NULL);
905 ASSERT (Mem32Bridge !=
NULL);
906 ASSERT (PMem32Bridge !=
NULL);
907 ASSERT (Mem64Bridge !=
NULL);
908 ASSERT (PMem64Bridge !=
NULL);
960 "Process Option ROM: BAR Base/Length = %lx/%lx\n",
961 RootBridgeDev->PciBar[0].BaseAddress,
962 RootBridgeDev->PciBar[0].Length
964 ProcessOptionRom (RootBridgeDev, RootBridgeDev->PciBar[0].BaseAddress, RootBridgeDev->PciBar[0].Length);
966 IoBridge->PciDev->PciBar[IoBridge->Bar].BaseAddress = IoBase;
967 Mem32Bridge->PciDev->PciBar[Mem32Bridge->Bar].BaseAddress = Mem32Base;
968 PMem32Bridge->PciDev->PciBar[PMem32Bridge->Bar].BaseAddress = PMem32Base;
969 Mem64Bridge->PciDev->PciBar[Mem64Bridge->Bar].BaseAddress = Mem64Base;
970 PMem64Bridge->PciDev->PciBar[PMem64Bridge->Bar].BaseAddress = PMem64Base;
977 Resources[0] = IoBridge;
978 Resources[1] = Mem32Bridge;
979 Resources[2] = PMem32Bridge;
980 Resources[3] = Mem64Bridge;
981 Resources[4] = PMem64Bridge;
1021 IN UINT8 StartBusNumber,
1022 IN UINT8 NumberOfBuses,
1023 OUT UINT8 *NextBusNumber
1029 UINT64 MaxNumberInRange;
1034 RootBridge = Bridge;
1035 while (RootBridge->Parent !=
NULL) {
1036 RootBridge = RootBridge->Parent;
1042 BusNumberRanges = RootBridge->BusNumberRanges;
1043 while (BusNumberRanges->Desc != ACPI_END_TAG_DESCRIPTOR) {
1044 MaxNumberInRange = BusNumberRanges->AddrRangeMin + BusNumberRanges->AddrLen - 1;
1045 if ((StartBusNumber >= BusNumberRanges->AddrRangeMin) && (StartBusNumber <= MaxNumberInRange)) {
1046 NextNumber = (UINT8)(StartBusNumber + NumberOfBuses);
1047 while (NextNumber > MaxNumberInRange) {
1049 if (BusNumberRanges->Desc == ACPI_END_TAG_DESCRIPTOR) {
1050 return EFI_OUT_OF_RESOURCES;
1053 NextNumber = (UINT8)(NextNumber + (BusNumberRanges->AddrRangeMin - (MaxNumberInRange + 1)));
1054 MaxNumberInRange = BusNumberRanges->AddrRangeMin + BusNumberRanges->AddrLen - 1;
1057 *NextBusNumber = NextNumber;
1064 return EFI_OUT_OF_RESOURCES;
1084 IN UINT8 StartBusNumber,
1085 OUT UINT8 *SubBusNumber,
1086 OUT UINT8 *PaddedBusRange
1108 UINT32 TempReservedBusNum;
1109 BOOLEAN IsAriEnabled;
1111 PciRootBridgeIo = Bridge->PciRootBridgeIo;
1120 IsAriEnabled =
FALSE;
1122 for (Device = 0; Device <= PCI_MAX_DEVICE; Device++) {
1123 if (!IsAriEnabled) {
1124 TempReservedBusNum = 0;
1127 for (Func = 0; Func <= PCI_MAX_FUNC; Func++) {
1139 if (EFI_ERROR (Status) && (Func == 0)) {
1146 if (EFI_ERROR (Status)) {
1162 if (EFI_ERROR (Status)) {
1171 if (((Device == 0) && (Func == 0)) && (PciDevice->IsAriEnabled)) {
1172 IsAriEnabled =
TRUE;
1175 if (PciDevice->IsAriEnabled != IsAriEnabled) {
1178 "ERROR: %02x:%02x:%02x device ARI Feature(%x) is not consistent with others Function\n",
1182 PciDevice->IsAriEnabled
1184 return EFI_DEVICE_ERROR;
1187 PciAddress = EFI_PCI_ADDRESS (StartBusNumber, Device, Func, 0);
1197 PciDevice->BusNumber,
1198 PciDevice->DeviceNumber,
1199 PciDevice->FunctionNumber,
1208 if (gPciHotPlugInit !=
NULL) {
1213 gPciRootHpcData[HpIndex].Found =
TRUE;
1215 if (!gPciRootHpcData[HpIndex].Initialized) {
1218 ASSERT (!EFI_ERROR (Status));
1222 gPciRootHpcPool[HpIndex].HpcDevicePath,
1230 PciDevice->BusNumber,
1231 PciDevice->DeviceNumber,
1232 PciDevice->FunctionNumber,
1250 if (gPciHotPlugInit !=
NULL) {
1257 PciDevice->DevicePath,
1260 (VOID **)&Descriptors,
1264 if (EFI_ERROR (Status)) {
1269 NextDescriptors = Descriptors;
1279 if (!EFI_ERROR (Status)) {
1281 }
else if (Status != EFI_NOT_FOUND) {
1292 if (EFI_ERROR (Status)) {
1296 SecondBus = *SubBusNumber;
1298 Register = (UINT16)((SecondBus << 8) | (UINT16)StartBusNumber);
1299 Address = EFI_PCI_ADDRESS (StartBusNumber, Device, Func, PCI_BRIDGE_PRIMARY_BUS_REGISTER_OFFSET);
1301 Status = PciRootBridgeIo->Pci.
Write (
1318 Address = EFI_PCI_ADDRESS (StartBusNumber, Device, Func, PCI_BRIDGE_SUBORDINATE_BUS_REGISTER_OFFSET);
1319 Status = PciRootBridgeIo->Pci.
Write (
1332 PciDevice->BusNumber,
1333 PciDevice->DeviceNumber,
1334 PciDevice->FunctionNumber,
1344 if (EFI_ERROR (Status)) {
1349 if (
FeaturePcdGet (PcdPciBusHotplugDeviceSupport) && BusPadding) {
1357 *PaddedBusRange = (UINT8)((UINT8)(BusRange) + *PaddedBusRange);
1363 if (EFI_ERROR (Status)) {
1367 *SubBusNumber =
MAX (PaddedSubBus, *SubBusNumber);
1374 Address = EFI_PCI_ADDRESS (StartBusNumber, Device, Func, PCI_BRIDGE_SUBORDINATE_BUS_REGISTER_OFFSET);
1376 Status = PciRootBridgeIo->Pci.
Write (
1388 if (
PcdGetBool (PcdSrIovSupport) && (PciDevice->SrIovCapabilityOffset != 0)) {
1389 if (TempReservedBusNum < PciDevice->ReservedBusNum) {
1390 Status =
PciAllocateBusNumber (PciDevice, *SubBusNumber, (UINT8)(PciDevice->ReservedBusNum - TempReservedBusNum), SubBusNumber);
1391 if (EFI_ERROR (Status)) {
1395 TempReservedBusNum = PciDevice->ReservedBusNum;
1398 DEBUG ((DEBUG_INFO,
"PCI-IOV ScanBus - SubBusNumber - 0x%x\n", *SubBusNumber));
1400 DEBUG ((DEBUG_INFO,
"PCI-IOV ScanBus - SubBusNumber - 0x%x (Update)\n", *SubBusNumber));
1411 Func = PCI_MAX_FUNC;
1439 CurrentLink = Bridge->ChildList.ForwardLink;
1441 while (CurrentLink !=
NULL && CurrentLink != &Bridge->ChildList) {
1442 Temp = PCI_IO_DEVICE_FROM_LINK (CurrentLink);
1445 if ((gPciHotPlugInit !=
NULL) && Temp->Allocated &&
FeaturePcdGet (PcdPciBusHotplugDeviceSupport)) {
1451 EFI_IO_BUS_PCI | EFI_IOB_PCI_HPC_INIT,
1455 PciAddress = EFI_PCI_ADDRESS (Temp->BusNumber, Temp->DeviceNumber, Temp->FunctionNumber, 0);
1464 if (!EFI_ERROR (Status)) {
1467 if (EFI_ERROR (Status)) {
1472 CurrentLink = CurrentLink->ForwardLink;
1481 CurrentLink = CurrentLink->ForwardLink;
1510 RootBridgeHandle =
NULL;
1512 while (PciResAlloc->GetNextRootBridge (PciResAlloc, &RootBridgeHandle) ==
EFI_SUCCESS) {
1518 if (RootBridgeDev ==
NULL) {
1519 return EFI_NOT_FOUND;
1523 if (EFI_ERROR (Status)) {
1554 UINT8 StartBusNumber;
1570 if (EFI_ERROR (Status)) {
1574 DEBUG ((DEBUG_INFO,
"PCI Bus First Scanning\n"));
1575 RootBridgeHandle =
NULL;
1577 while (PciResAlloc->GetNextRootBridge (PciResAlloc, &RootBridgeHandle) ==
EFI_SUCCESS) {
1584 if (RootBridgeDev ==
NULL) {
1585 return EFI_OUT_OF_RESOURCES;
1596 if ((gPciHotPlugInit !=
NULL) &&
FeaturePcdGet (PcdPciBusHotplugDeviceSupport)) {
1602 if (EFI_ERROR (Status)) {
1603 RootBridgeEnumerationStatus = Status;
1612 if (EFI_ERROR (RootBridgeEnumerationStatus)) {
1613 return RootBridgeEnumerationStatus;
1616 if ((gPciHotPlugInit !=
NULL) &&
FeaturePcdGet (PcdPciBusHotplugDeviceSupport)) {
1620 RootBridgeHandle =
NULL;
1622 while ((PciResAlloc->GetNextRootBridge (PciResAlloc, &RootBridgeHandle) ==
EFI_SUCCESS) &&
1623 (!
IsNull (&RootBridgeList, Link)))
1625 RootBridgeDev = PCI_IO_DEVICE_FROM_LINK (Link);
1629 Status = PciResAlloc->StartBusEnumeration (
1632 (VOID **)&Configuration
1634 if (EFI_ERROR (Status)) {
1641 StartBusNumber = (UINT8)(Configuration->AddrRangeMin);
1658 if (EFI_ERROR (Status)) {
1659 DEBUG ((DEBUG_ERROR,
"Some root HPC failed to initialize\n"));
1668 if (EFI_ERROR (Status)) {
1672 DEBUG ((DEBUG_INFO,
"PCI Bus Second Scanning\n"));
1673 RootBridgeHandle =
NULL;
1674 while (PciResAlloc->GetNextRootBridge (PciResAlloc, &RootBridgeHandle) ==
EFI_SUCCESS) {
1680 if (RootBridgeDev ==
NULL) {
1681 return EFI_OUT_OF_RESOURCES;
1693 if (EFI_ERROR (Status)) {
1694 RootBridgeEnumerationStatus = Status;
1703 if (EFI_ERROR (RootBridgeEnumerationStatus)) {
1704 return RootBridgeEnumerationStatus;
1713 if (EFI_ERROR (Status)) {
1717 RootBridgeHandle =
NULL;
1718 while (PciResAlloc->GetNextRootBridge (PciResAlloc, &RootBridgeHandle) ==
EFI_SUCCESS) {
1724 if (RootBridgeDev ==
NULL) {
1725 return EFI_OUT_OF_RESOURCES;
1730 if (EFI_ERROR (Status)) {
1734 PciRootBridgeIo = RootBridgeDev->PciRootBridgeIo;
1735 Status = PciRootBridgeIo->Configuration (PciRootBridgeIo, (VOID **)&Descriptors);
1737 if (EFI_ERROR (Status)) {
1743 if (EFI_ERROR (Status)) {
1766 if (EFI_ERROR (Status)) {
1795 IN PCI_RESIZABLE_BAR_OPERATION ResizableBarOp
1799 UINT64 Capabilities;
1803 UINTN ResizableBarNumber;
1807 ASSERT (PciIoDevice->ResizableBarOffset != 0);
1811 " Programs Resizable BAR register, offset: 0x%08x, number: %d\n",
1812 PciIoDevice->ResizableBarOffset,
1813 PciIoDevice->ResizableBarNumber
1816 ResizableBarNumber =
MIN (PciIoDevice->ResizableBarNumber, PCI_MAX_BAR);
1817 PciIo = &PciIoDevice->PciIo;
1818 Status = PciIo->Pci.
Read (
1827 for (Index = 0; Index < ResizableBarNumber; Index++) {
1836 Capabilities =
LShiftU64 (Entries[Index].ResizableBarControl.Bits.BarSizeCapability, 28)
1837 | Entries[Index].ResizableBarCapability.Bits.BarSizeCapability;
1839 if (ResizableBarOp == PciResizableBarMax) {
1842 ASSERT (ResizableBarOp == PciResizableBarMin);
1852 Entries[Index].ResizableBarControl.Bits.BarSize = (UINT32)Bit;
1855 " Resizable Bar: Offset = 0x%x, Bar Size Capability = 0x%016lx, New Bar Size = 0x%lx\n",
1862 EfiPciIoWidthUint32,
1865 &Entries[Index].ResizableBarControl.Uint32
PACKED struct @89 EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR
BOOLEAN EFIAPI IsNull(IN CONST LIST_ENTRY *List, IN CONST LIST_ENTRY *Node)
BOOLEAN EFIAPI IsListEmpty(IN CONST LIST_ENTRY *ListHead)
LIST_ENTRY *EFIAPI GetNextNode(IN CONST LIST_ENTRY *List, IN CONST LIST_ENTRY *Node)
LIST_ENTRY *EFIAPI GetFirstNode(IN CONST LIST_ENTRY *List)
LIST_ENTRY *EFIAPI RemoveEntryList(IN CONST LIST_ENTRY *Entry)
LIST_ENTRY *EFIAPI InitializeListHead(IN OUT LIST_ENTRY *ListHead)
INTN EFIAPI LowBitSet64(IN UINT64 Operand)
UINT64 EFIAPI LShiftU64(IN UINT64 Operand, IN UINTN Count)
INTN EFIAPI HighBitSet64(IN UINT64 Operand)
LIST_ENTRY *EFIAPI InsertTailList(IN OUT LIST_ENTRY *ListHead, IN OUT LIST_ENTRY *Entry)
VOID *EFIAPI ZeroMem(OUT VOID *Buffer, IN UINTN Length)
EFI_DEVICE_PATH_PROTOCOL *EFIAPI DevicePathFromHandle(IN EFI_HANDLE Handle)
CHAR16 *EFIAPI ConvertDevicePathToText(IN CONST EFI_DEVICE_PATH_PROTOCOL *DevicePath, IN BOOLEAN DisplayOnly, IN BOOLEAN AllowShortcuts)
VOID EFIAPI FreePool(IN VOID *Buffer)
VOID RemoveRejectedPciDevices(IN EFI_HANDLE RootBridgeHandle, IN PCI_IO_DEVICE *Bridge)
EFI_STATUS PciHostBridgeEnumerator(IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *PciResAlloc)
VOID DumpResourceMap(IN PCI_IO_DEVICE *Bridge, IN PCI_RESOURCE_NODE **Resources, IN UINTN ResourceCount)
VOID GetBackPcCardBar(IN PCI_IO_DEVICE *PciIoDevice)
VOID DumpBridgeResource(IN PCI_RESOURCE_NODE *BridgeResource)
EFI_STATUS PciProgramResizableBar(IN PCI_IO_DEVICE *PciIoDevice, IN PCI_RESIZABLE_BAR_OPERATION ResizableBarOp)
UINT16 PciGetMaxBusNumber(IN PCI_IO_DEVICE *Bridge)
EFI_STATUS PciHostBridgeP2CProcess(IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *PciResAlloc)
EFI_STATUS PciHostBridgeResourceAllocator(IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *PciResAlloc)
EFI_STATUS PciScanBus(IN PCI_IO_DEVICE *Bridge, IN UINT8 StartBusNumber, OUT UINT8 *SubBusNumber, OUT UINT8 *PaddedBusRange)
BOOLEAN AdjustPciDeviceBarSize(IN PCI_IO_DEVICE *RootBridgeDev)
EFI_STATUS PciAllocateBusNumber(IN PCI_IO_DEVICE *Bridge, IN UINT8 StartBusNumber, IN UINT8 NumberOfBuses, OUT UINT8 *NextBusNumber)
EFI_STATUS PciRootBridgeP2CProcess(IN PCI_IO_DEVICE *Bridge)
UINTN FindResourceNode(IN PCI_IO_DEVICE *Device, IN PCI_RESOURCE_NODE *BridgeResource, OUT PCI_RESOURCE_NODE **DeviceResources OPTIONAL)
#define ARRAY_SIZE(Array)
#define OFFSET_OF(TYPE, Field)
#define GLOBAL_REMOVE_IF_UNREFERENCED
#define ASSERT_EFI_ERROR(StatusParameter)
#define DEBUG(Expression)
#define DEBUG_CODE(Expression)
#define REPORT_STATUS_CODE_WITH_DEVICE_PATH(Type, Value, DevicePathParameter)
#define REPORT_STATUS_CODE_WITH_EXTENDED_DATA(Type, Value, ExtendedData, ExtendedDataSize)
#define PcdGetBool(TokenName)
#define FeaturePcdGet(TokenName)
#define IS_PCI_BRIDGE(_p)
#define IS_PCI_MULTI_FUNC(_p)
#define IS_CARDBUS_BRIDGE(_p)
PCI_IO_DEVICE * CreateRootBridge(IN EFI_HANDLE RootBridgeHandle)
VOID DestroyRootBridge(IN PCI_IO_DEVICE *RootBridge)
VOID InsertRootBridge(IN PCI_IO_DEVICE *RootBridge)
PCI_IO_DEVICE * GetRootBridgeByHandle(EFI_HANDLE RootBridgeHandle)
VOID FreePciDevice(IN PCI_IO_DEVICE *PciIoDevice)
VOID RemoveAllPciDeviceOnBridge(EFI_HANDLE RootBridgeHandle, PCI_IO_DEVICE *Bridge)
VOID GetResourceBase(IN VOID *Config, OUT UINT64 *IoBase, OUT UINT64 *Mem32Base, OUT UINT64 *PMem32Base, OUT UINT64 *Mem64Base, OUT UINT64 *PMem64Base)
EFI_STATUS PciRootBridgeEnumerator(IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *PciResAlloc, IN PCI_IO_DEVICE *RootBridgeDev)
VOID ProcessOptionRom(IN PCI_IO_DEVICE *Bridge, IN UINT64 RomBase, IN UINT64 MaxLength)
EFI_STATUS AddHostBridgeEnumerator(IN EFI_HANDLE HostBridgeHandle)
EFI_STATUS DetermineRootBridgeAttributes(IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *PciResAlloc, IN PCI_IO_DEVICE *RootBridgeDev)
VOID GetResourceAllocationStatus(VOID *AcpiConfig, OUT UINT64 *IoResStatus, OUT UINT64 *Mem32ResStatus, OUT UINT64 *PMem32ResStatus, OUT UINT64 *Mem64ResStatus, OUT UINT64 *PMem64ResStatus)
EFI_STATUS PreprocessController(IN PCI_IO_DEVICE *Bridge, IN UINT8 Bus, IN UINT8 Device, IN UINT8 Func, IN EFI_PCI_CONTROLLER_RESOURCE_ALLOCATION_PHASE Phase)
UINT32 GetMaxOptionRomSize(IN PCI_IO_DEVICE *Bridge)
EFI_STATUS PciBridgeEnumerator(IN PCI_IO_DEVICE *BridgeDev)
EFI_STATUS PciHostBridgeAdjustAllocation(IN PCI_RESOURCE_NODE *IoPool, IN PCI_RESOURCE_NODE *Mem32Pool, IN PCI_RESOURCE_NODE *PMem32Pool, IN PCI_RESOURCE_NODE *Mem64Pool, IN PCI_RESOURCE_NODE *PMem64Pool, IN UINT64 IoResStatus, IN UINT64 Mem32ResStatus, IN UINT64 PMem32ResStatus, IN UINT64 Mem64ResStatus, IN UINT64 PMem64ResStatus)
EFI_STATUS ConstructAcpiResourceRequestor(IN PCI_IO_DEVICE *Bridge, IN PCI_RESOURCE_NODE *IoNode, IN PCI_RESOURCE_NODE *Mem32Node, IN PCI_RESOURCE_NODE *PMem32Node, IN PCI_RESOURCE_NODE *Mem64Node, IN PCI_RESOURCE_NODE *PMem64Node, OUT VOID **Config)
EFI_STATUS NotifyPhase(IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *PciResAlloc, EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PHASE Phase)
EFI_STATUS PciPciDeviceInfoCollector(IN PCI_IO_DEVICE *Bridge, IN UINT8 StartBusNumber)
EFI_STATUS StartManagingRootBridge(IN PCI_IO_DEVICE *RootBridgeDev)
EFI_STATUS PciDevicePresent(IN EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL *PciRootBridgeIo, OUT PCI_TYPE00 *Pci, IN UINT8 Bus, IN UINT8 Device, IN UINT8 Func)
EFI_STATUS PciSearchDevice(IN PCI_IO_DEVICE *Bridge, IN PCI_TYPE00 *Pci, IN UINT8 Bus, IN UINT8 Device, IN UINT8 Func, OUT PCI_IO_DEVICE **PciDevice)
VOID DumpPciBars(IN PCI_IO_DEVICE *PciIoDevice)
VOID ResetAllPpbBusNumber(IN PCI_IO_DEVICE *Bridge, IN UINT8 StartBusNumber)
UINTN PciParseBar(IN PCI_IO_DEVICE *PciIoDevice, IN UINTN Offset, IN UINTN BarIndex)
BOOLEAN IsPciDeviceRejected(IN PCI_IO_DEVICE *PciIoDevice)
EFI_STATUS PciGetBusRange(IN EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR **Descriptors, OUT UINT16 *MinBus, OUT UINT16 *MaxBus, OUT UINT16 *BusRange)
#define EFI_RESOURCE_SATISFIED
@ EfiPciHostBridgeBeginResourceAllocation
@ EfiPciHostBridgeSetResources
@ EfiPciHostBridgeAllocateResources
@ EfiPciHostBridgeBeginBusAllocation
@ EfiPciHostBridgeFreeResources
@ EfiPciHostBridgeEndResourceAllocation
@ EfiPciHostBridgeEndBusAllocation
@ EfiPciBeforeChildBusEnumeration
#define EFI_HPC_STATE_ENABLED
EFI_HPC_PADDING_ATTRIBUTES
@ EfiPaddingPciRootBridge
#define EFI_HPC_STATE_INITIALIZED
EFI_STATUS CreateEventForHpc(IN UINTN HpIndex, OUT EFI_EVENT *Event)
BOOLEAN IsRootPciHotPlugController(IN EFI_DEVICE_PATH_PROTOCOL *HpcDevicePath, OUT UINTN *HpIndex)
VOID GetResourcePaddingForHpb(IN PCI_IO_DEVICE *PciIoDevice)
BOOLEAN IsPciHotPlugBus(PCI_IO_DEVICE *PciIoDevice)
EFI_STATUS AllRootHPCInitialized(IN UINTN TimeoutInMicroSeconds)
EFI_STATUS InitializeHotPlugSupport(VOID)
VOID GetResourceFromDevice(IN PCI_IO_DEVICE *PciDev, IN OUT PCI_RESOURCE_NODE *IoNode, IN OUT PCI_RESOURCE_NODE *Mem32Node, IN OUT PCI_RESOURCE_NODE *PMem32Node, IN OUT PCI_RESOURCE_NODE *Mem64Node, IN OUT PCI_RESOURCE_NODE *PMem64Node)
EFI_STATUS ProgramResource(IN UINT64 Base, IN PCI_RESOURCE_NODE *Bridge)
VOID CreateResourceMap(IN PCI_IO_DEVICE *Bridge, IN OUT PCI_RESOURCE_NODE *IoNode, IN OUT PCI_RESOURCE_NODE *Mem32Node, IN OUT PCI_RESOURCE_NODE *PMem32Node, IN OUT PCI_RESOURCE_NODE *Mem64Node, IN OUT PCI_RESOURCE_NODE *PMem64Node)
VOID InitializeResourcePool(IN OUT PCI_RESOURCE_NODE *ResourcePool, IN PCI_BAR_TYPE ResourceType)
VOID InsertResourceNode(IN OUT PCI_RESOURCE_NODE *Bridge, IN PCI_RESOURCE_NODE *ResNode)
PCI_RESOURCE_NODE * CreateResourceNode(IN PCI_IO_DEVICE *PciDev, IN UINT64 Length, IN UINT64 Alignment, IN UINT8 Bar, IN PCI_BAR_TYPE ResType, IN PCI_RESOURCE_USAGE ResUsage)
VOID DestroyResourceTree(IN PCI_RESOURCE_NODE *Bridge)
#define EFI_PROGRESS_CODE
VOID *EFIAPI AllocatePool(IN UINTN AllocationSize)
EFI_STATUS EFIAPI Register(IN EFI_PEI_RSC_HANDLER_CALLBACK Callback)
EFI_INITIALIZE_ROOT_HPC InitializeRootHpc
EFI_GET_HOT_PLUG_PADDING GetResourcePadding
EFI_PCI_IO_PROTOCOL_CONFIG Read
EFI_PCI_IO_PROTOCOL_CONFIG Write
EFI_PCI_ROOT_BRIDGE_IO_PROTOCOL_IO_MEM Write