blob: 8e1de55b88fdb120909d145a3d6b87ebcf8d0ff0 [file]
/** @file
Protocol of EDKII PLDM SMBIOS Transfer Protocol.
Copyright (C) 2023-2026 Advanced Micro Devices, Inc. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
#ifndef EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL_H_
#define EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL_H_
#include <IndustryStandard/Pldm.h>
typedef struct _EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL;
#define EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL_GUID \
{ \
0xFA431C3C, 0x816B, 0x4B32, 0xA3, 0xE0, 0xAD, 0x9B, 0x7F, 0x64, 0x27, 0x2E \
}
#define EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL_VERSION_MAJOR 1
#define EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL_VERSION_MINOR 0
#define EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL_VERSION ((EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL_VERSION_MAJOR << 8) |\
EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL_VERSION_MINOR)
/**
This function sets PLDM SMBIOS transfer source and destination
PLDM terminus ID.
@param [in] This EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL instance.
@param [in] SourceId PLDM source terminus ID.
Set to PLDM_TERMINUS_ID_UNASSIGNED means use
platform default PLDM terminus ID.
(gManageabilityPkgTokenSpaceGuid.PcdPldmSourceTerminusId)
@param [in] DestinationId PLDM destination terminus ID.
Set to PLDM_TERMINUS_ID_UNASSIGNED means use
platform default PLDM terminus ID.
(gManageabilityPkgTokenSpaceGuid.PcdPldmDestinationEndpointId)
@retval EFI_SUCCESS Get SMBIOS table metadata Successfully.
@retval EFI_INVALID_PARAMETER Invalid value of source or destination
PLDM terminus ID.
**/
typedef
EFI_STATUS
(EFIAPI *PLDM_GET_SMBIOS_TRANSFER_TERMINUS_ID)(
IN UINT8 SourceId,
IN UINT8 DestinationId
);
/**
This function gets SMBIOS table metadata.
@param [in] This EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL instance.
@param [out] Buffer Buffer to receive the SMBIOS table metadata.
@retval EFI_SUCCESS Get SMBIOS table metadata Successfully.
@retval EFI_UNSUPPORTED The function is unsupported by this
driver instance.
@retval Other values Fail to get SMBIOS table metadata.
**/
typedef
EFI_STATUS
(EFIAPI *PLDM_GET_SMBIOS_STRUCTURE_TABLE_METADATA)(
IN EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL *This,
OUT PLDM_SMBIOS_STRUCTURE_TABLE_METADATA *Buffer
);
/**
This function sets SMBIOS table metadata.
@param [in] This EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL instance.
@param [in] Buffer Pointer to SMBIOS table metadata.
@retval EFI_SUCCESS Set SMBIOS table metadata Successfully.
@retval EFI_UNSUPPORTED The function is unsupported by this
driver instance.
@retval Other values Fail to set SMBIOS table metadata.
**/
typedef
EFI_STATUS
(EFIAPI *PLDM_SET_SMBIOS_STRUCTURE_TABLE_METADATA)(
IN EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL *This,
IN PLDM_SMBIOS_STRUCTURE_TABLE_METADATA *Buffer
);
/**
This function gets SMBIOS structure table.
@param [in] This EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL instance.
@param [out] Buffer Pointer to the returned SMBIOS structure table.
Caller has to free this memory block when it
is no longer needed.
@param [out] BufferSize Size of the returned message payload in buffer.
@retval EFI_SUCCESS Gets SMBIOS structure table successfully.
@retval EFI_UNSUPPORTED The function is unsupported by this
driver instance.
@retval Other values Fail to get SMBIOS structure table.
**/
typedef
EFI_STATUS
(EFIAPI *PLDM_GET_SMBIOS_STRUCTURE_TABLE)(
IN EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL *This,
OUT UINT8 **Buffer,
OUT UINT32 *BufferSize
);
/**
This function sets SMBIOS structure table.
@param [in] This EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL instance.
@retval EFI_SUCCESS Successful
@retval EFI_UNSUPPORTED The function is unsupported by this
driver instance.
@retval Other values Fail to set SMBIOS structure table.
**/
typedef
EFI_STATUS
(EFIAPI *PLDM_SET_SMBIOS_STRUCTURE_TABLE)(
IN EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL *This
);
/**
This function gets particular type of SMBIOS structure.
@param [in] This EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL instance.
@param [in] TypeId The type of SMBIOS structure.
@param [in] StructureInstanceId The instance ID of particular type of SMBIOS structure.
@param [out] Buffer Pointer to the returned SMBIOS structure.
Caller has to free this memory block when it
is no longer needed.
@param [out] BufferSize Size of the returned message payload in buffer.
@retval EFI_SUCCESS Gets particular type of SMBIOS structure successfully.
@retval EFI_UNSUPPORTED The function is unsupported by this
driver instance.
@retval Other values Fail to set SMBIOS structure table.
**/
typedef
EFI_STATUS
(EFIAPI *PLDM_GET_SMBIOS_STRUCTURE_BY_TYPE)(
IN EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL *This,
IN UINT8 TypeId,
IN UINT16 StructureInstanceId,
OUT UINT8 **Buffer,
OUT UINT32 *BufferSize
);
/**
This function gets particular handle of SMBIOS structure.
@param [in] This EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL instance.
@param [in] Handle The handle of SMBIOS structure.
@param [out] Buffer Pointer to the returned SMBIOS structure.
Caller has to free this memory block when it
is no longer needed.
@param [out] BufferSize Size of the returned message payload in buffer.
@retval EFI_SUCCESS Gets particular handle of SMBIOS structure successfully.
@retval EFI_UNSUPPORTED The function is unsupported by this
driver instance.
@retval Other values Fail to set SMBIOS structure table.
**/
typedef
EFI_STATUS
(EFIAPI *PLDM_GET_SMBIOS_STRUCTURE_BY_HANDLE)(
IN EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL *This,
IN UINT16 Handle,
OUT UINT8 **Buffer,
OUT UINT32 *BufferSize
);
//
// EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL
//
typedef struct {
PLDM_GET_SMBIOS_TRANSFER_TERMINUS_ID SetPldmSmbiosTransferTerminusId;
PLDM_GET_SMBIOS_STRUCTURE_TABLE_METADATA GetSmbiosStructureTableMetaData;
PLDM_SET_SMBIOS_STRUCTURE_TABLE_METADATA SetSmbiosStructureTableMetaData;
PLDM_GET_SMBIOS_STRUCTURE_TABLE GetSmbiosStructureTable;
PLDM_SET_SMBIOS_STRUCTURE_TABLE SetSmbiosStructureTable;
PLDM_GET_SMBIOS_STRUCTURE_BY_TYPE GetSmbiosStructureByType;
PLDM_GET_SMBIOS_STRUCTURE_BY_HANDLE GetSmbiosStructureByHandle;
} EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL_V1_0;
///
/// Definitions of EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL.
/// This is a union that can accommodate the new functionalities defined
/// in PLDM SMBIOS Transfer specification in the future.
/// The new added function must has its own EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL
/// structure with the incremental version number.
/// e.g., EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL_V1_1.
///
/// The new function must be added base on the last version of
/// EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL to keep the backward compatibility.
///
typedef union {
EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL_V1_0 *Version1_0;
} EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL_FUNCTION;
struct _EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL {
UINT16 ProtocolVersion;
EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL_FUNCTION Functions;
};
extern EFI_GUID gEdkiiPldmSmbiosTransferProtocolGuid;
#endif // EDKII_PLDM_SMBIOS_TRANSFER_PROTOCOL_H_