Add the definitions needed by the upcoming VSM / VTL1 bring-up code:
- HV_ACCESS_VSM and HV_ACCESS_VP_REGS partition privilege bits
- HVCALL_ENABLE_PARTITION_VTL and
HVCALL_MODIFY_VTL_PROTECTION_MASK hypercall IDs
- hv_input_enable_partition_vtl input structure and its flags union
- hv_register_vsm_{partition_status,vp_status} register layout unions
- HV_REGISTER_VSM_PARTITION_STATUS and
HV_REGISTER_VSM_VP_SECURE_CONFIG_VTL0 register names
Definitions taken from the Hyper-V TLFS.
Signed-off-by: Thara Gopinath <[email protected]>
---
include/hyperv/hvgdk_mini.h | 46 +++++++++++++++++++++++++++++++++++++
1 file changed, 46 insertions(+)
diff --git a/include/hyperv/hvgdk_mini.h b/include/hyperv/hvgdk_mini.h
index 6a4e8b9d570fd..a50af532fc7f9 100644
--- a/include/hyperv/hvgdk_mini.h
+++ b/include/hyperv/hvgdk_mini.h
@@ -303,6 +303,8 @@ union hv_hypervisor_version_info {
#define HV_ACCESS_STATS BIT(8)
#define HV_DEBUGGING BIT(11)
#define HV_CPU_MANAGEMENT BIT(12)
+#define HV_ACCESS_VSM BIT(16)
+#define HV_ACCESS_VP_REGS BIT(17)
#define HV_ENABLE_EXTENDED_HYPERCALLS BIT(20)
#define HV_ISOLATION BIT(22)
@@ -438,6 +440,8 @@ union hv_vp_assist_msr_contents { /*
HV_REGISTER_VP_ASSIST_PAGE */
#define HVCALL_GET_LOGICAL_PROCESSOR_RUN_TIME 0x0004
#define HVCALL_NOTIFY_LONG_SPIN_WAIT 0x0008
#define HVCALL_SEND_IPI 0x000b
+#define HVCALL_MODIFY_VTL_PROTECTION_MASK 0x000c
+#define HVCALL_ENABLE_PARTITION_VTL 0x000d
#define HVCALL_ENABLE_VP_VTL 0x000f
#define HVCALL_FLUSH_VIRTUAL_ADDRESS_SPACE_EX 0x0013
#define HVCALL_FLUSH_VIRTUAL_ADDRESS_LIST_EX 0x0014
@@ -878,6 +882,46 @@ struct hv_init_vp_context {
u64 msr_cr_pat;
} __packed;
+union hv_enable_partition_vtl_flags {
+ u8 as_uint8;
+ struct {
+ u8 enable_mbec:1;
+ u8 enable_supervisor_shadow_stack:1;
+ u8 enable_hardware_hvpt:1;
+ u8 reserved:5;
+ };
+} __packed;
+
+struct hv_input_enable_partition_vtl {
+ u64 partition_id;
+ union hv_input_vtl target_vtl;
+ union hv_enable_partition_vtl_flags flags;
+ u16 rsvd_z16;
+ u32 rsvd_z32;
+} __packed;
+
+union hv_register_vsm_partition_status {
+ u64 as_uint64;
+ struct {
+ u64 enabled_vtl_set : 16;
+ u64 max_vtl : 4;
+ u64 mbec_enabled_vtl_set: 16;
+ u64 supervisor_shadow_stack_enabled_vtl_set : 4;
+ u64 reserved : 24;
+ };
+} __packed;
+
+union hv_register_vsm_vp_status {
+ u64 as_uint64;
+ struct {
+ u64 active_vtl : 4;
+ u64 active_mbec_enabled : 1;
+ u64 reserved_z0 : 11;
+ u64 enabled_vtl_set : 16;
+ u64 reserved_z1 : 32;
+ };
+} __packed;
+
struct hv_enable_vp_vtl {
u64 partition_id;
u32 vp_index;
@@ -1061,8 +1105,10 @@ enum hv_register_name {
/* Synthetic VSM registers */
HV_REGISTER_VSM_CODE_PAGE_OFFSETS = 0x000D0002,
+ HV_REGISTER_VSM_PARTITION_STATUS = 0x000D0004,
HV_REGISTER_VSM_CAPABILITIES = 0x000D0006,
HV_REGISTER_VSM_PARTITION_CONFIG = 0x000D0007,
+ HV_REGISTER_VSM_VP_SECURE_CONFIG_VTL0 = 0x000D0010,
#if defined(CONFIG_X86)
/* X64 Debug Registers */
--
2.34.1