Thread (17 messages) flat view 17 messages, 4 authors, 2021-11-19
STALE1718d REVIEWED: 2 (0M)

2 review trailers.

[PATCH v3 09/13] Bluetooth: Handle MSFT avdtp open event

From: Kiran K <hidden>
Date: 2021-11-15 06:44:16
Subsystem: bluetooth subsystem, the rest · Maintainers: Marcel Holtmann, Luiz Augusto von Dentz, Linus Torvalds

Controller responds with CCE event for MSFT avdtp open
command. On success MSFT avdtp open event contains
avdtp handle which needs to sent in start/suspend/close
avdtp commands.

Signed-off-by: Kiran K <redacted>
Reviewed-by: Chethan T N <redacted>
Reviewed-by: Srivatsa Ravishankar <redacted>
---
 include/net/bluetooth/hci.h |  7 +++++
 net/bluetooth/hci_event.c   | 53 +++++++++++++++++++++++++++++++++++++
 2 files changed, 60 insertions(+)
diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h
index a7dad0125c10..dc863d055056 100644
--- a/include/net/bluetooth/hci.h
+++ b/include/net/bluetooth/hci.h
@@ -2025,6 +2025,13 @@ struct msft_cp_avdtp_open {
 	__le16	omtu;
 } __packed;
 
+struct msft_rp_avdtp_open {
+	__u8	status;
+	__u8	sub_opcode;
+	__le16	avdtp_handle;
+	__u8	audio_intf_param_cnt;
+} __packed;
+
 /* ---- HCI Events ---- */
 #define HCI_EV_INQUIRY_COMPLETE		0x01
 
diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
index d4b75a6cfeee..b7ef4e8dae6c 100644
--- a/net/bluetooth/hci_event.c
+++ b/net/bluetooth/hci_event.c
@@ -1445,6 +1445,55 @@ static void hci_cc_le_set_ext_scan_param(struct hci_dev *hdev,
 	hci_dev_unlock(hdev);
 }
 
+static void hci_cc_msft_avdtp_open(struct hci_dev *hdev, struct sk_buff *skb)
+{
+	struct msft_rp_avdtp_open *rp;
+	struct msft_cp_avdtp_open *sent;
+	struct hci_conn *hconn;
+
+	if (skb->len < sizeof(*rp))
+		return;
+
+	rp = (void *)skb->data;
+
+	sent = hci_sent_cmd_data(hdev, HCI_MSFT_AVDTP_CMD);
+
+	hconn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(sent->handle));
+
+	if (!hconn)
+		return;
+
+	/* wake up the task waiting on avdtp handle */
+}
+
+static void hci_cc_msft_avdtp_cmd(struct hci_dev *hdev, struct sk_buff *skb)
+{
+	void *sent;
+	__u8 status;
+
+	if (skb->len < 2)
+		return;
+
+	status = skb->data[0];
+
+	bt_dev_dbg(hdev, "status 0x%2.2x", status);
+
+	sent = hci_sent_cmd_data(hdev, HCI_MSFT_AVDTP_CMD);
+	if (!sent)
+		return;
+
+	switch (skb->data[1]) {
+	case HCI_MSFT_AVDTP_OPEN:
+		hci_cc_msft_avdtp_open(hdev, skb);
+		break;
+
+	default:
+		bt_dev_err(hdev, "Invalid MSFT sub opcode 0x%2.2x",
+			   skb->data[1]);
+		break;
+	}
+}
+
 static bool has_pending_adv_report(struct hci_dev *hdev)
 {
 	struct discovery_state *d = &hdev->discovery;
@@ -3812,6 +3861,10 @@ static void hci_cmd_complete_evt(struct hci_dev *hdev, struct sk_buff *skb,
 		hci_cc_le_read_transmit_power(hdev, skb);
 		break;
 
+	case HCI_MSFT_AVDTP_CMD:
+		hci_cc_msft_avdtp_cmd(hdev, skb);
+		break;
+
 	default:
 		BT_DBG("%s opcode 0x%4.4x", hdev->name, *opcode);
 		break;
-- 
2.17.1
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help