Bluetooth: btusb: Split fragement receiption into separate functions
authorMarcel Holtmann <marcel@holtmann.org>
Tue, 16 Sep 2014 03:33:33 +0000 (05:33 +0200)
committerJohan Hedberg <johan.hedberg@intel.com>
Tue, 16 Sep 2014 03:41:17 +0000 (06:41 +0300)
The actual packet reassembly should be done inside the driver. To allow
this to happen cleanly in future patches, split the fragment reception
into its own functions.

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

index cf07fef65fd51adeb2925ed886bd02c2d488ea10..df585ab064fa015f7fa969006ed5ce07adbc44dd 100644 (file)
@@ -296,6 +296,21 @@ struct btusb_data {
        int suspend_count;
 };
 
+static int btusb_recv_intr(struct btusb_data *data, void *buffer, int count)
+{
+       return hci_recv_fragment(data->hdev, HCI_EVENT_PKT, buffer, count);
+}
+
+static int btusb_recv_bulk(struct btusb_data *data, void *buffer, int count)
+{
+       return hci_recv_fragment(data->hdev, HCI_ACLDATA_PKT, buffer, count);
+}
+
+static int btusb_recv_isoc(struct btusb_data *data, void *buffer, int count)
+{
+       return hci_recv_fragment(data->hdev, HCI_SCODATA_PKT, buffer, count);
+}
+
 static void btusb_intr_complete(struct urb *urb)
 {
        struct hci_dev *hdev = urb->context;
@@ -311,9 +326,8 @@ static void btusb_intr_complete(struct urb *urb)
        if (urb->status == 0) {
                hdev->stat.byte_rx += urb->actual_length;
 
-               if (hci_recv_fragment(hdev, HCI_EVENT_PKT,
-                                     urb->transfer_buffer,
-                                     urb->actual_length) < 0) {
+               if (btusb_recv_intr(data, urb->transfer_buffer,
+                                   urb->actual_length) < 0) {
                        BT_ERR("%s corrupted event packet", hdev->name);
                        hdev->stat.err_rx++;
                }
@@ -401,9 +415,8 @@ static void btusb_bulk_complete(struct urb *urb)
        if (urb->status == 0) {
                hdev->stat.byte_rx += urb->actual_length;
 
-               if (hci_recv_fragment(hdev, HCI_ACLDATA_PKT,
-                                     urb->transfer_buffer,
-                                     urb->actual_length) < 0) {
+               if (btusb_recv_bulk(data, urb->transfer_buffer,
+                                   urb->actual_length) < 0) {
                        BT_ERR("%s corrupted ACL packet", hdev->name);
                        hdev->stat.err_rx++;
                }
@@ -497,9 +510,8 @@ static void btusb_isoc_complete(struct urb *urb)
 
                        hdev->stat.byte_rx += length;
 
-                       if (hci_recv_fragment(hdev, HCI_SCODATA_PKT,
-                                             urb->transfer_buffer + offset,
-                                             length) < 0) {
+                       if (btusb_recv_isoc(data, urb->transfer_buffer + offset,
+                                           length) < 0) {
                                BT_ERR("%s corrupted SCO packet", hdev->name);
                                hdev->stat.err_rx++;
                        }