USB: Change the scatterlist type in struct urb

Change the type of the URB's 'sg' pointer from a usb_sg_request to
a scatterlist.  This allows drivers to submit scatter-gather lists
without using the usb_sg_wait() interface.  It has the added benefit
of removing the typecasts that were added as part of patch as1368 (and
slightly decreasing the number of pointer dereferences).

Signed-off-by: Matthew Wilcox <willy@linux.intel.com>
Reviewed-by: Alan Stern <stern@rowland.harvard.edu>
Tested-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
Matthew Wilcox
2010-05-01 12:20:01 -06:00
committed by Greg Kroah-Hartman
parent 1e429018b6
commit 910f8d0ced
8 changed files with 13 additions and 15 deletions

View File

@@ -1278,7 +1278,7 @@ static void unmap_urb_for_dma(struct usb_hcd *hcd, struct urb *urb)
dir = usb_urb_dir_in(urb) ? DMA_FROM_DEVICE : DMA_TO_DEVICE;
if (urb->transfer_flags & URB_DMA_MAP_SG)
dma_unmap_sg(hcd->self.controller,
urb->sg->sg,
urb->sg,
urb->num_sgs,
dir);
else if (urb->transfer_flags & URB_DMA_MAP_PAGE)
@@ -1346,7 +1346,7 @@ static int map_urb_for_dma(struct usb_hcd *hcd, struct urb *urb,
if (urb->num_sgs) {
int n = dma_map_sg(
hcd->self.controller,
urb->sg->sg,
urb->sg,
urb->num_sgs,
dir);
if (n <= 0)
@@ -1359,9 +1359,7 @@ static int map_urb_for_dma(struct usb_hcd *hcd, struct urb *urb,
URB_DMA_SG_COMBINED;
}
} else if (urb->sg) {
struct scatterlist *sg;
sg = (struct scatterlist *) urb->sg;
struct scatterlist *sg = urb->sg;
urb->transfer_dma = dma_map_page(
hcd->self.controller,
sg_page(sg),

View File

@@ -413,7 +413,7 @@ int usb_sg_init(struct usb_sg_request *io, struct usb_device *dev,
sg->length;
}
}
io->urbs[0]->sg = io;
io->urbs[0]->sg = sg;
io->urbs[0]->num_sgs = io->entries;
io->entries = 1;
} else {
@@ -454,7 +454,7 @@ int usb_sg_init(struct usb_sg_request *io, struct usb_device *dev,
}
io->urbs[i]->transfer_buffer_length = len;
io->urbs[i]->sg = (struct usb_sg_request *) sg;
io->urbs[i]->sg = sg;
}
io->urbs[--i]->transfer_flags &= ~URB_NO_INTERRUPT;
}