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