]> git.proxmox.com Git - mirror_edk2.git/blame - EdkCompatibilityPkg/Foundation/Framework/Protocol/SmmCpuState/CpuSaveState.h
Add in the 1st version of ECP.
[mirror_edk2.git] / EdkCompatibilityPkg / Foundation / Framework / Protocol / SmmCpuState / CpuSaveState.h
CommitLineData
3eb9473e 1/*++\r
2\r
3Copyright (c) 2005, Intel Corporation\r
4All rights reserved. This program and the accompanying materials\r
5are licensed and made available under the terms and conditions of the BSD License\r
6which accompanies this distribution. The full text of the license may be found at\r
7http://opensource.org/licenses/bsd-license.php\r
8\r
9THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
10WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
11\r
12\r
13Module Name:\r
14\r
15 CpuSaveState.h\r
16\r
17Abstract:\r
18\r
19 Define data structures used by EFI_SMM_CPU_SAVE_STATE protocol.\r
20\r
21Revision History\r
22\r
23++*/\r
24\r
25#ifndef _CPUSAVESTATE_H_\r
26#define _CPUSAVESTATE_H_\r
27\r
28typedef unsigned char ASM_UINT8;\r
29typedef ASM_UINT8 ASM_BOOL;\r
30typedef unsigned short ASM_UINT16;\r
31typedef unsigned long ASM_UINT32;\r
32\r
33#ifdef _H2INC\r
34typedef double ASM_UINT64;\r
35#else\r
36typedef unsigned __int64 ASM_UINT64;\r
37#endif\r
38\r
39#pragma pack (push)\r
40#pragma pack (1)\r
41\r
42typedef struct _EFI_SMM_CPU_STATE32 {\r
43 ASM_UINT8 Reserved1[0xf8]; // fe00h\r
44 ASM_UINT32 SMBASE; // fef8h\r
45 ASM_UINT32 SMMRevId; // fefch\r
46 ASM_UINT16 IORestart; // ff00h\r
47 ASM_UINT16 AutoHALTRestart; // ff02h\r
48 ASM_UINT32 IEDBASE; // ff04h\r
49 ASM_UINT8 Reserved2[0x98]; // ff08h\r
50 ASM_UINT32 IOMemAddr; // ffa0h\r
51 ASM_UINT32 IOMisc; // ffa4h\r
52 ASM_UINT32 _ES;\r
53 ASM_UINT32 _CS;\r
54 ASM_UINT32 _SS;\r
55 ASM_UINT32 _DS;\r
56 ASM_UINT32 _FS;\r
57 ASM_UINT32 _GS;\r
58 ASM_UINT32 _LDTBase;\r
59 ASM_UINT32 _TR;\r
60 ASM_UINT32 _DR7;\r
61 ASM_UINT32 _DR6;\r
62 ASM_UINT32 _EAX;\r
63 ASM_UINT32 _ECX;\r
64 ASM_UINT32 _EDX;\r
65 ASM_UINT32 _EBX;\r
66 ASM_UINT32 _ESP;\r
67 ASM_UINT32 _EBP;\r
68 ASM_UINT32 _ESI;\r
69 ASM_UINT32 _EDI;\r
70 ASM_UINT32 _EIP;\r
71 ASM_UINT32 _EFLAGS;\r
72 ASM_UINT32 _CR3;\r
73 ASM_UINT32 _CR0;\r
74} EFI_SMM_CPU_STATE32;\r
75\r
76typedef struct _EFI_SMM_CPU_STATE64 {\r
77 ASM_UINT8 Reserved1[0x1d0]; // fc00h\r
78 ASM_UINT32 GdtBaseHiDword; // fdd0h\r
79 ASM_UINT32 LdtBaseHiDword; // fdd4h\r
80 ASM_UINT32 IdtBaseHiDword; // fdd8h\r
81 ASM_UINT8 Reserved2[0xc]; // fddch\r
82 ASM_UINT64 IO_EIP; // fde8h\r
83 ASM_UINT8 Reserved3[0x50]; // fdf0h\r
84 ASM_UINT32 _CR4; // fe40h\r
85 ASM_UINT8 Reserved4[0x48]; // fe44h\r
86 ASM_UINT32 GdtBaseLoDword; // fe8ch\r
87 ASM_UINT32 GdtLimit; // fe90h\r
88 ASM_UINT32 IdtBaseLoDword; // fe94h\r
89 ASM_UINT32 IdtLimit; // fe98h\r
90 ASM_UINT32 LdtBaseLoDword; // fe9ch\r
91 ASM_UINT32 LdtLimit; // fea0h\r
92 ASM_UINT32 LdtInfo; // fea4h\r
93 ASM_UINT8 Reserved5[0x50]; // fea8h\r
94 ASM_UINT32 SMBASE; // fef8h\r
95 ASM_UINT32 SMMRevId; // fefch\r
96 ASM_UINT16 IORestart; // ff00h\r
97 ASM_UINT16 AutoHALTRestart; // ff02h\r
98 ASM_UINT32 IEDBASE; // ff04h\r
99 ASM_UINT8 Reserved6[0x14]; // ff08h\r
100 ASM_UINT64 _R15; // ff1ch\r
101 ASM_UINT64 _R14;\r
102 ASM_UINT64 _R13;\r
103 ASM_UINT64 _R12;\r
104 ASM_UINT64 _R11;\r
105 ASM_UINT64 _R10;\r
106 ASM_UINT64 _R9;\r
107 ASM_UINT64 _R8;\r
108 ASM_UINT64 _RAX; // ff5ch\r
109 ASM_UINT64 _RCX;\r
110 ASM_UINT64 _RDX;\r
111 ASM_UINT64 _RBX;\r
112 ASM_UINT64 _RSP;\r
113 ASM_UINT64 _RBP;\r
114 ASM_UINT64 _RSI;\r
115 ASM_UINT64 _RDI;\r
116 ASM_UINT64 IOMemAddr; // ff9ch\r
117 ASM_UINT32 IOMisc; // ffa4h\r
118 ASM_UINT32 _ES; // ffa8h\r
119 ASM_UINT32 _CS;\r
120 ASM_UINT32 _SS;\r
121 ASM_UINT32 _DS;\r
122 ASM_UINT32 _FS;\r
123 ASM_UINT32 _GS;\r
124 ASM_UINT32 _LDTR; // ffc0h\r
125 ASM_UINT32 _TR;\r
126 ASM_UINT64 _DR7; // ffc8h\r
127 ASM_UINT64 _DR6;\r
128 ASM_UINT64 _RIP; // ffd8h\r
129 ASM_UINT64 IA32_EFER; // ffe0h\r
130 ASM_UINT64 _RFLAGS; // ffe8h\r
131 ASM_UINT64 _CR3; // fff0h\r
132 ASM_UINT64 _CR0; // fff8h\r
133} EFI_SMM_CPU_STATE64;\r
134\r
135#pragma warning (push)\r
136#pragma warning (disable: 4201)\r
137typedef union _EFI_SMM_CPU_STATE {\r
138 struct {\r
139 ASM_UINT8 Reserved[0x200];\r
140 EFI_SMM_CPU_STATE32 x86;\r
141 };\r
142 EFI_SMM_CPU_STATE64 x64;\r
143} EFI_SMM_CPU_STATE;\r
144#pragma warning (pop)\r
145\r
146#pragma pack (pop)\r
147\r
148#define EFI_SMM_MIN_REV_ID_x64 0x30006\r
149\r
150#endif\r