]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Variable/RuntimeDxe/VariableSmmRuntimeDxe.c
MdeModulePkg/VariableSmmRuntimeDxe: switch to MM communicate 2
[mirror_edk2.git] / MdeModulePkg / Universal / Variable / RuntimeDxe / VariableSmmRuntimeDxe.c
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 <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
 #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_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
 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
   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
   SMM_VARIABLE_COMMUNICATE_HEADER           *SmmVariableFunctionHeader;\r
 \r
 \r
@@ -218,7 +218,7 @@ InitCommunicateBuffer (
     return EFI_INVALID_PARAMETER;\r
   }\r
 \r
     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
   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
 {\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
   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
   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
   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
   )\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
   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
 {\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
   SMM_VARIABLE_COMMUNICATE_HEADER           *SmmVariableFunctionHeader;\r
   UINTN                                     CommSize;\r
   UINT8                                     *CommBuffer;\r
@@ -1357,7 +1360,7 @@ GetVariablePayloadSize (
     goto Done;\r
   }\r
 \r
     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
   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
   //\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
   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
 {\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
   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
   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
   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
   //\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
   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
 {\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
   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
   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
   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
   //\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
   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
     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
   ASSERT_EFI_ERROR (Status);\r
 \r
   //\r