struct file *filp);
#ifdef FIX_WRITE_RETURN_CODE_PROBLEM
static int mct_u232_write (struct usb_serial_port *port,
+ int from_user,
const unsigned char *buf,
int count);
static void mct_u232_write_bulk_callback (struct urb *urb, struct pt_regs *regs);
static int mct_u232_set_baud_rate(struct usb_serial *serial, int value)
{
- __le32 divisor;
+ unsigned int divisor;
int rc;
unsigned char zero_byte = 0;
if (port->serial->dev) {
/* shutdown our urbs */
- usb_kill_urb(port->write_urb);
- usb_kill_urb(port->read_urb);
- usb_kill_urb(port->interrupt_in_urb);
+ usb_unlink_urb (port->write_urb);
+ usb_unlink_urb (port->read_urb);
+ usb_unlink_urb (port->interrupt_in_urb);
}
} /* mct_u232_close */
#ifdef FIX_WRITE_RETURN_CODE_PROBLEM
/* The generic routines work fine otherwise */
-static int mct_u232_write (struct usb_serial_port *port,
+static int mct_u232_write (struct usb_serial_port *port, int from_user,
const unsigned char *buf, int count)
{
struct usb_serial *serial = port->serial;
usb_serial_debug_data(debug, &port->dev, __FUNCTION__, size, buf);
- memcpy (port->write_urb->transfer_buffer, buf, size);
+ if (from_user) {
+ if (copy_from_user(port->write_urb->transfer_buffer, buf, size)) {
+ return -EFAULT;
+ }
+ }
+ else {
+ memcpy (port->write_urb->transfer_buffer, buf, size);
+ }
/* set up our urb */
usb_fill_bulk_urb(port->write_urb, serial->dev,