Received: by 2002:a25:683:0:0:0:0:0 with SMTP id 125csp1236645ybg; Thu, 11 Jun 2020 04:46:28 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxI7GSTM12kKAUeMWX6AuXzgVGP90o3PdWV7kqwb1fOXtV6xCd2alL34CF+L3vqd54sCEGi X-Received: by 2002:a50:b022:: with SMTP id i31mr6718573edd.301.1591875988536; Thu, 11 Jun 2020 04:46:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1591875988; cv=none; d=google.com; s=arc-20160816; b=qnBiPaOyq1HlLwcWjCf5yRDTd5PFWEqtsQbQb+eJj/MoCdRixiIOi2U5r2bvXAbj+w WR3O0Wg3bjVFUx0Bv5GFxQzBqz9h6oPtWubJmNWjZz92hOIR9BG1jwmuYKcYiD6Ejspe RxXWHaKPrO6eRRfbJ9pioHBFSErAYJx/nQg6lILZgPkm3Fw9AvpVS6gRSpPlU2h7C8PK 1odbgaAPYCAZE1e5cU9dj8RBHb6rgRANqqJ3SdlFFZ8TkooGHWqloyP0yWoIDxt3cUxa KCUgOkF6+1CoyjsnlTG7uPsU1c66G0HfVCInKph/zzG8vqTjF7gv4r6Wk71dbTvMdP1s Fmnw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:ironport-sdr:ironport-sdr; bh=ulPjPMN10quQ7wHeU5NUmXpAeI380SJt9tICgmX9ymo=; b=tHGXsPtaB1cQR24AK6t2WZScc7rF7ZEXcxQLM3E+ZOXYbb1bRbGgszrvxftdPKWNN+ 3fQlA+5/iqHcP0nA/npkRzqxtXuibvL0rdLqjYzGwr8epbvgEXPX4/mJlFbBZRolBZz6 s+sSW/zTTqlJKFPdhLispqiaR5KSljmAzrycpdpk5OYV6koBDVISENypDYPr5pwg7ls+ 4JFPDnpCyiscZFWW5qNqCVCRBWI1OcYPt7g7khKulGLMJXE6MGykYK+tM+9ObuujpMdo +MvhMVFGdDFSaAWYqSN89y2pfxQQLNHGv+vX528oh88G6wW9vajV7EZ8tDghQ3FfPEZv xy7A== 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 a25si1797993ejb.697.2020.06.11.04.46.04; Thu, 11 Jun 2020 04:46:28 -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 S1727838AbgFKLo7 (ORCPT + 99 others); Thu, 11 Jun 2020 07:44:59 -0400 Received: from mga12.intel.com ([192.55.52.136]:26678 "EHLO mga12.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727829AbgFKLo7 (ORCPT ); Thu, 11 Jun 2020 07:44:59 -0400 IronPort-SDR: kCXgdUS7MlZ31um2Drs0a4bd5qAZLt6IdxwCMUxD+OE3SmaoyrnG9CSVd11OuatcJwSh0nASt7 ymqQYVJP5KLA== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Jun 2020 04:44:58 -0700 IronPort-SDR: nGGZhFtFEh52jmxDbEMUbcCAI/iobC4NwAOOyPdHSqdJWay/poenp/il03Q70cbL60deCMgY4Z /MSrsYjnemtQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.73,499,1583222400"; d="scan'208";a="296562876" Received: from unknown (HELO intel-Lenovo-Legion-Y540-15IRH-PG0.iind.intel.com) ([10.224.186.95]) by fmsmga004.fm.intel.com with ESMTP; 11 Jun 2020 04:44:56 -0700 From: Kiran K To: linux-bluetooth@vger.kernel.org Cc: ravishankar.srivatsa@intel.com, kiraank@gmail.com, Kiran K , Raghuram Hegde , Chethan T N , Amit K Bag Subject: [PATCH 4/4] Bluetooth: btintel: Add helper function to help controller type Date: Thu, 11 Jun 2020 17:15:26 +0530 Message-Id: <20200611114526.13594-5-kiran.k@intel.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200611114526.13594-1-kiran.k@intel.com> References: <20200611114526.13594-1-kiran.k@intel.com> Sender: linux-bluetooth-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org From: Raghuram Hegde As the firmware download flow for new generation controller changes from legacy controller, this function helps in deciding the download flow to be used Signed-off-by: Raghuram Hegde Signed-off-by: Chethan T N Signed-off-by: Kiran K Signed-off-by: Amit K Bag --- drivers/bluetooth/btintel.c | 51 +++++++++++++++++++++++++++++++++++++ drivers/bluetooth/btintel.h | 3 +++ 2 files changed, 54 insertions(+) diff --git a/drivers/bluetooth/btintel.c b/drivers/bluetooth/btintel.c index ae60527e1abd..93a0e5a2e927 100644 --- a/drivers/bluetooth/btintel.c +++ b/drivers/bluetooth/btintel.c @@ -482,6 +482,57 @@ int btintel_read_version(struct hci_dev *hdev, struct intel_version *ver) } EXPORT_SYMBOL_GPL(btintel_read_version); +int btintel_read_version_tlv(struct hci_dev *hdev, bool *is_tlv_format, + struct sk_buff **skb_out) +{ + u8 param; + u8 status; + u8 tlv_check_octet; + u8 *data; + struct sk_buff *skb; + + param = 0xFF; + skb_out = NULL; + + skb = __hci_cmd_sync(hdev, 0xfc05, 1, ¶m, HCI_CMD_TIMEOUT); + if (IS_ERR(skb)) { + bt_dev_err(hdev, "Intel read version command failed (%ld)", + PTR_ERR(skb)); + return PTR_ERR(skb); + } + + /* Check status */ + data = skb->data; + status = *data; + if (status) { + bt_dev_err(hdev, "Intel Read Version failed (%02x)", + status); + kfree_skb(skb); + return -bt_to_errno(status); + } + + /* There are two variants of HCI_Intel_Read_Version_Command_Complete + * depending on SKU type (legacy and TLV format).If the skb->len + * parameter is equal to INTEL_VERSION_LEN and the first octet + * after the status parameter is 0x37 then it's the legacy format, + * otherwise it's TLV format + */ + + /* Fetch the octet after status */ + tlv_check_octet = *(data + 1); + + if (skb->len == INTEL_VERSION_LEN && tlv_check_octet == 0x37) { + bt_dev_dbg(hdev, "Using Legacy Intel Version command"); + *is_tlv_format = false; + } else { + bt_dev_dbg(hdev, "Using TLV format Version command"); + *is_tlv_format = true; + } + *skb_out = skb; + return 0; +} +EXPORT_SYMBOL_GPL(btintel_read_version_tlv); + /* ------- REGMAP IBT SUPPORT ------- */ #define IBT_REG_MODE_8BIT 0x00 diff --git a/drivers/bluetooth/btintel.h b/drivers/bluetooth/btintel.h index fa4b1b801b13..de2d104cb86d 100644 --- a/drivers/bluetooth/btintel.h +++ b/drivers/bluetooth/btintel.h @@ -6,6 +6,9 @@ * Copyright (C) 2015 Intel Corporation */ +/* Length of intel_version structure*/ +#define INTEL_VERSION_LEN 10 + struct intel_version { u8 status; u8 hw_platform; -- 2.17.1