ArmPkg: ArmStandaloneMmCoreEntryPoint: Support 18 register DIRECT_REQ2

This change added the support for using 18 registers when FF-A
DIRECT_REQ2 is used to communicate with MM core.

This change was tested on QEMU SBSA and booted to Windows.

Signed-off-by: Kun Qin <kun.qin@microsoft.com>
This commit is contained in:
kuqin12 2024-11-26 18:43:25 -06:00 committed by mergify[bot]
parent 8d03c42d38
commit 8baa1c5120
1 changed files with 30 additions and 9 deletions

View File

@ -726,10 +726,20 @@ SetEventCompleteSvcArgs (
EventCompleteSvcArgs->Arg0 = ARM_FID_FFA_MSG_SEND_DIRECT_RESP2;
if (FfaMsgInfo->ServiceType == ServiceTypeMisc) {
EventCompleteSvcArgs->Arg4 = mMiscMmCommunicateBuffer->DirectMsgArgs.Arg0;
EventCompleteSvcArgs->Arg5 = mMiscMmCommunicateBuffer->DirectMsgArgs.Arg1;
EventCompleteSvcArgs->Arg6 = mMiscMmCommunicateBuffer->DirectMsgArgs.Arg2;
EventCompleteSvcArgs->Arg7 = mMiscMmCommunicateBuffer->DirectMsgArgs.Arg3;
EventCompleteSvcArgs->Arg4 = mMiscMmCommunicateBuffer->DirectMsgArgs.Arg0;
EventCompleteSvcArgs->Arg5 = mMiscMmCommunicateBuffer->DirectMsgArgs.Arg1;
EventCompleteSvcArgs->Arg6 = mMiscMmCommunicateBuffer->DirectMsgArgs.Arg2;
EventCompleteSvcArgs->Arg7 = mMiscMmCommunicateBuffer->DirectMsgArgs.Arg3;
EventCompleteSvcArgs->Arg8 = mMiscMmCommunicateBuffer->DirectMsgArgs.Arg4;
EventCompleteSvcArgs->Arg9 = mMiscMmCommunicateBuffer->DirectMsgArgs.Arg5;
EventCompleteSvcArgs->Arg10 = mMiscMmCommunicateBuffer->DirectMsgArgs.Arg6;
EventCompleteSvcArgs->Arg11 = mMiscMmCommunicateBuffer->DirectMsgArgs.Arg7;
EventCompleteSvcArgs->Arg12 = mMiscMmCommunicateBuffer->DirectMsgArgs.Arg8;
EventCompleteSvcArgs->Arg13 = mMiscMmCommunicateBuffer->DirectMsgArgs.Arg9;
EventCompleteSvcArgs->Arg14 = mMiscMmCommunicateBuffer->DirectMsgArgs.Arg10;
EventCompleteSvcArgs->Arg15 = mMiscMmCommunicateBuffer->DirectMsgArgs.Arg11;
EventCompleteSvcArgs->Arg16 = mMiscMmCommunicateBuffer->DirectMsgArgs.Arg12;
EventCompleteSvcArgs->Arg17 = mMiscMmCommunicateBuffer->DirectMsgArgs.Arg13;
}
}
@ -767,11 +777,22 @@ InitializeMiscMmCommunicateBuffer (
{
ZeroMem (Buffer, sizeof (MISC_MM_COMMUNICATE_BUFFER));
Buffer->MessageLength = sizeof (DIRECT_MSG_ARGS);
Buffer->DirectMsgArgs.Arg0 = EventSvcArgs->Arg4;
Buffer->DirectMsgArgs.Arg1 = EventSvcArgs->Arg5;
Buffer->DirectMsgArgs.Arg2 = EventSvcArgs->Arg6;
Buffer->DirectMsgArgs.Arg3 = EventSvcArgs->Arg7;
Buffer->MessageLength = sizeof (DIRECT_MSG_ARGS);
Buffer->DirectMsgArgs.Arg0 = EventSvcArgs->Arg4;
Buffer->DirectMsgArgs.Arg1 = EventSvcArgs->Arg5;
Buffer->DirectMsgArgs.Arg2 = EventSvcArgs->Arg6;
Buffer->DirectMsgArgs.Arg3 = EventSvcArgs->Arg7;
Buffer->DirectMsgArgs.Arg4 = EventSvcArgs->Arg8;
Buffer->DirectMsgArgs.Arg5 = EventSvcArgs->Arg9;
Buffer->DirectMsgArgs.Arg6 = EventSvcArgs->Arg10;
Buffer->DirectMsgArgs.Arg7 = EventSvcArgs->Arg11;
Buffer->DirectMsgArgs.Arg8 = EventSvcArgs->Arg12;
Buffer->DirectMsgArgs.Arg9 = EventSvcArgs->Arg13;
Buffer->DirectMsgArgs.Arg10 = EventSvcArgs->Arg14;
Buffer->DirectMsgArgs.Arg11 = EventSvcArgs->Arg15;
Buffer->DirectMsgArgs.Arg12 = EventSvcArgs->Arg16;
Buffer->DirectMsgArgs.Arg13 = EventSvcArgs->Arg17;
CopyGuid (&Buffer->HeaderGuid, ServiceGuid);
}