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