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 2009 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-2009 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_NVRAM_LOAD,
188 QL_NVRAM_DUMP,
189 QL_FLASH_LOAD,
190 QL_PROP_UPDATE_INT,
191 QL_UPDATE_PROPERTIES,
192 QL_VPD_LOAD,
193 QL_VPD_DUMP,
194 QL_VPD_GETTAG,
195 QL_UPD_FWMODULE
196 } ql_adm_cmd_t;
197
198 /*
199 * Purpose:
200 * QLA_ADM_OP Parameter Interface Structure
201 *
202 * Used by:
203 * qladm utility
204 * qlctest utility
205 */
206 typedef struct ql_adm_op {
207 uint64_t buffer;
208 uint32_t length;
209 uint32_t option;
210 ql_adm_cmd_t cmd; /* driver_op command */
211 } ql_adm_op_t;
212
213 /*
214 * Purpose:
215 * QLA_ADM_OP parameter data structure
216 *
217 * Used by:
218 * qladm utility
219 * qlctest utility
220 */
221 #define MAX_PROP_LENGTH 256
222 typedef struct ql_adapter_info {
223 uint8_t wwpn[8];
224 uint32_t d_id;
225 uint32_t flash_size;
226 uint16_t device_id;
227 char fw_ver[MAX_PROP_LENGTH];
228 char fcode_ver[MAX_PROP_LENGTH];
229 char driver_ver[MAX_PROP_LENGTH];
230 } ql_adapter_info_t;
231
232 /*
233 * Purpose:
234 * QLA_ADM_OP data types (Fibre channel port types)
235 *
236 * Used by:
237 * qladm utility
238 * qlctest utility
239 */
240 typedef enum ql_port_type {
241 FCT_UNKNOWN,
242 FCT_TAPE,
243 FCT_INITIATOR,
244 FCT_TARGET
245 } ql_port_type_t;
246
247 /*
248 * Purpose:
249 * QLA_ADM_OP Device Information Structure
250 *
251 * Used by:
252 * qladm utility
253 * qlctest utility
254 */
255 typedef struct ql_device_info {
256 uint8_t wwpn[8];
257 uint32_t address;
258 ql_port_type_t type;
259 uint16_t loop_id;
260 } ql_device_info_t;
261
262 #ifdef __cplusplus
263 }
264 #endif
265
266 #endif /* _QL_APPS_H */