mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2024-12-01 12:53:27 +01:00
179 lines
6.3 KiB
C
179 lines
6.3 KiB
C
/** @file
|
|
Provide common utility functions to PciHostBridgeLib instances in
|
|
ArmVirtPkg and OvmfPkg.
|
|
|
|
Copyright (C) 2016, Red Hat, Inc.
|
|
Copyright (c) 2016, Intel Corporation. All rights reserved.<BR>
|
|
Copyright (c) 2020, Huawei Corporation. All rights reserved.<BR>
|
|
|
|
SPDX-License-Identifier: BSD-2-Clause-Patent
|
|
|
|
**/
|
|
|
|
#ifndef __PCI_HOST_BRIDGE_UTILITY_LIB_H__
|
|
#define __PCI_HOST_BRIDGE_UTILITY_LIB_H__
|
|
|
|
#include <Library/PciHostBridgeLib.h>
|
|
|
|
/**
|
|
Utility function to initialize a PCI_ROOT_BRIDGE structure.
|
|
|
|
@param[in] Supports Supported attributes.
|
|
|
|
@param[in] Attributes Initial attributes.
|
|
|
|
@param[in] AllocAttributes Allocation attributes.
|
|
|
|
@param[in] DmaAbove4G DMA above 4GB memory.
|
|
|
|
@param[in] NoExtendedConfigSpace No Extended Config Space.
|
|
|
|
@param[in] RootBusNumber The bus number to store in RootBus.
|
|
|
|
@param[in] MaxSubBusNumber The inclusive maximum bus number that can
|
|
be assigned to any subordinate bus found
|
|
behind any PCI bridge hanging off this
|
|
root bus.
|
|
|
|
The caller is repsonsible for ensuring
|
|
that RootBusNumber <= MaxSubBusNumber. If
|
|
RootBusNumber equals MaxSubBusNumber, then
|
|
the root bus has no room for subordinate
|
|
buses.
|
|
|
|
@param[in] Io IO aperture.
|
|
|
|
@param[in] Mem MMIO aperture.
|
|
|
|
@param[in] MemAbove4G MMIO aperture above 4G.
|
|
|
|
@param[in] PMem Prefetchable MMIO aperture.
|
|
|
|
@param[in] PMemAbove4G Prefetchable MMIO aperture above 4G.
|
|
|
|
@param[out] RootBus The PCI_ROOT_BRIDGE structure (allocated
|
|
by the caller) that should be filled in by
|
|
this function.
|
|
|
|
@retval EFI_SUCCESS Initialization successful. A device path
|
|
consisting of an ACPI device path node,
|
|
with UID = RootBusNumber, has been
|
|
allocated and linked into RootBus.
|
|
|
|
@retval EFI_OUT_OF_RESOURCES Memory allocation failed.
|
|
**/
|
|
EFI_STATUS
|
|
EFIAPI
|
|
PciHostBridgeUtilityInitRootBridge (
|
|
IN UINT64 Supports,
|
|
IN UINT64 Attributes,
|
|
IN UINT64 AllocAttributes,
|
|
IN BOOLEAN DmaAbove4G,
|
|
IN BOOLEAN NoExtendedConfigSpace,
|
|
IN UINT8 RootBusNumber,
|
|
IN UINT8 MaxSubBusNumber,
|
|
IN PCI_ROOT_BRIDGE_APERTURE *Io,
|
|
IN PCI_ROOT_BRIDGE_APERTURE *Mem,
|
|
IN PCI_ROOT_BRIDGE_APERTURE *MemAbove4G,
|
|
IN PCI_ROOT_BRIDGE_APERTURE *PMem,
|
|
IN PCI_ROOT_BRIDGE_APERTURE *PMemAbove4G,
|
|
OUT PCI_ROOT_BRIDGE *RootBus
|
|
);
|
|
|
|
/**
|
|
Utility function to uninitialize a PCI_ROOT_BRIDGE structure set up with
|
|
PciHostBridgeUtilityInitRootBridge().
|
|
|
|
@param[in] RootBus The PCI_ROOT_BRIDGE structure, allocated by the caller and
|
|
initialized with PciHostBridgeUtilityInitRootBridge(),
|
|
that should be uninitialized. This function doesn't free
|
|
RootBus.
|
|
**/
|
|
VOID
|
|
EFIAPI
|
|
PciHostBridgeUtilityUninitRootBridge (
|
|
IN PCI_ROOT_BRIDGE *RootBus
|
|
);
|
|
|
|
/**
|
|
Utility function to return all the root bridge instances in an array.
|
|
|
|
@param[out] Count The number of root bridge instances.
|
|
|
|
@param[in] Attributes Initial attributes.
|
|
|
|
@param[in] AllocAttributes Allocation attributes.
|
|
|
|
@param[in] DmaAbove4G DMA above 4GB memory.
|
|
|
|
@param[in] NoExtendedConfigSpace No Extended Config Space.
|
|
|
|
@param[in] BusMin Minimum Bus number, inclusive.
|
|
|
|
@param[in] BusMax Maximum Bus number, inclusive.
|
|
|
|
@param[in] Io IO aperture.
|
|
|
|
@param[in] Mem MMIO aperture.
|
|
|
|
@param[in] MemAbove4G MMIO aperture above 4G.
|
|
|
|
@param[in] PMem Prefetchable MMIO aperture.
|
|
|
|
@param[in] PMemAbove4G Prefetchable MMIO aperture above 4G.
|
|
|
|
@return All the root bridge instances in an array.
|
|
**/
|
|
PCI_ROOT_BRIDGE *
|
|
EFIAPI
|
|
PciHostBridgeUtilityGetRootBridges (
|
|
OUT UINTN *Count,
|
|
IN UINT64 Attributes,
|
|
IN UINT64 AllocationAttributes,
|
|
IN BOOLEAN DmaAbove4G,
|
|
IN BOOLEAN NoExtendedConfigSpace,
|
|
IN UINTN BusMin,
|
|
IN UINTN BusMax,
|
|
IN PCI_ROOT_BRIDGE_APERTURE *Io,
|
|
IN PCI_ROOT_BRIDGE_APERTURE *Mem,
|
|
IN PCI_ROOT_BRIDGE_APERTURE *MemAbove4G,
|
|
IN PCI_ROOT_BRIDGE_APERTURE *PMem,
|
|
IN PCI_ROOT_BRIDGE_APERTURE *PMemAbove4G
|
|
);
|
|
|
|
/**
|
|
Utility function to free root bridge instances array from
|
|
PciHostBridgeUtilityGetRootBridges().
|
|
|
|
@param[in] Bridges The root bridge instances array.
|
|
@param[in] Count The count of the array.
|
|
**/
|
|
VOID
|
|
EFIAPI
|
|
PciHostBridgeUtilityFreeRootBridges (
|
|
IN PCI_ROOT_BRIDGE *Bridges,
|
|
IN UINTN Count
|
|
);
|
|
|
|
/**
|
|
Utility function to inform the platform that the resource conflict happens.
|
|
|
|
@param[in] 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
|
|
PciHostBridgeUtilityResourceConflict (
|
|
IN VOID *Configuration
|
|
);
|
|
|
|
#endif // __PCI_HOST_BRIDGE_UTILITY_LIB_H__
|