This patch adds a simple handler to handle event received from
"mmcommtest" shell application. It prints the version information from
the copy of the UEFI system table received from normal world.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Achin Gupta <achin.gu...@arm.com>
Signed-off-by: Supreeth Venkatesh <supreeth.venkat...@arm.com>
---
 StandaloneMmPkg/Core/StandaloneMmCore.c   | 39 +++++++++++++++++++++++++++++++
 StandaloneMmPkg/Core/StandaloneMmCore.inf |  2 ++
 StandaloneMmPkg/StandaloneMmPkg.dec       |  2 ++
 3 files changed, 43 insertions(+)

diff --git a/StandaloneMmPkg/Core/StandaloneMmCore.c 
b/StandaloneMmPkg/Core/StandaloneMmCore.c
index 0bb99b9710..4aaecdb2ea 100644
--- a/StandaloneMmPkg/Core/StandaloneMmCore.c
+++ b/StandaloneMmPkg/Core/StandaloneMmCore.c
@@ -95,6 +95,15 @@ EFI_MM_SYSTEM_TABLE  gMmCoreMmst = {
 //
 BOOLEAN  mInLegacyBoot = FALSE;
 
+EFI_STATUS
+EFIAPI
+MmCommTestHandler (
+  IN     EFI_HANDLE               DispatchHandle,
+  IN     CONST VOID               *Context,        OPTIONAL
+  IN OUT VOID                     *CommBuffer,     OPTIONAL
+  IN OUT UINTN                    *CommBufferSize  OPTIONAL
+  );
+
 //
 // Table of MMI Handlers that are registered by the MM Core when it is 
initialized
 //
@@ -106,6 +115,7 @@ MM_CORE_MMI_HANDLERS  mMmCoreMmiHandlers[] = {
   { MmLegacyBootHandler,     &gEfiEventLegacyBootGuid,           NULL, FALSE },
   { MmExitBootServiceHandler,&gEfiEventExitBootServicesGuid,     NULL, FALSE },
   { MmReadyToBootHandler,    &gEfiEventReadyToBootGuid,          NULL, FALSE },
+  { MmCommTestHandler,       &gMmCommTestGuid,                   NULL, TRUE  },
   { NULL,                    NULL,                               NULL, FALSE },
 };
 
@@ -379,7 +389,36 @@ MmEndOfDxeHandler (
   return Status;
 }
 
+/**
+  This function is the main entry point for communicate-based callback.
+
+  @param  DispatchHandle  The unique handle assigned to this handler by 
MmiHandlerRegister().
+  @param  Context         Points to an optional handler context which was 
specified when the handler was registered.
+  @param  CommBuffer      A pointer to a collection of data in memory that will
+                          be conveyed from a non-MM environment into an MM 
environment.
+  @param  CommBufferSize  The size of the CommBuffer.
 
+  @return Status Code
+**/
+EFI_STATUS
+EFIAPI
+MmCommTestHandler (
+  IN     EFI_HANDLE               DispatchHandle,
+  IN     CONST VOID               *Context,        OPTIONAL
+  IN OUT VOID                     *CommBuffer,     OPTIONAL
+  IN OUT UINTN                    *CommBufferSize  OPTIONAL
+  )
+{
+  EFI_SYSTEM_TABLE                      SystemTable;
+
+  DEBUG ((DEBUG_INFO, "MmUefiInfoHandler\n"));
+
+  CopyMem (&SystemTable, CommBuffer, sizeof(EFI_SYSTEM_TABLE));
+
+  DEBUG ((DEBUG_INFO, "  UEFI Firmware Version - 0x%x\n", 
SystemTable.FirmwareRevision));
+
+  return EFI_SUCCESS;
+}
 
 /**
   The main entry point to MM Foundation.
diff --git a/StandaloneMmPkg/Core/StandaloneMmCore.inf 
b/StandaloneMmPkg/Core/StandaloneMmCore.inf
index c5eaa14ba3..b35870732c 100644
--- a/StandaloneMmPkg/Core/StandaloneMmCore.inf
+++ b/StandaloneMmPkg/Core/StandaloneMmCore.inf
@@ -78,3 +78,5 @@
   gEfiEventLegacyBootGuid
   gEfiEventExitBootServicesGuid
   gEfiEventReadyToBootGuid
+  gMmCommTestGuid
+
diff --git a/StandaloneMmPkg/StandaloneMmPkg.dec 
b/StandaloneMmPkg/StandaloneMmPkg.dec
index 36521bb039..d88be3ce5e 100644
--- a/StandaloneMmPkg/StandaloneMmPkg.dec
+++ b/StandaloneMmPkg/StandaloneMmPkg.dec
@@ -39,6 +39,8 @@
   gEfiStandaloneMmNonSecureBufferGuid      = { 0xf00497e3, 0xbfa2, 0x41a1, { 
0x9d, 0x29, 0x54, 0xc2, 0xe9, 0x37, 0x21, 0xc5 }}
   gEfiArmTfCpuDriverEpDescriptorGuid       = { 0x6ecbd5a1, 0xc0f8, 0x4702, { 
0x83, 0x01, 0x4f, 0xc2, 0xc5, 0x47, 0x0a, 0x51 }}
 
+  gMmCommTestGuid                          = { 0xa37721e4, 0x8c0b, 0x4bca, { 
0xb5, 0xe8, 0xe9, 0x2, 0xa0, 0x25, 0x51, 0x4e }}
+
 [PcdsFeatureFlag]
   gStandaloneMmPkgTokenSpaceGuid.PcdStandaloneMmEnable|FALSE|BOOLEAN|0x00000001
 
-- 
2.16.2

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to