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