blob: 242080b76b2c62543c4d567a478ae825211330d5 [file]
/** @file
Manageability transport KCS internal used definitions.
Copyright (C) 2023-2025 Advanced Micro Devices, Inc. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef MANAGEABILITY_TRANSPORT_KCS_LIB_H_
#define MANAGEABILITY_TRANSPORT_KCS_LIB_H_
#include <Library/ManageabilityTransportLib.h>
#define MANAGEABILITY_TRANSPORT_KCS_SIGNATURE SIGNATURE_32 ('M', 'T', 'K', 'C')
#define KCS_BASE_ADDRESS mKcsHardwareInfo.IoBaseAddress
#define KCS_REG_DATA_IN mKcsHardwareInfo.IoDataInAddress
#define KCS_REG_DATA_OUT mKcsHardwareInfo.IoDataOutAddress
#define KCS_REG_COMMAND mKcsHardwareInfo.IoCommandAddress
#define KCS_REG_STATUS mKcsHardwareInfo.IoStatusAddress
///
/// Manageability transport KCS internal data structure.
///
typedef struct {
UINTN Signature;
MANAGEABILITY_TRANSPORT_TOKEN Token;
} MANAGEABILITY_TRANSPORT_KCS;
#define MANAGEABILITY_TRANSPORT_KCS_FROM_LINK(a) CR (a, MANAGEABILITY_TRANSPORT_KCS, Token, MANAGEABILITY_TRANSPORT_KCS_SIGNATURE)
#define IPMI_KCS_GET_STATE(s) (s >> 6)
#define IPMI_KCS_SET_STATE(s) (s << 6)
#define MCTP_KCS_MTU_IN_POWER_OF_2 8
/// 5 sec, according to IPMI spec
#define IPMI_KCS_TIMEOUT_5_SEC 5000*1000
#define IPMI_KCS_TIMEOUT_1MS 1000
/**
This service communicates with BMC using KCS protocol.
@param[in] TransmitHeader KCS packet header.
@param[in] TransmitHeaderSize KCS packet header size in byte.
@param[in] TransmitTrailer KCS packet trailer.
@param[in] TransmitTrailerSize KCS packet trailer size in byte.
@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.
@param[out] AdditionalStatus Additional status of this transaction.
@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
EFIAPI
KcsTransportSendCommand (
IN MANAGEABILITY_TRANSPORT_HEADER TransmitHeader OPTIONAL,
IN UINT16 TransmitHeaderSize,
IN MANAGEABILITY_TRANSPORT_TRAILER TransmitTrailer OPTIONAL,
IN UINT16 TransmitTrailerSize,
IN UINT8 *RequestData OPTIONAL,
IN UINT32 RequestDataSize,
OUT UINT8 *ResponseData OPTIONAL,
IN OUT UINT32 *ResponseDataSize OPTIONAL,
OUT MANAGEABILITY_TRANSPORT_ADDITIONAL_STATUS *AdditionalStatus
);
/**
This function reads 8-bit value from register address.
@param[in] Address This represents either 16-bit IO address
or 32-bit memory mapped address.
@retval UINT8 8-bit value.
**/
UINT8
KcsRegisterRead8 (
MANAGEABILITY_TRANSPORT_HARDWARE_IO Address
);
/**
This function writes 8-bit value to register address.
@param[in] Address This represents either 16-bit IO address
or 32-bit memory mapped address.
@param[in] Value 8-bit value write to register address
**/
VOID
KcsRegisterWrite8 (
MANAGEABILITY_TRANSPORT_HARDWARE_IO Address,
UINT8 Value
);
#endif