| From 916aabed348470931fac919791bcb316e0c30a2e Mon Sep 17 00:00:00 2001 |
| From: Kiran K <kiran.k@intel.com> |
| Date: Tue, 7 Sep 2021 15:42:39 +0530 |
| Subject: [PATCH] BACKPORT: FROMGIT: Bluetooth: btintel: Read supported offload |
| use cases |
| |
| Read offload use cases supported by controller. |
| |
| 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> |
| Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com> |
| |
| (cherry picked from commit a358ef86da458a12e28edacfff5b7f145f888a93 |
| git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth-next.git |
| master) |
| |
| BUG=b:183594508 |
| TEST=build |
| |
| Signed-off-by: Chethan T N <chethan.tumkur.narayan@intel.com> |
| Signed-off-by: Michael Sun <michaelfsun@google.com> |
| |
| Change-Id: I4f889df0c829adfb886986f413ab4d657dfa044c |
| Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/third_party/kernel/+/3146657 |
| Reviewed-by: Abhishek Pandit-Subedi <abhishekpandit@chromium.org> |
| Tested-by: Michael Sun <michaelfsun@google.com> |
| Commit-Queue: Michael Sun <michaelfsun@google.com> |
| --- |
| drivers/bluetooth/btintel.c | 32 ++++++++++++++++++++++++++++++++ |
| drivers/bluetooth/btintel.h | 5 +++++ |
| 2 files changed, 37 insertions(+) |
| |
| diff --git a/drivers/bluetooth/btintel.c b/drivers/bluetooth/btintel.c |
| --- a/drivers/bluetooth/btintel.c |
| +++ b/drivers/bluetooth/btintel.c |
| @@ -2163,6 +2163,35 @@ static int btintel_prepare_fw_download_tlv(struct hci_dev *hdev, |
| return err; |
| } |
| |
| +static int btintel_configure_offload(struct hci_dev *hdev) |
| +{ |
| + struct sk_buff *skb; |
| + int err = 0; |
| + struct intel_offload_use_cases *use_cases; |
| + |
| + skb = __hci_cmd_sync(hdev, 0xfc86, 0, NULL, HCI_INIT_TIMEOUT); |
| + if (IS_ERR(skb)) { |
| + bt_dev_err(hdev, "Reading offload use cases failed (%ld)", |
| + PTR_ERR(skb)); |
| + return PTR_ERR(skb); |
| + } |
| + |
| + if (skb->len < sizeof(*use_cases)) { |
| + err = -EIO; |
| + goto error; |
| + } |
| + |
| + use_cases = (void *)skb->data; |
| + |
| + if (use_cases->status) { |
| + err = -bt_to_errno(skb->data[0]); |
| + goto error; |
| + } |
| +error: |
| + kfree_skb(skb); |
| + return err; |
| +} |
| + |
| static int btintel_bootloader_setup_tlv(struct hci_dev *hdev, |
| struct intel_version_tlv *ver) |
| { |
| @@ -2204,6 +2233,9 @@ static int btintel_bootloader_setup_tlv(struct hci_dev *hdev, |
| */ |
| btintel_load_ddc_config(hdev, ddcname); |
| |
| + /* Read supported use cases and set callbacks to fetch datapath id */ |
| + btintel_configure_offload(hdev); |
| + |
| btintel_clear_flag(hdev, HCI_QUALITY_REPORT); |
| |
| /* Read the Intel version information after loading the FW */ |
| diff --git a/drivers/bluetooth/btintel.h b/drivers/bluetooth/btintel.h |
| --- a/drivers/bluetooth/btintel.h |
| +++ b/drivers/bluetooth/btintel.h |
| @@ -132,6 +132,11 @@ struct intel_debug_features { |
| __u8 page1[16]; |
| } __packed; |
| |
| +struct intel_offload_use_cases { |
| + __u8 status; |
| + __u8 preset[8]; |
| +} __packed; |
| + |
| #define INTEL_HW_PLATFORM(cnvx_bt) ((u8)(((cnvx_bt) & 0x0000ff00) >> 8)) |
| #define INTEL_HW_VARIANT(cnvx_bt) ((u8)(((cnvx_bt) & 0x003f0000) >> 16)) |
| #define INTEL_CNVX_TOP_TYPE(cnvx_top) ((cnvx_top) & 0x00000fff) |
| -- |
| 2.33.0.882.g93a45727a2-goog |
| |