diff --git a/drivers/scsi/qla2xxx/qla_fw29.h b/drivers/scsi/qla2xxx/qla_fw29.h index 088a220472a5..a4aa5bacb171 100644 --- a/drivers/scsi/qla2xxx/qla_fw29.h +++ b/drivers/scsi/qla2xxx/qla_fw29.h @@ -693,6 +693,7 @@ struct vp_rpt_id_entry_24xx_ext { uint8_t remote_nport_id[4]; } f2; } u; + uint8_t reserved_end[64]; }; /* diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h index bba324febf09..cb48b9e15a44 100644 --- a/drivers/scsi/qla2xxx/qla_gbl.h +++ b/drivers/scsi/qla2xxx/qla_gbl.h @@ -266,8 +266,7 @@ extern int qla24xx_modify_vp_config(scsi_qla_host_t *); extern int qla2x00_send_change_request(scsi_qla_host_t *, uint16_t, uint16_t); extern void qla2x00_vp_stop_timer(scsi_qla_host_t *); extern int qla24xx_configure_vhba (scsi_qla_host_t *); -extern void qla24xx_report_id_acquisition(scsi_qla_host_t *, - struct vp_rpt_id_entry_24xx *); +extern void qla24xx_report_id_acquisition(scsi_qla_host_t *vha, void *pkt); extern void qla2x00_do_dpc_all_vps(scsi_qla_host_t *); extern int qla24xx_vport_create_req_sanity_check(struct fc_vport *); extern scsi_qla_host_t *qla24xx_create_vhost(struct fc_vport *); diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c index 128138b4d16a..085961e04ec2 100644 --- a/drivers/scsi/qla2xxx/qla_isr.c +++ b/drivers/scsi/qla2xxx/qla_isr.c @@ -4175,8 +4175,7 @@ process_err: qla_sts_cont_data_size(rsp->hw)); break; case VP_RPT_ID_IOCB_TYPE: - qla24xx_report_id_acquisition(vha, - (struct vp_rpt_id_entry_24xx *)pkt); + qla24xx_report_id_acquisition(vha, pkt); break; case LOGINOUT_PORT_IOCB_TYPE: qla24xx_logio_entry(vha, rsp->req, pkt); diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c index 3ebda35dd584..cec308811d9e 100644 --- a/drivers/scsi/qla2xxx/qla_mbx.c +++ b/drivers/scsi/qla2xxx/qla_mbx.c @@ -4086,15 +4086,18 @@ qla2x00_set_idma_speed(scsi_qla_host_t *vha, uint16_t loop_id, } void -qla24xx_report_id_acquisition(scsi_qla_host_t *vha, - struct vp_rpt_id_entry_24xx *rptid_entry) +qla24xx_report_id_acquisition(scsi_qla_host_t *vha, void *pkt) { struct qla_hw_data *ha = vha->hw; + struct vp_rpt_id_entry_24xx *rptid_entry = pkt; + struct vp_rpt_id_entry_24xx_ext *rptid_entry_ext = pkt; scsi_qla_host_t *vp = NULL; unsigned long flags; int found; port_id_t id; struct fc_port *fcport; + u16 vp_idx; + u8 vp_status; ql_dbg(ql_dbg_mbx + ql_dbg_verbose, vha, 0x10b6, "Entered %s.\n", __func__); @@ -4102,6 +4105,14 @@ qla24xx_report_id_acquisition(scsi_qla_host_t *vha, if (rptid_entry->entry_status != 0) return; + if (IS_QLA29XX(ha)) { + vp_idx = rptid_entry_ext->vp_idx; + vp_status = rptid_entry_ext->vp_status; + } else { + vp_idx = rptid_entry->vp_idx; + vp_status = rptid_entry->vp_status; + } + id.b.domain = rptid_entry->port_id[2]; id.b.area = rptid_entry->port_id[1]; id.b.al_pa = rptid_entry->port_id[0]; @@ -4124,9 +4135,8 @@ qla24xx_report_id_acquisition(scsi_qla_host_t *vha, } else if (rptid_entry->format == 1) { /* fabric */ ql_dbg(ql_dbg_async, vha, 0x10b9, - "Format 1: VP[%d] enabled - status %d - with " - "port id %02x%02x%02x.\n", rptid_entry->vp_idx, - rptid_entry->vp_status, + "Format 1: VP[%d] enabled - status %d - with port id %02x%02x%02x.\n", + vp_idx, vp_status, rptid_entry->port_id[2], rptid_entry->port_id[1], rptid_entry->port_id[0]); ql_dbg(ql_dbg_async, vha, 0x5075, @@ -4223,8 +4233,8 @@ qla24xx_report_id_acquisition(scsi_qla_host_t *vha, /* buffer to buffer credit flag */ vha->flags.bbcr_enable = (rptid_entry->u.f1.bbcr & 0xf) != 0; - if (rptid_entry->vp_idx == 0) { - if (rptid_entry->vp_status == VP_STAT_COMPL) { + if (vp_idx == 0) { + if (vp_status == VP_STAT_COMPL) { /* FA-WWN is only for physical port */ if (qla_ini_mode_enabled(vha) && ha->flags.fawwpn_enabled && @@ -4241,18 +4251,18 @@ qla24xx_report_id_acquisition(scsi_qla_host_t *vha, set_bit(REGISTER_FC4_NEEDED, &vha->dpc_flags); set_bit(REGISTER_FDMI_NEEDED, &vha->dpc_flags); } else { - if (rptid_entry->vp_status != VP_STAT_COMPL && - rptid_entry->vp_status != VP_STAT_ID_CHG) { + if (vp_status != VP_STAT_COMPL && + vp_status != VP_STAT_ID_CHG) { ql_dbg(ql_dbg_mbx, vha, 0x10ba, "Could not acquire ID for VP[%d].\n", - rptid_entry->vp_idx); + vp_idx); return; } found = 0; spin_lock_irqsave(&ha->vport_slock, flags); list_for_each_entry(vp, &ha->vp_list, list) { - if (rptid_entry->vp_idx == vp->vp_idx) { + if (vp_idx == vp->vp_idx) { found = 1; break; } diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index 8e5d49abead4..f539190dd504 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c @@ -8440,6 +8440,7 @@ qla2x00_module_init(void) BUILD_BUG_ON(sizeof(struct vp_ctrl_entry_24xx) != 64); BUILD_BUG_ON(sizeof(struct vp_ctrl_entry_24xx_ext) != 128); BUILD_BUG_ON(sizeof(struct vp_rpt_id_entry_24xx) != 64); + BUILD_BUG_ON(sizeof(struct vp_rpt_id_entry_24xx_ext) != 128); BUILD_BUG_ON(sizeof(sts21_entry_t) != 64); BUILD_BUG_ON(sizeof(sts22_entry_t) != 64); BUILD_BUG_ON(sizeof(sts_cont_entry_t) != 64);