xref: /illumos-gate/usr/src/uts/common/sys/fibre-channel/fca/qlc/exioct.h (revision d656abb5804319b33c85955a73ee450ef7ff9739)
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
21 
22 /* Copyright 2008 QLogic Corporation */
23 
24 /*
25  * File Name: exioct.h
26  *
27  * San/Device Management Ioctl Header
28  * File is created to adhere to Solaris requirement using 8-space tabs.
29  *
30  * !!!!! PLEASE DO NOT REMOVE THE TABS !!!!!
31  * !!!!! PLEASE NO SINGLE LINE COMMENTS: // !!!!!
32  * !!!!! PLEASE NO MORE THAN 80 CHARS PER LINE !!!!!
33  *
34  * ***********************************************************************
35  * *                                                                    **
36  * *                            NOTICE                                  **
37  * *            COPYRIGHT (C) 2000-2008 QLOGIC CORPORATION              **
38  * *                    ALL RIGHTS RESERVED                             **
39  * *                                                                    **
40  * ***********************************************************************
41  */
42 
43 #ifndef	_EXIOCT_H
44 #define	_EXIOCT_H
45 
46 
47 #ifdef	__cplusplus
48 extern "C" {
49 #endif
50 
51 #include <exioctso.h>
52 
53 /*
54  * NOTE: the following version defines must be updated each time the
55  *	 changes made may affect the backward compatibility of the
56  *	 input/output relations of the SDM IOCTL functions.
57  */
58 #define	EXT_VERSION				5
59 
60 /*
61  * OS independent General definitions
62  */
63 #define	EXT_DEF_SIGNATURE_SIZE			8
64 #define	EXT_DEF_WWN_NAME_SIZE			8
65 #define	EXT_DEF_WWP_NAME_SIZE			8
66 #define	EXT_DEF_SERIAL_NUM_SIZE			4
67 #define	EXT_DEF_PORTID_SIZE			4
68 #define	EXT_DEF_PORTID_SIZE_ACTUAL		3
69 #define	EXT_DEF_MAX_STR_SIZE			128
70 #define	EXT_DEF_SCSI_PASSTHRU_CDB_LENGTH	12
71 
72 #define	EXT_DEF_ADDR_MODE_32			1
73 #define	EXT_DEF_ADDR_MODE_64			2
74 
75 /*
76  * ***********************************************************************
77  * OS dependent General configuration defines
78  * ***********************************************************************
79  */
80 #define	EXT_DEF_MAX_HBA		EXT_DEF_MAX_HBA_OS
81 #define	EXT_DEF_MAX_BUS		EXT_DEF_MAX_BUS_OS
82 #define	EXT_DEF_MAX_TARGET	EXT_DEF_MAX_TARGET_OS
83 #define	EXT_DEF_MAX_LUN		EXT_DEF_MAX_LUN_OS
84 
85 /*
86  * ***********************************************************************
87  * Common header struct definitions for San/Device Mgmt
88  * ***********************************************************************
89  */
90 typedef struct {
91 	UINT64	Signature;			/* 8 chars string */
92 	UINT64	RequestAdr;			/* 8  */
93 	UINT64	ResponseAdr;			/* 8  */
94 	UINT64	VendorSpecificData;		/* 8 chars string */
95 	UINT32	Status;				/* 4  */
96 	UINT32	DetailStatus;			/* 4  */
97 	UINT32	Reserved1;			/* 4  */
98 	UINT32	RequestLen;			/* 4  */
99 	UINT32	ResponseLen;			/* 4  */
100 	UINT16	AddrMode;			/* 2  */
101 	UINT16	Version;			/* 2  */
102 	UINT16	SubCode;			/* 2  */
103 	UINT16	Instance;			/* 2  */
104 	UINT16	HbaSelect;			/* 2  */
105 	UINT16	VendorSpecificStatus[11];	/* 22 */
106 } EXT_IOCTL, *PEXT_IOCTL;			/* size = 84 / 0x54 */
107 
108 typedef union _ext_signature {
109 	UINT64	Signature;
110 	char	bytes[EXT_DEF_SIGNATURE_SIZE];
111 } ext_sig_t;
112 
113 /*
114  * Addressing mode used by the user application
115  */
116 #define	EXT_ADDR_MODE	EXT_ADDR_MODE_OS
117 
118 /*
119  * Status.  These macros are being used for setting Status field in
120  * EXT_IOCTL structure.
121  */
122 #define	EXT_STATUS_OK			0
123 #define	EXT_STATUS_ERR			1
124 #define	EXT_STATUS_BUSY			2
125 #define	EXT_STATUS_PENDING		3
126 #define	EXT_STATUS_SUSPENDED		4
127 #define	EXT_STATUS_RETRY_PENDING	5
128 #define	EXT_STATUS_INVALID_PARAM	6
129 #define	EXT_STATUS_DATA_OVERRUN		7
130 #define	EXT_STATUS_DATA_UNDERRUN	8
131 #define	EXT_STATUS_DEV_NOT_FOUND	9
132 #define	EXT_STATUS_COPY_ERR		10
133 #define	EXT_STATUS_MAILBOX		11
134 #define	EXT_STATUS_UNSUPPORTED_SUBCODE	12
135 #define	EXT_STATUS_UNSUPPORTED_VERSION	13
136 #define	EXT_STATUS_MS_NO_RESPONSE	14
137 #define	EXT_STATUS_SCSI_STATUS		15
138 #define	EXT_STATUS_BUFFER_TOO_SMALL	16
139 #define	EXT_STATUS_NO_MEMORY		17
140 #define	EXT_STATUS_UNKNOWN		18
141 #define	EXT_STATUS_UNKNOWN_DSTATUS	19
142 #define	EXT_STATUS_INVALID_REQUEST	20
143 #define	EXT_STATUS_DEVICE_NOT_READY	21
144 #define	EXT_STATUS_DEVICE_OFFLINE	22
145 #define	EXT_STATUS_HBA_NOT_READY	23
146 #define	EXT_STATUS_HBA_QUEUE_FULL	24
147 #define	EXT_STATUS_INVALID_VPINDEX	25
148 
149 /*
150  * Detail Status contains the SCSI bus status codes.
151  */
152 
153 #define	EXT_DSTATUS_GOOD			0x00
154 #define	EXT_DSTATUS_CHECK_CONDITION		0x02
155 #define	EXT_DSTATUS_CONDITION_MET		0x04
156 #define	EXT_DSTATUS_BUSY			0x08
157 #define	EXT_DSTATUS_INTERMEDIATE		0x10
158 #define	EXT_DSTATUS_INTERMEDIATE_COND_MET	0x14
159 #define	EXT_DSTATUS_RESERVATION_CONFLICT	0x18
160 #define	EXT_DSTATUS_COMMAND_TERMINATED		0x22
161 #define	EXT_DSTATUS_QUEUE_FULL			0x28
162 
163 /*
164  * Detail Status contains the needed Response buffer space(bytes)
165  * when Status = EXT_STATUS_BUFFER_TOO_SMALL
166  */
167 
168 
169 /*
170  * Detail Status contains one of the following codes
171  * when Status = EXT_STATUS_INVALID_PARAM or
172  *             = EXT_STATUS_DEV_NOT_FOUND
173  */
174 #define	EXT_DSTATUS_NOADNL_INFO			0x00
175 #define	EXT_DSTATUS_HBA_INST			0x01
176 #define	EXT_DSTATUS_TARGET			0x02
177 #define	EXT_DSTATUS_LUN				0x03
178 #define	EXT_DSTATUS_REQUEST_LEN			0x04
179 #define	EXT_DSTATUS_PATH_INDEX			0x05
180 
181 /*
182  * Currently supported DeviceControl / ioctl command codes
183  */
184 #define	EXT_CC_QUERY			EXT_CC_QUERY_OS
185 #define	EXT_CC_SEND_FCCT_PASSTHRU	EXT_CC_SEND_FCCT_PASSTHRU_OS
186 #define	EXT_CC_REG_AEN			EXT_CC_REG_AEN_OS
187 #define	EXT_CC_GET_AEN			EXT_CC_GET_AEN_OS
188 #define	EXT_CC_SEND_ELS_RNID		EXT_CC_SEND_ELS_RNID_OS
189 #define	EXT_CC_SEND_SCSI_PASSTHRU	EXT_CC_SCSI_PASSTHRU_OS
190 #define	EXT_CC_READ_HOST_PARAMS		EXT_CC_READ_HOST_PARAMS_OS
191 #define	EXT_CC_READ_RISC_PARAMS		EXT_CC_READ_RISC_PARAMS_OS
192 #define	EXT_CC_UPDATE_HOST_PARAMS	EXT_CC_UPDATE_HOST_PARAMS_OS
193 #define	EXT_CC_UPDATE_RISC_PARAMS	EXT_CC_UPDATE_RISC_PARAMS_OS
194 #define	EXT_CC_READ_NVRAM		EXT_CC_READ_NVRAM_OS
195 #define	EXT_CC_UPDATE_NVRAM		EXT_CC_UPDATE_NVRAM_OS
196 #define	EXT_CC_HOST_IDX			EXT_CC_HOST_IDX_OS
197 #define	EXT_CC_LOOPBACK			EXT_CC_LOOPBACK_OS
198 #define	EXT_CC_READ_OPTION_ROM		EXT_CC_READ_OPTION_ROM_OS
199 #define	EXT_CC_READ_OPTION_ROM_EX	EXT_CC_READ_OPTION_ROM_EX_OS
200 #define	EXT_CC_UPDATE_OPTION_ROM	EXT_CC_UPDATE_OPTION_ROM_OS
201 #define	EXT_CC_UPDATE_OPTION_ROM_EX	EXT_CC_UPDATE_OPTION_ROM_EX_OS
202 #define	EXT_CC_GET_VPD			EXT_CC_GET_VPD_OS
203 #define	EXT_CC_SET_VPD			EXT_CC_SET_VPD_OS
204 #define	EXT_CC_GET_FCACHE		EXT_CC_GET_FCACHE_OS
205 #define	EXT_CC_GET_FCACHE_EX		EXT_CC_GET_FCACHE_EX_OS
206 #define	EXT_CC_HOST_DRVNAME		EXT_CC_HOST_DRVNAME_OS
207 #define	EXT_CC_GET_SFP_DATA		EXT_CC_GET_SFP_DATA_OS
208 #define	EXT_CC_WWPN_TO_SCSIADDR		EXT_CC_WWPN_TO_SCSIADDR_OS
209 #define	EXT_CC_PORT_PARAM		EXT_CC_PORT_PARAM_OS
210 #define	EXT_CC_GET_PCI_DATA		EXT_CC_GET_PCI_DATA_OS
211 #define	EXT_CC_GET_FWEXTTRACE		EXT_CC_GET_FWEXTTRACE_OS
212 #define	EXT_CC_GET_FWFCETRACE		EXT_CC_GET_FWFCETRACE_OS
213 #define	EXT_CC_GET_VP_CNT_ID		EXT_CC_GET_VP_CNT_ID_OS
214 #define	EXT_CC_VPORT_CMD		EXT_CC_VPORT_CMD_OS
215 
216 /*
217  * HBA port operations
218  */
219 #define	EXT_CC_GET_DATA		EXT_CC_GET_DATA_OS
220 #define	EXT_CC_SET_DATA		EXT_CC_SET_DATA_OS
221 
222 /*
223  * The following DeviceControl / ioctl command codes currently are not
224  * supported.
225  */
226 #define	EXT_CC_SEND_ELS_RTIN	EXT_CC_SEND_ELS_RTIN_OS
227 
228 
229 /*
230  * ***********************************************************************
231  * EXT_IOCTL SubCode definition.
232  * These macros are being used for setting SubCode field in EXT_IOCTL
233  * structure.
234  * ***********************************************************************
235  */
236 
237 /*
238  * Query.
239  * Uses with EXT_QUERY as the ioctl code.
240  */
241 #define	EXT_SC_QUERY_HBA_NODE	1
242 #define	EXT_SC_QUERY_HBA_PORT	2
243 #define	EXT_SC_QUERY_DISC_PORT	3
244 #define	EXT_SC_QUERY_DISC_TGT	4
245 #define	EXT_SC_QUERY_DISC_LUN	5	/* Currently Not Supported */
246 #define	EXT_SC_QUERY_DRIVER	6
247 #define	EXT_SC_QUERY_FW		7
248 #define	EXT_SC_QUERY_CHIP	8
249 
250 /*
251  * Get.
252  * Uses with EXT_GET_DATA as the ioctl code
253  */
254 /* 1 - 99 Common */
255 #define	EXT_SC_GET_SCSI_ADDR		1	/* Currently Not Supported */
256 #define	EXT_SC_GET_ERR_DETECTIONS	2	/* Currently Not Supported */
257 #define	EXT_SC_GET_STATISTICS		3
258 #define	EXT_SC_GET_BUS_MODE		4	/* Currently Not Supported */
259 #define	EXT_SC_GET_DR_DUMP_BUF		5	/* Currently Not Supported */
260 #define	EXT_SC_GET_RISC_CODE		6
261 #define	EXT_SC_GET_FLASH_RAM		7
262 #define	EXT_SC_GET_BEACON_STATE		8
263 
264 /* 100 - 199 FC_INTF_TYPE */
265 #define	EXT_SC_GET_LINK_STATUS		101	/* Currently Not Supported */
266 #define	EXT_SC_GET_LOOP_ID		102	/* Currently Not Supported */
267 #define	EXT_SC_GET_LUN_BITMASK		103
268 #define	EXT_SC_GET_PORT_DATABASE	104	/* Currently Not Supported */
269 #define	EXT_SC_GET_PORT_DATABASE_MEM	105	/* Currently Not Supported */
270 #define	EXT_SC_GET_PORT_SUMMARY		106
271 #define	EXT_SC_GET_POSITION_MAP		107
272 #define	EXT_SC_GET_RETRY_CNT		108	/* Currently Not Supported */
273 #define	EXT_SC_GET_RNID			109
274 #define	EXT_SC_GET_RTIN			110	/* Currently Not Supported */
275 #define	EXT_SC_GET_FC_LUN_BITMASK	111
276 #define	EXT_SC_GET_FC_STATISTICS	112
277 #define	EXT_SC_GET_FC4_STATISTICS	113
278 #define	EXT_SC_GET_TARGET_ID		114
279 
280 
281 /* 200 - 299 SCSI_INTF_TYPE */
282 #define	EXT_SC_GET_SEL_TIMEOUT		201	/* Currently Not Supported */
283 
284 
285 /*
286  * Set.
287  * Uses with EXT_SET_DATA as the ioctl code
288  */
289 /* 1 - 99 Common */
290 #define	EXT_SC_RST_STATISTICS		3
291 #define	EXT_SC_SET_BUS_MODE		4	/* Currently Not Supported */
292 #define	EXT_SC_SET_DR_DUMP_BUF		5	/* Currently Not Supported */
293 #define	EXT_SC_SET_RISC_CODE		6
294 #define	EXT_SC_SET_FLASH_RAM		7
295 #define	EXT_SC_SET_BEACON_STATE		8
296 
297 /* special types (non snia) */
298 #define	EXT_SC_SET_PARMS		99	/* dpb */
299 
300 /* 100 - 199 FC_INTF_TYPE */
301 #define	EXT_SC_SET_LUN_BITMASK		103
302 #define	EXT_SC_SET_RETRY_CNT		108	/* Currently Not Supported */
303 #define	EXT_SC_SET_RNID			109
304 #define	EXT_SC_SET_RTIN			110	/* Currently Not Supported */
305 #define	EXT_SC_SET_FC_LUN_BITMASK	111
306 #define	EXT_SC_ADD_TARGET_DEVICE	112
307 #define	EXT_SC_SWAP_TARGET_DEVICE	113
308 
309 /* 200 - 299 SCSI_INTF_TYPE */
310 #define	EXT_SC_SET_SEL_TIMEOUT		201	/* Currently Not Supported */
311 
312 /* SCSI passthrough */
313 #define	EXT_SC_SEND_SCSI_PASSTHRU	0
314 #define	EXT_SC_SEND_FC_SCSI_PASSTHRU	1
315 
316 /* NVRAM */
317 #define	EXT_SC_NVRAM_HARDWARE		0	/* Save */
318 #define	EXT_SC_NVRAM_DRIVER		1	/* Driver (Apply) */
319 #define	EXT_SC_NVRAM_ALL		2	/* NVRAM/Driver (Save+Apply) */
320 
321 /*
322  * Vport functions
323  * Used with EXT_CC_VPORT_CMD as the ioctl code.
324  */
325 #define	EXT_VF_SC_VPORT_GETINFO		1
326 
327 /* Read */
328 
329 /* Write */
330 
331 /* Reset */
332 
333 /* Request struct */
334 
335 
336 /*
337  * Response struct
338  */
339 typedef struct _EXT_HBA_NODE {
340 	UINT32	DriverAttr;				/* 4 */
341 	UINT32	FWAttr;					/* 4 */
342 	UINT16	PortCount;				/* 2; 1 */
343 	UINT16	InterfaceType;				/* 2; FC/SCSI */
344 	UINT8	WWNN[EXT_DEF_WWN_NAME_SIZE];		/* 8 */
345 	UINT8	Manufacturer[EXT_DEF_MAX_STR_SIZE];	/* 128; "QLOGIC" */
346 	UINT8	Model[EXT_DEF_MAX_STR_SIZE];		/* 128; "QLA2200" */
347 	UINT8	SerialNum[EXT_DEF_SERIAL_NUM_SIZE];	/* 4;  123  */
348 	UINT8	DriverVersion[EXT_DEF_MAX_STR_SIZE];	/* 128; "7.4.3" */
349 	UINT8	FWVersion[EXT_DEF_MAX_STR_SIZE];	/* 128; "2.1.6" */
350 	UINT8	OptRomVersion[EXT_DEF_MAX_STR_SIZE];	/* 128; "1.44" */
351 	UINT8	Reserved[32];				/* 32 */
352 } EXT_HBA_NODE, *PEXT_HBA_NODE;				/* 696 */
353 
354 /* HBA node query interface type */
355 #define	EXT_DEF_FC_INTF_TYPE			1
356 #define	EXT_DEF_SCSI_INTF_TYPE			2
357 #define	EXT_DEF_VIRTUAL_FC_INTF_TYPE		3
358 
359 typedef struct _EXT_HBA_PORT {
360 	UINT64	Target;				/* 8 */
361 	UINT32	PortSupportedSpeed;		/* 4 */
362 	UINT32	PortSpeed;			/* 4 */
363 	UINT16	Type;				/* 2; Port Type */
364 	UINT16	State;				/* 2; Port State */
365 	UINT16	Mode;				/* 2 */
366 	UINT16	DiscPortCount;			/* 2 */
367 	UINT16	DiscPortNameType;		/* 2; USE_NODE_NAME or */
368 						/* USE_PORT_NAME */
369 	UINT16	DiscTargetCount;		/* 2 */
370 	UINT16	Bus;				/* 2 */
371 	UINT16	Lun;				/* 2 */
372 	UINT8	WWPN[EXT_DEF_WWN_NAME_SIZE];	/* 8 */
373 	UINT8	Id  [EXT_DEF_PORTID_SIZE];	/* 4; 3 bytes valid Port Id. */
374 	UINT8	PortSupportedFC4Types;		/* 1 */
375 	UINT8	PortActiveFC4Types;		/* 1 */
376 	UINT8	FabricName[EXT_DEF_WWN_NAME_SIZE];	/* 8 */
377 	UINT8	sfp_status;			/* 1 */
378 	UINT8	Reserved[9];			/* 9 */
379 } EXT_HBA_PORT, *PEXT_HBA_PORT;			/* 62 */
380 
381 /* FC-4 Instrumentation */
382 typedef struct _EXT_HBA_FC4Statistics {
383 	INT64	InputRequests;			/* 8  */
384 	INT64	OutputRequests;			/* 8  */
385 	INT64	ControlRequests;		/* 8  */
386 	INT64	InputMegabytes;			/* 8  */
387 	INT64	OutputMegabytes;		/* 8  */
388 	UINT64	Reserved[6];			/* 48 */
389 } EXT_HBA_FC4STATISTICS, *PEXT_HBA_FC4STATISTICS;	/* 88 */
390 
391 typedef struct _EXT_LOOPBACK_REQ {
392 	UINT32	TransferCount;
393 	UINT32	IterationCount;
394 	UINT32	BufferAddress;
395 	UINT32	BufferLength;
396 	UINT16	Options;
397 	UINT8	Reserved[18];
398 } EXT_LOOPBACK_REQ, *PEXT_LOOPBACK_REQ;
399 
400 typedef struct _EXT_LOOPBACK_RSP {
401 	UINT64	BufferAddress;
402 	UINT32	BufferLength;
403 	UINT32	IterationCountLastError;
404 	UINT16	CompletionStatus;
405 	UINT16	CrcErrorCount;
406 	UINT16	DisparityErrorCount;
407 	UINT16	FrameLengthErrorCount;
408 	UINT8	CommandSent;
409 	UINT8	Reserved[15];
410 } EXT_LOOPBACK_RSP, *PEXT_LOOPBACK_RSP;
411 
412 /* used with loopback response CommandSent */
413 #define	INT_DEF_LB_LOOPBACK_CMD		0
414 #define	INT_DEF_LB_ECHO_CMD		1
415 
416 /* definition for interpreting CompletionStatus values */
417 #define	EXT_DEF_LB_COMPLETE	0x4000
418 #define	EXT_DEF_LB_PARAM_ERR	0x4006
419 #define	EXT_DEF_LB_LOOP_DOWN	0x400b
420 #define	EXT_DEF_LB_CMD_ERROR	0x400c
421 
422 /* port type */
423 #define	EXT_DEF_INITIATOR_DEV	0x1
424 #define	EXT_DEF_TARGET_DEV	0x2
425 #define	EXT_DEF_TAPE_DEV	0x4
426 #define	EXT_DEF_FABRIC_DEV	0x8
427 
428 
429 /* HBA port state */
430 #define	EXT_DEF_HBA_OK		0
431 #define	EXT_DEF_HBA_SUSPENDED	1
432 #define	EXT_DEF_HBA_LOOP_DOWN	2
433 
434 /* Connection mode */
435 #define	EXT_DEF_UNKNOWN_MODE	0
436 #define	EXT_DEF_P2P_MODE	1
437 #define	EXT_DEF_LOOP_MODE	2
438 #define	EXT_DEF_FL_MODE		3
439 #define	EXT_DEF_N_MODE		4
440 
441 /* Valid name type for Disc. port/target */
442 #define	EXT_DEF_USE_NODE_NAME	1
443 #define	EXT_DEF_USE_PORT_NAME	2
444 
445 /* FC4 type values */
446 #define	EXT_DEF_FC4_TYPE_SCSI	0x1
447 #define	EXT_DEF_FC4_TYPE_IP	0x2
448 #define	EXT_DEF_FC4_TYPE_SCTP	0x4
449 #define	EXT_DEF_FC4_TYPE_VI	0x8
450 
451 /* Port Speed values */
452 #define	EXT_DEF_PORTSPEED_UNKNOWN 	0x0
453 #define	EXT_DEF_PORTSPEED_1GBIT		0x1
454 #define	EXT_DEF_PORTSPEED_2GBIT		0x2
455 #define	EXT_DEF_PORTSPEED_4GBIT		0x4
456 #define	EXT_DEF_PORTSPEED_8GBIT		0x8
457 #define	EXT_DEF_PORTSPEED_10GBIT	0x10
458 #define	EXT_PORTSPEED_NOT_NEGOTIATED	(1<<15)	/* Speed not established */
459 
460 typedef struct _EXT_DISC_PORT {
461 	UINT64	TargetId;		/* 8 */
462 	UINT16	Type;			/* 2; Port Type */
463 	UINT16	Status;			/* 2; Port Status */
464 	UINT16	Bus;			/* 2; n/a for Solaris */
465 	UINT16	LoopID;			/* 2; Loop ID */
466 	UINT8	WWNN[EXT_DEF_WWN_NAME_SIZE];	/* 8 */
467 	UINT8	WWPN[EXT_DEF_WWN_NAME_SIZE];	/* 8 */
468 	UINT8	Id[EXT_DEF_PORTID_SIZE];	/* 4; 3 bytes used big endian */
469 	UINT8	Local;			/* 1; Local or Remote */
470 	UINT8	Reserved[27];		/* 27 */
471 } EXT_DISC_PORT, *PEXT_DISC_PORT;	/* 64 */
472 
473 typedef struct _EXT_DISC_TARGET {
474 	UINT64	TargetId;		/* 8 */
475 	UINT16	Type;			/* 2; Target Type */
476 	UINT16	Status;			/* 2; Target Status */
477 	UINT16	Bus;			/* 2; n/a for Solaris */
478 	UINT16	LunCount;		/* 2; n/a for nt */
479 	UINT16	LoopID;			/* 2; Loop ID */
480 	UINT8	WWNN[EXT_DEF_WWN_NAME_SIZE];	/* 8 */
481 	UINT8	WWPN[EXT_DEF_WWN_NAME_SIZE];	/* 8 */
482 	UINT8	Id  [EXT_DEF_PORTID_SIZE];	/* 4; 3 bytes used big endian */
483 	UINT8	Local;			/* 1; Local or Remote */
484 	UINT8	Reserved[25];		/* 25 */
485 } EXT_DISC_TARGET, *PEXT_DISC_TARGET;	/* 64 */
486 
487 /* The following command is not supported */
488 typedef struct _EXT_DISC_LUN {	/* n/a for nt */
489 	UINT16	Id;		/* 2 */
490 	UINT16	State;		/* 2 */
491 	UINT16	IoCount;	/* 2 */
492 	UINT8	Reserved[30];	/* 30 */
493 } EXT_DISC_LUN, *PEXT_DISC_LUN;	/* 36 */
494 
495 
496 /* SCSI address */
497 typedef struct _EXT_SCSI_ADDR {
498 	UINT64	Target;			/* 8 */
499 	UINT16	Bus;			/* 2 */
500 	UINT16	Lun;			/* 2 */
501 	UINT8	Padding[12];		/* 12 */
502 } EXT_SCSI_ADDR, *PEXT_SCSI_ADDR;	/* 24 */
503 
504 
505 /* Fibre Channel address */
506 typedef struct _EXT_FC_ADDR {
507 	UINT16	Type;					/* 2 */
508 	union {
509 		UINT8	WWNN[EXT_DEF_WWN_NAME_SIZE];	/* 8 */
510 		UINT8	WWPN[EXT_DEF_WWN_NAME_SIZE];	/* 8 */
511 		UINT8	Id[EXT_DEF_PORTID_SIZE];	/* 4 */
512 	} FcAddr;
513 	UINT8	Padding[4];				/* 4 */
514 } EXT_FC_ADDR, *PEXT_FC_ADDR;				/* 14 */
515 
516 #define	EXT_DEF_TYPE_WWNN	1
517 #define	EXT_DEF_TYPE_WWPN	2
518 #define	EXT_DEF_TYPE_PORTID	3
519 #define	EXT_DEF_TYPE_FABRIC	4
520 
521 /* Destination address */
522 typedef struct _EXT_DEST_ADDR {
523 	union {
524 		struct {
525 			UINT64	Target;			/* 8 */
526 			UINT16	Bus;			/* 2 */
527 			UINT8	pad[6];			/* 6 */
528 		} ScsiAddr;
529 		UINT8	WWNN[EXT_DEF_WWN_NAME_SIZE];	/* 8 */
530 		UINT8	WWPN[EXT_DEF_WWN_NAME_SIZE];	/* 8 */
531 		UINT8	Id[EXT_DEF_PORTID_SIZE];	/* 4 */
532 	} DestAddr;
533 	UINT16	DestType;				/* 2 */
534 	UINT16	Lun;					/* 2 */
535 	UINT8	Padding[4];				/* 4 */
536 } EXT_DEST_ADDR, *PEXT_DEST_ADDR;			/* 24 */
537 
538 
539 #define	EXT_DEF_DESTTYPE_WWNN		1
540 #define	EXT_DEF_DESTTYPE_WWPN		2
541 #define	EXT_DEF_DESTTYPE_PORTID		3
542 #define	EXT_DEF_DESTTYPE_FABRIC		4
543 #define	EXT_DEF_DESTTYPE_SCSI		5
544 
545 /* Statistic */
546 typedef struct _EXT_HBA_PORT_STAT {
547 	UINT32	ControllerErrorCount;		/* 4 */
548 	UINT32	DeviceErrorCount;		/* 4 */
549 	UINT32	IoCount;			/* 4 */
550 	UINT32	MBytesCount;			/* 4; MB of data processed */
551 	UINT32	LipResetCount;			/* 4; Total no. of LIP Reset */
552 	UINT32	InterruptCount;			/* 4; Total no. of Interrupts */
553 	UINT32	LinkFailureCount;		/* 4 */
554 	UINT32	LossOfSyncCount;		/* 4 */
555 	UINT32	LossOfSignalsCount;		/* 4 */
556 	UINT32	PrimitiveSeqProtocolErrorCount;	/* 4 */
557 	UINT32	InvalidTransmissionWordCount;	/* 4 */
558 	UINT32	InvalidCRCCount;		/* 4 */
559 	UINT8	Reserved[64];			/* 64 */
560 } EXT_HBA_PORT_STAT, *PEXT_HBA_PORT_STAT;	/* 112 */
561 
562 
563 /* Driver property */
564 typedef struct _EXT_DRIVER {
565 	UINT32	MaxTransferLen;			/* 4 */
566 	UINT32	MaxDataSegments;		/* 4 */
567 	UINT32	Attrib;				/* 4 */
568 	UINT32	InternalFlags[4];		/* 16 */
569 	UINT16	NumOfBus;			/* 2; Port Type */
570 	UINT16	TargetsPerBus;			/* 2; Port Status */
571 	UINT16	LunsPerTarget;			/* 2 */
572 	UINT16	DmaBitAddresses;		/* 2 */
573 	UINT16	IoMapType;			/* 2 */
574 	UINT8	Version[EXT_DEF_MAX_STR_SIZE];	/* 128 */
575 	UINT8	Reserved[32];			/* 32 */
576 } EXT_DRIVER, *PEXT_DRIVER;			/* 198 */
577 
578 
579 /* Firmware property */
580 typedef struct _EXT_FW {
581 	UINT32	Attrib;				/* 4 */
582 	UINT8	Version[EXT_DEF_MAX_STR_SIZE];	/* 128 */
583 	UINT8	Reserved[66];			/* 66 */
584 } EXT_FW, *PEXT_FW;				/* 198 */
585 
586 
587 /* ISP/Chip property */
588 typedef struct _EXT_CHIP {
589 	UINT32	IoAddr;		/* 4 */
590 	UINT32	IoAddrLen;	/* 4 */
591 	UINT32	MemAddr;	/* 4 */
592 	UINT32	MemAddrLen;	/* 4 */
593 	UINT16	VendorId;	/* 2 */
594 	UINT16	DeviceId;	/* 2 */
595 	UINT16	SubVendorId;	/* 2 */
596 	UINT16	SubSystemId;	/* 2 */
597 	UINT16	PciBusNumber;	/* 2 */
598 	UINT16	PciSlotNumber;	/* 2 */
599 	UINT16	ChipType;	/* 2 */
600 	UINT16	InterruptLevel;	/* 2 */
601 	UINT16	OutMbx[8];	/* 16 */
602 	UINT8	Reserved[31];	/* 31 */
603 	UINT8	ChipRevID;	/* 1 */
604 } EXT_CHIP, *PEXT_CHIP;		/* 80 */
605 
606 
607 /* Request Buffer for RNID */
608 typedef struct _EXT_RNID_REQ {
609 	EXT_FC_ADDR	Addr;				/* 14 */
610 	UINT8		DataFormat;			/* 1 */
611 	UINT8		Pad;				/* 1 */
612 	UINT8		OptWWN[EXT_DEF_WWN_NAME_SIZE];	/* 8 */
613 	UINT8		OptPortId[EXT_DEF_PORTID_SIZE];	/* 4 */
614 	UINT8		Reserved[51];			/* 51 */
615 } EXT_RNID_REQ, *PEXT_RNID_REQ;				/* 79 */
616 
617 #define	EXT_DEF_RNID_DFORMAT_NONE	0
618 #define	EXT_DEF_RNID_DFORMAT_TOPO_DISC	0xDF
619 
620 /* Request Buffer for Set RNID */
621 typedef struct _EXT_SET_RNID_REQ {
622 	UINT8	IPVersion[2];		/*  2 */
623 	UINT8	UDPPortNumber[2];	/*  2 */
624 	UINT8	IPAddress[16];		/* 16 */
625 	UINT8	Reserved[64];		/* 64 */
626 } EXT_SET_RNID_REQ, *PEXT_SET_RNID_REQ; /* 84 */
627 
628 /* RNID definition and data struct */
629 #define	SEND_RNID_RSP_SIZE  72
630 
631 typedef struct _RNID_DATA
632 {
633 	UINT32	UnitType;		/* 4 */
634 	UINT32	NumOfAttachedNodes;	/* 4 */
635 	UINT16	TopoDiscFlags;		/* 2 */
636 	UINT16	Reserved;		/* 2 */
637 	UINT8	WWN[16];		/* 16 */
638 	UINT8	PortId[4];		/* 4 */
639 	UINT8	IPVersion[2];		/* 2 */
640 	UINT8	UDPPortNumber[2];	/* 2 */
641 	UINT8	IPAddress[16];		/* 16 */
642 } EXT_RNID_DATA, *PEXT_RNID_DATA;	/* 52 */
643 
644 
645 /* SCSI pass-through */
646 typedef struct _EXT_SCSI_PASSTHRU {
647 	EXT_SCSI_ADDR	TargetAddr;
648 	UINT8		Direction;
649 	UINT8		CdbLength;
650 	UINT8		Cdb[EXT_DEF_SCSI_PASSTHRU_CDB_LENGTH];
651 	UINT8		Reserved[66];
652 	UINT8		SenseData[256];
653 } EXT_SCSI_PASSTHRU, *PEXT_SCSI_PASSTHRU;
654 
655 /* FC SCSI pass-through */
656 typedef struct _EXT_FC_SCSI_PASSTHRU {
657 	EXT_DEST_ADDR	FCScsiAddr;
658 	UINT8		Direction;
659 	UINT8		CdbLength;
660 	UINT8		Cdb[EXT_DEF_SCSI_PASSTHRU_CDB_LENGTH];
661 	UINT8		Reserved[64];
662 	UINT8		SenseData[256];
663 } EXT_FC_SCSI_PASSTHRU, *PEXT_FC_SCSI_PASSTHRU;
664 
665 /* SCSI pass-through direction */
666 #define	EXT_DEF_SCSI_PASSTHRU_DATA_IN		1
667 #define	EXT_DEF_SCSI_PASSTHRU_DATA_OUT		2
668 
669 
670 /* EXT_REG_AEN Request struct */
671 typedef struct _EXT_REG_AEN {
672 	UINT32	Enable;		/* 4; non-0 to enable, 0 to disable. */
673 	UINT8	Reserved[4];	/* 4 */
674 } EXT_REG_AEN, *PEXT_REG_AEN;	/* 8 */
675 
676 /* EXT_GET_AEN Response struct */
677 typedef struct _EXT_ASYNC_EVENT {
678 	UINT32	AsyncEventCode;		/* 4 */
679 	union {
680 		struct {
681 			UINT8 RSCNInfo[EXT_DEF_PORTID_SIZE_ACTUAL]; /* 3 BE */
682 			UINT8 AddrFormat;			/* 1 */
683 			UINT8 Rsvd_1[8];			/* 8 */
684 		} RSCN;
685 
686 		UINT8	Reserved[12];	/* 12 */
687 	} Payload;
688 } EXT_ASYNC_EVENT, *PEXT_ASYNC_EVENT;	/* 16 */
689 
690 
691 /* Asynchronous Event Codes */
692 #define	EXT_DEF_LIP_OCCURRED	0x8010
693 #define	EXT_DEF_LINK_UP		0x8011
694 #define	EXT_DEF_LINK_DOWN	0x8012
695 #define	EXT_DEF_LIP_RESET	0x8013
696 #define	EXT_DEF_RSCN		0x8015
697 #define	EXT_DEF_DEVICE_UPDATE	0x8014
698 
699 /* LED state information */
700 #define	EXT_DEF_GRN_BLINK_OFF	0x00
701 #define	EXT_DEF_GRN_BLINK_ON	0x01
702 
703 typedef struct _EXT_BEACON_CONTROL {
704 	UINT32	State;				/* 4  */
705 	UINT8	Reserved[12];			/* 12 */
706 } EXT_BEACON_CONTROL, *PEXT_BEACON_CONTROL;	/* 16 */
707 
708 /* Required # of entries in the queue buffer allocated. */
709 #define	EXT_DEF_MAX_AEN_QUEUE	EXT_DEF_MAX_AEN_QUEUE_OS
710 
711 /*
712  * LUN BitMask structure definition, array of 8bit bytes,
713  * 1 bit per lun.  When bit == 1, the lun is masked.
714  * Most significant bit of mask[0] is lun 0.
715  * Least significant bit of mask[0] is lun 7.
716  */
717 typedef struct _EXT_LUN_BIT_MASK {
718 #if ((EXT_DEF_MAX_LUN & 0x7) == 0)
719 	UINT8	mask[EXT_DEF_MAX_LUN >> 3];
720 #else
721 	UINT8	mask[(EXT_DEF_MAX_LUN + 8) >> 3 ];
722 #endif
723 } EXT_LUN_BIT_MASK, *PEXT_LUN_BIT_MASK;
724 
725 /* Device type to get for EXT_SC_GET_PORT_SUMMARY */
726 #define	EXT_DEF_GET_KNOWN_DEVICE	0x1
727 #define	EXT_DEF_GET_VISIBLE_DEVICE	0x2
728 #define	EXT_DEF_GET_HIDDEN_DEVICE	0x4
729 #define	EXT_DEF_GET_FABRIC_DEVICE	0x8
730 #define	EXT_DEF_GET_LOOP_DEVICE		0x10
731 
732 /* Each entry in device database */
733 typedef struct _EXT_DEVICEDATAENTRY
734 {
735 	EXT_SCSI_ADDR	TargetAddress;	/* scsi address */
736 	UINT32		DeviceFlags;	/* Flags for device */
737 	UINT16		LoopID;		/* Loop ID */
738 	UINT16		BaseLunNumber;
739 	UINT8		NodeWWN[8];	/* Node World Wide Name for device */
740 	UINT8		PortWWN[8];	/* Port World Wide Name for device */
741 	UINT8		PortID[3];	/* Current PortId for device */
742 	UINT8		ControlFlags;	/* Control flag */
743 	UINT8		Reserved[132];
744 } EXT_DEVICEDATAENTRY, *PEXT_DEVICEDATAENTRY;
745 
746 #define	EXT_DEF_EXTERNAL_LUN_COUNT		2048
747 #define	EXT_DEF_EXTERNAL_LUN_BITMASK_BYTES	(EXT_DEF_EXTERNAL_LUN_COUNT / 8)
748 
749 /* Structure as used in the IOCTL. */
750 
751 typedef struct _EXT_EXTERNAL_LUN_BITMASK_ENTRY
752 {
753 	UINT8	NodeName[EXT_DEF_WWN_NAME_SIZE];
754 	UINT8	PortName[EXT_DEF_WWN_NAME_SIZE];
755 	UINT8	Reserved1[16];		/* Pad to 32-byte header */
756 	UINT8	Bitmask[EXT_DEF_EXTERNAL_LUN_BITMASK_BYTES];
757 } EXT_EXTERNAL_LUN_BITMASK_ENTRY, *PEXT_EXTERNAL_LUN_BITMASK_ENTRY;
758 
759 
760 /* Structure as it is stored in the NT registry */
761 
762 typedef struct _LUN_BITMASK_LIST
763 {
764 	UINT16	Version;	/* Should be LUN_BITMASK_REGISTRY_VERSION */
765 	UINT16	EntryCount;	/* Count of variable entries following */
766 	UINT8	Reserved[28];	/* Pad to 32-byte header */
767 
768 	EXT_EXTERNAL_LUN_BITMASK_ENTRY
769 		BitmaskEntry[1]; /* Var-length data */
770 } EXT_LUN_BITMASK_LIST, *PEXT_LUN_BITMASK_LIST;
771 
772 
773 /* Device database information */
774 typedef struct _EXT_DEVICEDATA
775 {
776 	UINT32	TotalDevices;		/* Set to total number of device */
777 	UINT32	ReturnListEntryCount;	/* Set to number of device entries */
778 					/* returned in list. */
779 
780 	EXT_DEVICEDATAENTRY  EntryList[1]; /* Variable length */
781 } EXT_DEVICEDATA, *PEXT_DEVICEDATA;
782 
783 
784 /* Swap Target Device Data structure */
785 typedef struct _EXT_SWAPTARGETDEVICE
786 {
787 	EXT_DEVICEDATAENTRY	CurrentExistDevice;
788 	EXT_DEVICEDATAENTRY	NewDevice;
789 } EXT_SWAPTARGETDEVICE, *PEXT_SWAPTARGETDEVICE;
790 
791 #define	EXT_DEF_LUN_BITMASK_LIST_MIN_ENTRIES	1
792 #define	EXT_DEF_LUN_BITMASK_LIST_MAX_ENTRIES	256
793 
794 #ifdef _WIN64
795 #define	EXT_DEF_LUN_BITMASK_LIST_HEADER_SIZE	32
796 #else
797 #define	EXT_DEF_LUN_BITMASK_LIST_HEADER_SIZE \
798     offsetof(LUN_BITMASK_LIST_BUFFER, asBitmaskEntry)
799 #endif
800 
801 #define	EXT_DEF_LUN_BITMASK_LIST_MIN_SIZE   \
802 	(EXT_DEF_LUN_BITMASK_LIST_HEADER_SIZE + \
803 	(sizeof (EXT_EXTERNAL_LUN_BITMASK_ENTRY) * \
804 	EXT_DEF_LUN_BITMASK_LIST_MIN_ENTRIES))
805 #define	EXT_DEF_LUN_BITMASK_LIST_MAX_SIZE   \
806 	(EXT_DEF_LUN_BITMASK_LIST_HEADER_SIZE + \
807 	(sizeof (EXT_EXTERNAL_LUN_BITMASK_ENTRY) * \
808 	EXT_DEF_LUN_BITMASK_LIST_MAX_ENTRIES))
809 /*
810  * LUN mask bit manipulation macros
811  *
812  *   P = Pointer to an EXT_LUN_BIT_MASK union.
813  *   L = LUN number.
814  */
815 #define	EXT_IS_LUN_BIT_SET(P, L) \
816 	(((P)->mask[L / 8] & (0x80 >> (L % 8))) ? 1 : 0)
817 
818 #define	EXT_SET_LUN_BIT(P, L) \
819 	((P)->mask[L / 8] |= (0x80 >> (L % 8)))
820 
821 #define	EXT_CLR_LUN_BIT(P, L) \
822 	((P)->mask[L / 8] &= ~(0x80 >> (L % 8)))
823 
824 typedef struct _EXT_PORT_PARAM {
825 	EXT_DEST_ADDR	FCScsiAddr;
826 	UINT16		Mode;
827 	UINT16		Speed;
828 } EXT_PORT_PARAM, *PEXT_PORT_PARAM;
829 
830 #define	EXT_IIDMA_MODE_GET	0
831 #define	EXT_IIDMA_MODE_SET	1
832 
833 /*
834  * Mercury/Menlo
835  */
836 
837 #define	MENLO_RESET_FLAG_ENABLE_DIAG_FW	1
838 
839 typedef struct _MENLO_RESET {
840 	UINT16 Flags;
841 	UINT16 Reserved;
842 } MENLO_RESET, *PMENLO_RESET;
843 
844 typedef struct _MENLO_GET_FW_VERSION {
845 	UINT32 FwVersion;
846 } MENLO_GET_FW_VERSION, *PMENLO_GET_FW_VERSION;
847 
848 #define	MENLO_UPDATE_FW_FLAG_DIAG_FW	0x0008  /* if flag is cleared then */
849 						/* it must be an fw op */
850 typedef struct _MENLO_UPDATE_FW {
851 	unsigned char *pFwDataBytes;
852 	UINT32 TotalByteCount;
853 	UINT16 Flags;
854 	UINT16 Reserved;
855 } MENLO_UPDATE_FW, *PMENLO_UPDATE_FW;
856 
857 #define	CONFIG_PARAM_ID_RESERVED	1
858 #define	CONFIG_PARAM_ID_UIF		2
859 #define	CONFIG_PARAM_ID_FCOE_COS	3
860 #define	CONFIG_PARAM_ID_PAUSE_TYPE	4
861 #define	CONFIG_PARAM_ID_TIMEOUTS	5
862 
863 #define	INFO_DATA_TYPE_CONFIG_LOG_DATA	1	/* Fetch Config Log Data */
864 #define	INFO_DATA_TYPE_LOG_DATA		2	/* Fetch Log Data */
865 #define	INFO_DATA_TYPE_PORT_STATISTICS	3	/* Fetch Port Statistics */
866 #define	INFO_DATA_TYPE_LIF_STATISTICS	4	/* Fetch LIF Statistics */
867 #define	INFO_DATA_TYPE_ASIC_STATISTICS	5	/* Fetch ASIC Statistics */
868 #define	INFO_DATA_TYPE_CONFIG_PARAMETERS 6	/* Fetch Config Parameters */
869 #define	INFO_DATA_TYPE_PANIC_LOG	7	/* Fetch Panic Log */
870 
871 /*
872  * InfoContext defines for INFO_DATA_TYPE_LOG_DATA
873  */
874 #define	IC_LOG_DATA_LOG_ID_DEBUG_LOG			0
875 #define	IC_LOG_DATA_LOG_ID_LEARN_LOG			1
876 #define	IC_LOG_DATA_LOG_ID_FC_ACL_INGRESS_LOG		2
877 #define	IC_LOG_DATA_LOG_ID_FC_ACL_EGRESS_LOG		3
878 #define	IC_LOG_DATA_LOG_ID_ETHERNET_ACL_INGRESS_LOG	4
879 #define	IC_LOG_DATA_LOG_ID_ETHERNET_ACL_EGRESS_LOG	5
880 #define	IC_LOG_DATA_LOG_ID_MESSAGE_TRANSMIT_LOG		6
881 #define	IC_LOG_DATA_LOG_ID_MESSAGE_RECEIVE_LOG		7
882 #define	IC_LOG_DATA_LOG_ID_LINK_EVENT_LOG		8
883 #define	IC_LOG_DATA_LOG_ID_DCX_LOG			9
884 
885 /*
886  * InfoContext defines for INFO_DATA_TYPE_PORT_STATISTICS
887  */
888 #define	IC_PORT_STATISTICS_PORT_NUMBER_ETHERNET_PORT0	0
889 #define	IC_PORT_STATISTICS_PORT_NUMBER_ETHERNET_PORT1	1
890 #define	IC_PORT_STATISTICS_PORT_NUMBER_NSL_PORT0	2
891 #define	IC_PORT_STATISTICS_PORT_NUMBER_NSL_PORT1	3
892 #define	IC_PORT_STATISTICS_PORT_NUMBER_FC_PORT0		4
893 #define	IC_PORT_STATISTICS_PORT_NUMBER_FC_PORT1		5
894 
895 /*
896  * InfoContext defines for INFO_DATA_TYPE_LIF_STATISTICS
897  */
898 #define	IC_LIF_STATISTICS_LIF_NUMBER_ETHERNET_PORT0	0
899 #define	IC_LIF_STATISTICS_LIF_NUMBER_ETHERNET_PORT1	1
900 #define	IC_LIF_STATISTICS_LIF_NUMBER_FC_PORT0		2
901 #define	IC_LIF_STATISTICS_LIF_NUMBER_FC_PORT1		3
902 #define	IC_LIF_STATISTICS_LIF_NUMBER_CPU		6
903 
904 typedef struct _MENLO_ACCESS_PARAMETERS {
905 	union {
906 		struct {
907 			UINT32 StartingAddr;
908 			UINT32 Reserved2;
909 			UINT32 Reserved3;
910 		} MenloMemory;		/* For Read & Write Menlo Memory */
911 
912 		struct {
913 			UINT32 ConfigParamID;
914 			UINT32 ConfigParamData0;
915 			UINT32 ConfigParamData1;
916 		} MenloConfig;		/* For change Configuration */
917 
918 		struct {
919 			UINT32 InfoDataType;
920 			UINT32 InfoContext;
921 			UINT32 Reserved;
922 		} MenloInfo;		/* For fetch Menlo Info */
923 	} ap;
924 } MENLO_ACCESS_PARAMETERS, *PMENLO_ACCESS_PARAMETERS;
925 
926 #define	INFO_DATA_TYPE_LOG_CONFIG_TBC		((10*7)+1)*4
927 #define	INFO_DATA_TYPE_PORT_STAT_ETH_TBC	0x194
928 #define	INFO_DATA_TYPE_PORT_STAT_FC_TBC		0xC0
929 #define	INFO_DATA_TYPE_LIF_STAT_TBC		0x40
930 #define	INFO_DATA_TYPE_ASIC_STAT_TBC		0x5F8
931 #define	INFO_DATA_TYPE_CONFIG_TBC		0x140
932 
933 #define	MENLO_OP_READ_MEM	0	/* Read Menlo Memory */
934 #define	MENLO_OP_WRITE_MEM	1	/* Write Menlo Memory */
935 #define	MENLO_OP_CHANGE_CONFIG	2	/* Change Configuration */
936 #define	MENLO_OP_GET_INFO	3	/* Fetch Menlo Info (Logs, & */
937 					/* Statistics, Configuration) */
938 
939 typedef struct _MENLO_MANAGE_INFO {
940 	unsigned char *pDataBytes;
941 	MENLO_ACCESS_PARAMETERS Parameters;
942 	UINT32 TotalByteCount;
943 	UINT16 Operation;
944 	UINT16 Reserved;
945 } MENLO_MANAGE_INFO, *PMENLO_MANAGE_INFO;
946 
947 #define	MENLO_FC_CHECKSUM_FAILURE	0x01
948 #define	MENLO_FC_INVALID_LENGTH		0x02
949 #define	MENLO_FC_INVALID_ADDRESS	0x04
950 #define	MENLO_FC_INVALID_CONFIG_ID_TYPE	0x05
951 #define	MENLO_FC_INVALID_CONFIG_DATA	0x06
952 #define	MENLO_FC_INVALID_INFO_CONTEXT	0x07
953 
954 typedef struct _SD_MENLO_MGT {
955 	union {
956 		MENLO_RESET		MenloReset;
957 		MENLO_GET_FW_VERSION	MenloGetFwVer;
958 		MENLO_UPDATE_FW		MenloUpdateFw;
959 		MENLO_MANAGE_INFO	MenloManageInfo;
960 	} sp;
961 } SD_MENLO_MGT, *PSD_MENLO_MGT;
962 
963 /*
964  * vport struct definations
965  */
966 typedef struct _EXT_VPORT_ID_CNT {
967 	UINT32		VpCnt;
968 	UINT8		VpId[256];
969 } EXT_VPORT_ID_CNT, *PEXT_VPORT_ID_CNT;
970 
971 typedef struct _EXT_VPORT_INFO {
972 	UINT32		free;
973 	UINT32		used;
974 	UINT32		id;
975 	UINT32		state;
976 	UINT32		bound;
977 	UINT8		wwnn[EXT_DEF_WWN_NAME_SIZE];
978 	UINT8		wwpn[EXT_DEF_WWN_NAME_SIZE];
979 	UINT8		reserved[220];
980 } EXT_VPORT_INFO, *PEXT_VPORT_INFO;
981 
982 #ifdef	__cplusplus
983 }
984 #endif
985 
986 #endif /* _EXIOCT_H */
987