xref: /freebsd/sys/dev/virtio/mmio/virtio_mmio_if.m (revision 031beb4e239bfce798af17f5fe8dba8bcaf13d99)
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
32c141c5c6SRuslan Bukin#include <sys/types.h>
33c141c5c6SRuslan Bukin
34c141c5c6SRuslan Bukin#
35c141c5c6SRuslan Bukin# This is optional interface to virtio mmio backend.
36c141c5c6SRuslan Bukin# Useful when backend is implemented not by the hardware but software, e.g.
37c141c5c6SRuslan Bukin# by using another cpu core.
38c141c5c6SRuslan Bukin#
39c141c5c6SRuslan Bukin
40c141c5c6SRuslan BukinINTERFACE virtio_mmio;
41c141c5c6SRuslan Bukin
42c141c5c6SRuslan BukinCODE {
43c141c5c6SRuslan Bukin	static int
44*116b8d2bSRuslan Bukin	virtio_mmio_prewrite(device_t dev, size_t offset, int val)
45*116b8d2bSRuslan Bukin	{
46*116b8d2bSRuslan Bukin
47*116b8d2bSRuslan Bukin		return (1);
48*116b8d2bSRuslan Bukin	}
49*116b8d2bSRuslan Bukin
50*116b8d2bSRuslan Bukin	static int
51a8098016SRuslan Bukin	virtio_mmio_note(device_t dev, size_t offset, int val)
52c141c5c6SRuslan Bukin	{
53c141c5c6SRuslan Bukin
54c141c5c6SRuslan Bukin		return (1);
55c141c5c6SRuslan Bukin	}
56c141c5c6SRuslan Bukin
57c141c5c6SRuslan Bukin	static int
58c141c5c6SRuslan Bukin	virtio_mmio_setup_intr(device_t dev, device_t mmio_dev,
59c141c5c6SRuslan Bukin					void *handler, void *ih_user)
60c141c5c6SRuslan Bukin	{
61c141c5c6SRuslan Bukin
62c141c5c6SRuslan Bukin		return (1);
63c141c5c6SRuslan Bukin	}
64c141c5c6SRuslan Bukin};
65c141c5c6SRuslan Bukin
66c141c5c6SRuslan Bukin#
67*116b8d2bSRuslan Bukin# Inform backend we are going to write data at offset.
68*116b8d2bSRuslan Bukin#
69*116b8d2bSRuslan BukinMETHOD int prewrite {
70*116b8d2bSRuslan Bukin	device_t	dev;
71*116b8d2bSRuslan Bukin	size_t		offset;
72*116b8d2bSRuslan Bukin	int		val;
73*116b8d2bSRuslan Bukin} DEFAULT virtio_mmio_prewrite;
74*116b8d2bSRuslan Bukin
75*116b8d2bSRuslan Bukin#
76c141c5c6SRuslan Bukin# Inform backend we have data wrotten to offset.
77c141c5c6SRuslan Bukin#
78c141c5c6SRuslan BukinMETHOD int note {
79c141c5c6SRuslan Bukin	device_t	dev;
80c141c5c6SRuslan Bukin	size_t		offset;
81a8098016SRuslan Bukin	int		val;
82a8098016SRuslan Bukin} DEFAULT virtio_mmio_note;
83c141c5c6SRuslan Bukin
84c141c5c6SRuslan Bukin#
85156b97faSRuslan Bukin# Inform backend we are going to poll virtqueue.
86156b97faSRuslan Bukin#
87156b97faSRuslan BukinMETHOD int poll {
88156b97faSRuslan Bukin	device_t	dev;
89156b97faSRuslan Bukin};
90156b97faSRuslan Bukin
91156b97faSRuslan Bukin#
92c141c5c6SRuslan Bukin# Setup backend-specific interrupts.
93c141c5c6SRuslan Bukin#
94c141c5c6SRuslan BukinMETHOD int setup_intr {
95c141c5c6SRuslan Bukin	device_t	dev;
96c141c5c6SRuslan Bukin	device_t	mmio_dev;
97c141c5c6SRuslan Bukin	void		*handler;
98c141c5c6SRuslan Bukin	void		*ih_user;
99c141c5c6SRuslan Bukin} DEFAULT virtio_mmio_setup_intr;
100