summaryrefslogtreecommitdiffstats
path: root/ArmPkg/Drivers/MmCommunicationPei/MmCommunicationPei.c
diff options
context:
space:
mode:
Diffstat (limited to 'ArmPkg/Drivers/MmCommunicationPei/MmCommunicationPei.c')
-rw-r--r--ArmPkg/Drivers/MmCommunicationPei/MmCommunicationPei.c53
1 files changed, 30 insertions, 23 deletions
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);
}
/**