linux-bluetooth.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Kiran K <kiran.k@intel.com>
To: linux-bluetooth@vger.kernel.org
Cc: ravishankar.srivatsa@intel.com, chethan.tumkur.narayan@intel.com,
	luiz.von.dentz@intel.com, Kiran K <kiran.k@intel.com>
Subject: [PATCH v3 11/13] Bluetooth: Implment MSFT avdtp start command
Date: Mon, 15 Nov 2021 12:19:12 +0530	[thread overview]
Message-ID: <20211115064914.2345-11-kiran.k@intel.com> (raw)
In-Reply-To: <20211115064914.2345-1-kiran.k@intel.com>

In a2dp offload use case, after sending L2CAP AVDTP
start command, controller needs to sent MSFT avdtp start
command to trigger to let know the controller to start
streaming audio data. Allow BlueZ daemon to send
MSFT avdtp start command via setsockopt.

Signed-off-by: Kiran K <kiran.k@intel.com>
Reviewed-by: Chethan T N <chethan.tumkur.narayan@intel.com>
Reviewed-by: Srivatsa Ravishankar <ravishankar.srivatsa@intel.com>
---
 include/net/bluetooth/bluetooth.h |  1 +
 include/net/bluetooth/hci.h       |  6 ++++++
 net/bluetooth/hci_codec.c         | 13 +++++++++++++
 net/bluetooth/hci_codec.h         |  1 +
 net/bluetooth/hci_event.c         |  3 +++
 net/bluetooth/l2cap_sock.c        | 18 ++++++++++++++++++
 6 files changed, 42 insertions(+)

diff --git a/include/net/bluetooth/bluetooth.h b/include/net/bluetooth/bluetooth.h
index 230fe8cbc1df..6e5d64b4dc2c 100644
--- a/include/net/bluetooth/bluetooth.h
+++ b/include/net/bluetooth/bluetooth.h
@@ -178,6 +178,7 @@ struct bt_codecs {
 #define BT_CODEC_MSBC		0x05
 
 #define BT_MSFT_OPEN		20
+#define BT_MSFT_START		21
 
 __printf(1, 2)
 void bt_info(const char *fmt, ...);
diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h
index 5dd5b63f4154..e4944e51067f 100644
--- a/include/net/bluetooth/hci.h
+++ b/include/net/bluetooth/hci.h
@@ -2033,6 +2033,12 @@ struct msft_rp_avdtp_open {
 	__u8	audio_intf_param_cnt;
 } __packed;
 
+#define HCI_MSFT_AVDTP_START			0x09
+struct msft_cp_avdtp_start {
+	u8	sub_opcode;
+	__le16	avdtp_handle;
+} __packed;
+
 /* ---- HCI Events ---- */
 #define HCI_EV_INQUIRY_COMPLETE		0x01
 
diff --git a/net/bluetooth/hci_codec.c b/net/bluetooth/hci_codec.c
index 0a29dd39dda3..61a4ce477bb0 100644
--- a/net/bluetooth/hci_codec.c
+++ b/net/bluetooth/hci_codec.c
@@ -400,3 +400,16 @@ int hci_configure_msft_avdtp_open(struct hci_dev *hdev, struct l2cap_chan *chan,
 	kfree(cmd);
 	return err;
 }
+
+int hci_configure_msft_avdtp_start(struct hci_dev *hdev, struct sock *sk)
+{
+	struct msft_cp_avdtp_start cmd;
+
+	if (!bt_sk(sk)->avdtp_handle)
+		return -EBADFD;
+
+	cmd.sub_opcode = HCI_MSFT_AVDTP_START;
+	cmd.avdtp_handle = cpu_to_le16(bt_sk(sk)->avdtp_handle);
+
+	return hci_send_cmd(hdev, HCI_MSFT_AVDTP_CMD, sizeof(cmd), &cmd);
+}
diff --git a/net/bluetooth/hci_codec.h b/net/bluetooth/hci_codec.h
index 121f262e5924..0dbe55be0e59 100644
--- a/net/bluetooth/hci_codec.h
+++ b/net/bluetooth/hci_codec.h
@@ -11,3 +11,4 @@ int hci_get_supported_codecs(struct hci_dev *hdev, u8 type, char __user *optval,
 			     int __user *optlen, int len);
 int hci_configure_msft_avdtp_open(struct hci_dev *hdev, struct l2cap_chan *chan,
 				  sockptr_t optval, int optlen, struct sock *sk);
+int hci_configure_msft_avdtp_start(struct hci_dev *hdev, struct sock *sk);
diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
index bbf90fc33156..cf6dbc8746f7 100644
--- a/net/bluetooth/hci_event.c
+++ b/net/bluetooth/hci_event.c
@@ -1492,6 +1492,9 @@ static void hci_cc_msft_avdtp_cmd(struct hci_dev *hdev, struct sk_buff *skb)
 		hci_cc_msft_avdtp_open(hdev, skb);
 		break;
 
+	case HCI_MSFT_AVDTP_START:
+		break;
+
 	default:
 		bt_dev_err(hdev, "Invalid MSFT sub opcode 0x%2.2x",
 			   skb->data[1]);
diff --git a/net/bluetooth/l2cap_sock.c b/net/bluetooth/l2cap_sock.c
index c68093c23c9f..24e865345def 100644
--- a/net/bluetooth/l2cap_sock.c
+++ b/net/bluetooth/l2cap_sock.c
@@ -1162,6 +1162,24 @@ static int l2cap_sock_setsockopt(struct socket *sock, int level, int optname,
 		hci_dev_put(hdev);
 		break;
 
+	case BT_MSFT_START:
+		hdev = hci_get_route(BDADDR_ANY, &chan->src, BDADDR_BREDR);
+		if (!hdev) {
+			err = -EBADFD;
+			break;
+		}
+
+		if (!hci_dev_test_flag(hdev, HCI_OFFLOAD_CODECS_ENABLED) ||
+		    !hdev->get_data_path_id) {
+			err = -EOPNOTSUPP;
+			hci_dev_put(hdev);
+			break;
+		}
+
+		err = hci_configure_msft_avdtp_start(hdev, sk);
+		hci_dev_put(hdev);
+		break;
+
 	default:
 		err = -ENOPROTOOPT;
 		break;
-- 
2.17.1


  parent reply	other threads:[~2021-11-15  6:44 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-15  6:49 [PATCH v3 01/13] Bluetooth: Refactor code to read supported codecs in getsockopt Kiran K
2021-11-15  6:49 ` [PATCH v3 02/13] Bluetooth: Support reading of codecs supported over l2cap socket Kiran K
2021-11-15  6:49 ` [PATCH v3 03/13] Bluetooth: btintel: cache offload use case data Kiran K
2021-11-15  6:49 ` [PATCH v3 04/13] Bluetooth: Pass transport type in get_data_path_id Kiran K
2021-11-15  6:49 ` [PATCH v3 05/13] Bluetooth: btintel: Add support to fetch data path id for a2dp offload Kiran K
2021-11-15  6:49 ` [PATCH v3 06/13] Bluetooth: Remove unused member in struct hci_vnd_codec_v2 Kiran K
2021-11-15  6:49 ` [PATCH v3 07/13] Bluetooth: Read Output codec capabilities Kiran K
2021-11-15  6:49 ` [PATCH v3 08/13] Bluetooth: Implement MSFT avdtp open command Kiran K
2021-11-15 21:23   ` Luiz Augusto von Dentz
2021-11-19  8:11     ` K, Kiran
2021-11-19 14:27   ` Dan Carpenter
2021-11-15  6:49 ` [PATCH v3 09/13] Bluetooth: Handle MSFT avdtp open event Kiran K
2021-11-15  6:49 ` [PATCH v3 10/13] " Kiran K
2021-11-15 17:53   ` kernel test robot
2021-11-15  6:49 ` Kiran K [this message]
2021-11-15  6:49 ` [PATCH v3 12/13] Bluetooth: Implment MSFT avdtp suspend command Kiran K
2021-11-15  6:49 ` [PATCH v3 13/13] Bluetooth: Implment MSFT avdtp close command Kiran K

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20211115064914.2345-11-kiran.k@intel.com \
    --to=kiran.k@intel.com \
    --cc=chethan.tumkur.narayan@intel.com \
    --cc=linux-bluetooth@vger.kernel.org \
    --cc=luiz.von.dentz@intel.com \
    --cc=ravishankar.srivatsa@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).