[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:
parent
4a59f71d7f
commit
9a52a57cb9
|
@ -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);
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue