xref: /freebsd/sys/dev/virtio/mmio/virtio_mmio.h (revision 95ee2897e98f5d444f26ed2334cc7c439f9c16c6)
1c141c5c6SRuslan Bukin /*-
2c141c5c6SRuslan Bukin  * Copyright (c) 2014 Ruslan Bukin <br@bsdpad.com>
3c141c5c6SRuslan Bukin  * All rights reserved.
4c141c5c6SRuslan Bukin  *
5c141c5c6SRuslan Bukin  * This software was developed by SRI International and the University of
6c141c5c6SRuslan Bukin  * Cambridge Computer Laboratory under DARPA/AFRL contract (FA8750-10-C-0237)
7c141c5c6SRuslan Bukin  * ("CTSRD"), as part of the DARPA CRASH research programme.
8c141c5c6SRuslan Bukin  *
9c141c5c6SRuslan Bukin  * Redistribution and use in source and binary forms, with or without
10c141c5c6SRuslan Bukin  * modification, are permitted provided that the following conditions
11c141c5c6SRuslan Bukin  * are met:
12c141c5c6SRuslan Bukin  * 1. Redistributions of source code must retain the above copyright
13c141c5c6SRuslan Bukin  *    notice, this list of conditions and the following disclaimer.
14c141c5c6SRuslan Bukin  * 2. Redistributions in binary form must reproduce the above copyright
15c141c5c6SRuslan Bukin  *    notice, this list of conditions and the following disclaimer in the
16c141c5c6SRuslan Bukin  *    documentation and/or other materials provided with the distribution.
17c141c5c6SRuslan Bukin  *
18c141c5c6SRuslan Bukin  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19c141c5c6SRuslan Bukin  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20c141c5c6SRuslan Bukin  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21c141c5c6SRuslan Bukin  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
22c141c5c6SRuslan Bukin  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23c141c5c6SRuslan Bukin  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24c141c5c6SRuslan Bukin  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25c141c5c6SRuslan Bukin  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26c141c5c6SRuslan Bukin  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27c141c5c6SRuslan Bukin  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28c141c5c6SRuslan Bukin  * SUCH DAMAGE.
29c141c5c6SRuslan Bukin  */
30c141c5c6SRuslan Bukin 
31c141c5c6SRuslan Bukin #ifndef	_VIRTIO_MMIO_H
32c141c5c6SRuslan Bukin #define	_VIRTIO_MMIO_H
33c141c5c6SRuslan Bukin 
34a3609b82SAndrew Turner DECLARE_CLASS(vtmmio_driver);
35a3609b82SAndrew Turner 
36a3609b82SAndrew Turner struct vtmmio_virtqueue;
37a3609b82SAndrew Turner 
38a3609b82SAndrew Turner struct vtmmio_softc {
39a3609b82SAndrew Turner 	device_t			dev;
40a3609b82SAndrew Turner 	device_t			platform;
41a3609b82SAndrew Turner 	struct resource			*res[2];
42a3609b82SAndrew Turner 
43a3609b82SAndrew Turner 	uint64_t			vtmmio_features;
44a3609b82SAndrew Turner 	uint32_t			vtmmio_flags;
45046096d5SJessica Clarke 	uint32_t			vtmmio_version;
46a3609b82SAndrew Turner 
47a3609b82SAndrew Turner 	/* This "bus" will only ever have one child. */
48a3609b82SAndrew Turner 	device_t			vtmmio_child_dev;
49a3609b82SAndrew Turner 	struct virtio_feature_desc	*vtmmio_child_feat_desc;
50a3609b82SAndrew Turner 
51a3609b82SAndrew Turner 	int				vtmmio_nvqs;
52a3609b82SAndrew Turner 	struct vtmmio_virtqueue		*vtmmio_vqs;
53a3609b82SAndrew Turner 	void				*ih;
54a3609b82SAndrew Turner };
55a3609b82SAndrew Turner 
56be79a2c6SJessica Clarke int vtmmio_probe(device_t);
57a3609b82SAndrew Turner int vtmmio_attach(device_t);
58a3609b82SAndrew Turner 
59c141c5c6SRuslan Bukin #define	VIRTIO_MMIO_MAGIC_VALUE		0x000
60c141c5c6SRuslan Bukin #define	VIRTIO_MMIO_VERSION		0x004
61c141c5c6SRuslan Bukin #define	VIRTIO_MMIO_DEVICE_ID		0x008
62c141c5c6SRuslan Bukin #define	VIRTIO_MMIO_VENDOR_ID		0x00c
63c141c5c6SRuslan Bukin #define	VIRTIO_MMIO_HOST_FEATURES	0x010
64c141c5c6SRuslan Bukin #define	VIRTIO_MMIO_HOST_FEATURES_SEL	0x014
65c141c5c6SRuslan Bukin #define	VIRTIO_MMIO_GUEST_FEATURES	0x020
66c141c5c6SRuslan Bukin #define	VIRTIO_MMIO_GUEST_FEATURES_SEL	0x024
67046096d5SJessica Clarke #define	VIRTIO_MMIO_GUEST_PAGE_SIZE	0x028	/* version 1 only */
68c141c5c6SRuslan Bukin #define	VIRTIO_MMIO_QUEUE_SEL		0x030
69c141c5c6SRuslan Bukin #define	VIRTIO_MMIO_QUEUE_NUM_MAX	0x034
70c141c5c6SRuslan Bukin #define	VIRTIO_MMIO_QUEUE_NUM		0x038
71046096d5SJessica Clarke #define	VIRTIO_MMIO_QUEUE_ALIGN		0x03c	/* version 1 only */
72046096d5SJessica Clarke #define	VIRTIO_MMIO_QUEUE_PFN		0x040	/* version 1 only */
73046096d5SJessica Clarke #define	VIRTIO_MMIO_QUEUE_READY		0x044	/* requires version 2 */
74c141c5c6SRuslan Bukin #define	VIRTIO_MMIO_QUEUE_NOTIFY	0x050
75c141c5c6SRuslan Bukin #define	VIRTIO_MMIO_INTERRUPT_STATUS	0x060
76c141c5c6SRuslan Bukin #define	VIRTIO_MMIO_INTERRUPT_ACK	0x064
77c141c5c6SRuslan Bukin #define	VIRTIO_MMIO_STATUS		0x070
78046096d5SJessica Clarke #define	VIRTIO_MMIO_QUEUE_DESC_LOW	0x080	/* requires version 2 */
79046096d5SJessica Clarke #define	VIRTIO_MMIO_QUEUE_DESC_HIGH	0x084	/* requires version 2 */
80046096d5SJessica Clarke #define	VIRTIO_MMIO_QUEUE_AVAIL_LOW	0x090	/* requires version 2 */
81046096d5SJessica Clarke #define	VIRTIO_MMIO_QUEUE_AVAIL_HIGH	0x094	/* requires version 2 */
82046096d5SJessica Clarke #define	VIRTIO_MMIO_QUEUE_USED_LOW	0x0a0	/* requires version 2 */
83046096d5SJessica Clarke #define	VIRTIO_MMIO_QUEUE_USED_HIGH	0x0a4	/* requires version 2 */
84*dc6f578aSBryan Venteicher #define	VIRTIO_MMIO_CONFIG_GENERATION	0x0fc	/* requires version 2 */
85c141c5c6SRuslan Bukin #define	VIRTIO_MMIO_CONFIG		0x100
86be79a2c6SJessica Clarke #define	VIRTIO_MMIO_MAGIC_VIRT		0x74726976
87c141c5c6SRuslan Bukin #define	VIRTIO_MMIO_INT_VRING		(1 << 0)
88c141c5c6SRuslan Bukin #define	VIRTIO_MMIO_INT_CONFIG		(1 << 1)
89c141c5c6SRuslan Bukin #define	VIRTIO_MMIO_VRING_ALIGN		4096
90c141c5c6SRuslan Bukin 
91c141c5c6SRuslan Bukin #endif /* _VIRTIO_MMIO_H */
92