diff options
author | levi.yun <yeoreum.yun@arm.com> | 2024-12-30 11:14:17 +0000 |
---|---|---|
committer | mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> | 2025-01-17 14:55:42 +0000 |
commit | 1bebc97b816ddedbaa0fbdf723c1d124d7fc84a3 (patch) | |
tree | bfea3569e3f60fcbfa76334556bceb15b9f2bf4c /ArmPkg/Drivers | |
parent | 8f3c157e04713c8aa84a930040bf75d52afb7c77 (diff) | |
download | edk2-1bebc97b816ddedbaa0fbdf723c1d124d7fc84a3.tar.gz |
ArmPkg/MmCommunication: add helper function converting smc return
Add helper function converting smc return value to efi status.
Signed-off-by: Levi Yun <yeoreum.yun@arm.com>
Diffstat (limited to 'ArmPkg/Drivers')
-rw-r--r-- | ArmPkg/Drivers/MmCommunicationDxe/MmCommunication.c | 53 | ||||
-rw-r--r-- | ArmPkg/Drivers/MmCommunicationPei/MmCommunicationPei.c | 53 |
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);
}
/**
|