Linux 4.19-rc7
[linux-2.6/btrfs-unstable.git] / net / bluetooth / hci_debugfs.c
blob51f5b1efc3a5c457f0e143c11a2e508f66d7e0a9
1 /*
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 #define DEFINE_QUIRK_ATTRIBUTE(__name, __quirk) \
32 static ssize_t __name ## _read(struct file *file, \
33 char __user *user_buf, \
34 size_t count, loff_t *ppos) \
35 { \
36 struct hci_dev *hdev = file->private_data; \
37 char buf[3]; \
39 buf[0] = test_bit(__quirk, &hdev->quirks) ? 'Y' : 'N'; \
40 buf[1] = '\n'; \
41 buf[2] = '\0'; \
42 return simple_read_from_buffer(user_buf, count, ppos, buf, 2); \
43 } \
45 static ssize_t __name ## _write(struct file *file, \
46 const char __user *user_buf, \
47 size_t count, loff_t *ppos) \
48 { \
49 struct hci_dev *hdev = file->private_data; \
50 bool enable; \
51 int err; \
53 if (test_bit(HCI_UP, &hdev->flags)) \
54 return -EBUSY; \
56 err = kstrtobool_from_user(user_buf, count, &enable); \
57 if (err) \
58 return err; \
60 if (enable == test_bit(__quirk, &hdev->quirks)) \
61 return -EALREADY; \
63 change_bit(__quirk, &hdev->quirks); \
65 return count; \
66 } \
68 static const struct file_operations __name ## _fops = { \
69 .open = simple_open, \
70 .read = __name ## _read, \
71 .write = __name ## _write, \
72 .llseek = default_llseek, \
73 } \
75 #define DEFINE_INFO_ATTRIBUTE(__name, __field) \
76 static int __name ## _show(struct seq_file *f, void *ptr) \
77 { \
78 struct hci_dev *hdev = f->private; \
80 hci_dev_lock(hdev); \
81 seq_printf(f, "%s\n", hdev->__field ? : ""); \
82 hci_dev_unlock(hdev); \
84 return 0; \
85 } \
87 DEFINE_SHOW_ATTRIBUTE(__name)
89 static int features_show(struct seq_file *f, void *ptr)
91 struct hci_dev *hdev = f->private;
92 u8 p;
94 hci_dev_lock(hdev);
95 for (p = 0; p < HCI_MAX_PAGES && p <= hdev->max_page; p++)
96 seq_printf(f, "%2u: %8ph\n", p, hdev->features[p]);
97 if (lmp_le_capable(hdev))
98 seq_printf(f, "LE: %8ph\n", hdev->le_features);
99 hci_dev_unlock(hdev);
101 return 0;
104 DEFINE_SHOW_ATTRIBUTE(features);
106 static int device_id_show(struct seq_file *f, void *ptr)
108 struct hci_dev *hdev = f->private;
110 hci_dev_lock(hdev);
111 seq_printf(f, "%4.4x:%4.4x:%4.4x:%4.4x\n", hdev->devid_source,
112 hdev->devid_vendor, hdev->devid_product, hdev->devid_version);
113 hci_dev_unlock(hdev);
115 return 0;
118 DEFINE_SHOW_ATTRIBUTE(device_id);
120 static int device_list_show(struct seq_file *f, void *ptr)
122 struct hci_dev *hdev = f->private;
123 struct hci_conn_params *p;
124 struct bdaddr_list *b;
126 hci_dev_lock(hdev);
127 list_for_each_entry(b, &hdev->whitelist, list)
128 seq_printf(f, "%pMR (type %u)\n", &b->bdaddr, b->bdaddr_type);
129 list_for_each_entry(p, &hdev->le_conn_params, list) {
130 seq_printf(f, "%pMR (type %u) %u\n", &p->addr, p->addr_type,
131 p->auto_connect);
133 hci_dev_unlock(hdev);
135 return 0;
138 DEFINE_SHOW_ATTRIBUTE(device_list);
140 static int blacklist_show(struct seq_file *f, void *p)
142 struct hci_dev *hdev = f->private;
143 struct bdaddr_list *b;
145 hci_dev_lock(hdev);
146 list_for_each_entry(b, &hdev->blacklist, list)
147 seq_printf(f, "%pMR (type %u)\n", &b->bdaddr, b->bdaddr_type);
148 hci_dev_unlock(hdev);
150 return 0;
153 DEFINE_SHOW_ATTRIBUTE(blacklist);
155 static int uuids_show(struct seq_file *f, void *p)
157 struct hci_dev *hdev = f->private;
158 struct bt_uuid *uuid;
160 hci_dev_lock(hdev);
161 list_for_each_entry(uuid, &hdev->uuids, list) {
162 u8 i, val[16];
164 /* The Bluetooth UUID values are stored in big endian,
165 * but with reversed byte order. So convert them into
166 * the right order for the %pUb modifier.
168 for (i = 0; i < 16; i++)
169 val[i] = uuid->uuid[15 - i];
171 seq_printf(f, "%pUb\n", val);
173 hci_dev_unlock(hdev);
175 return 0;
178 DEFINE_SHOW_ATTRIBUTE(uuids);
180 static int remote_oob_show(struct seq_file *f, void *ptr)
182 struct hci_dev *hdev = f->private;
183 struct oob_data *data;
185 hci_dev_lock(hdev);
186 list_for_each_entry(data, &hdev->remote_oob_data, list) {
187 seq_printf(f, "%pMR (type %u) %u %*phN %*phN %*phN %*phN\n",
188 &data->bdaddr, data->bdaddr_type, data->present,
189 16, data->hash192, 16, data->rand192,
190 16, data->hash256, 16, data->rand256);
192 hci_dev_unlock(hdev);
194 return 0;
197 DEFINE_SHOW_ATTRIBUTE(remote_oob);
199 static int conn_info_min_age_set(void *data, u64 val)
201 struct hci_dev *hdev = data;
203 if (val == 0 || val > hdev->conn_info_max_age)
204 return -EINVAL;
206 hci_dev_lock(hdev);
207 hdev->conn_info_min_age = val;
208 hci_dev_unlock(hdev);
210 return 0;
213 static int conn_info_min_age_get(void *data, u64 *val)
215 struct hci_dev *hdev = data;
217 hci_dev_lock(hdev);
218 *val = hdev->conn_info_min_age;
219 hci_dev_unlock(hdev);
221 return 0;
224 DEFINE_SIMPLE_ATTRIBUTE(conn_info_min_age_fops, conn_info_min_age_get,
225 conn_info_min_age_set, "%llu\n");
227 static int conn_info_max_age_set(void *data, u64 val)
229 struct hci_dev *hdev = data;
231 if (val == 0 || val < hdev->conn_info_min_age)
232 return -EINVAL;
234 hci_dev_lock(hdev);
235 hdev->conn_info_max_age = val;
236 hci_dev_unlock(hdev);
238 return 0;
241 static int conn_info_max_age_get(void *data, u64 *val)
243 struct hci_dev *hdev = data;
245 hci_dev_lock(hdev);
246 *val = hdev->conn_info_max_age;
247 hci_dev_unlock(hdev);
249 return 0;
252 DEFINE_SIMPLE_ATTRIBUTE(conn_info_max_age_fops, conn_info_max_age_get,
253 conn_info_max_age_set, "%llu\n");
255 static ssize_t use_debug_keys_read(struct file *file, char __user *user_buf,
256 size_t count, loff_t *ppos)
258 struct hci_dev *hdev = file->private_data;
259 char buf[3];
261 buf[0] = hci_dev_test_flag(hdev, HCI_USE_DEBUG_KEYS) ? 'Y': 'N';
262 buf[1] = '\n';
263 buf[2] = '\0';
264 return simple_read_from_buffer(user_buf, count, ppos, buf, 2);
267 static const struct file_operations use_debug_keys_fops = {
268 .open = simple_open,
269 .read = use_debug_keys_read,
270 .llseek = default_llseek,
273 static ssize_t sc_only_mode_read(struct file *file, char __user *user_buf,
274 size_t count, loff_t *ppos)
276 struct hci_dev *hdev = file->private_data;
277 char buf[3];
279 buf[0] = hci_dev_test_flag(hdev, HCI_SC_ONLY) ? 'Y': 'N';
280 buf[1] = '\n';
281 buf[2] = '\0';
282 return simple_read_from_buffer(user_buf, count, ppos, buf, 2);
285 static const struct file_operations sc_only_mode_fops = {
286 .open = simple_open,
287 .read = sc_only_mode_read,
288 .llseek = default_llseek,
291 DEFINE_INFO_ATTRIBUTE(hardware_info, hw_info);
292 DEFINE_INFO_ATTRIBUTE(firmware_info, fw_info);
294 void hci_debugfs_create_common(struct hci_dev *hdev)
296 debugfs_create_file("features", 0444, hdev->debugfs, hdev,
297 &features_fops);
298 debugfs_create_u16("manufacturer", 0444, hdev->debugfs,
299 &hdev->manufacturer);
300 debugfs_create_u8("hci_version", 0444, hdev->debugfs, &hdev->hci_ver);
301 debugfs_create_u16("hci_revision", 0444, hdev->debugfs, &hdev->hci_rev);
302 debugfs_create_u8("hardware_error", 0444, hdev->debugfs,
303 &hdev->hw_error_code);
304 debugfs_create_file("device_id", 0444, hdev->debugfs, hdev,
305 &device_id_fops);
307 debugfs_create_file("device_list", 0444, hdev->debugfs, hdev,
308 &device_list_fops);
309 debugfs_create_file("blacklist", 0444, hdev->debugfs, hdev,
310 &blacklist_fops);
311 debugfs_create_file("uuids", 0444, hdev->debugfs, hdev, &uuids_fops);
312 debugfs_create_file("remote_oob", 0400, hdev->debugfs, hdev,
313 &remote_oob_fops);
315 debugfs_create_file("conn_info_min_age", 0644, hdev->debugfs, hdev,
316 &conn_info_min_age_fops);
317 debugfs_create_file("conn_info_max_age", 0644, hdev->debugfs, hdev,
318 &conn_info_max_age_fops);
320 if (lmp_ssp_capable(hdev) || lmp_le_capable(hdev))
321 debugfs_create_file("use_debug_keys", 0444, hdev->debugfs,
322 hdev, &use_debug_keys_fops);
324 if (lmp_sc_capable(hdev) || lmp_le_capable(hdev))
325 debugfs_create_file("sc_only_mode", 0444, hdev->debugfs,
326 hdev, &sc_only_mode_fops);
328 if (hdev->hw_info)
329 debugfs_create_file("hardware_info", 0444, hdev->debugfs,
330 hdev, &hardware_info_fops);
332 if (hdev->fw_info)
333 debugfs_create_file("firmware_info", 0444, hdev->debugfs,
334 hdev, &firmware_info_fops);
337 static int inquiry_cache_show(struct seq_file *f, void *p)
339 struct hci_dev *hdev = f->private;
340 struct discovery_state *cache = &hdev->discovery;
341 struct inquiry_entry *e;
343 hci_dev_lock(hdev);
345 list_for_each_entry(e, &cache->all, all) {
346 struct inquiry_data *data = &e->data;
347 seq_printf(f, "%pMR %d %d %d 0x%.2x%.2x%.2x 0x%.4x %d %d %u\n",
348 &data->bdaddr,
349 data->pscan_rep_mode, data->pscan_period_mode,
350 data->pscan_mode, data->dev_class[2],
351 data->dev_class[1], data->dev_class[0],
352 __le16_to_cpu(data->clock_offset),
353 data->rssi, data->ssp_mode, e->timestamp);
356 hci_dev_unlock(hdev);
358 return 0;
361 DEFINE_SHOW_ATTRIBUTE(inquiry_cache);
363 static int link_keys_show(struct seq_file *f, void *ptr)
365 struct hci_dev *hdev = f->private;
366 struct link_key *key;
368 rcu_read_lock();
369 list_for_each_entry_rcu(key, &hdev->link_keys, list)
370 seq_printf(f, "%pMR %u %*phN %u\n", &key->bdaddr, key->type,
371 HCI_LINK_KEY_SIZE, key->val, key->pin_len);
372 rcu_read_unlock();
374 return 0;
377 DEFINE_SHOW_ATTRIBUTE(link_keys);
379 static int dev_class_show(struct seq_file *f, void *ptr)
381 struct hci_dev *hdev = f->private;
383 hci_dev_lock(hdev);
384 seq_printf(f, "0x%.2x%.2x%.2x\n", hdev->dev_class[2],
385 hdev->dev_class[1], hdev->dev_class[0]);
386 hci_dev_unlock(hdev);
388 return 0;
391 DEFINE_SHOW_ATTRIBUTE(dev_class);
393 static int voice_setting_get(void *data, u64 *val)
395 struct hci_dev *hdev = data;
397 hci_dev_lock(hdev);
398 *val = hdev->voice_setting;
399 hci_dev_unlock(hdev);
401 return 0;
404 DEFINE_SIMPLE_ATTRIBUTE(voice_setting_fops, voice_setting_get,
405 NULL, "0x%4.4llx\n");
407 static ssize_t ssp_debug_mode_read(struct file *file, char __user *user_buf,
408 size_t count, loff_t *ppos)
410 struct hci_dev *hdev = file->private_data;
411 char buf[3];
413 buf[0] = hdev->ssp_debug_mode ? 'Y': 'N';
414 buf[1] = '\n';
415 buf[2] = '\0';
416 return simple_read_from_buffer(user_buf, count, ppos, buf, 2);
419 static const struct file_operations ssp_debug_mode_fops = {
420 .open = simple_open,
421 .read = ssp_debug_mode_read,
422 .llseek = default_llseek,
425 static int auto_accept_delay_set(void *data, u64 val)
427 struct hci_dev *hdev = data;
429 hci_dev_lock(hdev);
430 hdev->auto_accept_delay = val;
431 hci_dev_unlock(hdev);
433 return 0;
436 static int auto_accept_delay_get(void *data, u64 *val)
438 struct hci_dev *hdev = data;
440 hci_dev_lock(hdev);
441 *val = hdev->auto_accept_delay;
442 hci_dev_unlock(hdev);
444 return 0;
447 DEFINE_SIMPLE_ATTRIBUTE(auto_accept_delay_fops, auto_accept_delay_get,
448 auto_accept_delay_set, "%llu\n");
450 static int idle_timeout_set(void *data, u64 val)
452 struct hci_dev *hdev = data;
454 if (val != 0 && (val < 500 || val > 3600000))
455 return -EINVAL;
457 hci_dev_lock(hdev);
458 hdev->idle_timeout = val;
459 hci_dev_unlock(hdev);
461 return 0;
464 static int idle_timeout_get(void *data, u64 *val)
466 struct hci_dev *hdev = data;
468 hci_dev_lock(hdev);
469 *val = hdev->idle_timeout;
470 hci_dev_unlock(hdev);
472 return 0;
475 DEFINE_SIMPLE_ATTRIBUTE(idle_timeout_fops, idle_timeout_get,
476 idle_timeout_set, "%llu\n");
478 static int sniff_min_interval_set(void *data, u64 val)
480 struct hci_dev *hdev = data;
482 if (val == 0 || val % 2 || val > hdev->sniff_max_interval)
483 return -EINVAL;
485 hci_dev_lock(hdev);
486 hdev->sniff_min_interval = val;
487 hci_dev_unlock(hdev);
489 return 0;
492 static int sniff_min_interval_get(void *data, u64 *val)
494 struct hci_dev *hdev = data;
496 hci_dev_lock(hdev);
497 *val = hdev->sniff_min_interval;
498 hci_dev_unlock(hdev);
500 return 0;
503 DEFINE_SIMPLE_ATTRIBUTE(sniff_min_interval_fops, sniff_min_interval_get,
504 sniff_min_interval_set, "%llu\n");
506 static int sniff_max_interval_set(void *data, u64 val)
508 struct hci_dev *hdev = data;
510 if (val == 0 || val % 2 || val < hdev->sniff_min_interval)
511 return -EINVAL;
513 hci_dev_lock(hdev);
514 hdev->sniff_max_interval = val;
515 hci_dev_unlock(hdev);
517 return 0;
520 static int sniff_max_interval_get(void *data, u64 *val)
522 struct hci_dev *hdev = data;
524 hci_dev_lock(hdev);
525 *val = hdev->sniff_max_interval;
526 hci_dev_unlock(hdev);
528 return 0;
531 DEFINE_SIMPLE_ATTRIBUTE(sniff_max_interval_fops, sniff_max_interval_get,
532 sniff_max_interval_set, "%llu\n");
534 void hci_debugfs_create_bredr(struct hci_dev *hdev)
536 debugfs_create_file("inquiry_cache", 0444, hdev->debugfs, hdev,
537 &inquiry_cache_fops);
538 debugfs_create_file("link_keys", 0400, hdev->debugfs, hdev,
539 &link_keys_fops);
540 debugfs_create_file("dev_class", 0444, hdev->debugfs, hdev,
541 &dev_class_fops);
542 debugfs_create_file("voice_setting", 0444, hdev->debugfs, hdev,
543 &voice_setting_fops);
545 if (lmp_ssp_capable(hdev)) {
546 debugfs_create_file("ssp_debug_mode", 0444, hdev->debugfs,
547 hdev, &ssp_debug_mode_fops);
548 debugfs_create_file("auto_accept_delay", 0644, hdev->debugfs,
549 hdev, &auto_accept_delay_fops);
552 if (lmp_sniff_capable(hdev)) {
553 debugfs_create_file("idle_timeout", 0644, hdev->debugfs,
554 hdev, &idle_timeout_fops);
555 debugfs_create_file("sniff_min_interval", 0644, hdev->debugfs,
556 hdev, &sniff_min_interval_fops);
557 debugfs_create_file("sniff_max_interval", 0644, hdev->debugfs,
558 hdev, &sniff_max_interval_fops);
562 static int identity_show(struct seq_file *f, void *p)
564 struct hci_dev *hdev = f->private;
565 bdaddr_t addr;
566 u8 addr_type;
568 hci_dev_lock(hdev);
570 hci_copy_identity_address(hdev, &addr, &addr_type);
572 seq_printf(f, "%pMR (type %u) %*phN %pMR\n", &addr, addr_type,
573 16, hdev->irk, &hdev->rpa);
575 hci_dev_unlock(hdev);
577 return 0;
580 DEFINE_SHOW_ATTRIBUTE(identity);
582 static int rpa_timeout_set(void *data, u64 val)
584 struct hci_dev *hdev = data;
586 /* Require the RPA timeout to be at least 30 seconds and at most
587 * 24 hours.
589 if (val < 30 || val > (60 * 60 * 24))
590 return -EINVAL;
592 hci_dev_lock(hdev);
593 hdev->rpa_timeout = val;
594 hci_dev_unlock(hdev);
596 return 0;
599 static int rpa_timeout_get(void *data, u64 *val)
601 struct hci_dev *hdev = data;
603 hci_dev_lock(hdev);
604 *val = hdev->rpa_timeout;
605 hci_dev_unlock(hdev);
607 return 0;
610 DEFINE_SIMPLE_ATTRIBUTE(rpa_timeout_fops, rpa_timeout_get,
611 rpa_timeout_set, "%llu\n");
613 static int random_address_show(struct seq_file *f, void *p)
615 struct hci_dev *hdev = f->private;
617 hci_dev_lock(hdev);
618 seq_printf(f, "%pMR\n", &hdev->random_addr);
619 hci_dev_unlock(hdev);
621 return 0;
624 DEFINE_SHOW_ATTRIBUTE(random_address);
626 static int static_address_show(struct seq_file *f, void *p)
628 struct hci_dev *hdev = f->private;
630 hci_dev_lock(hdev);
631 seq_printf(f, "%pMR\n", &hdev->static_addr);
632 hci_dev_unlock(hdev);
634 return 0;
637 DEFINE_SHOW_ATTRIBUTE(static_address);
639 static ssize_t force_static_address_read(struct file *file,
640 char __user *user_buf,
641 size_t count, loff_t *ppos)
643 struct hci_dev *hdev = file->private_data;
644 char buf[3];
646 buf[0] = hci_dev_test_flag(hdev, HCI_FORCE_STATIC_ADDR) ? 'Y': 'N';
647 buf[1] = '\n';
648 buf[2] = '\0';
649 return simple_read_from_buffer(user_buf, count, ppos, buf, 2);
652 static ssize_t force_static_address_write(struct file *file,
653 const char __user *user_buf,
654 size_t count, loff_t *ppos)
656 struct hci_dev *hdev = file->private_data;
657 bool enable;
658 int err;
660 if (test_bit(HCI_UP, &hdev->flags))
661 return -EBUSY;
663 err = kstrtobool_from_user(user_buf, count, &enable);
664 if (err)
665 return err;
667 if (enable == hci_dev_test_flag(hdev, HCI_FORCE_STATIC_ADDR))
668 return -EALREADY;
670 hci_dev_change_flag(hdev, HCI_FORCE_STATIC_ADDR);
672 return count;
675 static const struct file_operations force_static_address_fops = {
676 .open = simple_open,
677 .read = force_static_address_read,
678 .write = force_static_address_write,
679 .llseek = default_llseek,
682 static int white_list_show(struct seq_file *f, void *ptr)
684 struct hci_dev *hdev = f->private;
685 struct bdaddr_list *b;
687 hci_dev_lock(hdev);
688 list_for_each_entry(b, &hdev->le_white_list, list)
689 seq_printf(f, "%pMR (type %u)\n", &b->bdaddr, b->bdaddr_type);
690 hci_dev_unlock(hdev);
692 return 0;
695 DEFINE_SHOW_ATTRIBUTE(white_list);
697 static int resolv_list_show(struct seq_file *f, void *ptr)
699 struct hci_dev *hdev = f->private;
700 struct bdaddr_list *b;
702 hci_dev_lock(hdev);
703 list_for_each_entry(b, &hdev->le_resolv_list, list)
704 seq_printf(f, "%pMR (type %u)\n", &b->bdaddr, b->bdaddr_type);
705 hci_dev_unlock(hdev);
707 return 0;
710 DEFINE_SHOW_ATTRIBUTE(resolv_list);
712 static int identity_resolving_keys_show(struct seq_file *f, void *ptr)
714 struct hci_dev *hdev = f->private;
715 struct smp_irk *irk;
717 rcu_read_lock();
718 list_for_each_entry_rcu(irk, &hdev->identity_resolving_keys, list) {
719 seq_printf(f, "%pMR (type %u) %*phN %pMR\n",
720 &irk->bdaddr, irk->addr_type,
721 16, irk->val, &irk->rpa);
723 rcu_read_unlock();
725 return 0;
728 DEFINE_SHOW_ATTRIBUTE(identity_resolving_keys);
730 static int long_term_keys_show(struct seq_file *f, void *ptr)
732 struct hci_dev *hdev = f->private;
733 struct smp_ltk *ltk;
735 rcu_read_lock();
736 list_for_each_entry_rcu(ltk, &hdev->long_term_keys, list)
737 seq_printf(f, "%pMR (type %u) %u 0x%02x %u %.4x %.16llx %*phN\n",
738 &ltk->bdaddr, ltk->bdaddr_type, ltk->authenticated,
739 ltk->type, ltk->enc_size, __le16_to_cpu(ltk->ediv),
740 __le64_to_cpu(ltk->rand), 16, ltk->val);
741 rcu_read_unlock();
743 return 0;
746 DEFINE_SHOW_ATTRIBUTE(long_term_keys);
748 static int conn_min_interval_set(void *data, u64 val)
750 struct hci_dev *hdev = data;
752 if (val < 0x0006 || val > 0x0c80 || val > hdev->le_conn_max_interval)
753 return -EINVAL;
755 hci_dev_lock(hdev);
756 hdev->le_conn_min_interval = val;
757 hci_dev_unlock(hdev);
759 return 0;
762 static int conn_min_interval_get(void *data, u64 *val)
764 struct hci_dev *hdev = data;
766 hci_dev_lock(hdev);
767 *val = hdev->le_conn_min_interval;
768 hci_dev_unlock(hdev);
770 return 0;
773 DEFINE_SIMPLE_ATTRIBUTE(conn_min_interval_fops, conn_min_interval_get,
774 conn_min_interval_set, "%llu\n");
776 static int conn_max_interval_set(void *data, u64 val)
778 struct hci_dev *hdev = data;
780 if (val < 0x0006 || val > 0x0c80 || val < hdev->le_conn_min_interval)
781 return -EINVAL;
783 hci_dev_lock(hdev);
784 hdev->le_conn_max_interval = val;
785 hci_dev_unlock(hdev);
787 return 0;
790 static int conn_max_interval_get(void *data, u64 *val)
792 struct hci_dev *hdev = data;
794 hci_dev_lock(hdev);
795 *val = hdev->le_conn_max_interval;
796 hci_dev_unlock(hdev);
798 return 0;
801 DEFINE_SIMPLE_ATTRIBUTE(conn_max_interval_fops, conn_max_interval_get,
802 conn_max_interval_set, "%llu\n");
804 static int conn_latency_set(void *data, u64 val)
806 struct hci_dev *hdev = data;
808 if (val > 0x01f3)
809 return -EINVAL;
811 hci_dev_lock(hdev);
812 hdev->le_conn_latency = val;
813 hci_dev_unlock(hdev);
815 return 0;
818 static int conn_latency_get(void *data, u64 *val)
820 struct hci_dev *hdev = data;
822 hci_dev_lock(hdev);
823 *val = hdev->le_conn_latency;
824 hci_dev_unlock(hdev);
826 return 0;
829 DEFINE_SIMPLE_ATTRIBUTE(conn_latency_fops, conn_latency_get,
830 conn_latency_set, "%llu\n");
832 static int supervision_timeout_set(void *data, u64 val)
834 struct hci_dev *hdev = data;
836 if (val < 0x000a || val > 0x0c80)
837 return -EINVAL;
839 hci_dev_lock(hdev);
840 hdev->le_supv_timeout = val;
841 hci_dev_unlock(hdev);
843 return 0;
846 static int supervision_timeout_get(void *data, u64 *val)
848 struct hci_dev *hdev = data;
850 hci_dev_lock(hdev);
851 *val = hdev->le_supv_timeout;
852 hci_dev_unlock(hdev);
854 return 0;
857 DEFINE_SIMPLE_ATTRIBUTE(supervision_timeout_fops, supervision_timeout_get,
858 supervision_timeout_set, "%llu\n");
860 static int adv_channel_map_set(void *data, u64 val)
862 struct hci_dev *hdev = data;
864 if (val < 0x01 || val > 0x07)
865 return -EINVAL;
867 hci_dev_lock(hdev);
868 hdev->le_adv_channel_map = val;
869 hci_dev_unlock(hdev);
871 return 0;
874 static int adv_channel_map_get(void *data, u64 *val)
876 struct hci_dev *hdev = data;
878 hci_dev_lock(hdev);
879 *val = hdev->le_adv_channel_map;
880 hci_dev_unlock(hdev);
882 return 0;
885 DEFINE_SIMPLE_ATTRIBUTE(adv_channel_map_fops, adv_channel_map_get,
886 adv_channel_map_set, "%llu\n");
888 static int adv_min_interval_set(void *data, u64 val)
890 struct hci_dev *hdev = data;
892 if (val < 0x0020 || val > 0x4000 || val > hdev->le_adv_max_interval)
893 return -EINVAL;
895 hci_dev_lock(hdev);
896 hdev->le_adv_min_interval = val;
897 hci_dev_unlock(hdev);
899 return 0;
902 static int adv_min_interval_get(void *data, u64 *val)
904 struct hci_dev *hdev = data;
906 hci_dev_lock(hdev);
907 *val = hdev->le_adv_min_interval;
908 hci_dev_unlock(hdev);
910 return 0;
913 DEFINE_SIMPLE_ATTRIBUTE(adv_min_interval_fops, adv_min_interval_get,
914 adv_min_interval_set, "%llu\n");
916 static int adv_max_interval_set(void *data, u64 val)
918 struct hci_dev *hdev = data;
920 if (val < 0x0020 || val > 0x4000 || val < hdev->le_adv_min_interval)
921 return -EINVAL;
923 hci_dev_lock(hdev);
924 hdev->le_adv_max_interval = val;
925 hci_dev_unlock(hdev);
927 return 0;
930 static int adv_max_interval_get(void *data, u64 *val)
932 struct hci_dev *hdev = data;
934 hci_dev_lock(hdev);
935 *val = hdev->le_adv_max_interval;
936 hci_dev_unlock(hdev);
938 return 0;
941 DEFINE_SIMPLE_ATTRIBUTE(adv_max_interval_fops, adv_max_interval_get,
942 adv_max_interval_set, "%llu\n");
944 DEFINE_QUIRK_ATTRIBUTE(quirk_strict_duplicate_filter,
945 HCI_QUIRK_STRICT_DUPLICATE_FILTER);
946 DEFINE_QUIRK_ATTRIBUTE(quirk_simultaneous_discovery,
947 HCI_QUIRK_SIMULTANEOUS_DISCOVERY);
949 void hci_debugfs_create_le(struct hci_dev *hdev)
951 debugfs_create_file("identity", 0400, hdev->debugfs, hdev,
952 &identity_fops);
953 debugfs_create_file("rpa_timeout", 0644, hdev->debugfs, hdev,
954 &rpa_timeout_fops);
955 debugfs_create_file("random_address", 0444, hdev->debugfs, hdev,
956 &random_address_fops);
957 debugfs_create_file("static_address", 0444, hdev->debugfs, hdev,
958 &static_address_fops);
960 /* For controllers with a public address, provide a debug
961 * option to force the usage of the configured static
962 * address. By default the public address is used.
964 if (bacmp(&hdev->bdaddr, BDADDR_ANY))
965 debugfs_create_file("force_static_address", 0644,
966 hdev->debugfs, hdev,
967 &force_static_address_fops);
969 debugfs_create_u8("white_list_size", 0444, hdev->debugfs,
970 &hdev->le_white_list_size);
971 debugfs_create_file("white_list", 0444, hdev->debugfs, hdev,
972 &white_list_fops);
973 debugfs_create_u8("resolv_list_size", 0444, hdev->debugfs,
974 &hdev->le_resolv_list_size);
975 debugfs_create_file("resolv_list", 0444, hdev->debugfs, hdev,
976 &resolv_list_fops);
977 debugfs_create_file("identity_resolving_keys", 0400, hdev->debugfs,
978 hdev, &identity_resolving_keys_fops);
979 debugfs_create_file("long_term_keys", 0400, hdev->debugfs, hdev,
980 &long_term_keys_fops);
981 debugfs_create_file("conn_min_interval", 0644, hdev->debugfs, hdev,
982 &conn_min_interval_fops);
983 debugfs_create_file("conn_max_interval", 0644, hdev->debugfs, hdev,
984 &conn_max_interval_fops);
985 debugfs_create_file("conn_latency", 0644, hdev->debugfs, hdev,
986 &conn_latency_fops);
987 debugfs_create_file("supervision_timeout", 0644, hdev->debugfs, hdev,
988 &supervision_timeout_fops);
989 debugfs_create_file("adv_channel_map", 0644, hdev->debugfs, hdev,
990 &adv_channel_map_fops);
991 debugfs_create_file("adv_min_interval", 0644, hdev->debugfs, hdev,
992 &adv_min_interval_fops);
993 debugfs_create_file("adv_max_interval", 0644, hdev->debugfs, hdev,
994 &adv_max_interval_fops);
995 debugfs_create_u16("discov_interleaved_timeout", 0644, hdev->debugfs,
996 &hdev->discov_interleaved_timeout);
998 debugfs_create_file("quirk_strict_duplicate_filter", 0644,
999 hdev->debugfs, hdev,
1000 &quirk_strict_duplicate_filter_fops);
1001 debugfs_create_file("quirk_simultaneous_discovery", 0644,
1002 hdev->debugfs, hdev,
1003 &quirk_simultaneous_discovery_fops);
1006 void hci_debugfs_create_conn(struct hci_conn *conn)
1008 struct hci_dev *hdev = conn->hdev;
1009 char name[6];
1011 if (IS_ERR_OR_NULL(hdev->debugfs))
1012 return;
1014 snprintf(name, sizeof(name), "%u", conn->handle);
1015 conn->debugfs = debugfs_create_dir(name, hdev->debugfs);