ChangeSet 1.1455.1.39, 2003/07/16 10:16:36-07:00, [EMAIL PROTECTED]
[PATCH] USB: Make sddr55 use proper I/O buffering
This patch makes the sddr55 subdriver use proper DMA I/O buffering.
drivers/usb/storage/sddr55.c | 41 ++++++++++++++++++++++++-----------------
1 files changed, 24 insertions(+), 17 deletions(-)
diff -Nru a/drivers/usb/storage/sddr55.c b/drivers/usb/storage/sddr55.c
--- a/drivers/usb/storage/sddr55.c Thu Jul 17 17:03:27 2003
+++ b/drivers/usb/storage/sddr55.c Thu Jul 17 17:03:27 2003
@@ -91,13 +91,14 @@
static int sddr55_status(struct us_data *us)
{
int result;
- unsigned char command[8] = {
- 0, 0, 0, 0, 0, 0xb0, 0, 0x80
- };
- unsigned char status[8];
+ unsigned char *command = us->iobuf;
+ unsigned char *status = us->iobuf;
struct sddr55_card_info *info = (struct sddr55_card_info *)us->extra;
/* send command */
+ memset(command, 0, 8);
+ command[5] = 0xB0;
+ command[7] = 0x80;
result = sddr55_bulk_transport(us,
SCSI_DATA_WRITE, command, 8);
@@ -158,10 +159,8 @@
int use_sg) {
int result = USB_STOR_TRANSPORT_GOOD;
- unsigned char command[8] = {
- 0, 0, 0, 0, 0, 0xb0, 0, 0x85
- };
- unsigned char status[8];
+ unsigned char *command = us->iobuf;
+ unsigned char *status = us->iobuf;
struct sddr55_card_info *info = (struct sddr55_card_info *)us->extra;
unsigned int pba;
@@ -205,11 +204,15 @@
address = (pba << info->blockshift) + page;
+ command[0] = 0;
command[1] = LSB_of(address>>16);
command[2] = LSB_of(address>>8);
command[3] = LSB_of(address);
+ command[4] = 0;
+ command[5] = 0xB0;
command[6] = LSB_of(pages << (1 - info->smallpageshift));
+ command[7] = 0x85;
/* send command */
result = sddr55_bulk_transport(us,
@@ -274,10 +277,8 @@
int use_sg) {
int result = USB_STOR_TRANSPORT_GOOD;
- unsigned char command[8] = {
- 0, 0, 0, 0, 0, 0xb0, 0, 0x86
- };
- unsigned char status[8];
+ unsigned char *command = us->iobuf;
+ unsigned char *status = us->iobuf;
struct sddr55_card_info *info = (struct sddr55_card_info *)us->extra;
unsigned int pba;
@@ -380,6 +381,8 @@
command[6] = MSB_of(lba % 1000);
command[4] |= LSB_of(pages >> info->smallpageshift);
+ command[5] = 0xB0;
+ command[7] = 0x86;
/* send command */
result = sddr55_bulk_transport(us,
@@ -473,11 +476,12 @@
unsigned char *deviceID) {
int result;
- unsigned char command[8] = {
- 0, 0, 0, 0, 0, 0xb0, 0, 0x84
- };
- unsigned char content[64];
+ unsigned char *command = us->iobuf;
+ unsigned char *content = us->iobuf;
+ memset(command, 0, 8);
+ command[5] = 0xB0;
+ command[7] = 0x84;
result = sddr55_bulk_transport(us, SCSI_DATA_WRITE, command, 8);
US_DEBUGP("Result of send_control for device ID is %d\n",
@@ -598,7 +602,7 @@
struct sddr55_card_info *info = (struct sddr55_card_info *)(us->extra);
int numblocks;
unsigned char *buffer;
- unsigned char command[8] = { 0, 0, 0, 0, 0, 0xb0, 0, 0x8a};
+ unsigned char *command = us->iobuf;
int i;
unsigned short lba;
unsigned short max_lba;
@@ -614,7 +618,10 @@
if (!buffer)
return -1;
+ memset(command, 0, 8);
+ command[5] = 0xB0;
command[6] = numblocks * 2 / 256;
+ command[7] = 0x8A;
result = sddr55_bulk_transport(us, SCSI_DATA_WRITE, command, 8);
-------------------------------------------------------
This SF.net email is sponsored by: VM Ware
With VMware you can run multiple operating systems on a single machine.
WITHOUT REBOOTING! Mix Linux / Windows / Novell virtual machines at the
same time. Free trial click here: http://www.vmware.com/wl/offer/345/0
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel