All of lore.kernel.org
 help / color / mirror / Atom feed
From: Marcel Holtmann <marcel@holtmann.org>
To: Kiran K <kiran.k@intel.com>
Cc: BlueZ <linux-bluetooth@vger.kernel.org>,
	"Srivatsa, Ravishankar" <ravishankar.srivatsa@intel.com>,
	chethan.tumkur.narayan@intel.com
Subject: Re: [PATCH v11 02/10] Bluetooth: Add support for Read Local Supported Codecs V2
Date: Fri, 30 Jul 2021 16:07:40 +0200	[thread overview]
Message-ID: <0461C975-82DC-4C4F-8CA6-6D4D7289FFF8@holtmann.org> (raw)
In-Reply-To: <20210727084713.23038-2-kiran.k@intel.com>

Hi Kiran,

> Use V2 version of read local supported command is controller
> supports
> 
> snoop:
>> HCI Event: Command Complete (0x0e) plen 20
>      Read Local Supported Codecs V2 (0x04|0x000d) ncmd 1
>        Status: Success (0x00)
>        Number of supported codecs: 7
>          Codec: u-law log (0x00)
>          Logical Transport Type: 0x02
>            Codec supported over BR/EDR SCO and eSCO
>          Codec: A-law log (0x01)
>          Logical Transport Type: 0x02
>            Codec supported over BR/EDR SCO and eSCO
>          Codec: CVSD (0x02)
>          Logical Transport Type: 0x02
>            Codec supported over BR/EDR SCO and eSCO
>          Codec: Transparent (0x03)
>          Logical Transport Type: 0x02
>            Codec supported over BR/EDR SCO and eSCO
>          Codec: Linear PCM (0x04)
>          Logical Transport Type: 0x02
>            Codec supported over BR/EDR SCO and eSCO
>          Codec: Reserved (0x08)
>          Logical Transport Type: 0x03
>            Codec supported over BR/EDR ACL
>            Codec supported over BR/EDR SCO and eSCO
>          Codec: mSBC (0x05)
>          Logical Transport Type: 0x03
>            Codec supported over BR/EDR ACL
>            Codec supported over BR/EDR SCO and eSCO
>        Number of vendor codecs: 0
> ......
> < HCI Command: Read Local Suppor.. (0x04|0x000e) plen 7
>        Codec: mSBC (0x05)
>        Logical Transport Type: 0x00
>        Direction: Input (Host to Controller) (0x00)
>> HCI Event: Command Complete (0x0e) plen 12
>      Read Local Supported Codec Capabilities (0x04|0x000e) ncmd 1
>        Status: Success (0x00)
>        Number of codec capabilities: 1
>         Capabilities #0:
>        00 00 11 15 02 33
> 
> Signed-off-by: Kiran K <kiran.k@intel.com>
> Signed-off-by: Chethan T N <chethan.tumkur.narayan@intel.com>
> Signed-off-by: Srivatsa Ravishankar <ravishankar.srivatsa@intel.com>
> ---
> * changes in v11:
>  - Remove Kconfig related changes
>  - Move codec related functions to hci_codec.c
> 
> * changes in v10:
>  no changes
> 
> * changes in v9:
>  use vnd as shortcut name for vendor instead of ven
> 
> * changes in v8:
>  no changes
> 
> * changes in v7:
>  call codec enumeration code in hci_init instead of having it in a separate
>  function
> 
> * changes in v6
>  no changes
> 
> * changes in v5:
>  fix review comments
> 
> * changes in v4:
>  converts codec read capabilities calls from async to sync
> 
> * changes in v3:
>  No changes
> 
> * changes in v2:
>  add length check for event data before accessing
> include/net/bluetooth/hci.h | 29 +++++++++++++++
> net/bluetooth/hci_codec.c   | 74 +++++++++++++++++++++++++++++++++++++
> net/bluetooth/hci_codec.h   |  1 +
> net/bluetooth/hci_core.c    |  4 +-
> 4 files changed, 107 insertions(+), 1 deletion(-)
> 
> diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h
> index f76849c8eafd..b4e35cf5f4b1 100644
> --- a/include/net/bluetooth/hci.h
> +++ b/include/net/bluetooth/hci.h
> @@ -1337,6 +1337,35 @@ struct hci_rp_read_local_pairing_opts {
> 	__u8     max_key_size;
> } __packed;
> 
> +#define HCI_OP_READ_LOCAL_CODECS_V2	0x100d
> +struct hci_std_codec_v2 {
> +	__u8	id;
> +	__u8	transport;
> +} __packed;
> +
> +struct hci_std_codecs_v2 {
> +	__u8	num;
> +	struct hci_std_codec_v2 codec[];
> +} __packed;
> +
> +struct hci_vnd_codec_v2 {
> +	__u8	id;
> +	__le16	cid;
> +	__le16	vid;
> +	__u8	transport;
> +} __packed;
> +
> +struct hci_vnd_codecs_v2 {
> +	__u8	num;
> +	struct hci_vnd_codec_v2 codec[];
> +} __packed;
> +
> +struct hci_rp_read_local_supported_codecs_v2 {
> +	__u8	status;
> +	struct hci_std_codecs_v2 std_codecs;
> +	struct hci_vnd_codecs_v2 vendor_codecs;
> +} __packed;
> +
> #define HCI_OP_READ_LOCAL_CODEC_CAPS	0x100e
> struct hci_op_read_local_codec_caps {
> 	__u8	id;
> diff --git a/net/bluetooth/hci_codec.c b/net/bluetooth/hci_codec.c
> index 205f3b04c172..6f20a4b1fc9c 100644
> --- a/net/bluetooth/hci_codec.c
> +++ b/net/bluetooth/hci_codec.c
> @@ -192,3 +192,77 @@ void hci_read_supported_codecs(struct hci_dev *hdev)
> error:
> 	kfree_skb(skb);
> }
> +
> +static void hci_codec_list_parse_v2(struct hci_dev *hdev, __u8 num_codecs,
> +				    void *codec_list, bool is_vnd_codec)
> +{
> +	__u8 i;
> +
> +	for (i = 0; i < num_codecs; i++) {
> +		if (!is_vnd_codec) {
> +			struct hci_std_codecs_v2 *codecs = codec_list;
> +
> +			hci_read_codec_capabilities(hdev, &codecs->codec[i],
> +						    codecs->codec[i].transport,
> +						    is_vnd_codec);
> +		} else {
> +			struct hci_vnd_codecs_v2 *codecs = codec_list;
> +
> +			hci_read_codec_capabilities(hdev, &codecs->codec[i],
> +						    codecs->codec[i].transport,
> +						    is_vnd_codec);
> +		}
> +	}
> +}
> +
> +void hci_read_supported_codecs_v2(struct hci_dev *hdev)
> +{
> +	struct sk_buff *skb;
> +	struct hci_rp_read_local_supported_codecs_v2 *rp;
> +	struct hci_std_codecs_v2 *std_codecs;
> +	struct hci_vnd_codecs_v2 *vnd_codecs;
> +
> +	skb = __hci_cmd_sync(hdev, HCI_OP_READ_LOCAL_CODECS_V2, 0, NULL,
> +			     HCI_CMD_TIMEOUT);
> +
> +	if (IS_ERR(skb)) {
> +		bt_dev_err(hdev, "Failed to read local supported codecs (%ld)",
> +			   PTR_ERR(skb));
> +		return;
> +	}
> +
> +	if (skb->len < sizeof(*rp))
> +		goto error;
> +
> +	rp = (void *)skb->data;
> +
> +	if (rp->status)
> +		goto error;
> +
> +	skb_pull(skb, sizeof(rp->status));
> +
> +	std_codecs = (void *)skb->data;
> +
> +	/* check for payload data length before accessing */
> +	if (skb->len < flex_array_size(std_codecs, codec, std_codecs->num)
> +	    + sizeof(std_codecs->num))
> +		goto error;
> +
> +	hci_codec_list_parse_v2(hdev, std_codecs->num, std_codecs, false);
> +
> +	skb_pull(skb, flex_array_size(std_codecs, codec, std_codecs->num)
> +		 + sizeof(std_codecs->num));
> +
> +	vnd_codecs = (void *)skb->data;
> +
> +	/* check for payload data length before accessing */
> +	if (skb->len <
> +	    flex_array_size(vnd_codecs, codec, vnd_codecs->num)
> +	    + sizeof(vnd_codecs->num))
> +		goto error;
> +
> +	hci_codec_list_parse_v2(hdev, vnd_codecs->num, vnd_codecs, true);
> +
> +error:
> +	kfree_skb(skb);
> +}

once you apply my comments from the previous patch to this one as well, you will see that it looks a lot less complicated and entangled.

Regards

Marcel


  reply	other threads:[~2021-07-30 14:07 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-27  8:47 [PATCH v11 01/10] Bluetooth: Enumerate local supported codec and cache details Kiran K
2021-07-27  8:47 ` [PATCH v11 02/10] Bluetooth: Add support for Read Local Supported Codecs V2 Kiran K
2021-07-30 14:07   ` Marcel Holtmann [this message]
2021-07-27  8:47 ` [PATCH v11 03/10] Bluetooth: btintel: Read supported offload usecases Kiran K
2021-07-30 14:10   ` Marcel Holtmann
2021-08-14  6:32     ` K, Kiran
2021-07-27  8:47 ` [PATCH v11 04/10] Bluetooth: Allow querying of supported offload codecs over SCO socket Kiran K
2021-07-30 14:14   ` Marcel Holtmann
2021-08-14  6:33     ` K, Kiran
2021-07-27  8:47 ` [PATCH v11 05/10] Bluetooth: btintel: Define callback to fetch data_path_id Kiran K
2021-07-27  8:47 ` [PATCH v11 06/10] Bluetooth: Allow setting of codec for HFP offload usecase Kiran K
2021-07-30 14:17   ` Marcel Holtmann
2021-08-01 23:45     ` K, Kiran
2021-08-14  6:39       ` K, Kiran
2021-07-27  8:47 ` [PATCH v11 07/10] Bluetooth: btintel: Define a callback to fetch codec config data Kiran K
2021-07-27  8:47 ` [PATCH v11 08/10] Bluetooth: Add support for HCI_Enhanced_Setup_Synchronous_Connection command Kiran K
2021-07-28  3:59   ` Luiz Augusto von Dentz
2021-08-14  6:41     ` K, Kiran
2021-07-27  8:47 ` [PATCH v11 09/10] Bluetooth: Add support for msbc coding format Kiran K
2021-07-27  8:47 ` [PATCH v11 10/10] Bluetooth: Add offload feature under experimental flag Kiran K
2021-07-30 14:22   ` Marcel Holtmann
2021-08-14  6:42     ` K, Kiran
2021-07-27  9:12 ` [v11,01/10] Bluetooth: Enumerate local supported codec and cache details bluez.test.bot
2021-07-30 14:06 ` [PATCH v11 01/10] " Marcel Holtmann
2021-08-02  0:23   ` K, Kiran

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=0461C975-82DC-4C4F-8CA6-6D4D7289FFF8@holtmann.org \
    --to=marcel@holtmann.org \
    --cc=chethan.tumkur.narayan@intel.com \
    --cc=kiran.k@intel.com \
    --cc=linux-bluetooth@vger.kernel.org \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.