21 #include <linux/kernel.h>
22 #include <linux/errno.h>
24 #include <linux/slab.h>
25 #include <linux/module.h>
28 #include <asm/uaccess.h>
30 #ifdef CONFIG_USB_DEBUG
38 #define dbg(lvl, format, arg...) \
41 printk(KERN_DEBUG "%s: " format "\n", __FILE__, ##arg); \
46 #define DRIVER_VERSION "v0.0.13"
47 #define DRIVER_AUTHOR "John Homppi"
48 #define DRIVER_DESC "adutux (see www.ontrak.net)"
55 #define ADU_VENDOR_ID 0x0a07
56 #define ADU_PRODUCT_ID 0x0064
71 #ifdef CONFIG_USB_DYNAMIC_MINORS
72 #define ADU_MINOR_BASE 0
74 #define ADU_MINOR_BASE 67
78 #define MAX_DEVICES 16
80 #define COMMAND_TIMEOUT (2*HZ)
125 static struct usb_driver adu_driver;
127 static void adu_debug_data(
int level,
const char *
function,
int size,
128 const unsigned char *
data)
136 __FILE__,
function, size);
137 for (i = 0; i <
size; ++
i)
150 dbg(2,
" %s : enter", __func__);
153 dbg(1,
" %s : udev is null", __func__);
162 spin_unlock_irqrestore(&dev->
buflock, flags);
165 spin_unlock_irqrestore(&dev->
buflock, flags);
169 spin_unlock_irqrestore(&dev->
buflock, flags);
172 spin_unlock_irqrestore(&dev->
buflock, flags);
175 dbg(2,
" %s : leave", __func__);
178 static void adu_delete(
struct adu_device *dev)
180 dbg(2,
"%s enter", __func__);
191 dbg(2,
"%s : leave", __func__);
194 static void adu_interrupt_in_callback(
struct urb *
urb)
199 dbg(4,
" %s : enter, status %d", __func__, status);
200 adu_debug_data(5, __func__, urb->actual_length,
201 urb->transfer_buffer);
208 dbg(1,
" %s : nonzero status received: %d",
217 (urb->actual_length)) {
223 dbg(2,
" %s reading %d ", __func__,
226 dbg(1,
" %s : read_buffer overflow", __func__);
235 adu_debug_data(5, __func__, urb->actual_length,
236 urb->transfer_buffer);
237 dbg(4,
" %s : leave, status %d", __func__, status);
240 static void adu_interrupt_out_callback(
struct urb *urb)
243 int status = urb->status;
245 dbg(4,
" %s : enter, status %d", __func__, status);
246 adu_debug_data(5,__func__, urb->actual_length, urb->transfer_buffer);
249 if ((status != -
ENOENT) &&
251 dbg(1,
" %s :nonzero status received: %d",
263 adu_debug_data(5, __func__, urb->actual_length,
264 urb->transfer_buffer);
265 dbg(4,
" %s : leave, status %d", __func__, status);
275 dbg(2,
"%s : enter", __func__);
277 subminor = iminor(inode);
280 dbg(2,
"%s : mutex lock failed", __func__);
287 "minor %d\n", __func__, subminor);
292 dev = usb_get_intfdata(interface);
293 if (!dev || !dev->
udev) {
315 usb_rcvintpipe(dev->
udev,
319 adu_interrupt_in_callback, dev,
335 dbg(2,
"%s : leave, return value %d ", __func__, retval);
339 static void adu_release_internal(
struct adu_device *dev)
341 dbg(2,
" %s : enter", __func__);
347 adu_abort_transfers(dev);
351 dbg(2,
" %s : leave", __func__);
354 static int adu_release(
struct inode *inode,
struct file *file)
359 dbg(2,
" %s : enter", __func__);
362 dbg(1,
" %s : file is NULL", __func__);
369 dbg(1,
" %s : object is NULL", __func__);
377 dbg(1,
" %s : device not opened", __func__);
382 adu_release_internal(dev);
391 dbg(2,
" %s : leave, return value %d", __func__, retval);
399 size_t bytes_read = 0;
400 size_t bytes_to_read =
count;
404 int should_submit = 0;
408 dbg(2,
" %s : enter, count = %Zd, file=%p", __func__, count, file);
411 dbg(2,
" %s : dev=%p", __func__, dev);
426 dbg(1,
" %s : read request of 0 bytes", __func__);
431 dbg(2,
" %s : about to start looping", __func__);
432 while (bytes_to_read) {
434 dbg(2,
" %s : while, data_in_secondary=%d, status=%d",
435 __func__, data_in_secondary,
438 if (data_in_secondary) {
440 int amount = bytes_to_read < data_in_secondary ? bytes_to_read : data_in_secondary;
447 bytes_read += (amount -
i);
448 bytes_to_read -= (amount -
i);
450 retval = bytes_read ? bytes_read : -
EFAULT;
459 dbg(2,
" %s : swap, read_buffer_length = %d",
467 spin_unlock_irqrestore(&dev->
buflock, flags);
474 spin_unlock_irqrestore(&dev->
buflock, flags);
475 dbg(2,
" %s : submitted already", __func__);
478 dbg(2,
" %s : initiate input", __func__);
480 spin_unlock_irqrestore(&dev->
buflock, flags);
483 usb_rcvintpipe(dev->
udev,
487 adu_interrupt_in_callback,
494 retval = bytes_read ? bytes_read : -
ENOMEM;
496 dbg(2,
" %s : submit failed", __func__);
506 spin_unlock_irqrestore(&dev->
buflock, flags);
509 spin_unlock_irqrestore(&dev->
buflock, flags);
515 dbg(2,
" %s : timeout", __func__);
516 retval = bytes_read ? bytes_read : -
ETIMEDOUT;
521 dbg(2,
" %s : signal pending", __func__);
522 retval = bytes_read ? bytes_read : -
EINTR;
534 spin_unlock_irqrestore(&dev->
buflock, flags);
536 usb_rcvintpipe(dev->
udev,
540 adu_interrupt_in_callback,
547 spin_unlock_irqrestore(&dev->
buflock, flags);
554 dbg(2,
" %s : leave, return value %d", __func__, retval);
558 static ssize_t adu_write(
struct file *file,
const __user
char *buffer,
559 size_t count, loff_t *ppos)
563 size_t bytes_written = 0;
564 size_t bytes_to_write;
569 dbg(2,
" %s : enter, count = %Zd", __func__, count);
587 dbg(1,
" %s : write request of 0 bytes", __func__);
596 spin_unlock_irqrestore(&dev->
buflock, flags);
600 dbg(1,
" %s : interrupted", __func__);
606 dbg(1,
"%s - command timed out.", __func__);
613 retval = bytes_written ? bytes_written :
retval;
617 dbg(4,
" %s : in progress, count = %Zd", __func__, count);
619 spin_unlock_irqrestore(&dev->
buflock, flags);
622 dbg(4,
" %s : sending, count = %Zd", __func__, count);
626 bytes_to_write = count > buffer_size ? buffer_size :
count;
627 dbg(4,
" %s : buffer_size = %Zd, count = %Zd, bytes_to_write = %Zd",
628 __func__, buffer_size, count, bytes_to_write);
642 adu_interrupt_out_callback,
651 "interrupt_out_urb %d\n", retval);
655 buffer += bytes_to_write;
656 count -= bytes_to_write;
658 bytes_written += bytes_to_write;
662 return bytes_written;
667 dbg(2,
" %s : leave, return value %d", __func__, retval);
681 .release = adu_release,
689 static struct usb_class_driver adu_class = {
690 .name =
"usb/adutux%d",
704 struct usb_device *
udev = interface_to_usbdev(interface);
706 struct usb_host_interface *iface_desc;
713 dbg(2,
" %s : enter", __func__);
716 dev_err(&interface->dev,
"udev is NULL.\n");
723 dev_err(&interface->dev,
"Out of memory\n");
734 iface_desc = &interface->altsetting[0];
737 for (i = 0; i < iface_desc->desc.bNumEndpoints; ++
i) {
738 endpoint = &iface_desc->endpoint[
i].desc;
740 if (usb_endpoint_is_int_in(endpoint))
743 if (usb_endpoint_is_int_out(endpoint))
747 dev_err(&interface->dev,
"interrupt in endpoint not found\n");
751 dev_err(&interface->dev,
"interrupt out endpoint not found\n");
760 dev_err(&interface->dev,
"Couldn't allocate read_buffer_primary\n");
773 dev_err(&interface->dev,
"Couldn't allocate read_buffer_secondary\n");
786 dev_err(&interface->dev,
"Couldn't allocate interrupt_in_buffer\n");
795 dev_err(&interface->dev,
"Couldn't allocate interrupt_in_urb\n");
800 dev_err(&interface->dev,
"Couldn't allocate interrupt_out_buffer\n");
805 dev_err(&interface->dev,
"Couldn't allocate interrupt_out_urb\n");
811 dev_err(&interface->dev,
"Could not retrieve serial number\n");
817 usb_set_intfdata(interface, dev);
823 dev_err(&interface->dev,
"Not able to get a minor for this device.\n");
824 usb_set_intfdata(interface,
NULL);
828 dev->
minor = interface->minor;
831 dev_info(&interface->dev,
"ADU%d %s now attached to /dev/usb/adutux%d\n",
835 dbg(2,
" %s : leave, return value %p (dev)", __func__, dev);
854 dbg(2,
" %s : enter", __func__);
856 dev = usb_get_intfdata(interface);
865 usb_set_intfdata(interface,
NULL);
874 dev_info(&interface->dev,
"ADU device adutux%d now disconnected\n",
877 dbg(2,
" %s : leave", __func__);
881 static struct usb_driver adu_driver = {
884 .disconnect = adu_disconnect,
885 .id_table = device_table,