Commit 44f30b0f authored by Matthew Wilcox's avatar Matthew Wilcox Committed by James Bottomley
Browse files

[SCSI] sym2: Remove code to handle DMA_BIDIRECTION requests



The upper layer doesn't send these down since 2.4.x (or 2.6 in
practice), so no need to handle it.  Inline sym_setup_data_pointers
into its only caller so we can fail gracefully in the case we'd get
one neverless.

Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarMatthew Wilcox <matthew@wil.cx>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@SteelEye.com>
parent 84e203a2
Loading
Loading
Loading
Loading
+0 −6
Original line number Diff line number Diff line
@@ -62,9 +62,6 @@ static struct sym_fwa_ofs sym_fw1a_ofs = {
};
static struct sym_fwb_ofs sym_fw1b_ofs = {
	SYM_GEN_FW_B(struct SYM_FWB_SCR)
#ifdef SYM_OPT_HANDLE_DIR_UNKNOWN
	SYM_GEN_B(struct SYM_FWB_SCR, data_io)
#endif
};
static struct sym_fwz_ofs sym_fw1z_ofs = {
	SYM_GEN_FW_Z(struct SYM_FWZ_SCR)
@@ -86,9 +83,6 @@ static struct sym_fwa_ofs sym_fw2a_ofs = {
};
static struct sym_fwb_ofs sym_fw2b_ofs = {
	SYM_GEN_FW_B(struct SYM_FWB_SCR)
#ifdef SYM_OPT_HANDLE_DIR_UNKNOWN
	SYM_GEN_B(struct SYM_FWB_SCR, data_io)
#endif
	SYM_GEN_B(struct SYM_FWB_SCR, start64)
	SYM_GEN_B(struct SYM_FWB_SCR, pm_handle)
};
+0 −6
Original line number Diff line number Diff line
@@ -92,9 +92,6 @@ struct sym_fwa_ofs {
};
struct sym_fwb_ofs {
	SYM_GEN_FW_B(u_short)
#ifdef SYM_OPT_HANDLE_DIR_UNKNOWN
	SYM_GEN_B(u_short, data_io)
#endif
	SYM_GEN_B(u_short, start64)
	SYM_GEN_B(u_short, pm_handle)
};
@@ -111,9 +108,6 @@ struct sym_fwa_ba {
};
struct sym_fwb_ba {
	SYM_GEN_FW_B(u32)
#ifdef SYM_OPT_HANDLE_DIR_UNKNOWN
	SYM_GEN_B(u32, data_io)
#endif
	SYM_GEN_B(u32, start64);
	SYM_GEN_B(u32, pm_handle);
};
+0 −48
Original line number Diff line number Diff line
@@ -197,12 +197,6 @@ struct SYM_FWB_SCR {
	u32 bad_status		[  7];
	u32 wsr_ma_helper	[  4];

#ifdef SYM_OPT_HANDLE_DIR_UNKNOWN
	/* Unknown direction handling */
	u32 data_io		[  2];
	u32 data_io_com		[  8];
	u32 data_io_out		[  7];
#endif
	/* Data area */
	u32 zero		[  1];
	u32 scratch		[  1];
@@ -1747,48 +1741,6 @@ static struct SYM_FWB_SCR SYM_FWB_SCR = {
	SCR_JUMP,
		PADDR_A (dispatch),

#ifdef SYM_OPT_HANDLE_DIR_UNKNOWN
}/*-------------------------< DATA_IO >--------------------------*/,{
	/*
	 *  We jump here if the data direction was unknown at the 
	 *  time we had to queue the command to the scripts processor.
	 *  Pointers had been set as follow in this situation:
	 *    savep   -->   DATA_IO
	 *    lastp   -->   start pointer when DATA_IN
	 *    wlastp  -->   start pointer when DATA_OUT
	 *  This script sets savep and lastp according to the 
	 *  direction chosen by the target.
	 */
	SCR_JUMP ^ IFTRUE (WHEN (SCR_DATA_OUT)),
		PADDR_B (data_io_out),
}/*-------------------------< DATA_IO_COM >----------------------*/,{
	/*
	 *  Direction is DATA IN.
	 */
	SCR_COPY  (4),
		HADDR_1 (ccb_head.lastp),
		HADDR_1 (ccb_head.savep),
	/*
	 *  Jump to the SCRIPTS according to actual direction.
	 */
	SCR_COPY  (4),
		HADDR_1 (ccb_head.savep),
		RADDR_1 (temp),
	SCR_RETURN,
		0,
}/*-------------------------< DATA_IO_OUT >----------------------*/,{
	/*
	 *  Direction is DATA OUT.
	 */
	SCR_REG_REG (HF_REG, SCR_AND, (~HF_DATA_IN)),
		0,
	SCR_COPY  (4),
		HADDR_1 (ccb_head.wlastp),
		HADDR_1 (ccb_head.lastp),
	SCR_JUMP,
		PADDR_B(data_io_com),
#endif /* SYM_OPT_HANDLE_DIR_UNKNOWN */

}/*-------------------------< ZERO >-----------------------------*/,{
	SCR_DATA_ZERO,
}/*-------------------------< SCRATCH >--------------------------*/,{
+0 −52
Original line number Diff line number Diff line
@@ -191,13 +191,6 @@ struct SYM_FWB_SCR {
	u32 pm_wsr_handle	[ 38];
	u32 wsr_ma_helper	[  4];

#ifdef SYM_OPT_HANDLE_DIR_UNKNOWN
	/* Unknown direction handling */
	u32 data_io		[  2];
	u32 data_io_in		[  2];
	u32 data_io_com		[  6];
	u32 data_io_out		[  8];
#endif
	/* Data area */
	u32 zero		[  1];
	u32 scratch		[  1];
@@ -1838,51 +1831,6 @@ static struct SYM_FWB_SCR SYM_FWB_SCR = {
	SCR_JUMP,
		PADDR_A (dispatch),

#ifdef SYM_OPT_HANDLE_DIR_UNKNOWN
}/*-------------------------< DATA_IO >--------------------------*/,{
	/*
	 *  We jump here if the data direction was unknown at the 
	 *  time we had to queue the command to the scripts processor.
	 *  Pointers had been set as follow in this situation:
	 *    savep   -->   DATA_IO
	 *    lastp   -->   start pointer when DATA_IN
	 *    wlastp  -->   start pointer when DATA_OUT
	 *  This script sets savep and lastp according to the 
	 *  direction chosen by the target.
	 */
	SCR_JUMP ^ IFTRUE (WHEN (SCR_DATA_OUT)),
		PADDR_B (data_io_out),
}/*-------------------------< DATA_IO_IN >-----------------------*/,{
	/*
	 *  Direction is DATA IN.
	 */
	SCR_LOAD_REL  (scratcha, 4),
		offsetof (struct sym_ccb, phys.head.lastp),
}/*-------------------------< DATA_IO_COM >----------------------*/,{
	SCR_STORE_REL (scratcha, 4),
		offsetof (struct sym_ccb, phys.head.savep),

	/*
	 *  Jump to the SCRIPTS according to actual direction.
	 */
	SCR_LOAD_REL  (temp, 4),
		offsetof (struct sym_ccb, phys.head.savep),
	SCR_RETURN,
		0,
}/*-------------------------< DATA_IO_OUT >----------------------*/,{
	/*
	 *  Direction is DATA OUT.
	 */
	SCR_REG_REG (HF_REG, SCR_AND, (~HF_DATA_IN)),
		0,
	SCR_LOAD_REL  (scratcha, 4),
		offsetof (struct sym_ccb, phys.head.wlastp),
	SCR_STORE_REL (scratcha, 4),
		offsetof (struct sym_ccb, phys.head.lastp),
	SCR_JUMP,
		PADDR_B(data_io_com),
#endif /* SYM_OPT_HANDLE_DIR_UNKNOWN */

}/*-------------------------< ZERO >-----------------------------*/,{
	SCR_DATA_ZERO,
}/*-------------------------< SCRATCH >--------------------------*/,{
+36 −3
Original line number Diff line number Diff line
@@ -514,9 +514,10 @@ static inline int sym_setup_cdb(struct sym_hcb *np, struct scsi_cmnd *cmd, struc
 */
int sym_setup_data_and_start(struct sym_hcb *np, struct scsi_cmnd *cmd, struct sym_ccb *cp)
{
	int dir;
	struct sym_tcb *tp = &np->target[cp->target];
	struct sym_lcb *lp = sym_lp(tp, cp->lun);
	u32 lastp, goalp;
	int dir;

	/*
	 *  Build the CDB.
@@ -534,15 +535,47 @@ int sym_setup_data_and_start(struct sym_hcb *np, struct scsi_cmnd *cmd, struct s
			sym_set_cam_status(cmd, DID_ERROR);
			goto out_abort;
		}

		/*
		 *  No segments means no data.
		 */
		if (!cp->segments)
			dir = DMA_NONE;
	} else {
		cp->data_len = 0;
		cp->segments = 0;
	}

	/*
	 *  Set data pointers.
	 *  Set the data pointer.
	 */
	switch (dir) {
	case DMA_BIDIRECTIONAL:
		printk("%s: got DMA_BIDIRECTIONAL command", sym_name(np));
		sym_set_cam_status(cmd, DID_ERROR);
		goto out_abort;
	case DMA_TO_DEVICE:
		goalp = SCRIPTA_BA(np, data_out2) + 8;
		lastp = goalp - 8 - (cp->segments * (2*4));
		break;
	case DMA_FROM_DEVICE:
		cp->host_flags |= HF_DATA_IN;
		goalp = SCRIPTA_BA(np, data_in2) + 8;
		lastp = goalp - 8 - (cp->segments * (2*4));
		break;
	case DMA_NONE:
	default:
		lastp = goalp = SCRIPTB_BA(np, no_data);
		break;
	}

	/*
	 *  Set all pointers values needed by SCRIPTS.
	 */
	sym_setup_data_pointers(np, cp, dir);
	cp->phys.head.lastp = cpu_to_scr(lastp);
	cp->phys.head.savep = cpu_to_scr(lastp);
	cp->startp	    = cp->phys.head.savep;
	cp->goalp	    = cpu_to_scr(goalp);

	/*
	 *  When `#ifed 1', the code below makes the driver 
Loading