xref: /rk3399_ARM-atf/services/spd/opteed/teesmc_opteed.h (revision aa5da46138e1583990086b76b56e0a9186cb7b7d)
1*aa5da461SJens Wiklander /*
2*aa5da461SJens Wiklander  * Copyright (c) 2014, ARM Limited and Contributors. All rights reserved.
3*aa5da461SJens Wiklander  *
4*aa5da461SJens Wiklander  * Redistribution and use in source and binary forms, with or without
5*aa5da461SJens Wiklander  * modification, are permitted provided that the following conditions are met:
6*aa5da461SJens Wiklander  *
7*aa5da461SJens Wiklander  * Redistributions of source code must retain the above copyright notice, this
8*aa5da461SJens Wiklander  * list of conditions and the following disclaimer.
9*aa5da461SJens Wiklander  *
10*aa5da461SJens Wiklander  * Redistributions in binary form must reproduce the above copyright notice,
11*aa5da461SJens Wiklander  * this list of conditions and the following disclaimer in the documentation
12*aa5da461SJens Wiklander  * and/or other materials provided with the distribution.
13*aa5da461SJens Wiklander  *
14*aa5da461SJens Wiklander  * Neither the name of ARM nor the names of its contributors may be used
15*aa5da461SJens Wiklander  * to endorse or promote products derived from this software without specific
16*aa5da461SJens Wiklander  * prior written permission.
17*aa5da461SJens Wiklander  *
18*aa5da461SJens Wiklander  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19*aa5da461SJens Wiklander  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20*aa5da461SJens Wiklander  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21*aa5da461SJens Wiklander  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
22*aa5da461SJens Wiklander  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23*aa5da461SJens Wiklander  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24*aa5da461SJens Wiklander  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25*aa5da461SJens Wiklander  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
26*aa5da461SJens Wiklander  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
27*aa5da461SJens Wiklander  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
28*aa5da461SJens Wiklander  * POSSIBILITY OF SUCH DAMAGE.
29*aa5da461SJens Wiklander  */
30*aa5da461SJens Wiklander 
31*aa5da461SJens Wiklander /* Copyright (c) 2014, Linaro Limited. All rights reserved. */
32*aa5da461SJens Wiklander 
33*aa5da461SJens Wiklander #ifndef TEESMC_OPTEED_H
34*aa5da461SJens Wiklander #define TEESMC_OPTEED_H
35*aa5da461SJens Wiklander 
36*aa5da461SJens Wiklander /*
37*aa5da461SJens Wiklander  * This file specify SMC function IDs used when returning from TEE to the
38*aa5da461SJens Wiklander  * secure monitor.
39*aa5da461SJens Wiklander  *
40*aa5da461SJens Wiklander  * All SMC Function IDs indicates SMC32 Calling Convention but will carry
41*aa5da461SJens Wiklander  * full 64 bit values in the argument registers if invoked from Aarch64
42*aa5da461SJens Wiklander  * mode. This violates the SMC Calling Convention, but since this
43*aa5da461SJens Wiklander  * convention only coveres API towards Normwal World it's something that
44*aa5da461SJens Wiklander  * only concerns the OP-TEE Dispatcher in ARM Trusted Firmware and OP-TEE
45*aa5da461SJens Wiklander  * OS at Secure EL1.
46*aa5da461SJens Wiklander  */
47*aa5da461SJens Wiklander 
48*aa5da461SJens Wiklander /*
49*aa5da461SJens Wiklander  * Issued when returning from initial entry.
50*aa5da461SJens Wiklander  *
51*aa5da461SJens Wiklander  * Register usage:
52*aa5da461SJens Wiklander  * r0/x0	SMC Function ID, TEESMC_OPTEED_RETURN_ENTRY_DONE
53*aa5da461SJens Wiklander  * r1/x1	Pointer to entry vector
54*aa5da461SJens Wiklander  */
55*aa5da461SJens Wiklander #define TEESMC_OPTEED_FUNCID_RETURN_ENTRY_DONE		0
56*aa5da461SJens Wiklander #define TEESMC_OPTEED_RETURN_ENTRY_DONE \
57*aa5da461SJens Wiklander 	TEESMC_OPTEED_RV(TEESMC_OPTEED_FUNCID_RETURN_ENTRY_DONE)
58*aa5da461SJens Wiklander 
59*aa5da461SJens Wiklander 
60*aa5da461SJens Wiklander 
61*aa5da461SJens Wiklander /*
62*aa5da461SJens Wiklander  * Issued when returning from "cpu_on" vector
63*aa5da461SJens Wiklander  *
64*aa5da461SJens Wiklander  * Register usage:
65*aa5da461SJens Wiklander  * r0/x0	SMC Function ID, TEESMC_OPTEED_RETURN_ON_DONE
66*aa5da461SJens Wiklander  * r1/x1	0 on success and anything else to indicate error condition
67*aa5da461SJens Wiklander  */
68*aa5da461SJens Wiklander #define TEESMC_OPTEED_FUNCID_RETURN_ON_DONE		1
69*aa5da461SJens Wiklander #define TEESMC_OPTEED_RETURN_ON_DONE \
70*aa5da461SJens Wiklander 	TEESMC_OPTEED_RV(TEESMC_OPTEED_FUNCID_RETURN_ON_DONE)
71*aa5da461SJens Wiklander 
72*aa5da461SJens Wiklander /*
73*aa5da461SJens Wiklander  * Issued when returning from "cpu_off" vector
74*aa5da461SJens Wiklander  *
75*aa5da461SJens Wiklander  * Register usage:
76*aa5da461SJens Wiklander  * r0/x0	SMC Function ID, TEESMC_OPTEED_RETURN_OFF_DONE
77*aa5da461SJens Wiklander  * r1/x1	0 on success and anything else to indicate error condition
78*aa5da461SJens Wiklander  */
79*aa5da461SJens Wiklander #define TEESMC_OPTEED_FUNCID_RETURN_OFF_DONE		2
80*aa5da461SJens Wiklander #define TEESMC_OPTEED_RETURN_OFF_DONE \
81*aa5da461SJens Wiklander 	TEESMC_OPTEED_RV(TEESMC_OPTEED_FUNCID_RETURN_OFF_DONE)
82*aa5da461SJens Wiklander 
83*aa5da461SJens Wiklander /*
84*aa5da461SJens Wiklander  * Issued when returning from "cpu_suspend" vector
85*aa5da461SJens Wiklander  *
86*aa5da461SJens Wiklander  * Register usage:
87*aa5da461SJens Wiklander  * r0/x0	SMC Function ID, TEESMC_OPTEED_RETURN_SUSPEND_DONE
88*aa5da461SJens Wiklander  * r1/x1	0 on success and anything else to indicate error condition
89*aa5da461SJens Wiklander  */
90*aa5da461SJens Wiklander #define TEESMC_OPTEED_FUNCID_RETURN_SUSPEND_DONE	3
91*aa5da461SJens Wiklander #define TEESMC_OPTEED_RETURN_SUSPEND_DONE \
92*aa5da461SJens Wiklander 	TEESMC_OPTEED_RV(TEESMC_OPTEED_FUNCID_RETURN_SUSPEND_DONE)
93*aa5da461SJens Wiklander 
94*aa5da461SJens Wiklander /*
95*aa5da461SJens Wiklander  * Issued when returning from "cpu_resume" vector
96*aa5da461SJens Wiklander  *
97*aa5da461SJens Wiklander  * Register usage:
98*aa5da461SJens Wiklander  * r0/x0	SMC Function ID, TEESMC_OPTEED_RETURN_RESUME_DONE
99*aa5da461SJens Wiklander  * r1/x1	0 on success and anything else to indicate error condition
100*aa5da461SJens Wiklander  */
101*aa5da461SJens Wiklander #define TEESMC_OPTEED_FUNCID_RETURN_RESUME_DONE		4
102*aa5da461SJens Wiklander #define TEESMC_OPTEED_RETURN_RESUME_DONE \
103*aa5da461SJens Wiklander 	TEESMC_OPTEED_RV(TEESMC_OPTEED_FUNCID_RETURN_RESUME_DONE)
104*aa5da461SJens Wiklander 
105*aa5da461SJens Wiklander /*
106*aa5da461SJens Wiklander  * Issued when returning from "std_smc" or "fast_smc" vector
107*aa5da461SJens Wiklander  *
108*aa5da461SJens Wiklander  * Register usage:
109*aa5da461SJens Wiklander  * r0/x0	SMC Function ID, TEESMC_OPTEED_RETURN_CALL_DONE
110*aa5da461SJens Wiklander  * r1-4/x1-4	Return value 0-3 which will passed to normal world in
111*aa5da461SJens Wiklander  *		r0-3/x0-3
112*aa5da461SJens Wiklander  */
113*aa5da461SJens Wiklander #define TEESMC_OPTEED_FUNCID_RETURN_CALL_DONE		5
114*aa5da461SJens Wiklander #define TEESMC_OPTEED_RETURN_CALL_DONE \
115*aa5da461SJens Wiklander 	TEESMC_OPTEED_RV(TEESMC_OPTEED_FUNCID_RETURN_CALL_DONE)
116*aa5da461SJens Wiklander 
117*aa5da461SJens Wiklander /*
118*aa5da461SJens Wiklander  * Issued when returning from "fiq" vector
119*aa5da461SJens Wiklander  *
120*aa5da461SJens Wiklander  * Register usage:
121*aa5da461SJens Wiklander  * r0/x0	SMC Function ID, TEESMC_OPTEED_RETURN_FIQ_DONE
122*aa5da461SJens Wiklander  */
123*aa5da461SJens Wiklander #define TEESMC_OPTEED_FUNCID_RETURN_FIQ_DONE		6
124*aa5da461SJens Wiklander #define TEESMC_OPTEED_RETURN_FIQ_DONE \
125*aa5da461SJens Wiklander 	TEESMC_OPTEED_RV(TEESMC_OPTEED_FUNCID_RETURN_FIQ_DONE)
126*aa5da461SJens Wiklander 
127*aa5da461SJens Wiklander /*
128*aa5da461SJens Wiklander  * Issued when returning from "system_off" vector
129*aa5da461SJens Wiklander  *
130*aa5da461SJens Wiklander  * Register usage:
131*aa5da461SJens Wiklander  * r0/x0	SMC Function ID, TEESMC_OPTEED_RETURN_SYSTEM_OFF_DONE
132*aa5da461SJens Wiklander  */
133*aa5da461SJens Wiklander #define TEESMC_OPTEED_FUNCID_RETURN_SYSTEM_OFF_DONE	7
134*aa5da461SJens Wiklander #define TEESMC_OPTEED_RETURN_SYSTEM_OFF_DONE \
135*aa5da461SJens Wiklander 	TEESMC_OPTEED_RV(TEESMC_OPTEED_FUNCID_RETURN_SYSTEM_OFF_DONE)
136*aa5da461SJens Wiklander 
137*aa5da461SJens Wiklander /*
138*aa5da461SJens Wiklander  * Issued when returning from "system_reset" vector
139*aa5da461SJens Wiklander  *
140*aa5da461SJens Wiklander  * Register usage:
141*aa5da461SJens Wiklander  * r0/x0	SMC Function ID, TEESMC_OPTEED_RETURN_SYSTEM_RESET_DONE
142*aa5da461SJens Wiklander  */
143*aa5da461SJens Wiklander #define TEESMC_OPTEED_FUNCID_RETURN_SYSTEM_RESET_DONE	8
144*aa5da461SJens Wiklander #define TEESMC_OPTEED_RETURN_SYSTEM_RESET_DONE \
145*aa5da461SJens Wiklander 	TEESMC_OPTEED_RV(TEESMC_OPTEED_FUNCID_RETURN_SYSTEM_RESET_DONE)
146*aa5da461SJens Wiklander 
147*aa5da461SJens Wiklander #endif /*TEESMC_OPTEED_H*/
148