3  *  Digianswer Bluetooth USB driver
 
   5  *  Copyright (C) 2004-2007  Marcel Holtmann <marcel@holtmann.org>
 
   8  *  This program is free software; you can redistribute it and/or modify
 
   9  *  it under the terms of the GNU General Public License as published by
 
  10  *  the Free Software Foundation; either version 2 of the License, or
 
  11  *  (at your option) any later version.
 
  13  *  This program is distributed in the hope that it will be useful,
 
  14  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 
  15  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
  16  *  GNU General Public License for more details.
 
  18  *  You should have received a copy of the GNU General Public License
 
  19  *  along with this program; if not, write to the Free Software
 
  20  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
  24 #include <linux/kernel.h>
 
  25 #include <linux/module.h>
 
  26 #include <linux/init.h>
 
  27 #include <linux/slab.h>
 
  28 #include <linux/types.h>
 
  29 #include <linux/sched.h>
 
  30 #include <linux/errno.h>
 
  31 #include <linux/skbuff.h>
 
  33 #include <linux/usb.h>
 
  35 #include <net/bluetooth/bluetooth.h>
 
  36 #include <net/bluetooth/hci_core.h>
 
  38 #ifndef CONFIG_BT_HCIBPA10X_DEBUG
 
  45 static int ignore = 0;
 
  47 static struct usb_device_id bpa10x_table[] = {
 
  48         /* Tektronix BPA 100/105 (Digianswer) */
 
  49         { USB_DEVICE(0x08fd, 0x0002) },
 
  51         { }     /* Terminating entry */
 
  54 MODULE_DEVICE_TABLE(usb, bpa10x_table);
 
  58         struct usb_device *udev;
 
  60         struct usb_anchor tx_anchor;
 
  61         struct usb_anchor rx_anchor;
 
  63         struct sk_buff *rx_skb[2];
 
  66 #define HCI_VENDOR_HDR_SIZE 5
 
  68 struct hci_vendor_hdr {
 
  72 } __attribute__ ((packed));
 
  74 static int bpa10x_recv(struct hci_dev *hdev, int queue, void *buf, int count)
 
  76         struct bpa10x_data *data = hdev->driver_data;
 
  78         BT_DBG("%s queue %d buffer %p count %d", hdev->name,
 
  81         if (queue < 0 || queue > 1)
 
  84         hdev->stat.byte_rx += count;
 
  87                 struct sk_buff *skb = data->rx_skb[queue];
 
  88                 struct { __u8 type; int expect; } *scb;
 
  92                         /* Start of the frame */
 
  94                         type = *((__u8 *) buf);
 
  99                                 if (count >= HCI_EVENT_HDR_SIZE) {
 
 100                                         struct hci_event_hdr *h = buf;
 
 101                                         len = HCI_EVENT_HDR_SIZE + h->plen;
 
 106                         case HCI_ACLDATA_PKT:
 
 107                                 if (count >= HCI_ACL_HDR_SIZE) {
 
 108                                         struct hci_acl_hdr *h = buf;
 
 109                                         len = HCI_ACL_HDR_SIZE +
 
 110                                                         __le16_to_cpu(h->dlen);
 
 115                         case HCI_SCODATA_PKT:
 
 116                                 if (count >= HCI_SCO_HDR_SIZE) {
 
 117                                         struct hci_sco_hdr *h = buf;
 
 118                                         len = HCI_SCO_HDR_SIZE + h->dlen;
 
 124                                 if (count >= HCI_VENDOR_HDR_SIZE) {
 
 125                                         struct hci_vendor_hdr *h = buf;
 
 126                                         len = HCI_VENDOR_HDR_SIZE +
 
 127                                                         __le16_to_cpu(h->dlen);
 
 133                         skb = bt_skb_alloc(len, GFP_ATOMIC);
 
 135                                 BT_ERR("%s no memory for packet", hdev->name);
 
 139                         skb->dev = (void *) hdev;
 
 141                         data->rx_skb[queue] = skb;
 
 143                         scb = (void *) skb->cb;
 
 149                         scb = (void *) skb->cb;
 
 153                 len = min(len, count);
 
 155                 memcpy(skb_put(skb, len), buf, len);
 
 159                 if (scb->expect == 0) {
 
 162                         data->rx_skb[queue] = NULL;
 
 164                         bt_cb(skb)->pkt_type = scb->type;
 
 168                 count -= len; buf += len;
 
 174 static void bpa10x_tx_complete(struct urb *urb)
 
 176         struct sk_buff *skb = urb->context;
 
 177         struct hci_dev *hdev = (struct hci_dev *) skb->dev;
 
 179         BT_DBG("%s urb %p status %d count %d", hdev->name,
 
 180                                         urb, urb->status, urb->actual_length);
 
 182         if (!test_bit(HCI_RUNNING, &hdev->flags))
 
 186                 hdev->stat.byte_tx += urb->transfer_buffer_length;
 
 191         kfree(urb->setup_packet);
 
 196 static void bpa10x_rx_complete(struct urb *urb)
 
 198         struct hci_dev *hdev = urb->context;
 
 199         struct bpa10x_data *data = hdev->driver_data;
 
 202         BT_DBG("%s urb %p status %d count %d", hdev->name,
 
 203                                         urb, urb->status, urb->actual_length);
 
 205         if (!test_bit(HCI_RUNNING, &hdev->flags))
 
 208         if (urb->status == 0) {
 
 209                 if (bpa10x_recv(hdev, usb_pipebulk(urb->pipe),
 
 210                                                 urb->transfer_buffer,
 
 211                                                 urb->actual_length) < 0) {
 
 212                         BT_ERR("%s corrupted event packet", hdev->name);
 
 217         usb_anchor_urb(urb, &data->rx_anchor);
 
 219         err = usb_submit_urb(urb, GFP_ATOMIC);
 
 221                 BT_ERR("%s urb %p failed to resubmit (%d)",
 
 222                                                 hdev->name, urb, -err);
 
 223                 usb_unanchor_urb(urb);
 
 227 static inline int bpa10x_submit_intr_urb(struct hci_dev *hdev)
 
 229         struct bpa10x_data *data = hdev->driver_data;
 
 235         BT_DBG("%s", hdev->name);
 
 237         urb = usb_alloc_urb(0, GFP_KERNEL);
 
 241         buf = kmalloc(size, GFP_KERNEL);
 
 247         pipe = usb_rcvintpipe(data->udev, 0x81);
 
 249         usb_fill_int_urb(urb, data->udev, pipe, buf, size,
 
 250                                                 bpa10x_rx_complete, hdev, 1);
 
 252         urb->transfer_flags |= URB_FREE_BUFFER;
 
 254         usb_anchor_urb(urb, &data->rx_anchor);
 
 256         err = usb_submit_urb(urb, GFP_KERNEL);
 
 258                 BT_ERR("%s urb %p submission failed (%d)",
 
 259                                                 hdev->name, urb, -err);
 
 260                 usb_unanchor_urb(urb);
 
 269 static inline int bpa10x_submit_bulk_urb(struct hci_dev *hdev)
 
 271         struct bpa10x_data *data = hdev->driver_data;
 
 277         BT_DBG("%s", hdev->name);
 
 279         urb = usb_alloc_urb(0, GFP_KERNEL);
 
 283         buf = kmalloc(size, GFP_KERNEL);
 
 289         pipe = usb_rcvbulkpipe(data->udev, 0x82);
 
 291         usb_fill_bulk_urb(urb, data->udev, pipe,
 
 292                                         buf, size, bpa10x_rx_complete, hdev);
 
 294         urb->transfer_flags |= URB_FREE_BUFFER;
 
 296         usb_anchor_urb(urb, &data->rx_anchor);
 
 298         err = usb_submit_urb(urb, GFP_KERNEL);
 
 300                 BT_ERR("%s urb %p submission failed (%d)",
 
 301                                                 hdev->name, urb, -err);
 
 302                 usb_unanchor_urb(urb);
 
 311 static int bpa10x_open(struct hci_dev *hdev)
 
 313         struct bpa10x_data *data = hdev->driver_data;
 
 316         BT_DBG("%s", hdev->name);
 
 318         if (test_and_set_bit(HCI_RUNNING, &hdev->flags))
 
 321         err = bpa10x_submit_intr_urb(hdev);
 
 325         err = bpa10x_submit_bulk_urb(hdev);
 
 332         usb_kill_anchored_urbs(&data->rx_anchor);
 
 334         clear_bit(HCI_RUNNING, &hdev->flags);
 
 339 static int bpa10x_close(struct hci_dev *hdev)
 
 341         struct bpa10x_data *data = hdev->driver_data;
 
 343         BT_DBG("%s", hdev->name);
 
 345         if (!test_and_clear_bit(HCI_RUNNING, &hdev->flags))
 
 348         usb_kill_anchored_urbs(&data->rx_anchor);
 
 353 static int bpa10x_flush(struct hci_dev *hdev)
 
 355         struct bpa10x_data *data = hdev->driver_data;
 
 357         BT_DBG("%s", hdev->name);
 
 359         usb_kill_anchored_urbs(&data->tx_anchor);
 
 364 static int bpa10x_send_frame(struct sk_buff *skb)
 
 366         struct hci_dev *hdev = (struct hci_dev *) skb->dev;
 
 367         struct bpa10x_data *data = hdev->driver_data;
 
 368         struct usb_ctrlrequest *dr;
 
 373         BT_DBG("%s", hdev->name);
 
 375         if (!test_bit(HCI_RUNNING, &hdev->flags))
 
 378         urb = usb_alloc_urb(0, GFP_ATOMIC);
 
 382         /* Prepend skb with frame type */
 
 383         *skb_push(skb, 1) = bt_cb(skb)->pkt_type;
 
 385         switch (bt_cb(skb)->pkt_type) {
 
 386         case HCI_COMMAND_PKT:
 
 387                 dr = kmalloc(sizeof(*dr), GFP_ATOMIC);
 
 393                 dr->bRequestType = USB_TYPE_VENDOR;
 
 397                 dr->wLength      = __cpu_to_le16(skb->len);
 
 399                 pipe = usb_sndctrlpipe(data->udev, 0x00);
 
 401                 usb_fill_control_urb(urb, data->udev, pipe, (void *) dr,
 
 402                                 skb->data, skb->len, bpa10x_tx_complete, skb);
 
 407         case HCI_ACLDATA_PKT:
 
 408                 pipe = usb_sndbulkpipe(data->udev, 0x02);
 
 410                 usb_fill_bulk_urb(urb, data->udev, pipe,
 
 411                                 skb->data, skb->len, bpa10x_tx_complete, skb);
 
 416         case HCI_SCODATA_PKT:
 
 417                 pipe = usb_sndbulkpipe(data->udev, 0x02);
 
 419                 usb_fill_bulk_urb(urb, data->udev, pipe,
 
 420                                 skb->data, skb->len, bpa10x_tx_complete, skb);
 
 429         usb_anchor_urb(urb, &data->tx_anchor);
 
 431         err = usb_submit_urb(urb, GFP_ATOMIC);
 
 433                 BT_ERR("%s urb %p submission failed", hdev->name, urb);
 
 434                 kfree(urb->setup_packet);
 
 435                 usb_unanchor_urb(urb);
 
 443 static void bpa10x_destruct(struct hci_dev *hdev)
 
 445         struct bpa10x_data *data = hdev->driver_data;
 
 447         BT_DBG("%s", hdev->name);
 
 449         kfree(data->rx_skb[0]);
 
 450         kfree(data->rx_skb[1]);
 
 454 static int bpa10x_probe(struct usb_interface *intf, const struct usb_device_id *id)
 
 456         struct bpa10x_data *data;
 
 457         struct hci_dev *hdev;
 
 460         BT_DBG("intf %p id %p", intf, id);
 
 465         if (intf->cur_altsetting->desc.bInterfaceNumber != 0)
 
 468         data = kzalloc(sizeof(*data), GFP_KERNEL);
 
 472         data->udev = interface_to_usbdev(intf);
 
 474         init_usb_anchor(&data->tx_anchor);
 
 475         init_usb_anchor(&data->rx_anchor);
 
 477         hdev = hci_alloc_dev();
 
 483         hdev->type = HCI_USB;
 
 484         hdev->driver_data = data;
 
 488         SET_HCIDEV_DEV(hdev, &intf->dev);
 
 490         hdev->open     = bpa10x_open;
 
 491         hdev->close    = bpa10x_close;
 
 492         hdev->flush    = bpa10x_flush;
 
 493         hdev->send     = bpa10x_send_frame;
 
 494         hdev->destruct = bpa10x_destruct;
 
 496         hdev->owner = THIS_MODULE;
 
 498         err = hci_register_dev(hdev);
 
 505         usb_set_intfdata(intf, data);
 
 510 static void bpa10x_disconnect(struct usb_interface *intf)
 
 512         struct bpa10x_data *data = usb_get_intfdata(intf);
 
 514         BT_DBG("intf %p", intf);
 
 519         usb_set_intfdata(intf, NULL);
 
 521         hci_unregister_dev(data->hdev);
 
 523         hci_free_dev(data->hdev);
 
 526 static struct usb_driver bpa10x_driver = {
 
 528         .probe          = bpa10x_probe,
 
 529         .disconnect     = bpa10x_disconnect,
 
 530         .id_table       = bpa10x_table,
 
 533 static int __init bpa10x_init(void)
 
 535         BT_INFO("Digianswer Bluetooth USB driver ver %s", VERSION);
 
 537         return usb_register(&bpa10x_driver);
 
 540 static void __exit bpa10x_exit(void)
 
 542         usb_deregister(&bpa10x_driver);
 
 545 module_init(bpa10x_init);
 
 546 module_exit(bpa10x_exit);
 
 548 module_param(ignore, bool, 0644);
 
 549 MODULE_PARM_DESC(ignore, "Ignore devices from the matching table");
 
 551 MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
 
 552 MODULE_DESCRIPTION("Digianswer Bluetooth USB driver ver " VERSION);
 
 553 MODULE_VERSION(VERSION);
 
 554 MODULE_LICENSE("GPL");