xref: /linux/net/bluetooth/hci_event.c (revision 12871a0bd67dd4db4418e1daafcd46e9d329ef10)
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 <linux/module.h>
28 
29 #include <linux/types.h>
30 #include <linux/errno.h>
31 #include <linux/kernel.h>
32 #include <linux/slab.h>
33 #include <linux/poll.h>
34 #include <linux/fcntl.h>
35 #include <linux/init.h>
36 #include <linux/skbuff.h>
37 #include <linux/interrupt.h>
38 #include <linux/notifier.h>
39 #include <net/sock.h>
40 
41 #include <asm/system.h>
42 #include <linux/uaccess.h>
43 #include <asm/unaligned.h>
44 
45 #include <net/bluetooth/bluetooth.h>
46 #include <net/bluetooth/hci_core.h>
47 
48 /* Handle HCI Event packets */
49 
50 static void hci_cc_inquiry_cancel(struct hci_dev *hdev, struct sk_buff *skb)
51 {
52 	__u8 status = *((__u8 *) skb->data);
53 
54 	BT_DBG("%s status 0x%x", hdev->name, status);
55 
56 	if (status)
57 		return;
58 
59 	if (test_bit(HCI_MGMT, &hdev->flags) &&
60 				test_and_clear_bit(HCI_INQUIRY, &hdev->flags))
61 		mgmt_discovering(hdev->id, 0);
62 
63 	hci_req_complete(hdev, HCI_OP_INQUIRY_CANCEL, status);
64 
65 	hci_conn_check_pending(hdev);
66 }
67 
68 static void hci_cc_exit_periodic_inq(struct hci_dev *hdev, struct sk_buff *skb)
69 {
70 	__u8 status = *((__u8 *) skb->data);
71 
72 	BT_DBG("%s status 0x%x", hdev->name, status);
73 
74 	if (status)
75 		return;
76 
77 	if (test_bit(HCI_MGMT, &hdev->flags) &&
78 				test_and_clear_bit(HCI_INQUIRY, &hdev->flags))
79 		mgmt_discovering(hdev->id, 0);
80 
81 	hci_conn_check_pending(hdev);
82 }
83 
84 static void hci_cc_remote_name_req_cancel(struct hci_dev *hdev, struct sk_buff *skb)
85 {
86 	BT_DBG("%s", hdev->name);
87 }
88 
89 static void hci_cc_role_discovery(struct hci_dev *hdev, struct sk_buff *skb)
90 {
91 	struct hci_rp_role_discovery *rp = (void *) skb->data;
92 	struct hci_conn *conn;
93 
94 	BT_DBG("%s status 0x%x", hdev->name, rp->status);
95 
96 	if (rp->status)
97 		return;
98 
99 	hci_dev_lock(hdev);
100 
101 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
102 	if (conn) {
103 		if (rp->role)
104 			conn->link_mode &= ~HCI_LM_MASTER;
105 		else
106 			conn->link_mode |= HCI_LM_MASTER;
107 	}
108 
109 	hci_dev_unlock(hdev);
110 }
111 
112 static void hci_cc_read_link_policy(struct hci_dev *hdev, struct sk_buff *skb)
113 {
114 	struct hci_rp_read_link_policy *rp = (void *) skb->data;
115 	struct hci_conn *conn;
116 
117 	BT_DBG("%s status 0x%x", hdev->name, rp->status);
118 
119 	if (rp->status)
120 		return;
121 
122 	hci_dev_lock(hdev);
123 
124 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
125 	if (conn)
126 		conn->link_policy = __le16_to_cpu(rp->policy);
127 
128 	hci_dev_unlock(hdev);
129 }
130 
131 static void hci_cc_write_link_policy(struct hci_dev *hdev, struct sk_buff *skb)
132 {
133 	struct hci_rp_write_link_policy *rp = (void *) skb->data;
134 	struct hci_conn *conn;
135 	void *sent;
136 
137 	BT_DBG("%s status 0x%x", hdev->name, rp->status);
138 
139 	if (rp->status)
140 		return;
141 
142 	sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_LINK_POLICY);
143 	if (!sent)
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 = get_unaligned_le16(sent + 2);
151 
152 	hci_dev_unlock(hdev);
153 }
154 
155 static void hci_cc_read_def_link_policy(struct hci_dev *hdev, struct sk_buff *skb)
156 {
157 	struct hci_rp_read_def_link_policy *rp = (void *) skb->data;
158 
159 	BT_DBG("%s status 0x%x", hdev->name, rp->status);
160 
161 	if (rp->status)
162 		return;
163 
164 	hdev->link_policy = __le16_to_cpu(rp->policy);
165 }
166 
167 static void hci_cc_write_def_link_policy(struct hci_dev *hdev, struct sk_buff *skb)
168 {
169 	__u8 status = *((__u8 *) skb->data);
170 	void *sent;
171 
172 	BT_DBG("%s status 0x%x", hdev->name, status);
173 
174 	sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_DEF_LINK_POLICY);
175 	if (!sent)
176 		return;
177 
178 	if (!status)
179 		hdev->link_policy = get_unaligned_le16(sent);
180 
181 	hci_req_complete(hdev, HCI_OP_WRITE_DEF_LINK_POLICY, status);
182 }
183 
184 static void hci_cc_reset(struct hci_dev *hdev, struct sk_buff *skb)
185 {
186 	__u8 status = *((__u8 *) skb->data);
187 
188 	BT_DBG("%s status 0x%x", hdev->name, status);
189 
190 	clear_bit(HCI_RESET, &hdev->flags);
191 
192 	hci_req_complete(hdev, HCI_OP_RESET, status);
193 }
194 
195 static void hci_cc_write_local_name(struct hci_dev *hdev, struct sk_buff *skb)
196 {
197 	__u8 status = *((__u8 *) skb->data);
198 	void *sent;
199 
200 	BT_DBG("%s status 0x%x", hdev->name, status);
201 
202 	sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_LOCAL_NAME);
203 	if (!sent)
204 		return;
205 
206 	if (test_bit(HCI_MGMT, &hdev->flags))
207 		mgmt_set_local_name_complete(hdev->id, sent, status);
208 
209 	if (status)
210 		return;
211 
212 	memcpy(hdev->dev_name, sent, HCI_MAX_NAME_LENGTH);
213 }
214 
215 static void hci_cc_read_local_name(struct hci_dev *hdev, struct sk_buff *skb)
216 {
217 	struct hci_rp_read_local_name *rp = (void *) skb->data;
218 
219 	BT_DBG("%s status 0x%x", hdev->name, rp->status);
220 
221 	if (rp->status)
222 		return;
223 
224 	memcpy(hdev->dev_name, rp->name, HCI_MAX_NAME_LENGTH);
225 }
226 
227 static void hci_cc_write_auth_enable(struct hci_dev *hdev, struct sk_buff *skb)
228 {
229 	__u8 status = *((__u8 *) skb->data);
230 	void *sent;
231 
232 	BT_DBG("%s status 0x%x", hdev->name, status);
233 
234 	sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_AUTH_ENABLE);
235 	if (!sent)
236 		return;
237 
238 	if (!status) {
239 		__u8 param = *((__u8 *) sent);
240 
241 		if (param == AUTH_ENABLED)
242 			set_bit(HCI_AUTH, &hdev->flags);
243 		else
244 			clear_bit(HCI_AUTH, &hdev->flags);
245 	}
246 
247 	hci_req_complete(hdev, HCI_OP_WRITE_AUTH_ENABLE, status);
248 }
249 
250 static void hci_cc_write_encrypt_mode(struct hci_dev *hdev, struct sk_buff *skb)
251 {
252 	__u8 status = *((__u8 *) skb->data);
253 	void *sent;
254 
255 	BT_DBG("%s status 0x%x", hdev->name, status);
256 
257 	sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_ENCRYPT_MODE);
258 	if (!sent)
259 		return;
260 
261 	if (!status) {
262 		__u8 param = *((__u8 *) sent);
263 
264 		if (param)
265 			set_bit(HCI_ENCRYPT, &hdev->flags);
266 		else
267 			clear_bit(HCI_ENCRYPT, &hdev->flags);
268 	}
269 
270 	hci_req_complete(hdev, HCI_OP_WRITE_ENCRYPT_MODE, status);
271 }
272 
273 static void hci_cc_write_scan_enable(struct hci_dev *hdev, struct sk_buff *skb)
274 {
275 	__u8 status = *((__u8 *) skb->data);
276 	void *sent;
277 
278 	BT_DBG("%s status 0x%x", hdev->name, status);
279 
280 	sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_SCAN_ENABLE);
281 	if (!sent)
282 		return;
283 
284 	if (!status) {
285 		__u8 param = *((__u8 *) sent);
286 		int old_pscan, old_iscan;
287 
288 		old_pscan = test_and_clear_bit(HCI_PSCAN, &hdev->flags);
289 		old_iscan = test_and_clear_bit(HCI_ISCAN, &hdev->flags);
290 
291 		if (param & SCAN_INQUIRY) {
292 			set_bit(HCI_ISCAN, &hdev->flags);
293 			if (!old_iscan)
294 				mgmt_discoverable(hdev->id, 1);
295 		} else if (old_iscan)
296 			mgmt_discoverable(hdev->id, 0);
297 
298 		if (param & SCAN_PAGE) {
299 			set_bit(HCI_PSCAN, &hdev->flags);
300 			if (!old_pscan)
301 				mgmt_connectable(hdev->id, 1);
302 		} else if (old_pscan)
303 			mgmt_connectable(hdev->id, 0);
304 	}
305 
306 	hci_req_complete(hdev, HCI_OP_WRITE_SCAN_ENABLE, status);
307 }
308 
309 static void hci_cc_read_class_of_dev(struct hci_dev *hdev, struct sk_buff *skb)
310 {
311 	struct hci_rp_read_class_of_dev *rp = (void *) skb->data;
312 
313 	BT_DBG("%s status 0x%x", hdev->name, rp->status);
314 
315 	if (rp->status)
316 		return;
317 
318 	memcpy(hdev->dev_class, rp->dev_class, 3);
319 
320 	BT_DBG("%s class 0x%.2x%.2x%.2x", hdev->name,
321 		hdev->dev_class[2], hdev->dev_class[1], hdev->dev_class[0]);
322 }
323 
324 static void hci_cc_write_class_of_dev(struct hci_dev *hdev, struct sk_buff *skb)
325 {
326 	__u8 status = *((__u8 *) skb->data);
327 	void *sent;
328 
329 	BT_DBG("%s status 0x%x", hdev->name, status);
330 
331 	if (status)
332 		return;
333 
334 	sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_CLASS_OF_DEV);
335 	if (!sent)
336 		return;
337 
338 	memcpy(hdev->dev_class, sent, 3);
339 }
340 
341 static void hci_cc_read_voice_setting(struct hci_dev *hdev, struct sk_buff *skb)
342 {
343 	struct hci_rp_read_voice_setting *rp = (void *) skb->data;
344 	__u16 setting;
345 
346 	BT_DBG("%s status 0x%x", hdev->name, rp->status);
347 
348 	if (rp->status)
349 		return;
350 
351 	setting = __le16_to_cpu(rp->voice_setting);
352 
353 	if (hdev->voice_setting == setting)
354 		return;
355 
356 	hdev->voice_setting = setting;
357 
358 	BT_DBG("%s voice setting 0x%04x", hdev->name, setting);
359 
360 	if (hdev->notify) {
361 		tasklet_disable(&hdev->tx_task);
362 		hdev->notify(hdev, HCI_NOTIFY_VOICE_SETTING);
363 		tasklet_enable(&hdev->tx_task);
364 	}
365 }
366 
367 static void hci_cc_write_voice_setting(struct hci_dev *hdev, struct sk_buff *skb)
368 {
369 	__u8 status = *((__u8 *) skb->data);
370 	__u16 setting;
371 	void *sent;
372 
373 	BT_DBG("%s status 0x%x", hdev->name, status);
374 
375 	if (status)
376 		return;
377 
378 	sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_VOICE_SETTING);
379 	if (!sent)
380 		return;
381 
382 	setting = get_unaligned_le16(sent);
383 
384 	if (hdev->voice_setting == setting)
385 		return;
386 
387 	hdev->voice_setting = setting;
388 
389 	BT_DBG("%s voice setting 0x%04x", hdev->name, setting);
390 
391 	if (hdev->notify) {
392 		tasklet_disable(&hdev->tx_task);
393 		hdev->notify(hdev, HCI_NOTIFY_VOICE_SETTING);
394 		tasklet_enable(&hdev->tx_task);
395 	}
396 }
397 
398 static void hci_cc_host_buffer_size(struct hci_dev *hdev, struct sk_buff *skb)
399 {
400 	__u8 status = *((__u8 *) skb->data);
401 
402 	BT_DBG("%s status 0x%x", hdev->name, status);
403 
404 	hci_req_complete(hdev, HCI_OP_HOST_BUFFER_SIZE, status);
405 }
406 
407 static void hci_cc_read_ssp_mode(struct hci_dev *hdev, struct sk_buff *skb)
408 {
409 	struct hci_rp_read_ssp_mode *rp = (void *) skb->data;
410 
411 	BT_DBG("%s status 0x%x", hdev->name, rp->status);
412 
413 	if (rp->status)
414 		return;
415 
416 	hdev->ssp_mode = rp->mode;
417 }
418 
419 static void hci_cc_write_ssp_mode(struct hci_dev *hdev, struct sk_buff *skb)
420 {
421 	__u8 status = *((__u8 *) skb->data);
422 	void *sent;
423 
424 	BT_DBG("%s status 0x%x", hdev->name, status);
425 
426 	if (status)
427 		return;
428 
429 	sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_SSP_MODE);
430 	if (!sent)
431 		return;
432 
433 	hdev->ssp_mode = *((__u8 *) sent);
434 }
435 
436 static u8 hci_get_inquiry_mode(struct hci_dev *hdev)
437 {
438 	if (hdev->features[6] & LMP_EXT_INQ)
439 		return 2;
440 
441 	if (hdev->features[3] & LMP_RSSI_INQ)
442 		return 1;
443 
444 	if (hdev->manufacturer == 11 && hdev->hci_rev == 0x00 &&
445 						hdev->lmp_subver == 0x0757)
446 		return 1;
447 
448 	if (hdev->manufacturer == 15) {
449 		if (hdev->hci_rev == 0x03 && hdev->lmp_subver == 0x6963)
450 			return 1;
451 		if (hdev->hci_rev == 0x09 && hdev->lmp_subver == 0x6963)
452 			return 1;
453 		if (hdev->hci_rev == 0x00 && hdev->lmp_subver == 0x6965)
454 			return 1;
455 	}
456 
457 	if (hdev->manufacturer == 31 && hdev->hci_rev == 0x2005 &&
458 						hdev->lmp_subver == 0x1805)
459 		return 1;
460 
461 	return 0;
462 }
463 
464 static void hci_setup_inquiry_mode(struct hci_dev *hdev)
465 {
466 	u8 mode;
467 
468 	mode = hci_get_inquiry_mode(hdev);
469 
470 	hci_send_cmd(hdev, HCI_OP_WRITE_INQUIRY_MODE, 1, &mode);
471 }
472 
473 static void hci_setup_event_mask(struct hci_dev *hdev)
474 {
475 	/* The second byte is 0xff instead of 0x9f (two reserved bits
476 	 * disabled) since a Broadcom 1.2 dongle doesn't respond to the
477 	 * command otherwise */
478 	u8 events[8] = { 0xff, 0xff, 0xfb, 0xff, 0x00, 0x00, 0x00, 0x00 };
479 
480 	/* Events for 1.2 and newer controllers */
481 	if (hdev->lmp_ver > 1) {
482 		events[4] |= 0x01; /* Flow Specification Complete */
483 		events[4] |= 0x02; /* Inquiry Result with RSSI */
484 		events[4] |= 0x04; /* Read Remote Extended Features Complete */
485 		events[5] |= 0x08; /* Synchronous Connection Complete */
486 		events[5] |= 0x10; /* Synchronous Connection Changed */
487 	}
488 
489 	if (hdev->features[3] & LMP_RSSI_INQ)
490 		events[4] |= 0x04; /* Inquiry Result with RSSI */
491 
492 	if (hdev->features[5] & LMP_SNIFF_SUBR)
493 		events[5] |= 0x20; /* Sniff Subrating */
494 
495 	if (hdev->features[5] & LMP_PAUSE_ENC)
496 		events[5] |= 0x80; /* Encryption Key Refresh Complete */
497 
498 	if (hdev->features[6] & LMP_EXT_INQ)
499 		events[5] |= 0x40; /* Extended Inquiry Result */
500 
501 	if (hdev->features[6] & LMP_NO_FLUSH)
502 		events[7] |= 0x01; /* Enhanced Flush Complete */
503 
504 	if (hdev->features[7] & LMP_LSTO)
505 		events[6] |= 0x80; /* Link Supervision Timeout Changed */
506 
507 	if (hdev->features[6] & LMP_SIMPLE_PAIR) {
508 		events[6] |= 0x01;	/* IO Capability Request */
509 		events[6] |= 0x02;	/* IO Capability Response */
510 		events[6] |= 0x04;	/* User Confirmation Request */
511 		events[6] |= 0x08;	/* User Passkey Request */
512 		events[6] |= 0x10;	/* Remote OOB Data Request */
513 		events[6] |= 0x20;	/* Simple Pairing Complete */
514 		events[7] |= 0x04;	/* User Passkey Notification */
515 		events[7] |= 0x08;	/* Keypress Notification */
516 		events[7] |= 0x10;	/* Remote Host Supported
517 					 * Features Notification */
518 	}
519 
520 	if (hdev->features[4] & LMP_LE)
521 		events[7] |= 0x20;	/* LE Meta-Event */
522 
523 	hci_send_cmd(hdev, HCI_OP_SET_EVENT_MASK, sizeof(events), events);
524 }
525 
526 static void hci_setup(struct hci_dev *hdev)
527 {
528 	hci_setup_event_mask(hdev);
529 
530 	if (hdev->lmp_ver > 1)
531 		hci_send_cmd(hdev, HCI_OP_READ_LOCAL_COMMANDS, 0, NULL);
532 
533 	if (hdev->features[6] & LMP_SIMPLE_PAIR) {
534 		u8 mode = 0x01;
535 		hci_send_cmd(hdev, HCI_OP_WRITE_SSP_MODE, sizeof(mode), &mode);
536 	}
537 
538 	if (hdev->features[3] & LMP_RSSI_INQ)
539 		hci_setup_inquiry_mode(hdev);
540 
541 	if (hdev->features[7] & LMP_INQ_TX_PWR)
542 		hci_send_cmd(hdev, HCI_OP_READ_INQ_RSP_TX_POWER, 0, NULL);
543 }
544 
545 static void hci_cc_read_local_version(struct hci_dev *hdev, struct sk_buff *skb)
546 {
547 	struct hci_rp_read_local_version *rp = (void *) skb->data;
548 
549 	BT_DBG("%s status 0x%x", hdev->name, rp->status);
550 
551 	if (rp->status)
552 		return;
553 
554 	hdev->hci_ver = rp->hci_ver;
555 	hdev->hci_rev = __le16_to_cpu(rp->hci_rev);
556 	hdev->lmp_ver = rp->lmp_ver;
557 	hdev->manufacturer = __le16_to_cpu(rp->manufacturer);
558 	hdev->lmp_subver = __le16_to_cpu(rp->lmp_subver);
559 
560 	BT_DBG("%s manufacturer %d hci ver %d:%d", hdev->name,
561 					hdev->manufacturer,
562 					hdev->hci_ver, hdev->hci_rev);
563 
564 	if (test_bit(HCI_INIT, &hdev->flags))
565 		hci_setup(hdev);
566 }
567 
568 static void hci_setup_link_policy(struct hci_dev *hdev)
569 {
570 	u16 link_policy = 0;
571 
572 	if (hdev->features[0] & LMP_RSWITCH)
573 		link_policy |= HCI_LP_RSWITCH;
574 	if (hdev->features[0] & LMP_HOLD)
575 		link_policy |= HCI_LP_HOLD;
576 	if (hdev->features[0] & LMP_SNIFF)
577 		link_policy |= HCI_LP_SNIFF;
578 	if (hdev->features[1] & LMP_PARK)
579 		link_policy |= HCI_LP_PARK;
580 
581 	link_policy = cpu_to_le16(link_policy);
582 	hci_send_cmd(hdev, HCI_OP_WRITE_DEF_LINK_POLICY,
583 					sizeof(link_policy), &link_policy);
584 }
585 
586 static void hci_cc_read_local_commands(struct hci_dev *hdev, struct sk_buff *skb)
587 {
588 	struct hci_rp_read_local_commands *rp = (void *) skb->data;
589 
590 	BT_DBG("%s status 0x%x", hdev->name, rp->status);
591 
592 	if (rp->status)
593 		goto done;
594 
595 	memcpy(hdev->commands, rp->commands, sizeof(hdev->commands));
596 
597 	if (test_bit(HCI_INIT, &hdev->flags) && (hdev->commands[5] & 0x10))
598 		hci_setup_link_policy(hdev);
599 
600 done:
601 	hci_req_complete(hdev, HCI_OP_READ_LOCAL_COMMANDS, rp->status);
602 }
603 
604 static void hci_cc_read_local_features(struct hci_dev *hdev, struct sk_buff *skb)
605 {
606 	struct hci_rp_read_local_features *rp = (void *) skb->data;
607 
608 	BT_DBG("%s status 0x%x", hdev->name, rp->status);
609 
610 	if (rp->status)
611 		return;
612 
613 	memcpy(hdev->features, rp->features, 8);
614 
615 	/* Adjust default settings according to features
616 	 * supported by device. */
617 
618 	if (hdev->features[0] & LMP_3SLOT)
619 		hdev->pkt_type |= (HCI_DM3 | HCI_DH3);
620 
621 	if (hdev->features[0] & LMP_5SLOT)
622 		hdev->pkt_type |= (HCI_DM5 | HCI_DH5);
623 
624 	if (hdev->features[1] & LMP_HV2) {
625 		hdev->pkt_type  |= (HCI_HV2);
626 		hdev->esco_type |= (ESCO_HV2);
627 	}
628 
629 	if (hdev->features[1] & LMP_HV3) {
630 		hdev->pkt_type  |= (HCI_HV3);
631 		hdev->esco_type |= (ESCO_HV3);
632 	}
633 
634 	if (hdev->features[3] & LMP_ESCO)
635 		hdev->esco_type |= (ESCO_EV3);
636 
637 	if (hdev->features[4] & LMP_EV4)
638 		hdev->esco_type |= (ESCO_EV4);
639 
640 	if (hdev->features[4] & LMP_EV5)
641 		hdev->esco_type |= (ESCO_EV5);
642 
643 	if (hdev->features[5] & LMP_EDR_ESCO_2M)
644 		hdev->esco_type |= (ESCO_2EV3);
645 
646 	if (hdev->features[5] & LMP_EDR_ESCO_3M)
647 		hdev->esco_type |= (ESCO_3EV3);
648 
649 	if (hdev->features[5] & LMP_EDR_3S_ESCO)
650 		hdev->esco_type |= (ESCO_2EV5 | ESCO_3EV5);
651 
652 	BT_DBG("%s features 0x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x", hdev->name,
653 					hdev->features[0], hdev->features[1],
654 					hdev->features[2], hdev->features[3],
655 					hdev->features[4], hdev->features[5],
656 					hdev->features[6], hdev->features[7]);
657 }
658 
659 static void hci_cc_read_buffer_size(struct hci_dev *hdev, struct sk_buff *skb)
660 {
661 	struct hci_rp_read_buffer_size *rp = (void *) skb->data;
662 
663 	BT_DBG("%s status 0x%x", hdev->name, rp->status);
664 
665 	if (rp->status)
666 		return;
667 
668 	hdev->acl_mtu  = __le16_to_cpu(rp->acl_mtu);
669 	hdev->sco_mtu  = rp->sco_mtu;
670 	hdev->acl_pkts = __le16_to_cpu(rp->acl_max_pkt);
671 	hdev->sco_pkts = __le16_to_cpu(rp->sco_max_pkt);
672 
673 	if (test_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE, &hdev->quirks)) {
674 		hdev->sco_mtu  = 64;
675 		hdev->sco_pkts = 8;
676 	}
677 
678 	hdev->acl_cnt = hdev->acl_pkts;
679 	hdev->sco_cnt = hdev->sco_pkts;
680 
681 	BT_DBG("%s acl mtu %d:%d sco mtu %d:%d", hdev->name,
682 					hdev->acl_mtu, hdev->acl_pkts,
683 					hdev->sco_mtu, hdev->sco_pkts);
684 }
685 
686 static void hci_cc_read_bd_addr(struct hci_dev *hdev, struct sk_buff *skb)
687 {
688 	struct hci_rp_read_bd_addr *rp = (void *) skb->data;
689 
690 	BT_DBG("%s status 0x%x", hdev->name, rp->status);
691 
692 	if (!rp->status)
693 		bacpy(&hdev->bdaddr, &rp->bdaddr);
694 
695 	hci_req_complete(hdev, HCI_OP_READ_BD_ADDR, rp->status);
696 }
697 
698 static void hci_cc_write_ca_timeout(struct hci_dev *hdev, struct sk_buff *skb)
699 {
700 	__u8 status = *((__u8 *) skb->data);
701 
702 	BT_DBG("%s status 0x%x", hdev->name, status);
703 
704 	hci_req_complete(hdev, HCI_OP_WRITE_CA_TIMEOUT, status);
705 }
706 
707 static void hci_cc_delete_stored_link_key(struct hci_dev *hdev,
708 							struct sk_buff *skb)
709 {
710 	__u8 status = *((__u8 *) skb->data);
711 
712 	BT_DBG("%s status 0x%x", hdev->name, status);
713 
714 	hci_req_complete(hdev, HCI_OP_DELETE_STORED_LINK_KEY, status);
715 }
716 
717 static void hci_cc_set_event_mask(struct hci_dev *hdev, struct sk_buff *skb)
718 {
719 	__u8 status = *((__u8 *) skb->data);
720 
721 	BT_DBG("%s status 0x%x", hdev->name, status);
722 
723 	hci_req_complete(hdev, HCI_OP_SET_EVENT_MASK, status);
724 }
725 
726 static void hci_cc_write_inquiry_mode(struct hci_dev *hdev,
727 							struct sk_buff *skb)
728 {
729 	__u8 status = *((__u8 *) skb->data);
730 
731 	BT_DBG("%s status 0x%x", hdev->name, status);
732 
733 	hci_req_complete(hdev, HCI_OP_WRITE_INQUIRY_MODE, status);
734 }
735 
736 static void hci_cc_read_inq_rsp_tx_power(struct hci_dev *hdev,
737 							struct sk_buff *skb)
738 {
739 	__u8 status = *((__u8 *) skb->data);
740 
741 	BT_DBG("%s status 0x%x", hdev->name, status);
742 
743 	hci_req_complete(hdev, HCI_OP_READ_INQ_RSP_TX_POWER, status);
744 }
745 
746 static void hci_cc_set_event_flt(struct hci_dev *hdev, struct sk_buff *skb)
747 {
748 	__u8 status = *((__u8 *) skb->data);
749 
750 	BT_DBG("%s status 0x%x", hdev->name, status);
751 
752 	hci_req_complete(hdev, HCI_OP_SET_EVENT_FLT, status);
753 }
754 
755 static void hci_cc_pin_code_reply(struct hci_dev *hdev, struct sk_buff *skb)
756 {
757 	struct hci_rp_pin_code_reply *rp = (void *) skb->data;
758 	struct hci_cp_pin_code_reply *cp;
759 	struct hci_conn *conn;
760 
761 	BT_DBG("%s status 0x%x", hdev->name, rp->status);
762 
763 	if (test_bit(HCI_MGMT, &hdev->flags))
764 		mgmt_pin_code_reply_complete(hdev->id, &rp->bdaddr, rp->status);
765 
766 	if (rp->status != 0)
767 		return;
768 
769 	cp = hci_sent_cmd_data(hdev, HCI_OP_PIN_CODE_REPLY);
770 	if (!cp)
771 		return;
772 
773 	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
774 	if (conn)
775 		conn->pin_length = cp->pin_len;
776 }
777 
778 static void hci_cc_pin_code_neg_reply(struct hci_dev *hdev, struct sk_buff *skb)
779 {
780 	struct hci_rp_pin_code_neg_reply *rp = (void *) skb->data;
781 
782 	BT_DBG("%s status 0x%x", hdev->name, rp->status);
783 
784 	if (test_bit(HCI_MGMT, &hdev->flags))
785 		mgmt_pin_code_neg_reply_complete(hdev->id, &rp->bdaddr,
786 								rp->status);
787 }
788 static void hci_cc_le_read_buffer_size(struct hci_dev *hdev,
789 				       struct sk_buff *skb)
790 {
791 	struct hci_rp_le_read_buffer_size *rp = (void *) skb->data;
792 
793 	BT_DBG("%s status 0x%x", hdev->name, rp->status);
794 
795 	if (rp->status)
796 		return;
797 
798 	hdev->le_mtu = __le16_to_cpu(rp->le_mtu);
799 	hdev->le_pkts = rp->le_max_pkt;
800 
801 	hdev->le_cnt = hdev->le_pkts;
802 
803 	BT_DBG("%s le mtu %d:%d", hdev->name, hdev->le_mtu, hdev->le_pkts);
804 
805 	hci_req_complete(hdev, HCI_OP_LE_READ_BUFFER_SIZE, rp->status);
806 }
807 
808 static void hci_cc_user_confirm_reply(struct hci_dev *hdev, struct sk_buff *skb)
809 {
810 	struct hci_rp_user_confirm_reply *rp = (void *) skb->data;
811 
812 	BT_DBG("%s status 0x%x", hdev->name, rp->status);
813 
814 	if (test_bit(HCI_MGMT, &hdev->flags))
815 		mgmt_user_confirm_reply_complete(hdev->id, &rp->bdaddr,
816 								rp->status);
817 }
818 
819 static void hci_cc_user_confirm_neg_reply(struct hci_dev *hdev,
820 							struct sk_buff *skb)
821 {
822 	struct hci_rp_user_confirm_reply *rp = (void *) skb->data;
823 
824 	BT_DBG("%s status 0x%x", hdev->name, rp->status);
825 
826 	if (test_bit(HCI_MGMT, &hdev->flags))
827 		mgmt_user_confirm_neg_reply_complete(hdev->id, &rp->bdaddr,
828 								rp->status);
829 }
830 
831 static void hci_cc_read_local_oob_data_reply(struct hci_dev *hdev,
832 							struct sk_buff *skb)
833 {
834 	struct hci_rp_read_local_oob_data *rp = (void *) skb->data;
835 
836 	BT_DBG("%s status 0x%x", hdev->name, rp->status);
837 
838 	mgmt_read_local_oob_data_reply_complete(hdev->id, rp->hash,
839 						rp->randomizer, rp->status);
840 }
841 
842 static inline void hci_cs_inquiry(struct hci_dev *hdev, __u8 status)
843 {
844 	BT_DBG("%s status 0x%x", hdev->name, status);
845 
846 	if (status) {
847 		hci_req_complete(hdev, HCI_OP_INQUIRY, status);
848 		hci_conn_check_pending(hdev);
849 		return;
850 	}
851 
852 	if (test_bit(HCI_MGMT, &hdev->flags) &&
853 					!test_and_set_bit(HCI_INQUIRY,
854 							&hdev->flags))
855 		mgmt_discovering(hdev->id, 1);
856 }
857 
858 static inline void hci_cs_create_conn(struct hci_dev *hdev, __u8 status)
859 {
860 	struct hci_cp_create_conn *cp;
861 	struct hci_conn *conn;
862 
863 	BT_DBG("%s status 0x%x", hdev->name, status);
864 
865 	cp = hci_sent_cmd_data(hdev, HCI_OP_CREATE_CONN);
866 	if (!cp)
867 		return;
868 
869 	hci_dev_lock(hdev);
870 
871 	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
872 
873 	BT_DBG("%s bdaddr %s conn %p", hdev->name, batostr(&cp->bdaddr), conn);
874 
875 	if (status) {
876 		if (conn && conn->state == BT_CONNECT) {
877 			if (status != 0x0c || conn->attempt > 2) {
878 				conn->state = BT_CLOSED;
879 				hci_proto_connect_cfm(conn, status);
880 				hci_conn_del(conn);
881 			} else
882 				conn->state = BT_CONNECT2;
883 		}
884 	} else {
885 		if (!conn) {
886 			conn = hci_conn_add(hdev, ACL_LINK, &cp->bdaddr);
887 			if (conn) {
888 				conn->out = 1;
889 				conn->link_mode |= HCI_LM_MASTER;
890 			} else
891 				BT_ERR("No memory for new connection");
892 		}
893 	}
894 
895 	hci_dev_unlock(hdev);
896 }
897 
898 static void hci_cs_add_sco(struct hci_dev *hdev, __u8 status)
899 {
900 	struct hci_cp_add_sco *cp;
901 	struct hci_conn *acl, *sco;
902 	__u16 handle;
903 
904 	BT_DBG("%s status 0x%x", hdev->name, status);
905 
906 	if (!status)
907 		return;
908 
909 	cp = hci_sent_cmd_data(hdev, HCI_OP_ADD_SCO);
910 	if (!cp)
911 		return;
912 
913 	handle = __le16_to_cpu(cp->handle);
914 
915 	BT_DBG("%s handle %d", hdev->name, handle);
916 
917 	hci_dev_lock(hdev);
918 
919 	acl = hci_conn_hash_lookup_handle(hdev, handle);
920 	if (acl) {
921 		sco = acl->link;
922 		if (sco) {
923 			sco->state = BT_CLOSED;
924 
925 			hci_proto_connect_cfm(sco, status);
926 			hci_conn_del(sco);
927 		}
928 	}
929 
930 	hci_dev_unlock(hdev);
931 }
932 
933 static void hci_cs_auth_requested(struct hci_dev *hdev, __u8 status)
934 {
935 	struct hci_cp_auth_requested *cp;
936 	struct hci_conn *conn;
937 
938 	BT_DBG("%s status 0x%x", hdev->name, status);
939 
940 	if (!status)
941 		return;
942 
943 	cp = hci_sent_cmd_data(hdev, HCI_OP_AUTH_REQUESTED);
944 	if (!cp)
945 		return;
946 
947 	hci_dev_lock(hdev);
948 
949 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
950 	if (conn) {
951 		if (conn->state == BT_CONFIG) {
952 			hci_proto_connect_cfm(conn, status);
953 			hci_conn_put(conn);
954 		}
955 	}
956 
957 	hci_dev_unlock(hdev);
958 }
959 
960 static void hci_cs_set_conn_encrypt(struct hci_dev *hdev, __u8 status)
961 {
962 	struct hci_cp_set_conn_encrypt *cp;
963 	struct hci_conn *conn;
964 
965 	BT_DBG("%s status 0x%x", hdev->name, status);
966 
967 	if (!status)
968 		return;
969 
970 	cp = hci_sent_cmd_data(hdev, HCI_OP_SET_CONN_ENCRYPT);
971 	if (!cp)
972 		return;
973 
974 	hci_dev_lock(hdev);
975 
976 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
977 	if (conn) {
978 		if (conn->state == BT_CONFIG) {
979 			hci_proto_connect_cfm(conn, status);
980 			hci_conn_put(conn);
981 		}
982 	}
983 
984 	hci_dev_unlock(hdev);
985 }
986 
987 static int hci_outgoing_auth_needed(struct hci_dev *hdev,
988 							struct hci_conn *conn)
989 {
990 	if (conn->state != BT_CONFIG || !conn->out)
991 		return 0;
992 
993 	if (conn->pending_sec_level == BT_SECURITY_SDP)
994 		return 0;
995 
996 	/* Only request authentication for SSP connections or non-SSP
997 	 * devices with sec_level HIGH */
998 	if (!(hdev->ssp_mode > 0 && conn->ssp_mode > 0) &&
999 				conn->pending_sec_level != BT_SECURITY_HIGH)
1000 		return 0;
1001 
1002 	return 1;
1003 }
1004 
1005 static void hci_cs_remote_name_req(struct hci_dev *hdev, __u8 status)
1006 {
1007 	struct hci_cp_remote_name_req *cp;
1008 	struct hci_conn *conn;
1009 
1010 	BT_DBG("%s status 0x%x", hdev->name, status);
1011 
1012 	/* If successful wait for the name req complete event before
1013 	 * checking for the need to do authentication */
1014 	if (!status)
1015 		return;
1016 
1017 	cp = hci_sent_cmd_data(hdev, HCI_OP_REMOTE_NAME_REQ);
1018 	if (!cp)
1019 		return;
1020 
1021 	hci_dev_lock(hdev);
1022 
1023 	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
1024 	if (!conn)
1025 		goto unlock;
1026 
1027 	if (!hci_outgoing_auth_needed(hdev, conn))
1028 		goto unlock;
1029 
1030 	if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->pend)) {
1031 		struct hci_cp_auth_requested cp;
1032 		cp.handle = __cpu_to_le16(conn->handle);
1033 		hci_send_cmd(hdev, HCI_OP_AUTH_REQUESTED, sizeof(cp), &cp);
1034 	}
1035 
1036 unlock:
1037 	hci_dev_unlock(hdev);
1038 }
1039 
1040 static void hci_cs_read_remote_features(struct hci_dev *hdev, __u8 status)
1041 {
1042 	struct hci_cp_read_remote_features *cp;
1043 	struct hci_conn *conn;
1044 
1045 	BT_DBG("%s status 0x%x", hdev->name, status);
1046 
1047 	if (!status)
1048 		return;
1049 
1050 	cp = hci_sent_cmd_data(hdev, HCI_OP_READ_REMOTE_FEATURES);
1051 	if (!cp)
1052 		return;
1053 
1054 	hci_dev_lock(hdev);
1055 
1056 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1057 	if (conn) {
1058 		if (conn->state == BT_CONFIG) {
1059 			hci_proto_connect_cfm(conn, status);
1060 			hci_conn_put(conn);
1061 		}
1062 	}
1063 
1064 	hci_dev_unlock(hdev);
1065 }
1066 
1067 static void hci_cs_read_remote_ext_features(struct hci_dev *hdev, __u8 status)
1068 {
1069 	struct hci_cp_read_remote_ext_features *cp;
1070 	struct hci_conn *conn;
1071 
1072 	BT_DBG("%s status 0x%x", hdev->name, status);
1073 
1074 	if (!status)
1075 		return;
1076 
1077 	cp = hci_sent_cmd_data(hdev, HCI_OP_READ_REMOTE_EXT_FEATURES);
1078 	if (!cp)
1079 		return;
1080 
1081 	hci_dev_lock(hdev);
1082 
1083 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1084 	if (conn) {
1085 		if (conn->state == BT_CONFIG) {
1086 			hci_proto_connect_cfm(conn, status);
1087 			hci_conn_put(conn);
1088 		}
1089 	}
1090 
1091 	hci_dev_unlock(hdev);
1092 }
1093 
1094 static void hci_cs_setup_sync_conn(struct hci_dev *hdev, __u8 status)
1095 {
1096 	struct hci_cp_setup_sync_conn *cp;
1097 	struct hci_conn *acl, *sco;
1098 	__u16 handle;
1099 
1100 	BT_DBG("%s status 0x%x", hdev->name, status);
1101 
1102 	if (!status)
1103 		return;
1104 
1105 	cp = hci_sent_cmd_data(hdev, HCI_OP_SETUP_SYNC_CONN);
1106 	if (!cp)
1107 		return;
1108 
1109 	handle = __le16_to_cpu(cp->handle);
1110 
1111 	BT_DBG("%s handle %d", hdev->name, handle);
1112 
1113 	hci_dev_lock(hdev);
1114 
1115 	acl = hci_conn_hash_lookup_handle(hdev, handle);
1116 	if (acl) {
1117 		sco = acl->link;
1118 		if (sco) {
1119 			sco->state = BT_CLOSED;
1120 
1121 			hci_proto_connect_cfm(sco, status);
1122 			hci_conn_del(sco);
1123 		}
1124 	}
1125 
1126 	hci_dev_unlock(hdev);
1127 }
1128 
1129 static void hci_cs_sniff_mode(struct hci_dev *hdev, __u8 status)
1130 {
1131 	struct hci_cp_sniff_mode *cp;
1132 	struct hci_conn *conn;
1133 
1134 	BT_DBG("%s status 0x%x", hdev->name, status);
1135 
1136 	if (!status)
1137 		return;
1138 
1139 	cp = hci_sent_cmd_data(hdev, HCI_OP_SNIFF_MODE);
1140 	if (!cp)
1141 		return;
1142 
1143 	hci_dev_lock(hdev);
1144 
1145 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1146 	if (conn) {
1147 		clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend);
1148 
1149 		if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->pend))
1150 			hci_sco_setup(conn, status);
1151 	}
1152 
1153 	hci_dev_unlock(hdev);
1154 }
1155 
1156 static void hci_cs_exit_sniff_mode(struct hci_dev *hdev, __u8 status)
1157 {
1158 	struct hci_cp_exit_sniff_mode *cp;
1159 	struct hci_conn *conn;
1160 
1161 	BT_DBG("%s status 0x%x", hdev->name, status);
1162 
1163 	if (!status)
1164 		return;
1165 
1166 	cp = hci_sent_cmd_data(hdev, HCI_OP_EXIT_SNIFF_MODE);
1167 	if (!cp)
1168 		return;
1169 
1170 	hci_dev_lock(hdev);
1171 
1172 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1173 	if (conn) {
1174 		clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend);
1175 
1176 		if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->pend))
1177 			hci_sco_setup(conn, status);
1178 	}
1179 
1180 	hci_dev_unlock(hdev);
1181 }
1182 
1183 static void hci_cs_le_create_conn(struct hci_dev *hdev, __u8 status)
1184 {
1185 	struct hci_cp_le_create_conn *cp;
1186 	struct hci_conn *conn;
1187 
1188 	BT_DBG("%s status 0x%x", hdev->name, status);
1189 
1190 	cp = hci_sent_cmd_data(hdev, HCI_OP_LE_CREATE_CONN);
1191 	if (!cp)
1192 		return;
1193 
1194 	hci_dev_lock(hdev);
1195 
1196 	conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, &cp->peer_addr);
1197 
1198 	BT_DBG("%s bdaddr %s conn %p", hdev->name, batostr(&cp->peer_addr),
1199 		conn);
1200 
1201 	if (status) {
1202 		if (conn && conn->state == BT_CONNECT) {
1203 			conn->state = BT_CLOSED;
1204 			hci_proto_connect_cfm(conn, status);
1205 			hci_conn_del(conn);
1206 		}
1207 	} else {
1208 		if (!conn) {
1209 			conn = hci_conn_add(hdev, LE_LINK, &cp->peer_addr);
1210 			if (conn)
1211 				conn->out = 1;
1212 			else
1213 				BT_ERR("No memory for new connection");
1214 		}
1215 	}
1216 
1217 	hci_dev_unlock(hdev);
1218 }
1219 
1220 static inline void hci_inquiry_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1221 {
1222 	__u8 status = *((__u8 *) skb->data);
1223 
1224 	BT_DBG("%s status %d", hdev->name, status);
1225 
1226 	if (test_bit(HCI_MGMT, &hdev->flags) &&
1227 				test_and_clear_bit(HCI_INQUIRY, &hdev->flags))
1228 		mgmt_discovering(hdev->id, 0);
1229 
1230 	hci_req_complete(hdev, HCI_OP_INQUIRY, status);
1231 
1232 	hci_conn_check_pending(hdev);
1233 }
1234 
1235 static inline void hci_inquiry_result_evt(struct hci_dev *hdev, struct sk_buff *skb)
1236 {
1237 	struct inquiry_data data;
1238 	struct inquiry_info *info = (void *) (skb->data + 1);
1239 	int num_rsp = *((__u8 *) skb->data);
1240 
1241 	BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
1242 
1243 	if (!num_rsp)
1244 		return;
1245 
1246 	hci_dev_lock(hdev);
1247 
1248 	if (!test_and_set_bit(HCI_INQUIRY, &hdev->flags)) {
1249 
1250 		if (test_bit(HCI_MGMT, &hdev->flags))
1251 			mgmt_discovering(hdev->id, 1);
1252 	}
1253 
1254 	for (; num_rsp; num_rsp--, info++) {
1255 		bacpy(&data.bdaddr, &info->bdaddr);
1256 		data.pscan_rep_mode	= info->pscan_rep_mode;
1257 		data.pscan_period_mode	= info->pscan_period_mode;
1258 		data.pscan_mode		= info->pscan_mode;
1259 		memcpy(data.dev_class, info->dev_class, 3);
1260 		data.clock_offset	= info->clock_offset;
1261 		data.rssi		= 0x00;
1262 		data.ssp_mode		= 0x00;
1263 		hci_inquiry_cache_update(hdev, &data);
1264 		mgmt_device_found(hdev->id, &info->bdaddr, info->dev_class, 0,
1265 									NULL);
1266 	}
1267 
1268 	hci_dev_unlock(hdev);
1269 }
1270 
1271 static inline void hci_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1272 {
1273 	struct hci_ev_conn_complete *ev = (void *) skb->data;
1274 	struct hci_conn *conn;
1275 
1276 	BT_DBG("%s", hdev->name);
1277 
1278 	hci_dev_lock(hdev);
1279 
1280 	conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
1281 	if (!conn) {
1282 		if (ev->link_type != SCO_LINK)
1283 			goto unlock;
1284 
1285 		conn = hci_conn_hash_lookup_ba(hdev, ESCO_LINK, &ev->bdaddr);
1286 		if (!conn)
1287 			goto unlock;
1288 
1289 		conn->type = SCO_LINK;
1290 	}
1291 
1292 	if (!ev->status) {
1293 		conn->handle = __le16_to_cpu(ev->handle);
1294 
1295 		if (conn->type == ACL_LINK) {
1296 			conn->state = BT_CONFIG;
1297 			hci_conn_hold(conn);
1298 			conn->disc_timeout = HCI_DISCONN_TIMEOUT;
1299 			mgmt_connected(hdev->id, &ev->bdaddr);
1300 		} else
1301 			conn->state = BT_CONNECTED;
1302 
1303 		hci_conn_hold_device(conn);
1304 		hci_conn_add_sysfs(conn);
1305 
1306 		if (test_bit(HCI_AUTH, &hdev->flags))
1307 			conn->link_mode |= HCI_LM_AUTH;
1308 
1309 		if (test_bit(HCI_ENCRYPT, &hdev->flags))
1310 			conn->link_mode |= HCI_LM_ENCRYPT;
1311 
1312 		/* Get remote features */
1313 		if (conn->type == ACL_LINK) {
1314 			struct hci_cp_read_remote_features cp;
1315 			cp.handle = ev->handle;
1316 			hci_send_cmd(hdev, HCI_OP_READ_REMOTE_FEATURES,
1317 							sizeof(cp), &cp);
1318 		}
1319 
1320 		/* Set packet type for incoming connection */
1321 		if (!conn->out && hdev->hci_ver < 3) {
1322 			struct hci_cp_change_conn_ptype cp;
1323 			cp.handle = ev->handle;
1324 			cp.pkt_type = cpu_to_le16(conn->pkt_type);
1325 			hci_send_cmd(hdev, HCI_OP_CHANGE_CONN_PTYPE,
1326 							sizeof(cp), &cp);
1327 		}
1328 	} else {
1329 		conn->state = BT_CLOSED;
1330 		if (conn->type == ACL_LINK)
1331 			mgmt_connect_failed(hdev->id, &ev->bdaddr, ev->status);
1332 	}
1333 
1334 	if (conn->type == ACL_LINK)
1335 		hci_sco_setup(conn, ev->status);
1336 
1337 	if (ev->status) {
1338 		hci_proto_connect_cfm(conn, ev->status);
1339 		hci_conn_del(conn);
1340 	} else if (ev->link_type != ACL_LINK)
1341 		hci_proto_connect_cfm(conn, ev->status);
1342 
1343 unlock:
1344 	hci_dev_unlock(hdev);
1345 
1346 	hci_conn_check_pending(hdev);
1347 }
1348 
1349 static inline void hci_conn_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
1350 {
1351 	struct hci_ev_conn_request *ev = (void *) skb->data;
1352 	int mask = hdev->link_mode;
1353 
1354 	BT_DBG("%s bdaddr %s type 0x%x", hdev->name,
1355 					batostr(&ev->bdaddr), ev->link_type);
1356 
1357 	mask |= hci_proto_connect_ind(hdev, &ev->bdaddr, ev->link_type);
1358 
1359 	if ((mask & HCI_LM_ACCEPT) &&
1360 			!hci_blacklist_lookup(hdev, &ev->bdaddr)) {
1361 		/* Connection accepted */
1362 		struct inquiry_entry *ie;
1363 		struct hci_conn *conn;
1364 
1365 		hci_dev_lock(hdev);
1366 
1367 		ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr);
1368 		if (ie)
1369 			memcpy(ie->data.dev_class, ev->dev_class, 3);
1370 
1371 		conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
1372 		if (!conn) {
1373 			conn = hci_conn_add(hdev, ev->link_type, &ev->bdaddr);
1374 			if (!conn) {
1375 				BT_ERR("No memory for new connection");
1376 				hci_dev_unlock(hdev);
1377 				return;
1378 			}
1379 		}
1380 
1381 		memcpy(conn->dev_class, ev->dev_class, 3);
1382 		conn->state = BT_CONNECT;
1383 
1384 		hci_dev_unlock(hdev);
1385 
1386 		if (ev->link_type == ACL_LINK || !lmp_esco_capable(hdev)) {
1387 			struct hci_cp_accept_conn_req cp;
1388 
1389 			bacpy(&cp.bdaddr, &ev->bdaddr);
1390 
1391 			if (lmp_rswitch_capable(hdev) && (mask & HCI_LM_MASTER))
1392 				cp.role = 0x00; /* Become master */
1393 			else
1394 				cp.role = 0x01; /* Remain slave */
1395 
1396 			hci_send_cmd(hdev, HCI_OP_ACCEPT_CONN_REQ,
1397 							sizeof(cp), &cp);
1398 		} else {
1399 			struct hci_cp_accept_sync_conn_req cp;
1400 
1401 			bacpy(&cp.bdaddr, &ev->bdaddr);
1402 			cp.pkt_type = cpu_to_le16(conn->pkt_type);
1403 
1404 			cp.tx_bandwidth   = cpu_to_le32(0x00001f40);
1405 			cp.rx_bandwidth   = cpu_to_le32(0x00001f40);
1406 			cp.max_latency    = cpu_to_le16(0xffff);
1407 			cp.content_format = cpu_to_le16(hdev->voice_setting);
1408 			cp.retrans_effort = 0xff;
1409 
1410 			hci_send_cmd(hdev, HCI_OP_ACCEPT_SYNC_CONN_REQ,
1411 							sizeof(cp), &cp);
1412 		}
1413 	} else {
1414 		/* Connection rejected */
1415 		struct hci_cp_reject_conn_req cp;
1416 
1417 		bacpy(&cp.bdaddr, &ev->bdaddr);
1418 		cp.reason = 0x0f;
1419 		hci_send_cmd(hdev, HCI_OP_REJECT_CONN_REQ, sizeof(cp), &cp);
1420 	}
1421 }
1422 
1423 static inline void hci_disconn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1424 {
1425 	struct hci_ev_disconn_complete *ev = (void *) skb->data;
1426 	struct hci_conn *conn;
1427 
1428 	BT_DBG("%s status %d", hdev->name, ev->status);
1429 
1430 	if (ev->status) {
1431 		mgmt_disconnect_failed(hdev->id);
1432 		return;
1433 	}
1434 
1435 	hci_dev_lock(hdev);
1436 
1437 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1438 	if (!conn)
1439 		goto unlock;
1440 
1441 	conn->state = BT_CLOSED;
1442 
1443 	if (conn->type == ACL_LINK || conn->type == LE_LINK)
1444 		mgmt_disconnected(hdev->id, &conn->dst);
1445 
1446 	hci_proto_disconn_cfm(conn, ev->reason);
1447 	hci_conn_del(conn);
1448 
1449 unlock:
1450 	hci_dev_unlock(hdev);
1451 }
1452 
1453 static inline void hci_auth_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1454 {
1455 	struct hci_ev_auth_complete *ev = (void *) skb->data;
1456 	struct hci_conn *conn;
1457 
1458 	BT_DBG("%s status %d", hdev->name, ev->status);
1459 
1460 	hci_dev_lock(hdev);
1461 
1462 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1463 	if (conn) {
1464 		if (!ev->status) {
1465 			conn->link_mode |= HCI_LM_AUTH;
1466 			conn->sec_level = conn->pending_sec_level;
1467 		} else {
1468 			mgmt_auth_failed(hdev->id, &conn->dst, ev->status);
1469 		}
1470 
1471 		clear_bit(HCI_CONN_AUTH_PEND, &conn->pend);
1472 
1473 		if (conn->state == BT_CONFIG) {
1474 			if (!ev->status && hdev->ssp_mode > 0 &&
1475 							conn->ssp_mode > 0) {
1476 				struct hci_cp_set_conn_encrypt cp;
1477 				cp.handle  = ev->handle;
1478 				cp.encrypt = 0x01;
1479 				hci_send_cmd(hdev, HCI_OP_SET_CONN_ENCRYPT,
1480 							sizeof(cp), &cp);
1481 			} else {
1482 				conn->state = BT_CONNECTED;
1483 				hci_proto_connect_cfm(conn, ev->status);
1484 				hci_conn_put(conn);
1485 			}
1486 		} else {
1487 			hci_auth_cfm(conn, ev->status);
1488 
1489 			hci_conn_hold(conn);
1490 			conn->disc_timeout = HCI_DISCONN_TIMEOUT;
1491 			hci_conn_put(conn);
1492 		}
1493 
1494 		if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend)) {
1495 			if (!ev->status) {
1496 				struct hci_cp_set_conn_encrypt cp;
1497 				cp.handle  = ev->handle;
1498 				cp.encrypt = 0x01;
1499 				hci_send_cmd(hdev, HCI_OP_SET_CONN_ENCRYPT,
1500 							sizeof(cp), &cp);
1501 			} else {
1502 				clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend);
1503 				hci_encrypt_cfm(conn, ev->status, 0x00);
1504 			}
1505 		}
1506 	}
1507 
1508 	hci_dev_unlock(hdev);
1509 }
1510 
1511 static inline void hci_remote_name_evt(struct hci_dev *hdev, struct sk_buff *skb)
1512 {
1513 	struct hci_ev_remote_name *ev = (void *) skb->data;
1514 	struct hci_conn *conn;
1515 
1516 	BT_DBG("%s", hdev->name);
1517 
1518 	hci_conn_check_pending(hdev);
1519 
1520 	hci_dev_lock(hdev);
1521 
1522 	if (ev->status == 0 && test_bit(HCI_MGMT, &hdev->flags))
1523 		mgmt_remote_name(hdev->id, &ev->bdaddr, ev->name);
1524 
1525 	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
1526 	if (!conn)
1527 		goto unlock;
1528 
1529 	if (!hci_outgoing_auth_needed(hdev, conn))
1530 		goto unlock;
1531 
1532 	if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->pend)) {
1533 		struct hci_cp_auth_requested cp;
1534 		cp.handle = __cpu_to_le16(conn->handle);
1535 		hci_send_cmd(hdev, HCI_OP_AUTH_REQUESTED, sizeof(cp), &cp);
1536 	}
1537 
1538 unlock:
1539 	hci_dev_unlock(hdev);
1540 }
1541 
1542 static inline void hci_encrypt_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
1543 {
1544 	struct hci_ev_encrypt_change *ev = (void *) skb->data;
1545 	struct hci_conn *conn;
1546 
1547 	BT_DBG("%s status %d", hdev->name, ev->status);
1548 
1549 	hci_dev_lock(hdev);
1550 
1551 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1552 	if (conn) {
1553 		if (!ev->status) {
1554 			if (ev->encrypt) {
1555 				/* Encryption implies authentication */
1556 				conn->link_mode |= HCI_LM_AUTH;
1557 				conn->link_mode |= HCI_LM_ENCRYPT;
1558 			} else
1559 				conn->link_mode &= ~HCI_LM_ENCRYPT;
1560 		}
1561 
1562 		clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend);
1563 
1564 		if (conn->state == BT_CONFIG) {
1565 			if (!ev->status)
1566 				conn->state = BT_CONNECTED;
1567 
1568 			hci_proto_connect_cfm(conn, ev->status);
1569 			hci_conn_put(conn);
1570 		} else
1571 			hci_encrypt_cfm(conn, ev->status, ev->encrypt);
1572 	}
1573 
1574 	hci_dev_unlock(hdev);
1575 }
1576 
1577 static inline void hci_change_link_key_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1578 {
1579 	struct hci_ev_change_link_key_complete *ev = (void *) skb->data;
1580 	struct hci_conn *conn;
1581 
1582 	BT_DBG("%s status %d", hdev->name, ev->status);
1583 
1584 	hci_dev_lock(hdev);
1585 
1586 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1587 	if (conn) {
1588 		if (!ev->status)
1589 			conn->link_mode |= HCI_LM_SECURE;
1590 
1591 		clear_bit(HCI_CONN_AUTH_PEND, &conn->pend);
1592 
1593 		hci_key_change_cfm(conn, ev->status);
1594 	}
1595 
1596 	hci_dev_unlock(hdev);
1597 }
1598 
1599 static inline void hci_remote_features_evt(struct hci_dev *hdev, struct sk_buff *skb)
1600 {
1601 	struct hci_ev_remote_features *ev = (void *) skb->data;
1602 	struct hci_conn *conn;
1603 
1604 	BT_DBG("%s status %d", hdev->name, ev->status);
1605 
1606 	hci_dev_lock(hdev);
1607 
1608 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1609 	if (!conn)
1610 		goto unlock;
1611 
1612 	if (!ev->status)
1613 		memcpy(conn->features, ev->features, 8);
1614 
1615 	if (conn->state != BT_CONFIG)
1616 		goto unlock;
1617 
1618 	if (!ev->status && lmp_ssp_capable(hdev) && lmp_ssp_capable(conn)) {
1619 		struct hci_cp_read_remote_ext_features cp;
1620 		cp.handle = ev->handle;
1621 		cp.page = 0x01;
1622 		hci_send_cmd(hdev, HCI_OP_READ_REMOTE_EXT_FEATURES,
1623 							sizeof(cp), &cp);
1624 		goto unlock;
1625 	}
1626 
1627 	if (!ev->status) {
1628 		struct hci_cp_remote_name_req cp;
1629 		memset(&cp, 0, sizeof(cp));
1630 		bacpy(&cp.bdaddr, &conn->dst);
1631 		cp.pscan_rep_mode = 0x02;
1632 		hci_send_cmd(hdev, HCI_OP_REMOTE_NAME_REQ, sizeof(cp), &cp);
1633 	}
1634 
1635 	if (!hci_outgoing_auth_needed(hdev, conn)) {
1636 		conn->state = BT_CONNECTED;
1637 		hci_proto_connect_cfm(conn, ev->status);
1638 		hci_conn_put(conn);
1639 	}
1640 
1641 unlock:
1642 	hci_dev_unlock(hdev);
1643 }
1644 
1645 static inline void hci_remote_version_evt(struct hci_dev *hdev, struct sk_buff *skb)
1646 {
1647 	BT_DBG("%s", hdev->name);
1648 }
1649 
1650 static inline void hci_qos_setup_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1651 {
1652 	BT_DBG("%s", hdev->name);
1653 }
1654 
1655 static inline void hci_cmd_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1656 {
1657 	struct hci_ev_cmd_complete *ev = (void *) skb->data;
1658 	__u16 opcode;
1659 
1660 	skb_pull(skb, sizeof(*ev));
1661 
1662 	opcode = __le16_to_cpu(ev->opcode);
1663 
1664 	switch (opcode) {
1665 	case HCI_OP_INQUIRY_CANCEL:
1666 		hci_cc_inquiry_cancel(hdev, skb);
1667 		break;
1668 
1669 	case HCI_OP_EXIT_PERIODIC_INQ:
1670 		hci_cc_exit_periodic_inq(hdev, skb);
1671 		break;
1672 
1673 	case HCI_OP_REMOTE_NAME_REQ_CANCEL:
1674 		hci_cc_remote_name_req_cancel(hdev, skb);
1675 		break;
1676 
1677 	case HCI_OP_ROLE_DISCOVERY:
1678 		hci_cc_role_discovery(hdev, skb);
1679 		break;
1680 
1681 	case HCI_OP_READ_LINK_POLICY:
1682 		hci_cc_read_link_policy(hdev, skb);
1683 		break;
1684 
1685 	case HCI_OP_WRITE_LINK_POLICY:
1686 		hci_cc_write_link_policy(hdev, skb);
1687 		break;
1688 
1689 	case HCI_OP_READ_DEF_LINK_POLICY:
1690 		hci_cc_read_def_link_policy(hdev, skb);
1691 		break;
1692 
1693 	case HCI_OP_WRITE_DEF_LINK_POLICY:
1694 		hci_cc_write_def_link_policy(hdev, skb);
1695 		break;
1696 
1697 	case HCI_OP_RESET:
1698 		hci_cc_reset(hdev, skb);
1699 		break;
1700 
1701 	case HCI_OP_WRITE_LOCAL_NAME:
1702 		hci_cc_write_local_name(hdev, skb);
1703 		break;
1704 
1705 	case HCI_OP_READ_LOCAL_NAME:
1706 		hci_cc_read_local_name(hdev, skb);
1707 		break;
1708 
1709 	case HCI_OP_WRITE_AUTH_ENABLE:
1710 		hci_cc_write_auth_enable(hdev, skb);
1711 		break;
1712 
1713 	case HCI_OP_WRITE_ENCRYPT_MODE:
1714 		hci_cc_write_encrypt_mode(hdev, skb);
1715 		break;
1716 
1717 	case HCI_OP_WRITE_SCAN_ENABLE:
1718 		hci_cc_write_scan_enable(hdev, skb);
1719 		break;
1720 
1721 	case HCI_OP_READ_CLASS_OF_DEV:
1722 		hci_cc_read_class_of_dev(hdev, skb);
1723 		break;
1724 
1725 	case HCI_OP_WRITE_CLASS_OF_DEV:
1726 		hci_cc_write_class_of_dev(hdev, skb);
1727 		break;
1728 
1729 	case HCI_OP_READ_VOICE_SETTING:
1730 		hci_cc_read_voice_setting(hdev, skb);
1731 		break;
1732 
1733 	case HCI_OP_WRITE_VOICE_SETTING:
1734 		hci_cc_write_voice_setting(hdev, skb);
1735 		break;
1736 
1737 	case HCI_OP_HOST_BUFFER_SIZE:
1738 		hci_cc_host_buffer_size(hdev, skb);
1739 		break;
1740 
1741 	case HCI_OP_READ_SSP_MODE:
1742 		hci_cc_read_ssp_mode(hdev, skb);
1743 		break;
1744 
1745 	case HCI_OP_WRITE_SSP_MODE:
1746 		hci_cc_write_ssp_mode(hdev, skb);
1747 		break;
1748 
1749 	case HCI_OP_READ_LOCAL_VERSION:
1750 		hci_cc_read_local_version(hdev, skb);
1751 		break;
1752 
1753 	case HCI_OP_READ_LOCAL_COMMANDS:
1754 		hci_cc_read_local_commands(hdev, skb);
1755 		break;
1756 
1757 	case HCI_OP_READ_LOCAL_FEATURES:
1758 		hci_cc_read_local_features(hdev, skb);
1759 		break;
1760 
1761 	case HCI_OP_READ_BUFFER_SIZE:
1762 		hci_cc_read_buffer_size(hdev, skb);
1763 		break;
1764 
1765 	case HCI_OP_READ_BD_ADDR:
1766 		hci_cc_read_bd_addr(hdev, skb);
1767 		break;
1768 
1769 	case HCI_OP_WRITE_CA_TIMEOUT:
1770 		hci_cc_write_ca_timeout(hdev, skb);
1771 		break;
1772 
1773 	case HCI_OP_DELETE_STORED_LINK_KEY:
1774 		hci_cc_delete_stored_link_key(hdev, skb);
1775 		break;
1776 
1777 	case HCI_OP_SET_EVENT_MASK:
1778 		hci_cc_set_event_mask(hdev, skb);
1779 		break;
1780 
1781 	case HCI_OP_WRITE_INQUIRY_MODE:
1782 		hci_cc_write_inquiry_mode(hdev, skb);
1783 		break;
1784 
1785 	case HCI_OP_READ_INQ_RSP_TX_POWER:
1786 		hci_cc_read_inq_rsp_tx_power(hdev, skb);
1787 		break;
1788 
1789 	case HCI_OP_SET_EVENT_FLT:
1790 		hci_cc_set_event_flt(hdev, skb);
1791 		break;
1792 
1793 	case HCI_OP_PIN_CODE_REPLY:
1794 		hci_cc_pin_code_reply(hdev, skb);
1795 		break;
1796 
1797 	case HCI_OP_PIN_CODE_NEG_REPLY:
1798 		hci_cc_pin_code_neg_reply(hdev, skb);
1799 		break;
1800 
1801 	case HCI_OP_READ_LOCAL_OOB_DATA:
1802 		hci_cc_read_local_oob_data_reply(hdev, skb);
1803 		break;
1804 
1805 	case HCI_OP_LE_READ_BUFFER_SIZE:
1806 		hci_cc_le_read_buffer_size(hdev, skb);
1807 		break;
1808 
1809 	case HCI_OP_USER_CONFIRM_REPLY:
1810 		hci_cc_user_confirm_reply(hdev, skb);
1811 		break;
1812 
1813 	case HCI_OP_USER_CONFIRM_NEG_REPLY:
1814 		hci_cc_user_confirm_neg_reply(hdev, skb);
1815 		break;
1816 
1817 	default:
1818 		BT_DBG("%s opcode 0x%x", hdev->name, opcode);
1819 		break;
1820 	}
1821 
1822 	if (ev->opcode != HCI_OP_NOP)
1823 		del_timer(&hdev->cmd_timer);
1824 
1825 	if (ev->ncmd) {
1826 		atomic_set(&hdev->cmd_cnt, 1);
1827 		if (!skb_queue_empty(&hdev->cmd_q))
1828 			tasklet_schedule(&hdev->cmd_task);
1829 	}
1830 }
1831 
1832 static inline void hci_cmd_status_evt(struct hci_dev *hdev, struct sk_buff *skb)
1833 {
1834 	struct hci_ev_cmd_status *ev = (void *) skb->data;
1835 	__u16 opcode;
1836 
1837 	skb_pull(skb, sizeof(*ev));
1838 
1839 	opcode = __le16_to_cpu(ev->opcode);
1840 
1841 	switch (opcode) {
1842 	case HCI_OP_INQUIRY:
1843 		hci_cs_inquiry(hdev, ev->status);
1844 		break;
1845 
1846 	case HCI_OP_CREATE_CONN:
1847 		hci_cs_create_conn(hdev, ev->status);
1848 		break;
1849 
1850 	case HCI_OP_ADD_SCO:
1851 		hci_cs_add_sco(hdev, ev->status);
1852 		break;
1853 
1854 	case HCI_OP_AUTH_REQUESTED:
1855 		hci_cs_auth_requested(hdev, ev->status);
1856 		break;
1857 
1858 	case HCI_OP_SET_CONN_ENCRYPT:
1859 		hci_cs_set_conn_encrypt(hdev, ev->status);
1860 		break;
1861 
1862 	case HCI_OP_REMOTE_NAME_REQ:
1863 		hci_cs_remote_name_req(hdev, ev->status);
1864 		break;
1865 
1866 	case HCI_OP_READ_REMOTE_FEATURES:
1867 		hci_cs_read_remote_features(hdev, ev->status);
1868 		break;
1869 
1870 	case HCI_OP_READ_REMOTE_EXT_FEATURES:
1871 		hci_cs_read_remote_ext_features(hdev, ev->status);
1872 		break;
1873 
1874 	case HCI_OP_SETUP_SYNC_CONN:
1875 		hci_cs_setup_sync_conn(hdev, ev->status);
1876 		break;
1877 
1878 	case HCI_OP_SNIFF_MODE:
1879 		hci_cs_sniff_mode(hdev, ev->status);
1880 		break;
1881 
1882 	case HCI_OP_EXIT_SNIFF_MODE:
1883 		hci_cs_exit_sniff_mode(hdev, ev->status);
1884 		break;
1885 
1886 	case HCI_OP_DISCONNECT:
1887 		if (ev->status != 0)
1888 			mgmt_disconnect_failed(hdev->id);
1889 		break;
1890 
1891 	case HCI_OP_LE_CREATE_CONN:
1892 		hci_cs_le_create_conn(hdev, ev->status);
1893 		break;
1894 
1895 	default:
1896 		BT_DBG("%s opcode 0x%x", hdev->name, opcode);
1897 		break;
1898 	}
1899 
1900 	if (ev->opcode != HCI_OP_NOP)
1901 		del_timer(&hdev->cmd_timer);
1902 
1903 	if (ev->ncmd && !test_bit(HCI_RESET, &hdev->flags)) {
1904 		atomic_set(&hdev->cmd_cnt, 1);
1905 		if (!skb_queue_empty(&hdev->cmd_q))
1906 			tasklet_schedule(&hdev->cmd_task);
1907 	}
1908 }
1909 
1910 static inline void hci_role_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
1911 {
1912 	struct hci_ev_role_change *ev = (void *) skb->data;
1913 	struct hci_conn *conn;
1914 
1915 	BT_DBG("%s status %d", hdev->name, ev->status);
1916 
1917 	hci_dev_lock(hdev);
1918 
1919 	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
1920 	if (conn) {
1921 		if (!ev->status) {
1922 			if (ev->role)
1923 				conn->link_mode &= ~HCI_LM_MASTER;
1924 			else
1925 				conn->link_mode |= HCI_LM_MASTER;
1926 		}
1927 
1928 		clear_bit(HCI_CONN_RSWITCH_PEND, &conn->pend);
1929 
1930 		hci_role_switch_cfm(conn, ev->status, ev->role);
1931 	}
1932 
1933 	hci_dev_unlock(hdev);
1934 }
1935 
1936 static inline void hci_num_comp_pkts_evt(struct hci_dev *hdev, struct sk_buff *skb)
1937 {
1938 	struct hci_ev_num_comp_pkts *ev = (void *) skb->data;
1939 	__le16 *ptr;
1940 	int i;
1941 
1942 	skb_pull(skb, sizeof(*ev));
1943 
1944 	BT_DBG("%s num_hndl %d", hdev->name, ev->num_hndl);
1945 
1946 	if (skb->len < ev->num_hndl * 4) {
1947 		BT_DBG("%s bad parameters", hdev->name);
1948 		return;
1949 	}
1950 
1951 	tasklet_disable(&hdev->tx_task);
1952 
1953 	for (i = 0, ptr = (__le16 *) skb->data; i < ev->num_hndl; i++) {
1954 		struct hci_conn *conn;
1955 		__u16  handle, count;
1956 
1957 		handle = get_unaligned_le16(ptr++);
1958 		count  = get_unaligned_le16(ptr++);
1959 
1960 		conn = hci_conn_hash_lookup_handle(hdev, handle);
1961 		if (conn) {
1962 			conn->sent -= count;
1963 
1964 			if (conn->type == ACL_LINK) {
1965 				hdev->acl_cnt += count;
1966 				if (hdev->acl_cnt > hdev->acl_pkts)
1967 					hdev->acl_cnt = hdev->acl_pkts;
1968 			} else if (conn->type == LE_LINK) {
1969 				if (hdev->le_pkts) {
1970 					hdev->le_cnt += count;
1971 					if (hdev->le_cnt > hdev->le_pkts)
1972 						hdev->le_cnt = hdev->le_pkts;
1973 				} else {
1974 					hdev->acl_cnt += count;
1975 					if (hdev->acl_cnt > hdev->acl_pkts)
1976 						hdev->acl_cnt = hdev->acl_pkts;
1977 				}
1978 			} else {
1979 				hdev->sco_cnt += count;
1980 				if (hdev->sco_cnt > hdev->sco_pkts)
1981 					hdev->sco_cnt = hdev->sco_pkts;
1982 			}
1983 		}
1984 	}
1985 
1986 	tasklet_schedule(&hdev->tx_task);
1987 
1988 	tasklet_enable(&hdev->tx_task);
1989 }
1990 
1991 static inline void hci_mode_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
1992 {
1993 	struct hci_ev_mode_change *ev = (void *) skb->data;
1994 	struct hci_conn *conn;
1995 
1996 	BT_DBG("%s status %d", hdev->name, ev->status);
1997 
1998 	hci_dev_lock(hdev);
1999 
2000 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2001 	if (conn) {
2002 		conn->mode = ev->mode;
2003 		conn->interval = __le16_to_cpu(ev->interval);
2004 
2005 		if (!test_and_clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend)) {
2006 			if (conn->mode == HCI_CM_ACTIVE)
2007 				conn->power_save = 1;
2008 			else
2009 				conn->power_save = 0;
2010 		}
2011 
2012 		if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->pend))
2013 			hci_sco_setup(conn, ev->status);
2014 	}
2015 
2016 	hci_dev_unlock(hdev);
2017 }
2018 
2019 static inline void hci_pin_code_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
2020 {
2021 	struct hci_ev_pin_code_req *ev = (void *) skb->data;
2022 	struct hci_conn *conn;
2023 
2024 	BT_DBG("%s", hdev->name);
2025 
2026 	hci_dev_lock(hdev);
2027 
2028 	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
2029 	if (conn && conn->state == BT_CONNECTED) {
2030 		hci_conn_hold(conn);
2031 		conn->disc_timeout = HCI_PAIRING_TIMEOUT;
2032 		hci_conn_put(conn);
2033 	}
2034 
2035 	if (!test_bit(HCI_PAIRABLE, &hdev->flags))
2036 		hci_send_cmd(hdev, HCI_OP_PIN_CODE_NEG_REPLY,
2037 					sizeof(ev->bdaddr), &ev->bdaddr);
2038 	else if (test_bit(HCI_MGMT, &hdev->flags)) {
2039 		u8 secure;
2040 
2041 		if (conn->pending_sec_level == BT_SECURITY_HIGH)
2042 			secure = 1;
2043 		else
2044 			secure = 0;
2045 
2046 		mgmt_pin_code_request(hdev->id, &ev->bdaddr, secure);
2047 	}
2048 
2049 	hci_dev_unlock(hdev);
2050 }
2051 
2052 static inline void hci_link_key_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
2053 {
2054 	struct hci_ev_link_key_req *ev = (void *) skb->data;
2055 	struct hci_cp_link_key_reply cp;
2056 	struct hci_conn *conn;
2057 	struct link_key *key;
2058 
2059 	BT_DBG("%s", hdev->name);
2060 
2061 	if (!test_bit(HCI_LINK_KEYS, &hdev->flags))
2062 		return;
2063 
2064 	hci_dev_lock(hdev);
2065 
2066 	key = hci_find_link_key(hdev, &ev->bdaddr);
2067 	if (!key) {
2068 		BT_DBG("%s link key not found for %s", hdev->name,
2069 							batostr(&ev->bdaddr));
2070 		goto not_found;
2071 	}
2072 
2073 	BT_DBG("%s found key type %u for %s", hdev->name, key->type,
2074 							batostr(&ev->bdaddr));
2075 
2076 	if (!test_bit(HCI_DEBUG_KEYS, &hdev->flags) &&
2077 				key->type == HCI_LK_DEBUG_COMBINATION) {
2078 		BT_DBG("%s ignoring debug key", hdev->name);
2079 		goto not_found;
2080 	}
2081 
2082 	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
2083 	if (conn) {
2084 		if (key->type == HCI_LK_UNAUTH_COMBINATION &&
2085 				conn->auth_type != 0xff &&
2086 				(conn->auth_type & 0x01)) {
2087 			BT_DBG("%s ignoring unauthenticated key", hdev->name);
2088 			goto not_found;
2089 		}
2090 
2091 		if (key->type == HCI_LK_COMBINATION && key->pin_len < 16 &&
2092 				conn->pending_sec_level == BT_SECURITY_HIGH) {
2093 			BT_DBG("%s ignoring key unauthenticated for high \
2094 							security", hdev->name);
2095 			goto not_found;
2096 		}
2097 
2098 		conn->key_type = key->type;
2099 		conn->pin_length = key->pin_len;
2100 	}
2101 
2102 	bacpy(&cp.bdaddr, &ev->bdaddr);
2103 	memcpy(cp.link_key, key->val, 16);
2104 
2105 	hci_send_cmd(hdev, HCI_OP_LINK_KEY_REPLY, sizeof(cp), &cp);
2106 
2107 	hci_dev_unlock(hdev);
2108 
2109 	return;
2110 
2111 not_found:
2112 	hci_send_cmd(hdev, HCI_OP_LINK_KEY_NEG_REPLY, 6, &ev->bdaddr);
2113 	hci_dev_unlock(hdev);
2114 }
2115 
2116 static inline void hci_link_key_notify_evt(struct hci_dev *hdev, struct sk_buff *skb)
2117 {
2118 	struct hci_ev_link_key_notify *ev = (void *) skb->data;
2119 	struct hci_conn *conn;
2120 	u8 pin_len = 0;
2121 
2122 	BT_DBG("%s", hdev->name);
2123 
2124 	hci_dev_lock(hdev);
2125 
2126 	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
2127 	if (conn) {
2128 		hci_conn_hold(conn);
2129 		conn->disc_timeout = HCI_DISCONN_TIMEOUT;
2130 		pin_len = conn->pin_length;
2131 
2132 		if (ev->key_type != HCI_LK_CHANGED_COMBINATION)
2133 			conn->key_type = ev->key_type;
2134 
2135 		hci_conn_put(conn);
2136 	}
2137 
2138 	if (test_bit(HCI_LINK_KEYS, &hdev->flags))
2139 		hci_add_link_key(hdev, conn, 1, &ev->bdaddr, ev->link_key,
2140 							ev->key_type, pin_len);
2141 
2142 	hci_dev_unlock(hdev);
2143 }
2144 
2145 static inline void hci_clock_offset_evt(struct hci_dev *hdev, struct sk_buff *skb)
2146 {
2147 	struct hci_ev_clock_offset *ev = (void *) skb->data;
2148 	struct hci_conn *conn;
2149 
2150 	BT_DBG("%s status %d", hdev->name, ev->status);
2151 
2152 	hci_dev_lock(hdev);
2153 
2154 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2155 	if (conn && !ev->status) {
2156 		struct inquiry_entry *ie;
2157 
2158 		ie = hci_inquiry_cache_lookup(hdev, &conn->dst);
2159 		if (ie) {
2160 			ie->data.clock_offset = ev->clock_offset;
2161 			ie->timestamp = jiffies;
2162 		}
2163 	}
2164 
2165 	hci_dev_unlock(hdev);
2166 }
2167 
2168 static inline void hci_pkt_type_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
2169 {
2170 	struct hci_ev_pkt_type_change *ev = (void *) skb->data;
2171 	struct hci_conn *conn;
2172 
2173 	BT_DBG("%s status %d", hdev->name, ev->status);
2174 
2175 	hci_dev_lock(hdev);
2176 
2177 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2178 	if (conn && !ev->status)
2179 		conn->pkt_type = __le16_to_cpu(ev->pkt_type);
2180 
2181 	hci_dev_unlock(hdev);
2182 }
2183 
2184 static inline void hci_pscan_rep_mode_evt(struct hci_dev *hdev, struct sk_buff *skb)
2185 {
2186 	struct hci_ev_pscan_rep_mode *ev = (void *) skb->data;
2187 	struct inquiry_entry *ie;
2188 
2189 	BT_DBG("%s", hdev->name);
2190 
2191 	hci_dev_lock(hdev);
2192 
2193 	ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr);
2194 	if (ie) {
2195 		ie->data.pscan_rep_mode = ev->pscan_rep_mode;
2196 		ie->timestamp = jiffies;
2197 	}
2198 
2199 	hci_dev_unlock(hdev);
2200 }
2201 
2202 static inline void hci_inquiry_result_with_rssi_evt(struct hci_dev *hdev, struct sk_buff *skb)
2203 {
2204 	struct inquiry_data data;
2205 	int num_rsp = *((__u8 *) skb->data);
2206 
2207 	BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
2208 
2209 	if (!num_rsp)
2210 		return;
2211 
2212 	hci_dev_lock(hdev);
2213 
2214 	if (!test_and_set_bit(HCI_INQUIRY, &hdev->flags)) {
2215 
2216 		if (test_bit(HCI_MGMT, &hdev->flags))
2217 			mgmt_discovering(hdev->id, 1);
2218 	}
2219 
2220 	if ((skb->len - 1) / num_rsp != sizeof(struct inquiry_info_with_rssi)) {
2221 		struct inquiry_info_with_rssi_and_pscan_mode *info;
2222 		info = (void *) (skb->data + 1);
2223 
2224 		for (; num_rsp; num_rsp--, info++) {
2225 			bacpy(&data.bdaddr, &info->bdaddr);
2226 			data.pscan_rep_mode	= info->pscan_rep_mode;
2227 			data.pscan_period_mode	= info->pscan_period_mode;
2228 			data.pscan_mode		= info->pscan_mode;
2229 			memcpy(data.dev_class, info->dev_class, 3);
2230 			data.clock_offset	= info->clock_offset;
2231 			data.rssi		= info->rssi;
2232 			data.ssp_mode		= 0x00;
2233 			hci_inquiry_cache_update(hdev, &data);
2234 			mgmt_device_found(hdev->id, &info->bdaddr,
2235 						info->dev_class, info->rssi,
2236 						NULL);
2237 		}
2238 	} else {
2239 		struct inquiry_info_with_rssi *info = (void *) (skb->data + 1);
2240 
2241 		for (; num_rsp; num_rsp--, info++) {
2242 			bacpy(&data.bdaddr, &info->bdaddr);
2243 			data.pscan_rep_mode	= info->pscan_rep_mode;
2244 			data.pscan_period_mode	= info->pscan_period_mode;
2245 			data.pscan_mode		= 0x00;
2246 			memcpy(data.dev_class, info->dev_class, 3);
2247 			data.clock_offset	= info->clock_offset;
2248 			data.rssi		= info->rssi;
2249 			data.ssp_mode		= 0x00;
2250 			hci_inquiry_cache_update(hdev, &data);
2251 			mgmt_device_found(hdev->id, &info->bdaddr,
2252 						info->dev_class, info->rssi,
2253 						NULL);
2254 		}
2255 	}
2256 
2257 	hci_dev_unlock(hdev);
2258 }
2259 
2260 static inline void hci_remote_ext_features_evt(struct hci_dev *hdev, struct sk_buff *skb)
2261 {
2262 	struct hci_ev_remote_ext_features *ev = (void *) skb->data;
2263 	struct hci_conn *conn;
2264 
2265 	BT_DBG("%s", hdev->name);
2266 
2267 	hci_dev_lock(hdev);
2268 
2269 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2270 	if (!conn)
2271 		goto unlock;
2272 
2273 	if (!ev->status && ev->page == 0x01) {
2274 		struct inquiry_entry *ie;
2275 
2276 		ie = hci_inquiry_cache_lookup(hdev, &conn->dst);
2277 		if (ie)
2278 			ie->data.ssp_mode = (ev->features[0] & 0x01);
2279 
2280 		conn->ssp_mode = (ev->features[0] & 0x01);
2281 	}
2282 
2283 	if (conn->state != BT_CONFIG)
2284 		goto unlock;
2285 
2286 	if (!ev->status) {
2287 		struct hci_cp_remote_name_req cp;
2288 		memset(&cp, 0, sizeof(cp));
2289 		bacpy(&cp.bdaddr, &conn->dst);
2290 		cp.pscan_rep_mode = 0x02;
2291 		hci_send_cmd(hdev, HCI_OP_REMOTE_NAME_REQ, sizeof(cp), &cp);
2292 	}
2293 
2294 	if (!hci_outgoing_auth_needed(hdev, conn)) {
2295 		conn->state = BT_CONNECTED;
2296 		hci_proto_connect_cfm(conn, ev->status);
2297 		hci_conn_put(conn);
2298 	}
2299 
2300 unlock:
2301 	hci_dev_unlock(hdev);
2302 }
2303 
2304 static inline void hci_sync_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
2305 {
2306 	struct hci_ev_sync_conn_complete *ev = (void *) skb->data;
2307 	struct hci_conn *conn;
2308 
2309 	BT_DBG("%s status %d", hdev->name, ev->status);
2310 
2311 	hci_dev_lock(hdev);
2312 
2313 	conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
2314 	if (!conn) {
2315 		if (ev->link_type == ESCO_LINK)
2316 			goto unlock;
2317 
2318 		conn = hci_conn_hash_lookup_ba(hdev, ESCO_LINK, &ev->bdaddr);
2319 		if (!conn)
2320 			goto unlock;
2321 
2322 		conn->type = SCO_LINK;
2323 	}
2324 
2325 	switch (ev->status) {
2326 	case 0x00:
2327 		conn->handle = __le16_to_cpu(ev->handle);
2328 		conn->state  = BT_CONNECTED;
2329 
2330 		hci_conn_hold_device(conn);
2331 		hci_conn_add_sysfs(conn);
2332 		break;
2333 
2334 	case 0x11:	/* Unsupported Feature or Parameter Value */
2335 	case 0x1c:	/* SCO interval rejected */
2336 	case 0x1a:	/* Unsupported Remote Feature */
2337 	case 0x1f:	/* Unspecified error */
2338 		if (conn->out && conn->attempt < 2) {
2339 			conn->pkt_type = (hdev->esco_type & SCO_ESCO_MASK) |
2340 					(hdev->esco_type & EDR_ESCO_MASK);
2341 			hci_setup_sync(conn, conn->link->handle);
2342 			goto unlock;
2343 		}
2344 		/* fall through */
2345 
2346 	default:
2347 		conn->state = BT_CLOSED;
2348 		break;
2349 	}
2350 
2351 	hci_proto_connect_cfm(conn, ev->status);
2352 	if (ev->status)
2353 		hci_conn_del(conn);
2354 
2355 unlock:
2356 	hci_dev_unlock(hdev);
2357 }
2358 
2359 static inline void hci_sync_conn_changed_evt(struct hci_dev *hdev, struct sk_buff *skb)
2360 {
2361 	BT_DBG("%s", hdev->name);
2362 }
2363 
2364 static inline void hci_sniff_subrate_evt(struct hci_dev *hdev, struct sk_buff *skb)
2365 {
2366 	struct hci_ev_sniff_subrate *ev = (void *) skb->data;
2367 
2368 	BT_DBG("%s status %d", hdev->name, ev->status);
2369 }
2370 
2371 static inline void hci_extended_inquiry_result_evt(struct hci_dev *hdev, struct sk_buff *skb)
2372 {
2373 	struct inquiry_data data;
2374 	struct extended_inquiry_info *info = (void *) (skb->data + 1);
2375 	int num_rsp = *((__u8 *) skb->data);
2376 
2377 	BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
2378 
2379 	if (!num_rsp)
2380 		return;
2381 
2382 	if (!test_and_set_bit(HCI_INQUIRY, &hdev->flags)) {
2383 
2384 		if (test_bit(HCI_MGMT, &hdev->flags))
2385 			mgmt_discovering(hdev->id, 1);
2386 	}
2387 
2388 	hci_dev_lock(hdev);
2389 
2390 	for (; num_rsp; num_rsp--, info++) {
2391 		bacpy(&data.bdaddr, &info->bdaddr);
2392 		data.pscan_rep_mode	= info->pscan_rep_mode;
2393 		data.pscan_period_mode	= info->pscan_period_mode;
2394 		data.pscan_mode		= 0x00;
2395 		memcpy(data.dev_class, info->dev_class, 3);
2396 		data.clock_offset	= info->clock_offset;
2397 		data.rssi		= info->rssi;
2398 		data.ssp_mode		= 0x01;
2399 		hci_inquiry_cache_update(hdev, &data);
2400 		mgmt_device_found(hdev->id, &info->bdaddr, info->dev_class,
2401 						info->rssi, info->data);
2402 	}
2403 
2404 	hci_dev_unlock(hdev);
2405 }
2406 
2407 static inline u8 hci_get_auth_req(struct hci_conn *conn)
2408 {
2409 	/* If remote requests dedicated bonding follow that lead */
2410 	if (conn->remote_auth == 0x02 || conn->remote_auth == 0x03) {
2411 		/* If both remote and local IO capabilities allow MITM
2412 		 * protection then require it, otherwise don't */
2413 		if (conn->remote_cap == 0x03 || conn->io_capability == 0x03)
2414 			return 0x02;
2415 		else
2416 			return 0x03;
2417 	}
2418 
2419 	/* If remote requests no-bonding follow that lead */
2420 	if (conn->remote_auth == 0x00 || conn->remote_auth == 0x01)
2421 		return conn->remote_auth | (conn->auth_type & 0x01);
2422 
2423 	return conn->auth_type;
2424 }
2425 
2426 static inline void hci_io_capa_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
2427 {
2428 	struct hci_ev_io_capa_request *ev = (void *) skb->data;
2429 	struct hci_conn *conn;
2430 
2431 	BT_DBG("%s", hdev->name);
2432 
2433 	hci_dev_lock(hdev);
2434 
2435 	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
2436 	if (!conn)
2437 		goto unlock;
2438 
2439 	hci_conn_hold(conn);
2440 
2441 	if (!test_bit(HCI_MGMT, &hdev->flags))
2442 		goto unlock;
2443 
2444 	if (test_bit(HCI_PAIRABLE, &hdev->flags) ||
2445 			(conn->remote_auth & ~0x01) == HCI_AT_NO_BONDING) {
2446 		struct hci_cp_io_capability_reply cp;
2447 
2448 		bacpy(&cp.bdaddr, &ev->bdaddr);
2449 		cp.capability = conn->io_capability;
2450 		conn->auth_type = hci_get_auth_req(conn);
2451 		cp.authentication = conn->auth_type;
2452 
2453 		if ((conn->out == 0x01 || conn->remote_oob == 0x01) &&
2454 				hci_find_remote_oob_data(hdev, &conn->dst))
2455 			cp.oob_data = 0x01;
2456 		else
2457 			cp.oob_data = 0x00;
2458 
2459 		hci_send_cmd(hdev, HCI_OP_IO_CAPABILITY_REPLY,
2460 							sizeof(cp), &cp);
2461 	} else {
2462 		struct hci_cp_io_capability_neg_reply cp;
2463 
2464 		bacpy(&cp.bdaddr, &ev->bdaddr);
2465 		cp.reason = 0x18; /* Pairing not allowed */
2466 
2467 		hci_send_cmd(hdev, HCI_OP_IO_CAPABILITY_NEG_REPLY,
2468 							sizeof(cp), &cp);
2469 	}
2470 
2471 unlock:
2472 	hci_dev_unlock(hdev);
2473 }
2474 
2475 static inline void hci_io_capa_reply_evt(struct hci_dev *hdev, struct sk_buff *skb)
2476 {
2477 	struct hci_ev_io_capa_reply *ev = (void *) skb->data;
2478 	struct hci_conn *conn;
2479 
2480 	BT_DBG("%s", hdev->name);
2481 
2482 	hci_dev_lock(hdev);
2483 
2484 	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
2485 	if (!conn)
2486 		goto unlock;
2487 
2488 	conn->remote_cap = ev->capability;
2489 	conn->remote_oob = ev->oob_data;
2490 	conn->remote_auth = ev->authentication;
2491 
2492 unlock:
2493 	hci_dev_unlock(hdev);
2494 }
2495 
2496 static inline void hci_user_confirm_request_evt(struct hci_dev *hdev,
2497 							struct sk_buff *skb)
2498 {
2499 	struct hci_ev_user_confirm_req *ev = (void *) skb->data;
2500 	int loc_mitm, rem_mitm, confirm_hint = 0;
2501 	struct hci_conn *conn;
2502 
2503 	BT_DBG("%s", hdev->name);
2504 
2505 	hci_dev_lock(hdev);
2506 
2507 	if (!test_bit(HCI_MGMT, &hdev->flags))
2508 		goto unlock;
2509 
2510 	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
2511 	if (!conn)
2512 		goto unlock;
2513 
2514 	loc_mitm = (conn->auth_type & 0x01);
2515 	rem_mitm = (conn->remote_auth & 0x01);
2516 
2517 	/* If we require MITM but the remote device can't provide that
2518 	 * (it has NoInputNoOutput) then reject the confirmation
2519 	 * request. The only exception is when we're dedicated bonding
2520 	 * initiators (connect_cfm_cb set) since then we always have the MITM
2521 	 * bit set. */
2522 	if (!conn->connect_cfm_cb && loc_mitm && conn->remote_cap == 0x03) {
2523 		BT_DBG("Rejecting request: remote device can't provide MITM");
2524 		hci_send_cmd(hdev, HCI_OP_USER_CONFIRM_NEG_REPLY,
2525 					sizeof(ev->bdaddr), &ev->bdaddr);
2526 		goto unlock;
2527 	}
2528 
2529 	/* If no side requires MITM protection; auto-accept */
2530 	if ((!loc_mitm || conn->remote_cap == 0x03) &&
2531 				(!rem_mitm || conn->io_capability == 0x03)) {
2532 
2533 		/* If we're not the initiators request authorization to
2534 		 * proceed from user space (mgmt_user_confirm with
2535 		 * confirm_hint set to 1). */
2536 		if (!test_bit(HCI_CONN_AUTH_PEND, &conn->pend)) {
2537 			BT_DBG("Confirming auto-accept as acceptor");
2538 			confirm_hint = 1;
2539 			goto confirm;
2540 		}
2541 
2542 		BT_DBG("Auto-accept of user confirmation with %ums delay",
2543 						hdev->auto_accept_delay);
2544 
2545 		if (hdev->auto_accept_delay > 0) {
2546 			int delay = msecs_to_jiffies(hdev->auto_accept_delay);
2547 			mod_timer(&conn->auto_accept_timer, jiffies + delay);
2548 			goto unlock;
2549 		}
2550 
2551 		hci_send_cmd(hdev, HCI_OP_USER_CONFIRM_REPLY,
2552 						sizeof(ev->bdaddr), &ev->bdaddr);
2553 		goto unlock;
2554 	}
2555 
2556 confirm:
2557 	mgmt_user_confirm_request(hdev->id, &ev->bdaddr, ev->passkey,
2558 								confirm_hint);
2559 
2560 unlock:
2561 	hci_dev_unlock(hdev);
2562 }
2563 
2564 static inline void hci_simple_pair_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
2565 {
2566 	struct hci_ev_simple_pair_complete *ev = (void *) skb->data;
2567 	struct hci_conn *conn;
2568 
2569 	BT_DBG("%s", hdev->name);
2570 
2571 	hci_dev_lock(hdev);
2572 
2573 	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
2574 	if (!conn)
2575 		goto unlock;
2576 
2577 	/* To avoid duplicate auth_failed events to user space we check
2578 	 * the HCI_CONN_AUTH_PEND flag which will be set if we
2579 	 * initiated the authentication. A traditional auth_complete
2580 	 * event gets always produced as initiator and is also mapped to
2581 	 * the mgmt_auth_failed event */
2582 	if (!test_bit(HCI_CONN_AUTH_PEND, &conn->pend) && ev->status != 0)
2583 		mgmt_auth_failed(hdev->id, &conn->dst, ev->status);
2584 
2585 	hci_conn_put(conn);
2586 
2587 unlock:
2588 	hci_dev_unlock(hdev);
2589 }
2590 
2591 static inline void hci_remote_host_features_evt(struct hci_dev *hdev, struct sk_buff *skb)
2592 {
2593 	struct hci_ev_remote_host_features *ev = (void *) skb->data;
2594 	struct inquiry_entry *ie;
2595 
2596 	BT_DBG("%s", hdev->name);
2597 
2598 	hci_dev_lock(hdev);
2599 
2600 	ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr);
2601 	if (ie)
2602 		ie->data.ssp_mode = (ev->features[0] & 0x01);
2603 
2604 	hci_dev_unlock(hdev);
2605 }
2606 
2607 static inline void hci_remote_oob_data_request_evt(struct hci_dev *hdev,
2608 							struct sk_buff *skb)
2609 {
2610 	struct hci_ev_remote_oob_data_request *ev = (void *) skb->data;
2611 	struct oob_data *data;
2612 
2613 	BT_DBG("%s", hdev->name);
2614 
2615 	hci_dev_lock(hdev);
2616 
2617 	if (!test_bit(HCI_MGMT, &hdev->flags))
2618 		goto unlock;
2619 
2620 	data = hci_find_remote_oob_data(hdev, &ev->bdaddr);
2621 	if (data) {
2622 		struct hci_cp_remote_oob_data_reply cp;
2623 
2624 		bacpy(&cp.bdaddr, &ev->bdaddr);
2625 		memcpy(cp.hash, data->hash, sizeof(cp.hash));
2626 		memcpy(cp.randomizer, data->randomizer, sizeof(cp.randomizer));
2627 
2628 		hci_send_cmd(hdev, HCI_OP_REMOTE_OOB_DATA_REPLY, sizeof(cp),
2629 									&cp);
2630 	} else {
2631 		struct hci_cp_remote_oob_data_neg_reply cp;
2632 
2633 		bacpy(&cp.bdaddr, &ev->bdaddr);
2634 		hci_send_cmd(hdev, HCI_OP_REMOTE_OOB_DATA_NEG_REPLY, sizeof(cp),
2635 									&cp);
2636 	}
2637 
2638 unlock:
2639 	hci_dev_unlock(hdev);
2640 }
2641 
2642 static inline void hci_le_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
2643 {
2644 	struct hci_ev_le_conn_complete *ev = (void *) skb->data;
2645 	struct hci_conn *conn;
2646 
2647 	BT_DBG("%s status %d", hdev->name, ev->status);
2648 
2649 	hci_dev_lock(hdev);
2650 
2651 	conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, &ev->bdaddr);
2652 	if (!conn) {
2653 		conn = hci_conn_add(hdev, LE_LINK, &ev->bdaddr);
2654 		if (!conn) {
2655 			BT_ERR("No memory for new connection");
2656 			hci_dev_unlock(hdev);
2657 			return;
2658 		}
2659 	}
2660 
2661 	if (ev->status) {
2662 		mgmt_connect_failed(hdev->id, &ev->bdaddr, ev->status);
2663 		hci_proto_connect_cfm(conn, ev->status);
2664 		conn->state = BT_CLOSED;
2665 		hci_conn_del(conn);
2666 		goto unlock;
2667 	}
2668 
2669 	mgmt_connected(hdev->id, &ev->bdaddr);
2670 
2671 	conn->handle = __le16_to_cpu(ev->handle);
2672 	conn->state = BT_CONNECTED;
2673 
2674 	hci_conn_hold_device(conn);
2675 	hci_conn_add_sysfs(conn);
2676 
2677 	hci_proto_connect_cfm(conn, ev->status);
2678 
2679 unlock:
2680 	hci_dev_unlock(hdev);
2681 }
2682 
2683 static inline void hci_le_meta_evt(struct hci_dev *hdev, struct sk_buff *skb)
2684 {
2685 	struct hci_ev_le_meta *le_ev = (void *) skb->data;
2686 
2687 	skb_pull(skb, sizeof(*le_ev));
2688 
2689 	switch (le_ev->subevent) {
2690 	case HCI_EV_LE_CONN_COMPLETE:
2691 		hci_le_conn_complete_evt(hdev, skb);
2692 		break;
2693 
2694 	default:
2695 		break;
2696 	}
2697 }
2698 
2699 void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb)
2700 {
2701 	struct hci_event_hdr *hdr = (void *) skb->data;
2702 	__u8 event = hdr->evt;
2703 
2704 	skb_pull(skb, HCI_EVENT_HDR_SIZE);
2705 
2706 	switch (event) {
2707 	case HCI_EV_INQUIRY_COMPLETE:
2708 		hci_inquiry_complete_evt(hdev, skb);
2709 		break;
2710 
2711 	case HCI_EV_INQUIRY_RESULT:
2712 		hci_inquiry_result_evt(hdev, skb);
2713 		break;
2714 
2715 	case HCI_EV_CONN_COMPLETE:
2716 		hci_conn_complete_evt(hdev, skb);
2717 		break;
2718 
2719 	case HCI_EV_CONN_REQUEST:
2720 		hci_conn_request_evt(hdev, skb);
2721 		break;
2722 
2723 	case HCI_EV_DISCONN_COMPLETE:
2724 		hci_disconn_complete_evt(hdev, skb);
2725 		break;
2726 
2727 	case HCI_EV_AUTH_COMPLETE:
2728 		hci_auth_complete_evt(hdev, skb);
2729 		break;
2730 
2731 	case HCI_EV_REMOTE_NAME:
2732 		hci_remote_name_evt(hdev, skb);
2733 		break;
2734 
2735 	case HCI_EV_ENCRYPT_CHANGE:
2736 		hci_encrypt_change_evt(hdev, skb);
2737 		break;
2738 
2739 	case HCI_EV_CHANGE_LINK_KEY_COMPLETE:
2740 		hci_change_link_key_complete_evt(hdev, skb);
2741 		break;
2742 
2743 	case HCI_EV_REMOTE_FEATURES:
2744 		hci_remote_features_evt(hdev, skb);
2745 		break;
2746 
2747 	case HCI_EV_REMOTE_VERSION:
2748 		hci_remote_version_evt(hdev, skb);
2749 		break;
2750 
2751 	case HCI_EV_QOS_SETUP_COMPLETE:
2752 		hci_qos_setup_complete_evt(hdev, skb);
2753 		break;
2754 
2755 	case HCI_EV_CMD_COMPLETE:
2756 		hci_cmd_complete_evt(hdev, skb);
2757 		break;
2758 
2759 	case HCI_EV_CMD_STATUS:
2760 		hci_cmd_status_evt(hdev, skb);
2761 		break;
2762 
2763 	case HCI_EV_ROLE_CHANGE:
2764 		hci_role_change_evt(hdev, skb);
2765 		break;
2766 
2767 	case HCI_EV_NUM_COMP_PKTS:
2768 		hci_num_comp_pkts_evt(hdev, skb);
2769 		break;
2770 
2771 	case HCI_EV_MODE_CHANGE:
2772 		hci_mode_change_evt(hdev, skb);
2773 		break;
2774 
2775 	case HCI_EV_PIN_CODE_REQ:
2776 		hci_pin_code_request_evt(hdev, skb);
2777 		break;
2778 
2779 	case HCI_EV_LINK_KEY_REQ:
2780 		hci_link_key_request_evt(hdev, skb);
2781 		break;
2782 
2783 	case HCI_EV_LINK_KEY_NOTIFY:
2784 		hci_link_key_notify_evt(hdev, skb);
2785 		break;
2786 
2787 	case HCI_EV_CLOCK_OFFSET:
2788 		hci_clock_offset_evt(hdev, skb);
2789 		break;
2790 
2791 	case HCI_EV_PKT_TYPE_CHANGE:
2792 		hci_pkt_type_change_evt(hdev, skb);
2793 		break;
2794 
2795 	case HCI_EV_PSCAN_REP_MODE:
2796 		hci_pscan_rep_mode_evt(hdev, skb);
2797 		break;
2798 
2799 	case HCI_EV_INQUIRY_RESULT_WITH_RSSI:
2800 		hci_inquiry_result_with_rssi_evt(hdev, skb);
2801 		break;
2802 
2803 	case HCI_EV_REMOTE_EXT_FEATURES:
2804 		hci_remote_ext_features_evt(hdev, skb);
2805 		break;
2806 
2807 	case HCI_EV_SYNC_CONN_COMPLETE:
2808 		hci_sync_conn_complete_evt(hdev, skb);
2809 		break;
2810 
2811 	case HCI_EV_SYNC_CONN_CHANGED:
2812 		hci_sync_conn_changed_evt(hdev, skb);
2813 		break;
2814 
2815 	case HCI_EV_SNIFF_SUBRATE:
2816 		hci_sniff_subrate_evt(hdev, skb);
2817 		break;
2818 
2819 	case HCI_EV_EXTENDED_INQUIRY_RESULT:
2820 		hci_extended_inquiry_result_evt(hdev, skb);
2821 		break;
2822 
2823 	case HCI_EV_IO_CAPA_REQUEST:
2824 		hci_io_capa_request_evt(hdev, skb);
2825 		break;
2826 
2827 	case HCI_EV_IO_CAPA_REPLY:
2828 		hci_io_capa_reply_evt(hdev, skb);
2829 		break;
2830 
2831 	case HCI_EV_USER_CONFIRM_REQUEST:
2832 		hci_user_confirm_request_evt(hdev, skb);
2833 		break;
2834 
2835 	case HCI_EV_SIMPLE_PAIR_COMPLETE:
2836 		hci_simple_pair_complete_evt(hdev, skb);
2837 		break;
2838 
2839 	case HCI_EV_REMOTE_HOST_FEATURES:
2840 		hci_remote_host_features_evt(hdev, skb);
2841 		break;
2842 
2843 	case HCI_EV_LE_META:
2844 		hci_le_meta_evt(hdev, skb);
2845 		break;
2846 
2847 	case HCI_EV_REMOTE_OOB_DATA_REQUEST:
2848 		hci_remote_oob_data_request_evt(hdev, skb);
2849 		break;
2850 
2851 	default:
2852 		BT_DBG("%s event 0x%x", hdev->name, event);
2853 		break;
2854 	}
2855 
2856 	kfree_skb(skb);
2857 	hdev->stat.evt_rx++;
2858 }
2859 
2860 /* Generate internal stack event */
2861 void hci_si_event(struct hci_dev *hdev, int type, int dlen, void *data)
2862 {
2863 	struct hci_event_hdr *hdr;
2864 	struct hci_ev_stack_internal *ev;
2865 	struct sk_buff *skb;
2866 
2867 	skb = bt_skb_alloc(HCI_EVENT_HDR_SIZE + sizeof(*ev) + dlen, GFP_ATOMIC);
2868 	if (!skb)
2869 		return;
2870 
2871 	hdr = (void *) skb_put(skb, HCI_EVENT_HDR_SIZE);
2872 	hdr->evt  = HCI_EV_STACK_INTERNAL;
2873 	hdr->plen = sizeof(*ev) + dlen;
2874 
2875 	ev  = (void *) skb_put(skb, sizeof(*ev) + dlen);
2876 	ev->type = type;
2877 	memcpy(ev->data, data, dlen);
2878 
2879 	bt_cb(skb)->incoming = 1;
2880 	__net_timestamp(skb);
2881 
2882 	bt_cb(skb)->pkt_type = HCI_EVENT_PKT;
2883 	skb->dev = (void *) hdev;
2884 	hci_send_to_sock(hdev, skb, NULL);
2885 	kfree_skb(skb);
2886 }
2887