1/* 2 * 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 "standard-headers/linux/types.h" 17 18struct kvm_device_desc { 19 /* The device type: console, network, disk etc. Type 0 terminates. */ 20 uint8_t type; 21 /* The number of virtqueues (first in config array) */ 22 uint8_t 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 uint8_t feature_len; 28 /* The number of bytes of the config array after virtqueues. */ 29 uint8_t config_len; 30 /* A status byte, written by the Guest. */ 31 uint8_t status; 32 uint8_t 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 */ 39struct kvm_vqconfig { 40 /* The token returned with an interrupt. Set by the guest */ 41 uint64_t token; 42 /* The address of the virtio ring */ 43 uint64_t address; 44 /* The number of entries in the virtio_ring */ 45 uint16_t 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