#define IOIO_SEG_DS (BIT11 | BIT10)\r
\r
\r
-typedef enum {\r
- GhcbCpl = 25,\r
- GhcbRflags = 46,\r
- GhcbRip,\r
- GhcbRsp = 59,\r
- GhcbRax = 63,\r
- GhcbRcx = 97,\r
- GhcbRdx,\r
- GhcbRbx,\r
- GhcbRbp = 101,\r
- GhcbRsi,\r
- GhcbRdi,\r
- GhcbR8,\r
- GhcbR9,\r
- GhcbR10,\r
- GhcbR11,\r
- GhcbR12,\r
- GhcbR13,\r
- GhcbR14,\r
- GhcbR15,\r
- GhcbXCr0 = 125,\r
-} GHCB_REGISTER;\r
-\r
typedef PACKED struct {\r
UINT8 Reserved1[203];\r
UINT8 Cpl;\r
- UINT8 Reserved2[148];\r
- UINT64 Dr7;\r
- UINT8 Reserved3[144];\r
+ UINT8 Reserved8[300];\r
UINT64 Rax;\r
UINT8 Reserved4[264];\r
UINT64 Rcx;\r
UINT32 GhcbUsage;\r
} GHCB;\r
\r
+#define GHCB_SAVE_AREA_QWORD_OFFSET(RegisterField) \\r
+ (OFFSET_OF (GHCB, SaveArea.RegisterField) / sizeof (UINT64))\r
+\r
+typedef enum {\r
+ GhcbCpl = GHCB_SAVE_AREA_QWORD_OFFSET (Cpl),\r
+ GhcbRax = GHCB_SAVE_AREA_QWORD_OFFSET (Rax),\r
+ GhcbRbx = GHCB_SAVE_AREA_QWORD_OFFSET (Rbx),\r
+ GhcbRcx = GHCB_SAVE_AREA_QWORD_OFFSET (Rcx),\r
+ GhcbRdx = GHCB_SAVE_AREA_QWORD_OFFSET (Rdx),\r
+ GhcbXCr0 = GHCB_SAVE_AREA_QWORD_OFFSET (XCr0),\r
+ GhcbSwExitCode = GHCB_SAVE_AREA_QWORD_OFFSET (SwExitCode),\r
+ GhcbSwExitInfo1 = GHCB_SAVE_AREA_QWORD_OFFSET (SwExitInfo1),\r
+ GhcbSwExitInfo2 = GHCB_SAVE_AREA_QWORD_OFFSET (SwExitInfo2),\r
+ GhcbSwScratch = GHCB_SAVE_AREA_QWORD_OFFSET (SwScratch),\r
+} GHCB_REGISTER;\r
+\r
typedef union {\r
struct {\r
UINT32 Lower32Bits;\r