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