mirror of https://github.com/acidanthera/audk.git
118 lines
4.0 KiB
C
118 lines
4.0 KiB
C
|
/** @file
|
||
|
OVMF's instance of the PCI Host Bridge Library.
|
||
|
|
||
|
Copyright (C) 2016, Red Hat, Inc.
|
||
|
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
|
||
|
);
|
||
|
}
|
||
|
}
|