blob: b3408828a5926d07d8063e035764c30fdbc348ae [file] [log] [blame]
Bin Mengfdc4aca2018-10-15 02:21:02 -07001/* SPDX-License-Identifier: GPL-2.0+ */
2/*
3 * Copyright (C) 2018, Tuomas Tynkkynen <tuomas.tynkkynen@iki.fi>
4 * Copyright (C) 2018, Bin Meng <bmeng.cn@gmail.com>
5 *
6 * From Linux kernel include/uapi/linux/virtio_mmio.h
7 */
8
9#ifndef _LINUX_VIRTIO_MMIO_H
10#define _LINUX_VIRTIO_MMIO_H
11
12/* Control registers */
13
14/* Magic value ("virt" string) - Read Only */
15#define VIRTIO_MMIO_MAGIC_VALUE 0x000
16
17/* Virtio device version - Read Only */
18#define VIRTIO_MMIO_VERSION 0x004
19
20/* Virtio device ID - Read Only */
21#define VIRTIO_MMIO_DEVICE_ID 0x008
22
23/* Virtio vendor ID - Read Only */
24#define VIRTIO_MMIO_VENDOR_ID 0x00c
25
26/*
27 * Bitmask of the features supported by the device (host)
28 * (32 bits per set) - Read Only
29 */
30#define VIRTIO_MMIO_DEVICE_FEATURES 0x010
31
32/* Device (host) features set selector - Write Only */
33#define VIRTIO_MMIO_DEVICE_FEATURES_SEL 0x014
34
35/*
36 * Bitmask of features activated by the driver (guest)
37 * (32 bits per set) - Write Only
38 */
39#define VIRTIO_MMIO_DRIVER_FEATURES 0x020
40
41/* Activated features set selector - Write Only */
42#define VIRTIO_MMIO_DRIVER_FEATURES_SEL 0x024
43
44#ifndef VIRTIO_MMIO_NO_LEGACY /* LEGACY DEVICES ONLY! */
45
46/* Guest's memory page size in bytes - Write Only */
47#define VIRTIO_MMIO_GUEST_PAGE_SIZE 0x028
48
49#endif
50
51/* Queue selector - Write Only */
52#define VIRTIO_MMIO_QUEUE_SEL 0x030
53
54/* Maximum size of the currently selected queue - Read Only */
55#define VIRTIO_MMIO_QUEUE_NUM_MAX 0x034
56
57/* Queue size for the currently selected queue - Write Only */
58#define VIRTIO_MMIO_QUEUE_NUM 0x038
59
60#ifndef VIRTIO_MMIO_NO_LEGACY /* LEGACY DEVICES ONLY! */
61
62/* Used Ring alignment for the currently selected queue - Write Only */
63#define VIRTIO_MMIO_QUEUE_ALIGN 0x03c
64
65/* Guest's PFN for the currently selected queue - Read Write */
66#define VIRTIO_MMIO_QUEUE_PFN 0x040
67
68#endif
69
70/* Ready bit for the currently selected queue - Read Write */
71#define VIRTIO_MMIO_QUEUE_READY 0x044
72
73/* Queue notifier - Write Only */
74#define VIRTIO_MMIO_QUEUE_NOTIFY 0x050
75
76/* Interrupt status - Read Only */
77#define VIRTIO_MMIO_INTERRUPT_STATUS 0x060
78
79/* Interrupt acknowledge - Write Only */
80#define VIRTIO_MMIO_INTERRUPT_ACK 0x064
81
82/* Device status register - Read Write */
83#define VIRTIO_MMIO_STATUS 0x070
84
85/* Selected queue's Descriptor Table address, 64 bits in two halves */
86#define VIRTIO_MMIO_QUEUE_DESC_LOW 0x080
87#define VIRTIO_MMIO_QUEUE_DESC_HIGH 0x084
88
89/* Selected queue's Available Ring address, 64 bits in two halves */
90#define VIRTIO_MMIO_QUEUE_AVAIL_LOW 0x090
91#define VIRTIO_MMIO_QUEUE_AVAIL_HIGH 0x094
92
93/* Selected queue's Used Ring address, 64 bits in two halves */
94#define VIRTIO_MMIO_QUEUE_USED_LOW 0x0a0
95#define VIRTIO_MMIO_QUEUE_USED_HIGH 0x0a4
96
97/* Configuration atomicity value */
98#define VIRTIO_MMIO_CONFIG_GENERATION 0x0fc
99
100/*
101 * The config space is defined by each driver as
102 * the per-driver configuration space - Read Write
103 */
104#define VIRTIO_MMIO_CONFIG 0x100
105
106/* Interrupt flags (re: interrupt status & acknowledge registers) */
107
108#define VIRTIO_MMIO_INT_VRING BIT(0)
109#define VIRTIO_MMIO_INT_CONFIG BIT(1)
110
111/*
112 * The alignment to use between consumer and producer parts of vring.
113 * Currently hardcoded to the page size.
114 */
115#define PAGE_SHIFT 12
116#define VIRTIO_MMIO_VRING_ALIGN PAGE_SIZE
117
118/**
119 * virtio mmio transport driver private data
120 *
121 * @base: mmio transport device register base
122 * @version: mmio transport device version
123 */
124struct virtio_mmio_priv {
125 void __iomem *base;
126 u32 version;
127};
128
129#endif /* _LINUX_VIRTIO_MMIO_H */