| /** @file | |
| Null instance of PCI Host Bridge Library with empty functions. | |
| Copyright (c) 2016, Intel Corporation. All rights reserved.<BR> | |
| This program and the accompanying materials are | |
| licensed and made available under the terms and conditions of | |
| the BSD License which accompanies this distribution. The full | |
| text of the license may be found at | |
| http://opensource.org/licenses/bsd-license.php. | |
| THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, | |
| WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. | |
| **/ | |
| #include <PiDxe.h> | |
| #include <Library/PciHostBridgeLib.h> | |
| #include <Library/DebugLib.h> | |
| GLOBAL_REMOVE_IF_UNREFERENCED CHAR16 *mPciHostBridgeLibAcpiAddressSpaceTypeStr[] = { | |
| L"Mem", L"I/O", L"Bus" | |
| }; | |
| /** | |
| Return all the root bridge instances in an array. | |
| @param Count Return the count of root bridge instances. | |
| @return All the root bridge instances in an array. | |
| The array should be passed into PciHostBridgeFreeRootBridges() | |
| when it's not used. | |
| **/ | |
| PCI_ROOT_BRIDGE * | |
| EFIAPI | |
| PciHostBridgeGetRootBridges ( | |
| UINTN *Count | |
| ) | |
| { | |
| *Count = 0; | |
| return NULL; | |
| } | |
| /** | |
| Free the root bridge instances array returned from PciHostBridgeGetRootBridges(). | |
| @param The root bridge instances array. | |
| @param The count of the array. | |
| **/ | |
| VOID | |
| EFIAPI | |
| PciHostBridgeFreeRootBridges ( | |
| PCI_ROOT_BRIDGE *Bridges, | |
| UINTN Count | |
| ) | |
| { | |
| return; | |
| } | |
| /** | |
| Inform the platform that the resource conflict happens. | |
| @param HostBridgeHandle Handle of the Host Bridge. | |
| @param Configuration Pointer to PCI I/O and PCI memory resource descriptors. | |
| The Configuration contains the resources for all the | |
| root bridges. The resource for each root bridge is | |
| terminated with END descriptor and an additional END | |
| is appended indicating the end of the entire resources. | |
| The resource descriptor field values follow the description | |
| in EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL.SubmitResources(). | |
| **/ | |
| VOID | |
| EFIAPI | |
| PciHostBridgeResourceConflict ( | |
| EFI_HANDLE HostBridgeHandle, | |
| VOID *Configuration | |
| ) | |
| { | |
| EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *Descriptor; | |
| UINTN RootBridgeIndex; | |
| DEBUG ((EFI_D_ERROR, "PciHostBridge: Resource conflict happens!\n")); | |
| RootBridgeIndex = 0; | |
| Descriptor = (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *) Configuration; | |
| while (Descriptor->Desc == ACPI_ADDRESS_SPACE_DESCRIPTOR) { | |
| DEBUG ((EFI_D_ERROR, "RootBridge[%d]:\n", RootBridgeIndex++)); | |
| for (; Descriptor->Desc == ACPI_ADDRESS_SPACE_DESCRIPTOR; Descriptor++) { | |
| ASSERT (Descriptor->ResType < | |
| sizeof (mPciHostBridgeLibAcpiAddressSpaceTypeStr) / sizeof (mPciHostBridgeLibAcpiAddressSpaceTypeStr[0]) | |
| ); | |
| DEBUG ((EFI_D_ERROR, " %s: Length/Alignment = 0x%lx / 0x%lx\n", | |
| mPciHostBridgeLibAcpiAddressSpaceTypeStr[Descriptor->ResType], Descriptor->AddrLen, Descriptor->AddrRangeMax)); | |
| if (Descriptor->ResType == ACPI_ADDRESS_SPACE_TYPE_MEM) { | |
| DEBUG ((EFI_D_ERROR, " Granularity/SpecificFlag = %ld / %02x%s\n", | |
| Descriptor->AddrSpaceGranularity, Descriptor->SpecificFlag, | |
| ((Descriptor->SpecificFlag & EFI_ACPI_MEMORY_RESOURCE_SPECIFIC_FLAG_CACHEABLE_PREFETCHABLE) != 0) ? L" (Prefetchable)" : L"" | |
| )); | |
| } | |
| } | |
| // | |
| // Skip the END descriptor for root bridge | |
| // | |
| ASSERT (Descriptor->Desc == ACPI_END_TAG_DESCRIPTOR); | |
| Descriptor = (EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR *) ((EFI_ACPI_END_TAG_DESCRIPTOR *) Descriptor + 1); | |
| } | |
| } |