summaryrefslogtreecommitdiff
path: root/Include/Protocol/SmmCpuState.h
blob: 1d6ab8807f22e6239f9b6d607f48c7e885eed9a0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
//*************************************************************************
//*************************************************************************
//**                                                                     **
//**        (C)Copyright 1985-2009, American Megatrends, Inc.            **
//**                                                                     **
//**                       All Rights Reserved.                          **
//**                                                                     **
//**      5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093           **
//**                                                                     **
//**                       Phone: (770)-246-8600                         **
//**                                                                     **
//*************************************************************************
//*************************************************************************

//**********************************************************************
// $Header: /Alaska/SOURCE/Modules/SMM/SmmCpuState.h 2     7/08/09 8:01p Markw $
//
// $Revision: 2 $
//
// $Date: 7/08/09 8:01p $
//**********************************************************************
// Revision History
// ----------------
// $Log: /Alaska/SOURCE/Modules/SMM/SmmCpuState.h $
// 
// 2     7/08/09 8:01p Markw
// Update headers.
// 
// 1     2/07/07 11:00a Markw
// 
// 1     2/07/07 10:59a Markw
// 
//**********************************************************************
//<AMI_FHDR_START>
//
// Name: SmmCpuSaveState.h
//
// Description:	This provides the SMM Cpu Save State protocol.
//
//<AMI_FHDR_END>
//**********************************************************************
#ifndef __SMM_CPU_SAVE_STATE_PROTOCOL_H__
#define __SMM_CPU_SAVE_STATE_PROTOCOL_H__
#ifdef __cplusplus
extern "C" {
#endif
#include <EFI.h>

#define EFI_SMM_CPU_SAVE_STATE_PROTOCOL_GUID \
    {0x21f302ad,0x6e94,0x471b,0x84,0xbc,0xb1,0x48,0x0,0x40,0x3a,0x1d} 

GUID_VARIABLE_DECLARATION(gEfiSmmCpuSaveStateProtocolGuid,EFI_SMM_CPU_SAVE_STATE_PROTOCOL_GUID);

typedef struct _EFI_SMM_CPU_SAVE_STATE_PROTOCOL EFI_SMM_CPU_SAVE_STATE_PROTOCOL;

typedef struct _EFI_SMM_CPU_STATE32 {
    UINT8   Reserved1[0xf8];        // fe00h
    UINT32  SMBASE;                 // fef8h
    UINT32  SMMRevId;               // fefch
    UINT16  IORestart;              // ff00h
    UINT16  AutoHALTRestart;        // ff02h
    UINT32  IEDBASE;                // ff04h
    UINT8   Reserved2[0x98];        // ff08h
    UINT32  IOMemAddr;              // ffa0h
    UINT32  IOMisc;                 // ffa4h
    UINT32  _ES;
    UINT32  _CS;
    UINT32  _SS;
    UINT32  _DS;
    UINT32  _FS;
    UINT32  _GS;
    UINT32  _LDTBase;
    UINT32  _TR;
    UINT32  _DR7;
    UINT32  _DR6;
    UINT32  _EAX;
    UINT32  _ECX;
    UINT32  _EDX;
    UINT32  _EBX;
    UINT32  _ESP;
    UINT32  _EBP;
    UINT32  _ESI;
    UINT32  _EDI;
    UINT32  _EIP;
    UINT32  _EFLAGS;
    UINT32  _CR3;
    UINT32  _CR0;
} EFI_SMM_CPU_STATE32;

typedef struct _EFI_SMM_CPU_STATE64 {
    UINT8   Reserved1[0x1d0];       // fc00h
    UINT32  GdtBaseHiDword;         // fdd0h
    UINT32  LdtBaseHiDword;         // fdd4h
    UINT32  IdtBaseHiDword;         // fdd8h
    UINT8   Reserved2[0xc];         // fddch
    UINT64  IO_EIP;                 // fde8h
    UINT8   Reserved3[0x50];        // fdf0h
    UINT32  _CR4;                   // fe40h
    UINT8   Reserved4[0x48];        // fe44h
    UINT32  GdtBaseLoDword;         // fe8ch
    UINT32  GdtLimit;               // fe90h
    UINT32  IdtBaseLoDword;         // fe94h
    UINT32  IdtLimit;               // fe98h
    UINT32  LdtBaseLoDword;         // fe9ch
    UINT32  LdtLimit;               // fea0h
    UINT32  LdtInfo;                // fea4h
    UINT8   Reserved5[0x50];        // fea8h
    UINT32  SMBASE;                 // fef8h
    UINT32  SMMRevId;               // fefch
    UINT16  AutoHALTRestart;        // ff00h
    UINT16  IORestart;              // ff02h
    UINT32  IEDBASE;                // ff04h
    UINT8   Reserved6[0x14];        // ff08h
    UINT64  _R15;                   // ff1ch
    UINT64  _R14;
    UINT64  _R13;
    UINT64  _R12;
    UINT64  _R11;
    UINT64  _R10;
    UINT64  _R9;
    UINT64  _R8;
    UINT64  _RAX;                   // ff5ch
    UINT64  _RCX;
    UINT64  _RDX;
    UINT64  _RBX;
    UINT64  _RSP;
    UINT64  _RBP;
    UINT64  _RSI;
    UINT64  _RDI;
    UINT64  IOMemAddr;              // ff9ch
    UINT32  IOMisc;                 // ffa4h
    UINT32  _ES;                    // ffa8h
    UINT32  _CS;
    UINT32  _SS;
    UINT32  _DS;
    UINT32  _FS;
    UINT32  _GS;
    UINT32  _LDTR;                  // ffc0h
    UINT32  _TR;
    UINT64  _DR7;                   // ffc8h
    UINT64  _DR6;
    UINT64  _RIP;                   // ffd8h
    UINT64  IA32_EFER;              // ffe0h
    UINT64  _RFLAGS;                // ffe8h
    UINT64  _CR3;                   // fff0h
    UINT64  _CR0;                   // fff8h
} EFI_SMM_CPU_STATE64;

typedef union _EFI_SMM_CPU_STATE {
    struct {
        UINT8               Reserved[0x200];
        EFI_SMM_CPU_STATE32 x86;
    };
    EFI_SMM_CPU_STATE64 x64;
} EFI_SMM_CPU_STATE;

#define EFI_SMM_MIN_REV_ID_x64      0x30006

typedef struct _EFI_SMM_CPU_SAVE_STATE_PROTOCOL {
    EFI_SMM_CPU_STATE     **CpuSaveState;
};

/****** DO NOT WRITE BELOW THIS LINE *******/
#ifdef __cplusplus
}
#endif
#endif

//*************************************************************************
//*************************************************************************
//**                                                                     **
//**        (C)Copyright 1985-2009, American Megatrends, Inc.            **
//**                                                                     **
//**                       All Rights Reserved.                          **
//**                                                                     **
//**      5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093           **
//**                                                                     **
//**                       Phone: (770)-246-8600                         **
//**                                                                     **
//*************************************************************************
//*************************************************************************