From: Eric Auger <eric.auger@linaro.org>
To: Cornelia Huck <cornelia.huck@de.ibm.com>, qemu-devel@nongnu.org
Cc: borntraeger@de.ibm.com, jfrei@linux.vnet.ibm.com, agraf@suse.de
Subject: Re: [Qemu-devel] [PATCH v2 06/10] linux-headers: update
Date: Wed, 29 Apr 2015 15:07:11 +0200 [thread overview]
Message-ID: <5540D77F.1070604@linaro.org> (raw)
In-Reply-To: <1430124906-22470-7-git-send-email-cornelia.huck@de.ibm.com>
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.huck@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 */
> };
>
next prev parent reply other threads:[~2015-04-29 13:10 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-27 8:54 [Qemu-devel] [PATCH v2 00/10] first batch of s390x patches for 2.4 Cornelia Huck
2015-04-27 8:54 ` [Qemu-devel] [PATCH v2 01/10] virtio-ccw: sort into categories Cornelia Huck
2015-04-27 8:54 ` [Qemu-devel] [PATCH v2 02/10] s390-virtio: " Cornelia Huck
2015-04-27 8:54 ` [Qemu-devel] [PATCH v2 03/10] sclp: " Cornelia Huck
2015-04-27 8:55 ` [Qemu-devel] [PATCH v2 04/10] s390x/ipl: " Cornelia Huck
2015-04-27 8:55 ` [Qemu-devel] [PATCH v2 05/10] s390x/mmu: Use access type definitions instead of magic values Cornelia Huck
2015-04-27 8:55 ` [Qemu-devel] [PATCH v2 06/10] linux-headers: update Cornelia Huck
2015-04-29 13:07 ` Eric Auger [this message]
2015-04-29 14:44 ` Cornelia Huck
2015-04-27 8:55 ` [Qemu-devel] [PATCH v2 07/10] s390x/kvm: Put vm name, extended name and UUID into STSI322 SYSIB Cornelia Huck
2015-04-27 8:55 ` [Qemu-devel] [PATCH v2 08/10] s390x/mmu: Use ioctl for reading and writing from/to guest memory Cornelia Huck
2015-04-27 8:55 ` [Qemu-devel] [PATCH v2 09/10] s390x/kvm: Support access register mode for KVM_S390_MEM_OP ioctl Cornelia Huck
2015-04-27 8:55 ` [Qemu-devel] [PATCH v2 10/10] kvm: better advice for failed s390x startup Cornelia Huck
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5540D77F.1070604@linaro.org \
--to=eric.auger@linaro.org \
--cc=agraf@suse.de \
--cc=borntraeger@de.ibm.com \
--cc=cornelia.huck@de.ibm.com \
--cc=jfrei@linux.vnet.ibm.com \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.