diff options
author | James Bottomley <jejb@mulgrave.il.steeleye.com> | 2007-01-31 12:24:00 -0500 |
---|---|---|
committer | James Bottomley <jejb@mulgrave.il.steeleye.com> | 2007-01-31 12:24:00 -0500 |
commit | 30716e07ef511ec7525c07eb1e8060ba8943c2a2 (patch) | |
tree | eb6a47cae63d3587fa773cc5a16781eaa2c7810b /drivers/scsi/qla2xxx | |
parent | 03c79cc56e4497cbd09d74a73c1bd0d1d9a8a16c (diff) | |
parent | f56df2f4db6e4af87fb8e941cff69f4501a111df (diff) |
Merge branch 'linus'
Diffstat (limited to 'drivers/scsi/qla2xxx')
-rw-r--r-- | drivers/scsi/qla2xxx/qla_def.h | 2 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_gbl.h | 1 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_gs.c | 24 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_init.c | 76 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_isr.c | 15 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_mbx.c | 12 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_os.c | 59 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_version.h | 2 |
8 files changed, 107 insertions, 84 deletions
diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h index e83e4a34725a..05f4f2a378eb 100644 --- a/drivers/scsi/qla2xxx/qla_def.h +++ b/drivers/scsi/qla2xxx/qla_def.h | |||
@@ -1602,6 +1602,7 @@ typedef struct fc_port { | |||
1602 | 1602 | ||
1603 | #define CT_REJECT_RESPONSE 0x8001 | 1603 | #define CT_REJECT_RESPONSE 0x8001 |
1604 | #define CT_ACCEPT_RESPONSE 0x8002 | 1604 | #define CT_ACCEPT_RESPONSE 0x8002 |
1605 | #define CT_REASON_INVALID_COMMAND_CODE 0x01 | ||
1605 | #define CT_REASON_CANNOT_PERFORM 0x09 | 1606 | #define CT_REASON_CANNOT_PERFORM 0x09 |
1606 | #define CT_EXPL_ALREADY_REGISTERED 0x10 | 1607 | #define CT_EXPL_ALREADY_REGISTERED 0x10 |
1607 | 1608 | ||
@@ -2103,6 +2104,7 @@ typedef struct scsi_qla_host { | |||
2103 | uint32_t msi_enabled :1; | 2104 | uint32_t msi_enabled :1; |
2104 | uint32_t msix_enabled :1; | 2105 | uint32_t msix_enabled :1; |
2105 | uint32_t disable_serdes :1; | 2106 | uint32_t disable_serdes :1; |
2107 | uint32_t gpsc_supported :1; | ||
2106 | } flags; | 2108 | } flags; |
2107 | 2109 | ||
2108 | atomic_t loop_state; | 2110 | atomic_t loop_state; |
diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h index f8bddec4fe85..74544ae4b0e2 100644 --- a/drivers/scsi/qla2xxx/qla_gbl.h +++ b/drivers/scsi/qla2xxx/qla_gbl.h | |||
@@ -45,7 +45,6 @@ extern void qla2x00_update_fcports(scsi_qla_host_t *); | |||
45 | extern int qla2x00_abort_isp(scsi_qla_host_t *); | 45 | extern int qla2x00_abort_isp(scsi_qla_host_t *); |
46 | 46 | ||
47 | extern void qla2x00_update_fcport(scsi_qla_host_t *, fc_port_t *); | 47 | extern void qla2x00_update_fcport(scsi_qla_host_t *, fc_port_t *); |
48 | extern void qla2x00_reg_remote_port(scsi_qla_host_t *, fc_port_t *); | ||
49 | 48 | ||
50 | extern void qla2x00_alloc_fw_dump(scsi_qla_host_t *); | 49 | extern void qla2x00_alloc_fw_dump(scsi_qla_host_t *); |
51 | extern void qla2x00_try_to_stop_firmware(scsi_qla_host_t *); | 50 | extern void qla2x00_try_to_stop_firmware(scsi_qla_host_t *); |
diff --git a/drivers/scsi/qla2xxx/qla_gs.c b/drivers/scsi/qla2xxx/qla_gs.c index 97fbc62ec669..ec5b2dd90d6a 100644 --- a/drivers/scsi/qla2xxx/qla_gs.c +++ b/drivers/scsi/qla2xxx/qla_gs.c | |||
@@ -127,8 +127,8 @@ qla2x00_chk_ms_status(scsi_qla_host_t *ha, ms_iocb_entry_t *ms_pkt, | |||
127 | ha->host_no, routine, ms_pkt->entry_status)); | 127 | ha->host_no, routine, ms_pkt->entry_status)); |
128 | } else { | 128 | } else { |
129 | if (IS_QLA24XX(ha) || IS_QLA54XX(ha)) | 129 | if (IS_QLA24XX(ha) || IS_QLA54XX(ha)) |
130 | comp_status = | 130 | comp_status = le16_to_cpu( |
131 | ((struct ct_entry_24xx *)ms_pkt)->comp_status; | 131 | ((struct ct_entry_24xx *)ms_pkt)->comp_status); |
132 | else | 132 | else |
133 | comp_status = le16_to_cpu(ms_pkt->status); | 133 | comp_status = le16_to_cpu(ms_pkt->status); |
134 | switch (comp_status) { | 134 | switch (comp_status) { |
@@ -143,6 +143,7 @@ qla2x00_chk_ms_status(scsi_qla_host_t *ha, ms_iocb_entry_t *ms_pkt, | |||
143 | DEBUG2_3(qla2x00_dump_buffer( | 143 | DEBUG2_3(qla2x00_dump_buffer( |
144 | (uint8_t *)&ct_rsp->header, | 144 | (uint8_t *)&ct_rsp->header, |
145 | sizeof(struct ct_rsp_hdr))); | 145 | sizeof(struct ct_rsp_hdr))); |
146 | rval = QLA_INVALID_COMMAND; | ||
146 | } else | 147 | } else |
147 | rval = QLA_SUCCESS; | 148 | rval = QLA_SUCCESS; |
148 | break; | 149 | break; |
@@ -1683,7 +1684,7 @@ qla2x00_gfpn_id(scsi_qla_host_t *ha, sw_info_t *list) | |||
1683 | memset(list[i].fabric_port_name, 0, WWN_SIZE); | 1684 | memset(list[i].fabric_port_name, 0, WWN_SIZE); |
1684 | 1685 | ||
1685 | /* Prepare common MS IOCB */ | 1686 | /* Prepare common MS IOCB */ |
1686 | ms_pkt = qla2x00_prep_ms_iocb(ha, GFPN_ID_REQ_SIZE, | 1687 | ms_pkt = ha->isp_ops.prep_ms_iocb(ha, GFPN_ID_REQ_SIZE, |
1687 | GFPN_ID_RSP_SIZE); | 1688 | GFPN_ID_RSP_SIZE); |
1688 | 1689 | ||
1689 | /* Prepare CT request */ | 1690 | /* Prepare CT request */ |
@@ -1784,6 +1785,8 @@ qla2x00_gpsc(scsi_qla_host_t *ha, sw_info_t *list) | |||
1784 | 1785 | ||
1785 | if (!IS_QLA24XX(ha) && !IS_QLA54XX(ha)) | 1786 | if (!IS_QLA24XX(ha) && !IS_QLA54XX(ha)) |
1786 | return QLA_FUNCTION_FAILED; | 1787 | return QLA_FUNCTION_FAILED; |
1788 | if (!ha->flags.gpsc_supported) | ||
1789 | return QLA_FUNCTION_FAILED; | ||
1787 | 1790 | ||
1788 | rval = qla2x00_mgmt_svr_login(ha); | 1791 | rval = qla2x00_mgmt_svr_login(ha); |
1789 | if (rval) | 1792 | if (rval) |
@@ -1813,8 +1816,19 @@ qla2x00_gpsc(scsi_qla_host_t *ha, sw_info_t *list) | |||
1813 | /*EMPTY*/ | 1816 | /*EMPTY*/ |
1814 | DEBUG2_3(printk("scsi(%ld): GPSC issue IOCB " | 1817 | DEBUG2_3(printk("scsi(%ld): GPSC issue IOCB " |
1815 | "failed (%d).\n", ha->host_no, rval)); | 1818 | "failed (%d).\n", ha->host_no, rval)); |
1816 | } else if (qla2x00_chk_ms_status(ha, ms_pkt, ct_rsp, | 1819 | } else if ((rval = qla2x00_chk_ms_status(ha, ms_pkt, ct_rsp, |
1817 | "GPSC") != QLA_SUCCESS) { | 1820 | "GPSC")) != QLA_SUCCESS) { |
1821 | /* FM command unsupported? */ | ||
1822 | if (rval == QLA_INVALID_COMMAND && | ||
1823 | ct_rsp->header.reason_code == | ||
1824 | CT_REASON_INVALID_COMMAND_CODE) { | ||
1825 | DEBUG2(printk("scsi(%ld): GPSC command " | ||
1826 | "unsupported, disabling query...\n", | ||
1827 | ha->host_no)); | ||
1828 | ha->flags.gpsc_supported = 0; | ||
1829 | rval = QLA_FUNCTION_FAILED; | ||
1830 | break; | ||
1831 | } | ||
1818 | rval = QLA_FUNCTION_FAILED; | 1832 | rval = QLA_FUNCTION_FAILED; |
1819 | } else { | 1833 | } else { |
1820 | /* Save portname */ | 1834 | /* Save portname */ |
diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c index ef87d81935d2..98c01cd5e1a8 100644 --- a/drivers/scsi/qla2xxx/qla_init.c +++ b/drivers/scsi/qla2xxx/qla_init.c | |||
@@ -2065,40 +2065,7 @@ qla2x00_iidma_fcport(scsi_qla_host_t *ha, fc_port_t *fcport) | |||
2065 | } | 2065 | } |
2066 | } | 2066 | } |
2067 | 2067 | ||
2068 | /* | 2068 | static void |
2069 | * qla2x00_update_fcport | ||
2070 | * Updates device on list. | ||
2071 | * | ||
2072 | * Input: | ||
2073 | * ha = adapter block pointer. | ||
2074 | * fcport = port structure pointer. | ||
2075 | * | ||
2076 | * Return: | ||
2077 | * 0 - Success | ||
2078 | * BIT_0 - error | ||
2079 | * | ||
2080 | * Context: | ||
2081 | * Kernel context. | ||
2082 | */ | ||
2083 | void | ||
2084 | qla2x00_update_fcport(scsi_qla_host_t *ha, fc_port_t *fcport) | ||
2085 | { | ||
2086 | fcport->ha = ha; | ||
2087 | fcport->login_retry = 0; | ||
2088 | fcport->port_login_retry_count = ha->port_down_retry_count * | ||
2089 | PORT_RETRY_TIME; | ||
2090 | atomic_set(&fcport->port_down_timer, ha->port_down_retry_count * | ||
2091 | PORT_RETRY_TIME); | ||
2092 | fcport->flags &= ~FCF_LOGIN_NEEDED; | ||
2093 | |||
2094 | qla2x00_iidma_fcport(ha, fcport); | ||
2095 | |||
2096 | atomic_set(&fcport->state, FCS_ONLINE); | ||
2097 | |||
2098 | qla2x00_reg_remote_port(ha, fcport); | ||
2099 | } | ||
2100 | |||
2101 | void | ||
2102 | qla2x00_reg_remote_port(scsi_qla_host_t *ha, fc_port_t *fcport) | 2069 | qla2x00_reg_remote_port(scsi_qla_host_t *ha, fc_port_t *fcport) |
2103 | { | 2070 | { |
2104 | struct fc_rport_identifiers rport_ids; | 2071 | struct fc_rport_identifiers rport_ids; |
@@ -2141,6 +2108,39 @@ qla2x00_reg_remote_port(scsi_qla_host_t *ha, fc_port_t *fcport) | |||
2141 | } | 2108 | } |
2142 | 2109 | ||
2143 | /* | 2110 | /* |
2111 | * qla2x00_update_fcport | ||
2112 | * Updates device on list. | ||
2113 | * | ||
2114 | * Input: | ||
2115 | * ha = adapter block pointer. | ||
2116 | * fcport = port structure pointer. | ||
2117 | * | ||
2118 | * Return: | ||
2119 | * 0 - Success | ||
2120 | * BIT_0 - error | ||
2121 | * | ||
2122 | * Context: | ||
2123 | * Kernel context. | ||
2124 | */ | ||
2125 | void | ||
2126 | qla2x00_update_fcport(scsi_qla_host_t *ha, fc_port_t *fcport) | ||
2127 | { | ||
2128 | fcport->ha = ha; | ||
2129 | fcport->login_retry = 0; | ||
2130 | fcport->port_login_retry_count = ha->port_down_retry_count * | ||
2131 | PORT_RETRY_TIME; | ||
2132 | atomic_set(&fcport->port_down_timer, ha->port_down_retry_count * | ||
2133 | PORT_RETRY_TIME); | ||
2134 | fcport->flags &= ~FCF_LOGIN_NEEDED; | ||
2135 | |||
2136 | qla2x00_iidma_fcport(ha, fcport); | ||
2137 | |||
2138 | atomic_set(&fcport->state, FCS_ONLINE); | ||
2139 | |||
2140 | qla2x00_reg_remote_port(ha, fcport); | ||
2141 | } | ||
2142 | |||
2143 | /* | ||
2144 | * qla2x00_configure_fabric | 2144 | * qla2x00_configure_fabric |
2145 | * Setup SNS devices with loop ID's. | 2145 | * Setup SNS devices with loop ID's. |
2146 | * | 2146 | * |
@@ -3380,9 +3380,11 @@ qla24xx_nvram_config(scsi_qla_host_t *ha) | |||
3380 | 3380 | ||
3381 | /* Set host adapter parameters. */ | 3381 | /* Set host adapter parameters. */ |
3382 | ha->flags.disable_risc_code_load = 0; | 3382 | ha->flags.disable_risc_code_load = 0; |
3383 | ha->flags.enable_lip_reset = 1; | 3383 | ha->flags.enable_lip_reset = 0; |
3384 | ha->flags.enable_lip_full_login = 1; | 3384 | ha->flags.enable_lip_full_login = |
3385 | ha->flags.enable_target_reset = 1; | 3385 | le32_to_cpu(nv->host_p) & BIT_10 ? 1: 0; |
3386 | ha->flags.enable_target_reset = | ||
3387 | le32_to_cpu(nv->host_p) & BIT_11 ? 1: 0; | ||
3386 | ha->flags.enable_led_scheme = 0; | 3388 | ha->flags.enable_led_scheme = 0; |
3387 | ha->flags.disable_serdes = le32_to_cpu(nv->host_p) & BIT_5 ? 1: 0; | 3389 | ha->flags.disable_serdes = le32_to_cpu(nv->host_p) & BIT_5 ? 1: 0; |
3388 | 3390 | ||
diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c index c948a8ce7232..d4885616cd39 100644 --- a/drivers/scsi/qla2xxx/qla_isr.c +++ b/drivers/scsi/qla2xxx/qla_isr.c | |||
@@ -130,11 +130,11 @@ qla2300_intr_handler(int irq, void *dev_id) | |||
130 | if (stat & HSR_RISC_PAUSED) { | 130 | if (stat & HSR_RISC_PAUSED) { |
131 | hccr = RD_REG_WORD(®->hccr); | 131 | hccr = RD_REG_WORD(®->hccr); |
132 | if (hccr & (BIT_15 | BIT_13 | BIT_11 | BIT_8)) | 132 | if (hccr & (BIT_15 | BIT_13 | BIT_11 | BIT_8)) |
133 | qla_printk(KERN_INFO, ha, | 133 | qla_printk(KERN_INFO, ha, "Parity error -- " |
134 | "Parity error -- HCCR=%x.\n", hccr); | 134 | "HCCR=%x, Dumping firmware!\n", hccr); |
135 | else | 135 | else |
136 | qla_printk(KERN_INFO, ha, | 136 | qla_printk(KERN_INFO, ha, "RISC paused -- " |
137 | "RISC paused -- HCCR=%x.\n", hccr); | 137 | "HCCR=%x, Dumping firmware!\n", hccr); |
138 | 138 | ||
139 | /* | 139 | /* |
140 | * Issue a "HARD" reset in order for the RISC | 140 | * Issue a "HARD" reset in order for the RISC |
@@ -143,6 +143,8 @@ qla2300_intr_handler(int irq, void *dev_id) | |||
143 | */ | 143 | */ |
144 | WRT_REG_WORD(®->hccr, HCCR_RESET_RISC); | 144 | WRT_REG_WORD(®->hccr, HCCR_RESET_RISC); |
145 | RD_REG_WORD(®->hccr); | 145 | RD_REG_WORD(®->hccr); |
146 | |||
147 | ha->isp_ops.fw_dump(ha, 1); | ||
146 | set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags); | 148 | set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags); |
147 | break; | 149 | break; |
148 | } else if ((stat & HSR_RISC_INT) == 0) | 150 | } else if ((stat & HSR_RISC_INT) == 0) |
@@ -467,6 +469,8 @@ qla2x00_async_event(scsi_qla_host_t *ha, uint16_t *mb) | |||
467 | set_bit(RESET_MARKER_NEEDED, &ha->dpc_flags); | 469 | set_bit(RESET_MARKER_NEEDED, &ha->dpc_flags); |
468 | } | 470 | } |
469 | set_bit(REGISTER_FC4_NEEDED, &ha->dpc_flags); | 471 | set_bit(REGISTER_FC4_NEEDED, &ha->dpc_flags); |
472 | |||
473 | ha->flags.gpsc_supported = 1; | ||
470 | break; | 474 | break; |
471 | 475 | ||
472 | case MBA_CHG_IN_CONNECTION: /* Change in connection mode */ | 476 | case MBA_CHG_IN_CONNECTION: /* Change in connection mode */ |
@@ -1444,8 +1448,7 @@ qla24xx_intr_handler(int irq, void *dev_id) | |||
1444 | 1448 | ||
1445 | qla_printk(KERN_INFO, ha, "RISC paused -- HCCR=%x, " | 1449 | qla_printk(KERN_INFO, ha, "RISC paused -- HCCR=%x, " |
1446 | "Dumping firmware!\n", hccr); | 1450 | "Dumping firmware!\n", hccr); |
1447 | qla24xx_fw_dump(ha, 1); | 1451 | ha->isp_ops.fw_dump(ha, 1); |
1448 | |||
1449 | set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags); | 1452 | set_bit(ISP_ABORT_NEEDED, &ha->dpc_flags); |
1450 | break; | 1453 | break; |
1451 | } else if ((stat & HSRX_RISC_INT) == 0) | 1454 | } else if ((stat & HSRX_RISC_INT) == 0) |
diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c index c6f0cdf4cdc4..83376f6ac3db 100644 --- a/drivers/scsi/qla2xxx/qla_mbx.c +++ b/drivers/scsi/qla2xxx/qla_mbx.c | |||
@@ -1323,9 +1323,9 @@ qla2x00_lip_reset(scsi_qla_host_t *ha) | |||
1323 | 1323 | ||
1324 | if (IS_QLA24XX(ha) || IS_QLA54XX(ha)) { | 1324 | if (IS_QLA24XX(ha) || IS_QLA54XX(ha)) { |
1325 | mcp->mb[0] = MBC_LIP_FULL_LOGIN; | 1325 | mcp->mb[0] = MBC_LIP_FULL_LOGIN; |
1326 | mcp->mb[1] = BIT_0; | 1326 | mcp->mb[1] = BIT_6; |
1327 | mcp->mb[2] = 0xff; | 1327 | mcp->mb[2] = 0; |
1328 | mcp->mb[3] = 0; | 1328 | mcp->mb[3] = ha->loop_reset_delay; |
1329 | mcp->out_mb = MBX_3|MBX_2|MBX_1|MBX_0; | 1329 | mcp->out_mb = MBX_3|MBX_2|MBX_1|MBX_0; |
1330 | } else { | 1330 | } else { |
1331 | mcp->mb[0] = MBC_LIP_RESET; | 1331 | mcp->mb[0] = MBC_LIP_RESET; |
@@ -1807,8 +1807,8 @@ qla2x00_full_login_lip(scsi_qla_host_t *ha) | |||
1807 | ha->host_no)); | 1807 | ha->host_no)); |
1808 | 1808 | ||
1809 | mcp->mb[0] = MBC_LIP_FULL_LOGIN; | 1809 | mcp->mb[0] = MBC_LIP_FULL_LOGIN; |
1810 | mcp->mb[1] = 0; | 1810 | mcp->mb[1] = IS_QLA24XX(ha) || IS_QLA54XX(ha) ? BIT_3: 0; |
1811 | mcp->mb[2] = 0xff; | 1811 | mcp->mb[2] = 0; |
1812 | mcp->mb[3] = 0; | 1812 | mcp->mb[3] = 0; |
1813 | mcp->out_mb = MBX_3|MBX_2|MBX_1|MBX_0; | 1813 | mcp->out_mb = MBX_3|MBX_2|MBX_1|MBX_0; |
1814 | mcp->in_mb = MBX_0; | 1814 | mcp->in_mb = MBX_0; |
@@ -2470,7 +2470,7 @@ qla2x00_trace_control(scsi_qla_host_t *ha, uint16_t ctrl, dma_addr_t eft_dma, | |||
2470 | mcp->mb[4] = LSW(MSD(eft_dma)); | 2470 | mcp->mb[4] = LSW(MSD(eft_dma)); |
2471 | mcp->mb[5] = MSW(MSD(eft_dma)); | 2471 | mcp->mb[5] = MSW(MSD(eft_dma)); |
2472 | mcp->mb[6] = buffers; | 2472 | mcp->mb[6] = buffers; |
2473 | mcp->mb[7] = buffers; | 2473 | mcp->mb[7] = 0; |
2474 | mcp->out_mb |= MBX_7|MBX_6|MBX_5|MBX_4|MBX_3|MBX_2; | 2474 | mcp->out_mb |= MBX_7|MBX_6|MBX_5|MBX_4|MBX_3|MBX_2; |
2475 | } | 2475 | } |
2476 | mcp->tov = 30; | 2476 | mcp->tov = 30; |
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index 6f161d3f661b..68f5d24b938b 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c | |||
@@ -1037,48 +1037,49 @@ eh_host_reset_lock: | |||
1037 | static int | 1037 | static int |
1038 | qla2x00_loop_reset(scsi_qla_host_t *ha) | 1038 | qla2x00_loop_reset(scsi_qla_host_t *ha) |
1039 | { | 1039 | { |
1040 | int status = QLA_SUCCESS; | 1040 | int ret; |
1041 | struct fc_port *fcport; | 1041 | struct fc_port *fcport; |
1042 | 1042 | ||
1043 | if (ha->flags.enable_lip_full_login) { | ||
1044 | ret = qla2x00_full_login_lip(ha); | ||
1045 | if (ret != QLA_SUCCESS) { | ||
1046 | DEBUG2_3(printk("%s(%ld): bus_reset failed: " | ||
1047 | "full_login_lip=%d.\n", __func__, ha->host_no, | ||
1048 | ret)); | ||
1049 | } | ||
1050 | atomic_set(&ha->loop_state, LOOP_DOWN); | ||
1051 | atomic_set(&ha->loop_down_timer, LOOP_DOWN_TIME); | ||
1052 | qla2x00_mark_all_devices_lost(ha, 0); | ||
1053 | qla2x00_wait_for_loop_ready(ha); | ||
1054 | } | ||
1055 | |||
1043 | if (ha->flags.enable_lip_reset) { | 1056 | if (ha->flags.enable_lip_reset) { |
1044 | status = qla2x00_lip_reset(ha); | 1057 | ret = qla2x00_lip_reset(ha); |
1058 | if (ret != QLA_SUCCESS) { | ||
1059 | DEBUG2_3(printk("%s(%ld): bus_reset failed: " | ||
1060 | "lip_reset=%d.\n", __func__, ha->host_no, ret)); | ||
1061 | } | ||
1062 | qla2x00_wait_for_loop_ready(ha); | ||
1045 | } | 1063 | } |
1046 | 1064 | ||
1047 | if (status == QLA_SUCCESS && ha->flags.enable_target_reset) { | 1065 | if (ha->flags.enable_target_reset) { |
1048 | list_for_each_entry(fcport, &ha->fcports, list) { | 1066 | list_for_each_entry(fcport, &ha->fcports, list) { |
1049 | if (fcport->port_type != FCT_TARGET) | 1067 | if (fcport->port_type != FCT_TARGET) |
1050 | continue; | 1068 | continue; |
1051 | 1069 | ||
1052 | status = qla2x00_device_reset(ha, fcport); | 1070 | ret = qla2x00_device_reset(ha, fcport); |
1053 | if (status != QLA_SUCCESS) | 1071 | if (ret != QLA_SUCCESS) { |
1054 | break; | 1072 | DEBUG2_3(printk("%s(%ld): bus_reset failed: " |
1073 | "target_reset=%d d_id=%x.\n", __func__, | ||
1074 | ha->host_no, ret, fcport->d_id.b24)); | ||
1075 | } | ||
1055 | } | 1076 | } |
1056 | } | 1077 | } |
1057 | 1078 | ||
1058 | if (status == QLA_SUCCESS && | ||
1059 | ((!ha->flags.enable_target_reset && | ||
1060 | !ha->flags.enable_lip_reset) || | ||
1061 | ha->flags.enable_lip_full_login)) { | ||
1062 | |||
1063 | status = qla2x00_full_login_lip(ha); | ||
1064 | } | ||
1065 | |||
1066 | /* Issue marker command only when we are going to start the I/O */ | 1079 | /* Issue marker command only when we are going to start the I/O */ |
1067 | ha->marker_needed = 1; | 1080 | ha->marker_needed = 1; |
1068 | 1081 | ||
1069 | if (status) { | 1082 | return QLA_SUCCESS; |
1070 | /* Empty */ | ||
1071 | DEBUG2_3(printk("%s(%ld): **** FAILED ****\n", | ||
1072 | __func__, | ||
1073 | ha->host_no)); | ||
1074 | } else { | ||
1075 | /* Empty */ | ||
1076 | DEBUG3(printk("%s(%ld): exiting normally.\n", | ||
1077 | __func__, | ||
1078 | ha->host_no)); | ||
1079 | } | ||
1080 | |||
1081 | return(status); | ||
1082 | } | 1083 | } |
1083 | 1084 | ||
1084 | /* | 1085 | /* |
@@ -1413,7 +1414,9 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id) | |||
1413 | 1414 | ||
1414 | sht = &qla2x00_driver_template; | 1415 | sht = &qla2x00_driver_template; |
1415 | if (pdev->device == PCI_DEVICE_ID_QLOGIC_ISP2422 || | 1416 | if (pdev->device == PCI_DEVICE_ID_QLOGIC_ISP2422 || |
1416 | pdev->device == PCI_DEVICE_ID_QLOGIC_ISP2432) | 1417 | pdev->device == PCI_DEVICE_ID_QLOGIC_ISP2432 || |
1418 | pdev->device == PCI_DEVICE_ID_QLOGIC_ISP5422 || | ||
1419 | pdev->device == PCI_DEVICE_ID_QLOGIC_ISP5432) | ||
1417 | sht = &qla24xx_driver_template; | 1420 | sht = &qla24xx_driver_template; |
1418 | host = scsi_host_alloc(sht, sizeof(scsi_qla_host_t)); | 1421 | host = scsi_host_alloc(sht, sizeof(scsi_qla_host_t)); |
1419 | if (host == NULL) { | 1422 | if (host == NULL) { |
diff --git a/drivers/scsi/qla2xxx/qla_version.h b/drivers/scsi/qla2xxx/qla_version.h index 1fa0bce6b24e..459e0d6bd2b4 100644 --- a/drivers/scsi/qla2xxx/qla_version.h +++ b/drivers/scsi/qla2xxx/qla_version.h | |||
@@ -7,7 +7,7 @@ | |||
7 | /* | 7 | /* |
8 | * Driver version | 8 | * Driver version |
9 | */ | 9 | */ |
10 | #define QLA2XXX_VERSION "8.01.07-k3" | 10 | #define QLA2XXX_VERSION "8.01.07-k4" |
11 | 11 | ||
12 | #define QLA_DRIVER_MAJOR_VER 8 | 12 | #define QLA_DRIVER_MAJOR_VER 8 |
13 | #define QLA_DRIVER_MINOR_VER 1 | 13 | #define QLA_DRIVER_MINOR_VER 1 |