.../Library/IpmiCommandLib/IpmiCommandLib.inf | 33 + .../Include/Library/IpmiCommandLib.h | 620 ++++++++++++++++++ .../IpmiCommandLib/IpmiCommandLibNetFnApp.c | 444 +++++++++++++ .../IpmiCommandLibNetFnChassis.c | 199 ++++++ .../IpmiCommandLibNetFnStorage.c | 384 +++++++++++ .../IpmiCommandLibNetFnTransport.c | 156 +++++ 6 files changed, 1836 insertions(+) create mode 100644 Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLib.inf create mode 100644 Features/ManageabilityPkg/Include/Library/IpmiCommandLib.h create mode 100644 Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnApp.c create mode 100644 Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnChassis.c create mode 100644 Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnStorage.c create mode 100644 Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnTransport.c
From: Abner Chang <abner.chang@amd.com>
BZ #: 4444
IpmiCommandLib is cloned from
edk2-platforms/Features/Intel/OutOfBandManagement/
IpmiFeaturePkg/Library/IpmiCommandLib in order to
consolidate edk2 system manageability support in
one place. Function header are added to the source
files and header files. Uncustify is applied to C
files and no functionalities are changed in this patch.
We will still keep the one under IpmiFeaturePkg/Library/
IpmiCommandLib until the reference to this instance are
removed from platforms.
Signed-off-by: Abner Chang <abner.chang@amd.com>
Cc: Isaac Oram <isaac.w.oram@intel.com>
Cc: Abdul Lateef Attar <abdattar@amd.com>
Cc: Nickle Wang <nicklew@nvidia.com>
Cc: Tinh Nguyen <tinhnguyen@os.amperecomputing.com>
---
.../Library/IpmiCommandLib/IpmiCommandLib.inf | 33 +
.../Include/Library/IpmiCommandLib.h | 620 ++++++++++++++++++
.../IpmiCommandLib/IpmiCommandLibNetFnApp.c | 444 +++++++++++++
.../IpmiCommandLibNetFnChassis.c | 199 ++++++
.../IpmiCommandLibNetFnStorage.c | 384 +++++++++++
.../IpmiCommandLibNetFnTransport.c | 156 +++++
6 files changed, 1836 insertions(+)
create mode 100644 Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLib.inf
create mode 100644 Features/ManageabilityPkg/Include/Library/IpmiCommandLib.h
create mode 100644 Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnApp.c
create mode 100644 Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnChassis.c
create mode 100644 Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnStorage.c
create mode 100644 Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnTransport.c
diff --git a/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLib.inf b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLib.inf
new file mode 100644
index 0000000000..3dc485cf38
--- /dev/null
+++ b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLib.inf
@@ -0,0 +1,33 @@
+### @file
+# Component description file for IPMI Command Library.
+#
+# Copyright (c) 2018 - 2021, Intel Corporation. All rights reserved.<BR>
+# Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.<BR>
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+#
+###
+
+[Defines]
+ INF_VERSION = 0x00010005
+ BASE_NAME = IpmiCommandLib
+ FILE_GUID = 96FC1989-CB7F-489B-9D3B-68DCA2C2DADC
+ MODULE_TYPE = UEFI_DRIVER
+ VERSION_STRING = 1.0
+ LIBRARY_CLASS = IpmiCommandLib
+
+[sources]
+ IpmiCommandLibNetFnApp.c
+ IpmiCommandLibNetFnTransport.c
+ IpmiCommandLibNetFnChassis.c
+ IpmiCommandLibNetFnStorage.c
+
+[Packages]
+ MdePkg/MdePkg.dec
+ MdeModulePkg/MdeModulePkg.dec
+ ManageabilityPkg/ManageabilityPkg.dec
+
+[LibraryClasses]
+ BaseMemoryLib
+ DebugLib
+ IpmiLib
diff --git a/Features/ManageabilityPkg/Include/Library/IpmiCommandLib.h b/Features/ManageabilityPkg/Include/Library/IpmiCommandLib.h
new file mode 100644
index 0000000000..685f6e2ea2
--- /dev/null
+++ b/Features/ManageabilityPkg/Include/Library/IpmiCommandLib.h
@@ -0,0 +1,620 @@
+/** @file
+ This library abstract how to send/receive IPMI command.
+
+Copyright (c) 2018-2021, Intel Corporation. All rights reserved.<BR>
+Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.<BR>
+
+SPDX-License-Identifier: BSD-2-Clause-Patent
+
+**/
+
+#ifndef IPMI_COMMAND_LIB_H_
+#define IPMI_COMMAND_LIB_H_
+
+#include <Uefi.h>
+#include <IndustryStandard/Ipmi.h>
+
+///
+/// Functions for IPMI NetFnApp commands
+///
+
+/**
+ This function is used to retrieve device ID.
+
+ @param [out] DeviceId The pointer to receive IPMI_GET_DEVICE_ID_RESPONSE.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiGetDeviceId (
+ OUT IPMI_GET_DEVICE_ID_RESPONSE *DeviceId
+ );
+
+/**
+ This function returns device self test results
+
+ @param [out] SelfTestResult The pointer to receive IPMI_SELF_TEST_RESULT_RESPONSE.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiGetSelfTestResult (
+ OUT IPMI_SELF_TEST_RESULT_RESPONSE *SelfTestResult
+ );
+
+/**
+ This function is used for starting and restarting the Watchdog
+ Timer from the initial countdown value that was specified in
+ the Set Watchdog Timer command the watchdog timer.
+
+ @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiResetWatchdogTimer (
+ OUT UINT8 *CompletionCode
+ );
+
+/**
+ This function is used for initializing and configuring
+ the watchdog timer.
+
+ @param [in] SetWatchdogTimer Pointer to receive IPMI_SET_WATCHDOG_TIMER_REQUEST.
+ @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiSetWatchdogTimer (
+ IN IPMI_SET_WATCHDOG_TIMER_REQUEST *SetWatchdogTimer,
+ OUT UINT8 *CompletionCode
+ );
+
+/**
+ This function retrieves the current settings and present
+ countdown of the watchdog timer.
+
+ @param [out] GetWatchdogTimer Pointer to receive IPMI_GET_WATCHDOG_TIMER_RESPONSE.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiGetWatchdogTimer (
+ OUT IPMI_GET_WATCHDOG_TIMER_RESPONSE *GetWatchdogTimer
+ );
+
+/**
+ This function enables message reception into Message Buffers,
+ and any interrupt associated with that buffer getting full.
+
+ @param [in] SetBmcGlobalEnables Pointer receive to IPMI_SET_BMC_GLOBAL_ENABLES_REQUEST.
+ @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiSetBmcGlobalEnables (
+ IN IPMI_SET_BMC_GLOBAL_ENABLES_REQUEST *SetBmcGlobalEnables,
+ OUT UINT8 *CompletionCode
+ );
+
+/**
+ This function retrieves the present setting of the Global Enables
+
+ @param [out] GetBmcGlobalEnables Pointer to receive IPMI_GET_BMC_GLOBAL_ENABLES_RESPONSE.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiGetBmcGlobalEnables (
+ OUT IPMI_GET_BMC_GLOBAL_ENABLES_RESPONSE *GetBmcGlobalEnables
+ );
+
+/**
+ This function is used to flush unread data from the Receive
+ Message Queue or Event Message Buffer
+
+ @param [in] ClearMessageFlagsRequest IPMI_CLEAR_MESSAGE_FLAGS_REQUEST
+ @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiClearMessageFlags (
+ IN IPMI_CLEAR_MESSAGE_FLAGS_REQUEST *ClearMessageFlagsRequest,
+ OUT UINT8 *CompletionCode
+ );
+
+/**
+ This function is used to retrieve the present message available states.
+
+ @param [out] GetMessageFlagsResponse Pointer to receive IPMI_GET_MESSAGE_FLAGS_RESPONSE
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiGetMessageFlags (
+ OUT IPMI_GET_MESSAGE_FLAGS_RESPONSE *GetMessageFlagsResponse
+ );
+
+/**
+ This function is used to get data from the Receive Message Queue.
+
+ @param [out] GetMessageResponse Pointer to receive IPMI_GET_MESSAGE_RESPONSE.
+ @param [in, out] GetMessageResponseSize When in, which is the expected size of
+ response. When out, which is the actual
+ size returned.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiGetMessage (
+ OUT IPMI_GET_MESSAGE_RESPONSE *GetMessageResponse,
+ IN OUT UINT32 *GetMessageResponseSize
+ );
+
+/**
+ This function is used for bridging IPMI messages between channels,
+ and between the system management software (SMS) and a given channel
+
+ @param [in] SendMessageRequest Pointer to IPMI_SEND_MESSAGE_REQUEST.
+ @param [in] SendMessageRequestSize Size of entire SendMessageRequestSize.
+ @param [out] SendMessageResponse Pointer to receive IPMI_SEND_MESSAGE_RESPONSE.
+ @param [in] SendMessageResponseSize When in, which is the expected size of
+ response. When out, which is the actual
+ size returned.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiSendMessage (
+ IN IPMI_SEND_MESSAGE_REQUEST *SendMessageRequest,
+ IN UINT32 SendMessageRequestSize,
+ OUT IPMI_SEND_MESSAGE_RESPONSE *SendMessageResponse,
+ IN OUT UINT32 *SendMessageResponseSize
+ );
+
+/**
+ This function gets the system UUID.
+
+ @param [out] SystemGuid The pointer to retrieve system UUID.
+
+ @retval EFI_SUCCESS UUID is returned.
+ @retval EFI_INVALID_PARAMETER SystemGuid is a NULL pointer.
+ @retval Others See return value of IpmiSubmitCommand () function.
+**/
+EFI_STATUS
+EFIAPI
+IpmiGetSystemUuid (
+ OUT EFI_GUID *SystemGuid
+ );
+
+/**
+ This function gets the channel information.
+
+ @param [in] GetChannelInfoRequest The get channel information request.
+ @param [out] GetChannelInfoResponse The get channel information response.
+ @param [out] GetChannelInfoResponseSize When input, the expected size of response.
+ When output, the exact size of the returned
+ response.
+
+ @retval EFI_SUCCESS Get channel information successfully.
+ @retval EFI_INVALID_PARAMETER One of the given input parameters is invalid.
+ @retval Others See return value of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiGetChannelInfo (
+ IN IPMI_GET_CHANNEL_INFO_REQUEST *GetChannelInfoRequest,
+ OUT IPMI_GET_CHANNEL_INFO_RESPONSE *GetChannelInfoResponse,
+ OUT UINT32 *GetChannelInfoResponseSize
+ );
+
+///
+/// Functions for IPMI NetFnTransport commands.
+///
+
+/**
+ This function sends command to BMC to notify a remote application
+ that a SOL payload is activating on another channel.
+
+ @param [in] SolActivatingRequest Pointer to IPMI_SOL_ACTIVATING_REQUEST.
+ @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiSolActivating (
+ IN IPMI_SOL_ACTIVATING_REQUEST *SolActivatingRequest,
+ OUT UINT8 *CompletionCode
+ );
+
+/**
+ This function is used to set parameters such as the network addressing
+ information required for SOL payload operation.
+
+ @param [in] SetConfigurationParametersRequest Pointer to IPMI_SET_SOL_CONFIGURATION_PARAMETERS_REQUEST.
+ @param [in] SetConfigurationParametersRequestSize Size of entire SetConfigurationParametersRequestSize.
+ @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiSetSolConfigurationParameters (
+ IN IPMI_SET_SOL_CONFIGURATION_PARAMETERS_REQUEST *SetConfigurationParametersRequest,
+ IN UINT32 SetConfigurationParametersRequestSize,
+ OUT UINT8 *CompletionCode
+ );
+
+/**
+ This function is used to retrieve the configuration parameters from the
+ Set SOL Configuration Parameters.
+
+ @param [in] GetConfigurationParametersRequest Pointer to IPMI_SET_SOL_CONFIGURATION_PARAMETERS_REQUEST.
+ @param [out] GetConfigurationParametersResponse Pointer to receive IPMI_GET_SOL_CONFIGURATION_PARAMETERS_RESPONSE.
+ @param [in, out] GetConfigurationParametersResponseSize When in, which is the expected size of
+ response. When out, which is the actual
+ size returned.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiGetSolConfigurationParameters (
+ IN IPMI_GET_SOL_CONFIGURATION_PARAMETERS_REQUEST *GetConfigurationParametersRequest,
+ OUT IPMI_GET_SOL_CONFIGURATION_PARAMETERS_RESPONSE *GetConfigurationParametersResponse,
+ IN OUT UINT32 *GetConfigurationParametersResponseSize
+ );
+
+/**
+ This function gets the LAN configuration parameter.
+
+ @param[in] GetLanConfigurationParametersRequest Request data
+ @param[out] GetLanConfigurationParametersResponse Response data
+ @param[in,out] GetLanConfigurationParametersSize When input, the expected size of response data.
+ When out, the exact size of response data.
+
+ @retval EFI_SUCCESS Lan configuration parameter is returned in the response.
+ @retval EFI_INVALID_PARAMETER One of the given input parameters is invalid.
+ @retval Others Other errors.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiGetLanConfigurationParameters (
+ IN IPMI_GET_LAN_CONFIGURATION_PARAMETERS_REQUEST *GetLanConfigurationParametersRequest,
+ OUT IPMI_GET_LAN_CONFIGURATION_PARAMETERS_RESPONSE *GetLanConfigurationParametersResponse,
+ IN OUT UINT32 *GetLanConfigurationParametersSize
+ );
+
+///
+/// Functions for IPMI NetFnChasis commands
+///
+
+/**
+ This function returns information about which main chassis management functions are
+ present and what addresses are used to access those functions.
+
+ @param [out] GetChassisCapabilitiesResponse Pointer to IPMI_GET_CHASSIS_CAPABILITIES_RESPONSE.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiGetChassisCapabilities (
+ OUT IPMI_GET_CHASSIS_CAPABILITIES_RESPONSE *GetChassisCapabilitiesResponse
+ );
+
+/**
+ This function gets information regarding the high-level status of the system
+ chassis and main power subsystem.
+
+ @param [out] GetChassisStatusResponse Pointer to IPMI_GET_CHASSIS_STATUS_RESPONSE.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiGetChassisStatus (
+ OUT IPMI_GET_CHASSIS_STATUS_RESPONSE *GetChassisStatusResponse
+ );
+
+/**
+ This function sends command to control power up, power down, and reset.
+
+ @param [in] ChassisControlRequest Pointer to IPMI_CHASSIS_CONTROL_REQUEST.
+ @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiChassisControl (
+ IN IPMI_CHASSIS_CONTROL_REQUEST *ChassisControlRequest,
+ OUT UINT8 *CompletionCode
+ );
+
+/**
+ This function is used to configure the power restore policy.
+
+ @param [in] ChassisControlRequest Pointer to IPMI_SET_POWER_RESTORE_POLICY_REQUEST.
+ @param [out] ChassisControlResponse Pointer to IPMI_SET_POWER_RESTORE_POLICY_RESPONSE.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiSetPowerRestorePolicy (
+ IN IPMI_SET_POWER_RESTORE_POLICY_REQUEST *ChassisControlRequest,
+ OUT IPMI_SET_POWER_RESTORE_POLICY_RESPONSE *ChassisControlResponse
+ );
+
+/**
+ This function is used to set parameters that direct the system boot
+ following a system power up or reset.
+
+ @param [in] BootOptionsRequest Pointer to IPMI_SET_BOOT_OPTIONS_REQUEST.
+ @param [out] BootOptionsResponse Pointer to IPMI_SET_BOOT_OPTIONS_RESPONSE.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiSetSystemBootOptions (
+ IN IPMI_SET_BOOT_OPTIONS_REQUEST *BootOptionsRequest,
+ OUT IPMI_SET_BOOT_OPTIONS_RESPONSE *BootOptionsResponse
+ );
+
+/**
+ This function is used to retrieve the boot options set by the
+ Set System Boot Options command.
+
+ @param [in] BootOptionsRequest Pointer to IPMI_GET_BOOT_OPTIONS_REQUEST.
+ @param [out] BootOptionsResponse Pointer to IPMI_GET_BOOT_OPTIONS_RESPONSE.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiGetSystemBootOptions (
+ IN IPMI_GET_BOOT_OPTIONS_REQUEST *BootOptionsRequest,
+ OUT IPMI_GET_BOOT_OPTIONS_RESPONSE *BootOptionsResponse
+ );
+
+///
+/// Functions for IPMI NetFnStorage commands
+///
+
+/**
+ This function is used to retrieve FRU Inventory Area
+
+ @param [in] GetFruInventoryAreaInfoRequest Pointer to IPMI_GET_FRU_INVENTORY_AREA_INFO_REQUEST.
+ @param [out] GetFruInventoryAreaInfoResponse Pointer to IPMI_GET_FRU_INVENTORY_AREA_INFO_RESPONSE.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiGetFruInventoryAreaInfo (
+ IN IPMI_GET_FRU_INVENTORY_AREA_INFO_REQUEST *GetFruInventoryAreaInfoRequest,
+ OUT IPMI_GET_FRU_INVENTORY_AREA_INFO_RESPONSE *GetFruInventoryAreaInfoResponse
+ );
+
+/**
+ This function returns specified data from the FRU Inventory Info area.
+
+ @param [in] ReadFruDataRequest Pointer to IPMI_READ_FRU_DATA_REQUEST.
+ @param [out] ReadFruDataResponse Pointer to IPMI_READ_FRU_DATA_RESPONSE.
+ @param [in, out] ReadFruDataResponseSize Returns the size of ReadFruDataResponse.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiReadFruData (
+ IN IPMI_READ_FRU_DATA_REQUEST *ReadFruDataRequest,
+ OUT IPMI_READ_FRU_DATA_RESPONSE *ReadFruDataResponse,
+ IN OUT UINT32 *ReadFruDataResponseSize
+ );
+
+/**
+ This function writes specified data from the FRU Inventory Info area.
+
+ @param [in] WriteFruDataRequest Pointer to IPMI_WRITE_FRU_DATA_REQUEST.
+ @param [in] WriteFruDataRequestSize Size of WriteFruDataRequest.
+ @param [out] WriteFruDataResponse Pointer to receive IPMI_WRITE_FRU_DATA_RESPONSE.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiWriteFruData (
+ IN IPMI_WRITE_FRU_DATA_REQUEST *WriteFruDataRequest,
+ IN UINT32 WriteFruDataRequestSize,
+ OUT IPMI_WRITE_FRU_DATA_RESPONSE *WriteFruDataResponse
+ );
+
+/**
+ This function returns the number of entries in the SEL
+
+ @param [out] GetSelInfoResponse Pointer to receive IPMI_GET_SEL_INFO_RESPONSE.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiGetSelInfo (
+ OUT IPMI_GET_SEL_INFO_RESPONSE *GetSelInfoResponse
+ );
+
+/**
+ This function retrieves entries from the SEL
+
+ @param [in] GetSelEntryRequest Pointer to IPMI_GET_SEL_ENTRY_REQUEST.
+ @param [out] GetSelEntryResponse Pointer to receive IPMI_GET_SEL_ENTRY_RESPONSE.
+ @param [in] GetSelEntryResponseSize Size of entire GetSelEntryResponse.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiGetSelEntry (
+ IN IPMI_GET_SEL_ENTRY_REQUEST *GetSelEntryRequest,
+ OUT IPMI_GET_SEL_ENTRY_RESPONSE *GetSelEntryResponse,
+ IN OUT UINT32 *GetSelEntryResponseSize
+ );
+
+/**
+ This function adds an entry in the SEL
+
+ @param [in] AddSelEntryRequest Pointer to IPMI_ADD_SEL_ENTRY_REQUEST.
+ @param [out] AddSelEntryResponse Pointer to receive IPMI_ADD_SEL_ENTRY_RESPONSE.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiAddSelEntry (
+ IN IPMI_ADD_SEL_ENTRY_REQUEST *AddSelEntryRequest,
+ OUT IPMI_ADD_SEL_ENTRY_RESPONSE *AddSelEntryResponse
+ );
+
+/**
+ This function adds SEL Entry command that allows the record to be incrementally
+ added to the SEL.
+
+ @param [in] PartialAddSelEntryRequest Pointer to IPMI_PARTIAL_ADD_SEL_ENTRY_REQUEST.
+ @param [in] PartialAddSelEntryRequestSize Size of entire PartialAddSelEntryRequest.
+ @param [out] PartialAddSelEntryResponse Pointer to receive IPMI_PARTIAL_ADD_SEL_ENTRY_RESPONSE.
+
+ @retval EFI_STASTUS See return value of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiPartialAddSelEntry (
+ IN IPMI_PARTIAL_ADD_SEL_ENTRY_REQUEST *PartialAddSelEntryRequest,
+ IN UINT32 PartialAddSelEntryRequestSize,
+ OUT IPMI_PARTIAL_ADD_SEL_ENTRY_RESPONSE *PartialAddSelEntryResponse
+ );
+
+/**
+ This function erases all contents of the System Event Log.
+
+ @param [in] ClearSelRequest Pointer to IPMI_CLEAR_SEL_REQUEST.
+ @param [out] ClearSelResponse Pointer to receive IPMI_CLEAR_SEL_RESPONSE.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiClearSel (
+ IN IPMI_CLEAR_SEL_REQUEST *ClearSelRequest,
+ OUT IPMI_CLEAR_SEL_RESPONSE *ClearSelResponse
+ );
+
+/**
+ This function returns the time from the SEL Device.
+
+ @param [out] GetSelTimeResponse Pointer to IPMI_GET_SEL_TIME_RESPONSE.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiGetSelTime (
+ OUT IPMI_GET_SEL_TIME_RESPONSE *GetSelTimeResponse
+ );
+
+/**
+ This function set the time in the SEL Device.
+
+ @param [in] SetSelTimeRequest Pointer to IPMI_SET_SEL_TIME_REQUEST.
+ @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiSetSelTime (
+ IN IPMI_SET_SEL_TIME_REQUEST *SetSelTimeRequest,
+ OUT UINT8 *CompletionCode
+ );
+
+/**
+ This function returns the SDR command version for the SDR Repository.
+
+ @param [out] ClearSelResponse Pointer to receive IPMI_GET_SDR_REPOSITORY_INFO_RESPONSE.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiGetSdrRepositoryInfo (
+ OUT IPMI_GET_SDR_REPOSITORY_INFO_RESPONSE *GetSdrRepositoryInfoResp
+ );
+
+/**
+ This function returns the sensor record specified by Record ID.
+
+ @param [in] GetSdrRequest Pointer to IPMI_GET_SDR_REQUEST.
+ @param [out] GetSdrResponse Pointer to receive IPMI_GET_SDR_RESPONSE.
+ @param [in, out] GetSdrResponseSize Size of entire GetSdrResponse.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiGetSdr (
+ IN IPMI_GET_SDR_REQUEST *GetSdrRequest,
+ OUT IPMI_GET_SDR_RESPONSE *GetSdrResponse,
+ IN OUT UINT32 *GetSdrResponseSize
+ );
+
+#endif // IPMI_COMMAND_LIB_H_
diff --git a/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnApp.c b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnApp.c
new file mode 100644
index 0000000000..30c412e2f4
--- /dev/null
+++ b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnApp.c
@@ -0,0 +1,444 @@
+/** @file
+ IPMI Command - NetFnApp.
+
+ Copyright (c) 2018 - 2021, Intel Corporation. All rights reserved.<BR>
+ Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.<BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <PiPei.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/DebugLib.h>
+#include <Library/IpmiLib.h>
+
+#include <IndustryStandard/Ipmi.h>
+
+/**
+ This function is used to retrieve device ID.
+
+ @param [out] DeviceId The pointer to receive IPMI_GET_DEVICE_ID_RESPONSE.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiGetDeviceId (
+ OUT IPMI_GET_DEVICE_ID_RESPONSE *DeviceId
+ )
+{
+ EFI_STATUS Status;
+ UINT32 DataSize;
+
+ DataSize = sizeof (*DeviceId);
+ Status = IpmiSubmitCommand (
+ IPMI_NETFN_APP,
+ IPMI_APP_GET_DEVICE_ID,
+ NULL,
+ 0,
+ (VOID *)DeviceId,
+ &DataSize
+ );
+ return Status;
+}
+
+/**
+ This function returns device self test results
+
+ @param [out] SelfTestResult The pointer to receive IPMI_SELF_TEST_RESULT_RESPONSE.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiGetSelfTestResult (
+ OUT IPMI_SELF_TEST_RESULT_RESPONSE *SelfTestResult
+ )
+{
+ EFI_STATUS Status;
+ UINT32 DataSize;
+
+ DataSize = sizeof (*SelfTestResult);
+ Status = IpmiSubmitCommand (
+ IPMI_NETFN_APP,
+ IPMI_APP_GET_SELFTEST_RESULTS,
+ NULL,
+ 0,
+ (VOID *)SelfTestResult,
+ &DataSize
+ );
+ return Status;
+}
+
+/**
+ This function is used for starting and restarting the Watchdog
+ Timer from the initial countdown value that was specified in
+ the Set Watchdog Timer command the watchdog timer
+
+ @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiResetWatchdogTimer (
+ OUT UINT8 *CompletionCode
+ )
+{
+ EFI_STATUS Status;
+ UINT32 DataSize;
+
+ DataSize = sizeof (*CompletionCode);
+ Status = IpmiSubmitCommand (
+ IPMI_NETFN_APP,
+ IPMI_APP_RESET_WATCHDOG_TIMER,
+ NULL,
+ 0,
+ (VOID *)CompletionCode,
+ &DataSize
+ );
+ return Status;
+}
+
+/**
+ This function is used for initializing and configuring
+ the watchdog timer.
+
+ @param [in] SetWatchdogTimer Pointer to receive IPMI_SET_WATCHDOG_TIMER_REQUEST.
+ @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiSetWatchdogTimer (
+ IN IPMI_SET_WATCHDOG_TIMER_REQUEST *SetWatchdogTimer,
+ OUT UINT8 *CompletionCode
+ )
+{
+ EFI_STATUS Status;
+ UINT32 DataSize;
+
+ DataSize = sizeof (*CompletionCode);
+ Status = IpmiSubmitCommand (
+ IPMI_NETFN_APP,
+ IPMI_APP_SET_WATCHDOG_TIMER,
+ (VOID *)SetWatchdogTimer,
+ sizeof (*SetWatchdogTimer),
+ (VOID *)CompletionCode,
+ &DataSize
+ );
+ return Status;
+}
+
+/**
+ This function retrieves the current settings and present
+ countdown of the watchdog timer.
+
+ @param [out] GetWatchdogTimer Pointer to receive IPMI_GET_WATCHDOG_TIMER_RESPONSE.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiGetWatchdogTimer (
+ OUT IPMI_GET_WATCHDOG_TIMER_RESPONSE *GetWatchdogTimer
+ )
+{
+ EFI_STATUS Status;
+ UINT32 DataSize;
+
+ DataSize = sizeof (*GetWatchdogTimer);
+ Status = IpmiSubmitCommand (
+ IPMI_NETFN_APP,
+ IPMI_APP_GET_WATCHDOG_TIMER,
+ NULL,
+ 0,
+ (VOID *)GetWatchdogTimer,
+ &DataSize
+ );
+ return Status;
+}
+
+/**
+ This function enables message reception into Message Buffers,
+ and any interrupt associated with that buffer getting full.
+
+ @param [in] SetBmcGlobalEnables Pointer receive to IPMI_SET_BMC_GLOBAL_ENABLES_REQUEST.
+ @param [out] CompletionCode IPMI completetion code refer to Ipmi.h.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiSetBmcGlobalEnables (
+ IN IPMI_SET_BMC_GLOBAL_ENABLES_REQUEST *SetBmcGlobalEnables,
+ OUT UINT8 *CompletionCode
+ )
+{
+ EFI_STATUS Status;
+ UINT32 DataSize;
+
+ DataSize = sizeof (*CompletionCode);
+ Status = IpmiSubmitCommand (
+ IPMI_NETFN_APP,
+ IPMI_APP_SET_BMC_GLOBAL_ENABLES,
+ (VOID *)SetBmcGlobalEnables,
+ sizeof (*SetBmcGlobalEnables),
+ (VOID *)CompletionCode,
+ &DataSize
+ );
+ return Status;
+}
+
+/**
+ This function retrieves the present setting of the Global Enables
+
+ @param [out] GetBmcGlobalEnables Pointer to receive IPMI_GET_BMC_GLOBAL_ENABLES_RESPONSE.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiGetBmcGlobalEnables (
+ OUT IPMI_GET_BMC_GLOBAL_ENABLES_RESPONSE *GetBmcGlobalEnables
+ )
+{
+ EFI_STATUS Status;
+ UINT32 DataSize;
+
+ DataSize = sizeof (*GetBmcGlobalEnables);
+ Status = IpmiSubmitCommand (
+ IPMI_NETFN_APP,
+ IPMI_APP_GET_BMC_GLOBAL_ENABLES,
+ NULL,
+ 0,
+ (VOID *)GetBmcGlobalEnables,
+ &DataSize
+ );
+ return Status;
+}
+
+/**
+ This function is used to flush unread data from the Receive
+ Message Queue or Event Message Buffer
+
+ @param [in] ClearMessageFlagsRequest IPMI_CLEAR_MESSAGE_FLAGS_REQUEST
+ @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiClearMessageFlags (
+ IN IPMI_CLEAR_MESSAGE_FLAGS_REQUEST *ClearMessageFlagsRequest,
+ OUT UINT8 *CompletionCode
+ )
+{
+ EFI_STATUS Status;
+ UINT32 DataSize;
+
+ DataSize = sizeof (*CompletionCode);
+ Status = IpmiSubmitCommand (
+ IPMI_NETFN_APP,
+ IPMI_APP_CLEAR_MESSAGE_FLAGS,
+ (VOID *)ClearMessageFlagsRequest,
+ sizeof (*ClearMessageFlagsRequest),
+ (VOID *)CompletionCode,
+ &DataSize
+ );
+ return Status;
+}
+
+/**
+ This function is used to retrieve the present message available states.
+
+ @param [out] GetMessageFlagsResponse Pointer to receive IPMI_GET_MESSAGE_FLAGS_RESPONSE
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiGetMessageFlags (
+ OUT IPMI_GET_MESSAGE_FLAGS_RESPONSE *GetMessageFlagsResponse
+ )
+{
+ EFI_STATUS Status;
+ UINT32 DataSize;
+
+ DataSize = sizeof (*GetMessageFlagsResponse);
+ Status = IpmiSubmitCommand (
+ IPMI_NETFN_APP,
+ IPMI_APP_GET_MESSAGE_FLAGS,
+ NULL,
+ 0,
+ (VOID *)GetMessageFlagsResponse,
+ &DataSize
+ );
+ return Status;
+}
+
+/**
+ This function is used to get data from the Receive Message Queue.
+
+ @param [out] GetMessageResponse Pointer to receive IPMI_GET_MESSAGE_RESPONSE.
+ @param [in, out] GetMessageResponseSize When in, which is the expected size of
+ response. When out, which is the actual
+ size returned.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiGetMessage (
+ OUT IPMI_GET_MESSAGE_RESPONSE *GetMessageResponse,
+ IN OUT UINT32 *GetMessageResponseSize
+ )
+{
+ EFI_STATUS Status;
+
+ Status = IpmiSubmitCommand (
+ IPMI_NETFN_APP,
+ IPMI_APP_GET_MESSAGE,
+ NULL,
+ 0,
+ (VOID *)GetMessageResponse,
+ GetMessageResponseSize
+ );
+ return Status;
+}
+
+/**
+ This function is used for bridging IPMI messages between channels,
+ and between the system management software (SMS) and a given channel
+
+ @param [in] SendMessageRequest Pointer to IPMI_SEND_MESSAGE_REQUEST.
+ @param [in] SendMessageRequestSize Size of entire SendMessageRequestSize.
+ @param [out] SendMessageResponse Pointer to receive IPMI_SEND_MESSAGE_RESPONSE.
+ @param [in] SendMessageResponseSize When in, which is the expected size of
+ response. When out, which is the actual
+ size returned.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiSendMessage (
+ IN IPMI_SEND_MESSAGE_REQUEST *SendMessageRequest,
+ IN UINT32 SendMessageRequestSize,
+ OUT IPMI_SEND_MESSAGE_RESPONSE *SendMessageResponse,
+ IN OUT UINT32 *SendMessageResponseSize
+ )
+{
+ EFI_STATUS Status;
+
+ Status = IpmiSubmitCommand (
+ IPMI_NETFN_APP,
+ IPMI_APP_SEND_MESSAGE,
+ (VOID *)SendMessageRequest,
+ SendMessageRequestSize,
+ (VOID *)SendMessageResponse,
+ SendMessageResponseSize
+ );
+ return Status;
+}
+
+/**
+ This function gets the system UUID.
+
+ @param[out] SystemGuid The pointer to retrieve system UUID.
+
+ @retval EFI_SUCCESS UUID is returned.
+ @retval EFI_INVALID_PARAMETER SystemGuid is a NULL pointer.
+ @retval Others See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiGetSystemUuid (
+ OUT EFI_GUID *SystemGuid
+ )
+{
+ EFI_STATUS Status;
+ UINT32 RequestSize;
+ UINT32 ResponseSize;
+ IPMI_GET_SYSTEM_UUID_RESPONSE GetSystemUuidResponse;
+
+ if (SystemGuid == NULL) {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ RequestSize = 0;
+ ResponseSize = sizeof (IPMI_GET_SYSTEM_UUID_RESPONSE);
+ Status = IpmiSubmitCommand (
+ IPMI_NETFN_APP,
+ IPMI_APP_GET_SYSTEM_GUID,
+ (VOID *)NULL,
+ RequestSize,
+ (VOID *)&GetSystemUuidResponse,
+ &ResponseSize
+ );
+ if (!EFI_ERROR (Status) && (GetSystemUuidResponse.CompletionCode == IPMI_COMP_CODE_NORMAL)) {
+ CopyMem (
+ (VOID *)SystemGuid,
+ (VOID *)&GetSystemUuidResponse.SystemUuid,
+ sizeof (EFI_GUID)
+ );
+ }
+
+ return Status;
+}
+
+/**
+ This function gets the channel information.
+
+ @param[in] GetChannelInfoRequest The get channel information request.
+ @param[out] GetChannelInfoResponse The get channel information response.
+ @param[out] GetChannelInfoResponseSize When input, the expected size of response.
+ When output, the exact size of the returned
+ response.
+
+ @retval EFI_SUCCESS Get channel information successfully.
+ @retval EFI_INVALID_PARAMETER One of the given input parameters is invalid.
+ @retval Others See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiGetChannelInfo (
+ IN IPMI_GET_CHANNEL_INFO_REQUEST *GetChannelInfoRequest,
+ OUT IPMI_GET_CHANNEL_INFO_RESPONSE *GetChannelInfoResponse,
+ OUT UINT32 *GetChannelInfoResponseSize
+ )
+{
+ EFI_STATUS Status;
+
+ if ((GetChannelInfoRequest == NULL) ||
+ (GetChannelInfoResponse == NULL) ||
+ (GetChannelInfoResponseSize == NULL))
+ {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ *GetChannelInfoResponseSize = sizeof (IPMI_GET_CHANNEL_INFO_RESPONSE);
+ Status = IpmiSubmitCommand (
+ IPMI_NETFN_APP,
+ IPMI_APP_GET_CHANNEL_INFO,
+ (UINT8 *)GetChannelInfoRequest,
+ sizeof (IPMI_GET_CHANNEL_INFO_REQUEST),
+ (UINT8 *)GetChannelInfoResponse,
+ GetChannelInfoResponseSize
+ );
+ return Status;
+}
diff --git a/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnChassis.c b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnChassis.c
new file mode 100644
index 0000000000..12fd997b11
--- /dev/null
+++ b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnChassis.c
@@ -0,0 +1,199 @@
+/** @file
+ IPMI Command - NetFnChassis.
+
+ Copyright (c) 2018 - 2021, Intel Corporation. All rights reserved.<BR>
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <PiPei.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/DebugLib.h>
+#include <Library/IpmiLib.h>
+
+#include <IndustryStandard/Ipmi.h>
+
+/**
+ This function returns information about which main chassis management functions are
+ present and what addresses are used to access those functions.
+
+ @param [out] GetChassisCapabilitiesResponse Pointer to IPMI_GET_CHASSIS_CAPABILITIES_RESPONSE.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiGetChassisCapabilities (
+ OUT IPMI_GET_CHASSIS_CAPABILITIES_RESPONSE *GetChassisCapabilitiesResponse
+ )
+{
+ EFI_STATUS Status;
+ UINT32 DataSize;
+
+ DataSize = sizeof (*GetChassisCapabilitiesResponse);
+ Status = IpmiSubmitCommand (
+ IPMI_NETFN_CHASSIS,
+ IPMI_CHASSIS_GET_CAPABILITIES,
+ NULL,
+ 0,
+ (VOID *)GetChassisCapabilitiesResponse,
+ &DataSize
+ );
+ return Status;
+}
+
+/**
+ This function gets information regarding the high-level status of the system
+ chassis and main power subsystem.
+
+ @param [out] GetChassisStatusResponse Pointer to IPMI_GET_CHASSIS_STATUS_RESPONSE.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiGetChassisStatus (
+ OUT IPMI_GET_CHASSIS_STATUS_RESPONSE *GetChassisStatusResponse
+ )
+{
+ EFI_STATUS Status;
+ UINT32 DataSize;
+
+ DataSize = sizeof (*GetChassisStatusResponse);
+ Status = IpmiSubmitCommand (
+ IPMI_NETFN_CHASSIS,
+ IPMI_CHASSIS_GET_STATUS,
+ NULL,
+ 0,
+ (VOID *)GetChassisStatusResponse,
+ &DataSize
+ );
+ return Status;
+}
+
+/**
+ This function sends command to control power up, power down, and reset.
+
+ @param [in] ChassisControlRequest Pointer to IPMI_CHASSIS_CONTROL_REQUEST.
+ @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiChassisControl (
+ IN IPMI_CHASSIS_CONTROL_REQUEST *ChassisControlRequest,
+ OUT UINT8 *CompletionCode
+ )
+{
+ EFI_STATUS Status;
+ UINT32 DataSize;
+
+ DataSize = sizeof (*CompletionCode);
+ Status = IpmiSubmitCommand (
+ IPMI_NETFN_CHASSIS,
+ IPMI_CHASSIS_CONTROL,
+ (VOID *)ChassisControlRequest,
+ sizeof (*ChassisControlRequest),
+ (VOID *)CompletionCode,
+ &DataSize
+ );
+ return Status;
+}
+
+/**
+ This function is used to configure the power restore policy.
+
+ @param [in] ChassisControlRequest Pointer to IPMI_SET_POWER_RESTORE_POLICY_REQUEST.
+ @param [out] ChassisControlResponse Pointer to IPMI_SET_POWER_RESTORE_POLICY_RESPONSE.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiSetPowerRestorePolicy (
+ IN IPMI_SET_POWER_RESTORE_POLICY_REQUEST *ChassisControlRequest,
+ OUT IPMI_SET_POWER_RESTORE_POLICY_RESPONSE *ChassisControlResponse
+ )
+{
+ EFI_STATUS Status;
+ UINT32 DataSize;
+
+ DataSize = sizeof (*ChassisControlResponse);
+ Status = IpmiSubmitCommand (
+ IPMI_NETFN_CHASSIS,
+ IPMI_CHASSIS_SET_POWER_RESTORE_POLICY,
+ (VOID *)ChassisControlRequest,
+ sizeof (*ChassisControlRequest),
+ (VOID *)ChassisControlResponse,
+ &DataSize
+ );
+ return Status;
+}
+
+/**
+ This function is used to set parameters that direct the system boot
+ following a system power up or reset.
+
+ @param [in] BootOptionsRequest Pointer to IPMI_SET_BOOT_OPTIONS_REQUEST.
+ @param [out] BootOptionsResponse Pointer to IPMI_SET_BOOT_OPTIONS_RESPONSE.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiSetSystemBootOptions (
+ IN IPMI_SET_BOOT_OPTIONS_REQUEST *BootOptionsRequest,
+ OUT IPMI_SET_BOOT_OPTIONS_RESPONSE *BootOptionsResponse
+ )
+{
+ EFI_STATUS Status;
+ UINT32 DataSize;
+
+ DataSize = sizeof (*BootOptionsResponse);
+ Status = IpmiSubmitCommand (
+ IPMI_NETFN_CHASSIS,
+ IPMI_CHASSIS_SET_SYSTEM_BOOT_OPTIONS,
+ (VOID *)BootOptionsRequest,
+ sizeof (*BootOptionsRequest),
+ (VOID *)BootOptionsResponse,
+ &DataSize
+ );
+ return Status;
+}
+
+/**
+ This function is used to retrieve the boot options set by the
+ Set System Boot Options command.
+
+ @param [in] BootOptionsRequest Pointer to IPMI_GET_BOOT_OPTIONS_REQUEST.
+ @param [out] BootOptionsResponse Pointer to IPMI_GET_BOOT_OPTIONS_RESPONSE.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiGetSystemBootOptions (
+ IN IPMI_GET_BOOT_OPTIONS_REQUEST *BootOptionsRequest,
+ OUT IPMI_GET_BOOT_OPTIONS_RESPONSE *BootOptionsResponse
+ )
+{
+ EFI_STATUS Status;
+ UINT32 DataSize;
+
+ DataSize = sizeof (*BootOptionsResponse);
+ Status = IpmiSubmitCommand (
+ IPMI_NETFN_CHASSIS,
+ IPMI_CHASSIS_GET_SYSTEM_BOOT_OPTIONS,
+ (VOID *)BootOptionsRequest,
+ sizeof (*BootOptionsRequest),
+ (VOID *)BootOptionsResponse,
+ &DataSize
+ );
+ return Status;
+}
diff --git a/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnStorage.c b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnStorage.c
new file mode 100644
index 0000000000..2dbb7ac9ff
--- /dev/null
+++ b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnStorage.c
@@ -0,0 +1,384 @@
+/** @file
+ IPMI Command - NetFnStorage.
+
+ Copyright (c) 2018 - 2021, Intel Corporation. All rights reserved.<BR>
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <PiPei.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/DebugLib.h>
+#include <Library/IpmiLib.h>
+
+#include <IndustryStandard/Ipmi.h>
+
+/**
+ This function is used to retrieve FRU Inventory Area
+
+ @param [in] GetFruInventoryAreaInfoRequest Pointer to IPMI_GET_FRU_INVENTORY_AREA_INFO_REQUEST.
+ @param [out] GetFruInventoryAreaInfoResponse Pointer to IPMI_GET_FRU_INVENTORY_AREA_INFO_RESPONSE.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiGetFruInventoryAreaInfo (
+ IN IPMI_GET_FRU_INVENTORY_AREA_INFO_REQUEST *GetFruInventoryAreaInfoRequest,
+ OUT IPMI_GET_FRU_INVENTORY_AREA_INFO_RESPONSE *GetFruInventoryAreaInfoResponse
+ )
+{
+ EFI_STATUS Status;
+ UINT32 DataSize;
+
+ DataSize = sizeof (*GetFruInventoryAreaInfoResponse);
+ Status = IpmiSubmitCommand (
+ IPMI_NETFN_STORAGE,
+ IPMI_STORAGE_GET_FRU_INVENTORY_AREAINFO,
+ (VOID *)GetFruInventoryAreaInfoRequest,
+ sizeof (*GetFruInventoryAreaInfoRequest),
+ (VOID *)GetFruInventoryAreaInfoResponse,
+ &DataSize
+ );
+ return Status;
+}
+
+/**
+ This function returns specified data from the FRU Inventory Info area.
+
+ @param [in] ReadFruDataRequest Pointer to IPMI_READ_FRU_DATA_REQUEST.
+ @param [in] ReadFruDataResponse Pointer to IPMI_READ_FRU_DATA_RESPONSE.
+ @param [in, out] ReadFruDataResponseSize Returns the size of ReadFruDataResponse.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiReadFruData (
+ IN IPMI_READ_FRU_DATA_REQUEST *ReadFruDataRequest,
+ OUT IPMI_READ_FRU_DATA_RESPONSE *ReadFruDataResponse,
+ IN OUT UINT32 *ReadFruDataResponseSize
+ )
+{
+ EFI_STATUS Status;
+
+ Status = IpmiSubmitCommand (
+ IPMI_NETFN_STORAGE,
+ IPMI_STORAGE_READ_FRU_DATA,
+ (VOID *)ReadFruDataRequest,
+ sizeof (*ReadFruDataRequest),
+ (VOID *)ReadFruDataResponse,
+ ReadFruDataResponseSize
+ );
+ return Status;
+}
+
+/**
+ This function writes specified data from the FRU Inventory Info area.
+
+ @param [in] WriteFruDataRequest Pointer to IPMI_WRITE_FRU_DATA_REQUEST.
+ @param [in] WriteFruDataRequestSize Size of WriteFruDataRequest.
+ @param [out] WriteFruDataResponse Pointer to receive IPMI_WRITE_FRU_DATA_RESPONSE.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiWriteFruData (
+ IN IPMI_WRITE_FRU_DATA_REQUEST *WriteFruDataRequest,
+ IN UINT32 WriteFruDataRequestSize,
+ OUT IPMI_WRITE_FRU_DATA_RESPONSE *WriteFruDataResponse
+ )
+{
+ EFI_STATUS Status;
+ UINT32 DataSize;
+
+ DataSize = sizeof (*WriteFruDataResponse);
+ Status = IpmiSubmitCommand (
+ IPMI_NETFN_STORAGE,
+ IPMI_STORAGE_WRITE_FRU_DATA,
+ (VOID *)WriteFruDataRequest,
+ WriteFruDataRequestSize,
+ (VOID *)WriteFruDataResponse,
+ &DataSize
+ );
+ return Status;
+}
+
+/**
+ This function returns the number of entries in the SEL
+
+ @param [out] GetSelInfoResponse Pointer to receive IPMI_GET_SEL_INFO_RESPONSE.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiGetSelInfo (
+ OUT IPMI_GET_SEL_INFO_RESPONSE *GetSelInfoResponse
+ )
+{
+ EFI_STATUS Status;
+ UINT32 DataSize;
+
+ DataSize = sizeof (*GetSelInfoResponse);
+ Status = IpmiSubmitCommand (
+ IPMI_NETFN_STORAGE,
+ IPMI_STORAGE_GET_SEL_INFO,
+ NULL,
+ 0,
+ (VOID *)GetSelInfoResponse,
+ &DataSize
+ );
+ return Status;
+}
+
+/**
+ This function retrieves entries from the SEL
+
+ @param [in] GetSelEntryRequest Pointer to IPMI_GET_SEL_ENTRY_REQUEST.
+ @param [out] GetSelEntryResponse Pointer to receive IPMI_GET_SEL_ENTRY_RESPONSE.
+ @param [in, out] GetSelEntryResponseSize Size of entire GetSelEntryResponse.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiGetSelEntry (
+ IN IPMI_GET_SEL_ENTRY_REQUEST *GetSelEntryRequest,
+ OUT IPMI_GET_SEL_ENTRY_RESPONSE *GetSelEntryResponse,
+ IN OUT UINT32 *GetSelEntryResponseSize
+ )
+{
+ EFI_STATUS Status;
+
+ Status = IpmiSubmitCommand (
+ IPMI_NETFN_STORAGE,
+ IPMI_STORAGE_GET_SEL_ENTRY,
+ (VOID *)GetSelEntryRequest,
+ sizeof (*GetSelEntryRequest),
+ (VOID *)GetSelEntryResponse,
+ GetSelEntryResponseSize
+ );
+ return Status;
+}
+
+/**
+ This function adds an entry in the SEL
+
+ @param [in] AddSelEntryRequest Pointer to IPMI_ADD_SEL_ENTRY_REQUEST.
+ @param [out] AddSelEntryResponse Pointer to receive IPMI_ADD_SEL_ENTRY_RESPONSE.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiAddSelEntry (
+ IN IPMI_ADD_SEL_ENTRY_REQUEST *AddSelEntryRequest,
+ OUT IPMI_ADD_SEL_ENTRY_RESPONSE *AddSelEntryResponse
+ )
+{
+ EFI_STATUS Status;
+ UINT32 DataSize;
+
+ DataSize = sizeof (*AddSelEntryResponse);
+ Status = IpmiSubmitCommand (
+ IPMI_NETFN_STORAGE,
+ IPMI_STORAGE_ADD_SEL_ENTRY,
+ (VOID *)AddSelEntryRequest,
+ sizeof (*AddSelEntryRequest),
+ (VOID *)AddSelEntryResponse,
+ &DataSize
+ );
+ return Status;
+}
+
+/**
+ This function adds SEL Entry command that allows the record to be incrementally
+ added to the SEL.
+
+ @param [in] PartialAddSelEntryRequest Pointer to IPMI_PARTIAL_ADD_SEL_ENTRY_REQUEST.
+ @param [in] PartialAddSelEntryRequestSize Size of entire PartialAddSelEntryRequest.
+ @param [out] PartialAddSelEntryResponse Pointer to receive IPMI_PARTIAL_ADD_SEL_ENTRY_RESPONSE.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiPartialAddSelEntry (
+ IN IPMI_PARTIAL_ADD_SEL_ENTRY_REQUEST *PartialAddSelEntryRequest,
+ IN UINT32 PartialAddSelEntryRequestSize,
+ OUT IPMI_PARTIAL_ADD_SEL_ENTRY_RESPONSE *PartialAddSelEntryResponse
+ )
+{
+ EFI_STATUS Status;
+ UINT32 DataSize;
+
+ DataSize = sizeof (*PartialAddSelEntryResponse);
+ Status = IpmiSubmitCommand (
+ IPMI_NETFN_STORAGE,
+ IPMI_STORAGE_PARTIAL_ADD_SEL_ENTRY,
+ (VOID *)PartialAddSelEntryRequest,
+ PartialAddSelEntryRequestSize,
+ (VOID *)PartialAddSelEntryResponse,
+ &DataSize
+ );
+ return Status;
+}
+
+/**
+ This function erases all contents of the System Event Log.
+
+ @param [in] ClearSelRequest Pointer to IPMI_CLEAR_SEL_REQUEST.
+ @param [out] ClearSelResponse Pointer to receive IPMI_CLEAR_SEL_RESPONSE.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiClearSel (
+ IN IPMI_CLEAR_SEL_REQUEST *ClearSelRequest,
+ OUT IPMI_CLEAR_SEL_RESPONSE *ClearSelResponse
+ )
+{
+ EFI_STATUS Status;
+ UINT32 DataSize;
+
+ DataSize = sizeof (*ClearSelResponse);
+ Status = IpmiSubmitCommand (
+ IPMI_NETFN_STORAGE,
+ IPMI_STORAGE_CLEAR_SEL,
+ (VOID *)ClearSelRequest,
+ sizeof (*ClearSelRequest),
+ (VOID *)ClearSelResponse,
+ &DataSize
+ );
+ return Status;
+}
+
+/**
+ This function returns the time from the SEL Device.
+
+ @param [out] GetSelTimeResponse Pointer to IPMI_GET_SEL_TIME_RESPONSE.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiGetSelTime (
+ OUT IPMI_GET_SEL_TIME_RESPONSE *GetSelTimeResponse
+ )
+{
+ EFI_STATUS Status;
+ UINT32 DataSize;
+
+ DataSize = sizeof (*GetSelTimeResponse);
+ Status = IpmiSubmitCommand (
+ IPMI_NETFN_STORAGE,
+ IPMI_STORAGE_GET_SEL_TIME,
+ NULL,
+ 0,
+ (VOID *)GetSelTimeResponse,
+ &DataSize
+ );
+ return Status;
+}
+
+/**
+ This function set the time in the SEL Device.
+
+ @param [in] SetSelTimeRequest Pointer to IPMI_SET_SEL_TIME_REQUEST.
+ @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiSetSelTime (
+ IN IPMI_SET_SEL_TIME_REQUEST *SetSelTimeRequest,
+ OUT UINT8 *CompletionCode
+ )
+{
+ EFI_STATUS Status;
+ UINT32 DataSize;
+
+ DataSize = sizeof (*CompletionCode);
+ Status = IpmiSubmitCommand (
+ IPMI_NETFN_STORAGE,
+ IPMI_STORAGE_SET_SEL_TIME,
+ (VOID *)SetSelTimeRequest,
+ sizeof (*SetSelTimeRequest),
+ (VOID *)CompletionCode,
+ &DataSize
+ );
+ return Status;
+}
+
+/**
+ This function returns the SDR command version for the SDR Repository
+
+ @param [out] ClearSelResponse Pointer to receive IPMI_GET_SDR_REPOSITORY_INFO_RESPONSE.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiGetSdrRepositoryInfo (
+ OUT IPMI_GET_SDR_REPOSITORY_INFO_RESPONSE *GetSdrRepositoryInfoResp
+ )
+{
+ EFI_STATUS Status;
+ UINT32 DataSize;
+
+ DataSize = sizeof (*GetSdrRepositoryInfoResp);
+ Status = IpmiSubmitCommand (
+ IPMI_NETFN_STORAGE,
+ IPMI_STORAGE_GET_SDR_REPOSITORY_INFO,
+ NULL,
+ 0,
+ (VOID *)GetSdrRepositoryInfoResp,
+ &DataSize
+ );
+ return Status;
+}
+
+/**
+ This function returns the sensor record specified by Record ID.
+
+ @param [in] GetSdrRequest Pointer to IPMI_GET_SDR_REQUEST.
+ @param [out] GetSdrResponse Pointer to receive IPMI_GET_SDR_RESPONSE.
+ @param [in, out] GetSdrResponseSize Size of entire GetSdrResponse.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiGetSdr (
+ IN IPMI_GET_SDR_REQUEST *GetSdrRequest,
+ OUT IPMI_GET_SDR_RESPONSE *GetSdrResponse,
+ IN OUT UINT32 *GetSdrResponseSize
+ )
+{
+ EFI_STATUS Status;
+
+ Status = IpmiSubmitCommand (
+ IPMI_NETFN_STORAGE,
+ IPMI_STORAGE_GET_SDR,
+ (VOID *)GetSdrRequest,
+ sizeof (*GetSdrRequest),
+ (VOID *)GetSdrResponse,
+ GetSdrResponseSize
+ );
+ return Status;
+}
diff --git a/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnTransport.c b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnTransport.c
new file mode 100644
index 0000000000..a93f7406f1
--- /dev/null
+++ b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnTransport.c
@@ -0,0 +1,156 @@
+/** @file
+ IPMI Command - NetFnTransport.
+
+ Copyright (c) 2018 - 2021, Intel Corporation. All rights reserved.<BR>
+ Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.<BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <PiPei.h>
+#include <Library/BaseMemoryLib.h>
+#include <Library/DebugLib.h>
+#include <Library/IpmiLib.h>
+
+#include <IndustryStandard/Ipmi.h>
+
+/**
+ This function sends command to BMC to notify a remote application
+ that a SOL payload is activating on another channel.
+
+ @param [in] SolActivatingRequest The get channel information request.
+ @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiSolActivating (
+ IN IPMI_SOL_ACTIVATING_REQUEST *SolActivatingRequest,
+ OUT UINT8 *CompletionCode
+ )
+{
+ EFI_STATUS Status;
+ UINT32 DataSize;
+
+ DataSize = sizeof (*CompletionCode);
+ Status = IpmiSubmitCommand (
+ IPMI_NETFN_TRANSPORT,
+ IPMI_TRANSPORT_SOL_ACTIVATING,
+ (VOID *)SolActivatingRequest,
+ sizeof (*SolActivatingRequest),
+ (VOID *)CompletionCode,
+ &DataSize
+ );
+ return Status;
+}
+
+/**
+ This function is used to set parameters such as the network addressing
+ information required for SOL payload operation.
+
+ @param [in] SetConfigurationParametersRequest Pointer to IPMI_SET_SOL_CONFIGURATION_PARAMETERS_REQUEST.
+ @param [in] SetConfigurationParametersRequestSize Size of entire SetConfigurationParametersRequestSize.
+ @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiSetSolConfigurationParameters (
+ IN IPMI_SET_SOL_CONFIGURATION_PARAMETERS_REQUEST *SetConfigurationParametersRequest,
+ IN UINT32 SetConfigurationParametersRequestSize,
+ OUT UINT8 *CompletionCode
+ )
+{
+ EFI_STATUS Status;
+ UINT32 DataSize;
+
+ DataSize = sizeof (*CompletionCode);
+ Status = IpmiSubmitCommand (
+ IPMI_NETFN_TRANSPORT,
+ IPMI_TRANSPORT_SET_SOL_CONFIG_PARAM,
+ (VOID *)SetConfigurationParametersRequest,
+ SetConfigurationParametersRequestSize,
+ (VOID *)CompletionCode,
+ &DataSize
+ );
+ return Status;
+}
+
+/**
+ This function is used to retrieve the configuration parameters from the
+ Set SOL Configuration Parameters.
+
+ @param [in] GetConfigurationParametersRequest Pointer to IPMI_SET_SOL_CONFIGURATION_PARAMETERS_REQUEST.
+ @param [out] GetConfigurationParametersResponse Pointer to receive IPMI_GET_SOL_CONFIGURATION_PARAMETERS_RESPONSE
+ @param [in, out] GetConfigurationParametersResponseSize When in, which is the expected size of
+ response. When out, which is the actual
+ size returned.
+
+ @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiGetSolConfigurationParameters (
+ IN IPMI_GET_SOL_CONFIGURATION_PARAMETERS_REQUEST *GetConfigurationParametersRequest,
+ OUT IPMI_GET_SOL_CONFIGURATION_PARAMETERS_RESPONSE *GetConfigurationParametersResponse,
+ IN OUT UINT32 *GetConfigurationParametersResponseSize
+ )
+{
+ EFI_STATUS Status;
+
+ Status = IpmiSubmitCommand (
+ IPMI_NETFN_TRANSPORT,
+ IPMI_TRANSPORT_GET_SOL_CONFIG_PARAM,
+ (VOID *)GetConfigurationParametersRequest,
+ sizeof (*GetConfigurationParametersRequest),
+ (VOID *)GetConfigurationParametersResponse,
+ GetConfigurationParametersResponseSize
+ );
+ return Status;
+}
+
+/**
+ This function gets the LAN configuration parameter.
+
+ @param[in] GetLanConfigurationParametersRequest Request data
+ @param[out] GetLanConfigurationParametersResponse Response data
+ @param[in,out] GetLanConfigurationParametersSize When input, the expected size of response data.
+ When out, the exact size of response data.
+
+ @retval EFI_SUCCESS Lan configuration parameter is returned in the response.
+ @retval EFI_INVALID_PARAMETER One of the given input parameters is invalid.
+ @retval Others Other errors.
+
+**/
+EFI_STATUS
+EFIAPI
+IpmiGetLanConfigurationParameters (
+ IN IPMI_GET_LAN_CONFIGURATION_PARAMETERS_REQUEST *GetLanConfigurationParametersRequest,
+ OUT IPMI_GET_LAN_CONFIGURATION_PARAMETERS_RESPONSE *GetLanConfigurationParametersResponse,
+ IN OUT UINT32 *GetLanConfigurationParametersSize
+ )
+{
+ EFI_STATUS Status;
+
+ if ((GetLanConfigurationParametersRequest == NULL) ||
+ (GetLanConfigurationParametersResponse == NULL) ||
+ (GetLanConfigurationParametersSize == NULL))
+ {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ Status = IpmiSubmitCommand (
+ IPMI_NETFN_TRANSPORT,
+ IPMI_TRANSPORT_GET_LAN_CONFIG_PARAMETERS,
+ (UINT8 *)GetLanConfigurationParametersRequest,
+ sizeof (*GetLanConfigurationParametersRequest),
+ (UINT8 *)GetLanConfigurationParametersResponse,
+ GetLanConfigurationParametersSize
+ );
+ return Status;
+}
--
2.37.1.windows.1
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#104095): https://edk2.groups.io/g/devel/message/104095
Mute This Topic: https://groups.io/mt/98699831/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-
[AMD Official Use Only - General] reviewed-by: Abdul Lateef Attar <abdattar@amd.com> -----Original Message----- From: Chang, Abner <Abner.Chang@amd.com> Sent: 05 May 2023 10:54 To: devel@edk2.groups.io Cc: Isaac Oram <isaac.w.oram@intel.com>; Attar, AbdulLateef (Abdul Lateef) <AbdulLateef.Attar@amd.com>; Nickle Wang <nicklew@nvidia.com>; Tinh Nguyen <tinhnguyen@os.amperecomputing.com> Subject: [edk2-platforms][PATCH] ManageabilityPkg/IpmiCommandLib:IPMI Command Library From: Abner Chang <abner.chang@amd.com> BZ #: 4444 IpmiCommandLib is cloned from edk2-platforms/Features/Intel/OutOfBandManagement/ IpmiFeaturePkg/Library/IpmiCommandLib in order to consolidate edk2 system manageability support in one place. Function header are added to the source files and header files. Uncustify is applied to C files and no functionalities are changed in this patch. We will still keep the one under IpmiFeaturePkg/Library/ IpmiCommandLib until the reference to this instance are removed from platforms. Signed-off-by: Abner Chang <abner.chang@amd.com> Cc: Isaac Oram <isaac.w.oram@intel.com> Cc: Abdul Lateef Attar <abdattar@amd.com> Cc: Nickle Wang <nicklew@nvidia.com> Cc: Tinh Nguyen <tinhnguyen@os.amperecomputing.com> --- .../Library/IpmiCommandLib/IpmiCommandLib.inf | 33 + .../Include/Library/IpmiCommandLib.h | 620 ++++++++++++++++++ .../IpmiCommandLib/IpmiCommandLibNetFnApp.c | 444 +++++++++++++ .../IpmiCommandLibNetFnChassis.c | 199 ++++++ .../IpmiCommandLibNetFnStorage.c | 384 +++++++++++ .../IpmiCommandLibNetFnTransport.c | 156 +++++ 6 files changed, 1836 insertions(+) create mode 100644 Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLib.inf create mode 100644 Features/ManageabilityPkg/Include/Library/IpmiCommandLib.h create mode 100644 Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnApp.c create mode 100644 Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnChassis.c create mode 100644 Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnStorage.c create mode 100644 Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnTransport.c diff --git a/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLib.inf b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLib.inf new file mode 100644 index 0000000000..3dc485cf38 --- /dev/null +++ b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLib.inf @@ -0,0 +1,33 @@ +### @file +# Component description file for IPMI Command Library. +# +# Copyright (c) 2018 - 2021, Intel Corporation. All rights reserved.<BR> +# Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.<BR> +# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +### + +[Defines] + INF_VERSION = 0x00010005 + BASE_NAME = IpmiCommandLib + FILE_GUID = 96FC1989-CB7F-489B-9D3B-68DCA2C2DADC + MODULE_TYPE = UEFI_DRIVER + VERSION_STRING = 1.0 + LIBRARY_CLASS = IpmiCommandLib + +[sources] + IpmiCommandLibNetFnApp.c + IpmiCommandLibNetFnTransport.c + IpmiCommandLibNetFnChassis.c + IpmiCommandLibNetFnStorage.c + +[Packages] + MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec + ManageabilityPkg/ManageabilityPkg.dec + +[LibraryClasses] + BaseMemoryLib + DebugLib + IpmiLib diff --git a/Features/ManageabilityPkg/Include/Library/IpmiCommandLib.h b/Features/ManageabilityPkg/Include/Library/IpmiCommandLib.h new file mode 100644 index 0000000000..685f6e2ea2 --- /dev/null +++ b/Features/ManageabilityPkg/Include/Library/IpmiCommandLib.h @@ -0,0 +1,620 @@ +/** @file + This library abstract how to send/receive IPMI command. + +Copyright (c) 2018-2021, Intel Corporation. All rights reserved.<BR> +Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.<BR> + +SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#ifndef IPMI_COMMAND_LIB_H_ +#define IPMI_COMMAND_LIB_H_ + +#include <Uefi.h> +#include <IndustryStandard/Ipmi.h> + +/// +/// Functions for IPMI NetFnApp commands +/// + +/** + This function is used to retrieve device ID. + + @param [out] DeviceId The pointer to receive IPMI_GET_DEVICE_ID_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetDeviceId ( + OUT IPMI_GET_DEVICE_ID_RESPONSE *DeviceId + ); + +/** + This function returns device self test results + + @param [out] SelfTestResult The pointer to receive IPMI_SELF_TEST_RESULT_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetSelfTestResult ( + OUT IPMI_SELF_TEST_RESULT_RESPONSE *SelfTestResult + ); + +/** + This function is used for starting and restarting the Watchdog + Timer from the initial countdown value that was specified in + the Set Watchdog Timer command the watchdog timer. + + @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiResetWatchdogTimer ( + OUT UINT8 *CompletionCode + ); + +/** + This function is used for initializing and configuring + the watchdog timer. + + @param [in] SetWatchdogTimer Pointer to receive IPMI_SET_WATCHDOG_TIMER_REQUEST. + @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiSetWatchdogTimer ( + IN IPMI_SET_WATCHDOG_TIMER_REQUEST *SetWatchdogTimer, + OUT UINT8 *CompletionCode + ); + +/** + This function retrieves the current settings and present + countdown of the watchdog timer. + + @param [out] GetWatchdogTimer Pointer to receive IPMI_GET_WATCHDOG_TIMER_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetWatchdogTimer ( + OUT IPMI_GET_WATCHDOG_TIMER_RESPONSE *GetWatchdogTimer + ); + +/** + This function enables message reception into Message Buffers, + and any interrupt associated with that buffer getting full. + + @param [in] SetBmcGlobalEnables Pointer receive to IPMI_SET_BMC_GLOBAL_ENABLES_REQUEST. + @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiSetBmcGlobalEnables ( + IN IPMI_SET_BMC_GLOBAL_ENABLES_REQUEST *SetBmcGlobalEnables, + OUT UINT8 *CompletionCode + ); + +/** + This function retrieves the present setting of the Global Enables + + @param [out] GetBmcGlobalEnables Pointer to receive IPMI_GET_BMC_GLOBAL_ENABLES_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetBmcGlobalEnables ( + OUT IPMI_GET_BMC_GLOBAL_ENABLES_RESPONSE *GetBmcGlobalEnables + ); + +/** + This function is used to flush unread data from the Receive + Message Queue or Event Message Buffer + + @param [in] ClearMessageFlagsRequest IPMI_CLEAR_MESSAGE_FLAGS_REQUEST + @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiClearMessageFlags ( + IN IPMI_CLEAR_MESSAGE_FLAGS_REQUEST *ClearMessageFlagsRequest, + OUT UINT8 *CompletionCode + ); + +/** + This function is used to retrieve the present message available states. + + @param [out] GetMessageFlagsResponse Pointer to receive IPMI_GET_MESSAGE_FLAGS_RESPONSE + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetMessageFlags ( + OUT IPMI_GET_MESSAGE_FLAGS_RESPONSE *GetMessageFlagsResponse + ); + +/** + This function is used to get data from the Receive Message Queue. + + @param [out] GetMessageResponse Pointer to receive IPMI_GET_MESSAGE_RESPONSE. + @param [in, out] GetMessageResponseSize When in, which is the expected size of + response. When out, which is the actual + size returned. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetMessage ( + OUT IPMI_GET_MESSAGE_RESPONSE *GetMessageResponse, + IN OUT UINT32 *GetMessageResponseSize + ); + +/** + This function is used for bridging IPMI messages between channels, + and between the system management software (SMS) and a given channel + + @param [in] SendMessageRequest Pointer to IPMI_SEND_MESSAGE_REQUEST. + @param [in] SendMessageRequestSize Size of entire SendMessageRequestSize. + @param [out] SendMessageResponse Pointer to receive IPMI_SEND_MESSAGE_RESPONSE. + @param [in] SendMessageResponseSize When in, which is the expected size of + response. When out, which is the actual + size returned. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiSendMessage ( + IN IPMI_SEND_MESSAGE_REQUEST *SendMessageRequest, + IN UINT32 SendMessageRequestSize, + OUT IPMI_SEND_MESSAGE_RESPONSE *SendMessageResponse, + IN OUT UINT32 *SendMessageResponseSize + ); + +/** + This function gets the system UUID. + + @param [out] SystemGuid The pointer to retrieve system UUID. + + @retval EFI_SUCCESS UUID is returned. + @retval EFI_INVALID_PARAMETER SystemGuid is a NULL pointer. + @retval Others See return value of IpmiSubmitCommand () function. +**/ +EFI_STATUS +EFIAPI +IpmiGetSystemUuid ( + OUT EFI_GUID *SystemGuid + ); + +/** + This function gets the channel information. + + @param [in] GetChannelInfoRequest The get channel information request. + @param [out] GetChannelInfoResponse The get channel information response. + @param [out] GetChannelInfoResponseSize When input, the expected size of response. + When output, the exact size of the returned + response. + + @retval EFI_SUCCESS Get channel information successfully. + @retval EFI_INVALID_PARAMETER One of the given input parameters is invalid. + @retval Others See return value of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetChannelInfo ( + IN IPMI_GET_CHANNEL_INFO_REQUEST *GetChannelInfoRequest, + OUT IPMI_GET_CHANNEL_INFO_RESPONSE *GetChannelInfoResponse, + OUT UINT32 *GetChannelInfoResponseSize + ); + +/// +/// Functions for IPMI NetFnTransport commands. +/// + +/** + This function sends command to BMC to notify a remote application + that a SOL payload is activating on another channel. + + @param [in] SolActivatingRequest Pointer to IPMI_SOL_ACTIVATING_REQUEST. + @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiSolActivating ( + IN IPMI_SOL_ACTIVATING_REQUEST *SolActivatingRequest, + OUT UINT8 *CompletionCode + ); + +/** + This function is used to set parameters such as the network addressing + information required for SOL payload operation. + + @param [in] SetConfigurationParametersRequest Pointer to IPMI_SET_SOL_CONFIGURATION_PARAMETERS_REQUEST. + @param [in] SetConfigurationParametersRequestSize Size of entire SetConfigurationParametersRequestSize. + @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiSetSolConfigurationParameters ( + IN IPMI_SET_SOL_CONFIGURATION_PARAMETERS_REQUEST *SetConfigurationParametersRequest, + IN UINT32 SetConfigurationParametersRequestSize, + OUT UINT8 *CompletionCode + ); + +/** + This function is used to retrieve the configuration parameters from the + Set SOL Configuration Parameters. + + @param [in] GetConfigurationParametersRequest Pointer to IPMI_SET_SOL_CONFIGURATION_PARAMETERS_REQUEST. + @param [out] GetConfigurationParametersResponse Pointer to receive IPMI_GET_SOL_CONFIGURATION_PARAMETERS_RESPONSE. + @param [in, out] GetConfigurationParametersResponseSize When in, which is the expected size of + response. When out, which is the actual + size returned. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetSolConfigurationParameters ( + IN IPMI_GET_SOL_CONFIGURATION_PARAMETERS_REQUEST *GetConfigurationParametersRequest, + OUT IPMI_GET_SOL_CONFIGURATION_PARAMETERS_RESPONSE *GetConfigurationParametersResponse, + IN OUT UINT32 *GetConfigurationParametersResponseSize + ); + +/** + This function gets the LAN configuration parameter. + + @param[in] GetLanConfigurationParametersRequest Request data + @param[out] GetLanConfigurationParametersResponse Response data + @param[in,out] GetLanConfigurationParametersSize When input, the expected size of response data. + When out, the exact size of response data. + + @retval EFI_SUCCESS Lan configuration parameter is returned in the response. + @retval EFI_INVALID_PARAMETER One of the given input parameters is invalid. + @retval Others Other errors. + +**/ +EFI_STATUS +EFIAPI +IpmiGetLanConfigurationParameters ( + IN IPMI_GET_LAN_CONFIGURATION_PARAMETERS_REQUEST *GetLanConfigurationParametersRequest, + OUT IPMI_GET_LAN_CONFIGURATION_PARAMETERS_RESPONSE *GetLanConfigurationParametersResponse, + IN OUT UINT32 *GetLanConfigurationParametersSize + ); + +/// +/// Functions for IPMI NetFnChasis commands +/// + +/** + This function returns information about which main chassis management functions are + present and what addresses are used to access those functions. + + @param [out] GetChassisCapabilitiesResponse Pointer to IPMI_GET_CHASSIS_CAPABILITIES_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetChassisCapabilities ( + OUT IPMI_GET_CHASSIS_CAPABILITIES_RESPONSE *GetChassisCapabilitiesResponse + ); + +/** + This function gets information regarding the high-level status of the system + chassis and main power subsystem. + + @param [out] GetChassisStatusResponse Pointer to IPMI_GET_CHASSIS_STATUS_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetChassisStatus ( + OUT IPMI_GET_CHASSIS_STATUS_RESPONSE *GetChassisStatusResponse + ); + +/** + This function sends command to control power up, power down, and reset. + + @param [in] ChassisControlRequest Pointer to IPMI_CHASSIS_CONTROL_REQUEST. + @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiChassisControl ( + IN IPMI_CHASSIS_CONTROL_REQUEST *ChassisControlRequest, + OUT UINT8 *CompletionCode + ); + +/** + This function is used to configure the power restore policy. + + @param [in] ChassisControlRequest Pointer to IPMI_SET_POWER_RESTORE_POLICY_REQUEST. + @param [out] ChassisControlResponse Pointer to IPMI_SET_POWER_RESTORE_POLICY_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiSetPowerRestorePolicy ( + IN IPMI_SET_POWER_RESTORE_POLICY_REQUEST *ChassisControlRequest, + OUT IPMI_SET_POWER_RESTORE_POLICY_RESPONSE *ChassisControlResponse + ); + +/** + This function is used to set parameters that direct the system boot + following a system power up or reset. + + @param [in] BootOptionsRequest Pointer to IPMI_SET_BOOT_OPTIONS_REQUEST. + @param [out] BootOptionsResponse Pointer to IPMI_SET_BOOT_OPTIONS_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiSetSystemBootOptions ( + IN IPMI_SET_BOOT_OPTIONS_REQUEST *BootOptionsRequest, + OUT IPMI_SET_BOOT_OPTIONS_RESPONSE *BootOptionsResponse + ); + +/** + This function is used to retrieve the boot options set by the + Set System Boot Options command. + + @param [in] BootOptionsRequest Pointer to IPMI_GET_BOOT_OPTIONS_REQUEST. + @param [out] BootOptionsResponse Pointer to IPMI_GET_BOOT_OPTIONS_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetSystemBootOptions ( + IN IPMI_GET_BOOT_OPTIONS_REQUEST *BootOptionsRequest, + OUT IPMI_GET_BOOT_OPTIONS_RESPONSE *BootOptionsResponse + ); + +/// +/// Functions for IPMI NetFnStorage commands +/// + +/** + This function is used to retrieve FRU Inventory Area + + @param [in] GetFruInventoryAreaInfoRequest Pointer to IPMI_GET_FRU_INVENTORY_AREA_INFO_REQUEST. + @param [out] GetFruInventoryAreaInfoResponse Pointer to IPMI_GET_FRU_INVENTORY_AREA_INFO_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetFruInventoryAreaInfo ( + IN IPMI_GET_FRU_INVENTORY_AREA_INFO_REQUEST *GetFruInventoryAreaInfoRequest, + OUT IPMI_GET_FRU_INVENTORY_AREA_INFO_RESPONSE *GetFruInventoryAreaInfoResponse + ); + +/** + This function returns specified data from the FRU Inventory Info area. + + @param [in] ReadFruDataRequest Pointer to IPMI_READ_FRU_DATA_REQUEST. + @param [out] ReadFruDataResponse Pointer to IPMI_READ_FRU_DATA_RESPONSE. + @param [in, out] ReadFruDataResponseSize Returns the size of ReadFruDataResponse. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiReadFruData ( + IN IPMI_READ_FRU_DATA_REQUEST *ReadFruDataRequest, + OUT IPMI_READ_FRU_DATA_RESPONSE *ReadFruDataResponse, + IN OUT UINT32 *ReadFruDataResponseSize + ); + +/** + This function writes specified data from the FRU Inventory Info area. + + @param [in] WriteFruDataRequest Pointer to IPMI_WRITE_FRU_DATA_REQUEST. + @param [in] WriteFruDataRequestSize Size of WriteFruDataRequest. + @param [out] WriteFruDataResponse Pointer to receive IPMI_WRITE_FRU_DATA_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiWriteFruData ( + IN IPMI_WRITE_FRU_DATA_REQUEST *WriteFruDataRequest, + IN UINT32 WriteFruDataRequestSize, + OUT IPMI_WRITE_FRU_DATA_RESPONSE *WriteFruDataResponse + ); + +/** + This function returns the number of entries in the SEL + + @param [out] GetSelInfoResponse Pointer to receive IPMI_GET_SEL_INFO_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetSelInfo ( + OUT IPMI_GET_SEL_INFO_RESPONSE *GetSelInfoResponse + ); + +/** + This function retrieves entries from the SEL + + @param [in] GetSelEntryRequest Pointer to IPMI_GET_SEL_ENTRY_REQUEST. + @param [out] GetSelEntryResponse Pointer to receive IPMI_GET_SEL_ENTRY_RESPONSE. + @param [in] GetSelEntryResponseSize Size of entire GetSelEntryResponse. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetSelEntry ( + IN IPMI_GET_SEL_ENTRY_REQUEST *GetSelEntryRequest, + OUT IPMI_GET_SEL_ENTRY_RESPONSE *GetSelEntryResponse, + IN OUT UINT32 *GetSelEntryResponseSize + ); + +/** + This function adds an entry in the SEL + + @param [in] AddSelEntryRequest Pointer to IPMI_ADD_SEL_ENTRY_REQUEST. + @param [out] AddSelEntryResponse Pointer to receive IPMI_ADD_SEL_ENTRY_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiAddSelEntry ( + IN IPMI_ADD_SEL_ENTRY_REQUEST *AddSelEntryRequest, + OUT IPMI_ADD_SEL_ENTRY_RESPONSE *AddSelEntryResponse + ); + +/** + This function adds SEL Entry command that allows the record to be incrementally + added to the SEL. + + @param [in] PartialAddSelEntryRequest Pointer to IPMI_PARTIAL_ADD_SEL_ENTRY_REQUEST. + @param [in] PartialAddSelEntryRequestSize Size of entire PartialAddSelEntryRequest. + @param [out] PartialAddSelEntryResponse Pointer to receive IPMI_PARTIAL_ADD_SEL_ENTRY_RESPONSE. + + @retval EFI_STASTUS See return value of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiPartialAddSelEntry ( + IN IPMI_PARTIAL_ADD_SEL_ENTRY_REQUEST *PartialAddSelEntryRequest, + IN UINT32 PartialAddSelEntryRequestSize, + OUT IPMI_PARTIAL_ADD_SEL_ENTRY_RESPONSE *PartialAddSelEntryResponse + ); + +/** + This function erases all contents of the System Event Log. + + @param [in] ClearSelRequest Pointer to IPMI_CLEAR_SEL_REQUEST. + @param [out] ClearSelResponse Pointer to receive IPMI_CLEAR_SEL_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiClearSel ( + IN IPMI_CLEAR_SEL_REQUEST *ClearSelRequest, + OUT IPMI_CLEAR_SEL_RESPONSE *ClearSelResponse + ); + +/** + This function returns the time from the SEL Device. + + @param [out] GetSelTimeResponse Pointer to IPMI_GET_SEL_TIME_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetSelTime ( + OUT IPMI_GET_SEL_TIME_RESPONSE *GetSelTimeResponse + ); + +/** + This function set the time in the SEL Device. + + @param [in] SetSelTimeRequest Pointer to IPMI_SET_SEL_TIME_REQUEST. + @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiSetSelTime ( + IN IPMI_SET_SEL_TIME_REQUEST *SetSelTimeRequest, + OUT UINT8 *CompletionCode + ); + +/** + This function returns the SDR command version for the SDR Repository. + + @param [out] ClearSelResponse Pointer to receive IPMI_GET_SDR_REPOSITORY_INFO_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetSdrRepositoryInfo ( + OUT IPMI_GET_SDR_REPOSITORY_INFO_RESPONSE *GetSdrRepositoryInfoResp + ); + +/** + This function returns the sensor record specified by Record ID. + + @param [in] GetSdrRequest Pointer to IPMI_GET_SDR_REQUEST. + @param [out] GetSdrResponse Pointer to receive IPMI_GET_SDR_RESPONSE. + @param [in, out] GetSdrResponseSize Size of entire GetSdrResponse. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetSdr ( + IN IPMI_GET_SDR_REQUEST *GetSdrRequest, + OUT IPMI_GET_SDR_RESPONSE *GetSdrResponse, + IN OUT UINT32 *GetSdrResponseSize + ); + +#endif // IPMI_COMMAND_LIB_H_ diff --git a/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnApp.c b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnApp.c new file mode 100644 index 0000000000..30c412e2f4 --- /dev/null +++ b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnApp.c @@ -0,0 +1,444 @@ +/** @file + IPMI Command - NetFnApp. + + Copyright (c) 2018 - 2021, Intel Corporation. All rights reserved.<BR> + Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.<BR> + + SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#include <PiPei.h> +#include <Library/BaseMemoryLib.h> +#include <Library/DebugLib.h> +#include <Library/IpmiLib.h> + +#include <IndustryStandard/Ipmi.h> + +/** + This function is used to retrieve device ID. + + @param [out] DeviceId The pointer to receive IPMI_GET_DEVICE_ID_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetDeviceId ( + OUT IPMI_GET_DEVICE_ID_RESPONSE *DeviceId + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*DeviceId); + Status = IpmiSubmitCommand ( + IPMI_NETFN_APP, + IPMI_APP_GET_DEVICE_ID, + NULL, + 0, + (VOID *)DeviceId, + &DataSize + ); + return Status; +} + +/** + This function returns device self test results + + @param [out] SelfTestResult The pointer to receive IPMI_SELF_TEST_RESULT_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetSelfTestResult ( + OUT IPMI_SELF_TEST_RESULT_RESPONSE *SelfTestResult + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*SelfTestResult); + Status = IpmiSubmitCommand ( + IPMI_NETFN_APP, + IPMI_APP_GET_SELFTEST_RESULTS, + NULL, + 0, + (VOID *)SelfTestResult, + &DataSize + ); + return Status; +} + +/** + This function is used for starting and restarting the Watchdog + Timer from the initial countdown value that was specified in + the Set Watchdog Timer command the watchdog timer + + @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiResetWatchdogTimer ( + OUT UINT8 *CompletionCode + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*CompletionCode); + Status = IpmiSubmitCommand ( + IPMI_NETFN_APP, + IPMI_APP_RESET_WATCHDOG_TIMER, + NULL, + 0, + (VOID *)CompletionCode, + &DataSize + ); + return Status; +} + +/** + This function is used for initializing and configuring + the watchdog timer. + + @param [in] SetWatchdogTimer Pointer to receive IPMI_SET_WATCHDOG_TIMER_REQUEST. + @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiSetWatchdogTimer ( + IN IPMI_SET_WATCHDOG_TIMER_REQUEST *SetWatchdogTimer, + OUT UINT8 *CompletionCode + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*CompletionCode); + Status = IpmiSubmitCommand ( + IPMI_NETFN_APP, + IPMI_APP_SET_WATCHDOG_TIMER, + (VOID *)SetWatchdogTimer, + sizeof (*SetWatchdogTimer), + (VOID *)CompletionCode, + &DataSize + ); + return Status; +} + +/** + This function retrieves the current settings and present + countdown of the watchdog timer. + + @param [out] GetWatchdogTimer Pointer to receive IPMI_GET_WATCHDOG_TIMER_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetWatchdogTimer ( + OUT IPMI_GET_WATCHDOG_TIMER_RESPONSE *GetWatchdogTimer + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*GetWatchdogTimer); + Status = IpmiSubmitCommand ( + IPMI_NETFN_APP, + IPMI_APP_GET_WATCHDOG_TIMER, + NULL, + 0, + (VOID *)GetWatchdogTimer, + &DataSize + ); + return Status; +} + +/** + This function enables message reception into Message Buffers, + and any interrupt associated with that buffer getting full. + + @param [in] SetBmcGlobalEnables Pointer receive to IPMI_SET_BMC_GLOBAL_ENABLES_REQUEST. + @param [out] CompletionCode IPMI completetion code refer to Ipmi.h. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiSetBmcGlobalEnables ( + IN IPMI_SET_BMC_GLOBAL_ENABLES_REQUEST *SetBmcGlobalEnables, + OUT UINT8 *CompletionCode + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*CompletionCode); + Status = IpmiSubmitCommand ( + IPMI_NETFN_APP, + IPMI_APP_SET_BMC_GLOBAL_ENABLES, + (VOID *)SetBmcGlobalEnables, + sizeof (*SetBmcGlobalEnables), + (VOID *)CompletionCode, + &DataSize + ); + return Status; +} + +/** + This function retrieves the present setting of the Global Enables + + @param [out] GetBmcGlobalEnables Pointer to receive IPMI_GET_BMC_GLOBAL_ENABLES_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetBmcGlobalEnables ( + OUT IPMI_GET_BMC_GLOBAL_ENABLES_RESPONSE *GetBmcGlobalEnables + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*GetBmcGlobalEnables); + Status = IpmiSubmitCommand ( + IPMI_NETFN_APP, + IPMI_APP_GET_BMC_GLOBAL_ENABLES, + NULL, + 0, + (VOID *)GetBmcGlobalEnables, + &DataSize + ); + return Status; +} + +/** + This function is used to flush unread data from the Receive + Message Queue or Event Message Buffer + + @param [in] ClearMessageFlagsRequest IPMI_CLEAR_MESSAGE_FLAGS_REQUEST + @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiClearMessageFlags ( + IN IPMI_CLEAR_MESSAGE_FLAGS_REQUEST *ClearMessageFlagsRequest, + OUT UINT8 *CompletionCode + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*CompletionCode); + Status = IpmiSubmitCommand ( + IPMI_NETFN_APP, + IPMI_APP_CLEAR_MESSAGE_FLAGS, + (VOID *)ClearMessageFlagsRequest, + sizeof (*ClearMessageFlagsRequest), + (VOID *)CompletionCode, + &DataSize + ); + return Status; +} + +/** + This function is used to retrieve the present message available states. + + @param [out] GetMessageFlagsResponse Pointer to receive IPMI_GET_MESSAGE_FLAGS_RESPONSE + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetMessageFlags ( + OUT IPMI_GET_MESSAGE_FLAGS_RESPONSE *GetMessageFlagsResponse + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*GetMessageFlagsResponse); + Status = IpmiSubmitCommand ( + IPMI_NETFN_APP, + IPMI_APP_GET_MESSAGE_FLAGS, + NULL, + 0, + (VOID *)GetMessageFlagsResponse, + &DataSize + ); + return Status; +} + +/** + This function is used to get data from the Receive Message Queue. + + @param [out] GetMessageResponse Pointer to receive IPMI_GET_MESSAGE_RESPONSE. + @param [in, out] GetMessageResponseSize When in, which is the expected size of + response. When out, which is the actual + size returned. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetMessage ( + OUT IPMI_GET_MESSAGE_RESPONSE *GetMessageResponse, + IN OUT UINT32 *GetMessageResponseSize + ) +{ + EFI_STATUS Status; + + Status = IpmiSubmitCommand ( + IPMI_NETFN_APP, + IPMI_APP_GET_MESSAGE, + NULL, + 0, + (VOID *)GetMessageResponse, + GetMessageResponseSize + ); + return Status; +} + +/** + This function is used for bridging IPMI messages between channels, + and between the system management software (SMS) and a given channel + + @param [in] SendMessageRequest Pointer to IPMI_SEND_MESSAGE_REQUEST. + @param [in] SendMessageRequestSize Size of entire SendMessageRequestSize. + @param [out] SendMessageResponse Pointer to receive IPMI_SEND_MESSAGE_RESPONSE. + @param [in] SendMessageResponseSize When in, which is the expected size of + response. When out, which is the actual + size returned. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiSendMessage ( + IN IPMI_SEND_MESSAGE_REQUEST *SendMessageRequest, + IN UINT32 SendMessageRequestSize, + OUT IPMI_SEND_MESSAGE_RESPONSE *SendMessageResponse, + IN OUT UINT32 *SendMessageResponseSize + ) +{ + EFI_STATUS Status; + + Status = IpmiSubmitCommand ( + IPMI_NETFN_APP, + IPMI_APP_SEND_MESSAGE, + (VOID *)SendMessageRequest, + SendMessageRequestSize, + (VOID *)SendMessageResponse, + SendMessageResponseSize + ); + return Status; +} + +/** + This function gets the system UUID. + + @param[out] SystemGuid The pointer to retrieve system UUID. + + @retval EFI_SUCCESS UUID is returned. + @retval EFI_INVALID_PARAMETER SystemGuid is a NULL pointer. + @retval Others See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetSystemUuid ( + OUT EFI_GUID *SystemGuid + ) +{ + EFI_STATUS Status; + UINT32 RequestSize; + UINT32 ResponseSize; + IPMI_GET_SYSTEM_UUID_RESPONSE GetSystemUuidResponse; + + if (SystemGuid == NULL) { + return EFI_INVALID_PARAMETER; + } + + RequestSize = 0; + ResponseSize = sizeof (IPMI_GET_SYSTEM_UUID_RESPONSE); + Status = IpmiSubmitCommand ( + IPMI_NETFN_APP, + IPMI_APP_GET_SYSTEM_GUID, + (VOID *)NULL, + RequestSize, + (VOID *)&GetSystemUuidResponse, + &ResponseSize + ); + if (!EFI_ERROR (Status) && (GetSystemUuidResponse.CompletionCode == IPMI_COMP_CODE_NORMAL)) { + CopyMem ( + (VOID *)SystemGuid, + (VOID *)&GetSystemUuidResponse.SystemUuid, + sizeof (EFI_GUID) + ); + } + + return Status; +} + +/** + This function gets the channel information. + + @param[in] GetChannelInfoRequest The get channel information request. + @param[out] GetChannelInfoResponse The get channel information response. + @param[out] GetChannelInfoResponseSize When input, the expected size of response. + When output, the exact size of the returned + response. + + @retval EFI_SUCCESS Get channel information successfully. + @retval EFI_INVALID_PARAMETER One of the given input parameters is invalid. + @retval Others See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetChannelInfo ( + IN IPMI_GET_CHANNEL_INFO_REQUEST *GetChannelInfoRequest, + OUT IPMI_GET_CHANNEL_INFO_RESPONSE *GetChannelInfoResponse, + OUT UINT32 *GetChannelInfoResponseSize + ) +{ + EFI_STATUS Status; + + if ((GetChannelInfoRequest == NULL) || + (GetChannelInfoResponse == NULL) || + (GetChannelInfoResponseSize == NULL)) + { + return EFI_INVALID_PARAMETER; + } + + *GetChannelInfoResponseSize = sizeof (IPMI_GET_CHANNEL_INFO_RESPONSE); + Status = IpmiSubmitCommand ( + IPMI_NETFN_APP, + IPMI_APP_GET_CHANNEL_INFO, + (UINT8 *)GetChannelInfoRequest, + sizeof (IPMI_GET_CHANNEL_INFO_REQUEST), + (UINT8 *)GetChannelInfoResponse, + GetChannelInfoResponseSize + ); + return Status; +} diff --git a/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnChassis.c b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnChassis.c new file mode 100644 index 0000000000..12fd997b11 --- /dev/null +++ b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnChassis.c @@ -0,0 +1,199 @@ +/** @file + IPMI Command - NetFnChassis. + + Copyright (c) 2018 - 2021, Intel Corporation. All rights reserved.<BR> + SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#include <PiPei.h> +#include <Library/BaseMemoryLib.h> +#include <Library/DebugLib.h> +#include <Library/IpmiLib.h> + +#include <IndustryStandard/Ipmi.h> + +/** + This function returns information about which main chassis management functions are + present and what addresses are used to access those functions. + + @param [out] GetChassisCapabilitiesResponse Pointer to IPMI_GET_CHASSIS_CAPABILITIES_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetChassisCapabilities ( + OUT IPMI_GET_CHASSIS_CAPABILITIES_RESPONSE *GetChassisCapabilitiesResponse + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*GetChassisCapabilitiesResponse); + Status = IpmiSubmitCommand ( + IPMI_NETFN_CHASSIS, + IPMI_CHASSIS_GET_CAPABILITIES, + NULL, + 0, + (VOID *)GetChassisCapabilitiesResponse, + &DataSize + ); + return Status; +} + +/** + This function gets information regarding the high-level status of the system + chassis and main power subsystem. + + @param [out] GetChassisStatusResponse Pointer to IPMI_GET_CHASSIS_STATUS_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetChassisStatus ( + OUT IPMI_GET_CHASSIS_STATUS_RESPONSE *GetChassisStatusResponse + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*GetChassisStatusResponse); + Status = IpmiSubmitCommand ( + IPMI_NETFN_CHASSIS, + IPMI_CHASSIS_GET_STATUS, + NULL, + 0, + (VOID *)GetChassisStatusResponse, + &DataSize + ); + return Status; +} + +/** + This function sends command to control power up, power down, and reset. + + @param [in] ChassisControlRequest Pointer to IPMI_CHASSIS_CONTROL_REQUEST. + @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiChassisControl ( + IN IPMI_CHASSIS_CONTROL_REQUEST *ChassisControlRequest, + OUT UINT8 *CompletionCode + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*CompletionCode); + Status = IpmiSubmitCommand ( + IPMI_NETFN_CHASSIS, + IPMI_CHASSIS_CONTROL, + (VOID *)ChassisControlRequest, + sizeof (*ChassisControlRequest), + (VOID *)CompletionCode, + &DataSize + ); + return Status; +} + +/** + This function is used to configure the power restore policy. + + @param [in] ChassisControlRequest Pointer to IPMI_SET_POWER_RESTORE_POLICY_REQUEST. + @param [out] ChassisControlResponse Pointer to IPMI_SET_POWER_RESTORE_POLICY_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiSetPowerRestorePolicy ( + IN IPMI_SET_POWER_RESTORE_POLICY_REQUEST *ChassisControlRequest, + OUT IPMI_SET_POWER_RESTORE_POLICY_RESPONSE *ChassisControlResponse + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*ChassisControlResponse); + Status = IpmiSubmitCommand ( + IPMI_NETFN_CHASSIS, + IPMI_CHASSIS_SET_POWER_RESTORE_POLICY, + (VOID *)ChassisControlRequest, + sizeof (*ChassisControlRequest), + (VOID *)ChassisControlResponse, + &DataSize + ); + return Status; +} + +/** + This function is used to set parameters that direct the system boot + following a system power up or reset. + + @param [in] BootOptionsRequest Pointer to IPMI_SET_BOOT_OPTIONS_REQUEST. + @param [out] BootOptionsResponse Pointer to IPMI_SET_BOOT_OPTIONS_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiSetSystemBootOptions ( + IN IPMI_SET_BOOT_OPTIONS_REQUEST *BootOptionsRequest, + OUT IPMI_SET_BOOT_OPTIONS_RESPONSE *BootOptionsResponse + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*BootOptionsResponse); + Status = IpmiSubmitCommand ( + IPMI_NETFN_CHASSIS, + IPMI_CHASSIS_SET_SYSTEM_BOOT_OPTIONS, + (VOID *)BootOptionsRequest, + sizeof (*BootOptionsRequest), + (VOID *)BootOptionsResponse, + &DataSize + ); + return Status; +} + +/** + This function is used to retrieve the boot options set by the + Set System Boot Options command. + + @param [in] BootOptionsRequest Pointer to IPMI_GET_BOOT_OPTIONS_REQUEST. + @param [out] BootOptionsResponse Pointer to IPMI_GET_BOOT_OPTIONS_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetSystemBootOptions ( + IN IPMI_GET_BOOT_OPTIONS_REQUEST *BootOptionsRequest, + OUT IPMI_GET_BOOT_OPTIONS_RESPONSE *BootOptionsResponse + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*BootOptionsResponse); + Status = IpmiSubmitCommand ( + IPMI_NETFN_CHASSIS, + IPMI_CHASSIS_GET_SYSTEM_BOOT_OPTIONS, + (VOID *)BootOptionsRequest, + sizeof (*BootOptionsRequest), + (VOID *)BootOptionsResponse, + &DataSize + ); + return Status; +} diff --git a/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnStorage.c b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnStorage.c new file mode 100644 index 0000000000..2dbb7ac9ff --- /dev/null +++ b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnStorage.c @@ -0,0 +1,384 @@ +/** @file + IPMI Command - NetFnStorage. + + Copyright (c) 2018 - 2021, Intel Corporation. All rights reserved.<BR> + SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#include <PiPei.h> +#include <Library/BaseMemoryLib.h> +#include <Library/DebugLib.h> +#include <Library/IpmiLib.h> + +#include <IndustryStandard/Ipmi.h> + +/** + This function is used to retrieve FRU Inventory Area + + @param [in] GetFruInventoryAreaInfoRequest Pointer to IPMI_GET_FRU_INVENTORY_AREA_INFO_REQUEST. + @param [out] GetFruInventoryAreaInfoResponse Pointer to IPMI_GET_FRU_INVENTORY_AREA_INFO_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetFruInventoryAreaInfo ( + IN IPMI_GET_FRU_INVENTORY_AREA_INFO_REQUEST *GetFruInventoryAreaInfoRequest, + OUT IPMI_GET_FRU_INVENTORY_AREA_INFO_RESPONSE *GetFruInventoryAreaInfoResponse + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*GetFruInventoryAreaInfoResponse); + Status = IpmiSubmitCommand ( + IPMI_NETFN_STORAGE, + IPMI_STORAGE_GET_FRU_INVENTORY_AREAINFO, + (VOID *)GetFruInventoryAreaInfoRequest, + sizeof (*GetFruInventoryAreaInfoRequest), + (VOID *)GetFruInventoryAreaInfoResponse, + &DataSize + ); + return Status; +} + +/** + This function returns specified data from the FRU Inventory Info area. + + @param [in] ReadFruDataRequest Pointer to IPMI_READ_FRU_DATA_REQUEST. + @param [in] ReadFruDataResponse Pointer to IPMI_READ_FRU_DATA_RESPONSE. + @param [in, out] ReadFruDataResponseSize Returns the size of ReadFruDataResponse. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiReadFruData ( + IN IPMI_READ_FRU_DATA_REQUEST *ReadFruDataRequest, + OUT IPMI_READ_FRU_DATA_RESPONSE *ReadFruDataResponse, + IN OUT UINT32 *ReadFruDataResponseSize + ) +{ + EFI_STATUS Status; + + Status = IpmiSubmitCommand ( + IPMI_NETFN_STORAGE, + IPMI_STORAGE_READ_FRU_DATA, + (VOID *)ReadFruDataRequest, + sizeof (*ReadFruDataRequest), + (VOID *)ReadFruDataResponse, + ReadFruDataResponseSize + ); + return Status; +} + +/** + This function writes specified data from the FRU Inventory Info area. + + @param [in] WriteFruDataRequest Pointer to IPMI_WRITE_FRU_DATA_REQUEST. + @param [in] WriteFruDataRequestSize Size of WriteFruDataRequest. + @param [out] WriteFruDataResponse Pointer to receive IPMI_WRITE_FRU_DATA_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiWriteFruData ( + IN IPMI_WRITE_FRU_DATA_REQUEST *WriteFruDataRequest, + IN UINT32 WriteFruDataRequestSize, + OUT IPMI_WRITE_FRU_DATA_RESPONSE *WriteFruDataResponse + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*WriteFruDataResponse); + Status = IpmiSubmitCommand ( + IPMI_NETFN_STORAGE, + IPMI_STORAGE_WRITE_FRU_DATA, + (VOID *)WriteFruDataRequest, + WriteFruDataRequestSize, + (VOID *)WriteFruDataResponse, + &DataSize + ); + return Status; +} + +/** + This function returns the number of entries in the SEL + + @param [out] GetSelInfoResponse Pointer to receive IPMI_GET_SEL_INFO_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetSelInfo ( + OUT IPMI_GET_SEL_INFO_RESPONSE *GetSelInfoResponse + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*GetSelInfoResponse); + Status = IpmiSubmitCommand ( + IPMI_NETFN_STORAGE, + IPMI_STORAGE_GET_SEL_INFO, + NULL, + 0, + (VOID *)GetSelInfoResponse, + &DataSize + ); + return Status; +} + +/** + This function retrieves entries from the SEL + + @param [in] GetSelEntryRequest Pointer to IPMI_GET_SEL_ENTRY_REQUEST. + @param [out] GetSelEntryResponse Pointer to receive IPMI_GET_SEL_ENTRY_RESPONSE. + @param [in, out] GetSelEntryResponseSize Size of entire GetSelEntryResponse. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetSelEntry ( + IN IPMI_GET_SEL_ENTRY_REQUEST *GetSelEntryRequest, + OUT IPMI_GET_SEL_ENTRY_RESPONSE *GetSelEntryResponse, + IN OUT UINT32 *GetSelEntryResponseSize + ) +{ + EFI_STATUS Status; + + Status = IpmiSubmitCommand ( + IPMI_NETFN_STORAGE, + IPMI_STORAGE_GET_SEL_ENTRY, + (VOID *)GetSelEntryRequest, + sizeof (*GetSelEntryRequest), + (VOID *)GetSelEntryResponse, + GetSelEntryResponseSize + ); + return Status; +} + +/** + This function adds an entry in the SEL + + @param [in] AddSelEntryRequest Pointer to IPMI_ADD_SEL_ENTRY_REQUEST. + @param [out] AddSelEntryResponse Pointer to receive IPMI_ADD_SEL_ENTRY_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiAddSelEntry ( + IN IPMI_ADD_SEL_ENTRY_REQUEST *AddSelEntryRequest, + OUT IPMI_ADD_SEL_ENTRY_RESPONSE *AddSelEntryResponse + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*AddSelEntryResponse); + Status = IpmiSubmitCommand ( + IPMI_NETFN_STORAGE, + IPMI_STORAGE_ADD_SEL_ENTRY, + (VOID *)AddSelEntryRequest, + sizeof (*AddSelEntryRequest), + (VOID *)AddSelEntryResponse, + &DataSize + ); + return Status; +} + +/** + This function adds SEL Entry command that allows the record to be incrementally + added to the SEL. + + @param [in] PartialAddSelEntryRequest Pointer to IPMI_PARTIAL_ADD_SEL_ENTRY_REQUEST. + @param [in] PartialAddSelEntryRequestSize Size of entire PartialAddSelEntryRequest. + @param [out] PartialAddSelEntryResponse Pointer to receive IPMI_PARTIAL_ADD_SEL_ENTRY_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiPartialAddSelEntry ( + IN IPMI_PARTIAL_ADD_SEL_ENTRY_REQUEST *PartialAddSelEntryRequest, + IN UINT32 PartialAddSelEntryRequestSize, + OUT IPMI_PARTIAL_ADD_SEL_ENTRY_RESPONSE *PartialAddSelEntryResponse + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*PartialAddSelEntryResponse); + Status = IpmiSubmitCommand ( + IPMI_NETFN_STORAGE, + IPMI_STORAGE_PARTIAL_ADD_SEL_ENTRY, + (VOID *)PartialAddSelEntryRequest, + PartialAddSelEntryRequestSize, + (VOID *)PartialAddSelEntryResponse, + &DataSize + ); + return Status; +} + +/** + This function erases all contents of the System Event Log. + + @param [in] ClearSelRequest Pointer to IPMI_CLEAR_SEL_REQUEST. + @param [out] ClearSelResponse Pointer to receive IPMI_CLEAR_SEL_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiClearSel ( + IN IPMI_CLEAR_SEL_REQUEST *ClearSelRequest, + OUT IPMI_CLEAR_SEL_RESPONSE *ClearSelResponse + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*ClearSelResponse); + Status = IpmiSubmitCommand ( + IPMI_NETFN_STORAGE, + IPMI_STORAGE_CLEAR_SEL, + (VOID *)ClearSelRequest, + sizeof (*ClearSelRequest), + (VOID *)ClearSelResponse, + &DataSize + ); + return Status; +} + +/** + This function returns the time from the SEL Device. + + @param [out] GetSelTimeResponse Pointer to IPMI_GET_SEL_TIME_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetSelTime ( + OUT IPMI_GET_SEL_TIME_RESPONSE *GetSelTimeResponse + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*GetSelTimeResponse); + Status = IpmiSubmitCommand ( + IPMI_NETFN_STORAGE, + IPMI_STORAGE_GET_SEL_TIME, + NULL, + 0, + (VOID *)GetSelTimeResponse, + &DataSize + ); + return Status; +} + +/** + This function set the time in the SEL Device. + + @param [in] SetSelTimeRequest Pointer to IPMI_SET_SEL_TIME_REQUEST. + @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiSetSelTime ( + IN IPMI_SET_SEL_TIME_REQUEST *SetSelTimeRequest, + OUT UINT8 *CompletionCode + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*CompletionCode); + Status = IpmiSubmitCommand ( + IPMI_NETFN_STORAGE, + IPMI_STORAGE_SET_SEL_TIME, + (VOID *)SetSelTimeRequest, + sizeof (*SetSelTimeRequest), + (VOID *)CompletionCode, + &DataSize + ); + return Status; +} + +/** + This function returns the SDR command version for the SDR Repository + + @param [out] ClearSelResponse Pointer to receive IPMI_GET_SDR_REPOSITORY_INFO_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetSdrRepositoryInfo ( + OUT IPMI_GET_SDR_REPOSITORY_INFO_RESPONSE *GetSdrRepositoryInfoResp + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*GetSdrRepositoryInfoResp); + Status = IpmiSubmitCommand ( + IPMI_NETFN_STORAGE, + IPMI_STORAGE_GET_SDR_REPOSITORY_INFO, + NULL, + 0, + (VOID *)GetSdrRepositoryInfoResp, + &DataSize + ); + return Status; +} + +/** + This function returns the sensor record specified by Record ID. + + @param [in] GetSdrRequest Pointer to IPMI_GET_SDR_REQUEST. + @param [out] GetSdrResponse Pointer to receive IPMI_GET_SDR_RESPONSE. + @param [in, out] GetSdrResponseSize Size of entire GetSdrResponse. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetSdr ( + IN IPMI_GET_SDR_REQUEST *GetSdrRequest, + OUT IPMI_GET_SDR_RESPONSE *GetSdrResponse, + IN OUT UINT32 *GetSdrResponseSize + ) +{ + EFI_STATUS Status; + + Status = IpmiSubmitCommand ( + IPMI_NETFN_STORAGE, + IPMI_STORAGE_GET_SDR, + (VOID *)GetSdrRequest, + sizeof (*GetSdrRequest), + (VOID *)GetSdrResponse, + GetSdrResponseSize + ); + return Status; +} diff --git a/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnTransport.c b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnTransport.c new file mode 100644 index 0000000000..a93f7406f1 --- /dev/null +++ b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnTransport.c @@ -0,0 +1,156 @@ +/** @file + IPMI Command - NetFnTransport. + + Copyright (c) 2018 - 2021, Intel Corporation. All rights reserved.<BR> + Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.<BR> + + SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#include <PiPei.h> +#include <Library/BaseMemoryLib.h> +#include <Library/DebugLib.h> +#include <Library/IpmiLib.h> + +#include <IndustryStandard/Ipmi.h> + +/** + This function sends command to BMC to notify a remote application + that a SOL payload is activating on another channel. + + @param [in] SolActivatingRequest The get channel information request. + @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiSolActivating ( + IN IPMI_SOL_ACTIVATING_REQUEST *SolActivatingRequest, + OUT UINT8 *CompletionCode + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*CompletionCode); + Status = IpmiSubmitCommand ( + IPMI_NETFN_TRANSPORT, + IPMI_TRANSPORT_SOL_ACTIVATING, + (VOID *)SolActivatingRequest, + sizeof (*SolActivatingRequest), + (VOID *)CompletionCode, + &DataSize + ); + return Status; +} + +/** + This function is used to set parameters such as the network addressing + information required for SOL payload operation. + + @param [in] SetConfigurationParametersRequest Pointer to IPMI_SET_SOL_CONFIGURATION_PARAMETERS_REQUEST. + @param [in] SetConfigurationParametersRequestSize Size of entire SetConfigurationParametersRequestSize. + @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiSetSolConfigurationParameters ( + IN IPMI_SET_SOL_CONFIGURATION_PARAMETERS_REQUEST *SetConfigurationParametersRequest, + IN UINT32 SetConfigurationParametersRequestSize, + OUT UINT8 *CompletionCode + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*CompletionCode); + Status = IpmiSubmitCommand ( + IPMI_NETFN_TRANSPORT, + IPMI_TRANSPORT_SET_SOL_CONFIG_PARAM, + (VOID *)SetConfigurationParametersRequest, + SetConfigurationParametersRequestSize, + (VOID *)CompletionCode, + &DataSize + ); + return Status; +} + +/** + This function is used to retrieve the configuration parameters from the + Set SOL Configuration Parameters. + + @param [in] GetConfigurationParametersRequest Pointer to IPMI_SET_SOL_CONFIGURATION_PARAMETERS_REQUEST. + @param [out] GetConfigurationParametersResponse Pointer to receive IPMI_GET_SOL_CONFIGURATION_PARAMETERS_RESPONSE + @param [in, out] GetConfigurationParametersResponseSize When in, which is the expected size of + response. When out, which is the actual + size returned. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetSolConfigurationParameters ( + IN IPMI_GET_SOL_CONFIGURATION_PARAMETERS_REQUEST *GetConfigurationParametersRequest, + OUT IPMI_GET_SOL_CONFIGURATION_PARAMETERS_RESPONSE *GetConfigurationParametersResponse, + IN OUT UINT32 *GetConfigurationParametersResponseSize + ) +{ + EFI_STATUS Status; + + Status = IpmiSubmitCommand ( + IPMI_NETFN_TRANSPORT, + IPMI_TRANSPORT_GET_SOL_CONFIG_PARAM, + (VOID *)GetConfigurationParametersRequest, + sizeof (*GetConfigurationParametersRequest), + (VOID *)GetConfigurationParametersResponse, + GetConfigurationParametersResponseSize + ); + return Status; +} + +/** + This function gets the LAN configuration parameter. + + @param[in] GetLanConfigurationParametersRequest Request data + @param[out] GetLanConfigurationParametersResponse Response data + @param[in,out] GetLanConfigurationParametersSize When input, the expected size of response data. + When out, the exact size of response data. + + @retval EFI_SUCCESS Lan configuration parameter is returned in the response. + @retval EFI_INVALID_PARAMETER One of the given input parameters is invalid. + @retval Others Other errors. + +**/ +EFI_STATUS +EFIAPI +IpmiGetLanConfigurationParameters ( + IN IPMI_GET_LAN_CONFIGURATION_PARAMETERS_REQUEST *GetLanConfigurationParametersRequest, + OUT IPMI_GET_LAN_CONFIGURATION_PARAMETERS_RESPONSE *GetLanConfigurationParametersResponse, + IN OUT UINT32 *GetLanConfigurationParametersSize + ) +{ + EFI_STATUS Status; + + if ((GetLanConfigurationParametersRequest == NULL) || + (GetLanConfigurationParametersResponse == NULL) || + (GetLanConfigurationParametersSize == NULL)) + { + return EFI_INVALID_PARAMETER; + } + + Status = IpmiSubmitCommand ( + IPMI_NETFN_TRANSPORT, + IPMI_TRANSPORT_GET_LAN_CONFIG_PARAMETERS, + (UINT8 *)GetLanConfigurationParametersRequest, + sizeof (*GetLanConfigurationParametersRequest), + (UINT8 *)GetLanConfigurationParametersResponse, + GetLanConfigurationParametersSize + ); + return Status; +} -- 2.37.1.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#104390): https://edk2.groups.io/g/devel/message/104390 Mute This Topic: https://groups.io/mt/98699831/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=-=-=-=-=-=-=-=-=-=-=-
Reviewed-by: Nickle Wang <nicklew@nvidia.com> Regards, Nickle > -----Original Message----- > From: abner.chang@amd.com <abner.chang@amd.com> > Sent: Friday, May 5, 2023 1:24 PM > To: devel@edk2.groups.io > Cc: Isaac Oram <isaac.w.oram@intel.com>; Abdul Lateef Attar > <abdattar@amd.com>; Nickle Wang <nicklew@nvidia.com>; Tinh Nguyen > <tinhnguyen@os.amperecomputing.com> > Subject: [edk2-platforms][PATCH] ManageabilityPkg/IpmiCommandLib:IPMI > Command Library > > External email: Use caution opening links or attachments > > > From: Abner Chang <abner.chang@amd.com> > > BZ #: 4444 > > IpmiCommandLib is cloned from > edk2-platforms/Features/Intel/OutOfBandManagement/ > IpmiFeaturePkg/Library/IpmiCommandLib in order to > consolidate edk2 system manageability support in > one place. Function header are added to the source > files and header files. Uncustify is applied to C > files and no functionalities are changed in this patch. > > We will still keep the one under IpmiFeaturePkg/Library/ > IpmiCommandLib until the reference to this instance are > removed from platforms. > > Signed-off-by: Abner Chang <abner.chang@amd.com> > Cc: Isaac Oram <isaac.w.oram@intel.com> > Cc: Abdul Lateef Attar <abdattar@amd.com> > Cc: Nickle Wang <nicklew@nvidia.com> > Cc: Tinh Nguyen <tinhnguyen@os.amperecomputing.com> > --- > .../Library/IpmiCommandLib/IpmiCommandLib.inf | 33 + > .../Include/Library/IpmiCommandLib.h | 620 ++++++++++++++++++ > .../IpmiCommandLib/IpmiCommandLibNetFnApp.c | 444 +++++++++++++ > .../IpmiCommandLibNetFnChassis.c | 199 ++++++ > .../IpmiCommandLibNetFnStorage.c | 384 +++++++++++ > .../IpmiCommandLibNetFnTransport.c | 156 +++++ > 6 files changed, 1836 insertions(+) > create mode 100644 > Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLib.inf > create mode 100644 > Features/ManageabilityPkg/Include/Library/IpmiCommandLib.h > create mode 100644 > Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnA > pp.c > create mode 100644 > Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnC > hassis.c > create mode 100644 > Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnSt > orage.c > create mode 100644 > Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnTr > ansport.c > > diff --git > a/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLib.inf > b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLib.inf > new file mode 100644 > index 0000000000..3dc485cf38 > --- /dev/null > +++ > b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLib.inf > @@ -0,0 +1,33 @@ > +### @file > +# Component description file for IPMI Command Library. > +# > +# Copyright (c) 2018 - 2021, Intel Corporation. All rights reserved.<BR> > +# Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.<BR> > +# > +# SPDX-License-Identifier: BSD-2-Clause-Patent > +# > +### > + > +[Defines] > + INF_VERSION = 0x00010005 > + BASE_NAME = IpmiCommandLib > + FILE_GUID = 96FC1989-CB7F-489B-9D3B-68DCA2C2DADC > + MODULE_TYPE = UEFI_DRIVER > + VERSION_STRING = 1.0 > + LIBRARY_CLASS = IpmiCommandLib > + > +[sources] > + IpmiCommandLibNetFnApp.c > + IpmiCommandLibNetFnTransport.c > + IpmiCommandLibNetFnChassis.c > + IpmiCommandLibNetFnStorage.c > + > +[Packages] > + MdePkg/MdePkg.dec > + MdeModulePkg/MdeModulePkg.dec > + ManageabilityPkg/ManageabilityPkg.dec > + > +[LibraryClasses] > + BaseMemoryLib > + DebugLib > + IpmiLib > diff --git a/Features/ManageabilityPkg/Include/Library/IpmiCommandLib.h > b/Features/ManageabilityPkg/Include/Library/IpmiCommandLib.h > new file mode 100644 > index 0000000000..685f6e2ea2 > --- /dev/null > +++ b/Features/ManageabilityPkg/Include/Library/IpmiCommandLib.h > @@ -0,0 +1,620 @@ > +/** @file > + This library abstract how to send/receive IPMI command. > + > +Copyright (c) 2018-2021, Intel Corporation. All rights reserved.<BR> > +Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.<BR> > + > +SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > +#ifndef IPMI_COMMAND_LIB_H_ > +#define IPMI_COMMAND_LIB_H_ > + > +#include <Uefi.h> > +#include <IndustryStandard/Ipmi.h> > + > +/// > +/// Functions for IPMI NetFnApp commands > +/// > + > +/** > + This function is used to retrieve device ID. > + > + @param [out] DeviceId The pointer to receive > IPMI_GET_DEVICE_ID_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetDeviceId ( > + OUT IPMI_GET_DEVICE_ID_RESPONSE *DeviceId > + ); > + > +/** > + This function returns device self test results > + > + @param [out] SelfTestResult The pointer to receive > IPMI_SELF_TEST_RESULT_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetSelfTestResult ( > + OUT IPMI_SELF_TEST_RESULT_RESPONSE *SelfTestResult > + ); > + > +/** > + This function is used for starting and restarting the Watchdog > + Timer from the initial countdown value that was specified in > + the Set Watchdog Timer command the watchdog timer. > + > + @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiResetWatchdogTimer ( > + OUT UINT8 *CompletionCode > + ); > + > +/** > + This function is used for initializing and configuring > + the watchdog timer. > + > + @param [in] SetWatchdogTimer Pointer to receive > IPMI_SET_WATCHDOG_TIMER_REQUEST. > + @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiSetWatchdogTimer ( > + IN IPMI_SET_WATCHDOG_TIMER_REQUEST *SetWatchdogTimer, > + OUT UINT8 *CompletionCode > + ); > + > +/** > + This function retrieves the current settings and present > + countdown of the watchdog timer. > + > + @param [out] GetWatchdogTimer Pointer to receive > IPMI_GET_WATCHDOG_TIMER_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetWatchdogTimer ( > + OUT IPMI_GET_WATCHDOG_TIMER_RESPONSE *GetWatchdogTimer > + ); > + > +/** > + This function enables message reception into Message Buffers, > + and any interrupt associated with that buffer getting full. > + > + @param [in] SetBmcGlobalEnables Pointer receive to > IPMI_SET_BMC_GLOBAL_ENABLES_REQUEST. > + @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiSetBmcGlobalEnables ( > + IN IPMI_SET_BMC_GLOBAL_ENABLES_REQUEST *SetBmcGlobalEnables, > + OUT UINT8 *CompletionCode > + ); > + > +/** > + This function retrieves the present setting of the Global Enables > + > + @param [out] GetBmcGlobalEnables Pointer to receive > IPMI_GET_BMC_GLOBAL_ENABLES_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetBmcGlobalEnables ( > + OUT IPMI_GET_BMC_GLOBAL_ENABLES_RESPONSE *GetBmcGlobalEnables > + ); > + > +/** > + This function is used to flush unread data from the Receive > + Message Queue or Event Message Buffer > + > + @param [in] ClearMessageFlagsRequest > IPMI_CLEAR_MESSAGE_FLAGS_REQUEST > + @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiClearMessageFlags ( > + IN IPMI_CLEAR_MESSAGE_FLAGS_REQUEST *ClearMessageFlagsRequest, > + OUT UINT8 *CompletionCode > + ); > + > +/** > + This function is used to retrieve the present message available states. > + > + @param [out] GetMessageFlagsResponse Pointer to receive > IPMI_GET_MESSAGE_FLAGS_RESPONSE > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetMessageFlags ( > + OUT IPMI_GET_MESSAGE_FLAGS_RESPONSE *GetMessageFlagsResponse > + ); > + > +/** > + This function is used to get data from the Receive Message Queue. > + > + @param [out] GetMessageResponse Pointer to receive > IPMI_GET_MESSAGE_RESPONSE. > + @param [in, out] GetMessageResponseSize When in, which is the expected > size of > + response. When out, which is the actual > + size returned. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetMessage ( > + OUT IPMI_GET_MESSAGE_RESPONSE *GetMessageResponse, > + IN OUT UINT32 *GetMessageResponseSize > + ); > + > +/** > + This function is used for bridging IPMI messages between channels, > + and between the system management software (SMS) and a given channel > + > + @param [in] SendMessageRequest Pointer to > IPMI_SEND_MESSAGE_REQUEST. > + @param [in] SendMessageRequestSize Size of entire > SendMessageRequestSize. > + @param [out] SendMessageResponse Pointer to receive > IPMI_SEND_MESSAGE_RESPONSE. > + @param [in] SendMessageResponseSize When in, which is the expected size > of > + response. When out, which is the actual > + size returned. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiSendMessage ( > + IN IPMI_SEND_MESSAGE_REQUEST *SendMessageRequest, > + IN UINT32 SendMessageRequestSize, > + OUT IPMI_SEND_MESSAGE_RESPONSE *SendMessageResponse, > + IN OUT UINT32 *SendMessageResponseSize > + ); > + > +/** > + This function gets the system UUID. > + > + @param [out] SystemGuid The pointer to retrieve system UUID. > + > + @retval EFI_SUCCESS UUID is returned. > + @retval EFI_INVALID_PARAMETER SystemGuid is a NULL pointer. > + @retval Others See return value of IpmiSubmitCommand () function. > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetSystemUuid ( > + OUT EFI_GUID *SystemGuid > + ); > + > +/** > + This function gets the channel information. > + > + @param [in] GetChannelInfoRequest The get channel information > request. > + @param [out] GetChannelInfoResponse The get channel information > response. > + @param [out] GetChannelInfoResponseSize When input, the expected size > of response. > + When output, the exact size of the returned > + response. > + > + @retval EFI_SUCCESS Get channel information successfully. > + @retval EFI_INVALID_PARAMETER One of the given input parameters is > invalid. > + @retval Others See return value of IpmiSubmitCommand () function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetChannelInfo ( > + IN IPMI_GET_CHANNEL_INFO_REQUEST *GetChannelInfoRequest, > + OUT IPMI_GET_CHANNEL_INFO_RESPONSE *GetChannelInfoResponse, > + OUT UINT32 *GetChannelInfoResponseSize > + ); > + > +/// > +/// Functions for IPMI NetFnTransport commands. > +/// > + > +/** > + This function sends command to BMC to notify a remote application > + that a SOL payload is activating on another channel. > + > + @param [in] SolActivatingRequest Pointer to > IPMI_SOL_ACTIVATING_REQUEST. > + @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiSolActivating ( > + IN IPMI_SOL_ACTIVATING_REQUEST *SolActivatingRequest, > + OUT UINT8 *CompletionCode > + ); > + > +/** > + This function is used to set parameters such as the network addressing > + information required for SOL payload operation. > + > + @param [in] SetConfigurationParametersRequest Pointer to > IPMI_SET_SOL_CONFIGURATION_PARAMETERS_REQUEST. > + @param [in] SetConfigurationParametersRequestSize Size of entire > SetConfigurationParametersRequestSize. > + @param [out] CompletionCode IPMI completetion code, refer > to Ipmi.h. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiSetSolConfigurationParameters ( > + IN IPMI_SET_SOL_CONFIGURATION_PARAMETERS_REQUEST > *SetConfigurationParametersRequest, > + IN UINT32 SetConfigurationParametersRequestSize, > + OUT UINT8 *CompletionCode > + ); > + > +/** > + This function is used to retrieve the configuration parameters from the > + Set SOL Configuration Parameters. > + > + @param [in] GetConfigurationParametersRequest Pointer to > IPMI_SET_SOL_CONFIGURATION_PARAMETERS_REQUEST. > + @param [out] GetConfigurationParametersResponse Pointer to receive > IPMI_GET_SOL_CONFIGURATION_PARAMETERS_RESPONSE. > + @param [in, out] GetConfigurationParametersResponseSize When in, which > is the expected size of > + response. When out, which is the actual > + size returned. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetSolConfigurationParameters ( > + IN IPMI_GET_SOL_CONFIGURATION_PARAMETERS_REQUEST > *GetConfigurationParametersRequest, > + OUT IPMI_GET_SOL_CONFIGURATION_PARAMETERS_RESPONSE > *GetConfigurationParametersResponse, > + IN OUT UINT32 > *GetConfigurationParametersResponseSize > + ); > + > +/** > + This function gets the LAN configuration parameter. > + > + @param[in] GetLanConfigurationParametersRequest Request data > + @param[out] GetLanConfigurationParametersResponse Response data > + @param[in,out] GetLanConfigurationParametersSize When input, the > expected size of response data. > + When out, the exact size of response data. > + > + @retval EFI_SUCCESS Lan configuration parameter is returned in the > response. > + @retval EFI_INVALID_PARAMETER One of the given input parameters is > invalid. > + @retval Others Other errors. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetLanConfigurationParameters ( > + IN IPMI_GET_LAN_CONFIGURATION_PARAMETERS_REQUEST > *GetLanConfigurationParametersRequest, > + OUT IPMI_GET_LAN_CONFIGURATION_PARAMETERS_RESPONSE > *GetLanConfigurationParametersResponse, > + IN OUT UINT32 *GetLanConfigurationParametersSize > + ); > + > +/// > +/// Functions for IPMI NetFnChasis commands > +/// > + > +/** > + This function returns information about which main chassis management > functions are > + present and what addresses are used to access those functions. > + > + @param [out] GetChassisCapabilitiesResponse Pointer to > IPMI_GET_CHASSIS_CAPABILITIES_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetChassisCapabilities ( > + OUT IPMI_GET_CHASSIS_CAPABILITIES_RESPONSE > *GetChassisCapabilitiesResponse > + ); > + > +/** > + This function gets information regarding the high-level status of the system > + chassis and main power subsystem. > + > + @param [out] GetChassisStatusResponse Pointer to > IPMI_GET_CHASSIS_STATUS_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetChassisStatus ( > + OUT IPMI_GET_CHASSIS_STATUS_RESPONSE *GetChassisStatusResponse > + ); > + > +/** > + This function sends command to control power up, power down, and reset. > + > + @param [in] ChassisControlRequest Pointer to > IPMI_CHASSIS_CONTROL_REQUEST. > + @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiChassisControl ( > + IN IPMI_CHASSIS_CONTROL_REQUEST *ChassisControlRequest, > + OUT UINT8 *CompletionCode > + ); > + > +/** > + This function is used to configure the power restore policy. > + > + @param [in] ChassisControlRequest Pointer to > IPMI_SET_POWER_RESTORE_POLICY_REQUEST. > + @param [out] ChassisControlResponse Pointer to > IPMI_SET_POWER_RESTORE_POLICY_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiSetPowerRestorePolicy ( > + IN IPMI_SET_POWER_RESTORE_POLICY_REQUEST *ChassisControlRequest, > + OUT IPMI_SET_POWER_RESTORE_POLICY_RESPONSE > *ChassisControlResponse > + ); > + > +/** > + This function is used to set parameters that direct the system boot > + following a system power up or reset. > + > + @param [in] BootOptionsRequest Pointer to > IPMI_SET_BOOT_OPTIONS_REQUEST. > + @param [out] BootOptionsResponse Pointer to > IPMI_SET_BOOT_OPTIONS_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiSetSystemBootOptions ( > + IN IPMI_SET_BOOT_OPTIONS_REQUEST *BootOptionsRequest, > + OUT IPMI_SET_BOOT_OPTIONS_RESPONSE *BootOptionsResponse > + ); > + > +/** > + This function is used to retrieve the boot options set by the > + Set System Boot Options command. > + > + @param [in] BootOptionsRequest Pointer to > IPMI_GET_BOOT_OPTIONS_REQUEST. > + @param [out] BootOptionsResponse Pointer to > IPMI_GET_BOOT_OPTIONS_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetSystemBootOptions ( > + IN IPMI_GET_BOOT_OPTIONS_REQUEST *BootOptionsRequest, > + OUT IPMI_GET_BOOT_OPTIONS_RESPONSE *BootOptionsResponse > + ); > + > +/// > +/// Functions for IPMI NetFnStorage commands > +/// > + > +/** > + This function is used to retrieve FRU Inventory Area > + > + @param [in] GetFruInventoryAreaInfoRequest Pointer to > IPMI_GET_FRU_INVENTORY_AREA_INFO_REQUEST. > + @param [out] GetFruInventoryAreaInfoResponse Pointer to > IPMI_GET_FRU_INVENTORY_AREA_INFO_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetFruInventoryAreaInfo ( > + IN IPMI_GET_FRU_INVENTORY_AREA_INFO_REQUEST > *GetFruInventoryAreaInfoRequest, > + OUT IPMI_GET_FRU_INVENTORY_AREA_INFO_RESPONSE > *GetFruInventoryAreaInfoResponse > + ); > + > +/** > + This function returns specified data from the FRU Inventory Info area. > + > + @param [in] ReadFruDataRequest Pointer to > IPMI_READ_FRU_DATA_REQUEST. > + @param [out] ReadFruDataResponse Pointer to > IPMI_READ_FRU_DATA_RESPONSE. > + @param [in, out] ReadFruDataResponseSize Returns the size of > ReadFruDataResponse. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiReadFruData ( > + IN IPMI_READ_FRU_DATA_REQUEST *ReadFruDataRequest, > + OUT IPMI_READ_FRU_DATA_RESPONSE *ReadFruDataResponse, > + IN OUT UINT32 *ReadFruDataResponseSize > + ); > + > +/** > + This function writes specified data from the FRU Inventory Info area. > + > + @param [in] WriteFruDataRequest Pointer to > IPMI_WRITE_FRU_DATA_REQUEST. > + @param [in] WriteFruDataRequestSize Size of WriteFruDataRequest. > + @param [out] WriteFruDataResponse Pointer to receive > IPMI_WRITE_FRU_DATA_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiWriteFruData ( > + IN IPMI_WRITE_FRU_DATA_REQUEST *WriteFruDataRequest, > + IN UINT32 WriteFruDataRequestSize, > + OUT IPMI_WRITE_FRU_DATA_RESPONSE *WriteFruDataResponse > + ); > + > +/** > + This function returns the number of entries in the SEL > + > + @param [out] GetSelInfoResponse Pointer to receive > IPMI_GET_SEL_INFO_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetSelInfo ( > + OUT IPMI_GET_SEL_INFO_RESPONSE *GetSelInfoResponse > + ); > + > +/** > + This function retrieves entries from the SEL > + > + @param [in] GetSelEntryRequest Pointer to > IPMI_GET_SEL_ENTRY_REQUEST. > + @param [out] GetSelEntryResponse Pointer to receive > IPMI_GET_SEL_ENTRY_RESPONSE. > + @param [in] GetSelEntryResponseSize Size of entire GetSelEntryResponse. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetSelEntry ( > + IN IPMI_GET_SEL_ENTRY_REQUEST *GetSelEntryRequest, > + OUT IPMI_GET_SEL_ENTRY_RESPONSE *GetSelEntryResponse, > + IN OUT UINT32 *GetSelEntryResponseSize > + ); > + > +/** > + This function adds an entry in the SEL > + > + @param [in] AddSelEntryRequest Pointer to > IPMI_ADD_SEL_ENTRY_REQUEST. > + @param [out] AddSelEntryResponse Pointer to receive > IPMI_ADD_SEL_ENTRY_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiAddSelEntry ( > + IN IPMI_ADD_SEL_ENTRY_REQUEST *AddSelEntryRequest, > + OUT IPMI_ADD_SEL_ENTRY_RESPONSE *AddSelEntryResponse > + ); > + > +/** > + This function adds SEL Entry command that allows the record to be > incrementally > + added to the SEL. > + > + @param [in] PartialAddSelEntryRequest Pointer to > IPMI_PARTIAL_ADD_SEL_ENTRY_REQUEST. > + @param [in] PartialAddSelEntryRequestSize Size of entire > PartialAddSelEntryRequest. > + @param [out] PartialAddSelEntryResponse Pointer to receive > IPMI_PARTIAL_ADD_SEL_ENTRY_RESPONSE. > + > + @retval EFI_STASTUS See return value of IpmiSubmitCommand () function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiPartialAddSelEntry ( > + IN IPMI_PARTIAL_ADD_SEL_ENTRY_REQUEST *PartialAddSelEntryRequest, > + IN UINT32 PartialAddSelEntryRequestSize, > + OUT IPMI_PARTIAL_ADD_SEL_ENTRY_RESPONSE > *PartialAddSelEntryResponse > + ); > + > +/** > + This function erases all contents of the System Event Log. > + > + @param [in] ClearSelRequest Pointer to IPMI_CLEAR_SEL_REQUEST. > + @param [out] ClearSelResponse Pointer to receive > IPMI_CLEAR_SEL_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiClearSel ( > + IN IPMI_CLEAR_SEL_REQUEST *ClearSelRequest, > + OUT IPMI_CLEAR_SEL_RESPONSE *ClearSelResponse > + ); > + > +/** > + This function returns the time from the SEL Device. > + > + @param [out] GetSelTimeResponse Pointer to > IPMI_GET_SEL_TIME_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetSelTime ( > + OUT IPMI_GET_SEL_TIME_RESPONSE *GetSelTimeResponse > + ); > + > +/** > + This function set the time in the SEL Device. > + > + @param [in] SetSelTimeRequest Pointer to IPMI_SET_SEL_TIME_REQUEST. > + @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiSetSelTime ( > + IN IPMI_SET_SEL_TIME_REQUEST *SetSelTimeRequest, > + OUT UINT8 *CompletionCode > + ); > + > +/** > + This function returns the SDR command version for the SDR Repository. > + > + @param [out] ClearSelResponse Pointer to receive > IPMI_GET_SDR_REPOSITORY_INFO_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetSdrRepositoryInfo ( > + OUT IPMI_GET_SDR_REPOSITORY_INFO_RESPONSE > *GetSdrRepositoryInfoResp > + ); > + > +/** > + This function returns the sensor record specified by Record ID. > + > + @param [in] GetSdrRequest Pointer to IPMI_GET_SDR_REQUEST. > + @param [out] GetSdrResponse Pointer to receive > IPMI_GET_SDR_RESPONSE. > + @param [in, out] GetSdrResponseSize Size of entire GetSdrResponse. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetSdr ( > + IN IPMI_GET_SDR_REQUEST *GetSdrRequest, > + OUT IPMI_GET_SDR_RESPONSE *GetSdrResponse, > + IN OUT UINT32 *GetSdrResponseSize > + ); > + > +#endif // IPMI_COMMAND_LIB_H_ > diff --git > a/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFn > App.c > b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFn > App.c > new file mode 100644 > index 0000000000..30c412e2f4 > --- /dev/null > +++ > b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFn > App.c > @@ -0,0 +1,444 @@ > +/** @file > + IPMI Command - NetFnApp. > + > + Copyright (c) 2018 - 2021, Intel Corporation. All rights reserved.<BR> > + Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.<BR> > + > + SPDX-License-Identifier: BSD-2-Clause-Patent > +**/ > + > +#include <PiPei.h> > +#include <Library/BaseMemoryLib.h> > +#include <Library/DebugLib.h> > +#include <Library/IpmiLib.h> > + > +#include <IndustryStandard/Ipmi.h> > + > +/** > + This function is used to retrieve device ID. > + > + @param [out] DeviceId The pointer to receive > IPMI_GET_DEVICE_ID_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetDeviceId ( > + OUT IPMI_GET_DEVICE_ID_RESPONSE *DeviceId > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*DeviceId); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_APP, > + IPMI_APP_GET_DEVICE_ID, > + NULL, > + 0, > + (VOID *)DeviceId, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function returns device self test results > + > + @param [out] SelfTestResult The pointer to receive > IPMI_SELF_TEST_RESULT_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetSelfTestResult ( > + OUT IPMI_SELF_TEST_RESULT_RESPONSE *SelfTestResult > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*SelfTestResult); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_APP, > + IPMI_APP_GET_SELFTEST_RESULTS, > + NULL, > + 0, > + (VOID *)SelfTestResult, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function is used for starting and restarting the Watchdog > + Timer from the initial countdown value that was specified in > + the Set Watchdog Timer command the watchdog timer > + > + @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiResetWatchdogTimer ( > + OUT UINT8 *CompletionCode > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*CompletionCode); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_APP, > + IPMI_APP_RESET_WATCHDOG_TIMER, > + NULL, > + 0, > + (VOID *)CompletionCode, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function is used for initializing and configuring > + the watchdog timer. > + > + @param [in] SetWatchdogTimer Pointer to receive > IPMI_SET_WATCHDOG_TIMER_REQUEST. > + @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiSetWatchdogTimer ( > + IN IPMI_SET_WATCHDOG_TIMER_REQUEST *SetWatchdogTimer, > + OUT UINT8 *CompletionCode > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*CompletionCode); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_APP, > + IPMI_APP_SET_WATCHDOG_TIMER, > + (VOID *)SetWatchdogTimer, > + sizeof (*SetWatchdogTimer), > + (VOID *)CompletionCode, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function retrieves the current settings and present > + countdown of the watchdog timer. > + > + @param [out] GetWatchdogTimer Pointer to receive > IPMI_GET_WATCHDOG_TIMER_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetWatchdogTimer ( > + OUT IPMI_GET_WATCHDOG_TIMER_RESPONSE *GetWatchdogTimer > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*GetWatchdogTimer); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_APP, > + IPMI_APP_GET_WATCHDOG_TIMER, > + NULL, > + 0, > + (VOID *)GetWatchdogTimer, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function enables message reception into Message Buffers, > + and any interrupt associated with that buffer getting full. > + > + @param [in] SetBmcGlobalEnables Pointer receive to > IPMI_SET_BMC_GLOBAL_ENABLES_REQUEST. > + @param [out] CompletionCode IPMI completetion code refer to Ipmi.h. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiSetBmcGlobalEnables ( > + IN IPMI_SET_BMC_GLOBAL_ENABLES_REQUEST *SetBmcGlobalEnables, > + OUT UINT8 *CompletionCode > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*CompletionCode); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_APP, > + IPMI_APP_SET_BMC_GLOBAL_ENABLES, > + (VOID *)SetBmcGlobalEnables, > + sizeof (*SetBmcGlobalEnables), > + (VOID *)CompletionCode, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function retrieves the present setting of the Global Enables > + > + @param [out] GetBmcGlobalEnables Pointer to receive > IPMI_GET_BMC_GLOBAL_ENABLES_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetBmcGlobalEnables ( > + OUT IPMI_GET_BMC_GLOBAL_ENABLES_RESPONSE *GetBmcGlobalEnables > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*GetBmcGlobalEnables); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_APP, > + IPMI_APP_GET_BMC_GLOBAL_ENABLES, > + NULL, > + 0, > + (VOID *)GetBmcGlobalEnables, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function is used to flush unread data from the Receive > + Message Queue or Event Message Buffer > + > + @param [in] ClearMessageFlagsRequest > IPMI_CLEAR_MESSAGE_FLAGS_REQUEST > + @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiClearMessageFlags ( > + IN IPMI_CLEAR_MESSAGE_FLAGS_REQUEST *ClearMessageFlagsRequest, > + OUT UINT8 *CompletionCode > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*CompletionCode); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_APP, > + IPMI_APP_CLEAR_MESSAGE_FLAGS, > + (VOID *)ClearMessageFlagsRequest, > + sizeof (*ClearMessageFlagsRequest), > + (VOID *)CompletionCode, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function is used to retrieve the present message available states. > + > + @param [out] GetMessageFlagsResponse Pointer to receive > IPMI_GET_MESSAGE_FLAGS_RESPONSE > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetMessageFlags ( > + OUT IPMI_GET_MESSAGE_FLAGS_RESPONSE *GetMessageFlagsResponse > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*GetMessageFlagsResponse); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_APP, > + IPMI_APP_GET_MESSAGE_FLAGS, > + NULL, > + 0, > + (VOID *)GetMessageFlagsResponse, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function is used to get data from the Receive Message Queue. > + > + @param [out] GetMessageResponse Pointer to receive > IPMI_GET_MESSAGE_RESPONSE. > + @param [in, out] GetMessageResponseSize When in, which is the expected > size of > + response. When out, which is the actual > + size returned. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetMessage ( > + OUT IPMI_GET_MESSAGE_RESPONSE *GetMessageResponse, > + IN OUT UINT32 *GetMessageResponseSize > + ) > +{ > + EFI_STATUS Status; > + > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_APP, > + IPMI_APP_GET_MESSAGE, > + NULL, > + 0, > + (VOID *)GetMessageResponse, > + GetMessageResponseSize > + ); > + return Status; > +} > + > +/** > + This function is used for bridging IPMI messages between channels, > + and between the system management software (SMS) and a given channel > + > + @param [in] SendMessageRequest Pointer to > IPMI_SEND_MESSAGE_REQUEST. > + @param [in] SendMessageRequestSize Size of entire > SendMessageRequestSize. > + @param [out] SendMessageResponse Pointer to receive > IPMI_SEND_MESSAGE_RESPONSE. > + @param [in] SendMessageResponseSize When in, which is the expected size > of > + response. When out, which is the actual > + size returned. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiSendMessage ( > + IN IPMI_SEND_MESSAGE_REQUEST *SendMessageRequest, > + IN UINT32 SendMessageRequestSize, > + OUT IPMI_SEND_MESSAGE_RESPONSE *SendMessageResponse, > + IN OUT UINT32 *SendMessageResponseSize > + ) > +{ > + EFI_STATUS Status; > + > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_APP, > + IPMI_APP_SEND_MESSAGE, > + (VOID *)SendMessageRequest, > + SendMessageRequestSize, > + (VOID *)SendMessageResponse, > + SendMessageResponseSize > + ); > + return Status; > +} > + > +/** > + This function gets the system UUID. > + > + @param[out] SystemGuid The pointer to retrieve system UUID. > + > + @retval EFI_SUCCESS UUID is returned. > + @retval EFI_INVALID_PARAMETER SystemGuid is a NULL pointer. > + @retval Others See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetSystemUuid ( > + OUT EFI_GUID *SystemGuid > + ) > +{ > + EFI_STATUS Status; > + UINT32 RequestSize; > + UINT32 ResponseSize; > + IPMI_GET_SYSTEM_UUID_RESPONSE GetSystemUuidResponse; > + > + if (SystemGuid == NULL) { > + return EFI_INVALID_PARAMETER; > + } > + > + RequestSize = 0; > + ResponseSize = sizeof (IPMI_GET_SYSTEM_UUID_RESPONSE); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_APP, > + IPMI_APP_GET_SYSTEM_GUID, > + (VOID *)NULL, > + RequestSize, > + (VOID *)&GetSystemUuidResponse, > + &ResponseSize > + ); > + if (!EFI_ERROR (Status) && (GetSystemUuidResponse.CompletionCode == > IPMI_COMP_CODE_NORMAL)) { > + CopyMem ( > + (VOID *)SystemGuid, > + (VOID *)&GetSystemUuidResponse.SystemUuid, > + sizeof (EFI_GUID) > + ); > + } > + > + return Status; > +} > + > +/** > + This function gets the channel information. > + > + @param[in] GetChannelInfoRequest The get channel information > request. > + @param[out] GetChannelInfoResponse The get channel information > response. > + @param[out] GetChannelInfoResponseSize When input, the expected size > of response. > + When output, the exact size of the returned > + response. > + > + @retval EFI_SUCCESS Get channel information successfully. > + @retval EFI_INVALID_PARAMETER One of the given input parameters is > invalid. > + @retval Others See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetChannelInfo ( > + IN IPMI_GET_CHANNEL_INFO_REQUEST *GetChannelInfoRequest, > + OUT IPMI_GET_CHANNEL_INFO_RESPONSE *GetChannelInfoResponse, > + OUT UINT32 *GetChannelInfoResponseSize > + ) > +{ > + EFI_STATUS Status; > + > + if ((GetChannelInfoRequest == NULL) || > + (GetChannelInfoResponse == NULL) || > + (GetChannelInfoResponseSize == NULL)) > + { > + return EFI_INVALID_PARAMETER; > + } > + > + *GetChannelInfoResponseSize = sizeof > (IPMI_GET_CHANNEL_INFO_RESPONSE); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_APP, > + IPMI_APP_GET_CHANNEL_INFO, > + (UINT8 *)GetChannelInfoRequest, > + sizeof (IPMI_GET_CHANNEL_INFO_REQUEST), > + (UINT8 *)GetChannelInfoResponse, > + GetChannelInfoResponseSize > + ); > + return Status; > +} > diff --git > a/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFn > Chassis.c > b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFn > Chassis.c > new file mode 100644 > index 0000000000..12fd997b11 > --- /dev/null > +++ > b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFn > Chassis.c > @@ -0,0 +1,199 @@ > +/** @file > + IPMI Command - NetFnChassis. > + > + Copyright (c) 2018 - 2021, Intel Corporation. All rights reserved.<BR> > + SPDX-License-Identifier: BSD-2-Clause-Patent > +**/ > + > +#include <PiPei.h> > +#include <Library/BaseMemoryLib.h> > +#include <Library/DebugLib.h> > +#include <Library/IpmiLib.h> > + > +#include <IndustryStandard/Ipmi.h> > + > +/** > + This function returns information about which main chassis management > functions are > + present and what addresses are used to access those functions. > + > + @param [out] GetChassisCapabilitiesResponse Pointer to > IPMI_GET_CHASSIS_CAPABILITIES_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetChassisCapabilities ( > + OUT IPMI_GET_CHASSIS_CAPABILITIES_RESPONSE > *GetChassisCapabilitiesResponse > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*GetChassisCapabilitiesResponse); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_CHASSIS, > + IPMI_CHASSIS_GET_CAPABILITIES, > + NULL, > + 0, > + (VOID *)GetChassisCapabilitiesResponse, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function gets information regarding the high-level status of the system > + chassis and main power subsystem. > + > + @param [out] GetChassisStatusResponse Pointer to > IPMI_GET_CHASSIS_STATUS_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetChassisStatus ( > + OUT IPMI_GET_CHASSIS_STATUS_RESPONSE *GetChassisStatusResponse > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*GetChassisStatusResponse); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_CHASSIS, > + IPMI_CHASSIS_GET_STATUS, > + NULL, > + 0, > + (VOID *)GetChassisStatusResponse, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function sends command to control power up, power down, and reset. > + > + @param [in] ChassisControlRequest Pointer to > IPMI_CHASSIS_CONTROL_REQUEST. > + @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiChassisControl ( > + IN IPMI_CHASSIS_CONTROL_REQUEST *ChassisControlRequest, > + OUT UINT8 *CompletionCode > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*CompletionCode); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_CHASSIS, > + IPMI_CHASSIS_CONTROL, > + (VOID *)ChassisControlRequest, > + sizeof (*ChassisControlRequest), > + (VOID *)CompletionCode, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function is used to configure the power restore policy. > + > + @param [in] ChassisControlRequest Pointer to > IPMI_SET_POWER_RESTORE_POLICY_REQUEST. > + @param [out] ChassisControlResponse Pointer to > IPMI_SET_POWER_RESTORE_POLICY_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiSetPowerRestorePolicy ( > + IN IPMI_SET_POWER_RESTORE_POLICY_REQUEST *ChassisControlRequest, > + OUT IPMI_SET_POWER_RESTORE_POLICY_RESPONSE > *ChassisControlResponse > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*ChassisControlResponse); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_CHASSIS, > + IPMI_CHASSIS_SET_POWER_RESTORE_POLICY, > + (VOID *)ChassisControlRequest, > + sizeof (*ChassisControlRequest), > + (VOID *)ChassisControlResponse, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function is used to set parameters that direct the system boot > + following a system power up or reset. > + > + @param [in] BootOptionsRequest Pointer to > IPMI_SET_BOOT_OPTIONS_REQUEST. > + @param [out] BootOptionsResponse Pointer to > IPMI_SET_BOOT_OPTIONS_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiSetSystemBootOptions ( > + IN IPMI_SET_BOOT_OPTIONS_REQUEST *BootOptionsRequest, > + OUT IPMI_SET_BOOT_OPTIONS_RESPONSE *BootOptionsResponse > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*BootOptionsResponse); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_CHASSIS, > + IPMI_CHASSIS_SET_SYSTEM_BOOT_OPTIONS, > + (VOID *)BootOptionsRequest, > + sizeof (*BootOptionsRequest), > + (VOID *)BootOptionsResponse, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function is used to retrieve the boot options set by the > + Set System Boot Options command. > + > + @param [in] BootOptionsRequest Pointer to > IPMI_GET_BOOT_OPTIONS_REQUEST. > + @param [out] BootOptionsResponse Pointer to > IPMI_GET_BOOT_OPTIONS_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetSystemBootOptions ( > + IN IPMI_GET_BOOT_OPTIONS_REQUEST *BootOptionsRequest, > + OUT IPMI_GET_BOOT_OPTIONS_RESPONSE *BootOptionsResponse > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*BootOptionsResponse); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_CHASSIS, > + IPMI_CHASSIS_GET_SYSTEM_BOOT_OPTIONS, > + (VOID *)BootOptionsRequest, > + sizeof (*BootOptionsRequest), > + (VOID *)BootOptionsResponse, > + &DataSize > + ); > + return Status; > +} > diff --git > a/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFn > Storage.c > b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFn > Storage.c > new file mode 100644 > index 0000000000..2dbb7ac9ff > --- /dev/null > +++ > b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFn > Storage.c > @@ -0,0 +1,384 @@ > +/** @file > + IPMI Command - NetFnStorage. > + > + Copyright (c) 2018 - 2021, Intel Corporation. All rights reserved.<BR> > + SPDX-License-Identifier: BSD-2-Clause-Patent > +**/ > + > +#include <PiPei.h> > +#include <Library/BaseMemoryLib.h> > +#include <Library/DebugLib.h> > +#include <Library/IpmiLib.h> > + > +#include <IndustryStandard/Ipmi.h> > + > +/** > + This function is used to retrieve FRU Inventory Area > + > + @param [in] GetFruInventoryAreaInfoRequest Pointer to > IPMI_GET_FRU_INVENTORY_AREA_INFO_REQUEST. > + @param [out] GetFruInventoryAreaInfoResponse Pointer to > IPMI_GET_FRU_INVENTORY_AREA_INFO_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetFruInventoryAreaInfo ( > + IN IPMI_GET_FRU_INVENTORY_AREA_INFO_REQUEST > *GetFruInventoryAreaInfoRequest, > + OUT IPMI_GET_FRU_INVENTORY_AREA_INFO_RESPONSE > *GetFruInventoryAreaInfoResponse > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*GetFruInventoryAreaInfoResponse); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_STORAGE, > + IPMI_STORAGE_GET_FRU_INVENTORY_AREAINFO, > + (VOID *)GetFruInventoryAreaInfoRequest, > + sizeof (*GetFruInventoryAreaInfoRequest), > + (VOID *)GetFruInventoryAreaInfoResponse, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function returns specified data from the FRU Inventory Info area. > + > + @param [in] ReadFruDataRequest Pointer to > IPMI_READ_FRU_DATA_REQUEST. > + @param [in] ReadFruDataResponse Pointer to > IPMI_READ_FRU_DATA_RESPONSE. > + @param [in, out] ReadFruDataResponseSize Returns the size of > ReadFruDataResponse. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiReadFruData ( > + IN IPMI_READ_FRU_DATA_REQUEST *ReadFruDataRequest, > + OUT IPMI_READ_FRU_DATA_RESPONSE *ReadFruDataResponse, > + IN OUT UINT32 *ReadFruDataResponseSize > + ) > +{ > + EFI_STATUS Status; > + > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_STORAGE, > + IPMI_STORAGE_READ_FRU_DATA, > + (VOID *)ReadFruDataRequest, > + sizeof (*ReadFruDataRequest), > + (VOID *)ReadFruDataResponse, > + ReadFruDataResponseSize > + ); > + return Status; > +} > + > +/** > + This function writes specified data from the FRU Inventory Info area. > + > + @param [in] WriteFruDataRequest Pointer to > IPMI_WRITE_FRU_DATA_REQUEST. > + @param [in] WriteFruDataRequestSize Size of WriteFruDataRequest. > + @param [out] WriteFruDataResponse Pointer to receive > IPMI_WRITE_FRU_DATA_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiWriteFruData ( > + IN IPMI_WRITE_FRU_DATA_REQUEST *WriteFruDataRequest, > + IN UINT32 WriteFruDataRequestSize, > + OUT IPMI_WRITE_FRU_DATA_RESPONSE *WriteFruDataResponse > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*WriteFruDataResponse); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_STORAGE, > + IPMI_STORAGE_WRITE_FRU_DATA, > + (VOID *)WriteFruDataRequest, > + WriteFruDataRequestSize, > + (VOID *)WriteFruDataResponse, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function returns the number of entries in the SEL > + > + @param [out] GetSelInfoResponse Pointer to receive > IPMI_GET_SEL_INFO_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetSelInfo ( > + OUT IPMI_GET_SEL_INFO_RESPONSE *GetSelInfoResponse > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*GetSelInfoResponse); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_STORAGE, > + IPMI_STORAGE_GET_SEL_INFO, > + NULL, > + 0, > + (VOID *)GetSelInfoResponse, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function retrieves entries from the SEL > + > + @param [in] GetSelEntryRequest Pointer to > IPMI_GET_SEL_ENTRY_REQUEST. > + @param [out] GetSelEntryResponse Pointer to receive > IPMI_GET_SEL_ENTRY_RESPONSE. > + @param [in, out] GetSelEntryResponseSize Size of entire > GetSelEntryResponse. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetSelEntry ( > + IN IPMI_GET_SEL_ENTRY_REQUEST *GetSelEntryRequest, > + OUT IPMI_GET_SEL_ENTRY_RESPONSE *GetSelEntryResponse, > + IN OUT UINT32 *GetSelEntryResponseSize > + ) > +{ > + EFI_STATUS Status; > + > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_STORAGE, > + IPMI_STORAGE_GET_SEL_ENTRY, > + (VOID *)GetSelEntryRequest, > + sizeof (*GetSelEntryRequest), > + (VOID *)GetSelEntryResponse, > + GetSelEntryResponseSize > + ); > + return Status; > +} > + > +/** > + This function adds an entry in the SEL > + > + @param [in] AddSelEntryRequest Pointer to > IPMI_ADD_SEL_ENTRY_REQUEST. > + @param [out] AddSelEntryResponse Pointer to receive > IPMI_ADD_SEL_ENTRY_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiAddSelEntry ( > + IN IPMI_ADD_SEL_ENTRY_REQUEST *AddSelEntryRequest, > + OUT IPMI_ADD_SEL_ENTRY_RESPONSE *AddSelEntryResponse > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*AddSelEntryResponse); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_STORAGE, > + IPMI_STORAGE_ADD_SEL_ENTRY, > + (VOID *)AddSelEntryRequest, > + sizeof (*AddSelEntryRequest), > + (VOID *)AddSelEntryResponse, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function adds SEL Entry command that allows the record to be > incrementally > + added to the SEL. > + > + @param [in] PartialAddSelEntryRequest Pointer to > IPMI_PARTIAL_ADD_SEL_ENTRY_REQUEST. > + @param [in] PartialAddSelEntryRequestSize Size of entire > PartialAddSelEntryRequest. > + @param [out] PartialAddSelEntryResponse Pointer to receive > IPMI_PARTIAL_ADD_SEL_ENTRY_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiPartialAddSelEntry ( > + IN IPMI_PARTIAL_ADD_SEL_ENTRY_REQUEST *PartialAddSelEntryRequest, > + IN UINT32 PartialAddSelEntryRequestSize, > + OUT IPMI_PARTIAL_ADD_SEL_ENTRY_RESPONSE > *PartialAddSelEntryResponse > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*PartialAddSelEntryResponse); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_STORAGE, > + IPMI_STORAGE_PARTIAL_ADD_SEL_ENTRY, > + (VOID *)PartialAddSelEntryRequest, > + PartialAddSelEntryRequestSize, > + (VOID *)PartialAddSelEntryResponse, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function erases all contents of the System Event Log. > + > + @param [in] ClearSelRequest Pointer to IPMI_CLEAR_SEL_REQUEST. > + @param [out] ClearSelResponse Pointer to receive > IPMI_CLEAR_SEL_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiClearSel ( > + IN IPMI_CLEAR_SEL_REQUEST *ClearSelRequest, > + OUT IPMI_CLEAR_SEL_RESPONSE *ClearSelResponse > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*ClearSelResponse); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_STORAGE, > + IPMI_STORAGE_CLEAR_SEL, > + (VOID *)ClearSelRequest, > + sizeof (*ClearSelRequest), > + (VOID *)ClearSelResponse, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function returns the time from the SEL Device. > + > + @param [out] GetSelTimeResponse Pointer to > IPMI_GET_SEL_TIME_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetSelTime ( > + OUT IPMI_GET_SEL_TIME_RESPONSE *GetSelTimeResponse > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*GetSelTimeResponse); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_STORAGE, > + IPMI_STORAGE_GET_SEL_TIME, > + NULL, > + 0, > + (VOID *)GetSelTimeResponse, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function set the time in the SEL Device. > + > + @param [in] SetSelTimeRequest Pointer to > IPMI_SET_SEL_TIME_REQUEST. > + @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiSetSelTime ( > + IN IPMI_SET_SEL_TIME_REQUEST *SetSelTimeRequest, > + OUT UINT8 *CompletionCode > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*CompletionCode); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_STORAGE, > + IPMI_STORAGE_SET_SEL_TIME, > + (VOID *)SetSelTimeRequest, > + sizeof (*SetSelTimeRequest), > + (VOID *)CompletionCode, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function returns the SDR command version for the SDR Repository > + > + @param [out] ClearSelResponse Pointer to receive > IPMI_GET_SDR_REPOSITORY_INFO_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetSdrRepositoryInfo ( > + OUT IPMI_GET_SDR_REPOSITORY_INFO_RESPONSE > *GetSdrRepositoryInfoResp > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*GetSdrRepositoryInfoResp); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_STORAGE, > + IPMI_STORAGE_GET_SDR_REPOSITORY_INFO, > + NULL, > + 0, > + (VOID *)GetSdrRepositoryInfoResp, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function returns the sensor record specified by Record ID. > + > + @param [in] GetSdrRequest Pointer to IPMI_GET_SDR_REQUEST. > + @param [out] GetSdrResponse Pointer to receive > IPMI_GET_SDR_RESPONSE. > + @param [in, out] GetSdrResponseSize Size of entire GetSdrResponse. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetSdr ( > + IN IPMI_GET_SDR_REQUEST *GetSdrRequest, > + OUT IPMI_GET_SDR_RESPONSE *GetSdrResponse, > + IN OUT UINT32 *GetSdrResponseSize > + ) > +{ > + EFI_STATUS Status; > + > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_STORAGE, > + IPMI_STORAGE_GET_SDR, > + (VOID *)GetSdrRequest, > + sizeof (*GetSdrRequest), > + (VOID *)GetSdrResponse, > + GetSdrResponseSize > + ); > + return Status; > +} > diff --git > a/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFn > Transport.c > b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFn > Transport.c > new file mode 100644 > index 0000000000..a93f7406f1 > --- /dev/null > +++ > b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFn > Transport.c > @@ -0,0 +1,156 @@ > +/** @file > + IPMI Command - NetFnTransport. > + > + Copyright (c) 2018 - 2021, Intel Corporation. All rights reserved.<BR> > + Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.<BR> > + > + SPDX-License-Identifier: BSD-2-Clause-Patent > +**/ > + > +#include <PiPei.h> > +#include <Library/BaseMemoryLib.h> > +#include <Library/DebugLib.h> > +#include <Library/IpmiLib.h> > + > +#include <IndustryStandard/Ipmi.h> > + > +/** > + This function sends command to BMC to notify a remote application > + that a SOL payload is activating on another channel. > + > + @param [in] SolActivatingRequest The get channel information request. > + @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiSolActivating ( > + IN IPMI_SOL_ACTIVATING_REQUEST *SolActivatingRequest, > + OUT UINT8 *CompletionCode > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*CompletionCode); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_TRANSPORT, > + IPMI_TRANSPORT_SOL_ACTIVATING, > + (VOID *)SolActivatingRequest, > + sizeof (*SolActivatingRequest), > + (VOID *)CompletionCode, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function is used to set parameters such as the network addressing > + information required for SOL payload operation. > + > + @param [in] SetConfigurationParametersRequest Pointer to > IPMI_SET_SOL_CONFIGURATION_PARAMETERS_REQUEST. > + @param [in] SetConfigurationParametersRequestSize Size of entire > SetConfigurationParametersRequestSize. > + @param [out] CompletionCode IPMI completetion code, refer > to Ipmi.h. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiSetSolConfigurationParameters ( > + IN IPMI_SET_SOL_CONFIGURATION_PARAMETERS_REQUEST > *SetConfigurationParametersRequest, > + IN UINT32 SetConfigurationParametersRequestSize, > + OUT UINT8 *CompletionCode > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*CompletionCode); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_TRANSPORT, > + IPMI_TRANSPORT_SET_SOL_CONFIG_PARAM, > + (VOID *)SetConfigurationParametersRequest, > + SetConfigurationParametersRequestSize, > + (VOID *)CompletionCode, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function is used to retrieve the configuration parameters from the > + Set SOL Configuration Parameters. > + > + @param [in] GetConfigurationParametersRequest Pointer to > IPMI_SET_SOL_CONFIGURATION_PARAMETERS_REQUEST. > + @param [out] GetConfigurationParametersResponse Pointer to receive > IPMI_GET_SOL_CONFIGURATION_PARAMETERS_RESPONSE > + @param [in, out] GetConfigurationParametersResponseSize When in, which > is the expected size of > + response. When out, which is the actual > + size returned. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetSolConfigurationParameters ( > + IN IPMI_GET_SOL_CONFIGURATION_PARAMETERS_REQUEST > *GetConfigurationParametersRequest, > + OUT IPMI_GET_SOL_CONFIGURATION_PARAMETERS_RESPONSE > *GetConfigurationParametersResponse, > + IN OUT UINT32 > *GetConfigurationParametersResponseSize > + ) > +{ > + EFI_STATUS Status; > + > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_TRANSPORT, > + IPMI_TRANSPORT_GET_SOL_CONFIG_PARAM, > + (VOID *)GetConfigurationParametersRequest, > + sizeof (*GetConfigurationParametersRequest), > + (VOID *)GetConfigurationParametersResponse, > + GetConfigurationParametersResponseSize > + ); > + return Status; > +} > + > +/** > + This function gets the LAN configuration parameter. > + > + @param[in] GetLanConfigurationParametersRequest Request data > + @param[out] GetLanConfigurationParametersResponse Response data > + @param[in,out] GetLanConfigurationParametersSize When input, the > expected size of response data. > + When out, the exact size of response data. > + > + @retval EFI_SUCCESS Lan configuration parameter is returned in the > response. > + @retval EFI_INVALID_PARAMETER One of the given input parameters is > invalid. > + @retval Others Other errors. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetLanConfigurationParameters ( > + IN IPMI_GET_LAN_CONFIGURATION_PARAMETERS_REQUEST > *GetLanConfigurationParametersRequest, > + OUT IPMI_GET_LAN_CONFIGURATION_PARAMETERS_RESPONSE > *GetLanConfigurationParametersResponse, > + IN OUT UINT32 *GetLanConfigurationParametersSize > + ) > +{ > + EFI_STATUS Status; > + > + if ((GetLanConfigurationParametersRequest == NULL) || > + (GetLanConfigurationParametersResponse == NULL) || > + (GetLanConfigurationParametersSize == NULL)) > + { > + return EFI_INVALID_PARAMETER; > + } > + > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_TRANSPORT, > + IPMI_TRANSPORT_GET_LAN_CONFIG_PARAMETERS, > + (UINT8 *)GetLanConfigurationParametersRequest, > + sizeof (*GetLanConfigurationParametersRequest), > + (UINT8 *)GetLanConfigurationParametersResponse, > + GetLanConfigurationParametersSize > + ); > + return Status; > +} > -- > 2.37.1.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#104334): https://edk2.groups.io/g/devel/message/104334 Mute This Topic: https://groups.io/mt/98699831/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=-=-=-=-=-=-=-=-=-=-=-
Reviewed-by: Isaac Oram <isaac.w.oram@intel.com> A few superficial things that could be fixed now or later. Typo: EFI_STASTUS There is a mismatch between function names and parameter names that looks like a cut/paste from prior function. Updating would probably match the spirit of "no functional changes", but it is your choice to correct. IpmiSetPowerRestorePolicy ( IN IPMI_SET_POWER_RESTORE_POLICY_REQUEST *ChassisControlRequest, OUT IPMI_SET_POWER_RESTORE_POLICY_RESPONSE *ChassisControlResponse ) -----Original Message----- From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Chang, Abner via groups.io Sent: Thursday, May 4, 2023 10:24 PM To: devel@edk2.groups.io Cc: Oram, Isaac W <isaac.w.oram@intel.com>; Abdul Lateef Attar <abdattar@amd.com>; Nickle Wang <nicklew@nvidia.com>; Tinh Nguyen <tinhnguyen@os.amperecomputing.com> Subject: [edk2-devel] [edk2-platforms][PATCH] ManageabilityPkg/IpmiCommandLib:IPMI Command Library From: Abner Chang <abner.chang@amd.com> BZ #: 4444 IpmiCommandLib is cloned from edk2-platforms/Features/Intel/OutOfBandManagement/ IpmiFeaturePkg/Library/IpmiCommandLib in order to consolidate edk2 system manageability support in one place. Function header are added to the source files and header files. Uncustify is applied to C files and no functionalities are changed in this patch. We will still keep the one under IpmiFeaturePkg/Library/ IpmiCommandLib until the reference to this instance are removed from platforms. Signed-off-by: Abner Chang <abner.chang@amd.com> Cc: Isaac Oram <isaac.w.oram@intel.com> Cc: Abdul Lateef Attar <abdattar@amd.com> Cc: Nickle Wang <nicklew@nvidia.com> Cc: Tinh Nguyen <tinhnguyen@os.amperecomputing.com> --- .../Library/IpmiCommandLib/IpmiCommandLib.inf | 33 + .../Include/Library/IpmiCommandLib.h | 620 ++++++++++++++++++ .../IpmiCommandLib/IpmiCommandLibNetFnApp.c | 444 +++++++++++++ .../IpmiCommandLibNetFnChassis.c | 199 ++++++ .../IpmiCommandLibNetFnStorage.c | 384 +++++++++++ .../IpmiCommandLibNetFnTransport.c | 156 +++++ 6 files changed, 1836 insertions(+) create mode 100644 Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLib.inf create mode 100644 Features/ManageabilityPkg/Include/Library/IpmiCommandLib.h create mode 100644 Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnApp.c create mode 100644 Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnChassis.c create mode 100644 Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnStorage.c create mode 100644 Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnTransport.c diff --git a/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLib.inf b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLib.inf new file mode 100644 index 0000000000..3dc485cf38 --- /dev/null +++ b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLib.inf @@ -0,0 +1,33 @@ +### @file +# Component description file for IPMI Command Library. +# +# Copyright (c) 2018 - 2021, Intel Corporation. All rights reserved.<BR> +# Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.<BR> +# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +### + +[Defines] + INF_VERSION = 0x00010005 + BASE_NAME = IpmiCommandLib + FILE_GUID = 96FC1989-CB7F-489B-9D3B-68DCA2C2DADC + MODULE_TYPE = UEFI_DRIVER + VERSION_STRING = 1.0 + LIBRARY_CLASS = IpmiCommandLib + +[sources] + IpmiCommandLibNetFnApp.c + IpmiCommandLibNetFnTransport.c + IpmiCommandLibNetFnChassis.c + IpmiCommandLibNetFnStorage.c + +[Packages] + MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec + ManageabilityPkg/ManageabilityPkg.dec + +[LibraryClasses] + BaseMemoryLib + DebugLib + IpmiLib diff --git a/Features/ManageabilityPkg/Include/Library/IpmiCommandLib.h b/Features/ManageabilityPkg/Include/Library/IpmiCommandLib.h new file mode 100644 index 0000000000..685f6e2ea2 --- /dev/null +++ b/Features/ManageabilityPkg/Include/Library/IpmiCommandLib.h @@ -0,0 +1,620 @@ +/** @file + This library abstract how to send/receive IPMI command. + +Copyright (c) 2018-2021, Intel Corporation. All rights reserved.<BR> +Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.<BR> + +SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#ifndef IPMI_COMMAND_LIB_H_ +#define IPMI_COMMAND_LIB_H_ + +#include <Uefi.h> +#include <IndustryStandard/Ipmi.h> + +/// +/// Functions for IPMI NetFnApp commands +/// + +/** + This function is used to retrieve device ID. + + @param [out] DeviceId The pointer to receive IPMI_GET_DEVICE_ID_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetDeviceId ( + OUT IPMI_GET_DEVICE_ID_RESPONSE *DeviceId + ); + +/** + This function returns device self test results + + @param [out] SelfTestResult The pointer to receive IPMI_SELF_TEST_RESULT_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetSelfTestResult ( + OUT IPMI_SELF_TEST_RESULT_RESPONSE *SelfTestResult + ); + +/** + This function is used for starting and restarting the Watchdog + Timer from the initial countdown value that was specified in + the Set Watchdog Timer command the watchdog timer. + + @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiResetWatchdogTimer ( + OUT UINT8 *CompletionCode + ); + +/** + This function is used for initializing and configuring + the watchdog timer. + + @param [in] SetWatchdogTimer Pointer to receive IPMI_SET_WATCHDOG_TIMER_REQUEST. + @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiSetWatchdogTimer ( + IN IPMI_SET_WATCHDOG_TIMER_REQUEST *SetWatchdogTimer, + OUT UINT8 *CompletionCode + ); + +/** + This function retrieves the current settings and present + countdown of the watchdog timer. + + @param [out] GetWatchdogTimer Pointer to receive IPMI_GET_WATCHDOG_TIMER_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetWatchdogTimer ( + OUT IPMI_GET_WATCHDOG_TIMER_RESPONSE *GetWatchdogTimer + ); + +/** + This function enables message reception into Message Buffers, + and any interrupt associated with that buffer getting full. + + @param [in] SetBmcGlobalEnables Pointer receive to IPMI_SET_BMC_GLOBAL_ENABLES_REQUEST. + @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiSetBmcGlobalEnables ( + IN IPMI_SET_BMC_GLOBAL_ENABLES_REQUEST *SetBmcGlobalEnables, + OUT UINT8 *CompletionCode + ); + +/** + This function retrieves the present setting of the Global Enables + + @param [out] GetBmcGlobalEnables Pointer to receive IPMI_GET_BMC_GLOBAL_ENABLES_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetBmcGlobalEnables ( + OUT IPMI_GET_BMC_GLOBAL_ENABLES_RESPONSE *GetBmcGlobalEnables + ); + +/** + This function is used to flush unread data from the Receive + Message Queue or Event Message Buffer + + @param [in] ClearMessageFlagsRequest IPMI_CLEAR_MESSAGE_FLAGS_REQUEST + @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiClearMessageFlags ( + IN IPMI_CLEAR_MESSAGE_FLAGS_REQUEST *ClearMessageFlagsRequest, + OUT UINT8 *CompletionCode + ); + +/** + This function is used to retrieve the present message available states. + + @param [out] GetMessageFlagsResponse Pointer to receive IPMI_GET_MESSAGE_FLAGS_RESPONSE + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetMessageFlags ( + OUT IPMI_GET_MESSAGE_FLAGS_RESPONSE *GetMessageFlagsResponse + ); + +/** + This function is used to get data from the Receive Message Queue. + + @param [out] GetMessageResponse Pointer to receive IPMI_GET_MESSAGE_RESPONSE. + @param [in, out] GetMessageResponseSize When in, which is the expected size of + response. When out, which is the actual + size returned. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetMessage ( + OUT IPMI_GET_MESSAGE_RESPONSE *GetMessageResponse, + IN OUT UINT32 *GetMessageResponseSize + ); + +/** + This function is used for bridging IPMI messages between channels, + and between the system management software (SMS) and a given channel + + @param [in] SendMessageRequest Pointer to IPMI_SEND_MESSAGE_REQUEST. + @param [in] SendMessageRequestSize Size of entire SendMessageRequestSize. + @param [out] SendMessageResponse Pointer to receive IPMI_SEND_MESSAGE_RESPONSE. + @param [in] SendMessageResponseSize When in, which is the expected size of + response. When out, which is the actual + size returned. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiSendMessage ( + IN IPMI_SEND_MESSAGE_REQUEST *SendMessageRequest, + IN UINT32 SendMessageRequestSize, + OUT IPMI_SEND_MESSAGE_RESPONSE *SendMessageResponse, + IN OUT UINT32 *SendMessageResponseSize + ); + +/** + This function gets the system UUID. + + @param [out] SystemGuid The pointer to retrieve system UUID. + + @retval EFI_SUCCESS UUID is returned. + @retval EFI_INVALID_PARAMETER SystemGuid is a NULL pointer. + @retval Others See return value of IpmiSubmitCommand () function. +**/ +EFI_STATUS +EFIAPI +IpmiGetSystemUuid ( + OUT EFI_GUID *SystemGuid + ); + +/** + This function gets the channel information. + + @param [in] GetChannelInfoRequest The get channel information request. + @param [out] GetChannelInfoResponse The get channel information response. + @param [out] GetChannelInfoResponseSize When input, the expected size of response. + When output, the exact size of the returned + response. + + @retval EFI_SUCCESS Get channel information successfully. + @retval EFI_INVALID_PARAMETER One of the given input parameters is invalid. + @retval Others See return value of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetChannelInfo ( + IN IPMI_GET_CHANNEL_INFO_REQUEST *GetChannelInfoRequest, + OUT IPMI_GET_CHANNEL_INFO_RESPONSE *GetChannelInfoResponse, + OUT UINT32 *GetChannelInfoResponseSize + ); + +/// +/// Functions for IPMI NetFnTransport commands. +/// + +/** + This function sends command to BMC to notify a remote application + that a SOL payload is activating on another channel. + + @param [in] SolActivatingRequest Pointer to IPMI_SOL_ACTIVATING_REQUEST. + @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiSolActivating ( + IN IPMI_SOL_ACTIVATING_REQUEST *SolActivatingRequest, + OUT UINT8 *CompletionCode + ); + +/** + This function is used to set parameters such as the network addressing + information required for SOL payload operation. + + @param [in] SetConfigurationParametersRequest Pointer to IPMI_SET_SOL_CONFIGURATION_PARAMETERS_REQUEST. + @param [in] SetConfigurationParametersRequestSize Size of entire SetConfigurationParametersRequestSize. + @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiSetSolConfigurationParameters ( + IN IPMI_SET_SOL_CONFIGURATION_PARAMETERS_REQUEST *SetConfigurationParametersRequest, + IN UINT32 SetConfigurationParametersRequestSize, + OUT UINT8 *CompletionCode + ); + +/** + This function is used to retrieve the configuration parameters from the + Set SOL Configuration Parameters. + + @param [in] GetConfigurationParametersRequest Pointer to IPMI_SET_SOL_CONFIGURATION_PARAMETERS_REQUEST. + @param [out] GetConfigurationParametersResponse Pointer to receive IPMI_GET_SOL_CONFIGURATION_PARAMETERS_RESPONSE. + @param [in, out] GetConfigurationParametersResponseSize When in, which is the expected size of + response. When out, which is the actual + size returned. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetSolConfigurationParameters ( + IN IPMI_GET_SOL_CONFIGURATION_PARAMETERS_REQUEST *GetConfigurationParametersRequest, + OUT IPMI_GET_SOL_CONFIGURATION_PARAMETERS_RESPONSE *GetConfigurationParametersResponse, + IN OUT UINT32 *GetConfigurationParametersResponseSize + ); + +/** + This function gets the LAN configuration parameter. + + @param[in] GetLanConfigurationParametersRequest Request data + @param[out] GetLanConfigurationParametersResponse Response data + @param[in,out] GetLanConfigurationParametersSize When input, the expected size of response data. + When out, the exact size of response data. + + @retval EFI_SUCCESS Lan configuration parameter is returned in the response. + @retval EFI_INVALID_PARAMETER One of the given input parameters is invalid. + @retval Others Other errors. + +**/ +EFI_STATUS +EFIAPI +IpmiGetLanConfigurationParameters ( + IN IPMI_GET_LAN_CONFIGURATION_PARAMETERS_REQUEST *GetLanConfigurationParametersRequest, + OUT IPMI_GET_LAN_CONFIGURATION_PARAMETERS_RESPONSE *GetLanConfigurationParametersResponse, + IN OUT UINT32 *GetLanConfigurationParametersSize + ); + +/// +/// Functions for IPMI NetFnChasis commands +/// + +/** + This function returns information about which main chassis management functions are + present and what addresses are used to access those functions. + + @param [out] GetChassisCapabilitiesResponse Pointer to IPMI_GET_CHASSIS_CAPABILITIES_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetChassisCapabilities ( + OUT IPMI_GET_CHASSIS_CAPABILITIES_RESPONSE *GetChassisCapabilitiesResponse + ); + +/** + This function gets information regarding the high-level status of the system + chassis and main power subsystem. + + @param [out] GetChassisStatusResponse Pointer to IPMI_GET_CHASSIS_STATUS_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetChassisStatus ( + OUT IPMI_GET_CHASSIS_STATUS_RESPONSE *GetChassisStatusResponse + ); + +/** + This function sends command to control power up, power down, and reset. + + @param [in] ChassisControlRequest Pointer to IPMI_CHASSIS_CONTROL_REQUEST. + @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiChassisControl ( + IN IPMI_CHASSIS_CONTROL_REQUEST *ChassisControlRequest, + OUT UINT8 *CompletionCode + ); + +/** + This function is used to configure the power restore policy. + + @param [in] ChassisControlRequest Pointer to IPMI_SET_POWER_RESTORE_POLICY_REQUEST. + @param [out] ChassisControlResponse Pointer to IPMI_SET_POWER_RESTORE_POLICY_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiSetPowerRestorePolicy ( + IN IPMI_SET_POWER_RESTORE_POLICY_REQUEST *ChassisControlRequest, + OUT IPMI_SET_POWER_RESTORE_POLICY_RESPONSE *ChassisControlResponse + ); + +/** + This function is used to set parameters that direct the system boot + following a system power up or reset. + + @param [in] BootOptionsRequest Pointer to IPMI_SET_BOOT_OPTIONS_REQUEST. + @param [out] BootOptionsResponse Pointer to IPMI_SET_BOOT_OPTIONS_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiSetSystemBootOptions ( + IN IPMI_SET_BOOT_OPTIONS_REQUEST *BootOptionsRequest, + OUT IPMI_SET_BOOT_OPTIONS_RESPONSE *BootOptionsResponse + ); + +/** + This function is used to retrieve the boot options set by the + Set System Boot Options command. + + @param [in] BootOptionsRequest Pointer to IPMI_GET_BOOT_OPTIONS_REQUEST. + @param [out] BootOptionsResponse Pointer to IPMI_GET_BOOT_OPTIONS_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetSystemBootOptions ( + IN IPMI_GET_BOOT_OPTIONS_REQUEST *BootOptionsRequest, + OUT IPMI_GET_BOOT_OPTIONS_RESPONSE *BootOptionsResponse + ); + +/// +/// Functions for IPMI NetFnStorage commands +/// + +/** + This function is used to retrieve FRU Inventory Area + + @param [in] GetFruInventoryAreaInfoRequest Pointer to IPMI_GET_FRU_INVENTORY_AREA_INFO_REQUEST. + @param [out] GetFruInventoryAreaInfoResponse Pointer to IPMI_GET_FRU_INVENTORY_AREA_INFO_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetFruInventoryAreaInfo ( + IN IPMI_GET_FRU_INVENTORY_AREA_INFO_REQUEST *GetFruInventoryAreaInfoRequest, + OUT IPMI_GET_FRU_INVENTORY_AREA_INFO_RESPONSE *GetFruInventoryAreaInfoResponse + ); + +/** + This function returns specified data from the FRU Inventory Info area. + + @param [in] ReadFruDataRequest Pointer to IPMI_READ_FRU_DATA_REQUEST. + @param [out] ReadFruDataResponse Pointer to IPMI_READ_FRU_DATA_RESPONSE. + @param [in, out] ReadFruDataResponseSize Returns the size of ReadFruDataResponse. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiReadFruData ( + IN IPMI_READ_FRU_DATA_REQUEST *ReadFruDataRequest, + OUT IPMI_READ_FRU_DATA_RESPONSE *ReadFruDataResponse, + IN OUT UINT32 *ReadFruDataResponseSize + ); + +/** + This function writes specified data from the FRU Inventory Info area. + + @param [in] WriteFruDataRequest Pointer to IPMI_WRITE_FRU_DATA_REQUEST. + @param [in] WriteFruDataRequestSize Size of WriteFruDataRequest. + @param [out] WriteFruDataResponse Pointer to receive IPMI_WRITE_FRU_DATA_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiWriteFruData ( + IN IPMI_WRITE_FRU_DATA_REQUEST *WriteFruDataRequest, + IN UINT32 WriteFruDataRequestSize, + OUT IPMI_WRITE_FRU_DATA_RESPONSE *WriteFruDataResponse + ); + +/** + This function returns the number of entries in the SEL + + @param [out] GetSelInfoResponse Pointer to receive IPMI_GET_SEL_INFO_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetSelInfo ( + OUT IPMI_GET_SEL_INFO_RESPONSE *GetSelInfoResponse + ); + +/** + This function retrieves entries from the SEL + + @param [in] GetSelEntryRequest Pointer to IPMI_GET_SEL_ENTRY_REQUEST. + @param [out] GetSelEntryResponse Pointer to receive IPMI_GET_SEL_ENTRY_RESPONSE. + @param [in] GetSelEntryResponseSize Size of entire GetSelEntryResponse. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetSelEntry ( + IN IPMI_GET_SEL_ENTRY_REQUEST *GetSelEntryRequest, + OUT IPMI_GET_SEL_ENTRY_RESPONSE *GetSelEntryResponse, + IN OUT UINT32 *GetSelEntryResponseSize + ); + +/** + This function adds an entry in the SEL + + @param [in] AddSelEntryRequest Pointer to IPMI_ADD_SEL_ENTRY_REQUEST. + @param [out] AddSelEntryResponse Pointer to receive IPMI_ADD_SEL_ENTRY_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiAddSelEntry ( + IN IPMI_ADD_SEL_ENTRY_REQUEST *AddSelEntryRequest, + OUT IPMI_ADD_SEL_ENTRY_RESPONSE *AddSelEntryResponse + ); + +/** + This function adds SEL Entry command that allows the record to be incrementally + added to the SEL. + + @param [in] PartialAddSelEntryRequest Pointer to IPMI_PARTIAL_ADD_SEL_ENTRY_REQUEST. + @param [in] PartialAddSelEntryRequestSize Size of entire PartialAddSelEntryRequest. + @param [out] PartialAddSelEntryResponse Pointer to receive IPMI_PARTIAL_ADD_SEL_ENTRY_RESPONSE. + + @retval EFI_STASTUS See return value of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiPartialAddSelEntry ( + IN IPMI_PARTIAL_ADD_SEL_ENTRY_REQUEST *PartialAddSelEntryRequest, + IN UINT32 PartialAddSelEntryRequestSize, + OUT IPMI_PARTIAL_ADD_SEL_ENTRY_RESPONSE *PartialAddSelEntryResponse + ); + +/** + This function erases all contents of the System Event Log. + + @param [in] ClearSelRequest Pointer to IPMI_CLEAR_SEL_REQUEST. + @param [out] ClearSelResponse Pointer to receive IPMI_CLEAR_SEL_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiClearSel ( + IN IPMI_CLEAR_SEL_REQUEST *ClearSelRequest, + OUT IPMI_CLEAR_SEL_RESPONSE *ClearSelResponse + ); + +/** + This function returns the time from the SEL Device. + + @param [out] GetSelTimeResponse Pointer to IPMI_GET_SEL_TIME_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetSelTime ( + OUT IPMI_GET_SEL_TIME_RESPONSE *GetSelTimeResponse + ); + +/** + This function set the time in the SEL Device. + + @param [in] SetSelTimeRequest Pointer to IPMI_SET_SEL_TIME_REQUEST. + @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiSetSelTime ( + IN IPMI_SET_SEL_TIME_REQUEST *SetSelTimeRequest, + OUT UINT8 *CompletionCode + ); + +/** + This function returns the SDR command version for the SDR Repository. + + @param [out] ClearSelResponse Pointer to receive IPMI_GET_SDR_REPOSITORY_INFO_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetSdrRepositoryInfo ( + OUT IPMI_GET_SDR_REPOSITORY_INFO_RESPONSE *GetSdrRepositoryInfoResp + ); + +/** + This function returns the sensor record specified by Record ID. + + @param [in] GetSdrRequest Pointer to IPMI_GET_SDR_REQUEST. + @param [out] GetSdrResponse Pointer to receive IPMI_GET_SDR_RESPONSE. + @param [in, out] GetSdrResponseSize Size of entire GetSdrResponse. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetSdr ( + IN IPMI_GET_SDR_REQUEST *GetSdrRequest, + OUT IPMI_GET_SDR_RESPONSE *GetSdrResponse, + IN OUT UINT32 *GetSdrResponseSize + ); + +#endif // IPMI_COMMAND_LIB_H_ diff --git a/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnApp.c b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnApp.c new file mode 100644 index 0000000000..30c412e2f4 --- /dev/null +++ b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnApp.c @@ -0,0 +1,444 @@ +/** @file + IPMI Command - NetFnApp. + + Copyright (c) 2018 - 2021, Intel Corporation. All rights reserved.<BR> + Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.<BR> + + SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#include <PiPei.h> +#include <Library/BaseMemoryLib.h> +#include <Library/DebugLib.h> +#include <Library/IpmiLib.h> + +#include <IndustryStandard/Ipmi.h> + +/** + This function is used to retrieve device ID. + + @param [out] DeviceId The pointer to receive IPMI_GET_DEVICE_ID_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetDeviceId ( + OUT IPMI_GET_DEVICE_ID_RESPONSE *DeviceId + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*DeviceId); + Status = IpmiSubmitCommand ( + IPMI_NETFN_APP, + IPMI_APP_GET_DEVICE_ID, + NULL, + 0, + (VOID *)DeviceId, + &DataSize + ); + return Status; +} + +/** + This function returns device self test results + + @param [out] SelfTestResult The pointer to receive IPMI_SELF_TEST_RESULT_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetSelfTestResult ( + OUT IPMI_SELF_TEST_RESULT_RESPONSE *SelfTestResult + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*SelfTestResult); + Status = IpmiSubmitCommand ( + IPMI_NETFN_APP, + IPMI_APP_GET_SELFTEST_RESULTS, + NULL, + 0, + (VOID *)SelfTestResult, + &DataSize + ); + return Status; +} + +/** + This function is used for starting and restarting the Watchdog + Timer from the initial countdown value that was specified in + the Set Watchdog Timer command the watchdog timer + + @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiResetWatchdogTimer ( + OUT UINT8 *CompletionCode + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*CompletionCode); + Status = IpmiSubmitCommand ( + IPMI_NETFN_APP, + IPMI_APP_RESET_WATCHDOG_TIMER, + NULL, + 0, + (VOID *)CompletionCode, + &DataSize + ); + return Status; +} + +/** + This function is used for initializing and configuring + the watchdog timer. + + @param [in] SetWatchdogTimer Pointer to receive IPMI_SET_WATCHDOG_TIMER_REQUEST. + @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiSetWatchdogTimer ( + IN IPMI_SET_WATCHDOG_TIMER_REQUEST *SetWatchdogTimer, + OUT UINT8 *CompletionCode + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*CompletionCode); + Status = IpmiSubmitCommand ( + IPMI_NETFN_APP, + IPMI_APP_SET_WATCHDOG_TIMER, + (VOID *)SetWatchdogTimer, + sizeof (*SetWatchdogTimer), + (VOID *)CompletionCode, + &DataSize + ); + return Status; +} + +/** + This function retrieves the current settings and present + countdown of the watchdog timer. + + @param [out] GetWatchdogTimer Pointer to receive IPMI_GET_WATCHDOG_TIMER_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetWatchdogTimer ( + OUT IPMI_GET_WATCHDOG_TIMER_RESPONSE *GetWatchdogTimer + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*GetWatchdogTimer); + Status = IpmiSubmitCommand ( + IPMI_NETFN_APP, + IPMI_APP_GET_WATCHDOG_TIMER, + NULL, + 0, + (VOID *)GetWatchdogTimer, + &DataSize + ); + return Status; +} + +/** + This function enables message reception into Message Buffers, + and any interrupt associated with that buffer getting full. + + @param [in] SetBmcGlobalEnables Pointer receive to IPMI_SET_BMC_GLOBAL_ENABLES_REQUEST. + @param [out] CompletionCode IPMI completetion code refer to Ipmi.h. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiSetBmcGlobalEnables ( + IN IPMI_SET_BMC_GLOBAL_ENABLES_REQUEST *SetBmcGlobalEnables, + OUT UINT8 *CompletionCode + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*CompletionCode); + Status = IpmiSubmitCommand ( + IPMI_NETFN_APP, + IPMI_APP_SET_BMC_GLOBAL_ENABLES, + (VOID *)SetBmcGlobalEnables, + sizeof (*SetBmcGlobalEnables), + (VOID *)CompletionCode, + &DataSize + ); + return Status; +} + +/** + This function retrieves the present setting of the Global Enables + + @param [out] GetBmcGlobalEnables Pointer to receive IPMI_GET_BMC_GLOBAL_ENABLES_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetBmcGlobalEnables ( + OUT IPMI_GET_BMC_GLOBAL_ENABLES_RESPONSE *GetBmcGlobalEnables + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*GetBmcGlobalEnables); + Status = IpmiSubmitCommand ( + IPMI_NETFN_APP, + IPMI_APP_GET_BMC_GLOBAL_ENABLES, + NULL, + 0, + (VOID *)GetBmcGlobalEnables, + &DataSize + ); + return Status; +} + +/** + This function is used to flush unread data from the Receive + Message Queue or Event Message Buffer + + @param [in] ClearMessageFlagsRequest IPMI_CLEAR_MESSAGE_FLAGS_REQUEST + @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiClearMessageFlags ( + IN IPMI_CLEAR_MESSAGE_FLAGS_REQUEST *ClearMessageFlagsRequest, + OUT UINT8 *CompletionCode + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*CompletionCode); + Status = IpmiSubmitCommand ( + IPMI_NETFN_APP, + IPMI_APP_CLEAR_MESSAGE_FLAGS, + (VOID *)ClearMessageFlagsRequest, + sizeof (*ClearMessageFlagsRequest), + (VOID *)CompletionCode, + &DataSize + ); + return Status; +} + +/** + This function is used to retrieve the present message available states. + + @param [out] GetMessageFlagsResponse Pointer to receive IPMI_GET_MESSAGE_FLAGS_RESPONSE + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetMessageFlags ( + OUT IPMI_GET_MESSAGE_FLAGS_RESPONSE *GetMessageFlagsResponse + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*GetMessageFlagsResponse); + Status = IpmiSubmitCommand ( + IPMI_NETFN_APP, + IPMI_APP_GET_MESSAGE_FLAGS, + NULL, + 0, + (VOID *)GetMessageFlagsResponse, + &DataSize + ); + return Status; +} + +/** + This function is used to get data from the Receive Message Queue. + + @param [out] GetMessageResponse Pointer to receive IPMI_GET_MESSAGE_RESPONSE. + @param [in, out] GetMessageResponseSize When in, which is the expected size of + response. When out, which is the actual + size returned. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetMessage ( + OUT IPMI_GET_MESSAGE_RESPONSE *GetMessageResponse, + IN OUT UINT32 *GetMessageResponseSize + ) +{ + EFI_STATUS Status; + + Status = IpmiSubmitCommand ( + IPMI_NETFN_APP, + IPMI_APP_GET_MESSAGE, + NULL, + 0, + (VOID *)GetMessageResponse, + GetMessageResponseSize + ); + return Status; +} + +/** + This function is used for bridging IPMI messages between channels, + and between the system management software (SMS) and a given channel + + @param [in] SendMessageRequest Pointer to IPMI_SEND_MESSAGE_REQUEST. + @param [in] SendMessageRequestSize Size of entire SendMessageRequestSize. + @param [out] SendMessageResponse Pointer to receive IPMI_SEND_MESSAGE_RESPONSE. + @param [in] SendMessageResponseSize When in, which is the expected size of + response. When out, which is the actual + size returned. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiSendMessage ( + IN IPMI_SEND_MESSAGE_REQUEST *SendMessageRequest, + IN UINT32 SendMessageRequestSize, + OUT IPMI_SEND_MESSAGE_RESPONSE *SendMessageResponse, + IN OUT UINT32 *SendMessageResponseSize + ) +{ + EFI_STATUS Status; + + Status = IpmiSubmitCommand ( + IPMI_NETFN_APP, + IPMI_APP_SEND_MESSAGE, + (VOID *)SendMessageRequest, + SendMessageRequestSize, + (VOID *)SendMessageResponse, + SendMessageResponseSize + ); + return Status; +} + +/** + This function gets the system UUID. + + @param[out] SystemGuid The pointer to retrieve system UUID. + + @retval EFI_SUCCESS UUID is returned. + @retval EFI_INVALID_PARAMETER SystemGuid is a NULL pointer. + @retval Others See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetSystemUuid ( + OUT EFI_GUID *SystemGuid + ) +{ + EFI_STATUS Status; + UINT32 RequestSize; + UINT32 ResponseSize; + IPMI_GET_SYSTEM_UUID_RESPONSE GetSystemUuidResponse; + + if (SystemGuid == NULL) { + return EFI_INVALID_PARAMETER; + } + + RequestSize = 0; + ResponseSize = sizeof (IPMI_GET_SYSTEM_UUID_RESPONSE); + Status = IpmiSubmitCommand ( + IPMI_NETFN_APP, + IPMI_APP_GET_SYSTEM_GUID, + (VOID *)NULL, + RequestSize, + (VOID *)&GetSystemUuidResponse, + &ResponseSize + ); + if (!EFI_ERROR (Status) && (GetSystemUuidResponse.CompletionCode == IPMI_COMP_CODE_NORMAL)) { + CopyMem ( + (VOID *)SystemGuid, + (VOID *)&GetSystemUuidResponse.SystemUuid, + sizeof (EFI_GUID) + ); + } + + return Status; +} + +/** + This function gets the channel information. + + @param[in] GetChannelInfoRequest The get channel information request. + @param[out] GetChannelInfoResponse The get channel information response. + @param[out] GetChannelInfoResponseSize When input, the expected size of response. + When output, the exact size of the returned + response. + + @retval EFI_SUCCESS Get channel information successfully. + @retval EFI_INVALID_PARAMETER One of the given input parameters is invalid. + @retval Others See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetChannelInfo ( + IN IPMI_GET_CHANNEL_INFO_REQUEST *GetChannelInfoRequest, + OUT IPMI_GET_CHANNEL_INFO_RESPONSE *GetChannelInfoResponse, + OUT UINT32 *GetChannelInfoResponseSize + ) +{ + EFI_STATUS Status; + + if ((GetChannelInfoRequest == NULL) || + (GetChannelInfoResponse == NULL) || + (GetChannelInfoResponseSize == NULL)) + { + return EFI_INVALID_PARAMETER; + } + + *GetChannelInfoResponseSize = sizeof (IPMI_GET_CHANNEL_INFO_RESPONSE); + Status = IpmiSubmitCommand ( + IPMI_NETFN_APP, + IPMI_APP_GET_CHANNEL_INFO, + (UINT8 *)GetChannelInfoRequest, + sizeof (IPMI_GET_CHANNEL_INFO_REQUEST), + (UINT8 *)GetChannelInfoResponse, + GetChannelInfoResponseSize + ); + return Status; +} diff --git a/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnChassis.c b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnChassis.c new file mode 100644 index 0000000000..12fd997b11 --- /dev/null +++ b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnChassis.c @@ -0,0 +1,199 @@ +/** @file + IPMI Command - NetFnChassis. + + Copyright (c) 2018 - 2021, Intel Corporation. All rights reserved.<BR> + SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#include <PiPei.h> +#include <Library/BaseMemoryLib.h> +#include <Library/DebugLib.h> +#include <Library/IpmiLib.h> + +#include <IndustryStandard/Ipmi.h> + +/** + This function returns information about which main chassis management functions are + present and what addresses are used to access those functions. + + @param [out] GetChassisCapabilitiesResponse Pointer to IPMI_GET_CHASSIS_CAPABILITIES_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetChassisCapabilities ( + OUT IPMI_GET_CHASSIS_CAPABILITIES_RESPONSE *GetChassisCapabilitiesResponse + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*GetChassisCapabilitiesResponse); + Status = IpmiSubmitCommand ( + IPMI_NETFN_CHASSIS, + IPMI_CHASSIS_GET_CAPABILITIES, + NULL, + 0, + (VOID *)GetChassisCapabilitiesResponse, + &DataSize + ); + return Status; +} + +/** + This function gets information regarding the high-level status of the system + chassis and main power subsystem. + + @param [out] GetChassisStatusResponse Pointer to IPMI_GET_CHASSIS_STATUS_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetChassisStatus ( + OUT IPMI_GET_CHASSIS_STATUS_RESPONSE *GetChassisStatusResponse + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*GetChassisStatusResponse); + Status = IpmiSubmitCommand ( + IPMI_NETFN_CHASSIS, + IPMI_CHASSIS_GET_STATUS, + NULL, + 0, + (VOID *)GetChassisStatusResponse, + &DataSize + ); + return Status; +} + +/** + This function sends command to control power up, power down, and reset. + + @param [in] ChassisControlRequest Pointer to IPMI_CHASSIS_CONTROL_REQUEST. + @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiChassisControl ( + IN IPMI_CHASSIS_CONTROL_REQUEST *ChassisControlRequest, + OUT UINT8 *CompletionCode + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*CompletionCode); + Status = IpmiSubmitCommand ( + IPMI_NETFN_CHASSIS, + IPMI_CHASSIS_CONTROL, + (VOID *)ChassisControlRequest, + sizeof (*ChassisControlRequest), + (VOID *)CompletionCode, + &DataSize + ); + return Status; +} + +/** + This function is used to configure the power restore policy. + + @param [in] ChassisControlRequest Pointer to IPMI_SET_POWER_RESTORE_POLICY_REQUEST. + @param [out] ChassisControlResponse Pointer to IPMI_SET_POWER_RESTORE_POLICY_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiSetPowerRestorePolicy ( + IN IPMI_SET_POWER_RESTORE_POLICY_REQUEST *ChassisControlRequest, + OUT IPMI_SET_POWER_RESTORE_POLICY_RESPONSE *ChassisControlResponse + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*ChassisControlResponse); + Status = IpmiSubmitCommand ( + IPMI_NETFN_CHASSIS, + IPMI_CHASSIS_SET_POWER_RESTORE_POLICY, + (VOID *)ChassisControlRequest, + sizeof (*ChassisControlRequest), + (VOID *)ChassisControlResponse, + &DataSize + ); + return Status; +} + +/** + This function is used to set parameters that direct the system boot + following a system power up or reset. + + @param [in] BootOptionsRequest Pointer to IPMI_SET_BOOT_OPTIONS_REQUEST. + @param [out] BootOptionsResponse Pointer to IPMI_SET_BOOT_OPTIONS_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiSetSystemBootOptions ( + IN IPMI_SET_BOOT_OPTIONS_REQUEST *BootOptionsRequest, + OUT IPMI_SET_BOOT_OPTIONS_RESPONSE *BootOptionsResponse + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*BootOptionsResponse); + Status = IpmiSubmitCommand ( + IPMI_NETFN_CHASSIS, + IPMI_CHASSIS_SET_SYSTEM_BOOT_OPTIONS, + (VOID *)BootOptionsRequest, + sizeof (*BootOptionsRequest), + (VOID *)BootOptionsResponse, + &DataSize + ); + return Status; +} + +/** + This function is used to retrieve the boot options set by the + Set System Boot Options command. + + @param [in] BootOptionsRequest Pointer to IPMI_GET_BOOT_OPTIONS_REQUEST. + @param [out] BootOptionsResponse Pointer to IPMI_GET_BOOT_OPTIONS_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetSystemBootOptions ( + IN IPMI_GET_BOOT_OPTIONS_REQUEST *BootOptionsRequest, + OUT IPMI_GET_BOOT_OPTIONS_RESPONSE *BootOptionsResponse + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*BootOptionsResponse); + Status = IpmiSubmitCommand ( + IPMI_NETFN_CHASSIS, + IPMI_CHASSIS_GET_SYSTEM_BOOT_OPTIONS, + (VOID *)BootOptionsRequest, + sizeof (*BootOptionsRequest), + (VOID *)BootOptionsResponse, + &DataSize + ); + return Status; +} diff --git a/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnStorage.c b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnStorage.c new file mode 100644 index 0000000000..2dbb7ac9ff --- /dev/null +++ b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnStorage.c @@ -0,0 +1,384 @@ +/** @file + IPMI Command - NetFnStorage. + + Copyright (c) 2018 - 2021, Intel Corporation. All rights reserved.<BR> + SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#include <PiPei.h> +#include <Library/BaseMemoryLib.h> +#include <Library/DebugLib.h> +#include <Library/IpmiLib.h> + +#include <IndustryStandard/Ipmi.h> + +/** + This function is used to retrieve FRU Inventory Area + + @param [in] GetFruInventoryAreaInfoRequest Pointer to IPMI_GET_FRU_INVENTORY_AREA_INFO_REQUEST. + @param [out] GetFruInventoryAreaInfoResponse Pointer to IPMI_GET_FRU_INVENTORY_AREA_INFO_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetFruInventoryAreaInfo ( + IN IPMI_GET_FRU_INVENTORY_AREA_INFO_REQUEST *GetFruInventoryAreaInfoRequest, + OUT IPMI_GET_FRU_INVENTORY_AREA_INFO_RESPONSE *GetFruInventoryAreaInfoResponse + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*GetFruInventoryAreaInfoResponse); + Status = IpmiSubmitCommand ( + IPMI_NETFN_STORAGE, + IPMI_STORAGE_GET_FRU_INVENTORY_AREAINFO, + (VOID *)GetFruInventoryAreaInfoRequest, + sizeof (*GetFruInventoryAreaInfoRequest), + (VOID *)GetFruInventoryAreaInfoResponse, + &DataSize + ); + return Status; +} + +/** + This function returns specified data from the FRU Inventory Info area. + + @param [in] ReadFruDataRequest Pointer to IPMI_READ_FRU_DATA_REQUEST. + @param [in] ReadFruDataResponse Pointer to IPMI_READ_FRU_DATA_RESPONSE. + @param [in, out] ReadFruDataResponseSize Returns the size of ReadFruDataResponse. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiReadFruData ( + IN IPMI_READ_FRU_DATA_REQUEST *ReadFruDataRequest, + OUT IPMI_READ_FRU_DATA_RESPONSE *ReadFruDataResponse, + IN OUT UINT32 *ReadFruDataResponseSize + ) +{ + EFI_STATUS Status; + + Status = IpmiSubmitCommand ( + IPMI_NETFN_STORAGE, + IPMI_STORAGE_READ_FRU_DATA, + (VOID *)ReadFruDataRequest, + sizeof (*ReadFruDataRequest), + (VOID *)ReadFruDataResponse, + ReadFruDataResponseSize + ); + return Status; +} + +/** + This function writes specified data from the FRU Inventory Info area. + + @param [in] WriteFruDataRequest Pointer to IPMI_WRITE_FRU_DATA_REQUEST. + @param [in] WriteFruDataRequestSize Size of WriteFruDataRequest. + @param [out] WriteFruDataResponse Pointer to receive IPMI_WRITE_FRU_DATA_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiWriteFruData ( + IN IPMI_WRITE_FRU_DATA_REQUEST *WriteFruDataRequest, + IN UINT32 WriteFruDataRequestSize, + OUT IPMI_WRITE_FRU_DATA_RESPONSE *WriteFruDataResponse + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*WriteFruDataResponse); + Status = IpmiSubmitCommand ( + IPMI_NETFN_STORAGE, + IPMI_STORAGE_WRITE_FRU_DATA, + (VOID *)WriteFruDataRequest, + WriteFruDataRequestSize, + (VOID *)WriteFruDataResponse, + &DataSize + ); + return Status; +} + +/** + This function returns the number of entries in the SEL + + @param [out] GetSelInfoResponse Pointer to receive IPMI_GET_SEL_INFO_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetSelInfo ( + OUT IPMI_GET_SEL_INFO_RESPONSE *GetSelInfoResponse + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*GetSelInfoResponse); + Status = IpmiSubmitCommand ( + IPMI_NETFN_STORAGE, + IPMI_STORAGE_GET_SEL_INFO, + NULL, + 0, + (VOID *)GetSelInfoResponse, + &DataSize + ); + return Status; +} + +/** + This function retrieves entries from the SEL + + @param [in] GetSelEntryRequest Pointer to IPMI_GET_SEL_ENTRY_REQUEST. + @param [out] GetSelEntryResponse Pointer to receive IPMI_GET_SEL_ENTRY_RESPONSE. + @param [in, out] GetSelEntryResponseSize Size of entire GetSelEntryResponse. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetSelEntry ( + IN IPMI_GET_SEL_ENTRY_REQUEST *GetSelEntryRequest, + OUT IPMI_GET_SEL_ENTRY_RESPONSE *GetSelEntryResponse, + IN OUT UINT32 *GetSelEntryResponseSize + ) +{ + EFI_STATUS Status; + + Status = IpmiSubmitCommand ( + IPMI_NETFN_STORAGE, + IPMI_STORAGE_GET_SEL_ENTRY, + (VOID *)GetSelEntryRequest, + sizeof (*GetSelEntryRequest), + (VOID *)GetSelEntryResponse, + GetSelEntryResponseSize + ); + return Status; +} + +/** + This function adds an entry in the SEL + + @param [in] AddSelEntryRequest Pointer to IPMI_ADD_SEL_ENTRY_REQUEST. + @param [out] AddSelEntryResponse Pointer to receive IPMI_ADD_SEL_ENTRY_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiAddSelEntry ( + IN IPMI_ADD_SEL_ENTRY_REQUEST *AddSelEntryRequest, + OUT IPMI_ADD_SEL_ENTRY_RESPONSE *AddSelEntryResponse + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*AddSelEntryResponse); + Status = IpmiSubmitCommand ( + IPMI_NETFN_STORAGE, + IPMI_STORAGE_ADD_SEL_ENTRY, + (VOID *)AddSelEntryRequest, + sizeof (*AddSelEntryRequest), + (VOID *)AddSelEntryResponse, + &DataSize + ); + return Status; +} + +/** + This function adds SEL Entry command that allows the record to be incrementally + added to the SEL. + + @param [in] PartialAddSelEntryRequest Pointer to IPMI_PARTIAL_ADD_SEL_ENTRY_REQUEST. + @param [in] PartialAddSelEntryRequestSize Size of entire PartialAddSelEntryRequest. + @param [out] PartialAddSelEntryResponse Pointer to receive IPMI_PARTIAL_ADD_SEL_ENTRY_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiPartialAddSelEntry ( + IN IPMI_PARTIAL_ADD_SEL_ENTRY_REQUEST *PartialAddSelEntryRequest, + IN UINT32 PartialAddSelEntryRequestSize, + OUT IPMI_PARTIAL_ADD_SEL_ENTRY_RESPONSE *PartialAddSelEntryResponse + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*PartialAddSelEntryResponse); + Status = IpmiSubmitCommand ( + IPMI_NETFN_STORAGE, + IPMI_STORAGE_PARTIAL_ADD_SEL_ENTRY, + (VOID *)PartialAddSelEntryRequest, + PartialAddSelEntryRequestSize, + (VOID *)PartialAddSelEntryResponse, + &DataSize + ); + return Status; +} + +/** + This function erases all contents of the System Event Log. + + @param [in] ClearSelRequest Pointer to IPMI_CLEAR_SEL_REQUEST. + @param [out] ClearSelResponse Pointer to receive IPMI_CLEAR_SEL_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiClearSel ( + IN IPMI_CLEAR_SEL_REQUEST *ClearSelRequest, + OUT IPMI_CLEAR_SEL_RESPONSE *ClearSelResponse + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*ClearSelResponse); + Status = IpmiSubmitCommand ( + IPMI_NETFN_STORAGE, + IPMI_STORAGE_CLEAR_SEL, + (VOID *)ClearSelRequest, + sizeof (*ClearSelRequest), + (VOID *)ClearSelResponse, + &DataSize + ); + return Status; +} + +/** + This function returns the time from the SEL Device. + + @param [out] GetSelTimeResponse Pointer to IPMI_GET_SEL_TIME_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetSelTime ( + OUT IPMI_GET_SEL_TIME_RESPONSE *GetSelTimeResponse + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*GetSelTimeResponse); + Status = IpmiSubmitCommand ( + IPMI_NETFN_STORAGE, + IPMI_STORAGE_GET_SEL_TIME, + NULL, + 0, + (VOID *)GetSelTimeResponse, + &DataSize + ); + return Status; +} + +/** + This function set the time in the SEL Device. + + @param [in] SetSelTimeRequest Pointer to IPMI_SET_SEL_TIME_REQUEST. + @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiSetSelTime ( + IN IPMI_SET_SEL_TIME_REQUEST *SetSelTimeRequest, + OUT UINT8 *CompletionCode + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*CompletionCode); + Status = IpmiSubmitCommand ( + IPMI_NETFN_STORAGE, + IPMI_STORAGE_SET_SEL_TIME, + (VOID *)SetSelTimeRequest, + sizeof (*SetSelTimeRequest), + (VOID *)CompletionCode, + &DataSize + ); + return Status; +} + +/** + This function returns the SDR command version for the SDR Repository + + @param [out] ClearSelResponse Pointer to receive IPMI_GET_SDR_REPOSITORY_INFO_RESPONSE. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetSdrRepositoryInfo ( + OUT IPMI_GET_SDR_REPOSITORY_INFO_RESPONSE *GetSdrRepositoryInfoResp + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*GetSdrRepositoryInfoResp); + Status = IpmiSubmitCommand ( + IPMI_NETFN_STORAGE, + IPMI_STORAGE_GET_SDR_REPOSITORY_INFO, + NULL, + 0, + (VOID *)GetSdrRepositoryInfoResp, + &DataSize + ); + return Status; +} + +/** + This function returns the sensor record specified by Record ID. + + @param [in] GetSdrRequest Pointer to IPMI_GET_SDR_REQUEST. + @param [out] GetSdrResponse Pointer to receive IPMI_GET_SDR_RESPONSE. + @param [in, out] GetSdrResponseSize Size of entire GetSdrResponse. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetSdr ( + IN IPMI_GET_SDR_REQUEST *GetSdrRequest, + OUT IPMI_GET_SDR_RESPONSE *GetSdrResponse, + IN OUT UINT32 *GetSdrResponseSize + ) +{ + EFI_STATUS Status; + + Status = IpmiSubmitCommand ( + IPMI_NETFN_STORAGE, + IPMI_STORAGE_GET_SDR, + (VOID *)GetSdrRequest, + sizeof (*GetSdrRequest), + (VOID *)GetSdrResponse, + GetSdrResponseSize + ); + return Status; +} diff --git a/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnTransport.c b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnTransport.c new file mode 100644 index 0000000000..a93f7406f1 --- /dev/null +++ b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNetFnTransport.c @@ -0,0 +1,156 @@ +/** @file + IPMI Command - NetFnTransport. + + Copyright (c) 2018 - 2021, Intel Corporation. All rights reserved.<BR> + Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.<BR> + + SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#include <PiPei.h> +#include <Library/BaseMemoryLib.h> +#include <Library/DebugLib.h> +#include <Library/IpmiLib.h> + +#include <IndustryStandard/Ipmi.h> + +/** + This function sends command to BMC to notify a remote application + that a SOL payload is activating on another channel. + + @param [in] SolActivatingRequest The get channel information request. + @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiSolActivating ( + IN IPMI_SOL_ACTIVATING_REQUEST *SolActivatingRequest, + OUT UINT8 *CompletionCode + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*CompletionCode); + Status = IpmiSubmitCommand ( + IPMI_NETFN_TRANSPORT, + IPMI_TRANSPORT_SOL_ACTIVATING, + (VOID *)SolActivatingRequest, + sizeof (*SolActivatingRequest), + (VOID *)CompletionCode, + &DataSize + ); + return Status; +} + +/** + This function is used to set parameters such as the network addressing + information required for SOL payload operation. + + @param [in] SetConfigurationParametersRequest Pointer to IPMI_SET_SOL_CONFIGURATION_PARAMETERS_REQUEST. + @param [in] SetConfigurationParametersRequestSize Size of entire SetConfigurationParametersRequestSize. + @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiSetSolConfigurationParameters ( + IN IPMI_SET_SOL_CONFIGURATION_PARAMETERS_REQUEST *SetConfigurationParametersRequest, + IN UINT32 SetConfigurationParametersRequestSize, + OUT UINT8 *CompletionCode + ) +{ + EFI_STATUS Status; + UINT32 DataSize; + + DataSize = sizeof (*CompletionCode); + Status = IpmiSubmitCommand ( + IPMI_NETFN_TRANSPORT, + IPMI_TRANSPORT_SET_SOL_CONFIG_PARAM, + (VOID *)SetConfigurationParametersRequest, + SetConfigurationParametersRequestSize, + (VOID *)CompletionCode, + &DataSize + ); + return Status; +} + +/** + This function is used to retrieve the configuration parameters from the + Set SOL Configuration Parameters. + + @param [in] GetConfigurationParametersRequest Pointer to IPMI_SET_SOL_CONFIGURATION_PARAMETERS_REQUEST. + @param [out] GetConfigurationParametersResponse Pointer to receive IPMI_GET_SOL_CONFIGURATION_PARAMETERS_RESPONSE + @param [in, out] GetConfigurationParametersResponseSize When in, which is the expected size of + response. When out, which is the actual + size returned. + + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () function. + +**/ +EFI_STATUS +EFIAPI +IpmiGetSolConfigurationParameters ( + IN IPMI_GET_SOL_CONFIGURATION_PARAMETERS_REQUEST *GetConfigurationParametersRequest, + OUT IPMI_GET_SOL_CONFIGURATION_PARAMETERS_RESPONSE *GetConfigurationParametersResponse, + IN OUT UINT32 *GetConfigurationParametersResponseSize + ) +{ + EFI_STATUS Status; + + Status = IpmiSubmitCommand ( + IPMI_NETFN_TRANSPORT, + IPMI_TRANSPORT_GET_SOL_CONFIG_PARAM, + (VOID *)GetConfigurationParametersRequest, + sizeof (*GetConfigurationParametersRequest), + (VOID *)GetConfigurationParametersResponse, + GetConfigurationParametersResponseSize + ); + return Status; +} + +/** + This function gets the LAN configuration parameter. + + @param[in] GetLanConfigurationParametersRequest Request data + @param[out] GetLanConfigurationParametersResponse Response data + @param[in,out] GetLanConfigurationParametersSize When input, the expected size of response data. + When out, the exact size of response data. + + @retval EFI_SUCCESS Lan configuration parameter is returned in the response. + @retval EFI_INVALID_PARAMETER One of the given input parameters is invalid. + @retval Others Other errors. + +**/ +EFI_STATUS +EFIAPI +IpmiGetLanConfigurationParameters ( + IN IPMI_GET_LAN_CONFIGURATION_PARAMETERS_REQUEST *GetLanConfigurationParametersRequest, + OUT IPMI_GET_LAN_CONFIGURATION_PARAMETERS_RESPONSE *GetLanConfigurationParametersResponse, + IN OUT UINT32 *GetLanConfigurationParametersSize + ) +{ + EFI_STATUS Status; + + if ((GetLanConfigurationParametersRequest == NULL) || + (GetLanConfigurationParametersResponse == NULL) || + (GetLanConfigurationParametersSize == NULL)) + { + return EFI_INVALID_PARAMETER; + } + + Status = IpmiSubmitCommand ( + IPMI_NETFN_TRANSPORT, + IPMI_TRANSPORT_GET_LAN_CONFIG_PARAMETERS, + (UINT8 *)GetLanConfigurationParametersRequest, + sizeof (*GetLanConfigurationParametersRequest), + (UINT8 *)GetLanConfigurationParametersResponse, + GetLanConfigurationParametersSize + ); + return Status; +} -- 2.37.1.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#104289): https://edk2.groups.io/g/devel/message/104289 Mute This Topic: https://groups.io/mt/98699831/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=-=-=-=-=-=-=-=-=-=-=-
[AMD Official Use Only - General] Thanks, I will correct it before pushing it to edk2-platform. Abner > -----Original Message----- > From: Oram, Isaac W <isaac.w.oram@intel.com> > Sent: Tuesday, May 9, 2023 5:19 AM > To: devel@edk2.groups.io; Chang, Abner <Abner.Chang@amd.com> > Cc: Attar, AbdulLateef (Abdul Lateef) <AbdulLateef.Attar@amd.com>; Nickle > Wang <nicklew@nvidia.com>; Tinh Nguyen > <tinhnguyen@os.amperecomputing.com> > Subject: RE: [edk2-devel] [edk2-platforms][PATCH] > ManageabilityPkg/IpmiCommandLib:IPMI Command Library > > Caution: This message originated from an External Source. Use proper > caution when opening attachments, clicking links, or responding. > > > Reviewed-by: Isaac Oram <isaac.w.oram@intel.com> > > > A few superficial things that could be fixed now or later. > > Typo: EFI_STASTUS > > There is a mismatch between function names and parameter names that > looks like a cut/paste from prior function. Updating would probably match > the spirit of "no functional changes", but it is your choice to correct. > IpmiSetPowerRestorePolicy ( > IN IPMI_SET_POWER_RESTORE_POLICY_REQUEST > *ChassisControlRequest, > OUT IPMI_SET_POWER_RESTORE_POLICY_RESPONSE > *ChassisControlResponse > ) > > -----Original Message----- > From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Chang, > Abner via groups.io > Sent: Thursday, May 4, 2023 10:24 PM > To: devel@edk2.groups.io > Cc: Oram, Isaac W <isaac.w.oram@intel.com>; Abdul Lateef Attar > <abdattar@amd.com>; Nickle Wang <nicklew@nvidia.com>; Tinh Nguyen > <tinhnguyen@os.amperecomputing.com> > Subject: [edk2-devel] [edk2-platforms][PATCH] > ManageabilityPkg/IpmiCommandLib:IPMI Command Library > > From: Abner Chang <abner.chang@amd.com> > > BZ #: 4444 > > IpmiCommandLib is cloned from > edk2-platforms/Features/Intel/OutOfBandManagement/ > IpmiFeaturePkg/Library/IpmiCommandLib in order to > consolidate edk2 system manageability support in > one place. Function header are added to the source > files and header files. Uncustify is applied to C > files and no functionalities are changed in this patch. > > We will still keep the one under IpmiFeaturePkg/Library/ > IpmiCommandLib until the reference to this instance are > removed from platforms. > > Signed-off-by: Abner Chang <abner.chang@amd.com> > Cc: Isaac Oram <isaac.w.oram@intel.com> > Cc: Abdul Lateef Attar <abdattar@amd.com> > Cc: Nickle Wang <nicklew@nvidia.com> > Cc: Tinh Nguyen <tinhnguyen@os.amperecomputing.com> > --- > .../Library/IpmiCommandLib/IpmiCommandLib.inf | 33 + > .../Include/Library/IpmiCommandLib.h | 620 ++++++++++++++++++ > .../IpmiCommandLib/IpmiCommandLibNetFnApp.c | 444 +++++++++++++ > .../IpmiCommandLibNetFnChassis.c | 199 ++++++ > .../IpmiCommandLibNetFnStorage.c | 384 +++++++++++ > .../IpmiCommandLibNetFnTransport.c | 156 +++++ > 6 files changed, 1836 insertions(+) > create mode 100644 > Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLib.inf > create mode 100644 > Features/ManageabilityPkg/Include/Library/IpmiCommandLib.h > create mode 100644 > Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNet > FnApp.c > create mode 100644 > Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNet > FnChassis.c > create mode 100644 > Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNet > FnStorage.c > create mode 100644 > Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibNet > FnTransport.c > > diff --git > a/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLib.in > f > b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLib.in > f > new file mode 100644 > index 0000000000..3dc485cf38 > --- /dev/null > +++ > b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLib.in > f > @@ -0,0 +1,33 @@ > +### @file > +# Component description file for IPMI Command Library. > +# > +# Copyright (c) 2018 - 2021, Intel Corporation. All rights reserved.<BR> > +# Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.<BR> > +# > +# SPDX-License-Identifier: BSD-2-Clause-Patent > +# > +### > + > +[Defines] > + INF_VERSION = 0x00010005 > + BASE_NAME = IpmiCommandLib > + FILE_GUID = 96FC1989-CB7F-489B-9D3B-68DCA2C2DADC > + MODULE_TYPE = UEFI_DRIVER > + VERSION_STRING = 1.0 > + LIBRARY_CLASS = IpmiCommandLib > + > +[sources] > + IpmiCommandLibNetFnApp.c > + IpmiCommandLibNetFnTransport.c > + IpmiCommandLibNetFnChassis.c > + IpmiCommandLibNetFnStorage.c > + > +[Packages] > + MdePkg/MdePkg.dec > + MdeModulePkg/MdeModulePkg.dec > + ManageabilityPkg/ManageabilityPkg.dec > + > +[LibraryClasses] > + BaseMemoryLib > + DebugLib > + IpmiLib > diff --git a/Features/ManageabilityPkg/Include/Library/IpmiCommandLib.h > b/Features/ManageabilityPkg/Include/Library/IpmiCommandLib.h > new file mode 100644 > index 0000000000..685f6e2ea2 > --- /dev/null > +++ b/Features/ManageabilityPkg/Include/Library/IpmiCommandLib.h > @@ -0,0 +1,620 @@ > +/** @file > + This library abstract how to send/receive IPMI command. > + > +Copyright (c) 2018-2021, Intel Corporation. All rights reserved.<BR> > +Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.<BR> > + > +SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > +#ifndef IPMI_COMMAND_LIB_H_ > +#define IPMI_COMMAND_LIB_H_ > + > +#include <Uefi.h> > +#include <IndustryStandard/Ipmi.h> > + > +/// > +/// Functions for IPMI NetFnApp commands > +/// > + > +/** > + This function is used to retrieve device ID. > + > + @param [out] DeviceId The pointer to receive > IPMI_GET_DEVICE_ID_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetDeviceId ( > + OUT IPMI_GET_DEVICE_ID_RESPONSE *DeviceId > + ); > + > +/** > + This function returns device self test results > + > + @param [out] SelfTestResult The pointer to receive > IPMI_SELF_TEST_RESULT_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetSelfTestResult ( > + OUT IPMI_SELF_TEST_RESULT_RESPONSE *SelfTestResult > + ); > + > +/** > + This function is used for starting and restarting the Watchdog > + Timer from the initial countdown value that was specified in > + the Set Watchdog Timer command the watchdog timer. > + > + @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiResetWatchdogTimer ( > + OUT UINT8 *CompletionCode > + ); > + > +/** > + This function is used for initializing and configuring > + the watchdog timer. > + > + @param [in] SetWatchdogTimer Pointer to receive > IPMI_SET_WATCHDOG_TIMER_REQUEST. > + @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiSetWatchdogTimer ( > + IN IPMI_SET_WATCHDOG_TIMER_REQUEST *SetWatchdogTimer, > + OUT UINT8 *CompletionCode > + ); > + > +/** > + This function retrieves the current settings and present > + countdown of the watchdog timer. > + > + @param [out] GetWatchdogTimer Pointer to receive > IPMI_GET_WATCHDOG_TIMER_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetWatchdogTimer ( > + OUT IPMI_GET_WATCHDOG_TIMER_RESPONSE *GetWatchdogTimer > + ); > + > +/** > + This function enables message reception into Message Buffers, > + and any interrupt associated with that buffer getting full. > + > + @param [in] SetBmcGlobalEnables Pointer receive to > IPMI_SET_BMC_GLOBAL_ENABLES_REQUEST. > + @param [out] CompletionCode IPMI completetion code, refer to > Ipmi.h. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiSetBmcGlobalEnables ( > + IN IPMI_SET_BMC_GLOBAL_ENABLES_REQUEST *SetBmcGlobalEnables, > + OUT UINT8 *CompletionCode > + ); > + > +/** > + This function retrieves the present setting of the Global Enables > + > + @param [out] GetBmcGlobalEnables Pointer to receive > IPMI_GET_BMC_GLOBAL_ENABLES_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetBmcGlobalEnables ( > + OUT IPMI_GET_BMC_GLOBAL_ENABLES_RESPONSE > *GetBmcGlobalEnables > + ); > + > +/** > + This function is used to flush unread data from the Receive > + Message Queue or Event Message Buffer > + > + @param [in] ClearMessageFlagsRequest > IPMI_CLEAR_MESSAGE_FLAGS_REQUEST > + @param [out] CompletionCode IPMI completetion code, refer to > Ipmi.h. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiClearMessageFlags ( > + IN IPMI_CLEAR_MESSAGE_FLAGS_REQUEST *ClearMessageFlagsRequest, > + OUT UINT8 *CompletionCode > + ); > + > +/** > + This function is used to retrieve the present message available states. > + > + @param [out] GetMessageFlagsResponse Pointer to receive > IPMI_GET_MESSAGE_FLAGS_RESPONSE > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetMessageFlags ( > + OUT IPMI_GET_MESSAGE_FLAGS_RESPONSE > *GetMessageFlagsResponse > + ); > + > +/** > + This function is used to get data from the Receive Message Queue. > + > + @param [out] GetMessageResponse Pointer to receive > IPMI_GET_MESSAGE_RESPONSE. > + @param [in, out] GetMessageResponseSize When in, which is the > expected size of > + response. When out, which is the actual > + size returned. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetMessage ( > + OUT IPMI_GET_MESSAGE_RESPONSE *GetMessageResponse, > + IN OUT UINT32 *GetMessageResponseSize > + ); > + > +/** > + This function is used for bridging IPMI messages between channels, > + and between the system management software (SMS) and a given > channel > + > + @param [in] SendMessageRequest Pointer to > IPMI_SEND_MESSAGE_REQUEST. > + @param [in] SendMessageRequestSize Size of entire > SendMessageRequestSize. > + @param [out] SendMessageResponse Pointer to receive > IPMI_SEND_MESSAGE_RESPONSE. > + @param [in] SendMessageResponseSize When in, which is the expected > size of > + response. When out, which is the actual > + size returned. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiSendMessage ( > + IN IPMI_SEND_MESSAGE_REQUEST *SendMessageRequest, > + IN UINT32 SendMessageRequestSize, > + OUT IPMI_SEND_MESSAGE_RESPONSE *SendMessageResponse, > + IN OUT UINT32 *SendMessageResponseSize > + ); > + > +/** > + This function gets the system UUID. > + > + @param [out] SystemGuid The pointer to retrieve system UUID. > + > + @retval EFI_SUCCESS UUID is returned. > + @retval EFI_INVALID_PARAMETER SystemGuid is a NULL pointer. > + @retval Others See return value of IpmiSubmitCommand () > function. > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetSystemUuid ( > + OUT EFI_GUID *SystemGuid > + ); > + > +/** > + This function gets the channel information. > + > + @param [in] GetChannelInfoRequest The get channel information > request. > + @param [out] GetChannelInfoResponse The get channel information > response. > + @param [out] GetChannelInfoResponseSize When input, the expected > size of response. > + When output, the exact size of the returned > + response. > + > + @retval EFI_SUCCESS Get channel information successfully. > + @retval EFI_INVALID_PARAMETER One of the given input parameters is > invalid. > + @retval Others See return value of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetChannelInfo ( > + IN IPMI_GET_CHANNEL_INFO_REQUEST *GetChannelInfoRequest, > + OUT IPMI_GET_CHANNEL_INFO_RESPONSE *GetChannelInfoResponse, > + OUT UINT32 *GetChannelInfoResponseSize > + ); > + > +/// > +/// Functions for IPMI NetFnTransport commands. > +/// > + > +/** > + This function sends command to BMC to notify a remote application > + that a SOL payload is activating on another channel. > + > + @param [in] SolActivatingRequest Pointer to > IPMI_SOL_ACTIVATING_REQUEST. > + @param [out] CompletionCode IPMI completetion code, refer to > Ipmi.h. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiSolActivating ( > + IN IPMI_SOL_ACTIVATING_REQUEST *SolActivatingRequest, > + OUT UINT8 *CompletionCode > + ); > + > +/** > + This function is used to set parameters such as the network addressing > + information required for SOL payload operation. > + > + @param [in] SetConfigurationParametersRequest Pointer to > IPMI_SET_SOL_CONFIGURATION_PARAMETERS_REQUEST. > + @param [in] SetConfigurationParametersRequestSize Size of entire > SetConfigurationParametersRequestSize. > + @param [out] CompletionCode IPMI completetion code, refer > to Ipmi.h. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiSetSolConfigurationParameters ( > + IN IPMI_SET_SOL_CONFIGURATION_PARAMETERS_REQUEST > *SetConfigurationParametersRequest, > + IN UINT32 SetConfigurationParametersRequestSize, > + OUT UINT8 *CompletionCode > + ); > + > +/** > + This function is used to retrieve the configuration parameters from the > + Set SOL Configuration Parameters. > + > + @param [in] GetConfigurationParametersRequest Pointer to > IPMI_SET_SOL_CONFIGURATION_PARAMETERS_REQUEST. > + @param [out] GetConfigurationParametersResponse Pointer to > receive IPMI_GET_SOL_CONFIGURATION_PARAMETERS_RESPONSE. > + @param [in, out] GetConfigurationParametersResponseSize When in, > which is the expected size of > + response. When out, which is the actual > + size returned. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetSolConfigurationParameters ( > + IN IPMI_GET_SOL_CONFIGURATION_PARAMETERS_REQUEST > *GetConfigurationParametersRequest, > + OUT IPMI_GET_SOL_CONFIGURATION_PARAMETERS_RESPONSE > *GetConfigurationParametersResponse, > + IN OUT UINT32 > *GetConfigurationParametersResponseSize > + ); > + > +/** > + This function gets the LAN configuration parameter. > + > + @param[in] GetLanConfigurationParametersRequest Request data > + @param[out] GetLanConfigurationParametersResponse Response data > + @param[in,out] GetLanConfigurationParametersSize When input, the > expected size of response data. > + When out, the exact size of response data. > + > + @retval EFI_SUCCESS Lan configuration parameter is returned in the > response. > + @retval EFI_INVALID_PARAMETER One of the given input parameters is > invalid. > + @retval Others Other errors. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetLanConfigurationParameters ( > + IN IPMI_GET_LAN_CONFIGURATION_PARAMETERS_REQUEST > *GetLanConfigurationParametersRequest, > + OUT IPMI_GET_LAN_CONFIGURATION_PARAMETERS_RESPONSE > *GetLanConfigurationParametersResponse, > + IN OUT UINT32 *GetLanConfigurationParametersSize > + ); > + > +/// > +/// Functions for IPMI NetFnChasis commands > +/// > + > +/** > + This function returns information about which main chassis management > functions are > + present and what addresses are used to access those functions. > + > + @param [out] GetChassisCapabilitiesResponse Pointer to > IPMI_GET_CHASSIS_CAPABILITIES_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetChassisCapabilities ( > + OUT IPMI_GET_CHASSIS_CAPABILITIES_RESPONSE > *GetChassisCapabilitiesResponse > + ); > + > +/** > + This function gets information regarding the high-level status of the > system > + chassis and main power subsystem. > + > + @param [out] GetChassisStatusResponse Pointer to > IPMI_GET_CHASSIS_STATUS_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetChassisStatus ( > + OUT IPMI_GET_CHASSIS_STATUS_RESPONSE *GetChassisStatusResponse > + ); > + > +/** > + This function sends command to control power up, power down, and reset. > + > + @param [in] ChassisControlRequest Pointer to > IPMI_CHASSIS_CONTROL_REQUEST. > + @param [out] CompletionCode IPMI completetion code, refer to > Ipmi.h. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiChassisControl ( > + IN IPMI_CHASSIS_CONTROL_REQUEST *ChassisControlRequest, > + OUT UINT8 *CompletionCode > + ); > + > +/** > + This function is used to configure the power restore policy. > + > + @param [in] ChassisControlRequest Pointer to > IPMI_SET_POWER_RESTORE_POLICY_REQUEST. > + @param [out] ChassisControlResponse Pointer to > IPMI_SET_POWER_RESTORE_POLICY_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiSetPowerRestorePolicy ( > + IN IPMI_SET_POWER_RESTORE_POLICY_REQUEST > *ChassisControlRequest, > + OUT IPMI_SET_POWER_RESTORE_POLICY_RESPONSE > *ChassisControlResponse > + ); > + > +/** > + This function is used to set parameters that direct the system boot > + following a system power up or reset. > + > + @param [in] BootOptionsRequest Pointer to > IPMI_SET_BOOT_OPTIONS_REQUEST. > + @param [out] BootOptionsResponse Pointer to > IPMI_SET_BOOT_OPTIONS_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiSetSystemBootOptions ( > + IN IPMI_SET_BOOT_OPTIONS_REQUEST *BootOptionsRequest, > + OUT IPMI_SET_BOOT_OPTIONS_RESPONSE *BootOptionsResponse > + ); > + > +/** > + This function is used to retrieve the boot options set by the > + Set System Boot Options command. > + > + @param [in] BootOptionsRequest Pointer to > IPMI_GET_BOOT_OPTIONS_REQUEST. > + @param [out] BootOptionsResponse Pointer to > IPMI_GET_BOOT_OPTIONS_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetSystemBootOptions ( > + IN IPMI_GET_BOOT_OPTIONS_REQUEST *BootOptionsRequest, > + OUT IPMI_GET_BOOT_OPTIONS_RESPONSE *BootOptionsResponse > + ); > + > +/// > +/// Functions for IPMI NetFnStorage commands > +/// > + > +/** > + This function is used to retrieve FRU Inventory Area > + > + @param [in] GetFruInventoryAreaInfoRequest Pointer to > IPMI_GET_FRU_INVENTORY_AREA_INFO_REQUEST. > + @param [out] GetFruInventoryAreaInfoResponse Pointer to > IPMI_GET_FRU_INVENTORY_AREA_INFO_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetFruInventoryAreaInfo ( > + IN IPMI_GET_FRU_INVENTORY_AREA_INFO_REQUEST > *GetFruInventoryAreaInfoRequest, > + OUT IPMI_GET_FRU_INVENTORY_AREA_INFO_RESPONSE > *GetFruInventoryAreaInfoResponse > + ); > + > +/** > + This function returns specified data from the FRU Inventory Info area. > + > + @param [in] ReadFruDataRequest Pointer to > IPMI_READ_FRU_DATA_REQUEST. > + @param [out] ReadFruDataResponse Pointer to > IPMI_READ_FRU_DATA_RESPONSE. > + @param [in, out] ReadFruDataResponseSize Returns the size of > ReadFruDataResponse. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiReadFruData ( > + IN IPMI_READ_FRU_DATA_REQUEST *ReadFruDataRequest, > + OUT IPMI_READ_FRU_DATA_RESPONSE *ReadFruDataResponse, > + IN OUT UINT32 *ReadFruDataResponseSize > + ); > + > +/** > + This function writes specified data from the FRU Inventory Info area. > + > + @param [in] WriteFruDataRequest Pointer to > IPMI_WRITE_FRU_DATA_REQUEST. > + @param [in] WriteFruDataRequestSize Size of WriteFruDataRequest. > + @param [out] WriteFruDataResponse Pointer to receive > IPMI_WRITE_FRU_DATA_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiWriteFruData ( > + IN IPMI_WRITE_FRU_DATA_REQUEST *WriteFruDataRequest, > + IN UINT32 WriteFruDataRequestSize, > + OUT IPMI_WRITE_FRU_DATA_RESPONSE *WriteFruDataResponse > + ); > + > +/** > + This function returns the number of entries in the SEL > + > + @param [out] GetSelInfoResponse Pointer to receive > IPMI_GET_SEL_INFO_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetSelInfo ( > + OUT IPMI_GET_SEL_INFO_RESPONSE *GetSelInfoResponse > + ); > + > +/** > + This function retrieves entries from the SEL > + > + @param [in] GetSelEntryRequest Pointer to > IPMI_GET_SEL_ENTRY_REQUEST. > + @param [out] GetSelEntryResponse Pointer to receive > IPMI_GET_SEL_ENTRY_RESPONSE. > + @param [in] GetSelEntryResponseSize Size of entire > GetSelEntryResponse. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetSelEntry ( > + IN IPMI_GET_SEL_ENTRY_REQUEST *GetSelEntryRequest, > + OUT IPMI_GET_SEL_ENTRY_RESPONSE *GetSelEntryResponse, > + IN OUT UINT32 *GetSelEntryResponseSize > + ); > + > +/** > + This function adds an entry in the SEL > + > + @param [in] AddSelEntryRequest Pointer to > IPMI_ADD_SEL_ENTRY_REQUEST. > + @param [out] AddSelEntryResponse Pointer to receive > IPMI_ADD_SEL_ENTRY_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiAddSelEntry ( > + IN IPMI_ADD_SEL_ENTRY_REQUEST *AddSelEntryRequest, > + OUT IPMI_ADD_SEL_ENTRY_RESPONSE *AddSelEntryResponse > + ); > + > +/** > + This function adds SEL Entry command that allows the record to be > incrementally > + added to the SEL. > + > + @param [in] PartialAddSelEntryRequest Pointer to > IPMI_PARTIAL_ADD_SEL_ENTRY_REQUEST. > + @param [in] PartialAddSelEntryRequestSize Size of entire > PartialAddSelEntryRequest. > + @param [out] PartialAddSelEntryResponse Pointer to receive > IPMI_PARTIAL_ADD_SEL_ENTRY_RESPONSE. > + > + @retval EFI_STASTUS See return value of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiPartialAddSelEntry ( > + IN IPMI_PARTIAL_ADD_SEL_ENTRY_REQUEST > *PartialAddSelEntryRequest, > + IN UINT32 PartialAddSelEntryRequestSize, > + OUT IPMI_PARTIAL_ADD_SEL_ENTRY_RESPONSE > *PartialAddSelEntryResponse > + ); > + > +/** > + This function erases all contents of the System Event Log. > + > + @param [in] ClearSelRequest Pointer to IPMI_CLEAR_SEL_REQUEST. > + @param [out] ClearSelResponse Pointer to receive > IPMI_CLEAR_SEL_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiClearSel ( > + IN IPMI_CLEAR_SEL_REQUEST *ClearSelRequest, > + OUT IPMI_CLEAR_SEL_RESPONSE *ClearSelResponse > + ); > + > +/** > + This function returns the time from the SEL Device. > + > + @param [out] GetSelTimeResponse Pointer to > IPMI_GET_SEL_TIME_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetSelTime ( > + OUT IPMI_GET_SEL_TIME_RESPONSE *GetSelTimeResponse > + ); > + > +/** > + This function set the time in the SEL Device. > + > + @param [in] SetSelTimeRequest Pointer to > IPMI_SET_SEL_TIME_REQUEST. > + @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiSetSelTime ( > + IN IPMI_SET_SEL_TIME_REQUEST *SetSelTimeRequest, > + OUT UINT8 *CompletionCode > + ); > + > +/** > + This function returns the SDR command version for the SDR Repository. > + > + @param [out] ClearSelResponse Pointer to receive > IPMI_GET_SDR_REPOSITORY_INFO_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetSdrRepositoryInfo ( > + OUT IPMI_GET_SDR_REPOSITORY_INFO_RESPONSE > *GetSdrRepositoryInfoResp > + ); > + > +/** > + This function returns the sensor record specified by Record ID. > + > + @param [in] GetSdrRequest Pointer to IPMI_GET_SDR_REQUEST. > + @param [out] GetSdrResponse Pointer to receive > IPMI_GET_SDR_RESPONSE. > + @param [in, out] GetSdrResponseSize Size of entire GetSdrResponse. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetSdr ( > + IN IPMI_GET_SDR_REQUEST *GetSdrRequest, > + OUT IPMI_GET_SDR_RESPONSE *GetSdrResponse, > + IN OUT UINT32 *GetSdrResponseSize > + ); > + > +#endif // IPMI_COMMAND_LIB_H_ > diff --git > a/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibN > etFnApp.c > b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibN > etFnApp.c > new file mode 100644 > index 0000000000..30c412e2f4 > --- /dev/null > +++ > b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibN > etFnApp.c > @@ -0,0 +1,444 @@ > +/** @file > + IPMI Command - NetFnApp. > + > + Copyright (c) 2018 - 2021, Intel Corporation. All rights reserved.<BR> > + Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.<BR> > + > + SPDX-License-Identifier: BSD-2-Clause-Patent > +**/ > + > +#include <PiPei.h> > +#include <Library/BaseMemoryLib.h> > +#include <Library/DebugLib.h> > +#include <Library/IpmiLib.h> > + > +#include <IndustryStandard/Ipmi.h> > + > +/** > + This function is used to retrieve device ID. > + > + @param [out] DeviceId The pointer to receive > IPMI_GET_DEVICE_ID_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetDeviceId ( > + OUT IPMI_GET_DEVICE_ID_RESPONSE *DeviceId > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*DeviceId); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_APP, > + IPMI_APP_GET_DEVICE_ID, > + NULL, > + 0, > + (VOID *)DeviceId, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function returns device self test results > + > + @param [out] SelfTestResult The pointer to receive > IPMI_SELF_TEST_RESULT_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetSelfTestResult ( > + OUT IPMI_SELF_TEST_RESULT_RESPONSE *SelfTestResult > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*SelfTestResult); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_APP, > + IPMI_APP_GET_SELFTEST_RESULTS, > + NULL, > + 0, > + (VOID *)SelfTestResult, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function is used for starting and restarting the Watchdog > + Timer from the initial countdown value that was specified in > + the Set Watchdog Timer command the watchdog timer > + > + @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiResetWatchdogTimer ( > + OUT UINT8 *CompletionCode > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*CompletionCode); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_APP, > + IPMI_APP_RESET_WATCHDOG_TIMER, > + NULL, > + 0, > + (VOID *)CompletionCode, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function is used for initializing and configuring > + the watchdog timer. > + > + @param [in] SetWatchdogTimer Pointer to receive > IPMI_SET_WATCHDOG_TIMER_REQUEST. > + @param [out] CompletionCode IPMI completetion code, refer to Ipmi.h. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiSetWatchdogTimer ( > + IN IPMI_SET_WATCHDOG_TIMER_REQUEST *SetWatchdogTimer, > + OUT UINT8 *CompletionCode > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*CompletionCode); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_APP, > + IPMI_APP_SET_WATCHDOG_TIMER, > + (VOID *)SetWatchdogTimer, > + sizeof (*SetWatchdogTimer), > + (VOID *)CompletionCode, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function retrieves the current settings and present > + countdown of the watchdog timer. > + > + @param [out] GetWatchdogTimer Pointer to receive > IPMI_GET_WATCHDOG_TIMER_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetWatchdogTimer ( > + OUT IPMI_GET_WATCHDOG_TIMER_RESPONSE *GetWatchdogTimer > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*GetWatchdogTimer); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_APP, > + IPMI_APP_GET_WATCHDOG_TIMER, > + NULL, > + 0, > + (VOID *)GetWatchdogTimer, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function enables message reception into Message Buffers, > + and any interrupt associated with that buffer getting full. > + > + @param [in] SetBmcGlobalEnables Pointer receive to > IPMI_SET_BMC_GLOBAL_ENABLES_REQUEST. > + @param [out] CompletionCode IPMI completetion code refer to Ipmi.h. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiSetBmcGlobalEnables ( > + IN IPMI_SET_BMC_GLOBAL_ENABLES_REQUEST *SetBmcGlobalEnables, > + OUT UINT8 *CompletionCode > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*CompletionCode); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_APP, > + IPMI_APP_SET_BMC_GLOBAL_ENABLES, > + (VOID *)SetBmcGlobalEnables, > + sizeof (*SetBmcGlobalEnables), > + (VOID *)CompletionCode, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function retrieves the present setting of the Global Enables > + > + @param [out] GetBmcGlobalEnables Pointer to receive > IPMI_GET_BMC_GLOBAL_ENABLES_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetBmcGlobalEnables ( > + OUT IPMI_GET_BMC_GLOBAL_ENABLES_RESPONSE > *GetBmcGlobalEnables > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*GetBmcGlobalEnables); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_APP, > + IPMI_APP_GET_BMC_GLOBAL_ENABLES, > + NULL, > + 0, > + (VOID *)GetBmcGlobalEnables, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function is used to flush unread data from the Receive > + Message Queue or Event Message Buffer > + > + @param [in] ClearMessageFlagsRequest > IPMI_CLEAR_MESSAGE_FLAGS_REQUEST > + @param [out] CompletionCode IPMI completetion code, refer to > Ipmi.h. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiClearMessageFlags ( > + IN IPMI_CLEAR_MESSAGE_FLAGS_REQUEST *ClearMessageFlagsRequest, > + OUT UINT8 *CompletionCode > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*CompletionCode); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_APP, > + IPMI_APP_CLEAR_MESSAGE_FLAGS, > + (VOID *)ClearMessageFlagsRequest, > + sizeof (*ClearMessageFlagsRequest), > + (VOID *)CompletionCode, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function is used to retrieve the present message available states. > + > + @param [out] GetMessageFlagsResponse Pointer to receive > IPMI_GET_MESSAGE_FLAGS_RESPONSE > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetMessageFlags ( > + OUT IPMI_GET_MESSAGE_FLAGS_RESPONSE > *GetMessageFlagsResponse > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*GetMessageFlagsResponse); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_APP, > + IPMI_APP_GET_MESSAGE_FLAGS, > + NULL, > + 0, > + (VOID *)GetMessageFlagsResponse, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function is used to get data from the Receive Message Queue. > + > + @param [out] GetMessageResponse Pointer to receive > IPMI_GET_MESSAGE_RESPONSE. > + @param [in, out] GetMessageResponseSize When in, which is the > expected size of > + response. When out, which is the actual > + size returned. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetMessage ( > + OUT IPMI_GET_MESSAGE_RESPONSE *GetMessageResponse, > + IN OUT UINT32 *GetMessageResponseSize > + ) > +{ > + EFI_STATUS Status; > + > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_APP, > + IPMI_APP_GET_MESSAGE, > + NULL, > + 0, > + (VOID *)GetMessageResponse, > + GetMessageResponseSize > + ); > + return Status; > +} > + > +/** > + This function is used for bridging IPMI messages between channels, > + and between the system management software (SMS) and a given > channel > + > + @param [in] SendMessageRequest Pointer to > IPMI_SEND_MESSAGE_REQUEST. > + @param [in] SendMessageRequestSize Size of entire > SendMessageRequestSize. > + @param [out] SendMessageResponse Pointer to receive > IPMI_SEND_MESSAGE_RESPONSE. > + @param [in] SendMessageResponseSize When in, which is the expected > size of > + response. When out, which is the actual > + size returned. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiSendMessage ( > + IN IPMI_SEND_MESSAGE_REQUEST *SendMessageRequest, > + IN UINT32 SendMessageRequestSize, > + OUT IPMI_SEND_MESSAGE_RESPONSE *SendMessageResponse, > + IN OUT UINT32 *SendMessageResponseSize > + ) > +{ > + EFI_STATUS Status; > + > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_APP, > + IPMI_APP_SEND_MESSAGE, > + (VOID *)SendMessageRequest, > + SendMessageRequestSize, > + (VOID *)SendMessageResponse, > + SendMessageResponseSize > + ); > + return Status; > +} > + > +/** > + This function gets the system UUID. > + > + @param[out] SystemGuid The pointer to retrieve system UUID. > + > + @retval EFI_SUCCESS UUID is returned. > + @retval EFI_INVALID_PARAMETER SystemGuid is a NULL pointer. > + @retval Others See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetSystemUuid ( > + OUT EFI_GUID *SystemGuid > + ) > +{ > + EFI_STATUS Status; > + UINT32 RequestSize; > + UINT32 ResponseSize; > + IPMI_GET_SYSTEM_UUID_RESPONSE GetSystemUuidResponse; > + > + if (SystemGuid == NULL) { > + return EFI_INVALID_PARAMETER; > + } > + > + RequestSize = 0; > + ResponseSize = sizeof (IPMI_GET_SYSTEM_UUID_RESPONSE); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_APP, > + IPMI_APP_GET_SYSTEM_GUID, > + (VOID *)NULL, > + RequestSize, > + (VOID *)&GetSystemUuidResponse, > + &ResponseSize > + ); > + if (!EFI_ERROR (Status) && (GetSystemUuidResponse.CompletionCode == > IPMI_COMP_CODE_NORMAL)) { > + CopyMem ( > + (VOID *)SystemGuid, > + (VOID *)&GetSystemUuidResponse.SystemUuid, > + sizeof (EFI_GUID) > + ); > + } > + > + return Status; > +} > + > +/** > + This function gets the channel information. > + > + @param[in] GetChannelInfoRequest The get channel information > request. > + @param[out] GetChannelInfoResponse The get channel information > response. > + @param[out] GetChannelInfoResponseSize When input, the expected > size of response. > + When output, the exact size of the returned > + response. > + > + @retval EFI_SUCCESS Get channel information successfully. > + @retval EFI_INVALID_PARAMETER One of the given input parameters is > invalid. > + @retval Others See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetChannelInfo ( > + IN IPMI_GET_CHANNEL_INFO_REQUEST *GetChannelInfoRequest, > + OUT IPMI_GET_CHANNEL_INFO_RESPONSE *GetChannelInfoResponse, > + OUT UINT32 *GetChannelInfoResponseSize > + ) > +{ > + EFI_STATUS Status; > + > + if ((GetChannelInfoRequest == NULL) || > + (GetChannelInfoResponse == NULL) || > + (GetChannelInfoResponseSize == NULL)) > + { > + return EFI_INVALID_PARAMETER; > + } > + > + *GetChannelInfoResponseSize = sizeof > (IPMI_GET_CHANNEL_INFO_RESPONSE); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_APP, > + IPMI_APP_GET_CHANNEL_INFO, > + (UINT8 *)GetChannelInfoRequest, > + sizeof (IPMI_GET_CHANNEL_INFO_REQUEST), > + (UINT8 *)GetChannelInfoResponse, > + GetChannelInfoResponseSize > + ); > + return Status; > +} > diff --git > a/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibN > etFnChassis.c > b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibN > etFnChassis.c > new file mode 100644 > index 0000000000..12fd997b11 > --- /dev/null > +++ > b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibN > etFnChassis.c > @@ -0,0 +1,199 @@ > +/** @file > + IPMI Command - NetFnChassis. > + > + Copyright (c) 2018 - 2021, Intel Corporation. All rights reserved.<BR> > + SPDX-License-Identifier: BSD-2-Clause-Patent > +**/ > + > +#include <PiPei.h> > +#include <Library/BaseMemoryLib.h> > +#include <Library/DebugLib.h> > +#include <Library/IpmiLib.h> > + > +#include <IndustryStandard/Ipmi.h> > + > +/** > + This function returns information about which main chassis management > functions are > + present and what addresses are used to access those functions. > + > + @param [out] GetChassisCapabilitiesResponse Pointer to > IPMI_GET_CHASSIS_CAPABILITIES_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetChassisCapabilities ( > + OUT IPMI_GET_CHASSIS_CAPABILITIES_RESPONSE > *GetChassisCapabilitiesResponse > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*GetChassisCapabilitiesResponse); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_CHASSIS, > + IPMI_CHASSIS_GET_CAPABILITIES, > + NULL, > + 0, > + (VOID *)GetChassisCapabilitiesResponse, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function gets information regarding the high-level status of the > system > + chassis and main power subsystem. > + > + @param [out] GetChassisStatusResponse Pointer to > IPMI_GET_CHASSIS_STATUS_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetChassisStatus ( > + OUT IPMI_GET_CHASSIS_STATUS_RESPONSE *GetChassisStatusResponse > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*GetChassisStatusResponse); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_CHASSIS, > + IPMI_CHASSIS_GET_STATUS, > + NULL, > + 0, > + (VOID *)GetChassisStatusResponse, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function sends command to control power up, power down, and reset. > + > + @param [in] ChassisControlRequest Pointer to > IPMI_CHASSIS_CONTROL_REQUEST. > + @param [out] CompletionCode IPMI completetion code, refer to > Ipmi.h. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiChassisControl ( > + IN IPMI_CHASSIS_CONTROL_REQUEST *ChassisControlRequest, > + OUT UINT8 *CompletionCode > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*CompletionCode); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_CHASSIS, > + IPMI_CHASSIS_CONTROL, > + (VOID *)ChassisControlRequest, > + sizeof (*ChassisControlRequest), > + (VOID *)CompletionCode, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function is used to configure the power restore policy. > + > + @param [in] ChassisControlRequest Pointer to > IPMI_SET_POWER_RESTORE_POLICY_REQUEST. > + @param [out] ChassisControlResponse Pointer to > IPMI_SET_POWER_RESTORE_POLICY_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiSetPowerRestorePolicy ( > + IN IPMI_SET_POWER_RESTORE_POLICY_REQUEST > *ChassisControlRequest, > + OUT IPMI_SET_POWER_RESTORE_POLICY_RESPONSE > *ChassisControlResponse > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*ChassisControlResponse); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_CHASSIS, > + IPMI_CHASSIS_SET_POWER_RESTORE_POLICY, > + (VOID *)ChassisControlRequest, > + sizeof (*ChassisControlRequest), > + (VOID *)ChassisControlResponse, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function is used to set parameters that direct the system boot > + following a system power up or reset. > + > + @param [in] BootOptionsRequest Pointer to > IPMI_SET_BOOT_OPTIONS_REQUEST. > + @param [out] BootOptionsResponse Pointer to > IPMI_SET_BOOT_OPTIONS_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiSetSystemBootOptions ( > + IN IPMI_SET_BOOT_OPTIONS_REQUEST *BootOptionsRequest, > + OUT IPMI_SET_BOOT_OPTIONS_RESPONSE *BootOptionsResponse > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*BootOptionsResponse); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_CHASSIS, > + IPMI_CHASSIS_SET_SYSTEM_BOOT_OPTIONS, > + (VOID *)BootOptionsRequest, > + sizeof (*BootOptionsRequest), > + (VOID *)BootOptionsResponse, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function is used to retrieve the boot options set by the > + Set System Boot Options command. > + > + @param [in] BootOptionsRequest Pointer to > IPMI_GET_BOOT_OPTIONS_REQUEST. > + @param [out] BootOptionsResponse Pointer to > IPMI_GET_BOOT_OPTIONS_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetSystemBootOptions ( > + IN IPMI_GET_BOOT_OPTIONS_REQUEST *BootOptionsRequest, > + OUT IPMI_GET_BOOT_OPTIONS_RESPONSE *BootOptionsResponse > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*BootOptionsResponse); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_CHASSIS, > + IPMI_CHASSIS_GET_SYSTEM_BOOT_OPTIONS, > + (VOID *)BootOptionsRequest, > + sizeof (*BootOptionsRequest), > + (VOID *)BootOptionsResponse, > + &DataSize > + ); > + return Status; > +} > diff --git > a/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibN > etFnStorage.c > b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibN > etFnStorage.c > new file mode 100644 > index 0000000000..2dbb7ac9ff > --- /dev/null > +++ > b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibN > etFnStorage.c > @@ -0,0 +1,384 @@ > +/** @file > + IPMI Command - NetFnStorage. > + > + Copyright (c) 2018 - 2021, Intel Corporation. All rights reserved.<BR> > + SPDX-License-Identifier: BSD-2-Clause-Patent > +**/ > + > +#include <PiPei.h> > +#include <Library/BaseMemoryLib.h> > +#include <Library/DebugLib.h> > +#include <Library/IpmiLib.h> > + > +#include <IndustryStandard/Ipmi.h> > + > +/** > + This function is used to retrieve FRU Inventory Area > + > + @param [in] GetFruInventoryAreaInfoRequest Pointer to > IPMI_GET_FRU_INVENTORY_AREA_INFO_REQUEST. > + @param [out] GetFruInventoryAreaInfoResponse Pointer to > IPMI_GET_FRU_INVENTORY_AREA_INFO_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetFruInventoryAreaInfo ( > + IN IPMI_GET_FRU_INVENTORY_AREA_INFO_REQUEST > *GetFruInventoryAreaInfoRequest, > + OUT IPMI_GET_FRU_INVENTORY_AREA_INFO_RESPONSE > *GetFruInventoryAreaInfoResponse > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*GetFruInventoryAreaInfoResponse); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_STORAGE, > + IPMI_STORAGE_GET_FRU_INVENTORY_AREAINFO, > + (VOID *)GetFruInventoryAreaInfoRequest, > + sizeof (*GetFruInventoryAreaInfoRequest), > + (VOID *)GetFruInventoryAreaInfoResponse, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function returns specified data from the FRU Inventory Info area. > + > + @param [in] ReadFruDataRequest Pointer to > IPMI_READ_FRU_DATA_REQUEST. > + @param [in] ReadFruDataResponse Pointer to > IPMI_READ_FRU_DATA_RESPONSE. > + @param [in, out] ReadFruDataResponseSize Returns the size of > ReadFruDataResponse. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiReadFruData ( > + IN IPMI_READ_FRU_DATA_REQUEST *ReadFruDataRequest, > + OUT IPMI_READ_FRU_DATA_RESPONSE *ReadFruDataResponse, > + IN OUT UINT32 *ReadFruDataResponseSize > + ) > +{ > + EFI_STATUS Status; > + > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_STORAGE, > + IPMI_STORAGE_READ_FRU_DATA, > + (VOID *)ReadFruDataRequest, > + sizeof (*ReadFruDataRequest), > + (VOID *)ReadFruDataResponse, > + ReadFruDataResponseSize > + ); > + return Status; > +} > + > +/** > + This function writes specified data from the FRU Inventory Info area. > + > + @param [in] WriteFruDataRequest Pointer to > IPMI_WRITE_FRU_DATA_REQUEST. > + @param [in] WriteFruDataRequestSize Size of WriteFruDataRequest. > + @param [out] WriteFruDataResponse Pointer to receive > IPMI_WRITE_FRU_DATA_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiWriteFruData ( > + IN IPMI_WRITE_FRU_DATA_REQUEST *WriteFruDataRequest, > + IN UINT32 WriteFruDataRequestSize, > + OUT IPMI_WRITE_FRU_DATA_RESPONSE *WriteFruDataResponse > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*WriteFruDataResponse); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_STORAGE, > + IPMI_STORAGE_WRITE_FRU_DATA, > + (VOID *)WriteFruDataRequest, > + WriteFruDataRequestSize, > + (VOID *)WriteFruDataResponse, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function returns the number of entries in the SEL > + > + @param [out] GetSelInfoResponse Pointer to receive > IPMI_GET_SEL_INFO_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetSelInfo ( > + OUT IPMI_GET_SEL_INFO_RESPONSE *GetSelInfoResponse > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*GetSelInfoResponse); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_STORAGE, > + IPMI_STORAGE_GET_SEL_INFO, > + NULL, > + 0, > + (VOID *)GetSelInfoResponse, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function retrieves entries from the SEL > + > + @param [in] GetSelEntryRequest Pointer to > IPMI_GET_SEL_ENTRY_REQUEST. > + @param [out] GetSelEntryResponse Pointer to receive > IPMI_GET_SEL_ENTRY_RESPONSE. > + @param [in, out] GetSelEntryResponseSize Size of entire > GetSelEntryResponse. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetSelEntry ( > + IN IPMI_GET_SEL_ENTRY_REQUEST *GetSelEntryRequest, > + OUT IPMI_GET_SEL_ENTRY_RESPONSE *GetSelEntryResponse, > + IN OUT UINT32 *GetSelEntryResponseSize > + ) > +{ > + EFI_STATUS Status; > + > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_STORAGE, > + IPMI_STORAGE_GET_SEL_ENTRY, > + (VOID *)GetSelEntryRequest, > + sizeof (*GetSelEntryRequest), > + (VOID *)GetSelEntryResponse, > + GetSelEntryResponseSize > + ); > + return Status; > +} > + > +/** > + This function adds an entry in the SEL > + > + @param [in] AddSelEntryRequest Pointer to > IPMI_ADD_SEL_ENTRY_REQUEST. > + @param [out] AddSelEntryResponse Pointer to receive > IPMI_ADD_SEL_ENTRY_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiAddSelEntry ( > + IN IPMI_ADD_SEL_ENTRY_REQUEST *AddSelEntryRequest, > + OUT IPMI_ADD_SEL_ENTRY_RESPONSE *AddSelEntryResponse > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*AddSelEntryResponse); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_STORAGE, > + IPMI_STORAGE_ADD_SEL_ENTRY, > + (VOID *)AddSelEntryRequest, > + sizeof (*AddSelEntryRequest), > + (VOID *)AddSelEntryResponse, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function adds SEL Entry command that allows the record to be > incrementally > + added to the SEL. > + > + @param [in] PartialAddSelEntryRequest Pointer to > IPMI_PARTIAL_ADD_SEL_ENTRY_REQUEST. > + @param [in] PartialAddSelEntryRequestSize Size of entire > PartialAddSelEntryRequest. > + @param [out] PartialAddSelEntryResponse Pointer to receive > IPMI_PARTIAL_ADD_SEL_ENTRY_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiPartialAddSelEntry ( > + IN IPMI_PARTIAL_ADD_SEL_ENTRY_REQUEST > *PartialAddSelEntryRequest, > + IN UINT32 PartialAddSelEntryRequestSize, > + OUT IPMI_PARTIAL_ADD_SEL_ENTRY_RESPONSE > *PartialAddSelEntryResponse > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*PartialAddSelEntryResponse); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_STORAGE, > + IPMI_STORAGE_PARTIAL_ADD_SEL_ENTRY, > + (VOID *)PartialAddSelEntryRequest, > + PartialAddSelEntryRequestSize, > + (VOID *)PartialAddSelEntryResponse, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function erases all contents of the System Event Log. > + > + @param [in] ClearSelRequest Pointer to IPMI_CLEAR_SEL_REQUEST. > + @param [out] ClearSelResponse Pointer to receive > IPMI_CLEAR_SEL_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiClearSel ( > + IN IPMI_CLEAR_SEL_REQUEST *ClearSelRequest, > + OUT IPMI_CLEAR_SEL_RESPONSE *ClearSelResponse > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*ClearSelResponse); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_STORAGE, > + IPMI_STORAGE_CLEAR_SEL, > + (VOID *)ClearSelRequest, > + sizeof (*ClearSelRequest), > + (VOID *)ClearSelResponse, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function returns the time from the SEL Device. > + > + @param [out] GetSelTimeResponse Pointer to > IPMI_GET_SEL_TIME_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetSelTime ( > + OUT IPMI_GET_SEL_TIME_RESPONSE *GetSelTimeResponse > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*GetSelTimeResponse); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_STORAGE, > + IPMI_STORAGE_GET_SEL_TIME, > + NULL, > + 0, > + (VOID *)GetSelTimeResponse, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function set the time in the SEL Device. > + > + @param [in] SetSelTimeRequest Pointer to > IPMI_SET_SEL_TIME_REQUEST. > + @param [out] CompletionCode IPMI completetion code, refer to > Ipmi.h. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiSetSelTime ( > + IN IPMI_SET_SEL_TIME_REQUEST *SetSelTimeRequest, > + OUT UINT8 *CompletionCode > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*CompletionCode); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_STORAGE, > + IPMI_STORAGE_SET_SEL_TIME, > + (VOID *)SetSelTimeRequest, > + sizeof (*SetSelTimeRequest), > + (VOID *)CompletionCode, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function returns the SDR command version for the SDR Repository > + > + @param [out] ClearSelResponse Pointer to receive > IPMI_GET_SDR_REPOSITORY_INFO_RESPONSE. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetSdrRepositoryInfo ( > + OUT IPMI_GET_SDR_REPOSITORY_INFO_RESPONSE > *GetSdrRepositoryInfoResp > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*GetSdrRepositoryInfoResp); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_STORAGE, > + IPMI_STORAGE_GET_SDR_REPOSITORY_INFO, > + NULL, > + 0, > + (VOID *)GetSdrRepositoryInfoResp, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function returns the sensor record specified by Record ID. > + > + @param [in] GetSdrRequest Pointer to IPMI_GET_SDR_REQUEST. > + @param [out] GetSdrResponse Pointer to receive > IPMI_GET_SDR_RESPONSE. > + @param [in, out] GetSdrResponseSize Size of entire GetSdrResponse. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetSdr ( > + IN IPMI_GET_SDR_REQUEST *GetSdrRequest, > + OUT IPMI_GET_SDR_RESPONSE *GetSdrResponse, > + IN OUT UINT32 *GetSdrResponseSize > + ) > +{ > + EFI_STATUS Status; > + > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_STORAGE, > + IPMI_STORAGE_GET_SDR, > + (VOID *)GetSdrRequest, > + sizeof (*GetSdrRequest), > + (VOID *)GetSdrResponse, > + GetSdrResponseSize > + ); > + return Status; > +} > diff --git > a/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibN > etFnTransport.c > b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibN > etFnTransport.c > new file mode 100644 > index 0000000000..a93f7406f1 > --- /dev/null > +++ > b/Features/ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLibN > etFnTransport.c > @@ -0,0 +1,156 @@ > +/** @file > + IPMI Command - NetFnTransport. > + > + Copyright (c) 2018 - 2021, Intel Corporation. All rights reserved.<BR> > + Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.<BR> > + > + SPDX-License-Identifier: BSD-2-Clause-Patent > +**/ > + > +#include <PiPei.h> > +#include <Library/BaseMemoryLib.h> > +#include <Library/DebugLib.h> > +#include <Library/IpmiLib.h> > + > +#include <IndustryStandard/Ipmi.h> > + > +/** > + This function sends command to BMC to notify a remote application > + that a SOL payload is activating on another channel. > + > + @param [in] SolActivatingRequest The get channel information request. > + @param [out] CompletionCode IPMI completetion code, refer to > Ipmi.h. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiSolActivating ( > + IN IPMI_SOL_ACTIVATING_REQUEST *SolActivatingRequest, > + OUT UINT8 *CompletionCode > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*CompletionCode); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_TRANSPORT, > + IPMI_TRANSPORT_SOL_ACTIVATING, > + (VOID *)SolActivatingRequest, > + sizeof (*SolActivatingRequest), > + (VOID *)CompletionCode, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function is used to set parameters such as the network addressing > + information required for SOL payload operation. > + > + @param [in] SetConfigurationParametersRequest Pointer to > IPMI_SET_SOL_CONFIGURATION_PARAMETERS_REQUEST. > + @param [in] SetConfigurationParametersRequestSize Size of entire > SetConfigurationParametersRequestSize. > + @param [out] CompletionCode IPMI completetion code, refer > to Ipmi.h. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiSetSolConfigurationParameters ( > + IN IPMI_SET_SOL_CONFIGURATION_PARAMETERS_REQUEST > *SetConfigurationParametersRequest, > + IN UINT32 SetConfigurationParametersRequestSize, > + OUT UINT8 *CompletionCode > + ) > +{ > + EFI_STATUS Status; > + UINT32 DataSize; > + > + DataSize = sizeof (*CompletionCode); > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_TRANSPORT, > + IPMI_TRANSPORT_SET_SOL_CONFIG_PARAM, > + (VOID *)SetConfigurationParametersRequest, > + SetConfigurationParametersRequestSize, > + (VOID *)CompletionCode, > + &DataSize > + ); > + return Status; > +} > + > +/** > + This function is used to retrieve the configuration parameters from the > + Set SOL Configuration Parameters. > + > + @param [in] GetConfigurationParametersRequest Pointer to > IPMI_SET_SOL_CONFIGURATION_PARAMETERS_REQUEST. > + @param [out] GetConfigurationParametersResponse Pointer to > receive IPMI_GET_SOL_CONFIGURATION_PARAMETERS_RESPONSE > + @param [in, out] GetConfigurationParametersResponseSize When in, > which is the expected size of > + response. When out, which is the actual > + size returned. > + > + @retval EFI_STASTUS See the return values of IpmiSubmitCommand () > function. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetSolConfigurationParameters ( > + IN IPMI_GET_SOL_CONFIGURATION_PARAMETERS_REQUEST > *GetConfigurationParametersRequest, > + OUT IPMI_GET_SOL_CONFIGURATION_PARAMETERS_RESPONSE > *GetConfigurationParametersResponse, > + IN OUT UINT32 > *GetConfigurationParametersResponseSize > + ) > +{ > + EFI_STATUS Status; > + > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_TRANSPORT, > + IPMI_TRANSPORT_GET_SOL_CONFIG_PARAM, > + (VOID *)GetConfigurationParametersRequest, > + sizeof (*GetConfigurationParametersRequest), > + (VOID *)GetConfigurationParametersResponse, > + GetConfigurationParametersResponseSize > + ); > + return Status; > +} > + > +/** > + This function gets the LAN configuration parameter. > + > + @param[in] GetLanConfigurationParametersRequest Request data > + @param[out] GetLanConfigurationParametersResponse Response data > + @param[in,out] GetLanConfigurationParametersSize When input, the > expected size of response data. > + When out, the exact size of response data. > + > + @retval EFI_SUCCESS Lan configuration parameter is returned in the > response. > + @retval EFI_INVALID_PARAMETER One of the given input parameters is > invalid. > + @retval Others Other errors. > + > +**/ > +EFI_STATUS > +EFIAPI > +IpmiGetLanConfigurationParameters ( > + IN IPMI_GET_LAN_CONFIGURATION_PARAMETERS_REQUEST > *GetLanConfigurationParametersRequest, > + OUT IPMI_GET_LAN_CONFIGURATION_PARAMETERS_RESPONSE > *GetLanConfigurationParametersResponse, > + IN OUT UINT32 *GetLanConfigurationParametersSize > + ) > +{ > + EFI_STATUS Status; > + > + if ((GetLanConfigurationParametersRequest == NULL) || > + (GetLanConfigurationParametersResponse == NULL) || > + (GetLanConfigurationParametersSize == NULL)) > + { > + return EFI_INVALID_PARAMETER; > + } > + > + Status = IpmiSubmitCommand ( > + IPMI_NETFN_TRANSPORT, > + IPMI_TRANSPORT_GET_LAN_CONFIG_PARAMETERS, > + (UINT8 *)GetLanConfigurationParametersRequest, > + sizeof (*GetLanConfigurationParametersRequest), > + (UINT8 *)GetLanConfigurationParametersResponse, > + GetLanConfigurationParametersSize > + ); > + return Status; > +} > -- > 2.37.1.windows.1 > > > > > -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#104331): https://edk2.groups.io/g/devel/message/104331 Mute This Topic: https://groups.io/mt/98699831/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=-=-=-=-=-=-=-=-=-=-=-
From: Abner Chang <abner.chang@amd.com>
BZ #: 4444
Add IpmiCommandLib to ManageabilityPkg package.
Signed-off-by: Abner Chang <abner.chang@amd.com>
Cc: Isaac Oram <isaac.w.oram@intel.com>
Cc: Abdul Lateef Attar <abdattar@amd.com>
Cc: Nickle Wang <nicklew@nvidia.com>
Cc: Tinh Nguyen <tinhnguyen@os.amperecomputing.com>
---
Features/ManageabilityPkg/ManageabilityPkg.dec | 4 ++++
Features/ManageabilityPkg/Include/Manageability.dsc | 1 +
Features/ManageabilityPkg/ManageabilityPkg.dsc | 1 +
3 files changed, 6 insertions(+)
diff --git a/Features/ManageabilityPkg/ManageabilityPkg.dec b/Features/ManageabilityPkg/ManageabilityPkg.dec
index 6f58ab4f45..38813c5f48 100644
--- a/Features/ManageabilityPkg/ManageabilityPkg.dec
+++ b/Features/ManageabilityPkg/ManageabilityPkg.dec
@@ -18,6 +18,10 @@
Include
[LibraryClasses]
+ ## @libraryclass IPMI command library
+ # Provide the help functions to send IPMI commands.
+ IpmiCommandLib|Include/Library/IpmiCommandLib.h
+
## @libraryclass Manageability Transport Library
# Manageability Transport Library definitions
ManageabilityTransportLib|Include/Library/ManageabilityTransportLib.h
diff --git a/Features/ManageabilityPkg/Include/Manageability.dsc b/Features/ManageabilityPkg/Include/Manageability.dsc
index 5e7cdb885f..a432b0ff26 100644
--- a/Features/ManageabilityPkg/Include/Manageability.dsc
+++ b/Features/ManageabilityPkg/Include/Manageability.dsc
@@ -7,6 +7,7 @@
##
[LibraryClasses]
ManageabilityTransportHelperLib|ManageabilityPkg/Library/BaseManageabilityTransportHelperLib/BaseManageabilityTransportHelper.inf
+ IpmiCommandLib|ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLib.inf
[LibraryClasses.common.DXE_DRIVER]
PldmProtocolLib|ManageabilityPkg/Library/PldmProtocolLibrary/Dxe/PldmProtocolLib.inf
diff --git a/Features/ManageabilityPkg/ManageabilityPkg.dsc b/Features/ManageabilityPkg/ManageabilityPkg.dsc
index a0712d1c0a..e3baf27f2a 100644
--- a/Features/ManageabilityPkg/ManageabilityPkg.dsc
+++ b/Features/ManageabilityPkg/ManageabilityPkg.dsc
@@ -49,6 +49,7 @@
ManageabilityPkg/Library/ManageabilityTransportKcsLib/Dxe/DxeManageabilityTransportKcs.inf
ManageabilityPkg/Library/ManageabilityTransportMctpLib/Dxe/DxeManageabilityTransportMctp.inf
ManageabilityPkg/Library/PldmProtocolLibrary/Dxe/PldmProtocolLib.inf
+ ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLib.inf
[LibraryClasses]
ManageabilityTransportLib|ManageabilityPkg/Library/BaseManageabilityTransportNullLib/BaseManageabilityTransportNull.inf
--
2.37.1.windows.1
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#104096): https://edk2.groups.io/g/devel/message/104096
Mute This Topic: https://groups.io/mt/98699832/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-
[AMD Official Use Only - General] Reviewed-by: Abdul Lateef Attar <abdattar@amd.com> -----Original Message----- From: Chang, Abner <Abner.Chang@amd.com> Sent: 05 May 2023 10:54 To: devel@edk2.groups.io Cc: Isaac Oram <isaac.w.oram@intel.com>; Attar, AbdulLateef (Abdul Lateef) <AbdulLateef.Attar@amd.com>; Nickle Wang <nicklew@nvidia.com>; Tinh Nguyen <tinhnguyen@os.amperecomputing.com> Subject: [edk2-platforms][PATCH] ManageabilityPkg/IpmiCommandLib: Add IpmiCommandLib to package From: Abner Chang <abner.chang@amd.com> BZ #: 4444 Add IpmiCommandLib to ManageabilityPkg package. Signed-off-by: Abner Chang <abner.chang@amd.com> Cc: Isaac Oram <isaac.w.oram@intel.com> Cc: Abdul Lateef Attar <abdattar@amd.com> Cc: Nickle Wang <nicklew@nvidia.com> Cc: Tinh Nguyen <tinhnguyen@os.amperecomputing.com> --- Features/ManageabilityPkg/ManageabilityPkg.dec | 4 ++++ Features/ManageabilityPkg/Include/Manageability.dsc | 1 + Features/ManageabilityPkg/ManageabilityPkg.dsc | 1 + 3 files changed, 6 insertions(+) diff --git a/Features/ManageabilityPkg/ManageabilityPkg.dec b/Features/ManageabilityPkg/ManageabilityPkg.dec index 6f58ab4f45..38813c5f48 100644 --- a/Features/ManageabilityPkg/ManageabilityPkg.dec +++ b/Features/ManageabilityPkg/ManageabilityPkg.dec @@ -18,6 +18,10 @@ Include [LibraryClasses] + ## @libraryclass IPMI command library + # Provide the help functions to send IPMI commands. + IpmiCommandLib|Include/Library/IpmiCommandLib.h + ## @libraryclass Manageability Transport Library # Manageability Transport Library definitions ManageabilityTransportLib|Include/Library/ManageabilityTransportLib.h diff --git a/Features/ManageabilityPkg/Include/Manageability.dsc b/Features/ManageabilityPkg/Include/Manageability.dsc index 5e7cdb885f..a432b0ff26 100644 --- a/Features/ManageabilityPkg/Include/Manageability.dsc +++ b/Features/ManageabilityPkg/Include/Manageability.dsc @@ -7,6 +7,7 @@ ## [LibraryClasses] ManageabilityTransportHelperLib|ManageabilityPkg/Library/BaseManageabilityTransportHelperLib/BaseManageabilityTransportHelper.inf + IpmiCommandLib|ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLib.inf [LibraryClasses.common.DXE_DRIVER] PldmProtocolLib|ManageabilityPkg/Library/PldmProtocolLibrary/Dxe/PldmProtocolLib.inf diff --git a/Features/ManageabilityPkg/ManageabilityPkg.dsc b/Features/ManageabilityPkg/ManageabilityPkg.dsc index a0712d1c0a..e3baf27f2a 100644 --- a/Features/ManageabilityPkg/ManageabilityPkg.dsc +++ b/Features/ManageabilityPkg/ManageabilityPkg.dsc @@ -49,6 +49,7 @@ ManageabilityPkg/Library/ManageabilityTransportKcsLib/Dxe/DxeManageabilityTransportKcs.inf ManageabilityPkg/Library/ManageabilityTransportMctpLib/Dxe/DxeManageabilityTransportMctp.inf ManageabilityPkg/Library/PldmProtocolLibrary/Dxe/PldmProtocolLib.inf + ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLib.inf [LibraryClasses] ManageabilityTransportLib|ManageabilityPkg/Library/BaseManageabilityTransportNullLib/BaseManageabilityTransportNull.inf -- 2.37.1.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#104389): https://edk2.groups.io/g/devel/message/104389 Mute This Topic: https://groups.io/mt/98699832/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=-=-=-=-=-=-=-=-=-=-=-
Reviewed-by: Nickle Wang <nicklew@nvidia.com> Regards, Nickle > -----Original Message----- > From: abner.chang@amd.com <abner.chang@amd.com> > Sent: Friday, May 5, 2023 1:24 PM > To: devel@edk2.groups.io > Cc: Isaac Oram <isaac.w.oram@intel.com>; Abdul Lateef Attar > <abdattar@amd.com>; Nickle Wang <nicklew@nvidia.com>; Tinh Nguyen > <tinhnguyen@os.amperecomputing.com> > Subject: [edk2-platforms][PATCH] ManageabilityPkg/IpmiCommandLib: Add > IpmiCommandLib to package > > External email: Use caution opening links or attachments > > > From: Abner Chang <abner.chang@amd.com> > > BZ #: 4444 > Add IpmiCommandLib to ManageabilityPkg package. > > Signed-off-by: Abner Chang <abner.chang@amd.com> > Cc: Isaac Oram <isaac.w.oram@intel.com> > Cc: Abdul Lateef Attar <abdattar@amd.com> > Cc: Nickle Wang <nicklew@nvidia.com> > Cc: Tinh Nguyen <tinhnguyen@os.amperecomputing.com> > --- > Features/ManageabilityPkg/ManageabilityPkg.dec | 4 ++++ > Features/ManageabilityPkg/Include/Manageability.dsc | 1 + > Features/ManageabilityPkg/ManageabilityPkg.dsc | 1 + > 3 files changed, 6 insertions(+) > > diff --git a/Features/ManageabilityPkg/ManageabilityPkg.dec > b/Features/ManageabilityPkg/ManageabilityPkg.dec > index 6f58ab4f45..38813c5f48 100644 > --- a/Features/ManageabilityPkg/ManageabilityPkg.dec > +++ b/Features/ManageabilityPkg/ManageabilityPkg.dec > @@ -18,6 +18,10 @@ > Include > > [LibraryClasses] > + ## @libraryclass IPMI command library > + # Provide the help functions to send IPMI commands. > + IpmiCommandLib|Include/Library/IpmiCommandLib.h > + > ## @libraryclass Manageability Transport Library > # Manageability Transport Library definitions > ManageabilityTransportLib|Include/Library/ManageabilityTransportLib.h > diff --git a/Features/ManageabilityPkg/Include/Manageability.dsc > b/Features/ManageabilityPkg/Include/Manageability.dsc > index 5e7cdb885f..a432b0ff26 100644 > --- a/Features/ManageabilityPkg/Include/Manageability.dsc > +++ b/Features/ManageabilityPkg/Include/Manageability.dsc > @@ -7,6 +7,7 @@ > ## > [LibraryClasses] > > ManageabilityTransportHelperLib|ManageabilityPkg/Library/BaseManageability > TransportHelperLib/BaseManageabilityTransportHelper.inf > + > IpmiCommandLib|ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLi > b.inf > > [LibraryClasses.common.DXE_DRIVER] > > PldmProtocolLib|ManageabilityPkg/Library/PldmProtocolLibrary/Dxe/PldmProt > ocolLib.inf > diff --git a/Features/ManageabilityPkg/ManageabilityPkg.dsc > b/Features/ManageabilityPkg/ManageabilityPkg.dsc > index a0712d1c0a..e3baf27f2a 100644 > --- a/Features/ManageabilityPkg/ManageabilityPkg.dsc > +++ b/Features/ManageabilityPkg/ManageabilityPkg.dsc > @@ -49,6 +49,7 @@ > > ManageabilityPkg/Library/ManageabilityTransportKcsLib/Dxe/DxeManageability > TransportKcs.inf > > ManageabilityPkg/Library/ManageabilityTransportMctpLib/Dxe/DxeManageabili > tyTransportMctp.inf > ManageabilityPkg/Library/PldmProtocolLibrary/Dxe/PldmProtocolLib.inf > + ManageabilityPkg/Library/IpmiCommandLib/IpmiCommandLib.inf > > [LibraryClasses] > > ManageabilityTransportLib|ManageabilityPkg/Library/BaseManageabilityTransp > ortNullLib/BaseManageabilityTransportNull.inf > -- > 2.37.1.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#104333): https://edk2.groups.io/g/devel/message/104333 Mute This Topic: https://groups.io/mt/98699832/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=-=-=-=-=-=-=-=-=-=-=-
© 2016 - 2024 Red Hat, Inc.