]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
mshv: Add definitions for MSHV sleep state configuration
authorPraveen K Paladugu <prapal@linux.microsoft.com>
Fri, 5 Dec 2025 20:17:06 +0000 (14:17 -0600)
committerWei Liu <wei.liu@kernel.org>
Fri, 5 Dec 2025 23:24:57 +0000 (23:24 +0000)
Add the definitions required to configure sleep states in mshv hypervsior.

Signed-off-by: Praveen K Paladugu <prapal@linux.microsoft.com>
Co-developed-by: Anatol Belski <anbelski@linux.microsoft.com>
Signed-off-by: Anatol Belski <anbelski@linux.microsoft.com>
Reviewed-by: Easwar Hariharan <easwar.hariharan@linux.microsoft.com>
Reviewed-by: Nuno Das Neves <nunodasneves@linux.microsoft.com>
Acked-by: Stanislav Kinsburskii <skinsburskii@linux.microsoft.com>
Signed-off-by: Wei Liu <wei.liu@kernel.org>
include/hyperv/hvgdk_mini.h
include/hyperv/hvhdk_mini.h

index 1d5ce11be8b63ab0838cd258d18fa327c48cc492..04b18d0e37af3639b7859f8b77d1fa21a864b901 100644 (file)
@@ -465,19 +465,21 @@ union hv_vp_assist_msr_contents {  /* HV_REGISTER_VP_ASSIST_PAGE */
 #define HVCALL_RESET_DEBUG_SESSION                     0x006b
 #define HVCALL_MAP_STATS_PAGE                          0x006c
 #define HVCALL_UNMAP_STATS_PAGE                                0x006d
+#define HVCALL_SET_SYSTEM_PROPERTY                     0x006f
 #define HVCALL_ADD_LOGICAL_PROCESSOR                   0x0076
 #define HVCALL_GET_SYSTEM_PROPERTY                     0x007b
 #define HVCALL_MAP_DEVICE_INTERRUPT                    0x007c
 #define HVCALL_UNMAP_DEVICE_INTERRUPT                  0x007d
 #define HVCALL_RETARGET_INTERRUPT                      0x007e
 #define HVCALL_NOTIFY_PARTITION_EVENT                   0x0087
+#define HVCALL_ENTER_SLEEP_STATE                       0x0084
 #define HVCALL_NOTIFY_PORT_RING_EMPTY                  0x008b
 #define HVCALL_REGISTER_INTERCEPT_RESULT               0x0091
 #define HVCALL_ASSERT_VIRTUAL_INTERRUPT                        0x0094
 #define HVCALL_CREATE_PORT                             0x0095
 #define HVCALL_CONNECT_PORT                            0x0096
 #define HVCALL_START_VP                                        0x0099
-#define HVCALL_GET_VP_INDEX_FROM_APIC_ID                       0x009a
+#define HVCALL_GET_VP_INDEX_FROM_APIC_ID               0x009a
 #define HVCALL_FLUSH_GUEST_PHYSICAL_ADDRESS_SPACE      0x00af
 #define HVCALL_FLUSH_GUEST_PHYSICAL_ADDRESS_LIST       0x00b0
 #define HVCALL_SIGNAL_EVENT_DIRECT                     0x00c0
index f2d7b50de7a42c8b0c79f7a9b81afe77c74c327c..41a29bf8ec145ca947577c3dfb6a7ed9ab61453b 100644 (file)
@@ -140,6 +140,7 @@ enum hv_snp_status {
 
 enum hv_system_property {
        /* Add more values when needed */
+       HV_SYSTEM_PROPERTY_SLEEP_STATE = 3,
        HV_SYSTEM_PROPERTY_SCHEDULER_TYPE = 15,
        HV_DYNAMIC_PROCESSOR_FEATURE_PROPERTY = 21,
        HV_SYSTEM_PROPERTY_CRASHDUMPAREA = 47,
@@ -155,6 +156,19 @@ union hv_pfn_range {            /* HV_SPA_PAGE_RANGE */
        } __packed;
 };
 
+enum hv_sleep_state {
+       HV_SLEEP_STATE_S1 = 1,
+       HV_SLEEP_STATE_S2 = 2,
+       HV_SLEEP_STATE_S3 = 3,
+       HV_SLEEP_STATE_S4 = 4,
+       HV_SLEEP_STATE_S5 = 5,
+       /*
+        * After hypervisor has received this, any follow up sleep
+        * state registration requests will be rejected.
+        */
+       HV_SLEEP_STATE_LOCK = 6
+};
+
 enum hv_dynamic_processor_feature_property {
        /* Add more values when needed */
        HV_X64_DYNAMIC_PROCESSOR_FEATURE_MAX_ENCRYPTED_PARTITIONS = 13,
@@ -184,6 +198,32 @@ struct hv_output_get_system_property {
        };
 } __packed;
 
+struct hv_sleep_state_info {
+       u32 sleep_state; /* enum hv_sleep_state */
+       u8 pm1a_slp_typ;
+       u8 pm1b_slp_typ;
+} __packed;
+
+struct hv_input_set_system_property {
+       u32 property_id; /* enum hv_system_property */
+       u32 reserved;
+       union {
+               /* More fields to be filled in when needed */
+               struct hv_sleep_state_info set_sleep_state_info;
+
+               /*
+                * Add a reserved field to ensure the union is 8-byte aligned as
+                * existing members may not be. This is a temporary measure
+                * until all remaining members are added.
+                */
+                u64 reserved0[8];
+       };
+} __packed;
+
+struct hv_input_enter_sleep_state {     /* HV_INPUT_ENTER_SLEEP_STATE */
+       u32 sleep_state;        /* enum hv_sleep_state */
+} __packed;
+
 struct hv_input_map_stats_page {
        u32 type; /* enum hv_stats_object_type */
        u32 padding;