/** @file SMM profile header file. Copyright (c) 2012 - 2019, Intel Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef _SMM_PROFILE_H_ #define _SMM_PROFILE_H_ #include "SmmProfileInternal.h" // // External functions // /** Initialize processor environment for SMM profile. @param CpuIndex The index of the processor. **/ VOID ActivateSmmProfile ( IN UINTN CpuIndex ); /** Initialize SMM profile in SMM CPU entry point. @param[in] Cr3 The base address of the page tables to use in SMM. **/ VOID InitSmmProfile ( UINT32 Cr3 ); /** Increase SMI number in each SMI entry. **/ VOID SmmProfileRecordSmiNum ( VOID ); /** The Page fault handler to save SMM profile data. @param Rip The RIP when exception happens. @param ErrorCode The Error code of exception. **/ VOID SmmProfilePFHandler ( UINTN Rip, UINTN ErrorCode ); /** Updates page table to make some memory ranges (like system memory) absent and make some memory ranges (like MMIO) present and execute disable. It also update 2MB-page to 4KB-page for some memory ranges. **/ VOID SmmProfileStart ( VOID ); /** Page fault IDT handler for SMM Profile. **/ VOID EFIAPI PageFaultIdtHandlerSmmProfile ( VOID ); /** Check if feature is supported by a processor. **/ VOID CheckFeatureSupported ( VOID ); /** Update page table according to protected memory ranges and the 4KB-page mapped memory ranges. **/ VOID InitPaging ( VOID ); /** Get CPU Index from APIC ID. **/ UINTN GetCpuIndex ( VOID ); /** Handler for Page Fault triggered by Guard page. @param ErrorCode The Error code of exception. **/ VOID GuardPagePFHandler ( UINTN ErrorCode ); // // The flag indicates if execute-disable is supported by processor. // extern BOOLEAN mXdSupported; // // The flag indicates if execute-disable is enabled on processor. // extern BOOLEAN mXdEnabled; // // The flag indicates if #DB will be setup in #PF handler. // extern BOOLEAN mSetupDebugTrap; #endif // _SMM_PROFILE_H_