drivers/tee/optee/optee_smc.h
Source file repositories/reference/linux-study-clean/drivers/tee/optee/optee_smc.h
File Facts
- System
- Linux kernel
- Corpus path
drivers/tee/optee/optee_smc.h- Extension
.h- Size
- 20987 bytes
- Lines
- 641
- Domain
- Driver Families
- Bucket
- drivers/tee
- Inferred role
- Driver Families: implementation source
- Status
- source implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/arm-smccc.hlinux/bitops.h
Detected Declarations
struct optee_smc_calls_revision_resultstruct optee_smc_call_get_os_revision_resultstruct optee_smc_get_shm_config_resultstruct optee_smc_exchange_capabilities_resultstruct optee_smc_disable_shm_cache_resultstruct optee_smc_get_protmem_config_resultfunction RPC
Annotated Snippet
struct optee_smc_calls_revision_result {
unsigned long major;
unsigned long minor;
unsigned long reserved0;
unsigned long reserved1;
};
/*
* Get UUID of Trusted OS.
*
* Used by non-secure world to figure out which Trusted OS is installed.
* Note that returned UUID is the UUID of the Trusted OS, not of the API.
*
* Returns UUID in a0-4 in the same way as OPTEE_SMC_CALLS_UID
* described above.
*/
#define OPTEE_SMC_FUNCID_GET_OS_UUID OPTEE_MSG_FUNCID_GET_OS_UUID
#define OPTEE_SMC_CALL_GET_OS_UUID \
OPTEE_SMC_FAST_CALL_VAL(OPTEE_SMC_FUNCID_GET_OS_UUID)
/*
* Get revision of Trusted OS.
*
* Used by non-secure world to figure out which version of the Trusted OS
* is installed. Note that the returned revision is the revision of the
* Trusted OS, not of the API.
*
* Returns revision in a0-1 in the same way as OPTEE_SMC_CALLS_REVISION
* described above. May optionally return a 32-bit build identifier in a2,
* with zero meaning unspecified.
*/
#define OPTEE_SMC_FUNCID_GET_OS_REVISION OPTEE_MSG_FUNCID_GET_OS_REVISION
#define OPTEE_SMC_CALL_GET_OS_REVISION \
OPTEE_SMC_FAST_CALL_VAL(OPTEE_SMC_FUNCID_GET_OS_REVISION)
struct optee_smc_call_get_os_revision_result {
unsigned long major;
unsigned long minor;
unsigned long build_id;
unsigned long reserved1;
};
/*
* Load Trusted OS from optee/tee.bin in the Linux firmware.
*
* WARNING: Use this cautiously as it could lead to insecure loading of the
* Trusted OS.
* This SMC instructs EL3 to load a binary and execute it as the Trusted OS.
*
* Call register usage:
* a0 SMC Function ID, OPTEE_SMC_CALL_LOAD_IMAGE
* a1 Upper 32bit of a 64bit size for the payload
* a2 Lower 32bit of a 64bit size for the payload
* a3 Upper 32bit of the physical address for the payload
* a4 Lower 32bit of the physical address for the payload
*
* The payload is in the OP-TEE image format.
*
* Returns result in a0, 0 on success and an error code otherwise.
*/
#define OPTEE_SMC_FUNCID_LOAD_IMAGE 2
#define OPTEE_SMC_CALL_LOAD_IMAGE \
ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL, ARM_SMCCC_SMC_32, \
ARM_SMCCC_OWNER_TRUSTED_OS_END, \
OPTEE_SMC_FUNCID_LOAD_IMAGE)
/*
* Call with struct optee_msg_arg as argument
*
* When called with OPTEE_SMC_CALL_WITH_RPC_ARG or
* OPTEE_SMC_CALL_WITH_REGD_ARG in a0 there is one RPC struct optee_msg_arg
* following after the first struct optee_msg_arg. The RPC struct
* optee_msg_arg has reserved space for the number of RPC parameters as
* returned by OPTEE_SMC_EXCHANGE_CAPABILITIES.
*
* When calling these functions, normal world has a few responsibilities:
* 1. It must be able to handle eventual RPCs
* 2. Non-secure interrupts should not be masked
* 3. If asynchronous notifications has been negotiated successfully, then
* the interrupt for asynchronous notifications should be unmasked
* during this call.
*
* Call register usage, OPTEE_SMC_CALL_WITH_ARG and
* OPTEE_SMC_CALL_WITH_RPC_ARG:
* a0 SMC Function ID, OPTEE_SMC_CALL_WITH_ARG or OPTEE_SMC_CALL_WITH_RPC_ARG
* a1 Upper 32 bits of a 64-bit physical pointer to a struct optee_msg_arg
* a2 Lower 32 bits of a 64-bit physical pointer to a struct optee_msg_arg
* a3 Cache settings, not used if physical pointer is in a predefined shared
* memory area else per OPTEE_SMC_SHM_*
* a4-6 Not used
Annotation
- Immediate include surface: `linux/arm-smccc.h`, `linux/bitops.h`.
- Detected declarations: `struct optee_smc_calls_revision_result`, `struct optee_smc_call_get_os_revision_result`, `struct optee_smc_get_shm_config_result`, `struct optee_smc_exchange_capabilities_result`, `struct optee_smc_disable_shm_cache_result`, `struct optee_smc_get_protmem_config_result`, `function RPC`.
- Atlas domain: Driver Families / drivers/tee.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.