ChangeSet 1.1504.2.22, 2003/12/09 11:43:14-08:00, stern@rowland.harvard.edu [PATCH] USB storage: Another utility scatter-gather routine This patch adds a small utility routine for storing data in a transfer buffer. The next patch uses this routine quite a bit in the isd200 driver. drivers/usb/storage/protocol.c | 13 +++++++++++++ drivers/usb/storage/protocol.h | 2 ++ drivers/usb/storage/usb.c | 8 +------- 3 files changed, 16 insertions(+), 7 deletions(-) diff -Nru a/drivers/usb/storage/protocol.c b/drivers/usb/storage/protocol.c --- a/drivers/usb/storage/protocol.c Mon Dec 29 14:24:33 2003 +++ b/drivers/usb/storage/protocol.c Mon Dec 29 14:24:33 2003 @@ -295,3 +295,16 @@ } return cnt; } + +/* Store the contents of buffer into srb's transfer buffer and set the + * residue. */ +void usb_stor_set_xfer_buf(unsigned char *buffer, + unsigned int buflen, Scsi_Cmnd *srb) +{ + unsigned int index = 0, offset = 0; + + usb_stor_access_xfer_buf(buffer, buflen, srb, &index, &offset, + TO_XFER_BUF); + if (buflen < srb->request_bufflen) + srb->resid = srb->request_bufflen - buflen; +} diff -Nru a/drivers/usb/storage/protocol.h b/drivers/usb/storage/protocol.h --- a/drivers/usb/storage/protocol.h Mon Dec 29 14:24:33 2003 +++ b/drivers/usb/storage/protocol.h Mon Dec 29 14:24:33 2003 @@ -72,4 +72,6 @@ unsigned int buflen, Scsi_Cmnd *srb, unsigned int *index, unsigned int *offset, enum xfer_buf_dir dir); +extern void usb_stor_set_xfer_buf(unsigned char *buffer, + unsigned int buflen, Scsi_Cmnd *srb); #endif diff -Nru a/drivers/usb/storage/usb.c b/drivers/usb/storage/usb.c --- a/drivers/usb/storage/usb.c Mon Dec 29 14:24:33 2003 +++ b/drivers/usb/storage/usb.c Mon Dec 29 14:24:33 2003 @@ -236,8 +236,6 @@ void fill_inquiry_response(struct us_data *us, unsigned char *data, unsigned int data_len) { - unsigned int index, offset; - if (data_len<36) // You lose. return; @@ -264,11 +262,7 @@ data[35] = 0x30 + ((us->pusb_dev->descriptor.bcdDevice) & 0x0F); } - index = offset = 0; - usb_stor_access_xfer_buf(data, data_len, us->srb, - &index, &offset, TO_XFER_BUF); - if (data_len < us->srb->request_bufflen) - us->srb->resid = us->srb->request_bufflen - data_len; + usb_stor_set_xfer_buf(data, data_len, us->srb); } static int usb_stor_control_thread(void * __us)