Thread (18 messages) 18 messages, 2 authors, 2021-11-24
STALE1770d REVIEWED: 2 (0M)

2 review trailers.

[PATCH v4 12/14] Bluetooth: Implment MSFT avdtp suspend command

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

In a2dp offload use case, to suspend streaming,
controller needs to sent MSFT avdtp suspend command. Allow BlueZ
daemon to send MSFT avdtp suspend command via setsockopt.

Signed-off-by: Kiran K <redacted>
Reviewed-by: Chethan T N <redacted>
Reviewed-by: Srivatsa Ravishankar <redacted>
---
 net/bluetooth/msft.c | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)
diff --git a/net/bluetooth/msft.c b/net/bluetooth/msft.c
index e3f7503070a6..b505b32289f8 100644
--- a/net/bluetooth/msft.c
+++ b/net/bluetooth/msft.c
@@ -133,6 +133,12 @@ struct msft_cp_avdtp_start {
 	__le16	avdtp_handle;
 } __packed;
 
+#define MSFT_OP_AVDTP_SUSPEND			0x0A
+struct msft_cp_avdtp_suspend {
+	u8	sub_opcode;
+	__le16	avdtp_handle;
+} __packed;
+
 static int __msft_add_monitor_pattern(struct hci_dev *hdev,
 				      struct adv_monitor *monitor);
 static int __msft_remove_monitor(struct hci_dev *hdev,
@@ -903,6 +909,19 @@ static int msft_avdtp_start(struct hci_dev *hdev, struct sock *sk)
 	return hci_send_cmd(hdev, MSFT_OP_AVDTP, sizeof(cmd), &cmd);
 }
 
+static int msft_avdtp_suspend(struct hci_dev *hdev, struct sock *sk)
+{
+	struct msft_cp_avdtp_suspend cmd;
+
+	if (!bt_sk(sk)->avdtp_handle)
+		return -EBADFD;
+
+	cmd.sub_opcode = MSFT_OP_AVDTP_SUSPEND;
+	cmd.avdtp_handle = cpu_to_le16(bt_sk(sk)->avdtp_handle);
+
+	return hci_send_cmd(hdev, MSFT_OP_AVDTP, sizeof(cmd), &cmd);
+}
+
 int msft_avdtp_cmd(struct hci_dev *hdev, struct l2cap_chan *chan,
 		   sockptr_t optval, int optlen,
 		   struct sock *sk)
@@ -941,6 +960,10 @@ int msft_avdtp_cmd(struct hci_dev *hdev, struct l2cap_chan *chan,
 		err = msft_avdtp_start(hdev, sk);
 		break;
 
+	case MSFT_OP_AVDTP_SUSPEND:
+		err = msft_avdtp_suspend(hdev, sk);
+		break;
+
 	default:
 		err = -EINVAL;
 		bt_dev_err(hdev, "Invalid MSFT avdtp sub opcode = 0x%2.2x",
@@ -999,6 +1022,7 @@ void msft_cc_avdtp(struct hci_dev *hdev, struct sk_buff *skb)
 		break;
 
 	case MSFT_OP_AVDTP_START:
+	case MSFT_OP_AVDTP_SUSPEND:
 		break;
 
 	default:
-- 
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