/** @file Protocol of EDKII PLDM SMBIOS Transfer Protocol. Copyright (C) 2023-2026 Advanced Micro Devices, Inc. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #pragma once #include 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;