blob: 2b9cc2ed25f25ae8b6f8f4b77a3063e4f23d4d69 [file] [log] [blame]
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +02001/*
2 * Copyright (c) 2018, Arm Limited. All rights reserved.
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7#ifndef SP_HELPERS_H
8#define SP_HELPERS_H
9
10#include <stdint.h>
J-Alves5aecd982020-06-11 10:25:33 +010011#include <tftf_lib.h>
12#include <ffa_helpers.h>
13
14#define SPM_VM_ID_FIRST (1)
15
16#define SPM_VM_GET_COUNT (0xFF01)
17#define SPM_VCPU_GET_COUNT (0xFF02)
18#define SPM_DEBUG_LOG (0xBD000000)
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +020019
20typedef struct {
Sandrine Bailleux17795062018-12-13 16:02:41 +010021 u_register_t fid;
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +020022 u_register_t arg1;
23 u_register_t arg2;
24 u_register_t arg3;
25 u_register_t arg4;
26 u_register_t arg5;
27 u_register_t arg6;
28 u_register_t arg7;
29} svc_args;
30
31/*
32 * Trigger an SVC call.
33 *
34 * The arguments to pass through the SVC call must be stored in the svc_args
35 * structure. The return values of the SVC call will be stored in the same
36 * structure (overriding the input arguments).
37 *
Sandrine Bailleux17795062018-12-13 16:02:41 +010038 * Return the first return value. It is equivalent to args.fid but is also
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +020039 * provided as the return value for convenience.
40 */
41u_register_t sp_svc(svc_args *args);
42
43/*
44 * Choose a pseudo-random number within the [min,max] range (both limits are
45 * inclusive).
46 */
47uintptr_t bound_rand(uintptr_t min, uintptr_t max);
48
49/*
50 * Check that expr == expected.
51 * If not, loop forever.
52 */
53void expect(int expr, int expected);
54
55/*
56 * Test framework functions
57 */
58
59void announce_test_section_start(const char *test_sect_desc);
60void announce_test_section_end(const char *test_sect_desc);
61
62void announce_test_start(const char *test_desc);
63void announce_test_end(const char *test_desc);
64
Antonio Nino Diaz2ac6f8f2018-07-02 09:04:07 +010065/* Sleep for at least 'ms' milliseconds. */
66void sp_sleep(uint32_t ms);
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +020067
J-Alves5aecd982020-06-11 10:25:33 +010068/*
69 * Hypervisor Calls Wrappers
70 */
71
72ffa_vcpu_count_t spm_vcpu_get_count(ffa_vm_id_t vm_id);
73
74ffa_vm_count_t spm_vm_get_count(void);
75
76void spm_debug_log(char c);
77
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +020078#endif /* SP_HELPERS_H */