Skip to content

Commit 6d2e50d

Browse files
committed
Bluetooth: btintel: Add support for enabling tracing functionality
For Intel controllers with firmware that allows tracing of baseband functionality this allows enabling it via set_diag driver callback. Signed-off-by: Marcel Holtmann <marcel@holtmann.org> Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
1 parent 9d08f50 commit 6d2e50d

File tree

4 files changed

+40
-0
lines changed

4 files changed

+40
-0
lines changed

drivers/bluetooth/btintel.c

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,38 @@ int btintel_set_bdaddr(struct hci_dev *hdev, const bdaddr_t *bdaddr)
9191
}
9292
EXPORT_SYMBOL_GPL(btintel_set_bdaddr);
9393

94+
int btintel_set_diag(struct hci_dev *hdev, bool enable)
95+
{
96+
struct sk_buff *skb;
97+
u8 param[3];
98+
int err;
99+
100+
if (!test_bit(HCI_RUNNING, &hdev->flags))
101+
return -ENETDOWN;
102+
103+
if (enable) {
104+
param[0] = 0x03;
105+
param[1] = 0x03;
106+
param[2] = 0x03;
107+
} else {
108+
param[0] = 0x00;
109+
param[1] = 0x00;
110+
param[2] = 0x00;
111+
}
112+
113+
skb = __hci_cmd_sync(hdev, 0xfc43, 3, param, HCI_INIT_TIMEOUT);
114+
if (IS_ERR(skb)) {
115+
err = PTR_ERR(skb);
116+
BT_ERR("%s: Changing Intel diagnostic mode failed (%d)",
117+
hdev->name, err);
118+
return err;
119+
}
120+
kfree_skb(skb);
121+
122+
return 0;
123+
}
124+
EXPORT_SYMBOL_GPL(btintel_set_diag);
125+
94126
void btintel_hw_error(struct hci_dev *hdev, u8 code)
95127
{
96128
struct sk_buff *skb;

drivers/bluetooth/btintel.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ struct intel_secure_send_result {
7373

7474
int btintel_check_bdaddr(struct hci_dev *hdev);
7575
int btintel_set_bdaddr(struct hci_dev *hdev, const bdaddr_t *bdaddr);
76+
int btintel_set_diag(struct hci_dev *hdev, bool enable);
7677
void btintel_hw_error(struct hci_dev *hdev, u8 code);
7778

7879
void btintel_version_info(struct hci_dev *hdev, struct intel_version *ver);
@@ -95,6 +96,11 @@ static inline int btintel_set_bdaddr(struct hci_dev *hdev, const bdaddr_t *bdadd
9596
return -EOPNOTSUPP;
9697
}
9798

99+
static inline int btintel_set_diag(struct hci_dev *hdev, bool enable)
100+
{
101+
return -EOPNOTSUPP;
102+
}
103+
98104
static inline void btintel_hw_error(struct hci_dev *hdev, u8 code)
99105
{
100106
}

drivers/bluetooth/btusb.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2882,6 +2882,7 @@ static int btusb_probe(struct usb_interface *intf,
28822882
hdev->send = btusb_send_frame_intel;
28832883
hdev->setup = btusb_setup_intel_new;
28842884
hdev->hw_error = btintel_hw_error;
2885+
hdev->set_diag = btintel_set_diag;
28852886
hdev->set_bdaddr = btintel_set_bdaddr;
28862887
set_bit(HCI_QUIRK_STRICT_DUPLICATE_FILTER, &hdev->quirks);
28872888
}

drivers/bluetooth/hci_intel.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -557,6 +557,7 @@ static int intel_setup(struct hci_uart *hu)
557557

558558
bt_dev_dbg(hdev, "start intel_setup");
559559

560+
hu->hdev->set_diag = btintel_set_diag;
560561
hu->hdev->set_bdaddr = btintel_set_bdaddr;
561562

562563
calltime = ktime_get();

0 commit comments

Comments
 (0)