summaryrefslogtreecommitdiffstats
path: root/uClinux-2.4.20-uc1/drivers/scsi/scsi_merge.c
diff options
context:
space:
mode:
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.c18
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);
}