From: Madhuranath Iyengar <mni@xxxxxxxxxxxxxxx> Signed-off-by: Madhuranath Iyengar <mni@xxxxxxxxxxxxxxx> --- drivers/scsi/qla2xxx/qla_target.c | 86 +++++++++++++++++----------------- drivers/scsi/qla2xxx/qla_target.h | 94 ++++++++++++++++++------------------- 2 files changed, 88 insertions(+), 92 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c index e48f88e..48d807c 100644 --- a/drivers/scsi/qla2xxx/qla_target.c +++ b/drivers/scsi/qla2xxx/qla_target.c @@ -314,16 +314,16 @@ void qla_tgt_response_pkt_all_vps(struct scsi_qla_host *vha, response_t *pkt) { struct scsi_qla_host *host = vha; if (IS_FWI2_CAPABLE(ha)) { - nack_to_24xx_t *entry = (nack_to_24xx_t *)pkt; - if (0xFF != entry->vp_index) { + nack_to_isp_t *entry = (nack_to_isp_t *)pkt; + if (0xFF != entry->u.isp24.vp_index) { host = qla_tgt_find_host_by_vp_idx(vha, - entry->vp_index); + entry->u.isp24.vp_index); if (unlikely(!host)) { printk(KERN_ERR "qla_target(%d): Response " "pkt (NOTIFY_ACK_TYPE) " "received, with unknown " "vp_index %d\n", vha->vp_idx, - entry->vp_index); + entry->u.isp24.vp_index); break; } } @@ -1279,6 +1279,7 @@ static void qla_tgt_send_notify_ack(struct scsi_qla_host *vha, { struct qla_hw_data *ha = vha->hw; request_t *pkt; + nack_to_isp_t *nack; ql_dbg(ql_dbg_tgt, vha, 0xe007, "Sending NOTIFY_ACK (ha=%p)\n", ha); @@ -1299,50 +1300,47 @@ static void qla_tgt_send_notify_ack(struct scsi_qla_host *vha, pkt->entry_type = NOTIFY_ACK_TYPE; pkt->entry_count = 1; + nack = (nack_to_isp_t *)pkt; + nack->ox_id = ntfy->ox_id; if (IS_FWI2_CAPABLE(ha)) { - nack_to_24xx_t *nack24 = (nack_to_24xx_t *)pkt; - - nack24->nport_handle = ntfy->u.isp24.nport_handle; + nack->u.isp24.nport_handle = ntfy->u.isp24.nport_handle; if (le16_to_cpu(ntfy->u.isp24.status) == IMM_NTFY_ELS) { - nack24->flags = ntfy->u.isp24.flags & + nack->u.isp24.flags = ntfy->u.isp24.flags & __constant_cpu_to_le32(NOTIFY24XX_FLAGS_PUREX_IOCB); } - nack24->srr_rx_id = ntfy->u.isp24.srr_rx_id; - nack24->status = ntfy->u.isp24.status; - nack24->status_subcode = ntfy->u.isp24.status_subcode; - nack24->exchange_address = ntfy->u.isp24.exchange_address; - nack24->srr_rel_offs = ntfy->u.isp24.srr_rel_offs; - nack24->srr_ui = ntfy->u.isp24.srr_ui; - nack24->srr_flags = cpu_to_le16(srr_flags); - nack24->srr_reject_code = srr_reject_code; - nack24->srr_reject_code_expl = srr_explan; - nack24->vp_index = ntfy->u.isp24.vp_index; - nack24->ox_id = ntfy->ox_id; + nack->u.isp24.srr_rx_id = ntfy->u.isp24.srr_rx_id; + nack->u.isp24.status = ntfy->u.isp24.status; + nack->u.isp24.status_subcode = ntfy->u.isp24.status_subcode; + nack->u.isp24.exchange_address = ntfy->u.isp24.exchange_address; + nack->u.isp24.srr_rel_offs = ntfy->u.isp24.srr_rel_offs; + nack->u.isp24.srr_ui = ntfy->u.isp24.srr_ui; + nack->u.isp24.srr_flags = cpu_to_le16(srr_flags); + nack->u.isp24.srr_reject_code = srr_reject_code; + nack->u.isp24.srr_reject_code_expl = srr_explan; + nack->u.isp24.vp_index = ntfy->u.isp24.vp_index; ql_dbg(ql_dbg_tgt_pkt, vha, 0xe201, "qla_target(%d): Sending 24xx Notify Ack %d\n", - vha->vp_idx, nack24->status); + vha->vp_idx, nack->u.isp24.status); } else { - nack_to_2xxx_t *nack = (nack_to_2xxx_t *)pkt; - - SET_TARGET_ID(ha, nack->target, GET_TARGET_ID(ha, (atio_from_isp_t *)ntfy)); - nack->status = ntfy->u.isp2x.status; - nack->task_flags = ntfy->u.isp2x.task_flags; - nack->seq_id = ntfy->u.isp2x.seq_id; + SET_TARGET_ID(ha, nack->u.isp2x.target, + GET_TARGET_ID(ha, (atio_from_isp_t *)ntfy)); + nack->u.isp2x.status = ntfy->u.isp2x.status; + nack->u.isp2x.task_flags = ntfy->u.isp2x.task_flags; + nack->u.isp2x.seq_id = ntfy->u.isp2x.seq_id; /* Do not increment here, the chip isn't decrementing */ - /* nack->flags = __constant_cpu_to_le16(NOTIFY_ACK_RES_COUNT); */ - nack->flags |= cpu_to_le16(add_flags); - nack->srr_rx_id = ntfy->u.isp2x.srr_rx_id; - nack->srr_rel_offs = ntfy->u.isp2x.srr_rel_offs; - nack->srr_ui = ntfy->u.isp2x.srr_ui; - nack->srr_flags = cpu_to_le16(srr_flags); - nack->srr_reject_code = cpu_to_le16(srr_reject_code); - nack->srr_reject_code_expl = srr_explan; - nack->ox_id = ntfy->ox_id; + /* nack->u.isp2x.flags = __constant_cpu_to_le16(NOTIFY_ACK_RES_COUNT); */ + nack->u.isp2x.flags |= cpu_to_le16(add_flags); + nack->u.isp2x.srr_rx_id = ntfy->u.isp2x.srr_rx_id; + nack->u.isp2x.srr_rel_offs = ntfy->u.isp2x.srr_rel_offs; + nack->u.isp2x.srr_ui = ntfy->u.isp2x.srr_ui; + nack->u.isp2x.srr_flags = cpu_to_le16(srr_flags); + nack->u.isp2x.srr_reject_code = cpu_to_le16(srr_reject_code); + nack->u.isp2x.srr_reject_code_expl = srr_explan; if (resp_code_valid) { - nack->resp_code = cpu_to_le16(resp_code); - nack->flags |= __constant_cpu_to_le16( + nack->u.isp2x.resp_code = cpu_to_le16(resp_code); + nack->u.isp2x.flags |= __constant_cpu_to_le16( NOTIFY_ACK_TM_RESP_CODE_VALID); } @@ -1350,7 +1348,8 @@ static void qla_tgt_send_notify_ack(struct scsi_qla_host *vha, " Seq %#x -> I %#x St %#x RC %#x\n", vha->vp_idx, le16_to_cpu(ntfy->u.isp2x.seq_id), GET_TARGET_ID(ha, (atio_from_isp_t *)ntfy), - le16_to_cpu(ntfy->u.isp2x.status), le16_to_cpu(nack->resp_code)); + le16_to_cpu(ntfy->u.isp2x.status), + le16_to_cpu(nack->u.isp2x.resp_code)); } qla2x00_isp_cmd(vha, vha->req); @@ -4321,15 +4320,16 @@ static void qla_tgt_response_pkt(struct scsi_qla_host *vha, response_t *pkt) case NOTIFY_ACK_TYPE: if (tgt->notify_ack_expected > 0) { - nack_to_2xxx_t *entry = (nack_to_2xxx_t *)pkt; + nack_to_isp_t *entry = (nack_to_isp_t *)pkt; ql_dbg(ql_dbg_tgt, vha, 0xe02d, "NOTIFY_ACK seq %08x status %x\n", - le16_to_cpu(entry->seq_id), - le16_to_cpu(entry->status)); + le16_to_cpu(entry->u.isp2x.seq_id), + le16_to_cpu(entry->u.isp2x.status)); tgt->notify_ack_expected--; - if (entry->status != __constant_cpu_to_le16(NOTIFY_ACK_SUCCESS)) { + if (entry->u.isp2x.status != + __constant_cpu_to_le16(NOTIFY_ACK_SUCCESS)) { printk(KERN_ERR "qla_target(%d): NOTIFY_ACK " "failed %x\n", vha->vp_idx, - le16_to_cpu(entry->status)); + le16_to_cpu(entry->u.isp2x.status)); } } else { printk(KERN_ERR "qla_target(%d): Unexpected NOTIFY_ACK " diff --git a/drivers/scsi/qla2xxx/qla_target.h b/drivers/scsi/qla2xxx/qla_target.h index d585751..7767d2e 100644 --- a/drivers/scsi/qla2xxx/qla_target.h +++ b/drivers/scsi/qla2xxx/qla_target.h @@ -247,32 +247,58 @@ typedef struct { #ifndef NOTIFY_ACK_TYPE #define NOTIFY_ACK_TYPE 0x0E /* Notify acknowledge entry. */ /* - * ISP queue - notify acknowledge entry structure definition. + * ISP queue - notify acknowledge entry structure definition. + * This is sent to the ISP from the target driver. */ typedef struct { uint8_t entry_type; /* Entry type. */ uint8_t entry_count; /* Entry count. */ uint8_t sys_define; /* System defined. */ uint8_t entry_status; /* Entry Status. */ - uint32_t sys_define_2; /* System defined. */ - target_id_t target; - uint8_t target_id; - uint8_t reserved_1; - uint16_t flags; - uint16_t resp_code; - uint16_t status; - uint16_t task_flags; - uint16_t seq_id; - uint16_t srr_rx_id; - uint32_t srr_rel_offs; - uint16_t srr_ui; - uint16_t srr_flags; - uint16_t srr_reject_code; - uint8_t srr_reject_vendor_uniq; - uint8_t srr_reject_code_expl; - uint8_t reserved_2[26]; + union { + struct { + uint32_t sys_define_2; /* System defined. */ + target_id_t target; + uint8_t target_id; + uint8_t reserved_1; + uint16_t flags; + uint16_t resp_code; + uint16_t status; + uint16_t task_flags; + uint16_t seq_id; + uint16_t srr_rx_id; + uint32_t srr_rel_offs; + uint16_t srr_ui; + uint16_t srr_flags; + uint16_t srr_reject_code; + uint8_t srr_reject_vendor_uniq; + uint8_t srr_reject_code_expl; + uint8_t reserved_2[24]; + } isp2x; + struct { + uint32_t handle; + uint16_t nport_handle; + uint16_t reserved_1; + uint16_t flags; + uint16_t srr_rx_id; + uint16_t status; + uint8_t status_subcode; + uint8_t reserved_3; + uint32_t exchange_address; + uint32_t srr_rel_offs; + uint16_t srr_ui; + uint16_t srr_flags; + uint8_t reserved_4[19]; + uint8_t vp_index; + uint8_t srr_reject_vendor_uniq; + uint8_t srr_reject_code_expl; + uint8_t srr_reject_code; + uint8_t reserved_5[5]; + } isp24; + } u; + uint8_t reserved[2]; uint16_t ox_id; -} __attribute__((packed)) nack_to_2xxx_t; +} __attribute__((packed)) nack_to_isp_t; #define NOTIFY_ACK_SRR_FLAGS_ACCEPT 0 #define NOTIFY_ACK_SRR_FLAGS_REJECT 1 @@ -573,36 +599,6 @@ typedef struct { #define ELS_ADISC 0x52 /* - * ISP queue - notify acknowledge entry structure definition for 24xx. - * This is sent to the ISP 24xx from the target driver. - */ -typedef struct { - uint8_t entry_type; /* Entry type. */ - uint8_t entry_count; /* Entry count. */ - uint8_t sys_define; /* System defined. */ - uint8_t entry_status; /* Entry Status. */ - uint32_t handle; - uint16_t nport_handle; - uint16_t reserved_1; - uint16_t flags; - uint16_t srr_rx_id; - uint16_t status; - uint8_t status_subcode; - uint8_t reserved_3; - uint32_t exchange_address; - uint32_t srr_rel_offs; - uint16_t srr_ui; - uint16_t srr_flags; - uint8_t reserved_4[19]; - uint8_t vp_index; - uint8_t srr_reject_vendor_uniq; - uint8_t srr_reject_code_expl; - uint8_t srr_reject_code; - uint8_t reserved_5[7]; - uint16_t ox_id; -} __attribute__((packed)) nack_to_24xx_t; - -/* * ISP queue - ABTS received/response entries structure definition for 24xx. */ #define ABTS_RECV_24XX 0x54 /* ABTS received (for 24xx) */ -- 1.7.7 -- To unsubscribe from this list: send the line "unsubscribe target-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html