]> Pileus Git - ~andy/linux/blob - net/bluetooth/hci_event.c
Linux 3.14
[~andy/linux] / net / bluetooth / hci_event.c
1 /*
2    BlueZ - Bluetooth protocol stack for Linux
3    Copyright (c) 2000-2001, 2010, Code Aurora Forum. All rights reserved.
4
5    Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License version 2 as
9    published by the Free Software Foundation;
10
11    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
12    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
13    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
14    IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
15    CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
16    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19
20    ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
21    COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
22    SOFTWARE IS DISCLAIMED.
23 */
24
25 /* Bluetooth HCI event handling. */
26
27 #include <asm/unaligned.h>
28
29 #include <net/bluetooth/bluetooth.h>
30 #include <net/bluetooth/hci_core.h>
31 #include <net/bluetooth/mgmt.h>
32
33 #include "a2mp.h"
34 #include "amp.h"
35
36 /* Handle HCI Event packets */
37
38 static void hci_cc_inquiry_cancel(struct hci_dev *hdev, struct sk_buff *skb)
39 {
40         __u8 status = *((__u8 *) skb->data);
41
42         BT_DBG("%s status 0x%2.2x", hdev->name, status);
43
44         if (status)
45                 return;
46
47         clear_bit(HCI_INQUIRY, &hdev->flags);
48         smp_mb__after_clear_bit(); /* wake_up_bit advises about this barrier */
49         wake_up_bit(&hdev->flags, HCI_INQUIRY);
50
51         hci_conn_check_pending(hdev);
52 }
53
54 static void hci_cc_periodic_inq(struct hci_dev *hdev, struct sk_buff *skb)
55 {
56         __u8 status = *((__u8 *) skb->data);
57
58         BT_DBG("%s status 0x%2.2x", hdev->name, status);
59
60         if (status)
61                 return;
62
63         set_bit(HCI_PERIODIC_INQ, &hdev->dev_flags);
64 }
65
66 static void hci_cc_exit_periodic_inq(struct hci_dev *hdev, struct sk_buff *skb)
67 {
68         __u8 status = *((__u8 *) skb->data);
69
70         BT_DBG("%s status 0x%2.2x", hdev->name, status);
71
72         if (status)
73                 return;
74
75         clear_bit(HCI_PERIODIC_INQ, &hdev->dev_flags);
76
77         hci_conn_check_pending(hdev);
78 }
79
80 static void hci_cc_remote_name_req_cancel(struct hci_dev *hdev,
81                                           struct sk_buff *skb)
82 {
83         BT_DBG("%s", hdev->name);
84 }
85
86 static void hci_cc_role_discovery(struct hci_dev *hdev, struct sk_buff *skb)
87 {
88         struct hci_rp_role_discovery *rp = (void *) skb->data;
89         struct hci_conn *conn;
90
91         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
92
93         if (rp->status)
94                 return;
95
96         hci_dev_lock(hdev);
97
98         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
99         if (conn) {
100                 if (rp->role)
101                         conn->link_mode &= ~HCI_LM_MASTER;
102                 else
103                         conn->link_mode |= HCI_LM_MASTER;
104         }
105
106         hci_dev_unlock(hdev);
107 }
108
109 static void hci_cc_read_link_policy(struct hci_dev *hdev, struct sk_buff *skb)
110 {
111         struct hci_rp_read_link_policy *rp = (void *) skb->data;
112         struct hci_conn *conn;
113
114         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
115
116         if (rp->status)
117                 return;
118
119         hci_dev_lock(hdev);
120
121         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
122         if (conn)
123                 conn->link_policy = __le16_to_cpu(rp->policy);
124
125         hci_dev_unlock(hdev);
126 }
127
128 static void hci_cc_write_link_policy(struct hci_dev *hdev, struct sk_buff *skb)
129 {
130         struct hci_rp_write_link_policy *rp = (void *) skb->data;
131         struct hci_conn *conn;
132         void *sent;
133
134         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
135
136         if (rp->status)
137                 return;
138
139         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_LINK_POLICY);
140         if (!sent)
141                 return;
142
143         hci_dev_lock(hdev);
144
145         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
146         if (conn)
147                 conn->link_policy = get_unaligned_le16(sent + 2);
148
149         hci_dev_unlock(hdev);
150 }
151
152 static void hci_cc_read_def_link_policy(struct hci_dev *hdev,
153                                         struct sk_buff *skb)
154 {
155         struct hci_rp_read_def_link_policy *rp = (void *) skb->data;
156
157         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
158
159         if (rp->status)
160                 return;
161
162         hdev->link_policy = __le16_to_cpu(rp->policy);
163 }
164
165 static void hci_cc_write_def_link_policy(struct hci_dev *hdev,
166                                          struct sk_buff *skb)
167 {
168         __u8 status = *((__u8 *) skb->data);
169         void *sent;
170
171         BT_DBG("%s status 0x%2.2x", hdev->name, status);
172
173         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_DEF_LINK_POLICY);
174         if (!sent)
175                 return;
176
177         if (!status)
178                 hdev->link_policy = get_unaligned_le16(sent);
179 }
180
181 static void hci_cc_reset(struct hci_dev *hdev, struct sk_buff *skb)
182 {
183         __u8 status = *((__u8 *) skb->data);
184
185         BT_DBG("%s status 0x%2.2x", hdev->name, status);
186
187         clear_bit(HCI_RESET, &hdev->flags);
188
189         /* Reset all non-persistent flags */
190         hdev->dev_flags &= ~HCI_PERSISTENT_MASK;
191
192         hdev->discovery.state = DISCOVERY_STOPPED;
193         hdev->inq_tx_power = HCI_TX_POWER_INVALID;
194         hdev->adv_tx_power = HCI_TX_POWER_INVALID;
195
196         memset(hdev->adv_data, 0, sizeof(hdev->adv_data));
197         hdev->adv_data_len = 0;
198
199         memset(hdev->scan_rsp_data, 0, sizeof(hdev->scan_rsp_data));
200         hdev->scan_rsp_data_len = 0;
201
202         hdev->ssp_debug_mode = 0;
203 }
204
205 static void hci_cc_write_local_name(struct hci_dev *hdev, struct sk_buff *skb)
206 {
207         __u8 status = *((__u8 *) skb->data);
208         void *sent;
209
210         BT_DBG("%s status 0x%2.2x", hdev->name, status);
211
212         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_LOCAL_NAME);
213         if (!sent)
214                 return;
215
216         hci_dev_lock(hdev);
217
218         if (test_bit(HCI_MGMT, &hdev->dev_flags))
219                 mgmt_set_local_name_complete(hdev, sent, status);
220         else if (!status)
221                 memcpy(hdev->dev_name, sent, HCI_MAX_NAME_LENGTH);
222
223         hci_dev_unlock(hdev);
224 }
225
226 static void hci_cc_read_local_name(struct hci_dev *hdev, struct sk_buff *skb)
227 {
228         struct hci_rp_read_local_name *rp = (void *) skb->data;
229
230         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
231
232         if (rp->status)
233                 return;
234
235         if (test_bit(HCI_SETUP, &hdev->dev_flags))
236                 memcpy(hdev->dev_name, rp->name, HCI_MAX_NAME_LENGTH);
237 }
238
239 static void hci_cc_write_auth_enable(struct hci_dev *hdev, struct sk_buff *skb)
240 {
241         __u8 status = *((__u8 *) skb->data);
242         void *sent;
243
244         BT_DBG("%s status 0x%2.2x", hdev->name, status);
245
246         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_AUTH_ENABLE);
247         if (!sent)
248                 return;
249
250         if (!status) {
251                 __u8 param = *((__u8 *) sent);
252
253                 if (param == AUTH_ENABLED)
254                         set_bit(HCI_AUTH, &hdev->flags);
255                 else
256                         clear_bit(HCI_AUTH, &hdev->flags);
257         }
258
259         if (test_bit(HCI_MGMT, &hdev->dev_flags))
260                 mgmt_auth_enable_complete(hdev, status);
261 }
262
263 static void hci_cc_write_encrypt_mode(struct hci_dev *hdev, struct sk_buff *skb)
264 {
265         __u8 status = *((__u8 *) skb->data);
266         void *sent;
267
268         BT_DBG("%s status 0x%2.2x", hdev->name, status);
269
270         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_ENCRYPT_MODE);
271         if (!sent)
272                 return;
273
274         if (!status) {
275                 __u8 param = *((__u8 *) sent);
276
277                 if (param)
278                         set_bit(HCI_ENCRYPT, &hdev->flags);
279                 else
280                         clear_bit(HCI_ENCRYPT, &hdev->flags);
281         }
282 }
283
284 static void hci_cc_write_scan_enable(struct hci_dev *hdev, struct sk_buff *skb)
285 {
286         __u8 param, status = *((__u8 *) skb->data);
287         int old_pscan, old_iscan;
288         void *sent;
289
290         BT_DBG("%s status 0x%2.2x", hdev->name, status);
291
292         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_SCAN_ENABLE);
293         if (!sent)
294                 return;
295
296         param = *((__u8 *) sent);
297
298         hci_dev_lock(hdev);
299
300         if (status) {
301                 mgmt_write_scan_failed(hdev, param, status);
302                 hdev->discov_timeout = 0;
303                 goto done;
304         }
305
306         /* We need to ensure that we set this back on if someone changed
307          * the scan mode through a raw HCI socket.
308          */
309         set_bit(HCI_BREDR_ENABLED, &hdev->dev_flags);
310
311         old_pscan = test_and_clear_bit(HCI_PSCAN, &hdev->flags);
312         old_iscan = test_and_clear_bit(HCI_ISCAN, &hdev->flags);
313
314         if (param & SCAN_INQUIRY) {
315                 set_bit(HCI_ISCAN, &hdev->flags);
316                 if (!old_iscan)
317                         mgmt_discoverable(hdev, 1);
318         } else if (old_iscan)
319                 mgmt_discoverable(hdev, 0);
320
321         if (param & SCAN_PAGE) {
322                 set_bit(HCI_PSCAN, &hdev->flags);
323                 if (!old_pscan)
324                         mgmt_connectable(hdev, 1);
325         } else if (old_pscan)
326                 mgmt_connectable(hdev, 0);
327
328 done:
329         hci_dev_unlock(hdev);
330 }
331
332 static void hci_cc_read_class_of_dev(struct hci_dev *hdev, struct sk_buff *skb)
333 {
334         struct hci_rp_read_class_of_dev *rp = (void *) skb->data;
335
336         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
337
338         if (rp->status)
339                 return;
340
341         memcpy(hdev->dev_class, rp->dev_class, 3);
342
343         BT_DBG("%s class 0x%.2x%.2x%.2x", hdev->name,
344                hdev->dev_class[2], hdev->dev_class[1], hdev->dev_class[0]);
345 }
346
347 static void hci_cc_write_class_of_dev(struct hci_dev *hdev, struct sk_buff *skb)
348 {
349         __u8 status = *((__u8 *) skb->data);
350         void *sent;
351
352         BT_DBG("%s status 0x%2.2x", hdev->name, status);
353
354         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_CLASS_OF_DEV);
355         if (!sent)
356                 return;
357
358         hci_dev_lock(hdev);
359
360         if (status == 0)
361                 memcpy(hdev->dev_class, sent, 3);
362
363         if (test_bit(HCI_MGMT, &hdev->dev_flags))
364                 mgmt_set_class_of_dev_complete(hdev, sent, status);
365
366         hci_dev_unlock(hdev);
367 }
368
369 static void hci_cc_read_voice_setting(struct hci_dev *hdev, struct sk_buff *skb)
370 {
371         struct hci_rp_read_voice_setting *rp = (void *) skb->data;
372         __u16 setting;
373
374         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
375
376         if (rp->status)
377                 return;
378
379         setting = __le16_to_cpu(rp->voice_setting);
380
381         if (hdev->voice_setting == setting)
382                 return;
383
384         hdev->voice_setting = setting;
385
386         BT_DBG("%s voice setting 0x%4.4x", hdev->name, setting);
387
388         if (hdev->notify)
389                 hdev->notify(hdev, HCI_NOTIFY_VOICE_SETTING);
390 }
391
392 static void hci_cc_write_voice_setting(struct hci_dev *hdev,
393                                        struct sk_buff *skb)
394 {
395         __u8 status = *((__u8 *) skb->data);
396         __u16 setting;
397         void *sent;
398
399         BT_DBG("%s status 0x%2.2x", hdev->name, status);
400
401         if (status)
402                 return;
403
404         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_VOICE_SETTING);
405         if (!sent)
406                 return;
407
408         setting = get_unaligned_le16(sent);
409
410         if (hdev->voice_setting == setting)
411                 return;
412
413         hdev->voice_setting = setting;
414
415         BT_DBG("%s voice setting 0x%4.4x", hdev->name, setting);
416
417         if (hdev->notify)
418                 hdev->notify(hdev, HCI_NOTIFY_VOICE_SETTING);
419 }
420
421 static void hci_cc_read_num_supported_iac(struct hci_dev *hdev,
422                                           struct sk_buff *skb)
423 {
424         struct hci_rp_read_num_supported_iac *rp = (void *) skb->data;
425
426         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
427
428         if (rp->status)
429                 return;
430
431         hdev->num_iac = rp->num_iac;
432
433         BT_DBG("%s num iac %d", hdev->name, hdev->num_iac);
434 }
435
436 static void hci_cc_write_ssp_mode(struct hci_dev *hdev, struct sk_buff *skb)
437 {
438         __u8 status = *((__u8 *) skb->data);
439         struct hci_cp_write_ssp_mode *sent;
440
441         BT_DBG("%s status 0x%2.2x", hdev->name, status);
442
443         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_SSP_MODE);
444         if (!sent)
445                 return;
446
447         if (!status) {
448                 if (sent->mode)
449                         hdev->features[1][0] |= LMP_HOST_SSP;
450                 else
451                         hdev->features[1][0] &= ~LMP_HOST_SSP;
452         }
453
454         if (test_bit(HCI_MGMT, &hdev->dev_flags))
455                 mgmt_ssp_enable_complete(hdev, sent->mode, status);
456         else if (!status) {
457                 if (sent->mode)
458                         set_bit(HCI_SSP_ENABLED, &hdev->dev_flags);
459                 else
460                         clear_bit(HCI_SSP_ENABLED, &hdev->dev_flags);
461         }
462 }
463
464 static void hci_cc_read_local_version(struct hci_dev *hdev, struct sk_buff *skb)
465 {
466         struct hci_rp_read_local_version *rp = (void *) skb->data;
467
468         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
469
470         if (rp->status)
471                 return;
472
473         if (test_bit(HCI_SETUP, &hdev->dev_flags)) {
474                 hdev->hci_ver = rp->hci_ver;
475                 hdev->hci_rev = __le16_to_cpu(rp->hci_rev);
476                 hdev->lmp_ver = rp->lmp_ver;
477                 hdev->manufacturer = __le16_to_cpu(rp->manufacturer);
478                 hdev->lmp_subver = __le16_to_cpu(rp->lmp_subver);
479         }
480 }
481
482 static void hci_cc_read_local_commands(struct hci_dev *hdev,
483                                        struct sk_buff *skb)
484 {
485         struct hci_rp_read_local_commands *rp = (void *) skb->data;
486
487         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
488
489         if (rp->status)
490                 return;
491
492         if (test_bit(HCI_SETUP, &hdev->dev_flags))
493                 memcpy(hdev->commands, rp->commands, sizeof(hdev->commands));
494 }
495
496 static void hci_cc_read_local_features(struct hci_dev *hdev,
497                                        struct sk_buff *skb)
498 {
499         struct hci_rp_read_local_features *rp = (void *) skb->data;
500
501         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
502
503         if (rp->status)
504                 return;
505
506         memcpy(hdev->features, rp->features, 8);
507
508         /* Adjust default settings according to features
509          * supported by device. */
510
511         if (hdev->features[0][0] & LMP_3SLOT)
512                 hdev->pkt_type |= (HCI_DM3 | HCI_DH3);
513
514         if (hdev->features[0][0] & LMP_5SLOT)
515                 hdev->pkt_type |= (HCI_DM5 | HCI_DH5);
516
517         if (hdev->features[0][1] & LMP_HV2) {
518                 hdev->pkt_type  |= (HCI_HV2);
519                 hdev->esco_type |= (ESCO_HV2);
520         }
521
522         if (hdev->features[0][1] & LMP_HV3) {
523                 hdev->pkt_type  |= (HCI_HV3);
524                 hdev->esco_type |= (ESCO_HV3);
525         }
526
527         if (lmp_esco_capable(hdev))
528                 hdev->esco_type |= (ESCO_EV3);
529
530         if (hdev->features[0][4] & LMP_EV4)
531                 hdev->esco_type |= (ESCO_EV4);
532
533         if (hdev->features[0][4] & LMP_EV5)
534                 hdev->esco_type |= (ESCO_EV5);
535
536         if (hdev->features[0][5] & LMP_EDR_ESCO_2M)
537                 hdev->esco_type |= (ESCO_2EV3);
538
539         if (hdev->features[0][5] & LMP_EDR_ESCO_3M)
540                 hdev->esco_type |= (ESCO_3EV3);
541
542         if (hdev->features[0][5] & LMP_EDR_3S_ESCO)
543                 hdev->esco_type |= (ESCO_2EV5 | ESCO_3EV5);
544 }
545
546 static void hci_cc_read_local_ext_features(struct hci_dev *hdev,
547                                            struct sk_buff *skb)
548 {
549         struct hci_rp_read_local_ext_features *rp = (void *) skb->data;
550
551         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
552
553         if (rp->status)
554                 return;
555
556         if (hdev->max_page < rp->max_page)
557                 hdev->max_page = rp->max_page;
558
559         if (rp->page < HCI_MAX_PAGES)
560                 memcpy(hdev->features[rp->page], rp->features, 8);
561 }
562
563 static void hci_cc_read_flow_control_mode(struct hci_dev *hdev,
564                                           struct sk_buff *skb)
565 {
566         struct hci_rp_read_flow_control_mode *rp = (void *) skb->data;
567
568         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
569
570         if (!rp->status)
571                 hdev->flow_ctl_mode = rp->mode;
572 }
573
574 static void hci_cc_read_buffer_size(struct hci_dev *hdev, struct sk_buff *skb)
575 {
576         struct hci_rp_read_buffer_size *rp = (void *) skb->data;
577
578         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
579
580         if (rp->status)
581                 return;
582
583         hdev->acl_mtu  = __le16_to_cpu(rp->acl_mtu);
584         hdev->sco_mtu  = rp->sco_mtu;
585         hdev->acl_pkts = __le16_to_cpu(rp->acl_max_pkt);
586         hdev->sco_pkts = __le16_to_cpu(rp->sco_max_pkt);
587
588         if (test_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE, &hdev->quirks)) {
589                 hdev->sco_mtu  = 64;
590                 hdev->sco_pkts = 8;
591         }
592
593         hdev->acl_cnt = hdev->acl_pkts;
594         hdev->sco_cnt = hdev->sco_pkts;
595
596         BT_DBG("%s acl mtu %d:%d sco mtu %d:%d", hdev->name, hdev->acl_mtu,
597                hdev->acl_pkts, hdev->sco_mtu, hdev->sco_pkts);
598 }
599
600 static void hci_cc_read_bd_addr(struct hci_dev *hdev, struct sk_buff *skb)
601 {
602         struct hci_rp_read_bd_addr *rp = (void *) skb->data;
603
604         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
605
606         if (!rp->status)
607                 bacpy(&hdev->bdaddr, &rp->bdaddr);
608 }
609
610 static void hci_cc_read_page_scan_activity(struct hci_dev *hdev,
611                                            struct sk_buff *skb)
612 {
613         struct hci_rp_read_page_scan_activity *rp = (void *) skb->data;
614
615         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
616
617         if (test_bit(HCI_INIT, &hdev->flags) && !rp->status) {
618                 hdev->page_scan_interval = __le16_to_cpu(rp->interval);
619                 hdev->page_scan_window = __le16_to_cpu(rp->window);
620         }
621 }
622
623 static void hci_cc_write_page_scan_activity(struct hci_dev *hdev,
624                                             struct sk_buff *skb)
625 {
626         u8 status = *((u8 *) skb->data);
627         struct hci_cp_write_page_scan_activity *sent;
628
629         BT_DBG("%s status 0x%2.2x", hdev->name, status);
630
631         if (status)
632                 return;
633
634         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_PAGE_SCAN_ACTIVITY);
635         if (!sent)
636                 return;
637
638         hdev->page_scan_interval = __le16_to_cpu(sent->interval);
639         hdev->page_scan_window = __le16_to_cpu(sent->window);
640 }
641
642 static void hci_cc_read_page_scan_type(struct hci_dev *hdev,
643                                            struct sk_buff *skb)
644 {
645         struct hci_rp_read_page_scan_type *rp = (void *) skb->data;
646
647         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
648
649         if (test_bit(HCI_INIT, &hdev->flags) && !rp->status)
650                 hdev->page_scan_type = rp->type;
651 }
652
653 static void hci_cc_write_page_scan_type(struct hci_dev *hdev,
654                                         struct sk_buff *skb)
655 {
656         u8 status = *((u8 *) skb->data);
657         u8 *type;
658
659         BT_DBG("%s status 0x%2.2x", hdev->name, status);
660
661         if (status)
662                 return;
663
664         type = hci_sent_cmd_data(hdev, HCI_OP_WRITE_PAGE_SCAN_TYPE);
665         if (type)
666                 hdev->page_scan_type = *type;
667 }
668
669 static void hci_cc_read_data_block_size(struct hci_dev *hdev,
670                                         struct sk_buff *skb)
671 {
672         struct hci_rp_read_data_block_size *rp = (void *) skb->data;
673
674         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
675
676         if (rp->status)
677                 return;
678
679         hdev->block_mtu = __le16_to_cpu(rp->max_acl_len);
680         hdev->block_len = __le16_to_cpu(rp->block_len);
681         hdev->num_blocks = __le16_to_cpu(rp->num_blocks);
682
683         hdev->block_cnt = hdev->num_blocks;
684
685         BT_DBG("%s blk mtu %d cnt %d len %d", hdev->name, hdev->block_mtu,
686                hdev->block_cnt, hdev->block_len);
687 }
688
689 static void hci_cc_read_local_amp_info(struct hci_dev *hdev,
690                                        struct sk_buff *skb)
691 {
692         struct hci_rp_read_local_amp_info *rp = (void *) skb->data;
693
694         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
695
696         if (rp->status)
697                 goto a2mp_rsp;
698
699         hdev->amp_status = rp->amp_status;
700         hdev->amp_total_bw = __le32_to_cpu(rp->total_bw);
701         hdev->amp_max_bw = __le32_to_cpu(rp->max_bw);
702         hdev->amp_min_latency = __le32_to_cpu(rp->min_latency);
703         hdev->amp_max_pdu = __le32_to_cpu(rp->max_pdu);
704         hdev->amp_type = rp->amp_type;
705         hdev->amp_pal_cap = __le16_to_cpu(rp->pal_cap);
706         hdev->amp_assoc_size = __le16_to_cpu(rp->max_assoc_size);
707         hdev->amp_be_flush_to = __le32_to_cpu(rp->be_flush_to);
708         hdev->amp_max_flush_to = __le32_to_cpu(rp->max_flush_to);
709
710 a2mp_rsp:
711         a2mp_send_getinfo_rsp(hdev);
712 }
713
714 static void hci_cc_read_local_amp_assoc(struct hci_dev *hdev,
715                                         struct sk_buff *skb)
716 {
717         struct hci_rp_read_local_amp_assoc *rp = (void *) skb->data;
718         struct amp_assoc *assoc = &hdev->loc_assoc;
719         size_t rem_len, frag_len;
720
721         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
722
723         if (rp->status)
724                 goto a2mp_rsp;
725
726         frag_len = skb->len - sizeof(*rp);
727         rem_len = __le16_to_cpu(rp->rem_len);
728
729         if (rem_len > frag_len) {
730                 BT_DBG("frag_len %zu rem_len %zu", frag_len, rem_len);
731
732                 memcpy(assoc->data + assoc->offset, rp->frag, frag_len);
733                 assoc->offset += frag_len;
734
735                 /* Read other fragments */
736                 amp_read_loc_assoc_frag(hdev, rp->phy_handle);
737
738                 return;
739         }
740
741         memcpy(assoc->data + assoc->offset, rp->frag, rem_len);
742         assoc->len = assoc->offset + rem_len;
743         assoc->offset = 0;
744
745 a2mp_rsp:
746         /* Send A2MP Rsp when all fragments are received */
747         a2mp_send_getampassoc_rsp(hdev, rp->status);
748         a2mp_send_create_phy_link_req(hdev, rp->status);
749 }
750
751 static void hci_cc_read_inq_rsp_tx_power(struct hci_dev *hdev,
752                                          struct sk_buff *skb)
753 {
754         struct hci_rp_read_inq_rsp_tx_power *rp = (void *) skb->data;
755
756         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
757
758         if (!rp->status)
759                 hdev->inq_tx_power = rp->tx_power;
760 }
761
762 static void hci_cc_pin_code_reply(struct hci_dev *hdev, struct sk_buff *skb)
763 {
764         struct hci_rp_pin_code_reply *rp = (void *) skb->data;
765         struct hci_cp_pin_code_reply *cp;
766         struct hci_conn *conn;
767
768         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
769
770         hci_dev_lock(hdev);
771
772         if (test_bit(HCI_MGMT, &hdev->dev_flags))
773                 mgmt_pin_code_reply_complete(hdev, &rp->bdaddr, rp->status);
774
775         if (rp->status)
776                 goto unlock;
777
778         cp = hci_sent_cmd_data(hdev, HCI_OP_PIN_CODE_REPLY);
779         if (!cp)
780                 goto unlock;
781
782         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
783         if (conn)
784                 conn->pin_length = cp->pin_len;
785
786 unlock:
787         hci_dev_unlock(hdev);
788 }
789
790 static void hci_cc_pin_code_neg_reply(struct hci_dev *hdev, struct sk_buff *skb)
791 {
792         struct hci_rp_pin_code_neg_reply *rp = (void *) skb->data;
793
794         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
795
796         hci_dev_lock(hdev);
797
798         if (test_bit(HCI_MGMT, &hdev->dev_flags))
799                 mgmt_pin_code_neg_reply_complete(hdev, &rp->bdaddr,
800                                                  rp->status);
801
802         hci_dev_unlock(hdev);
803 }
804
805 static void hci_cc_le_read_buffer_size(struct hci_dev *hdev,
806                                        struct sk_buff *skb)
807 {
808         struct hci_rp_le_read_buffer_size *rp = (void *) skb->data;
809
810         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
811
812         if (rp->status)
813                 return;
814
815         hdev->le_mtu = __le16_to_cpu(rp->le_mtu);
816         hdev->le_pkts = rp->le_max_pkt;
817
818         hdev->le_cnt = hdev->le_pkts;
819
820         BT_DBG("%s le mtu %d:%d", hdev->name, hdev->le_mtu, hdev->le_pkts);
821 }
822
823 static void hci_cc_le_read_local_features(struct hci_dev *hdev,
824                                           struct sk_buff *skb)
825 {
826         struct hci_rp_le_read_local_features *rp = (void *) skb->data;
827
828         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
829
830         if (!rp->status)
831                 memcpy(hdev->le_features, rp->features, 8);
832 }
833
834 static void hci_cc_le_read_adv_tx_power(struct hci_dev *hdev,
835                                         struct sk_buff *skb)
836 {
837         struct hci_rp_le_read_adv_tx_power *rp = (void *) skb->data;
838
839         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
840
841         if (!rp->status)
842                 hdev->adv_tx_power = rp->tx_power;
843 }
844
845 static void hci_cc_user_confirm_reply(struct hci_dev *hdev, struct sk_buff *skb)
846 {
847         struct hci_rp_user_confirm_reply *rp = (void *) skb->data;
848
849         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
850
851         hci_dev_lock(hdev);
852
853         if (test_bit(HCI_MGMT, &hdev->dev_flags))
854                 mgmt_user_confirm_reply_complete(hdev, &rp->bdaddr, ACL_LINK, 0,
855                                                  rp->status);
856
857         hci_dev_unlock(hdev);
858 }
859
860 static void hci_cc_user_confirm_neg_reply(struct hci_dev *hdev,
861                                           struct sk_buff *skb)
862 {
863         struct hci_rp_user_confirm_reply *rp = (void *) skb->data;
864
865         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
866
867         hci_dev_lock(hdev);
868
869         if (test_bit(HCI_MGMT, &hdev->dev_flags))
870                 mgmt_user_confirm_neg_reply_complete(hdev, &rp->bdaddr,
871                                                      ACL_LINK, 0, rp->status);
872
873         hci_dev_unlock(hdev);
874 }
875
876 static void hci_cc_user_passkey_reply(struct hci_dev *hdev, struct sk_buff *skb)
877 {
878         struct hci_rp_user_confirm_reply *rp = (void *) skb->data;
879
880         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
881
882         hci_dev_lock(hdev);
883
884         if (test_bit(HCI_MGMT, &hdev->dev_flags))
885                 mgmt_user_passkey_reply_complete(hdev, &rp->bdaddr, ACL_LINK,
886                                                  0, rp->status);
887
888         hci_dev_unlock(hdev);
889 }
890
891 static void hci_cc_user_passkey_neg_reply(struct hci_dev *hdev,
892                                           struct sk_buff *skb)
893 {
894         struct hci_rp_user_confirm_reply *rp = (void *) skb->data;
895
896         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
897
898         hci_dev_lock(hdev);
899
900         if (test_bit(HCI_MGMT, &hdev->dev_flags))
901                 mgmt_user_passkey_neg_reply_complete(hdev, &rp->bdaddr,
902                                                      ACL_LINK, 0, rp->status);
903
904         hci_dev_unlock(hdev);
905 }
906
907 static void hci_cc_read_local_oob_data_reply(struct hci_dev *hdev,
908                                              struct sk_buff *skb)
909 {
910         struct hci_rp_read_local_oob_data *rp = (void *) skb->data;
911
912         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
913
914         hci_dev_lock(hdev);
915         mgmt_read_local_oob_data_reply_complete(hdev, rp->hash,
916                                                 rp->randomizer, rp->status);
917         hci_dev_unlock(hdev);
918 }
919
920 static void hci_cc_le_set_adv_enable(struct hci_dev *hdev, struct sk_buff *skb)
921 {
922         __u8 *sent, status = *((__u8 *) skb->data);
923
924         BT_DBG("%s status 0x%2.2x", hdev->name, status);
925
926         sent = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_ADV_ENABLE);
927         if (!sent)
928                 return;
929
930         hci_dev_lock(hdev);
931
932         if (!status) {
933                 if (*sent)
934                         set_bit(HCI_ADVERTISING, &hdev->dev_flags);
935                 else
936                         clear_bit(HCI_ADVERTISING, &hdev->dev_flags);
937         }
938
939         hci_dev_unlock(hdev);
940 }
941
942 static void hci_cc_le_set_scan_enable(struct hci_dev *hdev,
943                                       struct sk_buff *skb)
944 {
945         struct hci_cp_le_set_scan_enable *cp;
946         __u8 status = *((__u8 *) skb->data);
947
948         BT_DBG("%s status 0x%2.2x", hdev->name, status);
949
950         cp = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_SCAN_ENABLE);
951         if (!cp)
952                 return;
953
954         if (status)
955                 return;
956
957         switch (cp->enable) {
958         case LE_SCAN_ENABLE:
959                 set_bit(HCI_LE_SCAN, &hdev->dev_flags);
960                 break;
961
962         case LE_SCAN_DISABLE:
963                 clear_bit(HCI_LE_SCAN, &hdev->dev_flags);
964                 break;
965
966         default:
967                 BT_ERR("Used reserved LE_Scan_Enable param %d", cp->enable);
968                 break;
969         }
970 }
971
972 static void hci_cc_le_read_white_list_size(struct hci_dev *hdev,
973                                            struct sk_buff *skb)
974 {
975         struct hci_rp_le_read_white_list_size *rp = (void *) skb->data;
976
977         BT_DBG("%s status 0x%2.2x size %u", hdev->name, rp->status, rp->size);
978
979         if (!rp->status)
980                 hdev->le_white_list_size = rp->size;
981 }
982
983 static void hci_cc_le_read_supported_states(struct hci_dev *hdev,
984                                             struct sk_buff *skb)
985 {
986         struct hci_rp_le_read_supported_states *rp = (void *) skb->data;
987
988         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
989
990         if (!rp->status)
991                 memcpy(hdev->le_states, rp->le_states, 8);
992 }
993
994 static void hci_cc_write_le_host_supported(struct hci_dev *hdev,
995                                            struct sk_buff *skb)
996 {
997         struct hci_cp_write_le_host_supported *sent;
998         __u8 status = *((__u8 *) skb->data);
999
1000         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1001
1002         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_LE_HOST_SUPPORTED);
1003         if (!sent)
1004                 return;
1005
1006         if (!status) {
1007                 if (sent->le) {
1008                         hdev->features[1][0] |= LMP_HOST_LE;
1009                         set_bit(HCI_LE_ENABLED, &hdev->dev_flags);
1010                 } else {
1011                         hdev->features[1][0] &= ~LMP_HOST_LE;
1012                         clear_bit(HCI_LE_ENABLED, &hdev->dev_flags);
1013                         clear_bit(HCI_ADVERTISING, &hdev->dev_flags);
1014                 }
1015
1016                 if (sent->simul)
1017                         hdev->features[1][0] |= LMP_HOST_LE_BREDR;
1018                 else
1019                         hdev->features[1][0] &= ~LMP_HOST_LE_BREDR;
1020         }
1021 }
1022
1023 static void hci_cc_write_remote_amp_assoc(struct hci_dev *hdev,
1024                                           struct sk_buff *skb)
1025 {
1026         struct hci_rp_write_remote_amp_assoc *rp = (void *) skb->data;
1027
1028         BT_DBG("%s status 0x%2.2x phy_handle 0x%2.2x",
1029                hdev->name, rp->status, rp->phy_handle);
1030
1031         if (rp->status)
1032                 return;
1033
1034         amp_write_rem_assoc_continue(hdev, rp->phy_handle);
1035 }
1036
1037 static void hci_cs_inquiry(struct hci_dev *hdev, __u8 status)
1038 {
1039         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1040
1041         if (status) {
1042                 hci_conn_check_pending(hdev);
1043                 return;
1044         }
1045
1046         set_bit(HCI_INQUIRY, &hdev->flags);
1047 }
1048
1049 static void hci_cs_create_conn(struct hci_dev *hdev, __u8 status)
1050 {
1051         struct hci_cp_create_conn *cp;
1052         struct hci_conn *conn;
1053
1054         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1055
1056         cp = hci_sent_cmd_data(hdev, HCI_OP_CREATE_CONN);
1057         if (!cp)
1058                 return;
1059
1060         hci_dev_lock(hdev);
1061
1062         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
1063
1064         BT_DBG("%s bdaddr %pMR hcon %p", hdev->name, &cp->bdaddr, conn);
1065
1066         if (status) {
1067                 if (conn && conn->state == BT_CONNECT) {
1068                         if (status != 0x0c || conn->attempt > 2) {
1069                                 conn->state = BT_CLOSED;
1070                                 hci_proto_connect_cfm(conn, status);
1071                                 hci_conn_del(conn);
1072                         } else
1073                                 conn->state = BT_CONNECT2;
1074                 }
1075         } else {
1076                 if (!conn) {
1077                         conn = hci_conn_add(hdev, ACL_LINK, &cp->bdaddr);
1078                         if (conn) {
1079                                 conn->out = true;
1080                                 conn->link_mode |= HCI_LM_MASTER;
1081                         } else
1082                                 BT_ERR("No memory for new connection");
1083                 }
1084         }
1085
1086         hci_dev_unlock(hdev);
1087 }
1088
1089 static void hci_cs_add_sco(struct hci_dev *hdev, __u8 status)
1090 {
1091         struct hci_cp_add_sco *cp;
1092         struct hci_conn *acl, *sco;
1093         __u16 handle;
1094
1095         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1096
1097         if (!status)
1098                 return;
1099
1100         cp = hci_sent_cmd_data(hdev, HCI_OP_ADD_SCO);
1101         if (!cp)
1102                 return;
1103
1104         handle = __le16_to_cpu(cp->handle);
1105
1106         BT_DBG("%s handle 0x%4.4x", hdev->name, handle);
1107
1108         hci_dev_lock(hdev);
1109
1110         acl = hci_conn_hash_lookup_handle(hdev, handle);
1111         if (acl) {
1112                 sco = acl->link;
1113                 if (sco) {
1114                         sco->state = BT_CLOSED;
1115
1116                         hci_proto_connect_cfm(sco, status);
1117                         hci_conn_del(sco);
1118                 }
1119         }
1120
1121         hci_dev_unlock(hdev);
1122 }
1123
1124 static void hci_cs_auth_requested(struct hci_dev *hdev, __u8 status)
1125 {
1126         struct hci_cp_auth_requested *cp;
1127         struct hci_conn *conn;
1128
1129         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1130
1131         if (!status)
1132                 return;
1133
1134         cp = hci_sent_cmd_data(hdev, HCI_OP_AUTH_REQUESTED);
1135         if (!cp)
1136                 return;
1137
1138         hci_dev_lock(hdev);
1139
1140         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1141         if (conn) {
1142                 if (conn->state == BT_CONFIG) {
1143                         hci_proto_connect_cfm(conn, status);
1144                         hci_conn_drop(conn);
1145                 }
1146         }
1147
1148         hci_dev_unlock(hdev);
1149 }
1150
1151 static void hci_cs_set_conn_encrypt(struct hci_dev *hdev, __u8 status)
1152 {
1153         struct hci_cp_set_conn_encrypt *cp;
1154         struct hci_conn *conn;
1155
1156         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1157
1158         if (!status)
1159                 return;
1160
1161         cp = hci_sent_cmd_data(hdev, HCI_OP_SET_CONN_ENCRYPT);
1162         if (!cp)
1163                 return;
1164
1165         hci_dev_lock(hdev);
1166
1167         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1168         if (conn) {
1169                 if (conn->state == BT_CONFIG) {
1170                         hci_proto_connect_cfm(conn, status);
1171                         hci_conn_drop(conn);
1172                 }
1173         }
1174
1175         hci_dev_unlock(hdev);
1176 }
1177
1178 static int hci_outgoing_auth_needed(struct hci_dev *hdev,
1179                                     struct hci_conn *conn)
1180 {
1181         if (conn->state != BT_CONFIG || !conn->out)
1182                 return 0;
1183
1184         if (conn->pending_sec_level == BT_SECURITY_SDP)
1185                 return 0;
1186
1187         /* Only request authentication for SSP connections or non-SSP
1188          * devices with sec_level HIGH or if MITM protection is requested */
1189         if (!hci_conn_ssp_enabled(conn) && !(conn->auth_type & 0x01) &&
1190             conn->pending_sec_level != BT_SECURITY_HIGH)
1191                 return 0;
1192
1193         return 1;
1194 }
1195
1196 static int hci_resolve_name(struct hci_dev *hdev,
1197                                    struct inquiry_entry *e)
1198 {
1199         struct hci_cp_remote_name_req cp;
1200
1201         memset(&cp, 0, sizeof(cp));
1202
1203         bacpy(&cp.bdaddr, &e->data.bdaddr);
1204         cp.pscan_rep_mode = e->data.pscan_rep_mode;
1205         cp.pscan_mode = e->data.pscan_mode;
1206         cp.clock_offset = e->data.clock_offset;
1207
1208         return hci_send_cmd(hdev, HCI_OP_REMOTE_NAME_REQ, sizeof(cp), &cp);
1209 }
1210
1211 static bool hci_resolve_next_name(struct hci_dev *hdev)
1212 {
1213         struct discovery_state *discov = &hdev->discovery;
1214         struct inquiry_entry *e;
1215
1216         if (list_empty(&discov->resolve))
1217                 return false;
1218
1219         e = hci_inquiry_cache_lookup_resolve(hdev, BDADDR_ANY, NAME_NEEDED);
1220         if (!e)
1221                 return false;
1222
1223         if (hci_resolve_name(hdev, e) == 0) {
1224                 e->name_state = NAME_PENDING;
1225                 return true;
1226         }
1227
1228         return false;
1229 }
1230
1231 static void hci_check_pending_name(struct hci_dev *hdev, struct hci_conn *conn,
1232                                    bdaddr_t *bdaddr, u8 *name, u8 name_len)
1233 {
1234         struct discovery_state *discov = &hdev->discovery;
1235         struct inquiry_entry *e;
1236
1237         if (conn && !test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags))
1238                 mgmt_device_connected(hdev, bdaddr, ACL_LINK, 0x00, 0, name,
1239                                       name_len, conn->dev_class);
1240
1241         if (discov->state == DISCOVERY_STOPPED)
1242                 return;
1243
1244         if (discov->state == DISCOVERY_STOPPING)
1245                 goto discov_complete;
1246
1247         if (discov->state != DISCOVERY_RESOLVING)
1248                 return;
1249
1250         e = hci_inquiry_cache_lookup_resolve(hdev, bdaddr, NAME_PENDING);
1251         /* If the device was not found in a list of found devices names of which
1252          * are pending. there is no need to continue resolving a next name as it
1253          * will be done upon receiving another Remote Name Request Complete
1254          * Event */
1255         if (!e)
1256                 return;
1257
1258         list_del(&e->list);
1259         if (name) {
1260                 e->name_state = NAME_KNOWN;
1261                 mgmt_remote_name(hdev, bdaddr, ACL_LINK, 0x00,
1262                                  e->data.rssi, name, name_len);
1263         } else {
1264                 e->name_state = NAME_NOT_KNOWN;
1265         }
1266
1267         if (hci_resolve_next_name(hdev))
1268                 return;
1269
1270 discov_complete:
1271         hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
1272 }
1273
1274 static void hci_cs_remote_name_req(struct hci_dev *hdev, __u8 status)
1275 {
1276         struct hci_cp_remote_name_req *cp;
1277         struct hci_conn *conn;
1278
1279         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1280
1281         /* If successful wait for the name req complete event before
1282          * checking for the need to do authentication */
1283         if (!status)
1284                 return;
1285
1286         cp = hci_sent_cmd_data(hdev, HCI_OP_REMOTE_NAME_REQ);
1287         if (!cp)
1288                 return;
1289
1290         hci_dev_lock(hdev);
1291
1292         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
1293
1294         if (test_bit(HCI_MGMT, &hdev->dev_flags))
1295                 hci_check_pending_name(hdev, conn, &cp->bdaddr, NULL, 0);
1296
1297         if (!conn)
1298                 goto unlock;
1299
1300         if (!hci_outgoing_auth_needed(hdev, conn))
1301                 goto unlock;
1302
1303         if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
1304                 struct hci_cp_auth_requested auth_cp;
1305
1306                 auth_cp.handle = __cpu_to_le16(conn->handle);
1307                 hci_send_cmd(hdev, HCI_OP_AUTH_REQUESTED,
1308                              sizeof(auth_cp), &auth_cp);
1309         }
1310
1311 unlock:
1312         hci_dev_unlock(hdev);
1313 }
1314
1315 static void hci_cs_read_remote_features(struct hci_dev *hdev, __u8 status)
1316 {
1317         struct hci_cp_read_remote_features *cp;
1318         struct hci_conn *conn;
1319
1320         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1321
1322         if (!status)
1323                 return;
1324
1325         cp = hci_sent_cmd_data(hdev, HCI_OP_READ_REMOTE_FEATURES);
1326         if (!cp)
1327                 return;
1328
1329         hci_dev_lock(hdev);
1330
1331         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1332         if (conn) {
1333                 if (conn->state == BT_CONFIG) {
1334                         hci_proto_connect_cfm(conn, status);
1335                         hci_conn_drop(conn);
1336                 }
1337         }
1338
1339         hci_dev_unlock(hdev);
1340 }
1341
1342 static void hci_cs_read_remote_ext_features(struct hci_dev *hdev, __u8 status)
1343 {
1344         struct hci_cp_read_remote_ext_features *cp;
1345         struct hci_conn *conn;
1346
1347         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1348
1349         if (!status)
1350                 return;
1351
1352         cp = hci_sent_cmd_data(hdev, HCI_OP_READ_REMOTE_EXT_FEATURES);
1353         if (!cp)
1354                 return;
1355
1356         hci_dev_lock(hdev);
1357
1358         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1359         if (conn) {
1360                 if (conn->state == BT_CONFIG) {
1361                         hci_proto_connect_cfm(conn, status);
1362                         hci_conn_drop(conn);
1363                 }
1364         }
1365
1366         hci_dev_unlock(hdev);
1367 }
1368
1369 static void hci_cs_setup_sync_conn(struct hci_dev *hdev, __u8 status)
1370 {
1371         struct hci_cp_setup_sync_conn *cp;
1372         struct hci_conn *acl, *sco;
1373         __u16 handle;
1374
1375         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1376
1377         if (!status)
1378                 return;
1379
1380         cp = hci_sent_cmd_data(hdev, HCI_OP_SETUP_SYNC_CONN);
1381         if (!cp)
1382                 return;
1383
1384         handle = __le16_to_cpu(cp->handle);
1385
1386         BT_DBG("%s handle 0x%4.4x", hdev->name, handle);
1387
1388         hci_dev_lock(hdev);
1389
1390         acl = hci_conn_hash_lookup_handle(hdev, handle);
1391         if (acl) {
1392                 sco = acl->link;
1393                 if (sco) {
1394                         sco->state = BT_CLOSED;
1395
1396                         hci_proto_connect_cfm(sco, status);
1397                         hci_conn_del(sco);
1398                 }
1399         }
1400
1401         hci_dev_unlock(hdev);
1402 }
1403
1404 static void hci_cs_sniff_mode(struct hci_dev *hdev, __u8 status)
1405 {
1406         struct hci_cp_sniff_mode *cp;
1407         struct hci_conn *conn;
1408
1409         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1410
1411         if (!status)
1412                 return;
1413
1414         cp = hci_sent_cmd_data(hdev, HCI_OP_SNIFF_MODE);
1415         if (!cp)
1416                 return;
1417
1418         hci_dev_lock(hdev);
1419
1420         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1421         if (conn) {
1422                 clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags);
1423
1424                 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->flags))
1425                         hci_sco_setup(conn, status);
1426         }
1427
1428         hci_dev_unlock(hdev);
1429 }
1430
1431 static void hci_cs_exit_sniff_mode(struct hci_dev *hdev, __u8 status)
1432 {
1433         struct hci_cp_exit_sniff_mode *cp;
1434         struct hci_conn *conn;
1435
1436         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1437
1438         if (!status)
1439                 return;
1440
1441         cp = hci_sent_cmd_data(hdev, HCI_OP_EXIT_SNIFF_MODE);
1442         if (!cp)
1443                 return;
1444
1445         hci_dev_lock(hdev);
1446
1447         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1448         if (conn) {
1449                 clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags);
1450
1451                 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->flags))
1452                         hci_sco_setup(conn, status);
1453         }
1454
1455         hci_dev_unlock(hdev);
1456 }
1457
1458 static void hci_cs_disconnect(struct hci_dev *hdev, u8 status)
1459 {
1460         struct hci_cp_disconnect *cp;
1461         struct hci_conn *conn;
1462
1463         if (!status)
1464                 return;
1465
1466         cp = hci_sent_cmd_data(hdev, HCI_OP_DISCONNECT);
1467         if (!cp)
1468                 return;
1469
1470         hci_dev_lock(hdev);
1471
1472         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1473         if (conn)
1474                 mgmt_disconnect_failed(hdev, &conn->dst, conn->type,
1475                                        conn->dst_type, status);
1476
1477         hci_dev_unlock(hdev);
1478 }
1479
1480 static void hci_cs_create_phylink(struct hci_dev *hdev, u8 status)
1481 {
1482         struct hci_cp_create_phy_link *cp;
1483
1484         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1485
1486         cp = hci_sent_cmd_data(hdev, HCI_OP_CREATE_PHY_LINK);
1487         if (!cp)
1488                 return;
1489
1490         hci_dev_lock(hdev);
1491
1492         if (status) {
1493                 struct hci_conn *hcon;
1494
1495                 hcon = hci_conn_hash_lookup_handle(hdev, cp->phy_handle);
1496                 if (hcon)
1497                         hci_conn_del(hcon);
1498         } else {
1499                 amp_write_remote_assoc(hdev, cp->phy_handle);
1500         }
1501
1502         hci_dev_unlock(hdev);
1503 }
1504
1505 static void hci_cs_accept_phylink(struct hci_dev *hdev, u8 status)
1506 {
1507         struct hci_cp_accept_phy_link *cp;
1508
1509         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1510
1511         if (status)
1512                 return;
1513
1514         cp = hci_sent_cmd_data(hdev, HCI_OP_ACCEPT_PHY_LINK);
1515         if (!cp)
1516                 return;
1517
1518         amp_write_remote_assoc(hdev, cp->phy_handle);
1519 }
1520
1521 static void hci_inquiry_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1522 {
1523         __u8 status = *((__u8 *) skb->data);
1524         struct discovery_state *discov = &hdev->discovery;
1525         struct inquiry_entry *e;
1526
1527         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1528
1529         hci_conn_check_pending(hdev);
1530
1531         if (!test_and_clear_bit(HCI_INQUIRY, &hdev->flags))
1532                 return;
1533
1534         smp_mb__after_clear_bit(); /* wake_up_bit advises about this barrier */
1535         wake_up_bit(&hdev->flags, HCI_INQUIRY);
1536
1537         if (!test_bit(HCI_MGMT, &hdev->dev_flags))
1538                 return;
1539
1540         hci_dev_lock(hdev);
1541
1542         if (discov->state != DISCOVERY_FINDING)
1543                 goto unlock;
1544
1545         if (list_empty(&discov->resolve)) {
1546                 hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
1547                 goto unlock;
1548         }
1549
1550         e = hci_inquiry_cache_lookup_resolve(hdev, BDADDR_ANY, NAME_NEEDED);
1551         if (e && hci_resolve_name(hdev, e) == 0) {
1552                 e->name_state = NAME_PENDING;
1553                 hci_discovery_set_state(hdev, DISCOVERY_RESOLVING);
1554         } else {
1555                 hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
1556         }
1557
1558 unlock:
1559         hci_dev_unlock(hdev);
1560 }
1561
1562 static void hci_inquiry_result_evt(struct hci_dev *hdev, struct sk_buff *skb)
1563 {
1564         struct inquiry_data data;
1565         struct inquiry_info *info = (void *) (skb->data + 1);
1566         int num_rsp = *((__u8 *) skb->data);
1567
1568         BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
1569
1570         if (!num_rsp)
1571                 return;
1572
1573         if (test_bit(HCI_PERIODIC_INQ, &hdev->dev_flags))
1574                 return;
1575
1576         hci_dev_lock(hdev);
1577
1578         for (; num_rsp; num_rsp--, info++) {
1579                 bool name_known, ssp;
1580
1581                 bacpy(&data.bdaddr, &info->bdaddr);
1582                 data.pscan_rep_mode     = info->pscan_rep_mode;
1583                 data.pscan_period_mode  = info->pscan_period_mode;
1584                 data.pscan_mode         = info->pscan_mode;
1585                 memcpy(data.dev_class, info->dev_class, 3);
1586                 data.clock_offset       = info->clock_offset;
1587                 data.rssi               = 0x00;
1588                 data.ssp_mode           = 0x00;
1589
1590                 name_known = hci_inquiry_cache_update(hdev, &data, false, &ssp);
1591                 mgmt_device_found(hdev, &info->bdaddr, ACL_LINK, 0x00,
1592                                   info->dev_class, 0, !name_known, ssp, NULL,
1593                                   0);
1594         }
1595
1596         hci_dev_unlock(hdev);
1597 }
1598
1599 static void hci_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1600 {
1601         struct hci_ev_conn_complete *ev = (void *) skb->data;
1602         struct hci_conn *conn;
1603
1604         BT_DBG("%s", hdev->name);
1605
1606         hci_dev_lock(hdev);
1607
1608         conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
1609         if (!conn) {
1610                 if (ev->link_type != SCO_LINK)
1611                         goto unlock;
1612
1613                 conn = hci_conn_hash_lookup_ba(hdev, ESCO_LINK, &ev->bdaddr);
1614                 if (!conn)
1615                         goto unlock;
1616
1617                 conn->type = SCO_LINK;
1618         }
1619
1620         if (!ev->status) {
1621                 conn->handle = __le16_to_cpu(ev->handle);
1622
1623                 if (conn->type == ACL_LINK) {
1624                         conn->state = BT_CONFIG;
1625                         hci_conn_hold(conn);
1626
1627                         if (!conn->out && !hci_conn_ssp_enabled(conn) &&
1628                             !hci_find_link_key(hdev, &ev->bdaddr))
1629                                 conn->disc_timeout = HCI_PAIRING_TIMEOUT;
1630                         else
1631                                 conn->disc_timeout = HCI_DISCONN_TIMEOUT;
1632                 } else
1633                         conn->state = BT_CONNECTED;
1634
1635                 hci_conn_add_sysfs(conn);
1636
1637                 if (test_bit(HCI_AUTH, &hdev->flags))
1638                         conn->link_mode |= HCI_LM_AUTH;
1639
1640                 if (test_bit(HCI_ENCRYPT, &hdev->flags))
1641                         conn->link_mode |= HCI_LM_ENCRYPT;
1642
1643                 /* Get remote features */
1644                 if (conn->type == ACL_LINK) {
1645                         struct hci_cp_read_remote_features cp;
1646                         cp.handle = ev->handle;
1647                         hci_send_cmd(hdev, HCI_OP_READ_REMOTE_FEATURES,
1648                                      sizeof(cp), &cp);
1649                 }
1650
1651                 /* Set packet type for incoming connection */
1652                 if (!conn->out && hdev->hci_ver < BLUETOOTH_VER_2_0) {
1653                         struct hci_cp_change_conn_ptype cp;
1654                         cp.handle = ev->handle;
1655                         cp.pkt_type = cpu_to_le16(conn->pkt_type);
1656                         hci_send_cmd(hdev, HCI_OP_CHANGE_CONN_PTYPE, sizeof(cp),
1657                                      &cp);
1658                 }
1659         } else {
1660                 conn->state = BT_CLOSED;
1661                 if (conn->type == ACL_LINK)
1662                         mgmt_connect_failed(hdev, &ev->bdaddr, conn->type,
1663                                             conn->dst_type, ev->status);
1664         }
1665
1666         if (conn->type == ACL_LINK)
1667                 hci_sco_setup(conn, ev->status);
1668
1669         if (ev->status) {
1670                 hci_proto_connect_cfm(conn, ev->status);
1671                 hci_conn_del(conn);
1672         } else if (ev->link_type != ACL_LINK)
1673                 hci_proto_connect_cfm(conn, ev->status);
1674
1675 unlock:
1676         hci_dev_unlock(hdev);
1677
1678         hci_conn_check_pending(hdev);
1679 }
1680
1681 static void hci_conn_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
1682 {
1683         struct hci_ev_conn_request *ev = (void *) skb->data;
1684         int mask = hdev->link_mode;
1685         __u8 flags = 0;
1686
1687         BT_DBG("%s bdaddr %pMR type 0x%x", hdev->name, &ev->bdaddr,
1688                ev->link_type);
1689
1690         mask |= hci_proto_connect_ind(hdev, &ev->bdaddr, ev->link_type,
1691                                       &flags);
1692
1693         if ((mask & HCI_LM_ACCEPT) &&
1694             !hci_blacklist_lookup(hdev, &ev->bdaddr, BDADDR_BREDR)) {
1695                 /* Connection accepted */
1696                 struct inquiry_entry *ie;
1697                 struct hci_conn *conn;
1698
1699                 hci_dev_lock(hdev);
1700
1701                 ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr);
1702                 if (ie)
1703                         memcpy(ie->data.dev_class, ev->dev_class, 3);
1704
1705                 conn = hci_conn_hash_lookup_ba(hdev, ev->link_type,
1706                                                &ev->bdaddr);
1707                 if (!conn) {
1708                         conn = hci_conn_add(hdev, ev->link_type, &ev->bdaddr);
1709                         if (!conn) {
1710                                 BT_ERR("No memory for new connection");
1711                                 hci_dev_unlock(hdev);
1712                                 return;
1713                         }
1714                 }
1715
1716                 memcpy(conn->dev_class, ev->dev_class, 3);
1717
1718                 hci_dev_unlock(hdev);
1719
1720                 if (ev->link_type == ACL_LINK ||
1721                     (!(flags & HCI_PROTO_DEFER) && !lmp_esco_capable(hdev))) {
1722                         struct hci_cp_accept_conn_req cp;
1723                         conn->state = BT_CONNECT;
1724
1725                         bacpy(&cp.bdaddr, &ev->bdaddr);
1726
1727                         if (lmp_rswitch_capable(hdev) && (mask & HCI_LM_MASTER))
1728                                 cp.role = 0x00; /* Become master */
1729                         else
1730                                 cp.role = 0x01; /* Remain slave */
1731
1732                         hci_send_cmd(hdev, HCI_OP_ACCEPT_CONN_REQ, sizeof(cp),
1733                                      &cp);
1734                 } else if (!(flags & HCI_PROTO_DEFER)) {
1735                         struct hci_cp_accept_sync_conn_req cp;
1736                         conn->state = BT_CONNECT;
1737
1738                         bacpy(&cp.bdaddr, &ev->bdaddr);
1739                         cp.pkt_type = cpu_to_le16(conn->pkt_type);
1740
1741                         cp.tx_bandwidth   = __constant_cpu_to_le32(0x00001f40);
1742                         cp.rx_bandwidth   = __constant_cpu_to_le32(0x00001f40);
1743                         cp.max_latency    = __constant_cpu_to_le16(0xffff);
1744                         cp.content_format = cpu_to_le16(hdev->voice_setting);
1745                         cp.retrans_effort = 0xff;
1746
1747                         hci_send_cmd(hdev, HCI_OP_ACCEPT_SYNC_CONN_REQ,
1748                                      sizeof(cp), &cp);
1749                 } else {
1750                         conn->state = BT_CONNECT2;
1751                         hci_proto_connect_cfm(conn, 0);
1752                 }
1753         } else {
1754                 /* Connection rejected */
1755                 struct hci_cp_reject_conn_req cp;
1756
1757                 bacpy(&cp.bdaddr, &ev->bdaddr);
1758                 cp.reason = HCI_ERROR_REJ_BAD_ADDR;
1759                 hci_send_cmd(hdev, HCI_OP_REJECT_CONN_REQ, sizeof(cp), &cp);
1760         }
1761 }
1762
1763 static u8 hci_to_mgmt_reason(u8 err)
1764 {
1765         switch (err) {
1766         case HCI_ERROR_CONNECTION_TIMEOUT:
1767                 return MGMT_DEV_DISCONN_TIMEOUT;
1768         case HCI_ERROR_REMOTE_USER_TERM:
1769         case HCI_ERROR_REMOTE_LOW_RESOURCES:
1770         case HCI_ERROR_REMOTE_POWER_OFF:
1771                 return MGMT_DEV_DISCONN_REMOTE;
1772         case HCI_ERROR_LOCAL_HOST_TERM:
1773                 return MGMT_DEV_DISCONN_LOCAL_HOST;
1774         default:
1775                 return MGMT_DEV_DISCONN_UNKNOWN;
1776         }
1777 }
1778
1779 static void hci_disconn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1780 {
1781         struct hci_ev_disconn_complete *ev = (void *) skb->data;
1782         u8 reason = hci_to_mgmt_reason(ev->reason);
1783         struct hci_conn *conn;
1784         u8 type;
1785
1786         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
1787
1788         hci_dev_lock(hdev);
1789
1790         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1791         if (!conn)
1792                 goto unlock;
1793
1794         if (ev->status) {
1795                 mgmt_disconnect_failed(hdev, &conn->dst, conn->type,
1796                                        conn->dst_type, ev->status);
1797                 goto unlock;
1798         }
1799
1800         conn->state = BT_CLOSED;
1801
1802         if (test_and_clear_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags))
1803                 mgmt_device_disconnected(hdev, &conn->dst, conn->type,
1804                                          conn->dst_type, reason);
1805
1806         if (conn->type == ACL_LINK && conn->flush_key)
1807                 hci_remove_link_key(hdev, &conn->dst);
1808
1809         type = conn->type;
1810
1811         hci_proto_disconn_cfm(conn, ev->reason);
1812         hci_conn_del(conn);
1813
1814         /* Re-enable advertising if necessary, since it might
1815          * have been disabled by the connection. From the
1816          * HCI_LE_Set_Advertise_Enable command description in
1817          * the core specification (v4.0):
1818          * "The Controller shall continue advertising until the Host
1819          * issues an LE_Set_Advertise_Enable command with
1820          * Advertising_Enable set to 0x00 (Advertising is disabled)
1821          * or until a connection is created or until the Advertising
1822          * is timed out due to Directed Advertising."
1823          */
1824         if (type == LE_LINK)
1825                 mgmt_reenable_advertising(hdev);
1826
1827 unlock:
1828         hci_dev_unlock(hdev);
1829 }
1830
1831 static void hci_auth_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1832 {
1833         struct hci_ev_auth_complete *ev = (void *) skb->data;
1834         struct hci_conn *conn;
1835
1836         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
1837
1838         hci_dev_lock(hdev);
1839
1840         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1841         if (!conn)
1842                 goto unlock;
1843
1844         if (!ev->status) {
1845                 if (!hci_conn_ssp_enabled(conn) &&
1846                     test_bit(HCI_CONN_REAUTH_PEND, &conn->flags)) {
1847                         BT_INFO("re-auth of legacy device is not possible.");
1848                 } else {
1849                         conn->link_mode |= HCI_LM_AUTH;
1850                         conn->sec_level = conn->pending_sec_level;
1851                 }
1852         } else {
1853                 mgmt_auth_failed(hdev, &conn->dst, conn->type, conn->dst_type,
1854                                  ev->status);
1855         }
1856
1857         clear_bit(HCI_CONN_AUTH_PEND, &conn->flags);
1858         clear_bit(HCI_CONN_REAUTH_PEND, &conn->flags);
1859
1860         if (conn->state == BT_CONFIG) {
1861                 if (!ev->status && hci_conn_ssp_enabled(conn)) {
1862                         struct hci_cp_set_conn_encrypt cp;
1863                         cp.handle  = ev->handle;
1864                         cp.encrypt = 0x01;
1865                         hci_send_cmd(hdev, HCI_OP_SET_CONN_ENCRYPT, sizeof(cp),
1866                                      &cp);
1867                 } else {
1868                         conn->state = BT_CONNECTED;
1869                         hci_proto_connect_cfm(conn, ev->status);
1870                         hci_conn_drop(conn);
1871                 }
1872         } else {
1873                 hci_auth_cfm(conn, ev->status);
1874
1875                 hci_conn_hold(conn);
1876                 conn->disc_timeout = HCI_DISCONN_TIMEOUT;
1877                 hci_conn_drop(conn);
1878         }
1879
1880         if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags)) {
1881                 if (!ev->status) {
1882                         struct hci_cp_set_conn_encrypt cp;
1883                         cp.handle  = ev->handle;
1884                         cp.encrypt = 0x01;
1885                         hci_send_cmd(hdev, HCI_OP_SET_CONN_ENCRYPT, sizeof(cp),
1886                                      &cp);
1887                 } else {
1888                         clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
1889                         hci_encrypt_cfm(conn, ev->status, 0x00);
1890                 }
1891         }
1892
1893 unlock:
1894         hci_dev_unlock(hdev);
1895 }
1896
1897 static void hci_remote_name_evt(struct hci_dev *hdev, struct sk_buff *skb)
1898 {
1899         struct hci_ev_remote_name *ev = (void *) skb->data;
1900         struct hci_conn *conn;
1901
1902         BT_DBG("%s", hdev->name);
1903
1904         hci_conn_check_pending(hdev);
1905
1906         hci_dev_lock(hdev);
1907
1908         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
1909
1910         if (!test_bit(HCI_MGMT, &hdev->dev_flags))
1911                 goto check_auth;
1912
1913         if (ev->status == 0)
1914                 hci_check_pending_name(hdev, conn, &ev->bdaddr, ev->name,
1915                                        strnlen(ev->name, HCI_MAX_NAME_LENGTH));
1916         else
1917                 hci_check_pending_name(hdev, conn, &ev->bdaddr, NULL, 0);
1918
1919 check_auth:
1920         if (!conn)
1921                 goto unlock;
1922
1923         if (!hci_outgoing_auth_needed(hdev, conn))
1924                 goto unlock;
1925
1926         if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
1927                 struct hci_cp_auth_requested cp;
1928                 cp.handle = __cpu_to_le16(conn->handle);
1929                 hci_send_cmd(hdev, HCI_OP_AUTH_REQUESTED, sizeof(cp), &cp);
1930         }
1931
1932 unlock:
1933         hci_dev_unlock(hdev);
1934 }
1935
1936 static void hci_encrypt_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
1937 {
1938         struct hci_ev_encrypt_change *ev = (void *) skb->data;
1939         struct hci_conn *conn;
1940
1941         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
1942
1943         hci_dev_lock(hdev);
1944
1945         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1946         if (conn) {
1947                 if (!ev->status) {
1948                         if (ev->encrypt) {
1949                                 /* Encryption implies authentication */
1950                                 conn->link_mode |= HCI_LM_AUTH;
1951                                 conn->link_mode |= HCI_LM_ENCRYPT;
1952                                 conn->sec_level = conn->pending_sec_level;
1953                         } else
1954                                 conn->link_mode &= ~HCI_LM_ENCRYPT;
1955                 }
1956
1957                 clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
1958
1959                 if (ev->status && conn->state == BT_CONNECTED) {
1960                         hci_disconnect(conn, HCI_ERROR_AUTH_FAILURE);
1961                         hci_conn_drop(conn);
1962                         goto unlock;
1963                 }
1964
1965                 if (conn->state == BT_CONFIG) {
1966                         if (!ev->status)
1967                                 conn->state = BT_CONNECTED;
1968
1969                         hci_proto_connect_cfm(conn, ev->status);
1970                         hci_conn_drop(conn);
1971                 } else
1972                         hci_encrypt_cfm(conn, ev->status, ev->encrypt);
1973         }
1974
1975 unlock:
1976         hci_dev_unlock(hdev);
1977 }
1978
1979 static void hci_change_link_key_complete_evt(struct hci_dev *hdev,
1980                                              struct sk_buff *skb)
1981 {
1982         struct hci_ev_change_link_key_complete *ev = (void *) skb->data;
1983         struct hci_conn *conn;
1984
1985         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
1986
1987         hci_dev_lock(hdev);
1988
1989         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1990         if (conn) {
1991                 if (!ev->status)
1992                         conn->link_mode |= HCI_LM_SECURE;
1993
1994                 clear_bit(HCI_CONN_AUTH_PEND, &conn->flags);
1995
1996                 hci_key_change_cfm(conn, ev->status);
1997         }
1998
1999         hci_dev_unlock(hdev);
2000 }
2001
2002 static void hci_remote_features_evt(struct hci_dev *hdev,
2003                                     struct sk_buff *skb)
2004 {
2005         struct hci_ev_remote_features *ev = (void *) skb->data;
2006         struct hci_conn *conn;
2007
2008         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2009
2010         hci_dev_lock(hdev);
2011
2012         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2013         if (!conn)
2014                 goto unlock;
2015
2016         if (!ev->status)
2017                 memcpy(conn->features[0], ev->features, 8);
2018
2019         if (conn->state != BT_CONFIG)
2020                 goto unlock;
2021
2022         if (!ev->status && lmp_ssp_capable(hdev) && lmp_ssp_capable(conn)) {
2023                 struct hci_cp_read_remote_ext_features cp;
2024                 cp.handle = ev->handle;
2025                 cp.page = 0x01;
2026                 hci_send_cmd(hdev, HCI_OP_READ_REMOTE_EXT_FEATURES,
2027                              sizeof(cp), &cp);
2028                 goto unlock;
2029         }
2030
2031         if (!ev->status && !test_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags)) {
2032                 struct hci_cp_remote_name_req cp;
2033                 memset(&cp, 0, sizeof(cp));
2034                 bacpy(&cp.bdaddr, &conn->dst);
2035                 cp.pscan_rep_mode = 0x02;
2036                 hci_send_cmd(hdev, HCI_OP_REMOTE_NAME_REQ, sizeof(cp), &cp);
2037         } else if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags))
2038                 mgmt_device_connected(hdev, &conn->dst, conn->type,
2039                                       conn->dst_type, 0, NULL, 0,
2040                                       conn->dev_class);
2041
2042         if (!hci_outgoing_auth_needed(hdev, conn)) {
2043                 conn->state = BT_CONNECTED;
2044                 hci_proto_connect_cfm(conn, ev->status);
2045                 hci_conn_drop(conn);
2046         }
2047
2048 unlock:
2049         hci_dev_unlock(hdev);
2050 }
2051
2052 static void hci_cmd_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
2053 {
2054         struct hci_ev_cmd_complete *ev = (void *) skb->data;
2055         u8 status = skb->data[sizeof(*ev)];
2056         __u16 opcode;
2057
2058         skb_pull(skb, sizeof(*ev));
2059
2060         opcode = __le16_to_cpu(ev->opcode);
2061
2062         switch (opcode) {
2063         case HCI_OP_INQUIRY_CANCEL:
2064                 hci_cc_inquiry_cancel(hdev, skb);
2065                 break;
2066
2067         case HCI_OP_PERIODIC_INQ:
2068                 hci_cc_periodic_inq(hdev, skb);
2069                 break;
2070
2071         case HCI_OP_EXIT_PERIODIC_INQ:
2072                 hci_cc_exit_periodic_inq(hdev, skb);
2073                 break;
2074
2075         case HCI_OP_REMOTE_NAME_REQ_CANCEL:
2076                 hci_cc_remote_name_req_cancel(hdev, skb);
2077                 break;
2078
2079         case HCI_OP_ROLE_DISCOVERY:
2080                 hci_cc_role_discovery(hdev, skb);
2081                 break;
2082
2083         case HCI_OP_READ_LINK_POLICY:
2084                 hci_cc_read_link_policy(hdev, skb);
2085                 break;
2086
2087         case HCI_OP_WRITE_LINK_POLICY:
2088                 hci_cc_write_link_policy(hdev, skb);
2089                 break;
2090
2091         case HCI_OP_READ_DEF_LINK_POLICY:
2092                 hci_cc_read_def_link_policy(hdev, skb);
2093                 break;
2094
2095         case HCI_OP_WRITE_DEF_LINK_POLICY:
2096                 hci_cc_write_def_link_policy(hdev, skb);
2097                 break;
2098
2099         case HCI_OP_RESET:
2100                 hci_cc_reset(hdev, skb);
2101                 break;
2102
2103         case HCI_OP_WRITE_LOCAL_NAME:
2104                 hci_cc_write_local_name(hdev, skb);
2105                 break;
2106
2107         case HCI_OP_READ_LOCAL_NAME:
2108                 hci_cc_read_local_name(hdev, skb);
2109                 break;
2110
2111         case HCI_OP_WRITE_AUTH_ENABLE:
2112                 hci_cc_write_auth_enable(hdev, skb);
2113                 break;
2114
2115         case HCI_OP_WRITE_ENCRYPT_MODE:
2116                 hci_cc_write_encrypt_mode(hdev, skb);
2117                 break;
2118
2119         case HCI_OP_WRITE_SCAN_ENABLE:
2120                 hci_cc_write_scan_enable(hdev, skb);
2121                 break;
2122
2123         case HCI_OP_READ_CLASS_OF_DEV:
2124                 hci_cc_read_class_of_dev(hdev, skb);
2125                 break;
2126
2127         case HCI_OP_WRITE_CLASS_OF_DEV:
2128                 hci_cc_write_class_of_dev(hdev, skb);
2129                 break;
2130
2131         case HCI_OP_READ_VOICE_SETTING:
2132                 hci_cc_read_voice_setting(hdev, skb);
2133                 break;
2134
2135         case HCI_OP_WRITE_VOICE_SETTING:
2136                 hci_cc_write_voice_setting(hdev, skb);
2137                 break;
2138
2139         case HCI_OP_READ_NUM_SUPPORTED_IAC:
2140                 hci_cc_read_num_supported_iac(hdev, skb);
2141                 break;
2142
2143         case HCI_OP_WRITE_SSP_MODE:
2144                 hci_cc_write_ssp_mode(hdev, skb);
2145                 break;
2146
2147         case HCI_OP_READ_LOCAL_VERSION:
2148                 hci_cc_read_local_version(hdev, skb);
2149                 break;
2150
2151         case HCI_OP_READ_LOCAL_COMMANDS:
2152                 hci_cc_read_local_commands(hdev, skb);
2153                 break;
2154
2155         case HCI_OP_READ_LOCAL_FEATURES:
2156                 hci_cc_read_local_features(hdev, skb);
2157                 break;
2158
2159         case HCI_OP_READ_LOCAL_EXT_FEATURES:
2160                 hci_cc_read_local_ext_features(hdev, skb);
2161                 break;
2162
2163         case HCI_OP_READ_BUFFER_SIZE:
2164                 hci_cc_read_buffer_size(hdev, skb);
2165                 break;
2166
2167         case HCI_OP_READ_BD_ADDR:
2168                 hci_cc_read_bd_addr(hdev, skb);
2169                 break;
2170
2171         case HCI_OP_READ_PAGE_SCAN_ACTIVITY:
2172                 hci_cc_read_page_scan_activity(hdev, skb);
2173                 break;
2174
2175         case HCI_OP_WRITE_PAGE_SCAN_ACTIVITY:
2176                 hci_cc_write_page_scan_activity(hdev, skb);
2177                 break;
2178
2179         case HCI_OP_READ_PAGE_SCAN_TYPE:
2180                 hci_cc_read_page_scan_type(hdev, skb);
2181                 break;
2182
2183         case HCI_OP_WRITE_PAGE_SCAN_TYPE:
2184                 hci_cc_write_page_scan_type(hdev, skb);
2185                 break;
2186
2187         case HCI_OP_READ_DATA_BLOCK_SIZE:
2188                 hci_cc_read_data_block_size(hdev, skb);
2189                 break;
2190
2191         case HCI_OP_READ_FLOW_CONTROL_MODE:
2192                 hci_cc_read_flow_control_mode(hdev, skb);
2193                 break;
2194
2195         case HCI_OP_READ_LOCAL_AMP_INFO:
2196                 hci_cc_read_local_amp_info(hdev, skb);
2197                 break;
2198
2199         case HCI_OP_READ_LOCAL_AMP_ASSOC:
2200                 hci_cc_read_local_amp_assoc(hdev, skb);
2201                 break;
2202
2203         case HCI_OP_READ_INQ_RSP_TX_POWER:
2204                 hci_cc_read_inq_rsp_tx_power(hdev, skb);
2205                 break;
2206
2207         case HCI_OP_PIN_CODE_REPLY:
2208                 hci_cc_pin_code_reply(hdev, skb);
2209                 break;
2210
2211         case HCI_OP_PIN_CODE_NEG_REPLY:
2212                 hci_cc_pin_code_neg_reply(hdev, skb);
2213                 break;
2214
2215         case HCI_OP_READ_LOCAL_OOB_DATA:
2216                 hci_cc_read_local_oob_data_reply(hdev, skb);
2217                 break;
2218
2219         case HCI_OP_LE_READ_BUFFER_SIZE:
2220                 hci_cc_le_read_buffer_size(hdev, skb);
2221                 break;
2222
2223         case HCI_OP_LE_READ_LOCAL_FEATURES:
2224                 hci_cc_le_read_local_features(hdev, skb);
2225                 break;
2226
2227         case HCI_OP_LE_READ_ADV_TX_POWER:
2228                 hci_cc_le_read_adv_tx_power(hdev, skb);
2229                 break;
2230
2231         case HCI_OP_USER_CONFIRM_REPLY:
2232                 hci_cc_user_confirm_reply(hdev, skb);
2233                 break;
2234
2235         case HCI_OP_USER_CONFIRM_NEG_REPLY:
2236                 hci_cc_user_confirm_neg_reply(hdev, skb);
2237                 break;
2238
2239         case HCI_OP_USER_PASSKEY_REPLY:
2240                 hci_cc_user_passkey_reply(hdev, skb);
2241                 break;
2242
2243         case HCI_OP_USER_PASSKEY_NEG_REPLY:
2244                 hci_cc_user_passkey_neg_reply(hdev, skb);
2245                 break;
2246
2247         case HCI_OP_LE_SET_ADV_ENABLE:
2248                 hci_cc_le_set_adv_enable(hdev, skb);
2249                 break;
2250
2251         case HCI_OP_LE_SET_SCAN_ENABLE:
2252                 hci_cc_le_set_scan_enable(hdev, skb);
2253                 break;
2254
2255         case HCI_OP_LE_READ_WHITE_LIST_SIZE:
2256                 hci_cc_le_read_white_list_size(hdev, skb);
2257                 break;
2258
2259         case HCI_OP_LE_READ_SUPPORTED_STATES:
2260                 hci_cc_le_read_supported_states(hdev, skb);
2261                 break;
2262
2263         case HCI_OP_WRITE_LE_HOST_SUPPORTED:
2264                 hci_cc_write_le_host_supported(hdev, skb);
2265                 break;
2266
2267         case HCI_OP_WRITE_REMOTE_AMP_ASSOC:
2268                 hci_cc_write_remote_amp_assoc(hdev, skb);
2269                 break;
2270
2271         default:
2272                 BT_DBG("%s opcode 0x%4.4x", hdev->name, opcode);
2273                 break;
2274         }
2275
2276         if (opcode != HCI_OP_NOP)
2277                 del_timer(&hdev->cmd_timer);
2278
2279         hci_req_cmd_complete(hdev, opcode, status);
2280
2281         if (ev->ncmd && !test_bit(HCI_RESET, &hdev->flags)) {
2282                 atomic_set(&hdev->cmd_cnt, 1);
2283                 if (!skb_queue_empty(&hdev->cmd_q))
2284                         queue_work(hdev->workqueue, &hdev->cmd_work);
2285         }
2286 }
2287
2288 static void hci_cmd_status_evt(struct hci_dev *hdev, struct sk_buff *skb)
2289 {
2290         struct hci_ev_cmd_status *ev = (void *) skb->data;
2291         __u16 opcode;
2292
2293         skb_pull(skb, sizeof(*ev));
2294
2295         opcode = __le16_to_cpu(ev->opcode);
2296
2297         switch (opcode) {
2298         case HCI_OP_INQUIRY:
2299                 hci_cs_inquiry(hdev, ev->status);
2300                 break;
2301
2302         case HCI_OP_CREATE_CONN:
2303                 hci_cs_create_conn(hdev, ev->status);
2304                 break;
2305
2306         case HCI_OP_ADD_SCO:
2307                 hci_cs_add_sco(hdev, ev->status);
2308                 break;
2309
2310         case HCI_OP_AUTH_REQUESTED:
2311                 hci_cs_auth_requested(hdev, ev->status);
2312                 break;
2313
2314         case HCI_OP_SET_CONN_ENCRYPT:
2315                 hci_cs_set_conn_encrypt(hdev, ev->status);
2316                 break;
2317
2318         case HCI_OP_REMOTE_NAME_REQ:
2319                 hci_cs_remote_name_req(hdev, ev->status);
2320                 break;
2321
2322         case HCI_OP_READ_REMOTE_FEATURES:
2323                 hci_cs_read_remote_features(hdev, ev->status);
2324                 break;
2325
2326         case HCI_OP_READ_REMOTE_EXT_FEATURES:
2327                 hci_cs_read_remote_ext_features(hdev, ev->status);
2328                 break;
2329
2330         case HCI_OP_SETUP_SYNC_CONN:
2331                 hci_cs_setup_sync_conn(hdev, ev->status);
2332                 break;
2333
2334         case HCI_OP_SNIFF_MODE:
2335                 hci_cs_sniff_mode(hdev, ev->status);
2336                 break;
2337
2338         case HCI_OP_EXIT_SNIFF_MODE:
2339                 hci_cs_exit_sniff_mode(hdev, ev->status);
2340                 break;
2341
2342         case HCI_OP_DISCONNECT:
2343                 hci_cs_disconnect(hdev, ev->status);
2344                 break;
2345
2346         case HCI_OP_CREATE_PHY_LINK:
2347                 hci_cs_create_phylink(hdev, ev->status);
2348                 break;
2349
2350         case HCI_OP_ACCEPT_PHY_LINK:
2351                 hci_cs_accept_phylink(hdev, ev->status);
2352                 break;
2353
2354         default:
2355                 BT_DBG("%s opcode 0x%4.4x", hdev->name, opcode);
2356                 break;
2357         }
2358
2359         if (opcode != HCI_OP_NOP)
2360                 del_timer(&hdev->cmd_timer);
2361
2362         if (ev->status ||
2363             (hdev->sent_cmd && !bt_cb(hdev->sent_cmd)->req.event))
2364                 hci_req_cmd_complete(hdev, opcode, ev->status);
2365
2366         if (ev->ncmd && !test_bit(HCI_RESET, &hdev->flags)) {
2367                 atomic_set(&hdev->cmd_cnt, 1);
2368                 if (!skb_queue_empty(&hdev->cmd_q))
2369                         queue_work(hdev->workqueue, &hdev->cmd_work);
2370         }
2371 }
2372
2373 static void hci_role_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
2374 {
2375         struct hci_ev_role_change *ev = (void *) skb->data;
2376         struct hci_conn *conn;
2377
2378         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2379
2380         hci_dev_lock(hdev);
2381
2382         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
2383         if (conn) {
2384                 if (!ev->status) {
2385                         if (ev->role)
2386                                 conn->link_mode &= ~HCI_LM_MASTER;
2387                         else
2388                                 conn->link_mode |= HCI_LM_MASTER;
2389                 }
2390
2391                 clear_bit(HCI_CONN_RSWITCH_PEND, &conn->flags);
2392
2393                 hci_role_switch_cfm(conn, ev->status, ev->role);
2394         }
2395
2396         hci_dev_unlock(hdev);
2397 }
2398
2399 static void hci_num_comp_pkts_evt(struct hci_dev *hdev, struct sk_buff *skb)
2400 {
2401         struct hci_ev_num_comp_pkts *ev = (void *) skb->data;
2402         int i;
2403
2404         if (hdev->flow_ctl_mode != HCI_FLOW_CTL_MODE_PACKET_BASED) {
2405                 BT_ERR("Wrong event for mode %d", hdev->flow_ctl_mode);
2406                 return;
2407         }
2408
2409         if (skb->len < sizeof(*ev) || skb->len < sizeof(*ev) +
2410             ev->num_hndl * sizeof(struct hci_comp_pkts_info)) {
2411                 BT_DBG("%s bad parameters", hdev->name);
2412                 return;
2413         }
2414
2415         BT_DBG("%s num_hndl %d", hdev->name, ev->num_hndl);
2416
2417         for (i = 0; i < ev->num_hndl; i++) {
2418                 struct hci_comp_pkts_info *info = &ev->handles[i];
2419                 struct hci_conn *conn;
2420                 __u16  handle, count;
2421
2422                 handle = __le16_to_cpu(info->handle);
2423                 count  = __le16_to_cpu(info->count);
2424
2425                 conn = hci_conn_hash_lookup_handle(hdev, handle);
2426                 if (!conn)
2427                         continue;
2428
2429                 conn->sent -= count;
2430
2431                 switch (conn->type) {
2432                 case ACL_LINK:
2433                         hdev->acl_cnt += count;
2434                         if (hdev->acl_cnt > hdev->acl_pkts)
2435                                 hdev->acl_cnt = hdev->acl_pkts;
2436                         break;
2437
2438                 case LE_LINK:
2439                         if (hdev->le_pkts) {
2440                                 hdev->le_cnt += count;
2441                                 if (hdev->le_cnt > hdev->le_pkts)
2442                                         hdev->le_cnt = hdev->le_pkts;
2443                         } else {
2444                                 hdev->acl_cnt += count;
2445                                 if (hdev->acl_cnt > hdev->acl_pkts)
2446                                         hdev->acl_cnt = hdev->acl_pkts;
2447                         }
2448                         break;
2449
2450                 case SCO_LINK:
2451                         hdev->sco_cnt += count;
2452                         if (hdev->sco_cnt > hdev->sco_pkts)
2453                                 hdev->sco_cnt = hdev->sco_pkts;
2454                         break;
2455
2456                 default:
2457                         BT_ERR("Unknown type %d conn %p", conn->type, conn);
2458                         break;
2459                 }
2460         }
2461
2462         queue_work(hdev->workqueue, &hdev->tx_work);
2463 }
2464
2465 static struct hci_conn *__hci_conn_lookup_handle(struct hci_dev *hdev,
2466                                                  __u16 handle)
2467 {
2468         struct hci_chan *chan;
2469
2470         switch (hdev->dev_type) {
2471         case HCI_BREDR:
2472                 return hci_conn_hash_lookup_handle(hdev, handle);
2473         case HCI_AMP:
2474                 chan = hci_chan_lookup_handle(hdev, handle);
2475                 if (chan)
2476                         return chan->conn;
2477                 break;
2478         default:
2479                 BT_ERR("%s unknown dev_type %d", hdev->name, hdev->dev_type);
2480                 break;
2481         }
2482
2483         return NULL;
2484 }
2485
2486 static void hci_num_comp_blocks_evt(struct hci_dev *hdev, struct sk_buff *skb)
2487 {
2488         struct hci_ev_num_comp_blocks *ev = (void *) skb->data;
2489         int i;
2490
2491         if (hdev->flow_ctl_mode != HCI_FLOW_CTL_MODE_BLOCK_BASED) {
2492                 BT_ERR("Wrong event for mode %d", hdev->flow_ctl_mode);
2493                 return;
2494         }
2495
2496         if (skb->len < sizeof(*ev) || skb->len < sizeof(*ev) +
2497             ev->num_hndl * sizeof(struct hci_comp_blocks_info)) {
2498                 BT_DBG("%s bad parameters", hdev->name);
2499                 return;
2500         }
2501
2502         BT_DBG("%s num_blocks %d num_hndl %d", hdev->name, ev->num_blocks,
2503                ev->num_hndl);
2504
2505         for (i = 0; i < ev->num_hndl; i++) {
2506                 struct hci_comp_blocks_info *info = &ev->handles[i];
2507                 struct hci_conn *conn = NULL;
2508                 __u16  handle, block_count;
2509
2510                 handle = __le16_to_cpu(info->handle);
2511                 block_count = __le16_to_cpu(info->blocks);
2512
2513                 conn = __hci_conn_lookup_handle(hdev, handle);
2514                 if (!conn)
2515                         continue;
2516
2517                 conn->sent -= block_count;
2518
2519                 switch (conn->type) {
2520                 case ACL_LINK:
2521                 case AMP_LINK:
2522                         hdev->block_cnt += block_count;
2523                         if (hdev->block_cnt > hdev->num_blocks)
2524                                 hdev->block_cnt = hdev->num_blocks;
2525                         break;
2526
2527                 default:
2528                         BT_ERR("Unknown type %d conn %p", conn->type, conn);
2529                         break;
2530                 }
2531         }
2532
2533         queue_work(hdev->workqueue, &hdev->tx_work);
2534 }
2535
2536 static void hci_mode_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
2537 {
2538         struct hci_ev_mode_change *ev = (void *) skb->data;
2539         struct hci_conn *conn;
2540
2541         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2542
2543         hci_dev_lock(hdev);
2544
2545         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2546         if (conn) {
2547                 conn->mode = ev->mode;
2548
2549                 if (!test_and_clear_bit(HCI_CONN_MODE_CHANGE_PEND,
2550                                         &conn->flags)) {
2551                         if (conn->mode == HCI_CM_ACTIVE)
2552                                 set_bit(HCI_CONN_POWER_SAVE, &conn->flags);
2553                         else
2554                                 clear_bit(HCI_CONN_POWER_SAVE, &conn->flags);
2555                 }
2556
2557                 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->flags))
2558                         hci_sco_setup(conn, ev->status);
2559         }
2560
2561         hci_dev_unlock(hdev);
2562 }
2563
2564 static void hci_pin_code_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
2565 {
2566         struct hci_ev_pin_code_req *ev = (void *) skb->data;
2567         struct hci_conn *conn;
2568
2569         BT_DBG("%s", hdev->name);
2570
2571         hci_dev_lock(hdev);
2572
2573         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
2574         if (!conn)
2575                 goto unlock;
2576
2577         if (conn->state == BT_CONNECTED) {
2578                 hci_conn_hold(conn);
2579                 conn->disc_timeout = HCI_PAIRING_TIMEOUT;
2580                 hci_conn_drop(conn);
2581         }
2582
2583         if (!test_bit(HCI_PAIRABLE, &hdev->dev_flags))
2584                 hci_send_cmd(hdev, HCI_OP_PIN_CODE_NEG_REPLY,
2585                              sizeof(ev->bdaddr), &ev->bdaddr);
2586         else if (test_bit(HCI_MGMT, &hdev->dev_flags)) {
2587                 u8 secure;
2588
2589                 if (conn->pending_sec_level == BT_SECURITY_HIGH)
2590                         secure = 1;
2591                 else
2592                         secure = 0;
2593
2594                 mgmt_pin_code_request(hdev, &ev->bdaddr, secure);
2595         }
2596
2597 unlock:
2598         hci_dev_unlock(hdev);
2599 }
2600
2601 static void hci_link_key_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
2602 {
2603         struct hci_ev_link_key_req *ev = (void *) skb->data;
2604         struct hci_cp_link_key_reply cp;
2605         struct hci_conn *conn;
2606         struct link_key *key;
2607
2608         BT_DBG("%s", hdev->name);
2609
2610         if (!test_bit(HCI_MGMT, &hdev->dev_flags))
2611                 return;
2612
2613         hci_dev_lock(hdev);
2614
2615         key = hci_find_link_key(hdev, &ev->bdaddr);
2616         if (!key) {
2617                 BT_DBG("%s link key not found for %pMR", hdev->name,
2618                        &ev->bdaddr);
2619                 goto not_found;
2620         }
2621
2622         BT_DBG("%s found key type %u for %pMR", hdev->name, key->type,
2623                &ev->bdaddr);
2624
2625         if (!test_bit(HCI_DEBUG_KEYS, &hdev->dev_flags) &&
2626             key->type == HCI_LK_DEBUG_COMBINATION) {
2627                 BT_DBG("%s ignoring debug key", hdev->name);
2628                 goto not_found;
2629         }
2630
2631         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
2632         if (conn) {
2633                 if (key->type == HCI_LK_UNAUTH_COMBINATION &&
2634                     conn->auth_type != 0xff && (conn->auth_type & 0x01)) {
2635                         BT_DBG("%s ignoring unauthenticated key", hdev->name);
2636                         goto not_found;
2637                 }
2638
2639                 if (key->type == HCI_LK_COMBINATION && key->pin_len < 16 &&
2640                     conn->pending_sec_level == BT_SECURITY_HIGH) {
2641                         BT_DBG("%s ignoring key unauthenticated for high security",
2642                                hdev->name);
2643                         goto not_found;
2644                 }
2645
2646                 conn->key_type = key->type;
2647                 conn->pin_length = key->pin_len;
2648         }
2649
2650         bacpy(&cp.bdaddr, &ev->bdaddr);
2651         memcpy(cp.link_key, key->val, HCI_LINK_KEY_SIZE);
2652
2653         hci_send_cmd(hdev, HCI_OP_LINK_KEY_REPLY, sizeof(cp), &cp);
2654
2655         hci_dev_unlock(hdev);
2656
2657         return;
2658
2659 not_found:
2660         hci_send_cmd(hdev, HCI_OP_LINK_KEY_NEG_REPLY, 6, &ev->bdaddr);
2661         hci_dev_unlock(hdev);
2662 }
2663
2664 static void hci_link_key_notify_evt(struct hci_dev *hdev, struct sk_buff *skb)
2665 {
2666         struct hci_ev_link_key_notify *ev = (void *) skb->data;
2667         struct hci_conn *conn;
2668         u8 pin_len = 0;
2669
2670         BT_DBG("%s", hdev->name);
2671
2672         hci_dev_lock(hdev);
2673
2674         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
2675         if (conn) {
2676                 hci_conn_hold(conn);
2677                 conn->disc_timeout = HCI_DISCONN_TIMEOUT;
2678                 pin_len = conn->pin_length;
2679
2680                 if (ev->key_type != HCI_LK_CHANGED_COMBINATION)
2681                         conn->key_type = ev->key_type;
2682
2683                 hci_conn_drop(conn);
2684         }
2685
2686         if (test_bit(HCI_MGMT, &hdev->dev_flags))
2687                 hci_add_link_key(hdev, conn, 1, &ev->bdaddr, ev->link_key,
2688                                  ev->key_type, pin_len);
2689
2690         hci_dev_unlock(hdev);
2691 }
2692
2693 static void hci_clock_offset_evt(struct hci_dev *hdev, struct sk_buff *skb)
2694 {
2695         struct hci_ev_clock_offset *ev = (void *) skb->data;
2696         struct hci_conn *conn;
2697
2698         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2699
2700         hci_dev_lock(hdev);
2701
2702         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2703         if (conn && !ev->status) {
2704                 struct inquiry_entry *ie;
2705
2706                 ie = hci_inquiry_cache_lookup(hdev, &conn->dst);
2707                 if (ie) {
2708                         ie->data.clock_offset = ev->clock_offset;
2709                         ie->timestamp = jiffies;
2710                 }
2711         }
2712
2713         hci_dev_unlock(hdev);
2714 }
2715
2716 static void hci_pkt_type_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
2717 {
2718         struct hci_ev_pkt_type_change *ev = (void *) skb->data;
2719         struct hci_conn *conn;
2720
2721         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2722
2723         hci_dev_lock(hdev);
2724
2725         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2726         if (conn && !ev->status)
2727                 conn->pkt_type = __le16_to_cpu(ev->pkt_type);
2728
2729         hci_dev_unlock(hdev);
2730 }
2731
2732 static void hci_pscan_rep_mode_evt(struct hci_dev *hdev, struct sk_buff *skb)
2733 {
2734         struct hci_ev_pscan_rep_mode *ev = (void *) skb->data;
2735         struct inquiry_entry *ie;
2736
2737         BT_DBG("%s", hdev->name);
2738
2739         hci_dev_lock(hdev);
2740
2741         ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr);
2742         if (ie) {
2743                 ie->data.pscan_rep_mode = ev->pscan_rep_mode;
2744                 ie->timestamp = jiffies;
2745         }
2746
2747         hci_dev_unlock(hdev);
2748 }
2749
2750 static void hci_inquiry_result_with_rssi_evt(struct hci_dev *hdev,
2751                                              struct sk_buff *skb)
2752 {
2753         struct inquiry_data data;
2754         int num_rsp = *((__u8 *) skb->data);
2755         bool name_known, ssp;
2756
2757         BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
2758
2759         if (!num_rsp)
2760                 return;
2761
2762         if (test_bit(HCI_PERIODIC_INQ, &hdev->dev_flags))
2763                 return;
2764
2765         hci_dev_lock(hdev);
2766
2767         if ((skb->len - 1) / num_rsp != sizeof(struct inquiry_info_with_rssi)) {
2768                 struct inquiry_info_with_rssi_and_pscan_mode *info;
2769                 info = (void *) (skb->data + 1);
2770
2771                 for (; num_rsp; num_rsp--, info++) {
2772                         bacpy(&data.bdaddr, &info->bdaddr);
2773                         data.pscan_rep_mode     = info->pscan_rep_mode;
2774                         data.pscan_period_mode  = info->pscan_period_mode;
2775                         data.pscan_mode         = info->pscan_mode;
2776                         memcpy(data.dev_class, info->dev_class, 3);
2777                         data.clock_offset       = info->clock_offset;
2778                         data.rssi               = info->rssi;
2779                         data.ssp_mode           = 0x00;
2780
2781                         name_known = hci_inquiry_cache_update(hdev, &data,
2782                                                               false, &ssp);
2783                         mgmt_device_found(hdev, &info->bdaddr, ACL_LINK, 0x00,
2784                                           info->dev_class, info->rssi,
2785                                           !name_known, ssp, NULL, 0);
2786                 }
2787         } else {
2788                 struct inquiry_info_with_rssi *info = (void *) (skb->data + 1);
2789
2790                 for (; num_rsp; num_rsp--, info++) {
2791                         bacpy(&data.bdaddr, &info->bdaddr);
2792                         data.pscan_rep_mode     = info->pscan_rep_mode;
2793                         data.pscan_period_mode  = info->pscan_period_mode;
2794                         data.pscan_mode         = 0x00;
2795                         memcpy(data.dev_class, info->dev_class, 3);
2796                         data.clock_offset       = info->clock_offset;
2797                         data.rssi               = info->rssi;
2798                         data.ssp_mode           = 0x00;
2799                         name_known = hci_inquiry_cache_update(hdev, &data,
2800                                                               false, &ssp);
2801                         mgmt_device_found(hdev, &info->bdaddr, ACL_LINK, 0x00,
2802                                           info->dev_class, info->rssi,
2803                                           !name_known, ssp, NULL, 0);
2804                 }
2805         }
2806
2807         hci_dev_unlock(hdev);
2808 }
2809
2810 static void hci_remote_ext_features_evt(struct hci_dev *hdev,
2811                                         struct sk_buff *skb)
2812 {
2813         struct hci_ev_remote_ext_features *ev = (void *) skb->data;
2814         struct hci_conn *conn;
2815
2816         BT_DBG("%s", hdev->name);
2817
2818         hci_dev_lock(hdev);
2819
2820         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2821         if (!conn)
2822                 goto unlock;
2823
2824         if (ev->page < HCI_MAX_PAGES)
2825                 memcpy(conn->features[ev->page], ev->features, 8);
2826
2827         if (!ev->status && ev->page == 0x01) {
2828                 struct inquiry_entry *ie;
2829
2830                 ie = hci_inquiry_cache_lookup(hdev, &conn->dst);
2831                 if (ie)
2832                         ie->data.ssp_mode = (ev->features[0] & LMP_HOST_SSP);
2833
2834                 if (ev->features[0] & LMP_HOST_SSP) {
2835                         set_bit(HCI_CONN_SSP_ENABLED, &conn->flags);
2836                 } else {
2837                         /* It is mandatory by the Bluetooth specification that
2838                          * Extended Inquiry Results are only used when Secure
2839                          * Simple Pairing is enabled, but some devices violate
2840                          * this.
2841                          *
2842                          * To make these devices work, the internal SSP
2843                          * enabled flag needs to be cleared if the remote host
2844                          * features do not indicate SSP support */
2845                         clear_bit(HCI_CONN_SSP_ENABLED, &conn->flags);
2846                 }
2847         }
2848
2849         if (conn->state != BT_CONFIG)
2850                 goto unlock;
2851
2852         if (!ev->status && !test_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags)) {
2853                 struct hci_cp_remote_name_req cp;
2854                 memset(&cp, 0, sizeof(cp));
2855                 bacpy(&cp.bdaddr, &conn->dst);
2856                 cp.pscan_rep_mode = 0x02;
2857                 hci_send_cmd(hdev, HCI_OP_REMOTE_NAME_REQ, sizeof(cp), &cp);
2858         } else if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags))
2859                 mgmt_device_connected(hdev, &conn->dst, conn->type,
2860                                       conn->dst_type, 0, NULL, 0,
2861                                       conn->dev_class);
2862
2863         if (!hci_outgoing_auth_needed(hdev, conn)) {
2864                 conn->state = BT_CONNECTED;
2865                 hci_proto_connect_cfm(conn, ev->status);
2866                 hci_conn_drop(conn);
2867         }
2868
2869 unlock:
2870         hci_dev_unlock(hdev);
2871 }
2872
2873 static void hci_sync_conn_complete_evt(struct hci_dev *hdev,
2874                                        struct sk_buff *skb)
2875 {
2876         struct hci_ev_sync_conn_complete *ev = (void *) skb->data;
2877         struct hci_conn *conn;
2878
2879         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2880
2881         hci_dev_lock(hdev);
2882
2883         conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
2884         if (!conn) {
2885                 if (ev->link_type == ESCO_LINK)
2886                         goto unlock;
2887
2888                 conn = hci_conn_hash_lookup_ba(hdev, ESCO_LINK, &ev->bdaddr);
2889                 if (!conn)
2890                         goto unlock;
2891
2892                 conn->type = SCO_LINK;
2893         }
2894
2895         switch (ev->status) {
2896         case 0x00:
2897                 conn->handle = __le16_to_cpu(ev->handle);
2898                 conn->state  = BT_CONNECTED;
2899
2900                 hci_conn_add_sysfs(conn);
2901                 break;
2902
2903         case 0x0d:      /* Connection Rejected due to Limited Resources */
2904         case 0x11:      /* Unsupported Feature or Parameter Value */
2905         case 0x1c:      /* SCO interval rejected */
2906         case 0x1a:      /* Unsupported Remote Feature */
2907         case 0x1f:      /* Unspecified error */
2908                 if (conn->out) {
2909                         conn->pkt_type = (hdev->esco_type & SCO_ESCO_MASK) |
2910                                         (hdev->esco_type & EDR_ESCO_MASK);
2911                         if (hci_setup_sync(conn, conn->link->handle))
2912                                 goto unlock;
2913                 }
2914                 /* fall through */
2915
2916         default:
2917                 conn->state = BT_CLOSED;
2918                 break;
2919         }
2920
2921         hci_proto_connect_cfm(conn, ev->status);
2922         if (ev->status)
2923                 hci_conn_del(conn);
2924
2925 unlock:
2926         hci_dev_unlock(hdev);
2927 }
2928
2929 static inline size_t eir_get_length(u8 *eir, size_t eir_len)
2930 {
2931         size_t parsed = 0;
2932
2933         while (parsed < eir_len) {
2934                 u8 field_len = eir[0];
2935
2936                 if (field_len == 0)
2937                         return parsed;
2938
2939                 parsed += field_len + 1;
2940                 eir += field_len + 1;
2941         }
2942
2943         return eir_len;
2944 }
2945
2946 static void hci_extended_inquiry_result_evt(struct hci_dev *hdev,
2947                                             struct sk_buff *skb)
2948 {
2949         struct inquiry_data data;
2950         struct extended_inquiry_info *info = (void *) (skb->data + 1);
2951         int num_rsp = *((__u8 *) skb->data);
2952         size_t eir_len;
2953
2954         BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
2955
2956         if (!num_rsp)
2957                 return;
2958
2959         if (test_bit(HCI_PERIODIC_INQ, &hdev->dev_flags))
2960                 return;
2961
2962         hci_dev_lock(hdev);
2963
2964         for (; num_rsp; num_rsp--, info++) {
2965                 bool name_known, ssp;
2966
2967                 bacpy(&data.bdaddr, &info->bdaddr);
2968                 data.pscan_rep_mode     = info->pscan_rep_mode;
2969                 data.pscan_period_mode  = info->pscan_period_mode;
2970                 data.pscan_mode         = 0x00;
2971                 memcpy(data.dev_class, info->dev_class, 3);
2972                 data.clock_offset       = info->clock_offset;
2973                 data.rssi               = info->rssi;
2974                 data.ssp_mode           = 0x01;
2975
2976                 if (test_bit(HCI_MGMT, &hdev->dev_flags))
2977                         name_known = eir_has_data_type(info->data,
2978                                                        sizeof(info->data),
2979                                                        EIR_NAME_COMPLETE);
2980                 else
2981                         name_known = true;
2982
2983                 name_known = hci_inquiry_cache_update(hdev, &data, name_known,
2984                                                       &ssp);
2985                 eir_len = eir_get_length(info->data, sizeof(info->data));
2986                 mgmt_device_found(hdev, &info->bdaddr, ACL_LINK, 0x00,
2987                                   info->dev_class, info->rssi, !name_known,
2988                                   ssp, info->data, eir_len);
2989         }
2990
2991         hci_dev_unlock(hdev);
2992 }
2993
2994 static void hci_key_refresh_complete_evt(struct hci_dev *hdev,
2995                                          struct sk_buff *skb)
2996 {
2997         struct hci_ev_key_refresh_complete *ev = (void *) skb->data;
2998         struct hci_conn *conn;
2999
3000         BT_DBG("%s status 0x%2.2x handle 0x%4.4x", hdev->name, ev->status,
3001                __le16_to_cpu(ev->handle));
3002
3003         hci_dev_lock(hdev);
3004
3005         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
3006         if (!conn)
3007                 goto unlock;
3008
3009         if (!ev->status)
3010                 conn->sec_level = conn->pending_sec_level;
3011
3012         clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
3013
3014         if (ev->status && conn->state == BT_CONNECTED) {
3015                 hci_disconnect(conn, HCI_ERROR_AUTH_FAILURE);
3016                 hci_conn_drop(conn);
3017                 goto unlock;
3018         }
3019
3020         if (conn->state == BT_CONFIG) {
3021                 if (!ev->status)
3022                         conn->state = BT_CONNECTED;
3023
3024                 hci_proto_connect_cfm(conn, ev->status);
3025                 hci_conn_drop(conn);
3026         } else {
3027                 hci_auth_cfm(conn, ev->status);
3028
3029                 hci_conn_hold(conn);
3030                 conn->disc_timeout = HCI_DISCONN_TIMEOUT;
3031                 hci_conn_drop(conn);
3032         }
3033
3034 unlock:
3035         hci_dev_unlock(hdev);
3036 }
3037
3038 static u8 hci_get_auth_req(struct hci_conn *conn)
3039 {
3040         /* If remote requests dedicated bonding follow that lead */
3041         if (conn->remote_auth == HCI_AT_DEDICATED_BONDING ||
3042             conn->remote_auth == HCI_AT_DEDICATED_BONDING_MITM) {
3043                 /* If both remote and local IO capabilities allow MITM
3044                  * protection then require it, otherwise don't */
3045                 if (conn->remote_cap == HCI_IO_NO_INPUT_OUTPUT ||
3046                     conn->io_capability == HCI_IO_NO_INPUT_OUTPUT)
3047                         return HCI_AT_DEDICATED_BONDING;
3048                 else
3049                         return HCI_AT_DEDICATED_BONDING_MITM;
3050         }
3051
3052         /* If remote requests no-bonding follow that lead */
3053         if (conn->remote_auth == HCI_AT_NO_BONDING ||
3054             conn->remote_auth == HCI_AT_NO_BONDING_MITM)
3055                 return conn->remote_auth | (conn->auth_type & 0x01);
3056
3057         return conn->auth_type;
3058 }
3059
3060 static void hci_io_capa_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
3061 {
3062         struct hci_ev_io_capa_request *ev = (void *) skb->data;
3063         struct hci_conn *conn;
3064
3065         BT_DBG("%s", hdev->name);
3066
3067         hci_dev_lock(hdev);
3068
3069         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3070         if (!conn)
3071                 goto unlock;
3072
3073         hci_conn_hold(conn);
3074
3075         if (!test_bit(HCI_MGMT, &hdev->dev_flags))
3076                 goto unlock;
3077
3078         if (test_bit(HCI_PAIRABLE, &hdev->dev_flags) ||
3079             (conn->remote_auth & ~0x01) == HCI_AT_NO_BONDING) {
3080                 struct hci_cp_io_capability_reply cp;
3081
3082                 bacpy(&cp.bdaddr, &ev->bdaddr);
3083                 /* Change the IO capability from KeyboardDisplay
3084                  * to DisplayYesNo as it is not supported by BT spec. */
3085                 cp.capability = (conn->io_capability == 0x04) ?
3086                                 HCI_IO_DISPLAY_YESNO : conn->io_capability;
3087                 conn->auth_type = hci_get_auth_req(conn);
3088                 cp.authentication = conn->auth_type;
3089
3090                 if (hci_find_remote_oob_data(hdev, &conn->dst) &&
3091                     (conn->out || test_bit(HCI_CONN_REMOTE_OOB, &conn->flags)))
3092                         cp.oob_data = 0x01;
3093                 else
3094                         cp.oob_data = 0x00;
3095
3096                 hci_send_cmd(hdev, HCI_OP_IO_CAPABILITY_REPLY,
3097                              sizeof(cp), &cp);
3098         } else {
3099                 struct hci_cp_io_capability_neg_reply cp;
3100
3101                 bacpy(&cp.bdaddr, &ev->bdaddr);
3102                 cp.reason = HCI_ERROR_PAIRING_NOT_ALLOWED;
3103
3104                 hci_send_cmd(hdev, HCI_OP_IO_CAPABILITY_NEG_REPLY,
3105                              sizeof(cp), &cp);
3106         }
3107
3108 unlock:
3109         hci_dev_unlock(hdev);
3110 }
3111
3112 static void hci_io_capa_reply_evt(struct hci_dev *hdev, struct sk_buff *skb)
3113 {
3114         struct hci_ev_io_capa_reply *ev = (void *) skb->data;
3115         struct hci_conn *conn;
3116
3117         BT_DBG("%s", hdev->name);
3118
3119         hci_dev_lock(hdev);
3120
3121         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3122         if (!conn)
3123                 goto unlock;
3124
3125         conn->remote_cap = ev->capability;
3126         conn->remote_auth = ev->authentication;
3127         if (ev->oob_data)
3128                 set_bit(HCI_CONN_REMOTE_OOB, &conn->flags);
3129
3130 unlock:
3131         hci_dev_unlock(hdev);
3132 }
3133
3134 static void hci_user_confirm_request_evt(struct hci_dev *hdev,
3135                                          struct sk_buff *skb)
3136 {
3137         struct hci_ev_user_confirm_req *ev = (void *) skb->data;
3138         int loc_mitm, rem_mitm, confirm_hint = 0;
3139         struct hci_conn *conn;
3140
3141         BT_DBG("%s", hdev->name);
3142
3143         hci_dev_lock(hdev);
3144
3145         if (!test_bit(HCI_MGMT, &hdev->dev_flags))
3146                 goto unlock;
3147
3148         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3149         if (!conn)
3150                 goto unlock;
3151
3152         loc_mitm = (conn->auth_type & 0x01);
3153         rem_mitm = (conn->remote_auth & 0x01);
3154
3155         /* If we require MITM but the remote device can't provide that
3156          * (it has NoInputNoOutput) then reject the confirmation
3157          * request. The only exception is when we're dedicated bonding
3158          * initiators (connect_cfm_cb set) since then we always have the MITM
3159          * bit set. */
3160         if (!conn->connect_cfm_cb && loc_mitm &&
3161             conn->remote_cap == HCI_IO_NO_INPUT_OUTPUT) {
3162                 BT_DBG("Rejecting request: remote device can't provide MITM");
3163                 hci_send_cmd(hdev, HCI_OP_USER_CONFIRM_NEG_REPLY,
3164                              sizeof(ev->bdaddr), &ev->bdaddr);
3165                 goto unlock;
3166         }
3167
3168         /* If no side requires MITM protection; auto-accept */
3169         if ((!loc_mitm || conn->remote_cap == HCI_IO_NO_INPUT_OUTPUT) &&
3170             (!rem_mitm || conn->io_capability == HCI_IO_NO_INPUT_OUTPUT)) {
3171
3172                 /* If we're not the initiators request authorization to
3173                  * proceed from user space (mgmt_user_confirm with
3174                  * confirm_hint set to 1). */
3175                 if (!test_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
3176                         BT_DBG("Confirming auto-accept as acceptor");
3177                         confirm_hint = 1;
3178                         goto confirm;
3179                 }
3180
3181                 BT_DBG("Auto-accept of user confirmation with %ums delay",
3182                        hdev->auto_accept_delay);
3183
3184                 if (hdev->auto_accept_delay > 0) {
3185                         int delay = msecs_to_jiffies(hdev->auto_accept_delay);
3186                         queue_delayed_work(conn->hdev->workqueue,
3187                                            &conn->auto_accept_work, delay);
3188                         goto unlock;
3189                 }
3190
3191                 hci_send_cmd(hdev, HCI_OP_USER_CONFIRM_REPLY,
3192                              sizeof(ev->bdaddr), &ev->bdaddr);
3193                 goto unlock;
3194         }
3195
3196 confirm:
3197         mgmt_user_confirm_request(hdev, &ev->bdaddr, ACL_LINK, 0, ev->passkey,
3198                                   confirm_hint);
3199
3200 unlock:
3201         hci_dev_unlock(hdev);
3202 }
3203
3204 static void hci_user_passkey_request_evt(struct hci_dev *hdev,
3205                                          struct sk_buff *skb)
3206 {
3207         struct hci_ev_user_passkey_req *ev = (void *) skb->data;
3208
3209         BT_DBG("%s", hdev->name);
3210
3211         if (test_bit(HCI_MGMT, &hdev->dev_flags))
3212                 mgmt_user_passkey_request(hdev, &ev->bdaddr, ACL_LINK, 0);
3213 }
3214
3215 static void hci_user_passkey_notify_evt(struct hci_dev *hdev,
3216                                         struct sk_buff *skb)
3217 {
3218         struct hci_ev_user_passkey_notify *ev = (void *) skb->data;
3219         struct hci_conn *conn;
3220
3221         BT_DBG("%s", hdev->name);
3222
3223         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3224         if (!conn)
3225                 return;
3226
3227         conn->passkey_notify = __le32_to_cpu(ev->passkey);
3228         conn->passkey_entered = 0;
3229
3230         if (test_bit(HCI_MGMT, &hdev->dev_flags))
3231                 mgmt_user_passkey_notify(hdev, &conn->dst, conn->type,
3232                                          conn->dst_type, conn->passkey_notify,
3233                                          conn->passkey_entered);
3234 }
3235
3236 static void hci_keypress_notify_evt(struct hci_dev *hdev, struct sk_buff *skb)
3237 {
3238         struct hci_ev_keypress_notify *ev = (void *) skb->data;
3239         struct hci_conn *conn;
3240
3241         BT_DBG("%s", hdev->name);
3242
3243         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3244         if (!conn)
3245                 return;
3246
3247         switch (ev->type) {
3248         case HCI_KEYPRESS_STARTED:
3249                 conn->passkey_entered = 0;
3250                 return;
3251
3252         case HCI_KEYPRESS_ENTERED:
3253                 conn->passkey_entered++;
3254                 break;
3255
3256         case HCI_KEYPRESS_ERASED:
3257                 conn->passkey_entered--;
3258                 break;
3259
3260         case HCI_KEYPRESS_CLEARED:
3261                 conn->passkey_entered = 0;
3262                 break;
3263
3264         case HCI_KEYPRESS_COMPLETED:
3265                 return;
3266         }
3267
3268         if (test_bit(HCI_MGMT, &hdev->dev_flags))
3269                 mgmt_user_passkey_notify(hdev, &conn->dst, conn->type,
3270                                          conn->dst_type, conn->passkey_notify,
3271                                          conn->passkey_entered);
3272 }
3273
3274 static void hci_simple_pair_complete_evt(struct hci_dev *hdev,
3275                                          struct sk_buff *skb)
3276 {
3277         struct hci_ev_simple_pair_complete *ev = (void *) skb->data;
3278         struct hci_conn *conn;
3279
3280         BT_DBG("%s", hdev->name);
3281
3282         hci_dev_lock(hdev);
3283
3284         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3285         if (!conn)
3286                 goto unlock;
3287
3288         /* To avoid duplicate auth_failed events to user space we check
3289          * the HCI_CONN_AUTH_PEND flag which will be set if we
3290          * initiated the authentication. A traditional auth_complete
3291          * event gets always produced as initiator and is also mapped to
3292          * the mgmt_auth_failed event */
3293         if (!test_bit(HCI_CONN_AUTH_PEND, &conn->flags) && ev->status)
3294                 mgmt_auth_failed(hdev, &conn->dst, conn->type, conn->dst_type,
3295                                  ev->status);
3296
3297         hci_conn_drop(conn);
3298
3299 unlock:
3300         hci_dev_unlock(hdev);
3301 }
3302
3303 static void hci_remote_host_features_evt(struct hci_dev *hdev,
3304                                          struct sk_buff *skb)
3305 {
3306         struct hci_ev_remote_host_features *ev = (void *) skb->data;
3307         struct inquiry_entry *ie;
3308         struct hci_conn *conn;
3309
3310         BT_DBG("%s", hdev->name);
3311
3312         hci_dev_lock(hdev);
3313
3314         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3315         if (conn)
3316                 memcpy(conn->features[1], ev->features, 8);
3317
3318         ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr);
3319         if (ie)
3320                 ie->data.ssp_mode = (ev->features[0] & LMP_HOST_SSP);
3321
3322         hci_dev_unlock(hdev);
3323 }
3324
3325 static void hci_remote_oob_data_request_evt(struct hci_dev *hdev,
3326                                             struct sk_buff *skb)
3327 {
3328         struct hci_ev_remote_oob_data_request *ev = (void *) skb->data;
3329         struct oob_data *data;
3330
3331         BT_DBG("%s", hdev->name);
3332
3333         hci_dev_lock(hdev);
3334
3335         if (!test_bit(HCI_MGMT, &hdev->dev_flags))
3336                 goto unlock;
3337
3338         data = hci_find_remote_oob_data(hdev, &ev->bdaddr);
3339         if (data) {
3340                 struct hci_cp_remote_oob_data_reply cp;
3341
3342                 bacpy(&cp.bdaddr, &ev->bdaddr);
3343                 memcpy(cp.hash, data->hash, sizeof(cp.hash));
3344                 memcpy(cp.randomizer, data->randomizer, sizeof(cp.randomizer));
3345
3346                 hci_send_cmd(hdev, HCI_OP_REMOTE_OOB_DATA_REPLY, sizeof(cp),
3347                              &cp);
3348         } else {
3349                 struct hci_cp_remote_oob_data_neg_reply cp;
3350
3351                 bacpy(&cp.bdaddr, &ev->bdaddr);
3352                 hci_send_cmd(hdev, HCI_OP_REMOTE_OOB_DATA_NEG_REPLY, sizeof(cp),
3353                              &cp);
3354         }
3355
3356 unlock:
3357         hci_dev_unlock(hdev);
3358 }
3359
3360 static void hci_phy_link_complete_evt(struct hci_dev *hdev,
3361                                       struct sk_buff *skb)
3362 {
3363         struct hci_ev_phy_link_complete *ev = (void *) skb->data;
3364         struct hci_conn *hcon, *bredr_hcon;
3365
3366         BT_DBG("%s handle 0x%2.2x status 0x%2.2x", hdev->name, ev->phy_handle,
3367                ev->status);
3368
3369         hci_dev_lock(hdev);
3370
3371         hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle);
3372         if (!hcon) {
3373                 hci_dev_unlock(hdev);
3374                 return;
3375         }
3376
3377         if (ev->status) {
3378                 hci_conn_del(hcon);
3379                 hci_dev_unlock(hdev);
3380                 return;
3381         }
3382
3383         bredr_hcon = hcon->amp_mgr->l2cap_conn->hcon;
3384
3385         hcon->state = BT_CONNECTED;
3386         bacpy(&hcon->dst, &bredr_hcon->dst);
3387
3388         hci_conn_hold(hcon);
3389         hcon->disc_timeout = HCI_DISCONN_TIMEOUT;
3390         hci_conn_drop(hcon);
3391
3392         hci_conn_add_sysfs(hcon);
3393
3394         amp_physical_cfm(bredr_hcon, hcon);
3395
3396         hci_dev_unlock(hdev);
3397 }
3398
3399 static void hci_loglink_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
3400 {
3401         struct hci_ev_logical_link_complete *ev = (void *) skb->data;
3402         struct hci_conn *hcon;
3403         struct hci_chan *hchan;
3404         struct amp_mgr *mgr;
3405
3406         BT_DBG("%s log_handle 0x%4.4x phy_handle 0x%2.2x status 0x%2.2x",
3407                hdev->name, le16_to_cpu(ev->handle), ev->phy_handle,
3408                ev->status);
3409
3410         hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle);
3411         if (!hcon)
3412                 return;
3413
3414         /* Create AMP hchan */
3415         hchan = hci_chan_create(hcon);
3416         if (!hchan)
3417                 return;
3418
3419         hchan->handle = le16_to_cpu(ev->handle);
3420
3421         BT_DBG("hcon %p mgr %p hchan %p", hcon, hcon->amp_mgr, hchan);
3422
3423         mgr = hcon->amp_mgr;
3424         if (mgr && mgr->bredr_chan) {
3425                 struct l2cap_chan *bredr_chan = mgr->bredr_chan;
3426
3427                 l2cap_chan_lock(bredr_chan);
3428
3429                 bredr_chan->conn->mtu = hdev->block_mtu;
3430                 l2cap_logical_cfm(bredr_chan, hchan, 0);
3431                 hci_conn_hold(hcon);
3432
3433                 l2cap_chan_unlock(bredr_chan);
3434         }
3435 }
3436
3437 static void hci_disconn_loglink_complete_evt(struct hci_dev *hdev,
3438                                              struct sk_buff *skb)
3439 {
3440         struct hci_ev_disconn_logical_link_complete *ev = (void *) skb->data;
3441         struct hci_chan *hchan;
3442
3443         BT_DBG("%s log handle 0x%4.4x status 0x%2.2x", hdev->name,
3444                le16_to_cpu(ev->handle), ev->status);
3445
3446         if (ev->status)
3447                 return;
3448
3449         hci_dev_lock(hdev);
3450
3451         hchan = hci_chan_lookup_handle(hdev, le16_to_cpu(ev->handle));
3452         if (!hchan)
3453                 goto unlock;
3454
3455         amp_destroy_logical_link(hchan, ev->reason);
3456
3457 unlock:
3458         hci_dev_unlock(hdev);
3459 }
3460
3461 static void hci_disconn_phylink_complete_evt(struct hci_dev *hdev,
3462                                              struct sk_buff *skb)
3463 {
3464         struct hci_ev_disconn_phy_link_complete *ev = (void *) skb->data;
3465         struct hci_conn *hcon;
3466
3467         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3468
3469         if (ev->status)
3470                 return;
3471
3472         hci_dev_lock(hdev);
3473
3474         hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle);
3475         if (hcon) {
3476                 hcon->state = BT_CLOSED;
3477                 hci_conn_del(hcon);
3478         }
3479
3480         hci_dev_unlock(hdev);
3481 }
3482
3483 static void hci_le_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
3484 {
3485         struct hci_ev_le_conn_complete *ev = (void *) skb->data;
3486         struct hci_conn *conn;
3487
3488         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3489
3490         hci_dev_lock(hdev);
3491
3492         conn = hci_conn_hash_lookup_state(hdev, LE_LINK, BT_CONNECT);
3493         if (!conn) {
3494                 conn = hci_conn_add(hdev, LE_LINK, &ev->bdaddr);
3495                 if (!conn) {
3496                         BT_ERR("No memory for new connection");
3497                         goto unlock;
3498                 }
3499
3500                 conn->dst_type = ev->bdaddr_type;
3501
3502                 /* The advertising parameters for own address type
3503                  * define which source address and source address
3504                  * type this connections has.
3505                  */
3506                 if (bacmp(&conn->src, BDADDR_ANY)) {
3507                         conn->src_type = ADDR_LE_DEV_PUBLIC;
3508                 } else {
3509                         bacpy(&conn->src, &hdev->static_addr);
3510                         conn->src_type = ADDR_LE_DEV_RANDOM;
3511                 }
3512
3513                 if (ev->role == LE_CONN_ROLE_MASTER) {
3514                         conn->out = true;
3515                         conn->link_mode |= HCI_LM_MASTER;
3516                 }
3517         }
3518
3519         if (ev->status) {
3520                 mgmt_connect_failed(hdev, &conn->dst, conn->type,
3521                                     conn->dst_type, ev->status);
3522                 hci_proto_connect_cfm(conn, ev->status);
3523                 conn->state = BT_CLOSED;
3524                 hci_conn_del(conn);
3525                 goto unlock;
3526         }
3527
3528         if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags))
3529                 mgmt_device_connected(hdev, &ev->bdaddr, conn->type,
3530                                       conn->dst_type, 0, NULL, 0, NULL);
3531
3532         conn->sec_level = BT_SECURITY_LOW;
3533         conn->handle = __le16_to_cpu(ev->handle);
3534         conn->state = BT_CONNECTED;
3535
3536         if (test_bit(HCI_6LOWPAN_ENABLED, &hdev->dev_flags))
3537                 set_bit(HCI_CONN_6LOWPAN, &conn->flags);
3538
3539         hci_conn_add_sysfs(conn);
3540
3541         hci_proto_connect_cfm(conn, ev->status);
3542
3543 unlock:
3544         hci_dev_unlock(hdev);
3545 }
3546
3547 static void hci_le_adv_report_evt(struct hci_dev *hdev, struct sk_buff *skb)
3548 {
3549         u8 num_reports = skb->data[0];
3550         void *ptr = &skb->data[1];
3551         s8 rssi;
3552
3553         while (num_reports--) {
3554                 struct hci_ev_le_advertising_info *ev = ptr;
3555
3556                 rssi = ev->data[ev->length];
3557                 mgmt_device_found(hdev, &ev->bdaddr, LE_LINK, ev->bdaddr_type,
3558                                   NULL, rssi, 0, 1, ev->data, ev->length);
3559
3560                 ptr += sizeof(*ev) + ev->length + 1;
3561         }
3562 }
3563
3564 static void hci_le_ltk_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
3565 {
3566         struct hci_ev_le_ltk_req *ev = (void *) skb->data;
3567         struct hci_cp_le_ltk_reply cp;
3568         struct hci_cp_le_ltk_neg_reply neg;
3569         struct hci_conn *conn;
3570         struct smp_ltk *ltk;
3571
3572         BT_DBG("%s handle 0x%4.4x", hdev->name, __le16_to_cpu(ev->handle));
3573
3574         hci_dev_lock(hdev);
3575
3576         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
3577         if (conn == NULL)
3578                 goto not_found;
3579
3580         ltk = hci_find_ltk(hdev, ev->ediv, ev->random);
3581         if (ltk == NULL)
3582                 goto not_found;
3583
3584         memcpy(cp.ltk, ltk->val, sizeof(ltk->val));
3585         cp.handle = cpu_to_le16(conn->handle);
3586
3587         if (ltk->authenticated)
3588                 conn->pending_sec_level = BT_SECURITY_HIGH;
3589         else
3590                 conn->pending_sec_level = BT_SECURITY_MEDIUM;
3591
3592         conn->enc_key_size = ltk->enc_size;
3593
3594         hci_send_cmd(hdev, HCI_OP_LE_LTK_REPLY, sizeof(cp), &cp);
3595
3596         if (ltk->type & HCI_SMP_STK) {
3597                 list_del(&ltk->list);
3598                 kfree(ltk);
3599         }
3600
3601         hci_dev_unlock(hdev);
3602
3603         return;
3604
3605 not_found:
3606         neg.handle = ev->handle;
3607         hci_send_cmd(hdev, HCI_OP_LE_LTK_NEG_REPLY, sizeof(neg), &neg);
3608         hci_dev_unlock(hdev);
3609 }
3610
3611 static void hci_le_meta_evt(struct hci_dev *hdev, struct sk_buff *skb)
3612 {
3613         struct hci_ev_le_meta *le_ev = (void *) skb->data;
3614
3615         skb_pull(skb, sizeof(*le_ev));
3616
3617         switch (le_ev->subevent) {
3618         case HCI_EV_LE_CONN_COMPLETE:
3619                 hci_le_conn_complete_evt(hdev, skb);
3620                 break;
3621
3622         case HCI_EV_LE_ADVERTISING_REPORT:
3623                 hci_le_adv_report_evt(hdev, skb);
3624                 break;
3625
3626         case HCI_EV_LE_LTK_REQ:
3627                 hci_le_ltk_request_evt(hdev, skb);
3628                 break;
3629
3630         default:
3631                 break;
3632         }
3633 }
3634
3635 static void hci_chan_selected_evt(struct hci_dev *hdev, struct sk_buff *skb)
3636 {
3637         struct hci_ev_channel_selected *ev = (void *) skb->data;
3638         struct hci_conn *hcon;
3639
3640         BT_DBG("%s handle 0x%2.2x", hdev->name, ev->phy_handle);
3641
3642         skb_pull(skb, sizeof(*ev));
3643
3644         hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle);
3645         if (!hcon)
3646                 return;
3647
3648         amp_read_loc_assoc_final_data(hdev, hcon);
3649 }
3650
3651 void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb)
3652 {
3653         struct hci_event_hdr *hdr = (void *) skb->data;
3654         __u8 event = hdr->evt;
3655
3656         hci_dev_lock(hdev);
3657
3658         /* Received events are (currently) only needed when a request is
3659          * ongoing so avoid unnecessary memory allocation.
3660          */
3661         if (hdev->req_status == HCI_REQ_PEND) {
3662                 kfree_skb(hdev->recv_evt);
3663                 hdev->recv_evt = skb_clone(skb, GFP_KERNEL);
3664         }
3665
3666         hci_dev_unlock(hdev);
3667
3668         skb_pull(skb, HCI_EVENT_HDR_SIZE);
3669
3670         if (hdev->sent_cmd && bt_cb(hdev->sent_cmd)->req.event == event) {
3671                 struct hci_command_hdr *cmd_hdr = (void *) hdev->sent_cmd->data;
3672                 u16 opcode = __le16_to_cpu(cmd_hdr->opcode);
3673
3674                 hci_req_cmd_complete(hdev, opcode, 0);
3675         }
3676
3677         switch (event) {
3678         case HCI_EV_INQUIRY_COMPLETE:
3679                 hci_inquiry_complete_evt(hdev, skb);
3680                 break;
3681
3682         case HCI_EV_INQUIRY_RESULT:
3683                 hci_inquiry_result_evt(hdev, skb);
3684                 break;
3685
3686         case HCI_EV_CONN_COMPLETE:
3687                 hci_conn_complete_evt(hdev, skb);
3688                 break;
3689
3690         case HCI_EV_CONN_REQUEST:
3691                 hci_conn_request_evt(hdev, skb);
3692                 break;
3693
3694         case HCI_EV_DISCONN_COMPLETE:
3695                 hci_disconn_complete_evt(hdev, skb);
3696                 break;
3697
3698         case HCI_EV_AUTH_COMPLETE:
3699                 hci_auth_complete_evt(hdev, skb);
3700                 break;
3701
3702         case HCI_EV_REMOTE_NAME:
3703                 hci_remote_name_evt(hdev, skb);
3704                 break;
3705
3706         case HCI_EV_ENCRYPT_CHANGE:
3707                 hci_encrypt_change_evt(hdev, skb);
3708                 break;
3709
3710         case HCI_EV_CHANGE_LINK_KEY_COMPLETE:
3711                 hci_change_link_key_complete_evt(hdev, skb);
3712                 break;
3713
3714         case HCI_EV_REMOTE_FEATURES:
3715                 hci_remote_features_evt(hdev, skb);
3716                 break;
3717
3718         case HCI_EV_CMD_COMPLETE:
3719                 hci_cmd_complete_evt(hdev, skb);
3720                 break;
3721
3722         case HCI_EV_CMD_STATUS:
3723                 hci_cmd_status_evt(hdev, skb);
3724                 break;
3725
3726         case HCI_EV_ROLE_CHANGE:
3727                 hci_role_change_evt(hdev, skb);
3728                 break;
3729
3730         case HCI_EV_NUM_COMP_PKTS:
3731                 hci_num_comp_pkts_evt(hdev, skb);
3732                 break;
3733
3734         case HCI_EV_MODE_CHANGE:
3735                 hci_mode_change_evt(hdev, skb);
3736                 break;
3737
3738         case HCI_EV_PIN_CODE_REQ:
3739                 hci_pin_code_request_evt(hdev, skb);
3740                 break;
3741
3742         case HCI_EV_LINK_KEY_REQ:
3743                 hci_link_key_request_evt(hdev, skb);
3744                 break;
3745
3746         case HCI_EV_LINK_KEY_NOTIFY:
3747                 hci_link_key_notify_evt(hdev, skb);
3748                 break;
3749
3750         case HCI_EV_CLOCK_OFFSET:
3751                 hci_clock_offset_evt(hdev, skb);
3752                 break;
3753
3754         case HCI_EV_PKT_TYPE_CHANGE:
3755                 hci_pkt_type_change_evt(hdev, skb);
3756                 break;
3757
3758         case HCI_EV_PSCAN_REP_MODE:
3759                 hci_pscan_rep_mode_evt(hdev, skb);
3760                 break;
3761
3762         case HCI_EV_INQUIRY_RESULT_WITH_RSSI:
3763                 hci_inquiry_result_with_rssi_evt(hdev, skb);
3764                 break;
3765
3766         case HCI_EV_REMOTE_EXT_FEATURES:
3767                 hci_remote_ext_features_evt(hdev, skb);
3768                 break;
3769
3770         case HCI_EV_SYNC_CONN_COMPLETE:
3771                 hci_sync_conn_complete_evt(hdev, skb);
3772                 break;
3773
3774         case HCI_EV_EXTENDED_INQUIRY_RESULT:
3775                 hci_extended_inquiry_result_evt(hdev, skb);
3776                 break;
3777
3778         case HCI_EV_KEY_REFRESH_COMPLETE:
3779                 hci_key_refresh_complete_evt(hdev, skb);
3780                 break;
3781
3782         case HCI_EV_IO_CAPA_REQUEST:
3783                 hci_io_capa_request_evt(hdev, skb);
3784                 break;
3785
3786         case HCI_EV_IO_CAPA_REPLY:
3787                 hci_io_capa_reply_evt(hdev, skb);
3788                 break;
3789
3790         case HCI_EV_USER_CONFIRM_REQUEST:
3791                 hci_user_confirm_request_evt(hdev, skb);
3792                 break;
3793
3794         case HCI_EV_USER_PASSKEY_REQUEST:
3795                 hci_user_passkey_request_evt(hdev, skb);
3796                 break;
3797
3798         case HCI_EV_USER_PASSKEY_NOTIFY:
3799                 hci_user_passkey_notify_evt(hdev, skb);
3800                 break;
3801
3802         case HCI_EV_KEYPRESS_NOTIFY:
3803                 hci_keypress_notify_evt(hdev, skb);
3804                 break;
3805
3806         case HCI_EV_SIMPLE_PAIR_COMPLETE:
3807                 hci_simple_pair_complete_evt(hdev, skb);
3808                 break;
3809
3810         case HCI_EV_REMOTE_HOST_FEATURES:
3811                 hci_remote_host_features_evt(hdev, skb);
3812                 break;
3813
3814         case HCI_EV_LE_META:
3815                 hci_le_meta_evt(hdev, skb);
3816                 break;
3817
3818         case HCI_EV_CHANNEL_SELECTED:
3819                 hci_chan_selected_evt(hdev, skb);
3820                 break;
3821
3822         case HCI_EV_REMOTE_OOB_DATA_REQUEST:
3823                 hci_remote_oob_data_request_evt(hdev, skb);
3824                 break;
3825
3826         case HCI_EV_PHY_LINK_COMPLETE:
3827                 hci_phy_link_complete_evt(hdev, skb);
3828                 break;
3829
3830         case HCI_EV_LOGICAL_LINK_COMPLETE:
3831                 hci_loglink_complete_evt(hdev, skb);
3832                 break;
3833
3834         case HCI_EV_DISCONN_LOGICAL_LINK_COMPLETE:
3835                 hci_disconn_loglink_complete_evt(hdev, skb);
3836                 break;
3837
3838         case HCI_EV_DISCONN_PHY_LINK_COMPLETE:
3839                 hci_disconn_phylink_complete_evt(hdev, skb);
3840                 break;
3841
3842         case HCI_EV_NUM_COMP_BLOCKS:
3843                 hci_num_comp_blocks_evt(hdev, skb);
3844                 break;
3845
3846         default:
3847                 BT_DBG("%s event 0x%2.2x", hdev->name, event);
3848                 break;
3849         }
3850
3851         kfree_skb(skb);
3852         hdev->stat.evt_rx++;
3853 }