diff options
Diffstat (limited to 'uClinux-2.4.20-uc1/drivers/scsi/scsi_merge.c')
-rw-r--r-- | uClinux-2.4.20-uc1/drivers/scsi/scsi_merge.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/uClinux-2.4.20-uc1/drivers/scsi/scsi_merge.c b/uClinux-2.4.20-uc1/drivers/scsi/scsi_merge.c index f22f93b..7f20095 100644 --- a/uClinux-2.4.20-uc1/drivers/scsi/scsi_merge.c +++ b/uClinux-2.4.20-uc1/drivers/scsi/scsi_merge.c @@ -880,6 +880,9 @@ __inline static int __init_io(Scsi_Cmnd * SCpnt, #endif } +#ifdef CONFIG_BOARD_W90N745 + sgpnt = (struct scatterlist *)((unsigned long)sgpnt | 0x80000000); +#endif /* * Next, walk the list, and fill in the addresses and sizes of * each segment. @@ -931,15 +934,22 @@ __inline static int __init_io(Scsi_Cmnd * SCpnt, } if (SCpnt->host->highmem_io) { +#ifndef CONFIG_BOARD_W90N745 sgpnt[count].page = bh->b_page; sgpnt[count].offset = bh_offset(bh); +#endif sgpnt[count].address = NULL; } else { if (PageHighMem(bh->b_page)) BUG(); +#ifndef CONFIG_BOARD_W90N745 sgpnt[count].page = NULL; sgpnt[count].address = bh->b_data; +#else + *((volatile unsigned long*) 0xfff02004) = 0x4; + sgpnt[count].address = bh->b_data = (char *)((unsigned long)bh->b_data | 0x80000000); +#endif } sgpnt[count].length = bh->b_size; @@ -1089,7 +1099,12 @@ single_segment: * chunk of the entire request. */ bh = req->bh; +#ifndef CONFIG_BOARD_W90N745 buff = req->buffer = bh->b_data; +#else + *((volatile unsigned long*) 0xfff02004) = 0x4; + buff = req->buffer = bh->b_data = (char *)((unsigned long)bh->b_data | 0x80000000); +#endif if (PageHighMem(bh->b_page)) BUG(); @@ -1110,6 +1125,9 @@ single_segment: dma_exhausted(SCpnt, 0); } } +#ifdef CONFIG_BOARD_W90N745 + buff = (char *)((unsigned long)buff | 0x80000000); +#endif if (req->cmd == WRITE) memcpy(buff, (char *) req->buffer, this_count << 9); } |