diff options
Diffstat (limited to 'uClinux-2.4.20-uc1/drivers/scsi/scsi.c')
-rw-r--r-- | uClinux-2.4.20-uc1/drivers/scsi/scsi.c | 26 |
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; |