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