2 Implementation of Ipmi Library for SMM.
4 Copyright (c) 2009 - 2015, Intel Corporation. All rights reserved.<BR>
5 SPDX-License-Identifier: BSD-2-Clause-Patent
10 #include <Protocol/IpmiProtocol.h>
11 #include <Library/IpmiLib.h>
12 #include <Library/SmmServicesTableLib.h>
13 #include <Library/DebugLib.h>
15 IPMI_PROTOCOL
*mIpmiProtocol
= NULL
;
18 This service enables submitting commands via Ipmi.
20 @param[in] NetFunction Net function of the command.
21 @param[in] Command IPMI Command.
22 @param[in] RequestData Command Request Data.
23 @param[in] RequestDataSize Size of Command Request Data.
24 @param[out] ResponseData Command Response Data. The completion code is the first byte of response data.
25 @param[in, out] ResponseDataSize Size of Command Response Data.
27 @retval EFI_SUCCESS The command byte stream was successfully submit to the device and a response was successfully received.
28 @retval EFI_NOT_FOUND The command was not successfully sent to the device or a response was not successfully received from the device.
29 @retval EFI_NOT_READY Ipmi Device is not ready for Ipmi command access.
30 @retval EFI_DEVICE_ERROR Ipmi Device hardware error.
31 @retval EFI_TIMEOUT The command time out.
32 @retval EFI_UNSUPPORTED The command was not successfully sent to the device.
33 @retval EFI_OUT_OF_RESOURCES The resource allcation is out of resource or data size error.
40 IN UINT8
*RequestData
,
41 IN UINT32 RequestDataSize
,
42 OUT UINT8
*ResponseData
,
43 IN OUT UINT32
*ResponseDataSize
48 if (mIpmiProtocol
== NULL
) {
49 Status
= gSmst
->SmmLocateProtocol (
50 &gSmmIpmiProtocolGuid
,
52 (VOID
**)&mIpmiProtocol
54 if (EFI_ERROR (Status
)) {
56 // Smm Ipmi Protocol is not installed. So, IPMI device is not present.
58 DEBUG ((DEBUG_ERROR
, "IpmiSubmitCommand for SMM Status - %r\n", Status
));
63 Status
= mIpmiProtocol
->IpmiSubmitCommand (
72 if (EFI_ERROR (Status
)) {