| /** @file |
| MSR Definitions. |
| |
| Provides defines for Machine Specific Registers(MSR) indexes. Data structures |
| are provided for MSRs that contain one or more bit fields. If the MSR value |
| returned is a single 32-bit or 64-bit value, then a data structure is not |
| provided for that MSR. |
| |
| Copyright (c) 2017, Advanced Micro Devices. All rights reserved.<BR> |
| SPDX-License-Identifier: BSD-2-Clause-Patent |
| |
| @par Specification Reference: |
| AMD64 Architecture Programming Manual volume 2, March 2017, Sections 15.34 |
| |
| **/ |
| |
| #ifndef __FAM17_MSR_H__ |
| #define __FAM17_MSR_H__ |
| |
| /** |
| Secure Encrypted Virtualization - Encrypted State (SEV-ES) GHCB register |
| |
| **/ |
| #define MSR_SEV_ES_GHCB 0xc0010130 |
| |
| /** |
| MSR information returned for #MSR_SEV_ES_GHCB |
| **/ |
| typedef union { |
| struct { |
| UINT32 Function : 12; |
| UINT32 Reserved1 : 20; |
| UINT32 Reserved2 : 32; |
| } GhcbInfo; |
| |
| struct { |
| UINT8 Reserved[3]; |
| UINT8 SevEncryptionBitPos; |
| UINT16 SevEsProtocolMin; |
| UINT16 SevEsProtocolMax; |
| } GhcbProtocol; |
| |
| struct { |
| UINT32 Function : 12; |
| UINT32 ReasonCodeSet : 4; |
| UINT32 ReasonCode : 8; |
| UINT32 Reserved1 : 8; |
| UINT32 Reserved2 : 32; |
| } GhcbTerminate; |
| |
| struct { |
| UINT64 Function : 12; |
| UINT64 Features : 52; |
| } GhcbHypervisorFeatures; |
| |
| struct { |
| UINT64 Function : 12; |
| 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; |
| } MSR_SEV_ES_GHCB_REGISTER; |
| |
| #define GHCB_INFO_SEV_INFO 1 |
| #define GHCB_INFO_SEV_INFO_GET 2 |
| #define GHCB_INFO_CPUID_REQUEST 4 |
| #define GHCB_INFO_CPUID_RESPONSE 5 |
| #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 GHCB_HYPERVISOR_FEATURES_REQUEST 128 |
| #define GHCB_HYPERVISOR_FEATURES_RESPONSE 129 |
| #define GHCB_INFO_TERMINATE_REQUEST 256 |
| |
| #define GHCB_TERMINATE_GHCB 0 |
| #define GHCB_TERMINATE_GHCB_GENERAL 0 |
| #define GHCB_TERMINATE_GHCB_PROTOCOL 1 |
| |
| /** |
| Secure Encrypted Virtualization (SEV) status register |
| |
| **/ |
| #define MSR_SEV_STATUS 0xc0010131 |
| |
| /** |
| MSR information returned for #MSR_SEV_STATUS |
| **/ |
| typedef union { |
| /// |
| /// Individual bit fields |
| /// |
| struct { |
| /// |
| /// [Bit 0] Secure Encrypted Virtualization (Sev) is enabled |
| /// |
| UINT32 SevBit : 1; |
| |
| /// |
| /// [Bit 1] Secure Encrypted Virtualization Encrypted State (SevEs) is enabled |
| /// |
| UINT32 SevEsBit : 1; |
| |
| /// |
| /// [Bit 2] Secure Nested Paging (SevSnp) is enabled |
| /// |
| UINT32 SevSnpBit : 1; |
| |
| UINT32 Reserved2 : 29; |
| } Bits; |
| /// |
| /// All bit fields as a 32-bit value |
| /// |
| UINT32 Uint32; |
| /// |
| /// All bit fields as a 64-bit value |
| /// |
| UINT64 Uint64; |
| } MSR_SEV_STATUS_REGISTER; |
| |
| #endif |