xref: /openbmc/linux/net/bluetooth/hci_event.c (revision 82ced6fd)
1 /*
2    BlueZ - Bluetooth protocol stack for Linux
3    Copyright (C) 2000-2001 Qualcomm Incorporated
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 <asm/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, 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, 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, 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, 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, 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 
278 		clear_bit(HCI_PSCAN, &hdev->flags);
279 		clear_bit(HCI_ISCAN, &hdev->flags);
280 
281 		if (param & SCAN_INQUIRY)
282 			set_bit(HCI_ISCAN, &hdev->flags);
283 
284 		if (param & SCAN_PAGE)
285 			set_bit(HCI_PSCAN, &hdev->flags);
286 	}
287 
288 	hci_req_complete(hdev, status);
289 }
290 
291 static void hci_cc_read_class_of_dev(struct hci_dev *hdev, struct sk_buff *skb)
292 {
293 	struct hci_rp_read_class_of_dev *rp = (void *) skb->data;
294 
295 	BT_DBG("%s status 0x%x", hdev->name, rp->status);
296 
297 	if (rp->status)
298 		return;
299 
300 	memcpy(hdev->dev_class, rp->dev_class, 3);
301 
302 	BT_DBG("%s class 0x%.2x%.2x%.2x", hdev->name,
303 		hdev->dev_class[2], hdev->dev_class[1], hdev->dev_class[0]);
304 }
305 
306 static void hci_cc_write_class_of_dev(struct hci_dev *hdev, struct sk_buff *skb)
307 {
308 	__u8 status = *((__u8 *) skb->data);
309 	void *sent;
310 
311 	BT_DBG("%s status 0x%x", hdev->name, status);
312 
313 	if (status)
314 		return;
315 
316 	sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_CLASS_OF_DEV);
317 	if (!sent)
318 		return;
319 
320 	memcpy(hdev->dev_class, sent, 3);
321 }
322 
323 static void hci_cc_read_voice_setting(struct hci_dev *hdev, struct sk_buff *skb)
324 {
325 	struct hci_rp_read_voice_setting *rp = (void *) skb->data;
326 	__u16 setting;
327 
328 	BT_DBG("%s status 0x%x", hdev->name, rp->status);
329 
330 	if (rp->status)
331 		return;
332 
333 	setting = __le16_to_cpu(rp->voice_setting);
334 
335 	if (hdev->voice_setting == setting)
336 		return;
337 
338 	hdev->voice_setting = setting;
339 
340 	BT_DBG("%s voice setting 0x%04x", hdev->name, setting);
341 
342 	if (hdev->notify) {
343 		tasklet_disable(&hdev->tx_task);
344 		hdev->notify(hdev, HCI_NOTIFY_VOICE_SETTING);
345 		tasklet_enable(&hdev->tx_task);
346 	}
347 }
348 
349 static void hci_cc_write_voice_setting(struct hci_dev *hdev, struct sk_buff *skb)
350 {
351 	__u8 status = *((__u8 *) skb->data);
352 	__u16 setting;
353 	void *sent;
354 
355 	BT_DBG("%s status 0x%x", hdev->name, status);
356 
357 	if (status)
358 		return;
359 
360 	sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_VOICE_SETTING);
361 	if (!sent)
362 		return;
363 
364 	setting = get_unaligned_le16(sent);
365 
366 	if (hdev->voice_setting == setting)
367 		return;
368 
369 	hdev->voice_setting = setting;
370 
371 	BT_DBG("%s voice setting 0x%04x", hdev->name, setting);
372 
373 	if (hdev->notify) {
374 		tasklet_disable(&hdev->tx_task);
375 		hdev->notify(hdev, HCI_NOTIFY_VOICE_SETTING);
376 		tasklet_enable(&hdev->tx_task);
377 	}
378 }
379 
380 static void hci_cc_host_buffer_size(struct hci_dev *hdev, struct sk_buff *skb)
381 {
382 	__u8 status = *((__u8 *) skb->data);
383 
384 	BT_DBG("%s status 0x%x", hdev->name, status);
385 
386 	hci_req_complete(hdev, status);
387 }
388 
389 static void hci_cc_read_ssp_mode(struct hci_dev *hdev, struct sk_buff *skb)
390 {
391 	struct hci_rp_read_ssp_mode *rp = (void *) skb->data;
392 
393 	BT_DBG("%s status 0x%x", hdev->name, rp->status);
394 
395 	if (rp->status)
396 		return;
397 
398 	hdev->ssp_mode = rp->mode;
399 }
400 
401 static void hci_cc_write_ssp_mode(struct hci_dev *hdev, struct sk_buff *skb)
402 {
403 	__u8 status = *((__u8 *) skb->data);
404 	void *sent;
405 
406 	BT_DBG("%s status 0x%x", hdev->name, status);
407 
408 	if (status)
409 		return;
410 
411 	sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_SSP_MODE);
412 	if (!sent)
413 		return;
414 
415 	hdev->ssp_mode = *((__u8 *) sent);
416 }
417 
418 static void hci_cc_read_local_version(struct hci_dev *hdev, struct sk_buff *skb)
419 {
420 	struct hci_rp_read_local_version *rp = (void *) skb->data;
421 
422 	BT_DBG("%s status 0x%x", hdev->name, rp->status);
423 
424 	if (rp->status)
425 		return;
426 
427 	hdev->hci_ver = rp->hci_ver;
428 	hdev->hci_rev = __le16_to_cpu(rp->hci_rev);
429 	hdev->manufacturer = __le16_to_cpu(rp->manufacturer);
430 
431 	BT_DBG("%s manufacturer %d hci ver %d:%d", hdev->name,
432 					hdev->manufacturer,
433 					hdev->hci_ver, hdev->hci_rev);
434 }
435 
436 static void hci_cc_read_local_commands(struct hci_dev *hdev, struct sk_buff *skb)
437 {
438 	struct hci_rp_read_local_commands *rp = (void *) skb->data;
439 
440 	BT_DBG("%s status 0x%x", hdev->name, rp->status);
441 
442 	if (rp->status)
443 		return;
444 
445 	memcpy(hdev->commands, rp->commands, sizeof(hdev->commands));
446 }
447 
448 static void hci_cc_read_local_features(struct hci_dev *hdev, struct sk_buff *skb)
449 {
450 	struct hci_rp_read_local_features *rp = (void *) skb->data;
451 
452 	BT_DBG("%s status 0x%x", hdev->name, rp->status);
453 
454 	if (rp->status)
455 		return;
456 
457 	memcpy(hdev->features, rp->features, 8);
458 
459 	/* Adjust default settings according to features
460 	 * supported by device. */
461 
462 	if (hdev->features[0] & LMP_3SLOT)
463 		hdev->pkt_type |= (HCI_DM3 | HCI_DH3);
464 
465 	if (hdev->features[0] & LMP_5SLOT)
466 		hdev->pkt_type |= (HCI_DM5 | HCI_DH5);
467 
468 	if (hdev->features[1] & LMP_HV2) {
469 		hdev->pkt_type  |= (HCI_HV2);
470 		hdev->esco_type |= (ESCO_HV2);
471 	}
472 
473 	if (hdev->features[1] & LMP_HV3) {
474 		hdev->pkt_type  |= (HCI_HV3);
475 		hdev->esco_type |= (ESCO_HV3);
476 	}
477 
478 	if (hdev->features[3] & LMP_ESCO)
479 		hdev->esco_type |= (ESCO_EV3);
480 
481 	if (hdev->features[4] & LMP_EV4)
482 		hdev->esco_type |= (ESCO_EV4);
483 
484 	if (hdev->features[4] & LMP_EV5)
485 		hdev->esco_type |= (ESCO_EV5);
486 
487 	if (hdev->features[5] & LMP_EDR_ESCO_2M)
488 		hdev->esco_type |= (ESCO_2EV3);
489 
490 	if (hdev->features[5] & LMP_EDR_ESCO_3M)
491 		hdev->esco_type |= (ESCO_3EV3);
492 
493 	if (hdev->features[5] & LMP_EDR_3S_ESCO)
494 		hdev->esco_type |= (ESCO_2EV5 | ESCO_3EV5);
495 
496 	BT_DBG("%s features 0x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x", hdev->name,
497 					hdev->features[0], hdev->features[1],
498 					hdev->features[2], hdev->features[3],
499 					hdev->features[4], hdev->features[5],
500 					hdev->features[6], hdev->features[7]);
501 }
502 
503 static void hci_cc_read_buffer_size(struct hci_dev *hdev, struct sk_buff *skb)
504 {
505 	struct hci_rp_read_buffer_size *rp = (void *) skb->data;
506 
507 	BT_DBG("%s status 0x%x", hdev->name, rp->status);
508 
509 	if (rp->status)
510 		return;
511 
512 	hdev->acl_mtu  = __le16_to_cpu(rp->acl_mtu);
513 	hdev->sco_mtu  = rp->sco_mtu;
514 	hdev->acl_pkts = __le16_to_cpu(rp->acl_max_pkt);
515 	hdev->sco_pkts = __le16_to_cpu(rp->sco_max_pkt);
516 
517 	if (test_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE, &hdev->quirks)) {
518 		hdev->sco_mtu  = 64;
519 		hdev->sco_pkts = 8;
520 	}
521 
522 	hdev->acl_cnt = hdev->acl_pkts;
523 	hdev->sco_cnt = hdev->sco_pkts;
524 
525 	BT_DBG("%s acl mtu %d:%d sco mtu %d:%d", hdev->name,
526 					hdev->acl_mtu, hdev->acl_pkts,
527 					hdev->sco_mtu, hdev->sco_pkts);
528 }
529 
530 static void hci_cc_read_bd_addr(struct hci_dev *hdev, struct sk_buff *skb)
531 {
532 	struct hci_rp_read_bd_addr *rp = (void *) skb->data;
533 
534 	BT_DBG("%s status 0x%x", hdev->name, rp->status);
535 
536 	if (!rp->status)
537 		bacpy(&hdev->bdaddr, &rp->bdaddr);
538 
539 	hci_req_complete(hdev, rp->status);
540 }
541 
542 static inline void hci_cs_inquiry(struct hci_dev *hdev, __u8 status)
543 {
544 	BT_DBG("%s status 0x%x", hdev->name, status);
545 
546 	if (status) {
547 		hci_req_complete(hdev, status);
548 
549 		hci_conn_check_pending(hdev);
550 	} else
551 		set_bit(HCI_INQUIRY, &hdev->flags);
552 }
553 
554 static inline void hci_cs_create_conn(struct hci_dev *hdev, __u8 status)
555 {
556 	struct hci_cp_create_conn *cp;
557 	struct hci_conn *conn;
558 
559 	BT_DBG("%s status 0x%x", hdev->name, status);
560 
561 	cp = hci_sent_cmd_data(hdev, HCI_OP_CREATE_CONN);
562 	if (!cp)
563 		return;
564 
565 	hci_dev_lock(hdev);
566 
567 	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
568 
569 	BT_DBG("%s bdaddr %s conn %p", hdev->name, batostr(&cp->bdaddr), conn);
570 
571 	if (status) {
572 		if (conn && conn->state == BT_CONNECT) {
573 			if (status != 0x0c || conn->attempt > 2) {
574 				conn->state = BT_CLOSED;
575 				hci_proto_connect_cfm(conn, status);
576 				hci_conn_del(conn);
577 			} else
578 				conn->state = BT_CONNECT2;
579 		}
580 	} else {
581 		if (!conn) {
582 			conn = hci_conn_add(hdev, ACL_LINK, &cp->bdaddr);
583 			if (conn) {
584 				conn->out = 1;
585 				conn->link_mode |= HCI_LM_MASTER;
586 			} else
587 				BT_ERR("No memmory for new connection");
588 		}
589 	}
590 
591 	hci_dev_unlock(hdev);
592 }
593 
594 static void hci_cs_add_sco(struct hci_dev *hdev, __u8 status)
595 {
596 	struct hci_cp_add_sco *cp;
597 	struct hci_conn *acl, *sco;
598 	__u16 handle;
599 
600 	BT_DBG("%s status 0x%x", hdev->name, status);
601 
602 	if (!status)
603 		return;
604 
605 	cp = hci_sent_cmd_data(hdev, HCI_OP_ADD_SCO);
606 	if (!cp)
607 		return;
608 
609 	handle = __le16_to_cpu(cp->handle);
610 
611 	BT_DBG("%s handle %d", hdev->name, handle);
612 
613 	hci_dev_lock(hdev);
614 
615 	acl = hci_conn_hash_lookup_handle(hdev, handle);
616 	if (acl && (sco = acl->link)) {
617 		sco->state = BT_CLOSED;
618 
619 		hci_proto_connect_cfm(sco, status);
620 		hci_conn_del(sco);
621 	}
622 
623 	hci_dev_unlock(hdev);
624 }
625 
626 static void hci_cs_auth_requested(struct hci_dev *hdev, __u8 status)
627 {
628 	struct hci_cp_auth_requested *cp;
629 	struct hci_conn *conn;
630 
631 	BT_DBG("%s status 0x%x", hdev->name, status);
632 
633 	if (!status)
634 		return;
635 
636 	cp = hci_sent_cmd_data(hdev, HCI_OP_AUTH_REQUESTED);
637 	if (!cp)
638 		return;
639 
640 	hci_dev_lock(hdev);
641 
642 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
643 	if (conn) {
644 		if (conn->state == BT_CONFIG) {
645 			hci_proto_connect_cfm(conn, status);
646 			hci_conn_put(conn);
647 		}
648 	}
649 
650 	hci_dev_unlock(hdev);
651 }
652 
653 static void hci_cs_set_conn_encrypt(struct hci_dev *hdev, __u8 status)
654 {
655 	struct hci_cp_set_conn_encrypt *cp;
656 	struct hci_conn *conn;
657 
658 	BT_DBG("%s status 0x%x", hdev->name, status);
659 
660 	if (!status)
661 		return;
662 
663 	cp = hci_sent_cmd_data(hdev, HCI_OP_SET_CONN_ENCRYPT);
664 	if (!cp)
665 		return;
666 
667 	hci_dev_lock(hdev);
668 
669 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
670 	if (conn) {
671 		if (conn->state == BT_CONFIG) {
672 			hci_proto_connect_cfm(conn, status);
673 			hci_conn_put(conn);
674 		}
675 	}
676 
677 	hci_dev_unlock(hdev);
678 }
679 
680 static void hci_cs_remote_name_req(struct hci_dev *hdev, __u8 status)
681 {
682 	BT_DBG("%s status 0x%x", hdev->name, status);
683 }
684 
685 static void hci_cs_read_remote_features(struct hci_dev *hdev, __u8 status)
686 {
687 	struct hci_cp_read_remote_features *cp;
688 	struct hci_conn *conn;
689 
690 	BT_DBG("%s status 0x%x", hdev->name, status);
691 
692 	if (!status)
693 		return;
694 
695 	cp = hci_sent_cmd_data(hdev, HCI_OP_READ_REMOTE_FEATURES);
696 	if (!cp)
697 		return;
698 
699 	hci_dev_lock(hdev);
700 
701 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
702 	if (conn) {
703 		if (conn->state == BT_CONFIG) {
704 			hci_proto_connect_cfm(conn, status);
705 			hci_conn_put(conn);
706 		}
707 	}
708 
709 	hci_dev_unlock(hdev);
710 }
711 
712 static void hci_cs_read_remote_ext_features(struct hci_dev *hdev, __u8 status)
713 {
714 	struct hci_cp_read_remote_ext_features *cp;
715 	struct hci_conn *conn;
716 
717 	BT_DBG("%s status 0x%x", hdev->name, status);
718 
719 	if (!status)
720 		return;
721 
722 	cp = hci_sent_cmd_data(hdev, HCI_OP_READ_REMOTE_EXT_FEATURES);
723 	if (!cp)
724 		return;
725 
726 	hci_dev_lock(hdev);
727 
728 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
729 	if (conn) {
730 		if (conn->state == BT_CONFIG) {
731 			hci_proto_connect_cfm(conn, status);
732 			hci_conn_put(conn);
733 		}
734 	}
735 
736 	hci_dev_unlock(hdev);
737 }
738 
739 static void hci_cs_setup_sync_conn(struct hci_dev *hdev, __u8 status)
740 {
741 	struct hci_cp_setup_sync_conn *cp;
742 	struct hci_conn *acl, *sco;
743 	__u16 handle;
744 
745 	BT_DBG("%s status 0x%x", hdev->name, status);
746 
747 	if (!status)
748 		return;
749 
750 	cp = hci_sent_cmd_data(hdev, HCI_OP_SETUP_SYNC_CONN);
751 	if (!cp)
752 		return;
753 
754 	handle = __le16_to_cpu(cp->handle);
755 
756 	BT_DBG("%s handle %d", hdev->name, handle);
757 
758 	hci_dev_lock(hdev);
759 
760 	acl = hci_conn_hash_lookup_handle(hdev, handle);
761 	if (acl && (sco = acl->link)) {
762 		sco->state = BT_CLOSED;
763 
764 		hci_proto_connect_cfm(sco, status);
765 		hci_conn_del(sco);
766 	}
767 
768 	hci_dev_unlock(hdev);
769 }
770 
771 static void hci_cs_sniff_mode(struct hci_dev *hdev, __u8 status)
772 {
773 	struct hci_cp_sniff_mode *cp;
774 	struct hci_conn *conn;
775 
776 	BT_DBG("%s status 0x%x", hdev->name, status);
777 
778 	if (!status)
779 		return;
780 
781 	cp = hci_sent_cmd_data(hdev, HCI_OP_SNIFF_MODE);
782 	if (!cp)
783 		return;
784 
785 	hci_dev_lock(hdev);
786 
787 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
788 	if (conn)
789 		clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend);
790 
791 	hci_dev_unlock(hdev);
792 }
793 
794 static void hci_cs_exit_sniff_mode(struct hci_dev *hdev, __u8 status)
795 {
796 	struct hci_cp_exit_sniff_mode *cp;
797 	struct hci_conn *conn;
798 
799 	BT_DBG("%s status 0x%x", hdev->name, status);
800 
801 	if (!status)
802 		return;
803 
804 	cp = hci_sent_cmd_data(hdev, HCI_OP_EXIT_SNIFF_MODE);
805 	if (!cp)
806 		return;
807 
808 	hci_dev_lock(hdev);
809 
810 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
811 	if (conn)
812 		clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend);
813 
814 	hci_dev_unlock(hdev);
815 }
816 
817 static inline void hci_inquiry_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
818 {
819 	__u8 status = *((__u8 *) skb->data);
820 
821 	BT_DBG("%s status %d", hdev->name, status);
822 
823 	clear_bit(HCI_INQUIRY, &hdev->flags);
824 
825 	hci_req_complete(hdev, status);
826 
827 	hci_conn_check_pending(hdev);
828 }
829 
830 static inline void hci_inquiry_result_evt(struct hci_dev *hdev, struct sk_buff *skb)
831 {
832 	struct inquiry_data data;
833 	struct inquiry_info *info = (void *) (skb->data + 1);
834 	int num_rsp = *((__u8 *) skb->data);
835 
836 	BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
837 
838 	if (!num_rsp)
839 		return;
840 
841 	hci_dev_lock(hdev);
842 
843 	for (; num_rsp; num_rsp--) {
844 		bacpy(&data.bdaddr, &info->bdaddr);
845 		data.pscan_rep_mode	= info->pscan_rep_mode;
846 		data.pscan_period_mode	= info->pscan_period_mode;
847 		data.pscan_mode		= info->pscan_mode;
848 		memcpy(data.dev_class, info->dev_class, 3);
849 		data.clock_offset	= info->clock_offset;
850 		data.rssi		= 0x00;
851 		data.ssp_mode		= 0x00;
852 		info++;
853 		hci_inquiry_cache_update(hdev, &data);
854 	}
855 
856 	hci_dev_unlock(hdev);
857 }
858 
859 static inline void hci_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
860 {
861 	struct hci_ev_conn_complete *ev = (void *) skb->data;
862 	struct hci_conn *conn;
863 
864 	BT_DBG("%s", hdev->name);
865 
866 	hci_dev_lock(hdev);
867 
868 	conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
869 	if (!conn) {
870 		if (ev->link_type != SCO_LINK)
871 			goto unlock;
872 
873 		conn = hci_conn_hash_lookup_ba(hdev, ESCO_LINK, &ev->bdaddr);
874 		if (!conn)
875 			goto unlock;
876 
877 		conn->type = SCO_LINK;
878 	}
879 
880 	if (!ev->status) {
881 		conn->handle = __le16_to_cpu(ev->handle);
882 
883 		if (conn->type == ACL_LINK) {
884 			conn->state = BT_CONFIG;
885 			hci_conn_hold(conn);
886 			conn->disc_timeout = HCI_DISCONN_TIMEOUT;
887 		} else
888 			conn->state = BT_CONNECTED;
889 
890 		hci_conn_add_sysfs(conn);
891 
892 		if (test_bit(HCI_AUTH, &hdev->flags))
893 			conn->link_mode |= HCI_LM_AUTH;
894 
895 		if (test_bit(HCI_ENCRYPT, &hdev->flags))
896 			conn->link_mode |= HCI_LM_ENCRYPT;
897 
898 		/* Get remote features */
899 		if (conn->type == ACL_LINK) {
900 			struct hci_cp_read_remote_features cp;
901 			cp.handle = ev->handle;
902 			hci_send_cmd(hdev, HCI_OP_READ_REMOTE_FEATURES,
903 							sizeof(cp), &cp);
904 		}
905 
906 		/* Set packet type for incoming connection */
907 		if (!conn->out && hdev->hci_ver < 3) {
908 			struct hci_cp_change_conn_ptype cp;
909 			cp.handle = ev->handle;
910 			cp.pkt_type = cpu_to_le16(conn->pkt_type);
911 			hci_send_cmd(hdev, HCI_OP_CHANGE_CONN_PTYPE,
912 							sizeof(cp), &cp);
913 		}
914 	} else
915 		conn->state = BT_CLOSED;
916 
917 	if (conn->type == ACL_LINK) {
918 		struct hci_conn *sco = conn->link;
919 		if (sco) {
920 			if (!ev->status) {
921 				if (lmp_esco_capable(hdev))
922 					hci_setup_sync(sco, conn->handle);
923 				else
924 					hci_add_sco(sco, conn->handle);
925 			} else {
926 				hci_proto_connect_cfm(sco, ev->status);
927 				hci_conn_del(sco);
928 			}
929 		}
930 	}
931 
932 	if (ev->status) {
933 		hci_proto_connect_cfm(conn, ev->status);
934 		hci_conn_del(conn);
935 	} else if (ev->link_type != ACL_LINK)
936 		hci_proto_connect_cfm(conn, ev->status);
937 
938 unlock:
939 	hci_dev_unlock(hdev);
940 
941 	hci_conn_check_pending(hdev);
942 }
943 
944 static inline void hci_conn_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
945 {
946 	struct hci_ev_conn_request *ev = (void *) skb->data;
947 	int mask = hdev->link_mode;
948 
949 	BT_DBG("%s bdaddr %s type 0x%x", hdev->name,
950 					batostr(&ev->bdaddr), ev->link_type);
951 
952 	mask |= hci_proto_connect_ind(hdev, &ev->bdaddr, ev->link_type);
953 
954 	if (mask & HCI_LM_ACCEPT) {
955 		/* Connection accepted */
956 		struct inquiry_entry *ie;
957 		struct hci_conn *conn;
958 
959 		hci_dev_lock(hdev);
960 
961 		if ((ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr)))
962 			memcpy(ie->data.dev_class, ev->dev_class, 3);
963 
964 		conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
965 		if (!conn) {
966 			if (!(conn = hci_conn_add(hdev, ev->link_type, &ev->bdaddr))) {
967 				BT_ERR("No memmory for new connection");
968 				hci_dev_unlock(hdev);
969 				return;
970 			}
971 		}
972 
973 		memcpy(conn->dev_class, ev->dev_class, 3);
974 		conn->state = BT_CONNECT;
975 
976 		hci_dev_unlock(hdev);
977 
978 		if (ev->link_type == ACL_LINK || !lmp_esco_capable(hdev)) {
979 			struct hci_cp_accept_conn_req cp;
980 
981 			bacpy(&cp.bdaddr, &ev->bdaddr);
982 
983 			if (lmp_rswitch_capable(hdev) && (mask & HCI_LM_MASTER))
984 				cp.role = 0x00; /* Become master */
985 			else
986 				cp.role = 0x01; /* Remain slave */
987 
988 			hci_send_cmd(hdev, HCI_OP_ACCEPT_CONN_REQ,
989 							sizeof(cp), &cp);
990 		} else {
991 			struct hci_cp_accept_sync_conn_req cp;
992 
993 			bacpy(&cp.bdaddr, &ev->bdaddr);
994 			cp.pkt_type = cpu_to_le16(conn->pkt_type);
995 
996 			cp.tx_bandwidth   = cpu_to_le32(0x00001f40);
997 			cp.rx_bandwidth   = cpu_to_le32(0x00001f40);
998 			cp.max_latency    = cpu_to_le16(0xffff);
999 			cp.content_format = cpu_to_le16(hdev->voice_setting);
1000 			cp.retrans_effort = 0xff;
1001 
1002 			hci_send_cmd(hdev, HCI_OP_ACCEPT_SYNC_CONN_REQ,
1003 							sizeof(cp), &cp);
1004 		}
1005 	} else {
1006 		/* Connection rejected */
1007 		struct hci_cp_reject_conn_req cp;
1008 
1009 		bacpy(&cp.bdaddr, &ev->bdaddr);
1010 		cp.reason = 0x0f;
1011 		hci_send_cmd(hdev, HCI_OP_REJECT_CONN_REQ, sizeof(cp), &cp);
1012 	}
1013 }
1014 
1015 static inline void hci_disconn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1016 {
1017 	struct hci_ev_disconn_complete *ev = (void *) skb->data;
1018 	struct hci_conn *conn;
1019 
1020 	BT_DBG("%s status %d", hdev->name, ev->status);
1021 
1022 	if (ev->status)
1023 		return;
1024 
1025 	hci_dev_lock(hdev);
1026 
1027 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1028 	if (conn) {
1029 		conn->state = BT_CLOSED;
1030 
1031 		hci_proto_disconn_cfm(conn, ev->reason);
1032 		hci_conn_del(conn);
1033 	}
1034 
1035 	hci_dev_unlock(hdev);
1036 }
1037 
1038 static inline void hci_auth_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1039 {
1040 	struct hci_ev_auth_complete *ev = (void *) skb->data;
1041 	struct hci_conn *conn;
1042 
1043 	BT_DBG("%s status %d", hdev->name, ev->status);
1044 
1045 	hci_dev_lock(hdev);
1046 
1047 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1048 	if (conn) {
1049 		if (!ev->status)
1050 			conn->link_mode |= HCI_LM_AUTH;
1051 
1052 		clear_bit(HCI_CONN_AUTH_PEND, &conn->pend);
1053 
1054 		if (conn->state == BT_CONFIG) {
1055 			if (!ev->status && hdev->ssp_mode > 0 &&
1056 							conn->ssp_mode > 0) {
1057 				struct hci_cp_set_conn_encrypt cp;
1058 				cp.handle  = ev->handle;
1059 				cp.encrypt = 0x01;
1060 				hci_send_cmd(hdev, HCI_OP_SET_CONN_ENCRYPT,
1061 							sizeof(cp), &cp);
1062 			} else {
1063 				conn->state = BT_CONNECTED;
1064 				hci_proto_connect_cfm(conn, ev->status);
1065 				hci_conn_put(conn);
1066 			}
1067 		} else {
1068 			hci_auth_cfm(conn, ev->status);
1069 
1070 			hci_conn_hold(conn);
1071 			conn->disc_timeout = HCI_DISCONN_TIMEOUT;
1072 			hci_conn_put(conn);
1073 		}
1074 
1075 		if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend)) {
1076 			if (!ev->status) {
1077 				struct hci_cp_set_conn_encrypt cp;
1078 				cp.handle  = ev->handle;
1079 				cp.encrypt = 0x01;
1080 				hci_send_cmd(hdev, HCI_OP_SET_CONN_ENCRYPT,
1081 							sizeof(cp), &cp);
1082 			} else {
1083 				clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend);
1084 				hci_encrypt_cfm(conn, ev->status, 0x00);
1085 			}
1086 		}
1087 	}
1088 
1089 	hci_dev_unlock(hdev);
1090 }
1091 
1092 static inline void hci_remote_name_evt(struct hci_dev *hdev, struct sk_buff *skb)
1093 {
1094 	BT_DBG("%s", hdev->name);
1095 
1096 	hci_conn_check_pending(hdev);
1097 }
1098 
1099 static inline void hci_encrypt_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
1100 {
1101 	struct hci_ev_encrypt_change *ev = (void *) skb->data;
1102 	struct hci_conn *conn;
1103 
1104 	BT_DBG("%s status %d", hdev->name, ev->status);
1105 
1106 	hci_dev_lock(hdev);
1107 
1108 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1109 	if (conn) {
1110 		if (!ev->status) {
1111 			if (ev->encrypt) {
1112 				/* Encryption implies authentication */
1113 				conn->link_mode |= HCI_LM_AUTH;
1114 				conn->link_mode |= HCI_LM_ENCRYPT;
1115 			} else
1116 				conn->link_mode &= ~HCI_LM_ENCRYPT;
1117 		}
1118 
1119 		clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend);
1120 
1121 		if (conn->state == BT_CONFIG) {
1122 			if (!ev->status)
1123 				conn->state = BT_CONNECTED;
1124 
1125 			hci_proto_connect_cfm(conn, ev->status);
1126 			hci_conn_put(conn);
1127 		} else
1128 			hci_encrypt_cfm(conn, ev->status, ev->encrypt);
1129 	}
1130 
1131 	hci_dev_unlock(hdev);
1132 }
1133 
1134 static inline void hci_change_link_key_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1135 {
1136 	struct hci_ev_change_link_key_complete *ev = (void *) skb->data;
1137 	struct hci_conn *conn;
1138 
1139 	BT_DBG("%s status %d", hdev->name, ev->status);
1140 
1141 	hci_dev_lock(hdev);
1142 
1143 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1144 	if (conn) {
1145 		if (!ev->status)
1146 			conn->link_mode |= HCI_LM_SECURE;
1147 
1148 		clear_bit(HCI_CONN_AUTH_PEND, &conn->pend);
1149 
1150 		hci_key_change_cfm(conn, ev->status);
1151 	}
1152 
1153 	hci_dev_unlock(hdev);
1154 }
1155 
1156 static inline void hci_remote_features_evt(struct hci_dev *hdev, struct sk_buff *skb)
1157 {
1158 	struct hci_ev_remote_features *ev = (void *) skb->data;
1159 	struct hci_conn *conn;
1160 
1161 	BT_DBG("%s status %d", hdev->name, ev->status);
1162 
1163 	hci_dev_lock(hdev);
1164 
1165 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1166 	if (conn) {
1167 		if (!ev->status)
1168 			memcpy(conn->features, ev->features, 8);
1169 
1170 		if (conn->state == BT_CONFIG) {
1171 			if (!ev->status && lmp_ssp_capable(hdev) &&
1172 						lmp_ssp_capable(conn)) {
1173 				struct hci_cp_read_remote_ext_features cp;
1174 				cp.handle = ev->handle;
1175 				cp.page = 0x01;
1176 				hci_send_cmd(hdev,
1177 					HCI_OP_READ_REMOTE_EXT_FEATURES,
1178 							sizeof(cp), &cp);
1179 			} else {
1180 				conn->state = BT_CONNECTED;
1181 				hci_proto_connect_cfm(conn, ev->status);
1182 				hci_conn_put(conn);
1183 			}
1184 		}
1185 	}
1186 
1187 	hci_dev_unlock(hdev);
1188 }
1189 
1190 static inline void hci_remote_version_evt(struct hci_dev *hdev, struct sk_buff *skb)
1191 {
1192 	BT_DBG("%s", hdev->name);
1193 }
1194 
1195 static inline void hci_qos_setup_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1196 {
1197 	BT_DBG("%s", hdev->name);
1198 }
1199 
1200 static inline void hci_cmd_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1201 {
1202 	struct hci_ev_cmd_complete *ev = (void *) skb->data;
1203 	__u16 opcode;
1204 
1205 	skb_pull(skb, sizeof(*ev));
1206 
1207 	opcode = __le16_to_cpu(ev->opcode);
1208 
1209 	switch (opcode) {
1210 	case HCI_OP_INQUIRY_CANCEL:
1211 		hci_cc_inquiry_cancel(hdev, skb);
1212 		break;
1213 
1214 	case HCI_OP_EXIT_PERIODIC_INQ:
1215 		hci_cc_exit_periodic_inq(hdev, skb);
1216 		break;
1217 
1218 	case HCI_OP_REMOTE_NAME_REQ_CANCEL:
1219 		hci_cc_remote_name_req_cancel(hdev, skb);
1220 		break;
1221 
1222 	case HCI_OP_ROLE_DISCOVERY:
1223 		hci_cc_role_discovery(hdev, skb);
1224 		break;
1225 
1226 	case HCI_OP_READ_LINK_POLICY:
1227 		hci_cc_read_link_policy(hdev, skb);
1228 		break;
1229 
1230 	case HCI_OP_WRITE_LINK_POLICY:
1231 		hci_cc_write_link_policy(hdev, skb);
1232 		break;
1233 
1234 	case HCI_OP_READ_DEF_LINK_POLICY:
1235 		hci_cc_read_def_link_policy(hdev, skb);
1236 		break;
1237 
1238 	case HCI_OP_WRITE_DEF_LINK_POLICY:
1239 		hci_cc_write_def_link_policy(hdev, skb);
1240 		break;
1241 
1242 	case HCI_OP_RESET:
1243 		hci_cc_reset(hdev, skb);
1244 		break;
1245 
1246 	case HCI_OP_WRITE_LOCAL_NAME:
1247 		hci_cc_write_local_name(hdev, skb);
1248 		break;
1249 
1250 	case HCI_OP_READ_LOCAL_NAME:
1251 		hci_cc_read_local_name(hdev, skb);
1252 		break;
1253 
1254 	case HCI_OP_WRITE_AUTH_ENABLE:
1255 		hci_cc_write_auth_enable(hdev, skb);
1256 		break;
1257 
1258 	case HCI_OP_WRITE_ENCRYPT_MODE:
1259 		hci_cc_write_encrypt_mode(hdev, skb);
1260 		break;
1261 
1262 	case HCI_OP_WRITE_SCAN_ENABLE:
1263 		hci_cc_write_scan_enable(hdev, skb);
1264 		break;
1265 
1266 	case HCI_OP_READ_CLASS_OF_DEV:
1267 		hci_cc_read_class_of_dev(hdev, skb);
1268 		break;
1269 
1270 	case HCI_OP_WRITE_CLASS_OF_DEV:
1271 		hci_cc_write_class_of_dev(hdev, skb);
1272 		break;
1273 
1274 	case HCI_OP_READ_VOICE_SETTING:
1275 		hci_cc_read_voice_setting(hdev, skb);
1276 		break;
1277 
1278 	case HCI_OP_WRITE_VOICE_SETTING:
1279 		hci_cc_write_voice_setting(hdev, skb);
1280 		break;
1281 
1282 	case HCI_OP_HOST_BUFFER_SIZE:
1283 		hci_cc_host_buffer_size(hdev, skb);
1284 		break;
1285 
1286 	case HCI_OP_READ_SSP_MODE:
1287 		hci_cc_read_ssp_mode(hdev, skb);
1288 		break;
1289 
1290 	case HCI_OP_WRITE_SSP_MODE:
1291 		hci_cc_write_ssp_mode(hdev, skb);
1292 		break;
1293 
1294 	case HCI_OP_READ_LOCAL_VERSION:
1295 		hci_cc_read_local_version(hdev, skb);
1296 		break;
1297 
1298 	case HCI_OP_READ_LOCAL_COMMANDS:
1299 		hci_cc_read_local_commands(hdev, skb);
1300 		break;
1301 
1302 	case HCI_OP_READ_LOCAL_FEATURES:
1303 		hci_cc_read_local_features(hdev, skb);
1304 		break;
1305 
1306 	case HCI_OP_READ_BUFFER_SIZE:
1307 		hci_cc_read_buffer_size(hdev, skb);
1308 		break;
1309 
1310 	case HCI_OP_READ_BD_ADDR:
1311 		hci_cc_read_bd_addr(hdev, skb);
1312 		break;
1313 
1314 	default:
1315 		BT_DBG("%s opcode 0x%x", hdev->name, opcode);
1316 		break;
1317 	}
1318 
1319 	if (ev->ncmd) {
1320 		atomic_set(&hdev->cmd_cnt, 1);
1321 		if (!skb_queue_empty(&hdev->cmd_q))
1322 			hci_sched_cmd(hdev);
1323 	}
1324 }
1325 
1326 static inline void hci_cmd_status_evt(struct hci_dev *hdev, struct sk_buff *skb)
1327 {
1328 	struct hci_ev_cmd_status *ev = (void *) skb->data;
1329 	__u16 opcode;
1330 
1331 	skb_pull(skb, sizeof(*ev));
1332 
1333 	opcode = __le16_to_cpu(ev->opcode);
1334 
1335 	switch (opcode) {
1336 	case HCI_OP_INQUIRY:
1337 		hci_cs_inquiry(hdev, ev->status);
1338 		break;
1339 
1340 	case HCI_OP_CREATE_CONN:
1341 		hci_cs_create_conn(hdev, ev->status);
1342 		break;
1343 
1344 	case HCI_OP_ADD_SCO:
1345 		hci_cs_add_sco(hdev, ev->status);
1346 		break;
1347 
1348 	case HCI_OP_AUTH_REQUESTED:
1349 		hci_cs_auth_requested(hdev, ev->status);
1350 		break;
1351 
1352 	case HCI_OP_SET_CONN_ENCRYPT:
1353 		hci_cs_set_conn_encrypt(hdev, ev->status);
1354 		break;
1355 
1356 	case HCI_OP_REMOTE_NAME_REQ:
1357 		hci_cs_remote_name_req(hdev, ev->status);
1358 		break;
1359 
1360 	case HCI_OP_READ_REMOTE_FEATURES:
1361 		hci_cs_read_remote_features(hdev, ev->status);
1362 		break;
1363 
1364 	case HCI_OP_READ_REMOTE_EXT_FEATURES:
1365 		hci_cs_read_remote_ext_features(hdev, ev->status);
1366 		break;
1367 
1368 	case HCI_OP_SETUP_SYNC_CONN:
1369 		hci_cs_setup_sync_conn(hdev, ev->status);
1370 		break;
1371 
1372 	case HCI_OP_SNIFF_MODE:
1373 		hci_cs_sniff_mode(hdev, ev->status);
1374 		break;
1375 
1376 	case HCI_OP_EXIT_SNIFF_MODE:
1377 		hci_cs_exit_sniff_mode(hdev, ev->status);
1378 		break;
1379 
1380 	default:
1381 		BT_DBG("%s opcode 0x%x", hdev->name, opcode);
1382 		break;
1383 	}
1384 
1385 	if (ev->ncmd) {
1386 		atomic_set(&hdev->cmd_cnt, 1);
1387 		if (!skb_queue_empty(&hdev->cmd_q))
1388 			hci_sched_cmd(hdev);
1389 	}
1390 }
1391 
1392 static inline void hci_role_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
1393 {
1394 	struct hci_ev_role_change *ev = (void *) skb->data;
1395 	struct hci_conn *conn;
1396 
1397 	BT_DBG("%s status %d", hdev->name, ev->status);
1398 
1399 	hci_dev_lock(hdev);
1400 
1401 	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
1402 	if (conn) {
1403 		if (!ev->status) {
1404 			if (ev->role)
1405 				conn->link_mode &= ~HCI_LM_MASTER;
1406 			else
1407 				conn->link_mode |= HCI_LM_MASTER;
1408 		}
1409 
1410 		clear_bit(HCI_CONN_RSWITCH_PEND, &conn->pend);
1411 
1412 		hci_role_switch_cfm(conn, ev->status, ev->role);
1413 	}
1414 
1415 	hci_dev_unlock(hdev);
1416 }
1417 
1418 static inline void hci_num_comp_pkts_evt(struct hci_dev *hdev, struct sk_buff *skb)
1419 {
1420 	struct hci_ev_num_comp_pkts *ev = (void *) skb->data;
1421 	__le16 *ptr;
1422 	int i;
1423 
1424 	skb_pull(skb, sizeof(*ev));
1425 
1426 	BT_DBG("%s num_hndl %d", hdev->name, ev->num_hndl);
1427 
1428 	if (skb->len < ev->num_hndl * 4) {
1429 		BT_DBG("%s bad parameters", hdev->name);
1430 		return;
1431 	}
1432 
1433 	tasklet_disable(&hdev->tx_task);
1434 
1435 	for (i = 0, ptr = (__le16 *) skb->data; i < ev->num_hndl; i++) {
1436 		struct hci_conn *conn;
1437 		__u16  handle, count;
1438 
1439 		handle = get_unaligned_le16(ptr++);
1440 		count  = get_unaligned_le16(ptr++);
1441 
1442 		conn = hci_conn_hash_lookup_handle(hdev, handle);
1443 		if (conn) {
1444 			conn->sent -= count;
1445 
1446 			if (conn->type == ACL_LINK) {
1447 				if ((hdev->acl_cnt += count) > hdev->acl_pkts)
1448 					hdev->acl_cnt = hdev->acl_pkts;
1449 			} else {
1450 				if ((hdev->sco_cnt += count) > hdev->sco_pkts)
1451 					hdev->sco_cnt = hdev->sco_pkts;
1452 			}
1453 		}
1454 	}
1455 
1456 	hci_sched_tx(hdev);
1457 
1458 	tasklet_enable(&hdev->tx_task);
1459 }
1460 
1461 static inline void hci_mode_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
1462 {
1463 	struct hci_ev_mode_change *ev = (void *) skb->data;
1464 	struct hci_conn *conn;
1465 
1466 	BT_DBG("%s status %d", hdev->name, ev->status);
1467 
1468 	hci_dev_lock(hdev);
1469 
1470 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1471 	if (conn) {
1472 		conn->mode = ev->mode;
1473 		conn->interval = __le16_to_cpu(ev->interval);
1474 
1475 		if (!test_and_clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend)) {
1476 			if (conn->mode == HCI_CM_ACTIVE)
1477 				conn->power_save = 1;
1478 			else
1479 				conn->power_save = 0;
1480 		}
1481 	}
1482 
1483 	hci_dev_unlock(hdev);
1484 }
1485 
1486 static inline void hci_pin_code_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
1487 {
1488 	struct hci_ev_pin_code_req *ev = (void *) skb->data;
1489 	struct hci_conn *conn;
1490 
1491 	BT_DBG("%s", hdev->name);
1492 
1493 	hci_dev_lock(hdev);
1494 
1495 	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
1496 	if (conn && conn->state == BT_CONNECTED) {
1497 		hci_conn_hold(conn);
1498 		conn->disc_timeout = HCI_PAIRING_TIMEOUT;
1499 		hci_conn_put(conn);
1500 	}
1501 
1502 	hci_dev_unlock(hdev);
1503 }
1504 
1505 static inline void hci_link_key_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
1506 {
1507 	BT_DBG("%s", hdev->name);
1508 }
1509 
1510 static inline void hci_link_key_notify_evt(struct hci_dev *hdev, struct sk_buff *skb)
1511 {
1512 	struct hci_ev_link_key_notify *ev = (void *) skb->data;
1513 	struct hci_conn *conn;
1514 
1515 	BT_DBG("%s", hdev->name);
1516 
1517 	hci_dev_lock(hdev);
1518 
1519 	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
1520 	if (conn) {
1521 		hci_conn_hold(conn);
1522 		conn->disc_timeout = HCI_DISCONN_TIMEOUT;
1523 		hci_conn_put(conn);
1524 	}
1525 
1526 	hci_dev_unlock(hdev);
1527 }
1528 
1529 static inline void hci_clock_offset_evt(struct hci_dev *hdev, struct sk_buff *skb)
1530 {
1531 	struct hci_ev_clock_offset *ev = (void *) skb->data;
1532 	struct hci_conn *conn;
1533 
1534 	BT_DBG("%s status %d", hdev->name, ev->status);
1535 
1536 	hci_dev_lock(hdev);
1537 
1538 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1539 	if (conn && !ev->status) {
1540 		struct inquiry_entry *ie;
1541 
1542 		if ((ie = hci_inquiry_cache_lookup(hdev, &conn->dst))) {
1543 			ie->data.clock_offset = ev->clock_offset;
1544 			ie->timestamp = jiffies;
1545 		}
1546 	}
1547 
1548 	hci_dev_unlock(hdev);
1549 }
1550 
1551 static inline void hci_pkt_type_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
1552 {
1553 	struct hci_ev_pkt_type_change *ev = (void *) skb->data;
1554 	struct hci_conn *conn;
1555 
1556 	BT_DBG("%s status %d", hdev->name, ev->status);
1557 
1558 	hci_dev_lock(hdev);
1559 
1560 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1561 	if (conn && !ev->status)
1562 		conn->pkt_type = __le16_to_cpu(ev->pkt_type);
1563 
1564 	hci_dev_unlock(hdev);
1565 }
1566 
1567 static inline void hci_pscan_rep_mode_evt(struct hci_dev *hdev, struct sk_buff *skb)
1568 {
1569 	struct hci_ev_pscan_rep_mode *ev = (void *) skb->data;
1570 	struct inquiry_entry *ie;
1571 
1572 	BT_DBG("%s", hdev->name);
1573 
1574 	hci_dev_lock(hdev);
1575 
1576 	if ((ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr))) {
1577 		ie->data.pscan_rep_mode = ev->pscan_rep_mode;
1578 		ie->timestamp = jiffies;
1579 	}
1580 
1581 	hci_dev_unlock(hdev);
1582 }
1583 
1584 static inline void hci_inquiry_result_with_rssi_evt(struct hci_dev *hdev, struct sk_buff *skb)
1585 {
1586 	struct inquiry_data data;
1587 	int num_rsp = *((__u8 *) skb->data);
1588 
1589 	BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
1590 
1591 	if (!num_rsp)
1592 		return;
1593 
1594 	hci_dev_lock(hdev);
1595 
1596 	if ((skb->len - 1) / num_rsp != sizeof(struct inquiry_info_with_rssi)) {
1597 		struct inquiry_info_with_rssi_and_pscan_mode *info = (void *) (skb->data + 1);
1598 
1599 		for (; num_rsp; num_rsp--) {
1600 			bacpy(&data.bdaddr, &info->bdaddr);
1601 			data.pscan_rep_mode	= info->pscan_rep_mode;
1602 			data.pscan_period_mode	= info->pscan_period_mode;
1603 			data.pscan_mode		= info->pscan_mode;
1604 			memcpy(data.dev_class, info->dev_class, 3);
1605 			data.clock_offset	= info->clock_offset;
1606 			data.rssi		= info->rssi;
1607 			data.ssp_mode		= 0x00;
1608 			info++;
1609 			hci_inquiry_cache_update(hdev, &data);
1610 		}
1611 	} else {
1612 		struct inquiry_info_with_rssi *info = (void *) (skb->data + 1);
1613 
1614 		for (; num_rsp; num_rsp--) {
1615 			bacpy(&data.bdaddr, &info->bdaddr);
1616 			data.pscan_rep_mode	= info->pscan_rep_mode;
1617 			data.pscan_period_mode	= info->pscan_period_mode;
1618 			data.pscan_mode		= 0x00;
1619 			memcpy(data.dev_class, info->dev_class, 3);
1620 			data.clock_offset	= info->clock_offset;
1621 			data.rssi		= info->rssi;
1622 			data.ssp_mode		= 0x00;
1623 			info++;
1624 			hci_inquiry_cache_update(hdev, &data);
1625 		}
1626 	}
1627 
1628 	hci_dev_unlock(hdev);
1629 }
1630 
1631 static inline void hci_remote_ext_features_evt(struct hci_dev *hdev, struct sk_buff *skb)
1632 {
1633 	struct hci_ev_remote_ext_features *ev = (void *) skb->data;
1634 	struct hci_conn *conn;
1635 
1636 	BT_DBG("%s", hdev->name);
1637 
1638 	hci_dev_lock(hdev);
1639 
1640 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1641 	if (conn) {
1642 		if (!ev->status && ev->page == 0x01) {
1643 			struct inquiry_entry *ie;
1644 
1645 			if ((ie = hci_inquiry_cache_lookup(hdev, &conn->dst)))
1646 				ie->data.ssp_mode = (ev->features[0] & 0x01);
1647 
1648 			conn->ssp_mode = (ev->features[0] & 0x01);
1649 		}
1650 
1651 		if (conn->state == BT_CONFIG) {
1652 			if (!ev->status && hdev->ssp_mode > 0 &&
1653 					conn->ssp_mode > 0 && conn->out &&
1654 					conn->sec_level != BT_SECURITY_SDP) {
1655 				struct hci_cp_auth_requested cp;
1656 				cp.handle = ev->handle;
1657 				hci_send_cmd(hdev, HCI_OP_AUTH_REQUESTED,
1658 							sizeof(cp), &cp);
1659 			} else {
1660 				conn->state = BT_CONNECTED;
1661 				hci_proto_connect_cfm(conn, ev->status);
1662 				hci_conn_put(conn);
1663 			}
1664 		}
1665 	}
1666 
1667 	hci_dev_unlock(hdev);
1668 }
1669 
1670 static inline void hci_sync_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1671 {
1672 	struct hci_ev_sync_conn_complete *ev = (void *) skb->data;
1673 	struct hci_conn *conn;
1674 
1675 	BT_DBG("%s status %d", hdev->name, ev->status);
1676 
1677 	hci_dev_lock(hdev);
1678 
1679 	conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
1680 	if (!conn) {
1681 		if (ev->link_type == ESCO_LINK)
1682 			goto unlock;
1683 
1684 		conn = hci_conn_hash_lookup_ba(hdev, ESCO_LINK, &ev->bdaddr);
1685 		if (!conn)
1686 			goto unlock;
1687 
1688 		conn->type = SCO_LINK;
1689 	}
1690 
1691 	switch (ev->status) {
1692 	case 0x00:
1693 		conn->handle = __le16_to_cpu(ev->handle);
1694 		conn->state  = BT_CONNECTED;
1695 
1696 		hci_conn_add_sysfs(conn);
1697 		break;
1698 
1699 	case 0x1c:	/* SCO interval rejected */
1700 	case 0x1f:	/* Unspecified error */
1701 		if (conn->out && conn->attempt < 2) {
1702 			conn->pkt_type = (hdev->esco_type & SCO_ESCO_MASK) |
1703 					(hdev->esco_type & EDR_ESCO_MASK);
1704 			hci_setup_sync(conn, conn->link->handle);
1705 			goto unlock;
1706 		}
1707 		/* fall through */
1708 
1709 	default:
1710 		conn->state = BT_CLOSED;
1711 		break;
1712 	}
1713 
1714 	hci_proto_connect_cfm(conn, ev->status);
1715 	if (ev->status)
1716 		hci_conn_del(conn);
1717 
1718 unlock:
1719 	hci_dev_unlock(hdev);
1720 }
1721 
1722 static inline void hci_sync_conn_changed_evt(struct hci_dev *hdev, struct sk_buff *skb)
1723 {
1724 	BT_DBG("%s", hdev->name);
1725 }
1726 
1727 static inline void hci_sniff_subrate_evt(struct hci_dev *hdev, struct sk_buff *skb)
1728 {
1729 	struct hci_ev_sniff_subrate *ev = (void *) skb->data;
1730 	struct hci_conn *conn;
1731 
1732 	BT_DBG("%s status %d", hdev->name, ev->status);
1733 
1734 	hci_dev_lock(hdev);
1735 
1736 	conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1737 	if (conn) {
1738 	}
1739 
1740 	hci_dev_unlock(hdev);
1741 }
1742 
1743 static inline void hci_extended_inquiry_result_evt(struct hci_dev *hdev, struct sk_buff *skb)
1744 {
1745 	struct inquiry_data data;
1746 	struct extended_inquiry_info *info = (void *) (skb->data + 1);
1747 	int num_rsp = *((__u8 *) skb->data);
1748 
1749 	BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
1750 
1751 	if (!num_rsp)
1752 		return;
1753 
1754 	hci_dev_lock(hdev);
1755 
1756 	for (; num_rsp; num_rsp--) {
1757 		bacpy(&data.bdaddr, &info->bdaddr);
1758 		data.pscan_rep_mode     = info->pscan_rep_mode;
1759 		data.pscan_period_mode  = info->pscan_period_mode;
1760 		data.pscan_mode         = 0x00;
1761 		memcpy(data.dev_class, info->dev_class, 3);
1762 		data.clock_offset       = info->clock_offset;
1763 		data.rssi               = info->rssi;
1764 		data.ssp_mode		= 0x01;
1765 		info++;
1766 		hci_inquiry_cache_update(hdev, &data);
1767 	}
1768 
1769 	hci_dev_unlock(hdev);
1770 }
1771 
1772 static inline void hci_io_capa_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
1773 {
1774 	struct hci_ev_io_capa_request *ev = (void *) skb->data;
1775 	struct hci_conn *conn;
1776 
1777 	BT_DBG("%s", hdev->name);
1778 
1779 	hci_dev_lock(hdev);
1780 
1781 	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
1782 	if (conn)
1783 		hci_conn_hold(conn);
1784 
1785 	hci_dev_unlock(hdev);
1786 }
1787 
1788 static inline void hci_simple_pair_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1789 {
1790 	struct hci_ev_simple_pair_complete *ev = (void *) skb->data;
1791 	struct hci_conn *conn;
1792 
1793 	BT_DBG("%s", hdev->name);
1794 
1795 	hci_dev_lock(hdev);
1796 
1797 	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
1798 	if (conn)
1799 		hci_conn_put(conn);
1800 
1801 	hci_dev_unlock(hdev);
1802 }
1803 
1804 static inline void hci_remote_host_features_evt(struct hci_dev *hdev, struct sk_buff *skb)
1805 {
1806 	struct hci_ev_remote_host_features *ev = (void *) skb->data;
1807 	struct inquiry_entry *ie;
1808 
1809 	BT_DBG("%s", hdev->name);
1810 
1811 	hci_dev_lock(hdev);
1812 
1813 	if ((ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr)))
1814 		ie->data.ssp_mode = (ev->features[0] & 0x01);
1815 
1816 	hci_dev_unlock(hdev);
1817 }
1818 
1819 void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb)
1820 {
1821 	struct hci_event_hdr *hdr = (void *) skb->data;
1822 	__u8 event = hdr->evt;
1823 
1824 	skb_pull(skb, HCI_EVENT_HDR_SIZE);
1825 
1826 	switch (event) {
1827 	case HCI_EV_INQUIRY_COMPLETE:
1828 		hci_inquiry_complete_evt(hdev, skb);
1829 		break;
1830 
1831 	case HCI_EV_INQUIRY_RESULT:
1832 		hci_inquiry_result_evt(hdev, skb);
1833 		break;
1834 
1835 	case HCI_EV_CONN_COMPLETE:
1836 		hci_conn_complete_evt(hdev, skb);
1837 		break;
1838 
1839 	case HCI_EV_CONN_REQUEST:
1840 		hci_conn_request_evt(hdev, skb);
1841 		break;
1842 
1843 	case HCI_EV_DISCONN_COMPLETE:
1844 		hci_disconn_complete_evt(hdev, skb);
1845 		break;
1846 
1847 	case HCI_EV_AUTH_COMPLETE:
1848 		hci_auth_complete_evt(hdev, skb);
1849 		break;
1850 
1851 	case HCI_EV_REMOTE_NAME:
1852 		hci_remote_name_evt(hdev, skb);
1853 		break;
1854 
1855 	case HCI_EV_ENCRYPT_CHANGE:
1856 		hci_encrypt_change_evt(hdev, skb);
1857 		break;
1858 
1859 	case HCI_EV_CHANGE_LINK_KEY_COMPLETE:
1860 		hci_change_link_key_complete_evt(hdev, skb);
1861 		break;
1862 
1863 	case HCI_EV_REMOTE_FEATURES:
1864 		hci_remote_features_evt(hdev, skb);
1865 		break;
1866 
1867 	case HCI_EV_REMOTE_VERSION:
1868 		hci_remote_version_evt(hdev, skb);
1869 		break;
1870 
1871 	case HCI_EV_QOS_SETUP_COMPLETE:
1872 		hci_qos_setup_complete_evt(hdev, skb);
1873 		break;
1874 
1875 	case HCI_EV_CMD_COMPLETE:
1876 		hci_cmd_complete_evt(hdev, skb);
1877 		break;
1878 
1879 	case HCI_EV_CMD_STATUS:
1880 		hci_cmd_status_evt(hdev, skb);
1881 		break;
1882 
1883 	case HCI_EV_ROLE_CHANGE:
1884 		hci_role_change_evt(hdev, skb);
1885 		break;
1886 
1887 	case HCI_EV_NUM_COMP_PKTS:
1888 		hci_num_comp_pkts_evt(hdev, skb);
1889 		break;
1890 
1891 	case HCI_EV_MODE_CHANGE:
1892 		hci_mode_change_evt(hdev, skb);
1893 		break;
1894 
1895 	case HCI_EV_PIN_CODE_REQ:
1896 		hci_pin_code_request_evt(hdev, skb);
1897 		break;
1898 
1899 	case HCI_EV_LINK_KEY_REQ:
1900 		hci_link_key_request_evt(hdev, skb);
1901 		break;
1902 
1903 	case HCI_EV_LINK_KEY_NOTIFY:
1904 		hci_link_key_notify_evt(hdev, skb);
1905 		break;
1906 
1907 	case HCI_EV_CLOCK_OFFSET:
1908 		hci_clock_offset_evt(hdev, skb);
1909 		break;
1910 
1911 	case HCI_EV_PKT_TYPE_CHANGE:
1912 		hci_pkt_type_change_evt(hdev, skb);
1913 		break;
1914 
1915 	case HCI_EV_PSCAN_REP_MODE:
1916 		hci_pscan_rep_mode_evt(hdev, skb);
1917 		break;
1918 
1919 	case HCI_EV_INQUIRY_RESULT_WITH_RSSI:
1920 		hci_inquiry_result_with_rssi_evt(hdev, skb);
1921 		break;
1922 
1923 	case HCI_EV_REMOTE_EXT_FEATURES:
1924 		hci_remote_ext_features_evt(hdev, skb);
1925 		break;
1926 
1927 	case HCI_EV_SYNC_CONN_COMPLETE:
1928 		hci_sync_conn_complete_evt(hdev, skb);
1929 		break;
1930 
1931 	case HCI_EV_SYNC_CONN_CHANGED:
1932 		hci_sync_conn_changed_evt(hdev, skb);
1933 		break;
1934 
1935 	case HCI_EV_SNIFF_SUBRATE:
1936 		hci_sniff_subrate_evt(hdev, skb);
1937 		break;
1938 
1939 	case HCI_EV_EXTENDED_INQUIRY_RESULT:
1940 		hci_extended_inquiry_result_evt(hdev, skb);
1941 		break;
1942 
1943 	case HCI_EV_IO_CAPA_REQUEST:
1944 		hci_io_capa_request_evt(hdev, skb);
1945 		break;
1946 
1947 	case HCI_EV_SIMPLE_PAIR_COMPLETE:
1948 		hci_simple_pair_complete_evt(hdev, skb);
1949 		break;
1950 
1951 	case HCI_EV_REMOTE_HOST_FEATURES:
1952 		hci_remote_host_features_evt(hdev, skb);
1953 		break;
1954 
1955 	default:
1956 		BT_DBG("%s event 0x%x", hdev->name, event);
1957 		break;
1958 	}
1959 
1960 	kfree_skb(skb);
1961 	hdev->stat.evt_rx++;
1962 }
1963 
1964 /* Generate internal stack event */
1965 void hci_si_event(struct hci_dev *hdev, int type, int dlen, void *data)
1966 {
1967 	struct hci_event_hdr *hdr;
1968 	struct hci_ev_stack_internal *ev;
1969 	struct sk_buff *skb;
1970 
1971 	skb = bt_skb_alloc(HCI_EVENT_HDR_SIZE + sizeof(*ev) + dlen, GFP_ATOMIC);
1972 	if (!skb)
1973 		return;
1974 
1975 	hdr = (void *) skb_put(skb, HCI_EVENT_HDR_SIZE);
1976 	hdr->evt  = HCI_EV_STACK_INTERNAL;
1977 	hdr->plen = sizeof(*ev) + dlen;
1978 
1979 	ev  = (void *) skb_put(skb, sizeof(*ev) + dlen);
1980 	ev->type = type;
1981 	memcpy(ev->data, data, dlen);
1982 
1983 	bt_cb(skb)->incoming = 1;
1984 	__net_timestamp(skb);
1985 
1986 	bt_cb(skb)->pkt_type = HCI_EVENT_PKT;
1987 	skb->dev = (void *) hdev;
1988 	hci_send_to_sock(hdev, skb);
1989 	kfree_skb(skb);
1990 }
1991