]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - drivers/scsi/qla2xxx/qla_isr.c
[SCSI] qla2xxx: Add support for ISP2071.
[karo-tx-linux.git] / drivers / scsi / qla2xxx / qla_isr.c
index 0a1dcb43d18bdb6b4c734e0ad38ac956ddeb5fe7..c2aaf6a93cc18b0685275165eaa7afb80b1947e9 100644 (file)
@@ -356,15 +356,16 @@ qla81xx_idc_event(scsi_qla_host_t *vha, uint16_t aen, uint16_t descr)
 const char *
 qla2x00_get_link_speed_str(struct qla_hw_data *ha, uint16_t speed)
 {
-       static const char * const link_speeds[] = {
-               "1", "2", "?", "4", "8", "16", "10"
+       static const char *const link_speeds[] = {
+               "1", "2", "?", "4", "8", "16", "32", "10"
        };
+#define        QLA_LAST_SPEED  7
 
        if (IS_QLA2100(ha) || IS_QLA2200(ha))
                return link_speeds[0];
        else if (speed == 0x13)
-               return link_speeds[6];
-       else if (speed < 6)
+               return link_speeds[QLA_LAST_SPEED];
+       else if (speed < QLA_LAST_SPEED)
                return link_speeds[speed];
        else
                return link_speeds[LS_UNKNOWN];
@@ -649,7 +650,7 @@ skip_rio:
                break;
 
        case MBA_SYSTEM_ERR:            /* System Error */
-               mbx = (IS_QLA81XX(ha) || IS_QLA83XX(ha)) ?
+               mbx = (IS_QLA81XX(ha) || IS_QLA83XX(ha) || IS_QLA27XX(ha)) ?
                        RD_REG_WORD(&reg24->mailbox7) : 0;
                ql_log(ql_log_warn, vha, 0x5003,
                    "ISP System Error - mbx1=%xh mbx2=%xh mbx3=%xh "
@@ -666,7 +667,7 @@ skip_rio:
                                vha->device_flags |= DFLG_DEV_FAILED;
                        } else {
                                /* Check to see if MPI timeout occurred */
-                               if ((mbx & MBX_3) && (ha->flags.port0))
+                               if ((mbx & MBX_3) && (ha->port_no == 0))
                                        set_bit(MPI_RESET_NEEDED,
                                            &vha->dpc_flags);
 
@@ -2525,7 +2526,8 @@ qla2xxx_check_risc_status(scsi_qla_host_t *vha)
        struct qla_hw_data *ha = vha->hw;
        struct device_reg_24xx __iomem *reg = &ha->iobase->isp24;
 
-       if (!IS_QLA25XX(ha) && !IS_QLA81XX(ha) && !IS_QLA83XX(ha))
+       if (!IS_QLA25XX(ha) && !IS_QLA81XX(ha) && !IS_QLA83XX(ha) &&
+           !IS_QLA27XX(ha))
                return;
 
        rval = QLA_SUCCESS;
@@ -2979,7 +2981,7 @@ msix_register_fail:
        }
 
        /* Enable MSI-X vector for response queue update for queue 0 */
-       if (IS_QLA83XX(ha)) {
+       if (IS_QLA83XX(ha) || IS_QLA27XX(ha)) {
                if (ha->msixbase && ha->mqiobase &&
                    (ha->max_rsp_queues > 1 || ha->max_req_queues > 1))
                        ha->mqenable = 1;
@@ -3003,12 +3005,13 @@ int
 qla2x00_request_irqs(struct qla_hw_data *ha, struct rsp_que *rsp)
 {
        int ret = QLA_FUNCTION_FAILED;
-       device_reg_t __iomem *reg = ha->iobase;
+       device_reg_t *reg = ha->iobase;
        scsi_qla_host_t *vha = pci_get_drvdata(ha->pdev);
 
        /* If possible, enable MSI-X. */
        if (!IS_QLA2432(ha) && !IS_QLA2532(ha) && !IS_QLA8432(ha) &&
-               !IS_CNA_CAPABLE(ha) && !IS_QLA2031(ha) && !IS_QLAFX00(ha))
+           !IS_CNA_CAPABLE(ha) && !IS_QLA2031(ha) && !IS_QLAFX00(ha) &&
+           !IS_QLA27XX(ha))
                goto skip_msi;
 
        if (ha->pdev->subsystem_vendor == PCI_VENDOR_ID_HP &&
@@ -3043,7 +3046,8 @@ skip_msix:
            "Falling back-to MSI mode -%d.\n", ret);
 
        if (!IS_QLA24XX(ha) && !IS_QLA2532(ha) && !IS_QLA8432(ha) &&
-           !IS_QLA8001(ha) && !IS_P3P_TYPE(ha) && !IS_QLAFX00(ha))
+           !IS_QLA8001(ha) && !IS_P3P_TYPE(ha) && !IS_QLAFX00(ha) &&
+           !IS_QLA27XX(ha))
                goto skip_msi;
 
        ret = pci_enable_msi(ha->pdev);