summaryrefslogtreecommitdiffstats
path: root/uClinux-2.4.20-uc1/drivers/scsi/sd.c
diff options
context:
space:
mode:
Diffstat (limited to 'uClinux-2.4.20-uc1/drivers/scsi/sd.c')
-rw-r--r--uClinux-2.4.20-uc1/drivers/scsi/sd.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/uClinux-2.4.20-uc1/drivers/scsi/sd.c b/uClinux-2.4.20-uc1/drivers/scsi/sd.c
index 1e0749b..faf38a2 100644
--- a/uClinux-2.4.20-uc1/drivers/scsi/sd.c
+++ b/uClinux-2.4.20-uc1/drivers/scsi/sd.c
@@ -376,10 +376,16 @@ static int sd_init_command(Scsi_Cmnd * SCpnt)
return 0;
}
SCpnt->cmnd[0] = WRITE_6;
+#ifdef CONFIG_BOARD_W90N745
+ ((unsigned char *)((unsigned long)SCpnt->cmnd | 0x80000000))[0] = WRITE_6;
+#endif
SCpnt->sc_data_direction = SCSI_DATA_WRITE;
break;
case READ:
SCpnt->cmnd[0] = READ_6;
+#ifdef CONFIG_BOARD_W90N745
+ ((unsigned char *)((unsigned long)SCpnt->cmnd | 0x80000000))[0] = READ_6;
+#endif
SCpnt->sc_data_direction = SCSI_DATA_READ;
break;
default:
@@ -394,6 +400,11 @@ static int sd_init_command(Scsi_Cmnd * SCpnt)
SCpnt->cmnd[1] = (SCpnt->device->scsi_level <= SCSI_2) ?
((SCpnt->lun << 5) & 0xe0) : 0;
+#ifdef CONFIG_BOARD_W90N745
+ ((unsigned char *)((unsigned long)SCpnt->cmnd | 0x80000000))[1] = (SCpnt->device->scsi_level <= SCSI_2) ?
+ ((SCpnt->lun << 5) & 0xe0) : 0;
+#endif
+
if (((this_count > 0xff) || (block > 0x1fffff)) || SCpnt->device->ten) {
if (this_count > 0xffff)
this_count = 0xffff;
@@ -406,6 +417,16 @@ static int sd_init_command(Scsi_Cmnd * SCpnt)
SCpnt->cmnd[6] = SCpnt->cmnd[9] = 0;
SCpnt->cmnd[7] = (unsigned char) (this_count >> 8) & 0xff;
SCpnt->cmnd[8] = (unsigned char) this_count & 0xff;
+#ifdef CONFIG_BOARD_W90N745
+ ((unsigned char *)((unsigned long)SCpnt->cmnd | 0x80000000))[0] = SCpnt->cmnd[0];
+ ((unsigned char *)((unsigned long)SCpnt->cmnd | 0x80000000))[2] = (unsigned char) (block >> 24) & 0xff;
+ ((unsigned char *)((unsigned long)SCpnt->cmnd | 0x80000000))[3] = (unsigned char) (block >> 16) & 0xff;
+ ((unsigned char *)((unsigned long)SCpnt->cmnd | 0x80000000))[4] = (unsigned char) (block >> 8) & 0xff;
+ ((unsigned char *)((unsigned long)SCpnt->cmnd | 0x80000000))[5] = (unsigned char) block & 0xff;
+ ((unsigned char *)((unsigned long)SCpnt->cmnd | 0x80000000))[6] = SCpnt->cmnd[9] = 0;
+ ((unsigned char *)((unsigned long)SCpnt->cmnd | 0x80000000))[7] = (unsigned char) (this_count >> 8) & 0xff;
+ ((unsigned char *)((unsigned long)SCpnt->cmnd | 0x80000000))[8] = (unsigned char) this_count & 0xff;
+#endif
} else {
if (this_count > 0xff)
this_count = 0xff;
@@ -415,6 +436,14 @@ static int sd_init_command(Scsi_Cmnd * SCpnt)
SCpnt->cmnd[3] = (unsigned char) block & 0xff;
SCpnt->cmnd[4] = (unsigned char) this_count;
SCpnt->cmnd[5] = 0;
+
+#ifdef CONFIG_BOARD_W90N745
+ ((unsigned char *)((unsigned long)SCpnt->cmnd|0x80000000))[1] |= (unsigned char) ((block >> 16) & 0x1f);
+ ((unsigned char *)((unsigned long)SCpnt->cmnd|0x80000000))[2] = (unsigned char) ((block >> 8) & 0xff);
+ ((unsigned char *)((unsigned long)SCpnt->cmnd|0x80000000))[3] = (unsigned char) block & 0xff;
+ ((unsigned char *)((unsigned long)SCpnt->cmnd|0x80000000))[4] = (unsigned char) this_count;
+ ((unsigned char *)((unsigned long)SCpnt->cmnd|0x80000000))[5] = 0;
+#endif
}
/*
@@ -805,6 +834,9 @@ static int sd_init_onedisk(int i)
return i;
}
+#ifdef CONFIG_BOARD_W90N745
+ buffer = (unsigned char *)((unsigned long)buffer | 0x80000000);
+#endif
spintime = 0;
/* Spin up drives, as required. Only do this at boot time */