summaryrefslogtreecommitdiffstats
path: root/ArmPkg/Library/OpteeLib/Optee.c
diff options
context:
space:
mode:
Diffstat (limited to 'ArmPkg/Library/OpteeLib/Optee.c')
-rw-r--r--ArmPkg/Library/OpteeLib/Optee.c272
1 files changed, 137 insertions, 135 deletions
diff --git a/ArmPkg/Library/OpteeLib/Optee.c b/ArmPkg/Library/OpteeLib/Optee.c
index bedb2edbb3..48e33cb3d5 100644
--- a/ArmPkg/Library/OpteeLib/Optee.c
+++ b/ArmPkg/Library/OpteeLib/Optee.c
@@ -20,7 +20,7 @@
#include <OpteeSmc.h>
#include <Uefi.h>
-STATIC OPTEE_SHARED_MEMORY_INFORMATION OpteeSharedMemoryInformation = { 0 };
+STATIC OPTEE_SHARED_MEMORY_INFORMATION OpteeSharedMemoryInformation = { 0 };
/**
Check for OP-TEE presence.
@@ -31,7 +31,7 @@ IsOpteePresent (
VOID
)
{
- ARM_SMC_ARGS ArmSmcArgs;
+ ARM_SMC_ARGS ArmSmcArgs;
ZeroMem (&ArmSmcArgs, sizeof (ARM_SMC_ARGS));
// Send a Trusted OS Calls UID command
@@ -41,7 +41,8 @@ IsOpteePresent (
if ((ArmSmcArgs.Arg0 == OPTEE_OS_UID0) &&
(ArmSmcArgs.Arg1 == OPTEE_OS_UID1) &&
(ArmSmcArgs.Arg2 == OPTEE_OS_UID2) &&
- (ArmSmcArgs.Arg3 == OPTEE_OS_UID3)) {
+ (ArmSmcArgs.Arg3 == OPTEE_OS_UID3))
+ {
return TRUE;
} else {
return FALSE;
@@ -54,12 +55,12 @@ OpteeSharedMemoryRemap (
VOID
)
{
- ARM_SMC_ARGS ArmSmcArgs;
- EFI_PHYSICAL_ADDRESS PhysicalAddress;
- EFI_PHYSICAL_ADDRESS Start;
- EFI_PHYSICAL_ADDRESS End;
- EFI_STATUS Status;
- UINTN Size;
+ ARM_SMC_ARGS ArmSmcArgs;
+ EFI_PHYSICAL_ADDRESS PhysicalAddress;
+ EFI_PHYSICAL_ADDRESS Start;
+ EFI_PHYSICAL_ADDRESS End;
+ EFI_STATUS Status;
+ UINTN Size;
ZeroMem (&ArmSmcArgs, sizeof (ARM_SMC_ARGS));
ArmSmcArgs.Arg0 = OPTEE_SMC_GET_SHARED_MEMORY_CONFIG;
@@ -75,10 +76,10 @@ OpteeSharedMemoryRemap (
return EFI_UNSUPPORTED;
}
- Start = (ArmSmcArgs.Arg1 + SIZE_4KB - 1) & ~(SIZE_4KB - 1);
- End = (ArmSmcArgs.Arg1 + ArmSmcArgs.Arg2) & ~(SIZE_4KB - 1);
+ Start = (ArmSmcArgs.Arg1 + SIZE_4KB - 1) & ~(SIZE_4KB - 1);
+ End = (ArmSmcArgs.Arg1 + ArmSmcArgs.Arg2) & ~(SIZE_4KB - 1);
PhysicalAddress = Start;
- Size = End - Start;
+ Size = End - Start;
if (Size < SIZE_4KB) {
DEBUG ((DEBUG_WARN, "OP-TEE shared memory too small\n"));
@@ -102,7 +103,7 @@ OpteeInit (
VOID
)
{
- EFI_STATUS Status;
+ EFI_STATUS Status;
if (!IsOpteePresent ()) {
DEBUG ((DEBUG_WARN, "OP-TEE not present\n"));
@@ -121,7 +122,7 @@ OpteeInit (
STATIC
BOOLEAN
IsOpteeSmcReturnRpc (
- UINT32 Return
+ UINT32 Return
)
{
return (Return != OPTEE_SMC_RETURN_UNKNOWN_FUNCTION) &&
@@ -140,10 +141,10 @@ IsOpteeSmcReturnRpc (
STATIC
UINT32
OpteeCallWithArg (
- IN UINT64 PhysicalArg
+ IN UINT64 PhysicalArg
)
{
- ARM_SMC_ARGS ArmSmcArgs;
+ ARM_SMC_ARGS ArmSmcArgs;
ZeroMem (&ArmSmcArgs, sizeof (ARM_SMC_ARGS));
ArmSmcArgs.Arg0 = OPTEE_SMC_CALL_WITH_ARG;
@@ -155,18 +156,18 @@ OpteeCallWithArg (
if (IsOpteeSmcReturnRpc (ArmSmcArgs.Arg0)) {
switch (ArmSmcArgs.Arg0) {
- case OPTEE_SMC_RETURN_RPC_FOREIGN_INTERRUPT:
- //
- // A foreign interrupt was raised while secure world was
- // executing, since they are handled in UEFI a dummy RPC is
- // performed to let UEFI take the interrupt through the normal
- // vector.
- //
- break;
-
- default:
- // Do nothing in case RPC is not implemented.
- break;
+ case OPTEE_SMC_RETURN_RPC_FOREIGN_INTERRUPT:
+ //
+ // A foreign interrupt was raised while secure world was
+ // executing, since they are handled in UEFI a dummy RPC is
+ // performed to let UEFI take the interrupt through the normal
+ // vector.
+ //
+ break;
+
+ default:
+ // Do nothing in case RPC is not implemented.
+ break;
}
ArmSmcArgs.Arg0 = OPTEE_SMC_RETURN_FROM_RPC;
@@ -181,8 +182,8 @@ OpteeCallWithArg (
STATIC
VOID
EfiGuidToRfc4122Uuid (
- OUT RFC4122_UUID *Rfc4122Uuid,
- IN EFI_GUID *Guid
+ OUT RFC4122_UUID *Rfc4122Uuid,
+ IN EFI_GUID *Guid
)
{
Rfc4122Uuid->Data1 = SwapBytes32 (Guid->Data1);
@@ -194,10 +195,10 @@ EfiGuidToRfc4122Uuid (
EFI_STATUS
EFIAPI
OpteeOpenSession (
- IN OUT OPTEE_OPEN_SESSION_ARG *OpenSessionArg
+ IN OUT OPTEE_OPEN_SESSION_ARG *OpenSessionArg
)
{
- OPTEE_MESSAGE_ARG *MessageArg;
+ OPTEE_MESSAGE_ARG *MessageArg;
MessageArg = NULL;
@@ -229,12 +230,12 @@ OpteeOpenSession (
MessageArg->NumParams = 2;
if (OpteeCallWithArg ((UINTN)MessageArg) != 0) {
- MessageArg->Return = OPTEE_ERROR_COMMUNICATION;
+ MessageArg->Return = OPTEE_ERROR_COMMUNICATION;
MessageArg->ReturnOrigin = OPTEE_ORIGIN_COMMUNICATION;
}
- OpenSessionArg->Session = MessageArg->Session;
- OpenSessionArg->Return = MessageArg->Return;
+ OpenSessionArg->Session = MessageArg->Session;
+ OpenSessionArg->Return = MessageArg->Return;
OpenSessionArg->ReturnOrigin = MessageArg->ReturnOrigin;
return EFI_SUCCESS;
@@ -243,10 +244,10 @@ OpteeOpenSession (
EFI_STATUS
EFIAPI
OpteeCloseSession (
- IN UINT32 Session
+ IN UINT32 Session
)
{
- OPTEE_MESSAGE_ARG *MessageArg;
+ OPTEE_MESSAGE_ARG *MessageArg;
MessageArg = NULL;
@@ -269,70 +270,70 @@ OpteeCloseSession (
STATIC
EFI_STATUS
OpteeToMessageParam (
- OUT OPTEE_MESSAGE_PARAM *MessageParams,
- IN UINT32 NumParams,
- IN OPTEE_MESSAGE_PARAM *InParams
+ OUT OPTEE_MESSAGE_PARAM *MessageParams,
+ IN UINT32 NumParams,
+ IN OPTEE_MESSAGE_PARAM *InParams
)
{
- UINT32 Idx;
- UINTN ParamSharedMemoryAddress;
- UINTN SharedMemorySize;
- UINTN Size;
+ UINT32 Idx;
+ UINTN ParamSharedMemoryAddress;
+ UINTN SharedMemorySize;
+ UINTN Size;
Size = (sizeof (OPTEE_MESSAGE_ARG) + sizeof (UINT64) - 1) &
- ~(sizeof (UINT64) - 1);
+ ~(sizeof (UINT64) - 1);
ParamSharedMemoryAddress = OpteeSharedMemoryInformation.Base + Size;
- SharedMemorySize = OpteeSharedMemoryInformation.Size - Size;
+ SharedMemorySize = OpteeSharedMemoryInformation.Size - Size;
for (Idx = 0; Idx < NumParams; Idx++) {
- CONST OPTEE_MESSAGE_PARAM *InParam;
- OPTEE_MESSAGE_PARAM *MessageParam;
- UINT32 Attribute;
+ CONST OPTEE_MESSAGE_PARAM *InParam;
+ OPTEE_MESSAGE_PARAM *MessageParam;
+ UINT32 Attribute;
- InParam = InParams + Idx;
+ InParam = InParams + Idx;
MessageParam = MessageParams + Idx;
- Attribute = InParam->Attribute & OPTEE_MESSAGE_ATTRIBUTE_TYPE_MASK;
+ Attribute = InParam->Attribute & OPTEE_MESSAGE_ATTRIBUTE_TYPE_MASK;
switch (Attribute) {
- case OPTEE_MESSAGE_ATTRIBUTE_TYPE_NONE:
- MessageParam->Attribute = OPTEE_MESSAGE_ATTRIBUTE_TYPE_NONE;
- ZeroMem (&MessageParam->Union, sizeof (MessageParam->Union));
- break;
-
- case OPTEE_MESSAGE_ATTRIBUTE_TYPE_VALUE_INPUT:
- case OPTEE_MESSAGE_ATTRIBUTE_TYPE_VALUE_OUTPUT:
- case OPTEE_MESSAGE_ATTRIBUTE_TYPE_VALUE_INOUT:
- MessageParam->Attribute = Attribute;
- MessageParam->Union.Value.A = InParam->Union.Value.A;
- MessageParam->Union.Value.B = InParam->Union.Value.B;
- MessageParam->Union.Value.C = InParam->Union.Value.C;
- break;
-
- case OPTEE_MESSAGE_ATTRIBUTE_TYPE_MEMORY_INPUT:
- case OPTEE_MESSAGE_ATTRIBUTE_TYPE_MEMORY_OUTPUT:
- case OPTEE_MESSAGE_ATTRIBUTE_TYPE_MEMORY_INOUT:
- MessageParam->Attribute = Attribute;
+ case OPTEE_MESSAGE_ATTRIBUTE_TYPE_NONE:
+ MessageParam->Attribute = OPTEE_MESSAGE_ATTRIBUTE_TYPE_NONE;
+ ZeroMem (&MessageParam->Union, sizeof (MessageParam->Union));
+ break;
- if (InParam->Union.Memory.Size > SharedMemorySize) {
- return EFI_OUT_OF_RESOURCES;
- }
+ case OPTEE_MESSAGE_ATTRIBUTE_TYPE_VALUE_INPUT:
+ case OPTEE_MESSAGE_ATTRIBUTE_TYPE_VALUE_OUTPUT:
+ case OPTEE_MESSAGE_ATTRIBUTE_TYPE_VALUE_INOUT:
+ MessageParam->Attribute = Attribute;
+ MessageParam->Union.Value.A = InParam->Union.Value.A;
+ MessageParam->Union.Value.B = InParam->Union.Value.B;
+ MessageParam->Union.Value.C = InParam->Union.Value.C;
+ break;
- CopyMem (
- (VOID *)ParamSharedMemoryAddress,
- (VOID *)(UINTN)InParam->Union.Memory.BufferAddress,
- InParam->Union.Memory.Size
- );
- MessageParam->Union.Memory.BufferAddress = (UINT64)ParamSharedMemoryAddress;
- MessageParam->Union.Memory.Size = InParam->Union.Memory.Size;
-
- Size = (InParam->Union.Memory.Size + sizeof (UINT64) - 1) &
- ~(sizeof (UINT64) - 1);
- ParamSharedMemoryAddress += Size;
- SharedMemorySize -= Size;
- break;
+ case OPTEE_MESSAGE_ATTRIBUTE_TYPE_MEMORY_INPUT:
+ case OPTEE_MESSAGE_ATTRIBUTE_TYPE_MEMORY_OUTPUT:
+ case OPTEE_MESSAGE_ATTRIBUTE_TYPE_MEMORY_INOUT:
+ MessageParam->Attribute = Attribute;
+
+ if (InParam->Union.Memory.Size > SharedMemorySize) {
+ return EFI_OUT_OF_RESOURCES;
+ }
+
+ CopyMem (
+ (VOID *)ParamSharedMemoryAddress,
+ (VOID *)(UINTN)InParam->Union.Memory.BufferAddress,
+ InParam->Union.Memory.Size
+ );
+ MessageParam->Union.Memory.BufferAddress = (UINT64)ParamSharedMemoryAddress;
+ MessageParam->Union.Memory.Size = InParam->Union.Memory.Size;
+
+ Size = (InParam->Union.Memory.Size + sizeof (UINT64) - 1) &
+ ~(sizeof (UINT64) - 1);
+ ParamSharedMemoryAddress += Size;
+ SharedMemorySize -= Size;
+ break;
- default:
- return EFI_INVALID_PARAMETER;
+ default:
+ return EFI_INVALID_PARAMETER;
}
}
@@ -342,56 +343,56 @@ OpteeToMessageParam (
STATIC
EFI_STATUS
OpteeFromMessageParam (
- OUT OPTEE_MESSAGE_PARAM *OutParams,
- IN UINT32 NumParams,
- IN OPTEE_MESSAGE_PARAM *MessageParams
+ OUT OPTEE_MESSAGE_PARAM *OutParams,
+ IN UINT32 NumParams,
+ IN OPTEE_MESSAGE_PARAM *MessageParams
)
{
- UINT32 Idx;
+ UINT32 Idx;
for (Idx = 0; Idx < NumParams; Idx++) {
- OPTEE_MESSAGE_PARAM *OutParam;
- CONST OPTEE_MESSAGE_PARAM *MessageParam;
- UINT32 Attribute;
+ OPTEE_MESSAGE_PARAM *OutParam;
+ CONST OPTEE_MESSAGE_PARAM *MessageParam;
+ UINT32 Attribute;
- OutParam = OutParams + Idx;
+ OutParam = OutParams + Idx;
MessageParam = MessageParams + Idx;
- Attribute = MessageParam->Attribute & OPTEE_MESSAGE_ATTRIBUTE_TYPE_MASK;
+ Attribute = MessageParam->Attribute & OPTEE_MESSAGE_ATTRIBUTE_TYPE_MASK;
switch (Attribute) {
- case OPTEE_MESSAGE_ATTRIBUTE_TYPE_NONE:
- OutParam->Attribute = OPTEE_MESSAGE_ATTRIBUTE_TYPE_NONE;
- ZeroMem (&OutParam->Union, sizeof (OutParam->Union));
- break;
-
- case OPTEE_MESSAGE_ATTRIBUTE_TYPE_VALUE_INPUT:
- case OPTEE_MESSAGE_ATTRIBUTE_TYPE_VALUE_OUTPUT:
- case OPTEE_MESSAGE_ATTRIBUTE_TYPE_VALUE_INOUT:
- OutParam->Attribute = Attribute;
- OutParam->Union.Value.A = MessageParam->Union.Value.A;
- OutParam->Union.Value.B = MessageParam->Union.Value.B;
- OutParam->Union.Value.C = MessageParam->Union.Value.C;
- break;
-
- case OPTEE_MESSAGE_ATTRIBUTE_TYPE_MEMORY_INPUT:
- case OPTEE_MESSAGE_ATTRIBUTE_TYPE_MEMORY_OUTPUT:
- case OPTEE_MESSAGE_ATTRIBUTE_TYPE_MEMORY_INOUT:
- OutParam->Attribute = Attribute;
+ case OPTEE_MESSAGE_ATTRIBUTE_TYPE_NONE:
+ OutParam->Attribute = OPTEE_MESSAGE_ATTRIBUTE_TYPE_NONE;
+ ZeroMem (&OutParam->Union, sizeof (OutParam->Union));
+ break;
- if (MessageParam->Union.Memory.Size > OutParam->Union.Memory.Size) {
- return EFI_BAD_BUFFER_SIZE;
- }
+ case OPTEE_MESSAGE_ATTRIBUTE_TYPE_VALUE_INPUT:
+ case OPTEE_MESSAGE_ATTRIBUTE_TYPE_VALUE_OUTPUT:
+ case OPTEE_MESSAGE_ATTRIBUTE_TYPE_VALUE_INOUT:
+ OutParam->Attribute = Attribute;
+ OutParam->Union.Value.A = MessageParam->Union.Value.A;
+ OutParam->Union.Value.B = MessageParam->Union.Value.B;
+ OutParam->Union.Value.C = MessageParam->Union.Value.C;
+ break;
- CopyMem (
- (VOID *)(UINTN)OutParam->Union.Memory.BufferAddress,
- (VOID *)(UINTN)MessageParam->Union.Memory.BufferAddress,
- MessageParam->Union.Memory.Size
- );
- OutParam->Union.Memory.Size = MessageParam->Union.Memory.Size;
- break;
+ case OPTEE_MESSAGE_ATTRIBUTE_TYPE_MEMORY_INPUT:
+ case OPTEE_MESSAGE_ATTRIBUTE_TYPE_MEMORY_OUTPUT:
+ case OPTEE_MESSAGE_ATTRIBUTE_TYPE_MEMORY_INOUT:
+ OutParam->Attribute = Attribute;
+
+ if (MessageParam->Union.Memory.Size > OutParam->Union.Memory.Size) {
+ return EFI_BAD_BUFFER_SIZE;
+ }
+
+ CopyMem (
+ (VOID *)(UINTN)OutParam->Union.Memory.BufferAddress,
+ (VOID *)(UINTN)MessageParam->Union.Memory.BufferAddress,
+ MessageParam->Union.Memory.Size
+ );
+ OutParam->Union.Memory.Size = MessageParam->Union.Memory.Size;
+ break;
- default:
- return EFI_INVALID_PARAMETER;
+ default:
+ return EFI_INVALID_PARAMETER;
}
}
@@ -401,11 +402,11 @@ OpteeFromMessageParam (
EFI_STATUS
EFIAPI
OpteeInvokeFunction (
- IN OUT OPTEE_INVOKE_FUNCTION_ARG *InvokeFunctionArg
+ IN OUT OPTEE_INVOKE_FUNCTION_ARG *InvokeFunctionArg
)
{
- EFI_STATUS Status;
- OPTEE_MESSAGE_ARG *MessageArg;
+ EFI_STATUS Status;
+ OPTEE_MESSAGE_ARG *MessageArg;
MessageArg = NULL;
@@ -417,9 +418,9 @@ OpteeInvokeFunction (
MessageArg = (OPTEE_MESSAGE_ARG *)OpteeSharedMemoryInformation.Base;
ZeroMem (MessageArg, sizeof (OPTEE_MESSAGE_ARG));
- MessageArg->Command = OPTEE_MESSAGE_COMMAND_INVOKE_FUNCTION;
+ MessageArg->Command = OPTEE_MESSAGE_COMMAND_INVOKE_FUNCTION;
MessageArg->Function = InvokeFunctionArg->Function;
- MessageArg->Session = InvokeFunctionArg->Session;
+ MessageArg->Session = InvokeFunctionArg->Session;
Status = OpteeToMessageParam (
MessageArg->Params,
@@ -433,7 +434,7 @@ OpteeInvokeFunction (
MessageArg->NumParams = OPTEE_MAX_CALL_PARAMS;
if (OpteeCallWithArg ((UINTN)MessageArg) != 0) {
- MessageArg->Return = OPTEE_ERROR_COMMUNICATION;
+ MessageArg->Return = OPTEE_ERROR_COMMUNICATION;
MessageArg->ReturnOrigin = OPTEE_ORIGIN_COMMUNICATION;
}
@@ -441,12 +442,13 @@ OpteeInvokeFunction (
InvokeFunctionArg->Params,
OPTEE_MAX_CALL_PARAMS,
MessageArg->Params
- ) != 0) {
- MessageArg->Return = OPTEE_ERROR_COMMUNICATION;
+ ) != 0)
+ {
+ MessageArg->Return = OPTEE_ERROR_COMMUNICATION;
MessageArg->ReturnOrigin = OPTEE_ORIGIN_COMMUNICATION;
}
- InvokeFunctionArg->Return = MessageArg->Return;
+ InvokeFunctionArg->Return = MessageArg->Return;
InvokeFunctionArg->ReturnOrigin = MessageArg->ReturnOrigin;
return EFI_SUCCESS;