patch-2.1.4 linux/drivers/scsi/in2000.c
Next file: linux/drivers/scsi/in2000.h
Previous file: linux/drivers/scsi/fdomain.c
Back to the patch index
Back to the overall index
- Lines: 82
- Date:
Tue Oct 15 09:39:48 1996
- Orig file:
v2.1.3/linux/drivers/scsi/in2000.c
- Orig date:
Wed Sep 25 08:35:23 1996
diff -u --recursive --new-file v2.1.3/linux/drivers/scsi/in2000.c linux/drivers/scsi/in2000.c
@@ -128,8 +128,8 @@
#endif
-#define IN2000_VERSION "1.29"
-#define IN2000_DATE "24/Sep/1996"
+#define IN2000_VERSION "1.30"
+#define IN2000_DATE "14/Oct/1996"
#define PROC_INTERFACE /* add code for /proc/scsi/in2000/xxx interface */
#define SYNC_DEBUG /* extra info on sync negotiation printed */
@@ -147,10 +147,6 @@
#define CHECK_NULL(p,s)
#endif
-#define IS_DIR_OUT(cmd) ((cmd)->cmnd[0] == WRITE_6 || \
- (cmd)->cmnd[0] == WRITE_10 || \
- (cmd)->cmnd[0] == WRITE_12)
-
/*
* setup_strings is an array of strings that define some of the operating
@@ -309,6 +305,32 @@
}
+/* The 33c93 needs to be told which direction a command transfers its
+ * data; we use this function to figure it out. Returns true if there
+ * will be a DATA_OUT phase with this command, false otherwise.
+ * (Thanks to Joerg Dorchain for the research and suggestion.)
+ */
+static int is_dir_out(Scsi_Cmnd *cmd)
+{
+ switch (cmd->cmnd[0]) {
+ case WRITE_6: case WRITE_10: case WRITE_12:
+ case WRITE_LONG: case WRITE_SAME: case WRITE_BUFFER:
+ case WRITE_VERIFY: case WRITE_VERIFY_12:
+ case COMPARE: case COPY: case COPY_VERIFY:
+ case SEARCH_EQUAL: case SEARCH_HIGH: case SEARCH_LOW:
+ case SEARCH_EQUAL_12: case SEARCH_HIGH_12: case SEARCH_LOW_12:
+ case FORMAT_UNIT: case REASSIGN_BLOCKS: case RESERVE:
+ case MODE_SELECT: case MODE_SELECT_10: case LOG_SELECT:
+ case SEND_DIAGNOSTIC: case CHANGE_DEFINITION: case UPDATE_BLOCK:
+ case SET_WINDOW: case MEDIUM_SCAN: case SEND_VOLUME_TAG:
+ case 0xea:
+ return 1;
+ default:
+ return 0;
+ }
+}
+
+
static struct sx_period sx_table[] = {
{ 1, 0x20},
@@ -504,7 +526,7 @@
* Start the selection process
*/
- if (IS_DIR_OUT(cmd))
+ if (is_dir_out(cmd))
write_3393(hostdata,WD_DESTINATION_ID, cmd->target);
else
write_3393(hostdata,WD_DESTINATION_ID, cmd->target | DSTID_DPD);
@@ -654,7 +676,7 @@
write_3393(hostdata,WD_CONTROL, CTRL_IDI | CTRL_EDI | CTRL_BUS);
write1_io(0, IO_FIFO_WRITE); /* clear fifo counter, write mode */
- if (IS_DIR_OUT(cmd)) {
+ if (is_dir_out(cmd)) {
hostdata->fifo = FI_FIFO_WRITING;
if ((i = cmd->SCp.this_residual) > (IN2000_FIFO_SIZE - 16) )
i = IN2000_FIFO_SIZE - 16;
@@ -1600,7 +1622,7 @@
* But we DO need to fix the DPD bit so it's correct for this command.
*/
- if (IS_DIR_OUT(cmd))
+ if (is_dir_out(cmd))
write_3393(hostdata,WD_DESTINATION_ID,cmd->target);
else
write_3393(hostdata,WD_DESTINATION_ID,cmd->target | DSTID_DPD);
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov