xref: /openbmc/linux/drivers/scsi/qla2xxx/qla_os.c (revision 96de0e252cedffad61b3cb5e05662c591898e69a)
1 /*
2  * QLogic Fibre Channel HBA Driver
3  * Copyright (c)  2003-2005 QLogic Corporation
4  *
5  * See LICENSE.qla2xxx for copyright and licensing details.
6  */
7 #include "qla_def.h"
8 
9 #include <linux/moduleparam.h>
10 #include <linux/vmalloc.h>
11 #include <linux/delay.h>
12 #include <linux/kthread.h>
13 
14 #include <scsi/scsi_tcq.h>
15 #include <scsi/scsicam.h>
16 #include <scsi/scsi_transport.h>
17 #include <scsi/scsi_transport_fc.h>
18 
19 /*
20  * Driver version
21  */
22 char qla2x00_version_str[40];
23 
24 /*
25  * SRB allocation cache
26  */
27 static struct kmem_cache *srb_cachep;
28 
29 /*
30  * Ioctl related information.
31  */
32 int num_hosts;
33 int ql2xlogintimeout = 20;
34 module_param(ql2xlogintimeout, int, S_IRUGO|S_IRUSR);
35 MODULE_PARM_DESC(ql2xlogintimeout,
36 		"Login timeout value in seconds.");
37 
38 int qlport_down_retry;
39 module_param(qlport_down_retry, int, S_IRUGO|S_IRUSR);
40 MODULE_PARM_DESC(qlport_down_retry,
41 		"Maximum number of command retries to a port that returns "
42 		"a PORT-DOWN status.");
43 
44 int ql2xplogiabsentdevice;
45 module_param(ql2xplogiabsentdevice, int, S_IRUGO|S_IWUSR);
46 MODULE_PARM_DESC(ql2xplogiabsentdevice,
47 		"Option to enable PLOGI to devices that are not present after "
48 		"a Fabric scan.  This is needed for several broken switches. "
49 		"Default is 0 - no PLOGI. 1 - perfom PLOGI.");
50 
51 int ql2xloginretrycount = 0;
52 module_param(ql2xloginretrycount, int, S_IRUGO|S_IRUSR);
53 MODULE_PARM_DESC(ql2xloginretrycount,
54 		"Specify an alternate value for the NVRAM login retry count.");
55 
56 int ql2xallocfwdump = 1;
57 module_param(ql2xallocfwdump, int, S_IRUGO|S_IRUSR);
58 MODULE_PARM_DESC(ql2xallocfwdump,
59 		"Option to enable allocation of memory for a firmware dump "
60 		"during HBA initialization.  Memory allocation requirements "
61 		"vary by ISP type.  Default is 1 - allocate memory.");
62 
63 int ql2xextended_error_logging;
64 module_param(ql2xextended_error_logging, int, S_IRUGO|S_IWUSR);
65 MODULE_PARM_DESC(ql2xextended_error_logging,
66 		"Option to enable extended error logging, "
67 		"Default is 0 - no logging. 1 - log errors.");
68 
69 static void qla2x00_free_device(scsi_qla_host_t *);
70 
71 static void qla2x00_config_dma_addressing(scsi_qla_host_t *ha);
72 
73 int ql2xfdmienable;
74 module_param(ql2xfdmienable, int, S_IRUGO|S_IRUSR);
75 MODULE_PARM_DESC(ql2xfdmienable,
76 		"Enables FDMI registratons "
77 		"Default is 0 - no FDMI. 1 - perfom FDMI.");
78 
79 #define MAX_Q_DEPTH    32
80 static int ql2xmaxqdepth = MAX_Q_DEPTH;
81 module_param(ql2xmaxqdepth, int, S_IRUGO|S_IWUSR);
82 MODULE_PARM_DESC(ql2xmaxqdepth,
83 		"Maximum queue depth to report for target devices.");
84 
85 int ql2xqfullrampup = 120;
86 module_param(ql2xqfullrampup, int, S_IRUGO|S_IWUSR);
87 MODULE_PARM_DESC(ql2xqfullrampup,
88 		"Number of seconds to wait to begin to ramp-up the queue "
89 		"depth for a device after a queue-full condition has been "
90 		"detected.  Default is 120 seconds.");
91 
92 /*
93  * SCSI host template entry points
94  */
95 static int qla2xxx_slave_configure(struct scsi_device * device);
96 static int qla2xxx_slave_alloc(struct scsi_device *);
97 static int qla2xxx_scan_finished(struct Scsi_Host *, unsigned long time);
98 static void qla2xxx_scan_start(struct Scsi_Host *);
99 static void qla2xxx_slave_destroy(struct scsi_device *);
100 static int qla2x00_queuecommand(struct scsi_cmnd *cmd,
101 		void (*fn)(struct scsi_cmnd *));
102 static int qla24xx_queuecommand(struct scsi_cmnd *cmd,
103 		void (*fn)(struct scsi_cmnd *));
104 static int qla2xxx_eh_abort(struct scsi_cmnd *);
105 static int qla2xxx_eh_device_reset(struct scsi_cmnd *);
106 static int qla2xxx_eh_bus_reset(struct scsi_cmnd *);
107 static int qla2xxx_eh_host_reset(struct scsi_cmnd *);
108 static int qla2x00_loop_reset(scsi_qla_host_t *ha);
109 static int qla2x00_device_reset(scsi_qla_host_t *, fc_port_t *);
110 
111 static int qla2x00_change_queue_depth(struct scsi_device *, int);
112 static int qla2x00_change_queue_type(struct scsi_device *, int);
113 
114 struct scsi_host_template qla2x00_driver_template = {
115 	.module			= THIS_MODULE,
116 	.name			= QLA2XXX_DRIVER_NAME,
117 	.queuecommand		= qla2x00_queuecommand,
118 
119 	.eh_abort_handler	= qla2xxx_eh_abort,
120 	.eh_device_reset_handler = qla2xxx_eh_device_reset,
121 	.eh_bus_reset_handler	= qla2xxx_eh_bus_reset,
122 	.eh_host_reset_handler	= qla2xxx_eh_host_reset,
123 
124 	.slave_configure	= qla2xxx_slave_configure,
125 
126 	.slave_alloc		= qla2xxx_slave_alloc,
127 	.slave_destroy		= qla2xxx_slave_destroy,
128 	.scan_finished		= qla2xxx_scan_finished,
129 	.scan_start		= qla2xxx_scan_start,
130 	.change_queue_depth	= qla2x00_change_queue_depth,
131 	.change_queue_type	= qla2x00_change_queue_type,
132 	.this_id		= -1,
133 	.cmd_per_lun		= 3,
134 	.use_clustering		= ENABLE_CLUSTERING,
135 	.use_sg_chaining	= ENABLE_SG_CHAINING,
136 	.sg_tablesize		= SG_ALL,
137 
138 	/*
139 	 * The RISC allows for each command to transfer (2^32-1) bytes of data,
140 	 * which equates to 0x800000 sectors.
141 	 */
142 	.max_sectors		= 0xFFFF,
143 	.shost_attrs		= qla2x00_host_attrs,
144 };
145 
146 struct scsi_host_template qla24xx_driver_template = {
147 	.module			= THIS_MODULE,
148 	.name			= QLA2XXX_DRIVER_NAME,
149 	.queuecommand		= qla24xx_queuecommand,
150 
151 	.eh_abort_handler	= qla2xxx_eh_abort,
152 	.eh_device_reset_handler = qla2xxx_eh_device_reset,
153 	.eh_bus_reset_handler	= qla2xxx_eh_bus_reset,
154 	.eh_host_reset_handler	= qla2xxx_eh_host_reset,
155 
156 	.slave_configure	= qla2xxx_slave_configure,
157 
158 	.slave_alloc		= qla2xxx_slave_alloc,
159 	.slave_destroy		= qla2xxx_slave_destroy,
160 	.scan_finished		= qla2xxx_scan_finished,
161 	.scan_start		= qla2xxx_scan_start,
162 	.change_queue_depth	= qla2x00_change_queue_depth,
163 	.change_queue_type	= qla2x00_change_queue_type,
164 	.this_id		= -1,
165 	.cmd_per_lun		= 3,
166 	.use_clustering		= ENABLE_CLUSTERING,
167 	.use_sg_chaining	= ENABLE_SG_CHAINING,
168 	.sg_tablesize		= SG_ALL,
169 
170 	.max_sectors		= 0xFFFF,
171 	.shost_attrs		= qla2x00_host_attrs,
172 };
173 
174 static struct scsi_transport_template *qla2xxx_transport_template = NULL;
175 struct scsi_transport_template *qla2xxx_transport_vport_template = NULL;
176 
177 /* TODO Convert to inlines
178  *
179  * Timer routines
180  */
181 
182 void qla2x00_timer(scsi_qla_host_t *);
183 
184 __inline__ void qla2x00_start_timer(scsi_qla_host_t *,
185     void *, unsigned long);
186 static __inline__ void qla2x00_restart_timer(scsi_qla_host_t *, unsigned long);
187 __inline__ void qla2x00_stop_timer(scsi_qla_host_t *);
188 
189 __inline__ void
190 qla2x00_start_timer(scsi_qla_host_t *ha, void *func, unsigned long interval)
191 {
192 	init_timer(&ha->timer);
193 	ha->timer.expires = jiffies + interval * HZ;
194 	ha->timer.data = (unsigned long)ha;
195 	ha->timer.function = (void (*)(unsigned long))func;
196 	add_timer(&ha->timer);
197 	ha->timer_active = 1;
198 }
199 
200 static inline void
201 qla2x00_restart_timer(scsi_qla_host_t *ha, unsigned long interval)
202 {
203 	mod_timer(&ha->timer, jiffies + interval * HZ);
204 }
205 
206 __inline__ void
207 qla2x00_stop_timer(scsi_qla_host_t *ha)
208 {
209 	del_timer_sync(&ha->timer);
210 	ha->timer_active = 0;
211 }
212 
213 static int qla2x00_do_dpc(void *data);
214 
215 static void qla2x00_rst_aen(scsi_qla_host_t *);
216 
217 uint8_t qla2x00_mem_alloc(scsi_qla_host_t *);
218 void qla2x00_mem_free(scsi_qla_host_t *ha);
219 static int qla2x00_allocate_sp_pool( scsi_qla_host_t *ha);
220 static void qla2x00_free_sp_pool(scsi_qla_host_t *ha);
221 static void qla2x00_sp_free_dma(scsi_qla_host_t *, srb_t *);
222 void qla2x00_sp_compl(scsi_qla_host_t *ha, srb_t *);
223 
224 /* -------------------------------------------------------------------------- */
225 
226 static char *
227 qla2x00_pci_info_str(struct scsi_qla_host *ha, char *str)
228 {
229 	static char *pci_bus_modes[] = {
230 		"33", "66", "100", "133",
231 	};
232 	uint16_t pci_bus;
233 
234 	strcpy(str, "PCI");
235 	pci_bus = (ha->pci_attr & (BIT_9 | BIT_10)) >> 9;
236 	if (pci_bus) {
237 		strcat(str, "-X (");
238 		strcat(str, pci_bus_modes[pci_bus]);
239 	} else {
240 		pci_bus = (ha->pci_attr & BIT_8) >> 8;
241 		strcat(str, " (");
242 		strcat(str, pci_bus_modes[pci_bus]);
243 	}
244 	strcat(str, " MHz)");
245 
246 	return (str);
247 }
248 
249 static char *
250 qla24xx_pci_info_str(struct scsi_qla_host *ha, char *str)
251 {
252 	static char *pci_bus_modes[] = { "33", "66", "100", "133", };
253 	uint32_t pci_bus;
254 	int pcie_reg;
255 
256 	pcie_reg = pci_find_capability(ha->pdev, PCI_CAP_ID_EXP);
257 	if (pcie_reg) {
258 		char lwstr[6];
259 		uint16_t pcie_lstat, lspeed, lwidth;
260 
261 		pcie_reg += 0x12;
262 		pci_read_config_word(ha->pdev, pcie_reg, &pcie_lstat);
263 		lspeed = pcie_lstat & (BIT_0 | BIT_1 | BIT_2 | BIT_3);
264 		lwidth = (pcie_lstat &
265 		    (BIT_4 | BIT_5 | BIT_6 | BIT_7 | BIT_8 | BIT_9)) >> 4;
266 
267 		strcpy(str, "PCIe (");
268 		if (lspeed == 1)
269 			strcat(str, "2.5Gb/s ");
270 		else if (lspeed == 2)
271 			strcat(str, "5.0Gb/s ");
272 		else
273 			strcat(str, "<unknown> ");
274 		snprintf(lwstr, sizeof(lwstr), "x%d)", lwidth);
275 		strcat(str, lwstr);
276 
277 		return str;
278 	}
279 
280 	strcpy(str, "PCI");
281 	pci_bus = (ha->pci_attr & CSRX_PCIX_BUS_MODE_MASK) >> 8;
282 	if (pci_bus == 0 || pci_bus == 8) {
283 		strcat(str, " (");
284 		strcat(str, pci_bus_modes[pci_bus >> 3]);
285 	} else {
286 		strcat(str, "-X ");
287 		if (pci_bus & BIT_2)
288 			strcat(str, "Mode 2");
289 		else
290 			strcat(str, "Mode 1");
291 		strcat(str, " (");
292 		strcat(str, pci_bus_modes[pci_bus & ~BIT_2]);
293 	}
294 	strcat(str, " MHz)");
295 
296 	return str;
297 }
298 
299 static char *
300 qla2x00_fw_version_str(struct scsi_qla_host *ha, char *str)
301 {
302 	char un_str[10];
303 
304 	sprintf(str, "%d.%02d.%02d ", ha->fw_major_version,
305 	    ha->fw_minor_version,
306 	    ha->fw_subminor_version);
307 
308 	if (ha->fw_attributes & BIT_9) {
309 		strcat(str, "FLX");
310 		return (str);
311 	}
312 
313 	switch (ha->fw_attributes & 0xFF) {
314 	case 0x7:
315 		strcat(str, "EF");
316 		break;
317 	case 0x17:
318 		strcat(str, "TP");
319 		break;
320 	case 0x37:
321 		strcat(str, "IP");
322 		break;
323 	case 0x77:
324 		strcat(str, "VI");
325 		break;
326 	default:
327 		sprintf(un_str, "(%x)", ha->fw_attributes);
328 		strcat(str, un_str);
329 		break;
330 	}
331 	if (ha->fw_attributes & 0x100)
332 		strcat(str, "X");
333 
334 	return (str);
335 }
336 
337 static char *
338 qla24xx_fw_version_str(struct scsi_qla_host *ha, char *str)
339 {
340 	sprintf(str, "%d.%02d.%02d ", ha->fw_major_version,
341 	    ha->fw_minor_version,
342 	    ha->fw_subminor_version);
343 
344 	if (ha->fw_attributes & BIT_0)
345 		strcat(str, "[Class 2] ");
346 	if (ha->fw_attributes & BIT_1)
347 		strcat(str, "[IP] ");
348 	if (ha->fw_attributes & BIT_2)
349 		strcat(str, "[Multi-ID] ");
350 	if (ha->fw_attributes & BIT_3)
351 		strcat(str, "[SB-2] ");
352 	if (ha->fw_attributes & BIT_4)
353 		strcat(str, "[T10 CRC] ");
354 	if (ha->fw_attributes & BIT_5)
355 		strcat(str, "[VI] ");
356 	if (ha->fw_attributes & BIT_13)
357 		strcat(str, "[Experimental]");
358 	return str;
359 }
360 
361 static inline srb_t *
362 qla2x00_get_new_sp(scsi_qla_host_t *ha, fc_port_t *fcport,
363     struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *))
364 {
365 	srb_t *sp;
366 
367 	sp = mempool_alloc(ha->srb_mempool, GFP_ATOMIC);
368 	if (!sp)
369 		return sp;
370 
371 	sp->ha = ha;
372 	sp->fcport = fcport;
373 	sp->cmd = cmd;
374 	sp->flags = 0;
375 	CMD_SP(cmd) = (void *)sp;
376 	cmd->scsi_done = done;
377 
378 	return sp;
379 }
380 
381 static int
382 qla2x00_queuecommand(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *))
383 {
384 	scsi_qla_host_t *ha = shost_priv(cmd->device->host);
385 	fc_port_t *fcport = (struct fc_port *) cmd->device->hostdata;
386 	struct fc_rport *rport = starget_to_rport(scsi_target(cmd->device));
387 	srb_t *sp;
388 	int rval;
389 
390 	if (unlikely(pci_channel_offline(ha->pdev))) {
391 		cmd->result = DID_REQUEUE << 16;
392 		goto qc_fail_command;
393 	}
394 
395 	rval = fc_remote_port_chkready(rport);
396 	if (rval) {
397 		cmd->result = rval;
398 		goto qc_fail_command;
399 	}
400 
401 	/* Close window on fcport/rport state-transitioning. */
402 	if (!*(fc_port_t **)rport->dd_data) {
403 		cmd->result = DID_IMM_RETRY << 16;
404 		goto qc_fail_command;
405 	}
406 
407 	if (atomic_read(&fcport->state) != FCS_ONLINE) {
408 		if (atomic_read(&fcport->state) == FCS_DEVICE_DEAD ||
409 		    atomic_read(&ha->loop_state) == LOOP_DEAD) {
410 			cmd->result = DID_NO_CONNECT << 16;
411 			goto qc_fail_command;
412 		}
413 		goto qc_host_busy;
414 	}
415 
416 	spin_unlock_irq(ha->host->host_lock);
417 
418 	sp = qla2x00_get_new_sp(ha, fcport, cmd, done);
419 	if (!sp)
420 		goto qc_host_busy_lock;
421 
422 	rval = qla2x00_start_scsi(sp);
423 	if (rval != QLA_SUCCESS)
424 		goto qc_host_busy_free_sp;
425 
426 	spin_lock_irq(ha->host->host_lock);
427 
428 	return 0;
429 
430 qc_host_busy_free_sp:
431 	qla2x00_sp_free_dma(ha, sp);
432 	mempool_free(sp, ha->srb_mempool);
433 
434 qc_host_busy_lock:
435 	spin_lock_irq(ha->host->host_lock);
436 
437 qc_host_busy:
438 	return SCSI_MLQUEUE_HOST_BUSY;
439 
440 qc_fail_command:
441 	done(cmd);
442 
443 	return 0;
444 }
445 
446 
447 static int
448 qla24xx_queuecommand(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *))
449 {
450 	scsi_qla_host_t *ha = shost_priv(cmd->device->host);
451 	fc_port_t *fcport = (struct fc_port *) cmd->device->hostdata;
452 	struct fc_rport *rport = starget_to_rport(scsi_target(cmd->device));
453 	srb_t *sp;
454 	int rval;
455 	scsi_qla_host_t *pha = to_qla_parent(ha);
456 
457 	if (unlikely(pci_channel_offline(ha->pdev))) {
458 		cmd->result = DID_REQUEUE << 16;
459 		goto qc24_fail_command;
460 	}
461 
462 	rval = fc_remote_port_chkready(rport);
463 	if (rval) {
464 		cmd->result = rval;
465 		goto qc24_fail_command;
466 	}
467 
468 	/* Close window on fcport/rport state-transitioning. */
469 	if (!*(fc_port_t **)rport->dd_data) {
470 		cmd->result = DID_IMM_RETRY << 16;
471 		goto qc24_fail_command;
472 	}
473 
474 	if (atomic_read(&fcport->state) != FCS_ONLINE) {
475 		if (atomic_read(&fcport->state) == FCS_DEVICE_DEAD ||
476 		    atomic_read(&pha->loop_state) == LOOP_DEAD) {
477 			cmd->result = DID_NO_CONNECT << 16;
478 			goto qc24_fail_command;
479 		}
480 		goto qc24_host_busy;
481 	}
482 
483 	spin_unlock_irq(ha->host->host_lock);
484 
485 	sp = qla2x00_get_new_sp(pha, fcport, cmd, done);
486 	if (!sp)
487 		goto qc24_host_busy_lock;
488 
489 	rval = qla24xx_start_scsi(sp);
490 	if (rval != QLA_SUCCESS)
491 		goto qc24_host_busy_free_sp;
492 
493 	spin_lock_irq(ha->host->host_lock);
494 
495 	return 0;
496 
497 qc24_host_busy_free_sp:
498 	qla2x00_sp_free_dma(pha, sp);
499 	mempool_free(sp, pha->srb_mempool);
500 
501 qc24_host_busy_lock:
502 	spin_lock_irq(ha->host->host_lock);
503 
504 qc24_host_busy:
505 	return SCSI_MLQUEUE_HOST_BUSY;
506 
507 qc24_fail_command:
508 	done(cmd);
509 
510 	return 0;
511 }
512 
513 
514 /*
515  * qla2x00_eh_wait_on_command
516  *    Waits for the command to be returned by the Firmware for some
517  *    max time.
518  *
519  * Input:
520  *    ha = actual ha whose done queue will contain the command
521  *	      returned by firmware.
522  *    cmd = Scsi Command to wait on.
523  *    flag = Abort/Reset(Bus or Device Reset)
524  *
525  * Return:
526  *    Not Found : 0
527  *    Found : 1
528  */
529 static int
530 qla2x00_eh_wait_on_command(scsi_qla_host_t *ha, struct scsi_cmnd *cmd)
531 {
532 #define ABORT_POLLING_PERIOD	1000
533 #define ABORT_WAIT_ITER		((10 * 1000) / (ABORT_POLLING_PERIOD))
534 	unsigned long wait_iter = ABORT_WAIT_ITER;
535 	int ret = QLA_SUCCESS;
536 
537 	while (CMD_SP(cmd)) {
538 		msleep(ABORT_POLLING_PERIOD);
539 
540 		if (--wait_iter)
541 			break;
542 	}
543 	if (CMD_SP(cmd))
544 		ret = QLA_FUNCTION_FAILED;
545 
546 	return ret;
547 }
548 
549 /*
550  * qla2x00_wait_for_hba_online
551  *    Wait till the HBA is online after going through
552  *    <= MAX_RETRIES_OF_ISP_ABORT  or
553  *    finally HBA is disabled ie marked offline
554  *
555  * Input:
556  *     ha - pointer to host adapter structure
557  *
558  * Note:
559  *    Does context switching-Release SPIN_LOCK
560  *    (if any) before calling this routine.
561  *
562  * Return:
563  *    Success (Adapter is online) : 0
564  *    Failed  (Adapter is offline/disabled) : 1
565  */
566 int
567 qla2x00_wait_for_hba_online(scsi_qla_host_t *ha)
568 {
569 	int		return_status;
570 	unsigned long	wait_online;
571 	scsi_qla_host_t *pha = to_qla_parent(ha);
572 
573 	wait_online = jiffies + (MAX_LOOP_TIMEOUT * HZ);
574 	while (((test_bit(ISP_ABORT_NEEDED, &pha->dpc_flags)) ||
575 	    test_bit(ABORT_ISP_ACTIVE, &pha->dpc_flags) ||
576 	    test_bit(ISP_ABORT_RETRY, &pha->dpc_flags) ||
577 	    pha->dpc_active) && time_before(jiffies, wait_online)) {
578 
579 		msleep(1000);
580 	}
581 	if (pha->flags.online)
582 		return_status = QLA_SUCCESS;
583 	else
584 		return_status = QLA_FUNCTION_FAILED;
585 
586 	DEBUG2(printk("%s return_status=%d\n",__func__,return_status));
587 
588 	return (return_status);
589 }
590 
591 /*
592  * qla2x00_wait_for_loop_ready
593  *    Wait for MAX_LOOP_TIMEOUT(5 min) value for loop
594  *    to be in LOOP_READY state.
595  * Input:
596  *     ha - pointer to host adapter structure
597  *
598  * Note:
599  *    Does context switching-Release SPIN_LOCK
600  *    (if any) before calling this routine.
601  *
602  *
603  * Return:
604  *    Success (LOOP_READY) : 0
605  *    Failed  (LOOP_NOT_READY) : 1
606  */
607 static inline int
608 qla2x00_wait_for_loop_ready(scsi_qla_host_t *ha)
609 {
610 	int 	 return_status = QLA_SUCCESS;
611 	unsigned long loop_timeout ;
612 	scsi_qla_host_t *pha = to_qla_parent(ha);
613 
614 	/* wait for 5 min at the max for loop to be ready */
615 	loop_timeout = jiffies + (MAX_LOOP_TIMEOUT * HZ);
616 
617 	while ((!atomic_read(&pha->loop_down_timer) &&
618 	    atomic_read(&pha->loop_state) == LOOP_DOWN) ||
619 	    atomic_read(&pha->loop_state) != LOOP_READY) {
620 		if (atomic_read(&pha->loop_state) == LOOP_DEAD) {
621 			return_status = QLA_FUNCTION_FAILED;
622 			break;
623 		}
624 		msleep(1000);
625 		if (time_after_eq(jiffies, loop_timeout)) {
626 			return_status = QLA_FUNCTION_FAILED;
627 			break;
628 		}
629 	}
630 	return (return_status);
631 }
632 
633 static void
634 qla2x00_block_error_handler(struct scsi_cmnd *cmnd)
635 {
636 	struct Scsi_Host *shost = cmnd->device->host;
637 	struct fc_rport *rport = starget_to_rport(scsi_target(cmnd->device));
638 	unsigned long flags;
639 
640 	spin_lock_irqsave(shost->host_lock, flags);
641 	while (rport->port_state == FC_PORTSTATE_BLOCKED) {
642 		spin_unlock_irqrestore(shost->host_lock, flags);
643 		msleep(1000);
644 		spin_lock_irqsave(shost->host_lock, flags);
645 	}
646 	spin_unlock_irqrestore(shost->host_lock, flags);
647 	return;
648 }
649 
650 /**************************************************************************
651 * qla2xxx_eh_abort
652 *
653 * Description:
654 *    The abort function will abort the specified command.
655 *
656 * Input:
657 *    cmd = Linux SCSI command packet to be aborted.
658 *
659 * Returns:
660 *    Either SUCCESS or FAILED.
661 *
662 * Note:
663 *    Only return FAILED if command not returned by firmware.
664 **************************************************************************/
665 static int
666 qla2xxx_eh_abort(struct scsi_cmnd *cmd)
667 {
668 	scsi_qla_host_t *ha = shost_priv(cmd->device->host);
669 	srb_t *sp;
670 	int ret, i;
671 	unsigned int id, lun;
672 	unsigned long serial;
673 	unsigned long flags;
674 	int wait = 0;
675 	scsi_qla_host_t *pha = to_qla_parent(ha);
676 
677 	qla2x00_block_error_handler(cmd);
678 
679 	if (!CMD_SP(cmd))
680 		return SUCCESS;
681 
682 	ret = SUCCESS;
683 
684 	id = cmd->device->id;
685 	lun = cmd->device->lun;
686 	serial = cmd->serial_number;
687 
688 	/* Check active list for command command. */
689 	spin_lock_irqsave(&pha->hardware_lock, flags);
690 	for (i = 1; i < MAX_OUTSTANDING_COMMANDS; i++) {
691 		sp = pha->outstanding_cmds[i];
692 
693 		if (sp == NULL)
694 			continue;
695 
696 		if (sp->cmd != cmd)
697 			continue;
698 
699 		DEBUG2(printk("%s(%ld): aborting sp %p from RISC. pid=%ld.\n",
700 		    __func__, ha->host_no, sp, serial));
701 		DEBUG3(qla2x00_print_scsi_cmd(cmd));
702 
703 		spin_unlock_irqrestore(&pha->hardware_lock, flags);
704 		if (ha->isp_ops->abort_command(ha, sp)) {
705 			DEBUG2(printk("%s(%ld): abort_command "
706 			    "mbx failed.\n", __func__, ha->host_no));
707 		} else {
708 			DEBUG3(printk("%s(%ld): abort_command "
709 			    "mbx success.\n", __func__, ha->host_no));
710 			wait = 1;
711 		}
712 		spin_lock_irqsave(&pha->hardware_lock, flags);
713 
714 		break;
715 	}
716 	spin_unlock_irqrestore(&pha->hardware_lock, flags);
717 
718 	/* Wait for the command to be returned. */
719 	if (wait) {
720 		if (qla2x00_eh_wait_on_command(ha, cmd) != QLA_SUCCESS) {
721 			qla_printk(KERN_ERR, ha,
722 			    "scsi(%ld:%d:%d): Abort handler timed out -- %lx "
723 			    "%x.\n", ha->host_no, id, lun, serial, ret);
724 			ret = FAILED;
725 		}
726 	}
727 
728 	qla_printk(KERN_INFO, ha,
729 	    "scsi(%ld:%d:%d): Abort command issued -- %d %lx %x.\n",
730 	    ha->host_no, id, lun, wait, serial, ret);
731 
732 	return ret;
733 }
734 
735 /**************************************************************************
736 * qla2x00_eh_wait_for_pending_target_commands
737 *
738 * Description:
739 *    Waits for all the commands to come back from the specified target.
740 *
741 * Input:
742 *    ha - pointer to scsi_qla_host structure.
743 *    t  - target
744 * Returns:
745 *    Either SUCCESS or FAILED.
746 *
747 * Note:
748 **************************************************************************/
749 static int
750 qla2x00_eh_wait_for_pending_target_commands(scsi_qla_host_t *ha, unsigned int t)
751 {
752 	int	cnt;
753 	int	status;
754 	srb_t		*sp;
755 	struct scsi_cmnd *cmd;
756 	unsigned long flags;
757 	scsi_qla_host_t *pha = to_qla_parent(ha);
758 
759 	status = 0;
760 
761 	/*
762 	 * Waiting for all commands for the designated target in the active
763 	 * array
764 	 */
765 	for (cnt = 1; cnt < MAX_OUTSTANDING_COMMANDS; cnt++) {
766 		spin_lock_irqsave(&pha->hardware_lock, flags);
767 		sp = pha->outstanding_cmds[cnt];
768 		if (sp) {
769 			cmd = sp->cmd;
770 			spin_unlock_irqrestore(&pha->hardware_lock, flags);
771 			if (cmd->device->id == t &&
772 			    ha->vp_idx == sp->ha->vp_idx) {
773 				if (!qla2x00_eh_wait_on_command(ha, cmd)) {
774 					status = 1;
775 					break;
776 				}
777 			}
778 		} else {
779 			spin_unlock_irqrestore(&pha->hardware_lock, flags);
780 		}
781 	}
782 	return (status);
783 }
784 
785 
786 /**************************************************************************
787 * qla2xxx_eh_device_reset
788 *
789 * Description:
790 *    The device reset function will reset the target and abort any
791 *    executing commands.
792 *
793 *    NOTE: The use of SP is undefined within this context.  Do *NOT*
794 *          attempt to use this value, even if you determine it is
795 *          non-null.
796 *
797 * Input:
798 *    cmd = Linux SCSI command packet of the command that cause the
799 *          bus device reset.
800 *
801 * Returns:
802 *    SUCCESS/FAILURE (defined as macro in scsi.h).
803 *
804 **************************************************************************/
805 static int
806 qla2xxx_eh_device_reset(struct scsi_cmnd *cmd)
807 {
808 	scsi_qla_host_t *ha = shost_priv(cmd->device->host);
809 	fc_port_t *fcport = (struct fc_port *) cmd->device->hostdata;
810 	int ret = FAILED;
811 	unsigned int id, lun;
812 	unsigned long serial;
813 
814 	qla2x00_block_error_handler(cmd);
815 
816 	id = cmd->device->id;
817 	lun = cmd->device->lun;
818 	serial = cmd->serial_number;
819 
820 	if (!fcport)
821 		return ret;
822 
823 	qla_printk(KERN_INFO, ha,
824 	    "scsi(%ld:%d:%d): DEVICE RESET ISSUED.\n", ha->host_no, id, lun);
825 
826 	if (qla2x00_wait_for_hba_online(ha) != QLA_SUCCESS)
827 		goto eh_dev_reset_done;
828 
829 	if (qla2x00_wait_for_loop_ready(ha) == QLA_SUCCESS) {
830 		if (qla2x00_device_reset(ha, fcport) == 0)
831 			ret = SUCCESS;
832 
833 #if defined(LOGOUT_AFTER_DEVICE_RESET)
834 		if (ret == SUCCESS) {
835 			if (fcport->flags & FC_FABRIC_DEVICE) {
836 				ha->isp_ops->fabric_logout(ha, fcport->loop_id);
837 				qla2x00_mark_device_lost(ha, fcport, 0, 0);
838 			}
839 		}
840 #endif
841 	} else {
842 		DEBUG2(printk(KERN_INFO
843 		    "%s failed: loop not ready\n",__func__));
844 	}
845 
846 	if (ret == FAILED) {
847 		DEBUG3(printk("%s(%ld): device reset failed\n",
848 		    __func__, ha->host_no));
849 		qla_printk(KERN_INFO, ha, "%s: device reset failed\n",
850 		    __func__);
851 
852 		goto eh_dev_reset_done;
853 	}
854 
855 	/* Flush outstanding commands. */
856 	if (qla2x00_eh_wait_for_pending_target_commands(ha, id))
857 		ret = FAILED;
858 	if (ret == FAILED) {
859 		DEBUG3(printk("%s(%ld): failed while waiting for commands\n",
860 		    __func__, ha->host_no));
861 		qla_printk(KERN_INFO, ha,
862 		    "%s: failed while waiting for commands\n", __func__);
863 	} else
864 		qla_printk(KERN_INFO, ha,
865 		    "scsi(%ld:%d:%d): DEVICE RESET SUCCEEDED.\n", ha->host_no,
866 		    id, lun);
867  eh_dev_reset_done:
868 	return ret;
869 }
870 
871 /**************************************************************************
872 * qla2x00_eh_wait_for_pending_commands
873 *
874 * Description:
875 *    Waits for all the commands to come back from the specified host.
876 *
877 * Input:
878 *    ha - pointer to scsi_qla_host structure.
879 *
880 * Returns:
881 *    1 : SUCCESS
882 *    0 : FAILED
883 *
884 * Note:
885 **************************************************************************/
886 static int
887 qla2x00_eh_wait_for_pending_commands(scsi_qla_host_t *ha)
888 {
889 	int	cnt;
890 	int	status;
891 	srb_t		*sp;
892 	struct scsi_cmnd *cmd;
893 	unsigned long flags;
894 
895 	status = 1;
896 
897 	/*
898 	 * Waiting for all commands for the designated target in the active
899 	 * array
900 	 */
901 	for (cnt = 1; cnt < MAX_OUTSTANDING_COMMANDS; cnt++) {
902 		spin_lock_irqsave(&ha->hardware_lock, flags);
903 		sp = ha->outstanding_cmds[cnt];
904 		if (sp) {
905 			cmd = sp->cmd;
906 			spin_unlock_irqrestore(&ha->hardware_lock, flags);
907 			status = qla2x00_eh_wait_on_command(ha, cmd);
908 			if (status == 0)
909 				break;
910 		}
911 		else {
912 			spin_unlock_irqrestore(&ha->hardware_lock, flags);
913 		}
914 	}
915 	return (status);
916 }
917 
918 
919 /**************************************************************************
920 * qla2xxx_eh_bus_reset
921 *
922 * Description:
923 *    The bus reset function will reset the bus and abort any executing
924 *    commands.
925 *
926 * Input:
927 *    cmd = Linux SCSI command packet of the command that cause the
928 *          bus reset.
929 *
930 * Returns:
931 *    SUCCESS/FAILURE (defined as macro in scsi.h).
932 *
933 **************************************************************************/
934 static int
935 qla2xxx_eh_bus_reset(struct scsi_cmnd *cmd)
936 {
937 	scsi_qla_host_t *ha = shost_priv(cmd->device->host);
938 	scsi_qla_host_t *pha = to_qla_parent(ha);
939 	fc_port_t *fcport = (struct fc_port *) cmd->device->hostdata;
940 	int ret = FAILED;
941 	unsigned int id, lun;
942 	unsigned long serial;
943 
944 	qla2x00_block_error_handler(cmd);
945 
946 	id = cmd->device->id;
947 	lun = cmd->device->lun;
948 	serial = cmd->serial_number;
949 
950 	if (!fcport)
951 		return ret;
952 
953 	qla_printk(KERN_INFO, ha,
954 	    "scsi(%ld:%d:%d): LOOP RESET ISSUED.\n", ha->host_no, id, lun);
955 
956 	if (qla2x00_wait_for_hba_online(ha) != QLA_SUCCESS) {
957 		DEBUG2(printk("%s failed:board disabled\n",__func__));
958 		goto eh_bus_reset_done;
959 	}
960 
961 	if (qla2x00_wait_for_loop_ready(ha) == QLA_SUCCESS) {
962 		if (qla2x00_loop_reset(ha) == QLA_SUCCESS)
963 			ret = SUCCESS;
964 	}
965 	if (ret == FAILED)
966 		goto eh_bus_reset_done;
967 
968 	/* Flush outstanding commands. */
969 	if (!qla2x00_eh_wait_for_pending_commands(pha))
970 		ret = FAILED;
971 
972 eh_bus_reset_done:
973 	qla_printk(KERN_INFO, ha, "%s: reset %s\n", __func__,
974 	    (ret == FAILED) ? "failed" : "succeded");
975 
976 	return ret;
977 }
978 
979 /**************************************************************************
980 * qla2xxx_eh_host_reset
981 *
982 * Description:
983 *    The reset function will reset the Adapter.
984 *
985 * Input:
986 *      cmd = Linux SCSI command packet of the command that cause the
987 *            adapter reset.
988 *
989 * Returns:
990 *      Either SUCCESS or FAILED.
991 *
992 * Note:
993 **************************************************************************/
994 static int
995 qla2xxx_eh_host_reset(struct scsi_cmnd *cmd)
996 {
997 	scsi_qla_host_t *ha = shost_priv(cmd->device->host);
998 	fc_port_t *fcport = (struct fc_port *) cmd->device->hostdata;
999 	int ret = FAILED;
1000 	unsigned int id, lun;
1001 	unsigned long serial;
1002 	scsi_qla_host_t *pha = to_qla_parent(ha);
1003 
1004 	qla2x00_block_error_handler(cmd);
1005 
1006 	id = cmd->device->id;
1007 	lun = cmd->device->lun;
1008 	serial = cmd->serial_number;
1009 
1010 	if (!fcport)
1011 		return ret;
1012 
1013 	qla_printk(KERN_INFO, ha,
1014 	    "scsi(%ld:%d:%d): ADAPTER RESET ISSUED.\n", ha->host_no, id, lun);
1015 
1016 	if (qla2x00_wait_for_hba_online(ha) != QLA_SUCCESS)
1017 		goto eh_host_reset_lock;
1018 
1019 	/*
1020 	 * Fixme-may be dpc thread is active and processing
1021 	 * loop_resync,so wait a while for it to
1022 	 * be completed and then issue big hammer.Otherwise
1023 	 * it may cause I/O failure as big hammer marks the
1024 	 * devices as lost kicking of the port_down_timer
1025 	 * while dpc is stuck for the mailbox to complete.
1026 	 */
1027 	qla2x00_wait_for_loop_ready(ha);
1028 	set_bit(ABORT_ISP_ACTIVE, &pha->dpc_flags);
1029 	if (qla2x00_abort_isp(pha)) {
1030 		clear_bit(ABORT_ISP_ACTIVE, &pha->dpc_flags);
1031 		/* failed. schedule dpc to try */
1032 		set_bit(ISP_ABORT_NEEDED, &pha->dpc_flags);
1033 
1034 		if (qla2x00_wait_for_hba_online(ha) != QLA_SUCCESS)
1035 			goto eh_host_reset_lock;
1036 	}
1037 	clear_bit(ABORT_ISP_ACTIVE, &pha->dpc_flags);
1038 
1039 	/* Waiting for our command in done_queue to be returned to OS.*/
1040 	if (qla2x00_eh_wait_for_pending_commands(pha))
1041 		ret = SUCCESS;
1042 
1043 	if (ha->parent)
1044 		qla2x00_vp_abort_isp(ha);
1045 
1046 eh_host_reset_lock:
1047 	qla_printk(KERN_INFO, ha, "%s: reset %s\n", __func__,
1048 	    (ret == FAILED) ? "failed" : "succeded");
1049 
1050 	return ret;
1051 }
1052 
1053 /*
1054 * qla2x00_loop_reset
1055 *      Issue loop reset.
1056 *
1057 * Input:
1058 *      ha = adapter block pointer.
1059 *
1060 * Returns:
1061 *      0 = success
1062 */
1063 static int
1064 qla2x00_loop_reset(scsi_qla_host_t *ha)
1065 {
1066 	int ret;
1067 	struct fc_port *fcport;
1068 
1069 	if (ha->flags.enable_lip_full_login) {
1070 		ret = qla2x00_full_login_lip(ha);
1071 		if (ret != QLA_SUCCESS) {
1072 			DEBUG2_3(printk("%s(%ld): bus_reset failed: "
1073 			    "full_login_lip=%d.\n", __func__, ha->host_no,
1074 			    ret));
1075 		}
1076 		atomic_set(&ha->loop_state, LOOP_DOWN);
1077 		atomic_set(&ha->loop_down_timer, LOOP_DOWN_TIME);
1078 		qla2x00_mark_all_devices_lost(ha, 0);
1079 		qla2x00_wait_for_loop_ready(ha);
1080 	}
1081 
1082 	if (ha->flags.enable_lip_reset) {
1083 		ret = qla2x00_lip_reset(ha);
1084 		if (ret != QLA_SUCCESS) {
1085 			DEBUG2_3(printk("%s(%ld): bus_reset failed: "
1086 			    "lip_reset=%d.\n", __func__, ha->host_no, ret));
1087 		}
1088 		qla2x00_wait_for_loop_ready(ha);
1089 	}
1090 
1091 	if (ha->flags.enable_target_reset) {
1092 		list_for_each_entry(fcport, &ha->fcports, list) {
1093 			if (fcport->port_type != FCT_TARGET)
1094 				continue;
1095 
1096 			ret = qla2x00_device_reset(ha, fcport);
1097 			if (ret != QLA_SUCCESS) {
1098 				DEBUG2_3(printk("%s(%ld): bus_reset failed: "
1099 				    "target_reset=%d d_id=%x.\n", __func__,
1100 				    ha->host_no, ret, fcport->d_id.b24));
1101 			}
1102 		}
1103 	}
1104 
1105 	/* Issue marker command only when we are going to start the I/O */
1106 	ha->marker_needed = 1;
1107 
1108 	return QLA_SUCCESS;
1109 }
1110 
1111 /*
1112  * qla2x00_device_reset
1113  *	Issue bus device reset message to the target.
1114  *
1115  * Input:
1116  *	ha = adapter block pointer.
1117  *	t = SCSI ID.
1118  *	TARGET_QUEUE_LOCK must be released.
1119  *	ADAPTER_STATE_LOCK must be released.
1120  *
1121  * Context:
1122  *	Kernel context.
1123  */
1124 static int
1125 qla2x00_device_reset(scsi_qla_host_t *ha, fc_port_t *reset_fcport)
1126 {
1127 	/* Abort Target command will clear Reservation */
1128 	return ha->isp_ops->abort_target(reset_fcport);
1129 }
1130 
1131 static int
1132 qla2xxx_slave_alloc(struct scsi_device *sdev)
1133 {
1134 	struct fc_rport *rport = starget_to_rport(scsi_target(sdev));
1135 
1136 	if (!rport || fc_remote_port_chkready(rport))
1137 		return -ENXIO;
1138 
1139 	sdev->hostdata = *(fc_port_t **)rport->dd_data;
1140 
1141 	return 0;
1142 }
1143 
1144 static int
1145 qla2xxx_slave_configure(struct scsi_device *sdev)
1146 {
1147 	scsi_qla_host_t *ha = shost_priv(sdev->host);
1148 	struct fc_rport *rport = starget_to_rport(sdev->sdev_target);
1149 
1150 	if (sdev->tagged_supported)
1151 		scsi_activate_tcq(sdev, ha->max_q_depth);
1152 	else
1153 		scsi_deactivate_tcq(sdev, ha->max_q_depth);
1154 
1155 	rport->dev_loss_tmo = ha->port_down_retry_count + 5;
1156 
1157 	return 0;
1158 }
1159 
1160 static void
1161 qla2xxx_slave_destroy(struct scsi_device *sdev)
1162 {
1163 	sdev->hostdata = NULL;
1164 }
1165 
1166 static int
1167 qla2x00_change_queue_depth(struct scsi_device *sdev, int qdepth)
1168 {
1169 	scsi_adjust_queue_depth(sdev, scsi_get_tag_type(sdev), qdepth);
1170 	return sdev->queue_depth;
1171 }
1172 
1173 static int
1174 qla2x00_change_queue_type(struct scsi_device *sdev, int tag_type)
1175 {
1176 	if (sdev->tagged_supported) {
1177 		scsi_set_tag_type(sdev, tag_type);
1178 		if (tag_type)
1179 			scsi_activate_tcq(sdev, sdev->queue_depth);
1180 		else
1181 			scsi_deactivate_tcq(sdev, sdev->queue_depth);
1182 	} else
1183 		tag_type = 0;
1184 
1185 	return tag_type;
1186 }
1187 
1188 /**
1189  * qla2x00_config_dma_addressing() - Configure OS DMA addressing method.
1190  * @ha: HA context
1191  *
1192  * At exit, the @ha's flags.enable_64bit_addressing set to indicated
1193  * supported addressing method.
1194  */
1195 static void
1196 qla2x00_config_dma_addressing(scsi_qla_host_t *ha)
1197 {
1198 	/* Assume a 32bit DMA mask. */
1199 	ha->flags.enable_64bit_addressing = 0;
1200 
1201 	if (!dma_set_mask(&ha->pdev->dev, DMA_64BIT_MASK)) {
1202 		/* Any upper-dword bits set? */
1203 		if (MSD(dma_get_required_mask(&ha->pdev->dev)) &&
1204 		    !pci_set_consistent_dma_mask(ha->pdev, DMA_64BIT_MASK)) {
1205 			/* Ok, a 64bit DMA mask is applicable. */
1206 			ha->flags.enable_64bit_addressing = 1;
1207 			ha->isp_ops->calc_req_entries = qla2x00_calc_iocbs_64;
1208 			ha->isp_ops->build_iocbs = qla2x00_build_scsi_iocbs_64;
1209 			return;
1210 		}
1211 	}
1212 
1213 	dma_set_mask(&ha->pdev->dev, DMA_32BIT_MASK);
1214 	pci_set_consistent_dma_mask(ha->pdev, DMA_32BIT_MASK);
1215 }
1216 
1217 static void
1218 qla2x00_enable_intrs(scsi_qla_host_t *ha)
1219 {
1220 	unsigned long flags = 0;
1221 	struct device_reg_2xxx __iomem *reg = &ha->iobase->isp;
1222 
1223 	spin_lock_irqsave(&ha->hardware_lock, flags);
1224 	ha->interrupts_on = 1;
1225 	/* enable risc and host interrupts */
1226 	WRT_REG_WORD(&reg->ictrl, ICR_EN_INT | ICR_EN_RISC);
1227 	RD_REG_WORD(&reg->ictrl);
1228 	spin_unlock_irqrestore(&ha->hardware_lock, flags);
1229 
1230 }
1231 
1232 static void
1233 qla2x00_disable_intrs(scsi_qla_host_t *ha)
1234 {
1235 	unsigned long flags = 0;
1236 	struct device_reg_2xxx __iomem *reg = &ha->iobase->isp;
1237 
1238 	spin_lock_irqsave(&ha->hardware_lock, flags);
1239 	ha->interrupts_on = 0;
1240 	/* disable risc and host interrupts */
1241 	WRT_REG_WORD(&reg->ictrl, 0);
1242 	RD_REG_WORD(&reg->ictrl);
1243 	spin_unlock_irqrestore(&ha->hardware_lock, flags);
1244 }
1245 
1246 static void
1247 qla24xx_enable_intrs(scsi_qla_host_t *ha)
1248 {
1249 	unsigned long flags = 0;
1250 	struct device_reg_24xx __iomem *reg = &ha->iobase->isp24;
1251 
1252 	spin_lock_irqsave(&ha->hardware_lock, flags);
1253 	ha->interrupts_on = 1;
1254 	WRT_REG_DWORD(&reg->ictrl, ICRX_EN_RISC_INT);
1255 	RD_REG_DWORD(&reg->ictrl);
1256 	spin_unlock_irqrestore(&ha->hardware_lock, flags);
1257 }
1258 
1259 static void
1260 qla24xx_disable_intrs(scsi_qla_host_t *ha)
1261 {
1262 	unsigned long flags = 0;
1263 	struct device_reg_24xx __iomem *reg = &ha->iobase->isp24;
1264 
1265 	spin_lock_irqsave(&ha->hardware_lock, flags);
1266 	ha->interrupts_on = 0;
1267 	WRT_REG_DWORD(&reg->ictrl, 0);
1268 	RD_REG_DWORD(&reg->ictrl);
1269 	spin_unlock_irqrestore(&ha->hardware_lock, flags);
1270 }
1271 
1272 static struct isp_operations qla2100_isp_ops = {
1273 	.pci_config		= qla2100_pci_config,
1274 	.reset_chip		= qla2x00_reset_chip,
1275 	.chip_diag		= qla2x00_chip_diag,
1276 	.config_rings		= qla2x00_config_rings,
1277 	.reset_adapter		= qla2x00_reset_adapter,
1278 	.nvram_config		= qla2x00_nvram_config,
1279 	.update_fw_options	= qla2x00_update_fw_options,
1280 	.load_risc		= qla2x00_load_risc,
1281 	.pci_info_str		= qla2x00_pci_info_str,
1282 	.fw_version_str		= qla2x00_fw_version_str,
1283 	.intr_handler		= qla2100_intr_handler,
1284 	.enable_intrs		= qla2x00_enable_intrs,
1285 	.disable_intrs		= qla2x00_disable_intrs,
1286 	.abort_command		= qla2x00_abort_command,
1287 	.abort_target		= qla2x00_abort_target,
1288 	.fabric_login		= qla2x00_login_fabric,
1289 	.fabric_logout		= qla2x00_fabric_logout,
1290 	.calc_req_entries	= qla2x00_calc_iocbs_32,
1291 	.build_iocbs		= qla2x00_build_scsi_iocbs_32,
1292 	.prep_ms_iocb		= qla2x00_prep_ms_iocb,
1293 	.prep_ms_fdmi_iocb	= qla2x00_prep_ms_fdmi_iocb,
1294 	.read_nvram		= qla2x00_read_nvram_data,
1295 	.write_nvram		= qla2x00_write_nvram_data,
1296 	.fw_dump		= qla2100_fw_dump,
1297 	.beacon_on		= NULL,
1298 	.beacon_off		= NULL,
1299 	.beacon_blink		= NULL,
1300 	.read_optrom		= qla2x00_read_optrom_data,
1301 	.write_optrom		= qla2x00_write_optrom_data,
1302 	.get_flash_version	= qla2x00_get_flash_version,
1303 };
1304 
1305 static struct isp_operations qla2300_isp_ops = {
1306 	.pci_config		= qla2300_pci_config,
1307 	.reset_chip		= qla2x00_reset_chip,
1308 	.chip_diag		= qla2x00_chip_diag,
1309 	.config_rings		= qla2x00_config_rings,
1310 	.reset_adapter		= qla2x00_reset_adapter,
1311 	.nvram_config		= qla2x00_nvram_config,
1312 	.update_fw_options	= qla2x00_update_fw_options,
1313 	.load_risc		= qla2x00_load_risc,
1314 	.pci_info_str		= qla2x00_pci_info_str,
1315 	.fw_version_str		= qla2x00_fw_version_str,
1316 	.intr_handler		= qla2300_intr_handler,
1317 	.enable_intrs		= qla2x00_enable_intrs,
1318 	.disable_intrs		= qla2x00_disable_intrs,
1319 	.abort_command		= qla2x00_abort_command,
1320 	.abort_target		= qla2x00_abort_target,
1321 	.fabric_login		= qla2x00_login_fabric,
1322 	.fabric_logout		= qla2x00_fabric_logout,
1323 	.calc_req_entries	= qla2x00_calc_iocbs_32,
1324 	.build_iocbs		= qla2x00_build_scsi_iocbs_32,
1325 	.prep_ms_iocb		= qla2x00_prep_ms_iocb,
1326 	.prep_ms_fdmi_iocb	= qla2x00_prep_ms_fdmi_iocb,
1327 	.read_nvram		= qla2x00_read_nvram_data,
1328 	.write_nvram		= qla2x00_write_nvram_data,
1329 	.fw_dump		= qla2300_fw_dump,
1330 	.beacon_on		= qla2x00_beacon_on,
1331 	.beacon_off		= qla2x00_beacon_off,
1332 	.beacon_blink		= qla2x00_beacon_blink,
1333 	.read_optrom		= qla2x00_read_optrom_data,
1334 	.write_optrom		= qla2x00_write_optrom_data,
1335 	.get_flash_version	= qla2x00_get_flash_version,
1336 };
1337 
1338 static struct isp_operations qla24xx_isp_ops = {
1339 	.pci_config		= qla24xx_pci_config,
1340 	.reset_chip		= qla24xx_reset_chip,
1341 	.chip_diag		= qla24xx_chip_diag,
1342 	.config_rings		= qla24xx_config_rings,
1343 	.reset_adapter		= qla24xx_reset_adapter,
1344 	.nvram_config		= qla24xx_nvram_config,
1345 	.update_fw_options	= qla24xx_update_fw_options,
1346 	.load_risc		= qla24xx_load_risc,
1347 	.pci_info_str		= qla24xx_pci_info_str,
1348 	.fw_version_str		= qla24xx_fw_version_str,
1349 	.intr_handler		= qla24xx_intr_handler,
1350 	.enable_intrs		= qla24xx_enable_intrs,
1351 	.disable_intrs		= qla24xx_disable_intrs,
1352 	.abort_command		= qla24xx_abort_command,
1353 	.abort_target		= qla24xx_abort_target,
1354 	.fabric_login		= qla24xx_login_fabric,
1355 	.fabric_logout		= qla24xx_fabric_logout,
1356 	.calc_req_entries	= NULL,
1357 	.build_iocbs		= NULL,
1358 	.prep_ms_iocb		= qla24xx_prep_ms_iocb,
1359 	.prep_ms_fdmi_iocb	= qla24xx_prep_ms_fdmi_iocb,
1360 	.read_nvram		= qla24xx_read_nvram_data,
1361 	.write_nvram		= qla24xx_write_nvram_data,
1362 	.fw_dump		= qla24xx_fw_dump,
1363 	.beacon_on		= qla24xx_beacon_on,
1364 	.beacon_off		= qla24xx_beacon_off,
1365 	.beacon_blink		= qla24xx_beacon_blink,
1366 	.read_optrom		= qla24xx_read_optrom_data,
1367 	.write_optrom		= qla24xx_write_optrom_data,
1368 	.get_flash_version	= qla24xx_get_flash_version,
1369 };
1370 
1371 static struct isp_operations qla25xx_isp_ops = {
1372 	.pci_config		= qla25xx_pci_config,
1373 	.reset_chip		= qla24xx_reset_chip,
1374 	.chip_diag		= qla24xx_chip_diag,
1375 	.config_rings		= qla24xx_config_rings,
1376 	.reset_adapter		= qla24xx_reset_adapter,
1377 	.nvram_config		= qla24xx_nvram_config,
1378 	.update_fw_options	= qla24xx_update_fw_options,
1379 	.load_risc		= qla24xx_load_risc,
1380 	.pci_info_str		= qla24xx_pci_info_str,
1381 	.fw_version_str		= qla24xx_fw_version_str,
1382 	.intr_handler		= qla24xx_intr_handler,
1383 	.enable_intrs		= qla24xx_enable_intrs,
1384 	.disable_intrs		= qla24xx_disable_intrs,
1385 	.abort_command		= qla24xx_abort_command,
1386 	.abort_target		= qla24xx_abort_target,
1387 	.fabric_login		= qla24xx_login_fabric,
1388 	.fabric_logout		= qla24xx_fabric_logout,
1389 	.calc_req_entries	= NULL,
1390 	.build_iocbs		= NULL,
1391 	.prep_ms_iocb		= qla24xx_prep_ms_iocb,
1392 	.prep_ms_fdmi_iocb	= qla24xx_prep_ms_fdmi_iocb,
1393 	.read_nvram		= qla25xx_read_nvram_data,
1394 	.write_nvram		= qla25xx_write_nvram_data,
1395 	.fw_dump		= qla25xx_fw_dump,
1396 	.beacon_on		= qla24xx_beacon_on,
1397 	.beacon_off		= qla24xx_beacon_off,
1398 	.beacon_blink		= qla24xx_beacon_blink,
1399 	.read_optrom		= qla25xx_read_optrom_data,
1400 	.write_optrom		= qla24xx_write_optrom_data,
1401 	.get_flash_version	= qla24xx_get_flash_version,
1402 };
1403 
1404 static inline void
1405 qla2x00_set_isp_flags(scsi_qla_host_t *ha)
1406 {
1407 	ha->device_type = DT_EXTENDED_IDS;
1408 	switch (ha->pdev->device) {
1409 	case PCI_DEVICE_ID_QLOGIC_ISP2100:
1410 		ha->device_type |= DT_ISP2100;
1411 		ha->device_type &= ~DT_EXTENDED_IDS;
1412 		ha->fw_srisc_address = RISC_START_ADDRESS_2100;
1413 		break;
1414 	case PCI_DEVICE_ID_QLOGIC_ISP2200:
1415 		ha->device_type |= DT_ISP2200;
1416 		ha->device_type &= ~DT_EXTENDED_IDS;
1417 		ha->fw_srisc_address = RISC_START_ADDRESS_2100;
1418 		break;
1419 	case PCI_DEVICE_ID_QLOGIC_ISP2300:
1420 		ha->device_type |= DT_ISP2300;
1421 		ha->device_type |= DT_ZIO_SUPPORTED;
1422 		ha->fw_srisc_address = RISC_START_ADDRESS_2300;
1423 		break;
1424 	case PCI_DEVICE_ID_QLOGIC_ISP2312:
1425 		ha->device_type |= DT_ISP2312;
1426 		ha->device_type |= DT_ZIO_SUPPORTED;
1427 		ha->fw_srisc_address = RISC_START_ADDRESS_2300;
1428 		break;
1429 	case PCI_DEVICE_ID_QLOGIC_ISP2322:
1430 		ha->device_type |= DT_ISP2322;
1431 		ha->device_type |= DT_ZIO_SUPPORTED;
1432 		if (ha->pdev->subsystem_vendor == 0x1028 &&
1433 		    ha->pdev->subsystem_device == 0x0170)
1434 			ha->device_type |= DT_OEM_001;
1435 		ha->fw_srisc_address = RISC_START_ADDRESS_2300;
1436 		break;
1437 	case PCI_DEVICE_ID_QLOGIC_ISP6312:
1438 		ha->device_type |= DT_ISP6312;
1439 		ha->fw_srisc_address = RISC_START_ADDRESS_2300;
1440 		break;
1441 	case PCI_DEVICE_ID_QLOGIC_ISP6322:
1442 		ha->device_type |= DT_ISP6322;
1443 		ha->fw_srisc_address = RISC_START_ADDRESS_2300;
1444 		break;
1445 	case PCI_DEVICE_ID_QLOGIC_ISP2422:
1446 		ha->device_type |= DT_ISP2422;
1447 		ha->device_type |= DT_ZIO_SUPPORTED;
1448 		ha->device_type |= DT_FWI2;
1449 		ha->device_type |= DT_IIDMA;
1450 		ha->fw_srisc_address = RISC_START_ADDRESS_2400;
1451 		break;
1452 	case PCI_DEVICE_ID_QLOGIC_ISP2432:
1453 		ha->device_type |= DT_ISP2432;
1454 		ha->device_type |= DT_ZIO_SUPPORTED;
1455 		ha->device_type |= DT_FWI2;
1456 		ha->device_type |= DT_IIDMA;
1457 		ha->fw_srisc_address = RISC_START_ADDRESS_2400;
1458 		break;
1459 	case PCI_DEVICE_ID_QLOGIC_ISP5422:
1460 		ha->device_type |= DT_ISP5422;
1461 		ha->device_type |= DT_FWI2;
1462 		ha->fw_srisc_address = RISC_START_ADDRESS_2400;
1463 		break;
1464 	case PCI_DEVICE_ID_QLOGIC_ISP5432:
1465 		ha->device_type |= DT_ISP5432;
1466 		ha->device_type |= DT_FWI2;
1467 		ha->fw_srisc_address = RISC_START_ADDRESS_2400;
1468 		break;
1469 	case PCI_DEVICE_ID_QLOGIC_ISP2532:
1470 		ha->device_type |= DT_ISP2532;
1471 		ha->device_type |= DT_ZIO_SUPPORTED;
1472 		ha->device_type |= DT_FWI2;
1473 		ha->device_type |= DT_IIDMA;
1474 		ha->fw_srisc_address = RISC_START_ADDRESS_2400;
1475 		break;
1476 	}
1477 }
1478 
1479 static int
1480 qla2x00_iospace_config(scsi_qla_host_t *ha)
1481 {
1482 	unsigned long	pio, pio_len, pio_flags;
1483 	unsigned long	mmio, mmio_len, mmio_flags;
1484 
1485 	/* We only need PIO for Flash operations on ISP2312 v2 chips. */
1486 	pio = pci_resource_start(ha->pdev, 0);
1487 	pio_len = pci_resource_len(ha->pdev, 0);
1488 	pio_flags = pci_resource_flags(ha->pdev, 0);
1489 	if (pio_flags & IORESOURCE_IO) {
1490 		if (pio_len < MIN_IOBASE_LEN) {
1491 			qla_printk(KERN_WARNING, ha,
1492 			    "Invalid PCI I/O region size (%s)...\n",
1493 				pci_name(ha->pdev));
1494 			pio = 0;
1495 		}
1496 	} else {
1497 		qla_printk(KERN_WARNING, ha,
1498 		    "region #0 not a PIO resource (%s)...\n",
1499 		    pci_name(ha->pdev));
1500 		pio = 0;
1501 	}
1502 
1503 	/* Use MMIO operations for all accesses. */
1504 	mmio = pci_resource_start(ha->pdev, 1);
1505 	mmio_len = pci_resource_len(ha->pdev, 1);
1506 	mmio_flags = pci_resource_flags(ha->pdev, 1);
1507 
1508 	if (!(mmio_flags & IORESOURCE_MEM)) {
1509 		qla_printk(KERN_ERR, ha,
1510 		    "region #0 not an MMIO resource (%s), aborting\n",
1511 		    pci_name(ha->pdev));
1512 		goto iospace_error_exit;
1513 	}
1514 	if (mmio_len < MIN_IOBASE_LEN) {
1515 		qla_printk(KERN_ERR, ha,
1516 		    "Invalid PCI mem region size (%s), aborting\n",
1517 			pci_name(ha->pdev));
1518 		goto iospace_error_exit;
1519 	}
1520 
1521 	if (pci_request_regions(ha->pdev, QLA2XXX_DRIVER_NAME)) {
1522 		qla_printk(KERN_WARNING, ha,
1523 		    "Failed to reserve PIO/MMIO regions (%s)\n",
1524 		    pci_name(ha->pdev));
1525 
1526 		goto iospace_error_exit;
1527 	}
1528 
1529 	ha->pio_address = pio;
1530 	ha->pio_length = pio_len;
1531 	ha->iobase = ioremap(mmio, MIN_IOBASE_LEN);
1532 	if (!ha->iobase) {
1533 		qla_printk(KERN_ERR, ha,
1534 		    "cannot remap MMIO (%s), aborting\n", pci_name(ha->pdev));
1535 
1536 		goto iospace_error_exit;
1537 	}
1538 
1539 	return (0);
1540 
1541 iospace_error_exit:
1542 	return (-ENOMEM);
1543 }
1544 
1545 static void
1546 qla2xxx_scan_start(struct Scsi_Host *shost)
1547 {
1548 	scsi_qla_host_t *ha = shost_priv(shost);
1549 
1550 	set_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags);
1551 	set_bit(LOCAL_LOOP_UPDATE, &ha->dpc_flags);
1552 	set_bit(RSCN_UPDATE, &ha->dpc_flags);
1553 }
1554 
1555 static int
1556 qla2xxx_scan_finished(struct Scsi_Host *shost, unsigned long time)
1557 {
1558 	scsi_qla_host_t *ha = shost_priv(shost);
1559 
1560 	if (!ha->host)
1561 		return 1;
1562 	if (time > ha->loop_reset_delay * HZ)
1563 		return 1;
1564 
1565 	return atomic_read(&ha->loop_state) == LOOP_READY;
1566 }
1567 
1568 /*
1569  * PCI driver interface
1570  */
1571 static int __devinit
1572 qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
1573 {
1574 	int	ret = -ENODEV;
1575 	device_reg_t __iomem *reg;
1576 	struct Scsi_Host *host;
1577 	scsi_qla_host_t *ha;
1578 	unsigned long	flags = 0;
1579 	char pci_info[30];
1580 	char fw_str[30];
1581 	struct scsi_host_template *sht;
1582 
1583 	if (pci_enable_device(pdev))
1584 		goto probe_out;
1585 
1586 	if (pci_find_aer_capability(pdev))
1587 		if (pci_enable_pcie_error_reporting(pdev))
1588 			goto probe_out;
1589 
1590 	sht = &qla2x00_driver_template;
1591 	if (pdev->device == PCI_DEVICE_ID_QLOGIC_ISP2422 ||
1592 	    pdev->device == PCI_DEVICE_ID_QLOGIC_ISP2432 ||
1593 	    pdev->device == PCI_DEVICE_ID_QLOGIC_ISP5422 ||
1594 	    pdev->device == PCI_DEVICE_ID_QLOGIC_ISP5432 ||
1595 	    pdev->device == PCI_DEVICE_ID_QLOGIC_ISP2532)
1596 		sht = &qla24xx_driver_template;
1597 	host = scsi_host_alloc(sht, sizeof(scsi_qla_host_t));
1598 	if (host == NULL) {
1599 		printk(KERN_WARNING
1600 		    "qla2xxx: Couldn't allocate host from scsi layer!\n");
1601 		goto probe_disable_device;
1602 	}
1603 
1604 	/* Clear our data area */
1605 	ha = shost_priv(host);
1606 	memset(ha, 0, sizeof(scsi_qla_host_t));
1607 
1608 	ha->pdev = pdev;
1609 	ha->host = host;
1610 	ha->host_no = host->host_no;
1611 	sprintf(ha->host_str, "%s_%ld", QLA2XXX_DRIVER_NAME, ha->host_no);
1612 	ha->parent = NULL;
1613 
1614 	/* Set ISP-type information. */
1615 	qla2x00_set_isp_flags(ha);
1616 
1617 	/* Configure PCI I/O space */
1618 	ret = qla2x00_iospace_config(ha);
1619 	if (ret)
1620 		goto probe_failed;
1621 
1622 	qla_printk(KERN_INFO, ha,
1623 	    "Found an ISP%04X, irq %d, iobase 0x%p\n", pdev->device, pdev->irq,
1624 	    ha->iobase);
1625 
1626 	spin_lock_init(&ha->hardware_lock);
1627 
1628 	ha->prev_topology = 0;
1629 	ha->init_cb_size = sizeof(init_cb_t);
1630 	ha->mgmt_svr_loop_id = MANAGEMENT_SERVER + ha->vp_idx;
1631 	ha->link_data_rate = PORT_SPEED_UNKNOWN;
1632 	ha->optrom_size = OPTROM_SIZE_2300;
1633 
1634 	ha->max_q_depth = MAX_Q_DEPTH;
1635 	if (ql2xmaxqdepth != 0 && ql2xmaxqdepth <= 0xffffU)
1636 		ha->max_q_depth = ql2xmaxqdepth;
1637 
1638 	/* Assign ISP specific operations. */
1639 	if (IS_QLA2100(ha)) {
1640 		host->max_id = MAX_TARGETS_2100;
1641 		ha->mbx_count = MAILBOX_REGISTER_COUNT_2100;
1642 		ha->request_q_length = REQUEST_ENTRY_CNT_2100;
1643 		ha->response_q_length = RESPONSE_ENTRY_CNT_2100;
1644 		ha->last_loop_id = SNS_LAST_LOOP_ID_2100;
1645 		host->sg_tablesize = 32;
1646 		ha->gid_list_info_size = 4;
1647 		ha->isp_ops = &qla2100_isp_ops;
1648 	} else if (IS_QLA2200(ha)) {
1649 		host->max_id = MAX_TARGETS_2200;
1650 		ha->mbx_count = MAILBOX_REGISTER_COUNT;
1651 		ha->request_q_length = REQUEST_ENTRY_CNT_2200;
1652 		ha->response_q_length = RESPONSE_ENTRY_CNT_2100;
1653 		ha->last_loop_id = SNS_LAST_LOOP_ID_2100;
1654 		ha->gid_list_info_size = 4;
1655 		ha->isp_ops = &qla2100_isp_ops;
1656 	} else if (IS_QLA23XX(ha)) {
1657 		host->max_id = MAX_TARGETS_2200;
1658 		ha->mbx_count = MAILBOX_REGISTER_COUNT;
1659 		ha->request_q_length = REQUEST_ENTRY_CNT_2200;
1660 		ha->response_q_length = RESPONSE_ENTRY_CNT_2300;
1661 		ha->last_loop_id = SNS_LAST_LOOP_ID_2300;
1662 		ha->gid_list_info_size = 6;
1663 		if (IS_QLA2322(ha) || IS_QLA6322(ha))
1664 			ha->optrom_size = OPTROM_SIZE_2322;
1665 		ha->isp_ops = &qla2300_isp_ops;
1666 	} else if (IS_QLA24XX(ha) || IS_QLA54XX(ha)) {
1667 		host->max_id = MAX_TARGETS_2200;
1668 		ha->mbx_count = MAILBOX_REGISTER_COUNT;
1669 		ha->request_q_length = REQUEST_ENTRY_CNT_24XX;
1670 		ha->response_q_length = RESPONSE_ENTRY_CNT_2300;
1671 		ha->last_loop_id = SNS_LAST_LOOP_ID_2300;
1672 		ha->init_cb_size = sizeof(struct mid_init_cb_24xx);
1673 		ha->mgmt_svr_loop_id = 10 + ha->vp_idx;
1674 		ha->gid_list_info_size = 8;
1675 		ha->optrom_size = OPTROM_SIZE_24XX;
1676 		ha->isp_ops = &qla24xx_isp_ops;
1677 	} else if (IS_QLA25XX(ha)) {
1678 		host->max_id = MAX_TARGETS_2200;
1679 		ha->mbx_count = MAILBOX_REGISTER_COUNT;
1680 		ha->request_q_length = REQUEST_ENTRY_CNT_24XX;
1681 		ha->response_q_length = RESPONSE_ENTRY_CNT_2300;
1682 		ha->last_loop_id = SNS_LAST_LOOP_ID_2300;
1683 		ha->init_cb_size = sizeof(struct mid_init_cb_24xx);
1684 		ha->mgmt_svr_loop_id = 10 + ha->vp_idx;
1685 		ha->gid_list_info_size = 8;
1686 		ha->optrom_size = OPTROM_SIZE_25XX;
1687 		ha->isp_ops = &qla25xx_isp_ops;
1688 	}
1689 	host->can_queue = ha->request_q_length + 128;
1690 
1691 	/* load the F/W, read paramaters, and init the H/W */
1692 	ha->instance = num_hosts;
1693 
1694 	init_MUTEX(&ha->mbx_cmd_sem);
1695 	init_MUTEX(&ha->vport_sem);
1696 	init_MUTEX_LOCKED(&ha->mbx_intr_sem);
1697 
1698 	INIT_LIST_HEAD(&ha->list);
1699 	INIT_LIST_HEAD(&ha->fcports);
1700 	INIT_LIST_HEAD(&ha->vp_list);
1701 
1702 	set_bit(0, (unsigned long *) ha->vp_idx_map);
1703 
1704 	qla2x00_config_dma_addressing(ha);
1705 	if (qla2x00_mem_alloc(ha)) {
1706 		qla_printk(KERN_WARNING, ha,
1707 		    "[ERROR] Failed to allocate memory for adapter\n");
1708 
1709 		ret = -ENOMEM;
1710 		goto probe_failed;
1711 	}
1712 
1713 	if (qla2x00_initialize_adapter(ha)) {
1714 		qla_printk(KERN_WARNING, ha,
1715 		    "Failed to initialize adapter\n");
1716 
1717 		DEBUG2(printk("scsi(%ld): Failed to initialize adapter - "
1718 		    "Adapter flags %x.\n",
1719 		    ha->host_no, ha->device_flags));
1720 
1721 		ret = -ENODEV;
1722 		goto probe_failed;
1723 	}
1724 
1725 	/*
1726 	 * Startup the kernel thread for this host adapter
1727 	 */
1728 	ha->dpc_thread = kthread_create(qla2x00_do_dpc, ha,
1729 			"%s_dpc", ha->host_str);
1730 	if (IS_ERR(ha->dpc_thread)) {
1731 		qla_printk(KERN_WARNING, ha,
1732 		    "Unable to start DPC thread!\n");
1733 		ret = PTR_ERR(ha->dpc_thread);
1734 		goto probe_failed;
1735 	}
1736 
1737 	host->this_id = 255;
1738 	host->cmd_per_lun = 3;
1739 	host->unique_id = ha->instance;
1740 	host->max_cmd_len = MAX_CMDSZ;
1741 	host->max_channel = MAX_BUSES - 1;
1742 	host->max_lun = MAX_LUNS;
1743 	host->transportt = qla2xxx_transport_template;
1744 
1745 	ret = qla2x00_request_irqs(ha);
1746 	if (ret)
1747 		goto probe_failed;
1748 
1749 	/* Initialized the timer */
1750 	qla2x00_start_timer(ha, qla2x00_timer, WATCH_INTERVAL);
1751 
1752 	DEBUG2(printk("DEBUG: detect hba %ld at address = %p\n",
1753 	    ha->host_no, ha));
1754 
1755 	ha->isp_ops->disable_intrs(ha);
1756 
1757 	spin_lock_irqsave(&ha->hardware_lock, flags);
1758 	reg = ha->iobase;
1759 	if (IS_FWI2_CAPABLE(ha)) {
1760 		WRT_REG_DWORD(&reg->isp24.hccr, HCCRX_CLR_HOST_INT);
1761 		WRT_REG_DWORD(&reg->isp24.hccr, HCCRX_CLR_RISC_INT);
1762 	} else {
1763 		WRT_REG_WORD(&reg->isp.semaphore, 0);
1764 		WRT_REG_WORD(&reg->isp.hccr, HCCR_CLR_RISC_INT);
1765 		WRT_REG_WORD(&reg->isp.hccr, HCCR_CLR_HOST_INT);
1766 
1767 		/* Enable proper parity */
1768 		if (!IS_QLA2100(ha) && !IS_QLA2200(ha)) {
1769 			if (IS_QLA2300(ha))
1770 				/* SRAM parity */
1771 				WRT_REG_WORD(&reg->isp.hccr,
1772 				    (HCCR_ENABLE_PARITY + 0x1));
1773 			else
1774 				/* SRAM, Instruction RAM and GP RAM parity */
1775 				WRT_REG_WORD(&reg->isp.hccr,
1776 				    (HCCR_ENABLE_PARITY + 0x7));
1777 		}
1778 	}
1779 	spin_unlock_irqrestore(&ha->hardware_lock, flags);
1780 
1781 	ha->isp_ops->enable_intrs(ha);
1782 
1783 	pci_set_drvdata(pdev, ha);
1784 
1785 	ha->flags.init_done = 1;
1786 	ha->flags.online = 1;
1787 
1788 	num_hosts++;
1789 
1790 	ret = scsi_add_host(host, &pdev->dev);
1791 	if (ret)
1792 		goto probe_failed;
1793 
1794 	scsi_scan_host(host);
1795 
1796 	qla2x00_alloc_sysfs_attr(ha);
1797 
1798 	qla2x00_init_host_attr(ha);
1799 
1800 	qla_printk(KERN_INFO, ha, "\n"
1801 	    " QLogic Fibre Channel HBA Driver: %s\n"
1802 	    "  QLogic %s - %s\n"
1803 	    "  ISP%04X: %s @ %s hdma%c, host#=%ld, fw=%s\n",
1804 	    qla2x00_version_str, ha->model_number,
1805 	    ha->model_desc ? ha->model_desc: "", pdev->device,
1806 	    ha->isp_ops->pci_info_str(ha, pci_info), pci_name(pdev),
1807 	    ha->flags.enable_64bit_addressing ? '+': '-', ha->host_no,
1808 	    ha->isp_ops->fw_version_str(ha, fw_str));
1809 
1810 	return 0;
1811 
1812 probe_failed:
1813 	qla2x00_free_device(ha);
1814 
1815 	scsi_host_put(host);
1816 
1817 probe_disable_device:
1818 	pci_disable_device(pdev);
1819 
1820 probe_out:
1821 	return ret;
1822 }
1823 
1824 static void __devexit
1825 qla2x00_remove_one(struct pci_dev *pdev)
1826 {
1827 	scsi_qla_host_t *ha;
1828 
1829 	ha = pci_get_drvdata(pdev);
1830 
1831 	qla2x00_free_sysfs_attr(ha);
1832 
1833 	fc_remove_host(ha->host);
1834 
1835 	scsi_remove_host(ha->host);
1836 
1837 	qla2x00_free_device(ha);
1838 
1839 	scsi_host_put(ha->host);
1840 
1841 	pci_disable_device(pdev);
1842 	pci_set_drvdata(pdev, NULL);
1843 }
1844 
1845 static void
1846 qla2x00_free_device(scsi_qla_host_t *ha)
1847 {
1848 	/* Disable timer */
1849 	if (ha->timer_active)
1850 		qla2x00_stop_timer(ha);
1851 
1852 	/* Kill the kernel thread for this host */
1853 	if (ha->dpc_thread) {
1854 		struct task_struct *t = ha->dpc_thread;
1855 
1856 		/*
1857 		 * qla2xxx_wake_dpc checks for ->dpc_thread
1858 		 * so we need to zero it out.
1859 		 */
1860 		ha->dpc_thread = NULL;
1861 		kthread_stop(t);
1862 	}
1863 
1864 	if (ha->eft)
1865 		qla2x00_trace_control(ha, TC_DISABLE, 0, 0);
1866 
1867 	ha->flags.online = 0;
1868 
1869 	/* Stop currently executing firmware. */
1870 	qla2x00_try_to_stop_firmware(ha);
1871 
1872 	/* turn-off interrupts on the card */
1873 	if (ha->interrupts_on)
1874 		ha->isp_ops->disable_intrs(ha);
1875 
1876 	qla2x00_mem_free(ha);
1877 
1878 	qla2x00_free_irqs(ha);
1879 
1880 	/* release io space registers  */
1881 	if (ha->iobase)
1882 		iounmap(ha->iobase);
1883 	pci_release_regions(ha->pdev);
1884 }
1885 
1886 static inline void
1887 qla2x00_schedule_rport_del(struct scsi_qla_host *ha, fc_port_t *fcport,
1888     int defer)
1889 {
1890 	unsigned long flags;
1891 	struct fc_rport *rport;
1892 
1893 	if (!fcport->rport)
1894 		return;
1895 
1896 	rport = fcport->rport;
1897 	if (defer) {
1898 		spin_lock_irqsave(&fcport->rport_lock, flags);
1899 		fcport->drport = rport;
1900 		fcport->rport = NULL;
1901 		*(fc_port_t **)rport->dd_data = NULL;
1902 		spin_unlock_irqrestore(&fcport->rport_lock, flags);
1903 		set_bit(FCPORT_UPDATE_NEEDED, &ha->dpc_flags);
1904 	} else {
1905 		spin_lock_irqsave(&fcport->rport_lock, flags);
1906 		fcport->rport = NULL;
1907 		*(fc_port_t **)rport->dd_data = NULL;
1908 		spin_unlock_irqrestore(&fcport->rport_lock, flags);
1909 		fc_remote_port_delete(rport);
1910 	}
1911 }
1912 
1913 /*
1914  * qla2x00_mark_device_lost Updates fcport state when device goes offline.
1915  *
1916  * Input: ha = adapter block pointer.  fcport = port structure pointer.
1917  *
1918  * Return: None.
1919  *
1920  * Context:
1921  */
1922 void qla2x00_mark_device_lost(scsi_qla_host_t *ha, fc_port_t *fcport,
1923     int do_login, int defer)
1924 {
1925 	if (atomic_read(&fcport->state) == FCS_ONLINE &&
1926 	    ha->vp_idx == fcport->vp_idx)
1927 		qla2x00_schedule_rport_del(ha, fcport, defer);
1928 
1929 	/*
1930 	 * We may need to retry the login, so don't change the state of the
1931 	 * port but do the retries.
1932 	 */
1933 	if (atomic_read(&fcport->state) != FCS_DEVICE_DEAD)
1934 		atomic_set(&fcport->state, FCS_DEVICE_LOST);
1935 
1936 	if (!do_login)
1937 		return;
1938 
1939 	if (fcport->login_retry == 0) {
1940 		fcport->login_retry = ha->login_retry_count;
1941 		set_bit(RELOGIN_NEEDED, &ha->dpc_flags);
1942 
1943 		DEBUG(printk("scsi(%ld): Port login retry: "
1944 		    "%02x%02x%02x%02x%02x%02x%02x%02x, "
1945 		    "id = 0x%04x retry cnt=%d\n",
1946 		    ha->host_no,
1947 		    fcport->port_name[0],
1948 		    fcport->port_name[1],
1949 		    fcport->port_name[2],
1950 		    fcport->port_name[3],
1951 		    fcport->port_name[4],
1952 		    fcport->port_name[5],
1953 		    fcport->port_name[6],
1954 		    fcport->port_name[7],
1955 		    fcport->loop_id,
1956 		    fcport->login_retry));
1957 	}
1958 }
1959 
1960 /*
1961  * qla2x00_mark_all_devices_lost
1962  *	Updates fcport state when device goes offline.
1963  *
1964  * Input:
1965  *	ha = adapter block pointer.
1966  *	fcport = port structure pointer.
1967  *
1968  * Return:
1969  *	None.
1970  *
1971  * Context:
1972  */
1973 void
1974 qla2x00_mark_all_devices_lost(scsi_qla_host_t *ha, int defer)
1975 {
1976 	fc_port_t *fcport;
1977 	scsi_qla_host_t *pha = to_qla_parent(ha);
1978 
1979 	list_for_each_entry(fcport, &pha->fcports, list) {
1980 		if (ha->vp_idx != 0 && ha->vp_idx != fcport->vp_idx)
1981 			continue;
1982 		/*
1983 		 * No point in marking the device as lost, if the device is
1984 		 * already DEAD.
1985 		 */
1986 		if (atomic_read(&fcport->state) == FCS_DEVICE_DEAD)
1987 			continue;
1988 		if (atomic_read(&fcport->state) == FCS_ONLINE) {
1989 			if (defer)
1990 				qla2x00_schedule_rport_del(ha, fcport, defer);
1991 			else if (ha->vp_idx == fcport->vp_idx)
1992 				qla2x00_schedule_rport_del(ha, fcport, defer);
1993 		}
1994 		atomic_set(&fcport->state, FCS_DEVICE_LOST);
1995 	}
1996 
1997 	if (defer)
1998 		qla2xxx_wake_dpc(ha);
1999 }
2000 
2001 /*
2002 * qla2x00_mem_alloc
2003 *      Allocates adapter memory.
2004 *
2005 * Returns:
2006 *      0  = success.
2007 *      1  = failure.
2008 */
2009 uint8_t
2010 qla2x00_mem_alloc(scsi_qla_host_t *ha)
2011 {
2012 	char	name[16];
2013 	uint8_t   status = 1;
2014 	int	retry= 10;
2015 
2016 	do {
2017 		/*
2018 		 * This will loop only once if everything goes well, else some
2019 		 * number of retries will be performed to get around a kernel
2020 		 * bug where available mem is not allocated until after a
2021 		 * little delay and a retry.
2022 		 */
2023 		ha->request_ring = dma_alloc_coherent(&ha->pdev->dev,
2024 		    (ha->request_q_length + 1) * sizeof(request_t),
2025 		    &ha->request_dma, GFP_KERNEL);
2026 		if (ha->request_ring == NULL) {
2027 			qla_printk(KERN_WARNING, ha,
2028 			    "Memory Allocation failed - request_ring\n");
2029 
2030 			qla2x00_mem_free(ha);
2031 			msleep(100);
2032 
2033 			continue;
2034 		}
2035 
2036 		ha->response_ring = dma_alloc_coherent(&ha->pdev->dev,
2037 		    (ha->response_q_length + 1) * sizeof(response_t),
2038 		    &ha->response_dma, GFP_KERNEL);
2039 		if (ha->response_ring == NULL) {
2040 			qla_printk(KERN_WARNING, ha,
2041 			    "Memory Allocation failed - response_ring\n");
2042 
2043 			qla2x00_mem_free(ha);
2044 			msleep(100);
2045 
2046 			continue;
2047 		}
2048 
2049 		ha->gid_list = dma_alloc_coherent(&ha->pdev->dev, GID_LIST_SIZE,
2050 		    &ha->gid_list_dma, GFP_KERNEL);
2051 		if (ha->gid_list == NULL) {
2052 			qla_printk(KERN_WARNING, ha,
2053 			    "Memory Allocation failed - gid_list\n");
2054 
2055 			qla2x00_mem_free(ha);
2056 			msleep(100);
2057 
2058 			continue;
2059 		}
2060 
2061 		/* get consistent memory allocated for init control block */
2062 		ha->init_cb = dma_alloc_coherent(&ha->pdev->dev,
2063 		    ha->init_cb_size, &ha->init_cb_dma, GFP_KERNEL);
2064 		if (ha->init_cb == NULL) {
2065 			qla_printk(KERN_WARNING, ha,
2066 			    "Memory Allocation failed - init_cb\n");
2067 
2068 			qla2x00_mem_free(ha);
2069 			msleep(100);
2070 
2071 			continue;
2072 		}
2073 		memset(ha->init_cb, 0, ha->init_cb_size);
2074 
2075 		snprintf(name, sizeof(name), "%s_%ld", QLA2XXX_DRIVER_NAME,
2076 		    ha->host_no);
2077 		ha->s_dma_pool = dma_pool_create(name, &ha->pdev->dev,
2078 		    DMA_POOL_SIZE, 8, 0);
2079 		if (ha->s_dma_pool == NULL) {
2080 			qla_printk(KERN_WARNING, ha,
2081 			    "Memory Allocation failed - s_dma_pool\n");
2082 
2083 			qla2x00_mem_free(ha);
2084 			msleep(100);
2085 
2086 			continue;
2087 		}
2088 
2089 		if (qla2x00_allocate_sp_pool(ha)) {
2090 			qla_printk(KERN_WARNING, ha,
2091 			    "Memory Allocation failed - "
2092 			    "qla2x00_allocate_sp_pool()\n");
2093 
2094 			qla2x00_mem_free(ha);
2095 			msleep(100);
2096 
2097 			continue;
2098 		}
2099 
2100 		/* Allocate memory for SNS commands */
2101 		if (IS_QLA2100(ha) || IS_QLA2200(ha)) {
2102 			/* Get consistent memory allocated for SNS commands */
2103 			ha->sns_cmd = dma_alloc_coherent(&ha->pdev->dev,
2104 			    sizeof(struct sns_cmd_pkt), &ha->sns_cmd_dma,
2105 			    GFP_KERNEL);
2106 			if (ha->sns_cmd == NULL) {
2107 				/* error */
2108 				qla_printk(KERN_WARNING, ha,
2109 				    "Memory Allocation failed - sns_cmd\n");
2110 
2111 				qla2x00_mem_free(ha);
2112 				msleep(100);
2113 
2114 				continue;
2115 			}
2116 			memset(ha->sns_cmd, 0, sizeof(struct sns_cmd_pkt));
2117 		} else {
2118 			/* Get consistent memory allocated for MS IOCB */
2119 			ha->ms_iocb = dma_pool_alloc(ha->s_dma_pool, GFP_KERNEL,
2120 			    &ha->ms_iocb_dma);
2121 			if (ha->ms_iocb == NULL) {
2122 				/* error */
2123 				qla_printk(KERN_WARNING, ha,
2124 				    "Memory Allocation failed - ms_iocb\n");
2125 
2126 				qla2x00_mem_free(ha);
2127 				msleep(100);
2128 
2129 				continue;
2130 			}
2131 			memset(ha->ms_iocb, 0, sizeof(ms_iocb_entry_t));
2132 
2133 			/*
2134 			 * Get consistent memory allocated for CT SNS
2135 			 * commands
2136 			 */
2137 			ha->ct_sns = dma_alloc_coherent(&ha->pdev->dev,
2138 			    sizeof(struct ct_sns_pkt), &ha->ct_sns_dma,
2139 			    GFP_KERNEL);
2140 			if (ha->ct_sns == NULL) {
2141 				/* error */
2142 				qla_printk(KERN_WARNING, ha,
2143 				    "Memory Allocation failed - ct_sns\n");
2144 
2145 				qla2x00_mem_free(ha);
2146 				msleep(100);
2147 
2148 				continue;
2149 			}
2150 			memset(ha->ct_sns, 0, sizeof(struct ct_sns_pkt));
2151 
2152 			if (IS_FWI2_CAPABLE(ha)) {
2153 				/*
2154 				 * Get consistent memory allocated for SFP
2155 				 * block.
2156 				 */
2157 				ha->sfp_data = dma_pool_alloc(ha->s_dma_pool,
2158 				    GFP_KERNEL, &ha->sfp_data_dma);
2159 				if (ha->sfp_data == NULL) {
2160 					qla_printk(KERN_WARNING, ha,
2161 					    "Memory Allocation failed - "
2162 					    "sfp_data\n");
2163 
2164 					qla2x00_mem_free(ha);
2165 					msleep(100);
2166 
2167 					continue;
2168 				}
2169 				memset(ha->sfp_data, 0, SFP_BLOCK_SIZE);
2170 			}
2171 		}
2172 
2173 		/* Get memory for cached NVRAM */
2174 		ha->nvram = kzalloc(MAX_NVRAM_SIZE, GFP_KERNEL);
2175 		if (ha->nvram == NULL) {
2176 			/* error */
2177 			qla_printk(KERN_WARNING, ha,
2178 			    "Memory Allocation failed - nvram cache\n");
2179 
2180 			qla2x00_mem_free(ha);
2181 			msleep(100);
2182 
2183 			continue;
2184 		}
2185 
2186 		/* Done all allocations without any error. */
2187 		status = 0;
2188 
2189 	} while (retry-- && status != 0);
2190 
2191 	if (status) {
2192 		printk(KERN_WARNING
2193 			"%s(): **** FAILED ****\n", __func__);
2194 	}
2195 
2196 	return(status);
2197 }
2198 
2199 /*
2200 * qla2x00_mem_free
2201 *      Frees all adapter allocated memory.
2202 *
2203 * Input:
2204 *      ha = adapter block pointer.
2205 */
2206 void
2207 qla2x00_mem_free(scsi_qla_host_t *ha)
2208 {
2209 	struct list_head	*fcpl, *fcptemp;
2210 	fc_port_t	*fcport;
2211 
2212 	if (ha == NULL) {
2213 		/* error */
2214 		DEBUG2(printk("%s(): ERROR invalid ha pointer.\n", __func__));
2215 		return;
2216 	}
2217 
2218 	/* free sp pool */
2219 	qla2x00_free_sp_pool(ha);
2220 
2221 	if (ha->fw_dump) {
2222 		if (ha->eft)
2223 			dma_free_coherent(&ha->pdev->dev,
2224 			    ntohl(ha->fw_dump->eft_size), ha->eft, ha->eft_dma);
2225 		vfree(ha->fw_dump);
2226 	}
2227 
2228 	if (ha->sns_cmd)
2229 		dma_free_coherent(&ha->pdev->dev, sizeof(struct sns_cmd_pkt),
2230 		    ha->sns_cmd, ha->sns_cmd_dma);
2231 
2232 	if (ha->ct_sns)
2233 		dma_free_coherent(&ha->pdev->dev, sizeof(struct ct_sns_pkt),
2234 		    ha->ct_sns, ha->ct_sns_dma);
2235 
2236 	if (ha->sfp_data)
2237 		dma_pool_free(ha->s_dma_pool, ha->sfp_data, ha->sfp_data_dma);
2238 
2239 	if (ha->ms_iocb)
2240 		dma_pool_free(ha->s_dma_pool, ha->ms_iocb, ha->ms_iocb_dma);
2241 
2242 	if (ha->s_dma_pool)
2243 		dma_pool_destroy(ha->s_dma_pool);
2244 
2245 	if (ha->init_cb)
2246 		dma_free_coherent(&ha->pdev->dev, ha->init_cb_size,
2247 		    ha->init_cb, ha->init_cb_dma);
2248 
2249 	if (ha->gid_list)
2250 		dma_free_coherent(&ha->pdev->dev, GID_LIST_SIZE, ha->gid_list,
2251 		    ha->gid_list_dma);
2252 
2253 	if (ha->response_ring)
2254 		dma_free_coherent(&ha->pdev->dev,
2255 		    (ha->response_q_length + 1) * sizeof(response_t),
2256 		    ha->response_ring, ha->response_dma);
2257 
2258 	if (ha->request_ring)
2259 		dma_free_coherent(&ha->pdev->dev,
2260 		    (ha->request_q_length + 1) * sizeof(request_t),
2261 		    ha->request_ring, ha->request_dma);
2262 
2263 	ha->eft = NULL;
2264 	ha->eft_dma = 0;
2265 	ha->sns_cmd = NULL;
2266 	ha->sns_cmd_dma = 0;
2267 	ha->ct_sns = NULL;
2268 	ha->ct_sns_dma = 0;
2269 	ha->ms_iocb = NULL;
2270 	ha->ms_iocb_dma = 0;
2271 	ha->init_cb = NULL;
2272 	ha->init_cb_dma = 0;
2273 
2274 	ha->s_dma_pool = NULL;
2275 
2276 	ha->gid_list = NULL;
2277 	ha->gid_list_dma = 0;
2278 
2279 	ha->response_ring = NULL;
2280 	ha->response_dma = 0;
2281 	ha->request_ring = NULL;
2282 	ha->request_dma = 0;
2283 
2284 	list_for_each_safe(fcpl, fcptemp, &ha->fcports) {
2285 		fcport = list_entry(fcpl, fc_port_t, list);
2286 
2287 		/* fc ports */
2288 		list_del_init(&fcport->list);
2289 		kfree(fcport);
2290 	}
2291 	INIT_LIST_HEAD(&ha->fcports);
2292 
2293 	ha->fw_dump = NULL;
2294 	ha->fw_dumped = 0;
2295 	ha->fw_dump_reading = 0;
2296 
2297 	vfree(ha->optrom_buffer);
2298 	kfree(ha->nvram);
2299 }
2300 
2301 /*
2302  * qla2x00_allocate_sp_pool
2303  * 	 This routine is called during initialization to allocate
2304  *  	 memory for local srb_t.
2305  *
2306  * Input:
2307  *	 ha   = adapter block pointer.
2308  *
2309  * Context:
2310  *      Kernel context.
2311  */
2312 static int
2313 qla2x00_allocate_sp_pool(scsi_qla_host_t *ha)
2314 {
2315 	int      rval;
2316 
2317 	rval = QLA_SUCCESS;
2318 	ha->srb_mempool = mempool_create_slab_pool(SRB_MIN_REQ, srb_cachep);
2319 	if (ha->srb_mempool == NULL) {
2320 		qla_printk(KERN_INFO, ha, "Unable to allocate SRB mempool.\n");
2321 		rval = QLA_FUNCTION_FAILED;
2322 	}
2323 	return (rval);
2324 }
2325 
2326 /*
2327  *  This routine frees all adapter allocated memory.
2328  *
2329  */
2330 static void
2331 qla2x00_free_sp_pool( scsi_qla_host_t *ha)
2332 {
2333 	if (ha->srb_mempool) {
2334 		mempool_destroy(ha->srb_mempool);
2335 		ha->srb_mempool = NULL;
2336 	}
2337 }
2338 
2339 /**************************************************************************
2340 * qla2x00_do_dpc
2341 *   This kernel thread is a task that is schedule by the interrupt handler
2342 *   to perform the background processing for interrupts.
2343 *
2344 * Notes:
2345 * This task always run in the context of a kernel thread.  It
2346 * is kick-off by the driver's detect code and starts up
2347 * up one per adapter. It immediately goes to sleep and waits for
2348 * some fibre event.  When either the interrupt handler or
2349 * the timer routine detects a event it will one of the task
2350 * bits then wake us up.
2351 **************************************************************************/
2352 static int
2353 qla2x00_do_dpc(void *data)
2354 {
2355 	int		rval;
2356 	scsi_qla_host_t *ha;
2357 	fc_port_t	*fcport;
2358 	uint8_t		status;
2359 	uint16_t	next_loopid;
2360 
2361 	ha = (scsi_qla_host_t *)data;
2362 
2363 	set_user_nice(current, -20);
2364 
2365 	while (!kthread_should_stop()) {
2366 		DEBUG3(printk("qla2x00: DPC handler sleeping\n"));
2367 
2368 		set_current_state(TASK_INTERRUPTIBLE);
2369 		schedule();
2370 		__set_current_state(TASK_RUNNING);
2371 
2372 		DEBUG3(printk("qla2x00: DPC handler waking up\n"));
2373 
2374 		/* Initialization not yet finished. Don't do anything yet. */
2375 		if (!ha->flags.init_done)
2376 			continue;
2377 
2378 		DEBUG3(printk("scsi(%ld): DPC handler\n", ha->host_no));
2379 
2380 		ha->dpc_active = 1;
2381 
2382 		if (ha->flags.mbox_busy) {
2383 			ha->dpc_active = 0;
2384 			continue;
2385 		}
2386 
2387 		if (test_and_clear_bit(ISP_ABORT_NEEDED, &ha->dpc_flags)) {
2388 
2389 			DEBUG(printk("scsi(%ld): dpc: sched "
2390 			    "qla2x00_abort_isp ha = %p\n",
2391 			    ha->host_no, ha));
2392 			if (!(test_and_set_bit(ABORT_ISP_ACTIVE,
2393 			    &ha->dpc_flags))) {
2394 
2395 				if (qla2x00_abort_isp(ha)) {
2396 					/* failed. retry later */
2397 					set_bit(ISP_ABORT_NEEDED,
2398 					    &ha->dpc_flags);
2399 				}
2400 				clear_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags);
2401 			}
2402 			DEBUG(printk("scsi(%ld): dpc: qla2x00_abort_isp end\n",
2403 			    ha->host_no));
2404 		}
2405 
2406 		if (test_and_clear_bit(FCPORT_UPDATE_NEEDED, &ha->dpc_flags))
2407 			qla2x00_update_fcports(ha);
2408 
2409 		if (test_and_clear_bit(LOOP_RESET_NEEDED, &ha->dpc_flags)) {
2410 			DEBUG(printk("scsi(%ld): dpc: sched loop_reset()\n",
2411 			    ha->host_no));
2412 			qla2x00_loop_reset(ha);
2413 		}
2414 
2415 		if (test_and_clear_bit(RESET_MARKER_NEEDED, &ha->dpc_flags) &&
2416 		    (!(test_and_set_bit(RESET_ACTIVE, &ha->dpc_flags)))) {
2417 
2418 			DEBUG(printk("scsi(%ld): qla2x00_reset_marker()\n",
2419 			    ha->host_no));
2420 
2421 			qla2x00_rst_aen(ha);
2422 			clear_bit(RESET_ACTIVE, &ha->dpc_flags);
2423 		}
2424 
2425 		/* Retry each device up to login retry count */
2426 		if ((test_and_clear_bit(RELOGIN_NEEDED, &ha->dpc_flags)) &&
2427 		    !test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags) &&
2428 		    atomic_read(&ha->loop_state) != LOOP_DOWN) {
2429 
2430 			DEBUG(printk("scsi(%ld): qla2x00_port_login()\n",
2431 			    ha->host_no));
2432 
2433 			next_loopid = 0;
2434 			list_for_each_entry(fcport, &ha->fcports, list) {
2435 				/*
2436 				 * If the port is not ONLINE then try to login
2437 				 * to it if we haven't run out of retries.
2438 				 */
2439 				if (atomic_read(&fcport->state) != FCS_ONLINE &&
2440 				    fcport->login_retry) {
2441 
2442 					if (fcport->flags & FCF_FABRIC_DEVICE) {
2443 						if (fcport->flags &
2444 						    FCF_TAPE_PRESENT)
2445 							ha->isp_ops->fabric_logout(
2446 							    ha, fcport->loop_id,
2447 							    fcport->d_id.b.domain,
2448 							    fcport->d_id.b.area,
2449 							    fcport->d_id.b.al_pa);
2450 						status = qla2x00_fabric_login(
2451 						    ha, fcport, &next_loopid);
2452 					} else
2453 						status =
2454 						    qla2x00_local_device_login(
2455 							ha, fcport);
2456 
2457 					fcport->login_retry--;
2458 					if (status == QLA_SUCCESS) {
2459 						fcport->old_loop_id = fcport->loop_id;
2460 
2461 						DEBUG(printk("scsi(%ld): port login OK: logged in ID 0x%x\n",
2462 						    ha->host_no, fcport->loop_id));
2463 
2464 						qla2x00_update_fcport(ha,
2465 						    fcport);
2466 					} else if (status == 1) {
2467 						set_bit(RELOGIN_NEEDED, &ha->dpc_flags);
2468 						/* retry the login again */
2469 						DEBUG(printk("scsi(%ld): Retrying %d login again loop_id 0x%x\n",
2470 						    ha->host_no,
2471 						    fcport->login_retry, fcport->loop_id));
2472 					} else {
2473 						fcport->login_retry = 0;
2474 					}
2475 					if (fcport->login_retry == 0)
2476 						fcport->loop_id = FC_NO_LOOP_ID;
2477 				}
2478 				if (test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags))
2479 					break;
2480 			}
2481 			DEBUG(printk("scsi(%ld): qla2x00_port_login - end\n",
2482 			    ha->host_no));
2483 		}
2484 
2485 		if ((test_bit(LOGIN_RETRY_NEEDED, &ha->dpc_flags)) &&
2486 		    atomic_read(&ha->loop_state) != LOOP_DOWN) {
2487 
2488 			clear_bit(LOGIN_RETRY_NEEDED, &ha->dpc_flags);
2489 			DEBUG(printk("scsi(%ld): qla2x00_login_retry()\n",
2490 			    ha->host_no));
2491 
2492 			set_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags);
2493 
2494 			DEBUG(printk("scsi(%ld): qla2x00_login_retry - end\n",
2495 			    ha->host_no));
2496 		}
2497 
2498 		if (test_and_clear_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags)) {
2499 
2500 			DEBUG(printk("scsi(%ld): qla2x00_loop_resync()\n",
2501 			    ha->host_no));
2502 
2503 			if (!(test_and_set_bit(LOOP_RESYNC_ACTIVE,
2504 			    &ha->dpc_flags))) {
2505 
2506 				rval = qla2x00_loop_resync(ha);
2507 
2508 				clear_bit(LOOP_RESYNC_ACTIVE, &ha->dpc_flags);
2509 			}
2510 
2511 			DEBUG(printk("scsi(%ld): qla2x00_loop_resync - end\n",
2512 			    ha->host_no));
2513 		}
2514 
2515 		if (test_and_clear_bit(FCPORT_RESCAN_NEEDED, &ha->dpc_flags)) {
2516 
2517 			DEBUG(printk("scsi(%ld): Rescan flagged fcports...\n",
2518 			    ha->host_no));
2519 
2520 			qla2x00_rescan_fcports(ha);
2521 
2522 			DEBUG(printk("scsi(%ld): Rescan flagged fcports..."
2523 			    "end.\n",
2524 			    ha->host_no));
2525 		}
2526 
2527 		if (!ha->interrupts_on)
2528 			ha->isp_ops->enable_intrs(ha);
2529 
2530 		if (test_and_clear_bit(BEACON_BLINK_NEEDED, &ha->dpc_flags))
2531 			ha->isp_ops->beacon_blink(ha);
2532 
2533 		qla2x00_do_dpc_all_vps(ha);
2534 
2535 		ha->dpc_active = 0;
2536 	} /* End of while(1) */
2537 
2538 	DEBUG(printk("scsi(%ld): DPC handler exiting\n", ha->host_no));
2539 
2540 	/*
2541 	 * Make sure that nobody tries to wake us up again.
2542 	 */
2543 	ha->dpc_active = 0;
2544 
2545 	return 0;
2546 }
2547 
2548 void
2549 qla2xxx_wake_dpc(scsi_qla_host_t *ha)
2550 {
2551 	if (ha->dpc_thread)
2552 		wake_up_process(ha->dpc_thread);
2553 }
2554 
2555 /*
2556 *  qla2x00_rst_aen
2557 *      Processes asynchronous reset.
2558 *
2559 * Input:
2560 *      ha  = adapter block pointer.
2561 */
2562 static void
2563 qla2x00_rst_aen(scsi_qla_host_t *ha)
2564 {
2565 	if (ha->flags.online && !ha->flags.reset_active &&
2566 	    !atomic_read(&ha->loop_down_timer) &&
2567 	    !(test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags))) {
2568 		do {
2569 			clear_bit(RESET_MARKER_NEEDED, &ha->dpc_flags);
2570 
2571 			/*
2572 			 * Issue marker command only when we are going to start
2573 			 * the I/O.
2574 			 */
2575 			ha->marker_needed = 1;
2576 		} while (!atomic_read(&ha->loop_down_timer) &&
2577 		    (test_bit(RESET_MARKER_NEEDED, &ha->dpc_flags)));
2578 	}
2579 }
2580 
2581 static void
2582 qla2x00_sp_free_dma(scsi_qla_host_t *ha, srb_t *sp)
2583 {
2584 	struct scsi_cmnd *cmd = sp->cmd;
2585 
2586 	if (sp->flags & SRB_DMA_VALID) {
2587 		scsi_dma_unmap(cmd);
2588 		sp->flags &= ~SRB_DMA_VALID;
2589 	}
2590 	CMD_SP(cmd) = NULL;
2591 }
2592 
2593 void
2594 qla2x00_sp_compl(scsi_qla_host_t *ha, srb_t *sp)
2595 {
2596 	struct scsi_cmnd *cmd = sp->cmd;
2597 
2598 	qla2x00_sp_free_dma(ha, sp);
2599 
2600 	mempool_free(sp, ha->srb_mempool);
2601 
2602 	cmd->scsi_done(cmd);
2603 }
2604 
2605 /**************************************************************************
2606 *   qla2x00_timer
2607 *
2608 * Description:
2609 *   One second timer
2610 *
2611 * Context: Interrupt
2612 ***************************************************************************/
2613 void
2614 qla2x00_timer(scsi_qla_host_t *ha)
2615 {
2616 	unsigned long	cpu_flags = 0;
2617 	fc_port_t	*fcport;
2618 	int		start_dpc = 0;
2619 	int		index;
2620 	srb_t		*sp;
2621 	int		t;
2622 	scsi_qla_host_t *pha = to_qla_parent(ha);
2623 
2624 	/*
2625 	 * Ports - Port down timer.
2626 	 *
2627 	 * Whenever, a port is in the LOST state we start decrementing its port
2628 	 * down timer every second until it reaches zero. Once  it reaches zero
2629 	 * the port it marked DEAD.
2630 	 */
2631 	t = 0;
2632 	list_for_each_entry(fcport, &ha->fcports, list) {
2633 		if (fcport->port_type != FCT_TARGET)
2634 			continue;
2635 
2636 		if (atomic_read(&fcport->state) == FCS_DEVICE_LOST) {
2637 
2638 			if (atomic_read(&fcport->port_down_timer) == 0)
2639 				continue;
2640 
2641 			if (atomic_dec_and_test(&fcport->port_down_timer) != 0)
2642 				atomic_set(&fcport->state, FCS_DEVICE_DEAD);
2643 
2644 			DEBUG(printk("scsi(%ld): fcport-%d - port retry count: "
2645 			    "%d remaining\n",
2646 			    ha->host_no,
2647 			    t, atomic_read(&fcport->port_down_timer)));
2648 		}
2649 		t++;
2650 	} /* End of for fcport  */
2651 
2652 
2653 	/* Loop down handler. */
2654 	if (atomic_read(&ha->loop_down_timer) > 0 &&
2655 	    !(test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags)) && ha->flags.online) {
2656 
2657 		if (atomic_read(&ha->loop_down_timer) ==
2658 		    ha->loop_down_abort_time) {
2659 
2660 			DEBUG(printk("scsi(%ld): Loop Down - aborting the "
2661 			    "queues before time expire\n",
2662 			    ha->host_no));
2663 
2664 			if (!IS_QLA2100(ha) && ha->link_down_timeout)
2665 				atomic_set(&ha->loop_state, LOOP_DEAD);
2666 
2667 			/* Schedule an ISP abort to return any tape commands. */
2668 			/* NPIV - scan physical port only */
2669 			if (!ha->parent) {
2670 				spin_lock_irqsave(&ha->hardware_lock,
2671 				    cpu_flags);
2672 				for (index = 1;
2673 				    index < MAX_OUTSTANDING_COMMANDS;
2674 				    index++) {
2675 					fc_port_t *sfcp;
2676 
2677 					sp = ha->outstanding_cmds[index];
2678 					if (!sp)
2679 						continue;
2680 					sfcp = sp->fcport;
2681 					if (!(sfcp->flags & FCF_TAPE_PRESENT))
2682 						continue;
2683 
2684 					set_bit(ISP_ABORT_NEEDED,
2685 					    &ha->dpc_flags);
2686 					break;
2687 				}
2688 				spin_unlock_irqrestore(&ha->hardware_lock,
2689 				    cpu_flags);
2690 			}
2691 			set_bit(ABORT_QUEUES_NEEDED, &ha->dpc_flags);
2692 			start_dpc++;
2693 		}
2694 
2695 		/* if the loop has been down for 4 minutes, reinit adapter */
2696 		if (atomic_dec_and_test(&ha->loop_down_timer) != 0) {
2697 			DEBUG(printk("scsi(%ld): Loop down exceed 4 mins - "
2698 			    "restarting queues.\n",
2699 			    ha->host_no));
2700 
2701 			set_bit(RESTART_QUEUES_NEEDED, &ha->dpc_flags);
2702 			start_dpc++;
2703 
2704 			if (!(ha->device_flags & DFLG_NO_CABLE)) {
2705 				DEBUG(printk("scsi(%ld): Loop down - "
2706 				    "aborting ISP.\n",
2707 				    ha->host_no));
2708 				qla_printk(KERN_WARNING, ha,
2709 				    "Loop down - aborting ISP.\n");
2710 
2711 				set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
2712 			}
2713 		}
2714 		DEBUG3(printk("scsi(%ld): Loop Down - seconds remaining %d\n",
2715 		    ha->host_no,
2716 		    atomic_read(&ha->loop_down_timer)));
2717 	}
2718 
2719 	/* Check if beacon LED needs to be blinked */
2720 	if (ha->beacon_blink_led == 1) {
2721 		set_bit(BEACON_BLINK_NEEDED, &ha->dpc_flags);
2722 		start_dpc++;
2723 	}
2724 
2725 	/* Schedule the DPC routine if needed */
2726 	if ((test_bit(ISP_ABORT_NEEDED, &ha->dpc_flags) ||
2727 	    test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags) ||
2728 	    test_bit(LOOP_RESET_NEEDED, &ha->dpc_flags) ||
2729 	    test_bit(FCPORT_UPDATE_NEEDED, &ha->dpc_flags) ||
2730 	    start_dpc ||
2731 	    test_bit(LOGIN_RETRY_NEEDED, &ha->dpc_flags) ||
2732 	    test_bit(RESET_MARKER_NEEDED, &ha->dpc_flags) ||
2733 	    test_bit(BEACON_BLINK_NEEDED, &ha->dpc_flags) ||
2734 	    test_bit(VP_DPC_NEEDED, &ha->dpc_flags) ||
2735 	    test_bit(RELOGIN_NEEDED, &ha->dpc_flags)))
2736 		qla2xxx_wake_dpc(pha);
2737 
2738 	qla2x00_restart_timer(ha, WATCH_INTERVAL);
2739 }
2740 
2741 /* XXX(hch): crude hack to emulate a down_timeout() */
2742 int
2743 qla2x00_down_timeout(struct semaphore *sema, unsigned long timeout)
2744 {
2745 	const unsigned int step = 100; /* msecs */
2746 	unsigned int iterations = jiffies_to_msecs(timeout)/100;
2747 
2748 	do {
2749 		if (!down_trylock(sema))
2750 			return 0;
2751 		if (msleep_interruptible(step))
2752 			break;
2753 	} while (--iterations > 0);
2754 
2755 	return -ETIMEDOUT;
2756 }
2757 
2758 /* Firmware interface routines. */
2759 
2760 #define FW_BLOBS	6
2761 #define FW_ISP21XX	0
2762 #define FW_ISP22XX	1
2763 #define FW_ISP2300	2
2764 #define FW_ISP2322	3
2765 #define FW_ISP24XX	4
2766 #define FW_ISP25XX	5
2767 
2768 #define FW_FILE_ISP21XX	"ql2100_fw.bin"
2769 #define FW_FILE_ISP22XX	"ql2200_fw.bin"
2770 #define FW_FILE_ISP2300	"ql2300_fw.bin"
2771 #define FW_FILE_ISP2322	"ql2322_fw.bin"
2772 #define FW_FILE_ISP24XX	"ql2400_fw.bin"
2773 #define FW_FILE_ISP25XX	"ql2500_fw.bin"
2774 
2775 static DECLARE_MUTEX(qla_fw_lock);
2776 
2777 static struct fw_blob qla_fw_blobs[FW_BLOBS] = {
2778 	{ .name = FW_FILE_ISP21XX, .segs = { 0x1000, 0 }, },
2779 	{ .name = FW_FILE_ISP22XX, .segs = { 0x1000, 0 }, },
2780 	{ .name = FW_FILE_ISP2300, .segs = { 0x800, 0 }, },
2781 	{ .name = FW_FILE_ISP2322, .segs = { 0x800, 0x1c000, 0x1e000, 0 }, },
2782 	{ .name = FW_FILE_ISP24XX, },
2783 	{ .name = FW_FILE_ISP25XX, },
2784 };
2785 
2786 struct fw_blob *
2787 qla2x00_request_firmware(scsi_qla_host_t *ha)
2788 {
2789 	struct fw_blob *blob;
2790 
2791 	blob = NULL;
2792 	if (IS_QLA2100(ha)) {
2793 		blob = &qla_fw_blobs[FW_ISP21XX];
2794 	} else if (IS_QLA2200(ha)) {
2795 		blob = &qla_fw_blobs[FW_ISP22XX];
2796 	} else if (IS_QLA2300(ha) || IS_QLA2312(ha) || IS_QLA6312(ha)) {
2797 		blob = &qla_fw_blobs[FW_ISP2300];
2798 	} else if (IS_QLA2322(ha) || IS_QLA6322(ha)) {
2799 		blob = &qla_fw_blobs[FW_ISP2322];
2800 	} else if (IS_QLA24XX(ha) || IS_QLA54XX(ha)) {
2801 		blob = &qla_fw_blobs[FW_ISP24XX];
2802 	} else if (IS_QLA25XX(ha)) {
2803 		blob = &qla_fw_blobs[FW_ISP25XX];
2804 	}
2805 
2806 	down(&qla_fw_lock);
2807 	if (blob->fw)
2808 		goto out;
2809 
2810 	if (request_firmware(&blob->fw, blob->name, &ha->pdev->dev)) {
2811 		DEBUG2(printk("scsi(%ld): Failed to load firmware image "
2812 		    "(%s).\n", ha->host_no, blob->name));
2813 		blob->fw = NULL;
2814 		blob = NULL;
2815 		goto out;
2816 	}
2817 
2818 out:
2819 	up(&qla_fw_lock);
2820 	return blob;
2821 }
2822 
2823 static void
2824 qla2x00_release_firmware(void)
2825 {
2826 	int idx;
2827 
2828 	down(&qla_fw_lock);
2829 	for (idx = 0; idx < FW_BLOBS; idx++)
2830 		if (qla_fw_blobs[idx].fw)
2831 			release_firmware(qla_fw_blobs[idx].fw);
2832 	up(&qla_fw_lock);
2833 }
2834 
2835 static pci_ers_result_t
2836 qla2xxx_pci_error_detected(struct pci_dev *pdev, pci_channel_state_t state)
2837 {
2838 	switch (state) {
2839 	case pci_channel_io_normal:
2840 		return PCI_ERS_RESULT_CAN_RECOVER;
2841 	case pci_channel_io_frozen:
2842 		pci_disable_device(pdev);
2843 		return PCI_ERS_RESULT_NEED_RESET;
2844 	case pci_channel_io_perm_failure:
2845 		qla2x00_remove_one(pdev);
2846 		return PCI_ERS_RESULT_DISCONNECT;
2847 	}
2848 	return PCI_ERS_RESULT_NEED_RESET;
2849 }
2850 
2851 static pci_ers_result_t
2852 qla2xxx_pci_mmio_enabled(struct pci_dev *pdev)
2853 {
2854 	int risc_paused = 0;
2855 	uint32_t stat;
2856 	unsigned long flags;
2857 	scsi_qla_host_t *ha = pci_get_drvdata(pdev);
2858 	struct device_reg_2xxx __iomem *reg = &ha->iobase->isp;
2859 	struct device_reg_24xx __iomem *reg24 = &ha->iobase->isp24;
2860 
2861 	spin_lock_irqsave(&ha->hardware_lock, flags);
2862 	if (IS_QLA2100(ha) || IS_QLA2200(ha)){
2863 		stat = RD_REG_DWORD(&reg->hccr);
2864 		if (stat & HCCR_RISC_PAUSE)
2865 			risc_paused = 1;
2866 	} else if (IS_QLA23XX(ha)) {
2867 		stat = RD_REG_DWORD(&reg->u.isp2300.host_status);
2868 		if (stat & HSR_RISC_PAUSED)
2869 			risc_paused = 1;
2870 	} else if (IS_FWI2_CAPABLE(ha)) {
2871 		stat = RD_REG_DWORD(&reg24->host_status);
2872 		if (stat & HSRX_RISC_PAUSED)
2873 			risc_paused = 1;
2874 	}
2875 	spin_unlock_irqrestore(&ha->hardware_lock, flags);
2876 
2877 	if (risc_paused) {
2878 		qla_printk(KERN_INFO, ha, "RISC paused -- mmio_enabled, "
2879 		    "Dumping firmware!\n");
2880 		ha->isp_ops->fw_dump(ha, 0);
2881 
2882 		return PCI_ERS_RESULT_NEED_RESET;
2883 	} else
2884 		return PCI_ERS_RESULT_RECOVERED;
2885 }
2886 
2887 static pci_ers_result_t
2888 qla2xxx_pci_slot_reset(struct pci_dev *pdev)
2889 {
2890 	pci_ers_result_t ret = PCI_ERS_RESULT_DISCONNECT;
2891 	scsi_qla_host_t *ha = pci_get_drvdata(pdev);
2892 
2893 	if (pci_enable_device(pdev)) {
2894 		qla_printk(KERN_WARNING, ha,
2895 		    "Can't re-enable PCI device after reset.\n");
2896 
2897 		return ret;
2898 	}
2899 	pci_set_master(pdev);
2900 
2901 	if (ha->isp_ops->pci_config(ha))
2902 		return ret;
2903 
2904 	set_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags);
2905 	if (qla2x00_abort_isp(ha)== QLA_SUCCESS)
2906 		ret =  PCI_ERS_RESULT_RECOVERED;
2907 	clear_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags);
2908 
2909 	return ret;
2910 }
2911 
2912 static void
2913 qla2xxx_pci_resume(struct pci_dev *pdev)
2914 {
2915 	scsi_qla_host_t *ha = pci_get_drvdata(pdev);
2916 	int ret;
2917 
2918 	ret = qla2x00_wait_for_hba_online(ha);
2919 	if (ret != QLA_SUCCESS) {
2920 		qla_printk(KERN_ERR, ha,
2921 		    "the device failed to resume I/O "
2922 		    "from slot/link_reset");
2923 	}
2924 	pci_cleanup_aer_uncorrect_error_status(pdev);
2925 }
2926 
2927 static struct pci_error_handlers qla2xxx_err_handler = {
2928 	.error_detected = qla2xxx_pci_error_detected,
2929 	.mmio_enabled = qla2xxx_pci_mmio_enabled,
2930 	.slot_reset = qla2xxx_pci_slot_reset,
2931 	.resume = qla2xxx_pci_resume,
2932 };
2933 
2934 static struct pci_device_id qla2xxx_pci_tbl[] = {
2935 	{ PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2100) },
2936 	{ PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2200) },
2937 	{ PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2300) },
2938 	{ PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2312) },
2939 	{ PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2322) },
2940 	{ PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP6312) },
2941 	{ PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP6322) },
2942 	{ PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2422) },
2943 	{ PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2432) },
2944 	{ PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP5422) },
2945 	{ PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP5432) },
2946 	{ PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, PCI_DEVICE_ID_QLOGIC_ISP2532) },
2947 	{ 0 },
2948 };
2949 MODULE_DEVICE_TABLE(pci, qla2xxx_pci_tbl);
2950 
2951 static struct pci_driver qla2xxx_pci_driver = {
2952 	.name		= QLA2XXX_DRIVER_NAME,
2953 	.driver		= {
2954 		.owner		= THIS_MODULE,
2955 	},
2956 	.id_table	= qla2xxx_pci_tbl,
2957 	.probe		= qla2x00_probe_one,
2958 	.remove		= __devexit_p(qla2x00_remove_one),
2959 	.err_handler	= &qla2xxx_err_handler,
2960 };
2961 
2962 /**
2963  * qla2x00_module_init - Module initialization.
2964  **/
2965 static int __init
2966 qla2x00_module_init(void)
2967 {
2968 	int ret = 0;
2969 
2970 	/* Allocate cache for SRBs. */
2971 	srb_cachep = kmem_cache_create("qla2xxx_srbs", sizeof(srb_t), 0,
2972 	    SLAB_HWCACHE_ALIGN, NULL);
2973 	if (srb_cachep == NULL) {
2974 		printk(KERN_ERR
2975 		    "qla2xxx: Unable to allocate SRB cache...Failing load!\n");
2976 		return -ENOMEM;
2977 	}
2978 
2979 	/* Derive version string. */
2980 	strcpy(qla2x00_version_str, QLA2XXX_VERSION);
2981 	if (ql2xextended_error_logging)
2982 		strcat(qla2x00_version_str, "-debug");
2983 
2984 	qla2xxx_transport_template =
2985 	    fc_attach_transport(&qla2xxx_transport_functions);
2986 	if (!qla2xxx_transport_template) {
2987 		kmem_cache_destroy(srb_cachep);
2988 		return -ENODEV;
2989 	}
2990 	qla2xxx_transport_vport_template =
2991 	    fc_attach_transport(&qla2xxx_transport_vport_functions);
2992 	if (!qla2xxx_transport_vport_template) {
2993 		kmem_cache_destroy(srb_cachep);
2994 		fc_release_transport(qla2xxx_transport_template);
2995 		return -ENODEV;
2996 	}
2997 
2998 	printk(KERN_INFO "QLogic Fibre Channel HBA Driver\n");
2999 	ret = pci_register_driver(&qla2xxx_pci_driver);
3000 	if (ret) {
3001 		kmem_cache_destroy(srb_cachep);
3002 		fc_release_transport(qla2xxx_transport_template);
3003 		fc_release_transport(qla2xxx_transport_vport_template);
3004 	}
3005 	return ret;
3006 }
3007 
3008 /**
3009  * qla2x00_module_exit - Module cleanup.
3010  **/
3011 static void __exit
3012 qla2x00_module_exit(void)
3013 {
3014 	pci_unregister_driver(&qla2xxx_pci_driver);
3015 	qla2x00_release_firmware();
3016 	kmem_cache_destroy(srb_cachep);
3017 	fc_release_transport(qla2xxx_transport_template);
3018 	fc_release_transport(qla2xxx_transport_vport_template);
3019 }
3020 
3021 module_init(qla2x00_module_init);
3022 module_exit(qla2x00_module_exit);
3023 
3024 MODULE_AUTHOR("QLogic Corporation");
3025 MODULE_DESCRIPTION("QLogic Fibre Channel HBA Driver");
3026 MODULE_LICENSE("GPL");
3027 MODULE_VERSION(QLA2XXX_VERSION);
3028 MODULE_FIRMWARE(FW_FILE_ISP21XX);
3029 MODULE_FIRMWARE(FW_FILE_ISP22XX);
3030 MODULE_FIRMWARE(FW_FILE_ISP2300);
3031 MODULE_FIRMWARE(FW_FILE_ISP2322);
3032 MODULE_FIRMWARE(FW_FILE_ISP24XX);
3033