summaryrefslogtreecommitdiffstats
path: root/uClinux-2.4.20-uc1/drivers/scsi/scsi.c
diff options
context:
space:
mode:
Diffstat (limited to 'uClinux-2.4.20-uc1/drivers/scsi/scsi.c')
-rw-r--r--uClinux-2.4.20-uc1/drivers/scsi/scsi.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/uClinux-2.4.20-uc1/drivers/scsi/scsi.c b/uClinux-2.4.20-uc1/drivers/scsi/scsi.c
index 434cb04..f0e6272 100644
--- a/uClinux-2.4.20-uc1/drivers/scsi/scsi.c
+++ b/uClinux-2.4.20-uc1/drivers/scsi/scsi.c
@@ -960,6 +960,11 @@ void scsi_init_cmd_from_req(Scsi_Cmnd * SCpnt, Scsi_Request * SRpnt)
memcpy((void *) SCpnt->cmnd, (const void *) SRpnt->sr_cmnd,
sizeof(SCpnt->cmnd));
+#ifdef CONFIG_BOARD_W90N745
+ memcpy((void *)((unsigned char *)((unsigned long)SCpnt->cmnd | 0x80000000)),
+ (const void *) SRpnt->sr_cmnd,
+ sizeof(unsigned char)*MAX_COMMAND_SIZE);
+#endif
/* Zero the sense buffer. Some host adapters automatically request
* sense on error. 0 is not a valid sense code.
*/
@@ -1068,6 +1073,11 @@ void scsi_do_cmd(Scsi_Cmnd * SCpnt, const void *cmnd,
memcpy((void *) SCpnt->cmnd, (const void *) cmnd,
sizeof(SCpnt->cmnd));
+#ifdef CONFIG_BOARD_W90N745
+ memcpy((void *)((unsigned char *)((unsigned long)SCpnt->cmnd | 0x80000000)),
+ (const void *) cmnd,
+ sizeof(unsigned char) * MAX_COMMAND_SIZE);
+#endif
/* Zero the sense buffer. Some host adapters automatically request
* sense on error. 0 is not a valid sense code.
*/
@@ -1335,6 +1345,11 @@ int scsi_retry_command(Scsi_Cmnd * SCpnt)
{
memcpy((void *) SCpnt->cmnd, (void *) SCpnt->data_cmnd,
sizeof(SCpnt->data_cmnd));
+#ifndef CONFIG_BOARD_W90N745
+ memcpy((void *)((unsigned char *)((unsigned long)SCpnt->cmnd | 0x80000000)),
+ (void *) SCpnt->data_cmnd,
+ sizeof(SCpnt->data_cmnd));
+#endif
SCpnt->request_buffer = SCpnt->buffer;
SCpnt->request_bufflen = SCpnt->bufflen;
SCpnt->use_sg = SCpnt->old_use_sg;
@@ -1486,10 +1501,17 @@ void scsi_build_commandblocks(Scsi_Device * SDpnt)
SDpnt->device_queue = NULL;
for (j = 0; j < SDpnt->queue_depth; j++) {
+#ifndef CONFIG_BOARD_W90N745
SCpnt = (Scsi_Cmnd *)
kmalloc(sizeof(Scsi_Cmnd),
GFP_ATOMIC |
(host->unchecked_isa_dma ? GFP_DMA : 0));
+#else
+ SCpnt = (Scsi_Cmnd *)
+ kmalloc(sizeof(Scsi_Cmnd),
+ GFP_ATOMIC |
+ (host->unchecked_isa_dma ? 0 : 0));
+#endif
if (NULL == SCpnt)
break; /* If not, the next line will oops ... */
memset(SCpnt, 0, sizeof(Scsi_Cmnd));
@@ -2790,6 +2812,10 @@ scsi_reset_provider(Scsi_Device *dev, int flag)
SCpnt->owner = SCSI_OWNER_MIDLEVEL;
memset(&SCpnt->cmnd, '\0', sizeof(SCpnt->cmnd));
+#ifdef CONFIG_BOARD_W90N745
+ memset(((unsigned char *)((unsigned long)SCpnt->cmnd | 0x80000000)),
+ '\0', sizeof(unsigned char)*MAX_COMMAND_SIZE);
+#endif
SCpnt->scsi_done = scsi_reset_provider_done_command;
SCpnt->done = NULL;