blob: d9f59dd663da9d13e2743b7759e740e4154f5073 [file]
/** @file
EDKII PLDM Protocol common header file.
Copyright (C) 2023-2026 Advanced Micro Devices, Inc. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef MANAGEABILITY_EDKII_PLDM_COMMON_H_
#define MANAGEABILITY_EDKII_PLDM_COMMON_H_
#include <IndustryStandard/Pldm.h>
#include <Library/ManageabilityTransportLib.h>
#define GET_PLDM_MESSAGE_PAYLOAD_SIZE(PayloadSize) (PayloadSize - sizeof (PLDM_RESPONSE_HEADER))
#define GET_PLDM_MESSAGE_PAYLOAD_PTR(PayloadPtr) ((UINT8 *)PayloadPtr + sizeof (PLDM_RESPONSE_HEADER))
typedef struct {
UINT8 PldmType;
UINT8 PldmCommand;
UINT32 ResponseSize;
} PLDM_MESSAGE_PACKET_MAPPING;
/**
This functions setup the PLDM 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
SetupPldmTransportHardwareInformation (
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] PldmType PLDM message type.
@param[in] PldmCommand PLDM command of this PLDM type.
@param[in] SourceId PLDM source terminus ID.
@param[in] DestinationId PLDM destination terminus ID.
@param[out] PacketHeader The pointer to receive header of request.
@param[out] PacketHeaderSize Packet header size in bytes.
@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.
@param[out] PacketTrailerSize Packet trailer size in bytes.
@retval EFI_SUCCESS Request packet is returned.
@retval EFI_UNSUPPORTED Request packet is not returned because
the unsupported transport interface.
**/
EFI_STATUS
SetupPldmRequestTransportPacket (
IN MANAGEABILITY_TRANSPORT_TOKEN *TransportToken,
IN UINT8 PldmType,
IN UINT8 PldmCommand,
IN UINT8 SourceId,
IN UINT8 DestinationId,
OUT MANAGEABILITY_TRANSPORT_HEADER *PacketHeader,
OUT UINT16 *PacketHeaderSize,
IN OUT UINT8 **PacketBody,
IN OUT UINT32 *PacketBodySize,
OUT MANAGEABILITY_TRANSPORT_TRAILER *PacketTrailer,
OUT UINT16 *PacketTrailerSize
);
/**
Common code to submit PLDM commands
@param[in] TransportToken Transport token.
@param[in] PldmType PLDM message type.
@param[in] PldmCommand PLDM command of this PLDM type.
@param[in] PldmTerminusSourceId PLDM source terminus ID.
@param[in] PldmTerminusDestinationId PLDM destination terminus ID.
@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 PLDM transport interface is not ready for PLDM command access.
@retval EFI_DEVICE_ERROR PLDM 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
CommonPldmSubmitCommand (
IN MANAGEABILITY_TRANSPORT_TOKEN *TransportToken,
IN UINT8 PldmType,
IN UINT8 PldmCommand,
IN UINT8 PldmTerminusSourceId,
IN UINT8 PldmTerminusDestinationId,
IN UINT8 *RequestData OPTIONAL,
IN UINT32 RequestDataSize,
OUT UINT8 *ResponseData OPTIONAL,
IN OUT UINT32 *ResponseDataSize
);
#endif // MANAGEABILITY_EDKII_PLDM_COMMON_H_