]> git.proxmox.com Git - mirror_edk2.git/commitdiff
MdePkg: Clean up GHCB field offsets and save area
authorTom Lendacky <thomas.lendacky@amd.com>
Fri, 6 Nov 2020 17:53:03 +0000 (11:53 -0600)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Tue, 10 Nov 2020 19:07:55 +0000 (19:07 +0000)
BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3008

Use OFFSET_OF () and sizeof () to calculate the GHCB register field
offsets instead of hardcoding the values in the GHCB_REGISTER enum.
Define only fields that are used per the GHCB specification, which will
result in removing some fields and adding others.

Also, remove the DR7 field from the GHCB_SAVE_AREA structure since it is
not used/defined in the GHCB specification and then rename the reserved
fields as appropriate.

Cc: Michael D Kinney <michael.d.kinney@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Cc: Zhiguang Liu <zhiguang.liu@intel.com>
Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com>
Message-Id: <5e9245c7600b9b2d55dd7586b8df28b91b75b72b.1604685192.git.thomas.lendacky@amd.com>
Reviewed-by: Liming Gao <gaoliming@byosoft.com.cn>
MdePkg/Include/Register/Amd/Ghcb.h

index 54a80da0f6d7ca38317886480805e9bd0f37c579..ccdb662af7a7e7ae469863edfba8f1ebc70a3a54 100644 (file)
 #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
@@ -136,6 +111,22 @@ typedef PACKED struct {
   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