linux-headers (unknown)

(root)/
include/
linux/
kvm.h
       1  /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
       2  #ifndef __LINUX_KVM_H
       3  #define __LINUX_KVM_H
       4  
       5  /*
       6   * Userspace interface for /dev/kvm - kernel based virtual machine
       7   *
       8   * Note: you must update KVM_API_VERSION if you change this interface.
       9   */
      10  
      11  #include <linux/const.h>
      12  #include <linux/types.h>
      13  
      14  #include <linux/ioctl.h>
      15  #include <asm/kvm.h>
      16  
      17  #define KVM_API_VERSION 12
      18  
      19  /* *** Deprecated interfaces *** */
      20  
      21  #define KVM_TRC_SHIFT           16
      22  
      23  #define KVM_TRC_ENTRYEXIT       (1 << KVM_TRC_SHIFT)
      24  #define KVM_TRC_HANDLER         (1 << (KVM_TRC_SHIFT + 1))
      25  
      26  #define KVM_TRC_VMENTRY         (KVM_TRC_ENTRYEXIT + 0x01)
      27  #define KVM_TRC_VMEXIT          (KVM_TRC_ENTRYEXIT + 0x02)
      28  #define KVM_TRC_PAGE_FAULT      (KVM_TRC_HANDLER + 0x01)
      29  
      30  #define KVM_TRC_HEAD_SIZE       12
      31  #define KVM_TRC_CYCLE_SIZE      8
      32  #define KVM_TRC_EXTRA_MAX       7
      33  
      34  #define KVM_TRC_INJ_VIRQ         (KVM_TRC_HANDLER + 0x02)
      35  #define KVM_TRC_REDELIVER_EVT    (KVM_TRC_HANDLER + 0x03)
      36  #define KVM_TRC_PEND_INTR        (KVM_TRC_HANDLER + 0x04)
      37  #define KVM_TRC_IO_READ          (KVM_TRC_HANDLER + 0x05)
      38  #define KVM_TRC_IO_WRITE         (KVM_TRC_HANDLER + 0x06)
      39  #define KVM_TRC_CR_READ          (KVM_TRC_HANDLER + 0x07)
      40  #define KVM_TRC_CR_WRITE         (KVM_TRC_HANDLER + 0x08)
      41  #define KVM_TRC_DR_READ          (KVM_TRC_HANDLER + 0x09)
      42  #define KVM_TRC_DR_WRITE         (KVM_TRC_HANDLER + 0x0A)
      43  #define KVM_TRC_MSR_READ         (KVM_TRC_HANDLER + 0x0B)
      44  #define KVM_TRC_MSR_WRITE        (KVM_TRC_HANDLER + 0x0C)
      45  #define KVM_TRC_CPUID            (KVM_TRC_HANDLER + 0x0D)
      46  #define KVM_TRC_INTR             (KVM_TRC_HANDLER + 0x0E)
      47  #define KVM_TRC_NMI              (KVM_TRC_HANDLER + 0x0F)
      48  #define KVM_TRC_VMMCALL          (KVM_TRC_HANDLER + 0x10)
      49  #define KVM_TRC_HLT              (KVM_TRC_HANDLER + 0x11)
      50  #define KVM_TRC_CLTS             (KVM_TRC_HANDLER + 0x12)
      51  #define KVM_TRC_LMSW             (KVM_TRC_HANDLER + 0x13)
      52  #define KVM_TRC_APIC_ACCESS      (KVM_TRC_HANDLER + 0x14)
      53  #define KVM_TRC_TDP_FAULT        (KVM_TRC_HANDLER + 0x15)
      54  #define KVM_TRC_GTLB_WRITE       (KVM_TRC_HANDLER + 0x16)
      55  #define KVM_TRC_STLB_WRITE       (KVM_TRC_HANDLER + 0x17)
      56  #define KVM_TRC_STLB_INVAL       (KVM_TRC_HANDLER + 0x18)
      57  #define KVM_TRC_PPC_INSTR        (KVM_TRC_HANDLER + 0x19)
      58  
      59  struct kvm_user_trace_setup {
      60  	__u32 buf_size;
      61  	__u32 buf_nr;
      62  };
      63  
      64  #define __KVM_DEPRECATED_MAIN_W_0x06 \
      65  	_IOW(KVMIO, 0x06, struct kvm_user_trace_setup)
      66  #define __KVM_DEPRECATED_MAIN_0x07 _IO(KVMIO, 0x07)
      67  #define __KVM_DEPRECATED_MAIN_0x08 _IO(KVMIO, 0x08)
      68  
      69  #define __KVM_DEPRECATED_VM_R_0x70 _IOR(KVMIO, 0x70, struct kvm_assigned_irq)
      70  
      71  struct kvm_breakpoint {
      72  	__u32 enabled;
      73  	__u32 padding;
      74  	__u64 address;
      75  };
      76  
      77  struct kvm_debug_guest {
      78  	__u32 enabled;
      79  	__u32 pad;
      80  	struct kvm_breakpoint breakpoints[4];
      81  	__u32 singlestep;
      82  };
      83  
      84  #define __KVM_DEPRECATED_VCPU_W_0x87 _IOW(KVMIO, 0x87, struct kvm_debug_guest)
      85  
      86  /* *** End of deprecated interfaces *** */
      87  
      88  
      89  /* for KVM_SET_USER_MEMORY_REGION */
      90  struct kvm_userspace_memory_region {
      91  	__u32 slot;
      92  	__u32 flags;
      93  	__u64 guest_phys_addr;
      94  	__u64 memory_size; /* bytes */
      95  	__u64 userspace_addr; /* start of the userspace allocated memory */
      96  };
      97  
      98  /*
      99   * The bit 0 ~ bit 15 of kvm_userspace_memory_region::flags are visible for
     100   * userspace, other bits are reserved for kvm internal use which are defined
     101   * in include/linux/kvm_host.h.
     102   */
     103  #define KVM_MEM_LOG_DIRTY_PAGES	(1UL << 0)
     104  #define KVM_MEM_READONLY	(1UL << 1)
     105  
     106  /* for KVM_IRQ_LINE */
     107  struct kvm_irq_level {
     108  	/*
     109  	 * ACPI gsi notion of irq.
     110  	 * For IA-64 (APIC model) IOAPIC0: irq 0-23; IOAPIC1: irq 24-47..
     111  	 * For X86 (standard AT mode) PIC0/1: irq 0-15. IOAPIC0: 0-23..
     112  	 * For ARM: See Documentation/virt/kvm/api.rst
     113  	 */
     114  	union {
     115  		__u32 irq;
     116  		__s32 status;
     117  	};
     118  	__u32 level;
     119  };
     120  
     121  
     122  struct kvm_irqchip {
     123  	__u32 chip_id;
     124  	__u32 pad;
     125          union {
     126  		char dummy[512];  /* reserving space */
     127  #ifdef __KVM_HAVE_PIT
     128  		struct kvm_pic_state pic;
     129  #endif
     130  #ifdef __KVM_HAVE_IOAPIC
     131  		struct kvm_ioapic_state ioapic;
     132  #endif
     133  	} chip;
     134  };
     135  
     136  /* for KVM_CREATE_PIT2 */
     137  struct kvm_pit_config {
     138  	__u32 flags;
     139  	__u32 pad[15];
     140  };
     141  
     142  #define KVM_PIT_SPEAKER_DUMMY     1
     143  
     144  struct kvm_s390_skeys {
     145  	__u64 start_gfn;
     146  	__u64 count;
     147  	__u64 skeydata_addr;
     148  	__u32 flags;
     149  	__u32 reserved[9];
     150  };
     151  
     152  #define KVM_S390_CMMA_PEEK (1 << 0)
     153  
     154  /**
     155   * kvm_s390_cmma_log - Used for CMMA migration.
     156   *
     157   * Used both for input and output.
     158   *
     159   * @start_gfn: Guest page number to start from.
     160   * @count: Size of the result buffer.
     161   * @flags: Control operation mode via KVM_S390_CMMA_* flags
     162   * @remaining: Used with KVM_S390_GET_CMMA_BITS. Indicates how many dirty
     163   *             pages are still remaining.
     164   * @mask: Used with KVM_S390_SET_CMMA_BITS. Bitmap of bits to actually set
     165   *        in the PGSTE.
     166   * @values: Pointer to the values buffer.
     167   *
     168   * Used in KVM_S390_{G,S}ET_CMMA_BITS ioctls.
     169   */
     170  struct kvm_s390_cmma_log {
     171  	__u64 start_gfn;
     172  	__u32 count;
     173  	__u32 flags;
     174  	union {
     175  		__u64 remaining;
     176  		__u64 mask;
     177  	};
     178  	__u64 values;
     179  };
     180  
     181  struct kvm_hyperv_exit {
     182  #define KVM_EXIT_HYPERV_SYNIC          1
     183  #define KVM_EXIT_HYPERV_HCALL          2
     184  #define KVM_EXIT_HYPERV_SYNDBG         3
     185  	__u32 type;
     186  	__u32 pad1;
     187  	union {
     188  		struct {
     189  			__u32 msr;
     190  			__u32 pad2;
     191  			__u64 control;
     192  			__u64 evt_page;
     193  			__u64 msg_page;
     194  		} synic;
     195  		struct {
     196  			__u64 input;
     197  			__u64 result;
     198  			__u64 params[2];
     199  		} hcall;
     200  		struct {
     201  			__u32 msr;
     202  			__u32 pad2;
     203  			__u64 control;
     204  			__u64 status;
     205  			__u64 send_page;
     206  			__u64 recv_page;
     207  			__u64 pending_page;
     208  		} syndbg;
     209  	} u;
     210  };
     211  
     212  struct kvm_xen_exit {
     213  #define KVM_EXIT_XEN_HCALL          1
     214  	__u32 type;
     215  	union {
     216  		struct {
     217  			__u32 longmode;
     218  			__u32 cpl;
     219  			__u64 input;
     220  			__u64 result;
     221  			__u64 params[6];
     222  		} hcall;
     223  	} u;
     224  };
     225  
     226  #define KVM_S390_GET_SKEYS_NONE   1
     227  #define KVM_S390_SKEYS_MAX        1048576
     228  
     229  #define KVM_EXIT_UNKNOWN          0
     230  #define KVM_EXIT_EXCEPTION        1
     231  #define KVM_EXIT_IO               2
     232  #define KVM_EXIT_HYPERCALL        3
     233  #define KVM_EXIT_DEBUG            4
     234  #define KVM_EXIT_HLT              5
     235  #define KVM_EXIT_MMIO             6
     236  #define KVM_EXIT_IRQ_WINDOW_OPEN  7
     237  #define KVM_EXIT_SHUTDOWN         8
     238  #define KVM_EXIT_FAIL_ENTRY       9
     239  #define KVM_EXIT_INTR             10
     240  #define KVM_EXIT_SET_TPR          11
     241  #define KVM_EXIT_TPR_ACCESS       12
     242  #define KVM_EXIT_S390_SIEIC       13
     243  #define KVM_EXIT_S390_RESET       14
     244  #define KVM_EXIT_DCR              15 /* deprecated */
     245  #define KVM_EXIT_NMI              16
     246  #define KVM_EXIT_INTERNAL_ERROR   17
     247  #define KVM_EXIT_OSI              18
     248  #define KVM_EXIT_PAPR_HCALL	  19
     249  #define KVM_EXIT_S390_UCONTROL	  20
     250  #define KVM_EXIT_WATCHDOG         21
     251  #define KVM_EXIT_S390_TSCH        22
     252  #define KVM_EXIT_EPR              23
     253  #define KVM_EXIT_SYSTEM_EVENT     24
     254  #define KVM_EXIT_S390_STSI        25
     255  #define KVM_EXIT_IOAPIC_EOI       26
     256  #define KVM_EXIT_HYPERV           27
     257  #define KVM_EXIT_ARM_NISV         28
     258  #define KVM_EXIT_X86_RDMSR        29
     259  #define KVM_EXIT_X86_WRMSR        30
     260  #define KVM_EXIT_DIRTY_RING_FULL  31
     261  #define KVM_EXIT_AP_RESET_HOLD    32
     262  #define KVM_EXIT_X86_BUS_LOCK     33
     263  #define KVM_EXIT_XEN              34
     264  #define KVM_EXIT_RISCV_SBI        35
     265  #define KVM_EXIT_RISCV_CSR        36
     266  #define KVM_EXIT_NOTIFY           37
     267  
     268  /* For KVM_EXIT_INTERNAL_ERROR */
     269  /* Emulate instruction failed. */
     270  #define KVM_INTERNAL_ERROR_EMULATION	1
     271  /* Encounter unexpected simultaneous exceptions. */
     272  #define KVM_INTERNAL_ERROR_SIMUL_EX	2
     273  /* Encounter unexpected vm-exit due to delivery event. */
     274  #define KVM_INTERNAL_ERROR_DELIVERY_EV	3
     275  /* Encounter unexpected vm-exit reason */
     276  #define KVM_INTERNAL_ERROR_UNEXPECTED_EXIT_REASON	4
     277  
     278  /* Flags that describe what fields in emulation_failure hold valid data. */
     279  #define KVM_INTERNAL_ERROR_EMULATION_FLAG_INSTRUCTION_BYTES (1ULL << 0)
     280  
     281  /* for KVM_RUN, returned by mmap(vcpu_fd, offset=0) */
     282  struct kvm_run {
     283  	/* in */
     284  	__u8 request_interrupt_window;
     285  	__u8 immediate_exit;
     286  	__u8 padding1[6];
     287  
     288  	/* out */
     289  	__u32 exit_reason;
     290  	__u8 ready_for_interrupt_injection;
     291  	__u8 if_flag;
     292  	__u16 flags;
     293  
     294  	/* in (pre_kvm_run), out (post_kvm_run) */
     295  	__u64 cr8;
     296  	__u64 apic_base;
     297  
     298  #ifdef __KVM_S390
     299  	/* the processor status word for s390 */
     300  	__u64 psw_mask; /* psw upper half */
     301  	__u64 psw_addr; /* psw lower half */
     302  #endif
     303  	union {
     304  		/* KVM_EXIT_UNKNOWN */
     305  		struct {
     306  			__u64 hardware_exit_reason;
     307  		} hw;
     308  		/* KVM_EXIT_FAIL_ENTRY */
     309  		struct {
     310  			__u64 hardware_entry_failure_reason;
     311  			__u32 cpu;
     312  		} fail_entry;
     313  		/* KVM_EXIT_EXCEPTION */
     314  		struct {
     315  			__u32 exception;
     316  			__u32 error_code;
     317  		} ex;
     318  		/* KVM_EXIT_IO */
     319  		struct {
     320  #define KVM_EXIT_IO_IN  0
     321  #define KVM_EXIT_IO_OUT 1
     322  			__u8 direction;
     323  			__u8 size; /* bytes */
     324  			__u16 port;
     325  			__u32 count;
     326  			__u64 data_offset; /* relative to kvm_run start */
     327  		} io;
     328  		/* KVM_EXIT_DEBUG */
     329  		struct {
     330  			struct kvm_debug_exit_arch arch;
     331  		} debug;
     332  		/* KVM_EXIT_MMIO */
     333  		struct {
     334  			__u64 phys_addr;
     335  			__u8  data[8];
     336  			__u32 len;
     337  			__u8  is_write;
     338  		} mmio;
     339  		/* KVM_EXIT_HYPERCALL */
     340  		struct {
     341  			__u64 nr;
     342  			__u64 args[6];
     343  			__u64 ret;
     344  
     345  			union {
     346  				__u32 longmode;
     347  				__u64 flags;
     348  			};
     349  		} hypercall;
     350  		/* KVM_EXIT_TPR_ACCESS */
     351  		struct {
     352  			__u64 rip;
     353  			__u32 is_write;
     354  			__u32 pad;
     355  		} tpr_access;
     356  		/* KVM_EXIT_S390_SIEIC */
     357  		struct {
     358  			__u8 icptcode;
     359  			__u16 ipa;
     360  			__u32 ipb;
     361  		} s390_sieic;
     362  		/* KVM_EXIT_S390_RESET */
     363  #define KVM_S390_RESET_POR       1
     364  #define KVM_S390_RESET_CLEAR     2
     365  #define KVM_S390_RESET_SUBSYSTEM 4
     366  #define KVM_S390_RESET_CPU_INIT  8
     367  #define KVM_S390_RESET_IPL       16
     368  		__u64 s390_reset_flags;
     369  		/* KVM_EXIT_S390_UCONTROL */
     370  		struct {
     371  			__u64 trans_exc_code;
     372  			__u32 pgm_code;
     373  		} s390_ucontrol;
     374  		/* KVM_EXIT_DCR (deprecated) */
     375  		struct {
     376  			__u32 dcrn;
     377  			__u32 data;
     378  			__u8  is_write;
     379  		} dcr;
     380  		/* KVM_EXIT_INTERNAL_ERROR */
     381  		struct {
     382  			__u32 suberror;
     383  			/* Available with KVM_CAP_INTERNAL_ERROR_DATA: */
     384  			__u32 ndata;
     385  			__u64 data[16];
     386  		} internal;
     387  		/*
     388  		 * KVM_INTERNAL_ERROR_EMULATION
     389  		 *
     390  		 * "struct emulation_failure" is an overlay of "struct internal"
     391  		 * that is used for the KVM_INTERNAL_ERROR_EMULATION sub-type of
     392  		 * KVM_EXIT_INTERNAL_ERROR.  Note, unlike other internal error
     393  		 * sub-types, this struct is ABI!  It also needs to be backwards
     394  		 * compatible with "struct internal".  Take special care that
     395  		 * "ndata" is correct, that new fields are enumerated in "flags",
     396  		 * and that each flag enumerates fields that are 64-bit aligned
     397  		 * and sized (so that ndata+internal.data[] is valid/accurate).
     398  		 *
     399  		 * Space beyond the defined fields may be used to store arbitrary
     400  		 * debug information relating to the emulation failure. It is
     401  		 * accounted for in "ndata" but the format is unspecified and is
     402  		 * not represented in "flags". Any such information is *not* ABI!
     403  		 */
     404  		struct {
     405  			__u32 suberror;
     406  			__u32 ndata;
     407  			__u64 flags;
     408  			union {
     409  				struct {
     410  					__u8  insn_size;
     411  					__u8  insn_bytes[15];
     412  				};
     413  			};
     414  			/* Arbitrary debug data may follow. */
     415  		} emulation_failure;
     416  		/* KVM_EXIT_OSI */
     417  		struct {
     418  			__u64 gprs[32];
     419  		} osi;
     420  		/* KVM_EXIT_PAPR_HCALL */
     421  		struct {
     422  			__u64 nr;
     423  			__u64 ret;
     424  			__u64 args[9];
     425  		} papr_hcall;
     426  		/* KVM_EXIT_S390_TSCH */
     427  		struct {
     428  			__u16 subchannel_id;
     429  			__u16 subchannel_nr;
     430  			__u32 io_int_parm;
     431  			__u32 io_int_word;
     432  			__u32 ipb;
     433  			__u8 dequeued;
     434  		} s390_tsch;
     435  		/* KVM_EXIT_EPR */
     436  		struct {
     437  			__u32 epr;
     438  		} epr;
     439  		/* KVM_EXIT_SYSTEM_EVENT */
     440  		struct {
     441  #define KVM_SYSTEM_EVENT_SHUTDOWN       1
     442  #define KVM_SYSTEM_EVENT_RESET          2
     443  #define KVM_SYSTEM_EVENT_CRASH          3
     444  #define KVM_SYSTEM_EVENT_WAKEUP         4
     445  #define KVM_SYSTEM_EVENT_SUSPEND        5
     446  #define KVM_SYSTEM_EVENT_SEV_TERM       6
     447  			__u32 type;
     448  			__u32 ndata;
     449  			union {
     450  				__u64 flags;
     451  				__u64 data[16];
     452  			};
     453  		} system_event;
     454  		/* KVM_EXIT_S390_STSI */
     455  		struct {
     456  			__u64 addr;
     457  			__u8 ar;
     458  			__u8 reserved;
     459  			__u8 fc;
     460  			__u8 sel1;
     461  			__u16 sel2;
     462  		} s390_stsi;
     463  		/* KVM_EXIT_IOAPIC_EOI */
     464  		struct {
     465  			__u8 vector;
     466  		} eoi;
     467  		/* KVM_EXIT_HYPERV */
     468  		struct kvm_hyperv_exit hyperv;
     469  		/* KVM_EXIT_ARM_NISV */
     470  		struct {
     471  			__u64 esr_iss;
     472  			__u64 fault_ipa;
     473  		} arm_nisv;
     474  		/* KVM_EXIT_X86_RDMSR / KVM_EXIT_X86_WRMSR */
     475  		struct {
     476  			__u8 error; /* user -> kernel */
     477  			__u8 pad[7];
     478  #define KVM_MSR_EXIT_REASON_INVAL	(1 << 0)
     479  #define KVM_MSR_EXIT_REASON_UNKNOWN	(1 << 1)
     480  #define KVM_MSR_EXIT_REASON_FILTER	(1 << 2)
     481  #define KVM_MSR_EXIT_REASON_VALID_MASK	(KVM_MSR_EXIT_REASON_INVAL   |	\
     482  					 KVM_MSR_EXIT_REASON_UNKNOWN |	\
     483  					 KVM_MSR_EXIT_REASON_FILTER)
     484  			__u32 reason; /* kernel -> user */
     485  			__u32 index; /* kernel -> user */
     486  			__u64 data; /* kernel <-> user */
     487  		} msr;
     488  		/* KVM_EXIT_XEN */
     489  		struct kvm_xen_exit xen;
     490  		/* KVM_EXIT_RISCV_SBI */
     491  		struct {
     492  			unsigned long extension_id;
     493  			unsigned long function_id;
     494  			unsigned long args[6];
     495  			unsigned long ret[2];
     496  		} riscv_sbi;
     497  		/* KVM_EXIT_RISCV_CSR */
     498  		struct {
     499  			unsigned long csr_num;
     500  			unsigned long new_value;
     501  			unsigned long write_mask;
     502  			unsigned long ret_value;
     503  		} riscv_csr;
     504  		/* KVM_EXIT_NOTIFY */
     505  		struct {
     506  #define KVM_NOTIFY_CONTEXT_INVALID	(1 << 0)
     507  			__u32 flags;
     508  		} notify;
     509  		/* Fix the size of the union. */
     510  		char padding[256];
     511  	};
     512  
     513  	/* 2048 is the size of the char array used to bound/pad the size
     514  	 * of the union that holds sync regs.
     515  	 */
     516  	#define SYNC_REGS_SIZE_BYTES 2048
     517  	/*
     518  	 * shared registers between kvm and userspace.
     519  	 * kvm_valid_regs specifies the register classes set by the host
     520  	 * kvm_dirty_regs specified the register classes dirtied by userspace
     521  	 * struct kvm_sync_regs is architecture specific, as well as the
     522  	 * bits for kvm_valid_regs and kvm_dirty_regs
     523  	 */
     524  	__u64 kvm_valid_regs;
     525  	__u64 kvm_dirty_regs;
     526  	union {
     527  		struct kvm_sync_regs regs;
     528  		char padding[SYNC_REGS_SIZE_BYTES];
     529  	} s;
     530  };
     531  
     532  /* for KVM_REGISTER_COALESCED_MMIO / KVM_UNREGISTER_COALESCED_MMIO */
     533  
     534  struct kvm_coalesced_mmio_zone {
     535  	__u64 addr;
     536  	__u32 size;
     537  	union {
     538  		__u32 pad;
     539  		__u32 pio;
     540  	};
     541  };
     542  
     543  struct kvm_coalesced_mmio {
     544  	__u64 phys_addr;
     545  	__u32 len;
     546  	union {
     547  		__u32 pad;
     548  		__u32 pio;
     549  	};
     550  	__u8  data[8];
     551  };
     552  
     553  struct kvm_coalesced_mmio_ring {
     554  	__u32 first, last;
     555  	struct kvm_coalesced_mmio coalesced_mmio[];
     556  };
     557  
     558  #define KVM_COALESCED_MMIO_MAX \
     559  	((PAGE_SIZE - sizeof(struct kvm_coalesced_mmio_ring)) / \
     560  	 sizeof(struct kvm_coalesced_mmio))
     561  
     562  /* for KVM_TRANSLATE */
     563  struct kvm_translation {
     564  	/* in */
     565  	__u64 linear_address;
     566  
     567  	/* out */
     568  	__u64 physical_address;
     569  	__u8  valid;
     570  	__u8  writeable;
     571  	__u8  usermode;
     572  	__u8  pad[5];
     573  };
     574  
     575  /* for KVM_S390_MEM_OP */
     576  struct kvm_s390_mem_op {
     577  	/* in */
     578  	__u64 gaddr;		/* the guest address */
     579  	__u64 flags;		/* flags */
     580  	__u32 size;		/* amount of bytes */
     581  	__u32 op;		/* type of operation */
     582  	__u64 buf;		/* buffer in userspace */
     583  	union {
     584  		struct {
     585  			__u8 ar;	/* the access register number */
     586  			__u8 key;	/* access key, ignored if flag unset */
     587  			__u8 pad1[6];	/* ignored */
     588  			__u64 old_addr;	/* ignored if cmpxchg flag unset */
     589  		};
     590  		__u32 sida_offset; /* offset into the sida */
     591  		__u8 reserved[32]; /* ignored */
     592  	};
     593  };
     594  /* types for kvm_s390_mem_op->op */
     595  #define KVM_S390_MEMOP_LOGICAL_READ	0
     596  #define KVM_S390_MEMOP_LOGICAL_WRITE	1
     597  #define KVM_S390_MEMOP_SIDA_READ	2
     598  #define KVM_S390_MEMOP_SIDA_WRITE	3
     599  #define KVM_S390_MEMOP_ABSOLUTE_READ	4
     600  #define KVM_S390_MEMOP_ABSOLUTE_WRITE	5
     601  #define KVM_S390_MEMOP_ABSOLUTE_CMPXCHG	6
     602  
     603  /* flags for kvm_s390_mem_op->flags */
     604  #define KVM_S390_MEMOP_F_CHECK_ONLY		(1ULL << 0)
     605  #define KVM_S390_MEMOP_F_INJECT_EXCEPTION	(1ULL << 1)
     606  #define KVM_S390_MEMOP_F_SKEY_PROTECTION	(1ULL << 2)
     607  
     608  /* flags specifying extension support via KVM_CAP_S390_MEM_OP_EXTENSION */
     609  #define KVM_S390_MEMOP_EXTENSION_CAP_BASE	(1 << 0)
     610  #define KVM_S390_MEMOP_EXTENSION_CAP_CMPXCHG	(1 << 1)
     611  
     612  /* for KVM_INTERRUPT */
     613  struct kvm_interrupt {
     614  	/* in */
     615  	__u32 irq;
     616  };
     617  
     618  /* for KVM_GET_DIRTY_LOG */
     619  struct kvm_dirty_log {
     620  	__u32 slot;
     621  	__u32 padding1;
     622  	union {
     623  		void *dirty_bitmap; /* one bit per page */
     624  		__u64 padding2;
     625  	};
     626  };
     627  
     628  /* for KVM_CLEAR_DIRTY_LOG */
     629  struct kvm_clear_dirty_log {
     630  	__u32 slot;
     631  	__u32 num_pages;
     632  	__u64 first_page;
     633  	union {
     634  		void *dirty_bitmap; /* one bit per page */
     635  		__u64 padding2;
     636  	};
     637  };
     638  
     639  /* for KVM_SET_SIGNAL_MASK */
     640  struct kvm_signal_mask {
     641  	__u32 len;
     642  	__u8  sigset[];
     643  };
     644  
     645  /* for KVM_TPR_ACCESS_REPORTING */
     646  struct kvm_tpr_access_ctl {
     647  	__u32 enabled;
     648  	__u32 flags;
     649  	__u32 reserved[8];
     650  };
     651  
     652  /* for KVM_SET_VAPIC_ADDR */
     653  struct kvm_vapic_addr {
     654  	__u64 vapic_addr;
     655  };
     656  
     657  /* for KVM_SET_MP_STATE */
     658  
     659  /* not all states are valid on all architectures */
     660  #define KVM_MP_STATE_RUNNABLE          0
     661  #define KVM_MP_STATE_UNINITIALIZED     1
     662  #define KVM_MP_STATE_INIT_RECEIVED     2
     663  #define KVM_MP_STATE_HALTED            3
     664  #define KVM_MP_STATE_SIPI_RECEIVED     4
     665  #define KVM_MP_STATE_STOPPED           5
     666  #define KVM_MP_STATE_CHECK_STOP        6
     667  #define KVM_MP_STATE_OPERATING         7
     668  #define KVM_MP_STATE_LOAD              8
     669  #define KVM_MP_STATE_AP_RESET_HOLD     9
     670  #define KVM_MP_STATE_SUSPENDED         10
     671  
     672  struct kvm_mp_state {
     673  	__u32 mp_state;
     674  };
     675  
     676  struct kvm_s390_psw {
     677  	__u64 mask;
     678  	__u64 addr;
     679  };
     680  
     681  /* valid values for type in kvm_s390_interrupt */
     682  #define KVM_S390_SIGP_STOP		0xfffe0000u
     683  #define KVM_S390_PROGRAM_INT		0xfffe0001u
     684  #define KVM_S390_SIGP_SET_PREFIX	0xfffe0002u
     685  #define KVM_S390_RESTART		0xfffe0003u
     686  #define KVM_S390_INT_PFAULT_INIT	0xfffe0004u
     687  #define KVM_S390_INT_PFAULT_DONE	0xfffe0005u
     688  #define KVM_S390_MCHK			0xfffe1000u
     689  #define KVM_S390_INT_CLOCK_COMP		0xffff1004u
     690  #define KVM_S390_INT_CPU_TIMER		0xffff1005u
     691  #define KVM_S390_INT_VIRTIO		0xffff2603u
     692  #define KVM_S390_INT_SERVICE		0xffff2401u
     693  #define KVM_S390_INT_EMERGENCY		0xffff1201u
     694  #define KVM_S390_INT_EXTERNAL_CALL	0xffff1202u
     695  /* Anything below 0xfffe0000u is taken by INT_IO */
     696  #define KVM_S390_INT_IO(ai,cssid,ssid,schid)   \
     697  	(((schid)) |			       \
     698  	 ((ssid) << 16) |		       \
     699  	 ((cssid) << 18) |		       \
     700  	 ((ai) << 26))
     701  #define KVM_S390_INT_IO_MIN		0x00000000u
     702  #define KVM_S390_INT_IO_MAX		0xfffdffffu
     703  #define KVM_S390_INT_IO_AI_MASK		0x04000000u
     704  
     705  
     706  struct kvm_s390_interrupt {
     707  	__u32 type;
     708  	__u32 parm;
     709  	__u64 parm64;
     710  };
     711  
     712  struct kvm_s390_io_info {
     713  	__u16 subchannel_id;
     714  	__u16 subchannel_nr;
     715  	__u32 io_int_parm;
     716  	__u32 io_int_word;
     717  };
     718  
     719  struct kvm_s390_ext_info {
     720  	__u32 ext_params;
     721  	__u32 pad;
     722  	__u64 ext_params2;
     723  };
     724  
     725  struct kvm_s390_pgm_info {
     726  	__u64 trans_exc_code;
     727  	__u64 mon_code;
     728  	__u64 per_address;
     729  	__u32 data_exc_code;
     730  	__u16 code;
     731  	__u16 mon_class_nr;
     732  	__u8 per_code;
     733  	__u8 per_atmid;
     734  	__u8 exc_access_id;
     735  	__u8 per_access_id;
     736  	__u8 op_access_id;
     737  #define KVM_S390_PGM_FLAGS_ILC_VALID	0x01
     738  #define KVM_S390_PGM_FLAGS_ILC_0	0x02
     739  #define KVM_S390_PGM_FLAGS_ILC_1	0x04
     740  #define KVM_S390_PGM_FLAGS_ILC_MASK	0x06
     741  #define KVM_S390_PGM_FLAGS_NO_REWIND	0x08
     742  	__u8 flags;
     743  	__u8 pad[2];
     744  };
     745  
     746  struct kvm_s390_prefix_info {
     747  	__u32 address;
     748  };
     749  
     750  struct kvm_s390_extcall_info {
     751  	__u16 code;
     752  };
     753  
     754  struct kvm_s390_emerg_info {
     755  	__u16 code;
     756  };
     757  
     758  #define KVM_S390_STOP_FLAG_STORE_STATUS	0x01
     759  struct kvm_s390_stop_info {
     760  	__u32 flags;
     761  };
     762  
     763  struct kvm_s390_mchk_info {
     764  	__u64 cr14;
     765  	__u64 mcic;
     766  	__u64 failing_storage_address;
     767  	__u32 ext_damage_code;
     768  	__u32 pad;
     769  	__u8 fixed_logout[16];
     770  };
     771  
     772  struct kvm_s390_irq {
     773  	__u64 type;
     774  	union {
     775  		struct kvm_s390_io_info io;
     776  		struct kvm_s390_ext_info ext;
     777  		struct kvm_s390_pgm_info pgm;
     778  		struct kvm_s390_emerg_info emerg;
     779  		struct kvm_s390_extcall_info extcall;
     780  		struct kvm_s390_prefix_info prefix;
     781  		struct kvm_s390_stop_info stop;
     782  		struct kvm_s390_mchk_info mchk;
     783  		char reserved[64];
     784  	} u;
     785  };
     786  
     787  struct kvm_s390_irq_state {
     788  	__u64 buf;
     789  	__u32 flags;        /* will stay unused for compatibility reasons */
     790  	__u32 len;
     791  	__u32 reserved[4];  /* will stay unused for compatibility reasons */
     792  };
     793  
     794  /* for KVM_SET_GUEST_DEBUG */
     795  
     796  #define KVM_GUESTDBG_ENABLE		0x00000001
     797  #define KVM_GUESTDBG_SINGLESTEP		0x00000002
     798  
     799  struct kvm_guest_debug {
     800  	__u32 control;
     801  	__u32 pad;
     802  	struct kvm_guest_debug_arch arch;
     803  };
     804  
     805  enum {
     806  	kvm_ioeventfd_flag_nr_datamatch,
     807  	kvm_ioeventfd_flag_nr_pio,
     808  	kvm_ioeventfd_flag_nr_deassign,
     809  	kvm_ioeventfd_flag_nr_virtio_ccw_notify,
     810  	kvm_ioeventfd_flag_nr_fast_mmio,
     811  	kvm_ioeventfd_flag_nr_max,
     812  };
     813  
     814  #define KVM_IOEVENTFD_FLAG_DATAMATCH (1 << kvm_ioeventfd_flag_nr_datamatch)
     815  #define KVM_IOEVENTFD_FLAG_PIO       (1 << kvm_ioeventfd_flag_nr_pio)
     816  #define KVM_IOEVENTFD_FLAG_DEASSIGN  (1 << kvm_ioeventfd_flag_nr_deassign)
     817  #define KVM_IOEVENTFD_FLAG_VIRTIO_CCW_NOTIFY \
     818  	(1 << kvm_ioeventfd_flag_nr_virtio_ccw_notify)
     819  
     820  #define KVM_IOEVENTFD_VALID_FLAG_MASK  ((1 << kvm_ioeventfd_flag_nr_max) - 1)
     821  
     822  struct kvm_ioeventfd {
     823  	__u64 datamatch;
     824  	__u64 addr;        /* legal pio/mmio address */
     825  	__u32 len;         /* 1, 2, 4, or 8 bytes; or 0 to ignore length */
     826  	__s32 fd;
     827  	__u32 flags;
     828  	__u8  pad[36];
     829  };
     830  
     831  #define KVM_X86_DISABLE_EXITS_MWAIT          (1 << 0)
     832  #define KVM_X86_DISABLE_EXITS_HLT            (1 << 1)
     833  #define KVM_X86_DISABLE_EXITS_PAUSE          (1 << 2)
     834  #define KVM_X86_DISABLE_EXITS_CSTATE         (1 << 3)
     835  #define KVM_X86_DISABLE_VALID_EXITS          (KVM_X86_DISABLE_EXITS_MWAIT | \
     836                                                KVM_X86_DISABLE_EXITS_HLT | \
     837                                                KVM_X86_DISABLE_EXITS_PAUSE | \
     838                                                KVM_X86_DISABLE_EXITS_CSTATE)
     839  
     840  /* for KVM_ENABLE_CAP */
     841  struct kvm_enable_cap {
     842  	/* in */
     843  	__u32 cap;
     844  	__u32 flags;
     845  	__u64 args[4];
     846  	__u8  pad[64];
     847  };
     848  
     849  /* for KVM_PPC_GET_PVINFO */
     850  
     851  #define KVM_PPC_PVINFO_FLAGS_EV_IDLE   (1<<0)
     852  
     853  struct kvm_ppc_pvinfo {
     854  	/* out */
     855  	__u32 flags;
     856  	__u32 hcall[4];
     857  	__u8  pad[108];
     858  };
     859  
     860  /* for KVM_PPC_GET_SMMU_INFO */
     861  #define KVM_PPC_PAGE_SIZES_MAX_SZ	8
     862  
     863  struct kvm_ppc_one_page_size {
     864  	__u32 page_shift;	/* Page shift (or 0) */
     865  	__u32 pte_enc;		/* Encoding in the HPTE (>>12) */
     866  };
     867  
     868  struct kvm_ppc_one_seg_page_size {
     869  	__u32 page_shift;	/* Base page shift of segment (or 0) */
     870  	__u32 slb_enc;		/* SLB encoding for BookS */
     871  	struct kvm_ppc_one_page_size enc[KVM_PPC_PAGE_SIZES_MAX_SZ];
     872  };
     873  
     874  #define KVM_PPC_PAGE_SIZES_REAL		0x00000001
     875  #define KVM_PPC_1T_SEGMENTS		0x00000002
     876  #define KVM_PPC_NO_HASH			0x00000004
     877  
     878  struct kvm_ppc_smmu_info {
     879  	__u64 flags;
     880  	__u32 slb_size;
     881  	__u16 data_keys;	/* # storage keys supported for data */
     882  	__u16 instr_keys;	/* # storage keys supported for instructions */
     883  	struct kvm_ppc_one_seg_page_size sps[KVM_PPC_PAGE_SIZES_MAX_SZ];
     884  };
     885  
     886  /* for KVM_PPC_RESIZE_HPT_{PREPARE,COMMIT} */
     887  struct kvm_ppc_resize_hpt {
     888  	__u64 flags;
     889  	__u32 shift;
     890  	__u32 pad;
     891  };
     892  
     893  #define KVMIO 0xAE
     894  
     895  /* machine type bits, to be used as argument to KVM_CREATE_VM */
     896  #define KVM_VM_S390_UCONTROL	1
     897  
     898  /* on ppc, 0 indicate default, 1 should force HV and 2 PR */
     899  #define KVM_VM_PPC_HV 1
     900  #define KVM_VM_PPC_PR 2
     901  
     902  /* on MIPS, 0 indicates auto, 1 forces VZ ASE, 2 forces trap & emulate */
     903  #define KVM_VM_MIPS_AUTO	0
     904  #define KVM_VM_MIPS_VZ		1
     905  #define KVM_VM_MIPS_TE		2
     906  
     907  #define KVM_S390_SIE_PAGE_OFFSET 1
     908  
     909  /*
     910   * On arm64, machine type can be used to request the physical
     911   * address size for the VM. Bits[7-0] are reserved for the guest
     912   * PA size shift (i.e, log2(PA_Size)). For backward compatibility,
     913   * value 0 implies the default IPA size, 40bits.
     914   */
     915  #define KVM_VM_TYPE_ARM_IPA_SIZE_MASK	0xffULL
     916  #define KVM_VM_TYPE_ARM_IPA_SIZE(x)		\
     917  	((x) & KVM_VM_TYPE_ARM_IPA_SIZE_MASK)
     918  /*
     919   * ioctls for /dev/kvm fds:
     920   */
     921  #define KVM_GET_API_VERSION       _IO(KVMIO,   0x00)
     922  #define KVM_CREATE_VM             _IO(KVMIO,   0x01) /* returns a VM fd */
     923  #define KVM_GET_MSR_INDEX_LIST    _IOWR(KVMIO, 0x02, struct kvm_msr_list)
     924  
     925  #define KVM_S390_ENABLE_SIE       _IO(KVMIO,   0x06)
     926  /*
     927   * Check if a kvm extension is available.  Argument is extension number,
     928   * return is 1 (yes) or 0 (no, sorry).
     929   */
     930  #define KVM_CHECK_EXTENSION       _IO(KVMIO,   0x03)
     931  /*
     932   * Get size for mmap(vcpu_fd)
     933   */
     934  #define KVM_GET_VCPU_MMAP_SIZE    _IO(KVMIO,   0x04) /* in bytes */
     935  #define KVM_GET_SUPPORTED_CPUID   _IOWR(KVMIO, 0x05, struct kvm_cpuid2)
     936  #define KVM_TRACE_ENABLE          __KVM_DEPRECATED_MAIN_W_0x06
     937  #define KVM_TRACE_PAUSE           __KVM_DEPRECATED_MAIN_0x07
     938  #define KVM_TRACE_DISABLE         __KVM_DEPRECATED_MAIN_0x08
     939  #define KVM_GET_EMULATED_CPUID	  _IOWR(KVMIO, 0x09, struct kvm_cpuid2)
     940  #define KVM_GET_MSR_FEATURE_INDEX_LIST    _IOWR(KVMIO, 0x0a, struct kvm_msr_list)
     941  
     942  /*
     943   * Extension capability list.
     944   */
     945  #define KVM_CAP_IRQCHIP	  0
     946  #define KVM_CAP_HLT	  1
     947  #define KVM_CAP_MMU_SHADOW_CACHE_CONTROL 2
     948  #define KVM_CAP_USER_MEMORY 3
     949  #define KVM_CAP_SET_TSS_ADDR 4
     950  #define KVM_CAP_VAPIC 6
     951  #define KVM_CAP_EXT_CPUID 7
     952  #define KVM_CAP_CLOCKSOURCE 8
     953  #define KVM_CAP_NR_VCPUS 9       /* returns recommended max vcpus per vm */
     954  #define KVM_CAP_NR_MEMSLOTS 10   /* returns max memory slots per vm */
     955  #define KVM_CAP_PIT 11
     956  #define KVM_CAP_NOP_IO_DELAY 12
     957  #define KVM_CAP_PV_MMU 13
     958  #define KVM_CAP_MP_STATE 14
     959  #define KVM_CAP_COALESCED_MMIO 15
     960  #define KVM_CAP_SYNC_MMU 16  /* Changes to host mmap are reflected in guest */
     961  #define KVM_CAP_IOMMU 18
     962  /* Bug in KVM_SET_USER_MEMORY_REGION fixed: */
     963  #define KVM_CAP_DESTROY_MEMORY_REGION_WORKS 21
     964  #define KVM_CAP_USER_NMI 22
     965  #ifdef __KVM_HAVE_GUEST_DEBUG
     966  #define KVM_CAP_SET_GUEST_DEBUG 23
     967  #endif
     968  #ifdef __KVM_HAVE_PIT
     969  #define KVM_CAP_REINJECT_CONTROL 24
     970  #endif
     971  #define KVM_CAP_IRQ_ROUTING 25
     972  #define KVM_CAP_IRQ_INJECT_STATUS 26
     973  #define KVM_CAP_ASSIGN_DEV_IRQ 29
     974  /* Another bug in KVM_SET_USER_MEMORY_REGION fixed: */
     975  #define KVM_CAP_JOIN_MEMORY_REGIONS_WORKS 30
     976  #ifdef __KVM_HAVE_MCE
     977  #define KVM_CAP_MCE 31
     978  #endif
     979  #define KVM_CAP_IRQFD 32
     980  #ifdef __KVM_HAVE_PIT
     981  #define KVM_CAP_PIT2 33
     982  #endif
     983  #define KVM_CAP_SET_BOOT_CPU_ID 34
     984  #ifdef __KVM_HAVE_PIT_STATE2
     985  #define KVM_CAP_PIT_STATE2 35
     986  #endif
     987  #define KVM_CAP_IOEVENTFD 36
     988  #define KVM_CAP_SET_IDENTITY_MAP_ADDR 37
     989  #ifdef __KVM_HAVE_XEN_HVM
     990  #define KVM_CAP_XEN_HVM 38
     991  #endif
     992  #define KVM_CAP_ADJUST_CLOCK 39
     993  #define KVM_CAP_INTERNAL_ERROR_DATA 40
     994  #ifdef __KVM_HAVE_VCPU_EVENTS
     995  #define KVM_CAP_VCPU_EVENTS 41
     996  #endif
     997  #define KVM_CAP_S390_PSW 42
     998  #define KVM_CAP_PPC_SEGSTATE 43
     999  #define KVM_CAP_HYPERV 44
    1000  #define KVM_CAP_HYPERV_VAPIC 45
    1001  #define KVM_CAP_HYPERV_SPIN 46
    1002  #define KVM_CAP_PCI_SEGMENT 47
    1003  #define KVM_CAP_PPC_PAIRED_SINGLES 48
    1004  #define KVM_CAP_INTR_SHADOW 49
    1005  #ifdef __KVM_HAVE_DEBUGREGS
    1006  #define KVM_CAP_DEBUGREGS 50
    1007  #endif
    1008  #define KVM_CAP_X86_ROBUST_SINGLESTEP 51
    1009  #define KVM_CAP_PPC_OSI 52
    1010  #define KVM_CAP_PPC_UNSET_IRQ 53
    1011  #define KVM_CAP_ENABLE_CAP 54
    1012  #ifdef __KVM_HAVE_XSAVE
    1013  #define KVM_CAP_XSAVE 55
    1014  #endif
    1015  #ifdef __KVM_HAVE_XCRS
    1016  #define KVM_CAP_XCRS 56
    1017  #endif
    1018  #define KVM_CAP_PPC_GET_PVINFO 57
    1019  #define KVM_CAP_PPC_IRQ_LEVEL 58
    1020  #define KVM_CAP_ASYNC_PF 59
    1021  #define KVM_CAP_TSC_CONTROL 60
    1022  #define KVM_CAP_GET_TSC_KHZ 61
    1023  #define KVM_CAP_PPC_BOOKE_SREGS 62
    1024  #define KVM_CAP_SPAPR_TCE 63
    1025  #define KVM_CAP_PPC_SMT 64
    1026  #define KVM_CAP_PPC_RMA	65
    1027  #define KVM_CAP_MAX_VCPUS 66       /* returns max vcpus per vm */
    1028  #define KVM_CAP_PPC_HIOR 67
    1029  #define KVM_CAP_PPC_PAPR 68
    1030  #define KVM_CAP_SW_TLB 69
    1031  #define KVM_CAP_ONE_REG 70
    1032  #define KVM_CAP_S390_GMAP 71
    1033  #define KVM_CAP_TSC_DEADLINE_TIMER 72
    1034  #define KVM_CAP_S390_UCONTROL 73
    1035  #define KVM_CAP_SYNC_REGS 74
    1036  #define KVM_CAP_PCI_2_3 75
    1037  #define KVM_CAP_KVMCLOCK_CTRL 76
    1038  #define KVM_CAP_SIGNAL_MSI 77
    1039  #define KVM_CAP_PPC_GET_SMMU_INFO 78
    1040  #define KVM_CAP_S390_COW 79
    1041  #define KVM_CAP_PPC_ALLOC_HTAB 80
    1042  #define KVM_CAP_READONLY_MEM 81
    1043  #define KVM_CAP_IRQFD_RESAMPLE 82
    1044  #define KVM_CAP_PPC_BOOKE_WATCHDOG 83
    1045  #define KVM_CAP_PPC_HTAB_FD 84
    1046  #define KVM_CAP_S390_CSS_SUPPORT 85
    1047  #define KVM_CAP_PPC_EPR 86
    1048  #define KVM_CAP_ARM_PSCI 87
    1049  #define KVM_CAP_ARM_SET_DEVICE_ADDR 88
    1050  #define KVM_CAP_DEVICE_CTRL 89
    1051  #define KVM_CAP_IRQ_MPIC 90
    1052  #define KVM_CAP_PPC_RTAS 91
    1053  #define KVM_CAP_IRQ_XICS 92
    1054  #define KVM_CAP_ARM_EL1_32BIT 93
    1055  #define KVM_CAP_SPAPR_MULTITCE 94
    1056  #define KVM_CAP_EXT_EMUL_CPUID 95
    1057  #define KVM_CAP_HYPERV_TIME 96
    1058  #define KVM_CAP_IOAPIC_POLARITY_IGNORED 97
    1059  #define KVM_CAP_ENABLE_CAP_VM 98
    1060  #define KVM_CAP_S390_IRQCHIP 99
    1061  #define KVM_CAP_IOEVENTFD_NO_LENGTH 100
    1062  #define KVM_CAP_VM_ATTRIBUTES 101
    1063  #define KVM_CAP_ARM_PSCI_0_2 102
    1064  #define KVM_CAP_PPC_FIXUP_HCALL 103
    1065  #define KVM_CAP_PPC_ENABLE_HCALL 104
    1066  #define KVM_CAP_CHECK_EXTENSION_VM 105
    1067  #define KVM_CAP_S390_USER_SIGP 106
    1068  #define KVM_CAP_S390_VECTOR_REGISTERS 107
    1069  #define KVM_CAP_S390_MEM_OP 108
    1070  #define KVM_CAP_S390_USER_STSI 109
    1071  #define KVM_CAP_S390_SKEYS 110
    1072  #define KVM_CAP_MIPS_FPU 111
    1073  #define KVM_CAP_MIPS_MSA 112
    1074  #define KVM_CAP_S390_INJECT_IRQ 113
    1075  #define KVM_CAP_S390_IRQ_STATE 114
    1076  #define KVM_CAP_PPC_HWRNG 115
    1077  #define KVM_CAP_DISABLE_QUIRKS 116
    1078  #define KVM_CAP_X86_SMM 117
    1079  #define KVM_CAP_MULTI_ADDRESS_SPACE 118
    1080  #define KVM_CAP_GUEST_DEBUG_HW_BPS 119
    1081  #define KVM_CAP_GUEST_DEBUG_HW_WPS 120
    1082  #define KVM_CAP_SPLIT_IRQCHIP 121
    1083  #define KVM_CAP_IOEVENTFD_ANY_LENGTH 122
    1084  #define KVM_CAP_HYPERV_SYNIC 123
    1085  #define KVM_CAP_S390_RI 124
    1086  #define KVM_CAP_SPAPR_TCE_64 125
    1087  #define KVM_CAP_ARM_PMU_V3 126
    1088  #define KVM_CAP_VCPU_ATTRIBUTES 127
    1089  #define KVM_CAP_MAX_VCPU_ID 128
    1090  #define KVM_CAP_X2APIC_API 129
    1091  #define KVM_CAP_S390_USER_INSTR0 130
    1092  #define KVM_CAP_MSI_DEVID 131
    1093  #define KVM_CAP_PPC_HTM 132
    1094  #define KVM_CAP_SPAPR_RESIZE_HPT 133
    1095  #define KVM_CAP_PPC_MMU_RADIX 134
    1096  #define KVM_CAP_PPC_MMU_HASH_V3 135
    1097  #define KVM_CAP_IMMEDIATE_EXIT 136
    1098  #define KVM_CAP_MIPS_VZ 137
    1099  #define KVM_CAP_MIPS_TE 138
    1100  #define KVM_CAP_MIPS_64BIT 139
    1101  #define KVM_CAP_S390_GS 140
    1102  #define KVM_CAP_S390_AIS 141
    1103  #define KVM_CAP_SPAPR_TCE_VFIO 142
    1104  #define KVM_CAP_X86_DISABLE_EXITS 143
    1105  #define KVM_CAP_ARM_USER_IRQ 144
    1106  #define KVM_CAP_S390_CMMA_MIGRATION 145
    1107  #define KVM_CAP_PPC_FWNMI 146
    1108  #define KVM_CAP_PPC_SMT_POSSIBLE 147
    1109  #define KVM_CAP_HYPERV_SYNIC2 148
    1110  #define KVM_CAP_HYPERV_VP_INDEX 149
    1111  #define KVM_CAP_S390_AIS_MIGRATION 150
    1112  #define KVM_CAP_PPC_GET_CPU_CHAR 151
    1113  #define KVM_CAP_S390_BPB 152
    1114  #define KVM_CAP_GET_MSR_FEATURES 153
    1115  #define KVM_CAP_HYPERV_EVENTFD 154
    1116  #define KVM_CAP_HYPERV_TLBFLUSH 155
    1117  #define KVM_CAP_S390_HPAGE_1M 156
    1118  #define KVM_CAP_NESTED_STATE 157
    1119  #define KVM_CAP_ARM_INJECT_SERROR_ESR 158
    1120  #define KVM_CAP_MSR_PLATFORM_INFO 159
    1121  #define KVM_CAP_PPC_NESTED_HV 160
    1122  #define KVM_CAP_HYPERV_SEND_IPI 161
    1123  #define KVM_CAP_COALESCED_PIO 162
    1124  #define KVM_CAP_HYPERV_ENLIGHTENED_VMCS 163
    1125  #define KVM_CAP_EXCEPTION_PAYLOAD 164
    1126  #define KVM_CAP_ARM_VM_IPA_SIZE 165
    1127  #define KVM_CAP_MANUAL_DIRTY_LOG_PROTECT 166 /* Obsolete */
    1128  #define KVM_CAP_HYPERV_CPUID 167
    1129  #define KVM_CAP_MANUAL_DIRTY_LOG_PROTECT2 168
    1130  #define KVM_CAP_PPC_IRQ_XIVE 169
    1131  #define KVM_CAP_ARM_SVE 170
    1132  #define KVM_CAP_ARM_PTRAUTH_ADDRESS 171
    1133  #define KVM_CAP_ARM_PTRAUTH_GENERIC 172
    1134  #define KVM_CAP_PMU_EVENT_FILTER 173
    1135  #define KVM_CAP_ARM_IRQ_LINE_LAYOUT_2 174
    1136  #define KVM_CAP_HYPERV_DIRECT_TLBFLUSH 175
    1137  #define KVM_CAP_PPC_GUEST_DEBUG_SSTEP 176
    1138  #define KVM_CAP_ARM_NISV_TO_USER 177
    1139  #define KVM_CAP_ARM_INJECT_EXT_DABT 178
    1140  #define KVM_CAP_S390_VCPU_RESETS 179
    1141  #define KVM_CAP_S390_PROTECTED 180
    1142  #define KVM_CAP_PPC_SECURE_GUEST 181
    1143  #define KVM_CAP_HALT_POLL 182
    1144  #define KVM_CAP_ASYNC_PF_INT 183
    1145  #define KVM_CAP_LAST_CPU 184
    1146  #define KVM_CAP_SMALLER_MAXPHYADDR 185
    1147  #define KVM_CAP_S390_DIAG318 186
    1148  #define KVM_CAP_STEAL_TIME 187
    1149  #define KVM_CAP_X86_USER_SPACE_MSR 188
    1150  #define KVM_CAP_X86_MSR_FILTER 189
    1151  #define KVM_CAP_ENFORCE_PV_FEATURE_CPUID 190
    1152  #define KVM_CAP_SYS_HYPERV_CPUID 191
    1153  #define KVM_CAP_DIRTY_LOG_RING 192
    1154  #define KVM_CAP_X86_BUS_LOCK_EXIT 193
    1155  #define KVM_CAP_PPC_DAWR1 194
    1156  #define KVM_CAP_SET_GUEST_DEBUG2 195
    1157  #define KVM_CAP_SGX_ATTRIBUTE 196
    1158  #define KVM_CAP_VM_COPY_ENC_CONTEXT_FROM 197
    1159  #define KVM_CAP_PTP_KVM 198
    1160  #define KVM_CAP_HYPERV_ENFORCE_CPUID 199
    1161  #define KVM_CAP_SREGS2 200
    1162  #define KVM_CAP_EXIT_HYPERCALL 201
    1163  #define KVM_CAP_PPC_RPT_INVALIDATE 202
    1164  #define KVM_CAP_BINARY_STATS_FD 203
    1165  #define KVM_CAP_EXIT_ON_EMULATION_FAILURE 204
    1166  #define KVM_CAP_ARM_MTE 205
    1167  #define KVM_CAP_VM_MOVE_ENC_CONTEXT_FROM 206
    1168  #define KVM_CAP_VM_GPA_BITS 207
    1169  #define KVM_CAP_XSAVE2 208
    1170  #define KVM_CAP_SYS_ATTRIBUTES 209
    1171  #define KVM_CAP_PPC_AIL_MODE_3 210
    1172  #define KVM_CAP_S390_MEM_OP_EXTENSION 211
    1173  #define KVM_CAP_PMU_CAPABILITY 212
    1174  #define KVM_CAP_DISABLE_QUIRKS2 213
    1175  #define KVM_CAP_VM_TSC_CONTROL 214
    1176  #define KVM_CAP_SYSTEM_EVENT_DATA 215
    1177  #define KVM_CAP_ARM_SYSTEM_SUSPEND 216
    1178  #define KVM_CAP_S390_PROTECTED_DUMP 217
    1179  #define KVM_CAP_X86_TRIPLE_FAULT_EVENT 218
    1180  #define KVM_CAP_X86_NOTIFY_VMEXIT 219
    1181  #define KVM_CAP_VM_DISABLE_NX_HUGE_PAGES 220
    1182  #define KVM_CAP_S390_ZPCI_OP 221
    1183  #define KVM_CAP_S390_CPU_TOPOLOGY 222
    1184  #define KVM_CAP_DIRTY_LOG_RING_ACQ_REL 223
    1185  #define KVM_CAP_S390_PROTECTED_ASYNC_DISABLE 224
    1186  #define KVM_CAP_DIRTY_LOG_RING_WITH_BITMAP 225
    1187  #define KVM_CAP_PMU_EVENT_MASKED_EVENTS 226
    1188  #define KVM_CAP_COUNTER_OFFSET 227
    1189  
    1190  #ifdef KVM_CAP_IRQ_ROUTING
    1191  
    1192  struct kvm_irq_routing_irqchip {
    1193  	__u32 irqchip;
    1194  	__u32 pin;
    1195  };
    1196  
    1197  struct kvm_irq_routing_msi {
    1198  	__u32 address_lo;
    1199  	__u32 address_hi;
    1200  	__u32 data;
    1201  	union {
    1202  		__u32 pad;
    1203  		__u32 devid;
    1204  	};
    1205  };
    1206  
    1207  struct kvm_irq_routing_s390_adapter {
    1208  	__u64 ind_addr;
    1209  	__u64 summary_addr;
    1210  	__u64 ind_offset;
    1211  	__u32 summary_offset;
    1212  	__u32 adapter_id;
    1213  };
    1214  
    1215  struct kvm_irq_routing_hv_sint {
    1216  	__u32 vcpu;
    1217  	__u32 sint;
    1218  };
    1219  
    1220  struct kvm_irq_routing_xen_evtchn {
    1221  	__u32 port;
    1222  	__u32 vcpu;
    1223  	__u32 priority;
    1224  };
    1225  
    1226  #define KVM_IRQ_ROUTING_XEN_EVTCHN_PRIO_2LEVEL ((__u32)(-1))
    1227  
    1228  /* gsi routing entry types */
    1229  #define KVM_IRQ_ROUTING_IRQCHIP 1
    1230  #define KVM_IRQ_ROUTING_MSI 2
    1231  #define KVM_IRQ_ROUTING_S390_ADAPTER 3
    1232  #define KVM_IRQ_ROUTING_HV_SINT 4
    1233  #define KVM_IRQ_ROUTING_XEN_EVTCHN 5
    1234  
    1235  struct kvm_irq_routing_entry {
    1236  	__u32 gsi;
    1237  	__u32 type;
    1238  	__u32 flags;
    1239  	__u32 pad;
    1240  	union {
    1241  		struct kvm_irq_routing_irqchip irqchip;
    1242  		struct kvm_irq_routing_msi msi;
    1243  		struct kvm_irq_routing_s390_adapter adapter;
    1244  		struct kvm_irq_routing_hv_sint hv_sint;
    1245  		struct kvm_irq_routing_xen_evtchn xen_evtchn;
    1246  		__u32 pad[8];
    1247  	} u;
    1248  };
    1249  
    1250  struct kvm_irq_routing {
    1251  	__u32 nr;
    1252  	__u32 flags;
    1253  	struct kvm_irq_routing_entry entries[];
    1254  };
    1255  
    1256  #endif
    1257  
    1258  #ifdef KVM_CAP_MCE
    1259  /* x86 MCE */
    1260  struct kvm_x86_mce {
    1261  	__u64 status;
    1262  	__u64 addr;
    1263  	__u64 misc;
    1264  	__u64 mcg_status;
    1265  	__u8 bank;
    1266  	__u8 pad1[7];
    1267  	__u64 pad2[3];
    1268  };
    1269  #endif
    1270  
    1271  #ifdef KVM_CAP_XEN_HVM
    1272  #define KVM_XEN_HVM_CONFIG_HYPERCALL_MSR	(1 << 0)
    1273  #define KVM_XEN_HVM_CONFIG_INTERCEPT_HCALL	(1 << 1)
    1274  #define KVM_XEN_HVM_CONFIG_SHARED_INFO		(1 << 2)
    1275  #define KVM_XEN_HVM_CONFIG_RUNSTATE		(1 << 3)
    1276  #define KVM_XEN_HVM_CONFIG_EVTCHN_2LEVEL	(1 << 4)
    1277  #define KVM_XEN_HVM_CONFIG_EVTCHN_SEND		(1 << 5)
    1278  #define KVM_XEN_HVM_CONFIG_RUNSTATE_UPDATE_FLAG	(1 << 6)
    1279  
    1280  struct kvm_xen_hvm_config {
    1281  	__u32 flags;
    1282  	__u32 msr;
    1283  	__u64 blob_addr_32;
    1284  	__u64 blob_addr_64;
    1285  	__u8 blob_size_32;
    1286  	__u8 blob_size_64;
    1287  	__u8 pad2[30];
    1288  };
    1289  #endif
    1290  
    1291  #define KVM_IRQFD_FLAG_DEASSIGN (1 << 0)
    1292  /*
    1293   * Available with KVM_CAP_IRQFD_RESAMPLE
    1294   *
    1295   * KVM_IRQFD_FLAG_RESAMPLE indicates resamplefd is valid and specifies
    1296   * the irqfd to operate in resampling mode for level triggered interrupt
    1297   * emulation.  See Documentation/virt/kvm/api.rst.
    1298   */
    1299  #define KVM_IRQFD_FLAG_RESAMPLE (1 << 1)
    1300  
    1301  struct kvm_irqfd {
    1302  	__u32 fd;
    1303  	__u32 gsi;
    1304  	__u32 flags;
    1305  	__u32 resamplefd;
    1306  	__u8  pad[16];
    1307  };
    1308  
    1309  /* For KVM_CAP_ADJUST_CLOCK */
    1310  
    1311  /* Do not use 1, KVM_CHECK_EXTENSION returned it before we had flags.  */
    1312  #define KVM_CLOCK_TSC_STABLE		2
    1313  #define KVM_CLOCK_REALTIME		(1 << 2)
    1314  #define KVM_CLOCK_HOST_TSC		(1 << 3)
    1315  
    1316  struct kvm_clock_data {
    1317  	__u64 clock;
    1318  	__u32 flags;
    1319  	__u32 pad0;
    1320  	__u64 realtime;
    1321  	__u64 host_tsc;
    1322  	__u32 pad[4];
    1323  };
    1324  
    1325  /* For KVM_CAP_SW_TLB */
    1326  
    1327  #define KVM_MMU_FSL_BOOKE_NOHV		0
    1328  #define KVM_MMU_FSL_BOOKE_HV		1
    1329  
    1330  struct kvm_config_tlb {
    1331  	__u64 params;
    1332  	__u64 array;
    1333  	__u32 mmu_type;
    1334  	__u32 array_len;
    1335  };
    1336  
    1337  struct kvm_dirty_tlb {
    1338  	__u64 bitmap;
    1339  	__u32 num_dirty;
    1340  };
    1341  
    1342  /* Available with KVM_CAP_ONE_REG */
    1343  
    1344  #define KVM_REG_ARCH_MASK	0xff00000000000000ULL
    1345  #define KVM_REG_GENERIC		0x0000000000000000ULL
    1346  
    1347  /*
    1348   * Architecture specific registers are to be defined in arch headers and
    1349   * ORed with the arch identifier.
    1350   */
    1351  #define KVM_REG_PPC		0x1000000000000000ULL
    1352  #define KVM_REG_X86		0x2000000000000000ULL
    1353  #define KVM_REG_IA64		0x3000000000000000ULL
    1354  #define KVM_REG_ARM		0x4000000000000000ULL
    1355  #define KVM_REG_S390		0x5000000000000000ULL
    1356  #define KVM_REG_ARM64		0x6000000000000000ULL
    1357  #define KVM_REG_MIPS		0x7000000000000000ULL
    1358  #define KVM_REG_RISCV		0x8000000000000000ULL
    1359  
    1360  #define KVM_REG_SIZE_SHIFT	52
    1361  #define KVM_REG_SIZE_MASK	0x00f0000000000000ULL
    1362  #define KVM_REG_SIZE_U8		0x0000000000000000ULL
    1363  #define KVM_REG_SIZE_U16	0x0010000000000000ULL
    1364  #define KVM_REG_SIZE_U32	0x0020000000000000ULL
    1365  #define KVM_REG_SIZE_U64	0x0030000000000000ULL
    1366  #define KVM_REG_SIZE_U128	0x0040000000000000ULL
    1367  #define KVM_REG_SIZE_U256	0x0050000000000000ULL
    1368  #define KVM_REG_SIZE_U512	0x0060000000000000ULL
    1369  #define KVM_REG_SIZE_U1024	0x0070000000000000ULL
    1370  #define KVM_REG_SIZE_U2048	0x0080000000000000ULL
    1371  
    1372  struct kvm_reg_list {
    1373  	__u64 n; /* number of regs */
    1374  	__u64 reg[];
    1375  };
    1376  
    1377  struct kvm_one_reg {
    1378  	__u64 id;
    1379  	__u64 addr;
    1380  };
    1381  
    1382  #define KVM_MSI_VALID_DEVID	(1U << 0)
    1383  struct kvm_msi {
    1384  	__u32 address_lo;
    1385  	__u32 address_hi;
    1386  	__u32 data;
    1387  	__u32 flags;
    1388  	__u32 devid;
    1389  	__u8  pad[12];
    1390  };
    1391  
    1392  struct kvm_arm_device_addr {
    1393  	__u64 id;
    1394  	__u64 addr;
    1395  };
    1396  
    1397  /*
    1398   * Device control API, available with KVM_CAP_DEVICE_CTRL
    1399   */
    1400  #define KVM_CREATE_DEVICE_TEST		1
    1401  
    1402  struct kvm_create_device {
    1403  	__u32	type;	/* in: KVM_DEV_TYPE_xxx */
    1404  	__u32	fd;	/* out: device handle */
    1405  	__u32	flags;	/* in: KVM_CREATE_DEVICE_xxx */
    1406  };
    1407  
    1408  struct kvm_device_attr {
    1409  	__u32	flags;		/* no flags currently defined */
    1410  	__u32	group;		/* device-defined */
    1411  	__u64	attr;		/* group-defined */
    1412  	__u64	addr;		/* userspace address of attr data */
    1413  };
    1414  
    1415  #define  KVM_DEV_VFIO_GROUP			1
    1416  #define   KVM_DEV_VFIO_GROUP_ADD			1
    1417  #define   KVM_DEV_VFIO_GROUP_DEL			2
    1418  #define   KVM_DEV_VFIO_GROUP_SET_SPAPR_TCE		3
    1419  
    1420  enum kvm_device_type {
    1421  	KVM_DEV_TYPE_FSL_MPIC_20	= 1,
    1422  #define KVM_DEV_TYPE_FSL_MPIC_20	KVM_DEV_TYPE_FSL_MPIC_20
    1423  	KVM_DEV_TYPE_FSL_MPIC_42,
    1424  #define KVM_DEV_TYPE_FSL_MPIC_42	KVM_DEV_TYPE_FSL_MPIC_42
    1425  	KVM_DEV_TYPE_XICS,
    1426  #define KVM_DEV_TYPE_XICS		KVM_DEV_TYPE_XICS
    1427  	KVM_DEV_TYPE_VFIO,
    1428  #define KVM_DEV_TYPE_VFIO		KVM_DEV_TYPE_VFIO
    1429  	KVM_DEV_TYPE_ARM_VGIC_V2,
    1430  #define KVM_DEV_TYPE_ARM_VGIC_V2	KVM_DEV_TYPE_ARM_VGIC_V2
    1431  	KVM_DEV_TYPE_FLIC,
    1432  #define KVM_DEV_TYPE_FLIC		KVM_DEV_TYPE_FLIC
    1433  	KVM_DEV_TYPE_ARM_VGIC_V3,
    1434  #define KVM_DEV_TYPE_ARM_VGIC_V3	KVM_DEV_TYPE_ARM_VGIC_V3
    1435  	KVM_DEV_TYPE_ARM_VGIC_ITS,
    1436  #define KVM_DEV_TYPE_ARM_VGIC_ITS	KVM_DEV_TYPE_ARM_VGIC_ITS
    1437  	KVM_DEV_TYPE_XIVE,
    1438  #define KVM_DEV_TYPE_XIVE		KVM_DEV_TYPE_XIVE
    1439  	KVM_DEV_TYPE_ARM_PV_TIME,
    1440  #define KVM_DEV_TYPE_ARM_PV_TIME	KVM_DEV_TYPE_ARM_PV_TIME
    1441  	KVM_DEV_TYPE_MAX,
    1442  };
    1443  
    1444  struct kvm_vfio_spapr_tce {
    1445  	__s32	groupfd;
    1446  	__s32	tablefd;
    1447  };
    1448  
    1449  /*
    1450   * KVM_CREATE_VCPU receives as a parameter the vcpu slot, and returns
    1451   * a vcpu fd.
    1452   */
    1453  #define KVM_CREATE_VCPU           _IO(KVMIO,   0x41)
    1454  #define KVM_GET_DIRTY_LOG         _IOW(KVMIO,  0x42, struct kvm_dirty_log)
    1455  #define KVM_SET_NR_MMU_PAGES      _IO(KVMIO,   0x44)
    1456  #define KVM_GET_NR_MMU_PAGES      _IO(KVMIO,   0x45)  /* deprecated */
    1457  #define KVM_SET_USER_MEMORY_REGION _IOW(KVMIO, 0x46, \
    1458  					struct kvm_userspace_memory_region)
    1459  #define KVM_SET_TSS_ADDR          _IO(KVMIO,   0x47)
    1460  #define KVM_SET_IDENTITY_MAP_ADDR _IOW(KVMIO,  0x48, __u64)
    1461  
    1462  /* enable ucontrol for s390 */
    1463  struct kvm_s390_ucas_mapping {
    1464  	__u64 user_addr;
    1465  	__u64 vcpu_addr;
    1466  	__u64 length;
    1467  };
    1468  #define KVM_S390_UCAS_MAP        _IOW(KVMIO, 0x50, struct kvm_s390_ucas_mapping)
    1469  #define KVM_S390_UCAS_UNMAP      _IOW(KVMIO, 0x51, struct kvm_s390_ucas_mapping)
    1470  #define KVM_S390_VCPU_FAULT	 _IOW(KVMIO, 0x52, unsigned long)
    1471  
    1472  /* Device model IOC */
    1473  #define KVM_CREATE_IRQCHIP        _IO(KVMIO,   0x60)
    1474  #define KVM_IRQ_LINE              _IOW(KVMIO,  0x61, struct kvm_irq_level)
    1475  #define KVM_GET_IRQCHIP           _IOWR(KVMIO, 0x62, struct kvm_irqchip)
    1476  #define KVM_SET_IRQCHIP           _IOR(KVMIO,  0x63, struct kvm_irqchip)
    1477  #define KVM_CREATE_PIT            _IO(KVMIO,   0x64)
    1478  #define KVM_GET_PIT               _IOWR(KVMIO, 0x65, struct kvm_pit_state)
    1479  #define KVM_SET_PIT               _IOR(KVMIO,  0x66, struct kvm_pit_state)
    1480  #define KVM_IRQ_LINE_STATUS       _IOWR(KVMIO, 0x67, struct kvm_irq_level)
    1481  #define KVM_REGISTER_COALESCED_MMIO \
    1482  			_IOW(KVMIO,  0x67, struct kvm_coalesced_mmio_zone)
    1483  #define KVM_UNREGISTER_COALESCED_MMIO \
    1484  			_IOW(KVMIO,  0x68, struct kvm_coalesced_mmio_zone)
    1485  #define KVM_ASSIGN_PCI_DEVICE     _IOR(KVMIO,  0x69, \
    1486  				       struct kvm_assigned_pci_dev)
    1487  #define KVM_SET_GSI_ROUTING       _IOW(KVMIO,  0x6a, struct kvm_irq_routing)
    1488  /* deprecated, replaced by KVM_ASSIGN_DEV_IRQ */
    1489  #define KVM_ASSIGN_IRQ            __KVM_DEPRECATED_VM_R_0x70
    1490  #define KVM_ASSIGN_DEV_IRQ        _IOW(KVMIO,  0x70, struct kvm_assigned_irq)
    1491  #define KVM_REINJECT_CONTROL      _IO(KVMIO,   0x71)
    1492  #define KVM_DEASSIGN_PCI_DEVICE   _IOW(KVMIO,  0x72, \
    1493  				       struct kvm_assigned_pci_dev)
    1494  #define KVM_ASSIGN_SET_MSIX_NR    _IOW(KVMIO,  0x73, \
    1495  				       struct kvm_assigned_msix_nr)
    1496  #define KVM_ASSIGN_SET_MSIX_ENTRY _IOW(KVMIO,  0x74, \
    1497  				       struct kvm_assigned_msix_entry)
    1498  #define KVM_DEASSIGN_DEV_IRQ      _IOW(KVMIO,  0x75, struct kvm_assigned_irq)
    1499  #define KVM_IRQFD                 _IOW(KVMIO,  0x76, struct kvm_irqfd)
    1500  #define KVM_CREATE_PIT2		  _IOW(KVMIO,  0x77, struct kvm_pit_config)
    1501  #define KVM_SET_BOOT_CPU_ID       _IO(KVMIO,   0x78)
    1502  #define KVM_IOEVENTFD             _IOW(KVMIO,  0x79, struct kvm_ioeventfd)
    1503  #define KVM_XEN_HVM_CONFIG        _IOW(KVMIO,  0x7a, struct kvm_xen_hvm_config)
    1504  #define KVM_SET_CLOCK             _IOW(KVMIO,  0x7b, struct kvm_clock_data)
    1505  #define KVM_GET_CLOCK             _IOR(KVMIO,  0x7c, struct kvm_clock_data)
    1506  /* Available with KVM_CAP_PIT_STATE2 */
    1507  #define KVM_GET_PIT2              _IOR(KVMIO,  0x9f, struct kvm_pit_state2)
    1508  #define KVM_SET_PIT2              _IOW(KVMIO,  0xa0, struct kvm_pit_state2)
    1509  /* Available with KVM_CAP_PPC_GET_PVINFO */
    1510  #define KVM_PPC_GET_PVINFO	  _IOW(KVMIO,  0xa1, struct kvm_ppc_pvinfo)
    1511  /* Available with KVM_CAP_TSC_CONTROL for a vCPU, or with
    1512  *  KVM_CAP_VM_TSC_CONTROL to set defaults for a VM */
    1513  #define KVM_SET_TSC_KHZ           _IO(KVMIO,  0xa2)
    1514  #define KVM_GET_TSC_KHZ           _IO(KVMIO,  0xa3)
    1515  /* Available with KVM_CAP_PCI_2_3 */
    1516  #define KVM_ASSIGN_SET_INTX_MASK  _IOW(KVMIO,  0xa4, \
    1517  				       struct kvm_assigned_pci_dev)
    1518  /* Available with KVM_CAP_SIGNAL_MSI */
    1519  #define KVM_SIGNAL_MSI            _IOW(KVMIO,  0xa5, struct kvm_msi)
    1520  /* Available with KVM_CAP_PPC_GET_SMMU_INFO */
    1521  #define KVM_PPC_GET_SMMU_INFO	  _IOR(KVMIO,  0xa6, struct kvm_ppc_smmu_info)
    1522  /* Available with KVM_CAP_PPC_ALLOC_HTAB */
    1523  #define KVM_PPC_ALLOCATE_HTAB	  _IOWR(KVMIO, 0xa7, __u32)
    1524  #define KVM_CREATE_SPAPR_TCE	  _IOW(KVMIO,  0xa8, struct kvm_create_spapr_tce)
    1525  #define KVM_CREATE_SPAPR_TCE_64	  _IOW(KVMIO,  0xa8, \
    1526  				       struct kvm_create_spapr_tce_64)
    1527  /* Available with KVM_CAP_RMA */
    1528  #define KVM_ALLOCATE_RMA	  _IOR(KVMIO,  0xa9, struct kvm_allocate_rma)
    1529  /* Available with KVM_CAP_PPC_HTAB_FD */
    1530  #define KVM_PPC_GET_HTAB_FD	  _IOW(KVMIO,  0xaa, struct kvm_get_htab_fd)
    1531  /* Available with KVM_CAP_ARM_SET_DEVICE_ADDR */
    1532  #define KVM_ARM_SET_DEVICE_ADDR	  _IOW(KVMIO,  0xab, struct kvm_arm_device_addr)
    1533  /* Available with KVM_CAP_PPC_RTAS */
    1534  #define KVM_PPC_RTAS_DEFINE_TOKEN _IOW(KVMIO,  0xac, struct kvm_rtas_token_args)
    1535  /* Available with KVM_CAP_SPAPR_RESIZE_HPT */
    1536  #define KVM_PPC_RESIZE_HPT_PREPARE _IOR(KVMIO, 0xad, struct kvm_ppc_resize_hpt)
    1537  #define KVM_PPC_RESIZE_HPT_COMMIT  _IOR(KVMIO, 0xae, struct kvm_ppc_resize_hpt)
    1538  /* Available with KVM_CAP_PPC_RADIX_MMU or KVM_CAP_PPC_HASH_MMU_V3 */
    1539  #define KVM_PPC_CONFIGURE_V3_MMU  _IOW(KVMIO,  0xaf, struct kvm_ppc_mmuv3_cfg)
    1540  /* Available with KVM_CAP_PPC_RADIX_MMU */
    1541  #define KVM_PPC_GET_RMMU_INFO	  _IOW(KVMIO,  0xb0, struct kvm_ppc_rmmu_info)
    1542  /* Available with KVM_CAP_PPC_GET_CPU_CHAR */
    1543  #define KVM_PPC_GET_CPU_CHAR	  _IOR(KVMIO,  0xb1, struct kvm_ppc_cpu_char)
    1544  /* Available with KVM_CAP_PMU_EVENT_FILTER */
    1545  #define KVM_SET_PMU_EVENT_FILTER  _IOW(KVMIO,  0xb2, struct kvm_pmu_event_filter)
    1546  #define KVM_PPC_SVM_OFF		  _IO(KVMIO,  0xb3)
    1547  #define KVM_ARM_MTE_COPY_TAGS	  _IOR(KVMIO,  0xb4, struct kvm_arm_copy_mte_tags)
    1548  /* Available with KVM_CAP_COUNTER_OFFSET */
    1549  #define KVM_ARM_SET_COUNTER_OFFSET _IOW(KVMIO,  0xb5, struct kvm_arm_counter_offset)
    1550  
    1551  /* ioctl for vm fd */
    1552  #define KVM_CREATE_DEVICE	  _IOWR(KVMIO,  0xe0, struct kvm_create_device)
    1553  
    1554  /* ioctls for fds returned by KVM_CREATE_DEVICE */
    1555  #define KVM_SET_DEVICE_ATTR	  _IOW(KVMIO,  0xe1, struct kvm_device_attr)
    1556  #define KVM_GET_DEVICE_ATTR	  _IOW(KVMIO,  0xe2, struct kvm_device_attr)
    1557  #define KVM_HAS_DEVICE_ATTR	  _IOW(KVMIO,  0xe3, struct kvm_device_attr)
    1558  
    1559  /*
    1560   * ioctls for vcpu fds
    1561   */
    1562  #define KVM_RUN                   _IO(KVMIO,   0x80)
    1563  #define KVM_GET_REGS              _IOR(KVMIO,  0x81, struct kvm_regs)
    1564  #define KVM_SET_REGS              _IOW(KVMIO,  0x82, struct kvm_regs)
    1565  #define KVM_GET_SREGS             _IOR(KVMIO,  0x83, struct kvm_sregs)
    1566  #define KVM_SET_SREGS             _IOW(KVMIO,  0x84, struct kvm_sregs)
    1567  #define KVM_TRANSLATE             _IOWR(KVMIO, 0x85, struct kvm_translation)
    1568  #define KVM_INTERRUPT             _IOW(KVMIO,  0x86, struct kvm_interrupt)
    1569  /* KVM_DEBUG_GUEST is no longer supported, use KVM_SET_GUEST_DEBUG instead */
    1570  #define KVM_DEBUG_GUEST           __KVM_DEPRECATED_VCPU_W_0x87
    1571  #define KVM_GET_MSRS              _IOWR(KVMIO, 0x88, struct kvm_msrs)
    1572  #define KVM_SET_MSRS              _IOW(KVMIO,  0x89, struct kvm_msrs)
    1573  #define KVM_SET_CPUID             _IOW(KVMIO,  0x8a, struct kvm_cpuid)
    1574  #define KVM_SET_SIGNAL_MASK       _IOW(KVMIO,  0x8b, struct kvm_signal_mask)
    1575  #define KVM_GET_FPU               _IOR(KVMIO,  0x8c, struct kvm_fpu)
    1576  #define KVM_SET_FPU               _IOW(KVMIO,  0x8d, struct kvm_fpu)
    1577  #define KVM_GET_LAPIC             _IOR(KVMIO,  0x8e, struct kvm_lapic_state)
    1578  #define KVM_SET_LAPIC             _IOW(KVMIO,  0x8f, struct kvm_lapic_state)
    1579  #define KVM_SET_CPUID2            _IOW(KVMIO,  0x90, struct kvm_cpuid2)
    1580  #define KVM_GET_CPUID2            _IOWR(KVMIO, 0x91, struct kvm_cpuid2)
    1581  /* Available with KVM_CAP_VAPIC */
    1582  #define KVM_TPR_ACCESS_REPORTING  _IOWR(KVMIO, 0x92, struct kvm_tpr_access_ctl)
    1583  /* Available with KVM_CAP_VAPIC */
    1584  #define KVM_SET_VAPIC_ADDR        _IOW(KVMIO,  0x93, struct kvm_vapic_addr)
    1585  /* valid for virtual machine (for floating interrupt)_and_ vcpu */
    1586  #define KVM_S390_INTERRUPT        _IOW(KVMIO,  0x94, struct kvm_s390_interrupt)
    1587  /* store status for s390 */
    1588  #define KVM_S390_STORE_STATUS_NOADDR    (-1ul)
    1589  #define KVM_S390_STORE_STATUS_PREFIXED  (-2ul)
    1590  #define KVM_S390_STORE_STATUS	  _IOW(KVMIO,  0x95, unsigned long)
    1591  /* initial ipl psw for s390 */
    1592  #define KVM_S390_SET_INITIAL_PSW  _IOW(KVMIO,  0x96, struct kvm_s390_psw)
    1593  /* initial reset for s390 */
    1594  #define KVM_S390_INITIAL_RESET    _IO(KVMIO,   0x97)
    1595  #define KVM_GET_MP_STATE          _IOR(KVMIO,  0x98, struct kvm_mp_state)
    1596  #define KVM_SET_MP_STATE          _IOW(KVMIO,  0x99, struct kvm_mp_state)
    1597  /* Available with KVM_CAP_USER_NMI */
    1598  #define KVM_NMI                   _IO(KVMIO,   0x9a)
    1599  /* Available with KVM_CAP_SET_GUEST_DEBUG */
    1600  #define KVM_SET_GUEST_DEBUG       _IOW(KVMIO,  0x9b, struct kvm_guest_debug)
    1601  /* MCE for x86 */
    1602  #define KVM_X86_SETUP_MCE         _IOW(KVMIO,  0x9c, __u64)
    1603  #define KVM_X86_GET_MCE_CAP_SUPPORTED _IOR(KVMIO,  0x9d, __u64)
    1604  #define KVM_X86_SET_MCE           _IOW(KVMIO,  0x9e, struct kvm_x86_mce)
    1605  /* Available with KVM_CAP_VCPU_EVENTS */
    1606  #define KVM_GET_VCPU_EVENTS       _IOR(KVMIO,  0x9f, struct kvm_vcpu_events)
    1607  #define KVM_SET_VCPU_EVENTS       _IOW(KVMIO,  0xa0, struct kvm_vcpu_events)
    1608  /* Available with KVM_CAP_DEBUGREGS */
    1609  #define KVM_GET_DEBUGREGS         _IOR(KVMIO,  0xa1, struct kvm_debugregs)
    1610  #define KVM_SET_DEBUGREGS         _IOW(KVMIO,  0xa2, struct kvm_debugregs)
    1611  /*
    1612   * vcpu version available with KVM_ENABLE_CAP
    1613   * vm version available with KVM_CAP_ENABLE_CAP_VM
    1614   */
    1615  #define KVM_ENABLE_CAP            _IOW(KVMIO,  0xa3, struct kvm_enable_cap)
    1616  /* Available with KVM_CAP_XSAVE */
    1617  #define KVM_GET_XSAVE		  _IOR(KVMIO,  0xa4, struct kvm_xsave)
    1618  #define KVM_SET_XSAVE		  _IOW(KVMIO,  0xa5, struct kvm_xsave)
    1619  /* Available with KVM_CAP_XCRS */
    1620  #define KVM_GET_XCRS		  _IOR(KVMIO,  0xa6, struct kvm_xcrs)
    1621  #define KVM_SET_XCRS		  _IOW(KVMIO,  0xa7, struct kvm_xcrs)
    1622  /* Available with KVM_CAP_SW_TLB */
    1623  #define KVM_DIRTY_TLB		  _IOW(KVMIO,  0xaa, struct kvm_dirty_tlb)
    1624  /* Available with KVM_CAP_ONE_REG */
    1625  #define KVM_GET_ONE_REG		  _IOW(KVMIO,  0xab, struct kvm_one_reg)
    1626  #define KVM_SET_ONE_REG		  _IOW(KVMIO,  0xac, struct kvm_one_reg)
    1627  /* VM is being stopped by host */
    1628  #define KVM_KVMCLOCK_CTRL	  _IO(KVMIO,   0xad)
    1629  #define KVM_ARM_VCPU_INIT	  _IOW(KVMIO,  0xae, struct kvm_vcpu_init)
    1630  #define KVM_ARM_PREFERRED_TARGET  _IOR(KVMIO,  0xaf, struct kvm_vcpu_init)
    1631  #define KVM_GET_REG_LIST	  _IOWR(KVMIO, 0xb0, struct kvm_reg_list)
    1632  /* Available with KVM_CAP_S390_MEM_OP */
    1633  #define KVM_S390_MEM_OP		  _IOW(KVMIO,  0xb1, struct kvm_s390_mem_op)
    1634  /* Available with KVM_CAP_S390_SKEYS */
    1635  #define KVM_S390_GET_SKEYS      _IOW(KVMIO, 0xb2, struct kvm_s390_skeys)
    1636  #define KVM_S390_SET_SKEYS      _IOW(KVMIO, 0xb3, struct kvm_s390_skeys)
    1637  /* Available with KVM_CAP_S390_INJECT_IRQ */
    1638  #define KVM_S390_IRQ              _IOW(KVMIO,  0xb4, struct kvm_s390_irq)
    1639  /* Available with KVM_CAP_S390_IRQ_STATE */
    1640  #define KVM_S390_SET_IRQ_STATE	  _IOW(KVMIO, 0xb5, struct kvm_s390_irq_state)
    1641  #define KVM_S390_GET_IRQ_STATE	  _IOW(KVMIO, 0xb6, struct kvm_s390_irq_state)
    1642  /* Available with KVM_CAP_X86_SMM */
    1643  #define KVM_SMI                   _IO(KVMIO,   0xb7)
    1644  /* Available with KVM_CAP_S390_CMMA_MIGRATION */
    1645  #define KVM_S390_GET_CMMA_BITS      _IOWR(KVMIO, 0xb8, struct kvm_s390_cmma_log)
    1646  #define KVM_S390_SET_CMMA_BITS      _IOW(KVMIO, 0xb9, struct kvm_s390_cmma_log)
    1647  /* Memory Encryption Commands */
    1648  #define KVM_MEMORY_ENCRYPT_OP      _IOWR(KVMIO, 0xba, unsigned long)
    1649  
    1650  struct kvm_enc_region {
    1651  	__u64 addr;
    1652  	__u64 size;
    1653  };
    1654  
    1655  #define KVM_MEMORY_ENCRYPT_REG_REGION    _IOR(KVMIO, 0xbb, struct kvm_enc_region)
    1656  #define KVM_MEMORY_ENCRYPT_UNREG_REGION  _IOR(KVMIO, 0xbc, struct kvm_enc_region)
    1657  
    1658  /* Available with KVM_CAP_HYPERV_EVENTFD */
    1659  #define KVM_HYPERV_EVENTFD        _IOW(KVMIO,  0xbd, struct kvm_hyperv_eventfd)
    1660  
    1661  /* Available with KVM_CAP_NESTED_STATE */
    1662  #define KVM_GET_NESTED_STATE         _IOWR(KVMIO, 0xbe, struct kvm_nested_state)
    1663  #define KVM_SET_NESTED_STATE         _IOW(KVMIO,  0xbf, struct kvm_nested_state)
    1664  
    1665  /* Available with KVM_CAP_MANUAL_DIRTY_LOG_PROTECT_2 */
    1666  #define KVM_CLEAR_DIRTY_LOG          _IOWR(KVMIO, 0xc0, struct kvm_clear_dirty_log)
    1667  
    1668  /* Available with KVM_CAP_HYPERV_CPUID (vcpu) / KVM_CAP_SYS_HYPERV_CPUID (system) */
    1669  #define KVM_GET_SUPPORTED_HV_CPUID _IOWR(KVMIO, 0xc1, struct kvm_cpuid2)
    1670  
    1671  /* Available with KVM_CAP_ARM_SVE */
    1672  #define KVM_ARM_VCPU_FINALIZE	  _IOW(KVMIO,  0xc2, int)
    1673  
    1674  /* Available with  KVM_CAP_S390_VCPU_RESETS */
    1675  #define KVM_S390_NORMAL_RESET	_IO(KVMIO,   0xc3)
    1676  #define KVM_S390_CLEAR_RESET	_IO(KVMIO,   0xc4)
    1677  
    1678  struct kvm_s390_pv_sec_parm {
    1679  	__u64 origin;
    1680  	__u64 length;
    1681  };
    1682  
    1683  struct kvm_s390_pv_unp {
    1684  	__u64 addr;
    1685  	__u64 size;
    1686  	__u64 tweak;
    1687  };
    1688  
    1689  enum pv_cmd_dmp_id {
    1690  	KVM_PV_DUMP_INIT,
    1691  	KVM_PV_DUMP_CONFIG_STOR_STATE,
    1692  	KVM_PV_DUMP_COMPLETE,
    1693  	KVM_PV_DUMP_CPU,
    1694  };
    1695  
    1696  struct kvm_s390_pv_dmp {
    1697  	__u64 subcmd;
    1698  	__u64 buff_addr;
    1699  	__u64 buff_len;
    1700  	__u64 gaddr;		/* For dump storage state */
    1701  	__u64 reserved[4];
    1702  };
    1703  
    1704  enum pv_cmd_info_id {
    1705  	KVM_PV_INFO_VM,
    1706  	KVM_PV_INFO_DUMP,
    1707  };
    1708  
    1709  struct kvm_s390_pv_info_dump {
    1710  	__u64 dump_cpu_buffer_len;
    1711  	__u64 dump_config_mem_buffer_per_1m;
    1712  	__u64 dump_config_finalize_len;
    1713  };
    1714  
    1715  struct kvm_s390_pv_info_vm {
    1716  	__u64 inst_calls_list[4];
    1717  	__u64 max_cpus;
    1718  	__u64 max_guests;
    1719  	__u64 max_guest_addr;
    1720  	__u64 feature_indication;
    1721  };
    1722  
    1723  struct kvm_s390_pv_info_header {
    1724  	__u32 id;
    1725  	__u32 len_max;
    1726  	__u32 len_written;
    1727  	__u32 reserved;
    1728  };
    1729  
    1730  struct kvm_s390_pv_info {
    1731  	struct kvm_s390_pv_info_header header;
    1732  	union {
    1733  		struct kvm_s390_pv_info_dump dump;
    1734  		struct kvm_s390_pv_info_vm vm;
    1735  	};
    1736  };
    1737  
    1738  enum pv_cmd_id {
    1739  	KVM_PV_ENABLE,
    1740  	KVM_PV_DISABLE,
    1741  	KVM_PV_SET_SEC_PARMS,
    1742  	KVM_PV_UNPACK,
    1743  	KVM_PV_VERIFY,
    1744  	KVM_PV_PREP_RESET,
    1745  	KVM_PV_UNSHARE_ALL,
    1746  	KVM_PV_INFO,
    1747  	KVM_PV_DUMP,
    1748  	KVM_PV_ASYNC_CLEANUP_PREPARE,
    1749  	KVM_PV_ASYNC_CLEANUP_PERFORM,
    1750  };
    1751  
    1752  struct kvm_pv_cmd {
    1753  	__u32 cmd;	/* Command to be executed */
    1754  	__u16 rc;	/* Ultravisor return code */
    1755  	__u16 rrc;	/* Ultravisor return reason code */
    1756  	__u64 data;	/* Data or address */
    1757  	__u32 flags;    /* flags for future extensions. Must be 0 for now */
    1758  	__u32 reserved[3];
    1759  };
    1760  
    1761  /* Available with KVM_CAP_S390_PROTECTED */
    1762  #define KVM_S390_PV_COMMAND		_IOWR(KVMIO, 0xc5, struct kvm_pv_cmd)
    1763  
    1764  /* Available with KVM_CAP_X86_MSR_FILTER */
    1765  #define KVM_X86_SET_MSR_FILTER	_IOW(KVMIO,  0xc6, struct kvm_msr_filter)
    1766  
    1767  /* Available with KVM_CAP_DIRTY_LOG_RING */
    1768  #define KVM_RESET_DIRTY_RINGS		_IO(KVMIO, 0xc7)
    1769  
    1770  /* Per-VM Xen attributes */
    1771  #define KVM_XEN_HVM_GET_ATTR	_IOWR(KVMIO, 0xc8, struct kvm_xen_hvm_attr)
    1772  #define KVM_XEN_HVM_SET_ATTR	_IOW(KVMIO,  0xc9, struct kvm_xen_hvm_attr)
    1773  
    1774  struct kvm_xen_hvm_attr {
    1775  	__u16 type;
    1776  	__u16 pad[3];
    1777  	union {
    1778  		__u8 long_mode;
    1779  		__u8 vector;
    1780  		__u8 runstate_update_flag;
    1781  		struct {
    1782  			__u64 gfn;
    1783  #define KVM_XEN_INVALID_GFN ((__u64)-1)
    1784  		} shared_info;
    1785  		struct {
    1786  			__u32 send_port;
    1787  			__u32 type; /* EVTCHNSTAT_ipi / EVTCHNSTAT_interdomain */
    1788  			__u32 flags;
    1789  #define KVM_XEN_EVTCHN_DEASSIGN		(1 << 0)
    1790  #define KVM_XEN_EVTCHN_UPDATE		(1 << 1)
    1791  #define KVM_XEN_EVTCHN_RESET		(1 << 2)
    1792  			/*
    1793  			 * Events sent by the guest are either looped back to
    1794  			 * the guest itself (potentially on a different port#)
    1795  			 * or signalled via an eventfd.
    1796  			 */
    1797  			union {
    1798  				struct {
    1799  					__u32 port;
    1800  					__u32 vcpu;
    1801  					__u32 priority;
    1802  				} port;
    1803  				struct {
    1804  					__u32 port; /* Zero for eventfd */
    1805  					__s32 fd;
    1806  				} eventfd;
    1807  				__u32 padding[4];
    1808  			} deliver;
    1809  		} evtchn;
    1810  		__u32 xen_version;
    1811  		__u64 pad[8];
    1812  	} u;
    1813  };
    1814  
    1815  
    1816  /* Available with KVM_CAP_XEN_HVM / KVM_XEN_HVM_CONFIG_SHARED_INFO */
    1817  #define KVM_XEN_ATTR_TYPE_LONG_MODE		0x0
    1818  #define KVM_XEN_ATTR_TYPE_SHARED_INFO		0x1
    1819  #define KVM_XEN_ATTR_TYPE_UPCALL_VECTOR		0x2
    1820  /* Available with KVM_CAP_XEN_HVM / KVM_XEN_HVM_CONFIG_EVTCHN_SEND */
    1821  #define KVM_XEN_ATTR_TYPE_EVTCHN		0x3
    1822  #define KVM_XEN_ATTR_TYPE_XEN_VERSION		0x4
    1823  /* Available with KVM_CAP_XEN_HVM / KVM_XEN_HVM_CONFIG_RUNSTATE_UPDATE_FLAG */
    1824  #define KVM_XEN_ATTR_TYPE_RUNSTATE_UPDATE_FLAG	0x5
    1825  
    1826  /* Per-vCPU Xen attributes */
    1827  #define KVM_XEN_VCPU_GET_ATTR	_IOWR(KVMIO, 0xca, struct kvm_xen_vcpu_attr)
    1828  #define KVM_XEN_VCPU_SET_ATTR	_IOW(KVMIO,  0xcb, struct kvm_xen_vcpu_attr)
    1829  
    1830  /* Available with KVM_CAP_XEN_HVM / KVM_XEN_HVM_CONFIG_EVTCHN_SEND */
    1831  #define KVM_XEN_HVM_EVTCHN_SEND	_IOW(KVMIO,  0xd0, struct kvm_irq_routing_xen_evtchn)
    1832  
    1833  #define KVM_GET_SREGS2             _IOR(KVMIO,  0xcc, struct kvm_sregs2)
    1834  #define KVM_SET_SREGS2             _IOW(KVMIO,  0xcd, struct kvm_sregs2)
    1835  
    1836  struct kvm_xen_vcpu_attr {
    1837  	__u16 type;
    1838  	__u16 pad[3];
    1839  	union {
    1840  		__u64 gpa;
    1841  #define KVM_XEN_INVALID_GPA ((__u64)-1)
    1842  		__u64 pad[8];
    1843  		struct {
    1844  			__u64 state;
    1845  			__u64 state_entry_time;
    1846  			__u64 time_running;
    1847  			__u64 time_runnable;
    1848  			__u64 time_blocked;
    1849  			__u64 time_offline;
    1850  		} runstate;
    1851  		__u32 vcpu_id;
    1852  		struct {
    1853  			__u32 port;
    1854  			__u32 priority;
    1855  			__u64 expires_ns;
    1856  		} timer;
    1857  		__u8 vector;
    1858  	} u;
    1859  };
    1860  
    1861  /* Available with KVM_CAP_XEN_HVM / KVM_XEN_HVM_CONFIG_SHARED_INFO */
    1862  #define KVM_XEN_VCPU_ATTR_TYPE_VCPU_INFO	0x0
    1863  #define KVM_XEN_VCPU_ATTR_TYPE_VCPU_TIME_INFO	0x1
    1864  #define KVM_XEN_VCPU_ATTR_TYPE_RUNSTATE_ADDR	0x2
    1865  #define KVM_XEN_VCPU_ATTR_TYPE_RUNSTATE_CURRENT	0x3
    1866  #define KVM_XEN_VCPU_ATTR_TYPE_RUNSTATE_DATA	0x4
    1867  #define KVM_XEN_VCPU_ATTR_TYPE_RUNSTATE_ADJUST	0x5
    1868  /* Available with KVM_CAP_XEN_HVM / KVM_XEN_HVM_CONFIG_EVTCHN_SEND */
    1869  #define KVM_XEN_VCPU_ATTR_TYPE_VCPU_ID		0x6
    1870  #define KVM_XEN_VCPU_ATTR_TYPE_TIMER		0x7
    1871  #define KVM_XEN_VCPU_ATTR_TYPE_UPCALL_VECTOR	0x8
    1872  
    1873  /* Secure Encrypted Virtualization command */
    1874  enum sev_cmd_id {
    1875  	/* Guest initialization commands */
    1876  	KVM_SEV_INIT = 0,
    1877  	KVM_SEV_ES_INIT,
    1878  	/* Guest launch commands */
    1879  	KVM_SEV_LAUNCH_START,
    1880  	KVM_SEV_LAUNCH_UPDATE_DATA,
    1881  	KVM_SEV_LAUNCH_UPDATE_VMSA,
    1882  	KVM_SEV_LAUNCH_SECRET,
    1883  	KVM_SEV_LAUNCH_MEASURE,
    1884  	KVM_SEV_LAUNCH_FINISH,
    1885  	/* Guest migration commands (outgoing) */
    1886  	KVM_SEV_SEND_START,
    1887  	KVM_SEV_SEND_UPDATE_DATA,
    1888  	KVM_SEV_SEND_UPDATE_VMSA,
    1889  	KVM_SEV_SEND_FINISH,
    1890  	/* Guest migration commands (incoming) */
    1891  	KVM_SEV_RECEIVE_START,
    1892  	KVM_SEV_RECEIVE_UPDATE_DATA,
    1893  	KVM_SEV_RECEIVE_UPDATE_VMSA,
    1894  	KVM_SEV_RECEIVE_FINISH,
    1895  	/* Guest status and debug commands */
    1896  	KVM_SEV_GUEST_STATUS,
    1897  	KVM_SEV_DBG_DECRYPT,
    1898  	KVM_SEV_DBG_ENCRYPT,
    1899  	/* Guest certificates commands */
    1900  	KVM_SEV_CERT_EXPORT,
    1901  	/* Attestation report */
    1902  	KVM_SEV_GET_ATTESTATION_REPORT,
    1903  	/* Guest Migration Extension */
    1904  	KVM_SEV_SEND_CANCEL,
    1905  
    1906  	KVM_SEV_NR_MAX,
    1907  };
    1908  
    1909  struct kvm_sev_cmd {
    1910  	__u32 id;
    1911  	__u64 data;
    1912  	__u32 error;
    1913  	__u32 sev_fd;
    1914  };
    1915  
    1916  struct kvm_sev_launch_start {
    1917  	__u32 handle;
    1918  	__u32 policy;
    1919  	__u64 dh_uaddr;
    1920  	__u32 dh_len;
    1921  	__u64 session_uaddr;
    1922  	__u32 session_len;
    1923  };
    1924  
    1925  struct kvm_sev_launch_update_data {
    1926  	__u64 uaddr;
    1927  	__u32 len;
    1928  };
    1929  
    1930  
    1931  struct kvm_sev_launch_secret {
    1932  	__u64 hdr_uaddr;
    1933  	__u32 hdr_len;
    1934  	__u64 guest_uaddr;
    1935  	__u32 guest_len;
    1936  	__u64 trans_uaddr;
    1937  	__u32 trans_len;
    1938  };
    1939  
    1940  struct kvm_sev_launch_measure {
    1941  	__u64 uaddr;
    1942  	__u32 len;
    1943  };
    1944  
    1945  struct kvm_sev_guest_status {
    1946  	__u32 handle;
    1947  	__u32 policy;
    1948  	__u32 state;
    1949  };
    1950  
    1951  struct kvm_sev_dbg {
    1952  	__u64 src_uaddr;
    1953  	__u64 dst_uaddr;
    1954  	__u32 len;
    1955  };
    1956  
    1957  struct kvm_sev_attestation_report {
    1958  	__u8 mnonce[16];
    1959  	__u64 uaddr;
    1960  	__u32 len;
    1961  };
    1962  
    1963  struct kvm_sev_send_start {
    1964  	__u32 policy;
    1965  	__u64 pdh_cert_uaddr;
    1966  	__u32 pdh_cert_len;
    1967  	__u64 plat_certs_uaddr;
    1968  	__u32 plat_certs_len;
    1969  	__u64 amd_certs_uaddr;
    1970  	__u32 amd_certs_len;
    1971  	__u64 session_uaddr;
    1972  	__u32 session_len;
    1973  };
    1974  
    1975  struct kvm_sev_send_update_data {
    1976  	__u64 hdr_uaddr;
    1977  	__u32 hdr_len;
    1978  	__u64 guest_uaddr;
    1979  	__u32 guest_len;
    1980  	__u64 trans_uaddr;
    1981  	__u32 trans_len;
    1982  };
    1983  
    1984  struct kvm_sev_receive_start {
    1985  	__u32 handle;
    1986  	__u32 policy;
    1987  	__u64 pdh_uaddr;
    1988  	__u32 pdh_len;
    1989  	__u64 session_uaddr;
    1990  	__u32 session_len;
    1991  };
    1992  
    1993  struct kvm_sev_receive_update_data {
    1994  	__u64 hdr_uaddr;
    1995  	__u32 hdr_len;
    1996  	__u64 guest_uaddr;
    1997  	__u32 guest_len;
    1998  	__u64 trans_uaddr;
    1999  	__u32 trans_len;
    2000  };
    2001  
    2002  #define KVM_DEV_ASSIGN_ENABLE_IOMMU	(1 << 0)
    2003  #define KVM_DEV_ASSIGN_PCI_2_3		(1 << 1)
    2004  #define KVM_DEV_ASSIGN_MASK_INTX	(1 << 2)
    2005  
    2006  struct kvm_assigned_pci_dev {
    2007  	__u32 assigned_dev_id;
    2008  	__u32 busnr;
    2009  	__u32 devfn;
    2010  	__u32 flags;
    2011  	__u32 segnr;
    2012  	union {
    2013  		__u32 reserved[11];
    2014  	};
    2015  };
    2016  
    2017  #define KVM_DEV_IRQ_HOST_INTX    (1 << 0)
    2018  #define KVM_DEV_IRQ_HOST_MSI     (1 << 1)
    2019  #define KVM_DEV_IRQ_HOST_MSIX    (1 << 2)
    2020  
    2021  #define KVM_DEV_IRQ_GUEST_INTX   (1 << 8)
    2022  #define KVM_DEV_IRQ_GUEST_MSI    (1 << 9)
    2023  #define KVM_DEV_IRQ_GUEST_MSIX   (1 << 10)
    2024  
    2025  #define KVM_DEV_IRQ_HOST_MASK	 0x00ff
    2026  #define KVM_DEV_IRQ_GUEST_MASK   0xff00
    2027  
    2028  struct kvm_assigned_irq {
    2029  	__u32 assigned_dev_id;
    2030  	__u32 host_irq; /* ignored (legacy field) */
    2031  	__u32 guest_irq;
    2032  	__u32 flags;
    2033  	union {
    2034  		__u32 reserved[12];
    2035  	};
    2036  };
    2037  
    2038  struct kvm_assigned_msix_nr {
    2039  	__u32 assigned_dev_id;
    2040  	__u16 entry_nr;
    2041  	__u16 padding;
    2042  };
    2043  
    2044  #define KVM_MAX_MSIX_PER_DEV		256
    2045  struct kvm_assigned_msix_entry {
    2046  	__u32 assigned_dev_id;
    2047  	__u32 gsi;
    2048  	__u16 entry; /* The index of entry in the MSI-X table */
    2049  	__u16 padding[3];
    2050  };
    2051  
    2052  #define KVM_X2APIC_API_USE_32BIT_IDS            (1ULL << 0)
    2053  #define KVM_X2APIC_API_DISABLE_BROADCAST_QUIRK  (1ULL << 1)
    2054  
    2055  /* Available with KVM_CAP_ARM_USER_IRQ */
    2056  
    2057  /* Bits for run->s.regs.device_irq_level */
    2058  #define KVM_ARM_DEV_EL1_VTIMER		(1 << 0)
    2059  #define KVM_ARM_DEV_EL1_PTIMER		(1 << 1)
    2060  #define KVM_ARM_DEV_PMU			(1 << 2)
    2061  
    2062  struct kvm_hyperv_eventfd {
    2063  	__u32 conn_id;
    2064  	__s32 fd;
    2065  	__u32 flags;
    2066  	__u32 padding[3];
    2067  };
    2068  
    2069  #define KVM_HYPERV_CONN_ID_MASK		0x00ffffff
    2070  #define KVM_HYPERV_EVENTFD_DEASSIGN	(1 << 0)
    2071  
    2072  #define KVM_DIRTY_LOG_MANUAL_PROTECT_ENABLE    (1 << 0)
    2073  #define KVM_DIRTY_LOG_INITIALLY_SET            (1 << 1)
    2074  
    2075  /*
    2076   * Arch needs to define the macro after implementing the dirty ring
    2077   * feature.  KVM_DIRTY_LOG_PAGE_OFFSET should be defined as the
    2078   * starting page offset of the dirty ring structures.
    2079   */
    2080  #ifndef KVM_DIRTY_LOG_PAGE_OFFSET
    2081  #define KVM_DIRTY_LOG_PAGE_OFFSET 0
    2082  #endif
    2083  
    2084  /*
    2085   * KVM dirty GFN flags, defined as:
    2086   *
    2087   * |---------------+---------------+--------------|
    2088   * | bit 1 (reset) | bit 0 (dirty) | Status       |
    2089   * |---------------+---------------+--------------|
    2090   * |             0 |             0 | Invalid GFN  |
    2091   * |             0 |             1 | Dirty GFN    |
    2092   * |             1 |             X | GFN to reset |
    2093   * |---------------+---------------+--------------|
    2094   *
    2095   * Lifecycle of a dirty GFN goes like:
    2096   *
    2097   *      dirtied         harvested        reset
    2098   * 00 -----------> 01 -------------> 1X -------+
    2099   *  ^                                          |
    2100   *  |                                          |
    2101   *  +------------------------------------------+
    2102   *
    2103   * The userspace program is only responsible for the 01->1X state
    2104   * conversion after harvesting an entry.  Also, it must not skip any
    2105   * dirty bits, so that dirty bits are always harvested in sequence.
    2106   */
    2107  #define KVM_DIRTY_GFN_F_DIRTY           _BITUL(0)
    2108  #define KVM_DIRTY_GFN_F_RESET           _BITUL(1)
    2109  #define KVM_DIRTY_GFN_F_MASK            0x3
    2110  
    2111  /*
    2112   * KVM dirty rings should be mapped at KVM_DIRTY_LOG_PAGE_OFFSET of
    2113   * per-vcpu mmaped regions as an array of struct kvm_dirty_gfn.  The
    2114   * size of the gfn buffer is decided by the first argument when
    2115   * enabling KVM_CAP_DIRTY_LOG_RING.
    2116   */
    2117  struct kvm_dirty_gfn {
    2118  	__u32 flags;
    2119  	__u32 slot;
    2120  	__u64 offset;
    2121  };
    2122  
    2123  #define KVM_BUS_LOCK_DETECTION_OFF             (1 << 0)
    2124  #define KVM_BUS_LOCK_DETECTION_EXIT            (1 << 1)
    2125  
    2126  #define KVM_PMU_CAP_DISABLE                    (1 << 0)
    2127  
    2128  /**
    2129   * struct kvm_stats_header - Header of per vm/vcpu binary statistics data.
    2130   * @flags: Some extra information for header, always 0 for now.
    2131   * @name_size: The size in bytes of the memory which contains statistics
    2132   *             name string including trailing '\0'. The memory is allocated
    2133   *             at the send of statistics descriptor.
    2134   * @num_desc: The number of statistics the vm or vcpu has.
    2135   * @id_offset: The offset of the vm/vcpu stats' id string in the file pointed
    2136   *             by vm/vcpu stats fd.
    2137   * @desc_offset: The offset of the vm/vcpu stats' descriptor block in the file
    2138   *               pointd by vm/vcpu stats fd.
    2139   * @data_offset: The offset of the vm/vcpu stats' data block in the file
    2140   *               pointed by vm/vcpu stats fd.
    2141   *
    2142   * This is the header userspace needs to read from stats fd before any other
    2143   * readings. It is used by userspace to discover all the information about the
    2144   * vm/vcpu's binary statistics.
    2145   * Userspace reads this header from the start of the vm/vcpu's stats fd.
    2146   */
    2147  struct kvm_stats_header {
    2148  	__u32 flags;
    2149  	__u32 name_size;
    2150  	__u32 num_desc;
    2151  	__u32 id_offset;
    2152  	__u32 desc_offset;
    2153  	__u32 data_offset;
    2154  };
    2155  
    2156  #define KVM_STATS_TYPE_SHIFT		0
    2157  #define KVM_STATS_TYPE_MASK		(0xF << KVM_STATS_TYPE_SHIFT)
    2158  #define KVM_STATS_TYPE_CUMULATIVE	(0x0 << KVM_STATS_TYPE_SHIFT)
    2159  #define KVM_STATS_TYPE_INSTANT		(0x1 << KVM_STATS_TYPE_SHIFT)
    2160  #define KVM_STATS_TYPE_PEAK		(0x2 << KVM_STATS_TYPE_SHIFT)
    2161  #define KVM_STATS_TYPE_LINEAR_HIST	(0x3 << KVM_STATS_TYPE_SHIFT)
    2162  #define KVM_STATS_TYPE_LOG_HIST		(0x4 << KVM_STATS_TYPE_SHIFT)
    2163  #define KVM_STATS_TYPE_MAX		KVM_STATS_TYPE_LOG_HIST
    2164  
    2165  #define KVM_STATS_UNIT_SHIFT		4
    2166  #define KVM_STATS_UNIT_MASK		(0xF << KVM_STATS_UNIT_SHIFT)
    2167  #define KVM_STATS_UNIT_NONE		(0x0 << KVM_STATS_UNIT_SHIFT)
    2168  #define KVM_STATS_UNIT_BYTES		(0x1 << KVM_STATS_UNIT_SHIFT)
    2169  #define KVM_STATS_UNIT_SECONDS		(0x2 << KVM_STATS_UNIT_SHIFT)
    2170  #define KVM_STATS_UNIT_CYCLES		(0x3 << KVM_STATS_UNIT_SHIFT)
    2171  #define KVM_STATS_UNIT_BOOLEAN		(0x4 << KVM_STATS_UNIT_SHIFT)
    2172  #define KVM_STATS_UNIT_MAX		KVM_STATS_UNIT_BOOLEAN
    2173  
    2174  #define KVM_STATS_BASE_SHIFT		8
    2175  #define KVM_STATS_BASE_MASK		(0xF << KVM_STATS_BASE_SHIFT)
    2176  #define KVM_STATS_BASE_POW10		(0x0 << KVM_STATS_BASE_SHIFT)
    2177  #define KVM_STATS_BASE_POW2		(0x1 << KVM_STATS_BASE_SHIFT)
    2178  #define KVM_STATS_BASE_MAX		KVM_STATS_BASE_POW2
    2179  
    2180  /**
    2181   * struct kvm_stats_desc - Descriptor of a KVM statistics.
    2182   * @flags: Annotations of the stats, like type, unit, etc.
    2183   * @exponent: Used together with @flags to determine the unit.
    2184   * @size: The number of data items for this stats.
    2185   *        Every data item is of type __u64.
    2186   * @offset: The offset of the stats to the start of stat structure in
    2187   *          structure kvm or kvm_vcpu.
    2188   * @bucket_size: A parameter value used for histogram stats. It is only used
    2189   *		for linear histogram stats, specifying the size of the bucket;
    2190   * @name: The name string for the stats. Its size is indicated by the
    2191   *        &kvm_stats_header->name_size.
    2192   */
    2193  struct kvm_stats_desc {
    2194  	__u32 flags;
    2195  	__s16 exponent;
    2196  	__u16 size;
    2197  	__u32 offset;
    2198  	__u32 bucket_size;
    2199  	char name[];
    2200  };
    2201  
    2202  #define KVM_GET_STATS_FD  _IO(KVMIO,  0xce)
    2203  
    2204  /* Available with KVM_CAP_XSAVE2 */
    2205  #define KVM_GET_XSAVE2		  _IOR(KVMIO,  0xcf, struct kvm_xsave)
    2206  
    2207  /* Available with KVM_CAP_S390_PROTECTED_DUMP */
    2208  #define KVM_S390_PV_CPU_COMMAND	_IOWR(KVMIO, 0xd0, struct kvm_pv_cmd)
    2209  
    2210  /* Available with KVM_CAP_X86_NOTIFY_VMEXIT */
    2211  #define KVM_X86_NOTIFY_VMEXIT_ENABLED		(1ULL << 0)
    2212  #define KVM_X86_NOTIFY_VMEXIT_USER		(1ULL << 1)
    2213  
    2214  /* Available with KVM_CAP_S390_ZPCI_OP */
    2215  #define KVM_S390_ZPCI_OP         _IOW(KVMIO,  0xd1, struct kvm_s390_zpci_op)
    2216  
    2217  struct kvm_s390_zpci_op {
    2218  	/* in */
    2219  	__u32 fh;               /* target device */
    2220  	__u8  op;               /* operation to perform */
    2221  	__u8  pad[3];
    2222  	union {
    2223  		/* for KVM_S390_ZPCIOP_REG_AEN */
    2224  		struct {
    2225  			__u64 ibv;      /* Guest addr of interrupt bit vector */
    2226  			__u64 sb;       /* Guest addr of summary bit */
    2227  			__u32 flags;
    2228  			__u32 noi;      /* Number of interrupts */
    2229  			__u8 isc;       /* Guest interrupt subclass */
    2230  			__u8 sbo;       /* Offset of guest summary bit vector */
    2231  			__u16 pad;
    2232  		} reg_aen;
    2233  		__u64 reserved[8];
    2234  	} u;
    2235  };
    2236  
    2237  /* types for kvm_s390_zpci_op->op */
    2238  #define KVM_S390_ZPCIOP_REG_AEN                0
    2239  #define KVM_S390_ZPCIOP_DEREG_AEN      1
    2240  
    2241  /* flags for kvm_s390_zpci_op->u.reg_aen.flags */
    2242  #define KVM_S390_ZPCIOP_REGAEN_HOST    (1 << 0)
    2243  
    2244  #endif /* __LINUX_KVM_H */