1 /* 2 * Virtio platform device driver 3 * 4 * Copyright 2011, ARM Ltd. 5 * 6 * Based on Virtio PCI driver by Anthony Liguori, copyright IBM Corp. 2007 7 * 8 * This header is BSD licensed so anyone can use the definitions to implement 9 * compatible drivers/servers. 10 * 11 * Redistribution and use in source and binary forms, with or without 12 * modification, are permitted provided that the following conditions 13 * are met: 14 * 1. Redistributions of source code must retain the above copyright 15 * notice, this list of conditions and the following disclaimer. 16 * 2. Redistributions in binary form must reproduce the above copyright 17 * notice, this list of conditions and the following disclaimer in the 18 * documentation and/or other materials provided with the distribution. 19 * 3. Neither the name of IBM nor the names of its contributors 20 * may be used to endorse or promote products derived from this software 21 * without specific prior written permission. 22 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' AND 23 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 24 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 25 * ARE DISCLAIMED. IN NO EVENT SHALL IBM OR CONTRIBUTORS BE LIABLE 26 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 27 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 28 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 29 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 30 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 31 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 32 * SUCH DAMAGE. 33 */ 34 35 #ifndef _LINUX_VIRTIO_MMIO_H 36 #define _LINUX_VIRTIO_MMIO_H 37 38 /* 39 * Control registers 40 */ 41 42 /* Magic value ("virt" string) - Read Only */ 43 #define VIRTIO_MMIO_MAGIC_VALUE 0x000 44 45 /* Virtio device version - Read Only */ 46 #define VIRTIO_MMIO_VERSION 0x004 47 48 /* Virtio device ID - Read Only */ 49 #define VIRTIO_MMIO_DEVICE_ID 0x008 50 51 /* Virtio vendor ID - Read Only */ 52 #define VIRTIO_MMIO_VENDOR_ID 0x00c 53 54 /* Bitmask of the features supported by the device (host) 55 * (32 bits per set) - Read Only */ 56 #define VIRTIO_MMIO_DEVICE_FEATURES 0x010 57 58 /* Device (host) features set selector - Write Only */ 59 #define VIRTIO_MMIO_DEVICE_FEATURES_SEL 0x014 60 61 /* Bitmask of features activated by the driver (guest) 62 * (32 bits per set) - Write Only */ 63 #define VIRTIO_MMIO_DRIVER_FEATURES 0x020 64 65 /* Activated features set selector - Write Only */ 66 #define VIRTIO_MMIO_DRIVER_FEATURES_SEL 0x024 67 68 69 #ifndef VIRTIO_MMIO_NO_LEGACY /* LEGACY DEVICES ONLY! */ 70 71 /* Guest's memory page size in bytes - Write Only */ 72 #define VIRTIO_MMIO_GUEST_PAGE_SIZE 0x028 73 74 #endif 75 76 77 /* Queue selector - Write Only */ 78 #define VIRTIO_MMIO_QUEUE_SEL 0x030 79 80 /* Maximum size of the currently selected queue - Read Only */ 81 #define VIRTIO_MMIO_QUEUE_NUM_MAX 0x034 82 83 /* Queue size for the currently selected queue - Write Only */ 84 #define VIRTIO_MMIO_QUEUE_NUM 0x038 85 86 87 #ifndef VIRTIO_MMIO_NO_LEGACY /* LEGACY DEVICES ONLY! */ 88 89 /* Used Ring alignment for the currently selected queue - Write Only */ 90 #define VIRTIO_MMIO_QUEUE_ALIGN 0x03c 91 92 /* Guest's PFN for the currently selected queue - Read Write */ 93 #define VIRTIO_MMIO_QUEUE_PFN 0x040 94 95 #endif 96 97 98 /* Ready bit for the currently selected queue - Read Write */ 99 #define VIRTIO_MMIO_QUEUE_READY 0x044 100 101 /* Queue notifier - Write Only */ 102 #define VIRTIO_MMIO_QUEUE_NOTIFY 0x050 103 104 /* Interrupt status - Read Only */ 105 #define VIRTIO_MMIO_INTERRUPT_STATUS 0x060 106 107 /* Interrupt acknowledge - Write Only */ 108 #define VIRTIO_MMIO_INTERRUPT_ACK 0x064 109 110 /* Device status register - Read Write */ 111 #define VIRTIO_MMIO_STATUS 0x070 112 113 /* Selected queue's Descriptor Table address, 64 bits in two halves */ 114 #define VIRTIO_MMIO_QUEUE_DESC_LOW 0x080 115 #define VIRTIO_MMIO_QUEUE_DESC_HIGH 0x084 116 117 /* Selected queue's Available Ring address, 64 bits in two halves */ 118 #define VIRTIO_MMIO_QUEUE_AVAIL_LOW 0x090 119 #define VIRTIO_MMIO_QUEUE_AVAIL_HIGH 0x094 120 121 /* Selected queue's Used Ring address, 64 bits in two halves */ 122 #define VIRTIO_MMIO_QUEUE_USED_LOW 0x0a0 123 #define VIRTIO_MMIO_QUEUE_USED_HIGH 0x0a4 124 125 /* Configuration atomicity value */ 126 #define VIRTIO_MMIO_CONFIG_GENERATION 0x0fc 127 128 /* The config space is defined by each driver as 129 * the per-driver configuration space - Read Write */ 130 #define VIRTIO_MMIO_CONFIG 0x100 131 132 133 134 /* 135 * Interrupt flags (re: interrupt status & acknowledge registers) 136 */ 137 138 #define VIRTIO_MMIO_INT_VRING (1 << 0) 139 #define VIRTIO_MMIO_INT_CONFIG (1 << 1) 140 141 #endif 142