[PATCH 3/5] qla2xxx: Merge notify acknowledge IOCB structs in qla_target.h.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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


[Index of Archives]     [Linux SCSI]     [Kernel Newbies]     [Linux SCSI Target Infrastructure]     [Share Photos]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Linux IIO]     [Device Mapper]

  Powered by Linux