| /* |
| * Copyright (c) 2014-2023, ARM Limited and Contributors. All rights reserved. |
| * |
| * SPDX-License-Identifier: BSD-3-Clause |
| */ |
| |
| /* Copyright (c) 2014, Linaro Limited. All rights reserved. */ |
| |
| #ifndef TEESMC_OPTEED_H |
| #define TEESMC_OPTEED_H |
| |
| #include "teesmc_opteed_macros.h" |
| |
| /* |
| * This section specifies SMC function IDs used when returning from TEE to the |
| * secure monitor. |
| * |
| * All SMC Function IDs indicates SMC32 Calling Convention but will carry |
| * full 64 bit values in the argument registers if invoked from Aarch64 |
| * mode. This violates the SMC Calling Convention, but since this |
| * convention only coveres API towards Normal World it's something that |
| * only concerns the OP-TEE Dispatcher in Trusted Firmware-A and OP-TEE |
| * OS at Secure EL1. |
| */ |
| |
| /* |
| * Issued when returning from initial entry. |
| * |
| * Register usage: |
| * r0/x0 SMC Function ID, TEESMC_OPTEED_RETURN_ENTRY_DONE |
| * r1/x1 Pointer to entry vector |
| */ |
| #define TEESMC_OPTEED_FUNCID_RETURN_ENTRY_DONE 0 |
| #define TEESMC_OPTEED_RETURN_ENTRY_DONE \ |
| TEESMC_OPTEED_RV(TEESMC_OPTEED_FUNCID_RETURN_ENTRY_DONE) |
| |
| |
| |
| /* |
| * Issued when returning from "cpu_on" vector |
| * |
| * Register usage: |
| * r0/x0 SMC Function ID, TEESMC_OPTEED_RETURN_ON_DONE |
| * r1/x1 0 on success and anything else to indicate error condition |
| */ |
| #define TEESMC_OPTEED_FUNCID_RETURN_ON_DONE 1 |
| #define TEESMC_OPTEED_RETURN_ON_DONE \ |
| TEESMC_OPTEED_RV(TEESMC_OPTEED_FUNCID_RETURN_ON_DONE) |
| |
| /* |
| * Issued when returning from "cpu_off" vector |
| * |
| * Register usage: |
| * r0/x0 SMC Function ID, TEESMC_OPTEED_RETURN_OFF_DONE |
| * r1/x1 0 on success and anything else to indicate error condition |
| */ |
| #define TEESMC_OPTEED_FUNCID_RETURN_OFF_DONE 2 |
| #define TEESMC_OPTEED_RETURN_OFF_DONE \ |
| TEESMC_OPTEED_RV(TEESMC_OPTEED_FUNCID_RETURN_OFF_DONE) |
| |
| /* |
| * Issued when returning from "cpu_suspend" vector |
| * |
| * Register usage: |
| * r0/x0 SMC Function ID, TEESMC_OPTEED_RETURN_SUSPEND_DONE |
| * r1/x1 0 on success and anything else to indicate error condition |
| */ |
| #define TEESMC_OPTEED_FUNCID_RETURN_SUSPEND_DONE 3 |
| #define TEESMC_OPTEED_RETURN_SUSPEND_DONE \ |
| TEESMC_OPTEED_RV(TEESMC_OPTEED_FUNCID_RETURN_SUSPEND_DONE) |
| |
| /* |
| * Issued when returning from "cpu_resume" vector |
| * |
| * Register usage: |
| * r0/x0 SMC Function ID, TEESMC_OPTEED_RETURN_RESUME_DONE |
| * r1/x1 0 on success and anything else to indicate error condition |
| */ |
| #define TEESMC_OPTEED_FUNCID_RETURN_RESUME_DONE 4 |
| #define TEESMC_OPTEED_RETURN_RESUME_DONE \ |
| TEESMC_OPTEED_RV(TEESMC_OPTEED_FUNCID_RETURN_RESUME_DONE) |
| |
| /* |
| * Issued when returning from "std_smc" or "fast_smc" vector |
| * |
| * Register usage: |
| * r0/x0 SMC Function ID, TEESMC_OPTEED_RETURN_CALL_DONE |
| * r1-4/x1-4 Return value 0-3 which will passed to normal world in |
| * r0-3/x0-3 |
| */ |
| #define TEESMC_OPTEED_FUNCID_RETURN_CALL_DONE 5 |
| #define TEESMC_OPTEED_RETURN_CALL_DONE \ |
| TEESMC_OPTEED_RV(TEESMC_OPTEED_FUNCID_RETURN_CALL_DONE) |
| |
| /* |
| * Issued when returning from "fiq" vector |
| * |
| * Register usage: |
| * r0/x0 SMC Function ID, TEESMC_OPTEED_RETURN_FIQ_DONE |
| */ |
| #define TEESMC_OPTEED_FUNCID_RETURN_FIQ_DONE 6 |
| #define TEESMC_OPTEED_RETURN_FIQ_DONE \ |
| TEESMC_OPTEED_RV(TEESMC_OPTEED_FUNCID_RETURN_FIQ_DONE) |
| |
| /* |
| * Issued when returning from "system_off" vector |
| * |
| * Register usage: |
| * r0/x0 SMC Function ID, TEESMC_OPTEED_RETURN_SYSTEM_OFF_DONE |
| */ |
| #define TEESMC_OPTEED_FUNCID_RETURN_SYSTEM_OFF_DONE 7 |
| #define TEESMC_OPTEED_RETURN_SYSTEM_OFF_DONE \ |
| TEESMC_OPTEED_RV(TEESMC_OPTEED_FUNCID_RETURN_SYSTEM_OFF_DONE) |
| |
| /* |
| * Issued when returning from "system_reset" vector |
| * |
| * Register usage: |
| * r0/x0 SMC Function ID, TEESMC_OPTEED_RETURN_SYSTEM_RESET_DONE |
| */ |
| #define TEESMC_OPTEED_FUNCID_RETURN_SYSTEM_RESET_DONE 8 |
| #define TEESMC_OPTEED_RETURN_SYSTEM_RESET_DONE \ |
| TEESMC_OPTEED_RV(TEESMC_OPTEED_FUNCID_RETURN_SYSTEM_RESET_DONE) |
| |
| /* |
| * This section specifies SMC function IDs used when the secure monitor is |
| * invoked from the non-secure world. |
| */ |
| |
| /* |
| * Load OP-TEE image from the payload specified in the registers. |
| * |
| * WARNING: Use this cautiously as it could lead to insecure loading of the |
| * Trusted OS. Further details are in opteed.mk. |
| * |
| * Call register usage: |
| * x0 SMC Function ID, OPTEE_SMC_CALL_LOAD_IMAGE |
| * x1 Upper 32bit of a 64bit size for the payload |
| * x2 Lower 32bit of a 64bit size for the payload |
| * x3 Upper 32bit of the physical address for the payload |
| * x4 Lower 32bit of the physical address for the payload |
| * |
| * The payload consists of a optee_header struct that contains optee_image |
| * structs in a flex array, immediately following that in memory is the data |
| * referenced by the optee_image structs. |
| * Example: |
| * |
| * struct optee_header (with n images specified) |
| * image 0 data |
| * image 1 data |
| * ... |
| * image n-1 data |
| * |
| * Returns 0 on success and an error code otherwise. |
| */ |
| #define NSSMC_OPTEED_FUNCID_LOAD_IMAGE 2 |
| #define NSSMC_OPTEED_CALL_LOAD_IMAGE \ |
| NSSMC_OPTEED_CALL(NSSMC_OPTEED_FUNCID_LOAD_IMAGE) |
| |
| /* |
| * Returns the UID of the OP-TEE image loading service if image loading is |
| * enabled and the image had not been loaded yet. Otherwise this call will be |
| * passed through to OP-TEE where it will return the OP-TEE UID. |
| */ |
| #define NSSMC_OPTEED_FUNCID_CALLS_UID 0xFF01 |
| #define NSSMC_OPTEED_CALL_UID \ |
| NSSMC_OPTEED_CALL(NSSMC_OPTEED_FUNCID_CALLS_UID) |
| |
| #endif /*TEESMC_OPTEED_H*/ |