505 lines
14 KiB
C
505 lines
14 KiB
C
/** @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 <Uefi.h>
|
|
#include <Protocol/Mctp.h>
|
|
|
|
#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
|