2 * This file is part of the Palacios Virtual Machine Monitor developed
3 * by the V3VEE Project with funding from the United States National
4 * Science Foundation and the Department of Energy.
6 * The V3VEE Project is a joint project between Northwestern University
7 * and the University of New Mexico. You can find out more at
10 * Copyright (c) 2008, Jack Lange <jarusl@cs.northwestern.edu>
11 * Copyright (c) 2008, The V3VEE Project <http://www.v3vee.org>
12 * All rights reserved.
14 * Author: Jack Lange <jarusl@cs.northwestern.edu>
16 * This is free software. You are permitted to use,
17 * redistribute, and modify it as specified in the file "V3VEE_LICENSE".
21 #ifndef __DEVICES_LNX_VIRTIO_H__
22 #define __DEVICES_LNX_VIRTIO_H__
26 #include <palacios/vm_dev.h>
29 /* PCI Vendor IDs (from Qemu) */
30 #define VIRTIO_VENDOR_ID 0x1af4 // Redhat/Qumranet
31 #define VIRTIO_SUBVENDOR_ID 0x1af4 // Redhat/Qumranet
32 #define VIRTIO_SUBDEVICE_ID 0x1100 // Qemu
35 #define VIRTIO_NET_DEV_ID 0x1000
36 #define VIRTIO_BLOCK_DEV_ID 0x1001
37 #define VIRTIO_BALLOON_DEV_ID 0x1002
38 #define VIRTIO_CONSOLE_DEV_ID 0x1003
40 #define VIRTIO_BLOCK_SUBDEVICE_ID 2
42 /* The virtio configuration space is a hybrid io/memory mapped model
43 * All IO is done via IO port accesses
44 * The IO ports access fields in a virtio data structure, and the base io port
45 * coincides with the base address of the in memory structure
46 * There is a standard virtio structure of 20 bytes, followed by a
47 * device specific structure of n bytes.
50 struct virtio_config {
51 uint32_t host_features;
52 uint32_t guest_features;
53 uint32_t vring_page_num;
54 uint16_t vring_ring_size;
55 uint16_t vring_queue_selector;
56 uint16_t vring_queue_notifier;
59 } __attribute__((packed));
63 struct vm_device * v3_create_virtio_blk();