/** @file Copyright (c) 2018, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef __PCIE_MMCFG_H__ #define __PCIE_MMCFG_H__ #include ////////////////////////////////////////////////////////////////////////// // // PCIE MMCFG Table definition // This table was based on PCI Firmware Spec Rev 3.1 // ////////////////////////////////////////////////////////////////////////// typedef struct { UINT8 Signature[4]; // "MCFG" Signature For this Table UINT32 Length; // Length, in bytes, include base address allocation structures. UINT8 Revision; // "1" UINT8 SegMax; // The Maximum number of Segments UINT16 ValidSegMap; // Valid Segment Bit Map, LSB Bit0 for Seg0, bit1 for seg1 ... UINT8 Reserved[4]; // Reserved } PCIE_MMCFG_HEADER_TYPE; typedef struct { UINT32 BaseAddressL; // Processor-relative Base Address (Lower 32-bit) for the Enhanced Configuration Access Mechanism UINT32 BaseAddressH; // Processor-relative Base Address (Upper 32-bit) for the Enhanced Configuration Access Mechanism UINT16 Segment; // PCI Segment Group Number. Default is 0. UINT8 StartBus; // Start PCI Bus number decoded by the host bridge UINT8 EndBus; // End PCI Bus number decoded by the host bridge UINT8 Reserved[4]; // Reserved } PCIE_MMCFG_BASE_ADDRESS_TYPE; typedef struct { PCIE_MMCFG_HEADER_TYPE Header; // The header of MMCFG Table PCIE_MMCFG_BASE_ADDRESS_TYPE MmcfgBase[1]; // First Array of base address allocation structures. } PCIE_MMCFG_TABLE_TYPE; /** This Lib is used for platform to set platform specific Pcie MMCFG Table @param[in] MmcfgTable A pointer of the MMCFG Table structure for PCIE_MMCFG_TABLE_TYPE type @param[in] NumOfSeg Number of Segments in the table @retval <>NULL The function completed successfully. @retval NULL Return Error **/ UINTN EFIAPI SetPcieSegMmcfgTable ( IN PCIE_MMCFG_TABLE_TYPE *MmcfgTable, IN UINT32 NumOfSeg ); /** This Lib return PCIE MMCFG Base Address @param[in] Address A pointer of the address of the USRA Address Structure for PCIE type @retval <>NULL The function completed successfully. @retval NULL Return Error **/ UINTN EFIAPI GetPcieSegMmcfgBaseAddress ( IN USRA_ADDRESS *Address ); #endif