aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/scsi')
-rw-r--r--drivers/scsi/qla2xxx/qla_gbl.h1
-rw-r--r--drivers/scsi/qla2xxx/qla_init.c2
-rw-r--r--drivers/scsi/qla2xxx/qla_mbx.c33
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 *);
324extern int 324extern int
325qla2x00_write_ram_word(scsi_qla_host_t *, uint32_t, uint32_t); 325qla2x00_write_ram_word(scsi_qla_host_t *, uint32_t, uint32_t);
326 326
327extern 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
3647int
3648qla2x00_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}