Reviewed-by: Ray Ni <ray...@intel.com>

-----Original Message-----
From: Li, Zhihao <zhihao...@intel.com> 
Sent: Tuesday, March 1, 2022 7:22 PM
To: devel@edk2.groups.io
Cc: Dong, Eric <eric.d...@intel.com>; Ni, Ray <ray...@intel.com>; Kumar, Rahul1 
<rahul1.ku...@intel.com>; Fu, Siyuan <siyuan...@intel.com>
Subject: [PATCH v5 1/1] UefiCpuPkg: Extend SMM CPU Service with rendezvous 
support.

REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3815

This patch define a new Protocol with the new services
SmmWaitForAllProcessor(), which can be used by SMI handler
to optionally wait for other APs to complete SMM rendezvous in
relaxed AP mode.

A new library SmmCpuRendezvousLib is provided to abstract the service
into library API to simple SMI handler code.

Cc: Eric Dong <eric.d...@intel.com>
Cc: Ray Ni <ray...@intel.com>
Cc: Rahul Kumar <rahul1.ku...@intel.com>
Cc: Siyuan Fu <siyuan...@intel.com>
Cc: Zhihao Li <zhihao...@intel.com>

Signed-off-by: Zhihao Li <zhihao...@intel.com>
---
 UefiCpuPkg/Library/SmmCpuRendezvousLib/SmmCpuRendezvousLib.c   | 103 
++++++++++++++++++++
 UefiCpuPkg/PiSmmCpuDxeSmm/CpuService.c                         |  69 
++++++++++++-
 UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c                          |  20 +++-
 UefiCpuPkg/Include/Library/SmmCpuRendezvousLib.h               |  27 +++++
 UefiCpuPkg/Include/Protocol/SmmCpuService.h                    |  36 ++++++-
 UefiCpuPkg/Library/SmmCpuRendezvousLib/SmmCpuRendezvousLib.inf |  35 +++++++
 UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.h                     |  29 +++++-
 UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf                   |   5 +-
 UefiCpuPkg/UefiCpuPkg.dec                                      |   8 +-
 UefiCpuPkg/UefiCpuPkg.dsc                                      |   2 +
 10 files changed, 322 insertions(+), 12 deletions(-)

diff --git a/UefiCpuPkg/Library/SmmCpuRendezvousLib/SmmCpuRendezvousLib.c 
b/UefiCpuPkg/Library/SmmCpuRendezvousLib/SmmCpuRendezvousLib.c
new file mode 100644
index 000000000000..e573c2ecfb51
--- /dev/null
+++ b/UefiCpuPkg/Library/SmmCpuRendezvousLib/SmmCpuRendezvousLib.c
@@ -0,0 +1,103 @@
+/** @file

+  SMM CPU Rendezvous sevice implement.

+

+  Copyright (c) 2022, Intel Corporation. All rights reserved.<BR>

+  SPDX-License-Identifier: BSD-2-Clause-Patent

+

+**/

+

+#include <Base.h>

+#include <Uefi.h>

+#include <Library/BaseLib.h>

+#include <Library/DebugLib.h>

+#include <Library/MmServicesTableLib.h>

+#include <Protocol/SmmCpuService.h>

+#include <Library/SmmCpuRendezvousLib.h>

+

+STATIC EDKII_SMM_CPU_RENDEZVOUS_PROTOCOL  *mSmmCpuRendezvous = NULL;

+STATIC VOID                               *mRegistration     = NULL;

+

+/**

+  Callback function to wait Smm cpu rendezvous service located.

+

+  SmmCpuRendezvousLib need to support MM_STANDALONE and DXE_SMM_DRIVER driver.

+  So do not use library constructor to locate the protocol.

+

+  @param[in] Protocol   Points to the protocol's unique identifier.

+  @param[in] Interface  Points to the interface instance.

+  @param[in] Handle     The handle on which the interface was installed.

+

+  @retval EFI_SUCCESS  Notification runs successfully.

+

+**/

+EFI_STATUS

+EFIAPI

+SmmCpuRendezvousProtocolNotify (

+  IN CONST EFI_GUID    *Protocol,

+  IN       VOID        *Interface,

+  IN       EFI_HANDLE  Handle

+  )

+{

+  EFI_STATUS  Status;

+

+  Status = gMmst->MmLocateProtocol (

+                    &gEdkiiSmmCpuRendezvousProtocolGuid,

+                    NULL,

+                    (VOID **)&mSmmCpuRendezvous

+                    );

+  ASSERT_EFI_ERROR (Status);

+

+  return EFI_SUCCESS;

+}

+

+/**

+  This routine wait for all AP processors to arrive in SMM.

+

+  @param[in] BlockingMode  Blocking mode or non-blocking mode.

+

+  @retval EFI_SUCCESS  All avaiable APs arrived.

+  @retval EFI_TIMEOUT  Wait for all APs until timeout.

+  @retval OTHER        Fail to register SMM CPU Rendezvous service Protocol.

+**/

+EFI_STATUS

+EFIAPI

+SmmWaitForAllProcessor (

+  IN BOOLEAN  BlockingMode

+  )

+{

+  EFI_STATUS  Status;

+

+  if ((mRegistration == NULL) && (mSmmCpuRendezvous == NULL)) {

+    //

+    // Locate SMM cpu rendezvous protocol for the first time execute the 
function.

+    //

+    Status = gMmst->MmLocateProtocol (

+                      &gEdkiiSmmCpuRendezvousProtocolGuid,

+                      NULL,

+                      (VOID **)&mSmmCpuRendezvous

+                      );

+    if (EFI_ERROR (Status)) {

+      Status = gMmst->MmRegisterProtocolNotify (

+                        &gEdkiiSmmCpuRendezvousProtocolGuid,

+                        SmmCpuRendezvousProtocolNotify,

+                        &mRegistration

+                        );

+      if (EFI_ERROR (Status)) {

+        return Status;

+      }

+    }

+  }

+

+  //

+  // The platform have not set up. It doesn't need smm cpu rendezvous.

+  //

+  if (mSmmCpuRendezvous == NULL) {

+    return EFI_SUCCESS;

+  }

+

+  Status = mSmmCpuRendezvous->WaitForAllProcessor (

+                                mSmmCpuRendezvous,

+                                BlockingMode

+                                );

+  return Status;

+}

diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/CpuService.c 
b/UefiCpuPkg/PiSmmCpuDxeSmm/CpuService.c
index 5d624f8e9ed6..2ebf4543c3ed 100644
--- a/UefiCpuPkg/PiSmmCpuDxeSmm/CpuService.c
+++ b/UefiCpuPkg/PiSmmCpuDxeSmm/CpuService.c
@@ -1,7 +1,7 @@
 /** @file

 Implementation of SMM CPU Services Protocol.

 

-Copyright (c) 2011 - 2015, Intel Corporation. All rights reserved.<BR>

+Copyright (c) 2011 - 2022, Intel Corporation. All rights reserved.<BR>

 SPDX-License-Identifier: BSD-2-Clause-Patent

 

 **/

@@ -20,6 +20,13 @@ EFI_SMM_CPU_SERVICE_PROTOCOL  mSmmCpuService = {
   SmmRegisterExceptionHandler

 };

 

+//

+// EDKII SMM CPU Rendezvous Service Protocol instance

+//

+EDKII_SMM_CPU_RENDEZVOUS_PROTOCOL  mSmmCpuRendezvousService = {

+  SmmCpuRendezvous

+};

+

 /**

   Gets processor information on the requested processor at the instant this 
call is made.

 

@@ -350,6 +357,7 @@ SmmRegisterExceptionHandler (
   @param ImageHandle The firmware allocated handle for the EFI image.

 

   @retval EFI_SUCCESS    EFI SMM CPU Services Protocol was installed 
successfully.

+  @retval OTHER          Fail to install Protocol.

 **/

 EFI_STATUS

 InitializeSmmCpuServices (

@@ -365,5 +373,64 @@ InitializeSmmCpuServices (
                     &mSmmCpuService

                     );

   ASSERT_EFI_ERROR (Status);

+  if (EFI_ERROR (Status)) {

+    return Status;

+  }

+

+  Status = gSmst->SmmInstallProtocolInterface (

+                    &Handle,

+                    &gEdkiiSmmCpuRendezvousProtocolGuid,

+                    EFI_NATIVE_INTERFACE,

+                    &mSmmCpuRendezvousService

+                    );

+  ASSERT_EFI_ERROR (Status);

+  return Status;

+}

+

+/**

+  Wait for all processors enterring SMM until all CPUs are already 
synchronized or not.

+

+  If BlockingMode is False, timeout value is zero.

+

+  @param This          A pointer to the EDKII_SMM_CPU_RENDEZVOUS_PROTOCOL 
instance.

+  @param BlockingMode  Blocking mode or non-blocking mode.

+

+  @retval EFI_SUCCESS  All avaiable APs arrived.

+  @retval EFI_TIMEOUT  Wait for all APs until timeout.

+

+**/

+EFI_STATUS

+EFIAPI

+SmmCpuRendezvous (

+  IN EDKII_SMM_CPU_RENDEZVOUS_PROTOCOL  *This,

+  IN BOOLEAN                            BlockingMode

+  )

+{

+  EFI_STATUS  Status;

+

+  //

+  // Return success immediately if all CPUs are already synchronized.

+  //

+  if (mSmmMpSyncData->AllApArrivedWithException) {

+    Status = EFI_SUCCESS;

+    goto ON_EXIT;

+  }

+

+  if (!BlockingMode) {

+    Status = EFI_TIMEOUT;

+    goto ON_EXIT;

+  }

+

+  //

+  // There are some APs outside SMM, Wait for all avaiable APs to arrive.

+  //

+  SmmWaitForApArrival ();

+  Status = mSmmMpSyncData->AllApArrivedWithException ? EFI_SUCCESS : 
EFI_TIMEOUT;

+

+ON_EXIT:

+  if (!mSmmMpSyncData->AllApArrivedWithException) {

+    DEBUG ((DEBUG_INFO, "EdkiiSmmWaitForAllApArrival: Timeout to wait all APs 
arrival\n"));

+  }

+

   return Status;

 }

diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c 
b/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c
index 882dee4fe246..13c2cb8da4c3 100644
--- a/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c
+++ b/UefiCpuPkg/PiSmmCpuDxeSmm/MpService.c
@@ -1,7 +1,7 @@
 /** @file

 SMM MP service implementation

 

-Copyright (c) 2009 - 2021, Intel Corporation. All rights reserved.<BR>

+Copyright (c) 2009 - 2022, Intel Corporation. All rights reserved.<BR>

 Copyright (c) 2017, AMD Incorporated. All rights reserved.<BR>

 

 SPDX-License-Identifier: BSD-2-Clause-Patent

@@ -293,10 +293,14 @@ SmmWaitForApArrival (
   // Sync with APs 1st timeout

   //

   for (Timer = StartSyncTimer ();

-       !IsSyncTimerTimeout (Timer) && !(LmceEn && LmceSignal) &&

-       !AllCpusInSmmWithExceptions (ARRIVAL_EXCEPTION_BLOCKED | 
ARRIVAL_EXCEPTION_SMI_DISABLED);

+       !IsSyncTimerTimeout (Timer) && !(LmceEn && LmceSignal);

        )

   {

+    mSmmMpSyncData->AllApArrivedWithException = AllCpusInSmmWithExceptions 
(ARRIVAL_EXCEPTION_BLOCKED | ARRIVAL_EXCEPTION_SMI_DISABLED);

+    if (mSmmMpSyncData->AllApArrivedWithException) {

+      break;

+    }

+

     CpuPause ();

   }

 

@@ -330,10 +334,14 @@ SmmWaitForApArrival (
     // Sync with APs 2nd timeout.

     //

     for (Timer = StartSyncTimer ();

-         !IsSyncTimerTimeout (Timer) &&

-         !AllCpusInSmmWithExceptions (ARRIVAL_EXCEPTION_BLOCKED | 
ARRIVAL_EXCEPTION_SMI_DISABLED);

+         !IsSyncTimerTimeout (Timer);

          )

     {

+      mSmmMpSyncData->AllApArrivedWithException = AllCpusInSmmWithExceptions 
(ARRIVAL_EXCEPTION_BLOCKED | ARRIVAL_EXCEPTION_SMI_DISABLED);

+      if (mSmmMpSyncData->AllApArrivedWithException) {

+        break;

+      }

+

       CpuPause ();

     }

   }

@@ -1887,6 +1895,8 @@ InitializeMpSyncData (
     *mSmmMpSyncData->InsideSmm     = FALSE;

     *mSmmMpSyncData->AllCpusInSync = FALSE;

 

+    mSmmMpSyncData->AllApArrivedWithException = FALSE;

+

     for (CpuIndex = 0; CpuIndex < 
gSmmCpuPrivate->SmmCoreEntryContext.NumberOfCpus; CpuIndex++) {

       mSmmMpSyncData->CpuData[CpuIndex].Busy =

         (SPIN_LOCK *)((UINTN)mSmmCpuSemaphores.SemaphoreCpu.Busy + 
mSemaphoreSize * CpuIndex);

diff --git a/UefiCpuPkg/Include/Library/SmmCpuRendezvousLib.h 
b/UefiCpuPkg/Include/Library/SmmCpuRendezvousLib.h
new file mode 100644
index 000000000000..82e459e9106e
--- /dev/null
+++ b/UefiCpuPkg/Include/Library/SmmCpuRendezvousLib.h
@@ -0,0 +1,27 @@
+/** @file

+  SMM CPU Rendezvous library header file.

+

+  Copyright (c) 2022, Intel Corporation. All rights reserved.<BR>

+  SPDX-License-Identifier: BSD-2-Clause-Patent

+

+**/

+

+#ifndef SMM_CPU_RENDEZVOUS_H_

+#define SMM_CPU_RENDEZVOUS_H_

+

+/**

+  This routine wait for all AP processors to arrive in SMM.

+

+  @param[in]  BlockingMode  Blocking mode or non-blocking mode.

+

+  @retval EFI_SUCCESS       All processors checked in to SMM.

+  @retval EFI_TIMEOUT       Wait for all APs until timeout.

+

+**/

+EFI_STATUS

+EFIAPI

+SmmWaitForAllProcessor (

+  IN  BOOLEAN  BlockingMode

+  );

+

+#endif

diff --git a/UefiCpuPkg/Include/Protocol/SmmCpuService.h 
b/UefiCpuPkg/Include/Protocol/SmmCpuService.h
index 952767afce75..3d93d243409c 100644
--- a/UefiCpuPkg/Include/Protocol/SmmCpuService.h
+++ b/UefiCpuPkg/Include/Protocol/SmmCpuService.h
@@ -1,7 +1,7 @@
 /** @file

 SMM CPU Service protocol definition.

 

-Copyright (c) 2013 - 2015, Intel Corporation. All rights reserved.<BR>

+Copyright (c) 2013 - 2022, Intel Corporation. All rights reserved.<BR>

 SPDX-License-Identifier: BSD-2-Clause-Patent

 

 **/

@@ -200,4 +200,38 @@ struct _EFI_SMM_CPU_SERVICE_PROTOCOL {
 

 extern EFI_GUID  gEfiSmmCpuServiceProtocolGuid;

 

+//

+//  EDKII_SMM_CPU_RENDEZVOUS_PROTOCOL provide SMM CPU

+//  rendezvous service support.

+//

+#define EDKII_SMM_CPU_RENDEZVOUS_PROTOCOL_GUID \

+  { \

+    0xaa00d50b, 0x4911, 0x428f, { 0xb9, 0x1a, 0xa5, 0x9d, 0xdb, 0x13, 0xe2, 
0x4c } \

+  }

+

+typedef struct _EDKII_SMM_CPU_RENDEZVOUS_PROTOCOL 
EDKII_SMM_CPU_RENDEZVOUS_PROTOCOL;

+

+/**

+  Wait for all APs to arrive SMM mode in given timeout constraint.

+

+  @param[in]  This                  A pointer to the 
EDKII_SMM_CPU_RENDEZVOUS_PROTOCOL instance.

+  @param[in]  BlockingMode          Block or non-block mode.

+

+  @retval EFI_SUCCESS               All APs have arrived SMM mode except SMI 
disabled APs.

+  @retval EFI_TIMEOUT               There are APs not in SMM mode in given 
timeout constraint.

+

+**/

+typedef

+EFI_STATUS

+(EFIAPI *EDKII_WAIT_FOR_ALL_PROCESSOR)(

+  IN  EDKII_SMM_CPU_RENDEZVOUS_PROTOCOL  *This,

+  IN  BOOLEAN                            BlockingMode

+  );

+

+struct _EDKII_SMM_CPU_RENDEZVOUS_PROTOCOL {

+  EDKII_WAIT_FOR_ALL_PROCESSOR    WaitForAllProcessor;

+};

+

+extern EFI_GUID  gEdkiiSmmCpuRendezvousProtocolGuid;

+

 #endif

diff --git a/UefiCpuPkg/Library/SmmCpuRendezvousLib/SmmCpuRendezvousLib.inf 
b/UefiCpuPkg/Library/SmmCpuRendezvousLib/SmmCpuRendezvousLib.inf
new file mode 100644
index 000000000000..52374bf6e9b4
--- /dev/null
+++ b/UefiCpuPkg/Library/SmmCpuRendezvousLib/SmmCpuRendezvousLib.inf
@@ -0,0 +1,35 @@
+## @file

+# SMM CPU Rendezvous service lib.

+#

+# This is SMM CPU rendezvous service lib that wait for all

+# APs to enter SMM mode.

+#

+# Copyright (c) 2022, Intel Corporation. All rights reserved.<BR>

+# SPDX-License-Identifier: BSD-2-Clause-Patent

+#

+##

+

+[Defines]

+  INF_VERSION                    = 0x00010005

+  BASE_NAME                      = SmmCpuRendezvousLib

+  FILE_GUID                      = 1509Bb36-9Ba4-438B-B195-Ac5914Db14E2

+  MODULE_TYPE                    = DXE_SMM_DRIVER

+  LIBRARY_CLASS                  = SmmCpuRendezvousLib|MM_STANDALONE 
DXE_SMM_DRIVER

+

+[Sources]

+  SmmCpuRendezvousLib.c

+

+[Packages]

+  MdePkg/MdePkg.dec

+  UefiCpuPkg/UefiCpuPkg.dec

+

+[LibraryClasses]

+  BaseLib

+  DebugLib

+  MmServicesTableLib

+

+[Pcd]

+  gUefiCpuPkgTokenSpaceGuid.PcdCpuSmmApSyncTimeout                 ## CONSUMES

+

+[Protocols]

+  gEdkiiSmmCpuRendezvousProtocolGuid

diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.h 
b/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.h
index 26d07c5b5ea0..aed872836c99 100644
--- a/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.h
+++ b/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.h
@@ -1,7 +1,7 @@
 /** @file

 Agent Module to load other modules to deploy SMM Entry Vector for X86 CPU.

 

-Copyright (c) 2009 - 2020, Intel Corporation. All rights reserved.<BR>

+Copyright (c) 2009 - 2022, Intel Corporation. All rights reserved.<BR>

 Copyright (c) 2017, AMD Incorporated. All rights reserved.<BR>

 

 SPDX-License-Identifier: BSD-2-Clause-Patent

@@ -428,6 +428,7 @@ typedef struct {
   volatile SMM_CPU_SYNC_MODE    EffectiveSyncMode;

   volatile BOOLEAN              SwitchBsp;

   volatile BOOLEAN              *CandidateBsp;

+  volatile BOOLEAN              AllApArrivedWithException;

   EFI_AP_PROCEDURE              StartupProcedure;

   VOID                          *StartupProcArgs;

 } SMM_DISPATCHER_MP_SYNC_DATA;

@@ -1488,4 +1489,30 @@ IsRestrictedMemoryAccess (
   VOID

   );

 

+/**

+  Choose blocking or non-blocking mode to Wait for all APs.

+

+  @param[in]  This                  A pointer to the 
EDKII_SMM_CPU_RENDEZVOUS_PROTOCOL instance.

+  @param[in]  BlockingMode          Blocking or non-blocking mode.

+

+  @retval EFI_SUCCESS               All APs have arrived SMM mode except SMI 
disabled APs.

+  @retval EFI_TIMEOUT               There are APs not in SMM mode in given 
timeout constraint.

+

+**/

+EFI_STATUS

+EFIAPI

+SmmCpuRendezvous (

+  IN  EDKII_SMM_CPU_RENDEZVOUS_PROTOCOL  *This,

+  IN  BOOLEAN                            BlockingMode

+  );

+

+/**

+  Insure when this function returns, no AP will execute normal mode code 
before entering SMM, except SMI disabled APs.

+

+**/

+VOID

+SmmWaitForApArrival (

+  VOID

+  );

+

 #endif

diff --git a/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf 
b/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf
index 0e88071c7079..deef00f9c6e9 100644
--- a/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf
+++ b/UefiCpuPkg/PiSmmCpuDxeSmm/PiSmmCpuDxeSmm.inf
@@ -4,7 +4,7 @@
 # This SMM driver performs SMM initialization, deploy SMM Entry Vector,

 # provides CPU specific services in SMM.

 #

-# Copyright (c) 2009 - 2021, Intel Corporation. All rights reserved.<BR>

+# Copyright (c) 2009 - 2022, Intel Corporation. All rights reserved.<BR>

 # Copyright (c) 2017, AMD Incorporated. All rights reserved.<BR>

 #

 # SPDX-License-Identifier: BSD-2-Clause-Patent

@@ -107,7 +107,8 @@
   gEfiSmmReadyToLockProtocolGuid           ## NOTIFY

   gEfiSmmCpuServiceProtocolGuid            ## PRODUCES

   gEdkiiSmmMemoryAttributeProtocolGuid     ## PRODUCES

-  gEfiMmMpProtocolGuid                    ## PRODUCES

+  gEfiMmMpProtocolGuid                     ## PRODUCES

+  gEdkiiSmmCpuRendezvousProtocolGuid       ## PRODUCES

 

 [Guids]

   gEfiAcpiVariableGuid                     ## SOMETIMES_CONSUMES ## HOB # it 
is used for S3 boot.

diff --git a/UefiCpuPkg/UefiCpuPkg.dec b/UefiCpuPkg/UefiCpuPkg.dec
index 7de66fde674c..525cde463435 100644
--- a/UefiCpuPkg/UefiCpuPkg.dec
+++ b/UefiCpuPkg/UefiCpuPkg.dec
@@ -1,7 +1,7 @@
 ## @file  UefiCpuPkg.dec

 # This Package provides UEFI compatible CPU modules and libraries.

 #

-# Copyright (c) 2007 - 2021, Intel Corporation. All rights reserved.<BR>

+# Copyright (c) 2007 - 2022, Intel Corporation. All rights reserved.<BR>

 #

 # SPDX-License-Identifier: BSD-2-Clause-Patent

 #

@@ -62,6 +62,9 @@
   ##  @libraryclass  Provides function for loading microcode.

   MicrocodeLib|Include/Library/MicrocodeLib.h

 

+  ## @libraryclass  Provides function for SMM CPU Rendezvous Library.

+  SmmCpuRendezvousLib|Include/Library/SmmCpuRendezvousLib.h

+

 [Guids]

   gUefiCpuPkgTokenSpaceGuid      = { 0xac05bf33, 0x995a, 0x4ed4, { 0xaa, 0xb8, 
0xef, 0x7a, 0xe8, 0xf, 0x5c, 0xb0 }}

   gMsegSmramGuid                 = { 0x5802bce4, 0xeeee, 0x4e33, { 0xa1, 0x30, 
0xeb, 0xad, 0x27, 0xf0, 0xe4, 0x39 }}

@@ -77,7 +80,8 @@
 

 [Protocols]

   ## Include/Protocol/SmmCpuService.h

-  gEfiSmmCpuServiceProtocolGuid  = { 0x1d202cab, 0xc8ab, 0x4d5c, { 0x94, 0xf7, 
0x3c, 0xfc, 0xc0, 0xd3, 0xd3, 0x35 }}

+  gEfiSmmCpuServiceProtocolGuid   = { 0x1d202cab, 0xc8ab, 0x4d5c, { 0x94, 
0xf7, 0x3c, 0xfc, 0xc0, 0xd3, 0xd3, 0x35 }}

+  gEdkiiSmmCpuRendezvousProtocolGuid = { 0xaa00d50b, 0x4911, 0x428f, { 0xb9, 
0x1a, 0xa5, 0x9d, 0xdb, 0x13, 0xe2, 0x4c }}

 

   ## Include/Protocol/SmMonitorInit.h

   gEfiSmMonitorInitProtocolGuid  = { 0x228f344d, 0xb3de, 0x43bb, { 0xa4, 0xd7, 
0xea, 0x20, 0xb, 0x1b, 0x14, 0x82 }}

diff --git a/UefiCpuPkg/UefiCpuPkg.dsc b/UefiCpuPkg/UefiCpuPkg.dsc
index d1d61dd6a03b..a0bbde9985d3 100644
--- a/UefiCpuPkg/UefiCpuPkg.dsc
+++ b/UefiCpuPkg/UefiCpuPkg.dsc
@@ -61,6 +61,7 @@
   
TpmMeasurementLib|MdeModulePkg/Library/TpmMeasurementLibNull/TpmMeasurementLibNull.inf

   VmgExitLib|UefiCpuPkg/Library/VmgExitLibNull/VmgExitLibNull.inf

   MicrocodeLib|UefiCpuPkg/Library/MicrocodeLib/MicrocodeLib.inf

+  
SmmCpuRendezvousLib|UefiCpuPkg/Library/SmmCpuRendezvousLib/SmmCpuRendezvousLib.inf

 

 [LibraryClasses.common.SEC]

   PlatformSecLib|UefiCpuPkg/Library/PlatformSecLibNull/PlatformSecLibNull.inf

@@ -173,6 +174,7 @@
   }

   UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume2Pei.inf

   UefiCpuPkg/ResetVector/Vtf0/Bin/ResetVector.inf

+  UefiCpuPkg/Library/SmmCpuRendezvousLib/SmmCpuRendezvousLib.inf

 

 [BuildOptions]

   *_*_*_CC_FLAGS = -D DISABLE_NEW_DEPRECATED_INTERFACES

-- 
2.26.2.windows.1



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#87213): https://edk2.groups.io/g/devel/message/87213
Mute This Topic: https://groups.io/mt/89473469/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to