Hi,

Here's a patch against 2.2.19-pre16 that updates the USB bluetooth driver to
the same level of 2.4.2.

(patch 1 of 7 in this bundle)

thanks,

greg k-h

p.s. It's "Greg Kroah-Hartman" (1 'n') :)



diff -Naur -X /home/greg/linux/dontdiff linux-2.2.19-pre16/drivers/usb/bluetooth.c 
linux-2.2.19-pre16-greg/drivers/usb/bluetooth.c
--- linux-2.2.19-pre16/drivers/usb/bluetooth.c  Sun Dec 10 16:49:43 2000
+++ linux-2.2.19-pre16-greg/drivers/usb/bluetooth.c     Mon Mar  5 11:33:18 2001
@@ -1,11 +1,15 @@
 /*
- * bluetooth.c   Version 0.6
+ * bluetooth.c   Version 0.7
  *
  * Copyright (c) 2000 Greg Kroah-Hartman       <[EMAIL PROTECTED]>
  * Copyright (c) 2000 Mark Douglas Corner      <[EMAIL PROTECTED]>
  *
  * USB Bluetooth driver, based on the Bluetooth Spec version 1.0B
  *
+ * (11/29/2000) Version 0.7 gkh
+ *     Fixed problem with overrunning the tty flip buffer.
+ *     Removed unneeded NULL pointer initialization.
+ *
  * (10/05/2000) Version 0.6 gkh
  *     Fixed bug with urb->dev not being set properly, now that the usb
  *     core needs it.
@@ -73,9 +77,9 @@
 #include <linux/init.h>
 #include <linux/malloc.h>
 #include <linux/fcntl.h>
+#include <linux/tty.h>
 #include <linux/tty_driver.h>
 #include <linux/tty_flip.h>
-#include <linux/tty.h>
 #include <linux/module.h>
 #include <linux/devfs_fs_kernel.h>
 
@@ -199,8 +203,7 @@
 static struct tty_struct *     bluetooth_tty[BLUETOOTH_TTY_MINORS];
 static struct termios *                bluetooth_termios[BLUETOOTH_TTY_MINORS];
 static struct termios *                bluetooth_termios_locked[BLUETOOTH_TTY_MINORS];
-static struct usb_bluetooth    *bluetooth_table[BLUETOOTH_TTY_MINORS] = {NULL, };
-
+static struct usb_bluetooth    *bluetooth_table[BLUETOOTH_TTY_MINORS];
 
 
 static inline int bluetooth_paranoia_check (struct usb_bluetooth *bluetooth, const 
char *function)
@@ -315,6 +318,11 @@
        tty->driver_data = bluetooth;
        bluetooth->tty = tty;
 
+       /* force low_latency on so that our tty_push actually forces the data through, 
+        * otherwise it is scheduled, and with high data rates (like with OHCI) data
+        * can get lost. */
+       bluetooth->tty->low_latency = 1;
+       
        bluetooth->active = 1;
 
        /* Reset the packet position counters */
@@ -774,9 +782,14 @@
                return;
        }
 
-       if (packet_size + EVENT_HDR_SIZE == bluetooth->int_packet_pos){
-               for (i = 0; i < bluetooth->int_packet_pos; ++i)
+       if (packet_size + EVENT_HDR_SIZE == bluetooth->int_packet_pos) {
+               for (i = 0; i < bluetooth->int_packet_pos; ++i) {
+                       /* if we insert more than TTY_FLIPBUF_SIZE characters, we drop 
+them */
+                       if (bluetooth->tty->flip.count >= TTY_FLIPBUF_SIZE) {
+                               tty_flip_buffer_push(bluetooth->tty);
+                       }
                        tty_insert_flip_char(bluetooth->tty, bluetooth->int_buffer[i], 
0);
+               }
                tty_flip_buffer_push(bluetooth->tty);
 
                bluetooth->int_packet_pos = 0;
@@ -888,8 +901,13 @@
        }
 
        if (packet_size + ACL_HDR_SIZE == bluetooth->bulk_packet_pos) {
-               for (i = 0; i < bluetooth->bulk_packet_pos; ++i)
+               for (i = 0; i < bluetooth->bulk_packet_pos; ++i) {
+                       /* if we insert more than TTY_FLIPBUF_SIZE characters, we drop 
+them. */
+                       if (bluetooth->tty->flip.count >= TTY_FLIPBUF_SIZE) {
+                               tty_flip_buffer_push(bluetooth->tty);
+                       }
                        tty_insert_flip_char(bluetooth->tty, 
bluetooth->bulk_buffer[i], 0);
+               }
                tty_flip_buffer_push(bluetooth->tty);
                bluetooth->bulk_packet_pos = 0;
        }       

_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
http://lists.sourceforge.net/lists/listinfo/linux-usb-devel

Reply via email to