[SCSI] qla2xxx: Correct FCAL login retry logic for ISP24xx.

ISP24XX FW does not support Mbx 0x74 ie Login Local Port.
Added the equivalent code for ISP24XX ie to relogin in non
fabric case for ISP24XX use login iocb.

Signed-off-by: Andrew Vasquez <andrew.vasquez@qlogic.com>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
This commit is contained in:
andrew.vasquez@qlogic.com 2006-03-09 14:27:44 -08:00 committed by James Bottomley
parent 4a59f71d7f
commit 9a52a57cb9
4 changed files with 14 additions and 8 deletions

View File

@ -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_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_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); 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); uint16_t *, uint8_t);
extern int 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 extern int
qla2x00_fabric_logout(scsi_qla_host_t *, uint16_t, uint8_t, uint8_t, uint8_t); qla2x00_fabric_logout(scsi_qla_host_t *, uint16_t, uint8_t, uint8_t, uint8_t);

View File

@ -2888,13 +2888,13 @@ qla2x00_fabric_login(scsi_qla_host_t *ha, fc_port_t *fcport,
* 3 - Fatal error * 3 - Fatal error
*/ */
int 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; int rval;
uint16_t mb[MAILBOX_REGISTER_COUNT]; uint16_t mb[MAILBOX_REGISTER_COUNT];
memset(mb, 0, sizeof(mb)); 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) { if (rval == QLA_SUCCESS) {
/* Interrogate mailbox registers for any errors */ /* Interrogate mailbox registers for any errors */
if (mb[0] == MBS_COMMAND_ERROR) if (mb[0] == MBS_COMMAND_ERROR)

View File

@ -1631,20 +1631,25 @@ qla2x00_login_fabric(scsi_qla_host_t *ha, uint16_t loop_id, uint8_t domain,
* *
*/ */
int 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) uint16_t *mb_ret, uint8_t opt)
{ {
int rval; int rval;
mbx_cmd_t mc; mbx_cmd_t mc;
mbx_cmd_t *mcp = &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);) DEBUG3(printk("%s(%ld): entered.\n", __func__, ha->host_no);)
mcp->mb[0] = MBC_LOGIN_LOOP_PORT; mcp->mb[0] = MBC_LOGIN_LOOP_PORT;
if (HAS_EXTENDED_IDS(ha)) if (HAS_EXTENDED_IDS(ha))
mcp->mb[1] = loop_id; mcp->mb[1] = fcport->loop_id;
else else
mcp->mb[1] = loop_id << 8; mcp->mb[1] = fcport->loop_id << 8;
mcp->mb[2] = opt; mcp->mb[2] = opt;
mcp->out_mb = MBX_2|MBX_1|MBX_0; mcp->out_mb = MBX_2|MBX_1|MBX_0;
mcp->in_mb = MBX_7|MBX_6|MBX_1|MBX_0; mcp->in_mb = MBX_7|MBX_6|MBX_1|MBX_0;

View File

@ -2295,7 +2295,7 @@ qla2x00_do_dpc(void *data)
} else } else
status = status =
qla2x00_local_device_login( qla2x00_local_device_login(
ha, fcport->loop_id); ha, fcport);
if (status == QLA_SUCCESS) { if (status == QLA_SUCCESS) {
fcport->old_loop_id = fcport->loop_id; fcport->old_loop_id = fcport->loop_id;