xref: /dragonfly/sys/dev/raid/asr/i2omsg.h (revision 65cc0652)
1 /*-
2  ****************************************************************
3  * Copyright (c) 1996-2000 Distributed Processing Technology Corporation
4  * Copyright (c) 2000 Adaptec Corporation.
5  * All rights reserved.
6  *
7  * Copyright 1999 I2O Special Interest Group (I2O SIG).	 All rights reserved.
8  * All rights reserved
9  *
10  * TERMS AND CONDITIONS OF USE
11  *
12  * Redistribution and use in source form, with or without modification, are
13  * permitted provided that redistributions of source code must retain the
14  * above copyright notice, this list of conditions and the following disclaimer.
15  *
16  * This software is provided `as is' by Distributed Processing Technology and
17  * any express or implied warranties, including, but not limited to, the
18  * implied warranties of merchantability and fitness for a particular purpose,
19  * are disclaimed. In no event shall Distributed Processing Technology be
20  * liable for any direct, indirect, incidental, special, exemplary or
21  * consequential damages (including, but not limited to, procurement of
22  * substitute goods or services; loss of use, data, or profits; or business
23  * interruptions) however caused and on any theory of liability, whether in
24  * contract, strict liability, or tort (including negligence or otherwise)
25  * arising in any way out of the use of this driver software, even if advised
26  * of the possibility of such damage.
27  *
28  * This header file, and any modifications of this header file, are provided
29  * contingent upon your agreement and adherence to the here-listed terms and
30  * conditions.	By accepting and/or using this header file, you agree to abide
31  * by these terms and conditions and that these terms and conditions will be
32  * construed and governed in accordance with the laws of the State of California,
33  * without reference to conflict-of-law provisions.  If you do not agree
34  * to these terms and conditions, please delete this file, and any copies,
35  * permanently, without making any use thereof.
36  *
37  * THIS HEADER FILE IS PROVIDED FREE OF CHARGE ON AN AS-IS BASIS WITHOUT
38  * WARRANTY OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
39  * TO IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
40  * PURPOSE.  I2O SIG DOES NOT WARRANT THAT THIS HEADER FILE WILL MEET THE
41  * USER'S REQUIREMENTS OR THAT ITS OPERATION WILL BE UNINTERRUPTED OR
42  * ERROR-FREE.
43  *
44  * I2O SIG DISCLAIMS ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF
45  * ANY PROPRIETARY RIGHTS, RELATING TO THE IMPLEMENTATION OF THE I2O
46  * SPECIFICATIONS.  I2O SIG DOES NOT WARRANT OR REPRESENT THAT SUCH
47  * IMPLEMENTATIONS WILL NOT INFRINGE SUCH RIGHTS.
48  *
49  * THE USER OF THIS HEADER FILE SHALL HAVE NO RECOURSE TO I2O SIG FOR ANY
50  * ACTUAL OR CONSEQUENTIAL DAMAGES INCLUDING, BUT NOT LIMITED TO, LOST DATA
51  * OR LOST PROFITS ARISING OUT OF THE USE OR INABILITY TO USE THIS PROGRAM.
52  *
53  * I2O SIG grants the user of this header file a license to copy, distribute,
54  * and modify it, for any purpose, under the following terms.  Any copying,
55  * distribution, or modification of this header file must not delete or alter
56  * the copyright notice of I2O SIG or any of these Terms and Conditions.
57  *
58  * Any distribution of this header file must not include a charge for the
59  * header file (unless such charges are strictly for the physical acts of
60  * copying or transferring copies).  However, distribution of a product in
61  * which this header file is embedded may include a charge so long as any
62  * such charge does not include any charge for the header file itself.
63  *
64  * Any modification of this header file constitutes a derivative work based
65  * on this header file.	 Any distribution of such derivative work: (1) must
66  * include prominent notices that the header file has been changed from the
67  * original, together with the dates of any changes; (2) automatically includes
68  * this same license to the original header file from I2O SIG, without any
69  * restriction thereon from the distributing user; and (3) must include a
70  * grant of license of the modified file under the same terms and conditions
71  * as these Terms and Conditions.
72  *
73  * The I2O SIG Web site can be found at: http://www.i2osig.org
74  *
75  * The I2O SIG encourages you to deposit derivative works based on this
76  * header file at the I2O SIG Web site.	 Furthermore, to become a Registered
77  * Developer of the I2O SIG, sign up at the Web site or call 415.750.8352
78  * (United States).
79  *
80  * $FreeBSD: src/sys/dev/asr/i2omsg.h,v 1.8 2011/02/21 09:01:34 brucec Exp $
81  *
82  ****************************************************************/
83 
84 /*********************************************************************
85  * I2OMsg.h -- I2O Message defintion file
86  *
87  * This file contains information presented in Chapter 3, 4 and 6 of
88  * the I2O(tm) Specification and most of the I2O Global defines and
89  * Typedefs.
90  **********************************************************************/
91 
92 #if !defined(I2O_MESSAGE_HDR)
93 #define	I2O_MESSAGE_HDR
94 
95 #define	I2OMSG_REV 1_5_4  /* I2OMsg header file revision string */
96 
97 /*
98 
99    NOTES:
100 
101    Gets, reads, receives, etc. are all even numbered functions.
102    Sets, writes, sends, etc. are all odd numbered functions.
103    Functions that both send and receive data can be either but an attempt is
104    made to use the function number that indicates the greater transfer amount.
105    Functions that do not send or receive data use odd function numbers.
106 
107    Some functions are synonyms like read, receive and send, write.
108 
109    All common functions will have a code of less than 0x80.
110    Unique functions to a class will start at 0x80.
111    Executive Functions start at 0xA0.
112 
113    Utility Message function codes range from 0 - 0x1f
114    Base Message function codes range from 0x20 - 0xfe
115    Private Message function code is 0xff.
116 */
117 
118 
119 
120 #include "i2otypes.h"
121 
122 
123 PRAGMA_ALIGN_PUSH
124 
125 PRAGMA_PACK_PUSH
126 
127 /* Set to 1 for 64 bit Context Fields */
128 #define	    I2O_64BIT_CONTEXT	       0
129 
130 /****************************************************************************/
131 
132 /* Common functions accross all classes. */
133 
134 #define	   I2O_PRIVATE_MESSAGE			       0xFF
135 
136 /****************************************************************************/
137 /* Class ID and Code Assignments */
138 
139 
140 #define	   I2O_CLASS_VERSION_10			       0x00
141 #define	   I2O_CLASS_VERSION_11			       0x01
142 
143 /*    Class Code Names:	 Table 6-1 Class Code Assignments. */
144 #define	   I2O_CLASS_EXECUTIVE			       0x000
145 #define	   I2O_CLASS_DDM			       0x001
146 #define	   I2O_CLASS_RANDOM_BLOCK_STORAGE	       0x010
147 #define	   I2O_CLASS_SEQUENTIAL_STORAGE		       0x011
148 #define	   I2O_CLASS_LAN			       0x020
149 #define	   I2O_CLASS_WAN			       0x030
150 #define	   I2O_CLASS_FIBRE_CHANNEL_PORT		       0x040
151 #define	   I2O_CLASS_FIBRE_CHANNEL_PERIPHERAL	       0x041
152 #define	   I2O_CLASS_SCSI_PERIPHERAL		       0x051
153 #define	   I2O_CLASS_ATE_PORT			       0x060
154 #define	   I2O_CLASS_ATE_PERIPHERAL		       0x061
155 #define	   I2O_CLASS_FLOPPY_CONTROLLER		       0x070
156 #define	   I2O_CLASS_FLOPPY_DEVICE		       0x071
157 #define	   I2O_CLASS_BUS_ADAPTER_PORT		       0x080
158 /* Class Codes 0x090 - 0x09f are reserved for Peer-to-Peer classes */
159 #define	   I2O_CLASS_MATCH_ANYCLASS		       0xffffffff
160 
161 #define	   I2O_SUBCLASS_i960			       0x001
162 #define	   I2O_SUBCLASS_HDM			       0x020
163 #define	   I2O_SUBCLASS_ISM			       0x021
164 
165 
166 /****************************************************************************/
167 /* Message Frame defines and structures	 */
168 
169 /*   Defines for the Version_Status field. */
170 
171 #define	   I2O_VERSION_10			       0x00
172 #define	   I2O_VERSION_11			       0x01
173 
174 #define	   I2O_VERSION_OFFSET_NUMBER_MASK	       0x07
175 #define	   I2O_VERSION_OFFSET_SGL_TRL_OFFSET_MASK      0xF0
176 
177 /*   Defines for the Message Flags Field. */
178 /*   Please Note the FAIL bit is only set in the Transport Fail Message. */
179 #define	   I2O_MESSAGE_FLAGS_STATIC		       0x01
180 #define	   I2O_MESSAGE_FLAGS_64BIT_CONTEXT	       0x02
181 #define	   I2O_MESSAGE_FLAGS_MULTIPLE		       0x10
182 #define	   I2O_MESSAGE_FLAGS_FAIL		       0x20
183 #define	   I2O_MESSAGE_FLAGS_LAST		       0x40
184 #define	   I2O_MESSAGE_FLAGS_REPLY		       0x80
185 
186 /* Defines for Request Status Codes:  Table 3-1 Reply Status Codes.  */
187 
188 #define	   I2O_REPLY_STATUS_SUCCESS		       0x00
189 #define	   I2O_REPLY_STATUS_ABORT_DIRTY		       0x01
190 #define	   I2O_REPLY_STATUS_ABORT_NO_DATA_TRANSFER     0x02
191 #define	   I2O_REPLY_STATUS_ABORT_PARTIAL_TRANSFER     0x03
192 #define	   I2O_REPLY_STATUS_ERROR_DIRTY		       0x04
193 #define	   I2O_REPLY_STATUS_ERROR_NO_DATA_TRANSFER     0x05
194 #define	   I2O_REPLY_STATUS_ERROR_PARTIAL_TRANSFER     0x06
195 #define	   I2O_REPLY_STATUS_PROCESS_ABORT_DIRTY	       0x08
196 #define	   I2O_REPLY_STATUS_PROCESS_ABORT_NO_DATA_TRANSFER   0x09
197 #define	   I2O_REPLY_STATUS_PROCESS_ABORT_PARTIAL_TRANSFER   0x0A
198 #define	   I2O_REPLY_STATUS_TRANSACTION_ERROR	       0x0B
199 #define	   I2O_REPLY_STATUS_PROGRESS_REPORT	       0x80
200 
201 /* DetailedStatusCode defines for ALL messages: Table 3-2 Detailed Status Codes.  */
202 
203 #define	   I2O_DETAIL_STATUS_SUCCESS			    0x0000
204 #define	   I2O_DETAIL_STATUS_BAD_KEY			    0x0002
205 #define	   I2O_DETAIL_STATUS_TCL_ERROR			    0x0003
206 #define	   I2O_DETAIL_STATUS_REPLY_BUFFER_FULL		    0x0004
207 #define	   I2O_DETAIL_STATUS_NO_SUCH_PAGE		    0x0005
208 #define	   I2O_DETAIL_STATUS_INSUFFICIENT_RESOURCE_SOFT	    0x0006
209 #define	   I2O_DETAIL_STATUS_INSUFFICIENT_RESOURCE_HARD	    0x0007
210 #define	   I2O_DETAIL_STATUS_CHAIN_BUFFER_TOO_LARGE	    0x0009
211 #define	   I2O_DETAIL_STATUS_UNSUPPORTED_FUNCTION	    0x000A
212 #define	   I2O_DETAIL_STATUS_DEVICE_LOCKED		    0x000B
213 #define	   I2O_DETAIL_STATUS_DEVICE_RESET		    0x000C
214 #define	   I2O_DETAIL_STATUS_INAPPROPRIATE_FUNCTION	    0x000D
215 #define	   I2O_DETAIL_STATUS_INVALID_INITIATOR_ADDRESS	    0x000E
216 #define	   I2O_DETAIL_STATUS_INVALID_MESSAGE_FLAGS	    0x000F
217 #define	   I2O_DETAIL_STATUS_INVALID_OFFSET		    0x0010
218 #define	   I2O_DETAIL_STATUS_INVALID_PARAMETER		    0x0011
219 #define	   I2O_DETAIL_STATUS_INVALID_REQUEST		    0x0012
220 #define	   I2O_DETAIL_STATUS_INVALID_TARGET_ADDRESS	    0x0013
221 #define	   I2O_DETAIL_STATUS_MESSAGE_TOO_LARGE		    0x0014
222 #define	   I2O_DETAIL_STATUS_MESSAGE_TOO_SMALL		    0x0015
223 #define	   I2O_DETAIL_STATUS_MISSING_PARAMETER		    0x0016
224 #define	   I2O_DETAIL_STATUS_TIMEOUT			    0x0017
225 #define	   I2O_DETAIL_STATUS_UNKNOWN_ERROR		    0x0018
226 #define	   I2O_DETAIL_STATUS_UNKNOWN_FUNCTION		    0x0019
227 #define	   I2O_DETAIL_STATUS_UNSUPPORTED_VERSION	    0x001A
228 #define	   I2O_DEATIL_STATUS_DEVICE_BUSY		    0x001B
229 #define	   I2O_DETAIL_STATUS_DEVICE_NOT_AVAILABLE	    0x001C
230 
231 /* Common I2O Field sizes  */
232 
233 #define	   I2O_TID_SZ				       12
234 #define	   I2O_FUNCTION_SZ			       8
235 #define	   I2O_UNIT_ID_SZ			       16
236 #define	   I2O_SEGMENT_NUMBER_SZ		       12
237 
238 #define	   I2O_IOP_ID_SZ			       12
239 #define	   I2O_GROUP_ID_SZ			       16
240 #define	   I2O_IOP_STATE_SZ			       8
241 #define	   I2O_MESSENGER_TYPE_SZ		       8
242 
243 #define	   I2O_CLASS_ID_SZ			       12
244 #define	   I2O_CLASS_ORGANIZATION_ID_SZ		       16
245 
246 #define	   I2O_4BIT_VERSION_SZ			       4
247 #define	   I2O_8BIT_FLAGS_SZ			       8
248 #define	   I2O_COMMON_LENGTH_FIELD_SZ		       16
249 
250 #define	   I2O_DEVID_DESCRIPTION_SZ		       16
251 #define	   I2O_DEVID_VENDOR_INFO_SZ		       16
252 #define	   I2O_DEVID_PRODUCT_INFO_SZ		       16
253 #define	   I2O_DEVID_REV_LEVEL_SZ		       8
254 #define	   I2O_MODULE_NAME_SZ			       24
255 
256 #define	   I2O_BIOS_INFO_SZ			       8
257 
258 #define	   I2O_RESERVED_4BITS			       4
259 #define	   I2O_RESERVED_8BITS			       8
260 #define	   I2O_RESERVED_12BITS			       12
261 #define	   I2O_RESERVED_16BITS			       16
262 #define	   I2O_RESERVED_20BITS			       20
263 #define	   I2O_RESERVED_24BITS			       24
264 #define	   I2O_RESERVED_28BITS			       28
265 
266 
267 typedef	   U32	      I2O_PARAMETER_TID;
268 
269 
270 #if	I2O_64BIT_CONTEXT
271 typedef	   U64	      I2O_INITIATOR_CONTEXT;
272 typedef	   U64	      I2O_TRANSACTION_CONTEXT;
273 #else
274 typedef	   U32	      I2O_INITIATOR_CONTEXT;
275 typedef	   U32	      I2O_TRANSACTION_CONTEXT;
276 #endif
277 
278 /*  Serial Number format defines */
279 
280 #define	   I2O_SERIAL_FORMAT_UNKNOWN		       0
281 #define	   I2O_SERIAL_FORMAT_BINARY		       1
282 #define	   I2O_SERIAL_FORMAT_ASCII		       2
283 #define	   I2O_SERIAL_FORMAT_UNICODE		       3
284 #define	   I2O_SERIAL_FORMAT_LAN_MAC		       4
285 #define	   I2O_SERIAL_FORMAT_WAN		       5
286 
287 /* Special TID Assignments */
288 
289 #define	   I2O_IOP_TID				       0
290 #define	   I2O_HOST_TID				       1
291 
292 
293 /****************************************************************************/
294 
295 /* I2O Message Frame common for all messages  */
296 
297 typedef struct _I2O_MESSAGE_FRAME {
298    U8			       VersionOffset;
299    U8			       MsgFlags;
300    U16			       MessageSize;
301 #if  (defined(__BORLANDC__)) || defined(_DPT_BIG_ENDIAN) || (defined(sparc))
302    U32			       TargetAddress;
303 #else
304    BF			       TargetAddress:I2O_TID_SZ;
305    BF			       InitiatorAddress:I2O_TID_SZ;
306    BF			       Function:I2O_FUNCTION_SZ;
307 #endif
308    I2O_INITIATOR_CONTEXT       InitiatorContext;
309 } I2O_MESSAGE_FRAME, *PI2O_MESSAGE_FRAME;
310 
311 
312 /****************************************************************************/
313 
314 /* Transaction Reply Lists (TRL) Control Word structure */
315 
316 #define	   I2O_TRL_FLAGS_SINGLE_FIXED_LENGTH	       0x00
317 #define	   I2O_TRL_FLAGS_SINGLE_VARIABLE_LENGTH	       0x40
318 #define	   I2O_TRL_FLAGS_MULTIPLE_FIXED_LENGTH	       0x80
319 
320 typedef struct _I2O_TRL_CONTROL_WORD {
321    U8			       TrlCount;
322    U8			       TrlElementSize;
323    U8			       reserved;
324    U8			       TrlFlags;
325 #if	I2O_64BIT_CONTEXT
326    U32			       Padding;		  /* Padding for 64 bit */
327 #endif
328 } I2O_TRL_CONTROL_WORD, *PI2O_TRL_CONTROL_WORD;
329 
330 /****************************************************************************/
331 
332 /* I2O Successful Single Transaction Reply Message Frame structure. */
333 
334 typedef struct _I2O_SINGLE_REPLY_MESSAGE_FRAME {
335    I2O_MESSAGE_FRAME	       StdMessageFrame;
336    I2O_TRANSACTION_CONTEXT     TransactionContext;
337    U16			       DetailedStatusCode;
338    U8			       reserved;
339    U8			       ReqStatus;
340 /*			       ReplyPayload	   */
341 } I2O_SINGLE_REPLY_MESSAGE_FRAME, *PI2O_SINGLE_REPLY_MESSAGE_FRAME;
342 
343 
344 /****************************************************************************/
345 
346 /* I2O Successful Multiple Transaction Reply Message Frame structure. */
347 
348 typedef struct _I2O_MULTIPLE_REPLY_MESSAGE_FRAME {
349    I2O_MESSAGE_FRAME	       StdMessageFrame;
350    I2O_TRL_CONTROL_WORD	       TrlControlWord;
351    U16			       DetailedStatusCode;
352    U8			       reserved;
353    U8			       ReqStatus;
354 /*			       TransactionDetails[]	   */
355 } I2O_MULTIPLE_REPLY_MESSAGE_FRAME, *PI2O_MULTIPLE_REPLY_MESSAGE_FRAME;
356 
357 
358 /****************************************************************************/
359 
360 /* I2O Private Message Frame structure. */
361 
362 typedef struct _I2O_PRIVATE_MESSAGE_FRAME {
363    I2O_MESSAGE_FRAME	       StdMessageFrame;
364    I2O_TRANSACTION_CONTEXT     TransactionContext;
365    U16			       XFunctionCode;
366    U16			       OrganizationID;
367 /*			       PrivatePayload[]	       */
368 } I2O_PRIVATE_MESSAGE_FRAME, *PI2O_PRIVATE_MESSAGE_FRAME;
369 
370 
371 /****************************************************************************/
372 
373 /* Message Failure Severity Codes */
374 
375 #define	   I2O_SEVERITY_FORMAT_ERROR		       0x1
376 #define	   I2O_SEVERITY_PATH_ERROR		       0x2
377 #define	   I2O_SEVERITY_PATH_STATE		       0x4
378 #define	   I2O_SEVERITY_CONGESTION		       0x8
379 
380 /* Transport Failure Codes: Table 3-3 Mesasge Failure Codes */
381 
382 #define	   I2O_FAILURE_CODE_TRANSPORT_SERVICE_SUSPENDED	   0x81
383 #define	   I2O_FAILURE_CODE_TRANSPORT_SERVICE_TERMINATED   0x82
384 #define	   I2O_FAILURE_CODE_TRANSPORT_CONGESTION	   0x83
385 #define	   I2O_FAILURE_CODE_TRANSPORT_FAIL		   0x84
386 #define	   I2O_FAILURE_CODE_TRANSPORT_STATE_ERROR	   0x85
387 #define	   I2O_FAILURE_CODE_TRANSPORT_TIME_OUT		   0x86
388 #define	   I2O_FAILURE_CODE_TRANSPORT_ROUTING_FAILURE	   0x87
389 #define	   I2O_FAILURE_CODE_TRANSPORT_INVALID_VERSION	   0x88
390 #define	   I2O_FAILURE_CODE_TRANSPORT_INVALID_OFFSET	   0x89
391 #define	   I2O_FAILURE_CODE_TRANSPORT_INVALID_MSG_FLAGS	   0x8A
392 #define	   I2O_FAILURE_CODE_TRANSPORT_FRAME_TOO_SMALL	   0x8B
393 #define	   I2O_FAILURE_CODE_TRANSPORT_FRAME_TOO_LARGE	   0x8C
394 #define	   I2O_FAILURE_CODE_TRANSPORT_INVALID_TARGET_ID	   0x8D
395 #define	   I2O_FAILURE_CODE_TRANSPORT_INVALID_INITIATOR_ID 0x8E
396 #define	   I2O_FAILURE_CODE_TRANSPORT_INVALID_INITIATOR_CONTEXT	   0x8F
397 #define	   I2O_FAILURE_CODE_TRANSPORT_UNKNOWN_FAILURE	   0xFF
398 
399 /* IOP_ID and Severity sizes */
400 
401 #define	   I2O_FAILCODE_SEVERITY_SZ			   8
402 #define	   I2O_FAILCODE_CODE_SZ				   8
403 
404 /* I2O Transport Message Reply for Message Failure. */
405 
406 typedef struct _I2O_FAILURE_REPLY_MESSAGE_FRAME {
407     I2O_MESSAGE_FRAME		StdMessageFrame;
408     I2O_TRANSACTION_CONTEXT	TransactionContext;
409 #   if (defined(_DPT_BIG_ENDIAN) || defined(sparc) || defined(__BORLANDC__))
410 	U32			LowestVersion;
411 	U32			reserved;
412 #   else
413 	U8			LowestVersion;
414 	U8			HighestVersion;
415 /*	BF			Severity:I2O_FAILCODE_SEVERITY_SZ; */
416 /*	BF			FailureCode:I2O_FAILCODE_CODE_SZ; */
417 /* Due to our compiler padding this structure and making it larger than
418  * it really is (4 bytes larger), we are re-defining these two fields
419  */
420 	U8			Severity;
421 	U8			FailureCode;
422 	BF			reserved:I2O_RESERVED_4BITS;
423 	BF			FailingHostUnitID:I2O_UNIT_ID_SZ;
424 	BF			reserved1:12;
425 #   endif
426     U32				AgeLimit;
427     U32				PreservedMFA;
428 } I2O_FAILURE_REPLY_MESSAGE_FRAME, *PI2O_FAILURE_REPLY_MESSAGE_FRAME;
429 
430 /* I2O Transport Message Reply for Transaction Error. */
431 
432 typedef struct _I2O_TRANSACTION_ERROR_REPLY_MESSAGE_FRAME {
433    I2O_MESSAGE_FRAME	       StdMessageFrame;
434    I2O_TRANSACTION_CONTEXT     TransactionContext;
435    U16			       DetailedStatusCode;
436    U8			       reserved;
437    U8			       ReqStatus;   /* Should always be Transaction Error */
438    U32			       ErrorOffset;
439    U8			       BitOffset;
440    U8			       reserved1;
441    U16			       reserved2;
442 } I2O_TRANSACTION_ERROR_REPLY_MESSAGE_FRAME, *PI2O_TRANSACTION_ERROR_REPLY_MESSAGE_FRAME;
443 
444 /****************************************************************************/
445 
446 /*  Misc. commonly used structures */
447 
448 /* Class ID Block */
449 
450 typedef struct _I2O_CLASS_ID {
451 #if (defined(_DPT_BIG_ENDIAN) || defined(sparc))
452    U32			       Class;
453 #else
454    BF			       Class:I2O_CLASS_ID_SZ;
455    BF			       Version:I2O_4BIT_VERSION_SZ;
456    BF			       OrganizationID:I2O_CLASS_ORGANIZATION_ID_SZ;
457 #endif
458 } I2O_CLASS_ID, *PI2O_CLASS_ID;
459 
460 
461 #define	   I2O_MAX_SERIAL_NUMBER_SZ		       256
462 
463 typedef struct _I2O_SERIAL_INFO {
464    U8			       SerialNumberLength;
465    U8			       SerialNumberFormat;
466    U8			       SerialNumber[I2O_MAX_SERIAL_NUMBER_SZ];
467 } I2O_SERIAL_INFO, *PI2O_SERIAL_INFO;
468 
469 
470 /****************************************************************************/
471 /* Hardware Resource Table (HRT) and Logical Configuration Table (LCT) */
472 /****************************************************************************/
473 
474 /* Bus Type Code defines */
475 
476 #define	   I2O_LOCAL_BUS			       0
477 #define	   I2O_ISA_BUS				       1
478 #define	   I2O_EISA_BUS				       2
479 #define	   I2O_MCA_BUS				       3
480 #define	   I2O_PCI_BUS				       4
481 #define	   I2O_PCMCIA_BUS			       5
482 #define	   I2O_NUBUS_BUS			       6
483 #define	   I2O_CARDBUS_BUS			       7
484 #define	   I2O_OTHER_BUS			       0x80
485 
486 #define	   I2O_HRT_STATE_SZ			       4
487 #define	   I2O_HRT_BUS_NUMBER_SZ		       8
488 #define	   I2O_HRT_BUS_TYPE_SZ			       8
489 
490 
491 /* Bus Structures */
492 
493 /* PCI Bus */
494 typedef struct _I2O_PCI_BUS_INFO {
495    U8			       PciFunctionNumber;
496    U8			       PciDeviceNumber;
497    U8			       PciBusNumber;
498    U8			       reserved;
499    U16			       PciVendorID;
500    U16			       PciDeviceID;
501 } I2O_PCI_BUS_INFO, *PI2O_PCI_BUS_INFO;
502 
503 /* Local Bus */
504 typedef struct _I2O_LOCAL_BUS_INFO {
505    U16			       LbBaseIOPort;
506    U16			       reserved;
507    U32			       LbBaseMemoryAddress;
508 } I2O_LOCAL_BUS_INFO, *PI2O_LOCAL_BUS_INFO;
509 
510 /* ISA Bus */
511 typedef struct _I2O_ISA_BUS_INFO {
512    U16			       IsaBaseIOPort;
513    U8			       CSN;
514    U8			       reserved;
515    U32			       IsaBaseMemoryAddress;
516 } I2O_ISA_BUS_INFO, *PI2O_ISA_BUS_INFO;
517 
518 /* EISA Bus */
519 typedef struct _I2O_EISA_BUS_INFO {
520    U16			       EisaBaseIOPort;
521    U8			       reserved;
522    U8			       EisaSlotNumber;
523    U32			       EisaBaseMemoryAddress;
524 } I2O_EISA_BUS_INFO, *PI2O_EISA_BUS_INFO;
525 
526 /* MCA Bus */
527 typedef struct _I2O_MCA_BUS_INFO {
528    U16			       McaBaseIOPort;
529    U8			       reserved;
530    U8			       McaSlotNumber;
531    U32			       McaBaseMemoryAddress;
532 } I2O_MCA_BUS_INFO, *PI2O_MCA_BUS_INFO;
533 
534 /* Other Bus */
535 typedef struct _I2O_OTHER_BUS_INFO {
536    U16			       BaseIOPort;
537    U16			       reserved;
538    U32			       BaseMemoryAddress;
539 } I2O_OTHER_BUS_INFO, *PI2O_OTHER_BUS_INFO;
540 
541 
542 /* HRT Entry Block */
543 
544 typedef struct _I2O_HRT_ENTRY {
545    U32			       AdapterID;
546 #if (defined(_DPT_BIG_ENDIAN) || defined(sparc))
547    U32			       ControllingTID;
548 #else
549    BF			       ControllingTID:I2O_TID_SZ;
550    BF			       AdapterState:I2O_HRT_STATE_SZ;
551    BF			       BusNumber:I2O_HRT_BUS_NUMBER_SZ;
552    BF			       BusType:I2O_HRT_BUS_TYPE_SZ;
553 #endif
554    union {
555        /* PCI Bus */
556        I2O_PCI_BUS_INFO	       PCIBus;
557 
558        /* Local Bus */
559        I2O_LOCAL_BUS_INFO      LocalBus;
560 
561        /* ISA Bus */
562        I2O_ISA_BUS_INFO	       ISABus;
563 
564        /* EISA Bus */
565        I2O_EISA_BUS_INFO       EISABus;
566 
567        /* MCA Bus */
568        I2O_MCA_BUS_INFO	       MCABus;
569 
570        /* Other. */
571        I2O_OTHER_BUS_INFO      OtherBus;
572    }uBus;
573 } I2O_HRT_ENTRY, *PI2O_HRT_ENTRY;
574 
575 
576 /* I2O Hardware Resource Table structure. */
577 
578 typedef struct _I2O_HRT {
579    U16			       NumberEntries;
580    U8			       EntryLength;
581    U8			       HRTVersion;
582    U32			       CurrentChangeIndicator;
583    I2O_HRT_ENTRY	       HRTEntry[1];
584 } I2O_HRT, *PI2O_HRT;
585 
586 
587 /****************************************************************************/
588 /* Logical Configuration Table	*/
589 /****************************************************************************/
590 
591 /* I2O Logical Configuration Table structures. */
592 
593 #define	   I2O_IDENTITY_TAG_SZ			       8
594 
595 /* I2O Logical Configuration Table Device Flags */
596 
597 #define	   I2O_LCT_DEVICE_FLAGS_CONF_DIALOG_REQUEST	       0x01
598 #define	   I2O_LCT_DEVICE_FLAGS_MORE_THAN_1_USER	       0x02
599 #define	   I2O_LCT_DEVICE_FLAGS_PEER_SERVICE_DISABLED	       0x10
600 #define	   I2O_LCT_DEVICE_FLAGS_MANAGEMENT_SERVICE_DISABLED    0x20
601 
602 /* LCT Entry Block */
603 
604 typedef struct _I2O_LCT_ENTRY {
605 #if (defined(_DPT_BIG_ENDIAN) || defined(sparc))
606    U32			       TableEntrySize;
607 #else
608    BF			       TableEntrySize:I2O_COMMON_LENGTH_FIELD_SZ;
609    BF			       LocalTID:I2O_TID_SZ;
610    BF			       reserved:I2O_4BIT_VERSION_SZ;
611 #endif
612    U32			       ChangeIndicator;
613    U32			       DeviceFlags;
614    I2O_CLASS_ID		       ClassID;
615    U32			       SubClassInfo;
616 #if (defined(__BORLANDC__)) || defined(_DPT_BIG_ENDIAN) || (defined(sparc))
617    U32			       UserTID;
618 #else
619    BF			       UserTID:I2O_TID_SZ;
620    BF			       ParentTID:I2O_TID_SZ;
621    BF			       BiosInfo:I2O_BIOS_INFO_SZ;
622 #endif
623    U8			       IdentityTag[I2O_IDENTITY_TAG_SZ];
624    U32			       EventCapabilities;
625 } I2O_LCT_ENTRY, *PI2O_LCT_ENTRY;
626 
627 
628 /* I2O Logical Configuration Table structure. */
629 
630 typedef struct _I2O_LCT {
631 #if (defined(_DPT_BIG_ENDIAN) || defined(sparc))
632    U32			       TableSize;
633 #else
634    BF			       TableSize:I2O_COMMON_LENGTH_FIELD_SZ;
635    BF			       BootDeviceTID:I2O_TID_SZ;
636    BF			       LctVer:I2O_4BIT_VERSION_SZ;
637 #endif
638    U32			       IopFlags;
639    U32			       CurrentChangeIndicator;
640    I2O_LCT_ENTRY	       LCTEntry[1];
641 } I2O_LCT, *PI2O_LCT;
642 
643 
644 /****************************************************************************/
645 
646 /* Memory Addressing structures and defines. */
647 
648 /* SglFlags defines. */
649 
650 #define	   I2O_SGL_FLAGS_LAST_ELEMENT		       0x80
651 #define	   I2O_SGL_FLAGS_END_OF_BUFFER		       0x40
652 
653 #define	   I2O_SGL_FLAGS_IGNORE_ELEMENT		       0x00
654 #define	   I2O_SGL_FLAGS_TRANSPORT_ELEMENT	       0x04
655 #define	   I2O_SGL_FLAGS_BIT_BUCKET_ELEMENT	       0x08
656 #define	   I2O_SGL_FLAGS_IMMEDIATE_DATA_ELEMENT	       0x0C
657 #define	   I2O_SGL_FLAGS_SIMPLE_ADDRESS_ELEMENT	       0x10
658 #define	   I2O_SGL_FLAGS_PAGE_LIST_ADDRESS_ELEMENT     0x20
659 #define	   I2O_SGL_FLAGS_CHAIN_POINTER_ELEMENT	       0x30
660 #define	   I2O_SGL_FLAGS_LONG_TRANSACTION_ELEMENT      0x40
661 #define	   I2O_SGL_FLAGS_SHORT_TRANSACTION_ELEMENT     0x70
662 #define	   I2O_SGL_FLAGS_SGL_ATTRIBUTES_ELEMENT	       0x7C
663 
664 #define	   I2O_SGL_FLAGS_BC0			       0x01
665 #define	   I2O_SGL_FLAGS_BC1			       0x02
666 #define	   I2O_SGL_FLAGS_DIR			       0x04
667 #define	   I2O_SGL_FLAGS_LOCAL_ADDRESS		       0x08
668 
669 #define	   I2O_SGL_FLAGS_CONTEXT_COUNT_MASK	       0x03
670 #define	   I2O_SGL_FLAGS_ADDRESS_MODE_MASK	       0x3C
671 #define	   I2O_SGL_FLAGS_NO_CONTEXT		       0x00
672 
673 /*  Scatter/Gather Truth Table */
674 
675 /*
676 
677 typedef enum _SG_TYPE {
678    INVALID,
679    Ignore,
680    TransportDetails,
681    BitBucket,
682    ImmediateData,
683    Simple,
684    PageList,
685    ChainPointer,
686    ShortTransaction,
687    LongTransaction,
688    SGLAttributes,
689    INVALID/ReservedLongFormat,
690    INVALID/ReservedShortFormat
691 } SG_TYPE, *PSG_TYPE;
692 
693 
694    0x00	   Ignore;
695    0x04	   TransportDetails;
696    0x08	   BitBucket;
697    0x0C	   ImmediateData;
698    0x10	   Simple;
699    0x14	   Simple;
700    0x18	   Simple;
701    0x1C	   Simple;
702    0x20	   PageList;
703    0x24	   PageList;
704    0x28	   PageList;
705    0x2C	   PageList;
706    0x30	   ChainPointer;
707    0x34	   INVALID;
708    0x38	   ChainPointer;
709    0x3C	   INVALID;
710    0x40	   LongTransaction;
711    0x44	   INVALID/ReservedLongFormat;
712    0x48	   BitBucket;
713    0x4C	   ImmediateData;
714    0x50	   Simple;
715    0x54	   Simple;
716    0x58	   Simple;
717    0x5C	   Simple;
718    0x60	   PageList;
719    0x64	   PageList;
720    0x68	   PageList;
721    0x6C	   PageList;
722    0x70	   ShortTransaction;
723    0x74	   INVALID/ReservedShortFormat;
724    0x78	   INVALID/ReservedShortFormat;
725    0x7C	   SGLAttributes;
726 */
727 
728 
729 /* 32 Bit Context Field defines */
730 
731 #define	   I2O_SGL_FLAGS_CONTEXT32_NULL		       0x00
732 #define	   I2O_SGL_FLAGS_CONTEXT32_U32		       0x01
733 #define	   I2O_SGL_FLAGS_CONTEXT32_U64		       0x02
734 #define	   I2O_SGL_FLAGS_CONTEXT32_U96		       0x03
735 
736 #define	   I2O_SGL_FLAGS_CONTEXT32_NULL_SZ	       0x00
737 #define	   I2O_SGL_FLAGS_CONTEXT32_U32_SZ	       0x04
738 #define	   I2O_SGL_FLAGS_CONTEXT32_U64_SZ	       0x08
739 #define	   I2O_SGL_FLAGS_CONTEXT32_U96_SZ	       0x0C
740 
741 /* 64 Bit Context Field defines */
742 
743 #define	   I2O_SGL_FLAGS_CONTEXT64_NULL		       0x00
744 #define	   I2O_SGL_FLAGS_CONTEXT64_U64		       0x01
745 #define	   I2O_SGL_FLAGS_CONTEXT64_U128		       0x02
746 #define	   I2O_SGL_FLAGS_CONTEXT64_U192		       0x03
747 
748 #define	   I2O_SGL_FLAGS_CONTEXT64_NULL_SZ	       0x00
749 #define	   I2O_SGL_FLAGS_CONTEXT64_U64_SZ	       0x08
750 #define	   I2O_SGL_FLAGS_CONTEXT64_U128_SZ	       0x10
751 #define	   I2O_SGL_FLAGS_CONTEXT64_U192_SZ	       0x18
752 
753 /* SGL Attribute Element defines */
754 
755 #define	   I2O_SGL_ATTRIBUTE_FLAGS_BIT_BUCKET_HINT     0x0400
756 #define	   I2O_SGL_ATTRIBUTE_FLAGS_IMMEDIATE_DATA_HINT 0x0200
757 #define	   I2O_SGL_ATTRIBUTE_FLAGS_LOCAL_ADDRESS_HINT  0x0100
758 #define	   I2O_SGL_ATTRIBUTE_FLAGS_32BIT_TRANSACTION   0x0000
759 #define	   I2O_SGL_ATTRIBUTE_FLAGS_64BIT_TRANSACTION   0x0004
760 #define	   I2O_SGL_ATTRIBUTE_FLAGS_32BIT_LOCAL_ADDRESS 0x0000
761 
762 /* SG Size defines */
763 
764 #define	   I2O_SG_COUNT_SZ			       24
765 #define	   I2O_SG_FLAGS_SZ			       8
766 
767 /* Standard Flags and Count fields for SG Elements */
768 
769 typedef struct _I2O_FLAGS_COUNT {
770 #if (defined(__BORLANDC__)) || defined(_DPT_BIG_ENDIAN) || (defined(sparc))
771    U32			       Count;
772 #else
773    BF			       Count:I2O_SG_COUNT_SZ;
774    BF			       Flags:I2O_SG_FLAGS_SZ;
775 #endif
776 } I2O_FLAGS_COUNT, *PI2O_FLAGS_COUNT;
777 
778 /* Bit Bucket Element */
779 
780 typedef struct _I2O_SGE_BIT_BUCKET_ELEMENT {
781    I2O_FLAGS_COUNT	       FlagsCount;
782    U32			       BufferContext;
783 } I2O_SGE_BIT_BUCKET_ELEMENT, *PI2O_SGE_BIT_BUCKET_ELEMENT;
784 
785 /* Chain Addressing Scatter-Gather Element */
786 
787 typedef struct _I2O_SGE_CHAIN_ELEMENT {
788    I2O_FLAGS_COUNT	       FlagsCount;
789    U32			       PhysicalAddress;
790 } I2O_SGE_CHAIN_ELEMENT, *PI2O_SGE_CHAIN_ELEMENT;
791 
792 /* Chain Addressing with Context Scatter-Gather Element */
793 
794 typedef struct _I2O_SGE_CHAIN_CONTEXT_ELEMENT {
795    I2O_FLAGS_COUNT	       FlagsCount;
796    U32			       Context[1];
797    U32			       PhysicalAddress;
798 } I2O_SGE_CHAIN_CONTEXT_ELEMENT, *PI2O_SGE_CHAIN_CONTEXT_ELEMENT;
799 
800 /* Ignore Scatter-Gather Element */
801 
802 typedef struct _I2O_SGE_IGNORE_ELEMENT {
803    I2O_FLAGS_COUNT	       FlagsCount;
804 } I2O_SGE_IGNORE_ELEMENT, *PI2O_SGE_IGNORE_ELEMENT;
805 
806 /* Immediate Data Element */
807 
808 typedef struct _I2O_SGE_IMMEDIATE_DATA_ELEMENT {
809    I2O_FLAGS_COUNT	       FlagsCount;
810 } I2O_SGE_IMMEDIATE_DATA_ELEMENT, *PI2O_SGE_IMMEDIATE_DATA_ELEMENT;
811 
812 /* Immediate Data with Context Element */
813 
814 typedef struct _I2O_SGE_IMMEDIATE_DATA_CONTEXT_ELEMENT {
815    I2O_FLAGS_COUNT	       FlagsCount;
816    U32			       BufferContext;
817 } I2O_SGE_IMMEDIATE_DATA_CONTEXT_ELEMENT, *PI2O_SGE_IMMEDIATE_DATA_CONTEXT_ELEMENT;
818 
819 /* Long Transaction Parameters Element */
820 
821 typedef struct _I2O_SGE_LONG_TRANSACTION_ELEMENT {
822 #if (defined(__BORLANDC__))
823    U32			       LongElementLength;
824 #else
825    BF			       LongElementLength:I2O_SG_COUNT_SZ;
826    BF			       Flags:I2O_SG_FLAGS_SZ;
827 #endif
828    U32			       BufferContext;
829 } I2O_SGE_LONG_TRANSACTION_ELEMENT, *PI2O_SGE_LONG_TRANSACTION_ELEMENT;
830 
831 /* Page List Scatter-Gather Element */
832 
833 typedef struct _I2O_SGE_PAGE_ELEMENT {
834    I2O_FLAGS_COUNT	       FlagsCount;
835    U32			       PhysicalAddress[1];
836 } I2O_SGE_PAGE_ELEMENT , *PI2O_SGE_PAGE_ELEMENT ;
837 
838 /* Page List with Context Scatter-Gather Element */
839 
840 typedef struct _I2O_SGE_PAGE_CONTEXT_ELEMENT {
841    I2O_FLAGS_COUNT	       FlagsCount;
842    U32			       BufferContext[1];
843    U32			       PhysicalAddress[1];
844 } I2O_SGE_PAGE_CONTEXT_ELEMENT, *PI2O_SGE_PAGE_CONTEXT_ELEMENT;
845 
846 /* SGL Attribute Element */
847 
848 typedef struct _I2O_SGE_SGL_ATTRIBUTES_ELEMENT {
849    U16			       SglAttributeFlags;
850    U8			       ElementLength;
851    U8			       Flags;
852    U32			       PageFrameSize;
853 } I2O_SGE_SGL_ATTRIBUTES_ELEMENT, *PI2O_SGE_SGL_ATTRIBUTES_ELEMENT;
854 
855 /* Short Transaction Parameters Element */
856 
857 typedef struct _I2O_SGE_SHORT_TRANSACTION_ELEMENT {
858    U16			       ClassFields;
859    U8			       ElementLength;
860    U8			       Flags;
861    U32			       BufferContext;
862 } I2O_SGE_SHORT_TRANSACTION_ELEMENT, *PI2O_SGE_SHORT_TRANSACTION_ELEMENT;
863 
864 /* Simple Addressing Scatter-Gather Element */
865 
866 typedef struct _I2O_SGE_SIMPLE_ELEMENT {
867    I2O_FLAGS_COUNT	       FlagsCount;
868    U32			       PhysicalAddress;
869 } I2O_SGE_SIMPLE_ELEMENT, *PI2O_SGE_SIMPLE_ELEMENT;
870 
871 /* Simple Addressing with Context Scatter-Gather Element */
872 
873 typedef struct _I2O_SGE_SIMPLE_CONTEXT_ELEMENT {
874    I2O_FLAGS_COUNT	       FlagsCount;
875    U32			       BufferContext[1];
876    U32			       PhysicalAddress;
877 } I2O_SGE_SIMPLE_CONTEXT_ELEMENT, *PI2O_SGE_SIMPLE_CONTEXT_ELEMENT;
878 
879 /* Transport Detail Element */
880 
881 typedef struct _I2O_SGE_TRANSPORT_ELEMENT {
882 #if (defined(__BORLANDC__))
883    U32			       LongElementLength;
884 #else
885    BF			       LongElementLength:I2O_SG_COUNT_SZ;
886    BF			       Flags:I2O_SG_FLAGS_SZ;
887 #endif
888 } I2O_SGE_TRANSPORT_ELEMENT, *PI2O_SGE_TRANSPORT_ELEMENT;
889 
890 typedef struct _I2O_SG_ELEMENT {
891    union {
892        /* Bit Bucket Element */
893        I2O_SGE_BIT_BUCKET_ELEMENT	   BitBucket;
894 
895        /* Chain Addressing Element */
896        I2O_SGE_CHAIN_ELEMENT		   Chain;
897 
898        /* Chain Addressing with Context Element */
899        I2O_SGE_CHAIN_CONTEXT_ELEMENT	   ChainContext;
900 
901        /* Ignore Scatter-Gather Element */
902        I2O_SGE_IGNORE_ELEMENT		   Ignore;
903 
904        /* Immediate Data Element */
905        I2O_SGE_IMMEDIATE_DATA_ELEMENT	   ImmediateData;
906 
907        /* Immediate Data with Context Element */
908        I2O_SGE_IMMEDIATE_DATA_CONTEXT_ELEMENT  ImmediateDataContext;
909 
910        /* Long Transaction Parameters Element */
911        I2O_SGE_LONG_TRANSACTION_ELEMENT	   LongTransaction;
912 
913        /* Page List Element */
914        I2O_SGE_PAGE_ELEMENT		   Page;
915 
916        /* Page List with Context Element */
917        I2O_SGE_PAGE_CONTEXT_ELEMENT	   PageContext;
918 
919        /* SGL Attribute Element */
920        I2O_SGE_SGL_ATTRIBUTES_ELEMENT	   SGLAttribute;
921 
922        /* Short Transaction Parameters Element */
923        I2O_SGE_SHORT_TRANSACTION_ELEMENT   ShortTransaction;
924 
925        /* Simple Addressing Element */
926        /* (variable, as with others, use '2' to avoid gcc warning) */
927        I2O_SGE_SIMPLE_ELEMENT		   Simple[2];
928 
929        /* Simple Addressing with Context Element */
930        I2O_SGE_SIMPLE_CONTEXT_ELEMENT	   SimpleContext[1];
931 
932        /* Transport Detail Element */
933        I2O_SGE_TRANSPORT_ELEMENT	   Transport;
934 #if (defined(sun) && defined(u))
935 /* there is a macro defined in Solaris sys/user.h for u, rename this to uSG */
936    } uSG ;
937 #else
938    } u ;
939 #endif
940 } I2O_SG_ELEMENT, *PI2O_SG_ELEMENT;
941 
942 /****************************************************************************/
943 /*  Basic Parameter Group Access */
944 /****************************************************************************/
945 
946 /* Operation Function Numbers */
947 
948 #define	  I2O_PARAMS_OPERATION_FIELD_GET	       0x0001
949 #define	  I2O_PARAMS_OPERATION_LIST_GET		       0x0002
950 #define	  I2O_PARAMS_OPERATION_MORE_GET		       0x0003
951 #define	  I2O_PARAMS_OPERATION_SIZE_GET		       0x0004
952 #define	  I2O_PARAMS_OPERATION_TABLE_GET	       0x0005
953 #define	  I2O_PARAMS_OPERATION_FIELD_SET	       0x0006
954 #define	  I2O_PARAMS_OPERATION_LIST_SET		       0x0007
955 #define	  I2O_PARAMS_OPERATION_ROW_ADD		       0x0008
956 #define	  I2O_PARAMS_OPERATION_ROW_DELETE	       0x0009
957 #define	  I2O_PARAMS_OPERATION_TABLE_CLEAR	       0x000A
958 
959 /* Operations List Header */
960 
961 typedef struct _I2O_PARAM_OPERATIONS_LIST_HEADER {
962    U16			       OperationCount;
963    U16			       Reserved;
964 } I2O_PARAM_OPERATIONS_LIST_HEADER, *PI2O_PARAM_OPERATIONS_LIST_HEADER;
965 
966 /* Results List Header */
967 
968 typedef struct _I2O_PARAM_RESULTS_LIST_HEADER {
969    U16			       ResultCount;
970    U16			       Reserved;
971 } I2O_PARAM_RESULTS_LIST_HEADER, *PI2O_PARAM_RESULTS_LIST_HEADER;
972 
973 /* Read Operation Result Block Template Structure */
974 
975 typedef struct _I2O_PARAM_READ_OPERATION_RESULT {
976    U16			       BlockSize;
977    U8			       BlockStatus;
978    U8			       ErrorInfoSize;
979    /*			       Operations Results	   */
980    /*			       Pad (if any)		   */
981    /*			       ErrorInformation (if any)   */
982 } I2O_PARAM_READ_OPERATION_RESULT, *PI2O_PARAM_READ_OPERATION_RESULT;
983 
984 typedef struct _I2O_TABLE_READ_OPERATION_RESULT {
985    U16			       BlockSize;
986    U8			       BlockStatus;
987    U8			       ErrorInfoSize;
988    U16			       RowCount;
989    U16			       MoreFlag;
990    /*			       Operations Results	   */
991    /*			       Pad (if any)		   */
992    /*			       ErrorInformation (if any)   */
993 } I2O_TABLE_READ_OPERATION_RESULT, *PI2O_TABLE_READ_OPERATION_RESULT;
994 
995 /* Error Information Template Structure */
996 
997 typedef struct _I2O_PARAM_ERROR_INFO_TEMPLATE {
998    U16			       OperationCode;
999    U16			       GroupNumber;
1000    U16			       FieldIdx;
1001    U8			       AdditionalStatus;
1002    U8			       NumberKeys;
1003    /*			       List of Key Values (variable)   */
1004    /*			       Pad (if any)		       */
1005 } I2O_PARAM_ERROR_INFO_TEMPLATE, *PI2O_PARAM_ERROR_INFO_TEMPLATE;
1006 
1007 /* Operation Template for Specific Fields */
1008 
1009 typedef struct _I2O_PARAM_OPERATION_SPECIFIC_TEMPLATE {
1010    U16			       Operation;
1011    U16			       GroupNumber;
1012    U16			       FieldCount;
1013    U16			       FieldIdx[1];
1014    /*			       Pad (if any)		       */
1015 } I2O_PARAM_OPERATION_SPECIFIC_TEMPLATE, *PI2O_PARAM_OPERATION_SPECIFIC_TEMPLATE;
1016 
1017 /* Operation Template for All Fields */
1018 
1019 typedef struct _I2O_PARAM_OPERATION_ALL_TEMPLATE {
1020    U16			       Operation;
1021    U16			       GroupNumber;
1022    U16			       FieldCount;
1023    /*			       Pad (if any)		       */
1024 } I2O_PARAM_OPERATION_ALL_TEMPLATE, *PI2O_PARAM_OPERATION_ALL_TEMPLATE;
1025 
1026 /* Operation Template for All List Fields */
1027 
1028 typedef struct _I2O_PARAM_OPERATION_ALL_LIST_TEMPLATE {
1029    U16			       Operation;
1030    U16			       GroupNumber;
1031    U16			       FieldCount;
1032    U16			       KeyCount;
1033    U8			       KeyValue;
1034    /*			       Pad (if any)		       */
1035 } I2O_PARAM_OPERATION_ALL_LIST_TEMPLATE, *PI2O_PARAM_OPERATION_ALL_LIST_TEMPLATE;
1036 
1037 /* Modify Operation Result Block Template Structure */
1038 
1039 typedef struct _I2O_PARAM_MODIFY_OPERATION_RESULT {
1040    U16			       BlockSize;
1041    U8			       BlockStatus;
1042    U8			       ErrorInfoSize;
1043    /*			       ErrorInformation (if any)   */
1044 } I2O_PARAM_MODIFY_OPERATION_RESULT, *PI2O_PARAM_MODIFY_OPERATION_RESULT;
1045 
1046 /* Operation Template for Row Delete  */
1047 
1048 typedef struct _I2O_PARAM_OPERATION_ROW_DELETE_TEMPLATE {
1049    U16			       Operation;
1050    U16			       GroupNumber;
1051    U16			       RowCount;
1052    U8			       KeyValue;
1053 } I2O_PARAM_OPERATION_ROW_DELETE_TEMPLATE, *PI2O_PARAM_OPERATION_ROW_DELETE_TEMPLATE;
1054 
1055 /* Operation Template for Table Clear  */
1056 
1057 typedef struct _I2O_PARAM_OPERATION_TABLE_CLEAR_TEMPLATE {
1058    U16			       Operation;
1059    U16			       GroupNumber;
1060 } I2O_PARAM_OPERATION_TABLE_CLEAR_TEMPLATE, *PI2O_PARAM_OPERATION_TABLE_CLEAR_TEMPLATE;
1061 
1062 /* Status codes and Error Information for Parameter functions */
1063 
1064 #define	  I2O_PARAMS_STATUS_SUCCESS		   0x00
1065 #define	  I2O_PARAMS_STATUS_BAD_KEY_ABORT	   0x01
1066 #define	  I2O_PARAMS_STATUS_BAD_KEY_CONTINUE	   0x02
1067 #define	  I2O_PARAMS_STATUS_BUFFER_FULL		   0x03
1068 #define	  I2O_PARAMS_STATUS_BUFFER_TOO_SMALL	   0x04
1069 #define	  I2O_PARAMS_STATUS_FIELD_UNREADABLE	   0x05
1070 #define	  I2O_PARAMS_STATUS_FIELD_UNWRITEABLE	   0x06
1071 #define	  I2O_PARAMS_STATUS_INSUFFICIENT_FIELDS	   0x07
1072 #define	  I2O_PARAMS_STATUS_INVALID_GROUP_ID	   0x08
1073 #define	  I2O_PARAMS_STATUS_INVALID_OPERATION	   0x09
1074 #define	  I2O_PARAMS_STATUS_NO_KEY_FIELD	   0x0A
1075 #define	  I2O_PARAMS_STATUS_NO_SUCH_FIELD	   0x0B
1076 #define	  I2O_PARAMS_STATUS_NON_DYNAMIC_GROUP	   0x0C
1077 #define	  I2O_PARAMS_STATUS_OPERATION_ERROR	   0x0D
1078 #define	  I2O_PARAMS_STATUS_SCALAR_ERROR	   0x0E
1079 #define	  I2O_PARAMS_STATUS_TABLE_ERROR		   0x0F
1080 #define	  I2O_PARAMS_STATUS_WRONG_GROUP_TYPE	   0x10
1081 
1082 
1083 /****************************************************************************/
1084 /* GROUP Parameter Groups */
1085 /****************************************************************************/
1086 
1087 /* GROUP Configuration and Operating Structures and Defines */
1088 
1089 /* Groups Numbers */
1090 
1091 #define	   I2O_UTIL_PARAMS_DESCRIPTOR_GROUP_NO		0xF000
1092 #define	   I2O_UTIL_PHYSICAL_DEVICE_TABLE_GROUP_NO	0xF001
1093 #define	   I2O_UTIL_CLAIMED_TABLE_GROUP_NO		0xF002
1094 #define	   I2O_UTIL_USER_TABLE_GROUP_NO			0xF003
1095 #define	   I2O_UTIL_PRIVATE_MESSAGE_EXTENSIONS_GROUP_NO 0xF005
1096 #define	   I2O_UTIL_AUTHORIZED_USER_TABLE_GROUP_NO	0xF006
1097 #define	   I2O_UTIL_DEVICE_IDENTITY_GROUP_NO		0xF100
1098 #define	   I2O_UTIL_DDM_IDENTITY_GROUP_NO		0xF101
1099 #define	   I2O_UTIL_USER_INFORMATION_GROUP_NO		0xF102
1100 #define	   I2O_UTIL_SGL_OPERATING_LIMITS_GROUP_NO	0xF103
1101 #define	   I2O_UTIL_SENSORS_GROUP_NO			0xF200
1102 
1103 /* UTIL Group F000h - GROUP DESCRIPTORS Parameter Group */
1104 
1105 #define	   I2O_UTIL_GROUP_PROPERTIES_GROUP_TABLE       0x01
1106 #define	   I2O_UTIL_GROUP_PROPERTIES_ROW_ADDITION      0x02
1107 #define	   I2O_UTIL_GROUP_PROPERTIES_ROW_DELETION      0x04
1108 #define	   I2O_UTIL_GROUP_PROPERTIES_CLEAR_OPERATION   0x08
1109 
1110 typedef struct _I2O_UTIL_GROUP_DESCRIPTOR_TABLE {
1111    U16			       GroupNumber;
1112    U16			       FieldCount;
1113    U16			       RowCount;
1114    U8			       Properties;
1115    U8			       reserved;
1116 } I2O_UTIL_GROUP_DESCRIPTOR_TABLE, *PI2O_UTIL_GROUP_DESCRIPTOR_TABLE;
1117 
1118 /* UTIL Group F001h - Physical Device Table Parameter Group */
1119 
1120 typedef struct _I2O_UTIL_PHYSICAL_DEVICE_TABLE {
1121    U32			       AdapterID;
1122 } I2O_UTIL_PHYSICAL_DEVICE_TABLE, *PI2O_UTIL_PHYSICAL_DEVICE_TABLE;
1123 
1124 /* UTIL Group F002h - Claimed Table Parameter Group */
1125 
1126 typedef struct _I2O_UTIL_CLAIMED_TABLE {
1127    U16			       ClaimedTID;
1128 } I2O_UTIL_CLAIMED_TABLE, *PI2O_UTIL_CLAIMED_TABLE;
1129 
1130 /* UTIL Group F003h - User Table Parameter Group */
1131 
1132 typedef struct _I2O_UTIL_USER_TABLE {
1133    U16			       Instance;
1134    U16			       UserTID;
1135    U8			       ClaimType;
1136    U8			       reserved1;
1137    U16			       reserved2;
1138 } I2O_UTIL_USER_TABLE, *PI2O_UTIL_USER_TABLE;
1139 
1140 /* UTIL Group F005h - Private Message Extensions Parameter Group */
1141 
1142 typedef struct _I2O_UTIL_PRIVATE_MESSAGE_EXTENSIONS_TABLE {
1143    U16			       ExtInstance;
1144    U16			       OrganizationID;
1145    U16			       XFunctionCode;
1146 } I2O_UTIL_PRIVATE_MESSAGE_EXTENSIONS_TABLE, *PI2O_UTIL_PRIVATE_MESSAGE_EXTENSIONS_TABLE;
1147 
1148 /* UTIL Group F006h - Authorized User Table Parameter Group */
1149 
1150 typedef struct _I2O_UTIL_AUTHORIZED_USER_TABLE {
1151    U16			       AlternateTID;
1152 } I2O_UTIL_AUTHORIZED_USER_TABLE, *PI2O_UTIL_AUTHORIZED_USER_TABLE;
1153 
1154 /* UTIL Group F100h - Device Identity Parameter Group */
1155 
1156 typedef struct _I2O_UTIL_DEVICE_IDENTITY_SCALAR {
1157    U32			       ClassID;
1158    U16			       OwnerTID;
1159    U16			       ParentTID;
1160    U8			       VendorInfo[I2O_DEVID_VENDOR_INFO_SZ];
1161    U8			       ProductInfo[I2O_DEVID_PRODUCT_INFO_SZ];
1162    U8			       Description[I2O_DEVID_DESCRIPTION_SZ];
1163    U8			       ProductRevLevel[I2O_DEVID_REV_LEVEL_SZ];
1164    U8			       SNFormat;
1165    U8			       SerialNumber[I2O_MAX_SERIAL_NUMBER_SZ];
1166 } I2O_UTIL_DEVICE_IDENTITY_SCALAR, *PI2O_UTIL_DEVICE_IDENTITY_SCALAR;
1167 
1168 /* UTIL Group F101h - DDM Identity Parameter Group */
1169 
1170 typedef struct _I2O_UTIL_DDM_IDENTITY_SCALAR {
1171    U16			       DdmTID;
1172    U8			       ModuleName[I2O_MODULE_NAME_SZ];
1173    U8			       ModuleRevLevel[I2O_DEVID_REV_LEVEL_SZ];
1174    U8			       SNFormat;
1175    U8			       SerialNumber[I2O_MAX_SERIAL_NUMBER_SZ];
1176 } I2O_UTIL_DDM_IDENTITY_SCALAR, *PI2O_UTIL_DDM_IDENTITY_SCALAR;
1177 
1178 /* UTIL Group F102h - User Information Parameter Group */
1179 
1180 #define	   I2O_USER_DEVICE_NAME_SZ		       64
1181 #define	   I2O_USER_SERVICE_NAME_SZ		       64
1182 #define	   I2O_USER_PHYSICAL_LOCATION_SZ	       64
1183 
1184 typedef struct _I2O_UTIL_USER_INFORMATION_SCALAR {
1185    U8			       DeviceName[I2O_USER_DEVICE_NAME_SZ];
1186    U8			       ServiceName[I2O_USER_SERVICE_NAME_SZ];
1187    U8			       PhysicalLocation[I2O_USER_PHYSICAL_LOCATION_SZ];
1188    U32			       InstanceNumber;
1189 } I2O_UTIL_USER_INFORMATION_SCALAR, *PI2O_UTIL_USER_INFORMATION_SCALAR;
1190 
1191 /* UTIL Group F103h - SGL Operating Limits Parameter Group */
1192 
1193 typedef struct _I2O_UTIL_SGL_OPERATING_LIMITS_SCALAR {
1194    U32			       SglChainSize;
1195    U32			       SglChainSizeMax;
1196    U32			       SglChainSizeTarget;
1197    U16			       SglFragCount;
1198    U16			       SglFragCountMax;
1199    U16			       SglFragCountTarget;
1200 } I2O_UTIL_SGL_OPERATING_LIMITS_SCALAR, *PI2O_UTIL_SGL_OPERATING_LIMITS_SCALAR;
1201 
1202 /* UTIL Group F200h - Sensors Parameter Group */
1203 
1204 #define	   I2O_SENSOR_COMPONENT_OTHER		       0x00
1205 #define	   I2O_SENSOR_COMPONENT_PLANAR_LOGIC_BOARD     0x01
1206 #define	   I2O_SENSOR_COMPONENT_CPU		       0x02
1207 #define	   I2O_SENSOR_COMPONENT_CHASSIS		       0x03
1208 #define	   I2O_SENSOR_COMPONENT_POWER_SUPPLY	       0x04
1209 #define	   I2O_SENSOR_COMPONENT_STORAGE		       0x05
1210 #define	   I2O_SENSOR_COMPONENT_EXTERNAL	       0x06
1211 
1212 #define	   I2O_SENSOR_SENSOR_CLASS_ANALOG	       0x00
1213 #define	   I2O_SENSOR_SENSOR_CLASS_DIGITAL	       0x01
1214 
1215 #define	   I2O_SENSOR_SENSOR_TYPE_OTHER		       0x00
1216 #define	   I2O_SENSOR_SENSOR_TYPE_THERMAL	       0x01
1217 #define	   I2O_SENSOR_SENSOR_TYPE_DC_VOLTAGE	       0x02
1218 #define	   I2O_SENSOR_SENSOR_TYPE_AC_VOLTAGE	       0x03
1219 #define	   I2O_SENSOR_SENSOR_TYPE_DC_CURRENT	       0x04
1220 #define	   I2O_SENSOR_SENSOR_TYPE_AC_CURRENT	       0x05
1221 #define	   I2O_SENSOR_SENSOR_TYPE_DOOR_OPEN	       0x06
1222 #define	   I2O_SENSOR_SENSOR_TYPE_FAN_OPERATIONAL      0x07
1223 
1224 #define	   I2O_SENSOR_SENSOR_STATE_NORMAL	       0x00
1225 #define	   I2O_SENSOR_SENSOR_STATE_ABNORMAL	       0x01
1226 #define	   I2O_SENSOR_SENSOR_STATE_UNKNOWN	       0x02
1227 #define	   I2O_SENSOR_SENSOR_STATE_LOW_CAT	       0x03
1228 #define	   I2O_SENSOR_SENSOR_STATE_LOW		       0x04
1229 #define	   I2O_SENSOR_SENSOR_STATE_LOW_WARNING	       0x05
1230 #define	   I2O_SENSOR_SENSOR_STATE_HIGH_WARNING	       0x06
1231 #define	   I2O_SENSOR_SENSOR_STATE_HIGH		       0x07
1232 #define	   I2O_SENSOR_SENSOR_STATE_HIGH_CAT	       0x08
1233 
1234 #define	   I2O_SENSOR_EVENT_ENABLE_STATE_CHANGE	       0x0001
1235 #define	   I2O_SENSOR_EVENT_ENABLE_LOW_CATASTROPHIC    0x0002
1236 #define	   I2O_SENSOR_EVENT_ENABLE_LOW_READING	       0x0004
1237 #define	   I2O_SENSOR_EVENT_ENABLE_LOW_WARNING	       0x0008
1238 #define	   I2O_SENSOR_EVENT_ENABLE_CHANGE_TO_NORMAL    0x0010
1239 #define	   I2O_SENSOR_EVENT_ENABLE_HIGH_WARNING	       0x0020
1240 #define	   I2O_SENSOR_EVENT_ENABLE_HIGH_READING	       0x0040
1241 #define	   I2O_SENSOR_EVENT_ENABLE_HIGH_CATASTROPHIC   0x0080
1242 
1243 
1244 typedef struct _I2O_UTIL_SENSORS_TABLE {
1245    U16			       SensorInstance;
1246    U8			       Component;
1247    U16			       ComponentInstance;
1248    U8			       SensorClass;
1249    U8			       SensorType;
1250    S8			       ScalingExponent;
1251    S32			       ActualReading;
1252    S32			       MinimumReading;
1253    S32			       Low2LowCatThreshold;
1254    S32			       LowCat2LowThreshold;
1255    S32			       LowWarn2LowThreshold;
1256    S32			       Low2LowWarnThreshold;
1257    S32			       Norm2LowWarnThreshold;
1258    S32			       LowWarn2NormThreshold;
1259    S32			       NominalReading;
1260    S32			       HiWarn2NormThreshold;
1261    S32			       Norm2HiWarnThreshold;
1262    S32			       High2HiWarnThreshold;
1263    S32			       HiWarn2HighThreshold;
1264    S32			       HiCat2HighThreshold;
1265    S32			       Hi2HiCatThreshold;
1266    S32			       MaximumReading;
1267    U8			       SensorState;
1268    U16			       EventEnable;
1269 } I2O_UTIL_SENSORS_TABLE, *PI2O_UTIL_SENSORS_TABLE;
1270 
1271 
1272 PRAGMA_PACK_POP
1273 
1274 PRAGMA_ALIGN_POP
1275 
1276 #endif	  /* I2O_MESSAGE_HDR */
1277