1 /* 2 * QLogic Fibre Channel HBA Driver 3 * Copyright (c) 2003-2012 QLogic Corporation 4 * 5 * See LICENSE.qla2xxx for copyright and licensing details. 6 */ 7 #include "qla_def.h" 8 #include "qla_target.h" 9 10 #include <linux/kthread.h> 11 #include <linux/vmalloc.h> 12 #include <linux/slab.h> 13 #include <linux/delay.h> 14 15 static int qla24xx_vport_disable(struct fc_vport *, bool); 16 17 /* SYSFS attributes --------------------------------------------------------- */ 18 19 static ssize_t 20 qla2x00_sysfs_read_fw_dump(struct file *filp, struct kobject *kobj, 21 struct bin_attribute *bin_attr, 22 char *buf, loff_t off, size_t count) 23 { 24 struct scsi_qla_host *vha = shost_priv(dev_to_shost(container_of(kobj, 25 struct device, kobj))); 26 struct qla_hw_data *ha = vha->hw; 27 int rval = 0; 28 29 if (!(ha->fw_dump_reading || ha->mctp_dump_reading)) 30 return 0; 31 32 if (IS_QLA82XX(ha)) { 33 if (off < ha->md_template_size) { 34 rval = memory_read_from_buffer(buf, count, 35 &off, ha->md_tmplt_hdr, ha->md_template_size); 36 return rval; 37 } 38 off -= ha->md_template_size; 39 rval = memory_read_from_buffer(buf, count, 40 &off, ha->md_dump, ha->md_dump_size); 41 return rval; 42 } else if (ha->mctp_dumped && ha->mctp_dump_reading) 43 return memory_read_from_buffer(buf, count, &off, ha->mctp_dump, 44 MCTP_DUMP_SIZE); 45 else if (ha->fw_dump_reading) 46 return memory_read_from_buffer(buf, count, &off, ha->fw_dump, 47 ha->fw_dump_len); 48 else 49 return 0; 50 } 51 52 static ssize_t 53 qla2x00_sysfs_write_fw_dump(struct file *filp, struct kobject *kobj, 54 struct bin_attribute *bin_attr, 55 char *buf, loff_t off, size_t count) 56 { 57 struct scsi_qla_host *vha = shost_priv(dev_to_shost(container_of(kobj, 58 struct device, kobj))); 59 struct qla_hw_data *ha = vha->hw; 60 int reading; 61 62 if (off != 0) 63 return (0); 64 65 reading = simple_strtol(buf, NULL, 10); 66 switch (reading) { 67 case 0: 68 if (!ha->fw_dump_reading) 69 break; 70 71 ql_log(ql_log_info, vha, 0x705d, 72 "Firmware dump cleared on (%ld).\n", vha->host_no); 73 74 if (IS_QLA82XX(vha->hw)) { 75 qla82xx_md_free(vha); 76 qla82xx_md_prep(vha); 77 } 78 ha->fw_dump_reading = 0; 79 ha->fw_dumped = 0; 80 break; 81 case 1: 82 if (ha->fw_dumped && !ha->fw_dump_reading) { 83 ha->fw_dump_reading = 1; 84 85 ql_log(ql_log_info, vha, 0x705e, 86 "Raw firmware dump ready for read on (%ld).\n", 87 vha->host_no); 88 } 89 break; 90 case 2: 91 qla2x00_alloc_fw_dump(vha); 92 break; 93 case 3: 94 if (IS_QLA82XX(ha)) { 95 qla82xx_idc_lock(ha); 96 qla82xx_set_reset_owner(vha); 97 qla82xx_idc_unlock(ha); 98 } else 99 qla2x00_system_error(vha); 100 break; 101 case 4: 102 if (IS_QLA82XX(ha)) { 103 if (ha->md_tmplt_hdr) 104 ql_dbg(ql_dbg_user, vha, 0x705b, 105 "MiniDump supported with this firmware.\n"); 106 else 107 ql_dbg(ql_dbg_user, vha, 0x709d, 108 "MiniDump not supported with this firmware.\n"); 109 } 110 break; 111 case 5: 112 if (IS_QLA82XX(ha)) 113 set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags); 114 break; 115 case 6: 116 if (!ha->mctp_dump_reading) 117 break; 118 ql_log(ql_log_info, vha, 0x70c1, 119 "MCTP dump cleared on (%ld).\n", vha->host_no); 120 ha->mctp_dump_reading = 0; 121 ha->mctp_dumped = 0; 122 break; 123 case 7: 124 if (ha->mctp_dumped && !ha->mctp_dump_reading) { 125 ha->mctp_dump_reading = 1; 126 ql_log(ql_log_info, vha, 0x70c2, 127 "Raw mctp dump ready for read on (%ld).\n", 128 vha->host_no); 129 } 130 break; 131 } 132 return count; 133 } 134 135 static struct bin_attribute sysfs_fw_dump_attr = { 136 .attr = { 137 .name = "fw_dump", 138 .mode = S_IRUSR | S_IWUSR, 139 }, 140 .size = 0, 141 .read = qla2x00_sysfs_read_fw_dump, 142 .write = qla2x00_sysfs_write_fw_dump, 143 }; 144 145 static ssize_t 146 qla2x00_sysfs_read_nvram(struct file *filp, struct kobject *kobj, 147 struct bin_attribute *bin_attr, 148 char *buf, loff_t off, size_t count) 149 { 150 struct scsi_qla_host *vha = shost_priv(dev_to_shost(container_of(kobj, 151 struct device, kobj))); 152 struct qla_hw_data *ha = vha->hw; 153 154 if (!capable(CAP_SYS_ADMIN)) 155 return 0; 156 157 if (IS_NOCACHE_VPD_TYPE(ha)) 158 ha->isp_ops->read_optrom(vha, ha->nvram, ha->flt_region_nvram << 2, 159 ha->nvram_size); 160 return memory_read_from_buffer(buf, count, &off, ha->nvram, 161 ha->nvram_size); 162 } 163 164 static ssize_t 165 qla2x00_sysfs_write_nvram(struct file *filp, struct kobject *kobj, 166 struct bin_attribute *bin_attr, 167 char *buf, loff_t off, size_t count) 168 { 169 struct scsi_qla_host *vha = shost_priv(dev_to_shost(container_of(kobj, 170 struct device, kobj))); 171 struct qla_hw_data *ha = vha->hw; 172 uint16_t cnt; 173 174 if (!capable(CAP_SYS_ADMIN) || off != 0 || count != ha->nvram_size || 175 !ha->isp_ops->write_nvram) 176 return -EINVAL; 177 178 /* Checksum NVRAM. */ 179 if (IS_FWI2_CAPABLE(ha)) { 180 uint32_t *iter; 181 uint32_t chksum; 182 183 iter = (uint32_t *)buf; 184 chksum = 0; 185 for (cnt = 0; cnt < ((count >> 2) - 1); cnt++) 186 chksum += le32_to_cpu(*iter++); 187 chksum = ~chksum + 1; 188 *iter = cpu_to_le32(chksum); 189 } else { 190 uint8_t *iter; 191 uint8_t chksum; 192 193 iter = (uint8_t *)buf; 194 chksum = 0; 195 for (cnt = 0; cnt < count - 1; cnt++) 196 chksum += *iter++; 197 chksum = ~chksum + 1; 198 *iter = chksum; 199 } 200 201 if (qla2x00_wait_for_hba_online(vha) != QLA_SUCCESS) { 202 ql_log(ql_log_warn, vha, 0x705f, 203 "HBA not online, failing NVRAM update.\n"); 204 return -EAGAIN; 205 } 206 207 /* Write NVRAM. */ 208 ha->isp_ops->write_nvram(vha, (uint8_t *)buf, ha->nvram_base, count); 209 ha->isp_ops->read_nvram(vha, (uint8_t *)ha->nvram, ha->nvram_base, 210 count); 211 212 ql_dbg(ql_dbg_user, vha, 0x7060, 213 "Setting ISP_ABORT_NEEDED\n"); 214 /* NVRAM settings take effect immediately. */ 215 set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags); 216 qla2xxx_wake_dpc(vha); 217 qla2x00_wait_for_chip_reset(vha); 218 219 return count; 220 } 221 222 static struct bin_attribute sysfs_nvram_attr = { 223 .attr = { 224 .name = "nvram", 225 .mode = S_IRUSR | S_IWUSR, 226 }, 227 .size = 512, 228 .read = qla2x00_sysfs_read_nvram, 229 .write = qla2x00_sysfs_write_nvram, 230 }; 231 232 static ssize_t 233 qla2x00_sysfs_read_optrom(struct file *filp, struct kobject *kobj, 234 struct bin_attribute *bin_attr, 235 char *buf, loff_t off, size_t count) 236 { 237 struct scsi_qla_host *vha = shost_priv(dev_to_shost(container_of(kobj, 238 struct device, kobj))); 239 struct qla_hw_data *ha = vha->hw; 240 241 if (ha->optrom_state != QLA_SREADING) 242 return 0; 243 244 return memory_read_from_buffer(buf, count, &off, ha->optrom_buffer, 245 ha->optrom_region_size); 246 } 247 248 static ssize_t 249 qla2x00_sysfs_write_optrom(struct file *filp, struct kobject *kobj, 250 struct bin_attribute *bin_attr, 251 char *buf, loff_t off, size_t count) 252 { 253 struct scsi_qla_host *vha = shost_priv(dev_to_shost(container_of(kobj, 254 struct device, kobj))); 255 struct qla_hw_data *ha = vha->hw; 256 257 if (ha->optrom_state != QLA_SWRITING) 258 return -EINVAL; 259 if (off > ha->optrom_region_size) 260 return -ERANGE; 261 if (off + count > ha->optrom_region_size) 262 count = ha->optrom_region_size - off; 263 264 memcpy(&ha->optrom_buffer[off], buf, count); 265 266 return count; 267 } 268 269 static struct bin_attribute sysfs_optrom_attr = { 270 .attr = { 271 .name = "optrom", 272 .mode = S_IRUSR | S_IWUSR, 273 }, 274 .size = 0, 275 .read = qla2x00_sysfs_read_optrom, 276 .write = qla2x00_sysfs_write_optrom, 277 }; 278 279 static ssize_t 280 qla2x00_sysfs_write_optrom_ctl(struct file *filp, struct kobject *kobj, 281 struct bin_attribute *bin_attr, 282 char *buf, loff_t off, size_t count) 283 { 284 struct scsi_qla_host *vha = shost_priv(dev_to_shost(container_of(kobj, 285 struct device, kobj))); 286 struct qla_hw_data *ha = vha->hw; 287 288 uint32_t start = 0; 289 uint32_t size = ha->optrom_size; 290 int val, valid; 291 292 if (off) 293 return -EINVAL; 294 295 if (unlikely(pci_channel_offline(ha->pdev))) 296 return -EAGAIN; 297 298 if (sscanf(buf, "%d:%x:%x", &val, &start, &size) < 1) 299 return -EINVAL; 300 if (start > ha->optrom_size) 301 return -EINVAL; 302 303 switch (val) { 304 case 0: 305 if (ha->optrom_state != QLA_SREADING && 306 ha->optrom_state != QLA_SWRITING) 307 return -EINVAL; 308 309 ha->optrom_state = QLA_SWAITING; 310 311 ql_dbg(ql_dbg_user, vha, 0x7061, 312 "Freeing flash region allocation -- 0x%x bytes.\n", 313 ha->optrom_region_size); 314 315 vfree(ha->optrom_buffer); 316 ha->optrom_buffer = NULL; 317 break; 318 case 1: 319 if (ha->optrom_state != QLA_SWAITING) 320 return -EINVAL; 321 322 ha->optrom_region_start = start; 323 ha->optrom_region_size = start + size > ha->optrom_size ? 324 ha->optrom_size - start : size; 325 326 ha->optrom_state = QLA_SREADING; 327 ha->optrom_buffer = vmalloc(ha->optrom_region_size); 328 if (ha->optrom_buffer == NULL) { 329 ql_log(ql_log_warn, vha, 0x7062, 330 "Unable to allocate memory for optrom retrieval " 331 "(%x).\n", ha->optrom_region_size); 332 333 ha->optrom_state = QLA_SWAITING; 334 return -ENOMEM; 335 } 336 337 if (qla2x00_wait_for_hba_online(vha) != QLA_SUCCESS) { 338 ql_log(ql_log_warn, vha, 0x7063, 339 "HBA not online, failing NVRAM update.\n"); 340 return -EAGAIN; 341 } 342 343 ql_dbg(ql_dbg_user, vha, 0x7064, 344 "Reading flash region -- 0x%x/0x%x.\n", 345 ha->optrom_region_start, ha->optrom_region_size); 346 347 memset(ha->optrom_buffer, 0, ha->optrom_region_size); 348 ha->isp_ops->read_optrom(vha, ha->optrom_buffer, 349 ha->optrom_region_start, ha->optrom_region_size); 350 break; 351 case 2: 352 if (ha->optrom_state != QLA_SWAITING) 353 return -EINVAL; 354 355 /* 356 * We need to be more restrictive on which FLASH regions are 357 * allowed to be updated via user-space. Regions accessible 358 * via this method include: 359 * 360 * ISP21xx/ISP22xx/ISP23xx type boards: 361 * 362 * 0x000000 -> 0x020000 -- Boot code. 363 * 364 * ISP2322/ISP24xx type boards: 365 * 366 * 0x000000 -> 0x07ffff -- Boot code. 367 * 0x080000 -> 0x0fffff -- Firmware. 368 * 369 * ISP25xx type boards: 370 * 371 * 0x000000 -> 0x07ffff -- Boot code. 372 * 0x080000 -> 0x0fffff -- Firmware. 373 * 0x120000 -> 0x12ffff -- VPD and HBA parameters. 374 */ 375 valid = 0; 376 if (ha->optrom_size == OPTROM_SIZE_2300 && start == 0) 377 valid = 1; 378 else if (start == (ha->flt_region_boot * 4) || 379 start == (ha->flt_region_fw * 4)) 380 valid = 1; 381 else if (IS_QLA24XX_TYPE(ha) || IS_QLA25XX(ha) 382 || IS_CNA_CAPABLE(ha) || IS_QLA2031(ha)) 383 valid = 1; 384 if (!valid) { 385 ql_log(ql_log_warn, vha, 0x7065, 386 "Invalid start region 0x%x/0x%x.\n", start, size); 387 return -EINVAL; 388 } 389 390 ha->optrom_region_start = start; 391 ha->optrom_region_size = start + size > ha->optrom_size ? 392 ha->optrom_size - start : size; 393 394 ha->optrom_state = QLA_SWRITING; 395 ha->optrom_buffer = vmalloc(ha->optrom_region_size); 396 if (ha->optrom_buffer == NULL) { 397 ql_log(ql_log_warn, vha, 0x7066, 398 "Unable to allocate memory for optrom update " 399 "(%x)\n", ha->optrom_region_size); 400 401 ha->optrom_state = QLA_SWAITING; 402 return -ENOMEM; 403 } 404 405 ql_dbg(ql_dbg_user, vha, 0x7067, 406 "Staging flash region write -- 0x%x/0x%x.\n", 407 ha->optrom_region_start, ha->optrom_region_size); 408 409 memset(ha->optrom_buffer, 0, ha->optrom_region_size); 410 break; 411 case 3: 412 if (ha->optrom_state != QLA_SWRITING) 413 return -EINVAL; 414 415 if (qla2x00_wait_for_hba_online(vha) != QLA_SUCCESS) { 416 ql_log(ql_log_warn, vha, 0x7068, 417 "HBA not online, failing flash update.\n"); 418 return -EAGAIN; 419 } 420 421 ql_dbg(ql_dbg_user, vha, 0x7069, 422 "Writing flash region -- 0x%x/0x%x.\n", 423 ha->optrom_region_start, ha->optrom_region_size); 424 425 ha->isp_ops->write_optrom(vha, ha->optrom_buffer, 426 ha->optrom_region_start, ha->optrom_region_size); 427 break; 428 default: 429 return -EINVAL; 430 } 431 return count; 432 } 433 434 static struct bin_attribute sysfs_optrom_ctl_attr = { 435 .attr = { 436 .name = "optrom_ctl", 437 .mode = S_IWUSR, 438 }, 439 .size = 0, 440 .write = qla2x00_sysfs_write_optrom_ctl, 441 }; 442 443 static ssize_t 444 qla2x00_sysfs_read_vpd(struct file *filp, struct kobject *kobj, 445 struct bin_attribute *bin_attr, 446 char *buf, loff_t off, size_t count) 447 { 448 struct scsi_qla_host *vha = shost_priv(dev_to_shost(container_of(kobj, 449 struct device, kobj))); 450 struct qla_hw_data *ha = vha->hw; 451 452 if (unlikely(pci_channel_offline(ha->pdev))) 453 return -EAGAIN; 454 455 if (!capable(CAP_SYS_ADMIN)) 456 return -EINVAL; 457 458 if (IS_NOCACHE_VPD_TYPE(ha)) 459 ha->isp_ops->read_optrom(vha, ha->vpd, ha->flt_region_vpd << 2, 460 ha->vpd_size); 461 return memory_read_from_buffer(buf, count, &off, ha->vpd, ha->vpd_size); 462 } 463 464 static ssize_t 465 qla2x00_sysfs_write_vpd(struct file *filp, struct kobject *kobj, 466 struct bin_attribute *bin_attr, 467 char *buf, loff_t off, size_t count) 468 { 469 struct scsi_qla_host *vha = shost_priv(dev_to_shost(container_of(kobj, 470 struct device, kobj))); 471 struct qla_hw_data *ha = vha->hw; 472 uint8_t *tmp_data; 473 474 if (unlikely(pci_channel_offline(ha->pdev))) 475 return 0; 476 477 if (!capable(CAP_SYS_ADMIN) || off != 0 || count != ha->vpd_size || 478 !ha->isp_ops->write_nvram) 479 return 0; 480 481 if (qla2x00_wait_for_hba_online(vha) != QLA_SUCCESS) { 482 ql_log(ql_log_warn, vha, 0x706a, 483 "HBA not online, failing VPD update.\n"); 484 return -EAGAIN; 485 } 486 487 /* Write NVRAM. */ 488 ha->isp_ops->write_nvram(vha, (uint8_t *)buf, ha->vpd_base, count); 489 ha->isp_ops->read_nvram(vha, (uint8_t *)ha->vpd, ha->vpd_base, count); 490 491 /* Update flash version information for 4Gb & above. */ 492 if (!IS_FWI2_CAPABLE(ha)) 493 return -EINVAL; 494 495 tmp_data = vmalloc(256); 496 if (!tmp_data) { 497 ql_log(ql_log_warn, vha, 0x706b, 498 "Unable to allocate memory for VPD information update.\n"); 499 return -ENOMEM; 500 } 501 ha->isp_ops->get_flash_version(vha, tmp_data); 502 vfree(tmp_data); 503 504 return count; 505 } 506 507 static struct bin_attribute sysfs_vpd_attr = { 508 .attr = { 509 .name = "vpd", 510 .mode = S_IRUSR | S_IWUSR, 511 }, 512 .size = 0, 513 .read = qla2x00_sysfs_read_vpd, 514 .write = qla2x00_sysfs_write_vpd, 515 }; 516 517 static ssize_t 518 qla2x00_sysfs_read_sfp(struct file *filp, struct kobject *kobj, 519 struct bin_attribute *bin_attr, 520 char *buf, loff_t off, size_t count) 521 { 522 struct scsi_qla_host *vha = shost_priv(dev_to_shost(container_of(kobj, 523 struct device, kobj))); 524 struct qla_hw_data *ha = vha->hw; 525 uint16_t iter, addr, offset; 526 int rval; 527 528 if (!capable(CAP_SYS_ADMIN) || off != 0 || count != SFP_DEV_SIZE * 2) 529 return 0; 530 531 if (ha->sfp_data) 532 goto do_read; 533 534 ha->sfp_data = dma_pool_alloc(ha->s_dma_pool, GFP_KERNEL, 535 &ha->sfp_data_dma); 536 if (!ha->sfp_data) { 537 ql_log(ql_log_warn, vha, 0x706c, 538 "Unable to allocate memory for SFP read-data.\n"); 539 return 0; 540 } 541 542 do_read: 543 memset(ha->sfp_data, 0, SFP_BLOCK_SIZE); 544 addr = 0xa0; 545 for (iter = 0, offset = 0; iter < (SFP_DEV_SIZE * 2) / SFP_BLOCK_SIZE; 546 iter++, offset += SFP_BLOCK_SIZE) { 547 if (iter == 4) { 548 /* Skip to next device address. */ 549 addr = 0xa2; 550 offset = 0; 551 } 552 553 rval = qla2x00_read_sfp(vha, ha->sfp_data_dma, ha->sfp_data, 554 addr, offset, SFP_BLOCK_SIZE, 0); 555 if (rval != QLA_SUCCESS) { 556 ql_log(ql_log_warn, vha, 0x706d, 557 "Unable to read SFP data (%x/%x/%x).\n", rval, 558 addr, offset); 559 560 return -EIO; 561 } 562 memcpy(buf, ha->sfp_data, SFP_BLOCK_SIZE); 563 buf += SFP_BLOCK_SIZE; 564 } 565 566 return count; 567 } 568 569 static struct bin_attribute sysfs_sfp_attr = { 570 .attr = { 571 .name = "sfp", 572 .mode = S_IRUSR | S_IWUSR, 573 }, 574 .size = SFP_DEV_SIZE * 2, 575 .read = qla2x00_sysfs_read_sfp, 576 }; 577 578 static ssize_t 579 qla2x00_sysfs_write_reset(struct file *filp, struct kobject *kobj, 580 struct bin_attribute *bin_attr, 581 char *buf, loff_t off, size_t count) 582 { 583 struct scsi_qla_host *vha = shost_priv(dev_to_shost(container_of(kobj, 584 struct device, kobj))); 585 struct qla_hw_data *ha = vha->hw; 586 struct scsi_qla_host *base_vha = pci_get_drvdata(ha->pdev); 587 int type; 588 uint32_t idc_control; 589 590 if (off != 0) 591 return -EINVAL; 592 593 type = simple_strtol(buf, NULL, 10); 594 switch (type) { 595 case 0x2025c: 596 ql_log(ql_log_info, vha, 0x706e, 597 "Issuing ISP reset.\n"); 598 599 scsi_block_requests(vha->host); 600 set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags); 601 if (IS_QLA82XX(ha)) { 602 ha->flags.isp82xx_no_md_cap = 1; 603 qla82xx_idc_lock(ha); 604 qla82xx_set_reset_owner(vha); 605 qla82xx_idc_unlock(ha); 606 } 607 qla2xxx_wake_dpc(vha); 608 qla2x00_wait_for_chip_reset(vha); 609 scsi_unblock_requests(vha->host); 610 break; 611 case 0x2025d: 612 if (!IS_QLA81XX(ha) && !IS_QLA83XX(ha)) 613 return -EPERM; 614 615 ql_log(ql_log_info, vha, 0x706f, 616 "Issuing MPI reset.\n"); 617 618 if (IS_QLA83XX(ha)) { 619 uint32_t idc_control; 620 621 qla83xx_idc_lock(vha, 0); 622 __qla83xx_get_idc_control(vha, &idc_control); 623 idc_control |= QLA83XX_IDC_GRACEFUL_RESET; 624 __qla83xx_set_idc_control(vha, idc_control); 625 qla83xx_wr_reg(vha, QLA83XX_IDC_DEV_STATE, 626 QLA8XXX_DEV_NEED_RESET); 627 qla83xx_idc_audit(vha, IDC_AUDIT_TIMESTAMP); 628 qla83xx_idc_unlock(vha, 0); 629 break; 630 } else { 631 /* Make sure FC side is not in reset */ 632 qla2x00_wait_for_hba_online(vha); 633 634 /* Issue MPI reset */ 635 scsi_block_requests(vha->host); 636 if (qla81xx_restart_mpi_firmware(vha) != QLA_SUCCESS) 637 ql_log(ql_log_warn, vha, 0x7070, 638 "MPI reset failed.\n"); 639 scsi_unblock_requests(vha->host); 640 break; 641 } 642 case 0x2025e: 643 if (!IS_QLA82XX(ha) || vha != base_vha) { 644 ql_log(ql_log_info, vha, 0x7071, 645 "FCoE ctx reset no supported.\n"); 646 return -EPERM; 647 } 648 649 ql_log(ql_log_info, vha, 0x7072, 650 "Issuing FCoE ctx reset.\n"); 651 set_bit(FCOE_CTX_RESET_NEEDED, &vha->dpc_flags); 652 qla2xxx_wake_dpc(vha); 653 qla2x00_wait_for_fcoe_ctx_reset(vha); 654 break; 655 case 0x2025f: 656 if (!IS_QLA8031(ha)) 657 return -EPERM; 658 ql_log(ql_log_info, vha, 0x70bc, 659 "Disabling Reset by IDC control\n"); 660 qla83xx_idc_lock(vha, 0); 661 __qla83xx_get_idc_control(vha, &idc_control); 662 idc_control |= QLA83XX_IDC_RESET_DISABLED; 663 __qla83xx_set_idc_control(vha, idc_control); 664 qla83xx_idc_unlock(vha, 0); 665 break; 666 case 0x20260: 667 if (!IS_QLA8031(ha)) 668 return -EPERM; 669 ql_log(ql_log_info, vha, 0x70bd, 670 "Enabling Reset by IDC control\n"); 671 qla83xx_idc_lock(vha, 0); 672 __qla83xx_get_idc_control(vha, &idc_control); 673 idc_control &= ~QLA83XX_IDC_RESET_DISABLED; 674 __qla83xx_set_idc_control(vha, idc_control); 675 qla83xx_idc_unlock(vha, 0); 676 break; 677 678 } 679 return count; 680 } 681 682 static struct bin_attribute sysfs_reset_attr = { 683 .attr = { 684 .name = "reset", 685 .mode = S_IWUSR, 686 }, 687 .size = 0, 688 .write = qla2x00_sysfs_write_reset, 689 }; 690 691 static ssize_t 692 qla2x00_sysfs_read_xgmac_stats(struct file *filp, struct kobject *kobj, 693 struct bin_attribute *bin_attr, 694 char *buf, loff_t off, size_t count) 695 { 696 struct scsi_qla_host *vha = shost_priv(dev_to_shost(container_of(kobj, 697 struct device, kobj))); 698 struct qla_hw_data *ha = vha->hw; 699 int rval; 700 uint16_t actual_size; 701 702 if (!capable(CAP_SYS_ADMIN) || off != 0 || count > XGMAC_DATA_SIZE) 703 return 0; 704 705 if (ha->xgmac_data) 706 goto do_read; 707 708 ha->xgmac_data = dma_alloc_coherent(&ha->pdev->dev, XGMAC_DATA_SIZE, 709 &ha->xgmac_data_dma, GFP_KERNEL); 710 if (!ha->xgmac_data) { 711 ql_log(ql_log_warn, vha, 0x7076, 712 "Unable to allocate memory for XGMAC read-data.\n"); 713 return 0; 714 } 715 716 do_read: 717 actual_size = 0; 718 memset(ha->xgmac_data, 0, XGMAC_DATA_SIZE); 719 720 rval = qla2x00_get_xgmac_stats(vha, ha->xgmac_data_dma, 721 XGMAC_DATA_SIZE, &actual_size); 722 if (rval != QLA_SUCCESS) { 723 ql_log(ql_log_warn, vha, 0x7077, 724 "Unable to read XGMAC data (%x).\n", rval); 725 count = 0; 726 } 727 728 count = actual_size > count ? count: actual_size; 729 memcpy(buf, ha->xgmac_data, count); 730 731 return count; 732 } 733 734 static struct bin_attribute sysfs_xgmac_stats_attr = { 735 .attr = { 736 .name = "xgmac_stats", 737 .mode = S_IRUSR, 738 }, 739 .size = 0, 740 .read = qla2x00_sysfs_read_xgmac_stats, 741 }; 742 743 static ssize_t 744 qla2x00_sysfs_read_dcbx_tlv(struct file *filp, struct kobject *kobj, 745 struct bin_attribute *bin_attr, 746 char *buf, loff_t off, size_t count) 747 { 748 struct scsi_qla_host *vha = shost_priv(dev_to_shost(container_of(kobj, 749 struct device, kobj))); 750 struct qla_hw_data *ha = vha->hw; 751 int rval; 752 uint16_t actual_size; 753 754 if (!capable(CAP_SYS_ADMIN) || off != 0 || count > DCBX_TLV_DATA_SIZE) 755 return 0; 756 757 if (ha->dcbx_tlv) 758 goto do_read; 759 760 ha->dcbx_tlv = dma_alloc_coherent(&ha->pdev->dev, DCBX_TLV_DATA_SIZE, 761 &ha->dcbx_tlv_dma, GFP_KERNEL); 762 if (!ha->dcbx_tlv) { 763 ql_log(ql_log_warn, vha, 0x7078, 764 "Unable to allocate memory for DCBX TLV read-data.\n"); 765 return -ENOMEM; 766 } 767 768 do_read: 769 actual_size = 0; 770 memset(ha->dcbx_tlv, 0, DCBX_TLV_DATA_SIZE); 771 772 rval = qla2x00_get_dcbx_params(vha, ha->dcbx_tlv_dma, 773 DCBX_TLV_DATA_SIZE); 774 if (rval != QLA_SUCCESS) { 775 ql_log(ql_log_warn, vha, 0x7079, 776 "Unable to read DCBX TLV (%x).\n", rval); 777 return -EIO; 778 } 779 780 memcpy(buf, ha->dcbx_tlv, count); 781 782 return count; 783 } 784 785 static struct bin_attribute sysfs_dcbx_tlv_attr = { 786 .attr = { 787 .name = "dcbx_tlv", 788 .mode = S_IRUSR, 789 }, 790 .size = 0, 791 .read = qla2x00_sysfs_read_dcbx_tlv, 792 }; 793 794 static struct sysfs_entry { 795 char *name; 796 struct bin_attribute *attr; 797 int is4GBp_only; 798 } bin_file_entries[] = { 799 { "fw_dump", &sysfs_fw_dump_attr, }, 800 { "nvram", &sysfs_nvram_attr, }, 801 { "optrom", &sysfs_optrom_attr, }, 802 { "optrom_ctl", &sysfs_optrom_ctl_attr, }, 803 { "vpd", &sysfs_vpd_attr, 1 }, 804 { "sfp", &sysfs_sfp_attr, 1 }, 805 { "reset", &sysfs_reset_attr, }, 806 { "xgmac_stats", &sysfs_xgmac_stats_attr, 3 }, 807 { "dcbx_tlv", &sysfs_dcbx_tlv_attr, 3 }, 808 { NULL }, 809 }; 810 811 void 812 qla2x00_alloc_sysfs_attr(scsi_qla_host_t *vha) 813 { 814 struct Scsi_Host *host = vha->host; 815 struct sysfs_entry *iter; 816 int ret; 817 818 for (iter = bin_file_entries; iter->name; iter++) { 819 if (iter->is4GBp_only && !IS_FWI2_CAPABLE(vha->hw)) 820 continue; 821 if (iter->is4GBp_only == 2 && !IS_QLA25XX(vha->hw)) 822 continue; 823 if (iter->is4GBp_only == 3 && !(IS_CNA_CAPABLE(vha->hw))) 824 continue; 825 826 ret = sysfs_create_bin_file(&host->shost_gendev.kobj, 827 iter->attr); 828 if (ret) 829 ql_log(ql_log_warn, vha, 0x00f3, 830 "Unable to create sysfs %s binary attribute (%d).\n", 831 iter->name, ret); 832 else 833 ql_dbg(ql_dbg_init, vha, 0x00f4, 834 "Successfully created sysfs %s binary attribure.\n", 835 iter->name); 836 } 837 } 838 839 void 840 qla2x00_free_sysfs_attr(scsi_qla_host_t *vha) 841 { 842 struct Scsi_Host *host = vha->host; 843 struct sysfs_entry *iter; 844 struct qla_hw_data *ha = vha->hw; 845 846 for (iter = bin_file_entries; iter->name; iter++) { 847 if (iter->is4GBp_only && !IS_FWI2_CAPABLE(ha)) 848 continue; 849 if (iter->is4GBp_only == 2 && !IS_QLA25XX(ha)) 850 continue; 851 if (iter->is4GBp_only == 3 && !(IS_CNA_CAPABLE(vha->hw))) 852 continue; 853 854 sysfs_remove_bin_file(&host->shost_gendev.kobj, 855 iter->attr); 856 } 857 858 if (ha->beacon_blink_led == 1) 859 ha->isp_ops->beacon_off(vha); 860 } 861 862 /* Scsi_Host attributes. */ 863 864 static ssize_t 865 qla2x00_drvr_version_show(struct device *dev, 866 struct device_attribute *attr, char *buf) 867 { 868 return snprintf(buf, PAGE_SIZE, "%s\n", qla2x00_version_str); 869 } 870 871 static ssize_t 872 qla2x00_fw_version_show(struct device *dev, 873 struct device_attribute *attr, char *buf) 874 { 875 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 876 struct qla_hw_data *ha = vha->hw; 877 char fw_str[128]; 878 879 return snprintf(buf, PAGE_SIZE, "%s\n", 880 ha->isp_ops->fw_version_str(vha, fw_str)); 881 } 882 883 static ssize_t 884 qla2x00_serial_num_show(struct device *dev, struct device_attribute *attr, 885 char *buf) 886 { 887 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 888 struct qla_hw_data *ha = vha->hw; 889 uint32_t sn; 890 891 if (IS_FWI2_CAPABLE(ha)) { 892 qla2xxx_get_vpd_field(vha, "SN", buf, PAGE_SIZE); 893 return snprintf(buf, PAGE_SIZE, "%s\n", buf); 894 } 895 896 sn = ((ha->serial0 & 0x1f) << 16) | (ha->serial2 << 8) | ha->serial1; 897 return snprintf(buf, PAGE_SIZE, "%c%05d\n", 'A' + sn / 100000, 898 sn % 100000); 899 } 900 901 static ssize_t 902 qla2x00_isp_name_show(struct device *dev, struct device_attribute *attr, 903 char *buf) 904 { 905 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 906 return snprintf(buf, PAGE_SIZE, "ISP%04X\n", vha->hw->pdev->device); 907 } 908 909 static ssize_t 910 qla2x00_isp_id_show(struct device *dev, struct device_attribute *attr, 911 char *buf) 912 { 913 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 914 struct qla_hw_data *ha = vha->hw; 915 return snprintf(buf, PAGE_SIZE, "%04x %04x %04x %04x\n", 916 ha->product_id[0], ha->product_id[1], ha->product_id[2], 917 ha->product_id[3]); 918 } 919 920 static ssize_t 921 qla2x00_model_name_show(struct device *dev, struct device_attribute *attr, 922 char *buf) 923 { 924 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 925 return snprintf(buf, PAGE_SIZE, "%s\n", vha->hw->model_number); 926 } 927 928 static ssize_t 929 qla2x00_model_desc_show(struct device *dev, struct device_attribute *attr, 930 char *buf) 931 { 932 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 933 return snprintf(buf, PAGE_SIZE, "%s\n", 934 vha->hw->model_desc ? vha->hw->model_desc : ""); 935 } 936 937 static ssize_t 938 qla2x00_pci_info_show(struct device *dev, struct device_attribute *attr, 939 char *buf) 940 { 941 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 942 char pci_info[30]; 943 944 return snprintf(buf, PAGE_SIZE, "%s\n", 945 vha->hw->isp_ops->pci_info_str(vha, pci_info)); 946 } 947 948 static ssize_t 949 qla2x00_link_state_show(struct device *dev, struct device_attribute *attr, 950 char *buf) 951 { 952 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 953 struct qla_hw_data *ha = vha->hw; 954 int len = 0; 955 956 if (atomic_read(&vha->loop_state) == LOOP_DOWN || 957 atomic_read(&vha->loop_state) == LOOP_DEAD || 958 vha->device_flags & DFLG_NO_CABLE) 959 len = snprintf(buf, PAGE_SIZE, "Link Down\n"); 960 else if (atomic_read(&vha->loop_state) != LOOP_READY || 961 qla2x00_reset_active(vha)) 962 len = snprintf(buf, PAGE_SIZE, "Unknown Link State\n"); 963 else { 964 len = snprintf(buf, PAGE_SIZE, "Link Up - "); 965 966 switch (ha->current_topology) { 967 case ISP_CFG_NL: 968 len += snprintf(buf + len, PAGE_SIZE-len, "Loop\n"); 969 break; 970 case ISP_CFG_FL: 971 len += snprintf(buf + len, PAGE_SIZE-len, "FL_Port\n"); 972 break; 973 case ISP_CFG_N: 974 len += snprintf(buf + len, PAGE_SIZE-len, 975 "N_Port to N_Port\n"); 976 break; 977 case ISP_CFG_F: 978 len += snprintf(buf + len, PAGE_SIZE-len, "F_Port\n"); 979 break; 980 default: 981 len += snprintf(buf + len, PAGE_SIZE-len, "Loop\n"); 982 break; 983 } 984 } 985 return len; 986 } 987 988 static ssize_t 989 qla2x00_zio_show(struct device *dev, struct device_attribute *attr, 990 char *buf) 991 { 992 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 993 int len = 0; 994 995 switch (vha->hw->zio_mode) { 996 case QLA_ZIO_MODE_6: 997 len += snprintf(buf + len, PAGE_SIZE-len, "Mode 6\n"); 998 break; 999 case QLA_ZIO_DISABLED: 1000 len += snprintf(buf + len, PAGE_SIZE-len, "Disabled\n"); 1001 break; 1002 } 1003 return len; 1004 } 1005 1006 static ssize_t 1007 qla2x00_zio_store(struct device *dev, struct device_attribute *attr, 1008 const char *buf, size_t count) 1009 { 1010 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 1011 struct qla_hw_data *ha = vha->hw; 1012 int val = 0; 1013 uint16_t zio_mode; 1014 1015 if (!IS_ZIO_SUPPORTED(ha)) 1016 return -ENOTSUPP; 1017 1018 if (sscanf(buf, "%d", &val) != 1) 1019 return -EINVAL; 1020 1021 if (val) 1022 zio_mode = QLA_ZIO_MODE_6; 1023 else 1024 zio_mode = QLA_ZIO_DISABLED; 1025 1026 /* Update per-hba values and queue a reset. */ 1027 if (zio_mode != QLA_ZIO_DISABLED || ha->zio_mode != QLA_ZIO_DISABLED) { 1028 ha->zio_mode = zio_mode; 1029 set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags); 1030 } 1031 return strlen(buf); 1032 } 1033 1034 static ssize_t 1035 qla2x00_zio_timer_show(struct device *dev, struct device_attribute *attr, 1036 char *buf) 1037 { 1038 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 1039 1040 return snprintf(buf, PAGE_SIZE, "%d us\n", vha->hw->zio_timer * 100); 1041 } 1042 1043 static ssize_t 1044 qla2x00_zio_timer_store(struct device *dev, struct device_attribute *attr, 1045 const char *buf, size_t count) 1046 { 1047 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 1048 int val = 0; 1049 uint16_t zio_timer; 1050 1051 if (sscanf(buf, "%d", &val) != 1) 1052 return -EINVAL; 1053 if (val > 25500 || val < 100) 1054 return -ERANGE; 1055 1056 zio_timer = (uint16_t)(val / 100); 1057 vha->hw->zio_timer = zio_timer; 1058 1059 return strlen(buf); 1060 } 1061 1062 static ssize_t 1063 qla2x00_beacon_show(struct device *dev, struct device_attribute *attr, 1064 char *buf) 1065 { 1066 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 1067 int len = 0; 1068 1069 if (vha->hw->beacon_blink_led) 1070 len += snprintf(buf + len, PAGE_SIZE-len, "Enabled\n"); 1071 else 1072 len += snprintf(buf + len, PAGE_SIZE-len, "Disabled\n"); 1073 return len; 1074 } 1075 1076 static ssize_t 1077 qla2x00_beacon_store(struct device *dev, struct device_attribute *attr, 1078 const char *buf, size_t count) 1079 { 1080 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 1081 struct qla_hw_data *ha = vha->hw; 1082 int val = 0; 1083 int rval; 1084 1085 if (IS_QLA2100(ha) || IS_QLA2200(ha)) 1086 return -EPERM; 1087 1088 if (test_bit(ABORT_ISP_ACTIVE, &vha->dpc_flags)) { 1089 ql_log(ql_log_warn, vha, 0x707a, 1090 "Abort ISP active -- ignoring beacon request.\n"); 1091 return -EBUSY; 1092 } 1093 1094 if (sscanf(buf, "%d", &val) != 1) 1095 return -EINVAL; 1096 1097 if (val) 1098 rval = ha->isp_ops->beacon_on(vha); 1099 else 1100 rval = ha->isp_ops->beacon_off(vha); 1101 1102 if (rval != QLA_SUCCESS) 1103 count = 0; 1104 1105 return count; 1106 } 1107 1108 static ssize_t 1109 qla2x00_optrom_bios_version_show(struct device *dev, 1110 struct device_attribute *attr, char *buf) 1111 { 1112 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 1113 struct qla_hw_data *ha = vha->hw; 1114 return snprintf(buf, PAGE_SIZE, "%d.%02d\n", ha->bios_revision[1], 1115 ha->bios_revision[0]); 1116 } 1117 1118 static ssize_t 1119 qla2x00_optrom_efi_version_show(struct device *dev, 1120 struct device_attribute *attr, char *buf) 1121 { 1122 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 1123 struct qla_hw_data *ha = vha->hw; 1124 return snprintf(buf, PAGE_SIZE, "%d.%02d\n", ha->efi_revision[1], 1125 ha->efi_revision[0]); 1126 } 1127 1128 static ssize_t 1129 qla2x00_optrom_fcode_version_show(struct device *dev, 1130 struct device_attribute *attr, char *buf) 1131 { 1132 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 1133 struct qla_hw_data *ha = vha->hw; 1134 return snprintf(buf, PAGE_SIZE, "%d.%02d\n", ha->fcode_revision[1], 1135 ha->fcode_revision[0]); 1136 } 1137 1138 static ssize_t 1139 qla2x00_optrom_fw_version_show(struct device *dev, 1140 struct device_attribute *attr, char *buf) 1141 { 1142 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 1143 struct qla_hw_data *ha = vha->hw; 1144 return snprintf(buf, PAGE_SIZE, "%d.%02d.%02d %d\n", 1145 ha->fw_revision[0], ha->fw_revision[1], ha->fw_revision[2], 1146 ha->fw_revision[3]); 1147 } 1148 1149 static ssize_t 1150 qla2x00_optrom_gold_fw_version_show(struct device *dev, 1151 struct device_attribute *attr, char *buf) 1152 { 1153 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 1154 struct qla_hw_data *ha = vha->hw; 1155 1156 if (!IS_QLA81XX(ha) && !IS_QLA83XX(ha)) 1157 return snprintf(buf, PAGE_SIZE, "\n"); 1158 1159 return snprintf(buf, PAGE_SIZE, "%d.%02d.%02d (%d)\n", 1160 ha->gold_fw_version[0], ha->gold_fw_version[1], 1161 ha->gold_fw_version[2], ha->gold_fw_version[3]); 1162 } 1163 1164 static ssize_t 1165 qla2x00_total_isp_aborts_show(struct device *dev, 1166 struct device_attribute *attr, char *buf) 1167 { 1168 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 1169 return snprintf(buf, PAGE_SIZE, "%d\n", 1170 vha->qla_stats.total_isp_aborts); 1171 } 1172 1173 static ssize_t 1174 qla24xx_84xx_fw_version_show(struct device *dev, 1175 struct device_attribute *attr, char *buf) 1176 { 1177 int rval = QLA_SUCCESS; 1178 uint16_t status[2] = {0, 0}; 1179 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 1180 struct qla_hw_data *ha = vha->hw; 1181 1182 if (!IS_QLA84XX(ha)) 1183 return snprintf(buf, PAGE_SIZE, "\n"); 1184 1185 if (ha->cs84xx->op_fw_version == 0) 1186 rval = qla84xx_verify_chip(vha, status); 1187 1188 if ((rval == QLA_SUCCESS) && (status[0] == 0)) 1189 return snprintf(buf, PAGE_SIZE, "%u\n", 1190 (uint32_t)ha->cs84xx->op_fw_version); 1191 1192 return snprintf(buf, PAGE_SIZE, "\n"); 1193 } 1194 1195 static ssize_t 1196 qla2x00_mpi_version_show(struct device *dev, struct device_attribute *attr, 1197 char *buf) 1198 { 1199 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 1200 struct qla_hw_data *ha = vha->hw; 1201 1202 if (!IS_QLA81XX(ha) && !IS_QLA8031(ha)) 1203 return snprintf(buf, PAGE_SIZE, "\n"); 1204 1205 return snprintf(buf, PAGE_SIZE, "%d.%02d.%02d (%x)\n", 1206 ha->mpi_version[0], ha->mpi_version[1], ha->mpi_version[2], 1207 ha->mpi_capabilities); 1208 } 1209 1210 static ssize_t 1211 qla2x00_phy_version_show(struct device *dev, struct device_attribute *attr, 1212 char *buf) 1213 { 1214 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 1215 struct qla_hw_data *ha = vha->hw; 1216 1217 if (!IS_QLA81XX(ha) && !IS_QLA8031(ha)) 1218 return snprintf(buf, PAGE_SIZE, "\n"); 1219 1220 return snprintf(buf, PAGE_SIZE, "%d.%02d.%02d\n", 1221 ha->phy_version[0], ha->phy_version[1], ha->phy_version[2]); 1222 } 1223 1224 static ssize_t 1225 qla2x00_flash_block_size_show(struct device *dev, 1226 struct device_attribute *attr, char *buf) 1227 { 1228 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 1229 struct qla_hw_data *ha = vha->hw; 1230 1231 return snprintf(buf, PAGE_SIZE, "0x%x\n", ha->fdt_block_size); 1232 } 1233 1234 static ssize_t 1235 qla2x00_vlan_id_show(struct device *dev, struct device_attribute *attr, 1236 char *buf) 1237 { 1238 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 1239 1240 if (!IS_CNA_CAPABLE(vha->hw)) 1241 return snprintf(buf, PAGE_SIZE, "\n"); 1242 1243 return snprintf(buf, PAGE_SIZE, "%d\n", vha->fcoe_vlan_id); 1244 } 1245 1246 static ssize_t 1247 qla2x00_vn_port_mac_address_show(struct device *dev, 1248 struct device_attribute *attr, char *buf) 1249 { 1250 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 1251 1252 if (!IS_CNA_CAPABLE(vha->hw)) 1253 return snprintf(buf, PAGE_SIZE, "\n"); 1254 1255 return snprintf(buf, PAGE_SIZE, "%02x:%02x:%02x:%02x:%02x:%02x\n", 1256 vha->fcoe_vn_port_mac[5], vha->fcoe_vn_port_mac[4], 1257 vha->fcoe_vn_port_mac[3], vha->fcoe_vn_port_mac[2], 1258 vha->fcoe_vn_port_mac[1], vha->fcoe_vn_port_mac[0]); 1259 } 1260 1261 static ssize_t 1262 qla2x00_fabric_param_show(struct device *dev, struct device_attribute *attr, 1263 char *buf) 1264 { 1265 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 1266 1267 return snprintf(buf, PAGE_SIZE, "%d\n", vha->hw->switch_cap); 1268 } 1269 1270 static ssize_t 1271 qla2x00_thermal_temp_show(struct device *dev, 1272 struct device_attribute *attr, char *buf) 1273 { 1274 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 1275 int rval = QLA_FUNCTION_FAILED; 1276 uint16_t temp, frac; 1277 1278 if (!vha->hw->flags.thermal_supported) 1279 return snprintf(buf, PAGE_SIZE, "\n"); 1280 1281 temp = frac = 0; 1282 if (qla2x00_reset_active(vha)) 1283 ql_log(ql_log_warn, vha, 0x707b, 1284 "ISP reset active.\n"); 1285 else if (!vha->hw->flags.eeh_busy) 1286 rval = qla2x00_get_thermal_temp(vha, &temp, &frac); 1287 if (rval != QLA_SUCCESS) 1288 return snprintf(buf, PAGE_SIZE, "\n"); 1289 1290 return snprintf(buf, PAGE_SIZE, "%d.%02d\n", temp, frac); 1291 } 1292 1293 static ssize_t 1294 qla2x00_fw_state_show(struct device *dev, struct device_attribute *attr, 1295 char *buf) 1296 { 1297 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 1298 int rval = QLA_FUNCTION_FAILED; 1299 uint16_t state[5]; 1300 1301 if (qla2x00_reset_active(vha)) 1302 ql_log(ql_log_warn, vha, 0x707c, 1303 "ISP reset active.\n"); 1304 else if (!vha->hw->flags.eeh_busy) 1305 rval = qla2x00_get_firmware_state(vha, state); 1306 if (rval != QLA_SUCCESS) 1307 memset(state, -1, sizeof(state)); 1308 1309 return snprintf(buf, PAGE_SIZE, "0x%x 0x%x 0x%x 0x%x 0x%x\n", state[0], 1310 state[1], state[2], state[3], state[4]); 1311 } 1312 1313 static ssize_t 1314 qla2x00_diag_requests_show(struct device *dev, 1315 struct device_attribute *attr, char *buf) 1316 { 1317 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 1318 1319 if (!IS_BIDI_CAPABLE(vha->hw)) 1320 return snprintf(buf, PAGE_SIZE, "\n"); 1321 1322 return snprintf(buf, PAGE_SIZE, "%llu\n", vha->bidi_stats.io_count); 1323 } 1324 1325 static ssize_t 1326 qla2x00_diag_megabytes_show(struct device *dev, 1327 struct device_attribute *attr, char *buf) 1328 { 1329 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 1330 1331 if (!IS_BIDI_CAPABLE(vha->hw)) 1332 return snprintf(buf, PAGE_SIZE, "\n"); 1333 1334 return snprintf(buf, PAGE_SIZE, "%llu\n", 1335 vha->bidi_stats.transfer_bytes >> 20); 1336 } 1337 1338 static ssize_t 1339 qla2x00_fw_dump_size_show(struct device *dev, struct device_attribute *attr, 1340 char *buf) 1341 { 1342 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 1343 struct qla_hw_data *ha = vha->hw; 1344 uint32_t size; 1345 1346 if (!ha->fw_dumped) 1347 size = 0; 1348 else if (IS_QLA82XX(ha)) 1349 size = ha->md_template_size + ha->md_dump_size; 1350 else 1351 size = ha->fw_dump_len; 1352 1353 return snprintf(buf, PAGE_SIZE, "%d\n", size); 1354 } 1355 1356 static DEVICE_ATTR(driver_version, S_IRUGO, qla2x00_drvr_version_show, NULL); 1357 static DEVICE_ATTR(fw_version, S_IRUGO, qla2x00_fw_version_show, NULL); 1358 static DEVICE_ATTR(serial_num, S_IRUGO, qla2x00_serial_num_show, NULL); 1359 static DEVICE_ATTR(isp_name, S_IRUGO, qla2x00_isp_name_show, NULL); 1360 static DEVICE_ATTR(isp_id, S_IRUGO, qla2x00_isp_id_show, NULL); 1361 static DEVICE_ATTR(model_name, S_IRUGO, qla2x00_model_name_show, NULL); 1362 static DEVICE_ATTR(model_desc, S_IRUGO, qla2x00_model_desc_show, NULL); 1363 static DEVICE_ATTR(pci_info, S_IRUGO, qla2x00_pci_info_show, NULL); 1364 static DEVICE_ATTR(link_state, S_IRUGO, qla2x00_link_state_show, NULL); 1365 static DEVICE_ATTR(zio, S_IRUGO | S_IWUSR, qla2x00_zio_show, qla2x00_zio_store); 1366 static DEVICE_ATTR(zio_timer, S_IRUGO | S_IWUSR, qla2x00_zio_timer_show, 1367 qla2x00_zio_timer_store); 1368 static DEVICE_ATTR(beacon, S_IRUGO | S_IWUSR, qla2x00_beacon_show, 1369 qla2x00_beacon_store); 1370 static DEVICE_ATTR(optrom_bios_version, S_IRUGO, 1371 qla2x00_optrom_bios_version_show, NULL); 1372 static DEVICE_ATTR(optrom_efi_version, S_IRUGO, 1373 qla2x00_optrom_efi_version_show, NULL); 1374 static DEVICE_ATTR(optrom_fcode_version, S_IRUGO, 1375 qla2x00_optrom_fcode_version_show, NULL); 1376 static DEVICE_ATTR(optrom_fw_version, S_IRUGO, qla2x00_optrom_fw_version_show, 1377 NULL); 1378 static DEVICE_ATTR(optrom_gold_fw_version, S_IRUGO, 1379 qla2x00_optrom_gold_fw_version_show, NULL); 1380 static DEVICE_ATTR(84xx_fw_version, S_IRUGO, qla24xx_84xx_fw_version_show, 1381 NULL); 1382 static DEVICE_ATTR(total_isp_aborts, S_IRUGO, qla2x00_total_isp_aborts_show, 1383 NULL); 1384 static DEVICE_ATTR(mpi_version, S_IRUGO, qla2x00_mpi_version_show, NULL); 1385 static DEVICE_ATTR(phy_version, S_IRUGO, qla2x00_phy_version_show, NULL); 1386 static DEVICE_ATTR(flash_block_size, S_IRUGO, qla2x00_flash_block_size_show, 1387 NULL); 1388 static DEVICE_ATTR(vlan_id, S_IRUGO, qla2x00_vlan_id_show, NULL); 1389 static DEVICE_ATTR(vn_port_mac_address, S_IRUGO, 1390 qla2x00_vn_port_mac_address_show, NULL); 1391 static DEVICE_ATTR(fabric_param, S_IRUGO, qla2x00_fabric_param_show, NULL); 1392 static DEVICE_ATTR(fw_state, S_IRUGO, qla2x00_fw_state_show, NULL); 1393 static DEVICE_ATTR(thermal_temp, S_IRUGO, qla2x00_thermal_temp_show, NULL); 1394 static DEVICE_ATTR(diag_requests, S_IRUGO, qla2x00_diag_requests_show, NULL); 1395 static DEVICE_ATTR(diag_megabytes, S_IRUGO, qla2x00_diag_megabytes_show, NULL); 1396 static DEVICE_ATTR(fw_dump_size, S_IRUGO, qla2x00_fw_dump_size_show, NULL); 1397 1398 struct device_attribute *qla2x00_host_attrs[] = { 1399 &dev_attr_driver_version, 1400 &dev_attr_fw_version, 1401 &dev_attr_serial_num, 1402 &dev_attr_isp_name, 1403 &dev_attr_isp_id, 1404 &dev_attr_model_name, 1405 &dev_attr_model_desc, 1406 &dev_attr_pci_info, 1407 &dev_attr_link_state, 1408 &dev_attr_zio, 1409 &dev_attr_zio_timer, 1410 &dev_attr_beacon, 1411 &dev_attr_optrom_bios_version, 1412 &dev_attr_optrom_efi_version, 1413 &dev_attr_optrom_fcode_version, 1414 &dev_attr_optrom_fw_version, 1415 &dev_attr_84xx_fw_version, 1416 &dev_attr_total_isp_aborts, 1417 &dev_attr_mpi_version, 1418 &dev_attr_phy_version, 1419 &dev_attr_flash_block_size, 1420 &dev_attr_vlan_id, 1421 &dev_attr_vn_port_mac_address, 1422 &dev_attr_fabric_param, 1423 &dev_attr_fw_state, 1424 &dev_attr_optrom_gold_fw_version, 1425 &dev_attr_thermal_temp, 1426 &dev_attr_diag_requests, 1427 &dev_attr_diag_megabytes, 1428 &dev_attr_fw_dump_size, 1429 NULL, 1430 }; 1431 1432 /* Host attributes. */ 1433 1434 static void 1435 qla2x00_get_host_port_id(struct Scsi_Host *shost) 1436 { 1437 scsi_qla_host_t *vha = shost_priv(shost); 1438 1439 fc_host_port_id(shost) = vha->d_id.b.domain << 16 | 1440 vha->d_id.b.area << 8 | vha->d_id.b.al_pa; 1441 } 1442 1443 static void 1444 qla2x00_get_host_speed(struct Scsi_Host *shost) 1445 { 1446 struct qla_hw_data *ha = ((struct scsi_qla_host *) 1447 (shost_priv(shost)))->hw; 1448 u32 speed = FC_PORTSPEED_UNKNOWN; 1449 1450 switch (ha->link_data_rate) { 1451 case PORT_SPEED_1GB: 1452 speed = FC_PORTSPEED_1GBIT; 1453 break; 1454 case PORT_SPEED_2GB: 1455 speed = FC_PORTSPEED_2GBIT; 1456 break; 1457 case PORT_SPEED_4GB: 1458 speed = FC_PORTSPEED_4GBIT; 1459 break; 1460 case PORT_SPEED_8GB: 1461 speed = FC_PORTSPEED_8GBIT; 1462 break; 1463 case PORT_SPEED_10GB: 1464 speed = FC_PORTSPEED_10GBIT; 1465 break; 1466 case PORT_SPEED_16GB: 1467 speed = FC_PORTSPEED_16GBIT; 1468 break; 1469 } 1470 fc_host_speed(shost) = speed; 1471 } 1472 1473 static void 1474 qla2x00_get_host_port_type(struct Scsi_Host *shost) 1475 { 1476 scsi_qla_host_t *vha = shost_priv(shost); 1477 uint32_t port_type = FC_PORTTYPE_UNKNOWN; 1478 1479 if (vha->vp_idx) { 1480 fc_host_port_type(shost) = FC_PORTTYPE_NPIV; 1481 return; 1482 } 1483 switch (vha->hw->current_topology) { 1484 case ISP_CFG_NL: 1485 port_type = FC_PORTTYPE_LPORT; 1486 break; 1487 case ISP_CFG_FL: 1488 port_type = FC_PORTTYPE_NLPORT; 1489 break; 1490 case ISP_CFG_N: 1491 port_type = FC_PORTTYPE_PTP; 1492 break; 1493 case ISP_CFG_F: 1494 port_type = FC_PORTTYPE_NPORT; 1495 break; 1496 } 1497 fc_host_port_type(shost) = port_type; 1498 } 1499 1500 static void 1501 qla2x00_get_starget_node_name(struct scsi_target *starget) 1502 { 1503 struct Scsi_Host *host = dev_to_shost(starget->dev.parent); 1504 scsi_qla_host_t *vha = shost_priv(host); 1505 fc_port_t *fcport; 1506 u64 node_name = 0; 1507 1508 list_for_each_entry(fcport, &vha->vp_fcports, list) { 1509 if (fcport->rport && 1510 starget->id == fcport->rport->scsi_target_id) { 1511 node_name = wwn_to_u64(fcport->node_name); 1512 break; 1513 } 1514 } 1515 1516 fc_starget_node_name(starget) = node_name; 1517 } 1518 1519 static void 1520 qla2x00_get_starget_port_name(struct scsi_target *starget) 1521 { 1522 struct Scsi_Host *host = dev_to_shost(starget->dev.parent); 1523 scsi_qla_host_t *vha = shost_priv(host); 1524 fc_port_t *fcport; 1525 u64 port_name = 0; 1526 1527 list_for_each_entry(fcport, &vha->vp_fcports, list) { 1528 if (fcport->rport && 1529 starget->id == fcport->rport->scsi_target_id) { 1530 port_name = wwn_to_u64(fcport->port_name); 1531 break; 1532 } 1533 } 1534 1535 fc_starget_port_name(starget) = port_name; 1536 } 1537 1538 static void 1539 qla2x00_get_starget_port_id(struct scsi_target *starget) 1540 { 1541 struct Scsi_Host *host = dev_to_shost(starget->dev.parent); 1542 scsi_qla_host_t *vha = shost_priv(host); 1543 fc_port_t *fcport; 1544 uint32_t port_id = ~0U; 1545 1546 list_for_each_entry(fcport, &vha->vp_fcports, list) { 1547 if (fcport->rport && 1548 starget->id == fcport->rport->scsi_target_id) { 1549 port_id = fcport->d_id.b.domain << 16 | 1550 fcport->d_id.b.area << 8 | fcport->d_id.b.al_pa; 1551 break; 1552 } 1553 } 1554 1555 fc_starget_port_id(starget) = port_id; 1556 } 1557 1558 static void 1559 qla2x00_set_rport_loss_tmo(struct fc_rport *rport, uint32_t timeout) 1560 { 1561 if (timeout) 1562 rport->dev_loss_tmo = timeout; 1563 else 1564 rport->dev_loss_tmo = 1; 1565 } 1566 1567 static void 1568 qla2x00_dev_loss_tmo_callbk(struct fc_rport *rport) 1569 { 1570 struct Scsi_Host *host = rport_to_shost(rport); 1571 fc_port_t *fcport = *(fc_port_t **)rport->dd_data; 1572 unsigned long flags; 1573 1574 if (!fcport) 1575 return; 1576 1577 /* Now that the rport has been deleted, set the fcport state to 1578 FCS_DEVICE_DEAD */ 1579 qla2x00_set_fcport_state(fcport, FCS_DEVICE_DEAD); 1580 1581 /* 1582 * Transport has effectively 'deleted' the rport, clear 1583 * all local references. 1584 */ 1585 spin_lock_irqsave(host->host_lock, flags); 1586 fcport->rport = fcport->drport = NULL; 1587 *((fc_port_t **)rport->dd_data) = NULL; 1588 spin_unlock_irqrestore(host->host_lock, flags); 1589 1590 if (test_bit(ABORT_ISP_ACTIVE, &fcport->vha->dpc_flags)) 1591 return; 1592 1593 if (unlikely(pci_channel_offline(fcport->vha->hw->pdev))) { 1594 qla2x00_abort_all_cmds(fcport->vha, DID_NO_CONNECT << 16); 1595 return; 1596 } 1597 } 1598 1599 static void 1600 qla2x00_terminate_rport_io(struct fc_rport *rport) 1601 { 1602 fc_port_t *fcport = *(fc_port_t **)rport->dd_data; 1603 1604 if (!fcport) 1605 return; 1606 1607 if (test_bit(ABORT_ISP_ACTIVE, &fcport->vha->dpc_flags)) 1608 return; 1609 1610 if (unlikely(pci_channel_offline(fcport->vha->hw->pdev))) { 1611 qla2x00_abort_all_cmds(fcport->vha, DID_NO_CONNECT << 16); 1612 return; 1613 } 1614 /* 1615 * At this point all fcport's software-states are cleared. Perform any 1616 * final cleanup of firmware resources (PCBs and XCBs). 1617 */ 1618 if (fcport->loop_id != FC_NO_LOOP_ID) { 1619 if (IS_FWI2_CAPABLE(fcport->vha->hw)) 1620 fcport->vha->hw->isp_ops->fabric_logout(fcport->vha, 1621 fcport->loop_id, fcport->d_id.b.domain, 1622 fcport->d_id.b.area, fcport->d_id.b.al_pa); 1623 else 1624 qla2x00_port_logout(fcport->vha, fcport); 1625 } 1626 } 1627 1628 static int 1629 qla2x00_issue_lip(struct Scsi_Host *shost) 1630 { 1631 scsi_qla_host_t *vha = shost_priv(shost); 1632 1633 qla2x00_loop_reset(vha); 1634 return 0; 1635 } 1636 1637 static struct fc_host_statistics * 1638 qla2x00_get_fc_host_stats(struct Scsi_Host *shost) 1639 { 1640 scsi_qla_host_t *vha = shost_priv(shost); 1641 struct qla_hw_data *ha = vha->hw; 1642 struct scsi_qla_host *base_vha = pci_get_drvdata(ha->pdev); 1643 int rval; 1644 struct link_statistics *stats; 1645 dma_addr_t stats_dma; 1646 struct fc_host_statistics *pfc_host_stat; 1647 1648 pfc_host_stat = &vha->fc_host_stat; 1649 memset(pfc_host_stat, -1, sizeof(struct fc_host_statistics)); 1650 1651 if (test_bit(UNLOADING, &vha->dpc_flags)) 1652 goto done; 1653 1654 if (unlikely(pci_channel_offline(ha->pdev))) 1655 goto done; 1656 1657 stats = dma_pool_alloc(ha->s_dma_pool, GFP_KERNEL, &stats_dma); 1658 if (stats == NULL) { 1659 ql_log(ql_log_warn, vha, 0x707d, 1660 "Failed to allocate memory for stats.\n"); 1661 goto done; 1662 } 1663 memset(stats, 0, DMA_POOL_SIZE); 1664 1665 rval = QLA_FUNCTION_FAILED; 1666 if (IS_FWI2_CAPABLE(ha)) { 1667 rval = qla24xx_get_isp_stats(base_vha, stats, stats_dma); 1668 } else if (atomic_read(&base_vha->loop_state) == LOOP_READY && 1669 !qla2x00_reset_active(vha) && !ha->dpc_active) { 1670 /* Must be in a 'READY' state for statistics retrieval. */ 1671 rval = qla2x00_get_link_status(base_vha, base_vha->loop_id, 1672 stats, stats_dma); 1673 } 1674 1675 if (rval != QLA_SUCCESS) 1676 goto done_free; 1677 1678 pfc_host_stat->link_failure_count = stats->link_fail_cnt; 1679 pfc_host_stat->loss_of_sync_count = stats->loss_sync_cnt; 1680 pfc_host_stat->loss_of_signal_count = stats->loss_sig_cnt; 1681 pfc_host_stat->prim_seq_protocol_err_count = stats->prim_seq_err_cnt; 1682 pfc_host_stat->invalid_tx_word_count = stats->inval_xmit_word_cnt; 1683 pfc_host_stat->invalid_crc_count = stats->inval_crc_cnt; 1684 if (IS_FWI2_CAPABLE(ha)) { 1685 pfc_host_stat->lip_count = stats->lip_cnt; 1686 pfc_host_stat->tx_frames = stats->tx_frames; 1687 pfc_host_stat->rx_frames = stats->rx_frames; 1688 pfc_host_stat->dumped_frames = stats->dumped_frames; 1689 pfc_host_stat->nos_count = stats->nos_rcvd; 1690 } 1691 pfc_host_stat->fcp_input_megabytes = vha->qla_stats.input_bytes >> 20; 1692 pfc_host_stat->fcp_output_megabytes = vha->qla_stats.output_bytes >> 20; 1693 1694 done_free: 1695 dma_pool_free(ha->s_dma_pool, stats, stats_dma); 1696 done: 1697 return pfc_host_stat; 1698 } 1699 1700 static void 1701 qla2x00_get_host_symbolic_name(struct Scsi_Host *shost) 1702 { 1703 scsi_qla_host_t *vha = shost_priv(shost); 1704 1705 qla2x00_get_sym_node_name(vha, fc_host_symbolic_name(shost)); 1706 } 1707 1708 static void 1709 qla2x00_set_host_system_hostname(struct Scsi_Host *shost) 1710 { 1711 scsi_qla_host_t *vha = shost_priv(shost); 1712 1713 set_bit(REGISTER_FDMI_NEEDED, &vha->dpc_flags); 1714 } 1715 1716 static void 1717 qla2x00_get_host_fabric_name(struct Scsi_Host *shost) 1718 { 1719 scsi_qla_host_t *vha = shost_priv(shost); 1720 uint8_t node_name[WWN_SIZE] = { 0xFF, 0xFF, 0xFF, 0xFF, \ 1721 0xFF, 0xFF, 0xFF, 0xFF}; 1722 u64 fabric_name = wwn_to_u64(node_name); 1723 1724 if (vha->device_flags & SWITCH_FOUND) 1725 fabric_name = wwn_to_u64(vha->fabric_node_name); 1726 1727 fc_host_fabric_name(shost) = fabric_name; 1728 } 1729 1730 static void 1731 qla2x00_get_host_port_state(struct Scsi_Host *shost) 1732 { 1733 scsi_qla_host_t *vha = shost_priv(shost); 1734 struct scsi_qla_host *base_vha = pci_get_drvdata(vha->hw->pdev); 1735 1736 if (!base_vha->flags.online) { 1737 fc_host_port_state(shost) = FC_PORTSTATE_OFFLINE; 1738 return; 1739 } 1740 1741 switch (atomic_read(&base_vha->loop_state)) { 1742 case LOOP_UPDATE: 1743 fc_host_port_state(shost) = FC_PORTSTATE_DIAGNOSTICS; 1744 break; 1745 case LOOP_DOWN: 1746 if (test_bit(LOOP_RESYNC_NEEDED, &base_vha->dpc_flags)) 1747 fc_host_port_state(shost) = FC_PORTSTATE_DIAGNOSTICS; 1748 else 1749 fc_host_port_state(shost) = FC_PORTSTATE_LINKDOWN; 1750 break; 1751 case LOOP_DEAD: 1752 fc_host_port_state(shost) = FC_PORTSTATE_LINKDOWN; 1753 break; 1754 case LOOP_READY: 1755 fc_host_port_state(shost) = FC_PORTSTATE_ONLINE; 1756 break; 1757 default: 1758 fc_host_port_state(shost) = FC_PORTSTATE_UNKNOWN; 1759 break; 1760 } 1761 } 1762 1763 static int 1764 qla24xx_vport_create(struct fc_vport *fc_vport, bool disable) 1765 { 1766 int ret = 0; 1767 uint8_t qos = 0; 1768 scsi_qla_host_t *base_vha = shost_priv(fc_vport->shost); 1769 scsi_qla_host_t *vha = NULL; 1770 struct qla_hw_data *ha = base_vha->hw; 1771 uint16_t options = 0; 1772 int cnt; 1773 struct req_que *req = ha->req_q_map[0]; 1774 1775 ret = qla24xx_vport_create_req_sanity_check(fc_vport); 1776 if (ret) { 1777 ql_log(ql_log_warn, vha, 0x707e, 1778 "Vport sanity check failed, status %x\n", ret); 1779 return (ret); 1780 } 1781 1782 vha = qla24xx_create_vhost(fc_vport); 1783 if (vha == NULL) { 1784 ql_log(ql_log_warn, vha, 0x707f, "Vport create host failed.\n"); 1785 return FC_VPORT_FAILED; 1786 } 1787 if (disable) { 1788 atomic_set(&vha->vp_state, VP_OFFLINE); 1789 fc_vport_set_state(fc_vport, FC_VPORT_DISABLED); 1790 } else 1791 atomic_set(&vha->vp_state, VP_FAILED); 1792 1793 /* ready to create vport */ 1794 ql_log(ql_log_info, vha, 0x7080, 1795 "VP entry id %d assigned.\n", vha->vp_idx); 1796 1797 /* initialized vport states */ 1798 atomic_set(&vha->loop_state, LOOP_DOWN); 1799 vha->vp_err_state= VP_ERR_PORTDWN; 1800 vha->vp_prev_err_state= VP_ERR_UNKWN; 1801 /* Check if physical ha port is Up */ 1802 if (atomic_read(&base_vha->loop_state) == LOOP_DOWN || 1803 atomic_read(&base_vha->loop_state) == LOOP_DEAD) { 1804 /* Don't retry or attempt login of this virtual port */ 1805 ql_dbg(ql_dbg_user, vha, 0x7081, 1806 "Vport loop state is not UP.\n"); 1807 atomic_set(&vha->loop_state, LOOP_DEAD); 1808 if (!disable) 1809 fc_vport_set_state(fc_vport, FC_VPORT_LINKDOWN); 1810 } 1811 1812 if (IS_T10_PI_CAPABLE(ha) && ql2xenabledif) { 1813 if (ha->fw_attributes & BIT_4) { 1814 int prot = 0, guard; 1815 vha->flags.difdix_supported = 1; 1816 ql_dbg(ql_dbg_user, vha, 0x7082, 1817 "Registered for DIF/DIX type 1 and 3 protection.\n"); 1818 if (ql2xenabledif == 1) 1819 prot = SHOST_DIX_TYPE0_PROTECTION; 1820 scsi_host_set_prot(vha->host, 1821 prot | SHOST_DIF_TYPE1_PROTECTION 1822 | SHOST_DIF_TYPE2_PROTECTION 1823 | SHOST_DIF_TYPE3_PROTECTION 1824 | SHOST_DIX_TYPE1_PROTECTION 1825 | SHOST_DIX_TYPE2_PROTECTION 1826 | SHOST_DIX_TYPE3_PROTECTION); 1827 1828 guard = SHOST_DIX_GUARD_CRC; 1829 1830 if (IS_PI_IPGUARD_CAPABLE(ha) && 1831 (ql2xenabledif > 1 || IS_PI_DIFB_DIX0_CAPABLE(ha))) 1832 guard |= SHOST_DIX_GUARD_IP; 1833 1834 scsi_host_set_guard(vha->host, guard); 1835 } else 1836 vha->flags.difdix_supported = 0; 1837 } 1838 1839 if (scsi_add_host_with_dma(vha->host, &fc_vport->dev, 1840 &ha->pdev->dev)) { 1841 ql_dbg(ql_dbg_user, vha, 0x7083, 1842 "scsi_add_host failure for VP[%d].\n", vha->vp_idx); 1843 goto vport_create_failed_2; 1844 } 1845 1846 /* initialize attributes */ 1847 fc_host_dev_loss_tmo(vha->host) = ha->port_down_retry_count; 1848 fc_host_node_name(vha->host) = wwn_to_u64(vha->node_name); 1849 fc_host_port_name(vha->host) = wwn_to_u64(vha->port_name); 1850 fc_host_supported_classes(vha->host) = 1851 fc_host_supported_classes(base_vha->host); 1852 fc_host_supported_speeds(vha->host) = 1853 fc_host_supported_speeds(base_vha->host); 1854 1855 qlt_vport_create(vha, ha); 1856 qla24xx_vport_disable(fc_vport, disable); 1857 1858 if (ha->flags.cpu_affinity_enabled) { 1859 req = ha->req_q_map[1]; 1860 ql_dbg(ql_dbg_multiq, vha, 0xc000, 1861 "Request queue %p attached with " 1862 "VP[%d], cpu affinity =%d\n", 1863 req, vha->vp_idx, ha->flags.cpu_affinity_enabled); 1864 goto vport_queue; 1865 } else if (ql2xmaxqueues == 1 || !ha->npiv_info) 1866 goto vport_queue; 1867 /* Create a request queue in QoS mode for the vport */ 1868 for (cnt = 0; cnt < ha->nvram_npiv_size; cnt++) { 1869 if (memcmp(ha->npiv_info[cnt].port_name, vha->port_name, 8) == 0 1870 && memcmp(ha->npiv_info[cnt].node_name, vha->node_name, 1871 8) == 0) { 1872 qos = ha->npiv_info[cnt].q_qos; 1873 break; 1874 } 1875 } 1876 1877 if (qos) { 1878 ret = qla25xx_create_req_que(ha, options, vha->vp_idx, 0, 0, 1879 qos); 1880 if (!ret) 1881 ql_log(ql_log_warn, vha, 0x7084, 1882 "Can't create request queue for VP[%d]\n", 1883 vha->vp_idx); 1884 else { 1885 ql_dbg(ql_dbg_multiq, vha, 0xc001, 1886 "Request Que:%d Q0s: %d) created for VP[%d]\n", 1887 ret, qos, vha->vp_idx); 1888 ql_dbg(ql_dbg_user, vha, 0x7085, 1889 "Request Que:%d Q0s: %d) created for VP[%d]\n", 1890 ret, qos, vha->vp_idx); 1891 req = ha->req_q_map[ret]; 1892 } 1893 } 1894 1895 vport_queue: 1896 vha->req = req; 1897 return 0; 1898 1899 vport_create_failed_2: 1900 qla24xx_disable_vp(vha); 1901 qla24xx_deallocate_vp_id(vha); 1902 scsi_host_put(vha->host); 1903 return FC_VPORT_FAILED; 1904 } 1905 1906 static int 1907 qla24xx_vport_delete(struct fc_vport *fc_vport) 1908 { 1909 scsi_qla_host_t *vha = fc_vport->dd_data; 1910 struct qla_hw_data *ha = vha->hw; 1911 uint16_t id = vha->vp_idx; 1912 1913 while (test_bit(LOOP_RESYNC_ACTIVE, &vha->dpc_flags) || 1914 test_bit(FCPORT_UPDATE_NEEDED, &vha->dpc_flags)) 1915 msleep(1000); 1916 1917 qla24xx_disable_vp(vha); 1918 1919 vha->flags.delete_progress = 1; 1920 1921 fc_remove_host(vha->host); 1922 1923 scsi_remove_host(vha->host); 1924 1925 /* Allow timer to run to drain queued items, when removing vp */ 1926 qla24xx_deallocate_vp_id(vha); 1927 1928 if (vha->timer_active) { 1929 qla2x00_vp_stop_timer(vha); 1930 ql_dbg(ql_dbg_user, vha, 0x7086, 1931 "Timer for the VP[%d] has stopped\n", vha->vp_idx); 1932 } 1933 1934 /* No pending activities shall be there on the vha now */ 1935 if (ql2xextended_error_logging & ql_dbg_user) 1936 msleep(random32()%10); /* Just to see if something falls on 1937 * the net we have placed below */ 1938 1939 BUG_ON(atomic_read(&vha->vref_count)); 1940 1941 qla2x00_free_fcports(vha); 1942 1943 mutex_lock(&ha->vport_lock); 1944 ha->cur_vport_count--; 1945 clear_bit(vha->vp_idx, ha->vp_idx_map); 1946 mutex_unlock(&ha->vport_lock); 1947 1948 if (vha->req->id && !ha->flags.cpu_affinity_enabled) { 1949 if (qla25xx_delete_req_que(vha, vha->req) != QLA_SUCCESS) 1950 ql_log(ql_log_warn, vha, 0x7087, 1951 "Queue delete failed.\n"); 1952 } 1953 1954 ql_log(ql_log_info, vha, 0x7088, "VP[%d] deleted.\n", id); 1955 scsi_host_put(vha->host); 1956 return 0; 1957 } 1958 1959 static int 1960 qla24xx_vport_disable(struct fc_vport *fc_vport, bool disable) 1961 { 1962 scsi_qla_host_t *vha = fc_vport->dd_data; 1963 1964 if (disable) 1965 qla24xx_disable_vp(vha); 1966 else 1967 qla24xx_enable_vp(vha); 1968 1969 return 0; 1970 } 1971 1972 struct fc_function_template qla2xxx_transport_functions = { 1973 1974 .show_host_node_name = 1, 1975 .show_host_port_name = 1, 1976 .show_host_supported_classes = 1, 1977 .show_host_supported_speeds = 1, 1978 1979 .get_host_port_id = qla2x00_get_host_port_id, 1980 .show_host_port_id = 1, 1981 .get_host_speed = qla2x00_get_host_speed, 1982 .show_host_speed = 1, 1983 .get_host_port_type = qla2x00_get_host_port_type, 1984 .show_host_port_type = 1, 1985 .get_host_symbolic_name = qla2x00_get_host_symbolic_name, 1986 .show_host_symbolic_name = 1, 1987 .set_host_system_hostname = qla2x00_set_host_system_hostname, 1988 .show_host_system_hostname = 1, 1989 .get_host_fabric_name = qla2x00_get_host_fabric_name, 1990 .show_host_fabric_name = 1, 1991 .get_host_port_state = qla2x00_get_host_port_state, 1992 .show_host_port_state = 1, 1993 1994 .dd_fcrport_size = sizeof(struct fc_port *), 1995 .show_rport_supported_classes = 1, 1996 1997 .get_starget_node_name = qla2x00_get_starget_node_name, 1998 .show_starget_node_name = 1, 1999 .get_starget_port_name = qla2x00_get_starget_port_name, 2000 .show_starget_port_name = 1, 2001 .get_starget_port_id = qla2x00_get_starget_port_id, 2002 .show_starget_port_id = 1, 2003 2004 .set_rport_dev_loss_tmo = qla2x00_set_rport_loss_tmo, 2005 .show_rport_dev_loss_tmo = 1, 2006 2007 .issue_fc_host_lip = qla2x00_issue_lip, 2008 .dev_loss_tmo_callbk = qla2x00_dev_loss_tmo_callbk, 2009 .terminate_rport_io = qla2x00_terminate_rport_io, 2010 .get_fc_host_stats = qla2x00_get_fc_host_stats, 2011 2012 .vport_create = qla24xx_vport_create, 2013 .vport_disable = qla24xx_vport_disable, 2014 .vport_delete = qla24xx_vport_delete, 2015 .bsg_request = qla24xx_bsg_request, 2016 .bsg_timeout = qla24xx_bsg_timeout, 2017 }; 2018 2019 struct fc_function_template qla2xxx_transport_vport_functions = { 2020 2021 .show_host_node_name = 1, 2022 .show_host_port_name = 1, 2023 .show_host_supported_classes = 1, 2024 2025 .get_host_port_id = qla2x00_get_host_port_id, 2026 .show_host_port_id = 1, 2027 .get_host_speed = qla2x00_get_host_speed, 2028 .show_host_speed = 1, 2029 .get_host_port_type = qla2x00_get_host_port_type, 2030 .show_host_port_type = 1, 2031 .get_host_symbolic_name = qla2x00_get_host_symbolic_name, 2032 .show_host_symbolic_name = 1, 2033 .set_host_system_hostname = qla2x00_set_host_system_hostname, 2034 .show_host_system_hostname = 1, 2035 .get_host_fabric_name = qla2x00_get_host_fabric_name, 2036 .show_host_fabric_name = 1, 2037 .get_host_port_state = qla2x00_get_host_port_state, 2038 .show_host_port_state = 1, 2039 2040 .dd_fcrport_size = sizeof(struct fc_port *), 2041 .show_rport_supported_classes = 1, 2042 2043 .get_starget_node_name = qla2x00_get_starget_node_name, 2044 .show_starget_node_name = 1, 2045 .get_starget_port_name = qla2x00_get_starget_port_name, 2046 .show_starget_port_name = 1, 2047 .get_starget_port_id = qla2x00_get_starget_port_id, 2048 .show_starget_port_id = 1, 2049 2050 .set_rport_dev_loss_tmo = qla2x00_set_rport_loss_tmo, 2051 .show_rport_dev_loss_tmo = 1, 2052 2053 .issue_fc_host_lip = qla2x00_issue_lip, 2054 .dev_loss_tmo_callbk = qla2x00_dev_loss_tmo_callbk, 2055 .terminate_rport_io = qla2x00_terminate_rport_io, 2056 .get_fc_host_stats = qla2x00_get_fc_host_stats, 2057 .bsg_request = qla24xx_bsg_request, 2058 .bsg_timeout = qla24xx_bsg_timeout, 2059 }; 2060 2061 void 2062 qla2x00_init_host_attr(scsi_qla_host_t *vha) 2063 { 2064 struct qla_hw_data *ha = vha->hw; 2065 u32 speed = FC_PORTSPEED_UNKNOWN; 2066 2067 fc_host_dev_loss_tmo(vha->host) = ha->port_down_retry_count; 2068 fc_host_node_name(vha->host) = wwn_to_u64(vha->node_name); 2069 fc_host_port_name(vha->host) = wwn_to_u64(vha->port_name); 2070 fc_host_supported_classes(vha->host) = ha->tgt.enable_class_2 ? 2071 (FC_COS_CLASS2|FC_COS_CLASS3) : FC_COS_CLASS3; 2072 fc_host_max_npiv_vports(vha->host) = ha->max_npiv_vports; 2073 fc_host_npiv_vports_inuse(vha->host) = ha->cur_vport_count; 2074 2075 if (IS_CNA_CAPABLE(ha)) 2076 speed = FC_PORTSPEED_10GBIT; 2077 else if (IS_QLA2031(ha)) 2078 speed = FC_PORTSPEED_16GBIT | FC_PORTSPEED_8GBIT | 2079 FC_PORTSPEED_4GBIT; 2080 else if (IS_QLA25XX(ha)) 2081 speed = FC_PORTSPEED_8GBIT | FC_PORTSPEED_4GBIT | 2082 FC_PORTSPEED_2GBIT | FC_PORTSPEED_1GBIT; 2083 else if (IS_QLA24XX_TYPE(ha)) 2084 speed = FC_PORTSPEED_4GBIT | FC_PORTSPEED_2GBIT | 2085 FC_PORTSPEED_1GBIT; 2086 else if (IS_QLA23XX(ha)) 2087 speed = FC_PORTSPEED_2GBIT | FC_PORTSPEED_1GBIT; 2088 else 2089 speed = FC_PORTSPEED_1GBIT; 2090 fc_host_supported_speeds(vha->host) = speed; 2091 } 2092