1 /* 2 * SPDX-License-Identifier: BSD-3-Clause 3 * SPDX-FileCopyrightText: Copyright TF-RMM Contributors. 4 */ 5 #ifndef HOST_HARNESS_H 6 #define HOST_HARNESS_H 7 8 #include <stdbool.h> 9 #include <stddef.h> 10 #include <stdint.h> 11 #include <types.h> 12 13 /* Forward declaration of buffer_slot */ 14 enum buffer_slot; 15 16 /* Fake host wrapper to read and write sysregs */ 17 u_register_t host_read_sysreg(char *reg_name); 18 void host_write_sysreg(char *reg_name, u_register_t v); 19 20 struct spinlock_s; 21 /* Fake host harness to lock and release spin lock */ 22 void host_spinlock_acquire(struct spinlock_s *l); 23 void host_spinlock_release(struct spinlock_s *l); 24 25 /* 26 * Fake host Wrapper to copy data from NS into Realm memory. The function 27 * returns true if the copy succeeds. If the access to the NS memory generates 28 * a fault, false is returned to the caller. In case of failure 29 * (when false is returned), partial data may have been written to the 30 * destination buffer. 31 * 32 * Args: 33 * dest - The address of buffer in Realm memory to write into. 34 * ns_src - The address of buffer in NS memory to read from. 35 * size - The number of bytes to copy. 36 * All arguments must be aligned to 8 bytes. 37 */ 38 39 bool host_memcpy_ns_read(void *dest, const void *ns_src, unsigned long size); 40 41 /* 42 * Fake host wrapper to copy data from Realm into NS memory.The function 43 * returns true if the copy succeeds. If the access to the NS memory generates 44 * a fault, false is returned to the caller. In case of failure (when false is 45 * returned), partial data may have been written to the destination buffer. 46 * 47 * Args: 48 * ns_dest - The address of buffer in NS memory to write into. 49 * src - The address of buffer in Realm memory to read from. 50 * size - The number of bytes to copy. 51 * All arguments must be aligned to 8 bytes. 52 */ 53 bool host_memcpy_ns_write(void *ns_dest, const void *src, unsigned long size); 54 55 /* 56 * Fake host wrapper to run a realm. 57 * Args: 58 * regs - pointer to GP regs to be restored/save when entering/exiting 59 * Realm 60 * Return: Realm exception syndrome return. 61 */ 62 int host_run_realm(unsigned long *regs); 63 64 /* 65 * Fake Host wrapper for monitor_call. 66 */ 67 unsigned long host_monitor_call(unsigned long id, unsigned long arg0, 68 unsigned long arg1, unsigned long arg2, unsigned long arg3, 69 unsigned long arg4, unsigned long arg5); 70 71 struct smc_result; 72 /* 73 * Fake Host wrapper for monitor_call_with_res. 74 */ 75 void host_monitor_call_with_res(unsigned long id, unsigned long arg0, 76 unsigned long arg1, unsigned long arg2, unsigned long arg3, 77 unsigned long arg4, unsigned long arg5, 78 struct smc_result *res); 79 80 /* 81 * Fake host wrapper to map a given PA. 82 * 83 * It returns the VA to which the buffer is mapped. 84 */ 85 void *host_buffer_arch_map(enum buffer_slot slot, 86 unsigned long addr, bool ns); 87 88 /* 89 * Fake host wrapper to unmap a buffer slot correspondig to the VA passed 90 * in `buf`. 91 */ 92 void host_buffer_arch_unmap(void *buf); 93 94 #endif /* HOST_HARNESS_H */ 95