From patchwork Sat Jul 24 07:29:57 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tedd Ho-Jeong An X-Patchwork-Id: 485354 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI, SPF_HELO_NONE, SPF_PASS, URIBL_BLOCKED, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id CED6FC432BE for ; Sat, 24 Jul 2021 07:30:21 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id B662E60EB1 for ; Sat, 24 Jul 2021 07:30:21 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234389AbhGXGtr (ORCPT ); Sat, 24 Jul 2021 02:49:47 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37006 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234393AbhGXGtk (ORCPT ); Sat, 24 Jul 2021 02:49:40 -0400 Received: from mail-pj1-x1031.google.com (mail-pj1-x1031.google.com [IPv6:2607:f8b0:4864:20::1031]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id DB0C2C061575 for ; Sat, 24 Jul 2021 00:30:10 -0700 (PDT) Received: by mail-pj1-x1031.google.com with SMTP id p5-20020a17090a8685b029015d1a9a6f1aso8147189pjn.1 for ; Sat, 24 Jul 2021 00:30:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=TgkdDMM3q147x2DO66poDEhjv+kw2aSJ9uTtRb1vkAI=; b=WdD0rPpcd64qv8zUaMt1qD9fxuNNma9t/Fmni/AuULjksuvOQRfz1X05GrkZRIBz7F d1/AegbQhNKBZHUhpTR05TvU4dkDFG21zFlz6yhoEvwoB6uL0Nd+2VcpvmDK/q0NpVz1 B9lbuDDWkD5afs6h6YAHrzl48H0ErHLi9QE5QKa1oZgJXj3ZCZcCVUs0VjTnvVINCKTV FfbdDlp3XHUhTfIlRb3gZBqe4Yvs5UHdCe9xharJDlPTwFfo6xl5LPO2q0FUSdQgHWFZ 096FuTN/GutlAP1djRjKuCZp9Aw1+hqgwAabj96ygt/zpncwvoP4qxh8qEY8ezJP0YXQ Nhyg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=TgkdDMM3q147x2DO66poDEhjv+kw2aSJ9uTtRb1vkAI=; b=Kns2DLqJqBgoDbQFTs3FL+r+aPFu6QoTWa40ccKqn0Wuf2AfUnKr/PSpEjFp/3OtFH cu5oFB5hCpt9lS2Q686REYLIfywtzcxTXxZj1LrHzT2JsqDM+VuivFQ7vnCNg+Lz8EeL St+UFRPOukK3f4HG08i5QI3EvxG1CmcjBHHjF/KpXJ91p17Q7oeT85k326cD47Pi6cOZ U3XomA3vBst/T6keEHlKwt3RN2UCeER5gjyP3+gfcKMkoEpr6gMECFE22G8fTojVA2dr IPOnG4POZXz/H/uqVZoADOkHlqgJUl78NCPEV3VbfwmsYvjoFT3/VqQPur6XTPNFtN9U M7gQ== X-Gm-Message-State: AOAM5302lbtngljK7CU7UkONaWT5NNsMPbyzF0FM/sYgsDrnbIEXhn4W 6BjYBwg4MrpjfM4PALTgtbji0BnhDhU= X-Google-Smtp-Source: ABdhPJxnoyuhah26GJ71kNvP0MCz7TNOheB/dd1FDHYFs+6BarTKwIY+eYLTVHzpSXD5RML5v+cZEQ== X-Received: by 2002:a17:902:fe11:b029:12b:9108:c068 with SMTP id g17-20020a170902fe11b029012b9108c068mr6746033plj.36.1627111810141; Sat, 24 Jul 2021 00:30:10 -0700 (PDT) Received: from localhost.localdomain ([2601:1c0:6a01:d830::1291]) by smtp.gmail.com with ESMTPSA id u24sm38510919pfm.141.2021.07.24.00.30.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 24 Jul 2021 00:30:09 -0700 (PDT) From: Tedd Ho-Jeong An To: linux-bluetooth@vger.kernel.org Cc: Tedd Ho-Jeong An Subject: [RFC PATCH v3 1/9] Bluetooth: Add support hdev to allocate private data Date: Sat, 24 Jul 2021 00:29:57 -0700 Message-Id: <20210724073005.714003-2-hj.tedd.an@gmail.com> X-Mailer: git-send-email 2.26.3 In-Reply-To: <20210724073005.714003-1-hj.tedd.an@gmail.com> References: <20210724073005.714003-1-hj.tedd.an@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org From: Tedd Ho-Jeong An This patch adds support hdev to allocate extra size for private data. The size of private data is specified in the hdev_alloc_size(priv_size) and the allocated buffer can be accessed with hci_get_priv(hdev). Signed-off-by: Tedd Ho-Jeong An --- drivers/bluetooth/bfusb.c | 2 +- drivers/bluetooth/bluecard_cs.c | 2 +- drivers/bluetooth/bpa10x.c | 2 +- drivers/bluetooth/bt3c_cs.c | 2 +- drivers/bluetooth/btmrvl_main.c | 2 +- drivers/bluetooth/btmtksdio.c | 2 +- drivers/bluetooth/btmtkuart.c | 2 +- drivers/bluetooth/btqcomsmd.c | 2 +- drivers/bluetooth/btrsi.c | 2 +- drivers/bluetooth/btsdio.c | 2 +- drivers/bluetooth/btusb.c | 2 +- drivers/bluetooth/dtl1_cs.c | 2 +- drivers/bluetooth/hci_ldisc.c | 2 +- drivers/bluetooth/hci_serdev.c | 2 +- drivers/bluetooth/hci_vhci.c | 2 +- drivers/bluetooth/virtio_bt.c | 2 +- include/net/bluetooth/hci_core.h | 7 ++++++- net/bluetooth/hci_core.c | 11 +++++++++-- 18 files changed, 31 insertions(+), 19 deletions(-) diff --git a/drivers/bluetooth/bfusb.c b/drivers/bluetooth/bfusb.c index 5a321b4076aa..430e230999fa 100644 --- a/drivers/bluetooth/bfusb.c +++ b/drivers/bluetooth/bfusb.c @@ -651,7 +651,7 @@ static int bfusb_probe(struct usb_interface *intf, const struct usb_device_id *i release_firmware(firmware); /* Initialize and register HCI device */ - hdev = hci_alloc_dev(); + hdev = hci_alloc_dev(0); if (!hdev) { BT_ERR("Can't allocate HCI device"); goto done; diff --git a/drivers/bluetooth/bluecard_cs.c b/drivers/bluetooth/bluecard_cs.c index 36eabf61717f..d62b878aff7e 100644 --- a/drivers/bluetooth/bluecard_cs.c +++ b/drivers/bluetooth/bluecard_cs.c @@ -694,7 +694,7 @@ static int bluecard_open(struct bluecard_info *info) info->rx_skb = NULL; /* Initialize HCI device */ - hdev = hci_alloc_dev(); + hdev = hci_alloc_dev(0); if (!hdev) { BT_ERR("Can't allocate HCI device"); return -ENOMEM; diff --git a/drivers/bluetooth/bpa10x.c b/drivers/bluetooth/bpa10x.c index 1fa58c059cbf..bd670352a336 100644 --- a/drivers/bluetooth/bpa10x.c +++ b/drivers/bluetooth/bpa10x.c @@ -380,7 +380,7 @@ static int bpa10x_probe(struct usb_interface *intf, init_usb_anchor(&data->tx_anchor); init_usb_anchor(&data->rx_anchor); - hdev = hci_alloc_dev(); + hdev = hci_alloc_dev(0); if (!hdev) return -ENOMEM; diff --git a/drivers/bluetooth/bt3c_cs.c b/drivers/bluetooth/bt3c_cs.c index 54713833951a..cd135a736688 100644 --- a/drivers/bluetooth/bt3c_cs.c +++ b/drivers/bluetooth/bt3c_cs.c @@ -550,7 +550,7 @@ static int bt3c_open(struct bt3c_info *info) info->rx_skb = NULL; /* Initialize HCI device */ - hdev = hci_alloc_dev(); + hdev = hci_alloc_dev(0); if (!hdev) { BT_ERR("Can't allocate HCI device"); return -ENOMEM; diff --git a/drivers/bluetooth/btmrvl_main.c b/drivers/bluetooth/btmrvl_main.c index 8b9d78ce6bb2..0157fa4ce528 100644 --- a/drivers/bluetooth/btmrvl_main.c +++ b/drivers/bluetooth/btmrvl_main.c @@ -680,7 +680,7 @@ int btmrvl_register_hdev(struct btmrvl_private *priv) struct btmrvl_sdio_card *card = priv->btmrvl_dev.card; int ret; - hdev = hci_alloc_dev(); + hdev = hci_alloc_dev(0); if (!hdev) { BT_ERR("Can not allocate HCI device"); goto err_hdev; diff --git a/drivers/bluetooth/btmtksdio.c b/drivers/bluetooth/btmtksdio.c index 9872ef18f9fe..b48aec25c09d 100644 --- a/drivers/bluetooth/btmtksdio.c +++ b/drivers/bluetooth/btmtksdio.c @@ -959,7 +959,7 @@ static int btmtksdio_probe(struct sdio_func *func, skb_queue_head_init(&bdev->txq); /* Initialize and register HCI device */ - hdev = hci_alloc_dev(); + hdev = hci_alloc_dev(0); if (!hdev) { dev_err(&func->dev, "Can't allocate HCI device\n"); return -ENOMEM; diff --git a/drivers/bluetooth/btmtkuart.c b/drivers/bluetooth/btmtkuart.c index e9d91d7c0db4..96ee364507c5 100644 --- a/drivers/bluetooth/btmtkuart.c +++ b/drivers/bluetooth/btmtkuart.c @@ -987,7 +987,7 @@ static int btmtkuart_probe(struct serdev_device *serdev) skb_queue_head_init(&bdev->txq); /* Initialize and register HCI device */ - hdev = hci_alloc_dev(); + hdev = hci_alloc_dev(0); if (!hdev) { dev_err(&serdev->dev, "Can't allocate HCI device\n"); return -ENOMEM; diff --git a/drivers/bluetooth/btqcomsmd.c b/drivers/bluetooth/btqcomsmd.c index 2acb719e596f..47aaffceb8c1 100644 --- a/drivers/bluetooth/btqcomsmd.c +++ b/drivers/bluetooth/btqcomsmd.c @@ -147,7 +147,7 @@ static int btqcomsmd_probe(struct platform_device *pdev) goto destroy_acl_channel; } - hdev = hci_alloc_dev(); + hdev = hci_alloc_dev(0); if (!hdev) { ret = -ENOMEM; goto destroy_cmd_channel; diff --git a/drivers/bluetooth/btrsi.c b/drivers/bluetooth/btrsi.c index bea1595f6432..90e398c42a41 100644 --- a/drivers/bluetooth/btrsi.c +++ b/drivers/bluetooth/btrsi.c @@ -121,7 +121,7 @@ static int rsi_hci_attach(void *priv, struct rsi_proto_ops *ops) ops->set_bt_context(priv, h_adapter); h_adapter->proto_ops = ops; - hdev = hci_alloc_dev(); + hdev = hci_alloc_dev(0); if (!hdev) { BT_ERR("Failed to alloc HCI device"); goto err; diff --git a/drivers/bluetooth/btsdio.c b/drivers/bluetooth/btsdio.c index 199e8f7d426d..69d2a26ed5db 100644 --- a/drivers/bluetooth/btsdio.c +++ b/drivers/bluetooth/btsdio.c @@ -310,7 +310,7 @@ static int btsdio_probe(struct sdio_func *func, skb_queue_head_init(&data->txq); - hdev = hci_alloc_dev(); + hdev = hci_alloc_dev(0); if (!hdev) return -ENOMEM; diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c index a9855a2dd561..66936a1862e3 100644 --- a/drivers/bluetooth/btusb.c +++ b/drivers/bluetooth/btusb.c @@ -4560,7 +4560,7 @@ static int btusb_probe(struct usb_interface *intf, data->recv_bulk = btusb_recv_bulk; } - hdev = hci_alloc_dev(); + hdev = hci_alloc_dev(0); if (!hdev) return -ENOMEM; diff --git a/drivers/bluetooth/dtl1_cs.c b/drivers/bluetooth/dtl1_cs.c index 2adfe4fade76..f06c8151f0ea 100644 --- a/drivers/bluetooth/dtl1_cs.c +++ b/drivers/bluetooth/dtl1_cs.c @@ -449,7 +449,7 @@ static int dtl1_open(struct dtl1_info *info) set_bit(XMIT_WAITING, &(info->tx_state)); /* Initialize HCI device */ - hdev = hci_alloc_dev(); + hdev = hci_alloc_dev(0); if (!hdev) { BT_ERR("Can't allocate HCI device"); return -ENOMEM; diff --git a/drivers/bluetooth/hci_ldisc.c b/drivers/bluetooth/hci_ldisc.c index 71a4ca505e09..7ad61bdb2023 100644 --- a/drivers/bluetooth/hci_ldisc.c +++ b/drivers/bluetooth/hci_ldisc.c @@ -627,7 +627,7 @@ static int hci_uart_register_dev(struct hci_uart *hu) BT_DBG(""); /* Initialize and register HCI device */ - hdev = hci_alloc_dev(); + hdev = hci_alloc_dev(0); if (!hdev) { BT_ERR("Can't allocate HCI device"); return -ENOMEM; diff --git a/drivers/bluetooth/hci_serdev.c b/drivers/bluetooth/hci_serdev.c index 3b00d82d36cf..327fa2ecc5e7 100644 --- a/drivers/bluetooth/hci_serdev.c +++ b/drivers/bluetooth/hci_serdev.c @@ -313,7 +313,7 @@ int hci_uart_register_device(struct hci_uart *hu, set_bit(HCI_UART_PROTO_READY, &hu->flags); /* Initialize and register HCI device */ - hdev = hci_alloc_dev(); + hdev = hci_alloc_dev(0); if (!hdev) { BT_ERR("Can't allocate HCI device"); err = -ENOMEM; diff --git a/drivers/bluetooth/hci_vhci.c b/drivers/bluetooth/hci_vhci.c index 8ab26dec5f6e..5486aa3945da 100644 --- a/drivers/bluetooth/hci_vhci.c +++ b/drivers/bluetooth/hci_vhci.c @@ -96,7 +96,7 @@ static int __vhci_create_device(struct vhci_data *data, __u8 opcode) if (!skb) return -ENOMEM; - hdev = hci_alloc_dev(); + hdev = hci_alloc_dev(0); if (!hdev) { kfree_skb(skb); return -ENOMEM; diff --git a/drivers/bluetooth/virtio_bt.c b/drivers/bluetooth/virtio_bt.c index 57908ce4fae8..28576ec4860e 100644 --- a/drivers/bluetooth/virtio_bt.c +++ b/drivers/bluetooth/virtio_bt.c @@ -283,7 +283,7 @@ static int virtbt_probe(struct virtio_device *vdev) if (err) return err; - hdev = hci_alloc_dev(); + hdev = hci_alloc_dev(0); if (!hdev) { err = -ENOMEM; goto failed; diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h index a53e94459ecd..5c689c5dc089 100644 --- a/include/net/bluetooth/hci_core.h +++ b/include/net/bluetooth/hci_core.h @@ -1223,10 +1223,15 @@ static inline void hci_set_drvdata(struct hci_dev *hdev, void *data) dev_set_drvdata(&hdev->dev, data); } +static inline void *hci_get_priv(struct hci_dev *hdev) +{ + return (char *)hdev + sizeof(*hdev); +} + struct hci_dev *hci_dev_get(int index); struct hci_dev *hci_get_route(bdaddr_t *dst, bdaddr_t *src, u8 src_type); -struct hci_dev *hci_alloc_dev(void); +struct hci_dev *hci_alloc_dev(int sizeof_priv); void hci_free_dev(struct hci_dev *hdev); int hci_register_dev(struct hci_dev *hdev); void hci_unregister_dev(struct hci_dev *hdev); diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c index 2560ed2f144d..66b72c7efa3d 100644 --- a/net/bluetooth/hci_core.c +++ b/net/bluetooth/hci_core.c @@ -3751,11 +3751,18 @@ static int hci_suspend_notifier(struct notifier_block *nb, unsigned long action, } /* Alloc HCI device */ -struct hci_dev *hci_alloc_dev(void) +struct hci_dev *hci_alloc_dev(int sizeof_priv) { struct hci_dev *hdev; + unsigned int alloc_size; - hdev = kzalloc(sizeof(*hdev), GFP_KERNEL); + alloc_size = sizeof(*hdev); + if (sizeof_priv) { + /* Fixme: May need ALIGN-ment? */ + alloc_size += sizeof_priv; + } + + hdev = kzalloc(alloc_size, GFP_KERNEL); if (!hdev) return NULL; From patchwork Sat Jul 24 07:30:00 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tedd Ho-Jeong An X-Patchwork-Id: 485352 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI, SPF_HELO_NONE, SPF_PASS, URIBL_BLOCKED, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 76AB7C4338F for ; Sat, 24 Jul 2021 07:30:30 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 597DD60E95 for ; Sat, 24 Jul 2021 07:30:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234426AbhGXGtw (ORCPT ); Sat, 24 Jul 2021 02:49:52 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37024 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234397AbhGXGtl (ORCPT ); Sat, 24 Jul 2021 02:49:41 -0400 Received: from mail-pj1-x1031.google.com (mail-pj1-x1031.google.com [IPv6:2607:f8b0:4864:20::1031]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B1DB5C061757 for ; Sat, 24 Jul 2021 00:30:13 -0700 (PDT) Received: by mail-pj1-x1031.google.com with SMTP id m10-20020a17090a34cab0290176b52c60ddso759391pjf.4 for ; Sat, 24 Jul 2021 00:30:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=VbbmPw8vR3BBd6gB/L4mpzhjv7254V/N45lgT3oRR6s=; b=LmgDDHqwnATAXd70bTpDcwsTGEs/RYibRKlj+o7WF7vL3ENfdvK+357E/XUu/xfvp8 zjPf2pXLQvpbDVvfLxsxJ+VSRBSHaET3qgZgzNeGDJxHmTqWiUVpRa8mQ34gkpYHlvfQ 5+LlmXXZNXaxyVvMz8KCZfjgHeLMcVK9pfT0cixX4ncCJAJOTJ2O6hYxliu6gzJxKiwJ CE2oYL6vcYUU9iiA3hgCaH/ci7O6kXOkmlMgs64rqqwRiYPs3nnY95Nv3iTogn0Ya3CN MF1SATgNuSYaxvtArKcHHlaxEIm2o0T47ig+/0WaDq3aF96Zh812gvOxzWM5r52/bkg8 R6Xw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=VbbmPw8vR3BBd6gB/L4mpzhjv7254V/N45lgT3oRR6s=; b=SUQsMQTxfwrRRp0PJmz0kvuatKN3ZeGjVpgHZbbRTPpMkFE+I4QHKW2aOeLLFAtItl mm1F9yJJzhfIobstz6FFRCDRIBMRN1LDzEe5vzT+dRwSmjUGmsaBhEhYfzItnSLgL6Yk RVOSAOA1bTC7v7YMEAuGZNzGOhC1UZIs7zt2X2wYz+tIxAnv5TpwVV91jOTxmWSFyXcL woLFm//8UMtPwRcDWfokeIsSGw1NLEpyLBZ6XVZbdtaRWdZ3wcwC1mRXpZ3dwJL0zlSF 9ItHXvrBoVyDO+TvmOH2jJ7QKyy7WR08JFhwd7LIK9ddYqu5XoKI/p8iNApwT1YHb+KB jrPQ== X-Gm-Message-State: AOAM5336iU8TjYobPU1Q8S1MgvdvEzr8NndZDMRs9DC32KnCFrkFXsCU wpyiERw7ox09wJ4pL++4n0s5RMPr32Y= X-Google-Smtp-Source: ABdhPJwau0KKxlcDbMZjUJvSjB6ID2QQhy3MY7B7KJGQQRXTVd2UgYM0w3Zg8xplveaDJ+hLz1FjhA== X-Received: by 2002:a17:902:aa08:b029:12b:888b:1d7f with SMTP id be8-20020a170902aa08b029012b888b1d7fmr6637925plb.55.1627111813123; Sat, 24 Jul 2021 00:30:13 -0700 (PDT) Received: from localhost.localdomain ([2601:1c0:6a01:d830::1291]) by smtp.gmail.com with ESMTPSA id u24sm38510919pfm.141.2021.07.24.00.30.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 24 Jul 2021 00:30:12 -0700 (PDT) From: Tedd Ho-Jeong An To: linux-bluetooth@vger.kernel.org Cc: Tedd Ho-Jeong An Subject: [RFC PATCH v3 4/9] Bluetooth: btintel: Add btintel data struct Date: Sat, 24 Jul 2021 00:30:00 -0700 Message-Id: <20210724073005.714003-5-hj.tedd.an@gmail.com> X-Mailer: git-send-email 2.26.3 In-Reply-To: <20210724073005.714003-1-hj.tedd.an@gmail.com> References: <20210724073005.714003-1-hj.tedd.an@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org From: Tedd Ho-Jeong An This patch adds a data structure for btintel for btintel object, and the definition of bootloder states. Signed-off-by: Tedd Ho-Jeong An --- drivers/bluetooth/btintel.c | 8 ++++++++ drivers/bluetooth/btintel.h | 15 +++++++++++++++ drivers/bluetooth/btusb.c | 6 ++++-- 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/drivers/bluetooth/btintel.c b/drivers/bluetooth/btintel.c index cfef6d9879fe..5ad005dd6775 100644 --- a/drivers/bluetooth/btintel.c +++ b/drivers/bluetooth/btintel.c @@ -1767,6 +1767,14 @@ int btintel_shutdown_combined(struct hci_dev *hdev) } EXPORT_SYMBOL_GPL(btintel_shutdown_combined); +void btintel_set_flags(struct hci_dev *hdev, unsigned int flag) +{ + struct btintel_data *intel = hci_get_priv(hdev); + + set_bit(flag, &intel->flags); +} +EXPORT_SYMBOL_GPL(btintel_set_flags); + MODULE_AUTHOR("Marcel Holtmann "); MODULE_DESCRIPTION("Bluetooth support for Intel devices ver " VERSION); MODULE_VERSION(VERSION); diff --git a/drivers/bluetooth/btintel.h b/drivers/bluetooth/btintel.h index 68ffa84fa87a..df7aa30142b4 100644 --- a/drivers/bluetooth/btintel.h +++ b/drivers/bluetooth/btintel.h @@ -138,6 +138,16 @@ struct intel_debug_features { #define INTEL_CNVX_TOP_STEP(cnvx_top) (((cnvx_top) & 0x0f000000) >> 24) #define INTEL_CNVX_TOP_PACK_SWAB(t, s) __swab16(((__u16)(((t) << 4) | (s)))) +#define INTEL_BOOTLOADER 0 +#define INTEL_DOWNLOADING 1 +#define INTEL_FIRMWARE_LOADED 2 +#define INTEL_FIRMWARE_FAILED 3 +#define INTEL_BOOTING 4 + +struct btintel_data { + unsigned long flags; +}; + #if IS_ENABLED(CONFIG_BT_INTEL) int btintel_check_bdaddr(struct hci_dev *hdev); @@ -167,6 +177,7 @@ int btintel_download_firmware(struct hci_dev *dev, struct intel_version *ver, const struct firmware *fw, u32 *boot_param); int btintel_setup_combined(struct hci_dev *hdev); int btintel_shutdown_combined(struct hci_dev *hdev); +void btintel_set_flags(struct hci_dev *hdev, unsigned int flag); int btintel_download_firmware_newgen(struct hci_dev *hdev, struct intel_version_tlv *ver, const struct firmware *fw, @@ -295,6 +306,10 @@ static inline int btintel_shutdown_combined(struct hci_dev *hdev) return -EOPNOTSUPP; } +static inline void btintel_set_flags(struct hci_dev *hdev, unsigned int flag) +{ +} + static inline int btintel_download_firmware_newgen(struct hci_dev *hdev, const struct firmware *fw, u32 *boot_param, diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c index f19d438affcb..1ad066ef06f7 100644 --- a/drivers/bluetooth/btusb.c +++ b/drivers/bluetooth/btusb.c @@ -4118,7 +4118,7 @@ static int btusb_probe(struct usb_interface *intf, struct btusb_data *data; struct hci_dev *hdev; unsigned ifnum_base; - int i, err; + int i, err, priv_size; BT_DBG("intf %p id %p", intf, id); @@ -4204,6 +4204,8 @@ static int btusb_probe(struct usb_interface *intf, init_usb_anchor(&data->ctrl_anchor); spin_lock_init(&data->rxlock); + priv_size = 0; + if (id->driver_info & BTUSB_INTEL_NEW) { data->recv_event = btusb_recv_event_intel; data->recv_bulk = btusb_recv_bulk_intel; @@ -4213,7 +4215,7 @@ static int btusb_probe(struct usb_interface *intf, data->recv_bulk = btusb_recv_bulk; } - hdev = hci_alloc_dev(0); + hdev = hci_alloc_dev(priv_size); if (!hdev) return -ENOMEM; From patchwork Sat Jul 24 07:30:01 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tedd Ho-Jeong An X-Patchwork-Id: 485353 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI, SPF_HELO_NONE, SPF_PASS, URIBL_BLOCKED, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5E13BC432BE for ; Sat, 24 Jul 2021 07:30:24 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 4223660E93 for ; Sat, 24 Jul 2021 07:30:24 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234419AbhGXGtu (ORCPT ); Sat, 24 Jul 2021 02:49:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37018 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234403AbhGXGtm (ORCPT ); Sat, 24 Jul 2021 02:49:42 -0400 Received: from mail-pj1-x1033.google.com (mail-pj1-x1033.google.com [IPv6:2607:f8b0:4864:20::1033]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 94BC7C061575 for ; Sat, 24 Jul 2021 00:30:14 -0700 (PDT) Received: by mail-pj1-x1033.google.com with SMTP id m10-20020a17090a34cab0290176b52c60ddso759426pjf.4 for ; Sat, 24 Jul 2021 00:30:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=CCrpRmJT/KyYZHmTmn5ywUeXiLYiINnwUWDpxsHKBfc=; b=aszbt8K+3MuC1I2RgpRl8qBdK3BS9f+ZfHHDOLD/9Dyqwio56VNT5V1AB2p598zO/9 auHv4SFILH5JZXoC3PWT1ONyOhRmb7xaYwPHlyuZpLdRj7kcrqNzfxygZ6/XIgvTc1Jw ZaSb9Zhw04/VYZkvf5Eo+ETyHFxMpnRRR9xozhG/gP1eOIV77NTLq/1Z15UjEXspdq7r X8tJQxNrFqNE0derSBQ47xdvCLPP8UvPahRyDPAcPQ6T3tYiJqNS5un/qPjElsfTl6bw fs+0nGg5jrXwjtf61kOPB23cElbS2dO6/b4Jy61ooFQjVUrgYRptzzIsAMyLXSHpFEIV tP1w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=CCrpRmJT/KyYZHmTmn5ywUeXiLYiINnwUWDpxsHKBfc=; b=Edv1Ct98OIpPHCdNZZDhE2fb6ckv8wGX6D5Jp33egnB+cbYOaYMiuAo2hNxiXCX4D4 1UCY5+rFXqXbaW6PSJXvuLawCSg6ZacE9jlBqtPBgZ3cKT0NhZcHHXh7Zwst3vzIR0Jb 3PonSBZFL9/EmcdZm0iypaR0Q5OGsvn7JZSlvpJQU41BjRTNAnJCSubkeno5EzwZhVJo 86EXUvxjfCAwCl4IoxIPDMYcroBysM/IlgiowY6mVX0twpaWQ4it6ou457m+clkaIW1e mqDivRbzETMyuVFME8ornv4Erm2Em9yqcE1JH9iLlpfKqgH6m1PvY7qqQyisy11gLlQ1 X+0A== X-Gm-Message-State: AOAM5328vg2arM6bEAklJd+WkCwp6SJnVZ3x7kPQi97so4qUR1+XaaFA q3nytMMocUNBlewb53x26vrtEl5jZf8= X-Google-Smtp-Source: ABdhPJxdquViqcb8MlZ7NnR2AFFyvjB7pVBwbnfBYHYvaGbDz6GoUCZFhFRRlHfCO8uqMtz8TxDTKg== X-Received: by 2002:a17:902:9688:b029:129:183a:2a61 with SMTP id n8-20020a1709029688b0290129183a2a61mr6606050plp.27.1627111813965; Sat, 24 Jul 2021 00:30:13 -0700 (PDT) Received: from localhost.localdomain ([2601:1c0:6a01:d830::1291]) by smtp.gmail.com with ESMTPSA id u24sm38510919pfm.141.2021.07.24.00.30.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 24 Jul 2021 00:30:13 -0700 (PDT) From: Tedd Ho-Jeong An To: linux-bluetooth@vger.kernel.org Cc: Tedd Ho-Jeong An Subject: [RFC PATCH v3 5/9] Bluetooth: btintel: Fix the first HCI command not work with ROM device. Date: Sat, 24 Jul 2021 00:30:01 -0700 Message-Id: <20210724073005.714003-6-hj.tedd.an@gmail.com> X-Mailer: git-send-email 2.26.3 In-Reply-To: <20210724073005.714003-1-hj.tedd.an@gmail.com> References: <20210724073005.714003-1-hj.tedd.an@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org From: Tedd Ho-Jeong An The some legacy ROM controllers have a bug with the first HCI command sent to it returning number of completed commands as zero, which would stall the command processing in the Bluetooth core. As a workaround, send HCI Rest command first which will reset the controller to fix the issue. Signed-off-by: Tedd Ho-Jeong An --- drivers/bluetooth/btintel.c | 21 +++++++++++++++++++++ drivers/bluetooth/btintel.h | 1 + drivers/bluetooth/btusb.c | 16 ++++++++++++++-- 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/drivers/bluetooth/btintel.c b/drivers/bluetooth/btintel.c index 5ad005dd6775..dd319306ebb0 100644 --- a/drivers/bluetooth/btintel.c +++ b/drivers/bluetooth/btintel.c @@ -1659,6 +1659,7 @@ static int btintel_legacy_rom_setup(struct hci_dev *hdev, int btintel_setup_combined(struct hci_dev *hdev) { + struct btintel_data *intel = hci_get_priv(hdev); const u8 param[1] = { 0xFF }; struct intel_version ver; struct intel_version_tlv ver_tlv; @@ -1667,6 +1668,26 @@ int btintel_setup_combined(struct hci_dev *hdev) BT_DBG("%s", hdev->name); + /* The some controllers have a bug with the first HCI command sent to it + * returning number of completed commands as zero. This would stall the + * command processing in the Bluetooth core. + * + * As a workaround, send HCI Reset command first which will reset the + * number of completed commands and allow normal command processing + * from now on. + */ + if (test_bit(INTEL_BROKEN_READ_VERSION, &intel->flags)) { + skb = __hci_cmd_sync(hdev, HCI_OP_RESET, 0, NULL, + HCI_INIT_TIMEOUT); + if (IS_ERR(skb)) { + bt_dev_err(hdev, + "sending initial HCI reset failed (%ld)", + PTR_ERR(skb)); + return PTR_ERR(skb); + } + kfree_skb(skb); + } + /* Starting from TyP device, the command parameter and response are * changed even though the OCF for HCI_Intel_Read_Version command * remains same. The legacy devices can handle even if the diff --git a/drivers/bluetooth/btintel.h b/drivers/bluetooth/btintel.h index df7aa30142b4..29b678364a79 100644 --- a/drivers/bluetooth/btintel.h +++ b/drivers/bluetooth/btintel.h @@ -143,6 +143,7 @@ struct intel_debug_features { #define INTEL_FIRMWARE_LOADED 2 #define INTEL_FIRMWARE_FAILED 3 #define INTEL_BOOTING 4 +#define INTEL_BROKEN_READ_VERSION 5 struct btintel_data { unsigned long flags; diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c index 1ad066ef06f7..53bfe831b7bc 100644 --- a/drivers/bluetooth/btusb.c +++ b/drivers/bluetooth/btusb.c @@ -62,6 +62,7 @@ static struct usb_driver btusb_driver; #define BTUSB_QCA_WCN6855 0x1000000 #define BTUSB_INTEL_NEWGEN 0x2000000 #define BTUSB_INTEL_COMBINED 0x4000000 +#define BTUSB_INTEL_BROKEN_READ_VERSION 0x8000000 static const struct usb_device_id btusb_table[] = { /* Generic Bluetooth USB device */ @@ -374,11 +375,14 @@ static const struct usb_device_id blacklist_table[] = { { USB_DEVICE(0x8087, 0x0033), .driver_info = BTUSB_INTEL_NEWGEN | BTUSB_WIDEBAND_SPEECH}, { USB_DEVICE(0x8087, 0x07da), .driver_info = BTUSB_CSR }, - { USB_DEVICE(0x8087, 0x07dc), .driver_info = BTUSB_INTEL_COMBINED }, - { USB_DEVICE(0x8087, 0x0a2a), .driver_info = BTUSB_INTEL_COMBINED }, + { USB_DEVICE(0x8087, 0x07dc), .driver_info = BTUSB_INTEL_COMBINED | + BTUSB_INTEL_BROKEN_READ_VERSION }, + { USB_DEVICE(0x8087, 0x0a2a), .driver_info = BTUSB_INTEL_COMBINED | + BTUSB_INTEL_BROKEN_READ_VERSION }, { USB_DEVICE(0x8087, 0x0a2b), .driver_info = BTUSB_INTEL_NEW | BTUSB_WIDEBAND_SPEECH }, { USB_DEVICE(0x8087, 0x0aa7), .driver_info = BTUSB_INTEL_COMBINED | + BTUSB_INTEL_BROKEN_READ_VERSION | BTUSB_WIDEBAND_SPEECH }, { USB_DEVICE(0x8087, 0x0aaa), .driver_info = BTUSB_INTEL_NEW | BTUSB_WIDEBAND_SPEECH | @@ -4206,6 +4210,11 @@ static int btusb_probe(struct usb_interface *intf, priv_size = 0; + if (id->driver_info & BTUSB_INTEL_COMBINED) { + /* Allocate extra space for Intel device */ + priv_size += sizeof(struct btintel_data); + } + if (id->driver_info & BTUSB_INTEL_NEW) { data->recv_event = btusb_recv_event_intel; data->recv_bulk = btusb_recv_bulk_intel; @@ -4300,6 +4309,9 @@ static int btusb_probe(struct usb_interface *intf, 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_INTEL_BROKEN_READ_VERSION) + btintel_set_flags(hdev, INTEL_BROKEN_READ_VERSION); } if (id->driver_info & BTUSB_INTEL_NEW) { From patchwork Sat Jul 24 07:30:02 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tedd Ho-Jeong An X-Patchwork-Id: 485351 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI, SPF_HELO_NONE, SPF_PASS, URIBL_BLOCKED, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id E3CEDC432BE for ; Sat, 24 Jul 2021 07:30:38 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id CC96D60E95 for ; Sat, 24 Jul 2021 07:30:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234410AbhGXGuD (ORCPT ); Sat, 24 Jul 2021 02:50:03 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37020 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234405AbhGXGtm (ORCPT ); Sat, 24 Jul 2021 02:49:42 -0400 Received: from mail-pl1-x62b.google.com (mail-pl1-x62b.google.com [IPv6:2607:f8b0:4864:20::62b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 65B5AC06175F for ; Sat, 24 Jul 2021 00:30:15 -0700 (PDT) Received: by mail-pl1-x62b.google.com with SMTP id i1so5705159plr.9 for ; Sat, 24 Jul 2021 00:30:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=oS4zyXwkKzlV7BHgukdVYjQlHtxq+306pU78M8tJwAw=; b=GNZw90kRXTwOq23iG5bJvaVXXj7kQxxbNiNzVlOm1jhjir3PjZaA9A4Ix5YAj9DUDk 79nGsy223KwdZNU5+xMiEli2pbLpBgMgx/6Pl53gudX5Xi94p88rvHSHY/ap0KAYpmU+ mmkqf7J2DzolmjLnPlZW3FbF6TILV0p4fzGlsDbwxnpI9VM8Gb9VR1lgidzFEZAoY4Bs X9YteZyxxm91+cP779Jy+/or2mdGus2fU8Yb0FVcBmyt1p2N50RTVWKn9j0OsFInpcrg RurY7glc3pvaXsL9BMn4+ihtehcNJodNlWq2eg1BH+g6vA6oaRX3v77dnSWQsu0xyYz3 jXtg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=oS4zyXwkKzlV7BHgukdVYjQlHtxq+306pU78M8tJwAw=; b=KIvAeO2OJhDhBE+qc8pcErOWNVUP82YksDrJui1uouP3swQRQQbdKY3mFYfotX6ukV vkclacww6byN8EhwQYzNUZ/CqeYTlNEKvZwMOzH7kPznNf+vVWbFQ1mJI+xujgeS3wUn tz7nqgJnfeK+JPy8X4xehKzRvN3gm267hgEl7deKEe2/UsWsCw194k3jwwIVOGkbgok4 I9uf/V/CEd6wCnjw8G+tjtvCXrqm+9kEU7wi45kVy3lAH04UxLvUTJ3sREtMz3/MPqqk CDpXe/29+70co7NTN78B7HP/nqMSEyYUV/ORj9p6s/nYSnxDlJDQqoZDLvCkw6i0b3fo tQRw== X-Gm-Message-State: AOAM533Z2ffI842AAU3YI+DCEYb7RrjWklkoXQwrFk+cA8QzzWqsvViO +oRL+rS2s5Z4Vs2v7vjgAyzdAcHgPpM= X-Google-Smtp-Source: ABdhPJzsFkuMnTqEj6GIyB5pKn84LaNEnohKq8qoQcoPpoUTcCejUg9bHp9JeGd7QsaqaG5MBt8NXA== X-Received: by 2002:a17:90a:564a:: with SMTP id d10mr7924031pji.120.1627111814727; Sat, 24 Jul 2021 00:30:14 -0700 (PDT) Received: from localhost.localdomain ([2601:1c0:6a01:d830::1291]) by smtp.gmail.com with ESMTPSA id u24sm38510919pfm.141.2021.07.24.00.30.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 24 Jul 2021 00:30:14 -0700 (PDT) From: Tedd Ho-Jeong An To: linux-bluetooth@vger.kernel.org Cc: Tedd Ho-Jeong An Subject: [RFC PATCH v3 6/9] Bluetooth: btintel: Add combined set_diag functions Date: Sat, 24 Jul 2021 00:30:02 -0700 Message-Id: <20210724073005.714003-7-hj.tedd.an@gmail.com> X-Mailer: git-send-email 2.26.3 In-Reply-To: <20210724073005.714003-1-hj.tedd.an@gmail.com> References: <20210724073005.714003-1-hj.tedd.an@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org From: Tedd Ho-Jeong An This patch adds a combined set_diag functions. It also changes the btintel_set_diag_mfg() to static since it is no longer used by others. Signed-off-by: Tedd Ho-Jeong An --- drivers/bluetooth/btintel.c | 23 +++++++++++++++++++++-- drivers/bluetooth/btintel.h | 5 +++-- drivers/bluetooth/btusb.c | 2 +- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/drivers/bluetooth/btintel.c b/drivers/bluetooth/btintel.c index dd319306ebb0..7a58bd29fba8 100644 --- a/drivers/bluetooth/btintel.c +++ b/drivers/bluetooth/btintel.c @@ -164,7 +164,7 @@ int btintel_set_diag(struct hci_dev *hdev, bool enable) } EXPORT_SYMBOL_GPL(btintel_set_diag); -int btintel_set_diag_mfg(struct hci_dev *hdev, bool enable) +static int btintel_set_diag_mfg(struct hci_dev *hdev, bool enable) { int err, ret; @@ -180,7 +180,25 @@ int btintel_set_diag_mfg(struct hci_dev *hdev, bool enable) return ret; } -EXPORT_SYMBOL_GPL(btintel_set_diag_mfg); + +int btintel_set_diag_combined(struct hci_dev *hdev, bool enable) +{ + struct btintel_data *intel = hci_get_priv(hdev); + int ret; + + /* Legacy ROM device needs to be in the manufacturer mode to apply + * diagnostic setting + * + * This flag is set after reading the Intel version. + */ + if (test_bit(INTEL_ROM_LEGACY, &intel->flags)) + ret = btintel_set_diag_mfg(hdev, enable); + else + ret = btintel_set_diag(hdev, enable); + + return ret; +} +EXPORT_SYMBOL_GPL(btintel_set_diag_combined); void btintel_hw_error(struct hci_dev *hdev, u8 code) { @@ -1723,6 +1741,7 @@ int btintel_setup_combined(struct hci_dev *hdev) case 0x07: /* WP */ case 0x08: /* StP */ /* Legacy ROM product */ + set_bit(INTEL_ROM_LEGACY, &intel->flags); err = btintel_legacy_rom_setup(hdev, &ver); break; case 0x0b: /* SfP */ diff --git a/drivers/bluetooth/btintel.h b/drivers/bluetooth/btintel.h index 29b678364a79..d41b14208192 100644 --- a/drivers/bluetooth/btintel.h +++ b/drivers/bluetooth/btintel.h @@ -144,6 +144,7 @@ struct intel_debug_features { #define INTEL_FIRMWARE_FAILED 3 #define INTEL_BOOTING 4 #define INTEL_BROKEN_READ_VERSION 5 +#define INTEL_ROM_LEGACY 6 struct btintel_data { unsigned long flags; @@ -156,7 +157,7 @@ int btintel_enter_mfg(struct hci_dev *hdev); int btintel_exit_mfg(struct hci_dev *hdev, bool reset, bool patched); int btintel_set_bdaddr(struct hci_dev *hdev, const bdaddr_t *bdaddr); int btintel_set_diag(struct hci_dev *hdev, bool enable); -int btintel_set_diag_mfg(struct hci_dev *hdev, bool enable); +int btintel_set_diag_combined(struct hci_dev *hdev, bool enable); void btintel_hw_error(struct hci_dev *hdev, u8 code); int btintel_version_info(struct hci_dev *hdev, struct intel_version *ver); @@ -216,7 +217,7 @@ static inline int btintel_set_diag(struct hci_dev *hdev, bool enable) return -EOPNOTSUPP; } -static inline int btintel_set_diag_mfg(struct hci_dev *hdev, bool enable) +static inline int btintel_set_diag_combined(struct hci_dev *hdev, bool enable) { return -EOPNOTSUPP; } diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c index 53bfe831b7bc..2d93c3612043 100644 --- a/drivers/bluetooth/btusb.c +++ b/drivers/bluetooth/btusb.c @@ -4303,7 +4303,7 @@ static int btusb_probe(struct usb_interface *intf, hdev->manufacturer = 2; hdev->setup = btintel_setup_combined; hdev->shutdown = btintel_shutdown_combined; - hdev->set_diag = btintel_set_diag_mfg; + hdev->set_diag = btintel_set_diag_combined; hdev->set_bdaddr = btintel_set_bdaddr; hdev->cmd_timeout = btusb_intel_cmd_timeout; set_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks); From patchwork Sat Jul 24 07:30:05 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tedd Ho-Jeong An X-Patchwork-Id: 485350 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.8 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI, SPF_HELO_NONE, SPF_PASS, URIBL_BLOCKED, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9C6DFC432BE for ; Sat, 24 Jul 2021 07:30:41 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 822E060E93 for ; Sat, 24 Jul 2021 07:30:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234438AbhGXGuH (ORCPT ); Sat, 24 Jul 2021 02:50:07 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37042 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234415AbhGXGtp (ORCPT ); Sat, 24 Jul 2021 02:49:45 -0400 Received: from mail-pj1-x102d.google.com (mail-pj1-x102d.google.com [IPv6:2607:f8b0:4864:20::102d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BB481C061757 for ; Sat, 24 Jul 2021 00:30:17 -0700 (PDT) Received: by mail-pj1-x102d.google.com with SMTP id mt6so5455153pjb.1 for ; Sat, 24 Jul 2021 00:30:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=YxaFBMsYDi+hNCGaU6o4sevzKOP3SSvDUHNAJc+DsSU=; b=M3mlCfc1dmEeNQN10Oqa9PEubKutRXwdnXyIwUKhCwcUAtpoVv393VkYlDu/t4tZXr n+weRBgcgHMBksTSU+2M6n50Vbq+kBSnYAk8sfCl7vMVDoCdM2EfFpJqi3eDVs6u5f7F 0d9QunUImZNY67DmgVjKPLhi8FWeFHCprAEXy7vC3x8VK3h9NLPm9rHc0z9+vi5oJVwP YZo6FcLb3CCHo24Q5i33Qsj13skC0I/eFAzuXaB+K56yCWFUo5aB5MsWyyJjN3ZhW1bl tTq3IIagJhiNgS8GN6VGJxN77OSvc5fu2xo8dtuPcAo8ka2bOVZOeyuz5Qq9YX9vPf2l OO0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=YxaFBMsYDi+hNCGaU6o4sevzKOP3SSvDUHNAJc+DsSU=; b=QYlIyvAveHpFjCcg2w/lMy1a70vylTZrJbXa4ECp+DLkFSZQF7kL0MT4fqcGkMzKFI TpuA6YkeljtEm2utNKM4sgAwe23x23ZXk3o3W76vyJnFRpiLVAywb+1oc7bSqAhXWIBB 0T1NTDC1OroxfNYhiiUOIUB52WL3zFIMEEz+asNa+TWv8jNEB+ehXm2y0QSFJQeln/iP /1ZojMwOPcCMnTEFRiBRUlW4bTewgOnSDpqeGj/Nlb7ESX02BJUm+qcKDShggawlLv5a y34CbQQTAcAOGcNg04yZT7lx5LSJ7WgxkxriQ5ElPjUDs9ro6XbUI47nojyjJ89kxoqV jWng== X-Gm-Message-State: AOAM5330lfUzvR6MbKmle6gjC7AoDDuwWmFy37NtjcQu02eHl55JhGWj krCSTgfuEU7YGcXtBTTl0p7ATbUu5I8= X-Google-Smtp-Source: ABdhPJwjPlVG7vwvU2fNlfC6SP+qhSo7Tlo2sT40C64lIsayPX8W/+sw9GoAsH0eIVebOXlp0LFE/g== X-Received: by 2002:a05:6a00:bd3:b029:329:3e4f:eadb with SMTP id x19-20020a056a000bd3b02903293e4feadbmr8001815pfu.44.1627111817123; Sat, 24 Jul 2021 00:30:17 -0700 (PDT) Received: from localhost.localdomain ([2601:1c0:6a01:d830::1291]) by smtp.gmail.com with ESMTPSA id u24sm38510919pfm.141.2021.07.24.00.30.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 24 Jul 2021 00:30:16 -0700 (PDT) From: Tedd Ho-Jeong An To: linux-bluetooth@vger.kernel.org Cc: Tedd Ho-Jeong An Subject: [RFC PATCH v3 9/9] Bluetooth: btintel: Clean the exported function to static Date: Sat, 24 Jul 2021 00:30:05 -0700 Message-Id: <20210724073005.714003-10-hj.tedd.an@gmail.com> X-Mailer: git-send-email 2.26.3 In-Reply-To: <20210724073005.714003-1-hj.tedd.an@gmail.com> References: <20210724073005.714003-1-hj.tedd.an@gmail.com> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-bluetooth@vger.kernel.org From: Tedd Ho-Jeong An This patch changes the exported functions to static if they are no longer used by others. Signed-off-by: Tedd Ho-Jeong An --- drivers/bluetooth/btintel.c | 65 +++++++++++++++++-------------------- drivers/bluetooth/btintel.h | 50 ---------------------------- 2 files changed, 30 insertions(+), 85 deletions(-) diff --git a/drivers/bluetooth/btintel.c b/drivers/bluetooth/btintel.c index df9f31c77d79..a0452a63e09b 100644 --- a/drivers/bluetooth/btintel.c +++ b/drivers/bluetooth/btintel.c @@ -131,6 +131,26 @@ int btintel_set_bdaddr(struct hci_dev *hdev, const bdaddr_t *bdaddr) } EXPORT_SYMBOL_GPL(btintel_set_bdaddr); +static int btintel_set_event_mask(struct hci_dev *hdev, bool debug) +{ + u8 mask[8] = { 0x87, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; + struct sk_buff *skb; + int err; + + if (debug) + mask[1] |= 0x62; + + skb = __hci_cmd_sync(hdev, 0xfc52, 8, mask, HCI_INIT_TIMEOUT); + if (IS_ERR(skb)) { + err = PTR_ERR(skb); + bt_dev_err(hdev, "Setting Intel event mask failed (%d)", err); + return err; + } + kfree_skb(skb); + + return 0; +} + int btintel_set_diag(struct hci_dev *hdev, bool enable) { struct sk_buff *skb; @@ -296,8 +316,8 @@ int btintel_version_info(struct hci_dev *hdev, struct intel_version *ver) } EXPORT_SYMBOL_GPL(btintel_version_info); -int btintel_secure_send(struct hci_dev *hdev, u8 fragment_type, u32 plen, - const void *param) +static int btintel_secure_send(struct hci_dev *hdev, u8 fragment_type, u32 plen, + const void *param) { while (plen > 0) { struct sk_buff *skb; @@ -319,7 +339,6 @@ int btintel_secure_send(struct hci_dev *hdev, u8 fragment_type, u32 plen, return 0; } -EXPORT_SYMBOL_GPL(btintel_secure_send); int btintel_load_ddc_config(struct hci_dev *hdev, const char *ddc_name) { @@ -366,27 +385,6 @@ int btintel_load_ddc_config(struct hci_dev *hdev, const char *ddc_name) } EXPORT_SYMBOL_GPL(btintel_load_ddc_config); -int btintel_set_event_mask(struct hci_dev *hdev, bool debug) -{ - u8 mask[8] = { 0x87, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; - struct sk_buff *skb; - int err; - - if (debug) - mask[1] |= 0x62; - - skb = __hci_cmd_sync(hdev, 0xfc52, 8, mask, HCI_INIT_TIMEOUT); - if (IS_ERR(skb)) { - err = PTR_ERR(skb); - bt_dev_err(hdev, "Setting Intel event mask failed (%d)", err); - return err; - } - kfree_skb(skb); - - return 0; -} -EXPORT_SYMBOL_GPL(btintel_set_event_mask); - int btintel_set_event_mask_mfg(struct hci_dev *hdev, bool debug) { int err, ret; @@ -430,7 +428,8 @@ int btintel_read_version(struct hci_dev *hdev, struct intel_version *ver) } EXPORT_SYMBOL_GPL(btintel_read_version); -int btintel_version_info_tlv(struct hci_dev *hdev, struct intel_version_tlv *version) +static int btintel_version_info_tlv(struct hci_dev *hdev, + struct intel_version_tlv *version) { const char *variant; @@ -507,7 +506,6 @@ int btintel_version_info_tlv(struct hci_dev *hdev, struct intel_version_tlv *ver return 0; } -EXPORT_SYMBOL_GPL(btintel_version_info_tlv); static int btintel_parse_version_tlv(struct hci_dev *hdev, struct intel_version_tlv *version, @@ -601,7 +599,8 @@ static int btintel_parse_version_tlv(struct hci_dev *hdev, return 0; } -int btintel_read_version_tlv(struct hci_dev *hdev, struct intel_version_tlv *version) +static int btintel_read_version_tlv(struct hci_dev *hdev, + struct intel_version_tlv *version) { struct sk_buff *skb; const u8 param[1] = { 0xFF }; @@ -628,7 +627,6 @@ int btintel_read_version_tlv(struct hci_dev *hdev, struct intel_version_tlv *ver kfree_skb(skb); return 0; } -EXPORT_SYMBOL_GPL(btintel_read_version_tlv); /* ------- REGMAP IBT SUPPORT ------- */ @@ -1202,7 +1200,7 @@ static int btintel_download_fw_tlv(struct hci_dev *hdev, return 0; } -void btintel_reset_to_bootloader(struct hci_dev *hdev) +static void btintel_reset_to_bootloader(struct hci_dev *hdev) { struct intel_reset params; struct sk_buff *skb; @@ -1245,10 +1243,9 @@ void btintel_reset_to_bootloader(struct hci_dev *hdev) */ msleep(150); } -EXPORT_SYMBOL_GPL(btintel_reset_to_bootloader); -int btintel_read_debug_features(struct hci_dev *hdev, - struct intel_debug_features *features) +static int btintel_read_debug_features(struct hci_dev *hdev, + struct intel_debug_features *features) { struct sk_buff *skb; u8 page_no = 1; @@ -1277,9 +1274,8 @@ int btintel_read_debug_features(struct hci_dev *hdev, kfree_skb(skb); return 0; } -EXPORT_SYMBOL_GPL(btintel_read_debug_features); -int btintel_set_debug_features(struct hci_dev *hdev, +static int btintel_set_debug_features(struct hci_dev *hdev, const struct intel_debug_features *features) { u8 mask[11] = { 0x0a, 0x92, 0x02, 0x07, 0x00, 0x00, 0x00, 0x00, @@ -1304,7 +1300,6 @@ int btintel_set_debug_features(struct hci_dev *hdev, kfree_skb(skb); return 0; } -EXPORT_SYMBOL_GPL(btintel_set_debug_features); static const struct firmware *btintel_legacy_rom_get_fw(struct hci_dev *hdev, struct intel_version *ver) diff --git a/drivers/bluetooth/btintel.h b/drivers/bluetooth/btintel.h index b3535198b90c..493eddac67ac 100644 --- a/drivers/bluetooth/btintel.h +++ b/drivers/bluetooth/btintel.h @@ -161,15 +161,9 @@ int btintel_set_diag_combined(struct hci_dev *hdev, bool enable); void btintel_hw_error(struct hci_dev *hdev, u8 code); int btintel_version_info(struct hci_dev *hdev, struct intel_version *ver); -int btintel_version_info_tlv(struct hci_dev *hdev, struct intel_version_tlv *version); -int btintel_secure_send(struct hci_dev *hdev, u8 fragment_type, u32 plen, - const void *param); int btintel_load_ddc_config(struct hci_dev *hdev, const char *ddc_name); -int btintel_set_event_mask(struct hci_dev *hdev, bool debug); int btintel_set_event_mask_mfg(struct hci_dev *hdev, bool debug); int btintel_read_version(struct hci_dev *hdev, struct intel_version *ver); -int btintel_read_version_tlv(struct hci_dev *hdev, struct intel_version_tlv *ver); - struct regmap *btintel_regmap_init(struct hci_dev *hdev, u16 opcode_read, u16 opcode_write); int btintel_send_intel_reset(struct hci_dev *hdev, u32 boot_param); @@ -180,11 +174,6 @@ int btintel_download_firmware(struct hci_dev *dev, struct intel_version *ver, int btintel_setup_combined(struct hci_dev *hdev); int btintel_shutdown_combined(struct hci_dev *hdev); void btintel_set_flags(struct hci_dev *hdev, unsigned int flag); -void btintel_reset_to_bootloader(struct hci_dev *hdev); -int btintel_read_debug_features(struct hci_dev *hdev, - struct intel_debug_features *features); -int btintel_set_debug_features(struct hci_dev *hdev, - const struct intel_debug_features *features); void btintel_bootup(struct hci_dev *hdev, const void *ptr, unsigned int len); void btintel_secure_send_result(struct hci_dev *hdev, const void *ptr, unsigned int len); @@ -230,29 +219,12 @@ static inline int btintel_version_info(struct hci_dev *hdev, return -EOPNOTSUPP; } -static inline int btintel_version_info_tlv(struct hci_dev *hdev, - struct intel_version_tlv *version) -{ - return -EOPNOTSUPP; -} - -static inline int btintel_secure_send(struct hci_dev *hdev, u8 fragment_type, - u32 plen, const void *param) -{ - return -EOPNOTSUPP; -} - static inline int btintel_load_ddc_config(struct hci_dev *hdev, const char *ddc_name) { return -EOPNOTSUPP; } -static inline int btintel_set_event_mask(struct hci_dev *hdev, bool debug) -{ - return -EOPNOTSUPP; -} - static inline int btintel_set_event_mask_mfg(struct hci_dev *hdev, bool debug) { return -EOPNOTSUPP; @@ -264,12 +236,6 @@ static inline int btintel_read_version(struct hci_dev *hdev, return -EOPNOTSUPP; } -static inline int btintel_read_version_tlv(struct hci_dev *hdev, - struct intel_version_tlv *ver) -{ - return -EOPNOTSUPP; -} - static inline struct regmap *btintel_regmap_init(struct hci_dev *hdev, u16 opcode_read, u16 opcode_write) @@ -310,22 +276,6 @@ static inline void btintel_set_flags(struct hci_dev *hdev, unsigned int flag) { } -static inline void btintel_reset_to_bootloader(struct hci_dev *hdev) -{ -} - -static inline int btintel_read_debug_features(struct hci_dev *hdev, - struct intel_debug_features *features) -{ - return -EOPNOTSUPP; -} - -static inline int btintel_set_debug_features(struct hci_dev *hdev, - const struct intel_debug_features *features) -{ - return -EOPNOTSUPP; -} - static inline void btintel_bootup(struct hci_dev *hdev, const void *ptr, unsigned int len) {