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 (c) 2008, 2011, Oracle and/or its affiliates. All rights reserved.
26 */
27
28 #ifndef _QL_API_H
29 #define _QL_API_H
30
31 /*
32 * ISP2xxx Solaris Fibre Channel Adapter (FCA) driver header file.
33 *
34 * ***********************************************************************
35 * * **
36 * * NOTICE **
37 * * COPYRIGHT (C) 1996-2015 QLOGIC CORPORATION **
38 * * ALL RIGHTS RESERVED **
39 * * **
40 * ***********************************************************************
41 *
42 */
43
44 #ifdef __cplusplus
45 extern "C" {
46 #endif
47
48 /* OS include files. */
49 #include <sys/scsi/scsi_types.h>
50 #include <sys/byteorder.h>
51 #include <sys/pci.h>
52 #include <sys/utsname.h>
53 #include <sys/file.h>
54 #include <sys/param.h>
55 #include <sys/time.h>
56 #include <sys/ddifm.h>
57 #include <sys/sunddi.h>
58 #include <sys/fm/protocol.h>
59 #include <sys/fm/io/ddi.h>
60 #include <ql_open.h>
61
62 #ifdef __x86
63 #include <sys/x86_archext.h>
64 #endif
65
66 #include <sys/fibre-channel/fc.h>
67 #include <sys/fibre-channel/impl/fc_fcaif.h>
68
69 #ifndef DDI_INTR_TYPE_FIXED
70 #define DDI_INTR_TYPE_FIXED 0x1
71 #endif
72 #ifndef DDI_INTR_TYPE_MSI
73 #define DDI_INTR_TYPE_MSI 0x2
74 #endif
75 #ifndef DDI_INTR_TYPE_MSIX
76 #define DDI_INTR_TYPE_MSIX 0x4
77 #endif
78 #ifndef DDI_INTR_FLAG_BLOCK
79 #define DDI_INTR_FLAG_BLOCK 0x100
80 #endif
81 #ifndef DDI_INTR_ALLOC_NORMAL
82 #define DDI_INTR_ALLOC_NORMAL 0
83 #endif
84 #ifndef DDI_INTR_ALLOC_STRICT
85 #define DDI_INTR_ALLOC_STRICT 1
86 #endif
87
88 #define PCI_PCIE_DEVICE_CONTROL 0x8 /* Device control reg offset */
89 #define PCI_MSI_CONTROL 0x2 /* MSI Control reg offset */
90 #define PCI_MSI_MSG_ADDR 0x4 /* MSI Msg Addr reg offset */
91 #define PCI_MSI_MSG_UPPER_ADDR 0x8 /* MSI MSI Msg Upper Addr reg */
92 /* offset */
93 #define PCI_MSI_MSG_DATA 0xc /* MSI Msg Data reg offset */
94 #define PCI_MSI_X_CONTROL 0x2 /* MSI-X Control reg offset */
95 #define MSI_X_TABLE_SIZE_MASK 0x7ff /* MSI-X Table Size mask */
96
97 #define PCIE_EXT_CAP_PTR 0x100
98 #define PCIE_EXT_CAP_NEXT_SHIFT 20
99 #define PCIE_EXT_CAP_ID_SRIOV 0x0010 /* SRIOV capabilities offset */
100 #define PCIE_EXT_CAP_SRIOV_TOTAL_VFS 0xe
101 #define PCIE_SRIOV_PAGE_SIZE_MULTIPLIER 4096
102
103 /*
104 * NPIV defines
105 */
106 #ifndef FC_NPIV_FDISC_FAILED
107 #define FC_NPIV_FDISC_FAILED 0x45
108 #endif
109 #ifndef FC_NPIV_FDISC_WWN_INUSE
110 #define FC_NPIV_FDISC_WWN_INUSE 0x46
111 #endif
112 #ifndef FC_NPIV_NOT_SUPPORTED
113 #define FC_NPIV_NOT_SUPPORTED 0x47
114 #endif
115 #ifndef FC_NPIV_WRONG_TOPOLOGY
116 #define FC_NPIV_WRONG_TOPOLOGY 0x48
117 #endif
118 #ifndef FC_NPIV_NPIV_BOUND
119 #define FC_NPIV_NPIV_BOUND 0x49
120 #endif
121 #ifndef FC_HBA_PORTSPEED_32GBIT
122 #define FC_HBA_PORTSPEED_32GBIT 64
123 #endif
124
125 #pragma weak ddi_intr_get_supported_types
126 #pragma weak ddi_intr_get_nintrs
127 #pragma weak ddi_intr_alloc
128 #pragma weak ddi_intr_free
129 #pragma weak ddi_intr_get_pri
130 #pragma weak ddi_intr_add_handler
131 #pragma weak ddi_intr_dup_handler
132 #pragma weak ddi_intr_get_navail
133 #pragma weak ddi_intr_block_disable
134 #pragma weak ddi_intr_block_enable
135 #pragma weak ddi_intr_disable
136 #pragma weak ddi_intr_enable
137 #pragma weak ddi_intr_get_cap
138 #pragma weak ddi_intr_remove_handler
139 extern int ddi_intr_get_supported_types();
140 extern int ddi_intr_get_nintrs();
141 extern int ddi_intr_alloc();
142 extern int ddi_intr_free();
143 extern int ddi_intr_get_pri();
144 extern int ddi_intr_add_handler();
145 extern int ddi_intr_dup_handler();
146 extern int ddi_intr_get_navail();
147 extern int ddi_intr_block_disable();
148 extern int ddi_intr_block_enable();
149 extern int ddi_intr_disable();
150 extern int ddi_intr_enable();
151 extern int ddi_intr_get_cap();
152 extern int ddi_intr_remove_handler();
153
154 #define QL_CLEAR_DMA_HANDLE(x) ((ddi_dma_impl_t *)x)->dmai_fault_notify = 0; \
155 ((ddi_dma_impl_t *)x)->dmai_fault_check = 0; \
156 ((ddi_dma_impl_t *)x)->dmai_fault = 0
157
158 #ifndef FC_STATE_1GBIT_SPEED
159 #define FC_STATE_1GBIT_SPEED 0x0100 /* 1 Gbit/sec */
160 #endif
161 #ifndef FC_STATE_2GBIT_SPEED
162 #define FC_STATE_2GBIT_SPEED 0x0400 /* 2 Gbit/sec */
163 #endif
164 #ifndef FC_STATE_4GBIT_SPEED
165 #define FC_STATE_4GBIT_SPEED 0x0500 /* 4 Gbit/sec */
166 #endif
167 #ifndef FC_STATE_8GBIT_SPEED
168 #define FC_STATE_8GBIT_SPEED 0x0700 /* 8 Gbit/sec */
169 #endif
170 #ifndef FC_STATE_10GBIT_SPEED
171 #define FC_STATE_10GBIT_SPEED 0x0600 /* 10 Gbit/sec */
172 #endif
173 #ifndef FC_STATE_16GBIT_SPEED
174 #define FC_STATE_16GBIT_SPEED 0x0800 /* 16 Gbit/sec */
175 #endif
176 #ifndef FC_STATE_32GBIT_SPEED
177 #define FC_STATE_32GBIT_SPEED 0x1000 /* 32 Gbit/sec */
178 #endif
179
180 /*
181 * Data bit definitions.
182 */
183 #define BIT_0 0x1
184 #define BIT_1 0x2
185 #define BIT_2 0x4
186 #define BIT_3 0x8
187 #define BIT_4 0x10
188 #define BIT_5 0x20
189 #define BIT_6 0x40
190 #define BIT_7 0x80
191 #define BIT_8 0x100
192 #define BIT_9 0x200
193 #define BIT_10 0x400
194 #define BIT_11 0x800
195 #define BIT_12 0x1000
196 #define BIT_13 0x2000
197 #define BIT_14 0x4000
198 #define BIT_15 0x8000
199 #define BIT_16 0x10000
200 #define BIT_17 0x20000
201 #define BIT_18 0x40000
202 #define BIT_19 0x80000
203 #define BIT_20 0x100000
204 #define BIT_21 0x200000
205 #define BIT_22 0x400000
206 #define BIT_23 0x800000
207 #define BIT_24 0x1000000
208 #define BIT_25 0x2000000
209 #define BIT_26 0x4000000
210 #define BIT_27 0x8000000
211 #define BIT_28 0x10000000
212 #define BIT_29 0x20000000
213 #define BIT_30 0x40000000
214 #define BIT_31 0x80000000
215 #define BIT_32 0x100000000
216 #define BIT_33 0x200000000
217 #define BIT_34 0x400000000
218 #define BIT_35 0x800000000
219 #define BIT_36 0x1000000000
220 #define BIT_37 0x2000000000
221 #define BIT_38 0x4000000000
222 #define BIT_39 0x8000000000
223 #define BIT_40 0x10000000000
224 #define BIT_41 0x20000000000
225 #define BIT_42 0x40000000000
226 #define BIT_43 0x80000000000
227 #define BIT_44 0x100000000000
228 #define BIT_45 0x200000000000
229 #define BIT_46 0x400000000000
230 #define BIT_47 0x800000000000
231 #define BIT_48 0x1000000000000
232 #define BIT_49 0x2000000000000
233 #define BIT_50 0x4000000000000
234 #define BIT_51 0x8000000000000
235 #define BIT_52 0x10000000000000
236 #define BIT_53 0x20000000000000
237 #define BIT_54 0x40000000000000
238 #define BIT_55 0x80000000000000
239 #define BIT_56 0x100000000000000
240 #define BIT_57 0x200000000000000
241 #define BIT_58 0x400000000000000
242 #define BIT_59 0x800000000000000
243 #define BIT_60 0x1000000000000000
244 #define BIT_61 0x2000000000000000
245 #define BIT_62 0x4000000000000000
246 #define BIT_63 0x8000000000000000
247
248 /*
249 * Local Macro Definitions.
250 */
251 #ifndef TRUE
252 #define TRUE B_TRUE
253 #endif
254
255 #ifndef FALSE
256 #define FALSE B_FALSE
257 #endif
258
259 /*
260 * I/O register
261 */
262 #define RD_REG_BYTE(ha, addr) \
263 (uint8_t)ddi_get8(ha->dev_handle, (uint8_t *)(addr))
264 #define RD_REG_WORD(ha, addr) \
265 (uint16_t)ddi_get16(ha->dev_handle, (uint16_t *)(addr))
266 #define RD_REG_DWORD(ha, addr) \
267 (uint32_t)ddi_get32(ha->dev_handle, (uint32_t *)(addr))
268 #define RD_REG_DDWORD(ha, addr) \
269 (uint64_t)ddi_get64(ha->dev_handle, (uint64_t *)(addr))
270
271 #define WRT_REG_BYTE(ha, addr, data) \
272 ddi_put8(ha->dev_handle, (uint8_t *)(addr), (uint8_t)(data))
273 #define WRT_REG_WORD(ha, addr, data) \
274 ddi_put16(ha->dev_handle, (uint16_t *)(addr), (uint16_t)(data))
275 #define WRT_REG_DWORD(ha, addr, data) \
276 ddi_put32(ha->dev_handle, (uint32_t *)(addr), (uint32_t)(data))
277 #define WRT_REG_DDWORD(ha, addr, data) \
278 ddi_put64(ha->dev_handle, (uint64_t *)(addr), (uint64_t)(data))
279
280 #define RD8_IO_REG(ha, regname) \
281 RD_REG_BYTE(ha, (ha->iobase + ha->reg_off->regname))
282 #define RD16_IO_REG(ha, regname) \
283 RD_REG_WORD(ha, (ha->iobase + ha->reg_off->regname))
284 #define RD32_IO_REG(ha, regname) \
285 RD_REG_DWORD(ha, (ha->iobase + ha->reg_off->regname))
286
287 #define WRT8_IO_REG(ha, regname, data) \
288 WRT_REG_BYTE(ha, (ha->iobase + ha->reg_off->regname), (data))
289 #define WRT16_IO_REG(ha, regname, data) \
290 WRT_REG_WORD(ha, (ha->iobase + ha->reg_off->regname), (data))
291 #define WRT32_IO_REG(ha, regname, data) \
292 WRT_REG_DWORD(ha, (ha->iobase + ha->reg_off->regname), (data))
293
294 #define RD_IOREG_BYTE(ha, addr) \
295 (uint8_t)ddi_get8(ha->iomap_dev_handle, (uint8_t *)(addr))
296 #define RD_IOREG_WORD(ha, addr) \
297 (uint16_t)ddi_get16(ha->iomap_dev_handle, (uint16_t *)(addr))
298 #define RD_IOREG_DWORD(ha, addr) \
299 (uint32_t)ddi_get32(ha->iomap_dev_handle, (uint32_t *)(addr))
300
301 #define WRT_IOREG_BYTE(ha, addr, data) \
302 ddi_put8(ha->iomap_dev_handle, (uint8_t *)addr, (uint8_t)(data))
303 #define WRT_IOREG_WORD(ha, addr, data) \
304 ddi_put16(ha->iomap_dev_handle, (uint16_t *)addr, (uint16_t)(data))
305 #define WRT_IOREG_DWORD(ha, addr, data) \
306 ddi_put32(ha->iomap_dev_handle, (uint32_t *)addr, (uint32_t)(data))
307
308 #define RD8_IOMAP_REG(ha, regname) \
309 RD_IOREG_BYTE(ha, (ha->iomap_iobase + ha->reg_off->regname))
310 #define RD16_IOMAP_REG(ha, regname) \
311 RD_IOREG_WORD(ha, (ha->iomap_iobase + ha->reg_off->regname))
312 #define RD32_IOMAP_REG(ha, regname) \
313 RD_IOREG_DWORD(ha, (ha->iomap_iobase + ha->reg_off->regname))
314
315 #define WRT8_IOMAP_REG(ha, regname, data) \
316 WRT_IOREG_BYTE(ha, (ha->iomap_iobase + ha->reg_off->regname), (data))
317 #define WRT16_IOMAP_REG(ha, regname, data) \
318 WRT_IOREG_WORD(ha, (ha->iomap_iobase + ha->reg_off->regname), (data))
319 #define WRT32_IOMAP_REG(ha, regname, data) \
320 WRT_IOREG_DWORD(ha, (ha->iomap_iobase + ha->reg_off->regname), (data))
321
322 #define RD8_MBAR_REG(ha, ofst) \
323 (uint8_t)ddi_get8(ha->mbar_dev_handle, \
324 (uint8_t *)(ha->mbar + (ofst)))
325 #define RD16_MBAR_REG(ha, ofst) \
326 (uint16_t)ddi_get16(ha->mbar_dev_handle, \
327 (uint16_t *)(ha->mbar + (ofst)))
328 #define RD32_MBAR_REG(ha, ofst) \
329 (uint32_t)ddi_get32(ha->mbar_dev_handle, \
330 (uint32_t *)(ha->mbar + (ofst)))
331 #define RD64_MBAR_REG(ha, ofst) \
332 (uint64_t)ddi_get64(ha->mbar_dev_handle, \
333 (uint64_t *)(ha->mbar + (ofst)))
334
335 #define WR8_MBAR_REG(ha, ofst, data) \
336 ddi_put8(ha->mbar_dev_handle, \
337 (uint8_t *)(ha->mbar + (ofst)), \
338 (uint8_t)(data))
339 #define WR16_MBAR_REG(ha, ofst, data) \
340 ddi_put16(ha->mbar_dev_handle, \
341 (uint16_t *)(ha->mbar + (ofst)), \
342 (uint16_t)(data))
343 #define WR32_MBAR_REG(ha, ofst, data) \
344 ddi_put32(ha->mbar_dev_handle, \
345 (uint32_t *)(ha->mbar + (ofst)), \
346 (uint32_t)(data))
347 #define WR64_MBAR_REG(ha, ofst, data) \
348 ddi_put64(ha->mbar_dev_handle, \
349 (uint64_t *)(ha->mbar + (ofst)), \
350 (uint64_t)(data))
351
352 /*
353 * FCA definitions
354 */
355 #define MAX_LUNS 16384
356 #define QL_FCA_BRAND 0x0fca2200
357
358 /* Following to be removed when defined by OS. */
359 /* ************************************************************************ */
360 #define LA_ELS_FARP_REQ 0x54
361 #define LA_ELS_FARP_REPLY 0x55
362 #define LA_ELS_LPC 0x71
363 #define LA_ELS_LSTS 0x72
364
365 typedef struct {
366 ls_code_t ls_code;
367 uint8_t rsvd[3];
368 uint8_t port_control;
369 uint8_t lpb[16];
370 uint8_t lpe[16];
371 } ql_lpc_t;
372
373 typedef struct {
374 ls_code_t ls_code;
375 } ql_acc_rjt_t;
376
377 typedef fc_linit_resp_t ql_lpc_resp_t;
378 typedef fc_scr_resp_t ql_rscn_resp_t;
379
380 typedef struct {
381 uint16_t class_valid_svc_opt;
382 uint16_t initiator_ctl;
383 uint16_t recipient_ctl;
384 uint16_t rcv_data_size;
385 uint16_t conc_sequences;
386 uint16_t n_port_end_to_end_credit;
387 uint16_t open_sequences_per_exch;
388 uint16_t unused;
389 } class_svc_param_t;
390
391 typedef struct {
392 uint8_t type;
393 uint8_t rsvd;
394 uint16_t process_assoc_flags;
395 uint32_t originator_process;
396 uint32_t responder_process;
397 uint32_t process_flags;
398 } prli_svc_param_t;
399 /* *********************************************************************** */
400
401 /*
402 * Fibre Channel device definitions.
403 */
404 #define MAX_22_FIBRE_DEVICES 256
405 #define MAX_24_FIBRE_DEVICES 2048
406 #define MAX_24_VIRTUAL_PORTS 127
407 #define MAX_25_VIRTUAL_PORTS 254
408 #define MAX_27_VIRTUAL_PORTS 252
409 #define MAX_8021_VIRTUAL_PORTS 63
410 #define MAX_81XX_VIRTUAL_PORTS 254
411 #define MAX_83_VIRTUAL_PORTS 254
412
413 #define LAST_LOCAL_LOOP_ID 0x7d
414 #define FL_PORT_LOOP_ID 0x7e /* FFFFFE Fabric F_Port */
415 #define SWITCH_FABRIC_CONTROLLER_LOOP_ID 0x7f /* FFFFFD Fabric Controller */
416 #define SIMPLE_NAME_SERVER_LOOP_ID 0x80 /* FFFFFC Directory Server */
417 #define SNS_FIRST_LOOP_ID 0x81
418 #define SNS_LAST_LOOP_ID 0xfe
419 #define IP_BROADCAST_LOOP_ID 0xff /* FFFFFF Broadcast */
420 #define BROADCAST_ADDR 0xffffff /* FFFFFF Broadcast */
421
422 /*
423 * Fibre Channel 24xx device definitions.
424 */
425 #define LAST_N_PORT_HDL 0x7ef
426 #define SNS_24XX_HDL 0x7FC /* SNS FFFFFCh */
427 #define SFC_24XX_HDL 0x7FD /* fabric controller FFFFFDh */
428 #define FL_PORT_24XX_HDL 0x7FE /* F_Port FFFFFEh */
429 #define BROADCAST_24XX_HDL 0x7FF /* IP broadcast FFFFFFh */
430
431 /* Loop ID's used as flags, must be higher than any valid Loop ID */
432 #define PORT_NO_LOOP_ID 0x8000 /* Device does not have loop ID. */
433 #define PORT_LOST_ID 0x4000 /* Device has been lost. */
434
435 /* Fibre Channel Topoploy. */
436 #define QL_N_PORT BIT_0
437 #define QL_NL_PORT BIT_1
438 #define QL_F_PORT BIT_2
439 #define QL_FL_PORT BIT_3
440 #define QL_LOOP_CONNECTION (QL_NL_PORT | QL_FL_PORT)
441 #define QL_P2P_CONNECTION (QL_F_PORT | QL_N_PORT)
442 #define QL_FABRIC_CONNECTION (QL_F_PORT | QL_FL_PORT)
443
444 /* Timeout timer counts in seconds (must greater than 1 second). */
445 #define WATCHDOG_TIME 5 /* 0 - 255 */
446 #define PORT_RETRY_TIME 2 /* 0 - 255 */
447 #define LOOP_DOWN_TIMER_OFF 0
448 #define LOOP_DOWN_TIMER_START 240 /* 0 - 255 */
449 #define LOOP_DOWN_TIMER_END 1
450 #define LOOP_DOWN_RESET (LOOP_DOWN_TIMER_START - 45) /* 0 - 255 */
451 #define R_A_TOV_DEFAULT 20 /* 0 - 65535 */
452 #define IDLE_CHECK_TIMER 300 /* 0 - 65535 */
453 #define MAX_DEVICE_LOST_RETRY 16 /* 0 - 255 */
454 #define TIMEOUT_THRESHOLD 16 /* 0 - 255 */
455
456 /* Maximum outstanding commands in ISP queues (1-4095) */
457 #define OSC_INDEX_MASK 0xfff
458 #define OSC_INDEX_SHIFT 12
459
460 /* Maximum unsolicited buffers (1-65535) */
461 #define QL_UB_LIMIT 256
462
463 /* ISP request, response and receive buffer entry counts */
464 #define REQUEST_ENTRY_CNT 512 /* Request entries (205-65535) */
465 #define RESPONSE_ENTRY_CNT 256 /* Response entries (1-65535) */
466 #define RCVBUF_CONTAINER_CNT 64 /* Rcv buffer containers (8-1024) */
467
468 /*
469 * ISP request, response, mailbox and receive buffer queue sizes
470 */
471 #define SHADOW_ENTRY_SIZE 4
472 #define REQUEST_ENTRY_SIZE 64
473 #define REQUEST_QUEUE_SIZE (REQUEST_ENTRY_SIZE * REQUEST_ENTRY_CNT)
474
475 #define RESPONSE_ENTRY_SIZE 64
476 #define RESPONSE_QUEUE_SIZE (RESPONSE_ENTRY_SIZE * RESPONSE_ENTRY_CNT)
477
478 #define RCVBUF_CONTAINER_SIZE 12
479 #define RCVBUF_QUEUE_SIZE (RCVBUF_CONTAINER_SIZE * RCVBUF_CONTAINER_CNT)
480
481 /*
482 * DMA attributes definitions.
483 */
484 #define QL_DMA_LOW_ADDRESS (uint64_t)0
485 #define QL_DMA_HIGH_64BIT_ADDRESS (uint64_t)0xffffffffffffffff
486 #define QL_DMA_HIGH_32BIT_ADDRESS (uint64_t)0xffffffff
487 #define QL_DMA_XFER_COUNTER (uint64_t)0xffffffff
488 #define QL_DMA_ADDRESS_ALIGNMENT (uint64_t)8
489 #define QL_DMA_ALIGN_8_BYTE_BOUNDARY (uint64_t)BIT_3
490 #define QL_DMA_RING_ADDRESS_ALIGNMENT (uint64_t)64
491 #define QL_DMA_ALIGN_64_BYTE_BOUNDARY (uint64_t)BIT_6
492 #define QL_DMA_BURSTSIZES 0xff
493 #define QL_DMA_MIN_XFER_SIZE 1
494 #define QL_DMA_MAX_XFER_SIZE (uint64_t)0xffffffff
495 #define QL_DMA_SEGMENT_BOUNDARY (uint64_t)0xffffffff
496
497 #ifdef __sparc
498 #define QL_DMA_SG_LIST_LENGTH 1
499 #define QL_FCSM_CMD_SGLLEN 1
500 #define QL_FCSM_RSP_SGLLEN 1
501 #define QL_FCIP_CMD_SGLLEN 1
502 #define QL_FCIP_RSP_SGLLEN 1
503 #define QL_FCP_CMD_SGLLEN 1
504 #define QL_FCP_RSP_SGLLEN 1
505 #else
506 #define QL_DMA_SG_LIST_LENGTH 1024
507 #define QL_FCSM_CMD_SGLLEN 1
508 #define QL_FCSM_RSP_SGLLEN 6
509 /*
510 * QL_FCIP_CMD_SGLLEN needs to be increased as we changed the max fcip packet
511 * size to about 64K. With this, we need to increase the maximum number of
512 * scatter-gather elements allowable from the existing 7. We want it to be more
513 * like 17 (max fragments for an fcip packet that is unaligned). (64K / 4K) + 1
514 * or whatever. Otherwise the DMA breakup routines will give bad results.
515 */
516 #define QL_FCIP_CMD_SGLLEN 17
517 #define QL_FCIP_RSP_SGLLEN 1
518 #define QL_FCP_CMD_SGLLEN 1
519 #define QL_FCP_RSP_SGLLEN 1
520 #endif
521
522 #ifndef DDI_DMA_RELAXED_ORDERING
523 #define DDI_DMA_RELAXED_ORDERING 0x400
524 #endif
525
526 #define QL_DMA_GRANULARITY 1
527 #define QL_DMA_XFER_FLAGS 0
528
529 typedef union {
530 uint64_t size64; /* 1 X 64 bit number */
531 uint32_t size32[2]; /* 2 x 32 bit number */
532 uint16_t size16[4]; /* 4 x 16 bit number */
533 uint8_t size8[8]; /* 8 x 8 bit number */
534 } conv_num_t;
535
536 /*
537 * Device register offsets.
538 */
539 #define MAX_MBOX_COUNT 32
540 typedef struct {
541 uint16_t flash_address; /* Flash BIOS address */
542 uint16_t flash_data; /* Flash BIOS data */
543 uint16_t ctrl_status; /* Control/Status */
544 uint16_t ictrl; /* Interrupt control */
545 uint16_t istatus; /* Interrupt status */
546 uint16_t semaphore; /* Semaphore */
547 uint16_t nvram; /* NVRAM register. */
548 uint16_t req_in; /* for 2200 MBX 4 Write */
549 uint16_t req_out; /* for 2200 MBX 4 read */
550 uint16_t resp_in; /* for 2200 MBX 5 Read */
551 uint16_t resp_out; /* for 2200 MBX 5 Write */
552 uint16_t risc2host;
553 uint16_t mbox_cnt; /* Number of mailboxes */
554 uint16_t mailbox_in[MAX_MBOX_COUNT]; /* Mailbox registers */
555 uint16_t mailbox_out[MAX_MBOX_COUNT]; /* Mailbox registers */
556 uint16_t fpm_diag_config;
557 uint16_t pcr; /* Processor Control Register. */
558 uint16_t mctr; /* Memory Configuration and Timing. */
559 uint16_t fb_cmd;
560 uint16_t hccr; /* Host command & control register. */
561 uint16_t gpiod; /* GPIO Data register. */
562 uint16_t gpioe; /* GPIO Enable register. */
563 uint16_t host_to_host_sema; /* 2312 resource lock register */
564 uint16_t pri_req_in; /* 2400 */
565 uint16_t pri_req_out; /* 2400 */
566 uint16_t atio_req_in; /* 2400 */
567 uint16_t atio_req_out; /* 2400 */
568 uint16_t io_base_addr; /* 2400 */
569 uint16_t nx_host_int; /* NetXen */
570 uint16_t nx_risc_int; /* NetXen */
571 } reg_off_t;
572
573 /*
574 * Multi-Queue, Mem BAR 2 definition.
575 */
576 #define MBAR2_REQ_IN 0x0
577 #define MBAR2_REQ_OUT 0x4
578 #define MBAR2_RESP_IN 0x8
579 #define MBAR2_RESP_OUT 0xc
580 #define MBAR2_MULTI_Q_MAX 256
581 #define MBAR2_REG_OFFSET 4096
582
583 /*
584 * Mbox-8 read maximum debounce count.
585 * Reading Mbox-8 could be debouncing, before getting stable value.
586 * This is the recommended driver fix from Qlogic along with firmware fix.
587 * During testing, maximum count did not cross 3.
588 */
589 #define QL_MAX_DEBOUNCE 10
590
591 /*
592 * Control Status register definitions
593 */
594 #define ISP_FUNC_NUM_MASK (BIT_15 | BIT_14)
595 #define ISP_FLASH_64K_BANK BIT_3 /* Flash BIOS 64K Bank Select */
596 #define ISP_FLASH_ENABLE BIT_1 /* Flash BIOS Read/Write enable */
597 #define ISP_RESET BIT_0 /* ISP soft reset */
598
599 /*
600 * Control Status 24xx register definitions
601 */
602 #define FLASH_NVRAM_ACCESS_ERROR BIT_18
603 #define DMA_ACTIVE BIT_17
604 #define DMA_SHUTDOWN BIT_16
605 #define FUNCTION_NUMBER BIT_15
606
607 #define MWB_4096_BYTES (BIT_5 | BIT_4)
608 #define MWB_2048_BYTES BIT_5
609 #define MWB_1024_BYTES BIT_4
610 #define MWB_512_BYTES 0
611
612 /*
613 * Interrupt Control register definitions
614 */
615 #define ISP_EN_INT BIT_15 /* ISP enable interrupts. */
616 #define ISP_EN_RISC BIT_3 /* ISP enable RISC interrupts. */
617
618 /*
619 * Interrupt Status register definitions
620 */
621 #define RISC_INT BIT_3 /* RISC interrupt */
622
623 /*
624 * NetXen Host/Risc Interrupt register definitions
625 */
626 #define NX_MBX_CMD BIT_0 /* Mailbox command present */
627 #define NX_RISC_INT BIT_0 /* RISC interrupt present */
628
629 /*
630 * NVRAM register definitions.
631 */
632 #define NV_DESELECT 0
633 #define NV_CLOCK BIT_0
634 #define NV_SELECT BIT_1
635 #define NV_DATA_OUT BIT_2
636 #define NV_DATA_IN BIT_3
637 #define NV_PR_ENABLE BIT_13 /* protection register enable */
638 #define NV_WR_ENABLE BIT_14 /* write enable */
639 #define NV_BUSY BIT_15
640
641 /*
642 * Flash/NVRAM 24xx definitions
643 */
644 #define FLASH_DATA_FLAG BIT_31
645 #define FLASH_CONF_ADDR 0x7FFD0000
646 #define FLASH_24_25_DATA_ADDR 0x7FF00000
647 #define FLASH_8100_DATA_ADDR 0x7F800000
648 #define FLASH_8300_DATA_ADDR 0x7F800000
649 #define FLASH_2700_DATA_ADDR 0x7F800000
650 #define FLASH_ADDR_MASK 0x7FFF0000
651
652 #define NVRAM_CONF_ADDR 0x7FFF0000
653 #define NVRAM_DATA_ADDR 0x7FFE0000
654
655 #define NVRAM_2200_FUNC0_ADDR 0x0
656 #define NVRAM_2300_FUNC0_ADDR 0x0
657 #define NVRAM_2300_FUNC1_ADDR 0x80
658 #define NVRAM_2400_FUNC0_ADDR 0x80
659 #define NVRAM_2400_FUNC1_ADDR 0x180
660 #define NVRAM_2500_FUNC0_ADDR 0x48080
661 #define NVRAM_2500_FUNC1_ADDR 0x48180
662 #define NVRAM_8100_FUNC0_ADDR 0xD0080
663 #define NVRAM_8100_FUNC1_ADDR 0xD0180
664 #define NVRAM_8021_FUNC0_ADDR 0xF0080
665 #define NVRAM_8021_FUNC1_ADDR 0xF0180
666 #define NVRAM_8300_FC_FUNC0_ADDR 0x270080
667 #define NVRAM_8300_FC_FUNC1_ADDR 0x270180
668 #define NVRAM_8300_FCOE_FUNC0_ADDR 0x274080
669 #define NVRAM_8300_FCOE_FUNC1_ADDR 0x274180
670 #define NVRAM_2700_FUNC0_ADDR 0x270080
671 #define NVRAM_2700_FUNC1_ADDR 0x270180
672 #define NVRAM_2700_FUNC2_ADDR 0x270280
673 #define NVRAM_2700_FUNC3_ADDR 0x270380
674
675 #define VPD_2400_FUNC0_ADDR 0
676 #define VPD_2400_FUNC1_ADDR 0x100
677 #define VPD_2500_FUNC0_ADDR 0x48000
678 #define VPD_2500_FUNC1_ADDR 0x48100
679 #define VPD_8100_FUNC0_ADDR 0xD0000
680 #define VPD_8100_FUNC1_ADDR 0xD0400
681 #define VPD_8021_FUNC0_ADDR 0xFA300
682 #define VPD_8021_FUNC1_ADDR 0xFA300
683 #define VPD_8300_FC_FUNC0_ADDR 0x270000
684 #define VPD_8300_FC_FUNC1_ADDR 0x270100
685 #define VPD_8300_FCOE_FUNC0_ADDR 0xFA300
686 #define VPD_8300_FCOE_FUNC1_ADDR 0xFA300
687 #define VPD_2700_FUNC0_ADDR 0x270000
688 #define VPD_2700_FUNC1_ADDR 0x270100
689 #define VPD_2700_FUNC2_ADDR 0x270200
690 #define VPD_2700_FUNC3_ADDR 0x270300
691 #define VPD_SIZE 0x80
692
693 #define FLASH_2200_FIRMWARE_ADDR 0x20000
694 #define FLASH_2300_FIRMWARE_ADDR 0x20000
695 #define FLASH_2400_FIRMWARE_ADDR 0x20000
696 #define FLASH_2500_FIRMWARE_ADDR 0x20000
697 #define FLASH_8100_FIRMWARE_ADDR 0xA0000
698 #define FLASH_8021_FIRMWARE_ADDR 0x40000
699 #define FLASH_8021_FIRMWARE_SIZE 0x80000
700 #define FLASH_8300_FC_FIRMWARE_ADDR 0x240000
701 #define FLASH_8300_FCOE_FIRMWARE_ADDR 0x220000
702 #define FLASH_8300_FIRMWARE_SIZE 0x20000
703 #define FLASH_2700_FIRMWARE_ADDR 0x240000
704 #define FLASH_2700_FIRMWARE_SIZE 0x20000
705
706 #define FLASH_8021_BOOTLOADER_ADDR 0x4000
707 #define FLASH_8021_BOOTLOADER_SIZE 0x8000
708 #define FLASH_8300_BOOTLOADER_ADDR 0x4000
709 #define FLASH_8300_BOOTLOADER_SIZE 0x8000
710
711 #define FLASH_2200_BOOT_CODE_ADDR 0
712 #define FLASH_2300_BOOT_CODE_ADDR 0
713 #define FLASH_2400_BOOT_CODE_ADDR 0
714 #define FLASH_2500_BOOT_CODE_ADDR 0
715 #define FLASH_2700_BOOT_CODE_ADDR 0x200000
716 #define FLASH_8100_BOOT_CODE_ADDR 0x80000
717 #define FLASH_8021_BOOT_CODE_ADDR 0x20000
718 #define FLASH_8300_BOOT_CODE_ADDR 0x200000
719
720 #define BEACON_8300_FC_FUNC0_ADDR 0x00201320
721 #define BEACON_8300_FC_FUNC1_ADDR 0x00201328
722 #define BEACON_8300_FCOE_FUNC0_ADDR 0x00201324
723 #define BEACON_8300_FCOE_FUNC1_ADDR 0x0020132c
724 #define BEACON_2700_FUNC0_ADDR 0x00201320
725 #define BEACON_2700_FUNC1_ADDR 0x00201328
726 #define BEACON_2700_FUNC2_ADDR 0x00201330
727 #define BEACON_2700_FUNC3_ADDR 0x00201338
728
729 #define FLASH_2400_ERRLOG_START_ADDR_0 0
730 #define FLASH_2400_ERRLOG_START_ADDR_1 0
731 #define FLASH_2500_ERRLOG_START_ADDR_0 0x54000
732 #define FLASH_2500_ERRLOG_START_ADDR_1 0x54400
733 #define FLASH_8100_ERRLOG_START_ADDR_0 0xDC000
734 #define FLASH_8100_ERRLOG_START_ADDR_1 0xDC400
735 #define FLASH_8300_ERRLOG_START_ADDR_0 0x280000
736 #define FLASH_8300_ERRLOG_START_ADDR_1 0x280400
737 #define FLASH_ERRLOG_SIZE 0x200
738 #define FLASH_ERRLOG_ENTRY_SIZE 4
739
740 #define FLASH_2400_DESCRIPTOR_TABLE 0
741 #define FLASH_2500_DESCRIPTOR_TABLE 0x50000
742 #define FLASH_8100_DESCRIPTOR_TABLE 0xD8000
743 #define FLASH_8021_DESCRIPTOR_TABLE 0
744 #define FLASH_8300_DESCRIPTOR_TABLE 0xFC000
745 #define FLASH_2700_DESCRIPTOR_TABLE 0xFC000
746
747 #define FLASH_2400_LAYOUT_TABLE 0x11400
748 #define FLASH_2500_LAYOUT_TABLE 0x50400
749 #define FLASH_8100_LAYOUT_TABLE 0xD8400
750 #define FLASH_8021_LAYOUT_TABLE 0xFC400
751 #define FLASH_8300_LAYOUT_TABLE 0xFC400
752 #define FLASH_2700_LAYOUT_TABLE 0xFC400
753
754 /*
755 * Flash Error Log Event Codes.
756 */
757 #define FLASH_ERRLOG_AEN_8002 0x8002
758 #define FLASH_ERRLOG_AEN_8003 0x8003
759 #define FLASH_ERRLOG_AEN_8004 0x8004
760 #define FLASH_ERRLOG_RESET_ERR 0xF00B
761 #define FLASH_ERRLOG_ISP_ERR 0xF020
762 #define FLASH_ERRLOG_PARITY_ERR 0xF022
763 #define FLASH_ERRLOG_NVRAM_CHKSUM_ERR 0xF023
764 #define FLASH_ERRLOG_FLASH_FW_ERR 0xF024
765
766 #define VPD_TAG_END 0x78
767 #define VPD_TAG_CHKSUM "RV"
768 #define VPD_TAG_SN "SN"
769 #define VPD_TAG_PN "PN"
770 #define VPD_TAG_PRODID "\x82"
771 #define VPD_TAG_LRT 0x90
772 #define VPD_TAG_LRTC 0x91
773
774 /*
775 * RISC to Host Status register definitions.
776 */
777 #define RH_RISC_INT BIT_15 /* RISC to Host Intrpt Req */
778 #define RH_RISC_PAUSED BIT_8 /* RISC Paused bit. */
779
780 /*
781 * RISC to Host Status register status field definitions.
782 */
783 #define ROM_MBX_SUCCESS 0x01
784 #define ROM_MBX_ERR 0x02
785 #define MBX_SUCCESS 0x10
786 #define MBX_ERR 0x11
787 #define ASYNC_EVENT 0x12
788 #define RESP_UPDATE 0x13
789 #define MULTI_Q_RSP_UPDATE 0x14
790 #define SCSI_FAST_POST_16 0x15
791 #define SCSI_FAST_POST_32 0x16
792 #define CTIO_FAST_POST 0x17
793 #define IP_FAST_POST_XMT 0x18
794 #define IP_FAST_POST_RCV 0x19
795 #define IP_FAST_POST_BRD 0x1a
796 #define IP_FAST_POST_RCV_ALN 0x1b
797 #define ATIO_UPDATE 0x1c
798 #define ATIO_RESP_UPDATE 0x1d
799
800 /*
801 * HCCR commands.
802 */
803 #define HC_RESET_RISC 0x1000 /* Reset RISC */
804 #define HC_PAUSE_RISC 0x2000 /* Pause RISC */
805 #define HC_RELEASE_RISC 0x3000 /* Release RISC from reset. */
806 #define HC_DISABLE_PARITY_PAUSE 0x4001 /* qla2200/2300 - disable parity err */
807 /* RISC pause. */
808 #define HC_SET_HOST_INT 0x5000 /* Set host interrupt */
809 #define HC_CLR_HOST_INT 0x6000 /* Clear HOST interrupt */
810 #define HC_CLR_RISC_INT 0x7000 /* Clear RISC interrupt */
811 #define HC_HOST_INT BIT_7 /* Host interrupt bit */
812 #define HC_RISC_PAUSE BIT_5 /* Pause mode bit */
813
814 /*
815 * HCCR commands for 24xx and 25xx.
816 */
817 #define HC24_RESET_RISC 0x10000000 /* Reset RISC */
818 #define HC24_CLEAR_RISC_RESET 0x20000000 /* Release RISC from reset. */
819 #define HC24_PAUSE_RISC 0x30000000 /* Pause RISC */
820 #define HC24_RELEASE_PAUSE 0x40000000 /* Release RISC from pause */
821 #define HC24_SET_HOST_INT 0x50000000 /* Set host interrupt */
822 #define HC24_CLR_HOST_INT 0x60000000 /* Clear HOST interrupt */
823 #define HC24_CLR_RISC_INT 0xA0000000 /* Clear RISC interrupt */
824 #define HC24_HOST_INT BIT_6 /* Host to RISC intrpt bit */
825 #define HC24_RISC_RESET BIT_5 /* RISC Reset mode bit. */
826
827 /*
828 * ISP Initialization Control Blocks.
829 * Little endian except where noted.
830 */
831 #define ICB_VERSION 1
832 typedef struct ql_init_cb {
833 uint8_t version;
834 uint8_t reserved;
835
836 /*
837 * LSB BIT 0 = enable_hard_loop_id
838 * LSB BIT 1 = enable_fairness
839 * LSB BIT 2 = enable_full_duplex
840 * LSB BIT 3 = enable_fast_posting
841 * LSB BIT 4 = enable_target_mode
842 * LSB BIT 5 = disable_initiator_mode
843 * LSB BIT 6 = enable_adisc
844 * LSB BIT 7 = enable_target_inquiry_data
845 *
846 * MSB BIT 0 = enable_port_update_ae
847 * MSB BIT 1 = disable_initial_lip
848 * MSB BIT 2 = enable_decending_soft_assign
849 * MSB BIT 3 = previous_assigned_addressing
850 * MSB BIT 4 = enable_stop_q_on_full
851 * MSB BIT 5 = enable_full_login_on_lip
852 * MSB BIT 6 = enable_node_name
853 * MSB BIT 7 = extended_control_block
854 */
855 uint8_t firmware_options[2];
856
857 uint8_t max_frame_length[2];
858 uint8_t max_iocb_allocation[2];
859 uint8_t execution_throttle[2];
860 uint8_t login_retry_count;
861 uint8_t retry_delay; /* unused */
862 uint8_t port_name[8]; /* Big endian. */
863 uint8_t hard_address[2]; /* option bit 0 */
864 uint8_t inquiry; /* option bit 7 */
865 uint8_t login_timeout;
866 uint8_t node_name[8]; /* Big endian */
867 uint8_t request_q_outpointer[2];
868 uint8_t response_q_inpointer[2];
869 uint8_t request_q_length[2];
870 uint8_t response_q_length[2];
871 uint8_t request_q_address[8];
872 uint8_t response_q_address[8];
873 uint8_t lun_enables[2];
874 uint8_t command_resouce_count;
875 uint8_t immediate_notify_resouce_count;
876 uint8_t timeout[2];
877 uint8_t reserved_2[2];
878
879 /*
880 * LSB BIT 0 = Timer operation mode bit 0
881 * LSB BIT 1 = Timer operation mode bit 1
882 * LSB BIT 2 = Timer operation mode bit 2
883 * LSB BIT 3 = Timer operation mode bit 3
884 * LSB BIT 4 = P2P Connection option bit 0
885 * LSB BIT 5 = P2P Connection option bit 1
886 * LSB BIT 6 = P2P Connection option bit 2
887 * LSB BIT 7 = Enable Non part on LIHA failure
888 *
889 * MSB BIT 0 = Enable class 2
890 * MSB BIT 1 = Enable ACK0
891 * MSB BIT 2 =
892 * MSB BIT 3 =
893 * MSB BIT 4 = FC Tape Enable
894 * MSB BIT 5 = Enable FC Confirm
895 * MSB BIT 6 = Enable CRN
896 * MSB BIT 7 =
897 */
898 uint8_t add_fw_opt[2];
899
900 uint8_t response_accumulation_timer;
901 uint8_t interrupt_delay_timer;
902
903 /*
904 * LSB BIT 0 = Enable Read xfr_rdy
905 * LSB BIT 1 = Soft ID only
906 * LSB BIT 2 =
907 * LSB BIT 3 =
908 * LSB BIT 4 = FCP RSP Payload [0]
909 * LSB BIT 5 = FCP RSP Payload [1] / Sbus enable - 2200
910 * LSB BIT 6 =
911 * LSB BIT 7 =
912 *
913 * MSB BIT 0 = Sbus enable - 2300
914 * MSB BIT 1 =
915 * MSB BIT 2 =
916 * MSB BIT 3 =
917 * MSB BIT 4 =
918 * MSB BIT 5 = enable 50 ohm termination
919 * MSB BIT 6 = Data Rate (2300 only)
920 * MSB BIT 7 = Data Rate (2300 only)
921 */
922 uint8_t special_options[2];
923
924 uint8_t reserved_3[26];
925 } ql_init_cb_t;
926
927 /*
928 * Virtual port definition.
929 */
930 typedef struct ql_vp_cfg {
931 uint8_t reserved[2];
932 uint8_t options;
933 uint8_t hard_prev_addr;
934 uint8_t port_name[8];
935 uint8_t node_name[8];
936 } ql_vp_cfg_t;
937
938 /*
939 * VP options.
940 */
941 #define VPO_ENABLE_SNS_LOGIN_SCR BIT_6
942 #define VPO_TARGET_MODE_DISABLED BIT_5
943 #define VPO_INITIATOR_MODE_ENABLED BIT_4
944 #define VPO_ENABLED BIT_3
945 #define VPO_ID_NOT_ACQUIRED BIT_2
946 #define VPO_PREVIOUSLY_ASSIGNED_ID BIT_1
947 #define VPO_HARD_ASSIGNED_ID BIT_0
948
949 #define ICB_24XX_VERSION 1
950 typedef struct ql_init_24xx_cb {
951 uint8_t version[2];
952 uint8_t reserved_1[2];
953 uint8_t max_frame_length[2];
954 uint8_t execution_throttle[2];
955 uint8_t exchange_count[2];
956 uint8_t hard_address[2];
957 uint8_t port_name[8]; /* Big endian. */
958 uint8_t node_name[8]; /* Big endian. */
959
960 uint8_t response_q_inpointer[2];
961 uint8_t request_q_outpointer[2];
962
963 uint8_t login_retry_count[2];
964
965 uint8_t prio_request_q_outpointer[2];
966
967 uint8_t response_q_length[2];
968 uint8_t request_q_length[2];
969
970 uint8_t link_down_on_nos[2];
971
972 uint8_t prio_request_q_length[2];
973 uint8_t request_q_address[8];
974 uint8_t response_q_address[8];
975 uint8_t prio_request_q_address[8];
976 uint8_t msi_x_vector[2];
977 uint8_t reserved_2[6];
978 uint8_t atio_q_inpointer[2];
979 uint8_t atio_q_length[2];
980 uint8_t atio_q_address[8];
981
982 uint8_t interrupt_delay_timer[2]; /* 100us per */
983 uint8_t login_timeout[2];
984 /*
985 * BIT 0 = Hard Assigned Loop ID
986 * BIT 1 = Enable Fairness
987 * BIT 2 = Enable Full-Duplex
988 * BIT 3 = Reserved
989 * BIT 4 = Target Mode Enable
990 * BIT 5 = Initiator Mode Disable
991 * BIT 6 = Reserved
992 * BIT 7 = Reserved
993 *
994 * BIT 8 = Reserved
995 * BIT 9 = Disable Initial LIP
996 * BIT 10 = Descending Loop ID Search
997 * BIT 11 = Previous Assigned Loop ID
998 * BIT 12 = Reserved
999 * BIT 13 = Full Login after LIP
1000 * BIT 14 = Node Name Option
1001 * BIT 15-31 = Reserved
1002 */
1003 uint8_t firmware_options_1[4];
1004
1005 /*
1006 * BIT 0 = Operation Mode bit 0
1007 * BIT 1 = Operation Mode bit 1
1008 * BIT 2 = Operation Mode bit 2
1009 * BIT 3 = Operation Mode bit 3
1010 * BIT 4 = Connection Options bit 0
1011 * BIT 5 = Connection Options bit 1
1012 * BIT 6 = Connection Options bit 2
1013 * BIT 7 = Enable Non part on LIHA failure
1014 *
1015 * BIT 8 = Enable Class 2
1016 * BIT 9 = Enable ACK0
1017 * BIT 10 = Reserved
1018 * BIT 11 = Enable FC-SP Security
1019 * BIT 12 = FC Tape Enable
1020 * BIT 13 = Reserved
1021 * BIT 14 = Target PRLI Control
1022 * BIT 15 = Reserved
1023 *
1024 * BIT 16 = Enable Emulated MSIX
1025 * BIT 17 = Reserved
1026 * BIT 18 = Enable Alternate Device Number
1027 * BIT 19 = Enable Alternate Bus Number
1028 * BIT 20 = Enable Translated Address
1029 * BIT 21 = Enable VM Security
1030 * BIT 22 = Enable Interrupt Handshake
1031 * BIT 23 = Enable Multiple Queue
1032 *
1033 * BIT 24 = IOCB Security
1034 * BIT 25 = qos
1035 * BIT 26-31 = Reserved
1036 */
1037 uint8_t firmware_options_2[4];
1038
1039 /*
1040 * BIT 0 = Reserved
1041 * BIT 1 = Soft ID only
1042 * BIT 2 = Reserved
1043 * BIT 3 = Reserved
1044 * BIT 4 = FCP RSP Payload bit 0
1045 * BIT 5 = FCP RSP Payload bit 1
1046 * BIT 6 = Enable Rec Out-of-Order data frame handling
1047 * BIT 7 = Disable Automatic PLOGI on Local Loop
1048 *
1049 * BIT 8 = Reserved
1050 * BIT 9 = Enable Out-of-Order FCP_XFER_RDY relative
1051 * offset handling
1052 * BIT 10 = Reserved
1053 * BIT 11 = Reserved
1054 * BIT 12 = Reserved
1055 * BIT 13 = Data Rate bit 0
1056 * BIT 14 = Data Rate bit 1
1057 * BIT 15 = Data Rate bit 2
1058 *
1059 * BIT 16 = 75-ohm Termination Select
1060 * BIT 17 = Enable Multiple FCFs
1061 * BIT 18 = MAC Addressing Mode
1062 * BIT 19 = MAC Addressing Mode
1063 * BIT 20 = MAC Addressing Mode
1064 * BIT 21 = Ethernet Data Rate
1065 * BIT 22 = Ethernet Data Rate
1066 * BIT 23 = Ethernet Data Rate
1067 *
1068 * BIT 24 = Ethernet Data Rate
1069 * BIT 25 = Ethernet Data Rate
1070 * BIT 26 = Enable Ethernet Header ATIO Queue
1071 * BIT 27 = Enable Ethernet Header Response Queue
1072 * BIT 28 = SPMA Selection
1073 * BIT 29 = SPMA Selection
1074 * BIT 30 = Reserved
1075 * BIT 31 = Reserved
1076 */
1077 uint8_t firmware_options_3[4];
1078
1079 uint8_t qos[2];
1080 uint8_t rid[2];
1081
1082 uint8_t reserved_3[4];
1083
1084 uint8_t enode_mac_addr[6];
1085
1086 uint8_t reserved_4[10];
1087
1088 /*
1089 * Multi-ID firmware.
1090 */
1091 uint8_t vp_count[2];
1092
1093 /*
1094 * BIT 1 = Allows mode 2 connection option
1095 */
1096 uint8_t global_vp_option[2];
1097
1098 ql_vp_cfg_t vpc[MAX_25_VIRTUAL_PORTS + 1];
1099
1100 /*
1101 * Extended Initialization Control Block
1102 */
1103 ql_ext_icb_8100_t ext_blk;
1104 } ql_init_24xx_cb_t;
1105
1106 typedef union ql_comb_init_cb {
1107 ql_init_cb_t cb;
1108 ql_init_24xx_cb_t cb24;
1109 } ql_comb_init_cb_t;
1110
1111 /*
1112 * ISP IP Initialization Control Block.
1113 * Little endian except where noted.
1114 */
1115 #define IP_ICB_VERSION 1
1116 typedef struct ql_ip_init_cb {
1117 uint8_t version;
1118 uint8_t reserved;
1119
1120 /*
1121 * LSB BIT 0 = receive_buffer_address_length
1122 * LSB BIT 1 = fast post broadcast received
1123 * LSB BIT 2 = allow out of receive buffers AE
1124 */
1125 uint8_t ip_firmware_options[2];
1126 uint8_t ip_header_size[2];
1127 uint8_t mtu_size[2]; /* max value is 65280 */
1128 uint8_t buf_size[2];
1129 uint8_t reserved_1[8];
1130 uint8_t queue_size[2]; /* 8-1024 */
1131 uint8_t low_water_mark[2];
1132 uint8_t queue_address[8];
1133 uint8_t queue_inpointer[2];
1134 uint8_t fast_post_reg_count[2]; /* 0-14 */
1135 uint8_t cc[2];
1136 uint8_t reserved_2[28];
1137 } ql_ip_init_cb_t;
1138
1139 #define IP_ICB_24XX_VERSION 1
1140 typedef struct ql_ip_init_24xx_cb {
1141 uint8_t version;
1142 uint8_t reserved;
1143 /*
1144 * LSB BIT 2 = allow out of receive buffers AE
1145 */
1146 uint8_t ip_firmware_options[2];
1147 uint8_t ip_header_size[2];
1148 uint8_t mtu_size[2];
1149 uint8_t buf_size[2];
1150 uint8_t reserved_1[10];
1151 uint8_t low_water_mark[2];
1152 uint8_t reserved_3[12];
1153 uint8_t cc[2];
1154 uint8_t reserved_2[28];
1155 } ql_ip_init_24xx_cb_t;
1156
1157 typedef union ql_comb_ip_init_cb {
1158 ql_ip_init_cb_t cb;
1159 ql_ip_init_24xx_cb_t cb24;
1160 } ql_comb_ip_init_cb_t;
1161
1162 /*
1163 * f/w module table
1164 */
1165 struct fw_table {
1166 uint32_t fw_class;
1167 int8_t *fw_version;
1168 };
1169
1170 /*
1171 * DMA memory type.
1172 */
1173 typedef enum mem_alloc_type {
1174 UNKNOWN_MEMORY,
1175 TASK_MEMORY,
1176 LITTLE_ENDIAN_DMA,
1177 BIG_ENDIAN_DMA,
1178 KERNEL_MEM,
1179 NO_SWAP_DMA
1180 } mem_alloc_type_t;
1181
1182 /*
1183 * DMA memory alignment type.
1184 */
1185 typedef enum men_align_type {
1186 QL_DMA_DATA_ALIGN,
1187 QL_DMA_RING_ALIGN,
1188 } mem_alignment_t;
1189
1190 /*
1191 * DMA memory object.
1192 */
1193 typedef struct dma_mem {
1194 uint64_t alignment;
1195 void *bp;
1196 ddi_dma_cookie_t *cookies;
1197 ddi_acc_handle_t acc_handle;
1198 ddi_dma_handle_t dma_handle;
1199 ddi_dma_cookie_t cookie;
1200 uint32_t max_cookie_count;
1201 uint32_t cookie_count;
1202 uint32_t size;
1203 uint32_t memflags;
1204 mem_alloc_type_t type;
1205 uint32_t flags; /* Solaris DMA flags. */
1206 } dma_mem_t;
1207
1208 /*
1209 * 24 bit port ID type definition.
1210 */
1211 typedef union {
1212 struct {
1213 uint8_t d_id[3];
1214 uint8_t rsvd_1;
1215 }r;
1216
1217 uint32_t b24 : 24;
1218
1219 #if defined(_BIT_FIELDS_LTOH)
1220 struct {
1221 uint8_t al_pa;
1222 uint8_t area;
1223 uint8_t domain;
1224 uint8_t rsvd_1;
1225 }b;
1226 #elif defined(_BIT_FIELDS_HTOL)
1227 struct {
1228 uint8_t domain;
1229 uint8_t area;
1230 uint8_t al_pa;
1231 uint8_t rsvd_1;
1232 }b;
1233 #else
1234 #error One of _BIT_FIELDS_LTOH or _BIT_FIELDS_HTOL must be defined
1235 #endif
1236 } port_id_t;
1237
1238 /*
1239 * Link list definitions.
1240 */
1241 typedef struct ql_link {
1242 struct ql_link *prev;
1243 struct ql_link *next;
1244 void *base_address;
1245 struct ql_head *head; /* the queue this link is on */
1246 } ql_link_t;
1247
1248 typedef struct ql_head {
1249 ql_link_t *first;
1250 ql_link_t *last;
1251 } ql_head_t;
1252
1253 /*
1254 * ISP request queue context
1255 */
1256 typedef struct ql_request_q {
1257 struct cmd_entry *req_ring_ptr;
1258 dma_mem_t req_ring;
1259 uint32_t *req_out_shadow_ptr;
1260 uint32_t req_out_shadow_ofst;
1261 uint32_t mbar_req_in;
1262 uint32_t mbar_req_out;
1263 uint16_t req_ring_index;
1264 uint16_t req_entry_cnt;
1265 uint16_t req_q_cnt; /* # of available entries. */
1266 uint16_t req_q_number;
1267 } ql_request_q_t;
1268
1269 /*
1270 * ISP response queue context
1271 */
1272 typedef struct ql_response_q {
1273 struct ql_srb *status_srb;
1274 struct sts_entry *rsp_ring_ptr;
1275 dma_mem_t rsp_ring;
1276 kmutex_t intr_mutex;
1277 uint32_t *rsp_in_shadow_ptr;
1278 uint32_t rsp_in_shadow_ofst;
1279 uint32_t mbar_rsp_in;
1280 uint32_t mbar_rsp_out;
1281 uint16_t rsp_ring_index;
1282 uint16_t rsp_entry_cnt;
1283 uint16_t isp_rsp_index;
1284 uint16_t rsp_q_number;
1285 uint16_t msi_x_vector;
1286 } ql_response_q_t;
1287
1288 /*
1289 * This is the per-command structure
1290 */
1291 typedef struct ql_srb {
1292 /* Command link. */
1293 ql_link_t cmd;
1294
1295 /* Watchdog link and timer. */
1296 ql_link_t wdg;
1297 time_t wdg_q_time;
1298 time_t init_wdg_q_time;
1299 uint16_t isp_timeout;
1300
1301 /* FCA and FC Transport data. */
1302 fc_packet_t *pkt;
1303 struct ql_adapter_state *ha;
1304 uint32_t magic_number;
1305
1306 /* unsolicited buffer context. */
1307 dma_mem_t ub_buffer;
1308 uint32_t ub_type;
1309 uint32_t ub_size;
1310
1311 /* FCP command. */
1312 fcp_cmd_t *fcp;
1313
1314 /* Request sense. */
1315 uint32_t request_sense_length;
1316 caddr_t request_sense_ptr;
1317
1318 /* Device queue pointer. */
1319 struct ql_lun *lun_queue;
1320
1321 /* Command state/status flags. */
1322 volatile uint32_t flags;
1323
1324 /* Command IOCB context. */
1325 void (*iocb)(struct ql_adapter_state *,
1326 ql_request_q_t *, struct ql_srb *, void *);
1327 struct cmd_entry *request_ring_ptr;
1328 uint32_t handle;
1329 uint16_t req_q_number;
1330 uint16_t req_cnt;
1331 uint8_t retry_count;
1332 uint8_t rsp_q_number;
1333 dma_mem_t sg_dma;
1334 } ql_srb_t;
1335
1336 #define SRB_ISP_STARTED BIT_0 /* Command sent to ISP. */
1337 #define SRB_ISP_COMPLETED BIT_1 /* ISP finished with command. */
1338 #define SRB_RETRY BIT_2 /* Driver retrying command. */
1339 #define SRB_POLL BIT_3 /* Poll for completion. */
1340
1341 #define SRB_WATCHDOG_ENABLED BIT_4 /* Command on watchdog list. */
1342 #define SRB_ELS_PKT BIT_5 /* Extended Link Services pkt */
1343 #define SRB_UB_IN_FCA BIT_6 /* FCA holds unsolicited buffer */
1344 #define SRB_UB_IN_ISP BIT_7 /* ISP holds unsolicited buffer */
1345
1346 #define SRB_UB_CALLBACK BIT_8 /* Unsolicited callback needed. */
1347 #define SRB_UB_RSCN BIT_9 /* Unsolicited RSCN callback. */
1348 #define SRB_UB_FCP BIT_10 /* Unsolicited RSCN callback. */
1349 #define SRB_FCP_CMD_PKT BIT_11 /* FCP command type packet. */
1350
1351 #define SRB_FCP_DATA_PKT BIT_12 /* FCP data type packet. */
1352 #define SRB_FCP_RSP_PKT BIT_13 /* FCP response type packet. */
1353 #define SRB_IP_PKT BIT_14 /* IP type packet. */
1354 #define SRB_GENERIC_SERVICES_PKT BIT_15 /* Generic services type packet */
1355
1356 #define SRB_COMMAND_TIMEOUT BIT_16 /* Command timed out. */
1357 #define SRB_ABORTING BIT_17 /* SRB aborting. */
1358 #define SRB_IN_DEVICE_QUEUE BIT_18 /* In Device Queue */
1359 #define SRB_IN_TOKEN_ARRAY BIT_19 /* In Token Array */
1360
1361 #define SRB_UB_FREE_REQUESTED BIT_20 /* UB Free requested */
1362 #define SRB_UB_ACQUIRED BIT_21 /* UB selected for upcall */
1363 #define SRB_MS_PKT BIT_22 /* Management Service pkt */
1364
1365 /*
1366 * This byte will be used to define flags for the LUN on the target.
1367 * Presently, we have untagged-command as one flag. Others can be
1368 * added later, if needed.
1369 */
1370 typedef struct tgt_lun_flags {
1371 uint8_t
1372 untagged_pending:1,
1373 unused_bits:7;
1374 } tgt_lun_flags_t;
1375
1376 #define QL_IS_UNTAGGED_PENDING(q, lun_num) \
1377 ((q->lun_flags[lun_num].untagged_pending == TRUE) ? 1 : 0)
1378 #define QL_SET_UNTAGGED_PENDING(q, lun_num) \
1379 (q->lun_flags[lun_num].untagged_pending = TRUE)
1380 #define QL_CLEAR_UNTAGGED_PENDING(q, lun_num) \
1381 (q->lun_flags[lun_num].untagged_pending = FALSE)
1382
1383 /*
1384 * Fibre Channel LUN Queue structure
1385 */
1386 typedef struct ql_lun {
1387 /* Head command link. */
1388 ql_head_t cmd;
1389
1390 struct ql_target *target_queue;
1391
1392 uint32_t flags;
1393
1394 /* LUN execution throttle. */
1395 uint16_t lun_outcnt;
1396
1397 /* LUN number as reported by REPORT LUNS */
1398 uint16_t lun_no;
1399
1400 /*
1401 * Logical unit number in SCSI3 format, also
1402 * referred to as FCP lun or FCP entity address.
1403 */
1404 uint64_t lun_addr;
1405
1406 ql_link_t link;
1407 } ql_lun_t;
1408
1409 /*
1410 * LUN Queue flags
1411 */
1412 #define LQF_UNTAGGED_PENDING BIT_0
1413
1414 /*
1415 * SCSI standard defined lun addressing methods.
1416 */
1417 #define QL_LUN_AM_MASK 0xC0 /* Address Method Mask */
1418 #define QL_LUN_AM_PDEV 0x00 /* Peripheral device AM */
1419 #define QL_LUN_AM_FLAT 0x40 /* Flat space AM */
1420 #define QL_LUN_AM_LUN 0x80 /* Logical unit AM */
1421 #define QL_LUN_AM_EFLAT 0xC0 /* Extended flat space AM */
1422 #define QL_LUN_AM_ELUN 0xC0 /* Extended logical unit AM */
1423
1424 /*
1425 * Fibre Channel Device Queue structure
1426 */
1427 typedef struct ql_target {
1428 /* Device queue lock. */
1429 kmutex_t mutex;
1430
1431 volatile uint32_t flags;
1432 port_id_t d_id;
1433 uint16_t loop_id;
1434 volatile uint16_t outcnt; /* # of cmds running in ISP */
1435 uint32_t iidma_rate;
1436
1437 /* Device link. */
1438 ql_link_t device;
1439
1440 /* Head watchdog link. */
1441 ql_head_t wdg;
1442
1443 /* Unsolicited buffer IP data. */
1444 uint32_t ub_frame_ro;
1445 uint16_t ub_sequence_length;
1446 uint16_t ub_loop_id;
1447 uint8_t ub_total_seg_cnt;
1448 uint8_t ub_seq_cnt;
1449 uint8_t ub_seq_id;
1450
1451 /* Port down retry counter. */
1452 uint16_t port_down_retry_count;
1453 uint16_t qfull_retry_count;
1454
1455 /* logout sent state */
1456 uint8_t logout_sent;
1457
1458 /* Data from Port database matches machine type. */
1459 uint8_t master_state;
1460 uint8_t slave_state;
1461 port_id_t hard_addr;
1462 uint8_t port_name[8];
1463 uint8_t node_name[8];
1464 uint16_t cmn_features;
1465 uint16_t conc_sequences;
1466 uint16_t relative_offset;
1467 uint16_t class3_recipient_ctl;
1468 uint16_t class3_rcv_data_size;
1469 uint16_t class3_conc_sequences;
1470 uint16_t class3_open_sequences_per_exch;
1471 uint16_t prli_payload_length;
1472 uint16_t prli_svc_param_word_0;
1473 uint16_t prli_svc_param_word_3;
1474
1475 /* LUN context. */
1476 ql_head_t lun_queues;
1477 ql_lun_t *last_lun_queue;
1478 } ql_tgt_t;
1479
1480 /*
1481 * Target Queue flags
1482 */
1483 #define TQF_TAPE_DEVICE BIT_0
1484 #define TQF_QUEUE_SUSPENDED BIT_1 /* Queue suspended. */
1485 #define TQF_FABRIC_DEVICE BIT_2
1486 #define TQF_INITIATOR_DEVICE BIT_3
1487 #define TQF_RSCN_RCVD BIT_4
1488 #define TQF_NEED_AUTHENTICATION BIT_5
1489 #define TQF_PLOGI_PROGRS BIT_6
1490 #define TQF_IIDMA_NEEDED BIT_7
1491 #define TQF_LOGIN_NEEDED BIT_8
1492
1493 /*
1494 * Tempoary N_Port information
1495 */
1496 typedef struct ql_n_port_info {
1497 uint16_t n_port_handle;
1498 uint8_t port_name[8]; /* Big endian. */
1499 uint8_t node_name[8]; /* Big endian. */
1500 port_id_t d_id;
1501 } ql_n_port_info_t;
1502
1503 /*
1504 * iiDMA
1505 */
1506 #define IIDMA_RATE_INIT 0xffffffff /* init state */
1507 #define IIDMA_RATE_NDEF 0xfffffffe /* not defined in conf file */
1508 #define IIDMA_RATE_1GB 0x0
1509 #define IIDMA_RATE_2GB 0x1
1510 #define IIDMA_RATE_AUTO 0x2
1511 #define IIDMA_RATE_4GB 0x3
1512 #define IIDMA_RATE_8GB 0x4
1513 #define IIDMA_RATE_16GB 0x5
1514 #define IIDMA_RATE_32GB 0x6
1515 #define IIDMA_RATE_10GB 0x13
1516 #define IIDMA_RATE_MAX IIDMA_RATE_10GB
1517
1518 /*
1519 * Kernel statistic structure definitions.
1520 */
1521 typedef struct ql_device_stat {
1522 int logouts_recvd;
1523 int task_mgmt_failures;
1524 int data_ro_mismatches;
1525 int dl_len_mismatches;
1526 } ql_device_stat_t;
1527
1528 typedef struct ql_adapter_24xx_stat {
1529 int version; /* version of this struct */
1530 int lip_count; /* lips forced */
1531 int ncmds; /* outstanding commands */
1532 ql_adapter_revlvl_t revlvl; /* adapter revision levels */
1533 ql_device_stat_t d_stats[MAX_24_FIBRE_DEVICES]; /* per device stats */
1534 } ql_adapter_stat_t;
1535
1536 /*
1537 * Firmware code segment.
1538 */
1539 #define MAX_RISC_CODE_SEGMENTS 3
1540 typedef struct fw_code {
1541 caddr_t code;
1542 uint32_t addr;
1543 uint32_t length;
1544 } ql_fw_code_t;
1545
1546 /* diagnostic els ECHO defines */
1547 #define QL_ECHO_CMD 0x10000000 /* echo opcode */
1548 #define QL_ECHO_CMD_LENGTH 220 /* command length */
1549
1550 /* DUMP state flags. */
1551 #define QL_DUMPING BIT_0
1552 #define QL_DUMP_VALID BIT_1
1553 #define QL_DUMP_UPLOADED BIT_2
1554
1555 #define QL_LOG_ENTRIES 256 /* max # of EL entries */
1556 #define QL_LOG_LENGTH 128 /* max # of bytes in each EL entry */
1557
1558 typedef struct ql_trace_entry {
1559 timespec_t hs_time; /* high resolution timestamp */
1560 char buf[QL_LOG_LENGTH];
1561 } ql_trace_entry_t;
1562
1563 /* per instance based extended logging trace descriptor */
1564 typedef struct el_trace_desc {
1565 kmutex_t mutex;
1566 uint32_t nentries; /* max number of entries */
1567 uint16_t nindex; /* next index to fill */
1568 uint32_t start; /* starting point */
1569 uint32_t end; /* ending point */
1570 uint32_t csize; /* current filled queue size */
1571 uint32_t count; /* sequence number */
1572 size_t trace_buffer_size;
1573 ql_trace_entry_t *trace_buffer;
1574 } ql_trace_desc_t;
1575
1576 /*
1577 * NVRAM cache descriptor.
1578 */
1579 typedef struct nvram_cache_desc {
1580 uint32_t valid;
1581 uint32_t size;
1582 void *cache;
1583 } nvram_cache_desc_t;
1584
1585 /*
1586 * Plogi retry parameters
1587 */
1588 typedef struct plogi_params_desc {
1589 uint32_t retry_cnt;
1590 uint32_t retry_dly_usec;
1591 } plogi_params_desc_t;
1592
1593 /*
1594 * ql attach progress indication
1595 */
1596 #define QL_SOFT_STATE_ALLOCED BIT_0
1597 #define QL_REGS_MAPPED BIT_1
1598 #define QL_HBA_BUFFER_SETUP BIT_2
1599 #define QL_MUTEX_CV_INITED BIT_3
1600 #define QL_INTR_ADDED BIT_4
1601 #define QL_CONFIG_SPACE_SETUP BIT_5
1602 #define QL_TASK_DAEMON_STARTED BIT_6
1603 #define QL_KSTAT_CREATED BIT_7
1604 #define QL_MINOR_NODE_CREATED BIT_8
1605 #define QL_FCA_TRAN_ALLOCED BIT_9
1606 #define QL_FCA_ATTACH_DONE BIT_10
1607 #define QL_IOMAP_IOBASE_MAPPED BIT_11
1608 #define QL_N_PORT_INFO_CREATED BIT_12
1609 #define QL_DB_IOBASE_MAPPED BIT_13
1610 #define QL_FCA_INIT_FM BIT_14
1611 #define QL_NVRAM_CACHE_CREATED BIT_15
1612 #define QL_PLOGI_PARAMS_CREATED BIT_16
1613
1614 /* Device queue head list size (based on AL_PA address). */
1615 #define DEVICE_HEAD_LIST_SIZE 0x81
1616
1617 struct legacy_intr_set {
1618 uint32_t int_vec_bit;
1619 uint32_t tgt_status_reg;
1620 uint32_t tgt_mask_reg;
1621 uint32_t pci_int_reg;
1622 };
1623
1624 /* Returned Mailbox registers. */
1625 typedef struct ql_mbx_data {
1626 uint16_t mb[MAX_MBOX_COUNT];
1627 } ql_mbx_data_t;
1628
1629 typedef struct ql_ledstate {
1630 uint32_t BeaconState;
1631 uint32_t LEDflags;
1632 uint32_t flags;
1633 uint32_t led_blink_on;
1634 uint32_t select;
1635 ql_mbx_data_t cfg;
1636 } ql_ledstate_t;
1637
1638 /*
1639 * Adapter state structure.
1640 */
1641 typedef struct ql_adapter_state {
1642 ql_link_t hba;
1643
1644 kmutex_t mutex;
1645 volatile uint64_t flags; /* State flags. */
1646 uint32_t state;
1647 port_id_t d_id;
1648 uint16_t loop_id;
1649 uint16_t sfp_stat;
1650 uint16_t idle_timer;
1651 uint16_t r_a_tov; /* 2 * R_A_TOV + 5 */
1652 uint8_t topology;
1653 uint8_t bbcr_runtime;
1654 uint8_t bbcr_initial;
1655 uint8_t loop_down_abort_time;
1656 uint8_t port_retry_timer;
1657 uint8_t loop_down_timer;
1658 uint8_t watchdog_timer;
1659
1660 /* Task Daemon context. */
1661 ql_head_t unsol_callback_queue;
1662 ddi_taskq_t *driver_thread_taskq;
1663 kmutex_t task_daemon_mutex;
1664 kcondvar_t cv_task_daemon;
1665 kcondvar_t cv_dr_suspended;
1666 volatile uint64_t task_daemon_flags;
1667 uint32_t driver_thread_awake;
1668 uint64_t df;
1669 uint64_t sf;
1670 uint64_t cf;
1671
1672 /* Completion thread context */
1673 ddi_taskq_t *completion_taskq;
1674 ql_head_t comp_q;
1675 kmutex_t comp_q_mutex;
1676 kcondvar_t cv_comp_thread;
1677 uint8_t comp_thds_active;
1678 uint8_t comp_thds_awake;
1679 uint8_t completion_thds;
1680
1681 /* Interrupt context. */
1682 ddi_iblock_cookie_t iblock_cookie;
1683 ddi_intr_handle_t *htable;
1684 uint32_t hsize;
1685 int32_t intr_cnt;
1686 void *intr_pri;
1687 int32_t intr_cap;
1688 uint32_t iflags;
1689 volatile uint8_t intr_claimed;
1690 uint8_t mq_msix_vectors;
1691 uint8_t interrupt_count;
1692
1693 /* Outstanding ISP commands. */
1694 ql_head_t pending_cmds;
1695 ql_srb_t **outstanding_cmds;
1696 uint16_t osc_index;
1697 uint16_t osc_max_cnt;
1698
1699 /* ISP request queue context. */
1700 kmutex_t req_ring_mutex;
1701 ql_request_q_t *req_q[2];
1702
1703 /* ISP response queue context. */
1704 ql_response_q_t **rsp_queues;
1705 uint32_t rsp_queues_size;
1706 uint8_t rsp_queues_cnt;
1707 uint8_t rsp_q_number;
1708 uint8_t io_min_rsp_q_number;
1709
1710 /* IP receive buffer queue context. */
1711 ql_tgt_t *rcv_dev_q;
1712 dma_mem_t rcv_ring;
1713 struct rcvbuf *rcvbuf_ring_ptr;
1714 uint16_t rcvbuf_ring_index;
1715
1716 /* Mailbox context. */
1717 kmutex_t mbx_mutex;
1718 struct mbx_cmd *mcp;
1719 kcondvar_t cv_mbx_wait;
1720 kcondvar_t cv_mbx_intr;
1721 volatile uint8_t mailbox_flags;
1722
1723 /* Unsolicited buffer data. */
1724 uint16_t ub_outcnt;
1725 uint8_t ub_seq_id;
1726 uint8_t ub_command_count;
1727 uint8_t ub_notify_count;
1728 uint32_t ub_allocated;
1729 kmutex_t ub_mutex;
1730 kcondvar_t cv_ub;
1731 fc_unsol_buf_t **ub_array;
1732
1733 /* Head of device queue list. */
1734 ql_head_t *dev;
1735
1736 /* Kernel statistics. */
1737 kstat_t *k_stats;
1738 ql_adapter_stat_t *adapter_stats;
1739
1740 /* PCI context */
1741 ddi_acc_handle_t pci_handle; /* config space */
1742 ddi_acc_handle_t dev_handle;
1743 caddr_t iobase;
1744 ddi_acc_handle_t iomap_dev_handle;
1745 caddr_t iomap_iobase;
1746 ddi_acc_handle_t mbar_dev_handle;
1747 caddr_t mbar;
1748 uint32_t mbar_size;
1749 uint32_t mbar_queue_offset;
1750 uint16_t device_id;
1751 uint16_t subsys_id;
1752 uint16_t subven_id;
1753 uint16_t ven_id;
1754 uint16_t pci_max_read_req;
1755 uint8_t rev_id;
1756 uint8_t pci_function_number;
1757
1758 /* Solaris adapter configuration data */
1759 dev_info_t *dip;
1760 fc_fca_tran_t *tran;
1761 uint32_t instance;
1762 int8_t *devpath;
1763 uint32_t fru_hba_index;
1764 uint32_t fru_port_index;
1765 uint8_t adapInfo[18];
1766
1767 /* Adapter context */
1768 la_els_logi_t loginparams;
1769 fc_fca_bind_info_t bind_info;
1770 ddi_modhandle_t fw_module;
1771 uint32_t fw_major_version;
1772 uint32_t fw_minor_version;
1773 uint32_t fw_subminor_version;
1774 uint32_t fw_attributes;
1775 uint32_t fw_ext_attributes;
1776 uint32_t fw_ext_memory_end;
1777 uint32_t fw_ext_memory_size;
1778 uint32_t fw_shared_ram_start;
1779 uint32_t fw_shared_ram_end;
1780 uint32_t fw_ddr_ram_start;
1781 uint32_t fw_ddr_ram_end;
1782 uint32_t parity_pause_errors;
1783 boolean_t log_parity_pause;
1784 uint32_t fw_class;
1785 uint16_t fw_state[7];
1786 uint16_t rom_status;
1787 ql_ledstate_t ledstate;
1788 uint16_t parity_hccr_err;
1789 uint32_t parity_stat_err;
1790 reg_off_t *reg_off;
1791 caddr_t risc_code;
1792 uint32_t risc_code_size;
1793 ql_fw_code_t risc_fw[MAX_RISC_CODE_SEGMENTS];
1794 uint32_t risc_dump_size;
1795 void (*fcp_cmd)(struct ql_adapter_state *,
1796 ql_request_q_t *, ql_srb_t *, void *);
1797 void (*ip_cmd)(struct ql_adapter_state *,
1798 ql_request_q_t *, ql_srb_t *, void *);
1799 void (*ms_cmd)(struct ql_adapter_state *,
1800 ql_request_q_t *, ql_srb_t *, void *);
1801 void (*els_cmd)(struct ql_adapter_state *,
1802 ql_request_q_t *, ql_srb_t *, void *);
1803 uint8_t cmd_segs;
1804 uint8_t cmd_cont_segs;
1805
1806 /* NVRAM configuration data */
1807 uint64_t cfg_flags;
1808 ql_comb_init_cb_t init_ctrl_blk;
1809 ql_comb_ip_init_cb_t ip_init_ctrl_blk;
1810 uint32_t fw_transfer_size;
1811 uint16_t adapter_features;
1812 uint16_t execution_throttle;
1813 uint16_t port_down_retry_count;
1814 uint16_t serdes_param[4];
1815 uint16_t maximum_luns_per_target;
1816 uint8_t port_down_retry_delay;
1817 uint8_t qfull_retry_count;
1818 uint8_t qfull_retry_delay;
1819 uint8_t loop_reset_delay;
1820
1821 /* Power management context. */
1822 kmutex_t pm_mutex;
1823 uint32_t pm_busy;
1824 uint8_t power_level;
1825 uint8_t pm_capable;
1826 uint8_t config_saved;
1827 uint8_t lip_on_panic;
1828
1829 /* sbus card data */
1830 caddr_t sbus_fpga_iobase;
1831 ddi_acc_handle_t sbus_fpga_dev_handle;
1832 ddi_acc_handle_t sbus_config_handle;
1833 caddr_t sbus_config_base;
1834
1835 /* XIOCTL context pointer. */
1836 struct ql_xioctl *xioctl;
1837
1838 struct ql_fcache *fcache;
1839 int8_t *vcache;
1840 nvram_cache_desc_t *nvram_cache;
1841
1842 /* f/w dump mutex */
1843 uint32_t ql_dump_size;
1844 uint32_t ql_dump_state;
1845 void *ql_dump_ptr;
1846 kmutex_t dump_mutex;
1847
1848 uint8_t fwwait;
1849
1850 dma_mem_t fwexttracebuf; /* extended trace */
1851 dma_mem_t fwfcetracebuf; /* event trace */
1852 ql_mbx_data_t fw_fce_trace_enable;
1853 uint32_t fwfcetraceopt;
1854 uint32_t flash_errlog_start; /* 32bit word addr */
1855 uint32_t flash_errlog_ptr; /* 32bit word addr */
1856 uint8_t send_plogi_timer;
1857
1858 /* Plogi retry parameters */
1859 plogi_params_desc_t *plogi_params;
1860
1861 /* Virtual port context. */
1862 fca_port_attrs_t *pi_attrs;
1863 struct ql_adapter_state *pha;
1864 struct ql_adapter_state *vp_next;
1865 uint8_t vp_index;
1866 uint8_t max_vports;
1867
1868 uint16_t free_loop_id;
1869
1870 /* Tempoary N_Port information */
1871 struct ql_n_port_info *n_port;
1872
1873 ql_trace_desc_t *ql_trace_desc;
1874
1875 uint32_t flash_data_addr;
1876 uint32_t flash_fw_addr;
1877 uint32_t flash_golden_fw_addr;
1878 uint32_t boot_code_addr;
1879 uint32_t flash_vpd_addr;
1880 uint32_t flash_nvram_addr;
1881 uint32_t flash_desc_addr;
1882 uint32_t mpi_capability_list;
1883 uint8_t phy_fw_major_version;
1884 uint8_t phy_fw_minor_version;
1885 uint8_t phy_fw_subminor_version;
1886 uint8_t mpi_fw_major_version;
1887 uint8_t mpi_fw_minor_version;
1888 uint8_t mpi_fw_subminor_version;
1889
1890 uint16_t idc_mb[8];
1891 uint8_t idc_restart_timer;
1892
1893 /* VLAN ID and MAC address */
1894 uint8_t fcoe_vnport_mac[6];
1895 uint16_t fabric_params;
1896 uint16_t fcoe_vlan_id;
1897 uint16_t fcoe_fcf_idx;
1898
1899 /* NetXen context */
1900 ddi_acc_handle_t db_dev_handle;
1901 caddr_t db_iobase;
1902 caddr_t nx_pcibase; /* BAR0 base I/O address */
1903 uint32_t qdr_sn_window;
1904 uint32_t *nx_req_in;
1905 caddr_t db_read;
1906 uint32_t pci_bus_addr;
1907 struct legacy_intr_set nx_legacy_intr;
1908 uint32_t bootloader_size;
1909 uint32_t bootloader_addr;
1910 uint32_t flash_fw_size;
1911 uint32_t dev_state;
1912 uint32_t fw_heartbeat_counter;
1913 dma_mem_t dmp_template;
1914 uint32_t md_capture_mask;
1915 uint32_t md_capture_size;
1916 uint16_t iidma_rate;
1917 uint8_t function_number;
1918 uint8_t timeout_cnt;
1919 uint8_t seconds_since_last_heartbeat;
1920
1921 /* default dma attributes */
1922 ddi_dma_attr_t bit32_io_dma_attr;
1923 ddi_dma_attr_t bit64_io_dma_attr;
1924
1925 ddi_dma_attr_t io_dma_attr;
1926 ddi_dma_attr_t fcsm_cmd_dma_attr;
1927 ddi_dma_attr_t fcsm_rsp_dma_attr;
1928 ddi_dma_attr_t fcip_cmd_dma_attr;
1929 ddi_dma_attr_t fcip_rsp_dma_attr;
1930 ddi_dma_attr_t fcp_cmd_dma_attr;
1931 ddi_dma_attr_t fcp_rsp_dma_attr;
1932 ddi_dma_attr_t fcp_data_dma_attr;
1933
1934 int fm_capabilities;
1935 uint16_t errlog[4];
1936 } ql_adapter_state_t;
1937
1938 /*
1939 * adapter state flags
1940 */
1941 #define FCA_BOUND (uint64_t)BIT_0
1942 #define QL_OPENED (uint64_t)BIT_1
1943 #define ONLINE (uint64_t)BIT_2
1944 #define INTERRUPTS_ENABLED (uint64_t)BIT_3
1945
1946 #define ABORT_CMDS_LOOP_DOWN_TMO (uint64_t)BIT_4
1947 #define POINT_TO_POINT (uint64_t)BIT_5
1948 #define IP_ENABLED (uint64_t)BIT_6
1949 #define IP_INITIALIZED (uint64_t)BIT_7
1950
1951 #define MENLO_LOGIN_OPERATIONAL (uint64_t)BIT_8
1952 #define ADAPTER_SUSPENDED (uint64_t)BIT_9
1953 #define FW_DUMP_NEEDED (uint64_t)BIT_10
1954 #define PARITY_ERROR (uint64_t)BIT_11
1955
1956 #define FLASH_ERRLOG_MARKER (uint64_t)BIT_12
1957 #define VP_ENABLED (uint64_t)BIT_13
1958 #define FDISC_ENABLED (uint64_t)BIT_14
1959 #define MULTI_QUEUE (uint64_t)BIT_15
1960
1961 #define MPI_RESET_NEEDED (uint64_t)BIT_16
1962 #define VP_ID_NOT_ACQUIRED (uint64_t)BIT_17
1963 #define IDC_STALL_NEEDED (uint64_t)BIT_18
1964 #define POLL_INTR (uint64_t)BIT_19
1965
1966 #define IDC_RESTART_NEEDED (uint64_t)BIT_20
1967 #define IDC_ACK_NEEDED (uint64_t)BIT_21
1968 #define LOOPBACK_ACTIVE (uint64_t)BIT_22
1969 #define QUEUE_SHADOW_PTRS (uint64_t)BIT_23
1970
1971 #define NO_INTR_HANDSHAKE (uint64_t)BIT_24
1972 #define COMP_THD_TERMINATE (uint64_t)BIT_25
1973 #define DISABLE_NIC_FW_DMP (uint64_t)BIT_26
1974 #define MULTI_CHIP_ADAPTER (uint64_t)BIT_27
1975
1976 /*
1977 * task daemon flags
1978 */
1979 #define TASK_DAEMON_STOP_FLG (uint64_t)BIT_0
1980 #define TASK_DAEMON_SLEEPING_FLG (uint64_t)BIT_1
1981 #define TASK_DAEMON_ALIVE_FLG (uint64_t)BIT_2
1982 #define TASK_DAEMON_IDLE_CHK_FLG (uint64_t)BIT_3
1983
1984 #define SUSPENDED_WAKEUP_FLG (uint64_t)BIT_4
1985 #define FC_STATE_CHANGE (uint64_t)BIT_5
1986 #define NEED_UNSOLICITED_BUFFERS (uint64_t)BIT_6
1987 #define MARKER_NEEDED (uint64_t)BIT_7
1988
1989 #define MARKER_ACTIVE (uint64_t)BIT_8
1990 #define ISP_ABORT_NEEDED (uint64_t)BIT_9
1991 #define ABORT_ISP_ACTIVE (uint64_t)BIT_10
1992 #define LOOP_RESYNC_NEEDED (uint64_t)BIT_11
1993
1994 #define LOOP_RESYNC_ACTIVE (uint64_t)BIT_12
1995 #define LOOP_DOWN (uint64_t)BIT_13
1996 #define DRIVER_STALL (uint64_t)BIT_14
1997 #define COMMAND_WAIT_NEEDED (uint64_t)BIT_15
1998
1999 #define COMMAND_WAIT_ACTIVE (uint64_t)BIT_16
2000 #define STATE_ONLINE (uint64_t)BIT_17
2001 #define ABORT_QUEUES_NEEDED (uint64_t)BIT_18
2002 #define TASK_DAEMON_STALLED_FLG (uint64_t)BIT_19
2003
2004 #define SEND_PLOGI (uint64_t)BIT_20
2005 #define FIRMWARE_UP (uint64_t)BIT_21
2006 #define IDC_POLL_NEEDED (uint64_t)BIT_22
2007 #define FIRMWARE_LOADED (uint64_t)BIT_23
2008
2009 #define RSCN_UPDATE_NEEDED (uint64_t)BIT_24
2010 #define HANDLE_PORT_BYPASS_CHANGE (uint64_t)BIT_25
2011 #define PORT_RETRY_NEEDED (uint64_t)BIT_26
2012 #define TASK_DAEMON_POWERING_DOWN (uint64_t)BIT_27
2013
2014 #define TD_IIDMA_NEEDED (uint64_t)BIT_28
2015 #define WATCHDOG_NEEDED (uint64_t)BIT_29
2016 #define LED_BLINK (uint64_t)BIT_30
2017
2018 #define DTF_EL_MSG_SKIP_FLGS (IDC_POLL_NEEDED | WATCHDOG_NEEDED | \
2019 TASK_DAEMON_IDLE_CHK_FLG | LED_BLINK)
2020 /*
2021 * Mailbox flags
2022 */
2023 #define MBX_WANT_FLG BIT_0
2024 #define MBX_BUSY_FLG BIT_1
2025 #define MBX_INTERRUPT BIT_2
2026 #define MBX_ABORT BIT_3
2027
2028 /*
2029 * Configuration flags
2030 */
2031 #define CFG_CTRL_27XX (uint64_t)BIT_0
2032 #define CFG_ENABLE_64BIT_ADDRESSING (uint64_t)BIT_1
2033 #define CFG_ENABLE_LIP_RESET (uint64_t)BIT_2
2034 #define CFG_ENABLE_FULL_LIP_LOGIN (uint64_t)BIT_3
2035
2036 #define CFG_ENABLE_TARGET_RESET (uint64_t)BIT_4
2037 #define CFG_ENABLE_LINK_DOWN_REPORTING (uint64_t)BIT_5
2038 #define CFG_LR_SUPPORT (uint64_t)BIT_6
2039 #define CFG_ENABLE_FCP_2_SUPPORT (uint64_t)BIT_7
2040
2041 #define CFG_CTRL_83XX (uint64_t)BIT_8
2042 #define CFG_SBUS_CARD (uint64_t)BIT_9
2043 #define CFG_CTRL_23XX (uint64_t)BIT_10
2044 #define CFG_CTRL_63XX (uint64_t)BIT_11
2045
2046 #define CFG_CTRL_22XX (uint64_t)BIT_12
2047 #define CFG_CTRL_24XX (uint64_t)BIT_13
2048 #define CFG_CTRL_25XX (uint64_t)BIT_14
2049 #define CFG_ENABLE_EXTENDED_LOGGING (uint64_t)BIT_15
2050
2051 #define CFG_DISABLE_RISC_CODE_LOAD (uint64_t)BIT_16
2052 #define CFG_SET_CACHE_LINE_SIZE_1 (uint64_t)BIT_17
2053 #define CFG_CTRL_MENLO (uint64_t)BIT_18
2054 #define CFG_EXT_FW_INTERFACE (uint64_t)BIT_19
2055
2056 #define CFG_LOAD_FLASH_FW (uint64_t)BIT_20
2057 #define CFG_DUMP_MAILBOX_TIMEOUT (uint64_t)BIT_21
2058 #define CFG_DUMP_ISP_SYSTEM_ERROR (uint64_t)BIT_22
2059 #define CFG_DUMP_DRIVER_COMMAND_TIMEOUT (uint64_t)BIT_23
2060
2061 #define CFG_DUMP_LOOP_OFFLINE_TIMEOUT (uint64_t)BIT_24
2062 #define CFG_ENABLE_FWEXTTRACE (uint64_t)BIT_25
2063 #define CFG_ENABLE_FWFCETRACE (uint64_t)BIT_26
2064 #define CFG_CTRL_80XX (uint64_t)BIT_27
2065
2066 #define CFG_CTRL_81XX (uint64_t)BIT_28
2067 #define CFG_CTRL_82XX (uint64_t)BIT_29
2068 #define CFG_FAST_TIMEOUT (uint64_t)BIT_30
2069
2070 #define CFG_CTRL_2363 (CFG_CTRL_23XX | CFG_CTRL_63XX)
2071 #define CFG_CTRL_2425 (CFG_CTRL_24XX | CFG_CTRL_25XX)
2072 #define CFG_CTRL_2783 (CFG_CTRL_27XX | CFG_CTRL_83XX)
2073 #define CFG_CTRL_8081 (CFG_CTRL_80XX | CFG_CTRL_81XX)
2074 #define CFG_CTRL_278083 (CFG_CTRL_80XX | CFG_CTRL_2783)
2075 #define CFG_CTRL_27808183 (CFG_CTRL_8081 | CFG_CTRL_2783)
2076 #define CFG_CTRL_2527808183 (CFG_CTRL_25XX | CFG_CTRL_27808183)
2077 #define CFG_CTRL_252780818283 (CFG_CTRL_82XX | CFG_CTRL_2527808183)
2078
2079 #define CFG_ISP_FW_TYPE_1 (CFG_CTRL_22XX | CFG_CTRL_2363)
2080 #define CFG_ISP_FW_TYPE_2 (CFG_CTRL_24XX | CFG_CTRL_252780818283)
2081 #define CFG_FCIP_TYPE_1 (CFG_CTRL_22XX | CFG_CTRL_23XX)
2082 #define CFG_FCIP_SUPPORT (CFG_FCIP_TYPE_1 | CFG_CTRL_24XX)
2083 #define CFG_FCOE_SUPPORT (CFG_CTRL_82XX | CFG_CTRL_8081)
2084 #define CFG_N2N_SUPPORT (CFG_CTRL_2425 | CFG_CTRL_2783)
2085 #define CFG_FC_TYPE_1 (CFG_CTRL_22XX | CFG_CTRL_2363)
2086 #define CFG_FC_TYPE_2 (CFG_CTRL_2425 | CFG_CTRL_2783)
2087 #define CFG_FC_TYPE (CFG_FC_TYPE_1 | CFG_FC_TYPE_2)
2088 #define CFG_NO_INTR_HSHAKE_SUP (CFG_CTRL_27808183)
2089 #define CFG_MWB_4096_SUPPORT (CFG_CTRL_2425 | CFG_CTRL_81XX)
2090 #define CFG_IIDMA_SUPPORT (CFG_CTRL_8081 | CFG_FC_TYPE_2)
2091 #define CFG_FLASH_ACC_SUPPORT (CFG_CTRL_27808183)
2092 #define CFG_FLASH_DMA_SUPPORT (CFG_CTRL_2527808183)
2093 #define CFG_LOOP_POINT_SUPPORT (CFG_CTRL_8081)
2094 #define CFG_LB_ECHO_SUPPORT (CFG_CTRL_2363 | CFG_ISP_FW_TYPE_2)
2095 #define CFG_SET_LEDS_SUPPORT (CFG_CTRL_2363 | CFG_ISP_FW_TYPE_2)
2096 #define CFG_SERDES_SUPPORT (CFG_CTRL_2783)
2097 #define CFG_BBCR_SUPPORT (CFG_CTRL_2783)
2098 #define CFG_MSI_SUPPORT (CFG_CTRL_2425 | CFG_CTRL_81XX | CFG_CTRL_82XX)
2099
2100
2101 #define CFG_IST(ha, cfgflags) (ha->cfg_flags & (cfgflags))
2102
2103 /*
2104 * Interrupt configuration flags
2105 */
2106 #define IFLG_INTR_LEGACY BIT_0
2107 #define IFLG_INTR_FIXED BIT_1
2108 #define IFLG_INTR_MSI BIT_2
2109 #define IFLG_INTR_MSIX BIT_3
2110
2111 #define IFLG_INTR_AIF (IFLG_INTR_MSI | IFLG_INTR_FIXED | IFLG_INTR_MSIX)
2112
2113 /*
2114 * Macros to help code, maintain, etc.
2115 */
2116 #define LSB(x) (uint8_t)(x)
2117 #define MSB(x) (uint8_t)((uint16_t)(x) >> 8)
2118 #define MSW(x) (uint16_t)((uint32_t)(x) >> 16)
2119 #define LSW(x) (uint16_t)(x)
2120 #define LSD(x) (uint32_t)(x)
2121 #define MSD(x) (uint32_t)((uint64_t)(x) >> 32)
2122
2123 #define LONG_TO_LLONG(lsl, msl) (uint64_t)((uint64_t)(msl) << 32 | \
2124 (uint32_t)(lsl))
2125 #define SHORT_TO_LONG(lsw, msw) (uint32_t)((uint32_t)msw << 16 | (uint16_t)lsw)
2126 #define CHAR_TO_SHORT(lsb, msb) (uint16_t)((uint16_t)msb << 8 | (uint8_t)lsb)
2127 #define CHAR_TO_LONG(lsb, b1, b2, msb) \
2128 (uint32_t)(SHORT_TO_LONG(CHAR_TO_SHORT(lsb, b1), \
2129 CHAR_TO_SHORT(b2, msb)))
2130
2131 /* Little endian machine correction defines. */
2132 #ifdef _LITTLE_ENDIAN
2133 #define LITTLE_ENDIAN_16(x)
2134 #define LITTLE_ENDIAN_24(x)
2135 #define LITTLE_ENDIAN_32(x)
2136 #define LITTLE_ENDIAN_64(x)
2137 #define LITTLE_ENDIAN(bp, bytes)
2138 #define BIG_ENDIAN_16(x) ql_chg_endian((uint8_t *)x, 2)
2139 #define BIG_ENDIAN_24(x) ql_chg_endian((uint8_t *)x, 3)
2140 #define BIG_ENDIAN_32(x) ql_chg_endian((uint8_t *)x, 4)
2141 #define BIG_ENDIAN_64(x) ql_chg_endian((uint8_t *)x, 8)
2142 #define BIG_ENDIAN(bp, bytes) ql_chg_endian((uint8_t *)bp, bytes)
2143 #endif /* _LITTLE_ENDIAN */
2144
2145 /* Big endian machine correction defines. */
2146 #ifdef _BIG_ENDIAN
2147 #define LITTLE_ENDIAN_16(x) ql_chg_endian((uint8_t *)x, 2)
2148 #define LITTLE_ENDIAN_24(x) ql_chg_endian((uint8_t *)x, 3)
2149 #define LITTLE_ENDIAN_32(x) ql_chg_endian((uint8_t *)x, 4)
2150 #define LITTLE_ENDIAN_64(x) ql_chg_endian((uint8_t *)x, 8)
2151 #define LITTLE_ENDIAN(bp, bytes) ql_chg_endian((uint8_t *)bp, bytes)
2152 #define BIG_ENDIAN_16(x)
2153 #define BIG_ENDIAN_24(x)
2154 #define BIG_ENDIAN_32(x)
2155 #define BIG_ENDIAN_64(x)
2156 #define BIG_ENDIAN(bp, bytes)
2157 #endif /* _BIG_ENDIAN */
2158
2159 #define LOCAL_LOOP_ID(x) (x <= LAST_LOCAL_LOOP_ID)
2160
2161 #define FABRIC_LOOP_ID(x) (x == FL_PORT_LOOP_ID || \
2162 x == SIMPLE_NAME_SERVER_LOOP_ID)
2163
2164 #define SNS_LOOP_ID(x) (x >= SNS_FIRST_LOOP_ID && \
2165 x <= SNS_LAST_LOOP_ID)
2166
2167 #define BROADCAST_LOOP_ID(x) (x == IP_BROADCAST_LOOP_ID)
2168
2169 #define VALID_LOOP_ID(x) (LOCAL_LOOP_ID(x) || SNS_LOOP_ID(x) || \
2170 FABRIC_LOOP_ID(x) || BROADCAST_LOOP_ID(x))
2171
2172 #define VALID_N_PORT_HDL(x) (x <= LAST_N_PORT_HDL || \
2173 (x >= SNS_24XX_HDL && x <= BROADCAST_24XX_HDL))
2174
2175 #define VALID_DEVICE_ID(ha, x) (CFG_IST(ha, CFG_ISP_FW_TYPE_2) ? \
2176 VALID_N_PORT_HDL(x) : VALID_LOOP_ID(x))
2177
2178 #define VALID_TARGET_ID(ha, x) (CFG_IST(ha, CFG_ISP_FW_TYPE_2) ? \
2179 (x <= LAST_N_PORT_HDL) : (LOCAL_LOOP_ID(x) || SNS_LOOP_ID(x)))
2180
2181 #define RESERVED_LOOP_ID(ha, x) (CFG_IST(ha, CFG_ISP_FW_TYPE_2) ? \
2182 (x > LAST_N_PORT_HDL && x <= FL_PORT_24XX_HDL) : \
2183 (x >= FL_PORT_LOOP_ID && x <= SIMPLE_NAME_SERVER_LOOP_ID))
2184
2185 #define QL_LOOP_TRANSITION (MARKER_NEEDED | MARKER_ACTIVE | \
2186 ISP_ABORT_NEEDED | ABORT_ISP_ACTIVE | \
2187 LOOP_RESYNC_NEEDED | LOOP_RESYNC_ACTIVE | \
2188 COMMAND_WAIT_NEEDED | COMMAND_WAIT_ACTIVE)
2189
2190 #define LOOP_RECONFIGURE(ha) (ha->task_daemon_flags & (QL_LOOP_TRANSITION | \
2191 DRIVER_STALL))
2192
2193 #define DRIVER_SUSPENDED(ha) (ha->task_daemon_flags & (LOOP_DOWN | \
2194 QL_LOOP_TRANSITION | DRIVER_STALL))
2195
2196 #define LOOP_NOT_READY(ha) (ha->task_daemon_flags & (QL_LOOP_TRANSITION | \
2197 LOOP_DOWN))
2198
2199 #define LOOP_READY(ha) (LOOP_NOT_READY(ha) == 0)
2200
2201 #define QL_TASK_PENDING(ha) ( \
2202 ha->task_daemon_flags & (QL_LOOP_TRANSITION | ABORT_QUEUES_NEEDED | \
2203 PORT_RETRY_NEEDED) || ha->unsol_callback_queue.first != NULL)
2204
2205 #define QL_DAEMON_NOT_ACTIVE(ha) ( \
2206 !(ha->task_daemon_flags & TASK_DAEMON_ALIVE_FLG) || \
2207 ha->task_daemon_flags & (TASK_DAEMON_SLEEPING_FLG | \
2208 TASK_DAEMON_STOP_FLG))
2209
2210 #define QL_ABORTED_SRB(ha) ((ql_srb_t *)ha)
2211
2212 #define INTERRUPT_PENDING(ha) (CFG_IST(ha, CFG_CTRL_82XX) ? \
2213 RD32_IO_REG(ha, nx_risc_int) & NX_RISC_INT : \
2214 RD16_IO_REG(ha, istatus) & RISC_INT)
2215 /*
2216 * Locking Macro Definitions
2217 */
2218 #define GLOBAL_STATE_LOCK() mutex_enter(&ql_global_mutex)
2219 #define GLOBAL_STATE_UNLOCK() mutex_exit(&ql_global_mutex)
2220
2221 #define GLOBAL_TIMER_LOCK() mutex_enter(&ql_global_timer_mutex)
2222 #define GLOBAL_TIMER_UNLOCK() mutex_exit(&ql_global_timer_mutex)
2223
2224 #define TRY_DEVICE_QUEUE_LOCK(q) mutex_tryenter(&q->mutex)
2225 #define DEVICE_QUEUE_LOCK(q) mutex_enter(&q->mutex)
2226 #define DEVICE_QUEUE_UNLOCK(q) mutex_exit(&q->mutex)
2227
2228 #define TRY_MBX_REGISTER_LOCK(ha) mutex_tryenter(&ha->pha->mbx_mutex)
2229 #define MBX_REGISTER_LOCK_OWNER(ha) mutex_owner(&ha->pha->mbx_mutex)
2230 #define MBX_REGISTER_LOCK(ha) mutex_enter(&ha->pha->mbx_mutex)
2231 #define MBX_REGISTER_UNLOCK(ha) mutex_exit(&ha->pha->mbx_mutex)
2232
2233 #define INTR_LOCK(ha) ql_intr_lock(ha->pha)
2234 #define INTR_UNLOCK(ha) ql_intr_unlock(ha->pha)
2235
2236 #define INDX_INTR_LOCK(ha, i) mutex_enter(&ha->pha->rsp_queues[i]->intr_mutex)
2237 #define INDX_INTR_UNLOCK(ha, i) mutex_exit(&ha->pha->rsp_queues[i]->intr_mutex)
2238
2239 #define TASK_DAEMON_LOCK(ha) mutex_enter(&ha->pha->task_daemon_mutex)
2240 #define TASK_DAEMON_UNLOCK(ha) mutex_exit(&ha->pha->task_daemon_mutex)
2241
2242 #define REQUEST_RING_LOCK(ha) mutex_enter(&ha->pha->req_ring_mutex)
2243 #define REQUEST_RING_UNLOCK(ha) mutex_exit(&ha->pha->req_ring_mutex)
2244
2245 #define COMP_Q_LOCK(ha) mutex_enter(&ha->pha->comp_q_mutex)
2246 #define COMP_Q_UNLOCK(ha) mutex_exit(&ha->pha->comp_q_mutex)
2247
2248 #define ADAPTER_STATE_LOCK(ha) mutex_enter(&ha->pha->mutex)
2249 #define ADAPTER_STATE_UNLOCK(ha) mutex_exit(&ha->pha->mutex)
2250
2251 #define QL_DUMP_LOCK(ha) mutex_enter(&ha->pha->dump_mutex)
2252 #define QL_DUMP_UNLOCK(ha) mutex_exit(&ha->pha->dump_mutex)
2253
2254 #define QL_PM_LOCK(ha) mutex_enter(&ha->pha->pm_mutex)
2255 #define QL_PM_UNLOCK(ha) mutex_exit(&ha->pha->pm_mutex)
2256
2257 #define QL_UB_LOCK(ha) mutex_enter(&ha->pha->ub_mutex)
2258 #define QL_UB_UNLOCK(ha) mutex_exit(&ha->pha->ub_mutex)
2259
2260 #define GLOBAL_HW_LOCK() mutex_enter(&ql_global_hw_mutex)
2261 #define GLOBAL_HW_UNLOCK() mutex_exit(&ql_global_hw_mutex)
2262
2263 /*
2264 * PCI power management control/status register location
2265 */
2266 #define QL_PM_CS_REG 0x48
2267
2268 /*
2269 * ql component
2270 */
2271 #define QL_POWER_COMPONENT 0
2272
2273 typedef struct ql_config_space {
2274 uint16_t chs_command;
2275 uint8_t chs_cache_line_size;
2276 uint8_t chs_latency_timer;
2277 uint8_t chs_header_type;
2278 uint8_t chs_sec_latency_timer;
2279 uint8_t chs_bridge_control;
2280 uint32_t chs_base0;
2281 uint32_t chs_base1;
2282 uint32_t chs_base2;
2283 uint32_t chs_base3;
2284 uint32_t chs_base4;
2285 uint32_t chs_base5;
2286 } ql_config_space_t;
2287
2288 #ifdef USE_DDI_INTERFACES
2289
2290 #define QL_SAVE_CONFIG_REGS(dip) pci_save_config_regs(dip)
2291 #define QL_RESTORE_CONFIG_REGS(dip) pci_restore_config_regs(dip)
2292
2293 #else /* USE_DDI_INTERFACES */
2294
2295 #define QL_SAVE_CONFIG_REGS(dip) ql_save_config_regs(dip)
2296 #define QL_RESTORE_CONFIG_REGS(dip) ql_restore_config_regs(dip)
2297
2298 #endif /* USE_DDI_INTERFACES */
2299
2300 /*
2301 * QL local function return status codes
2302 */
2303 #define QL_SUCCESS 0x4000
2304 #define QL_INVALID_COMMAND 0x4001
2305 #define QL_INTERFACE_ERROR 0x4002
2306 #define QL_TEST_FAILED 0x4003
2307 #define QL_COMMAND_ERROR 0x4005
2308 #define QL_PARAMETER_ERROR 0x4006
2309 #define QL_PORT_ID_USED 0x4007
2310 #define QL_LOOP_ID_USED 0x4008
2311 #define QL_ALL_IDS_IN_USE 0x4009
2312 #define QL_NOT_LOGGED_IN 0x400A
2313 #define QL_LOOP_DOWN 0x400B
2314 #define QL_LOOP_BACK_ERROR 0x400C
2315 #define QL_CHECKSUM_ERROR 0x4010
2316 #define QL_CONSUMED 0x4011
2317
2318 #define QL_FUNCTION_TIMEOUT 0x100
2319 #define QL_FUNCTION_PARAMETER_ERROR 0x101
2320 #define QL_FUNCTION_FAILED 0x102
2321 #define QL_MEMORY_ALLOC_FAILED 0x103
2322 #define QL_FABRIC_NOT_INITIALIZED 0x104
2323 #define QL_LOCK_TIMEOUT 0x105
2324 #define QL_ABORTED 0x106
2325 #define QL_FUNCTION_SUSPENDED 0x107
2326 #define QL_END_OF_DATA 0x108
2327 #define QL_IP_UNSUPPORTED 0x109
2328 #define QL_PM_ERROR 0x10a
2329 #define QL_DATA_EXISTS 0x10b
2330 #define QL_NOT_SUPPORTED 0x10c
2331 #define QL_MEMORY_FULL 0x10d
2332 #define QL_FW_NOT_SUPPORTED 0x10e
2333 #define QL_FWMODLOAD_FAILED 0x10f
2334 #define QL_FWSYM_NOT_FOUND 0x110
2335 #define QL_LOGIN_NOT_SUPPORTED 0x111
2336
2337 /*
2338 * SBus card FPGA register offsets.
2339 */
2340 #define FPGA_CONF 0x100
2341 #define FPGA_EEPROM_LOADDR 0x102
2342 #define FPGA_EEPROM_HIADDR 0x104
2343 #define FPGA_EEPROM_DATA 0x106
2344 #define FPGA_REVISION 0x108
2345
2346 #define SBUS_FLASH_WRITE_ENABLE 0x0080
2347 #define QL_SBUS_FCODE_SIZE 0x30000
2348 #define QL_FCODE_OFFSET 0
2349 #define QL_FPGA_SIZE 0x40000
2350 #define QL_FPGA_OFFSET 0x40000
2351
2352 #define READ_PORT_ID(addr) ((uint32_t)((((uint32_t)((addr)[0])) << 16) | \
2353 (((uint32_t)((addr)[1])) << 8) | \
2354 (((uint32_t)((addr)[2])))))
2355 #define READ_PORT_NAME(addr) ((u_longlong_t)((((uint64_t)((addr)[0])) << 56) | \
2356 (((uint64_t)((addr)[1])) << 48) | \
2357 (((uint64_t)((addr)[2])) << 40) | \
2358 (((uint64_t)((addr)[3])) << 32) | \
2359 (((uint64_t)((addr)[4])) << 24) | \
2360 (((uint64_t)((addr)[5])) << 16) | \
2361 (((uint64_t)((addr)[6])) << 8) | \
2362 (((uint64_t)((addr)[7])))))
2363 /*
2364 * Structure used to associate cmds with strings which describe them.
2365 */
2366 typedef struct cmd_table_entry {
2367 uint16_t cmd;
2368 char *string;
2369 } cmd_table_t;
2370
2371 /*
2372 * ELS command table initializer
2373 */
2374 #define ELS_CMD_TABLE() \
2375 { \
2376 {LA_ELS_RJT, "LA_ELS_RJT"}, \
2377 {LA_ELS_ACC, "LA_ELS_ACC"}, \
2378 {LA_ELS_PLOGI, "LA_ELS_PLOGI"}, \
2379 {LA_ELS_PDISC, "LA_ELS_PDISC"}, \
2380 {LA_ELS_FLOGI, "LA_ELS_FLOGI"}, \
2381 {LA_ELS_FDISC, "LA_ELS_FDISC"}, \
2382 {LA_ELS_LOGO, "LA_ELS_LOGO"}, \
2383 {LA_ELS_PRLI, "LA_ELS_PRLI"}, \
2384 {LA_ELS_PRLO, "LA_ELS_PRLO"}, \
2385 {LA_ELS_ADISC, "LA_ELS_ADISC"}, \
2386 {LA_ELS_LINIT, "LA_ELS_LINIT"}, \
2387 {LA_ELS_LPC, "LA_ELS_LPC"}, \
2388 {LA_ELS_LSTS, "LA_ELS_LSTS"}, \
2389 {LA_ELS_SCR, "LA_ELS_SCR"}, \
2390 {LA_ELS_RSCN, "LA_ELS_RSCN"}, \
2391 {LA_ELS_FARP_REQ, "LA_ELS_FARP_REQ"}, \
2392 {LA_ELS_FARP_REPLY, "LA_ELS_FARP_REPLY"}, \
2393 {LA_ELS_RLS, "LA_ELS_RLS"}, \
2394 {LA_ELS_RNID, "LA_ELS_RNID"}, \
2395 {NULL, NULL} \
2396 }
2397
2398 /*
2399 * ELS Passthru IOCB data segment descriptor.
2400 */
2401 typedef struct data_seg_desc {
2402 uint32_t addr[2];
2403 uint32_t length;
2404 } data_seg_desc_t;
2405
2406 /*
2407 * ELS descriptor used to abstract the hosts fibre channel packet
2408 * from the ISP ELS code.
2409 */
2410 typedef struct els_desc {
2411 uint8_t els; /* the ELS command code */
2412 ddi_acc_handle_t els_handle;
2413 uint16_t n_port_handle;
2414 port_id_t d_id;
2415 port_id_t s_id;
2416 uint16_t control_flags;
2417 uint32_t cmd_byte_count;
2418 uint32_t rsp_byte_count;
2419 data_seg_desc_t tx_dsd; /* FC frame payload */
2420 data_seg_desc_t rx_dsd; /* ELS resp payload buffer */
2421 } els_descriptor_t;
2422
2423 typedef struct prli_svc_pram_resp_page {
2424 uint8_t type_code;
2425 uint8_t type_code_ext;
2426 uint16_t prli_resp_flags;
2427 uint32_t orig_process_associator;
2428 uint32_t resp_process_associator;
2429 uint32_t common_parameters;
2430 } prli_svc_pram_resp_page_t;
2431
2432 /*
2433 * PRLI accept Service Parameter Page Word 3
2434 */
2435 #define PRLI_W3_WRITE_FCP_XFR_RDY_DISABLED BIT_0
2436 #define PRLI_W3_READ_FCP_XFR_RDY_DISABLED BIT_1
2437 #define PRLI_W3_OBSOLETE_BIT_2 BIT_2
2438 #define PRLI_W3_OBSOLETE_BIT_3 BIT_3
2439 #define PRLI_W3_TARGET_FUNCTION BIT_4
2440 #define PRLI_W3_INITIATOR_FUNCTION BIT_5
2441 #define PRLI_W3_DATA_OVERLAY_ALLOWED BIT_6
2442 #define PRLI_W3_CONFIRMED_COMP_ALLOWED BIT_7
2443 #define PRLI_W3_RETRY BIT_8
2444 #define PRLI_W3_TASK_RETRY_ID_REQUESTED BIT_9
2445
2446 typedef struct prli_acc_resp {
2447 uint8_t ls_code;
2448 uint8_t page_length;
2449 uint16_t payload_length;
2450 struct prli_svc_pram_resp_page svc_params;
2451 } prli_acc_resp_t;
2452
2453 #define EL_TRACE_BUF_SIZE 8192
2454
2455 #define QL_PORT_ID_MASK 0xffffff
2456
2457 #define QL_PLOGI_RETRY_CNT (5)
2458 #define QL_PLOGI_RETRY_DLY_USEC (10 * MILLISEC)
2459
2460 /*
2461 * Global Data in ql_api.c source file.
2462 */
2463 extern void *ql_state; /* for soft state routine */
2464 extern uint32_t ql_os_release_level;
2465 extern ql_head_t ql_hba;
2466 extern kmutex_t ql_global_mutex;
2467 extern kmutex_t ql_global_hw_mutex;
2468 extern kmutex_t ql_global_el_mutex;
2469 extern uint8_t ql_ip_fast_post_count;
2470 extern uint32_t ql_ip_buffer_count;
2471 extern uint32_t ql_ip_low_water;
2472 extern uint8_t ql_alpa_to_index[];
2473 extern uint32_t ql_gfru_hba_index;
2474 extern uint32_t ql_enable_ets;
2475 extern uint16_t ql_osc_wait_count;
2476
2477 /*
2478 * Global Function Prototypes in ql_api.c source file.
2479 */
2480 void ql_chg_endian(uint8_t *, size_t);
2481 void ql_populate_hba_fru_details(ql_adapter_state_t *, fc_fca_port_info_t *);
2482 void ql_setup_fruinfo(ql_adapter_state_t *);
2483 uint16_t ql_pci_config_get16(ql_adapter_state_t *, off_t);
2484 uint32_t ql_pci_config_get32(ql_adapter_state_t *, off_t);
2485 void ql_pci_config_put8(ql_adapter_state_t *, off_t, uint8_t);
2486 void ql_pci_config_put16(ql_adapter_state_t *, off_t, uint16_t);
2487 void ql_delay(ql_adapter_state_t *, clock_t);
2488 void ql_awaken_task_daemon(ql_adapter_state_t *, ql_srb_t *, uint64_t,
2489 uint64_t);
2490 int ql_abort_device(ql_adapter_state_t *, ql_tgt_t *, int);
2491 int ql_binary_fw_dump(ql_adapter_state_t *, int);
2492 void ql_done(ql_link_t *, boolean_t);
2493 int ql_24xx_flash_id(ql_adapter_state_t *);
2494 int ql_24xx_load_flash(ql_adapter_state_t *, uint8_t *, uint32_t, uint32_t);
2495 int ql_poll_flash(ql_adapter_state_t *, uint32_t, uint8_t);
2496 void ql_flash_disable(ql_adapter_state_t *);
2497 void ql_flash_enable(ql_adapter_state_t *);
2498 int ql_erase_flash(ql_adapter_state_t *, int);
2499 void ql_write_flash_byte(ql_adapter_state_t *, uint32_t, uint8_t);
2500 uint8_t ql_read_flash_byte(ql_adapter_state_t *, uint32_t);
2501 int ql_24xx_read_flash(ql_adapter_state_t *, uint32_t, uint32_t *);
2502 int ql_24xx_write_flash(ql_adapter_state_t *, uint32_t, uint32_t);
2503 fc_unsol_buf_t *ql_get_unsolicited_buffer(ql_adapter_state_t *, uint32_t);
2504 int ql_dump_firmware(ql_adapter_state_t *);
2505 size_t ql_ascii_fw_dump(ql_adapter_state_t *, caddr_t);
2506 void ql_add_link_b(ql_head_t *, ql_link_t *);
2507 void ql_add_link_t(ql_head_t *, ql_link_t *);
2508 void ql_remove_link(ql_head_t *, ql_link_t *);
2509 void ql_next(ql_adapter_state_t *, ql_lun_t *);
2510 void ql_send_logo(ql_adapter_state_t *, ql_tgt_t *, ql_head_t *);
2511 void ql_cthdr_endian(ddi_acc_handle_t, caddr_t, boolean_t);
2512 ql_tgt_t *ql_d_id_to_queue(ql_adapter_state_t *, port_id_t);
2513 ql_tgt_t *ql_loop_id_to_queue(ql_adapter_state_t *, uint16_t);
2514 void ql_cmd_wait(ql_adapter_state_t *);
2515 void ql_loop_online(ql_adapter_state_t *);
2516 ql_tgt_t *ql_dev_init(ql_adapter_state_t *, port_id_t, uint16_t);
2517 int ql_ub_frame_hdr(ql_adapter_state_t *, ql_tgt_t *, uint16_t, ql_head_t *);
2518 void ql_rcv_rscn_els(ql_adapter_state_t *, uint16_t *, ql_head_t *);
2519 int ql_stall_driver(ql_adapter_state_t *, uint32_t);
2520 void ql_restart_driver(ql_adapter_state_t *);
2521 int ql_load_flash(ql_adapter_state_t *, uint8_t *, uint32_t);
2522 int ql_get_dma_mem(ql_adapter_state_t *, dma_mem_t *, uint32_t,
2523 mem_alloc_type_t, mem_alignment_t);
2524 void ql_free_dma_resource(ql_adapter_state_t *, dma_mem_t *);
2525 int ql_alloc_phys(ql_adapter_state_t *, dma_mem_t *, int);
2526 void ql_free_phys(ql_adapter_state_t *, dma_mem_t *);
2527 void ql_24xx_protect_flash(ql_adapter_state_t *);
2528 uint8_t ql_pci_config_get8(ql_adapter_state_t *, off_t);
2529 void ql_pci_config_put32(ql_adapter_state_t *, off_t, uint32_t);
2530 int ql_24xx_unprotect_flash(ql_adapter_state_t *);
2531 char *els_cmd_text(int);
2532 char *mbx_cmd_text(int);
2533 char *cmd_text(cmd_table_t *, int);
2534 uint32_t ql_fwmodule_resolve(ql_adapter_state_t *);
2535 void ql_port_state(ql_adapter_state_t *, uint32_t, uint32_t);
2536 void ql_isp_els_handle_cmd_endian(ql_adapter_state_t *ha, ql_srb_t *srb);
2537 void ql_isp_els_handle_rsp_endian(ql_adapter_state_t *ha, ql_srb_t *srb);
2538 void ql_isp_els_handle_endian(ql_adapter_state_t *ha, uint8_t *ptr,
2539 uint8_t ls_code);
2540 void ql_el_trace_alloc(ql_adapter_state_t *);
2541 void ql_el_trace_dealloc(ql_adapter_state_t *);
2542 int ql_nvram_cache_desc_ctor(ql_adapter_state_t *);
2543 int ql_nvram_cache_desc_dtor(ql_adapter_state_t *);
2544 int ql_plogi_params_desc_ctor(ql_adapter_state_t *);
2545 int ql_plogi_params_desc_dtor(ql_adapter_state_t *);
2546 int ql_wwn_cmp(ql_adapter_state_t *, la_wwn_t *, la_wwn_t *);
2547 void ql_dev_free(ql_adapter_state_t *, ql_tgt_t *);
2548 void ql_restart_queues(ql_adapter_state_t *);
2549 void ql_abort_queues(ql_adapter_state_t *);
2550 void ql_requeue_pending_cmds(ql_adapter_state_t *, ql_tgt_t *);
2551 void ql_toggle_loop_state(ql_adapter_state_t *);
2552 void ql_els_24xx_iocb(ql_adapter_state_t *, ql_request_q_t *, ql_srb_t *,
2553 void *);
2554 int ql_get_cap_ofst(ql_adapter_state_t *, uint8_t);
2555 void ql_intr_lock(ql_adapter_state_t *);
2556 void ql_intr_unlock(ql_adapter_state_t *);
2557 void ql_io_comp(ql_srb_t *sp);
2558 uint64_t ql_get_lun_addr(ql_tgt_t *, uint16_t);
2559 int ql_2700_get_flash_dmp_template(ql_adapter_state_t *);
2560 int ql_2700_get_module_dmp_template(ql_adapter_state_t *);
2561
2562 #ifdef __cplusplus
2563 }
2564 #endif
2565
2566 #endif /* _QL_API_H */