/** @file File to contain all the hardware specific stuff for the Smm Power Button dispatch protocol. Copyright (c) 2021, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #include #include GLOBAL_REMOVE_IF_UNREFERENCED CONST PCH_SMM_SOURCE_DESC mPowerButtonSourceDesc = { PCH_SMM_SCI_EN_DEPENDENT, { { { ACPI_ADDR_TYPE, {R_ACPI_IO_PM1_EN} }, S_ACPI_IO_PM1_EN, N_ACPI_IO_PM1_EN_PWRBTN }, NULL_BIT_DESC_INITIALIZER }, { { { ACPI_ADDR_TYPE, {R_ACPI_IO_PM1_STS} }, S_ACPI_IO_PM1_STS, N_ACPI_IO_PM1_STS_PWRBTN } }, { { ACPI_ADDR_TYPE, {R_ACPI_IO_SMI_STS} }, S_ACPI_IO_SMI_STS, N_ACPI_IO_SMI_STS_PM1_STS_REG } }; /** Get the power button status. @param[in] Record The pointer to the DATABASE_RECORD. @param[out] Context Calling context from the hardware, will be updated with the current power button status. **/ VOID EFIAPI PowerButtonGetContext ( IN DATABASE_RECORD *Record, OUT PCH_SMM_CONTEXT *Context ) { if (PmcGetPwrBtnLevel ()) { Context->PowerButton.Phase = EfiPowerButtonExit; } else { Context->PowerButton.Phase = EfiPowerButtonEntry; } } /** Check whether Power Button status of two contexts match @param[in] Context1 Context 1 that includes Power Button status 1 @param[in] Context2 Context 2 that includes Power Button status 2 @retval FALSE Power Button status match @retval TRUE Power Button status don't match **/ BOOLEAN EFIAPI PowerButtonCmpContext ( IN PCH_SMM_CONTEXT *Context1, IN PCH_SMM_CONTEXT *Context2 ) { return (BOOLEAN) (Context1->PowerButton.Phase == Context2->PowerButton.Phase); }