Received: by 2002:a05:6a10:d5a5:0:0:0:0 with SMTP id gn37csp2398596pxb; Fri, 8 Oct 2021 07:04:58 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy1NNgNfaor49+NmKfzPmD2/Heu2KNuTURp6gSAqeR410ccaqs0Q5R1s4nex0fW4Z7OYoQe X-Received: by 2002:a17:906:b1d5:: with SMTP id bv21mr4469563ejb.346.1633701898391; Fri, 08 Oct 2021 07:04:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1633701898; cv=none; d=google.com; s=arc-20160816; b=Alxxq6HVoj9uHECWlXAzRStFe6er2wj1URmuajrpde/3qJhK2Tj5u0lisG6bRNYYbU EokqjpgTwLMJ7OpFGwXe1rXjWYUIVP4ymn43htFsD551nckCVeKJyuM2IoiXhy2VqwGJ B//UR+FY08OuclILcWncrtBV327wZhVZXS0/rJLwkvsOjjnfPaHLWFxyEErCl0jSOfoO bmq6dtwYVpzf+77iWaeHE8HF0ZjQ+ZARfFvFaUqsSk+zN65IahJGQJ5Gx7i+h4EB2i3S YyjkMfCrqPJe1hy+m435ks4x6Z6SuyangThU+4fvMlLkZpJRtVwSonQfyOKyxGyUFfUA y9ow== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:references:in-reply-to:message-id:date:subject :cc:to:from; bh=cQW/PdKY+qwbYATxrSqnh2T1sl6TaV11F1Q6T615XlI=; b=DpFe7coKti1JwatH3IDUTgcs+yxYP27I9HnSncpBgWM7gKUDktcW7MVeXdAsJ74ZKC LfNIZNY1fdH4kwTtkVsTwgDxme+zTtsOe+gf5Cfm7+Pfu3qnhpT07F80CU7nsbwcNfW3 Tu/IgFSkmQzpNj8LX4Rdp9ohM3ZzEvedfNIsZHeasqbPa7bu2BFrLQqRYN5mFrbx1Yu7 LCNkK6ZWhU2XwFng0eC8PGSkM7dV6o2asSNLwyWbSUa593Y5NBJMHqmrwbe3SoxKwQwK Q6+DG0DEJC/l8jlJzYjrBWmzHSZYTElli8tJINlj9OfFZ+F8/rUpb19KHUKyR4SOK/6U 0sfA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-bluetooth-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-bluetooth-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id d20si1907791ejj.783.2021.10.08.07.04.33; Fri, 08 Oct 2021 07:04:58 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-bluetooth-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-bluetooth-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-bluetooth-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S240742AbhJHOFM (ORCPT + 99 others); Fri, 8 Oct 2021 10:05:12 -0400 Received: from mga04.intel.com ([192.55.52.120]:22400 "EHLO mga04.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235027AbhJHOFK (ORCPT ); Fri, 8 Oct 2021 10:05:10 -0400 X-IronPort-AV: E=McAfee;i="6200,9189,10130"; a="225286261" X-IronPort-AV: E=Sophos;i="5.85,357,1624345200"; d="scan'208";a="225286261" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 08 Oct 2021 07:02:50 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.85,357,1624345200"; d="scan'208";a="715521022" Received: from intel-lenovo-legion-y540-15irh-pg0.iind.intel.com ([10.224.186.95]) by fmsmga005.fm.intel.com with ESMTP; 08 Oct 2021 07:02:48 -0700 From: Kiran K To: linux-bluetooth@vger.kernel.org Cc: ravishankar.srivatsa@intel.com, chethan.tumkur.narayan@intel.com, luiz.von.dentz@intel.com, Kiran K Subject: [PATCH v2 4/7] Bluetooth: Pass transport type in get_data_path_id Date: Fri, 8 Oct 2021 19:37:56 +0530 Message-Id: <20211008140759.15493-4-kiran.k@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20211008140759.15493-1-kiran.k@intel.com> References: <20211008140759.15493-1-kiran.k@intel.com> Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org To support fetching of data path id for other transport types like a2dp, le audio, pass an additional parameter to get_data_path_id callback function. Signed-off-by: Kiran K --- drivers/bluetooth/btintel.c | 19 +++++++++++++++---- drivers/bluetooth/hci_vhci.c | 6 +++++- include/net/bluetooth/hci_core.h | 3 ++- net/bluetooth/hci_codec.c | 9 ++++++--- net/bluetooth/hci_conn.c | 3 ++- net/bluetooth/hci_request.c | 5 +++-- net/bluetooth/hci_request.h | 3 ++- 7 files changed, 35 insertions(+), 13 deletions(-) diff --git a/drivers/bluetooth/btintel.c b/drivers/bluetooth/btintel.c index f1431143eff5..de4667179efb 100644 --- a/drivers/bluetooth/btintel.c +++ b/drivers/bluetooth/btintel.c @@ -2207,11 +2207,22 @@ static int btintel_get_codec_config_data(struct hci_dev *hdev, return err; } -static int btintel_get_data_path_id(struct hci_dev *hdev, __u8 *data_path_id) +static int btintel_get_data_path_id(struct hci_dev *hdev, __u8 transport, + __u8 *data_path_id) { - /* Intel uses 1 as data path id for all the usecases */ - *data_path_id = 1; - return 0; + struct btintel_data *intel_data; + + if (transport != HCI_TRANSPORT_SCO_ESCO) + return -EINVAL; + + intel_data = hci_get_priv((hdev)); + + if (intel_data->use_cases.preset[0] & 0x03) { + /* Intel uses 1 as data path id for all the usecases */ + *data_path_id = 1; + return 0; + } + return -EOPNOTSUPP; } static int btintel_configure_offload(struct hci_dev *hdev) diff --git a/drivers/bluetooth/hci_vhci.c b/drivers/bluetooth/hci_vhci.c index 56c6b22be10b..a011d5b5694a 100644 --- a/drivers/bluetooth/hci_vhci.c +++ b/drivers/bluetooth/hci_vhci.c @@ -78,8 +78,12 @@ static int vhci_send_frame(struct hci_dev *hdev, struct sk_buff *skb) return 0; } -static int vhci_get_data_path_id(struct hci_dev *hdev, u8 *data_path_id) +static int vhci_get_data_path_id(struct hci_dev *hdev, u8 transport, + u8 *data_path_id) { + if (transport != HCI_TRANSPORT_SCO_ESCO) + return -EINVAL; + *data_path_id = 0; return 0; } diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h index dd8840e70e25..8b8b45f6d5bd 100644 --- a/include/net/bluetooth/hci_core.h +++ b/include/net/bluetooth/hci_core.h @@ -619,7 +619,8 @@ struct hci_dev { void (*cmd_timeout)(struct hci_dev *hdev); bool (*wakeup)(struct hci_dev *hdev); int (*set_quality_report)(struct hci_dev *hdev, bool enable); - int (*get_data_path_id)(struct hci_dev *hdev, __u8 *data_path); + int (*get_data_path_id)(struct hci_dev *hdev, __u8 transport, + __u8 *data_path); int (*get_codec_config_data)(struct hci_dev *hdev, __u8 type, struct bt_codec *codec, __u8 *vnd_len, __u8 **vnd_data); diff --git a/net/bluetooth/hci_codec.c b/net/bluetooth/hci_codec.c index f4d8d3a253d8..6d4e5353f05c 100644 --- a/net/bluetooth/hci_codec.c +++ b/net/bluetooth/hci_codec.c @@ -259,6 +259,7 @@ int hci_get_supported_codecs(struct hci_dev *hdev, u8 type, char __user *optval, struct bt_codec codec; u8 num_codecs = 0, i, __user *ptr; struct codec_list *c; + u8 data_path; if (!hci_dev_test_flag(hdev, HCI_OFFLOAD_CODECS_ENABLED)) { err = -EOPNOTSUPP; @@ -270,6 +271,10 @@ int hci_get_supported_codecs(struct hci_dev *hdev, u8 type, char __user *optval, goto error; } + err = hdev->get_data_path_id(hdev, type, &data_path); + if (err < 0) + goto error; + /* find total buffer size required to copy codec + capabilities */ hci_dev_lock(hdev); list_for_each_entry(c, &hdev->local_codecs, list) { @@ -306,9 +311,7 @@ int hci_get_supported_codecs(struct hci_dev *hdev, u8 type, char __user *optval, codec.id = c->id; codec.cid = c->cid; codec.vid = c->vid; - err = hdev->get_data_path_id(hdev, &codec.data_path); - if (err < 0) - break; + codec.data_path = data_path; codec.num_caps = c->num_caps; if (copy_to_user(ptr, &codec, sizeof(codec))) { err = -EFAULT; diff --git a/net/bluetooth/hci_conn.c b/net/bluetooth/hci_conn.c index bd669c95b9a7..62192f463e5c 100644 --- a/net/bluetooth/hci_conn.c +++ b/net/bluetooth/hci_conn.c @@ -317,7 +317,8 @@ static bool hci_enhanced_setup_sync_conn(struct hci_conn *conn, __u16 handle) /* for offload use case, codec needs to configured before opening SCO */ if (conn->codec.data_path) - hci_req_configure_datapath(hdev, &conn->codec); + hci_req_configure_datapath(hdev, HCI_TRANSPORT_SCO_ESCO, + &conn->codec); conn->state = BT_CONNECT; conn->out = true; diff --git a/net/bluetooth/hci_request.c b/net/bluetooth/hci_request.c index 92611bfc0b9e..34a104a2ca32 100644 --- a/net/bluetooth/hci_request.c +++ b/net/bluetooth/hci_request.c @@ -2950,7 +2950,8 @@ static void config_data_path_complete(struct hci_dev *hdev, u8 status, bt_dev_dbg(hdev, "status %u", status); } -int hci_req_configure_datapath(struct hci_dev *hdev, struct bt_codec *codec) +int hci_req_configure_datapath(struct hci_dev *hdev, u8 transport, + struct bt_codec *codec) { struct hci_request req; int err; @@ -2970,7 +2971,7 @@ int hci_req_configure_datapath(struct hci_dev *hdev, struct bt_codec *codec) goto error; } - err = hdev->get_data_path_id(hdev, &cmd->data_path_id); + err = hdev->get_data_path_id(hdev, transport, &cmd->data_path_id); if (err < 0) goto error; diff --git a/net/bluetooth/hci_request.h b/net/bluetooth/hci_request.h index f31420f58525..d80a4e277a20 100644 --- a/net/bluetooth/hci_request.h +++ b/net/bluetooth/hci_request.h @@ -101,7 +101,8 @@ void __hci_req_update_class(struct hci_request *req); /* Returns true if HCI commands were queued */ bool hci_req_stop_discovery(struct hci_request *req); -int hci_req_configure_datapath(struct hci_dev *hdev, struct bt_codec *codec); +int hci_req_configure_datapath(struct hci_dev *hdev, u8 transport, + struct bt_codec *codec); static inline void hci_req_update_scan(struct hci_dev *hdev) { -- 2.17.1