diff --git a/ManageabilityPkg/Library/ManageabilityTransportKcsLib/BaseManageabilityTransportKcs.inf b/ManageabilityPkg/Library/ManageabilityTransportKcsLib/BaseManageabilityTransportKcs.inf
index 589a887e4a7..fc481cde57e 100644
--- a/ManageabilityPkg/Library/ManageabilityTransportKcsLib/BaseManageabilityTransportKcs.inf
+++ b/ManageabilityPkg/Library/ManageabilityTransportKcsLib/BaseManageabilityTransportKcs.inf
@@ -2,6 +2,7 @@
# KCS instance of Manageability Transport Library
#
# Copyright (C) 2025 Advanced Micro Devices, Inc. All rights reserved.
+# Copyright (c) Microsoft Corporation. All rights reserved.
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
##
@@ -13,7 +14,7 @@
FILE_GUID = 1D13D1F8-82DC-408D-9979-9E7D7CDFCD04
MODULE_TYPE = BASE
VERSION_STRING = 1.0
- LIBRARY_CLASS = ManageabilityTransportLib|PEIM DXE_DRIVER
+ LIBRARY_CLASS = ManageabilityTransportLib|PEIM DXE_DRIVER DXE_SMM_DRIVER MM_STANDALONE
#
# VALID_ARCHITECTURES = IA32 X64 AARCH64
@@ -42,4 +43,3 @@
[FixedPcd]
gEfiMdePkgTokenSpaceGuid.PcdIpmiKcsIoBaseAddress # Used as default KCS I/O base adddress
gManageabilityPkgTokenSpaceGuid.PcdKcsStatusCheckTimeout # Use the predefined timeout value in micro seconds
-
diff --git a/ManageabilityPkg/Manageability.dsc.inc b/ManageabilityPkg/Manageability.dsc.inc
index 0d820a124db..812c7861a45 100644
--- a/ManageabilityPkg/Manageability.dsc.inc
+++ b/ManageabilityPkg/Manageability.dsc.inc
@@ -3,6 +3,7 @@
#
# Copyright (C) 2023-2026 Advanced Micro Devices, Inc. All rights reserved.
# Copyright (c) 2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+# Copyright (c) Microsoft Corporation. All rights reserved.
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
##
@@ -37,6 +38,10 @@
ManageabilityPkg/Universal/IpmiBlobTransferDxe/IpmiBlobTransferDxe.inf
!endif
+!if gManageabilityPkgTokenSpaceGuid.PcdManageabilityStandaloneMmIpmiEnable == TRUE
+ ManageabilityPkg/Universal/IpmiProtocol/Smm/IpmiProtocolStandaloneMm.inf
+!endif
+
!if gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxeIpmiSmbiosTransferEnable == TRUE
ManageabilityPkg/Universal/IpmiSmbiosTransferDxe/IpmiSmbiosTransferDxe.inf
!endif
diff --git a/ManageabilityPkg/ManageabilityPkg.dec b/ManageabilityPkg/ManageabilityPkg.dec
index e2c20cae01a..36ba8e99ce1 100644
--- a/ManageabilityPkg/ManageabilityPkg.dec
+++ b/ManageabilityPkg/ManageabilityPkg.dec
@@ -11,6 +11,7 @@
# Copyright (C) 2023-2026 Advanced Micro Devices, Inc. All rights reserved.
# Copyright (c) 2024, Ampere Computing LLC. All rights reserved.
# Copyright (c) 2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+# Copyright (c) Microsoft Corporation. All rights reserved.
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
##
@@ -108,6 +109,7 @@
[PcdsFeatureFlag]
gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxeIpmiEnable|FALSE|BOOLEAN|0x10000001
gManageabilityPkgTokenSpaceGuid.PcdManageabilitySmmIpmiEnable|FALSE|BOOLEAN|0x10000002
+ gManageabilityPkgTokenSpaceGuid.PcdManageabilityStandaloneMmIpmiEnable|FALSE|BOOLEAN|0x1000000F
gManageabilityPkgTokenSpaceGuid.PcdManageabilityPeiIpmiEnable|FALSE|BOOLEAN|0x10000003
gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxePldmEnable|FALSE|BOOLEAN|0x10000004
gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxeMctpEnable|FALSE|BOOLEAN|0x10000005
diff --git a/ManageabilityPkg/ManageabilityPkg.dsc b/ManageabilityPkg/ManageabilityPkg.dsc
index d32867f42d6..241319b02e0 100644
--- a/ManageabilityPkg/ManageabilityPkg.dsc
+++ b/ManageabilityPkg/ManageabilityPkg.dsc
@@ -6,6 +6,7 @@
# Copyright (C) 2023-2026 Advanced Micro Devices, Inc. All rights reserved.
# Copyright (c) 2024, Ampere Computing LLC. All rights reserved.
# Copyright (c) 2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+# Copyright (c) Microsoft Corporation. All rights reserved.
# SPDX-License-Identifier: BSD-2-Clause-Patent
#
##
@@ -27,6 +28,7 @@
#
gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxeIpmiEnable |TRUE
gManageabilityPkgTokenSpaceGuid.PcdManageabilitySmmIpmiEnable |TRUE
+ gManageabilityPkgTokenSpaceGuid.PcdManageabilityStandaloneMmIpmiEnable |TRUE
gManageabilityPkgTokenSpaceGuid.PcdManageabilityPeiIpmiEnable |TRUE
gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxePldmEnable |TRUE
gManageabilityPkgTokenSpaceGuid.PcdManageabilityDxeMctpEnable |TRUE
@@ -109,6 +111,12 @@
ReportStatusCodeLib|MdeModulePkg/Library/SmmReportStatusCodeLib/SmmReportStatusCodeLib.inf
MemoryAllocationLib|MdePkg/Library/SmmMemoryAllocationLib/SmmMemoryAllocationLib.inf
+[LibraryClasses.common.MM_STANDALONE]
+ ManageabilityTransportLib|ManageabilityPkg/Library/ManageabilityTransportKcsLib/BaseManageabilityTransportKcs.inf
+ MemoryAllocationLib|StandaloneMmPkg/Library/StandaloneMmMemoryAllocationLib/StandaloneMmMemoryAllocationLib.inf
+ MmServicesTableLib|MdePkg/Library/StandaloneMmServicesTableLib/StandaloneMmServicesTableLib.inf
+ StandaloneMmDriverEntryPoint|MdePkg/Library/StandaloneMmDriverEntryPoint/StandaloneMmDriverEntryPoint.inf
+
[LibraryClasses.common.SEC, LibraryClasses.common.PEI_CORE, LibraryClasses.common.PEIM]
S3BootScriptLib|MdePkg/Library/BaseS3BootScriptLibNull/BaseS3BootScriptLibNull.inf
PcdLib|MdePkg/Library/PeiPcdLib/PeiPcdLib.inf
diff --git a/ManageabilityPkg/Universal/IpmiProtocol/Smm/IpmiProtocol.c b/ManageabilityPkg/Universal/IpmiProtocol/Smm/IpmiProtocol.c
index aaa48b24e2a..ba869d62c69 100644
--- a/ManageabilityPkg/Universal/IpmiProtocol/Smm/IpmiProtocol.c
+++ b/ManageabilityPkg/Universal/IpmiProtocol/Smm/IpmiProtocol.c
@@ -1,22 +1,23 @@
/** @file
- This file provides IPMI SMM Protocol implementation.
+ This file provides the shared IPMI MM Protocol implementation.
Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.
+ Copyright (c) Microsoft Corporation. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
-#include
+#include
#include
#include
#include
#include
#include
-#include
-#include
+#include
#include
#include "IpmiProtocolCommon.h"
+#include "IpmiProtocol.h"
MANAGEABILITY_TRANSPORT_TOKEN *mTransportToken = NULL;
CHAR16 *mTransportName;
@@ -73,19 +74,14 @@ static IPMI_PROTOCOL mIpmiProtocol = {
};
/**
- The entry point of the Ipmi DXE driver.
-
- @param[in] ImageHandle - Handle of this driver image
- @param[in] SystemTable - Table containing standard EFI services
+ Initialize the IPMI protocol for either Traditional MM or Standalone MM.
@retval EFI_SUCCESS - IPMI Protocol is installed successfully.
@retval Otherwise - Other errors.
**/
EFI_STATUS
-EFIAPI
-SmmIpmiEntry (
- IN EFI_HANDLE ImageHandle,
- IN EFI_SYSTEM_TABLE *SystemTable
+IpmiProtocolInitialize (
+ VOID
)
{
EFI_STATUS Status;
@@ -145,7 +141,7 @@ SmmIpmiEntry (
}
Handle = NULL;
- Status = gSmst->SmmInstallProtocolInterface (
+ Status = gMmst->MmInstallProtocolInterface (
&Handle,
&gSmmIpmiProtocolGuid,
EFI_NATIVE_INTERFACE,
diff --git a/ManageabilityPkg/Universal/IpmiProtocol/Smm/IpmiProtocol.h b/ManageabilityPkg/Universal/IpmiProtocol/Smm/IpmiProtocol.h
new file mode 100644
index 00000000000..b89b48c43d8
--- /dev/null
+++ b/ManageabilityPkg/Universal/IpmiProtocol/Smm/IpmiProtocol.h
@@ -0,0 +1,13 @@
+/** @file
+ Shared definitions for the IPMI MM Protocol implementation.
+
+ Copyright (c) Microsoft Corporation. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#pragma once
+
+EFI_STATUS
+IpmiProtocolInitialize (
+ VOID
+ );
diff --git a/ManageabilityPkg/Universal/IpmiProtocol/Smm/IpmiProtocolSmm.inf b/ManageabilityPkg/Universal/IpmiProtocol/Smm/IpmiProtocolSmm.inf
index 8d1ff0c7014..42812a06a55 100644
--- a/ManageabilityPkg/Universal/IpmiProtocol/Smm/IpmiProtocolSmm.inf
+++ b/ManageabilityPkg/Universal/IpmiProtocol/Smm/IpmiProtocolSmm.inf
@@ -3,6 +3,7 @@
#
# Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.
# Copyright (c) 2024, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
+# Copyright (c) Microsoft Corporation. All rights reserved.
# SPDX-License-Identifier: BSD-2-Clause-Patent
##
@@ -22,6 +23,8 @@
[Sources]
IpmiProtocol.c
+ IpmiProtocol.h
+ IpmiProtocolTraditionalMm.c
../Common/IpmiProtocolCommon.c
../Common/IpmiProtocolCommon.h
@@ -35,9 +38,8 @@
DebugLib
ManageabilityTransportHelperLib
ManageabilityTransportLib
- SmmServicesTableLib
+ MmServicesTableLib
UefiDriverEntryPoint
- UefiBootServicesTableLib
[Protocols]
gSmmIpmiProtocolGuid # PROTOCOL ALWAYS_PRODUCED
diff --git a/ManageabilityPkg/Universal/IpmiProtocol/Smm/IpmiProtocolStandaloneMm.c b/ManageabilityPkg/Universal/IpmiProtocol/Smm/IpmiProtocolStandaloneMm.c
new file mode 100644
index 00000000000..c4a37c31db8
--- /dev/null
+++ b/ManageabilityPkg/Universal/IpmiProtocol/Smm/IpmiProtocolStandaloneMm.c
@@ -0,0 +1,29 @@
+/** @file
+ Standalone MM entry point for the IPMI Protocol driver.
+
+ Copyright (c) Microsoft Corporation. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include
+
+#include "IpmiProtocol.h"
+
+/**
+ The entry point of the IPMI Standalone MM driver.
+
+ @param[in] ImageHandle Handle of this driver image.
+ @param[in] MmSystemTable Pointer to the MM system table.
+
+ @retval EFI_SUCCESS The IPMI Protocol was installed successfully.
+ @retval Others An error occurred while initializing the driver.
+**/
+EFI_STATUS
+EFIAPI
+StandaloneMmIpmiEntry (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_MM_SYSTEM_TABLE *MmSystemTable
+ )
+{
+ return IpmiProtocolInitialize ();
+}
diff --git a/ManageabilityPkg/Universal/IpmiProtocol/Smm/IpmiProtocolStandaloneMm.inf b/ManageabilityPkg/Universal/IpmiProtocol/Smm/IpmiProtocolStandaloneMm.inf
new file mode 100644
index 00000000000..3158ad23250
--- /dev/null
+++ b/ManageabilityPkg/Universal/IpmiProtocol/Smm/IpmiProtocolStandaloneMm.inf
@@ -0,0 +1,60 @@
+## @file
+# IPMI Protocol Standalone MM Driver.
+#
+# Copyright (c) Microsoft Corporation. All rights reserved.
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+ INF_VERSION = 0x0001001d
+ BASE_NAME = IpmiStandaloneMm
+ FILE_GUID = EDF71BB4-D08F-4107-AA98-CAC7682BD372
+ MODULE_TYPE = MM_STANDALONE
+ PI_SPECIFICATION_VERSION = 0x00010032
+ VERSION_STRING = 1.0
+ ENTRY_POINT = StandaloneMmIpmiEntry
+
+#
+# VALID_ARCHITECTURES = X64 AARCH64
+#
+
+[Sources]
+ IpmiProtocolStandaloneMm.c
+ IpmiProtocol.c
+ IpmiProtocol.h
+ ../Common/IpmiProtocolCommon.c
+ ../Common/IpmiProtocolCommon.h
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ ManageabilityPkg/ManageabilityPkg.dec
+
+[LibraryClasses]
+ BaseMemoryLib
+ DebugLib
+ ManageabilityTransportHelperLib
+ ManageabilityTransportLib
+ MemoryAllocationLib
+ MmServicesTableLib
+ StandaloneMmDriverEntryPoint
+
+[Protocols]
+ gSmmIpmiProtocolGuid # PROTOCOL ALWAYS_PRODUCED
+
+[Guids]
+ gManageabilityProtocolIpmiGuid
+ gManageabilityTransportKcsGuid
+ gManageabilityTransportSmbusI2cGuid
+ gManageabilityTransportSerialGuid
+
+[FixedPcd]
+ gEfiMdePkgTokenSpaceGuid.PcdIpmiKcsIoBaseAddress
+ gEfiMdePkgTokenSpaceGuid.PcdIpmiSsifSmbusSlaveAddr
+ gEfiMdePkgTokenSpaceGuid.PcdIpmiSerialRequesterAddress
+ gEfiMdePkgTokenSpaceGuid.PcdIpmiSerialResponderAddress
+ gEfiMdePkgTokenSpaceGuid.PcdIpmiSerialRequesterLun
+ gEfiMdePkgTokenSpaceGuid.PcdIpmiSerialResponderLun
+
+[Depex]
+ TRUE
diff --git a/ManageabilityPkg/Universal/IpmiProtocol/Smm/IpmiProtocolTraditionalMm.c b/ManageabilityPkg/Universal/IpmiProtocol/Smm/IpmiProtocolTraditionalMm.c
new file mode 100644
index 00000000000..e980cb70a06
--- /dev/null
+++ b/ManageabilityPkg/Universal/IpmiProtocol/Smm/IpmiProtocolTraditionalMm.c
@@ -0,0 +1,29 @@
+/** @file
+ Traditional MM entry point for the IPMI Protocol driver.
+
+ Copyright (c) Microsoft Corporation. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include
+
+#include "IpmiProtocol.h"
+
+/**
+ The entry point of the IPMI Traditional MM driver.
+
+ @param[in] ImageHandle Handle of this driver image.
+ @param[in] SystemTable Pointer to the EFI system table.
+
+ @retval EFI_SUCCESS The IPMI Protocol was installed successfully.
+ @retval Others An error occurred while initializing the driver.
+**/
+EFI_STATUS
+EFIAPI
+SmmIpmiEntry (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+ )
+{
+ return IpmiProtocolInitialize ();
+}