From 0d5ed5d6c7320b02339d9bc5b22a52da7e040ed6 Mon Sep 17 00:00:00 2001 From: "Bosco Chen (AMI US Holdings Inc)" Date: Thu, 17 Sep 2026 14:08:16 +0800 Subject: [PATCH] [Cherry-Pick] ManageabilityPkg: Add IPMI protocol Standalone MM support Add an MM_STANDALONE IPMI protocol driver with shared initialization and command handling for Traditional and Standalone MM. Use separate entry points and MmServicesTableLib to install gSmmIpmiProtocolGuid through the MM protocol database in both environments. Add PcdManageabilityStandaloneMmIpmiEnable to control inclusion of the Standalone MM driver and provide the required package library mappings. Allow the KCS transport library to be used by DXE_SMM_DRIVER and MM_STANDALONE modules. Signed-off-by: Bosco Chen (AMI US Holdings Inc) (cherry picked from commit 0b11cdb2fb4949a262905b3c1fc2f8bf77f90e87) --- .../BaseManageabilityTransportKcs.inf | 4 +- ManageabilityPkg/Manageability.dsc.inc | 5 ++ ManageabilityPkg/ManageabilityPkg.dec | 2 + ManageabilityPkg/ManageabilityPkg.dsc | 8 +++ .../Universal/IpmiProtocol/Smm/IpmiProtocol.c | 22 +++---- .../Universal/IpmiProtocol/Smm/IpmiProtocol.h | 13 ++++ .../IpmiProtocol/Smm/IpmiProtocolSmm.inf | 6 +- .../Smm/IpmiProtocolStandaloneMm.c | 29 +++++++++ .../Smm/IpmiProtocolStandaloneMm.inf | 60 +++++++++++++++++++ .../Smm/IpmiProtocolTraditionalMm.c | 29 +++++++++ 10 files changed, 161 insertions(+), 17 deletions(-) create mode 100644 ManageabilityPkg/Universal/IpmiProtocol/Smm/IpmiProtocol.h create mode 100644 ManageabilityPkg/Universal/IpmiProtocol/Smm/IpmiProtocolStandaloneMm.c create mode 100644 ManageabilityPkg/Universal/IpmiProtocol/Smm/IpmiProtocolStandaloneMm.inf create mode 100644 ManageabilityPkg/Universal/IpmiProtocol/Smm/IpmiProtocolTraditionalMm.c 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 (); +}