Line data Source code
1 0 : /*
2 : * Copyright 2020 Carlo Caione <ccaione@baylibre.com>
3 : *
4 : * SPDX-License-Identifier: Apache-2.0
5 : */
6 :
7 : #ifndef ZEPHYR_INCLUDE_ARCH_ARM64_SMCCC_H_
8 : #define ZEPHYR_INCLUDE_ARCH_ARM64_SMCCC_H_
9 :
10 : /*
11 : * Result from SMC/HVC call
12 : * @a0-a7 result values from registers 0 to 7
13 : */
14 0 : struct arm_smccc_res {
15 0 : unsigned long a0;
16 0 : unsigned long a1;
17 0 : unsigned long a2;
18 0 : unsigned long a3;
19 0 : unsigned long a4;
20 0 : unsigned long a5;
21 0 : unsigned long a6;
22 0 : unsigned long a7;
23 : };
24 :
25 0 : typedef struct arm_smccc_res arm_smccc_res_t;
26 :
27 0 : enum arm_smccc_conduit {
28 : SMCCC_CONDUIT_NONE,
29 : SMCCC_CONDUIT_SMC,
30 : SMCCC_CONDUIT_HVC,
31 : };
32 :
33 : /*
34 : * @brief Make HVC calls
35 : *
36 : * @param a0 function identifier
37 : * @param a1-a7 parameters registers
38 : * @param res results
39 : */
40 0 : void arm_smccc_hvc(unsigned long a0, unsigned long a1,
41 : unsigned long a2, unsigned long a3,
42 : unsigned long a4, unsigned long a5,
43 : unsigned long a6, unsigned long a7,
44 : struct arm_smccc_res *res);
45 :
46 : /*
47 : * @brief Make SMC calls
48 : *
49 : * @param a0 function identifier
50 : * @param a1-a7 parameters registers
51 : * @param res results
52 : */
53 0 : void arm_smccc_smc(unsigned long a0, unsigned long a1,
54 : unsigned long a2, unsigned long a3,
55 : unsigned long a4, unsigned long a5,
56 : unsigned long a6, unsigned long a7,
57 : struct arm_smccc_res *res);
58 :
59 : #endif /* ZEPHYR_INCLUDE_ARCH_ARM64_SMCCC_H_ */
|