BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3275
The Page State Change NAE exit will be used by the SEV-SNP guest to request a page state change using the GHCB protocol. See the GHCB spec section 4.1.6 and 2.3.1 for more detail on the structure definitions. Cc: James Bottomley <j...@linux.ibm.com> Cc: Min Xu <min.m...@intel.com> Cc: Jiewen Yao <jiewen....@intel.com> Cc: Tom Lendacky <thomas.lenda...@amd.com> Cc: Jordan Justen <jordan.l.jus...@intel.com> Cc: Ard Biesheuvel <ardb+tianoc...@kernel.org> Cc: Laszlo Ersek <ler...@redhat.com> Signed-off-by: Brijesh Singh <brijesh.si...@amd.com> --- MdePkg/Include/Register/Amd/Fam17Msr.h | 17 +++++++++ MdePkg/Include/Register/Amd/Ghcb.h | 39 +++++++++++++++++--- 2 files changed, 50 insertions(+), 6 deletions(-) diff --git a/MdePkg/Include/Register/Amd/Fam17Msr.h b/MdePkg/Include/Register/Amd/Fam17Msr.h index c074e871a7..084e7fb63a 100644 --- a/MdePkg/Include/Register/Amd/Fam17Msr.h +++ b/MdePkg/Include/Register/Amd/Fam17Msr.h @@ -53,6 +53,19 @@ typedef union { UINT64 GuestFrameNumber:52; } GhcbGpaRegister; + struct { + UINT64 Function:12; + UINT64 GuestFrameNumber:40; + UINT64 Operation:4; + UINT64 Reserved:8; + } SnpPageStateChangeRequest; + + struct { + UINT32 Function:12; + UINT32 Reserved:20; + UINT32 ErrorCode; + } SnpPageStateChangeResponse; + VOID *Ghcb; UINT64 GhcbPhysicalAddress; @@ -65,6 +78,10 @@ typedef union { #define GHCB_INFO_TERMINATE_REQUEST 256 #define GHCB_INFO_GHCB_GPA_REGISTER_REQUEST 18 #define GHCB_INFO_GHCB_GPA_REGISTER_RESPONSE 19 +#define GHCB_INFO_SNP_PAGE_STATE_CHANGE_REQUEST 20 +#define GHCB_INFO_SNP_PAGE_STATE_CHANGE_RESPONSE 21 +#define SNP_PAGE_STATE_PRIVATE 1 +#define SNP_PAGE_STATE_SHARED 2 #define GHCB_TERMINATE_GHCB 0 #define GHCB_TERMINATE_GHCB_GENERAL 0 diff --git a/MdePkg/Include/Register/Amd/Ghcb.h b/MdePkg/Include/Register/Amd/Ghcb.h index ccdb662af7..f3c719e70e 100644 --- a/MdePkg/Include/Register/Amd/Ghcb.h +++ b/MdePkg/Include/Register/Amd/Ghcb.h @@ -49,12 +49,13 @@ // // VMG Special Exit Codes // -#define SVM_EXIT_MMIO_READ 0x80000001ULL -#define SVM_EXIT_MMIO_WRITE 0x80000002ULL -#define SVM_EXIT_NMI_COMPLETE 0x80000003ULL -#define SVM_EXIT_AP_RESET_HOLD 0x80000004ULL -#define SVM_EXIT_AP_JUMP_TABLE 0x80000005ULL -#define SVM_EXIT_UNSUPPORTED 0x8000FFFFULL +#define SVM_EXIT_MMIO_READ 0x80000001ULL +#define SVM_EXIT_MMIO_WRITE 0x80000002ULL +#define SVM_EXIT_NMI_COMPLETE 0x80000003ULL +#define SVM_EXIT_AP_RESET_HOLD 0x80000004ULL +#define SVM_EXIT_AP_JUMP_TABLE 0x80000005ULL +#define SVM_EXIT_SNP_PAGE_STATE_CHANGE 0x80000010ULL +#define SVM_EXIT_UNSUPPORTED 0x8000FFFFULL // // IOIO Exit Information @@ -154,4 +155,30 @@ typedef union { #define GHCB_EVENT_INJECTION_TYPE_EXCEPTION 3 #define GHCB_EVENT_INJECTION_TYPE_SOFT_INT 4 +#define SNP_PAGE_STATE_MAX_NPAGES 4095 +#define SNP_PAGE_STATE_MAX_ENTRY 253 +#define SNP_PAGE_STATE_PRIVATE 1 +#define SNP_PAGE_STATE_SHARED 2 +#define SNP_PAGE_STATE_PSMASH 3 +#define SNP_PAGE_STATE_UNSMASH 4 + +typedef PACKED struct { + UINT64 CurrentPage:12; + UINT64 GuestFrameNumber:40; + UINT64 Op:4; + UINT64 PageSize:1; + UINT64 Rsvd: 7; +} SNP_PAGE_STATE_ENTRY; + +typedef PACKED struct { + UINT16 CurrentEntry; + UINT16 EndEntry; + UINT32 Rsvd; +} SNP_PAGE_STATE_HEADER; + +typedef struct { + SNP_PAGE_STATE_HEADER Header; + SNP_PAGE_STATE_ENTRY Entry[SNP_PAGE_STATE_MAX_ENTRY]; +} SNP_PAGE_STATE_CHANGE_INFO; + #endif -- 2.17.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#73226): https://edk2.groups.io/g/devel/message/73226 Mute This Topic: https://groups.io/mt/81584587/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-