diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h index e897eadf0362ec06af9f1aa22bd14ad3e2a0e235..91e83e2c1eb8eae78df11905304f83d0f64be67f 100644 --- a/drivers/scsi/qla2xxx/qla_gbl.h +++ b/drivers/scsi/qla2xxx/qla_gbl.h @@ -42,7 +42,7 @@ extern int qla2x00_loop_resync(scsi_qla_host_t *); extern int qla2x00_find_new_loop_id(scsi_qla_host_t *, fc_port_t *); extern int qla2x00_fabric_login(scsi_qla_host_t *, fc_port_t *, uint16_t *); -extern int qla2x00_local_device_login(scsi_qla_host_t *, uint16_t); +extern int qla2x00_local_device_login(scsi_qla_host_t *, fc_port_t *); extern void qla2x00_restart_queues(scsi_qla_host_t *, uint8_t); @@ -166,7 +166,8 @@ qla24xx_login_fabric(scsi_qla_host_t *, uint16_t, uint8_t, uint8_t, uint8_t, uint16_t *, uint8_t); extern int -qla2x00_login_local_device(scsi_qla_host_t *, uint16_t, uint16_t *, uint8_t); +qla2x00_login_local_device(scsi_qla_host_t *, fc_port_t *, uint16_t *, + uint8_t); extern int qla2x00_fabric_logout(scsi_qla_host_t *, uint16_t, uint8_t, uint8_t, uint8_t); diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c index ebc7c24980672301732295d83ab32c8a1266c315..89a3fc0595bbe4c7236d3d6118d8544e4541e7b3 100644 --- a/drivers/scsi/qla2xxx/qla_init.c +++ b/drivers/scsi/qla2xxx/qla_init.c @@ -2888,13 +2888,13 @@ qla2x00_fabric_login(scsi_qla_host_t *ha, fc_port_t *fcport, * 3 - Fatal error */ int -qla2x00_local_device_login(scsi_qla_host_t *ha, uint16_t loop_id) +qla2x00_local_device_login(scsi_qla_host_t *ha, fc_port_t *fcport) { int rval; uint16_t mb[MAILBOX_REGISTER_COUNT]; memset(mb, 0, sizeof(mb)); - rval = qla2x00_login_local_device(ha, loop_id, mb, BIT_0); + rval = qla2x00_login_local_device(ha, fcport, mb, BIT_0); if (rval == QLA_SUCCESS) { /* Interrogate mailbox registers for any errors */ if (mb[0] == MBS_COMMAND_ERROR) diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c index 85c83e0027ff866e2145e8991efaf4c6ff39f2a4..d6cb3bd1a29a4b0277e47c97287730a3b11255b5 100644 --- a/drivers/scsi/qla2xxx/qla_mbx.c +++ b/drivers/scsi/qla2xxx/qla_mbx.c @@ -1631,20 +1631,25 @@ qla2x00_login_fabric(scsi_qla_host_t *ha, uint16_t loop_id, uint8_t domain, * */ int -qla2x00_login_local_device(scsi_qla_host_t *ha, uint16_t loop_id, +qla2x00_login_local_device(scsi_qla_host_t *ha, fc_port_t *fcport, uint16_t *mb_ret, uint8_t opt) { int rval; mbx_cmd_t mc; mbx_cmd_t *mcp = &mc; + if (IS_QLA24XX(ha) || IS_QLA54XX(ha)) + return qla24xx_login_fabric(ha, fcport->loop_id, + fcport->d_id.b.domain, fcport->d_id.b.area, + fcport->d_id.b.al_pa, mb_ret, opt); + DEBUG3(printk("%s(%ld): entered.\n", __func__, ha->host_no);) mcp->mb[0] = MBC_LOGIN_LOOP_PORT; if (HAS_EXTENDED_IDS(ha)) - mcp->mb[1] = loop_id; + mcp->mb[1] = fcport->loop_id; else - mcp->mb[1] = loop_id << 8; + mcp->mb[1] = fcport->loop_id << 8; mcp->mb[2] = opt; mcp->out_mb = MBX_2|MBX_1|MBX_0; mcp->in_mb = MBX_7|MBX_6|MBX_1|MBX_0; diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index 0fc89ac6a51baebb3e9332d1a376413511c4dcb4..029bbf461bb2d034441b03dfd4caff95186627d6 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c @@ -2295,7 +2295,7 @@ qla2x00_do_dpc(void *data) } else status = qla2x00_local_device_login( - ha, fcport->loop_id); + ha, fcport); if (status == QLA_SUCCESS) { fcport->old_loop_id = fcport->loop_id;