cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

hci_debugfs.c (33801B)


      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)				      \
     34static 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									      \
     47static 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									      \
     70static 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)				      \
     78static 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									      \
     89DEFINE_SHOW_ATTRIBUTE(__name)
     90
     91static 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
    106DEFINE_SHOW_ATTRIBUTE(features);
    107
    108static 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
    120DEFINE_SHOW_ATTRIBUTE(device_id);
    121
    122static 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
    140DEFINE_SHOW_ATTRIBUTE(device_list);
    141
    142static 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
    155DEFINE_SHOW_ATTRIBUTE(blacklist);
    156
    157static 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
    170DEFINE_SHOW_ATTRIBUTE(blocked_keys);
    171
    172static 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
    195DEFINE_SHOW_ATTRIBUTE(uuids);
    196
    197static 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
    214DEFINE_SHOW_ATTRIBUTE(remote_oob);
    215
    216static 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
    230static 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
    241DEFINE_DEBUGFS_ATTRIBUTE(conn_info_min_age_fops, conn_info_min_age_get,
    242			  conn_info_min_age_set, "%llu\n");
    243
    244static 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
    258static 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
    269DEFINE_DEBUGFS_ATTRIBUTE(conn_info_max_age_fops, conn_info_max_age_get,
    270			  conn_info_max_age_set, "%llu\n");
    271
    272static 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
    284static const struct file_operations use_debug_keys_fops = {
    285	.open		= simple_open,
    286	.read		= use_debug_keys_read,
    287	.llseek		= default_llseek,
    288};
    289
    290static 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
    302static const struct file_operations sc_only_mode_fops = {
    303	.open		= simple_open,
    304	.read		= sc_only_mode_read,
    305	.llseek		= default_llseek,
    306};
    307
    308DEFINE_INFO_ATTRIBUTE(hardware_info, hw_info);
    309DEFINE_INFO_ATTRIBUTE(firmware_info, fw_info);
    310
    311void 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
    356static 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
    380DEFINE_SHOW_ATTRIBUTE(inquiry_cache);
    381
    382static 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
    396DEFINE_SHOW_ATTRIBUTE(link_keys);
    397
    398static 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
    410DEFINE_SHOW_ATTRIBUTE(dev_class);
    411
    412static 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
    423DEFINE_DEBUGFS_ATTRIBUTE(voice_setting_fops, voice_setting_get,
    424			  NULL, "0x%4.4llx\n");
    425
    426static 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
    438static const struct file_operations ssp_debug_mode_fops = {
    439	.open		= simple_open,
    440	.read		= ssp_debug_mode_read,
    441	.llseek		= default_llseek,
    442};
    443
    444static 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
    455static 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
    469static 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
    480DEFINE_DEBUGFS_ATTRIBUTE(min_encrypt_key_size_fops,
    481			  min_encrypt_key_size_get,
    482			  min_encrypt_key_size_set, "%llu\n");
    483
    484static 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
    495DEFINE_DEBUGFS_ATTRIBUTE(auto_accept_delay_fops, auto_accept_delay_get,
    496			  auto_accept_delay_set, "%llu\n");
    497
    498static 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
    511static 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
    530static 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
    537static 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
    551static 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
    562DEFINE_DEBUGFS_ATTRIBUTE(idle_timeout_fops, idle_timeout_get,
    563			  idle_timeout_set, "%llu\n");
    564
    565static 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
    579static 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
    590DEFINE_DEBUGFS_ATTRIBUTE(sniff_min_interval_fops, sniff_min_interval_get,
    591			  sniff_min_interval_set, "%llu\n");
    592
    593static 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
    607static 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
    618DEFINE_DEBUGFS_ATTRIBUTE(sniff_max_interval_fops, sniff_max_interval_get,
    619			  sniff_max_interval_set, "%llu\n");
    620
    621void 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
    662static 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
    680DEFINE_SHOW_ATTRIBUTE(identity);
    681
    682static 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
    699static 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
    710DEFINE_DEBUGFS_ATTRIBUTE(rpa_timeout_fops, rpa_timeout_get,
    711			  rpa_timeout_set, "%llu\n");
    712
    713static 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
    724DEFINE_SHOW_ATTRIBUTE(random_address);
    725
    726static 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
    737DEFINE_SHOW_ATTRIBUTE(static_address);
    738
    739static 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
    752static 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
    775static 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
    782static 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
    795DEFINE_SHOW_ATTRIBUTE(white_list);
    796
    797static 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
    810DEFINE_SHOW_ATTRIBUTE(resolv_list);
    811
    812static 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
    828DEFINE_SHOW_ATTRIBUTE(identity_resolving_keys);
    829
    830static 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
    846DEFINE_SHOW_ATTRIBUTE(long_term_keys);
    847
    848static 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
    862static 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
    873DEFINE_DEBUGFS_ATTRIBUTE(conn_min_interval_fops, conn_min_interval_get,
    874			  conn_min_interval_set, "%llu\n");
    875
    876static 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
    890static 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
    901DEFINE_DEBUGFS_ATTRIBUTE(conn_max_interval_fops, conn_max_interval_get,
    902			  conn_max_interval_set, "%llu\n");
    903
    904static 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
    918static 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
    929DEFINE_DEBUGFS_ATTRIBUTE(conn_latency_fops, conn_latency_get,
    930			  conn_latency_set, "%llu\n");
    931
    932static 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
    946static 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
    957DEFINE_DEBUGFS_ATTRIBUTE(supervision_timeout_fops, supervision_timeout_get,
    958			  supervision_timeout_set, "%llu\n");
    959
    960static 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
    974static 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
    985DEFINE_DEBUGFS_ATTRIBUTE(adv_channel_map_fops, adv_channel_map_get,
    986			  adv_channel_map_set, "%llu\n");
    987
    988static 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
   1002static 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
   1013DEFINE_DEBUGFS_ATTRIBUTE(adv_min_interval_fops, adv_min_interval_get,
   1014			  adv_min_interval_set, "%llu\n");
   1015
   1016static 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
   1030static 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
   1041DEFINE_DEBUGFS_ATTRIBUTE(adv_max_interval_fops, adv_max_interval_get,
   1042			  adv_max_interval_set, "%llu\n");
   1043
   1044static 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
   1058static 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
   1069DEFINE_DEBUGFS_ATTRIBUTE(min_key_size_fops, min_key_size_get,
   1070			  min_key_size_set, "%llu\n");
   1071
   1072static 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
   1086static 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
   1097DEFINE_DEBUGFS_ATTRIBUTE(max_key_size_fops, max_key_size_get,
   1098			  max_key_size_set, "%llu\n");
   1099
   1100static 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
   1114static 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
   1125DEFINE_DEBUGFS_ATTRIBUTE(auth_payload_timeout_fops,
   1126			  auth_payload_timeout_get,
   1127			  auth_payload_timeout_set, "%llu\n");
   1128
   1129static 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
   1142static 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
   1166static 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
   1173DEFINE_QUIRK_ATTRIBUTE(quirk_strict_duplicate_filter,
   1174		       HCI_QUIRK_STRICT_DUPLICATE_FILTER);
   1175DEFINE_QUIRK_ATTRIBUTE(quirk_simultaneous_discovery,
   1176		       HCI_QUIRK_SIMULTANEOUS_DISCOVERY);
   1177
   1178void 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
   1243void 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))
   1249		return;
   1250
   1251	snprintf(name, sizeof(name), "%u", conn->handle);
   1252	conn->debugfs = debugfs_create_dir(name, hdev->debugfs);
   1253}
   1254
   1255static 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
   1267static 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
   1304static 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
   1311static 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
   1323static 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
   1351done:
   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
   1360static 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
   1367void 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}