xref: /kvm-unit-tests/lib/arm/asm/arm-smccc.h (revision 201b9e8bdc84c6436dd53b45d93a60c681b92719)
1*cddb18bcSAlexandru Elisei /* SPDX-License-Identifier: GPL-2.0 */
2*cddb18bcSAlexandru Elisei /*
3*cddb18bcSAlexandru Elisei  * Copyright (C) 2022 Arm Limited.
4*cddb18bcSAlexandru Elisei  * All rights reserved.
5*cddb18bcSAlexandru Elisei  */
6*cddb18bcSAlexandru Elisei #ifndef _ASMARM_ARM_SMCCC_H_
7*cddb18bcSAlexandru Elisei #define _ASMARM_ARM_SMCCC_H_
8*cddb18bcSAlexandru Elisei 
9*cddb18bcSAlexandru Elisei struct smccc_result {
10*cddb18bcSAlexandru Elisei 	unsigned long r0;
11*cddb18bcSAlexandru Elisei 	unsigned long r1;
12*cddb18bcSAlexandru Elisei 	unsigned long r2;
13*cddb18bcSAlexandru Elisei 	unsigned long r3;
14*cddb18bcSAlexandru Elisei 	unsigned long r4;
15*cddb18bcSAlexandru Elisei 	unsigned long r5;
16*cddb18bcSAlexandru Elisei 	unsigned long r6;
17*cddb18bcSAlexandru Elisei 	unsigned long r7;
18*cddb18bcSAlexandru Elisei 	unsigned long r8;
19*cddb18bcSAlexandru Elisei 	unsigned long r9;
20*cddb18bcSAlexandru Elisei };
21*cddb18bcSAlexandru Elisei 
22*cddb18bcSAlexandru Elisei typedef int (*smccc_invoke_fn)(unsigned int function_id, unsigned long arg0,
23*cddb18bcSAlexandru Elisei 			       unsigned long arg1, unsigned long arg2,
24*cddb18bcSAlexandru Elisei 			       unsigned long arg3, unsigned long arg4,
25*cddb18bcSAlexandru Elisei 			       unsigned long arg5, unsigned long arg6,
26*cddb18bcSAlexandru Elisei 			       unsigned long arg7, unsigned long arg8,
27*cddb18bcSAlexandru Elisei 			       unsigned long arg9, unsigned long arg10,
28*cddb18bcSAlexandru Elisei 			       struct smccc_result *result);
29*cddb18bcSAlexandru Elisei extern int arm_smccc_hvc(unsigned int function_id, unsigned long arg0,
30*cddb18bcSAlexandru Elisei 			 unsigned long arg1, unsigned long arg2,
31*cddb18bcSAlexandru Elisei 			 unsigned long arg3, unsigned long arg4,
32*cddb18bcSAlexandru Elisei 			 unsigned long arg5, unsigned long arg6,
33*cddb18bcSAlexandru Elisei 			 unsigned long arg7, unsigned long arg8,
34*cddb18bcSAlexandru Elisei 			 unsigned long arg9, unsigned long arg10,
35*cddb18bcSAlexandru Elisei 			 struct smccc_result *result);
36*cddb18bcSAlexandru Elisei extern int arm_smccc_smc(unsigned int function_id, unsigned long arg0,
37*cddb18bcSAlexandru Elisei 			 unsigned long arg1, unsigned long arg2,
38*cddb18bcSAlexandru Elisei 			 unsigned long arg3, unsigned long arg4,
39*cddb18bcSAlexandru Elisei 			 unsigned long arg5, unsigned long arg6,
40*cddb18bcSAlexandru Elisei 			 unsigned long arg7, unsigned long arg8,
41*cddb18bcSAlexandru Elisei 			 unsigned long arg9, unsigned long arg10,
42*cddb18bcSAlexandru Elisei 			 struct smccc_result *result);
43*cddb18bcSAlexandru Elisei 
44*cddb18bcSAlexandru Elisei #endif /* _ASMARM_ARM_SMCCC_H_ */
45