xref: /openbmc/linux/net/bluetooth/hci_event.c (revision 609e478b)
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 
33 #include "a2mp.h"
34 #include "amp.h"
35 #include "smp.h"
36 
37 /* Handle HCI Event packets */
38 
39 static void hci_cc_inquiry_cancel(struct hci_dev *hdev, struct sk_buff *skb)
40 {
41 	__u8 status = *((__u8 *) skb->data);
42 
43 	BT_DBG("%s status 0x%2.2x", hdev->name, status);
44 
45 	if (status)
46 		return;
47 
48 	clear_bit(HCI_INQUIRY, &hdev->flags);
49 	smp_mb__after_atomic(); /* wake_up_bit advises about this barrier */
50 	wake_up_bit(&hdev->flags, HCI_INQUIRY);
51 
52 	hci_dev_lock(hdev);
53 	hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
54 	hci_dev_unlock(hdev);
55 
56 	hci_conn_check_pending(hdev);
57 }
58 
59 static void hci_cc_periodic_inq(struct hci_dev *hdev, struct sk_buff *skb)
60 {
61 	__u8 status = *((__u8 *) skb->data);
62 
63 	BT_DBG("%s status 0x%2.2x", hdev->name, status);
64 
65 	if (status)
66 		return;
67 
68 	set_bit(HCI_PERIODIC_INQ, &hdev->dev_flags);
69 }
70 
71 static void hci_cc_exit_periodic_inq(struct hci_dev *hdev, struct sk_buff *skb)
72 {
73 	__u8 status = *((__u8 *) skb->data);
74 
75 	BT_DBG("%s status 0x%2.2x", hdev->name, status);
76 
77 	if (status)
78 		return;
79 
80 	clear_bit(HCI_PERIODIC_INQ, &hdev->dev_flags);
81 
82 	hci_conn_check_pending(hdev);
83 }
84 
85 static void hci_cc_remote_name_req_cancel(struct hci_dev *hdev,
86 					  struct sk_buff *skb)
87 {
88 	BT_DBG("%s", hdev->name);
89 }
90 
91 static void hci_cc_role_discovery(struct hci_dev *hdev, struct sk_buff *skb)
92 {
93 	struct hci_rp_role_discovery *rp = (void *) skb->data;
94 	struct hci_conn *conn;
95 
96 	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
97 
98 	if (rp->status)
99 		return;
100 
101 	hci_dev_lock(hdev);
102 
103 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
104 	if (conn)
105 		conn->role = rp->role;
106 
107 	hci_dev_unlock(hdev);
108 }
109 
110 static void hci_cc_read_link_policy(struct hci_dev *hdev, struct sk_buff *skb)
111 {
112 	struct hci_rp_read_link_policy *rp = (void *) skb->data;
113 	struct hci_conn *conn;
114 
115 	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
116 
117 	if (rp->status)
118 		return;
119 
120 	hci_dev_lock(hdev);
121 
122 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
123 	if (conn)
124 		conn->link_policy = __le16_to_cpu(rp->policy);
125 
126 	hci_dev_unlock(hdev);
127 }
128 
129 static void hci_cc_write_link_policy(struct hci_dev *hdev, struct sk_buff *skb)
130 {
131 	struct hci_rp_write_link_policy *rp = (void *) skb->data;
132 	struct hci_conn *conn;
133 	void *sent;
134 
135 	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
136 
137 	if (rp->status)
138 		return;
139 
140 	sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_LINK_POLICY);
141 	if (!sent)
142 		return;
143 
144 	hci_dev_lock(hdev);
145 
146 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
147 	if (conn)
148 		conn->link_policy = get_unaligned_le16(sent + 2);
149 
150 	hci_dev_unlock(hdev);
151 }
152 
153 static void hci_cc_read_def_link_policy(struct hci_dev *hdev,
154 					struct sk_buff *skb)
155 {
156 	struct hci_rp_read_def_link_policy *rp = (void *) skb->data;
157 
158 	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
159 
160 	if (rp->status)
161 		return;
162 
163 	hdev->link_policy = __le16_to_cpu(rp->policy);
164 }
165 
166 static void hci_cc_write_def_link_policy(struct hci_dev *hdev,
167 					 struct sk_buff *skb)
168 {
169 	__u8 status = *((__u8 *) skb->data);
170 	void *sent;
171 
172 	BT_DBG("%s status 0x%2.2x", hdev->name, status);
173 
174 	if (status)
175 		return;
176 
177 	sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_DEF_LINK_POLICY);
178 	if (!sent)
179 		return;
180 
181 	hdev->link_policy = get_unaligned_le16(sent);
182 }
183 
184 static void hci_cc_reset(struct hci_dev *hdev, struct sk_buff *skb)
185 {
186 	__u8 status = *((__u8 *) skb->data);
187 
188 	BT_DBG("%s status 0x%2.2x", hdev->name, status);
189 
190 	clear_bit(HCI_RESET, &hdev->flags);
191 
192 	/* Reset all non-persistent flags */
193 	hdev->dev_flags &= ~HCI_PERSISTENT_MASK;
194 
195 	hdev->discovery.state = DISCOVERY_STOPPED;
196 	hdev->inq_tx_power = HCI_TX_POWER_INVALID;
197 	hdev->adv_tx_power = HCI_TX_POWER_INVALID;
198 
199 	memset(hdev->adv_data, 0, sizeof(hdev->adv_data));
200 	hdev->adv_data_len = 0;
201 
202 	memset(hdev->scan_rsp_data, 0, sizeof(hdev->scan_rsp_data));
203 	hdev->scan_rsp_data_len = 0;
204 
205 	hdev->le_scan_type = LE_SCAN_PASSIVE;
206 
207 	hdev->ssp_debug_mode = 0;
208 }
209 
210 static void hci_cc_write_local_name(struct hci_dev *hdev, struct sk_buff *skb)
211 {
212 	__u8 status = *((__u8 *) skb->data);
213 	void *sent;
214 
215 	BT_DBG("%s status 0x%2.2x", hdev->name, status);
216 
217 	sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_LOCAL_NAME);
218 	if (!sent)
219 		return;
220 
221 	hci_dev_lock(hdev);
222 
223 	if (test_bit(HCI_MGMT, &hdev->dev_flags))
224 		mgmt_set_local_name_complete(hdev, sent, status);
225 	else if (!status)
226 		memcpy(hdev->dev_name, sent, HCI_MAX_NAME_LENGTH);
227 
228 	hci_dev_unlock(hdev);
229 }
230 
231 static void hci_cc_read_local_name(struct hci_dev *hdev, struct sk_buff *skb)
232 {
233 	struct hci_rp_read_local_name *rp = (void *) skb->data;
234 
235 	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
236 
237 	if (rp->status)
238 		return;
239 
240 	if (test_bit(HCI_SETUP, &hdev->dev_flags))
241 		memcpy(hdev->dev_name, rp->name, HCI_MAX_NAME_LENGTH);
242 }
243 
244 static void hci_cc_write_auth_enable(struct hci_dev *hdev, struct sk_buff *skb)
245 {
246 	__u8 status = *((__u8 *) skb->data);
247 	void *sent;
248 
249 	BT_DBG("%s status 0x%2.2x", hdev->name, status);
250 
251 	sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_AUTH_ENABLE);
252 	if (!sent)
253 		return;
254 
255 	if (!status) {
256 		__u8 param = *((__u8 *) sent);
257 
258 		if (param == AUTH_ENABLED)
259 			set_bit(HCI_AUTH, &hdev->flags);
260 		else
261 			clear_bit(HCI_AUTH, &hdev->flags);
262 	}
263 
264 	if (test_bit(HCI_MGMT, &hdev->dev_flags))
265 		mgmt_auth_enable_complete(hdev, status);
266 }
267 
268 static void hci_cc_write_encrypt_mode(struct hci_dev *hdev, struct sk_buff *skb)
269 {
270 	__u8 status = *((__u8 *) skb->data);
271 	__u8 param;
272 	void *sent;
273 
274 	BT_DBG("%s status 0x%2.2x", hdev->name, status);
275 
276 	if (status)
277 		return;
278 
279 	sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_ENCRYPT_MODE);
280 	if (!sent)
281 		return;
282 
283 	param = *((__u8 *) sent);
284 
285 	if (param)
286 		set_bit(HCI_ENCRYPT, &hdev->flags);
287 	else
288 		clear_bit(HCI_ENCRYPT, &hdev->flags);
289 }
290 
291 static void hci_cc_write_scan_enable(struct hci_dev *hdev, struct sk_buff *skb)
292 {
293 	__u8 status = *((__u8 *) skb->data);
294 	__u8 param;
295 	void *sent;
296 
297 	BT_DBG("%s status 0x%2.2x", hdev->name, status);
298 
299 	sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_SCAN_ENABLE);
300 	if (!sent)
301 		return;
302 
303 	param = *((__u8 *) sent);
304 
305 	hci_dev_lock(hdev);
306 
307 	if (status) {
308 		hdev->discov_timeout = 0;
309 		goto done;
310 	}
311 
312 	if (param & SCAN_INQUIRY)
313 		set_bit(HCI_ISCAN, &hdev->flags);
314 	else
315 		clear_bit(HCI_ISCAN, &hdev->flags);
316 
317 	if (param & SCAN_PAGE)
318 		set_bit(HCI_PSCAN, &hdev->flags);
319 	else
320 		clear_bit(HCI_PSCAN, &hdev->flags);
321 
322 done:
323 	hci_dev_unlock(hdev);
324 }
325 
326 static void hci_cc_read_class_of_dev(struct hci_dev *hdev, struct sk_buff *skb)
327 {
328 	struct hci_rp_read_class_of_dev *rp = (void *) skb->data;
329 
330 	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
331 
332 	if (rp->status)
333 		return;
334 
335 	memcpy(hdev->dev_class, rp->dev_class, 3);
336 
337 	BT_DBG("%s class 0x%.2x%.2x%.2x", hdev->name,
338 	       hdev->dev_class[2], hdev->dev_class[1], hdev->dev_class[0]);
339 }
340 
341 static void hci_cc_write_class_of_dev(struct hci_dev *hdev, struct sk_buff *skb)
342 {
343 	__u8 status = *((__u8 *) skb->data);
344 	void *sent;
345 
346 	BT_DBG("%s status 0x%2.2x", hdev->name, status);
347 
348 	sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_CLASS_OF_DEV);
349 	if (!sent)
350 		return;
351 
352 	hci_dev_lock(hdev);
353 
354 	if (status == 0)
355 		memcpy(hdev->dev_class, sent, 3);
356 
357 	if (test_bit(HCI_MGMT, &hdev->dev_flags))
358 		mgmt_set_class_of_dev_complete(hdev, sent, status);
359 
360 	hci_dev_unlock(hdev);
361 }
362 
363 static void hci_cc_read_voice_setting(struct hci_dev *hdev, struct sk_buff *skb)
364 {
365 	struct hci_rp_read_voice_setting *rp = (void *) skb->data;
366 	__u16 setting;
367 
368 	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
369 
370 	if (rp->status)
371 		return;
372 
373 	setting = __le16_to_cpu(rp->voice_setting);
374 
375 	if (hdev->voice_setting == setting)
376 		return;
377 
378 	hdev->voice_setting = setting;
379 
380 	BT_DBG("%s voice setting 0x%4.4x", hdev->name, setting);
381 
382 	if (hdev->notify)
383 		hdev->notify(hdev, HCI_NOTIFY_VOICE_SETTING);
384 }
385 
386 static void hci_cc_write_voice_setting(struct hci_dev *hdev,
387 				       struct sk_buff *skb)
388 {
389 	__u8 status = *((__u8 *) skb->data);
390 	__u16 setting;
391 	void *sent;
392 
393 	BT_DBG("%s status 0x%2.2x", hdev->name, status);
394 
395 	if (status)
396 		return;
397 
398 	sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_VOICE_SETTING);
399 	if (!sent)
400 		return;
401 
402 	setting = get_unaligned_le16(sent);
403 
404 	if (hdev->voice_setting == setting)
405 		return;
406 
407 	hdev->voice_setting = setting;
408 
409 	BT_DBG("%s voice setting 0x%4.4x", hdev->name, setting);
410 
411 	if (hdev->notify)
412 		hdev->notify(hdev, HCI_NOTIFY_VOICE_SETTING);
413 }
414 
415 static void hci_cc_read_num_supported_iac(struct hci_dev *hdev,
416 					  struct sk_buff *skb)
417 {
418 	struct hci_rp_read_num_supported_iac *rp = (void *) skb->data;
419 
420 	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
421 
422 	if (rp->status)
423 		return;
424 
425 	hdev->num_iac = rp->num_iac;
426 
427 	BT_DBG("%s num iac %d", hdev->name, hdev->num_iac);
428 }
429 
430 static void hci_cc_write_ssp_mode(struct hci_dev *hdev, struct sk_buff *skb)
431 {
432 	__u8 status = *((__u8 *) skb->data);
433 	struct hci_cp_write_ssp_mode *sent;
434 
435 	BT_DBG("%s status 0x%2.2x", hdev->name, status);
436 
437 	sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_SSP_MODE);
438 	if (!sent)
439 		return;
440 
441 	if (!status) {
442 		if (sent->mode)
443 			hdev->features[1][0] |= LMP_HOST_SSP;
444 		else
445 			hdev->features[1][0] &= ~LMP_HOST_SSP;
446 	}
447 
448 	if (test_bit(HCI_MGMT, &hdev->dev_flags))
449 		mgmt_ssp_enable_complete(hdev, sent->mode, status);
450 	else if (!status) {
451 		if (sent->mode)
452 			set_bit(HCI_SSP_ENABLED, &hdev->dev_flags);
453 		else
454 			clear_bit(HCI_SSP_ENABLED, &hdev->dev_flags);
455 	}
456 }
457 
458 static void hci_cc_write_sc_support(struct hci_dev *hdev, struct sk_buff *skb)
459 {
460 	u8 status = *((u8 *) skb->data);
461 	struct hci_cp_write_sc_support *sent;
462 
463 	BT_DBG("%s status 0x%2.2x", hdev->name, status);
464 
465 	sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_SC_SUPPORT);
466 	if (!sent)
467 		return;
468 
469 	if (!status) {
470 		if (sent->support)
471 			hdev->features[1][0] |= LMP_HOST_SC;
472 		else
473 			hdev->features[1][0] &= ~LMP_HOST_SC;
474 	}
475 
476 	if (test_bit(HCI_MGMT, &hdev->dev_flags))
477 		mgmt_sc_enable_complete(hdev, sent->support, status);
478 	else if (!status) {
479 		if (sent->support)
480 			set_bit(HCI_SC_ENABLED, &hdev->dev_flags);
481 		else
482 			clear_bit(HCI_SC_ENABLED, &hdev->dev_flags);
483 	}
484 }
485 
486 static void hci_cc_read_local_version(struct hci_dev *hdev, struct sk_buff *skb)
487 {
488 	struct hci_rp_read_local_version *rp = (void *) skb->data;
489 
490 	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
491 
492 	if (rp->status)
493 		return;
494 
495 	if (test_bit(HCI_SETUP, &hdev->dev_flags)) {
496 		hdev->hci_ver = rp->hci_ver;
497 		hdev->hci_rev = __le16_to_cpu(rp->hci_rev);
498 		hdev->lmp_ver = rp->lmp_ver;
499 		hdev->manufacturer = __le16_to_cpu(rp->manufacturer);
500 		hdev->lmp_subver = __le16_to_cpu(rp->lmp_subver);
501 	}
502 }
503 
504 static void hci_cc_read_local_commands(struct hci_dev *hdev,
505 				       struct sk_buff *skb)
506 {
507 	struct hci_rp_read_local_commands *rp = (void *) skb->data;
508 
509 	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
510 
511 	if (rp->status)
512 		return;
513 
514 	if (test_bit(HCI_SETUP, &hdev->dev_flags))
515 		memcpy(hdev->commands, rp->commands, sizeof(hdev->commands));
516 }
517 
518 static void hci_cc_read_local_features(struct hci_dev *hdev,
519 				       struct sk_buff *skb)
520 {
521 	struct hci_rp_read_local_features *rp = (void *) skb->data;
522 
523 	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
524 
525 	if (rp->status)
526 		return;
527 
528 	memcpy(hdev->features, rp->features, 8);
529 
530 	/* Adjust default settings according to features
531 	 * supported by device. */
532 
533 	if (hdev->features[0][0] & LMP_3SLOT)
534 		hdev->pkt_type |= (HCI_DM3 | HCI_DH3);
535 
536 	if (hdev->features[0][0] & LMP_5SLOT)
537 		hdev->pkt_type |= (HCI_DM5 | HCI_DH5);
538 
539 	if (hdev->features[0][1] & LMP_HV2) {
540 		hdev->pkt_type  |= (HCI_HV2);
541 		hdev->esco_type |= (ESCO_HV2);
542 	}
543 
544 	if (hdev->features[0][1] & LMP_HV3) {
545 		hdev->pkt_type  |= (HCI_HV3);
546 		hdev->esco_type |= (ESCO_HV3);
547 	}
548 
549 	if (lmp_esco_capable(hdev))
550 		hdev->esco_type |= (ESCO_EV3);
551 
552 	if (hdev->features[0][4] & LMP_EV4)
553 		hdev->esco_type |= (ESCO_EV4);
554 
555 	if (hdev->features[0][4] & LMP_EV5)
556 		hdev->esco_type |= (ESCO_EV5);
557 
558 	if (hdev->features[0][5] & LMP_EDR_ESCO_2M)
559 		hdev->esco_type |= (ESCO_2EV3);
560 
561 	if (hdev->features[0][5] & LMP_EDR_ESCO_3M)
562 		hdev->esco_type |= (ESCO_3EV3);
563 
564 	if (hdev->features[0][5] & LMP_EDR_3S_ESCO)
565 		hdev->esco_type |= (ESCO_2EV5 | ESCO_3EV5);
566 }
567 
568 static void hci_cc_read_local_ext_features(struct hci_dev *hdev,
569 					   struct sk_buff *skb)
570 {
571 	struct hci_rp_read_local_ext_features *rp = (void *) skb->data;
572 
573 	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
574 
575 	if (rp->status)
576 		return;
577 
578 	if (hdev->max_page < rp->max_page)
579 		hdev->max_page = rp->max_page;
580 
581 	if (rp->page < HCI_MAX_PAGES)
582 		memcpy(hdev->features[rp->page], rp->features, 8);
583 }
584 
585 static void hci_cc_read_flow_control_mode(struct hci_dev *hdev,
586 					  struct sk_buff *skb)
587 {
588 	struct hci_rp_read_flow_control_mode *rp = (void *) skb->data;
589 
590 	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
591 
592 	if (rp->status)
593 		return;
594 
595 	hdev->flow_ctl_mode = rp->mode;
596 }
597 
598 static void hci_cc_read_buffer_size(struct hci_dev *hdev, struct sk_buff *skb)
599 {
600 	struct hci_rp_read_buffer_size *rp = (void *) skb->data;
601 
602 	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
603 
604 	if (rp->status)
605 		return;
606 
607 	hdev->acl_mtu  = __le16_to_cpu(rp->acl_mtu);
608 	hdev->sco_mtu  = rp->sco_mtu;
609 	hdev->acl_pkts = __le16_to_cpu(rp->acl_max_pkt);
610 	hdev->sco_pkts = __le16_to_cpu(rp->sco_max_pkt);
611 
612 	if (test_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE, &hdev->quirks)) {
613 		hdev->sco_mtu  = 64;
614 		hdev->sco_pkts = 8;
615 	}
616 
617 	hdev->acl_cnt = hdev->acl_pkts;
618 	hdev->sco_cnt = hdev->sco_pkts;
619 
620 	BT_DBG("%s acl mtu %d:%d sco mtu %d:%d", hdev->name, hdev->acl_mtu,
621 	       hdev->acl_pkts, hdev->sco_mtu, hdev->sco_pkts);
622 }
623 
624 static void hci_cc_read_bd_addr(struct hci_dev *hdev, struct sk_buff *skb)
625 {
626 	struct hci_rp_read_bd_addr *rp = (void *) skb->data;
627 
628 	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
629 
630 	if (rp->status)
631 		return;
632 
633 	if (test_bit(HCI_INIT, &hdev->flags))
634 		bacpy(&hdev->bdaddr, &rp->bdaddr);
635 
636 	if (test_bit(HCI_SETUP, &hdev->dev_flags))
637 		bacpy(&hdev->setup_addr, &rp->bdaddr);
638 }
639 
640 static void hci_cc_read_page_scan_activity(struct hci_dev *hdev,
641 					   struct sk_buff *skb)
642 {
643 	struct hci_rp_read_page_scan_activity *rp = (void *) skb->data;
644 
645 	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
646 
647 	if (rp->status)
648 		return;
649 
650 	if (test_bit(HCI_INIT, &hdev->flags)) {
651 		hdev->page_scan_interval = __le16_to_cpu(rp->interval);
652 		hdev->page_scan_window = __le16_to_cpu(rp->window);
653 	}
654 }
655 
656 static void hci_cc_write_page_scan_activity(struct hci_dev *hdev,
657 					    struct sk_buff *skb)
658 {
659 	u8 status = *((u8 *) skb->data);
660 	struct hci_cp_write_page_scan_activity *sent;
661 
662 	BT_DBG("%s status 0x%2.2x", hdev->name, status);
663 
664 	if (status)
665 		return;
666 
667 	sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_PAGE_SCAN_ACTIVITY);
668 	if (!sent)
669 		return;
670 
671 	hdev->page_scan_interval = __le16_to_cpu(sent->interval);
672 	hdev->page_scan_window = __le16_to_cpu(sent->window);
673 }
674 
675 static void hci_cc_read_page_scan_type(struct hci_dev *hdev,
676 					   struct sk_buff *skb)
677 {
678 	struct hci_rp_read_page_scan_type *rp = (void *) skb->data;
679 
680 	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
681 
682 	if (rp->status)
683 		return;
684 
685 	if (test_bit(HCI_INIT, &hdev->flags))
686 		hdev->page_scan_type = rp->type;
687 }
688 
689 static void hci_cc_write_page_scan_type(struct hci_dev *hdev,
690 					struct sk_buff *skb)
691 {
692 	u8 status = *((u8 *) skb->data);
693 	u8 *type;
694 
695 	BT_DBG("%s status 0x%2.2x", hdev->name, status);
696 
697 	if (status)
698 		return;
699 
700 	type = hci_sent_cmd_data(hdev, HCI_OP_WRITE_PAGE_SCAN_TYPE);
701 	if (type)
702 		hdev->page_scan_type = *type;
703 }
704 
705 static void hci_cc_read_data_block_size(struct hci_dev *hdev,
706 					struct sk_buff *skb)
707 {
708 	struct hci_rp_read_data_block_size *rp = (void *) skb->data;
709 
710 	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
711 
712 	if (rp->status)
713 		return;
714 
715 	hdev->block_mtu = __le16_to_cpu(rp->max_acl_len);
716 	hdev->block_len = __le16_to_cpu(rp->block_len);
717 	hdev->num_blocks = __le16_to_cpu(rp->num_blocks);
718 
719 	hdev->block_cnt = hdev->num_blocks;
720 
721 	BT_DBG("%s blk mtu %d cnt %d len %d", hdev->name, hdev->block_mtu,
722 	       hdev->block_cnt, hdev->block_len);
723 }
724 
725 static void hci_cc_read_clock(struct hci_dev *hdev, struct sk_buff *skb)
726 {
727 	struct hci_rp_read_clock *rp = (void *) skb->data;
728 	struct hci_cp_read_clock *cp;
729 	struct hci_conn *conn;
730 
731 	BT_DBG("%s", hdev->name);
732 
733 	if (skb->len < sizeof(*rp))
734 		return;
735 
736 	if (rp->status)
737 		return;
738 
739 	hci_dev_lock(hdev);
740 
741 	cp = hci_sent_cmd_data(hdev, HCI_OP_READ_CLOCK);
742 	if (!cp)
743 		goto unlock;
744 
745 	if (cp->which == 0x00) {
746 		hdev->clock = le32_to_cpu(rp->clock);
747 		goto unlock;
748 	}
749 
750 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
751 	if (conn) {
752 		conn->clock = le32_to_cpu(rp->clock);
753 		conn->clock_accuracy = le16_to_cpu(rp->accuracy);
754 	}
755 
756 unlock:
757 	hci_dev_unlock(hdev);
758 }
759 
760 static void hci_cc_read_local_amp_info(struct hci_dev *hdev,
761 				       struct sk_buff *skb)
762 {
763 	struct hci_rp_read_local_amp_info *rp = (void *) skb->data;
764 
765 	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
766 
767 	if (rp->status)
768 		goto a2mp_rsp;
769 
770 	hdev->amp_status = rp->amp_status;
771 	hdev->amp_total_bw = __le32_to_cpu(rp->total_bw);
772 	hdev->amp_max_bw = __le32_to_cpu(rp->max_bw);
773 	hdev->amp_min_latency = __le32_to_cpu(rp->min_latency);
774 	hdev->amp_max_pdu = __le32_to_cpu(rp->max_pdu);
775 	hdev->amp_type = rp->amp_type;
776 	hdev->amp_pal_cap = __le16_to_cpu(rp->pal_cap);
777 	hdev->amp_assoc_size = __le16_to_cpu(rp->max_assoc_size);
778 	hdev->amp_be_flush_to = __le32_to_cpu(rp->be_flush_to);
779 	hdev->amp_max_flush_to = __le32_to_cpu(rp->max_flush_to);
780 
781 a2mp_rsp:
782 	a2mp_send_getinfo_rsp(hdev);
783 }
784 
785 static void hci_cc_read_local_amp_assoc(struct hci_dev *hdev,
786 					struct sk_buff *skb)
787 {
788 	struct hci_rp_read_local_amp_assoc *rp = (void *) skb->data;
789 	struct amp_assoc *assoc = &hdev->loc_assoc;
790 	size_t rem_len, frag_len;
791 
792 	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
793 
794 	if (rp->status)
795 		goto a2mp_rsp;
796 
797 	frag_len = skb->len - sizeof(*rp);
798 	rem_len = __le16_to_cpu(rp->rem_len);
799 
800 	if (rem_len > frag_len) {
801 		BT_DBG("frag_len %zu rem_len %zu", frag_len, rem_len);
802 
803 		memcpy(assoc->data + assoc->offset, rp->frag, frag_len);
804 		assoc->offset += frag_len;
805 
806 		/* Read other fragments */
807 		amp_read_loc_assoc_frag(hdev, rp->phy_handle);
808 
809 		return;
810 	}
811 
812 	memcpy(assoc->data + assoc->offset, rp->frag, rem_len);
813 	assoc->len = assoc->offset + rem_len;
814 	assoc->offset = 0;
815 
816 a2mp_rsp:
817 	/* Send A2MP Rsp when all fragments are received */
818 	a2mp_send_getampassoc_rsp(hdev, rp->status);
819 	a2mp_send_create_phy_link_req(hdev, rp->status);
820 }
821 
822 static void hci_cc_read_inq_rsp_tx_power(struct hci_dev *hdev,
823 					 struct sk_buff *skb)
824 {
825 	struct hci_rp_read_inq_rsp_tx_power *rp = (void *) skb->data;
826 
827 	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
828 
829 	if (rp->status)
830 		return;
831 
832 	hdev->inq_tx_power = rp->tx_power;
833 }
834 
835 static void hci_cc_pin_code_reply(struct hci_dev *hdev, struct sk_buff *skb)
836 {
837 	struct hci_rp_pin_code_reply *rp = (void *) skb->data;
838 	struct hci_cp_pin_code_reply *cp;
839 	struct hci_conn *conn;
840 
841 	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
842 
843 	hci_dev_lock(hdev);
844 
845 	if (test_bit(HCI_MGMT, &hdev->dev_flags))
846 		mgmt_pin_code_reply_complete(hdev, &rp->bdaddr, rp->status);
847 
848 	if (rp->status)
849 		goto unlock;
850 
851 	cp = hci_sent_cmd_data(hdev, HCI_OP_PIN_CODE_REPLY);
852 	if (!cp)
853 		goto unlock;
854 
855 	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
856 	if (conn)
857 		conn->pin_length = cp->pin_len;
858 
859 unlock:
860 	hci_dev_unlock(hdev);
861 }
862 
863 static void hci_cc_pin_code_neg_reply(struct hci_dev *hdev, struct sk_buff *skb)
864 {
865 	struct hci_rp_pin_code_neg_reply *rp = (void *) skb->data;
866 
867 	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
868 
869 	hci_dev_lock(hdev);
870 
871 	if (test_bit(HCI_MGMT, &hdev->dev_flags))
872 		mgmt_pin_code_neg_reply_complete(hdev, &rp->bdaddr,
873 						 rp->status);
874 
875 	hci_dev_unlock(hdev);
876 }
877 
878 static void hci_cc_le_read_buffer_size(struct hci_dev *hdev,
879 				       struct sk_buff *skb)
880 {
881 	struct hci_rp_le_read_buffer_size *rp = (void *) skb->data;
882 
883 	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
884 
885 	if (rp->status)
886 		return;
887 
888 	hdev->le_mtu = __le16_to_cpu(rp->le_mtu);
889 	hdev->le_pkts = rp->le_max_pkt;
890 
891 	hdev->le_cnt = hdev->le_pkts;
892 
893 	BT_DBG("%s le mtu %d:%d", hdev->name, hdev->le_mtu, hdev->le_pkts);
894 }
895 
896 static void hci_cc_le_read_local_features(struct hci_dev *hdev,
897 					  struct sk_buff *skb)
898 {
899 	struct hci_rp_le_read_local_features *rp = (void *) skb->data;
900 
901 	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
902 
903 	if (rp->status)
904 		return;
905 
906 	memcpy(hdev->le_features, rp->features, 8);
907 }
908 
909 static void hci_cc_le_read_adv_tx_power(struct hci_dev *hdev,
910 					struct sk_buff *skb)
911 {
912 	struct hci_rp_le_read_adv_tx_power *rp = (void *) skb->data;
913 
914 	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
915 
916 	if (rp->status)
917 		return;
918 
919 	hdev->adv_tx_power = rp->tx_power;
920 }
921 
922 static void hci_cc_user_confirm_reply(struct hci_dev *hdev, struct sk_buff *skb)
923 {
924 	struct hci_rp_user_confirm_reply *rp = (void *) skb->data;
925 
926 	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
927 
928 	hci_dev_lock(hdev);
929 
930 	if (test_bit(HCI_MGMT, &hdev->dev_flags))
931 		mgmt_user_confirm_reply_complete(hdev, &rp->bdaddr, ACL_LINK, 0,
932 						 rp->status);
933 
934 	hci_dev_unlock(hdev);
935 }
936 
937 static void hci_cc_user_confirm_neg_reply(struct hci_dev *hdev,
938 					  struct sk_buff *skb)
939 {
940 	struct hci_rp_user_confirm_reply *rp = (void *) skb->data;
941 
942 	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
943 
944 	hci_dev_lock(hdev);
945 
946 	if (test_bit(HCI_MGMT, &hdev->dev_flags))
947 		mgmt_user_confirm_neg_reply_complete(hdev, &rp->bdaddr,
948 						     ACL_LINK, 0, rp->status);
949 
950 	hci_dev_unlock(hdev);
951 }
952 
953 static void hci_cc_user_passkey_reply(struct hci_dev *hdev, struct sk_buff *skb)
954 {
955 	struct hci_rp_user_confirm_reply *rp = (void *) skb->data;
956 
957 	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
958 
959 	hci_dev_lock(hdev);
960 
961 	if (test_bit(HCI_MGMT, &hdev->dev_flags))
962 		mgmt_user_passkey_reply_complete(hdev, &rp->bdaddr, ACL_LINK,
963 						 0, rp->status);
964 
965 	hci_dev_unlock(hdev);
966 }
967 
968 static void hci_cc_user_passkey_neg_reply(struct hci_dev *hdev,
969 					  struct sk_buff *skb)
970 {
971 	struct hci_rp_user_confirm_reply *rp = (void *) skb->data;
972 
973 	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
974 
975 	hci_dev_lock(hdev);
976 
977 	if (test_bit(HCI_MGMT, &hdev->dev_flags))
978 		mgmt_user_passkey_neg_reply_complete(hdev, &rp->bdaddr,
979 						     ACL_LINK, 0, rp->status);
980 
981 	hci_dev_unlock(hdev);
982 }
983 
984 static void hci_cc_read_local_oob_data(struct hci_dev *hdev,
985 				       struct sk_buff *skb)
986 {
987 	struct hci_rp_read_local_oob_data *rp = (void *) skb->data;
988 
989 	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
990 
991 	hci_dev_lock(hdev);
992 	mgmt_read_local_oob_data_complete(hdev, rp->hash, rp->randomizer,
993 					  NULL, NULL, rp->status);
994 	hci_dev_unlock(hdev);
995 }
996 
997 static void hci_cc_read_local_oob_ext_data(struct hci_dev *hdev,
998 					   struct sk_buff *skb)
999 {
1000 	struct hci_rp_read_local_oob_ext_data *rp = (void *) skb->data;
1001 
1002 	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1003 
1004 	hci_dev_lock(hdev);
1005 	mgmt_read_local_oob_data_complete(hdev, rp->hash192, rp->randomizer192,
1006 					  rp->hash256, rp->randomizer256,
1007 					  rp->status);
1008 	hci_dev_unlock(hdev);
1009 }
1010 
1011 
1012 static void hci_cc_le_set_random_addr(struct hci_dev *hdev, struct sk_buff *skb)
1013 {
1014 	__u8 status = *((__u8 *) skb->data);
1015 	bdaddr_t *sent;
1016 
1017 	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1018 
1019 	if (status)
1020 		return;
1021 
1022 	sent = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_RANDOM_ADDR);
1023 	if (!sent)
1024 		return;
1025 
1026 	hci_dev_lock(hdev);
1027 
1028 	bacpy(&hdev->random_addr, sent);
1029 
1030 	hci_dev_unlock(hdev);
1031 }
1032 
1033 static void hci_cc_le_set_adv_enable(struct hci_dev *hdev, struct sk_buff *skb)
1034 {
1035 	__u8 *sent, status = *((__u8 *) skb->data);
1036 
1037 	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1038 
1039 	if (status)
1040 		return;
1041 
1042 	sent = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_ADV_ENABLE);
1043 	if (!sent)
1044 		return;
1045 
1046 	hci_dev_lock(hdev);
1047 
1048 	/* If we're doing connection initation as peripheral. Set a
1049 	 * timeout in case something goes wrong.
1050 	 */
1051 	if (*sent) {
1052 		struct hci_conn *conn;
1053 
1054 		set_bit(HCI_LE_ADV, &hdev->dev_flags);
1055 
1056 		conn = hci_conn_hash_lookup_state(hdev, LE_LINK, BT_CONNECT);
1057 		if (conn)
1058 			queue_delayed_work(hdev->workqueue,
1059 					   &conn->le_conn_timeout,
1060 					   conn->conn_timeout);
1061 	} else {
1062 		clear_bit(HCI_LE_ADV, &hdev->dev_flags);
1063 	}
1064 
1065 	hci_dev_unlock(hdev);
1066 }
1067 
1068 static void hci_cc_le_set_scan_param(struct hci_dev *hdev, struct sk_buff *skb)
1069 {
1070 	struct hci_cp_le_set_scan_param *cp;
1071 	__u8 status = *((__u8 *) skb->data);
1072 
1073 	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1074 
1075 	if (status)
1076 		return;
1077 
1078 	cp = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_SCAN_PARAM);
1079 	if (!cp)
1080 		return;
1081 
1082 	hci_dev_lock(hdev);
1083 
1084 	hdev->le_scan_type = cp->type;
1085 
1086 	hci_dev_unlock(hdev);
1087 }
1088 
1089 static bool has_pending_adv_report(struct hci_dev *hdev)
1090 {
1091 	struct discovery_state *d = &hdev->discovery;
1092 
1093 	return bacmp(&d->last_adv_addr, BDADDR_ANY);
1094 }
1095 
1096 static void clear_pending_adv_report(struct hci_dev *hdev)
1097 {
1098 	struct discovery_state *d = &hdev->discovery;
1099 
1100 	bacpy(&d->last_adv_addr, BDADDR_ANY);
1101 	d->last_adv_data_len = 0;
1102 }
1103 
1104 static void store_pending_adv_report(struct hci_dev *hdev, bdaddr_t *bdaddr,
1105 				     u8 bdaddr_type, s8 rssi, u32 flags,
1106 				     u8 *data, u8 len)
1107 {
1108 	struct discovery_state *d = &hdev->discovery;
1109 
1110 	bacpy(&d->last_adv_addr, bdaddr);
1111 	d->last_adv_addr_type = bdaddr_type;
1112 	d->last_adv_rssi = rssi;
1113 	d->last_adv_flags = flags;
1114 	memcpy(d->last_adv_data, data, len);
1115 	d->last_adv_data_len = len;
1116 }
1117 
1118 static void hci_cc_le_set_scan_enable(struct hci_dev *hdev,
1119 				      struct sk_buff *skb)
1120 {
1121 	struct hci_cp_le_set_scan_enable *cp;
1122 	__u8 status = *((__u8 *) skb->data);
1123 
1124 	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1125 
1126 	if (status)
1127 		return;
1128 
1129 	cp = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_SCAN_ENABLE);
1130 	if (!cp)
1131 		return;
1132 
1133 	switch (cp->enable) {
1134 	case LE_SCAN_ENABLE:
1135 		set_bit(HCI_LE_SCAN, &hdev->dev_flags);
1136 		if (hdev->le_scan_type == LE_SCAN_ACTIVE)
1137 			clear_pending_adv_report(hdev);
1138 		break;
1139 
1140 	case LE_SCAN_DISABLE:
1141 		/* We do this here instead of when setting DISCOVERY_STOPPED
1142 		 * since the latter would potentially require waiting for
1143 		 * inquiry to stop too.
1144 		 */
1145 		if (has_pending_adv_report(hdev)) {
1146 			struct discovery_state *d = &hdev->discovery;
1147 
1148 			mgmt_device_found(hdev, &d->last_adv_addr, LE_LINK,
1149 					  d->last_adv_addr_type, NULL,
1150 					  d->last_adv_rssi, d->last_adv_flags,
1151 					  d->last_adv_data,
1152 					  d->last_adv_data_len, NULL, 0);
1153 		}
1154 
1155 		/* Cancel this timer so that we don't try to disable scanning
1156 		 * when it's already disabled.
1157 		 */
1158 		cancel_delayed_work(&hdev->le_scan_disable);
1159 
1160 		clear_bit(HCI_LE_SCAN, &hdev->dev_flags);
1161 
1162 		/* The HCI_LE_SCAN_INTERRUPTED flag indicates that we
1163 		 * interrupted scanning due to a connect request. Mark
1164 		 * therefore discovery as stopped. If this was not
1165 		 * because of a connect request advertising might have
1166 		 * been disabled because of active scanning, so
1167 		 * re-enable it again if necessary.
1168 		 */
1169 		if (test_and_clear_bit(HCI_LE_SCAN_INTERRUPTED,
1170 				       &hdev->dev_flags))
1171 			hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
1172 		else if (!test_bit(HCI_LE_ADV, &hdev->dev_flags) &&
1173 			 hdev->discovery.state == DISCOVERY_FINDING)
1174 			mgmt_reenable_advertising(hdev);
1175 
1176 		break;
1177 
1178 	default:
1179 		BT_ERR("Used reserved LE_Scan_Enable param %d", cp->enable);
1180 		break;
1181 	}
1182 }
1183 
1184 static void hci_cc_le_read_white_list_size(struct hci_dev *hdev,
1185 					   struct sk_buff *skb)
1186 {
1187 	struct hci_rp_le_read_white_list_size *rp = (void *) skb->data;
1188 
1189 	BT_DBG("%s status 0x%2.2x size %u", hdev->name, rp->status, rp->size);
1190 
1191 	if (rp->status)
1192 		return;
1193 
1194 	hdev->le_white_list_size = rp->size;
1195 }
1196 
1197 static void hci_cc_le_clear_white_list(struct hci_dev *hdev,
1198 				       struct sk_buff *skb)
1199 {
1200 	__u8 status = *((__u8 *) skb->data);
1201 
1202 	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1203 
1204 	if (status)
1205 		return;
1206 
1207 	hci_bdaddr_list_clear(&hdev->le_white_list);
1208 }
1209 
1210 static void hci_cc_le_add_to_white_list(struct hci_dev *hdev,
1211 					struct sk_buff *skb)
1212 {
1213 	struct hci_cp_le_add_to_white_list *sent;
1214 	__u8 status = *((__u8 *) skb->data);
1215 
1216 	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1217 
1218 	if (status)
1219 		return;
1220 
1221 	sent = hci_sent_cmd_data(hdev, HCI_OP_LE_ADD_TO_WHITE_LIST);
1222 	if (!sent)
1223 		return;
1224 
1225 	hci_bdaddr_list_add(&hdev->le_white_list, &sent->bdaddr,
1226 			   sent->bdaddr_type);
1227 }
1228 
1229 static void hci_cc_le_del_from_white_list(struct hci_dev *hdev,
1230 					  struct sk_buff *skb)
1231 {
1232 	struct hci_cp_le_del_from_white_list *sent;
1233 	__u8 status = *((__u8 *) skb->data);
1234 
1235 	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1236 
1237 	if (status)
1238 		return;
1239 
1240 	sent = hci_sent_cmd_data(hdev, HCI_OP_LE_DEL_FROM_WHITE_LIST);
1241 	if (!sent)
1242 		return;
1243 
1244 	hci_bdaddr_list_del(&hdev->le_white_list, &sent->bdaddr,
1245 			    sent->bdaddr_type);
1246 }
1247 
1248 static void hci_cc_le_read_supported_states(struct hci_dev *hdev,
1249 					    struct sk_buff *skb)
1250 {
1251 	struct hci_rp_le_read_supported_states *rp = (void *) skb->data;
1252 
1253 	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1254 
1255 	if (rp->status)
1256 		return;
1257 
1258 	memcpy(hdev->le_states, rp->le_states, 8);
1259 }
1260 
1261 static void hci_cc_write_le_host_supported(struct hci_dev *hdev,
1262 					   struct sk_buff *skb)
1263 {
1264 	struct hci_cp_write_le_host_supported *sent;
1265 	__u8 status = *((__u8 *) skb->data);
1266 
1267 	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1268 
1269 	if (status)
1270 		return;
1271 
1272 	sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_LE_HOST_SUPPORTED);
1273 	if (!sent)
1274 		return;
1275 
1276 	if (sent->le) {
1277 		hdev->features[1][0] |= LMP_HOST_LE;
1278 		set_bit(HCI_LE_ENABLED, &hdev->dev_flags);
1279 	} else {
1280 		hdev->features[1][0] &= ~LMP_HOST_LE;
1281 		clear_bit(HCI_LE_ENABLED, &hdev->dev_flags);
1282 		clear_bit(HCI_ADVERTISING, &hdev->dev_flags);
1283 	}
1284 
1285 	if (sent->simul)
1286 		hdev->features[1][0] |= LMP_HOST_LE_BREDR;
1287 	else
1288 		hdev->features[1][0] &= ~LMP_HOST_LE_BREDR;
1289 }
1290 
1291 static void hci_cc_set_adv_param(struct hci_dev *hdev, struct sk_buff *skb)
1292 {
1293 	struct hci_cp_le_set_adv_param *cp;
1294 	u8 status = *((u8 *) skb->data);
1295 
1296 	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1297 
1298 	if (status)
1299 		return;
1300 
1301 	cp = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_ADV_PARAM);
1302 	if (!cp)
1303 		return;
1304 
1305 	hci_dev_lock(hdev);
1306 	hdev->adv_addr_type = cp->own_address_type;
1307 	hci_dev_unlock(hdev);
1308 }
1309 
1310 static void hci_cc_write_remote_amp_assoc(struct hci_dev *hdev,
1311 					  struct sk_buff *skb)
1312 {
1313 	struct hci_rp_write_remote_amp_assoc *rp = (void *) skb->data;
1314 
1315 	BT_DBG("%s status 0x%2.2x phy_handle 0x%2.2x",
1316 	       hdev->name, rp->status, rp->phy_handle);
1317 
1318 	if (rp->status)
1319 		return;
1320 
1321 	amp_write_rem_assoc_continue(hdev, rp->phy_handle);
1322 }
1323 
1324 static void hci_cc_read_rssi(struct hci_dev *hdev, struct sk_buff *skb)
1325 {
1326 	struct hci_rp_read_rssi *rp = (void *) skb->data;
1327 	struct hci_conn *conn;
1328 
1329 	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1330 
1331 	if (rp->status)
1332 		return;
1333 
1334 	hci_dev_lock(hdev);
1335 
1336 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
1337 	if (conn)
1338 		conn->rssi = rp->rssi;
1339 
1340 	hci_dev_unlock(hdev);
1341 }
1342 
1343 static void hci_cc_read_tx_power(struct hci_dev *hdev, struct sk_buff *skb)
1344 {
1345 	struct hci_cp_read_tx_power *sent;
1346 	struct hci_rp_read_tx_power *rp = (void *) skb->data;
1347 	struct hci_conn *conn;
1348 
1349 	BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1350 
1351 	if (rp->status)
1352 		return;
1353 
1354 	sent = hci_sent_cmd_data(hdev, HCI_OP_READ_TX_POWER);
1355 	if (!sent)
1356 		return;
1357 
1358 	hci_dev_lock(hdev);
1359 
1360 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
1361 	if (!conn)
1362 		goto unlock;
1363 
1364 	switch (sent->type) {
1365 	case 0x00:
1366 		conn->tx_power = rp->tx_power;
1367 		break;
1368 	case 0x01:
1369 		conn->max_tx_power = rp->tx_power;
1370 		break;
1371 	}
1372 
1373 unlock:
1374 	hci_dev_unlock(hdev);
1375 }
1376 
1377 static void hci_cs_inquiry(struct hci_dev *hdev, __u8 status)
1378 {
1379 	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1380 
1381 	if (status) {
1382 		hci_conn_check_pending(hdev);
1383 		return;
1384 	}
1385 
1386 	set_bit(HCI_INQUIRY, &hdev->flags);
1387 }
1388 
1389 static void hci_cs_create_conn(struct hci_dev *hdev, __u8 status)
1390 {
1391 	struct hci_cp_create_conn *cp;
1392 	struct hci_conn *conn;
1393 
1394 	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1395 
1396 	cp = hci_sent_cmd_data(hdev, HCI_OP_CREATE_CONN);
1397 	if (!cp)
1398 		return;
1399 
1400 	hci_dev_lock(hdev);
1401 
1402 	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
1403 
1404 	BT_DBG("%s bdaddr %pMR hcon %p", hdev->name, &cp->bdaddr, conn);
1405 
1406 	if (status) {
1407 		if (conn && conn->state == BT_CONNECT) {
1408 			if (status != 0x0c || conn->attempt > 2) {
1409 				conn->state = BT_CLOSED;
1410 				hci_proto_connect_cfm(conn, status);
1411 				hci_conn_del(conn);
1412 			} else
1413 				conn->state = BT_CONNECT2;
1414 		}
1415 	} else {
1416 		if (!conn) {
1417 			conn = hci_conn_add(hdev, ACL_LINK, &cp->bdaddr,
1418 					    HCI_ROLE_MASTER);
1419 			if (!conn)
1420 				BT_ERR("No memory for new connection");
1421 		}
1422 	}
1423 
1424 	hci_dev_unlock(hdev);
1425 }
1426 
1427 static void hci_cs_add_sco(struct hci_dev *hdev, __u8 status)
1428 {
1429 	struct hci_cp_add_sco *cp;
1430 	struct hci_conn *acl, *sco;
1431 	__u16 handle;
1432 
1433 	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1434 
1435 	if (!status)
1436 		return;
1437 
1438 	cp = hci_sent_cmd_data(hdev, HCI_OP_ADD_SCO);
1439 	if (!cp)
1440 		return;
1441 
1442 	handle = __le16_to_cpu(cp->handle);
1443 
1444 	BT_DBG("%s handle 0x%4.4x", hdev->name, handle);
1445 
1446 	hci_dev_lock(hdev);
1447 
1448 	acl = hci_conn_hash_lookup_handle(hdev, handle);
1449 	if (acl) {
1450 		sco = acl->link;
1451 		if (sco) {
1452 			sco->state = BT_CLOSED;
1453 
1454 			hci_proto_connect_cfm(sco, status);
1455 			hci_conn_del(sco);
1456 		}
1457 	}
1458 
1459 	hci_dev_unlock(hdev);
1460 }
1461 
1462 static void hci_cs_auth_requested(struct hci_dev *hdev, __u8 status)
1463 {
1464 	struct hci_cp_auth_requested *cp;
1465 	struct hci_conn *conn;
1466 
1467 	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1468 
1469 	if (!status)
1470 		return;
1471 
1472 	cp = hci_sent_cmd_data(hdev, HCI_OP_AUTH_REQUESTED);
1473 	if (!cp)
1474 		return;
1475 
1476 	hci_dev_lock(hdev);
1477 
1478 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1479 	if (conn) {
1480 		if (conn->state == BT_CONFIG) {
1481 			hci_proto_connect_cfm(conn, status);
1482 			hci_conn_drop(conn);
1483 		}
1484 	}
1485 
1486 	hci_dev_unlock(hdev);
1487 }
1488 
1489 static void hci_cs_set_conn_encrypt(struct hci_dev *hdev, __u8 status)
1490 {
1491 	struct hci_cp_set_conn_encrypt *cp;
1492 	struct hci_conn *conn;
1493 
1494 	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1495 
1496 	if (!status)
1497 		return;
1498 
1499 	cp = hci_sent_cmd_data(hdev, HCI_OP_SET_CONN_ENCRYPT);
1500 	if (!cp)
1501 		return;
1502 
1503 	hci_dev_lock(hdev);
1504 
1505 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1506 	if (conn) {
1507 		if (conn->state == BT_CONFIG) {
1508 			hci_proto_connect_cfm(conn, status);
1509 			hci_conn_drop(conn);
1510 		}
1511 	}
1512 
1513 	hci_dev_unlock(hdev);
1514 }
1515 
1516 static int hci_outgoing_auth_needed(struct hci_dev *hdev,
1517 				    struct hci_conn *conn)
1518 {
1519 	if (conn->state != BT_CONFIG || !conn->out)
1520 		return 0;
1521 
1522 	if (conn->pending_sec_level == BT_SECURITY_SDP)
1523 		return 0;
1524 
1525 	/* Only request authentication for SSP connections or non-SSP
1526 	 * devices with sec_level MEDIUM or HIGH or if MITM protection
1527 	 * is requested.
1528 	 */
1529 	if (!hci_conn_ssp_enabled(conn) && !(conn->auth_type & 0x01) &&
1530 	    conn->pending_sec_level != BT_SECURITY_FIPS &&
1531 	    conn->pending_sec_level != BT_SECURITY_HIGH &&
1532 	    conn->pending_sec_level != BT_SECURITY_MEDIUM)
1533 		return 0;
1534 
1535 	return 1;
1536 }
1537 
1538 static int hci_resolve_name(struct hci_dev *hdev,
1539 				   struct inquiry_entry *e)
1540 {
1541 	struct hci_cp_remote_name_req cp;
1542 
1543 	memset(&cp, 0, sizeof(cp));
1544 
1545 	bacpy(&cp.bdaddr, &e->data.bdaddr);
1546 	cp.pscan_rep_mode = e->data.pscan_rep_mode;
1547 	cp.pscan_mode = e->data.pscan_mode;
1548 	cp.clock_offset = e->data.clock_offset;
1549 
1550 	return hci_send_cmd(hdev, HCI_OP_REMOTE_NAME_REQ, sizeof(cp), &cp);
1551 }
1552 
1553 static bool hci_resolve_next_name(struct hci_dev *hdev)
1554 {
1555 	struct discovery_state *discov = &hdev->discovery;
1556 	struct inquiry_entry *e;
1557 
1558 	if (list_empty(&discov->resolve))
1559 		return false;
1560 
1561 	e = hci_inquiry_cache_lookup_resolve(hdev, BDADDR_ANY, NAME_NEEDED);
1562 	if (!e)
1563 		return false;
1564 
1565 	if (hci_resolve_name(hdev, e) == 0) {
1566 		e->name_state = NAME_PENDING;
1567 		return true;
1568 	}
1569 
1570 	return false;
1571 }
1572 
1573 static void hci_check_pending_name(struct hci_dev *hdev, struct hci_conn *conn,
1574 				   bdaddr_t *bdaddr, u8 *name, u8 name_len)
1575 {
1576 	struct discovery_state *discov = &hdev->discovery;
1577 	struct inquiry_entry *e;
1578 
1579 	if (conn && !test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags))
1580 		mgmt_device_connected(hdev, bdaddr, ACL_LINK, 0x00, 0, name,
1581 				      name_len, conn->dev_class);
1582 
1583 	if (discov->state == DISCOVERY_STOPPED)
1584 		return;
1585 
1586 	if (discov->state == DISCOVERY_STOPPING)
1587 		goto discov_complete;
1588 
1589 	if (discov->state != DISCOVERY_RESOLVING)
1590 		return;
1591 
1592 	e = hci_inquiry_cache_lookup_resolve(hdev, bdaddr, NAME_PENDING);
1593 	/* If the device was not found in a list of found devices names of which
1594 	 * are pending. there is no need to continue resolving a next name as it
1595 	 * will be done upon receiving another Remote Name Request Complete
1596 	 * Event */
1597 	if (!e)
1598 		return;
1599 
1600 	list_del(&e->list);
1601 	if (name) {
1602 		e->name_state = NAME_KNOWN;
1603 		mgmt_remote_name(hdev, bdaddr, ACL_LINK, 0x00,
1604 				 e->data.rssi, name, name_len);
1605 	} else {
1606 		e->name_state = NAME_NOT_KNOWN;
1607 	}
1608 
1609 	if (hci_resolve_next_name(hdev))
1610 		return;
1611 
1612 discov_complete:
1613 	hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
1614 }
1615 
1616 static void hci_cs_remote_name_req(struct hci_dev *hdev, __u8 status)
1617 {
1618 	struct hci_cp_remote_name_req *cp;
1619 	struct hci_conn *conn;
1620 
1621 	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1622 
1623 	/* If successful wait for the name req complete event before
1624 	 * checking for the need to do authentication */
1625 	if (!status)
1626 		return;
1627 
1628 	cp = hci_sent_cmd_data(hdev, HCI_OP_REMOTE_NAME_REQ);
1629 	if (!cp)
1630 		return;
1631 
1632 	hci_dev_lock(hdev);
1633 
1634 	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
1635 
1636 	if (test_bit(HCI_MGMT, &hdev->dev_flags))
1637 		hci_check_pending_name(hdev, conn, &cp->bdaddr, NULL, 0);
1638 
1639 	if (!conn)
1640 		goto unlock;
1641 
1642 	if (!hci_outgoing_auth_needed(hdev, conn))
1643 		goto unlock;
1644 
1645 	if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
1646 		struct hci_cp_auth_requested auth_cp;
1647 
1648 		set_bit(HCI_CONN_AUTH_INITIATOR, &conn->flags);
1649 
1650 		auth_cp.handle = __cpu_to_le16(conn->handle);
1651 		hci_send_cmd(hdev, HCI_OP_AUTH_REQUESTED,
1652 			     sizeof(auth_cp), &auth_cp);
1653 	}
1654 
1655 unlock:
1656 	hci_dev_unlock(hdev);
1657 }
1658 
1659 static void hci_cs_read_remote_features(struct hci_dev *hdev, __u8 status)
1660 {
1661 	struct hci_cp_read_remote_features *cp;
1662 	struct hci_conn *conn;
1663 
1664 	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1665 
1666 	if (!status)
1667 		return;
1668 
1669 	cp = hci_sent_cmd_data(hdev, HCI_OP_READ_REMOTE_FEATURES);
1670 	if (!cp)
1671 		return;
1672 
1673 	hci_dev_lock(hdev);
1674 
1675 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1676 	if (conn) {
1677 		if (conn->state == BT_CONFIG) {
1678 			hci_proto_connect_cfm(conn, status);
1679 			hci_conn_drop(conn);
1680 		}
1681 	}
1682 
1683 	hci_dev_unlock(hdev);
1684 }
1685 
1686 static void hci_cs_read_remote_ext_features(struct hci_dev *hdev, __u8 status)
1687 {
1688 	struct hci_cp_read_remote_ext_features *cp;
1689 	struct hci_conn *conn;
1690 
1691 	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1692 
1693 	if (!status)
1694 		return;
1695 
1696 	cp = hci_sent_cmd_data(hdev, HCI_OP_READ_REMOTE_EXT_FEATURES);
1697 	if (!cp)
1698 		return;
1699 
1700 	hci_dev_lock(hdev);
1701 
1702 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1703 	if (conn) {
1704 		if (conn->state == BT_CONFIG) {
1705 			hci_proto_connect_cfm(conn, status);
1706 			hci_conn_drop(conn);
1707 		}
1708 	}
1709 
1710 	hci_dev_unlock(hdev);
1711 }
1712 
1713 static void hci_cs_setup_sync_conn(struct hci_dev *hdev, __u8 status)
1714 {
1715 	struct hci_cp_setup_sync_conn *cp;
1716 	struct hci_conn *acl, *sco;
1717 	__u16 handle;
1718 
1719 	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1720 
1721 	if (!status)
1722 		return;
1723 
1724 	cp = hci_sent_cmd_data(hdev, HCI_OP_SETUP_SYNC_CONN);
1725 	if (!cp)
1726 		return;
1727 
1728 	handle = __le16_to_cpu(cp->handle);
1729 
1730 	BT_DBG("%s handle 0x%4.4x", hdev->name, handle);
1731 
1732 	hci_dev_lock(hdev);
1733 
1734 	acl = hci_conn_hash_lookup_handle(hdev, handle);
1735 	if (acl) {
1736 		sco = acl->link;
1737 		if (sco) {
1738 			sco->state = BT_CLOSED;
1739 
1740 			hci_proto_connect_cfm(sco, status);
1741 			hci_conn_del(sco);
1742 		}
1743 	}
1744 
1745 	hci_dev_unlock(hdev);
1746 }
1747 
1748 static void hci_cs_sniff_mode(struct hci_dev *hdev, __u8 status)
1749 {
1750 	struct hci_cp_sniff_mode *cp;
1751 	struct hci_conn *conn;
1752 
1753 	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1754 
1755 	if (!status)
1756 		return;
1757 
1758 	cp = hci_sent_cmd_data(hdev, HCI_OP_SNIFF_MODE);
1759 	if (!cp)
1760 		return;
1761 
1762 	hci_dev_lock(hdev);
1763 
1764 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1765 	if (conn) {
1766 		clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags);
1767 
1768 		if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->flags))
1769 			hci_sco_setup(conn, status);
1770 	}
1771 
1772 	hci_dev_unlock(hdev);
1773 }
1774 
1775 static void hci_cs_exit_sniff_mode(struct hci_dev *hdev, __u8 status)
1776 {
1777 	struct hci_cp_exit_sniff_mode *cp;
1778 	struct hci_conn *conn;
1779 
1780 	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1781 
1782 	if (!status)
1783 		return;
1784 
1785 	cp = hci_sent_cmd_data(hdev, HCI_OP_EXIT_SNIFF_MODE);
1786 	if (!cp)
1787 		return;
1788 
1789 	hci_dev_lock(hdev);
1790 
1791 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1792 	if (conn) {
1793 		clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags);
1794 
1795 		if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->flags))
1796 			hci_sco_setup(conn, status);
1797 	}
1798 
1799 	hci_dev_unlock(hdev);
1800 }
1801 
1802 static void hci_cs_disconnect(struct hci_dev *hdev, u8 status)
1803 {
1804 	struct hci_cp_disconnect *cp;
1805 	struct hci_conn *conn;
1806 
1807 	if (!status)
1808 		return;
1809 
1810 	cp = hci_sent_cmd_data(hdev, HCI_OP_DISCONNECT);
1811 	if (!cp)
1812 		return;
1813 
1814 	hci_dev_lock(hdev);
1815 
1816 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1817 	if (conn)
1818 		mgmt_disconnect_failed(hdev, &conn->dst, conn->type,
1819 				       conn->dst_type, status);
1820 
1821 	hci_dev_unlock(hdev);
1822 }
1823 
1824 static void hci_cs_create_phylink(struct hci_dev *hdev, u8 status)
1825 {
1826 	struct hci_cp_create_phy_link *cp;
1827 
1828 	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1829 
1830 	cp = hci_sent_cmd_data(hdev, HCI_OP_CREATE_PHY_LINK);
1831 	if (!cp)
1832 		return;
1833 
1834 	hci_dev_lock(hdev);
1835 
1836 	if (status) {
1837 		struct hci_conn *hcon;
1838 
1839 		hcon = hci_conn_hash_lookup_handle(hdev, cp->phy_handle);
1840 		if (hcon)
1841 			hci_conn_del(hcon);
1842 	} else {
1843 		amp_write_remote_assoc(hdev, cp->phy_handle);
1844 	}
1845 
1846 	hci_dev_unlock(hdev);
1847 }
1848 
1849 static void hci_cs_accept_phylink(struct hci_dev *hdev, u8 status)
1850 {
1851 	struct hci_cp_accept_phy_link *cp;
1852 
1853 	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1854 
1855 	if (status)
1856 		return;
1857 
1858 	cp = hci_sent_cmd_data(hdev, HCI_OP_ACCEPT_PHY_LINK);
1859 	if (!cp)
1860 		return;
1861 
1862 	amp_write_remote_assoc(hdev, cp->phy_handle);
1863 }
1864 
1865 static void hci_cs_le_create_conn(struct hci_dev *hdev, u8 status)
1866 {
1867 	struct hci_cp_le_create_conn *cp;
1868 	struct hci_conn *conn;
1869 
1870 	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1871 
1872 	/* All connection failure handling is taken care of by the
1873 	 * hci_le_conn_failed function which is triggered by the HCI
1874 	 * request completion callbacks used for connecting.
1875 	 */
1876 	if (status)
1877 		return;
1878 
1879 	cp = hci_sent_cmd_data(hdev, HCI_OP_LE_CREATE_CONN);
1880 	if (!cp)
1881 		return;
1882 
1883 	hci_dev_lock(hdev);
1884 
1885 	conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, &cp->peer_addr);
1886 	if (!conn)
1887 		goto unlock;
1888 
1889 	/* Store the initiator and responder address information which
1890 	 * is needed for SMP. These values will not change during the
1891 	 * lifetime of the connection.
1892 	 */
1893 	conn->init_addr_type = cp->own_address_type;
1894 	if (cp->own_address_type == ADDR_LE_DEV_RANDOM)
1895 		bacpy(&conn->init_addr, &hdev->random_addr);
1896 	else
1897 		bacpy(&conn->init_addr, &hdev->bdaddr);
1898 
1899 	conn->resp_addr_type = cp->peer_addr_type;
1900 	bacpy(&conn->resp_addr, &cp->peer_addr);
1901 
1902 	/* We don't want the connection attempt to stick around
1903 	 * indefinitely since LE doesn't have a page timeout concept
1904 	 * like BR/EDR. Set a timer for any connection that doesn't use
1905 	 * the white list for connecting.
1906 	 */
1907 	if (cp->filter_policy == HCI_LE_USE_PEER_ADDR)
1908 		queue_delayed_work(conn->hdev->workqueue,
1909 				   &conn->le_conn_timeout,
1910 				   conn->conn_timeout);
1911 
1912 unlock:
1913 	hci_dev_unlock(hdev);
1914 }
1915 
1916 static void hci_cs_le_start_enc(struct hci_dev *hdev, u8 status)
1917 {
1918 	struct hci_cp_le_start_enc *cp;
1919 	struct hci_conn *conn;
1920 
1921 	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1922 
1923 	if (!status)
1924 		return;
1925 
1926 	hci_dev_lock(hdev);
1927 
1928 	cp = hci_sent_cmd_data(hdev, HCI_OP_LE_START_ENC);
1929 	if (!cp)
1930 		goto unlock;
1931 
1932 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1933 	if (!conn)
1934 		goto unlock;
1935 
1936 	if (conn->state != BT_CONNECTED)
1937 		goto unlock;
1938 
1939 	hci_disconnect(conn, HCI_ERROR_AUTH_FAILURE);
1940 	hci_conn_drop(conn);
1941 
1942 unlock:
1943 	hci_dev_unlock(hdev);
1944 }
1945 
1946 static void hci_inquiry_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1947 {
1948 	__u8 status = *((__u8 *) skb->data);
1949 	struct discovery_state *discov = &hdev->discovery;
1950 	struct inquiry_entry *e;
1951 
1952 	BT_DBG("%s status 0x%2.2x", hdev->name, status);
1953 
1954 	hci_conn_check_pending(hdev);
1955 
1956 	if (!test_and_clear_bit(HCI_INQUIRY, &hdev->flags))
1957 		return;
1958 
1959 	smp_mb__after_atomic(); /* wake_up_bit advises about this barrier */
1960 	wake_up_bit(&hdev->flags, HCI_INQUIRY);
1961 
1962 	if (!test_bit(HCI_MGMT, &hdev->dev_flags))
1963 		return;
1964 
1965 	hci_dev_lock(hdev);
1966 
1967 	if (discov->state != DISCOVERY_FINDING)
1968 		goto unlock;
1969 
1970 	if (list_empty(&discov->resolve)) {
1971 		hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
1972 		goto unlock;
1973 	}
1974 
1975 	e = hci_inquiry_cache_lookup_resolve(hdev, BDADDR_ANY, NAME_NEEDED);
1976 	if (e && hci_resolve_name(hdev, e) == 0) {
1977 		e->name_state = NAME_PENDING;
1978 		hci_discovery_set_state(hdev, DISCOVERY_RESOLVING);
1979 	} else {
1980 		hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
1981 	}
1982 
1983 unlock:
1984 	hci_dev_unlock(hdev);
1985 }
1986 
1987 static void hci_inquiry_result_evt(struct hci_dev *hdev, struct sk_buff *skb)
1988 {
1989 	struct inquiry_data data;
1990 	struct inquiry_info *info = (void *) (skb->data + 1);
1991 	int num_rsp = *((__u8 *) skb->data);
1992 
1993 	BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
1994 
1995 	if (!num_rsp)
1996 		return;
1997 
1998 	if (test_bit(HCI_PERIODIC_INQ, &hdev->dev_flags))
1999 		return;
2000 
2001 	hci_dev_lock(hdev);
2002 
2003 	for (; num_rsp; num_rsp--, info++) {
2004 		u32 flags;
2005 
2006 		bacpy(&data.bdaddr, &info->bdaddr);
2007 		data.pscan_rep_mode	= info->pscan_rep_mode;
2008 		data.pscan_period_mode	= info->pscan_period_mode;
2009 		data.pscan_mode		= info->pscan_mode;
2010 		memcpy(data.dev_class, info->dev_class, 3);
2011 		data.clock_offset	= info->clock_offset;
2012 		data.rssi		= 0x00;
2013 		data.ssp_mode		= 0x00;
2014 
2015 		flags = hci_inquiry_cache_update(hdev, &data, false);
2016 
2017 		mgmt_device_found(hdev, &info->bdaddr, ACL_LINK, 0x00,
2018 				  info->dev_class, 0, flags, NULL, 0, NULL, 0);
2019 	}
2020 
2021 	hci_dev_unlock(hdev);
2022 }
2023 
2024 static void hci_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
2025 {
2026 	struct hci_ev_conn_complete *ev = (void *) skb->data;
2027 	struct hci_conn *conn;
2028 
2029 	BT_DBG("%s", hdev->name);
2030 
2031 	hci_dev_lock(hdev);
2032 
2033 	conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
2034 	if (!conn) {
2035 		if (ev->link_type != SCO_LINK)
2036 			goto unlock;
2037 
2038 		conn = hci_conn_hash_lookup_ba(hdev, ESCO_LINK, &ev->bdaddr);
2039 		if (!conn)
2040 			goto unlock;
2041 
2042 		conn->type = SCO_LINK;
2043 	}
2044 
2045 	if (!ev->status) {
2046 		conn->handle = __le16_to_cpu(ev->handle);
2047 
2048 		if (conn->type == ACL_LINK) {
2049 			conn->state = BT_CONFIG;
2050 			hci_conn_hold(conn);
2051 
2052 			if (!conn->out && !hci_conn_ssp_enabled(conn) &&
2053 			    !hci_find_link_key(hdev, &ev->bdaddr))
2054 				conn->disc_timeout = HCI_PAIRING_TIMEOUT;
2055 			else
2056 				conn->disc_timeout = HCI_DISCONN_TIMEOUT;
2057 		} else
2058 			conn->state = BT_CONNECTED;
2059 
2060 		hci_conn_add_sysfs(conn);
2061 
2062 		if (test_bit(HCI_AUTH, &hdev->flags))
2063 			set_bit(HCI_CONN_AUTH, &conn->flags);
2064 
2065 		if (test_bit(HCI_ENCRYPT, &hdev->flags))
2066 			set_bit(HCI_CONN_ENCRYPT, &conn->flags);
2067 
2068 		/* Get remote features */
2069 		if (conn->type == ACL_LINK) {
2070 			struct hci_cp_read_remote_features cp;
2071 			cp.handle = ev->handle;
2072 			hci_send_cmd(hdev, HCI_OP_READ_REMOTE_FEATURES,
2073 				     sizeof(cp), &cp);
2074 
2075 			hci_update_page_scan(hdev, NULL);
2076 		}
2077 
2078 		/* Set packet type for incoming connection */
2079 		if (!conn->out && hdev->hci_ver < BLUETOOTH_VER_2_0) {
2080 			struct hci_cp_change_conn_ptype cp;
2081 			cp.handle = ev->handle;
2082 			cp.pkt_type = cpu_to_le16(conn->pkt_type);
2083 			hci_send_cmd(hdev, HCI_OP_CHANGE_CONN_PTYPE, sizeof(cp),
2084 				     &cp);
2085 		}
2086 	} else {
2087 		conn->state = BT_CLOSED;
2088 		if (conn->type == ACL_LINK)
2089 			mgmt_connect_failed(hdev, &conn->dst, conn->type,
2090 					    conn->dst_type, ev->status);
2091 	}
2092 
2093 	if (conn->type == ACL_LINK)
2094 		hci_sco_setup(conn, ev->status);
2095 
2096 	if (ev->status) {
2097 		hci_proto_connect_cfm(conn, ev->status);
2098 		hci_conn_del(conn);
2099 	} else if (ev->link_type != ACL_LINK)
2100 		hci_proto_connect_cfm(conn, ev->status);
2101 
2102 unlock:
2103 	hci_dev_unlock(hdev);
2104 
2105 	hci_conn_check_pending(hdev);
2106 }
2107 
2108 static void hci_reject_conn(struct hci_dev *hdev, bdaddr_t *bdaddr)
2109 {
2110 	struct hci_cp_reject_conn_req cp;
2111 
2112 	bacpy(&cp.bdaddr, bdaddr);
2113 	cp.reason = HCI_ERROR_REJ_BAD_ADDR;
2114 	hci_send_cmd(hdev, HCI_OP_REJECT_CONN_REQ, sizeof(cp), &cp);
2115 }
2116 
2117 static void hci_conn_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
2118 {
2119 	struct hci_ev_conn_request *ev = (void *) skb->data;
2120 	int mask = hdev->link_mode;
2121 	struct inquiry_entry *ie;
2122 	struct hci_conn *conn;
2123 	__u8 flags = 0;
2124 
2125 	BT_DBG("%s bdaddr %pMR type 0x%x", hdev->name, &ev->bdaddr,
2126 	       ev->link_type);
2127 
2128 	mask |= hci_proto_connect_ind(hdev, &ev->bdaddr, ev->link_type,
2129 				      &flags);
2130 
2131 	if (!(mask & HCI_LM_ACCEPT)) {
2132 		hci_reject_conn(hdev, &ev->bdaddr);
2133 		return;
2134 	}
2135 
2136 	if (hci_bdaddr_list_lookup(&hdev->blacklist, &ev->bdaddr,
2137 				   BDADDR_BREDR)) {
2138 		hci_reject_conn(hdev, &ev->bdaddr);
2139 		return;
2140 	}
2141 
2142 	if (!test_bit(HCI_CONNECTABLE, &hdev->dev_flags) &&
2143 	    !hci_bdaddr_list_lookup(&hdev->whitelist, &ev->bdaddr,
2144 				    BDADDR_BREDR)) {
2145 		    hci_reject_conn(hdev, &ev->bdaddr);
2146 		    return;
2147 	}
2148 
2149 	/* Connection accepted */
2150 
2151 	hci_dev_lock(hdev);
2152 
2153 	ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr);
2154 	if (ie)
2155 		memcpy(ie->data.dev_class, ev->dev_class, 3);
2156 
2157 	conn = hci_conn_hash_lookup_ba(hdev, ev->link_type,
2158 			&ev->bdaddr);
2159 	if (!conn) {
2160 		conn = hci_conn_add(hdev, ev->link_type, &ev->bdaddr,
2161 				    HCI_ROLE_SLAVE);
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), &cp);
2186 	} else if (!(flags & HCI_PROTO_DEFER)) {
2187 		struct hci_cp_accept_sync_conn_req cp;
2188 		conn->state = BT_CONNECT;
2189 
2190 		bacpy(&cp.bdaddr, &ev->bdaddr);
2191 		cp.pkt_type = cpu_to_le16(conn->pkt_type);
2192 
2193 		cp.tx_bandwidth   = cpu_to_le32(0x00001f40);
2194 		cp.rx_bandwidth   = cpu_to_le32(0x00001f40);
2195 		cp.max_latency    = cpu_to_le16(0xffff);
2196 		cp.content_format = cpu_to_le16(hdev->voice_setting);
2197 		cp.retrans_effort = 0xff;
2198 
2199 		hci_send_cmd(hdev, HCI_OP_ACCEPT_SYNC_CONN_REQ, sizeof(cp),
2200 			     &cp);
2201 	} else {
2202 		conn->state = BT_CONNECT2;
2203 		hci_proto_connect_cfm(conn, 0);
2204 	}
2205 }
2206 
2207 static u8 hci_to_mgmt_reason(u8 err)
2208 {
2209 	switch (err) {
2210 	case HCI_ERROR_CONNECTION_TIMEOUT:
2211 		return MGMT_DEV_DISCONN_TIMEOUT;
2212 	case HCI_ERROR_REMOTE_USER_TERM:
2213 	case HCI_ERROR_REMOTE_LOW_RESOURCES:
2214 	case HCI_ERROR_REMOTE_POWER_OFF:
2215 		return MGMT_DEV_DISCONN_REMOTE;
2216 	case HCI_ERROR_LOCAL_HOST_TERM:
2217 		return MGMT_DEV_DISCONN_LOCAL_HOST;
2218 	default:
2219 		return MGMT_DEV_DISCONN_UNKNOWN;
2220 	}
2221 }
2222 
2223 static void hci_disconn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
2224 {
2225 	struct hci_ev_disconn_complete *ev = (void *) skb->data;
2226 	u8 reason = hci_to_mgmt_reason(ev->reason);
2227 	struct hci_conn_params *params;
2228 	struct hci_conn *conn;
2229 	bool mgmt_connected;
2230 	u8 type;
2231 
2232 	BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2233 
2234 	hci_dev_lock(hdev);
2235 
2236 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2237 	if (!conn)
2238 		goto unlock;
2239 
2240 	if (ev->status) {
2241 		mgmt_disconnect_failed(hdev, &conn->dst, conn->type,
2242 				       conn->dst_type, ev->status);
2243 		goto unlock;
2244 	}
2245 
2246 	conn->state = BT_CLOSED;
2247 
2248 	mgmt_connected = test_and_clear_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags);
2249 	mgmt_device_disconnected(hdev, &conn->dst, conn->type, conn->dst_type,
2250 				reason, mgmt_connected);
2251 
2252 	if (conn->type == ACL_LINK) {
2253 		if (test_bit(HCI_CONN_FLUSH_KEY, &conn->flags))
2254 			hci_remove_link_key(hdev, &conn->dst);
2255 
2256 		hci_update_page_scan(hdev, NULL);
2257 	}
2258 
2259 	params = hci_conn_params_lookup(hdev, &conn->dst, conn->dst_type);
2260 	if (params) {
2261 		switch (params->auto_connect) {
2262 		case HCI_AUTO_CONN_LINK_LOSS:
2263 			if (ev->reason != HCI_ERROR_CONNECTION_TIMEOUT)
2264 				break;
2265 			/* Fall through */
2266 
2267 		case HCI_AUTO_CONN_DIRECT:
2268 		case HCI_AUTO_CONN_ALWAYS:
2269 			list_del_init(&params->action);
2270 			list_add(&params->action, &hdev->pend_le_conns);
2271 			hci_update_background_scan(hdev);
2272 			break;
2273 
2274 		default:
2275 			break;
2276 		}
2277 	}
2278 
2279 	type = conn->type;
2280 
2281 	hci_proto_disconn_cfm(conn, ev->reason);
2282 	hci_conn_del(conn);
2283 
2284 	/* Re-enable advertising if necessary, since it might
2285 	 * have been disabled by the connection. From the
2286 	 * HCI_LE_Set_Advertise_Enable command description in
2287 	 * the core specification (v4.0):
2288 	 * "The Controller shall continue advertising until the Host
2289 	 * issues an LE_Set_Advertise_Enable command with
2290 	 * Advertising_Enable set to 0x00 (Advertising is disabled)
2291 	 * or until a connection is created or until the Advertising
2292 	 * is timed out due to Directed Advertising."
2293 	 */
2294 	if (type == LE_LINK)
2295 		mgmt_reenable_advertising(hdev);
2296 
2297 unlock:
2298 	hci_dev_unlock(hdev);
2299 }
2300 
2301 static void hci_auth_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
2302 {
2303 	struct hci_ev_auth_complete *ev = (void *) skb->data;
2304 	struct hci_conn *conn;
2305 
2306 	BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2307 
2308 	hci_dev_lock(hdev);
2309 
2310 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2311 	if (!conn)
2312 		goto unlock;
2313 
2314 	if (!ev->status) {
2315 		if (!hci_conn_ssp_enabled(conn) &&
2316 		    test_bit(HCI_CONN_REAUTH_PEND, &conn->flags)) {
2317 			BT_INFO("re-auth of legacy device is not possible.");
2318 		} else {
2319 			set_bit(HCI_CONN_AUTH, &conn->flags);
2320 			conn->sec_level = conn->pending_sec_level;
2321 		}
2322 	} else {
2323 		mgmt_auth_failed(conn, ev->status);
2324 	}
2325 
2326 	clear_bit(HCI_CONN_AUTH_PEND, &conn->flags);
2327 	clear_bit(HCI_CONN_REAUTH_PEND, &conn->flags);
2328 
2329 	if (conn->state == BT_CONFIG) {
2330 		if (!ev->status && hci_conn_ssp_enabled(conn)) {
2331 			struct hci_cp_set_conn_encrypt cp;
2332 			cp.handle  = ev->handle;
2333 			cp.encrypt = 0x01;
2334 			hci_send_cmd(hdev, HCI_OP_SET_CONN_ENCRYPT, sizeof(cp),
2335 				     &cp);
2336 		} else {
2337 			conn->state = BT_CONNECTED;
2338 			hci_proto_connect_cfm(conn, ev->status);
2339 			hci_conn_drop(conn);
2340 		}
2341 	} else {
2342 		hci_auth_cfm(conn, ev->status);
2343 
2344 		hci_conn_hold(conn);
2345 		conn->disc_timeout = HCI_DISCONN_TIMEOUT;
2346 		hci_conn_drop(conn);
2347 	}
2348 
2349 	if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags)) {
2350 		if (!ev->status) {
2351 			struct hci_cp_set_conn_encrypt cp;
2352 			cp.handle  = ev->handle;
2353 			cp.encrypt = 0x01;
2354 			hci_send_cmd(hdev, HCI_OP_SET_CONN_ENCRYPT, sizeof(cp),
2355 				     &cp);
2356 		} else {
2357 			clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
2358 			hci_encrypt_cfm(conn, ev->status, 0x00);
2359 		}
2360 	}
2361 
2362 unlock:
2363 	hci_dev_unlock(hdev);
2364 }
2365 
2366 static void hci_remote_name_evt(struct hci_dev *hdev, struct sk_buff *skb)
2367 {
2368 	struct hci_ev_remote_name *ev = (void *) skb->data;
2369 	struct hci_conn *conn;
2370 
2371 	BT_DBG("%s", hdev->name);
2372 
2373 	hci_conn_check_pending(hdev);
2374 
2375 	hci_dev_lock(hdev);
2376 
2377 	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
2378 
2379 	if (!test_bit(HCI_MGMT, &hdev->dev_flags))
2380 		goto check_auth;
2381 
2382 	if (ev->status == 0)
2383 		hci_check_pending_name(hdev, conn, &ev->bdaddr, ev->name,
2384 				       strnlen(ev->name, HCI_MAX_NAME_LENGTH));
2385 	else
2386 		hci_check_pending_name(hdev, conn, &ev->bdaddr, NULL, 0);
2387 
2388 check_auth:
2389 	if (!conn)
2390 		goto unlock;
2391 
2392 	if (!hci_outgoing_auth_needed(hdev, conn))
2393 		goto unlock;
2394 
2395 	if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
2396 		struct hci_cp_auth_requested cp;
2397 
2398 		set_bit(HCI_CONN_AUTH_INITIATOR, &conn->flags);
2399 
2400 		cp.handle = __cpu_to_le16(conn->handle);
2401 		hci_send_cmd(hdev, HCI_OP_AUTH_REQUESTED, sizeof(cp), &cp);
2402 	}
2403 
2404 unlock:
2405 	hci_dev_unlock(hdev);
2406 }
2407 
2408 static void hci_encrypt_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
2409 {
2410 	struct hci_ev_encrypt_change *ev = (void *) skb->data;
2411 	struct hci_conn *conn;
2412 
2413 	BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2414 
2415 	hci_dev_lock(hdev);
2416 
2417 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2418 	if (!conn)
2419 		goto unlock;
2420 
2421 	if (!ev->status) {
2422 		if (ev->encrypt) {
2423 			/* Encryption implies authentication */
2424 			set_bit(HCI_CONN_AUTH, &conn->flags);
2425 			set_bit(HCI_CONN_ENCRYPT, &conn->flags);
2426 			conn->sec_level = conn->pending_sec_level;
2427 
2428 			/* P-256 authentication key implies FIPS */
2429 			if (conn->key_type == HCI_LK_AUTH_COMBINATION_P256)
2430 				set_bit(HCI_CONN_FIPS, &conn->flags);
2431 
2432 			if ((conn->type == ACL_LINK && ev->encrypt == 0x02) ||
2433 			    conn->type == LE_LINK)
2434 				set_bit(HCI_CONN_AES_CCM, &conn->flags);
2435 		} else {
2436 			clear_bit(HCI_CONN_ENCRYPT, &conn->flags);
2437 			clear_bit(HCI_CONN_AES_CCM, &conn->flags);
2438 		}
2439 	}
2440 
2441 	/* We should disregard the current RPA and generate a new one
2442 	 * whenever the encryption procedure fails.
2443 	 */
2444 	if (ev->status && conn->type == LE_LINK)
2445 		set_bit(HCI_RPA_EXPIRED, &hdev->dev_flags);
2446 
2447 	clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
2448 
2449 	if (ev->status && conn->state == BT_CONNECTED) {
2450 		hci_disconnect(conn, HCI_ERROR_AUTH_FAILURE);
2451 		hci_conn_drop(conn);
2452 		goto unlock;
2453 	}
2454 
2455 	if (conn->state == BT_CONFIG) {
2456 		if (!ev->status)
2457 			conn->state = BT_CONNECTED;
2458 
2459 		/* In Secure Connections Only mode, do not allow any
2460 		 * connections that are not encrypted with AES-CCM
2461 		 * using a P-256 authenticated combination key.
2462 		 */
2463 		if (test_bit(HCI_SC_ONLY, &hdev->dev_flags) &&
2464 		    (!test_bit(HCI_CONN_AES_CCM, &conn->flags) ||
2465 		     conn->key_type != HCI_LK_AUTH_COMBINATION_P256)) {
2466 			hci_proto_connect_cfm(conn, HCI_ERROR_AUTH_FAILURE);
2467 			hci_conn_drop(conn);
2468 			goto unlock;
2469 		}
2470 
2471 		hci_proto_connect_cfm(conn, ev->status);
2472 		hci_conn_drop(conn);
2473 	} else
2474 		hci_encrypt_cfm(conn, ev->status, ev->encrypt);
2475 
2476 unlock:
2477 	hci_dev_unlock(hdev);
2478 }
2479 
2480 static void hci_change_link_key_complete_evt(struct hci_dev *hdev,
2481 					     struct sk_buff *skb)
2482 {
2483 	struct hci_ev_change_link_key_complete *ev = (void *) skb->data;
2484 	struct hci_conn *conn;
2485 
2486 	BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2487 
2488 	hci_dev_lock(hdev);
2489 
2490 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2491 	if (conn) {
2492 		if (!ev->status)
2493 			set_bit(HCI_CONN_SECURE, &conn->flags);
2494 
2495 		clear_bit(HCI_CONN_AUTH_PEND, &conn->flags);
2496 
2497 		hci_key_change_cfm(conn, ev->status);
2498 	}
2499 
2500 	hci_dev_unlock(hdev);
2501 }
2502 
2503 static void hci_remote_features_evt(struct hci_dev *hdev,
2504 				    struct sk_buff *skb)
2505 {
2506 	struct hci_ev_remote_features *ev = (void *) skb->data;
2507 	struct hci_conn *conn;
2508 
2509 	BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2510 
2511 	hci_dev_lock(hdev);
2512 
2513 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2514 	if (!conn)
2515 		goto unlock;
2516 
2517 	if (!ev->status)
2518 		memcpy(conn->features[0], ev->features, 8);
2519 
2520 	if (conn->state != BT_CONFIG)
2521 		goto unlock;
2522 
2523 	if (!ev->status && lmp_ssp_capable(hdev) && lmp_ssp_capable(conn)) {
2524 		struct hci_cp_read_remote_ext_features cp;
2525 		cp.handle = ev->handle;
2526 		cp.page = 0x01;
2527 		hci_send_cmd(hdev, HCI_OP_READ_REMOTE_EXT_FEATURES,
2528 			     sizeof(cp), &cp);
2529 		goto unlock;
2530 	}
2531 
2532 	if (!ev->status && !test_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags)) {
2533 		struct hci_cp_remote_name_req cp;
2534 		memset(&cp, 0, sizeof(cp));
2535 		bacpy(&cp.bdaddr, &conn->dst);
2536 		cp.pscan_rep_mode = 0x02;
2537 		hci_send_cmd(hdev, HCI_OP_REMOTE_NAME_REQ, sizeof(cp), &cp);
2538 	} else if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags))
2539 		mgmt_device_connected(hdev, &conn->dst, conn->type,
2540 				      conn->dst_type, 0, NULL, 0,
2541 				      conn->dev_class);
2542 
2543 	if (!hci_outgoing_auth_needed(hdev, conn)) {
2544 		conn->state = BT_CONNECTED;
2545 		hci_proto_connect_cfm(conn, ev->status);
2546 		hci_conn_drop(conn);
2547 	}
2548 
2549 unlock:
2550 	hci_dev_unlock(hdev);
2551 }
2552 
2553 static void hci_cmd_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
2554 {
2555 	struct hci_ev_cmd_complete *ev = (void *) skb->data;
2556 	u8 status = skb->data[sizeof(*ev)];
2557 	__u16 opcode;
2558 
2559 	skb_pull(skb, sizeof(*ev));
2560 
2561 	opcode = __le16_to_cpu(ev->opcode);
2562 
2563 	switch (opcode) {
2564 	case HCI_OP_INQUIRY_CANCEL:
2565 		hci_cc_inquiry_cancel(hdev, skb);
2566 		break;
2567 
2568 	case HCI_OP_PERIODIC_INQ:
2569 		hci_cc_periodic_inq(hdev, skb);
2570 		break;
2571 
2572 	case HCI_OP_EXIT_PERIODIC_INQ:
2573 		hci_cc_exit_periodic_inq(hdev, skb);
2574 		break;
2575 
2576 	case HCI_OP_REMOTE_NAME_REQ_CANCEL:
2577 		hci_cc_remote_name_req_cancel(hdev, skb);
2578 		break;
2579 
2580 	case HCI_OP_ROLE_DISCOVERY:
2581 		hci_cc_role_discovery(hdev, skb);
2582 		break;
2583 
2584 	case HCI_OP_READ_LINK_POLICY:
2585 		hci_cc_read_link_policy(hdev, skb);
2586 		break;
2587 
2588 	case HCI_OP_WRITE_LINK_POLICY:
2589 		hci_cc_write_link_policy(hdev, skb);
2590 		break;
2591 
2592 	case HCI_OP_READ_DEF_LINK_POLICY:
2593 		hci_cc_read_def_link_policy(hdev, skb);
2594 		break;
2595 
2596 	case HCI_OP_WRITE_DEF_LINK_POLICY:
2597 		hci_cc_write_def_link_policy(hdev, skb);
2598 		break;
2599 
2600 	case HCI_OP_RESET:
2601 		hci_cc_reset(hdev, skb);
2602 		break;
2603 
2604 	case HCI_OP_WRITE_LOCAL_NAME:
2605 		hci_cc_write_local_name(hdev, skb);
2606 		break;
2607 
2608 	case HCI_OP_READ_LOCAL_NAME:
2609 		hci_cc_read_local_name(hdev, skb);
2610 		break;
2611 
2612 	case HCI_OP_WRITE_AUTH_ENABLE:
2613 		hci_cc_write_auth_enable(hdev, skb);
2614 		break;
2615 
2616 	case HCI_OP_WRITE_ENCRYPT_MODE:
2617 		hci_cc_write_encrypt_mode(hdev, skb);
2618 		break;
2619 
2620 	case HCI_OP_WRITE_SCAN_ENABLE:
2621 		hci_cc_write_scan_enable(hdev, skb);
2622 		break;
2623 
2624 	case HCI_OP_READ_CLASS_OF_DEV:
2625 		hci_cc_read_class_of_dev(hdev, skb);
2626 		break;
2627 
2628 	case HCI_OP_WRITE_CLASS_OF_DEV:
2629 		hci_cc_write_class_of_dev(hdev, skb);
2630 		break;
2631 
2632 	case HCI_OP_READ_VOICE_SETTING:
2633 		hci_cc_read_voice_setting(hdev, skb);
2634 		break;
2635 
2636 	case HCI_OP_WRITE_VOICE_SETTING:
2637 		hci_cc_write_voice_setting(hdev, skb);
2638 		break;
2639 
2640 	case HCI_OP_READ_NUM_SUPPORTED_IAC:
2641 		hci_cc_read_num_supported_iac(hdev, skb);
2642 		break;
2643 
2644 	case HCI_OP_WRITE_SSP_MODE:
2645 		hci_cc_write_ssp_mode(hdev, skb);
2646 		break;
2647 
2648 	case HCI_OP_WRITE_SC_SUPPORT:
2649 		hci_cc_write_sc_support(hdev, skb);
2650 		break;
2651 
2652 	case HCI_OP_READ_LOCAL_VERSION:
2653 		hci_cc_read_local_version(hdev, skb);
2654 		break;
2655 
2656 	case HCI_OP_READ_LOCAL_COMMANDS:
2657 		hci_cc_read_local_commands(hdev, skb);
2658 		break;
2659 
2660 	case HCI_OP_READ_LOCAL_FEATURES:
2661 		hci_cc_read_local_features(hdev, skb);
2662 		break;
2663 
2664 	case HCI_OP_READ_LOCAL_EXT_FEATURES:
2665 		hci_cc_read_local_ext_features(hdev, skb);
2666 		break;
2667 
2668 	case HCI_OP_READ_BUFFER_SIZE:
2669 		hci_cc_read_buffer_size(hdev, skb);
2670 		break;
2671 
2672 	case HCI_OP_READ_BD_ADDR:
2673 		hci_cc_read_bd_addr(hdev, skb);
2674 		break;
2675 
2676 	case HCI_OP_READ_PAGE_SCAN_ACTIVITY:
2677 		hci_cc_read_page_scan_activity(hdev, skb);
2678 		break;
2679 
2680 	case HCI_OP_WRITE_PAGE_SCAN_ACTIVITY:
2681 		hci_cc_write_page_scan_activity(hdev, skb);
2682 		break;
2683 
2684 	case HCI_OP_READ_PAGE_SCAN_TYPE:
2685 		hci_cc_read_page_scan_type(hdev, skb);
2686 		break;
2687 
2688 	case HCI_OP_WRITE_PAGE_SCAN_TYPE:
2689 		hci_cc_write_page_scan_type(hdev, skb);
2690 		break;
2691 
2692 	case HCI_OP_READ_DATA_BLOCK_SIZE:
2693 		hci_cc_read_data_block_size(hdev, skb);
2694 		break;
2695 
2696 	case HCI_OP_READ_FLOW_CONTROL_MODE:
2697 		hci_cc_read_flow_control_mode(hdev, skb);
2698 		break;
2699 
2700 	case HCI_OP_READ_LOCAL_AMP_INFO:
2701 		hci_cc_read_local_amp_info(hdev, skb);
2702 		break;
2703 
2704 	case HCI_OP_READ_CLOCK:
2705 		hci_cc_read_clock(hdev, skb);
2706 		break;
2707 
2708 	case HCI_OP_READ_LOCAL_AMP_ASSOC:
2709 		hci_cc_read_local_amp_assoc(hdev, skb);
2710 		break;
2711 
2712 	case HCI_OP_READ_INQ_RSP_TX_POWER:
2713 		hci_cc_read_inq_rsp_tx_power(hdev, skb);
2714 		break;
2715 
2716 	case HCI_OP_PIN_CODE_REPLY:
2717 		hci_cc_pin_code_reply(hdev, skb);
2718 		break;
2719 
2720 	case HCI_OP_PIN_CODE_NEG_REPLY:
2721 		hci_cc_pin_code_neg_reply(hdev, skb);
2722 		break;
2723 
2724 	case HCI_OP_READ_LOCAL_OOB_DATA:
2725 		hci_cc_read_local_oob_data(hdev, skb);
2726 		break;
2727 
2728 	case HCI_OP_READ_LOCAL_OOB_EXT_DATA:
2729 		hci_cc_read_local_oob_ext_data(hdev, skb);
2730 		break;
2731 
2732 	case HCI_OP_LE_READ_BUFFER_SIZE:
2733 		hci_cc_le_read_buffer_size(hdev, skb);
2734 		break;
2735 
2736 	case HCI_OP_LE_READ_LOCAL_FEATURES:
2737 		hci_cc_le_read_local_features(hdev, skb);
2738 		break;
2739 
2740 	case HCI_OP_LE_READ_ADV_TX_POWER:
2741 		hci_cc_le_read_adv_tx_power(hdev, skb);
2742 		break;
2743 
2744 	case HCI_OP_USER_CONFIRM_REPLY:
2745 		hci_cc_user_confirm_reply(hdev, skb);
2746 		break;
2747 
2748 	case HCI_OP_USER_CONFIRM_NEG_REPLY:
2749 		hci_cc_user_confirm_neg_reply(hdev, skb);
2750 		break;
2751 
2752 	case HCI_OP_USER_PASSKEY_REPLY:
2753 		hci_cc_user_passkey_reply(hdev, skb);
2754 		break;
2755 
2756 	case HCI_OP_USER_PASSKEY_NEG_REPLY:
2757 		hci_cc_user_passkey_neg_reply(hdev, skb);
2758 		break;
2759 
2760 	case HCI_OP_LE_SET_RANDOM_ADDR:
2761 		hci_cc_le_set_random_addr(hdev, skb);
2762 		break;
2763 
2764 	case HCI_OP_LE_SET_ADV_ENABLE:
2765 		hci_cc_le_set_adv_enable(hdev, skb);
2766 		break;
2767 
2768 	case HCI_OP_LE_SET_SCAN_PARAM:
2769 		hci_cc_le_set_scan_param(hdev, skb);
2770 		break;
2771 
2772 	case HCI_OP_LE_SET_SCAN_ENABLE:
2773 		hci_cc_le_set_scan_enable(hdev, skb);
2774 		break;
2775 
2776 	case HCI_OP_LE_READ_WHITE_LIST_SIZE:
2777 		hci_cc_le_read_white_list_size(hdev, skb);
2778 		break;
2779 
2780 	case HCI_OP_LE_CLEAR_WHITE_LIST:
2781 		hci_cc_le_clear_white_list(hdev, skb);
2782 		break;
2783 
2784 	case HCI_OP_LE_ADD_TO_WHITE_LIST:
2785 		hci_cc_le_add_to_white_list(hdev, skb);
2786 		break;
2787 
2788 	case HCI_OP_LE_DEL_FROM_WHITE_LIST:
2789 		hci_cc_le_del_from_white_list(hdev, skb);
2790 		break;
2791 
2792 	case HCI_OP_LE_READ_SUPPORTED_STATES:
2793 		hci_cc_le_read_supported_states(hdev, skb);
2794 		break;
2795 
2796 	case HCI_OP_WRITE_LE_HOST_SUPPORTED:
2797 		hci_cc_write_le_host_supported(hdev, skb);
2798 		break;
2799 
2800 	case HCI_OP_LE_SET_ADV_PARAM:
2801 		hci_cc_set_adv_param(hdev, skb);
2802 		break;
2803 
2804 	case HCI_OP_WRITE_REMOTE_AMP_ASSOC:
2805 		hci_cc_write_remote_amp_assoc(hdev, skb);
2806 		break;
2807 
2808 	case HCI_OP_READ_RSSI:
2809 		hci_cc_read_rssi(hdev, skb);
2810 		break;
2811 
2812 	case HCI_OP_READ_TX_POWER:
2813 		hci_cc_read_tx_power(hdev, skb);
2814 		break;
2815 
2816 	default:
2817 		BT_DBG("%s opcode 0x%4.4x", hdev->name, opcode);
2818 		break;
2819 	}
2820 
2821 	if (opcode != HCI_OP_NOP)
2822 		cancel_delayed_work(&hdev->cmd_timer);
2823 
2824 	hci_req_cmd_complete(hdev, opcode, status);
2825 
2826 	if (ev->ncmd && !test_bit(HCI_RESET, &hdev->flags)) {
2827 		atomic_set(&hdev->cmd_cnt, 1);
2828 		if (!skb_queue_empty(&hdev->cmd_q))
2829 			queue_work(hdev->workqueue, &hdev->cmd_work);
2830 	}
2831 }
2832 
2833 static void hci_cmd_status_evt(struct hci_dev *hdev, struct sk_buff *skb)
2834 {
2835 	struct hci_ev_cmd_status *ev = (void *) skb->data;
2836 	__u16 opcode;
2837 
2838 	skb_pull(skb, sizeof(*ev));
2839 
2840 	opcode = __le16_to_cpu(ev->opcode);
2841 
2842 	switch (opcode) {
2843 	case HCI_OP_INQUIRY:
2844 		hci_cs_inquiry(hdev, ev->status);
2845 		break;
2846 
2847 	case HCI_OP_CREATE_CONN:
2848 		hci_cs_create_conn(hdev, ev->status);
2849 		break;
2850 
2851 	case HCI_OP_ADD_SCO:
2852 		hci_cs_add_sco(hdev, ev->status);
2853 		break;
2854 
2855 	case HCI_OP_AUTH_REQUESTED:
2856 		hci_cs_auth_requested(hdev, ev->status);
2857 		break;
2858 
2859 	case HCI_OP_SET_CONN_ENCRYPT:
2860 		hci_cs_set_conn_encrypt(hdev, ev->status);
2861 		break;
2862 
2863 	case HCI_OP_REMOTE_NAME_REQ:
2864 		hci_cs_remote_name_req(hdev, ev->status);
2865 		break;
2866 
2867 	case HCI_OP_READ_REMOTE_FEATURES:
2868 		hci_cs_read_remote_features(hdev, ev->status);
2869 		break;
2870 
2871 	case HCI_OP_READ_REMOTE_EXT_FEATURES:
2872 		hci_cs_read_remote_ext_features(hdev, ev->status);
2873 		break;
2874 
2875 	case HCI_OP_SETUP_SYNC_CONN:
2876 		hci_cs_setup_sync_conn(hdev, ev->status);
2877 		break;
2878 
2879 	case HCI_OP_SNIFF_MODE:
2880 		hci_cs_sniff_mode(hdev, ev->status);
2881 		break;
2882 
2883 	case HCI_OP_EXIT_SNIFF_MODE:
2884 		hci_cs_exit_sniff_mode(hdev, ev->status);
2885 		break;
2886 
2887 	case HCI_OP_DISCONNECT:
2888 		hci_cs_disconnect(hdev, ev->status);
2889 		break;
2890 
2891 	case HCI_OP_CREATE_PHY_LINK:
2892 		hci_cs_create_phylink(hdev, ev->status);
2893 		break;
2894 
2895 	case HCI_OP_ACCEPT_PHY_LINK:
2896 		hci_cs_accept_phylink(hdev, ev->status);
2897 		break;
2898 
2899 	case HCI_OP_LE_CREATE_CONN:
2900 		hci_cs_le_create_conn(hdev, ev->status);
2901 		break;
2902 
2903 	case HCI_OP_LE_START_ENC:
2904 		hci_cs_le_start_enc(hdev, ev->status);
2905 		break;
2906 
2907 	default:
2908 		BT_DBG("%s opcode 0x%4.4x", hdev->name, opcode);
2909 		break;
2910 	}
2911 
2912 	if (opcode != HCI_OP_NOP)
2913 		cancel_delayed_work(&hdev->cmd_timer);
2914 
2915 	if (ev->status ||
2916 	    (hdev->sent_cmd && !bt_cb(hdev->sent_cmd)->req.event))
2917 		hci_req_cmd_complete(hdev, opcode, ev->status);
2918 
2919 	if (ev->ncmd && !test_bit(HCI_RESET, &hdev->flags)) {
2920 		atomic_set(&hdev->cmd_cnt, 1);
2921 		if (!skb_queue_empty(&hdev->cmd_q))
2922 			queue_work(hdev->workqueue, &hdev->cmd_work);
2923 	}
2924 }
2925 
2926 static void hci_role_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
2927 {
2928 	struct hci_ev_role_change *ev = (void *) skb->data;
2929 	struct hci_conn *conn;
2930 
2931 	BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2932 
2933 	hci_dev_lock(hdev);
2934 
2935 	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
2936 	if (conn) {
2937 		if (!ev->status)
2938 			conn->role = ev->role;
2939 
2940 		clear_bit(HCI_CONN_RSWITCH_PEND, &conn->flags);
2941 
2942 		hci_role_switch_cfm(conn, ev->status, ev->role);
2943 	}
2944 
2945 	hci_dev_unlock(hdev);
2946 }
2947 
2948 static void hci_num_comp_pkts_evt(struct hci_dev *hdev, struct sk_buff *skb)
2949 {
2950 	struct hci_ev_num_comp_pkts *ev = (void *) skb->data;
2951 	int i;
2952 
2953 	if (hdev->flow_ctl_mode != HCI_FLOW_CTL_MODE_PACKET_BASED) {
2954 		BT_ERR("Wrong event for mode %d", hdev->flow_ctl_mode);
2955 		return;
2956 	}
2957 
2958 	if (skb->len < sizeof(*ev) || skb->len < sizeof(*ev) +
2959 	    ev->num_hndl * sizeof(struct hci_comp_pkts_info)) {
2960 		BT_DBG("%s bad parameters", hdev->name);
2961 		return;
2962 	}
2963 
2964 	BT_DBG("%s num_hndl %d", hdev->name, ev->num_hndl);
2965 
2966 	for (i = 0; i < ev->num_hndl; i++) {
2967 		struct hci_comp_pkts_info *info = &ev->handles[i];
2968 		struct hci_conn *conn;
2969 		__u16  handle, count;
2970 
2971 		handle = __le16_to_cpu(info->handle);
2972 		count  = __le16_to_cpu(info->count);
2973 
2974 		conn = hci_conn_hash_lookup_handle(hdev, handle);
2975 		if (!conn)
2976 			continue;
2977 
2978 		conn->sent -= count;
2979 
2980 		switch (conn->type) {
2981 		case ACL_LINK:
2982 			hdev->acl_cnt += count;
2983 			if (hdev->acl_cnt > hdev->acl_pkts)
2984 				hdev->acl_cnt = hdev->acl_pkts;
2985 			break;
2986 
2987 		case LE_LINK:
2988 			if (hdev->le_pkts) {
2989 				hdev->le_cnt += count;
2990 				if (hdev->le_cnt > hdev->le_pkts)
2991 					hdev->le_cnt = hdev->le_pkts;
2992 			} else {
2993 				hdev->acl_cnt += count;
2994 				if (hdev->acl_cnt > hdev->acl_pkts)
2995 					hdev->acl_cnt = hdev->acl_pkts;
2996 			}
2997 			break;
2998 
2999 		case SCO_LINK:
3000 			hdev->sco_cnt += count;
3001 			if (hdev->sco_cnt > hdev->sco_pkts)
3002 				hdev->sco_cnt = hdev->sco_pkts;
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 
3014 static struct hci_conn *__hci_conn_lookup_handle(struct hci_dev *hdev,
3015 						 __u16 handle)
3016 {
3017 	struct hci_chan *chan;
3018 
3019 	switch (hdev->dev_type) {
3020 	case HCI_BREDR:
3021 		return hci_conn_hash_lookup_handle(hdev, handle);
3022 	case HCI_AMP:
3023 		chan = hci_chan_lookup_handle(hdev, handle);
3024 		if (chan)
3025 			return chan->conn;
3026 		break;
3027 	default:
3028 		BT_ERR("%s unknown dev_type %d", hdev->name, hdev->dev_type);
3029 		break;
3030 	}
3031 
3032 	return NULL;
3033 }
3034 
3035 static void hci_num_comp_blocks_evt(struct hci_dev *hdev, struct sk_buff *skb)
3036 {
3037 	struct hci_ev_num_comp_blocks *ev = (void *) skb->data;
3038 	int i;
3039 
3040 	if (hdev->flow_ctl_mode != HCI_FLOW_CTL_MODE_BLOCK_BASED) {
3041 		BT_ERR("Wrong event for mode %d", hdev->flow_ctl_mode);
3042 		return;
3043 	}
3044 
3045 	if (skb->len < sizeof(*ev) || skb->len < sizeof(*ev) +
3046 	    ev->num_hndl * sizeof(struct hci_comp_blocks_info)) {
3047 		BT_DBG("%s bad parameters", hdev->name);
3048 		return;
3049 	}
3050 
3051 	BT_DBG("%s num_blocks %d num_hndl %d", hdev->name, ev->num_blocks,
3052 	       ev->num_hndl);
3053 
3054 	for (i = 0; i < ev->num_hndl; i++) {
3055 		struct hci_comp_blocks_info *info = &ev->handles[i];
3056 		struct hci_conn *conn = NULL;
3057 		__u16  handle, block_count;
3058 
3059 		handle = __le16_to_cpu(info->handle);
3060 		block_count = __le16_to_cpu(info->blocks);
3061 
3062 		conn = __hci_conn_lookup_handle(hdev, handle);
3063 		if (!conn)
3064 			continue;
3065 
3066 		conn->sent -= block_count;
3067 
3068 		switch (conn->type) {
3069 		case ACL_LINK:
3070 		case AMP_LINK:
3071 			hdev->block_cnt += block_count;
3072 			if (hdev->block_cnt > hdev->num_blocks)
3073 				hdev->block_cnt = hdev->num_blocks;
3074 			break;
3075 
3076 		default:
3077 			BT_ERR("Unknown type %d conn %p", conn->type, conn);
3078 			break;
3079 		}
3080 	}
3081 
3082 	queue_work(hdev->workqueue, &hdev->tx_work);
3083 }
3084 
3085 static void hci_mode_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
3086 {
3087 	struct hci_ev_mode_change *ev = (void *) skb->data;
3088 	struct hci_conn *conn;
3089 
3090 	BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3091 
3092 	hci_dev_lock(hdev);
3093 
3094 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
3095 	if (conn) {
3096 		conn->mode = ev->mode;
3097 
3098 		if (!test_and_clear_bit(HCI_CONN_MODE_CHANGE_PEND,
3099 					&conn->flags)) {
3100 			if (conn->mode == HCI_CM_ACTIVE)
3101 				set_bit(HCI_CONN_POWER_SAVE, &conn->flags);
3102 			else
3103 				clear_bit(HCI_CONN_POWER_SAVE, &conn->flags);
3104 		}
3105 
3106 		if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->flags))
3107 			hci_sco_setup(conn, ev->status);
3108 	}
3109 
3110 	hci_dev_unlock(hdev);
3111 }
3112 
3113 static void hci_pin_code_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
3114 {
3115 	struct hci_ev_pin_code_req *ev = (void *) skb->data;
3116 	struct hci_conn *conn;
3117 
3118 	BT_DBG("%s", hdev->name);
3119 
3120 	hci_dev_lock(hdev);
3121 
3122 	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3123 	if (!conn)
3124 		goto unlock;
3125 
3126 	if (conn->state == BT_CONNECTED) {
3127 		hci_conn_hold(conn);
3128 		conn->disc_timeout = HCI_PAIRING_TIMEOUT;
3129 		hci_conn_drop(conn);
3130 	}
3131 
3132 	if (!test_bit(HCI_BONDABLE, &hdev->dev_flags) &&
3133 	    !test_bit(HCI_CONN_AUTH_INITIATOR, &conn->flags)) {
3134 		hci_send_cmd(hdev, HCI_OP_PIN_CODE_NEG_REPLY,
3135 			     sizeof(ev->bdaddr), &ev->bdaddr);
3136 	} else if (test_bit(HCI_MGMT, &hdev->dev_flags)) {
3137 		u8 secure;
3138 
3139 		if (conn->pending_sec_level == BT_SECURITY_HIGH)
3140 			secure = 1;
3141 		else
3142 			secure = 0;
3143 
3144 		mgmt_pin_code_request(hdev, &ev->bdaddr, secure);
3145 	}
3146 
3147 unlock:
3148 	hci_dev_unlock(hdev);
3149 }
3150 
3151 static void hci_link_key_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
3152 {
3153 	struct hci_ev_link_key_req *ev = (void *) skb->data;
3154 	struct hci_cp_link_key_reply cp;
3155 	struct hci_conn *conn;
3156 	struct link_key *key;
3157 
3158 	BT_DBG("%s", hdev->name);
3159 
3160 	if (!test_bit(HCI_MGMT, &hdev->dev_flags))
3161 		return;
3162 
3163 	hci_dev_lock(hdev);
3164 
3165 	key = hci_find_link_key(hdev, &ev->bdaddr);
3166 	if (!key) {
3167 		BT_DBG("%s link key not found for %pMR", hdev->name,
3168 		       &ev->bdaddr);
3169 		goto not_found;
3170 	}
3171 
3172 	BT_DBG("%s found key type %u for %pMR", hdev->name, key->type,
3173 	       &ev->bdaddr);
3174 
3175 	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3176 	if (conn) {
3177 		if ((key->type == HCI_LK_UNAUTH_COMBINATION_P192 ||
3178 		     key->type == HCI_LK_UNAUTH_COMBINATION_P256) &&
3179 		    conn->auth_type != 0xff && (conn->auth_type & 0x01)) {
3180 			BT_DBG("%s ignoring unauthenticated key", hdev->name);
3181 			goto not_found;
3182 		}
3183 
3184 		if (key->type == HCI_LK_COMBINATION && key->pin_len < 16 &&
3185 		    (conn->pending_sec_level == BT_SECURITY_HIGH ||
3186 		     conn->pending_sec_level == BT_SECURITY_FIPS)) {
3187 			BT_DBG("%s ignoring key unauthenticated for high security",
3188 			       hdev->name);
3189 			goto not_found;
3190 		}
3191 
3192 		conn->key_type = key->type;
3193 		conn->pin_length = key->pin_len;
3194 	}
3195 
3196 	bacpy(&cp.bdaddr, &ev->bdaddr);
3197 	memcpy(cp.link_key, key->val, HCI_LINK_KEY_SIZE);
3198 
3199 	hci_send_cmd(hdev, HCI_OP_LINK_KEY_REPLY, sizeof(cp), &cp);
3200 
3201 	hci_dev_unlock(hdev);
3202 
3203 	return;
3204 
3205 not_found:
3206 	hci_send_cmd(hdev, HCI_OP_LINK_KEY_NEG_REPLY, 6, &ev->bdaddr);
3207 	hci_dev_unlock(hdev);
3208 }
3209 
3210 static void hci_link_key_notify_evt(struct hci_dev *hdev, struct sk_buff *skb)
3211 {
3212 	struct hci_ev_link_key_notify *ev = (void *) skb->data;
3213 	struct hci_conn *conn;
3214 	struct link_key *key;
3215 	bool persistent;
3216 	u8 pin_len = 0;
3217 
3218 	BT_DBG("%s", hdev->name);
3219 
3220 	hci_dev_lock(hdev);
3221 
3222 	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3223 	if (conn) {
3224 		hci_conn_hold(conn);
3225 		conn->disc_timeout = HCI_DISCONN_TIMEOUT;
3226 		pin_len = conn->pin_length;
3227 
3228 		if (ev->key_type != HCI_LK_CHANGED_COMBINATION)
3229 			conn->key_type = ev->key_type;
3230 
3231 		hci_conn_drop(conn);
3232 	}
3233 
3234 	if (!test_bit(HCI_MGMT, &hdev->dev_flags))
3235 		goto unlock;
3236 
3237 	key = hci_add_link_key(hdev, conn, &ev->bdaddr, ev->link_key,
3238 			        ev->key_type, pin_len, &persistent);
3239 	if (!key)
3240 		goto unlock;
3241 
3242 	mgmt_new_link_key(hdev, key, persistent);
3243 
3244 	/* Keep debug keys around only if the HCI_KEEP_DEBUG_KEYS flag
3245 	 * is set. If it's not set simply remove the key from the kernel
3246 	 * list (we've still notified user space about it but with
3247 	 * store_hint being 0).
3248 	 */
3249 	if (key->type == HCI_LK_DEBUG_COMBINATION &&
3250 	    !test_bit(HCI_KEEP_DEBUG_KEYS, &hdev->dev_flags)) {
3251 		list_del(&key->list);
3252 		kfree(key);
3253 	} else if (conn) {
3254 		if (persistent)
3255 			clear_bit(HCI_CONN_FLUSH_KEY, &conn->flags);
3256 		else
3257 			set_bit(HCI_CONN_FLUSH_KEY, &conn->flags);
3258 	}
3259 
3260 unlock:
3261 	hci_dev_unlock(hdev);
3262 }
3263 
3264 static void hci_clock_offset_evt(struct hci_dev *hdev, struct sk_buff *skb)
3265 {
3266 	struct hci_ev_clock_offset *ev = (void *) skb->data;
3267 	struct hci_conn *conn;
3268 
3269 	BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3270 
3271 	hci_dev_lock(hdev);
3272 
3273 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
3274 	if (conn && !ev->status) {
3275 		struct inquiry_entry *ie;
3276 
3277 		ie = hci_inquiry_cache_lookup(hdev, &conn->dst);
3278 		if (ie) {
3279 			ie->data.clock_offset = ev->clock_offset;
3280 			ie->timestamp = jiffies;
3281 		}
3282 	}
3283 
3284 	hci_dev_unlock(hdev);
3285 }
3286 
3287 static void hci_pkt_type_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
3288 {
3289 	struct hci_ev_pkt_type_change *ev = (void *) skb->data;
3290 	struct hci_conn *conn;
3291 
3292 	BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3293 
3294 	hci_dev_lock(hdev);
3295 
3296 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
3297 	if (conn && !ev->status)
3298 		conn->pkt_type = __le16_to_cpu(ev->pkt_type);
3299 
3300 	hci_dev_unlock(hdev);
3301 }
3302 
3303 static void hci_pscan_rep_mode_evt(struct hci_dev *hdev, struct sk_buff *skb)
3304 {
3305 	struct hci_ev_pscan_rep_mode *ev = (void *) skb->data;
3306 	struct inquiry_entry *ie;
3307 
3308 	BT_DBG("%s", hdev->name);
3309 
3310 	hci_dev_lock(hdev);
3311 
3312 	ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr);
3313 	if (ie) {
3314 		ie->data.pscan_rep_mode = ev->pscan_rep_mode;
3315 		ie->timestamp = jiffies;
3316 	}
3317 
3318 	hci_dev_unlock(hdev);
3319 }
3320 
3321 static void hci_inquiry_result_with_rssi_evt(struct hci_dev *hdev,
3322 					     struct sk_buff *skb)
3323 {
3324 	struct inquiry_data data;
3325 	int num_rsp = *((__u8 *) skb->data);
3326 
3327 	BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
3328 
3329 	if (!num_rsp)
3330 		return;
3331 
3332 	if (test_bit(HCI_PERIODIC_INQ, &hdev->dev_flags))
3333 		return;
3334 
3335 	hci_dev_lock(hdev);
3336 
3337 	if ((skb->len - 1) / num_rsp != sizeof(struct inquiry_info_with_rssi)) {
3338 		struct inquiry_info_with_rssi_and_pscan_mode *info;
3339 		info = (void *) (skb->data + 1);
3340 
3341 		for (; num_rsp; num_rsp--, info++) {
3342 			u32 flags;
3343 
3344 			bacpy(&data.bdaddr, &info->bdaddr);
3345 			data.pscan_rep_mode	= info->pscan_rep_mode;
3346 			data.pscan_period_mode	= info->pscan_period_mode;
3347 			data.pscan_mode		= info->pscan_mode;
3348 			memcpy(data.dev_class, info->dev_class, 3);
3349 			data.clock_offset	= info->clock_offset;
3350 			data.rssi		= info->rssi;
3351 			data.ssp_mode		= 0x00;
3352 
3353 			flags = hci_inquiry_cache_update(hdev, &data, false);
3354 
3355 			mgmt_device_found(hdev, &info->bdaddr, ACL_LINK, 0x00,
3356 					  info->dev_class, info->rssi,
3357 					  flags, NULL, 0, NULL, 0);
3358 		}
3359 	} else {
3360 		struct inquiry_info_with_rssi *info = (void *) (skb->data + 1);
3361 
3362 		for (; num_rsp; num_rsp--, info++) {
3363 			u32 flags;
3364 
3365 			bacpy(&data.bdaddr, &info->bdaddr);
3366 			data.pscan_rep_mode	= info->pscan_rep_mode;
3367 			data.pscan_period_mode	= info->pscan_period_mode;
3368 			data.pscan_mode		= 0x00;
3369 			memcpy(data.dev_class, info->dev_class, 3);
3370 			data.clock_offset	= info->clock_offset;
3371 			data.rssi		= info->rssi;
3372 			data.ssp_mode		= 0x00;
3373 
3374 			flags = hci_inquiry_cache_update(hdev, &data, false);
3375 
3376 			mgmt_device_found(hdev, &info->bdaddr, ACL_LINK, 0x00,
3377 					  info->dev_class, info->rssi,
3378 					  flags, NULL, 0, NULL, 0);
3379 		}
3380 	}
3381 
3382 	hci_dev_unlock(hdev);
3383 }
3384 
3385 static void hci_remote_ext_features_evt(struct hci_dev *hdev,
3386 					struct sk_buff *skb)
3387 {
3388 	struct hci_ev_remote_ext_features *ev = (void *) skb->data;
3389 	struct hci_conn *conn;
3390 
3391 	BT_DBG("%s", hdev->name);
3392 
3393 	hci_dev_lock(hdev);
3394 
3395 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
3396 	if (!conn)
3397 		goto unlock;
3398 
3399 	if (ev->page < HCI_MAX_PAGES)
3400 		memcpy(conn->features[ev->page], ev->features, 8);
3401 
3402 	if (!ev->status && ev->page == 0x01) {
3403 		struct inquiry_entry *ie;
3404 
3405 		ie = hci_inquiry_cache_lookup(hdev, &conn->dst);
3406 		if (ie)
3407 			ie->data.ssp_mode = (ev->features[0] & LMP_HOST_SSP);
3408 
3409 		if (ev->features[0] & LMP_HOST_SSP) {
3410 			set_bit(HCI_CONN_SSP_ENABLED, &conn->flags);
3411 		} else {
3412 			/* It is mandatory by the Bluetooth specification that
3413 			 * Extended Inquiry Results are only used when Secure
3414 			 * Simple Pairing is enabled, but some devices violate
3415 			 * this.
3416 			 *
3417 			 * To make these devices work, the internal SSP
3418 			 * enabled flag needs to be cleared if the remote host
3419 			 * features do not indicate SSP support */
3420 			clear_bit(HCI_CONN_SSP_ENABLED, &conn->flags);
3421 		}
3422 
3423 		if (ev->features[0] & LMP_HOST_SC)
3424 			set_bit(HCI_CONN_SC_ENABLED, &conn->flags);
3425 	}
3426 
3427 	if (conn->state != BT_CONFIG)
3428 		goto unlock;
3429 
3430 	if (!ev->status && !test_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags)) {
3431 		struct hci_cp_remote_name_req cp;
3432 		memset(&cp, 0, sizeof(cp));
3433 		bacpy(&cp.bdaddr, &conn->dst);
3434 		cp.pscan_rep_mode = 0x02;
3435 		hci_send_cmd(hdev, HCI_OP_REMOTE_NAME_REQ, sizeof(cp), &cp);
3436 	} else if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags))
3437 		mgmt_device_connected(hdev, &conn->dst, conn->type,
3438 				      conn->dst_type, 0, NULL, 0,
3439 				      conn->dev_class);
3440 
3441 	if (!hci_outgoing_auth_needed(hdev, conn)) {
3442 		conn->state = BT_CONNECTED;
3443 		hci_proto_connect_cfm(conn, ev->status);
3444 		hci_conn_drop(conn);
3445 	}
3446 
3447 unlock:
3448 	hci_dev_unlock(hdev);
3449 }
3450 
3451 static void hci_sync_conn_complete_evt(struct hci_dev *hdev,
3452 				       struct sk_buff *skb)
3453 {
3454 	struct hci_ev_sync_conn_complete *ev = (void *) skb->data;
3455 	struct hci_conn *conn;
3456 
3457 	BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3458 
3459 	hci_dev_lock(hdev);
3460 
3461 	conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
3462 	if (!conn) {
3463 		if (ev->link_type == ESCO_LINK)
3464 			goto unlock;
3465 
3466 		conn = hci_conn_hash_lookup_ba(hdev, ESCO_LINK, &ev->bdaddr);
3467 		if (!conn)
3468 			goto unlock;
3469 
3470 		conn->type = SCO_LINK;
3471 	}
3472 
3473 	switch (ev->status) {
3474 	case 0x00:
3475 		conn->handle = __le16_to_cpu(ev->handle);
3476 		conn->state  = BT_CONNECTED;
3477 
3478 		hci_conn_add_sysfs(conn);
3479 		break;
3480 
3481 	case 0x10:	/* Connection Accept Timeout */
3482 	case 0x0d:	/* Connection Rejected due to Limited Resources */
3483 	case 0x11:	/* Unsupported Feature or Parameter Value */
3484 	case 0x1c:	/* SCO interval rejected */
3485 	case 0x1a:	/* Unsupported Remote Feature */
3486 	case 0x1f:	/* Unspecified error */
3487 	case 0x20:	/* Unsupported LMP Parameter value */
3488 		if (conn->out) {
3489 			conn->pkt_type = (hdev->esco_type & SCO_ESCO_MASK) |
3490 					(hdev->esco_type & EDR_ESCO_MASK);
3491 			if (hci_setup_sync(conn, conn->link->handle))
3492 				goto unlock;
3493 		}
3494 		/* fall through */
3495 
3496 	default:
3497 		conn->state = BT_CLOSED;
3498 		break;
3499 	}
3500 
3501 	hci_proto_connect_cfm(conn, ev->status);
3502 	if (ev->status)
3503 		hci_conn_del(conn);
3504 
3505 unlock:
3506 	hci_dev_unlock(hdev);
3507 }
3508 
3509 static inline size_t eir_get_length(u8 *eir, size_t eir_len)
3510 {
3511 	size_t parsed = 0;
3512 
3513 	while (parsed < eir_len) {
3514 		u8 field_len = eir[0];
3515 
3516 		if (field_len == 0)
3517 			return parsed;
3518 
3519 		parsed += field_len + 1;
3520 		eir += field_len + 1;
3521 	}
3522 
3523 	return eir_len;
3524 }
3525 
3526 static void hci_extended_inquiry_result_evt(struct hci_dev *hdev,
3527 					    struct sk_buff *skb)
3528 {
3529 	struct inquiry_data data;
3530 	struct extended_inquiry_info *info = (void *) (skb->data + 1);
3531 	int num_rsp = *((__u8 *) skb->data);
3532 	size_t eir_len;
3533 
3534 	BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
3535 
3536 	if (!num_rsp)
3537 		return;
3538 
3539 	if (test_bit(HCI_PERIODIC_INQ, &hdev->dev_flags))
3540 		return;
3541 
3542 	hci_dev_lock(hdev);
3543 
3544 	for (; num_rsp; num_rsp--, info++) {
3545 		u32 flags;
3546 		bool name_known;
3547 
3548 		bacpy(&data.bdaddr, &info->bdaddr);
3549 		data.pscan_rep_mode	= info->pscan_rep_mode;
3550 		data.pscan_period_mode	= info->pscan_period_mode;
3551 		data.pscan_mode		= 0x00;
3552 		memcpy(data.dev_class, info->dev_class, 3);
3553 		data.clock_offset	= info->clock_offset;
3554 		data.rssi		= info->rssi;
3555 		data.ssp_mode		= 0x01;
3556 
3557 		if (test_bit(HCI_MGMT, &hdev->dev_flags))
3558 			name_known = eir_has_data_type(info->data,
3559 						       sizeof(info->data),
3560 						       EIR_NAME_COMPLETE);
3561 		else
3562 			name_known = true;
3563 
3564 		flags = hci_inquiry_cache_update(hdev, &data, name_known);
3565 
3566 		eir_len = eir_get_length(info->data, sizeof(info->data));
3567 
3568 		mgmt_device_found(hdev, &info->bdaddr, ACL_LINK, 0x00,
3569 				  info->dev_class, info->rssi,
3570 				  flags, info->data, eir_len, NULL, 0);
3571 	}
3572 
3573 	hci_dev_unlock(hdev);
3574 }
3575 
3576 static void hci_key_refresh_complete_evt(struct hci_dev *hdev,
3577 					 struct sk_buff *skb)
3578 {
3579 	struct hci_ev_key_refresh_complete *ev = (void *) skb->data;
3580 	struct hci_conn *conn;
3581 
3582 	BT_DBG("%s status 0x%2.2x handle 0x%4.4x", hdev->name, ev->status,
3583 	       __le16_to_cpu(ev->handle));
3584 
3585 	hci_dev_lock(hdev);
3586 
3587 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
3588 	if (!conn)
3589 		goto unlock;
3590 
3591 	/* For BR/EDR the necessary steps are taken through the
3592 	 * auth_complete event.
3593 	 */
3594 	if (conn->type != LE_LINK)
3595 		goto unlock;
3596 
3597 	if (!ev->status)
3598 		conn->sec_level = conn->pending_sec_level;
3599 
3600 	clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
3601 
3602 	if (ev->status && conn->state == BT_CONNECTED) {
3603 		hci_disconnect(conn, HCI_ERROR_AUTH_FAILURE);
3604 		hci_conn_drop(conn);
3605 		goto unlock;
3606 	}
3607 
3608 	if (conn->state == BT_CONFIG) {
3609 		if (!ev->status)
3610 			conn->state = BT_CONNECTED;
3611 
3612 		hci_proto_connect_cfm(conn, ev->status);
3613 		hci_conn_drop(conn);
3614 	} else {
3615 		hci_auth_cfm(conn, ev->status);
3616 
3617 		hci_conn_hold(conn);
3618 		conn->disc_timeout = HCI_DISCONN_TIMEOUT;
3619 		hci_conn_drop(conn);
3620 	}
3621 
3622 unlock:
3623 	hci_dev_unlock(hdev);
3624 }
3625 
3626 static u8 hci_get_auth_req(struct hci_conn *conn)
3627 {
3628 	/* If remote requests no-bonding follow that lead */
3629 	if (conn->remote_auth == HCI_AT_NO_BONDING ||
3630 	    conn->remote_auth == HCI_AT_NO_BONDING_MITM)
3631 		return conn->remote_auth | (conn->auth_type & 0x01);
3632 
3633 	/* If both remote and local have enough IO capabilities, require
3634 	 * MITM protection
3635 	 */
3636 	if (conn->remote_cap != HCI_IO_NO_INPUT_OUTPUT &&
3637 	    conn->io_capability != HCI_IO_NO_INPUT_OUTPUT)
3638 		return conn->remote_auth | 0x01;
3639 
3640 	/* No MITM protection possible so ignore remote requirement */
3641 	return (conn->remote_auth & ~0x01) | (conn->auth_type & 0x01);
3642 }
3643 
3644 static void hci_io_capa_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
3645 {
3646 	struct hci_ev_io_capa_request *ev = (void *) skb->data;
3647 	struct hci_conn *conn;
3648 
3649 	BT_DBG("%s", hdev->name);
3650 
3651 	hci_dev_lock(hdev);
3652 
3653 	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3654 	if (!conn)
3655 		goto unlock;
3656 
3657 	hci_conn_hold(conn);
3658 
3659 	if (!test_bit(HCI_MGMT, &hdev->dev_flags))
3660 		goto unlock;
3661 
3662 	/* Allow pairing if we're pairable, the initiators of the
3663 	 * pairing or if the remote is not requesting bonding.
3664 	 */
3665 	if (test_bit(HCI_BONDABLE, &hdev->dev_flags) ||
3666 	    test_bit(HCI_CONN_AUTH_INITIATOR, &conn->flags) ||
3667 	    (conn->remote_auth & ~0x01) == HCI_AT_NO_BONDING) {
3668 		struct hci_cp_io_capability_reply cp;
3669 
3670 		bacpy(&cp.bdaddr, &ev->bdaddr);
3671 		/* Change the IO capability from KeyboardDisplay
3672 		 * to DisplayYesNo as it is not supported by BT spec. */
3673 		cp.capability = (conn->io_capability == 0x04) ?
3674 				HCI_IO_DISPLAY_YESNO : conn->io_capability;
3675 
3676 		/* If we are initiators, there is no remote information yet */
3677 		if (conn->remote_auth == 0xff) {
3678 			/* Request MITM protection if our IO caps allow it
3679 			 * except for the no-bonding case.
3680 			 */
3681 			if (conn->io_capability != HCI_IO_NO_INPUT_OUTPUT &&
3682 			    conn->auth_type != HCI_AT_NO_BONDING)
3683 				conn->auth_type |= 0x01;
3684 		} else {
3685 			conn->auth_type = hci_get_auth_req(conn);
3686 		}
3687 
3688 		/* If we're not bondable, force one of the non-bondable
3689 		 * authentication requirement values.
3690 		 */
3691 		if (!test_bit(HCI_BONDABLE, &hdev->dev_flags))
3692 			conn->auth_type &= HCI_AT_NO_BONDING_MITM;
3693 
3694 		cp.authentication = conn->auth_type;
3695 
3696 		if (hci_find_remote_oob_data(hdev, &conn->dst) &&
3697 		    (conn->out || test_bit(HCI_CONN_REMOTE_OOB, &conn->flags)))
3698 			cp.oob_data = 0x01;
3699 		else
3700 			cp.oob_data = 0x00;
3701 
3702 		hci_send_cmd(hdev, HCI_OP_IO_CAPABILITY_REPLY,
3703 			     sizeof(cp), &cp);
3704 	} else {
3705 		struct hci_cp_io_capability_neg_reply cp;
3706 
3707 		bacpy(&cp.bdaddr, &ev->bdaddr);
3708 		cp.reason = HCI_ERROR_PAIRING_NOT_ALLOWED;
3709 
3710 		hci_send_cmd(hdev, HCI_OP_IO_CAPABILITY_NEG_REPLY,
3711 			     sizeof(cp), &cp);
3712 	}
3713 
3714 unlock:
3715 	hci_dev_unlock(hdev);
3716 }
3717 
3718 static void hci_io_capa_reply_evt(struct hci_dev *hdev, struct sk_buff *skb)
3719 {
3720 	struct hci_ev_io_capa_reply *ev = (void *) skb->data;
3721 	struct hci_conn *conn;
3722 
3723 	BT_DBG("%s", hdev->name);
3724 
3725 	hci_dev_lock(hdev);
3726 
3727 	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3728 	if (!conn)
3729 		goto unlock;
3730 
3731 	conn->remote_cap = ev->capability;
3732 	conn->remote_auth = ev->authentication;
3733 	if (ev->oob_data)
3734 		set_bit(HCI_CONN_REMOTE_OOB, &conn->flags);
3735 
3736 unlock:
3737 	hci_dev_unlock(hdev);
3738 }
3739 
3740 static void hci_user_confirm_request_evt(struct hci_dev *hdev,
3741 					 struct sk_buff *skb)
3742 {
3743 	struct hci_ev_user_confirm_req *ev = (void *) skb->data;
3744 	int loc_mitm, rem_mitm, confirm_hint = 0;
3745 	struct hci_conn *conn;
3746 
3747 	BT_DBG("%s", hdev->name);
3748 
3749 	hci_dev_lock(hdev);
3750 
3751 	if (!test_bit(HCI_MGMT, &hdev->dev_flags))
3752 		goto unlock;
3753 
3754 	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3755 	if (!conn)
3756 		goto unlock;
3757 
3758 	loc_mitm = (conn->auth_type & 0x01);
3759 	rem_mitm = (conn->remote_auth & 0x01);
3760 
3761 	/* If we require MITM but the remote device can't provide that
3762 	 * (it has NoInputNoOutput) then reject the confirmation
3763 	 * request. We check the security level here since it doesn't
3764 	 * necessarily match conn->auth_type.
3765 	 */
3766 	if (conn->pending_sec_level > BT_SECURITY_MEDIUM &&
3767 	    conn->remote_cap == HCI_IO_NO_INPUT_OUTPUT) {
3768 		BT_DBG("Rejecting request: remote device can't provide MITM");
3769 		hci_send_cmd(hdev, HCI_OP_USER_CONFIRM_NEG_REPLY,
3770 			     sizeof(ev->bdaddr), &ev->bdaddr);
3771 		goto unlock;
3772 	}
3773 
3774 	/* If no side requires MITM protection; auto-accept */
3775 	if ((!loc_mitm || conn->remote_cap == HCI_IO_NO_INPUT_OUTPUT) &&
3776 	    (!rem_mitm || conn->io_capability == HCI_IO_NO_INPUT_OUTPUT)) {
3777 
3778 		/* If we're not the initiators request authorization to
3779 		 * proceed from user space (mgmt_user_confirm with
3780 		 * confirm_hint set to 1). The exception is if neither
3781 		 * side had MITM or if the local IO capability is
3782 		 * NoInputNoOutput, in which case we do auto-accept
3783 		 */
3784 		if (!test_bit(HCI_CONN_AUTH_PEND, &conn->flags) &&
3785 		    conn->io_capability != HCI_IO_NO_INPUT_OUTPUT &&
3786 		    (loc_mitm || rem_mitm)) {
3787 			BT_DBG("Confirming auto-accept as acceptor");
3788 			confirm_hint = 1;
3789 			goto confirm;
3790 		}
3791 
3792 		BT_DBG("Auto-accept of user confirmation with %ums delay",
3793 		       hdev->auto_accept_delay);
3794 
3795 		if (hdev->auto_accept_delay > 0) {
3796 			int delay = msecs_to_jiffies(hdev->auto_accept_delay);
3797 			queue_delayed_work(conn->hdev->workqueue,
3798 					   &conn->auto_accept_work, delay);
3799 			goto unlock;
3800 		}
3801 
3802 		hci_send_cmd(hdev, HCI_OP_USER_CONFIRM_REPLY,
3803 			     sizeof(ev->bdaddr), &ev->bdaddr);
3804 		goto unlock;
3805 	}
3806 
3807 confirm:
3808 	mgmt_user_confirm_request(hdev, &ev->bdaddr, ACL_LINK, 0,
3809 				  le32_to_cpu(ev->passkey), confirm_hint);
3810 
3811 unlock:
3812 	hci_dev_unlock(hdev);
3813 }
3814 
3815 static void hci_user_passkey_request_evt(struct hci_dev *hdev,
3816 					 struct sk_buff *skb)
3817 {
3818 	struct hci_ev_user_passkey_req *ev = (void *) skb->data;
3819 
3820 	BT_DBG("%s", hdev->name);
3821 
3822 	if (test_bit(HCI_MGMT, &hdev->dev_flags))
3823 		mgmt_user_passkey_request(hdev, &ev->bdaddr, ACL_LINK, 0);
3824 }
3825 
3826 static void hci_user_passkey_notify_evt(struct hci_dev *hdev,
3827 					struct sk_buff *skb)
3828 {
3829 	struct hci_ev_user_passkey_notify *ev = (void *) skb->data;
3830 	struct hci_conn *conn;
3831 
3832 	BT_DBG("%s", hdev->name);
3833 
3834 	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3835 	if (!conn)
3836 		return;
3837 
3838 	conn->passkey_notify = __le32_to_cpu(ev->passkey);
3839 	conn->passkey_entered = 0;
3840 
3841 	if (test_bit(HCI_MGMT, &hdev->dev_flags))
3842 		mgmt_user_passkey_notify(hdev, &conn->dst, conn->type,
3843 					 conn->dst_type, conn->passkey_notify,
3844 					 conn->passkey_entered);
3845 }
3846 
3847 static void hci_keypress_notify_evt(struct hci_dev *hdev, struct sk_buff *skb)
3848 {
3849 	struct hci_ev_keypress_notify *ev = (void *) skb->data;
3850 	struct hci_conn *conn;
3851 
3852 	BT_DBG("%s", hdev->name);
3853 
3854 	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3855 	if (!conn)
3856 		return;
3857 
3858 	switch (ev->type) {
3859 	case HCI_KEYPRESS_STARTED:
3860 		conn->passkey_entered = 0;
3861 		return;
3862 
3863 	case HCI_KEYPRESS_ENTERED:
3864 		conn->passkey_entered++;
3865 		break;
3866 
3867 	case HCI_KEYPRESS_ERASED:
3868 		conn->passkey_entered--;
3869 		break;
3870 
3871 	case HCI_KEYPRESS_CLEARED:
3872 		conn->passkey_entered = 0;
3873 		break;
3874 
3875 	case HCI_KEYPRESS_COMPLETED:
3876 		return;
3877 	}
3878 
3879 	if (test_bit(HCI_MGMT, &hdev->dev_flags))
3880 		mgmt_user_passkey_notify(hdev, &conn->dst, conn->type,
3881 					 conn->dst_type, conn->passkey_notify,
3882 					 conn->passkey_entered);
3883 }
3884 
3885 static void hci_simple_pair_complete_evt(struct hci_dev *hdev,
3886 					 struct sk_buff *skb)
3887 {
3888 	struct hci_ev_simple_pair_complete *ev = (void *) skb->data;
3889 	struct hci_conn *conn;
3890 
3891 	BT_DBG("%s", hdev->name);
3892 
3893 	hci_dev_lock(hdev);
3894 
3895 	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3896 	if (!conn)
3897 		goto unlock;
3898 
3899 	/* Reset the authentication requirement to unknown */
3900 	conn->remote_auth = 0xff;
3901 
3902 	/* To avoid duplicate auth_failed events to user space we check
3903 	 * the HCI_CONN_AUTH_PEND flag which will be set if we
3904 	 * initiated the authentication. A traditional auth_complete
3905 	 * event gets always produced as initiator and is also mapped to
3906 	 * the mgmt_auth_failed event */
3907 	if (!test_bit(HCI_CONN_AUTH_PEND, &conn->flags) && ev->status)
3908 		mgmt_auth_failed(conn, ev->status);
3909 
3910 	hci_conn_drop(conn);
3911 
3912 unlock:
3913 	hci_dev_unlock(hdev);
3914 }
3915 
3916 static void hci_remote_host_features_evt(struct hci_dev *hdev,
3917 					 struct sk_buff *skb)
3918 {
3919 	struct hci_ev_remote_host_features *ev = (void *) skb->data;
3920 	struct inquiry_entry *ie;
3921 	struct hci_conn *conn;
3922 
3923 	BT_DBG("%s", hdev->name);
3924 
3925 	hci_dev_lock(hdev);
3926 
3927 	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3928 	if (conn)
3929 		memcpy(conn->features[1], ev->features, 8);
3930 
3931 	ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr);
3932 	if (ie)
3933 		ie->data.ssp_mode = (ev->features[0] & LMP_HOST_SSP);
3934 
3935 	hci_dev_unlock(hdev);
3936 }
3937 
3938 static void hci_remote_oob_data_request_evt(struct hci_dev *hdev,
3939 					    struct sk_buff *skb)
3940 {
3941 	struct hci_ev_remote_oob_data_request *ev = (void *) skb->data;
3942 	struct oob_data *data;
3943 
3944 	BT_DBG("%s", hdev->name);
3945 
3946 	hci_dev_lock(hdev);
3947 
3948 	if (!test_bit(HCI_MGMT, &hdev->dev_flags))
3949 		goto unlock;
3950 
3951 	data = hci_find_remote_oob_data(hdev, &ev->bdaddr);
3952 	if (data) {
3953 		if (test_bit(HCI_SC_ENABLED, &hdev->dev_flags)) {
3954 			struct hci_cp_remote_oob_ext_data_reply cp;
3955 
3956 			bacpy(&cp.bdaddr, &ev->bdaddr);
3957 			memcpy(cp.hash192, data->hash192, sizeof(cp.hash192));
3958 			memcpy(cp.randomizer192, data->randomizer192,
3959 			       sizeof(cp.randomizer192));
3960 			memcpy(cp.hash256, data->hash256, sizeof(cp.hash256));
3961 			memcpy(cp.randomizer256, data->randomizer256,
3962 			       sizeof(cp.randomizer256));
3963 
3964 			hci_send_cmd(hdev, HCI_OP_REMOTE_OOB_EXT_DATA_REPLY,
3965 				     sizeof(cp), &cp);
3966 		} else {
3967 			struct hci_cp_remote_oob_data_reply cp;
3968 
3969 			bacpy(&cp.bdaddr, &ev->bdaddr);
3970 			memcpy(cp.hash, data->hash192, sizeof(cp.hash));
3971 			memcpy(cp.randomizer, data->randomizer192,
3972 			       sizeof(cp.randomizer));
3973 
3974 			hci_send_cmd(hdev, HCI_OP_REMOTE_OOB_DATA_REPLY,
3975 				     sizeof(cp), &cp);
3976 		}
3977 	} else {
3978 		struct hci_cp_remote_oob_data_neg_reply cp;
3979 
3980 		bacpy(&cp.bdaddr, &ev->bdaddr);
3981 		hci_send_cmd(hdev, HCI_OP_REMOTE_OOB_DATA_NEG_REPLY,
3982 			     sizeof(cp), &cp);
3983 	}
3984 
3985 unlock:
3986 	hci_dev_unlock(hdev);
3987 }
3988 
3989 static void hci_phy_link_complete_evt(struct hci_dev *hdev,
3990 				      struct sk_buff *skb)
3991 {
3992 	struct hci_ev_phy_link_complete *ev = (void *) skb->data;
3993 	struct hci_conn *hcon, *bredr_hcon;
3994 
3995 	BT_DBG("%s handle 0x%2.2x status 0x%2.2x", hdev->name, ev->phy_handle,
3996 	       ev->status);
3997 
3998 	hci_dev_lock(hdev);
3999 
4000 	hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle);
4001 	if (!hcon) {
4002 		hci_dev_unlock(hdev);
4003 		return;
4004 	}
4005 
4006 	if (ev->status) {
4007 		hci_conn_del(hcon);
4008 		hci_dev_unlock(hdev);
4009 		return;
4010 	}
4011 
4012 	bredr_hcon = hcon->amp_mgr->l2cap_conn->hcon;
4013 
4014 	hcon->state = BT_CONNECTED;
4015 	bacpy(&hcon->dst, &bredr_hcon->dst);
4016 
4017 	hci_conn_hold(hcon);
4018 	hcon->disc_timeout = HCI_DISCONN_TIMEOUT;
4019 	hci_conn_drop(hcon);
4020 
4021 	hci_conn_add_sysfs(hcon);
4022 
4023 	amp_physical_cfm(bredr_hcon, hcon);
4024 
4025 	hci_dev_unlock(hdev);
4026 }
4027 
4028 static void hci_loglink_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
4029 {
4030 	struct hci_ev_logical_link_complete *ev = (void *) skb->data;
4031 	struct hci_conn *hcon;
4032 	struct hci_chan *hchan;
4033 	struct amp_mgr *mgr;
4034 
4035 	BT_DBG("%s log_handle 0x%4.4x phy_handle 0x%2.2x status 0x%2.2x",
4036 	       hdev->name, le16_to_cpu(ev->handle), ev->phy_handle,
4037 	       ev->status);
4038 
4039 	hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle);
4040 	if (!hcon)
4041 		return;
4042 
4043 	/* Create AMP hchan */
4044 	hchan = hci_chan_create(hcon);
4045 	if (!hchan)
4046 		return;
4047 
4048 	hchan->handle = le16_to_cpu(ev->handle);
4049 
4050 	BT_DBG("hcon %p mgr %p hchan %p", hcon, hcon->amp_mgr, hchan);
4051 
4052 	mgr = hcon->amp_mgr;
4053 	if (mgr && mgr->bredr_chan) {
4054 		struct l2cap_chan *bredr_chan = mgr->bredr_chan;
4055 
4056 		l2cap_chan_lock(bredr_chan);
4057 
4058 		bredr_chan->conn->mtu = hdev->block_mtu;
4059 		l2cap_logical_cfm(bredr_chan, hchan, 0);
4060 		hci_conn_hold(hcon);
4061 
4062 		l2cap_chan_unlock(bredr_chan);
4063 	}
4064 }
4065 
4066 static void hci_disconn_loglink_complete_evt(struct hci_dev *hdev,
4067 					     struct sk_buff *skb)
4068 {
4069 	struct hci_ev_disconn_logical_link_complete *ev = (void *) skb->data;
4070 	struct hci_chan *hchan;
4071 
4072 	BT_DBG("%s log handle 0x%4.4x status 0x%2.2x", hdev->name,
4073 	       le16_to_cpu(ev->handle), ev->status);
4074 
4075 	if (ev->status)
4076 		return;
4077 
4078 	hci_dev_lock(hdev);
4079 
4080 	hchan = hci_chan_lookup_handle(hdev, le16_to_cpu(ev->handle));
4081 	if (!hchan)
4082 		goto unlock;
4083 
4084 	amp_destroy_logical_link(hchan, ev->reason);
4085 
4086 unlock:
4087 	hci_dev_unlock(hdev);
4088 }
4089 
4090 static void hci_disconn_phylink_complete_evt(struct hci_dev *hdev,
4091 					     struct sk_buff *skb)
4092 {
4093 	struct hci_ev_disconn_phy_link_complete *ev = (void *) skb->data;
4094 	struct hci_conn *hcon;
4095 
4096 	BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
4097 
4098 	if (ev->status)
4099 		return;
4100 
4101 	hci_dev_lock(hdev);
4102 
4103 	hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle);
4104 	if (hcon) {
4105 		hcon->state = BT_CLOSED;
4106 		hci_conn_del(hcon);
4107 	}
4108 
4109 	hci_dev_unlock(hdev);
4110 }
4111 
4112 static void hci_le_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
4113 {
4114 	struct hci_ev_le_conn_complete *ev = (void *) skb->data;
4115 	struct hci_conn_params *params;
4116 	struct hci_conn *conn;
4117 	struct smp_irk *irk;
4118 	u8 addr_type;
4119 
4120 	BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
4121 
4122 	hci_dev_lock(hdev);
4123 
4124 	/* All controllers implicitly stop advertising in the event of a
4125 	 * connection, so ensure that the state bit is cleared.
4126 	 */
4127 	clear_bit(HCI_LE_ADV, &hdev->dev_flags);
4128 
4129 	conn = hci_conn_hash_lookup_state(hdev, LE_LINK, BT_CONNECT);
4130 	if (!conn) {
4131 		conn = hci_conn_add(hdev, LE_LINK, &ev->bdaddr, ev->role);
4132 		if (!conn) {
4133 			BT_ERR("No memory for new connection");
4134 			goto unlock;
4135 		}
4136 
4137 		conn->dst_type = ev->bdaddr_type;
4138 
4139 		/* If we didn't have a hci_conn object previously
4140 		 * but we're in master role this must be something
4141 		 * initiated using a white list. Since white list based
4142 		 * connections are not "first class citizens" we don't
4143 		 * have full tracking of them. Therefore, we go ahead
4144 		 * with a "best effort" approach of determining the
4145 		 * initiator address based on the HCI_PRIVACY flag.
4146 		 */
4147 		if (conn->out) {
4148 			conn->resp_addr_type = ev->bdaddr_type;
4149 			bacpy(&conn->resp_addr, &ev->bdaddr);
4150 			if (test_bit(HCI_PRIVACY, &hdev->dev_flags)) {
4151 				conn->init_addr_type = ADDR_LE_DEV_RANDOM;
4152 				bacpy(&conn->init_addr, &hdev->rpa);
4153 			} else {
4154 				hci_copy_identity_address(hdev,
4155 							  &conn->init_addr,
4156 							  &conn->init_addr_type);
4157 			}
4158 		}
4159 	} else {
4160 		cancel_delayed_work(&conn->le_conn_timeout);
4161 	}
4162 
4163 	if (!conn->out) {
4164 		/* Set the responder (our side) address type based on
4165 		 * the advertising address type.
4166 		 */
4167 		conn->resp_addr_type = hdev->adv_addr_type;
4168 		if (hdev->adv_addr_type == ADDR_LE_DEV_RANDOM)
4169 			bacpy(&conn->resp_addr, &hdev->random_addr);
4170 		else
4171 			bacpy(&conn->resp_addr, &hdev->bdaddr);
4172 
4173 		conn->init_addr_type = ev->bdaddr_type;
4174 		bacpy(&conn->init_addr, &ev->bdaddr);
4175 
4176 		/* For incoming connections, set the default minimum
4177 		 * and maximum connection interval. They will be used
4178 		 * to check if the parameters are in range and if not
4179 		 * trigger the connection update procedure.
4180 		 */
4181 		conn->le_conn_min_interval = hdev->le_conn_min_interval;
4182 		conn->le_conn_max_interval = hdev->le_conn_max_interval;
4183 	}
4184 
4185 	/* Lookup the identity address from the stored connection
4186 	 * address and address type.
4187 	 *
4188 	 * When establishing connections to an identity address, the
4189 	 * connection procedure will store the resolvable random
4190 	 * address first. Now if it can be converted back into the
4191 	 * identity address, start using the identity address from
4192 	 * now on.
4193 	 */
4194 	irk = hci_get_irk(hdev, &conn->dst, conn->dst_type);
4195 	if (irk) {
4196 		bacpy(&conn->dst, &irk->bdaddr);
4197 		conn->dst_type = irk->addr_type;
4198 	}
4199 
4200 	if (ev->status) {
4201 		hci_le_conn_failed(conn, ev->status);
4202 		goto unlock;
4203 	}
4204 
4205 	if (conn->dst_type == ADDR_LE_DEV_PUBLIC)
4206 		addr_type = BDADDR_LE_PUBLIC;
4207 	else
4208 		addr_type = BDADDR_LE_RANDOM;
4209 
4210 	/* Drop the connection if the device is blocked */
4211 	if (hci_bdaddr_list_lookup(&hdev->blacklist, &conn->dst, addr_type)) {
4212 		hci_conn_drop(conn);
4213 		goto unlock;
4214 	}
4215 
4216 	if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags))
4217 		mgmt_device_connected(hdev, &conn->dst, conn->type,
4218 				      conn->dst_type, 0, NULL, 0, NULL);
4219 
4220 	conn->sec_level = BT_SECURITY_LOW;
4221 	conn->handle = __le16_to_cpu(ev->handle);
4222 	conn->state = BT_CONNECTED;
4223 
4224 	conn->le_conn_interval = le16_to_cpu(ev->interval);
4225 	conn->le_conn_latency = le16_to_cpu(ev->latency);
4226 	conn->le_supv_timeout = le16_to_cpu(ev->supervision_timeout);
4227 
4228 	hci_conn_add_sysfs(conn);
4229 
4230 	hci_proto_connect_cfm(conn, ev->status);
4231 
4232 	params = hci_pend_le_action_lookup(&hdev->pend_le_conns, &conn->dst,
4233 					   conn->dst_type);
4234 	if (params) {
4235 		list_del_init(&params->action);
4236 		if (params->conn) {
4237 			hci_conn_drop(params->conn);
4238 			hci_conn_put(params->conn);
4239 			params->conn = NULL;
4240 		}
4241 	}
4242 
4243 unlock:
4244 	hci_update_background_scan(hdev);
4245 	hci_dev_unlock(hdev);
4246 }
4247 
4248 static void hci_le_conn_update_complete_evt(struct hci_dev *hdev,
4249 					    struct sk_buff *skb)
4250 {
4251 	struct hci_ev_le_conn_update_complete *ev = (void *) skb->data;
4252 	struct hci_conn *conn;
4253 
4254 	BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
4255 
4256 	if (ev->status)
4257 		return;
4258 
4259 	hci_dev_lock(hdev);
4260 
4261 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
4262 	if (conn) {
4263 		conn->le_conn_interval = le16_to_cpu(ev->interval);
4264 		conn->le_conn_latency = le16_to_cpu(ev->latency);
4265 		conn->le_supv_timeout = le16_to_cpu(ev->supervision_timeout);
4266 	}
4267 
4268 	hci_dev_unlock(hdev);
4269 }
4270 
4271 /* This function requires the caller holds hdev->lock */
4272 static void check_pending_le_conn(struct hci_dev *hdev, bdaddr_t *addr,
4273 				  u8 addr_type, u8 adv_type)
4274 {
4275 	struct hci_conn *conn;
4276 	struct hci_conn_params *params;
4277 
4278 	/* If the event is not connectable don't proceed further */
4279 	if (adv_type != LE_ADV_IND && adv_type != LE_ADV_DIRECT_IND)
4280 		return;
4281 
4282 	/* Ignore if the device is blocked */
4283 	if (hci_bdaddr_list_lookup(&hdev->blacklist, addr, addr_type))
4284 		return;
4285 
4286 	/* Most controller will fail if we try to create new connections
4287 	 * while we have an existing one in slave role.
4288 	 */
4289 	if (hdev->conn_hash.le_num_slave > 0)
4290 		return;
4291 
4292 	/* If we're not connectable only connect devices that we have in
4293 	 * our pend_le_conns list.
4294 	 */
4295 	params = hci_pend_le_action_lookup(&hdev->pend_le_conns,
4296 					   addr, addr_type);
4297 	if (!params)
4298 		return;
4299 
4300 	switch (params->auto_connect) {
4301 	case HCI_AUTO_CONN_DIRECT:
4302 		/* Only devices advertising with ADV_DIRECT_IND are
4303 		 * triggering a connection attempt. This is allowing
4304 		 * incoming connections from slave devices.
4305 		 */
4306 		if (adv_type != LE_ADV_DIRECT_IND)
4307 			return;
4308 		break;
4309 	case HCI_AUTO_CONN_ALWAYS:
4310 		/* Devices advertising with ADV_IND or ADV_DIRECT_IND
4311 		 * are triggering a connection attempt. This means
4312 		 * that incoming connectioms from slave device are
4313 		 * accepted and also outgoing connections to slave
4314 		 * devices are established when found.
4315 		 */
4316 		break;
4317 	default:
4318 		return;
4319 	}
4320 
4321 	conn = hci_connect_le(hdev, addr, addr_type, BT_SECURITY_LOW,
4322 			      HCI_LE_AUTOCONN_TIMEOUT, HCI_ROLE_MASTER);
4323 	if (!IS_ERR(conn)) {
4324 		/* Store the pointer since we don't really have any
4325 		 * other owner of the object besides the params that
4326 		 * triggered it. This way we can abort the connection if
4327 		 * the parameters get removed and keep the reference
4328 		 * count consistent once the connection is established.
4329 		 */
4330 		params->conn = hci_conn_get(conn);
4331 		return;
4332 	}
4333 
4334 	switch (PTR_ERR(conn)) {
4335 	case -EBUSY:
4336 		/* If hci_connect() returns -EBUSY it means there is already
4337 		 * an LE connection attempt going on. Since controllers don't
4338 		 * support more than one connection attempt at the time, we
4339 		 * don't consider this an error case.
4340 		 */
4341 		break;
4342 	default:
4343 		BT_DBG("Failed to connect: err %ld", PTR_ERR(conn));
4344 	}
4345 }
4346 
4347 static void process_adv_report(struct hci_dev *hdev, u8 type, bdaddr_t *bdaddr,
4348 			       u8 bdaddr_type, s8 rssi, u8 *data, u8 len)
4349 {
4350 	struct discovery_state *d = &hdev->discovery;
4351 	struct smp_irk *irk;
4352 	bool match;
4353 	u32 flags;
4354 
4355 	/* Check if we need to convert to identity address */
4356 	irk = hci_get_irk(hdev, bdaddr, bdaddr_type);
4357 	if (irk) {
4358 		bdaddr = &irk->bdaddr;
4359 		bdaddr_type = irk->addr_type;
4360 	}
4361 
4362 	/* Check if we have been requested to connect to this device */
4363 	check_pending_le_conn(hdev, bdaddr, bdaddr_type, type);
4364 
4365 	/* Passive scanning shouldn't trigger any device found events,
4366 	 * except for devices marked as CONN_REPORT for which we do send
4367 	 * device found events.
4368 	 */
4369 	if (hdev->le_scan_type == LE_SCAN_PASSIVE) {
4370 		if (type == LE_ADV_DIRECT_IND)
4371 			return;
4372 
4373 		if (!hci_pend_le_action_lookup(&hdev->pend_le_reports,
4374 					       bdaddr, bdaddr_type))
4375 			return;
4376 
4377 		if (type == LE_ADV_NONCONN_IND || type == LE_ADV_SCAN_IND)
4378 			flags = MGMT_DEV_FOUND_NOT_CONNECTABLE;
4379 		else
4380 			flags = 0;
4381 		mgmt_device_found(hdev, bdaddr, LE_LINK, bdaddr_type, NULL,
4382 				  rssi, flags, data, len, NULL, 0);
4383 		return;
4384 	}
4385 
4386 	/* When receiving non-connectable or scannable undirected
4387 	 * advertising reports, this means that the remote device is
4388 	 * not connectable and then clearly indicate this in the
4389 	 * device found event.
4390 	 *
4391 	 * When receiving a scan response, then there is no way to
4392 	 * know if the remote device is connectable or not. However
4393 	 * since scan responses are merged with a previously seen
4394 	 * advertising report, the flags field from that report
4395 	 * will be used.
4396 	 *
4397 	 * In the really unlikely case that a controller get confused
4398 	 * and just sends a scan response event, then it is marked as
4399 	 * not connectable as well.
4400 	 */
4401 	if (type == LE_ADV_NONCONN_IND || type == LE_ADV_SCAN_IND ||
4402 	    type == LE_ADV_SCAN_RSP)
4403 		flags = MGMT_DEV_FOUND_NOT_CONNECTABLE;
4404 	else
4405 		flags = 0;
4406 
4407 	/* If there's nothing pending either store the data from this
4408 	 * event or send an immediate device found event if the data
4409 	 * should not be stored for later.
4410 	 */
4411 	if (!has_pending_adv_report(hdev)) {
4412 		/* If the report will trigger a SCAN_REQ store it for
4413 		 * later merging.
4414 		 */
4415 		if (type == LE_ADV_IND || type == LE_ADV_SCAN_IND) {
4416 			store_pending_adv_report(hdev, bdaddr, bdaddr_type,
4417 						 rssi, flags, data, len);
4418 			return;
4419 		}
4420 
4421 		mgmt_device_found(hdev, bdaddr, LE_LINK, bdaddr_type, NULL,
4422 				  rssi, flags, data, len, NULL, 0);
4423 		return;
4424 	}
4425 
4426 	/* Check if the pending report is for the same device as the new one */
4427 	match = (!bacmp(bdaddr, &d->last_adv_addr) &&
4428 		 bdaddr_type == d->last_adv_addr_type);
4429 
4430 	/* If the pending data doesn't match this report or this isn't a
4431 	 * scan response (e.g. we got a duplicate ADV_IND) then force
4432 	 * sending of the pending data.
4433 	 */
4434 	if (type != LE_ADV_SCAN_RSP || !match) {
4435 		/* Send out whatever is in the cache, but skip duplicates */
4436 		if (!match)
4437 			mgmt_device_found(hdev, &d->last_adv_addr, LE_LINK,
4438 					  d->last_adv_addr_type, NULL,
4439 					  d->last_adv_rssi, d->last_adv_flags,
4440 					  d->last_adv_data,
4441 					  d->last_adv_data_len, NULL, 0);
4442 
4443 		/* If the new report will trigger a SCAN_REQ store it for
4444 		 * later merging.
4445 		 */
4446 		if (type == LE_ADV_IND || type == LE_ADV_SCAN_IND) {
4447 			store_pending_adv_report(hdev, bdaddr, bdaddr_type,
4448 						 rssi, flags, data, len);
4449 			return;
4450 		}
4451 
4452 		/* The advertising reports cannot be merged, so clear
4453 		 * the pending report and send out a device found event.
4454 		 */
4455 		clear_pending_adv_report(hdev);
4456 		mgmt_device_found(hdev, bdaddr, LE_LINK, bdaddr_type, NULL,
4457 				  rssi, flags, data, len, NULL, 0);
4458 		return;
4459 	}
4460 
4461 	/* If we get here we've got a pending ADV_IND or ADV_SCAN_IND and
4462 	 * the new event is a SCAN_RSP. We can therefore proceed with
4463 	 * sending a merged device found event.
4464 	 */
4465 	mgmt_device_found(hdev, &d->last_adv_addr, LE_LINK,
4466 			  d->last_adv_addr_type, NULL, rssi, d->last_adv_flags,
4467 			  d->last_adv_data, d->last_adv_data_len, data, len);
4468 	clear_pending_adv_report(hdev);
4469 }
4470 
4471 static void hci_le_adv_report_evt(struct hci_dev *hdev, struct sk_buff *skb)
4472 {
4473 	u8 num_reports = skb->data[0];
4474 	void *ptr = &skb->data[1];
4475 
4476 	hci_dev_lock(hdev);
4477 
4478 	while (num_reports--) {
4479 		struct hci_ev_le_advertising_info *ev = ptr;
4480 		s8 rssi;
4481 
4482 		rssi = ev->data[ev->length];
4483 		process_adv_report(hdev, ev->evt_type, &ev->bdaddr,
4484 				   ev->bdaddr_type, rssi, ev->data, ev->length);
4485 
4486 		ptr += sizeof(*ev) + ev->length + 1;
4487 	}
4488 
4489 	hci_dev_unlock(hdev);
4490 }
4491 
4492 static void hci_le_ltk_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
4493 {
4494 	struct hci_ev_le_ltk_req *ev = (void *) skb->data;
4495 	struct hci_cp_le_ltk_reply cp;
4496 	struct hci_cp_le_ltk_neg_reply neg;
4497 	struct hci_conn *conn;
4498 	struct smp_ltk *ltk;
4499 
4500 	BT_DBG("%s handle 0x%4.4x", hdev->name, __le16_to_cpu(ev->handle));
4501 
4502 	hci_dev_lock(hdev);
4503 
4504 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
4505 	if (conn == NULL)
4506 		goto not_found;
4507 
4508 	ltk = hci_find_ltk(hdev, ev->ediv, ev->rand, conn->role);
4509 	if (ltk == NULL)
4510 		goto not_found;
4511 
4512 	memcpy(cp.ltk, ltk->val, sizeof(ltk->val));
4513 	cp.handle = cpu_to_le16(conn->handle);
4514 
4515 	conn->pending_sec_level = smp_ltk_sec_level(ltk);
4516 
4517 	conn->enc_key_size = ltk->enc_size;
4518 
4519 	hci_send_cmd(hdev, HCI_OP_LE_LTK_REPLY, sizeof(cp), &cp);
4520 
4521 	/* Ref. Bluetooth Core SPEC pages 1975 and 2004. STK is a
4522 	 * temporary key used to encrypt a connection following
4523 	 * pairing. It is used during the Encrypted Session Setup to
4524 	 * distribute the keys. Later, security can be re-established
4525 	 * using a distributed LTK.
4526 	 */
4527 	if (ltk->type == SMP_STK) {
4528 		set_bit(HCI_CONN_STK_ENCRYPT, &conn->flags);
4529 		list_del(&ltk->list);
4530 		kfree(ltk);
4531 	} else {
4532 		clear_bit(HCI_CONN_STK_ENCRYPT, &conn->flags);
4533 	}
4534 
4535 	hci_dev_unlock(hdev);
4536 
4537 	return;
4538 
4539 not_found:
4540 	neg.handle = ev->handle;
4541 	hci_send_cmd(hdev, HCI_OP_LE_LTK_NEG_REPLY, sizeof(neg), &neg);
4542 	hci_dev_unlock(hdev);
4543 }
4544 
4545 static void send_conn_param_neg_reply(struct hci_dev *hdev, u16 handle,
4546 				      u8 reason)
4547 {
4548 	struct hci_cp_le_conn_param_req_neg_reply cp;
4549 
4550 	cp.handle = cpu_to_le16(handle);
4551 	cp.reason = reason;
4552 
4553 	hci_send_cmd(hdev, HCI_OP_LE_CONN_PARAM_REQ_NEG_REPLY, sizeof(cp),
4554 		     &cp);
4555 }
4556 
4557 static void hci_le_remote_conn_param_req_evt(struct hci_dev *hdev,
4558 					     struct sk_buff *skb)
4559 {
4560 	struct hci_ev_le_remote_conn_param_req *ev = (void *) skb->data;
4561 	struct hci_cp_le_conn_param_req_reply cp;
4562 	struct hci_conn *hcon;
4563 	u16 handle, min, max, latency, timeout;
4564 
4565 	handle = le16_to_cpu(ev->handle);
4566 	min = le16_to_cpu(ev->interval_min);
4567 	max = le16_to_cpu(ev->interval_max);
4568 	latency = le16_to_cpu(ev->latency);
4569 	timeout = le16_to_cpu(ev->timeout);
4570 
4571 	hcon = hci_conn_hash_lookup_handle(hdev, handle);
4572 	if (!hcon || hcon->state != BT_CONNECTED)
4573 		return send_conn_param_neg_reply(hdev, handle,
4574 						 HCI_ERROR_UNKNOWN_CONN_ID);
4575 
4576 	if (hci_check_conn_params(min, max, latency, timeout))
4577 		return send_conn_param_neg_reply(hdev, handle,
4578 						 HCI_ERROR_INVALID_LL_PARAMS);
4579 
4580 	if (hcon->role == HCI_ROLE_MASTER) {
4581 		struct hci_conn_params *params;
4582 		u8 store_hint;
4583 
4584 		hci_dev_lock(hdev);
4585 
4586 		params = hci_conn_params_lookup(hdev, &hcon->dst,
4587 						hcon->dst_type);
4588 		if (params) {
4589 			params->conn_min_interval = min;
4590 			params->conn_max_interval = max;
4591 			params->conn_latency = latency;
4592 			params->supervision_timeout = timeout;
4593 			store_hint = 0x01;
4594 		} else{
4595 			store_hint = 0x00;
4596 		}
4597 
4598 		hci_dev_unlock(hdev);
4599 
4600 		mgmt_new_conn_param(hdev, &hcon->dst, hcon->dst_type,
4601 				    store_hint, min, max, latency, timeout);
4602 	}
4603 
4604 	cp.handle = ev->handle;
4605 	cp.interval_min = ev->interval_min;
4606 	cp.interval_max = ev->interval_max;
4607 	cp.latency = ev->latency;
4608 	cp.timeout = ev->timeout;
4609 	cp.min_ce_len = 0;
4610 	cp.max_ce_len = 0;
4611 
4612 	hci_send_cmd(hdev, HCI_OP_LE_CONN_PARAM_REQ_REPLY, sizeof(cp), &cp);
4613 }
4614 
4615 static void hci_le_meta_evt(struct hci_dev *hdev, struct sk_buff *skb)
4616 {
4617 	struct hci_ev_le_meta *le_ev = (void *) skb->data;
4618 
4619 	skb_pull(skb, sizeof(*le_ev));
4620 
4621 	switch (le_ev->subevent) {
4622 	case HCI_EV_LE_CONN_COMPLETE:
4623 		hci_le_conn_complete_evt(hdev, skb);
4624 		break;
4625 
4626 	case HCI_EV_LE_CONN_UPDATE_COMPLETE:
4627 		hci_le_conn_update_complete_evt(hdev, skb);
4628 		break;
4629 
4630 	case HCI_EV_LE_ADVERTISING_REPORT:
4631 		hci_le_adv_report_evt(hdev, skb);
4632 		break;
4633 
4634 	case HCI_EV_LE_LTK_REQ:
4635 		hci_le_ltk_request_evt(hdev, skb);
4636 		break;
4637 
4638 	case HCI_EV_LE_REMOTE_CONN_PARAM_REQ:
4639 		hci_le_remote_conn_param_req_evt(hdev, skb);
4640 		break;
4641 
4642 	default:
4643 		break;
4644 	}
4645 }
4646 
4647 static void hci_chan_selected_evt(struct hci_dev *hdev, struct sk_buff *skb)
4648 {
4649 	struct hci_ev_channel_selected *ev = (void *) skb->data;
4650 	struct hci_conn *hcon;
4651 
4652 	BT_DBG("%s handle 0x%2.2x", hdev->name, ev->phy_handle);
4653 
4654 	skb_pull(skb, sizeof(*ev));
4655 
4656 	hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle);
4657 	if (!hcon)
4658 		return;
4659 
4660 	amp_read_loc_assoc_final_data(hdev, hcon);
4661 }
4662 
4663 void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb)
4664 {
4665 	struct hci_event_hdr *hdr = (void *) skb->data;
4666 	__u8 event = hdr->evt;
4667 
4668 	hci_dev_lock(hdev);
4669 
4670 	/* Received events are (currently) only needed when a request is
4671 	 * ongoing so avoid unnecessary memory allocation.
4672 	 */
4673 	if (hci_req_pending(hdev)) {
4674 		kfree_skb(hdev->recv_evt);
4675 		hdev->recv_evt = skb_clone(skb, GFP_KERNEL);
4676 	}
4677 
4678 	hci_dev_unlock(hdev);
4679 
4680 	skb_pull(skb, HCI_EVENT_HDR_SIZE);
4681 
4682 	if (hdev->sent_cmd && bt_cb(hdev->sent_cmd)->req.event == event) {
4683 		struct hci_command_hdr *cmd_hdr = (void *) hdev->sent_cmd->data;
4684 		u16 opcode = __le16_to_cpu(cmd_hdr->opcode);
4685 
4686 		hci_req_cmd_complete(hdev, opcode, 0);
4687 	}
4688 
4689 	switch (event) {
4690 	case HCI_EV_INQUIRY_COMPLETE:
4691 		hci_inquiry_complete_evt(hdev, skb);
4692 		break;
4693 
4694 	case HCI_EV_INQUIRY_RESULT:
4695 		hci_inquiry_result_evt(hdev, skb);
4696 		break;
4697 
4698 	case HCI_EV_CONN_COMPLETE:
4699 		hci_conn_complete_evt(hdev, skb);
4700 		break;
4701 
4702 	case HCI_EV_CONN_REQUEST:
4703 		hci_conn_request_evt(hdev, skb);
4704 		break;
4705 
4706 	case HCI_EV_DISCONN_COMPLETE:
4707 		hci_disconn_complete_evt(hdev, skb);
4708 		break;
4709 
4710 	case HCI_EV_AUTH_COMPLETE:
4711 		hci_auth_complete_evt(hdev, skb);
4712 		break;
4713 
4714 	case HCI_EV_REMOTE_NAME:
4715 		hci_remote_name_evt(hdev, skb);
4716 		break;
4717 
4718 	case HCI_EV_ENCRYPT_CHANGE:
4719 		hci_encrypt_change_evt(hdev, skb);
4720 		break;
4721 
4722 	case HCI_EV_CHANGE_LINK_KEY_COMPLETE:
4723 		hci_change_link_key_complete_evt(hdev, skb);
4724 		break;
4725 
4726 	case HCI_EV_REMOTE_FEATURES:
4727 		hci_remote_features_evt(hdev, skb);
4728 		break;
4729 
4730 	case HCI_EV_CMD_COMPLETE:
4731 		hci_cmd_complete_evt(hdev, skb);
4732 		break;
4733 
4734 	case HCI_EV_CMD_STATUS:
4735 		hci_cmd_status_evt(hdev, skb);
4736 		break;
4737 
4738 	case HCI_EV_ROLE_CHANGE:
4739 		hci_role_change_evt(hdev, skb);
4740 		break;
4741 
4742 	case HCI_EV_NUM_COMP_PKTS:
4743 		hci_num_comp_pkts_evt(hdev, skb);
4744 		break;
4745 
4746 	case HCI_EV_MODE_CHANGE:
4747 		hci_mode_change_evt(hdev, skb);
4748 		break;
4749 
4750 	case HCI_EV_PIN_CODE_REQ:
4751 		hci_pin_code_request_evt(hdev, skb);
4752 		break;
4753 
4754 	case HCI_EV_LINK_KEY_REQ:
4755 		hci_link_key_request_evt(hdev, skb);
4756 		break;
4757 
4758 	case HCI_EV_LINK_KEY_NOTIFY:
4759 		hci_link_key_notify_evt(hdev, skb);
4760 		break;
4761 
4762 	case HCI_EV_CLOCK_OFFSET:
4763 		hci_clock_offset_evt(hdev, skb);
4764 		break;
4765 
4766 	case HCI_EV_PKT_TYPE_CHANGE:
4767 		hci_pkt_type_change_evt(hdev, skb);
4768 		break;
4769 
4770 	case HCI_EV_PSCAN_REP_MODE:
4771 		hci_pscan_rep_mode_evt(hdev, skb);
4772 		break;
4773 
4774 	case HCI_EV_INQUIRY_RESULT_WITH_RSSI:
4775 		hci_inquiry_result_with_rssi_evt(hdev, skb);
4776 		break;
4777 
4778 	case HCI_EV_REMOTE_EXT_FEATURES:
4779 		hci_remote_ext_features_evt(hdev, skb);
4780 		break;
4781 
4782 	case HCI_EV_SYNC_CONN_COMPLETE:
4783 		hci_sync_conn_complete_evt(hdev, skb);
4784 		break;
4785 
4786 	case HCI_EV_EXTENDED_INQUIRY_RESULT:
4787 		hci_extended_inquiry_result_evt(hdev, skb);
4788 		break;
4789 
4790 	case HCI_EV_KEY_REFRESH_COMPLETE:
4791 		hci_key_refresh_complete_evt(hdev, skb);
4792 		break;
4793 
4794 	case HCI_EV_IO_CAPA_REQUEST:
4795 		hci_io_capa_request_evt(hdev, skb);
4796 		break;
4797 
4798 	case HCI_EV_IO_CAPA_REPLY:
4799 		hci_io_capa_reply_evt(hdev, skb);
4800 		break;
4801 
4802 	case HCI_EV_USER_CONFIRM_REQUEST:
4803 		hci_user_confirm_request_evt(hdev, skb);
4804 		break;
4805 
4806 	case HCI_EV_USER_PASSKEY_REQUEST:
4807 		hci_user_passkey_request_evt(hdev, skb);
4808 		break;
4809 
4810 	case HCI_EV_USER_PASSKEY_NOTIFY:
4811 		hci_user_passkey_notify_evt(hdev, skb);
4812 		break;
4813 
4814 	case HCI_EV_KEYPRESS_NOTIFY:
4815 		hci_keypress_notify_evt(hdev, skb);
4816 		break;
4817 
4818 	case HCI_EV_SIMPLE_PAIR_COMPLETE:
4819 		hci_simple_pair_complete_evt(hdev, skb);
4820 		break;
4821 
4822 	case HCI_EV_REMOTE_HOST_FEATURES:
4823 		hci_remote_host_features_evt(hdev, skb);
4824 		break;
4825 
4826 	case HCI_EV_LE_META:
4827 		hci_le_meta_evt(hdev, skb);
4828 		break;
4829 
4830 	case HCI_EV_CHANNEL_SELECTED:
4831 		hci_chan_selected_evt(hdev, skb);
4832 		break;
4833 
4834 	case HCI_EV_REMOTE_OOB_DATA_REQUEST:
4835 		hci_remote_oob_data_request_evt(hdev, skb);
4836 		break;
4837 
4838 	case HCI_EV_PHY_LINK_COMPLETE:
4839 		hci_phy_link_complete_evt(hdev, skb);
4840 		break;
4841 
4842 	case HCI_EV_LOGICAL_LINK_COMPLETE:
4843 		hci_loglink_complete_evt(hdev, skb);
4844 		break;
4845 
4846 	case HCI_EV_DISCONN_LOGICAL_LINK_COMPLETE:
4847 		hci_disconn_loglink_complete_evt(hdev, skb);
4848 		break;
4849 
4850 	case HCI_EV_DISCONN_PHY_LINK_COMPLETE:
4851 		hci_disconn_phylink_complete_evt(hdev, skb);
4852 		break;
4853 
4854 	case HCI_EV_NUM_COMP_BLOCKS:
4855 		hci_num_comp_blocks_evt(hdev, skb);
4856 		break;
4857 
4858 	default:
4859 		BT_DBG("%s event 0x%2.2x", hdev->name, event);
4860 		break;
4861 	}
4862 
4863 	kfree_skb(skb);
4864 	hdev->stat.evt_rx++;
4865 }
4866