1/*
2   BlueZ - Bluetooth protocol stack for Linux
3   Copyright (C) 2000-2001 Qualcomm Incorporated
4   Copyright (C) 2011 ProFUSION Embedded Systems
5
6   Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
7
8   This program is free software; you can redistribute it and/or modify
9   it under the terms of the GNU General Public License version 2 as
10   published by the Free Software Foundation;
11
12   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
13   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
15   IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
16   CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
17   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
18   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
19   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
20
21   ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
22   COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
23   SOFTWARE IS DISCLAIMED.
24*/
25
26/* Bluetooth HCI core. */
27
28#include <linux/export.h>
29#include <linux/rfkill.h>
30#include <linux/debugfs.h>
31#include <linux/crypto.h>
32#include <linux/kcov.h>
33#include <linux/property.h>
34#include <linux/suspend.h>
35#include <linux/wait.h>
36#include <asm/unaligned.h>
37
38#include <net/bluetooth/bluetooth.h>
39#include <net/bluetooth/hci_core.h>
40#include <net/bluetooth/l2cap.h>
41#include <net/bluetooth/mgmt.h>
42
43#include "hci_request.h"
44#include "hci_debugfs.h"
45#include "smp.h"
46#include "leds.h"
47#include "msft.h"
48#include "aosp.h"
49#include "hci_codec.h"
50
51static void hci_rx_work(struct work_struct *work);
52static void hci_cmd_work(struct work_struct *work);
53static void hci_tx_work(struct work_struct *work);
54
55/* HCI device list */
56LIST_HEAD(hci_dev_list);
57DEFINE_RWLOCK(hci_dev_list_lock);
58
59/* HCI callback list */
60LIST_HEAD(hci_cb_list);
61DEFINE_MUTEX(hci_cb_list_lock);
62
63/* HCI ID Numbering */
64static DEFINE_IDA(hci_index_ida);
65
66static int hci_scan_req(struct hci_request *req, unsigned long opt)
67{
68	__u8 scan = opt;
69
70	BT_DBG("%s %x", req->hdev->name, scan);
71
72	/* Inquiry and Page scans */
73	hci_req_add(req, HCI_OP_WRITE_SCAN_ENABLE, 1, &scan);
74	return 0;
75}
76
77static int hci_auth_req(struct hci_request *req, unsigned long opt)
78{
79	__u8 auth = opt;
80
81	BT_DBG("%s %x", req->hdev->name, auth);
82
83	/* Authentication */
84	hci_req_add(req, HCI_OP_WRITE_AUTH_ENABLE, 1, &auth);
85	return 0;
86}
87
88static int hci_encrypt_req(struct hci_request *req, unsigned long opt)
89{
90	__u8 encrypt = opt;
91
92	BT_DBG("%s %x", req->hdev->name, encrypt);
93
94	/* Encryption */
95	hci_req_add(req, HCI_OP_WRITE_ENCRYPT_MODE, 1, &encrypt);
96	return 0;
97}
98
99static int hci_linkpol_req(struct hci_request *req, unsigned long opt)
100{
101	__le16 policy = cpu_to_le16(opt);
102
103	BT_DBG("%s %x", req->hdev->name, policy);
104
105	/* Default link policy */
106	hci_req_add(req, HCI_OP_WRITE_DEF_LINK_POLICY, 2, &policy);
107	return 0;
108}
109
110/* Get HCI device by index.
111 * Device is held on return. */
112struct hci_dev *hci_dev_get(int index)
113{
114	struct hci_dev *hdev = NULL, *d;
115
116	BT_DBG("%d", index);
117
118	if (index < 0)
119		return NULL;
120
121	read_lock(&hci_dev_list_lock);
122	list_for_each_entry(d, &hci_dev_list, list) {
123		if (d->id == index) {
124			hdev = hci_dev_hold(d);
125			break;
126		}
127	}
128	read_unlock(&hci_dev_list_lock);
129	return hdev;
130}
131
132/* ---- Inquiry support ---- */
133
134bool hci_discovery_active(struct hci_dev *hdev)
135{
136	struct discovery_state *discov = &hdev->discovery;
137
138	switch (discov->state) {
139	case DISCOVERY_FINDING:
140	case DISCOVERY_RESOLVING:
141		return true;
142
143	default:
144		return false;
145	}
146}
147
148void hci_discovery_set_state(struct hci_dev *hdev, int state)
149{
150	int old_state = hdev->discovery.state;
151
152	BT_DBG("%s state %u -> %u", hdev->name, hdev->discovery.state, state);
153
154	if (old_state == state)
155		return;
156
157	hdev->discovery.state = state;
158
159	switch (state) {
160	case DISCOVERY_STOPPED:
161		hci_update_passive_scan(hdev);
162
163		if (old_state != DISCOVERY_STARTING)
164			mgmt_discovering(hdev, 0);
165		break;
166	case DISCOVERY_STARTING:
167		break;
168	case DISCOVERY_FINDING:
169		mgmt_discovering(hdev, 1);
170		break;
171	case DISCOVERY_RESOLVING:
172		break;
173	case DISCOVERY_STOPPING:
174		break;
175	}
176}
177
178void hci_inquiry_cache_flush(struct hci_dev *hdev)
179{
180	struct discovery_state *cache = &hdev->discovery;
181	struct inquiry_entry *p, *n;
182
183	list_for_each_entry_safe(p, n, &cache->all, all) {
184		list_del(&p->all);
185		kfree(p);
186	}
187
188	INIT_LIST_HEAD(&cache->unknown);
189	INIT_LIST_HEAD(&cache->resolve);
190}
191
192struct inquiry_entry *hci_inquiry_cache_lookup(struct hci_dev *hdev,
193					       bdaddr_t *bdaddr)
194{
195	struct discovery_state *cache = &hdev->discovery;
196	struct inquiry_entry *e;
197
198	BT_DBG("cache %p, %pMR", cache, bdaddr);
199
200	list_for_each_entry(e, &cache->all, all) {
201		if (!bacmp(&e->data.bdaddr, bdaddr))
202			return e;
203	}
204
205	return NULL;
206}
207
208struct inquiry_entry *hci_inquiry_cache_lookup_unknown(struct hci_dev *hdev,
209						       bdaddr_t *bdaddr)
210{
211	struct discovery_state *cache = &hdev->discovery;
212	struct inquiry_entry *e;
213
214	BT_DBG("cache %p, %pMR", cache, bdaddr);
215
216	list_for_each_entry(e, &cache->unknown, list) {
217		if (!bacmp(&e->data.bdaddr, bdaddr))
218			return e;
219	}
220
221	return NULL;
222}
223
224struct inquiry_entry *hci_inquiry_cache_lookup_resolve(struct hci_dev *hdev,
225						       bdaddr_t *bdaddr,
226						       int state)
227{
228	struct discovery_state *cache = &hdev->discovery;
229	struct inquiry_entry *e;
230
231	BT_DBG("cache %p bdaddr %pMR state %d", cache, bdaddr, state);
232
233	list_for_each_entry(e, &cache->resolve, list) {
234		if (!bacmp(bdaddr, BDADDR_ANY) && e->name_state == state)
235			return e;
236		if (!bacmp(&e->data.bdaddr, bdaddr))
237			return e;
238	}
239
240	return NULL;
241}
242
243void hci_inquiry_cache_update_resolve(struct hci_dev *hdev,
244				      struct inquiry_entry *ie)
245{
246	struct discovery_state *cache = &hdev->discovery;
247	struct list_head *pos = &cache->resolve;
248	struct inquiry_entry *p;
249
250	list_del(&ie->list);
251
252	list_for_each_entry(p, &cache->resolve, list) {
253		if (p->name_state != NAME_PENDING &&
254		    abs(p->data.rssi) >= abs(ie->data.rssi))
255			break;
256		pos = &p->list;
257	}
258
259	list_add(&ie->list, pos);
260}
261
262u32 hci_inquiry_cache_update(struct hci_dev *hdev, struct inquiry_data *data,
263			     bool name_known)
264{
265	struct discovery_state *cache = &hdev->discovery;
266	struct inquiry_entry *ie;
267	u32 flags = 0;
268
269	BT_DBG("cache %p, %pMR", cache, &data->bdaddr);
270
271	hci_remove_remote_oob_data(hdev, &data->bdaddr, BDADDR_BREDR);
272
273	if (!data->ssp_mode)
274		flags |= MGMT_DEV_FOUND_LEGACY_PAIRING;
275
276	ie = hci_inquiry_cache_lookup(hdev, &data->bdaddr);
277	if (ie) {
278		if (!ie->data.ssp_mode)
279			flags |= MGMT_DEV_FOUND_LEGACY_PAIRING;
280
281		if (ie->name_state == NAME_NEEDED &&
282		    data->rssi != ie->data.rssi) {
283			ie->data.rssi = data->rssi;
284			hci_inquiry_cache_update_resolve(hdev, ie);
285		}
286
287		goto update;
288	}
289
290	/* Entry not in the cache. Add new one. */
291	ie = kzalloc(sizeof(*ie), GFP_KERNEL);
292	if (!ie) {
293		flags |= MGMT_DEV_FOUND_CONFIRM_NAME;
294		goto done;
295	}
296
297	list_add(&ie->all, &cache->all);
298
299	if (name_known) {
300		ie->name_state = NAME_KNOWN;
301	} else {
302		ie->name_state = NAME_NOT_KNOWN;
303		list_add(&ie->list, &cache->unknown);
304	}
305
306update:
307	if (name_known && ie->name_state != NAME_KNOWN &&
308	    ie->name_state != NAME_PENDING) {
309		ie->name_state = NAME_KNOWN;
310		list_del(&ie->list);
311	}
312
313	memcpy(&ie->data, data, sizeof(*data));
314	ie->timestamp = jiffies;
315	cache->timestamp = jiffies;
316
317	if (ie->name_state == NAME_NOT_KNOWN)
318		flags |= MGMT_DEV_FOUND_CONFIRM_NAME;
319
320done:
321	return flags;
322}
323
324static int inquiry_cache_dump(struct hci_dev *hdev, int num, __u8 *buf)
325{
326	struct discovery_state *cache = &hdev->discovery;
327	struct inquiry_info *info = (struct inquiry_info *) buf;
328	struct inquiry_entry *e;
329	int copied = 0;
330
331	list_for_each_entry(e, &cache->all, all) {
332		struct inquiry_data *data = &e->data;
333
334		if (copied >= num)
335			break;
336
337		bacpy(&info->bdaddr, &data->bdaddr);
338		info->pscan_rep_mode	= data->pscan_rep_mode;
339		info->pscan_period_mode	= data->pscan_period_mode;
340		info->pscan_mode	= data->pscan_mode;
341		memcpy(info->dev_class, data->dev_class, 3);
342		info->clock_offset	= data->clock_offset;
343
344		info++;
345		copied++;
346	}
347
348	BT_DBG("cache %p, copied %d", cache, copied);
349	return copied;
350}
351
352static int hci_inq_req(struct hci_request *req, unsigned long opt)
353{
354	struct hci_inquiry_req *ir = (struct hci_inquiry_req *) opt;
355	struct hci_dev *hdev = req->hdev;
356	struct hci_cp_inquiry cp;
357
358	BT_DBG("%s", hdev->name);
359
360	if (test_bit(HCI_INQUIRY, &hdev->flags))
361		return 0;
362
363	/* Start Inquiry */
364	memcpy(&cp.lap, &ir->lap, 3);
365	cp.length  = ir->length;
366	cp.num_rsp = ir->num_rsp;
367	hci_req_add(req, HCI_OP_INQUIRY, sizeof(cp), &cp);
368
369	return 0;
370}
371
372int hci_inquiry(void __user *arg)
373{
374	__u8 __user *ptr = arg;
375	struct hci_inquiry_req ir;
376	struct hci_dev *hdev;
377	int err = 0, do_inquiry = 0, max_rsp;
378	long timeo;
379	__u8 *buf;
380
381	if (copy_from_user(&ir, ptr, sizeof(ir)))
382		return -EFAULT;
383
384	hdev = hci_dev_get(ir.dev_id);
385	if (!hdev)
386		return -ENODEV;
387
388	if (hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) {
389		err = -EBUSY;
390		goto done;
391	}
392
393	if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) {
394		err = -EOPNOTSUPP;
395		goto done;
396	}
397
398	if (hdev->dev_type != HCI_PRIMARY) {
399		err = -EOPNOTSUPP;
400		goto done;
401	}
402
403	if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) {
404		err = -EOPNOTSUPP;
405		goto done;
406	}
407
408	/* Restrict maximum inquiry length to 60 seconds */
409	if (ir.length > 60) {
410		err = -EINVAL;
411		goto done;
412	}
413
414	hci_dev_lock(hdev);
415	if (inquiry_cache_age(hdev) > INQUIRY_CACHE_AGE_MAX ||
416	    inquiry_cache_empty(hdev) || ir.flags & IREQ_CACHE_FLUSH) {
417		hci_inquiry_cache_flush(hdev);
418		do_inquiry = 1;
419	}
420	hci_dev_unlock(hdev);
421
422	timeo = ir.length * msecs_to_jiffies(2000);
423
424	if (do_inquiry) {
425		err = hci_req_sync(hdev, hci_inq_req, (unsigned long) &ir,
426				   timeo, NULL);
427		if (err < 0)
428			goto done;
429
430		/* Wait until Inquiry procedure finishes (HCI_INQUIRY flag is
431		 * cleared). If it is interrupted by a signal, return -EINTR.
432		 */
433		if (wait_on_bit(&hdev->flags, HCI_INQUIRY,
434				TASK_INTERRUPTIBLE)) {
435			err = -EINTR;
436			goto done;
437		}
438	}
439
440	/* for unlimited number of responses we will use buffer with
441	 * 255 entries
442	 */
443	max_rsp = (ir.num_rsp == 0) ? 255 : ir.num_rsp;
444
445	/* cache_dump can't sleep. Therefore we allocate temp buffer and then
446	 * copy it to the user space.
447	 */
448	buf = kmalloc_array(max_rsp, sizeof(struct inquiry_info), GFP_KERNEL);
449	if (!buf) {
450		err = -ENOMEM;
451		goto done;
452	}
453
454	hci_dev_lock(hdev);
455	ir.num_rsp = inquiry_cache_dump(hdev, max_rsp, buf);
456	hci_dev_unlock(hdev);
457
458	BT_DBG("num_rsp %d", ir.num_rsp);
459
460	if (!copy_to_user(ptr, &ir, sizeof(ir))) {
461		ptr += sizeof(ir);
462		if (copy_to_user(ptr, buf, sizeof(struct inquiry_info) *
463				 ir.num_rsp))
464			err = -EFAULT;
465	} else
466		err = -EFAULT;
467
468	kfree(buf);
469
470done:
471	hci_dev_put(hdev);
472	return err;
473}
474
475static int hci_dev_do_open(struct hci_dev *hdev)
476{
477	int ret = 0;
478
479	BT_DBG("%s %p", hdev->name, hdev);
480
481	hci_req_sync_lock(hdev);
482
483	ret = hci_dev_open_sync(hdev);
484
485	hci_req_sync_unlock(hdev);
486	return ret;
487}
488
489/* ---- HCI ioctl helpers ---- */
490
491int hci_dev_open(__u16 dev)
492{
493	struct hci_dev *hdev;
494	int err;
495
496	hdev = hci_dev_get(dev);
497	if (!hdev)
498		return -ENODEV;
499
500	/* Devices that are marked as unconfigured can only be powered
501	 * up as user channel. Trying to bring them up as normal devices
502	 * will result into a failure. Only user channel operation is
503	 * possible.
504	 *
505	 * When this function is called for a user channel, the flag
506	 * HCI_USER_CHANNEL will be set first before attempting to
507	 * open the device.
508	 */
509	if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED) &&
510	    !hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) {
511		err = -EOPNOTSUPP;
512		goto done;
513	}
514
515	/* We need to ensure that no other power on/off work is pending
516	 * before proceeding to call hci_dev_do_open. This is
517	 * particularly important if the setup procedure has not yet
518	 * completed.
519	 */
520	if (hci_dev_test_and_clear_flag(hdev, HCI_AUTO_OFF))
521		cancel_delayed_work(&hdev->power_off);
522
523	/* After this call it is guaranteed that the setup procedure
524	 * has finished. This means that error conditions like RFKILL
525	 * or no valid public or static random address apply.
526	 */
527	flush_workqueue(hdev->req_workqueue);
528
529	/* For controllers not using the management interface and that
530	 * are brought up using legacy ioctl, set the HCI_BONDABLE bit
531	 * so that pairing works for them. Once the management interface
532	 * is in use this bit will be cleared again and userspace has
533	 * to explicitly enable it.
534	 */
535	if (!hci_dev_test_flag(hdev, HCI_USER_CHANNEL) &&
536	    !hci_dev_test_flag(hdev, HCI_MGMT))
537		hci_dev_set_flag(hdev, HCI_BONDABLE);
538
539	err = hci_dev_do_open(hdev);
540
541done:
542	hci_dev_put(hdev);
543	return err;
544}
545
546int hci_dev_do_close(struct hci_dev *hdev)
547{
548	int err;
549
550	BT_DBG("%s %p", hdev->name, hdev);
551
552	hci_req_sync_lock(hdev);
553
554	err = hci_dev_close_sync(hdev);
555
556	hci_req_sync_unlock(hdev);
557
558	return err;
559}
560
561int hci_dev_close(__u16 dev)
562{
563	struct hci_dev *hdev;
564	int err;
565
566	hdev = hci_dev_get(dev);
567	if (!hdev)
568		return -ENODEV;
569
570	if (hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) {
571		err = -EBUSY;
572		goto done;
573	}
574
575	cancel_work_sync(&hdev->power_on);
576	if (hci_dev_test_and_clear_flag(hdev, HCI_AUTO_OFF))
577		cancel_delayed_work(&hdev->power_off);
578
579	err = hci_dev_do_close(hdev);
580
581done:
582	hci_dev_put(hdev);
583	return err;
584}
585
586static int hci_dev_do_reset(struct hci_dev *hdev)
587{
588	int ret;
589
590	BT_DBG("%s %p", hdev->name, hdev);
591
592	hci_req_sync_lock(hdev);
593
594	/* Drop queues */
595	skb_queue_purge(&hdev->rx_q);
596	skb_queue_purge(&hdev->cmd_q);
597
598	/* Cancel these to avoid queueing non-chained pending work */
599	hci_dev_set_flag(hdev, HCI_CMD_DRAIN_WORKQUEUE);
600	/* Wait for
601	 *
602	 *    if (!hci_dev_test_flag(hdev, HCI_CMD_DRAIN_WORKQUEUE))
603	 *        queue_delayed_work(&hdev->{cmd,ncmd}_timer)
604	 *
605	 * inside RCU section to see the flag or complete scheduling.
606	 */
607	synchronize_rcu();
608	/* Explicitly cancel works in case scheduled after setting the flag. */
609	cancel_delayed_work(&hdev->cmd_timer);
610	cancel_delayed_work(&hdev->ncmd_timer);
611
612	/* Avoid potential lockdep warnings from the *_flush() calls by
613	 * ensuring the workqueue is empty up front.
614	 */
615	drain_workqueue(hdev->workqueue);
616
617	hci_dev_lock(hdev);
618	hci_inquiry_cache_flush(hdev);
619	hci_conn_hash_flush(hdev);
620	hci_dev_unlock(hdev);
621
622	if (hdev->flush)
623		hdev->flush(hdev);
624
625	hci_dev_clear_flag(hdev, HCI_CMD_DRAIN_WORKQUEUE);
626
627	atomic_set(&hdev->cmd_cnt, 1);
628	hdev->acl_cnt = 0;
629	hdev->sco_cnt = 0;
630	hdev->le_cnt = 0;
631	hdev->iso_cnt = 0;
632
633	ret = hci_reset_sync(hdev);
634
635	hci_req_sync_unlock(hdev);
636	return ret;
637}
638
639int hci_dev_reset(__u16 dev)
640{
641	struct hci_dev *hdev;
642	int err;
643
644	hdev = hci_dev_get(dev);
645	if (!hdev)
646		return -ENODEV;
647
648	if (!test_bit(HCI_UP, &hdev->flags)) {
649		err = -ENETDOWN;
650		goto done;
651	}
652
653	if (hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) {
654		err = -EBUSY;
655		goto done;
656	}
657
658	if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) {
659		err = -EOPNOTSUPP;
660		goto done;
661	}
662
663	err = hci_dev_do_reset(hdev);
664
665done:
666	hci_dev_put(hdev);
667	return err;
668}
669
670int hci_dev_reset_stat(__u16 dev)
671{
672	struct hci_dev *hdev;
673	int ret = 0;
674
675	hdev = hci_dev_get(dev);
676	if (!hdev)
677		return -ENODEV;
678
679	if (hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) {
680		ret = -EBUSY;
681		goto done;
682	}
683
684	if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) {
685		ret = -EOPNOTSUPP;
686		goto done;
687	}
688
689	memset(&hdev->stat, 0, sizeof(struct hci_dev_stats));
690
691done:
692	hci_dev_put(hdev);
693	return ret;
694}
695
696static void hci_update_passive_scan_state(struct hci_dev *hdev, u8 scan)
697{
698	bool conn_changed, discov_changed;
699
700	BT_DBG("%s scan 0x%02x", hdev->name, scan);
701
702	if ((scan & SCAN_PAGE))
703		conn_changed = !hci_dev_test_and_set_flag(hdev,
704							  HCI_CONNECTABLE);
705	else
706		conn_changed = hci_dev_test_and_clear_flag(hdev,
707							   HCI_CONNECTABLE);
708
709	if ((scan & SCAN_INQUIRY)) {
710		discov_changed = !hci_dev_test_and_set_flag(hdev,
711							    HCI_DISCOVERABLE);
712	} else {
713		hci_dev_clear_flag(hdev, HCI_LIMITED_DISCOVERABLE);
714		discov_changed = hci_dev_test_and_clear_flag(hdev,
715							     HCI_DISCOVERABLE);
716	}
717
718	if (!hci_dev_test_flag(hdev, HCI_MGMT))
719		return;
720
721	if (conn_changed || discov_changed) {
722		/* In case this was disabled through mgmt */
723		hci_dev_set_flag(hdev, HCI_BREDR_ENABLED);
724
725		if (hci_dev_test_flag(hdev, HCI_LE_ENABLED))
726			hci_update_adv_data(hdev, hdev->cur_adv_instance);
727
728		mgmt_new_settings(hdev);
729	}
730}
731
732int hci_dev_cmd(unsigned int cmd, void __user *arg)
733{
734	struct hci_dev *hdev;
735	struct hci_dev_req dr;
736	int err = 0;
737
738	if (copy_from_user(&dr, arg, sizeof(dr)))
739		return -EFAULT;
740
741	hdev = hci_dev_get(dr.dev_id);
742	if (!hdev)
743		return -ENODEV;
744
745	if (hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) {
746		err = -EBUSY;
747		goto done;
748	}
749
750	if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) {
751		err = -EOPNOTSUPP;
752		goto done;
753	}
754
755	if (hdev->dev_type != HCI_PRIMARY) {
756		err = -EOPNOTSUPP;
757		goto done;
758	}
759
760	if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) {
761		err = -EOPNOTSUPP;
762		goto done;
763	}
764
765	switch (cmd) {
766	case HCISETAUTH:
767		err = hci_req_sync(hdev, hci_auth_req, dr.dev_opt,
768				   HCI_INIT_TIMEOUT, NULL);
769		break;
770
771	case HCISETENCRYPT:
772		if (!lmp_encrypt_capable(hdev)) {
773			err = -EOPNOTSUPP;
774			break;
775		}
776
777		if (!test_bit(HCI_AUTH, &hdev->flags)) {
778			/* Auth must be enabled first */
779			err = hci_req_sync(hdev, hci_auth_req, dr.dev_opt,
780					   HCI_INIT_TIMEOUT, NULL);
781			if (err)
782				break;
783		}
784
785		err = hci_req_sync(hdev, hci_encrypt_req, dr.dev_opt,
786				   HCI_INIT_TIMEOUT, NULL);
787		break;
788
789	case HCISETSCAN:
790		err = hci_req_sync(hdev, hci_scan_req, dr.dev_opt,
791				   HCI_INIT_TIMEOUT, NULL);
792
793		/* Ensure that the connectable and discoverable states
794		 * get correctly modified as this was a non-mgmt change.
795		 */
796		if (!err)
797			hci_update_passive_scan_state(hdev, dr.dev_opt);
798		break;
799
800	case HCISETLINKPOL:
801		err = hci_req_sync(hdev, hci_linkpol_req, dr.dev_opt,
802				   HCI_INIT_TIMEOUT, NULL);
803		break;
804
805	case HCISETLINKMODE:
806		hdev->link_mode = ((__u16) dr.dev_opt) &
807					(HCI_LM_MASTER | HCI_LM_ACCEPT);
808		break;
809
810	case HCISETPTYPE:
811		if (hdev->pkt_type == (__u16) dr.dev_opt)
812			break;
813
814		hdev->pkt_type = (__u16) dr.dev_opt;
815		mgmt_phy_configuration_changed(hdev, NULL);
816		break;
817
818	case HCISETACLMTU:
819		hdev->acl_mtu  = *((__u16 *) &dr.dev_opt + 1);
820		hdev->acl_pkts = *((__u16 *) &dr.dev_opt + 0);
821		break;
822
823	case HCISETSCOMTU:
824		hdev->sco_mtu  = *((__u16 *) &dr.dev_opt + 1);
825		hdev->sco_pkts = *((__u16 *) &dr.dev_opt + 0);
826		break;
827
828	default:
829		err = -EINVAL;
830		break;
831	}
832
833done:
834	hci_dev_put(hdev);
835	return err;
836}
837
838int hci_get_dev_list(void __user *arg)
839{
840	struct hci_dev *hdev;
841	struct hci_dev_list_req *dl;
842	struct hci_dev_req *dr;
843	int n = 0, size, err;
844	__u16 dev_num;
845
846	if (get_user(dev_num, (__u16 __user *) arg))
847		return -EFAULT;
848
849	if (!dev_num || dev_num > (PAGE_SIZE * 2) / sizeof(*dr))
850		return -EINVAL;
851
852	size = sizeof(*dl) + dev_num * sizeof(*dr);
853
854	dl = kzalloc(size, GFP_KERNEL);
855	if (!dl)
856		return -ENOMEM;
857
858	dr = dl->dev_req;
859
860	read_lock(&hci_dev_list_lock);
861	list_for_each_entry(hdev, &hci_dev_list, list) {
862		unsigned long flags = hdev->flags;
863
864		/* When the auto-off is configured it means the transport
865		 * is running, but in that case still indicate that the
866		 * device is actually down.
867		 */
868		if (hci_dev_test_flag(hdev, HCI_AUTO_OFF))
869			flags &= ~BIT(HCI_UP);
870
871		(dr + n)->dev_id  = hdev->id;
872		(dr + n)->dev_opt = flags;
873
874		if (++n >= dev_num)
875			break;
876	}
877	read_unlock(&hci_dev_list_lock);
878
879	dl->dev_num = n;
880	size = sizeof(*dl) + n * sizeof(*dr);
881
882	err = copy_to_user(arg, dl, size);
883	kfree(dl);
884
885	return err ? -EFAULT : 0;
886}
887
888int hci_get_dev_info(void __user *arg)
889{
890	struct hci_dev *hdev;
891	struct hci_dev_info di;
892	unsigned long flags;
893	int err = 0;
894
895	if (copy_from_user(&di, arg, sizeof(di)))
896		return -EFAULT;
897
898	hdev = hci_dev_get(di.dev_id);
899	if (!hdev)
900		return -ENODEV;
901
902	/* When the auto-off is configured it means the transport
903	 * is running, but in that case still indicate that the
904	 * device is actually down.
905	 */
906	if (hci_dev_test_flag(hdev, HCI_AUTO_OFF))
907		flags = hdev->flags & ~BIT(HCI_UP);
908	else
909		flags = hdev->flags;
910
911	strscpy(di.name, hdev->name, sizeof(di.name));
912	di.bdaddr   = hdev->bdaddr;
913	di.type     = (hdev->bus & 0x0f) | ((hdev->dev_type & 0x03) << 4);
914	di.flags    = flags;
915	di.pkt_type = hdev->pkt_type;
916	if (lmp_bredr_capable(hdev)) {
917		di.acl_mtu  = hdev->acl_mtu;
918		di.acl_pkts = hdev->acl_pkts;
919		di.sco_mtu  = hdev->sco_mtu;
920		di.sco_pkts = hdev->sco_pkts;
921	} else {
922		di.acl_mtu  = hdev->le_mtu;
923		di.acl_pkts = hdev->le_pkts;
924		di.sco_mtu  = 0;
925		di.sco_pkts = 0;
926	}
927	di.link_policy = hdev->link_policy;
928	di.link_mode   = hdev->link_mode;
929
930	memcpy(&di.stat, &hdev->stat, sizeof(di.stat));
931	memcpy(&di.features, &hdev->features, sizeof(di.features));
932
933	if (copy_to_user(arg, &di, sizeof(di)))
934		err = -EFAULT;
935
936	hci_dev_put(hdev);
937
938	return err;
939}
940
941/* ---- Interface to HCI drivers ---- */
942
943static int hci_rfkill_set_block(void *data, bool blocked)
944{
945	struct hci_dev *hdev = data;
946
947	BT_DBG("%p name %s blocked %d", hdev, hdev->name, blocked);
948
949	if (hci_dev_test_flag(hdev, HCI_USER_CHANNEL))
950		return -EBUSY;
951
952	if (blocked) {
953		hci_dev_set_flag(hdev, HCI_RFKILLED);
954		if (!hci_dev_test_flag(hdev, HCI_SETUP) &&
955		    !hci_dev_test_flag(hdev, HCI_CONFIG))
956			hci_dev_do_close(hdev);
957	} else {
958		hci_dev_clear_flag(hdev, HCI_RFKILLED);
959	}
960
961	return 0;
962}
963
964static const struct rfkill_ops hci_rfkill_ops = {
965	.set_block = hci_rfkill_set_block,
966};
967
968static void hci_power_on(struct work_struct *work)
969{
970	struct hci_dev *hdev = container_of(work, struct hci_dev, power_on);
971	int err;
972
973	BT_DBG("%s", hdev->name);
974
975	if (test_bit(HCI_UP, &hdev->flags) &&
976	    hci_dev_test_flag(hdev, HCI_MGMT) &&
977	    hci_dev_test_and_clear_flag(hdev, HCI_AUTO_OFF)) {
978		cancel_delayed_work(&hdev->power_off);
979		err = hci_powered_update_sync(hdev);
980		mgmt_power_on(hdev, err);
981		return;
982	}
983
984	err = hci_dev_do_open(hdev);
985	if (err < 0) {
986		hci_dev_lock(hdev);
987		mgmt_set_powered_failed(hdev, err);
988		hci_dev_unlock(hdev);
989		return;
990	}
991
992	/* During the HCI setup phase, a few error conditions are
993	 * ignored and they need to be checked now. If they are still
994	 * valid, it is important to turn the device back off.
995	 */
996	if (hci_dev_test_flag(hdev, HCI_RFKILLED) ||
997	    hci_dev_test_flag(hdev, HCI_UNCONFIGURED) ||
998	    (hdev->dev_type == HCI_PRIMARY &&
999	     !bacmp(&hdev->bdaddr, BDADDR_ANY) &&
1000	     !bacmp(&hdev->static_addr, BDADDR_ANY))) {
1001		hci_dev_clear_flag(hdev, HCI_AUTO_OFF);
1002		hci_dev_do_close(hdev);
1003	} else if (hci_dev_test_flag(hdev, HCI_AUTO_OFF)) {
1004		queue_delayed_work(hdev->req_workqueue, &hdev->power_off,
1005				   HCI_AUTO_OFF_TIMEOUT);
1006	}
1007
1008	if (hci_dev_test_and_clear_flag(hdev, HCI_SETUP)) {
1009		/* For unconfigured devices, set the HCI_RAW flag
1010		 * so that userspace can easily identify them.
1011		 */
1012		if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED))
1013			set_bit(HCI_RAW, &hdev->flags);
1014
1015		/* For fully configured devices, this will send
1016		 * the Index Added event. For unconfigured devices,
1017		 * it will send Unconfigued Index Added event.
1018		 *
1019		 * Devices with HCI_QUIRK_RAW_DEVICE are ignored
1020		 * and no event will be send.
1021		 */
1022		mgmt_index_added(hdev);
1023	} else if (hci_dev_test_and_clear_flag(hdev, HCI_CONFIG)) {
1024		/* When the controller is now configured, then it
1025		 * is important to clear the HCI_RAW flag.
1026		 */
1027		if (!hci_dev_test_flag(hdev, HCI_UNCONFIGURED))
1028			clear_bit(HCI_RAW, &hdev->flags);
1029
1030		/* Powering on the controller with HCI_CONFIG set only
1031		 * happens with the transition from unconfigured to
1032		 * configured. This will send the Index Added event.
1033		 */
1034		mgmt_index_added(hdev);
1035	}
1036}
1037
1038static void hci_power_off(struct work_struct *work)
1039{
1040	struct hci_dev *hdev = container_of(work, struct hci_dev,
1041					    power_off.work);
1042
1043	BT_DBG("%s", hdev->name);
1044
1045	hci_dev_do_close(hdev);
1046}
1047
1048static void hci_error_reset(struct work_struct *work)
1049{
1050	struct hci_dev *hdev = container_of(work, struct hci_dev, error_reset);
1051
1052	hci_dev_hold(hdev);
1053	BT_DBG("%s", hdev->name);
1054
1055	if (hdev->hw_error)
1056		hdev->hw_error(hdev, hdev->hw_error_code);
1057	else
1058		bt_dev_err(hdev, "hardware error 0x%2.2x", hdev->hw_error_code);
1059
1060	if (!hci_dev_do_close(hdev))
1061		hci_dev_do_open(hdev);
1062
1063	hci_dev_put(hdev);
1064}
1065
1066void hci_uuids_clear(struct hci_dev *hdev)
1067{
1068	struct bt_uuid *uuid, *tmp;
1069
1070	list_for_each_entry_safe(uuid, tmp, &hdev->uuids, list) {
1071		list_del(&uuid->list);
1072		kfree(uuid);
1073	}
1074}
1075
1076void hci_link_keys_clear(struct hci_dev *hdev)
1077{
1078	struct link_key *key, *tmp;
1079
1080	list_for_each_entry_safe(key, tmp, &hdev->link_keys, list) {
1081		list_del_rcu(&key->list);
1082		kfree_rcu(key, rcu);
1083	}
1084}
1085
1086void hci_smp_ltks_clear(struct hci_dev *hdev)
1087{
1088	struct smp_ltk *k, *tmp;
1089
1090	list_for_each_entry_safe(k, tmp, &hdev->long_term_keys, list) {
1091		list_del_rcu(&k->list);
1092		kfree_rcu(k, rcu);
1093	}
1094}
1095
1096void hci_smp_irks_clear(struct hci_dev *hdev)
1097{
1098	struct smp_irk *k, *tmp;
1099
1100	list_for_each_entry_safe(k, tmp, &hdev->identity_resolving_keys, list) {
1101		list_del_rcu(&k->list);
1102		kfree_rcu(k, rcu);
1103	}
1104}
1105
1106void hci_blocked_keys_clear(struct hci_dev *hdev)
1107{
1108	struct blocked_key *b, *tmp;
1109
1110	list_for_each_entry_safe(b, tmp, &hdev->blocked_keys, list) {
1111		list_del_rcu(&b->list);
1112		kfree_rcu(b, rcu);
1113	}
1114}
1115
1116bool hci_is_blocked_key(struct hci_dev *hdev, u8 type, u8 val[16])
1117{
1118	bool blocked = false;
1119	struct blocked_key *b;
1120
1121	rcu_read_lock();
1122	list_for_each_entry_rcu(b, &hdev->blocked_keys, list) {
1123		if (b->type == type && !memcmp(b->val, val, sizeof(b->val))) {
1124			blocked = true;
1125			break;
1126		}
1127	}
1128
1129	rcu_read_unlock();
1130	return blocked;
1131}
1132
1133struct link_key *hci_find_link_key(struct hci_dev *hdev, bdaddr_t *bdaddr)
1134{
1135	struct link_key *k;
1136
1137	rcu_read_lock();
1138	list_for_each_entry_rcu(k, &hdev->link_keys, list) {
1139		if (bacmp(bdaddr, &k->bdaddr) == 0) {
1140			rcu_read_unlock();
1141
1142			if (hci_is_blocked_key(hdev,
1143					       HCI_BLOCKED_KEY_TYPE_LINKKEY,
1144					       k->val)) {
1145				bt_dev_warn_ratelimited(hdev,
1146							"Link key blocked for %pMR",
1147							&k->bdaddr);
1148				return NULL;
1149			}
1150
1151			return k;
1152		}
1153	}
1154	rcu_read_unlock();
1155
1156	return NULL;
1157}
1158
1159static bool hci_persistent_key(struct hci_dev *hdev, struct hci_conn *conn,
1160			       u8 key_type, u8 old_key_type)
1161{
1162	/* Legacy key */
1163	if (key_type < 0x03)
1164		return true;
1165
1166	/* Debug keys are insecure so don't store them persistently */
1167	if (key_type == HCI_LK_DEBUG_COMBINATION)
1168		return false;
1169
1170	/* Changed combination key and there's no previous one */
1171	if (key_type == HCI_LK_CHANGED_COMBINATION && old_key_type == 0xff)
1172		return false;
1173
1174	/* Security mode 3 case */
1175	if (!conn)
1176		return true;
1177
1178	/* BR/EDR key derived using SC from an LE link */
1179	if (conn->type == LE_LINK)
1180		return true;
1181
1182	/* Neither local nor remote side had no-bonding as requirement */
1183	if (conn->auth_type > 0x01 && conn->remote_auth > 0x01)
1184		return true;
1185
1186	/* Local side had dedicated bonding as requirement */
1187	if (conn->auth_type == 0x02 || conn->auth_type == 0x03)
1188		return true;
1189
1190	/* Remote side had dedicated bonding as requirement */
1191	if (conn->remote_auth == 0x02 || conn->remote_auth == 0x03)
1192		return true;
1193
1194	/* If none of the above criteria match, then don't store the key
1195	 * persistently */
1196	return false;
1197}
1198
1199static u8 ltk_role(u8 type)
1200{
1201	if (type == SMP_LTK)
1202		return HCI_ROLE_MASTER;
1203
1204	return HCI_ROLE_SLAVE;
1205}
1206
1207struct smp_ltk *hci_find_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr,
1208			     u8 addr_type, u8 role)
1209{
1210	struct smp_ltk *k;
1211
1212	rcu_read_lock();
1213	list_for_each_entry_rcu(k, &hdev->long_term_keys, list) {
1214		if (addr_type != k->bdaddr_type || bacmp(bdaddr, &k->bdaddr))
1215			continue;
1216
1217		if (smp_ltk_is_sc(k) || ltk_role(k->type) == role) {
1218			rcu_read_unlock();
1219
1220			if (hci_is_blocked_key(hdev, HCI_BLOCKED_KEY_TYPE_LTK,
1221					       k->val)) {
1222				bt_dev_warn_ratelimited(hdev,
1223							"LTK blocked for %pMR",
1224							&k->bdaddr);
1225				return NULL;
1226			}
1227
1228			return k;
1229		}
1230	}
1231	rcu_read_unlock();
1232
1233	return NULL;
1234}
1235
1236struct smp_irk *hci_find_irk_by_rpa(struct hci_dev *hdev, bdaddr_t *rpa)
1237{
1238	struct smp_irk *irk_to_return = NULL;
1239	struct smp_irk *irk;
1240
1241	rcu_read_lock();
1242	list_for_each_entry_rcu(irk, &hdev->identity_resolving_keys, list) {
1243		if (!bacmp(&irk->rpa, rpa)) {
1244			irk_to_return = irk;
1245			goto done;
1246		}
1247	}
1248
1249	list_for_each_entry_rcu(irk, &hdev->identity_resolving_keys, list) {
1250		if (smp_irk_matches(hdev, irk->val, rpa)) {
1251			bacpy(&irk->rpa, rpa);
1252			irk_to_return = irk;
1253			goto done;
1254		}
1255	}
1256
1257done:
1258	if (irk_to_return && hci_is_blocked_key(hdev, HCI_BLOCKED_KEY_TYPE_IRK,
1259						irk_to_return->val)) {
1260		bt_dev_warn_ratelimited(hdev, "Identity key blocked for %pMR",
1261					&irk_to_return->bdaddr);
1262		irk_to_return = NULL;
1263	}
1264
1265	rcu_read_unlock();
1266
1267	return irk_to_return;
1268}
1269
1270struct smp_irk *hci_find_irk_by_addr(struct hci_dev *hdev, bdaddr_t *bdaddr,
1271				     u8 addr_type)
1272{
1273	struct smp_irk *irk_to_return = NULL;
1274	struct smp_irk *irk;
1275
1276	/* Identity Address must be public or static random */
1277	if (addr_type == ADDR_LE_DEV_RANDOM && (bdaddr->b[5] & 0xc0) != 0xc0)
1278		return NULL;
1279
1280	rcu_read_lock();
1281	list_for_each_entry_rcu(irk, &hdev->identity_resolving_keys, list) {
1282		if (addr_type == irk->addr_type &&
1283		    bacmp(bdaddr, &irk->bdaddr) == 0) {
1284			irk_to_return = irk;
1285			goto done;
1286		}
1287	}
1288
1289done:
1290
1291	if (irk_to_return && hci_is_blocked_key(hdev, HCI_BLOCKED_KEY_TYPE_IRK,
1292						irk_to_return->val)) {
1293		bt_dev_warn_ratelimited(hdev, "Identity key blocked for %pMR",
1294					&irk_to_return->bdaddr);
1295		irk_to_return = NULL;
1296	}
1297
1298	rcu_read_unlock();
1299
1300	return irk_to_return;
1301}
1302
1303struct link_key *hci_add_link_key(struct hci_dev *hdev, struct hci_conn *conn,
1304				  bdaddr_t *bdaddr, u8 *val, u8 type,
1305				  u8 pin_len, bool *persistent)
1306{
1307	struct link_key *key, *old_key;
1308	u8 old_key_type;
1309
1310	old_key = hci_find_link_key(hdev, bdaddr);
1311	if (old_key) {
1312		old_key_type = old_key->type;
1313		key = old_key;
1314	} else {
1315		old_key_type = conn ? conn->key_type : 0xff;
1316		key = kzalloc(sizeof(*key), GFP_KERNEL);
1317		if (!key)
1318			return NULL;
1319		list_add_rcu(&key->list, &hdev->link_keys);
1320	}
1321
1322	BT_DBG("%s key for %pMR type %u", hdev->name, bdaddr, type);
1323
1324	/* Some buggy controller combinations generate a changed
1325	 * combination key for legacy pairing even when there's no
1326	 * previous key */
1327	if (type == HCI_LK_CHANGED_COMBINATION &&
1328	    (!conn || conn->remote_auth == 0xff) && old_key_type == 0xff) {
1329		type = HCI_LK_COMBINATION;
1330		if (conn)
1331			conn->key_type = type;
1332	}
1333
1334	bacpy(&key->bdaddr, bdaddr);
1335	memcpy(key->val, val, HCI_LINK_KEY_SIZE);
1336	key->pin_len = pin_len;
1337
1338	if (type == HCI_LK_CHANGED_COMBINATION)
1339		key->type = old_key_type;
1340	else
1341		key->type = type;
1342
1343	if (persistent)
1344		*persistent = hci_persistent_key(hdev, conn, type,
1345						 old_key_type);
1346
1347	return key;
1348}
1349
1350struct smp_ltk *hci_add_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr,
1351			    u8 addr_type, u8 type, u8 authenticated,
1352			    u8 tk[16], u8 enc_size, __le16 ediv, __le64 rand)
1353{
1354	struct smp_ltk *key, *old_key;
1355	u8 role = ltk_role(type);
1356
1357	old_key = hci_find_ltk(hdev, bdaddr, addr_type, role);
1358	if (old_key)
1359		key = old_key;
1360	else {
1361		key = kzalloc(sizeof(*key), GFP_KERNEL);
1362		if (!key)
1363			return NULL;
1364		list_add_rcu(&key->list, &hdev->long_term_keys);
1365	}
1366
1367	bacpy(&key->bdaddr, bdaddr);
1368	key->bdaddr_type = addr_type;
1369	memcpy(key->val, tk, sizeof(key->val));
1370	key->authenticated = authenticated;
1371	key->ediv = ediv;
1372	key->rand = rand;
1373	key->enc_size = enc_size;
1374	key->type = type;
1375
1376	return key;
1377}
1378
1379struct smp_irk *hci_add_irk(struct hci_dev *hdev, bdaddr_t *bdaddr,
1380			    u8 addr_type, u8 val[16], bdaddr_t *rpa)
1381{
1382	struct smp_irk *irk;
1383
1384	irk = hci_find_irk_by_addr(hdev, bdaddr, addr_type);
1385	if (!irk) {
1386		irk = kzalloc(sizeof(*irk), GFP_KERNEL);
1387		if (!irk)
1388			return NULL;
1389
1390		bacpy(&irk->bdaddr, bdaddr);
1391		irk->addr_type = addr_type;
1392
1393		list_add_rcu(&irk->list, &hdev->identity_resolving_keys);
1394	}
1395
1396	memcpy(irk->val, val, 16);
1397	bacpy(&irk->rpa, rpa);
1398
1399	return irk;
1400}
1401
1402int hci_remove_link_key(struct hci_dev *hdev, bdaddr_t *bdaddr)
1403{
1404	struct link_key *key;
1405
1406	key = hci_find_link_key(hdev, bdaddr);
1407	if (!key)
1408		return -ENOENT;
1409
1410	BT_DBG("%s removing %pMR", hdev->name, bdaddr);
1411
1412	list_del_rcu(&key->list);
1413	kfree_rcu(key, rcu);
1414
1415	return 0;
1416}
1417
1418int hci_remove_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 bdaddr_type)
1419{
1420	struct smp_ltk *k, *tmp;
1421	int removed = 0;
1422
1423	list_for_each_entry_safe(k, tmp, &hdev->long_term_keys, list) {
1424		if (bacmp(bdaddr, &k->bdaddr) || k->bdaddr_type != bdaddr_type)
1425			continue;
1426
1427		BT_DBG("%s removing %pMR", hdev->name, bdaddr);
1428
1429		list_del_rcu(&k->list);
1430		kfree_rcu(k, rcu);
1431		removed++;
1432	}
1433
1434	return removed ? 0 : -ENOENT;
1435}
1436
1437void hci_remove_irk(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 addr_type)
1438{
1439	struct smp_irk *k, *tmp;
1440
1441	list_for_each_entry_safe(k, tmp, &hdev->identity_resolving_keys, list) {
1442		if (bacmp(bdaddr, &k->bdaddr) || k->addr_type != addr_type)
1443			continue;
1444
1445		BT_DBG("%s removing %pMR", hdev->name, bdaddr);
1446
1447		list_del_rcu(&k->list);
1448		kfree_rcu(k, rcu);
1449	}
1450}
1451
1452bool hci_bdaddr_is_paired(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type)
1453{
1454	struct smp_ltk *k;
1455	struct smp_irk *irk;
1456	u8 addr_type;
1457
1458	if (type == BDADDR_BREDR) {
1459		if (hci_find_link_key(hdev, bdaddr))
1460			return true;
1461		return false;
1462	}
1463
1464	/* Convert to HCI addr type which struct smp_ltk uses */
1465	if (type == BDADDR_LE_PUBLIC)
1466		addr_type = ADDR_LE_DEV_PUBLIC;
1467	else
1468		addr_type = ADDR_LE_DEV_RANDOM;
1469
1470	irk = hci_get_irk(hdev, bdaddr, addr_type);
1471	if (irk) {
1472		bdaddr = &irk->bdaddr;
1473		addr_type = irk->addr_type;
1474	}
1475
1476	rcu_read_lock();
1477	list_for_each_entry_rcu(k, &hdev->long_term_keys, list) {
1478		if (k->bdaddr_type == addr_type && !bacmp(bdaddr, &k->bdaddr)) {
1479			rcu_read_unlock();
1480			return true;
1481		}
1482	}
1483	rcu_read_unlock();
1484
1485	return false;
1486}
1487
1488/* HCI command timer function */
1489static void hci_cmd_timeout(struct work_struct *work)
1490{
1491	struct hci_dev *hdev = container_of(work, struct hci_dev,
1492					    cmd_timer.work);
1493
1494	if (hdev->req_skb) {
1495		u16 opcode = hci_skb_opcode(hdev->req_skb);
1496
1497		bt_dev_err(hdev, "command 0x%4.4x tx timeout", opcode);
1498
1499		hci_cmd_sync_cancel_sync(hdev, ETIMEDOUT);
1500	} else {
1501		bt_dev_err(hdev, "command tx timeout");
1502	}
1503
1504	if (hdev->cmd_timeout)
1505		hdev->cmd_timeout(hdev);
1506
1507	atomic_set(&hdev->cmd_cnt, 1);
1508	queue_work(hdev->workqueue, &hdev->cmd_work);
1509}
1510
1511/* HCI ncmd timer function */
1512static void hci_ncmd_timeout(struct work_struct *work)
1513{
1514	struct hci_dev *hdev = container_of(work, struct hci_dev,
1515					    ncmd_timer.work);
1516
1517	bt_dev_err(hdev, "Controller not accepting commands anymore: ncmd = 0");
1518
1519	/* During HCI_INIT phase no events can be injected if the ncmd timer
1520	 * triggers since the procedure has its own timeout handling.
1521	 */
1522	if (test_bit(HCI_INIT, &hdev->flags))
1523		return;
1524
1525	/* This is an irrecoverable state, inject hardware error event */
1526	hci_reset_dev(hdev);
1527}
1528
1529struct oob_data *hci_find_remote_oob_data(struct hci_dev *hdev,
1530					  bdaddr_t *bdaddr, u8 bdaddr_type)
1531{
1532	struct oob_data *data;
1533
1534	list_for_each_entry(data, &hdev->remote_oob_data, list) {
1535		if (bacmp(bdaddr, &data->bdaddr) != 0)
1536			continue;
1537		if (data->bdaddr_type != bdaddr_type)
1538			continue;
1539		return data;
1540	}
1541
1542	return NULL;
1543}
1544
1545int hci_remove_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr,
1546			       u8 bdaddr_type)
1547{
1548	struct oob_data *data;
1549
1550	data = hci_find_remote_oob_data(hdev, bdaddr, bdaddr_type);
1551	if (!data)
1552		return -ENOENT;
1553
1554	BT_DBG("%s removing %pMR (%u)", hdev->name, bdaddr, bdaddr_type);
1555
1556	list_del(&data->list);
1557	kfree(data);
1558
1559	return 0;
1560}
1561
1562void hci_remote_oob_data_clear(struct hci_dev *hdev)
1563{
1564	struct oob_data *data, *n;
1565
1566	list_for_each_entry_safe(data, n, &hdev->remote_oob_data, list) {
1567		list_del(&data->list);
1568		kfree(data);
1569	}
1570}
1571
1572int hci_add_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr,
1573			    u8 bdaddr_type, u8 *hash192, u8 *rand192,
1574			    u8 *hash256, u8 *rand256)
1575{
1576	struct oob_data *data;
1577
1578	data = hci_find_remote_oob_data(hdev, bdaddr, bdaddr_type);
1579	if (!data) {
1580		data = kmalloc(sizeof(*data), GFP_KERNEL);
1581		if (!data)
1582			return -ENOMEM;
1583
1584		bacpy(&data->bdaddr, bdaddr);
1585		data->bdaddr_type = bdaddr_type;
1586		list_add(&data->list, &hdev->remote_oob_data);
1587	}
1588
1589	if (hash192 && rand192) {
1590		memcpy(data->hash192, hash192, sizeof(data->hash192));
1591		memcpy(data->rand192, rand192, sizeof(data->rand192));
1592		if (hash256 && rand256)
1593			data->present = 0x03;
1594	} else {
1595		memset(data->hash192, 0, sizeof(data->hash192));
1596		memset(data->rand192, 0, sizeof(data->rand192));
1597		if (hash256 && rand256)
1598			data->present = 0x02;
1599		else
1600			data->present = 0x00;
1601	}
1602
1603	if (hash256 && rand256) {
1604		memcpy(data->hash256, hash256, sizeof(data->hash256));
1605		memcpy(data->rand256, rand256, sizeof(data->rand256));
1606	} else {
1607		memset(data->hash256, 0, sizeof(data->hash256));
1608		memset(data->rand256, 0, sizeof(data->rand256));
1609		if (hash192 && rand192)
1610			data->present = 0x01;
1611	}
1612
1613	BT_DBG("%s for %pMR", hdev->name, bdaddr);
1614
1615	return 0;
1616}
1617
1618/* This function requires the caller holds hdev->lock */
1619struct adv_info *hci_find_adv_instance(struct hci_dev *hdev, u8 instance)
1620{
1621	struct adv_info *adv_instance;
1622
1623	list_for_each_entry(adv_instance, &hdev->adv_instances, list) {
1624		if (adv_instance->instance == instance)
1625			return adv_instance;
1626	}
1627
1628	return NULL;
1629}
1630
1631/* This function requires the caller holds hdev->lock */
1632struct adv_info *hci_get_next_instance(struct hci_dev *hdev, u8 instance)
1633{
1634	struct adv_info *cur_instance;
1635
1636	cur_instance = hci_find_adv_instance(hdev, instance);
1637	if (!cur_instance)
1638		return NULL;
1639
1640	if (cur_instance == list_last_entry(&hdev->adv_instances,
1641					    struct adv_info, list))
1642		return list_first_entry(&hdev->adv_instances,
1643						 struct adv_info, list);
1644	else
1645		return list_next_entry(cur_instance, list);
1646}
1647
1648/* This function requires the caller holds hdev->lock */
1649int hci_remove_adv_instance(struct hci_dev *hdev, u8 instance)
1650{
1651	struct adv_info *adv_instance;
1652
1653	adv_instance = hci_find_adv_instance(hdev, instance);
1654	if (!adv_instance)
1655		return -ENOENT;
1656
1657	BT_DBG("%s removing %dMR", hdev->name, instance);
1658
1659	if (hdev->cur_adv_instance == instance) {
1660		if (hdev->adv_instance_timeout) {
1661			cancel_delayed_work(&hdev->adv_instance_expire);
1662			hdev->adv_instance_timeout = 0;
1663		}
1664		hdev->cur_adv_instance = 0x00;
1665	}
1666
1667	cancel_delayed_work_sync(&adv_instance->rpa_expired_cb);
1668
1669	list_del(&adv_instance->list);
1670	kfree(adv_instance);
1671
1672	hdev->adv_instance_cnt--;
1673
1674	return 0;
1675}
1676
1677void hci_adv_instances_set_rpa_expired(struct hci_dev *hdev, bool rpa_expired)
1678{
1679	struct adv_info *adv_instance, *n;
1680
1681	list_for_each_entry_safe(adv_instance, n, &hdev->adv_instances, list)
1682		adv_instance->rpa_expired = rpa_expired;
1683}
1684
1685/* This function requires the caller holds hdev->lock */
1686void hci_adv_instances_clear(struct hci_dev *hdev)
1687{
1688	struct adv_info *adv_instance, *n;
1689
1690	if (hdev->adv_instance_timeout) {
1691		cancel_delayed_work(&hdev->adv_instance_expire);
1692		hdev->adv_instance_timeout = 0;
1693	}
1694
1695	list_for_each_entry_safe(adv_instance, n, &hdev->adv_instances, list) {
1696		cancel_delayed_work_sync(&adv_instance->rpa_expired_cb);
1697		list_del(&adv_instance->list);
1698		kfree(adv_instance);
1699	}
1700
1701	hdev->adv_instance_cnt = 0;
1702	hdev->cur_adv_instance = 0x00;
1703}
1704
1705static void adv_instance_rpa_expired(struct work_struct *work)
1706{
1707	struct adv_info *adv_instance = container_of(work, struct adv_info,
1708						     rpa_expired_cb.work);
1709
1710	BT_DBG("");
1711
1712	adv_instance->rpa_expired = true;
1713}
1714
1715/* This function requires the caller holds hdev->lock */
1716struct adv_info *hci_add_adv_instance(struct hci_dev *hdev, u8 instance,
1717				      u32 flags, u16 adv_data_len, u8 *adv_data,
1718				      u16 scan_rsp_len, u8 *scan_rsp_data,
1719				      u16 timeout, u16 duration, s8 tx_power,
1720				      u32 min_interval, u32 max_interval,
1721				      u8 mesh_handle)
1722{
1723	struct adv_info *adv;
1724
1725	adv = hci_find_adv_instance(hdev, instance);
1726	if (adv) {
1727		memset(adv->adv_data, 0, sizeof(adv->adv_data));
1728		memset(adv->scan_rsp_data, 0, sizeof(adv->scan_rsp_data));
1729		memset(adv->per_adv_data, 0, sizeof(adv->per_adv_data));
1730	} else {
1731		if (hdev->adv_instance_cnt >= hdev->le_num_of_adv_sets ||
1732		    instance < 1 || instance > hdev->le_num_of_adv_sets + 1)
1733			return ERR_PTR(-EOVERFLOW);
1734
1735		adv = kzalloc(sizeof(*adv), GFP_KERNEL);
1736		if (!adv)
1737			return ERR_PTR(-ENOMEM);
1738
1739		adv->pending = true;
1740		adv->instance = instance;
1741		list_add(&adv->list, &hdev->adv_instances);
1742		hdev->adv_instance_cnt++;
1743	}
1744
1745	adv->flags = flags;
1746	adv->min_interval = min_interval;
1747	adv->max_interval = max_interval;
1748	adv->tx_power = tx_power;
1749	/* Defining a mesh_handle changes the timing units to ms,
1750	 * rather than seconds, and ties the instance to the requested
1751	 * mesh_tx queue.
1752	 */
1753	adv->mesh = mesh_handle;
1754
1755	hci_set_adv_instance_data(hdev, instance, adv_data_len, adv_data,
1756				  scan_rsp_len, scan_rsp_data);
1757
1758	adv->timeout = timeout;
1759	adv->remaining_time = timeout;
1760
1761	if (duration == 0)
1762		adv->duration = hdev->def_multi_adv_rotation_duration;
1763	else
1764		adv->duration = duration;
1765
1766	INIT_DELAYED_WORK(&adv->rpa_expired_cb, adv_instance_rpa_expired);
1767
1768	BT_DBG("%s for %dMR", hdev->name, instance);
1769
1770	return adv;
1771}
1772
1773/* This function requires the caller holds hdev->lock */
1774struct adv_info *hci_add_per_instance(struct hci_dev *hdev, u8 instance,
1775				      u32 flags, u8 data_len, u8 *data,
1776				      u32 min_interval, u32 max_interval)
1777{
1778	struct adv_info *adv;
1779
1780	adv = hci_add_adv_instance(hdev, instance, flags, 0, NULL, 0, NULL,
1781				   0, 0, HCI_ADV_TX_POWER_NO_PREFERENCE,
1782				   min_interval, max_interval, 0);
1783	if (IS_ERR(adv))
1784		return adv;
1785
1786	adv->periodic = true;
1787	adv->per_adv_data_len = data_len;
1788
1789	if (data)
1790		memcpy(adv->per_adv_data, data, data_len);
1791
1792	return adv;
1793}
1794
1795/* This function requires the caller holds hdev->lock */
1796int hci_set_adv_instance_data(struct hci_dev *hdev, u8 instance,
1797			      u16 adv_data_len, u8 *adv_data,
1798			      u16 scan_rsp_len, u8 *scan_rsp_data)
1799{
1800	struct adv_info *adv;
1801
1802	adv = hci_find_adv_instance(hdev, instance);
1803
1804	/* If advertisement doesn't exist, we can't modify its data */
1805	if (!adv)
1806		return -ENOENT;
1807
1808	if (adv_data_len && ADV_DATA_CMP(adv, adv_data, adv_data_len)) {
1809		memset(adv->adv_data, 0, sizeof(adv->adv_data));
1810		memcpy(adv->adv_data, adv_data, adv_data_len);
1811		adv->adv_data_len = adv_data_len;
1812		adv->adv_data_changed = true;
1813	}
1814
1815	if (scan_rsp_len && SCAN_RSP_CMP(adv, scan_rsp_data, scan_rsp_len)) {
1816		memset(adv->scan_rsp_data, 0, sizeof(adv->scan_rsp_data));
1817		memcpy(adv->scan_rsp_data, scan_rsp_data, scan_rsp_len);
1818		adv->scan_rsp_len = scan_rsp_len;
1819		adv->scan_rsp_changed = true;
1820	}
1821
1822	/* Mark as changed if there are flags which would affect it */
1823	if (((adv->flags & MGMT_ADV_FLAG_APPEARANCE) && hdev->appearance) ||
1824	    adv->flags & MGMT_ADV_FLAG_LOCAL_NAME)
1825		adv->scan_rsp_changed = true;
1826
1827	return 0;
1828}
1829
1830/* This function requires the caller holds hdev->lock */
1831u32 hci_adv_instance_flags(struct hci_dev *hdev, u8 instance)
1832{
1833	u32 flags;
1834	struct adv_info *adv;
1835
1836	if (instance == 0x00) {
1837		/* Instance 0 always manages the "Tx Power" and "Flags"
1838		 * fields
1839		 */
1840		flags = MGMT_ADV_FLAG_TX_POWER | MGMT_ADV_FLAG_MANAGED_FLAGS;
1841
1842		/* For instance 0, the HCI_ADVERTISING_CONNECTABLE setting
1843		 * corresponds to the "connectable" instance flag.
1844		 */
1845		if (hci_dev_test_flag(hdev, HCI_ADVERTISING_CONNECTABLE))
1846			flags |= MGMT_ADV_FLAG_CONNECTABLE;
1847
1848		if (hci_dev_test_flag(hdev, HCI_LIMITED_DISCOVERABLE))
1849			flags |= MGMT_ADV_FLAG_LIMITED_DISCOV;
1850		else if (hci_dev_test_flag(hdev, HCI_DISCOVERABLE))
1851			flags |= MGMT_ADV_FLAG_DISCOV;
1852
1853		return flags;
1854	}
1855
1856	adv = hci_find_adv_instance(hdev, instance);
1857
1858	/* Return 0 when we got an invalid instance identifier. */
1859	if (!adv)
1860		return 0;
1861
1862	return adv->flags;
1863}
1864
1865bool hci_adv_instance_is_scannable(struct hci_dev *hdev, u8 instance)
1866{
1867	struct adv_info *adv;
1868
1869	/* Instance 0x00 always set local name */
1870	if (instance == 0x00)
1871		return true;
1872
1873	adv = hci_find_adv_instance(hdev, instance);
1874	if (!adv)
1875		return false;
1876
1877	if (adv->flags & MGMT_ADV_FLAG_APPEARANCE ||
1878	    adv->flags & MGMT_ADV_FLAG_LOCAL_NAME)
1879		return true;
1880
1881	return adv->scan_rsp_len ? true : false;
1882}
1883
1884/* This function requires the caller holds hdev->lock */
1885void hci_adv_monitors_clear(struct hci_dev *hdev)
1886{
1887	struct adv_monitor *monitor;
1888	int handle;
1889
1890	idr_for_each_entry(&hdev->adv_monitors_idr, monitor, handle)
1891		hci_free_adv_monitor(hdev, monitor);
1892
1893	idr_destroy(&hdev->adv_monitors_idr);
1894}
1895
1896/* Frees the monitor structure and do some bookkeepings.
1897 * This function requires the caller holds hdev->lock.
1898 */
1899void hci_free_adv_monitor(struct hci_dev *hdev, struct adv_monitor *monitor)
1900{
1901	struct adv_pattern *pattern;
1902	struct adv_pattern *tmp;
1903
1904	if (!monitor)
1905		return;
1906
1907	list_for_each_entry_safe(pattern, tmp, &monitor->patterns, list) {
1908		list_del(&pattern->list);
1909		kfree(pattern);
1910	}
1911
1912	if (monitor->handle)
1913		idr_remove(&hdev->adv_monitors_idr, monitor->handle);
1914
1915	if (monitor->state != ADV_MONITOR_STATE_NOT_REGISTERED) {
1916		hdev->adv_monitors_cnt--;
1917		mgmt_adv_monitor_removed(hdev, monitor->handle);
1918	}
1919
1920	kfree(monitor);
1921}
1922
1923/* Assigns handle to a monitor, and if offloading is supported and power is on,
1924 * also attempts to forward the request to the controller.
1925 * This function requires the caller holds hci_req_sync_lock.
1926 */
1927int hci_add_adv_monitor(struct hci_dev *hdev, struct adv_monitor *monitor)
1928{
1929	int min, max, handle;
1930	int status = 0;
1931
1932	if (!monitor)
1933		return -EINVAL;
1934
1935	hci_dev_lock(hdev);
1936
1937	min = HCI_MIN_ADV_MONITOR_HANDLE;
1938	max = HCI_MIN_ADV_MONITOR_HANDLE + HCI_MAX_ADV_MONITOR_NUM_HANDLES;
1939	handle = idr_alloc(&hdev->adv_monitors_idr, monitor, min, max,
1940			   GFP_KERNEL);
1941
1942	hci_dev_unlock(hdev);
1943
1944	if (handle < 0)
1945		return handle;
1946
1947	monitor->handle = handle;
1948
1949	if (!hdev_is_powered(hdev))
1950		return status;
1951
1952	switch (hci_get_adv_monitor_offload_ext(hdev)) {
1953	case HCI_ADV_MONITOR_EXT_NONE:
1954		bt_dev_dbg(hdev, "add monitor %d status %d",
1955			   monitor->handle, status);
1956		/* Message was not forwarded to controller - not an error */
1957		break;
1958
1959	case HCI_ADV_MONITOR_EXT_MSFT:
1960		status = msft_add_monitor_pattern(hdev, monitor);
1961		bt_dev_dbg(hdev, "add monitor %d msft status %d",
1962			   handle, status);
1963		break;
1964	}
1965
1966	return status;
1967}
1968
1969/* Attempts to tell the controller and free the monitor. If somehow the
1970 * controller doesn't have a corresponding handle, remove anyway.
1971 * This function requires the caller holds hci_req_sync_lock.
1972 */
1973static int hci_remove_adv_monitor(struct hci_dev *hdev,
1974				  struct adv_monitor *monitor)
1975{
1976	int status = 0;
1977	int handle;
1978
1979	switch (hci_get_adv_monitor_offload_ext(hdev)) {
1980	case HCI_ADV_MONITOR_EXT_NONE: /* also goes here when powered off */
1981		bt_dev_dbg(hdev, "remove monitor %d status %d",
1982			   monitor->handle, status);
1983		goto free_monitor;
1984
1985	case HCI_ADV_MONITOR_EXT_MSFT:
1986		handle = monitor->handle;
1987		status = msft_remove_monitor(hdev, monitor);
1988		bt_dev_dbg(hdev, "remove monitor %d msft status %d",
1989			   handle, status);
1990		break;
1991	}
1992
1993	/* In case no matching handle registered, just free the monitor */
1994	if (status == -ENOENT)
1995		goto free_monitor;
1996
1997	return status;
1998
1999free_monitor:
2000	if (status == -ENOENT)
2001		bt_dev_warn(hdev, "Removing monitor with no matching handle %d",
2002			    monitor->handle);
2003	hci_free_adv_monitor(hdev, monitor);
2004
2005	return status;
2006}
2007
2008/* This function requires the caller holds hci_req_sync_lock */
2009int hci_remove_single_adv_monitor(struct hci_dev *hdev, u16 handle)
2010{
2011	struct adv_monitor *monitor = idr_find(&hdev->adv_monitors_idr, handle);
2012
2013	if (!monitor)
2014		return -EINVAL;
2015
2016	return hci_remove_adv_monitor(hdev, monitor);
2017}
2018
2019/* This function requires the caller holds hci_req_sync_lock */
2020int hci_remove_all_adv_monitor(struct hci_dev *hdev)
2021{
2022	struct adv_monitor *monitor;
2023	int idr_next_id = 0;
2024	int status = 0;
2025
2026	while (1) {
2027		monitor = idr_get_next(&hdev->adv_monitors_idr, &idr_next_id);
2028		if (!monitor)
2029			break;
2030
2031		status = hci_remove_adv_monitor(hdev, monitor);
2032		if (status)
2033			return status;
2034
2035		idr_next_id++;
2036	}
2037
2038	return status;
2039}
2040
2041/* This function requires the caller holds hdev->lock */
2042bool hci_is_adv_monitoring(struct hci_dev *hdev)
2043{
2044	return !idr_is_empty(&hdev->adv_monitors_idr);
2045}
2046
2047int hci_get_adv_monitor_offload_ext(struct hci_dev *hdev)
2048{
2049	if (msft_monitor_supported(hdev))
2050		return HCI_ADV_MONITOR_EXT_MSFT;
2051
2052	return HCI_ADV_MONITOR_EXT_NONE;
2053}
2054
2055struct bdaddr_list *hci_bdaddr_list_lookup(struct list_head *bdaddr_list,
2056					 bdaddr_t *bdaddr, u8 type)
2057{
2058	struct bdaddr_list *b;
2059
2060	list_for_each_entry(b, bdaddr_list, list) {
2061		if (!bacmp(&b->bdaddr, bdaddr) && b->bdaddr_type == type)
2062			return b;
2063	}
2064
2065	return NULL;
2066}
2067
2068struct bdaddr_list_with_irk *hci_bdaddr_list_lookup_with_irk(
2069				struct list_head *bdaddr_list, bdaddr_t *bdaddr,
2070				u8 type)
2071{
2072	struct bdaddr_list_with_irk *b;
2073
2074	list_for_each_entry(b, bdaddr_list, list) {
2075		if (!bacmp(&b->bdaddr, bdaddr) && b->bdaddr_type == type)
2076			return b;
2077	}
2078
2079	return NULL;
2080}
2081
2082struct bdaddr_list_with_flags *
2083hci_bdaddr_list_lookup_with_flags(struct list_head *bdaddr_list,
2084				  bdaddr_t *bdaddr, u8 type)
2085{
2086	struct bdaddr_list_with_flags *b;
2087
2088	list_for_each_entry(b, bdaddr_list, list) {
2089		if (!bacmp(&b->bdaddr, bdaddr) && b->bdaddr_type == type)
2090			return b;
2091	}
2092
2093	return NULL;
2094}
2095
2096void hci_bdaddr_list_clear(struct list_head *bdaddr_list)
2097{
2098	struct bdaddr_list *b, *n;
2099
2100	list_for_each_entry_safe(b, n, bdaddr_list, list) {
2101		list_del(&b->list);
2102		kfree(b);
2103	}
2104}
2105
2106int hci_bdaddr_list_add(struct list_head *list, bdaddr_t *bdaddr, u8 type)
2107{
2108	struct bdaddr_list *entry;
2109
2110	if (!bacmp(bdaddr, BDADDR_ANY))
2111		return -EBADF;
2112
2113	if (hci_bdaddr_list_lookup(list, bdaddr, type))
2114		return -EEXIST;
2115
2116	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
2117	if (!entry)
2118		return -ENOMEM;
2119
2120	bacpy(&entry->bdaddr, bdaddr);
2121	entry->bdaddr_type = type;
2122
2123	list_add(&entry->list, list);
2124
2125	return 0;
2126}
2127
2128int hci_bdaddr_list_add_with_irk(struct list_head *list, bdaddr_t *bdaddr,
2129					u8 type, u8 *peer_irk, u8 *local_irk)
2130{
2131	struct bdaddr_list_with_irk *entry;
2132
2133	if (!bacmp(bdaddr, BDADDR_ANY))
2134		return -EBADF;
2135
2136	if (hci_bdaddr_list_lookup(list, bdaddr, type))
2137		return -EEXIST;
2138
2139	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
2140	if (!entry)
2141		return -ENOMEM;
2142
2143	bacpy(&entry->bdaddr, bdaddr);
2144	entry->bdaddr_type = type;
2145
2146	if (peer_irk)
2147		memcpy(entry->peer_irk, peer_irk, 16);
2148
2149	if (local_irk)
2150		memcpy(entry->local_irk, local_irk, 16);
2151
2152	list_add(&entry->list, list);
2153
2154	return 0;
2155}
2156
2157int hci_bdaddr_list_add_with_flags(struct list_head *list, bdaddr_t *bdaddr,
2158				   u8 type, u32 flags)
2159{
2160	struct bdaddr_list_with_flags *entry;
2161
2162	if (!bacmp(bdaddr, BDADDR_ANY))
2163		return -EBADF;
2164
2165	if (hci_bdaddr_list_lookup(list, bdaddr, type))
2166		return -EEXIST;
2167
2168	entry = kzalloc(sizeof(*entry), GFP_KERNEL);
2169	if (!entry)
2170		return -ENOMEM;
2171
2172	bacpy(&entry->bdaddr, bdaddr);
2173	entry->bdaddr_type = type;
2174	entry->flags = flags;
2175
2176	list_add(&entry->list, list);
2177
2178	return 0;
2179}
2180
2181int hci_bdaddr_list_del(struct list_head *list, bdaddr_t *bdaddr, u8 type)
2182{
2183	struct bdaddr_list *entry;
2184
2185	if (!bacmp(bdaddr, BDADDR_ANY)) {
2186		hci_bdaddr_list_clear(list);
2187		return 0;
2188	}
2189
2190	entry = hci_bdaddr_list_lookup(list, bdaddr, type);
2191	if (!entry)
2192		return -ENOENT;
2193
2194	list_del(&entry->list);
2195	kfree(entry);
2196
2197	return 0;
2198}
2199
2200int hci_bdaddr_list_del_with_irk(struct list_head *list, bdaddr_t *bdaddr,
2201							u8 type)
2202{
2203	struct bdaddr_list_with_irk *entry;
2204
2205	if (!bacmp(bdaddr, BDADDR_ANY)) {
2206		hci_bdaddr_list_clear(list);
2207		return 0;
2208	}
2209
2210	entry = hci_bdaddr_list_lookup_with_irk(list, bdaddr, type);
2211	if (!entry)
2212		return -ENOENT;
2213
2214	list_del(&entry->list);
2215	kfree(entry);
2216
2217	return 0;
2218}
2219
2220int hci_bdaddr_list_del_with_flags(struct list_head *list, bdaddr_t *bdaddr,
2221				   u8 type)
2222{
2223	struct bdaddr_list_with_flags *entry;
2224
2225	if (!bacmp(bdaddr, BDADDR_ANY)) {
2226		hci_bdaddr_list_clear(list);
2227		return 0;
2228	}
2229
2230	entry = hci_bdaddr_list_lookup_with_flags(list, bdaddr, type);
2231	if (!entry)
2232		return -ENOENT;
2233
2234	list_del(&entry->list);
2235	kfree(entry);
2236
2237	return 0;
2238}
2239
2240/* This function requires the caller holds hdev->lock */
2241struct hci_conn_params *hci_conn_params_lookup(struct hci_dev *hdev,
2242					       bdaddr_t *addr, u8 addr_type)
2243{
2244	struct hci_conn_params *params;
2245
2246	list_for_each_entry(params, &hdev->le_conn_params, list) {
2247		if (bacmp(&params->addr, addr) == 0 &&
2248		    params->addr_type == addr_type) {
2249			return params;
2250		}
2251	}
2252
2253	return NULL;
2254}
2255
2256/* This function requires the caller holds hdev->lock or rcu_read_lock */
2257struct hci_conn_params *hci_pend_le_action_lookup(struct list_head *list,
2258						  bdaddr_t *addr, u8 addr_type)
2259{
2260	struct hci_conn_params *param;
2261
2262	rcu_read_lock();
2263
2264	list_for_each_entry_rcu(param, list, action) {
2265		if (bacmp(&param->addr, addr) == 0 &&
2266		    param->addr_type == addr_type) {
2267			rcu_read_unlock();
2268			return param;
2269		}
2270	}
2271
2272	rcu_read_unlock();
2273
2274	return NULL;
2275}
2276
2277/* This function requires the caller holds hdev->lock */
2278void hci_pend_le_list_del_init(struct hci_conn_params *param)
2279{
2280	if (list_empty(&param->action))
2281		return;
2282
2283	list_del_rcu(&param->action);
2284	synchronize_rcu();
2285	INIT_LIST_HEAD(&param->action);
2286}
2287
2288/* This function requires the caller holds hdev->lock */
2289void hci_pend_le_list_add(struct hci_conn_params *param,
2290			  struct list_head *list)
2291{
2292	list_add_rcu(&param->action, list);
2293}
2294
2295/* This function requires the caller holds hdev->lock */
2296struct hci_conn_params *hci_conn_params_add(struct hci_dev *hdev,
2297					    bdaddr_t *addr, u8 addr_type)
2298{
2299	struct hci_conn_params *params;
2300
2301	params = hci_conn_params_lookup(hdev, addr, addr_type);
2302	if (params)
2303		return params;
2304
2305	params = kzalloc(sizeof(*params), GFP_KERNEL);
2306	if (!params) {
2307		bt_dev_err(hdev, "out of memory");
2308		return NULL;
2309	}
2310
2311	bacpy(&params->addr, addr);
2312	params->addr_type = addr_type;
2313
2314	list_add(&params->list, &hdev->le_conn_params);
2315	INIT_LIST_HEAD(&params->action);
2316
2317	params->conn_min_interval = hdev->le_conn_min_interval;
2318	params->conn_max_interval = hdev->le_conn_max_interval;
2319	params->conn_latency = hdev->le_conn_latency;
2320	params->supervision_timeout = hdev->le_supv_timeout;
2321	params->auto_connect = HCI_AUTO_CONN_DISABLED;
2322
2323	BT_DBG("addr %pMR (type %u)", addr, addr_type);
2324
2325	return params;
2326}
2327
2328void hci_conn_params_free(struct hci_conn_params *params)
2329{
2330	hci_pend_le_list_del_init(params);
2331
2332	if (params->conn) {
2333		hci_conn_drop(params->conn);
2334		hci_conn_put(params->conn);
2335	}
2336
2337	list_del(&params->list);
2338	kfree(params);
2339}
2340
2341/* This function requires the caller holds hdev->lock */
2342void hci_conn_params_del(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type)
2343{
2344	struct hci_conn_params *params;
2345
2346	params = hci_conn_params_lookup(hdev, addr, addr_type);
2347	if (!params)
2348		return;
2349
2350	hci_conn_params_free(params);
2351
2352	hci_update_passive_scan(hdev);
2353
2354	BT_DBG("addr %pMR (type %u)", addr, addr_type);
2355}
2356
2357/* This function requires the caller holds hdev->lock */
2358void hci_conn_params_clear_disabled(struct hci_dev *hdev)
2359{
2360	struct hci_conn_params *params, *tmp;
2361
2362	list_for_each_entry_safe(params, tmp, &hdev->le_conn_params, list) {
2363		if (params->auto_connect != HCI_AUTO_CONN_DISABLED)
2364			continue;
2365
2366		/* If trying to establish one time connection to disabled
2367		 * device, leave the params, but mark them as just once.
2368		 */
2369		if (params->explicit_connect) {
2370			params->auto_connect = HCI_AUTO_CONN_EXPLICIT;
2371			continue;
2372		}
2373
2374		hci_conn_params_free(params);
2375	}
2376
2377	BT_DBG("All LE disabled connection parameters were removed");
2378}
2379
2380/* This function requires the caller holds hdev->lock */
2381static void hci_conn_params_clear_all(struct hci_dev *hdev)
2382{
2383	struct hci_conn_params *params, *tmp;
2384
2385	list_for_each_entry_safe(params, tmp, &hdev->le_conn_params, list)
2386		hci_conn_params_free(params);
2387
2388	BT_DBG("All LE connection parameters were removed");
2389}
2390
2391/* Copy the Identity Address of the controller.
2392 *
2393 * If the controller has a public BD_ADDR, then by default use that one.
2394 * If this is a LE only controller without a public address, default to
2395 * the static random address.
2396 *
2397 * For debugging purposes it is possible to force controllers with a
2398 * public address to use the static random address instead.
2399 *
2400 * In case BR/EDR has been disabled on a dual-mode controller and
2401 * userspace has configured a static address, then that address
2402 * becomes the identity address instead of the public BR/EDR address.
2403 */
2404void hci_copy_identity_address(struct hci_dev *hdev, bdaddr_t *bdaddr,
2405			       u8 *bdaddr_type)
2406{
2407	if (hci_dev_test_flag(hdev, HCI_FORCE_STATIC_ADDR) ||
2408	    !bacmp(&hdev->bdaddr, BDADDR_ANY) ||
2409	    (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED) &&
2410	     bacmp(&hdev->static_addr, BDADDR_ANY))) {
2411		bacpy(bdaddr, &hdev->static_addr);
2412		*bdaddr_type = ADDR_LE_DEV_RANDOM;
2413	} else {
2414		bacpy(bdaddr, &hdev->bdaddr);
2415		*bdaddr_type = ADDR_LE_DEV_PUBLIC;
2416	}
2417}
2418
2419static void hci_clear_wake_reason(struct hci_dev *hdev)
2420{
2421	hci_dev_lock(hdev);
2422
2423	hdev->wake_reason = 0;
2424	bacpy(&hdev->wake_addr, BDADDR_ANY);
2425	hdev->wake_addr_type = 0;
2426
2427	hci_dev_unlock(hdev);
2428}
2429
2430static int hci_suspend_notifier(struct notifier_block *nb, unsigned long action,
2431				void *data)
2432{
2433	struct hci_dev *hdev =
2434		container_of(nb, struct hci_dev, suspend_notifier);
2435	int ret = 0;
2436
2437	/* Userspace has full control of this device. Do nothing. */
2438	if (hci_dev_test_flag(hdev, HCI_USER_CHANNEL))
2439		return NOTIFY_DONE;
2440
2441	/* To avoid a potential race with hci_unregister_dev. */
2442	hci_dev_hold(hdev);
2443
2444	if (action == PM_SUSPEND_PREPARE)
2445		ret = hci_suspend_dev(hdev);
2446	else if (action == PM_POST_SUSPEND)
2447		ret = hci_resume_dev(hdev);
2448
2449	if (ret)
2450		bt_dev_err(hdev, "Suspend notifier action (%lu) failed: %d",
2451			   action, ret);
2452
2453	hci_dev_put(hdev);
2454	return NOTIFY_DONE;
2455}
2456
2457/* Alloc HCI device */
2458struct hci_dev *hci_alloc_dev_priv(int sizeof_priv)
2459{
2460	struct hci_dev *hdev;
2461	unsigned int alloc_size;
2462
2463	alloc_size = sizeof(*hdev);
2464	if (sizeof_priv) {
2465		/* Fixme: May need ALIGN-ment? */
2466		alloc_size += sizeof_priv;
2467	}
2468
2469	hdev = kzalloc(alloc_size, GFP_KERNEL);
2470	if (!hdev)
2471		return NULL;
2472
2473	hdev->pkt_type  = (HCI_DM1 | HCI_DH1 | HCI_HV1);
2474	hdev->esco_type = (ESCO_HV1);
2475	hdev->link_mode = (HCI_LM_ACCEPT);
2476	hdev->num_iac = 0x01;		/* One IAC support is mandatory */
2477	hdev->io_capability = 0x03;	/* No Input No Output */
2478	hdev->manufacturer = 0xffff;	/* Default to internal use */
2479	hdev->inq_tx_power = HCI_TX_POWER_INVALID;
2480	hdev->adv_tx_power = HCI_TX_POWER_INVALID;
2481	hdev->adv_instance_cnt = 0;
2482	hdev->cur_adv_instance = 0x00;
2483	hdev->adv_instance_timeout = 0;
2484
2485	hdev->advmon_allowlist_duration = 300;
2486	hdev->advmon_no_filter_duration = 500;
2487	hdev->enable_advmon_interleave_scan = 0x00;	/* Default to disable */
2488
2489	hdev->sniff_max_interval = 800;
2490	hdev->sniff_min_interval = 80;
2491
2492	hdev->le_adv_channel_map = 0x07;
2493	hdev->le_adv_min_interval = 0x0800;
2494	hdev->le_adv_max_interval = 0x0800;
2495	hdev->le_scan_interval = 0x0060;
2496	hdev->le_scan_window = 0x0030;
2497	hdev->le_scan_int_suspend = 0x0400;
2498	hdev->le_scan_window_suspend = 0x0012;
2499	hdev->le_scan_int_discovery = DISCOV_LE_SCAN_INT;
2500	hdev->le_scan_window_discovery = DISCOV_LE_SCAN_WIN;
2501	hdev->le_scan_int_adv_monitor = 0x0060;
2502	hdev->le_scan_window_adv_monitor = 0x0030;
2503	hdev->le_scan_int_connect = 0x0060;
2504	hdev->le_scan_window_connect = 0x0060;
2505	hdev->le_conn_min_interval = 0x0018;
2506	hdev->le_conn_max_interval = 0x0028;
2507	hdev->le_conn_latency = 0x0000;
2508	hdev->le_supv_timeout = 0x002a;
2509	hdev->le_def_tx_len = 0x001b;
2510	hdev->le_def_tx_time = 0x0148;
2511	hdev->le_max_tx_len = 0x001b;
2512	hdev->le_max_tx_time = 0x0148;
2513	hdev->le_max_rx_len = 0x001b;
2514	hdev->le_max_rx_time = 0x0148;
2515	hdev->le_max_key_size = SMP_MAX_ENC_KEY_SIZE;
2516	hdev->le_min_key_size = SMP_MIN_ENC_KEY_SIZE;
2517	hdev->le_tx_def_phys = HCI_LE_SET_PHY_1M;
2518	hdev->le_rx_def_phys = HCI_LE_SET_PHY_1M;
2519	hdev->le_num_of_adv_sets = HCI_MAX_ADV_INSTANCES;
2520	hdev->def_multi_adv_rotation_duration = HCI_DEFAULT_ADV_DURATION;
2521	hdev->def_le_autoconnect_timeout = HCI_LE_AUTOCONN_TIMEOUT;
2522	hdev->min_le_tx_power = HCI_TX_POWER_INVALID;
2523	hdev->max_le_tx_power = HCI_TX_POWER_INVALID;
2524
2525	hdev->rpa_timeout = HCI_DEFAULT_RPA_TIMEOUT;
2526	hdev->discov_interleaved_timeout = DISCOV_INTERLEAVED_TIMEOUT;
2527	hdev->conn_info_min_age = DEFAULT_CONN_INFO_MIN_AGE;
2528	hdev->conn_info_max_age = DEFAULT_CONN_INFO_MAX_AGE;
2529	hdev->auth_payload_timeout = DEFAULT_AUTH_PAYLOAD_TIMEOUT;
2530	hdev->min_enc_key_size = HCI_MIN_ENC_KEY_SIZE;
2531
2532	/* default 1.28 sec page scan */
2533	hdev->def_page_scan_type = PAGE_SCAN_TYPE_STANDARD;
2534	hdev->def_page_scan_int = 0x0800;
2535	hdev->def_page_scan_window = 0x0012;
2536
2537	mutex_init(&hdev->lock);
2538	mutex_init(&hdev->req_lock);
2539
2540	ida_init(&hdev->unset_handle_ida);
2541
2542	INIT_LIST_HEAD(&hdev->mesh_pending);
2543	INIT_LIST_HEAD(&hdev->mgmt_pending);
2544	INIT_LIST_HEAD(&hdev->reject_list);
2545	INIT_LIST_HEAD(&hdev->accept_list);
2546	INIT_LIST_HEAD(&hdev->uuids);
2547	INIT_LIST_HEAD(&hdev->link_keys);
2548	INIT_LIST_HEAD(&hdev->long_term_keys);
2549	INIT_LIST_HEAD(&hdev->identity_resolving_keys);
2550	INIT_LIST_HEAD(&hdev->remote_oob_data);
2551	INIT_LIST_HEAD(&hdev->le_accept_list);
2552	INIT_LIST_HEAD(&hdev->le_resolv_list);
2553	INIT_LIST_HEAD(&hdev->le_conn_params);
2554	INIT_LIST_HEAD(&hdev->pend_le_conns);
2555	INIT_LIST_HEAD(&hdev->pend_le_reports);
2556	INIT_LIST_HEAD(&hdev->conn_hash.list);
2557	INIT_LIST_HEAD(&hdev->adv_instances);
2558	INIT_LIST_HEAD(&hdev->blocked_keys);
2559	INIT_LIST_HEAD(&hdev->monitored_devices);
2560
2561	INIT_LIST_HEAD(&hdev->local_codecs);
2562	INIT_WORK(&hdev->rx_work, hci_rx_work);
2563	INIT_WORK(&hdev->cmd_work, hci_cmd_work);
2564	INIT_WORK(&hdev->tx_work, hci_tx_work);
2565	INIT_WORK(&hdev->power_on, hci_power_on);
2566	INIT_WORK(&hdev->error_reset, hci_error_reset);
2567
2568	hci_cmd_sync_init(hdev);
2569
2570	INIT_DELAYED_WORK(&hdev->power_off, hci_power_off);
2571
2572	skb_queue_head_init(&hdev->rx_q);
2573	skb_queue_head_init(&hdev->cmd_q);
2574	skb_queue_head_init(&hdev->raw_q);
2575
2576	init_waitqueue_head(&hdev->req_wait_q);
2577
2578	INIT_DELAYED_WORK(&hdev->cmd_timer, hci_cmd_timeout);
2579	INIT_DELAYED_WORK(&hdev->ncmd_timer, hci_ncmd_timeout);
2580
2581	hci_devcd_setup(hdev);
2582	hci_request_setup(hdev);
2583
2584	hci_init_sysfs(hdev);
2585	discovery_init(hdev);
2586
2587	return hdev;
2588}
2589EXPORT_SYMBOL(hci_alloc_dev_priv);
2590
2591/* Free HCI device */
2592void hci_free_dev(struct hci_dev *hdev)
2593{
2594	/* will free via device release */
2595	put_device(&hdev->dev);
2596}
2597EXPORT_SYMBOL(hci_free_dev);
2598
2599/* Register HCI device */
2600int hci_register_dev(struct hci_dev *hdev)
2601{
2602	int id, error;
2603
2604	if (!hdev->open || !hdev->close || !hdev->send)
2605		return -EINVAL;
2606
2607	/* Do not allow HCI_AMP devices to register at index 0,
2608	 * so the index can be used as the AMP controller ID.
2609	 */
2610	switch (hdev->dev_type) {
2611	case HCI_PRIMARY:
2612		id = ida_simple_get(&hci_index_ida, 0, HCI_MAX_ID, GFP_KERNEL);
2613		break;
2614	case HCI_AMP:
2615		id = ida_simple_get(&hci_index_ida, 1, HCI_MAX_ID, GFP_KERNEL);
2616		break;
2617	default:
2618		return -EINVAL;
2619	}
2620
2621	if (id < 0)
2622		return id;
2623
2624	error = dev_set_name(&hdev->dev, "hci%u", id);
2625	if (error)
2626		return error;
2627
2628	hdev->name = dev_name(&hdev->dev);
2629	hdev->id = id;
2630
2631	BT_DBG("%p name %s bus %d", hdev, hdev->name, hdev->bus);
2632
2633	hdev->workqueue = alloc_ordered_workqueue("%s", WQ_HIGHPRI, hdev->name);
2634	if (!hdev->workqueue) {
2635		error = -ENOMEM;
2636		goto err;
2637	}
2638
2639	hdev->req_workqueue = alloc_ordered_workqueue("%s", WQ_HIGHPRI,
2640						      hdev->name);
2641	if (!hdev->req_workqueue) {
2642		destroy_workqueue(hdev->workqueue);
2643		error = -ENOMEM;
2644		goto err;
2645	}
2646
2647	if (!IS_ERR_OR_NULL(bt_debugfs))
2648		hdev->debugfs = debugfs_create_dir(hdev->name, bt_debugfs);
2649
2650	error = device_add(&hdev->dev);
2651	if (error < 0)
2652		goto err_wqueue;
2653
2654	hci_leds_init(hdev);
2655
2656	hdev->rfkill = rfkill_alloc(hdev->name, &hdev->dev,
2657				    RFKILL_TYPE_BLUETOOTH, &hci_rfkill_ops,
2658				    hdev);
2659	if (hdev->rfkill) {
2660		if (rfkill_register(hdev->rfkill) < 0) {
2661			rfkill_destroy(hdev->rfkill);
2662			hdev->rfkill = NULL;
2663		}
2664	}
2665
2666	if (hdev->rfkill && rfkill_blocked(hdev->rfkill))
2667		hci_dev_set_flag(hdev, HCI_RFKILLED);
2668
2669	hci_dev_set_flag(hdev, HCI_SETUP);
2670	hci_dev_set_flag(hdev, HCI_AUTO_OFF);
2671
2672	if (hdev->dev_type == HCI_PRIMARY) {
2673		/* Assume BR/EDR support until proven otherwise (such as
2674		 * through reading supported features during init.
2675		 */
2676		hci_dev_set_flag(hdev, HCI_BREDR_ENABLED);
2677	}
2678
2679	write_lock(&hci_dev_list_lock);
2680	list_add(&hdev->list, &hci_dev_list);
2681	write_unlock(&hci_dev_list_lock);
2682
2683	/* Devices that are marked for raw-only usage are unconfigured
2684	 * and should not be included in normal operation.
2685	 */
2686	if (test_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks))
2687		hci_dev_set_flag(hdev, HCI_UNCONFIGURED);
2688
2689	/* Mark Remote Wakeup connection flag as supported if driver has wakeup
2690	 * callback.
2691	 */
2692	if (hdev->wakeup)
2693		hdev->conn_flags |= HCI_CONN_FLAG_REMOTE_WAKEUP;
2694
2695	hci_sock_dev_event(hdev, HCI_DEV_REG);
2696	hci_dev_hold(hdev);
2697
2698	error = hci_register_suspend_notifier(hdev);
2699	if (error)
2700		BT_WARN("register suspend notifier failed error:%d\n", error);
2701
2702	queue_work(hdev->req_workqueue, &hdev->power_on);
2703
2704	idr_init(&hdev->adv_monitors_idr);
2705	msft_register(hdev);
2706
2707	return id;
2708
2709err_wqueue:
2710	debugfs_remove_recursive(hdev->debugfs);
2711	destroy_workqueue(hdev->workqueue);
2712	destroy_workqueue(hdev->req_workqueue);
2713err:
2714	ida_simple_remove(&hci_index_ida, hdev->id);
2715
2716	return error;
2717}
2718EXPORT_SYMBOL(hci_register_dev);
2719
2720/* Unregister HCI device */
2721void hci_unregister_dev(struct hci_dev *hdev)
2722{
2723	BT_DBG("%p name %s bus %d", hdev, hdev->name, hdev->bus);
2724
2725	mutex_lock(&hdev->unregister_lock);
2726	hci_dev_set_flag(hdev, HCI_UNREGISTER);
2727	mutex_unlock(&hdev->unregister_lock);
2728
2729	write_lock(&hci_dev_list_lock);
2730	list_del(&hdev->list);
2731	write_unlock(&hci_dev_list_lock);
2732
2733	cancel_work_sync(&hdev->power_on);
2734
2735	hci_cmd_sync_clear(hdev);
2736
2737	hci_unregister_suspend_notifier(hdev);
2738
2739	msft_unregister(hdev);
2740
2741	hci_dev_do_close(hdev);
2742
2743	if (!test_bit(HCI_INIT, &hdev->flags) &&
2744	    !hci_dev_test_flag(hdev, HCI_SETUP) &&
2745	    !hci_dev_test_flag(hdev, HCI_CONFIG)) {
2746		hci_dev_lock(hdev);
2747		mgmt_index_removed(hdev);
2748		hci_dev_unlock(hdev);
2749	}
2750
2751	/* mgmt_index_removed should take care of emptying the
2752	 * pending list */
2753	BUG_ON(!list_empty(&hdev->mgmt_pending));
2754
2755	hci_sock_dev_event(hdev, HCI_DEV_UNREG);
2756
2757	if (hdev->rfkill) {
2758		rfkill_unregister(hdev->rfkill);
2759		rfkill_destroy(hdev->rfkill);
2760	}
2761
2762	device_del(&hdev->dev);
2763	/* Actual cleanup is deferred until hci_release_dev(). */
2764	hci_dev_put(hdev);
2765}
2766EXPORT_SYMBOL(hci_unregister_dev);
2767
2768/* Release HCI device */
2769void hci_release_dev(struct hci_dev *hdev)
2770{
2771	debugfs_remove_recursive(hdev->debugfs);
2772	kfree_const(hdev->hw_info);
2773	kfree_const(hdev->fw_info);
2774
2775	destroy_workqueue(hdev->workqueue);
2776	destroy_workqueue(hdev->req_workqueue);
2777
2778	hci_dev_lock(hdev);
2779	hci_bdaddr_list_clear(&hdev->reject_list);
2780	hci_bdaddr_list_clear(&hdev->accept_list);
2781	hci_uuids_clear(hdev);
2782	hci_link_keys_clear(hdev);
2783	hci_smp_ltks_clear(hdev);
2784	hci_smp_irks_clear(hdev);
2785	hci_remote_oob_data_clear(hdev);
2786	hci_adv_instances_clear(hdev);
2787	hci_adv_monitors_clear(hdev);
2788	hci_bdaddr_list_clear(&hdev->le_accept_list);
2789	hci_bdaddr_list_clear(&hdev->le_resolv_list);
2790	hci_conn_params_clear_all(hdev);
2791	hci_discovery_filter_clear(hdev);
2792	hci_blocked_keys_clear(hdev);
2793	hci_codec_list_clear(&hdev->local_codecs);
2794	hci_dev_unlock(hdev);
2795
2796	ida_destroy(&hdev->unset_handle_ida);
2797	ida_simple_remove(&hci_index_ida, hdev->id);
2798	kfree_skb(hdev->sent_cmd);
2799	kfree_skb(hdev->req_skb);
2800	kfree_skb(hdev->recv_event);
2801	kfree(hdev);
2802}
2803EXPORT_SYMBOL(hci_release_dev);
2804
2805int hci_register_suspend_notifier(struct hci_dev *hdev)
2806{
2807	int ret = 0;
2808
2809	if (!hdev->suspend_notifier.notifier_call &&
2810	    !test_bit(HCI_QUIRK_NO_SUSPEND_NOTIFIER, &hdev->quirks)) {
2811		hdev->suspend_notifier.notifier_call = hci_suspend_notifier;
2812		ret = register_pm_notifier(&hdev->suspend_notifier);
2813	}
2814
2815	return ret;
2816}
2817
2818int hci_unregister_suspend_notifier(struct hci_dev *hdev)
2819{
2820	int ret = 0;
2821
2822	if (hdev->suspend_notifier.notifier_call) {
2823		ret = unregister_pm_notifier(&hdev->suspend_notifier);
2824		if (!ret)
2825			hdev->suspend_notifier.notifier_call = NULL;
2826	}
2827
2828	return ret;
2829}
2830
2831/* Cancel ongoing command synchronously:
2832 *
2833 * - Cancel command timer
2834 * - Reset command counter
2835 * - Cancel command request
2836 */
2837static void hci_cancel_cmd_sync(struct hci_dev *hdev, int err)
2838{
2839	bt_dev_dbg(hdev, "err 0x%2.2x", err);
2840
2841	cancel_delayed_work_sync(&hdev->cmd_timer);
2842	cancel_delayed_work_sync(&hdev->ncmd_timer);
2843	atomic_set(&hdev->cmd_cnt, 1);
2844
2845	hci_cmd_sync_cancel_sync(hdev, -err);
2846}
2847
2848/* Suspend HCI device */
2849int hci_suspend_dev(struct hci_dev *hdev)
2850{
2851	int ret;
2852
2853	bt_dev_dbg(hdev, "");
2854
2855	/* Suspend should only act on when powered. */
2856	if (!hdev_is_powered(hdev) ||
2857	    hci_dev_test_flag(hdev, HCI_UNREGISTER))
2858		return 0;
2859
2860	/* If powering down don't attempt to suspend */
2861	if (mgmt_powering_down(hdev))
2862		return 0;
2863
2864	/* Cancel potentially blocking sync operation before suspend */
2865	hci_cancel_cmd_sync(hdev, -EHOSTDOWN);
2866
2867	hci_req_sync_lock(hdev);
2868	ret = hci_suspend_sync(hdev);
2869	hci_req_sync_unlock(hdev);
2870
2871	hci_clear_wake_reason(hdev);
2872	mgmt_suspending(hdev, hdev->suspend_state);
2873
2874	hci_sock_dev_event(hdev, HCI_DEV_SUSPEND);
2875	return ret;
2876}
2877EXPORT_SYMBOL(hci_suspend_dev);
2878
2879/* Resume HCI device */
2880int hci_resume_dev(struct hci_dev *hdev)
2881{
2882	int ret;
2883
2884	bt_dev_dbg(hdev, "");
2885
2886	/* Resume should only act on when powered. */
2887	if (!hdev_is_powered(hdev) ||
2888	    hci_dev_test_flag(hdev, HCI_UNREGISTER))
2889		return 0;
2890
2891	/* If powering down don't attempt to resume */
2892	if (mgmt_powering_down(hdev))
2893		return 0;
2894
2895	hci_req_sync_lock(hdev);
2896	ret = hci_resume_sync(hdev);
2897	hci_req_sync_unlock(hdev);
2898
2899	mgmt_resuming(hdev, hdev->wake_reason, &hdev->wake_addr,
2900		      hdev->wake_addr_type);
2901
2902	hci_sock_dev_event(hdev, HCI_DEV_RESUME);
2903	return ret;
2904}
2905EXPORT_SYMBOL(hci_resume_dev);
2906
2907/* Reset HCI device */
2908int hci_reset_dev(struct hci_dev *hdev)
2909{
2910	static const u8 hw_err[] = { HCI_EV_HARDWARE_ERROR, 0x01, 0x00 };
2911	struct sk_buff *skb;
2912
2913	skb = bt_skb_alloc(3, GFP_ATOMIC);
2914	if (!skb)
2915		return -ENOMEM;
2916
2917	hci_skb_pkt_type(skb) = HCI_EVENT_PKT;
2918	skb_put_data(skb, hw_err, 3);
2919
2920	bt_dev_err(hdev, "Injecting HCI hardware error event");
2921
2922	/* Send Hardware Error to upper stack */
2923	return hci_recv_frame(hdev, skb);
2924}
2925EXPORT_SYMBOL(hci_reset_dev);
2926
2927/* Receive frame from HCI drivers */
2928int hci_recv_frame(struct hci_dev *hdev, struct sk_buff *skb)
2929{
2930	if (!hdev || (!test_bit(HCI_UP, &hdev->flags)
2931		      && !test_bit(HCI_INIT, &hdev->flags))) {
2932		kfree_skb(skb);
2933		return -ENXIO;
2934	}
2935
2936	switch (hci_skb_pkt_type(skb)) {
2937	case HCI_EVENT_PKT:
2938		break;
2939	case HCI_ACLDATA_PKT:
2940		/* Detect if ISO packet has been sent as ACL */
2941		if (hci_conn_num(hdev, ISO_LINK)) {
2942			__u16 handle = __le16_to_cpu(hci_acl_hdr(skb)->handle);
2943			__u8 type;
2944
2945			type = hci_conn_lookup_type(hdev, hci_handle(handle));
2946			if (type == ISO_LINK)
2947				hci_skb_pkt_type(skb) = HCI_ISODATA_PKT;
2948		}
2949		break;
2950	case HCI_SCODATA_PKT:
2951		break;
2952	case HCI_ISODATA_PKT:
2953		break;
2954	default:
2955		kfree_skb(skb);
2956		return -EINVAL;
2957	}
2958
2959	/* Incoming skb */
2960	bt_cb(skb)->incoming = 1;
2961
2962	/* Time stamp */
2963	__net_timestamp(skb);
2964
2965	skb_queue_tail(&hdev->rx_q, skb);
2966	queue_work(hdev->workqueue, &hdev->rx_work);
2967
2968	return 0;
2969}
2970EXPORT_SYMBOL(hci_recv_frame);
2971
2972/* Receive diagnostic message from HCI drivers */
2973int hci_recv_diag(struct hci_dev *hdev, struct sk_buff *skb)
2974{
2975	/* Mark as diagnostic packet */
2976	hci_skb_pkt_type(skb) = HCI_DIAG_PKT;
2977
2978	/* Time stamp */
2979	__net_timestamp(skb);
2980
2981	skb_queue_tail(&hdev->rx_q, skb);
2982	queue_work(hdev->workqueue, &hdev->rx_work);
2983
2984	return 0;
2985}
2986EXPORT_SYMBOL(hci_recv_diag);
2987
2988void hci_set_hw_info(struct hci_dev *hdev, const char *fmt, ...)
2989{
2990	va_list vargs;
2991
2992	va_start(vargs, fmt);
2993	kfree_const(hdev->hw_info);
2994	hdev->hw_info = kvasprintf_const(GFP_KERNEL, fmt, vargs);
2995	va_end(vargs);
2996}
2997EXPORT_SYMBOL(hci_set_hw_info);
2998
2999void hci_set_fw_info(struct hci_dev *hdev, const char *fmt, ...)
3000{
3001	va_list vargs;
3002
3003	va_start(vargs, fmt);
3004	kfree_const(hdev->fw_info);
3005	hdev->fw_info = kvasprintf_const(GFP_KERNEL, fmt, vargs);
3006	va_end(vargs);
3007}
3008EXPORT_SYMBOL(hci_set_fw_info);
3009
3010/* ---- Interface to upper protocols ---- */
3011
3012int hci_register_cb(struct hci_cb *cb)
3013{
3014	BT_DBG("%p name %s", cb, cb->name);
3015
3016	mutex_lock(&hci_cb_list_lock);
3017	list_add_tail(&cb->list, &hci_cb_list);
3018	mutex_unlock(&hci_cb_list_lock);
3019
3020	return 0;
3021}
3022EXPORT_SYMBOL(hci_register_cb);
3023
3024int hci_unregister_cb(struct hci_cb *cb)
3025{
3026	BT_DBG("%p name %s", cb, cb->name);
3027
3028	mutex_lock(&hci_cb_list_lock);
3029	list_del(&cb->list);
3030	mutex_unlock(&hci_cb_list_lock);
3031
3032	return 0;
3033}
3034EXPORT_SYMBOL(hci_unregister_cb);
3035
3036static int hci_send_frame(struct hci_dev *hdev, struct sk_buff *skb)
3037{
3038	int err;
3039
3040	BT_DBG("%s type %d len %d", hdev->name, hci_skb_pkt_type(skb),
3041	       skb->len);
3042
3043	/* Time stamp */
3044	__net_timestamp(skb);
3045
3046	/* Send copy to monitor */
3047	hci_send_to_monitor(hdev, skb);
3048
3049	if (atomic_read(&hdev->promisc)) {
3050		/* Send copy to the sockets */
3051		hci_send_to_sock(hdev, skb);
3052	}
3053
3054	/* Get rid of skb owner, prior to sending to the driver. */
3055	skb_orphan(skb);
3056
3057	if (!test_bit(HCI_RUNNING, &hdev->flags)) {
3058		kfree_skb(skb);
3059		return -EINVAL;
3060	}
3061
3062	err = hdev->send(hdev, skb);
3063	if (err < 0) {
3064		bt_dev_err(hdev, "sending frame failed (%d)", err);
3065		kfree_skb(skb);
3066		return err;
3067	}
3068
3069	return 0;
3070}
3071
3072/* Send HCI command */
3073int hci_send_cmd(struct hci_dev *hdev, __u16 opcode, __u32 plen,
3074		 const void *param)
3075{
3076	struct sk_buff *skb;
3077
3078	BT_DBG("%s opcode 0x%4.4x plen %d", hdev->name, opcode, plen);
3079
3080	skb = hci_prepare_cmd(hdev, opcode, plen, param);
3081	if (!skb) {
3082		bt_dev_err(hdev, "no memory for command");
3083		return -ENOMEM;
3084	}
3085
3086	/* Stand-alone HCI commands must be flagged as
3087	 * single-command requests.
3088	 */
3089	bt_cb(skb)->hci.req_flags |= HCI_REQ_START;
3090
3091	skb_queue_tail(&hdev->cmd_q, skb);
3092	queue_work(hdev->workqueue, &hdev->cmd_work);
3093
3094	return 0;
3095}
3096
3097int __hci_cmd_send(struct hci_dev *hdev, u16 opcode, u32 plen,
3098		   const void *param)
3099{
3100	struct sk_buff *skb;
3101
3102	if (hci_opcode_ogf(opcode) != 0x3f) {
3103		/* A controller receiving a command shall respond with either
3104		 * a Command Status Event or a Command Complete Event.
3105		 * Therefore, all standard HCI commands must be sent via the
3106		 * standard API, using hci_send_cmd or hci_cmd_sync helpers.
3107		 * Some vendors do not comply with this rule for vendor-specific
3108		 * commands and do not return any event. We want to support
3109		 * unresponded commands for such cases only.
3110		 */
3111		bt_dev_err(hdev, "unresponded command not supported");
3112		return -EINVAL;
3113	}
3114
3115	skb = hci_prepare_cmd(hdev, opcode, plen, param);
3116	if (!skb) {
3117		bt_dev_err(hdev, "no memory for command (opcode 0x%4.4x)",
3118			   opcode);
3119		return -ENOMEM;
3120	}
3121
3122	hci_send_frame(hdev, skb);
3123
3124	return 0;
3125}
3126EXPORT_SYMBOL(__hci_cmd_send);
3127
3128/* Get data from the previously sent command */
3129static void *hci_cmd_data(struct sk_buff *skb, __u16 opcode)
3130{
3131	struct hci_command_hdr *hdr;
3132
3133	if (!skb || skb->len < HCI_COMMAND_HDR_SIZE)
3134		return NULL;
3135
3136	hdr = (void *)skb->data;
3137
3138	if (hdr->opcode != cpu_to_le16(opcode))
3139		return NULL;
3140
3141	return skb->data + HCI_COMMAND_HDR_SIZE;
3142}
3143
3144/* Get data from the previously sent command */
3145void *hci_sent_cmd_data(struct hci_dev *hdev, __u16 opcode)
3146{
3147	void *data;
3148
3149	/* Check if opcode matches last sent command */
3150	data = hci_cmd_data(hdev->sent_cmd, opcode);
3151	if (!data)
3152		/* Check if opcode matches last request */
3153		data = hci_cmd_data(hdev->req_skb, opcode);
3154
3155	return data;
3156}
3157
3158/* Get data from last received event */
3159void *hci_recv_event_data(struct hci_dev *hdev, __u8 event)
3160{
3161	struct hci_event_hdr *hdr;
3162	int offset;
3163
3164	if (!hdev->recv_event)
3165		return NULL;
3166
3167	hdr = (void *)hdev->recv_event->data;
3168	offset = sizeof(*hdr);
3169
3170	if (hdr->evt != event) {
3171		/* In case of LE metaevent check the subevent match */
3172		if (hdr->evt == HCI_EV_LE_META) {
3173			struct hci_ev_le_meta *ev;
3174
3175			ev = (void *)hdev->recv_event->data + offset;
3176			offset += sizeof(*ev);
3177			if (ev->subevent == event)
3178				goto found;
3179		}
3180		return NULL;
3181	}
3182
3183found:
3184	bt_dev_dbg(hdev, "event 0x%2.2x", event);
3185
3186	return hdev->recv_event->data + offset;
3187}
3188
3189/* Send ACL data */
3190static void hci_add_acl_hdr(struct sk_buff *skb, __u16 handle, __u16 flags)
3191{
3192	struct hci_acl_hdr *hdr;
3193	int len = skb->len;
3194
3195	skb_push(skb, HCI_ACL_HDR_SIZE);
3196	skb_reset_transport_header(skb);
3197	hdr = (struct hci_acl_hdr *)skb_transport_header(skb);
3198	hdr->handle = cpu_to_le16(hci_handle_pack(handle, flags));
3199	hdr->dlen   = cpu_to_le16(len);
3200}
3201
3202static void hci_queue_acl(struct hci_chan *chan, struct sk_buff_head *queue,
3203			  struct sk_buff *skb, __u16 flags)
3204{
3205	struct hci_conn *conn = chan->conn;
3206	struct hci_dev *hdev = conn->hdev;
3207	struct sk_buff *list;
3208
3209	skb->len = skb_headlen(skb);
3210	skb->data_len = 0;
3211
3212	hci_skb_pkt_type(skb) = HCI_ACLDATA_PKT;
3213
3214	switch (hdev->dev_type) {
3215	case HCI_PRIMARY:
3216		hci_add_acl_hdr(skb, conn->handle, flags);
3217		break;
3218	case HCI_AMP:
3219		hci_add_acl_hdr(skb, chan->handle, flags);
3220		break;
3221	default:
3222		bt_dev_err(hdev, "unknown dev_type %d", hdev->dev_type);
3223		return;
3224	}
3225
3226	list = skb_shinfo(skb)->frag_list;
3227	if (!list) {
3228		/* Non fragmented */
3229		BT_DBG("%s nonfrag skb %p len %d", hdev->name, skb, skb->len);
3230
3231		skb_queue_tail(queue, skb);
3232	} else {
3233		/* Fragmented */
3234		BT_DBG("%s frag %p len %d", hdev->name, skb, skb->len);
3235
3236		skb_shinfo(skb)->frag_list = NULL;
3237
3238		/* Queue all fragments atomically. We need to use spin_lock_bh
3239		 * here because of 6LoWPAN links, as there this function is
3240		 * called from softirq and using normal spin lock could cause
3241		 * deadlocks.
3242		 */
3243		spin_lock_bh(&queue->lock);
3244
3245		__skb_queue_tail(queue, skb);
3246
3247		flags &= ~ACL_START;
3248		flags |= ACL_CONT;
3249		do {
3250			skb = list; list = list->next;
3251
3252			hci_skb_pkt_type(skb) = HCI_ACLDATA_PKT;
3253			hci_add_acl_hdr(skb, conn->handle, flags);
3254
3255			BT_DBG("%s frag %p len %d", hdev->name, skb, skb->len);
3256
3257			__skb_queue_tail(queue, skb);
3258		} while (list);
3259
3260		spin_unlock_bh(&queue->lock);
3261	}
3262}
3263
3264void hci_send_acl(struct hci_chan *chan, struct sk_buff *skb, __u16 flags)
3265{
3266	struct hci_dev *hdev = chan->conn->hdev;
3267
3268	BT_DBG("%s chan %p flags 0x%4.4x", hdev->name, chan, flags);
3269
3270	hci_queue_acl(chan, &chan->data_q, skb, flags);
3271
3272	queue_work(hdev->workqueue, &hdev->tx_work);
3273}
3274
3275/* Send SCO data */
3276void hci_send_sco(struct hci_conn *conn, struct sk_buff *skb)
3277{
3278	struct hci_dev *hdev = conn->hdev;
3279	struct hci_sco_hdr hdr;
3280
3281	BT_DBG("%s len %d", hdev->name, skb->len);
3282
3283	hdr.handle = cpu_to_le16(conn->handle);
3284	hdr.dlen   = skb->len;
3285
3286	skb_push(skb, HCI_SCO_HDR_SIZE);
3287	skb_reset_transport_header(skb);
3288	memcpy(skb_transport_header(skb), &hdr, HCI_SCO_HDR_SIZE);
3289
3290	hci_skb_pkt_type(skb) = HCI_SCODATA_PKT;
3291
3292	skb_queue_tail(&conn->data_q, skb);
3293	queue_work(hdev->workqueue, &hdev->tx_work);
3294}
3295
3296/* Send ISO data */
3297static void hci_add_iso_hdr(struct sk_buff *skb, __u16 handle, __u8 flags)
3298{
3299	struct hci_iso_hdr *hdr;
3300	int len = skb->len;
3301
3302	skb_push(skb, HCI_ISO_HDR_SIZE);
3303	skb_reset_transport_header(skb);
3304	hdr = (struct hci_iso_hdr *)skb_transport_header(skb);
3305	hdr->handle = cpu_to_le16(hci_handle_pack(handle, flags));
3306	hdr->dlen   = cpu_to_le16(len);
3307}
3308
3309static void hci_queue_iso(struct hci_conn *conn, struct sk_buff_head *queue,
3310			  struct sk_buff *skb)
3311{
3312	struct hci_dev *hdev = conn->hdev;
3313	struct sk_buff *list;
3314	__u16 flags;
3315
3316	skb->len = skb_headlen(skb);
3317	skb->data_len = 0;
3318
3319	hci_skb_pkt_type(skb) = HCI_ISODATA_PKT;
3320
3321	list = skb_shinfo(skb)->frag_list;
3322
3323	flags = hci_iso_flags_pack(list ? ISO_START : ISO_SINGLE, 0x00);
3324	hci_add_iso_hdr(skb, conn->handle, flags);
3325
3326	if (!list) {
3327		/* Non fragmented */
3328		BT_DBG("%s nonfrag skb %p len %d", hdev->name, skb, skb->len);
3329
3330		skb_queue_tail(queue, skb);
3331	} else {
3332		/* Fragmented */
3333		BT_DBG("%s frag %p len %d", hdev->name, skb, skb->len);
3334
3335		skb_shinfo(skb)->frag_list = NULL;
3336
3337		__skb_queue_tail(queue, skb);
3338
3339		do {
3340			skb = list; list = list->next;
3341
3342			hci_skb_pkt_type(skb) = HCI_ISODATA_PKT;
3343			flags = hci_iso_flags_pack(list ? ISO_CONT : ISO_END,
3344						   0x00);
3345			hci_add_iso_hdr(skb, conn->handle, flags);
3346
3347			BT_DBG("%s frag %p len %d", hdev->name, skb, skb->len);
3348
3349			__skb_queue_tail(queue, skb);
3350		} while (list);
3351	}
3352}
3353
3354void hci_send_iso(struct hci_conn *conn, struct sk_buff *skb)
3355{
3356	struct hci_dev *hdev = conn->hdev;
3357
3358	BT_DBG("%s len %d", hdev->name, skb->len);
3359
3360	hci_queue_iso(conn, &conn->data_q, skb);
3361
3362	queue_work(hdev->workqueue, &hdev->tx_work);
3363}
3364
3365/* ---- HCI TX task (outgoing data) ---- */
3366
3367/* HCI Connection scheduler */
3368static inline void hci_quote_sent(struct hci_conn *conn, int num, int *quote)
3369{
3370	struct hci_dev *hdev;
3371	int cnt, q;
3372
3373	if (!conn) {
3374		*quote = 0;
3375		return;
3376	}
3377
3378	hdev = conn->hdev;
3379
3380	switch (conn->type) {
3381	case ACL_LINK:
3382		cnt = hdev->acl_cnt;
3383		break;
3384	case AMP_LINK:
3385		cnt = hdev->block_cnt;
3386		break;
3387	case SCO_LINK:
3388	case ESCO_LINK:
3389		cnt = hdev->sco_cnt;
3390		break;
3391	case LE_LINK:
3392		cnt = hdev->le_mtu ? hdev->le_cnt : hdev->acl_cnt;
3393		break;
3394	case ISO_LINK:
3395		cnt = hdev->iso_mtu ? hdev->iso_cnt :
3396			hdev->le_mtu ? hdev->le_cnt : hdev->acl_cnt;
3397		break;
3398	default:
3399		cnt = 0;
3400		bt_dev_err(hdev, "unknown link type %d", conn->type);
3401	}
3402
3403	q = cnt / num;
3404	*quote = q ? q : 1;
3405}
3406
3407static struct hci_conn *hci_low_sent(struct hci_dev *hdev, __u8 type,
3408				     int *quote)
3409{
3410	struct hci_conn_hash *h = &hdev->conn_hash;
3411	struct hci_conn *conn = NULL, *c;
3412	unsigned int num = 0, min = ~0;
3413
3414	/* We don't have to lock device here. Connections are always
3415	 * added and removed with TX task disabled. */
3416
3417	rcu_read_lock();
3418
3419	list_for_each_entry_rcu(c, &h->list, list) {
3420		if (c->type != type || skb_queue_empty(&c->data_q))
3421			continue;
3422
3423		if (c->state != BT_CONNECTED && c->state != BT_CONFIG)
3424			continue;
3425
3426		num++;
3427
3428		if (c->sent < min) {
3429			min  = c->sent;
3430			conn = c;
3431		}
3432
3433		if (hci_conn_num(hdev, type) == num)
3434			break;
3435	}
3436
3437	rcu_read_unlock();
3438
3439	hci_quote_sent(conn, num, quote);
3440
3441	BT_DBG("conn %p quote %d", conn, *quote);
3442	return conn;
3443}
3444
3445static void hci_link_tx_to(struct hci_dev *hdev, __u8 type)
3446{
3447	struct hci_conn_hash *h = &hdev->conn_hash;
3448	struct hci_conn *c;
3449
3450	bt_dev_err(hdev, "link tx timeout");
3451
3452	rcu_read_lock();
3453
3454	/* Kill stalled connections */
3455	list_for_each_entry_rcu(c, &h->list, list) {
3456		if (c->type == type && c->sent) {
3457			bt_dev_err(hdev, "killing stalled connection %pMR",
3458				   &c->dst);
3459			/* hci_disconnect might sleep, so, we have to release
3460			 * the RCU read lock before calling it.
3461			 */
3462			rcu_read_unlock();
3463			hci_disconnect(c, HCI_ERROR_REMOTE_USER_TERM);
3464			rcu_read_lock();
3465		}
3466	}
3467
3468	rcu_read_unlock();
3469}
3470
3471static struct hci_chan *hci_chan_sent(struct hci_dev *hdev, __u8 type,
3472				      int *quote)
3473{
3474	struct hci_conn_hash *h = &hdev->conn_hash;
3475	struct hci_chan *chan = NULL;
3476	unsigned int num = 0, min = ~0, cur_prio = 0;
3477	struct hci_conn *conn;
3478	int conn_num = 0;
3479
3480	BT_DBG("%s", hdev->name);
3481
3482	rcu_read_lock();
3483
3484	list_for_each_entry_rcu(conn, &h->list, list) {
3485		struct hci_chan *tmp;
3486
3487		if (conn->type != type)
3488			continue;
3489
3490		if (conn->state != BT_CONNECTED && conn->state != BT_CONFIG)
3491			continue;
3492
3493		conn_num++;
3494
3495		list_for_each_entry_rcu(tmp, &conn->chan_list, list) {
3496			struct sk_buff *skb;
3497
3498			if (skb_queue_empty(&tmp->data_q))
3499				continue;
3500
3501			skb = skb_peek(&tmp->data_q);
3502			if (skb->priority < cur_prio)
3503				continue;
3504
3505			if (skb->priority > cur_prio) {
3506				num = 0;
3507				min = ~0;
3508				cur_prio = skb->priority;
3509			}
3510
3511			num++;
3512
3513			if (conn->sent < min) {
3514				min  = conn->sent;
3515				chan = tmp;
3516			}
3517		}
3518
3519		if (hci_conn_num(hdev, type) == conn_num)
3520			break;
3521	}
3522
3523	rcu_read_unlock();
3524
3525	if (!chan)
3526		return NULL;
3527
3528	hci_quote_sent(chan->conn, num, quote);
3529
3530	BT_DBG("chan %p quote %d", chan, *quote);
3531	return chan;
3532}
3533
3534static void hci_prio_recalculate(struct hci_dev *hdev, __u8 type)
3535{
3536	struct hci_conn_hash *h = &hdev->conn_hash;
3537	struct hci_conn *conn;
3538	int num = 0;
3539
3540	BT_DBG("%s", hdev->name);
3541
3542	rcu_read_lock();
3543
3544	list_for_each_entry_rcu(conn, &h->list, list) {
3545		struct hci_chan *chan;
3546
3547		if (conn->type != type)
3548			continue;
3549
3550		if (conn->state != BT_CONNECTED && conn->state != BT_CONFIG)
3551			continue;
3552
3553		num++;
3554
3555		list_for_each_entry_rcu(chan, &conn->chan_list, list) {
3556			struct sk_buff *skb;
3557
3558			if (chan->sent) {
3559				chan->sent = 0;
3560				continue;
3561			}
3562
3563			if (skb_queue_empty(&chan->data_q))
3564				continue;
3565
3566			skb = skb_peek(&chan->data_q);
3567			if (skb->priority >= HCI_PRIO_MAX - 1)
3568				continue;
3569
3570			skb->priority = HCI_PRIO_MAX - 1;
3571
3572			BT_DBG("chan %p skb %p promoted to %d", chan, skb,
3573			       skb->priority);
3574		}
3575
3576		if (hci_conn_num(hdev, type) == num)
3577			break;
3578	}
3579
3580	rcu_read_unlock();
3581
3582}
3583
3584static inline int __get_blocks(struct hci_dev *hdev, struct sk_buff *skb)
3585{
3586	/* Calculate count of blocks used by this packet */
3587	return DIV_ROUND_UP(skb->len - HCI_ACL_HDR_SIZE, hdev->block_len);
3588}
3589
3590static void __check_timeout(struct hci_dev *hdev, unsigned int cnt, u8 type)
3591{
3592	unsigned long last_tx;
3593
3594	if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED))
3595		return;
3596
3597	switch (type) {
3598	case LE_LINK:
3599		last_tx = hdev->le_last_tx;
3600		break;
3601	default:
3602		last_tx = hdev->acl_last_tx;
3603		break;
3604	}
3605
3606	/* tx timeout must be longer than maximum link supervision timeout
3607	 * (40.9 seconds)
3608	 */
3609	if (!cnt && time_after(jiffies, last_tx + HCI_ACL_TX_TIMEOUT))
3610		hci_link_tx_to(hdev, type);
3611}
3612
3613/* Schedule SCO */
3614static void hci_sched_sco(struct hci_dev *hdev)
3615{
3616	struct hci_conn *conn;
3617	struct sk_buff *skb;
3618	int quote;
3619
3620	BT_DBG("%s", hdev->name);
3621
3622	if (!hci_conn_num(hdev, SCO_LINK))
3623		return;
3624
3625	while (hdev->sco_cnt && (conn = hci_low_sent(hdev, SCO_LINK, &quote))) {
3626		while (quote-- && (skb = skb_dequeue(&conn->data_q))) {
3627			BT_DBG("skb %p len %d", skb, skb->len);
3628			hci_send_frame(hdev, skb);
3629
3630			conn->sent++;
3631			if (conn->sent == ~0)
3632				conn->sent = 0;
3633		}
3634	}
3635}
3636
3637static void hci_sched_esco(struct hci_dev *hdev)
3638{
3639	struct hci_conn *conn;
3640	struct sk_buff *skb;
3641	int quote;
3642
3643	BT_DBG("%s", hdev->name);
3644
3645	if (!hci_conn_num(hdev, ESCO_LINK))
3646		return;
3647
3648	while (hdev->sco_cnt && (conn = hci_low_sent(hdev, ESCO_LINK,
3649						     &quote))) {
3650		while (quote-- && (skb = skb_dequeue(&conn->data_q))) {
3651			BT_DBG("skb %p len %d", skb, skb->len);
3652			hci_send_frame(hdev, skb);
3653
3654			conn->sent++;
3655			if (conn->sent == ~0)
3656				conn->sent = 0;
3657		}
3658	}
3659}
3660
3661static void hci_sched_acl_pkt(struct hci_dev *hdev)
3662{
3663	unsigned int cnt = hdev->acl_cnt;
3664	struct hci_chan *chan;
3665	struct sk_buff *skb;
3666	int quote;
3667
3668	__check_timeout(hdev, cnt, ACL_LINK);
3669
3670	while (hdev->acl_cnt &&
3671	       (chan = hci_chan_sent(hdev, ACL_LINK, &quote))) {
3672		u32 priority = (skb_peek(&chan->data_q))->priority;
3673		while (quote-- && (skb = skb_peek(&chan->data_q))) {
3674			BT_DBG("chan %p skb %p len %d priority %u", chan, skb,
3675			       skb->len, skb->priority);
3676
3677			/* Stop if priority has changed */
3678			if (skb->priority < priority)
3679				break;
3680
3681			skb = skb_dequeue(&chan->data_q);
3682
3683			hci_conn_enter_active_mode(chan->conn,
3684						   bt_cb(skb)->force_active);
3685
3686			hci_send_frame(hdev, skb);
3687			hdev->acl_last_tx = jiffies;
3688
3689			hdev->acl_cnt--;
3690			chan->sent++;
3691			chan->conn->sent++;
3692
3693			/* Send pending SCO packets right away */
3694			hci_sched_sco(hdev);
3695			hci_sched_esco(hdev);
3696		}
3697	}
3698
3699	if (cnt != hdev->acl_cnt)
3700		hci_prio_recalculate(hdev, ACL_LINK);
3701}
3702
3703static void hci_sched_acl_blk(struct hci_dev *hdev)
3704{
3705	unsigned int cnt = hdev->block_cnt;
3706	struct hci_chan *chan;
3707	struct sk_buff *skb;
3708	int quote;
3709	u8 type;
3710
3711	BT_DBG("%s", hdev->name);
3712
3713	if (hdev->dev_type == HCI_AMP)
3714		type = AMP_LINK;
3715	else
3716		type = ACL_LINK;
3717
3718	__check_timeout(hdev, cnt, type);
3719
3720	while (hdev->block_cnt > 0 &&
3721	       (chan = hci_chan_sent(hdev, type, &quote))) {
3722		u32 priority = (skb_peek(&chan->data_q))->priority;
3723		while (quote > 0 && (skb = skb_peek(&chan->data_q))) {
3724			int blocks;
3725
3726			BT_DBG("chan %p skb %p len %d priority %u", chan, skb,
3727			       skb->len, skb->priority);
3728
3729			/* Stop if priority has changed */
3730			if (skb->priority < priority)
3731				break;
3732
3733			skb = skb_dequeue(&chan->data_q);
3734
3735			blocks = __get_blocks(hdev, skb);
3736			if (blocks > hdev->block_cnt)
3737				return;
3738
3739			hci_conn_enter_active_mode(chan->conn,
3740						   bt_cb(skb)->force_active);
3741
3742			hci_send_frame(hdev, skb);
3743			hdev->acl_last_tx = jiffies;
3744
3745			hdev->block_cnt -= blocks;
3746			quote -= blocks;
3747
3748			chan->sent += blocks;
3749			chan->conn->sent += blocks;
3750		}
3751	}
3752
3753	if (cnt != hdev->block_cnt)
3754		hci_prio_recalculate(hdev, type);
3755}
3756
3757static void hci_sched_acl(struct hci_dev *hdev)
3758{
3759	BT_DBG("%s", hdev->name);
3760
3761	/* No ACL link over BR/EDR controller */
3762	if (!hci_conn_num(hdev, ACL_LINK) && hdev->dev_type == HCI_PRIMARY)
3763		return;
3764
3765	/* No AMP link over AMP controller */
3766	if (!hci_conn_num(hdev, AMP_LINK) && hdev->dev_type == HCI_AMP)
3767		return;
3768
3769	switch (hdev->flow_ctl_mode) {
3770	case HCI_FLOW_CTL_MODE_PACKET_BASED:
3771		hci_sched_acl_pkt(hdev);
3772		break;
3773
3774	case HCI_FLOW_CTL_MODE_BLOCK_BASED:
3775		hci_sched_acl_blk(hdev);
3776		break;
3777	}
3778}
3779
3780static void hci_sched_le(struct hci_dev *hdev)
3781{
3782	struct hci_chan *chan;
3783	struct sk_buff *skb;
3784	int quote, cnt, tmp;
3785
3786	BT_DBG("%s", hdev->name);
3787
3788	if (!hci_conn_num(hdev, LE_LINK))
3789		return;
3790
3791	cnt = hdev->le_pkts ? hdev->le_cnt : hdev->acl_cnt;
3792
3793	__check_timeout(hdev, cnt, LE_LINK);
3794
3795	tmp = cnt;
3796	while (cnt && (chan = hci_chan_sent(hdev, LE_LINK, &quote))) {
3797		u32 priority = (skb_peek(&chan->data_q))->priority;
3798		while (quote-- && (skb = skb_peek(&chan->data_q))) {
3799			BT_DBG("chan %p skb %p len %d priority %u", chan, skb,
3800			       skb->len, skb->priority);
3801
3802			/* Stop if priority has changed */
3803			if (skb->priority < priority)
3804				break;
3805
3806			skb = skb_dequeue(&chan->data_q);
3807
3808			hci_send_frame(hdev, skb);
3809			hdev->le_last_tx = jiffies;
3810
3811			cnt--;
3812			chan->sent++;
3813			chan->conn->sent++;
3814
3815			/* Send pending SCO packets right away */
3816			hci_sched_sco(hdev);
3817			hci_sched_esco(hdev);
3818		}
3819	}
3820
3821	if (hdev->le_pkts)
3822		hdev->le_cnt = cnt;
3823	else
3824		hdev->acl_cnt = cnt;
3825
3826	if (cnt != tmp)
3827		hci_prio_recalculate(hdev, LE_LINK);
3828}
3829
3830/* Schedule CIS */
3831static void hci_sched_iso(struct hci_dev *hdev)
3832{
3833	struct hci_conn *conn;
3834	struct sk_buff *skb;
3835	int quote, *cnt;
3836
3837	BT_DBG("%s", hdev->name);
3838
3839	if (!hci_conn_num(hdev, ISO_LINK))
3840		return;
3841
3842	cnt = hdev->iso_pkts ? &hdev->iso_cnt :
3843		hdev->le_pkts ? &hdev->le_cnt : &hdev->acl_cnt;
3844	while (*cnt && (conn = hci_low_sent(hdev, ISO_LINK, &quote))) {
3845		while (quote-- && (skb = skb_dequeue(&conn->data_q))) {
3846			BT_DBG("skb %p len %d", skb, skb->len);
3847			hci_send_frame(hdev, skb);
3848
3849			conn->sent++;
3850			if (conn->sent == ~0)
3851				conn->sent = 0;
3852			(*cnt)--;
3853		}
3854	}
3855}
3856
3857static void hci_tx_work(struct work_struct *work)
3858{
3859	struct hci_dev *hdev = container_of(work, struct hci_dev, tx_work);
3860	struct sk_buff *skb;
3861
3862	BT_DBG("%s acl %d sco %d le %d iso %d", hdev->name, hdev->acl_cnt,
3863	       hdev->sco_cnt, hdev->le_cnt, hdev->iso_cnt);
3864
3865	if (!hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) {
3866		/* Schedule queues and send stuff to HCI driver */
3867		hci_sched_sco(hdev);
3868		hci_sched_esco(hdev);
3869		hci_sched_iso(hdev);
3870		hci_sched_acl(hdev);
3871		hci_sched_le(hdev);
3872	}
3873
3874	/* Send next queued raw (unknown type) packet */
3875	while ((skb = skb_dequeue(&hdev->raw_q)))
3876		hci_send_frame(hdev, skb);
3877}
3878
3879/* ----- HCI RX task (incoming data processing) ----- */
3880
3881/* ACL data packet */
3882static void hci_acldata_packet(struct hci_dev *hdev, struct sk_buff *skb)
3883{
3884	struct hci_acl_hdr *hdr = (void *) skb->data;
3885	struct hci_conn *conn;
3886	__u16 handle, flags;
3887
3888	skb_pull(skb, HCI_ACL_HDR_SIZE);
3889
3890	handle = __le16_to_cpu(hdr->handle);
3891	flags  = hci_flags(handle);
3892	handle = hci_handle(handle);
3893
3894	BT_DBG("%s len %d handle 0x%4.4x flags 0x%4.4x", hdev->name, skb->len,
3895	       handle, flags);
3896
3897	hdev->stat.acl_rx++;
3898
3899	hci_dev_lock(hdev);
3900	conn = hci_conn_hash_lookup_handle(hdev, handle);
3901	hci_dev_unlock(hdev);
3902
3903	if (conn) {
3904		hci_conn_enter_active_mode(conn, BT_POWER_FORCE_ACTIVE_OFF);
3905
3906		/* Send to upper protocol */
3907		l2cap_recv_acldata(conn, skb, flags);
3908		return;
3909	} else {
3910		bt_dev_err(hdev, "ACL packet for unknown connection handle %d",
3911			   handle);
3912	}
3913
3914	kfree_skb(skb);
3915}
3916
3917/* SCO data packet */
3918static void hci_scodata_packet(struct hci_dev *hdev, struct sk_buff *skb)
3919{
3920	struct hci_sco_hdr *hdr = (void *) skb->data;
3921	struct hci_conn *conn;
3922	__u16 handle, flags;
3923
3924	skb_pull(skb, HCI_SCO_HDR_SIZE);
3925
3926	handle = __le16_to_cpu(hdr->handle);
3927	flags  = hci_flags(handle);
3928	handle = hci_handle(handle);
3929
3930	BT_DBG("%s len %d handle 0x%4.4x flags 0x%4.4x", hdev->name, skb->len,
3931	       handle, flags);
3932
3933	hdev->stat.sco_rx++;
3934
3935	hci_dev_lock(hdev);
3936	conn = hci_conn_hash_lookup_handle(hdev, handle);
3937	hci_dev_unlock(hdev);
3938
3939	if (conn) {
3940		/* Send to upper protocol */
3941		hci_skb_pkt_status(skb) = flags & 0x03;
3942		sco_recv_scodata(conn, skb);
3943		return;
3944	} else {
3945		bt_dev_err_ratelimited(hdev, "SCO packet for unknown connection handle %d",
3946				       handle);
3947	}
3948
3949	kfree_skb(skb);
3950}
3951
3952static void hci_isodata_packet(struct hci_dev *hdev, struct sk_buff *skb)
3953{
3954	struct hci_iso_hdr *hdr;
3955	struct hci_conn *conn;
3956	__u16 handle, flags;
3957
3958	hdr = skb_pull_data(skb, sizeof(*hdr));
3959	if (!hdr) {
3960		bt_dev_err(hdev, "ISO packet too small");
3961		goto drop;
3962	}
3963
3964	handle = __le16_to_cpu(hdr->handle);
3965	flags  = hci_flags(handle);
3966	handle = hci_handle(handle);
3967
3968	bt_dev_dbg(hdev, "len %d handle 0x%4.4x flags 0x%4.4x", skb->len,
3969		   handle, flags);
3970
3971	hci_dev_lock(hdev);
3972	conn = hci_conn_hash_lookup_handle(hdev, handle);
3973	hci_dev_unlock(hdev);
3974
3975	if (!conn) {
3976		bt_dev_err(hdev, "ISO packet for unknown connection handle %d",
3977			   handle);
3978		goto drop;
3979	}
3980
3981	/* Send to upper protocol */
3982	iso_recv(conn, skb, flags);
3983	return;
3984
3985drop:
3986	kfree_skb(skb);
3987}
3988
3989static bool hci_req_is_complete(struct hci_dev *hdev)
3990{
3991	struct sk_buff *skb;
3992
3993	skb = skb_peek(&hdev->cmd_q);
3994	if (!skb)
3995		return true;
3996
3997	return (bt_cb(skb)->hci.req_flags & HCI_REQ_START);
3998}
3999
4000static void hci_resend_last(struct hci_dev *hdev)
4001{
4002	struct hci_command_hdr *sent;
4003	struct sk_buff *skb;
4004	u16 opcode;
4005
4006	if (!hdev->sent_cmd)
4007		return;
4008
4009	sent = (void *) hdev->sent_cmd->data;
4010	opcode = __le16_to_cpu(sent->opcode);
4011	if (opcode == HCI_OP_RESET)
4012		return;
4013
4014	skb = skb_clone(hdev->sent_cmd, GFP_KERNEL);
4015	if (!skb)
4016		return;
4017
4018	skb_queue_head(&hdev->cmd_q, skb);
4019	queue_work(hdev->workqueue, &hdev->cmd_work);
4020}
4021
4022void hci_req_cmd_complete(struct hci_dev *hdev, u16 opcode, u8 status,
4023			  hci_req_complete_t *req_complete,
4024			  hci_req_complete_skb_t *req_complete_skb)
4025{
4026	struct sk_buff *skb;
4027	unsigned long flags;
4028
4029	BT_DBG("opcode 0x%04x status 0x%02x", opcode, status);
4030
4031	/* If the completed command doesn't match the last one that was
4032	 * sent we need to do special handling of it.
4033	 */
4034	if (!hci_sent_cmd_data(hdev, opcode)) {
4035		/* Some CSR based controllers generate a spontaneous
4036		 * reset complete event during init and any pending
4037		 * command will never be completed. In such a case we
4038		 * need to resend whatever was the last sent
4039		 * command.
4040		 */
4041		if (test_bit(HCI_INIT, &hdev->flags) && opcode == HCI_OP_RESET)
4042			hci_resend_last(hdev);
4043
4044		return;
4045	}
4046
4047	/* If we reach this point this event matches the last command sent */
4048	hci_dev_clear_flag(hdev, HCI_CMD_PENDING);
4049
4050	/* If the command succeeded and there's still more commands in
4051	 * this request the request is not yet complete.
4052	 */
4053	if (!status && !hci_req_is_complete(hdev))
4054		return;
4055
4056	skb = hdev->req_skb;
4057
4058	/* If this was the last command in a request the complete
4059	 * callback would be found in hdev->req_skb instead of the
4060	 * command queue (hdev->cmd_q).
4061	 */
4062	if (skb && bt_cb(skb)->hci.req_flags & HCI_REQ_SKB) {
4063		*req_complete_skb = bt_cb(skb)->hci.req_complete_skb;
4064		return;
4065	}
4066
4067	if (skb && bt_cb(skb)->hci.req_complete) {
4068		*req_complete = bt_cb(skb)->hci.req_complete;
4069		return;
4070	}
4071
4072	/* Remove all pending commands belonging to this request */
4073	spin_lock_irqsave(&hdev->cmd_q.lock, flags);
4074	while ((skb = __skb_dequeue(&hdev->cmd_q))) {
4075		if (bt_cb(skb)->hci.req_flags & HCI_REQ_START) {
4076			__skb_queue_head(&hdev->cmd_q, skb);
4077			break;
4078		}
4079
4080		if (bt_cb(skb)->hci.req_flags & HCI_REQ_SKB)
4081			*req_complete_skb = bt_cb(skb)->hci.req_complete_skb;
4082		else
4083			*req_complete = bt_cb(skb)->hci.req_complete;
4084		dev_kfree_skb_irq(skb);
4085	}
4086	spin_unlock_irqrestore(&hdev->cmd_q.lock, flags);
4087}
4088
4089static void hci_rx_work(struct work_struct *work)
4090{
4091	struct hci_dev *hdev = container_of(work, struct hci_dev, rx_work);
4092	struct sk_buff *skb;
4093
4094	BT_DBG("%s", hdev->name);
4095
4096	/* The kcov_remote functions used for collecting packet parsing
4097	 * coverage information from this background thread and associate
4098	 * the coverage with the syscall's thread which originally injected
4099	 * the packet. This helps fuzzing the kernel.
4100	 */
4101	for (; (skb = skb_dequeue(&hdev->rx_q)); kcov_remote_stop()) {
4102		kcov_remote_start_common(skb_get_kcov_handle(skb));
4103
4104		/* Send copy to monitor */
4105		hci_send_to_monitor(hdev, skb);
4106
4107		if (atomic_read(&hdev->promisc)) {
4108			/* Send copy to the sockets */
4109			hci_send_to_sock(hdev, skb);
4110		}
4111
4112		/* If the device has been opened in HCI_USER_CHANNEL,
4113		 * the userspace has exclusive access to device.
4114		 * When device is HCI_INIT, we still need to process
4115		 * the data packets to the driver in order
4116		 * to complete its setup().
4117		 */
4118		if (hci_dev_test_flag(hdev, HCI_USER_CHANNEL) &&
4119		    !test_bit(HCI_INIT, &hdev->flags)) {
4120			kfree_skb(skb);
4121			continue;
4122		}
4123
4124		if (test_bit(HCI_INIT, &hdev->flags)) {
4125			/* Don't process data packets in this states. */
4126			switch (hci_skb_pkt_type(skb)) {
4127			case HCI_ACLDATA_PKT:
4128			case HCI_SCODATA_PKT:
4129			case HCI_ISODATA_PKT:
4130				kfree_skb(skb);
4131				continue;
4132			}
4133		}
4134
4135		/* Process frame */
4136		switch (hci_skb_pkt_type(skb)) {
4137		case HCI_EVENT_PKT:
4138			BT_DBG("%s Event packet", hdev->name);
4139			hci_event_packet(hdev, skb);
4140			break;
4141
4142		case HCI_ACLDATA_PKT:
4143			BT_DBG("%s ACL data packet", hdev->name);
4144			hci_acldata_packet(hdev, skb);
4145			break;
4146
4147		case HCI_SCODATA_PKT:
4148			BT_DBG("%s SCO data packet", hdev->name);
4149			hci_scodata_packet(hdev, skb);
4150			break;
4151
4152		case HCI_ISODATA_PKT:
4153			BT_DBG("%s ISO data packet", hdev->name);
4154			hci_isodata_packet(hdev, skb);
4155			break;
4156
4157		default:
4158			kfree_skb(skb);
4159			break;
4160		}
4161	}
4162}
4163
4164static void hci_send_cmd_sync(struct hci_dev *hdev, struct sk_buff *skb)
4165{
4166	int err;
4167
4168	bt_dev_dbg(hdev, "skb %p", skb);
4169
4170	kfree_skb(hdev->sent_cmd);
4171
4172	hdev->sent_cmd = skb_clone(skb, GFP_KERNEL);
4173	if (!hdev->sent_cmd) {
4174		skb_queue_head(&hdev->cmd_q, skb);
4175		queue_work(hdev->workqueue, &hdev->cmd_work);
4176		return;
4177	}
4178
4179	err = hci_send_frame(hdev, skb);
4180	if (err < 0) {
4181		hci_cmd_sync_cancel_sync(hdev, err);
4182		return;
4183	}
4184
4185	if (hci_req_status_pend(hdev) &&
4186	    !hci_dev_test_and_set_flag(hdev, HCI_CMD_PENDING)) {
4187		kfree_skb(hdev->req_skb);
4188		hdev->req_skb = skb_clone(hdev->sent_cmd, GFP_KERNEL);
4189	}
4190
4191	atomic_dec(&hdev->cmd_cnt);
4192}
4193
4194static void hci_cmd_work(struct work_struct *work)
4195{
4196	struct hci_dev *hdev = container_of(work, struct hci_dev, cmd_work);
4197	struct sk_buff *skb;
4198
4199	BT_DBG("%s cmd_cnt %d cmd queued %d", hdev->name,
4200	       atomic_read(&hdev->cmd_cnt), skb_queue_len(&hdev->cmd_q));
4201
4202	/* Send queued commands */
4203	if (atomic_read(&hdev->cmd_cnt)) {
4204		skb = skb_dequeue(&hdev->cmd_q);
4205		if (!skb)
4206			return;
4207
4208		hci_send_cmd_sync(hdev, skb);
4209
4210		rcu_read_lock();
4211		if (test_bit(HCI_RESET, &hdev->flags) ||
4212		    hci_dev_test_flag(hdev, HCI_CMD_DRAIN_WORKQUEUE))
4213			cancel_delayed_work(&hdev->cmd_timer);
4214		else
4215			queue_delayed_work(hdev->workqueue, &hdev->cmd_timer,
4216					   HCI_CMD_TIMEOUT);
4217		rcu_read_unlock();
4218	}
4219}
4220