1 /* 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 */ 124 struct virtio_mmio_priv { 125 void __iomem *base; 126 u32 version; 127 }; 128 129 #endif /* _LINUX_VIRTIO_MMIO_H */ 130