xref: /linux/drivers/usb/misc/legousbtower.c (revision 858259cf7d1c443c836a2022b78cb281f0a9b95e)
1 /*
2  * LEGO USB Tower driver
3  *
4  * Copyright (C) 2003 David Glance <davidgsf@sourceforge.net>
5  *               2001-2004 Juergen Stuber <starblue@users.sourceforge.net>
6  *
7  *	This program is free software; you can redistribute it and/or
8  *	modify it under the terms of the GNU General Public License as
9  *	published by the Free Software Foundation; either version 2 of
10  *	the License, or (at your option) any later version.
11  *
12  * derived from USB Skeleton driver - 0.5
13  * Copyright (C) 2001 Greg Kroah-Hartman (greg@kroah.com)
14  *
15  * History:
16  *
17  * 2001-10-13 - 0.1 js
18  *   - first version
19  * 2001-11-03 - 0.2 js
20  *   - simplified buffering, one-shot URBs for writing
21  * 2001-11-10 - 0.3 js
22  *   - removed IOCTL (setting power/mode is more complicated, postponed)
23  * 2001-11-28 - 0.4 js
24  *   - added vendor commands for mode of operation and power level in open
25  * 2001-12-04 - 0.5 js
26  *   - set IR mode by default (by oversight 0.4 set VLL mode)
27  * 2002-01-11 - 0.5? pcchan
28  *   - make read buffer reusable and work around bytes_to_write issue between
29  *     uhci and legusbtower
30  * 2002-09-23 - 0.52 david (david@csse.uwa.edu.au)
31  *   - imported into lejos project
32  *   - changed wake_up to wake_up_interruptible
33  *   - changed to use lego0 rather than tower0
34  *   - changed dbg() to use __func__ rather than deprecated __FUNCTION__
35  * 2003-01-12 - 0.53 david (david@csse.uwa.edu.au)
36  *   - changed read and write to write everything or
37  *     timeout (from a patch by Chris Riesen and Brett Thaeler driver)
38  *   - added ioctl functionality to set timeouts
39  * 2003-07-18 - 0.54 davidgsf (david@csse.uwa.edu.au)
40  *   - initial import into LegoUSB project
41  *   - merge of existing LegoUSB.c driver
42  * 2003-07-18 - 0.56 davidgsf (david@csse.uwa.edu.au)
43  *   - port to 2.6 style driver
44  * 2004-02-29 - 0.6 Juergen Stuber <starblue@users.sourceforge.net>
45  *   - fix locking
46  *   - unlink read URBs which are no longer needed
47  *   - allow increased buffer size, eliminates need for timeout on write
48  *   - have read URB running continuously
49  *   - added poll
50  *   - forbid seeking
51  *   - added nonblocking I/O
52  *   - changed back __func__ to __FUNCTION__
53  *   - read and log tower firmware version
54  *   - reset tower on probe, avoids failure of first write
55  * 2004-03-09 - 0.7 Juergen Stuber <starblue@users.sourceforge.net>
56  *   - timeout read now only after inactivity, shorten default accordingly
57  * 2004-03-11 - 0.8 Juergen Stuber <starblue@users.sourceforge.net>
58  *   - log major, minor instead of possibly confusing device filename
59  *   - whitespace cleanup
60  * 2004-03-12 - 0.9 Juergen Stuber <starblue@users.sourceforge.net>
61  *   - normalize whitespace in debug messages
62  *   - take care about endianness in control message responses
63  * 2004-03-13 - 0.91 Juergen Stuber <starblue@users.sourceforge.net>
64  *   - make default intervals longer to accommodate current EHCI driver
65  * 2004-03-19 - 0.92 Juergen Stuber <starblue@users.sourceforge.net>
66  *   - replaced atomic_t by memory barriers
67  * 2004-04-21 - 0.93 Juergen Stuber <starblue@users.sourceforge.net>
68  *   - wait for completion of write urb in release (needed for remotecontrol)
69  *   - corrected poll for write direction (missing negation)
70  * 2004-04-22 - 0.94 Juergen Stuber <starblue@users.sourceforge.net>
71  *   - make device locking interruptible
72  * 2004-04-30 - 0.95 Juergen Stuber <starblue@users.sourceforge.net>
73  *   - check for valid udev on resubmitting and unlinking urbs
74  * 2004-08-03 - 0.96 Juergen Stuber <starblue@users.sourceforge.net>
75  *   - move reset into open to clean out spurious data
76  */
77 
78 #include <linux/config.h>
79 #include <linux/kernel.h>
80 #include <linux/errno.h>
81 #include <linux/init.h>
82 #include <linux/slab.h>
83 #include <linux/module.h>
84 #include <linux/smp_lock.h>
85 #include <linux/completion.h>
86 #include <asm/uaccess.h>
87 #include <linux/usb.h>
88 #include <linux/poll.h>
89 
90 
91 #ifdef CONFIG_USB_DEBUG
92 	static int debug = 4;
93 #else
94 	static int debug = 0;
95 #endif
96 
97 /* Use our own dbg macro */
98 #undef dbg
99 #define dbg(lvl, format, arg...) do { if (debug >= lvl) printk(KERN_DEBUG  __FILE__ ": " format "\n", ## arg); } while (0)
100 
101 
102 /* Version Information */
103 #define DRIVER_VERSION "v0.96"
104 #define DRIVER_AUTHOR "Juergen Stuber <starblue@sourceforge.net>"
105 #define DRIVER_DESC "LEGO USB Tower Driver"
106 
107 /* Module parameters */
108 module_param(debug, int, S_IRUGO | S_IWUSR);
109 MODULE_PARM_DESC(debug, "Debug enabled or not");
110 
111 /* The defaults are chosen to work with the latest versions of leJOS and NQC.
112  */
113 
114 /* Some legacy software likes to receive packets in one piece.
115  * In this case read_buffer_size should exceed the maximal packet length
116  * (417 for datalog uploads), and packet_timeout should be set.
117  */
118 static int read_buffer_size = 480;
119 module_param(read_buffer_size, int, 0);
120 MODULE_PARM_DESC(read_buffer_size, "Read buffer size");
121 
122 /* Some legacy software likes to send packets in one piece.
123  * In this case write_buffer_size should exceed the maximal packet length
124  * (417 for firmware and program downloads).
125  * A problem with long writes is that the following read may time out
126  * if the software is not prepared to wait long enough.
127  */
128 static int write_buffer_size = 480;
129 module_param(write_buffer_size, int, 0);
130 MODULE_PARM_DESC(write_buffer_size, "Write buffer size");
131 
132 /* Some legacy software expects reads to contain whole LASM packets.
133  * To achieve this, characters which arrive before a packet timeout
134  * occurs will be returned in a single read operation.
135  * A problem with long reads is that the software may time out
136  * if it is not prepared to wait long enough.
137  * The packet timeout should be greater than the time between the
138  * reception of subsequent characters, which should arrive about
139  * every 5ms for the standard 2400 baud.
140  * Set it to 0 to disable.
141  */
142 static int packet_timeout = 50;
143 module_param(packet_timeout, int, 0);
144 MODULE_PARM_DESC(packet_timeout, "Packet timeout in ms");
145 
146 /* Some legacy software expects blocking reads to time out.
147  * Timeout occurs after the specified time of read and write inactivity.
148  * Set it to 0 to disable.
149  */
150 static int read_timeout = 200;
151 module_param(read_timeout, int, 0);
152 MODULE_PARM_DESC(read_timeout, "Read timeout in ms");
153 
154 /* As of kernel version 2.6.4 ehci-hcd uses an
155  * "only one interrupt transfer per frame" shortcut
156  * to simplify the scheduling of periodic transfers.
157  * This conflicts with our standard 1ms intervals for in and out URBs.
158  * We use default intervals of 2ms for in and 8ms for out transfers,
159  * which is fast enough for 2400 baud and allows a small additional load.
160  * Increase the interval to allow more devices that do interrupt transfers,
161  * or set to 0 to use the standard interval from the endpoint descriptors.
162  */
163 static int interrupt_in_interval = 2;
164 module_param(interrupt_in_interval, int, 0);
165 MODULE_PARM_DESC(interrupt_in_interval, "Interrupt in interval in ms");
166 
167 static int interrupt_out_interval = 8;
168 module_param(interrupt_out_interval, int, 0);
169 MODULE_PARM_DESC(interrupt_out_interval, "Interrupt out interval in ms");
170 
171 /* Define these values to match your device */
172 #define LEGO_USB_TOWER_VENDOR_ID	0x0694
173 #define LEGO_USB_TOWER_PRODUCT_ID	0x0001
174 
175 /* Vendor requests */
176 #define LEGO_USB_TOWER_REQUEST_RESET		0x04
177 #define LEGO_USB_TOWER_REQUEST_GET_VERSION	0xFD
178 
179 struct tower_reset_reply {
180 	__le16 size;		/* little-endian */
181 	__u8 err_code;
182 	__u8 spare;
183 } __attribute__ ((packed));
184 
185 struct tower_get_version_reply {
186 	__le16 size;		/* little-endian */
187 	__u8 err_code;
188 	__u8 spare;
189 	__u8 major;
190 	__u8 minor;
191 	__le16 build_no;		/* little-endian */
192 } __attribute__ ((packed));
193 
194 
195 /* table of devices that work with this driver */
196 static struct usb_device_id tower_table [] = {
197 	{ USB_DEVICE(LEGO_USB_TOWER_VENDOR_ID, LEGO_USB_TOWER_PRODUCT_ID) },
198 	{ }					/* Terminating entry */
199 };
200 
201 MODULE_DEVICE_TABLE (usb, tower_table);
202 
203 #define LEGO_USB_TOWER_MINOR_BASE	160
204 
205 
206 /* Structure to hold all of our device specific stuff */
207 struct lego_usb_tower {
208 	struct semaphore	sem;		/* locks this structure */
209 	struct usb_device*	udev;		/* save off the usb device pointer */
210 	unsigned char		minor;		/* the starting minor number for this device */
211 
212 	int			open_count;	/* number of times this port has been opened */
213 
214 	char*			read_buffer;
215 	size_t			read_buffer_length; /* this much came in */
216 	size_t			read_packet_length; /* this much will be returned on read */
217 	spinlock_t		read_buffer_lock;
218 	int			packet_timeout_jiffies;
219 	unsigned long		read_last_arrival;
220 
221 	wait_queue_head_t	read_wait;
222 	wait_queue_head_t	write_wait;
223 
224 	char*			interrupt_in_buffer;
225 	struct usb_endpoint_descriptor* interrupt_in_endpoint;
226 	struct urb*		interrupt_in_urb;
227 	int			interrupt_in_interval;
228 	int			interrupt_in_running;
229 	int			interrupt_in_done;
230 
231 	char*			interrupt_out_buffer;
232 	struct usb_endpoint_descriptor* interrupt_out_endpoint;
233 	struct urb*		interrupt_out_urb;
234 	int			interrupt_out_interval;
235 	int			interrupt_out_busy;
236 
237 };
238 
239 
240 /* local function prototypes */
241 static ssize_t tower_read	(struct file *file, char __user *buffer, size_t count, loff_t *ppos);
242 static ssize_t tower_write	(struct file *file, const char __user *buffer, size_t count, loff_t *ppos);
243 static inline void tower_delete (struct lego_usb_tower *dev);
244 static int tower_open		(struct inode *inode, struct file *file);
245 static int tower_release	(struct inode *inode, struct file *file);
246 static unsigned int tower_poll	(struct file *file, poll_table *wait);
247 static loff_t tower_llseek	(struct file *file, loff_t off, int whence);
248 
249 static void tower_abort_transfers (struct lego_usb_tower *dev);
250 static void tower_check_for_read_packet (struct lego_usb_tower *dev);
251 static void tower_interrupt_in_callback (struct urb *urb, struct pt_regs *regs);
252 static void tower_interrupt_out_callback (struct urb *urb, struct pt_regs *regs);
253 
254 static int  tower_probe	(struct usb_interface *interface, const struct usb_device_id *id);
255 static void tower_disconnect	(struct usb_interface *interface);
256 
257 
258 /* prevent races between open() and disconnect */
259 static DECLARE_MUTEX (disconnect_sem);
260 
261 /* file operations needed when we register this driver */
262 static struct file_operations tower_fops = {
263 	.owner =	THIS_MODULE,
264 	.read  =	tower_read,
265 	.write =	tower_write,
266 	.open =		tower_open,
267 	.release =	tower_release,
268 	.poll =		tower_poll,
269 	.llseek =	tower_llseek,
270 };
271 
272 /*
273  * usb class driver info in order to get a minor number from the usb core,
274  * and to have the device registered with the driver core
275  */
276 static struct usb_class_driver tower_class = {
277 	.name =		"legousbtower%d",
278 	.fops =		&tower_fops,
279 	.minor_base =	LEGO_USB_TOWER_MINOR_BASE,
280 };
281 
282 
283 /* usb specific object needed to register this driver with the usb subsystem */
284 static struct usb_driver tower_driver = {
285 	.owner =	THIS_MODULE,
286 	.name =		"legousbtower",
287 	.probe =	tower_probe,
288 	.disconnect =	tower_disconnect,
289 	.id_table =	tower_table,
290 };
291 
292 
293 /**
294  *	lego_usb_tower_debug_data
295  */
296 static inline void lego_usb_tower_debug_data (int level, const char *function, int size, const unsigned char *data)
297 {
298 	int i;
299 
300 	if (debug < level)
301 		return;
302 
303 	printk (KERN_DEBUG __FILE__": %s - length = %d, data = ", function, size);
304 	for (i = 0; i < size; ++i) {
305 		printk ("%.2x ", data[i]);
306 	}
307 	printk ("\n");
308 }
309 
310 
311 /**
312  *	tower_delete
313  */
314 static inline void tower_delete (struct lego_usb_tower *dev)
315 {
316 	dbg(2, "%s: enter", __FUNCTION__);
317 
318 	tower_abort_transfers (dev);
319 
320 	/* free data structures */
321 	if (dev->interrupt_in_urb != NULL) {
322 		usb_free_urb (dev->interrupt_in_urb);
323 	}
324 	if (dev->interrupt_out_urb != NULL) {
325 		usb_free_urb (dev->interrupt_out_urb);
326 	}
327 	kfree (dev->read_buffer);
328 	kfree (dev->interrupt_in_buffer);
329 	kfree (dev->interrupt_out_buffer);
330 	kfree (dev);
331 
332 	dbg(2, "%s: leave", __FUNCTION__);
333 }
334 
335 
336 /**
337  *	tower_open
338  */
339 static int tower_open (struct inode *inode, struct file *file)
340 {
341 	struct lego_usb_tower *dev = NULL;
342 	int subminor;
343 	int retval = 0;
344 	struct usb_interface *interface;
345 	struct tower_reset_reply reset_reply;
346 	int result;
347 
348 	dbg(2, "%s: enter", __FUNCTION__);
349 
350 	nonseekable_open(inode, file);
351 	subminor = iminor(inode);
352 
353 	down (&disconnect_sem);
354 
355 	interface = usb_find_interface (&tower_driver, subminor);
356 
357 	if (!interface) {
358 		err ("%s - error, can't find device for minor %d",
359 		     __FUNCTION__, subminor);
360 		retval = -ENODEV;
361 		goto unlock_disconnect_exit;
362 	}
363 
364 	dev = usb_get_intfdata(interface);
365 
366 	if (!dev) {
367 		retval = -ENODEV;
368 		goto unlock_disconnect_exit;
369 	}
370 
371 	/* lock this device */
372 	if (down_interruptible (&dev->sem)) {
373 	        retval = -ERESTARTSYS;
374 		goto unlock_disconnect_exit;
375 	}
376 
377 	/* allow opening only once */
378 	if (dev->open_count) {
379 		retval = -EBUSY;
380 		goto unlock_exit;
381 	}
382 	dev->open_count = 1;
383 
384 	/* reset the tower */
385 	result = usb_control_msg (dev->udev,
386 				  usb_rcvctrlpipe(dev->udev, 0),
387 				  LEGO_USB_TOWER_REQUEST_RESET,
388 				  USB_TYPE_VENDOR | USB_DIR_IN | USB_RECIP_DEVICE,
389 				  0,
390 				  0,
391 				  &reset_reply,
392 				  sizeof(reset_reply),
393 				  1000);
394 	if (result < 0) {
395 		err("LEGO USB Tower reset control request failed");
396 		retval = result;
397 		goto unlock_exit;
398 	}
399 
400 	/* initialize in direction */
401 	dev->read_buffer_length = 0;
402 	dev->read_packet_length = 0;
403 	usb_fill_int_urb (dev->interrupt_in_urb,
404 			  dev->udev,
405 			  usb_rcvintpipe(dev->udev, dev->interrupt_in_endpoint->bEndpointAddress),
406 			  dev->interrupt_in_buffer,
407 			  le16_to_cpu(dev->interrupt_in_endpoint->wMaxPacketSize),
408 			  tower_interrupt_in_callback,
409 			  dev,
410 			  dev->interrupt_in_interval);
411 
412 	dev->interrupt_in_running = 1;
413 	dev->interrupt_in_done = 0;
414 	mb();
415 
416 	retval = usb_submit_urb (dev->interrupt_in_urb, GFP_KERNEL);
417 	if (retval) {
418 		err("Couldn't submit interrupt_in_urb %d", retval);
419 		dev->interrupt_in_running = 0;
420 		dev->open_count = 0;
421 		goto unlock_exit;
422 	}
423 
424 	/* save device in the file's private structure */
425 	file->private_data = dev;
426 
427 unlock_exit:
428 	up (&dev->sem);
429 
430 unlock_disconnect_exit:
431 	up (&disconnect_sem);
432 
433 	dbg(2, "%s: leave, return value %d ", __FUNCTION__, retval);
434 
435 	return retval;
436 }
437 
438 /**
439  *	tower_release
440  */
441 static int tower_release (struct inode *inode, struct file *file)
442 {
443 	struct lego_usb_tower *dev;
444 	int retval = 0;
445 
446 	dbg(2, "%s: enter", __FUNCTION__);
447 
448 	dev = (struct lego_usb_tower *)file->private_data;
449 
450 	if (dev == NULL) {
451 		dbg(1, "%s: object is NULL", __FUNCTION__);
452 		retval = -ENODEV;
453 		goto exit;
454 	}
455 
456 	if (down_interruptible (&dev->sem)) {
457 	        retval = -ERESTARTSYS;
458 		goto exit;
459 	}
460 
461 	if (dev->open_count != 1) {
462 		dbg(1, "%s: device not opened exactly once", __FUNCTION__);
463 		retval = -ENODEV;
464 		goto unlock_exit;
465 	}
466 	if (dev->udev == NULL) {
467 		/* the device was unplugged before the file was released */
468 		up (&dev->sem);	/* unlock here as tower_delete frees dev */
469 		tower_delete (dev);
470 		goto exit;
471 	}
472 
473 	/* wait until write transfer is finished */
474 	if (dev->interrupt_out_busy) {
475 		wait_event_interruptible_timeout (dev->write_wait, !dev->interrupt_out_busy, 2 * HZ);
476 	}
477 	tower_abort_transfers (dev);
478 	dev->open_count = 0;
479 
480 unlock_exit:
481 	up (&dev->sem);
482 
483 exit:
484 	dbg(2, "%s: leave, return value %d", __FUNCTION__, retval);
485 	return retval;
486 }
487 
488 
489 /**
490  *	tower_abort_transfers
491  *      aborts transfers and frees associated data structures
492  */
493 static void tower_abort_transfers (struct lego_usb_tower *dev)
494 {
495 	dbg(2, "%s: enter", __FUNCTION__);
496 
497 	if (dev == NULL) {
498 		dbg(1, "%s: dev is null", __FUNCTION__);
499 		goto exit;
500 	}
501 
502 	/* shutdown transfer */
503 	if (dev->interrupt_in_running) {
504 		dev->interrupt_in_running = 0;
505 		mb();
506 		if (dev->interrupt_in_urb != NULL && dev->udev) {
507 			usb_kill_urb (dev->interrupt_in_urb);
508 		}
509 	}
510 	if (dev->interrupt_out_busy) {
511 		if (dev->interrupt_out_urb != NULL && dev->udev) {
512 			usb_kill_urb (dev->interrupt_out_urb);
513 		}
514 	}
515 
516 exit:
517 	dbg(2, "%s: leave", __FUNCTION__);
518 }
519 
520 
521 /**
522  *	tower_check_for_read_packet
523  *
524  *      To get correct semantics for signals and non-blocking I/O
525  *      with packetizing we pretend not to see any data in the read buffer
526  *      until it has been there unchanged for at least
527  *      dev->packet_timeout_jiffies, or until the buffer is full.
528  */
529 static void tower_check_for_read_packet (struct lego_usb_tower *dev)
530 {
531 	spin_lock_irq (&dev->read_buffer_lock);
532 	if (!packet_timeout
533 	    || time_after(jiffies, dev->read_last_arrival + dev->packet_timeout_jiffies)
534 	    || dev->read_buffer_length == read_buffer_size) {
535 		dev->read_packet_length = dev->read_buffer_length;
536 	}
537 	dev->interrupt_in_done = 0;
538 	spin_unlock_irq (&dev->read_buffer_lock);
539 }
540 
541 
542 /**
543  *	tower_poll
544  */
545 static unsigned int tower_poll (struct file *file, poll_table *wait)
546 {
547 	struct lego_usb_tower *dev;
548 	unsigned int mask = 0;
549 
550 	dbg(2, "%s: enter", __FUNCTION__);
551 
552 	dev = file->private_data;
553 
554 	poll_wait(file, &dev->read_wait, wait);
555 	poll_wait(file, &dev->write_wait, wait);
556 
557 	tower_check_for_read_packet(dev);
558 	if (dev->read_packet_length > 0) {
559 		mask |= POLLIN | POLLRDNORM;
560 	}
561 	if (!dev->interrupt_out_busy) {
562 		mask |= POLLOUT | POLLWRNORM;
563 	}
564 
565 	dbg(2, "%s: leave, mask = %d", __FUNCTION__, mask);
566 
567 	return mask;
568 }
569 
570 
571 /**
572  *	tower_llseek
573  */
574 static loff_t tower_llseek (struct file *file, loff_t off, int whence)
575 {
576 	return -ESPIPE;		/* unseekable */
577 }
578 
579 
580 /**
581  *	tower_read
582  */
583 static ssize_t tower_read (struct file *file, char __user *buffer, size_t count, loff_t *ppos)
584 {
585 	struct lego_usb_tower *dev;
586 	size_t bytes_to_read;
587 	int i;
588 	int retval = 0;
589 	unsigned long timeout = 0;
590 
591 	dbg(2, "%s: enter, count = %Zd", __FUNCTION__, count);
592 
593 	dev = (struct lego_usb_tower *)file->private_data;
594 
595 	/* lock this object */
596 	if (down_interruptible (&dev->sem)) {
597 		retval = -ERESTARTSYS;
598 		goto exit;
599 	}
600 
601 	/* verify that the device wasn't unplugged */
602 	if (dev->udev == NULL) {
603 		retval = -ENODEV;
604 		err("No device or device unplugged %d", retval);
605 		goto unlock_exit;
606 	}
607 
608 	/* verify that we actually have some data to read */
609 	if (count == 0) {
610 		dbg(1, "%s: read request of 0 bytes", __FUNCTION__);
611 		goto unlock_exit;
612 	}
613 
614 	if (read_timeout) {
615 		timeout = jiffies + read_timeout * HZ / 1000;
616 	}
617 
618 	/* wait for data */
619 	tower_check_for_read_packet (dev);
620 	while (dev->read_packet_length == 0) {
621 		if (file->f_flags & O_NONBLOCK) {
622 			retval = -EAGAIN;
623 			goto unlock_exit;
624 		}
625 		retval = wait_event_interruptible_timeout(dev->read_wait, dev->interrupt_in_done, dev->packet_timeout_jiffies);
626 		if (retval < 0) {
627 			goto unlock_exit;
628 		}
629 
630 		/* reset read timeout during read or write activity */
631 		if (read_timeout
632 		    && (dev->read_buffer_length || dev->interrupt_out_busy)) {
633 			timeout = jiffies + read_timeout * HZ / 1000;
634 		}
635 		/* check for read timeout */
636 		if (read_timeout && time_after (jiffies, timeout)) {
637 			retval = -ETIMEDOUT;
638 			goto unlock_exit;
639 		}
640 		tower_check_for_read_packet (dev);
641 	}
642 
643 	/* copy the data from read_buffer into userspace */
644 	bytes_to_read = min(count, dev->read_packet_length);
645 
646 	if (copy_to_user (buffer, dev->read_buffer, bytes_to_read)) {
647 		retval = -EFAULT;
648 		goto unlock_exit;
649 	}
650 
651 	spin_lock_irq (&dev->read_buffer_lock);
652 	dev->read_buffer_length -= bytes_to_read;
653 	dev->read_packet_length -= bytes_to_read;
654 	for (i=0; i<dev->read_buffer_length; i++) {
655 		dev->read_buffer[i] = dev->read_buffer[i+bytes_to_read];
656 	}
657 	spin_unlock_irq (&dev->read_buffer_lock);
658 
659 	retval = bytes_to_read;
660 
661 unlock_exit:
662 	/* unlock the device */
663 	up (&dev->sem);
664 
665 exit:
666 	dbg(2, "%s: leave, return value %d", __FUNCTION__, retval);
667 	return retval;
668 }
669 
670 
671 /**
672  *	tower_write
673  */
674 static ssize_t tower_write (struct file *file, const char __user *buffer, size_t count, loff_t *ppos)
675 {
676 	struct lego_usb_tower *dev;
677 	size_t bytes_to_write;
678 	int retval = 0;
679 
680 	dbg(2, "%s: enter, count = %Zd", __FUNCTION__, count);
681 
682 	dev = (struct lego_usb_tower *)file->private_data;
683 
684 	/* lock this object */
685 	if (down_interruptible (&dev->sem)) {
686 		retval = -ERESTARTSYS;
687 		goto exit;
688 	}
689 
690 	/* verify that the device wasn't unplugged */
691 	if (dev->udev == NULL) {
692 		retval = -ENODEV;
693 		err("No device or device unplugged %d", retval);
694 		goto unlock_exit;
695 	}
696 
697 	/* verify that we actually have some data to write */
698 	if (count == 0) {
699 		dbg(1, "%s: write request of 0 bytes", __FUNCTION__);
700 		goto unlock_exit;
701 	}
702 
703 	/* wait until previous transfer is finished */
704 	while (dev->interrupt_out_busy) {
705 		if (file->f_flags & O_NONBLOCK) {
706 			retval = -EAGAIN;
707 			goto unlock_exit;
708 		}
709 		retval = wait_event_interruptible (dev->write_wait, !dev->interrupt_out_busy);
710 		if (retval) {
711 			goto unlock_exit;
712 		}
713 	}
714 
715 	/* write the data into interrupt_out_buffer from userspace */
716 	bytes_to_write = min_t(int, count, write_buffer_size);
717 	dbg(4, "%s: count = %Zd, bytes_to_write = %Zd", __FUNCTION__, count, bytes_to_write);
718 
719 	if (copy_from_user (dev->interrupt_out_buffer, buffer, bytes_to_write)) {
720 		retval = -EFAULT;
721 		goto unlock_exit;
722 	}
723 
724 	/* send off the urb */
725 	usb_fill_int_urb(dev->interrupt_out_urb,
726 			 dev->udev,
727 			 usb_sndintpipe(dev->udev, dev->interrupt_out_endpoint->bEndpointAddress),
728 			 dev->interrupt_out_buffer,
729 			 bytes_to_write,
730 			 tower_interrupt_out_callback,
731 			 dev,
732 			 dev->interrupt_out_interval);
733 
734 	dev->interrupt_out_busy = 1;
735 	wmb();
736 
737 	retval = usb_submit_urb (dev->interrupt_out_urb, GFP_KERNEL);
738 	if (retval) {
739 		dev->interrupt_out_busy = 0;
740 		err("Couldn't submit interrupt_out_urb %d", retval);
741 		goto unlock_exit;
742 	}
743 	retval = bytes_to_write;
744 
745 unlock_exit:
746 	/* unlock the device */
747 	up (&dev->sem);
748 
749 exit:
750 	dbg(2, "%s: leave, return value %d", __FUNCTION__, retval);
751 
752 	return retval;
753 }
754 
755 
756 /**
757  *	tower_interrupt_in_callback
758  */
759 static void tower_interrupt_in_callback (struct urb *urb, struct pt_regs *regs)
760 {
761 	struct lego_usb_tower *dev = (struct lego_usb_tower *)urb->context;
762 	int retval;
763 
764 	dbg(4, "%s: enter, status %d", __FUNCTION__, urb->status);
765 
766 	lego_usb_tower_debug_data(5, __FUNCTION__, urb->actual_length, urb->transfer_buffer);
767 
768 	if (urb->status) {
769 		if (urb->status == -ENOENT ||
770 		    urb->status == -ECONNRESET ||
771 		    urb->status == -ESHUTDOWN) {
772 			goto exit;
773 		} else {
774 			dbg(1, "%s: nonzero status received: %d", __FUNCTION__, urb->status);
775 			goto resubmit; /* maybe we can recover */
776 		}
777 	}
778 
779 	if (urb->actual_length > 0) {
780 		spin_lock (&dev->read_buffer_lock);
781 		if (dev->read_buffer_length + urb->actual_length < read_buffer_size) {
782 			memcpy (dev->read_buffer + dev->read_buffer_length,
783 				dev->interrupt_in_buffer,
784 				urb->actual_length);
785 			dev->read_buffer_length += urb->actual_length;
786 			dev->read_last_arrival = jiffies;
787 			dbg(3, "%s: received %d bytes", __FUNCTION__, urb->actual_length);
788 		} else {
789 			printk(KERN_WARNING "%s: read_buffer overflow, %d bytes dropped", __FUNCTION__, urb->actual_length);
790 		}
791 		spin_unlock (&dev->read_buffer_lock);
792 	}
793 
794 resubmit:
795 	/* resubmit if we're still running */
796 	if (dev->interrupt_in_running && dev->udev) {
797 		retval = usb_submit_urb (dev->interrupt_in_urb, GFP_ATOMIC);
798 		if (retval) {
799 			err("%s: usb_submit_urb failed (%d)", __FUNCTION__, retval);
800 		}
801 	}
802 
803 exit:
804 	dev->interrupt_in_done = 1;
805 	wake_up_interruptible (&dev->read_wait);
806 
807 	lego_usb_tower_debug_data(5, __FUNCTION__, urb->actual_length, urb->transfer_buffer);
808 	dbg(4, "%s: leave, status %d", __FUNCTION__, urb->status);
809 }
810 
811 
812 /**
813  *	tower_interrupt_out_callback
814  */
815 static void tower_interrupt_out_callback (struct urb *urb, struct pt_regs *regs)
816 {
817 	struct lego_usb_tower *dev = (struct lego_usb_tower *)urb->context;
818 
819 	dbg(4, "%s: enter, status %d", __FUNCTION__, urb->status);
820 	lego_usb_tower_debug_data(5, __FUNCTION__, urb->actual_length, urb->transfer_buffer);
821 
822 	/* sync/async unlink faults aren't errors */
823 	if (urb->status && !(urb->status == -ENOENT ||
824 			     urb->status == -ECONNRESET ||
825 			     urb->status == -ESHUTDOWN)) {
826 		dbg(1, "%s - nonzero write bulk status received: %d",
827 		    __FUNCTION__, urb->status);
828 	}
829 
830 	dev->interrupt_out_busy = 0;
831 	wake_up_interruptible(&dev->write_wait);
832 
833 	lego_usb_tower_debug_data(5, __FUNCTION__, urb->actual_length, urb->transfer_buffer);
834 	dbg(4, "%s: leave, status %d", __FUNCTION__, urb->status);
835 }
836 
837 
838 /**
839  *	tower_probe
840  *
841  *	Called by the usb core when a new device is connected that it thinks
842  *	this driver might be interested in.
843  */
844 static int tower_probe (struct usb_interface *interface, const struct usb_device_id *id)
845 {
846 	struct usb_device *udev = interface_to_usbdev(interface);
847 	struct lego_usb_tower *dev = NULL;
848 	struct usb_host_interface *iface_desc;
849 	struct usb_endpoint_descriptor* endpoint;
850 	struct tower_get_version_reply get_version_reply;
851 	int i;
852 	int retval = -ENOMEM;
853 	int result;
854 
855 	dbg(2, "%s: enter", __FUNCTION__);
856 
857 	if (udev == NULL) {
858 		info ("udev is NULL.");
859 	}
860 
861 	/* allocate memory for our device state and initialize it */
862 
863 	dev = kmalloc (sizeof(struct lego_usb_tower), GFP_KERNEL);
864 
865 	if (dev == NULL) {
866 		err ("Out of memory");
867 		goto exit;
868 	}
869 
870 	init_MUTEX (&dev->sem);
871 
872 	dev->udev = udev;
873 	dev->open_count = 0;
874 
875 	dev->read_buffer = NULL;
876 	dev->read_buffer_length = 0;
877 	dev->read_packet_length = 0;
878 	spin_lock_init (&dev->read_buffer_lock);
879 	dev->packet_timeout_jiffies = packet_timeout * HZ / 1000;
880 	dev->read_last_arrival = jiffies;
881 
882 	init_waitqueue_head (&dev->read_wait);
883 	init_waitqueue_head (&dev->write_wait);
884 
885 	dev->interrupt_in_buffer = NULL;
886 	dev->interrupt_in_endpoint = NULL;
887 	dev->interrupt_in_urb = NULL;
888 	dev->interrupt_in_running = 0;
889 	dev->interrupt_in_done = 0;
890 
891 	dev->interrupt_out_buffer = NULL;
892 	dev->interrupt_out_endpoint = NULL;
893 	dev->interrupt_out_urb = NULL;
894 	dev->interrupt_out_busy = 0;
895 
896 	iface_desc = interface->cur_altsetting;
897 
898 	/* set up the endpoint information */
899 	for (i = 0; i < iface_desc->desc.bNumEndpoints; ++i) {
900 		endpoint = &iface_desc->endpoint[i].desc;
901 
902 		if (((endpoint->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_IN) &&
903 		    ((endpoint->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == USB_ENDPOINT_XFER_INT)) {
904 			dev->interrupt_in_endpoint = endpoint;
905 		}
906 
907 		if (((endpoint->bEndpointAddress & USB_ENDPOINT_DIR_MASK) == USB_DIR_OUT) &&
908 		    ((endpoint->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == USB_ENDPOINT_XFER_INT)) {
909 			dev->interrupt_out_endpoint = endpoint;
910 		}
911 	}
912 	if(dev->interrupt_in_endpoint == NULL) {
913 		err("interrupt in endpoint not found");
914 		goto error;
915 	}
916 	if (dev->interrupt_out_endpoint == NULL) {
917 		err("interrupt out endpoint not found");
918 		goto error;
919 	}
920 
921 	dev->read_buffer = kmalloc (read_buffer_size, GFP_KERNEL);
922 	if (!dev->read_buffer) {
923 		err("Couldn't allocate read_buffer");
924 		goto error;
925 	}
926 	dev->interrupt_in_buffer = kmalloc (le16_to_cpu(dev->interrupt_in_endpoint->wMaxPacketSize), GFP_KERNEL);
927 	if (!dev->interrupt_in_buffer) {
928 		err("Couldn't allocate interrupt_in_buffer");
929 		goto error;
930 	}
931 	dev->interrupt_in_urb = usb_alloc_urb(0, GFP_KERNEL);
932 	if (!dev->interrupt_in_urb) {
933 		err("Couldn't allocate interrupt_in_urb");
934 		goto error;
935 	}
936 	dev->interrupt_out_buffer = kmalloc (write_buffer_size, GFP_KERNEL);
937 	if (!dev->interrupt_out_buffer) {
938 		err("Couldn't allocate interrupt_out_buffer");
939 		goto error;
940 	}
941 	dev->interrupt_out_urb = usb_alloc_urb(0, GFP_KERNEL);
942 	if (!dev->interrupt_out_urb) {
943 		err("Couldn't allocate interrupt_out_urb");
944 		goto error;
945 	}
946 	dev->interrupt_in_interval = interrupt_in_interval ? interrupt_in_interval : dev->interrupt_in_endpoint->bInterval;
947 	dev->interrupt_out_interval = interrupt_out_interval ? interrupt_out_interval : dev->interrupt_out_endpoint->bInterval;
948 
949 	/* we can register the device now, as it is ready */
950 	usb_set_intfdata (interface, dev);
951 
952 	retval = usb_register_dev (interface, &tower_class);
953 
954 	if (retval) {
955 		/* something prevented us from registering this driver */
956 		err ("Not able to get a minor for this device.");
957 		usb_set_intfdata (interface, NULL);
958 		goto error;
959 	}
960 	dev->minor = interface->minor;
961 
962 	/* let the user know what node this device is now attached to */
963 	info ("LEGO USB Tower #%d now attached to major %d minor %d", (dev->minor - LEGO_USB_TOWER_MINOR_BASE), USB_MAJOR, dev->minor);
964 
965 	/* get the firmware version and log it */
966 	result = usb_control_msg (udev,
967 				  usb_rcvctrlpipe(udev, 0),
968 				  LEGO_USB_TOWER_REQUEST_GET_VERSION,
969 				  USB_TYPE_VENDOR | USB_DIR_IN | USB_RECIP_DEVICE,
970 				  0,
971 				  0,
972 				  &get_version_reply,
973 				  sizeof(get_version_reply),
974 				  1000);
975 	if (result < 0) {
976 		err("LEGO USB Tower get version control request failed");
977 		retval = result;
978 		goto error;
979 	}
980 	info("LEGO USB Tower firmware version is %d.%d build %d",
981 	     get_version_reply.major,
982 	     get_version_reply.minor,
983 	     le16_to_cpu(get_version_reply.build_no));
984 
985 
986 exit:
987 	dbg(2, "%s: leave, return value 0x%.8lx (dev)", __FUNCTION__, (long) dev);
988 
989 	return retval;
990 
991 error:
992 	tower_delete(dev);
993 	return retval;
994 }
995 
996 
997 /**
998  *	tower_disconnect
999  *
1000  *	Called by the usb core when the device is removed from the system.
1001  */
1002 static void tower_disconnect (struct usb_interface *interface)
1003 {
1004 	struct lego_usb_tower *dev;
1005 	int minor;
1006 
1007 	dbg(2, "%s: enter", __FUNCTION__);
1008 
1009 	down (&disconnect_sem);
1010 
1011 	dev = usb_get_intfdata (interface);
1012 	usb_set_intfdata (interface, NULL);
1013 
1014 
1015 	down (&dev->sem);
1016 
1017 	minor = dev->minor;
1018 
1019 	/* give back our minor */
1020 	usb_deregister_dev (interface, &tower_class);
1021 
1022 	/* if the device is not opened, then we clean up right now */
1023 	if (!dev->open_count) {
1024 		up (&dev->sem);
1025 		tower_delete (dev);
1026 	} else {
1027 		dev->udev = NULL;
1028 		up (&dev->sem);
1029 	}
1030 
1031 	up (&disconnect_sem);
1032 
1033 	info("LEGO USB Tower #%d now disconnected", (minor - LEGO_USB_TOWER_MINOR_BASE));
1034 
1035 	dbg(2, "%s: leave", __FUNCTION__);
1036 }
1037 
1038 
1039 
1040 /**
1041  *	lego_usb_tower_init
1042  */
1043 static int __init lego_usb_tower_init(void)
1044 {
1045 	int result;
1046 	int retval = 0;
1047 
1048 	dbg(2, "%s: enter", __FUNCTION__);
1049 
1050 	/* register this driver with the USB subsystem */
1051 	result = usb_register(&tower_driver);
1052 	if (result < 0) {
1053 		err("usb_register failed for the "__FILE__" driver. Error number %d", result);
1054 		retval = -1;
1055 		goto exit;
1056 	}
1057 
1058 	info(DRIVER_DESC " " DRIVER_VERSION);
1059 
1060 exit:
1061 	dbg(2, "%s: leave, return value %d", __FUNCTION__, retval);
1062 
1063 	return retval;
1064 }
1065 
1066 
1067 /**
1068  *	lego_usb_tower_exit
1069  */
1070 static void __exit lego_usb_tower_exit(void)
1071 {
1072 	dbg(2, "%s: enter", __FUNCTION__);
1073 
1074 	/* deregister this driver with the USB subsystem */
1075 	usb_deregister (&tower_driver);
1076 
1077 	dbg(2, "%s: leave", __FUNCTION__);
1078 }
1079 
1080 module_init (lego_usb_tower_init);
1081 module_exit (lego_usb_tower_exit);
1082 
1083 MODULE_AUTHOR(DRIVER_AUTHOR);
1084 MODULE_DESCRIPTION(DRIVER_DESC);
1085 #ifdef MODULE_LICENSE
1086 MODULE_LICENSE("GPL");
1087 #endif
1088