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