/** @file
IPMI Manageability Protocol common header file.
Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef MANAGEABILITY_IPMI_COMMON_H_
#define MANAGEABILITY_IPMI_COMMON_H_
#include
#include
///
/// IPMI KCS hardware information.
///
#define IPMI_KCS_BASE_ADDRESS PcdGet16 (PcdIpmiKcsIoBaseAddress)
#define IPMI_KCS_REG_DATA_IN IPMI_KCS_BASE_ADDRESS + IPMI_KCS_DATA_IN_REGISTER_OFFSET
#define IPMI_KCS_REG_DATA_OUT IPMI_KCS_BASE_ADDRESS + IPMI_KCS_DATA_OUT_REGISTER_OFFSET
#define IPMI_KCS_REG_COMMAND IPMI_KCS_BASE_ADDRESS + IPMI_KCS_COMMAND_REGISTER_OFFSET
#define IPMI_KCS_REG_STATUS IPMI_KCS_BASE_ADDRESS + IPMI_KCS_STATUS_REGISTER_OFFSET
/**
This functions setup the IPMI transport hardware information according
to the specification of transport token acquired from transport library.
@param[in] TransportToken The transport interface.
@param[out] HardwareInformation Pointer to receive the hardware information.
@retval EFI_SUCCESS Hardware information is returned in HardwareInformation.
Caller must free the memory allocated for HardwareInformation
once it doesn't need it.
@retval EFI_UNSUPPORTED No hardware information for the specification specified
in the transport token.
**/
EFI_STATUS
SetupIpmiTransportHardwareInformation (
IN MANAGEABILITY_TRANSPORT_TOKEN *TransportToken,
OUT MANAGEABILITY_TRANSPORT_HARDWARE_INFORMATION *HardwareInformation
);
/**
This functions setup the final header/body/trailer packets for
the acquired transport interface.
@param[in] TransportToken The transport interface.
@param[in] NetFunction IPMI function.
@param[in] Command IPMI command.
@param[out] PacketHeader The pointer to receive header of request.
@param[in, out] PacketBody The request body.
When IN, it is the caller's request body.
When OUT and NULL, the request body is not
changed.
Whee out and non-NULL, the request body is
changed to comfort the transport interface.
@param[in, out] PacketBodySize The request body size.
When IN and non-zero, it is the new data
length of request body.
When IN and zero, the request body is unchanged.
@param[out] PacketTrailer The pointer to receive trailer of request.
@retval EFI_SUCCESS Request packet is returned.
@retval EFI_UNSUPPORTED Request packet is not returned because
the unsupported transport interface.
**/
EFI_STATUS
SetupIpmiRequestTransportPacket (
IN MANAGEABILITY_TRANSPORT_TOKEN *TransportToken,
IN UINT8 NetFunction,
IN UINT8 Command,
OUT MANAGEABILITY_TRANSPORT_HEADER *PacketHeader OPTIONAL,
IN OUT UINT8 **PacketBody OPTIONAL,
IN OUT UINT32 *PacketBodySize OPTIONAL,
OUT MANAGEABILITY_TRANSPORT_TRAILER *PacketTrailer OPTIONAL
);
/**
Common code to submit IPMI commands
@param[in] TransportToken TRansport token.
@param[in] NetFunction Net function of the command.
@param[in] Command IPMI Command.
@param[in] RequestData Command Request Data.
@param[in] RequestDataSize Size of Command Request Data.
@param[out] ResponseData Command Response Data. The completion code is the first byte of response data.
@param[in, out] ResponseDataSize Size of Command Response Data.
@retval EFI_SUCCESS The command byte stream was successfully submit to the device and a response was successfully received.
@retval EFI_NOT_FOUND The command was not successfully sent to the device or a response was not successfully received from the device.
@retval EFI_NOT_READY Ipmi Device is not ready for Ipmi command access.
@retval EFI_DEVICE_ERROR Ipmi Device hardware error.
@retval EFI_TIMEOUT The command time out.
@retval EFI_UNSUPPORTED The command was not successfully sent to the device.
@retval EFI_OUT_OF_RESOURCES The resource allocation is out of resource or data size error.
**/
EFI_STATUS
CommonIpmiSubmitCommand (
IN MANAGEABILITY_TRANSPORT_TOKEN *TransportToken,
IN UINT8 NetFunction,
IN UINT8 Command,
IN UINT8 *RequestData OPTIONAL,
IN UINT32 RequestDataSize,
OUT UINT8 *ResponseData OPTIONAL,
IN OUT UINT32 *ResponseDataSize OPTIONAL
);
#endif