@@ -13,7 +13,7 @@ struct hv_u128 {
13
13
u64 high_part ;
14
14
} __packed ;
15
15
16
- /* NOTE: when adding below, update hv_status_to_string () */
16
+ /* NOTE: when adding below, update hv_result_to_string () */
17
17
#define HV_STATUS_SUCCESS 0x0
18
18
#define HV_STATUS_INVALID_HYPERCALL_CODE 0x2
19
19
#define HV_STATUS_INVALID_HYPERCALL_INPUT 0x3
@@ -51,6 +51,7 @@ struct hv_u128 {
51
51
#define HV_HYP_PAGE_SHIFT 12
52
52
#define HV_HYP_PAGE_SIZE BIT(HV_HYP_PAGE_SHIFT)
53
53
#define HV_HYP_PAGE_MASK (~(HV_HYP_PAGE_SIZE - 1))
54
+ #define HV_HYP_LARGE_PAGE_SHIFT 21
54
55
55
56
#define HV_PARTITION_ID_INVALID ((u64)0)
56
57
#define HV_PARTITION_ID_SELF ((u64)-1)
@@ -374,6 +375,10 @@ union hv_hypervisor_version_info {
374
375
#define HV_SHARED_GPA_BOUNDARY_ACTIVE BIT(5)
375
376
#define HV_SHARED_GPA_BOUNDARY_BITS GENMASK(11, 6)
376
377
378
+ /* HYPERV_CPUID_FEATURES.ECX bits. */
379
+ #define HV_VP_DISPATCH_INTERRUPT_INJECTION_AVAILABLE BIT(9)
380
+ #define HV_VP_GHCB_ROOT_MAPPING_AVAILABLE BIT(10)
381
+
377
382
enum hv_isolation_type {
378
383
HV_ISOLATION_TYPE_NONE = 0 , /* HV_PARTITION_ISOLATION_TYPE_NONE */
379
384
HV_ISOLATION_TYPE_VBS = 1 ,
@@ -436,36 +441,48 @@ union hv_vp_assist_msr_contents { /* HV_REGISTER_VP_ASSIST_PAGE */
436
441
#define HVCALL_WITHDRAW_MEMORY 0x0049
437
442
#define HVCALL_MAP_GPA_PAGES 0x004b
438
443
#define HVCALL_UNMAP_GPA_PAGES 0x004c
444
+ #define HVCALL_INSTALL_INTERCEPT 0x004d
439
445
#define HVCALL_CREATE_VP 0x004e
440
446
#define HVCALL_DELETE_VP 0x004f
441
447
#define HVCALL_GET_VP_REGISTERS 0x0050
442
448
#define HVCALL_SET_VP_REGISTERS 0x0051
449
+ #define HVCALL_TRANSLATE_VIRTUAL_ADDRESS 0x0052
450
+ #define HVCALL_CLEAR_VIRTUAL_INTERRUPT 0x0056
443
451
#define HVCALL_DELETE_PORT 0x0058
444
452
#define HVCALL_DISCONNECT_PORT 0x005b
445
453
#define HVCALL_POST_MESSAGE 0x005c
446
454
#define HVCALL_SIGNAL_EVENT 0x005d
447
455
#define HVCALL_POST_DEBUG_DATA 0x0069
448
456
#define HVCALL_RETRIEVE_DEBUG_DATA 0x006a
449
457
#define HVCALL_RESET_DEBUG_SESSION 0x006b
458
+ #define HVCALL_MAP_STATS_PAGE 0x006c
459
+ #define HVCALL_UNMAP_STATS_PAGE 0x006d
450
460
#define HVCALL_ADD_LOGICAL_PROCESSOR 0x0076
451
461
#define HVCALL_GET_SYSTEM_PROPERTY 0x007b
452
462
#define HVCALL_MAP_DEVICE_INTERRUPT 0x007c
453
463
#define HVCALL_UNMAP_DEVICE_INTERRUPT 0x007d
454
464
#define HVCALL_RETARGET_INTERRUPT 0x007e
455
465
#define HVCALL_NOTIFY_PORT_RING_EMPTY 0x008b
466
+ #define HVCALL_REGISTER_INTERCEPT_RESULT 0x0091
456
467
#define HVCALL_ASSERT_VIRTUAL_INTERRUPT 0x0094
457
468
#define HVCALL_CREATE_PORT 0x0095
458
469
#define HVCALL_CONNECT_PORT 0x0096
459
470
#define HVCALL_START_VP 0x0099
460
471
#define HVCALL_GET_VP_ID_FROM_APIC_ID 0x009a
461
472
#define HVCALL_FLUSH_GUEST_PHYSICAL_ADDRESS_SPACE 0x00af
462
473
#define HVCALL_FLUSH_GUEST_PHYSICAL_ADDRESS_LIST 0x00b0
474
+ #define HVCALL_SIGNAL_EVENT_DIRECT 0x00c0
475
+ #define HVCALL_POST_MESSAGE_DIRECT 0x00c1
463
476
#define HVCALL_DISPATCH_VP 0x00c2
477
+ #define HVCALL_GET_GPA_PAGES_ACCESS_STATES 0x00c9
478
+ #define HVCALL_ACQUIRE_SPARSE_SPA_PAGE_HOST_ACCESS 0x00d7
479
+ #define HVCALL_RELEASE_SPARSE_SPA_PAGE_HOST_ACCESS 0x00d8
464
480
#define HVCALL_MODIFY_SPARSE_GPA_PAGE_HOST_VISIBILITY 0x00db
465
481
#define HVCALL_MAP_VP_STATE_PAGE 0x00e1
466
482
#define HVCALL_UNMAP_VP_STATE_PAGE 0x00e2
467
483
#define HVCALL_GET_VP_STATE 0x00e3
468
484
#define HVCALL_SET_VP_STATE 0x00e4
485
+ #define HVCALL_GET_VP_CPUID_VALUES 0x00f4
469
486
#define HVCALL_MMIO_READ 0x0106
470
487
#define HVCALL_MMIO_WRITE 0x0107
471
488
@@ -775,10 +792,10 @@ struct hv_message_page {
775
792
776
793
/* Define timer message payload structure. */
777
794
struct hv_timer_message_payload {
778
- __u32 timer_index ;
779
- __u32 reserved ;
780
- __u64 expiration_time ; /* When the timer expired */
781
- __u64 delivery_time ; /* When the message was delivered */
795
+ u32 timer_index ;
796
+ u32 reserved ;
797
+ u64 expiration_time ; /* When the timer expired */
798
+ u64 delivery_time ; /* When the message was delivered */
782
799
} __packed ;
783
800
784
801
struct hv_x64_segment_register {
@@ -807,6 +824,8 @@ struct hv_x64_table_register {
807
824
u64 base ;
808
825
} __packed ;
809
826
827
+ #define HV_NORMAL_VTL 0
828
+
810
829
union hv_input_vtl {
811
830
u8 as_uint8 ;
812
831
struct {
@@ -1325,6 +1344,49 @@ struct hv_retarget_device_interrupt { /* HV_INPUT_RETARGET_DEVICE_INTERRUPT */
1325
1344
struct hv_device_interrupt_target int_target ;
1326
1345
} __packed __aligned (8 );
1327
1346
1347
+ enum hv_intercept_type {
1348
+ #if defined(CONFIG_X86 )
1349
+ HV_INTERCEPT_TYPE_X64_IO_PORT = 0x00000000 ,
1350
+ HV_INTERCEPT_TYPE_X64_MSR = 0x00000001 ,
1351
+ HV_INTERCEPT_TYPE_X64_CPUID = 0x00000002 ,
1352
+ #endif
1353
+ HV_INTERCEPT_TYPE_EXCEPTION = 0x00000003 ,
1354
+ /* Used to be HV_INTERCEPT_TYPE_REGISTER */
1355
+ HV_INTERCEPT_TYPE_RESERVED0 = 0x00000004 ,
1356
+ HV_INTERCEPT_TYPE_MMIO = 0x00000005 ,
1357
+ #if defined(CONFIG_X86 )
1358
+ HV_INTERCEPT_TYPE_X64_GLOBAL_CPUID = 0x00000006 ,
1359
+ HV_INTERCEPT_TYPE_X64_APIC_SMI = 0x00000007 ,
1360
+ #endif
1361
+ HV_INTERCEPT_TYPE_HYPERCALL = 0x00000008 ,
1362
+ #if defined(CONFIG_X86 )
1363
+ HV_INTERCEPT_TYPE_X64_APIC_INIT_SIPI = 0x00000009 ,
1364
+ HV_INTERCEPT_MC_UPDATE_PATCH_LEVEL_MSR_READ = 0x0000000A ,
1365
+ HV_INTERCEPT_TYPE_X64_APIC_WRITE = 0x0000000B ,
1366
+ HV_INTERCEPT_TYPE_X64_MSR_INDEX = 0x0000000C ,
1367
+ #endif
1368
+ HV_INTERCEPT_TYPE_MAX ,
1369
+ HV_INTERCEPT_TYPE_INVALID = 0xFFFFFFFF ,
1370
+ };
1371
+
1372
+ union hv_intercept_parameters {
1373
+ /* HV_INTERCEPT_PARAMETERS is defined to be an 8-byte field. */
1374
+ u64 as_uint64 ;
1375
+ #if defined(CONFIG_X86 )
1376
+ /* HV_INTERCEPT_TYPE_X64_IO_PORT */
1377
+ u16 io_port ;
1378
+ /* HV_INTERCEPT_TYPE_X64_CPUID */
1379
+ u32 cpuid_index ;
1380
+ /* HV_INTERCEPT_TYPE_X64_APIC_WRITE */
1381
+ u32 apic_write_mask ;
1382
+ /* HV_INTERCEPT_TYPE_EXCEPTION */
1383
+ u16 exception_vector ;
1384
+ /* HV_INTERCEPT_TYPE_X64_MSR_INDEX */
1385
+ u32 msr_index ;
1386
+ #endif
1387
+ /* N.B. Other intercept types do not have any parameters. */
1388
+ };
1389
+
1328
1390
/* Data structures for HVCALL_MMIO_READ and HVCALL_MMIO_WRITE */
1329
1391
#define HV_HYPERCALL_MMIO_MAX_DATA_LENGTH 64
1330
1392
0 commit comments