kvm.h (98c710f2d5cdf37f29a267352eb1f3c28cbf369d) kvm.h (74c98e20a604b9db58284b8727688df70e9bf643)
1#ifndef __LINUX_KVM_H
2#define __LINUX_KVM_H
3
4/*
5 * Userspace interface for /dev/kvm - kernel based virtual machine
6 *
7 * Note: you must update KVM_API_VERSION if you change this interface.
8 */

--- 204 unchanged lines hidden (view full) ---

213#define KVM_INTERNAL_ERROR_SIMUL_EX 2
214/* Encounter unexpected vm-exit due to delivery event. */
215#define KVM_INTERNAL_ERROR_DELIVERY_EV 3
216
217/* for KVM_RUN, returned by mmap(vcpu_fd, offset=0) */
218struct kvm_run {
219 /* in */
220 __u8 request_interrupt_window;
1#ifndef __LINUX_KVM_H
2#define __LINUX_KVM_H
3
4/*
5 * Userspace interface for /dev/kvm - kernel based virtual machine
6 *
7 * Note: you must update KVM_API_VERSION if you change this interface.
8 */

--- 204 unchanged lines hidden (view full) ---

213#define KVM_INTERNAL_ERROR_SIMUL_EX 2
214/* Encounter unexpected vm-exit due to delivery event. */
215#define KVM_INTERNAL_ERROR_DELIVERY_EV 3
216
217/* for KVM_RUN, returned by mmap(vcpu_fd, offset=0) */
218struct kvm_run {
219 /* in */
220 __u8 request_interrupt_window;
221 __u8 padding1[7];
221 __u8 immediate_exit;
222 __u8 padding1[6];
222
223 /* out */
224 __u32 exit_reason;
225 __u8 ready_for_interrupt_injection;
226 __u8 if_flag;
227 __u16 flags;
228
229 /* in (pre_kvm_run), out (post_kvm_run) */

--- 416 unchanged lines hidden (view full) ---

646 /* in */
647 __u32 cap;
648 __u32 flags;
649 __u64 args[4];
650 __u8 pad[64];
651};
652
653/* for KVM_PPC_GET_PVINFO */
223
224 /* out */
225 __u32 exit_reason;
226 __u8 ready_for_interrupt_injection;
227 __u8 if_flag;
228 __u16 flags;
229
230 /* in (pre_kvm_run), out (post_kvm_run) */

--- 416 unchanged lines hidden (view full) ---

647 /* in */
648 __u32 cap;
649 __u32 flags;
650 __u64 args[4];
651 __u8 pad[64];
652};
653
654/* for KVM_PPC_GET_PVINFO */
655
656#define KVM_PPC_PVINFO_FLAGS_EV_IDLE (1<<0)
657
654struct kvm_ppc_pvinfo {
655 /* out */
656 __u32 flags;
657 __u32 hcall[4];
658 __u8 pad[108];
659};
660
661/* for KVM_PPC_GET_SMMU_INFO */

--- 15 unchanged lines hidden (view full) ---

677
678struct kvm_ppc_smmu_info {
679 __u64 flags;
680 __u32 slb_size;
681 __u32 pad;
682 struct kvm_ppc_one_seg_page_size sps[KVM_PPC_PAGE_SIZES_MAX_SZ];
683};
684
658struct kvm_ppc_pvinfo {
659 /* out */
660 __u32 flags;
661 __u32 hcall[4];
662 __u8 pad[108];
663};
664
665/* for KVM_PPC_GET_SMMU_INFO */

--- 15 unchanged lines hidden (view full) ---

681
682struct kvm_ppc_smmu_info {
683 __u64 flags;
684 __u32 slb_size;
685 __u32 pad;
686 struct kvm_ppc_one_seg_page_size sps[KVM_PPC_PAGE_SIZES_MAX_SZ];
687};
688
685#define KVM_PPC_PVINFO_FLAGS_EV_IDLE (1<<0)
689/* for KVM_PPC_RESIZE_HPT_{PREPARE,COMMIT} */
690struct kvm_ppc_resize_hpt {
691 __u64 flags;
692 __u32 shift;
693 __u32 pad;
694};
686
687#define KVMIO 0xAE
688
689/* machine type bits, to be used as argument to KVM_CREATE_VM */
690#define KVM_VM_S390_UCONTROL 1
691
692/* on ppc, 0 indicate default, 1 should force HV and 2 PR */
693#define KVM_VM_PPC_HV 1
694#define KVM_VM_PPC_PR 2
695
695
696#define KVMIO 0xAE
697
698/* machine type bits, to be used as argument to KVM_CREATE_VM */
699#define KVM_VM_S390_UCONTROL 1
700
701/* on ppc, 0 indicate default, 1 should force HV and 2 PR */
702#define KVM_VM_PPC_HV 1
703#define KVM_VM_PPC_PR 2
704
705/* on MIPS, 0 forces trap & emulate, 1 forces VZ ASE */
706#define KVM_VM_MIPS_TE 0
707#define KVM_VM_MIPS_VZ 1
708
696#define KVM_S390_SIE_PAGE_OFFSET 1
697
698/*
699 * ioctls for /dev/kvm fds:
700 */
701#define KVM_GET_API_VERSION _IO(KVMIO, 0x00)
702#define KVM_CREATE_VM _IO(KVMIO, 0x01) /* returns a VM fd */
703#define KVM_GET_MSR_INDEX_LIST _IOWR(KVMIO, 0x02, struct kvm_msr_list)

--- 157 unchanged lines hidden (view full) ---

861#define KVM_CAP_SPLIT_IRQCHIP 121
862#define KVM_CAP_IOEVENTFD_ANY_LENGTH 122
863#define KVM_CAP_HYPERV_SYNIC 123
864#define KVM_CAP_S390_RI 124
865#define KVM_CAP_SPAPR_TCE_64 125
866#define KVM_CAP_ARM_PMU_V3 126
867#define KVM_CAP_VCPU_ATTRIBUTES 127
868#define KVM_CAP_MAX_VCPU_ID 128
709#define KVM_S390_SIE_PAGE_OFFSET 1
710
711/*
712 * ioctls for /dev/kvm fds:
713 */
714#define KVM_GET_API_VERSION _IO(KVMIO, 0x00)
715#define KVM_CREATE_VM _IO(KVMIO, 0x01) /* returns a VM fd */
716#define KVM_GET_MSR_INDEX_LIST _IOWR(KVMIO, 0x02, struct kvm_msr_list)

--- 157 unchanged lines hidden (view full) ---

874#define KVM_CAP_SPLIT_IRQCHIP 121
875#define KVM_CAP_IOEVENTFD_ANY_LENGTH 122
876#define KVM_CAP_HYPERV_SYNIC 123
877#define KVM_CAP_S390_RI 124
878#define KVM_CAP_SPAPR_TCE_64 125
879#define KVM_CAP_ARM_PMU_V3 126
880#define KVM_CAP_VCPU_ATTRIBUTES 127
881#define KVM_CAP_MAX_VCPU_ID 128
882#define KVM_CAP_X2APIC_API 129
883#define KVM_CAP_S390_USER_INSTR0 130
884#define KVM_CAP_MSI_DEVID 131
885#define KVM_CAP_PPC_HTM 132
886#define KVM_CAP_SPAPR_RESIZE_HPT 133
887#define KVM_CAP_PPC_MMU_RADIX 134
888#define KVM_CAP_PPC_MMU_HASH_V3 135
889#define KVM_CAP_IMMEDIATE_EXIT 136
890#define KVM_CAP_MIPS_VZ 137
891#define KVM_CAP_MIPS_TE 138
892#define KVM_CAP_MIPS_64BIT 139
893#define KVM_CAP_S390_GS 140
894#define KVM_CAP_S390_AIS 141
895#define KVM_CAP_SPAPR_TCE_VFIO 142
896#define KVM_CAP_X86_GUEST_MWAIT 143
897#define KVM_CAP_ARM_USER_IRQ 144
869
870#ifdef KVM_CAP_IRQ_ROUTING
871
872struct kvm_irq_routing_irqchip {
873 __u32 irqchip;
874 __u32 pin;
875};
876
877struct kvm_irq_routing_msi {
878 __u32 address_lo;
879 __u32 address_hi;
880 __u32 data;
898
899#ifdef KVM_CAP_IRQ_ROUTING
900
901struct kvm_irq_routing_irqchip {
902 __u32 irqchip;
903 __u32 pin;
904};
905
906struct kvm_irq_routing_msi {
907 __u32 address_lo;
908 __u32 address_hi;
909 __u32 data;
881 __u32 pad;
910 union {
911 __u32 pad;
912 __u32 devid;
913 };
882};
883
884struct kvm_irq_routing_s390_adapter {
885 __u64 ind_addr;
886 __u64 summary_addr;
887 __u64 ind_offset;
888 __u32 summary_offset;
889 __u32 adapter_id;

--- 70 unchanged lines hidden (view full) ---

960struct kvm_irqfd {
961 __u32 fd;
962 __u32 gsi;
963 __u32 flags;
964 __u32 resamplefd;
965 __u8 pad[16];
966};
967
914};
915
916struct kvm_irq_routing_s390_adapter {
917 __u64 ind_addr;
918 __u64 summary_addr;
919 __u64 ind_offset;
920 __u32 summary_offset;
921 __u32 adapter_id;

--- 70 unchanged lines hidden (view full) ---

992struct kvm_irqfd {
993 __u32 fd;
994 __u32 gsi;
995 __u32 flags;
996 __u32 resamplefd;
997 __u8 pad[16];
998};
999
1000/* For KVM_CAP_ADJUST_CLOCK */
1001
1002/* Do not use 1, KVM_CHECK_EXTENSION returned it before we had flags. */
1003#define KVM_CLOCK_TSC_STABLE 2
1004
968struct kvm_clock_data {
969 __u64 clock;
970 __u32 flags;
971 __u32 pad[9];
972};
973
1005struct kvm_clock_data {
1006 __u64 clock;
1007 __u32 flags;
1008 __u32 pad[9];
1009};
1010
1011/* For KVM_CAP_SW_TLB */
1012
974#define KVM_MMU_FSL_BOOKE_NOHV 0
975#define KVM_MMU_FSL_BOOKE_HV 1
976
977struct kvm_config_tlb {
978 __u64 params;
979 __u64 array;
980 __u32 mmu_type;
981 __u32 array_len;

--- 37 unchanged lines hidden (view full) ---

1019 __u64 reg[0];
1020};
1021
1022struct kvm_one_reg {
1023 __u64 id;
1024 __u64 addr;
1025};
1026
1013#define KVM_MMU_FSL_BOOKE_NOHV 0
1014#define KVM_MMU_FSL_BOOKE_HV 1
1015
1016struct kvm_config_tlb {
1017 __u64 params;
1018 __u64 array;
1019 __u32 mmu_type;
1020 __u32 array_len;

--- 37 unchanged lines hidden (view full) ---

1058 __u64 reg[0];
1059};
1060
1061struct kvm_one_reg {
1062 __u64 id;
1063 __u64 addr;
1064};
1065
1066#define KVM_MSI_VALID_DEVID (1U << 0)
1027struct kvm_msi {
1028 __u32 address_lo;
1029 __u32 address_hi;
1030 __u32 data;
1031 __u32 flags;
1067struct kvm_msi {
1068 __u32 address_lo;
1069 __u32 address_hi;
1070 __u32 data;
1071 __u32 flags;
1032 __u8 pad[16];
1072 __u32 devid;
1073 __u8 pad[12];
1033};
1034
1035struct kvm_arm_device_addr {
1036 __u64 id;
1037 __u64 addr;
1038};
1039
1040/*

--- 12 unchanged lines hidden (view full) ---

1053 __u32 group; /* device-defined */
1054 __u64 attr; /* group-defined */
1055 __u64 addr; /* userspace address of attr data */
1056};
1057
1058#define KVM_DEV_VFIO_GROUP 1
1059#define KVM_DEV_VFIO_GROUP_ADD 1
1060#define KVM_DEV_VFIO_GROUP_DEL 2
1074};
1075
1076struct kvm_arm_device_addr {
1077 __u64 id;
1078 __u64 addr;
1079};
1080
1081/*

--- 12 unchanged lines hidden (view full) ---

1094 __u32 group; /* device-defined */
1095 __u64 attr; /* group-defined */
1096 __u64 addr; /* userspace address of attr data */
1097};
1098
1099#define KVM_DEV_VFIO_GROUP 1
1100#define KVM_DEV_VFIO_GROUP_ADD 1
1101#define KVM_DEV_VFIO_GROUP_DEL 2
1102#define KVM_DEV_VFIO_GROUP_SET_SPAPR_TCE 3
1061
1062enum kvm_device_type {
1063 KVM_DEV_TYPE_FSL_MPIC_20 = 1,
1064#define KVM_DEV_TYPE_FSL_MPIC_20 KVM_DEV_TYPE_FSL_MPIC_20
1065 KVM_DEV_TYPE_FSL_MPIC_42,
1066#define KVM_DEV_TYPE_FSL_MPIC_42 KVM_DEV_TYPE_FSL_MPIC_42
1067 KVM_DEV_TYPE_XICS,
1068#define KVM_DEV_TYPE_XICS KVM_DEV_TYPE_XICS
1069 KVM_DEV_TYPE_VFIO,
1070#define KVM_DEV_TYPE_VFIO KVM_DEV_TYPE_VFIO
1071 KVM_DEV_TYPE_ARM_VGIC_V2,
1072#define KVM_DEV_TYPE_ARM_VGIC_V2 KVM_DEV_TYPE_ARM_VGIC_V2
1073 KVM_DEV_TYPE_FLIC,
1074#define KVM_DEV_TYPE_FLIC KVM_DEV_TYPE_FLIC
1075 KVM_DEV_TYPE_ARM_VGIC_V3,
1076#define KVM_DEV_TYPE_ARM_VGIC_V3 KVM_DEV_TYPE_ARM_VGIC_V3
1103
1104enum kvm_device_type {
1105 KVM_DEV_TYPE_FSL_MPIC_20 = 1,
1106#define KVM_DEV_TYPE_FSL_MPIC_20 KVM_DEV_TYPE_FSL_MPIC_20
1107 KVM_DEV_TYPE_FSL_MPIC_42,
1108#define KVM_DEV_TYPE_FSL_MPIC_42 KVM_DEV_TYPE_FSL_MPIC_42
1109 KVM_DEV_TYPE_XICS,
1110#define KVM_DEV_TYPE_XICS KVM_DEV_TYPE_XICS
1111 KVM_DEV_TYPE_VFIO,
1112#define KVM_DEV_TYPE_VFIO KVM_DEV_TYPE_VFIO
1113 KVM_DEV_TYPE_ARM_VGIC_V2,
1114#define KVM_DEV_TYPE_ARM_VGIC_V2 KVM_DEV_TYPE_ARM_VGIC_V2
1115 KVM_DEV_TYPE_FLIC,
1116#define KVM_DEV_TYPE_FLIC KVM_DEV_TYPE_FLIC
1117 KVM_DEV_TYPE_ARM_VGIC_V3,
1118#define KVM_DEV_TYPE_ARM_VGIC_V3 KVM_DEV_TYPE_ARM_VGIC_V3
1119 KVM_DEV_TYPE_ARM_VGIC_ITS,
1120#define KVM_DEV_TYPE_ARM_VGIC_ITS KVM_DEV_TYPE_ARM_VGIC_ITS
1077 KVM_DEV_TYPE_MAX,
1078};
1079
1121 KVM_DEV_TYPE_MAX,
1122};
1123
1124struct kvm_vfio_spapr_tce {
1125 __s32 groupfd;
1126 __s32 tablefd;
1127};
1128
1080/*
1081 * ioctls for VM fds
1082 */
1083#define KVM_SET_MEMORY_REGION _IOW(KVMIO, 0x40, struct kvm_memory_region)
1084/*
1085 * KVM_CREATE_VCPU receives as a parameter the vcpu slot, and returns
1086 * a vcpu fd.
1087 */

--- 75 unchanged lines hidden (view full) ---

1163/* Available with KVM_CAP_RMA */
1164#define KVM_ALLOCATE_RMA _IOR(KVMIO, 0xa9, struct kvm_allocate_rma)
1165/* Available with KVM_CAP_PPC_HTAB_FD */
1166#define KVM_PPC_GET_HTAB_FD _IOW(KVMIO, 0xaa, struct kvm_get_htab_fd)
1167/* Available with KVM_CAP_ARM_SET_DEVICE_ADDR */
1168#define KVM_ARM_SET_DEVICE_ADDR _IOW(KVMIO, 0xab, struct kvm_arm_device_addr)
1169/* Available with KVM_CAP_PPC_RTAS */
1170#define KVM_PPC_RTAS_DEFINE_TOKEN _IOW(KVMIO, 0xac, struct kvm_rtas_token_args)
1129/*
1130 * ioctls for VM fds
1131 */
1132#define KVM_SET_MEMORY_REGION _IOW(KVMIO, 0x40, struct kvm_memory_region)
1133/*
1134 * KVM_CREATE_VCPU receives as a parameter the vcpu slot, and returns
1135 * a vcpu fd.
1136 */

--- 75 unchanged lines hidden (view full) ---

1212/* Available with KVM_CAP_RMA */
1213#define KVM_ALLOCATE_RMA _IOR(KVMIO, 0xa9, struct kvm_allocate_rma)
1214/* Available with KVM_CAP_PPC_HTAB_FD */
1215#define KVM_PPC_GET_HTAB_FD _IOW(KVMIO, 0xaa, struct kvm_get_htab_fd)
1216/* Available with KVM_CAP_ARM_SET_DEVICE_ADDR */
1217#define KVM_ARM_SET_DEVICE_ADDR _IOW(KVMIO, 0xab, struct kvm_arm_device_addr)
1218/* Available with KVM_CAP_PPC_RTAS */
1219#define KVM_PPC_RTAS_DEFINE_TOKEN _IOW(KVMIO, 0xac, struct kvm_rtas_token_args)
1220/* Available with KVM_CAP_SPAPR_RESIZE_HPT */
1221#define KVM_PPC_RESIZE_HPT_PREPARE _IOR(KVMIO, 0xad, struct kvm_ppc_resize_hpt)
1222#define KVM_PPC_RESIZE_HPT_COMMIT _IOR(KVMIO, 0xae, struct kvm_ppc_resize_hpt)
1223/* Available with KVM_CAP_PPC_RADIX_MMU or KVM_CAP_PPC_HASH_MMU_V3 */
1224#define KVM_PPC_CONFIGURE_V3_MMU _IOW(KVMIO, 0xaf, struct kvm_ppc_mmuv3_cfg)
1225/* Available with KVM_CAP_PPC_RADIX_MMU */
1226#define KVM_PPC_GET_RMMU_INFO _IOW(KVMIO, 0xb0, struct kvm_ppc_rmmu_info)
1171
1172/* ioctl for vm fd */
1173#define KVM_CREATE_DEVICE _IOWR(KVMIO, 0xe0, struct kvm_create_device)
1174
1175/* ioctls for fds returned by KVM_CREATE_DEVICE */
1176#define KVM_SET_DEVICE_ATTR _IOW(KVMIO, 0xe1, struct kvm_device_attr)
1177#define KVM_GET_DEVICE_ATTR _IOW(KVMIO, 0xe2, struct kvm_device_attr)
1178#define KVM_HAS_DEVICE_ATTR _IOW(KVMIO, 0xe3, struct kvm_device_attr)

--- 129 unchanged lines hidden (view full) ---

1308#define KVM_MAX_MSIX_PER_DEV 256
1309struct kvm_assigned_msix_entry {
1310 __u32 assigned_dev_id;
1311 __u32 gsi;
1312 __u16 entry; /* The index of entry in the MSI-X table */
1313 __u16 padding[3];
1314};
1315
1227
1228/* ioctl for vm fd */
1229#define KVM_CREATE_DEVICE _IOWR(KVMIO, 0xe0, struct kvm_create_device)
1230
1231/* ioctls for fds returned by KVM_CREATE_DEVICE */
1232#define KVM_SET_DEVICE_ATTR _IOW(KVMIO, 0xe1, struct kvm_device_attr)
1233#define KVM_GET_DEVICE_ATTR _IOW(KVMIO, 0xe2, struct kvm_device_attr)
1234#define KVM_HAS_DEVICE_ATTR _IOW(KVMIO, 0xe3, struct kvm_device_attr)

--- 129 unchanged lines hidden (view full) ---

1364#define KVM_MAX_MSIX_PER_DEV 256
1365struct kvm_assigned_msix_entry {
1366 __u32 assigned_dev_id;
1367 __u32 gsi;
1368 __u16 entry; /* The index of entry in the MSI-X table */
1369 __u16 padding[3];
1370};
1371
1372#define KVM_X2APIC_API_USE_32BIT_IDS (1ULL << 0)
1373#define KVM_X2APIC_API_DISABLE_BROADCAST_QUIRK (1ULL << 1)
1374
1375/* Available with KVM_CAP_ARM_USER_IRQ */
1376
1377/* Bits for run->s.regs.device_irq_level */
1378#define KVM_ARM_DEV_EL1_VTIMER (1 << 0)
1379#define KVM_ARM_DEV_EL1_PTIMER (1 << 1)
1380#define KVM_ARM_DEV_PMU (1 << 2)
1381
1316#endif /* __LINUX_KVM_H */
1382#endif /* __LINUX_KVM_H */