/** @file Internal library declaration for PCI Bus module. Copyright (c) 2006 - 2021, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef _EFI_PCI_LIB_H_ #define _EFI_PCI_LIB_H_ typedef struct { EFI_HANDLE Handle; } EFI_DEVICE_HANDLE_EXTENDED_DATA_PAYLOAD; typedef struct { UINT32 Bar; UINT16 DevicePathSize; UINT16 ReqResSize; UINT16 AllocResSize; UINT8 *DevicePath; UINT8 *ReqRes; UINT8 *AllocRes; } EFI_RESOURCE_ALLOC_FAILURE_ERROR_DATA_PAYLOAD; typedef enum { PciResizableBarMin = 0x00, PciResizableBarMax = 0xFF } PCI_RESIZABLE_BAR_OPERATION; /** Retrieve the PCI Card device BAR information via PciIo interface. @param PciIoDevice PCI Card device instance. **/ VOID GetBackPcCardBar ( IN PCI_IO_DEVICE *PciIoDevice ); /** Remove rejected pci device from specific root bridge handle. @param RootBridgeHandle Specific parent root bridge handle. @param Bridge Bridge device instance. **/ VOID RemoveRejectedPciDevices ( IN EFI_HANDLE RootBridgeHandle, IN PCI_IO_DEVICE *Bridge ); /** Submits the I/O and memory resource requirements for the specified PCI Host Bridge. @param PciResAlloc Point to protocol instance of EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL. @retval EFI_SUCCESS Successfully finished resource allocation. @retval EFI_NOT_FOUND Cannot get root bridge instance. @retval EFI_OUT_OF_RESOURCES Platform failed to program the resources if no hot plug supported. @retval other Some error occurred when allocating resources for the PCI Host Bridge. @note Feature flag PcdPciBusHotplugDeviceSupport determine whether need support hotplug. **/ EFI_STATUS PciHostBridgeResourceAllocator ( IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *PciResAlloc ); /** Allocate NumberOfBuses buses and return the next available PCI bus number. @param Bridge Bridge device instance. @param StartBusNumber Current available PCI bus number. @param NumberOfBuses Number of buses enumerated below the StartBusNumber. @param NextBusNumber Next available PCI bus number. @retval EFI_SUCCESS Available bus number resource is enough. Next available PCI bus number is returned in NextBusNumber. @retval EFI_OUT_OF_RESOURCES Available bus number resource is not enough for allocation. **/ EFI_STATUS PciAllocateBusNumber ( IN PCI_IO_DEVICE *Bridge, IN UINT8 StartBusNumber, IN UINT8 NumberOfBuses, OUT UINT8 *NextBusNumber ); /** Scan pci bus and assign bus number to the given PCI bus system. @param Bridge Bridge device instance. @param StartBusNumber start point. @param SubBusNumber Point to sub bus number. @param PaddedBusRange Customized bus number. @retval EFI_SUCCESS Successfully scanned and assigned bus number. @retval other Some error occurred when scanning pci bus. @note Feature flag PcdPciBusHotplugDeviceSupport determine whether need support hotplug. **/ EFI_STATUS PciScanBus ( IN PCI_IO_DEVICE *Bridge, IN UINT8 StartBusNumber, OUT UINT8 *SubBusNumber, OUT UINT8 *PaddedBusRange ); /** Process Option Rom on the specified root bridge. @param Bridge Pci root bridge device instance. @retval EFI_SUCCESS Success process. @retval other Some error occurred when processing Option Rom on the root bridge. **/ EFI_STATUS PciRootBridgeP2CProcess ( IN PCI_IO_DEVICE *Bridge ); /** Process Option Rom on the specified host bridge. @param PciResAlloc Pointer to instance of EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL. @retval EFI_SUCCESS Success process. @retval EFI_NOT_FOUND Can not find the root bridge instance. @retval other Some error occurred when processing Option Rom on the host bridge. **/ EFI_STATUS PciHostBridgeP2CProcess ( IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *PciResAlloc ); /** This function is used to enumerate the entire host bridge in a given platform. @param PciResAlloc A pointer to the PCI Host Resource Allocation protocol. @retval EFI_SUCCESS Successfully enumerated the host bridge. @retval EFI_OUT_OF_RESOURCES No enough memory available. @retval other Some error occurred when enumerating the host bridge. **/ EFI_STATUS PciHostBridgeEnumerator ( IN EFI_PCI_HOST_BRIDGE_RESOURCE_ALLOCATION_PROTOCOL *PciResAlloc ); /** This function is used to program the Resizable BAR Register. @param PciIoDevice A pointer to the PCI_IO_DEVICE. @param ResizableBarOp PciResizableBarMax: Set BAR to max size PciResizableBarMin: set BAR to min size. @retval EFI_SUCCESS Successfully enumerated the host bridge. @retval other Some error occurred when enumerating the host bridge. **/ EFI_STATUS PciProgramResizableBar ( IN PCI_IO_DEVICE *PciIoDevice, IN PCI_RESIZABLE_BAR_OPERATION ResizableBarOp ); #endif