Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1ffa4ad0 authored by Marcel Holtmann's avatar Marcel Holtmann Committed by Johan Hedberg
Browse files

Bluetooth: btusb: Split fragement receiption into separate functions



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: default avatarMarcel Holtmann <marcel@holtmann.org>
Signed-off-by: default avatarJohan Hedberg <johan.hedberg@intel.com>
parent 89e7533d
Loading
Loading
Loading
Loading
+21 −9
Original line number Diff line number Diff line
@@ -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,8 +326,7 @@ 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,
		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,8 +415,7 @@ 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,
		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,8 +510,7 @@ 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,
			if (btusb_recv_isoc(data, urb->transfer_buffer + offset,
					    length) < 0) {
				BT_ERR("%s corrupted SCO packet", hdev->name);
				hdev->stat.err_rx++;