/** @file Platform Level Data Model Protocol definition ;****************************************************************************** ;* Copyright (c) 2012, Insyde Software Corp. All Rights Reserved. ;* ;* You may not reproduce, distribute, publish, display, perform, modify, adapt, ;* transmit, broadcast, present, recite, release, license or otherwise exploit ;* any part of this publication in any form, by any means, without the prior ;* written permission of Insyde Software Corporation. ;* ;****************************************************************************** */ #ifndef _PLDM_BASE_H_ #define _PLDM_BASE_H_ #include #include #define EFI_PLDM_PROTOCOL_GUID \ { 0x5b6d567e, 0xb2e9, 0x470f, 0x9e, 0x21, 0x94, 0xb7, 0xde, 0xd0, 0x6a, 0xc9 } typedef struct _EFI_PLDM_PROTOCOL EFI_PLDM_PROTOCOL; // // PLDM Generic Completion Codes // #define PLDM_SUCCESS 0x00 #define PLDM_ERROR 0x01 #define PLDM_ERROR_INVALID_DATA 0x02 #define PLDM_ERROR_INVALID_LENGTH 0x03 #define PLDM_ERROR_NOT_READY 0x04 #define PLDM_ERROR_UNSUPPORTED_COMMAND 0x05 #define PLDM_ERROR_INVALID_PLDM_TYPE 0x20 #define PLDM_ERROR_INVALID_DATA_TRANSFER_HANDLE 0x80 #define PLDM_ERROR_INVALID_TRANSFER_OPERATION_FLAG 0x81 #define PLDM_ERROR_INVALID_TYPE_IN_REQUEST_DATA 0x83 #define PLDM_TYPE_MESSAGE_CONTROL_AND_DISCOVERY 0x00 #define PLDM_TYPE_SMBIOS 0x01 #define PLDM_TYPE_PLATFORM_MONITORING_AND_CONTROL 0x02 #define PLDM_TYPE_BIOS_CONTROL_AND_CONFIGURATION 0x03 #define PLDM_BASE_SET_TID 0x01 #define PLDM_BASE_GET_TID 0x02 #define PLDM_BASE_GET_PLDM_VERSION 0x03 #define PLDM_BASE_GET_PLDM_TYPES 0x04 #define PLDM_BASE_GET_PLDM_COMMANDS 0x05 #define PLDM_GET_SMBIOS_STRUCTURE_TABLE_METADATA 0x01 #define PLDM_SET_SMBIOS_STRUCTURE_TABLE_METADATA 0x02 #define PLDM_GET_SMBIOS_STRUCTURE_TABLE 0x03 #define PLDM_SET_SMBIOS_STRUCTURE_TABLE 0x04 #define PLDM_GET_SMBIOS_STRUCTURE_BY_TYPE 0x05 #define PLDM_GET_SMBIOS_STRUCTURE_BY_HANDLE 0x06 #define PLDM_GET_BIOS_TABLE 0x01 #define PLDM_SET_BIOS_TABLE 0x02 #define PLDM_UPDATE_BIOS_TABLE 0x03 #define PLDM_GET_BIOS_TAGS 0x04 #define PLDM_SET_BIOS_TAGS 0x05 #define PLDM_ACCEPT_BIOS_ATTR_PENDING_VALUES 0x06 #define PLDM_SET_BIOS_ATTR_CURRENT_VALUE 0x07 #define PLDM_GET_BIOS_ATTR_CURRENT_VALUE_BY_HANDLE 0x08 #define PLDM_GET_BIOS_ATTR_PENDING_VALUE_BY_HANDLE 0x09 #define PLDM_GET_BIOS_ATTR_CURRENT_VALUE_BY_TYPE 0x0A #define PLDM_GET_BIOS_ATTR_PENDING_VALUE_BY_TYPE 0x0B #define PLDM_GET_DATE_TIME 0x0C #define PLDM_SET_DATE_TIME 0x0D #define PLDM_GET_BIOS_STRING_TABLE_STRING_TYPE 0x0E #define PLDM_SET_BIOS_STRING_TABLE_STRING_TYPE 0x0F #define PLDM_PLATFORM_EVENT_MESSAGE 0x0A #define PLDM_GET_SENSOR_READING 0x11 #define PLDM_GET_STATE_SENSOR_READING 0x21 #define PLDM_RESPONSE_MESSAGE 0x00 #define PLDM_REQUEST_MESSAGE 0x01 #define PLDM_UNACKOWLEDGED_REQUEST_MESSAGE 0x03 #define PLDM_HEADER_VERSION 0x00 #define PLDM_BUFFER_SIZE 64 #define MAX_PLDM_PAYLOAD_SIZE 60 #define RESPONSE_TRANSFER_HEADER_SIZE 5 #define PLDM_HEADER_COMMON {\ MCTP_MESSAGE_TYPE_PLDM, /* MCTP Message Type */\ 0, /* Integrity Check */\ 0, /* Instance ID */\ 0, /* Reserved Bit */\ 0, /* Datagram Bit */\ 1, /* Request Bit */\ PLDM_HEADER_VERSION, /* Header Version */\ 0, /* PLDM Type */\ 0 /* Command Code */\ } typedef enum { PldmGetNextPart = 0x00, PldmGetFirstPart = 0x01 } PLDM_TRANSFER_OPERATION_FLAG; typedef enum { PldmTransferStart = 0x01, PldmTransferMiddle = 0x02, PldmTransferEnd = 0x04, PldmTransferStartAndEnd = 0x05 } PLDM_TRANSFER_FLAG; typedef enum { BiosEnumberation = 0x00, BiosString = 0x01, BiosPassword = 0x02, BiosInteger = 0x03, BiosBootConfigSetting = 0x04, BiosCollection = 0x05, BiosConfigSet = 0x06, BiosEnumberationReadOnly = 0x80, BiosStringReadOnly = 0x81, BiosPasswordReadOnly = 0x82, BiosIntegerReadOnly = 0x83, BiosBootConfigSettingReadOnly = 0x84, BiosCollectionReadOnly = 0x85, BiosConfigSetReadOnly = 0x86 } BIOS_ATTRIBUTE; typedef enum { BiosStringTable = 0x00, BiosAttrTable = 0x01, BiosAttrValueTable = 0x02, BiosAttrPendingValueTable = 0x03 } BIOS_TABLE_TYPE; #pragma pack (1) typedef struct { UINT8 MessageType : 7; UINT8 IntegrityCheck : 1; UINT8 InstanceId : 5; UINT8 Reserved : 1; UINT8 DatagramBit : 1; UINT8 RequestBit : 1; UINT8 PldmType : 6; UINT8 HeaderVersion : 2; UINT8 PldmCmdCode; } PLDM_HEADER; typedef struct { UINT32 DataTransferHandle; UINT8 TransferOperationFlag; UINT8 PldmType; } PLDM_GET_VERSION_REQUEST_DATA; typedef struct { UINT8 PldmType; UINT32 Version; } PLDM_GET_COMMANDS_REQUEST_DATA; typedef UINT8 PLDM_SUPPORTED_TYPES[8]; typedef UINT8 PLDM_SUPPORTED_COMMANDS[32]; typedef struct { UINT8 MajorVersion; UINT8 MinorVersion; UINT16 MaxStructureSize; UINT16 TableLength; UINT16 NumberOfSmbiosStructures; UINT32 Crc32; } PLDM_SMBIOS_STRUCTURE_TABLE_METADATA; typedef struct { UINT8 Second; UINT8 Minute; UINT8 Hour; UINT8 Day; UINT8 Month; UINT16 Year; } PLDM_DATE_TIME; typedef struct { BIOS_TABLE_TYPE TableType; UINT32 TableTag; } BIOS_TABLE_TAG; typedef struct { UINT16 Handle; UINT8 AttrType; UINT8 BootConfigType; UINT8 OrderAndFailThroughMode; UINT8 NumberOfPendingBootSourceSetting; UINT8 BootSourceIndex[16]; } BOOT_CONFIG_SETTING_ATTR_VALUE; #pragma pack () typedef EFI_STATUS (EFIAPI *PLDM_SET_BINDING_MCTP) ( IN EFI_PLDM_PROTOCOL *This, IN EFI_MCTP_PROTOCOL *BindingMctp ); typedef EFI_STATUS (EFIAPI *PLDM_SEND_MESSAGE) ( IN EFI_PLDM_PROTOCOL *This, IN PLDM_HEADER Header, IN VOID *Message, IN UINTN MessageSize ); typedef EFI_STATUS (EFIAPI *PLDM_RECEIVE_MESSAGE) ( IN EFI_PLDM_PROTOCOL *This, OUT PLDM_HEADER *Header, OUT VOID *Message, IN OUT UINTN *MessageSize ); typedef EFI_STATUS (EFIAPI *PLDM_GET_TID_COMMAND) ( IN EFI_PLDM_PROTOCOL *This, OUT UINT8 *Tid ); typedef EFI_STATUS (EFIAPI *PLDM_GET_VERSION_COMMAND) ( IN EFI_PLDM_PROTOCOL *This, IN UINT8 PldmType, OUT UINT32 *VersionInfo, OUT UINTN *VersionInfoSize ); typedef EFI_STATUS (EFIAPI *PLDM_GET_SUPPORTED_TYPES_COMMAND) ( EFI_PLDM_PROTOCOL *This, UINT8 *SupportedTypes ); typedef EFI_STATUS (EFIAPI *PLDM_GET_SUPPORTED_COMMANDS_COMMAND) ( EFI_PLDM_PROTOCOL *This, UINT8 PldmType, UINT32 PldmTypeVersion, UINT8 *SupportedCommands ); typedef EFI_STATUS (EFIAPI *PLDM_SET_SMBIOS_STRUCTURE_TABLE_METADATA_COMMAND) ( EFI_PLDM_PROTOCOL *This ); typedef EFI_STATUS (EFIAPI *PLDM_GET_SMBIOS_STRUCTURE_TABLE_METADATA_COMMAND)( EFI_PLDM_PROTOCOL *This, PLDM_SMBIOS_STRUCTURE_TABLE_METADATA *PldmResponse ); typedef EFI_STATUS (EFIAPI *PLDM_GET_SMBIOS_STRUCTURE_TABLE_COMMAND) ( IN EFI_PLDM_PROTOCOL *This, OUT UINT8 *SmbiosBuf, IN OUT UINTN *Size ); typedef EFI_STATUS (EFIAPI *PLDM_SET_SMBIOS_STRUCTURE_TABLE_COMMAND)( EFI_PLDM_PROTOCOL *This ); typedef EFI_STATUS (EFIAPI *PLDM_BIOS_SET_DATA_TIME_COMMAND) ( IN EFI_PLDM_PROTOCOL *This ); typedef EFI_STATUS (EFIAPI *PLDM_GET_BIOS_TABLE_COMMAND) ( IN EFI_PLDM_PROTOCOL *This, IN UINT8 TableType, OUT VOID *Table, OUT UINTN *TableSize ); typedef EFI_STATUS (EFIAPI *PLDM_SET_BIOS_TABLE_COMMAND) ( IN EFI_PLDM_PROTOCOL *This, IN UINT8 TableType, IN VOID *Table, IN UINTN TableSize ); typedef EFI_STATUS (EFIAPI *PLDM_GET_BIOS_TABLE_TAGS_COMMAND) ( IN EFI_PLDM_PROTOCOL *This, IN UINT8 NumberOfTables, IN UINT8 *TableTypes, OUT UINT32 *TableTags ); typedef EFI_STATUS (EFIAPI *PLDM_SET_BIOS_TABLE_TAGS_COMMAND) ( IN EFI_PLDM_PROTOCOL *This, IN UINT8 NumberOfTables, IN UINT8 *TableTypes, IN UINT32 *TableTags ); typedef EFI_STATUS (EFIAPI *PLDM_GET_BIOS_ATTR_CURRENT_VALUE_BY_HANDLE_COMMAND) ( IN EFI_PLDM_PROTOCOL *This, IN UINT16 AttrHandle, OUT VOID *AttrData, OUT UINTN *AttrDataSize ); typedef EFI_STATUS (EFIAPI *PLDM_GET_BIOS_ATTR_PENDING_VALUE_BY_HANDLE_COMMAND) ( IN EFI_PLDM_PROTOCOL *This, IN UINT16 AttrHandle, OUT VOID *AttrData, OUT UINTN *AttrDataSize ); typedef EFI_STATUS (EFIAPI *PLDM_SET_BIOS_ATTR_CURRENT_VALUE_COMMAND) ( IN EFI_PLDM_PROTOCOL *This, IN VOID *AttrData, IN UINTN AttrDataSize ); typedef EFI_STATUS (EFIAPI *PLDM_GET_BIOS_ATTR_CURRENT_VALUE_BY_TYPE_COMMAND) ( IN EFI_PLDM_PROTOCOL *This, IN UINT8 AttrType, OUT VOID *AttrData, OUT UINTN *AttrDataSize ); typedef EFI_STATUS (EFIAPI *PLDM_GET_BIOS_ATTR_PENDING_VALUE_BY_TYPE_COMMAND) ( IN EFI_PLDM_PROTOCOL *This, IN UINT8 AttrType, OUT VOID *AttrData, OUT UINTN *AttrDataSize ); typedef EFI_STATUS (EFIAPI *PLDM_ACCEPT_BIOS_ATTR_PENDING_VALUES_COMMAND) ( IN EFI_PLDM_PROTOCOL *This, IN UINT16 NumOfHandles, IN UINT16 *AttrHandles ); typedef EFI_STATUS (EFIAPI *PLDM_PLATFORM_EVENT_MESSAGE_COMMAND) ( IN EFI_PLDM_PROTOCOL *This, IN UINT8 FormatVersion, IN UINT8 Tid, IN UINT8 EventClass, IN VOID *EventData, IN UINTN EventDataLen, OUT UINT8 *ReturnStatus ); typedef VOID (EFIAPI *APPEND_BIOS_STRING) ( EFI_PLDM_PROTOCOL *This, UINT16 StrHandle, UINTN StrLength, CHAR8 *String ); typedef VOID (EFIAPI *APPEND_BIOS_ATTR) ( EFI_PLDM_PROTOCOL *This, UINT16 AttrHandle, UINT8 AttrType, UINT16 AttrNameHandle, UINTN AttrDataSize, VOID *AttrData ); typedef VOID (EFIAPI *APPEND_BIOS_ATTR_VALUE) ( EFI_PLDM_PROTOCOL *This, UINT16 AttrHandle, UINT8 AttrType, UINTN AttrValueDataSize, VOID *AttrValueData ); typedef EFI_STATUS (EFIAPI *RESET_BIOS_TABLES)( EFI_PLDM_PROTOCOL *This ); typedef EFI_STATUS (EFIAPI *PUSH_BIOS_TABLES) ( EFI_PLDM_PROTOCOL *Pldm ); typedef VOID (EFIAPI *SET_PLDM_REQUEST_MODE) ( EFI_PLDM_PROTOCOL *This ); typedef VOID (EFIAPI *SET_PLDM_RESPONSE_MODE) ( EFI_PLDM_PROTOCOL *This ); typedef EFI_STATUS (EFIAPI *REGISTER_SENSOR_READING_FUNCTION) ( EFI_PLDM_PROTOCOL *This, EFI_EVENT_NOTIFY SensorReadingFun ); struct _EFI_PLDM_PROTOCOL { PLDM_SET_BINDING_MCTP SetBindingMctp; SET_PLDM_REQUEST_MODE SetRequestMode; SET_PLDM_RESPONSE_MODE SetResponseMode; PLDM_SEND_MESSAGE SendMessage; PLDM_RECEIVE_MESSAGE ReceiveMessage; PLDM_GET_TID_COMMAND GetTid; PLDM_GET_VERSION_COMMAND GetVersion; PLDM_GET_SUPPORTED_TYPES_COMMAND GetSupportedTypes; PLDM_GET_SUPPORTED_COMMANDS_COMMAND GetSupportedCommands; PLDM_GET_SMBIOS_STRUCTURE_TABLE_METADATA_COMMAND GetSmbiosStructureTableMetaData; PLDM_SET_SMBIOS_STRUCTURE_TABLE_METADATA_COMMAND SetSmbiosStructureTableMetaData; PLDM_GET_SMBIOS_STRUCTURE_TABLE_COMMAND GetSmbiosStructureTable; PLDM_SET_SMBIOS_STRUCTURE_TABLE_COMMAND SetSmbiosStructureTable; PLDM_BIOS_SET_DATA_TIME_COMMAND SetDateTime; PLDM_GET_BIOS_TABLE_COMMAND GetBiosTable; PLDM_SET_BIOS_TABLE_COMMAND SetBiosTable; PLDM_GET_BIOS_TABLE_TAGS_COMMAND GetBiosTableTags; PLDM_SET_BIOS_TABLE_TAGS_COMMAND SetBiosTableTags; PLDM_GET_BIOS_ATTR_CURRENT_VALUE_BY_HANDLE_COMMAND GetBiosAttrCurrentValueByHandle; PLDM_GET_BIOS_ATTR_CURRENT_VALUE_BY_TYPE_COMMAND GetBiosAttrCurrentValueByType; PLDM_GET_BIOS_ATTR_PENDING_VALUE_BY_HANDLE_COMMAND GetBiosAttrPendingValueByHandle; PLDM_GET_BIOS_ATTR_PENDING_VALUE_BY_TYPE_COMMAND GetBiosAttrPendingValueByType; PLDM_SET_BIOS_ATTR_CURRENT_VALUE_COMMAND SetBiosAttrCurrentValue; PLDM_ACCEPT_BIOS_ATTR_PENDING_VALUES_COMMAND AcceptBiosAttrPendingValues; PLDM_PLATFORM_EVENT_MESSAGE_COMMAND PlatformEventMessage; APPEND_BIOS_STRING AppendBiosString; APPEND_BIOS_ATTR AppendBiosAttr; APPEND_BIOS_ATTR_VALUE AppendBiosAttrValue; RESET_BIOS_TABLES ResetBiosTables; PUSH_BIOS_TABLES PushBiosTables; REGISTER_SENSOR_READING_FUNCTION RegisterSensorReadingFunction; }; extern EFI_GUID gPldmProtocolGuid; #endif