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>
30 #include "hci_debugfs.h"
32 #define DEFINE_QUIRK_ATTRIBUTE(__name, __quirk) \
33 static ssize_t __name ## _read(struct file *file, \
34 char __user *user_buf, \
35 size_t count, loff_t *ppos) \
37 struct hci_dev *hdev = file->private_data; \
40 buf[0] = test_bit(__quirk, &hdev->quirks) ? 'Y' : 'N'; \
43 return simple_read_from_buffer(user_buf, count, ppos, buf, 2); \
46 static ssize_t __name ## _write(struct file *file, \
47 const char __user *user_buf, \
48 size_t count, loff_t *ppos) \
50 struct hci_dev *hdev = file->private_data; \
54 if (test_bit(HCI_UP, &hdev->flags)) \
57 err = kstrtobool_from_user(user_buf, count, &enable); \
61 if (enable == test_bit(__quirk, &hdev->quirks)) \
64 change_bit(__quirk, &hdev->quirks); \
69 static const struct file_operations __name ## _fops = { \
70 .open = simple_open, \
71 .read = __name ## _read, \
72 .write = __name ## _write, \
73 .llseek = default_llseek, \
76 #define DEFINE_INFO_ATTRIBUTE(__name, __field) \
77 static int __name ## _show(struct seq_file *f, void *ptr) \
79 struct hci_dev *hdev = f->private; \
82 seq_printf(f, "%s\n", hdev->__field ? : ""); \
83 hci_dev_unlock(hdev); \
88 DEFINE_SHOW_ATTRIBUTE(__name)
90 static int features_show(struct seq_file *f, void *ptr)
92 struct hci_dev *hdev = f->private;
96 for (p = 0; p < HCI_MAX_PAGES && p <= hdev->max_page; p++)
97 seq_printf(f, "%2u: %8ph\n", p, hdev->features[p]);
98 if (lmp_le_capable(hdev))
99 seq_printf(f, "LE: %8ph\n", hdev->le_features);
100 hci_dev_unlock(hdev);
105 DEFINE_SHOW_ATTRIBUTE(features);
107 static int device_id_show(struct seq_file *f, void *ptr)
109 struct hci_dev *hdev = f->private;
112 seq_printf(f, "%4.4x:%4.4x:%4.4x:%4.4x\n", hdev->devid_source,
113 hdev->devid_vendor, hdev->devid_product, hdev->devid_version);
114 hci_dev_unlock(hdev);
119 DEFINE_SHOW_ATTRIBUTE(device_id);
121 static int device_list_show(struct seq_file *f, void *ptr)
123 struct hci_dev *hdev = f->private;
124 struct hci_conn_params *p;
125 struct bdaddr_list *b;
128 list_for_each_entry(b, &hdev->accept_list, list)
129 seq_printf(f, "%pMR (type %u)\n", &b->bdaddr, b->bdaddr_type);
130 list_for_each_entry(p, &hdev->le_conn_params, list) {
131 seq_printf(f, "%pMR (type %u) %u\n", &p->addr, p->addr_type,
134 hci_dev_unlock(hdev);
139 DEFINE_SHOW_ATTRIBUTE(device_list);
141 static int blacklist_show(struct seq_file *f, void *p)
143 struct hci_dev *hdev = f->private;
144 struct bdaddr_list *b;
147 list_for_each_entry(b, &hdev->reject_list, list)
148 seq_printf(f, "%pMR (type %u)\n", &b->bdaddr, b->bdaddr_type);
149 hci_dev_unlock(hdev);
154 DEFINE_SHOW_ATTRIBUTE(blacklist);
156 static int blocked_keys_show(struct seq_file *f, void *p)
158 struct hci_dev *hdev = f->private;
159 struct blocked_key *key;
162 list_for_each_entry_rcu(key, &hdev->blocked_keys, list)
163 seq_printf(f, "%u %*phN\n", key->type, 16, key->val);
169 DEFINE_SHOW_ATTRIBUTE(blocked_keys);
171 static int uuids_show(struct seq_file *f, void *p)
173 struct hci_dev *hdev = f->private;
174 struct bt_uuid *uuid;
177 list_for_each_entry(uuid, &hdev->uuids, list) {
180 /* The Bluetooth UUID values are stored in big endian,
181 * but with reversed byte order. So convert them into
182 * the right order for the %pUb modifier.
184 for (i = 0; i < 16; i++)
185 val[i] = uuid->uuid[15 - i];
187 seq_printf(f, "%pUb\n", val);
189 hci_dev_unlock(hdev);
194 DEFINE_SHOW_ATTRIBUTE(uuids);
196 static int remote_oob_show(struct seq_file *f, void *ptr)
198 struct hci_dev *hdev = f->private;
199 struct oob_data *data;
202 list_for_each_entry(data, &hdev->remote_oob_data, list) {
203 seq_printf(f, "%pMR (type %u) %u %*phN %*phN %*phN %*phN\n",
204 &data->bdaddr, data->bdaddr_type, data->present,
205 16, data->hash192, 16, data->rand192,
206 16, data->hash256, 16, data->rand256);
208 hci_dev_unlock(hdev);
213 DEFINE_SHOW_ATTRIBUTE(remote_oob);
215 static int conn_info_min_age_set(void *data, u64 val)
217 struct hci_dev *hdev = data;
220 if (val == 0 || val > hdev->conn_info_max_age) {
221 hci_dev_unlock(hdev);
225 hdev->conn_info_min_age = val;
226 hci_dev_unlock(hdev);
231 static int conn_info_min_age_get(void *data, u64 *val)
233 struct hci_dev *hdev = data;
236 *val = hdev->conn_info_min_age;
237 hci_dev_unlock(hdev);
242 DEFINE_SIMPLE_ATTRIBUTE(conn_info_min_age_fops, conn_info_min_age_get,
243 conn_info_min_age_set, "%llu\n");
245 static int conn_info_max_age_set(void *data, u64 val)
247 struct hci_dev *hdev = data;
250 if (val == 0 || val < hdev->conn_info_min_age) {
251 hci_dev_unlock(hdev);
255 hdev->conn_info_max_age = val;
256 hci_dev_unlock(hdev);
261 static int conn_info_max_age_get(void *data, u64 *val)
263 struct hci_dev *hdev = data;
266 *val = hdev->conn_info_max_age;
267 hci_dev_unlock(hdev);
272 DEFINE_SIMPLE_ATTRIBUTE(conn_info_max_age_fops, conn_info_max_age_get,
273 conn_info_max_age_set, "%llu\n");
275 static ssize_t use_debug_keys_read(struct file *file, char __user *user_buf,
276 size_t count, loff_t *ppos)
278 struct hci_dev *hdev = file->private_data;
281 buf[0] = hci_dev_test_flag(hdev, HCI_USE_DEBUG_KEYS) ? 'Y': 'N';
284 return simple_read_from_buffer(user_buf, count, ppos, buf, 2);
287 static const struct file_operations use_debug_keys_fops = {
289 .read = use_debug_keys_read,
290 .llseek = default_llseek,
293 static ssize_t sc_only_mode_read(struct file *file, char __user *user_buf,
294 size_t count, loff_t *ppos)
296 struct hci_dev *hdev = file->private_data;
299 buf[0] = hci_dev_test_flag(hdev, HCI_SC_ONLY) ? 'Y': 'N';
302 return simple_read_from_buffer(user_buf, count, ppos, buf, 2);
305 static const struct file_operations sc_only_mode_fops = {
307 .read = sc_only_mode_read,
308 .llseek = default_llseek,
311 DEFINE_INFO_ATTRIBUTE(hardware_info, hw_info);
312 DEFINE_INFO_ATTRIBUTE(firmware_info, fw_info);
314 void hci_debugfs_create_common(struct hci_dev *hdev)
316 debugfs_create_file("features", 0444, hdev->debugfs, hdev,
318 debugfs_create_u16("manufacturer", 0444, hdev->debugfs,
319 &hdev->manufacturer);
320 debugfs_create_u8("hci_version", 0444, hdev->debugfs, &hdev->hci_ver);
321 debugfs_create_u16("hci_revision", 0444, hdev->debugfs, &hdev->hci_rev);
322 debugfs_create_u8("hardware_error", 0444, hdev->debugfs,
323 &hdev->hw_error_code);
324 debugfs_create_file("device_id", 0444, hdev->debugfs, hdev,
327 debugfs_create_file("device_list", 0444, hdev->debugfs, hdev,
329 debugfs_create_file("blacklist", 0444, hdev->debugfs, hdev,
331 debugfs_create_file("blocked_keys", 0444, hdev->debugfs, hdev,
333 debugfs_create_file("uuids", 0444, hdev->debugfs, hdev, &uuids_fops);
334 debugfs_create_file("remote_oob", 0400, hdev->debugfs, hdev,
337 debugfs_create_file("conn_info_min_age", 0644, hdev->debugfs, hdev,
338 &conn_info_min_age_fops);
339 debugfs_create_file("conn_info_max_age", 0644, hdev->debugfs, hdev,
340 &conn_info_max_age_fops);
342 if (lmp_ssp_capable(hdev) || lmp_le_capable(hdev))
343 debugfs_create_file("use_debug_keys", 0444, hdev->debugfs,
344 hdev, &use_debug_keys_fops);
346 if (lmp_sc_capable(hdev) || lmp_le_capable(hdev))
347 debugfs_create_file("sc_only_mode", 0444, hdev->debugfs,
348 hdev, &sc_only_mode_fops);
351 debugfs_create_file("hardware_info", 0444, hdev->debugfs,
352 hdev, &hardware_info_fops);
355 debugfs_create_file("firmware_info", 0444, hdev->debugfs,
356 hdev, &firmware_info_fops);
359 static int inquiry_cache_show(struct seq_file *f, void *p)
361 struct hci_dev *hdev = f->private;
362 struct discovery_state *cache = &hdev->discovery;
363 struct inquiry_entry *e;
367 list_for_each_entry(e, &cache->all, all) {
368 struct inquiry_data *data = &e->data;
369 seq_printf(f, "%pMR %d %d %d 0x%.2x%.2x%.2x 0x%.4x %d %d %u\n",
371 data->pscan_rep_mode, data->pscan_period_mode,
372 data->pscan_mode, data->dev_class[2],
373 data->dev_class[1], data->dev_class[0],
374 __le16_to_cpu(data->clock_offset),
375 data->rssi, data->ssp_mode, e->timestamp);
378 hci_dev_unlock(hdev);
383 DEFINE_SHOW_ATTRIBUTE(inquiry_cache);
385 static int link_keys_show(struct seq_file *f, void *ptr)
387 struct hci_dev *hdev = f->private;
388 struct link_key *key;
391 list_for_each_entry_rcu(key, &hdev->link_keys, list)
392 seq_printf(f, "%pMR %u %*phN %u\n", &key->bdaddr, key->type,
393 HCI_LINK_KEY_SIZE, key->val, key->pin_len);
399 DEFINE_SHOW_ATTRIBUTE(link_keys);
401 static int dev_class_show(struct seq_file *f, void *ptr)
403 struct hci_dev *hdev = f->private;
406 seq_printf(f, "0x%.2x%.2x%.2x\n", hdev->dev_class[2],
407 hdev->dev_class[1], hdev->dev_class[0]);
408 hci_dev_unlock(hdev);
413 DEFINE_SHOW_ATTRIBUTE(dev_class);
415 static int voice_setting_get(void *data, u64 *val)
417 struct hci_dev *hdev = data;
420 *val = hdev->voice_setting;
421 hci_dev_unlock(hdev);
426 DEFINE_SIMPLE_ATTRIBUTE(voice_setting_fops, voice_setting_get,
427 NULL, "0x%4.4llx\n");
429 static ssize_t ssp_debug_mode_read(struct file *file, char __user *user_buf,
430 size_t count, loff_t *ppos)
432 struct hci_dev *hdev = file->private_data;
435 buf[0] = hdev->ssp_debug_mode ? 'Y': 'N';
438 return simple_read_from_buffer(user_buf, count, ppos, buf, 2);
441 static const struct file_operations ssp_debug_mode_fops = {
443 .read = ssp_debug_mode_read,
444 .llseek = default_llseek,
447 static int auto_accept_delay_set(void *data, u64 val)
449 struct hci_dev *hdev = data;
452 hdev->auto_accept_delay = val;
453 hci_dev_unlock(hdev);
458 static int min_encrypt_key_size_set(void *data, u64 val)
460 struct hci_dev *hdev = data;
462 if (val < 1 || val > 16)
466 hdev->min_enc_key_size = val;
467 hci_dev_unlock(hdev);
472 static int min_encrypt_key_size_get(void *data, u64 *val)
474 struct hci_dev *hdev = data;
477 *val = hdev->min_enc_key_size;
478 hci_dev_unlock(hdev);
483 DEFINE_SIMPLE_ATTRIBUTE(min_encrypt_key_size_fops,
484 min_encrypt_key_size_get,
485 min_encrypt_key_size_set, "%llu\n");
487 static int auto_accept_delay_get(void *data, u64 *val)
489 struct hci_dev *hdev = data;
492 *val = hdev->auto_accept_delay;
493 hci_dev_unlock(hdev);
498 DEFINE_SIMPLE_ATTRIBUTE(auto_accept_delay_fops, auto_accept_delay_get,
499 auto_accept_delay_set, "%llu\n");
501 static int idle_timeout_set(void *data, u64 val)
503 struct hci_dev *hdev = data;
505 if (val != 0 && (val < 500 || val > 3600000))
509 hdev->idle_timeout = val;
510 hci_dev_unlock(hdev);
515 static int idle_timeout_get(void *data, u64 *val)
517 struct hci_dev *hdev = data;
520 *val = hdev->idle_timeout;
521 hci_dev_unlock(hdev);
526 DEFINE_SIMPLE_ATTRIBUTE(idle_timeout_fops, idle_timeout_get,
527 idle_timeout_set, "%llu\n");
529 static int sniff_min_interval_set(void *data, u64 val)
531 struct hci_dev *hdev = data;
534 if (val == 0 || val % 2 || val > hdev->sniff_max_interval) {
535 hci_dev_unlock(hdev);
539 hdev->sniff_min_interval = val;
540 hci_dev_unlock(hdev);
545 static int sniff_min_interval_get(void *data, u64 *val)
547 struct hci_dev *hdev = data;
550 *val = hdev->sniff_min_interval;
551 hci_dev_unlock(hdev);
556 DEFINE_SIMPLE_ATTRIBUTE(sniff_min_interval_fops, sniff_min_interval_get,
557 sniff_min_interval_set, "%llu\n");
559 static int sniff_max_interval_set(void *data, u64 val)
561 struct hci_dev *hdev = data;
564 if (val == 0 || val % 2 || val < hdev->sniff_min_interval) {
565 hci_dev_unlock(hdev);
569 hdev->sniff_max_interval = val;
570 hci_dev_unlock(hdev);
575 static int sniff_max_interval_get(void *data, u64 *val)
577 struct hci_dev *hdev = data;
580 *val = hdev->sniff_max_interval;
581 hci_dev_unlock(hdev);
586 DEFINE_SIMPLE_ATTRIBUTE(sniff_max_interval_fops, sniff_max_interval_get,
587 sniff_max_interval_set, "%llu\n");
589 void hci_debugfs_create_bredr(struct hci_dev *hdev)
591 debugfs_create_file("inquiry_cache", 0444, hdev->debugfs, hdev,
592 &inquiry_cache_fops);
593 debugfs_create_file("link_keys", 0400, hdev->debugfs, hdev,
595 debugfs_create_file("dev_class", 0444, hdev->debugfs, hdev,
597 debugfs_create_file("voice_setting", 0444, hdev->debugfs, hdev,
598 &voice_setting_fops);
600 if (lmp_ssp_capable(hdev)) {
601 debugfs_create_file("ssp_debug_mode", 0444, hdev->debugfs,
602 hdev, &ssp_debug_mode_fops);
603 debugfs_create_file("min_encrypt_key_size", 0644, hdev->debugfs,
604 hdev, &min_encrypt_key_size_fops);
605 debugfs_create_file("auto_accept_delay", 0644, hdev->debugfs,
606 hdev, &auto_accept_delay_fops);
609 if (lmp_sniff_capable(hdev)) {
610 debugfs_create_file("idle_timeout", 0644, hdev->debugfs,
611 hdev, &idle_timeout_fops);
612 debugfs_create_file("sniff_min_interval", 0644, hdev->debugfs,
613 hdev, &sniff_min_interval_fops);
614 debugfs_create_file("sniff_max_interval", 0644, hdev->debugfs,
615 hdev, &sniff_max_interval_fops);
619 static int identity_show(struct seq_file *f, void *p)
621 struct hci_dev *hdev = f->private;
627 hci_copy_identity_address(hdev, &addr, &addr_type);
629 seq_printf(f, "%pMR (type %u) %*phN %pMR\n", &addr, addr_type,
630 16, hdev->irk, &hdev->rpa);
632 hci_dev_unlock(hdev);
637 DEFINE_SHOW_ATTRIBUTE(identity);
639 static int rpa_timeout_set(void *data, u64 val)
641 struct hci_dev *hdev = data;
643 /* Require the RPA timeout to be at least 30 seconds and at most
646 if (val < 30 || val > (60 * 60 * 24))
650 hdev->rpa_timeout = val;
651 hci_dev_unlock(hdev);
656 static int rpa_timeout_get(void *data, u64 *val)
658 struct hci_dev *hdev = data;
661 *val = hdev->rpa_timeout;
662 hci_dev_unlock(hdev);
667 DEFINE_SIMPLE_ATTRIBUTE(rpa_timeout_fops, rpa_timeout_get,
668 rpa_timeout_set, "%llu\n");
670 static int random_address_show(struct seq_file *f, void *p)
672 struct hci_dev *hdev = f->private;
675 seq_printf(f, "%pMR\n", &hdev->random_addr);
676 hci_dev_unlock(hdev);
681 DEFINE_SHOW_ATTRIBUTE(random_address);
683 static int static_address_show(struct seq_file *f, void *p)
685 struct hci_dev *hdev = f->private;
688 seq_printf(f, "%pMR\n", &hdev->static_addr);
689 hci_dev_unlock(hdev);
694 DEFINE_SHOW_ATTRIBUTE(static_address);
696 static ssize_t force_static_address_read(struct file *file,
697 char __user *user_buf,
698 size_t count, loff_t *ppos)
700 struct hci_dev *hdev = file->private_data;
703 buf[0] = hci_dev_test_flag(hdev, HCI_FORCE_STATIC_ADDR) ? 'Y': 'N';
706 return simple_read_from_buffer(user_buf, count, ppos, buf, 2);
709 static ssize_t force_static_address_write(struct file *file,
710 const char __user *user_buf,
711 size_t count, loff_t *ppos)
713 struct hci_dev *hdev = file->private_data;
717 if (test_bit(HCI_UP, &hdev->flags))
720 err = kstrtobool_from_user(user_buf, count, &enable);
724 if (enable == hci_dev_test_flag(hdev, HCI_FORCE_STATIC_ADDR))
727 hci_dev_change_flag(hdev, HCI_FORCE_STATIC_ADDR);
732 static const struct file_operations force_static_address_fops = {
734 .read = force_static_address_read,
735 .write = force_static_address_write,
736 .llseek = default_llseek,
739 static int white_list_show(struct seq_file *f, void *ptr)
741 struct hci_dev *hdev = f->private;
742 struct bdaddr_list *b;
745 list_for_each_entry(b, &hdev->le_accept_list, list)
746 seq_printf(f, "%pMR (type %u)\n", &b->bdaddr, b->bdaddr_type);
747 hci_dev_unlock(hdev);
752 DEFINE_SHOW_ATTRIBUTE(white_list);
754 static int resolv_list_show(struct seq_file *f, void *ptr)
756 struct hci_dev *hdev = f->private;
757 struct bdaddr_list *b;
760 list_for_each_entry(b, &hdev->le_resolv_list, list)
761 seq_printf(f, "%pMR (type %u)\n", &b->bdaddr, b->bdaddr_type);
762 hci_dev_unlock(hdev);
767 DEFINE_SHOW_ATTRIBUTE(resolv_list);
769 static int identity_resolving_keys_show(struct seq_file *f, void *ptr)
771 struct hci_dev *hdev = f->private;
775 list_for_each_entry_rcu(irk, &hdev->identity_resolving_keys, list) {
776 seq_printf(f, "%pMR (type %u) %*phN %pMR\n",
777 &irk->bdaddr, irk->addr_type,
778 16, irk->val, &irk->rpa);
785 DEFINE_SHOW_ATTRIBUTE(identity_resolving_keys);
787 static int long_term_keys_show(struct seq_file *f, void *ptr)
789 struct hci_dev *hdev = f->private;
793 list_for_each_entry_rcu(ltk, &hdev->long_term_keys, list)
794 seq_printf(f, "%pMR (type %u) %u 0x%02x %u %.4x %.16llx %*phN\n",
795 <k->bdaddr, ltk->bdaddr_type, ltk->authenticated,
796 ltk->type, ltk->enc_size, __le16_to_cpu(ltk->ediv),
797 __le64_to_cpu(ltk->rand), 16, ltk->val);
803 DEFINE_SHOW_ATTRIBUTE(long_term_keys);
805 static int conn_min_interval_set(void *data, u64 val)
807 struct hci_dev *hdev = data;
810 if (val < 0x0006 || val > 0x0c80 || val > hdev->le_conn_max_interval) {
811 hci_dev_unlock(hdev);
815 hdev->le_conn_min_interval = val;
816 hci_dev_unlock(hdev);
821 static int conn_min_interval_get(void *data, u64 *val)
823 struct hci_dev *hdev = data;
826 *val = hdev->le_conn_min_interval;
827 hci_dev_unlock(hdev);
832 DEFINE_SIMPLE_ATTRIBUTE(conn_min_interval_fops, conn_min_interval_get,
833 conn_min_interval_set, "%llu\n");
835 static int conn_max_interval_set(void *data, u64 val)
837 struct hci_dev *hdev = data;
840 if (val < 0x0006 || val > 0x0c80 || val < hdev->le_conn_min_interval) {
841 hci_dev_unlock(hdev);
845 hdev->le_conn_max_interval = val;
846 hci_dev_unlock(hdev);
851 static int conn_max_interval_get(void *data, u64 *val)
853 struct hci_dev *hdev = data;
856 *val = hdev->le_conn_max_interval;
857 hci_dev_unlock(hdev);
862 DEFINE_SIMPLE_ATTRIBUTE(conn_max_interval_fops, conn_max_interval_get,
863 conn_max_interval_set, "%llu\n");
865 static int conn_latency_set(void *data, u64 val)
867 struct hci_dev *hdev = data;
873 hdev->le_conn_latency = val;
874 hci_dev_unlock(hdev);
879 static int conn_latency_get(void *data, u64 *val)
881 struct hci_dev *hdev = data;
884 *val = hdev->le_conn_latency;
885 hci_dev_unlock(hdev);
890 DEFINE_SIMPLE_ATTRIBUTE(conn_latency_fops, conn_latency_get,
891 conn_latency_set, "%llu\n");
893 static int supervision_timeout_set(void *data, u64 val)
895 struct hci_dev *hdev = data;
897 if (val < 0x000a || val > 0x0c80)
901 hdev->le_supv_timeout = val;
902 hci_dev_unlock(hdev);
907 static int supervision_timeout_get(void *data, u64 *val)
909 struct hci_dev *hdev = data;
912 *val = hdev->le_supv_timeout;
913 hci_dev_unlock(hdev);
918 DEFINE_SIMPLE_ATTRIBUTE(supervision_timeout_fops, supervision_timeout_get,
919 supervision_timeout_set, "%llu\n");
921 static int adv_channel_map_set(void *data, u64 val)
923 struct hci_dev *hdev = data;
925 if (val < 0x01 || val > 0x07)
929 hdev->le_adv_channel_map = val;
930 hci_dev_unlock(hdev);
935 static int adv_channel_map_get(void *data, u64 *val)
937 struct hci_dev *hdev = data;
940 *val = hdev->le_adv_channel_map;
941 hci_dev_unlock(hdev);
946 DEFINE_SIMPLE_ATTRIBUTE(adv_channel_map_fops, adv_channel_map_get,
947 adv_channel_map_set, "%llu\n");
949 static int adv_min_interval_set(void *data, u64 val)
951 struct hci_dev *hdev = data;
954 if (val < 0x0020 || val > 0x4000 || val > hdev->le_adv_max_interval) {
955 hci_dev_unlock(hdev);
959 hdev->le_adv_min_interval = val;
960 hci_dev_unlock(hdev);
965 static int adv_min_interval_get(void *data, u64 *val)
967 struct hci_dev *hdev = data;
970 *val = hdev->le_adv_min_interval;
971 hci_dev_unlock(hdev);
976 DEFINE_SIMPLE_ATTRIBUTE(adv_min_interval_fops, adv_min_interval_get,
977 adv_min_interval_set, "%llu\n");
979 static int adv_max_interval_set(void *data, u64 val)
981 struct hci_dev *hdev = data;
984 if (val < 0x0020 || val > 0x4000 || val < hdev->le_adv_min_interval) {
985 hci_dev_unlock(hdev);
989 hdev->le_adv_max_interval = val;
990 hci_dev_unlock(hdev);
995 static int adv_max_interval_get(void *data, u64 *val)
997 struct hci_dev *hdev = data;
1000 *val = hdev->le_adv_max_interval;
1001 hci_dev_unlock(hdev);
1006 DEFINE_SIMPLE_ATTRIBUTE(adv_max_interval_fops, adv_max_interval_get,
1007 adv_max_interval_set, "%llu\n");
1009 static int min_key_size_set(void *data, u64 val)
1011 struct hci_dev *hdev = data;
1014 if (val > hdev->le_max_key_size || val < SMP_MIN_ENC_KEY_SIZE) {
1015 hci_dev_unlock(hdev);
1019 hdev->le_min_key_size = val;
1020 hci_dev_unlock(hdev);
1025 static int min_key_size_get(void *data, u64 *val)
1027 struct hci_dev *hdev = data;
1030 *val = hdev->le_min_key_size;
1031 hci_dev_unlock(hdev);
1036 DEFINE_SIMPLE_ATTRIBUTE(min_key_size_fops, min_key_size_get,
1037 min_key_size_set, "%llu\n");
1039 static int max_key_size_set(void *data, u64 val)
1041 struct hci_dev *hdev = data;
1044 if (val > SMP_MAX_ENC_KEY_SIZE || val < hdev->le_min_key_size) {
1045 hci_dev_unlock(hdev);
1049 hdev->le_max_key_size = val;
1050 hci_dev_unlock(hdev);
1055 static int max_key_size_get(void *data, u64 *val)
1057 struct hci_dev *hdev = data;
1060 *val = hdev->le_max_key_size;
1061 hci_dev_unlock(hdev);
1066 DEFINE_SIMPLE_ATTRIBUTE(max_key_size_fops, max_key_size_get,
1067 max_key_size_set, "%llu\n");
1069 static int auth_payload_timeout_set(void *data, u64 val)
1071 struct hci_dev *hdev = data;
1073 if (val < 0x0001 || val > 0xffff)
1077 hdev->auth_payload_timeout = val;
1078 hci_dev_unlock(hdev);
1083 static int auth_payload_timeout_get(void *data, u64 *val)
1085 struct hci_dev *hdev = data;
1088 *val = hdev->auth_payload_timeout;
1089 hci_dev_unlock(hdev);
1094 DEFINE_SIMPLE_ATTRIBUTE(auth_payload_timeout_fops,
1095 auth_payload_timeout_get,
1096 auth_payload_timeout_set, "%llu\n");
1098 static ssize_t force_no_mitm_read(struct file *file,
1099 char __user *user_buf,
1100 size_t count, loff_t *ppos)
1102 struct hci_dev *hdev = file->private_data;
1105 buf[0] = hci_dev_test_flag(hdev, HCI_FORCE_NO_MITM) ? 'Y' : 'N';
1108 return simple_read_from_buffer(user_buf, count, ppos, buf, 2);
1111 static ssize_t force_no_mitm_write(struct file *file,
1112 const char __user *user_buf,
1113 size_t count, loff_t *ppos)
1115 struct hci_dev *hdev = file->private_data;
1117 size_t buf_size = min(count, (sizeof(buf) - 1));
1120 if (copy_from_user(buf, user_buf, buf_size))
1123 buf[buf_size] = '\0';
1124 if (strtobool(buf, &enable))
1127 if (enable == hci_dev_test_flag(hdev, HCI_FORCE_NO_MITM))
1130 hci_dev_change_flag(hdev, HCI_FORCE_NO_MITM);
1135 static const struct file_operations force_no_mitm_fops = {
1136 .open = simple_open,
1137 .read = force_no_mitm_read,
1138 .write = force_no_mitm_write,
1139 .llseek = default_llseek,
1142 DEFINE_QUIRK_ATTRIBUTE(quirk_strict_duplicate_filter,
1143 HCI_QUIRK_STRICT_DUPLICATE_FILTER);
1144 DEFINE_QUIRK_ATTRIBUTE(quirk_simultaneous_discovery,
1145 HCI_QUIRK_SIMULTANEOUS_DISCOVERY);
1147 void hci_debugfs_create_le(struct hci_dev *hdev)
1149 debugfs_create_file("identity", 0400, hdev->debugfs, hdev,
1151 debugfs_create_file("rpa_timeout", 0644, hdev->debugfs, hdev,
1153 debugfs_create_file("random_address", 0444, hdev->debugfs, hdev,
1154 &random_address_fops);
1155 debugfs_create_file("static_address", 0444, hdev->debugfs, hdev,
1156 &static_address_fops);
1158 /* For controllers with a public address, provide a debug
1159 * option to force the usage of the configured static
1160 * address. By default the public address is used.
1162 if (bacmp(&hdev->bdaddr, BDADDR_ANY))
1163 debugfs_create_file("force_static_address", 0644,
1164 hdev->debugfs, hdev,
1165 &force_static_address_fops);
1167 debugfs_create_u8("white_list_size", 0444, hdev->debugfs,
1168 &hdev->le_accept_list_size);
1169 debugfs_create_file("white_list", 0444, hdev->debugfs, hdev,
1171 debugfs_create_u8("resolv_list_size", 0444, hdev->debugfs,
1172 &hdev->le_resolv_list_size);
1173 debugfs_create_file("resolv_list", 0444, hdev->debugfs, hdev,
1175 debugfs_create_file("identity_resolving_keys", 0400, hdev->debugfs,
1176 hdev, &identity_resolving_keys_fops);
1177 debugfs_create_file("long_term_keys", 0400, hdev->debugfs, hdev,
1178 &long_term_keys_fops);
1179 debugfs_create_file("conn_min_interval", 0644, hdev->debugfs, hdev,
1180 &conn_min_interval_fops);
1181 debugfs_create_file("conn_max_interval", 0644, hdev->debugfs, hdev,
1182 &conn_max_interval_fops);
1183 debugfs_create_file("conn_latency", 0644, hdev->debugfs, hdev,
1184 &conn_latency_fops);
1185 debugfs_create_file("supervision_timeout", 0644, hdev->debugfs, hdev,
1186 &supervision_timeout_fops);
1187 debugfs_create_file("adv_channel_map", 0644, hdev->debugfs, hdev,
1188 &adv_channel_map_fops);
1189 debugfs_create_file("adv_min_interval", 0644, hdev->debugfs, hdev,
1190 &adv_min_interval_fops);
1191 debugfs_create_file("adv_max_interval", 0644, hdev->debugfs, hdev,
1192 &adv_max_interval_fops);
1193 debugfs_create_u16("discov_interleaved_timeout", 0644, hdev->debugfs,
1194 &hdev->discov_interleaved_timeout);
1195 debugfs_create_file("min_key_size", 0644, hdev->debugfs, hdev,
1196 &min_key_size_fops);
1197 debugfs_create_file("max_key_size", 0644, hdev->debugfs, hdev,
1198 &max_key_size_fops);
1199 debugfs_create_file("auth_payload_timeout", 0644, hdev->debugfs, hdev,
1200 &auth_payload_timeout_fops);
1201 debugfs_create_file("force_no_mitm", 0644, hdev->debugfs, hdev,
1202 &force_no_mitm_fops);
1204 debugfs_create_file("quirk_strict_duplicate_filter", 0644,
1205 hdev->debugfs, hdev,
1206 &quirk_strict_duplicate_filter_fops);
1207 debugfs_create_file("quirk_simultaneous_discovery", 0644,
1208 hdev->debugfs, hdev,
1209 &quirk_simultaneous_discovery_fops);
1212 void hci_debugfs_create_conn(struct hci_conn *conn)
1214 struct hci_dev *hdev = conn->hdev;
1217 if (IS_ERR_OR_NULL(hdev->debugfs))
1220 snprintf(name, sizeof(name), "%u", conn->handle);
1221 conn->debugfs = debugfs_create_dir(name, hdev->debugfs);