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


Reply via email to