/** @file
UBS silicon access PPI
This PPI abstracts all UBA silicon accesses
@copyright
Copyright 2021 Intel Corporation.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef _DYNAMIC_SI_LIBARY_PPI_H_
#define _DYNAMIC_SI_LIBARY_PPI_H_
// {C1176733-159F-42d5-BCB9-320660B17310}
#define DYNAMIC_SI_LIBARY_PPI_GUID \
{ 0x4e18e22b, 0x5034, 0x4512, { 0xb7, 0xe5, 0x0b, 0xf1, 0x9d, 0xe3, 0x59, 0x8c } }
#define UBA_ACCESS_PPI_VERSION 01
#define UBA_ACCESS_PPI_SIGNATURE SIGNATURE_32('D', 'S', 'L', 'P')
#include
#include
#include
#include
#include
//
// Functions
//
typedef
EFI_STATUS
(EFIAPI *PEI_GET_GPIO_INPUT_VALUE) (
IN GPIO_PAD GpioPad,
OUT UINT32 *InputVal
);
typedef
EFI_STATUS
(EFIAPI *PEI_SET_GPIO_OUTPUT_VALUE) (
IN GPIO_PAD GpioPad,
IN UINT32 Value
);
typedef
EFI_STATUS
(EFIAPI *PEI_GPIO_SET_PAD) (
IN GPIO_PAD GpioPad,
IN GPIO_CONFIG *GpioData
);
typedef
UINT16
(EFIAPI *PEI_GET_PCH_DEVICE_ID) (
VOID
);
typedef
PCH_SERIES
(EFIAPI *PEI_GET_PCH_SERIES) (
VOID
);
typedef
PCH_STEPPING
(EFIAPI *PEI_GET_PCH_STEPPING) (
VOID
);
typedef
BOOLEAN
(EFIAPI *PEI_IS_PCH_GBE_REGION_VALID) (
VOID
);
typedef
UINT32
(EFIAPI *PEI_GET_PCH_GBE_PORT_NUMBER) (
VOID
);
typedef
BOOLEAN
(EFIAPI *PEI_IS_PCH_GBE_PRESENT) (
VOID
);
typedef
VOID
(EFIAPI *PEI_PchDisableGbe) (
VOID
);
typedef
VOID
(EFIAPI *PEI_PchDisableGbeByPchId) (
IN UINT8 PchId
);
typedef
EFI_STATUS
(EFIAPI *PEI_GpioConfigurePadsByPchId) (
IN UINT8 PchId,
IN UINT32 NumberOfItems,
IN GPIO_INIT_CONFIG *GpioInitTableAddress
);
typedef
EFI_STATUS
(EFIAPI *PEI_GpioGetInputValueByPchId) (
IN UINT8 PchId,
IN GPIO_PAD GpioPad,
OUT UINT32 *InputVal
);
typedef
EFI_STATUS
(EFIAPI *PEI_PeiGetCurrenClockingMode) (
OUT CLOCKING_MODES *ClockingMode
);
typedef
EFI_STATUS
(EFIAPI *PEI_GetPchPcieRpDevFunByPchId) (
IN UINT8 PchId,
IN UINTN RpNumber,
OUT UINTN *RpDev,
OUT UINTN *RpFun
);
typedef
BOOLEAN
(EFIAPI *PEI_IsSimicsEnvironment) (
VOID
);
typedef
UINT8
(EFIAPI *PEI_GetPchMaxSataPortNum) (
VOID
);
typedef
UINT8
(EFIAPI *PEI_GetPchMaxsSataPortNum) (
VOID
);
typedef
EFI_STATUS
(EFIAPI *PEI_GpioSetPadConfigByPchId) (
IN UINT8 PchId,
IN GPIO_PAD GpioPad,
IN GPIO_CONFIG *GpioData
);
typedef
UINT8
(EFIAPI *PEI_GetPchMaxPciePortNum) (
VOID
);
typedef
EFI_STATUS
(EFIAPI *PEI_PchGetSataLaneNumByPchId) (
IN UINT8 PchId,
UINT32 SataLaneIndex,
UINT8 *LaneNum
);
typedef
EFI_STATUS
(EFIAPI *PEI_PchGetPcieLaneNumByPchId) (
IN UINT8 PchId,
UINT32 PcieLaneIndex,
UINT8 *LaneNum
);
typedef
EFI_STATUS
(EFIAPI *PEI_PchGetsSataLaneNumByPchId) (
IN UINT8 PchId,
UINT32 SataLaneIndex,
UINT8 *LaneNum
);
typedef
UINTN
(EFIAPI *PEI_MmPciBase) (
IN UINT32 Bus,
IN UINT32 Device,
IN UINT32 Function
);
typedef
BOOLEAN
(EFIAPI *PEI_HybridSystemLevelEmulationEnabled) (
VOID
);
typedef
BOOLEAN
(EFIAPI *PEI_IioIsSocketPresent) (
IN UINT8 IioIndex
);
typedef
UINT8
(EFIAPI *PEI_GetMaxPortNumPerSocket) (
VOID
);
typedef
BOOLEAN
(EFIAPI *PEI_IsVMDEnabledForPort) (
IN UINT8 IioIndex,
IN UINT8 PortIndex
);
typedef
BOOLEAN
(EFIAPI *PEI_IioAreLanesAssignedToPort) (
IN IIO_GLOBALS *IioGlobalData,
IN UINT8 IioIndex,
IN UINT8 PortIndex
);
typedef
UINT8
(EFIAPI *PEI_GetPortIndexbyStack) (
IN UINT8 StackIndex,
IN UINT8 PortIndex
);
typedef
BOOLEAN
(EFIAPI *PEI_IsDmiStack) (
IN UINT8 Stack
);
typedef
BOOLEAN
(EFIAPI *PEI_IsCpuAndRevision) (
IN UINT8 CpuType,
IN UINT16 Revision
);
typedef
UINT8
(EFIAPI *PEI_GetMaxStackNumPerSocket) (
VOID
);
typedef
BOOLEAN
(EFIAPI *PEI_IioIsStackPresent) (
IN UINT8 IioIndex,
IN UINT8 StackIndex
);
typedef
UINT8
(EFIAPI *PEI_GetMaxPortNumPerStack) (
IN UINT8 Stack
);
//
// From KtiApi.h
//
typedef
BOOLEAN
(EFIAPI *PEI_SocketPresent) (
IN UINT32 SocId
);
/**
Get SVID Mapping from Socket and MCID
@param[in] Socket - Socket Id - 0 based
@param[in] McId - Memory controller 0 based
@param[in] SvidValue - SVID Value
@retval EFI_SUCCESS - Value found
@retval EFI_NOT_FOUND - Value not found
**/
typedef
EFI_STATUS
(EFIAPI *PEI_GetSvidMap) (
IN UINT8 Socket,
IN UINT8 McId,
IN UINT8 *SvidValue
);
typedef
UINT16
(EFIAPI *PEI_PmcGetAcpiBase) (
VOID
);
typedef
UINT16
(EFIAPI *PEI_PmcGetAcpiBaseByPchId) (
IN UINT8 PchId
);
typedef
EFI_STATUS
(EFIAPI *PEI_PchLpcIoDecodeRangesSet) (
IN UINT16 LpcIoDecodeRanges
);
typedef
VOID
(EFIAPI *PEI_CheckPowerOffNow) (
VOID
);
typedef
VOID
(EFIAPI *PEI_PmcSetPlatformStateAfterPowerFailure) (
IN UINT8 PowerStateAfterG3
);
typedef
VOID
(EFIAPI *PEI_PmcClearPowerFailureStatus) (
VOID
);
typedef
BOOLEAN
(EFIAPI *PEI_PmcIsPowerFailureDetected) (
VOID
);
typedef
EFI_STATUS
(EFIAPI *PEI_PchLpcGenIoRangeSet) (
IN UINT16 Address,
IN UINTN Length
);
typedef
EFI_STATUS
(EFIAPI *PEI_PchLpcIoEnableDecodingSet) (
IN UINT16 LpcIoEnableDecoding
);
typedef
EFI_STATUS
(EFIAPI *PEI_PchPcrAndThenOr32) (
IN PCH_SBI_PID Pid,
IN UINT16 Offset,
IN UINT32 AndData,
IN UINT32 OrData
);
typedef
EFI_STATUS
(EFIAPI *PEI_PchPcrRead32ByPchId) (
IN UINT8 PchId,
IN PCH_SBI_PID Pid,
IN UINT16 Offset,
OUT UINT32 *OutData
);
typedef
UINT8
(EFIAPI *PEI_ReadNmiEn) (
VOID
);
typedef
UINT8
(EFIAPI *PEI_GetPchXhciMaxUsb2PortNum) (
VOID
);
typedef
UINT8
(EFIAPI *PEI_GetPchXhciMaxUsb3PortNum) (
VOID
);
typedef
BOOLEAN
(EFIAPI *PEI_PchIsGbeAvailable) (
VOID
);
typedef
EFI_STATUS
(EFIAPI *PEI_EnableMcaOnCacheableMmio) (
VOID
);
typedef
BOOLEAN
(EFIAPI *PEI_X2ApicIdDetect) (
IN VOID *Host
);
//
// Abstracting silicon functional implementations from OpenBoardPkg code
//
typedef struct {
UINT32 Signature;
UINT32 Version;
PEI_GET_GPIO_INPUT_VALUE GpioGetInputValue;
PEI_SET_GPIO_OUTPUT_VALUE GpioSetOutputValue;
PEI_GPIO_SET_PAD GpioSetPadConfig;
PEI_GET_PCH_DEVICE_ID GetPchLpcDeviceId;
PEI_GET_PCH_SERIES GetPchSeries;
PEI_GET_PCH_STEPPING PchStepping;
PEI_IS_PCH_GBE_REGION_VALID PchIsGbeRegionValid;
PEI_GET_PCH_GBE_PORT_NUMBER PchGetGbePortNumber;
PEI_IS_PCH_GBE_PRESENT PchIsGbePresent;
PEI_PchDisableGbeByPchId PchDisableGbeByPchId;
PEI_GpioConfigurePadsByPchId GpioConfigurePadsByPchId;
PEI_GpioSetPadConfigByPchId GpioSetPadConfigByPchId;
PEI_GpioGetInputValueByPchId GpioGetInputValueByPchId;
PEI_PeiGetCurrenClockingMode PeiGetCurrenClockingMode;
PEI_GetPchPcieRpDevFunByPchId GetPchPcieRpDevFunByPchId;
PEI_IsSimicsEnvironment IsSimicsEnvironment;
PEI_GetPchMaxSataPortNum GetPchMaxSataPortNum;
PEI_GetPchMaxsSataPortNum GetPchMaxsSataPortNum;
PEI_GetPchMaxPciePortNum GetPchMaxPciePortNum;
PEI_PchGetSataLaneNumByPchId PchGetSataLaneNumByPchId;
PEI_PchGetsSataLaneNumByPchId PchGetsSataLaneNumByPchId;
PEI_PchGetPcieLaneNumByPchId PchGetPcieLaneNumByPchId;
PEI_MmPciBase MmPciBase;
PEI_HybridSystemLevelEmulationEnabled HybridSystemLevelEmulationEnabled;
PEI_IioIsSocketPresent IioIsSocketPresent;
PEI_GetMaxPortNumPerSocket GetMaxPortNumPerSocket;
PEI_IsVMDEnabledForPort IsVMDEnabledForPort;
PEI_IioAreLanesAssignedToPort IioAreLanesAssignedToPort;
PEI_GetPortIndexbyStack GetPortIndexbyStack;
PEI_IsDmiStack IsDmiStack;
PEI_IsCpuAndRevision IsCpuAndRevision;
PEI_PchDisableGbe PchDisableGbe;
PEI_GetMaxStackNumPerSocket GetMaxStackNumPerSocket;
PEI_IioIsStackPresent IioIsStackPresent;
PEI_GetMaxPortNumPerStack GetMaxPortNumPerStack;
PEI_SocketPresent SocketPresent;
PEI_GetSvidMap GetSvidMap;
PEI_PmcGetAcpiBase PmcGetAcpiBase;
PEI_PmcGetAcpiBaseByPchId PmcGetAcpiBaseByPchId;
PEI_PchLpcIoDecodeRangesSet PchLpcIoDecodeRangesSet;
PEI_CheckPowerOffNow CheckPowerOffNow;
PEI_PmcSetPlatformStateAfterPowerFailure PmcSetPlatformStateAfterPowerFailure;
PEI_PmcClearPowerFailureStatus PmcClearPowerFailureStatus;
PEI_PmcIsPowerFailureDetected PmcIsPowerFailureDetected;
PEI_PchLpcGenIoRangeSet PchLpcGenIoRangeSet;
PEI_PchLpcIoEnableDecodingSet PchLpcIoEnableDecodingSet;
PEI_PchPcrAndThenOr32 PchPcrAndThenOr32;
PEI_PchPcrRead32ByPchId PchPcrRead32ByPchId;
PEI_ReadNmiEn ReadNmiEn;
PEI_GetPchXhciMaxUsb2PortNum GetPchXhciMaxUsb2PortNum;
PEI_GetPchXhciMaxUsb3PortNum GetPchXhciMaxUsb3PortNum;
PEI_PchIsGbeAvailable PchIsGbeAvailable;
PEI_EnableMcaOnCacheableMmio EnableMcaOnCacheableMmio;
PEI_X2ApicIdDetect X2ApicIdDetect;
} DYNAMIC_SI_LIBARY_PPI;
extern EFI_GUID gDynamicSiLibraryPpiGuid;
#endif // _DYNAMIC_SI_LIBARY_PPI_H_