| /** @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 Bridges The root bridge instances array. | |
| @param Count 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 | |
| ); | |
| } | |
| } |