diff options
Diffstat (limited to 'drivers/scsi/qla2xxx')
-rw-r--r-- | drivers/scsi/qla2xxx/qla_attr.c | 6 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_fw.h | 18 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_isr.c | 37 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_mbx.c | 8 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_os.c | 4 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_version.h | 4 |
6 files changed, 49 insertions, 28 deletions
diff --git a/drivers/scsi/qla2xxx/qla_attr.c b/drivers/scsi/qla2xxx/qla_attr.c index 29414df87c3d..359e9a71a021 100644 --- a/drivers/scsi/qla2xxx/qla_attr.c +++ b/drivers/scsi/qla2xxx/qla_attr.c | |||
@@ -1275,7 +1275,11 @@ qla2x00_fw_state_show(struct device *dev, struct device_attribute *attr, | |||
1275 | int rval = QLA_FUNCTION_FAILED; | 1275 | int rval = QLA_FUNCTION_FAILED; |
1276 | uint16_t state[5]; | 1276 | uint16_t state[5]; |
1277 | 1277 | ||
1278 | if (!vha->hw->flags.eeh_busy) | 1278 | if (test_bit(ABORT_ISP_ACTIVE, &vha->dpc_flags) || |
1279 | test_bit(ISP_ABORT_NEEDED, &vha->dpc_flags)) | ||
1280 | DEBUG2_3_11(printk("%s(%ld): isp reset in progress.\n", | ||
1281 | __func__, vha->host_no)); | ||
1282 | else if (!vha->hw->flags.eeh_busy) | ||
1279 | rval = qla2x00_get_firmware_state(vha, state); | 1283 | rval = qla2x00_get_firmware_state(vha, state); |
1280 | if (rval != QLA_SUCCESS) | 1284 | if (rval != QLA_SUCCESS) |
1281 | memset(state, -1, sizeof(state)); | 1285 | memset(state, -1, sizeof(state)); |
diff --git a/drivers/scsi/qla2xxx/qla_fw.h b/drivers/scsi/qla2xxx/qla_fw.h index cebf4f1bb7d9..42c5587cc50c 100644 --- a/drivers/scsi/qla2xxx/qla_fw.h +++ b/drivers/scsi/qla2xxx/qla_fw.h | |||
@@ -1592,10 +1592,22 @@ struct nvram_81xx { | |||
1592 | 1592 | ||
1593 | /* Offset 384. */ | 1593 | /* Offset 384. */ |
1594 | uint8_t reserved_21[16]; | 1594 | uint8_t reserved_21[16]; |
1595 | uint16_t reserved_22[8]; | 1595 | uint16_t reserved_22[3]; |
1596 | |||
1597 | /* | ||
1598 | * BIT 0 = Extended BB credits for LR | ||
1599 | * BIT 1 = Virtual Fabric Enable | ||
1600 | * BIT 2 = Enhanced Features Unused | ||
1601 | * BIT 3-7 = Enhanced Features Reserved | ||
1602 | */ | ||
1603 | /* Enhanced Features */ | ||
1604 | uint8_t enhanced_features; | ||
1605 | |||
1606 | uint8_t reserved_23; | ||
1607 | uint16_t reserved_24[4]; | ||
1596 | 1608 | ||
1597 | /* Offset 416. */ | 1609 | /* Offset 416. */ |
1598 | uint16_t reserved_23[32]; | 1610 | uint16_t reserved_25[32]; |
1599 | 1611 | ||
1600 | /* Offset 480. */ | 1612 | /* Offset 480. */ |
1601 | uint8_t model_name[16]; | 1613 | uint8_t model_name[16]; |
@@ -1603,7 +1615,7 @@ struct nvram_81xx { | |||
1603 | /* Offset 496. */ | 1615 | /* Offset 496. */ |
1604 | uint16_t feature_mask_l; | 1616 | uint16_t feature_mask_l; |
1605 | uint16_t feature_mask_h; | 1617 | uint16_t feature_mask_h; |
1606 | uint16_t reserved_24[2]; | 1618 | uint16_t reserved_26[2]; |
1607 | 1619 | ||
1608 | uint16_t subsystem_vendor_id; | 1620 | uint16_t subsystem_vendor_id; |
1609 | uint16_t subsystem_device_id; | 1621 | uint16_t subsystem_device_id; |
diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c index 875adb45e751..db539b0c3dae 100644 --- a/drivers/scsi/qla2xxx/qla_isr.c +++ b/drivers/scsi/qla2xxx/qla_isr.c | |||
@@ -621,11 +621,10 @@ skip_rio: | |||
621 | * vp_idx does not match | 621 | * vp_idx does not match |
622 | * Event is not global, vp_idx does not match | 622 | * Event is not global, vp_idx does not match |
623 | */ | 623 | */ |
624 | if ((mb[1] == 0xffff && (mb[3] & 0xff) != 0xff) | 624 | if (IS_QLA2XXX_MIDTYPE(ha) && |
625 | || (mb[1] != 0xffff)) { | 625 | ((mb[1] == 0xffff && (mb[3] & 0xff) != 0xff) || |
626 | if (vha->vp_idx != (mb[3] & 0xff)) | 626 | (mb[1] != 0xffff)) && vha->vp_idx != (mb[3] & 0xff)) |
627 | break; | 627 | break; |
628 | } | ||
629 | 628 | ||
630 | /* Global event -- port logout or port unavailable. */ | 629 | /* Global event -- port logout or port unavailable. */ |
631 | if (mb[1] == 0xffff && mb[2] == 0x7) { | 630 | if (mb[1] == 0xffff && mb[2] == 0x7) { |
@@ -2273,30 +2272,28 @@ qla2x00_request_irqs(struct qla_hw_data *ha, struct rsp_que *rsp) | |||
2273 | 2272 | ||
2274 | /* If possible, enable MSI-X. */ | 2273 | /* If possible, enable MSI-X. */ |
2275 | if (!IS_QLA2432(ha) && !IS_QLA2532(ha) && | 2274 | if (!IS_QLA2432(ha) && !IS_QLA2532(ha) && |
2276 | !IS_QLA8432(ha) && !IS_QLA8001(ha)) | 2275 | !IS_QLA8432(ha) && !IS_QLA8001(ha)) |
2277 | goto skip_msix; | 2276 | goto skip_msi; |
2277 | |||
2278 | if (ha->pdev->subsystem_vendor == PCI_VENDOR_ID_HP && | ||
2279 | (ha->pdev->subsystem_device == 0x7040 || | ||
2280 | ha->pdev->subsystem_device == 0x7041 || | ||
2281 | ha->pdev->subsystem_device == 0x1705)) { | ||
2282 | DEBUG2(qla_printk(KERN_WARNING, ha, | ||
2283 | "MSI-X: Unsupported ISP2432 SSVID/SSDID (0x%X,0x%X).\n", | ||
2284 | ha->pdev->subsystem_vendor, | ||
2285 | ha->pdev->subsystem_device)); | ||
2286 | goto skip_msi; | ||
2287 | } | ||
2278 | 2288 | ||
2279 | if (IS_QLA2432(ha) && (ha->pdev->revision < QLA_MSIX_CHIP_REV_24XX || | 2289 | if (IS_QLA2432(ha) && (ha->pdev->revision < QLA_MSIX_CHIP_REV_24XX || |
2280 | !QLA_MSIX_FW_MODE_1(ha->fw_attributes))) { | 2290 | !QLA_MSIX_FW_MODE_1(ha->fw_attributes))) { |
2281 | DEBUG2(qla_printk(KERN_WARNING, ha, | 2291 | DEBUG2(qla_printk(KERN_WARNING, ha, |
2282 | "MSI-X: Unsupported ISP2432 (0x%X, 0x%X).\n", | 2292 | "MSI-X: Unsupported ISP2432 (0x%X, 0x%X).\n", |
2283 | ha->pdev->revision, ha->fw_attributes)); | 2293 | ha->pdev->revision, ha->fw_attributes)); |
2284 | |||
2285 | goto skip_msix; | 2294 | goto skip_msix; |
2286 | } | 2295 | } |
2287 | 2296 | ||
2288 | if (ha->pdev->subsystem_vendor == PCI_VENDOR_ID_HP && | ||
2289 | (ha->pdev->subsystem_device == 0x7040 || | ||
2290 | ha->pdev->subsystem_device == 0x7041 || | ||
2291 | ha->pdev->subsystem_device == 0x1705)) { | ||
2292 | DEBUG2(qla_printk(KERN_WARNING, ha, | ||
2293 | "MSI-X: Unsupported ISP2432 SSVID/SSDID (0x%X, 0x%X).\n", | ||
2294 | ha->pdev->subsystem_vendor, | ||
2295 | ha->pdev->subsystem_device)); | ||
2296 | |||
2297 | goto skip_msi; | ||
2298 | } | ||
2299 | |||
2300 | ret = qla24xx_enable_msix(ha, rsp); | 2297 | ret = qla24xx_enable_msix(ha, rsp); |
2301 | if (!ret) { | 2298 | if (!ret) { |
2302 | DEBUG2(qla_printk(KERN_INFO, ha, | 2299 | DEBUG2(qla_printk(KERN_INFO, ha, |
diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c index e95ebab58679..42eb7ffd5942 100644 --- a/drivers/scsi/qla2xxx/qla_mbx.c +++ b/drivers/scsi/qla2xxx/qla_mbx.c | |||
@@ -340,6 +340,7 @@ qla2x00_load_ram(scsi_qla_host_t *vha, dma_addr_t req_dma, uint32_t risc_addr, | |||
340 | return rval; | 340 | return rval; |
341 | } | 341 | } |
342 | 342 | ||
343 | #define EXTENDED_BB_CREDITS BIT_0 | ||
343 | /* | 344 | /* |
344 | * qla2x00_execute_fw | 345 | * qla2x00_execute_fw |
345 | * Start adapter firmware. | 346 | * Start adapter firmware. |
@@ -372,7 +373,12 @@ qla2x00_execute_fw(scsi_qla_host_t *vha, uint32_t risc_addr) | |||
372 | mcp->mb[1] = MSW(risc_addr); | 373 | mcp->mb[1] = MSW(risc_addr); |
373 | mcp->mb[2] = LSW(risc_addr); | 374 | mcp->mb[2] = LSW(risc_addr); |
374 | mcp->mb[3] = 0; | 375 | mcp->mb[3] = 0; |
375 | mcp->mb[4] = 0; | 376 | if (IS_QLA81XX(ha)) { |
377 | struct nvram_81xx *nv = ha->nvram; | ||
378 | mcp->mb[4] = (nv->enhanced_features & | ||
379 | EXTENDED_BB_CREDITS); | ||
380 | } else | ||
381 | mcp->mb[4] = 0; | ||
376 | mcp->out_mb |= MBX_4|MBX_3|MBX_2|MBX_1; | 382 | mcp->out_mb |= MBX_4|MBX_3|MBX_2|MBX_1; |
377 | mcp->in_mb |= MBX_1; | 383 | mcp->in_mb |= MBX_1; |
378 | } else { | 384 | } else { |
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index b696cffb82e0..48c37e38ed01 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c | |||
@@ -1677,9 +1677,11 @@ skip_pio: | |||
1677 | 1677 | ||
1678 | /* Determine queue resources */ | 1678 | /* Determine queue resources */ |
1679 | ha->max_req_queues = ha->max_rsp_queues = 1; | 1679 | ha->max_req_queues = ha->max_rsp_queues = 1; |
1680 | if ((ql2xmaxqueues <= 1 || ql2xmultique_tag < 1) && | 1680 | if ((ql2xmaxqueues <= 1 && !ql2xmultique_tag) || |
1681 | (ql2xmaxqueues > 1 && ql2xmultique_tag) || | ||
1681 | (!IS_QLA25XX(ha) && !IS_QLA81XX(ha))) | 1682 | (!IS_QLA25XX(ha) && !IS_QLA81XX(ha))) |
1682 | goto mqiobase_exit; | 1683 | goto mqiobase_exit; |
1684 | |||
1683 | ha->mqiobase = ioremap(pci_resource_start(ha->pdev, 3), | 1685 | ha->mqiobase = ioremap(pci_resource_start(ha->pdev, 3), |
1684 | pci_resource_len(ha->pdev, 3)); | 1686 | pci_resource_len(ha->pdev, 3)); |
1685 | if (ha->mqiobase) { | 1687 | if (ha->mqiobase) { |
diff --git a/drivers/scsi/qla2xxx/qla_version.h b/drivers/scsi/qla2xxx/qla_version.h index 8d2fc2fa7a6b..109068df933f 100644 --- a/drivers/scsi/qla2xxx/qla_version.h +++ b/drivers/scsi/qla2xxx/qla_version.h | |||
@@ -7,9 +7,9 @@ | |||
7 | /* | 7 | /* |
8 | * Driver version | 8 | * Driver version |
9 | */ | 9 | */ |
10 | #define QLA2XXX_VERSION "8.03.02-k1" | 10 | #define QLA2XXX_VERSION "8.03.02-k2" |
11 | 11 | ||
12 | #define QLA_DRIVER_MAJOR_VER 8 | 12 | #define QLA_DRIVER_MAJOR_VER 8 |
13 | #define QLA_DRIVER_MINOR_VER 3 | 13 | #define QLA_DRIVER_MINOR_VER 3 |
14 | #define QLA_DRIVER_PATCH_VER 2 | 14 | #define QLA_DRIVER_PATCH_VER 2 |
15 | #define QLA_DRIVER_BETA_VER 1 | 15 | #define QLA_DRIVER_BETA_VER 2 |