[Bluetooth] Make use of the default link policy settings
[pandora-kernel.git] / net / bluetooth / hci_event.c
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         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_LOCAL_NAME);
202         if (!sent)
203                 return;
204
205         if (!status)
206                 memcpy(hdev->dev_name, sent, 248);
207 }
208
209 static void hci_cc_read_local_name(struct hci_dev *hdev, struct sk_buff *skb)
210 {
211         struct hci_rp_read_local_name *rp = (void *) skb->data;
212
213         BT_DBG("%s status 0x%x", hdev->name, rp->status);
214
215         if (rp->status)
216                 return;
217
218         memcpy(hdev->dev_name, rp->name, 248);
219 }
220
221 static void hci_cc_write_auth_enable(struct hci_dev *hdev, struct sk_buff *skb)
222 {
223         __u8 status = *((__u8 *) skb->data);
224         void *sent;
225
226         BT_DBG("%s status 0x%x", hdev->name, status);
227
228         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_AUTH_ENABLE);
229         if (!sent)
230                 return;
231
232         if (!status) {
233                 __u8 param = *((__u8 *) sent);
234
235                 if (param == AUTH_ENABLED)
236                         set_bit(HCI_AUTH, &hdev->flags);
237                 else
238                         clear_bit(HCI_AUTH, &hdev->flags);
239         }
240
241         hci_req_complete(hdev, status);
242 }
243
244 static void hci_cc_write_encrypt_mode(struct hci_dev *hdev, struct sk_buff *skb)
245 {
246         __u8 status = *((__u8 *) skb->data);
247         void *sent;
248
249         BT_DBG("%s status 0x%x", hdev->name, status);
250
251         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_ENCRYPT_MODE);
252         if (!sent)
253                 return;
254
255         if (!status) {
256                 __u8 param = *((__u8 *) sent);
257
258                 if (param)
259                         set_bit(HCI_ENCRYPT, &hdev->flags);
260                 else
261                         clear_bit(HCI_ENCRYPT, &hdev->flags);
262         }
263
264         hci_req_complete(hdev, status);
265 }
266
267 static void hci_cc_write_scan_enable(struct hci_dev *hdev, struct sk_buff *skb)
268 {
269         __u8 status = *((__u8 *) skb->data);
270         void *sent;
271
272         BT_DBG("%s status 0x%x", hdev->name, status);
273
274         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_SCAN_ENABLE);
275         if (!sent)
276                 return;
277
278         if (!status) {
279                 __u8 param = *((__u8 *) sent);
280
281                 clear_bit(HCI_PSCAN, &hdev->flags);
282                 clear_bit(HCI_ISCAN, &hdev->flags);
283
284                 if (param & SCAN_INQUIRY)
285                         set_bit(HCI_ISCAN, &hdev->flags);
286
287                 if (param & SCAN_PAGE)
288                         set_bit(HCI_PSCAN, &hdev->flags);
289         }
290
291         hci_req_complete(hdev, status);
292 }
293
294 static void hci_cc_read_class_of_dev(struct hci_dev *hdev, struct sk_buff *skb)
295 {
296         struct hci_rp_read_class_of_dev *rp = (void *) skb->data;
297
298         BT_DBG("%s status 0x%x", hdev->name, rp->status);
299
300         if (rp->status)
301                 return;
302
303         memcpy(hdev->dev_class, rp->dev_class, 3);
304
305         BT_DBG("%s class 0x%.2x%.2x%.2x", hdev->name,
306                 hdev->dev_class[2], hdev->dev_class[1], hdev->dev_class[0]);
307 }
308
309 static void hci_cc_write_class_of_dev(struct hci_dev *hdev, struct sk_buff *skb)
310 {
311         __u8 status = *((__u8 *) skb->data);
312         void *sent;
313
314         BT_DBG("%s status 0x%x", hdev->name, status);
315
316         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_CLASS_OF_DEV);
317         if (!sent)
318                 return;
319
320         if (!status)
321                 memcpy(hdev->dev_class, sent, 3);
322 }
323
324 static void hci_cc_read_voice_setting(struct hci_dev *hdev, struct sk_buff *skb)
325 {
326         struct hci_rp_read_voice_setting *rp = (void *) skb->data;
327         __u16 setting;
328
329         BT_DBG("%s status 0x%x", hdev->name, rp->status);
330
331         if (rp->status)
332                 return;
333
334         setting = __le16_to_cpu(rp->voice_setting);
335
336         if (hdev->voice_setting == setting )
337                 return;
338
339         hdev->voice_setting = setting;
340
341         BT_DBG("%s voice setting 0x%04x", hdev->name, setting);
342
343         if (hdev->notify) {
344                 tasklet_disable(&hdev->tx_task);
345                 hdev->notify(hdev, HCI_NOTIFY_VOICE_SETTING);
346                 tasklet_enable(&hdev->tx_task);
347         }
348 }
349
350 static void hci_cc_write_voice_setting(struct hci_dev *hdev, struct sk_buff *skb)
351 {
352         __u8 status = *((__u8 *) skb->data);
353         void *sent;
354
355         BT_DBG("%s status 0x%x", hdev->name, status);
356
357         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_VOICE_SETTING);
358         if (!sent)
359                 return;
360
361         if (!status) {
362                 __u16 setting = get_unaligned_le16(sent);
363
364                 if (hdev->voice_setting != setting) {
365                         hdev->voice_setting = setting;
366
367                         BT_DBG("%s voice setting 0x%04x", hdev->name, setting);
368
369                         if (hdev->notify) {
370                                 tasklet_disable(&hdev->tx_task);
371                                 hdev->notify(hdev, HCI_NOTIFY_VOICE_SETTING);
372                                 tasklet_enable(&hdev->tx_task);
373                         }
374                 }
375         }
376 }
377
378 static void hci_cc_host_buffer_size(struct hci_dev *hdev, struct sk_buff *skb)
379 {
380         __u8 status = *((__u8 *) skb->data);
381
382         BT_DBG("%s status 0x%x", hdev->name, status);
383
384         hci_req_complete(hdev, status);
385 }
386
387 static void hci_cc_read_local_version(struct hci_dev *hdev, struct sk_buff *skb)
388 {
389         struct hci_rp_read_local_version *rp = (void *) skb->data;
390
391         BT_DBG("%s status 0x%x", hdev->name, rp->status);
392
393         if (rp->status)
394                 return;
395
396         hdev->hci_ver = rp->hci_ver;
397         hdev->hci_rev = __le16_to_cpu(rp->hci_rev);
398         hdev->manufacturer = __le16_to_cpu(rp->manufacturer);
399
400         BT_DBG("%s manufacturer %d hci ver %d:%d", hdev->name,
401                                         hdev->manufacturer,
402                                         hdev->hci_ver, hdev->hci_rev);
403 }
404
405 static void hci_cc_read_local_commands(struct hci_dev *hdev, struct sk_buff *skb)
406 {
407         struct hci_rp_read_local_commands *rp = (void *) skb->data;
408
409         BT_DBG("%s status 0x%x", hdev->name, rp->status);
410
411         if (rp->status)
412                 return;
413
414         memcpy(hdev->commands, rp->commands, sizeof(hdev->commands));
415 }
416
417 static void hci_cc_read_local_features(struct hci_dev *hdev, struct sk_buff *skb)
418 {
419         struct hci_rp_read_local_features *rp = (void *) skb->data;
420
421         BT_DBG("%s status 0x%x", hdev->name, rp->status);
422
423         if (rp->status)
424                 return;
425
426         memcpy(hdev->features, rp->features, 8);
427
428         /* Adjust default settings according to features
429          * supported by device. */
430
431         if (hdev->features[0] & LMP_3SLOT)
432                 hdev->pkt_type |= (HCI_DM3 | HCI_DH3);
433
434         if (hdev->features[0] & LMP_5SLOT)
435                 hdev->pkt_type |= (HCI_DM5 | HCI_DH5);
436
437         if (hdev->features[1] & LMP_HV2) {
438                 hdev->pkt_type  |= (HCI_HV2);
439                 hdev->esco_type |= (ESCO_HV2);
440         }
441
442         if (hdev->features[1] & LMP_HV3) {
443                 hdev->pkt_type  |= (HCI_HV3);
444                 hdev->esco_type |= (ESCO_HV3);
445         }
446
447         if (hdev->features[3] & LMP_ESCO)
448                 hdev->esco_type |= (ESCO_EV3);
449
450         if (hdev->features[4] & LMP_EV4)
451                 hdev->esco_type |= (ESCO_EV4);
452
453         if (hdev->features[4] & LMP_EV5)
454                 hdev->esco_type |= (ESCO_EV5);
455
456         BT_DBG("%s features 0x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x", hdev->name,
457                                         hdev->features[0], hdev->features[1],
458                                         hdev->features[2], hdev->features[3],
459                                         hdev->features[4], hdev->features[5],
460                                         hdev->features[6], hdev->features[7]);
461 }
462
463 static void hci_cc_read_buffer_size(struct hci_dev *hdev, struct sk_buff *skb)
464 {
465         struct hci_rp_read_buffer_size *rp = (void *) skb->data;
466
467         BT_DBG("%s status 0x%x", hdev->name, rp->status);
468
469         if (rp->status)
470                 return;
471
472         hdev->acl_mtu  = __le16_to_cpu(rp->acl_mtu);
473         hdev->sco_mtu  = rp->sco_mtu;
474         hdev->acl_pkts = __le16_to_cpu(rp->acl_max_pkt);
475         hdev->sco_pkts = __le16_to_cpu(rp->sco_max_pkt);
476
477         if (test_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE, &hdev->quirks)) {
478                 hdev->sco_mtu  = 64;
479                 hdev->sco_pkts = 8;
480         }
481
482         hdev->acl_cnt = hdev->acl_pkts;
483         hdev->sco_cnt = hdev->sco_pkts;
484
485         BT_DBG("%s acl mtu %d:%d sco mtu %d:%d", hdev->name,
486                                         hdev->acl_mtu, hdev->acl_pkts,
487                                         hdev->sco_mtu, hdev->sco_pkts);
488 }
489
490 static void hci_cc_read_bd_addr(struct hci_dev *hdev, struct sk_buff *skb)
491 {
492         struct hci_rp_read_bd_addr *rp = (void *) skb->data;
493
494         BT_DBG("%s status 0x%x", hdev->name, rp->status);
495
496         if (!rp->status)
497                 bacpy(&hdev->bdaddr, &rp->bdaddr);
498
499         hci_req_complete(hdev, rp->status);
500 }
501
502 static inline void hci_cs_inquiry(struct hci_dev *hdev, __u8 status)
503 {
504         BT_DBG("%s status 0x%x", hdev->name, status);
505
506         if (status) {
507                 hci_req_complete(hdev, status);
508
509                 hci_conn_check_pending(hdev);
510         } else
511                 set_bit(HCI_INQUIRY, &hdev->flags);
512 }
513
514 static inline void hci_cs_create_conn(struct hci_dev *hdev, __u8 status)
515 {
516         struct hci_cp_create_conn *cp;
517         struct hci_conn *conn;
518
519         BT_DBG("%s status 0x%x", hdev->name, status);
520
521         cp = hci_sent_cmd_data(hdev, HCI_OP_CREATE_CONN);
522         if (!cp)
523                 return;
524
525         hci_dev_lock(hdev);
526
527         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
528
529         BT_DBG("%s bdaddr %s conn %p", hdev->name, batostr(&cp->bdaddr), conn);
530
531         if (status) {
532                 if (conn && conn->state == BT_CONNECT) {
533                         if (status != 0x0c || conn->attempt > 2) {
534                                 conn->state = BT_CLOSED;
535                                 hci_proto_connect_cfm(conn, status);
536                                 hci_conn_del(conn);
537                         } else
538                                 conn->state = BT_CONNECT2;
539                 }
540         } else {
541                 if (!conn) {
542                         conn = hci_conn_add(hdev, ACL_LINK, &cp->bdaddr);
543                         if (conn) {
544                                 conn->out = 1;
545                                 conn->link_mode |= HCI_LM_MASTER;
546                         } else
547                                 BT_ERR("No memmory for new connection");
548                 }
549         }
550
551         hci_dev_unlock(hdev);
552 }
553
554 static void hci_cs_add_sco(struct hci_dev *hdev, __u8 status)
555 {
556         struct hci_cp_add_sco *cp;
557         struct hci_conn *acl, *sco;
558         __u16 handle;
559
560         BT_DBG("%s status 0x%x", hdev->name, status);
561
562         if (!status)
563                 return;
564
565         cp = hci_sent_cmd_data(hdev, HCI_OP_ADD_SCO);
566         if (!cp)
567                 return;
568
569         handle = __le16_to_cpu(cp->handle);
570
571         BT_DBG("%s handle %d", hdev->name, handle);
572
573         hci_dev_lock(hdev);
574
575         acl = hci_conn_hash_lookup_handle(hdev, handle);
576         if (acl && (sco = acl->link)) {
577                 sco->state = BT_CLOSED;
578
579                 hci_proto_connect_cfm(sco, status);
580                 hci_conn_del(sco);
581         }
582
583         hci_dev_unlock(hdev);
584 }
585
586 static void hci_cs_remote_name_req(struct hci_dev *hdev, __u8 status)
587 {
588         BT_DBG("%s status 0x%x", hdev->name, status);
589 }
590
591 static void hci_cs_setup_sync_conn(struct hci_dev *hdev, __u8 status)
592 {
593         struct hci_cp_setup_sync_conn *cp;
594         struct hci_conn *acl, *sco;
595         __u16 handle;
596
597         BT_DBG("%s status 0x%x", hdev->name, status);
598
599         if (!status)
600                 return;
601
602         cp = hci_sent_cmd_data(hdev, HCI_OP_SETUP_SYNC_CONN);
603         if (!cp)
604                 return;
605
606         handle = __le16_to_cpu(cp->handle);
607
608         BT_DBG("%s handle %d", hdev->name, handle);
609
610         hci_dev_lock(hdev);
611
612         acl = hci_conn_hash_lookup_handle(hdev, handle);
613         if (acl && (sco = acl->link)) {
614                 sco->state = BT_CLOSED;
615
616                 hci_proto_connect_cfm(sco, status);
617                 hci_conn_del(sco);
618         }
619
620         hci_dev_unlock(hdev);
621 }
622
623 static void hci_cs_sniff_mode(struct hci_dev *hdev, __u8 status)
624 {
625         struct hci_cp_sniff_mode *cp;
626         struct hci_conn *conn;
627
628         BT_DBG("%s status 0x%x", hdev->name, status);
629
630         if (!status)
631                 return;
632
633         cp = hci_sent_cmd_data(hdev, HCI_OP_SNIFF_MODE);
634         if (!cp)
635                 return;
636
637         hci_dev_lock(hdev);
638
639         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
640         if (conn)
641                 clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend);
642
643         hci_dev_unlock(hdev);
644 }
645
646 static void hci_cs_exit_sniff_mode(struct hci_dev *hdev, __u8 status)
647 {
648         struct hci_cp_exit_sniff_mode *cp;
649         struct hci_conn *conn;
650
651         BT_DBG("%s status 0x%x", hdev->name, status);
652
653         if (!status)
654                 return;
655
656         cp = hci_sent_cmd_data(hdev, HCI_OP_EXIT_SNIFF_MODE);
657         if (!cp)
658                 return;
659
660         hci_dev_lock(hdev);
661
662         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
663         if (conn)
664                 clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend);
665
666         hci_dev_unlock(hdev);
667 }
668
669 static inline void hci_inquiry_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
670 {
671         __u8 status = *((__u8 *) skb->data);
672
673         BT_DBG("%s status %d", hdev->name, status);
674
675         clear_bit(HCI_INQUIRY, &hdev->flags);
676
677         hci_req_complete(hdev, status);
678
679         hci_conn_check_pending(hdev);
680 }
681
682 static inline void hci_inquiry_result_evt(struct hci_dev *hdev, struct sk_buff *skb)
683 {
684         struct inquiry_data data;
685         struct inquiry_info *info = (void *) (skb->data + 1);
686         int num_rsp = *((__u8 *) skb->data);
687
688         BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
689
690         if (!num_rsp)
691                 return;
692
693         hci_dev_lock(hdev);
694
695         for (; num_rsp; num_rsp--) {
696                 bacpy(&data.bdaddr, &info->bdaddr);
697                 data.pscan_rep_mode     = info->pscan_rep_mode;
698                 data.pscan_period_mode  = info->pscan_period_mode;
699                 data.pscan_mode         = info->pscan_mode;
700                 memcpy(data.dev_class, info->dev_class, 3);
701                 data.clock_offset       = info->clock_offset;
702                 data.rssi               = 0x00;
703                 info++;
704                 hci_inquiry_cache_update(hdev, &data);
705         }
706
707         hci_dev_unlock(hdev);
708 }
709
710 static inline void hci_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
711 {
712         struct hci_ev_conn_complete *ev = (void *) skb->data;
713         struct hci_conn *conn;
714
715         BT_DBG("%s", hdev->name);
716
717         hci_dev_lock(hdev);
718
719         conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
720         if (!conn)
721                 goto unlock;
722
723         if (!ev->status) {
724                 conn->handle = __le16_to_cpu(ev->handle);
725                 conn->state  = BT_CONNECTED;
726
727                 if (test_bit(HCI_AUTH, &hdev->flags))
728                         conn->link_mode |= HCI_LM_AUTH;
729
730                 if (test_bit(HCI_ENCRYPT, &hdev->flags))
731                         conn->link_mode |= HCI_LM_ENCRYPT;
732
733                 /* Get remote features */
734                 if (conn->type == ACL_LINK) {
735                         struct hci_cp_read_remote_features cp;
736                         cp.handle = ev->handle;
737                         hci_send_cmd(hdev, HCI_OP_READ_REMOTE_FEATURES, sizeof(cp), &cp);
738                 }
739
740                 /* Set packet type for incoming connection */
741                 if (!conn->out && hdev->hci_ver < 3) {
742                         struct hci_cp_change_conn_ptype cp;
743                         cp.handle = ev->handle;
744                         cp.pkt_type = cpu_to_le16(conn->pkt_type);
745                         hci_send_cmd(hdev, HCI_OP_CHANGE_CONN_PTYPE,
746                                                         sizeof(cp), &cp);
747                 } else {
748                         /* Update disconnect timer */
749                         hci_conn_hold(conn);
750                         hci_conn_put(conn);
751                 }
752         } else
753                 conn->state = BT_CLOSED;
754
755         if (conn->type == ACL_LINK) {
756                 struct hci_conn *sco = conn->link;
757                 if (sco) {
758                         if (!ev->status) {
759                                 if (lmp_esco_capable(hdev))
760                                         hci_setup_sync(sco, conn->handle);
761                                 else
762                                         hci_add_sco(sco, conn->handle);
763                         } else {
764                                 hci_proto_connect_cfm(sco, ev->status);
765                                 hci_conn_del(sco);
766                         }
767                 }
768         }
769
770         hci_proto_connect_cfm(conn, ev->status);
771         if (ev->status)
772                 hci_conn_del(conn);
773
774 unlock:
775         hci_dev_unlock(hdev);
776
777         hci_conn_check_pending(hdev);
778 }
779
780 static inline void hci_conn_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
781 {
782         struct hci_ev_conn_request *ev = (void *) skb->data;
783         int mask = hdev->link_mode;
784
785         BT_DBG("%s bdaddr %s type 0x%x", hdev->name,
786                                         batostr(&ev->bdaddr), ev->link_type);
787
788         mask |= hci_proto_connect_ind(hdev, &ev->bdaddr, ev->link_type);
789
790         if (mask & HCI_LM_ACCEPT) {
791                 /* Connection accepted */
792                 struct hci_conn *conn;
793
794                 hci_dev_lock(hdev);
795
796                 conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
797                 if (!conn) {
798                         if (!(conn = hci_conn_add(hdev, ev->link_type, &ev->bdaddr))) {
799                                 BT_ERR("No memmory for new connection");
800                                 hci_dev_unlock(hdev);
801                                 return;
802                         }
803                 }
804
805                 memcpy(conn->dev_class, ev->dev_class, 3);
806                 conn->state = BT_CONNECT;
807
808                 hci_dev_unlock(hdev);
809
810                 if (ev->link_type == ACL_LINK || !lmp_esco_capable(hdev)) {
811                         struct hci_cp_accept_conn_req cp;
812
813                         bacpy(&cp.bdaddr, &ev->bdaddr);
814
815                         if (lmp_rswitch_capable(hdev) && (mask & HCI_LM_MASTER))
816                                 cp.role = 0x00; /* Become master */
817                         else
818                                 cp.role = 0x01; /* Remain slave */
819
820                         hci_send_cmd(hdev, HCI_OP_ACCEPT_CONN_REQ,
821                                                         sizeof(cp), &cp);
822                 } else {
823                         struct hci_cp_accept_sync_conn_req cp;
824
825                         bacpy(&cp.bdaddr, &ev->bdaddr);
826                         cp.pkt_type = cpu_to_le16(conn->pkt_type);
827
828                         cp.tx_bandwidth   = cpu_to_le32(0x00001f40);
829                         cp.rx_bandwidth   = cpu_to_le32(0x00001f40);
830                         cp.max_latency    = cpu_to_le16(0xffff);
831                         cp.content_format = cpu_to_le16(hdev->voice_setting);
832                         cp.retrans_effort = 0xff;
833
834                         hci_send_cmd(hdev, HCI_OP_ACCEPT_SYNC_CONN_REQ,
835                                                         sizeof(cp), &cp);
836                 }
837         } else {
838                 /* Connection rejected */
839                 struct hci_cp_reject_conn_req cp;
840
841                 bacpy(&cp.bdaddr, &ev->bdaddr);
842                 cp.reason = 0x0f;
843                 hci_send_cmd(hdev, HCI_OP_REJECT_CONN_REQ, sizeof(cp), &cp);
844         }
845 }
846
847 static inline void hci_disconn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
848 {
849         struct hci_ev_disconn_complete *ev = (void *) skb->data;
850         struct hci_conn *conn;
851
852         BT_DBG("%s status %d", hdev->name, ev->status);
853
854         if (ev->status)
855                 return;
856
857         hci_dev_lock(hdev);
858
859         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
860         if (conn) {
861                 conn->state = BT_CLOSED;
862                 hci_proto_disconn_ind(conn, ev->reason);
863                 hci_conn_del(conn);
864         }
865
866         hci_dev_unlock(hdev);
867 }
868
869 static inline void hci_auth_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
870 {
871         struct hci_ev_auth_complete *ev = (void *) skb->data;
872         struct hci_conn *conn;
873
874         BT_DBG("%s status %d", hdev->name, ev->status);
875
876         hci_dev_lock(hdev);
877
878         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
879         if (conn) {
880                 if (!ev->status)
881                         conn->link_mode |= HCI_LM_AUTH;
882
883                 clear_bit(HCI_CONN_AUTH_PEND, &conn->pend);
884
885                 hci_auth_cfm(conn, ev->status);
886
887                 if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend)) {
888                         if (!ev->status) {
889                                 struct hci_cp_set_conn_encrypt cp;
890                                 cp.handle  = cpu_to_le16(conn->handle);
891                                 cp.encrypt = 1;
892                                 hci_send_cmd(conn->hdev,
893                                         HCI_OP_SET_CONN_ENCRYPT, sizeof(cp), &cp);
894                         } else {
895                                 clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend);
896                                 hci_encrypt_cfm(conn, ev->status, 0x00);
897                         }
898                 }
899         }
900
901         hci_dev_unlock(hdev);
902 }
903
904 static inline void hci_remote_name_evt(struct hci_dev *hdev, struct sk_buff *skb)
905 {
906         BT_DBG("%s", hdev->name);
907
908         hci_conn_check_pending(hdev);
909 }
910
911 static inline void hci_encrypt_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
912 {
913         struct hci_ev_encrypt_change *ev = (void *) skb->data;
914         struct hci_conn *conn;
915
916         BT_DBG("%s status %d", hdev->name, ev->status);
917
918         hci_dev_lock(hdev);
919
920         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
921         if (conn) {
922                 if (!ev->status) {
923                         if (ev->encrypt) {
924                                 /* Encryption implies authentication */
925                                 conn->link_mode |= HCI_LM_AUTH;
926                                 conn->link_mode |= HCI_LM_ENCRYPT;
927                         } else
928                                 conn->link_mode &= ~HCI_LM_ENCRYPT;
929                 }
930
931                 clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend);
932
933                 hci_encrypt_cfm(conn, ev->status, ev->encrypt);
934         }
935
936         hci_dev_unlock(hdev);
937 }
938
939 static inline void hci_change_link_key_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
940 {
941         struct hci_ev_change_link_key_complete *ev = (void *) skb->data;
942         struct hci_conn *conn;
943
944         BT_DBG("%s status %d", hdev->name, ev->status);
945
946         hci_dev_lock(hdev);
947
948         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
949         if (conn) {
950                 if (!ev->status)
951                         conn->link_mode |= HCI_LM_SECURE;
952
953                 clear_bit(HCI_CONN_AUTH_PEND, &conn->pend);
954
955                 hci_key_change_cfm(conn, ev->status);
956         }
957
958         hci_dev_unlock(hdev);
959 }
960
961 static inline void hci_remote_features_evt(struct hci_dev *hdev, struct sk_buff *skb)
962 {
963         struct hci_ev_remote_features *ev = (void *) skb->data;
964         struct hci_conn *conn;
965
966         BT_DBG("%s status %d", hdev->name, ev->status);
967
968         if (ev->status)
969                 return;
970
971         hci_dev_lock(hdev);
972
973         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
974         if (conn)
975                 memcpy(conn->features, ev->features, 8);
976
977         hci_dev_unlock(hdev);
978 }
979
980 static inline void hci_remote_version_evt(struct hci_dev *hdev, struct sk_buff *skb)
981 {
982         BT_DBG("%s", hdev->name);
983 }
984
985 static inline void hci_qos_setup_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
986 {
987         BT_DBG("%s", hdev->name);
988 }
989
990 static inline void hci_cmd_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
991 {
992         struct hci_ev_cmd_complete *ev = (void *) skb->data;
993         __u16 opcode;
994
995         skb_pull(skb, sizeof(*ev));
996
997         opcode = __le16_to_cpu(ev->opcode);
998
999         switch (opcode) {
1000         case HCI_OP_INQUIRY_CANCEL:
1001                 hci_cc_inquiry_cancel(hdev, skb);
1002                 break;
1003
1004         case HCI_OP_EXIT_PERIODIC_INQ:
1005                 hci_cc_exit_periodic_inq(hdev, skb);
1006                 break;
1007
1008         case HCI_OP_REMOTE_NAME_REQ_CANCEL:
1009                 hci_cc_remote_name_req_cancel(hdev, skb);
1010                 break;
1011
1012         case HCI_OP_ROLE_DISCOVERY:
1013                 hci_cc_role_discovery(hdev, skb);
1014                 break;
1015
1016         case HCI_OP_READ_LINK_POLICY:
1017                 hci_cc_read_link_policy(hdev, skb);
1018                 break;
1019
1020         case HCI_OP_WRITE_LINK_POLICY:
1021                 hci_cc_write_link_policy(hdev, skb);
1022                 break;
1023
1024         case HCI_OP_READ_DEF_LINK_POLICY:
1025                 hci_cc_read_def_link_policy(hdev, skb);
1026                 break;
1027
1028         case HCI_OP_WRITE_DEF_LINK_POLICY:
1029                 hci_cc_write_def_link_policy(hdev, skb);
1030                 break;
1031
1032         case HCI_OP_RESET:
1033                 hci_cc_reset(hdev, skb);
1034                 break;
1035
1036         case HCI_OP_WRITE_LOCAL_NAME:
1037                 hci_cc_write_local_name(hdev, skb);
1038                 break;
1039
1040         case HCI_OP_READ_LOCAL_NAME:
1041                 hci_cc_read_local_name(hdev, skb);
1042                 break;
1043
1044         case HCI_OP_WRITE_AUTH_ENABLE:
1045                 hci_cc_write_auth_enable(hdev, skb);
1046                 break;
1047
1048         case HCI_OP_WRITE_ENCRYPT_MODE:
1049                 hci_cc_write_encrypt_mode(hdev, skb);
1050                 break;
1051
1052         case HCI_OP_WRITE_SCAN_ENABLE:
1053                 hci_cc_write_scan_enable(hdev, skb);
1054                 break;
1055
1056         case HCI_OP_READ_CLASS_OF_DEV:
1057                 hci_cc_read_class_of_dev(hdev, skb);
1058                 break;
1059
1060         case HCI_OP_WRITE_CLASS_OF_DEV:
1061                 hci_cc_write_class_of_dev(hdev, skb);
1062                 break;
1063
1064         case HCI_OP_READ_VOICE_SETTING:
1065                 hci_cc_read_voice_setting(hdev, skb);
1066                 break;
1067
1068         case HCI_OP_WRITE_VOICE_SETTING:
1069                 hci_cc_write_voice_setting(hdev, skb);
1070                 break;
1071
1072         case HCI_OP_HOST_BUFFER_SIZE:
1073                 hci_cc_host_buffer_size(hdev, skb);
1074                 break;
1075
1076         case HCI_OP_READ_LOCAL_VERSION:
1077                 hci_cc_read_local_version(hdev, skb);
1078                 break;
1079
1080         case HCI_OP_READ_LOCAL_COMMANDS:
1081                 hci_cc_read_local_commands(hdev, skb);
1082                 break;
1083
1084         case HCI_OP_READ_LOCAL_FEATURES:
1085                 hci_cc_read_local_features(hdev, skb);
1086                 break;
1087
1088         case HCI_OP_READ_BUFFER_SIZE:
1089                 hci_cc_read_buffer_size(hdev, skb);
1090                 break;
1091
1092         case HCI_OP_READ_BD_ADDR:
1093                 hci_cc_read_bd_addr(hdev, skb);
1094                 break;
1095
1096         default:
1097                 BT_DBG("%s opcode 0x%x", hdev->name, opcode);
1098                 break;
1099         }
1100
1101         if (ev->ncmd) {
1102                 atomic_set(&hdev->cmd_cnt, 1);
1103                 if (!skb_queue_empty(&hdev->cmd_q))
1104                         hci_sched_cmd(hdev);
1105         }
1106 }
1107
1108 static inline void hci_cmd_status_evt(struct hci_dev *hdev, struct sk_buff *skb)
1109 {
1110         struct hci_ev_cmd_status *ev = (void *) skb->data;
1111         __u16 opcode;
1112
1113         skb_pull(skb, sizeof(*ev));
1114
1115         opcode = __le16_to_cpu(ev->opcode);
1116
1117         switch (opcode) {
1118         case HCI_OP_INQUIRY:
1119                 hci_cs_inquiry(hdev, ev->status);
1120                 break;
1121
1122         case HCI_OP_CREATE_CONN:
1123                 hci_cs_create_conn(hdev, ev->status);
1124                 break;
1125
1126         case HCI_OP_ADD_SCO:
1127                 hci_cs_add_sco(hdev, ev->status);
1128                 break;
1129
1130         case HCI_OP_REMOTE_NAME_REQ:
1131                 hci_cs_remote_name_req(hdev, ev->status);
1132                 break;
1133
1134         case HCI_OP_SETUP_SYNC_CONN:
1135                 hci_cs_setup_sync_conn(hdev, ev->status);
1136                 break;
1137
1138         case HCI_OP_SNIFF_MODE:
1139                 hci_cs_sniff_mode(hdev, ev->status);
1140                 break;
1141
1142         case HCI_OP_EXIT_SNIFF_MODE:
1143                 hci_cs_exit_sniff_mode(hdev, ev->status);
1144                 break;
1145
1146         default:
1147                 BT_DBG("%s opcode 0x%x", hdev->name, opcode);
1148                 break;
1149         }
1150
1151         if (ev->ncmd) {
1152                 atomic_set(&hdev->cmd_cnt, 1);
1153                 if (!skb_queue_empty(&hdev->cmd_q))
1154                         hci_sched_cmd(hdev);
1155         }
1156 }
1157
1158 static inline void hci_role_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
1159 {
1160         struct hci_ev_role_change *ev = (void *) skb->data;
1161         struct hci_conn *conn;
1162
1163         BT_DBG("%s status %d", hdev->name, ev->status);
1164
1165         hci_dev_lock(hdev);
1166
1167         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
1168         if (conn) {
1169                 if (!ev->status) {
1170                         if (ev->role)
1171                                 conn->link_mode &= ~HCI_LM_MASTER;
1172                         else
1173                                 conn->link_mode |= HCI_LM_MASTER;
1174                 }
1175
1176                 clear_bit(HCI_CONN_RSWITCH_PEND, &conn->pend);
1177
1178                 hci_role_switch_cfm(conn, ev->status, ev->role);
1179         }
1180
1181         hci_dev_unlock(hdev);
1182 }
1183
1184 static inline void hci_num_comp_pkts_evt(struct hci_dev *hdev, struct sk_buff *skb)
1185 {
1186         struct hci_ev_num_comp_pkts *ev = (void *) skb->data;
1187         __le16 *ptr;
1188         int i;
1189
1190         skb_pull(skb, sizeof(*ev));
1191
1192         BT_DBG("%s num_hndl %d", hdev->name, ev->num_hndl);
1193
1194         if (skb->len < ev->num_hndl * 4) {
1195                 BT_DBG("%s bad parameters", hdev->name);
1196                 return;
1197         }
1198
1199         tasklet_disable(&hdev->tx_task);
1200
1201         for (i = 0, ptr = (__le16 *) skb->data; i < ev->num_hndl; i++) {
1202                 struct hci_conn *conn;
1203                 __u16  handle, count;
1204
1205                 handle = get_unaligned_le16(ptr++);
1206                 count  = get_unaligned_le16(ptr++);
1207
1208                 conn = hci_conn_hash_lookup_handle(hdev, handle);
1209                 if (conn) {
1210                         conn->sent -= count;
1211
1212                         if (conn->type == ACL_LINK) {
1213                                 if ((hdev->acl_cnt += count) > hdev->acl_pkts)
1214                                         hdev->acl_cnt = hdev->acl_pkts;
1215                         } else {
1216                                 if ((hdev->sco_cnt += count) > hdev->sco_pkts)
1217                                         hdev->sco_cnt = hdev->sco_pkts;
1218                         }
1219                 }
1220         }
1221
1222         hci_sched_tx(hdev);
1223
1224         tasklet_enable(&hdev->tx_task);
1225 }
1226
1227 static inline void hci_mode_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
1228 {
1229         struct hci_ev_mode_change *ev = (void *) skb->data;
1230         struct hci_conn *conn;
1231
1232         BT_DBG("%s status %d", hdev->name, ev->status);
1233
1234         hci_dev_lock(hdev);
1235
1236         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1237         if (conn) {
1238                 conn->mode = ev->mode;
1239                 conn->interval = __le16_to_cpu(ev->interval);
1240
1241                 if (!test_and_clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend)) {
1242                         if (conn->mode == HCI_CM_ACTIVE)
1243                                 conn->power_save = 1;
1244                         else
1245                                 conn->power_save = 0;
1246                 }
1247         }
1248
1249         hci_dev_unlock(hdev);
1250 }
1251
1252 static inline void hci_pin_code_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
1253 {
1254         BT_DBG("%s", hdev->name);
1255 }
1256
1257 static inline void hci_link_key_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
1258 {
1259         BT_DBG("%s", hdev->name);
1260 }
1261
1262 static inline void hci_link_key_notify_evt(struct hci_dev *hdev, struct sk_buff *skb)
1263 {
1264         BT_DBG("%s", hdev->name);
1265 }
1266
1267 static inline void hci_clock_offset_evt(struct hci_dev *hdev, struct sk_buff *skb)
1268 {
1269         struct hci_ev_clock_offset *ev = (void *) skb->data;
1270         struct hci_conn *conn;
1271
1272         BT_DBG("%s status %d", hdev->name, ev->status);
1273
1274         hci_dev_lock(hdev);
1275
1276         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1277         if (conn && !ev->status) {
1278                 struct inquiry_entry *ie;
1279
1280                 if ((ie = hci_inquiry_cache_lookup(hdev, &conn->dst))) {
1281                         ie->data.clock_offset = ev->clock_offset;
1282                         ie->timestamp = jiffies;
1283                 }
1284         }
1285
1286         hci_dev_unlock(hdev);
1287 }
1288
1289 static inline void hci_pkt_type_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
1290 {
1291         struct hci_ev_pkt_type_change *ev = (void *) skb->data;
1292         struct hci_conn *conn;
1293
1294         BT_DBG("%s status %d", hdev->name, ev->status);
1295
1296         hci_dev_lock(hdev);
1297
1298         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1299         if (conn && !ev->status)
1300                 conn->pkt_type = __le16_to_cpu(ev->pkt_type);
1301
1302         hci_dev_unlock(hdev);
1303 }
1304
1305 static inline void hci_pscan_rep_mode_evt(struct hci_dev *hdev, struct sk_buff *skb)
1306 {
1307         struct hci_ev_pscan_rep_mode *ev = (void *) skb->data;
1308         struct inquiry_entry *ie;
1309
1310         BT_DBG("%s", hdev->name);
1311
1312         hci_dev_lock(hdev);
1313
1314         if ((ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr))) {
1315                 ie->data.pscan_rep_mode = ev->pscan_rep_mode;
1316                 ie->timestamp = jiffies;
1317         }
1318
1319         hci_dev_unlock(hdev);
1320 }
1321
1322 static inline void hci_inquiry_result_with_rssi_evt(struct hci_dev *hdev, struct sk_buff *skb)
1323 {
1324         struct inquiry_data data;
1325         int num_rsp = *((__u8 *) skb->data);
1326
1327         BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
1328
1329         if (!num_rsp)
1330                 return;
1331
1332         hci_dev_lock(hdev);
1333
1334         if ((skb->len - 1) / num_rsp != sizeof(struct inquiry_info_with_rssi)) {
1335                 struct inquiry_info_with_rssi_and_pscan_mode *info = (void *) (skb->data + 1);
1336
1337                 for (; num_rsp; num_rsp--) {
1338                         bacpy(&data.bdaddr, &info->bdaddr);
1339                         data.pscan_rep_mode     = info->pscan_rep_mode;
1340                         data.pscan_period_mode  = info->pscan_period_mode;
1341                         data.pscan_mode         = info->pscan_mode;
1342                         memcpy(data.dev_class, info->dev_class, 3);
1343                         data.clock_offset       = info->clock_offset;
1344                         data.rssi               = info->rssi;
1345                         info++;
1346                         hci_inquiry_cache_update(hdev, &data);
1347                 }
1348         } else {
1349                 struct inquiry_info_with_rssi *info = (void *) (skb->data + 1);
1350
1351                 for (; num_rsp; num_rsp--) {
1352                         bacpy(&data.bdaddr, &info->bdaddr);
1353                         data.pscan_rep_mode     = info->pscan_rep_mode;
1354                         data.pscan_period_mode  = info->pscan_period_mode;
1355                         data.pscan_mode         = 0x00;
1356                         memcpy(data.dev_class, info->dev_class, 3);
1357                         data.clock_offset       = info->clock_offset;
1358                         data.rssi               = info->rssi;
1359                         info++;
1360                         hci_inquiry_cache_update(hdev, &data);
1361                 }
1362         }
1363
1364         hci_dev_unlock(hdev);
1365 }
1366
1367 static inline void hci_remote_ext_features_evt(struct hci_dev *hdev, struct sk_buff *skb)
1368 {
1369         BT_DBG("%s", hdev->name);
1370 }
1371
1372 static inline void hci_sync_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1373 {
1374         struct hci_ev_sync_conn_complete *ev = (void *) skb->data;
1375         struct hci_conn *conn;
1376
1377         BT_DBG("%s status %d", hdev->name, ev->status);
1378
1379         hci_dev_lock(hdev);
1380
1381         conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
1382         if (!conn) {
1383                 if (ev->link_type == ESCO_LINK)
1384                         goto unlock;
1385
1386                 conn = hci_conn_hash_lookup_ba(hdev, ESCO_LINK, &ev->bdaddr);
1387                 if (!conn)
1388                         goto unlock;
1389
1390                 conn->type = SCO_LINK;
1391         }
1392
1393         if (!ev->status) {
1394                 conn->handle = __le16_to_cpu(ev->handle);
1395                 conn->state  = BT_CONNECTED;
1396         } else
1397                 conn->state = BT_CLOSED;
1398
1399         hci_proto_connect_cfm(conn, ev->status);
1400         if (ev->status)
1401                 hci_conn_del(conn);
1402
1403 unlock:
1404         hci_dev_unlock(hdev);
1405 }
1406
1407 static inline void hci_sync_conn_changed_evt(struct hci_dev *hdev, struct sk_buff *skb)
1408 {
1409         BT_DBG("%s", hdev->name);
1410 }
1411
1412 static inline void hci_sniff_subrate_evt(struct hci_dev *hdev, struct sk_buff *skb)
1413 {
1414         struct hci_ev_sniff_subrate *ev = (void *) skb->data;
1415         struct hci_conn *conn;
1416
1417         BT_DBG("%s status %d", hdev->name, ev->status);
1418
1419         hci_dev_lock(hdev);
1420
1421         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1422         if (conn) {
1423         }
1424
1425         hci_dev_unlock(hdev);
1426 }
1427
1428 static inline void hci_extended_inquiry_result_evt(struct hci_dev *hdev, struct sk_buff *skb)
1429 {
1430         struct inquiry_data data;
1431         struct extended_inquiry_info *info = (void *) (skb->data + 1);
1432         int num_rsp = *((__u8 *) skb->data);
1433
1434         BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
1435
1436         if (!num_rsp)
1437                 return;
1438
1439         hci_dev_lock(hdev);
1440
1441         for (; num_rsp; num_rsp--) {
1442                 bacpy(&data.bdaddr, &info->bdaddr);
1443                 data.pscan_rep_mode     = info->pscan_rep_mode;
1444                 data.pscan_period_mode  = info->pscan_period_mode;
1445                 data.pscan_mode         = 0x00;
1446                 memcpy(data.dev_class, info->dev_class, 3);
1447                 data.clock_offset       = info->clock_offset;
1448                 data.rssi               = info->rssi;
1449                 info++;
1450                 hci_inquiry_cache_update(hdev, &data);
1451         }
1452
1453         hci_dev_unlock(hdev);
1454 }
1455
1456 void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb)
1457 {
1458         struct hci_event_hdr *hdr = (void *) skb->data;
1459         __u8 event = hdr->evt;
1460
1461         skb_pull(skb, HCI_EVENT_HDR_SIZE);
1462
1463         switch (event) {
1464         case HCI_EV_INQUIRY_COMPLETE:
1465                 hci_inquiry_complete_evt(hdev, skb);
1466                 break;
1467
1468         case HCI_EV_INQUIRY_RESULT:
1469                 hci_inquiry_result_evt(hdev, skb);
1470                 break;
1471
1472         case HCI_EV_CONN_COMPLETE:
1473                 hci_conn_complete_evt(hdev, skb);
1474                 break;
1475
1476         case HCI_EV_CONN_REQUEST:
1477                 hci_conn_request_evt(hdev, skb);
1478                 break;
1479
1480         case HCI_EV_DISCONN_COMPLETE:
1481                 hci_disconn_complete_evt(hdev, skb);
1482                 break;
1483
1484         case HCI_EV_AUTH_COMPLETE:
1485                 hci_auth_complete_evt(hdev, skb);
1486                 break;
1487
1488         case HCI_EV_REMOTE_NAME:
1489                 hci_remote_name_evt(hdev, skb);
1490                 break;
1491
1492         case HCI_EV_ENCRYPT_CHANGE:
1493                 hci_encrypt_change_evt(hdev, skb);
1494                 break;
1495
1496         case HCI_EV_CHANGE_LINK_KEY_COMPLETE:
1497                 hci_change_link_key_complete_evt(hdev, skb);
1498                 break;
1499
1500         case HCI_EV_REMOTE_FEATURES:
1501                 hci_remote_features_evt(hdev, skb);
1502                 break;
1503
1504         case HCI_EV_REMOTE_VERSION:
1505                 hci_remote_version_evt(hdev, skb);
1506                 break;
1507
1508         case HCI_EV_QOS_SETUP_COMPLETE:
1509                 hci_qos_setup_complete_evt(hdev, skb);
1510                 break;
1511
1512         case HCI_EV_CMD_COMPLETE:
1513                 hci_cmd_complete_evt(hdev, skb);
1514                 break;
1515
1516         case HCI_EV_CMD_STATUS:
1517                 hci_cmd_status_evt(hdev, skb);
1518                 break;
1519
1520         case HCI_EV_ROLE_CHANGE:
1521                 hci_role_change_evt(hdev, skb);
1522                 break;
1523
1524         case HCI_EV_NUM_COMP_PKTS:
1525                 hci_num_comp_pkts_evt(hdev, skb);
1526                 break;
1527
1528         case HCI_EV_MODE_CHANGE:
1529                 hci_mode_change_evt(hdev, skb);
1530                 break;
1531
1532         case HCI_EV_PIN_CODE_REQ:
1533                 hci_pin_code_request_evt(hdev, skb);
1534                 break;
1535
1536         case HCI_EV_LINK_KEY_REQ:
1537                 hci_link_key_request_evt(hdev, skb);
1538                 break;
1539
1540         case HCI_EV_LINK_KEY_NOTIFY:
1541                 hci_link_key_notify_evt(hdev, skb);
1542                 break;
1543
1544         case HCI_EV_CLOCK_OFFSET:
1545                 hci_clock_offset_evt(hdev, skb);
1546                 break;
1547
1548         case HCI_EV_PKT_TYPE_CHANGE:
1549                 hci_pkt_type_change_evt(hdev, skb);
1550                 break;
1551
1552         case HCI_EV_PSCAN_REP_MODE:
1553                 hci_pscan_rep_mode_evt(hdev, skb);
1554                 break;
1555
1556         case HCI_EV_INQUIRY_RESULT_WITH_RSSI:
1557                 hci_inquiry_result_with_rssi_evt(hdev, skb);
1558                 break;
1559
1560         case HCI_EV_REMOTE_EXT_FEATURES:
1561                 hci_remote_ext_features_evt(hdev, skb);
1562                 break;
1563
1564         case HCI_EV_SYNC_CONN_COMPLETE:
1565                 hci_sync_conn_complete_evt(hdev, skb);
1566                 break;
1567
1568         case HCI_EV_SYNC_CONN_CHANGED:
1569                 hci_sync_conn_changed_evt(hdev, skb);
1570                 break;
1571
1572         case HCI_EV_SNIFF_SUBRATE:
1573                 hci_sniff_subrate_evt(hdev, skb);
1574                 break;
1575
1576         case HCI_EV_EXTENDED_INQUIRY_RESULT:
1577                 hci_extended_inquiry_result_evt(hdev, skb);
1578                 break;
1579
1580         default:
1581                 BT_DBG("%s event 0x%x", hdev->name, event);
1582                 break;
1583         }
1584
1585         kfree_skb(skb);
1586         hdev->stat.evt_rx++;
1587 }
1588
1589 /* Generate internal stack event */
1590 void hci_si_event(struct hci_dev *hdev, int type, int dlen, void *data)
1591 {
1592         struct hci_event_hdr *hdr;
1593         struct hci_ev_stack_internal *ev;
1594         struct sk_buff *skb;
1595
1596         skb = bt_skb_alloc(HCI_EVENT_HDR_SIZE + sizeof(*ev) + dlen, GFP_ATOMIC);
1597         if (!skb)
1598                 return;
1599
1600         hdr = (void *) skb_put(skb, HCI_EVENT_HDR_SIZE);
1601         hdr->evt  = HCI_EV_STACK_INTERNAL;
1602         hdr->plen = sizeof(*ev) + dlen;
1603
1604         ev  = (void *) skb_put(skb, sizeof(*ev) + dlen);
1605         ev->type = type;
1606         memcpy(ev->data, data, dlen);
1607
1608         bt_cb(skb)->incoming = 1;
1609         __net_timestamp(skb);
1610
1611         bt_cb(skb)->pkt_type = HCI_EVENT_PKT;
1612         skb->dev = (void *) hdev;
1613         hci_send_to_sock(hdev, skb);
1614         kfree_skb(skb);
1615 }