blob: ec9222789cbe9c5940c7aa0c046367e12fa2fe41 [file] [log] [blame]
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +02001/*
Olivier Deprez0be4abe2020-08-04 11:26:13 +02002 * Copyright (c) 2018-2020, Arm Limited. All rights reserved.
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +02003 *
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
Olivier Deprez0be4abe2020-08-04 11:26:13 +020014#define SPM_VM_ID_FIRST SP_ID(1)
J-Alves5aecd982020-06-11 10:25:33 +010015
Manish Pandey6b3840a2020-09-15 22:31:58 +010016/* Should match with IDs defined in SPM/Hafnium */
17#define SPM_INTERRUPT_GET (0xFF04)
J-Alves5aecd982020-06-11 10:25:33 +010018#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
Manish Pandey6b3840a2020-09-15 22:31:58 +010072ffa_int_id_t spm_interrupt_get(void);
J-Alves5aecd982020-06-11 10:25:33 +010073
74void spm_debug_log(char c);
75
Sandrine Bailleux3cd87d72018-10-09 11:12:55 +020076#endif /* SP_HELPERS_H */