diff options
Diffstat (limited to 'core')
-rw-r--r-- | core/arch/arm/include/sm/optee_smc.h | 25 | ||||
-rw-r--r-- | core/arch/arm/tee/entry_fast.c | 11 |
2 files changed, 35 insertions, 1 deletions
diff --git a/core/arch/arm/include/sm/optee_smc.h b/core/arch/arm/include/sm/optee_smc.h index 2b0463bc..408dae26 100644 --- a/core/arch/arm/include/sm/optee_smc.h +++ b/core/arch/arm/include/sm/optee_smc.h @@ -423,6 +423,31 @@ OPTEE_SMC_FAST_CALL_VAL(OPTEE_SMC_FUNCID_VM_DESTROYED) /* + * Query OP-TEE about number of supported threads + * + * Normal World OS or Hypervisor issues this call to find out how many + * threads OP-TEE supports. That is how many standard calls can be issued + * in parallel before OP-TEE will return OPTEE_SMC_RETURN_ETHREAD_LIMIT. + * + * Call requests usage: + * a0 SMC Function ID, OPTEE_SMC_GET_THREAD_COUNT + * a1-6 Not used + * a7 Hypervisor Client ID register + * + * Normal return register usage: + * a0 OPTEE_SMC_RETURN_OK + * a1 Number of threads + * a2-7 Preserved + * + * Error return: + * a0 OPTEE_SMC_RETURN_UNKNOWN_FUNCTION Requested call is not implemented + * a1-7 Preserved + */ +#define OPTEE_SMC_FUNCID_GET_THREAD_COUNT 15 +#define OPTEE_SMC_GET_THREAD_COUNT \ + OPTEE_SMC_FAST_CALL_VAL(OPTEE_SMC_FUNCID_GET_THREAD_COUNT) + +/* * Resume from RPC (for example after processing a foreign interrupt) * * Call register usage: diff --git a/core/arch/arm/tee/entry_fast.c b/core/arch/arm/tee/entry_fast.c index 94f08bac..4e951ab2 100644 --- a/core/arch/arm/tee/entry_fast.c +++ b/core/arch/arm/tee/entry_fast.c @@ -132,6 +132,12 @@ static void tee_entry_boot_secondary(struct thread_smc_args *args) #endif } +static void tee_entry_get_thread_count(struct thread_smc_args *args) +{ + args->a0 = OPTEE_SMC_RETURN_OK; + args->a1 = CFG_NUM_THREADS; +} + #if defined(CFG_VIRTUALIZATION) static void tee_entry_vm_created(struct thread_smc_args *args) { @@ -200,6 +206,9 @@ void tee_entry_fast(struct thread_smc_args *args) case OPTEE_SMC_BOOT_SECONDARY: tee_entry_boot_secondary(args); break; + case OPTEE_SMC_GET_THREAD_COUNT: + tee_entry_get_thread_count(args); + break; #if defined(CFG_VIRTUALIZATION) case OPTEE_SMC_VM_CREATED: @@ -223,7 +232,7 @@ size_t tee_entry_generic_get_api_call_count(void) * target has additional calls it will call this function and * add the number of calls the target has added. */ - size_t ret = 11; + size_t ret = 12; #if defined(CFG_VIRTUALIZATION) ret += 2; |