summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ArmPkg/Drivers/MmCommunicationDxe/MmCommunication.c53
-rw-r--r--ArmPkg/Drivers/MmCommunicationPei/MmCommunicationPei.c53
2 files changed, 60 insertions, 46 deletions
diff --git a/ArmPkg/Drivers/MmCommunicationDxe/MmCommunication.c b/ArmPkg/Drivers/MmCommunicationDxe/MmCommunication.c
index e3455384fe..3c325d175a 100644
--- a/ArmPkg/Drivers/MmCommunicationDxe/MmCommunication.c
+++ b/ArmPkg/Drivers/MmCommunicationDxe/MmCommunication.c
@@ -78,6 +78,35 @@ SendFfaMmCommunicate (
}
/**
+ Convert SmcMmRet value to EFI_STATUS.
+
+ @param[in] SmcMmRet Mm return code
+
+ @retval EFI_SUCCESS
+ @retval Others Error status correspond to SmcMmRet
+
+**/
+STATIC
+EFI_STATUS
+SmcMmRetToEfiStatus (
+ IN UINTN SmcMmRet
+ )
+{
+ switch ((UINT32)SmcMmRet) {
+ case ARM_SMC_MM_RET_SUCCESS:
+ return EFI_SUCCESS;
+ case ARM_SMC_MM_RET_INVALID_PARAMS:
+ return EFI_INVALID_PARAMETER;
+ case ARM_SMC_MM_RET_DENIED:
+ return EFI_ACCESS_DENIED;
+ case ARM_SMC_MM_RET_NO_MEMORY:
+ return EFI_OUT_OF_RESOURCES;
+ default:
+ return EFI_ACCESS_DENIED;
+ }
+}
+
+/**
Send mm communicate request via SPM_MM.
@retval EFI_SUCCESS
@@ -91,7 +120,6 @@ SendSpmMmCommunicate (
IN VOID
)
{
- EFI_STATUS Status;
ARM_SMC_ARGS CommunicateSmcArgs;
ZeroMem (&CommunicateSmcArgs, sizeof (ARM_SMC_ARGS));
@@ -111,28 +139,7 @@ SendSpmMmCommunicate (
// Call the Standalone MM environment.
ArmCallSmc (&CommunicateSmcArgs);
- switch (CommunicateSmcArgs.Arg0) {
- case ARM_SMC_MM_RET_SUCCESS:
- Status = EFI_SUCCESS;
- break;
- case ARM_SMC_MM_RET_INVALID_PARAMS:
- Status = EFI_INVALID_PARAMETER;
- break;
- case ARM_SMC_MM_RET_DENIED:
- Status = EFI_ACCESS_DENIED;
- break;
- case ARM_SMC_MM_RET_NO_MEMORY:
- // Unexpected error since the CommSize was checked for zero length
- // prior to issuing the SMC
- Status = EFI_OUT_OF_RESOURCES;
- ASSERT (0);
- break;
- default:
- Status = EFI_ACCESS_DENIED;
- ASSERT (0);
- }
-
- return Status;
+ return SmcMmRetToEfiStatus (CommunicateSmcArgs.Arg0);
}
/**
diff --git a/ArmPkg/Drivers/MmCommunicationPei/MmCommunicationPei.c b/ArmPkg/Drivers/MmCommunicationPei/MmCommunicationPei.c
index 178c9256aa..666b7a2092 100644
--- a/ArmPkg/Drivers/MmCommunicationPei/MmCommunicationPei.c
+++ b/ArmPkg/Drivers/MmCommunicationPei/MmCommunicationPei.c
@@ -281,6 +281,35 @@ SendFfaMmCommunicate (
}
/**
+ Convert SmcMmRet value to EFI_STATUS.
+
+ @param[in] SmcMmRet Mm return code
+
+ @retval EFI_SUCCESS
+ @retval Others Error status correspond to SmcMmRet
+
+**/
+STATIC
+EFI_STATUS
+SmcMmRetToEfiStatus (
+ IN UINTN SmcMmRet
+ )
+{
+ switch ((UINT32)SmcMmRet) {
+ case ARM_SMC_MM_RET_SUCCESS:
+ return EFI_SUCCESS;
+ case ARM_SMC_MM_RET_INVALID_PARAMS:
+ return EFI_INVALID_PARAMETER;
+ case ARM_SMC_MM_RET_DENIED:
+ return EFI_ACCESS_DENIED;
+ case ARM_SMC_MM_RET_NO_MEMORY:
+ return EFI_OUT_OF_RESOURCES;
+ default:
+ return EFI_ACCESS_DENIED;
+ }
+}
+
+/**
Send mm communicate request via SPM_MM.
@retval EFI_SUCCESS
@@ -294,7 +323,6 @@ SendSpmMmCommunicate (
VOID
)
{
- EFI_STATUS Status;
ARM_SMC_ARGS CommunicateSmcArgs;
ZeroMem (&CommunicateSmcArgs, sizeof (ARM_SMC_ARGS));
@@ -314,28 +342,7 @@ SendSpmMmCommunicate (
// Call the Standalone MM environment.
ArmCallSmc (&CommunicateSmcArgs);
- switch (CommunicateSmcArgs.Arg0) {
- case ARM_SMC_MM_RET_SUCCESS:
- Status = EFI_SUCCESS;
- break;
- case ARM_SMC_MM_RET_INVALID_PARAMS:
- Status = EFI_INVALID_PARAMETER;
- break;
- case ARM_SMC_MM_RET_DENIED:
- Status = EFI_ACCESS_DENIED;
- break;
- case ARM_SMC_MM_RET_NO_MEMORY:
- // Unexpected error since the CommSize was checked for zero length
- // prior to issuing the SMC
- Status = EFI_OUT_OF_RESOURCES;
- ASSERT (0);
- break;
- default:
- Status = EFI_ACCESS_DENIED;
- ASSERT (0);
- }
-
- return Status;
+ return SmcMmRetToEfiStatus (CommunicateSmcArgs.Arg0);
}
/**