From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wm1-f66.google.com (mail-wm1-f66.google.com [209.85.128.66]) by mx.groups.io with SMTP id smtpd.web10.3915.1574411568958832544 for ; Fri, 22 Nov 2019 00:32:49 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@linaro.org header.s=google header.b=Lwd55nvg; spf=pass (domain: linaro.org, ip: 209.85.128.66, mailfrom: ard.biesheuvel@linaro.org) Received: by mail-wm1-f66.google.com with SMTP id t26so6563464wmi.4 for ; Fri, 22 Nov 2019 00:32:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=xz8nTBEwN/K2kqOHOhgUgMU6OSj/Vrrne4VOYBtFmQc=; b=Lwd55nvgng6dPdUijhfijHnLcp+oWcRaEClnSNcxT6QYAYGoy99++DTVMRMXNmGNsE NCznVhnwYQU83glNEMe4AdV3vqKyFMHTe/wPaHDWI4puKM4+Bnt84h3R1qaDOnY04VXL 5wbKwk23EYcHm5sRGEFXz/LCW3KWxgZfkKU2AtHeY+kAKgb67cNOsDR1nP9Tx3v8+pjW ZrtBZT/qmQd9xbaEmNZYd8EWiykDHJAUmvtm0pSg23jf3E/MF1XfUWG295cCTpLvgHgB rmhHFbyVm2VgKO07tgTvQD8d06Drd1yKcuFMIf14Fh5SVWM9alUSoss0k3QeYsBxs2Dm k7Yg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=xz8nTBEwN/K2kqOHOhgUgMU6OSj/Vrrne4VOYBtFmQc=; b=h9GSC3tYyMsGXmY8Pm4vHXvwmwZf9F0Lb3Pj47pT5V6MuD8K52g+RU+OQQRcTQeXMQ Wd96CnH9dRzvRipGVv7EvQWM1/+ngcR5eqRPut0SKD7GK3f6mGcn+G7LtJNMpjM3NJTm q6KRUPCJoUcPgUAauIyh6DPCjJ8VH3ntOceA9hOlMapZcCXIG2LoCK0t+YHejKEjcdMI cw4NrGAvvNdPVhbbwhxc7fw9p3PVSnOphwqUwg6NfqqiLnkW28+eKXQCc1dWtcAAHsVe v9jU/1t3f59kzGsepey39I3qDuu0lUI46iZ3y86hHdoqWPBDcmVKHjtClOeb/k7YiIr4 26IA== X-Gm-Message-State: APjAAAXyw+2CrenpoyzjO8oraJYxH7kHI99hHGs760J9awMH1a+tc558 fZBFR24LJ4TR6xyOCGk4A/2geBikeTePQhpE X-Google-Smtp-Source: APXvYqydeT2BMVzA3no9A8WGb0i6j5tRl7hYMHnSBMjTFWQzkCyaLTpo/Q9IIY2OGjgMvnk51Dj0Ow== X-Received: by 2002:a1c:96c9:: with SMTP id y192mr15639378wmd.8.1574411567199; Fri, 22 Nov 2019 00:32:47 -0800 (PST) Return-Path: Received: from sudo.home ([2a01:cb1d:112:6f00:ac04:254:3863:fdeb]) by smtp.gmail.com with ESMTPSA id c15sm7225845wrx.78.2019.11.22.00.32.46 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 22 Nov 2019 00:32:46 -0800 (PST) From: "Ard Biesheuvel" To: devel@edk2.groups.io Cc: leif.lindholm@linaro.org, Ard Biesheuvel , piwg@uefi.org, kimon.berlin@hp.com, eugene@hp.com Subject: [PATCH 6/6] MdeModulePkg/VariableSmmRuntimeDxe: switch to MM communicate 2 protocol Date: Fri, 22 Nov 2019 09:32:34 +0100 Message-Id: <20191122083234.12756-7-ard.biesheuvel@linaro.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20191122083234.12756-1-ard.biesheuvel@linaro.org> References: <20191122083234.12756-1-ard.biesheuvel@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 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/Include/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_SMM_COMMUNICATE_HEADER +// The payload for this function is VARIABLE_INFO_ENTRY. The GUID in EFI_MM_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_HEADER, Data)) +#define SMM_COMMUNICATE_HEADER_SIZE (OFFSET_OF (EFI_MM_COMMUNICATE_HEADER, Data)) /// /// Size of SMM variable communicate header, without including the payload. diff --git a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmmRuntimeDxe.c b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmmRuntimeDxe.c index d525998ae301..f49e4a9664ae 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 = NULL; EFI_SMM_VARIABLE_PROTOCOL *mSmmVariable = NULL; EFI_EVENT mVirtualAddressChangeEvent = NULL; -EFI_SMM_COMMUNICATION_PROTOCOL *mSmmCommunication = NULL; +EFI_MM_COMMUNICATION2_PROTOCOL *mMmCommunication2 = NULL; UINT8 *mVariableBuffer = NULL; UINT8 *mVariableBufferPhysical = NULL; VARIABLE_INFO_ENTRY *mVariableInfo = NULL; @@ -209,7 +209,7 @@ InitCommunicateBuffer ( IN UINTN Function ) { - EFI_SMM_COMMUNICATE_HEADER *SmmCommunicateHeader; + EFI_MM_COMMUNICATE_HEADER *SmmCommunicateHeader; SMM_VARIABLE_COMMUNICATE_HEADER *SmmVariableFunctionHeader; @@ -217,7 +217,7 @@ InitCommunicateBuffer ( return EFI_INVALID_PARAMETER; } - SmmCommunicateHeader = (EFI_SMM_COMMUNICATE_HEADER *) mVariableBuffer; + SmmCommunicateHeader = (EFI_MM_COMMUNICATE_HEADER *) mVariableBuffer; CopyGuid (&SmmCommunicateHeader->HeaderGuid, &gEfiSmmVariableProtocolGuid); SmmCommunicateHeader->MessageLength = DataSize + SMM_VARIABLE_COMMUNICATE_HEADER_SIZE; @@ -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; CommSize = DataSize + SMM_COMMUNICATE_HEADER_SIZE + SMM_VARIABLE_COMMUNICATE_HEADER_SIZE; - Status = mSmmCommunication->Communicate (mSmmCommunication, mVariableBufferPhysical, &CommSize); + Status = mMmCommunication2->Communicate (mMmCommunication2, + mVariableBufferPhysical, + mVariableBuffer, + &CommSize); ASSERT_EFI_ERROR (Status); - SmmCommunicateHeader = (EFI_SMM_COMMUNICATE_HEADER *) mVariableBuffer; + SmmCommunicateHeader = (EFI_MM_COMMUNICATE_HEADER *) mVariableBuffer; SmmVariableFunctionHeader = (SMM_VARIABLE_COMMUNICATE_HEADER *)SmmCommunicateHeader->Data; return SmmVariableFunctionHeader->ReturnStatus; } @@ -1305,7 +1308,7 @@ VariableAddressChangeEvent ( ) { EfiConvertPointer (0x0, (VOID **) &mVariableBuffer); - EfiConvertPointer (0x0, (VOID **) &mSmmCommunication); + EfiConvertPointer (0x0, (VOID **) &mMmCommunication2); EfiConvertPointer (EFI_OPTIONAL_PTR, (VOID **) &mVariableRuntimeHobCacheBuffer); EfiConvertPointer (EFI_OPTIONAL_PTR, (VOID **) &mVariableRuntimeNvCacheBuffer); EfiConvertPointer (EFI_OPTIONAL_PTR, (VOID **) &mVariableRuntimeVolatileCacheBuffer); @@ -1328,7 +1331,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; @@ -1353,7 +1356,7 @@ GetVariablePayloadSize ( goto Done; } - SmmCommunicateHeader = (EFI_SMM_COMMUNICATE_HEADER *) CommBuffer; + SmmCommunicateHeader = (EFI_MM_COMMUNICATE_HEADER *) CommBuffer; CopyGuid (&SmmCommunicateHeader->HeaderGuid, &gEfiSmmVariableProtocolGuid); SmmCommunicateHeader->MessageLength = SMM_VARIABLE_COMMUNICATE_HEADER_SIZE + sizeof (SMM_VARIABLE_COMMUNICATE_GET_PAYLOAD_SIZE); @@ -1364,7 +1367,7 @@ GetVariablePayloadSize ( // // Send data to SMM. // - Status = mSmmCommunication->Communicate (mSmmCommunication, CommBuffer, &CommSize); + Status = mMmCommunication2->Communicate (mMmCommunication2, CommBuffer, CommBuffer, &CommSize); ASSERT_EFI_ERROR (Status); Status = SmmVariableFunctionHeader->ReturnStatus; @@ -1409,7 +1412,7 @@ GetRuntimeCacheInfo ( { EFI_STATUS Status; SMM_VARIABLE_COMMUNICATE_GET_RUNTIME_CACHE_INFO *SmmGetRuntimeCacheInfo; - EFI_SMM_COMMUNICATE_HEADER *SmmCommunicateHeader; + EFI_MM_COMMUNICATE_HEADER *SmmCommunicateHeader; SMM_VARIABLE_COMMUNICATE_HEADER *SmmVariableFunctionHeader; UINTN CommSize; UINT8 *CommBuffer; @@ -1430,7 +1433,7 @@ GetRuntimeCacheInfo ( CommSize = SMM_COMMUNICATE_HEADER_SIZE + SMM_VARIABLE_COMMUNICATE_HEADER_SIZE + sizeof (SMM_VARIABLE_COMMUNICATE_GET_RUNTIME_CACHE_INFO); ZeroMem (CommBuffer, CommSize); - SmmCommunicateHeader = (EFI_SMM_COMMUNICATE_HEADER *) CommBuffer; + SmmCommunicateHeader = (EFI_MM_COMMUNICATE_HEADER *) CommBuffer; CopyGuid (&SmmCommunicateHeader->HeaderGuid, &gEfiSmmVariableProtocolGuid); SmmCommunicateHeader->MessageLength = SMM_VARIABLE_COMMUNICATE_HEADER_SIZE + sizeof (SMM_VARIABLE_COMMUNICATE_GET_RUNTIME_CACHE_INFO); @@ -1441,7 +1444,7 @@ GetRuntimeCacheInfo ( // // Send data to SMM. // - Status = mSmmCommunication->Communicate (mSmmCommunication, CommBuffer, &CommSize); + Status = mMmCommunication2->Communicate (mMmCommunication2, CommBuffer, CommBuffer, &CommSize); ASSERT_EFI_ERROR (Status); if (CommSize <= SMM_VARIABLE_COMMUNICATE_HEADER_SIZE) { Status = EFI_BAD_BUFFER_SIZE; @@ -1482,7 +1485,7 @@ SendRuntimeVariableCacheContextToSmm ( { EFI_STATUS Status; SMM_VARIABLE_COMMUNICATE_RUNTIME_VARIABLE_CACHE_CONTEXT *SmmRuntimeVarCacheContext; - EFI_SMM_COMMUNICATE_HEADER *SmmCommunicateHeader; + EFI_MM_COMMUNICATE_HEADER *SmmCommunicateHeader; SMM_VARIABLE_COMMUNICATE_HEADER *SmmVariableFunctionHeader; UINTN CommSize; UINT8 *CommBuffer; @@ -1503,7 +1506,7 @@ SendRuntimeVariableCacheContextToSmm ( CommSize = SMM_COMMUNICATE_HEADER_SIZE + SMM_VARIABLE_COMMUNICATE_HEADER_SIZE + sizeof (SMM_VARIABLE_COMMUNICATE_RUNTIME_VARIABLE_CACHE_CONTEXT); ZeroMem (CommBuffer, CommSize); - SmmCommunicateHeader = (EFI_SMM_COMMUNICATE_HEADER *) CommBuffer; + SmmCommunicateHeader = (EFI_MM_COMMUNICATE_HEADER *) CommBuffer; CopyGuid (&SmmCommunicateHeader->HeaderGuid, &gEfiSmmVariableProtocolGuid); SmmCommunicateHeader->MessageLength = SMM_VARIABLE_COMMUNICATE_HEADER_SIZE + sizeof (SMM_VARIABLE_COMMUNICATE_RUNTIME_VARIABLE_CACHE_CONTEXT); @@ -1521,7 +1524,7 @@ SendRuntimeVariableCacheContextToSmm ( // // Send data to SMM. // - Status = mSmmCommunication->Communicate (mSmmCommunication, CommBuffer, &CommSize); + Status = mMmCommunication2->Communicate (mMmCommunication2, CommBuffer, CommBuffer, &CommSize); ASSERT_EFI_ERROR (Status); if (CommSize <= SMM_VARIABLE_COMMUNICATE_HEADER_SIZE) { Status = EFI_BAD_BUFFER_SIZE; @@ -1559,7 +1562,7 @@ SmmVariableReady ( return; } - Status = gBS->LocateProtocol (&gEfiSmmCommunicationProtocolGuid, NULL, (VOID **) &mSmmCommunication); + Status = gBS->LocateProtocol (&gEfiMmCommunication2ProtocolGuid, NULL, (VOID **) &mMmCommunication2); ASSERT_EFI_ERROR (Status); // diff --git a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmmRuntimeDxe.inf b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmmRuntimeDxe.inf index a250533a534f..0f3ec6a9a43d 100644 --- a/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmmRuntimeDxe.inf +++ b/MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmmRuntimeDxe.inf @@ -59,7 +59,7 @@ [Protocols] gEfiVariableWriteArchProtocolGuid ## PRODUCES gEfiVariableArchProtocolGuid ## PRODUCES - gEfiSmmCommunicationProtocolGuid ## CONSUMES + gEfiMmCommunication2ProtocolGuid ## CONSUMES ## CONSUMES ## NOTIFY ## UNDEFINED # Used to do smm communication @@ -99,7 +99,7 @@ gEfiImageSecurityDatabaseGuid [Depex] - gEfiSmmCommunicationProtocolGuid + gEfiMmCommunication2ProtocolGuid [UserExtensions.TianoCore."ExtraFiles"] VariableSmmRuntimeDxeExtra.uni -- 2.20.1