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 2015 QLogic Corporation */
23 
24 /*
25  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
26  * Use is subject to license terms.
27  */
28 
29 #ifndef	_QL_APPS_H
30 #define	_QL_APPS_H
31 
32 /*
33  * ISP2xxx Solaris Fibre Channel Adapter (FCA) driver header file.
34  *
35  * ***********************************************************************
36  * *									**
37  * *				NOTICE					**
38  * *		COPYRIGHT (C) 1996-2015 QLOGIC CORPORATION		**
39  * *			ALL RIGHTS RESERVED				**
40  * *									**
41  * ***********************************************************************
42  *
43  */
44 
45 #ifdef	__cplusplus
46 extern "C" {
47 #endif
48 
49 #include <sys/scsi/scsi_types.h>
50 
51 /* f/w trace sizes */
52 #define	FWEXTSIZE		(0x4000 * 4)	/* bytes - 16kb multiples */
53 #define	FWFCESIZE		(0x4000 * 4)	/* bytes - 16kb multiples */
54 
55 /*
56  * ISP8100 Extended Initialization Control Block
57  */
58 typedef struct ql_ext_icb_8100 {
59 	uint8_t version[2];
60 	/*
61 	 * BIT 0 = FCF VLAN ID Match
62 	 * BIT 1 = FCF Fabric Name Match
63 	 * BIT 2-7 = Reserved
64 	 */
65 	uint8_t fcf_vlan_match;
66 	uint8_t reserved_6[3];
67 	uint8_t fcf_vlan_id[2];
68 	uint8_t fcf_fabric_name[8];
69 	uint8_t reserved_7[14];
70 	uint8_t spma_proposed_mac_address[6];
71 	uint8_t reserved_8[28];
72 } ql_ext_icb_8100_t;
73 
74 /*
75  * Name:	Adapter Revsion Level Structure
76  *
77  * Purpose:	Supply various revision levels of h/w and driver
78  *
79  * Used by:
80  *		qlctest utility
81  *
82  */
83 typedef struct ql_adapter_revlvl {
84 	uint16_t isp2200;			/* 2200 chip rev level */
85 	uint16_t risc;				/* risc rev level */
86 	uint16_t frmbfr;			/* frame buffer rev level */
87 	uint16_t riscrom;			/* risc rom rev level */
88 	char qlddv[16];				/* ql driver version string */
89 } ql_adapter_revlvl_t;
90 
91 /*
92  * Name:	Application Mailbox Interface Structure
93  *
94  * Purpose:	Used to pass mailbox data between app and driver.
95  *
96  * Used by:
97  *		qlctest utility
98  *
99  */
100 typedef struct app_mbx_cmd {
101 	uint16_t	mb[32];
102 	uint8_t		reserved1[32];
103 } app_mbx_cmd_t;
104 
105 /*
106  * Name:	Diagnostic Loopback Parameter Structure
107  *
108  * Purpose:	Used for loopback parameter data
109  *
110  * Used by:
111  *		qlctest utility
112  *
113  */
114 #ifndef apps_64bit
115 typedef struct lbp {
116 	uint16_t	options;
117 	uint32_t	transfer_count;
118 	uint16_t	transfer_segment_count;
119 	uint16_t	receive_segment_count;
120 	uint32_t	transfer_data_address;
121 	uint32_t	receive_data_address;
122 	uint32_t	iteration_count;
123 } lbp_t;
124 #else
125 typedef struct lbp {
126 	uint16_t	options;
127 	uint32_t	transfer_count;
128 	uint16_t	transfer_segment_count;
129 	uint16_t	receive_segment_count;
130 	uint64_t	transfer_data_address;
131 	uint64_t	receive_data_address;
132 	uint32_t	iteration_count;
133 } lbp_t;
134 #endif
135 
136 /*
137  * Defines used by:
138  *			qlctest utility
139  *
140  * Prupose:
141  *	diag switch clause hooks provided for requested diagnostic
142  *	functionality (Check command Queue, Revision Level, Firmwware
143  *	Checksum, Self Test, Loopback Mailbox, Loopback Data, Execute
144  *	Firmware and send ECHO.
145  */
146 #define	QL_DIAG_CHKCMDQUE		0
147 #define	QL_DIAG_FMWCHKSUM		1
148 #define	QL_DIAG_SLFTST			2
149 #define	QL_DIAG_REVLVL			3
150 #define	QL_DIAG_LPBMBX			4
151 #define	QL_DIAG_LPBDTA			5
152 #define	QL_DIAG_EXEFMW			6
153 #define	QL_GET_ADAPTER_FEATURE_BITS	7
154 #define	QL_SET_ADAPTER_FEATURE_BITS	8
155 #define	QL_SET_ADAPTER_NVRAM_DEFAULTS	9
156 #define	QL_DIAG_ECHO			10
157 
158 /*
159  * Defines used for:
160  *			qladm utility
161  *			qlctest utility
162  *
163  * Purpose:
164  *	Driver IOCTL numbers for nvram dump/load, and driverop
165  *	functions. NB: 300 --> 399 are reserved for qla2x00 foapi's
166  */
167 #define	QL_UTIL_LOAD	100
168 #define	QL_UTIL_DUMP	101
169 #define	QL_FOAPI_START	300
170 #define	QL_FOAPI_END	399
171 #define	QL_ADM_OP	402
172 
173 /*
174  * Purpose:
175  *	QLA_ADM_OP command definitions
176  *
177  * Used by:
178  *		qladm utility
179  *		qlctest utility
180  */
181 typedef enum ql_adm_cmd {
182 	QL_EXTENDED_LOGGING,
183 	QL_ADAPTER_INFO,
184 	QL_DEVICE_LIST,
185 	QL_LOOP_RESET,
186 	QL_FW_DUMP,
187 	QL_FW_DUMP_TRIGGER,
188 	QL_BEACON_ENABLE,
189 	QL_BEACON_DISABLE,
190 	QL_NVRAM_LOAD,
191 	QL_NVRAM_DUMP,
192 	QL_FLASH_LOAD,
193 	QL_PROP_UPDATE_INT,
194 	QL_UPDATE_PROPERTIES,
195 	QL_VPD_LOAD,
196 	QL_VPD_DUMP,
197 	QL_VPD_GETTAG,
198 	QL_UPD_FWMODULE
199 } ql_adm_cmd_t;
200 
201 /*
202  * Purpose:
203  *	QLA_ADM_OP Parameter Interface Structure
204  *
205  * Used by:
206  *		qladm utility
207  *		qlctest utility
208  */
209 typedef struct ql_adm_op {
210 	uint64_t	buffer;
211 	uint32_t	length;
212 	uint32_t	option;
213 	ql_adm_cmd_t	cmd;	/* driver_op command */
214 } ql_adm_op_t;
215 
216 /*
217  * Purpose:
218  *	QLA_ADM_OP parameter data structure
219  *
220  * Used by:
221  *		qladm utility
222  *		qlctest utility
223  */
224 #define	MAX_PROP_LENGTH	256
225 typedef struct ql_adapter_info {
226 	uint8_t		wwpn[8];
227 	uint32_t	d_id;
228 	uint32_t	flash_size;
229 	uint16_t	device_id;
230 	char		fw_ver[MAX_PROP_LENGTH];
231 	char		fcode_ver[MAX_PROP_LENGTH];
232 	char		driver_ver[MAX_PROP_LENGTH];
233 } ql_adapter_info_t;
234 
235 /*
236  * Purpose:
237  *	QLA_ADM_OP data types (Fibre channel port types)
238  *
239  * Used by:
240  *		qladm utility
241  *		qlctest utility
242  */
243 typedef enum ql_port_type {
244 	FCT_UNKNOWN,
245 	FCT_TAPE,
246 	FCT_INITIATOR,
247 	FCT_TARGET
248 } ql_port_type_t;
249 
250 /*
251  * Purpose:
252  *	QLA_ADM_OP Device Information Structure
253  *
254  * Used by:
255  *		qladm utility
256  *		qlctest utility
257  */
258 typedef struct ql_device_info {
259 	uint8_t		wwpn[8];
260 	uint32_t	address;
261 	ql_port_type_t	type;
262 	uint16_t	loop_id;
263 } ql_device_info_t;
264 
265 #ifdef	__cplusplus
266 }
267 #endif
268 
269 #endif /* _QL_APPS_H */
270