[PATCH] 2.5.40 - DMA-mapping && misc

Carlos E Gorges (carlos@techlinux.com.br)
Fri, 4 Oct 2002 03:19:00 -0300


diff -uar --exclude=*.o --exclude=*.cmd linux-2.5.40/drivers/scsi/53c7,8xx.c linux-2.5/drivers/scsi/53c7,8xx.c
--- linux-2.5.40/drivers/scsi/53c7,8xx.c Tue Oct 1 04:06:15 2002
+++ linux-2.5/drivers/scsi/53c7,8xx.c Fri Oct 4 02:53:48 2002
@@ -62,8 +62,6 @@
* the fourth byte from 50 to 25.
*/

-#error Please convert me to Documentation/DMA-mapping.txt
-
#include <linux/config.h>

#ifdef CONFIG_SCSI_NCR53C7xx_sync
@@ -3788,7 +3786,9 @@
for (i = 0; cmd->use_sg ? (i < cmd->use_sg) : !i; cmd_datain += 4,
cmd_dataout += 4, ++i) {
u32 buf = cmd->use_sg ?
- virt_to_bus(((struct scatterlist *)cmd->buffer)[i].address) :
+ virt_to_bus(
+ page_address(((struct scatterlist *)cmd->buffer)[i].page) +
+ ((struct scatterlist *)cmd->buffer)[i].offset ) :
virt_to_bus(cmd->request_buffer);
u32 count = cmd->use_sg ?
((struct scatterlist *)cmd->buffer)[i].length :
@@ -5735,7 +5735,7 @@
(struct NCR53c7x0_cmd *) cmd->host_scribble;
int offset = 0, buffers;
struct scatterlist *segment;
- char *ptr;
+ char *ptr, *seg_addr;
int found = 0;

/*
@@ -5753,18 +5753,20 @@
ptr = bus_to_virt(le32_to_cpu(insn[3]));

if ((buffers = cmd->use_sg)) {
- for (offset = 0,
- segment = (struct scatterlist *) cmd->buffer;
- buffers && !((found = ((ptr >= segment->address) &&
- (ptr < (segment->address + segment->length)))));
+ segment = (struct scatterlist *) cmd->buffer;
+ seg_addr = page_address(segment->page) + segment->offset;
+
+ for (offset = 0;
+ buffers && !((found = ((ptr >= seg_addr) &&
+ (ptr < (seg_addr + segment->length)))));
--buffers, offset += segment->length, ++segment)
#if 0
printk("scsi%d: comparing 0x%p to 0x%p\n",
- cmd->host->host_no, saved, segment->address);
+ cmd->host->host_no, saved, seg_addr);
#else
;
#endif
- offset += ptr - segment->address;
+ offset += ptr - seg_addr;
} else {
found = 1;
offset = ptr - (char *) (cmd->request_buffer);
diff -uar --exclude=*.o --exclude=*.cmd linux-2.5.40/drivers/scsi/NCR53c406a.c linux-2.5/drivers/scsi/NCR53c406a.c
--- linux-2.5.40/drivers/scsi/NCR53c406a.c Tue Oct 1 04:06:59 2002
+++ linux-2.5/drivers/scsi/NCR53c406a.c Fri Oct 4 02:53:48 2002
@@ -896,7 +896,7 @@
sgcount = current_SC->use_sg;
sglist = current_SC->request_buffer;
while( sgcount-- ) {
- NCR53c406a_pio_write(sglist->address, sglist->length);
+ NCR53c406a_pio_write(sglist->address, page_address(sglist->page) + sglist->offset);
sglist++;
}
}
@@ -925,7 +925,7 @@
sgcount = current_SC->use_sg;
sglist = current_SC->request_buffer;
while( sgcount-- ) {
- NCR53c406a_pio_read(sglist->address, sglist->length);
+ NCR53c406a_pio_read(sglist->address, page_address(sglist->page) + sglist->offset);
sglist++;
}
}
diff -uar --exclude=*.o --exclude=*.cmd linux-2.5.40/drivers/scsi/dpt_i2o.c linux-2.5/drivers/scsi/dpt_i2o.c
--- linux-2.5.40/drivers/scsi/dpt_i2o.c Tue Oct 1 04:06:27 2002
+++ linux-2.5/drivers/scsi/dpt_i2o.c Fri Oct 4 02:53:48 2002
@@ -28,8 +28,6 @@

#define ADDR32 (0)

-#error Please convert me to Documentation/DMA-mapping.txt
-
#include <linux/version.h>
#include <linux/module.h>

@@ -2138,7 +2136,7 @@
for(i = 0 ; i < cmd->use_sg; i++) {
*mptr++ = direction|0x10000000|sg->length;
len+=sg->length;
- *mptr++ = virt_to_bus(sg->address);
+ *mptr++ = virt_to_bus(page_address(sg->page) + sg->offset);
sg++;
}
/* Make this an end of list */
diff -uar --exclude=*.o --exclude=*.cmd linux-2.5.40/drivers/scsi/eata_dma.c linux-2.5/drivers/scsi/eata_dma.c
--- linux-2.5.40/drivers/scsi/eata_dma.c Tue Oct 1 04:06:13 2002
+++ linux-2.5/drivers/scsi/eata_dma.c Fri Oct 4 02:53:48 2002
@@ -63,8 +63,6 @@

/* Look in eata_dma.h for configuration and revision information */

-#error Please convert me to Documentation/DMA-mapping.txt
-
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/sched.h>
@@ -574,7 +572,7 @@
ccb->cp_datalen = htonl(cmd->use_sg * sizeof(struct eata_sg_list));
sl=(struct scatterlist *)cmd->request_buffer;
for(i = 0; i < cmd->use_sg; i++, sl++){
- ccb->sg_list[i].data = htonl(virt_to_bus(sl->address));
+ ccb->sg_list[i].data = htonl(virt_to_bus(page_address(sl->page) + sl->offset));
ccb->sg_list[i].len = htonl((u32) sl->length);
}
} else {
diff -uar --exclude=*.o --exclude=*.cmd linux-2.5.40/drivers/scsi/eata_pio.c linux-2.5/drivers/scsi/eata_pio.c
--- linux-2.5.40/drivers/scsi/eata_pio.c Tue Oct 1 04:07:10 2002
+++ linux-2.5/drivers/scsi/eata_pio.c Fri Oct 4 02:53:48 2002
@@ -99,7 +99,7 @@
else
{
SCp->buffer++;
- SCp->ptr=SCp->buffer->address;
+ SCp->ptr=page_address(SCp->buffer->page) + SCp->buffer->offset;
SCp->this_residual=SCp->buffer->length;
}
}
@@ -372,7 +372,7 @@
} else {
cmd->SCp.buffer = cmd->request_buffer;
cmd->SCp.buffers_residual = cmd->use_sg;
- cmd->SCp.ptr = cmd->SCp.buffer->address;
+ cmd->SCp.ptr = page_address(cmd->SCp.buffer->page) + cmd->SCp.buffer->offset;
cmd->SCp.this_residual = cmd->SCp.buffer->length;
}
cmd->SCp.Status = (cmd->SCp.this_residual != 0); /* TRUE as long as bytes
diff -uar --exclude=*.o --exclude=*.cmd linux-2.5.40/drivers/scsi/fdomain.c linux-2.5/drivers/scsi/fdomain.c
--- linux-2.5.40/drivers/scsi/fdomain.c Tue Oct 1 04:06:19 2002
+++ linux-2.5/drivers/scsi/fdomain.c Fri Oct 4 02:53:48 2002
@@ -1565,7 +1565,7 @@
if (current_SC->SCp.buffers_residual) {
--current_SC->SCp.buffers_residual;
++current_SC->SCp.buffer;
- current_SC->SCp.ptr = current_SC->SCp.buffer->address;
+ current_SC->SCp.ptr = page_address(current_SC->SCp.buffer->page) + current_SC->SCp.buffer->offset;
current_SC->SCp.this_residual = current_SC->SCp.buffer->length;
} else
break;
@@ -1598,7 +1598,7 @@
&& current_SC->SCp.buffers_residual) {
--current_SC->SCp.buffers_residual;
++current_SC->SCp.buffer;
- current_SC->SCp.ptr = current_SC->SCp.buffer->address;
+ current_SC->SCp.ptr = page_address(current_SC->SCp.buffer->page) + current_SC->SCp.buffer->offset;
current_SC->SCp.this_residual = current_SC->SCp.buffer->length;
}
}
@@ -1684,7 +1684,7 @@
if (current_SC->use_sg) {
current_SC->SCp.buffer =
(struct scatterlist *)current_SC->request_buffer;
- current_SC->SCp.ptr = current_SC->SCp.buffer->address;
+ current_SC->SCp.ptr = page_address(current_SC->SCp.buffer->page) + current_SC->SCp.buffer->offset;
current_SC->SCp.this_residual = current_SC->SCp.buffer->length;
current_SC->SCp.buffers_residual = current_SC->use_sg - 1;
} else {
diff -uar --exclude=*.o --exclude=*.cmd linux-2.5.40/drivers/scsi/in2000.c linux-2.5/drivers/scsi/in2000.c
--- linux-2.5.40/drivers/scsi/in2000.c Tue Oct 1 04:07:33 2002
+++ linux-2.5/drivers/scsi/in2000.c Fri Oct 4 02:53:48 2002
@@ -355,7 +355,7 @@
if (cmd->use_sg) {
cmd->SCp.buffer = (struct scatterlist *)cmd->buffer;
cmd->SCp.buffers_residual = cmd->use_sg - 1;
- cmd->SCp.ptr = (char *)cmd->SCp.buffer->address;
+ cmd->SCp.ptr = page_address(cmd->SCp.buffer->page) + cmd->SCp.buffer->offset;
cmd->SCp.this_residual = cmd->SCp.buffer->length;
}
else {
@@ -762,8 +762,8 @@
++cmd->SCp.buffer;
--cmd->SCp.buffers_residual;
cmd->SCp.this_residual = cmd->SCp.buffer->length;
- cmd->SCp.ptr = cmd->SCp.buffer->address;
- }
+ cmd->SCp.ptr = page_address(cmd->SCp.buffer->page) + cmd->SCp.buffer->offset;
+ }

/* Set up hardware registers */

diff -uar --exclude=*.o --exclude=*.cmd linux-2.5.40/drivers/scsi/ini9100u.c linux-2.5/drivers/scsi/ini9100u.c
--- linux-2.5.40/drivers/scsi/ini9100u.c Tue Oct 1 04:06:26 2002
+++ linux-2.5/drivers/scsi/ini9100u.c Fri Oct 4 02:53:48 2002
@@ -108,8 +108,6 @@

#define CVT_LINUX_VERSION(V,P,S) (V * 65536 + P * 256 + S)

-#error Please convert me to Documentation/DMA-mapping.txt
-
#ifndef LINUX_VERSION_CODE
#include <linux/version.h>
#endif
@@ -491,7 +489,7 @@
if (SCpnt->use_sg) {
pSrbSG = (struct scatterlist *) SCpnt->request_buffer;
if (SCpnt->use_sg == 1) { /* If only one entry in the list *//* treat it as regular I/O */
- pSCB->SCB_BufPtr = (U32) VIRT_TO_BUS(pSrbSG->address);
+ pSCB->SCB_BufPtr = (U32) VIRT_TO_BUS(page_address(pSrbSG->page)+pSrbSG->offset);
TotalLen = pSrbSG->length;
pSCB->SCB_SGLen = 0;
} else { /* Assign SG physical address */
@@ -500,7 +498,7 @@
for (i = 0, TotalLen = 0, pSG = &pSCB->SCB_SGList[0]; /* 1.01g */
i < SCpnt->use_sg;
i++, pSG++, pSrbSG++) {
- pSG->SG_Ptr = (U32) VIRT_TO_BUS(pSrbSG->address);
+ pSG->SG_Ptr = (U32) VIRT_TO_BUS(page_address(pSrbSG->page)+pSrbSG->offset);
TotalLen += pSG->SG_Len = pSrbSG->length;
}
pSCB->SCB_SGLen = i;
diff -uar --exclude=*.o --exclude=*.cmd linux-2.5.40/drivers/scsi/pci2000.c linux-2.5/drivers/scsi/pci2000.c
--- linux-2.5.40/drivers/scsi/pci2000.c Tue Oct 1 04:07:11 2002
+++ linux-2.5/drivers/scsi/pci2000.c Fri Oct 4 02:53:48 2002
@@ -505,8 +505,9 @@

if ( SCpnt->use_sg )
{
- SCpnt->SCp.have_data_in = pci_map_single (padapter->pdev, ((struct scatterlist *)SCpnt->request_buffer)->address,
- SCpnt->request_bufflen, scsi_to_pci_dma_dir (SCpnt->sc_data_direction));
+ SCpnt->SCp.have_data_in = pci_map_single (padapter->pdev,
+ page_address(((struct scatterlist *)SCpnt->request_buffer)->page) + ((struct scatterlist *)SCpnt->request_buffer)->offset,
+ SCpnt->request_bufflen, scsi_to_pci_dma_dir (SCpnt->sc_data_direction));
}
else
{
@@ -528,8 +529,9 @@
case SCSIOP_READ_CAPACITY: // read capacity CDB
if ( SCpnt->use_sg )
{
- SCpnt->SCp.have_data_in = pci_map_single (padapter->pdev, ((struct scatterlist *)(SCpnt->request_buffer))->address,
- 8, PCI_DMA_FROMDEVICE);
+ SCpnt->SCp.have_data_in = pci_map_single (padapter->pdev,
+ page_address(((struct scatterlist *)SCpnt->request_buffer)->page) + ((struct scatterlist *)SCpnt->request_buffer)->offset,
+ 8, PCI_DMA_FROMDEVICE);
}
else
SCpnt->SCp.have_data_in = pci_map_single (padapter->pdev, SCpnt->request_buffer, 8, PCI_DMA_FROMDEVICE);
diff -uar --exclude=*.o --exclude=*.cmd linux-2.5.40/drivers/scsi/pci2220i.c linux-2.5/drivers/scsi/pci2220i.c
--- linux-2.5.40/drivers/scsi/pci2220i.c Tue Oct 1 04:06:13 2002
+++ linux-2.5/drivers/scsi/pci2220i.c Fri Oct 4 02:53:48 2002
@@ -34,8 +34,6 @@
*
****************************************************************************/

-#error Convert me to understand page+offset based scatterlists
-
//#define DEBUG 1

#include <linux/module.h>
@@ -464,7 +462,9 @@
{
if ( padapter->nextSg < padapter->SCpnt->use_sg )
{
- padapter->currentSgBuffer = ((struct scatterlist *)padapter->SCpnt->request_buffer)[padapter->nextSg].address;
+ padapter->currentSgBuffer =
+ page_address(((struct scatterlist *)padapter->SCpnt->request_buffer)[padapter->nextSg].page) +
+ ((struct scatterlist *)padapter->SCpnt->request_buffer)[padapter->nextSg].offset;
padapter->currentSgCount = ((struct scatterlist *)padapter->SCpnt->request_buffer)[padapter->nextSg].length;
padapter->nextSg++;
}
@@ -2050,7 +2050,9 @@

if ( SCpnt->use_sg )
{
- padapter->currentSgBuffer = ((struct scatterlist *)SCpnt->request_buffer)[0].address;
+ padapter->currentSgBuffer =
+ page_address(((struct scatterlist *)SCpnt->request_buffer)[0].page) +
+ ((struct scatterlist *)SCpnt->request_buffer)[0].offset;
padapter->currentSgCount = ((struct scatterlist *)SCpnt->request_buffer)[0].length;
}
else
diff -uar --exclude=*.o --exclude=*.cmd linux-2.5.40/drivers/scsi/scsiiom.c linux-2.5/drivers/scsi/scsiiom.c
--- linux-2.5.40/drivers/scsi/scsiiom.c Tue Oct 1 04:06:16 2002
+++ linux-2.5/drivers/scsi/scsiiom.c Fri Oct 4 02:53:48 2002
@@ -6,8 +6,6 @@
***********************************************************************/
/* $Id: scsiiom.c,v 2.55.2.17 2000/12/20 00:39:37 garloff Exp $ */

-#error Please convert me to Documentation/DMA-mapping.txt
-
static void __inline__
dc390_freetag (PDCB pDCB, PSRB pSRB)
{
diff -uar --exclude=*.o --exclude=*.cmd linux-2.5.40/drivers/scsi/seagate.c linux-2.5/drivers/scsi/seagate.c
--- linux-2.5.40/drivers/scsi/seagate.c Tue Oct 1 04:06:58 2002
+++ linux-2.5/drivers/scsi/seagate.c Fri Oct 4 02:53:48 2002
@@ -1069,7 +1069,7 @@

buffer = (struct scatterlist *) SCint->buffer;
len = buffer->length;
- data = (unsigned char *) buffer->address;
+ data = (unsigned char *) (page_address(buffer->page) + buffer->offset);
} else {
DPRINTK (DEBUG_SG,
"scsi%d : scatter gather not requested.\n",
@@ -1336,7 +1336,7 @@
++buffer;
len = buffer->length;
data =
- (unsigned char *) buffer->address;
+ (unsigned char *) (page_address(buffer->page) + buffer->offset);
DPRINTK (DEBUG_SG,
"scsi%d : next scatter-gather buffer len = %d address = %08x\n",
hostno, len, data);
@@ -1520,7 +1520,7 @@
++buffer;
len = buffer->length;
data =
- (unsigned char *) buffer->address;
+ (unsigned char *) (page_address(buffer->page) + buffer->offset);
DPRINTK (DEBUG_SG,
"scsi%d : next scatter-gather buffer len = %d address = %08x\n",
hostno, len, data);
diff -uar --exclude=*.o --exclude=*.cmd linux-2.5.40/drivers/scsi/sym53c416.c linux-2.5/drivers/scsi/sym53c416.c
--- linux-2.5.40/drivers/scsi/sym53c416.c Tue Oct 1 04:06:18 2002
+++ linux-2.5/drivers/scsi/sym53c416.c Fri Oct 4 02:53:48 2002
@@ -449,7 +449,7 @@
sglist = current_command->request_buffer;
while(sgcount--)
{
- tot_trans += sym53c416_write(base, sglist->address, sglist->length);
+ tot_trans += sym53c416_write(base, page_address(sglist->page) + sglist->offset, sglist->length);
sglist++;
}
}
@@ -475,7 +475,7 @@
sglist = current_command->request_buffer;
while(sgcount--)
{
- tot_trans += sym53c416_read(base, sglist->address, sglist->length);
+ tot_trans += sym53c416_read(base, page_address(sglist->page) + sglist->offset, sglist->length);
sglist++;
}
}
diff -uar --exclude=*.o --exclude=*.cmd linux-2.5.40/drivers/scsi/wd7000.c linux-2.5/drivers/scsi/wd7000.c
--- linux-2.5.40/drivers/scsi/wd7000.c Tue Oct 1 04:07:45 2002
+++ linux-2.5/drivers/scsi/wd7000.c Fri Oct 4 02:53:48 2002
@@ -621,14 +621,13 @@
(void)get_options(str, ARRAY_SIZE(ints), ints);

if (wd7000_card_num >= NUM_CONFIGS) {
- printk(KERN_ERR __FUNCTION__
- ": Too many \"wd7000=\" configurations in "
+ printk(KERN_ERR ": Too many \"wd7000=\" configurations in "
"command line!\n");
return 0;
}

if ((ints[0] < 3) || (ints[0] > 5)) {
- printk(KERN_ERR __FUNCTION__ ": Error in command line! "
+ printk(KERN_ERR ": Error in command line! "
"Usage: wd7000=<IRQ>,<DMA>,IO>[,<BUS_ON>"
"[,<BUS_OFF>]]\n");
} else {
@@ -1743,7 +1742,7 @@
ip[2] = info[2];

if (info[0] == 255)
- printk(KERN_INFO __FUNCTION__ ": current partition table is "
+ printk(KERN_INFO ": current partition table is "
"using extended translation.\n");
}
}
--

http://www.techlinux.com.br/~carlos/tmp/2.5.40-DMA-mapping_misc.diff

-- 
	 _________________________
	 Carlos E Gorges          
	 (carlos@techlinux.com.br)
	 Tech informática LTDA
	 Brazil                   
	 _________________________

- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/