/** @file Header file for PchPcieRpLib. Copyright (c) 2017, Intel Corporation. All rights reserved.
This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License that 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. **/ #ifndef _PCH_PCIERP_LIB_H_ #define _PCH_PCIERP_LIB_H_ #define RST_PCIE_STORAGE_CR_1 0 #define RST_PCIE_STORAGE_CR_2 1 #define RST_PCIE_STORAGE_CR_3 2 #define RST_PCIE_STORAGE_CR_INVALID 99 typedef struct { UINT8 DevNum; UINT8 Pid; UINT8 RpNumBase; } PCH_PCIE_CONTROLLER_INFO; /** Get Pch Pcie Root Port Device and Function Number by Root Port physical Number @param[in] RpNumber Root port physical number. (0-based) @param[out] RpDev Return corresponding root port device number. @param[out] RpFun Return corresponding root port function number. @retval EFI_SUCCESS **/ EFI_STATUS EFIAPI GetPchPcieRpDevFun ( IN UINTN RpNumber, OUT UINTN *RpDev, OUT UINTN *RpFun ); /** Get Root Port physical Number by Pch Pcie Root Port Device and Function Number @param[in] RpDev Root port device number. @param[in] RpFun Root port function number. @param[out] RpNumber Return corresponding physical Root Port index (0-based) @retval EFI_SUCCESS Physical root port is retrieved @retval EFI_INVALID_PARAMETER RpDev and/or RpFun are invalid @retval EFI_UNSUPPORTED Root port device and function is not assigned to any physical root port **/ EFI_STATUS EFIAPI GetPchPcieRpNumber ( IN UINTN RpDev, IN UINTN RpFun, OUT UINTN *RpNumber ); /** Gets base address of PCIe root port. @param RpIndex Root Port Index (0 based) @return PCIe port base address. **/ UINTN PchPcieBase ( IN UINT32 RpIndex ); /** Determines whether L0s is supported on current stepping. @return TRUE if L0s is supported, FALSE otherwise **/ BOOLEAN PchIsPcieL0sSupported ( VOID ); /** Some early SKL PCH steppings require Native ASPM to be disabled due to hardware issues: - RxL0s exit causes recovery - Disabling PCIe L0s capability disables L1 Use this function to determine affected steppings. @return TRUE if Native ASPM is supported, FALSE otherwise **/ BOOLEAN PchIsPcieNativeAspmSupported ( VOID ); /** Check the RST PCIe Storage Cycle Router number according to the root port number and PCH type @param[in] RootPortNum Root Port Number @retval UINT32 The RST PCIe Storage Cycle Router Number **/ UINT32 RstGetCycleRouterNumber ( IN UINT32 RootPortNum ); #endif // _PCH_PCIERP_LIB_H_