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