2015-10-19 21:12:53 +02:00
|
|
|
/** @file
|
|
|
|
SMM profile header file.
|
|
|
|
|
2016-02-18 18:46:25 +01:00
|
|
|
Copyright (c) 2012 - 2016, Intel Corporation. All rights reserved.<BR>
|
2015-10-19 21:12:53 +02:00
|
|
|
This program and the accompanying materials
|
|
|
|
are licensed and made available under the terms and conditions of the BSD License
|
|
|
|
which accompanies this distribution. The full text of the license may be found at
|
|
|
|
http://opensource.org/licenses/bsd-license.php
|
|
|
|
|
|
|
|
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
|
|
|
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
|
|
|
|
|
|
|
**/
|
|
|
|
|
|
|
|
#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 XD feature is supported by a processor.
|
|
|
|
|
|
|
|
**/
|
|
|
|
VOID
|
|
|
|
CheckFeatureSupported (
|
2016-07-02 06:01:02 +02:00
|
|
|
VOID
|
2015-10-19 21:12:53 +02:00
|
|
|
);
|
|
|
|
|
|
|
|
/**
|
|
|
|
Update page table according to protected memory ranges and the 4KB-page mapped memory ranges.
|
|
|
|
|
|
|
|
**/
|
|
|
|
VOID
|
|
|
|
InitPaging (
|
|
|
|
VOID
|
|
|
|
);
|
|
|
|
|
2016-11-22 08:05:11 +01:00
|
|
|
/**
|
|
|
|
Get CPU Index from APIC ID.
|
|
|
|
|
|
|
|
**/
|
|
|
|
UINTN
|
|
|
|
GetCpuIndex (
|
|
|
|
VOID
|
|
|
|
);
|
|
|
|
|
2018-08-20 05:35:58 +02:00
|
|
|
/**
|
|
|
|
Handler for Page Fault triggered by Guard page.
|
|
|
|
|
|
|
|
@param ErrorCode The Error code of exception.
|
|
|
|
|
|
|
|
**/
|
|
|
|
VOID
|
|
|
|
GuardPagePFHandler (
|
|
|
|
UINTN ErrorCode
|
|
|
|
);
|
|
|
|
|
2016-10-23 17:19:52 +02:00
|
|
|
//
|
|
|
|
// The flag indicates if execute-disable is supported by processor.
|
|
|
|
//
|
2015-10-19 21:12:53 +02:00
|
|
|
extern BOOLEAN mXdSupported;
|
2016-10-23 17:19:52 +02:00
|
|
|
//
|
|
|
|
// The flag indicates if execute-disable is enabled on processor.
|
|
|
|
//
|
2015-10-19 21:12:53 +02:00
|
|
|
extern BOOLEAN mXdEnabled;
|
2018-08-20 05:35:58 +02:00
|
|
|
//
|
|
|
|
// The flag indicates if #DB will be setup in #PF handler.
|
|
|
|
//
|
|
|
|
extern BOOLEAN mSetupDebugTrap;
|
2015-10-19 21:12:53 +02:00
|
|
|
|
|
|
|
#endif // _SMM_PROFILE_H_
|