Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  1 /* 
  2    HCI USB driver for Linux Bluetooth protocol stack (BlueZ)
  3    Copyright (C) 2000-2001 Qualcomm Incorporated
  4    Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
  5 
  6    Copyright (C) 2003 Maxim Krasnyansky <maxk@qualcomm.com>
  7 
  8    This program is free software; you can redistribute it and/or modify
  9    it under the terms of the GNU General Public License version 2 as
 10    published by the Free Software Foundation;
 11 
 12    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 13    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 14    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
 15    IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
 16    CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES 
 17    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 
 18    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 
 19    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 20 
 21    ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS, 
 22    COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS 
 23    SOFTWARE IS DISCLAIMED.
 24 */
 25 
 26 /*
 27  * Bluetooth HCI USB driver.
 28  * Based on original USB Bluetooth driver for Linux kernel
 29  *    Copyright (c) 2000 Greg Kroah-Hartman        <greg@kroah.com>
 30  *    Copyright (c) 2000 Mark Douglas Corner       <mcorner@umich.edu>
 31  *
 32  */
 33 
 34 #include <linux/config.h>
 35 #include <linux/module.h>
 36 
 37 #include <linux/kernel.h>
 38 #include <linux/init.h>
 39 #include <linux/sched.h>
 40 #include <linux/unistd.h>
 41 #include <linux/types.h>
 42 #include <linux/interrupt.h>
 43 #include <linux/moduleparam.h>
 44 
 45 #include <linux/slab.h>
 46 #include <linux/errno.h>
 47 #include <linux/string.h>
 48 #include <linux/skbuff.h>
 49 
 50 #include <linux/usb.h>
 51 
 52 #include <net/bluetooth/bluetooth.h>
 53 #include <net/bluetooth/hci_core.h>
 54 
 55 #include "hci_usb.h"
 56 
 57 #ifndef CONFIG_BT_HCIUSB_DEBUG
 58 #undef  BT_DBG
 59 #define BT_DBG(D...)
 60 #undef  BT_DMP
 61 #define BT_DMP(D...)
 62 #endif
 63 
 64 #ifndef CONFIG_BT_HCIUSB_ZERO_PACKET
 65 #undef  URB_ZERO_PACKET
 66 #define URB_ZERO_PACKET 0
 67 #endif
 68 
 69 static int ignore = 0;
 70 static int reset = 0;
 71 
 72 #ifdef CONFIG_BT_HCIUSB_SCO
 73 static int isoc = 2;
 74 #endif
 75 
 76 #define VERSION "2.8"
 77 
 78 static struct usb_driver hci_usb_driver; 
 79 
 80 static struct usb_device_id bluetooth_ids[] = {
 81         /* Generic Bluetooth USB device */
 82         { USB_DEVICE_INFO(HCI_DEV_CLASS, HCI_DEV_SUBCLASS, HCI_DEV_PROTOCOL) },
 83 
 84         /* AVM BlueFRITZ! USB v2.0 */
 85         { USB_DEVICE(0x057c, 0x3800) },
 86 
 87         /* Bluetooth Ultraport Module from IBM */
 88         { USB_DEVICE(0x04bf, 0x030a) },
 89 
 90         /* ALPS Modules with non-standard id */
 91         { USB_DEVICE(0x044e, 0x3001) },
 92         { USB_DEVICE(0x044e, 0x3002) },
 93 
 94         /* Ericsson with non-standard id */
 95         { USB_DEVICE(0x0bdb, 0x1002) },
 96 
 97         { }     /* Terminating entry */
 98 };
 99 
100 MODULE_DEVICE_TABLE (usb, bluetooth_ids);
101 
102 static struct usb_device_id blacklist_ids[] = {
103         /* Broadcom BCM2033 without firmware */
104         { USB_DEVICE(0x0a5c, 0x2033), .driver_info = HCI_IGNORE },
105 
106         /* Broadcom BCM2035 */
107         { USB_DEVICE(0x0a5c, 0x200a), .driver_info = HCI_RESET | HCI_BROKEN_ISOC },
108         { USB_DEVICE(0x0a5c, 0x2009), .driver_info = HCI_BCM92035 },
109 
110         /* Microsoft Wireless Transceiver for Bluetooth 2.0 */
111         { USB_DEVICE(0x045e, 0x009c), .driver_info = HCI_RESET },
112 
113         /* ISSC Bluetooth Adapter v3.1 */
114         { USB_DEVICE(0x1131, 0x1001), .driver_info = HCI_RESET },
115 
116         /* RTX Telecom based adapter with buggy SCO support */
117         { USB_DEVICE(0x0400, 0x0807), .driver_info = HCI_BROKEN_ISOC },
118 
119         /* Digianswer devices */
120         { USB_DEVICE(0x08fd, 0x0001), .driver_info = HCI_DIGIANSWER },
121         { USB_DEVICE(0x08fd, 0x0002), .driver_info = HCI_IGNORE },
122 
123         /* CSR BlueCore Bluetooth Sniffer */
124         { USB_DEVICE(0x0a12, 0x0002), .driver_info = HCI_SNIFFER },
125 
126         { }     /* Terminating entry */
127 };
128 
129 static struct _urb *_urb_alloc(int isoc, int gfp)
130 {
131         struct _urb *_urb = kmalloc(sizeof(struct _urb) +
132                                 sizeof(struct usb_iso_packet_descriptor) * isoc, gfp);
133         if (_urb) {
134                 memset(_urb, 0, sizeof(*_urb));
135                 usb_init_urb(&_urb->urb);
136         }
137         return _urb;
138 }
139 
140 static struct _urb *_urb_dequeue(struct _urb_queue *q)
141 {
142         struct _urb *_urb = NULL;
143         unsigned long flags;
144         spin_lock_irqsave(&q->lock, flags);
145         {
146                 struct list_head *head = &q->head;
147                 struct list_head *next = head->next;
148                 if (next != head) {
149                         _urb = list_entry(next, struct _urb, list);
150                         list_del(next); _urb->queue = NULL;
151                 }
152         }
153         spin_unlock_irqrestore(&q->lock, flags);
154         return _urb;
155 }
156 
157 static void hci_usb_rx_complete(struct urb *urb, struct pt_regs *regs);
158 static void hci_usb_tx_complete(struct urb *urb, struct pt_regs *regs);
159 
160 #define __pending_tx(husb, type)  (&husb->pending_tx[type-1])
161 #define __pending_q(husb, type)   (&husb->pending_q[type-1])
162 #define __completed_q(husb, type) (&husb->completed_q[type-1])
163 #define __transmit_q(husb, type)  (&husb->transmit_q[type-1])
164 #define __reassembly(husb, type)  (husb->reassembly[type-1])
165 
166 static inline struct _urb *__get_completed(struct hci_usb *husb, int type)
167 {
168         return _urb_dequeue(__completed_q(husb, type)); 
169 }
170 
171 #ifdef CONFIG_BT_HCIUSB_SCO
172 static void __fill_isoc_desc(struct urb *urb, int len, int mtu)
173 {
174         int offset = 0, i;
175 
176         BT_DBG("len %d mtu %d", len, mtu);
177 
178         for (i=0; i < HCI_MAX_ISOC_FRAMES && len >= mtu; i++, offset += mtu, len -= mtu) {
179                 urb->iso_frame_desc[i].offset = offset;
180                 urb->iso_frame_desc[i].length = mtu;
181                 BT_DBG("desc %d offset %d len %d", i, offset, mtu);
182         }
183         if (len && i < HCI_MAX_ISOC_FRAMES) {
184                 urb->iso_frame_desc[i].offset = offset;
185                 urb->iso_frame_desc[i].length = len;
186                 BT_DBG("desc %d offset %d len %d", i, offset, len);
187                 i++;
188         }
189         urb->number_of_packets = i;
190 }
191 #endif
192 
193 static int hci_usb_intr_rx_submit(struct hci_usb *husb)
194 {
195         struct _urb *_urb;
196         struct urb *urb;
197         int err, pipe, interval, size;
198         void *buf;
199 
200         BT_DBG("%s", husb->hdev->name);
201 
202         size = le16_to_cpu(husb->intr_in_ep->desc.wMaxPacketSize);
203 
204         buf = kmalloc(size, GFP_ATOMIC);
205         if (!buf)
206                 return -ENOMEM;
207 
208         _urb = _urb_alloc(0, GFP_ATOMIC);
209         if (!_urb) {
210                 kfree(buf);
211                 return -ENOMEM;
212         }
213         _urb->type = HCI_EVENT_PKT;
214         _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
215 
216         urb = &_urb->urb;
217         pipe     = usb_rcvintpipe(husb->udev, husb->intr_in_ep->desc.bEndpointAddress);
218         interval = husb->intr_in_ep->desc.bInterval;
219         usb_fill_int_urb(urb, husb->udev, pipe, buf, size, hci_usb_rx_complete, husb, interval);
220         
221         err = usb_submit_urb(urb, GFP_ATOMIC);
222         if (err) {
223                 BT_ERR("%s intr rx submit failed urb %p err %d",
224                                 husb->hdev->name, urb, err);
225                 _urb_unlink(_urb);
226                 _urb_free(_urb);
227                 kfree(buf);
228         }
229         return err;
230 }
231 
232 static int hci_usb_bulk_rx_submit(struct hci_usb *husb)
233 {
234         struct _urb *_urb;
235         struct urb *urb;
236         int err, pipe, size = HCI_MAX_FRAME_SIZE;
237         void *buf;
238 
239         buf = kmalloc(size, GFP_ATOMIC);
240         if (!buf)
241                 return -ENOMEM;
242 
243         _urb = _urb_alloc(0, GFP_ATOMIC);
244         if (!_urb) {
245                 kfree(buf);
246                 return -ENOMEM;
247         }
248         _urb->type = HCI_ACLDATA_PKT;
249         _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
250 
251         urb  = &_urb->urb;
252         pipe = usb_rcvbulkpipe(husb->udev, husb->bulk_in_ep->desc.bEndpointAddress);
253         usb_fill_bulk_urb(urb, husb->udev, pipe, buf, size, hci_usb_rx_complete, husb);
254         urb->transfer_flags = 0;
255 
256         BT_DBG("%s urb %p", husb->hdev->name, urb);
257 
258         err = usb_submit_urb(urb, GFP_ATOMIC);
259         if (err) {
260                 BT_ERR("%s bulk rx submit failed urb %p err %d",
261                                 husb->hdev->name, urb, err);
262                 _urb_unlink(_urb);
263                 _urb_free(_urb);
264                 kfree(buf);
265         }
266         return err;
267 }
268 
269 #ifdef CONFIG_BT_HCIUSB_SCO
270 static int hci_usb_isoc_rx_submit(struct hci_usb *husb)
271 {
272         struct _urb *_urb;
273         struct urb *urb;
274         int err, mtu, size;
275         void *buf;
276 
277         mtu  = le16_to_cpu(husb->isoc_in_ep->desc.wMaxPacketSize);
278         size = mtu * HCI_MAX_ISOC_FRAMES;
279 
280         buf = kmalloc(size, GFP_ATOMIC);
281         if (!buf)
282                 return -ENOMEM;
283 
284         _urb = _urb_alloc(HCI_MAX_ISOC_FRAMES, GFP_ATOMIC);
285         if (!_urb) {
286                 kfree(buf);
287                 return -ENOMEM;
288         }
289         _urb->type = HCI_SCODATA_PKT;
290         _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
291 
292         urb = &_urb->urb;
293 
294         urb->context  = husb;
295         urb->dev      = husb->udev;
296         urb->pipe     = usb_rcvisocpipe(husb->udev, husb->isoc_in_ep->desc.bEndpointAddress);
297         urb->complete = hci_usb_rx_complete;
298 
299         urb->interval = husb->isoc_in_ep->desc.bInterval;
300 
301         urb->transfer_buffer_length = size;
302         urb->transfer_buffer = buf;
303         urb->transfer_flags  = URB_ISO_ASAP;
304 
305         __fill_isoc_desc(urb, size, mtu);
306 
307         BT_DBG("%s urb %p", husb->hdev->name, urb);
308 
309         err = usb_submit_urb(urb, GFP_ATOMIC);
310         if (err) {
311                 BT_ERR("%s isoc rx submit failed urb %p err %d",
312                                 husb->hdev->name, urb, err);
313                 _urb_unlink(_urb);
314                 _urb_free(_urb);
315                 kfree(buf);
316         }
317         return err;
318 }
319 #endif
320 
321 /* Initialize device */
322 static int hci_usb_open(struct hci_dev *hdev)
323 {
324         struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
325         int i, err;
326         unsigned long flags;
327 
328         BT_DBG("%s", hdev->name);
329 
330         if (test_and_set_bit(HCI_RUNNING, &hdev->flags))
331                 return 0;
332 
333         write_lock_irqsave(&husb->completion_lock, flags);
334 
335         err = hci_usb_intr_rx_submit(husb);
336         if (!err) {
337                 for (i = 0; i < HCI_MAX_BULK_RX; i++)
338                         hci_usb_bulk_rx_submit(husb);
339 
340 #ifdef CONFIG_BT_HCIUSB_SCO
341                 if (husb->isoc_iface)
342                         for (i = 0; i < HCI_MAX_ISOC_RX; i++)
343                                 hci_usb_isoc_rx_submit(husb);
344 #endif
345         } else {
346                 clear_bit(HCI_RUNNING, &hdev->flags);
347         }
348 
349         write_unlock_irqrestore(&husb->completion_lock, flags);
350         return err;
351 }
352 
353 /* Reset device */
354 static int hci_usb_flush(struct hci_dev *hdev)
355 {
356         struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
357         int i;
358 
359         BT_DBG("%s", hdev->name);
360 
361         for (i = 0; i < 4; i++)
362                 skb_queue_purge(&husb->transmit_q[i]);
363         return 0;
364 }
365 
366 static void hci_usb_unlink_urbs(struct hci_usb *husb)
367 {
368         int i;
369 
370         BT_DBG("%s", husb->hdev->name);
371 
372         for (i = 0; i < 4; i++) {
373                 struct _urb *_urb;
374                 struct urb *urb;
375 
376                 /* Kill pending requests */
377                 while ((_urb = _urb_dequeue(&husb->pending_q[i]))) {
378                         urb = &_urb->urb;
379                         BT_DBG("%s unlinking _urb %p type %d urb %p", 
380                                         husb->hdev->name, _urb, _urb->type, urb);
381                         usb_kill_urb(urb);
382                         _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
383                 }
384 
385                 /* Release completed requests */
386                 while ((_urb = _urb_dequeue(&husb->completed_q[i]))) {
387                         urb = &_urb->urb;
388                         BT_DBG("%s freeing _urb %p type %d urb %p",
389                                         husb->hdev->name, _urb, _urb->type, urb);
390                         if (urb->setup_packet)
391                                 kfree(urb->setup_packet);
392                         if (urb->transfer_buffer)
393                                 kfree(urb->transfer_buffer);
394                         _urb_free(_urb);
395                 }
396 
397                 /* Release reassembly buffers */
398                 if (husb->reassembly[i]) {
399                         kfree_skb(husb->reassembly[i]);
400                         husb->reassembly[i] = NULL;
401                 }
402         }
403 }
404 
405 /* Close device */
406 static int hci_usb_close(struct hci_dev *hdev)
407 {
408         struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
409         unsigned long flags;
410 
411         if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags))
412                 return 0;
413 
414         BT_DBG("%s", hdev->name);
415 
416         /* Synchronize with completion handlers */
417         write_lock_irqsave(&husb->completion_lock, flags);
418         write_unlock_irqrestore(&husb->completion_lock, flags);
419 
420         hci_usb_unlink_urbs(husb);
421         hci_usb_flush(hdev);
422         return 0;
423 }
424 
425 static int __tx_submit(struct hci_usb *husb, struct _urb *_urb)
426 {
427         struct urb *urb = &_urb->urb;
428         int err;
429 
430         BT_DBG("%s urb %p type %d", husb->hdev->name, urb, _urb->type);
431 
432         _urb_queue_tail(__pending_q(husb, _urb->type), _urb);
433         err = usb_submit_urb(urb, GFP_ATOMIC);
434         if (err) {
435                 BT_ERR("%s tx submit failed urb %p type %d err %d",
436                                 husb->hdev->name, urb, _urb->type, err);
437                 _urb_unlink(_urb);
438                 _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
439         } else
440                 atomic_inc(__pending_tx(husb, _urb->type));
441 
442         return err;
443 }
444 
445 static inline int hci_usb_send_ctrl(struct hci_usb *husb, struct sk_buff *skb)
446 {
447         struct _urb *_urb = __get_completed(husb, skb->pkt_type);
448         struct usb_ctrlrequest *dr;
449         struct urb *urb;
450 
451         if (!_urb) {
452                 _urb = _urb_alloc(0, GFP_ATOMIC);
453                 if (!_urb)
454                         return -ENOMEM;
455                 _urb->type = skb->pkt_type;
456 
457                 dr = kmalloc(sizeof(*dr), GFP_ATOMIC);
458                 if (!dr) {
459                         _urb_free(_urb);
460                         return -ENOMEM;
461                 }
462         } else
463                 dr = (void *) _urb->urb.setup_packet;
464 
465         dr->bRequestType = husb->ctrl_req;
466         dr->bRequest = 0;
467         dr->wIndex   = 0;
468         dr->wValue   = 0;
469         dr->wLength  = __cpu_to_le16(skb->len);
470 
471         urb = &_urb->urb;
472         usb_fill_control_urb(urb, husb->udev, usb_sndctrlpipe(husb->udev, 0),
473                 (void *) dr, skb->data, skb->len, hci_usb_tx_complete, husb);
474 
475         BT_DBG("%s skb %p len %d", husb->hdev->name, skb, skb->len);
476         
477         _urb->priv = skb;
478         return __tx_submit(husb, _urb);
479 }
480 
481 static inline int hci_usb_send_bulk(struct hci_usb *husb, struct sk_buff *skb)
482 {
483         struct _urb *_urb = __get_completed(husb, skb->pkt_type);
484         struct urb *urb;
485         int pipe;
486 
487         if (!_urb) {
488                 _urb = _urb_alloc(0, GFP_ATOMIC);
489                 if (!_urb)
490                         return -ENOMEM;
491                 _urb->type = skb->pkt_type;
492         }
493 
494         urb  = &_urb->urb;
495         pipe = usb_sndbulkpipe(husb->udev, husb->bulk_out_ep->desc.bEndpointAddress);
496         usb_fill_bulk_urb(urb, husb->udev, pipe, skb->data, skb->len, 
497                         hci_usb_tx_complete, husb);
498         urb->transfer_flags = URB_ZERO_PACKET;
499 
500         BT_DBG("%s skb %p len %d", husb->hdev->name, skb, skb->len);
501 
502         _urb->priv = skb;
503         return __tx_submit(husb, _urb);
504 }
505 
506 #ifdef CONFIG_BT_HCIUSB_SCO
507 static inline int hci_usb_send_isoc(struct hci_usb *husb, struct sk_buff *skb)
508 {
509         struct _urb *_urb = __get_completed(husb, skb->pkt_type);
510         struct urb *urb;
511 
512         if (!_urb) {
513                 _urb = _urb_alloc(HCI_MAX_ISOC_FRAMES, GFP_ATOMIC);
514                 if (!_urb)
515                         return -ENOMEM;
516                 _urb->type = skb->pkt_type;
517         }
518 
519         BT_DBG("%s skb %p len %d", husb->hdev->name, skb, skb->len);
520 
521         urb = &_urb->urb;
522 
523         urb->context  = husb;
524         urb->dev      = husb->udev;
525         urb->pipe     = usb_sndisocpipe(husb->udev, husb->isoc_out_ep->desc.bEndpointAddress);
526         urb->complete = hci_usb_tx_complete;
527         urb->transfer_flags = URB_ISO_ASAP;
528 
529         urb->interval = husb->isoc_out_ep->desc.bInterval;
530 
531         urb->transfer_buffer = skb->data;
532         urb->transfer_buffer_length = skb->len;
533 
534         __fill_isoc_desc(urb, skb->len, le16_to_cpu(husb->isoc_out_ep->desc.wMaxPacketSize));
535 
536         _urb->priv = skb;
537         return __tx_submit(husb, _urb);
538 }
539 #endif
540 
541 static void hci_usb_tx_process(struct hci_usb *husb)
542 {
543         struct sk_buff_head *q;
544         struct sk_buff *skb;
545 
546         BT_DBG("%s", husb->hdev->name);
547 
548         do {
549                 clear_bit(HCI_USB_TX_WAKEUP, &husb->state);
550 
551                 /* Process command queue */
552                 q = __transmit_q(husb, HCI_COMMAND_PKT);
553                 if (!atomic_read(__pending_tx(husb, HCI_COMMAND_PKT)) &&
554                                 (skb = skb_dequeue(q))) {
555                         if (hci_usb_send_ctrl(husb, skb) < 0)
556                                 skb_queue_head(q, skb);
557                 }
558 
559 #ifdef CONFIG_BT_HCIUSB_SCO
560                 /* Process SCO queue */
561                 q = __transmit_q(husb, HCI_SCODATA_PKT);
562                 if (atomic_read(__pending_tx(husb, HCI_SCODATA_PKT)) < HCI_MAX_ISOC_TX &&
563                                 (skb = skb_dequeue(q))) {
564                         if (hci_usb_send_isoc(husb, skb) < 0)
565                                 skb_queue_head(q, skb);
566                 }
567 #endif
568 
569                 /* Process ACL queue */
570                 q = __transmit_q(husb, HCI_ACLDATA_PKT);
571                 while (atomic_read(__pending_tx(husb, HCI_ACLDATA_PKT)) < HCI_MAX_BULK_TX &&
572                                 (skb = skb_dequeue(q))) {
573                         if (hci_usb_send_bulk(husb, skb) < 0) {
574                                 skb_queue_head(q, skb);
575                                 break;
576                         }
577                 }
578         } while(test_bit(HCI_USB_TX_WAKEUP, &husb->state));
579 }
580 
581 static inline void hci_usb_tx_wakeup(struct hci_usb *husb)
582 {
583         /* Serialize TX queue processing to avoid data reordering */
584         if (!test_and_set_bit(HCI_USB_TX_PROCESS, &husb->state)) {
585                 hci_usb_tx_process(husb);
586                 clear_bit(HCI_USB_TX_PROCESS, &husb->state);
587         } else
588                 set_bit(HCI_USB_TX_WAKEUP, &husb->state);
589 }
590 
591 /* Send frames from HCI layer */
592 static int hci_usb_send_frame(struct sk_buff *skb)
593 {
594         struct hci_dev *hdev = (struct hci_dev *) skb->dev;
595         struct hci_usb *husb;
596 
597         if (!hdev) {
598                 BT_ERR("frame for uknown device (hdev=NULL)");
599                 return -ENODEV;
600         }
601 
602         if (!test_bit(HCI_RUNNING, &hdev->flags))
603                 return -EBUSY;
604 
605         BT_DBG("%s type %d len %d", hdev->name, skb->pkt_type, skb->len);
606 
607         husb = (struct hci_usb *) hdev->driver_data;
608 
609         switch (skb->pkt_type) {
610         case HCI_COMMAND_PKT:
611                 hdev->stat.cmd_tx++;
612                 break;
613 
614         case HCI_ACLDATA_PKT:
615                 hdev->stat.acl_tx++;
616                 break;
617 
618 #ifdef CONFIG_BT_HCIUSB_SCO
619         case HCI_SCODATA_PKT:
620                 hdev->stat.sco_tx++;
621                 break;
622 #endif
623 
624         default:
625                 kfree_skb(skb);
626                 return 0;
627         }
628 
629         read_lock(&husb->completion_lock);
630 
631         skb_queue_tail(__transmit_q(husb, skb->pkt_type), skb);
632         hci_usb_tx_wakeup(husb);
633 
634         read_unlock(&husb->completion_lock);
635         return 0;
636 }
637 
638 static inline int __recv_frame(struct hci_usb *husb, int type, void *data, int count)
639 {
640         BT_DBG("%s type %d data %p count %d", husb->hdev->name, type, data, count);
641 
642         husb->hdev->stat.byte_rx += count;
643 
644         while (count) {
645                 struct sk_buff *skb = __reassembly(husb, type);
646                 struct { int expect; } *scb;
647                 int len = 0;
648         
649                 if (!skb) {
650                         /* Start of the frame */
651 
652                         switch (type) {
653                         case HCI_EVENT_PKT:
654                                 if (count >= HCI_EVENT_HDR_SIZE) {
655                                         struct hci_event_hdr *h = data;
656                                         len = HCI_EVENT_HDR_SIZE + h->plen;
657                                 } else
658                                         return -EILSEQ;
659                                 break;
660 
661                         case HCI_ACLDATA_PKT:
662                                 if (count >= HCI_ACL_HDR_SIZE) {
663                                         struct hci_acl_hdr *h = data;
664                                         len = HCI_ACL_HDR_SIZE + __le16_to_cpu(h->dlen);
665                                 } else
666                                         return -EILSEQ;
667                                 break;
668 #ifdef CONFIG_BT_HCIUSB_SCO
669                         case HCI_SCODATA_PKT:
670                                 if (count >= HCI_SCO_HDR_SIZE) {
671                                         struct hci_sco_hdr *h = data;
672                                         len = HCI_SCO_HDR_SIZE + h->dlen;
673                                 } else
674                                         return -EILSEQ;
675                                 break;
676 #endif
677                         }
678                         BT_DBG("new packet len %d", len);
679 
680                         skb = bt_skb_alloc(len, GFP_ATOMIC);
681                         if (!skb) {
682                                 BT_ERR("%s no memory for the packet", husb->hdev->name);
683                                 return -ENOMEM;
684                         }
685                         skb->dev = (void *) husb->hdev;
686                         skb->pkt_type = type;
687         
688                         __reassembly(husb, type) = skb;
689 
690                         scb = (void *) skb->cb;
691                         scb->expect = len;
692                 } else {
693                         /* Continuation */
694                         scb = (void *) skb->cb;
695                         len = scb->expect;
696                 }
697 
698                 len = min(len, count);
699                 
700                 memcpy(skb_put(skb, len), data, len);
701 
702                 scb->expect -= len;
703                 if (!scb->expect) {
704                         /* Complete frame */
705                         __reassembly(husb, type) = NULL;
706                         hci_recv_frame(skb);
707                 }
708 
709                 count -= len; data += len;
710         }
711         return 0;
712 }
713 
714 static void hci_usb_rx_complete(struct urb *urb, struct pt_regs *regs)
715 {
716         struct _urb *_urb = container_of(urb, struct _urb, urb);
717         struct hci_usb *husb = (void *) urb->context;
718         struct hci_dev *hdev = husb->hdev;
719         int err, count = urb->actual_length;
720 
721         BT_DBG("%s urb %p type %d status %d count %d flags %x", hdev->name, urb,
722                         _urb->type, urb->status, count, urb->transfer_flags);
723 
724         read_lock(&husb->completion_lock);
725 
726         if (!test_bit(HCI_RUNNING, &hdev->flags))
727                 goto unlock;
728 
729         if (urb->status || !count)
730                 goto resubmit;
731 
732         if (_urb->type == HCI_SCODATA_PKT) {
733 #ifdef CONFIG_BT_HCIUSB_SCO
734                 int i;
735                 for (i=0; i < urb->number_of_packets; i++) {
736                         BT_DBG("desc %d status %d offset %d len %d", i,
737                                         urb->iso_frame_desc[i].status,
738                                         urb->iso_frame_desc[i].offset,
739                                         urb->iso_frame_desc[i].actual_length);
740         
741                         if (!urb->iso_frame_desc[i].status)
742                                 __recv_frame(husb, _urb->type, 
743                                         urb->transfer_buffer + urb->iso_frame_desc[i].offset,
744                                         urb->iso_frame_desc[i].actual_length);
745                 }
746 #else
747                 ;
748 #endif
749         } else {
750                 err = __recv_frame(husb, _urb->type, urb->transfer_buffer, count);
751                 if (err < 0) { 
752                         BT_ERR("%s corrupted packet: type %d count %d",
753                                         husb->hdev->name, _urb->type, count);
754                         hdev->stat.err_rx++;
755                 }
756         }
757 
758 resubmit:
759         urb->dev = husb->udev;
760         err = usb_submit_urb(urb, GFP_ATOMIC);
761         BT_DBG("%s urb %p type %d resubmit status %d", hdev->name, urb,
762                         _urb->type, err);
763 
764 unlock:
765         read_unlock(&husb->completion_lock);
766 }
767 
768 static void hci_usb_tx_complete(struct urb *urb, struct pt_regs *regs)
769 {
770         struct _urb *_urb = container_of(urb, struct _urb, urb);
771         struct hci_usb *husb = (void *) urb->context;
772         struct hci_dev *hdev = husb->hdev;
773 
774         BT_DBG("%s urb %p status %d flags %x", hdev->name, urb,
775                         urb->status, urb->transfer_flags);
776 
777         atomic_dec(__pending_tx(husb, _urb->type));
778 
779         urb->transfer_buffer = NULL;
780         kfree_skb((struct sk_buff *) _urb->priv);
781 
782         if (!test_bit(HCI_RUNNING, &hdev->flags))
783                 return;
784 
785         if (!urb->status)
786                 hdev->stat.byte_tx += urb->transfer_buffer_length;
787         else
788                 hdev->stat.err_tx++;
789 
790         read_lock(&husb->completion_lock);
791 
792         _urb_unlink(_urb);
793         _urb_queue_tail(__completed_q(husb, _urb->type), _urb);
794 
795         hci_usb_tx_wakeup(husb);
796 
797         read_unlock(&husb->completion_lock);
798 }
799 
800 static void hci_usb_destruct(struct hci_dev *hdev)
801 {
802         struct hci_usb *husb = (struct hci_usb *) hdev->driver_data;
803 
804         BT_DBG("%s", hdev->name);
805 
806         kfree(husb);
807 }
808 
809 static void hci_usb_notify(struct hci_dev *hdev, unsigned int evt)
810 {
811         BT_DBG("%s evt %d", hdev->name, evt);
812 }
813 
814 static int hci_usb_probe(struct usb_interface *intf, const struct usb_device_id *id)
815 {
816         struct usb_device *udev = interface_to_usbdev(intf);
817         struct usb_host_endpoint *bulk_out_ep = NULL;
818         struct usb_host_endpoint *bulk_in_ep = NULL;
819         struct usb_host_endpoint *intr_in_ep = NULL;
820         struct usb_host_endpoint  *ep;
821         struct usb_host_interface *uif;
822         struct usb_interface *isoc_iface;
823         struct hci_usb *husb;
824         struct hci_dev *hdev;
825         int i, e, size, isoc_ifnum, isoc_alts;
826 
827         BT_DBG("udev %p intf %p", udev, intf);
828 
829         if (!id->driver_info) {
830                 const struct usb_device_id *match;
831                 match = usb_match_id(intf, blacklist_ids);
832                 if (match)
833                         id = match;
834         }
835 
836         if (ignore || id->driver_info & HCI_IGNORE)
837                 return -ENODEV;
838 
839         if (intf->cur_altsetting->desc.bInterfaceNumber > 0)
840                 return -ENODEV;
841 
842         /* Find endpoints that we need */
843         uif = intf->cur_altsetting;
844         for (e = 0; e < uif->desc.bNumEndpoints; e++) {
845                 ep = &uif->endpoint[e];
846 
847                 switch (ep->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
848                 case USB_ENDPOINT_XFER_INT:
849                         if (ep->desc.bEndpointAddress & USB_DIR_IN)
850                                 intr_in_ep = ep;
851                         break;
852 
853                 case USB_ENDPOINT_XFER_BULK:
854                         if (ep->desc.bEndpointAddress & USB_DIR_IN)
855                                 bulk_in_ep  = ep;
856                         else
857                                 bulk_out_ep = ep;
858                         break;
859                 }
860         }
861 
862         if (!bulk_in_ep || !bulk_out_ep || !intr_in_ep) {
863                 BT_DBG("Bulk endpoints not found");
864                 goto done;
865         }
866 
867         if (!(husb = kmalloc(sizeof(struct hci_usb), GFP_KERNEL))) {
868                 BT_ERR("Can't allocate: control structure");
869                 goto done;
870         }
871 
872         memset(husb, 0, sizeof(struct hci_usb));
873 
874         husb->udev = udev;
875         husb->bulk_out_ep = bulk_out_ep;
876         husb->bulk_in_ep  = bulk_in_ep;
877         husb->intr_in_ep  = intr_in_ep;
878 
879         if (id->driver_info & HCI_DIGIANSWER)
880                 husb->ctrl_req = USB_TYPE_VENDOR;
881         else
882                 husb->ctrl_req = USB_TYPE_CLASS;
883 
884         /* Find isochronous endpoints that we can use */
885         size = 0; 
886         isoc_iface = NULL;
887         isoc_alts  = 0;
888         isoc_ifnum = 1;
889 
890 #ifdef CONFIG_BT_HCIUSB_SCO
891         if (isoc && !(id->driver_info & HCI_BROKEN_ISOC))
892                 isoc_iface = usb_ifnum_to_if(udev, isoc_ifnum);
893 
894         if (isoc_iface) {
895                 int a;
896                 struct usb_host_endpoint *isoc_out_ep = NULL;
897                 struct usb_host_endpoint *isoc_in_ep = NULL;
898 
899                 for (a = 0; a < isoc_iface->num_altsetting; a++) {
900                         uif = &isoc_iface->altsetting[a];
901                         for (e = 0; e < uif->desc.bNumEndpoints; e++) {
902                                 ep = &uif->endpoint[e];
903 
904                                 switch (ep->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) {
905                                 case USB_ENDPOINT_XFER_ISOC:
906                                         if (le16_to_cpu(ep->desc.wMaxPacketSize) < size ||
907                                                         uif->desc.bAlternateSetting != isoc)
908                                                 break;
909                                         size = le16_to_cpu(ep->desc.wMaxPacketSize);
910 
911                                         isoc_alts = uif->desc.bAlternateSetting;
912 
913                                         if (ep->desc.bEndpointAddress & USB_DIR_IN)
914                                                 isoc_in_ep  = ep;
915                                         else
916                                                 isoc_out_ep = ep;
917                                         break;
918                                 }
919                         }
920                 }
921 
922                 if (!isoc_in_ep || !isoc_out_ep)
923                         BT_DBG("Isoc endpoints not found");
924                 else {
925                         BT_DBG("isoc ifnum %d alts %d", isoc_ifnum, isoc_alts);
926                         if (usb_driver_claim_interface(&hci_usb_driver, isoc_iface, husb) != 0)
927                                 BT_ERR("Can't claim isoc interface");
928                         else if (usb_set_interface(udev, isoc_ifnum, isoc_alts)) {
929                                 BT_ERR("Can't set isoc interface settings");
930                                 husb->isoc_iface = isoc_iface;
931                                 usb_driver_release_interface(&hci_usb_driver, isoc_iface);
932                                 husb->isoc_iface = NULL;
933                         } else {
934                                 husb->isoc_iface  = isoc_iface;
935                                 husb->isoc_in_ep  = isoc_in_ep;
936                                 husb->isoc_out_ep = isoc_out_ep;
937                         }
938                 }
939         }
940 #endif
941 
942         rwlock_init(&husb->completion_lock);
943 
944         for (i = 0; i < 4; i++) {
945                 skb_queue_head_init(&husb->transmit_q[i]);
946                 _urb_queue_init(&husb->pending_q[i]);
947                 _urb_queue_init(&husb->completed_q[i]);
948         }
949 
950         /* Initialize and register HCI device */
951         hdev = hci_alloc_dev();
952         if (!hdev) {
953                 BT_ERR("Can't allocate HCI device");
954                 goto probe_error;
955         }
956 
957         husb->hdev = hdev;
958 
959         hdev->type = HCI_USB;
960         hdev->driver_data = husb;
961         SET_HCIDEV_DEV(hdev, &intf->dev);
962 
963         hdev->open     = hci_usb_open;
964         hdev->close    = hci_usb_close;
965         hdev->flush    = hci_usb_flush;
966         hdev->send     = hci_usb_send_frame;
967         hdev->destruct = hci_usb_destruct;
968         hdev->notify   = hci_usb_notify;
969 
970         hdev->owner = THIS_MODULE;
971 
972         if (reset || id->driver_info & HCI_RESET)
973                 set_bit(HCI_QUIRK_RESET_ON_INIT, &hdev->quirks);
974 
975         if (id->driver_info & HCI_SNIFFER) {
976                 if (le16_to_cpu(udev->descriptor.bcdDevice) > 0x997)
977                         set_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks);
978         }
979 
980         if (id->driver_info & HCI_BCM92035) {
981                 unsigned char cmd[] = { 0x3b, 0xfc, 0x01, 0x00 };
982                 struct sk_buff *skb;
983 
984                 skb = bt_skb_alloc(sizeof(cmd), GFP_KERNEL);
985                 if (skb) {
986                         memcpy(skb_put(skb, sizeof(cmd)), cmd, sizeof(cmd));
987                         skb_queue_tail(&hdev->driver_init, skb);
988                 }
989         }
990 
991         if (hci_register_dev(hdev) < 0) {
992                 BT_ERR("Can't register HCI device");
993                 hci_free_dev(hdev);
994                 goto probe_error;
995         }
996 
997         usb_set_intfdata(intf, husb);
998         return 0;
999 
1000 probe_error:
1001         if (husb->isoc_iface)
1002                 usb_driver_release_interface(&hci_usb_driver, husb->isoc_iface);
1003         kfree(husb);
1004 
1005 done:
1006         return -EIO;
1007 }
1008 
1009 static void hci_usb_disconnect(struct usb_interface *intf)
1010 {
1011         struct hci_usb *husb = usb_get_intfdata(intf);
1012         struct hci_dev *hdev;
1013 
1014         if (!husb || intf == husb->isoc_iface)
1015                 return;
1016 
1017         usb_set_intfdata(intf, NULL);
1018         hdev = husb->hdev;
1019 
1020         BT_DBG("%s", hdev->name);
1021 
1022         hci_usb_close(hdev);
1023 
1024         if (husb->isoc_iface)
1025                 usb_driver_release_interface(&hci_usb_driver, husb->isoc_iface);
1026 
1027         if (hci_unregister_dev(hdev) < 0)
1028                 BT_ERR("Can't unregister HCI device %s", hdev->name);
1029 
1030         hci_free_dev(hdev);
1031 }
1032 
1033 static struct usb_driver hci_usb_driver = {
1034         .owner          = THIS_MODULE,
1035         .name           = "hci_usb",
1036         .probe          = hci_usb_probe,
1037         .disconnect     = hci_usb_disconnect,
1038         .id_table       = bluetooth_ids,
1039 };
1040 
1041 static int __init hci_usb_init(void)
1042 {
1043         int err;
1044 
1045         BT_INFO("HCI USB driver ver %s", VERSION);
1046 
1047         if ((err = usb_register(&hci_usb_driver)) < 0)
1048                 BT_ERR("Failed to register HCI USB driver");
1049 
1050         return err;
1051 }
1052 
1053 static void __exit hci_usb_exit(void)
1054 {
1055         usb_deregister(&hci_usb_driver);
1056 }
1057 
1058 module_init(hci_usb_init);
1059 module_exit(hci_usb_exit);
1060 
1061 module_param(ignore, bool, 0644);
1062 MODULE_PARM_DESC(ignore, "Ignore devices from the matching table");
1063 
1064 module_param(reset, bool, 0644);
1065 MODULE_PARM_DESC(reset, "Send HCI reset command on initialization");
1066 
1067 #ifdef CONFIG_BT_HCIUSB_SCO
1068 module_param(isoc, int, 0644);
1069 MODULE_PARM_DESC(isoc, "Set isochronous transfers for SCO over HCI support");
1070 #endif
1071 
1072 MODULE_AUTHOR("Maxim Krasnyansky <maxk@qualcomm.com>, Marcel Holtmann <marcel@holtmann.org>");
1073 MODULE_DESCRIPTION("Bluetooth HCI USB driver ver " VERSION);
1074 MODULE_VERSION(VERSION);
1075 MODULE_LICENSE("GPL");
1076 
  This page was automatically generated by the LXR engine.