USB: mos7720: fix DMA buffers on stack and clean up send_mos_cmd

Change data-argument type from (void *) to (u8 *) to prevent endianess
problems.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
Johan Hovold 2009-12-28 23:01:54 +01:00 committed by Greg Kroah-Hartman
parent abf492e7b3
commit eb771e2c65
1 changed files with 17 additions and 17 deletions

View File

@ -275,13 +275,11 @@ static void mos7720_bulk_out_data_callback(struct urb *urb)
* this function will be used for sending command to device
*/
static int send_mos_cmd(struct usb_serial *serial, __u8 request, __u16 value,
__u16 index, void *data)
__u16 index, u8 *data)
{
int status;
unsigned int pipe;
u8 *buf;
u16 product = le16_to_cpu(serial->dev->descriptor.idProduct);
__u8 requesttype;
__u16 size = 0x0000;
if (value < MOS_MAX_PORT) {
if (product == MOSCHIP_DEVICE_ID_7715)
@ -298,21 +296,23 @@ static int send_mos_cmd(struct usb_serial *serial, __u8 request, __u16 value,
}
if (request == MOS_WRITE) {
request = (__u8)MOS_WRITE;
requesttype = (__u8)0x40;
value = value + (__u16)*((unsigned char *)data);
data = NULL;
pipe = usb_sndctrlpipe(serial->dev, 0);
value = value + *data;
status = usb_control_msg(serial->dev,
usb_sndctrlpipe(serial->dev, 0), MOS_WRITE,
0x40, value, index, NULL, 0, MOS_WDR_TIMEOUT);
} else {
request = (__u8)MOS_READ;
requesttype = (__u8)0xC0;
size = 0x01;
pipe = usb_rcvctrlpipe(serial->dev, 0);
buf = kmalloc(1, GFP_KERNEL);
if (!buf) {
status = -ENOMEM;
goto out;
}
status = usb_control_msg(serial->dev,
usb_rcvctrlpipe(serial->dev, 0), MOS_READ,
0xc0, value, index, buf, 1, MOS_WDR_TIMEOUT);
*data = *buf;
kfree(buf);
}
status = usb_control_msg(serial->dev, pipe, request, requesttype,
value, index, data, size, MOS_WDR_TIMEOUT);
out:
if (status < 0)
dbg("Command Write failed Value %x index %x\n", value, index);