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