2 BlueZ - Bluetooth protocol stack for Linux
4 Copyright (C) 2014 Intel Corporation
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License version 2 as
8 published by the Free Software Foundation;
10 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
11 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
12 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
13 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
14 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
15 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
20 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
21 SOFTWARE IS DISCLAIMED.
24 #include <linux/debugfs.h>
26 #include <net/bluetooth/bluetooth.h>
27 #include <net/bluetooth/hci_core.h>
29 #include "hci_debugfs.h"
31 static int features_show(struct seq_file *f, void *ptr)
33 struct hci_dev *hdev = f->private;
37 for (p = 0; p < HCI_MAX_PAGES && p <= hdev->max_page; p++) {
38 seq_printf(f, "%2u: 0x%2.2x 0x%2.2x 0x%2.2x 0x%2.2x "
39 "0x%2.2x 0x%2.2x 0x%2.2x 0x%2.2x\n", p,
40 hdev->features[p][0], hdev->features[p][1],
41 hdev->features[p][2], hdev->features[p][3],
42 hdev->features[p][4], hdev->features[p][5],
43 hdev->features[p][6], hdev->features[p][7]);
45 if (lmp_le_capable(hdev))
46 seq_printf(f, "LE: 0x%2.2x 0x%2.2x 0x%2.2x 0x%2.2x "
47 "0x%2.2x 0x%2.2x 0x%2.2x 0x%2.2x\n",
48 hdev->le_features[0], hdev->le_features[1],
49 hdev->le_features[2], hdev->le_features[3],
50 hdev->le_features[4], hdev->le_features[5],
51 hdev->le_features[6], hdev->le_features[7]);
57 static int features_open(struct inode *inode, struct file *file)
59 return single_open(file, features_show, inode->i_private);
62 static const struct file_operations features_fops = {
63 .open = features_open,
66 .release = single_release,
69 static int device_list_show(struct seq_file *f, void *ptr)
71 struct hci_dev *hdev = f->private;
72 struct hci_conn_params *p;
73 struct bdaddr_list *b;
76 list_for_each_entry(b, &hdev->whitelist, list)
77 seq_printf(f, "%pMR (type %u)\n", &b->bdaddr, b->bdaddr_type);
78 list_for_each_entry(p, &hdev->le_conn_params, list) {
79 seq_printf(f, "%pMR (type %u) %u\n", &p->addr, p->addr_type,
87 static int device_list_open(struct inode *inode, struct file *file)
89 return single_open(file, device_list_show, inode->i_private);
92 static const struct file_operations device_list_fops = {
93 .open = device_list_open,
96 .release = single_release,
99 static int blacklist_show(struct seq_file *f, void *p)
101 struct hci_dev *hdev = f->private;
102 struct bdaddr_list *b;
105 list_for_each_entry(b, &hdev->blacklist, list)
106 seq_printf(f, "%pMR (type %u)\n", &b->bdaddr, b->bdaddr_type);
107 hci_dev_unlock(hdev);
112 static int blacklist_open(struct inode *inode, struct file *file)
114 return single_open(file, blacklist_show, inode->i_private);
117 static const struct file_operations blacklist_fops = {
118 .open = blacklist_open,
121 .release = single_release,
124 static int uuids_show(struct seq_file *f, void *p)
126 struct hci_dev *hdev = f->private;
127 struct bt_uuid *uuid;
130 list_for_each_entry(uuid, &hdev->uuids, list) {
133 /* The Bluetooth UUID values are stored in big endian,
134 * but with reversed byte order. So convert them into
135 * the right order for the %pUb modifier.
137 for (i = 0; i < 16; i++)
138 val[i] = uuid->uuid[15 - i];
140 seq_printf(f, "%pUb\n", val);
142 hci_dev_unlock(hdev);
147 static int uuids_open(struct inode *inode, struct file *file)
149 return single_open(file, uuids_show, inode->i_private);
152 static const struct file_operations uuids_fops = {
156 .release = single_release,
159 static int conn_info_min_age_set(void *data, u64 val)
161 struct hci_dev *hdev = data;
163 if (val == 0 || val > hdev->conn_info_max_age)
167 hdev->conn_info_min_age = val;
168 hci_dev_unlock(hdev);
173 static int conn_info_min_age_get(void *data, u64 *val)
175 struct hci_dev *hdev = data;
178 *val = hdev->conn_info_min_age;
179 hci_dev_unlock(hdev);
184 DEFINE_SIMPLE_ATTRIBUTE(conn_info_min_age_fops, conn_info_min_age_get,
185 conn_info_min_age_set, "%llu\n");
187 static int conn_info_max_age_set(void *data, u64 val)
189 struct hci_dev *hdev = data;
191 if (val == 0 || val < hdev->conn_info_min_age)
195 hdev->conn_info_max_age = val;
196 hci_dev_unlock(hdev);
201 static int conn_info_max_age_get(void *data, u64 *val)
203 struct hci_dev *hdev = data;
206 *val = hdev->conn_info_max_age;
207 hci_dev_unlock(hdev);
212 DEFINE_SIMPLE_ATTRIBUTE(conn_info_max_age_fops, conn_info_max_age_get,
213 conn_info_max_age_set, "%llu\n");
215 void hci_debugfs_create_common(struct hci_dev *hdev)
217 debugfs_create_file("features", 0444, hdev->debugfs, hdev,
219 debugfs_create_u16("manufacturer", 0444, hdev->debugfs,
220 &hdev->manufacturer);
221 debugfs_create_u8("hci_version", 0444, hdev->debugfs, &hdev->hci_ver);
222 debugfs_create_u16("hci_revision", 0444, hdev->debugfs, &hdev->hci_rev);
223 debugfs_create_file("device_list", 0444, hdev->debugfs, hdev,
225 debugfs_create_file("blacklist", 0444, hdev->debugfs, hdev,
227 debugfs_create_file("uuids", 0444, hdev->debugfs, hdev, &uuids_fops);
229 debugfs_create_file("conn_info_min_age", 0644, hdev->debugfs, hdev,
230 &conn_info_min_age_fops);
231 debugfs_create_file("conn_info_max_age", 0644, hdev->debugfs, hdev,
232 &conn_info_max_age_fops);
235 static int inquiry_cache_show(struct seq_file *f, void *p)
237 struct hci_dev *hdev = f->private;
238 struct discovery_state *cache = &hdev->discovery;
239 struct inquiry_entry *e;
243 list_for_each_entry(e, &cache->all, all) {
244 struct inquiry_data *data = &e->data;
245 seq_printf(f, "%pMR %d %d %d 0x%.2x%.2x%.2x 0x%.4x %d %d %u\n",
247 data->pscan_rep_mode, data->pscan_period_mode,
248 data->pscan_mode, data->dev_class[2],
249 data->dev_class[1], data->dev_class[0],
250 __le16_to_cpu(data->clock_offset),
251 data->rssi, data->ssp_mode, e->timestamp);
254 hci_dev_unlock(hdev);
259 static int inquiry_cache_open(struct inode *inode, struct file *file)
261 return single_open(file, inquiry_cache_show, inode->i_private);
264 static const struct file_operations inquiry_cache_fops = {
265 .open = inquiry_cache_open,
268 .release = single_release,
271 static int link_keys_show(struct seq_file *f, void *ptr)
273 struct hci_dev *hdev = f->private;
274 struct link_key *key;
277 list_for_each_entry_rcu(key, &hdev->link_keys, list)
278 seq_printf(f, "%pMR %u %*phN %u\n", &key->bdaddr, key->type,
279 HCI_LINK_KEY_SIZE, key->val, key->pin_len);
285 static int link_keys_open(struct inode *inode, struct file *file)
287 return single_open(file, link_keys_show, inode->i_private);
290 static const struct file_operations link_keys_fops = {
291 .open = link_keys_open,
294 .release = single_release,
297 static int dev_class_show(struct seq_file *f, void *ptr)
299 struct hci_dev *hdev = f->private;
302 seq_printf(f, "0x%.2x%.2x%.2x\n", hdev->dev_class[2],
303 hdev->dev_class[1], hdev->dev_class[0]);
304 hci_dev_unlock(hdev);
309 static int dev_class_open(struct inode *inode, struct file *file)
311 return single_open(file, dev_class_show, inode->i_private);
314 static const struct file_operations dev_class_fops = {
315 .open = dev_class_open,
318 .release = single_release,
321 static int voice_setting_get(void *data, u64 *val)
323 struct hci_dev *hdev = data;
326 *val = hdev->voice_setting;
327 hci_dev_unlock(hdev);
332 DEFINE_SIMPLE_ATTRIBUTE(voice_setting_fops, voice_setting_get,
333 NULL, "0x%4.4llx\n");
335 static int auto_accept_delay_set(void *data, u64 val)
337 struct hci_dev *hdev = data;
340 hdev->auto_accept_delay = val;
341 hci_dev_unlock(hdev);
346 static int auto_accept_delay_get(void *data, u64 *val)
348 struct hci_dev *hdev = data;
351 *val = hdev->auto_accept_delay;
352 hci_dev_unlock(hdev);
357 DEFINE_SIMPLE_ATTRIBUTE(auto_accept_delay_fops, auto_accept_delay_get,
358 auto_accept_delay_set, "%llu\n");
360 static ssize_t sc_only_mode_read(struct file *file, char __user *user_buf,
361 size_t count, loff_t *ppos)
363 struct hci_dev *hdev = file->private_data;
366 buf[0] = test_bit(HCI_SC_ONLY, &hdev->dev_flags) ? 'Y': 'N';
369 return simple_read_from_buffer(user_buf, count, ppos, buf, 2);
372 static const struct file_operations sc_only_mode_fops = {
374 .read = sc_only_mode_read,
375 .llseek = default_llseek,
378 static int idle_timeout_set(void *data, u64 val)
380 struct hci_dev *hdev = data;
382 if (val != 0 && (val < 500 || val > 3600000))
386 hdev->idle_timeout = val;
387 hci_dev_unlock(hdev);
392 static int idle_timeout_get(void *data, u64 *val)
394 struct hci_dev *hdev = data;
397 *val = hdev->idle_timeout;
398 hci_dev_unlock(hdev);
403 DEFINE_SIMPLE_ATTRIBUTE(idle_timeout_fops, idle_timeout_get,
404 idle_timeout_set, "%llu\n");
406 static int sniff_min_interval_set(void *data, u64 val)
408 struct hci_dev *hdev = data;
410 if (val == 0 || val % 2 || val > hdev->sniff_max_interval)
414 hdev->sniff_min_interval = val;
415 hci_dev_unlock(hdev);
420 static int sniff_min_interval_get(void *data, u64 *val)
422 struct hci_dev *hdev = data;
425 *val = hdev->sniff_min_interval;
426 hci_dev_unlock(hdev);
431 DEFINE_SIMPLE_ATTRIBUTE(sniff_min_interval_fops, sniff_min_interval_get,
432 sniff_min_interval_set, "%llu\n");
434 static int sniff_max_interval_set(void *data, u64 val)
436 struct hci_dev *hdev = data;
438 if (val == 0 || val % 2 || val < hdev->sniff_min_interval)
442 hdev->sniff_max_interval = val;
443 hci_dev_unlock(hdev);
448 static int sniff_max_interval_get(void *data, u64 *val)
450 struct hci_dev *hdev = data;
453 *val = hdev->sniff_max_interval;
454 hci_dev_unlock(hdev);
459 DEFINE_SIMPLE_ATTRIBUTE(sniff_max_interval_fops, sniff_max_interval_get,
460 sniff_max_interval_set, "%llu\n");
462 void hci_debugfs_create_bredr(struct hci_dev *hdev)
464 debugfs_create_file("inquiry_cache", 0444, hdev->debugfs, hdev,
465 &inquiry_cache_fops);
466 debugfs_create_file("link_keys", 0400, hdev->debugfs, hdev,
468 debugfs_create_file("dev_class", 0444, hdev->debugfs, hdev,
470 debugfs_create_file("voice_setting", 0444, hdev->debugfs, hdev,
471 &voice_setting_fops);
473 if (lmp_ssp_capable(hdev)) {
474 debugfs_create_file("auto_accept_delay", 0644, hdev->debugfs,
475 hdev, &auto_accept_delay_fops);
476 debugfs_create_file("sc_only_mode", 0444, hdev->debugfs,
477 hdev, &sc_only_mode_fops);
480 if (lmp_sniff_capable(hdev)) {
481 debugfs_create_file("idle_timeout", 0644, hdev->debugfs,
482 hdev, &idle_timeout_fops);
483 debugfs_create_file("sniff_min_interval", 0644, hdev->debugfs,
484 hdev, &sniff_min_interval_fops);
485 debugfs_create_file("sniff_max_interval", 0644, hdev->debugfs,
486 hdev, &sniff_max_interval_fops);
490 static int identity_show(struct seq_file *f, void *p)
492 struct hci_dev *hdev = f->private;
498 hci_copy_identity_address(hdev, &addr, &addr_type);
500 seq_printf(f, "%pMR (type %u) %*phN %pMR\n", &addr, addr_type,
501 16, hdev->irk, &hdev->rpa);
503 hci_dev_unlock(hdev);
508 static int identity_open(struct inode *inode, struct file *file)
510 return single_open(file, identity_show, inode->i_private);
513 static const struct file_operations identity_fops = {
514 .open = identity_open,
517 .release = single_release,
520 static int rpa_timeout_set(void *data, u64 val)
522 struct hci_dev *hdev = data;
524 /* Require the RPA timeout to be at least 30 seconds and at most
527 if (val < 30 || val > (60 * 60 * 24))
531 hdev->rpa_timeout = val;
532 hci_dev_unlock(hdev);
537 static int rpa_timeout_get(void *data, u64 *val)
539 struct hci_dev *hdev = data;
542 *val = hdev->rpa_timeout;
543 hci_dev_unlock(hdev);
548 DEFINE_SIMPLE_ATTRIBUTE(rpa_timeout_fops, rpa_timeout_get,
549 rpa_timeout_set, "%llu\n");
551 static int random_address_show(struct seq_file *f, void *p)
553 struct hci_dev *hdev = f->private;
556 seq_printf(f, "%pMR\n", &hdev->random_addr);
557 hci_dev_unlock(hdev);
562 static int random_address_open(struct inode *inode, struct file *file)
564 return single_open(file, random_address_show, inode->i_private);
567 static const struct file_operations random_address_fops = {
568 .open = random_address_open,
571 .release = single_release,
574 static int static_address_show(struct seq_file *f, void *p)
576 struct hci_dev *hdev = f->private;
579 seq_printf(f, "%pMR\n", &hdev->static_addr);
580 hci_dev_unlock(hdev);
585 static int static_address_open(struct inode *inode, struct file *file)
587 return single_open(file, static_address_show, inode->i_private);
590 static const struct file_operations static_address_fops = {
591 .open = static_address_open,
594 .release = single_release,
597 static ssize_t force_static_address_read(struct file *file,
598 char __user *user_buf,
599 size_t count, loff_t *ppos)
601 struct hci_dev *hdev = file->private_data;
604 buf[0] = test_bit(HCI_FORCE_STATIC_ADDR, &hdev->dbg_flags) ? 'Y': 'N';
607 return simple_read_from_buffer(user_buf, count, ppos, buf, 2);
610 static ssize_t force_static_address_write(struct file *file,
611 const char __user *user_buf,
612 size_t count, loff_t *ppos)
614 struct hci_dev *hdev = file->private_data;
616 size_t buf_size = min(count, (sizeof(buf)-1));
619 if (test_bit(HCI_UP, &hdev->flags))
622 if (copy_from_user(buf, user_buf, buf_size))
625 buf[buf_size] = '\0';
626 if (strtobool(buf, &enable))
629 if (enable == test_bit(HCI_FORCE_STATIC_ADDR, &hdev->dbg_flags))
632 change_bit(HCI_FORCE_STATIC_ADDR, &hdev->dbg_flags);
637 static const struct file_operations force_static_address_fops = {
639 .read = force_static_address_read,
640 .write = force_static_address_write,
641 .llseek = default_llseek,
644 static int white_list_show(struct seq_file *f, void *ptr)
646 struct hci_dev *hdev = f->private;
647 struct bdaddr_list *b;
650 list_for_each_entry(b, &hdev->le_white_list, list)
651 seq_printf(f, "%pMR (type %u)\n", &b->bdaddr, b->bdaddr_type);
652 hci_dev_unlock(hdev);
657 static int white_list_open(struct inode *inode, struct file *file)
659 return single_open(file, white_list_show, inode->i_private);
662 static const struct file_operations white_list_fops = {
663 .open = white_list_open,
666 .release = single_release,
669 static int identity_resolving_keys_show(struct seq_file *f, void *ptr)
671 struct hci_dev *hdev = f->private;
675 list_for_each_entry_rcu(irk, &hdev->identity_resolving_keys, list) {
676 seq_printf(f, "%pMR (type %u) %*phN %pMR\n",
677 &irk->bdaddr, irk->addr_type,
678 16, irk->val, &irk->rpa);
685 static int identity_resolving_keys_open(struct inode *inode, struct file *file)
687 return single_open(file, identity_resolving_keys_show,
691 static const struct file_operations identity_resolving_keys_fops = {
692 .open = identity_resolving_keys_open,
695 .release = single_release,
698 static int long_term_keys_show(struct seq_file *f, void *ptr)
700 struct hci_dev *hdev = f->private;
704 list_for_each_entry_rcu(ltk, &hdev->long_term_keys, list)
705 seq_printf(f, "%pMR (type %u) %u 0x%02x %u %.4x %.16llx %*phN\n",
706 <k->bdaddr, ltk->bdaddr_type, ltk->authenticated,
707 ltk->type, ltk->enc_size, __le16_to_cpu(ltk->ediv),
708 __le64_to_cpu(ltk->rand), 16, ltk->val);
714 static int long_term_keys_open(struct inode *inode, struct file *file)
716 return single_open(file, long_term_keys_show, inode->i_private);
719 static const struct file_operations long_term_keys_fops = {
720 .open = long_term_keys_open,
723 .release = single_release,
726 static int conn_min_interval_set(void *data, u64 val)
728 struct hci_dev *hdev = data;
730 if (val < 0x0006 || val > 0x0c80 || val > hdev->le_conn_max_interval)
734 hdev->le_conn_min_interval = val;
735 hci_dev_unlock(hdev);
740 static int conn_min_interval_get(void *data, u64 *val)
742 struct hci_dev *hdev = data;
745 *val = hdev->le_conn_min_interval;
746 hci_dev_unlock(hdev);
751 DEFINE_SIMPLE_ATTRIBUTE(conn_min_interval_fops, conn_min_interval_get,
752 conn_min_interval_set, "%llu\n");
754 static int conn_max_interval_set(void *data, u64 val)
756 struct hci_dev *hdev = data;
758 if (val < 0x0006 || val > 0x0c80 || val < hdev->le_conn_min_interval)
762 hdev->le_conn_max_interval = val;
763 hci_dev_unlock(hdev);
768 static int conn_max_interval_get(void *data, u64 *val)
770 struct hci_dev *hdev = data;
773 *val = hdev->le_conn_max_interval;
774 hci_dev_unlock(hdev);
779 DEFINE_SIMPLE_ATTRIBUTE(conn_max_interval_fops, conn_max_interval_get,
780 conn_max_interval_set, "%llu\n");
782 static int conn_latency_set(void *data, u64 val)
784 struct hci_dev *hdev = data;
790 hdev->le_conn_latency = val;
791 hci_dev_unlock(hdev);
796 static int conn_latency_get(void *data, u64 *val)
798 struct hci_dev *hdev = data;
801 *val = hdev->le_conn_latency;
802 hci_dev_unlock(hdev);
807 DEFINE_SIMPLE_ATTRIBUTE(conn_latency_fops, conn_latency_get,
808 conn_latency_set, "%llu\n");
810 static int supervision_timeout_set(void *data, u64 val)
812 struct hci_dev *hdev = data;
814 if (val < 0x000a || val > 0x0c80)
818 hdev->le_supv_timeout = val;
819 hci_dev_unlock(hdev);
824 static int supervision_timeout_get(void *data, u64 *val)
826 struct hci_dev *hdev = data;
829 *val = hdev->le_supv_timeout;
830 hci_dev_unlock(hdev);
835 DEFINE_SIMPLE_ATTRIBUTE(supervision_timeout_fops, supervision_timeout_get,
836 supervision_timeout_set, "%llu\n");
838 static int adv_channel_map_set(void *data, u64 val)
840 struct hci_dev *hdev = data;
842 if (val < 0x01 || val > 0x07)
846 hdev->le_adv_channel_map = val;
847 hci_dev_unlock(hdev);
852 static int adv_channel_map_get(void *data, u64 *val)
854 struct hci_dev *hdev = data;
857 *val = hdev->le_adv_channel_map;
858 hci_dev_unlock(hdev);
863 DEFINE_SIMPLE_ATTRIBUTE(adv_channel_map_fops, adv_channel_map_get,
864 adv_channel_map_set, "%llu\n");
866 static int adv_min_interval_set(void *data, u64 val)
868 struct hci_dev *hdev = data;
870 if (val < 0x0020 || val > 0x4000 || val > hdev->le_adv_max_interval)
874 hdev->le_adv_min_interval = val;
875 hci_dev_unlock(hdev);
880 static int adv_min_interval_get(void *data, u64 *val)
882 struct hci_dev *hdev = data;
885 *val = hdev->le_adv_min_interval;
886 hci_dev_unlock(hdev);
891 DEFINE_SIMPLE_ATTRIBUTE(adv_min_interval_fops, adv_min_interval_get,
892 adv_min_interval_set, "%llu\n");
894 static int adv_max_interval_set(void *data, u64 val)
896 struct hci_dev *hdev = data;
898 if (val < 0x0020 || val > 0x4000 || val < hdev->le_adv_min_interval)
902 hdev->le_adv_max_interval = val;
903 hci_dev_unlock(hdev);
908 static int adv_max_interval_get(void *data, u64 *val)
910 struct hci_dev *hdev = data;
913 *val = hdev->le_adv_max_interval;
914 hci_dev_unlock(hdev);
919 DEFINE_SIMPLE_ATTRIBUTE(adv_max_interval_fops, adv_max_interval_get,
920 adv_max_interval_set, "%llu\n");
922 void hci_debugfs_create_le(struct hci_dev *hdev)
924 debugfs_create_file("identity", 0400, hdev->debugfs, hdev,
926 debugfs_create_file("rpa_timeout", 0644, hdev->debugfs, hdev,
928 debugfs_create_file("random_address", 0444, hdev->debugfs, hdev,
929 &random_address_fops);
930 debugfs_create_file("static_address", 0444, hdev->debugfs, hdev,
931 &static_address_fops);
933 /* For controllers with a public address, provide a debug
934 * option to force the usage of the configured static
935 * address. By default the public address is used.
937 if (bacmp(&hdev->bdaddr, BDADDR_ANY))
938 debugfs_create_file("force_static_address", 0644,
940 &force_static_address_fops);
942 debugfs_create_u8("white_list_size", 0444, hdev->debugfs,
943 &hdev->le_white_list_size);
944 debugfs_create_file("white_list", 0444, hdev->debugfs, hdev,
946 debugfs_create_file("identity_resolving_keys", 0400, hdev->debugfs,
947 hdev, &identity_resolving_keys_fops);
948 debugfs_create_file("long_term_keys", 0400, hdev->debugfs, hdev,
949 &long_term_keys_fops);
950 debugfs_create_file("conn_min_interval", 0644, hdev->debugfs, hdev,
951 &conn_min_interval_fops);
952 debugfs_create_file("conn_max_interval", 0644, hdev->debugfs, hdev,
953 &conn_max_interval_fops);
954 debugfs_create_file("conn_latency", 0644, hdev->debugfs, hdev,
956 debugfs_create_file("supervision_timeout", 0644, hdev->debugfs, hdev,
957 &supervision_timeout_fops);
958 debugfs_create_file("adv_channel_map", 0644, hdev->debugfs, hdev,
959 &adv_channel_map_fops);
960 debugfs_create_file("adv_min_interval", 0644, hdev->debugfs, hdev,
961 &adv_min_interval_fops);
962 debugfs_create_file("adv_max_interval", 0644, hdev->debugfs, hdev,
963 &adv_max_interval_fops);
964 debugfs_create_u16("discov_interleaved_timeout", 0644, hdev->debugfs,
965 &hdev->discov_interleaved_timeout);
968 void hci_debugfs_create_conn(struct hci_conn *conn)
970 struct hci_dev *hdev = conn->hdev;
973 if (IS_ERR_OR_NULL(hdev->debugfs))
976 snprintf(name, sizeof(name), "%u", conn->handle);
977 conn->debugfs = debugfs_create_dir(name, hdev->debugfs);