Print this page
NEX-5717 import QLogic 16G FC drivers
Reviewed by: Steve Peng <steve.peng@nexenta.com>
Reviewed by: Josef 'Jeff' Sipek <josef.sipek@nexenta.com>
Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com>
| Split |
Close |
| Expand all |
| Collapse all |
--- old/usr/src/uts/common/sys/fibre-channel/fca/qlc/ql_iocb.h
+++ new/usr/src/uts/common/sys/fibre-channel/fca/qlc/ql_iocb.h
1 1 /*
2 2 * CDDL HEADER START
3 3 *
4 4 * The contents of this file are subject to the terms of the
5 5 * Common Development and Distribution License (the "License").
6 6 * You may not use this file except in compliance with the License.
7 7 *
8 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 9 * or http://www.opensolaris.org/os/licensing.
10 10 * See the License for the specific language governing permissions
11 11 * and limitations under the License.
|
↓ open down ↓ |
11 lines elided |
↑ open up ↑ |
12 12 *
13 13 * When distributing Covered Code, include this CDDL HEADER in each
14 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 15 * If applicable, add the following below this CDDL HEADER, with the
16 16 * fields enclosed by brackets "[]" replaced with your own identifying
17 17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 18 *
19 19 * CDDL HEADER END
20 20 */
21 21
22 -/* Copyright 2010 QLogic Corporation */
22 +/* Copyright 2015 QLogic Corporation */
23 23
24 24 /*
25 25 * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
26 26 */
27 27
28 28 #ifndef _QL_IOCB_H
29 29 #define _QL_IOCB_H
30 30
31 31 /*
32 32 * ISP2xxx Solaris Fibre Channel Adapter (FCA) driver header file.
33 33 *
34 34 * ***********************************************************************
35 35 * * **
36 36 * * NOTICE **
37 - * * COPYRIGHT (C) 1996-2010 QLOGIC CORPORATION **
37 + * * COPYRIGHT (C) 1996-2015 QLOGIC CORPORATION **
38 38 * * ALL RIGHTS RESERVED **
39 39 * * **
40 40 * ***********************************************************************
41 41 *
42 42 */
43 43
44 44 #ifdef __cplusplus
45 45 extern "C" {
46 46 #endif
47 47
48 -#define INVALID_ENTRY_TYPE 0
48 +typedef struct ql_64bit_data_seg {
49 + uint32_t address[2];
50 + uint32_t length;
51 +} ql_64bit_data_seg_t;
49 52
53 +typedef struct ql_32bit_data_seg {
54 + uint32_t address;
55 + uint32_t length;
56 +} ql_32bit_data_seg_t;
57 +
58 +#define ABORTED_ENTRY_TYPE 0
59 +
50 60 /*
51 61 * ISP queue - 32-Bit DMA addressing command with extended LUN support
52 62 * entry structure definition.
53 63 */
54 64 #define IOCB_CMD_TYPE_2 0x11 /* Command entry */
55 65 #define MAX_CMDSZ 16 /* SCSI maximum CDB size. */
56 66 #define CMD_TYPE_2_DATA_SEGMENTS 3 /* Number of data segments. */
57 67 typedef struct cmd_entry {
58 - uint8_t entry_type; /* Entry type. */
59 - uint8_t entry_count; /* Entry count. */
60 - uint8_t sys_define; /* System defined. */
61 - uint8_t entry_status; /* Entry Status. */
68 + uint8_t entry_type; /* Entry type. */
69 + uint8_t entry_count; /* Entry count. */
70 + uint8_t sys_define; /* System defined. */
71 + uint8_t entry_status; /* Entry Status. */
62 72 uint32_t handle; /* System handle */
63 - uint8_t target_l; /* SCSI ID - LSB */
64 - uint8_t target_h; /* SCSI ID - MSB */
65 - uint8_t lun_l; /* SCSI LUN - LSB */
66 - uint8_t lun_h; /* SCSI LUN - MSB */
67 - uint8_t control_flags_l; /* Control flags - LSB. */
68 - uint8_t control_flags_h; /* Control flags - MSB. */
69 - uint8_t reserved_1[2];
73 + uint8_t target_l; /* SCSI ID - LSB */
74 + uint8_t target_h; /* SCSI ID - MSB */
75 + uint8_t lun_l; /* SCSI LUN - LSB */
76 + uint8_t lun_h; /* SCSI LUN - MSB */
77 + uint8_t control_flags_l; /* Control flags - LSB. */
78 + uint8_t control_flags_h; /* Control flags - MSB. */
79 + uint8_t reserved_1[2];
70 80 uint16_t timeout; /* Command timeout. */
71 81 uint16_t dseg_count; /* Data segment count - LSB. */
72 - uint8_t scsi_cdb[MAX_CMDSZ]; /* SCSI command words. */
82 + uint8_t scsi_cdb[MAX_CMDSZ]; /* SCSI command words. */
73 83 uint32_t byte_count; /* Total byte count. */
74 - uint32_t dseg_0_address; /* Data segment 0 address. */
75 - uint32_t dseg_0_length; /* Data segment 0 length. */
76 - uint32_t dseg_1_address; /* Data segment 1 address. */
77 - uint32_t dseg_1_length; /* Data segment 1 length. */
78 - uint32_t dseg_2_address; /* Data segment 2 address. */
79 - uint32_t dseg_2_length; /* Data segment 2 length. */
84 + ql_32bit_data_seg_t dseg[3]; /* Data segments. */
80 85 } cmd_entry_t, request_t;
81 86
82 87 /*
83 88 * Command entry control flags least significant byte.
84 89 */
85 90 #define CF_HTAG BIT_1
86 91 #define CF_OTAG BIT_2
87 92 #define CF_STAG BIT_3
88 93 #define CF_DATA_IN BIT_5
89 94 #define CF_DATA_OUT BIT_6
90 95
91 96 /*
92 97 * ISP24xx queue - Command IOCB structure definition.
93 98 */
94 99 #define IOCB_CMD_TYPE_7 0x18
95 -#define CMD_TYPE_7_DATA_SEGMENTS 1 /* Number of 64 bit data segments. */
100 +#define CMD_TYPE_7_DATA_SEGMENTS 1 /* Number of 64 bit data segments. */
96 101 typedef struct cmd7_24xx_entry {
97 - uint8_t entry_type; /* Entry type. */
98 - uint8_t entry_count; /* Entry count. */
99 - uint8_t sys_define; /* System defined. */
100 - uint8_t entry_status; /* Entry Status. */
102 + uint8_t entry_type; /* Entry type. */
103 + uint8_t entry_count; /* Entry count. */
104 + uint8_t sys_define; /* System defined. */
105 + uint8_t entry_status; /* Entry Status. */
101 106 uint32_t handle; /* System handle */
102 107 uint16_t n_port_hdl;
103 108 uint16_t timeout; /* Command timeout. */
104 109 uint16_t dseg_count;
105 - uint8_t reserved_1[2];
106 - uint8_t fcp_lun[8]; /* SCSI LUN ID. */
107 - uint8_t control_flags;
108 - uint8_t task_mgmt; /* Task management flags. */
109 - uint8_t task; /* Task Attributes Values. */
110 - uint8_t crn; /* Command reference number. */
111 - uint8_t scsi_cdb[MAX_CMDSZ]; /* SCSI command bytes. */
110 + uint8_t reserved_1[2];
111 + uint8_t fcp_lun[8]; /* SCSI LUN ID. */
112 + uint8_t control_flags;
113 + uint8_t task_mgmt; /* Task management flags. */
114 + uint8_t task; /* Task Attributes Values. */
115 + uint8_t crn; /* Command reference number. */
116 + uint8_t scsi_cdb[MAX_CMDSZ]; /* SCSI command bytes. */
112 117 uint32_t total_byte_count;
113 - uint8_t target_id[3]; /* SCSI Target ID */
114 - uint8_t vp_index;
115 - uint32_t dseg_0_address[2]; /* Data segment 0 address. */
116 - uint32_t dseg_0_length; /* Data segment 0 length. */
118 + uint8_t target_id[3]; /* SCSI Target ID */
119 + uint8_t vp_index;
120 + ql_64bit_data_seg_t dseg; /* Data segments. */
117 121 } cmd7_24xx_entry_t;
118 122
119 123 /*
120 124 * ISP24xx queue - Command IOCB structure definition.
121 125 */
122 126 #define IOCB_CMD_TYPE_6 0x48
123 -#define CMD_TYPE_6_DATA_SEGMENTS 1 /* Number of 64 bit data segments. */
127 +#define CMD_TYPE_6_DATA_SEGMENTS 1 /* Number of 64 bit data segments. */
124 128 typedef struct cmd6_24xx_entry {
125 - uint8_t entry_type; /* Entry type. */
126 - uint8_t entry_count; /* Entry count. */
127 - uint8_t sys_define; /* System defined. */
128 - uint8_t entry_status; /* Entry Status. */
129 + uint8_t entry_type; /* Entry type. */
130 + uint8_t entry_count; /* Entry count. */
131 + uint8_t sys_define; /* System defined. */
132 + uint8_t entry_status; /* Entry Status. */
129 133 uint32_t handle; /* System handle */
130 134 uint16_t n_port_hdl;
131 135 uint16_t timeout; /* Command timeout. */
132 136 uint16_t dseg_count;
133 137 uint16_t rsp_length;
134 - uint8_t fcp_lun[8]; /* SCSI LUN ID. */
138 + uint8_t fcp_lun[8]; /* SCSI LUN ID. */
135 139 uint16_t control_flags;
136 140 uint16_t cmnd_length;
137 141 uint32_t cmnd_address[2];
138 142 uint32_t rsp_address[2]; /* Data segment 0 address. */
139 143 uint32_t total_byte_count;
140 - uint8_t target_id[3]; /* SCSI Target ID */
141 - uint8_t vp_index;
142 - uint32_t dseg_0_address[2]; /* Data segment 0 address. */
143 - uint32_t dseg_0_length; /* Data segment 0 length. */
144 + uint8_t target_id[3]; /* SCSI Target ID */
145 + uint8_t vp_index;
146 + ql_64bit_data_seg_t dseg; /* Data segments. */
144 147 } cmd6_24xx_entry_t;
145 148
146 149 typedef struct fcp_cmnd {
147 150 uint8_t fcp_lun[8]; /* SCSI LUN ID. */
148 151 uint8_t crn; /* Command reference number. */
149 152 uint8_t task; /* Task Attributes Values. */
150 153 uint8_t task_mgmt; /* Task management flags. */
151 154 uint8_t control_flags; /* Plus additional cdb length */
152 155 uint8_t scsi_cdb[MAX_CMDSZ];
153 156 uint32_t dl;
154 157 } fcp_cmnd_t;
155 158
156 159 typedef struct cmd6_2400_dma {
157 160 fcp_cmnd_t cmd;
158 161 uint32_t cookie_list[QL_DMA_SG_LIST_LENGTH + 1][3];
159 162 } cmd6_2400_dma_t;
160 163
161 164 /*
162 165 * Task Management Flags.
163 166 */
164 167 #define TF_TARGET_RESET BIT_13
165 168 #define TF_LUN_RESET BIT_12
166 169 #define TF_CLEAR_TASK_SET BIT_10
167 170 #define TF_ABORT_TASK_SET BIT_9
168 171
169 172 /*
170 173 * Task Attributes Values.
171 174 */
172 175 #define TA_STAG 0
173 176 #define TA_HTAG 1
174 177 #define TA_OTAG 2
175 178 #define TA_ACA 4
176 179 #define TA_UNTAGGED 5
177 180
178 181 /*
179 182 * Control Flags.
|
↓ open down ↓ |
26 lines elided |
↑ open up ↑ |
180 183 */
181 184 #define CF_DSD_PTR BIT_2
182 185 #define CF_RD BIT_1
183 186 #define CF_WR BIT_0
184 187
185 188 /*
186 189 * ISP queue - 64-Bit DMA addressing command with extended LUN support
187 190 * entry structure definition.
188 191 */
189 192 #define IOCB_CMD_TYPE_3 0x19 /* Command Type 3 entry (64 bit) */
190 -#define CMD_TYPE_3_DATA_SEGMENTS 2 /* Number of 64 bit data segments. */
193 +#define CMD_TYPE_3_DATA_SEGMENTS 2 /* Number of 64 bit data segments. */
191 194 typedef struct cmd_3_entry {
192 - uint8_t entry_type; /* Entry type. */
193 - uint8_t entry_count; /* Entry count. */
194 - uint8_t sys_define; /* System defined. */
195 - uint8_t entry_status; /* Entry Status. */
195 + uint8_t entry_type; /* Entry type. */
196 + uint8_t entry_count; /* Entry count. */
197 + uint8_t sys_define; /* System defined. */
198 + uint8_t entry_status; /* Entry Status. */
196 199 uint32_t handle; /* System handle */
197 - uint8_t target_l; /* SCSI ID - LSB */
198 - uint8_t target_h; /* SCSI ID - MSB */
199 - uint8_t lun_l; /* SCSI LUN - LSB */
200 - uint8_t lun_h; /* SCSI LUN - MSB */
201 - uint8_t control_flags_l; /* Control flags - LSB. */
202 - uint8_t control_flags_h; /* Control flags - MSB. */
203 - uint8_t reserved_1[2];
200 + uint8_t target_l; /* SCSI ID - LSB */
201 + uint8_t target_h; /* SCSI ID - MSB */
202 + uint8_t lun_l; /* SCSI LUN - LSB */
203 + uint8_t lun_h; /* SCSI LUN - MSB */
204 + uint8_t control_flags_l; /* Control flags - LSB. */
205 + uint8_t control_flags_h; /* Control flags - MSB. */
206 + uint8_t reserved_1[2];
204 207 uint16_t timeout; /* Command timeout. */
205 208 uint16_t dseg_count; /* Data segment count - LSB. */
206 - uint8_t scsi_cdb[MAX_CMDSZ]; /* SCSI command words. */
209 + uint8_t scsi_cdb[MAX_CMDSZ]; /* SCSI command words. */
207 210 uint32_t byte_count; /* Total byte count. */
208 - uint32_t dseg_0_address[2]; /* Data segment 0 address. */
209 - uint32_t dseg_0_length; /* Data segment 0 length. */
210 - uint32_t dseg_1_address[2]; /* Data segment 1 address. */
211 - uint32_t dseg_1_length; /* Data segment 1 length. */
211 + ql_64bit_data_seg_t dseg[2]; /* Data segments. */
212 212 } cmd_3_entry_t;
213 213
214 214 /*
215 215 * ISP queue - Command type 4 DSD list pointer structure definition.
216 216 */
217 217 #define COMMAND_CHAINING_TYPE 0x15
218 218 typedef struct cmd_chaining_entry {
219 - uint8_t entry_type; /* Entry type. */
220 - uint8_t entry_count; /* Entry count. */
221 - uint8_t sys_define; /* System defined. */
222 - uint8_t entry_status; /* Entry Status. */
219 + uint8_t entry_type; /* Entry type. */
220 + uint8_t entry_count; /* Entry count. */
221 + uint8_t sys_define; /* System defined. */
222 + uint8_t entry_status; /* Entry Status. */
223 223 uint32_t handle; /* System handle */
224 - uint8_t reserved;
225 - uint8_t target; /* SCSI ID */
226 - uint8_t lun_l; /* SCSI LUN - LSB */
227 - uint8_t lun_h; /* SCSI LUN - MSB */
228 - uint8_t control_flags_l; /* Control flags - LSB. */
229 - uint8_t control_flags_h; /* Control flags - MSB. */
230 - uint8_t crn;
231 - uint8_t vp_index;
232 - uint8_t timeout_l; /* Command timeout - LSB. */
233 - uint8_t timeout_h; /* Command timeout - MSB. */
234 - uint8_t dseg_count_l; /* Data segment count - LSB. */
235 - uint8_t dseg_count_h; /* Data segment count - MSB. */
236 - uint8_t scsi_cdb[MAX_CMDSZ]; /* SCSI command words. */
224 + uint8_t reserved;
225 + uint8_t target; /* SCSI ID */
226 + uint8_t lun_l; /* SCSI LUN - LSB */
227 + uint8_t lun_h; /* SCSI LUN - MSB */
228 + uint8_t control_flags_l; /* Control flags - LSB. */
229 + uint8_t control_flags_h; /* Control flags - MSB. */
230 + uint8_t crn;
231 + uint8_t vp_index;
232 + uint8_t timeout_l; /* Command timeout - LSB. */
233 + uint8_t timeout_h; /* Command timeout - MSB. */
234 + uint8_t dseg_count_l; /* Data segment count - LSB. */
235 + uint8_t dseg_count_h; /* Data segment count - MSB. */
236 + uint8_t scsi_cdb[MAX_CMDSZ]; /* SCSI command words. */
237 237 uint32_t byte_count; /* Total byte count. */
238 238 uint16_t list_type; /* 0 = 32bit, 1 = 64bit. */
239 239 uint16_t base_address[2];
240 240 uint16_t list_address[4];
241 241 uint8_t reserved_2[10];
242 242 } cmd_chaining_entry_t;
243 243
244 244 /*
245 245 * ISP queue - continuation entry structure definition.
246 246 */
247 247 #define CONTINUATION_TYPE_0 0x02 /* Continuation entry. */
248 -#define CONT_TYPE_0_DATA_SEGMENTS 7 /* Number of 32 bit data segments. */
248 +#define CONT_TYPE_0_DATA_SEGMENTS 7 /* Number of 32 bit data segments. */
249 249 typedef struct cont_entry {
250 250 uint8_t entry_type; /* Entry type. */
251 251 uint8_t entry_count; /* Entry count. */
252 252 uint8_t sys_define; /* System defined. */
253 253 uint8_t entry_status; /* Entry Status. */
254 254 uint32_t reserved;
255 - uint32_t dseg_0_address; /* Data segment 0 address. */
256 - uint32_t dseg_0_length; /* Data segment 0 length. */
257 - uint32_t dseg_1_address; /* Data segment 1 address. */
258 - uint32_t dseg_1_length; /* Data segment 1 length. */
259 - uint32_t dseg_2_address; /* Data segment 2 address. */
260 - uint32_t dseg_2_length; /* Data segment 2 length. */
261 - uint32_t dseg_3_address; /* Data segment 3 address. */
262 - uint32_t dseg_3_length; /* Data segment 3 length. */
263 - uint32_t dseg_4_address; /* Data segment 4 address. */
264 - uint32_t dseg_4_length; /* Data segment 4 length. */
265 - uint32_t dseg_5_address; /* Data segment 5 address. */
266 - uint32_t dseg_5_length; /* Data segment 5 length. */
267 - uint32_t dseg_6_address; /* Data segment 6 address. */
268 - uint32_t dseg_6_length; /* Data segment 6 length. */
255 + ql_32bit_data_seg_t dseg[7]; /* Data segments. */
269 256 } cont_entry_t;
270 257
271 258 /*
272 259 * ISP queue - 64-Bit addressing, continuation entry structure definition.
273 260 */
274 261 #define CONTINUATION_TYPE_1 0x0A /* Continuation Type 1 entry. */
275 -#define CONT_TYPE_1_DATA_SEGMENTS 5 /* Number of 64 bit data segments. */
262 +#define CONT_TYPE_1_DATA_SEGMENTS 5 /* Number of 64 bit data segments. */
276 263 typedef struct cont_type_1_entry {
277 264 uint8_t entry_type; /* Entry type. */
278 265 uint8_t entry_count; /* Entry count. */
279 266 uint8_t sys_define; /* System defined. */
280 267 uint8_t entry_status; /* Entry Status. */
281 - uint32_t dseg_0_address[2]; /* Data segment 0 address. */
282 - uint32_t dseg_0_length; /* Data segment 0 length. */
283 - uint32_t dseg_1_address[2]; /* Data segment 1 address. */
284 - uint32_t dseg_1_length; /* Data segment 1 length. */
285 - uint32_t dseg_2_address[2]; /* Data segment 2 address. */
286 - uint32_t dseg_2_length; /* Data segment 2 length. */
287 - uint32_t dseg_3_address[2]; /* Data segment 3 address. */
288 - uint32_t dseg_3_length; /* Data segment 3 length. */
289 - uint32_t dseg_4_address[2]; /* Data segment 4 address. */
290 - uint32_t dseg_4_length; /* Data segment 4 length. */
268 + ql_64bit_data_seg_t dseg[5]; /* Data segments. */
291 269 } cont_type_1_entry_t;
292 270
293 271 /*
294 272 * ISP queue - status entry structure definition.
295 273 */
296 274 #define STATUS_TYPE 0x03 /* Status entry. */
297 275 typedef struct sts_entry {
298 - uint8_t entry_type; /* Entry type. */
299 - uint8_t entry_count; /* Entry count. */
300 - uint8_t sys_define; /* System defined. */
301 - uint8_t entry_status; /* Entry Status. */
276 + uint8_t entry_type; /* Entry type. */
277 + uint8_t entry_count; /* Entry count. */
278 + uint8_t sys_define; /* System defined. */
279 + uint8_t entry_status; /* Entry Status. */
302 280 uint32_t handle; /* System handle. */
303 - uint8_t scsi_status_l; /* SCSI status - LSB. */
304 - uint8_t scsi_status_h; /* SCSI status - MSB. */
281 + uint8_t scsi_status_l; /* SCSI status - LSB. */
282 + uint8_t scsi_status_h; /* SCSI status - MSB. */
305 283 uint16_t comp_status; /* Completion status. */
306 - uint8_t state_flags_l; /* State flags - LSB. */
307 - uint8_t state_flags_h; /* State flags. */
308 - uint8_t status_flags_l; /* Status flags. */
309 - uint8_t status_flags_h; /* Status flags - MSB. */
284 + uint8_t state_flags_l; /* State flags - LSB. */
285 + uint8_t state_flags_h; /* State flags. */
286 + uint8_t status_flags_l; /* Status flags. */
287 + uint8_t status_flags_h; /* Status flags - MSB. */
310 288 uint16_t rsp_info_length; /* Response Info Length. */
311 289 uint16_t req_sense_length; /* Request sense data length. */
312 290 uint32_t residual_length; /* Residual transfer length. */
313 - uint8_t rsp_info[8]; /* FCP response information. */
314 - uint8_t req_sense_data[32]; /* Request sense data. */
291 + uint8_t rsp_info[8]; /* FCP response information. */
292 + uint8_t req_sense_data[32]; /* Request sense data. */
315 293 } sts_entry_t, response_t;
316 294
317 295 /*
318 296 * Status entry entry status
319 297 */
320 298 #define RF_INV_E_ORDER BIT_5 /* Invalid entry order. */
321 -#define RF_INV_E_COUNT BIT_4 /* Invalid entry count. */
322 -#define RF_INV_E_PARAM BIT_3 /* Invalid entry parameter. */
323 -#define RF_INV_E_TYPE BIT_2 /* Invalid entry type. */
299 +#define RF_INV_E_COUNT BIT_4 /* Invalid entry count. */
300 +#define RF_INV_E_PARAM BIT_3 /* Invalid entry parameter. */
301 +#define RF_INV_E_TYPE BIT_2 /* Invalid entry type. */
324 302 #define RF_BUSY BIT_1 /* Busy */
325 303
326 304 /*
327 305 * Status entry SCSI status most significant byte.
328 306 */
329 307 #define FCP_CONF_REQ BIT_4
330 308 #define FCP_RESID_UNDER BIT_3
331 309 #define FCP_RESID_OVER BIT_2
332 310 #define FCP_SNS_LEN_VALID BIT_1
333 311 #define FCP_RSP_LEN_VALID BIT_0
334 312 #define FCP_RSP_MASK (FCP_RESID_UNDER | FCP_RESID_OVER | \
335 313 FCP_RSP_LEN_VALID)
336 314
337 315 /*
338 316 * Status entry state flag most significant byte.
339 317 * Not used in by ISP24xx
340 318 */
341 319 #define SF_ARQ_DONE BIT_5
342 320 #define SF_GOT_STATUS BIT_4
343 321 #define SF_XFERRED_DATA BIT_3
344 322 #define SF_SENT_CMD BIT_2
345 323 #define SF_GOT_TARGET BIT_1
346 324 #define SF_GOT_BUS BIT_0
347 325
348 326 /*
349 327 * Status entry state flag least significant byte.
350 328 * Not used in by ISP24xx
351 329 */
352 330 #define SF_NO_FAST_POST BIT_7
353 331 #define SF_DATA_OUT BIT_6
354 332 #define SF_DATA_IN BIT_5
355 333
356 334 #define SF_SIMPLE_Q BIT_3
357 335 #define SF_ORDERED_Q BIT_2
358 336 #define SF_HEAD_OF_Q BIT_1
359 337 #define SF_ACA_Q BIT_0
360 338
361 339 /*
362 340 * Status entry completion status definitions.
363 341 */
364 342 #define CS_COMPLETE 0x0 /* No errors */
365 343 #define CS_INCOMPLETE 0x1 /* Incomplete transfer of cmd. */
366 344 #define CS_DMA_ERROR 0x2 /* A DMA direction error. */
367 345 #define CS_PORT_ID_CHANGE 0x2 /* The port ID has changed. */
368 346 #define CS_TRANSPORT 0x3 /* Transport error. */
369 347 #define CS_RESET 0x4 /* SCSI bus reset occurred */
370 348 #define CS_ABORTED 0x5 /* System aborted command. */
371 349 #define CS_TIMEOUT 0x6 /* Timeout error. */
372 350 #define CS_DATA_OVERRUN 0x7 /* Data overrun. */
373 351 #define CS_INVALID_RX_ID 0x8 /* Invalid RX_ID. */
374 352 #define CS_DATA_REASSEM_ERROR 0x11 /* Data reassembly error. */
375 353 #define CS_ABTS_REC 0x13 /* ABTS from target. */
376 354 #define CS_DATA_UNDERRUN 0x15 /* Data Underrun. */
377 355 #define CS_QUEUE_FULL 0x1C /* Queue Full. */
|
↓ open down ↓ |
44 lines elided |
↑ open up ↑ |
378 356 #define CS_PORT_UNAVAILABLE 0x28 /* Port unavailable */
379 357 /* (selection timeout) */
380 358 #define CS_PORT_LOGGED_OUT 0x29 /* Port Logged Out */
381 359 #define CS_PORT_CONFIG_CHG 0x2A /* Port Configuration Changed */
382 360 #define CS_PORT_BUSY 0x2B /* Port Busy */
383 361 #define CS_RESOUCE_UNAVAILABLE 0x2C /* Frimware resource unavailable. */
384 362 #define CS_TASK_MGMT_OVERRUN 0x30 /* Task management overrun. */
385 363 #define CS_LOGIN_LOGOUT_ERROR 0x31 /* login/logout IOCB error. */
386 364 #define CS_SEQ_COMPLETE 0x40 /* Sequence Complete. */
387 365 #define CS_ABORTED_SEQ_REC 0x47 /* Abort sequence was received. */
366 +#define CS_DEV_NOT_READY 0x81 /* Device not ready */
388 367 #define CS_INVALID_PARAMETER 0x102 /* IP invalid_parameter. */
389 368 #define CS_ERROR_RESOURCE 0x103 /* IP insufficient resources. */
390 369 #define CS_IP_NOT_INITIALIZED 0x104 /* IP not_initialized. */
391 370
392 371 #define CS_BAD_PAYLOAD 0x180 /* Driver defined */
393 372 #define CS_UNKNOWN 0x181 /* Driver defined */
394 373 #define CS_CMD_FAILED 0x182 /* Driver defined */
395 374 #define CS_LOOP_DOWN_ABORT 0x183 /* Driver defined */
396 375 #define CS_FCP_RESPONSE_ERROR 0x184 /* Driver defined */
397 376 #define CS_DEVICE_UNAVAILABLE 0x185 /* Driver defined */
398 377 /*
399 378 * ISP24xx queue - Status IOCB structure definition.
400 379 */
401 380 typedef struct sts_24xx_entry {
402 - uint8_t entry_type; /* Entry type. */
403 - uint8_t entry_count; /* Entry count. */
404 - uint8_t sys_define; /* System defined. */
405 - uint8_t entry_status; /* Entry Status. */
381 + uint8_t entry_type; /* Entry type. */
382 + uint8_t entry_count; /* Entry count. */
383 + uint8_t sys_define; /* System defined. */
384 + uint8_t entry_status; /* Entry Status. */
406 385 uint32_t handle; /* System handle. */
407 386 uint16_t comp_status; /* Completion status. */
408 387 uint16_t ox_id;
409 388 uint32_t residual_length; /* Residual transfer length. */
410 389 uint16_t reserved;
411 390 uint8_t state_flags_l; /* State flags. */
412 391 uint8_t state_flags_h;
413 392 uint16_t reserved_1;
414 - uint8_t scsi_status_l; /* SCSI status - LSB. */
415 - uint8_t scsi_status_h; /* SCSI status - MSB. */
393 + uint8_t scsi_status_l; /* SCSI status - LSB. */
394 + uint8_t scsi_status_h; /* SCSI status - MSB. */
416 395 uint32_t fcp_rsp_residual_count;
417 396 uint32_t fcp_sense_length;
418 397 uint32_t fcp_rsp_data_length; /* Response Info Length. */
419 - uint8_t rsp_sense_data[28]; /* FCP response and/or sense data. */
398 + uint8_t rsp_sense_data[28]; /* FCP response and/or sense data. */
420 399 } sts_24xx_entry_t;
421 400
422 401 /*
423 402 * ISP queue - status continuation entry structure definition.
424 403 */
425 404 #define STATUS_CONT_TYPE 0x10 /* Status continuation entry. */
426 405 typedef struct sts_cont_entry {
427 - uint8_t entry_type; /* Entry type. */
428 - uint8_t entry_count; /* Entry count. */
429 - uint8_t sys_define; /* System defined. */
430 - uint8_t entry_status; /* Entry Status. */
431 - uint8_t req_sense_data[60]; /* Request sense data. */
406 + uint8_t entry_type; /* Entry type. */
407 + uint8_t entry_count; /* Entry count. */
408 + uint8_t sys_define; /* System defined. */
409 + uint8_t entry_status; /* Entry Status. */
410 + uint8_t req_sense_data[60]; /* Request sense data. */
432 411 } sts_cont_entry_t;
433 412
434 413 /*
435 414 * ISP queue - marker with extended LUN support
436 415 * entry structure definition.
437 416 */
438 417 #define MARKER_TYPE 0x04 /* Marker entry. */
439 418 typedef struct mrk_entry {
440 - uint8_t entry_type; /* Entry type. */
441 - uint8_t entry_count; /* Entry count. */
442 - uint8_t sys_define; /* System defined. */
443 - uint8_t entry_status; /* Entry Status. */
419 + uint8_t entry_type; /* Entry type. */
420 + uint8_t entry_count; /* Entry count. */
421 + uint8_t sys_define; /* System defined. */
422 + uint8_t entry_status; /* Entry Status. */
444 423 uint32_t sys_define_2; /* System defined. */
445 - uint8_t target_l; /* SCSI ID - LSB */
446 - uint8_t target_h; /* SCSI ID - MSB */
447 - uint8_t modifier; /* Modifier (7-0). */
448 - uint8_t reserved_1;
449 - uint8_t sequence_number[2]; /* Sequence number of event. */
450 - uint8_t lun_l; /* SCSI LUN - LSB */
451 - uint8_t lun_h; /* SCSI LUN - MSB */
452 - uint8_t reserved_2[48];
424 + uint8_t target_l; /* SCSI ID - LSB */
425 + uint8_t target_h; /* SCSI ID - MSB */
426 + uint8_t modifier; /* Modifier (7-0). */
427 + uint8_t reserved_1;
428 + uint8_t sequence_number[2]; /* Sequence number of event. */
429 + uint8_t lun_l; /* SCSI LUN - LSB */
430 + uint8_t lun_h; /* SCSI LUN - MSB */
431 + uint8_t reserved_2[48];
453 432 } mrk_entry_t;
454 433
455 434 /*
456 435 * Marker modifiers
457 436 */
458 437 #define MK_SYNC_ID_LUN 0 /* Synchronize ID/LUN */
459 438 #define MK_SYNC_ID 1 /* Synchronize ID */
460 439 #define MK_SYNC_ALL 2 /* Synchronize all ID/LUN */
461 440 #define MK_SYNC_LIP 3 /* Synchronize all ID/LUN, */
462 441 /* clear port changed, */
463 442 /* use sequence number. */
464 443 /*
465 444 * ISP24xx queue - Marker IOCB structure definition.
466 445 */
467 446 typedef struct marker_24xx_entry {
468 - uint8_t entry_type; /* Entry type. */
469 - uint8_t entry_count; /* Entry count. */
470 - uint8_t sys_define; /* System defined. */
471 - uint8_t entry_status; /* Entry Status. */
447 + uint8_t entry_type; /* Entry type. */
448 + uint8_t entry_count; /* Entry count. */
449 + uint8_t sys_define; /* System defined. */
450 + uint8_t entry_status; /* Entry Status. */
472 451 uint32_t handle; /* System handle */
473 452 uint16_t n_port_hdl;
474 - uint8_t modifier; /* Modifier */
475 - uint8_t reserved[2];
476 - uint8_t vp_index;
477 - uint8_t reserved_1[2];
478 - uint8_t fcp_lun[8]; /* SCSI LUN ID. */
479 - uint8_t reserved_2[40];
453 + uint8_t modifier; /* Modifier */
454 + uint8_t reserved[2];
455 + uint8_t vp_index;
456 + uint8_t reserved_1[2];
457 + uint8_t fcp_lun[8]; /* SCSI LUN ID. */
458 + uint8_t reserved_2[40];
480 459 } marker_24xx_entry_t;
481 460
482 461 /*
483 462 * ISP queue - Management Server entry structure definition.
484 463 */
485 464 #define MS_TYPE 0x29
486 465 #define MS_DATA_SEGMENTS 1 /* Number of data segments. */
487 466 typedef struct ms_entry {
488 - uint8_t entry_type; /* Entry type. */
489 - uint8_t entry_count; /* Entry count. */
490 - uint8_t sys_define; /* System defined. */
491 - uint8_t entry_status; /* Entry Status. */
467 + uint8_t entry_type; /* Entry type. */
468 + uint8_t entry_count; /* Entry count. */
469 + uint8_t sys_define; /* System defined. */
470 + uint8_t entry_status; /* Entry Status. */
492 471 uint32_t handle; /* System handle */
493 - uint8_t loop_id_l; /* device id - LSB */
494 - uint8_t loop_id_h; /* device id - MSB */
472 + uint8_t loop_id_l; /* device id - LSB */
473 + uint8_t loop_id_h; /* device id - MSB */
495 474 uint16_t comp_status; /* Completion status */
496 - uint8_t control_flags_l; /* Control flags - LSB. */
497 - uint8_t control_flags_h; /* Control flags - MSB. */
498 - uint8_t reserved_1[2];
475 + uint8_t control_flags_l; /* Control flags - LSB. */
476 + uint8_t control_flags_h; /* Control flags - MSB. */
477 + uint8_t reserved_1[2];
499 478 uint16_t timeout; /* Command timeout. */
500 - uint8_t cmd_dseg_count_l; /* CMD segment count - LSB. */
501 - uint8_t cmd_dseg_count_h; /* CMD segment count - MSB. */
479 + uint8_t cmd_dseg_count_l; /* CMD segment count - LSB. */
480 + uint8_t cmd_dseg_count_h; /* CMD segment count - MSB. */
502 481 uint16_t total_dseg_count; /* CMD + RESP segment count. */
503 482 uint8_t reserved_2[10];
504 483 uint32_t resp_byte_count; /* Response byte count */
505 484 uint32_t cmd_byte_count; /* Command byte count */
506 - uint32_t dseg_0_address[2]; /* Data segment 0 address. */
507 - uint32_t dseg_0_length; /* Data segment 0 length. */
508 - uint32_t dseg_1_address[2]; /* Data segment 1 address. */
509 - uint32_t dseg_1_length; /* Data segment 1 length. */
485 + ql_64bit_data_seg_t dseg[2]; /* Data segments. */
510 486 } ms_entry_t;
511 487
488 +#define CF_ELS_PASSTHROUGH BIT_7 /* MSB */
489 +
512 490 /*
513 491 * ISP24xx queue - CT Pass-Through IOCB structure definition.
514 492 */
515 493 #define CT_PASSTHRU_TYPE 0x29
516 494 #define CT_PASSTHRU_DATA_SEGMENTS 1 /* Number of data segments. */
517 495 typedef struct ct_passthru_entry {
518 - uint8_t entry_type; /* Entry type. */
519 - uint8_t entry_count; /* Entry count. */
520 - uint8_t sys_define; /* System defined. */
521 - uint8_t entry_status; /* Entry Status. */
496 + uint8_t entry_type; /* Entry type. */
497 + uint8_t entry_count; /* Entry count. */
498 + uint8_t sys_define; /* System defined. */
499 + uint8_t entry_status; /* Entry Status. */
522 500 uint32_t handle; /* System handle */
523 501 uint16_t status;
524 502 uint16_t n_port_hdl;
525 503 uint16_t cmd_dseg_count;
526 - uint8_t vp_index;
527 - uint8_t reserved;
504 + uint8_t vp_index;
505 + uint8_t reserved;
528 506 uint16_t timeout;
529 507 uint16_t reserved_1;
530 508 uint16_t resp_dseg_count;
531 - uint8_t reserved_2[10];
509 + uint8_t reserved_2[10];
532 510 uint32_t resp_byte_count;
533 511 uint32_t cmd_byte_count;
534 - uint32_t dseg_0_address[2]; /* Data segment 0 address. */
535 - uint32_t dseg_0_length; /* Data segment 0 length. */
536 - uint32_t dseg_1_address[2]; /* Data segment 1 address. */
537 - uint32_t dseg_1_length; /* Data segment 1 length. */
512 + ql_64bit_data_seg_t dseg[2]; /* Data segments. */
538 513 } ct_passthru_entry_t;
539 514
540 515 /*
541 516 * ISP24xx queue - ELS Pass-Through IOCB structure definition.
542 517 */
543 518 #define ELS_PASSTHRU_TYPE 0x53
544 519 typedef struct els_passthru_entry {
545 - uint8_t entry_type; /* Entry type. */
546 - uint8_t entry_count; /* Entry count. */
547 - uint8_t sys_define; /* System defined. */
548 - uint8_t entry_status; /* Entry Status. */
520 + uint8_t entry_type; /* Entry type. */
521 + uint8_t entry_count; /* Entry count. */
522 + uint8_t sys_define; /* System defined. */
523 + uint8_t entry_status; /* Entry Status. */
549 524 uint32_t handle; /* System handle */
550 525 uint16_t reserved_8_9;
551 526 uint16_t n_port_hdl;
552 527 uint16_t xmt_dseg_count; /* Only one allowed */
553 - uint8_t vp_index;
554 - uint8_t sof_type;
528 + uint8_t vp_index;
529 + uint8_t sof_type;
555 530 uint32_t rcv_exch_address;
556 531 uint16_t rcv_dseg_count;
557 - uint8_t els_cmd_opcode;
558 - uint8_t reserved_17;
559 - uint8_t d_id_7_0;
560 - uint8_t d_id_15_8;
561 - uint8_t d_id_23_16;
562 - uint8_t s_id_23_16;
563 - uint8_t s_id_7_0;
564 - uint8_t s_id_15_8;
532 + uint8_t els_cmd_opcode;
533 + uint8_t reserved_17;
534 + uint8_t d_id_7_0;
535 + uint8_t d_id_15_8;
536 + uint8_t d_id_23_16;
537 + uint8_t s_id_23_16;
538 + uint8_t s_id_7_0;
539 + uint8_t s_id_15_8;
565 540 uint16_t control_flags;
566 541 uint32_t rcv_payld_data_bcnt;
567 542 uint32_t xmt_payld_data_bcnt;
568 - uint32_t xmt_dseg_0_address[2]; /* Tx Data segment 0 address. */
569 - uint32_t xmt_dseg_0_length; /* Tx Data segment 0 length. */
570 - uint32_t rcv_dseg_0_address[2]; /* Rx Data segment 0 address. */
571 - uint32_t rcv_dseg_0_length; /* Rx Data segment 0 length. */
543 + ql_64bit_data_seg_t dseg[2]; /* Data segments. */
572 544 } els_passthru_entry_t;
573 545
574 546 /*
575 547 * ISP24x queue - ELS Pass-Through IOCB response.
576 548 */
577 549 typedef struct els_passthru_entry_rsp {
578 - uint8_t entry_type; /* Entry type. */
579 - uint8_t entry_count; /* Entry count. */
580 - uint8_t sys_define; /* System defined. */
581 - uint8_t entry_status; /* Entry Status. */
550 + uint8_t entry_type; /* Entry type. */
551 + uint8_t entry_count; /* Entry count. */
552 + uint8_t sys_define; /* System defined. */
553 + uint8_t entry_status; /* Entry Status. */
582 554 uint32_t handle; /* System handle */
583 555 uint16_t comp_status;
584 556 uint16_t n_port_hdl;
585 557 uint16_t reserved_c_d;
586 - uint8_t vp_index;
587 - uint8_t sof_type;
558 + uint8_t vp_index;
559 + uint8_t sof_type;
588 560 uint32_t rcv_exch_addr;
589 561 uint16_t reserved_14_15;
590 - uint8_t els_cmd_opcode;
591 - uint8_t reserved_17;
592 - uint8_t d_id_7_0;
593 - uint8_t d_id_15_8;
594 - uint8_t d_id_23_16;
595 - uint8_t s_id_23_16;
596 - uint8_t s_id_7_0;
597 - uint8_t s_id_15_8;
562 + uint8_t els_cmd_opcode;
563 + uint8_t reserved_17;
564 + uint8_t d_id_7_0;
565 + uint8_t d_id_15_8;
566 + uint8_t d_id_23_16;
567 + uint8_t s_id_23_16;
568 + uint8_t s_id_7_0;
569 + uint8_t s_id_15_8;
598 570 uint16_t control_flags;
599 571 uint32_t total_data_bcnt;
600 572 uint32_t error_subcode1;
601 573 uint32_t error_subcode2;
602 - uint8_t reserved_2c_3f[20];
574 + uint8_t reserved_2c_3f[20];
603 575 } els_passthru_entry_rsp_t;
604 576
605 577 /*
606 578 * ISP24xx queue - Task Management IOCB structure definition.
607 579 */
608 580 #define TASK_MGMT_TYPE 0x14
609 581 typedef struct task_mgmt_entry {
610 - uint8_t entry_type; /* Entry type. */
611 - uint8_t entry_count; /* Entry count. */
612 - uint8_t sys_define; /* System defined. */
613 - uint8_t entry_status; /* Entry Status. */
582 + uint8_t entry_type; /* Entry type. */
583 + uint8_t entry_count; /* Entry count. */
584 + uint8_t sys_define; /* System defined. */
585 + uint8_t entry_status; /* Entry Status. */
614 586 uint32_t handle; /* System handle */
615 587 uint16_t n_port_hdl;
616 588 uint16_t reserved;
617 589 uint16_t delay;
618 590 uint16_t timeout;
619 - uint8_t fcp_lun[8]; /* SCSI LUN ID. */
591 + uint8_t fcp_lun[8]; /* SCSI LUN ID. */
620 592 uint32_t control_flags;
621 - uint8_t reserved_1[20];
622 - uint8_t target_id[3]; /* SCSI Target ID */
623 - uint8_t vp_index;
624 - uint8_t reserved_2[12];
593 + uint8_t reserved_1[20];
594 + uint8_t target_id[3]; /* SCSI Target ID */
595 + uint8_t vp_index;
596 + uint8_t reserved_2[12];
625 597 } task_mgmt_entry_t;
626 598
627 599 /*
628 600 * Control Flags.
629 601 */
630 602 #define CF_DO_NOT_SEND BIT_31
631 603 #define CF_LUN_RESET BIT_4
632 604 #define CF_ABORT_TASK_SET BIT_3
633 605 #define CF_CLEAR_TASK_SET BIT_2
634 606 #define CF_TARGET_RESET BIT_1
635 607 #define CF_CLEAR_ACA BIT_0
636 608
637 609 /*
638 610 * ISP24xx queue - Abort I/O IOCB structure definition.
639 611 */
640 612 #define ABORT_CMD_TYPE 0x33
641 613 typedef struct abort_cmd_entry {
642 - uint8_t entry_type; /* Entry type. */
643 - uint8_t entry_count; /* Entry count. */
644 - uint8_t sys_define; /* System defined. */
645 - uint8_t entry_status; /* Entry Status. */
614 + uint8_t entry_type; /* Entry type. */
615 + uint8_t entry_count; /* Entry count. */
616 + uint8_t sys_define; /* System defined. */
617 + uint8_t entry_status; /* Entry Status. */
646 618 uint32_t handle; /* System handle */
647 619 uint16_t n_port_hdl; /* also comp_status */
648 - uint8_t options;
649 - uint8_t options_h;
620 + uint8_t options;
621 + uint8_t options_h;
650 622 uint32_t cmd_handle;
651 - uint8_t reserved[32];
652 - uint8_t target_id[3]; /* Port ID */
653 - uint8_t vp_index;
654 - uint8_t reserved_1[12];
623 + uint8_t reserved[32];
624 + uint8_t target_id[3]; /* Port ID */
625 + uint8_t vp_index;
626 + uint8_t reserved_1[12];
655 627 } abort_cmd_entry_t;
656 628
657 629 /*
658 630 * Option Flags.
659 631 */
660 632 #define AF_NO_ABTS BIT_0
661 633
662 634 /*
663 635 * ISP24xx queue - Login/Logout Port IOCB structure definition.
664 636 */
665 637 #define LOG_TYPE 0x52
666 638 typedef struct log_entry {
667 - uint8_t entry_type; /* Entry type. */
668 - uint8_t entry_count; /* Entry count. */
669 - uint8_t sys_define; /* System defined. */
670 - uint8_t entry_status; /* Entry Status. */
639 + uint8_t entry_type; /* Entry type. */
640 + uint8_t entry_count; /* Entry count. */
641 + uint8_t sys_define; /* System defined. */
642 + uint8_t entry_status; /* Entry Status. */
671 643 uint32_t handle; /* System handle */
672 644 uint16_t status;
673 645 uint16_t n_port_hdl;
674 646 uint16_t control_flags;
675 - uint8_t vp_index;
676 - uint8_t reserved;
677 - uint8_t port_id[3];
678 - uint8_t rsp_size;
647 + uint8_t vp_index;
648 + uint8_t reserved;
649 + uint8_t port_id[3];
650 + uint8_t rsp_size;
679 651 uint32_t io_param[11];
680 652 } log_entry_t;
681 653
682 654 /*
683 655 * ISP24xx control flag commands
684 656 */
685 657 #define CF_CMD_PLOGI 0x00
686 658 #define CF_CMD_PRLI 0x01
687 659 #define CF_CMD_PDISC 0x02
688 660 #define CF_CMD_ADISC 0x03
689 661 #define CF_CMD_LOGO 0x08
690 662 #define CF_CMD_PRLO 0x09
691 663 #define CF_CMD_TPRLO 0x0A
692 664
693 665 /*
694 666 * ISP24xx control flag command options
695 667 */
696 668 #define CFO_COND_PLOGI BIT_4
697 669 #define CFO_SKIP_PRLI BIT_5
698 670 #define CFO_COMMON_FEATURES BIT_7
699 671 #define CFO_CLASS_2 BIT_8
700 672 #define CFO_FCP_2_OVR BIT_9
701 673
702 674 #define CFO_IMPLICIT_LOGO BIT_4
703 675 #define CFO_IMPLICIT_LOGO_ALL BIT_5
704 676 #define CFO_EXPLICIT_LOGO BIT_6
705 677 #define CFO_FREE_N_PORT_HANDLE BIT_7
706 678
707 679 #define CFO_IMPLICIT_PRLO BIT_4
708 680
709 681 /*
710 682 * ISP24xx Login/Logout Status Sub Codes in in I/O Parameter 0 field.
711 683 */
712 684 #define CS0_NO_LINK 0x01
713 685 #define CS0_NO_IOCB 0x02
714 686 #define CS0_NO_EXCH_CTRL_BLK 0x03
715 687 #define CS0_COMMAND_FAILED 0x04
716 688 #define CS0_NO_FABRIC_PRESENT 0x05
717 689 #define CS0_FIRMWARE_NOT_READY 0x07
718 690 #define CS0_PORT_NOT_LOGGED_IN 0x09
719 691 #define CS0_NO_PCB_ALLOCATED 0x0A
720 692 #define CS0_ELS_REJECT_RECEIVED 0x18
721 693 #define CS0_CMD_PARAMETER_ERROR 0x19
722 694 #define CS0_PORT_ID_USED 0x1A
723 695 #define CS0_N_PORT_HANDLE_USED 0x1B
724 696 #define CS0_NO_N_PORT_HANDLE_AVAILABLE 0x1C
725 697 #define CS0_NO_FLOGI_ACC 0x1F
726 698
727 699 /*
728 700 * ISP24xx Login/Logout Status Sub Codes in in I/O Parameter 1 field.
729 701 */
730 702 #define CS1_PLOGI_FAILED 0x02
731 703 #define CS1_PLOGI_RESPONSE_FAILED 0x03
|
↓ open down ↓ |
43 lines elided |
↑ open up ↑ |
732 704 #define CS1_PRLI_FAILED 0x04
733 705 #define CS1_PRLI_RESPONSE_FAILED 0x05
734 706 #define CS1_COMMAND_LOGGED_OUT 0x07
735 707
736 708 /*
737 709 * ISP queue - Enable LUN with extended LUN support
738 710 * entry structure definition.
739 711 */
740 712 #define ENABLE_LUN_TYPE 0xB /* Enable LUN entry */
741 713 typedef struct enable_lun_entry {
742 - uint8_t entry_type; /* Entry type. */
743 - uint8_t entry_count; /* Entry count. */
744 - uint8_t sys_define; /* System defined. */
745 - uint8_t entry_status; /* Entry Status. */
714 + uint8_t entry_type; /* Entry type. */
715 + uint8_t entry_count; /* Entry count. */
716 + uint8_t sys_define; /* System defined. */
717 + uint8_t entry_status; /* Entry Status. */
746 718 uint32_t handle; /* System handle */
747 - uint8_t reserved[8];
748 - uint8_t status;
749 - uint8_t reserved_1;
750 - uint8_t command_count;
751 - uint8_t immediate_notify_count;
752 - uint8_t reserved_2[2];
753 - uint8_t timeout_l; /* Timeout - LSB. */
754 - uint8_t timeout_h; /* Timeout - MSB. */
755 - uint8_t reserved_3[40];
719 + uint8_t reserved[8];
720 + uint8_t status;
721 + uint8_t reserved_1;
722 + uint8_t command_count;
723 + uint8_t immediate_notify_count;
724 + uint8_t reserved_2[2];
725 + uint8_t timeout_l; /* Timeout - LSB. */
726 + uint8_t timeout_h; /* Timeout - MSB. */
727 + uint8_t reserved_3[40];
756 728 } enable_lun_entry_t;
757 729
758 730 /*
759 731 * ISP queue - Modify LUN with extended LUN support
760 732 * entry structure definition.
761 733 */
762 734 #define MODIFY_LUN_TYPE 0xC /* Modify LUN entry */
763 735 typedef struct modify_lun_entry {
764 - uint8_t entry_type; /* Entry type. */
765 - uint8_t entry_count; /* Entry count. */
766 - uint8_t sys_define; /* System defined. */
767 - uint8_t entry_status; /* Entry Status. */
736 + uint8_t entry_type; /* Entry type. */
737 + uint8_t entry_count; /* Entry count. */
738 + uint8_t sys_define; /* System defined. */
739 + uint8_t entry_status; /* Entry Status. */
768 740 uint32_t handle; /* System handle */
769 - uint8_t reserved[2];
770 - uint8_t operators;
771 - uint8_t reserved_1[5];
772 - uint8_t status;
773 - uint8_t reserved_2;
774 - uint8_t command_count;
775 - uint8_t immediate_notify_count;
776 - uint8_t reserved_3[2];
777 - uint8_t timeout_l; /* Timeout - LSB. */
778 - uint8_t timeout_h; /* Timeout - MSB. */
779 - uint8_t reserved_4[40];
741 + uint8_t reserved[2];
742 + uint8_t operators;
743 + uint8_t reserved_1[5];
744 + uint8_t status;
745 + uint8_t reserved_2;
746 + uint8_t command_count;
747 + uint8_t immediate_notify_count;
748 + uint8_t reserved_3[2];
749 + uint8_t timeout_l; /* Timeout - LSB. */
750 + uint8_t timeout_h; /* Timeout - MSB. */
751 + uint8_t reserved_4[40];
780 752 } modify_lun_entry_t;
781 753
782 754 /*
783 755 * ISP queue - Immediate Notify with extended LUN support
784 756 * entry structure definition.
785 757 */
786 758 #define IMMEDIATE_NOTIFY_TYPE 0xD /* Immediate notify entry */
787 759 typedef struct immediate_notify_entry {
788 - uint8_t entry_type; /* Entry type. */
789 - uint8_t entry_count; /* Entry count. */
790 - uint8_t sys_define; /* System defined. */
791 - uint8_t entry_status; /* Entry Status. */
760 + uint8_t entry_type; /* Entry type. */
761 + uint8_t entry_count; /* Entry count. */
762 + uint8_t sys_define; /* System defined. */
763 + uint8_t entry_status; /* Entry Status. */
792 764 uint32_t handle; /* System handle */
793 - uint8_t initiator_id_l;
794 - uint8_t initiator_id_h;
795 - uint8_t lun_l;
796 - uint8_t lun_h;
797 - uint8_t reserved_1[4];
765 + uint8_t initiator_id_l;
766 + uint8_t initiator_id_h;
767 + uint8_t lun_l;
768 + uint8_t lun_h;
769 + uint8_t reserved_1[4];
798 770 uint16_t status;
799 - uint8_t task_flags_l;
800 - uint8_t task_flags_h;
771 + uint8_t task_flags_l;
772 + uint8_t task_flags_h;
801 773 uint16_t sequence_id;
802 - uint8_t reserved_3[40];
774 + uint8_t reserved_3[40];
803 775 uint16_t ox_id;
804 776 } immediate_notify_entry_t;
805 777
806 778 /*
807 779 * ISP24xx queue - Immediate Notify IOCB structure definition.
808 780 */
809 781 typedef struct immd_notify_24xx_entry {
810 - uint8_t entry_type; /* Entry type. */
811 - uint8_t entry_count; /* Entry count. */
812 - uint8_t sys_define; /* System defined. */
813 - uint8_t entry_status; /* Entry Status. */
782 + uint8_t entry_type; /* Entry type. */
783 + uint8_t entry_count; /* Entry count. */
784 + uint8_t sys_define; /* System defined. */
785 + uint8_t entry_status; /* Entry Status. */
814 786 uint32_t reserved;
815 787 uint16_t n_port_hdl;
816 788 uint16_t reserved_1;
817 789 uint16_t flags;
818 790 uint16_t srr_rx_id;
819 791 uint16_t status;
820 - uint8_t status_subcode;
821 - uint8_t reserved_2;
792 + uint8_t status_subcode;
793 + uint8_t reserved_2;
822 794 uint32_t receive_exchange_address;
823 795 uint32_t srr_relative_offset;
824 796 uint16_t srr_iu;
825 797 uint16_t srr_ox_id;
826 - uint8_t reserved_3[19];
827 - uint8_t vp_index;
828 - uint8_t reserved_4[10];
798 + uint8_t reserved_3[19];
799 + uint8_t vp_index;
800 + uint8_t reserved_4[10];
829 801 uint16_t ox_id;
830 802 } immd_notify_24xx_entry_t;
831 803
832 804 /*
833 805 * ISP queue - Notify Acknowledge extended LUN support
834 806 * entry structure definition.
835 807 */
836 808 #define NOTIFY_ACKNOWLEDGE_TYPE 0xE /* Immediate notify entry */
837 809 typedef struct notify_acknowledge_entry {
838 - uint8_t entry_type; /* Entry type. */
839 - uint8_t entry_count; /* Entry count. */
840 - uint8_t sys_define; /* System defined. */
841 - uint8_t entry_status; /* Entry Status. */
810 + uint8_t entry_type; /* Entry type. */
811 + uint8_t entry_count; /* Entry count. */
812 + uint8_t sys_define; /* System defined. */
813 + uint8_t entry_status; /* Entry Status. */
842 814 uint32_t handle; /* System handle */
843 - uint8_t initiator_id_l;
844 - uint8_t initiator_id_h;
845 - uint8_t reserved_1[2];
846 - uint8_t flags_l;
847 - uint8_t flags_h;
848 - uint8_t reserved_2[2];
815 + uint8_t initiator_id_l;
816 + uint8_t initiator_id_h;
817 + uint8_t reserved_1[2];
818 + uint8_t flags_l;
819 + uint8_t flags_h;
820 + uint8_t reserved_2[2];
849 821 uint16_t status;
850 - uint8_t task_flags_l;
851 - uint8_t task_flags_h;
822 + uint8_t task_flags_l;
823 + uint8_t task_flags_h;
852 824 uint16_t sequence_id;
853 - uint8_t reserved_3[42];
825 + uint8_t reserved_3[42];
854 826 } notify_acknowledge_entry_t;
855 827
856 828 /*
857 829 * ISP24xx queue - Notify Acknowledge IOCB structure definition.
858 830 */
859 831 typedef struct notify_ack_24xx_entry {
860 - uint8_t entry_type; /* Entry type. */
861 - uint8_t entry_count; /* Entry count. */
862 - uint8_t sys_define; /* System defined. */
863 - uint8_t entry_status; /* Entry Status. */
832 + uint8_t entry_type; /* Entry type. */
833 + uint8_t entry_count; /* Entry count. */
834 + uint8_t sys_define; /* System defined. */
835 + uint8_t entry_status; /* Entry Status. */
864 836 uint32_t handle;
865 837 uint16_t n_port_hdl;
866 838 uint16_t reserved_1;
867 839 uint16_t flags;
868 840 uint16_t srr_rx_id;
869 841 uint16_t status;
870 - uint8_t status_subcode;
871 - uint8_t reserved_2;
842 + uint8_t status_subcode;
843 + uint8_t reserved_2;
872 844 uint32_t receive_exchange_address;
873 845 uint32_t srr_relative_offset;
874 846 uint16_t srr_iu;
875 847 uint16_t srr_flags;
876 - uint8_t reserved_3[19];
877 - uint8_t vp_index;
878 - uint8_t srr_reject_vendor_unique;
879 - uint8_t srr_reject_code_explanation;
880 - uint8_t srr_reject_code;
881 - uint8_t reserved_4[7];
848 + uint8_t reserved_3[19];
849 + uint8_t vp_index;
850 + uint8_t srr_reject_vendor_unique;
851 + uint8_t srr_reject_code_explanation;
852 + uint8_t srr_reject_code;
853 + uint8_t reserved_4[7];
882 854 uint16_t ox_id;
883 855 } notify_ack_24xx_entry_t;
884 856
885 857 /*
886 858 * ISP queue - Accept Target I/O with extended LUN support
887 859 * entry structure definition.
888 860 */
889 861 #define ATIO_TYPE 0x16 /* ATIO entry */
890 862 typedef struct atio_entry {
891 863 uint8_t entry_type; /* Entry type. */
892 864 uint8_t entry_count; /* Entry count. */
893 865 uint8_t sys_define; /* System defined. */
894 866 uint8_t entry_status; /* Entry Status. */
895 867 uint32_t handle; /* System handle */
896 868 uint8_t initiator_id_l;
897 869 uint8_t initiator_id_h;
898 870 uint16_t rx_id;
899 871 uint8_t flags_l;
900 872 uint8_t flags_h;
901 873 uint16_t status;
902 874 uint8_t reserved_1;
903 875 uint8_t task_codes : 3,
904 876 reserved_2 : 5;
905 877 uint8_t task_flags;
906 878 uint8_t execution_codes;
907 879 uint8_t cdb[MAX_CMDSZ];
908 880 uint32_t data_length;
909 881 uint8_t lun_l;
|
↓ open down ↓ |
18 lines elided |
↑ open up ↑ |
910 882 uint8_t lun_h;
911 883 uint8_t reserved_3[20];
912 884 uint16_t ox_id;
913 885 } atio_entry_t;
914 886
915 887 /*
916 888 * ISP24xx queue - Accept Target I/O IOCB structure definition.
917 889 */
918 890 #define ATIO_24xx_TYPE 0x06
919 891 typedef struct atio_24xx_entry {
920 - uint8_t entry_type; /* Entry type. */
921 - uint8_t entry_count; /* Entry count. */
892 + uint8_t entry_type; /* Entry type. */
893 + uint8_t entry_count; /* Entry count. */
922 894 uint16_t len_attr; /* System defined. */
923 895 uint32_t receive_exchange_address;
924 - uint8_t frame_hdr[24];
925 - uint8_t payload[32];
896 + uint8_t frame_hdr[24];
897 + uint8_t payload[32];
926 898 } atio_24xx_entry_t;
927 899
928 900 /*
929 901 * ISP queue - Continue Target I/O with extended LUN support
930 902 * entry structure definition.
931 903 */
932 -#define CTIO_TYPE_2 0x17
933 -#define CTIO_TYPE_3 0x1F
904 +#define CTIO_TYPE_2 0x17
905 +#define CTIO_TYPE_3 0x1F
934 906 typedef struct ctio_entry {
935 - uint8_t entry_type; /* Entry type. */
936 - uint8_t entry_count; /* Entry count. */
937 - uint8_t sys_define; /* System defined. */
938 - uint8_t entry_status; /* Entry Status. */
907 + uint8_t entry_type; /* Entry type. */
908 + uint8_t entry_count; /* Entry count. */
909 + uint8_t sys_define; /* System defined. */
910 + uint8_t entry_status; /* Entry Status. */
939 911 uint32_t handle; /* System handle */
940 - uint8_t initiator_id_l;
941 - uint8_t initiator_id_h;
912 + uint8_t initiator_id_l;
913 + uint8_t initiator_id_h;
942 914 uint16_t rx_id;
943 - uint8_t flags_l;
944 - uint8_t flags_h;
915 + uint8_t flags_l;
916 + uint8_t flags_h;
945 917 uint16_t status;
946 918 uint16_t timeout;
947 - uint8_t dseg_count_l;
948 - uint8_t dseg_count_h;
919 + uint8_t dseg_count_l;
920 + uint8_t dseg_count_h;
949 921 uint32_t relative_offset;
950 922 uint32_t residual_transfer_length;
951 - uint8_t reserved_1[4];
923 + uint8_t reserved_1[4];
952 924
953 925 union {
954 926 struct {
955 - uint8_t reserved_2[2];
956 - uint8_t scsi_status_l;
957 - uint8_t scsi_status_h;
927 + uint8_t reserved_2[2];
928 + uint8_t scsi_status_l;
929 + uint8_t scsi_status_h;
958 930 uint32_t byte_count;
959 - uint32_t dseg_0_address;
960 - uint32_t dseg_0_length;
961 - uint32_t dseg_1_address;
962 - uint32_t dseg_1_length;
963 - uint32_t dseg_2_address;
964 - uint32_t dseg_2_length;
931 + ql_32bit_data_seg_t dseg[3];
965 932 }s0_32bit;
966 933
967 934 struct {
968 - uint8_t reserved_3[2];
969 - uint8_t scsi_status_l;
970 - uint8_t scsi_status_h;
935 + uint8_t reserved_3[2];
936 + uint8_t scsi_status_l;
937 + uint8_t scsi_status_h;
971 938 uint32_t byte_count;
972 - uint32_t dseg_0_address[2];
973 - uint32_t dseg_0_length;
974 - uint32_t dseg_1_address[2];
975 - uint32_t dseg_1_length;
939 + ql_64bit_data_seg_t dseg[2];
976 940 }s0_64bit;
977 941
978 942 struct {
979 - uint8_t sense_length_l;
980 - uint8_t sense_length_h;
981 - uint8_t scsi_status_l;
982 - uint8_t scsi_status_h;
983 - uint8_t response_length_l;
984 - uint8_t response_length_h;
985 - uint8_t response_info[26];
943 + uint8_t sense_length_l;
944 + uint8_t sense_length_h;
945 + uint8_t scsi_status_l;
946 + uint8_t scsi_status_h;
947 + uint8_t response_length_l;
948 + uint8_t response_length_h;
949 + uint8_t response_info[26];
986 950 }s1;
987 951
988 952 struct {
989 - uint8_t reserved_4[2];
953 + uint8_t reserved_4[2];
990 954 uint32_t response_length;
991 955 uint32_t response_pointer;
992 - uint8_t reserved[16];
956 + uint8_t reserved[16];
993 957 }s2;
994 958 }type;
995 959 } ctio_entry_t;
996 960
997 961 /*
998 962 * ISP24xx queue - Continue Target I/O IOCBs from the System
999 963 * Target Driver structure definition.
1000 964 */
1001 965 #define CTIO_24xx_TYPE 0x12
1002 966 typedef struct ctio_snd_entry {
1003 - uint8_t entry_type; /* Entry type. */
1004 - uint8_t entry_count; /* Entry count. */
1005 - uint8_t sys_define; /* System defined. */
1006 - uint8_t entry_status; /* Entry Status. */
967 + uint8_t entry_type; /* Entry type. */
968 + uint8_t entry_count; /* Entry count. */
969 + uint8_t sys_define; /* System defined. */
970 + uint8_t entry_status; /* Entry Status. */
1007 971 uint32_t handle;
1008 972 uint16_t n_port_hdl;
1009 973 uint16_t timeout;
1010 974 uint16_t dseg_count;
1011 - uint8_t vp_index;
1012 - uint8_t flags;
975 + uint8_t vp_index;
976 + uint8_t flags;
1013 977 uint8_t initiator_id[3];
1014 - uint8_t reserved_1;
978 + uint8_t reserved_1;
1015 979 uint32_t receive_exchange_address;
1016 980
1017 981 union {
1018 982 struct {
1019 983 uint16_t reserved_2;
1020 984 uint16_t flags;
1021 985 uint32_t residual_length;
1022 986 uint16_t ox_id;
1023 987 uint16_t scsi_status;
1024 988 uint32_t relative_offset;
1025 989 uint32_t reserved_3;
1026 990 uint32_t transfer_length;
1027 991 uint32_t reserved_4;
1028 - uint32_t dseg_0_address_l;
1029 - uint32_t dseg_0_address_h;
1030 - uint32_t dseg_0_length;
992 + ql_64bit_data_seg_t dseg;
1031 993 }s0;
1032 994
1033 995 struct {
1034 996 uint16_t sense_length;
1035 997 uint16_t flags;
1036 998 uint32_t residual_length;
1037 999 uint16_t ox_id;
1038 1000 uint16_t scsi_status;
1039 1001 uint16_t response_length;
1040 1002 uint16_t reserved_2;
1041 - uint8_t rsp_sense_data[24];
1003 + uint8_t rsp_sense_data[24];
1042 1004 }s1;
1043 1005
1044 1006 struct {
1045 1007 uint16_t reserved_2;
1046 1008 uint16_t flags;
1047 1009 uint32_t residual_length;
1048 1010 uint16_t ox_id;
1049 - uint8_t reserved_3[10];
1011 + uint8_t reserved_3[10];
1050 1012 uint32_t transfer_length;
1051 1013 uint32_t reserved_4;
1052 - uint32_t dseg_0_address_l;
1053 - uint32_t dseg_0_address_h;
1054 - uint32_t dseg_0_length;
1014 + ql_64bit_data_seg_t dseg;
1055 1015 }s2;
1056 1016 }type;
1057 1017 } ctio_snd_entry_t;
1058 1018
1059 1019 /*
1060 1020 * ISP24xx queue - Continue Target I/O IOCBs from the ISP24xx
1061 1021 * Firmware structure definition.
1062 1022 */
1063 1023 typedef struct ctio_rcv_entry {
1064 - uint8_t entry_type; /* Entry type. */
1065 - uint8_t entry_count; /* Entry count. */
1066 - uint8_t sys_define; /* System defined. */
1067 - uint8_t entry_status; /* Entry Status. */
1024 + uint8_t entry_type; /* Entry type. */
1025 + uint8_t entry_count; /* Entry count. */
1026 + uint8_t sys_define; /* System defined. */
1027 + uint8_t entry_status; /* Entry Status. */
1068 1028 uint32_t handle;
1069 1029 uint16_t status;
1070 1030 uint16_t timeout;
1071 1031 uint16_t dseg_count;
1072 - uint8_t reserved[6];
1032 + uint8_t reserved[6];
1073 1033
1074 - uint8_t vp_index;
1075 - uint8_t flags;
1034 + uint8_t vp_index;
1035 + uint8_t flags;
1076 1036 uint8_t initiator_id[3];
1077 - uint8_t reserved_1;
1037 + uint8_t reserved_1;
1078 1038 uint32_t receive_exchange_address;
1079 1039
1080 1040 union {
1081 1041 struct {
1082 1042 uint16_t reserved_2;
1083 1043 uint16_t flags;
1084 1044 uint32_t residual_length;
1085 1045 uint16_t ox_id;
1086 1046 uint16_t scsi_status;
1087 1047 uint32_t relative_offset;
1088 1048 uint32_t reserved_3;
1089 1049 uint32_t transfer_length;
1090 1050 uint32_t reserved_4;
1091 - uint32_t dseg_0_address_l;
1092 - uint32_t dseg_0_address_h;
1093 - uint32_t dseg_0_length;
1051 + ql_64bit_data_seg_t dseg;
1094 1052 }s0;
1095 1053
1096 1054 struct {
1097 1055 uint16_t sense_length;
1098 1056 uint16_t flags;
1099 1057 uint32_t residual_length;
1100 1058 uint16_t ox_id;
1101 1059 uint16_t scsi_status;
1102 1060 uint16_t response_length;
1103 1061 uint16_t reserved_2;
1104 - uint8_t rsp_sense_data[24];
1062 + uint8_t rsp_sense_data[24];
1105 1063 }s1;
1106 1064
1107 1065 struct {
1108 1066 uint16_t reserved_2;
1109 1067 uint16_t flags;
1110 1068 uint32_t residual_length;
1111 1069 uint16_t ox_id;
1112 - uint8_t reserved_3[10];
1070 + uint8_t reserved_3[10];
1113 1071 uint32_t transfer_length;
1114 1072 uint32_t reserved_4;
1115 - uint32_t dseg_0_address_l;
1116 - uint32_t dseg_0_address_h;
1117 - uint32_t dseg_0_length;
1073 + ql_64bit_data_seg_t dseg;
1118 1074 }s2;
1119 1075 }type;
1120 1076 } ctio_rcv_entry_t;
1121 1077
1122 1078 /*
1123 1079 * ISP queue - 32-Bit DMA addressing IP entry structure definition.
1124 1080 */
1125 1081 #define IP_TYPE 0x13
1126 1082 #define IP_DATA_SEGMENTS 3 /* Number of data segments. */
1127 1083 typedef struct ip_entry {
1128 - uint8_t entry_type; /* Entry type. */
1129 - uint8_t entry_count; /* Entry count. */
1130 - uint8_t sys_define; /* System defined. */
1131 - uint8_t entry_status; /* Entry Status. */
1084 + uint8_t entry_type; /* Entry type. */
1085 + uint8_t entry_count; /* Entry count. */
1086 + uint8_t sys_define; /* System defined. */
1087 + uint8_t entry_status; /* Entry Status. */
1132 1088 uint32_t handle; /* System handle */
1133 - uint8_t loop_id_l; /* device id - LSB */
1134 - uint8_t loop_id_h; /* device id - MSB */
1089 + uint8_t loop_id_l; /* device id - LSB */
1090 + uint8_t loop_id_h; /* device id - MSB */
1135 1091 uint16_t comp_status; /* Completion status. */
1136 - uint8_t control_flags_l; /* Control flags - LSB. */
1137 - uint8_t control_flags_h; /* Control flags - MSB. */
1138 - uint8_t reserved_1[2];
1092 + uint8_t control_flags_l; /* Control flags - LSB. */
1093 + uint8_t control_flags_h; /* Control flags - MSB. */
1094 + uint8_t reserved_1[2];
1139 1095 uint16_t timeout; /* Command timeout. */
1140 1096 uint16_t dseg_count; /* Data segment count. */
1141 - uint8_t reserved_2[16];
1097 + uint8_t reserved_2[16];
1142 1098 uint32_t byte_count; /* Total byte count. */
1143 - uint32_t dseg_0_address; /* Data segment 0 address. */
1144 - uint32_t dseg_0_length; /* Data segment 0 length. */
1145 - uint32_t dseg_1_address; /* Data segment 1 address. */
1146 - uint32_t dseg_1_length; /* Data segment 1 length. */
1147 - uint32_t dseg_2_address; /* Data segment 2 address. */
1148 - uint32_t dseg_2_length; /* Data segment 2 length. */
1099 + ql_32bit_data_seg_t dseg[3]; /* Data segments. */
1149 1100 } ip_entry_t;
1150 1101
1151 1102 /*
1152 1103 * ISP queue - 64-Bit DMA addressing IP entry structure definition.
1153 1104 */
1154 1105 #define IP_A64_TYPE 0x1B
1155 1106 #define IP_A64_DATA_SEGMENTS 2 /* Number of data segments. */
1156 1107 typedef struct ip_a64_entry {
1157 - uint8_t entry_type; /* Entry type. */
1158 - uint8_t entry_count; /* Entry count. */
1159 - uint8_t sys_define; /* System defined. */
1160 - uint8_t entry_status; /* Entry Status. */
1108 + uint8_t entry_type; /* Entry type. */
1109 + uint8_t entry_count; /* Entry count. */
1110 + uint8_t sys_define; /* System defined. */
1111 + uint8_t entry_status; /* Entry Status. */
1161 1112 uint32_t handle; /* System handle */
1162 - uint8_t reserved;
1163 - uint8_t loop_id; /* Loop ID */
1113 + uint8_t reserved;
1114 + uint8_t loop_id; /* Loop ID */
1164 1115 uint16_t comp_status; /* Completion status. */
1165 - uint8_t control_flags_l; /* Control flags - LSB. */
1166 - uint8_t control_flags_h; /* Control flags - MSB. */
1167 - uint8_t reserved_1[2];
1116 + uint8_t control_flags_l; /* Control flags - LSB. */
1117 + uint8_t control_flags_h; /* Control flags - MSB. */
1118 + uint8_t reserved_1[2];
1168 1119 uint16_t timeout; /* Command timeout. */
1169 1120 uint16_t dseg_count; /* Data segment count. */
1170 - uint8_t reserved_2[16];
1121 + uint8_t reserved_2[16];
1171 1122 uint32_t byte_count; /* Total byte count. */
1172 - uint32_t dseg_0_address[2]; /* Data segment 0 address. */
1173 - uint32_t dseg_0_length; /* Data segment 0 length. */
1174 - uint32_t dseg_1_address[2]; /* Data segment 1 address. */
1175 - uint32_t dseg_1_length; /* Data segment 1 length. */
1123 + ql_64bit_data_seg_t dseg[2]; /* Data segments. */
1176 1124 } ip_a64_entry_t;
1177 1125
1178 1126 /*
1179 1127 * ISP24xx queue - IP command entry structure definition.
1180 1128 */
1181 1129 #define IP_CMD_TYPE 0x3B
1182 1130 #define IP_CMD_DATA_SEGMENTS 1
1183 1131 typedef struct ip_cmd_entry {
1184 - uint8_t entry_type; /* Entry type. */
1185 - uint8_t entry_count; /* Entry count. */
1186 - uint8_t sys_define; /* System defined. */
1187 - uint8_t entry_status; /* Entry Status. */
1132 + uint8_t entry_type; /* Entry type. */
1133 + uint8_t entry_count; /* Entry count. */
1134 + uint8_t sys_define; /* System defined. */
1135 + uint8_t entry_status; /* Entry Status. */
1188 1136 uint32_t handle; /* System handle. */
1189 1137 uint16_t hdl_status; /* N_port hdl or Completion status */
1190 1138 uint16_t timeout_hdl; /* N_port hdl or Command timeout */
1191 1139 uint16_t dseg_count; /* Data segment count. */
1192 - uint8_t reserved_1[6];
1140 + uint8_t reserved_1[6];
1193 1141 uint32_t exch_addr;
1194 1142 uint16_t control_flags;
1195 1143 uint16_t frame_hdr_cntrl_flgs;
1196 - uint8_t reserved_2[12];
1144 + uint8_t reserved_2[12];
1197 1145 uint32_t sys_define_2;
1198 1146 uint32_t byte_count; /* Total byte count. */
1199 - uint8_t reserved_3[4];
1200 - uint32_t dseg_0_address[2]; /* Data segment 0 address. */
1201 - uint32_t dseg_0_length; /* Data segment 0 length. */
1147 + uint8_t reserved_3[4];
1148 + ql_64bit_data_seg_t dseg; /* Data segments. */
1202 1149 } ip_cmd_entry_t;
1203 1150
1204 1151 /*
1205 1152 * IP command Control Flags.
1206 1153 */
1207 1154 #define IPCF_TERMINATE_EXCH BIT_1
1208 1155 /*
1209 1156 * IP command Frame Header Control Flags.
1210 1157 */
1211 1158 #define IPCF_FIRST_SEQ BIT_5
1212 1159 #define IPCF_LAST_SEQ BIT_4
1213 1160
1214 1161 /*
1215 1162 * ISP queue - Receive IP buffer entry structure definition.
1216 1163 */
1217 1164 #define IP_RCVBUF_HANDLES 24 /* Buffer handles in entry. */
1218 1165 #define IP_RECEIVE_TYPE 0x23 /* IP receive entry */
1219 1166 typedef struct ip_rcv_entry {
1220 - uint8_t entry_type; /* Entry type. */
1221 - uint8_t entry_count; /* Entry count. */
1222 - uint8_t segment_count; /* Segment count. */
1223 - uint8_t entry_status; /* Entry Status. */
1224 - uint8_t s_id[3]; /* Source ID. */
1225 - uint8_t reserved[2];
1226 - uint8_t loop_id; /* Loop ID */
1167 + uint8_t entry_type; /* Entry type. */
1168 + uint8_t entry_count; /* Entry count. */
1169 + uint8_t segment_count; /* Segment count. */
1170 + uint8_t entry_status; /* Entry Status. */
1171 + uint8_t s_id[3]; /* Source ID. */
1172 + uint8_t reserved[2];
1173 + uint8_t loop_id; /* Loop ID */
1227 1174 uint16_t comp_status; /* Completion status. */
1228 - uint8_t class_of_srv_l; /* Class of service - LSB. */
1229 - uint8_t class_of_srv_h; /* Class of service - MSB. */
1175 + uint8_t class_of_srv_l; /* Class of service - LSB. */
1176 + uint8_t class_of_srv_h; /* Class of service - MSB. */
1230 1177 uint16_t seq_length; /* Sequence length. */
1231 1178 uint16_t buffer_handle[IP_RCVBUF_HANDLES]; /* Buffer handles. */
1232 1179 } ip_rcv_entry_t;
1233 1180
1234 1181 /*
1235 1182 * ISP queue - Receive IP buffer continuation entry structure definition.
1236 1183 */
1237 1184 #define IP_RCVBUF_CONT_HANDLES 30 /* Buffer handles in entry. */
1238 1185 #define IP_RECEIVE_CONT_TYPE 0x2B /* IP receive continuation entry */
1239 1186 typedef struct ip_rcv_cont_entry {
1240 - uint8_t entry_type; /* Entry type. */
1241 - uint8_t entry_count; /* Entry count. */
1242 - uint8_t reserved;
1243 - uint8_t entry_status; /* Entry Status. */
1187 + uint8_t entry_type; /* Entry type. */
1188 + uint8_t entry_count; /* Entry count. */
1189 + uint8_t reserved;
1190 + uint8_t entry_status; /* Entry Status. */
1244 1191 uint16_t buffer_handle[IP_RCVBUF_CONT_HANDLES]; /* Buf handles */
1245 1192 } ip_rcv_cont_entry_t;
1246 1193
1247 1194 /*
1248 1195 * ISP24xx queue - Receive IP buffer entry structure definition.
1249 1196 */
1250 1197 #define IP_24XX_RCVBUF_HANDLES 4
1251 1198 #define IP_24XX_RECEIVE_TYPE 0x3c
1252 1199 typedef struct ip_rcv_24xx_entry {
1253 - uint8_t entry_type; /* Entry type. */
1254 - uint8_t entry_count; /* Entry count. */
1255 - uint8_t segment_count; /* Segment count. */
1256 - uint8_t entry_status; /* Entry Status. */
1257 - uint8_t s_id[3]; /* Source ID. */
1258 - uint8_t reserved[1];
1200 + uint8_t entry_type; /* Entry type. */
1201 + uint8_t entry_count; /* Entry count. */
1202 + uint8_t segment_count; /* Segment count. */
1203 + uint8_t entry_status; /* Entry Status. */
1204 + uint8_t s_id[3]; /* Source ID. */
1205 + uint8_t reserved[1];
1259 1206 uint16_t comp_status; /* Completion status. */
1260 1207 uint16_t n_port_hdl; /* Loop ID */
1261 - uint8_t class_of_srv_l; /* Class of service - LSB. */
1262 - uint8_t class_of_srv_h; /* Class of service - MSB. */
1208 + uint8_t class_of_srv_l; /* Class of service - LSB. */
1209 + uint8_t class_of_srv_h; /* Class of service - MSB. */
1263 1210 uint16_t seq_length; /* Sequence length. */
1264 1211 uint16_t buffer_handle[IP_24XX_RCVBUF_HANDLES]; /* Buffer handles. */
1265 1212 } ip_rcv_24xx_entry_t;
1266 1213
1267 1214 /*
1268 1215 * ISP receive buffer container structure definition.
1269 1216 */
1270 1217 typedef struct rcvbuf {
1271 1218 uint32_t bufp[2]; /* Buffer pointer. */
1272 1219 uint16_t handle; /* Buffer handle. */
1273 1220 uint16_t reserved;
1274 1221 } rcvbuf_t;
1275 1222
1276 1223 /*
1277 1224 * ISP24xx queue - IP Load Buffer Pool entry structure definition.
1278 1225 */
1279 1226 #define IP_POOL_BUFFERS 4
1280 1227 #define IP_BUF_POOL_TYPE 0x3d
1281 -typedef struct ip_buf_pool_entry {
1282 - uint8_t entry_type; /* Entry type. */
1283 - uint8_t entry_count; /* Entry count. */
1284 - uint8_t sys_define; /* System defined. */
1285 - uint8_t entry_status; /* Entry Status. */
1228 +typedef struct ip_buf_pool_entry {
1229 + uint8_t entry_type; /* Entry type. */
1230 + uint8_t entry_count; /* Entry count. */
1231 + uint8_t sys_define; /* System defined. */
1232 + uint8_t entry_status; /* Entry Status. */
1286 1233 uint32_t handle; /* System handle */
1287 1234 uint16_t status;
1288 1235 uint16_t buffer_pool_id;
1289 1236 uint16_t option;
1290 - uint8_t buffer_count;
1291 - uint8_t buffer_count_h;
1237 + uint8_t buffer_count;
1238 + uint8_t buffer_count_h;
1292 1239 rcvbuf_t buffers[IP_POOL_BUFFERS];
1293 1240 } ip_buf_pool_entry_t;
1294 1241 /*
1295 1242 * ISP2400 queue - Virtual Port Modify IOCB structure definition.
1296 1243 */
1297 1244 #define VP_MODIFY_TYPE 0x31
1298 1245 typedef struct vp_modify_entry {
1299 - uint8_t entry_type; /* Entry type. */
1300 - uint8_t entry_count; /* Entry count. */
1301 - uint8_t sys_define; /* System defined. */
1302 - uint8_t entry_status; /* Entry Status. */
1246 + uint8_t entry_type; /* Entry type. */
1247 + uint8_t entry_count; /* Entry count. */
1248 + uint8_t sys_define; /* System defined. */
1249 + uint8_t entry_status; /* Entry Status. */
1303 1250 uint32_t handle; /* System handle */
1304 1251 uint16_t reserved;
1305 1252 uint16_t status;
1306 - uint8_t command;
1307 - uint8_t vp_count;
1308 - uint8_t first_vp_index;
1309 - uint8_t second_vp_index;
1310 - uint8_t first_options;
1311 - uint8_t first_hard_prev_addr;
1312 - uint8_t reserved_2[2];
1313 - uint8_t first_port_name[8];
1314 - uint8_t first_node_name[8];
1315 - uint8_t second_options;
1316 - uint8_t second_hard_prev_addr;
1317 - uint8_t reserved_3[2];
1318 - uint8_t second_port_name[8];
1319 - uint8_t second_node_name[8];
1320 - uint8_t reserved_4[6];
1253 + uint8_t command;
1254 + uint8_t vp_count;
1255 + uint8_t first_vp_index;
1256 + uint8_t second_vp_index;
1257 + uint8_t first_options;
1258 + uint8_t first_hard_prev_addr;
1259 + uint8_t reserved_2[2];
1260 + uint8_t first_port_name[8];
1261 + uint8_t first_node_name[8];
1262 + uint8_t second_options;
1263 + uint8_t second_hard_prev_addr;
1264 + uint8_t reserved_3[2];
1265 + uint8_t second_port_name[8];
1266 + uint8_t second_node_name[8];
1267 + uint8_t reserved_4[6];
1321 1268 uint16_t fcf_index;
1322 1269 } vp_modify_entry_t;
1323 1270
1324 1271 /*
1325 1272 * ISP2400 VP modify commands
1326 1273 */
1327 1274 #define VPM_MODIFY 0x0
1328 1275 #define VPM_MODIFY_ENABLE 0x1
1329 1276
1330 1277 /*
1331 1278 * ISP2400 queue - Virtual Port Control IOCB structure definition.
1332 1279 */
1333 1280 #define VP_CONTROL_TYPE 0x30
1334 1281 typedef struct vp_control_entry {
1335 - uint8_t entry_type; /* Entry type. */
1336 - uint8_t entry_count; /* Entry count. */
1337 - uint8_t sys_define; /* System defined. */
1338 - uint8_t entry_status; /* Entry Status. */
1282 + uint8_t entry_type; /* Entry type. */
1283 + uint8_t entry_count; /* Entry count. */
1284 + uint8_t sys_define; /* System defined. */
1285 + uint8_t entry_status; /* Entry Status. */
1339 1286 uint32_t handle; /* System handle */
1340 1287 uint16_t vp_index_failed;
1341 1288 uint16_t status;
1342 - uint8_t command;
1343 - uint8_t command_h;
1344 - uint8_t vp_count;
1345 - uint8_t vp_count_h;
1346 - uint8_t vp_index[16];
1347 - uint8_t reserved[30];
1289 + uint8_t command;
1290 + uint8_t command_h;
1291 + uint8_t vp_count;
1292 + uint8_t vp_count_h;
1293 + uint8_t vp_index[16];
1294 + uint8_t reserved[30];
1348 1295 uint16_t fcf_index;
1349 1296 } vp_control_entry_t;
1350 1297
1351 1298 /*
1352 1299 * ISP2400 VP control commands
1353 1300 */
1354 1301 #define VPC_ENABLE 0x0
1355 1302 #define VPC_DISABLE 0x8
1356 1303 #define VPC_DISABLE_INIT 0x9 /* Only 2400 & 2500 */
1357 1304 #define VPC_DISABLE_LOGOUT 0xa
1358 1305 #define VPC_DISABLE_LOGOUT_ALL 0xb
1359 1306
1360 1307 /*
1361 1308 * ISP2400 queue - Report ID Acquisition IOCB structure definition.
1362 1309 */
1363 1310 #define REPORT_ID_TYPE 0x32
1364 1311 typedef struct report_id_0 {
1365 - uint8_t entry_type; /* Entry type. */
1366 - uint8_t entry_count; /* Entry count. */
1367 - uint8_t sys_define; /* System defined. */
1368 - uint8_t entry_status; /* Entry Status. */
1312 + uint8_t entry_type; /* Entry type. */
1313 + uint8_t entry_count; /* Entry count. */
1314 + uint8_t sys_define; /* System defined. */
1315 + uint8_t entry_status; /* Entry Status. */
1369 1316 uint32_t handle; /* System handle */
1370 - uint8_t acq_cnt; /* format 0 acquired, format 1 count */
1371 - uint8_t setup; /* format 0 */
1372 - uint8_t reserved[2];
1373 - uint8_t port_id[3];
1374 - uint8_t format;
1375 - uint8_t vp_index[16];
1376 - uint8_t reserved_1[32];
1317 + uint8_t vp_acquired;
1318 + uint8_t vp_setup;
1319 + uint8_t reserved[2];
1320 + uint8_t port_id[3];
1321 + uint8_t format;
1322 + uint8_t vp_index[16];
1323 + uint8_t reserved_1[32];
1377 1324 } report_id_0_t;
1378 1325
1379 1326 typedef struct report_id_1 {
1380 - uint8_t entry_type; /* Entry type. */
1381 - uint8_t entry_count; /* Entry count. */
1382 - uint8_t sys_define; /* System defined. */
1383 - uint8_t entry_status; /* Entry Status. */
1327 + uint8_t entry_type; /* Entry type. */
1328 + uint8_t entry_count; /* Entry count. */
1329 + uint8_t sys_define; /* System defined. */
1330 + uint8_t entry_status; /* Entry Status. */
1384 1331 uint32_t handle; /* System handle */
1385 1332 uint16_t vp_count;
1386 - uint8_t vp_index;
1387 - uint8_t status;
1388 - uint8_t port_id[3];
1389 - uint8_t format;
1390 - uint8_t reserved[48];
1333 + uint8_t vp_index;
1334 + uint8_t vp_status;
1335 + uint8_t port_id[3];
1336 + uint8_t format;
1337 + uint8_t reserved[48];
1391 1338 } report_id_1_t;
1392 1339
1340 +typedef struct report_id_acq {
1341 + uint8_t entry_type; /* Entry type. */
1342 + uint8_t entry_count; /* Entry count. */
1343 + uint8_t sys_define; /* System defined. */
1344 + uint8_t entry_status; /* Entry Status. */
1345 + uint32_t handle; /* System handle */
1346 + uint8_t vp_acquired;
1347 + uint8_t vp_setup;
1348 + uint8_t vp_index;
1349 + uint8_t vp_status;
1350 + uint8_t port_id[3];
1351 + uint8_t format;
1352 + uint8_t status_subcode;
1353 + uint8_t flags;
1354 + uint16_t fip_flags;
1355 + uint16_t fcf_index;
1356 + uint16_t mac[3];
1357 + uint8_t reserved[4];
1358 + uint8_t ls_rjt_subcode;
1359 + uint8_t ls_rjt_explanation;
1360 + uint8_t ls_rjt_reason_code;
1361 + uint8_t reserved_1[29];
1362 +} report_id_acq_t;
1363 +
1393 1364 /*
1394 1365 * ISP2400 queue - Verify Menlo FW entry structure definition.
1395 1366 */
1396 1367 #define VERIFY_MENLO_TYPE 0x1b
1397 1368 typedef struct vfy_menlo_entry {
1398 - uint8_t entry_type; /* Entry type. */
1399 - uint8_t entry_count; /* Entry count. */
1400 - uint8_t sys_define; /* System defined. */
1401 - uint8_t entry_status; /* Entry Status. */
1369 + uint8_t entry_type; /* Entry type. */
1370 + uint8_t entry_count; /* Entry count. */
1371 + uint8_t sys_define; /* System defined. */
1372 + uint8_t entry_status; /* Entry Status. */
1402 1373 uint32_t handle; /* System handle */
1403 1374 uint16_t options_status;
1404 1375 uint16_t failure_code;
1405 1376 uint16_t dseg_count;
1406 1377 uint16_t reserved_1[3];
1407 1378 uint32_t fw_version;
1408 1379 uint32_t exch_addr;
1409 1380 uint32_t reserved_2[3];
1410 1381 uint32_t fw_size;
1411 1382 uint32_t fw_sequence_size;
1412 1383 uint32_t relative_offset;
1413 - uint32_t dseg_0_address[2]; /* Data segment 0 address. */
1414 - uint32_t dseg_0_length; /* Data segment 0 length. */
1384 + ql_64bit_data_seg_t dseg; /* Data segments. */
1415 1385 } vfy_menlo_entry_t;
1416 1386
1417 1387 /*
1418 1388 * Option Flags.
1419 1389 */
1420 1390 #define VMO_DSD_CHAINING BIT_15
1421 1391 #define VM_END_OF_DATA BIT_14
1422 1392 #define VMF_DIAGNOSTIC_FW BIT_3
1423 1393 #define VMF_DO_NOT_RESET BIT_2
1424 1394 #define VMF_FORCE_UPDATE_FW BIT_1
1425 1395 #define VMF_DO_NOT_UPDATE_FW BIT_0
1426 1396
1427 1397 /*
1428 1398 * ISP2400 queue - Access Menlo Data entry structure definition.
1429 1399 */
1430 1400 #define MENLO_DATA_TYPE 0x2b
1431 1401 typedef struct menlo_data_entry {
1432 - uint8_t entry_type; /* Entry type. */
1433 - uint8_t entry_count; /* Entry count. */
1434 - uint8_t sys_define; /* System defined. */
1435 - uint8_t entry_status; /* Entry Status. */
1402 + uint8_t entry_type; /* Entry type. */
1403 + uint8_t entry_count; /* Entry count. */
1404 + uint8_t sys_define; /* System defined. */
1405 + uint8_t entry_status; /* Entry Status. */
1436 1406 uint32_t handle; /* System handle */
1437 1407 uint16_t options_status;
1438 1408 uint16_t failure_code;
1439 1409 uint16_t dseg_count;
1440 1410 uint16_t reserved_1[3];
1441 1411 uint32_t parameter_1;
1442 1412 uint32_t parameter_2;
1443 1413 uint32_t parameter_3;
1444 1414 uint32_t reserved_2[3];
1445 1415 uint32_t total_byte_count;
1446 1416 uint32_t reserved_3;
1447 - uint32_t dseg_0_address[2]; /* Data segment 0 address. */
1448 - uint32_t dseg_0_length; /* Data segment 0 length. */
1417 + ql_64bit_data_seg_t dseg; /* Data segments. */
1449 1418 } menlo_data_entry_t;
1450 1419
1451 1420 /*
1452 1421 * Mailbox IOCB.
1453 1422 */
1454 1423 typedef union ql_mbx_iocb {
1455 1424 cmd_entry_t cmd;
1456 1425 cmd_3_entry_t cmd3;
1457 1426 cmd7_24xx_entry_t cmd24;
1458 1427 ms_entry_t ms;
1459 1428 ct_passthru_entry_t ms24;
1460 1429 abort_cmd_entry_t abo;
1461 1430 task_mgmt_entry_t mgmt;
1462 1431 sts_entry_t sts;
1463 1432 sts_24xx_entry_t sts24;
1464 1433 log_entry_t log;
1465 1434 vp_control_entry_t vpc;
1466 1435 vp_modify_entry_t vpm;
1467 1436 vfy_menlo_entry_t mvfy;
1468 1437 menlo_data_entry_t mdata;
1438 + els_passthru_entry_t els;
1469 1439 } ql_mbx_iocb_t;
1470 1440
1471 1441 /*
1472 1442 * Global Data in ql_iocb.c source file.
1473 1443 */
1474 1444
1475 1445 /*
1476 1446 * Global Function Prototypes in ql_iocb.c source file.
1477 1447 */
1478 1448 void ql_start_iocb(ql_adapter_state_t *, ql_srb_t *);
1479 -void ql_isp_cmd(ql_adapter_state_t *);
1480 -int ql_marker(ql_adapter_state_t *, uint16_t, uint16_t, uint8_t);
1449 +int ql_marker(ql_adapter_state_t *, uint16_t, ql_lun_t *lq, uint8_t);
1481 1450 void ql_isp_rcvbuf(ql_adapter_state_t *);
1482 -void ql_command_iocb(ql_adapter_state_t *, ql_srb_t *, void *);
1483 -void ql_ms_iocb(ql_adapter_state_t *, ql_srb_t *, void *);
1484 -void ql_ip_iocb(ql_adapter_state_t *, ql_srb_t *, void *);
1485 -void ql_command_24xx_iocb(ql_adapter_state_t *, ql_srb_t *, void *);
1486 -void ql_ms_24xx_iocb(ql_adapter_state_t *, ql_srb_t *, void *);
1487 -void ql_ip_24xx_iocb(ql_adapter_state_t *, ql_srb_t *, void *);
1488 -void ql_els_24xx_iocb(ql_adapter_state_t *, ql_srb_t *, void *);
1451 +void ql_command_iocb(ql_adapter_state_t *, ql_request_q_t *, ql_srb_t *,
1452 + void *);
1453 +void ql_ms_iocb(ql_adapter_state_t *, ql_request_q_t *, ql_srb_t *, void *);
1454 +void ql_ip_iocb(ql_adapter_state_t *, ql_request_q_t *, ql_srb_t *, void *);
1455 +void ql_command_24xx_iocb(ql_adapter_state_t *, ql_request_q_t *, ql_srb_t *,
1456 + void *);
1457 +void ql_ms_24xx_iocb(ql_adapter_state_t *, ql_request_q_t *, ql_srb_t *,
1458 + void *);
1459 +void ql_ip_24xx_iocb(ql_adapter_state_t *, ql_request_q_t *, ql_srb_t *,
1460 + void *);
1489 1461
1490 1462 #ifdef __cplusplus
1491 1463 }
1492 1464 #endif
1493 1465
1494 1466 #endif /* _QL_IOCB_H */
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX