Received: by 2002:a25:6193:0:0:0:0:0 with SMTP id v141csp1062962ybb; Wed, 25 Mar 2020 15:03:33 -0700 (PDT) X-Google-Smtp-Source: ADFU+vshivlXBM4PQFJYMCXP9FsjwQ5efjOUDRcO7zz9aJHCqt9jVQOLXXzdPo5kq0U9rEdyaX2/ X-Received: by 2002:aca:bd0b:: with SMTP id n11mr3908930oif.90.1585173813327; Wed, 25 Mar 2020 15:03:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1585173813; cv=none; d=google.com; s=arc-20160816; b=Mq4Q2sOkcz7fYyVRHrgdXpJZjTGse+y/7HvTmFXzHWqQiYSBYSIHQoWLLCM9imFdin J4rF4xWwnU+MXjhHk69vdor+XaKw2IMB/0cwk71bvG/wZwnlIVTePdx0rvMhIH8rgo+j mR4TBS7dKZ5z/jWYEXbe8cMKtuEVPkBY1EsxFTQG0OHbXGah8aRJwv8Qt4kazscOfvVu vSuyEoBDi56eiTPV1Ed6H0BaQSD2Z0rliX8OboEjqiXZR1MBcatLhSPHed7TDBnowqaX c0Xc4eivrkm+AAs7oiMIaBigW0ciTwOKAYK4c72jPu3EKHVR/HZ3eM5brW7U7HcL0NbS 7eqQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:cc:to:subject :message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=kMrdIcSekVyYpSUHbdn6aie/98pCO+vQsLQWmECU324=; b=1DivMSP76g+wiUJHlm9wFhd+qnG8Ui85A93rYL+nhpWtzZ1mIsPM7zftn1awfuLQ7P Dl7cnL1aR7jfIIjY2dH8+0pg/qSKSUjwI0gjZ+AHO6gt383EfT9vo0onJphwMlXFININ tEVJc5i4yPn88NglaXBtNKke/0X2gj6004eQRUefd/PsTwarIxEEkYa8PrGBKTt2Wb2f VpJsg6Xz01ToSvyt6xIpwdnBU21beHtGBXQQqA1n+YihTszRlu1qeV8bvSYTe6QJ2JQH oqB9jsAG9cW223OCAEGnju2UyvnAaAt6OB4FdTK37cinLSgUz4A5ND4Ihci1ulCqhQdW SJ6g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b="dHdysE/S"; spf=pass (google.com: best guess record for domain of linux-bluetooth-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-bluetooth-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id f9si184377oti.44.2020.03.25.15.02.55; Wed, 25 Mar 2020 15:03:33 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-bluetooth-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b="dHdysE/S"; spf=pass (google.com: best guess record for domain of linux-bluetooth-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-bluetooth-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727351AbgCYWCq (ORCPT + 99 others); Wed, 25 Mar 2020 18:02:46 -0400 Received: from mail-lf1-f65.google.com ([209.85.167.65]:34686 "EHLO mail-lf1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727389AbgCYWCn (ORCPT ); Wed, 25 Mar 2020 18:02:43 -0400 Received: by mail-lf1-f65.google.com with SMTP id e7so3160714lfq.1 for ; Wed, 25 Mar 2020 15:02:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=kMrdIcSekVyYpSUHbdn6aie/98pCO+vQsLQWmECU324=; b=dHdysE/SayM8kJkixhAFnl2T8s+GCoCy/QiD8wY91rB93D75s7yeO3ECQ/Q9l0EYlU UrA7ZXq61ksQ23EPDGiaXzoY3BcPTUuCZPI1jpU3rt/D1frfyvfylGMHY4nza8LF9CC1 lhZjfgQkw5ctJ4wnBEhMYfyax+49IHetbc0UA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=kMrdIcSekVyYpSUHbdn6aie/98pCO+vQsLQWmECU324=; b=ER8I4h+O2EetPSZmlZgGNhYebYlD28EkJ7IDE0lNuNm/EyWi9/EjknCcMtpdmwhkm3 PnEBB/E7e/jVl0LHYyvG52jZ08hOXGfjr2+HcYLuciRMobuZxTXqKdxND4rR6pD9p4nr kTSffVD/SsMn/JhtvSsdFDMSDa/g0ynOetv6JwbhWJReZTNW9Jq0l6sbkUA0rqOkVEiX cJUpfGdcGVtCcjp1OFTYZ5peC66kGqy1k8GX6SrANhsThQs4+Z7XOdEqLVpr6pPPG8ay Fq1mojSffkHobg9f3Tvzeg0iSaRqA5DcpUSBjsvef0iZ7Q/cdols2a9uYZk7lX2SpVBQ gg/A== X-Gm-Message-State: ANhLgQ0uTs22rHoiR1EeL7Pmrp+H/MTjrYm09oKyACBKjlRoSvqdnmsj rWRfPPnz9CCit4+Z4j5oaG2/GvVY0wOIiSwDFkkG6g== X-Received: by 2002:a19:4f0c:: with SMTP id d12mr3632373lfb.117.1585173760630; Wed, 25 Mar 2020 15:02:40 -0700 (PDT) MIME-Version: 1.0 References: <20200325070336.1097-1-mcchou@chromium.org> <20200325000332.v2.1.I0e975833a6789e8acc74be7756cd54afde6ba98c@changeid> <72699110-843A-4382-8FF1-20C5D4D557A2@holtmann.org> In-Reply-To: From: Miao-chen Chou Date: Wed, 25 Mar 2020 15:02:29 -0700 Message-ID: Subject: Re: [PATCH v2 1/2] Bluetooth: btusb: Indicate Microsoft vendor extension for Intel 9460/9560 and 9160/9260 To: Marcel Holtmann Cc: Bluetooth Kernel Mailing List , Luiz Augusto von Dentz , Alain Michaud , "David S. Miller" , Jakub Kicinski , Johan Hedberg , LKML , netdev Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Sender: linux-bluetooth-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org On Wed, Mar 25, 2020 at 2:37 PM Marcel Holtmann wrote= : > > Hi Miao-chen, > > >>> This adds a bit mask of driver_info for Microsoft vendor extension an= d > >>> indicates the support for Intel 9460/9560 and 9160/9260. See > >>> https://docs.microsoft.com/en-us/windows-hardware/drivers/bluetooth/ > >>> microsoft-defined-bluetooth-hci-commands-and-events for more informat= ion > >>> about the extension. This was verified with Intel ThunderPeak BT cont= roller > >>> where msft_vnd_ext_opcode is 0xFC1E. > >>> > >>> Signed-off-by: Miao-chen Chou > >>> --- > >>> > >>> Changes in v2: > >>> - Define struct msft_vnd_ext and add a field of this type to struct > >>> hci_dev to facilitate the support of Microsoft vendor extension. > >>> > >>> drivers/bluetooth/btusb.c | 14 ++++++++++++-- > >>> include/net/bluetooth/hci_core.h | 6 ++++++ > >>> 2 files changed, 18 insertions(+), 2 deletions(-) > >>> > >>> diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c > >>> index 3bdec42c9612..4c49f394f174 100644 > >>> --- a/drivers/bluetooth/btusb.c > >>> +++ b/drivers/bluetooth/btusb.c > >>> @@ -58,6 +58,7 @@ static struct usb_driver btusb_driver; > >>> #define BTUSB_CW6622 0x100000 > >>> #define BTUSB_MEDIATEK 0x200000 > >>> #define BTUSB_WIDEBAND_SPEECH 0x400000 > >>> +#define BTUSB_MSFT_VND_EXT 0x800000 > >>> > >>> static const struct usb_device_id btusb_table[] =3D { > >>> /* Generic Bluetooth USB device */ > >>> @@ -335,7 +336,8 @@ static const struct usb_device_id blacklist_table= [] =3D { > >>> > >>> /* Intel Bluetooth devices */ > >>> { USB_DEVICE(0x8087, 0x0025), .driver_info =3D BTUSB_INTEL_NEW | > >>> - BTUSB_WIDEBAND_SPE= ECH }, > >>> + BTUSB_WIDEBAND_SPE= ECH | > >>> + BTUSB_MSFT_VND_EXT= }, > >>> { USB_DEVICE(0x8087, 0x0026), .driver_info =3D BTUSB_INTEL_NEW | > >>> BTUSB_WIDEBAND_SPEE= CH }, > >>> { USB_DEVICE(0x8087, 0x0029), .driver_info =3D BTUSB_INTEL_NEW | > >>> @@ -348,7 +350,8 @@ static const struct usb_device_id blacklist_table= [] =3D { > >>> { USB_DEVICE(0x8087, 0x0aa7), .driver_info =3D BTUSB_INTEL | > >>> BTUSB_WIDEBAND_SPEE= CH }, > >>> { USB_DEVICE(0x8087, 0x0aaa), .driver_info =3D BTUSB_INTEL_NEW | > >>> - BTUSB_WIDEBAND_SPE= ECH }, > >>> + BTUSB_WIDEBAND_SPE= ECH | > >>> + BTUSB_MSFT_VND_EXT= }, > >>> > >>> /* Other Intel Bluetooth devices */ > >>> { USB_VENDOR_AND_INTERFACE_INFO(0x8087, 0xe0, 0x01, 0x01), > >>> @@ -3734,6 +3737,8 @@ static int btusb_probe(struct usb_interface *in= tf, > >>> hdev->send =3D btusb_send_frame; > >>> hdev->notify =3D btusb_notify; > >>> > >>> + hdev->msft_ext.opcode =3D HCI_OP_NOP; > >>> + > >> > >> do this in the hci_alloc_dev procedure for every driver. This doesn=E2= =80=99t belong in the driver. > > Thanks for the note, I will address this. > >> > >>> #ifdef CONFIG_PM > >>> err =3D btusb_config_oob_wake(hdev); > >>> if (err) > >>> @@ -3800,6 +3805,11 @@ static int btusb_probe(struct usb_interface *i= ntf, > >>> set_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks= ); > >>> set_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY, &hdev->quirks)= ; > >>> set_bit(HCI_QUIRK_NON_PERSISTENT_DIAG, &hdev->quirks); > >>> + > >>> + if (id->driver_info & BTUSB_MSFT_VND_EXT && > >>> + (id->idProduct =3D=3D 0x0025 || id->idProduct = =3D=3D 0x0aaa)) { > >> > >> Please scrap this extra check. You already selected out the PID with t= he blacklist_table. In addition, I do not want to add a PID in two places i= n the driver. > > If we scrap the check around idProduct, how do we tell two controllers > > apart if they use different opcode for Microsoft vendor extension? > > for Intel controllers this is highly unlikely. If we really decide to cha= nge the opcode in newer firmware versions, we then deal with it at that poi= nt. > > However for Intel controllers I have the feeling that we better do it aft= er the Read the Intel version information and then do it based on hardware = revision and firmware version. I would agree with you given that the FW loaded for the same HW can differ, and different FW version may have different configuration in terms of the use of extensions. But it's not clear to me how we can tell whether an extension is supported based on a version number. Is there any implication on the support of an extension given a FW version (e.g. any FW version greater than 10 would support MSFT extension)? > > >> An alternative is to not use BTUSB_MSFT_VND_EXT and let the Intel code= set it based on the hardware / firmware revision it finds. We might need t= o discuss which is the better approach for the Intel hardware since not all= PIDs are unique. > > We are expecting to indicate the vendor extension for non-Intel > > controllers as well, and having BTUSB_MSFT_VND_EXT seems to be more > > generic. What do you think? > > We don=E2=80=99t have to have one specific way of doing it. As I said, if= we ever have Zephyr based controller with MSFT extension, we have a vendor= command to determine the support and the opcode. So that will not require = any extra quirks or alike. > > Anyhow, maybe we introduce BTUSB_MSFT_VND_EXT_FC1E that just says set the= opcode to FC1E. For all other opcodes we will introduce similar constants.= At most I assume we end up with 5-6 constants. > > >> > >>> + hdev->msft_ext.opcode =3D 0xFC1E; > >>> + } > >>> } Regards, Miao