From nobody Mon Feb 9 19:52:47 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) client-ip=66.175.222.12; envelope-from=bounce+27952+51985+1787277+3901457@groups.io; helo=web01.groups.io; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+51985+1787277+3901457@groups.io ARC-Seal: i=1; a=rsa-sha256; t=1575647096; cv=none; d=zohomail.com; s=zohoarc; b=dFSf+H2LPHhkz30uOC6NF585TWnZlIEVawJP2zTnhWeIUybXYurAhKCcUzaz9cfM1/zPEFCap8hs3WsACYgckZyUEa4b2rbvztT/RZ7DN7IPk8Nh61oJL4Qm4C8sXxVzl3vpCk22Dl8RI1ByIpca2NFB7nm3RdTCle2DhtuFZNw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1575647096; h=Cc:Date:From:In-Reply-To:List-Id:List-Unsubscribe:Message-ID:Reply-To:References:Sender:Subject:To; bh=2TmGiiKcgQ24RLaNg7vk0jBrCVGR1B6mMc3XqGImOZ4=; b=YaDzEOKbpUmn9rrN0FaztUstGpAX067hsZyvo5FeRCZyyGpzQlrYqIAVCh7IBclzbYpvyZnqUN4Uoha9TwmO4IlsFq3jhtOizOPDQiMFDZlzG1QQcQDTml+yBxwFfCg9Sja71+zh/hkQ4/bj9xRYWxrWGcolhS84zdPO9j5YYMY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.12 as permitted sender) smtp.mailfrom=bounce+27952+51985+1787277+3901457@groups.io Received: from web01.groups.io (web01.groups.io [66.175.222.12]) by mx.zohomail.com with SMTPS id 157564709688551.20067352942294; Fri, 6 Dec 2019 07:44:56 -0800 (PST) Return-Path: X-Received: by 127.0.0.2 with SMTP id aaaaYY1788612xaaaaaaaaaa; Fri, 06 Dec 2019 07:44:55 -0800 X-Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mx.groups.io with SMTP id smtpd.web11.5284.1575646192978530450 for ; Fri, 06 Dec 2019 07:29:53 -0800 X-Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 8121E31B; Fri, 6 Dec 2019 07:29:52 -0800 (PST) X-Received: from e123331-lin.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.121.207.14]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 2FE0D3F718; Fri, 6 Dec 2019 07:29:51 -0800 (PST) From: Ard Biesheuvel To: devel@edk2.groups.io Cc: Ard Biesheuvel , Michael D Kinney , Leif Lindholm , Liming Gao , Hao A Wu , Eric Dong , Ray Ni , Achin Gupta , Jiewen Yao Subject: [edk2-devel] [PATCH 6/7] MdeModulePkg/VariableSmmRuntimeDxe: switch to MM communicate 2 protocol Date: Fri, 6 Dec 2019 15:29:45 +0000 Message-Id: <20191206152946.624-7-ard.biesheuvel@arm.com> In-Reply-To: <20191206152946.624-1-ard.biesheuvel@arm.com> References: <20191206152946.624-1-ard.biesheuvel@arm.com> Precedence: Bulk List-Unsubscribe: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,ard.biesheuvel@arm.com X-Gm-Message-State: aaaaaaaaaaaaaaaaaaaaaaaax1787277AA= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1575647095; bh=MzaFIiQp2N8FxO/a0CCsBHOaG8UwQb+QhD5SEkZNIcQ=; h=Cc:Date:From:Reply-To:Subject:To; b=ZC03/F9ZMnbxPaSVWbm2zwugAyo78tMIxKJfNBx5eKck7lEWal677DQU26stLNE4CvD dBTe0sU6qmBpiv/9JVhnukZsp47I7v7cOo4oSG/+spmsT3/Wt8fCY5fMpZGbtjZ99wCeN ltaXZs3bVgPCPJ63q6Vt/W5M71fITejet9M= X-ZohoMail-DKIM: pass (identity @groups.io) Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: Ard Biesheuvel Switch to the new MM communicate 2 protocol which supports both traditional and standalone MM. Signed-off-by: Ard Biesheuvel --- MdeModulePkg/Include/Guid/SmmVariableCommon.h | 6 = +-- MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmmRuntimeDxe.c | 39 = +++++++++++--------- MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmmRuntimeDxe.inf | 4 = +- 3 files changed, 26 insertions(+), 23 deletions(-) diff --git a/MdeModulePkg/Include/Guid/SmmVariableCommon.h b/MdeModulePkg/I= nclude/Guid/SmmVariableCommon.h index ceef44dfd2d7..8ddc94b92da6 100644 --- a/MdeModulePkg/Include/Guid/SmmVariableCommon.h +++ b/MdeModulePkg/Include/Guid/SmmVariableCommon.h @@ -20,7 +20,7 @@ extern EFI_GUID gSmmVariableWriteGuid; // // This structure is used for SMM variable. the collected statistics data = is saved in SMRAM. It can be got from // SMI handler. The communication buffer should be: -// EFI_SMM_COMMUNICATE_HEADER + SMM_VARIABLE_COMMUNICATE_HEADER + payload. +// EFI_MM_COMMUNICATE_HEADER + SMM_VARIABLE_COMMUNICATE_HEADER + payload. // typedef struct { UINTN Function; @@ -53,7 +53,7 @@ typedef struct { // #define SMM_VARIABLE_FUNCTION_EXIT_BOOT_SERVICE 6 // -// The payload for this function is VARIABLE_INFO_ENTRY. The GUID in EFI_S= MM_COMMUNICATE_HEADER +// The payload for this function is VARIABLE_INFO_ENTRY. The GUID in EFI_M= M_COMMUNICATE_HEADER // is gEfiSmmVariableProtocolGuid. // #define SMM_VARIABLE_FUNCTION_GET_STATISTICS 7 @@ -81,7 +81,7 @@ typedef struct { /// /// Size of SMM communicate header, without including the payload. /// -#define SMM_COMMUNICATE_HEADER_SIZE (OFFSET_OF (EFI_SMM_COMMUNICATE_HEADE= R, Data)) +#define SMM_COMMUNICATE_HEADER_SIZE (OFFSET_OF (EFI_MM_COMMUNICATE_HEADER= , Data)) =20 /// /// Size of SMM variable communicate header, without including the payload. diff --git a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmmRuntimeD= xe.c b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmmRuntimeDxe.c index 2cf0ed32ae55..c6777ec46d17 100644 --- a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmmRuntimeDxe.c +++ b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmmRuntimeDxe.c @@ -20,7 +20,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #include #include #include -#include +#include #include #include #include @@ -44,7 +44,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent EFI_HANDLE mHandle =3D NULL; EFI_SMM_VARIABLE_PROTOCOL *mSmmVariable =3D NULL; EFI_EVENT mVirtualAddressChangeEvent =3D NULL; -EFI_SMM_COMMUNICATION_PROTOCOL *mSmmCommunication =3D NULL; +EFI_MM_COMMUNICATION2_PROTOCOL *mMmCommunication2 =3D NULL; UINT8 *mVariableBuffer =3D NULL; UINT8 *mVariableBufferPhysical =3D NULL; VARIABLE_INFO_ENTRY *mVariableInfo =3D NULL; @@ -209,7 +209,7 @@ InitCommunicateBuffer ( IN UINTN Function ) { - EFI_SMM_COMMUNICATE_HEADER *SmmCommunicateHeader; + EFI_MM_COMMUNICATE_HEADER *SmmCommunicateHeader; SMM_VARIABLE_COMMUNICATE_HEADER *SmmVariableFunctionHeader; =20 =20 @@ -217,7 +217,7 @@ InitCommunicateBuffer ( return EFI_INVALID_PARAMETER; } =20 - SmmCommunicateHeader =3D (EFI_SMM_COMMUNICATE_HEADER *) mVariableBuffer; + SmmCommunicateHeader =3D (EFI_MM_COMMUNICATE_HEADER *) mVariableBuffer; CopyGuid (&SmmCommunicateHeader->HeaderGuid, &gEfiSmmVariableProtocolGui= d); SmmCommunicateHeader->MessageLength =3D DataSize + SMM_VARIABLE_COMMUNIC= ATE_HEADER_SIZE; =20 @@ -247,14 +247,17 @@ SendCommunicateBuffer ( { EFI_STATUS Status; UINTN CommSize; - EFI_SMM_COMMUNICATE_HEADER *SmmCommunicateHeader; + EFI_MM_COMMUNICATE_HEADER *SmmCommunicateHeader; SMM_VARIABLE_COMMUNICATE_HEADER *SmmVariableFunctionHeader; =20 CommSize =3D DataSize + SMM_COMMUNICATE_HEADER_SIZE + SMM_VARIABLE_COMMU= NICATE_HEADER_SIZE; - Status =3D mSmmCommunication->Communicate (mSmmCommunication, mVariableB= ufferPhysical, &CommSize); + Status =3D mMmCommunication2->Communicate (mMmCommunication2, + mVariableBufferPhysical, + mVariableBuffer, + &CommSize); ASSERT_EFI_ERROR (Status); =20 - SmmCommunicateHeader =3D (EFI_SMM_COMMUNICATE_HEADER *) mVariableBu= ffer; + SmmCommunicateHeader =3D (EFI_MM_COMMUNICATE_HEADER *) mVariableBuf= fer; SmmVariableFunctionHeader =3D (SMM_VARIABLE_COMMUNICATE_HEADER *)SmmComm= unicateHeader->Data; return SmmVariableFunctionHeader->ReturnStatus; } @@ -1307,7 +1310,7 @@ VariableAddressChangeEvent ( ) { EfiConvertPointer (0x0, (VOID **) &mVariableBuffer); - EfiConvertPointer (0x0, (VOID **) &mSmmCommunication); + EfiConvertPointer (0x0, (VOID **) &mMmCommunication2); EfiConvertPointer (EFI_OPTIONAL_PTR, (VOID **) &mVariableRuntimeHobCache= Buffer); EfiConvertPointer (EFI_OPTIONAL_PTR, (VOID **) &mVariableRuntimeNvCacheB= uffer); EfiConvertPointer (EFI_OPTIONAL_PTR, (VOID **) &mVariableRuntimeVolatile= CacheBuffer); @@ -1330,7 +1333,7 @@ GetVariablePayloadSize ( { EFI_STATUS Status; SMM_VARIABLE_COMMUNICATE_GET_PAYLOAD_SIZE *SmmGetPayloadSize; - EFI_SMM_COMMUNICATE_HEADER *SmmCommunicateHeader; + EFI_MM_COMMUNICATE_HEADER *SmmCommunicateHeader; SMM_VARIABLE_COMMUNICATE_HEADER *SmmVariableFunctionHeader; UINTN CommSize; UINT8 *CommBuffer; @@ -1355,7 +1358,7 @@ GetVariablePayloadSize ( goto Done; } =20 - SmmCommunicateHeader =3D (EFI_SMM_COMMUNICATE_HEADER *) CommBuffer; + SmmCommunicateHeader =3D (EFI_MM_COMMUNICATE_HEADER *) CommBuffer; CopyGuid (&SmmCommunicateHeader->HeaderGuid, &gEfiSmmVariableProtocolGui= d); SmmCommunicateHeader->MessageLength =3D SMM_VARIABLE_COMMUNICATE_HEADER_= SIZE + sizeof (SMM_VARIABLE_COMMUNICATE_GET_PAYLOAD_SIZE); =20 @@ -1366,7 +1369,7 @@ GetVariablePayloadSize ( // // Send data to SMM. // - Status =3D mSmmCommunication->Communicate (mSmmCommunication, CommBuffer= , &CommSize); + Status =3D mMmCommunication2->Communicate (mMmCommunication2, CommBuffer= , CommBuffer, &CommSize); ASSERT_EFI_ERROR (Status); =20 Status =3D SmmVariableFunctionHeader->ReturnStatus; @@ -1411,7 +1414,7 @@ GetRuntimeCacheInfo ( { EFI_STATUS Status; SMM_VARIABLE_COMMUNICATE_GET_RUNTIME_CACHE_INFO *SmmGetRuntimeCacheI= nfo; - EFI_SMM_COMMUNICATE_HEADER *SmmCommunicateHeade= r; + EFI_MM_COMMUNICATE_HEADER *SmmCommunicateHeade= r; SMM_VARIABLE_COMMUNICATE_HEADER *SmmVariableFunction= Header; UINTN CommSize; UINT8 *CommBuffer; @@ -1432,7 +1435,7 @@ GetRuntimeCacheInfo ( CommSize =3D SMM_COMMUNICATE_HEADER_SIZE + SMM_VARIABLE_COMMUNICATE_HEAD= ER_SIZE + sizeof (SMM_VARIABLE_COMMUNICATE_GET_RUNTIME_CACHE_INFO); ZeroMem (CommBuffer, CommSize); =20 - SmmCommunicateHeader =3D (EFI_SMM_COMMUNICATE_HEADER *) CommBuffer; + SmmCommunicateHeader =3D (EFI_MM_COMMUNICATE_HEADER *) CommBuffer; CopyGuid (&SmmCommunicateHeader->HeaderGuid, &gEfiSmmVariableProtocolGui= d); SmmCommunicateHeader->MessageLength =3D SMM_VARIABLE_COMMUNICATE_HEADER_= SIZE + sizeof (SMM_VARIABLE_COMMUNICATE_GET_RUNTIME_CACHE_INFO); =20 @@ -1443,7 +1446,7 @@ GetRuntimeCacheInfo ( // // Send data to SMM. // - Status =3D mSmmCommunication->Communicate (mSmmCommunication, CommBuffer= , &CommSize); + Status =3D mMmCommunication2->Communicate (mMmCommunication2, CommBuffer= , CommBuffer, &CommSize); ASSERT_EFI_ERROR (Status); if (CommSize <=3D SMM_VARIABLE_COMMUNICATE_HEADER_SIZE) { Status =3D EFI_BAD_BUFFER_SIZE; @@ -1484,7 +1487,7 @@ SendRuntimeVariableCacheContextToSmm ( { EFI_STATUS Status; SMM_VARIABLE_COMMUNICATE_RUNTIME_VARIABLE_CACHE_CONTEXT *SmmRuntimeVar= CacheContext; - EFI_SMM_COMMUNICATE_HEADER *SmmCommunicat= eHeader; + EFI_MM_COMMUNICATE_HEADER *SmmCommunicat= eHeader; SMM_VARIABLE_COMMUNICATE_HEADER *SmmVariableFu= nctionHeader; UINTN CommSize; UINT8 *CommBuffer; @@ -1505,7 +1508,7 @@ SendRuntimeVariableCacheContextToSmm ( CommSize =3D SMM_COMMUNICATE_HEADER_SIZE + SMM_VARIABLE_COMMUNICATE_HEAD= ER_SIZE + sizeof (SMM_VARIABLE_COMMUNICATE_RUNTIME_VARIABLE_CACHE_CONTEXT); ZeroMem (CommBuffer, CommSize); =20 - SmmCommunicateHeader =3D (EFI_SMM_COMMUNICATE_HEADER *) CommBuffer; + SmmCommunicateHeader =3D (EFI_MM_COMMUNICATE_HEADER *) CommBuffer; CopyGuid (&SmmCommunicateHeader->HeaderGuid, &gEfiSmmVariableProtocolGui= d); SmmCommunicateHeader->MessageLength =3D SMM_VARIABLE_COMMUNICATE_HEADER_= SIZE + sizeof (SMM_VARIABLE_COMMUNICATE_RUNTIME_VARIABLE_CACHE_CONTEXT); =20 @@ -1523,7 +1526,7 @@ SendRuntimeVariableCacheContextToSmm ( // // Send data to SMM. // - Status =3D mSmmCommunication->Communicate (mSmmCommunication, CommBuffer= , &CommSize); + Status =3D mMmCommunication2->Communicate (mMmCommunication2, CommBuffer= , CommBuffer, &CommSize); ASSERT_EFI_ERROR (Status); if (CommSize <=3D SMM_VARIABLE_COMMUNICATE_HEADER_SIZE) { Status =3D EFI_BAD_BUFFER_SIZE; @@ -1561,7 +1564,7 @@ SmmVariableReady ( return; } =20 - Status =3D gBS->LocateProtocol (&gEfiSmmCommunicationProtocolGuid, NULL,= (VOID **) &mSmmCommunication); + Status =3D gBS->LocateProtocol (&gEfiMmCommunication2ProtocolGuid, NULL,= (VOID **) &mMmCommunication2); ASSERT_EFI_ERROR (Status); =20 // diff --git a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmmRuntimeD= xe.inf b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmmRuntimeDxe.i= nf index 592862773390..01564e4c5068 100644 --- a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmmRuntimeDxe.inf +++ b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmmRuntimeDxe.inf @@ -60,7 +60,7 @@ [LibraryClasses] [Protocols] gEfiVariableWriteArchProtocolGuid ## PRODUCES gEfiVariableArchProtocolGuid ## PRODUCES - gEfiSmmCommunicationProtocolGuid ## CONSUMES + gEfiMmCommunication2ProtocolGuid ## CONSUMES ## CONSUMES ## NOTIFY ## UNDEFINED # Used to do smm communication @@ -100,7 +100,7 @@ [Guids] gEfiImageSecurityDatabaseGuid =20 [Depex] - gEfiSmmCommunicationProtocolGuid + gEfiMmCommunication2ProtocolGuid =20 [UserExtensions.TianoCore."ExtraFiles"] VariableSmmRuntimeDxeExtra.uni --=20 2.17.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#51985): https://edk2.groups.io/g/devel/message/51985 Mute This Topic: https://groups.io/mt/67497131/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-