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 (); +}