This patch adds a simple application that uses the MM
communication protocol to pass a copy of the UEFI system table to
the MM environment in the secure 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>
---
 .../Application/MmCommTestApp/MmCommTest.c         | 81 ++++++++++++++++++++++
 .../Application/MmCommTestApp/MmCommTest.h         | 37 ++++++++++
 .../Application/MmCommTestApp/MmCommTest.inf       | 57 +++++++++++++++
 3 files changed, 175 insertions(+)
 create mode 100644 StandaloneMmPkg/Application/MmCommTestApp/MmCommTest.c
 create mode 100644 StandaloneMmPkg/Application/MmCommTestApp/MmCommTest.h
 create mode 100644 StandaloneMmPkg/Application/MmCommTestApp/MmCommTest.inf

diff --git a/StandaloneMmPkg/Application/MmCommTestApp/MmCommTest.c 
b/StandaloneMmPkg/Application/MmCommTestApp/MmCommTest.c
new file mode 100644
index 0000000000..efbafdde62
--- /dev/null
+++ b/StandaloneMmPkg/Application/MmCommTestApp/MmCommTest.c
@@ -0,0 +1,81 @@
+/** @file
+  This sample application demos how to communicate
+  with secure partition using MM communication protocol
+
+  Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2016 - 2018, ARM Limited. All rights reserved.<BR>
+
+  This program and the accompanying materials
+  are licensed and made available under the terms and conditions of the BSD 
License
+  which accompanies this distribution.  The full text of the license may be 
found at
+  http://opensource.org/licenses/bsd-license.php
+
+  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+**/
+
+#include <Uefi.h>
+#include <Library/PcdLib.h>
+#include <Library/UefiLib.h>
+#include <Library/UefiApplicationEntryPoint.h>
+#include <Library/DebugLib.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/UefiBootServicesTableLib.h>
+
+#include "MmCommTest.h"
+
+#include <Library/ArmSmcLib.h>
+
+#include <Protocol/MmCommunication.h>
+
+EFI_MM_COMMUNICATION_PROTOCOL  *mMmCommunication = NULL;
+
+EFI_STATUS
+MmIplNotifyCommTest (
+  VOID
+  )
+{
+  EFI_MM_COMMUNICATE_TEST    MmCommTest;
+  UINTN                      Size;
+
+  DEBUG ((DEBUG_INFO, "MmIplNotifyCommTest\n"));
+
+  CopyGuid (&MmCommTest.HeaderGuid, &gMmCommTestGuid);
+  CopyMem (&MmCommTest.Data.EfiSystemTable, gST, sizeof (EFI_SYSTEM_TABLE));
+  MmCommTest.MessageLength = sizeof (EFI_MM_COMMUNICATE_TEST_DATA);
+
+  //
+  // Generate the MM_COMMUNICATE SMC and return the result
+  //
+  Size = sizeof (MmCommTest);
+  return mMmCommunication->Communicate (NULL, &MmCommTest, &Size);
+}
+
+/**
+  The user Entry Point for Application. The user code starts with this function
+  as the real entry point for the application.
+
+  @param[in] ImageHandle    The firmware allocated handle for the EFI image.
+  @param[in] SystemTable    A pointer to the EFI System Table.
+
+  @retval EFI_SUCCESS       The entry point is executed successfully.
+  @retval other             Some error occurs when executing this entry point.
+
+**/
+EFI_STATUS
+EFIAPI
+MmCommTestEntryPoint (
+  IN EFI_HANDLE        ImageHandle,
+  IN EFI_SYSTEM_TABLE  *SystemTable
+  )
+{
+  EFI_STATUS Status;
+
+  Status = gBS->LocateProtocol (&gEfiMmCommunicationProtocolGuid, NULL, (VOID 
**) &mMmCommunication);
+  if (EFI_ERROR (Status)) {
+    return Status;
+  }
+
+  return MmIplNotifyCommTest ();
+}
diff --git a/StandaloneMmPkg/Application/MmCommTestApp/MmCommTest.h 
b/StandaloneMmPkg/Application/MmCommTestApp/MmCommTest.h
new file mode 100644
index 0000000000..8e8305a060
--- /dev/null
+++ b/StandaloneMmPkg/Application/MmCommTestApp/MmCommTest.h
@@ -0,0 +1,37 @@
+/** @file
+  GUIDs for MM Event.
+
+Copyright (c) 2015, Intel Corporation. All rights reserved.<BR>
+Copyright (c) 2016 - 2018, ARM Limited. All rights reserved.<BR>
+
+This program and the accompanying materials are licensed and made available 
under
+the terms and conditions of the BSD License that accompanies this distribution.
+The full text of the license may be found at
+http://opensource.org/licenses/bsd-license.php.
+
+THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
+
+**/
+
+#ifndef __MM_COMM_TEST_H__
+#define __MM_COMM_TEST_H__
+
+#define MM_COMM_TEST_GUID \
+  { 0xa37721e4, 0x8c0b, 0x4bca, { 0xb5, 0xe8, 0xe9, 0x2, 0xa0, 0x25, 0x51, 
0x4e }}
+
+extern EFI_GUID gMmCommTestGuid;
+
+#pragma pack(1)
+typedef struct {
+  EFI_SYSTEM_TABLE      EfiSystemTable;
+} EFI_MM_COMMUNICATE_TEST_DATA;
+
+typedef struct {
+  EFI_GUID                         HeaderGuid;
+  UINTN                            MessageLength;
+  EFI_MM_COMMUNICATE_TEST_DATA     Data;
+} EFI_MM_COMMUNICATE_TEST;
+#pragma pack()
+
+#endif
diff --git a/StandaloneMmPkg/Application/MmCommTestApp/MmCommTest.inf 
b/StandaloneMmPkg/Application/MmCommTestApp/MmCommTest.inf
new file mode 100644
index 0000000000..1828cd7e13
--- /dev/null
+++ b/StandaloneMmPkg/Application/MmCommTestApp/MmCommTest.inf
@@ -0,0 +1,57 @@
+## @file
+#  Sample UEFI Application Reference EDKII Module.
+#
+#  This is a sample shell application that will print "UEFI firmware version 
Info!" to the
+#  UEFI Console.
+#
+#  It demos how to communicate with secure partition using MM
+#  communication protocol.
+#
+#  Copyright (c) 2008 - 2014, Intel Corporation. All rights reserved.<BR>
+#  Copyright (c) 2016 - 2018, ARM Limited. All rights reserved.
+#
+#  This program and the accompanying materials
+#  are licensed and made available under the terms and conditions of the BSD 
License
+#  which accompanies this distribution. The full text of the license may be 
found at
+#  http://opensource.org/licenses/bsd-license.php
+#  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR 
IMPLIED.
+#
+#
+##
+
+[Defines]
+  INF_VERSION                    = 0x0001001A
+  BASE_NAME                      = MmCommTest
+  FILE_GUID                      = 6987936E-ED34-44db-AE97-1FA5E4ED2116
+  MODULE_TYPE                    = UEFI_APPLICATION
+  VERSION_STRING                 = 1.0
+  ENTRY_POINT                    = MmCommTestEntryPoint
+
+[Sources]
+  MmCommTest.c
+
+[Packages]
+  ArmPkg/ArmPkg.dec
+  ArmPlatformPkg/ArmPlatformPkg.dec
+  MdePkg/MdePkg.dec
+  StandaloneMmPkg/StandaloneMmPkg.dec
+
+[LibraryClasses]
+  ArmSmcLib
+  BaseMemoryLib
+  DebugLib
+  PrintLib
+  UefiApplicationEntryPoint
+  UefiBootServicesTableLib
+  UefiLib
+
+[FeaturePcd]
+
+[Pcd]
+
+[Guids]
+  gMmCommTestGuid
+
+[Protocols]
+  gEfiMmCommunicationProtocolGuid
-- 
2.16.2

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

Reply via email to