diff options
Diffstat (limited to 'drivers/scsi')
-rw-r--r-- | drivers/scsi/qla2xxx/qla_gbl.h | 1 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_init.c | 2 | ||||
-rw-r--r-- | drivers/scsi/qla2xxx/qla_mbx.c | 33 |
3 files changed, 36 insertions, 0 deletions
diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h index 0b6801fc6389..f61fb8d01330 100644 --- a/drivers/scsi/qla2xxx/qla_gbl.h +++ b/drivers/scsi/qla2xxx/qla_gbl.h | |||
@@ -324,6 +324,7 @@ qla2x00_read_ram_word(scsi_qla_host_t *, uint32_t, uint32_t *); | |||
324 | extern int | 324 | extern int |
325 | qla2x00_write_ram_word(scsi_qla_host_t *, uint32_t, uint32_t); | 325 | qla2x00_write_ram_word(scsi_qla_host_t *, uint32_t, uint32_t); |
326 | 326 | ||
327 | extern int qla2x00_get_data_rate(scsi_qla_host_t *); | ||
327 | /* | 328 | /* |
328 | * Global Function Prototypes in qla_isr.c source file. | 329 | * Global Function Prototypes in qla_isr.c source file. |
329 | */ | 330 | */ |
diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c index 73a793539d45..0f7ea6cc02f6 100644 --- a/drivers/scsi/qla2xxx/qla_init.c +++ b/drivers/scsi/qla2xxx/qla_init.c | |||
@@ -2266,6 +2266,8 @@ qla2x00_configure_loop(scsi_qla_host_t *vha) | |||
2266 | clear_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags); | 2266 | clear_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags); |
2267 | clear_bit(RSCN_UPDATE, &vha->dpc_flags); | 2267 | clear_bit(RSCN_UPDATE, &vha->dpc_flags); |
2268 | 2268 | ||
2269 | qla2x00_get_data_rate(vha); | ||
2270 | |||
2269 | /* Determine what we need to do */ | 2271 | /* Determine what we need to do */ |
2270 | if (ha->current_topology == ISP_CFG_FL && | 2272 | if (ha->current_topology == ISP_CFG_FL && |
2271 | (test_bit(LOCAL_LOOP_UPDATE, &flags))) { | 2273 | (test_bit(LOCAL_LOOP_UPDATE, &flags))) { |
diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c index 05d595d9a7ef..e91f3d82b2fd 100644 --- a/drivers/scsi/qla2xxx/qla_mbx.c +++ b/drivers/scsi/qla2xxx/qla_mbx.c | |||
@@ -3643,3 +3643,36 @@ qla2x00_write_ram_word(scsi_qla_host_t *vha, uint32_t risc_addr, uint32_t data) | |||
3643 | 3643 | ||
3644 | return rval; | 3644 | return rval; |
3645 | } | 3645 | } |
3646 | |||
3647 | int | ||
3648 | qla2x00_get_data_rate(scsi_qla_host_t *vha) | ||
3649 | { | ||
3650 | int rval; | ||
3651 | mbx_cmd_t mc; | ||
3652 | mbx_cmd_t *mcp = &mc; | ||
3653 | struct qla_hw_data *ha = vha->hw; | ||
3654 | |||
3655 | if (!IS_FWI2_CAPABLE(ha)) | ||
3656 | return QLA_FUNCTION_FAILED; | ||
3657 | |||
3658 | DEBUG11(printk(KERN_INFO "%s(%ld): entered.\n", __func__, vha->host_no)); | ||
3659 | |||
3660 | mcp->mb[0] = MBC_DATA_RATE; | ||
3661 | mcp->mb[1] = 0; | ||
3662 | mcp->out_mb = MBX_1|MBX_0; | ||
3663 | mcp->in_mb = MBX_2|MBX_1|MBX_0; | ||
3664 | mcp->tov = MBX_TOV_SECONDS; | ||
3665 | mcp->flags = 0; | ||
3666 | rval = qla2x00_mailbox_command(vha, mcp); | ||
3667 | if (rval != QLA_SUCCESS) { | ||
3668 | DEBUG2_3_11(printk(KERN_INFO "%s(%ld): failed=%x mb[0]=%x.\n", | ||
3669 | __func__, vha->host_no, rval, mcp->mb[0])); | ||
3670 | } else { | ||
3671 | DEBUG11(printk(KERN_INFO | ||
3672 | "%s(%ld): done.\n", __func__, vha->host_no)); | ||
3673 | if (mcp->mb[1] != 0x7) | ||
3674 | ha->link_data_rate = mcp->mb[1]; | ||
3675 | } | ||
3676 | |||
3677 | return rval; | ||
3678 | } | ||