diff --git a/MdeModulePkg/Library/ArmFfaLib/ArmFfaCommon.c b/MdeModulePkg/Library/ArmFfaLib/ArmFfaCommon.c index a0be83a665..a9267b0499 100644 --- a/MdeModulePkg/Library/ArmFfaLib/ArmFfaCommon.c +++ b/MdeModulePkg/Library/ArmFfaLib/ArmFfaCommon.c @@ -553,6 +553,7 @@ ArmFfaLibPartitionInfoGet ( @param [in] PartId Partition id @param [in] CpuNumber Cpu number in partition + @param [out] CtxFfaArgs Optional context of FFA_ARGS @retval EFI_SUCCESS @retval Other Error @@ -561,11 +562,13 @@ ArmFfaLibPartitionInfoGet ( EFI_STATUS EFIAPI ArmFfaLibRun ( - IN UINT16 PartId, - IN UINT16 CpuNumber + IN UINT16 PartId, + IN UINT16 CpuNumber, + OUT ARM_FFA_ARGS *CtxFfaArgs OPTIONAL ) { ARM_FFA_ARGS FfaArgs; + EFI_STATUS Status; ZeroMem (&FfaArgs, sizeof (ARM_FFA_ARGS)); @@ -574,7 +577,16 @@ ArmFfaLibRun ( ArmCallFfa (&FfaArgs); - return FfaArgsToEfiStatus (&FfaArgs); + Status = FfaArgsToEfiStatus (&FfaArgs); + if (EFI_ERROR (Status)) { + return Status; + } + + if (CtxFfaArgs != NULL) { + CopyMem (CtxFfaArgs, &FfaArgs, sizeof (ARM_FFA_ARGS)); + } + + return Status; } /** diff --git a/MdePkg/Include/Library/ArmFfaLib.h b/MdePkg/Include/Library/ArmFfaLib.h index dd2ac41202..5e1650d34e 100644 --- a/MdePkg/Include/Library/ArmFfaLib.h +++ b/MdePkg/Include/Library/ArmFfaLib.h @@ -297,10 +297,11 @@ ArmFfaLibSpmIdGet ( ); /** - Restore context which interrupted with FFA_INTERRUPT (EFI_INTERRUPT_PENDING). + Restore the context which was interrupted with FFA_INTERRUPT (EFI_INTERRUPT_PENDING). @param [in] PartId Partition id @param [in] CpuNumber Cpu number in partition + @param [out] CtxFfaArgs Optional context of FFA_ARGS @retval EFI_SUCCESS @retval Other Error @@ -309,8 +310,9 @@ ArmFfaLibSpmIdGet ( EFI_STATUS EFIAPI ArmFfaLibRun ( - IN UINT16 PartId, - IN UINT16 CpuNumber + IN UINT16 PartId, + IN UINT16 CpuNumber, + OUT ARM_FFA_ARGS *CtxFfaArgs OPTIONAL ); /**