Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cf53b069 authored by Andrew Vasquez's avatar Andrew Vasquez Committed by James Bottomley
Browse files

[SCSI] qla2xxx: Generalize srb structure usage.



Lay groundwork for adding alternative asynchronous operations by
generalize and extending the SRB structure.  This allows for
follow-on patches to add support for:

- Asynchronous logins.
- ELS/CT passthru requests.
- Loopback requests.
- Non-blocking mailbox commands (ABTS, Task Management, etc).

Signed-off-by: default avatarAndrew Vasquez <andrew.vasquez@qlogic.com>
Signed-off-by: default avatarGiridhar Malavali <giridhar.malavali@qlogic.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@suse.de>
parent dc162b63
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -189,6 +189,7 @@ struct req_que;
 */
typedef struct srb {
	struct fc_port *fcport;
	uint32_t handle;

	struct scsi_cmnd *cmd;		/* Linux SCSI command pkt */

@@ -196,6 +197,8 @@ typedef struct srb {

	uint32_t request_sense_length;
	uint8_t *request_sense_ptr;

	void *ctx;
} srb_t;

/*
+2 −0
Original line number Diff line number Diff line
@@ -350,6 +350,7 @@ qla2x00_start_scsi(srb_t *sp)
	/* Build command packet */
	req->current_outstanding_cmd = handle;
	req->outstanding_cmds[handle] = sp;
	sp->handle = handle;
	sp->cmd->host_scribble = (unsigned char *)(unsigned long)handle;
	req->cnt -= req_cnt;

@@ -778,6 +779,7 @@ qla24xx_start_scsi(srb_t *sp)
	/* Build command packet. */
	req->current_outstanding_cmd = handle;
	req->outstanding_cmds[handle] = sp;
	sp->handle = handle;
	sp->cmd->host_scribble = (unsigned char *)(unsigned long)handle;
	req->cnt -= req_cnt;

+9 −2
Original line number Diff line number Diff line
@@ -473,6 +473,7 @@ qla2x00_get_new_sp(scsi_qla_host_t *vha, fc_port_t *fcport,
	sp->flags = 0;
	CMD_SP(cmd) = (void *)sp;
	cmd->scsi_done = done;
	sp->ctx = NULL;

	return sp;
}
@@ -709,6 +710,8 @@ qla2x00_abort_fcport_cmds(fc_port_t *fcport)
			continue;
		if (sp->fcport != fcport)
			continue;
		if (sp->ctx)
			continue;

		spin_unlock_irqrestore(&ha->hardware_lock, flags);
		if (ha->isp_ops->abort_command(sp)) {
@@ -794,7 +797,8 @@ qla2xxx_eh_abort(struct scsi_cmnd *cmd)

		if (sp == NULL)
			continue;

		if (sp->ctx)
			continue;
		if (sp->cmd != cmd)
			continue;

@@ -859,7 +863,8 @@ qla2x00_eh_wait_for_pending_commands(scsi_qla_host_t *vha, unsigned int t,
		sp = req->outstanding_cmds[cnt];
		if (!sp)
			continue;

		if (sp->ctx)
			continue;
		if (vha->vp_idx != sp->fcport->vha->vp_idx)
			continue;
		match = 0;
@@ -2986,6 +2991,8 @@ qla2x00_timer(scsi_qla_host_t *vha)
					sp = req->outstanding_cmds[index];
					if (!sp)
						continue;
					if (sp->ctx)
						continue;
					sfcp = sp->fcport;
					if (!(sfcp->flags & FCF_TAPE_PRESENT))
						continue;