Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / 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 "hci_debugfs.h"
30
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];                                                          \
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                                                                               \
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         char buf[32];                                                         \
51         size_t buf_size = min(count, (sizeof(buf) - 1));                      \
52         bool enable;                                                          \
53                                                                               \
54         if (test_bit(HCI_UP, &hdev->flags))                                   \
55                 return -EBUSY;                                                \
56                                                                               \
57         if (copy_from_user(buf, user_buf, buf_size))                          \
58                 return -EFAULT;                                               \
59                                                                               \
60         buf[buf_size] = '\0';                                                 \
61         if (strtobool(buf, &enable))                                          \
62                 return -EINVAL;                                               \
63                                                                               \
64         if (enable == test_bit(__quirk, &hdev->quirks))                       \
65                 return -EALREADY;                                             \
66                                                                               \
67         change_bit(__quirk, &hdev->quirks);                                   \
68                                                                               \
69         return count;                                                         \
70 }                                                                             \
71                                                                               \
72 static const struct file_operations __name ## _fops = {                       \
73         .open           = simple_open,                                        \
74         .read           = __name ## _read,                                    \
75         .write          = __name ## _write,                                   \
76         .llseek         = default_llseek,                                     \
77 }                                                                             \
78
79 static int features_show(struct seq_file *f, void *ptr)
80 {
81         struct hci_dev *hdev = f->private;
82         u8 p;
83
84         hci_dev_lock(hdev);
85         for (p = 0; p < HCI_MAX_PAGES && p <= hdev->max_page; p++) {
86                 seq_printf(f, "%2u: 0x%2.2x 0x%2.2x 0x%2.2x 0x%2.2x "
87                            "0x%2.2x 0x%2.2x 0x%2.2x 0x%2.2x\n", p,
88                            hdev->features[p][0], hdev->features[p][1],
89                            hdev->features[p][2], hdev->features[p][3],
90                            hdev->features[p][4], hdev->features[p][5],
91                            hdev->features[p][6], hdev->features[p][7]);
92         }
93         if (lmp_le_capable(hdev))
94                 seq_printf(f, "LE: 0x%2.2x 0x%2.2x 0x%2.2x 0x%2.2x "
95                            "0x%2.2x 0x%2.2x 0x%2.2x 0x%2.2x\n",
96                            hdev->le_features[0], hdev->le_features[1],
97                            hdev->le_features[2], hdev->le_features[3],
98                            hdev->le_features[4], hdev->le_features[5],
99                            hdev->le_features[6], hdev->le_features[7]);
100         hci_dev_unlock(hdev);
101
102         return 0;
103 }
104
105 static int features_open(struct inode *inode, struct file *file)
106 {
107         return single_open(file, features_show, inode->i_private);
108 }
109
110 static const struct file_operations features_fops = {
111         .open           = features_open,
112         .read           = seq_read,
113         .llseek         = seq_lseek,
114         .release        = single_release,
115 };
116
117 static int device_id_show(struct seq_file *f, void *ptr)
118 {
119         struct hci_dev *hdev = f->private;
120
121         hci_dev_lock(hdev);
122         seq_printf(f, "%4.4x:%4.4x:%4.4x:%4.4x\n", hdev->devid_source,
123                   hdev->devid_vendor, hdev->devid_product, hdev->devid_version);
124         hci_dev_unlock(hdev);
125
126         return 0;
127 }
128
129 static int device_id_open(struct inode *inode, struct file *file)
130 {
131         return single_open(file, device_id_show, inode->i_private);
132 }
133
134 static const struct file_operations device_id_fops = {
135         .open           = device_id_open,
136         .read           = seq_read,
137         .llseek         = seq_lseek,
138         .release        = single_release,
139 };
140
141 static int device_list_show(struct seq_file *f, void *ptr)
142 {
143         struct hci_dev *hdev = f->private;
144         struct hci_conn_params *p;
145         struct bdaddr_list *b;
146
147         hci_dev_lock(hdev);
148         list_for_each_entry(b, &hdev->whitelist, list)
149                 seq_printf(f, "%pMR (type %u)\n", &b->bdaddr, b->bdaddr_type);
150         list_for_each_entry(p, &hdev->le_conn_params, list) {
151                 seq_printf(f, "%pMR (type %u) %u\n", &p->addr, p->addr_type,
152                            p->auto_connect);
153         }
154         hci_dev_unlock(hdev);
155
156         return 0;
157 }
158
159 static int device_list_open(struct inode *inode, struct file *file)
160 {
161         return single_open(file, device_list_show, inode->i_private);
162 }
163
164 static const struct file_operations device_list_fops = {
165         .open           = device_list_open,
166         .read           = seq_read,
167         .llseek         = seq_lseek,
168         .release        = single_release,
169 };
170
171 static int blacklist_show(struct seq_file *f, void *p)
172 {
173         struct hci_dev *hdev = f->private;
174         struct bdaddr_list *b;
175
176         hci_dev_lock(hdev);
177         list_for_each_entry(b, &hdev->blacklist, list)
178                 seq_printf(f, "%pMR (type %u)\n", &b->bdaddr, b->bdaddr_type);
179         hci_dev_unlock(hdev);
180
181         return 0;
182 }
183
184 static int blacklist_open(struct inode *inode, struct file *file)
185 {
186         return single_open(file, blacklist_show, inode->i_private);
187 }
188
189 static const struct file_operations blacklist_fops = {
190         .open           = blacklist_open,
191         .read           = seq_read,
192         .llseek         = seq_lseek,
193         .release        = single_release,
194 };
195
196 static int uuids_show(struct seq_file *f, void *p)
197 {
198         struct hci_dev *hdev = f->private;
199         struct bt_uuid *uuid;
200
201         hci_dev_lock(hdev);
202         list_for_each_entry(uuid, &hdev->uuids, list) {
203                 u8 i, val[16];
204
205                 /* The Bluetooth UUID values are stored in big endian,
206                  * but with reversed byte order. So convert them into
207                  * the right order for the %pUb modifier.
208                  */
209                 for (i = 0; i < 16; i++)
210                         val[i] = uuid->uuid[15 - i];
211
212                 seq_printf(f, "%pUb\n", val);
213         }
214         hci_dev_unlock(hdev);
215
216        return 0;
217 }
218
219 static int uuids_open(struct inode *inode, struct file *file)
220 {
221         return single_open(file, uuids_show, inode->i_private);
222 }
223
224 static const struct file_operations uuids_fops = {
225         .open           = uuids_open,
226         .read           = seq_read,
227         .llseek         = seq_lseek,
228         .release        = single_release,
229 };
230
231 static int remote_oob_show(struct seq_file *f, void *ptr)
232 {
233         struct hci_dev *hdev = f->private;
234         struct oob_data *data;
235
236         hci_dev_lock(hdev);
237         list_for_each_entry(data, &hdev->remote_oob_data, list) {
238                 seq_printf(f, "%pMR (type %u) %u %*phN %*phN %*phN %*phN\n",
239                            &data->bdaddr, data->bdaddr_type, data->present,
240                            16, data->hash192, 16, data->rand192,
241                            16, data->hash256, 16, data->rand256);
242         }
243         hci_dev_unlock(hdev);
244
245         return 0;
246 }
247
248 static int remote_oob_open(struct inode *inode, struct file *file)
249 {
250         return single_open(file, remote_oob_show, inode->i_private);
251 }
252
253 static const struct file_operations remote_oob_fops = {
254         .open           = remote_oob_open,
255         .read           = seq_read,
256         .llseek         = seq_lseek,
257         .release        = single_release,
258 };
259
260 static int conn_info_min_age_set(void *data, u64 val)
261 {
262         struct hci_dev *hdev = data;
263
264         if (val == 0 || val > hdev->conn_info_max_age)
265                 return -EINVAL;
266
267         hci_dev_lock(hdev);
268         hdev->conn_info_min_age = val;
269         hci_dev_unlock(hdev);
270
271         return 0;
272 }
273
274 static int conn_info_min_age_get(void *data, u64 *val)
275 {
276         struct hci_dev *hdev = data;
277
278         hci_dev_lock(hdev);
279         *val = hdev->conn_info_min_age;
280         hci_dev_unlock(hdev);
281
282         return 0;
283 }
284
285 DEFINE_SIMPLE_ATTRIBUTE(conn_info_min_age_fops, conn_info_min_age_get,
286                         conn_info_min_age_set, "%llu\n");
287
288 static int conn_info_max_age_set(void *data, u64 val)
289 {
290         struct hci_dev *hdev = data;
291
292         if (val == 0 || val < hdev->conn_info_min_age)
293                 return -EINVAL;
294
295         hci_dev_lock(hdev);
296         hdev->conn_info_max_age = val;
297         hci_dev_unlock(hdev);
298
299         return 0;
300 }
301
302 static int conn_info_max_age_get(void *data, u64 *val)
303 {
304         struct hci_dev *hdev = data;
305
306         hci_dev_lock(hdev);
307         *val = hdev->conn_info_max_age;
308         hci_dev_unlock(hdev);
309
310         return 0;
311 }
312
313 DEFINE_SIMPLE_ATTRIBUTE(conn_info_max_age_fops, conn_info_max_age_get,
314                         conn_info_max_age_set, "%llu\n");
315
316 static ssize_t use_debug_keys_read(struct file *file, char __user *user_buf,
317                                    size_t count, loff_t *ppos)
318 {
319         struct hci_dev *hdev = file->private_data;
320         char buf[3];
321
322         buf[0] = hci_dev_test_flag(hdev, HCI_USE_DEBUG_KEYS) ? 'Y': 'N';
323         buf[1] = '\n';
324         buf[2] = '\0';
325         return simple_read_from_buffer(user_buf, count, ppos, buf, 2);
326 }
327
328 static const struct file_operations use_debug_keys_fops = {
329         .open           = simple_open,
330         .read           = use_debug_keys_read,
331         .llseek         = default_llseek,
332 };
333
334 static ssize_t sc_only_mode_read(struct file *file, char __user *user_buf,
335                                  size_t count, loff_t *ppos)
336 {
337         struct hci_dev *hdev = file->private_data;
338         char buf[3];
339
340         buf[0] = hci_dev_test_flag(hdev, HCI_SC_ONLY) ? 'Y': 'N';
341         buf[1] = '\n';
342         buf[2] = '\0';
343         return simple_read_from_buffer(user_buf, count, ppos, buf, 2);
344 }
345
346 static const struct file_operations sc_only_mode_fops = {
347         .open           = simple_open,
348         .read           = sc_only_mode_read,
349         .llseek         = default_llseek,
350 };
351
352 void hci_debugfs_create_common(struct hci_dev *hdev)
353 {
354         debugfs_create_file("features", 0444, hdev->debugfs, hdev,
355                             &features_fops);
356         debugfs_create_u16("manufacturer", 0444, hdev->debugfs,
357                            &hdev->manufacturer);
358         debugfs_create_u8("hci_version", 0444, hdev->debugfs, &hdev->hci_ver);
359         debugfs_create_u16("hci_revision", 0444, hdev->debugfs, &hdev->hci_rev);
360         debugfs_create_u8("hardware_error", 0444, hdev->debugfs,
361                           &hdev->hw_error_code);
362         debugfs_create_file("device_id", 0444, hdev->debugfs, hdev,
363                             &device_id_fops);
364
365         debugfs_create_file("device_list", 0444, hdev->debugfs, hdev,
366                             &device_list_fops);
367         debugfs_create_file("blacklist", 0444, hdev->debugfs, hdev,
368                             &blacklist_fops);
369         debugfs_create_file("uuids", 0444, hdev->debugfs, hdev, &uuids_fops);
370         debugfs_create_file("remote_oob", 0400, hdev->debugfs, hdev,
371                             &remote_oob_fops);
372
373         debugfs_create_file("conn_info_min_age", 0644, hdev->debugfs, hdev,
374                             &conn_info_min_age_fops);
375         debugfs_create_file("conn_info_max_age", 0644, hdev->debugfs, hdev,
376                             &conn_info_max_age_fops);
377
378         if (lmp_ssp_capable(hdev) || lmp_le_capable(hdev))
379                 debugfs_create_file("use_debug_keys", 0444, hdev->debugfs,
380                                     hdev, &use_debug_keys_fops);
381
382         if (lmp_sc_capable(hdev) || lmp_le_capable(hdev))
383                 debugfs_create_file("sc_only_mode", 0444, hdev->debugfs,
384                                     hdev, &sc_only_mode_fops);
385 }
386
387 static int inquiry_cache_show(struct seq_file *f, void *p)
388 {
389         struct hci_dev *hdev = f->private;
390         struct discovery_state *cache = &hdev->discovery;
391         struct inquiry_entry *e;
392
393         hci_dev_lock(hdev);
394
395         list_for_each_entry(e, &cache->all, all) {
396                 struct inquiry_data *data = &e->data;
397                 seq_printf(f, "%pMR %d %d %d 0x%.2x%.2x%.2x 0x%.4x %d %d %u\n",
398                            &data->bdaddr,
399                            data->pscan_rep_mode, data->pscan_period_mode,
400                            data->pscan_mode, data->dev_class[2],
401                            data->dev_class[1], data->dev_class[0],
402                            __le16_to_cpu(data->clock_offset),
403                            data->rssi, data->ssp_mode, e->timestamp);
404         }
405
406         hci_dev_unlock(hdev);
407
408         return 0;
409 }
410
411 static int inquiry_cache_open(struct inode *inode, struct file *file)
412 {
413         return single_open(file, inquiry_cache_show, inode->i_private);
414 }
415
416 static const struct file_operations inquiry_cache_fops = {
417         .open           = inquiry_cache_open,
418         .read           = seq_read,
419         .llseek         = seq_lseek,
420         .release        = single_release,
421 };
422
423 static int link_keys_show(struct seq_file *f, void *ptr)
424 {
425         struct hci_dev *hdev = f->private;
426         struct link_key *key;
427
428         rcu_read_lock();
429         list_for_each_entry_rcu(key, &hdev->link_keys, list)
430                 seq_printf(f, "%pMR %u %*phN %u\n", &key->bdaddr, key->type,
431                            HCI_LINK_KEY_SIZE, key->val, key->pin_len);
432         rcu_read_unlock();
433
434         return 0;
435 }
436
437 static int link_keys_open(struct inode *inode, struct file *file)
438 {
439         return single_open(file, link_keys_show, inode->i_private);
440 }
441
442 static const struct file_operations link_keys_fops = {
443         .open           = link_keys_open,
444         .read           = seq_read,
445         .llseek         = seq_lseek,
446         .release        = single_release,
447 };
448
449 static int dev_class_show(struct seq_file *f, void *ptr)
450 {
451         struct hci_dev *hdev = f->private;
452
453         hci_dev_lock(hdev);
454         seq_printf(f, "0x%.2x%.2x%.2x\n", hdev->dev_class[2],
455                    hdev->dev_class[1], hdev->dev_class[0]);
456         hci_dev_unlock(hdev);
457
458         return 0;
459 }
460
461 static int dev_class_open(struct inode *inode, struct file *file)
462 {
463         return single_open(file, dev_class_show, inode->i_private);
464 }
465
466 static const struct file_operations dev_class_fops = {
467         .open           = dev_class_open,
468         .read           = seq_read,
469         .llseek         = seq_lseek,
470         .release        = single_release,
471 };
472
473 static int voice_setting_get(void *data, u64 *val)
474 {
475         struct hci_dev *hdev = data;
476
477         hci_dev_lock(hdev);
478         *val = hdev->voice_setting;
479         hci_dev_unlock(hdev);
480
481         return 0;
482 }
483
484 DEFINE_SIMPLE_ATTRIBUTE(voice_setting_fops, voice_setting_get,
485                         NULL, "0x%4.4llx\n");
486
487 static ssize_t ssp_debug_mode_read(struct file *file, char __user *user_buf,
488                                    size_t count, loff_t *ppos)
489 {
490         struct hci_dev *hdev = file->private_data;
491         char buf[3];
492
493         buf[0] = hdev->ssp_debug_mode ? 'Y': 'N';
494         buf[1] = '\n';
495         buf[2] = '\0';
496         return simple_read_from_buffer(user_buf, count, ppos, buf, 2);
497 }
498
499 static const struct file_operations ssp_debug_mode_fops = {
500         .open           = simple_open,
501         .read           = ssp_debug_mode_read,
502         .llseek         = default_llseek,
503 };
504
505 static int auto_accept_delay_set(void *data, u64 val)
506 {
507         struct hci_dev *hdev = data;
508
509         hci_dev_lock(hdev);
510         hdev->auto_accept_delay = val;
511         hci_dev_unlock(hdev);
512
513         return 0;
514 }
515
516 static int auto_accept_delay_get(void *data, u64 *val)
517 {
518         struct hci_dev *hdev = data;
519
520         hci_dev_lock(hdev);
521         *val = hdev->auto_accept_delay;
522         hci_dev_unlock(hdev);
523
524         return 0;
525 }
526
527 DEFINE_SIMPLE_ATTRIBUTE(auto_accept_delay_fops, auto_accept_delay_get,
528                         auto_accept_delay_set, "%llu\n");
529
530 static int idle_timeout_set(void *data, u64 val)
531 {
532         struct hci_dev *hdev = data;
533
534         if (val != 0 && (val < 500 || val > 3600000))
535                 return -EINVAL;
536
537         hci_dev_lock(hdev);
538         hdev->idle_timeout = val;
539         hci_dev_unlock(hdev);
540
541         return 0;
542 }
543
544 static int idle_timeout_get(void *data, u64 *val)
545 {
546         struct hci_dev *hdev = data;
547
548         hci_dev_lock(hdev);
549         *val = hdev->idle_timeout;
550         hci_dev_unlock(hdev);
551
552         return 0;
553 }
554
555 DEFINE_SIMPLE_ATTRIBUTE(idle_timeout_fops, idle_timeout_get,
556                         idle_timeout_set, "%llu\n");
557
558 static int sniff_min_interval_set(void *data, u64 val)
559 {
560         struct hci_dev *hdev = data;
561
562         if (val == 0 || val % 2 || val > hdev->sniff_max_interval)
563                 return -EINVAL;
564
565         hci_dev_lock(hdev);
566         hdev->sniff_min_interval = val;
567         hci_dev_unlock(hdev);
568
569         return 0;
570 }
571
572 static int sniff_min_interval_get(void *data, u64 *val)
573 {
574         struct hci_dev *hdev = data;
575
576         hci_dev_lock(hdev);
577         *val = hdev->sniff_min_interval;
578         hci_dev_unlock(hdev);
579
580         return 0;
581 }
582
583 DEFINE_SIMPLE_ATTRIBUTE(sniff_min_interval_fops, sniff_min_interval_get,
584                         sniff_min_interval_set, "%llu\n");
585
586 static int sniff_max_interval_set(void *data, u64 val)
587 {
588         struct hci_dev *hdev = data;
589
590         if (val == 0 || val % 2 || val < hdev->sniff_min_interval)
591                 return -EINVAL;
592
593         hci_dev_lock(hdev);
594         hdev->sniff_max_interval = val;
595         hci_dev_unlock(hdev);
596
597         return 0;
598 }
599
600 static int sniff_max_interval_get(void *data, u64 *val)
601 {
602         struct hci_dev *hdev = data;
603
604         hci_dev_lock(hdev);
605         *val = hdev->sniff_max_interval;
606         hci_dev_unlock(hdev);
607
608         return 0;
609 }
610
611 DEFINE_SIMPLE_ATTRIBUTE(sniff_max_interval_fops, sniff_max_interval_get,
612                         sniff_max_interval_set, "%llu\n");
613
614 void hci_debugfs_create_bredr(struct hci_dev *hdev)
615 {
616         debugfs_create_file("inquiry_cache", 0444, hdev->debugfs, hdev,
617                             &inquiry_cache_fops);
618         debugfs_create_file("link_keys", 0400, hdev->debugfs, hdev,
619                             &link_keys_fops);
620         debugfs_create_file("dev_class", 0444, hdev->debugfs, hdev,
621                             &dev_class_fops);
622         debugfs_create_file("voice_setting", 0444, hdev->debugfs, hdev,
623                             &voice_setting_fops);
624
625         if (lmp_ssp_capable(hdev)) {
626                 debugfs_create_file("ssp_debug_mode", 0444, hdev->debugfs,
627                                     hdev, &ssp_debug_mode_fops);
628                 debugfs_create_file("auto_accept_delay", 0644, hdev->debugfs,
629                                     hdev, &auto_accept_delay_fops);
630         }
631
632         if (lmp_sniff_capable(hdev)) {
633                 debugfs_create_file("idle_timeout", 0644, hdev->debugfs,
634                                     hdev, &idle_timeout_fops);
635                 debugfs_create_file("sniff_min_interval", 0644, hdev->debugfs,
636                                     hdev, &sniff_min_interval_fops);
637                 debugfs_create_file("sniff_max_interval", 0644, hdev->debugfs,
638                                     hdev, &sniff_max_interval_fops);
639         }
640 }
641
642 static int identity_show(struct seq_file *f, void *p)
643 {
644         struct hci_dev *hdev = f->private;
645         bdaddr_t addr;
646         u8 addr_type;
647
648         hci_dev_lock(hdev);
649
650         hci_copy_identity_address(hdev, &addr, &addr_type);
651
652         seq_printf(f, "%pMR (type %u) %*phN %pMR\n", &addr, addr_type,
653                    16, hdev->irk, &hdev->rpa);
654
655         hci_dev_unlock(hdev);
656
657         return 0;
658 }
659
660 static int identity_open(struct inode *inode, struct file *file)
661 {
662         return single_open(file, identity_show, inode->i_private);
663 }
664
665 static const struct file_operations identity_fops = {
666         .open           = identity_open,
667         .read           = seq_read,
668         .llseek         = seq_lseek,
669         .release        = single_release,
670 };
671
672 static int rpa_timeout_set(void *data, u64 val)
673 {
674         struct hci_dev *hdev = data;
675
676         /* Require the RPA timeout to be at least 30 seconds and at most
677          * 24 hours.
678          */
679         if (val < 30 || val > (60 * 60 * 24))
680                 return -EINVAL;
681
682         hci_dev_lock(hdev);
683         hdev->rpa_timeout = val;
684         hci_dev_unlock(hdev);
685
686         return 0;
687 }
688
689 static int rpa_timeout_get(void *data, u64 *val)
690 {
691         struct hci_dev *hdev = data;
692
693         hci_dev_lock(hdev);
694         *val = hdev->rpa_timeout;
695         hci_dev_unlock(hdev);
696
697         return 0;
698 }
699
700 DEFINE_SIMPLE_ATTRIBUTE(rpa_timeout_fops, rpa_timeout_get,
701                         rpa_timeout_set, "%llu\n");
702
703 static int random_address_show(struct seq_file *f, void *p)
704 {
705         struct hci_dev *hdev = f->private;
706
707         hci_dev_lock(hdev);
708         seq_printf(f, "%pMR\n", &hdev->random_addr);
709         hci_dev_unlock(hdev);
710
711         return 0;
712 }
713
714 static int random_address_open(struct inode *inode, struct file *file)
715 {
716         return single_open(file, random_address_show, inode->i_private);
717 }
718
719 static const struct file_operations random_address_fops = {
720         .open           = random_address_open,
721         .read           = seq_read,
722         .llseek         = seq_lseek,
723         .release        = single_release,
724 };
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 static int static_address_open(struct inode *inode, struct file *file)
738 {
739         return single_open(file, static_address_show, inode->i_private);
740 }
741
742 static const struct file_operations static_address_fops = {
743         .open           = static_address_open,
744         .read           = seq_read,
745         .llseek         = seq_lseek,
746         .release        = single_release,
747 };
748
749 static ssize_t force_static_address_read(struct file *file,
750                                          char __user *user_buf,
751                                          size_t count, loff_t *ppos)
752 {
753         struct hci_dev *hdev = file->private_data;
754         char buf[3];
755
756         buf[0] = hci_dev_test_flag(hdev, HCI_FORCE_STATIC_ADDR) ? 'Y': 'N';
757         buf[1] = '\n';
758         buf[2] = '\0';
759         return simple_read_from_buffer(user_buf, count, ppos, buf, 2);
760 }
761
762 static ssize_t force_static_address_write(struct file *file,
763                                           const char __user *user_buf,
764                                           size_t count, loff_t *ppos)
765 {
766         struct hci_dev *hdev = file->private_data;
767         char buf[32];
768         size_t buf_size = min(count, (sizeof(buf)-1));
769         bool enable;
770
771         if (test_bit(HCI_UP, &hdev->flags))
772                 return -EBUSY;
773
774         if (copy_from_user(buf, user_buf, buf_size))
775                 return -EFAULT;
776
777         buf[buf_size] = '\0';
778         if (strtobool(buf, &enable))
779                 return -EINVAL;
780
781         if (enable == hci_dev_test_flag(hdev, HCI_FORCE_STATIC_ADDR))
782                 return -EALREADY;
783
784         hci_dev_change_flag(hdev, HCI_FORCE_STATIC_ADDR);
785
786         return count;
787 }
788
789 static const struct file_operations force_static_address_fops = {
790         .open           = simple_open,
791         .read           = force_static_address_read,
792         .write          = force_static_address_write,
793         .llseek         = default_llseek,
794 };
795
796 static int white_list_show(struct seq_file *f, void *ptr)
797 {
798         struct hci_dev *hdev = f->private;
799         struct bdaddr_list *b;
800
801         hci_dev_lock(hdev);
802         list_for_each_entry(b, &hdev->le_white_list, list)
803                 seq_printf(f, "%pMR (type %u)\n", &b->bdaddr, b->bdaddr_type);
804         hci_dev_unlock(hdev);
805
806         return 0;
807 }
808
809 static int white_list_open(struct inode *inode, struct file *file)
810 {
811         return single_open(file, white_list_show, inode->i_private);
812 }
813
814 static const struct file_operations white_list_fops = {
815         .open           = white_list_open,
816         .read           = seq_read,
817         .llseek         = seq_lseek,
818         .release        = single_release,
819 };
820
821 static int identity_resolving_keys_show(struct seq_file *f, void *ptr)
822 {
823         struct hci_dev *hdev = f->private;
824         struct smp_irk *irk;
825
826         rcu_read_lock();
827         list_for_each_entry_rcu(irk, &hdev->identity_resolving_keys, list) {
828                 seq_printf(f, "%pMR (type %u) %*phN %pMR\n",
829                            &irk->bdaddr, irk->addr_type,
830                            16, irk->val, &irk->rpa);
831         }
832         rcu_read_unlock();
833
834         return 0;
835 }
836
837 static int identity_resolving_keys_open(struct inode *inode, struct file *file)
838 {
839         return single_open(file, identity_resolving_keys_show,
840                            inode->i_private);
841 }
842
843 static const struct file_operations identity_resolving_keys_fops = {
844         .open           = identity_resolving_keys_open,
845         .read           = seq_read,
846         .llseek         = seq_lseek,
847         .release        = single_release,
848 };
849
850 static int long_term_keys_show(struct seq_file *f, void *ptr)
851 {
852         struct hci_dev *hdev = f->private;
853         struct smp_ltk *ltk;
854
855         rcu_read_lock();
856         list_for_each_entry_rcu(ltk, &hdev->long_term_keys, list)
857                 seq_printf(f, "%pMR (type %u) %u 0x%02x %u %.4x %.16llx %*phN\n",
858                            &ltk->bdaddr, ltk->bdaddr_type, ltk->authenticated,
859                            ltk->type, ltk->enc_size, __le16_to_cpu(ltk->ediv),
860                            __le64_to_cpu(ltk->rand), 16, ltk->val);
861         rcu_read_unlock();
862
863         return 0;
864 }
865
866 static int long_term_keys_open(struct inode *inode, struct file *file)
867 {
868         return single_open(file, long_term_keys_show, inode->i_private);
869 }
870
871 static const struct file_operations long_term_keys_fops = {
872         .open           = long_term_keys_open,
873         .read           = seq_read,
874         .llseek         = seq_lseek,
875         .release        = single_release,
876 };
877
878 static int conn_min_interval_set(void *data, u64 val)
879 {
880         struct hci_dev *hdev = data;
881
882         if (val < 0x0006 || val > 0x0c80 || val > hdev->le_conn_max_interval)
883                 return -EINVAL;
884
885         hci_dev_lock(hdev);
886         hdev->le_conn_min_interval = val;
887         hci_dev_unlock(hdev);
888
889         return 0;
890 }
891
892 static int conn_min_interval_get(void *data, u64 *val)
893 {
894         struct hci_dev *hdev = data;
895
896         hci_dev_lock(hdev);
897         *val = hdev->le_conn_min_interval;
898         hci_dev_unlock(hdev);
899
900         return 0;
901 }
902
903 DEFINE_SIMPLE_ATTRIBUTE(conn_min_interval_fops, conn_min_interval_get,
904                         conn_min_interval_set, "%llu\n");
905
906 static int conn_max_interval_set(void *data, u64 val)
907 {
908         struct hci_dev *hdev = data;
909
910         if (val < 0x0006 || val > 0x0c80 || val < hdev->le_conn_min_interval)
911                 return -EINVAL;
912
913         hci_dev_lock(hdev);
914         hdev->le_conn_max_interval = val;
915         hci_dev_unlock(hdev);
916
917         return 0;
918 }
919
920 static int conn_max_interval_get(void *data, u64 *val)
921 {
922         struct hci_dev *hdev = data;
923
924         hci_dev_lock(hdev);
925         *val = hdev->le_conn_max_interval;
926         hci_dev_unlock(hdev);
927
928         return 0;
929 }
930
931 DEFINE_SIMPLE_ATTRIBUTE(conn_max_interval_fops, conn_max_interval_get,
932                         conn_max_interval_set, "%llu\n");
933
934 static int conn_latency_set(void *data, u64 val)
935 {
936         struct hci_dev *hdev = data;
937
938         if (val > 0x01f3)
939                 return -EINVAL;
940
941         hci_dev_lock(hdev);
942         hdev->le_conn_latency = val;
943         hci_dev_unlock(hdev);
944
945         return 0;
946 }
947
948 static int conn_latency_get(void *data, u64 *val)
949 {
950         struct hci_dev *hdev = data;
951
952         hci_dev_lock(hdev);
953         *val = hdev->le_conn_latency;
954         hci_dev_unlock(hdev);
955
956         return 0;
957 }
958
959 DEFINE_SIMPLE_ATTRIBUTE(conn_latency_fops, conn_latency_get,
960                         conn_latency_set, "%llu\n");
961
962 static int supervision_timeout_set(void *data, u64 val)
963 {
964         struct hci_dev *hdev = data;
965
966         if (val < 0x000a || val > 0x0c80)
967                 return -EINVAL;
968
969         hci_dev_lock(hdev);
970         hdev->le_supv_timeout = val;
971         hci_dev_unlock(hdev);
972
973         return 0;
974 }
975
976 static int supervision_timeout_get(void *data, u64 *val)
977 {
978         struct hci_dev *hdev = data;
979
980         hci_dev_lock(hdev);
981         *val = hdev->le_supv_timeout;
982         hci_dev_unlock(hdev);
983
984         return 0;
985 }
986
987 DEFINE_SIMPLE_ATTRIBUTE(supervision_timeout_fops, supervision_timeout_get,
988                         supervision_timeout_set, "%llu\n");
989
990 static int adv_channel_map_set(void *data, u64 val)
991 {
992         struct hci_dev *hdev = data;
993
994         if (val < 0x01 || val > 0x07)
995                 return -EINVAL;
996
997         hci_dev_lock(hdev);
998         hdev->le_adv_channel_map = val;
999         hci_dev_unlock(hdev);
1000
1001         return 0;
1002 }
1003
1004 static int adv_channel_map_get(void *data, u64 *val)
1005 {
1006         struct hci_dev *hdev = data;
1007
1008         hci_dev_lock(hdev);
1009         *val = hdev->le_adv_channel_map;
1010         hci_dev_unlock(hdev);
1011
1012         return 0;
1013 }
1014
1015 DEFINE_SIMPLE_ATTRIBUTE(adv_channel_map_fops, adv_channel_map_get,
1016                         adv_channel_map_set, "%llu\n");
1017
1018 static int adv_min_interval_set(void *data, u64 val)
1019 {
1020         struct hci_dev *hdev = data;
1021
1022         if (val < 0x0020 || val > 0x4000 || val > hdev->le_adv_max_interval)
1023                 return -EINVAL;
1024
1025         hci_dev_lock(hdev);
1026         hdev->le_adv_min_interval = val;
1027         hci_dev_unlock(hdev);
1028
1029         return 0;
1030 }
1031
1032 static int adv_min_interval_get(void *data, u64 *val)
1033 {
1034         struct hci_dev *hdev = data;
1035
1036         hci_dev_lock(hdev);
1037         *val = hdev->le_adv_min_interval;
1038         hci_dev_unlock(hdev);
1039
1040         return 0;
1041 }
1042
1043 DEFINE_SIMPLE_ATTRIBUTE(adv_min_interval_fops, adv_min_interval_get,
1044                         adv_min_interval_set, "%llu\n");
1045
1046 static int adv_max_interval_set(void *data, u64 val)
1047 {
1048         struct hci_dev *hdev = data;
1049
1050         if (val < 0x0020 || val > 0x4000 || val < hdev->le_adv_min_interval)
1051                 return -EINVAL;
1052
1053         hci_dev_lock(hdev);
1054         hdev->le_adv_max_interval = val;
1055         hci_dev_unlock(hdev);
1056
1057         return 0;
1058 }
1059
1060 static int adv_max_interval_get(void *data, u64 *val)
1061 {
1062         struct hci_dev *hdev = data;
1063
1064         hci_dev_lock(hdev);
1065         *val = hdev->le_adv_max_interval;
1066         hci_dev_unlock(hdev);
1067
1068         return 0;
1069 }
1070
1071 DEFINE_SIMPLE_ATTRIBUTE(adv_max_interval_fops, adv_max_interval_get,
1072                         adv_max_interval_set, "%llu\n");
1073
1074 DEFINE_QUIRK_ATTRIBUTE(quirk_strict_duplicate_filter,
1075                        HCI_QUIRK_STRICT_DUPLICATE_FILTER);
1076 DEFINE_QUIRK_ATTRIBUTE(quirk_simultaneous_discovery,
1077                        HCI_QUIRK_SIMULTANEOUS_DISCOVERY);
1078
1079 void hci_debugfs_create_le(struct hci_dev *hdev)
1080 {
1081         debugfs_create_file("identity", 0400, hdev->debugfs, hdev,
1082                             &identity_fops);
1083         debugfs_create_file("rpa_timeout", 0644, hdev->debugfs, hdev,
1084                             &rpa_timeout_fops);
1085         debugfs_create_file("random_address", 0444, hdev->debugfs, hdev,
1086                             &random_address_fops);
1087         debugfs_create_file("static_address", 0444, hdev->debugfs, hdev,
1088                             &static_address_fops);
1089
1090         /* For controllers with a public address, provide a debug
1091          * option to force the usage of the configured static
1092          * address. By default the public address is used.
1093          */
1094         if (bacmp(&hdev->bdaddr, BDADDR_ANY))
1095                 debugfs_create_file("force_static_address", 0644,
1096                                     hdev->debugfs, hdev,
1097                                     &force_static_address_fops);
1098
1099         debugfs_create_u8("white_list_size", 0444, hdev->debugfs,
1100                           &hdev->le_white_list_size);
1101         debugfs_create_file("white_list", 0444, hdev->debugfs, hdev,
1102                             &white_list_fops);
1103         debugfs_create_file("identity_resolving_keys", 0400, hdev->debugfs,
1104                             hdev, &identity_resolving_keys_fops);
1105         debugfs_create_file("long_term_keys", 0400, hdev->debugfs, hdev,
1106                             &long_term_keys_fops);
1107         debugfs_create_file("conn_min_interval", 0644, hdev->debugfs, hdev,
1108                             &conn_min_interval_fops);
1109         debugfs_create_file("conn_max_interval", 0644, hdev->debugfs, hdev,
1110                             &conn_max_interval_fops);
1111         debugfs_create_file("conn_latency", 0644, hdev->debugfs, hdev,
1112                             &conn_latency_fops);
1113         debugfs_create_file("supervision_timeout", 0644, hdev->debugfs, hdev,
1114                             &supervision_timeout_fops);
1115         debugfs_create_file("adv_channel_map", 0644, hdev->debugfs, hdev,
1116                             &adv_channel_map_fops);
1117         debugfs_create_file("adv_min_interval", 0644, hdev->debugfs, hdev,
1118                             &adv_min_interval_fops);
1119         debugfs_create_file("adv_max_interval", 0644, hdev->debugfs, hdev,
1120                             &adv_max_interval_fops);
1121         debugfs_create_u16("discov_interleaved_timeout", 0644, hdev->debugfs,
1122                            &hdev->discov_interleaved_timeout);
1123
1124         debugfs_create_file("quirk_strict_duplicate_filter", 0644,
1125                             hdev->debugfs, hdev,
1126                             &quirk_strict_duplicate_filter_fops);
1127         debugfs_create_file("quirk_simultaneous_discovery", 0644,
1128                             hdev->debugfs, hdev,
1129                             &quirk_simultaneous_discovery_fops);
1130 }
1131
1132 void hci_debugfs_create_conn(struct hci_conn *conn)
1133 {
1134         struct hci_dev *hdev = conn->hdev;
1135         char name[6];
1136
1137         if (IS_ERR_OR_NULL(hdev->debugfs))
1138                 return;
1139
1140         snprintf(name, sizeof(name), "%u", conn->handle);
1141         conn->debugfs = debugfs_create_dir(name, hdev->debugfs);
1142 }