/** @file PCH SMM private lib. Copyright (c) 2021, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #include #include #include #include #include /** Set InSmm.Sts bit **/ VOID PchSetInSmmSts ( VOID ) { UINT32 Data32; /// /// Read memory location FED30880h OR with 00000001h, place the result in EAX, /// and write data to lower 32 bits of MSR 1FEh (sample code available) /// Data32 = MmioRead32 (0xFED30880); AsmWriteMsr32 (MSR_SPCL_CHIPSET_USAGE, Data32 | BIT0); /// /// Read FED30880h back to ensure the setting went through. /// Data32 = MmioRead32 (0xFED30880); } /** Clear InSmm.Sts bit **/ VOID PchClearInSmmSts ( VOID ) { UINT32 Data32; /// /// Read memory location FED30880h AND with FFFFFFFEh, place the result in EAX, /// and write data to lower 32 bits of MSR 1FEh (sample code available) /// Data32 = MmioRead32 (0xFED30880); AsmWriteMsr32 (MSR_SPCL_CHIPSET_USAGE, Data32 & (UINT32) (~BIT0)); /// /// Read FED30880h back to ensure the setting went through. /// Data32 = MmioRead32 (0xFED30880); }