blob: 1a82ac05ce92192940ad5b00a53aea0c5aa8bfb2 [file] [log] [blame]
/** @file
SMM profile header file.
Copyright (c) 2012 - 2019, Intel Corporation. All rights reserved.<BR>
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_