|
|
1.1 ! root 1: /****************************************************************************** ! 2: * Copyright (c) 2011 IBM Corporation ! 3: * All rights reserved. ! 4: * This program and the accompanying materials ! 5: * are made available under the terms of the BSD License ! 6: * which accompanies this distribution, and is available at ! 7: * http://www.opensource.org/licenses/bsd-license.php ! 8: * ! 9: * Contributors: ! 10: * IBM Corporation - initial implementation ! 11: *****************************************************************************/ ! 12: ! 13: #ifndef _LIBVIRTIO_H ! 14: #define _LIBVIRTIO_H ! 15: ! 16: #include <stdint.h> ! 17: ! 18: /* Device status bits */ ! 19: #define VIRTIO_STAT_ACKNOWLEDGE 1 ! 20: #define VIRTIO_STAT_DRIVER 2 ! 21: #define VIRTIO_STAT_DRIVER_OK 4 ! 22: #define VIRTIO_STAT_FAILED 128 ! 23: ! 24: /* Definitions for vring_desc.flags */ ! 25: #define VRING_DESC_F_NEXT 1 /* buffer continues via the next field */ ! 26: #define VRING_DESC_F_WRITE 2 /* buffer is write-only (otherwise read-only) */ ! 27: #define VRING_DESC_F_INDIRECT 4 /* buffer contains a list of buffer descriptors */ ! 28: ! 29: /* Descriptor table entry - see Virtio Spec chapter 2.3.2 */ ! 30: struct vring_desc { ! 31: uint64_t addr; /* Address (guest-physical) */ ! 32: uint32_t len; /* Length */ ! 33: uint16_t flags; /* The flags as indicated above */ ! 34: uint16_t next; /* Next field if flags & NEXT */ ! 35: }; ! 36: ! 37: /* Definitions for vring_avail.flags */ ! 38: #define VRING_AVAIL_F_NO_INTERRUPT 1 ! 39: ! 40: /* Available ring - see Virtio Spec chapter 2.3.4 */ ! 41: struct vring_avail { ! 42: uint16_t flags; ! 43: uint16_t idx; ! 44: uint16_t ring[]; ! 45: }; ! 46: ! 47: ! 48: /* Definitions for vring_used.flags */ ! 49: #define VRING_USED_F_NO_NOTIFY 1 ! 50: ! 51: struct vring_used_elem { ! 52: uint32_t id; /* Index of start of used descriptor chain */ ! 53: uint32_t len; /* Total length of the descriptor chain which was used */ ! 54: }; ! 55: ! 56: struct vring_used { ! 57: uint16_t flags; ! 58: uint16_t idx; ! 59: struct vring_used_elem ring[]; ! 60: }; ! 61: ! 62: #define VIRTIO_TYPE_PCI 0 /* For virtio-pci interface */ ! 63: struct virtio_device { ! 64: void *base; /* base address */ ! 65: int type; /* VIRTIO_TYPE_PCI or VIRTIO_TYPE_VIO */ ! 66: }; ! 67: ! 68: /* Parts of the virtqueue are aligned on a 4096 byte page boundary */ ! 69: #define VQ_ALIGN(addr) (((addr) + 0xfff) & ~0xfff) ! 70: ! 71: extern unsigned long virtio_vring_size(unsigned int qsize); ! 72: extern int virtio_get_qsize(struct virtio_device *dev, int queue); ! 73: extern struct vring_desc *virtio_get_vring_desc(struct virtio_device *dev, int queue); ! 74: extern struct vring_avail *virtio_get_vring_avail(struct virtio_device *dev, int queue); ! 75: extern struct vring_used *virtio_get_vring_used(struct virtio_device *dev, int queue); ! 76: ! 77: extern void virtio_reset_device(struct virtio_device *dev); ! 78: extern void virtio_queue_notify(struct virtio_device *dev, int queue); ! 79: extern void virtio_set_status(struct virtio_device *dev, int status); ! 80: extern void virtio_set_guest_features(struct virtio_device *dev, int features); ! 81: extern uint64_t virtio_get_config(struct virtio_device *dev, int offset, int size); ! 82: extern int __virtio_read_config(struct virtio_device *dev, void *dst, ! 83: int offset, int len); ! 84: ! 85: ! 86: #endif /* _LIBVIRTIO_H */
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.