Merge tag 'loongarch-6.1' of git://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai...
[platform/kernel/linux-starfive.git] / net / bluetooth / hci_debugfs.c
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 "smp.h"
30 #include "hci_request.h"
31 #include "hci_debugfs.h"
32
33 #define DEFINE_QUIRK_ATTRIBUTE(__name, __quirk)                               \
34 static ssize_t __name ## _read(struct file *file,                             \
35                                 char __user *user_buf,                        \
36                                 size_t count, loff_t *ppos)                   \
37 {                                                                             \
38         struct hci_dev *hdev = file->private_data;                            \
39         char buf[3];                                                          \
40                                                                               \
41         buf[0] = test_bit(__quirk, &hdev->quirks) ? 'Y' : 'N';                \
42         buf[1] = '\n';                                                        \
43         buf[2] = '\0';                                                        \
44         return simple_read_from_buffer(user_buf, count, ppos, buf, 2);        \
45 }                                                                             \
46                                                                               \
47 static ssize_t __name ## _write(struct file *file,                            \
48                                  const char __user *user_buf,                 \
49                                  size_t count, loff_t *ppos)                  \
50 {                                                                             \
51         struct hci_dev *hdev = file->private_data;                            \
52         bool enable;                                                          \
53         int err;                                                              \
54                                                                               \
55         if (test_bit(HCI_UP, &hdev->flags))                                   \
56                 return -EBUSY;                                                \
57                                                                               \
58         err = kstrtobool_from_user(user_buf, count, &enable);                 \
59         if (err)                                                              \
60                 return err;                                                   \
61                                                                               \
62         if (enable == test_bit(__quirk, &hdev->quirks))                       \
63                 return -EALREADY;                                             \
64                                                                               \
65         change_bit(__quirk, &hdev->quirks);                                   \
66                                                                               \
67         return count;                                                         \
68 }                                                                             \
69                                                                               \
70 static const struct file_operations __name ## _fops = {                       \
71         .open           = simple_open,                                        \
72         .read           = __name ## _read,                                    \
73         .write          = __name ## _write,                                   \
74         .llseek         = default_llseek,                                     \
75 }                                                                             \
76
77 #define DEFINE_INFO_ATTRIBUTE(__name, __field)                                \
78 static int __name ## _show(struct seq_file *f, void *ptr)                     \
79 {                                                                             \
80         struct hci_dev *hdev = f->private;                                    \
81                                                                               \
82         hci_dev_lock(hdev);                                                   \
83         seq_printf(f, "%s\n", hdev->__field ? : "");                          \
84         hci_dev_unlock(hdev);                                                 \
85                                                                               \
86         return 0;                                                             \
87 }                                                                             \
88                                                                               \
89 DEFINE_SHOW_ATTRIBUTE(__name)
90
91 static int features_show(struct seq_file *f, void *ptr)
92 {
93         struct hci_dev *hdev = f->private;
94         u8 p;
95
96         hci_dev_lock(hdev);
97         for (p = 0; p < HCI_MAX_PAGES && p <= hdev->max_page; p++)
98                 seq_printf(f, "%2u: %8ph\n", p, hdev->features[p]);
99         if (lmp_le_capable(hdev))
100                 seq_printf(f, "LE: %8ph\n", hdev->le_features);
101         hci_dev_unlock(hdev);
102
103         return 0;
104 }
105
106 DEFINE_SHOW_ATTRIBUTE(features);
107
108 static int device_id_show(struct seq_file *f, void *ptr)
109 {
110         struct hci_dev *hdev = f->private;
111
112         hci_dev_lock(hdev);
113         seq_printf(f, "%4.4x:%4.4x:%4.4x:%4.4x\n", hdev->devid_source,
114                   hdev->devid_vendor, hdev->devid_product, hdev->devid_version);
115         hci_dev_unlock(hdev);
116
117         return 0;
118 }
119
120 DEFINE_SHOW_ATTRIBUTE(device_id);
121
122 static int device_list_show(struct seq_file *f, void *ptr)
123 {
124         struct hci_dev *hdev = f->private;
125         struct hci_conn_params *p;
126         struct bdaddr_list *b;
127
128         hci_dev_lock(hdev);
129         list_for_each_entry(b, &hdev->accept_list, list)
130                 seq_printf(f, "%pMR (type %u)\n", &b->bdaddr, b->bdaddr_type);
131         list_for_each_entry(p, &hdev->le_conn_params, list) {
132                 seq_printf(f, "%pMR (type %u) %u\n", &p->addr, p->addr_type,
133                            p->auto_connect);
134         }
135         hci_dev_unlock(hdev);
136
137         return 0;
138 }
139
140 DEFINE_SHOW_ATTRIBUTE(device_list);
141
142 static int blacklist_show(struct seq_file *f, void *p)
143 {
144         struct hci_dev *hdev = f->private;
145         struct bdaddr_list *b;
146
147         hci_dev_lock(hdev);
148         list_for_each_entry(b, &hdev->reject_list, list)
149                 seq_printf(f, "%pMR (type %u)\n", &b->bdaddr, b->bdaddr_type);
150         hci_dev_unlock(hdev);
151
152         return 0;
153 }
154
155 DEFINE_SHOW_ATTRIBUTE(blacklist);
156
157 static int blocked_keys_show(struct seq_file *f, void *p)
158 {
159         struct hci_dev *hdev = f->private;
160         struct blocked_key *key;
161
162         rcu_read_lock();
163         list_for_each_entry_rcu(key, &hdev->blocked_keys, list)
164                 seq_printf(f, "%u %*phN\n", key->type, 16, key->val);
165         rcu_read_unlock();
166
167         return 0;
168 }
169
170 DEFINE_SHOW_ATTRIBUTE(blocked_keys);
171
172 static int uuids_show(struct seq_file *f, void *p)
173 {
174         struct hci_dev *hdev = f->private;
175         struct bt_uuid *uuid;
176
177         hci_dev_lock(hdev);
178         list_for_each_entry(uuid, &hdev->uuids, list) {
179                 u8 i, val[16];
180
181                 /* The Bluetooth UUID values are stored in big endian,
182                  * but with reversed byte order. So convert them into
183                  * the right order for the %pUb modifier.
184                  */
185                 for (i = 0; i < 16; i++)
186                         val[i] = uuid->uuid[15 - i];
187
188                 seq_printf(f, "%pUb\n", val);
189         }
190         hci_dev_unlock(hdev);
191
192        return 0;
193 }
194
195 DEFINE_SHOW_ATTRIBUTE(uuids);
196
197 static int remote_oob_show(struct seq_file *f, void *ptr)
198 {
199         struct hci_dev *hdev = f->private;
200         struct oob_data *data;
201
202         hci_dev_lock(hdev);
203         list_for_each_entry(data, &hdev->remote_oob_data, list) {
204                 seq_printf(f, "%pMR (type %u) %u %*phN %*phN %*phN %*phN\n",
205                            &data->bdaddr, data->bdaddr_type, data->present,
206                            16, data->hash192, 16, data->rand192,
207                            16, data->hash256, 16, data->rand256);
208         }
209         hci_dev_unlock(hdev);
210
211         return 0;
212 }
213
214 DEFINE_SHOW_ATTRIBUTE(remote_oob);
215
216 static int conn_info_min_age_set(void *data, u64 val)
217 {
218         struct hci_dev *hdev = data;
219
220         if (val == 0 || val > hdev->conn_info_max_age)
221                 return -EINVAL;
222
223         hci_dev_lock(hdev);
224         hdev->conn_info_min_age = val;
225         hci_dev_unlock(hdev);
226
227         return 0;
228 }
229
230 static int conn_info_min_age_get(void *data, u64 *val)
231 {
232         struct hci_dev *hdev = data;
233
234         hci_dev_lock(hdev);
235         *val = hdev->conn_info_min_age;
236         hci_dev_unlock(hdev);
237
238         return 0;
239 }
240
241 DEFINE_DEBUGFS_ATTRIBUTE(conn_info_min_age_fops, conn_info_min_age_get,
242                           conn_info_min_age_set, "%llu\n");
243
244 static int conn_info_max_age_set(void *data, u64 val)
245 {
246         struct hci_dev *hdev = data;
247
248         if (val == 0 || val < hdev->conn_info_min_age)
249                 return -EINVAL;
250
251         hci_dev_lock(hdev);
252         hdev->conn_info_max_age = val;
253         hci_dev_unlock(hdev);
254
255         return 0;
256 }
257
258 static int conn_info_max_age_get(void *data, u64 *val)
259 {
260         struct hci_dev *hdev = data;
261
262         hci_dev_lock(hdev);
263         *val = hdev->conn_info_max_age;
264         hci_dev_unlock(hdev);
265
266         return 0;
267 }
268
269 DEFINE_DEBUGFS_ATTRIBUTE(conn_info_max_age_fops, conn_info_max_age_get,
270                           conn_info_max_age_set, "%llu\n");
271
272 static ssize_t use_debug_keys_read(struct file *file, char __user *user_buf,
273                                    size_t count, loff_t *ppos)
274 {
275         struct hci_dev *hdev = file->private_data;
276         char buf[3];
277
278         buf[0] = hci_dev_test_flag(hdev, HCI_USE_DEBUG_KEYS) ? 'Y' : 'N';
279         buf[1] = '\n';
280         buf[2] = '\0';
281         return simple_read_from_buffer(user_buf, count, ppos, buf, 2);
282 }
283
284 static const struct file_operations use_debug_keys_fops = {
285         .open           = simple_open,
286         .read           = use_debug_keys_read,
287         .llseek         = default_llseek,
288 };
289
290 static ssize_t sc_only_mode_read(struct file *file, char __user *user_buf,
291                                  size_t count, loff_t *ppos)
292 {
293         struct hci_dev *hdev = file->private_data;
294         char buf[3];
295
296         buf[0] = hci_dev_test_flag(hdev, HCI_SC_ONLY) ? 'Y' : 'N';
297         buf[1] = '\n';
298         buf[2] = '\0';
299         return simple_read_from_buffer(user_buf, count, ppos, buf, 2);
300 }
301
302 static const struct file_operations sc_only_mode_fops = {
303         .open           = simple_open,
304         .read           = sc_only_mode_read,
305         .llseek         = default_llseek,
306 };
307
308 DEFINE_INFO_ATTRIBUTE(hardware_info, hw_info);
309 DEFINE_INFO_ATTRIBUTE(firmware_info, fw_info);
310
311 void hci_debugfs_create_common(struct hci_dev *hdev)
312 {
313         debugfs_create_file("features", 0444, hdev->debugfs, hdev,
314                             &features_fops);
315         debugfs_create_u16("manufacturer", 0444, hdev->debugfs,
316                            &hdev->manufacturer);
317         debugfs_create_u8("hci_version", 0444, hdev->debugfs, &hdev->hci_ver);
318         debugfs_create_u16("hci_revision", 0444, hdev->debugfs, &hdev->hci_rev);
319         debugfs_create_u8("hardware_error", 0444, hdev->debugfs,
320                           &hdev->hw_error_code);
321         debugfs_create_file("device_id", 0444, hdev->debugfs, hdev,
322                             &device_id_fops);
323
324         debugfs_create_file("device_list", 0444, hdev->debugfs, hdev,
325                             &device_list_fops);
326         debugfs_create_file("blacklist", 0444, hdev->debugfs, hdev,
327                             &blacklist_fops);
328         debugfs_create_file("blocked_keys", 0444, hdev->debugfs, hdev,
329                             &blocked_keys_fops);
330         debugfs_create_file("uuids", 0444, hdev->debugfs, hdev, &uuids_fops);
331         debugfs_create_file("remote_oob", 0400, hdev->debugfs, hdev,
332                             &remote_oob_fops);
333
334         debugfs_create_file("conn_info_min_age", 0644, hdev->debugfs, hdev,
335                             &conn_info_min_age_fops);
336         debugfs_create_file("conn_info_max_age", 0644, hdev->debugfs, hdev,
337                             &conn_info_max_age_fops);
338
339         if (lmp_ssp_capable(hdev) || lmp_le_capable(hdev))
340                 debugfs_create_file("use_debug_keys", 0444, hdev->debugfs,
341                                     hdev, &use_debug_keys_fops);
342
343         if (lmp_sc_capable(hdev) || lmp_le_capable(hdev))
344                 debugfs_create_file("sc_only_mode", 0444, hdev->debugfs,
345                                     hdev, &sc_only_mode_fops);
346
347         if (hdev->hw_info)
348                 debugfs_create_file("hardware_info", 0444, hdev->debugfs,
349                                     hdev, &hardware_info_fops);
350
351         if (hdev->fw_info)
352                 debugfs_create_file("firmware_info", 0444, hdev->debugfs,
353                                     hdev, &firmware_info_fops);
354 }
355
356 static int inquiry_cache_show(struct seq_file *f, void *p)
357 {
358         struct hci_dev *hdev = f->private;
359         struct discovery_state *cache = &hdev->discovery;
360         struct inquiry_entry *e;
361
362         hci_dev_lock(hdev);
363
364         list_for_each_entry(e, &cache->all, all) {
365                 struct inquiry_data *data = &e->data;
366                 seq_printf(f, "%pMR %d %d %d 0x%.2x%.2x%.2x 0x%.4x %d %d %u\n",
367                            &data->bdaddr,
368                            data->pscan_rep_mode, data->pscan_period_mode,
369                            data->pscan_mode, data->dev_class[2],
370                            data->dev_class[1], data->dev_class[0],
371                            __le16_to_cpu(data->clock_offset),
372                            data->rssi, data->ssp_mode, e->timestamp);
373         }
374
375         hci_dev_unlock(hdev);
376
377         return 0;
378 }
379
380 DEFINE_SHOW_ATTRIBUTE(inquiry_cache);
381
382 static int link_keys_show(struct seq_file *f, void *ptr)
383 {
384         struct hci_dev *hdev = f->private;
385         struct link_key *key;
386
387         rcu_read_lock();
388         list_for_each_entry_rcu(key, &hdev->link_keys, list)
389                 seq_printf(f, "%pMR %u %*phN %u\n", &key->bdaddr, key->type,
390                            HCI_LINK_KEY_SIZE, key->val, key->pin_len);
391         rcu_read_unlock();
392
393         return 0;
394 }
395
396 DEFINE_SHOW_ATTRIBUTE(link_keys);
397
398 static int dev_class_show(struct seq_file *f, void *ptr)
399 {
400         struct hci_dev *hdev = f->private;
401
402         hci_dev_lock(hdev);
403         seq_printf(f, "0x%.2x%.2x%.2x\n", hdev->dev_class[2],
404                    hdev->dev_class[1], hdev->dev_class[0]);
405         hci_dev_unlock(hdev);
406
407         return 0;
408 }
409
410 DEFINE_SHOW_ATTRIBUTE(dev_class);
411
412 static int voice_setting_get(void *data, u64 *val)
413 {
414         struct hci_dev *hdev = data;
415
416         hci_dev_lock(hdev);
417         *val = hdev->voice_setting;
418         hci_dev_unlock(hdev);
419
420         return 0;
421 }
422
423 DEFINE_DEBUGFS_ATTRIBUTE(voice_setting_fops, voice_setting_get,
424                           NULL, "0x%4.4llx\n");
425
426 static ssize_t ssp_debug_mode_read(struct file *file, char __user *user_buf,
427                                    size_t count, loff_t *ppos)
428 {
429         struct hci_dev *hdev = file->private_data;
430         char buf[3];
431
432         buf[0] = hdev->ssp_debug_mode ? 'Y' : 'N';
433         buf[1] = '\n';
434         buf[2] = '\0';
435         return simple_read_from_buffer(user_buf, count, ppos, buf, 2);
436 }
437
438 static const struct file_operations ssp_debug_mode_fops = {
439         .open           = simple_open,
440         .read           = ssp_debug_mode_read,
441         .llseek         = default_llseek,
442 };
443
444 static int auto_accept_delay_set(void *data, u64 val)
445 {
446         struct hci_dev *hdev = data;
447
448         hci_dev_lock(hdev);
449         hdev->auto_accept_delay = val;
450         hci_dev_unlock(hdev);
451
452         return 0;
453 }
454
455 static int min_encrypt_key_size_set(void *data, u64 val)
456 {
457         struct hci_dev *hdev = data;
458
459         if (val < 1 || val > 16)
460                 return -EINVAL;
461
462         hci_dev_lock(hdev);
463         hdev->min_enc_key_size = val;
464         hci_dev_unlock(hdev);
465
466         return 0;
467 }
468
469 static int min_encrypt_key_size_get(void *data, u64 *val)
470 {
471         struct hci_dev *hdev = data;
472
473         hci_dev_lock(hdev);
474         *val = hdev->min_enc_key_size;
475         hci_dev_unlock(hdev);
476
477         return 0;
478 }
479
480 DEFINE_DEBUGFS_ATTRIBUTE(min_encrypt_key_size_fops,
481                           min_encrypt_key_size_get,
482                           min_encrypt_key_size_set, "%llu\n");
483
484 static int auto_accept_delay_get(void *data, u64 *val)
485 {
486         struct hci_dev *hdev = data;
487
488         hci_dev_lock(hdev);
489         *val = hdev->auto_accept_delay;
490         hci_dev_unlock(hdev);
491
492         return 0;
493 }
494
495 DEFINE_DEBUGFS_ATTRIBUTE(auto_accept_delay_fops, auto_accept_delay_get,
496                           auto_accept_delay_set, "%llu\n");
497
498 static ssize_t force_bredr_smp_read(struct file *file,
499                                     char __user *user_buf,
500                                     size_t count, loff_t *ppos)
501 {
502         struct hci_dev *hdev = file->private_data;
503         char buf[3];
504
505         buf[0] = hci_dev_test_flag(hdev, HCI_FORCE_BREDR_SMP) ? 'Y' : 'N';
506         buf[1] = '\n';
507         buf[2] = '\0';
508         return simple_read_from_buffer(user_buf, count, ppos, buf, 2);
509 }
510
511 static ssize_t force_bredr_smp_write(struct file *file,
512                                      const char __user *user_buf,
513                                      size_t count, loff_t *ppos)
514 {
515         struct hci_dev *hdev = file->private_data;
516         bool enable;
517         int err;
518
519         err = kstrtobool_from_user(user_buf, count, &enable);
520         if (err)
521                 return err;
522
523         err = smp_force_bredr(hdev, enable);
524         if (err)
525                 return err;
526
527         return count;
528 }
529
530 static const struct file_operations force_bredr_smp_fops = {
531         .open           = simple_open,
532         .read           = force_bredr_smp_read,
533         .write          = force_bredr_smp_write,
534         .llseek         = default_llseek,
535 };
536
537 static int idle_timeout_set(void *data, u64 val)
538 {
539         struct hci_dev *hdev = data;
540
541         if (val != 0 && (val < 500 || val > 3600000))
542                 return -EINVAL;
543
544         hci_dev_lock(hdev);
545         hdev->idle_timeout = val;
546         hci_dev_unlock(hdev);
547
548         return 0;
549 }
550
551 static int idle_timeout_get(void *data, u64 *val)
552 {
553         struct hci_dev *hdev = data;
554
555         hci_dev_lock(hdev);
556         *val = hdev->idle_timeout;
557         hci_dev_unlock(hdev);
558
559         return 0;
560 }
561
562 DEFINE_DEBUGFS_ATTRIBUTE(idle_timeout_fops, idle_timeout_get,
563                           idle_timeout_set, "%llu\n");
564
565 static int sniff_min_interval_set(void *data, u64 val)
566 {
567         struct hci_dev *hdev = data;
568
569         if (val == 0 || val % 2 || val > hdev->sniff_max_interval)
570                 return -EINVAL;
571
572         hci_dev_lock(hdev);
573         hdev->sniff_min_interval = val;
574         hci_dev_unlock(hdev);
575
576         return 0;
577 }
578
579 static int sniff_min_interval_get(void *data, u64 *val)
580 {
581         struct hci_dev *hdev = data;
582
583         hci_dev_lock(hdev);
584         *val = hdev->sniff_min_interval;
585         hci_dev_unlock(hdev);
586
587         return 0;
588 }
589
590 DEFINE_DEBUGFS_ATTRIBUTE(sniff_min_interval_fops, sniff_min_interval_get,
591                           sniff_min_interval_set, "%llu\n");
592
593 static int sniff_max_interval_set(void *data, u64 val)
594 {
595         struct hci_dev *hdev = data;
596
597         if (val == 0 || val % 2 || val < hdev->sniff_min_interval)
598                 return -EINVAL;
599
600         hci_dev_lock(hdev);
601         hdev->sniff_max_interval = val;
602         hci_dev_unlock(hdev);
603
604         return 0;
605 }
606
607 static int sniff_max_interval_get(void *data, u64 *val)
608 {
609         struct hci_dev *hdev = data;
610
611         hci_dev_lock(hdev);
612         *val = hdev->sniff_max_interval;
613         hci_dev_unlock(hdev);
614
615         return 0;
616 }
617
618 DEFINE_DEBUGFS_ATTRIBUTE(sniff_max_interval_fops, sniff_max_interval_get,
619                           sniff_max_interval_set, "%llu\n");
620
621 void hci_debugfs_create_bredr(struct hci_dev *hdev)
622 {
623         debugfs_create_file("inquiry_cache", 0444, hdev->debugfs, hdev,
624                             &inquiry_cache_fops);
625         debugfs_create_file("link_keys", 0400, hdev->debugfs, hdev,
626                             &link_keys_fops);
627         debugfs_create_file("dev_class", 0444, hdev->debugfs, hdev,
628                             &dev_class_fops);
629         debugfs_create_file("voice_setting", 0444, hdev->debugfs, hdev,
630                             &voice_setting_fops);
631
632         /* If the controller does not support BR/EDR Secure Connections
633          * feature, then the BR/EDR SMP channel shall not be present.
634          *
635          * To test this with Bluetooth 4.0 controllers, create a debugfs
636          * switch that allows forcing BR/EDR SMP support and accepting
637          * cross-transport pairing on non-AES encrypted connections.
638          */
639         if (!lmp_sc_capable(hdev))
640                 debugfs_create_file("force_bredr_smp", 0644, hdev->debugfs,
641                                     hdev, &force_bredr_smp_fops);
642
643         if (lmp_ssp_capable(hdev)) {
644                 debugfs_create_file("ssp_debug_mode", 0444, hdev->debugfs,
645                                     hdev, &ssp_debug_mode_fops);
646                 debugfs_create_file("min_encrypt_key_size", 0644, hdev->debugfs,
647                                     hdev, &min_encrypt_key_size_fops);
648                 debugfs_create_file("auto_accept_delay", 0644, hdev->debugfs,
649                                     hdev, &auto_accept_delay_fops);
650         }
651
652         if (lmp_sniff_capable(hdev)) {
653                 debugfs_create_file("idle_timeout", 0644, hdev->debugfs,
654                                     hdev, &idle_timeout_fops);
655                 debugfs_create_file("sniff_min_interval", 0644, hdev->debugfs,
656                                     hdev, &sniff_min_interval_fops);
657                 debugfs_create_file("sniff_max_interval", 0644, hdev->debugfs,
658                                     hdev, &sniff_max_interval_fops);
659         }
660 }
661
662 static int identity_show(struct seq_file *f, void *p)
663 {
664         struct hci_dev *hdev = f->private;
665         bdaddr_t addr;
666         u8 addr_type;
667
668         hci_dev_lock(hdev);
669
670         hci_copy_identity_address(hdev, &addr, &addr_type);
671
672         seq_printf(f, "%pMR (type %u) %*phN %pMR\n", &addr, addr_type,
673                    16, hdev->irk, &hdev->rpa);
674
675         hci_dev_unlock(hdev);
676
677         return 0;
678 }
679
680 DEFINE_SHOW_ATTRIBUTE(identity);
681
682 static int rpa_timeout_set(void *data, u64 val)
683 {
684         struct hci_dev *hdev = data;
685
686         /* Require the RPA timeout to be at least 30 seconds and at most
687          * 24 hours.
688          */
689         if (val < 30 || val > (60 * 60 * 24))
690                 return -EINVAL;
691
692         hci_dev_lock(hdev);
693         hdev->rpa_timeout = val;
694         hci_dev_unlock(hdev);
695
696         return 0;
697 }
698
699 static int rpa_timeout_get(void *data, u64 *val)
700 {
701         struct hci_dev *hdev = data;
702
703         hci_dev_lock(hdev);
704         *val = hdev->rpa_timeout;
705         hci_dev_unlock(hdev);
706
707         return 0;
708 }
709
710 DEFINE_DEBUGFS_ATTRIBUTE(rpa_timeout_fops, rpa_timeout_get,
711                           rpa_timeout_set, "%llu\n");
712
713 static int random_address_show(struct seq_file *f, void *p)
714 {
715         struct hci_dev *hdev = f->private;
716
717         hci_dev_lock(hdev);
718         seq_printf(f, "%pMR\n", &hdev->random_addr);
719         hci_dev_unlock(hdev);
720
721         return 0;
722 }
723
724 DEFINE_SHOW_ATTRIBUTE(random_address);
725
726 static int static_address_show(struct seq_file *f, void *p)
727 {
728         struct hci_dev *hdev = f->private;
729
730         hci_dev_lock(hdev);
731         seq_printf(f, "%pMR\n", &hdev->static_addr);
732         hci_dev_unlock(hdev);
733
734         return 0;
735 }
736
737 DEFINE_SHOW_ATTRIBUTE(static_address);
738
739 static ssize_t force_static_address_read(struct file *file,
740                                          char __user *user_buf,
741                                          size_t count, loff_t *ppos)
742 {
743         struct hci_dev *hdev = file->private_data;
744         char buf[3];
745
746         buf[0] = hci_dev_test_flag(hdev, HCI_FORCE_STATIC_ADDR) ? 'Y' : 'N';
747         buf[1] = '\n';
748         buf[2] = '\0';
749         return simple_read_from_buffer(user_buf, count, ppos, buf, 2);
750 }
751
752 static ssize_t force_static_address_write(struct file *file,
753                                           const char __user *user_buf,
754                                           size_t count, loff_t *ppos)
755 {
756         struct hci_dev *hdev = file->private_data;
757         bool enable;
758         int err;
759
760         if (test_bit(HCI_UP, &hdev->flags))
761                 return -EBUSY;
762
763         err = kstrtobool_from_user(user_buf, count, &enable);
764         if (err)
765                 return err;
766
767         if (enable == hci_dev_test_flag(hdev, HCI_FORCE_STATIC_ADDR))
768                 return -EALREADY;
769
770         hci_dev_change_flag(hdev, HCI_FORCE_STATIC_ADDR);
771
772         return count;
773 }
774
775 static const struct file_operations force_static_address_fops = {
776         .open           = simple_open,
777         .read           = force_static_address_read,
778         .write          = force_static_address_write,
779         .llseek         = default_llseek,
780 };
781
782 static int white_list_show(struct seq_file *f, void *ptr)
783 {
784         struct hci_dev *hdev = f->private;
785         struct bdaddr_list *b;
786
787         hci_dev_lock(hdev);
788         list_for_each_entry(b, &hdev->le_accept_list, list)
789                 seq_printf(f, "%pMR (type %u)\n", &b->bdaddr, b->bdaddr_type);
790         hci_dev_unlock(hdev);
791
792         return 0;
793 }
794
795 DEFINE_SHOW_ATTRIBUTE(white_list);
796
797 static int resolv_list_show(struct seq_file *f, void *ptr)
798 {
799         struct hci_dev *hdev = f->private;
800         struct bdaddr_list *b;
801
802         hci_dev_lock(hdev);
803         list_for_each_entry(b, &hdev->le_resolv_list, list)
804                 seq_printf(f, "%pMR (type %u)\n", &b->bdaddr, b->bdaddr_type);
805         hci_dev_unlock(hdev);
806
807         return 0;
808 }
809
810 DEFINE_SHOW_ATTRIBUTE(resolv_list);
811
812 static int identity_resolving_keys_show(struct seq_file *f, void *ptr)
813 {
814         struct hci_dev *hdev = f->private;
815         struct smp_irk *irk;
816
817         rcu_read_lock();
818         list_for_each_entry_rcu(irk, &hdev->identity_resolving_keys, list) {
819                 seq_printf(f, "%pMR (type %u) %*phN %pMR\n",
820                            &irk->bdaddr, irk->addr_type,
821                            16, irk->val, &irk->rpa);
822         }
823         rcu_read_unlock();
824
825         return 0;
826 }
827
828 DEFINE_SHOW_ATTRIBUTE(identity_resolving_keys);
829
830 static int long_term_keys_show(struct seq_file *f, void *ptr)
831 {
832         struct hci_dev *hdev = f->private;
833         struct smp_ltk *ltk;
834
835         rcu_read_lock();
836         list_for_each_entry_rcu(ltk, &hdev->long_term_keys, list)
837                 seq_printf(f, "%pMR (type %u) %u 0x%02x %u %.4x %.16llx %*phN\n",
838                            &ltk->bdaddr, ltk->bdaddr_type, ltk->authenticated,
839                            ltk->type, ltk->enc_size, __le16_to_cpu(ltk->ediv),
840                            __le64_to_cpu(ltk->rand), 16, ltk->val);
841         rcu_read_unlock();
842
843         return 0;
844 }
845
846 DEFINE_SHOW_ATTRIBUTE(long_term_keys);
847
848 static int conn_min_interval_set(void *data, u64 val)
849 {
850         struct hci_dev *hdev = data;
851
852         if (val < 0x0006 || val > 0x0c80 || val > hdev->le_conn_max_interval)
853                 return -EINVAL;
854
855         hci_dev_lock(hdev);
856         hdev->le_conn_min_interval = val;
857         hci_dev_unlock(hdev);
858
859         return 0;
860 }
861
862 static int conn_min_interval_get(void *data, u64 *val)
863 {
864         struct hci_dev *hdev = data;
865
866         hci_dev_lock(hdev);
867         *val = hdev->le_conn_min_interval;
868         hci_dev_unlock(hdev);
869
870         return 0;
871 }
872
873 DEFINE_DEBUGFS_ATTRIBUTE(conn_min_interval_fops, conn_min_interval_get,
874                           conn_min_interval_set, "%llu\n");
875
876 static int conn_max_interval_set(void *data, u64 val)
877 {
878         struct hci_dev *hdev = data;
879
880         if (val < 0x0006 || val > 0x0c80 || val < hdev->le_conn_min_interval)
881                 return -EINVAL;
882
883         hci_dev_lock(hdev);
884         hdev->le_conn_max_interval = val;
885         hci_dev_unlock(hdev);
886
887         return 0;
888 }
889
890 static int conn_max_interval_get(void *data, u64 *val)
891 {
892         struct hci_dev *hdev = data;
893
894         hci_dev_lock(hdev);
895         *val = hdev->le_conn_max_interval;
896         hci_dev_unlock(hdev);
897
898         return 0;
899 }
900
901 DEFINE_DEBUGFS_ATTRIBUTE(conn_max_interval_fops, conn_max_interval_get,
902                           conn_max_interval_set, "%llu\n");
903
904 static int conn_latency_set(void *data, u64 val)
905 {
906         struct hci_dev *hdev = data;
907
908         if (val > 0x01f3)
909                 return -EINVAL;
910
911         hci_dev_lock(hdev);
912         hdev->le_conn_latency = val;
913         hci_dev_unlock(hdev);
914
915         return 0;
916 }
917
918 static int conn_latency_get(void *data, u64 *val)
919 {
920         struct hci_dev *hdev = data;
921
922         hci_dev_lock(hdev);
923         *val = hdev->le_conn_latency;
924         hci_dev_unlock(hdev);
925
926         return 0;
927 }
928
929 DEFINE_DEBUGFS_ATTRIBUTE(conn_latency_fops, conn_latency_get,
930                           conn_latency_set, "%llu\n");
931
932 static int supervision_timeout_set(void *data, u64 val)
933 {
934         struct hci_dev *hdev = data;
935
936         if (val < 0x000a || val > 0x0c80)
937                 return -EINVAL;
938
939         hci_dev_lock(hdev);
940         hdev->le_supv_timeout = val;
941         hci_dev_unlock(hdev);
942
943         return 0;
944 }
945
946 static int supervision_timeout_get(void *data, u64 *val)
947 {
948         struct hci_dev *hdev = data;
949
950         hci_dev_lock(hdev);
951         *val = hdev->le_supv_timeout;
952         hci_dev_unlock(hdev);
953
954         return 0;
955 }
956
957 DEFINE_DEBUGFS_ATTRIBUTE(supervision_timeout_fops, supervision_timeout_get,
958                           supervision_timeout_set, "%llu\n");
959
960 static int adv_channel_map_set(void *data, u64 val)
961 {
962         struct hci_dev *hdev = data;
963
964         if (val < 0x01 || val > 0x07)
965                 return -EINVAL;
966
967         hci_dev_lock(hdev);
968         hdev->le_adv_channel_map = val;
969         hci_dev_unlock(hdev);
970
971         return 0;
972 }
973
974 static int adv_channel_map_get(void *data, u64 *val)
975 {
976         struct hci_dev *hdev = data;
977
978         hci_dev_lock(hdev);
979         *val = hdev->le_adv_channel_map;
980         hci_dev_unlock(hdev);
981
982         return 0;
983 }
984
985 DEFINE_DEBUGFS_ATTRIBUTE(adv_channel_map_fops, adv_channel_map_get,
986                           adv_channel_map_set, "%llu\n");
987
988 static int adv_min_interval_set(void *data, u64 val)
989 {
990         struct hci_dev *hdev = data;
991
992         if (val < 0x0020 || val > 0x4000 || val > hdev->le_adv_max_interval)
993                 return -EINVAL;
994
995         hci_dev_lock(hdev);
996         hdev->le_adv_min_interval = val;
997         hci_dev_unlock(hdev);
998
999         return 0;
1000 }
1001
1002 static int adv_min_interval_get(void *data, u64 *val)
1003 {
1004         struct hci_dev *hdev = data;
1005
1006         hci_dev_lock(hdev);
1007         *val = hdev->le_adv_min_interval;
1008         hci_dev_unlock(hdev);
1009
1010         return 0;
1011 }
1012
1013 DEFINE_DEBUGFS_ATTRIBUTE(adv_min_interval_fops, adv_min_interval_get,
1014                           adv_min_interval_set, "%llu\n");
1015
1016 static int adv_max_interval_set(void *data, u64 val)
1017 {
1018         struct hci_dev *hdev = data;
1019
1020         if (val < 0x0020 || val > 0x4000 || val < hdev->le_adv_min_interval)
1021                 return -EINVAL;
1022
1023         hci_dev_lock(hdev);
1024         hdev->le_adv_max_interval = val;
1025         hci_dev_unlock(hdev);
1026
1027         return 0;
1028 }
1029
1030 static int adv_max_interval_get(void *data, u64 *val)
1031 {
1032         struct hci_dev *hdev = data;
1033
1034         hci_dev_lock(hdev);
1035         *val = hdev->le_adv_max_interval;
1036         hci_dev_unlock(hdev);
1037
1038         return 0;
1039 }
1040
1041 DEFINE_DEBUGFS_ATTRIBUTE(adv_max_interval_fops, adv_max_interval_get,
1042                           adv_max_interval_set, "%llu\n");
1043
1044 static int min_key_size_set(void *data, u64 val)
1045 {
1046         struct hci_dev *hdev = data;
1047
1048         if (val > hdev->le_max_key_size || val < SMP_MIN_ENC_KEY_SIZE)
1049                 return -EINVAL;
1050
1051         hci_dev_lock(hdev);
1052         hdev->le_min_key_size = val;
1053         hci_dev_unlock(hdev);
1054
1055         return 0;
1056 }
1057
1058 static int min_key_size_get(void *data, u64 *val)
1059 {
1060         struct hci_dev *hdev = data;
1061
1062         hci_dev_lock(hdev);
1063         *val = hdev->le_min_key_size;
1064         hci_dev_unlock(hdev);
1065
1066         return 0;
1067 }
1068
1069 DEFINE_DEBUGFS_ATTRIBUTE(min_key_size_fops, min_key_size_get,
1070                           min_key_size_set, "%llu\n");
1071
1072 static int max_key_size_set(void *data, u64 val)
1073 {
1074         struct hci_dev *hdev = data;
1075
1076         if (val > SMP_MAX_ENC_KEY_SIZE || val < hdev->le_min_key_size)
1077                 return -EINVAL;
1078
1079         hci_dev_lock(hdev);
1080         hdev->le_max_key_size = val;
1081         hci_dev_unlock(hdev);
1082
1083         return 0;
1084 }
1085
1086 static int max_key_size_get(void *data, u64 *val)
1087 {
1088         struct hci_dev *hdev = data;
1089
1090         hci_dev_lock(hdev);
1091         *val = hdev->le_max_key_size;
1092         hci_dev_unlock(hdev);
1093
1094         return 0;
1095 }
1096
1097 DEFINE_DEBUGFS_ATTRIBUTE(max_key_size_fops, max_key_size_get,
1098                           max_key_size_set, "%llu\n");
1099
1100 static int auth_payload_timeout_set(void *data, u64 val)
1101 {
1102         struct hci_dev *hdev = data;
1103
1104         if (val < 0x0001 || val > 0xffff)
1105                 return -EINVAL;
1106
1107         hci_dev_lock(hdev);
1108         hdev->auth_payload_timeout = val;
1109         hci_dev_unlock(hdev);
1110
1111         return 0;
1112 }
1113
1114 static int auth_payload_timeout_get(void *data, u64 *val)
1115 {
1116         struct hci_dev *hdev = data;
1117
1118         hci_dev_lock(hdev);
1119         *val = hdev->auth_payload_timeout;
1120         hci_dev_unlock(hdev);
1121
1122         return 0;
1123 }
1124
1125 DEFINE_DEBUGFS_ATTRIBUTE(auth_payload_timeout_fops,
1126                           auth_payload_timeout_get,
1127                           auth_payload_timeout_set, "%llu\n");
1128
1129 static ssize_t force_no_mitm_read(struct file *file,
1130                                   char __user *user_buf,
1131                                   size_t count, loff_t *ppos)
1132 {
1133         struct hci_dev *hdev = file->private_data;
1134         char buf[3];
1135
1136         buf[0] = hci_dev_test_flag(hdev, HCI_FORCE_NO_MITM) ? 'Y' : 'N';
1137         buf[1] = '\n';
1138         buf[2] = '\0';
1139         return simple_read_from_buffer(user_buf, count, ppos, buf, 2);
1140 }
1141
1142 static ssize_t force_no_mitm_write(struct file *file,
1143                                    const char __user *user_buf,
1144                                    size_t count, loff_t *ppos)
1145 {
1146         struct hci_dev *hdev = file->private_data;
1147         char buf[32];
1148         size_t buf_size = min(count, (sizeof(buf) - 1));
1149         bool enable;
1150
1151         if (copy_from_user(buf, user_buf, buf_size))
1152                 return -EFAULT;
1153
1154         buf[buf_size] = '\0';
1155         if (strtobool(buf, &enable))
1156                 return -EINVAL;
1157
1158         if (enable == hci_dev_test_flag(hdev, HCI_FORCE_NO_MITM))
1159                 return -EALREADY;
1160
1161         hci_dev_change_flag(hdev, HCI_FORCE_NO_MITM);
1162
1163         return count;
1164 }
1165
1166 static const struct file_operations force_no_mitm_fops = {
1167         .open           = simple_open,
1168         .read           = force_no_mitm_read,
1169         .write          = force_no_mitm_write,
1170         .llseek         = default_llseek,
1171 };
1172
1173 DEFINE_QUIRK_ATTRIBUTE(quirk_strict_duplicate_filter,
1174                        HCI_QUIRK_STRICT_DUPLICATE_FILTER);
1175 DEFINE_QUIRK_ATTRIBUTE(quirk_simultaneous_discovery,
1176                        HCI_QUIRK_SIMULTANEOUS_DISCOVERY);
1177
1178 void hci_debugfs_create_le(struct hci_dev *hdev)
1179 {
1180         debugfs_create_file("identity", 0400, hdev->debugfs, hdev,
1181                             &identity_fops);
1182         debugfs_create_file("rpa_timeout", 0644, hdev->debugfs, hdev,
1183                             &rpa_timeout_fops);
1184         debugfs_create_file("random_address", 0444, hdev->debugfs, hdev,
1185                             &random_address_fops);
1186         debugfs_create_file("static_address", 0444, hdev->debugfs, hdev,
1187                             &static_address_fops);
1188
1189         /* For controllers with a public address, provide a debug
1190          * option to force the usage of the configured static
1191          * address. By default the public address is used.
1192          */
1193         if (bacmp(&hdev->bdaddr, BDADDR_ANY))
1194                 debugfs_create_file("force_static_address", 0644,
1195                                     hdev->debugfs, hdev,
1196                                     &force_static_address_fops);
1197
1198         debugfs_create_u8("white_list_size", 0444, hdev->debugfs,
1199                           &hdev->le_accept_list_size);
1200         debugfs_create_file("white_list", 0444, hdev->debugfs, hdev,
1201                             &white_list_fops);
1202         debugfs_create_u8("resolv_list_size", 0444, hdev->debugfs,
1203                           &hdev->le_resolv_list_size);
1204         debugfs_create_file("resolv_list", 0444, hdev->debugfs, hdev,
1205                             &resolv_list_fops);
1206         debugfs_create_file("identity_resolving_keys", 0400, hdev->debugfs,
1207                             hdev, &identity_resolving_keys_fops);
1208         debugfs_create_file("long_term_keys", 0400, hdev->debugfs, hdev,
1209                             &long_term_keys_fops);
1210         debugfs_create_file("conn_min_interval", 0644, hdev->debugfs, hdev,
1211                             &conn_min_interval_fops);
1212         debugfs_create_file("conn_max_interval", 0644, hdev->debugfs, hdev,
1213                             &conn_max_interval_fops);
1214         debugfs_create_file("conn_latency", 0644, hdev->debugfs, hdev,
1215                             &conn_latency_fops);
1216         debugfs_create_file("supervision_timeout", 0644, hdev->debugfs, hdev,
1217                             &supervision_timeout_fops);
1218         debugfs_create_file("adv_channel_map", 0644, hdev->debugfs, hdev,
1219                             &adv_channel_map_fops);
1220         debugfs_create_file("adv_min_interval", 0644, hdev->debugfs, hdev,
1221                             &adv_min_interval_fops);
1222         debugfs_create_file("adv_max_interval", 0644, hdev->debugfs, hdev,
1223                             &adv_max_interval_fops);
1224         debugfs_create_u16("discov_interleaved_timeout", 0644, hdev->debugfs,
1225                            &hdev->discov_interleaved_timeout);
1226         debugfs_create_file("min_key_size", 0644, hdev->debugfs, hdev,
1227                             &min_key_size_fops);
1228         debugfs_create_file("max_key_size", 0644, hdev->debugfs, hdev,
1229                             &max_key_size_fops);
1230         debugfs_create_file("auth_payload_timeout", 0644, hdev->debugfs, hdev,
1231                             &auth_payload_timeout_fops);
1232         debugfs_create_file("force_no_mitm", 0644, hdev->debugfs, hdev,
1233                             &force_no_mitm_fops);
1234
1235         debugfs_create_file("quirk_strict_duplicate_filter", 0644,
1236                             hdev->debugfs, hdev,
1237                             &quirk_strict_duplicate_filter_fops);
1238         debugfs_create_file("quirk_simultaneous_discovery", 0644,
1239                             hdev->debugfs, hdev,
1240                             &quirk_simultaneous_discovery_fops);
1241 }
1242
1243 void hci_debugfs_create_conn(struct hci_conn *conn)
1244 {
1245         struct hci_dev *hdev = conn->hdev;
1246         char name[6];
1247
1248         if (IS_ERR_OR_NULL(hdev->debugfs) || conn->debugfs)
1249                 return;
1250
1251         snprintf(name, sizeof(name), "%u", conn->handle);
1252         conn->debugfs = debugfs_create_dir(name, hdev->debugfs);
1253 }
1254
1255 static ssize_t dut_mode_read(struct file *file, char __user *user_buf,
1256                              size_t count, loff_t *ppos)
1257 {
1258         struct hci_dev *hdev = file->private_data;
1259         char buf[3];
1260
1261         buf[0] = hci_dev_test_flag(hdev, HCI_DUT_MODE) ? 'Y' : 'N';
1262         buf[1] = '\n';
1263         buf[2] = '\0';
1264         return simple_read_from_buffer(user_buf, count, ppos, buf, 2);
1265 }
1266
1267 static ssize_t dut_mode_write(struct file *file, const char __user *user_buf,
1268                               size_t count, loff_t *ppos)
1269 {
1270         struct hci_dev *hdev = file->private_data;
1271         struct sk_buff *skb;
1272         bool enable;
1273         int err;
1274
1275         if (!test_bit(HCI_UP, &hdev->flags))
1276                 return -ENETDOWN;
1277
1278         err = kstrtobool_from_user(user_buf, count, &enable);
1279         if (err)
1280                 return err;
1281
1282         if (enable == hci_dev_test_flag(hdev, HCI_DUT_MODE))
1283                 return -EALREADY;
1284
1285         hci_req_sync_lock(hdev);
1286         if (enable)
1287                 skb = __hci_cmd_sync(hdev, HCI_OP_ENABLE_DUT_MODE, 0, NULL,
1288                                      HCI_CMD_TIMEOUT);
1289         else
1290                 skb = __hci_cmd_sync(hdev, HCI_OP_RESET, 0, NULL,
1291                                      HCI_CMD_TIMEOUT);
1292         hci_req_sync_unlock(hdev);
1293
1294         if (IS_ERR(skb))
1295                 return PTR_ERR(skb);
1296
1297         kfree_skb(skb);
1298
1299         hci_dev_change_flag(hdev, HCI_DUT_MODE);
1300
1301         return count;
1302 }
1303
1304 static const struct file_operations dut_mode_fops = {
1305         .open           = simple_open,
1306         .read           = dut_mode_read,
1307         .write          = dut_mode_write,
1308         .llseek         = default_llseek,
1309 };
1310
1311 static ssize_t vendor_diag_read(struct file *file, char __user *user_buf,
1312                                 size_t count, loff_t *ppos)
1313 {
1314         struct hci_dev *hdev = file->private_data;
1315         char buf[3];
1316
1317         buf[0] = hci_dev_test_flag(hdev, HCI_VENDOR_DIAG) ? 'Y' : 'N';
1318         buf[1] = '\n';
1319         buf[2] = '\0';
1320         return simple_read_from_buffer(user_buf, count, ppos, buf, 2);
1321 }
1322
1323 static ssize_t vendor_diag_write(struct file *file, const char __user *user_buf,
1324                                  size_t count, loff_t *ppos)
1325 {
1326         struct hci_dev *hdev = file->private_data;
1327         bool enable;
1328         int err;
1329
1330         err = kstrtobool_from_user(user_buf, count, &enable);
1331         if (err)
1332                 return err;
1333
1334         /* When the diagnostic flags are not persistent and the transport
1335          * is not active or in user channel operation, then there is no need
1336          * for the vendor callback. Instead just store the desired value and
1337          * the setting will be programmed when the controller gets powered on.
1338          */
1339         if (test_bit(HCI_QUIRK_NON_PERSISTENT_DIAG, &hdev->quirks) &&
1340             (!test_bit(HCI_RUNNING, &hdev->flags) ||
1341              hci_dev_test_flag(hdev, HCI_USER_CHANNEL)))
1342                 goto done;
1343
1344         hci_req_sync_lock(hdev);
1345         err = hdev->set_diag(hdev, enable);
1346         hci_req_sync_unlock(hdev);
1347
1348         if (err < 0)
1349                 return err;
1350
1351 done:
1352         if (enable)
1353                 hci_dev_set_flag(hdev, HCI_VENDOR_DIAG);
1354         else
1355                 hci_dev_clear_flag(hdev, HCI_VENDOR_DIAG);
1356
1357         return count;
1358 }
1359
1360 static const struct file_operations vendor_diag_fops = {
1361         .open           = simple_open,
1362         .read           = vendor_diag_read,
1363         .write          = vendor_diag_write,
1364         .llseek         = default_llseek,
1365 };
1366
1367 void hci_debugfs_create_basic(struct hci_dev *hdev)
1368 {
1369         debugfs_create_file("dut_mode", 0644, hdev->debugfs, hdev,
1370                             &dut_mode_fops);
1371
1372         if (hdev->set_diag)
1373                 debugfs_create_file("vendor_diag", 0644, hdev->debugfs, hdev,
1374                                     &vendor_diag_fops);
1375 }