1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20#ifndef __QLA_DEF_H
21#define __QLA_DEF_H
22
23#include <linux/kernel.h>
24#include <linux/init.h>
25#include <linux/types.h>
26#include <linux/module.h>
27#include <linux/list.h>
28#include <linux/pci.h>
29#include <linux/dma-mapping.h>
30#include <linux/sched.h>
31#include <linux/slab.h>
32#include <linux/dmapool.h>
33#include <linux/mempool.h>
34#include <linux/spinlock.h>
35#include <linux/completion.h>
36#include <asm/semaphore.h>
37
38#include <scsi/scsi.h>
39#include <scsi/scsi_host.h>
40#include <scsi/scsi_device.h>
41#include <scsi/scsi_cmnd.h>
42
43
44#ifndef PCI_DEVICE_ID_QLOGIC_ISP2300
45#define PCI_DEVICE_ID_QLOGIC_ISP2300 0x2300
46#endif
47
48#ifndef PCI_DEVICE_ID_QLOGIC_ISP2312
49#define PCI_DEVICE_ID_QLOGIC_ISP2312 0x2312
50#endif
51
52#ifndef PCI_DEVICE_ID_QLOGIC_ISP2322
53#define PCI_DEVICE_ID_QLOGIC_ISP2322 0x2322
54#endif
55
56#ifndef PCI_DEVICE_ID_QLOGIC_ISP6312
57#define PCI_DEVICE_ID_QLOGIC_ISP6312 0x6312
58#endif
59
60#ifndef PCI_DEVICE_ID_QLOGIC_ISP6322
61#define PCI_DEVICE_ID_QLOGIC_ISP6322 0x6322
62#endif
63
64#if defined(CONFIG_SCSI_QLA21XX) || defined(CONFIG_SCSI_QLA21XX_MODULE)
65#define IS_QLA2100(ha) ((ha)->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP2100)
66#else
67#define IS_QLA2100(ha) 0
68#endif
69
70#if defined(CONFIG_SCSI_QLA22XX) || defined(CONFIG_SCSI_QLA22XX_MODULE)
71#define IS_QLA2200(ha) ((ha)->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP2200)
72#else
73#define IS_QLA2200(ha) 0
74#endif
75
76#if defined(CONFIG_SCSI_QLA2300) || defined(CONFIG_SCSI_QLA2300_MODULE)
77#define IS_QLA2300(ha) ((ha)->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP2300)
78#define IS_QLA2312(ha) ((ha)->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP2312)
79#else
80#define IS_QLA2300(ha) 0
81#define IS_QLA2312(ha) 0
82#endif
83
84#if defined(CONFIG_SCSI_QLA2322) || defined(CONFIG_SCSI_QLA2322_MODULE)
85#define IS_QLA2322(ha) ((ha)->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP2322)
86#else
87#define IS_QLA2322(ha) 0
88#endif
89
90#if defined(CONFIG_SCSI_QLA6312) || defined(CONFIG_SCSI_QLA6312_MODULE)
91#define IS_QLA6312(ha) ((ha)->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP6312)
92#else
93#define IS_QLA6312(ha) 0
94#endif
95
96#if defined(CONFIG_SCSI_QLA6322) || defined(CONFIG_SCSI_QLA6322_MODULE)
97#define IS_QLA6322(ha) ((ha)->pdev->device == PCI_DEVICE_ID_QLOGIC_ISP6322)
98#else
99#define IS_QLA6322(ha) 0
100#endif
101
102#define IS_QLA23XX(ha) (IS_QLA2300(ha) || IS_QLA2312(ha) || IS_QLA2322(ha) || \
103 IS_QLA6312(ha) || IS_QLA6322(ha))
104
105
106
107
108#define HAS_EXTENDED_IDS(ha) (!IS_QLA2100(ha) && !IS_QLA2200(ha))
109
110
111
112
113
114
115#define MAILBOX_REGISTER_COUNT_2100 8
116#define MAILBOX_REGISTER_COUNT 32
117
118#define QLA2200A_RISC_ROM_VER 4
119#define FPM_2300 6
120#define FPM_2310 7
121
122#include "qla_settings.h"
123
124
125
126
127#define BIT_0 0x1
128#define BIT_1 0x2
129#define BIT_2 0x4
130#define BIT_3 0x8
131#define BIT_4 0x10
132#define BIT_5 0x20
133#define BIT_6 0x40
134#define BIT_7 0x80
135#define BIT_8 0x100
136#define BIT_9 0x200
137#define BIT_10 0x400
138#define BIT_11 0x800
139#define BIT_12 0x1000
140#define BIT_13 0x2000
141#define BIT_14 0x4000
142#define BIT_15 0x8000
143#define BIT_16 0x10000
144#define BIT_17 0x20000
145#define BIT_18 0x40000
146#define BIT_19 0x80000
147#define BIT_20 0x100000
148#define BIT_21 0x200000
149#define BIT_22 0x400000
150#define BIT_23 0x800000
151#define BIT_24 0x1000000
152#define BIT_25 0x2000000
153#define BIT_26 0x4000000
154#define BIT_27 0x8000000
155#define BIT_28 0x10000000
156#define BIT_29 0x20000000
157#define BIT_30 0x40000000
158#define BIT_31 0x80000000
159
160#define LSB(x) ((uint8_t)(x))
161#define MSB(x) ((uint8_t)((uint16_t)(x) >> 8))
162
163#define LSW(x) ((uint16_t)(x))
164#define MSW(x) ((uint16_t)((uint32_t)(x) >> 16))
165
166#define LSD(x) ((uint32_t)((uint64_t)(x)))
167#define MSD(x) ((uint32_t)((((uint64_t)(x)) >> 16) >> 16))
168
169
170
171
172
173
174#define RD_REG_BYTE(addr) readb(addr)
175#define RD_REG_WORD(addr) readw(addr)
176#define RD_REG_DWORD(addr) readl(addr)
177#define RD_REG_BYTE_RELAXED(addr) readb_relaxed(addr)
178#define RD_REG_WORD_RELAXED(addr) readw_relaxed(addr)
179#define RD_REG_DWORD_RELAXED(addr) readl_relaxed(addr)
180#define WRT_REG_BYTE(addr, data) writeb(data,addr)
181#define WRT_REG_WORD(addr, data) writew(data,addr)
182#define WRT_REG_DWORD(addr, data) writel(data,addr)
183
184
185
186
187#define WWN_SIZE 8
188#define MAX_FIBRE_DEVICES 512
189#define MAX_FIBRE_LUNS 256
190#define MAX_RSCN_COUNT 32
191#define MAX_HOST_COUNT 16
192
193
194
195
196#define MAX_BUSES 1
197#define MAX_TARGETS_2100 MAX_FIBRE_DEVICES
198#define MAX_TARGETS_2200 MAX_FIBRE_DEVICES
199#define MAX_TARGETS MAX_FIBRE_DEVICES
200#define MIN_LUNS 8
201#define MAX_LUNS MAX_FIBRE_LUNS
202#define MAX_CMDS_PER_LUN 255
203
204
205
206
207#define SNS_LAST_LOOP_ID_2100 0xfe
208#define SNS_LAST_LOOP_ID_2300 0x7ff
209
210#define LAST_LOCAL_LOOP_ID 0x7d
211#define SNS_FL_PORT 0x7e
212#define FABRIC_CONTROLLER 0x7f
213#define SIMPLE_NAME_SERVER 0x80
214#define SNS_FIRST_LOOP_ID 0x81
215#define MANAGEMENT_SERVER 0xfe
216#define BROADCAST 0xff
217
218#define RESERVED_LOOP_ID(x) ((x > LAST_LOCAL_LOOP_ID && \
219 x < SNS_FIRST_LOOP_ID) || \
220 x == MANAGEMENT_SERVER || \
221 x == BROADCAST)
222
223
224
225
226#define PORT_RETRY_TIME 2
227#define LOOP_DOWN_TIMEOUT 60
228#define LOOP_DOWN_TIME 255
229#define LOOP_DOWN_RESET (LOOP_DOWN_TIME - 30)
230
231
232#define MAX_OUTSTANDING_COMMANDS 1024
233
234
235#define REQUEST_ENTRY_CNT_2100 128
236#define REQUEST_ENTRY_CNT_2200 2048
237#define REQUEST_ENTRY_CNT_2XXX_EXT_MEM 4096
238#define RESPONSE_ENTRY_CNT_2100 64
239#define RESPONSE_ENTRY_CNT_2300 512
240
241
242
243
244typedef struct srb {
245 struct list_head list;
246
247 struct scsi_qla_host *ha;
248
249 struct scsi_cmnd *cmd;
250
251 struct timer_list timer;
252 atomic_t ref_count;
253 uint16_t flags;
254
255
256 uint16_t state;
257
258
259 struct os_tgt *tgt_queue;
260 struct os_lun *lun_queue;
261 struct fc_lun *fclun;
262
263
264 unsigned long e_start;
265 unsigned long r_start;
266 unsigned long u_start;
267 unsigned long f_start;
268
269
270 dma_addr_t dma_handle;
271
272 uint32_t request_sense_length;
273 uint8_t *request_sense_ptr;
274
275 int ext_history;
276
277
278 int delay;
279
280
281 uint8_t fo_retry_cnt;
282 uint8_t err_id;
283#define SRB_ERR_PORT 1
284#define SRB_ERR_LOOP 2
285#define SRB_ERR_DEVICE 3
286#define SRB_ERR_OTHER 4
287
288
289 uint16_t magic;
290#define SRB_MAGIC 0x10CB
291} srb_t;
292
293
294
295
296#define SRB_TIMEOUT BIT_0
297#define SRB_DMA_VALID BIT_1
298#define SRB_WATCHDOG BIT_2
299#define SRB_ABORT_PENDING BIT_3
300
301#define SRB_ABORTED BIT_4
302#define SRB_RETRY BIT_5
303#define SRB_GOT_SENSE BIT_6
304#define SRB_FAILOVER BIT_7
305
306#define SRB_BUSY BIT_8
307#define SRB_FO_CANCEL BIT_9
308#define SRB_IOCTL BIT_10
309#define SRB_TAPE BIT_11
310
311
312
313
314#define SRB_FREE_STATE 0
315#define SRB_PENDING_STATE 1
316#define SRB_ACTIVE_STATE 2
317#define SRB_DONE_STATE 3
318#define SRB_RETRY_STATE 4
319#define SRB_SUSPENDED_STATE 5
320#define SRB_NO_QUEUE_STATE 6
321#define SRB_ACTIVE_TIMEOUT_STATE 7
322#define SRB_FAILOVER_STATE 8
323#define SRB_SCSI_RETRY_STATE 9
324
325
326
327
328
329typedef volatile struct {
330 volatile uint16_t flash_address;
331 volatile uint16_t flash_data;
332 uint16_t unused_1[1];
333 volatile uint16_t ctrl_status;
334#define CSR_FLASH_64K_BANK BIT_3
335#define CSR_FLASH_ENABLE BIT_1
336#define CSR_ISP_SOFT_RESET BIT_0
337
338 volatile uint16_t ictrl;
339#define ICR_EN_INT BIT_15
340#define ICR_EN_RISC BIT_3
341
342 volatile uint16_t istatus;
343#define ISR_RISC_INT BIT_3
344
345 volatile uint16_t semaphore;
346 volatile uint16_t nvram;
347#define NVR_DESELECT 0
348#define NVR_BUSY BIT_15
349#define NVR_DATA_IN BIT_3
350#define NVR_DATA_OUT BIT_2
351#define NVR_SELECT BIT_1
352#define NVR_CLOCK BIT_0
353
354 union {
355 struct {
356 volatile uint16_t mailbox0;
357 volatile uint16_t mailbox1;
358 volatile uint16_t mailbox2;
359 volatile uint16_t mailbox3;
360 volatile uint16_t mailbox4;
361 volatile uint16_t mailbox5;
362 volatile uint16_t mailbox6;
363 volatile uint16_t mailbox7;
364 uint16_t unused_2[59];
365 } __attribute__((packed)) isp2100;
366 struct {
367
368 volatile uint16_t req_q_in;
369 volatile uint16_t req_q_out;
370
371 volatile uint16_t rsp_q_in;
372 volatile uint16_t rsp_q_out;
373
374
375 volatile uint32_t host_status;
376#define HSR_RISC_INT BIT_15
377#define HSR_RISC_PAUSED BIT_8
378
379
380 volatile uint16_t host_semaphore;
381 uint16_t unused_3[17];
382 volatile uint16_t mailbox0;
383 volatile uint16_t mailbox1;
384 volatile uint16_t mailbox2;
385 volatile uint16_t mailbox3;
386 volatile uint16_t mailbox4;
387 volatile uint16_t mailbox5;
388 volatile uint16_t mailbox6;
389 volatile uint16_t mailbox7;
390 volatile uint16_t mailbox8;
391 volatile uint16_t mailbox9;
392 volatile uint16_t mailbox10;
393 volatile uint16_t mailbox11;
394 volatile uint16_t mailbox12;
395 volatile uint16_t mailbox13;
396 volatile uint16_t mailbox14;
397 volatile uint16_t mailbox15;
398 volatile uint16_t mailbox16;
399 volatile uint16_t mailbox17;
400 volatile uint16_t mailbox18;
401 volatile uint16_t mailbox19;
402 volatile uint16_t mailbox20;
403 volatile uint16_t mailbox21;
404 volatile uint16_t mailbox22;
405 volatile uint16_t mailbox23;
406 volatile uint16_t mailbox24;
407 volatile uint16_t mailbox25;
408 volatile uint16_t mailbox26;
409 volatile uint16_t mailbox27;
410 volatile uint16_t mailbox28;
411 volatile uint16_t mailbox29;
412 volatile uint16_t mailbox30;
413 volatile uint16_t mailbox31;
414 volatile uint16_t fb_cmd;
415 uint16_t unused_4[10];
416 } __attribute__((packed)) isp2300;
417 } u;
418
419 volatile uint16_t fpm_diag_config;
420 uint16_t unused_5[0x6];
421 volatile uint16_t pcr;
422 uint16_t unused_6[0x5];
423 volatile uint16_t mctr;
424 uint16_t unused_7[0x3];
425 volatile uint16_t fb_cmd_2100;
426 uint16_t unused_8[0x3];
427 volatile uint16_t hccr;
428#define HCCR_HOST_INT BIT_7
429#define HCCR_RISC_PAUSE BIT_5
430
431#define HCCR_RESET_RISC 0x1000
432#define HCCR_PAUSE_RISC 0x2000
433#define HCCR_RELEASE_RISC 0x3000
434#define HCCR_SET_HOST_INT 0x5000
435#define HCCR_CLR_HOST_INT 0x6000
436#define HCCR_CLR_RISC_INT 0x7000
437#define HCCR_DISABLE_PARITY_PAUSE 0x4001
438#define HCCR_ENABLE_PARITY 0xA000
439
440 uint16_t unused_9[5];
441 volatile uint16_t gpiod;
442 volatile uint16_t gpioe;
443#define GPIO_LED_MASK 0x00C0
444#define GPIO_LED_GREEN_OFF_AMBER_OFF 0x0000
445#define GPIO_LED_GREEN_ON_AMBER_OFF 0x0040
446#define GPIO_LED_GREEN_OFF_AMBER_ON 0x0080
447#define GPIO_LED_GREEN_ON_AMBER_ON 0x00C0
448
449 union {
450 struct {
451 uint16_t unused_10[8];
452 volatile uint16_t mailbox8;
453 volatile uint16_t mailbox9;
454 volatile uint16_t mailbox10;
455 volatile uint16_t mailbox11;
456 volatile uint16_t mailbox12;
457 volatile uint16_t mailbox13;
458 volatile uint16_t mailbox14;
459 volatile uint16_t mailbox15;
460 volatile uint16_t mailbox16;
461 volatile uint16_t mailbox17;
462 volatile uint16_t mailbox18;
463 volatile uint16_t mailbox19;
464 volatile uint16_t mailbox20;
465 volatile uint16_t mailbox21;
466 volatile uint16_t mailbox22;
467 volatile uint16_t mailbox23;
468 } __attribute__((packed)) isp2200;
469 } u_end;
470} device_reg_t;
471
472#define ISP_REQ_Q_IN(ha, reg) \
473 (IS_QLA2100(ha) || IS_QLA2200(ha) ? \
474 &(reg)->u.isp2100.mailbox4 : \
475 &(reg)->u.isp2300.req_q_in)
476#define ISP_REQ_Q_OUT(ha, reg) \
477 (IS_QLA2100(ha) || IS_QLA2200(ha) ? \
478 &(reg)->u.isp2100.mailbox4 : \
479 &(reg)->u.isp2300.req_q_out)
480#define ISP_RSP_Q_IN(ha, reg) \
481 (IS_QLA2100(ha) || IS_QLA2200(ha) ? \
482 &(reg)->u.isp2100.mailbox5 : \
483 &(reg)->u.isp2300.rsp_q_in)
484#define ISP_RSP_Q_OUT(ha, reg) \
485 (IS_QLA2100(ha) || IS_QLA2200(ha) ? \
486 &(reg)->u.isp2100.mailbox5 : \
487 &(reg)->u.isp2300.rsp_q_out)
488
489#define MAILBOX_REG(ha, reg, num) \
490 (IS_QLA2100(ha) || IS_QLA2200(ha) ? \
491 (num < 8 ? \
492 &(reg)->u.isp2100.mailbox0 + (num) : \
493 &(reg)->u_end.isp2200.mailbox8 + (num) - 8) : \
494 &(reg)->u.isp2300.mailbox0 + (num))
495#define RD_MAILBOX_REG(ha, reg, num) \
496 RD_REG_WORD(MAILBOX_REG(ha, reg, num))
497#define WRT_MAILBOX_REG(ha, reg, num, data) \
498 WRT_REG_WORD(MAILBOX_REG(ha, reg, num), data)
499
500#define FB_CMD_REG(ha, reg) \
501 (IS_QLA2100(ha) || IS_QLA2200(ha) ? \
502 &(reg)->fb_cmd_2100 : \
503 &(reg)->u.isp2300.fb_cmd)
504#define RD_FB_CMD_REG(ha, reg) \
505 RD_REG_WORD(FB_CMD_REG(ha, reg))
506#define WRT_FB_CMD_REG(ha, reg, data) \
507 WRT_REG_WORD(FB_CMD_REG(ha, reg), data)
508
509typedef struct {
510 uint32_t out_mb;
511 uint32_t in_mb;
512 uint16_t mb[MAILBOX_REGISTER_COUNT];
513 long buf_size;
514 void *bufp;
515 uint32_t tov;
516 uint8_t flags;
517#define MBX_DMA_IN BIT_0
518#define MBX_DMA_OUT BIT_1
519#define IOCTL_CMD BIT_2
520} mbx_cmd_t;
521
522#define MBX_TOV_SECONDS 30
523
524
525
526
527#define PROD_ID_1 0x4953
528#define PROD_ID_2 0x0000
529#define PROD_ID_2a 0x5020
530#define PROD_ID_3 0x2020
531
532
533
534
535#define MBS_FRM_ALIVE 0
536#define MBS_CHKSUM_ERR 1
537#define MBS_BUSY 4
538
539
540
541
542#define MBS_COMMAND_COMPLETE 0x4000
543#define MBS_INVALID_COMMAND 0x4001
544#define MBS_HOST_INTERFACE_ERROR 0x4002
545#define MBS_TEST_FAILED 0x4003
546#define MBS_COMMAND_ERROR 0x4005
547#define MBS_COMMAND_PARAMETER_ERROR 0x4006
548#define MBS_PORT_ID_USED 0x4007
549#define MBS_LOOP_ID_USED 0x4008
550#define MBS_ALL_IDS_IN_USE 0x4009
551#define MBS_NOT_LOGGED_IN 0x400A
552
553
554
555
556#define MBA_ASYNC_EVENT 0x8000
557#define MBA_RESET 0x8001
558#define MBA_SYSTEM_ERR 0x8002
559#define MBA_REQ_TRANSFER_ERR 0x8003
560#define MBA_RSP_TRANSFER_ERR 0x8004
561#define MBA_WAKEUP_THRES 0x8005
562#define MBA_LIP_OCCURRED 0x8010
563
564#define MBA_LOOP_UP 0x8011
565#define MBA_LOOP_DOWN 0x8012
566#define MBA_LIP_RESET 0x8013
567#define MBA_PORT_UPDATE 0x8014
568#define MBA_RSCN_UPDATE 0x8015
569#define MBA_LIP_F8 0x8016
570#define MBA_LOOP_INIT_ERR 0x8017
571#define MBA_FABRIC_AUTH_REQ 0x801b
572#define MBA_SCSI_COMPLETION 0x8020
573#define MBA_CTIO_COMPLETION 0x8021
574#define MBA_IP_COMPLETION 0x8022
575#define MBA_IP_RECEIVE 0x8023
576#define MBA_IP_BROADCAST 0x8024
577#define MBA_IP_LOW_WATER_MARK 0x8025
578#define MBA_IP_RCV_BUFFER_EMPTY 0x8026
579#define MBA_IP_HDR_DATA_SPLIT 0x8027
580
581#define MBA_POINT_TO_POINT 0x8030
582#define MBA_CMPLT_1_16BIT 0x8031
583#define MBA_CMPLT_2_16BIT 0x8032
584#define MBA_CMPLT_3_16BIT 0x8033
585#define MBA_CMPLT_4_16BIT 0x8034
586#define MBA_CMPLT_5_16BIT 0x8035
587#define MBA_CHG_IN_CONNECTION 0x8036
588#define MBA_RIO_RESPONSE 0x8040
589#define MBA_ZIO_RESPONSE 0x8040
590#define MBA_CMPLT_2_32BIT 0x8042
591#define MBA_BYPASS_NOTIFICATION 0x8043
592#define MBA_DISCARD_RND_FRAME 0x8048
593#define MBA_REJECTED_FCP_CMD 0x8049
594
595
596
597
598#define FO1_AE_ON_LIPF8 BIT_0
599#define FO1_AE_ALL_LIP_RESET BIT_1
600#define FO1_CTIO_RETRY BIT_3
601#define FO1_DISABLE_LIP_F7_SW BIT_4
602#define FO1_DISABLE_100MS_LOS_WAIT BIT_5
603#define FO1_DISABLE_GPIO6_7 BIT_6
604#define FO1_AE_ON_LOOP_INIT_ERR BIT_7
605#define FO1_SET_EMPHASIS_SWING BIT_8
606#define FO1_AE_AUTO_BYPASS BIT_9
607#define FO1_ENABLE_PURE_IOCB BIT_10
608#define FO1_AE_PLOGI_RJT BIT_11
609#define FO1_ENABLE_ABORT_SEQUENCE BIT_12
610#define FO1_AE_QUEUE_FULL BIT_13
611
612#define FO2_ENABLE_ATIO_TYPE_3 BIT_0
613#define FO2_REV_LOOPBACK BIT_1
614
615#define FO3_ENABLE_EMERG_IOCB BIT_0
616#define FO3_AE_RND_ERROR BIT_1
617
618
619
620
621#define MBC_LOAD_RAM 1
622#define MBC_EXECUTE_FIRMWARE 2
623#define MBC_WRITE_RAM_WORD 4
624#define MBC_READ_RAM_WORD 5
625#define MBC_MAILBOX_REGISTER_TEST 6
626#define MBC_VERIFY_CHECKSUM 7
627#define MBC_GET_FIRMWARE_VERSION 8
628#define MBC_LOAD_RISC_RAM 9
629#define MBC_DUMP_RISC_RAM 0xa
630#define MBC_LOAD_RISC_RAM_EXTENDED 0xb
631#define MBC_DUMP_RISC_RAM_EXTENDED 0xc
632#define MBC_WRITE_RAM_WORD_EXTENDED 0xd
633#define MBC_READ_RAM_EXTENDED 0xf
634#define MBC_IOCB_COMMAND 0x12
635#define MBC_ABORT_COMMAND 0x15
636#define MBC_ABORT_DEVICE 0x16
637#define MBC_ABORT_TARGET 0x17
638#define MBC_RESET 0x18
639#define MBC_GET_ADAPTER_LOOP_ID 0x20
640#define MBC_GET_RETRY_COUNT 0x22
641#define MBC_DISABLE_VI 0x24
642#define MBC_ENABLE_VI 0x25
643#define MBC_GET_FIRMWARE_OPTION 0x28
644#define MBC_SET_FIRMWARE_OPTION 0x38
645#define MBC_LOOP_PORT_BYPASS 0x40
646#define MBC_LOOP_PORT_ENABLE 0x41
647#define MBC_GET_RESOURCE_COUNTS 0x42
648#define MBC_NON_PARTICIPATE 0x43
649#define MBC_DIAGNOSTIC_ECHO 0x44
650#define MBC_DIAGNOSTIC_LOOP_BACK 0x45
651#define MBC_ONLINE_SELF_TEST 0x46
652#define MBC_ENHANCED_GET_PORT_DATABASE 0x47
653#define MBC_RESET_LINK_STATUS 0x52
654#define MBC_IOCB_COMMAND_A64 0x54
655#define MBC_SEND_RNID_ELS 0x57
656#define MBC_SET_RNID_PARAMS 0x59
657#define MBC_GET_RNID_PARAMS 0x5a
658#define MBC_DATA_RATE 0x5d
659#define MBC_INITIALIZE_FIRMWARE 0x60
660#define MBC_INITIATE_LIP 0x62
661
662#define MBC_GET_FC_AL_POSITION_MAP 0x63
663#define MBC_GET_PORT_DATABASE 0x64
664#define MBC_CLEAR_ACA 0x65
665#define MBC_TARGET_RESET 0x66
666#define MBC_CLEAR_TASK_SET 0x67
667#define MBC_ABORT_TASK_SET 0x68
668#define MBC_GET_FIRMWARE_STATE 0x69
669#define MBC_GET_PORT_NAME 0x6a
670#define MBC_GET_LINK_STATUS 0x6b
671#define MBC_LIP_RESET 0x6c
672#define MBC_SEND_SNS_COMMAND 0x6e
673
674#define MBC_LOGIN_FABRIC_PORT 0x6f
675#define MBC_SEND_CHANGE_REQUEST 0x70
676#define MBC_LOGOUT_FABRIC_PORT 0x71
677#define MBC_LIP_FULL_LOGIN 0x72
678#define MBC_LOGIN_LOOP_PORT 0x74
679#define MBC_PORT_NODE_NAME_LIST 0x75
680#define MBC_INITIALIZE_RECEIVE_QUEUE 0x77
681#define MBC_UNLOAD_IP 0x79
682#define MBC_GET_ID_LIST 0x7C
683#define MBC_SEND_LFA_COMMAND 0x7D
684#define MBC_LUN_RESET 0x7E
685
686
687#define FCAL_MAP_SIZE 128
688
689
690#define MBX_31 BIT_31
691#define MBX_30 BIT_30
692#define MBX_29 BIT_29
693#define MBX_28 BIT_28
694#define MBX_27 BIT_27
695#define MBX_26 BIT_26
696#define MBX_25 BIT_25
697#define MBX_24 BIT_24
698#define MBX_23 BIT_23
699#define MBX_22 BIT_22
700#define MBX_21 BIT_21
701#define MBX_20 BIT_20
702#define MBX_19 BIT_19
703#define MBX_18 BIT_18
704#define MBX_17 BIT_17
705#define MBX_16 BIT_16
706#define MBX_15 BIT_15
707#define MBX_14 BIT_14
708#define MBX_13 BIT_13
709#define MBX_12 BIT_12
710#define MBX_11 BIT_11
711#define MBX_10 BIT_10
712#define MBX_9 BIT_9
713#define MBX_8 BIT_8
714#define MBX_7 BIT_7
715#define MBX_6 BIT_6
716#define MBX_5 BIT_5
717#define MBX_4 BIT_4
718#define MBX_3 BIT_3
719#define MBX_2 BIT_2
720#define MBX_1 BIT_1
721#define MBX_0 BIT_0
722
723
724
725
726#define FSTATE_CONFIG_WAIT 0
727#define FSTATE_WAIT_AL_PA 1
728#define FSTATE_WAIT_LOGIN 2
729#define FSTATE_READY 3
730#define FSTATE_LOSS_OF_SYNC 4
731#define FSTATE_ERROR 5
732#define FSTATE_REINIT 6
733#define FSTATE_NON_PART 7
734
735#define FSTATE_CONFIG_CORRECT 0
736#define FSTATE_P2P_RCV_LIP 1
737#define FSTATE_P2P_CHOOSE_LOOP 2
738#define FSTATE_P2P_RCV_UNIDEN_LIP 3
739#define FSTATE_FATAL_ERROR 4
740#define FSTATE_LOOP_BACK_CONN 5
741
742
743
744
745
746#define PORT_DATABASE_SIZE 128
747typedef struct {
748 uint8_t options;
749 uint8_t control;
750 uint8_t master_state;
751 uint8_t slave_state;
752 uint8_t reserved[2];
753 uint8_t hard_address;
754 uint8_t reserved_1;
755 uint8_t port_id[4];
756 uint8_t node_name[WWN_SIZE];
757 uint8_t port_name[WWN_SIZE];
758 uint16_t execution_throttle;
759 uint16_t execution_count;
760 uint8_t reset_count;
761 uint8_t reserved_2;
762 uint16_t resource_allocation;
763 uint16_t current_allocation;
764 uint16_t queue_head;
765 uint16_t queue_tail;
766 uint16_t transmit_execution_list_next;
767 uint16_t transmit_execution_list_previous;
768 uint16_t common_features;
769 uint16_t total_concurrent_sequences;
770 uint16_t RO_by_information_category;
771 uint8_t recipient;
772 uint8_t initiator;
773 uint16_t receive_data_size;
774 uint16_t concurrent_sequences;
775 uint16_t open_sequences_per_exchange;
776 uint16_t lun_abort_flags;
777 uint16_t lun_stop_flags;
778 uint16_t stop_queue_head;
779 uint16_t stop_queue_tail;
780 uint16_t port_retry_timer;
781 uint16_t next_sequence_id;
782 uint16_t frame_count;
783 uint16_t PRLI_payload_length;
784 uint8_t prli_svc_param_word_0[2];
785
786 uint8_t prli_svc_param_word_3[2];
787
788 uint16_t loop_id;
789 uint16_t extended_lun_info_list_pointer;
790 uint16_t extended_lun_stop_list_pointer;
791} port_database_t;
792
793
794
795
796#define PD_STATE_DISCOVERY 0
797#define PD_STATE_WAIT_DISCOVERY_ACK 1
798#define PD_STATE_PORT_LOGIN 2
799#define PD_STATE_WAIT_PORT_LOGIN_ACK 3
800#define PD_STATE_PROCESS_LOGIN 4
801#define PD_STATE_WAIT_PROCESS_LOGIN_ACK 5
802#define PD_STATE_PORT_LOGGED_IN 6
803#define PD_STATE_PORT_UNAVAILABLE 7
804#define PD_STATE_PROCESS_LOGOUT 8
805#define PD_STATE_WAIT_PROCESS_LOGOUT_ACK 9
806#define PD_STATE_PORT_LOGOUT 10
807#define PD_STATE_WAIT_PORT_LOGOUT_ACK 11
808
809
810
811
812
813
814#define ICB_VERSION 1
815typedef struct {
816 uint8_t version;
817 uint8_t reserved_1;
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838 uint8_t firmware_options[2];
839
840 uint16_t frame_payload_size;
841 uint16_t max_iocb_allocation;
842 uint16_t execution_throttle;
843 uint8_t retry_count;
844 uint8_t retry_delay;
845 uint8_t port_name[WWN_SIZE];
846 uint16_t hard_address;
847 uint8_t inquiry_data;
848 uint8_t login_timeout;
849 uint8_t node_name[WWN_SIZE];
850
851 uint16_t request_q_outpointer;
852 uint16_t response_q_inpointer;
853 uint16_t request_q_length;
854 uint16_t response_q_length;
855 uint32_t request_q_address[2];
856 uint32_t response_q_address[2];
857
858 uint16_t lun_enables;
859 uint8_t command_resource_count;
860 uint8_t immediate_notify_resource_count;
861 uint16_t timeout;
862 uint8_t reserved_2[2];
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883 uint8_t add_firmware_options[2];
884
885 uint8_t response_accumulation_timer;
886 uint8_t interrupt_delay_timer;
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907 uint8_t special_options[2];
908
909 uint8_t reserved_3[26];
910} init_cb_t;
911
912
913
914
915typedef struct {
916 uint32_t link_fail_cnt;
917 uint32_t loss_sync_cnt;
918 uint32_t loss_sig_cnt;
919 uint32_t prim_seq_err_cnt;
920 uint32_t inval_xmit_word_cnt;
921 uint32_t inval_crc_cnt;
922} link_stat_t;
923
924
925
926
927#define NV_START_BIT BIT_2
928#define NV_WRITE_OP (BIT_26+BIT_24)
929#define NV_READ_OP (BIT_26+BIT_25)
930#define NV_ERASE_OP (BIT_26+BIT_25+BIT_24)
931#define NV_MASK_OP (BIT_26+BIT_25+BIT_24)
932#define NV_DELAY_COUNT 10
933
934
935
936
937typedef struct {
938
939
940
941 uint8_t id[4];
942 uint8_t nvram_version;
943 uint8_t reserved_0;
944
945
946
947
948 uint8_t parameter_block_version;
949 uint8_t reserved_1;
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970 uint8_t firmware_options[2];
971
972 uint16_t frame_payload_size;
973 uint16_t max_iocb_allocation;
974 uint16_t execution_throttle;
975 uint8_t retry_count;
976 uint8_t retry_delay;
977 uint8_t port_name[WWN_SIZE];
978 uint16_t hard_address;
979 uint8_t inquiry_data;
980 uint8_t login_timeout;
981 uint8_t node_name[WWN_SIZE];
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002 uint8_t add_firmware_options[2];
1003
1004 uint8_t response_accumulation_timer;
1005 uint8_t interrupt_delay_timer;
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026 uint8_t special_options[2];
1027
1028
1029 uint8_t reserved_2[24];
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050 uint8_t seriallink_options[2];
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073 uint8_t host_p[2];
1074
1075 uint8_t boot_node_name[WWN_SIZE];
1076 uint8_t boot_lun_number;
1077 uint8_t reset_delay;
1078 uint8_t port_down_retry_count;
1079 uint8_t boot_id_number;
1080 uint16_t max_luns_per_target;
1081 uint8_t fcode_boot_port_name[WWN_SIZE];
1082 uint8_t alternate_port_name[WWN_SIZE];
1083 uint8_t alternate_node_name[WWN_SIZE];
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095 uint8_t efi_parameters;
1096
1097 uint8_t link_down_timeout;
1098
1099 uint8_t adapter_id_0[4];
1100 uint8_t adapter_id_1[4];
1101 uint8_t adapter_id_2[4];
1102 uint8_t adapter_id_3[4];
1103
1104 uint8_t alt1_boot_node_name[WWN_SIZE];
1105 uint16_t alt1_boot_lun_number;
1106 uint8_t alt2_boot_node_name[WWN_SIZE];
1107 uint16_t alt2_boot_lun_number;
1108 uint8_t alt3_boot_node_name[WWN_SIZE];
1109 uint16_t alt3_boot_lun_number;
1110 uint8_t alt4_boot_node_name[WWN_SIZE];
1111 uint16_t alt4_boot_lun_number;
1112 uint8_t alt5_boot_node_name[WWN_SIZE];
1113 uint16_t alt5_boot_lun_number;
1114 uint8_t alt6_boot_node_name[WWN_SIZE];
1115 uint16_t alt6_boot_lun_number;
1116 uint8_t alt7_boot_node_name[WWN_SIZE];
1117 uint16_t alt7_boot_lun_number;
1118
1119 uint8_t reserved_3[2];
1120
1121
1122 uint8_t model_number[16];
1123
1124
1125 uint8_t oem_specific[16];
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148 uint8_t adapter_features[2];
1149
1150 uint8_t reserved_4[16];
1151
1152
1153 uint16_t subsystem_vendor_id_2200;
1154
1155
1156 uint16_t subsystem_device_id_2200;
1157
1158 uint8_t reserved_5;
1159 uint8_t checksum;
1160} nvram_t;
1161
1162
1163
1164
1165typedef struct {
1166 uint8_t data[60];
1167 uint32_t signature;
1168#define RESPONSE_PROCESSED 0xDEADDEAD
1169} response_t;
1170
1171typedef union {
1172 uint16_t extended;
1173 struct {
1174 uint8_t reserved;
1175 uint8_t standard;
1176 } id;
1177} target_id_t;
1178
1179#define SET_TARGET_ID(ha, to, from) \
1180do { \
1181 if (HAS_EXTENDED_IDS(ha)) \
1182 to.extended = cpu_to_le16(from); \
1183 else \
1184 to.id.standard = (uint8_t)from; \
1185} while (0)
1186
1187
1188
1189
1190#define COMMAND_TYPE 0x11
1191#define MAX_CMDSZ 16
1192typedef struct {
1193 uint8_t entry_type;
1194 uint8_t entry_count;
1195 uint8_t sys_define;
1196 uint8_t entry_status;
1197 uint32_t handle;
1198 target_id_t target;
1199 uint16_t lun;
1200 uint16_t control_flags;
1201#define CF_WRITE BIT_6
1202#define CF_READ BIT_5
1203#define CF_SIMPLE_TAG BIT_3
1204#define CF_ORDERED_TAG BIT_2
1205#define CF_HEAD_TAG BIT_1
1206 uint16_t reserved_1;
1207 uint16_t timeout;
1208 uint16_t dseg_count;
1209 uint8_t scsi_cdb[MAX_CMDSZ];
1210 uint32_t byte_count;
1211 uint32_t dseg_0_address;
1212 uint32_t dseg_0_length;
1213 uint32_t dseg_1_address;
1214 uint32_t dseg_1_length;
1215 uint32_t dseg_2_address;
1216 uint32_t dseg_2_length;
1217} cmd_entry_t;
1218
1219
1220
1221
1222#define COMMAND_A64_TYPE 0x19
1223typedef struct {
1224 uint8_t entry_type;
1225 uint8_t entry_count;
1226 uint8_t sys_define;
1227 uint8_t entry_status;
1228 uint32_t handle;
1229 target_id_t target;
1230 uint16_t lun;
1231 uint16_t control_flags;
1232 uint16_t reserved_1;
1233 uint16_t timeout;
1234 uint16_t dseg_count;
1235 uint8_t scsi_cdb[MAX_CMDSZ];
1236 uint32_t byte_count;
1237 uint32_t dseg_0_address[2];
1238 uint32_t dseg_0_length;
1239 uint32_t dseg_1_address[2];
1240 uint32_t dseg_1_length;
1241} cmd_a64_entry_t, request_t;
1242
1243
1244
1245
1246#define CONTINUE_TYPE 0x02
1247typedef struct {
1248 uint8_t entry_type;
1249 uint8_t entry_count;
1250 uint8_t sys_define;
1251 uint8_t entry_status;
1252 uint32_t reserved;
1253 uint32_t dseg_0_address;
1254 uint32_t dseg_0_length;
1255 uint32_t dseg_1_address;
1256 uint32_t dseg_1_length;
1257 uint32_t dseg_2_address;
1258 uint32_t dseg_2_length;
1259 uint32_t dseg_3_address;
1260 uint32_t dseg_3_length;
1261 uint32_t dseg_4_address;
1262 uint32_t dseg_4_length;
1263 uint32_t dseg_5_address;
1264 uint32_t dseg_5_length;
1265 uint32_t dseg_6_address;
1266 uint32_t dseg_6_length;
1267} cont_entry_t;
1268
1269
1270
1271
1272#define CONTINUE_A64_TYPE 0x0A
1273typedef struct {
1274 uint8_t entry_type;
1275 uint8_t entry_count;
1276 uint8_t sys_define;
1277 uint8_t entry_status;
1278 uint32_t dseg_0_address[2];
1279 uint32_t dseg_0_length;
1280 uint32_t dseg_1_address[2];
1281 uint32_t dseg_1_length;
1282 uint32_t dseg_2_address [2];
1283 uint32_t dseg_2_length;
1284 uint32_t dseg_3_address[2];
1285 uint32_t dseg_3_length;
1286 uint32_t dseg_4_address[2];
1287 uint32_t dseg_4_length;
1288} cont_a64_entry_t;
1289
1290
1291
1292
1293#define STATUS_TYPE 0x03
1294typedef struct {
1295 uint8_t entry_type;
1296 uint8_t entry_count;
1297 uint8_t sys_define;
1298 uint8_t entry_status;
1299 uint32_t handle;
1300 uint16_t scsi_status;
1301 uint16_t comp_status;
1302 uint16_t state_flags;
1303 uint16_t status_flags;
1304 uint16_t rsp_info_len;
1305 uint16_t req_sense_length;
1306 uint32_t residual_length;
1307 uint8_t rsp_info[8];
1308 uint8_t req_sense_data[32];
1309} sts_entry_t;
1310
1311
1312
1313
1314#define RF_INV_E_ORDER BIT_5
1315#define RF_INV_E_COUNT BIT_4
1316#define RF_INV_E_PARAM BIT_3
1317#define RF_INV_E_TYPE BIT_2
1318#define RF_BUSY BIT_1
1319
1320
1321
1322
1323#define SS_MASK 0xfff
1324#define SS_RESIDUAL_UNDER BIT_11
1325#define SS_RESIDUAL_OVER BIT_10
1326#define SS_SENSE_LEN_VALID BIT_9
1327#define SS_RESPONSE_INFO_LEN_VALID BIT_8
1328
1329#define SS_RESERVE_CONFLICT (BIT_4 | BIT_3)
1330#define SS_BUSY_CONDITION BIT_3
1331#define SS_CONDITION_MET BIT_2
1332#define SS_CHECK_CONDITION BIT_1
1333
1334
1335
1336
1337#define CS_COMPLETE 0x0
1338#define CS_INCOMPLETE 0x1
1339#define CS_DMA 0x2
1340#define CS_TRANSPORT 0x3
1341#define CS_RESET 0x4
1342#define CS_ABORTED 0x5
1343#define CS_TIMEOUT 0x6
1344#define CS_DATA_OVERRUN 0x7
1345
1346#define CS_DATA_UNDERRUN 0x15
1347#define CS_QUEUE_FULL 0x1C
1348#define CS_PORT_UNAVAILABLE 0x28
1349
1350#define CS_PORT_LOGGED_OUT 0x29
1351#define CS_PORT_CONFIG_CHG 0x2A
1352#define CS_PORT_BUSY 0x2B
1353#define CS_COMPLETE_CHKCOND 0x30
1354#define CS_BAD_PAYLOAD 0x80
1355#define CS_UNKNOWN 0x81
1356#define CS_RETRY 0x82
1357#define CS_LOOP_DOWN_ABORT 0x83
1358
1359
1360
1361
1362#define SF_LOGOUT_SENT BIT_13
1363
1364
1365
1366
1367#define STATUS_CONT_TYPE 0x10
1368typedef struct {
1369 uint8_t entry_type;
1370 uint8_t entry_count;
1371 uint8_t sys_define;
1372 uint8_t entry_status;
1373 uint8_t data[60];
1374} sts_cont_entry_t;
1375
1376
1377
1378
1379
1380#define STATUS_TYPE_21 0x21
1381typedef struct {
1382 uint8_t entry_type;
1383 uint8_t entry_count;
1384 uint8_t handle_count;
1385 uint8_t entry_status;
1386 uint32_t handle[15];
1387} sts21_entry_t;
1388
1389
1390
1391
1392
1393#define STATUS_TYPE_22 0x22
1394typedef struct {
1395 uint8_t entry_type;
1396 uint8_t entry_count;
1397 uint8_t handle_count;
1398 uint8_t entry_status;
1399 uint16_t handle[30];
1400} sts22_entry_t;
1401
1402
1403
1404
1405#define MARKER_TYPE 0x04
1406typedef struct {
1407 uint8_t entry_type;
1408 uint8_t entry_count;
1409 uint8_t handle_count;
1410 uint8_t entry_status;
1411 uint32_t sys_define_2;
1412 target_id_t target;
1413 uint8_t modifier;
1414#define MK_SYNC_ID_LUN 0
1415#define MK_SYNC_ID 1
1416#define MK_SYNC_ALL 2
1417#define MK_SYNC_LIP 3
1418
1419
1420 uint8_t reserved_1;
1421 uint16_t sequence_number;
1422 uint16_t lun;
1423 uint8_t reserved_2[48];
1424} mrk_entry_t;
1425
1426
1427
1428
1429#define MS_IOCB_TYPE 0x29
1430typedef struct {
1431 uint8_t entry_type;
1432 uint8_t entry_count;
1433 uint8_t handle_count;
1434 uint8_t entry_status;
1435 uint32_t handle1;
1436 target_id_t loop_id;
1437 uint16_t status;
1438 uint16_t control_flags;
1439 uint16_t reserved2;
1440 uint16_t timeout;
1441 uint16_t cmd_dsd_count;
1442 uint16_t total_dsd_count;
1443 uint8_t type;
1444 uint8_t r_ctl;
1445 uint16_t rx_id;
1446 uint16_t reserved3;
1447 uint32_t handle2;
1448 uint32_t rsp_bytecount;
1449 uint32_t req_bytecount;
1450 uint32_t dseg_req_address[2];
1451 uint32_t dseg_req_length;
1452 uint32_t dseg_rsp_address[2];
1453 uint32_t dseg_rsp_length;
1454} ms_iocb_entry_t;
1455
1456
1457
1458
1459
1460#define MBX_IOCB_TYPE 0x39
1461struct mbx_entry {
1462 uint8_t entry_type;
1463 uint8_t entry_count;
1464 uint8_t sys_define1;
1465
1466#define SOURCE_SCSI 0x00
1467#define SOURCE_IP 0x01
1468#define SOURCE_VI 0x02
1469#define SOURCE_SCTP 0x03
1470#define SOURCE_MP 0x04
1471#define SOURCE_MPIOCTL 0x05
1472#define SOURCE_ASYNC_IOCB 0x07
1473
1474 uint8_t entry_status;
1475
1476 uint32_t handle;
1477 target_id_t loop_id;
1478
1479 uint16_t status;
1480 uint16_t state_flags;
1481 uint16_t status_flags;
1482
1483 uint32_t sys_define2[2];
1484
1485 uint16_t mb0;
1486 uint16_t mb1;
1487 uint16_t mb2;
1488 uint16_t mb3;
1489 uint16_t mb6;
1490 uint16_t mb7;
1491 uint16_t mb9;
1492 uint16_t mb10;
1493 uint32_t reserved_2[2];
1494 uint8_t node_name[WWN_SIZE];
1495 uint8_t port_name[WWN_SIZE];
1496};
1497
1498
1499
1500
1501#define RESPONSE_ENTRY_SIZE (sizeof(response_t))
1502#define REQUEST_ENTRY_SIZE (sizeof(request_t))
1503
1504
1505
1506
1507
1508typedef union {
1509 uint32_t b24 : 24;
1510
1511 struct {
1512 uint8_t d_id[3];
1513 uint8_t rsvd_1;
1514 } r;
1515
1516 struct {
1517 uint8_t al_pa;
1518 uint8_t area;
1519 uint8_t domain;
1520 uint8_t rsvd_1;
1521 } b;
1522} port_id_t;
1523#define INVALID_PORT_ID 0xFFFFFF
1524
1525
1526
1527
1528typedef struct {
1529 port_id_t d_id;
1530 uint8_t node_name[WWN_SIZE];
1531 uint8_t port_name[WWN_SIZE];
1532 uint32_t type;
1533#define SW_TYPE_IP BIT_1
1534#define SW_TYPE_SCSI BIT_0
1535} sw_info_t;
1536
1537
1538
1539
1540#define INQ_DATA_SIZE 36
1541
1542
1543
1544
1545typedef struct {
1546 union {
1547 cmd_a64_entry_t cmd;
1548 sts_entry_t rsp;
1549 } p;
1550 uint8_t inq[INQ_DATA_SIZE];
1551} inq_cmd_rsp_t;
1552
1553
1554
1555
1556#define CHAR_TO_SHORT(a, b) (uint16_t)((uint8_t)b << 8 | (uint8_t)a)
1557
1558typedef struct {
1559 uint32_t len;
1560 uint32_t rsrv;
1561} rpt_hdr_t;
1562
1563typedef struct {
1564 struct {
1565 uint8_t b : 6;
1566 uint8_t address_method : 2;
1567 } msb;
1568 uint8_t lsb;
1569 uint8_t unused[6];
1570} rpt_lun_t;
1571
1572typedef struct {
1573 rpt_hdr_t hdr;
1574 rpt_lun_t lst[MAX_LUNS];
1575} rpt_lun_lst_t;
1576
1577
1578
1579
1580typedef struct {
1581 union {
1582 cmd_a64_entry_t cmd;
1583 sts_entry_t rsp;
1584 } p;
1585 rpt_lun_lst_t list;
1586} rpt_lun_cmd_rsp_t;
1587
1588
1589
1590
1591typedef struct os_tgt {
1592 struct os_lun *olun[MAX_LUNS];
1593 struct fc_port *fcport;
1594 unsigned long flags;
1595 uint8_t port_down_retry_count;
1596 uint32_t down_timer;
1597 struct scsi_qla_host *ha;
1598
1599
1600 port_id_t d_id;
1601 uint8_t node_name[WWN_SIZE];
1602 uint8_t port_name[WWN_SIZE];
1603} os_tgt_t;
1604
1605
1606
1607
1608#define TQF_ONLINE 0
1609#define TQF_SUSPENDED 1
1610#define TQF_RETRY_CMDS 2
1611
1612
1613
1614
1615typedef struct os_lun {
1616 struct fc_lun *fclun;
1617 spinlock_t q_lock;
1618
1619 unsigned long q_flag;
1620#define LUN_MPIO_BUSY 2
1621#define LUN_EXEC_DELAYED 7
1622
1623 u_long q_timeout;
1624 atomic_t q_timer;
1625 uint32_t q_count;
1626 uint32_t q_max;
1627 uint8_t q_state;
1628#define LUN_STATE_READY 1
1629#define LUN_STATE_RUN 2
1630#define LUN_STATE_WAIT 3
1631#define LUN_STATE_TIMEOUT 4
1632
1633 u_long io_cnt;
1634 u_long out_cnt;
1635 u_long w_cnt;
1636 u_long r_cnt;
1637 u_long avg_time;
1638} os_lun_t;
1639
1640
1641
1642
1643
1644
1645typedef struct lun_bit_mask {
1646
1647#if ((MAX_FIBRE_LUNS & 0x7) == 0)
1648 uint8_t mask[MAX_FIBRE_LUNS >> 3];
1649#else
1650 uint8_t mask[(MAX_FIBRE_LUNS + 8) >> 3];
1651#endif
1652} lun_bit_mask_t;
1653
1654
1655
1656
1657 typedef enum {
1658 FCT_UNKNOWN,
1659 FCT_RSCN,
1660 FCT_SWITCH,
1661 FCT_BROADCAST,
1662 FCT_INITIATOR,
1663 FCT_TARGET
1664} fc_port_type_t;
1665
1666
1667
1668
1669typedef struct fc_port {
1670 struct list_head list;
1671 struct list_head fcluns;
1672
1673 struct scsi_qla_host *ha;
1674 struct scsi_qla_host *vis_ha;
1675
1676 uint8_t node_name[WWN_SIZE];
1677 uint8_t port_name[WWN_SIZE];
1678 port_id_t d_id;
1679 uint16_t loop_id;
1680 uint16_t old_loop_id;
1681
1682 fc_port_type_t port_type;
1683
1684 atomic_t state;
1685 uint32_t flags;
1686
1687 os_tgt_t *tgt_queue;
1688 uint16_t os_target_id;
1689
1690 uint16_t iodesc_idx_sent;
1691
1692 int port_login_retry_count;
1693 int login_retry;
1694 atomic_t port_down_timer;
1695
1696 uint8_t device_type;
1697 uint8_t unused;
1698
1699 uint8_t mp_byte;
1700 uint8_t cur_path;
1701
1702 lun_bit_mask_t lun_mask;
1703} fc_port_t;
1704
1705
1706
1707
1708#define FCS_UNCONFIGURED 1
1709#define FCS_DEVICE_DEAD 2
1710#define FCS_DEVICE_LOST 3
1711#define FCS_ONLINE 4
1712#define FCS_NOT_SUPPORTED 5
1713#define FCS_FAILOVER 6
1714#define FCS_FAILOVER_FAILED 7
1715
1716
1717
1718
1719#define FCF_FABRIC_DEVICE BIT_0
1720#define FCF_LOGIN_NEEDED BIT_1
1721#define FCF_FO_MASKED BIT_2
1722#define FCF_FAILOVER_NEEDED BIT_3
1723#define FCF_RESET_NEEDED BIT_4
1724#define FCF_PERSISTENT_BOUND BIT_5
1725#define FCF_TAPE_PRESENT BIT_6
1726#define FCF_FARP_DONE BIT_7
1727#define FCF_FARP_FAILED BIT_8
1728#define FCF_FARP_REPLY_NEEDED BIT_9
1729#define FCF_AUTH_REQ BIT_10
1730#define FCF_SEND_AUTH_REQ BIT_11
1731#define FCF_RECEIVE_AUTH_REQ BIT_12
1732#define FCF_AUTH_SUCCESS BIT_13
1733#define FCF_RLC_SUPPORT BIT_14
1734#define FCF_CONFIG BIT_15
1735#define FCF_RESCAN_NEEDED BIT_16
1736#define FCF_XP_DEVICE BIT_17
1737#define FCF_MSA_DEVICE BIT_18
1738#define FCF_EVA_DEVICE BIT_19
1739#define FCF_MSA_PORT_ACTIVE BIT_20
1740#define FCF_FAILBACK_DISABLE BIT_21
1741#define FCF_FAILOVER_DISABLE BIT_22
1742
1743
1744#define FC_NO_LOOP_ID 0x1000
1745
1746
1747
1748
1749typedef struct fc_lun {
1750 struct list_head list;
1751
1752 fc_port_t *fcport;
1753 fc_port_t *o_fcport;
1754 uint16_t lun;
1755 atomic_t state;
1756 uint8_t device_type;
1757
1758 uint8_t max_path_retries;
1759 uint32_t flags;
1760} fc_lun_t;
1761
1762#define FLF_VISIBLE_LUN BIT_0
1763#define FLF_ACTIVE_LUN BIT_1
1764
1765
1766
1767
1768
1769
1770
1771#define CT_REJECT_RESPONSE 0x8001
1772#define CT_ACCEPT_RESPONSE 0x8002
1773
1774#define NS_N_PORT_TYPE 0x01
1775#define NS_NL_PORT_TYPE 0x02
1776#define NS_NX_PORT_TYPE 0x7F
1777
1778#define GA_NXT_CMD 0x100
1779#define GA_NXT_REQ_SIZE (16 + 4)
1780#define GA_NXT_RSP_SIZE (16 + 620)
1781
1782#define GID_PT_CMD 0x1A1
1783#define GID_PT_REQ_SIZE (16 + 4)
1784#define GID_PT_RSP_SIZE (16 + (MAX_FIBRE_DEVICES * 4))
1785
1786#define GPN_ID_CMD 0x112
1787#define GPN_ID_REQ_SIZE (16 + 4)
1788#define GPN_ID_RSP_SIZE (16 + 8)
1789
1790#define GNN_ID_CMD 0x113
1791#define GNN_ID_REQ_SIZE (16 + 4)
1792#define GNN_ID_RSP_SIZE (16 + 8)
1793
1794#define GFT_ID_CMD 0x117
1795#define GFT_ID_REQ_SIZE (16 + 4)
1796#define GFT_ID_RSP_SIZE (16 + 32)
1797
1798#define RFT_ID_CMD 0x217
1799#define RFT_ID_REQ_SIZE (16 + 4 + 32)
1800#define RFT_ID_RSP_SIZE 16
1801
1802#define RFF_ID_CMD 0x21F
1803#define RFF_ID_REQ_SIZE (16 + 4 + 2 + 1 + 1)
1804#define RFF_ID_RSP_SIZE 16
1805
1806#define RNN_ID_CMD 0x213
1807#define RNN_ID_REQ_SIZE (16 + 4 + 8)
1808#define RNN_ID_RSP_SIZE 16
1809
1810#define RSNN_NN_CMD 0x239
1811#define RSNN_NN_REQ_SIZE (16 + 8 + 1 + 255)
1812#define RSNN_NN_RSP_SIZE 16
1813
1814
1815struct ct_cmd_hdr {
1816 uint8_t revision;
1817 uint8_t in_id[3];
1818 uint8_t gs_type;
1819 uint8_t gs_subtype;
1820 uint8_t options;
1821 uint8_t reserved;
1822};
1823
1824
1825struct ct_sns_req {
1826 struct ct_cmd_hdr header;
1827 uint16_t command;
1828 uint16_t max_rsp_size;
1829 uint8_t fragment_id;
1830 uint8_t reserved[3];
1831
1832 union {
1833
1834 struct {
1835 uint8_t reserved;
1836 uint8_t port_id[3];
1837 } port_id;
1838
1839 struct {
1840 uint8_t port_type;
1841 uint8_t domain;
1842 uint8_t area;
1843 uint8_t reserved;
1844 } gid_pt;
1845
1846 struct {
1847 uint8_t reserved;
1848 uint8_t port_id[3];
1849 uint8_t fc4_types[32];
1850 } rft_id;
1851
1852 struct {
1853 uint8_t reserved;
1854 uint8_t port_id[3];
1855 uint16_t reserved2;
1856 uint8_t fc4_feature;
1857 uint8_t fc4_type;
1858 } rff_id;
1859
1860 struct {
1861 uint8_t reserved;
1862 uint8_t port_id[3];
1863 uint8_t node_name[8];
1864 } rnn_id;
1865
1866 struct {
1867 uint8_t node_name[8];
1868 uint8_t name_len;
1869 uint8_t sym_node_name[255];
1870 } rsnn_nn;
1871 } req;
1872};
1873
1874
1875struct ct_rsp_hdr {
1876 struct ct_cmd_hdr header;
1877 uint16_t response;
1878 uint16_t residual;
1879 uint8_t fragment_id;
1880 uint8_t reason_code;
1881 uint8_t explanation_code;
1882 uint8_t vendor_unique;
1883};
1884
1885struct ct_sns_gid_pt_data {
1886 uint8_t control_byte;
1887 uint8_t port_id[3];
1888};
1889
1890struct ct_sns_rsp {
1891 struct ct_rsp_hdr header;
1892
1893 union {
1894 struct {
1895 uint8_t port_type;
1896 uint8_t port_id[3];
1897 uint8_t port_name[8];
1898 uint8_t sym_port_name_len;
1899 uint8_t sym_port_name[255];
1900 uint8_t node_name[8];
1901 uint8_t sym_node_name_len;
1902 uint8_t sym_node_name[255];
1903 uint8_t init_proc_assoc[8];
1904 uint8_t node_ip_addr[16];
1905 uint8_t class_of_service[4];
1906 uint8_t fc4_types[32];
1907 uint8_t ip_address[16];
1908 uint8_t fabric_port_name[8];
1909 uint8_t reserved;
1910 uint8_t hard_address[3];
1911 } ga_nxt;
1912
1913 struct {
1914 struct ct_sns_gid_pt_data entries[MAX_FIBRE_DEVICES];
1915 } gid_pt;
1916
1917 struct {
1918 uint8_t port_name[8];
1919 } gpn_id;
1920
1921 struct {
1922 uint8_t node_name[8];
1923 } gnn_id;
1924
1925 struct {
1926 uint8_t fc4_types[32];
1927 } gft_id;
1928 } rsp;
1929};
1930
1931struct ct_sns_pkt {
1932 union {
1933 struct ct_sns_req req;
1934 struct ct_sns_rsp rsp;
1935 } p;
1936};
1937
1938
1939
1940
1941#define RFT_ID_SNS_SCMD_LEN 22
1942#define RFT_ID_SNS_CMD_SIZE 60
1943#define RFT_ID_SNS_DATA_SIZE 16
1944
1945#define RNN_ID_SNS_SCMD_LEN 10
1946#define RNN_ID_SNS_CMD_SIZE 36
1947#define RNN_ID_SNS_DATA_SIZE 16
1948
1949#define GA_NXT_SNS_SCMD_LEN 6
1950#define GA_NXT_SNS_CMD_SIZE 28
1951#define GA_NXT_SNS_DATA_SIZE (620 + 16)
1952
1953#define GID_PT_SNS_SCMD_LEN 6
1954#define GID_PT_SNS_CMD_SIZE 28
1955#define GID_PT_SNS_DATA_SIZE (MAX_FIBRE_DEVICES * 4 + 16)
1956
1957#define GPN_ID_SNS_SCMD_LEN 6
1958#define GPN_ID_SNS_CMD_SIZE 28
1959#define GPN_ID_SNS_DATA_SIZE (8 + 16)
1960
1961#define GNN_ID_SNS_SCMD_LEN 6
1962#define GNN_ID_SNS_CMD_SIZE 28
1963#define GNN_ID_SNS_DATA_SIZE (8 + 16)
1964
1965struct sns_cmd_pkt {
1966 union {
1967 struct {
1968 uint16_t buffer_length;
1969 uint16_t reserved_1;
1970 uint32_t buffer_address[2];
1971 uint16_t subcommand_length;
1972 uint16_t reserved_2;
1973 uint16_t subcommand;
1974 uint16_t size;
1975 uint32_t reserved_3;
1976 uint8_t param[36];
1977 } cmd;
1978
1979 uint8_t rft_data[RFT_ID_SNS_DATA_SIZE];
1980 uint8_t rnn_data[RNN_ID_SNS_DATA_SIZE];
1981 uint8_t gan_data[GA_NXT_SNS_DATA_SIZE];
1982 uint8_t gid_data[GID_PT_SNS_DATA_SIZE];
1983 uint8_t gpn_data[GPN_ID_SNS_DATA_SIZE];
1984 uint8_t gnn_data[GNN_ID_SNS_DATA_SIZE];
1985 } p;
1986};
1987
1988
1989#define MAX_IO_DESCRIPTORS 32
1990
1991#define ABORT_IOCB_CB 0
1992#define ADISC_PORT_IOCB_CB 1
1993#define LOGOUT_PORT_IOCB_CB 2
1994#define LOGIN_PORT_IOCB_CB 3
1995#define LAST_IOCB_CB 4
1996
1997#define IODESC_INVALID_INDEX 0xFFFF
1998#define IODESC_ADISC_NEEDED 0xFFFE
1999#define IODESC_LOGIN_NEEDED 0xFFFD
2000
2001struct io_descriptor {
2002 uint16_t used:1;
2003 uint16_t idx:11;
2004 uint16_t cb_idx:4;
2005
2006 struct timer_list timer;
2007
2008 struct scsi_qla_host *ha;
2009
2010 port_id_t d_id;
2011 fc_port_t *remote_fcport;
2012
2013 uint32_t signature;
2014};
2015
2016struct qla_fw_info {
2017 unsigned short addressing;
2018#define FW_INFO_ADDR_NORMAL 0
2019#define FW_INFO_ADDR_EXTENDED 1
2020#define FW_INFO_ADDR_NOMORE 0xffff
2021 unsigned short *fwcode;
2022 unsigned short *fwlen;
2023 unsigned short *fwstart;
2024 unsigned long *lfwstart;
2025};
2026
2027struct qla_board_info {
2028 char *drv_name;
2029
2030 char isp_name[8];
2031 struct qla_fw_info *fw_info;
2032};
2033
2034
2035struct gid_list_info {
2036 uint8_t al_pa;
2037 uint8_t area;
2038 uint8_t domain;
2039 uint8_t loop_id_2100;
2040 uint16_t loop_id;
2041};
2042#define GID_LIST_SIZE (sizeof(struct gid_list_info) * MAX_FIBRE_DEVICES)
2043
2044
2045
2046
2047typedef struct scsi_qla_host {
2048 struct list_head list;
2049
2050
2051 struct Scsi_Host *host;
2052 struct pci_dev *pdev;
2053
2054 unsigned long host_no;
2055 unsigned long instance;
2056
2057 volatile struct {
2058 uint32_t init_done :1;
2059 uint32_t online :1;
2060 uint32_t mbox_int :1;
2061 uint32_t mbox_busy :1;
2062 uint32_t rscn_queue_overflow :1;
2063 uint32_t reset_active :1;
2064
2065 uint32_t management_server_logged_in :1;
2066 uint32_t process_response_queue :1;
2067
2068 uint32_t disable_risc_code_load :1;
2069 uint32_t enable_64bit_addressing :1;
2070 uint32_t enable_lip_reset :1;
2071 uint32_t enable_lip_full_login :1;
2072 uint32_t enable_target_reset :1;
2073 } flags;
2074
2075 atomic_t loop_state;
2076#define LOOP_TIMEOUT 1
2077#define LOOP_DOWN 2
2078#define LOOP_UP 3
2079#define LOOP_UPDATE 4
2080#define LOOP_READY 5
2081#define LOOP_DEAD 6
2082
2083 unsigned long dpc_flags;
2084#define RESET_MARKER_NEEDED 0
2085#define RESET_ACTIVE 1
2086#define ISP_ABORT_NEEDED 2
2087#define ABORT_ISP_ACTIVE 3
2088#define LOOP_RESYNC_NEEDED 4
2089#define LOOP_RESYNC_ACTIVE 5
2090#define LOCAL_LOOP_UPDATE 6
2091#define RSCN_UPDATE 7
2092#define MAILBOX_RETRY 8
2093#define ISP_RESET_NEEDED 9
2094#define FAILOVER_EVENT_NEEDED 10
2095#define FAILOVER_EVENT 11
2096#define FAILOVER_NEEDED 12
2097#define SCSI_RESTART_NEEDED 13
2098#define PORT_RESTART_NEEDED 14
2099#define RESTART_QUEUES_NEEDED 15
2100#define ABORT_QUEUES_NEEDED 16
2101#define RELOGIN_NEEDED 17
2102#define LOGIN_RETRY_NEEDED 18
2103#define REGISTER_FC4_NEEDED 19
2104#define ISP_ABORT_RETRY 20
2105#define FCPORT_RESCAN_NEEDED 21
2106#define IODESC_PROCESS_NEEDED 22
2107#define IOCTL_ERROR_RECOVERY 23
2108
2109 uint32_t device_flags;
2110#define DFLG_LOCAL_DEVICES BIT_0
2111#define DFLG_RETRY_LOCAL_DEVICES BIT_1
2112#define DFLG_FABRIC_DEVICES BIT_2
2113#define SWITCH_FOUND BIT_3
2114#define DFLG_NO_CABLE BIT_4
2115
2116
2117#define SRB_MIN_REQ 128
2118 mempool_t *srb_mempool;
2119
2120
2121
2122
2123
2124
2125
2126
2127 spinlock_t hardware_lock ____cacheline_aligned;
2128
2129 device_reg_t __iomem *iobase;
2130 unsigned long pio_address;
2131 unsigned long pio_length;
2132#define MIN_IOBASE_LEN 0x100
2133
2134
2135 dma_addr_t request_dma;
2136 request_t *request_ring;
2137 request_t *request_ring_ptr;
2138 uint16_t req_ring_index;
2139 uint16_t req_q_cnt;
2140 uint16_t request_q_length;
2141
2142 dma_addr_t response_dma;
2143 response_t *response_ring;
2144 response_t *response_ring_ptr;
2145 uint16_t rsp_ring_index;
2146 uint16_t response_q_length;
2147
2148 uint16_t (*calc_request_entries)(uint16_t);
2149 void (*build_scsi_iocbs)(srb_t *, cmd_entry_t *, uint16_t);
2150
2151
2152 srb_t *outstanding_cmds[MAX_OUTSTANDING_COMMANDS];
2153 uint32_t current_outstanding_cmd;
2154 srb_t *status_srb;
2155
2156
2157
2158
2159
2160
2161
2162 spinlock_t list_lock ____cacheline_aligned;
2163
2164
2165 struct list_head retry_queue;
2166 struct list_head done_queue;
2167 struct list_head failover_queue;
2168 struct list_head scsi_retry_queue;
2169 struct list_head pending_queue;
2170
2171 unsigned long done_q_cnt;
2172 unsigned long pending_in_q;
2173 uint32_t retry_q_cnt;
2174 uint32_t scsi_retry_q_cnt;
2175 uint32_t failover_cnt;
2176
2177 unsigned long last_irq_cpu;
2178
2179 uint16_t revision;
2180 uint8_t ports;
2181 u_long actthreads;
2182 u_long ipreq_cnt;
2183 u_long qthreads;
2184
2185 uint32_t total_isr_cnt;
2186 uint32_t total_isp_aborts;
2187 uint32_t total_lip_cnt;
2188 uint32_t total_dev_errs;
2189 uint32_t total_ios;
2190 uint64_t total_bytes;
2191 uint32_t total_mbx_timeout;
2192 uint32_t total_loop_resync;
2193 uint32_t dropped_frame_error_cnt;
2194
2195
2196 uint16_t loop_id;
2197 uint16_t fb_rev;
2198
2199 port_id_t d_id;
2200 uint16_t max_public_loop_ids;
2201 uint16_t min_external_loopid;
2202
2203 uint16_t link_data_rate;
2204
2205 uint8_t current_topology;
2206 uint8_t prev_topology;
2207#define ISP_CFG_NL 1
2208#define ISP_CFG_N 2
2209#define ISP_CFG_FL 4
2210#define ISP_CFG_F 8
2211
2212 uint8_t operating_mode;
2213#define LOOP 0
2214#define P2P 1
2215#define LOOP_P2P 2
2216#define P2P_LOOP 3
2217
2218 uint8_t marker_needed;
2219 uint8_t sns_retry_cnt;
2220 uint8_t mem_err;
2221
2222 uint8_t interrupts_on;
2223
2224
2225 uint8_t serial0;
2226 uint8_t serial1;
2227 uint8_t serial2;
2228
2229
2230 uint16_t nvram_base;
2231
2232 uint16_t loop_reset_delay;
2233 uint16_t minimum_timeout;
2234 uint8_t retry_count;
2235 uint8_t login_timeout;
2236 uint16_t r_a_tov;
2237 int port_down_retry_count;
2238 uint8_t loop_down_timeout;
2239 uint8_t mbx_count;
2240 uint16_t max_probe_luns;
2241 uint16_t max_luns;
2242 uint16_t max_targets;
2243 uint16_t last_loop_id;
2244
2245 uint32_t login_retry_count;
2246
2247
2248 struct list_head fcports;
2249 struct list_head rscn_fcports;
2250
2251 struct io_descriptor io_descriptors[MAX_IO_DESCRIPTORS];
2252 uint16_t iodesc_signature;
2253
2254
2255 os_tgt_t *otgt[MAX_FIBRE_DEVICES];
2256
2257
2258 uint32_t rscn_queue[MAX_RSCN_COUNT];
2259 uint8_t rscn_in_ptr;
2260 uint8_t rscn_out_ptr;
2261
2262
2263 ms_iocb_entry_t *ms_iocb;
2264 dma_addr_t ms_iocb_dma;
2265 struct ct_sns_pkt *ct_sns;
2266 dma_addr_t ct_sns_dma;
2267
2268 struct sns_cmd_pkt *sns_cmd;
2269 dma_addr_t sns_cmd_dma;
2270
2271 pid_t dpc_pid;
2272 int dpc_should_die;
2273 struct completion dpc_inited;
2274 struct completion dpc_exited;
2275 struct semaphore *dpc_wait;
2276 uint8_t dpc_active;
2277
2278
2279 uint8_t queue_restart_timer;
2280 uint8_t loop_down_abort_time;
2281 atomic_t loop_down_timer;
2282 uint8_t link_down_timeout;
2283
2284 uint32_t timer_active;
2285 struct timer_list timer;
2286
2287 dma_addr_t gid_list_dma;
2288 struct gid_list_info *gid_list;
2289
2290 dma_addr_t rlc_rsp_dma;
2291 rpt_lun_cmd_rsp_t *rlc_rsp;
2292
2293
2294#define DMA_POOL_SIZE 256
2295 struct dma_pool *s_dma_pool;
2296
2297 dma_addr_t init_cb_dma;
2298 init_cb_t *init_cb;
2299
2300 dma_addr_t iodesc_pd_dma;
2301 port_database_t *iodesc_pd;
2302
2303
2304 volatile uint16_t mailbox_out[MAILBOX_REGISTER_COUNT];
2305
2306 mbx_cmd_t *mcp;
2307 unsigned long mbx_cmd_flags;
2308#define MBX_INTERRUPT 1
2309#define MBX_INTR_WAIT 2
2310#define MBX_UPDATE_FLASH_ACTIVE 3
2311
2312 spinlock_t mbx_reg_lock;
2313
2314 struct semaphore mbx_cmd_sem;
2315 struct semaphore mbx_intr_sem;
2316
2317 uint32_t mbx_flags;
2318#define MBX_IN_PROGRESS BIT_0
2319#define MBX_BUSY BIT_1
2320#define MBX_SLEEPING_ON_SEM BIT_2
2321#define MBX_POLLING_FOR_COMP BIT_3
2322#define MBX_COMPLETED BIT_4
2323#define MBX_TIMEDOUT BIT_5
2324#define MBX_ACCESS_TIMEDOUT BIT_6
2325
2326 mbx_cmd_t mc;
2327
2328 uint8_t *cmdline;
2329
2330 uint32_t failover_type;
2331 uint32_t failback_delay;
2332 unsigned long cfg_flags;
2333#define CFG_ACTIVE 0
2334#define CFG_FAILOVER 1
2335
2336 uint32_t binding_type;
2337#define BIND_BY_PORT_NAME 0
2338#define BIND_BY_PORT_ID 1
2339
2340
2341 struct qla_board_info *brd_info;
2342 uint16_t fw_major_version;
2343 uint16_t fw_minor_version;
2344 uint16_t fw_subminor_version;
2345 uint16_t fw_attributes;
2346 uint32_t fw_memory_size;
2347 uint32_t fw_transfer_size;
2348
2349 uint16_t fw_options[16];
2350 uint8_t fw_seriallink_options[2];
2351
2352
2353 void *fw_dump;
2354 int fw_dump_order;
2355 int fw_dump_reading;
2356 char *fw_dump_buffer;
2357 int fw_dump_buffer_len;
2358
2359 uint8_t host_str[16];
2360 uint16_t pci_attr;
2361
2362 uint16_t product_id[4];
2363
2364 uint8_t model_number[16+1];
2365#define BINZERO "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
2366 char *model_desc;
2367
2368 uint8_t node_name[WWN_SIZE];
2369 uint8_t nvram_version;
2370 uint32_t isp_abort_cnt;
2371
2372
2373 uint64_t IosRequested;
2374 uint64_t BytesRequested;
2375 uint64_t IosExecuted;
2376 uint64_t BytesExecuted;
2377
2378
2379 uint16_t beacon_blink_led;
2380 uint16_t beacon_green_on;
2381} scsi_qla_host_t;
2382
2383
2384
2385
2386
2387#define LOOP_TRANSITION(ha) \
2388 (test_bit(ISP_ABORT_NEEDED, &ha->dpc_flags) || \
2389 test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags))
2390
2391#define LOOP_NOT_READY(ha) \
2392 ((test_bit(ISP_ABORT_NEEDED, &ha->dpc_flags) || \
2393 test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags) || \
2394 test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags) || \
2395 test_bit(LOOP_RESYNC_ACTIVE, &ha->dpc_flags)) || \
2396 atomic_read(&ha->loop_state) == LOOP_DOWN)
2397
2398#define LOOP_RDY(ha) (!LOOP_NOT_READY(ha))
2399
2400#define TGT_Q(ha, t) (ha->otgt[t])
2401#define LUN_Q(ha, t, l) (TGT_Q(ha, t)->olun[l])
2402#define GET_LU_Q(ha, t, l) ((TGT_Q(ha,t) != NULL)? TGT_Q(ha, t)->olun[l] : NULL)
2403
2404#define to_qla_host(x) ((scsi_qla_host_t *) (x)->hostdata)
2405
2406#define qla_printk(level, ha, format, arg...) \
2407 dev_printk(level , &((ha)->pdev->dev) , format , ## arg)
2408
2409
2410
2411
2412#define MBS_MASK 0x3fff
2413
2414#define QLA_SUCCESS (MBS_COMMAND_COMPLETE & MBS_MASK)
2415#define QLA_INVALID_COMMAND (MBS_INVALID_COMMAND & MBS_MASK)
2416#define QLA_INTERFACE_ERROR (MBS_HOST_INTERFACE_ERROR & MBS_MASK)
2417#define QLA_TEST_FAILED (MBS_TEST_FAILED & MBS_MASK)
2418#define QLA_COMMAND_ERROR (MBS_COMMAND_ERROR & MBS_MASK)
2419#define QLA_PARAMETER_ERROR (MBS_COMMAND_PARAMETER_ERROR & MBS_MASK)
2420#define QLA_PORT_ID_USED (MBS_PORT_ID_USED & MBS_MASK)
2421#define QLA_LOOP_ID_USED (MBS_LOOP_ID_USED & MBS_MASK)
2422#define QLA_ALL_IDS_IN_USE (MBS_ALL_IDS_IN_USE & MBS_MASK)
2423#define QLA_NOT_LOGGED_IN (MBS_NOT_LOGGED_IN & MBS_MASK)
2424
2425#define QLA_FUNCTION_TIMEOUT 0x100
2426#define QLA_FUNCTION_PARAMETER_ERROR 0x101
2427#define QLA_FUNCTION_FAILED 0x102
2428#define QLA_MEMORY_ALLOC_FAILED 0x103
2429#define QLA_LOCK_TIMEOUT 0x104
2430#define QLA_ABORTED 0x105
2431#define QLA_SUSPENDED 0x106
2432#define QLA_BUSY 0x107
2433#define QLA_RSCNS_HANDLED 0x108
2434
2435
2436
2437
2438struct _qla2x00stats {
2439 unsigned long mboxtout;
2440 unsigned long mboxerr;
2441 unsigned long ispAbort;
2442 unsigned long debugNo;
2443 unsigned long loop_resync;
2444 unsigned long outarray_full;
2445 unsigned long retry_q_cnt;
2446};
2447
2448#define NVRAM_DELAY() udelay(10)
2449
2450#define INVALID_HANDLE (MAX_OUTSTANDING_COMMANDS+1)
2451
2452
2453
2454
2455#define FLASH_IMAGE_SIZE 131072
2456
2457#include "qla_gbl.h"
2458#include "qla_dbg.h"
2459#include "qla_inline.h"
2460#include "qla_listops.h"
2461
2462
2463
2464
2465#define LINESIZE 256
2466#define MAXARGS 26
2467
2468#define CMD_SP(Cmnd) ((Cmnd)->SCp.ptr)
2469#define CMD_COMPL_STATUS(Cmnd) ((Cmnd)->SCp.this_residual)
2470#define CMD_RESID_LEN(Cmnd) ((Cmnd)->SCp.buffers_residual)
2471#define CMD_SCSI_STATUS(Cmnd) ((Cmnd)->SCp.Status)
2472#define CMD_ACTUAL_SNSLEN(Cmnd) ((Cmnd)->SCp.Message)
2473#define CMD_ENTRY_STATUS(Cmnd) ((Cmnd)->SCp.have_data_in)
2474
2475#endif
2476