diff options
Diffstat (limited to 'MdePkg/Include/IndustryStandard/IpmiNetFnStorage.h')
-rw-r--r-- | MdePkg/Include/IndustryStandard/IpmiNetFnStorage.h | 587 |
1 files changed, 414 insertions, 173 deletions
diff --git a/MdePkg/Include/IndustryStandard/IpmiNetFnStorage.h b/MdePkg/Include/IndustryStandard/IpmiNetFnStorage.h index 210db1e7e933..c69df8f303fe 100644 --- a/MdePkg/Include/IndustryStandard/IpmiNetFnStorage.h +++ b/MdePkg/Include/IndustryStandard/IpmiNetFnStorage.h @@ -10,14 +10,8 @@ See IPMI specification, Appendix G, Command Assignments and Appendix H, Sub-function Assignments. - Copyright (c) 1999 - 2015, Intel Corporation. All rights reserved.<BR> - This program and the accompanying materials - are licensed and made available under the terms and conditions of the BSD License - which accompanies this distribution. The full text of the license may be found at - http://opensource.org/licenses/bsd-license.php - - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + Copyright (c) 1999 - 2018, Intel Corporation. All rights reserved.<BR> + SPDX-License-Identifier: BSD-2-Clause-Patent **/ #ifndef _IPMI_NET_FN_STORAGE_H_ @@ -45,14 +39,23 @@ // // Constants and Structure definitions for "Get Fru Inventory Area Info" command to follow here // +typedef struct { + UINT8 DeviceId; +} IPMI_GET_FRU_INVENTORY_AREA_INFO_REQUEST; + +typedef struct { + UINT8 CompletionCode; + UINT16 InventoryAreaSize; + UINT8 AccessType; +} IPMI_GET_FRU_INVENTORY_AREA_INFO_RESPONSE; // -// Definitions for Get Fru Data command +// Definitions for Read Fru Data command // #define IPMI_STORAGE_READ_FRU_DATA 0x11 // -// Constants and Structure definitions for "Get Fru Data" command to follow here +// Constants and Structure definitions for "Read Fru Data" command to follow here // typedef struct { UINT8 FruDeviceId; @@ -64,6 +67,18 @@ typedef struct { UINT8 Count; } IPMI_FRU_READ_COMMAND; +typedef struct { + UINT8 DeviceId; + UINT16 InventoryOffset; + UINT8 CountToRead; +} IPMI_READ_FRU_DATA_REQUEST; + +typedef struct { + UINT8 CompletionCode; + UINT8 CountReturned; + UINT8 Data[0]; +} IPMI_READ_FRU_DATA_RESPONSE; + // // Definitions for Write Fru Data command // @@ -77,6 +92,17 @@ typedef struct { UINT8 FruData[16]; } IPMI_FRU_WRITE_COMMAND; +typedef struct { + UINT8 DeviceId; + UINT16 InventoryOffset; + UINT8 Data[0]; +} IPMI_WRITE_FRU_DATA_REQUEST; + +typedef struct { + UINT8 CompletionCode; + UINT8 CountWritten; +} IPMI_WRITE_FRU_DATA_RESPONSE; + // // Below is Definitions for SDR Repository (Chapter 33) // @@ -89,21 +115,28 @@ typedef struct { // // Constants and Structure definitions for "Get SDR Repository Info" command to follow here // +typedef union { + struct { + UINT8 SdrRepAllocInfoCmd : 1; + UINT8 SdrRepReserveCmd : 1; + UINT8 PartialAddSdrCmd : 1; + UINT8 DeleteSdrRepCmd : 1; + UINT8 Reserved : 1; + UINT8 SdrRepUpdateOp : 2; + UINT8 Overflow : 1; + } Bits; + UINT8 Uint8; +} IPMI_SDR_OPERATION_SUPPORT; + typedef struct { - UINT8 CompletionCode; - UINT8 Version; - UINT16 RecordCount; - UINT16 FreeSpace; - UINT32 RecentAdditionTimeStamp; - UINT32 RecentEraseTimeStamp; - UINT8 SdrRepAllocInfoCmd : 1; - UINT8 SdrRepReserveCmd : 1; - UINT8 PartialAddSdrCmd : 1; - UINT8 DeleteSdrRepCmd : 1; - UINT8 Reserved : 1; - UINT8 SdrRepUpdateOp : 2; - UINT8 Overflow : 1; -} IPMI_GET_SDR_REPOSITORY_INFO; + UINT8 CompletionCode; + UINT8 Version; + UINT16 RecordCount; + UINT16 FreeSpace; + UINT32 RecentAdditionTimeStamp; + UINT32 RecentEraseTimeStamp; + IPMI_SDR_OPERATION_SUPPORT OperationSupport; +} IPMI_GET_SDR_REPOSITORY_INFO_RESPONSE; // // Definitions for Get SDR Repository Allocateion Info command @@ -122,6 +155,10 @@ typedef struct { // // Constants and Structure definitions for "Reserve SDR Repository" command to follow here // +typedef struct { + UINT8 CompletionCode; + UINT8 ReservationId[2]; // Reservation ID. LS byte first. +} IPMI_RESERVE_SDR_REPOSITORY_RESPONSE; // // Definitions for Get SDR command @@ -131,149 +168,201 @@ typedef struct { // // Constants and Structure definitions for "Get SDR" command to follow here // +typedef union { + struct { + UINT8 EventScanningEnabled : 1; + UINT8 EventScanningDisabled : 1; + UINT8 InitSensorType : 1; + UINT8 InitHysteresis : 1; + UINT8 InitThresholds : 1; + UINT8 InitEvent : 1; + UINT8 InitScanning : 1; + UINT8 SettableSensor : 1; + } Bits; + UINT8 Uint8; +} IPMI_SDR_RECORD_SENSOR_INIT; + +typedef union { + struct { + UINT8 EventMessageControl : 2; + UINT8 ThresholdAccessSupport : 2; + UINT8 HysteresisSupport : 2; + UINT8 ReArmSupport : 1; + UINT8 IgnoreSensor : 1; + } Bits; + UINT8 Uint8; +} IPMI_SDR_RECORD_SENSOR_CAP; + +typedef union { + struct { + UINT8 Linearization : 7; + UINT8 Reserved : 1; + } Bits; + UINT8 Uint8; +} IPMI_SDR_RECORD_LINEARIZATION; + +typedef union { + struct { + UINT8 Toleremce : 6; + UINT8 MHi : 2; + } Bits; + UINT8 Uint8; +} IPMI_SDR_RECORD_M_TOLERANCE; + +typedef union { + struct { + UINT8 AccuracyLow : 6; + UINT8 BHi : 2; + } Bits; + UINT8 Uint8; +} IPMI_SDR_RECORD_B_ACCURACY; + +typedef union { + struct { + UINT8 Reserved : 2; + UINT8 AccuracyExp : 2; + UINT8 AccuracyHi : 4; + } Bits; + UINT8 Uint8; +} IPMI_SDR_RECORD_ACCURACY_SENSOR_DIR; + +typedef union { + struct { + UINT8 BExp : 4; + UINT8 RExp : 4; + } Bits; + UINT8 Uint8; +} IPMI_SDR_RECORD_R_EXP_B_EXP; + +typedef union { + struct { + UINT8 NominalReadingSpscified : 1; + UINT8 NominalMaxSpscified : 1; + UINT8 NominalMinSpscified : 1; + UINT8 Reserved : 5; + } Bits; + UINT8 Uint8; +} IPMI_SDR_RECORD_ANALOG_FLAGS; typedef struct { - UINT16 RecordId; // 1 - UINT8 Version; // 3 - UINT8 RecordType; // 4 - UINT8 RecordLength; // 5 - UINT8 OwnerId; // 6 - UINT8 OwnerLun; // 7 - UINT8 SensorNumber; // 8 - UINT8 EntityId; // 9 - UINT8 EntityInstance; // 10 - UINT8 EventScanningEnabled : 1; // 11 - UINT8 EventScanningDisabled : 1; // 11 - UINT8 InitSensorType : 1; // 11 - UINT8 InitHysteresis : 1; // 11 - UINT8 InitThresholds : 1; // 11 - UINT8 InitEvent : 1; // 11 - UINT8 InitScanning : 1; // 11 - UINT8 Reserved : 1; // 11 - UINT8 EventMessageControl : 2; // 12 - UINT8 ThresholdAccessSupport : 2; // 12 - UINT8 HysteresisSupport : 2; // 12 - UINT8 ReArmSupport : 1; // 12 - UINT8 IgnoreSensor : 1; // 12 - UINT8 SensorType; // 13 - UINT8 EventType; // 14 - UINT8 Reserved1[7]; // 15 - UINT8 UnitType; // 22 - UINT8 Reserved2; // 23 - UINT8 Linearization : 7; // 24 - UINT8 Reserved3 : 1; // 24 - UINT8 MLo; // 25 - UINT8 Toleremce : 6; // 26 - UINT8 MHi : 2; // 26 - UINT8 BLo; // 27 - UINT8 AccuracyLow : 6; // 28 - UINT8 BHi : 2; // 28 - UINT8 Reserved4 : 2; // 29 - UINT8 AccuracyExp : 2; // 29 - UINT8 AccuracyHi : 4; // 29 - UINT8 BExp : 4; // 30 - UINT8 RExp : 4; // 30 - UINT8 NominalReadingSpscified : 1; // 31 - UINT8 NominalMaxSpscified : 1; // 31 - UINT8 NominalMinSpscified : 1; // 31 - UINT8 Reserved5 : 5; // 31 - UINT8 NominalReading; // 32 - UINT8 Reserved6[4]; // 33 - UINT8 UpperNonRecoverThreshold; // 37 - UINT8 UpperCriticalThreshold; // 38 - UINT8 UpperNonCriticalThreshold; // 39 - UINT8 LowerNonRecoverThreshold; // 40 - UINT8 LowerCriticalThreshold; // 41 - UINT8 LowerNonCriticalThreshold; // 42 - UINT8 Reserved7[5]; // 43 - UINT8 IdStringLength; // 48 - UINT8 AsciiIdString[16]; // 49 - 64 + UINT16 RecordId; // 1 + UINT8 Version; // 3 + UINT8 RecordType; // 4 + UINT8 RecordLength; // 5 + UINT8 OwnerId; // 6 + UINT8 OwnerLun; // 7 + UINT8 SensorNumber; // 8 + UINT8 EntityId; // 9 + UINT8 EntityInstance; // 10 + IPMI_SDR_RECORD_SENSOR_INIT SensorInitialization; // 11 + IPMI_SDR_RECORD_SENSOR_CAP SensorCapabilities; // 12 + UINT8 SensorType; // 13 + UINT8 EventType; // 14 + UINT8 Reserved1[7]; // 15 + UINT8 UnitType; // 22 + UINT8 Reserved2; // 23 + IPMI_SDR_RECORD_LINEARIZATION Linearization; // 24 + UINT8 MLo; // 25 + IPMI_SDR_RECORD_M_TOLERANCE MHiTolerance; // 26 + UINT8 BLo; // 27 + IPMI_SDR_RECORD_B_ACCURACY BHiAccuracyLo; // 28 + IPMI_SDR_RECORD_ACCURACY_SENSOR_DIR AccuracySensorDirection; // 29 + IPMI_SDR_RECORD_R_EXP_B_EXP RExpBExp; // 30 + IPMI_SDR_RECORD_ANALOG_FLAGS AnalogFlags; // 31 + UINT8 NominalReading; // 32 + UINT8 Reserved3[4]; // 33 + UINT8 UpperNonRecoverThreshold; // 37 + UINT8 UpperCriticalThreshold; // 38 + UINT8 UpperNonCriticalThreshold; // 39 + UINT8 LowerNonRecoverThreshold; // 40 + UINT8 LowerCriticalThreshold; // 41 + UINT8 LowerNonCriticalThreshold; // 42 + UINT8 Reserved4[5]; // 43 + UINT8 IdStringLength; // 48 + UINT8 AsciiIdString[16]; // 49 - 64 } IPMI_SDR_RECORD_STRUCT_1; typedef struct { - UINT16 RecordId; // 1 - UINT8 Version; // 3 - UINT8 RecordType; // 4 - UINT8 RecordLength; // 5 - UINT8 OwnerId; // 6 - UINT8 OwnerLun; // 7 - UINT8 SensorNumber; // 8 - UINT8 EntityId; // 9 - UINT8 EntityInstance; // 10 - UINT8 SensorScanning : 1; // 11 - UINT8 EventScanning : 1; // 11 - UINT8 InitSensorType : 1; // 11 - UINT8 InitHysteresis : 1; // 11 - UINT8 InitThresholds : 1; // 11 - UINT8 InitEvent : 1; // 11 - UINT8 InitScanning : 1; // 11 - UINT8 Reserved : 1; // 11 - UINT8 EventMessageControl : 2; // 12 - UINT8 ThresholdAccessSupport : 2; // 12 - UINT8 HysteresisSupport : 2; // 12 - UINT8 ReArmSupport : 1; // 12 - UINT8 IgnoreSensor : 1; // 12 - UINT8 SensorType; // 13 - UINT8 EventType; // 14 - UINT8 Reserved1[7]; // 15 - UINT8 UnitType; // 22 - UINT8 Reserved2[9]; // 23 - UINT8 IdStringLength; // 32 - UINT8 AsciiIdString[16]; // 33 - 48 + UINT16 RecordId; // 1 + UINT8 Version; // 3 + UINT8 RecordType; // 4 + UINT8 RecordLength; // 5 + UINT8 OwnerId; // 6 + UINT8 OwnerLun; // 7 + UINT8 SensorNumber; // 8 + UINT8 EntityId; // 9 + UINT8 EntityInstance; // 10 + IPMI_SDR_RECORD_SENSOR_INIT SensorInitialization; // 11 + IPMI_SDR_RECORD_SENSOR_CAP SensorCapabilities; // 12 + UINT8 SensorType; // 13 + UINT8 EventType; // 14 + UINT8 Reserved1[7]; // 15 + UINT8 UnitType; // 22 + UINT8 Reserved2[9]; // 23 + UINT8 IdStringLength; // 32 + UINT8 AsciiIdString[16]; // 33 - 48 } IPMI_SDR_RECORD_STRUCT_2; -typedef struct { - UINT8 Reserved1 : 1; - UINT8 ControllerSlaveAddress : 7; - UINT8 FruDeviceId; - UINT8 BusId : 3; - UINT8 Lun : 2; - UINT8 Reserved : 2; - UINT8 LogicalFruDevice : 1; - UINT8 Reserved3 : 4; - UINT8 ChannelNumber : 4; +typedef union { + struct { + UINT8 Reserved1 : 1; + UINT8 ControllerSlaveAddress : 7; + UINT8 FruDeviceId; + UINT8 BusId : 3; + UINT8 Lun : 2; + UINT8 Reserved2 : 2; + UINT8 LogicalFruDevice : 1; + UINT8 Reserved3 : 4; + UINT8 ChannelNumber : 4; + } Bits; + UINT32 Uint32; } IPMI_FRU_DATA_INFO; +typedef union { + struct { + UINT8 Length : 4; + UINT8 Reserved : 1; + UINT8 StringType : 3; + } Bits; + UINT8 Uint8; +} IPMI_SDR_RECORD_DEV_ID_STR_TYPE_LENGTH; + typedef struct { - UINT16 RecordId; // 1 - UINT8 Version; // 3 - UINT8 RecordType; // 4 - UINT8 RecordLength; // 5 - IPMI_FRU_DATA_INFO FruDeviceData; // 6 - UINT8 Reserved1; // 10 - UINT8 DeviceType; // 11 - UINT8 DeviceTypeModifier; // 12 - UINT8 FruEntityId; // 13 - UINT8 FruEntityInstance; // 14 - UINT8 OemReserved; // 15 - UINT8 Length : 4; // 16 - UINT8 Reserved2 : 1; // 16 - UINT8 StringType : 3; // 16 - UINT8 String[16]; // 17 + UINT16 RecordId; // 1 + UINT8 Version; // 3 + UINT8 RecordType; // 4 + UINT8 RecordLength; // 5 + IPMI_FRU_DATA_INFO FruDeviceData; // 6 + UINT8 Reserved; // 10 + UINT8 DeviceType; // 11 + UINT8 DeviceTypeModifier; // 12 + UINT8 FruEntityId; // 13 + UINT8 FruEntityInstance; // 14 + UINT8 OemReserved; // 15 + IPMI_SDR_RECORD_DEV_ID_STR_TYPE_LENGTH StringTypeLength; // 16 + UINT8 String[16]; // 17 } IPMI_SDR_RECORD_STRUCT_11; typedef struct { - UINT16 NextRecordId; //1 - UINT16 RecordId; //3 - UINT8 Version; //5 - UINT8 RecordType; //6 - UINT8 RecordLength; //7 - UINT8 ManufacturerId[3]; //8 + UINT16 RecordId; //1 + UINT8 Version; //3 + UINT8 RecordType; //4 + UINT8 RecordLength; //5 + UINT8 ManufacturerId[3]; //6 UINT8 StringChars[20]; } IPMI_SDR_RECORD_STRUCT_C0; typedef struct { - UINT16 NextRecordId; //1 - UINT16 RecordId; //3 - UINT8 Version; //5 - UINT8 RecordType; //6 - UINT8 RecordLength; //7 + UINT16 RecordId; //1 + UINT8 Version; //3 + UINT8 RecordType; //4 + UINT8 RecordLength; //5 } IPMI_SDR_RECORD_STRUCT_HEADER; typedef union { - IPMI_SDR_RECORD_STRUCT_1 SensorType1; - IPMI_SDR_RECORD_STRUCT_2 SensorType2; - IPMI_SDR_RECORD_STRUCT_11 SensorType11; + IPMI_SDR_RECORD_STRUCT_1 SensorType1; + IPMI_SDR_RECORD_STRUCT_2 SensorType2; + IPMI_SDR_RECORD_STRUCT_11 SensorType11; IPMI_SDR_RECORD_STRUCT_C0 SensorTypeC0; IPMI_SDR_RECORD_STRUCT_HEADER SensorHeader; } IPMI_SENSOR_RECORD_STRUCT; @@ -285,6 +374,12 @@ typedef struct { UINT8 BytesToRead; } IPMI_GET_SDR_REQUEST; +typedef struct { + UINT8 CompletionCode; + UINT16 NextRecordId; + IPMI_SENSOR_RECORD_STRUCT RecordData; +} IPMI_GET_SDR_RESPONSE; + // // Definitions for Add SDR command // @@ -378,6 +473,12 @@ typedef struct { // // Constants and Structure definitions for "Get SEL Info" command to follow here // +#define IPMI_GET_SEL_INFO_OPERATION_SUPPORT_GET_SEL_ALLOCATION_INFO_CMD BIT0 +#define IPMI_GET_SEL_INFO_OPERATION_SUPPORT_RESERVE_SEL_CMD BIT1 +#define IPMI_GET_SEL_INFO_OPERATION_SUPPORT_PARTIAL_ADD_SEL_ENTRY_CMD BIT2 +#define IPMI_GET_SEL_INFO_OPERATION_SUPPORT_DELETE_SEL_CMD BIT3 +#define IPMI_GET_SEL_INFO_OPERATION_SUPPORT_OVERFLOW_FLAG BIT7 + typedef struct { UINT8 CompletionCode; UINT8 Version; // Version of SEL @@ -405,6 +506,10 @@ typedef struct { // // Constants and Structure definitions for "Reserve SEL" command to follow here // +typedef struct { + UINT8 CompletionCode; + UINT8 ReservationId[2]; // Reservation ID. LS byte first. +} IPMI_RESERVE_SEL_RESPONSE; // // Definitions for Get SEL Entry command @@ -414,6 +519,38 @@ typedef struct { // // Constants and Structure definitions for "Get SEL Entry" command to follow here // + +// +// Below is Definitions for SEL Record Formats (Chapter 32) +// +typedef struct { + UINT16 RecordId; + UINT8 RecordType; + UINT32 TimeStamp; + UINT16 GeneratorId; + UINT8 EvMRevision; + UINT8 SensorType; + UINT8 SensorNumber; + UINT8 EventDirType; + UINT8 OEMEvData1; + UINT8 OEMEvData2; + UINT8 OEMEvData3; +} IPMI_SEL_EVENT_RECORD_DATA; + +typedef struct { + UINT16 RecordId; + UINT8 RecordType; // C0h-DFh = OEM system event record + UINT32 TimeStamp; + UINT8 ManufacturerId[3]; + UINT8 OEMDefined[6]; +} IPMI_TIMESTAMPED_OEM_SEL_RECORD_DATA; + +typedef struct { + UINT16 RecordId; + UINT8 RecordType; // E0h-FFh = OEM system event record + UINT8 OEMDefined[13]; +} IPMI_NON_TIMESTAMPED_OEM_SEL_RECORD_DATA; + typedef struct { UINT8 ReserveId[2]; // Reservation ID, LS Byte First UINT8 SelRecID[2]; // Sel Record ID, LS Byte First @@ -421,6 +558,12 @@ typedef struct { UINT8 BytesToRead; // Bytes to be Read, 0xFF for entire record } IPMI_GET_SEL_ENTRY_REQUEST; +typedef struct { + UINT8 CompletionCode; + UINT16 NextSelRecordId; // Next SEL Record ID, LS Byte first + IPMI_SEL_EVENT_RECORD_DATA RecordData; +} IPMI_GET_SEL_ENTRY_RESPONSE; + // // Definitions for Add SEL Entry command // @@ -429,6 +572,14 @@ typedef struct { // // Constants and Structure definitions for "Add SEL Entry" command to follow here // +typedef struct { + IPMI_SEL_EVENT_RECORD_DATA RecordData; +} IPMI_ADD_SEL_ENTRY_REQUEST; + +typedef struct { + UINT8 CompletionCode; + UINT16 RecordId; // Record ID for added record, LS Byte first +} IPMI_ADD_SEL_ENTRY_RESPONSE; // // Definitions for Partial Add SEL Entry command @@ -438,6 +589,18 @@ typedef struct { // // Constants and Structure definitions for "Partial Add SEL Entry" command to follow here // +typedef struct { + UINT16 ReservationId; + UINT16 RecordId; + UINT8 OffsetIntoRecord; + UINT8 InProgress; + UINT8 RecordData[0]; +} IPMI_PARTIAL_ADD_SEL_ENTRY_REQUEST; + +typedef struct { + UINT8 CompletionCode; + UINT16 RecordId; +} IPMI_PARTIAL_ADD_SEL_ENTRY_RESPONSE; // // Definitions for Delete SEL Entry command @@ -450,7 +613,15 @@ typedef struct { typedef struct { UINT8 ReserveId[2]; // Reservation ID, LS byte first UINT8 RecordToDelete[2]; // Record to Delete, LS Byte First -} IPMI_DELETE_SEL_REQUEST; +} IPMI_DELETE_SEL_ENTRY_REQUEST; + +#define IPMI_DELETE_SEL_ENTRY_RESPONSE_TYPE_UNSUPPORTED 0x80 +#define IPMI_DELETE_SEL_ENTRY_RESPONSE_ERASE_IN_PROGRESS 0x81 + +typedef struct { + UINT8 CompletionCode; + UINT16 RecordId; // Record ID added. LS byte first +} IPMI_DELETE_SEL_ENTRY_RESPONSE; // // Definitions for Clear SEL command @@ -460,6 +631,12 @@ typedef struct { // // Constants and Structure definitions for "Clear SEL" command to follow here // +#define IPMI_CLEAR_SEL_REQUEST_C_CHAR_ASCII 0x43 +#define IPMI_CLEAR_SEL_REQUEST_L_CHAR_ASCII 0x4C +#define IPMI_CLEAR_SEL_REQUEST_R_CHAR_ASCII 0x52 +#define IPMI_CLEAR_SEL_REQUEST_INITIALIZE_ERASE 0xAA +#define IPMI_CLEAR_SEL_REQUEST_GET_ERASE_STATUS 0x00 + typedef struct { UINT8 Reserve[2]; // Reserve ID, LSB first UINT8 AscC; // Ascii for 'C' (0x43) @@ -468,6 +645,14 @@ typedef struct { UINT8 Erase; // 0xAA, Initiate Erase, 0x00 Get Erase Status } IPMI_CLEAR_SEL_REQUEST; +#define IPMI_CLEAR_SEL_RESPONSE_ERASURE_IN_PROGRESS 0x00 +#define IPMI_CLEAR_SEL_RESPONSE_ERASURE_COMPLETED 0x01 + +typedef struct { + UINT8 CompletionCode; + UINT8 ErasureProgress; +} IPMI_CLEAR_SEL_RESPONSE; + // // Definitions for Get SEL Time command // @@ -476,6 +661,10 @@ typedef struct { // // Constants and Structure definitions for "Get SEL Time" command to follow here // +typedef struct { + UINT8 CompletionCode; + UINT32 Timestamp; // Present Timestamp clock reading. LS byte first. +} IPMI_GET_SEL_TIME_RESPONSE; // // Definitions for Set SEL Time command @@ -485,6 +674,9 @@ typedef struct { // // Constants and Structure definitions for "Set SEL Time" command to follow here // +typedef struct { + UINT32 Timestamp; +} IPMI_SET_SEL_TIME_REQUEST; // // Definitions for Get Auxillary Log Status command @@ -504,39 +696,88 @@ typedef struct { // Constants and Structure definitions for "Set Auxillary Log Status" command to follow here // -#define IPMI_COMPLETE_SEL_RECORD 0xFF +// +// Definitions for Get SEL Time UTC Offset command +// +#define IPMI_STORAGE_GET_SEL_TIME_UTC_OFFSET 0x5C // -// Below is Definitions for SEL Record Formats (Chapter 32) +// Constants and Structure definitions for "Get SEL Time UTC Offset" command to follow here // typedef struct { - UINT16 RecordId; - UINT8 RecordType; - UINT32 TimeStamp; - UINT16 GeneratorId; - UINT8 EvMRevision; - UINT8 SensorType; - UINT8 SensorNumber; - UINT8 EventDirType; - UINT8 OEMEvData1; - UINT8 OEMEvData2; - UINT8 OEMEvData3; -} IPMI_SEL_EVENT_RECORD_DATA; + UINT8 CompletionCode; + // + // 16-bit, 2s-complement signed integer for the offset in minutes from UTC to SEL Time. + // LS-byte first. (ranges from -1440 to 1440) + // + INT16 UtcOffset; +} IPMI_GET_SEL_TIME_UTC_OFFSET_RESPONSE; -#define IPMI_SEL_SYSTEM_RECORD 0x02 +// +// Definitions for Set SEL Time UTC Offset command +// +#define IPMI_STORAGE_SET_SEL_TIME_UTC_OFFSET 0x5D -#define IPMI_EVM_REVISION 0x04 -#define IPMI_BIOS_ID 0x18 -#define IPMI_FORMAT_REV 0x00 -#define IPMI_FORMAT_REV1 0x01 -#define IPMI_SOFTWARE_ID 0x01 -#define IPMI_PLATFORM_VAL_ID 0x01 -#define IPMI_GENERATOR_ID(i,f) ((i << 1) | (f << 1) | IPMI_SOFTWARE_ID) +// +// Constants and Structure definitions for "Set SEL Time UTC Offset" command to follow here +// -#define IPMI_SENSOR_TYPE_EVENT_CODE_DISCRETE 0x6F +#define IPMI_COMPLETE_SEL_RECORD 0xFF -#define IPMI_OEM_SPECIFIC_DATA 0x02 -#define IPMI_SENSOR_SPECIFIC_DATA 0x03 +#define IPMI_SEL_SYSTEM_RECORD 0x02 +#define IPMI_SEL_OEM_TIME_STAMP_RECORD_START 0xC0 +#define IPMI_SEL_OEM_TIME_STAMP_RECORD_END 0xDF +#define IPMI_SEL_OEM_NO_TIME_STAMP_RECORD_START 0xE0 +#define IPMI_SEL_OEM_NO_TIME_STAMP_RECORD_END 0xFF + +#define IPMI_SEL_EVENT_DIR(EventDirType) (EventDirType >> 7) +#define IPMI_SEL_EVENT_DIR_ASSERTION_EVENT 0x00 +#define IPMI_SEL_EVENT_DIR_DEASSERTION_EVENT 0x01 + +#define IPMI_SEL_EVENT_TYPE(EventDirType) (EventDirType & 0x7F) +// +// Event/Reading Type Code Ranges (Chapter 42) +// +#define IPMI_SEL_EVENT_TYPE_UNSPECIFIED 0x00 +#define IPMI_SEL_EVENT_TYPE_THRESHOLD 0x01 +#define IPMI_SEL_EVENT_TYPE_GENERIC_START 0x02 +#define IPMI_SEL_EVENT_TYPE_GENERIC_END 0x0C +#define IPMI_SEL_EVENT_TYPE_SENSOR_SPECIFIC 0x6F +#define IPMI_SEL_EVENT_TYPE_OEM_START 0x70 +#define IPMI_SEL_EVENT_TYPE_OEM_END 0x7F + +#define SOFTWARE_ID_FROM_GENERATOR_ID(GeneratorId) ((GeneratorId & 0xFF) >> 1) +// +// System Software IDs definitions (Section 5.5) +// +#define IPMI_SWID_BIOS_RANGE_START 0x00 +#define IPMI_SWID_BIOS_RANGE_END 0x0F +#define IPMI_SWID_SMI_HANDLER_RANGE_START 0x10 +#define IPMI_SWID_SMI_HANDLER_RANGE_END 0x1F +#define IPMI_SWID_SMS_RANGE_START 0x20 +#define IPMI_SWID_SMS_RANGE_END 0x2F +#define IPMI_SWID_OEM_RANGE_START 0x30 +#define IPMI_SWID_OEM_RANGE_END 0x3F +#define IPMI_SWID_REMOTE_CONSOLE_RANGE_START 0x40 +#define IPMI_SWID_REMOTE_CONSOLE_RANGE_END 0x46 +#define IPMI_SWID_TERMINAL_REMOTE_CONSOLE_ID 0x47 + +#define SLAVE_ADDRESS_FROM_GENERATOR_ID(GeneratorId) ((GeneratorId & 0xFF) >> 1) +#define LUN_FROM_GENERATOR_ID(GeneratorId) ((GeneratorId >> 8) & 0x03) +#define CHANNEL_NUMBER_FROM_GENERATOR_ID(GeneratorId) ((GeneratorId >> 12) & 0x0F) + +#define IPMI_EVM_REVISION 0x04 +#define IPMI_BIOS_ID 0x18 +#define IPMI_FORMAT_REV 0x00 +#define IPMI_FORMAT_REV1 0x01 +#define IPMI_SOFTWARE_ID 0x01 +#define IPMI_PLATFORM_VAL_ID 0x01 +#define IPMI_GENERATOR_ID(i,f) ((i << 1) | (f << 1) | IPMI_SOFTWARE_ID) + +#define IPMI_SENSOR_TYPE_EVENT_CODE_DISCRETE 0x6F + +#define IPMI_OEM_SPECIFIC_DATA 0x02 +#define IPMI_SENSOR_SPECIFIC_DATA 0x03 #pragma pack() #endif |