/** @file A Library to support all BMC access via IPMI command during PEI Phase. @copyright Copyright 2017 - 2021 Intel Corporation.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #include #include #include #include #include /** Initialize the global varible with the pointer of IpmiTransport Protocol. @return EFI_SUCCESS - Always return success **/ EFI_STATUS InitializeIpmiBase ( VOID ) { EFI_STATUS Status; PEI_IPMI_TRANSPORT_PPI *IpmiTransport; Status = PeiServicesLocatePpi (&gPeiIpmiTransportPpiGuid, 0, NULL, (VOID **) &IpmiTransport); if (EFI_ERROR (Status)) { ASSERT_EFI_ERROR (Status); } return Status; } /** Routine to send commands to BMC. @param NetFunction - Net function of the command @param Command - IPMI Command @param CommandData - Command Data @param CommandDataSize - Size of CommandData @param ResponseData - Response Data @param ResponseDataSize - Response Data Size @return EFI_NOT_AVAILABLE_YET - IpmiTransport Protocol is not installed yet **/ EFI_STATUS IpmiSubmitCommand ( IN UINT8 NetFunction, IN UINT8 Command, IN UINT8 *CommandData, IN UINT32 CommandDataSize, OUT UINT8 *ResponseData, IN OUT UINT32 *ResponseDataSize ) { EFI_STATUS Status; PEI_IPMI_TRANSPORT_PPI *IpmiTransport; Status = PeiServicesLocatePpi (&gPeiIpmiTransportPpiGuid, 0, NULL, (VOID **) &IpmiTransport); if (EFI_ERROR (Status)) { ASSERT_EFI_ERROR (Status); return Status; } Status = IpmiTransport->IpmiSubmitCommand ( IpmiTransport, NetFunction, 0, Command, CommandData, CommandDataSize, ResponseData, ResponseDataSize ); return Status; } /** Routine to send commands to BMC. @param BmcStatus - Ststus of Bmc @param ComAddress - IPMI Address @return EFI_NOT_AVAILABLE_YET - IpmiTransport Protocol is not installed yet **/ EFI_STATUS GetBmcStatus ( OUT BMC_STATUS *BmcStatus, OUT SM_COM_ADDRESS *ComAddress ) { EFI_STATUS Status; PEI_IPMI_TRANSPORT_PPI *IpmiTransport; Status = PeiServicesLocatePpi (&gPeiIpmiTransportPpiGuid, 0, NULL, (VOID **) &IpmiTransport); if (EFI_ERROR (Status)) { ASSERT_EFI_ERROR (Status); return Status; } Status = IpmiTransport->GetBmcStatus ( IpmiTransport, BmcStatus, ComAddress ); return Status; }