From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=217.140.101.70; helo=foss.arm.com; envelope-from=supreeth.venkatesh@arm.com; receiver=edk2-devel@lists.01.org Received: from foss.arm.com (usa-sjc-mx-foss1.foss.arm.com [217.140.101.70]) by ml01.01.org (Postfix) with ESMTP id C199922620E79 for ; Fri, 6 Apr 2018 07:43:56 -0700 (PDT) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.72.51.249]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id A20351529; Fri, 6 Apr 2018 07:43:56 -0700 (PDT) Received: from u201365.usa.Arm.com (bc-c3-3-14.eu.iaas.arm.com [10.6.43.238]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 2AB613F587; Fri, 6 Apr 2018 07:43:55 -0700 (PDT) From: Supreeth Venkatesh To: edk2-devel@lists.01.org Cc: michael.d.kinney@intel.com, liming.gao@intel.com, jiewen.yao@intel.com, achin.gupta@arm.com, leif.lindholm@linaro.org, ard.biesheuvel@linaro.org, Supreeth Venkatesh Date: Fri, 6 Apr 2018 15:42:22 +0100 Message-Id: <20180406144223.10931-18-supreeth.venkatesh@arm.com> X-Mailer: git-send-email 2.16.2 In-Reply-To: <20180406144223.10931-1-supreeth.venkatesh@arm.com> References: <20180406144223.10931-1-supreeth.venkatesh@arm.com> Subject: [PATCH v1 17/18] StandaloneMmPkg: Add application to test MM communication protocol. X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.26 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 06 Apr 2018 14:43:56 -0000 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 Signed-off-by: Supreeth Venkatesh --- .../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.
+ 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. + +**/ + +#include +#include +#include +#include +#include +#include +#include + +#include "MmCommTest.h" + +#include + +#include + +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.
+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 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.
+# 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