Bluetooth: btusb: Add internal recv_event callback for event processing
authorMarcel Holtmann <marcel@holtmann.org>
Mon, 12 Jan 2015 21:51:10 +0000 (13:51 -0800)
committerJohan Hedberg <johan.hedberg@intel.com>
Wed, 14 Jan 2015 08:01:32 +0000 (10:01 +0200)
Some new upcoming drivers need to process HCI events or take extra
actions based on them before handing the event to the Bluetooth core
for processing. The new recv_event callback allows exactly such an
internal behavior.

Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
drivers/bluetooth/btusb.c

index 1ea6351..4a6495a 100644 (file)
@@ -309,6 +309,7 @@ struct btusb_data {
        int isoc_altsetting;
        int suspend_count;
 
+       int (*recv_event)(struct hci_dev *hdev, struct sk_buff *skb);
        int (*recv_bulk)(struct btusb_data *data, void *buffer, int count);
 };
 
@@ -374,7 +375,7 @@ static int btusb_recv_intr(struct btusb_data *data, void *buffer, int count)
 
                if (bt_cb(skb)->expect == 0) {
                        /* Complete frame */
-                       hci_recv_frame(data->hdev, skb);
+                       data->recv_event(data->hdev, skb);
                        skb = NULL;
                }
        }
@@ -2048,6 +2049,7 @@ static int btusb_probe(struct usb_interface *intf,
        init_usb_anchor(&data->isoc_anchor);
        spin_lock_init(&data->rxlock);
 
+       data->recv_event = hci_recv_frame;
        data->recv_bulk = btusb_recv_bulk;
 
        hdev = hci_alloc_dev();