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