1/* 2 * Copyright 2019, Data61, CSIRO (ABN 41 687 119 230) 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6#pragma once 7 8/*** 9 * @module generic_forward_device.h 10 * This interface facilitates the creation of a virtual device used for 11 * dispatching faults to external handlers. For example when using CAmkES, 12 * a device frame for a real device can be given to a different CAmkES component 13 * and this virtual device will forward read and write faults over a CAmkES 14 * interface so the component can perform or emulate the actions. 15 */ 16 17#include <stdint.h> 18#include <sel4vm/guest_vm.h> 19#include <sel4vmmplatsupport/device.h> 20 21typedef void (*forward_write_fn)(uint32_t addr, uint32_t value); 22typedef uint32_t (*forward_read_fn)(uint32_t addr); 23 24/*** 25 * @struct generic_forward_cfg 26 * Interface for forwarding read and write faults 27 * @param {forward_write_fn} write_fn A callback for forwarding write faults 28 * @param {forward_read_fn} read_fn A callback for forwarding read faults 29 */ 30struct generic_forward_cfg { 31 forward_write_fn write_fn; 32 forward_read_fn read_fn; 33}; 34 35/*** 36 * @function vm_install_generic_forward_device(vm, d, cfg) 37 * Install the virtual forwarding device into a VM instance 38 * @param {vm_t *} vm A handle to the VM 39 * @param {const struct device *} Virtual device being forwarded 40 * @param {struct generic_forward_cfg} Interface for forwarding the devices read and write faults 41 * @return -1 for error, otherwise 0 for success 42 */ 43int vm_install_generic_forward_device(vm_t *vm, const struct device *d, 44 struct generic_forward_cfg cfg); 45