xref: /kvmtool/include/linux/virtio_mmio.h (revision 7e2209945bb59e62c116cca6c371e9c3a4b99460)
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