[PATCH v2 4/5] Bluetooth: btusb: Make btusb_recv_{event,acl}() take struct hci_dev *

From: Zijun Hu

Date: Mon Jul 13 2026 - 08:02:00 EST


Vendor-specific files need to hand BT frames back to btusb after
filtering out non-BT frames, but these helpers take struct btusb_data *,
which is private to btusb.c:

int btusb_recv_event(struct btusb_data *data, struct sk_buff *skb)
int btusb_recv_acl(struct btusb_data *data, struct sk_buff *skb)

Change both to take struct hci_dev * so btusb and vendor files can share
them.

Signed-off-by: Zijun Hu <zijun.hu@xxxxxxxxxxxxxxxx>
---
drivers/bluetooth/btusb.c | 16 ++++++++++------
1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index 9c3a6d7d8f1e..f4f911c3de52 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -1253,14 +1253,16 @@ static inline void btusb_free_frags(struct btusb_data *data)
spin_unlock_irqrestore(&data->rxlock, flags);
}

-static int btusb_recv_event(struct btusb_data *data, struct sk_buff *skb)
+static int btusb_recv_event(struct hci_dev *hdev, struct sk_buff *skb)
{
+ struct btusb_data *data = hci_get_drvdata(hdev);
+
if (data->intr_interval) {
/* Trigger dequeue immediately if an event is received */
schedule_delayed_work(&data->rx_work, 0);
}

- return data->recv_event(data->hdev, skb);
+ return data->recv_event(hdev, skb);
}

static int btusb_recv_intr(struct btusb_data *data, void *buffer, int count)
@@ -1320,7 +1322,7 @@ static int btusb_recv_intr(struct btusb_data *data, void *buffer, int count)
}

/* Complete frame */
- btusb_recv_event(data, skb);
+ btusb_recv_event(data->hdev, skb);
skb = NULL;
}
}
@@ -1331,13 +1333,15 @@ static int btusb_recv_intr(struct btusb_data *data, void *buffer, int count)
return err;
}

-static int btusb_recv_acl(struct btusb_data *data, struct sk_buff *skb)
+static int btusb_recv_acl(struct hci_dev *hdev, struct sk_buff *skb)
{
+ struct btusb_data *data = hci_get_drvdata(hdev);
+
/* Only queue ACL packet if intr_interval is set as it means
* force_poll_sync has been enabled.
*/
if (!data->intr_interval)
- return data->recv_acl(data->hdev, skb);
+ return data->recv_acl(hdev, skb);

skb_queue_tail(&data->acl_q, skb);
schedule_delayed_work(&data->rx_work, data->intr_interval);
@@ -1392,7 +1396,7 @@ static int btusb_recv_bulk(struct btusb_data *data, void *buffer, int count)

if (!hci_skb_expect(skb)) {
/* Complete frame */
- btusb_recv_acl(data, skb);
+ btusb_recv_acl(data->hdev, skb);
skb = NULL;
}
}

--
2.34.1