On 04/27/2015 10:55 AM, Cornelia Huck wrote: > This updates linux-headers against master 4.1-rc1 (commit > b787f68c36d49bb1d9236f403813641efa74a031). > > Signed-off-by: Cornelia Huck <cornelia.h...@de.ibm.com> > --- > include/standard-headers/linux/virtio_balloon.h | 28 +++- > include/standard-headers/linux/virtio_blk.h | 8 +- > include/standard-headers/linux/virtio_ids.h | 1 + > include/standard-headers/linux/virtio_input.h | 76 +++++++++++ Hi Cornelia,
Comparing my new update against 4.1rc1 and yours, I do not have the virtio input header. Did I miss something? Best Regards Eric > linux-headers/asm-arm/kvm.h | 9 +- > linux-headers/asm-arm64/kvm.h | 9 +- > linux-headers/asm-mips/kvm.h | 164 > +++++++++++++++--------- > linux-headers/asm-s390/kvm.h | 4 + > linux-headers/asm-x86/hyperv.h | 2 + > linux-headers/linux/kvm.h | 66 +++++++++- > linux-headers/linux/vfio.h | 2 + > 11 files changed, 299 insertions(+), 70 deletions(-) > create mode 100644 include/standard-headers/linux/virtio_input.h > > diff --git a/include/standard-headers/linux/virtio_balloon.h > b/include/standard-headers/linux/virtio_balloon.h > index 799376d..88ada1d 100644 > --- a/include/standard-headers/linux/virtio_balloon.h > +++ b/include/standard-headers/linux/virtio_balloon.h > @@ -25,6 +25,7 @@ > * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY > * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF > * SUCH DAMAGE. */ > +#include "standard-headers/linux/types.h" > #include "standard-headers/linux/virtio_ids.h" > #include "standard-headers/linux/virtio_config.h" > > @@ -51,9 +52,32 @@ struct virtio_balloon_config { > #define VIRTIO_BALLOON_S_MEMTOT 5 /* Total amount of memory */ > #define VIRTIO_BALLOON_S_NR 6 > > +/* > + * Memory statistics structure. > + * Driver fills an array of these structures and passes to device. > + * > + * NOTE: fields are laid out in a way that would make compiler add padding > + * between and after fields, so we have to use compiler-specific attributes > to > + * pack it, to disable this padding. This also often causes compiler to > + * generate suboptimal code. > + * > + * We maintain this statistics structure format for backwards compatibility, > + * but don't follow this example. > + * > + * If implementing a similar structure, do something like the below instead: > + * struct virtio_balloon_stat { > + * __virtio16 tag; > + * uint8_t reserved[6]; > + * __virtio64 val; > + * }; > + * > + * In other words, add explicit reserved fields to align field and > + * structure boundaries at field size, avoiding compiler padding > + * without the packed attribute. > + */ > struct virtio_balloon_stat { > - uint16_t tag; > - uint64_t val; > + __virtio16 tag; > + __virtio64 val; > } QEMU_PACKED; > > #endif /* _LINUX_VIRTIO_BALLOON_H */ > diff --git a/include/standard-headers/linux/virtio_blk.h > b/include/standard-headers/linux/virtio_blk.h > index 12016b4..cd601f4 100644 > --- a/include/standard-headers/linux/virtio_blk.h > +++ b/include/standard-headers/linux/virtio_blk.h > @@ -58,7 +58,7 @@ struct virtio_blk_config { > uint32_t size_max; > /* The maximum number of segments (if VIRTIO_BLK_F_SEG_MAX) */ > uint32_t seg_max; > - /* geometry the device (if VIRTIO_BLK_F_GEOMETRY) */ > + /* geometry of the device (if VIRTIO_BLK_F_GEOMETRY) */ > struct virtio_blk_geometry { > uint16_t cylinders; > uint8_t heads; > @@ -117,7 +117,11 @@ struct virtio_blk_config { > #define VIRTIO_BLK_T_BARRIER 0x80000000 > #endif /* !VIRTIO_BLK_NO_LEGACY */ > > -/* This is the first element of the read scatter-gather list. */ > +/* > + * This comes first in the read scatter-gather list. > + * For legacy virtio, if VIRTIO_F_ANY_LAYOUT is not negotiated, > + * this is the first element of the read scatter-gather list. > + */ > struct virtio_blk_outhdr { > /* VIRTIO_BLK_T* */ > __virtio32 type; > diff --git a/include/standard-headers/linux/virtio_ids.h > b/include/standard-headers/linux/virtio_ids.h > index 284fc3a..5f60aa4 100644 > --- a/include/standard-headers/linux/virtio_ids.h > +++ b/include/standard-headers/linux/virtio_ids.h > @@ -39,5 +39,6 @@ > #define VIRTIO_ID_9P 9 /* 9p virtio console */ > #define VIRTIO_ID_RPROC_SERIAL 11 /* virtio remoteproc serial link */ > #define VIRTIO_ID_CAIF 12 /* Virtio caif */ > +#define VIRTIO_ID_INPUT 18 /* virtio input */ > > #endif /* _LINUX_VIRTIO_IDS_H */ > diff --git a/include/standard-headers/linux/virtio_input.h > b/include/standard-headers/linux/virtio_input.h > new file mode 100644 > index 0000000..a98a797 > --- /dev/null > +++ b/include/standard-headers/linux/virtio_input.h > @@ -0,0 +1,76 @@ > +#ifndef _LINUX_VIRTIO_INPUT_H > +#define _LINUX_VIRTIO_INPUT_H > +/* This header is BSD licensed so anyone can use the definitions to implement > + * compatible drivers/servers. > + * > + * Redistribution and use in source and binary forms, with or without > + * modification, are permitted provided that the following conditions > + * are met: > + * 1. Redistributions of source code must retain the above copyright > + * notice, this list of conditions and the following disclaimer. > + * 2. Redistributions in binary form must reproduce the above copyright > + * notice, this list of conditions and the following disclaimer in the > + * documentation and/or other materials provided with the distribution. > + * 3. Neither the name of IBM nor the names of its contributors > + * may be used to endorse or promote products derived from this software > + * without specific prior written permission. > + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS > + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT > + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS > + * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL IBM OR > + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, > + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT > + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF > + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND > + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, > + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT > + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF > + * SUCH DAMAGE. */ > + > +#include "standard-headers/linux/types.h" > + > +enum virtio_input_config_select { > + VIRTIO_INPUT_CFG_UNSET = 0x00, > + VIRTIO_INPUT_CFG_ID_NAME = 0x01, > + VIRTIO_INPUT_CFG_ID_SERIAL = 0x02, > + VIRTIO_INPUT_CFG_ID_DEVIDS = 0x03, > + VIRTIO_INPUT_CFG_PROP_BITS = 0x10, > + VIRTIO_INPUT_CFG_EV_BITS = 0x11, > + VIRTIO_INPUT_CFG_ABS_INFO = 0x12, > +}; > + > +struct virtio_input_absinfo { > + uint32_t min; > + uint32_t max; > + uint32_t fuzz; > + uint32_t flat; > + uint32_t res; > +}; > + > +struct virtio_input_devids { > + uint16_t bustype; > + uint16_t vendor; > + uint16_t product; > + uint16_t version; > +}; > + > +struct virtio_input_config { > + uint8_t select; > + uint8_t subsel; > + uint8_t size; > + uint8_t reserved[5]; > + union { > + char string[128]; > + uint8_t bitmap[128]; > + struct virtio_input_absinfo abs; > + struct virtio_input_devids ids; > + } u; > +}; > + > +struct virtio_input_event { > + uint16_t type; > + uint16_t code; > + uint32_t value; > +}; > + > +#endif /* _LINUX_VIRTIO_INPUT_H */ > diff --git a/linux-headers/asm-arm/kvm.h b/linux-headers/asm-arm/kvm.h > index 0db25bc..c98e4dc 100644 > --- a/linux-headers/asm-arm/kvm.h > +++ b/linux-headers/asm-arm/kvm.h > @@ -195,9 +195,16 @@ struct kvm_arch_memory_slot { > #define KVM_ARM_IRQ_CPU_IRQ 0 > #define KVM_ARM_IRQ_CPU_FIQ 1 > > -/* Highest supported SPI, from VGIC_NR_IRQS */ > +/* > + * This used to hold the highest supported SPI, but it is now obsolete > + * and only here to provide source code level compatibility with older > + * userland. The highest SPI number can be set via > KVM_DEV_ARM_VGIC_GRP_NR_IRQS. > + */ > #define KVM_ARM_IRQ_GIC_MAX 127 > > +/* One single KVM irqchip, ie. the VGIC */ > +#define KVM_NR_IRQCHIPS 1 > + > /* PSCI interface */ > #define KVM_PSCI_FN_BASE 0x95c1ba5e > #define KVM_PSCI_FN(n) (KVM_PSCI_FN_BASE + (n)) > diff --git a/linux-headers/asm-arm64/kvm.h b/linux-headers/asm-arm64/kvm.h > index 3ef77a4..c8abf25 100644 > --- a/linux-headers/asm-arm64/kvm.h > +++ b/linux-headers/asm-arm64/kvm.h > @@ -188,9 +188,16 @@ struct kvm_arch_memory_slot { > #define KVM_ARM_IRQ_CPU_IRQ 0 > #define KVM_ARM_IRQ_CPU_FIQ 1 > > -/* Highest supported SPI, from VGIC_NR_IRQS */ > +/* > + * This used to hold the highest supported SPI, but it is now obsolete > + * and only here to provide source code level compatibility with older > + * userland. The highest SPI number can be set via > KVM_DEV_ARM_VGIC_GRP_NR_IRQS. > + */ > #define KVM_ARM_IRQ_GIC_MAX 127 > > +/* One single KVM irqchip, ie. the VGIC */ > +#define KVM_NR_IRQCHIPS 1 > + > /* PSCI interface */ > #define KVM_PSCI_FN_BASE 0x95c1ba5e > #define KVM_PSCI_FN(n) (KVM_PSCI_FN_BASE + (n)) > diff --git a/linux-headers/asm-mips/kvm.h b/linux-headers/asm-mips/kvm.h > index 2c04b6d..6985eb5 100644 > --- a/linux-headers/asm-mips/kvm.h > +++ b/linux-headers/asm-mips/kvm.h > @@ -36,77 +36,85 @@ struct kvm_regs { > > /* > * for KVM_GET_FPU and KVM_SET_FPU > - * > - * If Status[FR] is zero (32-bit FPU), the upper 32-bits of the FPRs > - * are zero filled. > */ > struct kvm_fpu { > - __u64 fpr[32]; > - __u32 fir; > - __u32 fccr; > - __u32 fexr; > - __u32 fenr; > - __u32 fcsr; > - __u32 pad; > }; > > > /* > - * For MIPS, we use KVM_SET_ONE_REG and KVM_GET_ONE_REG to access CP0 > + * For MIPS, we use KVM_SET_ONE_REG and KVM_GET_ONE_REG to access various > * registers. The id field is broken down as follows: > * > - * bits[2..0] - Register 'sel' index. > - * bits[7..3] - Register 'rd' index. > - * bits[15..8] - Must be zero. > - * bits[31..16] - 1 -> CP0 registers. > - * bits[51..32] - Must be zero. > * bits[63..52] - As per linux/kvm.h > + * bits[51..32] - Must be zero. > + * bits[31..16] - Register set. > + * > + * Register set = 0: GP registers from kvm_regs (see definitions below). > + * > + * Register set = 1: CP0 registers. > + * bits[15..8] - Must be zero. > + * bits[7..3] - Register 'rd' index. > + * bits[2..0] - Register 'sel' index. > + * > + * Register set = 2: KVM specific registers (see definitions below). > + * > + * Register set = 3: FPU / MSA registers (see definitions below). > * > * Other sets registers may be added in the future. Each set would > * have its own identifier in bits[31..16]. > - * > - * The registers defined in struct kvm_regs are also accessible, the > - * id values for these are below. > */ > > -#define KVM_REG_MIPS_R0 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 0) > -#define KVM_REG_MIPS_R1 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 1) > -#define KVM_REG_MIPS_R2 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 2) > -#define KVM_REG_MIPS_R3 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 3) > -#define KVM_REG_MIPS_R4 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 4) > -#define KVM_REG_MIPS_R5 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 5) > -#define KVM_REG_MIPS_R6 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 6) > -#define KVM_REG_MIPS_R7 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 7) > -#define KVM_REG_MIPS_R8 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 8) > -#define KVM_REG_MIPS_R9 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 9) > -#define KVM_REG_MIPS_R10 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 10) > -#define KVM_REG_MIPS_R11 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 11) > -#define KVM_REG_MIPS_R12 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 12) > -#define KVM_REG_MIPS_R13 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 13) > -#define KVM_REG_MIPS_R14 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 14) > -#define KVM_REG_MIPS_R15 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 15) > -#define KVM_REG_MIPS_R16 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 16) > -#define KVM_REG_MIPS_R17 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 17) > -#define KVM_REG_MIPS_R18 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 18) > -#define KVM_REG_MIPS_R19 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 19) > -#define KVM_REG_MIPS_R20 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 20) > -#define KVM_REG_MIPS_R21 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 21) > -#define KVM_REG_MIPS_R22 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 22) > -#define KVM_REG_MIPS_R23 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 23) > -#define KVM_REG_MIPS_R24 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 24) > -#define KVM_REG_MIPS_R25 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 25) > -#define KVM_REG_MIPS_R26 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 26) > -#define KVM_REG_MIPS_R27 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 27) > -#define KVM_REG_MIPS_R28 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 28) > -#define KVM_REG_MIPS_R29 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 29) > -#define KVM_REG_MIPS_R30 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 30) > -#define KVM_REG_MIPS_R31 (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 31) > - > -#define KVM_REG_MIPS_HI (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 32) > -#define KVM_REG_MIPS_LO (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 33) > -#define KVM_REG_MIPS_PC (KVM_REG_MIPS | KVM_REG_SIZE_U64 | 34) > - > -/* KVM specific control registers */ > +#define KVM_REG_MIPS_GP (KVM_REG_MIPS | 0x0000000000000000ULL) > +#define KVM_REG_MIPS_CP0 (KVM_REG_MIPS | 0x0000000000010000ULL) > +#define KVM_REG_MIPS_KVM (KVM_REG_MIPS | 0x0000000000020000ULL) > +#define KVM_REG_MIPS_FPU (KVM_REG_MIPS | 0x0000000000030000ULL) > + > + > +/* > + * KVM_REG_MIPS_GP - General purpose registers from kvm_regs. > + */ > + > +#define KVM_REG_MIPS_R0 (KVM_REG_MIPS_GP | KVM_REG_SIZE_U64 | > 0) > +#define KVM_REG_MIPS_R1 (KVM_REG_MIPS_GP | KVM_REG_SIZE_U64 | > 1) > +#define KVM_REG_MIPS_R2 (KVM_REG_MIPS_GP | KVM_REG_SIZE_U64 | > 2) > +#define KVM_REG_MIPS_R3 (KVM_REG_MIPS_GP | KVM_REG_SIZE_U64 | > 3) > +#define KVM_REG_MIPS_R4 (KVM_REG_MIPS_GP | KVM_REG_SIZE_U64 | > 4) > +#define KVM_REG_MIPS_R5 (KVM_REG_MIPS_GP | KVM_REG_SIZE_U64 | > 5) > +#define KVM_REG_MIPS_R6 (KVM_REG_MIPS_GP | KVM_REG_SIZE_U64 | > 6) > +#define KVM_REG_MIPS_R7 (KVM_REG_MIPS_GP | KVM_REG_SIZE_U64 | > 7) > +#define KVM_REG_MIPS_R8 (KVM_REG_MIPS_GP | KVM_REG_SIZE_U64 | > 8) > +#define KVM_REG_MIPS_R9 (KVM_REG_MIPS_GP | KVM_REG_SIZE_U64 | > 9) > +#define KVM_REG_MIPS_R10 (KVM_REG_MIPS_GP | KVM_REG_SIZE_U64 | 10) > +#define KVM_REG_MIPS_R11 (KVM_REG_MIPS_GP | KVM_REG_SIZE_U64 | 11) > +#define KVM_REG_MIPS_R12 (KVM_REG_MIPS_GP | KVM_REG_SIZE_U64 | 12) > +#define KVM_REG_MIPS_R13 (KVM_REG_MIPS_GP | KVM_REG_SIZE_U64 | 13) > +#define KVM_REG_MIPS_R14 (KVM_REG_MIPS_GP | KVM_REG_SIZE_U64 | 14) > +#define KVM_REG_MIPS_R15 (KVM_REG_MIPS_GP | KVM_REG_SIZE_U64 | 15) > +#define KVM_REG_MIPS_R16 (KVM_REG_MIPS_GP | KVM_REG_SIZE_U64 | 16) > +#define KVM_REG_MIPS_R17 (KVM_REG_MIPS_GP | KVM_REG_SIZE_U64 | 17) > +#define KVM_REG_MIPS_R18 (KVM_REG_MIPS_GP | KVM_REG_SIZE_U64 | 18) > +#define KVM_REG_MIPS_R19 (KVM_REG_MIPS_GP | KVM_REG_SIZE_U64 | 19) > +#define KVM_REG_MIPS_R20 (KVM_REG_MIPS_GP | KVM_REG_SIZE_U64 | 20) > +#define KVM_REG_MIPS_R21 (KVM_REG_MIPS_GP | KVM_REG_SIZE_U64 | 21) > +#define KVM_REG_MIPS_R22 (KVM_REG_MIPS_GP | KVM_REG_SIZE_U64 | 22) > +#define KVM_REG_MIPS_R23 (KVM_REG_MIPS_GP | KVM_REG_SIZE_U64 | 23) > +#define KVM_REG_MIPS_R24 (KVM_REG_MIPS_GP | KVM_REG_SIZE_U64 | 24) > +#define KVM_REG_MIPS_R25 (KVM_REG_MIPS_GP | KVM_REG_SIZE_U64 | 25) > +#define KVM_REG_MIPS_R26 (KVM_REG_MIPS_GP | KVM_REG_SIZE_U64 | 26) > +#define KVM_REG_MIPS_R27 (KVM_REG_MIPS_GP | KVM_REG_SIZE_U64 | 27) > +#define KVM_REG_MIPS_R28 (KVM_REG_MIPS_GP | KVM_REG_SIZE_U64 | 28) > +#define KVM_REG_MIPS_R29 (KVM_REG_MIPS_GP | KVM_REG_SIZE_U64 | 29) > +#define KVM_REG_MIPS_R30 (KVM_REG_MIPS_GP | KVM_REG_SIZE_U64 | 30) > +#define KVM_REG_MIPS_R31 (KVM_REG_MIPS_GP | KVM_REG_SIZE_U64 | 31) > + > +#define KVM_REG_MIPS_HI (KVM_REG_MIPS_GP | KVM_REG_SIZE_U64 | > 32) > +#define KVM_REG_MIPS_LO (KVM_REG_MIPS_GP | KVM_REG_SIZE_U64 | > 33) > +#define KVM_REG_MIPS_PC (KVM_REG_MIPS_GP | KVM_REG_SIZE_U64 | > 34) > + > + > +/* > + * KVM_REG_MIPS_KVM - KVM specific control registers. > + */ > > /* > * CP0_Count control > @@ -118,8 +126,7 @@ struct kvm_fpu { > * safely without losing time or guest timer interrupts. > * Other: Reserved, do not change. > */ > -#define KVM_REG_MIPS_COUNT_CTL (KVM_REG_MIPS | > KVM_REG_SIZE_U64 | \ > - 0x20000 | 0) > +#define KVM_REG_MIPS_COUNT_CTL (KVM_REG_MIPS_KVM | > KVM_REG_SIZE_U64 | 0) > #define KVM_REG_MIPS_COUNT_CTL_DC 0x00000001 > > /* > @@ -131,15 +138,46 @@ struct kvm_fpu { > * emulated. > * Modifications to times in the future are rejected. > */ > -#define KVM_REG_MIPS_COUNT_RESUME (KVM_REG_MIPS | KVM_REG_SIZE_U64 | \ > - 0x20000 | 1) > +#define KVM_REG_MIPS_COUNT_RESUME (KVM_REG_MIPS_KVM | KVM_REG_SIZE_U64 | 1) > /* > * CP0_Count rate in Hz > * Specifies the rate of the CP0_Count timer in Hz. Modifications occur > without > * discontinuities in CP0_Count. > */ > -#define KVM_REG_MIPS_COUNT_HZ (KVM_REG_MIPS | > KVM_REG_SIZE_U64 | \ > - 0x20000 | 2) > +#define KVM_REG_MIPS_COUNT_HZ (KVM_REG_MIPS_KVM | > KVM_REG_SIZE_U64 | 2) > + > + > +/* > + * KVM_REG_MIPS_FPU - Floating Point and MIPS SIMD Architecture (MSA) > registers. > + * > + * bits[15..8] - Register subset (see definitions below). > + * bits[7..5] - Must be zero. > + * bits[4..0] - Register number within register subset. > + */ > + > +#define KVM_REG_MIPS_FPR (KVM_REG_MIPS_FPU | 0x0000000000000000ULL) > +#define KVM_REG_MIPS_FCR (KVM_REG_MIPS_FPU | 0x0000000000000100ULL) > +#define KVM_REG_MIPS_MSACR (KVM_REG_MIPS_FPU | 0x0000000000000200ULL) > + > +/* > + * KVM_REG_MIPS_FPR - Floating point / Vector registers. > + */ > +#define KVM_REG_MIPS_FPR_32(n) (KVM_REG_MIPS_FPR | KVM_REG_SIZE_U32 | > (n)) > +#define KVM_REG_MIPS_FPR_64(n) (KVM_REG_MIPS_FPR | KVM_REG_SIZE_U64 | > (n)) > +#define KVM_REG_MIPS_VEC_128(n) (KVM_REG_MIPS_FPR | KVM_REG_SIZE_U128 | > (n)) > + > +/* > + * KVM_REG_MIPS_FCR - Floating point control registers. > + */ > +#define KVM_REG_MIPS_FCR_IR (KVM_REG_MIPS_FCR | KVM_REG_SIZE_U32 | 0) > +#define KVM_REG_MIPS_FCR_CSR (KVM_REG_MIPS_FCR | KVM_REG_SIZE_U32 | 31) > + > +/* > + * KVM_REG_MIPS_MSACR - MIPS SIMD Architecture (MSA) control registers. > + */ > +#define KVM_REG_MIPS_MSA_IR (KVM_REG_MIPS_MSACR | KVM_REG_SIZE_U32 | 0) > +#define KVM_REG_MIPS_MSA_CSR (KVM_REG_MIPS_MSACR | KVM_REG_SIZE_U32 | 1) > + > > /* > * KVM MIPS specific structures and definitions > diff --git a/linux-headers/asm-s390/kvm.h b/linux-headers/asm-s390/kvm.h > index c5a93eb..512d8f1 100644 > --- a/linux-headers/asm-s390/kvm.h > +++ b/linux-headers/asm-s390/kvm.h > @@ -150,6 +150,7 @@ struct kvm_guest_debug_arch { > #define KVM_SYNC_CRS (1UL << 3) > #define KVM_SYNC_ARCH0 (1UL << 4) > #define KVM_SYNC_PFAULT (1UL << 5) > +#define KVM_SYNC_VRS (1UL << 6) > /* definition of registers in kvm_run */ > struct kvm_sync_regs { > __u64 prefix; /* prefix register */ > @@ -164,6 +165,9 @@ struct kvm_sync_regs { > __u64 pft; /* pfault token [PFAULT] */ > __u64 pfs; /* pfault select [PFAULT] */ > __u64 pfc; /* pfault compare [PFAULT] */ > + __u64 vrs[32][2]; /* vector registers */ > + __u8 reserved[512]; /* for future vector expansion */ > + __u32 fpc; /* only valid with vector registers */ > }; > > #define KVM_REG_S390_TODPR (KVM_REG_S390 | KVM_REG_SIZE_U32 | 0x1) > diff --git a/linux-headers/asm-x86/hyperv.h b/linux-headers/asm-x86/hyperv.h > index 90c458e..ce6068d 100644 > --- a/linux-headers/asm-x86/hyperv.h > +++ b/linux-headers/asm-x86/hyperv.h > @@ -225,6 +225,8 @@ > #define HV_STATUS_INVALID_HYPERCALL_CODE 2 > #define HV_STATUS_INVALID_HYPERCALL_INPUT 3 > #define HV_STATUS_INVALID_ALIGNMENT 4 > +#define HV_STATUS_INSUFFICIENT_MEMORY 11 > +#define HV_STATUS_INVALID_CONNECTION_ID 18 > #define HV_STATUS_INSUFFICIENT_BUFFERS 19 > > typedef struct _HV_REFERENCE_TSC_PAGE { > diff --git a/linux-headers/linux/kvm.h b/linux-headers/linux/kvm.h > index 60a54c8..b96d978 100644 > --- a/linux-headers/linux/kvm.h > +++ b/linux-headers/linux/kvm.h > @@ -147,6 +147,16 @@ struct kvm_pit_config { > > #define KVM_PIT_SPEAKER_DUMMY 1 > > +struct kvm_s390_skeys { > + __u64 start_gfn; > + __u64 count; > + __u64 skeydata_addr; > + __u32 flags; > + __u32 reserved[9]; > +}; > +#define KVM_S390_GET_SKEYS_NONE 1 > +#define KVM_S390_SKEYS_MAX 1048576 > + > #define KVM_EXIT_UNKNOWN 0 > #define KVM_EXIT_EXCEPTION 1 > #define KVM_EXIT_IO 2 > @@ -172,6 +182,7 @@ struct kvm_pit_config { > #define KVM_EXIT_S390_TSCH 22 > #define KVM_EXIT_EPR 23 > #define KVM_EXIT_SYSTEM_EVENT 24 > +#define KVM_EXIT_S390_STSI 25 > > /* For KVM_EXIT_INTERNAL_ERROR */ > /* Emulate instruction failed. */ > @@ -309,6 +320,15 @@ struct kvm_run { > __u32 type; > __u64 flags; > } system_event; > + /* KVM_EXIT_S390_STSI */ > + struct { > + __u64 addr; > + __u8 ar; > + __u8 reserved; > + __u8 fc; > + __u8 sel1; > + __u16 sel2; > + } s390_stsi; > /* Fix the size of the union. */ > char padding[256]; > }; > @@ -324,7 +344,7 @@ struct kvm_run { > __u64 kvm_dirty_regs; > union { > struct kvm_sync_regs regs; > - char padding[1024]; > + char padding[2048]; > } s; > }; > > @@ -365,6 +385,24 @@ struct kvm_translation { > __u8 pad[5]; > }; > > +/* for KVM_S390_MEM_OP */ > +struct kvm_s390_mem_op { > + /* in */ > + __u64 gaddr; /* the guest address */ > + __u64 flags; /* flags */ > + __u32 size; /* amount of bytes */ > + __u32 op; /* type of operation */ > + __u64 buf; /* buffer in userspace */ > + __u8 ar; /* the access register number */ > + __u8 reserved[31]; /* should be set to 0 */ > +}; > +/* types for kvm_s390_mem_op->op */ > +#define KVM_S390_MEMOP_LOGICAL_READ 0 > +#define KVM_S390_MEMOP_LOGICAL_WRITE 1 > +/* flags for kvm_s390_mem_op->flags */ > +#define KVM_S390_MEMOP_F_CHECK_ONLY (1ULL << 0) > +#define KVM_S390_MEMOP_F_INJECT_EXCEPTION (1ULL << 1) > + > /* for KVM_INTERRUPT */ > struct kvm_interrupt { > /* in */ > @@ -520,6 +558,13 @@ struct kvm_s390_irq { > } u; > }; > > +struct kvm_s390_irq_state { > + __u64 buf; > + __u32 flags; > + __u32 len; > + __u32 reserved[4]; > +}; > + > /* for KVM_SET_GUEST_DEBUG */ > > #define KVM_GUESTDBG_ENABLE 0x00000001 > @@ -760,6 +805,15 @@ struct kvm_ppc_smmu_info { > #define KVM_CAP_PPC_ENABLE_HCALL 104 > #define KVM_CAP_CHECK_EXTENSION_VM 105 > #define KVM_CAP_S390_USER_SIGP 106 > +#define KVM_CAP_S390_VECTOR_REGISTERS 107 > +#define KVM_CAP_S390_MEM_OP 108 > +#define KVM_CAP_S390_USER_STSI 109 > +#define KVM_CAP_S390_SKEYS 110 > +#define KVM_CAP_MIPS_FPU 111 > +#define KVM_CAP_MIPS_MSA 112 > +#define KVM_CAP_S390_INJECT_IRQ 113 > +#define KVM_CAP_S390_IRQ_STATE 114 > +#define KVM_CAP_PPC_HWRNG 115 > > #ifdef KVM_CAP_IRQ_ROUTING > > @@ -1135,6 +1189,16 @@ struct kvm_s390_ucas_mapping { > #define KVM_ARM_VCPU_INIT _IOW(KVMIO, 0xae, struct kvm_vcpu_init) > #define KVM_ARM_PREFERRED_TARGET _IOR(KVMIO, 0xaf, struct kvm_vcpu_init) > #define KVM_GET_REG_LIST _IOWR(KVMIO, 0xb0, struct kvm_reg_list) > +/* Available with KVM_CAP_S390_MEM_OP */ > +#define KVM_S390_MEM_OP _IOW(KVMIO, 0xb1, struct > kvm_s390_mem_op) > +/* Available with KVM_CAP_S390_SKEYS */ > +#define KVM_S390_GET_SKEYS _IOW(KVMIO, 0xb2, struct kvm_s390_skeys) > +#define KVM_S390_SET_SKEYS _IOW(KVMIO, 0xb3, struct kvm_s390_skeys) > +/* Available with KVM_CAP_S390_INJECT_IRQ */ > +#define KVM_S390_IRQ _IOW(KVMIO, 0xb4, struct kvm_s390_irq) > +/* Available with KVM_CAP_S390_IRQ_STATE */ > +#define KVM_S390_SET_IRQ_STATE _IOW(KVMIO, 0xb5, struct > kvm_s390_irq_state) > +#define KVM_S390_GET_IRQ_STATE _IOW(KVMIO, 0xb6, struct > kvm_s390_irq_state) > > #define KVM_DEV_ASSIGN_ENABLE_IOMMU (1 << 0) > #define KVM_DEV_ASSIGN_PCI_2_3 (1 << 1) > diff --git a/linux-headers/linux/vfio.h b/linux-headers/linux/vfio.h > index 95ba870..0508d0b 100644 > --- a/linux-headers/linux/vfio.h > +++ b/linux-headers/linux/vfio.h > @@ -160,6 +160,8 @@ struct vfio_device_info { > __u32 flags; > #define VFIO_DEVICE_FLAGS_RESET (1 << 0) /* Device supports > reset */ > #define VFIO_DEVICE_FLAGS_PCI (1 << 1) /* vfio-pci device */ > +#define VFIO_DEVICE_FLAGS_PLATFORM (1 << 2) /* vfio-platform device */ > +#define VFIO_DEVICE_FLAGS_AMBA (1 << 3) /* vfio-amba device */ > __u32 num_regions; /* Max region index + 1 */ > __u32 num_irqs; /* Max IRQ index + 1 */ > }; >