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