* [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