xref: /aosp_15_r20/external/arm-trusted-firmware/services/spd/opteed/teesmc_opteed.h (revision 54fd6939e177f8ff529b10183254802c76df6d08)
1*54fd6939SJiyong Park /*
2*54fd6939SJiyong Park  * Copyright (c) 2014-2019, ARM Limited and Contributors. All rights reserved.
3*54fd6939SJiyong Park  *
4*54fd6939SJiyong Park  * SPDX-License-Identifier: BSD-3-Clause
5*54fd6939SJiyong Park  */
6*54fd6939SJiyong Park 
7*54fd6939SJiyong Park /* Copyright (c) 2014, Linaro Limited. All rights reserved. */
8*54fd6939SJiyong Park 
9*54fd6939SJiyong Park #ifndef TEESMC_OPTEED_H
10*54fd6939SJiyong Park #define TEESMC_OPTEED_H
11*54fd6939SJiyong Park 
12*54fd6939SJiyong Park /*
13*54fd6939SJiyong Park  * This file specifies SMC function IDs used when returning from TEE to the
14*54fd6939SJiyong Park  * secure monitor.
15*54fd6939SJiyong Park  *
16*54fd6939SJiyong Park  * All SMC Function IDs indicates SMC32 Calling Convention but will carry
17*54fd6939SJiyong Park  * full 64 bit values in the argument registers if invoked from Aarch64
18*54fd6939SJiyong Park  * mode. This violates the SMC Calling Convention, but since this
19*54fd6939SJiyong Park  * convention only coveres API towards Normal World it's something that
20*54fd6939SJiyong Park  * only concerns the OP-TEE Dispatcher in Trusted Firmware-A and OP-TEE
21*54fd6939SJiyong Park  * OS at Secure EL1.
22*54fd6939SJiyong Park  */
23*54fd6939SJiyong Park 
24*54fd6939SJiyong Park /*
25*54fd6939SJiyong Park  * Issued when returning from initial entry.
26*54fd6939SJiyong Park  *
27*54fd6939SJiyong Park  * Register usage:
28*54fd6939SJiyong Park  * r0/x0	SMC Function ID, TEESMC_OPTEED_RETURN_ENTRY_DONE
29*54fd6939SJiyong Park  * r1/x1	Pointer to entry vector
30*54fd6939SJiyong Park  */
31*54fd6939SJiyong Park #define TEESMC_OPTEED_FUNCID_RETURN_ENTRY_DONE		0
32*54fd6939SJiyong Park #define TEESMC_OPTEED_RETURN_ENTRY_DONE \
33*54fd6939SJiyong Park 	TEESMC_OPTEED_RV(TEESMC_OPTEED_FUNCID_RETURN_ENTRY_DONE)
34*54fd6939SJiyong Park 
35*54fd6939SJiyong Park 
36*54fd6939SJiyong Park 
37*54fd6939SJiyong Park /*
38*54fd6939SJiyong Park  * Issued when returning from "cpu_on" vector
39*54fd6939SJiyong Park  *
40*54fd6939SJiyong Park  * Register usage:
41*54fd6939SJiyong Park  * r0/x0	SMC Function ID, TEESMC_OPTEED_RETURN_ON_DONE
42*54fd6939SJiyong Park  * r1/x1	0 on success and anything else to indicate error condition
43*54fd6939SJiyong Park  */
44*54fd6939SJiyong Park #define TEESMC_OPTEED_FUNCID_RETURN_ON_DONE		1
45*54fd6939SJiyong Park #define TEESMC_OPTEED_RETURN_ON_DONE \
46*54fd6939SJiyong Park 	TEESMC_OPTEED_RV(TEESMC_OPTEED_FUNCID_RETURN_ON_DONE)
47*54fd6939SJiyong Park 
48*54fd6939SJiyong Park /*
49*54fd6939SJiyong Park  * Issued when returning from "cpu_off" vector
50*54fd6939SJiyong Park  *
51*54fd6939SJiyong Park  * Register usage:
52*54fd6939SJiyong Park  * r0/x0	SMC Function ID, TEESMC_OPTEED_RETURN_OFF_DONE
53*54fd6939SJiyong Park  * r1/x1	0 on success and anything else to indicate error condition
54*54fd6939SJiyong Park  */
55*54fd6939SJiyong Park #define TEESMC_OPTEED_FUNCID_RETURN_OFF_DONE		2
56*54fd6939SJiyong Park #define TEESMC_OPTEED_RETURN_OFF_DONE \
57*54fd6939SJiyong Park 	TEESMC_OPTEED_RV(TEESMC_OPTEED_FUNCID_RETURN_OFF_DONE)
58*54fd6939SJiyong Park 
59*54fd6939SJiyong Park /*
60*54fd6939SJiyong Park  * Issued when returning from "cpu_suspend" vector
61*54fd6939SJiyong Park  *
62*54fd6939SJiyong Park  * Register usage:
63*54fd6939SJiyong Park  * r0/x0	SMC Function ID, TEESMC_OPTEED_RETURN_SUSPEND_DONE
64*54fd6939SJiyong Park  * r1/x1	0 on success and anything else to indicate error condition
65*54fd6939SJiyong Park  */
66*54fd6939SJiyong Park #define TEESMC_OPTEED_FUNCID_RETURN_SUSPEND_DONE	3
67*54fd6939SJiyong Park #define TEESMC_OPTEED_RETURN_SUSPEND_DONE \
68*54fd6939SJiyong Park 	TEESMC_OPTEED_RV(TEESMC_OPTEED_FUNCID_RETURN_SUSPEND_DONE)
69*54fd6939SJiyong Park 
70*54fd6939SJiyong Park /*
71*54fd6939SJiyong Park  * Issued when returning from "cpu_resume" vector
72*54fd6939SJiyong Park  *
73*54fd6939SJiyong Park  * Register usage:
74*54fd6939SJiyong Park  * r0/x0	SMC Function ID, TEESMC_OPTEED_RETURN_RESUME_DONE
75*54fd6939SJiyong Park  * r1/x1	0 on success and anything else to indicate error condition
76*54fd6939SJiyong Park  */
77*54fd6939SJiyong Park #define TEESMC_OPTEED_FUNCID_RETURN_RESUME_DONE		4
78*54fd6939SJiyong Park #define TEESMC_OPTEED_RETURN_RESUME_DONE \
79*54fd6939SJiyong Park 	TEESMC_OPTEED_RV(TEESMC_OPTEED_FUNCID_RETURN_RESUME_DONE)
80*54fd6939SJiyong Park 
81*54fd6939SJiyong Park /*
82*54fd6939SJiyong Park  * Issued when returning from "std_smc" or "fast_smc" vector
83*54fd6939SJiyong Park  *
84*54fd6939SJiyong Park  * Register usage:
85*54fd6939SJiyong Park  * r0/x0	SMC Function ID, TEESMC_OPTEED_RETURN_CALL_DONE
86*54fd6939SJiyong Park  * r1-4/x1-4	Return value 0-3 which will passed to normal world in
87*54fd6939SJiyong Park  *		r0-3/x0-3
88*54fd6939SJiyong Park  */
89*54fd6939SJiyong Park #define TEESMC_OPTEED_FUNCID_RETURN_CALL_DONE		5
90*54fd6939SJiyong Park #define TEESMC_OPTEED_RETURN_CALL_DONE \
91*54fd6939SJiyong Park 	TEESMC_OPTEED_RV(TEESMC_OPTEED_FUNCID_RETURN_CALL_DONE)
92*54fd6939SJiyong Park 
93*54fd6939SJiyong Park /*
94*54fd6939SJiyong Park  * Issued when returning from "fiq" vector
95*54fd6939SJiyong Park  *
96*54fd6939SJiyong Park  * Register usage:
97*54fd6939SJiyong Park  * r0/x0	SMC Function ID, TEESMC_OPTEED_RETURN_FIQ_DONE
98*54fd6939SJiyong Park  */
99*54fd6939SJiyong Park #define TEESMC_OPTEED_FUNCID_RETURN_FIQ_DONE		6
100*54fd6939SJiyong Park #define TEESMC_OPTEED_RETURN_FIQ_DONE \
101*54fd6939SJiyong Park 	TEESMC_OPTEED_RV(TEESMC_OPTEED_FUNCID_RETURN_FIQ_DONE)
102*54fd6939SJiyong Park 
103*54fd6939SJiyong Park /*
104*54fd6939SJiyong Park  * Issued when returning from "system_off" vector
105*54fd6939SJiyong Park  *
106*54fd6939SJiyong Park  * Register usage:
107*54fd6939SJiyong Park  * r0/x0	SMC Function ID, TEESMC_OPTEED_RETURN_SYSTEM_OFF_DONE
108*54fd6939SJiyong Park  */
109*54fd6939SJiyong Park #define TEESMC_OPTEED_FUNCID_RETURN_SYSTEM_OFF_DONE	7
110*54fd6939SJiyong Park #define TEESMC_OPTEED_RETURN_SYSTEM_OFF_DONE \
111*54fd6939SJiyong Park 	TEESMC_OPTEED_RV(TEESMC_OPTEED_FUNCID_RETURN_SYSTEM_OFF_DONE)
112*54fd6939SJiyong Park 
113*54fd6939SJiyong Park /*
114*54fd6939SJiyong Park  * Issued when returning from "system_reset" vector
115*54fd6939SJiyong Park  *
116*54fd6939SJiyong Park  * Register usage:
117*54fd6939SJiyong Park  * r0/x0	SMC Function ID, TEESMC_OPTEED_RETURN_SYSTEM_RESET_DONE
118*54fd6939SJiyong Park  */
119*54fd6939SJiyong Park #define TEESMC_OPTEED_FUNCID_RETURN_SYSTEM_RESET_DONE	8
120*54fd6939SJiyong Park #define TEESMC_OPTEED_RETURN_SYSTEM_RESET_DONE \
121*54fd6939SJiyong Park 	TEESMC_OPTEED_RV(TEESMC_OPTEED_FUNCID_RETURN_SYSTEM_RESET_DONE)
122*54fd6939SJiyong Park 
123*54fd6939SJiyong Park #endif /*TEESMC_OPTEED_H*/
124