Received: by 2002:a05:6a10:2726:0:0:0:0 with SMTP id ib38csp2426727pxb; Sun, 3 Apr 2022 06:32:53 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy8x0uQRYISnPmMajqgKi+tK54urBykxARaMVCOmbern9qU4zT7hvVhtl0KGB/RVqP+SxAe X-Received: by 2002:a63:6f45:0:b0:398:49ba:1037 with SMTP id k66-20020a636f45000000b0039849ba1037mr22453678pgc.601.1648992773111; Sun, 03 Apr 2022 06:32:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1648992773; cv=none; d=google.com; s=arc-20160816; b=qJeoBGM0EyjIPgLtYQ1uEJkBrNHvjwyYRsTcl0Tsy9r7vze9s9cUYiS/kPuHi+GyDr Y0Lq5tA/RFH5y9vUVpuNQt0jmEI7fYg80W4otBh9QzDAHin3q3vWSMuMU+nTzr5Ex9CT wax3fymJSan1MC/FRjBwi5iOCR6KNSnyYkhqE7XpUGSZUH4I+ZUFIXLa2ozzd2vqQuQC AG0KPzXZroUwBZOfr60OMrcbUaNga45qN4q4/2/+rKZLVNy7vglQAaL2wHMUyF59IoFl lp/3xOgl3E71/jyraNy9dHvB5LBnuFqyuaqV4DaXBNSJzcgjJOWJXlf2sKXUiITltT1N wFaA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:to:references:message-id :content-transfer-encoding:cc:date:in-reply-to:from:subject :mime-version; bh=lOMJdNe2RHT8GybL84fLw9yh9pxRaDuvF03nd+VbH2A=; b=I5B4+7BvDDuG8t9SW/myVFir5sT3pCDC/y7hnkhV95ASq3sCiSkY7rJuqyMlZhIOQE C1f5zAiF/cW6w/bo8XF/yRS9O4Dz1ThOUiMf2Q68C0xzl8aZM8RpNTy+rrvLMOkDpWMV nRJrAb5Ks1QBWrBIN52rNXRn/YjeMOEGP4hkFXCdF2TxoLfUZroWBE1Jgyf9zOxawC9S ejPrmCvJRUxKPPhaGmnfj4/J/vXq+DEO39yzkzqackVAu6j1yMuKtuEu9ZdIOpyOHDre 7Ky/u0LqexHAO4BjQbs2EKFBpfZ7TFm+lOvMWRN439Gd3Wi/Ja8eQfwmoYhfs34t0HzU a4Zw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-bluetooth-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-bluetooth-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id v12-20020a17090a4ecc00b001ca8b863364si1274768pjl.65.2022.04.03.06.32.22; Sun, 03 Apr 2022 06:32:52 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-bluetooth-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-bluetooth-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-bluetooth-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1349969AbiDARb1 convert rfc822-to-8bit (ORCPT + 99 others); Fri, 1 Apr 2022 13:31:27 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49588 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S243872AbiDARbZ (ORCPT ); Fri, 1 Apr 2022 13:31:25 -0400 Received: from mail.holtmann.org (coyote.holtmann.net [212.227.132.17]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 35EA61AAA4E for ; Fri, 1 Apr 2022 10:29:31 -0700 (PDT) Received: from smtpclient.apple (p4ff9fa3c.dip0.t-ipconnect.de [79.249.250.60]) by mail.holtmann.org (Postfix) with ESMTPSA id A33B6CED02; Fri, 1 Apr 2022 19:29:30 +0200 (CEST) Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3696.80.82.1.1\)) Subject: Re: [PATCH v3 2/3] Bluetooth: Print broken quirks From: Marcel Holtmann In-Reply-To: <20220330182552.2613523-2-luiz.dentz@gmail.com> Date: Fri, 1 Apr 2022 19:29:30 +0200 Cc: linux-bluetooth@vger.kernel.org Content-Transfer-Encoding: 8BIT Message-Id: <6AFB6D57-1342-445D-A9CC-C761DB356E16@holtmann.org> References: <20220330182552.2613523-1-luiz.dentz@gmail.com> <20220330182552.2613523-2-luiz.dentz@gmail.com> To: Luiz Augusto von Dentz X-Mailer: Apple Mail (2.3696.80.82.1.1) X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,SPF_HELO_NONE, SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org Hi Luiz, > This prints warnings for controllers setting broken quirks to increase > their visibility and warn about broken controllers firmware that > probably needs updates to behave properly. > > Signed-off-by: Luiz Augusto von Dentz > --- > net/bluetooth/hci_sync.c | 53 +++++++++++++++++++++++++++++++++++++--- > 1 file changed, 49 insertions(+), 4 deletions(-) > > diff --git a/net/bluetooth/hci_sync.c b/net/bluetooth/hci_sync.c > index 8f4c5698913d..e97880d7bdb2 100644 > --- a/net/bluetooth/hci_sync.c > +++ b/net/bluetooth/hci_sync.c > @@ -3825,6 +3825,54 @@ static int hci_init_sync(struct hci_dev *hdev) > return 0; > } > > +#define HCI_QUIRK_BROKEN(_quirk, _desc) { HCI_QUIRK_BROKEN_##_quirk, _desc } > + > +static const struct { > + unsigned long quirk; > + const char *desc; > +} hci_broken_table[] = { > + HCI_QUIRK_BROKEN(LOCAL_COMMANDS, > + "HCI Read Local Supported Commands not supported"), > + HCI_QUIRK_BROKEN(STORED_LINK_KEY, > + "HCI Delete Stored Link Key command is advertised, " > + "but not supported."), > + HCI_QUIRK_BROKEN(ERR_DATA_REPORTING, > + "HCI Read Default Erroneous Data Reporting command is " > + "advertised, but not supported."), > + HCI_QUIRK_BROKEN(READ_TRANSMIT_POWER, > + "HCI Read Transmit Power Level command is advertised, " > + "but not supported."), > + HCI_QUIRK_BROKEN(FILTER_CLEAR_ALL, > + "HCI Set Event Filter command not supported."), > + HCI_QUIRK_BROKEN(ENHANCED_SETUP_SYNC_CONN, > + "HCI Enhanced Setup Synchronous Connection command is " > + "advertised, but not supported.") > +}; > + > +static int hci_dev_setup_sync(struct hci_dev *hdev) > +{ > + size_t i; > + > + bt_dev_dbg(hdev, ""); > + > + hci_sock_dev_event(hdev, HCI_DEV_SETUP); > + > + if (hdev->setup) { > + int ret; > + > + ret = hdev->setup(hdev); > + if (ret) > + return ret; > + } > + > + for (i = 0; i < ARRAY_SIZE(hci_broken_table); i++) { > + if (test_bit(hci_broken_table[i].quirk, &hdev->quirks)) > + bt_dev_warn(hdev, "%s", hci_broken_table[i].desc); > + } > + > + return 0; > +} > + > int hci_dev_open_sync(struct hci_dev *hdev) > { > int ret = 0; > @@ -3887,10 +3935,7 @@ int hci_dev_open_sync(struct hci_dev *hdev) > test_bit(HCI_QUIRK_NON_PERSISTENT_SETUP, &hdev->quirks)) { > bool invalid_bdaddr; > > - hci_sock_dev_event(hdev, HCI_DEV_SETUP); > - > - if (hdev->setup) > - ret = hdev->setup(hdev); > + ret = hci_dev_setup_sync(hdev); just put the code here instead of creating another helper function. Regards Marcel