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