public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [edk2-devel] [PATCH edk2-platforms 0/4] IpmiFeaturePkg: Support Standalone MM.
@ 2023-12-20 17:01 Xu, Wei6
  2023-12-20 17:01 ` [edk2-devel] [PATCH edk2-platforms 1/4] IpmiFeaturePkg/ServerManagementLib: " Xu, Wei6
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: Xu, Wei6 @ 2023-12-20 17:01 UTC (permalink / raw)
  To: devel; +Cc: Wei6 Xu, Abner Chang, Nate DeSimone

This patch series add Standalone MM support for ServerManagementLib, BmcAcpiSwChild, BmcElog and GenericElog.
PR: https://github.com/tianocore/edk2-platforms/pull/117

Cc: Abner Chang <Abner.Chang@amd.com>
Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>

Wei6 Xu (4):
  IpmiFeaturePkg/ServerManagementLib: Support Standalone MM
  IpmiFeaturePkg/BmcAcpiSwChild: Support Standalone MM
  IpmiFeaturePkg/GenericElog: Support Standalone MM
  IpmiFeaturePkg/BmcElog: Support Standalone MM

 .../BmcAcpiSwChild/BmcAcpiSwChild.c           |   12 +-
 .../BmcAcpiSwChild/BmcAcpiSwChild.h           |   15 +-
 .../BmcAcpiSwChild/BmcAcpiSwChild.inf         |    5 +-
 .../BmcAcpiSwChildStandaloneMm.c              |   31 +
 .../BmcAcpiSwChildStandaloneMm.inf            |   40 +
 .../BmcAcpiSwChildTraditionalMm.c             |   31 +
 .../IpmiFeaturePkg/BmcElog/Smm/BmcElog.c      |   14 +-
 .../IpmiFeaturePkg/BmcElog/Smm/BmcElog.h      |   15 +-
 .../BmcElog/Smm/BmcElogStandaloneMm.c         |   28 +
 .../BmcElog/Smm/BmcElogTraditionalMm.c        |   28 +
 .../IpmiFeaturePkg/BmcElog/SmmBmcElog.inf     |    6 +-
 .../BmcElog/StandaloneMmBmcElog.inf           |   44 +
 .../GenericElog/Smm/GenericElog.c             |   35 +-
 .../GenericElog/Smm/GenericElog.h             |   28 +-
 .../GenericElog/Smm/GenericElog.inf           |    5 +-
 .../GenericElog/Smm/GenericElogStandaloneMm.c |   28 +
 .../Smm/GenericElogStandaloneMm.inf           |   41 +
 .../Smm/GenericElogTraditionalMm.c            |   28 +
 .../IpmiFeaturePkg/Include/IpmiFeature.dsc    |    6 +
 .../ServerManagementElog.c                    |  235 ++++
 .../ServerManagementLib.inf                   |    4 +-
 ...ManagementLib.c => ServerManagementTime.c} | 1175 +++++++----------
 .../StandaloneMmServerManagementLib.inf       |   29 +
 23 files changed, 1099 insertions(+), 784 deletions(-)
 create mode 100644 Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcAcpiSwChild/BmcAcpiSwChildStandaloneMm.c
 create mode 100644 Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcAcpiSwChild/BmcAcpiSwChildStandaloneMm.inf
 create mode 100644 Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcAcpiSwChild/BmcAcpiSwChildTraditionalMm.c
 create mode 100644 Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcElog/Smm/BmcElogStandaloneMm.c
 create mode 100644 Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcElog/Smm/BmcElogTraditionalMm.c
 create mode 100644 Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcElog/StandaloneMmBmcElog.inf
 create mode 100644 Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericElog/Smm/GenericElogStandaloneMm.c
 create mode 100644 Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericElog/Smm/GenericElogStandaloneMm.inf
 create mode 100644 Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericElog/Smm/GenericElogTraditionalMm.c
 create mode 100644 Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Library/ServerManagementLib/ServerManagementElog.c
 rename Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Library/ServerManagementLib/{ServerManagementLib.c => ServerManagementTime.c} (55%)
 create mode 100644 Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Library/ServerManagementLib/StandaloneMmServerManagementLib.inf

-- 
2.29.2.windows.2



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#112764): https://edk2.groups.io/g/devel/message/112764
Mute This Topic: https://groups.io/mt/103284557/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 7+ messages in thread

* [edk2-devel] [PATCH edk2-platforms 1/4] IpmiFeaturePkg/ServerManagementLib: Support Standalone MM
  2023-12-20 17:01 [edk2-devel] [PATCH edk2-platforms 0/4] IpmiFeaturePkg: Support Standalone MM Xu, Wei6
@ 2023-12-20 17:01 ` Xu, Wei6
  2023-12-20 17:01 ` [edk2-devel] [PATCH edk2-platforms 2/4] IpmiFeaturePkg/BmcAcpiSwChild: " Xu, Wei6
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Xu, Wei6 @ 2023-12-20 17:01 UTC (permalink / raw)
  To: devel; +Cc: Wei6 Xu, Abner Chang, Nate DeSimone

Split the ServerManagementLib.c into two source files:
- ServerManagementELog.c to support Event Log functions.
- ServerManagementTime.c to support GetTimeStamp function.
  - Replace gBS->Stall() with MicroSecondDelay() in TimerLib to
remove dependency on gBS.

Base Lib includes both of the two source files, StandaloneMm Lib only
includes the ServerManagementTime.c

Cc: Abner Chang <Abner.Chang@amd.com>
Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
Signed-off-by: Wei6 Xu <wei6.xu@intel.com>
---
 .../IpmiFeaturePkg/Include/IpmiFeature.dsc    |    3 +
 .../ServerManagementElog.c                    |  235 ++++
 .../ServerManagementLib.inf                   |    4 +-
 ...ManagementLib.c => ServerManagementTime.c} | 1175 +++++++----------
 .../StandaloneMmServerManagementLib.inf       |   29 +
 5 files changed, 749 insertions(+), 697 deletions(-)
 create mode 100644 Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Library/ServerManagementLib/ServerManagementElog.c
 rename Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Library/ServerManagementLib/{ServerManagementLib.c => ServerManagementTime.c} (55%)
 create mode 100644 Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Library/ServerManagementLib/StandaloneMmServerManagementLib.inf

diff --git a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Include/IpmiFeature.dsc b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Include/IpmiFeature.dsc
index c9c76565c672..45439f92eaac 100644
--- a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Include/IpmiFeature.dsc
+++ b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Include/IpmiFeature.dsc
@@ -62,6 +62,9 @@
   SsifInterfaceLib|IpmiFeaturePkg/Library/BmcInterfaceCommonAccess/SsifInterfaceLib/SmmSsifInterfaceLib.inf
   IpmbInterfaceLib|IpmiFeaturePkg/Library/BmcInterfaceCommonAccess/IpmbInterfaceLib/SmmIpmbInterfaceLib.inf
 
+[LibraryClasses.common.MM_STANDALONE]
+  ServerManagementLib|IpmiFeaturePkg/Library/ServerManagementLib/StandaloneMmServerManagementLib.inf
+
 ################################################################################
 #
 # Component section - list of all components that need built for this feature.
diff --git a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Library/ServerManagementLib/ServerManagementElog.c b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Library/ServerManagementLib/ServerManagementElog.c
new file mode 100644
index 000000000000..eddc8350188d
--- /dev/null
+++ b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Library/ServerManagementLib/ServerManagementElog.c
@@ -0,0 +1,235 @@
+/** @file
+  Lightweight lib to support EFI Server Management drivers.
+  This source file provides Event Log support.
+
+Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include <PiDxe.h>
+#include <Library/DebugLib.h>
+#include <Library/UefiBootServicesTableLib.h>
+#include <Protocol/GenericElog.h>
+
+#include <Library/ServerMgmtRtLib.h>
+
+//
+// Module Globals
+//
+EFI_SM_ELOG_PROTOCOL  *mGenericElogProtocol     = NULL;
+VOID                  *mGenericElogRegistration = NULL;
+
+/**
+  This function is called whenever an instance of ELOG protocol is created.  When the function is notified
+  it initializes the module global data.
+
+  @param Event                  This is used only for EFI compatibility.
+  @param Context                This is used only for EFI compatibility.
+
+**/
+VOID
+EFIAPI
+GenericElogNotificationFunction (
+  IN  EFI_EVENT  Event,
+  IN  VOID       *Context
+  )
+{
+  EFI_STATUS  Status;
+
+  Status = gBS->LocateProtocol (&gEfiGenericElogProtocolGuid, NULL, (VOID **)&mGenericElogProtocol);
+  if (EFI_ERROR (Status)) {
+    mGenericElogProtocol = NULL;
+  }
+}
+
+/**
+  The function will set up a notification on the ELOG protocol.  This function is required to be called prior
+  to utilizing the ELOG protocol from within this library.
+
+  @retval EFI_SUCCESS          after the notification has been setup.
+**/
+EFI_STATUS
+EfiInitializeGenericElog (
+  VOID
+  )
+{
+  EFI_EVENT   Event;
+  EFI_STATUS  Status;
+
+  Status = gBS->CreateEvent (EVT_NOTIFY_SIGNAL, TPL_CALLBACK, GenericElogNotificationFunction, NULL, &Event);
+  ASSERT_EFI_ERROR (Status);
+  if (Status != EFI_SUCCESS) {
+    return Status;
+  }
+
+  Status = gBS->RegisterProtocolNotify (&gEfiGenericElogProtocolGuid, Event, &mGenericElogRegistration);
+  ASSERT_EFI_ERROR (Status);
+  if (Status != EFI_SUCCESS) {
+    return Status;
+  }
+
+  gBS->SignalEvent (Event);
+
+  return EFI_SUCCESS;
+}
+
+/**
+  This function sends event log data to the destination such as LAN, ICMB, BMC etc.
+
+  @param ElogData     is a pointer to the event log data that needs to be recorded
+  @param DataType     type of Elog data that is being recorded.  The Elog is redirected based on this parameter.
+  @param AlertEvent   is an indication that the input data type is an alert.  The underlying
+                      drivers need to decide if they need to listen to the DataType and send it on
+                      an appropriate channel as an alert use of the information.
+  @param DataSize     is the size of the data to be logged
+  @param RecordId     is the array of record IDs sent by the target.  This can be used to retrieve the
+                      records or erase the records.
+  @retval EFI_SUCCESS - if the data was logged.
+  @retval EFI_INVALID_PARAMETER - if the DataType is >= EfiSmElogMax
+  @retval EFI_NOT_FOUND - the event log target was not found
+  @retval EFI_PROTOCOL_ERROR - there was a data formatting error
+
+**/
+EFI_STATUS
+EfiSmSetEventLogData (
+  IN  UINT8             *ElogData,
+  IN  EFI_SM_ELOG_TYPE  DataType,
+  IN  BOOLEAN           AlertEvent,
+  IN  UINTN             DataSize,
+  OUT UINT64            *RecordId
+  )
+{
+  //
+  // If the protocol is not found return EFI_NOT_FOUND
+  //
+  if (mGenericElogProtocol == NULL) {
+    return EFI_NOT_FOUND;
+  }
+
+  return mGenericElogProtocol->SetEventLogData (
+                                 mGenericElogProtocol,
+                                 ElogData,
+                                 DataType,
+                                 AlertEvent,
+                                 DataSize,
+                                 RecordId
+                                 );
+}
+
+/**
+  This function gets event log data from the destination dependent on the DataType.  The destination
+  can be a remote target such as LAN, ICMB, IPMI, or a FV.  The ELOG redir driver will resolve the
+  destination.
+
+  @param ElogData - pointer to the event log data buffer to contain the data to be retrieved.
+  @param DataType - this is the type of Elog data to be gotten.  Elog is redirected based upon this
+                    information.
+  @param DataSize - this is the size of the data to be retrieved.
+  @param RecordId - the RecordId of the next record.  If ElogData is NULL, this gives the RecordId of the first
+                    record available in the database with the correct DataSize.  A value of 0 on return indicates
+                    that it was last record if the Status is EFI_SUCCESS.
+
+  @retval EFI_SUCCESS - if the event log was retrieved successfully.
+  @retval EFI_NOT_FOUND - if the event log target was not found.
+  @retval EFI_NO_RESPONSE - if the event log target is not responding.  This is done by the redir driver.
+  @retval EFI_INVALID_PARAMETER - DataType or another parameter was invalid.
+  @retval EFI_BUFFER_TOO_SMALL -the ElogData buffer is too small to be filled with the requested data.
+
+**/
+EFI_STATUS
+EfiSmGetEventLogData (
+  IN  UINT8             *ElogData,
+  IN  EFI_SM_ELOG_TYPE  DataType,
+  IN  OUT UINTN         *DataSize,
+  IN OUT UINT64         *RecordId
+  )
+{
+  //
+  // If the protocol is not found return EFI_NOT_FOUND
+  //
+  if (mGenericElogProtocol == NULL) {
+    return EFI_NOT_FOUND;
+  }
+
+  return mGenericElogProtocol->GetEventLogData (
+                                 mGenericElogProtocol,
+                                 ElogData,
+                                 DataType,
+                                 DataSize,
+                                 RecordId
+                                 );
+}
+
+/**
+  This function erases the event log data defined by the DataType.  The redir driver associated with
+  the DataType resolves the path to the record.
+
+  @param DataType - the type of Elog data that is to be erased.
+  @param RecordId - the RecordId of the data to be erased.  If RecordId is NULL, all records in the
+                    database are erased if permitted by the target.  RecordId will contain the deleted
+                    RecordId on return.
+
+  @retval EFI_SUCCESS - the record or collection of records were erased.
+  @retval EFI_NOT_FOUND - the event log target was not found.
+  @retval EFI_NO_RESPONSE - the event log target was found but did not respond.
+  @retval EFI_INVALID_PARAMETER - one of the parameters was invalid.
+
+**/
+EFI_STATUS
+EfiSmEraseEventlogData (
+  IN EFI_SM_ELOG_TYPE  DataType,
+  IN OUT UINT64        *RecordId
+  )
+{
+  //
+  // If the protocol is not found return EFI_NOT_FOUND
+  //
+  if (mGenericElogProtocol == NULL) {
+    return EFI_NOT_FOUND;
+  }
+
+  return mGenericElogProtocol->EraseEventlogData (
+                                 mGenericElogProtocol,
+                                 DataType,
+                                 RecordId
+                                 );
+}
+
+/**
+  This function enables or disables the event log defined by the DataType.
+
+
+  @param DataType   - the type of Elog data that is being activated.
+  @param EnableElog - enables or disables the event log defined by the DataType.  If it is NULL
+                      it returns the current status of the DataType log.
+  @param ElogStatus - is the current status of the Event log defined by the DataType.  Enabled is
+                      TRUE and Disabled is FALSE.
+
+  @retval EFI_SUCCESS - if the event log was successfully enabled or disabled.
+  @retval EFI_NOT_FOUND - the event log target was not found.
+  @retval EFI_NO_RESPONSE - the event log target was found but did not respond.
+  @retval EFI_INVALID_PARAMETER - one of the parameters was invalid.
+
+**/
+EFI_STATUS
+EfiSmActivateEventLog (
+  IN EFI_SM_ELOG_TYPE  DataType,
+  IN BOOLEAN           *EnableElog,
+  OUT BOOLEAN          *ElogStatus
+  )
+{
+  //
+  // If the protocol is not found return EFI_NOT_FOUND
+  //
+  if (mGenericElogProtocol == NULL) {
+    return EFI_NOT_FOUND;
+  }
+
+  return mGenericElogProtocol->ActivateEventLog (
+                                 mGenericElogProtocol,
+                                 DataType,
+                                 EnableElog,
+                                 ElogStatus
+                                 );
+}
diff --git a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Library/ServerManagementLib/ServerManagementLib.inf b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Library/ServerManagementLib/ServerManagementLib.inf
index 25a3a7540762..6e7702e0db33 100644
--- a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Library/ServerManagementLib/ServerManagementLib.inf
+++ b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Library/ServerManagementLib/ServerManagementLib.inf
@@ -17,7 +17,8 @@
   LIBRARY_CLASS              = ServerManagementLib
 
 [Sources]
-  ServerManagementLib.c
+  ServerManagementELog.c
+  ServerManagementTime.c
 
 [Packages]
   IpmiFeaturePkg/IpmiFeaturePkg.dec
@@ -27,6 +28,7 @@
   IoLib
   DebugLib
   UefiBootServicesTableLib
+  TimerLib
 
 [Protocols]
   gEfiGenericElogProtocolGuid
diff --git a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Library/ServerManagementLib/ServerManagementLib.c b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Library/ServerManagementLib/ServerManagementTime.c
similarity index 55%
rename from Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Library/ServerManagementLib/ServerManagementLib.c
rename to Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Library/ServerManagementLib/ServerManagementTime.c
index 66a481fa57b4..ad7ac0b87054 100644
--- a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Library/ServerManagementLib/ServerManagementLib.c
+++ b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Library/ServerManagementLib/ServerManagementTime.c
@@ -1,696 +1,479 @@
-/** @file
-  Lightweight lib to support EFI Server Management drivers.
-
-Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
-SPDX-License-Identifier: BSD-2-Clause-Patent
-
-**/
-
-#include <PiDxe.h>
-#include <Library/IoLib.h>
-#include <Library/DebugLib.h>
-#include <Library/UefiBootServicesTableLib.h>
-#include <Protocol/GenericElog.h>
-
-#include <Library/ServerMgmtRtLib.h>
-
-// #include EFI_PROTOCOL_DEPENDENCY (CpuIo)
-
-#define PCAT_RTC_ADDRESS_REGISTER  0x70
-#define PCAT_RTC_DATA_REGISTER     0x71
-
-#define RTC_ADDRESS_SECONDS           0   // R/W  Range 0..59
-#define RTC_ADDRESS_MINUTES           2   // R/W  Range 0..59
-#define RTC_ADDRESS_HOURS             4   // R/W  Range 1..12 or 0..23 Bit 7 is AM/PM
-#define RTC_ADDRESS_DAY_OF_THE_MONTH  7   // R/W  Range 1..31
-#define RTC_ADDRESS_MONTH             8   // R/W  Range 1..12
-#define RTC_ADDRESS_YEAR              9   // R/W  Range 0..99
-#define RTC_ADDRESS_REGISTER_A        10  // R/W[0..6]  R0[7]
-#define RTC_ADDRESS_REGISTER_B        11  // R/W
-#define RTC_ADDRESS_REGISTER_C        12  // RO
-#define RTC_ADDRESS_REGISTER_D        13  // RO
-#define RTC_ADDRESS_CENTURY           50  // R/W  Range 19..20 Bit 8 is R/W
-
-//
-// Register A
-//
-typedef struct {
-  UINT8    RS  : 4; // Rate Selection Bits
-  UINT8    DV  : 3; // Divisor
-  UINT8    UIP : 1; // Update in progress
-} RTC_REGISTER_A_BITS;
-
-typedef union {
-  RTC_REGISTER_A_BITS    Bits;
-  UINT8                  Data;
-} RTC_REGISTER_A;
-
-//
-// Register B
-//
-typedef struct {
-  UINT8    DSE  : 1; // 0 - Daylight saving disabled  1 - Daylight savings enabled
-  UINT8    MIL  : 1; // 0 - 12 hour mode              1 - 24 hour mode
-  UINT8    DM   : 1; // 0 - BCD Format                1 - Binary Format
-  UINT8    SQWE : 1; // 0 - Disable SQWE output       1 - Enable SQWE output
-  UINT8    UIE  : 1; // 0 - Update INT disabled       1 - Update INT enabled
-  UINT8    AIE  : 1; // 0 - Alarm INT disabled        1 - Alarm INT Enabled
-  UINT8    PIE  : 1; // 0 - Periodic INT disabled     1 - Periodic INT Enabled
-  UINT8    SET  : 1; // 0 - Normal operation.         1 - Updates inhibited
-} RTC_REGISTER_B_BITS;
-
-typedef union {
-  RTC_REGISTER_B_BITS    Bits;
-  UINT8                  Data;
-} RTC_REGISTER_B;
-
-//
-// Register D
-//
-typedef struct {
-  UINT8    Reserved : 7; // Read as zero.  Can not be written.
-  UINT8    VRT      : 1; // Valid RAM and Time
-} RTC_REGISTER_D_BITS;
-
-typedef union {
-  RTC_REGISTER_D_BITS    Bits;
-  UINT8                  Data;
-} RTC_REGISTER_D;
-
-//
-// Module Globals
-//
-EFI_SM_ELOG_PROTOCOL  *mGenericElogProtocol     = NULL;
-VOID                  *mGenericElogRegistration = NULL;
-
-INTN  DaysOfMonth[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
-
-/**
-  This function is called whenever an instance of ELOG protocol is created.  When the function is notified
-  it initializes the module global data.
-
-  @param Event                  This is used only for EFI compatibility.
-  @param Context                This is used only for EFI compatibility.
-
-**/
-VOID
-EFIAPI
-GenericElogNotificationFunction (
-  IN  EFI_EVENT  Event,
-  IN  VOID       *Context
-  )
-{
-  EFI_STATUS  Status;
-
-  Status = gBS->LocateProtocol (&gEfiGenericElogProtocolGuid, NULL, (VOID **)&mGenericElogProtocol);
-  if (EFI_ERROR (Status)) {
-    mGenericElogProtocol = NULL;
-  }
-}
-
-/**
-  The function will set up a notification on the ELOG protocol.  This function is required to be called prior
-  to utilizing the ELOG protocol from within this library.
-
-  @retval EFI_SUCCESS          after the notification has been setup.
-**/
-EFI_STATUS
-EfiInitializeGenericElog (
-  VOID
-  )
-{
-  EFI_EVENT   Event;
-  EFI_STATUS  Status;
-
-  Status = gBS->CreateEvent (EVT_NOTIFY_SIGNAL, TPL_CALLBACK, GenericElogNotificationFunction, NULL, &Event);
-  ASSERT_EFI_ERROR (Status);
-  if (Status != EFI_SUCCESS) {
-    return Status;
-  }
-
-  Status = gBS->RegisterProtocolNotify (&gEfiGenericElogProtocolGuid, Event, &mGenericElogRegistration);
-  ASSERT_EFI_ERROR (Status);
-  if (Status != EFI_SUCCESS) {
-    return Status;
-  }
-
-  gBS->SignalEvent (Event);
-
-  return EFI_SUCCESS;
-}
-
-/**
-  This function sends event log data to the destination such as LAN, ICMB, BMC etc.
-
-  @param ElogData     is a pointer to the event log data that needs to be recorded
-  @param DataType     type of Elog data that is being recorded.  The Elog is redirected based on this parameter.
-  @param AlertEvent   is an indication that the input data type is an alert.  The underlying
-                      drivers need to decide if they need to listen to the DataType and send it on
-                      an appropriate channel as an alert use of the information.
-  @param DataSize     is the size of the data to be logged
-  @param RecordId     is the array of record IDs sent by the target.  This can be used to retrieve the
-                      records or erase the records.
-  @retval EFI_SUCCESS - if the data was logged.
-  @retval EFI_INVALID_PARAMETER - if the DataType is >= EfiSmElogMax
-  @retval EFI_NOT_FOUND - the event log target was not found
-  @retval EFI_PROTOCOL_ERROR - there was a data formatting error
-
-**/
-EFI_STATUS
-EfiSmSetEventLogData (
-  IN  UINT8             *ElogData,
-  IN  EFI_SM_ELOG_TYPE  DataType,
-  IN  BOOLEAN           AlertEvent,
-  IN  UINTN             DataSize,
-  OUT UINT64            *RecordId
-  )
-{
-  //
-  // If the protocol is not found return EFI_NOT_FOUND
-  //
-  if (mGenericElogProtocol == NULL) {
-    return EFI_NOT_FOUND;
-  }
-
-  return mGenericElogProtocol->SetEventLogData (
-                                 mGenericElogProtocol,
-                                 ElogData,
-                                 DataType,
-                                 AlertEvent,
-                                 DataSize,
-                                 RecordId
-                                 );
-}
-
-/**
-  This function gets event log data from the destination dependent on the DataType.  The destination
-  can be a remote target such as LAN, ICMB, IPMI, or a FV.  The ELOG redir driver will resolve the
-  destination.
-
-  @param ElogData - pointer to the event log data buffer to contain the data to be retrieved.
-  @param DataType - this is the type of Elog data to be gotten.  Elog is redirected based upon this
-                    information.
-  @param DataSize - this is the size of the data to be retrieved.
-  @param RecordId - the RecordId of the next record.  If ElogData is NULL, this gives the RecordId of the first
-                    record available in the database with the correct DataSize.  A value of 0 on return indicates
-                    that it was last record if the Status is EFI_SUCCESS.
-
-  @retval EFI_SUCCESS - if the event log was retrieved successfully.
-  @retval EFI_NOT_FOUND - if the event log target was not found.
-  @retval EFI_NO_RESPONSE - if the event log target is not responding.  This is done by the redir driver.
-  @retval EFI_INVALID_PARAMETER - DataType or another parameter was invalid.
-  @retval EFI_BUFFER_TOO_SMALL -the ElogData buffer is too small to be filled with the requested data.
-
-**/
-EFI_STATUS
-EfiSmGetEventLogData (
-  IN  UINT8             *ElogData,
-  IN  EFI_SM_ELOG_TYPE  DataType,
-  IN  OUT UINTN         *DataSize,
-  IN OUT UINT64         *RecordId
-  )
-{
-  //
-  // If the protocol is not found return EFI_NOT_FOUND
-  //
-  if (mGenericElogProtocol == NULL) {
-    return EFI_NOT_FOUND;
-  }
-
-  return mGenericElogProtocol->GetEventLogData (
-                                 mGenericElogProtocol,
-                                 ElogData,
-                                 DataType,
-                                 DataSize,
-                                 RecordId
-                                 );
-}
-
-/**
-  This function erases the event log data defined by the DataType.  The redir driver associated with
-  the DataType resolves the path to the record.
-
-  @param DataType - the type of Elog data that is to be erased.
-  @param RecordId - the RecordId of the data to be erased.  If RecordId is NULL, all records in the
-                    database are erased if permitted by the target.  RecordId will contain the deleted
-                    RecordId on return.
-
-  @retval EFI_SUCCESS - the record or collection of records were erased.
-  @retval EFI_NOT_FOUND - the event log target was not found.
-  @retval EFI_NO_RESPONSE - the event log target was found but did not respond.
-  @retval EFI_INVALID_PARAMETER - one of the parameters was invalid.
-
-**/
-EFI_STATUS
-EfiSmEraseEventlogData (
-  IN EFI_SM_ELOG_TYPE  DataType,
-  IN OUT UINT64        *RecordId
-  )
-{
-  //
-  // If the protocol is not found return EFI_NOT_FOUND
-  //
-  if (mGenericElogProtocol == NULL) {
-    return EFI_NOT_FOUND;
-  }
-
-  return mGenericElogProtocol->EraseEventlogData (
-                                 mGenericElogProtocol,
-                                 DataType,
-                                 RecordId
-                                 );
-}
-
-/**
-  This function enables or disables the event log defined by the DataType.
-
-
-  @param DataType   - the type of Elog data that is being activated.
-  @param EnableElog - enables or disables the event log defined by the DataType.  If it is NULL
-                      it returns the current status of the DataType log.
-  @param ElogStatus - is the current status of the Event log defined by the DataType.  Enabled is
-                      TRUE and Disabled is FALSE.
-
-  @retval EFI_SUCCESS - if the event log was successfully enabled or disabled.
-  @retval EFI_NOT_FOUND - the event log target was not found.
-  @retval EFI_NO_RESPONSE - the event log target was found but did not respond.
-  @retval EFI_INVALID_PARAMETER - one of the parameters was invalid.
-
-**/
-EFI_STATUS
-EfiSmActivateEventLog (
-  IN EFI_SM_ELOG_TYPE  DataType,
-  IN BOOLEAN           *EnableElog,
-  OUT BOOLEAN          *ElogStatus
-  )
-{
-  //
-  // If the protocol is not found return EFI_NOT_FOUND
-  //
-  if (mGenericElogProtocol == NULL) {
-    return EFI_NOT_FOUND;
-  }
-
-  return mGenericElogProtocol->ActivateEventLog (
-                                 mGenericElogProtocol,
-                                 DataType,
-                                 EnableElog,
-                                 ElogStatus
-                                 );
-}
-
-/**
-  This function verifies the leap year
-
-  @param  Year    year in YYYY format.
-
-  @retval TRUE if the year is a leap year
-
-**/
-STATIC
-BOOLEAN
-IsLeapYear (
-  IN UINT16  Year
-  )
-{
-  if (Year % 4 == 0) {
-    if (Year % 100 == 0) {
-      if (Year % 400 == 0) {
-        return TRUE;
-      } else {
-        return FALSE;
-      }
-    } else {
-      return TRUE;
-    }
-  } else {
-    return FALSE;
-  }
-}
-
-/**
-  This function calculates the total number leap days from 1970 to the current year
-
-  @param  Time    - Current Time
-
-  @retval Returns the number of leap days since the base year, 1970.
-
-**/
-STATIC
-UINTN
-CountNumOfLeapDays (
-  IN EFI_TIME  *Time
-  )
-{
-  UINT16  NumOfYear;
-  UINT16  BaseYear;
-  UINT16  Index;
-  UINTN   Count;
-
-  Count     = 0;
-  BaseYear  = 1970;
-  NumOfYear = Time->Year - 1970;
-
-  for (Index = 0; Index <= NumOfYear; Index++) {
-    if (IsLeapYear (BaseYear + Index)) {
-      Count++;
-    }
-  }
-
-  //
-  // If the current year is a leap year but the month is January or February,
-  // then the leap day has not occurred and should not be counted. If it is
-  // February 29, the leap day is accounted for in CalculateNumOfDayPassedThisYear( )
-  //
-  if (IsLeapYear (Time->Year)) {
-    if ((Count > 0) && (Time->Month < 3)) {
-      Count--;
-    }
-  }
-
-  return Count;
-}
-
-/**
-  This function calculates the total number of days passed till the day in a year.
-  If the year is a leap year, an extra day is not added since the number of leap
-  days is calculated in CountNumOfLeapDays.
-
-  @param  Time    This structure contains detailed information about date and time
-
-  @retval Returns the number of days passed until the input day.
-
-**/
-STATIC
-UINTN
-CalculateNumOfDayPassedThisYear (
-  IN  EFI_TIME  Time
-  )
-{
-  UINTN  Index;
-  UINTN  NumOfDays;
-
-  NumOfDays = 0;
-  for (Index = 1; Index < Time.Month; Index++) {
-    NumOfDays += DaysOfMonth[Index - 1];
-  }
-
-  NumOfDays += Time.Day;
-  return NumOfDays;
-}
-
-/**
-  Function converts a BCD to a decimal value.
-
-  @param[in] BcdValue   An 8 bit BCD value
-
-  @return The decimal value of the BcdValue
-**/
-STATIC
-UINT8
-BcdToDecimal (
-  IN  UINT8  BcdValue
-  )
-{
-  UINTN  High;
-  UINTN  Low;
-
-  High = BcdValue >> 4;
-  Low  = BcdValue - (High << 4);
-
-  return (UINT8)(Low + (High * 10));
-}
-
-//
-// RTC read functions were copied here since we need to get the time
-// in both DXE and runtime code.  The PcRtc driver is not currently a
-// dual mode driver, this is more efficient since making PcRtc dual mode
-// would unnecessarily bloat the SMM code space.
-//
-
-/**
-  Read data register and return contents.
-
-  @param Address - Register address to read
-
-  @retval Value of data register contents
-
-**/
-STATIC
-UINT8
-RtcRead (
-  IN  UINT8  Address
-  )
-{
-  IoWrite8 (PCAT_RTC_ADDRESS_REGISTER, (UINT8)(Address | (UINT8)(IoRead8 (PCAT_RTC_ADDRESS_REGISTER) & 0x80)));
-  return IoRead8 (PCAT_RTC_DATA_REGISTER);
-}
-
-/**
-  Write data to register address.
-
-  @param Address - Register address to write
-  @param Data   - Data to write to register
-
-**/
-STATIC
-VOID
-RtcWrite (
-  IN  UINT8  Address,
-  IN  UINT8  Data
-  )
-{
-  IoWrite8 (PCAT_RTC_ADDRESS_REGISTER, (UINT8)(Address | (UINT8)(IoRead8 (PCAT_RTC_ADDRESS_REGISTER) & 0x80)));
-  IoWrite8 (PCAT_RTC_DATA_REGISTER, Data);
-}
-
-/**
-  Convert Rtc Time To Efi Time.
-
-  @param Time
-  @param RegisterB
-
-**/
-STATIC
-VOID
-ConvertRtcTimeToEfiTime (
-  IN EFI_TIME        *Time,
-  IN RTC_REGISTER_B  RegisterB
-  )
-{
-  BOOLEAN  Pm;
-
-  if ((Time->Hour) & 0x80) {
-    Pm = TRUE;
-  } else {
-    Pm = FALSE;
-  }
-
-  Time->Hour = (UINT8)(Time->Hour & 0x7f);
-
-  if (RegisterB.Bits.DM == 0) {
-    Time->Year   = BcdToDecimal ((UINT8)Time->Year);
-    Time->Month  = BcdToDecimal (Time->Month);
-    Time->Day    = BcdToDecimal (Time->Day);
-    Time->Hour   = BcdToDecimal (Time->Hour);
-    Time->Minute = BcdToDecimal (Time->Minute);
-    Time->Second = BcdToDecimal (Time->Second);
-  }
-
-  //
-  // If time is in 12 hour format, convert it to 24 hour format
-  //
-  if (RegisterB.Bits.MIL == 0) {
-    if (Pm && (Time->Hour < 12)) {
-      Time->Hour = (UINT8)(Time->Hour + 12);
-    }
-
-    if (!Pm && (Time->Hour == 12)) {
-      Time->Hour = 0;
-    }
-  }
-
-  Time->Nanosecond = 0;
-  Time->TimeZone   = EFI_UNSPECIFIED_TIMEZONE;
-  Time->Daylight   = 0;
-}
-
-/**
-  Test Century Register.
-
-  @retval EFI_SUCCESS
-  @retval EFI_DEVICE_ERROR
-
-**/
-STATIC
-EFI_STATUS
-RtcTestCenturyRegister (
-  VOID
-  )
-{
-  UINT8  Century;
-  UINT8  Temp;
-
-  Century = RtcRead (RTC_ADDRESS_CENTURY);
-
-  //
-  // Always sync-up the Bit7 "semaphore"...this maintains
-  // consistency across the different chips/implementations of
-  // the RTC...
-  //
-  RtcWrite (RTC_ADDRESS_CENTURY, 0x00);
-  Temp = (UINT8)(RtcRead (RTC_ADDRESS_CENTURY) & 0x7f);
-  RtcWrite (RTC_ADDRESS_CENTURY, Century);
-  if ((Temp == 0x19) || (Temp == 0x20)) {
-    return EFI_SUCCESS;
-  }
-
-  return EFI_DEVICE_ERROR;
-}
-
-/**
-  Waits until RTC register A and D show data is valid.
-
-  @param Timeout - Maximum time to wait
-
-  @retval EFI_DEVICE_ERROR
-  @retval EFI_SUCCESS
-
-**/
-STATIC
-EFI_STATUS
-RtcWaitToUpdate (
-  UINTN  Timeout
-  )
-{
-  RTC_REGISTER_A  RegisterA;
-  RTC_REGISTER_D  RegisterD;
-
-  //
-  // See if the RTC is functioning correctly
-  //
-  RegisterD.Data = RtcRead (RTC_ADDRESS_REGISTER_D);
-
-  if (RegisterD.Bits.VRT == 0) {
-    return EFI_DEVICE_ERROR;
-  }
-
-  //
-  // Wait for up to 0.1 seconds for the RTC to be ready.
-  //
-  Timeout        = (Timeout / 10) + 1;
-  RegisterA.Data = RtcRead (RTC_ADDRESS_REGISTER_A);
-  while (RegisterA.Bits.UIP == 1 && Timeout > 0) {
-    gBS->Stall (10);
-    RegisterA.Data = RtcRead (RTC_ADDRESS_REGISTER_A);
-    Timeout--;
-  }
-
-  RegisterD.Data = RtcRead (RTC_ADDRESS_REGISTER_D);
-  if ((Timeout == 0) || (RegisterD.Bits.VRT == 0)) {
-    return EFI_DEVICE_ERROR;
-  }
-
-  return EFI_SUCCESS;
-}
-
-/**
-  Get time from RTC.
-
-  @param Time - pointer to time structure
-
-  @retval EFI_INVALID_PARAMETER
-  @retval EFI_SUCCESS
-
-**/
-STATIC
-EFI_STATUS
-RtcGetTime (
-  OUT EFI_TIME  *Time
-  )
-{
-  RTC_REGISTER_B  RegisterB;
-  UINT8           Century;
-  EFI_STATUS      Status;
-
-  //
-  // Check parameters for null pointer
-  //
-  if (Time == NULL) {
-    return EFI_INVALID_PARAMETER;
-  }
-
-  //
-  // Wait for up to 0.1 seconds for the RTC to be updated
-  //
-  Status = RtcWaitToUpdate (100000);
-  if (EFI_ERROR (Status)) {
-    return Status;
-  }
-
-  //
-  // Read Register B
-  //
-  RegisterB.Data = RtcRead (RTC_ADDRESS_REGISTER_B);
-
-  //
-  // Get the Time/Date/Daylight Savings values.
-  //
-  Time->Second = RtcRead (RTC_ADDRESS_SECONDS);
-  Time->Minute = RtcRead (RTC_ADDRESS_MINUTES);
-  Time->Hour   = RtcRead (RTC_ADDRESS_HOURS);
-  Time->Day    = RtcRead (RTC_ADDRESS_DAY_OF_THE_MONTH);
-  Time->Month  = RtcRead (RTC_ADDRESS_MONTH);
-  Time->Year   = RtcRead (RTC_ADDRESS_YEAR);
-
-  ConvertRtcTimeToEfiTime (Time, RegisterB);
-
-  if (RtcTestCenturyRegister () == EFI_SUCCESS) {
-    Century = BcdToDecimal ((UINT8)(RtcRead (RTC_ADDRESS_CENTURY) & 0x7f));
-  } else {
-    Century = BcdToDecimal (RtcRead (RTC_ADDRESS_CENTURY));
-  }
-
-  Time->Year = (UINT16)(Century * 100 + Time->Year);
-
-  return EFI_SUCCESS;
-}
-
-/**
-  Return Date and Time from RTC in Unix format which fits in 32 bit format.
-
-  @param NumOfSeconds - pointer to return calculated time
-
-  @retval EFI_SUCCESS
-  @retval EFI status if error occurred
-
-**/
-EFI_STATUS
-EfiSmGetTimeStamp (
-  OUT UINT32  *NumOfSeconds
-  )
-{
-  UINT16      NumOfYears;
-  UINTN       NumOfLeapDays;
-  UINTN       NumOfDays;
-  EFI_TIME    Time;
-  EFI_STATUS  Status;
-
-  Status = RtcGetTime (&Time);
-  if (EFI_ERROR (Status)) {
-    return Status;
-  }
-
-  NumOfYears    = Time.Year - 1970;
-  NumOfLeapDays = CountNumOfLeapDays (&Time);
-  NumOfDays     = CalculateNumOfDayPassedThisYear (Time);
-
-  //
-  // Add 365 days for all years. Add additional days for Leap Years. Subtract off current day.
-  //
-  NumOfDays += (NumOfLeapDays + (365 * NumOfYears) - 1);
-
-  *NumOfSeconds = (UINT32)(3600 * 24 * NumOfDays + (Time.Hour * 3600) + (60 * Time.Minute) + Time.Second);
-
-  return EFI_SUCCESS;
-}
+/** @file
+  Lightweight lib to support EFI Server Management drivers.
+  This source file provides EfiSmGetTimeStamp support.
+
+Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include <PiDxe.h>
+#include <Library/IoLib.h>
+#include <Library/DebugLib.h>
+#include <Library/TimerLib.h>
+
+#include <Library/ServerMgmtRtLib.h>
+
+// #include EFI_PROTOCOL_DEPENDENCY (CpuIo)
+
+#define PCAT_RTC_ADDRESS_REGISTER  0x70
+#define PCAT_RTC_DATA_REGISTER     0x71
+
+#define RTC_ADDRESS_SECONDS           0   // R/W  Range 0..59
+#define RTC_ADDRESS_MINUTES           2   // R/W  Range 0..59
+#define RTC_ADDRESS_HOURS             4   // R/W  Range 1..12 or 0..23 Bit 7 is AM/PM
+#define RTC_ADDRESS_DAY_OF_THE_MONTH  7   // R/W  Range 1..31
+#define RTC_ADDRESS_MONTH             8   // R/W  Range 1..12
+#define RTC_ADDRESS_YEAR              9   // R/W  Range 0..99
+#define RTC_ADDRESS_REGISTER_A        10  // R/W[0..6]  R0[7]
+#define RTC_ADDRESS_REGISTER_B        11  // R/W
+#define RTC_ADDRESS_REGISTER_C        12  // RO
+#define RTC_ADDRESS_REGISTER_D        13  // RO
+#define RTC_ADDRESS_CENTURY           50  // R/W  Range 19..20 Bit 8 is R/W
+
+//
+// Register A
+//
+typedef struct {
+  UINT8    RS  : 4; // Rate Selection Bits
+  UINT8    DV  : 3; // Divisor
+  UINT8    UIP : 1; // Update in progress
+} RTC_REGISTER_A_BITS;
+
+typedef union {
+  RTC_REGISTER_A_BITS    Bits;
+  UINT8                  Data;
+} RTC_REGISTER_A;
+
+//
+// Register B
+//
+typedef struct {
+  UINT8    DSE  : 1; // 0 - Daylight saving disabled  1 - Daylight savings enabled
+  UINT8    MIL  : 1; // 0 - 12 hour mode              1 - 24 hour mode
+  UINT8    DM   : 1; // 0 - BCD Format                1 - Binary Format
+  UINT8    SQWE : 1; // 0 - Disable SQWE output       1 - Enable SQWE output
+  UINT8    UIE  : 1; // 0 - Update INT disabled       1 - Update INT enabled
+  UINT8    AIE  : 1; // 0 - Alarm INT disabled        1 - Alarm INT Enabled
+  UINT8    PIE  : 1; // 0 - Periodic INT disabled     1 - Periodic INT Enabled
+  UINT8    SET  : 1; // 0 - Normal operation.         1 - Updates inhibited
+} RTC_REGISTER_B_BITS;
+
+typedef union {
+  RTC_REGISTER_B_BITS    Bits;
+  UINT8                  Data;
+} RTC_REGISTER_B;
+
+//
+// Register D
+//
+typedef struct {
+  UINT8    Reserved : 7; // Read as zero.  Can not be written.
+  UINT8    VRT      : 1; // Valid RAM and Time
+} RTC_REGISTER_D_BITS;
+
+typedef union {
+  RTC_REGISTER_D_BITS    Bits;
+  UINT8                  Data;
+} RTC_REGISTER_D;
+
+//
+// Module Globals
+//
+INTN  DaysOfMonth[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
+
+/**
+  This function verifies the leap year
+
+  @param  Year    year in YYYY format.
+
+  @retval TRUE if the year is a leap year
+
+**/
+STATIC
+BOOLEAN
+IsLeapYear (
+  IN UINT16  Year
+  )
+{
+  if (Year % 4 == 0) {
+    if (Year % 100 == 0) {
+      if (Year % 400 == 0) {
+        return TRUE;
+      } else {
+        return FALSE;
+      }
+    } else {
+      return TRUE;
+    }
+  } else {
+    return FALSE;
+  }
+}
+
+/**
+  This function calculates the total number leap days from 1970 to the current year
+
+  @param  Time    - Current Time
+
+  @retval Returns the number of leap days since the base year, 1970.
+
+**/
+STATIC
+UINTN
+CountNumOfLeapDays (
+  IN EFI_TIME  *Time
+  )
+{
+  UINT16  NumOfYear;
+  UINT16  BaseYear;
+  UINT16  Index;
+  UINTN   Count;
+
+  Count     = 0;
+  BaseYear  = 1970;
+  NumOfYear = Time->Year - 1970;
+
+  for (Index = 0; Index <= NumOfYear; Index++) {
+    if (IsLeapYear (BaseYear + Index)) {
+      Count++;
+    }
+  }
+
+  //
+  // If the current year is a leap year but the month is January or February,
+  // then the leap day has not occurred and should not be counted. If it is
+  // February 29, the leap day is accounted for in CalculateNumOfDayPassedThisYear( )
+  //
+  if (IsLeapYear (Time->Year)) {
+    if ((Count > 0) && (Time->Month < 3)) {
+      Count--;
+    }
+  }
+
+  return Count;
+}
+
+/**
+  This function calculates the total number of days passed till the day in a year.
+  If the year is a leap year, an extra day is not added since the number of leap
+  days is calculated in CountNumOfLeapDays.
+
+  @param  Time    This structure contains detailed information about date and time
+
+  @retval Returns the number of days passed until the input day.
+
+**/
+STATIC
+UINTN
+CalculateNumOfDayPassedThisYear (
+  IN  EFI_TIME  Time
+  )
+{
+  UINTN  Index;
+  UINTN  NumOfDays;
+
+  NumOfDays = 0;
+  for (Index = 1; Index < Time.Month; Index++) {
+    NumOfDays += DaysOfMonth[Index - 1];
+  }
+
+  NumOfDays += Time.Day;
+  return NumOfDays;
+}
+
+/**
+  Function converts a BCD to a decimal value.
+
+  @param[in] BcdValue   An 8 bit BCD value
+
+  @return The decimal value of the BcdValue
+**/
+STATIC
+UINT8
+BcdToDecimal (
+  IN  UINT8  BcdValue
+  )
+{
+  UINTN  High;
+  UINTN  Low;
+
+  High = BcdValue >> 4;
+  Low  = BcdValue - (High << 4);
+
+  return (UINT8)(Low + (High * 10));
+}
+
+//
+// RTC read functions were copied here since we need to get the time
+// in both DXE and runtime code.  The PcRtc driver is not currently a
+// dual mode driver, this is more efficient since making PcRtc dual mode
+// would unnecessarily bloat the SMM code space.
+//
+
+/**
+  Read data register and return contents.
+
+  @param Address - Register address to read
+
+  @retval Value of data register contents
+
+**/
+STATIC
+UINT8
+RtcRead (
+  IN  UINT8  Address
+  )
+{
+  IoWrite8 (PCAT_RTC_ADDRESS_REGISTER, (UINT8)(Address | (UINT8)(IoRead8 (PCAT_RTC_ADDRESS_REGISTER) & 0x80)));
+  return IoRead8 (PCAT_RTC_DATA_REGISTER);
+}
+
+/**
+  Write data to register address.
+
+  @param Address - Register address to write
+  @param Data   - Data to write to register
+
+**/
+STATIC
+VOID
+RtcWrite (
+  IN  UINT8  Address,
+  IN  UINT8  Data
+  )
+{
+  IoWrite8 (PCAT_RTC_ADDRESS_REGISTER, (UINT8)(Address | (UINT8)(IoRead8 (PCAT_RTC_ADDRESS_REGISTER) & 0x80)));
+  IoWrite8 (PCAT_RTC_DATA_REGISTER, Data);
+}
+
+/**
+  Convert Rtc Time To Efi Time.
+
+  @param Time
+  @param RegisterB
+
+**/
+STATIC
+VOID
+ConvertRtcTimeToEfiTime (
+  IN EFI_TIME        *Time,
+  IN RTC_REGISTER_B  RegisterB
+  )
+{
+  BOOLEAN  Pm;
+
+  if ((Time->Hour) & 0x80) {
+    Pm = TRUE;
+  } else {
+    Pm = FALSE;
+  }
+
+  Time->Hour = (UINT8)(Time->Hour & 0x7f);
+
+  if (RegisterB.Bits.DM == 0) {
+    Time->Year   = BcdToDecimal ((UINT8)Time->Year);
+    Time->Month  = BcdToDecimal (Time->Month);
+    Time->Day    = BcdToDecimal (Time->Day);
+    Time->Hour   = BcdToDecimal (Time->Hour);
+    Time->Minute = BcdToDecimal (Time->Minute);
+    Time->Second = BcdToDecimal (Time->Second);
+  }
+
+  //
+  // If time is in 12 hour format, convert it to 24 hour format
+  //
+  if (RegisterB.Bits.MIL == 0) {
+    if (Pm && (Time->Hour < 12)) {
+      Time->Hour = (UINT8)(Time->Hour + 12);
+    }
+
+    if (!Pm && (Time->Hour == 12)) {
+      Time->Hour = 0;
+    }
+  }
+
+  Time->Nanosecond = 0;
+  Time->TimeZone   = EFI_UNSPECIFIED_TIMEZONE;
+  Time->Daylight   = 0;
+}
+
+/**
+  Test Century Register.
+
+  @retval EFI_SUCCESS
+  @retval EFI_DEVICE_ERROR
+
+**/
+STATIC
+EFI_STATUS
+RtcTestCenturyRegister (
+  VOID
+  )
+{
+  UINT8  Century;
+  UINT8  Temp;
+
+  Century = RtcRead (RTC_ADDRESS_CENTURY);
+
+  //
+  // Always sync-up the Bit7 "semaphore"...this maintains
+  // consistency across the different chips/implementations of
+  // the RTC...
+  //
+  RtcWrite (RTC_ADDRESS_CENTURY, 0x00);
+  Temp = (UINT8)(RtcRead (RTC_ADDRESS_CENTURY) & 0x7f);
+  RtcWrite (RTC_ADDRESS_CENTURY, Century);
+  if ((Temp == 0x19) || (Temp == 0x20)) {
+    return EFI_SUCCESS;
+  }
+
+  return EFI_DEVICE_ERROR;
+}
+
+/**
+  Waits until RTC register A and D show data is valid.
+
+  @param Timeout - Maximum time to wait
+
+  @retval EFI_DEVICE_ERROR
+  @retval EFI_SUCCESS
+
+**/
+STATIC
+EFI_STATUS
+RtcWaitToUpdate (
+  UINTN  Timeout
+  )
+{
+  RTC_REGISTER_A  RegisterA;
+  RTC_REGISTER_D  RegisterD;
+
+  //
+  // See if the RTC is functioning correctly
+  //
+  RegisterD.Data = RtcRead (RTC_ADDRESS_REGISTER_D);
+
+  if (RegisterD.Bits.VRT == 0) {
+    return EFI_DEVICE_ERROR;
+  }
+
+  //
+  // Wait for up to 0.1 seconds for the RTC to be ready.
+  //
+  Timeout        = (Timeout / 10) + 1;
+  RegisterA.Data = RtcRead (RTC_ADDRESS_REGISTER_A);
+  while (RegisterA.Bits.UIP == 1 && Timeout > 0) {
+    MicroSecondDelay (10);
+    RegisterA.Data = RtcRead (RTC_ADDRESS_REGISTER_A);
+    Timeout--;
+  }
+
+  RegisterD.Data = RtcRead (RTC_ADDRESS_REGISTER_D);
+  if ((Timeout == 0) || (RegisterD.Bits.VRT == 0)) {
+    return EFI_DEVICE_ERROR;
+  }
+
+  return EFI_SUCCESS;
+}
+
+/**
+  Get time from RTC.
+
+  @param Time - pointer to time structure
+
+  @retval EFI_INVALID_PARAMETER
+  @retval EFI_SUCCESS
+
+**/
+STATIC
+EFI_STATUS
+RtcGetTime (
+  OUT EFI_TIME  *Time
+  )
+{
+  RTC_REGISTER_B  RegisterB;
+  UINT8           Century;
+  EFI_STATUS      Status;
+
+  //
+  // Check parameters for null pointer
+  //
+  if (Time == NULL) {
+    return EFI_INVALID_PARAMETER;
+  }
+
+  //
+  // Wait for up to 0.1 seconds for the RTC to be updated
+  //
+  Status = RtcWaitToUpdate (100000);
+  if (EFI_ERROR (Status)) {
+    return Status;
+  }
+
+  //
+  // Read Register B
+  //
+  RegisterB.Data = RtcRead (RTC_ADDRESS_REGISTER_B);
+
+  //
+  // Get the Time/Date/Daylight Savings values.
+  //
+  Time->Second = RtcRead (RTC_ADDRESS_SECONDS);
+  Time->Minute = RtcRead (RTC_ADDRESS_MINUTES);
+  Time->Hour   = RtcRead (RTC_ADDRESS_HOURS);
+  Time->Day    = RtcRead (RTC_ADDRESS_DAY_OF_THE_MONTH);
+  Time->Month  = RtcRead (RTC_ADDRESS_MONTH);
+  Time->Year   = RtcRead (RTC_ADDRESS_YEAR);
+
+  ConvertRtcTimeToEfiTime (Time, RegisterB);
+
+  if (RtcTestCenturyRegister () == EFI_SUCCESS) {
+    Century = BcdToDecimal ((UINT8)(RtcRead (RTC_ADDRESS_CENTURY) & 0x7f));
+  } else {
+    Century = BcdToDecimal (RtcRead (RTC_ADDRESS_CENTURY));
+  }
+
+  Time->Year = (UINT16)(Century * 100 + Time->Year);
+
+  return EFI_SUCCESS;
+}
+
+/**
+  Return Date and Time from RTC in Unix format which fits in 32 bit format.
+
+  @param NumOfSeconds - pointer to return calculated time
+
+  @retval EFI_SUCCESS
+  @retval EFI status if error occurred
+
+**/
+EFI_STATUS
+EfiSmGetTimeStamp (
+  OUT UINT32  *NumOfSeconds
+  )
+{
+  UINT16      NumOfYears;
+  UINTN       NumOfLeapDays;
+  UINTN       NumOfDays;
+  EFI_TIME    Time;
+  EFI_STATUS  Status;
+
+  Status = RtcGetTime (&Time);
+  if (EFI_ERROR (Status)) {
+    return Status;
+  }
+
+  NumOfYears    = Time.Year - 1970;
+  NumOfLeapDays = CountNumOfLeapDays (&Time);
+  NumOfDays     = CalculateNumOfDayPassedThisYear (Time);
+
+  //
+  // Add 365 days for all years. Add additional days for Leap Years. Subtract off current day.
+  //
+  NumOfDays += (NumOfLeapDays + (365 * NumOfYears) - 1);
+
+  *NumOfSeconds = (UINT32)(3600 * 24 * NumOfDays + (Time.Hour * 3600) + (60 * Time.Minute) + Time.Second);
+
+  return EFI_SUCCESS;
+}
diff --git a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Library/ServerManagementLib/StandaloneMmServerManagementLib.inf b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Library/ServerManagementLib/StandaloneMmServerManagementLib.inf
new file mode 100644
index 000000000000..e44a1624d0eb
--- /dev/null
+++ b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Library/ServerManagementLib/StandaloneMmServerManagementLib.inf
@@ -0,0 +1,29 @@
+### @file
+#
+# Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+###
+
+
+[Defines]
+  INF_VERSION                = 0x00010005
+  BASE_NAME                  = StandaloneMmServerManagementLib
+  FILE_GUID                  = b2740ad0-c15e-43a5-a13a-c8e078cc83ee
+  MODULE_TYPE                = MM_STANDALONE
+  VERSION_STRING             = 1.0
+  PI_SPECIFICATION_VERSION   = 0x00010032
+  LIBRARY_CLASS              = ServerManagementLib
+
+[Sources]
+  ServerManagementTime.c
+
+[Packages]
+  IpmiFeaturePkg/IpmiFeaturePkg.dec
+  MdePkg/MdePkg.dec
+
+[LibraryClasses]
+  IoLib
+  DebugLib
+  TimerLib
-- 
2.29.2.windows.2



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#112765): https://edk2.groups.io/g/devel/message/112765
Mute This Topic: https://groups.io/mt/103284558/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [edk2-devel] [PATCH edk2-platforms 2/4] IpmiFeaturePkg/BmcAcpiSwChild: Support Standalone MM
  2023-12-20 17:01 [edk2-devel] [PATCH edk2-platforms 0/4] IpmiFeaturePkg: Support Standalone MM Xu, Wei6
  2023-12-20 17:01 ` [edk2-devel] [PATCH edk2-platforms 1/4] IpmiFeaturePkg/ServerManagementLib: " Xu, Wei6
@ 2023-12-20 17:01 ` Xu, Wei6
  2023-12-20 17:01 ` [edk2-devel] [PATCH edk2-platforms 3/4] IpmiFeaturePkg/GenericElog: " Xu, Wei6
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Xu, Wei6 @ 2023-12-20 17:01 UTC (permalink / raw)
  To: devel; +Cc: Wei6 Xu, Abner Chang, Nate DeSimone

Refactor BmcAcpiSwChild to support Standalone MM.

Cc: Abner Chang <Abner.Chang@amd.com>
Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
Signed-off-by: Wei6 Xu <wei6.xu@intel.com>
---
 .../BmcAcpiSwChild/BmcAcpiSwChild.c           | 12 ++----
 .../BmcAcpiSwChild/BmcAcpiSwChild.h           | 15 ++-----
 .../BmcAcpiSwChild/BmcAcpiSwChild.inf         |  5 ++-
 .../BmcAcpiSwChildStandaloneMm.c              | 31 ++++++++++++++
 .../BmcAcpiSwChildStandaloneMm.inf            | 40 +++++++++++++++++++
 .../BmcAcpiSwChildTraditionalMm.c             | 31 ++++++++++++++
 .../IpmiFeaturePkg/Include/IpmiFeature.dsc    |  1 +
 7 files changed, 113 insertions(+), 22 deletions(-)
 create mode 100644 Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcAcpiSwChild/BmcAcpiSwChildStandaloneMm.c
 create mode 100644 Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcAcpiSwChild/BmcAcpiSwChildStandaloneMm.inf
 create mode 100644 Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcAcpiSwChild/BmcAcpiSwChildTraditionalMm.c

diff --git a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcAcpiSwChild/BmcAcpiSwChild.c b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcAcpiSwChild/BmcAcpiSwChild.c
index ba134db8d50d..2a058fe687f9 100644
--- a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcAcpiSwChild/BmcAcpiSwChild.c
+++ b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcAcpiSwChild/BmcAcpiSwChild.c
@@ -15,21 +15,15 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
 EFI_BMC_ACPI_SW_CHILD_POLICY_PROTOCOL  mBmcAcpiSwChild;
 
 /**
-  This is the standard EFI driver entrypoint. This function initializes
-  the BMC ACPI SW Child protocol.
-
-  @param ImageHandle - ImageHandle of the loaded driver
-  @param SystemTable - Pointer to the System Table
+  This function initializes the BMC ACPI SW Child protocol.
 
   @retval EFI_SUCCESS - If all services discovered.
   @retval Other       - Failure in constructor.
 
 **/
 EFI_STATUS
-EFIAPI
 InitializeBmcAcpiSwChild (
-  IN EFI_HANDLE        ImageHandle,
-  IN EFI_SYSTEM_TABLE  *SystemTable
+  VOID
   )
 {
   EFI_STATUS  Status;
@@ -43,7 +37,7 @@ InitializeBmcAcpiSwChild (
   // Install protocol
   //
   Handle = NULL;
-  Status = gSmst->SmmInstallProtocolInterface (
+  Status = gMmst->MmInstallProtocolInterface (
                     &Handle,
                     &gEfiBmcAcpiSwChildPolicyProtocolGuid,
                     EFI_NATIVE_INTERFACE,
diff --git a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcAcpiSwChild/BmcAcpiSwChild.h b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcAcpiSwChild/BmcAcpiSwChild.h
index 10d687ed2b84..7eb839483879 100644
--- a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcAcpiSwChild/BmcAcpiSwChild.h
+++ b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcAcpiSwChild/BmcAcpiSwChild.h
@@ -12,12 +12,11 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
 //
 // Statements that include other files
 //
-#include <Uefi.h>
+#include <PiMm.h>
 #include <Library/BaseLib.h>
-#include <Library/SmmLib.h>
 #include <Library/DebugLib.h>
 #include <Library/BaseMemoryLib.h>
-#include <Library/SmmServicesTableLib.h>
+#include <Library/MmServicesTableLib.h>
 #include <Library/MemoryAllocationLib.h>
 
 #include "ServerManagement.h"
@@ -33,21 +32,15 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
 //
 
 /**
-  This is the standard EFI driver entrypoint. This function initializes
-  the BMC ACPI SW Child protocol.
-
-  @param ImageHandle - ImageHandle of the loaded driver
-  @param SystemTable - Pointer to the System Table
+  This function initializes the BMC ACPI SW Child protocol.
 
   @retval EFI_SUCCESS - If all services discovered.
   @retval Other       - Failure in constructor.
 
 **/
 EFI_STATUS
-EFIAPI
 InitializeBmcAcpiSwChild (
-  IN EFI_HANDLE        ImageHandle,
-  IN EFI_SYSTEM_TABLE  *SystemTable
+  VOID
   );
 
 /**
diff --git a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcAcpiSwChild/BmcAcpiSwChild.inf b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcAcpiSwChild/BmcAcpiSwChild.inf
index 59a9f77d9f10..c2de4a1c82a9 100644
--- a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcAcpiSwChild/BmcAcpiSwChild.inf
+++ b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcAcpiSwChild/BmcAcpiSwChild.inf
@@ -14,11 +14,12 @@
   MODULE_TYPE              = DXE_SMM_DRIVER
   PI_SPECIFICATION_VERSION = 0x0001000A
   VERSION_STRING           = 1.0
-  ENTRY_POINT              = InitializeBmcAcpiSwChild
+  ENTRY_POINT              = BmcAcpiSwChildSmmEntry
 
 [Sources]
   BmcAcpiSwChild.c
   BmcAcpiSwChild.h
+  BmcAcpiSwChildTraditionalMm.c
 
 [Packages]
   IpmiFeaturePkg/IpmiFeaturePkg.dec
@@ -28,7 +29,7 @@
 [LibraryClasses]
   UefiDriverEntryPoint
   DebugLib
-  SmmServicesTableLib
+  MmServicesTableLib
   ServerManagementLib
   IpmiBaseLib
 
diff --git a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcAcpiSwChild/BmcAcpiSwChildStandaloneMm.c b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcAcpiSwChild/BmcAcpiSwChildStandaloneMm.c
new file mode 100644
index 000000000000..f302f9976565
--- /dev/null
+++ b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcAcpiSwChild/BmcAcpiSwChildStandaloneMm.c
@@ -0,0 +1,31 @@
+/** @file
+  This driver publishes a protocol that is used by the ACPI SMM Platform
+  driver to notify the BMC of Power State transitions.
+
+Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include "BmcAcpiSwChild.h"
+
+/**
+  This is the Stanalone MM driver entrypoint. This function intitializes
+  the BMC ACPI SW Child protocol.
+
+  @param[in] ImageHandle   ImageHandle of the loaded driver
+  @param[in] SystemTable   Pointer to the System Table
+
+  @retval EFI_SUCCESS      If all services discovered.
+  @retval Other            Failure in constructor.
+
+**/
+EFI_STATUS
+EFIAPI
+BmcAcpiSwChildMmEntry (
+  IN EFI_HANDLE           ImageHandle,
+  IN EFI_MM_SYSTEM_TABLE  *SystemTable
+  )
+{
+  return InitializeBmcAcpiSwChild ();
+}
diff --git a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcAcpiSwChild/BmcAcpiSwChildStandaloneMm.inf b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcAcpiSwChild/BmcAcpiSwChildStandaloneMm.inf
new file mode 100644
index 000000000000..cf8a715bd9e4
--- /dev/null
+++ b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcAcpiSwChild/BmcAcpiSwChildStandaloneMm.inf
@@ -0,0 +1,40 @@
+### @file
+#
+# Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+###
+
+
+[Defines]
+  INF_VERSION              = 0x00010005
+  BASE_NAME                = BmcAcpiSwChild
+  FILE_GUID                = 81657b09-61ea-4f4a-ac6a-9f7f4cdd7450
+  MODULE_TYPE              = MM_STANDALONE
+  PI_SPECIFICATION_VERSION = 0x00010032
+  VERSION_STRING           = 1.0
+  ENTRY_POINT              = BmcAcpiSwChildMmEntry
+
+[Sources]
+  BmcAcpiSwChild.c
+  BmcAcpiSwChild.h
+  BmcAcpiSwChildStandaloneMm.c
+
+[Packages]
+  IpmiFeaturePkg/IpmiFeaturePkg.dec
+  MdePkg/MdePkg.dec
+  MdeModulePkg/MdeModulePkg.dec
+
+[LibraryClasses]
+  StandaloneMmDriverEntryPoint
+  DebugLib
+  MmServicesTableLib
+  ServerManagementLib
+  IpmiBaseLib
+
+[Protocols]
+  gEfiBmcAcpiSwChildPolicyProtocolGuid   # PROTOCOL ALWAYS_PRODUCED
+
+[Depex]
+  gSmmIpmiTransportProtocolGuid
diff --git a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcAcpiSwChild/BmcAcpiSwChildTraditionalMm.c b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcAcpiSwChild/BmcAcpiSwChildTraditionalMm.c
new file mode 100644
index 000000000000..f1acee932214
--- /dev/null
+++ b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcAcpiSwChild/BmcAcpiSwChildTraditionalMm.c
@@ -0,0 +1,31 @@
+/** @file
+  This driver publishes a protocol that is used by the ACPI SMM Platform
+  driver to notify the BMC of Power State transitions.
+
+Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include "BmcAcpiSwChild.h"
+
+/**
+  This is the standard EFI driver entrypoint. This function intitializes
+  the BMC ACPI SW Child protocol.
+
+  @param[in] ImageHandle   ImageHandle of the loaded driver
+  @param[in] SystemTable   Pointer to the System Table
+
+  @retval EFI_SUCCESS      If all services discovered.
+  @retval Other            Failure in constructor.
+
+**/
+EFI_STATUS
+EFIAPI
+BmcAcpiSwChildSmmEntry (
+  IN EFI_HANDLE        ImageHandle,
+  IN EFI_SYSTEM_TABLE  *SystemTable
+  )
+{
+  return InitializeBmcAcpiSwChild ();
+}
diff --git a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Include/IpmiFeature.dsc b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Include/IpmiFeature.dsc
index 45439f92eaac..1192c6e9739c 100644
--- a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Include/IpmiFeature.dsc
+++ b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Include/IpmiFeature.dsc
@@ -127,6 +127,7 @@
   IpmiFeaturePkg/BmcAcpi/BmcAcpi.inf
   IpmiFeaturePkg/BmcAcpiState/BmcAcpiState.inf
   IpmiFeaturePkg/BmcAcpiSwChild/BmcAcpiSwChild.inf
+  IpmiFeaturePkg/BmcAcpiSwChild/BmcAcpiSwChildStandaloneMm.inf
   IpmiFeaturePkg/BmcElog/DxeBmcElog.inf
   IpmiFeaturePkg/BmcElog/SmmBmcElog.inf
   IpmiFeaturePkg/GenericElog/Dxe/GenericElog.inf
-- 
2.29.2.windows.2



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#112766): https://edk2.groups.io/g/devel/message/112766
Mute This Topic: https://groups.io/mt/103284562/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [edk2-devel] [PATCH edk2-platforms 3/4] IpmiFeaturePkg/GenericElog: Support Standalone MM
  2023-12-20 17:01 [edk2-devel] [PATCH edk2-platforms 0/4] IpmiFeaturePkg: Support Standalone MM Xu, Wei6
  2023-12-20 17:01 ` [edk2-devel] [PATCH edk2-platforms 1/4] IpmiFeaturePkg/ServerManagementLib: " Xu, Wei6
  2023-12-20 17:01 ` [edk2-devel] [PATCH edk2-platforms 2/4] IpmiFeaturePkg/BmcAcpiSwChild: " Xu, Wei6
@ 2023-12-20 17:01 ` Xu, Wei6
  2023-12-20 17:01 ` [edk2-devel] [PATCH edk2-platforms 4/4] IpmiFeaturePkg/BmcElog: " Xu, Wei6
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 7+ messages in thread
From: Xu, Wei6 @ 2023-12-20 17:01 UTC (permalink / raw)
  To: devel; +Cc: Wei6 Xu, Abner Chang, Nate DeSimone, Lixia Huang

Refactor GenericElog to support Standalone MM.
Remove unused function SmElogServiceInitialize.

Cc: Abner Chang <Abner.Chang@amd.com>
Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
Signed-off-by: Lixia Huang <lisa.huang@intel.com>
---
 .../GenericElog/Smm/GenericElog.c             | 35 +++-------------
 .../GenericElog/Smm/GenericElog.h             | 28 ++++++-------
 .../GenericElog/Smm/GenericElog.inf           |  5 ++-
 .../GenericElog/Smm/GenericElogStandaloneMm.c | 28 +++++++++++++
 .../Smm/GenericElogStandaloneMm.inf           | 41 +++++++++++++++++++
 .../Smm/GenericElogTraditionalMm.c            | 28 +++++++++++++
 .../IpmiFeaturePkg/Include/IpmiFeature.dsc    |  1 +
 7 files changed, 118 insertions(+), 48 deletions(-)
 create mode 100644 Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericElog/Smm/GenericElogStandaloneMm.c
 create mode 100644 Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericElog/Smm/GenericElogStandaloneMm.inf
 create mode 100644 Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericElog/Smm/GenericElogTraditionalMm.c

diff --git a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericElog/Smm/GenericElog.c b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericElog/Smm/GenericElog.c
index d6a129a181fb..ce69d36af896 100644
--- a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericElog/Smm/GenericElog.c
+++ b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericElog/Smm/GenericElog.c
@@ -374,7 +374,7 @@ SetElogRedirInstances (
   //
   // Check for all IPMI Controllers
   //
-  Status = gSmst->SmmLocateHandle (
+  Status = gMmst->MmLocateHandle (
                     ByProtocol,
                     &gSmmRedirElogProtocolGuid,
                     NULL,
@@ -389,7 +389,7 @@ SetElogRedirInstances (
   for (Index = 0; ((Index < NumHandles) && (Index < mElogModuleGlobal->MaxDescriptors)); Index++) {
     EmptyIndex = mElogModuleGlobal->MaxDescriptors;
 
-    Status = gSmst->SmmHandleProtocol (
+    Status = gMmst->MmHandleProtocol (
                       Buffer[Index],
                       &gSmmRedirElogProtocolGuid,
                       (VOID *)&Redir
@@ -452,17 +452,12 @@ NotifyElogRedirEventCallback (
 /**
   Initialize the generic Elog driver of server management.
 
-  @param ImageHandle  - The image handle of this driver
-  @param SystemTable  - The pointer of EFI_SYSTEM_TABLE
-
   @retval EFI_SUCCESS - The driver initialized successfully
 
 **/
 EFI_STATUS
-EFIAPI
 InitializeSmElogLayer (
-  IN EFI_HANDLE        ImageHandle,
-  IN EFI_SYSTEM_TABLE  *SystemTable
+  VOID
   )
 {
   EFI_HANDLE            NewHandle;
@@ -475,8 +470,6 @@ InitializeSmElogLayer (
     return EFI_OUT_OF_RESOURCES;
   }
 
-  SmElogServiceInitialize (ImageHandle, SystemTable);
-
   mElogModuleGlobal->MaxDescriptors = MAX_REDIR_DESCRIPTOR;
 
   //
@@ -496,7 +489,7 @@ InitializeSmElogLayer (
   ElogProtocol->SetEventLogData   = (EFI_SET_ELOG_DATA)EfiSetElogData;
 
   NewHandle = NULL;
-  Status    = gSmst->SmmInstallProtocolInterface (
+  Status    = gMmst->MmInstallProtocolInterface (
                        &NewHandle,
                        &gSmmGenericElogProtocolGuid,
                        EFI_NATIVE_INTERFACE,
@@ -512,7 +505,7 @@ InitializeSmElogLayer (
   // Register to be notified when the ELOG REDIR protocol has been
   // produced.
   //
-  Status = gSmst->SmmRegisterProtocolNotify (
+  Status = gMmst->MmRegisterProtocolNotify (
                     &gSmmRedirElogProtocolGuid,
                     NULL,
                     &mEfiElogRedirProtocolEvent
@@ -538,21 +531,3 @@ EfiSetFunctionEntry (
   FunctionPointer->Function = (EFI_PLABEL *)Function;
   return EFI_SUCCESS;
 }
-
-/**
-  Entry point of SM Elog service Driver
-
-  @param ImageHandle         - The Image handle of this driver.
-  @param SystemTable         - The pointer of EFI_SYSTEM_TABLE.
-
-  @retval EFI_SUCCESS - The driver successfully initialized
-
-**/
-EFI_STATUS
-SmElogServiceInitialize (
-  IN EFI_HANDLE        ImageHandle,
-  IN EFI_SYSTEM_TABLE  *SystemTable
-  )
-{
-  return EFI_SUCCESS;
-}
diff --git a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericElog/Smm/GenericElog.h b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericElog/Smm/GenericElog.h
index ad6530616309..71dd247bfe58 100644
--- a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericElog/Smm/GenericElog.h
+++ b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericElog/Smm/GenericElog.h
@@ -15,7 +15,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
 #include <Library/DebugLib.h>
 
 #include <Library/BaseMemoryLib.h>
-#include <Library/SmmServicesTableLib.h>
+#include <Library/MmServicesTableLib.h>
 #include <Library/MemoryAllocationLib.h>
 
 #include "ServerManagement.h"
@@ -84,21 +84,6 @@ EfiSetFunctionEntry (
   IN  VOID          *Function
   );
 
-/**
-  Entry point of SM Elog service Driver
-
-  @param ImageHandle         - The Image handle of this driver.
-  @param SystemTable         - The pointer of EFI_SYSTEM_TABLE.
-
-  @retval EFI_SUCCESS - The driver successfully initialized
-
-**/
-EFI_STATUS
-SmElogServiceInitialize (
-  IN EFI_HANDLE        ImageHandle,
-  IN EFI_SYSTEM_TABLE  *SystemTable
-  );
-
 /**
   Sm Redir Address Change Event.
 
@@ -213,4 +198,15 @@ EfiLibActivateElog (
   BOOLEAN               Virtual
   );
 
+/**
+  Initialize the generic ELog driver of server management.
+
+  @retval EFI_SUCCESS - The driver initialized successfully
+
+**/
+EFI_STATUS
+InitializeSmElogLayer (
+  VOID
+  );
+
 #endif //_SMM_GENELOG_H_
diff --git a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericElog/Smm/GenericElog.inf b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericElog/Smm/GenericElog.inf
index ea1cf9d61bbd..2255dfb54a46 100644
--- a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericElog/Smm/GenericElog.inf
+++ b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericElog/Smm/GenericElog.inf
@@ -14,11 +14,12 @@
   MODULE_TYPE              = DXE_SMM_DRIVER
   PI_SPECIFICATION_VERSION = 0x0001000A
   VERSION_STRING           = 1.0
-  ENTRY_POINT              = InitializeSmElogLayer
+  ENTRY_POINT              = InitializeSmElogLayerSmm
 
 [Sources]
   GenericElog.c
   GenericElog.h
+  GenericElogTraditionalMm.c
 
 [Packages]
   IpmiFeaturePkg/IpmiFeaturePkg.dec
@@ -27,7 +28,7 @@
 [LibraryClasses]
   UefiDriverEntryPoint
   DebugLib
-  SmmServicesTableLib
+  MmServicesTableLib
   MemoryAllocationLib
 
 [Protocols]
diff --git a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericElog/Smm/GenericElogStandaloneMm.c b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericElog/Smm/GenericElogStandaloneMm.c
new file mode 100644
index 000000000000..9c83384819c0
--- /dev/null
+++ b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericElog/Smm/GenericElogStandaloneMm.c
@@ -0,0 +1,28 @@
+/** @file
+  Generic Event Log functions of StandaloneMm GenericElog driver.
+
+Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include "GenericElog.h"
+
+/**
+  The Driver Entry Point.
+
+  @param[in] ImageHandle    The image handle of this driver
+  @param[in] SystemTable    The pointer of EFI_MM_SYSTEM_TABLE
+
+  @retval EFI_SUCCESS       The driver initialized successfully
+
+**/
+EFI_STATUS
+EFIAPI
+InitializeSmElogLayerStandaloneMm (
+  IN EFI_HANDLE           ImageHandle,
+  IN EFI_MM_SYSTEM_TABLE  *SystemTable
+  )
+{
+  return InitializeSmElogLayer ();
+}
diff --git a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericElog/Smm/GenericElogStandaloneMm.inf b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericElog/Smm/GenericElogStandaloneMm.inf
new file mode 100644
index 000000000000..25aecb1920b7
--- /dev/null
+++ b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericElog/Smm/GenericElogStandaloneMm.inf
@@ -0,0 +1,41 @@
+### @file
+#
+# Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+###
+
+
+[Defines]
+  INF_VERSION              = 0x00010005
+  BASE_NAME                = GenericElogStandaloneMm
+  FILE_GUID                = dbc3cc63-3fb9-4314-b87d-caabf75862c4
+  MODULE_TYPE              = MM_STANDALONE
+  PI_SPECIFICATION_VERSION = 0x00010032
+  VERSION_STRING           = 1.0
+  ENTRY_POINT              = InitializeSmElogLayerStandaloneMm
+
+
+[Sources]
+  GenericElog.c
+  GenericElog.h
+  GenericElogStandaloneMm.c
+
+[Packages]
+  IpmiFeaturePkg/IpmiFeaturePkg.dec
+  MdePkg/MdePkg.dec
+
+[LibraryClasses]
+  StandaloneMmDriverEntryPoint
+  DebugLib
+  MmServicesTableLib
+  MemoryAllocationLib
+
+[Protocols]
+  gSmmGenericElogProtocolGuid     # PROTOCOL ALWAYS_PRODUCED
+  gSmmRedirElogProtocolGuid       #PROTOCOL ALWAYS_COMSUMED
+
+[Depex]
+  gSmmRedirElogProtocolGuid AND
+  gSmmIpmiTransportProtocolGuid
diff --git a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericElog/Smm/GenericElogTraditionalMm.c b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericElog/Smm/GenericElogTraditionalMm.c
new file mode 100644
index 000000000000..5322a49d416d
--- /dev/null
+++ b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericElog/Smm/GenericElogTraditionalMm.c
@@ -0,0 +1,28 @@
+/** @file
+  Generic Event Log functions of SMM GenericElog driver.
+
+Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include "GenericElog.h"
+
+/**
+  The Driver Entry Point.
+
+  @param[in] ImageHandle    The image handle of this driver
+  @param[in] SystemTable    The pointer of EFI_SYSTEM_TABLE
+
+  @retval EFI_SUCCESS       The driver initialized successfully
+
+**/
+EFI_STATUS
+EFIAPI
+InitializeSmElogLayerSmm (
+  IN EFI_HANDLE        ImageHandle,
+  IN EFI_SYSTEM_TABLE  *SystemTable
+  )
+{
+  return InitializeSmElogLayer ();
+}
diff --git a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Include/IpmiFeature.dsc b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Include/IpmiFeature.dsc
index 1192c6e9739c..12060d156ef4 100644
--- a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Include/IpmiFeature.dsc
+++ b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Include/IpmiFeature.dsc
@@ -132,6 +132,7 @@
   IpmiFeaturePkg/BmcElog/SmmBmcElog.inf
   IpmiFeaturePkg/GenericElog/Dxe/GenericElog.inf
   IpmiFeaturePkg/GenericElog/Smm/GenericElog.inf
+  IpmiFeaturePkg/GenericElog/Smm/GenericElogStandaloneMm.inf
   IpmiFeaturePkg/Frb/FrbDxe.inf
   IpmiFeaturePkg/IpmiRedirFru/IpmiRedirFru.inf
   IpmiFeaturePkg/GenericFru/GenericFru.inf
-- 
2.29.2.windows.2



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#112767): https://edk2.groups.io/g/devel/message/112767
Mute This Topic: https://groups.io/mt/103284563/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [edk2-devel] [PATCH edk2-platforms 4/4] IpmiFeaturePkg/BmcElog: Support Standalone MM
  2023-12-20 17:01 [edk2-devel] [PATCH edk2-platforms 0/4] IpmiFeaturePkg: Support Standalone MM Xu, Wei6
                   ` (2 preceding siblings ...)
  2023-12-20 17:01 ` [edk2-devel] [PATCH edk2-platforms 3/4] IpmiFeaturePkg/GenericElog: " Xu, Wei6
@ 2023-12-20 17:01 ` Xu, Wei6
  2023-12-21  1:58 ` [edk2-devel] [PATCH edk2-platforms 0/4] IpmiFeaturePkg: " Nate DeSimone
  2023-12-21  2:02 ` Nate DeSimone
  5 siblings, 0 replies; 7+ messages in thread
From: Xu, Wei6 @ 2023-12-20 17:01 UTC (permalink / raw)
  To: devel; +Cc: Wei6 Xu, Abner Chang, Nate DeSimone, Lixia Huang

Refactor BmcElog to support Standalone MM.
Remove unused code.

Cc: Abner Chang <Abner.Chang@amd.com>
Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
Signed-off-by: Lixia Huang <lisa.huang@intel.com>
---
 .../IpmiFeaturePkg/BmcElog/Smm/BmcElog.c      | 14 ++----
 .../IpmiFeaturePkg/BmcElog/Smm/BmcElog.h      | 15 +++++--
 .../BmcElog/Smm/BmcElogStandaloneMm.c         | 28 ++++++++++++
 .../BmcElog/Smm/BmcElogTraditionalMm.c        | 28 ++++++++++++
 .../IpmiFeaturePkg/BmcElog/SmmBmcElog.inf     |  6 +--
 .../BmcElog/StandaloneMmBmcElog.inf           | 44 +++++++++++++++++++
 .../IpmiFeaturePkg/Include/IpmiFeature.dsc    |  1 +
 7 files changed, 119 insertions(+), 17 deletions(-)
 create mode 100644 Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcElog/Smm/BmcElogStandaloneMm.c
 create mode 100644 Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcElog/Smm/BmcElogTraditionalMm.c
 create mode 100644 Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcElog/StandaloneMmBmcElog.inf

diff --git a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcElog/Smm/BmcElog.c b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcElog/Smm/BmcElog.c
index efaa61f43869..0c166f733a7d 100644
--- a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcElog/Smm/BmcElog.c
+++ b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcElog/Smm/BmcElog.c
@@ -228,7 +228,7 @@ SetElogRedirInstall (
   // Now install the Protocol
   //
   NewHandle = NULL;
-  Status    = gSmst->SmmInstallProtocolInterface (
+  Status    = gMmst->MmInstallProtocolInterface (
                        &NewHandle,
                        &gSmmRedirElogProtocolGuid,
                        EFI_NATIVE_INTERFACE,
@@ -249,28 +249,20 @@ SetElogRedirInstall (
 }
 
 /**
-  InitializeBmcElogLayer.
-
-  @param ImageHandle - ImageHandle of the loaded driver
-  @param SystemTable - Pointer to the System Table
+  InitializeSmBmcElogLayer.
 
   @retval EFI_STATUS
 
 **/
 EFI_STATUS
-EFIAPI
 InitializeSmBmcElogLayer (
-  IN EFI_HANDLE        ImageHandle,
-  IN EFI_SYSTEM_TABLE  *SystemTable
+  VOID
   )
 {
   EFI_STATUS  Status;
 
   Status = EFI_SUCCESS;
 
-  gST = SystemTable;
-  gBS = gST->BootServices;
-
   mRedirProtoPrivate = AllocatePool (sizeof (EFI_BMC_ELOG_INSTANCE_DATA));
   ASSERT (mRedirProtoPrivate != NULL);
   if (mRedirProtoPrivate == NULL) {
diff --git a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcElog/Smm/BmcElog.h b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcElog/Smm/BmcElog.h
index 218af380a229..89680f2f0ff1 100644
--- a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcElog/Smm/BmcElog.h
+++ b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcElog/Smm/BmcElog.h
@@ -13,9 +13,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
 // Statements that include other files
 //
 
-#include <Library/SmmServicesTableLib.h>
-#include <Library/SmmLib.h>
-#include <Library/UefiBootServicesTableLib.h>
+#include <Library/MmServicesTableLib.h>
 #include <Protocol/IpmiTransportProtocol.h>
 #include <Protocol/GenericElog.h>
 #include "BmcElogCommon.h"
@@ -40,4 +38,15 @@ typedef struct {
 
 #define INSTANCE_FROM_EFI_SM_ELOG_REDIR_THIS(a)  CR (a, EFI_BMC_ELOG_INSTANCE_DATA, BmcElog, SM_ELOG_REDIR_SIGNATURE)
 
+/**
+  InitializeSmBmcElogLayer.
+
+  @retval EFI_STATUS
+
+**/
+EFI_STATUS
+InitializeSmBmcElogLayer (
+  VOID
+  );
+
 #endif //_SMM_BMCELOG_H_
diff --git a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcElog/Smm/BmcElogStandaloneMm.c b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcElog/Smm/BmcElogStandaloneMm.c
new file mode 100644
index 000000000000..1d883a6cd1e7
--- /dev/null
+++ b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcElog/Smm/BmcElogStandaloneMm.c
@@ -0,0 +1,28 @@
+/** @file
+  Entry Piont of Bmc Elog Standalone MM Driver.
+
+Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include "BmcElog.h"
+
+/**
+  InitializeBmcElogLayerStandaloneMm.
+
+  @param[in] ImageHandle   ImageHandle of the loaded driver
+  @param[in] SystemTable   Pointer to the MM System Table
+
+  @retval EFI_STATUS
+
+**/
+EFI_STATUS
+EFIAPI
+InitializeSmBmcElogLayerStandaloneMm (
+  IN EFI_HANDLE           ImageHandle,
+  IN EFI_MM_SYSTEM_TABLE  *SystemTable
+  )
+{
+  return InitializeSmBmcElogLayer ();
+}
diff --git a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcElog/Smm/BmcElogTraditionalMm.c b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcElog/Smm/BmcElogTraditionalMm.c
new file mode 100644
index 000000000000..16113f8bec27
--- /dev/null
+++ b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcElog/Smm/BmcElogTraditionalMm.c
@@ -0,0 +1,28 @@
+/** @file
+  Entry Piont of Bmc Elog SMM Driver.
+
+Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#include "BmcElog.h"
+
+/**
+  InitializeBmcElogLayerSmm.
+
+  @param[in] ImageHandle   ImageHandle of the loaded driver
+  @param[in] SystemTable   Pointer to the System Table
+
+  @retval EFI_STATUS
+
+**/
+EFI_STATUS
+EFIAPI
+InitializeSmBmcElogLayerSmm (
+  IN EFI_HANDLE        ImageHandle,
+  IN EFI_SYSTEM_TABLE  *SystemTable
+  )
+{
+  return InitializeSmBmcElogLayer ();
+}
diff --git a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcElog/SmmBmcElog.inf b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcElog/SmmBmcElog.inf
index d6880f8baa1b..8fa60fe6ac02 100644
--- a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcElog/SmmBmcElog.inf
+++ b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcElog/SmmBmcElog.inf
@@ -14,11 +14,12 @@
   MODULE_TYPE              = DXE_SMM_DRIVER
   PI_SPECIFICATION_VERSION = 0x0001000A
   VERSION_STRING           = 1.0
-  ENTRY_POINT              = InitializeSmBmcElogLayer
+  ENTRY_POINT              = InitializeSmBmcElogLayerSmm
 
 [Sources]
   Smm/BmcElog.c
   Smm/BmcElog.h
+  Smm/BmcElogTraditionalMm.c
   Common/BmcElogCommon.h
   Common/BmcElogCommon.c
 
@@ -30,9 +31,8 @@
 [LibraryClasses]
   UefiDriverEntryPoint
   DebugLib
-  UefiBootServicesTableLib
   ReportStatusCodeLib
-  SmmServicesTableLib
+  MmServicesTableLib
   IpmiBaseLib
 
 [Protocols]
diff --git a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcElog/StandaloneMmBmcElog.inf b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcElog/StandaloneMmBmcElog.inf
new file mode 100644
index 000000000000..9a229ab7abac
--- /dev/null
+++ b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcElog/StandaloneMmBmcElog.inf
@@ -0,0 +1,44 @@
+### @file
+#
+# Copyright (c) 2023, Intel Corporation. All rights reserved.<BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+###
+
+
+[Defines]
+  INF_VERSION              = 0x00010005
+  BASE_NAME                = SmBmcElogStandaloneMm
+  FILE_GUID                = 802bc368-2f35-4fb5-9675-bf76a7601690
+  MODULE_TYPE              = MM_STANDALONE
+  PI_SPECIFICATION_VERSION = 0x00010032
+  VERSION_STRING           = 1.0
+  ENTRY_POINT              = InitializeSmBmcElogLayerStandaloneMm
+
+[Sources]
+  Smm/BmcElog.c
+  Smm/BmcElog.h
+  Smm/BmcElogStandaloneMm.c
+  Common/BmcElogCommon.h
+  Common/BmcElogCommon.c
+
+[Packages]
+  IpmiFeaturePkg/IpmiFeaturePkg.dec
+  MdePkg/MdePkg.dec
+  MdeModulePkg/MdeModulePkg.dec
+
+[LibraryClasses]
+  StandaloneMmDriverEntryPoint
+  DebugLib
+  ReportStatusCodeLib
+  MmServicesTableLib
+  IpmiBaseLib
+
+[Protocols]
+  gSmmRedirElogProtocolGuid   # PROTOCOL ALWAYS_PRODUCED
+
+[Depex]
+  gEfiLoadedImageProtocolGuid AND
+  gSmmIpmiTransportProtocolGuid
+
diff --git a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Include/IpmiFeature.dsc b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Include/IpmiFeature.dsc
index 12060d156ef4..bf8244469063 100644
--- a/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Include/IpmiFeature.dsc
+++ b/Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Include/IpmiFeature.dsc
@@ -130,6 +130,7 @@
   IpmiFeaturePkg/BmcAcpiSwChild/BmcAcpiSwChildStandaloneMm.inf
   IpmiFeaturePkg/BmcElog/DxeBmcElog.inf
   IpmiFeaturePkg/BmcElog/SmmBmcElog.inf
+  IpmiFeaturePkg/BmcElog/StandaloneMmBmcElog.inf
   IpmiFeaturePkg/GenericElog/Dxe/GenericElog.inf
   IpmiFeaturePkg/GenericElog/Smm/GenericElog.inf
   IpmiFeaturePkg/GenericElog/Smm/GenericElogStandaloneMm.inf
-- 
2.29.2.windows.2



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#112768): https://edk2.groups.io/g/devel/message/112768
Mute This Topic: https://groups.io/mt/103284565/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [edk2-devel] [PATCH edk2-platforms 0/4] IpmiFeaturePkg: Support Standalone MM.
  2023-12-20 17:01 [edk2-devel] [PATCH edk2-platforms 0/4] IpmiFeaturePkg: Support Standalone MM Xu, Wei6
                   ` (3 preceding siblings ...)
  2023-12-20 17:01 ` [edk2-devel] [PATCH edk2-platforms 4/4] IpmiFeaturePkg/BmcElog: " Xu, Wei6
@ 2023-12-21  1:58 ` Nate DeSimone
  2023-12-21  2:02 ` Nate DeSimone
  5 siblings, 0 replies; 7+ messages in thread
From: Nate DeSimone @ 2023-12-21  1:58 UTC (permalink / raw)
  To: Xu, Wei6, devel@edk2.groups.io; +Cc: Abner Chang

For the series...

Reviewed-by: Nate DeSimone <nathaniel.l.desimone@intel.com>=

> -----Original Message-----
> From: Xu, Wei6 <wei6.xu@intel.com>
> Sent: Wednesday, December 20, 2023 9:02 AM
> To: devel@edk2.groups.io
> Cc: Xu, Wei6 <wei6.xu@intel.com>; Abner Chang <Abner.Chang@amd.com>;
> Desimone, Nathaniel L <nathaniel.l.desimone@intel.com>
> Subject: [PATCH edk2-platforms 0/4] IpmiFeaturePkg: Support Standalone
> MM.
> 
> This patch series add Standalone MM support for ServerManagementLib,
> BmcAcpiSwChild, BmcElog and GenericElog.
> PR: https://github.com/tianocore/edk2-platforms/pull/117
> 
> Cc: Abner Chang <Abner.Chang@amd.com>
> Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
> 
> Wei6 Xu (4):
>   IpmiFeaturePkg/ServerManagementLib: Support Standalone MM
>   IpmiFeaturePkg/BmcAcpiSwChild: Support Standalone MM
>   IpmiFeaturePkg/GenericElog: Support Standalone MM
>   IpmiFeaturePkg/BmcElog: Support Standalone MM
> 
>  .../BmcAcpiSwChild/BmcAcpiSwChild.c           |   12 +-
>  .../BmcAcpiSwChild/BmcAcpiSwChild.h           |   15 +-
>  .../BmcAcpiSwChild/BmcAcpiSwChild.inf         |    5 +-
>  .../BmcAcpiSwChildStandaloneMm.c              |   31 +
>  .../BmcAcpiSwChildStandaloneMm.inf            |   40 +
>  .../BmcAcpiSwChildTraditionalMm.c             |   31 +
>  .../IpmiFeaturePkg/BmcElog/Smm/BmcElog.c      |   14 +-
>  .../IpmiFeaturePkg/BmcElog/Smm/BmcElog.h      |   15 +-
>  .../BmcElog/Smm/BmcElogStandaloneMm.c         |   28 +
>  .../BmcElog/Smm/BmcElogTraditionalMm.c        |   28 +
>  .../IpmiFeaturePkg/BmcElog/SmmBmcElog.inf     |    6 +-
>  .../BmcElog/StandaloneMmBmcElog.inf           |   44 +
>  .../GenericElog/Smm/GenericElog.c             |   35 +-
>  .../GenericElog/Smm/GenericElog.h             |   28 +-
>  .../GenericElog/Smm/GenericElog.inf           |    5 +-
>  .../GenericElog/Smm/GenericElogStandaloneMm.c |   28 +
>  .../Smm/GenericElogStandaloneMm.inf           |   41 +
>  .../Smm/GenericElogTraditionalMm.c            |   28 +
>  .../IpmiFeaturePkg/Include/IpmiFeature.dsc    |    6 +
>  .../ServerManagementElog.c                    |  235 ++++
>  .../ServerManagementLib.inf                   |    4 +-
>  ...ManagementLib.c => ServerManagementTime.c} | 1175 +++++++----------
>  .../StandaloneMmServerManagementLib.inf       |   29 +
>  23 files changed, 1099 insertions(+), 784 deletions(-)  create mode 100644
> Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcAcpiSwChild/B
> mcAcpiSwChildStandaloneMm.c
>  create mode 100644
> Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcAcpiSwChild/B
> mcAcpiSwChildStandaloneMm.inf
>  create mode 100644
> Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcAcpiSwChild/B
> mcAcpiSwChildTraditionalMm.c
>  create mode 100644
> Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcElog/Smm/Bmc
> ElogStandaloneMm.c
>  create mode 100644
> Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcElog/Smm/Bmc
> ElogTraditionalMm.c
>  create mode 100644
> Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcElog/Standalon
> eMmBmcElog.inf
>  create mode 100644
> Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericElog/Smm/
> GenericElogStandaloneMm.c
>  create mode 100644
> Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericElog/Smm/
> GenericElogStandaloneMm.inf
>  create mode 100644
> Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericElog/Smm/
> GenericElogTraditionalMm.c
>  create mode 100644
> Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Library/ServerMana
> gementLib/ServerManagementElog.c
>  rename
> Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Library/ServerMana
> gementLib/{ServerManagementLib.c => ServerManagementTime.c} (55%)
> create mode 100644
> Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Library/ServerMana
> gementLib/StandaloneMmServerManagementLib.inf
> 
> --
> 2.29.2.windows.2



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#112789): https://edk2.groups.io/g/devel/message/112789
Mute This Topic: https://groups.io/mt/103284557/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [edk2-devel] [PATCH edk2-platforms 0/4] IpmiFeaturePkg: Support Standalone MM.
  2023-12-20 17:01 [edk2-devel] [PATCH edk2-platforms 0/4] IpmiFeaturePkg: Support Standalone MM Xu, Wei6
                   ` (4 preceding siblings ...)
  2023-12-21  1:58 ` [edk2-devel] [PATCH edk2-platforms 0/4] IpmiFeaturePkg: " Nate DeSimone
@ 2023-12-21  2:02 ` Nate DeSimone
  5 siblings, 0 replies; 7+ messages in thread
From: Nate DeSimone @ 2023-12-21  2:02 UTC (permalink / raw)
  To: Xu, Wei6, devel@edk2.groups.io; +Cc: Abner Chang

The series has been pushed as 59ef582~..fc6e352

> -----Original Message-----
> From: Xu, Wei6 <wei6.xu@intel.com>
> Sent: Wednesday, December 20, 2023 9:02 AM
> To: devel@edk2.groups.io
> Cc: Xu, Wei6 <wei6.xu@intel.com>; Abner Chang <Abner.Chang@amd.com>;
> Desimone, Nathaniel L <nathaniel.l.desimone@intel.com>
> Subject: [PATCH edk2-platforms 0/4] IpmiFeaturePkg: Support Standalone
> MM.
> 
> This patch series add Standalone MM support for ServerManagementLib,
> BmcAcpiSwChild, BmcElog and GenericElog.
> PR: https://github.com/tianocore/edk2-platforms/pull/117
> 
> Cc: Abner Chang <Abner.Chang@amd.com>
> Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
> 
> Wei6 Xu (4):
>   IpmiFeaturePkg/ServerManagementLib: Support Standalone MM
>   IpmiFeaturePkg/BmcAcpiSwChild: Support Standalone MM
>   IpmiFeaturePkg/GenericElog: Support Standalone MM
>   IpmiFeaturePkg/BmcElog: Support Standalone MM
> 
>  .../BmcAcpiSwChild/BmcAcpiSwChild.c           |   12 +-
>  .../BmcAcpiSwChild/BmcAcpiSwChild.h           |   15 +-
>  .../BmcAcpiSwChild/BmcAcpiSwChild.inf         |    5 +-
>  .../BmcAcpiSwChildStandaloneMm.c              |   31 +
>  .../BmcAcpiSwChildStandaloneMm.inf            |   40 +
>  .../BmcAcpiSwChildTraditionalMm.c             |   31 +
>  .../IpmiFeaturePkg/BmcElog/Smm/BmcElog.c      |   14 +-
>  .../IpmiFeaturePkg/BmcElog/Smm/BmcElog.h      |   15 +-
>  .../BmcElog/Smm/BmcElogStandaloneMm.c         |   28 +
>  .../BmcElog/Smm/BmcElogTraditionalMm.c        |   28 +
>  .../IpmiFeaturePkg/BmcElog/SmmBmcElog.inf     |    6 +-
>  .../BmcElog/StandaloneMmBmcElog.inf           |   44 +
>  .../GenericElog/Smm/GenericElog.c             |   35 +-
>  .../GenericElog/Smm/GenericElog.h             |   28 +-
>  .../GenericElog/Smm/GenericElog.inf           |    5 +-
>  .../GenericElog/Smm/GenericElogStandaloneMm.c |   28 +
>  .../Smm/GenericElogStandaloneMm.inf           |   41 +
>  .../Smm/GenericElogTraditionalMm.c            |   28 +
>  .../IpmiFeaturePkg/Include/IpmiFeature.dsc    |    6 +
>  .../ServerManagementElog.c                    |  235 ++++
>  .../ServerManagementLib.inf                   |    4 +-
>  ...ManagementLib.c => ServerManagementTime.c} | 1175 +++++++----------
>  .../StandaloneMmServerManagementLib.inf       |   29 +
>  23 files changed, 1099 insertions(+), 784 deletions(-)  create mode 100644
> Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcAcpiSwChild/B
> mcAcpiSwChildStandaloneMm.c
>  create mode 100644
> Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcAcpiSwChild/B
> mcAcpiSwChildStandaloneMm.inf
>  create mode 100644
> Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcAcpiSwChild/B
> mcAcpiSwChildTraditionalMm.c
>  create mode 100644
> Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcElog/Smm/Bmc
> ElogStandaloneMm.c
>  create mode 100644
> Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcElog/Smm/Bmc
> ElogTraditionalMm.c
>  create mode 100644
> Features/Intel/OutOfBandManagement/IpmiFeaturePkg/BmcElog/Standalon
> eMmBmcElog.inf
>  create mode 100644
> Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericElog/Smm/
> GenericElogStandaloneMm.c
>  create mode 100644
> Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericElog/Smm/
> GenericElogStandaloneMm.inf
>  create mode 100644
> Features/Intel/OutOfBandManagement/IpmiFeaturePkg/GenericElog/Smm/
> GenericElogTraditionalMm.c
>  create mode 100644
> Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Library/ServerMana
> gementLib/ServerManagementElog.c
>  rename
> Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Library/ServerMana
> gementLib/{ServerManagementLib.c => ServerManagementTime.c} (55%)
> create mode 100644
> Features/Intel/OutOfBandManagement/IpmiFeaturePkg/Library/ServerMana
> gementLib/StandaloneMmServerManagementLib.inf
> 
> --
> 2.29.2.windows.2



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#112790): https://edk2.groups.io/g/devel/message/112790
Mute This Topic: https://groups.io/mt/103284557/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2023-12-21  2:02 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-12-20 17:01 [edk2-devel] [PATCH edk2-platforms 0/4] IpmiFeaturePkg: Support Standalone MM Xu, Wei6
2023-12-20 17:01 ` [edk2-devel] [PATCH edk2-platforms 1/4] IpmiFeaturePkg/ServerManagementLib: " Xu, Wei6
2023-12-20 17:01 ` [edk2-devel] [PATCH edk2-platforms 2/4] IpmiFeaturePkg/BmcAcpiSwChild: " Xu, Wei6
2023-12-20 17:01 ` [edk2-devel] [PATCH edk2-platforms 3/4] IpmiFeaturePkg/GenericElog: " Xu, Wei6
2023-12-20 17:01 ` [edk2-devel] [PATCH edk2-platforms 4/4] IpmiFeaturePkg/BmcElog: " Xu, Wei6
2023-12-21  1:58 ` [edk2-devel] [PATCH edk2-platforms 0/4] IpmiFeaturePkg: " Nate DeSimone
2023-12-21  2:02 ` Nate DeSimone

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox