123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169 |
- /*
- * 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*/
|