blob: f926491fc552f831a951b09df9f6b1a8df7f9081 [file] [log] [blame]
Soby Mathewb4c6df42022-11-09 11:13:29 +00001/*
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 */
14enum buffer_slot;
15
16/* Fake host wrapper to read and write sysregs */
17u_register_t host_read_sysreg(char *reg_name);
18void host_write_sysreg(char *reg_name, u_register_t v);
19
20struct spinlock_s;
21/* Fake host harness to lock and release spin lock */
22void host_spinlock_acquire(struct spinlock_s *l);
23void 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
39bool 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 */
53bool 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 */
62int host_run_realm(unsigned long *regs);
63
64/*
65 * Fake Host wrapper for monitor_call.
66 */
67unsigned 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
71struct smc_result;
72/*
73 * Fake Host wrapper for monitor_call_with_res.
74 */
75void 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 */
85void *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 */
92void host_buffer_arch_unmap(void *buf);
93
94#endif /* HOST_HARNESS_H */