]> git.proxmox.com Git - mirror_edk2.git/commitdiff
MdeModulePkg/VariableSmmRuntimeDxe: switch to MM communicate 2
authorArd Biesheuvel <ard.biesheuvel@arm.com>
Sat, 18 Apr 2020 16:45:33 +0000 (18:45 +0200)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Tue, 12 May 2020 19:23:44 +0000 (19:23 +0000)
Switch to the new MM communicate 2 protocol which supports both
traditional and standalone MM.

Signed-off-by: Ard Biesheuvel <ard.biesheuvel@arm.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
Reviewed-by: Sami Mujawar <sami.mujawar@arm.com>
MdeModulePkg/Include/Guid/SmmVariableCommon.h
MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmmRuntimeDxe.c
MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmmRuntimeDxe.inf

index ceef44dfd2d7c40ef2bcc591399a5a7c2b5e9d31..8ddc94b92da67ca113c6de738d48e87a49bf2609 100644 (file)
@@ -20,7 +20,7 @@ extern EFI_GUID gSmmVariableWriteGuid;
 //\r
 // This structure is used for SMM variable. the collected statistics data is saved in SMRAM. It can be got from\r
 // SMI handler. The communication buffer should be:\r
-// EFI_SMM_COMMUNICATE_HEADER + SMM_VARIABLE_COMMUNICATE_HEADER + payload.\r
+// EFI_MM_COMMUNICATE_HEADER + SMM_VARIABLE_COMMUNICATE_HEADER + payload.\r
 //\r
 typedef struct {\r
   UINTN       Function;\r
@@ -53,7 +53,7 @@ typedef struct {
 //\r
 #define SMM_VARIABLE_FUNCTION_EXIT_BOOT_SERVICE       6\r
 //\r
-// The payload for this function is VARIABLE_INFO_ENTRY. The GUID in EFI_SMM_COMMUNICATE_HEADER\r
+// The payload for this function is VARIABLE_INFO_ENTRY. The GUID in EFI_MM_COMMUNICATE_HEADER\r
 // is gEfiSmmVariableProtocolGuid.\r
 //\r
 #define SMM_VARIABLE_FUNCTION_GET_STATISTICS          7\r
@@ -81,7 +81,7 @@ typedef struct {
 ///\r
 /// Size of SMM communicate header, without including the payload.\r
 ///\r
-#define SMM_COMMUNICATE_HEADER_SIZE  (OFFSET_OF (EFI_SMM_COMMUNICATE_HEADER, Data))\r
+#define SMM_COMMUNICATE_HEADER_SIZE  (OFFSET_OF (EFI_MM_COMMUNICATE_HEADER, Data))\r
 \r
 ///\r
 /// Size of SMM variable communicate header, without including the payload.\r
index ca833fb0244d1b62f10caaf939f932af5766b678..663a1aaa128ffccbfaac3708e5913f664327c1b8 100644 (file)
@@ -21,7 +21,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
 #include <PiDxe.h>\r
 #include <Protocol/VariableWrite.h>\r
 #include <Protocol/Variable.h>\r
-#include <Protocol/SmmCommunication.h>\r
+#include <Protocol/MmCommunication2.h>\r
 #include <Protocol/SmmVariable.h>\r
 #include <Protocol/VariableLock.h>\r
 #include <Protocol/VarCheck.h>\r
@@ -45,7 +45,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
 EFI_HANDLE                       mHandle                    = NULL;\r
 EFI_SMM_VARIABLE_PROTOCOL       *mSmmVariable               = NULL;\r
 EFI_EVENT                        mVirtualAddressChangeEvent = NULL;\r
-EFI_SMM_COMMUNICATION_PROTOCOL  *mSmmCommunication          = NULL;\r
+EFI_MM_COMMUNICATION2_PROTOCOL  *mMmCommunication2          = NULL;\r
 UINT8                           *mVariableBuffer            = NULL;\r
 UINT8                           *mVariableBufferPhysical    = NULL;\r
 VARIABLE_INFO_ENTRY             *mVariableInfo              = NULL;\r
@@ -210,7 +210,7 @@ InitCommunicateBuffer (
   IN      UINTN                             Function\r
   )\r
 {\r
-  EFI_SMM_COMMUNICATE_HEADER                *SmmCommunicateHeader;\r
+  EFI_MM_COMMUNICATE_HEADER                 *SmmCommunicateHeader;\r
   SMM_VARIABLE_COMMUNICATE_HEADER           *SmmVariableFunctionHeader;\r
 \r
 \r
@@ -218,7 +218,7 @@ InitCommunicateBuffer (
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
-  SmmCommunicateHeader = (EFI_SMM_COMMUNICATE_HEADER *) mVariableBuffer;\r
+  SmmCommunicateHeader = (EFI_MM_COMMUNICATE_HEADER *) mVariableBuffer;\r
   CopyGuid (&SmmCommunicateHeader->HeaderGuid, &gEfiSmmVariableProtocolGuid);\r
   SmmCommunicateHeader->MessageLength = DataSize + SMM_VARIABLE_COMMUNICATE_HEADER_SIZE;\r
 \r
@@ -248,14 +248,17 @@ SendCommunicateBuffer (
 {\r
   EFI_STATUS                                Status;\r
   UINTN                                     CommSize;\r
-  EFI_SMM_COMMUNICATE_HEADER                *SmmCommunicateHeader;\r
+  EFI_MM_COMMUNICATE_HEADER                 *SmmCommunicateHeader;\r
   SMM_VARIABLE_COMMUNICATE_HEADER           *SmmVariableFunctionHeader;\r
 \r
   CommSize = DataSize + SMM_COMMUNICATE_HEADER_SIZE + SMM_VARIABLE_COMMUNICATE_HEADER_SIZE;\r
-  Status = mSmmCommunication->Communicate (mSmmCommunication, mVariableBufferPhysical, &CommSize);\r
+  Status = mMmCommunication2->Communicate (mMmCommunication2,\r
+                                           mVariableBufferPhysical,\r
+                                           mVariableBuffer,\r
+                                           &CommSize);\r
   ASSERT_EFI_ERROR (Status);\r
 \r
-  SmmCommunicateHeader      = (EFI_SMM_COMMUNICATE_HEADER *) mVariableBuffer;\r
+  SmmCommunicateHeader      = (EFI_MM_COMMUNICATE_HEADER *) mVariableBuffer;\r
   SmmVariableFunctionHeader = (SMM_VARIABLE_COMMUNICATE_HEADER *)SmmCommunicateHeader->Data;\r
   return  SmmVariableFunctionHeader->ReturnStatus;\r
 }\r
@@ -1309,7 +1312,7 @@ VariableAddressChangeEvent (
   )\r
 {\r
   EfiConvertPointer (0x0, (VOID **) &mVariableBuffer);\r
-  EfiConvertPointer (0x0, (VOID **) &mSmmCommunication);\r
+  EfiConvertPointer (0x0, (VOID **) &mMmCommunication2);\r
   EfiConvertPointer (EFI_OPTIONAL_PTR, (VOID **) &mVariableRuntimeHobCacheBuffer);\r
   EfiConvertPointer (EFI_OPTIONAL_PTR, (VOID **) &mVariableRuntimeNvCacheBuffer);\r
   EfiConvertPointer (EFI_OPTIONAL_PTR, (VOID **) &mVariableRuntimeVolatileCacheBuffer);\r
@@ -1332,7 +1335,7 @@ GetVariablePayloadSize (
 {\r
   EFI_STATUS                                Status;\r
   SMM_VARIABLE_COMMUNICATE_GET_PAYLOAD_SIZE *SmmGetPayloadSize;\r
-  EFI_SMM_COMMUNICATE_HEADER                *SmmCommunicateHeader;\r
+  EFI_MM_COMMUNICATE_HEADER                 *SmmCommunicateHeader;\r
   SMM_VARIABLE_COMMUNICATE_HEADER           *SmmVariableFunctionHeader;\r
   UINTN                                     CommSize;\r
   UINT8                                     *CommBuffer;\r
@@ -1357,7 +1360,7 @@ GetVariablePayloadSize (
     goto Done;\r
   }\r
 \r
-  SmmCommunicateHeader = (EFI_SMM_COMMUNICATE_HEADER *) CommBuffer;\r
+  SmmCommunicateHeader = (EFI_MM_COMMUNICATE_HEADER *) CommBuffer;\r
   CopyGuid (&SmmCommunicateHeader->HeaderGuid, &gEfiSmmVariableProtocolGuid);\r
   SmmCommunicateHeader->MessageLength = SMM_VARIABLE_COMMUNICATE_HEADER_SIZE + sizeof (SMM_VARIABLE_COMMUNICATE_GET_PAYLOAD_SIZE);\r
 \r
@@ -1368,7 +1371,7 @@ GetVariablePayloadSize (
   //\r
   // Send data to SMM.\r
   //\r
-  Status = mSmmCommunication->Communicate (mSmmCommunication, CommBuffer, &CommSize);\r
+  Status = mMmCommunication2->Communicate (mMmCommunication2, CommBuffer, CommBuffer, &CommSize);\r
   ASSERT_EFI_ERROR (Status);\r
 \r
   Status = SmmVariableFunctionHeader->ReturnStatus;\r
@@ -1413,7 +1416,7 @@ GetRuntimeCacheInfo (
 {\r
   EFI_STATUS                                          Status;\r
   SMM_VARIABLE_COMMUNICATE_GET_RUNTIME_CACHE_INFO     *SmmGetRuntimeCacheInfo;\r
-  EFI_SMM_COMMUNICATE_HEADER                          *SmmCommunicateHeader;\r
+  EFI_MM_COMMUNICATE_HEADER                           *SmmCommunicateHeader;\r
   SMM_VARIABLE_COMMUNICATE_HEADER                     *SmmVariableFunctionHeader;\r
   UINTN                                               CommSize;\r
   UINT8                                               *CommBuffer;\r
@@ -1434,7 +1437,7 @@ GetRuntimeCacheInfo (
   CommSize = SMM_COMMUNICATE_HEADER_SIZE + SMM_VARIABLE_COMMUNICATE_HEADER_SIZE + sizeof (SMM_VARIABLE_COMMUNICATE_GET_RUNTIME_CACHE_INFO);\r
   ZeroMem (CommBuffer, CommSize);\r
 \r
-  SmmCommunicateHeader = (EFI_SMM_COMMUNICATE_HEADER *) CommBuffer;\r
+  SmmCommunicateHeader = (EFI_MM_COMMUNICATE_HEADER *) CommBuffer;\r
   CopyGuid (&SmmCommunicateHeader->HeaderGuid, &gEfiSmmVariableProtocolGuid);\r
   SmmCommunicateHeader->MessageLength = SMM_VARIABLE_COMMUNICATE_HEADER_SIZE + sizeof (SMM_VARIABLE_COMMUNICATE_GET_RUNTIME_CACHE_INFO);\r
 \r
@@ -1445,7 +1448,7 @@ GetRuntimeCacheInfo (
   //\r
   // Send data to SMM.\r
   //\r
-  Status = mSmmCommunication->Communicate (mSmmCommunication, CommBuffer, &CommSize);\r
+  Status = mMmCommunication2->Communicate (mMmCommunication2, CommBuffer, CommBuffer, &CommSize);\r
   ASSERT_EFI_ERROR (Status);\r
   if (CommSize <= SMM_VARIABLE_COMMUNICATE_HEADER_SIZE) {\r
     Status = EFI_BAD_BUFFER_SIZE;\r
@@ -1486,7 +1489,7 @@ SendRuntimeVariableCacheContextToSmm (
 {\r
   EFI_STATUS                                                Status;\r
   SMM_VARIABLE_COMMUNICATE_RUNTIME_VARIABLE_CACHE_CONTEXT   *SmmRuntimeVarCacheContext;\r
-  EFI_SMM_COMMUNICATE_HEADER                                *SmmCommunicateHeader;\r
+  EFI_MM_COMMUNICATE_HEADER                                 *SmmCommunicateHeader;\r
   SMM_VARIABLE_COMMUNICATE_HEADER                           *SmmVariableFunctionHeader;\r
   UINTN                                                     CommSize;\r
   UINT8                                                     *CommBuffer;\r
@@ -1507,7 +1510,7 @@ SendRuntimeVariableCacheContextToSmm (
   CommSize = SMM_COMMUNICATE_HEADER_SIZE + SMM_VARIABLE_COMMUNICATE_HEADER_SIZE + sizeof (SMM_VARIABLE_COMMUNICATE_RUNTIME_VARIABLE_CACHE_CONTEXT);\r
   ZeroMem (CommBuffer, CommSize);\r
 \r
-  SmmCommunicateHeader = (EFI_SMM_COMMUNICATE_HEADER *) CommBuffer;\r
+  SmmCommunicateHeader = (EFI_MM_COMMUNICATE_HEADER *) CommBuffer;\r
   CopyGuid (&SmmCommunicateHeader->HeaderGuid, &gEfiSmmVariableProtocolGuid);\r
   SmmCommunicateHeader->MessageLength = SMM_VARIABLE_COMMUNICATE_HEADER_SIZE + sizeof (SMM_VARIABLE_COMMUNICATE_RUNTIME_VARIABLE_CACHE_CONTEXT);\r
 \r
@@ -1525,7 +1528,7 @@ SendRuntimeVariableCacheContextToSmm (
   //\r
   // Send data to SMM.\r
   //\r
-  Status = mSmmCommunication->Communicate (mSmmCommunication, CommBuffer, &CommSize);\r
+  Status = mMmCommunication2->Communicate (mMmCommunication2, CommBuffer, CommBuffer, &CommSize);\r
   ASSERT_EFI_ERROR (Status);\r
   if (CommSize <= SMM_VARIABLE_COMMUNICATE_HEADER_SIZE) {\r
     Status = EFI_BAD_BUFFER_SIZE;\r
@@ -1563,7 +1566,7 @@ SmmVariableReady (
     return;\r
   }\r
 \r
-  Status = gBS->LocateProtocol (&gEfiSmmCommunicationProtocolGuid, NULL, (VOID **) &mSmmCommunication);\r
+  Status = gBS->LocateProtocol (&gEfiMmCommunication2ProtocolGuid, NULL, (VOID **) &mMmCommunication2);\r
   ASSERT_EFI_ERROR (Status);\r
 \r
   //\r
index 592862773390dc8e486b5de103d4a937f14ece8e..01564e4c5068eb2ba92d328a2f19459a78da9b50 100644 (file)
@@ -60,7 +60,7 @@
 [Protocols]\r
   gEfiVariableWriteArchProtocolGuid             ## PRODUCES\r
   gEfiVariableArchProtocolGuid                  ## PRODUCES\r
-  gEfiSmmCommunicationProtocolGuid              ## CONSUMES\r
+  gEfiMmCommunication2ProtocolGuid              ## CONSUMES\r
   ## CONSUMES\r
   ## NOTIFY\r
   ## UNDEFINED # Used to do smm communication\r
   gEfiImageSecurityDatabaseGuid\r
 \r
 [Depex]\r
-  gEfiSmmCommunicationProtocolGuid\r
+  gEfiMmCommunication2ProtocolGuid\r
 \r
 [UserExtensions.TianoCore."ExtraFiles"]\r
   VariableSmmRuntimeDxeExtra.uni\r