File: smm.h

package info (click to toggle)
bochs 2.3-2etch1
  • links: PTS
  • area: main
  • in suites: etch
  • size: 14,116 kB
  • ctags: 16,927
  • sloc: cpp: 130,524; ansic: 18,822; sh: 7,922; makefile: 3,836; yacc: 1,056; asm: 463; perl: 381; lex: 280; csh: 3
file content (307 lines) | stat: -rwxr-xr-x 11,896 bytes parent folder | download | duplicates (2)
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
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
/////////////////////////////////////////////////////////////////////////
// $Id: smm.h,v 1.1 2006/04/05 17:44:04 sshwarts Exp $
/////////////////////////////////////////////////////////////////////////
//
//   Copyright (c) 2006 Stanislav Shwartsman
//          Written by Stanislav Shwartsman <stl at fidonet.org.il>
//
//  This library is free software; you can redistribute it and/or
//  modify it under the terms of the GNU Lesser General Public
//  License as published by the Free Software Foundation; either
//  version 2 of the License, or (at your option) any later version.
//
//  This library is distributed in the hope that it will be useful,
//  but WITHOUT ANY WARRANTY; without even the implied warranty of
//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
//  Lesser General Public License for more details.
//
//  You should have received a copy of the GNU Lesser General Public
//  License along with this library; if not, write to the Free Software
//  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
/////////////////////////////////////////////////////////////////////////

#ifndef BX_SMM_H
#define BX_SMM_H

/* SMM feature masks */
#define SMM_IO_INSTRUCTION_RESTART  (0x00010000)
#define SMM_SMBASE_RELOCATION       (0x00020000)

#define SMM_SAVE_STATE_MAP_SIZE 128

#if BX_SUPPORT_X86_64 

// for x86-64 configuration using AMD Athlon 64 512-byte SMM save state map
#define SMM_REVISION_ID (0x00000000 | SMM_SMBASE_RELOCATION)

#define SMRAM_OFFSET_RAX_HI32  0x7ffc
#define SMRAM_OFFSET_RAX_LO32  0x7ff8
#define SMRAM_OFFSET_RCX_HI32  0x7ff4
#define SMRAM_OFFSET_RCX_LO32  0x7ff0
#define SMRAM_OFFSET_RDX_HI32  0x7fec
#define SMRAM_OFFSET_RDX_LO32  0x7fe8
#define SMRAM_OFFSET_RBX_HI32  0x7fe4
#define SMRAM_OFFSET_RBX_LO32  0x7fe0
#define SMRAM_OFFSET_RSP_HI32  0x7fdc
#define SMRAM_OFFSET_RSP_LO32  0x7fd8
#define SMRAM_OFFSET_RBP_HI32  0x7fd4
#define SMRAM_OFFSET_RBP_LO32  0x7fd0
#define SMRAM_OFFSET_RSI_HI32  0x7fcc
#define SMRAM_OFFSET_RSI_LO32  0x7fc8
#define SMRAM_OFFSET_RDI_HI32  0x7fc4
#define SMRAM_OFFSET_RDI_LO32  0x7fc0
#define SMRAM_OFFSET_R8_HI32   0x7fbc
#define SMRAM_OFFSET_R8_LO32   0x7fb8
#define SMRAM_OFFSET_R9_HI32   0x7fb4
#define SMRAM_OFFSET_R9_LO32   0x7fb0
#define SMRAM_OFFSET_R10_HI32  0x7fac
#define SMRAM_OFFSET_R10_LO32  0x7fa8
#define SMRAM_OFFSET_R11_HI32  0x7fa4
#define SMRAM_OFFSET_R11_LO32  0x7fa0
#define SMRAM_OFFSET_R12_HI32  0x7f9c
#define SMRAM_OFFSET_R12_LO32  0x7f98
#define SMRAM_OFFSET_R13_HI32  0x7f94
#define SMRAM_OFFSET_R13_LO32  0x7f90
#define SMRAM_OFFSET_R14_HI32  0x7f8c
#define SMRAM_OFFSET_R14_LO32  0x7f88
#define SMRAM_OFFSET_R15_HI32  0x7f84
#define SMRAM_OFFSET_R15_LO32  0x7f80
#define SMRAM_OFFSET_RIP_HI32  0x7f7c
#define SMRAM_OFFSET_RIP_LO32  0x7f78
// Hi32 part of RFLAGS64       0x7f74    (always zero)
#define SMRAM_OFFSET_RFLAGS32  0x7f70
// Hi32 part of 64-bit DR6     0x7f6c    (always zero)
#define SMRAM_OFFSET_DR6       0x7f68
// Hi32 part of 64-bit DR7     0x7f64    (always zero)
#define SMRAM_OFFSET_DR7       0x7f60
// Hi32 part of 64-bit CR0     0x7f5c    (always zero)
#define SMRAM_OFFSET_CR0       0x7f58
// Hi32 part of 64-bit CR3     0x7f54    (always zerom, 32-bit physical address)
#define SMRAM_OFFSET_CR3       0x7f50
// Hi32 part of 64-bit CR4     0x7f4c    (always zero)
#define SMRAM_OFFSET_CR4       0x7f48
// reserved                    0x7f44
// reserved                    0x7f40
// reserved                    0x7f3c
// reserved                    0x7f38
// reserved                    0x7f34
// reserved                    0x7f30
// reserved                    0x7f2c
// reserved                    0x7f28
// reserved                    0x7f24
// reserved                    0x7f20
// reserved                    0x7f1c
// reserved                    0x7f18
// reserved                    0x7f14
// reserved                    0x7f10
// reserved                    0x7f0c
// reserved                    0x7f08
// reserved                    0x7f04
#define SMRAM_SMBASE_OFFSET    0x7f00
#define SMRAM_SMM_REVISION_ID  0x7efc
// reserved                    0x7ef8
// reserved                    0x7ef4
// reserved                    0x7ef0
// reserved                    0x7eec
// reserved                    0x7ee8
// reserved                    0x7ee4
// reserved                    0x7ee0
// reserved                    0x7edc
// reserved                    0x7ed8
// High part of 64-bit EFER    0x7ed4    (always zero)
#define SMRAM_OFFSET_EFER      0x7ed0
// reserved                    0x7ecc
#define SMRAM_IO_INSTRUCTION_RESTART 0x7ec8
#define SMRAM_AUTOHALT_RESTART       0x7ec8
#define SMRAM_NMI_MASK               0x7ec8
// reserved                    0x7ec4
#define SMRAM_SMM_IO_TRAP      0x7ec0
// reserved                    0x7ebc
// reserved                    0x7eb8
// reserved                    0x7eb4
// reserved                    0x7eb0
// reserved                    0x7eac
// reserved                    0x7ea8
// reserved                    0x7ea4
// reserved                    0x7ea0
#define SMRAM_TR_BASE_HI32     0x7e9c
#define SMRAM_TR_BASE_LO32     0x7e98
#define SMRAM_TR_LIMIT         0x7e94
#define SMRAM_TR_SELECTOR_AR   0x7e90
#define SMRAM_IDTR_BASE_HI32   0x7e8c
#define SMRAM_IDTR_BASE_LO32   0x7e88
#define SMRAM_IDTR_LIMIT       0x7e84
// reserved                    0x7e80
#define SMRAM_LDTR_BASE_HI32   0x7e7c
#define SMRAM_LDTR_BASE_LO32   0x7e78
#define SMRAM_LDTR_LIMIT       0x7e74
#define SMRAM_LDTR_SELECTOR_AR 0x7e70
#define SMRAM_GDTR_BASE_HI32   0x7e6c
#define SMRAM_GDTR_BASE_LO32   0x7e68
#define SMRAM_GDTR_LIMIT       0x7e64
// reserved                    0x7e60
#define SMRAM_GS_BASE_HI32     0x7e5c
#define SMRAM_GS_BASE_LO32     0x7e58
#define SMRAM_GS_LIMIT         0x7e54
#define SMRAM_GS_SELECTOR_AR   0x7e50
#define SMRAM_FS_BASE_HI32     0x7e4c
#define SMRAM_FS_BASE_LO32     0x7e48
#define SMRAM_FS_LIMIT         0x7e44
#define SMRAM_FS_SELECTOR_AR   0x7e40
#define SMRAM_DS_BASE_HI32     0x7e3c
#define SMRAM_DS_BASE_LO32     0x7e38
#define SMRAM_DS_LIMIT         0x7e34
#define SMRAM_DS_SELECTOR_AR   0x7e30
#define SMRAM_SS_BASE_HI32     0x7e2c
#define SMRAM_SS_BASE_LO32     0x7e28
#define SMRAM_SS_LIMIT         0x7e24
#define SMRAM_SS_SELECTOR_AR   0x7e20
#define SMRAM_CS_BASE_HI32     0x7e1c
#define SMRAM_CS_BASE_LO32     0x7e18
#define SMRAM_CS_LIMIT         0x7e14
#define SMRAM_CS_SELECTOR_AR   0x7e10
#define SMRAM_ES_BASE_HI32     0x7e0c
#define SMRAM_ES_BASE_LO32     0x7e08
#define SMRAM_ES_LIMIT         0x7e04
#define SMRAM_ES_SELECTOR_AR   0x7e00

#else  /* BX_SUPPORT_X86_64 == 0 */

// for x86-32 configuration using Intel P6 512-byte SMM save state map
#define SMM_REVISION_ID (0x00000000 | SMM_SMBASE_RELOCATION)

// source for Intel P6 SMM save state map used: www.sandpile.org

#define SMRAM_OFFSET_CR0       0x7ffc
#define SMRAM_OFFSET_CR3       0x7ff8
#define SMRAM_OFFSET_EFLAGS    0x7ff4
#define SMRAM_OFFSET_EIP       0x7ff0
#define SMRAM_OFFSET_EDI       0x7fec
#define SMRAM_OFFSET_ESI       0x7fe8
#define SMRAM_OFFSET_EBP       0x7fe4
#define SMRAM_OFFSET_ESP       0x7fe0
#define SMRAM_OFFSET_EBX       0x7fdc
#define SMRAM_OFFSET_EDX       0x7fd8
#define SMRAM_OFFSET_ECX       0x7fd4
#define SMRAM_OFFSET_EAX       0x7fd0
#define SMRAM_OFFSET_DR6       0x7fcc
#define SMRAM_OFFSET_DR7       0x7fc8
#define SMRAM_TR_SELECTOR      0x7fc4
#define SMRAM_LDTR_SELECTOR    0x7fc0
#define SMRAM_GS_SELECTOR      0x7fbc
#define SMRAM_FS_SELECTOR      0x7fb8
#define SMRAM_DS_SELECTOR      0x7fb4
#define SMRAM_SS_SELECTOR      0x7fb0
#define SMRAM_CS_SELECTOR      0x7fac
#define SMRAM_ES_SELECTOR      0x7fa8
#define SMRAM_SS_BASE          0x7fa4
#define SMRAM_SS_LIMIT         0x7fa0
#define SMRAM_SS_SELECTOR_AR   0x7f9c
#define SMRAM_CS_BASE          0x7f98
#define SMRAM_CS_LIMIT         0x7f94
#define SMRAM_CS_SELECTOR_AR   0x7f90
#define SMRAM_ES_BASE          0x7f8c
#define SMRAM_ES_LIMIT         0x7f88
#define SMRAM_ES_SELECTOR_AR   0x7f84
#define SMRAM_LDTR_BASE        0x7f80
#define SMRAM_LDTR_LIMIT       0x7f7c
#define SMRAM_LDTR_SELECTOR_AR 0x7f78
#define SMRAM_GDTR_BASE        0x7f74
#define SMRAM_GDTR_LIMIT       0x7f70
// reserved                    0x7f6c
// reserved                    0x7f68
#define SMRAM_TR_BASE          0x7f64
#define SMRAM_TR_LIMIT         0x7f60
#define SMRAM_TR_SELECTOR_AR   0x7f5c
#define SMRAM_IDTR_BASE        0x7f58
#define SMRAM_IDTR_LIMIT       0x7f54
// reserved                    0x7f50
#define SMRAM_GS_BASE          0x7f4c
#define SMRAM_GS_LIMIT         0x7f48
#define SMRAM_GS_SELECTOR_AR   0x7f44
#define SMRAM_FS_BASE          0x7f40
#define SMRAM_FS_LIMIT         0x7f3c
#define SMRAM_FS_SELECTOR_AR   0x7f38
#define SMRAM_DS_BASE          0x7f34
#define SMRAM_DS_LIMIT         0x7f30
#define SMRAM_DS_SELECTOR_AR   0x7f2c
// reserved                    0x7f28
// reserved                    0x7f24
// reserved                    0x7f20
// reserved                    0x7f1c
// reserved                    0x7f18
#define SMRAM_OFFSET_CR4       0x7f14
// reserved                    0x7f10    (used for I/O restart)
// reserved                    0x7f0c    (used for I/O restart)
// reserved                    0x7f08    (used for I/O restart)
// reserved                    0x7f04    (used for I/O restart)
#define SMRAM_IO_INSTRUCTION_RESTART 0x7f00
#define SMRAM_AUTOHALT_RESTART       0x7f00
#define SMRAM_SMM_REVISION_ID  0x7efc
#define SMRAM_SMBASE_OFFSET    0x7ef8
// reserved                    0x7ef4
// reserved                    0x7ef0
// reserved                    0x7eec
// reserved                    0x7ee8
// reserved                    0x7ee4
// reserved                    0x7ee0
// reserved                    0x7edc
// reserved                    0x7ed8
// reserved                    0x7ed4
// reserved                    0x7ed0
// reserved                    0x7ecc
// reserved                    0x7ec8
// reserved                    0x7ec4
// reserved                    0x7ec0
// reserved                    0x7ebc
// reserved                    0x7eb8
// reserved                    0x7eb4
// reserved                    0x7eb0
// reserved                    0x7eac
// reserved                    0x7ea8
// reserved                    0x7ea4
// reserved                    0x7ea0
// reserved                    0x7e9c
// reserved                    0x7e98
// reserved                    0x7e94
// reserved                    0x7e90
// reserved                    0x7e8c
// reserved                    0x7e88
// reserved                    0x7e84
// reserved                    0x7e80
// reserved                    0x7e7c
// reserved                    0x7e78
// reserved                    0x7e74
// reserved                    0x7e70
// reserved                    0x7e6c
// reserved                    0x7e68
// reserved                    0x7e64
// reserved                    0x7e60
// reserved                    0x7e5c
// reserved                    0x7e58
// reserved                    0x7e54
// reserved                    0x7e50
// reserved                    0x7e4c
// reserved                    0x7e48
// reserved                    0x7e44
// reserved                    0x7e40
// reserved                    0x7e3c
// reserved                    0x7e38
// reserved                    0x7e34
// reserved                    0x7e30
// reserved                    0x7e2c
// reserved                    0x7e28
// reserved                    0x7e24
// reserved                    0x7e20
// reserved                    0x7e1c
// reserved                    0x7e18
// reserved                    0x7e14
// reserved                    0x7e10
// reserved                    0x7e0c
// reserved                    0x7e08
// reserved                    0x7e04
// reserved                    0x7e00

#endif /* BX_SUPPORT_X86_64 */

#endif