linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v1 1/4] Bluetooth: Keep MSFT extension info throughout a hci_dev's life cycle
@ 2020-12-17  7:17 Miao-chen Chou
  2020-12-17  7:17 ` [PATCH v1 2/4] Bluetooth: btqca: Enable MSFT extension for Qualcomm WCN399x Miao-chen Chou
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Miao-chen Chou @ 2020-12-17  7:17 UTC (permalink / raw)
  To: Bluetooth Kernel Mailing List
  Cc: Alain Michaud, Archie Pusaka, Marcel Holtmann,
	Luiz Augusto von Dentz, Miao-chen Chou, Abhishek Pandit-Subedi,
	David S. Miller, Jakub Kicinski, Johan Hedberg,
	Luiz Augusto von Dentz, linux-kernel, netdev

This moves msft_do_close() from hci_dev_do_close() to
hci_unregister_dev() to avoid clearing MSFT extension info. This also
avoids retrieving MSFT info upon every msft_do_open() if MSFT extension
has been initialized.

The following test steps were performed.
(1) boot the test device and verify the MSFT support debug log in syslog
(2) restart bluetoothd and verify msft_do_close() doesn't get invoked

Signed-off-by: Miao-chen Chou <mcchou@chromium.org>
Reviewed-by: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>
Reviewed-by: Archie Pusaka <apusaka@chromium.org>
---

 net/bluetooth/hci_core.c | 4 ++--
 net/bluetooth/msft.c     | 3 ++-
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
index 9d2c9a1c552fd..8471be105a2ac 100644
--- a/net/bluetooth/hci_core.c
+++ b/net/bluetooth/hci_core.c
@@ -1780,8 +1780,6 @@ int hci_dev_do_close(struct hci_dev *hdev)
 
 	hci_sock_dev_event(hdev, HCI_DEV_DOWN);
 
-	msft_do_close(hdev);
-
 	if (hdev->flush)
 		hdev->flush(hdev);
 
@@ -3869,6 +3867,8 @@ void hci_unregister_dev(struct hci_dev *hdev)
 	unregister_pm_notifier(&hdev->suspend_notifier);
 	cancel_work_sync(&hdev->suspend_prepare);
 
+	msft_do_close(hdev);
+
 	hci_dev_do_close(hdev);
 
 	if (!test_bit(HCI_INIT, &hdev->flags) &&
diff --git a/net/bluetooth/msft.c b/net/bluetooth/msft.c
index 4b39534a14a18..d9d2269bc93ef 100644
--- a/net/bluetooth/msft.c
+++ b/net/bluetooth/msft.c
@@ -76,7 +76,8 @@ void msft_do_open(struct hci_dev *hdev)
 {
 	struct msft_data *msft;
 
-	if (hdev->msft_opcode == HCI_OP_NOP)
+	/* Skip if opcode is not supported or MSFT has been initiatlized */
+	if (hdev->msft_opcode == HCI_OP_NOP || hdev->msft_data)
 		return;
 
 	bt_dev_dbg(hdev, "Initialize MSFT extension");
-- 
2.29.2.684.gfbc64c5ab5-goog


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH v1 2/4] Bluetooth: btqca: Enable MSFT extension for Qualcomm WCN399x
  2020-12-17  7:17 [PATCH v1 1/4] Bluetooth: Keep MSFT extension info throughout a hci_dev's life cycle Miao-chen Chou
@ 2020-12-17  7:17 ` Miao-chen Chou
  2020-12-17  7:17 ` [PATCH v1 3/4] Bluetooth: btusb: Enable MSFT extension for Intel controllers Miao-chen Chou
  2020-12-17  7:17 ` [PATCH v1 4/4] Bluetooth: btrtl: Enable MSFT extension for RTL8822CE controller Miao-chen Chou
  2 siblings, 0 replies; 4+ messages in thread
From: Miao-chen Chou @ 2020-12-17  7:17 UTC (permalink / raw)
  To: Bluetooth Kernel Mailing List
  Cc: Alain Michaud, Archie Pusaka, Marcel Holtmann,
	Luiz Augusto von Dentz, Miao-chen Chou, Abhishek Pandit-Subedi,
	Johan Hedberg, Luiz Augusto von Dentz, linux-kernel

The following Qualcomm WCN399x Bluetooth controllers support the
Microsoft vendor extension and they are using 0xFD70 for VsMsftOpCode.
-WCN3990
-WCN3991
-WCN3998

< HCI Command: ogf 0x3f, ocf 0x0170, plen 1
  00
> HCI Event: 0x0e plen 18
  01 70 FD 00 00 1F 00 00 00 00 00 00 00 04 4D 53 46 54

The following test step was performed.
- Boot the device with WCN3991 and verify INFO print in dmesg.

Signed-off-by: Miao-chen Chou <mcchou@chromium.org>
Reviewed-by: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>
Reviewed-by: Archie Pusaka <apusaka@chromium.org>
---

 drivers/bluetooth/btqca.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/drivers/bluetooth/btqca.c b/drivers/bluetooth/btqca.c
index f85a55add9be5..ab19963c83616 100644
--- a/drivers/bluetooth/btqca.c
+++ b/drivers/bluetooth/btqca.c
@@ -517,6 +517,19 @@ int qca_uart_setup(struct hci_dev *hdev, uint8_t baudrate,
 			return err;
 	}
 
+	/* WCN399x supports the Microsoft vendor extension with 0xFD70 as the
+	 * VsMsftOpCode.
+	 */
+	switch (soc_type) {
+	case QCA_WCN3990:
+	case QCA_WCN3991:
+	case QCA_WCN3998:
+		hci_set_msft_opcode(hdev, 0xFD70);
+		break;
+	default:
+		break;
+	}
+
 	/* Perform HCI reset */
 	err = qca_send_reset(hdev);
 	if (err < 0) {
-- 
2.29.2.684.gfbc64c5ab5-goog


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH v1 3/4] Bluetooth: btusb: Enable MSFT extension for Intel controllers
  2020-12-17  7:17 [PATCH v1 1/4] Bluetooth: Keep MSFT extension info throughout a hci_dev's life cycle Miao-chen Chou
  2020-12-17  7:17 ` [PATCH v1 2/4] Bluetooth: btqca: Enable MSFT extension for Qualcomm WCN399x Miao-chen Chou
@ 2020-12-17  7:17 ` Miao-chen Chou
  2020-12-17  7:17 ` [PATCH v1 4/4] Bluetooth: btrtl: Enable MSFT extension for RTL8822CE controller Miao-chen Chou
  2 siblings, 0 replies; 4+ messages in thread
From: Miao-chen Chou @ 2020-12-17  7:17 UTC (permalink / raw)
  To: Bluetooth Kernel Mailing List
  Cc: Alain Michaud, Archie Pusaka, Marcel Holtmann,
	Luiz Augusto von Dentz, Miao-chen Chou, Abhishek Pandit-Subedi,
	Johan Hedberg, Luiz Augusto von Dentz, linux-kernel

The Intel JeffersonPeak, HarrisonPeak and CyclonePeak Bluetooth
controllers support the Microsoft vendor extension and they are using
0xFC1E for VsMsftOpCode.

< HCI Command: Vendor (0x3f|0x001e) plen 1
        00
> HCI Event: Command Complete (0x0e) plen 15
      Vendor (0x3f|0x001e) ncmd 1
        Status: Success (0x00)
        00 3f 00 00 00 00 00 00 00 01 50

The following test step was performed.
- Boot the test devices with HarrisonPeak and verify INFO print in
dmesg.

Signed-off-by: Miao-chen Chou <mcchou@chromium.org>
Reviewed-by: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>
Reviewed-by: Archie Pusaka <apusaka@chromium.org>
---

 drivers/bluetooth/btusb.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/bluetooth/btusb.c b/drivers/bluetooth/btusb.c
index 03b83aa912779..25cfa47995a8a 100644
--- a/drivers/bluetooth/btusb.c
+++ b/drivers/bluetooth/btusb.c
@@ -2924,7 +2924,10 @@ static int btusb_setup_intel_new(struct hci_dev *hdev)
 	 * extension are using 0xFC1E for VsMsftOpCode.
 	 */
 	switch (ver.hw_variant) {
+	case 0x11:	/* JfP */
 	case 0x12:	/* ThP */
+	case 0x13:	/* HrP */
+	case 0x14:	/* CcP */
 		hci_set_msft_opcode(hdev, 0xFC1E);
 		break;
 	}
-- 
2.29.2.684.gfbc64c5ab5-goog


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH v1 4/4] Bluetooth: btrtl: Enable MSFT extension for RTL8822CE controller
  2020-12-17  7:17 [PATCH v1 1/4] Bluetooth: Keep MSFT extension info throughout a hci_dev's life cycle Miao-chen Chou
  2020-12-17  7:17 ` [PATCH v1 2/4] Bluetooth: btqca: Enable MSFT extension for Qualcomm WCN399x Miao-chen Chou
  2020-12-17  7:17 ` [PATCH v1 3/4] Bluetooth: btusb: Enable MSFT extension for Intel controllers Miao-chen Chou
@ 2020-12-17  7:17 ` Miao-chen Chou
  2 siblings, 0 replies; 4+ messages in thread
From: Miao-chen Chou @ 2020-12-17  7:17 UTC (permalink / raw)
  To: Bluetooth Kernel Mailing List
  Cc: Alain Michaud, Archie Pusaka, Marcel Holtmann,
	Luiz Augusto von Dentz, Miao-chen Chou, Abhishek Pandit-Subedi,
	Johan Hedberg, Luiz Augusto von Dentz, linux-kernel

The Realtek RTL8822CE Bluetooth controller support Microsoft vendor
extension and it uses 0xFCF0 for VsMsftOpCode.

The following test step was performed.
- Boot the test device with RTL8822CE and verify the INFO print in
dmesg.

Signed-off-by: Miao-chen Chou <mcchou@chromium.org>
Reviewed-by: Abhishek Pandit-Subedi <abhishekpandit@chromium.org>
Reviewed-by: Archie Pusaka <apusaka@chromium.org>
---

 drivers/bluetooth/btrtl.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/drivers/bluetooth/btrtl.c b/drivers/bluetooth/btrtl.c
index a4f7cace66b06..94df4e94999d5 100644
--- a/drivers/bluetooth/btrtl.c
+++ b/drivers/bluetooth/btrtl.c
@@ -658,6 +658,12 @@ struct btrtl_device_info *btrtl_initialize(struct hci_dev *hdev,
 		}
 	}
 
+	/* RTL8822CE supports the Microsoft vendor extension and uses 0xFCF0
+	 * for VsMsftOpCode.
+	 */
+	if (lmp_subver == RTL_ROM_LMP_8822B)
+		hci_set_msft_opcode(hdev, 0xFCF0);
+
 	return btrtl_dev;
 
 err_free:
-- 
2.29.2.684.gfbc64c5ab5-goog


^ permalink raw reply related	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2020-12-17  7:19 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-12-17  7:17 [PATCH v1 1/4] Bluetooth: Keep MSFT extension info throughout a hci_dev's life cycle Miao-chen Chou
2020-12-17  7:17 ` [PATCH v1 2/4] Bluetooth: btqca: Enable MSFT extension for Qualcomm WCN399x Miao-chen Chou
2020-12-17  7:17 ` [PATCH v1 3/4] Bluetooth: btusb: Enable MSFT extension for Intel controllers Miao-chen Chou
2020-12-17  7:17 ` [PATCH v1 4/4] Bluetooth: btrtl: Enable MSFT extension for RTL8822CE controller Miao-chen Chou

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).