[PATCH v3 01/11] MdePkg: Clean up GHCB field offsets and save area
Lendacky, Thomas
From: Tom Lendacky <thomas.lendacky@...>
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@...> Cc: Liming Gao <gaoliming@...> Cc: Zhiguang Liu <zhiguang.liu@...> Signed-off-by: Tom Lendacky <thomas.lendacky@...> --- MdePkg/Include/Register/Amd/Ghcb.h | 40 +++++++------------- 1 file changed, 14 insertions(+), 26 deletions(-) diff --git a/MdePkg/Include/Register/Amd/Ghcb.h b/MdePkg/Include/Register/Amd/Ghcb.h index 54a80da0f6d7..1fce64d5b7cd 100644 --- a/MdePkg/Include/Register/Amd/Ghcb.h +++ b/MdePkg/Include/Register/Amd/Ghcb.h @@ -82,35 +82,10 @@ #define IOIO_SEG_DS (BIT11 | BIT10) -typedef enum { - GhcbCpl = 25, - GhcbRflags = 46, - GhcbRip, - GhcbRsp = 59, - GhcbRax = 63, - GhcbRcx = 97, - GhcbRdx, - GhcbRbx, - GhcbRbp = 101, - GhcbRsi, - GhcbRdi, - GhcbR8, - GhcbR9, - GhcbR10, - GhcbR11, - GhcbR12, - GhcbR13, - GhcbR14, - GhcbR15, - GhcbXCr0 = 125, -} GHCB_REGISTER; - typedef PACKED struct { UINT8 Reserved1[203]; UINT8 Cpl; - UINT8 Reserved2[148]; - UINT64 Dr7; - UINT8 Reserved3[144]; + UINT8 Reserved8[300]; UINT64 Rax; UINT8 Reserved4[264]; UINT64 Rcx; @@ -136,6 +111,19 @@ typedef PACKED struct { UINT32 GhcbUsage; } GHCB; +typedef enum { + GhcbCpl = OFFSET_OF (GHCB, SaveArea.Cpl) / sizeof (UINT64), + GhcbRax = OFFSET_OF (GHCB, SaveArea.Rax) / sizeof (UINT64), + GhcbRbx = OFFSET_OF (GHCB, SaveArea.Rbx) / sizeof (UINT64), + GhcbRcx = OFFSET_OF (GHCB, SaveArea.Rcx) / sizeof (UINT64), + GhcbRdx = OFFSET_OF (GHCB, SaveArea.Rdx) / sizeof (UINT64), + GhcbXCr0 = OFFSET_OF (GHCB, SaveArea.XCr0) / sizeof (UINT64), + GhcbSwExitCode = OFFSET_OF (GHCB, SaveArea.SwExitCode) / sizeof (UINT64), + GhcbSwExitInfo1 = OFFSET_OF (GHCB, SaveArea.SwExitInfo1) / sizeof (UINT64), + GhcbSwExitInfo2 = OFFSET_OF (GHCB, SaveArea.SwExitInfo2) / sizeof (UINT64), + GhcbSwScratch = OFFSET_OF (GHCB, SaveArea.SwScratch) / sizeof (UINT64), +} GHCB_REGISTER; + typedef union { struct { UINT32 Lower32Bits; -- 2.28.0 |
|