Add dummy RPC handler for RPCs that are not implemented as control
should be returned back to OP-TEE in case any RPC is invoked.
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Sumit Garg <sumit.garg@linaro.org>
Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
return EFI_SUCCESS;\r
}\r
\r
return EFI_SUCCESS;\r
}\r
\r
+STATIC\r
+BOOLEAN\r
+IsOpteeSmcReturnRpc (\r
+ UINT32 Return\r
+ )\r
+{\r
+ return (Return != OPTEE_SMC_RETURN_UNKNOWN_FUNCTION) &&\r
+ ((Return & OPTEE_SMC_RETURN_RPC_PREFIX_MASK) ==\r
+ OPTEE_SMC_RETURN_RPC_PREFIX);\r
+}\r
+\r
/**\r
Does Standard SMC to OP-TEE in secure world.\r
\r
/**\r
Does Standard SMC to OP-TEE in secure world.\r
\r
while (TRUE) {\r
ArmCallSmc (&ArmSmcArgs);\r
\r
while (TRUE) {\r
ArmCallSmc (&ArmSmcArgs);\r
\r
- if (ArmSmcArgs.Arg0 == OPTEE_SMC_RETURN_RPC_FOREIGN_INTERRUPT) {\r
- //\r
- // A foreign interrupt was raised while secure world was\r
- // executing, since they are handled in UEFI a dummy RPC is\r
- // performed to let UEFI take the interrupt through the normal\r
- // vector.\r
- //\r
+ if (IsOpteeSmcReturnRpc (ArmSmcArgs.Arg0)) {\r
+ switch (ArmSmcArgs.Arg0) {\r
+ case OPTEE_SMC_RETURN_RPC_FOREIGN_INTERRUPT:\r
+ //\r
+ // A foreign interrupt was raised while secure world was\r
+ // executing, since they are handled in UEFI a dummy RPC is\r
+ // performed to let UEFI take the interrupt through the normal\r
+ // vector.\r
+ //\r
+ break;\r
+\r
+ default:\r
+ // Do nothing in case RPC is not implemented.\r
+ break;\r
+ }\r
+\r
ArmSmcArgs.Arg0 = OPTEE_SMC_RETURN_FROM_RPC;\r
} else {\r
break;\r
ArmSmcArgs.Arg0 = OPTEE_SMC_RETURN_FROM_RPC;\r
} else {\r
break;\r
\r
#define OPTEE_SMC_SHARED_MEMORY_CACHED 1\r
\r
\r
#define OPTEE_SMC_SHARED_MEMORY_CACHED 1\r
\r
+#define OPTEE_SMC_RETURN_UNKNOWN_FUNCTION 0xffffffff\r
+#define OPTEE_SMC_RETURN_RPC_PREFIX_MASK 0xffff0000\r
+#define OPTEE_SMC_RETURN_RPC_PREFIX 0xffff0000\r
#define OPTEE_SMC_RETURN_RPC_FOREIGN_INTERRUPT 0xffff0004\r
\r
#define OPTEE_MESSAGE_COMMAND_OPEN_SESSION 0\r
#define OPTEE_SMC_RETURN_RPC_FOREIGN_INTERRUPT 0xffff0004\r
\r
#define OPTEE_MESSAGE_COMMAND_OPEN_SESSION 0\r