1 /* 2 * kvm_virtio.h - definition for virtio for kvm on s390 3 * 4 * Copyright IBM Corp. 2008 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License (version 2 only) 8 * as published by the Free Software Foundation. 9 * 10 * Author(s): Christian Borntraeger <borntraeger@de.ibm.com> 11 */ 12 13 #ifndef __KVM_S390_VIRTIO_H 14 #define __KVM_S390_VIRTIO_H 15 16 #include <linux/types.h> 17 18 struct kvm_device_desc { 19 /* The device type: console, network, disk etc. Type 0 terminates. */ 20 __u8 type; 21 /* The number of virtqueues (first in config array) */ 22 __u8 num_vq; 23 /* 24 * The number of bytes of feature bits. Multiply by 2: one for host 25 * features and one for guest acknowledgements. 26 */ 27 __u8 feature_len; 28 /* The number of bytes of the config array after virtqueues. */ 29 __u8 config_len; 30 /* A status byte, written by the Guest. */ 31 __u8 status; 32 __u8 config[0]; 33 }; 34 35 /* 36 * This is how we expect the device configuration field for a virtqueue 37 * to be laid out in config space. 38 */ 39 struct kvm_vqconfig { 40 /* The token returned with an interrupt. Set by the guest */ 41 __u64 token; 42 /* The address of the virtio ring */ 43 __u64 address; 44 /* The number of entries in the virtio_ring */ 45 __u16 num; 46 47 }; 48 49 #define KVM_S390_VIRTIO_NOTIFY 0 50 #define KVM_S390_VIRTIO_RESET 1 51 #define KVM_S390_VIRTIO_SET_STATUS 2 52 53 /* The alignment to use between consumer and producer parts of vring. 54 * This is pagesize for historical reasons. */ 55 #define KVM_S390_VIRTIO_RING_ALIGN 4096 56 57 58 /* These values are supposed to be in ext_params on an interrupt */ 59 #define VIRTIO_PARAM_MASK 0xff 60 #define VIRTIO_PARAM_VRING_INTERRUPT 0x0 61 #define VIRTIO_PARAM_CONFIG_CHANGED 0x1 62 #define VIRTIO_PARAM_DEV_ADD 0x2 63 64 #endif 65