]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - drivers/scsi/qla2xxx/qla_mbx.c
Merge tag 'scsi-misc' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi
[karo-tx-linux.git] / drivers / scsi / qla2xxx / qla_mbx.c
index b2f713ad90346093b40b515b70be4062666c6b80..cb11e04be5685fc42d4dc5c6afa89635835be63e 100644 (file)
@@ -555,7 +555,9 @@ qla2x00_get_fw_version(scsi_qla_host_t *vha)
        if (IS_FWI2_CAPABLE(ha))
                mcp->in_mb |= MBX_17|MBX_16|MBX_15;
        if (IS_QLA27XX(ha))
-               mcp->in_mb |= MBX_21|MBX_20|MBX_19|MBX_18;
+               mcp->in_mb |= MBX_23 | MBX_22 | MBX_21 | MBX_20 | MBX_19 |
+                   MBX_18 | MBX_14 | MBX_13 | MBX_11 | MBX_10 | MBX_9 | MBX_8;
+
        mcp->flags = 0;
        mcp->tov = MBX_TOV_SECONDS;
        rval = qla2x00_mailbox_command(vha, mcp);
@@ -571,6 +573,7 @@ qla2x00_get_fw_version(scsi_qla_host_t *vha)
                ha->fw_memory_size = 0x1FFFF;           /* Defaults to 128KB. */
        else
                ha->fw_memory_size = (mcp->mb[5] << 16) | mcp->mb[4];
+
        if (IS_QLA81XX(vha->hw) || IS_QLA8031(vha->hw) || IS_QLA8044(ha)) {
                ha->mpi_version[0] = mcp->mb[10] & 0xff;
                ha->mpi_version[1] = mcp->mb[11] >> 8;
@@ -580,6 +583,7 @@ qla2x00_get_fw_version(scsi_qla_host_t *vha)
                ha->phy_version[1] = mcp->mb[9] >> 8;
                ha->phy_version[2] = mcp->mb[9] & 0xff;
        }
+
        if (IS_FWI2_CAPABLE(ha)) {
                ha->fw_attributes_h = mcp->mb[15];
                ha->fw_attributes_ext[0] = mcp->mb[16];
@@ -591,7 +595,14 @@ qla2x00_get_fw_version(scsi_qla_host_t *vha)
                    "%s: Ext_FwAttributes Upper: 0x%x, Lower: 0x%x.\n",
                    __func__, mcp->mb[17], mcp->mb[16]);
        }
+
        if (IS_QLA27XX(ha)) {
+               ha->mpi_version[0] = mcp->mb[10] & 0xff;
+               ha->mpi_version[1] = mcp->mb[11] >> 8;
+               ha->mpi_version[2] = mcp->mb[11] & 0xff;
+               ha->pep_version[0] = mcp->mb[13] & 0xff;
+               ha->pep_version[1] = mcp->mb[14] >> 8;
+               ha->pep_version[2] = mcp->mb[14] & 0xff;
                ha->fw_shared_ram_start = (mcp->mb[19] << 16) | mcp->mb[18];
                ha->fw_shared_ram_end = (mcp->mb[21] << 16) | mcp->mb[20];
        }
@@ -1135,20 +1146,22 @@ qla2x00_get_adapter_id(scsi_qla_host_t *vha, uint16_t *id, uint8_t *al_pa,
                        vha->fcoe_vn_port_mac[0] = mcp->mb[13] & 0xff;
                }
                /* If FA-WWN supported */
-               if (mcp->mb[7] & BIT_14) {
-                       vha->port_name[0] = MSB(mcp->mb[16]);
-                       vha->port_name[1] = LSB(mcp->mb[16]);
-                       vha->port_name[2] = MSB(mcp->mb[17]);
-                       vha->port_name[3] = LSB(mcp->mb[17]);
-                       vha->port_name[4] = MSB(mcp->mb[18]);
-                       vha->port_name[5] = LSB(mcp->mb[18]);
-                       vha->port_name[6] = MSB(mcp->mb[19]);
-                       vha->port_name[7] = LSB(mcp->mb[19]);
-                       fc_host_port_name(vha->host) =
-                           wwn_to_u64(vha->port_name);
-                       ql_dbg(ql_dbg_mbx, vha, 0x10ca,
-                           "FA-WWN acquired %016llx\n",
-                           wwn_to_u64(vha->port_name));
+               if (IS_FAWWN_CAPABLE(vha->hw)) {
+                       if (mcp->mb[7] & BIT_14) {
+                               vha->port_name[0] = MSB(mcp->mb[16]);
+                               vha->port_name[1] = LSB(mcp->mb[16]);
+                               vha->port_name[2] = MSB(mcp->mb[17]);
+                               vha->port_name[3] = LSB(mcp->mb[17]);
+                               vha->port_name[4] = MSB(mcp->mb[18]);
+                               vha->port_name[5] = LSB(mcp->mb[18]);
+                               vha->port_name[6] = MSB(mcp->mb[19]);
+                               vha->port_name[7] = LSB(mcp->mb[19]);
+                               fc_host_port_name(vha->host) =
+                                   wwn_to_u64(vha->port_name);
+                               ql_dbg(ql_dbg_mbx, vha, 0x10ca,
+                                   "FA-WWN acquired %016llx\n",
+                                   wwn_to_u64(vha->port_name));
+                       }
                }
        }
 
@@ -1239,7 +1252,7 @@ qla2x00_init_firmware(scsi_qla_host_t *vha, uint16_t size)
            "Entered %s.\n", __func__);
 
        if (IS_P3P_TYPE(ha) && ql2xdbwr)
-               qla82xx_wr_32(ha, ha->nxdb_wr_ptr,
+               qla82xx_wr_32(ha, (uintptr_t __force)ha->nxdb_wr_ptr,
                        (0x04 | (ha->portnum << 5) | (0 << 8) | (0 << 16)));
 
        if (ha->flags.npiv_supported)
@@ -1865,7 +1878,6 @@ qla24xx_login_fabric(scsi_qla_host_t *vha, uint16_t loop_id, uint8_t domain,
        uint32_t        iop[2];
        struct qla_hw_data *ha = vha->hw;
        struct req_que *req;
-       struct rsp_que *rsp;
 
        ql_dbg(ql_dbg_mbx + ql_dbg_verbose, vha, 0x1061,
            "Entered %s.\n", __func__);
@@ -1874,7 +1886,6 @@ qla24xx_login_fabric(scsi_qla_host_t *vha, uint16_t loop_id, uint8_t domain,
                req = ha->req_q_map[0];
        else
                req = vha->req;
-       rsp = req->rsp;
 
        lg = dma_pool_alloc(ha->s_dma_pool, GFP_KERNEL, &lg_dma);
        if (lg == NULL) {
@@ -1888,11 +1899,11 @@ qla24xx_login_fabric(scsi_qla_host_t *vha, uint16_t loop_id, uint8_t domain,
        lg->entry_count = 1;
        lg->handle = MAKE_HANDLE(req->id, lg->handle);
        lg->nport_handle = cpu_to_le16(loop_id);
-       lg->control_flags = __constant_cpu_to_le16(LCF_COMMAND_PLOGI);
+       lg->control_flags = cpu_to_le16(LCF_COMMAND_PLOGI);
        if (opt & BIT_0)
-               lg->control_flags |= __constant_cpu_to_le16(LCF_COND_PLOGI);
+               lg->control_flags |= cpu_to_le16(LCF_COND_PLOGI);
        if (opt & BIT_1)
-               lg->control_flags |= __constant_cpu_to_le16(LCF_SKIP_PRLI);
+               lg->control_flags |= cpu_to_le16(LCF_SKIP_PRLI);
        lg->port_id[0] = al_pa;
        lg->port_id[1] = area;
        lg->port_id[2] = domain;
@@ -1907,7 +1918,7 @@ qla24xx_login_fabric(scsi_qla_host_t *vha, uint16_t loop_id, uint8_t domain,
                    "Failed to complete IOCB -- error status (%x).\n",
                    lg->entry_status);
                rval = QLA_FUNCTION_FAILED;
-       } else if (lg->comp_status != __constant_cpu_to_le16(CS_COMPLETE)) {
+       } else if (lg->comp_status != cpu_to_le16(CS_COMPLETE)) {
                iop[0] = le32_to_cpu(lg->io_parameter[0]);
                iop[1] = le32_to_cpu(lg->io_parameter[1]);
 
@@ -1961,7 +1972,7 @@ qla24xx_login_fabric(scsi_qla_host_t *vha, uint16_t loop_id, uint8_t domain,
                        mb[10] |= BIT_0;        /* Class 2. */
                if (lg->io_parameter[9] || lg->io_parameter[10])
                        mb[10] |= BIT_1;        /* Class 3. */
-               if (lg->io_parameter[0] & __constant_cpu_to_le32(BIT_7))
+               if (lg->io_parameter[0] & cpu_to_le32(BIT_7))
                        mb[10] |= BIT_7;        /* Confirmed Completion
                                                 * Allowed
                                                 */
@@ -2142,7 +2153,6 @@ qla24xx_fabric_logout(scsi_qla_host_t *vha, uint16_t loop_id, uint8_t domain,
        dma_addr_t      lg_dma;
        struct qla_hw_data *ha = vha->hw;
        struct req_que *req;
-       struct rsp_que *rsp;
 
        ql_dbg(ql_dbg_mbx + ql_dbg_verbose, vha, 0x106d,
            "Entered %s.\n", __func__);
@@ -2159,13 +2169,12 @@ qla24xx_fabric_logout(scsi_qla_host_t *vha, uint16_t loop_id, uint8_t domain,
                req = ha->req_q_map[0];
        else
                req = vha->req;
-       rsp = req->rsp;
        lg->entry_type = LOGINOUT_PORT_IOCB_TYPE;
        lg->entry_count = 1;
        lg->handle = MAKE_HANDLE(req->id, lg->handle);
        lg->nport_handle = cpu_to_le16(loop_id);
        lg->control_flags =
-           __constant_cpu_to_le16(LCF_COMMAND_LOGO|LCF_IMPL_LOGO|
+           cpu_to_le16(LCF_COMMAND_LOGO|LCF_IMPL_LOGO|
                LCF_FREE_NPORT);
        lg->port_id[0] = al_pa;
        lg->port_id[1] = area;
@@ -2181,7 +2190,7 @@ qla24xx_fabric_logout(scsi_qla_host_t *vha, uint16_t loop_id, uint8_t domain,
                    "Failed to complete IOCB -- error status (%x).\n",
                    lg->entry_status);
                rval = QLA_FUNCTION_FAILED;
-       } else if (lg->comp_status != __constant_cpu_to_le16(CS_COMPLETE)) {
+       } else if (lg->comp_status != cpu_to_le16(CS_COMPLETE)) {
                ql_dbg(ql_dbg_mbx, vha, 0x1071,
                    "Failed to complete IOCB -- completion status (%x) "
                    "ioparam=%x/%x.\n", le16_to_cpu(lg->comp_status),
@@ -2673,7 +2682,7 @@ qla24xx_abort_command(srb_t *sp)
                    "Failed to complete IOCB -- error status (%x).\n",
                    abt->entry_status);
                rval = QLA_FUNCTION_FAILED;
-       } else if (abt->nport_handle != __constant_cpu_to_le16(0)) {
+       } else if (abt->nport_handle != cpu_to_le16(0)) {
                ql_dbg(ql_dbg_mbx, vha, 0x1090,
                    "Failed to complete IOCB -- completion status (%x).\n",
                    le16_to_cpu(abt->nport_handle));
@@ -2756,8 +2765,7 @@ __qla24xx_issue_tmf(char *name, uint32_t type, struct fc_port *fcport,
                    "Failed to complete IOCB -- error status (%x).\n",
                    sts->entry_status);
                rval = QLA_FUNCTION_FAILED;
-       } else if (sts->comp_status !=
-           __constant_cpu_to_le16(CS_COMPLETE)) {
+       } else if (sts->comp_status != cpu_to_le16(CS_COMPLETE)) {
                ql_dbg(ql_dbg_mbx, vha, 0x1096,
                    "Failed to complete IOCB -- completion status (%x).\n",
                    le16_to_cpu(sts->comp_status));
@@ -2853,7 +2861,8 @@ qla2x00_write_serdes_word(scsi_qla_host_t *vha, uint16_t addr, uint16_t data)
        mbx_cmd_t mc;
        mbx_cmd_t *mcp = &mc;
 
-       if (!IS_QLA2031(vha->hw) && !IS_QLA27XX(vha->hw))
+       if (!IS_QLA25XX(vha->hw) && !IS_QLA2031(vha->hw) &&
+           !IS_QLA27XX(vha->hw))
                return QLA_FUNCTION_FAILED;
 
        ql_dbg(ql_dbg_mbx + ql_dbg_verbose, vha, 0x1182,
@@ -2891,7 +2900,8 @@ qla2x00_read_serdes_word(scsi_qla_host_t *vha, uint16_t addr, uint16_t *data)
        mbx_cmd_t mc;
        mbx_cmd_t *mcp = &mc;
 
-       if (!IS_QLA2031(vha->hw) && !IS_QLA27XX(vha->hw))
+       if (!IS_QLA25XX(vha->hw) && !IS_QLA2031(vha->hw) &&
+           !IS_QLA27XX(vha->hw))
                return QLA_FUNCTION_FAILED;
 
        ql_dbg(ql_dbg_mbx + ql_dbg_verbose, vha, 0x1185,
@@ -3483,7 +3493,7 @@ qla24xx_modify_vp_config(scsi_qla_host_t *vha)
                    "Failed to complete IOCB -- error status (%x).\n",
                    vpmod->comp_status);
                rval = QLA_FUNCTION_FAILED;
-       } else if (vpmod->comp_status != __constant_cpu_to_le16(CS_COMPLETE)) {
+       } else if (vpmod->comp_status != cpu_to_le16(CS_COMPLETE)) {
                ql_dbg(ql_dbg_mbx, vha, 0x10bf,
                    "Failed to complete IOCB -- completion status (%x).\n",
                    le16_to_cpu(vpmod->comp_status));
@@ -3542,7 +3552,7 @@ qla24xx_control_vp(scsi_qla_host_t *vha, int cmd)
        vce->entry_type = VP_CTRL_IOCB_TYPE;
        vce->entry_count = 1;
        vce->command = cpu_to_le16(cmd);
-       vce->vp_count = __constant_cpu_to_le16(1);
+       vce->vp_count = cpu_to_le16(1);
 
        /* index map in firmware starts with 1; decrement index
         * this is ok as we never use index 0
@@ -3562,7 +3572,7 @@ qla24xx_control_vp(scsi_qla_host_t *vha, int cmd)
                    "Failed to complete IOCB -- error status (%x).\n",
                    vce->entry_status);
                rval = QLA_FUNCTION_FAILED;
-       } else if (vce->comp_status != __constant_cpu_to_le16(CS_COMPLETE)) {
+       } else if (vce->comp_status != cpu_to_le16(CS_COMPLETE)) {
                ql_dbg(ql_dbg_mbx, vha, 0x10c5,
                    "Failed to complet IOCB -- completion status (%x).\n",
                    le16_to_cpu(vce->comp_status));