Merge tag 'spdx-5.10-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh...
[linux-2.6-microblaze.git] / drivers / scsi / qla2xxx / qla_attr.c
index 69ae215..ab45ac1 100644 (file)
@@ -156,6 +156,14 @@ qla2x00_sysfs_write_fw_dump(struct file *filp, struct kobject *kobj,
                               vha->host_no);
                }
                break;
+       case 10:
+               if (IS_QLA27XX(ha) || IS_QLA28XX(ha)) {
+                       ql_log(ql_log_info, vha, 0x70e9,
+                              "Issuing MPI firmware dump on host#%ld.\n",
+                              vha->host_no);
+                       ha->isp_ops->mpi_fw_dump(vha, 0);
+               }
+               break;
        }
        return count;
 }
@@ -743,8 +751,6 @@ qla2x00_sysfs_write_reset(struct file *filp, struct kobject *kobj,
                        qla83xx_idc_audit(vha, IDC_AUDIT_TIMESTAMP);
                        qla83xx_idc_unlock(vha, 0);
                        break;
-               } else if (IS_QLA27XX(ha) || IS_QLA28XX(ha)) {
-                       qla27xx_reset_mpi(vha);
                } else {
                        /* Make sure FC side is not in reset */
                        WARN_ON_ONCE(qla2x00_wait_for_hba_online(vha) !=
@@ -2725,6 +2731,9 @@ qla2x00_get_fc_host_stats(struct Scsi_Host *shost)
        struct link_statistics *stats;
        dma_addr_t stats_dma;
        struct fc_host_statistics *p = &vha->fc_host_stat;
+       struct qla_qpair *qpair;
+       int i;
+       u64 ib = 0, ob = 0, ir = 0, or = 0;
 
        memset(p, -1, sizeof(*p));
 
@@ -2761,6 +2770,27 @@ qla2x00_get_fc_host_stats(struct Scsi_Host *shost)
        if (rval != QLA_SUCCESS)
                goto done_free;
 
+       /* --- */
+       for (i = 0; i < vha->hw->max_qpairs; i++) {
+               qpair = vha->hw->queue_pair_map[i];
+               if (!qpair)
+                       continue;
+               ir += qpair->counters.input_requests;
+               or += qpair->counters.output_requests;
+               ib += qpair->counters.input_bytes;
+               ob += qpair->counters.output_bytes;
+       }
+       ir += ha->base_qpair->counters.input_requests;
+       or += ha->base_qpair->counters.output_requests;
+       ib += ha->base_qpair->counters.input_bytes;
+       ob += ha->base_qpair->counters.output_bytes;
+
+       ir += vha->qla_stats.input_requests;
+       or += vha->qla_stats.output_requests;
+       ib += vha->qla_stats.input_bytes;
+       ob += vha->qla_stats.output_bytes;
+       /* --- */
+
        p->link_failure_count = le32_to_cpu(stats->link_fail_cnt);
        p->loss_of_sync_count = le32_to_cpu(stats->loss_sync_cnt);
        p->loss_of_signal_count = le32_to_cpu(stats->loss_sig_cnt);
@@ -2780,15 +2810,16 @@ qla2x00_get_fc_host_stats(struct Scsi_Host *shost)
                        p->rx_words = le64_to_cpu(stats->fpm_recv_word_cnt);
                        p->tx_words = le64_to_cpu(stats->fpm_xmit_word_cnt);
                } else {
-                       p->rx_words = vha->qla_stats.input_bytes;
-                       p->tx_words = vha->qla_stats.output_bytes;
+                       p->rx_words = ib >> 2;
+                       p->tx_words = ob >> 2;
                }
        }
+
        p->fcp_control_requests = vha->qla_stats.control_requests;
-       p->fcp_input_requests = vha->qla_stats.input_requests;
-       p->fcp_output_requests = vha->qla_stats.output_requests;
-       p->fcp_input_megabytes = vha->qla_stats.input_bytes >> 20;
-       p->fcp_output_megabytes = vha->qla_stats.output_bytes >> 20;
+       p->fcp_input_requests = ir;
+       p->fcp_output_requests = or;
+       p->fcp_input_megabytes  = ib >> 20;
+       p->fcp_output_megabytes = ob >> 20;
        p->seconds_since_last_reset =
            get_jiffies_64() - vha->qla_stats.jiffies_at_last_reset;
        do_div(p->seconds_since_last_reset, HZ);
@@ -2808,9 +2839,18 @@ qla2x00_reset_host_stats(struct Scsi_Host *shost)
        struct scsi_qla_host *base_vha = pci_get_drvdata(ha->pdev);
        struct link_statistics *stats;
        dma_addr_t stats_dma;
+       int i;
+       struct qla_qpair *qpair;
 
        memset(&vha->qla_stats, 0, sizeof(vha->qla_stats));
        memset(&vha->fc_host_stat, 0, sizeof(vha->fc_host_stat));
+       for (i = 0; i < vha->hw->max_qpairs; i++) {
+               qpair = vha->hw->queue_pair_map[i];
+               if (!qpair)
+                       continue;
+               memset(&qpair->counters, 0, sizeof(qpair->counters));
+       }
+       memset(&ha->base_qpair->counters, 0, sizeof(qpair->counters));
 
        vha->qla_stats.jiffies_at_last_reset = get_jiffies_64();
 
@@ -3213,46 +3253,7 @@ qla2x00_init_host_attr(scsi_qla_host_t *vha)
        fc_host_max_npiv_vports(vha->host) = ha->max_npiv_vports;
        fc_host_npiv_vports_inuse(vha->host) = ha->cur_vport_count;
 
-       if (IS_CNA_CAPABLE(ha))
-               speeds = FC_PORTSPEED_10GBIT;
-       else if (IS_QLA28XX(ha) || IS_QLA27XX(ha)) {
-               if (ha->max_supported_speed == 2) {
-                       if (ha->min_supported_speed <= 6)
-                               speeds |= FC_PORTSPEED_64GBIT;
-               }
-               if (ha->max_supported_speed == 2 ||
-                   ha->max_supported_speed == 1) {
-                       if (ha->min_supported_speed <= 5)
-                               speeds |= FC_PORTSPEED_32GBIT;
-               }
-               if (ha->max_supported_speed == 2 ||
-                   ha->max_supported_speed == 1 ||
-                   ha->max_supported_speed == 0) {
-                       if (ha->min_supported_speed <= 4)
-                               speeds |= FC_PORTSPEED_16GBIT;
-               }
-               if (ha->max_supported_speed == 1 ||
-                   ha->max_supported_speed == 0) {
-                       if (ha->min_supported_speed <= 3)
-                               speeds |= FC_PORTSPEED_8GBIT;
-               }
-               if (ha->max_supported_speed == 0) {
-                       if (ha->min_supported_speed <= 2)
-                               speeds |= FC_PORTSPEED_4GBIT;
-               }
-       } else if (IS_QLA2031(ha))
-               speeds = FC_PORTSPEED_16GBIT|FC_PORTSPEED_8GBIT|
-                       FC_PORTSPEED_4GBIT;
-       else if (IS_QLA25XX(ha) || IS_QLAFX00(ha))
-               speeds = FC_PORTSPEED_8GBIT|FC_PORTSPEED_4GBIT|
-                       FC_PORTSPEED_2GBIT|FC_PORTSPEED_1GBIT;
-       else if (IS_QLA24XX_TYPE(ha))
-               speeds = FC_PORTSPEED_4GBIT|FC_PORTSPEED_2GBIT|
-                       FC_PORTSPEED_1GBIT;
-       else if (IS_QLA23XX(ha))
-               speeds = FC_PORTSPEED_2GBIT|FC_PORTSPEED_1GBIT;
-       else
-               speeds = FC_PORTSPEED_1GBIT;
+       speeds = qla25xx_fdmi_port_speed_capability(ha);
 
        fc_host_supported_speeds(vha->host) = speeds;
 }