xref: /linux/drivers/scsi/qla2xxx/qla_os.c (revision 60b2737de1b1ddfdb90f3ba622634eb49d6f3603)
1 /*
2  *                  QLOGIC LINUX SOFTWARE
3  *
4  * QLogic ISP2x00 device driver for Linux 2.6.x
5  * Copyright (C) 2003-2004 QLogic Corporation
6  * (www.qlogic.com)
7  *
8  * This program is free software; you can redistribute it and/or modify it
9  * under the terms of the GNU General Public License as published by the
10  * Free Software Foundation; either version 2, or (at your option) any
11  * later version.
12  *
13  * This program is distributed in the hope that it will be useful, but
14  * WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16  * General Public License for more details.
17  *
18  */
19 #include "qla_def.h"
20 
21 #include <linux/moduleparam.h>
22 #include <linux/vmalloc.h>
23 #include <linux/smp_lock.h>
24 #include <linux/delay.h>
25 
26 #include <scsi/scsi_tcq.h>
27 #include <scsi/scsicam.h>
28 #include <scsi/scsi_transport.h>
29 #include <scsi/scsi_transport_fc.h>
30 
31 /*
32  * Driver version
33  */
34 char qla2x00_version_str[40];
35 
36 /*
37  * SRB allocation cache
38  */
39 static kmem_cache_t *srb_cachep;
40 
41 /*
42  * Ioctl related information.
43  */
44 static int num_hosts;
45 
46 int ql2xlogintimeout = 20;
47 module_param(ql2xlogintimeout, int, S_IRUGO|S_IRUSR);
48 MODULE_PARM_DESC(ql2xlogintimeout,
49 		"Login timeout value in seconds.");
50 
51 int qlport_down_retry = 30;
52 module_param(qlport_down_retry, int, S_IRUGO|S_IRUSR);
53 MODULE_PARM_DESC(qlport_down_retry,
54 		"Maximum number of command retries to a port that returns"
55 		"a PORT-DOWN status.");
56 
57 int ql2xplogiabsentdevice;
58 module_param(ql2xplogiabsentdevice, int, S_IRUGO|S_IWUSR);
59 MODULE_PARM_DESC(ql2xplogiabsentdevice,
60 		"Option to enable PLOGI to devices that are not present after "
61 		"a Fabric scan.  This is needed for several broken switches."
62 		"Default is 0 - no PLOGI. 1 - perfom PLOGI.");
63 
64 int ql2xenablezio = 0;
65 module_param(ql2xenablezio, int, S_IRUGO|S_IRUSR);
66 MODULE_PARM_DESC(ql2xenablezio,
67 		"Option to enable ZIO:If 1 then enable it otherwise"
68 		" use the default set in the NVRAM."
69 		" Default is 0 : disabled");
70 
71 int ql2xintrdelaytimer = 10;
72 module_param(ql2xintrdelaytimer, int, S_IRUGO|S_IRUSR);
73 MODULE_PARM_DESC(ql2xintrdelaytimer,
74 		"ZIO: Waiting time for Firmware before it generates an "
75 		"interrupt to the host to notify completion of request.");
76 
77 int ql2xloginretrycount = 0;
78 module_param(ql2xloginretrycount, int, S_IRUGO|S_IRUSR);
79 MODULE_PARM_DESC(ql2xloginretrycount,
80 		"Specify an alternate value for the NVRAM login retry count.");
81 
82 static void qla2x00_free_device(scsi_qla_host_t *);
83 
84 static void qla2x00_config_dma_addressing(scsi_qla_host_t *ha);
85 
86 /*
87  * SCSI host template entry points
88  */
89 static int qla2xxx_slave_configure(struct scsi_device * device);
90 static int qla2xxx_slave_alloc(struct scsi_device *);
91 static void qla2xxx_slave_destroy(struct scsi_device *);
92 static int qla2x00_queuecommand(struct scsi_cmnd *cmd,
93 		void (*fn)(struct scsi_cmnd *));
94 static int qla2xxx_eh_abort(struct scsi_cmnd *);
95 static int qla2xxx_eh_device_reset(struct scsi_cmnd *);
96 static int qla2xxx_eh_bus_reset(struct scsi_cmnd *);
97 static int qla2xxx_eh_host_reset(struct scsi_cmnd *);
98 static int qla2x00_loop_reset(scsi_qla_host_t *ha);
99 static int qla2x00_device_reset(scsi_qla_host_t *, fc_port_t *);
100 
101 static struct scsi_host_template qla2x00_driver_template = {
102 	.module			= THIS_MODULE,
103 	.name			= "qla2xxx",
104 	.queuecommand		= qla2x00_queuecommand,
105 
106 	.eh_abort_handler	= qla2xxx_eh_abort,
107 	.eh_device_reset_handler = qla2xxx_eh_device_reset,
108 	.eh_bus_reset_handler	= qla2xxx_eh_bus_reset,
109 	.eh_host_reset_handler	= qla2xxx_eh_host_reset,
110 
111 	.slave_configure	= qla2xxx_slave_configure,
112 
113 	.slave_alloc		= qla2xxx_slave_alloc,
114 	.slave_destroy		= qla2xxx_slave_destroy,
115 	.this_id		= -1,
116 	.cmd_per_lun		= 3,
117 	.use_clustering		= ENABLE_CLUSTERING,
118 	.sg_tablesize		= SG_ALL,
119 
120 	/*
121 	 * The RISC allows for each command to transfer (2^32-1) bytes of data,
122 	 * which equates to 0x800000 sectors.
123 	 */
124 	.max_sectors		= 0xFFFF,
125 };
126 
127 static struct scsi_transport_template *qla2xxx_transport_template = NULL;
128 
129 /* TODO Convert to inlines
130  *
131  * Timer routines
132  */
133 #define	WATCH_INTERVAL		1       /* number of seconds */
134 
135 static void qla2x00_timer(scsi_qla_host_t *);
136 
137 static __inline__ void qla2x00_start_timer(scsi_qla_host_t *,
138     void *, unsigned long);
139 static __inline__ void qla2x00_restart_timer(scsi_qla_host_t *, unsigned long);
140 static __inline__ void qla2x00_stop_timer(scsi_qla_host_t *);
141 
142 static inline void
143 qla2x00_start_timer(scsi_qla_host_t *ha, void *func, unsigned long interval)
144 {
145 	init_timer(&ha->timer);
146 	ha->timer.expires = jiffies + interval * HZ;
147 	ha->timer.data = (unsigned long)ha;
148 	ha->timer.function = (void (*)(unsigned long))func;
149 	add_timer(&ha->timer);
150 	ha->timer_active = 1;
151 }
152 
153 static inline void
154 qla2x00_restart_timer(scsi_qla_host_t *ha, unsigned long interval)
155 {
156 	mod_timer(&ha->timer, jiffies + interval * HZ);
157 }
158 
159 static __inline__ void
160 qla2x00_stop_timer(scsi_qla_host_t *ha)
161 {
162 	del_timer_sync(&ha->timer);
163 	ha->timer_active = 0;
164 }
165 
166 static int qla2x00_do_dpc(void *data);
167 
168 static void qla2x00_rst_aen(scsi_qla_host_t *);
169 
170 static uint8_t qla2x00_mem_alloc(scsi_qla_host_t *);
171 static void qla2x00_mem_free(scsi_qla_host_t *ha);
172 static int qla2x00_allocate_sp_pool( scsi_qla_host_t *ha);
173 static void qla2x00_free_sp_pool(scsi_qla_host_t *ha);
174 static srb_t *qla2x00_get_new_sp(scsi_qla_host_t *);
175 static void qla2x00_sp_free_dma(scsi_qla_host_t *, srb_t *);
176 void qla2x00_sp_compl(scsi_qla_host_t *ha, srb_t *);
177 
178 /* -------------------------------------------------------------------------- */
179 
180 static char *
181 qla2x00_get_pci_info_str(struct scsi_qla_host *ha, char *str)
182 {
183 	static char *pci_bus_modes[] = {
184 		"33", "66", "100", "133",
185 	};
186 	uint16_t pci_bus;
187 
188 	strcpy(str, "PCI");
189 	pci_bus = (ha->pci_attr & (BIT_9 | BIT_10)) >> 9;
190 	if (pci_bus) {
191 		strcat(str, "-X (");
192 		strcat(str, pci_bus_modes[pci_bus]);
193 	} else {
194 		pci_bus = (ha->pci_attr & BIT_8) >> 8;
195 		strcat(str, " (");
196 		strcat(str, pci_bus_modes[pci_bus]);
197 	}
198 	strcat(str, " MHz)");
199 
200 	return (str);
201 }
202 
203 char *
204 qla2x00_get_fw_version_str(struct scsi_qla_host *ha, char *str)
205 {
206 	char un_str[10];
207 
208 	sprintf(str, "%d.%02d.%02d ", ha->fw_major_version,
209 	    ha->fw_minor_version,
210 	    ha->fw_subminor_version);
211 
212 	if (ha->fw_attributes & BIT_9) {
213 		strcat(str, "FLX");
214 		return (str);
215 	}
216 
217 	switch (ha->fw_attributes & 0xFF) {
218 	case 0x7:
219 		strcat(str, "EF");
220 		break;
221 	case 0x17:
222 		strcat(str, "TP");
223 		break;
224 	case 0x37:
225 		strcat(str, "IP");
226 		break;
227 	case 0x77:
228 		strcat(str, "VI");
229 		break;
230 	default:
231 		sprintf(un_str, "(%x)", ha->fw_attributes);
232 		strcat(str, un_str);
233 		break;
234 	}
235 	if (ha->fw_attributes & 0x100)
236 		strcat(str, "X");
237 
238 	return (str);
239 }
240 
241 /**************************************************************************
242 * qla2x00_queuecommand
243 *
244 * Description:
245 *     Queue a command to the controller.
246 *
247 * Input:
248 *     cmd - pointer to Scsi cmd structure
249 *     fn - pointer to Scsi done function
250 *
251 * Returns:
252 *   0 - Always
253 *
254 * Note:
255 * The mid-level driver tries to ensures that queuecommand never gets invoked
256 * concurrently with itself or the interrupt handler (although the
257 * interrupt handler may call this routine as part of request-completion
258 * handling).
259 **************************************************************************/
260 static int
261 qla2x00_queuecommand(struct scsi_cmnd *cmd, void (*done)(struct scsi_cmnd *))
262 {
263 	scsi_qla_host_t *ha = to_qla_host(cmd->device->host);
264 	fc_port_t *fcport = (struct fc_port *) cmd->device->hostdata;
265 	srb_t *sp;
266 	int rval;
267 
268 	if (!fcport) {
269 		cmd->result = DID_NO_CONNECT << 16;
270 		goto qc_fail_command;
271 	}
272 
273 	if (atomic_read(&fcport->state) != FCS_ONLINE) {
274 		if (atomic_read(&fcport->state) == FCS_DEVICE_DEAD ||
275 		    atomic_read(&ha->loop_state) == LOOP_DEAD) {
276 			cmd->result = DID_NO_CONNECT << 16;
277 			goto qc_fail_command;
278 		}
279 		goto qc_host_busy;
280 	}
281 
282 	spin_unlock_irq(ha->host->host_lock);
283 
284 	/* Allocate a command packet from the "sp" pool. */
285 	if ((sp = qla2x00_get_new_sp(ha)) == NULL) {
286 		goto qc_host_busy_lock;
287 	}
288 
289 	sp->ha = ha;
290 	sp->fcport = fcport;
291 	sp->cmd = cmd;
292 	sp->flags = 0;
293 
294 	CMD_SP(cmd) = (void *)sp;
295 	cmd->scsi_done = done;
296 
297 	rval = qla2x00_start_scsi(sp);
298 	if (rval != QLA_SUCCESS)
299 		goto qc_host_busy_free_sp;
300 
301 	/* Manage unprocessed RIO/ZIO commands in response queue. */
302 	if (ha->flags.online && ha->flags.process_response_queue &&
303 	    ha->response_ring_ptr->signature != RESPONSE_PROCESSED) {
304 		unsigned long flags;
305 
306 		spin_lock_irqsave(&ha->hardware_lock, flags);
307 		qla2x00_process_response_queue(ha);
308 		spin_unlock_irqrestore(&ha->hardware_lock, flags);
309 	}
310 
311 	spin_lock_irq(ha->host->host_lock);
312 
313 	return 0;
314 
315 qc_host_busy_free_sp:
316 	qla2x00_sp_free_dma(ha, sp);
317 	CMD_SP(cmd) = NULL;
318 	mempool_free(sp, ha->srb_mempool);
319 
320 qc_host_busy_lock:
321 	spin_lock_irq(ha->host->host_lock);
322 
323 qc_host_busy:
324 	return SCSI_MLQUEUE_HOST_BUSY;
325 
326 qc_fail_command:
327 	done(cmd);
328 
329 	return 0;
330 }
331 
332 /*
333  * qla2x00_eh_wait_on_command
334  *    Waits for the command to be returned by the Firmware for some
335  *    max time.
336  *
337  * Input:
338  *    ha = actual ha whose done queue will contain the command
339  *	      returned by firmware.
340  *    cmd = Scsi Command to wait on.
341  *    flag = Abort/Reset(Bus or Device Reset)
342  *
343  * Return:
344  *    Not Found : 0
345  *    Found : 1
346  */
347 static int
348 qla2x00_eh_wait_on_command(scsi_qla_host_t *ha, struct scsi_cmnd *cmd)
349 {
350 #define ABORT_POLLING_PERIOD	HZ
351 #define ABORT_WAIT_ITER		((10 * HZ) / (ABORT_POLLING_PERIOD))
352 	unsigned long wait_iter = ABORT_WAIT_ITER;
353 	int ret = QLA_SUCCESS;
354 
355 	while (CMD_SP(cmd)) {
356 		set_current_state(TASK_UNINTERRUPTIBLE);
357 		schedule_timeout(ABORT_POLLING_PERIOD);
358 
359 		if (--wait_iter)
360 			break;
361 	}
362 	if (CMD_SP(cmd))
363 		ret = QLA_FUNCTION_FAILED;
364 
365 	return ret;
366 }
367 
368 /*
369  * qla2x00_wait_for_hba_online
370  *    Wait till the HBA is online after going through
371  *    <= MAX_RETRIES_OF_ISP_ABORT  or
372  *    finally HBA is disabled ie marked offline
373  *
374  * Input:
375  *     ha - pointer to host adapter structure
376  *
377  * Note:
378  *    Does context switching-Release SPIN_LOCK
379  *    (if any) before calling this routine.
380  *
381  * Return:
382  *    Success (Adapter is online) : 0
383  *    Failed  (Adapter is offline/disabled) : 1
384  */
385 static int
386 qla2x00_wait_for_hba_online(scsi_qla_host_t *ha)
387 {
388 	int 	 return_status;
389 	unsigned long wait_online;
390 
391 	wait_online = jiffies + (MAX_LOOP_TIMEOUT * HZ);
392 	while (((test_bit(ISP_ABORT_NEEDED, &ha->dpc_flags)) ||
393 	    test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags) ||
394 	    test_bit(ISP_ABORT_RETRY, &ha->dpc_flags) ||
395 	    ha->dpc_active) && time_before(jiffies, wait_online)) {
396 
397 		msleep(1000);
398 	}
399 	if (ha->flags.online)
400 		return_status = QLA_SUCCESS;
401 	else
402 		return_status = QLA_FUNCTION_FAILED;
403 
404 	DEBUG2(printk("%s return_status=%d\n",__func__,return_status));
405 
406 	return (return_status);
407 }
408 
409 /*
410  * qla2x00_wait_for_loop_ready
411  *    Wait for MAX_LOOP_TIMEOUT(5 min) value for loop
412  *    to be in LOOP_READY state.
413  * Input:
414  *     ha - pointer to host adapter structure
415  *
416  * Note:
417  *    Does context switching-Release SPIN_LOCK
418  *    (if any) before calling this routine.
419  *
420  *
421  * Return:
422  *    Success (LOOP_READY) : 0
423  *    Failed  (LOOP_NOT_READY) : 1
424  */
425 static inline int
426 qla2x00_wait_for_loop_ready(scsi_qla_host_t *ha)
427 {
428 	int 	 return_status = QLA_SUCCESS;
429 	unsigned long loop_timeout ;
430 
431 	/* wait for 5 min at the max for loop to be ready */
432 	loop_timeout = jiffies + (MAX_LOOP_TIMEOUT * HZ);
433 
434 	while ((!atomic_read(&ha->loop_down_timer) &&
435 	    atomic_read(&ha->loop_state) == LOOP_DOWN) ||
436 	    atomic_read(&ha->loop_state) != LOOP_READY) {
437 		msleep(1000);
438 		if (time_after_eq(jiffies, loop_timeout)) {
439 			return_status = QLA_FUNCTION_FAILED;
440 			break;
441 		}
442 	}
443 	return (return_status);
444 }
445 
446 /**************************************************************************
447 * qla2xxx_eh_abort
448 *
449 * Description:
450 *    The abort function will abort the specified command.
451 *
452 * Input:
453 *    cmd = Linux SCSI command packet to be aborted.
454 *
455 * Returns:
456 *    Either SUCCESS or FAILED.
457 *
458 * Note:
459 **************************************************************************/
460 int
461 qla2xxx_eh_abort(struct scsi_cmnd *cmd)
462 {
463 	scsi_qla_host_t *ha = to_qla_host(cmd->device->host);
464 	srb_t *sp;
465 	int ret, i;
466 	unsigned int id, lun;
467 	unsigned long serial;
468 	unsigned long flags;
469 
470 	if (!CMD_SP(cmd))
471 		return FAILED;
472 
473 	ret = FAILED;
474 
475 	id = cmd->device->id;
476 	lun = cmd->device->lun;
477 	serial = cmd->serial_number;
478 
479 	/* Check active list for command command. */
480 	spin_lock_irqsave(&ha->hardware_lock, flags);
481 	for (i = 1; i < MAX_OUTSTANDING_COMMANDS; i++) {
482 		sp = ha->outstanding_cmds[i];
483 
484 		if (sp == NULL)
485 			continue;
486 
487 		if (sp->cmd != cmd)
488 			continue;
489 
490 		DEBUG2(printk("%s(%ld): aborting sp %p from RISC. pid=%ld "
491 		    "sp->state=%x\n", __func__, ha->host_no, sp, serial,
492 		    sp->state));
493 		DEBUG3(qla2x00_print_scsi_cmd(cmd);)
494 
495 		spin_unlock_irqrestore(&ha->hardware_lock, flags);
496 		if (qla2x00_abort_command(ha, sp)) {
497 			DEBUG2(printk("%s(%ld): abort_command "
498 			    "mbx failed.\n", __func__, ha->host_no));
499 		} else {
500 			DEBUG3(printk("%s(%ld): abort_command "
501 			    "mbx success.\n", __func__, ha->host_no));
502 			ret = SUCCESS;
503 		}
504 		spin_lock_irqsave(&ha->hardware_lock, flags);
505 
506 		break;
507 	}
508 	spin_unlock_irqrestore(&ha->hardware_lock, flags);
509 
510 	/* Wait for the command to be returned. */
511 	if (ret == SUCCESS) {
512 		if (qla2x00_eh_wait_on_command(ha, cmd) != QLA_SUCCESS) {
513 			qla_printk(KERN_ERR, ha,
514 			    "scsi(%ld:%d:%d): Abort handler timed out -- %lx "
515 			    "%x.\n", ha->host_no, id, lun, serial, ret);
516 		}
517 	}
518 
519 	qla_printk(KERN_INFO, ha,
520 	    "scsi(%ld:%d:%d): Abort command issued -- %lx %x.\n", ha->host_no,
521 	    id, lun, serial, ret);
522 
523 	return ret;
524 }
525 
526 /**************************************************************************
527 * qla2x00_eh_wait_for_pending_target_commands
528 *
529 * Description:
530 *    Waits for all the commands to come back from the specified target.
531 *
532 * Input:
533 *    ha - pointer to scsi_qla_host structure.
534 *    t  - target
535 * Returns:
536 *    Either SUCCESS or FAILED.
537 *
538 * Note:
539 **************************************************************************/
540 static int
541 qla2x00_eh_wait_for_pending_target_commands(scsi_qla_host_t *ha, unsigned int t)
542 {
543 	int	cnt;
544 	int	status;
545 	srb_t		*sp;
546 	struct scsi_cmnd *cmd;
547 	unsigned long flags;
548 
549 	status = 0;
550 
551 	/*
552 	 * Waiting for all commands for the designated target in the active
553 	 * array
554 	 */
555 	for (cnt = 1; cnt < MAX_OUTSTANDING_COMMANDS; cnt++) {
556 		spin_lock_irqsave(&ha->hardware_lock, flags);
557 		sp = ha->outstanding_cmds[cnt];
558 		if (sp) {
559 			cmd = sp->cmd;
560 			spin_unlock_irqrestore(&ha->hardware_lock, flags);
561 			if (cmd->device->id == t) {
562 				if (!qla2x00_eh_wait_on_command(ha, cmd)) {
563 					status = 1;
564 					break;
565 				}
566 			}
567 		} else {
568 			spin_unlock_irqrestore(&ha->hardware_lock, flags);
569 		}
570 	}
571 	return (status);
572 }
573 
574 
575 /**************************************************************************
576 * qla2xxx_eh_device_reset
577 *
578 * Description:
579 *    The device reset function will reset the target and abort any
580 *    executing commands.
581 *
582 *    NOTE: The use of SP is undefined within this context.  Do *NOT*
583 *          attempt to use this value, even if you determine it is
584 *          non-null.
585 *
586 * Input:
587 *    cmd = Linux SCSI command packet of the command that cause the
588 *          bus device reset.
589 *
590 * Returns:
591 *    SUCCESS/FAILURE (defined as macro in scsi.h).
592 *
593 **************************************************************************/
594 int
595 qla2xxx_eh_device_reset(struct scsi_cmnd *cmd)
596 {
597 	scsi_qla_host_t *ha = to_qla_host(cmd->device->host);
598 	fc_port_t *fcport = (struct fc_port *) cmd->device->hostdata;
599 	srb_t *sp;
600 	int ret;
601 	unsigned int id, lun;
602 	unsigned long serial;
603 
604 	ret = FAILED;
605 
606 	id = cmd->device->id;
607 	lun = cmd->device->lun;
608 	serial = cmd->serial_number;
609 
610 	sp = (srb_t *) CMD_SP(cmd);
611 	if (!sp || !fcport)
612 		return ret;
613 
614 	qla_printk(KERN_INFO, ha,
615 	    "scsi(%ld:%d:%d): DEVICE RESET ISSUED.\n", ha->host_no, id, lun);
616 
617 	if (qla2x00_wait_for_hba_online(ha) != QLA_SUCCESS)
618 		goto eh_dev_reset_done;
619 
620 	if (qla2x00_wait_for_loop_ready(ha) == QLA_SUCCESS) {
621 		if (qla2x00_device_reset(ha, fcport) == 0)
622 			ret = SUCCESS;
623 
624 #if defined(LOGOUT_AFTER_DEVICE_RESET)
625 		if (ret == SUCCESS) {
626 			if (fcport->flags & FC_FABRIC_DEVICE) {
627 				qla2x00_fabric_logout(ha, fcport->loop_id);
628 				qla2x00_mark_device_lost(ha, fcport);
629 			}
630 		}
631 #endif
632 	} else {
633 		DEBUG2(printk(KERN_INFO
634 		    "%s failed: loop not ready\n",__func__);)
635 	}
636 
637 	if (ret == FAILED) {
638 		DEBUG3(printk("%s(%ld): device reset failed\n",
639 		    __func__, ha->host_no));
640 		qla_printk(KERN_INFO, ha, "%s: device reset failed\n",
641 		    __func__);
642 
643 		goto eh_dev_reset_done;
644 	}
645 
646 	/*
647 	 * If we are coming down the EH path, wait for all commands to
648 	 * complete for the device.
649 	 */
650 	if (cmd->device->host->eh_active) {
651 		if (qla2x00_eh_wait_for_pending_target_commands(ha, id))
652 			ret = FAILED;
653 
654 		if (ret == FAILED) {
655 			DEBUG3(printk("%s(%ld): failed while waiting for "
656 			    "commands\n", __func__, ha->host_no));
657 			qla_printk(KERN_INFO, ha,
658 			    "%s: failed while waiting for commands\n",
659 			    __func__);
660 
661 			goto eh_dev_reset_done;
662 		}
663 	}
664 
665 	qla_printk(KERN_INFO, ha,
666 	    "scsi(%ld:%d:%d): DEVICE RESET SUCCEEDED.\n", ha->host_no, id, lun);
667 
668 eh_dev_reset_done:
669 	return ret;
670 }
671 
672 /**************************************************************************
673 * qla2x00_eh_wait_for_pending_commands
674 *
675 * Description:
676 *    Waits for all the commands to come back from the specified host.
677 *
678 * Input:
679 *    ha - pointer to scsi_qla_host structure.
680 *
681 * Returns:
682 *    1 : SUCCESS
683 *    0 : FAILED
684 *
685 * Note:
686 **************************************************************************/
687 static int
688 qla2x00_eh_wait_for_pending_commands(scsi_qla_host_t *ha)
689 {
690 	int	cnt;
691 	int	status;
692 	srb_t		*sp;
693 	struct scsi_cmnd *cmd;
694 	unsigned long flags;
695 
696 	status = 1;
697 
698 	/*
699 	 * Waiting for all commands for the designated target in the active
700 	 * array
701 	 */
702 	for (cnt = 1; cnt < MAX_OUTSTANDING_COMMANDS; cnt++) {
703 		spin_lock_irqsave(&ha->hardware_lock, flags);
704 		sp = ha->outstanding_cmds[cnt];
705 		if (sp) {
706 			cmd = sp->cmd;
707 			spin_unlock_irqrestore(&ha->hardware_lock, flags);
708 			status = qla2x00_eh_wait_on_command(ha, cmd);
709 			if (status == 0)
710 				break;
711 		}
712 		else {
713 			spin_unlock_irqrestore(&ha->hardware_lock, flags);
714 		}
715 	}
716 	return (status);
717 }
718 
719 
720 /**************************************************************************
721 * qla2xxx_eh_bus_reset
722 *
723 * Description:
724 *    The bus reset function will reset the bus and abort any executing
725 *    commands.
726 *
727 * Input:
728 *    cmd = Linux SCSI command packet of the command that cause the
729 *          bus reset.
730 *
731 * Returns:
732 *    SUCCESS/FAILURE (defined as macro in scsi.h).
733 *
734 **************************************************************************/
735 int
736 qla2xxx_eh_bus_reset(struct scsi_cmnd *cmd)
737 {
738 	scsi_qla_host_t *ha = to_qla_host(cmd->device->host);
739 	fc_port_t *fcport = (struct fc_port *) cmd->device->hostdata;
740 	srb_t *sp;
741 	int ret;
742 	unsigned int id, lun;
743 	unsigned long serial;
744 
745 	ret = FAILED;
746 
747 	id = cmd->device->id;
748 	lun = cmd->device->lun;
749 	serial = cmd->serial_number;
750 
751 	sp = (srb_t *) CMD_SP(cmd);
752 	if (!sp || !fcport)
753 		return ret;
754 
755 	qla_printk(KERN_INFO, ha,
756 	    "scsi(%ld:%d:%d): LOOP RESET ISSUED.\n", ha->host_no, id, lun);
757 
758 	if (qla2x00_wait_for_hba_online(ha) != QLA_SUCCESS) {
759 		DEBUG2(printk("%s failed:board disabled\n",__func__));
760 		goto eh_bus_reset_done;
761 	}
762 
763 	if (qla2x00_wait_for_loop_ready(ha) == QLA_SUCCESS) {
764 		if (qla2x00_loop_reset(ha) == QLA_SUCCESS)
765 			ret = SUCCESS;
766 	}
767 	if (ret == FAILED)
768 		goto eh_bus_reset_done;
769 
770 	/* Waiting for our command in done_queue to be returned to OS.*/
771 	if (cmd->device->host->eh_active)
772 		if (!qla2x00_eh_wait_for_pending_commands(ha))
773 			ret = FAILED;
774 
775 eh_bus_reset_done:
776 	qla_printk(KERN_INFO, ha, "%s: reset %s\n", __func__,
777 	    (ret == FAILED) ? "failed" : "succeded");
778 
779 	return ret;
780 }
781 
782 /**************************************************************************
783 * qla2xxx_eh_host_reset
784 *
785 * Description:
786 *    The reset function will reset the Adapter.
787 *
788 * Input:
789 *      cmd = Linux SCSI command packet of the command that cause the
790 *            adapter reset.
791 *
792 * Returns:
793 *      Either SUCCESS or FAILED.
794 *
795 * Note:
796 **************************************************************************/
797 int
798 qla2xxx_eh_host_reset(struct scsi_cmnd *cmd)
799 {
800 	scsi_qla_host_t *ha = to_qla_host(cmd->device->host);
801 	fc_port_t *fcport = (struct fc_port *) cmd->device->hostdata;
802 	srb_t *sp;
803 	int ret;
804 	unsigned int id, lun;
805 	unsigned long serial;
806 
807 	ret = FAILED;
808 
809 	id = cmd->device->id;
810 	lun = cmd->device->lun;
811 	serial = cmd->serial_number;
812 
813 	sp = (srb_t *) CMD_SP(cmd);
814 	if (!sp || !fcport)
815 		return ret;
816 
817 	qla_printk(KERN_INFO, ha,
818 	    "scsi(%ld:%d:%d): ADAPTER RESET ISSUED.\n", ha->host_no, id, lun);
819 
820 	if (qla2x00_wait_for_hba_online(ha) != QLA_SUCCESS)
821 		goto eh_host_reset_lock;
822 
823 	/*
824 	 * Fixme-may be dpc thread is active and processing
825 	 * loop_resync,so wait a while for it to
826 	 * be completed and then issue big hammer.Otherwise
827 	 * it may cause I/O failure as big hammer marks the
828 	 * devices as lost kicking of the port_down_timer
829 	 * while dpc is stuck for the mailbox to complete.
830 	 */
831 	qla2x00_wait_for_loop_ready(ha);
832 	set_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags);
833 	if (qla2x00_abort_isp(ha)) {
834 		clear_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags);
835 		/* failed. schedule dpc to try */
836 		set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
837 
838 		if (qla2x00_wait_for_hba_online(ha) != QLA_SUCCESS)
839 			goto eh_host_reset_lock;
840 	}
841 	clear_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags);
842 
843 	/* Waiting for our command in done_queue to be returned to OS.*/
844 	if (qla2x00_eh_wait_for_pending_commands(ha))
845 		ret = SUCCESS;
846 
847 eh_host_reset_lock:
848 	qla_printk(KERN_INFO, ha, "%s: reset %s\n", __func__,
849 	    (ret == FAILED) ? "failed" : "succeded");
850 
851 	return ret;
852 }
853 
854 /*
855 * qla2x00_loop_reset
856 *      Issue loop reset.
857 *
858 * Input:
859 *      ha = adapter block pointer.
860 *
861 * Returns:
862 *      0 = success
863 */
864 static int
865 qla2x00_loop_reset(scsi_qla_host_t *ha)
866 {
867 	int status = QLA_SUCCESS;
868 	struct fc_port *fcport;
869 
870 	if (ha->flags.enable_lip_reset) {
871 		status = qla2x00_lip_reset(ha);
872 	}
873 
874 	if (status == QLA_SUCCESS && ha->flags.enable_target_reset) {
875 		list_for_each_entry(fcport, &ha->fcports, list) {
876 			if (fcport->port_type != FCT_TARGET)
877 				continue;
878 
879 			status = qla2x00_target_reset(ha, fcport);
880 			if (status != QLA_SUCCESS)
881 				break;
882 		}
883 	}
884 
885 	if (status == QLA_SUCCESS &&
886 		((!ha->flags.enable_target_reset &&
887 		  !ha->flags.enable_lip_reset) ||
888 		ha->flags.enable_lip_full_login)) {
889 
890 		status = qla2x00_full_login_lip(ha);
891 	}
892 
893 	/* Issue marker command only when we are going to start the I/O */
894 	ha->marker_needed = 1;
895 
896 	if (status) {
897 		/* Empty */
898 		DEBUG2_3(printk("%s(%ld): **** FAILED ****\n",
899 				__func__,
900 				ha->host_no);)
901 	} else {
902 		/* Empty */
903 		DEBUG3(printk("%s(%ld): exiting normally.\n",
904 				__func__,
905 				ha->host_no);)
906 	}
907 
908 	return(status);
909 }
910 
911 /*
912  * qla2x00_device_reset
913  *	Issue bus device reset message to the target.
914  *
915  * Input:
916  *	ha = adapter block pointer.
917  *	t = SCSI ID.
918  *	TARGET_QUEUE_LOCK must be released.
919  *	ADAPTER_STATE_LOCK must be released.
920  *
921  * Context:
922  *	Kernel context.
923  */
924 static int
925 qla2x00_device_reset(scsi_qla_host_t *ha, fc_port_t *reset_fcport)
926 {
927 	/* Abort Target command will clear Reservation */
928 	return qla2x00_abort_target(reset_fcport);
929 }
930 
931 static int
932 qla2xxx_slave_alloc(struct scsi_device *sdev)
933 {
934 	scsi_qla_host_t *ha = to_qla_host(sdev->host);
935 	struct fc_rport *rport = starget_to_rport(scsi_target(sdev));
936 	fc_port_t *fcport;
937 	int found;
938 
939 	if (!rport)
940 		return -ENXIO;
941 
942 	found = 0;
943 	list_for_each_entry(fcport, &ha->fcports, list) {
944 		if (rport->port_name ==
945 		    be64_to_cpu(*(uint64_t *)fcport->port_name)) {
946 			found++;
947 			break;
948 		}
949 	}
950 	if (!found)
951 		return -ENXIO;
952 
953 	sdev->hostdata = fcport;
954 
955 	return 0;
956 }
957 
958 static int
959 qla2xxx_slave_configure(struct scsi_device *sdev)
960 {
961 	scsi_qla_host_t *ha = to_qla_host(sdev->host);
962 	struct fc_rport *rport = starget_to_rport(sdev->sdev_target);
963 
964 	if (sdev->tagged_supported)
965 		scsi_activate_tcq(sdev, 32);
966 	else
967 		scsi_deactivate_tcq(sdev, 32);
968 
969 	rport->dev_loss_tmo = ha->port_down_retry_count + 5;
970 
971 	return 0;
972 }
973 
974 static void
975 qla2xxx_slave_destroy(struct scsi_device *sdev)
976 {
977 	sdev->hostdata = NULL;
978 }
979 
980 /**
981  * qla2x00_config_dma_addressing() - Configure OS DMA addressing method.
982  * @ha: HA context
983  *
984  * At exit, the @ha's flags.enable_64bit_addressing set to indicated
985  * supported addressing method.
986  */
987 static void
988 qla2x00_config_dma_addressing(scsi_qla_host_t *ha)
989 {
990 	/* Assume 32bit DMA address */
991 	ha->flags.enable_64bit_addressing = 0;
992 	ha->calc_request_entries = qla2x00_calc_iocbs_32;
993 	ha->build_scsi_iocbs = qla2x00_build_scsi_iocbs_32;
994 
995 	/*
996 	 * Given the two variants pci_set_dma_mask(), allow the compiler to
997 	 * assist in setting the proper dma mask.
998 	 */
999 	if (sizeof(dma_addr_t) > 4) {
1000 		if (pci_set_dma_mask(ha->pdev, DMA_64BIT_MASK) == 0) {
1001 			ha->flags.enable_64bit_addressing = 1;
1002 			ha->calc_request_entries = qla2x00_calc_iocbs_64;
1003 			ha->build_scsi_iocbs = qla2x00_build_scsi_iocbs_64;
1004 
1005 			if (pci_set_consistent_dma_mask(ha->pdev,
1006 			    DMA_64BIT_MASK)) {
1007 				qla_printk(KERN_DEBUG, ha,
1008 				    "Failed to set 64 bit PCI consistent mask; "
1009 				    "using 32 bit.\n");
1010 				pci_set_consistent_dma_mask(ha->pdev,
1011 				    DMA_32BIT_MASK);
1012 			}
1013 		} else {
1014 			qla_printk(KERN_DEBUG, ha,
1015 			    "Failed to set 64 bit PCI DMA mask, falling back "
1016 			    "to 32 bit MASK.\n");
1017 			pci_set_dma_mask(ha->pdev, DMA_32BIT_MASK);
1018 		}
1019 	} else {
1020 		pci_set_dma_mask(ha->pdev, DMA_32BIT_MASK);
1021 	}
1022 }
1023 
1024 static int
1025 qla2x00_iospace_config(scsi_qla_host_t *ha)
1026 {
1027 	unsigned long	pio, pio_len, pio_flags;
1028 	unsigned long	mmio, mmio_len, mmio_flags;
1029 
1030 	/* We only need PIO for Flash operations on ISP2312 v2 chips. */
1031 	pio = pci_resource_start(ha->pdev, 0);
1032 	pio_len = pci_resource_len(ha->pdev, 0);
1033 	pio_flags = pci_resource_flags(ha->pdev, 0);
1034 	if (pio_flags & IORESOURCE_IO) {
1035 		if (pio_len < MIN_IOBASE_LEN) {
1036 			qla_printk(KERN_WARNING, ha,
1037 			    "Invalid PCI I/O region size (%s)...\n",
1038 				pci_name(ha->pdev));
1039 			pio = 0;
1040 		}
1041 	} else {
1042 		qla_printk(KERN_WARNING, ha,
1043 		    "region #0 not a PIO resource (%s)...\n",
1044 		    pci_name(ha->pdev));
1045 		pio = 0;
1046 	}
1047 
1048 	/* Use MMIO operations for all accesses. */
1049 	mmio = pci_resource_start(ha->pdev, 1);
1050 	mmio_len = pci_resource_len(ha->pdev, 1);
1051 	mmio_flags = pci_resource_flags(ha->pdev, 1);
1052 
1053 	if (!(mmio_flags & IORESOURCE_MEM)) {
1054 		qla_printk(KERN_ERR, ha,
1055 		    "region #0 not an MMIO resource (%s), aborting\n",
1056 		    pci_name(ha->pdev));
1057 		goto iospace_error_exit;
1058 	}
1059 	if (mmio_len < MIN_IOBASE_LEN) {
1060 		qla_printk(KERN_ERR, ha,
1061 		    "Invalid PCI mem region size (%s), aborting\n",
1062 			pci_name(ha->pdev));
1063 		goto iospace_error_exit;
1064 	}
1065 
1066 	if (pci_request_regions(ha->pdev, ha->brd_info->drv_name)) {
1067 		qla_printk(KERN_WARNING, ha,
1068 		    "Failed to reserve PIO/MMIO regions (%s)\n",
1069 		    pci_name(ha->pdev));
1070 
1071 		goto iospace_error_exit;
1072 	}
1073 
1074 	ha->pio_address = pio;
1075 	ha->pio_length = pio_len;
1076 	ha->iobase = ioremap(mmio, MIN_IOBASE_LEN);
1077 	if (!ha->iobase) {
1078 		qla_printk(KERN_ERR, ha,
1079 		    "cannot remap MMIO (%s), aborting\n", pci_name(ha->pdev));
1080 
1081 		goto iospace_error_exit;
1082 	}
1083 
1084 	return (0);
1085 
1086 iospace_error_exit:
1087 	return (-ENOMEM);
1088 }
1089 
1090 /*
1091  * PCI driver interface
1092  */
1093 int qla2x00_probe_one(struct pci_dev *pdev, struct qla_board_info *brd_info)
1094 {
1095 	int	ret = -ENODEV;
1096 	device_reg_t __iomem *reg;
1097 	struct Scsi_Host *host;
1098 	scsi_qla_host_t *ha;
1099 	unsigned long	flags = 0;
1100 	unsigned long	wait_switch = 0;
1101 	char pci_info[20];
1102 	char fw_str[30];
1103 	fc_port_t *fcport;
1104 
1105 	if (pci_enable_device(pdev))
1106 		goto probe_out;
1107 
1108 	host = scsi_host_alloc(&qla2x00_driver_template,
1109 	    sizeof(scsi_qla_host_t));
1110 	if (host == NULL) {
1111 		printk(KERN_WARNING
1112 		    "qla2xxx: Couldn't allocate host from scsi layer!\n");
1113 		goto probe_disable_device;
1114 	}
1115 
1116 	/* Clear our data area */
1117 	ha = (scsi_qla_host_t *)host->hostdata;
1118 	memset(ha, 0, sizeof(scsi_qla_host_t));
1119 
1120 	ha->pdev = pdev;
1121 	ha->host = host;
1122 	ha->host_no = host->host_no;
1123 	ha->brd_info = brd_info;
1124 	sprintf(ha->host_str, "%s_%ld", ha->brd_info->drv_name, ha->host_no);
1125 
1126 	/* Configure PCI I/O space */
1127 	ret = qla2x00_iospace_config(ha);
1128 	if (ret)
1129 		goto probe_failed;
1130 
1131 	/* Sanitize the information from PCI BIOS. */
1132 	host->irq = pdev->irq;
1133 
1134 	qla_printk(KERN_INFO, ha,
1135 	    "Found an %s, irq %d, iobase 0x%p\n", ha->brd_info->isp_name,
1136 	    host->irq, ha->iobase);
1137 
1138 	spin_lock_init(&ha->hardware_lock);
1139 
1140 	ha->prev_topology = 0;
1141 	ha->ports = MAX_BUSES;
1142 
1143 	if (IS_QLA2100(ha)) {
1144 		host->max_id = MAX_TARGETS_2100;
1145 		ha->mbx_count = MAILBOX_REGISTER_COUNT_2100;
1146 		ha->request_q_length = REQUEST_ENTRY_CNT_2100;
1147 		ha->response_q_length = RESPONSE_ENTRY_CNT_2100;
1148 		ha->last_loop_id = SNS_LAST_LOOP_ID_2100;
1149 		host->sg_tablesize = 32;
1150 	} else if (IS_QLA2200(ha)) {
1151 		host->max_id = MAX_TARGETS_2200;
1152 		ha->mbx_count = MAILBOX_REGISTER_COUNT;
1153 		ha->request_q_length = REQUEST_ENTRY_CNT_2200;
1154 		ha->response_q_length = RESPONSE_ENTRY_CNT_2100;
1155 		ha->last_loop_id = SNS_LAST_LOOP_ID_2100;
1156 	} else /*if (IS_QLA2300(ha))*/ {
1157 		host->max_id = MAX_TARGETS_2200;
1158 		ha->mbx_count = MAILBOX_REGISTER_COUNT;
1159 		ha->request_q_length = REQUEST_ENTRY_CNT_2200;
1160 		ha->response_q_length = RESPONSE_ENTRY_CNT_2300;
1161 		ha->last_loop_id = SNS_LAST_LOOP_ID_2300;
1162 	}
1163 	host->can_queue = ha->request_q_length + 128;
1164 
1165 	/* load the F/W, read paramaters, and init the H/W */
1166 	ha->instance = num_hosts;
1167 
1168 	init_MUTEX(&ha->mbx_cmd_sem);
1169 	init_MUTEX_LOCKED(&ha->mbx_intr_sem);
1170 
1171 	INIT_LIST_HEAD(&ha->list);
1172 	INIT_LIST_HEAD(&ha->fcports);
1173 	INIT_LIST_HEAD(&ha->rscn_fcports);
1174 
1175 	/*
1176 	 * These locks are used to prevent more than one CPU
1177 	 * from modifying the queue at the same time. The
1178 	 * higher level "host_lock" will reduce most
1179 	 * contention for these locks.
1180 	 */
1181 	spin_lock_init(&ha->mbx_reg_lock);
1182 
1183 	ha->dpc_pid = -1;
1184 	init_completion(&ha->dpc_inited);
1185 	init_completion(&ha->dpc_exited);
1186 
1187 	qla2x00_config_dma_addressing(ha);
1188 	if (qla2x00_mem_alloc(ha)) {
1189 		qla_printk(KERN_WARNING, ha,
1190 		    "[ERROR] Failed to allocate memory for adapter\n");
1191 
1192 		ret = -ENOMEM;
1193 		goto probe_failed;
1194 	}
1195 
1196 	if (qla2x00_initialize_adapter(ha) &&
1197 	    !(ha->device_flags & DFLG_NO_CABLE)) {
1198 
1199 		qla_printk(KERN_WARNING, ha,
1200 		    "Failed to initialize adapter\n");
1201 
1202 		DEBUG2(printk("scsi(%ld): Failed to initialize adapter - "
1203 		    "Adapter flags %x.\n",
1204 		    ha->host_no, ha->device_flags));
1205 
1206 		ret = -ENODEV;
1207 		goto probe_failed;
1208 	}
1209 
1210 	/*
1211 	 * Startup the kernel thread for this host adapter
1212 	 */
1213 	ha->dpc_should_die = 0;
1214 	ha->dpc_pid = kernel_thread(qla2x00_do_dpc, ha, 0);
1215 	if (ha->dpc_pid < 0) {
1216 		qla_printk(KERN_WARNING, ha,
1217 		    "Unable to start DPC thread!\n");
1218 
1219 		ret = -ENODEV;
1220 		goto probe_failed;
1221 	}
1222 	wait_for_completion(&ha->dpc_inited);
1223 
1224 	host->this_id = 255;
1225 	host->cmd_per_lun = 3;
1226 	host->unique_id = ha->instance;
1227 	host->max_cmd_len = MAX_CMDSZ;
1228 	host->max_channel = ha->ports - 1;
1229 	host->max_lun = MAX_LUNS;
1230 	host->transportt = qla2xxx_transport_template;
1231 
1232 	if (IS_QLA2100(ha) || IS_QLA2200(ha))
1233 		ret = request_irq(host->irq, qla2100_intr_handler,
1234 		    SA_INTERRUPT|SA_SHIRQ, ha->brd_info->drv_name, ha);
1235 	else
1236 		ret = request_irq(host->irq, qla2300_intr_handler,
1237 		    SA_INTERRUPT|SA_SHIRQ, ha->brd_info->drv_name, ha);
1238 	if (ret) {
1239 		qla_printk(KERN_WARNING, ha,
1240 		    "Failed to reserve interrupt %d already in use.\n",
1241 		    host->irq);
1242 		goto probe_failed;
1243 	}
1244 
1245 	/* Initialized the timer */
1246 	qla2x00_start_timer(ha, qla2x00_timer, WATCH_INTERVAL);
1247 
1248 	DEBUG2(printk("DEBUG: detect hba %ld at address = %p\n",
1249 	    ha->host_no, ha));
1250 
1251 	reg = ha->iobase;
1252 
1253 	/* Disable ISP interrupts. */
1254 	qla2x00_disable_intrs(ha);
1255 
1256 	/* Ensure mailbox registers are free. */
1257 	spin_lock_irqsave(&ha->hardware_lock, flags);
1258 	WRT_REG_WORD(&reg->semaphore, 0);
1259 	WRT_REG_WORD(&reg->hccr, HCCR_CLR_RISC_INT);
1260 	WRT_REG_WORD(&reg->hccr, HCCR_CLR_HOST_INT);
1261 
1262 	/* Enable proper parity */
1263 	if (!IS_QLA2100(ha) && !IS_QLA2200(ha)) {
1264 		if (IS_QLA2300(ha))
1265 			/* SRAM parity */
1266 			WRT_REG_WORD(&reg->hccr, (HCCR_ENABLE_PARITY + 0x1));
1267 		else
1268 			/* SRAM, Instruction RAM and GP RAM parity */
1269 			WRT_REG_WORD(&reg->hccr, (HCCR_ENABLE_PARITY + 0x7));
1270 	}
1271 	spin_unlock_irqrestore(&ha->hardware_lock, flags);
1272 
1273 	/* Enable chip interrupts. */
1274 	qla2x00_enable_intrs(ha);
1275 
1276 	/* v2.19.5b6 */
1277 	/*
1278 	 * Wait around max loop_reset_delay secs for the devices to come
1279 	 * on-line. We don't want Linux scanning before we are ready.
1280 	 *
1281 	 */
1282 	for (wait_switch = jiffies + (ha->loop_reset_delay * HZ);
1283 	    time_before(jiffies,wait_switch) &&
1284 	     !(ha->device_flags & (DFLG_NO_CABLE | DFLG_FABRIC_DEVICES))
1285 	     && (ha->device_flags & SWITCH_FOUND) ;) {
1286 
1287 		qla2x00_check_fabric_devices(ha);
1288 
1289 		msleep(10);
1290 	}
1291 
1292 	pci_set_drvdata(pdev, ha);
1293 	ha->flags.init_done = 1;
1294 	num_hosts++;
1295 
1296 	ret = scsi_add_host(host, &pdev->dev);
1297 	if (ret)
1298 		goto probe_failed;
1299 
1300 	qla2x00_alloc_sysfs_attr(ha);
1301 
1302 	qla2x00_init_host_attr(ha);
1303 
1304 	qla_printk(KERN_INFO, ha, "\n"
1305 	    " QLogic Fibre Channel HBA Driver: %s\n"
1306 	    "  QLogic %s - %s\n"
1307 	    "  %s: %s @ %s hdma%c, host#=%ld, fw=%s\n", qla2x00_version_str,
1308 	    ha->model_number, ha->model_desc ? ha->model_desc: "",
1309 	    ha->brd_info->isp_name, qla2x00_get_pci_info_str(ha, pci_info),
1310 	    pci_name(ha->pdev), ha->flags.enable_64bit_addressing ? '+': '-',
1311 	    ha->host_no, qla2x00_get_fw_version_str(ha, fw_str));
1312 
1313 	/* Go with fc_rport registration. */
1314 	list_for_each_entry(fcport, &ha->fcports, list)
1315 		qla2x00_reg_remote_port(ha, fcport);
1316 
1317 	return 0;
1318 
1319 probe_failed:
1320 	fc_remove_host(ha->host);
1321 
1322 	qla2x00_free_device(ha);
1323 
1324 	scsi_host_put(host);
1325 
1326 probe_disable_device:
1327 	pci_disable_device(pdev);
1328 
1329 probe_out:
1330 	return ret;
1331 }
1332 EXPORT_SYMBOL_GPL(qla2x00_probe_one);
1333 
1334 void qla2x00_remove_one(struct pci_dev *pdev)
1335 {
1336 	scsi_qla_host_t *ha;
1337 
1338 	ha = pci_get_drvdata(pdev);
1339 
1340 	qla2x00_free_sysfs_attr(ha);
1341 
1342 	fc_remove_host(ha->host);
1343 
1344 	scsi_remove_host(ha->host);
1345 
1346 	qla2x00_free_device(ha);
1347 
1348 	scsi_host_put(ha->host);
1349 
1350 	pci_set_drvdata(pdev, NULL);
1351 }
1352 EXPORT_SYMBOL_GPL(qla2x00_remove_one);
1353 
1354 static void
1355 qla2x00_free_device(scsi_qla_host_t *ha)
1356 {
1357 	int ret;
1358 
1359 	/* Abort any outstanding IO descriptors. */
1360 	if (!IS_QLA2100(ha) && !IS_QLA2200(ha))
1361 		qla2x00_cancel_io_descriptors(ha);
1362 
1363 	/* turn-off interrupts on the card */
1364 	if (ha->interrupts_on)
1365 		qla2x00_disable_intrs(ha);
1366 
1367 	/* Disable timer */
1368 	if (ha->timer_active)
1369 		qla2x00_stop_timer(ha);
1370 
1371 	/* Kill the kernel thread for this host */
1372 	if (ha->dpc_pid >= 0) {
1373 		ha->dpc_should_die = 1;
1374 		wmb();
1375 		ret = kill_proc(ha->dpc_pid, SIGHUP, 1);
1376 		if (ret) {
1377 			qla_printk(KERN_ERR, ha,
1378 			    "Unable to signal DPC thread -- (%d)\n", ret);
1379 
1380 			/* TODO: SOMETHING MORE??? */
1381 		} else {
1382 			wait_for_completion(&ha->dpc_exited);
1383 		}
1384 	}
1385 
1386 	qla2x00_mem_free(ha);
1387 
1388 
1389 	ha->flags.online = 0;
1390 
1391 	/* Detach interrupts */
1392 	if (ha->pdev->irq)
1393 		free_irq(ha->pdev->irq, ha);
1394 
1395 	/* release io space registers  */
1396 	if (ha->iobase)
1397 		iounmap(ha->iobase);
1398 	pci_release_regions(ha->pdev);
1399 
1400 	pci_disable_device(ha->pdev);
1401 }
1402 
1403 /*
1404  * qla2x00_mark_device_lost Updates fcport state when device goes offline.
1405  *
1406  * Input: ha = adapter block pointer.  fcport = port structure pointer.
1407  *
1408  * Return: None.
1409  *
1410  * Context:
1411  */
1412 void qla2x00_mark_device_lost(scsi_qla_host_t *ha, fc_port_t *fcport,
1413     int do_login)
1414 {
1415 	if (atomic_read(&fcport->state) == FCS_ONLINE && fcport->rport)
1416 		fc_remote_port_block(fcport->rport);
1417 	/*
1418 	 * We may need to retry the login, so don't change the state of the
1419 	 * port but do the retries.
1420 	 */
1421 	if (atomic_read(&fcport->state) != FCS_DEVICE_DEAD)
1422 		atomic_set(&fcport->state, FCS_DEVICE_LOST);
1423 
1424 	if (!do_login)
1425 		return;
1426 
1427 	if (fcport->login_retry == 0) {
1428 		fcport->login_retry = ha->login_retry_count;
1429 		set_bit(RELOGIN_NEEDED, &ha->dpc_flags);
1430 
1431 		DEBUG(printk("scsi(%ld): Port login retry: "
1432 		    "%02x%02x%02x%02x%02x%02x%02x%02x, "
1433 		    "id = 0x%04x retry cnt=%d\n",
1434 		    ha->host_no,
1435 		    fcport->port_name[0],
1436 		    fcport->port_name[1],
1437 		    fcport->port_name[2],
1438 		    fcport->port_name[3],
1439 		    fcport->port_name[4],
1440 		    fcport->port_name[5],
1441 		    fcport->port_name[6],
1442 		    fcport->port_name[7],
1443 		    fcport->loop_id,
1444 		    fcport->login_retry));
1445 	}
1446 }
1447 
1448 /*
1449  * qla2x00_mark_all_devices_lost
1450  *	Updates fcport state when device goes offline.
1451  *
1452  * Input:
1453  *	ha = adapter block pointer.
1454  *	fcport = port structure pointer.
1455  *
1456  * Return:
1457  *	None.
1458  *
1459  * Context:
1460  */
1461 void
1462 qla2x00_mark_all_devices_lost(scsi_qla_host_t *ha)
1463 {
1464 	fc_port_t *fcport;
1465 
1466 	list_for_each_entry(fcport, &ha->fcports, list) {
1467 		if (fcport->port_type != FCT_TARGET)
1468 			continue;
1469 
1470 		/*
1471 		 * No point in marking the device as lost, if the device is
1472 		 * already DEAD.
1473 		 */
1474 		if (atomic_read(&fcport->state) == FCS_DEVICE_DEAD)
1475 			continue;
1476 		if (atomic_read(&fcport->state) == FCS_ONLINE && fcport->rport)
1477 			fc_remote_port_block(fcport->rport);
1478 		atomic_set(&fcport->state, FCS_DEVICE_LOST);
1479 	}
1480 }
1481 
1482 /*
1483 * qla2x00_mem_alloc
1484 *      Allocates adapter memory.
1485 *
1486 * Returns:
1487 *      0  = success.
1488 *      1  = failure.
1489 */
1490 static uint8_t
1491 qla2x00_mem_alloc(scsi_qla_host_t *ha)
1492 {
1493 	char	name[16];
1494 	uint8_t   status = 1;
1495 	int	retry= 10;
1496 
1497 	do {
1498 		/*
1499 		 * This will loop only once if everything goes well, else some
1500 		 * number of retries will be performed to get around a kernel
1501 		 * bug where available mem is not allocated until after a
1502 		 * little delay and a retry.
1503 		 */
1504 		ha->request_ring = dma_alloc_coherent(&ha->pdev->dev,
1505 		    (ha->request_q_length + 1) * sizeof(request_t),
1506 		    &ha->request_dma, GFP_KERNEL);
1507 		if (ha->request_ring == NULL) {
1508 			qla_printk(KERN_WARNING, ha,
1509 			    "Memory Allocation failed - request_ring\n");
1510 
1511 			qla2x00_mem_free(ha);
1512 			msleep(100);
1513 
1514 			continue;
1515 		}
1516 
1517 		ha->response_ring = dma_alloc_coherent(&ha->pdev->dev,
1518 		    (ha->response_q_length + 1) * sizeof(response_t),
1519 		    &ha->response_dma, GFP_KERNEL);
1520 		if (ha->response_ring == NULL) {
1521 			qla_printk(KERN_WARNING, ha,
1522 			    "Memory Allocation failed - response_ring\n");
1523 
1524 			qla2x00_mem_free(ha);
1525 			msleep(100);
1526 
1527 			continue;
1528 		}
1529 
1530 		ha->gid_list = dma_alloc_coherent(&ha->pdev->dev, GID_LIST_SIZE,
1531 		    &ha->gid_list_dma, GFP_KERNEL);
1532 		if (ha->gid_list == NULL) {
1533 			qla_printk(KERN_WARNING, ha,
1534 			    "Memory Allocation failed - gid_list\n");
1535 
1536 			qla2x00_mem_free(ha);
1537 			msleep(100);
1538 
1539 			continue;
1540 		}
1541 
1542 		ha->rlc_rsp = dma_alloc_coherent(&ha->pdev->dev,
1543 		    sizeof(rpt_lun_cmd_rsp_t), &ha->rlc_rsp_dma, GFP_KERNEL);
1544 		if (ha->rlc_rsp == NULL) {
1545 			qla_printk(KERN_WARNING, ha,
1546 				"Memory Allocation failed - rlc");
1547 
1548 			qla2x00_mem_free(ha);
1549 			msleep(100);
1550 
1551 			continue;
1552 		}
1553 
1554 		snprintf(name, sizeof(name), "qla2xxx_%ld", ha->host_no);
1555 		ha->s_dma_pool = dma_pool_create(name, &ha->pdev->dev,
1556 		    DMA_POOL_SIZE, 8, 0);
1557 		if (ha->s_dma_pool == NULL) {
1558 			qla_printk(KERN_WARNING, ha,
1559 			    "Memory Allocation failed - s_dma_pool\n");
1560 
1561 			qla2x00_mem_free(ha);
1562 			msleep(100);
1563 
1564 			continue;
1565 		}
1566 
1567 		/* get consistent memory allocated for init control block */
1568 		ha->init_cb = dma_pool_alloc(ha->s_dma_pool, GFP_KERNEL,
1569 		    &ha->init_cb_dma);
1570 		if (ha->init_cb == NULL) {
1571 			qla_printk(KERN_WARNING, ha,
1572 			    "Memory Allocation failed - init_cb\n");
1573 
1574 			qla2x00_mem_free(ha);
1575 			msleep(100);
1576 
1577 			continue;
1578 		}
1579 		memset(ha->init_cb, 0, sizeof(init_cb_t));
1580 
1581 		/* Get consistent memory allocated for Get Port Database cmd */
1582 		ha->iodesc_pd = dma_pool_alloc(ha->s_dma_pool, GFP_KERNEL,
1583 		    &ha->iodesc_pd_dma);
1584 		if (ha->iodesc_pd == NULL) {
1585 			/* error */
1586 			qla_printk(KERN_WARNING, ha,
1587 			    "Memory Allocation failed - iodesc_pd\n");
1588 
1589 			qla2x00_mem_free(ha);
1590 			msleep(100);
1591 
1592 			continue;
1593 		}
1594 		memset(ha->iodesc_pd, 0, PORT_DATABASE_SIZE);
1595 
1596 		/* Allocate ioctl related memory. */
1597 		if (qla2x00_alloc_ioctl_mem(ha)) {
1598 			qla_printk(KERN_WARNING, ha,
1599 			    "Memory Allocation failed - ioctl_mem\n");
1600 
1601 			qla2x00_mem_free(ha);
1602 			msleep(100);
1603 
1604 			continue;
1605 		}
1606 
1607 		if (qla2x00_allocate_sp_pool(ha)) {
1608 			qla_printk(KERN_WARNING, ha,
1609 			    "Memory Allocation failed - "
1610 			    "qla2x00_allocate_sp_pool()\n");
1611 
1612 			qla2x00_mem_free(ha);
1613 			msleep(100);
1614 
1615 			continue;
1616 		}
1617 
1618 		/* Allocate memory for SNS commands */
1619 		if (IS_QLA2100(ha) || IS_QLA2200(ha)) {
1620 			/* Get consistent memory allocated for SNS commands */
1621 			ha->sns_cmd = dma_alloc_coherent(&ha->pdev->dev,
1622 			    sizeof(struct sns_cmd_pkt), &ha->sns_cmd_dma,
1623 			    GFP_KERNEL);
1624 			if (ha->sns_cmd == NULL) {
1625 				/* error */
1626 				qla_printk(KERN_WARNING, ha,
1627 				    "Memory Allocation failed - sns_cmd\n");
1628 
1629 				qla2x00_mem_free(ha);
1630 				msleep(100);
1631 
1632 				continue;
1633 			}
1634 			memset(ha->sns_cmd, 0, sizeof(struct sns_cmd_pkt));
1635 		} else {
1636 			/* Get consistent memory allocated for MS IOCB */
1637 			ha->ms_iocb = dma_pool_alloc(ha->s_dma_pool, GFP_KERNEL,
1638 			    &ha->ms_iocb_dma);
1639 			if (ha->ms_iocb == NULL) {
1640 				/* error */
1641 				qla_printk(KERN_WARNING, ha,
1642 				    "Memory Allocation failed - ms_iocb\n");
1643 
1644 				qla2x00_mem_free(ha);
1645 				msleep(100);
1646 
1647 				continue;
1648 			}
1649 			memset(ha->ms_iocb, 0, sizeof(ms_iocb_entry_t));
1650 
1651 			/*
1652 			 * Get consistent memory allocated for CT SNS
1653 			 * commands
1654 			 */
1655 			ha->ct_sns = dma_alloc_coherent(&ha->pdev->dev,
1656 			    sizeof(struct ct_sns_pkt), &ha->ct_sns_dma,
1657 			    GFP_KERNEL);
1658 			if (ha->ct_sns == NULL) {
1659 				/* error */
1660 				qla_printk(KERN_WARNING, ha,
1661 				    "Memory Allocation failed - ct_sns\n");
1662 
1663 				qla2x00_mem_free(ha);
1664 				msleep(100);
1665 
1666 				continue;
1667 			}
1668 			memset(ha->ct_sns, 0, sizeof(struct ct_sns_pkt));
1669 		}
1670 
1671 		/* Done all allocations without any error. */
1672 		status = 0;
1673 
1674 	} while (retry-- && status != 0);
1675 
1676 	if (status) {
1677 		printk(KERN_WARNING
1678 			"%s(): **** FAILED ****\n", __func__);
1679 	}
1680 
1681 	return(status);
1682 }
1683 
1684 /*
1685 * qla2x00_mem_free
1686 *      Frees all adapter allocated memory.
1687 *
1688 * Input:
1689 *      ha = adapter block pointer.
1690 */
1691 static void
1692 qla2x00_mem_free(scsi_qla_host_t *ha)
1693 {
1694 	struct list_head	*fcpl, *fcptemp;
1695 	fc_port_t	*fcport;
1696 	unsigned long	wtime;/* max wait time if mbx cmd is busy. */
1697 
1698 	if (ha == NULL) {
1699 		/* error */
1700 		DEBUG2(printk("%s(): ERROR invalid ha pointer.\n", __func__));
1701 		return;
1702 	}
1703 
1704 	/* Make sure all other threads are stopped. */
1705 	wtime = 60 * HZ;
1706 	while (ha->dpc_wait && wtime) {
1707 		set_current_state(TASK_INTERRUPTIBLE);
1708 		wtime = schedule_timeout(wtime);
1709 	}
1710 
1711 	/* free ioctl memory */
1712 	qla2x00_free_ioctl_mem(ha);
1713 
1714 	/* free sp pool */
1715 	qla2x00_free_sp_pool(ha);
1716 
1717 	if (ha->sns_cmd)
1718 		dma_free_coherent(&ha->pdev->dev, sizeof(struct sns_cmd_pkt),
1719 		    ha->sns_cmd, ha->sns_cmd_dma);
1720 
1721 	if (ha->ct_sns)
1722 		dma_free_coherent(&ha->pdev->dev, sizeof(struct ct_sns_pkt),
1723 		    ha->ct_sns, ha->ct_sns_dma);
1724 
1725 	if (ha->ms_iocb)
1726 		dma_pool_free(ha->s_dma_pool, ha->ms_iocb, ha->ms_iocb_dma);
1727 
1728 	if (ha->iodesc_pd)
1729 		dma_pool_free(ha->s_dma_pool, ha->iodesc_pd, ha->iodesc_pd_dma);
1730 
1731 	if (ha->init_cb)
1732 		dma_pool_free(ha->s_dma_pool, ha->init_cb, ha->init_cb_dma);
1733 
1734 	if (ha->s_dma_pool)
1735 		dma_pool_destroy(ha->s_dma_pool);
1736 
1737 	if (ha->rlc_rsp)
1738 		dma_free_coherent(&ha->pdev->dev,
1739 		    sizeof(rpt_lun_cmd_rsp_t), ha->rlc_rsp,
1740 		    ha->rlc_rsp_dma);
1741 
1742 	if (ha->gid_list)
1743 		dma_free_coherent(&ha->pdev->dev, GID_LIST_SIZE, ha->gid_list,
1744 		    ha->gid_list_dma);
1745 
1746 	if (ha->response_ring)
1747 		dma_free_coherent(&ha->pdev->dev,
1748 		    (ha->response_q_length + 1) * sizeof(response_t),
1749 		    ha->response_ring, ha->response_dma);
1750 
1751 	if (ha->request_ring)
1752 		dma_free_coherent(&ha->pdev->dev,
1753 		    (ha->request_q_length + 1) * sizeof(request_t),
1754 		    ha->request_ring, ha->request_dma);
1755 
1756 	ha->sns_cmd = NULL;
1757 	ha->sns_cmd_dma = 0;
1758 	ha->ct_sns = NULL;
1759 	ha->ct_sns_dma = 0;
1760 	ha->ms_iocb = NULL;
1761 	ha->ms_iocb_dma = 0;
1762 	ha->iodesc_pd = NULL;
1763 	ha->iodesc_pd_dma = 0;
1764 	ha->init_cb = NULL;
1765 	ha->init_cb_dma = 0;
1766 
1767 	ha->s_dma_pool = NULL;
1768 
1769 	ha->rlc_rsp = NULL;
1770 	ha->rlc_rsp_dma = 0;
1771 	ha->gid_list = NULL;
1772 	ha->gid_list_dma = 0;
1773 
1774 	ha->response_ring = NULL;
1775 	ha->response_dma = 0;
1776 	ha->request_ring = NULL;
1777 	ha->request_dma = 0;
1778 
1779 	list_for_each_safe(fcpl, fcptemp, &ha->fcports) {
1780 		fcport = list_entry(fcpl, fc_port_t, list);
1781 
1782 		/* fc ports */
1783 		list_del_init(&fcport->list);
1784 		kfree(fcport);
1785 	}
1786 	INIT_LIST_HEAD(&ha->fcports);
1787 
1788 	if (ha->fw_dump)
1789 		free_pages((unsigned long)ha->fw_dump, ha->fw_dump_order);
1790 
1791 	if (ha->fw_dump_buffer)
1792 		vfree(ha->fw_dump_buffer);
1793 
1794 	ha->fw_dump = NULL;
1795 	ha->fw_dump_reading = 0;
1796 	ha->fw_dump_buffer = NULL;
1797 }
1798 
1799 /*
1800  * qla2x00_allocate_sp_pool
1801  * 	 This routine is called during initialization to allocate
1802  *  	 memory for local srb_t.
1803  *
1804  * Input:
1805  *	 ha   = adapter block pointer.
1806  *
1807  * Context:
1808  *      Kernel context.
1809  *
1810  * Note: Sets the ref_count for non Null sp to one.
1811  */
1812 static int
1813 qla2x00_allocate_sp_pool(scsi_qla_host_t *ha)
1814 {
1815 	int      rval;
1816 
1817 	rval = QLA_SUCCESS;
1818 	ha->srb_mempool = mempool_create(SRB_MIN_REQ, mempool_alloc_slab,
1819 	    mempool_free_slab, srb_cachep);
1820 	if (ha->srb_mempool == NULL) {
1821 		qla_printk(KERN_INFO, ha, "Unable to allocate SRB mempool.\n");
1822 		rval = QLA_FUNCTION_FAILED;
1823 	}
1824 	return (rval);
1825 }
1826 
1827 /*
1828  *  This routine frees all adapter allocated memory.
1829  *
1830  */
1831 static void
1832 qla2x00_free_sp_pool( scsi_qla_host_t *ha)
1833 {
1834 	if (ha->srb_mempool) {
1835 		mempool_destroy(ha->srb_mempool);
1836 		ha->srb_mempool = NULL;
1837 	}
1838 }
1839 
1840 /**************************************************************************
1841 * qla2x00_do_dpc
1842 *   This kernel thread is a task that is schedule by the interrupt handler
1843 *   to perform the background processing for interrupts.
1844 *
1845 * Notes:
1846 * This task always run in the context of a kernel thread.  It
1847 * is kick-off by the driver's detect code and starts up
1848 * up one per adapter. It immediately goes to sleep and waits for
1849 * some fibre event.  When either the interrupt handler or
1850 * the timer routine detects a event it will one of the task
1851 * bits then wake us up.
1852 **************************************************************************/
1853 static int
1854 qla2x00_do_dpc(void *data)
1855 {
1856 	DECLARE_MUTEX_LOCKED(sem);
1857 	scsi_qla_host_t *ha;
1858 	fc_port_t	*fcport;
1859 	uint8_t		status;
1860 	uint16_t	next_loopid;
1861 
1862 	ha = (scsi_qla_host_t *)data;
1863 
1864 	lock_kernel();
1865 
1866 	daemonize("%s_dpc", ha->host_str);
1867 	allow_signal(SIGHUP);
1868 
1869 	ha->dpc_wait = &sem;
1870 
1871 	set_user_nice(current, -20);
1872 
1873 	unlock_kernel();
1874 
1875 	complete(&ha->dpc_inited);
1876 
1877 	while (1) {
1878 		DEBUG3(printk("qla2x00: DPC handler sleeping\n"));
1879 
1880 		if (down_interruptible(&sem))
1881 			break;
1882 
1883 		if (ha->dpc_should_die)
1884 			break;
1885 
1886 		DEBUG3(printk("qla2x00: DPC handler waking up\n"));
1887 
1888 		/* Initialization not yet finished. Don't do anything yet. */
1889 		if (!ha->flags.init_done || ha->dpc_active)
1890 			continue;
1891 
1892 		DEBUG3(printk("scsi(%ld): DPC handler\n", ha->host_no));
1893 
1894 		ha->dpc_active = 1;
1895 
1896 		if (ha->flags.mbox_busy) {
1897 			ha->dpc_active = 0;
1898 			continue;
1899 		}
1900 
1901 		if (test_and_clear_bit(ISP_ABORT_NEEDED, &ha->dpc_flags)) {
1902 
1903 			DEBUG(printk("scsi(%ld): dpc: sched "
1904 			    "qla2x00_abort_isp ha = %p\n",
1905 			    ha->host_no, ha));
1906 			if (!(test_and_set_bit(ABORT_ISP_ACTIVE,
1907 			    &ha->dpc_flags))) {
1908 
1909 				if (qla2x00_abort_isp(ha)) {
1910 					/* failed. retry later */
1911 					set_bit(ISP_ABORT_NEEDED,
1912 					    &ha->dpc_flags);
1913 				}
1914 				clear_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags);
1915 			}
1916 			DEBUG(printk("scsi(%ld): dpc: qla2x00_abort_isp end\n",
1917 			    ha->host_no));
1918 		}
1919 
1920 		if (test_and_clear_bit(RESET_MARKER_NEEDED, &ha->dpc_flags) &&
1921 		    (!(test_and_set_bit(RESET_ACTIVE, &ha->dpc_flags)))) {
1922 
1923 			DEBUG(printk("scsi(%ld): qla2x00_reset_marker()\n",
1924 			    ha->host_no));
1925 
1926 			qla2x00_rst_aen(ha);
1927 			clear_bit(RESET_ACTIVE, &ha->dpc_flags);
1928 		}
1929 
1930 		/* Retry each device up to login retry count */
1931 		if ((test_and_clear_bit(RELOGIN_NEEDED, &ha->dpc_flags)) &&
1932 		    !test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags) &&
1933 		    atomic_read(&ha->loop_state) != LOOP_DOWN) {
1934 
1935 			DEBUG(printk("scsi(%ld): qla2x00_port_login()\n",
1936 			    ha->host_no));
1937 
1938 			next_loopid = 0;
1939 			list_for_each_entry(fcport, &ha->fcports, list) {
1940 				if (fcport->port_type != FCT_TARGET)
1941 					continue;
1942 
1943 				/*
1944 				 * If the port is not ONLINE then try to login
1945 				 * to it if we haven't run out of retries.
1946 				 */
1947 				if (atomic_read(&fcport->state) != FCS_ONLINE &&
1948 				    fcport->login_retry) {
1949 
1950 					fcport->login_retry--;
1951 					if (fcport->flags & FCF_FABRIC_DEVICE) {
1952 						if (fcport->flags &
1953 						    FCF_TAPE_PRESENT)
1954 							qla2x00_fabric_logout(
1955 							    ha,
1956 							    fcport->loop_id);
1957 						status = qla2x00_fabric_login(
1958 						    ha, fcport, &next_loopid);
1959 					} else
1960 						status =
1961 						    qla2x00_local_device_login(
1962 							ha, fcport->loop_id);
1963 
1964 					if (status == QLA_SUCCESS) {
1965 						fcport->old_loop_id = fcport->loop_id;
1966 
1967 						DEBUG(printk("scsi(%ld): port login OK: logged in ID 0x%x\n",
1968 						    ha->host_no, fcport->loop_id));
1969 
1970 						fcport->port_login_retry_count =
1971 						    ha->port_down_retry_count * PORT_RETRY_TIME;
1972 						atomic_set(&fcport->state, FCS_ONLINE);
1973 						atomic_set(&fcport->port_down_timer,
1974 						    ha->port_down_retry_count * PORT_RETRY_TIME);
1975 
1976 						fcport->login_retry = 0;
1977 					} else if (status == 1) {
1978 						set_bit(RELOGIN_NEEDED, &ha->dpc_flags);
1979 						/* retry the login again */
1980 						DEBUG(printk("scsi(%ld): Retrying %d login again loop_id 0x%x\n",
1981 						    ha->host_no,
1982 						    fcport->login_retry, fcport->loop_id));
1983 					} else {
1984 						fcport->login_retry = 0;
1985 					}
1986 				}
1987 				if (test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags))
1988 					break;
1989 			}
1990 			DEBUG(printk("scsi(%ld): qla2x00_port_login - end\n",
1991 			    ha->host_no));
1992 		}
1993 
1994 		if ((test_bit(LOGIN_RETRY_NEEDED, &ha->dpc_flags)) &&
1995 		    atomic_read(&ha->loop_state) != LOOP_DOWN) {
1996 
1997 			clear_bit(LOGIN_RETRY_NEEDED, &ha->dpc_flags);
1998 			DEBUG(printk("scsi(%ld): qla2x00_login_retry()\n",
1999 			    ha->host_no));
2000 
2001 			set_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags);
2002 
2003 			DEBUG(printk("scsi(%ld): qla2x00_login_retry - end\n",
2004 			    ha->host_no));
2005 		}
2006 
2007 		if (test_and_clear_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags)) {
2008 
2009 			DEBUG(printk("scsi(%ld): qla2x00_loop_resync()\n",
2010 			    ha->host_no));
2011 
2012 			if (!(test_and_set_bit(LOOP_RESYNC_ACTIVE,
2013 			    &ha->dpc_flags))) {
2014 
2015 				qla2x00_loop_resync(ha);
2016 
2017 				clear_bit(LOOP_RESYNC_ACTIVE, &ha->dpc_flags);
2018 			}
2019 
2020 			DEBUG(printk("scsi(%ld): qla2x00_loop_resync - end\n",
2021 			    ha->host_no));
2022 		}
2023 
2024 		if (test_and_clear_bit(FCPORT_RESCAN_NEEDED, &ha->dpc_flags)) {
2025 
2026 			DEBUG(printk("scsi(%ld): Rescan flagged fcports...\n",
2027 			    ha->host_no));
2028 
2029 			qla2x00_rescan_fcports(ha);
2030 
2031 			DEBUG(printk("scsi(%ld): Rescan flagged fcports..."
2032 			    "end.\n",
2033 			    ha->host_no));
2034 		}
2035 
2036 		if (!ha->interrupts_on)
2037 			qla2x00_enable_intrs(ha);
2038 
2039 		ha->dpc_active = 0;
2040 	} /* End of while(1) */
2041 
2042 	DEBUG(printk("scsi(%ld): DPC handler exiting\n", ha->host_no));
2043 
2044 	/*
2045 	 * Make sure that nobody tries to wake us up again.
2046 	 */
2047 	ha->dpc_wait = NULL;
2048 	ha->dpc_active = 0;
2049 
2050 	complete_and_exit(&ha->dpc_exited, 0);
2051 }
2052 
2053 /*
2054 *  qla2x00_rst_aen
2055 *      Processes asynchronous reset.
2056 *
2057 * Input:
2058 *      ha  = adapter block pointer.
2059 */
2060 static void
2061 qla2x00_rst_aen(scsi_qla_host_t *ha)
2062 {
2063 	if (ha->flags.online && !ha->flags.reset_active &&
2064 	    !atomic_read(&ha->loop_down_timer) &&
2065 	    !(test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags))) {
2066 		do {
2067 			clear_bit(RESET_MARKER_NEEDED, &ha->dpc_flags);
2068 
2069 			/*
2070 			 * Issue marker command only when we are going to start
2071 			 * the I/O.
2072 			 */
2073 			ha->marker_needed = 1;
2074 		} while (!atomic_read(&ha->loop_down_timer) &&
2075 		    (test_bit(RESET_MARKER_NEEDED, &ha->dpc_flags)));
2076 	}
2077 }
2078 
2079 
2080 /*
2081  * This routine will allocate SP from the free queue
2082  * input:
2083  *        scsi_qla_host_t *
2084  * output:
2085  *        srb_t * or NULL
2086  */
2087 static srb_t *
2088 qla2x00_get_new_sp(scsi_qla_host_t *ha)
2089 {
2090 	srb_t *sp;
2091 
2092 	sp = mempool_alloc(ha->srb_mempool, GFP_ATOMIC);
2093 	if (sp)
2094 		atomic_set(&sp->ref_count, 1);
2095 	return (sp);
2096 }
2097 
2098 static void
2099 qla2x00_sp_free_dma(scsi_qla_host_t *ha, srb_t *sp)
2100 {
2101 	struct scsi_cmnd *cmd = sp->cmd;
2102 
2103 	if (sp->flags & SRB_DMA_VALID) {
2104 		if (cmd->use_sg) {
2105 			dma_unmap_sg(&ha->pdev->dev, cmd->request_buffer,
2106 			    cmd->use_sg, cmd->sc_data_direction);
2107 		} else if (cmd->request_bufflen) {
2108 			dma_unmap_single(&ha->pdev->dev, sp->dma_handle,
2109 			    cmd->request_bufflen, cmd->sc_data_direction);
2110 		}
2111 		sp->flags &= ~SRB_DMA_VALID;
2112 	}
2113 }
2114 
2115 void
2116 qla2x00_sp_compl(scsi_qla_host_t *ha, srb_t *sp)
2117 {
2118 	struct scsi_cmnd *cmd = sp->cmd;
2119 
2120 	qla2x00_sp_free_dma(ha, sp);
2121 
2122 	CMD_SP(cmd) = NULL;
2123 	mempool_free(sp, ha->srb_mempool);
2124 
2125 	cmd->scsi_done(cmd);
2126 }
2127 
2128 /**************************************************************************
2129 *   qla2x00_timer
2130 *
2131 * Description:
2132 *   One second timer
2133 *
2134 * Context: Interrupt
2135 ***************************************************************************/
2136 static void
2137 qla2x00_timer(scsi_qla_host_t *ha)
2138 {
2139 	unsigned long	cpu_flags = 0;
2140 	fc_port_t	*fcport;
2141 	int		start_dpc = 0;
2142 	int		index;
2143 	srb_t		*sp;
2144 	int		t;
2145 
2146 	/*
2147 	 * Ports - Port down timer.
2148 	 *
2149 	 * Whenever, a port is in the LOST state we start decrementing its port
2150 	 * down timer every second until it reaches zero. Once  it reaches zero
2151 	 * the port it marked DEAD.
2152 	 */
2153 	t = 0;
2154 	list_for_each_entry(fcport, &ha->fcports, list) {
2155 		if (fcport->port_type != FCT_TARGET)
2156 			continue;
2157 
2158 		if (atomic_read(&fcport->state) == FCS_DEVICE_LOST) {
2159 
2160 			if (atomic_read(&fcport->port_down_timer) == 0)
2161 				continue;
2162 
2163 			if (atomic_dec_and_test(&fcport->port_down_timer) != 0)
2164 				atomic_set(&fcport->state, FCS_DEVICE_DEAD);
2165 
2166 			DEBUG(printk("scsi(%ld): fcport-%d - port retry count: "
2167 			    "%d remainning\n",
2168 			    ha->host_no,
2169 			    t, atomic_read(&fcport->port_down_timer)));
2170 		}
2171 		t++;
2172 	} /* End of for fcport  */
2173 
2174 
2175 	/* Loop down handler. */
2176 	if (atomic_read(&ha->loop_down_timer) > 0 &&
2177 	    !(test_bit(ABORT_ISP_ACTIVE, &ha->dpc_flags)) && ha->flags.online) {
2178 
2179 		if (atomic_read(&ha->loop_down_timer) ==
2180 		    ha->loop_down_abort_time) {
2181 
2182 			DEBUG(printk("scsi(%ld): Loop Down - aborting the "
2183 			    "queues before time expire\n",
2184 			    ha->host_no));
2185 
2186 			if (!IS_QLA2100(ha) && ha->link_down_timeout)
2187 				atomic_set(&ha->loop_state, LOOP_DEAD);
2188 
2189 			/* Schedule an ISP abort to return any tape commands. */
2190 			spin_lock_irqsave(&ha->hardware_lock, cpu_flags);
2191 			for (index = 1; index < MAX_OUTSTANDING_COMMANDS;
2192 			    index++) {
2193 				fc_port_t *sfcp;
2194 
2195 				sp = ha->outstanding_cmds[index];
2196 				if (!sp)
2197 					continue;
2198 				sfcp = sp->fcport;
2199 				if (!(sfcp->flags & FCF_TAPE_PRESENT))
2200 					continue;
2201 
2202 				set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
2203 				break;
2204 			}
2205 			spin_unlock_irqrestore(&ha->hardware_lock, cpu_flags);
2206 
2207 			set_bit(ABORT_QUEUES_NEEDED, &ha->dpc_flags);
2208 			start_dpc++;
2209 		}
2210 
2211 		/* if the loop has been down for 4 minutes, reinit adapter */
2212 		if (atomic_dec_and_test(&ha->loop_down_timer) != 0) {
2213 			DEBUG(printk("scsi(%ld): Loop down exceed 4 mins - "
2214 			    "restarting queues.\n",
2215 			    ha->host_no));
2216 
2217 			set_bit(RESTART_QUEUES_NEEDED, &ha->dpc_flags);
2218 			start_dpc++;
2219 
2220 			if (!(ha->device_flags & DFLG_NO_CABLE)) {
2221 				DEBUG(printk("scsi(%ld): Loop down - "
2222 				    "aborting ISP.\n",
2223 				    ha->host_no));
2224 				qla_printk(KERN_WARNING, ha,
2225 				    "Loop down - aborting ISP.\n");
2226 
2227 				set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags);
2228 			}
2229 		}
2230 		DEBUG3(printk("scsi(%ld): Loop Down - seconds remainning %d\n",
2231 		    ha->host_no,
2232 		    atomic_read(&ha->loop_down_timer)));
2233 	}
2234 
2235 	/* Schedule the DPC routine if needed */
2236 	if ((test_bit(ISP_ABORT_NEEDED, &ha->dpc_flags) ||
2237 	    test_bit(LOOP_RESYNC_NEEDED, &ha->dpc_flags) ||
2238 	    start_dpc ||
2239 	    test_bit(LOGIN_RETRY_NEEDED, &ha->dpc_flags) ||
2240 	    test_bit(RESET_MARKER_NEEDED, &ha->dpc_flags) ||
2241 	    test_bit(RELOGIN_NEEDED, &ha->dpc_flags)) &&
2242 	    ha->dpc_wait && !ha->dpc_active) {
2243 
2244 		up(ha->dpc_wait);
2245 	}
2246 
2247 	qla2x00_restart_timer(ha, WATCH_INTERVAL);
2248 }
2249 
2250 /* XXX(hch): crude hack to emulate a down_timeout() */
2251 int
2252 qla2x00_down_timeout(struct semaphore *sema, unsigned long timeout)
2253 {
2254 	const unsigned int step = HZ/10;
2255 
2256 	do {
2257 		if (!down_trylock(sema))
2258 			return 0;
2259 		set_current_state(TASK_INTERRUPTIBLE);
2260 		if (schedule_timeout(step))
2261 			break;
2262 	} while ((timeout -= step) > 0);
2263 
2264 	return -ETIMEDOUT;
2265 }
2266 
2267 /**
2268  * qla2x00_module_init - Module initialization.
2269  **/
2270 static int __init
2271 qla2x00_module_init(void)
2272 {
2273 	/* Allocate cache for SRBs. */
2274 	srb_cachep = kmem_cache_create("qla2xxx_srbs", sizeof(srb_t), 0,
2275 	    SLAB_HWCACHE_ALIGN, NULL, NULL);
2276 	if (srb_cachep == NULL) {
2277 		printk(KERN_ERR
2278 		    "qla2xxx: Unable to allocate SRB cache...Failing load!\n");
2279 		return -ENOMEM;
2280 	}
2281 
2282 	/* Derive version string. */
2283 	strcpy(qla2x00_version_str, QLA2XXX_VERSION);
2284 #if DEBUG_QLA2100
2285 	strcat(qla2x00_version_str, "-debug");
2286 #endif
2287 	qla2xxx_transport_template =
2288 	    fc_attach_transport(&qla2xxx_transport_functions);
2289 	if (!qla2xxx_transport_template)
2290 		return -ENODEV;
2291 
2292 	printk(KERN_INFO "QLogic Fibre Channel HBA Driver\n");
2293 	return 0;
2294 }
2295 
2296 /**
2297  * qla2x00_module_exit - Module cleanup.
2298  **/
2299 static void __exit
2300 qla2x00_module_exit(void)
2301 {
2302 	kmem_cache_destroy(srb_cachep);
2303 	fc_release_transport(qla2xxx_transport_template);
2304 }
2305 
2306 module_init(qla2x00_module_init);
2307 module_exit(qla2x00_module_exit);
2308 
2309 MODULE_AUTHOR("QLogic Corporation");
2310 MODULE_DESCRIPTION("QLogic Fibre Channel HBA Driver");
2311 MODULE_LICENSE("GPL");
2312 MODULE_VERSION(QLA2XXX_VERSION);
2313