PageRenderTime 60ms CodeModel.GetById 30ms RepoModel.GetById 0ms app.codeStats 0ms

/processors/IA32/bochs/cpu/smm.h

https://bitbucket.org/goonsh/blessed-khoros2
C Header | 308 lines | 151 code | 12 blank | 145 comment | 0 complexity | 912a6456dbff724f8f271f2d53cd278d MD5 | raw file
  1. /////////////////////////////////////////////////////////////////////////
  2. // $Id: smm.h,v 1.5 2008/02/02 21:46:53 sshwarts Exp $
  3. /////////////////////////////////////////////////////////////////////////
  4. //
  5. // Copyright (c) 2006 Stanislav Shwartsman
  6. // Written by Stanislav Shwartsman [sshwarts at sourceforge net]
  7. //
  8. // This library is free software; you can redistribute it and/or
  9. // modify it under the terms of the GNU Lesser General Public
  10. // License as published by the Free Software Foundation; either
  11. // version 2 of the License, or (at your option) any later version.
  12. //
  13. // This library is distributed in the hope that it will be useful,
  14. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  16. // Lesser General Public License for more details.
  17. //
  18. // You should have received a copy of the GNU Lesser General Public
  19. // License along with this library; if not, write to the Free Software
  20. // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  21. /////////////////////////////////////////////////////////////////////////
  22. #ifndef BX_SMM_H
  23. #define BX_SMM_H
  24. /* SMM feature masks */
  25. #define SMM_IO_INSTRUCTION_RESTART (0x00010000)
  26. #define SMM_SMBASE_RELOCATION (0x00020000)
  27. #define SMM_SAVE_STATE_MAP_SIZE 128
  28. #if BX_SUPPORT_X86_64
  29. // for x86-64 configuration using AMD Athlon 64 512-byte SMM save state map
  30. // revision ID according to QEMU/Bochs BIOS
  31. #define SMM_REVISION_ID (0x00000064 | SMM_SMBASE_RELOCATION)
  32. #define SMRAM_OFFSET_RAX_HI32 0x7ffc
  33. #define SMRAM_OFFSET_RAX_LO32 0x7ff8
  34. #define SMRAM_OFFSET_RCX_HI32 0x7ff4
  35. #define SMRAM_OFFSET_RCX_LO32 0x7ff0
  36. #define SMRAM_OFFSET_RDX_HI32 0x7fec
  37. #define SMRAM_OFFSET_RDX_LO32 0x7fe8
  38. #define SMRAM_OFFSET_RBX_HI32 0x7fe4
  39. #define SMRAM_OFFSET_RBX_LO32 0x7fe0
  40. #define SMRAM_OFFSET_RSP_HI32 0x7fdc
  41. #define SMRAM_OFFSET_RSP_LO32 0x7fd8
  42. #define SMRAM_OFFSET_RBP_HI32 0x7fd4
  43. #define SMRAM_OFFSET_RBP_LO32 0x7fd0
  44. #define SMRAM_OFFSET_RSI_HI32 0x7fcc
  45. #define SMRAM_OFFSET_RSI_LO32 0x7fc8
  46. #define SMRAM_OFFSET_RDI_HI32 0x7fc4
  47. #define SMRAM_OFFSET_RDI_LO32 0x7fc0
  48. #define SMRAM_OFFSET_R8_HI32 0x7fbc
  49. #define SMRAM_OFFSET_R8_LO32 0x7fb8
  50. #define SMRAM_OFFSET_R9_HI32 0x7fb4
  51. #define SMRAM_OFFSET_R9_LO32 0x7fb0
  52. #define SMRAM_OFFSET_R10_HI32 0x7fac
  53. #define SMRAM_OFFSET_R10_LO32 0x7fa8
  54. #define SMRAM_OFFSET_R11_HI32 0x7fa4
  55. #define SMRAM_OFFSET_R11_LO32 0x7fa0
  56. #define SMRAM_OFFSET_R12_HI32 0x7f9c
  57. #define SMRAM_OFFSET_R12_LO32 0x7f98
  58. #define SMRAM_OFFSET_R13_HI32 0x7f94
  59. #define SMRAM_OFFSET_R13_LO32 0x7f90
  60. #define SMRAM_OFFSET_R14_HI32 0x7f8c
  61. #define SMRAM_OFFSET_R14_LO32 0x7f88
  62. #define SMRAM_OFFSET_R15_HI32 0x7f84
  63. #define SMRAM_OFFSET_R15_LO32 0x7f80
  64. #define SMRAM_OFFSET_RIP_HI32 0x7f7c
  65. #define SMRAM_OFFSET_RIP_LO32 0x7f78
  66. // Hi32 part of RFLAGS64 0x7f74 (always zero)
  67. #define SMRAM_OFFSET_RFLAGS32 0x7f70
  68. // Hi32 part of 64-bit DR6 0x7f6c (always zero)
  69. #define SMRAM_OFFSET_DR6 0x7f68
  70. // Hi32 part of 64-bit DR7 0x7f64 (always zero)
  71. #define SMRAM_OFFSET_DR7 0x7f60
  72. // Hi32 part of 64-bit CR0 0x7f5c (always zero)
  73. #define SMRAM_OFFSET_CR0 0x7f58
  74. // Hi32 part of 64-bit CR3 0x7f54 (always zero, 32-bit physical address)
  75. #define SMRAM_OFFSET_CR3 0x7f50
  76. // Hi32 part of 64-bit CR4 0x7f4c (always zero)
  77. #define SMRAM_OFFSET_CR4 0x7f48
  78. // reserved 0x7f44
  79. // reserved 0x7f40
  80. // reserved 0x7f3c
  81. // reserved 0x7f38
  82. // reserved 0x7f34
  83. // reserved 0x7f30
  84. // reserved 0x7f2c
  85. // reserved 0x7f28
  86. // reserved 0x7f24
  87. // reserved 0x7f20
  88. // reserved 0x7f1c
  89. // reserved 0x7f18
  90. // reserved 0x7f14
  91. // reserved 0x7f10
  92. // reserved 0x7f0c
  93. // reserved 0x7f08
  94. // reserved 0x7f04
  95. #define SMRAM_SMBASE_OFFSET 0x7f00
  96. #define SMRAM_SMM_REVISION_ID 0x7efc
  97. // reserved 0x7ef8
  98. // reserved 0x7ef4
  99. // reserved 0x7ef0
  100. // reserved 0x7eec
  101. // reserved 0x7ee8
  102. // reserved 0x7ee4
  103. // reserved 0x7ee0
  104. // reserved 0x7edc
  105. // reserved 0x7ed8
  106. // High part of 64-bit EFER 0x7ed4 (always zero)
  107. #define SMRAM_OFFSET_EFER 0x7ed0
  108. // reserved 0x7ecc
  109. #define SMRAM_IO_INSTRUCTION_RESTART 0x7ec8
  110. #define SMRAM_AUTOHALT_RESTART 0x7ec8
  111. #define SMRAM_NMI_MASK 0x7ec8
  112. // reserved 0x7ec4
  113. #define SMRAM_SMM_IO_TRAP 0x7ec0
  114. // reserved 0x7ebc
  115. // reserved 0x7eb8
  116. // reserved 0x7eb4
  117. // reserved 0x7eb0
  118. // reserved 0x7eac
  119. // reserved 0x7ea8
  120. // reserved 0x7ea4
  121. // reserved 0x7ea0
  122. #define SMRAM_TR_BASE_HI32 0x7e9c
  123. #define SMRAM_TR_BASE_LO32 0x7e98
  124. #define SMRAM_TR_LIMIT 0x7e94
  125. #define SMRAM_TR_SELECTOR_AR 0x7e90
  126. #define SMRAM_IDTR_BASE_HI32 0x7e8c
  127. #define SMRAM_IDTR_BASE_LO32 0x7e88
  128. #define SMRAM_IDTR_LIMIT 0x7e84
  129. // reserved 0x7e80
  130. #define SMRAM_LDTR_BASE_HI32 0x7e7c
  131. #define SMRAM_LDTR_BASE_LO32 0x7e78
  132. #define SMRAM_LDTR_LIMIT 0x7e74
  133. #define SMRAM_LDTR_SELECTOR_AR 0x7e70
  134. #define SMRAM_GDTR_BASE_HI32 0x7e6c
  135. #define SMRAM_GDTR_BASE_LO32 0x7e68
  136. #define SMRAM_GDTR_LIMIT 0x7e64
  137. // reserved 0x7e60
  138. #define SMRAM_GS_BASE_HI32 0x7e5c
  139. #define SMRAM_GS_BASE_LO32 0x7e58
  140. #define SMRAM_GS_LIMIT 0x7e54
  141. #define SMRAM_GS_SELECTOR_AR 0x7e50
  142. #define SMRAM_FS_BASE_HI32 0x7e4c
  143. #define SMRAM_FS_BASE_LO32 0x7e48
  144. #define SMRAM_FS_LIMIT 0x7e44
  145. #define SMRAM_FS_SELECTOR_AR 0x7e40
  146. #define SMRAM_DS_BASE_HI32 0x7e3c
  147. #define SMRAM_DS_BASE_LO32 0x7e38
  148. #define SMRAM_DS_LIMIT 0x7e34
  149. #define SMRAM_DS_SELECTOR_AR 0x7e30
  150. #define SMRAM_SS_BASE_HI32 0x7e2c
  151. #define SMRAM_SS_BASE_LO32 0x7e28
  152. #define SMRAM_SS_LIMIT 0x7e24
  153. #define SMRAM_SS_SELECTOR_AR 0x7e20
  154. #define SMRAM_CS_BASE_HI32 0x7e1c
  155. #define SMRAM_CS_BASE_LO32 0x7e18
  156. #define SMRAM_CS_LIMIT 0x7e14
  157. #define SMRAM_CS_SELECTOR_AR 0x7e10
  158. #define SMRAM_ES_BASE_HI32 0x7e0c
  159. #define SMRAM_ES_BASE_LO32 0x7e08
  160. #define SMRAM_ES_LIMIT 0x7e04
  161. #define SMRAM_ES_SELECTOR_AR 0x7e00
  162. #else /* BX_SUPPORT_X86_64 == 0 */
  163. // for x86-32 configuration using Intel P6 512-byte SMM save state map
  164. #define SMM_REVISION_ID (0x00000000 | SMM_SMBASE_RELOCATION)
  165. // source for Intel P6 SMM save state map used: www.sandpile.org
  166. #define SMRAM_OFFSET_CR0 0x7ffc
  167. #define SMRAM_OFFSET_CR3 0x7ff8
  168. #define SMRAM_OFFSET_EFLAGS 0x7ff4
  169. #define SMRAM_OFFSET_EIP 0x7ff0
  170. #define SMRAM_OFFSET_EDI 0x7fec
  171. #define SMRAM_OFFSET_ESI 0x7fe8
  172. #define SMRAM_OFFSET_EBP 0x7fe4
  173. #define SMRAM_OFFSET_ESP 0x7fe0
  174. #define SMRAM_OFFSET_EBX 0x7fdc
  175. #define SMRAM_OFFSET_EDX 0x7fd8
  176. #define SMRAM_OFFSET_ECX 0x7fd4
  177. #define SMRAM_OFFSET_EAX 0x7fd0
  178. #define SMRAM_OFFSET_DR6 0x7fcc
  179. #define SMRAM_OFFSET_DR7 0x7fc8
  180. #define SMRAM_TR_SELECTOR 0x7fc4
  181. #define SMRAM_LDTR_SELECTOR 0x7fc0
  182. #define SMRAM_GS_SELECTOR 0x7fbc
  183. #define SMRAM_FS_SELECTOR 0x7fb8
  184. #define SMRAM_DS_SELECTOR 0x7fb4
  185. #define SMRAM_SS_SELECTOR 0x7fb0
  186. #define SMRAM_CS_SELECTOR 0x7fac
  187. #define SMRAM_ES_SELECTOR 0x7fa8
  188. #define SMRAM_SS_BASE 0x7fa4
  189. #define SMRAM_SS_LIMIT 0x7fa0
  190. #define SMRAM_SS_SELECTOR_AR 0x7f9c
  191. #define SMRAM_CS_BASE 0x7f98
  192. #define SMRAM_CS_LIMIT 0x7f94
  193. #define SMRAM_CS_SELECTOR_AR 0x7f90
  194. #define SMRAM_ES_BASE 0x7f8c
  195. #define SMRAM_ES_LIMIT 0x7f88
  196. #define SMRAM_ES_SELECTOR_AR 0x7f84
  197. #define SMRAM_LDTR_BASE 0x7f80
  198. #define SMRAM_LDTR_LIMIT 0x7f7c
  199. #define SMRAM_LDTR_SELECTOR_AR 0x7f78
  200. #define SMRAM_GDTR_BASE 0x7f74
  201. #define SMRAM_GDTR_LIMIT 0x7f70
  202. // reserved 0x7f6c
  203. // reserved 0x7f68
  204. #define SMRAM_TR_BASE 0x7f64
  205. #define SMRAM_TR_LIMIT 0x7f60
  206. #define SMRAM_TR_SELECTOR_AR 0x7f5c
  207. #define SMRAM_IDTR_BASE 0x7f58
  208. #define SMRAM_IDTR_LIMIT 0x7f54
  209. // reserved 0x7f50
  210. #define SMRAM_GS_BASE 0x7f4c
  211. #define SMRAM_GS_LIMIT 0x7f48
  212. #define SMRAM_GS_SELECTOR_AR 0x7f44
  213. #define SMRAM_FS_BASE 0x7f40
  214. #define SMRAM_FS_LIMIT 0x7f3c
  215. #define SMRAM_FS_SELECTOR_AR 0x7f38
  216. #define SMRAM_DS_BASE 0x7f34
  217. #define SMRAM_DS_LIMIT 0x7f30
  218. #define SMRAM_DS_SELECTOR_AR 0x7f2c
  219. // reserved 0x7f28
  220. // reserved 0x7f24
  221. // reserved 0x7f20
  222. // reserved 0x7f1c
  223. // reserved 0x7f18
  224. #define SMRAM_OFFSET_CR4 0x7f14
  225. // reserved 0x7f10 (used for I/O restart)
  226. // reserved 0x7f0c (used for I/O restart)
  227. // reserved 0x7f08 (used for I/O restart)
  228. // reserved 0x7f04 (used for I/O restart)
  229. #define SMRAM_IO_INSTRUCTION_RESTART 0x7f00
  230. #define SMRAM_AUTOHALT_RESTART 0x7f00
  231. #define SMRAM_SMM_REVISION_ID 0x7efc
  232. #define SMRAM_SMBASE_OFFSET 0x7ef8
  233. // reserved 0x7ef4
  234. // reserved 0x7ef0
  235. // reserved 0x7eec
  236. // reserved 0x7ee8
  237. // reserved 0x7ee4
  238. // reserved 0x7ee0
  239. // reserved 0x7edc
  240. // reserved 0x7ed8
  241. // reserved 0x7ed4
  242. // reserved 0x7ed0
  243. // reserved 0x7ecc
  244. // reserved 0x7ec8
  245. // reserved 0x7ec4
  246. // reserved 0x7ec0
  247. // reserved 0x7ebc
  248. // reserved 0x7eb8
  249. // reserved 0x7eb4
  250. // reserved 0x7eb0
  251. // reserved 0x7eac
  252. // reserved 0x7ea8
  253. // reserved 0x7ea4
  254. // reserved 0x7ea0
  255. // reserved 0x7e9c
  256. // reserved 0x7e98
  257. // reserved 0x7e94
  258. // reserved 0x7e90
  259. // reserved 0x7e8c
  260. // reserved 0x7e88
  261. // reserved 0x7e84
  262. // reserved 0x7e80
  263. // reserved 0x7e7c
  264. // reserved 0x7e78
  265. // reserved 0x7e74
  266. // reserved 0x7e70
  267. // reserved 0x7e6c
  268. // reserved 0x7e68
  269. // reserved 0x7e64
  270. // reserved 0x7e60
  271. // reserved 0x7e5c
  272. // reserved 0x7e58
  273. // reserved 0x7e54
  274. // reserved 0x7e50
  275. // reserved 0x7e4c
  276. // reserved 0x7e48
  277. // reserved 0x7e44
  278. // reserved 0x7e40
  279. // reserved 0x7e3c
  280. // reserved 0x7e38
  281. // reserved 0x7e34
  282. // reserved 0x7e30
  283. // reserved 0x7e2c
  284. // reserved 0x7e28
  285. // reserved 0x7e24
  286. // reserved 0x7e20
  287. // reserved 0x7e1c
  288. // reserved 0x7e18
  289. // reserved 0x7e14
  290. // reserved 0x7e10
  291. // reserved 0x7e0c
  292. // reserved 0x7e08
  293. // reserved 0x7e04
  294. // reserved 0x7e00
  295. #endif /* BX_SUPPORT_X86_64 */
  296. #endif