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