# This is a BitKeeper generated patch for the following project: # Project Name: Linux kernel tree # This patch format is intended for GNU patch command version 2.5 or higher. # This patch includes the following deltas: # ChangeSet 1.564.2.2 -> 1.564.2.3 # drivers/usb/storage/protocol.c 1.8 -> 1.9 # drivers/usb/storage/debug.c 1.9 -> 1.10 # drivers/usb/storage/usb.c 1.37 -> 1.38 # drivers/usb/storage/transport.c 1.31 -> 1.32 # drivers/usb/storage/isd200.c 1.14 -> 1.15 # drivers/usb/storage/scsiglue.c 1.29 -> 1.30 # drivers/usb/storage/usb.h 1.18 -> 1.19 # drivers/usb/storage/raw_bulk.c 1.2 -> 1.3 # drivers/usb/storage/sddr09.c 1.16 -> 1.17 # drivers/usb/storage/freecom.c 1.13 -> 1.14 # drivers/usb/storage/debug.h 1.5 -> 1.6 # # The following is the BitKeeper ChangeSet Log # -------------------------------------------- # 02/09/16 mdharm-usb@one-eyed-alien.net 1.564.2.3 # [PATCH] USB storage: macro-ize address manipulation # # This patch converts all uses of page_addres() to the sg_address() macro. # This will make backporting to 2.4 easier, as well as eliminate lots of # redundant code. # -------------------------------------------- # diff -Nru a/drivers/usb/storage/debug.c b/drivers/usb/storage/debug.c --- a/drivers/usb/storage/debug.c Mon Sep 16 15:01:05 2002 +++ b/drivers/usb/storage/debug.c Mon Sep 16 15:01:05 2002 @@ -189,7 +189,7 @@ US_DEBUGP("Buffer has %d scatterlists.\n", cmd->use_sg ); for ( i=0; iuse_sg; i++ ) { - char *adr = page_address(sg[i].page) + sg[i].offset; + char *adr = sg_address(sg[i]); US_DEBUGP("Length of scatterlist %d is %d.\n",i,sg[i].length); US_DEBUGP("%02x %02x %02x %02x %02x %02x %02x %02x\n" diff -Nru a/drivers/usb/storage/debug.h b/drivers/usb/storage/debug.h --- a/drivers/usb/storage/debug.h Mon Sep 16 15:01:05 2002 +++ b/drivers/usb/storage/debug.h Mon Sep 16 15:01:05 2002 @@ -48,7 +48,7 @@ #include #include #include -#include "scsi.h" +#include "usb.h" #define USB_STORAGE "usb-storage: " diff -Nru a/drivers/usb/storage/freecom.c b/drivers/usb/storage/freecom.c --- a/drivers/usb/storage/freecom.c Mon Sep 16 15:01:05 2002 +++ b/drivers/usb/storage/freecom.c Mon Sep 16 15:01:05 2002 @@ -148,11 +148,11 @@ if (transfer_amount - total_transferred >= sg[i].length) { result = usb_stor_transfer_partial(us, - page_address(sg[i].page) + sg[i].offset, sg[i].length); + sg_address(sg[i]), sg[i].length); total_transferred += sg[i].length; } else { result = usb_stor_transfer_partial(us, - page_address(sg[i].page) + sg[i].offset, + sg_address(sg[i]), transfer_amount - total_transferred); total_transferred += transfer_amount - total_transferred; } diff -Nru a/drivers/usb/storage/isd200.c b/drivers/usb/storage/isd200.c --- a/drivers/usb/storage/isd200.c Mon Sep 16 15:01:05 2002 +++ b/drivers/usb/storage/isd200.c Mon Sep 16 15:01:05 2002 @@ -501,13 +501,13 @@ sg[i].length) { result = isd200_transfer_partial(us, srb->sc_data_direction, - page_address(sg[i].page) + sg[i].offset, + sg_address(sg[i]), sg[i].length); total_transferred += sg[i].length; } else result = isd200_transfer_partial(us, srb->sc_data_direction, - page_address(sg[i].page) + sg[i].offset, + sg_address(sg[i]), transfer_amount - total_transferred); /* if we get an error, end the loop here */ @@ -1409,10 +1409,10 @@ /* transfer the lesser of the next buffer or the * remaining data */ if (len - total >= sg[i].length) { - memcpy(page_address(sg[i].page) + sg[i].offset, src + total, sg[i].length); + memcpy(sg_address(sg[i]), src + total, sg[i].length); total += sg[i].length; } else { - memcpy(page_address(sg[i].page) + sg[i].offset, src + total, len - total); + memcpy(sg_address(sg[i]), src + total, len - total); total = len; } } diff -Nru a/drivers/usb/storage/protocol.c b/drivers/usb/storage/protocol.c --- a/drivers/usb/storage/protocol.c Mon Sep 16 15:01:05 2002 +++ b/drivers/usb/storage/protocol.c Mon Sep 16 15:01:05 2002 @@ -65,7 +65,7 @@ struct scatterlist *sg; sg = (struct scatterlist *) srb->request_buffer; - return (void *) page_address(sg[0].page) + sg[0].offset; + return (void *) sg_address(sg[0]); } else return (void *) srb->request_buffer; } diff -Nru a/drivers/usb/storage/raw_bulk.c b/drivers/usb/storage/raw_bulk.c --- a/drivers/usb/storage/raw_bulk.c Mon Sep 16 15:01:05 2002 +++ b/drivers/usb/storage/raw_bulk.c Mon Sep 16 15:01:05 2002 @@ -191,7 +191,7 @@ unsigned char *buf; unsigned int length; - buf = page_address(sg[i].page) + sg[i].offset; + buf = sg_address(sg[i]); length = len-transferred; if (length > sg[i].length) length = sg[i].length; @@ -261,7 +261,7 @@ unsigned char *ptr; unsigned int length, room; - ptr = page_address(sg[i].page) + sg[i].offset + *offset; + ptr = sg_address(sg[i]) + *offset; room = sg[i].length - *offset; length = len - transferred; @@ -310,7 +310,7 @@ unsigned char *ptr; unsigned int length, room; - ptr = page_address(sg[i].page) + sg[i].offset + *offset; + ptr = sg_address(sg[i]) + *offset; room = sg[i].length - *offset; length = buflen - transferred; diff -Nru a/drivers/usb/storage/scsiglue.c b/drivers/usb/storage/scsiglue.c --- a/drivers/usb/storage/scsiglue.c Mon Sep 16 15:01:05 2002 +++ b/drivers/usb/storage/scsiglue.c Mon Sep 16 15:01:05 2002 @@ -563,8 +563,8 @@ /* copy one byte */ { - char *src = page_address(sg[sb].page) + sg[sb].offset + si; - char *dst = page_address(sg[db].page) + sg[db].offset + di; + char *src = sg_address(sg[sb]) + si; + char *dst = sg_address(sg[db]) + di; *dst = *src; } @@ -605,7 +605,7 @@ break; } - *(char*)(page_address(sg[db].page) + sg[db].offset) = 0; + *(char*)(sg_address(sg[db])) = 0; /* get next destination */ if ( sg[db].length-1 == di ) @@ -756,8 +756,8 @@ /* copy one byte */ { - char *src = page_address(sg[sb].page) + sg[sb].offset + si; - char *dst = page_address(sg[db].page) + sg[db].offset + di; + char *src = sg_address(sg[sb]) + si; + char *dst = sg_address(sg[db]) + di; *dst = *src; } @@ -798,7 +798,7 @@ } { - char *dst = page_address(sg[db].page) + sg[db].offset + di; + char *dst = sg_address(sg[db]) + di; *dst = tempBuffer[element-USB_STOR_SCSI_SENSE_HDRSZ]; } @@ -852,17 +852,14 @@ if ( element < USB_STOR_SCSI_SENSE_HDRSZ ) { /* fill in the pointers for both header types */ - the6->array[element] = page_address(sg[i].page) + - sg[i].offset + j; - the10->array[element] = page_address(sg[i].page) + - sg[i].offset + j; + the6->array[element] = sg_address(sg[i]) + j; + the10->array[element] = sg_address(sg[i]) + j; } else if ( element < USB_STOR_SCSI_SENSE_10_HDRSZ ) { /* only the longer headers still cares now */ - the10->array[element] = page_address(sg[i].page) + - sg[i].offset + j; + the10->array[element] = sg_address(sg[i]) + j; } /* increase element counter */ diff -Nru a/drivers/usb/storage/sddr09.c b/drivers/usb/storage/sddr09.c --- a/drivers/usb/storage/sddr09.c Mon Sep 16 15:01:05 2002 +++ b/drivers/usb/storage/sddr09.c Mon Sep 16 15:01:05 2002 @@ -1091,25 +1091,23 @@ return 0; for (i=0; i= KERNEL_VERSION(2,5,3) + sg[i].page = virt_to_page(vaddr); + sg[i].offset = ((unsigned long)vaddr & ~PAGE_MASK); +#else + sg[i].address = vaddr; +#endif + sg[i].length = alloc_req; + alloc_len -= alloc_req; } for (i=0; ilba_to_pba = NULL; info->pba_to_lba = NULL; for (i=0; ilba_to_pba[i] = info->pba_to_lba[i] = UNDEF; - ptr = page_address(sg[0].page)+sg[0].offset; + ptr = sg_address(sg[0]); /* * Define lba-pba translation table @@ -1153,8 +1151,7 @@ // scatterlist block i*64/128k = i*(2^6)*(2^-17) = i*(2^-11) for (i=0; i>11].page) + - sg[i>>11].offset + ((i&0x7ff)<<6); + ptr = sg_address(sg[i>>11]) + ((i&0x7ff)<<6); if (i == 0 || i == 1) { info->pba_to_lba[i] = UNUSABLE; @@ -1264,7 +1261,7 @@ US_DEBUGP("Found %d LBA's\n", lbact); for (i=0; i= sg[i].length) { result = usb_stor_transfer_partial(us, - page_address(sg[i].page) + sg[i].offset, sg[i].length); + sg_address(sg[i]), sg[i].length); total_transferred += sg[i].length; } else result = usb_stor_transfer_partial(us, - page_address(sg[i].page) + sg[i].offset, + sg_address(sg[i]), transfer_amount - total_transferred); /* if we get an error, end the loop here */ diff -Nru a/drivers/usb/storage/usb.c b/drivers/usb/storage/usb.c --- a/drivers/usb/storage/usb.c Mon Sep 16 15:01:05 2002 +++ b/drivers/usb/storage/usb.c Mon Sep 16 15:01:05 2002 @@ -283,13 +283,13 @@ if (us->srb->use_sg) { sg = (struct scatterlist *)us->srb->request_buffer; for (i=0; isrb->use_sg; i++) - memset(page_address(sg[i].page) + sg[i].offset, 0, sg[i].length); + memset(sg_address(sg[i]), 0, sg[i].length); for (i=0, transferred=0; isrb->use_sg && transferred < len; i++) { amt = sg[i].length > len-transferred ? len-transferred : sg[i].length; - memcpy(page_address(sg[i].page) + sg[i].offset, data+transferred, amt); + memcpy(sg_address(sg[i]), data+transferred, amt); transferred -= amt; } } else { diff -Nru a/drivers/usb/storage/usb.h b/drivers/usb/storage/usb.h --- a/drivers/usb/storage/usb.h Mon Sep 16 15:01:05 2002 +++ b/drivers/usb/storage/usb.h Mon Sep 16 15:01:05 2002 @@ -206,7 +206,6 @@ * single queue element srb for write access */ #define scsi_unlock(host) spin_unlock_irq(host->host_lock) #define scsi_lock(host) spin_lock_irq(host->host_lock) - -#define sg_address(psg) (page_address((psg)->page) + (psg)->offset) +#define sg_address(psg) (page_address((psg).page) + (psg).offset) #endif