/** @file Header file for PmcLib. Copyright (c) 2021, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef _PMC_LIB_H_ #define _PMC_LIB_H_ #pragma pack(1) typedef enum { PmcTPch25_10us = 0, PmcTPch25_100us, PmcTPch25_1ms, PmcTPch25_10ms, } PMC_TPCH25_TIMING; typedef enum { PmcNotASleepState, PmcInS0State, PmcS1SleepState, PmcS2SleepState, PmcS3SleepState, PmcS4SleepState, PmcS5SleepState, PmcUndefinedState, } PMC_SLEEP_STATE; typedef struct { UINT32 Buf0; UINT32 Buf1; UINT32 Buf2; UINT32 Buf3; } PMC_IPC_COMMAND_BUFFER; // // Structure to Check different attributes for CrashLog supported by PMC. // typedef union { struct { UINT32 Avail : 1; ///< CrashLog feature availability bit UINT32 Dis : 1; ///< CrasLog Disable bit UINT32 Rsvd : 2; ///< Reserved UINT32 Size : 12; ///< CrasLog data size. (If it is zero, use default size 0xC00) UINT32 BaseOffset : 16; ///< Start offset of CrashLog in PMC SSRAM } Bits; struct { UINT32 Avail : 1; ///< CrashLog feature availability bit UINT32 Dis : 1; ///< CrasLog Disable bit UINT32 Mech : 2; ///< CrashLog mechanism UINT32 ManuTri : 1; ///< Manul trigger command. UINT32 Clr : 1; ///< Clear Command UINT32 AllReset : 1; ///< Trigger on all reset command UINT32 ReArm : 1; ///< Re-arm command UINT32 Rsvd : 20; ///< Pch Specific reserved UINT32 CrashLogReq: 1; ///< Crash log requestor flow UINT32 TriArmedSts: 1; ///< Trigger armed status, re-arm indication bit. UINT32 TriAllReset: 1; ///< Trigger on all resets status UINT32 CrashDisSts: 1; ///< Crash log disabled status UINT32 PchRsvd : 16; ///< Pch Specific reserved UINT32 DesTableOffset: 16; ///< Descriptor Table offset } Bits64; UINT32 Uint32; UINT64 Uint64; } PMC_IPC_DISCOVERY_BUF; typedef union { struct { UINT32 Offset : 16; UINT32 Size : 16; } Info; UINT32 Uint32; } PMC_CRASHLOG_RECORDS; typedef struct PmcCrashLogLink { PMC_CRASHLOG_RECORDS Record; UINT64 AllocateAddress; struct PmcCrashLogLink *Next; } PMC_CRASHLOG_LINK; #pragma pack() /** Get PCH ACPI base address. @retval Address Address of PWRM base address. **/ UINT16 PmcGetAcpiBase ( VOID ); /** Get PCH PWRM base address. @retval Address Address of PWRM base address. **/ UINT32 PmcGetPwrmBase ( VOID ); /** This function sets tPCH25 timing @param[in] TimingValue tPCH25 timing value (10us, 100us, 1ms, 10ms) **/ VOID PmcSetTPch25Timing ( IN PMC_TPCH25_TIMING TimingValue ); /** This function checks if RTC Power Failure occurred by reading RTC_PWR_FLR bit @retval RTC Power Failure state: TRUE - Battery is always present. FALSE - CMOS is cleared. **/ BOOLEAN PmcIsRtcBatteryGood ( VOID ); /** This function checks if Power Failure occurred by reading PWR_FLR bit @retval Power Failure state **/ BOOLEAN PmcIsPowerFailureDetected ( VOID ); /** This function checks if Power Failure occurred by reading SUS_PWR_FLR bit @retval SUS Power Failure state **/ BOOLEAN PmcIsSusPowerFailureDetected ( VOID ); /** This function clears Power Failure status (PWR_FLR) **/ VOID PmcClearPowerFailureStatus ( VOID ); /** This function clears Global Reset status (GBL_RST_STS) **/ VOID PmcClearGlobalResetStatus ( VOID ); /** This function clears Host Reset status (HOST_RST_STS) **/ VOID PmcClearHostResetStatus ( VOID ); /** This function clears SUS Power Failure status (SUS_PWR_FLR) **/ VOID PmcClearSusPowerFailureStatus ( VOID ); /** This function sets state to which platform will get after power is reapplied @param[in] PowerStateAfterG3 0: S0 state (boot) 1: S5/S4 State **/ VOID PmcSetPlatformStateAfterPowerFailure ( IN UINT8 PowerStateAfterG3 ); /** This function enables Power Button SMI **/ VOID PmcEnablePowerButtonSmi ( VOID ); /** This function disables Power Button SMI **/ VOID PmcDisablePowerButtonSmi ( VOID ); /** This function reads PM Timer Count driven by 3.579545 MHz clock @retval PM Timer Count **/ UINT32 PmcGetTimerCount ( VOID ); /** Get Sleep Type that platform has waken from @retval SleepType Sleep Type **/ PMC_SLEEP_STATE PmcGetSleepTypeAfterWake ( VOID ); /** Clear PMC Wake Status **/ VOID PmcClearWakeStatus ( VOID ); /** Configure sleep state @param[in] SleepState S0/S1/S3/S4/S5, refer to PMC_SLEEP_STATE **/ VOID PmcSetSleepState ( PMC_SLEEP_STATE SleepState ); /** Check if platform boots after shutdown caused by power button override event @retval TRUE Power Button Override occurred in last system boot @retval FALSE Power Button Override didn't occur **/ BOOLEAN PmcIsPowerButtonOverrideDetected ( VOID ); /** This function will set the DISB - DRAM Initialization Scratchpad Bit. **/ VOID PmcSetDramInitScratchpad ( VOID ); /** Check global SMI enable is set @retval TRUE Global SMI enable is set FALSE Global SMI enable is not set **/ BOOLEAN PmcIsGblSmiEn ( VOID ); /** This function checks if SMI Lock is set @retval SMI Lock state **/ BOOLEAN PmcIsSmiLockSet ( VOID ); /** This function checks if Debug Mode is locked @retval Debug Mode Lock state **/ BOOLEAN PmcIsDebugModeLocked ( VOID ); /** Check TCO second timeout status. @retval TRUE TCO reboot happened. @retval FALSE TCO reboot didn't happen. **/ BOOLEAN TcoSecondToHappened ( VOID ); /** This function clears the Second TO status bit **/ VOID TcoClearSecondToStatus ( VOID ); /** Check TCO SMI ENABLE is locked @retval TRUE TCO SMI ENABLE is locked FALSE TCO SMI ENABLE is not locked **/ BOOLEAN TcoIsSmiLock ( VOID ); /** Check if user wants to turn off in PEI phase **/ VOID CheckPowerOffNow( VOID ); /** Clear any SMI status or wake status left from boot. **/ VOID ClearSmiAndWake ( VOID ); /** Function to check if Dirty Warm Reset occurs (Global Reset has been converted to Host Reset) @reval TRUE DWR occurs @reval FALSE Normal boot flow **/ BOOLEAN PmcIsDwrBootMode ( VOID ); #endif // _PMC_LIB_H_