VirtualBox

source: vbox/trunk/src/VBox/Devices/EFI/Firmware/UefiCpuPkg/PiSmmCpuDxeSmm/SmmProfileInternal.h@ 85788

Last change on this file since 85788 was 80721, checked in by vboxsync, 5 years ago

Devices/EFI/FirmwareNew: Start upgrade process to edk2-stable201908 (compiles on Windows and works to some extent), bugref:4643

  • Property svn:eol-style set to native
File size: 3.6 KB
Line 
1/** @file
2SMM profile internal header file.
3
4Copyright (c) 2012 - 2018, Intel Corporation. All rights reserved.<BR>
5SPDX-License-Identifier: BSD-2-Clause-Patent
6
7**/
8
9#ifndef _SMM_PROFILE_INTERNAL_H_
10#define _SMM_PROFILE_INTERNAL_H_
11
12#include <Protocol/SmmReadyToLock.h>
13#include <Library/UefiRuntimeServicesTableLib.h>
14#include <Library/DxeServicesTableLib.h>
15#include <Library/CpuLib.h>
16#include <IndustryStandard/Acpi.h>
17
18#include "SmmProfileArch.h"
19
20//
21// Configure the SMM_PROFILE DTS region size
22//
23#define SMM_PROFILE_DTS_SIZE (4 * 1024 * 1024) // 4M
24
25#define MAX_PF_PAGE_COUNT 0x2
26
27#define PEBS_RECORD_NUMBER 0x2
28
29#define MAX_PF_ENTRY_COUNT 10
30
31//
32// This MACRO just enable unit test for the profile
33// Please disable it.
34//
35
36#define IA32_PF_EC_ID (1u << 4)
37
38#define SMM_PROFILE_NAME L"SmmProfileData"
39
40//
41// CPU generic definition
42//
43#define CPUID1_EDX_XD_SUPPORT 0x100000
44#define MSR_EFER 0xc0000080
45#define MSR_EFER_XD 0x800
46
47#define CPUID1_EDX_BTS_AVAILABLE 0x200000
48
49#define DR6_SINGLE_STEP 0x4000
50#define RFLAG_TF 0x100
51
52#define MSR_DEBUG_CTL 0x1D9
53#define MSR_DEBUG_CTL_LBR 0x1
54#define MSR_DEBUG_CTL_TR 0x40
55#define MSR_DEBUG_CTL_BTS 0x80
56#define MSR_DEBUG_CTL_BTINT 0x100
57#define MSR_DS_AREA 0x600
58
59#define HEAP_GUARD_NONSTOP_MODE \
60 ((PcdGet8 (PcdHeapGuardPropertyMask) & (BIT6|BIT3|BIT2)) > BIT6)
61
62#define NULL_DETECTION_NONSTOP_MODE \
63 ((PcdGet8 (PcdNullPointerDetectionPropertyMask) & (BIT6|BIT1)) > BIT6)
64
65typedef struct {
66 EFI_PHYSICAL_ADDRESS Base;
67 EFI_PHYSICAL_ADDRESS Top;
68} MEMORY_RANGE;
69
70typedef struct {
71 MEMORY_RANGE Range;
72 BOOLEAN Present;
73 BOOLEAN Nx;
74} MEMORY_PROTECTION_RANGE;
75
76typedef struct {
77 UINT64 HeaderSize;
78 UINT64 MaxDataEntries;
79 UINT64 MaxDataSize;
80 UINT64 CurDataEntries;
81 UINT64 CurDataSize;
82 UINT64 TsegStart;
83 UINT64 TsegSize;
84 UINT64 NumSmis;
85 UINT64 NumCpus;
86} SMM_PROFILE_HEADER;
87
88typedef struct {
89 UINT64 SmiNum;
90 UINT64 CpuNum;
91 UINT64 ApicId;
92 UINT64 ErrorCode;
93 UINT64 Instruction;
94 UINT64 Address;
95 UINT64 SmiCmd;
96} SMM_PROFILE_ENTRY;
97
98extern SMM_S3_RESUME_STATE *mSmmS3ResumeState;
99extern UINTN gSmiExceptionHandlers[];
100extern BOOLEAN mXdSupported;
101X86_ASSEMBLY_PATCH_LABEL gPatchXdSupported;
102extern UINTN *mPFEntryCount;
103extern UINT64 (*mLastPFEntryValue)[MAX_PF_ENTRY_COUNT];
104extern UINT64 *(*mLastPFEntryPointer)[MAX_PF_ENTRY_COUNT];
105
106//
107// Internal functions
108//
109
110/**
111 Update IDT table to replace page fault handler and INT 1 handler.
112
113**/
114VOID
115InitIdtr (
116 VOID
117 );
118
119/**
120 Check if the memory address will be mapped by 4KB-page.
121
122 @param Address The address of Memory.
123
124**/
125BOOLEAN
126IsAddressSplit (
127 IN EFI_PHYSICAL_ADDRESS Address
128 );
129
130/**
131 Check if the memory address will be mapped by 4KB-page.
132
133 @param Address The address of Memory.
134 @param Nx The flag indicates if the memory is execute-disable.
135
136**/
137BOOLEAN
138IsAddressValid (
139 IN EFI_PHYSICAL_ADDRESS Address,
140 IN BOOLEAN *Nx
141 );
142
143/**
144 Page Fault handler for SMM use.
145
146**/
147VOID
148SmiDefaultPFHandler (
149 VOID
150 );
151
152/**
153 Clear TF in FLAGS.
154
155 @param SystemContext A pointer to the processor context when
156 the interrupt occurred on the processor.
157
158**/
159VOID
160ClearTrapFlag (
161 IN OUT EFI_SYSTEM_CONTEXT SystemContext
162 );
163
164#endif // _SMM_PROFILE_H_
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette