hci_event.c revision 9b008c0457e583e10e62d1215bed6ab26ee54906
1/*
2   BlueZ - Bluetooth protocol stack for Linux
3   Copyright (c) 2000-2001, 2010, Code Aurora Forum. All rights reserved.
4
5   Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
6
7   This program is free software; you can redistribute it and/or modify
8   it under the terms of the GNU General Public License version 2 as
9   published by the Free Software Foundation;
10
11   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
12   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
13   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
14   IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
15   CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
16   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19
20   ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
21   COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
22   SOFTWARE IS DISCLAIMED.
23*/
24
25/* Bluetooth HCI event handling. */
26
27#include <asm/unaligned.h>
28
29#include <net/bluetooth/bluetooth.h>
30#include <net/bluetooth/hci_core.h>
31#include <net/bluetooth/mgmt.h>
32#include <net/bluetooth/a2mp.h>
33#include <net/bluetooth/amp.h>
34
35/* Handle HCI Event packets */
36
37static void hci_cc_inquiry_cancel(struct hci_dev *hdev, struct sk_buff *skb)
38{
39	__u8 status = *((__u8 *) skb->data);
40
41	BT_DBG("%s status 0x%2.2x", hdev->name, status);
42
43	if (status) {
44		hci_dev_lock(hdev);
45		mgmt_stop_discovery_failed(hdev, status);
46		hci_dev_unlock(hdev);
47		return;
48	}
49
50	clear_bit(HCI_INQUIRY, &hdev->flags);
51
52	hci_dev_lock(hdev);
53	hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
54	hci_dev_unlock(hdev);
55
56	hci_req_complete(hdev, HCI_OP_INQUIRY_CANCEL, status);
57
58	hci_conn_check_pending(hdev);
59}
60
61static void hci_cc_periodic_inq(struct hci_dev *hdev, struct sk_buff *skb)
62{
63	__u8 status = *((__u8 *) skb->data);
64
65	BT_DBG("%s status 0x%2.2x", hdev->name, status);
66
67	if (status)
68		return;
69
70	set_bit(HCI_PERIODIC_INQ, &hdev->dev_flags);
71}
72
73static void hci_cc_exit_periodic_inq(struct hci_dev *hdev, struct sk_buff *skb)
74{
75	__u8 status = *((__u8 *) skb->data);
76
77	BT_DBG("%s status 0x%2.2x", hdev->name, status);
78
79	if (status)
80		return;
81
82	clear_bit(HCI_PERIODIC_INQ, &hdev->dev_flags);
83
84	hci_conn_check_pending(hdev);
85}
86
87static void hci_cc_remote_name_req_cancel(struct hci_dev *hdev,
88					  struct sk_buff *skb)
89{
90	BT_DBG("%s", hdev->name);
91}
92
93static void hci_cc_role_discovery(struct hci_dev *hdev, struct sk_buff *skb)
94{
95	struct hci_rp_role_discovery *rp = (void *) skb->data;
96	struct hci_conn *conn;
97
98	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
99
100	if (rp->status)
101		return;
102
103	hci_dev_lock(hdev);
104
105	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
106	if (conn) {
107		if (rp->role)
108			conn->link_mode &= ~HCI_LM_MASTER;
109		else
110			conn->link_mode |= HCI_LM_MASTER;
111	}
112
113	hci_dev_unlock(hdev);
114}
115
116static void hci_cc_read_link_policy(struct hci_dev *hdev, struct sk_buff *skb)
117{
118	struct hci_rp_read_link_policy *rp = (void *) skb->data;
119	struct hci_conn *conn;
120
121	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
122
123	if (rp->status)
124		return;
125
126	hci_dev_lock(hdev);
127
128	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
129	if (conn)
130		conn->link_policy = __le16_to_cpu(rp->policy);
131
132	hci_dev_unlock(hdev);
133}
134
135static void hci_cc_write_link_policy(struct hci_dev *hdev, struct sk_buff *skb)
136{
137	struct hci_rp_write_link_policy *rp = (void *) skb->data;
138	struct hci_conn *conn;
139	void *sent;
140
141	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
142
143	if (rp->status)
144		return;
145
146	sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_LINK_POLICY);
147	if (!sent)
148		return;
149
150	hci_dev_lock(hdev);
151
152	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
153	if (conn)
154		conn->link_policy = get_unaligned_le16(sent + 2);
155
156	hci_dev_unlock(hdev);
157}
158
159static void hci_cc_read_def_link_policy(struct hci_dev *hdev,
160					struct sk_buff *skb)
161{
162	struct hci_rp_read_def_link_policy *rp = (void *) skb->data;
163
164	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
165
166	if (rp->status)
167		return;
168
169	hdev->link_policy = __le16_to_cpu(rp->policy);
170}
171
172static void hci_cc_write_def_link_policy(struct hci_dev *hdev,
173					 struct sk_buff *skb)
174{
175	__u8 status = *((__u8 *) skb->data);
176	void *sent;
177
178	BT_DBG("%s status 0x%2.2x", hdev->name, status);
179
180	sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_DEF_LINK_POLICY);
181	if (!sent)
182		return;
183
184	if (!status)
185		hdev->link_policy = get_unaligned_le16(sent);
186
187	hci_req_complete(hdev, HCI_OP_WRITE_DEF_LINK_POLICY, status);
188}
189
190static void hci_cc_reset(struct hci_dev *hdev, struct sk_buff *skb)
191{
192	__u8 status = *((__u8 *) skb->data);
193
194	BT_DBG("%s status 0x%2.2x", hdev->name, status);
195
196	clear_bit(HCI_RESET, &hdev->flags);
197
198	hci_req_complete(hdev, HCI_OP_RESET, status);
199
200	/* Reset all non-persistent flags */
201	hdev->dev_flags &= ~(BIT(HCI_LE_SCAN) | BIT(HCI_PENDING_CLASS) |
202			     BIT(HCI_PERIODIC_INQ));
203
204	hdev->discovery.state = DISCOVERY_STOPPED;
205	hdev->inq_tx_power = HCI_TX_POWER_INVALID;
206	hdev->adv_tx_power = HCI_TX_POWER_INVALID;
207
208	memset(hdev->adv_data, 0, sizeof(hdev->adv_data));
209	hdev->adv_data_len = 0;
210}
211
212static void hci_cc_write_local_name(struct hci_dev *hdev, struct sk_buff *skb)
213{
214	__u8 status = *((__u8 *) skb->data);
215	void *sent;
216
217	BT_DBG("%s status 0x%2.2x", hdev->name, status);
218
219	sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_LOCAL_NAME);
220	if (!sent)
221		return;
222
223	hci_dev_lock(hdev);
224
225	if (test_bit(HCI_MGMT, &hdev->dev_flags))
226		mgmt_set_local_name_complete(hdev, sent, status);
227	else if (!status)
228		memcpy(hdev->dev_name, sent, HCI_MAX_NAME_LENGTH);
229
230	hci_dev_unlock(hdev);
231
232	if (!status && !test_bit(HCI_INIT, &hdev->flags))
233		hci_update_ad(hdev);
234
235	hci_req_complete(hdev, HCI_OP_WRITE_LOCAL_NAME, status);
236}
237
238static void hci_cc_read_local_name(struct hci_dev *hdev, struct sk_buff *skb)
239{
240	struct hci_rp_read_local_name *rp = (void *) skb->data;
241
242	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
243
244	if (rp->status)
245		return;
246
247	if (test_bit(HCI_SETUP, &hdev->dev_flags))
248		memcpy(hdev->dev_name, rp->name, HCI_MAX_NAME_LENGTH);
249}
250
251static void hci_cc_write_auth_enable(struct hci_dev *hdev, struct sk_buff *skb)
252{
253	__u8 status = *((__u8 *) skb->data);
254	void *sent;
255
256	BT_DBG("%s status 0x%2.2x", hdev->name, status);
257
258	sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_AUTH_ENABLE);
259	if (!sent)
260		return;
261
262	if (!status) {
263		__u8 param = *((__u8 *) sent);
264
265		if (param == AUTH_ENABLED)
266			set_bit(HCI_AUTH, &hdev->flags);
267		else
268			clear_bit(HCI_AUTH, &hdev->flags);
269	}
270
271	if (test_bit(HCI_MGMT, &hdev->dev_flags))
272		mgmt_auth_enable_complete(hdev, status);
273
274	hci_req_complete(hdev, HCI_OP_WRITE_AUTH_ENABLE, status);
275}
276
277static void hci_cc_write_encrypt_mode(struct hci_dev *hdev, struct sk_buff *skb)
278{
279	__u8 status = *((__u8 *) skb->data);
280	void *sent;
281
282	BT_DBG("%s status 0x%2.2x", hdev->name, status);
283
284	sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_ENCRYPT_MODE);
285	if (!sent)
286		return;
287
288	if (!status) {
289		__u8 param = *((__u8 *) sent);
290
291		if (param)
292			set_bit(HCI_ENCRYPT, &hdev->flags);
293		else
294			clear_bit(HCI_ENCRYPT, &hdev->flags);
295	}
296
297	hci_req_complete(hdev, HCI_OP_WRITE_ENCRYPT_MODE, status);
298}
299
300static void hci_cc_write_scan_enable(struct hci_dev *hdev, struct sk_buff *skb)
301{
302	__u8 param, status = *((__u8 *) skb->data);
303	int old_pscan, old_iscan;
304	void *sent;
305
306	BT_DBG("%s status 0x%2.2x", hdev->name, status);
307
308	sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_SCAN_ENABLE);
309	if (!sent)
310		return;
311
312	param = *((__u8 *) sent);
313
314	hci_dev_lock(hdev);
315
316	if (status) {
317		mgmt_write_scan_failed(hdev, param, status);
318		hdev->discov_timeout = 0;
319		goto done;
320	}
321
322	old_pscan = test_and_clear_bit(HCI_PSCAN, &hdev->flags);
323	old_iscan = test_and_clear_bit(HCI_ISCAN, &hdev->flags);
324
325	if (param & SCAN_INQUIRY) {
326		set_bit(HCI_ISCAN, &hdev->flags);
327		if (!old_iscan)
328			mgmt_discoverable(hdev, 1);
329		if (hdev->discov_timeout > 0) {
330			int to = msecs_to_jiffies(hdev->discov_timeout * 1000);
331			queue_delayed_work(hdev->workqueue, &hdev->discov_off,
332					   to);
333		}
334	} else if (old_iscan)
335		mgmt_discoverable(hdev, 0);
336
337	if (param & SCAN_PAGE) {
338		set_bit(HCI_PSCAN, &hdev->flags);
339		if (!old_pscan)
340			mgmt_connectable(hdev, 1);
341	} else if (old_pscan)
342		mgmt_connectable(hdev, 0);
343
344done:
345	hci_dev_unlock(hdev);
346	hci_req_complete(hdev, HCI_OP_WRITE_SCAN_ENABLE, status);
347}
348
349static void hci_cc_read_class_of_dev(struct hci_dev *hdev, struct sk_buff *skb)
350{
351	struct hci_rp_read_class_of_dev *rp = (void *) skb->data;
352
353	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
354
355	if (rp->status)
356		return;
357
358	memcpy(hdev->dev_class, rp->dev_class, 3);
359
360	BT_DBG("%s class 0x%.2x%.2x%.2x", hdev->name,
361	       hdev->dev_class[2], hdev->dev_class[1], hdev->dev_class[0]);
362}
363
364static void hci_cc_write_class_of_dev(struct hci_dev *hdev, struct sk_buff *skb)
365{
366	__u8 status = *((__u8 *) skb->data);
367	void *sent;
368
369	BT_DBG("%s status 0x%2.2x", hdev->name, status);
370
371	sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_CLASS_OF_DEV);
372	if (!sent)
373		return;
374
375	hci_dev_lock(hdev);
376
377	if (status == 0)
378		memcpy(hdev->dev_class, sent, 3);
379
380	if (test_bit(HCI_MGMT, &hdev->dev_flags))
381		mgmt_set_class_of_dev_complete(hdev, sent, status);
382
383	hci_dev_unlock(hdev);
384}
385
386static void hci_cc_read_voice_setting(struct hci_dev *hdev, struct sk_buff *skb)
387{
388	struct hci_rp_read_voice_setting *rp = (void *) skb->data;
389	__u16 setting;
390
391	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
392
393	if (rp->status)
394		return;
395
396	setting = __le16_to_cpu(rp->voice_setting);
397
398	if (hdev->voice_setting == setting)
399		return;
400
401	hdev->voice_setting = setting;
402
403	BT_DBG("%s voice setting 0x%4.4x", hdev->name, setting);
404
405	if (hdev->notify)
406		hdev->notify(hdev, HCI_NOTIFY_VOICE_SETTING);
407}
408
409static void hci_cc_write_voice_setting(struct hci_dev *hdev,
410				       struct sk_buff *skb)
411{
412	__u8 status = *((__u8 *) skb->data);
413	__u16 setting;
414	void *sent;
415
416	BT_DBG("%s status 0x%2.2x", hdev->name, status);
417
418	if (status)
419		return;
420
421	sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_VOICE_SETTING);
422	if (!sent)
423		return;
424
425	setting = get_unaligned_le16(sent);
426
427	if (hdev->voice_setting == setting)
428		return;
429
430	hdev->voice_setting = setting;
431
432	BT_DBG("%s voice setting 0x%4.4x", hdev->name, setting);
433
434	if (hdev->notify)
435		hdev->notify(hdev, HCI_NOTIFY_VOICE_SETTING);
436}
437
438static void hci_cc_host_buffer_size(struct hci_dev *hdev, struct sk_buff *skb)
439{
440	__u8 status = *((__u8 *) skb->data);
441
442	BT_DBG("%s status 0x%2.2x", hdev->name, status);
443
444	hci_req_complete(hdev, HCI_OP_HOST_BUFFER_SIZE, status);
445}
446
447static void hci_cc_write_ssp_mode(struct hci_dev *hdev, struct sk_buff *skb)
448{
449	__u8 status = *((__u8 *) skb->data);
450	struct hci_cp_write_ssp_mode *sent;
451
452	BT_DBG("%s status 0x%2.2x", hdev->name, status);
453
454	sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_SSP_MODE);
455	if (!sent)
456		return;
457
458	if (!status) {
459		if (sent->mode)
460			hdev->host_features[0] |= LMP_HOST_SSP;
461		else
462			hdev->host_features[0] &= ~LMP_HOST_SSP;
463	}
464
465	if (test_bit(HCI_MGMT, &hdev->dev_flags))
466		mgmt_ssp_enable_complete(hdev, sent->mode, status);
467	else if (!status) {
468		if (sent->mode)
469			set_bit(HCI_SSP_ENABLED, &hdev->dev_flags);
470		else
471			clear_bit(HCI_SSP_ENABLED, &hdev->dev_flags);
472	}
473}
474
475static u8 hci_get_inquiry_mode(struct hci_dev *hdev)
476{
477	if (lmp_ext_inq_capable(hdev))
478		return 2;
479
480	if (lmp_inq_rssi_capable(hdev))
481		return 1;
482
483	if (hdev->manufacturer == 11 && hdev->hci_rev == 0x00 &&
484	    hdev->lmp_subver == 0x0757)
485		return 1;
486
487	if (hdev->manufacturer == 15) {
488		if (hdev->hci_rev == 0x03 && hdev->lmp_subver == 0x6963)
489			return 1;
490		if (hdev->hci_rev == 0x09 && hdev->lmp_subver == 0x6963)
491			return 1;
492		if (hdev->hci_rev == 0x00 && hdev->lmp_subver == 0x6965)
493			return 1;
494	}
495
496	if (hdev->manufacturer == 31 && hdev->hci_rev == 0x2005 &&
497	    hdev->lmp_subver == 0x1805)
498		return 1;
499
500	return 0;
501}
502
503static void hci_setup_inquiry_mode(struct hci_dev *hdev)
504{
505	u8 mode;
506
507	mode = hci_get_inquiry_mode(hdev);
508
509	hci_send_cmd(hdev, HCI_OP_WRITE_INQUIRY_MODE, 1, &mode);
510}
511
512static void hci_setup_event_mask(struct hci_dev *hdev)
513{
514	/* The second byte is 0xff instead of 0x9f (two reserved bits
515	 * disabled) since a Broadcom 1.2 dongle doesn't respond to the
516	 * command otherwise */
517	u8 events[8] = { 0xff, 0xff, 0xfb, 0xff, 0x00, 0x00, 0x00, 0x00 };
518
519	/* CSR 1.1 dongles does not accept any bitfield so don't try to set
520	 * any event mask for pre 1.2 devices */
521	if (hdev->hci_ver < BLUETOOTH_VER_1_2)
522		return;
523
524	if (lmp_bredr_capable(hdev)) {
525		events[4] |= 0x01; /* Flow Specification Complete */
526		events[4] |= 0x02; /* Inquiry Result with RSSI */
527		events[4] |= 0x04; /* Read Remote Extended Features Complete */
528		events[5] |= 0x08; /* Synchronous Connection Complete */
529		events[5] |= 0x10; /* Synchronous Connection Changed */
530	}
531
532	if (lmp_inq_rssi_capable(hdev))
533		events[4] |= 0x02; /* Inquiry Result with RSSI */
534
535	if (lmp_sniffsubr_capable(hdev))
536		events[5] |= 0x20; /* Sniff Subrating */
537
538	if (lmp_pause_enc_capable(hdev))
539		events[5] |= 0x80; /* Encryption Key Refresh Complete */
540
541	if (lmp_ext_inq_capable(hdev))
542		events[5] |= 0x40; /* Extended Inquiry Result */
543
544	if (lmp_no_flush_capable(hdev))
545		events[7] |= 0x01; /* Enhanced Flush Complete */
546
547	if (lmp_lsto_capable(hdev))
548		events[6] |= 0x80; /* Link Supervision Timeout Changed */
549
550	if (lmp_ssp_capable(hdev)) {
551		events[6] |= 0x01;	/* IO Capability Request */
552		events[6] |= 0x02;	/* IO Capability Response */
553		events[6] |= 0x04;	/* User Confirmation Request */
554		events[6] |= 0x08;	/* User Passkey Request */
555		events[6] |= 0x10;	/* Remote OOB Data Request */
556		events[6] |= 0x20;	/* Simple Pairing Complete */
557		events[7] |= 0x04;	/* User Passkey Notification */
558		events[7] |= 0x08;	/* Keypress Notification */
559		events[7] |= 0x10;	/* Remote Host Supported
560					 * Features Notification */
561	}
562
563	if (lmp_le_capable(hdev))
564		events[7] |= 0x20;	/* LE Meta-Event */
565
566	hci_send_cmd(hdev, HCI_OP_SET_EVENT_MASK, sizeof(events), events);
567
568	if (lmp_le_capable(hdev)) {
569		memset(events, 0, sizeof(events));
570		events[0] = 0x1f;
571		hci_send_cmd(hdev, HCI_OP_LE_SET_EVENT_MASK,
572			     sizeof(events), events);
573	}
574}
575
576static void bredr_setup(struct hci_dev *hdev)
577{
578	struct hci_cp_delete_stored_link_key cp;
579	__le16 param;
580	__u8 flt_type;
581
582	/* Read Buffer Size (ACL mtu, max pkt, etc.) */
583	hci_send_cmd(hdev, HCI_OP_READ_BUFFER_SIZE, 0, NULL);
584
585	/* Read Class of Device */
586	hci_send_cmd(hdev, HCI_OP_READ_CLASS_OF_DEV, 0, NULL);
587
588	/* Read Local Name */
589	hci_send_cmd(hdev, HCI_OP_READ_LOCAL_NAME, 0, NULL);
590
591	/* Read Voice Setting */
592	hci_send_cmd(hdev, HCI_OP_READ_VOICE_SETTING, 0, NULL);
593
594	/* Clear Event Filters */
595	flt_type = HCI_FLT_CLEAR_ALL;
596	hci_send_cmd(hdev, HCI_OP_SET_EVENT_FLT, 1, &flt_type);
597
598	/* Connection accept timeout ~20 secs */
599	param = __constant_cpu_to_le16(0x7d00);
600	hci_send_cmd(hdev, HCI_OP_WRITE_CA_TIMEOUT, 2, &param);
601
602	bacpy(&cp.bdaddr, BDADDR_ANY);
603	cp.delete_all = 1;
604	hci_send_cmd(hdev, HCI_OP_DELETE_STORED_LINK_KEY, sizeof(cp), &cp);
605}
606
607static void le_setup(struct hci_dev *hdev)
608{
609	/* Read LE Buffer Size */
610	hci_send_cmd(hdev, HCI_OP_LE_READ_BUFFER_SIZE, 0, NULL);
611
612	/* Read LE Local Supported Features */
613	hci_send_cmd(hdev, HCI_OP_LE_READ_LOCAL_FEATURES, 0, NULL);
614
615	/* Read LE Advertising Channel TX Power */
616	hci_send_cmd(hdev, HCI_OP_LE_READ_ADV_TX_POWER, 0, NULL);
617
618	/* Read LE White List Size */
619	hci_send_cmd(hdev, HCI_OP_LE_READ_WHITE_LIST_SIZE, 0, NULL);
620
621	/* Read LE Supported States */
622	hci_send_cmd(hdev, HCI_OP_LE_READ_SUPPORTED_STATES, 0, NULL);
623}
624
625static void hci_setup(struct hci_dev *hdev)
626{
627	if (hdev->dev_type != HCI_BREDR)
628		return;
629
630	/* Read BD Address */
631	hci_send_cmd(hdev, HCI_OP_READ_BD_ADDR, 0, NULL);
632
633	if (lmp_bredr_capable(hdev))
634		bredr_setup(hdev);
635
636	if (lmp_le_capable(hdev))
637		le_setup(hdev);
638
639	hci_setup_event_mask(hdev);
640
641	if (hdev->hci_ver > BLUETOOTH_VER_1_1)
642		hci_send_cmd(hdev, HCI_OP_READ_LOCAL_COMMANDS, 0, NULL);
643
644	if (lmp_ssp_capable(hdev)) {
645		if (test_bit(HCI_SSP_ENABLED, &hdev->dev_flags)) {
646			u8 mode = 0x01;
647			hci_send_cmd(hdev, HCI_OP_WRITE_SSP_MODE,
648				     sizeof(mode), &mode);
649		} else {
650			struct hci_cp_write_eir cp;
651
652			memset(hdev->eir, 0, sizeof(hdev->eir));
653			memset(&cp, 0, sizeof(cp));
654
655			hci_send_cmd(hdev, HCI_OP_WRITE_EIR, sizeof(cp), &cp);
656		}
657	}
658
659	if (lmp_inq_rssi_capable(hdev))
660		hci_setup_inquiry_mode(hdev);
661
662	if (lmp_inq_tx_pwr_capable(hdev))
663		hci_send_cmd(hdev, HCI_OP_READ_INQ_RSP_TX_POWER, 0, NULL);
664
665	if (lmp_ext_feat_capable(hdev)) {
666		struct hci_cp_read_local_ext_features cp;
667
668		cp.page = 0x01;
669		hci_send_cmd(hdev, HCI_OP_READ_LOCAL_EXT_FEATURES, sizeof(cp),
670			     &cp);
671	}
672
673	if (test_bit(HCI_LINK_SECURITY, &hdev->dev_flags)) {
674		u8 enable = 1;
675		hci_send_cmd(hdev, HCI_OP_WRITE_AUTH_ENABLE, sizeof(enable),
676			     &enable);
677	}
678}
679
680static void hci_cc_read_local_version(struct hci_dev *hdev, struct sk_buff *skb)
681{
682	struct hci_rp_read_local_version *rp = (void *) skb->data;
683
684	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
685
686	if (rp->status)
687		goto done;
688
689	hdev->hci_ver = rp->hci_ver;
690	hdev->hci_rev = __le16_to_cpu(rp->hci_rev);
691	hdev->lmp_ver = rp->lmp_ver;
692	hdev->manufacturer = __le16_to_cpu(rp->manufacturer);
693	hdev->lmp_subver = __le16_to_cpu(rp->lmp_subver);
694
695	BT_DBG("%s manufacturer 0x%4.4x hci ver %d:%d", hdev->name,
696	       hdev->manufacturer, hdev->hci_ver, hdev->hci_rev);
697
698	if (test_bit(HCI_INIT, &hdev->flags))
699		hci_setup(hdev);
700
701done:
702	hci_req_complete(hdev, HCI_OP_READ_LOCAL_VERSION, rp->status);
703}
704
705static void hci_setup_link_policy(struct hci_dev *hdev)
706{
707	struct hci_cp_write_def_link_policy cp;
708	u16 link_policy = 0;
709
710	if (lmp_rswitch_capable(hdev))
711		link_policy |= HCI_LP_RSWITCH;
712	if (lmp_hold_capable(hdev))
713		link_policy |= HCI_LP_HOLD;
714	if (lmp_sniff_capable(hdev))
715		link_policy |= HCI_LP_SNIFF;
716	if (lmp_park_capable(hdev))
717		link_policy |= HCI_LP_PARK;
718
719	cp.policy = cpu_to_le16(link_policy);
720	hci_send_cmd(hdev, HCI_OP_WRITE_DEF_LINK_POLICY, sizeof(cp), &cp);
721}
722
723static void hci_cc_read_local_commands(struct hci_dev *hdev,
724				       struct sk_buff *skb)
725{
726	struct hci_rp_read_local_commands *rp = (void *) skb->data;
727
728	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
729
730	if (rp->status)
731		goto done;
732
733	memcpy(hdev->commands, rp->commands, sizeof(hdev->commands));
734
735	if (test_bit(HCI_INIT, &hdev->flags) && (hdev->commands[5] & 0x10))
736		hci_setup_link_policy(hdev);
737
738done:
739	hci_req_complete(hdev, HCI_OP_READ_LOCAL_COMMANDS, rp->status);
740}
741
742static void hci_cc_read_local_features(struct hci_dev *hdev,
743				       struct sk_buff *skb)
744{
745	struct hci_rp_read_local_features *rp = (void *) skb->data;
746
747	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
748
749	if (rp->status)
750		return;
751
752	memcpy(hdev->features, rp->features, 8);
753
754	/* Adjust default settings according to features
755	 * supported by device. */
756
757	if (hdev->features[0] & LMP_3SLOT)
758		hdev->pkt_type |= (HCI_DM3 | HCI_DH3);
759
760	if (hdev->features[0] & LMP_5SLOT)
761		hdev->pkt_type |= (HCI_DM5 | HCI_DH5);
762
763	if (hdev->features[1] & LMP_HV2) {
764		hdev->pkt_type  |= (HCI_HV2);
765		hdev->esco_type |= (ESCO_HV2);
766	}
767
768	if (hdev->features[1] & LMP_HV3) {
769		hdev->pkt_type  |= (HCI_HV3);
770		hdev->esco_type |= (ESCO_HV3);
771	}
772
773	if (lmp_esco_capable(hdev))
774		hdev->esco_type |= (ESCO_EV3);
775
776	if (hdev->features[4] & LMP_EV4)
777		hdev->esco_type |= (ESCO_EV4);
778
779	if (hdev->features[4] & LMP_EV5)
780		hdev->esco_type |= (ESCO_EV5);
781
782	if (hdev->features[5] & LMP_EDR_ESCO_2M)
783		hdev->esco_type |= (ESCO_2EV3);
784
785	if (hdev->features[5] & LMP_EDR_ESCO_3M)
786		hdev->esco_type |= (ESCO_3EV3);
787
788	if (hdev->features[5] & LMP_EDR_3S_ESCO)
789		hdev->esco_type |= (ESCO_2EV5 | ESCO_3EV5);
790
791	BT_DBG("%s features 0x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x", hdev->name,
792	       hdev->features[0], hdev->features[1],
793	       hdev->features[2], hdev->features[3],
794	       hdev->features[4], hdev->features[5],
795	       hdev->features[6], hdev->features[7]);
796}
797
798static void hci_set_le_support(struct hci_dev *hdev)
799{
800	struct hci_cp_write_le_host_supported cp;
801
802	memset(&cp, 0, sizeof(cp));
803
804	if (test_bit(HCI_LE_ENABLED, &hdev->dev_flags)) {
805		cp.le = 1;
806		cp.simul = lmp_le_br_capable(hdev);
807	}
808
809	if (cp.le != lmp_host_le_capable(hdev))
810		hci_send_cmd(hdev, HCI_OP_WRITE_LE_HOST_SUPPORTED, sizeof(cp),
811			     &cp);
812}
813
814static void hci_cc_read_local_ext_features(struct hci_dev *hdev,
815					   struct sk_buff *skb)
816{
817	struct hci_rp_read_local_ext_features *rp = (void *) skb->data;
818
819	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
820
821	if (rp->status)
822		goto done;
823
824	switch (rp->page) {
825	case 0:
826		memcpy(hdev->features, rp->features, 8);
827		break;
828	case 1:
829		memcpy(hdev->host_features, rp->features, 8);
830		break;
831	}
832
833	if (test_bit(HCI_INIT, &hdev->flags) && lmp_le_capable(hdev))
834		hci_set_le_support(hdev);
835
836done:
837	hci_req_complete(hdev, HCI_OP_READ_LOCAL_EXT_FEATURES, rp->status);
838}
839
840static void hci_cc_read_flow_control_mode(struct hci_dev *hdev,
841					  struct sk_buff *skb)
842{
843	struct hci_rp_read_flow_control_mode *rp = (void *) skb->data;
844
845	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
846
847	if (rp->status)
848		return;
849
850	hdev->flow_ctl_mode = rp->mode;
851
852	hci_req_complete(hdev, HCI_OP_READ_FLOW_CONTROL_MODE, rp->status);
853}
854
855static void hci_cc_read_buffer_size(struct hci_dev *hdev, struct sk_buff *skb)
856{
857	struct hci_rp_read_buffer_size *rp = (void *) skb->data;
858
859	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
860
861	if (rp->status)
862		return;
863
864	hdev->acl_mtu  = __le16_to_cpu(rp->acl_mtu);
865	hdev->sco_mtu  = rp->sco_mtu;
866	hdev->acl_pkts = __le16_to_cpu(rp->acl_max_pkt);
867	hdev->sco_pkts = __le16_to_cpu(rp->sco_max_pkt);
868
869	if (test_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE, &hdev->quirks)) {
870		hdev->sco_mtu  = 64;
871		hdev->sco_pkts = 8;
872	}
873
874	hdev->acl_cnt = hdev->acl_pkts;
875	hdev->sco_cnt = hdev->sco_pkts;
876
877	BT_DBG("%s acl mtu %d:%d sco mtu %d:%d", hdev->name, hdev->acl_mtu,
878	       hdev->acl_pkts, hdev->sco_mtu, hdev->sco_pkts);
879}
880
881static void hci_cc_read_bd_addr(struct hci_dev *hdev, struct sk_buff *skb)
882{
883	struct hci_rp_read_bd_addr *rp = (void *) skb->data;
884
885	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
886
887	if (!rp->status)
888		bacpy(&hdev->bdaddr, &rp->bdaddr);
889
890	hci_req_complete(hdev, HCI_OP_READ_BD_ADDR, rp->status);
891}
892
893static void hci_cc_read_data_block_size(struct hci_dev *hdev,
894					struct sk_buff *skb)
895{
896	struct hci_rp_read_data_block_size *rp = (void *) skb->data;
897
898	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
899
900	if (rp->status)
901		return;
902
903	hdev->block_mtu = __le16_to_cpu(rp->max_acl_len);
904	hdev->block_len = __le16_to_cpu(rp->block_len);
905	hdev->num_blocks = __le16_to_cpu(rp->num_blocks);
906
907	hdev->block_cnt = hdev->num_blocks;
908
909	BT_DBG("%s blk mtu %d cnt %d len %d", hdev->name, hdev->block_mtu,
910	       hdev->block_cnt, hdev->block_len);
911
912	hci_req_complete(hdev, HCI_OP_READ_DATA_BLOCK_SIZE, rp->status);
913}
914
915static void hci_cc_write_ca_timeout(struct hci_dev *hdev, struct sk_buff *skb)
916{
917	__u8 status = *((__u8 *) skb->data);
918
919	BT_DBG("%s status 0x%2.2x", hdev->name, status);
920
921	hci_req_complete(hdev, HCI_OP_WRITE_CA_TIMEOUT, status);
922}
923
924static void hci_cc_read_local_amp_info(struct hci_dev *hdev,
925				       struct sk_buff *skb)
926{
927	struct hci_rp_read_local_amp_info *rp = (void *) skb->data;
928
929	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
930
931	if (rp->status)
932		goto a2mp_rsp;
933
934	hdev->amp_status = rp->amp_status;
935	hdev->amp_total_bw = __le32_to_cpu(rp->total_bw);
936	hdev->amp_max_bw = __le32_to_cpu(rp->max_bw);
937	hdev->amp_min_latency = __le32_to_cpu(rp->min_latency);
938	hdev->amp_max_pdu = __le32_to_cpu(rp->max_pdu);
939	hdev->amp_type = rp->amp_type;
940	hdev->amp_pal_cap = __le16_to_cpu(rp->pal_cap);
941	hdev->amp_assoc_size = __le16_to_cpu(rp->max_assoc_size);
942	hdev->amp_be_flush_to = __le32_to_cpu(rp->be_flush_to);
943	hdev->amp_max_flush_to = __le32_to_cpu(rp->max_flush_to);
944
945	hci_req_complete(hdev, HCI_OP_READ_LOCAL_AMP_INFO, rp->status);
946
947a2mp_rsp:
948	a2mp_send_getinfo_rsp(hdev);
949}
950
951static void hci_cc_read_local_amp_assoc(struct hci_dev *hdev,
952					struct sk_buff *skb)
953{
954	struct hci_rp_read_local_amp_assoc *rp = (void *) skb->data;
955	struct amp_assoc *assoc = &hdev->loc_assoc;
956	size_t rem_len, frag_len;
957
958	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
959
960	if (rp->status)
961		goto a2mp_rsp;
962
963	frag_len = skb->len - sizeof(*rp);
964	rem_len = __le16_to_cpu(rp->rem_len);
965
966	if (rem_len > frag_len) {
967		BT_DBG("frag_len %zu rem_len %zu", frag_len, rem_len);
968
969		memcpy(assoc->data + assoc->offset, rp->frag, frag_len);
970		assoc->offset += frag_len;
971
972		/* Read other fragments */
973		amp_read_loc_assoc_frag(hdev, rp->phy_handle);
974
975		return;
976	}
977
978	memcpy(assoc->data + assoc->offset, rp->frag, rem_len);
979	assoc->len = assoc->offset + rem_len;
980	assoc->offset = 0;
981
982a2mp_rsp:
983	/* Send A2MP Rsp when all fragments are received */
984	a2mp_send_getampassoc_rsp(hdev, rp->status);
985	a2mp_send_create_phy_link_req(hdev, rp->status);
986}
987
988static void hci_cc_delete_stored_link_key(struct hci_dev *hdev,
989					  struct sk_buff *skb)
990{
991	__u8 status = *((__u8 *) skb->data);
992
993	BT_DBG("%s status 0x%2.2x", hdev->name, status);
994
995	hci_req_complete(hdev, HCI_OP_DELETE_STORED_LINK_KEY, status);
996}
997
998static void hci_cc_set_event_mask(struct hci_dev *hdev, struct sk_buff *skb)
999{
1000	__u8 status = *((__u8 *) skb->data);
1001
1002	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1003
1004	hci_req_complete(hdev, HCI_OP_SET_EVENT_MASK, status);
1005}
1006
1007static void hci_cc_write_inquiry_mode(struct hci_dev *hdev,
1008				      struct sk_buff *skb)
1009{
1010	__u8 status = *((__u8 *) skb->data);
1011
1012	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1013
1014	hci_req_complete(hdev, HCI_OP_WRITE_INQUIRY_MODE, status);
1015}
1016
1017static void hci_cc_read_inq_rsp_tx_power(struct hci_dev *hdev,
1018					 struct sk_buff *skb)
1019{
1020	struct hci_rp_read_inq_rsp_tx_power *rp = (void *) skb->data;
1021
1022	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1023
1024	if (!rp->status)
1025		hdev->inq_tx_power = rp->tx_power;
1026
1027	hci_req_complete(hdev, HCI_OP_READ_INQ_RSP_TX_POWER, rp->status);
1028}
1029
1030static void hci_cc_set_event_flt(struct hci_dev *hdev, struct sk_buff *skb)
1031{
1032	__u8 status = *((__u8 *) skb->data);
1033
1034	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1035
1036	hci_req_complete(hdev, HCI_OP_SET_EVENT_FLT, status);
1037}
1038
1039static void hci_cc_pin_code_reply(struct hci_dev *hdev, struct sk_buff *skb)
1040{
1041	struct hci_rp_pin_code_reply *rp = (void *) skb->data;
1042	struct hci_cp_pin_code_reply *cp;
1043	struct hci_conn *conn;
1044
1045	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1046
1047	hci_dev_lock(hdev);
1048
1049	if (test_bit(HCI_MGMT, &hdev->dev_flags))
1050		mgmt_pin_code_reply_complete(hdev, &rp->bdaddr, rp->status);
1051
1052	if (rp->status)
1053		goto unlock;
1054
1055	cp = hci_sent_cmd_data(hdev, HCI_OP_PIN_CODE_REPLY);
1056	if (!cp)
1057		goto unlock;
1058
1059	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
1060	if (conn)
1061		conn->pin_length = cp->pin_len;
1062
1063unlock:
1064	hci_dev_unlock(hdev);
1065}
1066
1067static void hci_cc_pin_code_neg_reply(struct hci_dev *hdev, struct sk_buff *skb)
1068{
1069	struct hci_rp_pin_code_neg_reply *rp = (void *) skb->data;
1070
1071	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1072
1073	hci_dev_lock(hdev);
1074
1075	if (test_bit(HCI_MGMT, &hdev->dev_flags))
1076		mgmt_pin_code_neg_reply_complete(hdev, &rp->bdaddr,
1077						 rp->status);
1078
1079	hci_dev_unlock(hdev);
1080}
1081
1082static void hci_cc_le_read_buffer_size(struct hci_dev *hdev,
1083				       struct sk_buff *skb)
1084{
1085	struct hci_rp_le_read_buffer_size *rp = (void *) skb->data;
1086
1087	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1088
1089	if (rp->status)
1090		return;
1091
1092	hdev->le_mtu = __le16_to_cpu(rp->le_mtu);
1093	hdev->le_pkts = rp->le_max_pkt;
1094
1095	hdev->le_cnt = hdev->le_pkts;
1096
1097	BT_DBG("%s le mtu %d:%d", hdev->name, hdev->le_mtu, hdev->le_pkts);
1098
1099	hci_req_complete(hdev, HCI_OP_LE_READ_BUFFER_SIZE, rp->status);
1100}
1101
1102static void hci_cc_le_read_local_features(struct hci_dev *hdev,
1103					  struct sk_buff *skb)
1104{
1105	struct hci_rp_le_read_local_features *rp = (void *) skb->data;
1106
1107	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1108
1109	if (!rp->status)
1110		memcpy(hdev->le_features, rp->features, 8);
1111
1112	hci_req_complete(hdev, HCI_OP_LE_READ_LOCAL_FEATURES, rp->status);
1113}
1114
1115static void hci_cc_le_read_adv_tx_power(struct hci_dev *hdev,
1116					struct sk_buff *skb)
1117{
1118	struct hci_rp_le_read_adv_tx_power *rp = (void *) skb->data;
1119
1120	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1121
1122	if (!rp->status) {
1123		hdev->adv_tx_power = rp->tx_power;
1124		if (!test_bit(HCI_INIT, &hdev->flags))
1125			hci_update_ad(hdev);
1126	}
1127
1128	hci_req_complete(hdev, HCI_OP_LE_READ_ADV_TX_POWER, rp->status);
1129}
1130
1131static void hci_cc_le_set_event_mask(struct hci_dev *hdev, struct sk_buff *skb)
1132{
1133	__u8 status = *((__u8 *) skb->data);
1134
1135	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1136
1137	hci_req_complete(hdev, HCI_OP_LE_SET_EVENT_MASK, status);
1138}
1139
1140static void hci_cc_user_confirm_reply(struct hci_dev *hdev, struct sk_buff *skb)
1141{
1142	struct hci_rp_user_confirm_reply *rp = (void *) skb->data;
1143
1144	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1145
1146	hci_dev_lock(hdev);
1147
1148	if (test_bit(HCI_MGMT, &hdev->dev_flags))
1149		mgmt_user_confirm_reply_complete(hdev, &rp->bdaddr, ACL_LINK, 0,
1150						 rp->status);
1151
1152	hci_dev_unlock(hdev);
1153}
1154
1155static void hci_cc_user_confirm_neg_reply(struct hci_dev *hdev,
1156					  struct sk_buff *skb)
1157{
1158	struct hci_rp_user_confirm_reply *rp = (void *) skb->data;
1159
1160	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1161
1162	hci_dev_lock(hdev);
1163
1164	if (test_bit(HCI_MGMT, &hdev->dev_flags))
1165		mgmt_user_confirm_neg_reply_complete(hdev, &rp->bdaddr,
1166						     ACL_LINK, 0, rp->status);
1167
1168	hci_dev_unlock(hdev);
1169}
1170
1171static void hci_cc_user_passkey_reply(struct hci_dev *hdev, struct sk_buff *skb)
1172{
1173	struct hci_rp_user_confirm_reply *rp = (void *) skb->data;
1174
1175	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1176
1177	hci_dev_lock(hdev);
1178
1179	if (test_bit(HCI_MGMT, &hdev->dev_flags))
1180		mgmt_user_passkey_reply_complete(hdev, &rp->bdaddr, ACL_LINK,
1181						 0, rp->status);
1182
1183	hci_dev_unlock(hdev);
1184}
1185
1186static void hci_cc_user_passkey_neg_reply(struct hci_dev *hdev,
1187					  struct sk_buff *skb)
1188{
1189	struct hci_rp_user_confirm_reply *rp = (void *) skb->data;
1190
1191	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1192
1193	hci_dev_lock(hdev);
1194
1195	if (test_bit(HCI_MGMT, &hdev->dev_flags))
1196		mgmt_user_passkey_neg_reply_complete(hdev, &rp->bdaddr,
1197						     ACL_LINK, 0, rp->status);
1198
1199	hci_dev_unlock(hdev);
1200}
1201
1202static void hci_cc_read_local_oob_data_reply(struct hci_dev *hdev,
1203					     struct sk_buff *skb)
1204{
1205	struct hci_rp_read_local_oob_data *rp = (void *) skb->data;
1206
1207	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1208
1209	hci_dev_lock(hdev);
1210	mgmt_read_local_oob_data_reply_complete(hdev, rp->hash,
1211						rp->randomizer, rp->status);
1212	hci_dev_unlock(hdev);
1213}
1214
1215static void hci_cc_le_set_adv_enable(struct hci_dev *hdev, struct sk_buff *skb)
1216{
1217	__u8 *sent, status = *((__u8 *) skb->data);
1218
1219	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1220
1221	sent = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_ADV_ENABLE);
1222	if (!sent)
1223		return;
1224
1225	hci_dev_lock(hdev);
1226
1227	if (!status) {
1228		if (*sent)
1229			set_bit(HCI_LE_PERIPHERAL, &hdev->dev_flags);
1230		else
1231			clear_bit(HCI_LE_PERIPHERAL, &hdev->dev_flags);
1232	}
1233
1234	hci_dev_unlock(hdev);
1235
1236	if (!test_bit(HCI_INIT, &hdev->flags))
1237		hci_update_ad(hdev);
1238
1239	hci_req_complete(hdev, HCI_OP_LE_SET_ADV_ENABLE, status);
1240}
1241
1242static void hci_cc_le_set_scan_param(struct hci_dev *hdev, struct sk_buff *skb)
1243{
1244	__u8 status = *((__u8 *) skb->data);
1245
1246	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1247
1248	hci_req_complete(hdev, HCI_OP_LE_SET_SCAN_PARAM, status);
1249
1250	if (status) {
1251		hci_dev_lock(hdev);
1252		mgmt_start_discovery_failed(hdev, status);
1253		hci_dev_unlock(hdev);
1254		return;
1255	}
1256}
1257
1258static void hci_cc_le_set_scan_enable(struct hci_dev *hdev,
1259				      struct sk_buff *skb)
1260{
1261	struct hci_cp_le_set_scan_enable *cp;
1262	__u8 status = *((__u8 *) skb->data);
1263
1264	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1265
1266	cp = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_SCAN_ENABLE);
1267	if (!cp)
1268		return;
1269
1270	switch (cp->enable) {
1271	case LE_SCANNING_ENABLED:
1272		hci_req_complete(hdev, HCI_OP_LE_SET_SCAN_ENABLE, status);
1273
1274		if (status) {
1275			hci_dev_lock(hdev);
1276			mgmt_start_discovery_failed(hdev, status);
1277			hci_dev_unlock(hdev);
1278			return;
1279		}
1280
1281		set_bit(HCI_LE_SCAN, &hdev->dev_flags);
1282
1283		hci_dev_lock(hdev);
1284		hci_discovery_set_state(hdev, DISCOVERY_FINDING);
1285		hci_dev_unlock(hdev);
1286		break;
1287
1288	case LE_SCANNING_DISABLED:
1289		if (status) {
1290			hci_dev_lock(hdev);
1291			mgmt_stop_discovery_failed(hdev, status);
1292			hci_dev_unlock(hdev);
1293			return;
1294		}
1295
1296		clear_bit(HCI_LE_SCAN, &hdev->dev_flags);
1297
1298		if (hdev->discovery.type == DISCOV_TYPE_INTERLEAVED &&
1299		    hdev->discovery.state == DISCOVERY_FINDING) {
1300			mgmt_interleaved_discovery(hdev);
1301		} else {
1302			hci_dev_lock(hdev);
1303			hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
1304			hci_dev_unlock(hdev);
1305		}
1306
1307		break;
1308
1309	default:
1310		BT_ERR("Used reserved LE_Scan_Enable param %d", cp->enable);
1311		break;
1312	}
1313}
1314
1315static void hci_cc_le_read_white_list_size(struct hci_dev *hdev,
1316					   struct sk_buff *skb)
1317{
1318	struct hci_rp_le_read_white_list_size *rp = (void *) skb->data;
1319
1320	BT_DBG("%s status 0x%2.2x size %u", hdev->name, rp->status, rp->size);
1321
1322	if (!rp->status)
1323		hdev->le_white_list_size = rp->size;
1324
1325	hci_req_complete(hdev, HCI_OP_LE_READ_WHITE_LIST_SIZE, rp->status);
1326}
1327
1328static void hci_cc_le_ltk_reply(struct hci_dev *hdev, struct sk_buff *skb)
1329{
1330	struct hci_rp_le_ltk_reply *rp = (void *) skb->data;
1331
1332	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1333
1334	if (rp->status)
1335		return;
1336
1337	hci_req_complete(hdev, HCI_OP_LE_LTK_REPLY, rp->status);
1338}
1339
1340static void hci_cc_le_ltk_neg_reply(struct hci_dev *hdev, struct sk_buff *skb)
1341{
1342	struct hci_rp_le_ltk_neg_reply *rp = (void *) skb->data;
1343
1344	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1345
1346	if (rp->status)
1347		return;
1348
1349	hci_req_complete(hdev, HCI_OP_LE_LTK_NEG_REPLY, rp->status);
1350}
1351
1352static void hci_cc_le_read_supported_states(struct hci_dev *hdev,
1353					    struct sk_buff *skb)
1354{
1355	struct hci_rp_le_read_supported_states *rp = (void *) skb->data;
1356
1357	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1358
1359	if (!rp->status)
1360		memcpy(hdev->le_states, rp->le_states, 8);
1361
1362	hci_req_complete(hdev, HCI_OP_LE_READ_SUPPORTED_STATES, rp->status);
1363}
1364
1365static void hci_cc_write_le_host_supported(struct hci_dev *hdev,
1366					   struct sk_buff *skb)
1367{
1368	struct hci_cp_write_le_host_supported *sent;
1369	__u8 status = *((__u8 *) skb->data);
1370
1371	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1372
1373	sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_LE_HOST_SUPPORTED);
1374	if (!sent)
1375		return;
1376
1377	if (!status) {
1378		if (sent->le)
1379			hdev->host_features[0] |= LMP_HOST_LE;
1380		else
1381			hdev->host_features[0] &= ~LMP_HOST_LE;
1382
1383		if (sent->simul)
1384			hdev->host_features[0] |= LMP_HOST_LE_BREDR;
1385		else
1386			hdev->host_features[0] &= ~LMP_HOST_LE_BREDR;
1387	}
1388
1389	if (test_bit(HCI_MGMT, &hdev->dev_flags) &&
1390	    !test_bit(HCI_INIT, &hdev->flags))
1391		mgmt_le_enable_complete(hdev, sent->le, status);
1392
1393	hci_req_complete(hdev, HCI_OP_WRITE_LE_HOST_SUPPORTED, status);
1394}
1395
1396static void hci_cc_write_remote_amp_assoc(struct hci_dev *hdev,
1397					  struct sk_buff *skb)
1398{
1399	struct hci_rp_write_remote_amp_assoc *rp = (void *) skb->data;
1400
1401	BT_DBG("%s status 0x%2.2x phy_handle 0x%2.2x",
1402	       hdev->name, rp->status, rp->phy_handle);
1403
1404	if (rp->status)
1405		return;
1406
1407	amp_write_rem_assoc_continue(hdev, rp->phy_handle);
1408}
1409
1410static void hci_cs_inquiry(struct hci_dev *hdev, __u8 status)
1411{
1412	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1413
1414	if (status) {
1415		hci_req_complete(hdev, HCI_OP_INQUIRY, status);
1416		hci_conn_check_pending(hdev);
1417		hci_dev_lock(hdev);
1418		if (test_bit(HCI_MGMT, &hdev->dev_flags))
1419			mgmt_start_discovery_failed(hdev, status);
1420		hci_dev_unlock(hdev);
1421		return;
1422	}
1423
1424	set_bit(HCI_INQUIRY, &hdev->flags);
1425
1426	hci_dev_lock(hdev);
1427	hci_discovery_set_state(hdev, DISCOVERY_FINDING);
1428	hci_dev_unlock(hdev);
1429}
1430
1431static void hci_cs_create_conn(struct hci_dev *hdev, __u8 status)
1432{
1433	struct hci_cp_create_conn *cp;
1434	struct hci_conn *conn;
1435
1436	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1437
1438	cp = hci_sent_cmd_data(hdev, HCI_OP_CREATE_CONN);
1439	if (!cp)
1440		return;
1441
1442	hci_dev_lock(hdev);
1443
1444	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
1445
1446	BT_DBG("%s bdaddr %pMR hcon %p", hdev->name, &cp->bdaddr, conn);
1447
1448	if (status) {
1449		if (conn && conn->state == BT_CONNECT) {
1450			if (status != 0x0c || conn->attempt > 2) {
1451				conn->state = BT_CLOSED;
1452				hci_proto_connect_cfm(conn, status);
1453				hci_conn_del(conn);
1454			} else
1455				conn->state = BT_CONNECT2;
1456		}
1457	} else {
1458		if (!conn) {
1459			conn = hci_conn_add(hdev, ACL_LINK, &cp->bdaddr);
1460			if (conn) {
1461				conn->out = true;
1462				conn->link_mode |= HCI_LM_MASTER;
1463			} else
1464				BT_ERR("No memory for new connection");
1465		}
1466	}
1467
1468	hci_dev_unlock(hdev);
1469}
1470
1471static void hci_cs_add_sco(struct hci_dev *hdev, __u8 status)
1472{
1473	struct hci_cp_add_sco *cp;
1474	struct hci_conn *acl, *sco;
1475	__u16 handle;
1476
1477	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1478
1479	if (!status)
1480		return;
1481
1482	cp = hci_sent_cmd_data(hdev, HCI_OP_ADD_SCO);
1483	if (!cp)
1484		return;
1485
1486	handle = __le16_to_cpu(cp->handle);
1487
1488	BT_DBG("%s handle 0x%4.4x", hdev->name, handle);
1489
1490	hci_dev_lock(hdev);
1491
1492	acl = hci_conn_hash_lookup_handle(hdev, handle);
1493	if (acl) {
1494		sco = acl->link;
1495		if (sco) {
1496			sco->state = BT_CLOSED;
1497
1498			hci_proto_connect_cfm(sco, status);
1499			hci_conn_del(sco);
1500		}
1501	}
1502
1503	hci_dev_unlock(hdev);
1504}
1505
1506static void hci_cs_auth_requested(struct hci_dev *hdev, __u8 status)
1507{
1508	struct hci_cp_auth_requested *cp;
1509	struct hci_conn *conn;
1510
1511	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1512
1513	if (!status)
1514		return;
1515
1516	cp = hci_sent_cmd_data(hdev, HCI_OP_AUTH_REQUESTED);
1517	if (!cp)
1518		return;
1519
1520	hci_dev_lock(hdev);
1521
1522	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1523	if (conn) {
1524		if (conn->state == BT_CONFIG) {
1525			hci_proto_connect_cfm(conn, status);
1526			hci_conn_put(conn);
1527		}
1528	}
1529
1530	hci_dev_unlock(hdev);
1531}
1532
1533static void hci_cs_set_conn_encrypt(struct hci_dev *hdev, __u8 status)
1534{
1535	struct hci_cp_set_conn_encrypt *cp;
1536	struct hci_conn *conn;
1537
1538	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1539
1540	if (!status)
1541		return;
1542
1543	cp = hci_sent_cmd_data(hdev, HCI_OP_SET_CONN_ENCRYPT);
1544	if (!cp)
1545		return;
1546
1547	hci_dev_lock(hdev);
1548
1549	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1550	if (conn) {
1551		if (conn->state == BT_CONFIG) {
1552			hci_proto_connect_cfm(conn, status);
1553			hci_conn_put(conn);
1554		}
1555	}
1556
1557	hci_dev_unlock(hdev);
1558}
1559
1560static int hci_outgoing_auth_needed(struct hci_dev *hdev,
1561				    struct hci_conn *conn)
1562{
1563	if (conn->state != BT_CONFIG || !conn->out)
1564		return 0;
1565
1566	if (conn->pending_sec_level == BT_SECURITY_SDP)
1567		return 0;
1568
1569	/* Only request authentication for SSP connections or non-SSP
1570	 * devices with sec_level HIGH or if MITM protection is requested */
1571	if (!hci_conn_ssp_enabled(conn) && !(conn->auth_type & 0x01) &&
1572	    conn->pending_sec_level != BT_SECURITY_HIGH)
1573		return 0;
1574
1575	return 1;
1576}
1577
1578static int hci_resolve_name(struct hci_dev *hdev,
1579				   struct inquiry_entry *e)
1580{
1581	struct hci_cp_remote_name_req cp;
1582
1583	memset(&cp, 0, sizeof(cp));
1584
1585	bacpy(&cp.bdaddr, &e->data.bdaddr);
1586	cp.pscan_rep_mode = e->data.pscan_rep_mode;
1587	cp.pscan_mode = e->data.pscan_mode;
1588	cp.clock_offset = e->data.clock_offset;
1589
1590	return hci_send_cmd(hdev, HCI_OP_REMOTE_NAME_REQ, sizeof(cp), &cp);
1591}
1592
1593static bool hci_resolve_next_name(struct hci_dev *hdev)
1594{
1595	struct discovery_state *discov = &hdev->discovery;
1596	struct inquiry_entry *e;
1597
1598	if (list_empty(&discov->resolve))
1599		return false;
1600
1601	e = hci_inquiry_cache_lookup_resolve(hdev, BDADDR_ANY, NAME_NEEDED);
1602	if (!e)
1603		return false;
1604
1605	if (hci_resolve_name(hdev, e) == 0) {
1606		e->name_state = NAME_PENDING;
1607		return true;
1608	}
1609
1610	return false;
1611}
1612
1613static void hci_check_pending_name(struct hci_dev *hdev, struct hci_conn *conn,
1614				   bdaddr_t *bdaddr, u8 *name, u8 name_len)
1615{
1616	struct discovery_state *discov = &hdev->discovery;
1617	struct inquiry_entry *e;
1618
1619	if (conn && !test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags))
1620		mgmt_device_connected(hdev, bdaddr, ACL_LINK, 0x00, 0, name,
1621				      name_len, conn->dev_class);
1622
1623	if (discov->state == DISCOVERY_STOPPED)
1624		return;
1625
1626	if (discov->state == DISCOVERY_STOPPING)
1627		goto discov_complete;
1628
1629	if (discov->state != DISCOVERY_RESOLVING)
1630		return;
1631
1632	e = hci_inquiry_cache_lookup_resolve(hdev, bdaddr, NAME_PENDING);
1633	/* If the device was not found in a list of found devices names of which
1634	 * are pending. there is no need to continue resolving a next name as it
1635	 * will be done upon receiving another Remote Name Request Complete
1636	 * Event */
1637	if (!e)
1638		return;
1639
1640	list_del(&e->list);
1641	if (name) {
1642		e->name_state = NAME_KNOWN;
1643		mgmt_remote_name(hdev, bdaddr, ACL_LINK, 0x00,
1644				 e->data.rssi, name, name_len);
1645	} else {
1646		e->name_state = NAME_NOT_KNOWN;
1647	}
1648
1649	if (hci_resolve_next_name(hdev))
1650		return;
1651
1652discov_complete:
1653	hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
1654}
1655
1656static void hci_cs_remote_name_req(struct hci_dev *hdev, __u8 status)
1657{
1658	struct hci_cp_remote_name_req *cp;
1659	struct hci_conn *conn;
1660
1661	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1662
1663	/* If successful wait for the name req complete event before
1664	 * checking for the need to do authentication */
1665	if (!status)
1666		return;
1667
1668	cp = hci_sent_cmd_data(hdev, HCI_OP_REMOTE_NAME_REQ);
1669	if (!cp)
1670		return;
1671
1672	hci_dev_lock(hdev);
1673
1674	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
1675
1676	if (test_bit(HCI_MGMT, &hdev->dev_flags))
1677		hci_check_pending_name(hdev, conn, &cp->bdaddr, NULL, 0);
1678
1679	if (!conn)
1680		goto unlock;
1681
1682	if (!hci_outgoing_auth_needed(hdev, conn))
1683		goto unlock;
1684
1685	if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
1686		struct hci_cp_auth_requested cp;
1687		cp.handle = __cpu_to_le16(conn->handle);
1688		hci_send_cmd(hdev, HCI_OP_AUTH_REQUESTED, sizeof(cp), &cp);
1689	}
1690
1691unlock:
1692	hci_dev_unlock(hdev);
1693}
1694
1695static void hci_cs_read_remote_features(struct hci_dev *hdev, __u8 status)
1696{
1697	struct hci_cp_read_remote_features *cp;
1698	struct hci_conn *conn;
1699
1700	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1701
1702	if (!status)
1703		return;
1704
1705	cp = hci_sent_cmd_data(hdev, HCI_OP_READ_REMOTE_FEATURES);
1706	if (!cp)
1707		return;
1708
1709	hci_dev_lock(hdev);
1710
1711	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1712	if (conn) {
1713		if (conn->state == BT_CONFIG) {
1714			hci_proto_connect_cfm(conn, status);
1715			hci_conn_put(conn);
1716		}
1717	}
1718
1719	hci_dev_unlock(hdev);
1720}
1721
1722static void hci_cs_read_remote_ext_features(struct hci_dev *hdev, __u8 status)
1723{
1724	struct hci_cp_read_remote_ext_features *cp;
1725	struct hci_conn *conn;
1726
1727	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1728
1729	if (!status)
1730		return;
1731
1732	cp = hci_sent_cmd_data(hdev, HCI_OP_READ_REMOTE_EXT_FEATURES);
1733	if (!cp)
1734		return;
1735
1736	hci_dev_lock(hdev);
1737
1738	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1739	if (conn) {
1740		if (conn->state == BT_CONFIG) {
1741			hci_proto_connect_cfm(conn, status);
1742			hci_conn_put(conn);
1743		}
1744	}
1745
1746	hci_dev_unlock(hdev);
1747}
1748
1749static void hci_cs_setup_sync_conn(struct hci_dev *hdev, __u8 status)
1750{
1751	struct hci_cp_setup_sync_conn *cp;
1752	struct hci_conn *acl, *sco;
1753	__u16 handle;
1754
1755	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1756
1757	if (!status)
1758		return;
1759
1760	cp = hci_sent_cmd_data(hdev, HCI_OP_SETUP_SYNC_CONN);
1761	if (!cp)
1762		return;
1763
1764	handle = __le16_to_cpu(cp->handle);
1765
1766	BT_DBG("%s handle 0x%4.4x", hdev->name, handle);
1767
1768	hci_dev_lock(hdev);
1769
1770	acl = hci_conn_hash_lookup_handle(hdev, handle);
1771	if (acl) {
1772		sco = acl->link;
1773		if (sco) {
1774			sco->state = BT_CLOSED;
1775
1776			hci_proto_connect_cfm(sco, status);
1777			hci_conn_del(sco);
1778		}
1779	}
1780
1781	hci_dev_unlock(hdev);
1782}
1783
1784static void hci_cs_sniff_mode(struct hci_dev *hdev, __u8 status)
1785{
1786	struct hci_cp_sniff_mode *cp;
1787	struct hci_conn *conn;
1788
1789	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1790
1791	if (!status)
1792		return;
1793
1794	cp = hci_sent_cmd_data(hdev, HCI_OP_SNIFF_MODE);
1795	if (!cp)
1796		return;
1797
1798	hci_dev_lock(hdev);
1799
1800	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1801	if (conn) {
1802		clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags);
1803
1804		if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->flags))
1805			hci_sco_setup(conn, status);
1806	}
1807
1808	hci_dev_unlock(hdev);
1809}
1810
1811static void hci_cs_exit_sniff_mode(struct hci_dev *hdev, __u8 status)
1812{
1813	struct hci_cp_exit_sniff_mode *cp;
1814	struct hci_conn *conn;
1815
1816	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1817
1818	if (!status)
1819		return;
1820
1821	cp = hci_sent_cmd_data(hdev, HCI_OP_EXIT_SNIFF_MODE);
1822	if (!cp)
1823		return;
1824
1825	hci_dev_lock(hdev);
1826
1827	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1828	if (conn) {
1829		clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags);
1830
1831		if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->flags))
1832			hci_sco_setup(conn, status);
1833	}
1834
1835	hci_dev_unlock(hdev);
1836}
1837
1838static void hci_cs_disconnect(struct hci_dev *hdev, u8 status)
1839{
1840	struct hci_cp_disconnect *cp;
1841	struct hci_conn *conn;
1842
1843	if (!status)
1844		return;
1845
1846	cp = hci_sent_cmd_data(hdev, HCI_OP_DISCONNECT);
1847	if (!cp)
1848		return;
1849
1850	hci_dev_lock(hdev);
1851
1852	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1853	if (conn)
1854		mgmt_disconnect_failed(hdev, &conn->dst, conn->type,
1855				       conn->dst_type, status);
1856
1857	hci_dev_unlock(hdev);
1858}
1859
1860static void hci_cs_le_create_conn(struct hci_dev *hdev, __u8 status)
1861{
1862	struct hci_conn *conn;
1863
1864	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1865
1866	if (status) {
1867		hci_dev_lock(hdev);
1868
1869		conn = hci_conn_hash_lookup_state(hdev, LE_LINK, BT_CONNECT);
1870		if (!conn) {
1871			hci_dev_unlock(hdev);
1872			return;
1873		}
1874
1875		BT_DBG("%s bdaddr %pMR conn %p", hdev->name, &conn->dst, conn);
1876
1877		conn->state = BT_CLOSED;
1878		mgmt_connect_failed(hdev, &conn->dst, conn->type,
1879				    conn->dst_type, status);
1880		hci_proto_connect_cfm(conn, status);
1881		hci_conn_del(conn);
1882
1883		hci_dev_unlock(hdev);
1884	}
1885}
1886
1887static void hci_cs_le_start_enc(struct hci_dev *hdev, u8 status)
1888{
1889	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1890}
1891
1892static void hci_cs_create_phylink(struct hci_dev *hdev, u8 status)
1893{
1894	struct hci_cp_create_phy_link *cp;
1895
1896	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1897
1898	cp = hci_sent_cmd_data(hdev, HCI_OP_CREATE_PHY_LINK);
1899	if (!cp)
1900		return;
1901
1902	hci_dev_lock(hdev);
1903
1904	if (status) {
1905		struct hci_conn *hcon;
1906
1907		hcon = hci_conn_hash_lookup_handle(hdev, cp->phy_handle);
1908		if (hcon)
1909			hci_conn_del(hcon);
1910	} else {
1911		amp_write_remote_assoc(hdev, cp->phy_handle);
1912	}
1913
1914	hci_dev_unlock(hdev);
1915}
1916
1917static void hci_cs_accept_phylink(struct hci_dev *hdev, u8 status)
1918{
1919	struct hci_cp_accept_phy_link *cp;
1920
1921	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1922
1923	if (status)
1924		return;
1925
1926	cp = hci_sent_cmd_data(hdev, HCI_OP_ACCEPT_PHY_LINK);
1927	if (!cp)
1928		return;
1929
1930	amp_write_remote_assoc(hdev, cp->phy_handle);
1931}
1932
1933static void hci_cs_create_logical_link(struct hci_dev *hdev, u8 status)
1934{
1935	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1936}
1937
1938static void hci_inquiry_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1939{
1940	__u8 status = *((__u8 *) skb->data);
1941	struct discovery_state *discov = &hdev->discovery;
1942	struct inquiry_entry *e;
1943
1944	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1945
1946	hci_req_complete(hdev, HCI_OP_INQUIRY, status);
1947
1948	hci_conn_check_pending(hdev);
1949
1950	if (!test_and_clear_bit(HCI_INQUIRY, &hdev->flags))
1951		return;
1952
1953	if (!test_bit(HCI_MGMT, &hdev->dev_flags))
1954		return;
1955
1956	hci_dev_lock(hdev);
1957
1958	if (discov->state != DISCOVERY_FINDING)
1959		goto unlock;
1960
1961	if (list_empty(&discov->resolve)) {
1962		hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
1963		goto unlock;
1964	}
1965
1966	e = hci_inquiry_cache_lookup_resolve(hdev, BDADDR_ANY, NAME_NEEDED);
1967	if (e && hci_resolve_name(hdev, e) == 0) {
1968		e->name_state = NAME_PENDING;
1969		hci_discovery_set_state(hdev, DISCOVERY_RESOLVING);
1970	} else {
1971		hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
1972	}
1973
1974unlock:
1975	hci_dev_unlock(hdev);
1976}
1977
1978static void hci_inquiry_result_evt(struct hci_dev *hdev, struct sk_buff *skb)
1979{
1980	struct inquiry_data data;
1981	struct inquiry_info *info = (void *) (skb->data + 1);
1982	int num_rsp = *((__u8 *) skb->data);
1983
1984	BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
1985
1986	if (!num_rsp)
1987		return;
1988
1989	if (test_bit(HCI_PERIODIC_INQ, &hdev->dev_flags))
1990		return;
1991
1992	hci_dev_lock(hdev);
1993
1994	for (; num_rsp; num_rsp--, info++) {
1995		bool name_known, ssp;
1996
1997		bacpy(&data.bdaddr, &info->bdaddr);
1998		data.pscan_rep_mode	= info->pscan_rep_mode;
1999		data.pscan_period_mode	= info->pscan_period_mode;
2000		data.pscan_mode		= info->pscan_mode;
2001		memcpy(data.dev_class, info->dev_class, 3);
2002		data.clock_offset	= info->clock_offset;
2003		data.rssi		= 0x00;
2004		data.ssp_mode		= 0x00;
2005
2006		name_known = hci_inquiry_cache_update(hdev, &data, false, &ssp);
2007		mgmt_device_found(hdev, &info->bdaddr, ACL_LINK, 0x00,
2008				  info->dev_class, 0, !name_known, ssp, NULL,
2009				  0);
2010	}
2011
2012	hci_dev_unlock(hdev);
2013}
2014
2015static void hci_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
2016{
2017	struct hci_ev_conn_complete *ev = (void *) skb->data;
2018	struct hci_conn *conn;
2019
2020	BT_DBG("%s", hdev->name);
2021
2022	hci_dev_lock(hdev);
2023
2024	conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
2025	if (!conn) {
2026		if (ev->link_type != SCO_LINK)
2027			goto unlock;
2028
2029		conn = hci_conn_hash_lookup_ba(hdev, ESCO_LINK, &ev->bdaddr);
2030		if (!conn)
2031			goto unlock;
2032
2033		conn->type = SCO_LINK;
2034	}
2035
2036	if (!ev->status) {
2037		conn->handle = __le16_to_cpu(ev->handle);
2038
2039		if (conn->type == ACL_LINK) {
2040			conn->state = BT_CONFIG;
2041			hci_conn_hold(conn);
2042
2043			if (!conn->out && !hci_conn_ssp_enabled(conn) &&
2044			    !hci_find_link_key(hdev, &ev->bdaddr))
2045				conn->disc_timeout = HCI_PAIRING_TIMEOUT;
2046			else
2047				conn->disc_timeout = HCI_DISCONN_TIMEOUT;
2048		} else
2049			conn->state = BT_CONNECTED;
2050
2051		hci_conn_hold_device(conn);
2052		hci_conn_add_sysfs(conn);
2053
2054		if (test_bit(HCI_AUTH, &hdev->flags))
2055			conn->link_mode |= HCI_LM_AUTH;
2056
2057		if (test_bit(HCI_ENCRYPT, &hdev->flags))
2058			conn->link_mode |= HCI_LM_ENCRYPT;
2059
2060		/* Get remote features */
2061		if (conn->type == ACL_LINK) {
2062			struct hci_cp_read_remote_features cp;
2063			cp.handle = ev->handle;
2064			hci_send_cmd(hdev, HCI_OP_READ_REMOTE_FEATURES,
2065				     sizeof(cp), &cp);
2066		}
2067
2068		/* Set packet type for incoming connection */
2069		if (!conn->out && hdev->hci_ver < BLUETOOTH_VER_2_0) {
2070			struct hci_cp_change_conn_ptype cp;
2071			cp.handle = ev->handle;
2072			cp.pkt_type = cpu_to_le16(conn->pkt_type);
2073			hci_send_cmd(hdev, HCI_OP_CHANGE_CONN_PTYPE, sizeof(cp),
2074				     &cp);
2075		}
2076	} else {
2077		conn->state = BT_CLOSED;
2078		if (conn->type == ACL_LINK)
2079			mgmt_connect_failed(hdev, &ev->bdaddr, conn->type,
2080					    conn->dst_type, ev->status);
2081	}
2082
2083	if (conn->type == ACL_LINK)
2084		hci_sco_setup(conn, ev->status);
2085
2086	if (ev->status) {
2087		hci_proto_connect_cfm(conn, ev->status);
2088		hci_conn_del(conn);
2089	} else if (ev->link_type != ACL_LINK)
2090		hci_proto_connect_cfm(conn, ev->status);
2091
2092unlock:
2093	hci_dev_unlock(hdev);
2094
2095	hci_conn_check_pending(hdev);
2096}
2097
2098void hci_conn_accept(struct hci_conn *conn, int mask)
2099{
2100	struct hci_dev *hdev = conn->hdev;
2101
2102	BT_DBG("conn %p", conn);
2103
2104	conn->state = BT_CONFIG;
2105
2106	if (!lmp_esco_capable(hdev)) {
2107		struct hci_cp_accept_conn_req cp;
2108
2109		bacpy(&cp.bdaddr, &conn->dst);
2110
2111		if (lmp_rswitch_capable(hdev) && (mask & HCI_LM_MASTER))
2112			cp.role = 0x00; /* Become master */
2113		else
2114			cp.role = 0x01; /* Remain slave */
2115
2116		hci_send_cmd(hdev, HCI_OP_ACCEPT_CONN_REQ, sizeof(cp), &cp);
2117	} else /* lmp_esco_capable(hdev)) */ {
2118		struct hci_cp_accept_sync_conn_req cp;
2119
2120		bacpy(&cp.bdaddr, &conn->dst);
2121		cp.pkt_type = cpu_to_le16(conn->pkt_type);
2122
2123		cp.tx_bandwidth   = __constant_cpu_to_le32(0x00001f40);
2124		cp.rx_bandwidth   = __constant_cpu_to_le32(0x00001f40);
2125		cp.max_latency    = __constant_cpu_to_le16(0xffff);
2126		cp.content_format = cpu_to_le16(hdev->voice_setting);
2127		cp.retrans_effort = 0xff;
2128
2129		hci_send_cmd(hdev, HCI_OP_ACCEPT_SYNC_CONN_REQ,
2130			     sizeof(cp), &cp);
2131	}
2132}
2133
2134static void hci_conn_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
2135{
2136	struct hci_ev_conn_request *ev = (void *) skb->data;
2137	int mask = hdev->link_mode;
2138	__u8 flags = 0;
2139
2140	BT_DBG("%s bdaddr %pMR type 0x%x", hdev->name, &ev->bdaddr,
2141	       ev->link_type);
2142
2143	mask |= hci_proto_connect_ind(hdev, &ev->bdaddr, ev->link_type,
2144				      &flags);
2145
2146	if ((mask & HCI_LM_ACCEPT) &&
2147	    !hci_blacklist_lookup(hdev, &ev->bdaddr)) {
2148		/* Connection accepted */
2149		struct inquiry_entry *ie;
2150		struct hci_conn *conn;
2151
2152		hci_dev_lock(hdev);
2153
2154		ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr);
2155		if (ie)
2156			memcpy(ie->data.dev_class, ev->dev_class, 3);
2157
2158		conn = hci_conn_hash_lookup_ba(hdev, ev->link_type,
2159					       &ev->bdaddr);
2160		if (!conn) {
2161			conn = hci_conn_add(hdev, ev->link_type, &ev->bdaddr);
2162			if (!conn) {
2163				BT_ERR("No memory for new connection");
2164				hci_dev_unlock(hdev);
2165				return;
2166			}
2167		}
2168
2169		memcpy(conn->dev_class, ev->dev_class, 3);
2170
2171		hci_dev_unlock(hdev);
2172
2173		if (ev->link_type == ACL_LINK ||
2174		    (!(flags & HCI_PROTO_DEFER) && !lmp_esco_capable(hdev))) {
2175			struct hci_cp_accept_conn_req cp;
2176			conn->state = BT_CONNECT;
2177
2178			bacpy(&cp.bdaddr, &ev->bdaddr);
2179
2180			if (lmp_rswitch_capable(hdev) && (mask & HCI_LM_MASTER))
2181				cp.role = 0x00; /* Become master */
2182			else
2183				cp.role = 0x01; /* Remain slave */
2184
2185			hci_send_cmd(hdev, HCI_OP_ACCEPT_CONN_REQ, sizeof(cp),
2186				     &cp);
2187		} else if (!(flags & HCI_PROTO_DEFER)) {
2188			struct hci_cp_accept_sync_conn_req cp;
2189			conn->state = BT_CONNECT;
2190
2191			bacpy(&cp.bdaddr, &ev->bdaddr);
2192			cp.pkt_type = cpu_to_le16(conn->pkt_type);
2193
2194			cp.tx_bandwidth   = __constant_cpu_to_le32(0x00001f40);
2195			cp.rx_bandwidth   = __constant_cpu_to_le32(0x00001f40);
2196			cp.max_latency    = __constant_cpu_to_le16(0xffff);
2197			cp.content_format = cpu_to_le16(hdev->voice_setting);
2198			cp.retrans_effort = 0xff;
2199
2200			hci_send_cmd(hdev, HCI_OP_ACCEPT_SYNC_CONN_REQ,
2201				     sizeof(cp), &cp);
2202		} else {
2203			conn->state = BT_CONNECT2;
2204			hci_proto_connect_cfm(conn, 0);
2205			hci_conn_put(conn);
2206		}
2207	} else {
2208		/* Connection rejected */
2209		struct hci_cp_reject_conn_req cp;
2210
2211		bacpy(&cp.bdaddr, &ev->bdaddr);
2212		cp.reason = HCI_ERROR_REJ_BAD_ADDR;
2213		hci_send_cmd(hdev, HCI_OP_REJECT_CONN_REQ, sizeof(cp), &cp);
2214	}
2215}
2216
2217static u8 hci_to_mgmt_reason(u8 err)
2218{
2219	switch (err) {
2220	case HCI_ERROR_CONNECTION_TIMEOUT:
2221		return MGMT_DEV_DISCONN_TIMEOUT;
2222	case HCI_ERROR_REMOTE_USER_TERM:
2223	case HCI_ERROR_REMOTE_LOW_RESOURCES:
2224	case HCI_ERROR_REMOTE_POWER_OFF:
2225		return MGMT_DEV_DISCONN_REMOTE;
2226	case HCI_ERROR_LOCAL_HOST_TERM:
2227		return MGMT_DEV_DISCONN_LOCAL_HOST;
2228	default:
2229		return MGMT_DEV_DISCONN_UNKNOWN;
2230	}
2231}
2232
2233static void hci_disconn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
2234{
2235	struct hci_ev_disconn_complete *ev = (void *) skb->data;
2236	struct hci_conn *conn;
2237
2238	BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2239
2240	hci_dev_lock(hdev);
2241
2242	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2243	if (!conn)
2244		goto unlock;
2245
2246	if (ev->status == 0)
2247		conn->state = BT_CLOSED;
2248
2249	if (test_and_clear_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags) &&
2250	    (conn->type == ACL_LINK || conn->type == LE_LINK)) {
2251		if (ev->status) {
2252			mgmt_disconnect_failed(hdev, &conn->dst, conn->type,
2253					       conn->dst_type, ev->status);
2254		} else {
2255			u8 reason = hci_to_mgmt_reason(ev->reason);
2256
2257			mgmt_device_disconnected(hdev, &conn->dst, conn->type,
2258						 conn->dst_type, reason);
2259		}
2260	}
2261
2262	if (ev->status == 0) {
2263		if (conn->type == ACL_LINK && conn->flush_key)
2264			hci_remove_link_key(hdev, &conn->dst);
2265		hci_proto_disconn_cfm(conn, ev->reason);
2266		hci_conn_del(conn);
2267	}
2268
2269unlock:
2270	hci_dev_unlock(hdev);
2271}
2272
2273static void hci_auth_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
2274{
2275	struct hci_ev_auth_complete *ev = (void *) skb->data;
2276	struct hci_conn *conn;
2277
2278	BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2279
2280	hci_dev_lock(hdev);
2281
2282	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2283	if (!conn)
2284		goto unlock;
2285
2286	if (!ev->status) {
2287		if (!hci_conn_ssp_enabled(conn) &&
2288		    test_bit(HCI_CONN_REAUTH_PEND, &conn->flags)) {
2289			BT_INFO("re-auth of legacy device is not possible.");
2290		} else {
2291			conn->link_mode |= HCI_LM_AUTH;
2292			conn->sec_level = conn->pending_sec_level;
2293		}
2294	} else {
2295		mgmt_auth_failed(hdev, &conn->dst, conn->type, conn->dst_type,
2296				 ev->status);
2297	}
2298
2299	clear_bit(HCI_CONN_AUTH_PEND, &conn->flags);
2300	clear_bit(HCI_CONN_REAUTH_PEND, &conn->flags);
2301
2302	if (conn->state == BT_CONFIG) {
2303		if (!ev->status && hci_conn_ssp_enabled(conn)) {
2304			struct hci_cp_set_conn_encrypt cp;
2305			cp.handle  = ev->handle;
2306			cp.encrypt = 0x01;
2307			hci_send_cmd(hdev, HCI_OP_SET_CONN_ENCRYPT, sizeof(cp),
2308				     &cp);
2309		} else {
2310			conn->state = BT_CONNECTED;
2311			hci_proto_connect_cfm(conn, ev->status);
2312			hci_conn_put(conn);
2313		}
2314	} else {
2315		hci_auth_cfm(conn, ev->status);
2316
2317		hci_conn_hold(conn);
2318		conn->disc_timeout = HCI_DISCONN_TIMEOUT;
2319		hci_conn_put(conn);
2320	}
2321
2322	if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags)) {
2323		if (!ev->status) {
2324			struct hci_cp_set_conn_encrypt cp;
2325			cp.handle  = ev->handle;
2326			cp.encrypt = 0x01;
2327			hci_send_cmd(hdev, HCI_OP_SET_CONN_ENCRYPT, sizeof(cp),
2328				     &cp);
2329		} else {
2330			clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
2331			hci_encrypt_cfm(conn, ev->status, 0x00);
2332		}
2333	}
2334
2335unlock:
2336	hci_dev_unlock(hdev);
2337}
2338
2339static void hci_remote_name_evt(struct hci_dev *hdev, struct sk_buff *skb)
2340{
2341	struct hci_ev_remote_name *ev = (void *) skb->data;
2342	struct hci_conn *conn;
2343
2344	BT_DBG("%s", hdev->name);
2345
2346	hci_conn_check_pending(hdev);
2347
2348	hci_dev_lock(hdev);
2349
2350	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
2351
2352	if (!test_bit(HCI_MGMT, &hdev->dev_flags))
2353		goto check_auth;
2354
2355	if (ev->status == 0)
2356		hci_check_pending_name(hdev, conn, &ev->bdaddr, ev->name,
2357				       strnlen(ev->name, HCI_MAX_NAME_LENGTH));
2358	else
2359		hci_check_pending_name(hdev, conn, &ev->bdaddr, NULL, 0);
2360
2361check_auth:
2362	if (!conn)
2363		goto unlock;
2364
2365	if (!hci_outgoing_auth_needed(hdev, conn))
2366		goto unlock;
2367
2368	if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
2369		struct hci_cp_auth_requested cp;
2370		cp.handle = __cpu_to_le16(conn->handle);
2371		hci_send_cmd(hdev, HCI_OP_AUTH_REQUESTED, sizeof(cp), &cp);
2372	}
2373
2374unlock:
2375	hci_dev_unlock(hdev);
2376}
2377
2378static void hci_encrypt_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
2379{
2380	struct hci_ev_encrypt_change *ev = (void *) skb->data;
2381	struct hci_conn *conn;
2382
2383	BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2384
2385	hci_dev_lock(hdev);
2386
2387	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2388	if (conn) {
2389		if (!ev->status) {
2390			if (ev->encrypt) {
2391				/* Encryption implies authentication */
2392				conn->link_mode |= HCI_LM_AUTH;
2393				conn->link_mode |= HCI_LM_ENCRYPT;
2394				conn->sec_level = conn->pending_sec_level;
2395			} else
2396				conn->link_mode &= ~HCI_LM_ENCRYPT;
2397		}
2398
2399		clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
2400
2401		if (ev->status && conn->state == BT_CONNECTED) {
2402			hci_acl_disconn(conn, HCI_ERROR_AUTH_FAILURE);
2403			hci_conn_put(conn);
2404			goto unlock;
2405		}
2406
2407		if (conn->state == BT_CONFIG) {
2408			if (!ev->status)
2409				conn->state = BT_CONNECTED;
2410
2411			hci_proto_connect_cfm(conn, ev->status);
2412			hci_conn_put(conn);
2413		} else
2414			hci_encrypt_cfm(conn, ev->status, ev->encrypt);
2415	}
2416
2417unlock:
2418	hci_dev_unlock(hdev);
2419}
2420
2421static void hci_change_link_key_complete_evt(struct hci_dev *hdev,
2422					     struct sk_buff *skb)
2423{
2424	struct hci_ev_change_link_key_complete *ev = (void *) skb->data;
2425	struct hci_conn *conn;
2426
2427	BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2428
2429	hci_dev_lock(hdev);
2430
2431	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2432	if (conn) {
2433		if (!ev->status)
2434			conn->link_mode |= HCI_LM_SECURE;
2435
2436		clear_bit(HCI_CONN_AUTH_PEND, &conn->flags);
2437
2438		hci_key_change_cfm(conn, ev->status);
2439	}
2440
2441	hci_dev_unlock(hdev);
2442}
2443
2444static void hci_remote_features_evt(struct hci_dev *hdev,
2445				    struct sk_buff *skb)
2446{
2447	struct hci_ev_remote_features *ev = (void *) skb->data;
2448	struct hci_conn *conn;
2449
2450	BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2451
2452	hci_dev_lock(hdev);
2453
2454	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2455	if (!conn)
2456		goto unlock;
2457
2458	if (!ev->status)
2459		memcpy(conn->features, ev->features, 8);
2460
2461	if (conn->state != BT_CONFIG)
2462		goto unlock;
2463
2464	if (!ev->status && lmp_ssp_capable(hdev) && lmp_ssp_capable(conn)) {
2465		struct hci_cp_read_remote_ext_features cp;
2466		cp.handle = ev->handle;
2467		cp.page = 0x01;
2468		hci_send_cmd(hdev, HCI_OP_READ_REMOTE_EXT_FEATURES,
2469			     sizeof(cp), &cp);
2470		goto unlock;
2471	}
2472
2473	if (!ev->status && !test_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags)) {
2474		struct hci_cp_remote_name_req cp;
2475		memset(&cp, 0, sizeof(cp));
2476		bacpy(&cp.bdaddr, &conn->dst);
2477		cp.pscan_rep_mode = 0x02;
2478		hci_send_cmd(hdev, HCI_OP_REMOTE_NAME_REQ, sizeof(cp), &cp);
2479	} else if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags))
2480		mgmt_device_connected(hdev, &conn->dst, conn->type,
2481				      conn->dst_type, 0, NULL, 0,
2482				      conn->dev_class);
2483
2484	if (!hci_outgoing_auth_needed(hdev, conn)) {
2485		conn->state = BT_CONNECTED;
2486		hci_proto_connect_cfm(conn, ev->status);
2487		hci_conn_put(conn);
2488	}
2489
2490unlock:
2491	hci_dev_unlock(hdev);
2492}
2493
2494static void hci_remote_version_evt(struct hci_dev *hdev, struct sk_buff *skb)
2495{
2496	BT_DBG("%s", hdev->name);
2497}
2498
2499static void hci_qos_setup_complete_evt(struct hci_dev *hdev,
2500				       struct sk_buff *skb)
2501{
2502	BT_DBG("%s", hdev->name);
2503}
2504
2505static void hci_cmd_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
2506{
2507	struct hci_ev_cmd_complete *ev = (void *) skb->data;
2508	__u16 opcode;
2509
2510	skb_pull(skb, sizeof(*ev));
2511
2512	opcode = __le16_to_cpu(ev->opcode);
2513
2514	switch (opcode) {
2515	case HCI_OP_INQUIRY_CANCEL:
2516		hci_cc_inquiry_cancel(hdev, skb);
2517		break;
2518
2519	case HCI_OP_PERIODIC_INQ:
2520		hci_cc_periodic_inq(hdev, skb);
2521		break;
2522
2523	case HCI_OP_EXIT_PERIODIC_INQ:
2524		hci_cc_exit_periodic_inq(hdev, skb);
2525		break;
2526
2527	case HCI_OP_REMOTE_NAME_REQ_CANCEL:
2528		hci_cc_remote_name_req_cancel(hdev, skb);
2529		break;
2530
2531	case HCI_OP_ROLE_DISCOVERY:
2532		hci_cc_role_discovery(hdev, skb);
2533		break;
2534
2535	case HCI_OP_READ_LINK_POLICY:
2536		hci_cc_read_link_policy(hdev, skb);
2537		break;
2538
2539	case HCI_OP_WRITE_LINK_POLICY:
2540		hci_cc_write_link_policy(hdev, skb);
2541		break;
2542
2543	case HCI_OP_READ_DEF_LINK_POLICY:
2544		hci_cc_read_def_link_policy(hdev, skb);
2545		break;
2546
2547	case HCI_OP_WRITE_DEF_LINK_POLICY:
2548		hci_cc_write_def_link_policy(hdev, skb);
2549		break;
2550
2551	case HCI_OP_RESET:
2552		hci_cc_reset(hdev, skb);
2553		break;
2554
2555	case HCI_OP_WRITE_LOCAL_NAME:
2556		hci_cc_write_local_name(hdev, skb);
2557		break;
2558
2559	case HCI_OP_READ_LOCAL_NAME:
2560		hci_cc_read_local_name(hdev, skb);
2561		break;
2562
2563	case HCI_OP_WRITE_AUTH_ENABLE:
2564		hci_cc_write_auth_enable(hdev, skb);
2565		break;
2566
2567	case HCI_OP_WRITE_ENCRYPT_MODE:
2568		hci_cc_write_encrypt_mode(hdev, skb);
2569		break;
2570
2571	case HCI_OP_WRITE_SCAN_ENABLE:
2572		hci_cc_write_scan_enable(hdev, skb);
2573		break;
2574
2575	case HCI_OP_READ_CLASS_OF_DEV:
2576		hci_cc_read_class_of_dev(hdev, skb);
2577		break;
2578
2579	case HCI_OP_WRITE_CLASS_OF_DEV:
2580		hci_cc_write_class_of_dev(hdev, skb);
2581		break;
2582
2583	case HCI_OP_READ_VOICE_SETTING:
2584		hci_cc_read_voice_setting(hdev, skb);
2585		break;
2586
2587	case HCI_OP_WRITE_VOICE_SETTING:
2588		hci_cc_write_voice_setting(hdev, skb);
2589		break;
2590
2591	case HCI_OP_HOST_BUFFER_SIZE:
2592		hci_cc_host_buffer_size(hdev, skb);
2593		break;
2594
2595	case HCI_OP_WRITE_SSP_MODE:
2596		hci_cc_write_ssp_mode(hdev, skb);
2597		break;
2598
2599	case HCI_OP_READ_LOCAL_VERSION:
2600		hci_cc_read_local_version(hdev, skb);
2601		break;
2602
2603	case HCI_OP_READ_LOCAL_COMMANDS:
2604		hci_cc_read_local_commands(hdev, skb);
2605		break;
2606
2607	case HCI_OP_READ_LOCAL_FEATURES:
2608		hci_cc_read_local_features(hdev, skb);
2609		break;
2610
2611	case HCI_OP_READ_LOCAL_EXT_FEATURES:
2612		hci_cc_read_local_ext_features(hdev, skb);
2613		break;
2614
2615	case HCI_OP_READ_BUFFER_SIZE:
2616		hci_cc_read_buffer_size(hdev, skb);
2617		break;
2618
2619	case HCI_OP_READ_BD_ADDR:
2620		hci_cc_read_bd_addr(hdev, skb);
2621		break;
2622
2623	case HCI_OP_READ_DATA_BLOCK_SIZE:
2624		hci_cc_read_data_block_size(hdev, skb);
2625		break;
2626
2627	case HCI_OP_WRITE_CA_TIMEOUT:
2628		hci_cc_write_ca_timeout(hdev, skb);
2629		break;
2630
2631	case HCI_OP_READ_FLOW_CONTROL_MODE:
2632		hci_cc_read_flow_control_mode(hdev, skb);
2633		break;
2634
2635	case HCI_OP_READ_LOCAL_AMP_INFO:
2636		hci_cc_read_local_amp_info(hdev, skb);
2637		break;
2638
2639	case HCI_OP_READ_LOCAL_AMP_ASSOC:
2640		hci_cc_read_local_amp_assoc(hdev, skb);
2641		break;
2642
2643	case HCI_OP_DELETE_STORED_LINK_KEY:
2644		hci_cc_delete_stored_link_key(hdev, skb);
2645		break;
2646
2647	case HCI_OP_SET_EVENT_MASK:
2648		hci_cc_set_event_mask(hdev, skb);
2649		break;
2650
2651	case HCI_OP_WRITE_INQUIRY_MODE:
2652		hci_cc_write_inquiry_mode(hdev, skb);
2653		break;
2654
2655	case HCI_OP_READ_INQ_RSP_TX_POWER:
2656		hci_cc_read_inq_rsp_tx_power(hdev, skb);
2657		break;
2658
2659	case HCI_OP_SET_EVENT_FLT:
2660		hci_cc_set_event_flt(hdev, skb);
2661		break;
2662
2663	case HCI_OP_PIN_CODE_REPLY:
2664		hci_cc_pin_code_reply(hdev, skb);
2665		break;
2666
2667	case HCI_OP_PIN_CODE_NEG_REPLY:
2668		hci_cc_pin_code_neg_reply(hdev, skb);
2669		break;
2670
2671	case HCI_OP_READ_LOCAL_OOB_DATA:
2672		hci_cc_read_local_oob_data_reply(hdev, skb);
2673		break;
2674
2675	case HCI_OP_LE_READ_BUFFER_SIZE:
2676		hci_cc_le_read_buffer_size(hdev, skb);
2677		break;
2678
2679	case HCI_OP_LE_READ_LOCAL_FEATURES:
2680		hci_cc_le_read_local_features(hdev, skb);
2681		break;
2682
2683	case HCI_OP_LE_READ_ADV_TX_POWER:
2684		hci_cc_le_read_adv_tx_power(hdev, skb);
2685		break;
2686
2687	case HCI_OP_LE_SET_EVENT_MASK:
2688		hci_cc_le_set_event_mask(hdev, skb);
2689		break;
2690
2691	case HCI_OP_USER_CONFIRM_REPLY:
2692		hci_cc_user_confirm_reply(hdev, skb);
2693		break;
2694
2695	case HCI_OP_USER_CONFIRM_NEG_REPLY:
2696		hci_cc_user_confirm_neg_reply(hdev, skb);
2697		break;
2698
2699	case HCI_OP_USER_PASSKEY_REPLY:
2700		hci_cc_user_passkey_reply(hdev, skb);
2701		break;
2702
2703	case HCI_OP_USER_PASSKEY_NEG_REPLY:
2704		hci_cc_user_passkey_neg_reply(hdev, skb);
2705		break;
2706
2707	case HCI_OP_LE_SET_SCAN_PARAM:
2708		hci_cc_le_set_scan_param(hdev, skb);
2709		break;
2710
2711	case HCI_OP_LE_SET_ADV_ENABLE:
2712		hci_cc_le_set_adv_enable(hdev, skb);
2713		break;
2714
2715	case HCI_OP_LE_SET_SCAN_ENABLE:
2716		hci_cc_le_set_scan_enable(hdev, skb);
2717		break;
2718
2719	case HCI_OP_LE_READ_WHITE_LIST_SIZE:
2720		hci_cc_le_read_white_list_size(hdev, skb);
2721		break;
2722
2723	case HCI_OP_LE_LTK_REPLY:
2724		hci_cc_le_ltk_reply(hdev, skb);
2725		break;
2726
2727	case HCI_OP_LE_LTK_NEG_REPLY:
2728		hci_cc_le_ltk_neg_reply(hdev, skb);
2729		break;
2730
2731	case HCI_OP_LE_READ_SUPPORTED_STATES:
2732		hci_cc_le_read_supported_states(hdev, skb);
2733		break;
2734
2735	case HCI_OP_WRITE_LE_HOST_SUPPORTED:
2736		hci_cc_write_le_host_supported(hdev, skb);
2737		break;
2738
2739	case HCI_OP_WRITE_REMOTE_AMP_ASSOC:
2740		hci_cc_write_remote_amp_assoc(hdev, skb);
2741		break;
2742
2743	default:
2744		BT_DBG("%s opcode 0x%4.4x", hdev->name, opcode);
2745		break;
2746	}
2747
2748	if (ev->opcode != HCI_OP_NOP)
2749		del_timer(&hdev->cmd_timer);
2750
2751	if (ev->ncmd) {
2752		atomic_set(&hdev->cmd_cnt, 1);
2753		if (!skb_queue_empty(&hdev->cmd_q))
2754			queue_work(hdev->workqueue, &hdev->cmd_work);
2755	}
2756}
2757
2758static void hci_cmd_status_evt(struct hci_dev *hdev, struct sk_buff *skb)
2759{
2760	struct hci_ev_cmd_status *ev = (void *) skb->data;
2761	__u16 opcode;
2762
2763	skb_pull(skb, sizeof(*ev));
2764
2765	opcode = __le16_to_cpu(ev->opcode);
2766
2767	switch (opcode) {
2768	case HCI_OP_INQUIRY:
2769		hci_cs_inquiry(hdev, ev->status);
2770		break;
2771
2772	case HCI_OP_CREATE_CONN:
2773		hci_cs_create_conn(hdev, ev->status);
2774		break;
2775
2776	case HCI_OP_ADD_SCO:
2777		hci_cs_add_sco(hdev, ev->status);
2778		break;
2779
2780	case HCI_OP_AUTH_REQUESTED:
2781		hci_cs_auth_requested(hdev, ev->status);
2782		break;
2783
2784	case HCI_OP_SET_CONN_ENCRYPT:
2785		hci_cs_set_conn_encrypt(hdev, ev->status);
2786		break;
2787
2788	case HCI_OP_REMOTE_NAME_REQ:
2789		hci_cs_remote_name_req(hdev, ev->status);
2790		break;
2791
2792	case HCI_OP_READ_REMOTE_FEATURES:
2793		hci_cs_read_remote_features(hdev, ev->status);
2794		break;
2795
2796	case HCI_OP_READ_REMOTE_EXT_FEATURES:
2797		hci_cs_read_remote_ext_features(hdev, ev->status);
2798		break;
2799
2800	case HCI_OP_SETUP_SYNC_CONN:
2801		hci_cs_setup_sync_conn(hdev, ev->status);
2802		break;
2803
2804	case HCI_OP_SNIFF_MODE:
2805		hci_cs_sniff_mode(hdev, ev->status);
2806		break;
2807
2808	case HCI_OP_EXIT_SNIFF_MODE:
2809		hci_cs_exit_sniff_mode(hdev, ev->status);
2810		break;
2811
2812	case HCI_OP_DISCONNECT:
2813		hci_cs_disconnect(hdev, ev->status);
2814		break;
2815
2816	case HCI_OP_LE_CREATE_CONN:
2817		hci_cs_le_create_conn(hdev, ev->status);
2818		break;
2819
2820	case HCI_OP_LE_START_ENC:
2821		hci_cs_le_start_enc(hdev, ev->status);
2822		break;
2823
2824	case HCI_OP_CREATE_PHY_LINK:
2825		hci_cs_create_phylink(hdev, ev->status);
2826		break;
2827
2828	case HCI_OP_ACCEPT_PHY_LINK:
2829		hci_cs_accept_phylink(hdev, ev->status);
2830		break;
2831
2832	case HCI_OP_CREATE_LOGICAL_LINK:
2833		hci_cs_create_logical_link(hdev, ev->status);
2834		break;
2835
2836	default:
2837		BT_DBG("%s opcode 0x%4.4x", hdev->name, opcode);
2838		break;
2839	}
2840
2841	if (ev->opcode != HCI_OP_NOP)
2842		del_timer(&hdev->cmd_timer);
2843
2844	if (ev->ncmd && !test_bit(HCI_RESET, &hdev->flags)) {
2845		atomic_set(&hdev->cmd_cnt, 1);
2846		if (!skb_queue_empty(&hdev->cmd_q))
2847			queue_work(hdev->workqueue, &hdev->cmd_work);
2848	}
2849}
2850
2851static void hci_role_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
2852{
2853	struct hci_ev_role_change *ev = (void *) skb->data;
2854	struct hci_conn *conn;
2855
2856	BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2857
2858	hci_dev_lock(hdev);
2859
2860	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
2861	if (conn) {
2862		if (!ev->status) {
2863			if (ev->role)
2864				conn->link_mode &= ~HCI_LM_MASTER;
2865			else
2866				conn->link_mode |= HCI_LM_MASTER;
2867		}
2868
2869		clear_bit(HCI_CONN_RSWITCH_PEND, &conn->flags);
2870
2871		hci_role_switch_cfm(conn, ev->status, ev->role);
2872	}
2873
2874	hci_dev_unlock(hdev);
2875}
2876
2877static void hci_num_comp_pkts_evt(struct hci_dev *hdev, struct sk_buff *skb)
2878{
2879	struct hci_ev_num_comp_pkts *ev = (void *) skb->data;
2880	int i;
2881
2882	if (hdev->flow_ctl_mode != HCI_FLOW_CTL_MODE_PACKET_BASED) {
2883		BT_ERR("Wrong event for mode %d", hdev->flow_ctl_mode);
2884		return;
2885	}
2886
2887	if (skb->len < sizeof(*ev) || skb->len < sizeof(*ev) +
2888	    ev->num_hndl * sizeof(struct hci_comp_pkts_info)) {
2889		BT_DBG("%s bad parameters", hdev->name);
2890		return;
2891	}
2892
2893	BT_DBG("%s num_hndl %d", hdev->name, ev->num_hndl);
2894
2895	for (i = 0; i < ev->num_hndl; i++) {
2896		struct hci_comp_pkts_info *info = &ev->handles[i];
2897		struct hci_conn *conn;
2898		__u16  handle, count;
2899
2900		handle = __le16_to_cpu(info->handle);
2901		count  = __le16_to_cpu(info->count);
2902
2903		conn = hci_conn_hash_lookup_handle(hdev, handle);
2904		if (!conn)
2905			continue;
2906
2907		conn->sent -= count;
2908
2909		switch (conn->type) {
2910		case ACL_LINK:
2911			hdev->acl_cnt += count;
2912			if (hdev->acl_cnt > hdev->acl_pkts)
2913				hdev->acl_cnt = hdev->acl_pkts;
2914			break;
2915
2916		case LE_LINK:
2917			if (hdev->le_pkts) {
2918				hdev->le_cnt += count;
2919				if (hdev->le_cnt > hdev->le_pkts)
2920					hdev->le_cnt = hdev->le_pkts;
2921			} else {
2922				hdev->acl_cnt += count;
2923				if (hdev->acl_cnt > hdev->acl_pkts)
2924					hdev->acl_cnt = hdev->acl_pkts;
2925			}
2926			break;
2927
2928		case SCO_LINK:
2929			hdev->sco_cnt += count;
2930			if (hdev->sco_cnt > hdev->sco_pkts)
2931				hdev->sco_cnt = hdev->sco_pkts;
2932			break;
2933
2934		default:
2935			BT_ERR("Unknown type %d conn %p", conn->type, conn);
2936			break;
2937		}
2938	}
2939
2940	queue_work(hdev->workqueue, &hdev->tx_work);
2941}
2942
2943static struct hci_conn *__hci_conn_lookup_handle(struct hci_dev *hdev,
2944						 __u16 handle)
2945{
2946	struct hci_chan *chan;
2947
2948	switch (hdev->dev_type) {
2949	case HCI_BREDR:
2950		return hci_conn_hash_lookup_handle(hdev, handle);
2951	case HCI_AMP:
2952		chan = hci_chan_lookup_handle(hdev, handle);
2953		if (chan)
2954			return chan->conn;
2955		break;
2956	default:
2957		BT_ERR("%s unknown dev_type %d", hdev->name, hdev->dev_type);
2958		break;
2959	}
2960
2961	return NULL;
2962}
2963
2964static void hci_num_comp_blocks_evt(struct hci_dev *hdev, struct sk_buff *skb)
2965{
2966	struct hci_ev_num_comp_blocks *ev = (void *) skb->data;
2967	int i;
2968
2969	if (hdev->flow_ctl_mode != HCI_FLOW_CTL_MODE_BLOCK_BASED) {
2970		BT_ERR("Wrong event for mode %d", hdev->flow_ctl_mode);
2971		return;
2972	}
2973
2974	if (skb->len < sizeof(*ev) || skb->len < sizeof(*ev) +
2975	    ev->num_hndl * sizeof(struct hci_comp_blocks_info)) {
2976		BT_DBG("%s bad parameters", hdev->name);
2977		return;
2978	}
2979
2980	BT_DBG("%s num_blocks %d num_hndl %d", hdev->name, ev->num_blocks,
2981	       ev->num_hndl);
2982
2983	for (i = 0; i < ev->num_hndl; i++) {
2984		struct hci_comp_blocks_info *info = &ev->handles[i];
2985		struct hci_conn *conn = NULL;
2986		__u16  handle, block_count;
2987
2988		handle = __le16_to_cpu(info->handle);
2989		block_count = __le16_to_cpu(info->blocks);
2990
2991		conn = __hci_conn_lookup_handle(hdev, handle);
2992		if (!conn)
2993			continue;
2994
2995		conn->sent -= block_count;
2996
2997		switch (conn->type) {
2998		case ACL_LINK:
2999		case AMP_LINK:
3000			hdev->block_cnt += block_count;
3001			if (hdev->block_cnt > hdev->num_blocks)
3002				hdev->block_cnt = hdev->num_blocks;
3003			break;
3004
3005		default:
3006			BT_ERR("Unknown type %d conn %p", conn->type, conn);
3007			break;
3008		}
3009	}
3010
3011	queue_work(hdev->workqueue, &hdev->tx_work);
3012}
3013
3014static void hci_mode_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
3015{
3016	struct hci_ev_mode_change *ev = (void *) skb->data;
3017	struct hci_conn *conn;
3018
3019	BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3020
3021	hci_dev_lock(hdev);
3022
3023	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
3024	if (conn) {
3025		conn->mode = ev->mode;
3026		conn->interval = __le16_to_cpu(ev->interval);
3027
3028		if (!test_and_clear_bit(HCI_CONN_MODE_CHANGE_PEND,
3029					&conn->flags)) {
3030			if (conn->mode == HCI_CM_ACTIVE)
3031				set_bit(HCI_CONN_POWER_SAVE, &conn->flags);
3032			else
3033				clear_bit(HCI_CONN_POWER_SAVE, &conn->flags);
3034		}
3035
3036		if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->flags))
3037			hci_sco_setup(conn, ev->status);
3038	}
3039
3040	hci_dev_unlock(hdev);
3041}
3042
3043static void hci_pin_code_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
3044{
3045	struct hci_ev_pin_code_req *ev = (void *) skb->data;
3046	struct hci_conn *conn;
3047
3048	BT_DBG("%s", hdev->name);
3049
3050	hci_dev_lock(hdev);
3051
3052	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3053	if (!conn)
3054		goto unlock;
3055
3056	if (conn->state == BT_CONNECTED) {
3057		hci_conn_hold(conn);
3058		conn->disc_timeout = HCI_PAIRING_TIMEOUT;
3059		hci_conn_put(conn);
3060	}
3061
3062	if (!test_bit(HCI_PAIRABLE, &hdev->dev_flags))
3063		hci_send_cmd(hdev, HCI_OP_PIN_CODE_NEG_REPLY,
3064			     sizeof(ev->bdaddr), &ev->bdaddr);
3065	else if (test_bit(HCI_MGMT, &hdev->dev_flags)) {
3066		u8 secure;
3067
3068		if (conn->pending_sec_level == BT_SECURITY_HIGH)
3069			secure = 1;
3070		else
3071			secure = 0;
3072
3073		mgmt_pin_code_request(hdev, &ev->bdaddr, secure);
3074	}
3075
3076unlock:
3077	hci_dev_unlock(hdev);
3078}
3079
3080static void hci_link_key_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
3081{
3082	struct hci_ev_link_key_req *ev = (void *) skb->data;
3083	struct hci_cp_link_key_reply cp;
3084	struct hci_conn *conn;
3085	struct link_key *key;
3086
3087	BT_DBG("%s", hdev->name);
3088
3089	if (!test_bit(HCI_LINK_KEYS, &hdev->dev_flags))
3090		return;
3091
3092	hci_dev_lock(hdev);
3093
3094	key = hci_find_link_key(hdev, &ev->bdaddr);
3095	if (!key) {
3096		BT_DBG("%s link key not found for %pMR", hdev->name,
3097		       &ev->bdaddr);
3098		goto not_found;
3099	}
3100
3101	BT_DBG("%s found key type %u for %pMR", hdev->name, key->type,
3102	       &ev->bdaddr);
3103
3104	if (!test_bit(HCI_DEBUG_KEYS, &hdev->dev_flags) &&
3105	    key->type == HCI_LK_DEBUG_COMBINATION) {
3106		BT_DBG("%s ignoring debug key", hdev->name);
3107		goto not_found;
3108	}
3109
3110	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3111	if (conn) {
3112		if (key->type == HCI_LK_UNAUTH_COMBINATION &&
3113		    conn->auth_type != 0xff && (conn->auth_type & 0x01)) {
3114			BT_DBG("%s ignoring unauthenticated key", hdev->name);
3115			goto not_found;
3116		}
3117
3118		if (key->type == HCI_LK_COMBINATION && key->pin_len < 16 &&
3119		    conn->pending_sec_level == BT_SECURITY_HIGH) {
3120			BT_DBG("%s ignoring key unauthenticated for high security",
3121			       hdev->name);
3122			goto not_found;
3123		}
3124
3125		conn->key_type = key->type;
3126		conn->pin_length = key->pin_len;
3127	}
3128
3129	bacpy(&cp.bdaddr, &ev->bdaddr);
3130	memcpy(cp.link_key, key->val, HCI_LINK_KEY_SIZE);
3131
3132	hci_send_cmd(hdev, HCI_OP_LINK_KEY_REPLY, sizeof(cp), &cp);
3133
3134	hci_dev_unlock(hdev);
3135
3136	return;
3137
3138not_found:
3139	hci_send_cmd(hdev, HCI_OP_LINK_KEY_NEG_REPLY, 6, &ev->bdaddr);
3140	hci_dev_unlock(hdev);
3141}
3142
3143static void hci_link_key_notify_evt(struct hci_dev *hdev, struct sk_buff *skb)
3144{
3145	struct hci_ev_link_key_notify *ev = (void *) skb->data;
3146	struct hci_conn *conn;
3147	u8 pin_len = 0;
3148
3149	BT_DBG("%s", hdev->name);
3150
3151	hci_dev_lock(hdev);
3152
3153	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3154	if (conn) {
3155		hci_conn_hold(conn);
3156		conn->disc_timeout = HCI_DISCONN_TIMEOUT;
3157		pin_len = conn->pin_length;
3158
3159		if (ev->key_type != HCI_LK_CHANGED_COMBINATION)
3160			conn->key_type = ev->key_type;
3161
3162		hci_conn_put(conn);
3163	}
3164
3165	if (test_bit(HCI_LINK_KEYS, &hdev->dev_flags))
3166		hci_add_link_key(hdev, conn, 1, &ev->bdaddr, ev->link_key,
3167				 ev->key_type, pin_len);
3168
3169	hci_dev_unlock(hdev);
3170}
3171
3172static void hci_clock_offset_evt(struct hci_dev *hdev, struct sk_buff *skb)
3173{
3174	struct hci_ev_clock_offset *ev = (void *) skb->data;
3175	struct hci_conn *conn;
3176
3177	BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3178
3179	hci_dev_lock(hdev);
3180
3181	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
3182	if (conn && !ev->status) {
3183		struct inquiry_entry *ie;
3184
3185		ie = hci_inquiry_cache_lookup(hdev, &conn->dst);
3186		if (ie) {
3187			ie->data.clock_offset = ev->clock_offset;
3188			ie->timestamp = jiffies;
3189		}
3190	}
3191
3192	hci_dev_unlock(hdev);
3193}
3194
3195static void hci_pkt_type_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
3196{
3197	struct hci_ev_pkt_type_change *ev = (void *) skb->data;
3198	struct hci_conn *conn;
3199
3200	BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3201
3202	hci_dev_lock(hdev);
3203
3204	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
3205	if (conn && !ev->status)
3206		conn->pkt_type = __le16_to_cpu(ev->pkt_type);
3207
3208	hci_dev_unlock(hdev);
3209}
3210
3211static void hci_pscan_rep_mode_evt(struct hci_dev *hdev, struct sk_buff *skb)
3212{
3213	struct hci_ev_pscan_rep_mode *ev = (void *) skb->data;
3214	struct inquiry_entry *ie;
3215
3216	BT_DBG("%s", hdev->name);
3217
3218	hci_dev_lock(hdev);
3219
3220	ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr);
3221	if (ie) {
3222		ie->data.pscan_rep_mode = ev->pscan_rep_mode;
3223		ie->timestamp = jiffies;
3224	}
3225
3226	hci_dev_unlock(hdev);
3227}
3228
3229static void hci_inquiry_result_with_rssi_evt(struct hci_dev *hdev,
3230					     struct sk_buff *skb)
3231{
3232	struct inquiry_data data;
3233	int num_rsp = *((__u8 *) skb->data);
3234	bool name_known, ssp;
3235
3236	BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
3237
3238	if (!num_rsp)
3239		return;
3240
3241	if (test_bit(HCI_PERIODIC_INQ, &hdev->dev_flags))
3242		return;
3243
3244	hci_dev_lock(hdev);
3245
3246	if ((skb->len - 1) / num_rsp != sizeof(struct inquiry_info_with_rssi)) {
3247		struct inquiry_info_with_rssi_and_pscan_mode *info;
3248		info = (void *) (skb->data + 1);
3249
3250		for (; num_rsp; num_rsp--, info++) {
3251			bacpy(&data.bdaddr, &info->bdaddr);
3252			data.pscan_rep_mode	= info->pscan_rep_mode;
3253			data.pscan_period_mode	= info->pscan_period_mode;
3254			data.pscan_mode		= info->pscan_mode;
3255			memcpy(data.dev_class, info->dev_class, 3);
3256			data.clock_offset	= info->clock_offset;
3257			data.rssi		= info->rssi;
3258			data.ssp_mode		= 0x00;
3259
3260			name_known = hci_inquiry_cache_update(hdev, &data,
3261							      false, &ssp);
3262			mgmt_device_found(hdev, &info->bdaddr, ACL_LINK, 0x00,
3263					  info->dev_class, info->rssi,
3264					  !name_known, ssp, NULL, 0);
3265		}
3266	} else {
3267		struct inquiry_info_with_rssi *info = (void *) (skb->data + 1);
3268
3269		for (; num_rsp; num_rsp--, info++) {
3270			bacpy(&data.bdaddr, &info->bdaddr);
3271			data.pscan_rep_mode	= info->pscan_rep_mode;
3272			data.pscan_period_mode	= info->pscan_period_mode;
3273			data.pscan_mode		= 0x00;
3274			memcpy(data.dev_class, info->dev_class, 3);
3275			data.clock_offset	= info->clock_offset;
3276			data.rssi		= info->rssi;
3277			data.ssp_mode		= 0x00;
3278			name_known = hci_inquiry_cache_update(hdev, &data,
3279							      false, &ssp);
3280			mgmt_device_found(hdev, &info->bdaddr, ACL_LINK, 0x00,
3281					  info->dev_class, info->rssi,
3282					  !name_known, ssp, NULL, 0);
3283		}
3284	}
3285
3286	hci_dev_unlock(hdev);
3287}
3288
3289static void hci_remote_ext_features_evt(struct hci_dev *hdev,
3290					struct sk_buff *skb)
3291{
3292	struct hci_ev_remote_ext_features *ev = (void *) skb->data;
3293	struct hci_conn *conn;
3294
3295	BT_DBG("%s", hdev->name);
3296
3297	hci_dev_lock(hdev);
3298
3299	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
3300	if (!conn)
3301		goto unlock;
3302
3303	if (!ev->status && ev->page == 0x01) {
3304		struct inquiry_entry *ie;
3305
3306		ie = hci_inquiry_cache_lookup(hdev, &conn->dst);
3307		if (ie)
3308			ie->data.ssp_mode = (ev->features[0] & LMP_HOST_SSP);
3309
3310		if (ev->features[0] & LMP_HOST_SSP)
3311			set_bit(HCI_CONN_SSP_ENABLED, &conn->flags);
3312	}
3313
3314	if (conn->state != BT_CONFIG)
3315		goto unlock;
3316
3317	if (!ev->status && !test_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags)) {
3318		struct hci_cp_remote_name_req cp;
3319		memset(&cp, 0, sizeof(cp));
3320		bacpy(&cp.bdaddr, &conn->dst);
3321		cp.pscan_rep_mode = 0x02;
3322		hci_send_cmd(hdev, HCI_OP_REMOTE_NAME_REQ, sizeof(cp), &cp);
3323	} else if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags))
3324		mgmt_device_connected(hdev, &conn->dst, conn->type,
3325				      conn->dst_type, 0, NULL, 0,
3326				      conn->dev_class);
3327
3328	if (!hci_outgoing_auth_needed(hdev, conn)) {
3329		conn->state = BT_CONNECTED;
3330		hci_proto_connect_cfm(conn, ev->status);
3331		hci_conn_put(conn);
3332	}
3333
3334unlock:
3335	hci_dev_unlock(hdev);
3336}
3337
3338static void hci_sync_conn_complete_evt(struct hci_dev *hdev,
3339				       struct sk_buff *skb)
3340{
3341	struct hci_ev_sync_conn_complete *ev = (void *) skb->data;
3342	struct hci_conn *conn;
3343
3344	BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3345
3346	hci_dev_lock(hdev);
3347
3348	conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
3349	if (!conn) {
3350		if (ev->link_type == ESCO_LINK)
3351			goto unlock;
3352
3353		conn = hci_conn_hash_lookup_ba(hdev, ESCO_LINK, &ev->bdaddr);
3354		if (!conn)
3355			goto unlock;
3356
3357		conn->type = SCO_LINK;
3358	}
3359
3360	switch (ev->status) {
3361	case 0x00:
3362		conn->handle = __le16_to_cpu(ev->handle);
3363		conn->state  = BT_CONNECTED;
3364
3365		hci_conn_hold_device(conn);
3366		hci_conn_add_sysfs(conn);
3367		break;
3368
3369	case 0x11:	/* Unsupported Feature or Parameter Value */
3370	case 0x1c:	/* SCO interval rejected */
3371	case 0x1a:	/* Unsupported Remote Feature */
3372	case 0x1f:	/* Unspecified error */
3373		if (conn->out && conn->attempt < 2) {
3374			conn->pkt_type = (hdev->esco_type & SCO_ESCO_MASK) |
3375					(hdev->esco_type & EDR_ESCO_MASK);
3376			hci_setup_sync(conn, conn->link->handle);
3377			goto unlock;
3378		}
3379		/* fall through */
3380
3381	default:
3382		conn->state = BT_CLOSED;
3383		break;
3384	}
3385
3386	hci_proto_connect_cfm(conn, ev->status);
3387	if (ev->status)
3388		hci_conn_del(conn);
3389
3390unlock:
3391	hci_dev_unlock(hdev);
3392}
3393
3394static void hci_sync_conn_changed_evt(struct hci_dev *hdev, struct sk_buff *skb)
3395{
3396	BT_DBG("%s", hdev->name);
3397}
3398
3399static void hci_sniff_subrate_evt(struct hci_dev *hdev, struct sk_buff *skb)
3400{
3401	struct hci_ev_sniff_subrate *ev = (void *) skb->data;
3402
3403	BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3404}
3405
3406static void hci_extended_inquiry_result_evt(struct hci_dev *hdev,
3407					    struct sk_buff *skb)
3408{
3409	struct inquiry_data data;
3410	struct extended_inquiry_info *info = (void *) (skb->data + 1);
3411	int num_rsp = *((__u8 *) skb->data);
3412	size_t eir_len;
3413
3414	BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
3415
3416	if (!num_rsp)
3417		return;
3418
3419	if (test_bit(HCI_PERIODIC_INQ, &hdev->dev_flags))
3420		return;
3421
3422	hci_dev_lock(hdev);
3423
3424	for (; num_rsp; num_rsp--, info++) {
3425		bool name_known, ssp;
3426
3427		bacpy(&data.bdaddr, &info->bdaddr);
3428		data.pscan_rep_mode	= info->pscan_rep_mode;
3429		data.pscan_period_mode	= info->pscan_period_mode;
3430		data.pscan_mode		= 0x00;
3431		memcpy(data.dev_class, info->dev_class, 3);
3432		data.clock_offset	= info->clock_offset;
3433		data.rssi		= info->rssi;
3434		data.ssp_mode		= 0x01;
3435
3436		if (test_bit(HCI_MGMT, &hdev->dev_flags))
3437			name_known = eir_has_data_type(info->data,
3438						       sizeof(info->data),
3439						       EIR_NAME_COMPLETE);
3440		else
3441			name_known = true;
3442
3443		name_known = hci_inquiry_cache_update(hdev, &data, name_known,
3444						      &ssp);
3445		eir_len = eir_get_length(info->data, sizeof(info->data));
3446		mgmt_device_found(hdev, &info->bdaddr, ACL_LINK, 0x00,
3447				  info->dev_class, info->rssi, !name_known,
3448				  ssp, info->data, eir_len);
3449	}
3450
3451	hci_dev_unlock(hdev);
3452}
3453
3454static void hci_key_refresh_complete_evt(struct hci_dev *hdev,
3455					 struct sk_buff *skb)
3456{
3457	struct hci_ev_key_refresh_complete *ev = (void *) skb->data;
3458	struct hci_conn *conn;
3459
3460	BT_DBG("%s status 0x%2.2x handle 0x%4.4x", hdev->name, ev->status,
3461	       __le16_to_cpu(ev->handle));
3462
3463	hci_dev_lock(hdev);
3464
3465	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
3466	if (!conn)
3467		goto unlock;
3468
3469	if (!ev->status)
3470		conn->sec_level = conn->pending_sec_level;
3471
3472	clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
3473
3474	if (ev->status && conn->state == BT_CONNECTED) {
3475		hci_acl_disconn(conn, HCI_ERROR_AUTH_FAILURE);
3476		hci_conn_put(conn);
3477		goto unlock;
3478	}
3479
3480	if (conn->state == BT_CONFIG) {
3481		if (!ev->status)
3482			conn->state = BT_CONNECTED;
3483
3484		hci_proto_connect_cfm(conn, ev->status);
3485		hci_conn_put(conn);
3486	} else {
3487		hci_auth_cfm(conn, ev->status);
3488
3489		hci_conn_hold(conn);
3490		conn->disc_timeout = HCI_DISCONN_TIMEOUT;
3491		hci_conn_put(conn);
3492	}
3493
3494unlock:
3495	hci_dev_unlock(hdev);
3496}
3497
3498static u8 hci_get_auth_req(struct hci_conn *conn)
3499{
3500	/* If remote requests dedicated bonding follow that lead */
3501	if (conn->remote_auth == 0x02 || conn->remote_auth == 0x03) {
3502		/* If both remote and local IO capabilities allow MITM
3503		 * protection then require it, otherwise don't */
3504		if (conn->remote_cap == 0x03 || conn->io_capability == 0x03)
3505			return 0x02;
3506		else
3507			return 0x03;
3508	}
3509
3510	/* If remote requests no-bonding follow that lead */
3511	if (conn->remote_auth == 0x00 || conn->remote_auth == 0x01)
3512		return conn->remote_auth | (conn->auth_type & 0x01);
3513
3514	return conn->auth_type;
3515}
3516
3517static void hci_io_capa_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
3518{
3519	struct hci_ev_io_capa_request *ev = (void *) skb->data;
3520	struct hci_conn *conn;
3521
3522	BT_DBG("%s", hdev->name);
3523
3524	hci_dev_lock(hdev);
3525
3526	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3527	if (!conn)
3528		goto unlock;
3529
3530	hci_conn_hold(conn);
3531
3532	if (!test_bit(HCI_MGMT, &hdev->dev_flags))
3533		goto unlock;
3534
3535	if (test_bit(HCI_PAIRABLE, &hdev->dev_flags) ||
3536	    (conn->remote_auth & ~0x01) == HCI_AT_NO_BONDING) {
3537		struct hci_cp_io_capability_reply cp;
3538
3539		bacpy(&cp.bdaddr, &ev->bdaddr);
3540		/* Change the IO capability from KeyboardDisplay
3541		 * to DisplayYesNo as it is not supported by BT spec. */
3542		cp.capability = (conn->io_capability == 0x04) ?
3543						0x01 : conn->io_capability;
3544		conn->auth_type = hci_get_auth_req(conn);
3545		cp.authentication = conn->auth_type;
3546
3547		if (hci_find_remote_oob_data(hdev, &conn->dst) &&
3548		    (conn->out || test_bit(HCI_CONN_REMOTE_OOB, &conn->flags)))
3549			cp.oob_data = 0x01;
3550		else
3551			cp.oob_data = 0x00;
3552
3553		hci_send_cmd(hdev, HCI_OP_IO_CAPABILITY_REPLY,
3554			     sizeof(cp), &cp);
3555	} else {
3556		struct hci_cp_io_capability_neg_reply cp;
3557
3558		bacpy(&cp.bdaddr, &ev->bdaddr);
3559		cp.reason = HCI_ERROR_PAIRING_NOT_ALLOWED;
3560
3561		hci_send_cmd(hdev, HCI_OP_IO_CAPABILITY_NEG_REPLY,
3562			     sizeof(cp), &cp);
3563	}
3564
3565unlock:
3566	hci_dev_unlock(hdev);
3567}
3568
3569static void hci_io_capa_reply_evt(struct hci_dev *hdev, struct sk_buff *skb)
3570{
3571	struct hci_ev_io_capa_reply *ev = (void *) skb->data;
3572	struct hci_conn *conn;
3573
3574	BT_DBG("%s", hdev->name);
3575
3576	hci_dev_lock(hdev);
3577
3578	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3579	if (!conn)
3580		goto unlock;
3581
3582	conn->remote_cap = ev->capability;
3583	conn->remote_auth = ev->authentication;
3584	if (ev->oob_data)
3585		set_bit(HCI_CONN_REMOTE_OOB, &conn->flags);
3586
3587unlock:
3588	hci_dev_unlock(hdev);
3589}
3590
3591static void hci_user_confirm_request_evt(struct hci_dev *hdev,
3592					 struct sk_buff *skb)
3593{
3594	struct hci_ev_user_confirm_req *ev = (void *) skb->data;
3595	int loc_mitm, rem_mitm, confirm_hint = 0;
3596	struct hci_conn *conn;
3597
3598	BT_DBG("%s", hdev->name);
3599
3600	hci_dev_lock(hdev);
3601
3602	if (!test_bit(HCI_MGMT, &hdev->dev_flags))
3603		goto unlock;
3604
3605	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3606	if (!conn)
3607		goto unlock;
3608
3609	loc_mitm = (conn->auth_type & 0x01);
3610	rem_mitm = (conn->remote_auth & 0x01);
3611
3612	/* If we require MITM but the remote device can't provide that
3613	 * (it has NoInputNoOutput) then reject the confirmation
3614	 * request. The only exception is when we're dedicated bonding
3615	 * initiators (connect_cfm_cb set) since then we always have the MITM
3616	 * bit set. */
3617	if (!conn->connect_cfm_cb && loc_mitm && conn->remote_cap == 0x03) {
3618		BT_DBG("Rejecting request: remote device can't provide MITM");
3619		hci_send_cmd(hdev, HCI_OP_USER_CONFIRM_NEG_REPLY,
3620			     sizeof(ev->bdaddr), &ev->bdaddr);
3621		goto unlock;
3622	}
3623
3624	/* If no side requires MITM protection; auto-accept */
3625	if ((!loc_mitm || conn->remote_cap == 0x03) &&
3626	    (!rem_mitm || conn->io_capability == 0x03)) {
3627
3628		/* If we're not the initiators request authorization to
3629		 * proceed from user space (mgmt_user_confirm with
3630		 * confirm_hint set to 1). */
3631		if (!test_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
3632			BT_DBG("Confirming auto-accept as acceptor");
3633			confirm_hint = 1;
3634			goto confirm;
3635		}
3636
3637		BT_DBG("Auto-accept of user confirmation with %ums delay",
3638		       hdev->auto_accept_delay);
3639
3640		if (hdev->auto_accept_delay > 0) {
3641			int delay = msecs_to_jiffies(hdev->auto_accept_delay);
3642			mod_timer(&conn->auto_accept_timer, jiffies + delay);
3643			goto unlock;
3644		}
3645
3646		hci_send_cmd(hdev, HCI_OP_USER_CONFIRM_REPLY,
3647			     sizeof(ev->bdaddr), &ev->bdaddr);
3648		goto unlock;
3649	}
3650
3651confirm:
3652	mgmt_user_confirm_request(hdev, &ev->bdaddr, ACL_LINK, 0, ev->passkey,
3653				  confirm_hint);
3654
3655unlock:
3656	hci_dev_unlock(hdev);
3657}
3658
3659static void hci_user_passkey_request_evt(struct hci_dev *hdev,
3660					 struct sk_buff *skb)
3661{
3662	struct hci_ev_user_passkey_req *ev = (void *) skb->data;
3663
3664	BT_DBG("%s", hdev->name);
3665
3666	if (test_bit(HCI_MGMT, &hdev->dev_flags))
3667		mgmt_user_passkey_request(hdev, &ev->bdaddr, ACL_LINK, 0);
3668}
3669
3670static void hci_user_passkey_notify_evt(struct hci_dev *hdev,
3671					struct sk_buff *skb)
3672{
3673	struct hci_ev_user_passkey_notify *ev = (void *) skb->data;
3674	struct hci_conn *conn;
3675
3676	BT_DBG("%s", hdev->name);
3677
3678	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3679	if (!conn)
3680		return;
3681
3682	conn->passkey_notify = __le32_to_cpu(ev->passkey);
3683	conn->passkey_entered = 0;
3684
3685	if (test_bit(HCI_MGMT, &hdev->dev_flags))
3686		mgmt_user_passkey_notify(hdev, &conn->dst, conn->type,
3687					 conn->dst_type, conn->passkey_notify,
3688					 conn->passkey_entered);
3689}
3690
3691static void hci_keypress_notify_evt(struct hci_dev *hdev, struct sk_buff *skb)
3692{
3693	struct hci_ev_keypress_notify *ev = (void *) skb->data;
3694	struct hci_conn *conn;
3695
3696	BT_DBG("%s", hdev->name);
3697
3698	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3699	if (!conn)
3700		return;
3701
3702	switch (ev->type) {
3703	case HCI_KEYPRESS_STARTED:
3704		conn->passkey_entered = 0;
3705		return;
3706
3707	case HCI_KEYPRESS_ENTERED:
3708		conn->passkey_entered++;
3709		break;
3710
3711	case HCI_KEYPRESS_ERASED:
3712		conn->passkey_entered--;
3713		break;
3714
3715	case HCI_KEYPRESS_CLEARED:
3716		conn->passkey_entered = 0;
3717		break;
3718
3719	case HCI_KEYPRESS_COMPLETED:
3720		return;
3721	}
3722
3723	if (test_bit(HCI_MGMT, &hdev->dev_flags))
3724		mgmt_user_passkey_notify(hdev, &conn->dst, conn->type,
3725					 conn->dst_type, conn->passkey_notify,
3726					 conn->passkey_entered);
3727}
3728
3729static void hci_simple_pair_complete_evt(struct hci_dev *hdev,
3730					 struct sk_buff *skb)
3731{
3732	struct hci_ev_simple_pair_complete *ev = (void *) skb->data;
3733	struct hci_conn *conn;
3734
3735	BT_DBG("%s", hdev->name);
3736
3737	hci_dev_lock(hdev);
3738
3739	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3740	if (!conn)
3741		goto unlock;
3742
3743	/* To avoid duplicate auth_failed events to user space we check
3744	 * the HCI_CONN_AUTH_PEND flag which will be set if we
3745	 * initiated the authentication. A traditional auth_complete
3746	 * event gets always produced as initiator and is also mapped to
3747	 * the mgmt_auth_failed event */
3748	if (!test_bit(HCI_CONN_AUTH_PEND, &conn->flags) && ev->status)
3749		mgmt_auth_failed(hdev, &conn->dst, conn->type, conn->dst_type,
3750				 ev->status);
3751
3752	hci_conn_put(conn);
3753
3754unlock:
3755	hci_dev_unlock(hdev);
3756}
3757
3758static void hci_remote_host_features_evt(struct hci_dev *hdev,
3759					 struct sk_buff *skb)
3760{
3761	struct hci_ev_remote_host_features *ev = (void *) skb->data;
3762	struct inquiry_entry *ie;
3763
3764	BT_DBG("%s", hdev->name);
3765
3766	hci_dev_lock(hdev);
3767
3768	ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr);
3769	if (ie)
3770		ie->data.ssp_mode = (ev->features[0] & LMP_HOST_SSP);
3771
3772	hci_dev_unlock(hdev);
3773}
3774
3775static void hci_remote_oob_data_request_evt(struct hci_dev *hdev,
3776					    struct sk_buff *skb)
3777{
3778	struct hci_ev_remote_oob_data_request *ev = (void *) skb->data;
3779	struct oob_data *data;
3780
3781	BT_DBG("%s", hdev->name);
3782
3783	hci_dev_lock(hdev);
3784
3785	if (!test_bit(HCI_MGMT, &hdev->dev_flags))
3786		goto unlock;
3787
3788	data = hci_find_remote_oob_data(hdev, &ev->bdaddr);
3789	if (data) {
3790		struct hci_cp_remote_oob_data_reply cp;
3791
3792		bacpy(&cp.bdaddr, &ev->bdaddr);
3793		memcpy(cp.hash, data->hash, sizeof(cp.hash));
3794		memcpy(cp.randomizer, data->randomizer, sizeof(cp.randomizer));
3795
3796		hci_send_cmd(hdev, HCI_OP_REMOTE_OOB_DATA_REPLY, sizeof(cp),
3797			     &cp);
3798	} else {
3799		struct hci_cp_remote_oob_data_neg_reply cp;
3800
3801		bacpy(&cp.bdaddr, &ev->bdaddr);
3802		hci_send_cmd(hdev, HCI_OP_REMOTE_OOB_DATA_NEG_REPLY, sizeof(cp),
3803			     &cp);
3804	}
3805
3806unlock:
3807	hci_dev_unlock(hdev);
3808}
3809
3810static void hci_phy_link_complete_evt(struct hci_dev *hdev,
3811				      struct sk_buff *skb)
3812{
3813	struct hci_ev_phy_link_complete *ev = (void *) skb->data;
3814	struct hci_conn *hcon, *bredr_hcon;
3815
3816	BT_DBG("%s handle 0x%2.2x status 0x%2.2x", hdev->name, ev->phy_handle,
3817	       ev->status);
3818
3819	hci_dev_lock(hdev);
3820
3821	hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle);
3822	if (!hcon) {
3823		hci_dev_unlock(hdev);
3824		return;
3825	}
3826
3827	if (ev->status) {
3828		hci_conn_del(hcon);
3829		hci_dev_unlock(hdev);
3830		return;
3831	}
3832
3833	bredr_hcon = hcon->amp_mgr->l2cap_conn->hcon;
3834
3835	hcon->state = BT_CONNECTED;
3836	bacpy(&hcon->dst, &bredr_hcon->dst);
3837
3838	hci_conn_hold(hcon);
3839	hcon->disc_timeout = HCI_DISCONN_TIMEOUT;
3840	hci_conn_put(hcon);
3841
3842	hci_conn_hold_device(hcon);
3843	hci_conn_add_sysfs(hcon);
3844
3845	amp_physical_cfm(bredr_hcon, hcon);
3846
3847	hci_dev_unlock(hdev);
3848}
3849
3850static void hci_loglink_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
3851{
3852	struct hci_ev_logical_link_complete *ev = (void *) skb->data;
3853	struct hci_conn *hcon;
3854	struct hci_chan *hchan;
3855	struct amp_mgr *mgr;
3856
3857	BT_DBG("%s log_handle 0x%4.4x phy_handle 0x%2.2x status 0x%2.2x",
3858	       hdev->name, le16_to_cpu(ev->handle), ev->phy_handle,
3859	       ev->status);
3860
3861	hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle);
3862	if (!hcon)
3863		return;
3864
3865	/* Create AMP hchan */
3866	hchan = hci_chan_create(hcon);
3867	if (!hchan)
3868		return;
3869
3870	hchan->handle = le16_to_cpu(ev->handle);
3871
3872	BT_DBG("hcon %p mgr %p hchan %p", hcon, hcon->amp_mgr, hchan);
3873
3874	mgr = hcon->amp_mgr;
3875	if (mgr && mgr->bredr_chan) {
3876		struct l2cap_chan *bredr_chan = mgr->bredr_chan;
3877
3878		l2cap_chan_lock(bredr_chan);
3879
3880		bredr_chan->conn->mtu = hdev->block_mtu;
3881		l2cap_logical_cfm(bredr_chan, hchan, 0);
3882		hci_conn_hold(hcon);
3883
3884		l2cap_chan_unlock(bredr_chan);
3885	}
3886}
3887
3888static void hci_disconn_loglink_complete_evt(struct hci_dev *hdev,
3889					     struct sk_buff *skb)
3890{
3891	struct hci_ev_disconn_logical_link_complete *ev = (void *) skb->data;
3892	struct hci_chan *hchan;
3893
3894	BT_DBG("%s log handle 0x%4.4x status 0x%2.2x", hdev->name,
3895	       le16_to_cpu(ev->handle), ev->status);
3896
3897	if (ev->status)
3898		return;
3899
3900	hci_dev_lock(hdev);
3901
3902	hchan = hci_chan_lookup_handle(hdev, le16_to_cpu(ev->handle));
3903	if (!hchan)
3904		goto unlock;
3905
3906	amp_destroy_logical_link(hchan, ev->reason);
3907
3908unlock:
3909	hci_dev_unlock(hdev);
3910}
3911
3912static void hci_disconn_phylink_complete_evt(struct hci_dev *hdev,
3913					     struct sk_buff *skb)
3914{
3915	struct hci_ev_disconn_phy_link_complete *ev = (void *) skb->data;
3916	struct hci_conn *hcon;
3917
3918	BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3919
3920	if (ev->status)
3921		return;
3922
3923	hci_dev_lock(hdev);
3924
3925	hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle);
3926	if (hcon) {
3927		hcon->state = BT_CLOSED;
3928		hci_conn_del(hcon);
3929	}
3930
3931	hci_dev_unlock(hdev);
3932}
3933
3934static void hci_le_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
3935{
3936	struct hci_ev_le_conn_complete *ev = (void *) skb->data;
3937	struct hci_conn *conn;
3938
3939	BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3940
3941	hci_dev_lock(hdev);
3942
3943	conn = hci_conn_hash_lookup_state(hdev, LE_LINK, BT_CONNECT);
3944	if (!conn) {
3945		conn = hci_conn_add(hdev, LE_LINK, &ev->bdaddr);
3946		if (!conn) {
3947			BT_ERR("No memory for new connection");
3948			goto unlock;
3949		}
3950
3951		conn->dst_type = ev->bdaddr_type;
3952
3953		if (ev->role == LE_CONN_ROLE_MASTER) {
3954			conn->out = true;
3955			conn->link_mode |= HCI_LM_MASTER;
3956		}
3957	}
3958
3959	if (ev->status) {
3960		mgmt_connect_failed(hdev, &conn->dst, conn->type,
3961				    conn->dst_type, ev->status);
3962		hci_proto_connect_cfm(conn, ev->status);
3963		conn->state = BT_CLOSED;
3964		hci_conn_del(conn);
3965		goto unlock;
3966	}
3967
3968	if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags))
3969		mgmt_device_connected(hdev, &ev->bdaddr, conn->type,
3970				      conn->dst_type, 0, NULL, 0, NULL);
3971
3972	conn->sec_level = BT_SECURITY_LOW;
3973	conn->handle = __le16_to_cpu(ev->handle);
3974	conn->state = BT_CONNECTED;
3975
3976	hci_conn_hold_device(conn);
3977	hci_conn_add_sysfs(conn);
3978
3979	hci_proto_connect_cfm(conn, ev->status);
3980
3981unlock:
3982	hci_dev_unlock(hdev);
3983}
3984
3985static void hci_le_adv_report_evt(struct hci_dev *hdev, struct sk_buff *skb)
3986{
3987	u8 num_reports = skb->data[0];
3988	void *ptr = &skb->data[1];
3989	s8 rssi;
3990
3991	hci_dev_lock(hdev);
3992
3993	while (num_reports--) {
3994		struct hci_ev_le_advertising_info *ev = ptr;
3995
3996		rssi = ev->data[ev->length];
3997		mgmt_device_found(hdev, &ev->bdaddr, LE_LINK, ev->bdaddr_type,
3998				  NULL, rssi, 0, 1, ev->data, ev->length);
3999
4000		ptr += sizeof(*ev) + ev->length + 1;
4001	}
4002
4003	hci_dev_unlock(hdev);
4004}
4005
4006static void hci_le_ltk_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
4007{
4008	struct hci_ev_le_ltk_req *ev = (void *) skb->data;
4009	struct hci_cp_le_ltk_reply cp;
4010	struct hci_cp_le_ltk_neg_reply neg;
4011	struct hci_conn *conn;
4012	struct smp_ltk *ltk;
4013
4014	BT_DBG("%s handle 0x%4.4x", hdev->name, __le16_to_cpu(ev->handle));
4015
4016	hci_dev_lock(hdev);
4017
4018	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
4019	if (conn == NULL)
4020		goto not_found;
4021
4022	ltk = hci_find_ltk(hdev, ev->ediv, ev->random);
4023	if (ltk == NULL)
4024		goto not_found;
4025
4026	memcpy(cp.ltk, ltk->val, sizeof(ltk->val));
4027	cp.handle = cpu_to_le16(conn->handle);
4028
4029	if (ltk->authenticated)
4030		conn->sec_level = BT_SECURITY_HIGH;
4031
4032	hci_send_cmd(hdev, HCI_OP_LE_LTK_REPLY, sizeof(cp), &cp);
4033
4034	if (ltk->type & HCI_SMP_STK) {
4035		list_del(&ltk->list);
4036		kfree(ltk);
4037	}
4038
4039	hci_dev_unlock(hdev);
4040
4041	return;
4042
4043not_found:
4044	neg.handle = ev->handle;
4045	hci_send_cmd(hdev, HCI_OP_LE_LTK_NEG_REPLY, sizeof(neg), &neg);
4046	hci_dev_unlock(hdev);
4047}
4048
4049static void hci_le_meta_evt(struct hci_dev *hdev, struct sk_buff *skb)
4050{
4051	struct hci_ev_le_meta *le_ev = (void *) skb->data;
4052
4053	skb_pull(skb, sizeof(*le_ev));
4054
4055	switch (le_ev->subevent) {
4056	case HCI_EV_LE_CONN_COMPLETE:
4057		hci_le_conn_complete_evt(hdev, skb);
4058		break;
4059
4060	case HCI_EV_LE_ADVERTISING_REPORT:
4061		hci_le_adv_report_evt(hdev, skb);
4062		break;
4063
4064	case HCI_EV_LE_LTK_REQ:
4065		hci_le_ltk_request_evt(hdev, skb);
4066		break;
4067
4068	default:
4069		break;
4070	}
4071}
4072
4073static void hci_chan_selected_evt(struct hci_dev *hdev, struct sk_buff *skb)
4074{
4075	struct hci_ev_channel_selected *ev = (void *) skb->data;
4076	struct hci_conn *hcon;
4077
4078	BT_DBG("%s handle 0x%2.2x", hdev->name, ev->phy_handle);
4079
4080	skb_pull(skb, sizeof(*ev));
4081
4082	hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle);
4083	if (!hcon)
4084		return;
4085
4086	amp_read_loc_assoc_final_data(hdev, hcon);
4087}
4088
4089void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb)
4090{
4091	struct hci_event_hdr *hdr = (void *) skb->data;
4092	__u8 event = hdr->evt;
4093
4094	skb_pull(skb, HCI_EVENT_HDR_SIZE);
4095
4096	switch (event) {
4097	case HCI_EV_INQUIRY_COMPLETE:
4098		hci_inquiry_complete_evt(hdev, skb);
4099		break;
4100
4101	case HCI_EV_INQUIRY_RESULT:
4102		hci_inquiry_result_evt(hdev, skb);
4103		break;
4104
4105	case HCI_EV_CONN_COMPLETE:
4106		hci_conn_complete_evt(hdev, skb);
4107		break;
4108
4109	case HCI_EV_CONN_REQUEST:
4110		hci_conn_request_evt(hdev, skb);
4111		break;
4112
4113	case HCI_EV_DISCONN_COMPLETE:
4114		hci_disconn_complete_evt(hdev, skb);
4115		break;
4116
4117	case HCI_EV_AUTH_COMPLETE:
4118		hci_auth_complete_evt(hdev, skb);
4119		break;
4120
4121	case HCI_EV_REMOTE_NAME:
4122		hci_remote_name_evt(hdev, skb);
4123		break;
4124
4125	case HCI_EV_ENCRYPT_CHANGE:
4126		hci_encrypt_change_evt(hdev, skb);
4127		break;
4128
4129	case HCI_EV_CHANGE_LINK_KEY_COMPLETE:
4130		hci_change_link_key_complete_evt(hdev, skb);
4131		break;
4132
4133	case HCI_EV_REMOTE_FEATURES:
4134		hci_remote_features_evt(hdev, skb);
4135		break;
4136
4137	case HCI_EV_REMOTE_VERSION:
4138		hci_remote_version_evt(hdev, skb);
4139		break;
4140
4141	case HCI_EV_QOS_SETUP_COMPLETE:
4142		hci_qos_setup_complete_evt(hdev, skb);
4143		break;
4144
4145	case HCI_EV_CMD_COMPLETE:
4146		hci_cmd_complete_evt(hdev, skb);
4147		break;
4148
4149	case HCI_EV_CMD_STATUS:
4150		hci_cmd_status_evt(hdev, skb);
4151		break;
4152
4153	case HCI_EV_ROLE_CHANGE:
4154		hci_role_change_evt(hdev, skb);
4155		break;
4156
4157	case HCI_EV_NUM_COMP_PKTS:
4158		hci_num_comp_pkts_evt(hdev, skb);
4159		break;
4160
4161	case HCI_EV_MODE_CHANGE:
4162		hci_mode_change_evt(hdev, skb);
4163		break;
4164
4165	case HCI_EV_PIN_CODE_REQ:
4166		hci_pin_code_request_evt(hdev, skb);
4167		break;
4168
4169	case HCI_EV_LINK_KEY_REQ:
4170		hci_link_key_request_evt(hdev, skb);
4171		break;
4172
4173	case HCI_EV_LINK_KEY_NOTIFY:
4174		hci_link_key_notify_evt(hdev, skb);
4175		break;
4176
4177	case HCI_EV_CLOCK_OFFSET:
4178		hci_clock_offset_evt(hdev, skb);
4179		break;
4180
4181	case HCI_EV_PKT_TYPE_CHANGE:
4182		hci_pkt_type_change_evt(hdev, skb);
4183		break;
4184
4185	case HCI_EV_PSCAN_REP_MODE:
4186		hci_pscan_rep_mode_evt(hdev, skb);
4187		break;
4188
4189	case HCI_EV_INQUIRY_RESULT_WITH_RSSI:
4190		hci_inquiry_result_with_rssi_evt(hdev, skb);
4191		break;
4192
4193	case HCI_EV_REMOTE_EXT_FEATURES:
4194		hci_remote_ext_features_evt(hdev, skb);
4195		break;
4196
4197	case HCI_EV_SYNC_CONN_COMPLETE:
4198		hci_sync_conn_complete_evt(hdev, skb);
4199		break;
4200
4201	case HCI_EV_SYNC_CONN_CHANGED:
4202		hci_sync_conn_changed_evt(hdev, skb);
4203		break;
4204
4205	case HCI_EV_SNIFF_SUBRATE:
4206		hci_sniff_subrate_evt(hdev, skb);
4207		break;
4208
4209	case HCI_EV_EXTENDED_INQUIRY_RESULT:
4210		hci_extended_inquiry_result_evt(hdev, skb);
4211		break;
4212
4213	case HCI_EV_KEY_REFRESH_COMPLETE:
4214		hci_key_refresh_complete_evt(hdev, skb);
4215		break;
4216
4217	case HCI_EV_IO_CAPA_REQUEST:
4218		hci_io_capa_request_evt(hdev, skb);
4219		break;
4220
4221	case HCI_EV_IO_CAPA_REPLY:
4222		hci_io_capa_reply_evt(hdev, skb);
4223		break;
4224
4225	case HCI_EV_USER_CONFIRM_REQUEST:
4226		hci_user_confirm_request_evt(hdev, skb);
4227		break;
4228
4229	case HCI_EV_USER_PASSKEY_REQUEST:
4230		hci_user_passkey_request_evt(hdev, skb);
4231		break;
4232
4233	case HCI_EV_USER_PASSKEY_NOTIFY:
4234		hci_user_passkey_notify_evt(hdev, skb);
4235		break;
4236
4237	case HCI_EV_KEYPRESS_NOTIFY:
4238		hci_keypress_notify_evt(hdev, skb);
4239		break;
4240
4241	case HCI_EV_SIMPLE_PAIR_COMPLETE:
4242		hci_simple_pair_complete_evt(hdev, skb);
4243		break;
4244
4245	case HCI_EV_REMOTE_HOST_FEATURES:
4246		hci_remote_host_features_evt(hdev, skb);
4247		break;
4248
4249	case HCI_EV_LE_META:
4250		hci_le_meta_evt(hdev, skb);
4251		break;
4252
4253	case HCI_EV_CHANNEL_SELECTED:
4254		hci_chan_selected_evt(hdev, skb);
4255		break;
4256
4257	case HCI_EV_REMOTE_OOB_DATA_REQUEST:
4258		hci_remote_oob_data_request_evt(hdev, skb);
4259		break;
4260
4261	case HCI_EV_PHY_LINK_COMPLETE:
4262		hci_phy_link_complete_evt(hdev, skb);
4263		break;
4264
4265	case HCI_EV_LOGICAL_LINK_COMPLETE:
4266		hci_loglink_complete_evt(hdev, skb);
4267		break;
4268
4269	case HCI_EV_DISCONN_LOGICAL_LINK_COMPLETE:
4270		hci_disconn_loglink_complete_evt(hdev, skb);
4271		break;
4272
4273	case HCI_EV_DISCONN_PHY_LINK_COMPLETE:
4274		hci_disconn_phylink_complete_evt(hdev, skb);
4275		break;
4276
4277	case HCI_EV_NUM_COMP_BLOCKS:
4278		hci_num_comp_blocks_evt(hdev, skb);
4279		break;
4280
4281	default:
4282		BT_DBG("%s event 0x%2.2x", hdev->name, event);
4283		break;
4284	}
4285
4286	kfree_skb(skb);
4287	hdev->stat.evt_rx++;
4288}
4289