Commit d4556a49 authored by Bart Van Assche's avatar Bart Van Assche Committed by Martin K. Petersen
Browse files

scsi: qla2xxx: Use __le64 instead of uint32_t[2] for sending DMA addresses to firmware



This patch makes the code easier to read and more compact.

Cc: Himanshu Madhani <hmadhani@marvell.com>
Cc: Giridhar Malavali <gmalavali@marvell.com>
Signed-off-by: default avatarBart Van Assche <bvanassche@acm.org>
Acked-by: default avatarHimanshu Madhani <hmadhani@marvell.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 15b7a68c
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -1329,8 +1329,8 @@ typedef struct {
	uint16_t response_q_inpointer;
	uint16_t request_q_length;
	uint16_t response_q_length;
	uint32_t request_q_address[2];
	uint32_t response_q_address[2];
	__le64   request_q_address __packed;
	__le64   response_q_address __packed;

	uint16_t lun_enables;
	uint8_t  command_resource_count;
@@ -3031,7 +3031,7 @@ struct sns_cmd_pkt {
		struct {
			uint16_t buffer_length;
			uint16_t reserved_1;
			uint32_t buffer_address[2];
			__le64	 buffer_address __packed;
			uint16_t subcommand_length;
			uint16_t reserved_2;
			uint16_t subcommand;
+23 −22
Original line number Diff line number Diff line
@@ -341,9 +341,9 @@ struct init_cb_24xx {

	uint16_t prio_request_q_length;

	uint32_t request_q_address[2];
	uint32_t response_q_address[2];
	uint32_t prio_request_q_address[2];
	__le64	 request_q_address __packed;
	__le64	 response_q_address __packed;
	__le64	 prio_request_q_address __packed;

	uint16_t msix;
	uint16_t msix_atio;
@@ -351,7 +351,7 @@ struct init_cb_24xx {

	uint16_t atio_q_inpointer;
	uint16_t atio_q_length;
	uint32_t atio_q_address[2];
	__le64	 atio_q_address __packed;

	uint16_t interrupt_delay_timer;		/* 100us increments. */
	uint16_t login_timeout;
@@ -455,7 +455,7 @@ struct cmd_bidir {
#define BD_WRITE_DATA			BIT_0

	uint16_t fcp_cmnd_dseg_len;		/* Data segment length. */
	uint32_t fcp_cmnd_dseg_address[2];	/* Data segment address. */
	__le64	 fcp_cmnd_dseg_address __packed;/* Data segment address. */

	uint16_t reserved[2];			/* Reserved */

@@ -493,9 +493,10 @@ struct cmd_type_6 {
#define CF_WRITE_DATA			BIT_0

	uint16_t fcp_cmnd_dseg_len;	/* Data segment length. */
	uint32_t fcp_cmnd_dseg_address[2];	/* Data segment address. */

	uint32_t fcp_rsp_dseg_address[2];	/* Data segment address. */
					/* Data segment address. */
	__le64	 fcp_cmnd_dseg_address __packed;
					/* Data segment address. */
	__le64	 fcp_rsp_dseg_address __packed;

	uint32_t byte_count;		/* Total byte count. */

@@ -573,16 +574,16 @@ struct cmd_type_crc_2 {
	uint16_t control_flags;		/* Control flags. */

	uint16_t fcp_cmnd_dseg_len;	/* Data segment length. */
	uint32_t fcp_cmnd_dseg_address[2];	/* Data segment address. */

	uint32_t fcp_rsp_dseg_address[2];	/* Data segment address. */
	__le64	 fcp_cmnd_dseg_address __packed;
					/* Data segment address. */
	__le64	 fcp_rsp_dseg_address __packed;

	uint32_t byte_count;		/* Total byte count. */

	uint8_t port_id[3];		/* PortID of destination port. */
	uint8_t vp_index;

	uint32_t crc_context_address[2];	/* Data segment address. */
	__le64	 crc_context_address __packed;	/* Data segment address. */
	uint16_t crc_context_len;		/* Data segment length. */
	uint16_t reserved_1;			/* MUST be set to 0. */
};
@@ -763,9 +764,9 @@ struct els_entry_24xx {
	uint32_t rx_byte_count;
	uint32_t tx_byte_count;

	uint32_t tx_address[2];		/* Data segment 0 address. */
	__le64	 tx_address __packed;	/* Data segment 0 address. */
	uint32_t tx_len;		/* Data segment 0 length. */
	uint32_t rx_address[2];		/* Data segment 1 address. */
	__le64	 rx_address __packed;	/* Data segment 1 address. */
	uint32_t rx_len;		/* Data segment 1 length. */
};

@@ -1418,9 +1419,9 @@ struct vf_evfp_entry_24xx {
        uint16_t control_flags;
        uint32_t io_parameter_0;
        uint32_t io_parameter_1;
        uint32_t tx_address[2];         /* Data segment 0 address. */
	__le64	 tx_address __packed;	/* Data segment 0 address. */
        uint32_t tx_len;                /* Data segment 0 length. */
        uint32_t rx_address[2];         /* Data segment 1 address. */
	__le64	 rx_address __packed;	/* Data segment 1 address. */
        uint32_t rx_len;                /* Data segment 1 length. */
};

@@ -1927,15 +1928,15 @@ struct init_cb_81xx {

	uint16_t prio_request_q_length;

	uint32_t request_q_address[2];
	uint32_t response_q_address[2];
	uint32_t prio_request_q_address[2];
	__le64	 request_q_address __packed;
	__le64	 response_q_address __packed;
	__le64	 prio_request_q_address __packed;

	uint8_t reserved_4[8];

	uint16_t atio_q_inpointer;
	uint16_t atio_q_length;
	uint32_t atio_q_address[2];
	__le64	 atio_q_address __packed;

	uint16_t interrupt_delay_timer;		/* 100us increments. */
	uint16_t login_timeout;
+1 −2
Original line number Diff line number Diff line
@@ -996,8 +996,7 @@ qla2x00_prep_sns_cmd(scsi_qla_host_t *vha, uint16_t cmd, uint16_t scmd_len,
	memset(sns_cmd, 0, sizeof(struct sns_cmd_pkt));
	wc = data_size / 2;			/* Size in 16bit words. */
	sns_cmd->p.cmd.buffer_length = cpu_to_le16(wc);
	sns_cmd->p.cmd.buffer_address[0] = cpu_to_le32(LSD(ha->sns_cmd_dma));
	sns_cmd->p.cmd.buffer_address[1] = cpu_to_le32(MSD(ha->sns_cmd_dma));
	put_unaligned_le64(ha->sns_cmd_dma, &sns_cmd->p.cmd.buffer_address);
	sns_cmd->p.cmd.subcommand_length = cpu_to_le16(scmd_len);
	sns_cmd->p.cmd.subcommand = cpu_to_le16(cmd);
	wc = (data_size - 16) / 4;		/* Size in 32bit words. */
+5 −10
Original line number Diff line number Diff line
@@ -3941,10 +3941,8 @@ qla2x00_config_rings(struct scsi_qla_host *vha)
	ha->init_cb->response_q_inpointer = cpu_to_le16(0);
	ha->init_cb->request_q_length = cpu_to_le16(req->length);
	ha->init_cb->response_q_length = cpu_to_le16(rsp->length);
	ha->init_cb->request_q_address[0] = cpu_to_le32(LSD(req->dma));
	ha->init_cb->request_q_address[1] = cpu_to_le32(MSD(req->dma));
	ha->init_cb->response_q_address[0] = cpu_to_le32(LSD(rsp->dma));
	ha->init_cb->response_q_address[1] = cpu_to_le32(MSD(rsp->dma));
	put_unaligned_le64(req->dma, &ha->init_cb->request_q_address);
	put_unaligned_le64(rsp->dma, &ha->init_cb->response_q_address);

	WRT_REG_WORD(ISP_REQ_Q_IN(ha, reg), 0);
	WRT_REG_WORD(ISP_REQ_Q_OUT(ha, reg), 0);
@@ -3971,16 +3969,13 @@ qla24xx_config_rings(struct scsi_qla_host *vha)
	icb->response_q_inpointer = cpu_to_le16(0);
	icb->request_q_length = cpu_to_le16(req->length);
	icb->response_q_length = cpu_to_le16(rsp->length);
	icb->request_q_address[0] = cpu_to_le32(LSD(req->dma));
	icb->request_q_address[1] = cpu_to_le32(MSD(req->dma));
	icb->response_q_address[0] = cpu_to_le32(LSD(rsp->dma));
	icb->response_q_address[1] = cpu_to_le32(MSD(rsp->dma));
	put_unaligned_le64(req->dma, &icb->request_q_address);
	put_unaligned_le64(rsp->dma, &icb->response_q_address);

	/* Setup ATIO queue dma pointers for target mode */
	icb->atio_q_inpointer = cpu_to_le16(0);
	icb->atio_q_length = cpu_to_le16(ha->tgt.atio_q_length);
	icb->atio_q_address[0] = cpu_to_le32(LSD(ha->tgt.atio_dma));
	icb->atio_q_address[1] = cpu_to_le32(MSD(ha->tgt.atio_dma));
	put_unaligned_le64(ha->tgt.atio_dma, &icb->atio_q_address);

	if (IS_SHADOW_REG_CAPABLE(ha))
		icb->firmware_options_2 |= cpu_to_le32(BIT_30|BIT_29);
+20 −37
Original line number Diff line number Diff line
@@ -1445,8 +1445,7 @@ qla24xx_build_scsi_crc_2_iocbs(srb_t *sp, struct cmd_type_crc_2 *cmd_pkt,
	qla24xx_set_t10dif_tags(sp, (struct fw_dif_context *)
	    &crc_ctx_pkt->ref_tag, tot_prot_dsds);

	cmd_pkt->crc_context_address[0] = cpu_to_le32(LSD(crc_ctx_dma));
	cmd_pkt->crc_context_address[1] = cpu_to_le32(MSD(crc_ctx_dma));
	put_unaligned_le64(crc_ctx_dma, &cmd_pkt->crc_context_address);
	cmd_pkt->crc_context_len = CRC_CONTEXT_LEN_FW;

	/* Determine SCSI command length -- align to 4 byte boundary */
@@ -1473,10 +1472,8 @@ qla24xx_build_scsi_crc_2_iocbs(srb_t *sp, struct cmd_type_crc_2 *cmd_pkt,
	int_to_scsilun(cmd->device->lun, &fcp_cmnd->lun);
	memcpy(fcp_cmnd->cdb, cmd->cmnd, cmd->cmd_len);
	cmd_pkt->fcp_cmnd_dseg_len = cpu_to_le16(fcp_cmnd_len);
	cmd_pkt->fcp_cmnd_dseg_address[0] = cpu_to_le32(
	    LSD(crc_ctx_dma + CRC_CONTEXT_FCPCMND_OFF));
	cmd_pkt->fcp_cmnd_dseg_address[1] = cpu_to_le32(
	    MSD(crc_ctx_dma + CRC_CONTEXT_FCPCMND_OFF));
	put_unaligned_le64(crc_ctx_dma + CRC_CONTEXT_FCPCMND_OFF,
			   &cmd_pkt->fcp_cmnd_dseg_address);
	fcp_cmnd->task_management = 0;
	fcp_cmnd->task_attribute = TSK_SIMPLE;

@@ -2707,18 +2704,13 @@ qla24xx_els_logo_iocb(srb_t *sp, struct els_entry_24xx *els_iocb)
	if (elsio->u.els_logo.els_cmd == ELS_DCMD_PLOGI) {
		els_iocb->tx_byte_count = els_iocb->tx_len =
			sizeof(struct els_plogi_payload);
		els_iocb->tx_address[0] =
			cpu_to_le32(LSD(elsio->u.els_plogi.els_plogi_pyld_dma));
		els_iocb->tx_address[1] =
			cpu_to_le32(MSD(elsio->u.els_plogi.els_plogi_pyld_dma));

		put_unaligned_le64(elsio->u.els_plogi.els_plogi_pyld_dma,
				   &els_iocb->tx_address);
		els_iocb->rx_dsd_count = 1;
		els_iocb->rx_byte_count = els_iocb->rx_len =
			sizeof(struct els_plogi_payload);
		els_iocb->rx_address[0] =
			cpu_to_le32(LSD(elsio->u.els_plogi.els_resp_pyld_dma));
		els_iocb->rx_address[1] =
			cpu_to_le32(MSD(elsio->u.els_plogi.els_resp_pyld_dma));
		put_unaligned_le64(elsio->u.els_plogi.els_resp_pyld_dma,
				   &els_iocb->rx_address);

		ql_dbg(ql_dbg_io + ql_dbg_buffer, vha, 0x3073,
		    "PLOGI ELS IOCB:\n");
@@ -2726,15 +2718,12 @@ qla24xx_els_logo_iocb(srb_t *sp, struct els_entry_24xx *els_iocb)
		    (uint8_t *)els_iocb, 0x70);
	} else {
		els_iocb->tx_byte_count = sizeof(struct els_logo_payload);
		els_iocb->tx_address[0] =
		    cpu_to_le32(LSD(elsio->u.els_logo.els_logo_pyld_dma));
		els_iocb->tx_address[1] =
		    cpu_to_le32(MSD(elsio->u.els_logo.els_logo_pyld_dma));
		put_unaligned_le64(elsio->u.els_logo.els_logo_pyld_dma,
				   &els_iocb->tx_address);
		els_iocb->tx_len = cpu_to_le32(sizeof(struct els_logo_payload));

		els_iocb->rx_byte_count = 0;
		els_iocb->rx_address[0] = 0;
		els_iocb->rx_address[1] = 0;
		els_iocb->rx_address = 0;
		els_iocb->rx_len = 0;
	}

@@ -2957,17 +2946,13 @@ qla24xx_els_iocb(srb_t *sp, struct els_entry_24xx *els_iocb)
        els_iocb->tx_byte_count =
            cpu_to_le32(bsg_job->request_payload.payload_len);

        els_iocb->tx_address[0] = cpu_to_le32(LSD(sg_dma_address
            (bsg_job->request_payload.sg_list)));
        els_iocb->tx_address[1] = cpu_to_le32(MSD(sg_dma_address
            (bsg_job->request_payload.sg_list)));
	put_unaligned_le64(sg_dma_address(bsg_job->request_payload.sg_list),
			   &els_iocb->tx_address);
        els_iocb->tx_len = cpu_to_le32(sg_dma_len
            (bsg_job->request_payload.sg_list));

        els_iocb->rx_address[0] = cpu_to_le32(LSD(sg_dma_address
            (bsg_job->reply_payload.sg_list)));
        els_iocb->rx_address[1] = cpu_to_le32(MSD(sg_dma_address
            (bsg_job->reply_payload.sg_list)));
	put_unaligned_le64(sg_dma_address(bsg_job->reply_payload.sg_list),
			   &els_iocb->rx_address);
        els_iocb->rx_len = cpu_to_le32(sg_dma_len
            (bsg_job->reply_payload.sg_list));

@@ -3004,12 +2989,12 @@ qla2x00_ct_iocb(srb_t *sp, ms_iocb_entry_t *ct_iocb)
	ct_iocb->rsp_bytecount =
	    cpu_to_le32(bsg_job->reply_payload.payload_len);

	ct_iocb->req_dsd.address =
		cpu_to_le64(sg_dma_address(bsg_job->request_payload.sg_list));
	put_unaligned_le64(sg_dma_address(bsg_job->request_payload.sg_list),
			   &ct_iocb->req_dsd.address);
	ct_iocb->req_dsd.length = ct_iocb->req_bytecount;

	ct_iocb->rsp_dsd.address =
		cpu_to_le64(sg_dma_address(bsg_job->reply_payload.sg_list));
	put_unaligned_le64(sg_dma_address(bsg_job->reply_payload.sg_list),
			   &ct_iocb->rsp_dsd.address);
	ct_iocb->rsp_dsd.length = ct_iocb->rsp_bytecount;

	avail_dsds = 1;
@@ -3332,10 +3317,8 @@ sufficient_dsds:
		*fcp_dl = htonl((uint32_t)scsi_bufflen(cmd));

		cmd_pkt->fcp_cmnd_dseg_len = cpu_to_le16(ctx->fcp_cmnd_len);
		cmd_pkt->fcp_cmnd_dseg_address[0] =
		    cpu_to_le32(LSD(ctx->fcp_cmnd_dma));
		cmd_pkt->fcp_cmnd_dseg_address[1] =
		    cpu_to_le32(MSD(ctx->fcp_cmnd_dma));
		put_unaligned_le64(ctx->fcp_cmnd_dma,
				   &cmd_pkt->fcp_cmnd_dseg_address);

		sp->flags |= SRB_FCP_CMND_DMA_VALID;
		cmd_pkt->byte_count = cpu_to_le32((uint32_t)scsi_bufflen(cmd));
Loading