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 static ssize_t sc_only_mode_read(struct file *file, char __user *user_buf,
216 size_t count, loff_t *ppos)
218 struct hci_dev *hdev = file->private_data;
221 buf[0] = test_bit(HCI_SC_ONLY, &hdev->dev_flags) ? 'Y': 'N';
224 return simple_read_from_buffer(user_buf, count, ppos, buf, 2);
227 static const struct file_operations sc_only_mode_fops = {
229 .read = sc_only_mode_read,
230 .llseek = default_llseek,
233 void hci_debugfs_create_common(struct hci_dev *hdev)
235 debugfs_create_file("features", 0444, hdev->debugfs, hdev,
237 debugfs_create_u16("manufacturer", 0444, hdev->debugfs,
238 &hdev->manufacturer);
239 debugfs_create_u8("hci_version", 0444, hdev->debugfs, &hdev->hci_ver);
240 debugfs_create_u16("hci_revision", 0444, hdev->debugfs, &hdev->hci_rev);
241 debugfs_create_file("device_list", 0444, hdev->debugfs, hdev,
243 debugfs_create_file("blacklist", 0444, hdev->debugfs, hdev,
245 debugfs_create_file("uuids", 0444, hdev->debugfs, hdev, &uuids_fops);
247 debugfs_create_file("conn_info_min_age", 0644, hdev->debugfs, hdev,
248 &conn_info_min_age_fops);
249 debugfs_create_file("conn_info_max_age", 0644, hdev->debugfs, hdev,
250 &conn_info_max_age_fops);
252 if (lmp_sc_capable(hdev) || lmp_le_capable(hdev))
253 debugfs_create_file("sc_only_mode", 0444, hdev->debugfs,
254 hdev, &sc_only_mode_fops);
257 static int inquiry_cache_show(struct seq_file *f, void *p)
259 struct hci_dev *hdev = f->private;
260 struct discovery_state *cache = &hdev->discovery;
261 struct inquiry_entry *e;
265 list_for_each_entry(e, &cache->all, all) {
266 struct inquiry_data *data = &e->data;
267 seq_printf(f, "%pMR %d %d %d 0x%.2x%.2x%.2x 0x%.4x %d %d %u\n",
269 data->pscan_rep_mode, data->pscan_period_mode,
270 data->pscan_mode, data->dev_class[2],
271 data->dev_class[1], data->dev_class[0],
272 __le16_to_cpu(data->clock_offset),
273 data->rssi, data->ssp_mode, e->timestamp);
276 hci_dev_unlock(hdev);
281 static int inquiry_cache_open(struct inode *inode, struct file *file)
283 return single_open(file, inquiry_cache_show, inode->i_private);
286 static const struct file_operations inquiry_cache_fops = {
287 .open = inquiry_cache_open,
290 .release = single_release,
293 static int link_keys_show(struct seq_file *f, void *ptr)
295 struct hci_dev *hdev = f->private;
296 struct link_key *key;
299 list_for_each_entry_rcu(key, &hdev->link_keys, list)
300 seq_printf(f, "%pMR %u %*phN %u\n", &key->bdaddr, key->type,
301 HCI_LINK_KEY_SIZE, key->val, key->pin_len);
307 static int link_keys_open(struct inode *inode, struct file *file)
309 return single_open(file, link_keys_show, inode->i_private);
312 static const struct file_operations link_keys_fops = {
313 .open = link_keys_open,
316 .release = single_release,
319 static int dev_class_show(struct seq_file *f, void *ptr)
321 struct hci_dev *hdev = f->private;
324 seq_printf(f, "0x%.2x%.2x%.2x\n", hdev->dev_class[2],
325 hdev->dev_class[1], hdev->dev_class[0]);
326 hci_dev_unlock(hdev);
331 static int dev_class_open(struct inode *inode, struct file *file)
333 return single_open(file, dev_class_show, inode->i_private);
336 static const struct file_operations dev_class_fops = {
337 .open = dev_class_open,
340 .release = single_release,
343 static int voice_setting_get(void *data, u64 *val)
345 struct hci_dev *hdev = data;
348 *val = hdev->voice_setting;
349 hci_dev_unlock(hdev);
354 DEFINE_SIMPLE_ATTRIBUTE(voice_setting_fops, voice_setting_get,
355 NULL, "0x%4.4llx\n");
357 static int auto_accept_delay_set(void *data, u64 val)
359 struct hci_dev *hdev = data;
362 hdev->auto_accept_delay = val;
363 hci_dev_unlock(hdev);
368 static int auto_accept_delay_get(void *data, u64 *val)
370 struct hci_dev *hdev = data;
373 *val = hdev->auto_accept_delay;
374 hci_dev_unlock(hdev);
379 DEFINE_SIMPLE_ATTRIBUTE(auto_accept_delay_fops, auto_accept_delay_get,
380 auto_accept_delay_set, "%llu\n");
382 static int idle_timeout_set(void *data, u64 val)
384 struct hci_dev *hdev = data;
386 if (val != 0 && (val < 500 || val > 3600000))
390 hdev->idle_timeout = val;
391 hci_dev_unlock(hdev);
396 static int idle_timeout_get(void *data, u64 *val)
398 struct hci_dev *hdev = data;
401 *val = hdev->idle_timeout;
402 hci_dev_unlock(hdev);
407 DEFINE_SIMPLE_ATTRIBUTE(idle_timeout_fops, idle_timeout_get,
408 idle_timeout_set, "%llu\n");
410 static int sniff_min_interval_set(void *data, u64 val)
412 struct hci_dev *hdev = data;
414 if (val == 0 || val % 2 || val > hdev->sniff_max_interval)
418 hdev->sniff_min_interval = val;
419 hci_dev_unlock(hdev);
424 static int sniff_min_interval_get(void *data, u64 *val)
426 struct hci_dev *hdev = data;
429 *val = hdev->sniff_min_interval;
430 hci_dev_unlock(hdev);
435 DEFINE_SIMPLE_ATTRIBUTE(sniff_min_interval_fops, sniff_min_interval_get,
436 sniff_min_interval_set, "%llu\n");
438 static int sniff_max_interval_set(void *data, u64 val)
440 struct hci_dev *hdev = data;
442 if (val == 0 || val % 2 || val < hdev->sniff_min_interval)
446 hdev->sniff_max_interval = val;
447 hci_dev_unlock(hdev);
452 static int sniff_max_interval_get(void *data, u64 *val)
454 struct hci_dev *hdev = data;
457 *val = hdev->sniff_max_interval;
458 hci_dev_unlock(hdev);
463 DEFINE_SIMPLE_ATTRIBUTE(sniff_max_interval_fops, sniff_max_interval_get,
464 sniff_max_interval_set, "%llu\n");
466 void hci_debugfs_create_bredr(struct hci_dev *hdev)
468 debugfs_create_file("inquiry_cache", 0444, hdev->debugfs, hdev,
469 &inquiry_cache_fops);
470 debugfs_create_file("link_keys", 0400, hdev->debugfs, hdev,
472 debugfs_create_file("dev_class", 0444, hdev->debugfs, hdev,
474 debugfs_create_file("voice_setting", 0444, hdev->debugfs, hdev,
475 &voice_setting_fops);
477 if (lmp_ssp_capable(hdev))
478 debugfs_create_file("auto_accept_delay", 0644, hdev->debugfs,
479 hdev, &auto_accept_delay_fops);
481 if (lmp_sniff_capable(hdev)) {
482 debugfs_create_file("idle_timeout", 0644, hdev->debugfs,
483 hdev, &idle_timeout_fops);
484 debugfs_create_file("sniff_min_interval", 0644, hdev->debugfs,
485 hdev, &sniff_min_interval_fops);
486 debugfs_create_file("sniff_max_interval", 0644, hdev->debugfs,
487 hdev, &sniff_max_interval_fops);
491 static int identity_show(struct seq_file *f, void *p)
493 struct hci_dev *hdev = f->private;
499 hci_copy_identity_address(hdev, &addr, &addr_type);
501 seq_printf(f, "%pMR (type %u) %*phN %pMR\n", &addr, addr_type,
502 16, hdev->irk, &hdev->rpa);
504 hci_dev_unlock(hdev);
509 static int identity_open(struct inode *inode, struct file *file)
511 return single_open(file, identity_show, inode->i_private);
514 static const struct file_operations identity_fops = {
515 .open = identity_open,
518 .release = single_release,
521 static int rpa_timeout_set(void *data, u64 val)
523 struct hci_dev *hdev = data;
525 /* Require the RPA timeout to be at least 30 seconds and at most
528 if (val < 30 || val > (60 * 60 * 24))
532 hdev->rpa_timeout = val;
533 hci_dev_unlock(hdev);
538 static int rpa_timeout_get(void *data, u64 *val)
540 struct hci_dev *hdev = data;
543 *val = hdev->rpa_timeout;
544 hci_dev_unlock(hdev);
549 DEFINE_SIMPLE_ATTRIBUTE(rpa_timeout_fops, rpa_timeout_get,
550 rpa_timeout_set, "%llu\n");
552 static int random_address_show(struct seq_file *f, void *p)
554 struct hci_dev *hdev = f->private;
557 seq_printf(f, "%pMR\n", &hdev->random_addr);
558 hci_dev_unlock(hdev);
563 static int random_address_open(struct inode *inode, struct file *file)
565 return single_open(file, random_address_show, inode->i_private);
568 static const struct file_operations random_address_fops = {
569 .open = random_address_open,
572 .release = single_release,
575 static int static_address_show(struct seq_file *f, void *p)
577 struct hci_dev *hdev = f->private;
580 seq_printf(f, "%pMR\n", &hdev->static_addr);
581 hci_dev_unlock(hdev);
586 static int static_address_open(struct inode *inode, struct file *file)
588 return single_open(file, static_address_show, inode->i_private);
591 static const struct file_operations static_address_fops = {
592 .open = static_address_open,
595 .release = single_release,
598 static ssize_t force_static_address_read(struct file *file,
599 char __user *user_buf,
600 size_t count, loff_t *ppos)
602 struct hci_dev *hdev = file->private_data;
605 buf[0] = test_bit(HCI_FORCE_STATIC_ADDR, &hdev->dbg_flags) ? 'Y': 'N';
608 return simple_read_from_buffer(user_buf, count, ppos, buf, 2);
611 static ssize_t force_static_address_write(struct file *file,
612 const char __user *user_buf,
613 size_t count, loff_t *ppos)
615 struct hci_dev *hdev = file->private_data;
617 size_t buf_size = min(count, (sizeof(buf)-1));
620 if (test_bit(HCI_UP, &hdev->flags))
623 if (copy_from_user(buf, user_buf, buf_size))
626 buf[buf_size] = '\0';
627 if (strtobool(buf, &enable))
630 if (enable == test_bit(HCI_FORCE_STATIC_ADDR, &hdev->dbg_flags))
633 change_bit(HCI_FORCE_STATIC_ADDR, &hdev->dbg_flags);
638 static const struct file_operations force_static_address_fops = {
640 .read = force_static_address_read,
641 .write = force_static_address_write,
642 .llseek = default_llseek,
645 static int white_list_show(struct seq_file *f, void *ptr)
647 struct hci_dev *hdev = f->private;
648 struct bdaddr_list *b;
651 list_for_each_entry(b, &hdev->le_white_list, list)
652 seq_printf(f, "%pMR (type %u)\n", &b->bdaddr, b->bdaddr_type);
653 hci_dev_unlock(hdev);
658 static int white_list_open(struct inode *inode, struct file *file)
660 return single_open(file, white_list_show, inode->i_private);
663 static const struct file_operations white_list_fops = {
664 .open = white_list_open,
667 .release = single_release,
670 static int identity_resolving_keys_show(struct seq_file *f, void *ptr)
672 struct hci_dev *hdev = f->private;
676 list_for_each_entry_rcu(irk, &hdev->identity_resolving_keys, list) {
677 seq_printf(f, "%pMR (type %u) %*phN %pMR\n",
678 &irk->bdaddr, irk->addr_type,
679 16, irk->val, &irk->rpa);
686 static int identity_resolving_keys_open(struct inode *inode, struct file *file)
688 return single_open(file, identity_resolving_keys_show,
692 static const struct file_operations identity_resolving_keys_fops = {
693 .open = identity_resolving_keys_open,
696 .release = single_release,
699 static int long_term_keys_show(struct seq_file *f, void *ptr)
701 struct hci_dev *hdev = f->private;
705 list_for_each_entry_rcu(ltk, &hdev->long_term_keys, list)
706 seq_printf(f, "%pMR (type %u) %u 0x%02x %u %.4x %.16llx %*phN\n",
707 <k->bdaddr, ltk->bdaddr_type, ltk->authenticated,
708 ltk->type, ltk->enc_size, __le16_to_cpu(ltk->ediv),
709 __le64_to_cpu(ltk->rand), 16, ltk->val);
715 static int long_term_keys_open(struct inode *inode, struct file *file)
717 return single_open(file, long_term_keys_show, inode->i_private);
720 static const struct file_operations long_term_keys_fops = {
721 .open = long_term_keys_open,
724 .release = single_release,
727 static int conn_min_interval_set(void *data, u64 val)
729 struct hci_dev *hdev = data;
731 if (val < 0x0006 || val > 0x0c80 || val > hdev->le_conn_max_interval)
735 hdev->le_conn_min_interval = val;
736 hci_dev_unlock(hdev);
741 static int conn_min_interval_get(void *data, u64 *val)
743 struct hci_dev *hdev = data;
746 *val = hdev->le_conn_min_interval;
747 hci_dev_unlock(hdev);
752 DEFINE_SIMPLE_ATTRIBUTE(conn_min_interval_fops, conn_min_interval_get,
753 conn_min_interval_set, "%llu\n");
755 static int conn_max_interval_set(void *data, u64 val)
757 struct hci_dev *hdev = data;
759 if (val < 0x0006 || val > 0x0c80 || val < hdev->le_conn_min_interval)
763 hdev->le_conn_max_interval = val;
764 hci_dev_unlock(hdev);
769 static int conn_max_interval_get(void *data, u64 *val)
771 struct hci_dev *hdev = data;
774 *val = hdev->le_conn_max_interval;
775 hci_dev_unlock(hdev);
780 DEFINE_SIMPLE_ATTRIBUTE(conn_max_interval_fops, conn_max_interval_get,
781 conn_max_interval_set, "%llu\n");
783 static int conn_latency_set(void *data, u64 val)
785 struct hci_dev *hdev = data;
791 hdev->le_conn_latency = val;
792 hci_dev_unlock(hdev);
797 static int conn_latency_get(void *data, u64 *val)
799 struct hci_dev *hdev = data;
802 *val = hdev->le_conn_latency;
803 hci_dev_unlock(hdev);
808 DEFINE_SIMPLE_ATTRIBUTE(conn_latency_fops, conn_latency_get,
809 conn_latency_set, "%llu\n");
811 static int supervision_timeout_set(void *data, u64 val)
813 struct hci_dev *hdev = data;
815 if (val < 0x000a || val > 0x0c80)
819 hdev->le_supv_timeout = val;
820 hci_dev_unlock(hdev);
825 static int supervision_timeout_get(void *data, u64 *val)
827 struct hci_dev *hdev = data;
830 *val = hdev->le_supv_timeout;
831 hci_dev_unlock(hdev);
836 DEFINE_SIMPLE_ATTRIBUTE(supervision_timeout_fops, supervision_timeout_get,
837 supervision_timeout_set, "%llu\n");
839 static int adv_channel_map_set(void *data, u64 val)
841 struct hci_dev *hdev = data;
843 if (val < 0x01 || val > 0x07)
847 hdev->le_adv_channel_map = val;
848 hci_dev_unlock(hdev);
853 static int adv_channel_map_get(void *data, u64 *val)
855 struct hci_dev *hdev = data;
858 *val = hdev->le_adv_channel_map;
859 hci_dev_unlock(hdev);
864 DEFINE_SIMPLE_ATTRIBUTE(adv_channel_map_fops, adv_channel_map_get,
865 adv_channel_map_set, "%llu\n");
867 static int adv_min_interval_set(void *data, u64 val)
869 struct hci_dev *hdev = data;
871 if (val < 0x0020 || val > 0x4000 || val > hdev->le_adv_max_interval)
875 hdev->le_adv_min_interval = val;
876 hci_dev_unlock(hdev);
881 static int adv_min_interval_get(void *data, u64 *val)
883 struct hci_dev *hdev = data;
886 *val = hdev->le_adv_min_interval;
887 hci_dev_unlock(hdev);
892 DEFINE_SIMPLE_ATTRIBUTE(adv_min_interval_fops, adv_min_interval_get,
893 adv_min_interval_set, "%llu\n");
895 static int adv_max_interval_set(void *data, u64 val)
897 struct hci_dev *hdev = data;
899 if (val < 0x0020 || val > 0x4000 || val < hdev->le_adv_min_interval)
903 hdev->le_adv_max_interval = val;
904 hci_dev_unlock(hdev);
909 static int adv_max_interval_get(void *data, u64 *val)
911 struct hci_dev *hdev = data;
914 *val = hdev->le_adv_max_interval;
915 hci_dev_unlock(hdev);
920 DEFINE_SIMPLE_ATTRIBUTE(adv_max_interval_fops, adv_max_interval_get,
921 adv_max_interval_set, "%llu\n");
923 void hci_debugfs_create_le(struct hci_dev *hdev)
925 debugfs_create_file("identity", 0400, hdev->debugfs, hdev,
927 debugfs_create_file("rpa_timeout", 0644, hdev->debugfs, hdev,
929 debugfs_create_file("random_address", 0444, hdev->debugfs, hdev,
930 &random_address_fops);
931 debugfs_create_file("static_address", 0444, hdev->debugfs, hdev,
932 &static_address_fops);
934 /* For controllers with a public address, provide a debug
935 * option to force the usage of the configured static
936 * address. By default the public address is used.
938 if (bacmp(&hdev->bdaddr, BDADDR_ANY))
939 debugfs_create_file("force_static_address", 0644,
941 &force_static_address_fops);
943 debugfs_create_u8("white_list_size", 0444, hdev->debugfs,
944 &hdev->le_white_list_size);
945 debugfs_create_file("white_list", 0444, hdev->debugfs, hdev,
947 debugfs_create_file("identity_resolving_keys", 0400, hdev->debugfs,
948 hdev, &identity_resolving_keys_fops);
949 debugfs_create_file("long_term_keys", 0400, hdev->debugfs, hdev,
950 &long_term_keys_fops);
951 debugfs_create_file("conn_min_interval", 0644, hdev->debugfs, hdev,
952 &conn_min_interval_fops);
953 debugfs_create_file("conn_max_interval", 0644, hdev->debugfs, hdev,
954 &conn_max_interval_fops);
955 debugfs_create_file("conn_latency", 0644, hdev->debugfs, hdev,
957 debugfs_create_file("supervision_timeout", 0644, hdev->debugfs, hdev,
958 &supervision_timeout_fops);
959 debugfs_create_file("adv_channel_map", 0644, hdev->debugfs, hdev,
960 &adv_channel_map_fops);
961 debugfs_create_file("adv_min_interval", 0644, hdev->debugfs, hdev,
962 &adv_min_interval_fops);
963 debugfs_create_file("adv_max_interval", 0644, hdev->debugfs, hdev,
964 &adv_max_interval_fops);
965 debugfs_create_u16("discov_interleaved_timeout", 0644, hdev->debugfs,
966 &hdev->discov_interleaved_timeout);
969 void hci_debugfs_create_conn(struct hci_conn *conn)
971 struct hci_dev *hdev = conn->hdev;
974 if (IS_ERR_OR_NULL(hdev->debugfs))
977 snprintf(name, sizeof(name), "%u", conn->handle);
978 conn->debugfs = debugfs_create_dir(name, hdev->debugfs);