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