linux/net/bluetooth/hci_debugfs.c
<<
>>
Prefs
   1/*
   2   BlueZ - Bluetooth protocol stack for Linux
   3
   4   Copyright (C) 2014 Intel Corporation
   5
   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;
   9
  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.
  18
  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.
  22*/
  23
  24#include <linux/debugfs.h>
  25
  26#include <net/bluetooth/bluetooth.h>
  27#include <net/bluetooth/hci_core.h>
  28
  29#include "hci_debugfs.h"
  30
  31#define DEFINE_QUIRK_ATTRIBUTE(__name, __quirk)                               \
  32static 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];                                                          \
  38                                                                              \
  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}                                                                             \
  44                                                                              \
  45static 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;                                                              \
  52                                                                              \
  53        if (test_bit(HCI_UP, &hdev->flags))                                   \
  54                return -EBUSY;                                                \
  55                                                                              \
  56        err = kstrtobool_from_user(user_buf, count, &enable);                 \
  57        if (err)                                                              \
  58                return err;                                                   \
  59                                                                              \
  60        if (enable == test_bit(__quirk, &hdev->quirks))                       \
  61                return -EALREADY;                                             \
  62                                                                              \
  63        change_bit(__quirk, &hdev->quirks);                                   \
  64                                                                              \
  65        return count;                                                         \
  66}                                                                             \
  67                                                                              \
  68static const struct file_operations __name ## _fops = {                       \
  69        .open           = simple_open,                                        \
  70        .read           = __name ## _read,                                    \
  71        .write          = __name ## _write,                                   \
  72        .llseek         = default_llseek,                                     \
  73}                                                                             \
  74
  75#define DEFINE_INFO_ATTRIBUTE(__name, __field)                                \
  76static int __name ## _show(struct seq_file *f, void *ptr)                     \
  77{                                                                             \
  78        struct hci_dev *hdev = f->private;                                    \
  79                                                                              \
  80        hci_dev_lock(hdev);                                                   \
  81        seq_printf(f, "%s\n", hdev->__field ? : "");                          \
  82        hci_dev_unlock(hdev);                                                 \
  83                                                                              \
  84        return 0;                                                             \
  85}                                                                             \
  86                                                                              \
  87DEFINE_SHOW_ATTRIBUTE(__name)
  88
  89static int features_show(struct seq_file *f, void *ptr)
  90{
  91        struct hci_dev *hdev = f->private;
  92        u8 p;
  93
  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);
 100
 101        return 0;
 102}
 103
 104DEFINE_SHOW_ATTRIBUTE(features);
 105
 106static int device_id_show(struct seq_file *f, void *ptr)
 107{
 108        struct hci_dev *hdev = f->private;
 109
 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);
 114
 115        return 0;
 116}
 117
 118DEFINE_SHOW_ATTRIBUTE(device_id);
 119
 120static int device_list_show(struct seq_file *f, void *ptr)
 121{
 122        struct hci_dev *hdev = f->private;
 123        struct hci_conn_params *p;
 124        struct bdaddr_list *b;
 125
 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);
 132        }
 133        hci_dev_unlock(hdev);
 134
 135        return 0;
 136}
 137
 138DEFINE_SHOW_ATTRIBUTE(device_list);
 139
 140static int blacklist_show(struct seq_file *f, void *p)
 141{
 142        struct hci_dev *hdev = f->private;
 143        struct bdaddr_list *b;
 144
 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);
 149
 150        return 0;
 151}
 152
 153DEFINE_SHOW_ATTRIBUTE(blacklist);
 154
 155static int uuids_show(struct seq_file *f, void *p)
 156{
 157        struct hci_dev *hdev = f->private;
 158        struct bt_uuid *uuid;
 159
 160        hci_dev_lock(hdev);
 161        list_for_each_entry(uuid, &hdev->uuids, list) {
 162                u8 i, val[16];
 163
 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.
 167                 */
 168                for (i = 0; i < 16; i++)
 169                        val[i] = uuid->uuid[15 - i];
 170
 171                seq_printf(f, "%pUb\n", val);
 172        }
 173        hci_dev_unlock(hdev);
 174
 175       return 0;
 176}
 177
 178DEFINE_SHOW_ATTRIBUTE(uuids);
 179
 180static int remote_oob_show(struct seq_file *f, void *ptr)
 181{
 182        struct hci_dev *hdev = f->private;
 183        struct oob_data *data;
 184
 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);
 191        }
 192        hci_dev_unlock(hdev);
 193
 194        return 0;
 195}
 196
 197DEFINE_SHOW_ATTRIBUTE(remote_oob);
 198
 199static int conn_info_min_age_set(void *data, u64 val)
 200{
 201        struct hci_dev *hdev = data;
 202
 203        if (val == 0 || val > hdev->conn_info_max_age)
 204                return -EINVAL;
 205
 206        hci_dev_lock(hdev);
 207        hdev->conn_info_min_age = val;
 208        hci_dev_unlock(hdev);
 209
 210        return 0;
 211}
 212
 213static int conn_info_min_age_get(void *data, u64 *val)
 214{
 215        struct hci_dev *hdev = data;
 216
 217        hci_dev_lock(hdev);
 218        *val = hdev->conn_info_min_age;
 219        hci_dev_unlock(hdev);
 220
 221        return 0;
 222}
 223
 224DEFINE_SIMPLE_ATTRIBUTE(conn_info_min_age_fops, conn_info_min_age_get,
 225                        conn_info_min_age_set, "%llu\n");
 226
 227static int conn_info_max_age_set(void *data, u64 val)
 228{
 229        struct hci_dev *hdev = data;
 230
 231        if (val == 0 || val < hdev->conn_info_min_age)
 232                return -EINVAL;
 233
 234        hci_dev_lock(hdev);
 235        hdev->conn_info_max_age = val;
 236        hci_dev_unlock(hdev);
 237
 238        return 0;
 239}
 240
 241static int conn_info_max_age_get(void *data, u64 *val)
 242{
 243        struct hci_dev *hdev = data;
 244
 245        hci_dev_lock(hdev);
 246        *val = hdev->conn_info_max_age;
 247        hci_dev_unlock(hdev);
 248
 249        return 0;
 250}
 251
 252DEFINE_SIMPLE_ATTRIBUTE(conn_info_max_age_fops, conn_info_max_age_get,
 253                        conn_info_max_age_set, "%llu\n");
 254
 255static ssize_t use_debug_keys_read(struct file *file, char __user *user_buf,
 256                                   size_t count, loff_t *ppos)
 257{
 258        struct hci_dev *hdev = file->private_data;
 259        char buf[3];
 260
 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);
 265}
 266
 267static const struct file_operations use_debug_keys_fops = {
 268        .open           = simple_open,
 269        .read           = use_debug_keys_read,
 270        .llseek         = default_llseek,
 271};
 272
 273static ssize_t sc_only_mode_read(struct file *file, char __user *user_buf,
 274                                 size_t count, loff_t *ppos)
 275{
 276        struct hci_dev *hdev = file->private_data;
 277        char buf[3];
 278
 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);
 283}
 284
 285static const struct file_operations sc_only_mode_fops = {
 286        .open           = simple_open,
 287        .read           = sc_only_mode_read,
 288        .llseek         = default_llseek,
 289};
 290
 291DEFINE_INFO_ATTRIBUTE(hardware_info, hw_info);
 292DEFINE_INFO_ATTRIBUTE(firmware_info, fw_info);
 293
 294void hci_debugfs_create_common(struct hci_dev *hdev)
 295{
 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);
 306
 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);
 314
 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);
 319
 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);
 323
 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);
 327
 328        if (hdev->hw_info)
 329                debugfs_create_file("hardware_info", 0444, hdev->debugfs,
 330                                    hdev, &hardware_info_fops);
 331
 332        if (hdev->fw_info)
 333                debugfs_create_file("firmware_info", 0444, hdev->debugfs,
 334                                    hdev, &firmware_info_fops);
 335}
 336
 337static int inquiry_cache_show(struct seq_file *f, void *p)
 338{
 339        struct hci_dev *hdev = f->private;
 340        struct discovery_state *cache = &hdev->discovery;
 341        struct inquiry_entry *e;
 342
 343        hci_dev_lock(hdev);
 344
 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);
 354        }
 355
 356        hci_dev_unlock(hdev);
 357
 358        return 0;
 359}
 360
 361DEFINE_SHOW_ATTRIBUTE(inquiry_cache);
 362
 363static int link_keys_show(struct seq_file *f, void *ptr)
 364{
 365        struct hci_dev *hdev = f->private;
 366        struct link_key *key;
 367
 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();
 373
 374        return 0;
 375}
 376
 377DEFINE_SHOW_ATTRIBUTE(link_keys);
 378
 379static int dev_class_show(struct seq_file *f, void *ptr)
 380{
 381        struct hci_dev *hdev = f->private;
 382
 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);
 387
 388        return 0;
 389}
 390
 391DEFINE_SHOW_ATTRIBUTE(dev_class);
 392
 393static int voice_setting_get(void *data, u64 *val)
 394{
 395        struct hci_dev *hdev = data;
 396
 397        hci_dev_lock(hdev);
 398        *val = hdev->voice_setting;
 399        hci_dev_unlock(hdev);
 400
 401        return 0;
 402}
 403
 404DEFINE_SIMPLE_ATTRIBUTE(voice_setting_fops, voice_setting_get,
 405                        NULL, "0x%4.4llx\n");
 406
 407static ssize_t ssp_debug_mode_read(struct file *file, char __user *user_buf,
 408                                   size_t count, loff_t *ppos)
 409{
 410        struct hci_dev *hdev = file->private_data;
 411        char buf[3];
 412
 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);
 417}
 418
 419static const struct file_operations ssp_debug_mode_fops = {
 420        .open           = simple_open,
 421        .read           = ssp_debug_mode_read,
 422        .llseek         = default_llseek,
 423};
 424
 425static int auto_accept_delay_set(void *data, u64 val)
 426{
 427        struct hci_dev *hdev = data;
 428
 429        hci_dev_lock(hdev);
 430        hdev->auto_accept_delay = val;
 431        hci_dev_unlock(hdev);
 432
 433        return 0;
 434}
 435
 436static int min_encrypt_key_size_set(void *data, u64 val)
 437{
 438        struct hci_dev *hdev = data;
 439
 440        if (val < 1 || val > 16)
 441                return -EINVAL;
 442
 443        hci_dev_lock(hdev);
 444        hdev->min_enc_key_size = val;
 445        hci_dev_unlock(hdev);
 446
 447        return 0;
 448}
 449
 450static int min_encrypt_key_size_get(void *data, u64 *val)
 451{
 452        struct hci_dev *hdev = data;
 453
 454        hci_dev_lock(hdev);
 455        *val = hdev->min_enc_key_size;
 456        hci_dev_unlock(hdev);
 457
 458        return 0;
 459}
 460
 461DEFINE_SIMPLE_ATTRIBUTE(min_encrypt_key_size_fops,
 462                        min_encrypt_key_size_get,
 463                        min_encrypt_key_size_set, "%llu\n");
 464
 465static int auto_accept_delay_get(void *data, u64 *val)
 466{
 467        struct hci_dev *hdev = data;
 468
 469        hci_dev_lock(hdev);
 470        *val = hdev->auto_accept_delay;
 471        hci_dev_unlock(hdev);
 472
 473        return 0;
 474}
 475
 476DEFINE_SIMPLE_ATTRIBUTE(auto_accept_delay_fops, auto_accept_delay_get,
 477                        auto_accept_delay_set, "%llu\n");
 478
 479static int idle_timeout_set(void *data, u64 val)
 480{
 481        struct hci_dev *hdev = data;
 482
 483        if (val != 0 && (val < 500 || val > 3600000))
 484                return -EINVAL;
 485
 486        hci_dev_lock(hdev);
 487        hdev->idle_timeout = val;
 488        hci_dev_unlock(hdev);
 489
 490        return 0;
 491}
 492
 493static int idle_timeout_get(void *data, u64 *val)
 494{
 495        struct hci_dev *hdev = data;
 496
 497        hci_dev_lock(hdev);
 498        *val = hdev->idle_timeout;
 499        hci_dev_unlock(hdev);
 500
 501        return 0;
 502}
 503
 504DEFINE_SIMPLE_ATTRIBUTE(idle_timeout_fops, idle_timeout_get,
 505                        idle_timeout_set, "%llu\n");
 506
 507static int sniff_min_interval_set(void *data, u64 val)
 508{
 509        struct hci_dev *hdev = data;
 510
 511        if (val == 0 || val % 2 || val > hdev->sniff_max_interval)
 512                return -EINVAL;
 513
 514        hci_dev_lock(hdev);
 515        hdev->sniff_min_interval = val;
 516        hci_dev_unlock(hdev);
 517
 518        return 0;
 519}
 520
 521static int sniff_min_interval_get(void *data, u64 *val)
 522{
 523        struct hci_dev *hdev = data;
 524
 525        hci_dev_lock(hdev);
 526        *val = hdev->sniff_min_interval;
 527        hci_dev_unlock(hdev);
 528
 529        return 0;
 530}
 531
 532DEFINE_SIMPLE_ATTRIBUTE(sniff_min_interval_fops, sniff_min_interval_get,
 533                        sniff_min_interval_set, "%llu\n");
 534
 535static int sniff_max_interval_set(void *data, u64 val)
 536{
 537        struct hci_dev *hdev = data;
 538
 539        if (val == 0 || val % 2 || val < hdev->sniff_min_interval)
 540                return -EINVAL;
 541
 542        hci_dev_lock(hdev);
 543        hdev->sniff_max_interval = val;
 544        hci_dev_unlock(hdev);
 545
 546        return 0;
 547}
 548
 549static int sniff_max_interval_get(void *data, u64 *val)
 550{
 551        struct hci_dev *hdev = data;
 552
 553        hci_dev_lock(hdev);
 554        *val = hdev->sniff_max_interval;
 555        hci_dev_unlock(hdev);
 556
 557        return 0;
 558}
 559
 560DEFINE_SIMPLE_ATTRIBUTE(sniff_max_interval_fops, sniff_max_interval_get,
 561                        sniff_max_interval_set, "%llu\n");
 562
 563void hci_debugfs_create_bredr(struct hci_dev *hdev)
 564{
 565        debugfs_create_file("inquiry_cache", 0444, hdev->debugfs, hdev,
 566                            &inquiry_cache_fops);
 567        debugfs_create_file("link_keys", 0400, hdev->debugfs, hdev,
 568                            &link_keys_fops);
 569        debugfs_create_file("dev_class", 0444, hdev->debugfs, hdev,
 570                            &dev_class_fops);
 571        debugfs_create_file("voice_setting", 0444, hdev->debugfs, hdev,
 572                            &voice_setting_fops);
 573
 574        if (lmp_ssp_capable(hdev)) {
 575                debugfs_create_file("ssp_debug_mode", 0444, hdev->debugfs,
 576                                    hdev, &ssp_debug_mode_fops);
 577                debugfs_create_file("min_encrypt_key_size", 0644, hdev->debugfs,
 578                                    hdev, &min_encrypt_key_size_fops);
 579                debugfs_create_file("auto_accept_delay", 0644, hdev->debugfs,
 580                                    hdev, &auto_accept_delay_fops);
 581        }
 582
 583        if (lmp_sniff_capable(hdev)) {
 584                debugfs_create_file("idle_timeout", 0644, hdev->debugfs,
 585                                    hdev, &idle_timeout_fops);
 586                debugfs_create_file("sniff_min_interval", 0644, hdev->debugfs,
 587                                    hdev, &sniff_min_interval_fops);
 588                debugfs_create_file("sniff_max_interval", 0644, hdev->debugfs,
 589                                    hdev, &sniff_max_interval_fops);
 590        }
 591}
 592
 593static int identity_show(struct seq_file *f, void *p)
 594{
 595        struct hci_dev *hdev = f->private;
 596        bdaddr_t addr;
 597        u8 addr_type;
 598
 599        hci_dev_lock(hdev);
 600
 601        hci_copy_identity_address(hdev, &addr, &addr_type);
 602
 603        seq_printf(f, "%pMR (type %u) %*phN %pMR\n", &addr, addr_type,
 604                   16, hdev->irk, &hdev->rpa);
 605
 606        hci_dev_unlock(hdev);
 607
 608        return 0;
 609}
 610
 611DEFINE_SHOW_ATTRIBUTE(identity);
 612
 613static int rpa_timeout_set(void *data, u64 val)
 614{
 615        struct hci_dev *hdev = data;
 616
 617        /* Require the RPA timeout to be at least 30 seconds and at most
 618         * 24 hours.
 619         */
 620        if (val < 30 || val > (60 * 60 * 24))
 621                return -EINVAL;
 622
 623        hci_dev_lock(hdev);
 624        hdev->rpa_timeout = val;
 625        hci_dev_unlock(hdev);
 626
 627        return 0;
 628}
 629
 630static int rpa_timeout_get(void *data, u64 *val)
 631{
 632        struct hci_dev *hdev = data;
 633
 634        hci_dev_lock(hdev);
 635        *val = hdev->rpa_timeout;
 636        hci_dev_unlock(hdev);
 637
 638        return 0;
 639}
 640
 641DEFINE_SIMPLE_ATTRIBUTE(rpa_timeout_fops, rpa_timeout_get,
 642                        rpa_timeout_set, "%llu\n");
 643
 644static int random_address_show(struct seq_file *f, void *p)
 645{
 646        struct hci_dev *hdev = f->private;
 647
 648        hci_dev_lock(hdev);
 649        seq_printf(f, "%pMR\n", &hdev->random_addr);
 650        hci_dev_unlock(hdev);
 651
 652        return 0;
 653}
 654
 655DEFINE_SHOW_ATTRIBUTE(random_address);
 656
 657static int static_address_show(struct seq_file *f, void *p)
 658{
 659        struct hci_dev *hdev = f->private;
 660
 661        hci_dev_lock(hdev);
 662        seq_printf(f, "%pMR\n", &hdev->static_addr);
 663        hci_dev_unlock(hdev);
 664
 665        return 0;
 666}
 667
 668DEFINE_SHOW_ATTRIBUTE(static_address);
 669
 670static ssize_t force_static_address_read(struct file *file,
 671                                         char __user *user_buf,
 672                                         size_t count, loff_t *ppos)
 673{
 674        struct hci_dev *hdev = file->private_data;
 675        char buf[3];
 676
 677        buf[0] = hci_dev_test_flag(hdev, HCI_FORCE_STATIC_ADDR) ? 'Y': 'N';
 678        buf[1] = '\n';
 679        buf[2] = '\0';
 680        return simple_read_from_buffer(user_buf, count, ppos, buf, 2);
 681}
 682
 683static ssize_t force_static_address_write(struct file *file,
 684                                          const char __user *user_buf,
 685                                          size_t count, loff_t *ppos)
 686{
 687        struct hci_dev *hdev = file->private_data;
 688        bool enable;
 689        int err;
 690
 691        if (test_bit(HCI_UP, &hdev->flags))
 692                return -EBUSY;
 693
 694        err = kstrtobool_from_user(user_buf, count, &enable);
 695        if (err)
 696                return err;
 697
 698        if (enable == hci_dev_test_flag(hdev, HCI_FORCE_STATIC_ADDR))
 699                return -EALREADY;
 700
 701        hci_dev_change_flag(hdev, HCI_FORCE_STATIC_ADDR);
 702
 703        return count;
 704}
 705
 706static const struct file_operations force_static_address_fops = {
 707        .open           = simple_open,
 708        .read           = force_static_address_read,
 709        .write          = force_static_address_write,
 710        .llseek         = default_llseek,
 711};
 712
 713static int white_list_show(struct seq_file *f, void *ptr)
 714{
 715        struct hci_dev *hdev = f->private;
 716        struct bdaddr_list *b;
 717
 718        hci_dev_lock(hdev);
 719        list_for_each_entry(b, &hdev->le_white_list, list)
 720                seq_printf(f, "%pMR (type %u)\n", &b->bdaddr, b->bdaddr_type);
 721        hci_dev_unlock(hdev);
 722
 723        return 0;
 724}
 725
 726DEFINE_SHOW_ATTRIBUTE(white_list);
 727
 728static int resolv_list_show(struct seq_file *f, void *ptr)
 729{
 730        struct hci_dev *hdev = f->private;
 731        struct bdaddr_list *b;
 732
 733        hci_dev_lock(hdev);
 734        list_for_each_entry(b, &hdev->le_resolv_list, list)
 735                seq_printf(f, "%pMR (type %u)\n", &b->bdaddr, b->bdaddr_type);
 736        hci_dev_unlock(hdev);
 737
 738        return 0;
 739}
 740
 741DEFINE_SHOW_ATTRIBUTE(resolv_list);
 742
 743static int identity_resolving_keys_show(struct seq_file *f, void *ptr)
 744{
 745        struct hci_dev *hdev = f->private;
 746        struct smp_irk *irk;
 747
 748        rcu_read_lock();
 749        list_for_each_entry_rcu(irk, &hdev->identity_resolving_keys, list) {
 750                seq_printf(f, "%pMR (type %u) %*phN %pMR\n",
 751                           &irk->bdaddr, irk->addr_type,
 752                           16, irk->val, &irk->rpa);
 753        }
 754        rcu_read_unlock();
 755
 756        return 0;
 757}
 758
 759DEFINE_SHOW_ATTRIBUTE(identity_resolving_keys);
 760
 761static int long_term_keys_show(struct seq_file *f, void *ptr)
 762{
 763        struct hci_dev *hdev = f->private;
 764        struct smp_ltk *ltk;
 765
 766        rcu_read_lock();
 767        list_for_each_entry_rcu(ltk, &hdev->long_term_keys, list)
 768                seq_printf(f, "%pMR (type %u) %u 0x%02x %u %.4x %.16llx %*phN\n",
 769                           &ltk->bdaddr, ltk->bdaddr_type, ltk->authenticated,
 770                           ltk->type, ltk->enc_size, __le16_to_cpu(ltk->ediv),
 771                           __le64_to_cpu(ltk->rand), 16, ltk->val);
 772        rcu_read_unlock();
 773
 774        return 0;
 775}
 776
 777DEFINE_SHOW_ATTRIBUTE(long_term_keys);
 778
 779static int conn_min_interval_set(void *data, u64 val)
 780{
 781        struct hci_dev *hdev = data;
 782
 783        if (val < 0x0006 || val > 0x0c80 || val > hdev->le_conn_max_interval)
 784                return -EINVAL;
 785
 786        hci_dev_lock(hdev);
 787        hdev->le_conn_min_interval = val;
 788        hci_dev_unlock(hdev);
 789
 790        return 0;
 791}
 792
 793static int conn_min_interval_get(void *data, u64 *val)
 794{
 795        struct hci_dev *hdev = data;
 796
 797        hci_dev_lock(hdev);
 798        *val = hdev->le_conn_min_interval;
 799        hci_dev_unlock(hdev);
 800
 801        return 0;
 802}
 803
 804DEFINE_SIMPLE_ATTRIBUTE(conn_min_interval_fops, conn_min_interval_get,
 805                        conn_min_interval_set, "%llu\n");
 806
 807static int conn_max_interval_set(void *data, u64 val)
 808{
 809        struct hci_dev *hdev = data;
 810
 811        if (val < 0x0006 || val > 0x0c80 || val < hdev->le_conn_min_interval)
 812                return -EINVAL;
 813
 814        hci_dev_lock(hdev);
 815        hdev->le_conn_max_interval = val;
 816        hci_dev_unlock(hdev);
 817
 818        return 0;
 819}
 820
 821static int conn_max_interval_get(void *data, u64 *val)
 822{
 823        struct hci_dev *hdev = data;
 824
 825        hci_dev_lock(hdev);
 826        *val = hdev->le_conn_max_interval;
 827        hci_dev_unlock(hdev);
 828
 829        return 0;
 830}
 831
 832DEFINE_SIMPLE_ATTRIBUTE(conn_max_interval_fops, conn_max_interval_get,
 833                        conn_max_interval_set, "%llu\n");
 834
 835static int conn_latency_set(void *data, u64 val)
 836{
 837        struct hci_dev *hdev = data;
 838
 839        if (val > 0x01f3)
 840                return -EINVAL;
 841
 842        hci_dev_lock(hdev);
 843        hdev->le_conn_latency = val;
 844        hci_dev_unlock(hdev);
 845
 846        return 0;
 847}
 848
 849static int conn_latency_get(void *data, u64 *val)
 850{
 851        struct hci_dev *hdev = data;
 852
 853        hci_dev_lock(hdev);
 854        *val = hdev->le_conn_latency;
 855        hci_dev_unlock(hdev);
 856
 857        return 0;
 858}
 859
 860DEFINE_SIMPLE_ATTRIBUTE(conn_latency_fops, conn_latency_get,
 861                        conn_latency_set, "%llu\n");
 862
 863static int supervision_timeout_set(void *data, u64 val)
 864{
 865        struct hci_dev *hdev = data;
 866
 867        if (val < 0x000a || val > 0x0c80)
 868                return -EINVAL;
 869
 870        hci_dev_lock(hdev);
 871        hdev->le_supv_timeout = val;
 872        hci_dev_unlock(hdev);
 873
 874        return 0;
 875}
 876
 877static int supervision_timeout_get(void *data, u64 *val)
 878{
 879        struct hci_dev *hdev = data;
 880
 881        hci_dev_lock(hdev);
 882        *val = hdev->le_supv_timeout;
 883        hci_dev_unlock(hdev);
 884
 885        return 0;
 886}
 887
 888DEFINE_SIMPLE_ATTRIBUTE(supervision_timeout_fops, supervision_timeout_get,
 889                        supervision_timeout_set, "%llu\n");
 890
 891static int adv_channel_map_set(void *data, u64 val)
 892{
 893        struct hci_dev *hdev = data;
 894
 895        if (val < 0x01 || val > 0x07)
 896                return -EINVAL;
 897
 898        hci_dev_lock(hdev);
 899        hdev->le_adv_channel_map = val;
 900        hci_dev_unlock(hdev);
 901
 902        return 0;
 903}
 904
 905static int adv_channel_map_get(void *data, u64 *val)
 906{
 907        struct hci_dev *hdev = data;
 908
 909        hci_dev_lock(hdev);
 910        *val = hdev->le_adv_channel_map;
 911        hci_dev_unlock(hdev);
 912
 913        return 0;
 914}
 915
 916DEFINE_SIMPLE_ATTRIBUTE(adv_channel_map_fops, adv_channel_map_get,
 917                        adv_channel_map_set, "%llu\n");
 918
 919static int adv_min_interval_set(void *data, u64 val)
 920{
 921        struct hci_dev *hdev = data;
 922
 923        if (val < 0x0020 || val > 0x4000 || val > hdev->le_adv_max_interval)
 924                return -EINVAL;
 925
 926        hci_dev_lock(hdev);
 927        hdev->le_adv_min_interval = val;
 928        hci_dev_unlock(hdev);
 929
 930        return 0;
 931}
 932
 933static int adv_min_interval_get(void *data, u64 *val)
 934{
 935        struct hci_dev *hdev = data;
 936
 937        hci_dev_lock(hdev);
 938        *val = hdev->le_adv_min_interval;
 939        hci_dev_unlock(hdev);
 940
 941        return 0;
 942}
 943
 944DEFINE_SIMPLE_ATTRIBUTE(adv_min_interval_fops, adv_min_interval_get,
 945                        adv_min_interval_set, "%llu\n");
 946
 947static int adv_max_interval_set(void *data, u64 val)
 948{
 949        struct hci_dev *hdev = data;
 950
 951        if (val < 0x0020 || val > 0x4000 || val < hdev->le_adv_min_interval)
 952                return -EINVAL;
 953
 954        hci_dev_lock(hdev);
 955        hdev->le_adv_max_interval = val;
 956        hci_dev_unlock(hdev);
 957
 958        return 0;
 959}
 960
 961static int adv_max_interval_get(void *data, u64 *val)
 962{
 963        struct hci_dev *hdev = data;
 964
 965        hci_dev_lock(hdev);
 966        *val = hdev->le_adv_max_interval;
 967        hci_dev_unlock(hdev);
 968
 969        return 0;
 970}
 971
 972DEFINE_SIMPLE_ATTRIBUTE(adv_max_interval_fops, adv_max_interval_get,
 973                        adv_max_interval_set, "%llu\n");
 974
 975static int auth_payload_timeout_set(void *data, u64 val)
 976{
 977        struct hci_dev *hdev = data;
 978
 979        if (val < 0x0001 || val > 0xffff)
 980                return -EINVAL;
 981
 982        hci_dev_lock(hdev);
 983        hdev->auth_payload_timeout = val;
 984        hci_dev_unlock(hdev);
 985
 986        return 0;
 987}
 988
 989static int auth_payload_timeout_get(void *data, u64 *val)
 990{
 991        struct hci_dev *hdev = data;
 992
 993        hci_dev_lock(hdev);
 994        *val = hdev->auth_payload_timeout;
 995        hci_dev_unlock(hdev);
 996
 997        return 0;
 998}
 999
1000DEFINE_SIMPLE_ATTRIBUTE(auth_payload_timeout_fops,
1001                        auth_payload_timeout_get,
1002                        auth_payload_timeout_set, "%llu\n");
1003
1004DEFINE_QUIRK_ATTRIBUTE(quirk_strict_duplicate_filter,
1005                       HCI_QUIRK_STRICT_DUPLICATE_FILTER);
1006DEFINE_QUIRK_ATTRIBUTE(quirk_simultaneous_discovery,
1007                       HCI_QUIRK_SIMULTANEOUS_DISCOVERY);
1008
1009void hci_debugfs_create_le(struct hci_dev *hdev)
1010{
1011        debugfs_create_file("identity", 0400, hdev->debugfs, hdev,
1012                            &identity_fops);
1013        debugfs_create_file("rpa_timeout", 0644, hdev->debugfs, hdev,
1014                            &rpa_timeout_fops);
1015        debugfs_create_file("random_address", 0444, hdev->debugfs, hdev,
1016                            &random_address_fops);
1017        debugfs_create_file("static_address", 0444, hdev->debugfs, hdev,
1018                            &static_address_fops);
1019
1020        /* For controllers with a public address, provide a debug
1021         * option to force the usage of the configured static
1022         * address. By default the public address is used.
1023         */
1024        if (bacmp(&hdev->bdaddr, BDADDR_ANY))
1025                debugfs_create_file("force_static_address", 0644,
1026                                    hdev->debugfs, hdev,
1027                                    &force_static_address_fops);
1028
1029        debugfs_create_u8("white_list_size", 0444, hdev->debugfs,
1030                          &hdev->le_white_list_size);
1031        debugfs_create_file("white_list", 0444, hdev->debugfs, hdev,
1032                            &white_list_fops);
1033        debugfs_create_u8("resolv_list_size", 0444, hdev->debugfs,
1034                          &hdev->le_resolv_list_size);
1035        debugfs_create_file("resolv_list", 0444, hdev->debugfs, hdev,
1036                            &resolv_list_fops);
1037        debugfs_create_file("identity_resolving_keys", 0400, hdev->debugfs,
1038                            hdev, &identity_resolving_keys_fops);
1039        debugfs_create_file("long_term_keys", 0400, hdev->debugfs, hdev,
1040                            &long_term_keys_fops);
1041        debugfs_create_file("conn_min_interval", 0644, hdev->debugfs, hdev,
1042                            &conn_min_interval_fops);
1043        debugfs_create_file("conn_max_interval", 0644, hdev->debugfs, hdev,
1044                            &conn_max_interval_fops);
1045        debugfs_create_file("conn_latency", 0644, hdev->debugfs, hdev,
1046                            &conn_latency_fops);
1047        debugfs_create_file("supervision_timeout", 0644, hdev->debugfs, hdev,
1048                            &supervision_timeout_fops);
1049        debugfs_create_file("adv_channel_map", 0644, hdev->debugfs, hdev,
1050                            &adv_channel_map_fops);
1051        debugfs_create_file("adv_min_interval", 0644, hdev->debugfs, hdev,
1052                            &adv_min_interval_fops);
1053        debugfs_create_file("adv_max_interval", 0644, hdev->debugfs, hdev,
1054                            &adv_max_interval_fops);
1055        debugfs_create_u16("discov_interleaved_timeout", 0644, hdev->debugfs,
1056                           &hdev->discov_interleaved_timeout);
1057        debugfs_create_file("auth_payload_timeout", 0644, hdev->debugfs, hdev,
1058                            &auth_payload_timeout_fops);
1059
1060        debugfs_create_file("quirk_strict_duplicate_filter", 0644,
1061                            hdev->debugfs, hdev,
1062                            &quirk_strict_duplicate_filter_fops);
1063        debugfs_create_file("quirk_simultaneous_discovery", 0644,
1064                            hdev->debugfs, hdev,
1065                            &quirk_simultaneous_discovery_fops);
1066}
1067
1068void hci_debugfs_create_conn(struct hci_conn *conn)
1069{
1070        struct hci_dev *hdev = conn->hdev;
1071        char name[6];
1072
1073        if (IS_ERR_OR_NULL(hdev->debugfs))
1074                return;
1075
1076        snprintf(name, sizeof(name), "%u", conn->handle);
1077        conn->debugfs = debugfs_create_dir(name, hdev->debugfs);
1078}
1079