1 /* 2 * QLogic Fibre Channel HBA Driver 3 * Copyright (c) 2003-2013 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_QLAFX00(vha->hw)) { 892 return snprintf(buf, PAGE_SIZE, "%s\n", 893 vha->hw->mr.serial_num); 894 } else if (IS_FWI2_CAPABLE(ha)) { 895 qla2xxx_get_vpd_field(vha, "SN", buf, PAGE_SIZE); 896 return snprintf(buf, PAGE_SIZE, "%s\n", buf); 897 } 898 899 sn = ((ha->serial0 & 0x1f) << 16) | (ha->serial2 << 8) | ha->serial1; 900 return snprintf(buf, PAGE_SIZE, "%c%05d\n", 'A' + sn / 100000, 901 sn % 100000); 902 } 903 904 static ssize_t 905 qla2x00_isp_name_show(struct device *dev, struct device_attribute *attr, 906 char *buf) 907 { 908 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 909 return snprintf(buf, PAGE_SIZE, "ISP%04X\n", vha->hw->pdev->device); 910 } 911 912 static ssize_t 913 qla2x00_isp_id_show(struct device *dev, struct device_attribute *attr, 914 char *buf) 915 { 916 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 917 struct qla_hw_data *ha = vha->hw; 918 919 if (IS_QLAFX00(vha->hw)) 920 return snprintf(buf, PAGE_SIZE, "%s\n", 921 vha->hw->mr.hw_version); 922 923 return snprintf(buf, PAGE_SIZE, "%04x %04x %04x %04x\n", 924 ha->product_id[0], ha->product_id[1], ha->product_id[2], 925 ha->product_id[3]); 926 } 927 928 static ssize_t 929 qla2x00_model_name_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 934 if (IS_QLAFX00(vha->hw)) 935 return snprintf(buf, PAGE_SIZE, "%s\n", 936 vha->hw->mr.product_name); 937 938 return snprintf(buf, PAGE_SIZE, "%s\n", vha->hw->model_number); 939 } 940 941 static ssize_t 942 qla2x00_model_desc_show(struct device *dev, struct device_attribute *attr, 943 char *buf) 944 { 945 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 946 return snprintf(buf, PAGE_SIZE, "%s\n", 947 vha->hw->model_desc ? vha->hw->model_desc : ""); 948 } 949 950 static ssize_t 951 qla2x00_pci_info_show(struct device *dev, struct device_attribute *attr, 952 char *buf) 953 { 954 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 955 char pci_info[30]; 956 957 return snprintf(buf, PAGE_SIZE, "%s\n", 958 vha->hw->isp_ops->pci_info_str(vha, pci_info)); 959 } 960 961 static ssize_t 962 qla2x00_link_state_show(struct device *dev, struct device_attribute *attr, 963 char *buf) 964 { 965 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 966 struct qla_hw_data *ha = vha->hw; 967 int len = 0; 968 969 if (atomic_read(&vha->loop_state) == LOOP_DOWN || 970 atomic_read(&vha->loop_state) == LOOP_DEAD || 971 vha->device_flags & DFLG_NO_CABLE) 972 len = snprintf(buf, PAGE_SIZE, "Link Down\n"); 973 else if (atomic_read(&vha->loop_state) != LOOP_READY || 974 qla2x00_reset_active(vha)) 975 len = snprintf(buf, PAGE_SIZE, "Unknown Link State\n"); 976 else { 977 len = snprintf(buf, PAGE_SIZE, "Link Up - "); 978 979 switch (ha->current_topology) { 980 case ISP_CFG_NL: 981 len += snprintf(buf + len, PAGE_SIZE-len, "Loop\n"); 982 break; 983 case ISP_CFG_FL: 984 len += snprintf(buf + len, PAGE_SIZE-len, "FL_Port\n"); 985 break; 986 case ISP_CFG_N: 987 len += snprintf(buf + len, PAGE_SIZE-len, 988 "N_Port to N_Port\n"); 989 break; 990 case ISP_CFG_F: 991 len += snprintf(buf + len, PAGE_SIZE-len, "F_Port\n"); 992 break; 993 default: 994 len += snprintf(buf + len, PAGE_SIZE-len, "Loop\n"); 995 break; 996 } 997 } 998 return len; 999 } 1000 1001 static ssize_t 1002 qla2x00_zio_show(struct device *dev, struct device_attribute *attr, 1003 char *buf) 1004 { 1005 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 1006 int len = 0; 1007 1008 switch (vha->hw->zio_mode) { 1009 case QLA_ZIO_MODE_6: 1010 len += snprintf(buf + len, PAGE_SIZE-len, "Mode 6\n"); 1011 break; 1012 case QLA_ZIO_DISABLED: 1013 len += snprintf(buf + len, PAGE_SIZE-len, "Disabled\n"); 1014 break; 1015 } 1016 return len; 1017 } 1018 1019 static ssize_t 1020 qla2x00_zio_store(struct device *dev, struct device_attribute *attr, 1021 const char *buf, size_t count) 1022 { 1023 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 1024 struct qla_hw_data *ha = vha->hw; 1025 int val = 0; 1026 uint16_t zio_mode; 1027 1028 if (!IS_ZIO_SUPPORTED(ha)) 1029 return -ENOTSUPP; 1030 1031 if (sscanf(buf, "%d", &val) != 1) 1032 return -EINVAL; 1033 1034 if (val) 1035 zio_mode = QLA_ZIO_MODE_6; 1036 else 1037 zio_mode = QLA_ZIO_DISABLED; 1038 1039 /* Update per-hba values and queue a reset. */ 1040 if (zio_mode != QLA_ZIO_DISABLED || ha->zio_mode != QLA_ZIO_DISABLED) { 1041 ha->zio_mode = zio_mode; 1042 set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags); 1043 } 1044 return strlen(buf); 1045 } 1046 1047 static ssize_t 1048 qla2x00_zio_timer_show(struct device *dev, struct device_attribute *attr, 1049 char *buf) 1050 { 1051 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 1052 1053 return snprintf(buf, PAGE_SIZE, "%d us\n", vha->hw->zio_timer * 100); 1054 } 1055 1056 static ssize_t 1057 qla2x00_zio_timer_store(struct device *dev, struct device_attribute *attr, 1058 const char *buf, size_t count) 1059 { 1060 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 1061 int val = 0; 1062 uint16_t zio_timer; 1063 1064 if (sscanf(buf, "%d", &val) != 1) 1065 return -EINVAL; 1066 if (val > 25500 || val < 100) 1067 return -ERANGE; 1068 1069 zio_timer = (uint16_t)(val / 100); 1070 vha->hw->zio_timer = zio_timer; 1071 1072 return strlen(buf); 1073 } 1074 1075 static ssize_t 1076 qla2x00_beacon_show(struct device *dev, struct device_attribute *attr, 1077 char *buf) 1078 { 1079 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 1080 int len = 0; 1081 1082 if (vha->hw->beacon_blink_led) 1083 len += snprintf(buf + len, PAGE_SIZE-len, "Enabled\n"); 1084 else 1085 len += snprintf(buf + len, PAGE_SIZE-len, "Disabled\n"); 1086 return len; 1087 } 1088 1089 static ssize_t 1090 qla2x00_beacon_store(struct device *dev, struct device_attribute *attr, 1091 const char *buf, size_t count) 1092 { 1093 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 1094 struct qla_hw_data *ha = vha->hw; 1095 int val = 0; 1096 int rval; 1097 1098 if (IS_QLA2100(ha) || IS_QLA2200(ha)) 1099 return -EPERM; 1100 1101 if (test_bit(ABORT_ISP_ACTIVE, &vha->dpc_flags)) { 1102 ql_log(ql_log_warn, vha, 0x707a, 1103 "Abort ISP active -- ignoring beacon request.\n"); 1104 return -EBUSY; 1105 } 1106 1107 if (sscanf(buf, "%d", &val) != 1) 1108 return -EINVAL; 1109 1110 if (val) 1111 rval = ha->isp_ops->beacon_on(vha); 1112 else 1113 rval = ha->isp_ops->beacon_off(vha); 1114 1115 if (rval != QLA_SUCCESS) 1116 count = 0; 1117 1118 return count; 1119 } 1120 1121 static ssize_t 1122 qla2x00_optrom_bios_version_show(struct device *dev, 1123 struct device_attribute *attr, char *buf) 1124 { 1125 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 1126 struct qla_hw_data *ha = vha->hw; 1127 return snprintf(buf, PAGE_SIZE, "%d.%02d\n", ha->bios_revision[1], 1128 ha->bios_revision[0]); 1129 } 1130 1131 static ssize_t 1132 qla2x00_optrom_efi_version_show(struct device *dev, 1133 struct device_attribute *attr, char *buf) 1134 { 1135 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 1136 struct qla_hw_data *ha = vha->hw; 1137 return snprintf(buf, PAGE_SIZE, "%d.%02d\n", ha->efi_revision[1], 1138 ha->efi_revision[0]); 1139 } 1140 1141 static ssize_t 1142 qla2x00_optrom_fcode_version_show(struct device *dev, 1143 struct device_attribute *attr, char *buf) 1144 { 1145 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 1146 struct qla_hw_data *ha = vha->hw; 1147 return snprintf(buf, PAGE_SIZE, "%d.%02d\n", ha->fcode_revision[1], 1148 ha->fcode_revision[0]); 1149 } 1150 1151 static ssize_t 1152 qla2x00_optrom_fw_version_show(struct device *dev, 1153 struct device_attribute *attr, char *buf) 1154 { 1155 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 1156 struct qla_hw_data *ha = vha->hw; 1157 return snprintf(buf, PAGE_SIZE, "%d.%02d.%02d %d\n", 1158 ha->fw_revision[0], ha->fw_revision[1], ha->fw_revision[2], 1159 ha->fw_revision[3]); 1160 } 1161 1162 static ssize_t 1163 qla2x00_optrom_gold_fw_version_show(struct device *dev, 1164 struct device_attribute *attr, char *buf) 1165 { 1166 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 1167 struct qla_hw_data *ha = vha->hw; 1168 1169 if (!IS_QLA81XX(ha) && !IS_QLA83XX(ha)) 1170 return snprintf(buf, PAGE_SIZE, "\n"); 1171 1172 return snprintf(buf, PAGE_SIZE, "%d.%02d.%02d (%d)\n", 1173 ha->gold_fw_version[0], ha->gold_fw_version[1], 1174 ha->gold_fw_version[2], ha->gold_fw_version[3]); 1175 } 1176 1177 static ssize_t 1178 qla2x00_total_isp_aborts_show(struct device *dev, 1179 struct device_attribute *attr, char *buf) 1180 { 1181 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 1182 return snprintf(buf, PAGE_SIZE, "%d\n", 1183 vha->qla_stats.total_isp_aborts); 1184 } 1185 1186 static ssize_t 1187 qla24xx_84xx_fw_version_show(struct device *dev, 1188 struct device_attribute *attr, char *buf) 1189 { 1190 int rval = QLA_SUCCESS; 1191 uint16_t status[2] = {0, 0}; 1192 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 1193 struct qla_hw_data *ha = vha->hw; 1194 1195 if (!IS_QLA84XX(ha)) 1196 return snprintf(buf, PAGE_SIZE, "\n"); 1197 1198 if (ha->cs84xx->op_fw_version == 0) 1199 rval = qla84xx_verify_chip(vha, status); 1200 1201 if ((rval == QLA_SUCCESS) && (status[0] == 0)) 1202 return snprintf(buf, PAGE_SIZE, "%u\n", 1203 (uint32_t)ha->cs84xx->op_fw_version); 1204 1205 return snprintf(buf, PAGE_SIZE, "\n"); 1206 } 1207 1208 static ssize_t 1209 qla2x00_mpi_version_show(struct device *dev, struct device_attribute *attr, 1210 char *buf) 1211 { 1212 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 1213 struct qla_hw_data *ha = vha->hw; 1214 1215 if (!IS_QLA81XX(ha) && !IS_QLA8031(ha)) 1216 return snprintf(buf, PAGE_SIZE, "\n"); 1217 1218 return snprintf(buf, PAGE_SIZE, "%d.%02d.%02d (%x)\n", 1219 ha->mpi_version[0], ha->mpi_version[1], ha->mpi_version[2], 1220 ha->mpi_capabilities); 1221 } 1222 1223 static ssize_t 1224 qla2x00_phy_version_show(struct device *dev, struct device_attribute *attr, 1225 char *buf) 1226 { 1227 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 1228 struct qla_hw_data *ha = vha->hw; 1229 1230 if (!IS_QLA81XX(ha) && !IS_QLA8031(ha)) 1231 return snprintf(buf, PAGE_SIZE, "\n"); 1232 1233 return snprintf(buf, PAGE_SIZE, "%d.%02d.%02d\n", 1234 ha->phy_version[0], ha->phy_version[1], ha->phy_version[2]); 1235 } 1236 1237 static ssize_t 1238 qla2x00_flash_block_size_show(struct device *dev, 1239 struct device_attribute *attr, char *buf) 1240 { 1241 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 1242 struct qla_hw_data *ha = vha->hw; 1243 1244 return snprintf(buf, PAGE_SIZE, "0x%x\n", ha->fdt_block_size); 1245 } 1246 1247 static ssize_t 1248 qla2x00_vlan_id_show(struct device *dev, struct device_attribute *attr, 1249 char *buf) 1250 { 1251 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 1252 1253 if (!IS_CNA_CAPABLE(vha->hw)) 1254 return snprintf(buf, PAGE_SIZE, "\n"); 1255 1256 return snprintf(buf, PAGE_SIZE, "%d\n", vha->fcoe_vlan_id); 1257 } 1258 1259 static ssize_t 1260 qla2x00_vn_port_mac_address_show(struct device *dev, 1261 struct device_attribute *attr, char *buf) 1262 { 1263 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 1264 1265 if (!IS_CNA_CAPABLE(vha->hw)) 1266 return snprintf(buf, PAGE_SIZE, "\n"); 1267 1268 return snprintf(buf, PAGE_SIZE, "%02x:%02x:%02x:%02x:%02x:%02x\n", 1269 vha->fcoe_vn_port_mac[5], vha->fcoe_vn_port_mac[4], 1270 vha->fcoe_vn_port_mac[3], vha->fcoe_vn_port_mac[2], 1271 vha->fcoe_vn_port_mac[1], vha->fcoe_vn_port_mac[0]); 1272 } 1273 1274 static ssize_t 1275 qla2x00_fabric_param_show(struct device *dev, struct device_attribute *attr, 1276 char *buf) 1277 { 1278 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 1279 1280 return snprintf(buf, PAGE_SIZE, "%d\n", vha->hw->switch_cap); 1281 } 1282 1283 static ssize_t 1284 qla2x00_thermal_temp_show(struct device *dev, 1285 struct device_attribute *attr, char *buf) 1286 { 1287 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 1288 uint16_t temp = 0; 1289 1290 if (!vha->hw->thermal_support) { 1291 ql_log(ql_log_warn, vha, 0x70db, 1292 "Thermal not supported by this card.\n"); 1293 goto done; 1294 } 1295 1296 if (qla2x00_reset_active(vha)) { 1297 ql_log(ql_log_warn, vha, 0x70dc, "ISP reset active.\n"); 1298 goto done; 1299 } 1300 1301 if (vha->hw->flags.eeh_busy) { 1302 ql_log(ql_log_warn, vha, 0x70dd, "PCI EEH busy.\n"); 1303 goto done; 1304 } 1305 1306 if (qla2x00_get_thermal_temp(vha, &temp) == QLA_SUCCESS) 1307 return snprintf(buf, PAGE_SIZE, "%d\n", temp); 1308 1309 done: 1310 return snprintf(buf, PAGE_SIZE, "\n"); 1311 } 1312 1313 static ssize_t 1314 qla2x00_fw_state_show(struct device *dev, struct device_attribute *attr, 1315 char *buf) 1316 { 1317 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 1318 int rval = QLA_FUNCTION_FAILED; 1319 uint16_t state[5]; 1320 uint32_t pstate; 1321 1322 if (IS_QLAFX00(vha->hw)) { 1323 pstate = qlafx00_fw_state_show(dev, attr, buf); 1324 return snprintf(buf, PAGE_SIZE, "0x%x\n", pstate); 1325 } 1326 1327 if (qla2x00_reset_active(vha)) 1328 ql_log(ql_log_warn, vha, 0x707c, 1329 "ISP reset active.\n"); 1330 else if (!vha->hw->flags.eeh_busy) 1331 rval = qla2x00_get_firmware_state(vha, state); 1332 if (rval != QLA_SUCCESS) 1333 memset(state, -1, sizeof(state)); 1334 1335 return snprintf(buf, PAGE_SIZE, "0x%x 0x%x 0x%x 0x%x 0x%x\n", state[0], 1336 state[1], state[2], state[3], state[4]); 1337 } 1338 1339 static ssize_t 1340 qla2x00_diag_requests_show(struct device *dev, 1341 struct device_attribute *attr, char *buf) 1342 { 1343 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 1344 1345 if (!IS_BIDI_CAPABLE(vha->hw)) 1346 return snprintf(buf, PAGE_SIZE, "\n"); 1347 1348 return snprintf(buf, PAGE_SIZE, "%llu\n", vha->bidi_stats.io_count); 1349 } 1350 1351 static ssize_t 1352 qla2x00_diag_megabytes_show(struct device *dev, 1353 struct device_attribute *attr, char *buf) 1354 { 1355 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 1356 1357 if (!IS_BIDI_CAPABLE(vha->hw)) 1358 return snprintf(buf, PAGE_SIZE, "\n"); 1359 1360 return snprintf(buf, PAGE_SIZE, "%llu\n", 1361 vha->bidi_stats.transfer_bytes >> 20); 1362 } 1363 1364 static ssize_t 1365 qla2x00_fw_dump_size_show(struct device *dev, struct device_attribute *attr, 1366 char *buf) 1367 { 1368 scsi_qla_host_t *vha = shost_priv(class_to_shost(dev)); 1369 struct qla_hw_data *ha = vha->hw; 1370 uint32_t size; 1371 1372 if (!ha->fw_dumped) 1373 size = 0; 1374 else if (IS_QLA82XX(ha)) 1375 size = ha->md_template_size + ha->md_dump_size; 1376 else 1377 size = ha->fw_dump_len; 1378 1379 return snprintf(buf, PAGE_SIZE, "%d\n", size); 1380 } 1381 1382 static DEVICE_ATTR(driver_version, S_IRUGO, qla2x00_drvr_version_show, NULL); 1383 static DEVICE_ATTR(fw_version, S_IRUGO, qla2x00_fw_version_show, NULL); 1384 static DEVICE_ATTR(serial_num, S_IRUGO, qla2x00_serial_num_show, NULL); 1385 static DEVICE_ATTR(isp_name, S_IRUGO, qla2x00_isp_name_show, NULL); 1386 static DEVICE_ATTR(isp_id, S_IRUGO, qla2x00_isp_id_show, NULL); 1387 static DEVICE_ATTR(model_name, S_IRUGO, qla2x00_model_name_show, NULL); 1388 static DEVICE_ATTR(model_desc, S_IRUGO, qla2x00_model_desc_show, NULL); 1389 static DEVICE_ATTR(pci_info, S_IRUGO, qla2x00_pci_info_show, NULL); 1390 static DEVICE_ATTR(link_state, S_IRUGO, qla2x00_link_state_show, NULL); 1391 static DEVICE_ATTR(zio, S_IRUGO | S_IWUSR, qla2x00_zio_show, qla2x00_zio_store); 1392 static DEVICE_ATTR(zio_timer, S_IRUGO | S_IWUSR, qla2x00_zio_timer_show, 1393 qla2x00_zio_timer_store); 1394 static DEVICE_ATTR(beacon, S_IRUGO | S_IWUSR, qla2x00_beacon_show, 1395 qla2x00_beacon_store); 1396 static DEVICE_ATTR(optrom_bios_version, S_IRUGO, 1397 qla2x00_optrom_bios_version_show, NULL); 1398 static DEVICE_ATTR(optrom_efi_version, S_IRUGO, 1399 qla2x00_optrom_efi_version_show, NULL); 1400 static DEVICE_ATTR(optrom_fcode_version, S_IRUGO, 1401 qla2x00_optrom_fcode_version_show, NULL); 1402 static DEVICE_ATTR(optrom_fw_version, S_IRUGO, qla2x00_optrom_fw_version_show, 1403 NULL); 1404 static DEVICE_ATTR(optrom_gold_fw_version, S_IRUGO, 1405 qla2x00_optrom_gold_fw_version_show, NULL); 1406 static DEVICE_ATTR(84xx_fw_version, S_IRUGO, qla24xx_84xx_fw_version_show, 1407 NULL); 1408 static DEVICE_ATTR(total_isp_aborts, S_IRUGO, qla2x00_total_isp_aborts_show, 1409 NULL); 1410 static DEVICE_ATTR(mpi_version, S_IRUGO, qla2x00_mpi_version_show, NULL); 1411 static DEVICE_ATTR(phy_version, S_IRUGO, qla2x00_phy_version_show, NULL); 1412 static DEVICE_ATTR(flash_block_size, S_IRUGO, qla2x00_flash_block_size_show, 1413 NULL); 1414 static DEVICE_ATTR(vlan_id, S_IRUGO, qla2x00_vlan_id_show, NULL); 1415 static DEVICE_ATTR(vn_port_mac_address, S_IRUGO, 1416 qla2x00_vn_port_mac_address_show, NULL); 1417 static DEVICE_ATTR(fabric_param, S_IRUGO, qla2x00_fabric_param_show, NULL); 1418 static DEVICE_ATTR(fw_state, S_IRUGO, qla2x00_fw_state_show, NULL); 1419 static DEVICE_ATTR(thermal_temp, S_IRUGO, qla2x00_thermal_temp_show, NULL); 1420 static DEVICE_ATTR(diag_requests, S_IRUGO, qla2x00_diag_requests_show, NULL); 1421 static DEVICE_ATTR(diag_megabytes, S_IRUGO, qla2x00_diag_megabytes_show, NULL); 1422 static DEVICE_ATTR(fw_dump_size, S_IRUGO, qla2x00_fw_dump_size_show, NULL); 1423 1424 struct device_attribute *qla2x00_host_attrs[] = { 1425 &dev_attr_driver_version, 1426 &dev_attr_fw_version, 1427 &dev_attr_serial_num, 1428 &dev_attr_isp_name, 1429 &dev_attr_isp_id, 1430 &dev_attr_model_name, 1431 &dev_attr_model_desc, 1432 &dev_attr_pci_info, 1433 &dev_attr_link_state, 1434 &dev_attr_zio, 1435 &dev_attr_zio_timer, 1436 &dev_attr_beacon, 1437 &dev_attr_optrom_bios_version, 1438 &dev_attr_optrom_efi_version, 1439 &dev_attr_optrom_fcode_version, 1440 &dev_attr_optrom_fw_version, 1441 &dev_attr_84xx_fw_version, 1442 &dev_attr_total_isp_aborts, 1443 &dev_attr_mpi_version, 1444 &dev_attr_phy_version, 1445 &dev_attr_flash_block_size, 1446 &dev_attr_vlan_id, 1447 &dev_attr_vn_port_mac_address, 1448 &dev_attr_fabric_param, 1449 &dev_attr_fw_state, 1450 &dev_attr_optrom_gold_fw_version, 1451 &dev_attr_thermal_temp, 1452 &dev_attr_diag_requests, 1453 &dev_attr_diag_megabytes, 1454 &dev_attr_fw_dump_size, 1455 NULL, 1456 }; 1457 1458 /* Host attributes. */ 1459 1460 static void 1461 qla2x00_get_host_port_id(struct Scsi_Host *shost) 1462 { 1463 scsi_qla_host_t *vha = shost_priv(shost); 1464 1465 fc_host_port_id(shost) = vha->d_id.b.domain << 16 | 1466 vha->d_id.b.area << 8 | vha->d_id.b.al_pa; 1467 } 1468 1469 static void 1470 qla2x00_get_host_speed(struct Scsi_Host *shost) 1471 { 1472 struct qla_hw_data *ha = ((struct scsi_qla_host *) 1473 (shost_priv(shost)))->hw; 1474 u32 speed = FC_PORTSPEED_UNKNOWN; 1475 1476 if (IS_QLAFX00(ha)) { 1477 qlafx00_get_host_speed(shost); 1478 return; 1479 } 1480 1481 switch (ha->link_data_rate) { 1482 case PORT_SPEED_1GB: 1483 speed = FC_PORTSPEED_1GBIT; 1484 break; 1485 case PORT_SPEED_2GB: 1486 speed = FC_PORTSPEED_2GBIT; 1487 break; 1488 case PORT_SPEED_4GB: 1489 speed = FC_PORTSPEED_4GBIT; 1490 break; 1491 case PORT_SPEED_8GB: 1492 speed = FC_PORTSPEED_8GBIT; 1493 break; 1494 case PORT_SPEED_10GB: 1495 speed = FC_PORTSPEED_10GBIT; 1496 break; 1497 case PORT_SPEED_16GB: 1498 speed = FC_PORTSPEED_16GBIT; 1499 break; 1500 } 1501 fc_host_speed(shost) = speed; 1502 } 1503 1504 static void 1505 qla2x00_get_host_port_type(struct Scsi_Host *shost) 1506 { 1507 scsi_qla_host_t *vha = shost_priv(shost); 1508 uint32_t port_type = FC_PORTTYPE_UNKNOWN; 1509 1510 if (vha->vp_idx) { 1511 fc_host_port_type(shost) = FC_PORTTYPE_NPIV; 1512 return; 1513 } 1514 switch (vha->hw->current_topology) { 1515 case ISP_CFG_NL: 1516 port_type = FC_PORTTYPE_LPORT; 1517 break; 1518 case ISP_CFG_FL: 1519 port_type = FC_PORTTYPE_NLPORT; 1520 break; 1521 case ISP_CFG_N: 1522 port_type = FC_PORTTYPE_PTP; 1523 break; 1524 case ISP_CFG_F: 1525 port_type = FC_PORTTYPE_NPORT; 1526 break; 1527 } 1528 fc_host_port_type(shost) = port_type; 1529 } 1530 1531 static void 1532 qla2x00_get_starget_node_name(struct scsi_target *starget) 1533 { 1534 struct Scsi_Host *host = dev_to_shost(starget->dev.parent); 1535 scsi_qla_host_t *vha = shost_priv(host); 1536 fc_port_t *fcport; 1537 u64 node_name = 0; 1538 1539 list_for_each_entry(fcport, &vha->vp_fcports, list) { 1540 if (fcport->rport && 1541 starget->id == fcport->rport->scsi_target_id) { 1542 node_name = wwn_to_u64(fcport->node_name); 1543 break; 1544 } 1545 } 1546 1547 fc_starget_node_name(starget) = node_name; 1548 } 1549 1550 static void 1551 qla2x00_get_starget_port_name(struct scsi_target *starget) 1552 { 1553 struct Scsi_Host *host = dev_to_shost(starget->dev.parent); 1554 scsi_qla_host_t *vha = shost_priv(host); 1555 fc_port_t *fcport; 1556 u64 port_name = 0; 1557 1558 list_for_each_entry(fcport, &vha->vp_fcports, list) { 1559 if (fcport->rport && 1560 starget->id == fcport->rport->scsi_target_id) { 1561 port_name = wwn_to_u64(fcport->port_name); 1562 break; 1563 } 1564 } 1565 1566 fc_starget_port_name(starget) = port_name; 1567 } 1568 1569 static void 1570 qla2x00_get_starget_port_id(struct scsi_target *starget) 1571 { 1572 struct Scsi_Host *host = dev_to_shost(starget->dev.parent); 1573 scsi_qla_host_t *vha = shost_priv(host); 1574 fc_port_t *fcport; 1575 uint32_t port_id = ~0U; 1576 1577 list_for_each_entry(fcport, &vha->vp_fcports, list) { 1578 if (fcport->rport && 1579 starget->id == fcport->rport->scsi_target_id) { 1580 port_id = fcport->d_id.b.domain << 16 | 1581 fcport->d_id.b.area << 8 | fcport->d_id.b.al_pa; 1582 break; 1583 } 1584 } 1585 1586 fc_starget_port_id(starget) = port_id; 1587 } 1588 1589 static void 1590 qla2x00_set_rport_loss_tmo(struct fc_rport *rport, uint32_t timeout) 1591 { 1592 if (timeout) 1593 rport->dev_loss_tmo = timeout; 1594 else 1595 rport->dev_loss_tmo = 1; 1596 } 1597 1598 static void 1599 qla2x00_dev_loss_tmo_callbk(struct fc_rport *rport) 1600 { 1601 struct Scsi_Host *host = rport_to_shost(rport); 1602 fc_port_t *fcport = *(fc_port_t **)rport->dd_data; 1603 unsigned long flags; 1604 1605 if (!fcport) 1606 return; 1607 1608 /* Now that the rport has been deleted, set the fcport state to 1609 FCS_DEVICE_DEAD */ 1610 qla2x00_set_fcport_state(fcport, FCS_DEVICE_DEAD); 1611 1612 /* 1613 * Transport has effectively 'deleted' the rport, clear 1614 * all local references. 1615 */ 1616 spin_lock_irqsave(host->host_lock, flags); 1617 fcport->rport = fcport->drport = NULL; 1618 *((fc_port_t **)rport->dd_data) = NULL; 1619 spin_unlock_irqrestore(host->host_lock, flags); 1620 1621 if (test_bit(ABORT_ISP_ACTIVE, &fcport->vha->dpc_flags)) 1622 return; 1623 1624 if (unlikely(pci_channel_offline(fcport->vha->hw->pdev))) { 1625 qla2x00_abort_all_cmds(fcport->vha, DID_NO_CONNECT << 16); 1626 return; 1627 } 1628 } 1629 1630 static void 1631 qla2x00_terminate_rport_io(struct fc_rport *rport) 1632 { 1633 fc_port_t *fcport = *(fc_port_t **)rport->dd_data; 1634 1635 if (!fcport) 1636 return; 1637 1638 if (test_bit(ABORT_ISP_ACTIVE, &fcport->vha->dpc_flags)) 1639 return; 1640 1641 if (unlikely(pci_channel_offline(fcport->vha->hw->pdev))) { 1642 qla2x00_abort_all_cmds(fcport->vha, DID_NO_CONNECT << 16); 1643 return; 1644 } 1645 /* 1646 * At this point all fcport's software-states are cleared. Perform any 1647 * final cleanup of firmware resources (PCBs and XCBs). 1648 */ 1649 if (fcport->loop_id != FC_NO_LOOP_ID) { 1650 if (IS_FWI2_CAPABLE(fcport->vha->hw)) 1651 fcport->vha->hw->isp_ops->fabric_logout(fcport->vha, 1652 fcport->loop_id, fcport->d_id.b.domain, 1653 fcport->d_id.b.area, fcport->d_id.b.al_pa); 1654 else 1655 qla2x00_port_logout(fcport->vha, fcport); 1656 } 1657 } 1658 1659 static int 1660 qla2x00_issue_lip(struct Scsi_Host *shost) 1661 { 1662 scsi_qla_host_t *vha = shost_priv(shost); 1663 1664 if (IS_QLAFX00(vha->hw)) 1665 return 0; 1666 1667 qla2x00_loop_reset(vha); 1668 return 0; 1669 } 1670 1671 static struct fc_host_statistics * 1672 qla2x00_get_fc_host_stats(struct Scsi_Host *shost) 1673 { 1674 scsi_qla_host_t *vha = shost_priv(shost); 1675 struct qla_hw_data *ha = vha->hw; 1676 struct scsi_qla_host *base_vha = pci_get_drvdata(ha->pdev); 1677 int rval; 1678 struct link_statistics *stats; 1679 dma_addr_t stats_dma; 1680 struct fc_host_statistics *pfc_host_stat; 1681 1682 pfc_host_stat = &vha->fc_host_stat; 1683 memset(pfc_host_stat, -1, sizeof(struct fc_host_statistics)); 1684 1685 if (IS_QLAFX00(vha->hw)) 1686 goto done; 1687 1688 if (test_bit(UNLOADING, &vha->dpc_flags)) 1689 goto done; 1690 1691 if (unlikely(pci_channel_offline(ha->pdev))) 1692 goto done; 1693 1694 stats = dma_pool_alloc(ha->s_dma_pool, GFP_KERNEL, &stats_dma); 1695 if (stats == NULL) { 1696 ql_log(ql_log_warn, vha, 0x707d, 1697 "Failed to allocate memory for stats.\n"); 1698 goto done; 1699 } 1700 memset(stats, 0, DMA_POOL_SIZE); 1701 1702 rval = QLA_FUNCTION_FAILED; 1703 if (IS_FWI2_CAPABLE(ha)) { 1704 rval = qla24xx_get_isp_stats(base_vha, stats, stats_dma); 1705 } else if (atomic_read(&base_vha->loop_state) == LOOP_READY && 1706 !qla2x00_reset_active(vha) && !ha->dpc_active) { 1707 /* Must be in a 'READY' state for statistics retrieval. */ 1708 rval = qla2x00_get_link_status(base_vha, base_vha->loop_id, 1709 stats, stats_dma); 1710 } 1711 1712 if (rval != QLA_SUCCESS) 1713 goto done_free; 1714 1715 pfc_host_stat->link_failure_count = stats->link_fail_cnt; 1716 pfc_host_stat->loss_of_sync_count = stats->loss_sync_cnt; 1717 pfc_host_stat->loss_of_signal_count = stats->loss_sig_cnt; 1718 pfc_host_stat->prim_seq_protocol_err_count = stats->prim_seq_err_cnt; 1719 pfc_host_stat->invalid_tx_word_count = stats->inval_xmit_word_cnt; 1720 pfc_host_stat->invalid_crc_count = stats->inval_crc_cnt; 1721 if (IS_FWI2_CAPABLE(ha)) { 1722 pfc_host_stat->lip_count = stats->lip_cnt; 1723 pfc_host_stat->tx_frames = stats->tx_frames; 1724 pfc_host_stat->rx_frames = stats->rx_frames; 1725 pfc_host_stat->dumped_frames = stats->dumped_frames; 1726 pfc_host_stat->nos_count = stats->nos_rcvd; 1727 } 1728 pfc_host_stat->fcp_input_megabytes = vha->qla_stats.input_bytes >> 20; 1729 pfc_host_stat->fcp_output_megabytes = vha->qla_stats.output_bytes >> 20; 1730 1731 done_free: 1732 dma_pool_free(ha->s_dma_pool, stats, stats_dma); 1733 done: 1734 return pfc_host_stat; 1735 } 1736 1737 static void 1738 qla2x00_get_host_symbolic_name(struct Scsi_Host *shost) 1739 { 1740 scsi_qla_host_t *vha = shost_priv(shost); 1741 1742 qla2x00_get_sym_node_name(vha, fc_host_symbolic_name(shost)); 1743 } 1744 1745 static void 1746 qla2x00_set_host_system_hostname(struct Scsi_Host *shost) 1747 { 1748 scsi_qla_host_t *vha = shost_priv(shost); 1749 1750 set_bit(REGISTER_FDMI_NEEDED, &vha->dpc_flags); 1751 } 1752 1753 static void 1754 qla2x00_get_host_fabric_name(struct Scsi_Host *shost) 1755 { 1756 scsi_qla_host_t *vha = shost_priv(shost); 1757 uint8_t node_name[WWN_SIZE] = { 0xFF, 0xFF, 0xFF, 0xFF, \ 1758 0xFF, 0xFF, 0xFF, 0xFF}; 1759 u64 fabric_name = wwn_to_u64(node_name); 1760 1761 if (vha->device_flags & SWITCH_FOUND) 1762 fabric_name = wwn_to_u64(vha->fabric_node_name); 1763 1764 fc_host_fabric_name(shost) = fabric_name; 1765 } 1766 1767 static void 1768 qla2x00_get_host_port_state(struct Scsi_Host *shost) 1769 { 1770 scsi_qla_host_t *vha = shost_priv(shost); 1771 struct scsi_qla_host *base_vha = pci_get_drvdata(vha->hw->pdev); 1772 1773 if (!base_vha->flags.online) { 1774 fc_host_port_state(shost) = FC_PORTSTATE_OFFLINE; 1775 return; 1776 } 1777 1778 switch (atomic_read(&base_vha->loop_state)) { 1779 case LOOP_UPDATE: 1780 fc_host_port_state(shost) = FC_PORTSTATE_DIAGNOSTICS; 1781 break; 1782 case LOOP_DOWN: 1783 if (test_bit(LOOP_RESYNC_NEEDED, &base_vha->dpc_flags)) 1784 fc_host_port_state(shost) = FC_PORTSTATE_DIAGNOSTICS; 1785 else 1786 fc_host_port_state(shost) = FC_PORTSTATE_LINKDOWN; 1787 break; 1788 case LOOP_DEAD: 1789 fc_host_port_state(shost) = FC_PORTSTATE_LINKDOWN; 1790 break; 1791 case LOOP_READY: 1792 fc_host_port_state(shost) = FC_PORTSTATE_ONLINE; 1793 break; 1794 default: 1795 fc_host_port_state(shost) = FC_PORTSTATE_UNKNOWN; 1796 break; 1797 } 1798 } 1799 1800 static int 1801 qla24xx_vport_create(struct fc_vport *fc_vport, bool disable) 1802 { 1803 int ret = 0; 1804 uint8_t qos = 0; 1805 scsi_qla_host_t *base_vha = shost_priv(fc_vport->shost); 1806 scsi_qla_host_t *vha = NULL; 1807 struct qla_hw_data *ha = base_vha->hw; 1808 uint16_t options = 0; 1809 int cnt; 1810 struct req_que *req = ha->req_q_map[0]; 1811 1812 ret = qla24xx_vport_create_req_sanity_check(fc_vport); 1813 if (ret) { 1814 ql_log(ql_log_warn, vha, 0x707e, 1815 "Vport sanity check failed, status %x\n", ret); 1816 return (ret); 1817 } 1818 1819 vha = qla24xx_create_vhost(fc_vport); 1820 if (vha == NULL) { 1821 ql_log(ql_log_warn, vha, 0x707f, "Vport create host failed.\n"); 1822 return FC_VPORT_FAILED; 1823 } 1824 if (disable) { 1825 atomic_set(&vha->vp_state, VP_OFFLINE); 1826 fc_vport_set_state(fc_vport, FC_VPORT_DISABLED); 1827 } else 1828 atomic_set(&vha->vp_state, VP_FAILED); 1829 1830 /* ready to create vport */ 1831 ql_log(ql_log_info, vha, 0x7080, 1832 "VP entry id %d assigned.\n", vha->vp_idx); 1833 1834 /* initialized vport states */ 1835 atomic_set(&vha->loop_state, LOOP_DOWN); 1836 vha->vp_err_state= VP_ERR_PORTDWN; 1837 vha->vp_prev_err_state= VP_ERR_UNKWN; 1838 /* Check if physical ha port is Up */ 1839 if (atomic_read(&base_vha->loop_state) == LOOP_DOWN || 1840 atomic_read(&base_vha->loop_state) == LOOP_DEAD) { 1841 /* Don't retry or attempt login of this virtual port */ 1842 ql_dbg(ql_dbg_user, vha, 0x7081, 1843 "Vport loop state is not UP.\n"); 1844 atomic_set(&vha->loop_state, LOOP_DEAD); 1845 if (!disable) 1846 fc_vport_set_state(fc_vport, FC_VPORT_LINKDOWN); 1847 } 1848 1849 if (IS_T10_PI_CAPABLE(ha) && ql2xenabledif) { 1850 if (ha->fw_attributes & BIT_4) { 1851 int prot = 0, guard; 1852 vha->flags.difdix_supported = 1; 1853 ql_dbg(ql_dbg_user, vha, 0x7082, 1854 "Registered for DIF/DIX type 1 and 3 protection.\n"); 1855 if (ql2xenabledif == 1) 1856 prot = SHOST_DIX_TYPE0_PROTECTION; 1857 scsi_host_set_prot(vha->host, 1858 prot | SHOST_DIF_TYPE1_PROTECTION 1859 | SHOST_DIF_TYPE2_PROTECTION 1860 | SHOST_DIF_TYPE3_PROTECTION 1861 | SHOST_DIX_TYPE1_PROTECTION 1862 | SHOST_DIX_TYPE2_PROTECTION 1863 | SHOST_DIX_TYPE3_PROTECTION); 1864 1865 guard = SHOST_DIX_GUARD_CRC; 1866 1867 if (IS_PI_IPGUARD_CAPABLE(ha) && 1868 (ql2xenabledif > 1 || IS_PI_DIFB_DIX0_CAPABLE(ha))) 1869 guard |= SHOST_DIX_GUARD_IP; 1870 1871 scsi_host_set_guard(vha->host, guard); 1872 } else 1873 vha->flags.difdix_supported = 0; 1874 } 1875 1876 if (scsi_add_host_with_dma(vha->host, &fc_vport->dev, 1877 &ha->pdev->dev)) { 1878 ql_dbg(ql_dbg_user, vha, 0x7083, 1879 "scsi_add_host failure for VP[%d].\n", vha->vp_idx); 1880 goto vport_create_failed_2; 1881 } 1882 1883 /* initialize attributes */ 1884 fc_host_dev_loss_tmo(vha->host) = ha->port_down_retry_count; 1885 fc_host_node_name(vha->host) = wwn_to_u64(vha->node_name); 1886 fc_host_port_name(vha->host) = wwn_to_u64(vha->port_name); 1887 fc_host_supported_classes(vha->host) = 1888 fc_host_supported_classes(base_vha->host); 1889 fc_host_supported_speeds(vha->host) = 1890 fc_host_supported_speeds(base_vha->host); 1891 1892 qlt_vport_create(vha, ha); 1893 qla24xx_vport_disable(fc_vport, disable); 1894 1895 if (ha->flags.cpu_affinity_enabled) { 1896 req = ha->req_q_map[1]; 1897 ql_dbg(ql_dbg_multiq, vha, 0xc000, 1898 "Request queue %p attached with " 1899 "VP[%d], cpu affinity =%d\n", 1900 req, vha->vp_idx, ha->flags.cpu_affinity_enabled); 1901 goto vport_queue; 1902 } else if (ql2xmaxqueues == 1 || !ha->npiv_info) 1903 goto vport_queue; 1904 /* Create a request queue in QoS mode for the vport */ 1905 for (cnt = 0; cnt < ha->nvram_npiv_size; cnt++) { 1906 if (memcmp(ha->npiv_info[cnt].port_name, vha->port_name, 8) == 0 1907 && memcmp(ha->npiv_info[cnt].node_name, vha->node_name, 1908 8) == 0) { 1909 qos = ha->npiv_info[cnt].q_qos; 1910 break; 1911 } 1912 } 1913 1914 if (qos) { 1915 ret = qla25xx_create_req_que(ha, options, vha->vp_idx, 0, 0, 1916 qos); 1917 if (!ret) 1918 ql_log(ql_log_warn, vha, 0x7084, 1919 "Can't create request queue for VP[%d]\n", 1920 vha->vp_idx); 1921 else { 1922 ql_dbg(ql_dbg_multiq, vha, 0xc001, 1923 "Request Que:%d Q0s: %d) created for VP[%d]\n", 1924 ret, qos, vha->vp_idx); 1925 ql_dbg(ql_dbg_user, vha, 0x7085, 1926 "Request Que:%d Q0s: %d) created for VP[%d]\n", 1927 ret, qos, vha->vp_idx); 1928 req = ha->req_q_map[ret]; 1929 } 1930 } 1931 1932 vport_queue: 1933 vha->req = req; 1934 return 0; 1935 1936 vport_create_failed_2: 1937 qla24xx_disable_vp(vha); 1938 qla24xx_deallocate_vp_id(vha); 1939 scsi_host_put(vha->host); 1940 return FC_VPORT_FAILED; 1941 } 1942 1943 static int 1944 qla24xx_vport_delete(struct fc_vport *fc_vport) 1945 { 1946 scsi_qla_host_t *vha = fc_vport->dd_data; 1947 struct qla_hw_data *ha = vha->hw; 1948 uint16_t id = vha->vp_idx; 1949 1950 while (test_bit(LOOP_RESYNC_ACTIVE, &vha->dpc_flags) || 1951 test_bit(FCPORT_UPDATE_NEEDED, &vha->dpc_flags)) 1952 msleep(1000); 1953 1954 qla24xx_disable_vp(vha); 1955 1956 vha->flags.delete_progress = 1; 1957 1958 fc_remove_host(vha->host); 1959 1960 scsi_remove_host(vha->host); 1961 1962 /* Allow timer to run to drain queued items, when removing vp */ 1963 qla24xx_deallocate_vp_id(vha); 1964 1965 if (vha->timer_active) { 1966 qla2x00_vp_stop_timer(vha); 1967 ql_dbg(ql_dbg_user, vha, 0x7086, 1968 "Timer for the VP[%d] has stopped\n", vha->vp_idx); 1969 } 1970 1971 BUG_ON(atomic_read(&vha->vref_count)); 1972 1973 qla2x00_free_fcports(vha); 1974 1975 mutex_lock(&ha->vport_lock); 1976 ha->cur_vport_count--; 1977 clear_bit(vha->vp_idx, ha->vp_idx_map); 1978 mutex_unlock(&ha->vport_lock); 1979 1980 if (vha->req->id && !ha->flags.cpu_affinity_enabled) { 1981 if (qla25xx_delete_req_que(vha, vha->req) != QLA_SUCCESS) 1982 ql_log(ql_log_warn, vha, 0x7087, 1983 "Queue delete failed.\n"); 1984 } 1985 1986 ql_log(ql_log_info, vha, 0x7088, "VP[%d] deleted.\n", id); 1987 scsi_host_put(vha->host); 1988 return 0; 1989 } 1990 1991 static int 1992 qla24xx_vport_disable(struct fc_vport *fc_vport, bool disable) 1993 { 1994 scsi_qla_host_t *vha = fc_vport->dd_data; 1995 1996 if (disable) 1997 qla24xx_disable_vp(vha); 1998 else 1999 qla24xx_enable_vp(vha); 2000 2001 return 0; 2002 } 2003 2004 struct fc_function_template qla2xxx_transport_functions = { 2005 2006 .show_host_node_name = 1, 2007 .show_host_port_name = 1, 2008 .show_host_supported_classes = 1, 2009 .show_host_supported_speeds = 1, 2010 2011 .get_host_port_id = qla2x00_get_host_port_id, 2012 .show_host_port_id = 1, 2013 .get_host_speed = qla2x00_get_host_speed, 2014 .show_host_speed = 1, 2015 .get_host_port_type = qla2x00_get_host_port_type, 2016 .show_host_port_type = 1, 2017 .get_host_symbolic_name = qla2x00_get_host_symbolic_name, 2018 .show_host_symbolic_name = 1, 2019 .set_host_system_hostname = qla2x00_set_host_system_hostname, 2020 .show_host_system_hostname = 1, 2021 .get_host_fabric_name = qla2x00_get_host_fabric_name, 2022 .show_host_fabric_name = 1, 2023 .get_host_port_state = qla2x00_get_host_port_state, 2024 .show_host_port_state = 1, 2025 2026 .dd_fcrport_size = sizeof(struct fc_port *), 2027 .show_rport_supported_classes = 1, 2028 2029 .get_starget_node_name = qla2x00_get_starget_node_name, 2030 .show_starget_node_name = 1, 2031 .get_starget_port_name = qla2x00_get_starget_port_name, 2032 .show_starget_port_name = 1, 2033 .get_starget_port_id = qla2x00_get_starget_port_id, 2034 .show_starget_port_id = 1, 2035 2036 .set_rport_dev_loss_tmo = qla2x00_set_rport_loss_tmo, 2037 .show_rport_dev_loss_tmo = 1, 2038 2039 .issue_fc_host_lip = qla2x00_issue_lip, 2040 .dev_loss_tmo_callbk = qla2x00_dev_loss_tmo_callbk, 2041 .terminate_rport_io = qla2x00_terminate_rport_io, 2042 .get_fc_host_stats = qla2x00_get_fc_host_stats, 2043 2044 .vport_create = qla24xx_vport_create, 2045 .vport_disable = qla24xx_vport_disable, 2046 .vport_delete = qla24xx_vport_delete, 2047 .bsg_request = qla24xx_bsg_request, 2048 .bsg_timeout = qla24xx_bsg_timeout, 2049 }; 2050 2051 struct fc_function_template qla2xxx_transport_vport_functions = { 2052 2053 .show_host_node_name = 1, 2054 .show_host_port_name = 1, 2055 .show_host_supported_classes = 1, 2056 2057 .get_host_port_id = qla2x00_get_host_port_id, 2058 .show_host_port_id = 1, 2059 .get_host_speed = qla2x00_get_host_speed, 2060 .show_host_speed = 1, 2061 .get_host_port_type = qla2x00_get_host_port_type, 2062 .show_host_port_type = 1, 2063 .get_host_symbolic_name = qla2x00_get_host_symbolic_name, 2064 .show_host_symbolic_name = 1, 2065 .set_host_system_hostname = qla2x00_set_host_system_hostname, 2066 .show_host_system_hostname = 1, 2067 .get_host_fabric_name = qla2x00_get_host_fabric_name, 2068 .show_host_fabric_name = 1, 2069 .get_host_port_state = qla2x00_get_host_port_state, 2070 .show_host_port_state = 1, 2071 2072 .dd_fcrport_size = sizeof(struct fc_port *), 2073 .show_rport_supported_classes = 1, 2074 2075 .get_starget_node_name = qla2x00_get_starget_node_name, 2076 .show_starget_node_name = 1, 2077 .get_starget_port_name = qla2x00_get_starget_port_name, 2078 .show_starget_port_name = 1, 2079 .get_starget_port_id = qla2x00_get_starget_port_id, 2080 .show_starget_port_id = 1, 2081 2082 .set_rport_dev_loss_tmo = qla2x00_set_rport_loss_tmo, 2083 .show_rport_dev_loss_tmo = 1, 2084 2085 .issue_fc_host_lip = qla2x00_issue_lip, 2086 .dev_loss_tmo_callbk = qla2x00_dev_loss_tmo_callbk, 2087 .terminate_rport_io = qla2x00_terminate_rport_io, 2088 .get_fc_host_stats = qla2x00_get_fc_host_stats, 2089 .bsg_request = qla24xx_bsg_request, 2090 .bsg_timeout = qla24xx_bsg_timeout, 2091 }; 2092 2093 void 2094 qla2x00_init_host_attr(scsi_qla_host_t *vha) 2095 { 2096 struct qla_hw_data *ha = vha->hw; 2097 u32 speed = FC_PORTSPEED_UNKNOWN; 2098 2099 fc_host_dev_loss_tmo(vha->host) = ha->port_down_retry_count; 2100 fc_host_node_name(vha->host) = wwn_to_u64(vha->node_name); 2101 fc_host_port_name(vha->host) = wwn_to_u64(vha->port_name); 2102 fc_host_supported_classes(vha->host) = ha->tgt.enable_class_2 ? 2103 (FC_COS_CLASS2|FC_COS_CLASS3) : FC_COS_CLASS3; 2104 fc_host_max_npiv_vports(vha->host) = ha->max_npiv_vports; 2105 fc_host_npiv_vports_inuse(vha->host) = ha->cur_vport_count; 2106 2107 if (IS_CNA_CAPABLE(ha)) 2108 speed = FC_PORTSPEED_10GBIT; 2109 else if (IS_QLA2031(ha)) 2110 speed = FC_PORTSPEED_16GBIT | FC_PORTSPEED_8GBIT | 2111 FC_PORTSPEED_4GBIT; 2112 else if (IS_QLA25XX(ha)) 2113 speed = FC_PORTSPEED_8GBIT | FC_PORTSPEED_4GBIT | 2114 FC_PORTSPEED_2GBIT | FC_PORTSPEED_1GBIT; 2115 else if (IS_QLA24XX_TYPE(ha)) 2116 speed = FC_PORTSPEED_4GBIT | FC_PORTSPEED_2GBIT | 2117 FC_PORTSPEED_1GBIT; 2118 else if (IS_QLA23XX(ha)) 2119 speed = FC_PORTSPEED_2GBIT | FC_PORTSPEED_1GBIT; 2120 else if (IS_QLAFX00(ha)) 2121 speed = FC_PORTSPEED_8GBIT | FC_PORTSPEED_4GBIT | 2122 FC_PORTSPEED_2GBIT | FC_PORTSPEED_1GBIT; 2123 else 2124 speed = FC_PORTSPEED_1GBIT; 2125 fc_host_supported_speeds(vha->host) = speed; 2126 } 2127