blob: e1b812b9732b0c87c23ae22c5c3d5994843857ff [file] [log] [blame]
Jonathan Zhang6d277782020-06-09 17:56:53 -07001/** @file
2 IPMI 2.0 definitions from the IPMI Specification Version 2.0, Revision 1.1.
3
4 This file contains all NetFn Storage commands, including:
5 FRU Inventory Commands (Chapter 34)
6 SDR Repository (Chapter 33)
7 System Event Log(SEL) Commands (Chapter 31)
8 SEL Record Formats (Chapter 32)
9
10 See IPMI specification, Appendix G, Command Assignments
11 and Appendix H, Sub-function Assignments.
12
13 Copyright (c) 1999 - 2018, Intel Corporation. All rights reserved.<BR>
14 SPDX-License-Identifier: BSD-2-Clause-Patent
15**/
16
17#ifndef _IPMI_NET_FN_STORAGE_H_
18#define _IPMI_NET_FN_STORAGE_H_
19
20#pragma pack(1)
21//
22// Net function definition for Storage command
23//
24#define IPMI_NETFN_STORAGE 0x0A
25
26//
27// All Storage commands and their structure definitions to follow here
28//
29
30//
31// Below is Definitions for FRU Inventory Commands (Chapter 34)
32//
33
34//
35// Definitions for Get Fru Inventory Area Info command
36//
37#define IPMI_STORAGE_GET_FRU_INVENTORY_AREAINFO 0x10
38
39//
40// Constants and Structure definitions for "Get Fru Inventory Area Info" command to follow here
41//
42typedef struct {
43 UINT8 DeviceId;
44} IPMI_GET_FRU_INVENTORY_AREA_INFO_REQUEST;
45
46typedef struct {
47 UINT8 CompletionCode;
48 UINT16 InventoryAreaSize;
49 UINT8 AccessType;
50} IPMI_GET_FRU_INVENTORY_AREA_INFO_RESPONSE;
51
52//
53// Definitions for Read Fru Data command
54//
55#define IPMI_STORAGE_READ_FRU_DATA 0x11
56
57//
58// Constants and Structure definitions for "Read Fru Data" command to follow here
59//
60typedef struct {
61 UINT8 FruDeviceId;
62 UINT16 FruOffset;
63} IPMI_FRU_COMMON_DATA;
64
65typedef struct {
66 IPMI_FRU_COMMON_DATA Data;
67 UINT8 Count;
68} IPMI_FRU_READ_COMMAND;
69
70typedef struct {
71 UINT8 DeviceId;
72 UINT16 InventoryOffset;
73 UINT8 CountToRead;
74} IPMI_READ_FRU_DATA_REQUEST;
75
76typedef struct {
77 UINT8 CompletionCode;
78 UINT8 CountReturned;
Elyes Haouasce655f52023-07-30 12:53:47 +020079 UINT8 Data[];
Jonathan Zhang6d277782020-06-09 17:56:53 -070080} IPMI_READ_FRU_DATA_RESPONSE;
81
82//
83// Definitions for Write Fru Data command
84//
85#define IPMI_STORAGE_WRITE_FRU_DATA 0x12
86
87//
88// Constants and Structure definitions for "Write Fru Data" command to follow here
89//
90typedef struct {
91 IPMI_FRU_COMMON_DATA Data;
92 UINT8 FruData[16];
93} IPMI_FRU_WRITE_COMMAND;
94
95typedef struct {
96 UINT8 DeviceId;
97 UINT16 InventoryOffset;
Elyes Haouasce655f52023-07-30 12:53:47 +020098 UINT8 Data[];
Jonathan Zhang6d277782020-06-09 17:56:53 -070099} IPMI_WRITE_FRU_DATA_REQUEST;
100
101typedef struct {
102 UINT8 CompletionCode;
103 UINT8 CountWritten;
104} IPMI_WRITE_FRU_DATA_RESPONSE;
105
106//
107// Below is Definitions for SDR Repository (Chapter 33)
108//
109
110//
111// Definitions for Get SDR Repository Info command
112//
113#define IPMI_STORAGE_GET_SDR_REPOSITORY_INFO 0x20
114
115//
116// Constants and Structure definitions for "Get SDR Repository Info" command to follow here
117//
118typedef union {
119 struct {
120 UINT8 SdrRepAllocInfoCmd : 1;
121 UINT8 SdrRepReserveCmd : 1;
122 UINT8 PartialAddSdrCmd : 1;
123 UINT8 DeleteSdrRepCmd : 1;
124 UINT8 Reserved : 1;
125 UINT8 SdrRepUpdateOp : 2;
126 UINT8 Overflow : 1;
127 } Bits;
128 UINT8 Uint8;
129} IPMI_SDR_OPERATION_SUPPORT;
130
131typedef struct {
132 UINT8 CompletionCode;
133 UINT8 Version;
134 UINT16 RecordCount;
135 UINT16 FreeSpace;
136 UINT32 RecentAdditionTimeStamp;
137 UINT32 RecentEraseTimeStamp;
138 IPMI_SDR_OPERATION_SUPPORT OperationSupport;
139} IPMI_GET_SDR_REPOSITORY_INFO_RESPONSE;
140
141//
142// Definitions for Get SDR Repository Allocateion Info command
143//
144#define IPMI_STORAGE_GET_SDR_REPOSITORY_ALLOCATION_INFO 0x21
145
146//
147// Constants and Structure definitions for "Get SDR Repository Allocateion Info" command to follow here
148//
149
150//
151// Definitions for Reserve SDR Repository command
152//
153#define IPMI_STORAGE_RESERVE_SDR_REPOSITORY 0x22
154
155//
156// Constants and Structure definitions for "Reserve SDR Repository" command to follow here
157//
158typedef struct {
159 UINT8 CompletionCode;
160 UINT8 ReservationId[2]; // Reservation ID. LS byte first.
161} IPMI_RESERVE_SDR_REPOSITORY_RESPONSE;
162
163//
164// Definitions for Get SDR command
165//
166#define IPMI_STORAGE_GET_SDR 0x23
167
168//
169// Constants and Structure definitions for "Get SDR" command to follow here
170//
171typedef union {
172 struct {
173 UINT8 EventScanningEnabled : 1;
174 UINT8 EventScanningDisabled : 1;
175 UINT8 InitSensorType : 1;
176 UINT8 InitHysteresis : 1;
177 UINT8 InitThresholds : 1;
178 UINT8 InitEvent : 1;
179 UINT8 InitScanning : 1;
180 UINT8 SettableSensor : 1;
181 } Bits;
182 UINT8 Uint8;
183} IPMI_SDR_RECORD_SENSOR_INIT;
184
185typedef union {
186 struct {
187 UINT8 EventMessageControl : 2;
188 UINT8 ThresholdAccessSupport : 2;
189 UINT8 HysteresisSupport : 2;
190 UINT8 ReArmSupport : 1;
191 UINT8 IgnoreSensor : 1;
192 } Bits;
193 UINT8 Uint8;
194} IPMI_SDR_RECORD_SENSOR_CAP;
195
196typedef union {
197 struct {
198 UINT8 Linearization : 7;
199 UINT8 Reserved : 1;
200 } Bits;
201 UINT8 Uint8;
202} IPMI_SDR_RECORD_LINEARIZATION;
203
204typedef union {
205 struct {
206 UINT8 Toleremce : 6;
207 UINT8 MHi : 2;
208 } Bits;
209 UINT8 Uint8;
210} IPMI_SDR_RECORD_M_TOLERANCE;
211
212typedef union {
213 struct {
214 UINT8 AccuracyLow : 6;
215 UINT8 BHi : 2;
216 } Bits;
217 UINT8 Uint8;
218} IPMI_SDR_RECORD_B_ACCURACY;
219
220typedef union {
221 struct {
222 UINT8 Reserved : 2;
223 UINT8 AccuracyExp : 2;
224 UINT8 AccuracyHi : 4;
225 } Bits;
226 UINT8 Uint8;
227} IPMI_SDR_RECORD_ACCURACY_SENSOR_DIR;
228
229typedef union {
230 struct {
231 UINT8 BExp : 4;
232 UINT8 RExp : 4;
233 } Bits;
234 UINT8 Uint8;
235} IPMI_SDR_RECORD_R_EXP_B_EXP;
236
237typedef union {
238 struct {
239 UINT8 NominalReadingSpscified : 1;
240 UINT8 NominalMaxSpscified : 1;
241 UINT8 NominalMinSpscified : 1;
242 UINT8 Reserved : 5;
243 } Bits;
244 UINT8 Uint8;
245} IPMI_SDR_RECORD_ANALOG_FLAGS;
246
247typedef struct {
248 UINT16 RecordId; // 1
249 UINT8 Version; // 3
250 UINT8 RecordType; // 4
251 UINT8 RecordLength; // 5
252 UINT8 OwnerId; // 6
253 UINT8 OwnerLun; // 7
254 UINT8 SensorNumber; // 8
255 UINT8 EntityId; // 9
256 UINT8 EntityInstance; // 10
257 IPMI_SDR_RECORD_SENSOR_INIT SensorInitialization; // 11
258 IPMI_SDR_RECORD_SENSOR_CAP SensorCapabilities; // 12
259 UINT8 SensorType; // 13
260 UINT8 EventType; // 14
261 UINT8 Reserved1[7]; // 15
262 UINT8 UnitType; // 22
263 UINT8 Reserved2; // 23
264 IPMI_SDR_RECORD_LINEARIZATION Linearization; // 24
265 UINT8 MLo; // 25
266 IPMI_SDR_RECORD_M_TOLERANCE MHiTolerance; // 26
267 UINT8 BLo; // 27
268 IPMI_SDR_RECORD_B_ACCURACY BHiAccuracyLo; // 28
269 IPMI_SDR_RECORD_ACCURACY_SENSOR_DIR AccuracySensorDirection; // 29
270 IPMI_SDR_RECORD_R_EXP_B_EXP RExpBExp; // 30
271 IPMI_SDR_RECORD_ANALOG_FLAGS AnalogFlags; // 31
272 UINT8 NominalReading; // 32
273 UINT8 Reserved3[4]; // 33
274 UINT8 UpperNonRecoverThreshold; // 37
275 UINT8 UpperCriticalThreshold; // 38
276 UINT8 UpperNonCriticalThreshold; // 39
277 UINT8 LowerNonRecoverThreshold; // 40
278 UINT8 LowerCriticalThreshold; // 41
279 UINT8 LowerNonCriticalThreshold; // 42
280 UINT8 Reserved4[5]; // 43
281 UINT8 IdStringLength; // 48
282 UINT8 AsciiIdString[16]; // 49 - 64
283} IPMI_SDR_RECORD_STRUCT_1;
284
285typedef struct {
286 UINT16 RecordId; // 1
287 UINT8 Version; // 3
288 UINT8 RecordType; // 4
289 UINT8 RecordLength; // 5
290 UINT8 OwnerId; // 6
291 UINT8 OwnerLun; // 7
292 UINT8 SensorNumber; // 8
293 UINT8 EntityId; // 9
294 UINT8 EntityInstance; // 10
295 IPMI_SDR_RECORD_SENSOR_INIT SensorInitialization; // 11
296 IPMI_SDR_RECORD_SENSOR_CAP SensorCapabilities; // 12
297 UINT8 SensorType; // 13
298 UINT8 EventType; // 14
299 UINT8 Reserved1[7]; // 15
300 UINT8 UnitType; // 22
301 UINT8 Reserved2[9]; // 23
302 UINT8 IdStringLength; // 32
303 UINT8 AsciiIdString[16]; // 33 - 48
304} IPMI_SDR_RECORD_STRUCT_2;
305
306typedef union {
307 struct {
308 UINT8 Reserved1 : 1;
309 UINT8 ControllerSlaveAddress : 7;
310 UINT8 FruDeviceId;
311 UINT8 BusId : 3;
312 UINT8 Lun : 2;
313 UINT8 Reserved2 : 2;
314 UINT8 LogicalFruDevice : 1;
315 UINT8 Reserved3 : 4;
316 UINT8 ChannelNumber : 4;
317 } Bits;
318 UINT32 Uint32;
319} IPMI_FRU_DATA_INFO;
320
321typedef union {
322 struct {
323 UINT8 Length : 4;
324 UINT8 Reserved : 1;
325 UINT8 StringType : 3;
326 } Bits;
327 UINT8 Uint8;
328} IPMI_SDR_RECORD_DEV_ID_STR_TYPE_LENGTH;
329
330typedef struct {
331 UINT16 RecordId; // 1
332 UINT8 Version; // 3
333 UINT8 RecordType; // 4
334 UINT8 RecordLength; // 5
335 IPMI_FRU_DATA_INFO FruDeviceData; // 6
336 UINT8 Reserved; // 10
337 UINT8 DeviceType; // 11
338 UINT8 DeviceTypeModifier; // 12
339 UINT8 FruEntityId; // 13
340 UINT8 FruEntityInstance; // 14
341 UINT8 OemReserved; // 15
342 IPMI_SDR_RECORD_DEV_ID_STR_TYPE_LENGTH StringTypeLength; // 16
343 UINT8 String[16]; // 17
344} IPMI_SDR_RECORD_STRUCT_11;
345
346typedef struct {
347 UINT16 RecordId; //1
348 UINT8 Version; //3
349 UINT8 RecordType; //4
350 UINT8 RecordLength; //5
351 UINT8 ManufacturerId[3]; //6
352 UINT8 StringChars[20];
353} IPMI_SDR_RECORD_STRUCT_C0;
354
355typedef struct {
356 UINT16 RecordId; //1
357 UINT8 Version; //3
358 UINT8 RecordType; //4
359 UINT8 RecordLength; //5
360} IPMI_SDR_RECORD_STRUCT_HEADER;
361
362typedef union {
363 IPMI_SDR_RECORD_STRUCT_1 SensorType1;
364 IPMI_SDR_RECORD_STRUCT_2 SensorType2;
365 IPMI_SDR_RECORD_STRUCT_11 SensorType11;
366 IPMI_SDR_RECORD_STRUCT_C0 SensorTypeC0;
367 IPMI_SDR_RECORD_STRUCT_HEADER SensorHeader;
368} IPMI_SENSOR_RECORD_STRUCT;
369
370typedef struct {
371 UINT16 ReservationId;
372 UINT16 RecordId;
373 UINT8 RecordOffset;
374 UINT8 BytesToRead;
375} IPMI_GET_SDR_REQUEST;
376
377typedef struct {
378 UINT8 CompletionCode;
379 UINT16 NextRecordId;
380 IPMI_SENSOR_RECORD_STRUCT RecordData;
381} IPMI_GET_SDR_RESPONSE;
382
383//
384// Definitions for Add SDR command
385//
386#define IPMI_STORAGE_ADD_SDR 0x24
387
388//
389// Constants and Structure definitions for "Add SDR" command to follow here
390//
391
392//
393// Definitions for Partial Add SDR command
394//
395#define IPMI_STORAGE_PARTIAL_ADD_SDR 0x25
396
397//
398// Constants and Structure definitions for "Partial Add SDR" command to follow here
399//
400
401//
402// Definitions for Delete SDR command
403//
404#define IPMI_STORAGE_DELETE_SDR 0x26
405
406//
407// Constants and Structure definitions for "Delete SDR" command to follow here
408//
409
410//
411// Definitions for Clear SDR Repository command
412//
413#define IPMI_STORAGE_CLEAR_SDR 0x27
414
415//
416// Constants and Structure definitions for "Clear SDR Repository" command to follow here
417//
418
419//
420// Definitions for Get SDR Repository Time command
421//
422#define IPMI_STORAGE_GET_SDR_REPOSITORY_TIME 0x28
423
424//
425// Constants and Structure definitions for "Get SDR Repository Time" command to follow here
426//
427
428//
429// Definitions for Set SDR Repository Time command
430//
431#define IPMI_STORAGE_SET_SDR_REPOSITORY_TIME 0x29
432
433//
434// Constants and Structure definitions for "Set SDR Repository Time" command to follow here
435//
436
437//
438// Definitions for Enter SDR Repository Update Mode command
439//
440#define IPMI_STORAGE_ENTER_SDR_UPDATE_MODE 0x2A
441
442//
443// Constants and Structure definitions for "Enter SDR Repository Update Mode" command to follow here
444//
445
446//
447// Definitions for Exit SDR Repository Update Mode command
448//
449#define IPMI_STORAGE_EXIT_SDR_UPDATE_MODE 0x2B
450
451//
452// Constants and Structure definitions for "Exit SDR Repository Update Mode" command to follow here
453//
454
455//
456// Definitions for Run Initialize Agent command
457//
458#define IPMI_STORAGE_RUN_INIT_AGENT 0x2C
459
460//
461// Constants and Structure definitions for "Run Initialize Agent" command to follow here
462//
463
464//
465// Below is Definitions for System Event Log(SEL) Commands (Chapter 31)
466//
467
468//
469// Definitions for Get SEL Info command
470//
471#define IPMI_STORAGE_GET_SEL_INFO 0x40
472
473//
474// Constants and Structure definitions for "Get SEL Info" command to follow here
475//
476#define IPMI_GET_SEL_INFO_OPERATION_SUPPORT_GET_SEL_ALLOCATION_INFO_CMD BIT0
477#define IPMI_GET_SEL_INFO_OPERATION_SUPPORT_RESERVE_SEL_CMD BIT1
478#define IPMI_GET_SEL_INFO_OPERATION_SUPPORT_PARTIAL_ADD_SEL_ENTRY_CMD BIT2
479#define IPMI_GET_SEL_INFO_OPERATION_SUPPORT_DELETE_SEL_CMD BIT3
480#define IPMI_GET_SEL_INFO_OPERATION_SUPPORT_OVERFLOW_FLAG BIT7
481
482typedef struct {
483 UINT8 CompletionCode;
484 UINT8 Version; // Version of SEL
485 UINT16 NoOfEntries; // No of Entries in the SEL
486 UINT16 FreeSpace; // Free space in Bytes
487 UINT32 RecentAddTimeStamp; // Most Recent Addition of Time Stamp
488 UINT32 RecentEraseTimeStamp; // Most Recent Erasure of Time Stamp
489 UINT8 OperationSupport; // Operation Support
490} IPMI_GET_SEL_INFO_RESPONSE;
491
492//
493// Definitions for Get SEL Allocation Info command
494//
495#define IPMI_STORAGE_GET_SEL_ALLOCATION_INFO 0x41
496
497//
498// Constants and Structure definitions for "Get SEL Allocation Info" command to follow here
499//
500
501//
502// Definitions for Reserve SEL command
503//
504#define IPMI_STORAGE_RESERVE_SEL 0x42
505
506//
507// Constants and Structure definitions for "Reserve SEL" command to follow here
508//
509typedef struct {
510 UINT8 CompletionCode;
511 UINT8 ReservationId[2]; // Reservation ID. LS byte first.
512} IPMI_RESERVE_SEL_RESPONSE;
513
514//
515// Definitions for Get SEL Entry command
516//
517#define IPMI_STORAGE_GET_SEL_ENTRY 0x43
518
519//
520// Constants and Structure definitions for "Get SEL Entry" command to follow here
521//
522
523//
524// Below is Definitions for SEL Record Formats (Chapter 32)
525//
526typedef struct {
527 UINT16 RecordId;
528 UINT8 RecordType;
529 UINT32 TimeStamp;
530 UINT16 GeneratorId;
531 UINT8 EvMRevision;
532 UINT8 SensorType;
533 UINT8 SensorNumber;
534 UINT8 EventDirType;
535 UINT8 OEMEvData1;
536 UINT8 OEMEvData2;
537 UINT8 OEMEvData3;
538} IPMI_SEL_EVENT_RECORD_DATA;
539
540typedef struct {
541 UINT16 RecordId;
542 UINT8 RecordType; // C0h-DFh = OEM system event record
543 UINT32 TimeStamp;
544 UINT8 ManufacturerId[3];
545 UINT8 OEMDefined[6];
546} IPMI_TIMESTAMPED_OEM_SEL_RECORD_DATA;
547
548typedef struct {
549 UINT16 RecordId;
550 UINT8 RecordType; // E0h-FFh = OEM system event record
551 UINT8 OEMDefined[13];
552} IPMI_NON_TIMESTAMPED_OEM_SEL_RECORD_DATA;
553
554typedef struct {
555 UINT8 ReserveId[2]; // Reservation ID, LS Byte First
556 UINT8 SelRecID[2]; // Sel Record ID, LS Byte First
557 UINT8 Offset; // Offset Into Record
558 UINT8 BytesToRead; // Bytes to be Read, 0xFF for entire record
559} IPMI_GET_SEL_ENTRY_REQUEST;
560
561typedef struct {
562 UINT8 CompletionCode;
563 UINT16 NextSelRecordId; // Next SEL Record ID, LS Byte first
564 IPMI_SEL_EVENT_RECORD_DATA RecordData;
565} IPMI_GET_SEL_ENTRY_RESPONSE;
566
567//
568// Definitions for Add SEL Entry command
569//
570#define IPMI_STORAGE_ADD_SEL_ENTRY 0x44
571
572//
573// Constants and Structure definitions for "Add SEL Entry" command to follow here
574//
575typedef struct {
576 IPMI_SEL_EVENT_RECORD_DATA RecordData;
577} IPMI_ADD_SEL_ENTRY_REQUEST;
578
579typedef struct {
580 UINT8 CompletionCode;
581 UINT16 RecordId; // Record ID for added record, LS Byte first
582} IPMI_ADD_SEL_ENTRY_RESPONSE;
583
584//
585// Definitions for Partial Add SEL Entry command
586//
587#define IPMI_STORAGE_PARTIAL_ADD_SEL_ENTRY 0x45
588
589//
590// Constants and Structure definitions for "Partial Add SEL Entry" command to follow here
591//
592typedef struct {
593 UINT16 ReservationId;
594 UINT16 RecordId;
595 UINT8 OffsetIntoRecord;
596 UINT8 InProgress;
597 UINT8 RecordData[0];
598} IPMI_PARTIAL_ADD_SEL_ENTRY_REQUEST;
599
600typedef struct {
601 UINT8 CompletionCode;
602 UINT16 RecordId;
603} IPMI_PARTIAL_ADD_SEL_ENTRY_RESPONSE;
604
605//
606// Definitions for Delete SEL Entry command
607//
608#define IPMI_STORAGE_DELETE_SEL_ENTRY 0x46
609
610//
611// Constants and Structure definitions for "Delete SEL Entry" command to follow here
612//
613typedef struct {
614 UINT8 ReserveId[2]; // Reservation ID, LS byte first
615 UINT8 RecordToDelete[2]; // Record to Delete, LS Byte First
616} IPMI_DELETE_SEL_ENTRY_REQUEST;
617
618#define IPMI_DELETE_SEL_ENTRY_RESPONSE_TYPE_UNSUPPORTED 0x80
619#define IPMI_DELETE_SEL_ENTRY_RESPONSE_ERASE_IN_PROGRESS 0x81
620
621typedef struct {
622 UINT8 CompletionCode;
623 UINT16 RecordId; // Record ID added. LS byte first
624} IPMI_DELETE_SEL_ENTRY_RESPONSE;
625
626//
627// Definitions for Clear SEL command
628//
629#define IPMI_STORAGE_CLEAR_SEL 0x47
630
631//
632// Constants and Structure definitions for "Clear SEL" command to follow here
633//
634#define IPMI_CLEAR_SEL_REQUEST_C_CHAR_ASCII 0x43
635#define IPMI_CLEAR_SEL_REQUEST_L_CHAR_ASCII 0x4C
636#define IPMI_CLEAR_SEL_REQUEST_R_CHAR_ASCII 0x52
637#define IPMI_CLEAR_SEL_REQUEST_INITIALIZE_ERASE 0xAA
638#define IPMI_CLEAR_SEL_REQUEST_GET_ERASE_STATUS 0x00
639
640typedef struct {
641 UINT8 Reserve[2]; // Reserve ID, LSB first
642 UINT8 AscC; // Ascii for 'C' (0x43)
643 UINT8 AscL; // Ascii for 'L' (0x4c)
644 UINT8 AscR; // Ascii for 'R' (0x52)
645 UINT8 Erase; // 0xAA, Initiate Erase, 0x00 Get Erase Status
646} IPMI_CLEAR_SEL_REQUEST;
647
648#define IPMI_CLEAR_SEL_RESPONSE_ERASURE_IN_PROGRESS 0x00
649#define IPMI_CLEAR_SEL_RESPONSE_ERASURE_COMPLETED 0x01
650
651typedef struct {
652 UINT8 CompletionCode;
653 UINT8 ErasureProgress;
654} IPMI_CLEAR_SEL_RESPONSE;
655
656//
657// Definitions for Get SEL Time command
658//
659#define IPMI_STORAGE_GET_SEL_TIME 0x48
660
661//
662// Constants and Structure definitions for "Get SEL Time" command to follow here
663//
664typedef struct {
665 UINT8 CompletionCode;
666 UINT32 Timestamp; // Present Timestamp clock reading. LS byte first.
667} IPMI_GET_SEL_TIME_RESPONSE;
668
669//
670// Definitions for Set SEL Time command
671//
672#define IPMI_STORAGE_SET_SEL_TIME 0x49
673
674//
675// Constants and Structure definitions for "Set SEL Time" command to follow here
676//
677typedef struct {
678 UINT32 Timestamp;
679} IPMI_SET_SEL_TIME_REQUEST;
680
681//
682// Definitions for Get Auxillary Log Status command
683//
684#define IPMI_STORAGE_GET_AUXILLARY_LOG_STATUS 0x5A
685
686//
687// Constants and Structure definitions for "Get Auxillary Log Status" command to follow here
688//
689
690//
691// Definitions for Set Auxillary Log Status command
692//
693#define IPMI_STORAGE_SET_AUXILLARY_LOG_STATUS 0x5B
694
695//
696// Constants and Structure definitions for "Set Auxillary Log Status" command to follow here
697//
698
699//
700// Definitions for Get SEL Time UTC Offset command
701//
702#define IPMI_STORAGE_GET_SEL_TIME_UTC_OFFSET 0x5C
703
704//
705// Constants and Structure definitions for "Get SEL Time UTC Offset" command to follow here
706//
707typedef struct {
708 UINT8 CompletionCode;
709 //
710 // 16-bit, 2s-complement signed integer for the offset in minutes from UTC to SEL Time.
711 // LS-byte first. (ranges from -1440 to 1440)
712 //
713 INT16 UtcOffset;
714} IPMI_GET_SEL_TIME_UTC_OFFSET_RESPONSE;
715
716//
717// Definitions for Set SEL Time UTC Offset command
718//
719#define IPMI_STORAGE_SET_SEL_TIME_UTC_OFFSET 0x5D
720
721//
722// Constants and Structure definitions for "Set SEL Time UTC Offset" command to follow here
723//
724
725#define IPMI_COMPLETE_SEL_RECORD 0xFF
726
727#define IPMI_SEL_SYSTEM_RECORD 0x02
728#define IPMI_SEL_OEM_TIME_STAMP_RECORD_START 0xC0
729#define IPMI_SEL_OEM_TIME_STAMP_RECORD_END 0xDF
730#define IPMI_SEL_OEM_NO_TIME_STAMP_RECORD_START 0xE0
731#define IPMI_SEL_OEM_NO_TIME_STAMP_RECORD_END 0xFF
732
733#define IPMI_SEL_EVENT_DIR(EventDirType) (EventDirType >> 7)
734#define IPMI_SEL_EVENT_DIR_ASSERTION_EVENT 0x00
735#define IPMI_SEL_EVENT_DIR_DEASSERTION_EVENT 0x01
736
737#define IPMI_SEL_EVENT_TYPE(EventDirType) (EventDirType & 0x7F)
738//
739// Event/Reading Type Code Ranges (Chapter 42)
740//
741#define IPMI_SEL_EVENT_TYPE_UNSPECIFIED 0x00
742#define IPMI_SEL_EVENT_TYPE_THRESHOLD 0x01
743#define IPMI_SEL_EVENT_TYPE_GENERIC_START 0x02
744#define IPMI_SEL_EVENT_TYPE_GENERIC_END 0x0C
745#define IPMI_SEL_EVENT_TYPE_SENSOR_SPECIFIC 0x6F
746#define IPMI_SEL_EVENT_TYPE_OEM_START 0x70
747#define IPMI_SEL_EVENT_TYPE_OEM_END 0x7F
748
749#define SOFTWARE_ID_FROM_GENERATOR_ID(GeneratorId) ((GeneratorId & 0xFF) >> 1)
750//
751// System Software IDs definitions (Section 5.5)
752//
753#define IPMI_SWID_BIOS_RANGE_START 0x00
754#define IPMI_SWID_BIOS_RANGE_END 0x0F
755#define IPMI_SWID_SMI_HANDLER_RANGE_START 0x10
756#define IPMI_SWID_SMI_HANDLER_RANGE_END 0x1F
757#define IPMI_SWID_SMS_RANGE_START 0x20
758#define IPMI_SWID_SMS_RANGE_END 0x2F
759#define IPMI_SWID_OEM_RANGE_START 0x30
760#define IPMI_SWID_OEM_RANGE_END 0x3F
761#define IPMI_SWID_REMOTE_CONSOLE_RANGE_START 0x40
762#define IPMI_SWID_REMOTE_CONSOLE_RANGE_END 0x46
763#define IPMI_SWID_TERMINAL_REMOTE_CONSOLE_ID 0x47
764
765#define SLAVE_ADDRESS_FROM_GENERATOR_ID(GeneratorId) ((GeneratorId & 0xFF) >> 1)
766#define LUN_FROM_GENERATOR_ID(GeneratorId) ((GeneratorId >> 8) & 0x03)
767#define CHANNEL_NUMBER_FROM_GENERATOR_ID(GeneratorId) ((GeneratorId >> 12) & 0x0F)
768
769#define IPMI_EVM_REVISION 0x04
770#define IPMI_BIOS_ID 0x18
771#define IPMI_FORMAT_REV 0x00
772#define IPMI_FORMAT_REV1 0x01
773#define IPMI_SOFTWARE_ID 0x01
774#define IPMI_PLATFORM_VAL_ID 0x01
775#define IPMI_GENERATOR_ID(i,f) ((i << 1) | (f << 1) | IPMI_SOFTWARE_ID)
776
777#define IPMI_SENSOR_TYPE_EVENT_CODE_DISCRETE 0x6F
778
779#define IPMI_OEM_SPECIFIC_DATA 0x02
780#define IPMI_SENSOR_SPECIFIC_DATA 0x03
781
782#pragma pack()
783#endif