x86/smpboot: Init apic mapping before usage
[cascardo/linux.git] / 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 "hci_request.h"
34 #include "hci_debugfs.h"
35 #include "a2mp.h"
36 #include "amp.h"
37 #include "smp.h"
38
39 #define ZERO_KEY "\x00\x00\x00\x00\x00\x00\x00\x00" \
40                  "\x00\x00\x00\x00\x00\x00\x00\x00"
41
42 /* Handle HCI Event packets */
43
44 static void hci_cc_inquiry_cancel(struct hci_dev *hdev, struct sk_buff *skb)
45 {
46         __u8 status = *((__u8 *) skb->data);
47
48         BT_DBG("%s status 0x%2.2x", hdev->name, status);
49
50         if (status)
51                 return;
52
53         clear_bit(HCI_INQUIRY, &hdev->flags);
54         smp_mb__after_atomic(); /* wake_up_bit advises about this barrier */
55         wake_up_bit(&hdev->flags, HCI_INQUIRY);
56
57         hci_dev_lock(hdev);
58         /* Set discovery state to stopped if we're not doing LE active
59          * scanning.
60          */
61         if (!hci_dev_test_flag(hdev, HCI_LE_SCAN) ||
62             hdev->le_scan_type != LE_SCAN_ACTIVE)
63                 hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
64         hci_dev_unlock(hdev);
65
66         hci_conn_check_pending(hdev);
67 }
68
69 static void hci_cc_periodic_inq(struct hci_dev *hdev, struct sk_buff *skb)
70 {
71         __u8 status = *((__u8 *) skb->data);
72
73         BT_DBG("%s status 0x%2.2x", hdev->name, status);
74
75         if (status)
76                 return;
77
78         hci_dev_set_flag(hdev, HCI_PERIODIC_INQ);
79 }
80
81 static void hci_cc_exit_periodic_inq(struct hci_dev *hdev, struct sk_buff *skb)
82 {
83         __u8 status = *((__u8 *) skb->data);
84
85         BT_DBG("%s status 0x%2.2x", hdev->name, status);
86
87         if (status)
88                 return;
89
90         hci_dev_clear_flag(hdev, HCI_PERIODIC_INQ);
91
92         hci_conn_check_pending(hdev);
93 }
94
95 static void hci_cc_remote_name_req_cancel(struct hci_dev *hdev,
96                                           struct sk_buff *skb)
97 {
98         BT_DBG("%s", hdev->name);
99 }
100
101 static void hci_cc_role_discovery(struct hci_dev *hdev, struct sk_buff *skb)
102 {
103         struct hci_rp_role_discovery *rp = (void *) skb->data;
104         struct hci_conn *conn;
105
106         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
107
108         if (rp->status)
109                 return;
110
111         hci_dev_lock(hdev);
112
113         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
114         if (conn)
115                 conn->role = rp->role;
116
117         hci_dev_unlock(hdev);
118 }
119
120 static void hci_cc_read_link_policy(struct hci_dev *hdev, struct sk_buff *skb)
121 {
122         struct hci_rp_read_link_policy *rp = (void *) skb->data;
123         struct hci_conn *conn;
124
125         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
126
127         if (rp->status)
128                 return;
129
130         hci_dev_lock(hdev);
131
132         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
133         if (conn)
134                 conn->link_policy = __le16_to_cpu(rp->policy);
135
136         hci_dev_unlock(hdev);
137 }
138
139 static void hci_cc_write_link_policy(struct hci_dev *hdev, struct sk_buff *skb)
140 {
141         struct hci_rp_write_link_policy *rp = (void *) skb->data;
142         struct hci_conn *conn;
143         void *sent;
144
145         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
146
147         if (rp->status)
148                 return;
149
150         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_LINK_POLICY);
151         if (!sent)
152                 return;
153
154         hci_dev_lock(hdev);
155
156         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
157         if (conn)
158                 conn->link_policy = get_unaligned_le16(sent + 2);
159
160         hci_dev_unlock(hdev);
161 }
162
163 static void hci_cc_read_def_link_policy(struct hci_dev *hdev,
164                                         struct sk_buff *skb)
165 {
166         struct hci_rp_read_def_link_policy *rp = (void *) skb->data;
167
168         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
169
170         if (rp->status)
171                 return;
172
173         hdev->link_policy = __le16_to_cpu(rp->policy);
174 }
175
176 static void hci_cc_write_def_link_policy(struct hci_dev *hdev,
177                                          struct sk_buff *skb)
178 {
179         __u8 status = *((__u8 *) skb->data);
180         void *sent;
181
182         BT_DBG("%s status 0x%2.2x", hdev->name, status);
183
184         if (status)
185                 return;
186
187         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_DEF_LINK_POLICY);
188         if (!sent)
189                 return;
190
191         hdev->link_policy = get_unaligned_le16(sent);
192 }
193
194 static void hci_cc_reset(struct hci_dev *hdev, struct sk_buff *skb)
195 {
196         __u8 status = *((__u8 *) skb->data);
197
198         BT_DBG("%s status 0x%2.2x", hdev->name, status);
199
200         clear_bit(HCI_RESET, &hdev->flags);
201
202         if (status)
203                 return;
204
205         /* Reset all non-persistent flags */
206         hci_dev_clear_volatile_flags(hdev);
207
208         hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
209
210         hdev->inq_tx_power = HCI_TX_POWER_INVALID;
211         hdev->adv_tx_power = HCI_TX_POWER_INVALID;
212
213         memset(hdev->adv_data, 0, sizeof(hdev->adv_data));
214         hdev->adv_data_len = 0;
215
216         memset(hdev->scan_rsp_data, 0, sizeof(hdev->scan_rsp_data));
217         hdev->scan_rsp_data_len = 0;
218
219         hdev->le_scan_type = LE_SCAN_PASSIVE;
220
221         hdev->ssp_debug_mode = 0;
222
223         hci_bdaddr_list_clear(&hdev->le_white_list);
224 }
225
226 static void hci_cc_read_stored_link_key(struct hci_dev *hdev,
227                                         struct sk_buff *skb)
228 {
229         struct hci_rp_read_stored_link_key *rp = (void *)skb->data;
230         struct hci_cp_read_stored_link_key *sent;
231
232         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
233
234         sent = hci_sent_cmd_data(hdev, HCI_OP_READ_STORED_LINK_KEY);
235         if (!sent)
236                 return;
237
238         if (!rp->status && sent->read_all == 0x01) {
239                 hdev->stored_max_keys = rp->max_keys;
240                 hdev->stored_num_keys = rp->num_keys;
241         }
242 }
243
244 static void hci_cc_delete_stored_link_key(struct hci_dev *hdev,
245                                           struct sk_buff *skb)
246 {
247         struct hci_rp_delete_stored_link_key *rp = (void *)skb->data;
248
249         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
250
251         if (rp->status)
252                 return;
253
254         if (rp->num_keys <= hdev->stored_num_keys)
255                 hdev->stored_num_keys -= rp->num_keys;
256         else
257                 hdev->stored_num_keys = 0;
258 }
259
260 static void hci_cc_write_local_name(struct hci_dev *hdev, struct sk_buff *skb)
261 {
262         __u8 status = *((__u8 *) skb->data);
263         void *sent;
264
265         BT_DBG("%s status 0x%2.2x", hdev->name, status);
266
267         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_LOCAL_NAME);
268         if (!sent)
269                 return;
270
271         hci_dev_lock(hdev);
272
273         if (hci_dev_test_flag(hdev, HCI_MGMT))
274                 mgmt_set_local_name_complete(hdev, sent, status);
275         else if (!status)
276                 memcpy(hdev->dev_name, sent, HCI_MAX_NAME_LENGTH);
277
278         hci_dev_unlock(hdev);
279 }
280
281 static void hci_cc_read_local_name(struct hci_dev *hdev, struct sk_buff *skb)
282 {
283         struct hci_rp_read_local_name *rp = (void *) skb->data;
284
285         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
286
287         if (rp->status)
288                 return;
289
290         if (hci_dev_test_flag(hdev, HCI_SETUP) ||
291             hci_dev_test_flag(hdev, HCI_CONFIG))
292                 memcpy(hdev->dev_name, rp->name, HCI_MAX_NAME_LENGTH);
293 }
294
295 static void hci_cc_write_auth_enable(struct hci_dev *hdev, struct sk_buff *skb)
296 {
297         __u8 status = *((__u8 *) skb->data);
298         void *sent;
299
300         BT_DBG("%s status 0x%2.2x", hdev->name, status);
301
302         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_AUTH_ENABLE);
303         if (!sent)
304                 return;
305
306         hci_dev_lock(hdev);
307
308         if (!status) {
309                 __u8 param = *((__u8 *) sent);
310
311                 if (param == AUTH_ENABLED)
312                         set_bit(HCI_AUTH, &hdev->flags);
313                 else
314                         clear_bit(HCI_AUTH, &hdev->flags);
315         }
316
317         if (hci_dev_test_flag(hdev, HCI_MGMT))
318                 mgmt_auth_enable_complete(hdev, status);
319
320         hci_dev_unlock(hdev);
321 }
322
323 static void hci_cc_write_encrypt_mode(struct hci_dev *hdev, struct sk_buff *skb)
324 {
325         __u8 status = *((__u8 *) skb->data);
326         __u8 param;
327         void *sent;
328
329         BT_DBG("%s status 0x%2.2x", hdev->name, status);
330
331         if (status)
332                 return;
333
334         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_ENCRYPT_MODE);
335         if (!sent)
336                 return;
337
338         param = *((__u8 *) sent);
339
340         if (param)
341                 set_bit(HCI_ENCRYPT, &hdev->flags);
342         else
343                 clear_bit(HCI_ENCRYPT, &hdev->flags);
344 }
345
346 static void hci_cc_write_scan_enable(struct hci_dev *hdev, struct sk_buff *skb)
347 {
348         __u8 status = *((__u8 *) skb->data);
349         __u8 param;
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_SCAN_ENABLE);
355         if (!sent)
356                 return;
357
358         param = *((__u8 *) sent);
359
360         hci_dev_lock(hdev);
361
362         if (status) {
363                 hdev->discov_timeout = 0;
364                 goto done;
365         }
366
367         if (param & SCAN_INQUIRY)
368                 set_bit(HCI_ISCAN, &hdev->flags);
369         else
370                 clear_bit(HCI_ISCAN, &hdev->flags);
371
372         if (param & SCAN_PAGE)
373                 set_bit(HCI_PSCAN, &hdev->flags);
374         else
375                 clear_bit(HCI_PSCAN, &hdev->flags);
376
377 done:
378         hci_dev_unlock(hdev);
379 }
380
381 static void hci_cc_read_class_of_dev(struct hci_dev *hdev, struct sk_buff *skb)
382 {
383         struct hci_rp_read_class_of_dev *rp = (void *) skb->data;
384
385         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
386
387         if (rp->status)
388                 return;
389
390         memcpy(hdev->dev_class, rp->dev_class, 3);
391
392         BT_DBG("%s class 0x%.2x%.2x%.2x", hdev->name,
393                hdev->dev_class[2], hdev->dev_class[1], hdev->dev_class[0]);
394 }
395
396 static void hci_cc_write_class_of_dev(struct hci_dev *hdev, struct sk_buff *skb)
397 {
398         __u8 status = *((__u8 *) skb->data);
399         void *sent;
400
401         BT_DBG("%s status 0x%2.2x", hdev->name, status);
402
403         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_CLASS_OF_DEV);
404         if (!sent)
405                 return;
406
407         hci_dev_lock(hdev);
408
409         if (status == 0)
410                 memcpy(hdev->dev_class, sent, 3);
411
412         if (hci_dev_test_flag(hdev, HCI_MGMT))
413                 mgmt_set_class_of_dev_complete(hdev, sent, status);
414
415         hci_dev_unlock(hdev);
416 }
417
418 static void hci_cc_read_voice_setting(struct hci_dev *hdev, struct sk_buff *skb)
419 {
420         struct hci_rp_read_voice_setting *rp = (void *) skb->data;
421         __u16 setting;
422
423         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
424
425         if (rp->status)
426                 return;
427
428         setting = __le16_to_cpu(rp->voice_setting);
429
430         if (hdev->voice_setting == setting)
431                 return;
432
433         hdev->voice_setting = setting;
434
435         BT_DBG("%s voice setting 0x%4.4x", hdev->name, setting);
436
437         if (hdev->notify)
438                 hdev->notify(hdev, HCI_NOTIFY_VOICE_SETTING);
439 }
440
441 static void hci_cc_write_voice_setting(struct hci_dev *hdev,
442                                        struct sk_buff *skb)
443 {
444         __u8 status = *((__u8 *) skb->data);
445         __u16 setting;
446         void *sent;
447
448         BT_DBG("%s status 0x%2.2x", hdev->name, status);
449
450         if (status)
451                 return;
452
453         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_VOICE_SETTING);
454         if (!sent)
455                 return;
456
457         setting = get_unaligned_le16(sent);
458
459         if (hdev->voice_setting == setting)
460                 return;
461
462         hdev->voice_setting = setting;
463
464         BT_DBG("%s voice setting 0x%4.4x", hdev->name, setting);
465
466         if (hdev->notify)
467                 hdev->notify(hdev, HCI_NOTIFY_VOICE_SETTING);
468 }
469
470 static void hci_cc_read_num_supported_iac(struct hci_dev *hdev,
471                                           struct sk_buff *skb)
472 {
473         struct hci_rp_read_num_supported_iac *rp = (void *) skb->data;
474
475         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
476
477         if (rp->status)
478                 return;
479
480         hdev->num_iac = rp->num_iac;
481
482         BT_DBG("%s num iac %d", hdev->name, hdev->num_iac);
483 }
484
485 static void hci_cc_write_ssp_mode(struct hci_dev *hdev, struct sk_buff *skb)
486 {
487         __u8 status = *((__u8 *) skb->data);
488         struct hci_cp_write_ssp_mode *sent;
489
490         BT_DBG("%s status 0x%2.2x", hdev->name, status);
491
492         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_SSP_MODE);
493         if (!sent)
494                 return;
495
496         hci_dev_lock(hdev);
497
498         if (!status) {
499                 if (sent->mode)
500                         hdev->features[1][0] |= LMP_HOST_SSP;
501                 else
502                         hdev->features[1][0] &= ~LMP_HOST_SSP;
503         }
504
505         if (hci_dev_test_flag(hdev, HCI_MGMT))
506                 mgmt_ssp_enable_complete(hdev, sent->mode, status);
507         else if (!status) {
508                 if (sent->mode)
509                         hci_dev_set_flag(hdev, HCI_SSP_ENABLED);
510                 else
511                         hci_dev_clear_flag(hdev, HCI_SSP_ENABLED);
512         }
513
514         hci_dev_unlock(hdev);
515 }
516
517 static void hci_cc_write_sc_support(struct hci_dev *hdev, struct sk_buff *skb)
518 {
519         u8 status = *((u8 *) skb->data);
520         struct hci_cp_write_sc_support *sent;
521
522         BT_DBG("%s status 0x%2.2x", hdev->name, status);
523
524         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_SC_SUPPORT);
525         if (!sent)
526                 return;
527
528         hci_dev_lock(hdev);
529
530         if (!status) {
531                 if (sent->support)
532                         hdev->features[1][0] |= LMP_HOST_SC;
533                 else
534                         hdev->features[1][0] &= ~LMP_HOST_SC;
535         }
536
537         if (!hci_dev_test_flag(hdev, HCI_MGMT) && !status) {
538                 if (sent->support)
539                         hci_dev_set_flag(hdev, HCI_SC_ENABLED);
540                 else
541                         hci_dev_clear_flag(hdev, HCI_SC_ENABLED);
542         }
543
544         hci_dev_unlock(hdev);
545 }
546
547 static void hci_cc_read_local_version(struct hci_dev *hdev, struct sk_buff *skb)
548 {
549         struct hci_rp_read_local_version *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 (hci_dev_test_flag(hdev, HCI_SETUP) ||
557             hci_dev_test_flag(hdev, HCI_CONFIG)) {
558                 hdev->hci_ver = rp->hci_ver;
559                 hdev->hci_rev = __le16_to_cpu(rp->hci_rev);
560                 hdev->lmp_ver = rp->lmp_ver;
561                 hdev->manufacturer = __le16_to_cpu(rp->manufacturer);
562                 hdev->lmp_subver = __le16_to_cpu(rp->lmp_subver);
563         }
564 }
565
566 static void hci_cc_read_local_commands(struct hci_dev *hdev,
567                                        struct sk_buff *skb)
568 {
569         struct hci_rp_read_local_commands *rp = (void *) skb->data;
570
571         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
572
573         if (rp->status)
574                 return;
575
576         if (hci_dev_test_flag(hdev, HCI_SETUP) ||
577             hci_dev_test_flag(hdev, HCI_CONFIG))
578                 memcpy(hdev->commands, rp->commands, sizeof(hdev->commands));
579 }
580
581 static void hci_cc_read_local_features(struct hci_dev *hdev,
582                                        struct sk_buff *skb)
583 {
584         struct hci_rp_read_local_features *rp = (void *) skb->data;
585
586         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
587
588         if (rp->status)
589                 return;
590
591         memcpy(hdev->features, rp->features, 8);
592
593         /* Adjust default settings according to features
594          * supported by device. */
595
596         if (hdev->features[0][0] & LMP_3SLOT)
597                 hdev->pkt_type |= (HCI_DM3 | HCI_DH3);
598
599         if (hdev->features[0][0] & LMP_5SLOT)
600                 hdev->pkt_type |= (HCI_DM5 | HCI_DH5);
601
602         if (hdev->features[0][1] & LMP_HV2) {
603                 hdev->pkt_type  |= (HCI_HV2);
604                 hdev->esco_type |= (ESCO_HV2);
605         }
606
607         if (hdev->features[0][1] & LMP_HV3) {
608                 hdev->pkt_type  |= (HCI_HV3);
609                 hdev->esco_type |= (ESCO_HV3);
610         }
611
612         if (lmp_esco_capable(hdev))
613                 hdev->esco_type |= (ESCO_EV3);
614
615         if (hdev->features[0][4] & LMP_EV4)
616                 hdev->esco_type |= (ESCO_EV4);
617
618         if (hdev->features[0][4] & LMP_EV5)
619                 hdev->esco_type |= (ESCO_EV5);
620
621         if (hdev->features[0][5] & LMP_EDR_ESCO_2M)
622                 hdev->esco_type |= (ESCO_2EV3);
623
624         if (hdev->features[0][5] & LMP_EDR_ESCO_3M)
625                 hdev->esco_type |= (ESCO_3EV3);
626
627         if (hdev->features[0][5] & LMP_EDR_3S_ESCO)
628                 hdev->esco_type |= (ESCO_2EV5 | ESCO_3EV5);
629 }
630
631 static void hci_cc_read_local_ext_features(struct hci_dev *hdev,
632                                            struct sk_buff *skb)
633 {
634         struct hci_rp_read_local_ext_features *rp = (void *) skb->data;
635
636         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
637
638         if (rp->status)
639                 return;
640
641         if (hdev->max_page < rp->max_page)
642                 hdev->max_page = rp->max_page;
643
644         if (rp->page < HCI_MAX_PAGES)
645                 memcpy(hdev->features[rp->page], rp->features, 8);
646 }
647
648 static void hci_cc_read_flow_control_mode(struct hci_dev *hdev,
649                                           struct sk_buff *skb)
650 {
651         struct hci_rp_read_flow_control_mode *rp = (void *) skb->data;
652
653         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
654
655         if (rp->status)
656                 return;
657
658         hdev->flow_ctl_mode = rp->mode;
659 }
660
661 static void hci_cc_read_buffer_size(struct hci_dev *hdev, struct sk_buff *skb)
662 {
663         struct hci_rp_read_buffer_size *rp = (void *) skb->data;
664
665         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
666
667         if (rp->status)
668                 return;
669
670         hdev->acl_mtu  = __le16_to_cpu(rp->acl_mtu);
671         hdev->sco_mtu  = rp->sco_mtu;
672         hdev->acl_pkts = __le16_to_cpu(rp->acl_max_pkt);
673         hdev->sco_pkts = __le16_to_cpu(rp->sco_max_pkt);
674
675         if (test_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE, &hdev->quirks)) {
676                 hdev->sco_mtu  = 64;
677                 hdev->sco_pkts = 8;
678         }
679
680         hdev->acl_cnt = hdev->acl_pkts;
681         hdev->sco_cnt = hdev->sco_pkts;
682
683         BT_DBG("%s acl mtu %d:%d sco mtu %d:%d", hdev->name, hdev->acl_mtu,
684                hdev->acl_pkts, hdev->sco_mtu, hdev->sco_pkts);
685 }
686
687 static void hci_cc_read_bd_addr(struct hci_dev *hdev, struct sk_buff *skb)
688 {
689         struct hci_rp_read_bd_addr *rp = (void *) skb->data;
690
691         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
692
693         if (rp->status)
694                 return;
695
696         if (test_bit(HCI_INIT, &hdev->flags))
697                 bacpy(&hdev->bdaddr, &rp->bdaddr);
698
699         if (hci_dev_test_flag(hdev, HCI_SETUP))
700                 bacpy(&hdev->setup_addr, &rp->bdaddr);
701 }
702
703 static void hci_cc_read_page_scan_activity(struct hci_dev *hdev,
704                                            struct sk_buff *skb)
705 {
706         struct hci_rp_read_page_scan_activity *rp = (void *) skb->data;
707
708         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
709
710         if (rp->status)
711                 return;
712
713         if (test_bit(HCI_INIT, &hdev->flags)) {
714                 hdev->page_scan_interval = __le16_to_cpu(rp->interval);
715                 hdev->page_scan_window = __le16_to_cpu(rp->window);
716         }
717 }
718
719 static void hci_cc_write_page_scan_activity(struct hci_dev *hdev,
720                                             struct sk_buff *skb)
721 {
722         u8 status = *((u8 *) skb->data);
723         struct hci_cp_write_page_scan_activity *sent;
724
725         BT_DBG("%s status 0x%2.2x", hdev->name, status);
726
727         if (status)
728                 return;
729
730         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_PAGE_SCAN_ACTIVITY);
731         if (!sent)
732                 return;
733
734         hdev->page_scan_interval = __le16_to_cpu(sent->interval);
735         hdev->page_scan_window = __le16_to_cpu(sent->window);
736 }
737
738 static void hci_cc_read_page_scan_type(struct hci_dev *hdev,
739                                            struct sk_buff *skb)
740 {
741         struct hci_rp_read_page_scan_type *rp = (void *) skb->data;
742
743         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
744
745         if (rp->status)
746                 return;
747
748         if (test_bit(HCI_INIT, &hdev->flags))
749                 hdev->page_scan_type = rp->type;
750 }
751
752 static void hci_cc_write_page_scan_type(struct hci_dev *hdev,
753                                         struct sk_buff *skb)
754 {
755         u8 status = *((u8 *) skb->data);
756         u8 *type;
757
758         BT_DBG("%s status 0x%2.2x", hdev->name, status);
759
760         if (status)
761                 return;
762
763         type = hci_sent_cmd_data(hdev, HCI_OP_WRITE_PAGE_SCAN_TYPE);
764         if (type)
765                 hdev->page_scan_type = *type;
766 }
767
768 static void hci_cc_read_data_block_size(struct hci_dev *hdev,
769                                         struct sk_buff *skb)
770 {
771         struct hci_rp_read_data_block_size *rp = (void *) skb->data;
772
773         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
774
775         if (rp->status)
776                 return;
777
778         hdev->block_mtu = __le16_to_cpu(rp->max_acl_len);
779         hdev->block_len = __le16_to_cpu(rp->block_len);
780         hdev->num_blocks = __le16_to_cpu(rp->num_blocks);
781
782         hdev->block_cnt = hdev->num_blocks;
783
784         BT_DBG("%s blk mtu %d cnt %d len %d", hdev->name, hdev->block_mtu,
785                hdev->block_cnt, hdev->block_len);
786 }
787
788 static void hci_cc_read_clock(struct hci_dev *hdev, struct sk_buff *skb)
789 {
790         struct hci_rp_read_clock *rp = (void *) skb->data;
791         struct hci_cp_read_clock *cp;
792         struct hci_conn *conn;
793
794         BT_DBG("%s", hdev->name);
795
796         if (skb->len < sizeof(*rp))
797                 return;
798
799         if (rp->status)
800                 return;
801
802         hci_dev_lock(hdev);
803
804         cp = hci_sent_cmd_data(hdev, HCI_OP_READ_CLOCK);
805         if (!cp)
806                 goto unlock;
807
808         if (cp->which == 0x00) {
809                 hdev->clock = le32_to_cpu(rp->clock);
810                 goto unlock;
811         }
812
813         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
814         if (conn) {
815                 conn->clock = le32_to_cpu(rp->clock);
816                 conn->clock_accuracy = le16_to_cpu(rp->accuracy);
817         }
818
819 unlock:
820         hci_dev_unlock(hdev);
821 }
822
823 static void hci_cc_read_local_amp_info(struct hci_dev *hdev,
824                                        struct sk_buff *skb)
825 {
826         struct hci_rp_read_local_amp_info *rp = (void *) skb->data;
827
828         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
829
830         if (rp->status)
831                 return;
832
833         hdev->amp_status = rp->amp_status;
834         hdev->amp_total_bw = __le32_to_cpu(rp->total_bw);
835         hdev->amp_max_bw = __le32_to_cpu(rp->max_bw);
836         hdev->amp_min_latency = __le32_to_cpu(rp->min_latency);
837         hdev->amp_max_pdu = __le32_to_cpu(rp->max_pdu);
838         hdev->amp_type = rp->amp_type;
839         hdev->amp_pal_cap = __le16_to_cpu(rp->pal_cap);
840         hdev->amp_assoc_size = __le16_to_cpu(rp->max_assoc_size);
841         hdev->amp_be_flush_to = __le32_to_cpu(rp->be_flush_to);
842         hdev->amp_max_flush_to = __le32_to_cpu(rp->max_flush_to);
843 }
844
845 static void hci_cc_read_inq_rsp_tx_power(struct hci_dev *hdev,
846                                          struct sk_buff *skb)
847 {
848         struct hci_rp_read_inq_rsp_tx_power *rp = (void *) skb->data;
849
850         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
851
852         if (rp->status)
853                 return;
854
855         hdev->inq_tx_power = rp->tx_power;
856 }
857
858 static void hci_cc_pin_code_reply(struct hci_dev *hdev, struct sk_buff *skb)
859 {
860         struct hci_rp_pin_code_reply *rp = (void *) skb->data;
861         struct hci_cp_pin_code_reply *cp;
862         struct hci_conn *conn;
863
864         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
865
866         hci_dev_lock(hdev);
867
868         if (hci_dev_test_flag(hdev, HCI_MGMT))
869                 mgmt_pin_code_reply_complete(hdev, &rp->bdaddr, rp->status);
870
871         if (rp->status)
872                 goto unlock;
873
874         cp = hci_sent_cmd_data(hdev, HCI_OP_PIN_CODE_REPLY);
875         if (!cp)
876                 goto unlock;
877
878         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
879         if (conn)
880                 conn->pin_length = cp->pin_len;
881
882 unlock:
883         hci_dev_unlock(hdev);
884 }
885
886 static void hci_cc_pin_code_neg_reply(struct hci_dev *hdev, struct sk_buff *skb)
887 {
888         struct hci_rp_pin_code_neg_reply *rp = (void *) skb->data;
889
890         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
891
892         hci_dev_lock(hdev);
893
894         if (hci_dev_test_flag(hdev, HCI_MGMT))
895                 mgmt_pin_code_neg_reply_complete(hdev, &rp->bdaddr,
896                                                  rp->status);
897
898         hci_dev_unlock(hdev);
899 }
900
901 static void hci_cc_le_read_buffer_size(struct hci_dev *hdev,
902                                        struct sk_buff *skb)
903 {
904         struct hci_rp_le_read_buffer_size *rp = (void *) skb->data;
905
906         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
907
908         if (rp->status)
909                 return;
910
911         hdev->le_mtu = __le16_to_cpu(rp->le_mtu);
912         hdev->le_pkts = rp->le_max_pkt;
913
914         hdev->le_cnt = hdev->le_pkts;
915
916         BT_DBG("%s le mtu %d:%d", hdev->name, hdev->le_mtu, hdev->le_pkts);
917 }
918
919 static void hci_cc_le_read_local_features(struct hci_dev *hdev,
920                                           struct sk_buff *skb)
921 {
922         struct hci_rp_le_read_local_features *rp = (void *) skb->data;
923
924         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
925
926         if (rp->status)
927                 return;
928
929         memcpy(hdev->le_features, rp->features, 8);
930 }
931
932 static void hci_cc_le_read_adv_tx_power(struct hci_dev *hdev,
933                                         struct sk_buff *skb)
934 {
935         struct hci_rp_le_read_adv_tx_power *rp = (void *) skb->data;
936
937         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
938
939         if (rp->status)
940                 return;
941
942         hdev->adv_tx_power = rp->tx_power;
943 }
944
945 static void hci_cc_user_confirm_reply(struct hci_dev *hdev, struct sk_buff *skb)
946 {
947         struct hci_rp_user_confirm_reply *rp = (void *) skb->data;
948
949         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
950
951         hci_dev_lock(hdev);
952
953         if (hci_dev_test_flag(hdev, HCI_MGMT))
954                 mgmt_user_confirm_reply_complete(hdev, &rp->bdaddr, ACL_LINK, 0,
955                                                  rp->status);
956
957         hci_dev_unlock(hdev);
958 }
959
960 static void hci_cc_user_confirm_neg_reply(struct hci_dev *hdev,
961                                           struct sk_buff *skb)
962 {
963         struct hci_rp_user_confirm_reply *rp = (void *) skb->data;
964
965         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
966
967         hci_dev_lock(hdev);
968
969         if (hci_dev_test_flag(hdev, HCI_MGMT))
970                 mgmt_user_confirm_neg_reply_complete(hdev, &rp->bdaddr,
971                                                      ACL_LINK, 0, rp->status);
972
973         hci_dev_unlock(hdev);
974 }
975
976 static void hci_cc_user_passkey_reply(struct hci_dev *hdev, struct sk_buff *skb)
977 {
978         struct hci_rp_user_confirm_reply *rp = (void *) skb->data;
979
980         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
981
982         hci_dev_lock(hdev);
983
984         if (hci_dev_test_flag(hdev, HCI_MGMT))
985                 mgmt_user_passkey_reply_complete(hdev, &rp->bdaddr, ACL_LINK,
986                                                  0, rp->status);
987
988         hci_dev_unlock(hdev);
989 }
990
991 static void hci_cc_user_passkey_neg_reply(struct hci_dev *hdev,
992                                           struct sk_buff *skb)
993 {
994         struct hci_rp_user_confirm_reply *rp = (void *) skb->data;
995
996         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
997
998         hci_dev_lock(hdev);
999
1000         if (hci_dev_test_flag(hdev, HCI_MGMT))
1001                 mgmt_user_passkey_neg_reply_complete(hdev, &rp->bdaddr,
1002                                                      ACL_LINK, 0, rp->status);
1003
1004         hci_dev_unlock(hdev);
1005 }
1006
1007 static void hci_cc_read_local_oob_data(struct hci_dev *hdev,
1008                                        struct sk_buff *skb)
1009 {
1010         struct hci_rp_read_local_oob_data *rp = (void *) skb->data;
1011
1012         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1013 }
1014
1015 static void hci_cc_read_local_oob_ext_data(struct hci_dev *hdev,
1016                                            struct sk_buff *skb)
1017 {
1018         struct hci_rp_read_local_oob_ext_data *rp = (void *) skb->data;
1019
1020         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1021 }
1022
1023 static void hci_cc_le_set_random_addr(struct hci_dev *hdev, struct sk_buff *skb)
1024 {
1025         __u8 status = *((__u8 *) skb->data);
1026         bdaddr_t *sent;
1027
1028         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1029
1030         if (status)
1031                 return;
1032
1033         sent = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_RANDOM_ADDR);
1034         if (!sent)
1035                 return;
1036
1037         hci_dev_lock(hdev);
1038
1039         bacpy(&hdev->random_addr, sent);
1040
1041         hci_dev_unlock(hdev);
1042 }
1043
1044 static void hci_cc_le_set_adv_enable(struct hci_dev *hdev, struct sk_buff *skb)
1045 {
1046         __u8 *sent, status = *((__u8 *) skb->data);
1047
1048         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1049
1050         if (status)
1051                 return;
1052
1053         sent = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_ADV_ENABLE);
1054         if (!sent)
1055                 return;
1056
1057         hci_dev_lock(hdev);
1058
1059         /* If we're doing connection initiation as peripheral. Set a
1060          * timeout in case something goes wrong.
1061          */
1062         if (*sent) {
1063                 struct hci_conn *conn;
1064
1065                 hci_dev_set_flag(hdev, HCI_LE_ADV);
1066
1067                 conn = hci_lookup_le_connect(hdev);
1068                 if (conn)
1069                         queue_delayed_work(hdev->workqueue,
1070                                            &conn->le_conn_timeout,
1071                                            conn->conn_timeout);
1072         } else {
1073                 hci_dev_clear_flag(hdev, HCI_LE_ADV);
1074         }
1075
1076         hci_dev_unlock(hdev);
1077 }
1078
1079 static void hci_cc_le_set_scan_param(struct hci_dev *hdev, struct sk_buff *skb)
1080 {
1081         struct hci_cp_le_set_scan_param *cp;
1082         __u8 status = *((__u8 *) skb->data);
1083
1084         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1085
1086         if (status)
1087                 return;
1088
1089         cp = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_SCAN_PARAM);
1090         if (!cp)
1091                 return;
1092
1093         hci_dev_lock(hdev);
1094
1095         hdev->le_scan_type = cp->type;
1096
1097         hci_dev_unlock(hdev);
1098 }
1099
1100 static bool has_pending_adv_report(struct hci_dev *hdev)
1101 {
1102         struct discovery_state *d = &hdev->discovery;
1103
1104         return bacmp(&d->last_adv_addr, BDADDR_ANY);
1105 }
1106
1107 static void clear_pending_adv_report(struct hci_dev *hdev)
1108 {
1109         struct discovery_state *d = &hdev->discovery;
1110
1111         bacpy(&d->last_adv_addr, BDADDR_ANY);
1112         d->last_adv_data_len = 0;
1113 }
1114
1115 static void store_pending_adv_report(struct hci_dev *hdev, bdaddr_t *bdaddr,
1116                                      u8 bdaddr_type, s8 rssi, u32 flags,
1117                                      u8 *data, u8 len)
1118 {
1119         struct discovery_state *d = &hdev->discovery;
1120
1121         bacpy(&d->last_adv_addr, bdaddr);
1122         d->last_adv_addr_type = bdaddr_type;
1123         d->last_adv_rssi = rssi;
1124         d->last_adv_flags = flags;
1125         memcpy(d->last_adv_data, data, len);
1126         d->last_adv_data_len = len;
1127 }
1128
1129 static void hci_cc_le_set_scan_enable(struct hci_dev *hdev,
1130                                       struct sk_buff *skb)
1131 {
1132         struct hci_cp_le_set_scan_enable *cp;
1133         __u8 status = *((__u8 *) skb->data);
1134
1135         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1136
1137         if (status)
1138                 return;
1139
1140         cp = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_SCAN_ENABLE);
1141         if (!cp)
1142                 return;
1143
1144         hci_dev_lock(hdev);
1145
1146         switch (cp->enable) {
1147         case LE_SCAN_ENABLE:
1148                 hci_dev_set_flag(hdev, HCI_LE_SCAN);
1149                 if (hdev->le_scan_type == LE_SCAN_ACTIVE)
1150                         clear_pending_adv_report(hdev);
1151                 break;
1152
1153         case LE_SCAN_DISABLE:
1154                 /* We do this here instead of when setting DISCOVERY_STOPPED
1155                  * since the latter would potentially require waiting for
1156                  * inquiry to stop too.
1157                  */
1158                 if (has_pending_adv_report(hdev)) {
1159                         struct discovery_state *d = &hdev->discovery;
1160
1161                         mgmt_device_found(hdev, &d->last_adv_addr, LE_LINK,
1162                                           d->last_adv_addr_type, NULL,
1163                                           d->last_adv_rssi, d->last_adv_flags,
1164                                           d->last_adv_data,
1165                                           d->last_adv_data_len, NULL, 0);
1166                 }
1167
1168                 /* Cancel this timer so that we don't try to disable scanning
1169                  * when it's already disabled.
1170                  */
1171                 cancel_delayed_work(&hdev->le_scan_disable);
1172
1173                 hci_dev_clear_flag(hdev, HCI_LE_SCAN);
1174
1175                 /* The HCI_LE_SCAN_INTERRUPTED flag indicates that we
1176                  * interrupted scanning due to a connect request. Mark
1177                  * therefore discovery as stopped. If this was not
1178                  * because of a connect request advertising might have
1179                  * been disabled because of active scanning, so
1180                  * re-enable it again if necessary.
1181                  */
1182                 if (hci_dev_test_and_clear_flag(hdev, HCI_LE_SCAN_INTERRUPTED))
1183                         hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
1184                 else if (!hci_dev_test_flag(hdev, HCI_LE_ADV) &&
1185                          hdev->discovery.state == DISCOVERY_FINDING)
1186                         hci_req_reenable_advertising(hdev);
1187
1188                 break;
1189
1190         default:
1191                 BT_ERR("Used reserved LE_Scan_Enable param %d", cp->enable);
1192                 break;
1193         }
1194
1195         hci_dev_unlock(hdev);
1196 }
1197
1198 static void hci_cc_le_read_white_list_size(struct hci_dev *hdev,
1199                                            struct sk_buff *skb)
1200 {
1201         struct hci_rp_le_read_white_list_size *rp = (void *) skb->data;
1202
1203         BT_DBG("%s status 0x%2.2x size %u", hdev->name, rp->status, rp->size);
1204
1205         if (rp->status)
1206                 return;
1207
1208         hdev->le_white_list_size = rp->size;
1209 }
1210
1211 static void hci_cc_le_clear_white_list(struct hci_dev *hdev,
1212                                        struct sk_buff *skb)
1213 {
1214         __u8 status = *((__u8 *) skb->data);
1215
1216         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1217
1218         if (status)
1219                 return;
1220
1221         hci_bdaddr_list_clear(&hdev->le_white_list);
1222 }
1223
1224 static void hci_cc_le_add_to_white_list(struct hci_dev *hdev,
1225                                         struct sk_buff *skb)
1226 {
1227         struct hci_cp_le_add_to_white_list *sent;
1228         __u8 status = *((__u8 *) skb->data);
1229
1230         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1231
1232         if (status)
1233                 return;
1234
1235         sent = hci_sent_cmd_data(hdev, HCI_OP_LE_ADD_TO_WHITE_LIST);
1236         if (!sent)
1237                 return;
1238
1239         hci_bdaddr_list_add(&hdev->le_white_list, &sent->bdaddr,
1240                            sent->bdaddr_type);
1241 }
1242
1243 static void hci_cc_le_del_from_white_list(struct hci_dev *hdev,
1244                                           struct sk_buff *skb)
1245 {
1246         struct hci_cp_le_del_from_white_list *sent;
1247         __u8 status = *((__u8 *) skb->data);
1248
1249         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1250
1251         if (status)
1252                 return;
1253
1254         sent = hci_sent_cmd_data(hdev, HCI_OP_LE_DEL_FROM_WHITE_LIST);
1255         if (!sent)
1256                 return;
1257
1258         hci_bdaddr_list_del(&hdev->le_white_list, &sent->bdaddr,
1259                             sent->bdaddr_type);
1260 }
1261
1262 static void hci_cc_le_read_supported_states(struct hci_dev *hdev,
1263                                             struct sk_buff *skb)
1264 {
1265         struct hci_rp_le_read_supported_states *rp = (void *) skb->data;
1266
1267         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1268
1269         if (rp->status)
1270                 return;
1271
1272         memcpy(hdev->le_states, rp->le_states, 8);
1273 }
1274
1275 static void hci_cc_le_read_def_data_len(struct hci_dev *hdev,
1276                                         struct sk_buff *skb)
1277 {
1278         struct hci_rp_le_read_def_data_len *rp = (void *) skb->data;
1279
1280         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1281
1282         if (rp->status)
1283                 return;
1284
1285         hdev->le_def_tx_len = le16_to_cpu(rp->tx_len);
1286         hdev->le_def_tx_time = le16_to_cpu(rp->tx_time);
1287 }
1288
1289 static void hci_cc_le_write_def_data_len(struct hci_dev *hdev,
1290                                          struct sk_buff *skb)
1291 {
1292         struct hci_cp_le_write_def_data_len *sent;
1293         __u8 status = *((__u8 *) skb->data);
1294
1295         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1296
1297         if (status)
1298                 return;
1299
1300         sent = hci_sent_cmd_data(hdev, HCI_OP_LE_WRITE_DEF_DATA_LEN);
1301         if (!sent)
1302                 return;
1303
1304         hdev->le_def_tx_len = le16_to_cpu(sent->tx_len);
1305         hdev->le_def_tx_time = le16_to_cpu(sent->tx_time);
1306 }
1307
1308 static void hci_cc_le_read_max_data_len(struct hci_dev *hdev,
1309                                         struct sk_buff *skb)
1310 {
1311         struct hci_rp_le_read_max_data_len *rp = (void *) skb->data;
1312
1313         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1314
1315         if (rp->status)
1316                 return;
1317
1318         hdev->le_max_tx_len = le16_to_cpu(rp->tx_len);
1319         hdev->le_max_tx_time = le16_to_cpu(rp->tx_time);
1320         hdev->le_max_rx_len = le16_to_cpu(rp->rx_len);
1321         hdev->le_max_rx_time = le16_to_cpu(rp->rx_time);
1322 }
1323
1324 static void hci_cc_write_le_host_supported(struct hci_dev *hdev,
1325                                            struct sk_buff *skb)
1326 {
1327         struct hci_cp_write_le_host_supported *sent;
1328         __u8 status = *((__u8 *) skb->data);
1329
1330         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1331
1332         if (status)
1333                 return;
1334
1335         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_LE_HOST_SUPPORTED);
1336         if (!sent)
1337                 return;
1338
1339         hci_dev_lock(hdev);
1340
1341         if (sent->le) {
1342                 hdev->features[1][0] |= LMP_HOST_LE;
1343                 hci_dev_set_flag(hdev, HCI_LE_ENABLED);
1344         } else {
1345                 hdev->features[1][0] &= ~LMP_HOST_LE;
1346                 hci_dev_clear_flag(hdev, HCI_LE_ENABLED);
1347                 hci_dev_clear_flag(hdev, HCI_ADVERTISING);
1348         }
1349
1350         if (sent->simul)
1351                 hdev->features[1][0] |= LMP_HOST_LE_BREDR;
1352         else
1353                 hdev->features[1][0] &= ~LMP_HOST_LE_BREDR;
1354
1355         hci_dev_unlock(hdev);
1356 }
1357
1358 static void hci_cc_set_adv_param(struct hci_dev *hdev, struct sk_buff *skb)
1359 {
1360         struct hci_cp_le_set_adv_param *cp;
1361         u8 status = *((u8 *) skb->data);
1362
1363         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1364
1365         if (status)
1366                 return;
1367
1368         cp = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_ADV_PARAM);
1369         if (!cp)
1370                 return;
1371
1372         hci_dev_lock(hdev);
1373         hdev->adv_addr_type = cp->own_address_type;
1374         hci_dev_unlock(hdev);
1375 }
1376
1377 static void hci_cc_read_rssi(struct hci_dev *hdev, struct sk_buff *skb)
1378 {
1379         struct hci_rp_read_rssi *rp = (void *) skb->data;
1380         struct hci_conn *conn;
1381
1382         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1383
1384         if (rp->status)
1385                 return;
1386
1387         hci_dev_lock(hdev);
1388
1389         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
1390         if (conn)
1391                 conn->rssi = rp->rssi;
1392
1393         hci_dev_unlock(hdev);
1394 }
1395
1396 static void hci_cc_read_tx_power(struct hci_dev *hdev, struct sk_buff *skb)
1397 {
1398         struct hci_cp_read_tx_power *sent;
1399         struct hci_rp_read_tx_power *rp = (void *) skb->data;
1400         struct hci_conn *conn;
1401
1402         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1403
1404         if (rp->status)
1405                 return;
1406
1407         sent = hci_sent_cmd_data(hdev, HCI_OP_READ_TX_POWER);
1408         if (!sent)
1409                 return;
1410
1411         hci_dev_lock(hdev);
1412
1413         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
1414         if (!conn)
1415                 goto unlock;
1416
1417         switch (sent->type) {
1418         case 0x00:
1419                 conn->tx_power = rp->tx_power;
1420                 break;
1421         case 0x01:
1422                 conn->max_tx_power = rp->tx_power;
1423                 break;
1424         }
1425
1426 unlock:
1427         hci_dev_unlock(hdev);
1428 }
1429
1430 static void hci_cc_write_ssp_debug_mode(struct hci_dev *hdev, struct sk_buff *skb)
1431 {
1432         u8 status = *((u8 *) skb->data);
1433         u8 *mode;
1434
1435         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1436
1437         if (status)
1438                 return;
1439
1440         mode = hci_sent_cmd_data(hdev, HCI_OP_WRITE_SSP_DEBUG_MODE);
1441         if (mode)
1442                 hdev->ssp_debug_mode = *mode;
1443 }
1444
1445 static void hci_cs_inquiry(struct hci_dev *hdev, __u8 status)
1446 {
1447         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1448
1449         if (status) {
1450                 hci_conn_check_pending(hdev);
1451                 return;
1452         }
1453
1454         set_bit(HCI_INQUIRY, &hdev->flags);
1455 }
1456
1457 static void hci_cs_create_conn(struct hci_dev *hdev, __u8 status)
1458 {
1459         struct hci_cp_create_conn *cp;
1460         struct hci_conn *conn;
1461
1462         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1463
1464         cp = hci_sent_cmd_data(hdev, HCI_OP_CREATE_CONN);
1465         if (!cp)
1466                 return;
1467
1468         hci_dev_lock(hdev);
1469
1470         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
1471
1472         BT_DBG("%s bdaddr %pMR hcon %p", hdev->name, &cp->bdaddr, conn);
1473
1474         if (status) {
1475                 if (conn && conn->state == BT_CONNECT) {
1476                         if (status != 0x0c || conn->attempt > 2) {
1477                                 conn->state = BT_CLOSED;
1478                                 hci_connect_cfm(conn, status);
1479                                 hci_conn_del(conn);
1480                         } else
1481                                 conn->state = BT_CONNECT2;
1482                 }
1483         } else {
1484                 if (!conn) {
1485                         conn = hci_conn_add(hdev, ACL_LINK, &cp->bdaddr,
1486                                             HCI_ROLE_MASTER);
1487                         if (!conn)
1488                                 BT_ERR("No memory for new connection");
1489                 }
1490         }
1491
1492         hci_dev_unlock(hdev);
1493 }
1494
1495 static void hci_cs_add_sco(struct hci_dev *hdev, __u8 status)
1496 {
1497         struct hci_cp_add_sco *cp;
1498         struct hci_conn *acl, *sco;
1499         __u16 handle;
1500
1501         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1502
1503         if (!status)
1504                 return;
1505
1506         cp = hci_sent_cmd_data(hdev, HCI_OP_ADD_SCO);
1507         if (!cp)
1508                 return;
1509
1510         handle = __le16_to_cpu(cp->handle);
1511
1512         BT_DBG("%s handle 0x%4.4x", hdev->name, handle);
1513
1514         hci_dev_lock(hdev);
1515
1516         acl = hci_conn_hash_lookup_handle(hdev, handle);
1517         if (acl) {
1518                 sco = acl->link;
1519                 if (sco) {
1520                         sco->state = BT_CLOSED;
1521
1522                         hci_connect_cfm(sco, status);
1523                         hci_conn_del(sco);
1524                 }
1525         }
1526
1527         hci_dev_unlock(hdev);
1528 }
1529
1530 static void hci_cs_auth_requested(struct hci_dev *hdev, __u8 status)
1531 {
1532         struct hci_cp_auth_requested *cp;
1533         struct hci_conn *conn;
1534
1535         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1536
1537         if (!status)
1538                 return;
1539
1540         cp = hci_sent_cmd_data(hdev, HCI_OP_AUTH_REQUESTED);
1541         if (!cp)
1542                 return;
1543
1544         hci_dev_lock(hdev);
1545
1546         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1547         if (conn) {
1548                 if (conn->state == BT_CONFIG) {
1549                         hci_connect_cfm(conn, status);
1550                         hci_conn_drop(conn);
1551                 }
1552         }
1553
1554         hci_dev_unlock(hdev);
1555 }
1556
1557 static void hci_cs_set_conn_encrypt(struct hci_dev *hdev, __u8 status)
1558 {
1559         struct hci_cp_set_conn_encrypt *cp;
1560         struct hci_conn *conn;
1561
1562         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1563
1564         if (!status)
1565                 return;
1566
1567         cp = hci_sent_cmd_data(hdev, HCI_OP_SET_CONN_ENCRYPT);
1568         if (!cp)
1569                 return;
1570
1571         hci_dev_lock(hdev);
1572
1573         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1574         if (conn) {
1575                 if (conn->state == BT_CONFIG) {
1576                         hci_connect_cfm(conn, status);
1577                         hci_conn_drop(conn);
1578                 }
1579         }
1580
1581         hci_dev_unlock(hdev);
1582 }
1583
1584 static int hci_outgoing_auth_needed(struct hci_dev *hdev,
1585                                     struct hci_conn *conn)
1586 {
1587         if (conn->state != BT_CONFIG || !conn->out)
1588                 return 0;
1589
1590         if (conn->pending_sec_level == BT_SECURITY_SDP)
1591                 return 0;
1592
1593         /* Only request authentication for SSP connections or non-SSP
1594          * devices with sec_level MEDIUM or HIGH or if MITM protection
1595          * is requested.
1596          */
1597         if (!hci_conn_ssp_enabled(conn) && !(conn->auth_type & 0x01) &&
1598             conn->pending_sec_level != BT_SECURITY_FIPS &&
1599             conn->pending_sec_level != BT_SECURITY_HIGH &&
1600             conn->pending_sec_level != BT_SECURITY_MEDIUM)
1601                 return 0;
1602
1603         return 1;
1604 }
1605
1606 static int hci_resolve_name(struct hci_dev *hdev,
1607                                    struct inquiry_entry *e)
1608 {
1609         struct hci_cp_remote_name_req cp;
1610
1611         memset(&cp, 0, sizeof(cp));
1612
1613         bacpy(&cp.bdaddr, &e->data.bdaddr);
1614         cp.pscan_rep_mode = e->data.pscan_rep_mode;
1615         cp.pscan_mode = e->data.pscan_mode;
1616         cp.clock_offset = e->data.clock_offset;
1617
1618         return hci_send_cmd(hdev, HCI_OP_REMOTE_NAME_REQ, sizeof(cp), &cp);
1619 }
1620
1621 static bool hci_resolve_next_name(struct hci_dev *hdev)
1622 {
1623         struct discovery_state *discov = &hdev->discovery;
1624         struct inquiry_entry *e;
1625
1626         if (list_empty(&discov->resolve))
1627                 return false;
1628
1629         e = hci_inquiry_cache_lookup_resolve(hdev, BDADDR_ANY, NAME_NEEDED);
1630         if (!e)
1631                 return false;
1632
1633         if (hci_resolve_name(hdev, e) == 0) {
1634                 e->name_state = NAME_PENDING;
1635                 return true;
1636         }
1637
1638         return false;
1639 }
1640
1641 static void hci_check_pending_name(struct hci_dev *hdev, struct hci_conn *conn,
1642                                    bdaddr_t *bdaddr, u8 *name, u8 name_len)
1643 {
1644         struct discovery_state *discov = &hdev->discovery;
1645         struct inquiry_entry *e;
1646
1647         /* Update the mgmt connected state if necessary. Be careful with
1648          * conn objects that exist but are not (yet) connected however.
1649          * Only those in BT_CONFIG or BT_CONNECTED states can be
1650          * considered connected.
1651          */
1652         if (conn &&
1653             (conn->state == BT_CONFIG || conn->state == BT_CONNECTED) &&
1654             !test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags))
1655                 mgmt_device_connected(hdev, conn, 0, name, name_len);
1656
1657         if (discov->state == DISCOVERY_STOPPED)
1658                 return;
1659
1660         if (discov->state == DISCOVERY_STOPPING)
1661                 goto discov_complete;
1662
1663         if (discov->state != DISCOVERY_RESOLVING)
1664                 return;
1665
1666         e = hci_inquiry_cache_lookup_resolve(hdev, bdaddr, NAME_PENDING);
1667         /* If the device was not found in a list of found devices names of which
1668          * are pending. there is no need to continue resolving a next name as it
1669          * will be done upon receiving another Remote Name Request Complete
1670          * Event */
1671         if (!e)
1672                 return;
1673
1674         list_del(&e->list);
1675         if (name) {
1676                 e->name_state = NAME_KNOWN;
1677                 mgmt_remote_name(hdev, bdaddr, ACL_LINK, 0x00,
1678                                  e->data.rssi, name, name_len);
1679         } else {
1680                 e->name_state = NAME_NOT_KNOWN;
1681         }
1682
1683         if (hci_resolve_next_name(hdev))
1684                 return;
1685
1686 discov_complete:
1687         hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
1688 }
1689
1690 static void hci_cs_remote_name_req(struct hci_dev *hdev, __u8 status)
1691 {
1692         struct hci_cp_remote_name_req *cp;
1693         struct hci_conn *conn;
1694
1695         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1696
1697         /* If successful wait for the name req complete event before
1698          * checking for the need to do authentication */
1699         if (!status)
1700                 return;
1701
1702         cp = hci_sent_cmd_data(hdev, HCI_OP_REMOTE_NAME_REQ);
1703         if (!cp)
1704                 return;
1705
1706         hci_dev_lock(hdev);
1707
1708         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
1709
1710         if (hci_dev_test_flag(hdev, HCI_MGMT))
1711                 hci_check_pending_name(hdev, conn, &cp->bdaddr, NULL, 0);
1712
1713         if (!conn)
1714                 goto unlock;
1715
1716         if (!hci_outgoing_auth_needed(hdev, conn))
1717                 goto unlock;
1718
1719         if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
1720                 struct hci_cp_auth_requested auth_cp;
1721
1722                 set_bit(HCI_CONN_AUTH_INITIATOR, &conn->flags);
1723
1724                 auth_cp.handle = __cpu_to_le16(conn->handle);
1725                 hci_send_cmd(hdev, HCI_OP_AUTH_REQUESTED,
1726                              sizeof(auth_cp), &auth_cp);
1727         }
1728
1729 unlock:
1730         hci_dev_unlock(hdev);
1731 }
1732
1733 static void hci_cs_read_remote_features(struct hci_dev *hdev, __u8 status)
1734 {
1735         struct hci_cp_read_remote_features *cp;
1736         struct hci_conn *conn;
1737
1738         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1739
1740         if (!status)
1741                 return;
1742
1743         cp = hci_sent_cmd_data(hdev, HCI_OP_READ_REMOTE_FEATURES);
1744         if (!cp)
1745                 return;
1746
1747         hci_dev_lock(hdev);
1748
1749         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1750         if (conn) {
1751                 if (conn->state == BT_CONFIG) {
1752                         hci_connect_cfm(conn, status);
1753                         hci_conn_drop(conn);
1754                 }
1755         }
1756
1757         hci_dev_unlock(hdev);
1758 }
1759
1760 static void hci_cs_read_remote_ext_features(struct hci_dev *hdev, __u8 status)
1761 {
1762         struct hci_cp_read_remote_ext_features *cp;
1763         struct hci_conn *conn;
1764
1765         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1766
1767         if (!status)
1768                 return;
1769
1770         cp = hci_sent_cmd_data(hdev, HCI_OP_READ_REMOTE_EXT_FEATURES);
1771         if (!cp)
1772                 return;
1773
1774         hci_dev_lock(hdev);
1775
1776         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1777         if (conn) {
1778                 if (conn->state == BT_CONFIG) {
1779                         hci_connect_cfm(conn, status);
1780                         hci_conn_drop(conn);
1781                 }
1782         }
1783
1784         hci_dev_unlock(hdev);
1785 }
1786
1787 static void hci_cs_setup_sync_conn(struct hci_dev *hdev, __u8 status)
1788 {
1789         struct hci_cp_setup_sync_conn *cp;
1790         struct hci_conn *acl, *sco;
1791         __u16 handle;
1792
1793         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1794
1795         if (!status)
1796                 return;
1797
1798         cp = hci_sent_cmd_data(hdev, HCI_OP_SETUP_SYNC_CONN);
1799         if (!cp)
1800                 return;
1801
1802         handle = __le16_to_cpu(cp->handle);
1803
1804         BT_DBG("%s handle 0x%4.4x", hdev->name, handle);
1805
1806         hci_dev_lock(hdev);
1807
1808         acl = hci_conn_hash_lookup_handle(hdev, handle);
1809         if (acl) {
1810                 sco = acl->link;
1811                 if (sco) {
1812                         sco->state = BT_CLOSED;
1813
1814                         hci_connect_cfm(sco, status);
1815                         hci_conn_del(sco);
1816                 }
1817         }
1818
1819         hci_dev_unlock(hdev);
1820 }
1821
1822 static void hci_cs_sniff_mode(struct hci_dev *hdev, __u8 status)
1823 {
1824         struct hci_cp_sniff_mode *cp;
1825         struct hci_conn *conn;
1826
1827         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1828
1829         if (!status)
1830                 return;
1831
1832         cp = hci_sent_cmd_data(hdev, HCI_OP_SNIFF_MODE);
1833         if (!cp)
1834                 return;
1835
1836         hci_dev_lock(hdev);
1837
1838         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1839         if (conn) {
1840                 clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags);
1841
1842                 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->flags))
1843                         hci_sco_setup(conn, status);
1844         }
1845
1846         hci_dev_unlock(hdev);
1847 }
1848
1849 static void hci_cs_exit_sniff_mode(struct hci_dev *hdev, __u8 status)
1850 {
1851         struct hci_cp_exit_sniff_mode *cp;
1852         struct hci_conn *conn;
1853
1854         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1855
1856         if (!status)
1857                 return;
1858
1859         cp = hci_sent_cmd_data(hdev, HCI_OP_EXIT_SNIFF_MODE);
1860         if (!cp)
1861                 return;
1862
1863         hci_dev_lock(hdev);
1864
1865         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1866         if (conn) {
1867                 clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags);
1868
1869                 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->flags))
1870                         hci_sco_setup(conn, status);
1871         }
1872
1873         hci_dev_unlock(hdev);
1874 }
1875
1876 static void hci_cs_disconnect(struct hci_dev *hdev, u8 status)
1877 {
1878         struct hci_cp_disconnect *cp;
1879         struct hci_conn *conn;
1880
1881         if (!status)
1882                 return;
1883
1884         cp = hci_sent_cmd_data(hdev, HCI_OP_DISCONNECT);
1885         if (!cp)
1886                 return;
1887
1888         hci_dev_lock(hdev);
1889
1890         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1891         if (conn)
1892                 mgmt_disconnect_failed(hdev, &conn->dst, conn->type,
1893                                        conn->dst_type, status);
1894
1895         hci_dev_unlock(hdev);
1896 }
1897
1898 static void hci_cs_le_create_conn(struct hci_dev *hdev, u8 status)
1899 {
1900         struct hci_cp_le_create_conn *cp;
1901         struct hci_conn *conn;
1902
1903         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1904
1905         /* All connection failure handling is taken care of by the
1906          * hci_le_conn_failed function which is triggered by the HCI
1907          * request completion callbacks used for connecting.
1908          */
1909         if (status)
1910                 return;
1911
1912         cp = hci_sent_cmd_data(hdev, HCI_OP_LE_CREATE_CONN);
1913         if (!cp)
1914                 return;
1915
1916         hci_dev_lock(hdev);
1917
1918         conn = hci_conn_hash_lookup_le(hdev, &cp->peer_addr,
1919                                        cp->peer_addr_type);
1920         if (!conn)
1921                 goto unlock;
1922
1923         /* Store the initiator and responder address information which
1924          * is needed for SMP. These values will not change during the
1925          * lifetime of the connection.
1926          */
1927         conn->init_addr_type = cp->own_address_type;
1928         if (cp->own_address_type == ADDR_LE_DEV_RANDOM)
1929                 bacpy(&conn->init_addr, &hdev->random_addr);
1930         else
1931                 bacpy(&conn->init_addr, &hdev->bdaddr);
1932
1933         conn->resp_addr_type = cp->peer_addr_type;
1934         bacpy(&conn->resp_addr, &cp->peer_addr);
1935
1936         /* We don't want the connection attempt to stick around
1937          * indefinitely since LE doesn't have a page timeout concept
1938          * like BR/EDR. Set a timer for any connection that doesn't use
1939          * the white list for connecting.
1940          */
1941         if (cp->filter_policy == HCI_LE_USE_PEER_ADDR)
1942                 queue_delayed_work(conn->hdev->workqueue,
1943                                    &conn->le_conn_timeout,
1944                                    conn->conn_timeout);
1945
1946 unlock:
1947         hci_dev_unlock(hdev);
1948 }
1949
1950 static void hci_cs_le_read_remote_features(struct hci_dev *hdev, u8 status)
1951 {
1952         struct hci_cp_le_read_remote_features *cp;
1953         struct hci_conn *conn;
1954
1955         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1956
1957         if (!status)
1958                 return;
1959
1960         cp = hci_sent_cmd_data(hdev, HCI_OP_LE_READ_REMOTE_FEATURES);
1961         if (!cp)
1962                 return;
1963
1964         hci_dev_lock(hdev);
1965
1966         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1967         if (conn) {
1968                 if (conn->state == BT_CONFIG) {
1969                         hci_connect_cfm(conn, status);
1970                         hci_conn_drop(conn);
1971                 }
1972         }
1973
1974         hci_dev_unlock(hdev);
1975 }
1976
1977 static void hci_cs_le_start_enc(struct hci_dev *hdev, u8 status)
1978 {
1979         struct hci_cp_le_start_enc *cp;
1980         struct hci_conn *conn;
1981
1982         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1983
1984         if (!status)
1985                 return;
1986
1987         hci_dev_lock(hdev);
1988
1989         cp = hci_sent_cmd_data(hdev, HCI_OP_LE_START_ENC);
1990         if (!cp)
1991                 goto unlock;
1992
1993         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1994         if (!conn)
1995                 goto unlock;
1996
1997         if (conn->state != BT_CONNECTED)
1998                 goto unlock;
1999
2000         hci_disconnect(conn, HCI_ERROR_AUTH_FAILURE);
2001         hci_conn_drop(conn);
2002
2003 unlock:
2004         hci_dev_unlock(hdev);
2005 }
2006
2007 static void hci_cs_switch_role(struct hci_dev *hdev, u8 status)
2008 {
2009         struct hci_cp_switch_role *cp;
2010         struct hci_conn *conn;
2011
2012         BT_DBG("%s status 0x%2.2x", hdev->name, status);
2013
2014         if (!status)
2015                 return;
2016
2017         cp = hci_sent_cmd_data(hdev, HCI_OP_SWITCH_ROLE);
2018         if (!cp)
2019                 return;
2020
2021         hci_dev_lock(hdev);
2022
2023         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
2024         if (conn)
2025                 clear_bit(HCI_CONN_RSWITCH_PEND, &conn->flags);
2026
2027         hci_dev_unlock(hdev);
2028 }
2029
2030 static void hci_inquiry_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
2031 {
2032         __u8 status = *((__u8 *) skb->data);
2033         struct discovery_state *discov = &hdev->discovery;
2034         struct inquiry_entry *e;
2035
2036         BT_DBG("%s status 0x%2.2x", hdev->name, status);
2037
2038         hci_conn_check_pending(hdev);
2039
2040         if (!test_and_clear_bit(HCI_INQUIRY, &hdev->flags))
2041                 return;
2042
2043         smp_mb__after_atomic(); /* wake_up_bit advises about this barrier */
2044         wake_up_bit(&hdev->flags, HCI_INQUIRY);
2045
2046         if (!hci_dev_test_flag(hdev, HCI_MGMT))
2047                 return;
2048
2049         hci_dev_lock(hdev);
2050
2051         if (discov->state != DISCOVERY_FINDING)
2052                 goto unlock;
2053
2054         if (list_empty(&discov->resolve)) {
2055                 /* When BR/EDR inquiry is active and no LE scanning is in
2056                  * progress, then change discovery state to indicate completion.
2057                  *
2058                  * When running LE scanning and BR/EDR inquiry simultaneously
2059                  * and the LE scan already finished, then change the discovery
2060                  * state to indicate completion.
2061                  */
2062                 if (!hci_dev_test_flag(hdev, HCI_LE_SCAN) ||
2063                     !test_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY, &hdev->quirks))
2064                         hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
2065                 goto unlock;
2066         }
2067
2068         e = hci_inquiry_cache_lookup_resolve(hdev, BDADDR_ANY, NAME_NEEDED);
2069         if (e && hci_resolve_name(hdev, e) == 0) {
2070                 e->name_state = NAME_PENDING;
2071                 hci_discovery_set_state(hdev, DISCOVERY_RESOLVING);
2072         } else {
2073                 /* When BR/EDR inquiry is active and no LE scanning is in
2074                  * progress, then change discovery state to indicate completion.
2075                  *
2076                  * When running LE scanning and BR/EDR inquiry simultaneously
2077                  * and the LE scan already finished, then change the discovery
2078                  * state to indicate completion.
2079                  */
2080                 if (!hci_dev_test_flag(hdev, HCI_LE_SCAN) ||
2081                     !test_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY, &hdev->quirks))
2082                         hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
2083         }
2084
2085 unlock:
2086         hci_dev_unlock(hdev);
2087 }
2088
2089 static void hci_inquiry_result_evt(struct hci_dev *hdev, struct sk_buff *skb)
2090 {
2091         struct inquiry_data data;
2092         struct inquiry_info *info = (void *) (skb->data + 1);
2093         int num_rsp = *((__u8 *) skb->data);
2094
2095         BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
2096
2097         if (!num_rsp)
2098                 return;
2099
2100         if (hci_dev_test_flag(hdev, HCI_PERIODIC_INQ))
2101                 return;
2102
2103         hci_dev_lock(hdev);
2104
2105         for (; num_rsp; num_rsp--, info++) {
2106                 u32 flags;
2107
2108                 bacpy(&data.bdaddr, &info->bdaddr);
2109                 data.pscan_rep_mode     = info->pscan_rep_mode;
2110                 data.pscan_period_mode  = info->pscan_period_mode;
2111                 data.pscan_mode         = info->pscan_mode;
2112                 memcpy(data.dev_class, info->dev_class, 3);
2113                 data.clock_offset       = info->clock_offset;
2114                 data.rssi               = HCI_RSSI_INVALID;
2115                 data.ssp_mode           = 0x00;
2116
2117                 flags = hci_inquiry_cache_update(hdev, &data, false);
2118
2119                 mgmt_device_found(hdev, &info->bdaddr, ACL_LINK, 0x00,
2120                                   info->dev_class, HCI_RSSI_INVALID,
2121                                   flags, NULL, 0, NULL, 0);
2122         }
2123
2124         hci_dev_unlock(hdev);
2125 }
2126
2127 static void hci_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
2128 {
2129         struct hci_ev_conn_complete *ev = (void *) skb->data;
2130         struct hci_conn *conn;
2131
2132         BT_DBG("%s", hdev->name);
2133
2134         hci_dev_lock(hdev);
2135
2136         conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
2137         if (!conn) {
2138                 if (ev->link_type != SCO_LINK)
2139                         goto unlock;
2140
2141                 conn = hci_conn_hash_lookup_ba(hdev, ESCO_LINK, &ev->bdaddr);
2142                 if (!conn)
2143                         goto unlock;
2144
2145                 conn->type = SCO_LINK;
2146         }
2147
2148         if (!ev->status) {
2149                 conn->handle = __le16_to_cpu(ev->handle);
2150
2151                 if (conn->type == ACL_LINK) {
2152                         conn->state = BT_CONFIG;
2153                         hci_conn_hold(conn);
2154
2155                         if (!conn->out && !hci_conn_ssp_enabled(conn) &&
2156                             !hci_find_link_key(hdev, &ev->bdaddr))
2157                                 conn->disc_timeout = HCI_PAIRING_TIMEOUT;
2158                         else
2159                                 conn->disc_timeout = HCI_DISCONN_TIMEOUT;
2160                 } else
2161                         conn->state = BT_CONNECTED;
2162
2163                 hci_debugfs_create_conn(conn);
2164                 hci_conn_add_sysfs(conn);
2165
2166                 if (test_bit(HCI_AUTH, &hdev->flags))
2167                         set_bit(HCI_CONN_AUTH, &conn->flags);
2168
2169                 if (test_bit(HCI_ENCRYPT, &hdev->flags))
2170                         set_bit(HCI_CONN_ENCRYPT, &conn->flags);
2171
2172                 /* Get remote features */
2173                 if (conn->type == ACL_LINK) {
2174                         struct hci_cp_read_remote_features cp;
2175                         cp.handle = ev->handle;
2176                         hci_send_cmd(hdev, HCI_OP_READ_REMOTE_FEATURES,
2177                                      sizeof(cp), &cp);
2178
2179                         hci_req_update_scan(hdev);
2180                 }
2181
2182                 /* Set packet type for incoming connection */
2183                 if (!conn->out && hdev->hci_ver < BLUETOOTH_VER_2_0) {
2184                         struct hci_cp_change_conn_ptype cp;
2185                         cp.handle = ev->handle;
2186                         cp.pkt_type = cpu_to_le16(conn->pkt_type);
2187                         hci_send_cmd(hdev, HCI_OP_CHANGE_CONN_PTYPE, sizeof(cp),
2188                                      &cp);
2189                 }
2190         } else {
2191                 conn->state = BT_CLOSED;
2192                 if (conn->type == ACL_LINK)
2193                         mgmt_connect_failed(hdev, &conn->dst, conn->type,
2194                                             conn->dst_type, ev->status);
2195         }
2196
2197         if (conn->type == ACL_LINK)
2198                 hci_sco_setup(conn, ev->status);
2199
2200         if (ev->status) {
2201                 hci_connect_cfm(conn, ev->status);
2202                 hci_conn_del(conn);
2203         } else if (ev->link_type != ACL_LINK)
2204                 hci_connect_cfm(conn, ev->status);
2205
2206 unlock:
2207         hci_dev_unlock(hdev);
2208
2209         hci_conn_check_pending(hdev);
2210 }
2211
2212 static void hci_reject_conn(struct hci_dev *hdev, bdaddr_t *bdaddr)
2213 {
2214         struct hci_cp_reject_conn_req cp;
2215
2216         bacpy(&cp.bdaddr, bdaddr);
2217         cp.reason = HCI_ERROR_REJ_BAD_ADDR;
2218         hci_send_cmd(hdev, HCI_OP_REJECT_CONN_REQ, sizeof(cp), &cp);
2219 }
2220
2221 static void hci_conn_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
2222 {
2223         struct hci_ev_conn_request *ev = (void *) skb->data;
2224         int mask = hdev->link_mode;
2225         struct inquiry_entry *ie;
2226         struct hci_conn *conn;
2227         __u8 flags = 0;
2228
2229         BT_DBG("%s bdaddr %pMR type 0x%x", hdev->name, &ev->bdaddr,
2230                ev->link_type);
2231
2232         mask |= hci_proto_connect_ind(hdev, &ev->bdaddr, ev->link_type,
2233                                       &flags);
2234
2235         if (!(mask & HCI_LM_ACCEPT)) {
2236                 hci_reject_conn(hdev, &ev->bdaddr);
2237                 return;
2238         }
2239
2240         if (hci_bdaddr_list_lookup(&hdev->blacklist, &ev->bdaddr,
2241                                    BDADDR_BREDR)) {
2242                 hci_reject_conn(hdev, &ev->bdaddr);
2243                 return;
2244         }
2245
2246         /* Require HCI_CONNECTABLE or a whitelist entry to accept the
2247          * connection. These features are only touched through mgmt so
2248          * only do the checks if HCI_MGMT is set.
2249          */
2250         if (hci_dev_test_flag(hdev, HCI_MGMT) &&
2251             !hci_dev_test_flag(hdev, HCI_CONNECTABLE) &&
2252             !hci_bdaddr_list_lookup(&hdev->whitelist, &ev->bdaddr,
2253                                     BDADDR_BREDR)) {
2254                     hci_reject_conn(hdev, &ev->bdaddr);
2255                     return;
2256         }
2257
2258         /* Connection accepted */
2259
2260         hci_dev_lock(hdev);
2261
2262         ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr);
2263         if (ie)
2264                 memcpy(ie->data.dev_class, ev->dev_class, 3);
2265
2266         conn = hci_conn_hash_lookup_ba(hdev, ev->link_type,
2267                         &ev->bdaddr);
2268         if (!conn) {
2269                 conn = hci_conn_add(hdev, ev->link_type, &ev->bdaddr,
2270                                     HCI_ROLE_SLAVE);
2271                 if (!conn) {
2272                         BT_ERR("No memory for new connection");
2273                         hci_dev_unlock(hdev);
2274                         return;
2275                 }
2276         }
2277
2278         memcpy(conn->dev_class, ev->dev_class, 3);
2279
2280         hci_dev_unlock(hdev);
2281
2282         if (ev->link_type == ACL_LINK ||
2283             (!(flags & HCI_PROTO_DEFER) && !lmp_esco_capable(hdev))) {
2284                 struct hci_cp_accept_conn_req cp;
2285                 conn->state = BT_CONNECT;
2286
2287                 bacpy(&cp.bdaddr, &ev->bdaddr);
2288
2289                 if (lmp_rswitch_capable(hdev) && (mask & HCI_LM_MASTER))
2290                         cp.role = 0x00; /* Become master */
2291                 else
2292                         cp.role = 0x01; /* Remain slave */
2293
2294                 hci_send_cmd(hdev, HCI_OP_ACCEPT_CONN_REQ, sizeof(cp), &cp);
2295         } else if (!(flags & HCI_PROTO_DEFER)) {
2296                 struct hci_cp_accept_sync_conn_req cp;
2297                 conn->state = BT_CONNECT;
2298
2299                 bacpy(&cp.bdaddr, &ev->bdaddr);
2300                 cp.pkt_type = cpu_to_le16(conn->pkt_type);
2301
2302                 cp.tx_bandwidth   = cpu_to_le32(0x00001f40);
2303                 cp.rx_bandwidth   = cpu_to_le32(0x00001f40);
2304                 cp.max_latency    = cpu_to_le16(0xffff);
2305                 cp.content_format = cpu_to_le16(hdev->voice_setting);
2306                 cp.retrans_effort = 0xff;
2307
2308                 hci_send_cmd(hdev, HCI_OP_ACCEPT_SYNC_CONN_REQ, sizeof(cp),
2309                              &cp);
2310         } else {
2311                 conn->state = BT_CONNECT2;
2312                 hci_connect_cfm(conn, 0);
2313         }
2314 }
2315
2316 static u8 hci_to_mgmt_reason(u8 err)
2317 {
2318         switch (err) {
2319         case HCI_ERROR_CONNECTION_TIMEOUT:
2320                 return MGMT_DEV_DISCONN_TIMEOUT;
2321         case HCI_ERROR_REMOTE_USER_TERM:
2322         case HCI_ERROR_REMOTE_LOW_RESOURCES:
2323         case HCI_ERROR_REMOTE_POWER_OFF:
2324                 return MGMT_DEV_DISCONN_REMOTE;
2325         case HCI_ERROR_LOCAL_HOST_TERM:
2326                 return MGMT_DEV_DISCONN_LOCAL_HOST;
2327         default:
2328                 return MGMT_DEV_DISCONN_UNKNOWN;
2329         }
2330 }
2331
2332 static void hci_disconn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
2333 {
2334         struct hci_ev_disconn_complete *ev = (void *) skb->data;
2335         u8 reason;
2336         struct hci_conn_params *params;
2337         struct hci_conn *conn;
2338         bool mgmt_connected;
2339         u8 type;
2340
2341         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2342
2343         hci_dev_lock(hdev);
2344
2345         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2346         if (!conn)
2347                 goto unlock;
2348
2349         if (ev->status) {
2350                 mgmt_disconnect_failed(hdev, &conn->dst, conn->type,
2351                                        conn->dst_type, ev->status);
2352                 goto unlock;
2353         }
2354
2355         conn->state = BT_CLOSED;
2356
2357         mgmt_connected = test_and_clear_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags);
2358
2359         if (test_bit(HCI_CONN_AUTH_FAILURE, &conn->flags))
2360                 reason = MGMT_DEV_DISCONN_AUTH_FAILURE;
2361         else
2362                 reason = hci_to_mgmt_reason(ev->reason);
2363
2364         mgmt_device_disconnected(hdev, &conn->dst, conn->type, conn->dst_type,
2365                                 reason, mgmt_connected);
2366
2367         if (conn->type == ACL_LINK) {
2368                 if (test_bit(HCI_CONN_FLUSH_KEY, &conn->flags))
2369                         hci_remove_link_key(hdev, &conn->dst);
2370
2371                 hci_req_update_scan(hdev);
2372         }
2373
2374         params = hci_conn_params_lookup(hdev, &conn->dst, conn->dst_type);
2375         if (params) {
2376                 switch (params->auto_connect) {
2377                 case HCI_AUTO_CONN_LINK_LOSS:
2378                         if (ev->reason != HCI_ERROR_CONNECTION_TIMEOUT)
2379                                 break;
2380                         /* Fall through */
2381
2382                 case HCI_AUTO_CONN_DIRECT:
2383                 case HCI_AUTO_CONN_ALWAYS:
2384                         list_del_init(&params->action);
2385                         list_add(&params->action, &hdev->pend_le_conns);
2386                         hci_update_background_scan(hdev);
2387                         break;
2388
2389                 default:
2390                         break;
2391                 }
2392         }
2393
2394         type = conn->type;
2395
2396         hci_disconn_cfm(conn, ev->reason);
2397         hci_conn_del(conn);
2398
2399         /* Re-enable advertising if necessary, since it might
2400          * have been disabled by the connection. From the
2401          * HCI_LE_Set_Advertise_Enable command description in
2402          * the core specification (v4.0):
2403          * "The Controller shall continue advertising until the Host
2404          * issues an LE_Set_Advertise_Enable command with
2405          * Advertising_Enable set to 0x00 (Advertising is disabled)
2406          * or until a connection is created or until the Advertising
2407          * is timed out due to Directed Advertising."
2408          */
2409         if (type == LE_LINK)
2410                 hci_req_reenable_advertising(hdev);
2411
2412 unlock:
2413         hci_dev_unlock(hdev);
2414 }
2415
2416 static void hci_auth_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
2417 {
2418         struct hci_ev_auth_complete *ev = (void *) skb->data;
2419         struct hci_conn *conn;
2420
2421         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2422
2423         hci_dev_lock(hdev);
2424
2425         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2426         if (!conn)
2427                 goto unlock;
2428
2429         if (!ev->status) {
2430                 clear_bit(HCI_CONN_AUTH_FAILURE, &conn->flags);
2431
2432                 if (!hci_conn_ssp_enabled(conn) &&
2433                     test_bit(HCI_CONN_REAUTH_PEND, &conn->flags)) {
2434                         BT_INFO("re-auth of legacy device is not possible.");
2435                 } else {
2436                         set_bit(HCI_CONN_AUTH, &conn->flags);
2437                         conn->sec_level = conn->pending_sec_level;
2438                 }
2439         } else {
2440                 if (ev->status == HCI_ERROR_PIN_OR_KEY_MISSING)
2441                         set_bit(HCI_CONN_AUTH_FAILURE, &conn->flags);
2442
2443                 mgmt_auth_failed(conn, ev->status);
2444         }
2445
2446         clear_bit(HCI_CONN_AUTH_PEND, &conn->flags);
2447         clear_bit(HCI_CONN_REAUTH_PEND, &conn->flags);
2448
2449         if (conn->state == BT_CONFIG) {
2450                 if (!ev->status && hci_conn_ssp_enabled(conn)) {
2451                         struct hci_cp_set_conn_encrypt cp;
2452                         cp.handle  = ev->handle;
2453                         cp.encrypt = 0x01;
2454                         hci_send_cmd(hdev, HCI_OP_SET_CONN_ENCRYPT, sizeof(cp),
2455                                      &cp);
2456                 } else {
2457                         conn->state = BT_CONNECTED;
2458                         hci_connect_cfm(conn, ev->status);
2459                         hci_conn_drop(conn);
2460                 }
2461         } else {
2462                 hci_auth_cfm(conn, ev->status);
2463
2464                 hci_conn_hold(conn);
2465                 conn->disc_timeout = HCI_DISCONN_TIMEOUT;
2466                 hci_conn_drop(conn);
2467         }
2468
2469         if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags)) {
2470                 if (!ev->status) {
2471                         struct hci_cp_set_conn_encrypt cp;
2472                         cp.handle  = ev->handle;
2473                         cp.encrypt = 0x01;
2474                         hci_send_cmd(hdev, HCI_OP_SET_CONN_ENCRYPT, sizeof(cp),
2475                                      &cp);
2476                 } else {
2477                         clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
2478                         hci_encrypt_cfm(conn, ev->status, 0x00);
2479                 }
2480         }
2481
2482 unlock:
2483         hci_dev_unlock(hdev);
2484 }
2485
2486 static void hci_remote_name_evt(struct hci_dev *hdev, struct sk_buff *skb)
2487 {
2488         struct hci_ev_remote_name *ev = (void *) skb->data;
2489         struct hci_conn *conn;
2490
2491         BT_DBG("%s", hdev->name);
2492
2493         hci_conn_check_pending(hdev);
2494
2495         hci_dev_lock(hdev);
2496
2497         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
2498
2499         if (!hci_dev_test_flag(hdev, HCI_MGMT))
2500                 goto check_auth;
2501
2502         if (ev->status == 0)
2503                 hci_check_pending_name(hdev, conn, &ev->bdaddr, ev->name,
2504                                        strnlen(ev->name, HCI_MAX_NAME_LENGTH));
2505         else
2506                 hci_check_pending_name(hdev, conn, &ev->bdaddr, NULL, 0);
2507
2508 check_auth:
2509         if (!conn)
2510                 goto unlock;
2511
2512         if (!hci_outgoing_auth_needed(hdev, conn))
2513                 goto unlock;
2514
2515         if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
2516                 struct hci_cp_auth_requested cp;
2517
2518                 set_bit(HCI_CONN_AUTH_INITIATOR, &conn->flags);
2519
2520                 cp.handle = __cpu_to_le16(conn->handle);
2521                 hci_send_cmd(hdev, HCI_OP_AUTH_REQUESTED, sizeof(cp), &cp);
2522         }
2523
2524 unlock:
2525         hci_dev_unlock(hdev);
2526 }
2527
2528 static void read_enc_key_size_complete(struct hci_dev *hdev, u8 status,
2529                                        u16 opcode, struct sk_buff *skb)
2530 {
2531         const struct hci_rp_read_enc_key_size *rp;
2532         struct hci_conn *conn;
2533         u16 handle;
2534
2535         BT_DBG("%s status 0x%02x", hdev->name, status);
2536
2537         if (!skb || skb->len < sizeof(*rp)) {
2538                 BT_ERR("%s invalid HCI Read Encryption Key Size response",
2539                        hdev->name);
2540                 return;
2541         }
2542
2543         rp = (void *)skb->data;
2544         handle = le16_to_cpu(rp->handle);
2545
2546         hci_dev_lock(hdev);
2547
2548         conn = hci_conn_hash_lookup_handle(hdev, handle);
2549         if (!conn)
2550                 goto unlock;
2551
2552         /* If we fail to read the encryption key size, assume maximum
2553          * (which is the same we do also when this HCI command isn't
2554          * supported.
2555          */
2556         if (rp->status) {
2557                 BT_ERR("%s failed to read key size for handle %u", hdev->name,
2558                        handle);
2559                 conn->enc_key_size = HCI_LINK_KEY_SIZE;
2560         } else {
2561                 conn->enc_key_size = rp->key_size;
2562         }
2563
2564         if (conn->state == BT_CONFIG) {
2565                 conn->state = BT_CONNECTED;
2566                 hci_connect_cfm(conn, 0);
2567                 hci_conn_drop(conn);
2568         } else {
2569                 u8 encrypt;
2570
2571                 if (!test_bit(HCI_CONN_ENCRYPT, &conn->flags))
2572                         encrypt = 0x00;
2573                 else if (test_bit(HCI_CONN_AES_CCM, &conn->flags))
2574                         encrypt = 0x02;
2575                 else
2576                         encrypt = 0x01;
2577
2578                 hci_encrypt_cfm(conn, 0, encrypt);
2579         }
2580
2581 unlock:
2582         hci_dev_unlock(hdev);
2583 }
2584
2585 static void hci_encrypt_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
2586 {
2587         struct hci_ev_encrypt_change *ev = (void *) skb->data;
2588         struct hci_conn *conn;
2589
2590         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2591
2592         hci_dev_lock(hdev);
2593
2594         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2595         if (!conn)
2596                 goto unlock;
2597
2598         if (!ev->status) {
2599                 if (ev->encrypt) {
2600                         /* Encryption implies authentication */
2601                         set_bit(HCI_CONN_AUTH, &conn->flags);
2602                         set_bit(HCI_CONN_ENCRYPT, &conn->flags);
2603                         conn->sec_level = conn->pending_sec_level;
2604
2605                         /* P-256 authentication key implies FIPS */
2606                         if (conn->key_type == HCI_LK_AUTH_COMBINATION_P256)
2607                                 set_bit(HCI_CONN_FIPS, &conn->flags);
2608
2609                         if ((conn->type == ACL_LINK && ev->encrypt == 0x02) ||
2610                             conn->type == LE_LINK)
2611                                 set_bit(HCI_CONN_AES_CCM, &conn->flags);
2612                 } else {
2613                         clear_bit(HCI_CONN_ENCRYPT, &conn->flags);
2614                         clear_bit(HCI_CONN_AES_CCM, &conn->flags);
2615                 }
2616         }
2617
2618         /* We should disregard the current RPA and generate a new one
2619          * whenever the encryption procedure fails.
2620          */
2621         if (ev->status && conn->type == LE_LINK)
2622                 hci_dev_set_flag(hdev, HCI_RPA_EXPIRED);
2623
2624         clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
2625
2626         if (ev->status && conn->state == BT_CONNECTED) {
2627                 if (ev->status == HCI_ERROR_PIN_OR_KEY_MISSING)
2628                         set_bit(HCI_CONN_AUTH_FAILURE, &conn->flags);
2629
2630                 hci_disconnect(conn, HCI_ERROR_AUTH_FAILURE);
2631                 hci_conn_drop(conn);
2632                 goto unlock;
2633         }
2634
2635         /* In Secure Connections Only mode, do not allow any connections
2636          * that are not encrypted with AES-CCM using a P-256 authenticated
2637          * combination key.
2638          */
2639         if (hci_dev_test_flag(hdev, HCI_SC_ONLY) &&
2640             (!test_bit(HCI_CONN_AES_CCM, &conn->flags) ||
2641              conn->key_type != HCI_LK_AUTH_COMBINATION_P256)) {
2642                 hci_connect_cfm(conn, HCI_ERROR_AUTH_FAILURE);
2643                 hci_conn_drop(conn);
2644                 goto unlock;
2645         }
2646
2647         /* Try reading the encryption key size for encrypted ACL links */
2648         if (!ev->status && ev->encrypt && conn->type == ACL_LINK) {
2649                 struct hci_cp_read_enc_key_size cp;
2650                 struct hci_request req;
2651
2652                 /* Only send HCI_Read_Encryption_Key_Size if the
2653                  * controller really supports it. If it doesn't, assume
2654                  * the default size (16).
2655                  */
2656                 if (!(hdev->commands[20] & 0x10)) {
2657                         conn->enc_key_size = HCI_LINK_KEY_SIZE;
2658                         goto notify;
2659                 }
2660
2661                 hci_req_init(&req, hdev);
2662
2663                 cp.handle = cpu_to_le16(conn->handle);
2664                 hci_req_add(&req, HCI_OP_READ_ENC_KEY_SIZE, sizeof(cp), &cp);
2665
2666                 if (hci_req_run_skb(&req, read_enc_key_size_complete)) {
2667                         BT_ERR("Sending HCI Read Encryption Key Size failed");
2668                         conn->enc_key_size = HCI_LINK_KEY_SIZE;
2669                         goto notify;
2670                 }
2671
2672                 goto unlock;
2673         }
2674
2675 notify:
2676         if (conn->state == BT_CONFIG) {
2677                 if (!ev->status)
2678                         conn->state = BT_CONNECTED;
2679
2680                 hci_connect_cfm(conn, ev->status);
2681                 hci_conn_drop(conn);
2682         } else
2683                 hci_encrypt_cfm(conn, ev->status, ev->encrypt);
2684
2685 unlock:
2686         hci_dev_unlock(hdev);
2687 }
2688
2689 static void hci_change_link_key_complete_evt(struct hci_dev *hdev,
2690                                              struct sk_buff *skb)
2691 {
2692         struct hci_ev_change_link_key_complete *ev = (void *) skb->data;
2693         struct hci_conn *conn;
2694
2695         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2696
2697         hci_dev_lock(hdev);
2698
2699         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2700         if (conn) {
2701                 if (!ev->status)
2702                         set_bit(HCI_CONN_SECURE, &conn->flags);
2703
2704                 clear_bit(HCI_CONN_AUTH_PEND, &conn->flags);
2705
2706                 hci_key_change_cfm(conn, ev->status);
2707         }
2708
2709         hci_dev_unlock(hdev);
2710 }
2711
2712 static void hci_remote_features_evt(struct hci_dev *hdev,
2713                                     struct sk_buff *skb)
2714 {
2715         struct hci_ev_remote_features *ev = (void *) skb->data;
2716         struct hci_conn *conn;
2717
2718         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2719
2720         hci_dev_lock(hdev);
2721
2722         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2723         if (!conn)
2724                 goto unlock;
2725
2726         if (!ev->status)
2727                 memcpy(conn->features[0], ev->features, 8);
2728
2729         if (conn->state != BT_CONFIG)
2730                 goto unlock;
2731
2732         if (!ev->status && lmp_ext_feat_capable(hdev) &&
2733             lmp_ext_feat_capable(conn)) {
2734                 struct hci_cp_read_remote_ext_features cp;
2735                 cp.handle = ev->handle;
2736                 cp.page = 0x01;
2737                 hci_send_cmd(hdev, HCI_OP_READ_REMOTE_EXT_FEATURES,
2738                              sizeof(cp), &cp);
2739                 goto unlock;
2740         }
2741
2742         if (!ev->status && !test_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags)) {
2743                 struct hci_cp_remote_name_req cp;
2744                 memset(&cp, 0, sizeof(cp));
2745                 bacpy(&cp.bdaddr, &conn->dst);
2746                 cp.pscan_rep_mode = 0x02;
2747                 hci_send_cmd(hdev, HCI_OP_REMOTE_NAME_REQ, sizeof(cp), &cp);
2748         } else if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags))
2749                 mgmt_device_connected(hdev, conn, 0, NULL, 0);
2750
2751         if (!hci_outgoing_auth_needed(hdev, conn)) {
2752                 conn->state = BT_CONNECTED;
2753                 hci_connect_cfm(conn, ev->status);
2754                 hci_conn_drop(conn);
2755         }
2756
2757 unlock:
2758         hci_dev_unlock(hdev);
2759 }
2760
2761 static void hci_cmd_complete_evt(struct hci_dev *hdev, struct sk_buff *skb,
2762                                  u16 *opcode, u8 *status,
2763                                  hci_req_complete_t *req_complete,
2764                                  hci_req_complete_skb_t *req_complete_skb)
2765 {
2766         struct hci_ev_cmd_complete *ev = (void *) skb->data;
2767
2768         *opcode = __le16_to_cpu(ev->opcode);
2769         *status = skb->data[sizeof(*ev)];
2770
2771         skb_pull(skb, sizeof(*ev));
2772
2773         switch (*opcode) {
2774         case HCI_OP_INQUIRY_CANCEL:
2775                 hci_cc_inquiry_cancel(hdev, skb);
2776                 break;
2777
2778         case HCI_OP_PERIODIC_INQ:
2779                 hci_cc_periodic_inq(hdev, skb);
2780                 break;
2781
2782         case HCI_OP_EXIT_PERIODIC_INQ:
2783                 hci_cc_exit_periodic_inq(hdev, skb);
2784                 break;
2785
2786         case HCI_OP_REMOTE_NAME_REQ_CANCEL:
2787                 hci_cc_remote_name_req_cancel(hdev, skb);
2788                 break;
2789
2790         case HCI_OP_ROLE_DISCOVERY:
2791                 hci_cc_role_discovery(hdev, skb);
2792                 break;
2793
2794         case HCI_OP_READ_LINK_POLICY:
2795                 hci_cc_read_link_policy(hdev, skb);
2796                 break;
2797
2798         case HCI_OP_WRITE_LINK_POLICY:
2799                 hci_cc_write_link_policy(hdev, skb);
2800                 break;
2801
2802         case HCI_OP_READ_DEF_LINK_POLICY:
2803                 hci_cc_read_def_link_policy(hdev, skb);
2804                 break;
2805
2806         case HCI_OP_WRITE_DEF_LINK_POLICY:
2807                 hci_cc_write_def_link_policy(hdev, skb);
2808                 break;
2809
2810         case HCI_OP_RESET:
2811                 hci_cc_reset(hdev, skb);
2812                 break;
2813
2814         case HCI_OP_READ_STORED_LINK_KEY:
2815                 hci_cc_read_stored_link_key(hdev, skb);
2816                 break;
2817
2818         case HCI_OP_DELETE_STORED_LINK_KEY:
2819                 hci_cc_delete_stored_link_key(hdev, skb);
2820                 break;
2821
2822         case HCI_OP_WRITE_LOCAL_NAME:
2823                 hci_cc_write_local_name(hdev, skb);
2824                 break;
2825
2826         case HCI_OP_READ_LOCAL_NAME:
2827                 hci_cc_read_local_name(hdev, skb);
2828                 break;
2829
2830         case HCI_OP_WRITE_AUTH_ENABLE:
2831                 hci_cc_write_auth_enable(hdev, skb);
2832                 break;
2833
2834         case HCI_OP_WRITE_ENCRYPT_MODE:
2835                 hci_cc_write_encrypt_mode(hdev, skb);
2836                 break;
2837
2838         case HCI_OP_WRITE_SCAN_ENABLE:
2839                 hci_cc_write_scan_enable(hdev, skb);
2840                 break;
2841
2842         case HCI_OP_READ_CLASS_OF_DEV:
2843                 hci_cc_read_class_of_dev(hdev, skb);
2844                 break;
2845
2846         case HCI_OP_WRITE_CLASS_OF_DEV:
2847                 hci_cc_write_class_of_dev(hdev, skb);
2848                 break;
2849
2850         case HCI_OP_READ_VOICE_SETTING:
2851                 hci_cc_read_voice_setting(hdev, skb);
2852                 break;
2853
2854         case HCI_OP_WRITE_VOICE_SETTING:
2855                 hci_cc_write_voice_setting(hdev, skb);
2856                 break;
2857
2858         case HCI_OP_READ_NUM_SUPPORTED_IAC:
2859                 hci_cc_read_num_supported_iac(hdev, skb);
2860                 break;
2861
2862         case HCI_OP_WRITE_SSP_MODE:
2863                 hci_cc_write_ssp_mode(hdev, skb);
2864                 break;
2865
2866         case HCI_OP_WRITE_SC_SUPPORT:
2867                 hci_cc_write_sc_support(hdev, skb);
2868                 break;
2869
2870         case HCI_OP_READ_LOCAL_VERSION:
2871                 hci_cc_read_local_version(hdev, skb);
2872                 break;
2873
2874         case HCI_OP_READ_LOCAL_COMMANDS:
2875                 hci_cc_read_local_commands(hdev, skb);
2876                 break;
2877
2878         case HCI_OP_READ_LOCAL_FEATURES:
2879                 hci_cc_read_local_features(hdev, skb);
2880                 break;
2881
2882         case HCI_OP_READ_LOCAL_EXT_FEATURES:
2883                 hci_cc_read_local_ext_features(hdev, skb);
2884                 break;
2885
2886         case HCI_OP_READ_BUFFER_SIZE:
2887                 hci_cc_read_buffer_size(hdev, skb);
2888                 break;
2889
2890         case HCI_OP_READ_BD_ADDR:
2891                 hci_cc_read_bd_addr(hdev, skb);
2892                 break;
2893
2894         case HCI_OP_READ_PAGE_SCAN_ACTIVITY:
2895                 hci_cc_read_page_scan_activity(hdev, skb);
2896                 break;
2897
2898         case HCI_OP_WRITE_PAGE_SCAN_ACTIVITY:
2899                 hci_cc_write_page_scan_activity(hdev, skb);
2900                 break;
2901
2902         case HCI_OP_READ_PAGE_SCAN_TYPE:
2903                 hci_cc_read_page_scan_type(hdev, skb);
2904                 break;
2905
2906         case HCI_OP_WRITE_PAGE_SCAN_TYPE:
2907                 hci_cc_write_page_scan_type(hdev, skb);
2908                 break;
2909
2910         case HCI_OP_READ_DATA_BLOCK_SIZE:
2911                 hci_cc_read_data_block_size(hdev, skb);
2912                 break;
2913
2914         case HCI_OP_READ_FLOW_CONTROL_MODE:
2915                 hci_cc_read_flow_control_mode(hdev, skb);
2916                 break;
2917
2918         case HCI_OP_READ_LOCAL_AMP_INFO:
2919                 hci_cc_read_local_amp_info(hdev, skb);
2920                 break;
2921
2922         case HCI_OP_READ_CLOCK:
2923                 hci_cc_read_clock(hdev, skb);
2924                 break;
2925
2926         case HCI_OP_READ_INQ_RSP_TX_POWER:
2927                 hci_cc_read_inq_rsp_tx_power(hdev, skb);
2928                 break;
2929
2930         case HCI_OP_PIN_CODE_REPLY:
2931                 hci_cc_pin_code_reply(hdev, skb);
2932                 break;
2933
2934         case HCI_OP_PIN_CODE_NEG_REPLY:
2935                 hci_cc_pin_code_neg_reply(hdev, skb);
2936                 break;
2937
2938         case HCI_OP_READ_LOCAL_OOB_DATA:
2939                 hci_cc_read_local_oob_data(hdev, skb);
2940                 break;
2941
2942         case HCI_OP_READ_LOCAL_OOB_EXT_DATA:
2943                 hci_cc_read_local_oob_ext_data(hdev, skb);
2944                 break;
2945
2946         case HCI_OP_LE_READ_BUFFER_SIZE:
2947                 hci_cc_le_read_buffer_size(hdev, skb);
2948                 break;
2949
2950         case HCI_OP_LE_READ_LOCAL_FEATURES:
2951                 hci_cc_le_read_local_features(hdev, skb);
2952                 break;
2953
2954         case HCI_OP_LE_READ_ADV_TX_POWER:
2955                 hci_cc_le_read_adv_tx_power(hdev, skb);
2956                 break;
2957
2958         case HCI_OP_USER_CONFIRM_REPLY:
2959                 hci_cc_user_confirm_reply(hdev, skb);
2960                 break;
2961
2962         case HCI_OP_USER_CONFIRM_NEG_REPLY:
2963                 hci_cc_user_confirm_neg_reply(hdev, skb);
2964                 break;
2965
2966         case HCI_OP_USER_PASSKEY_REPLY:
2967                 hci_cc_user_passkey_reply(hdev, skb);
2968                 break;
2969
2970         case HCI_OP_USER_PASSKEY_NEG_REPLY:
2971                 hci_cc_user_passkey_neg_reply(hdev, skb);
2972                 break;
2973
2974         case HCI_OP_LE_SET_RANDOM_ADDR:
2975                 hci_cc_le_set_random_addr(hdev, skb);
2976                 break;
2977
2978         case HCI_OP_LE_SET_ADV_ENABLE:
2979                 hci_cc_le_set_adv_enable(hdev, skb);
2980                 break;
2981
2982         case HCI_OP_LE_SET_SCAN_PARAM:
2983                 hci_cc_le_set_scan_param(hdev, skb);
2984                 break;
2985
2986         case HCI_OP_LE_SET_SCAN_ENABLE:
2987                 hci_cc_le_set_scan_enable(hdev, skb);
2988                 break;
2989
2990         case HCI_OP_LE_READ_WHITE_LIST_SIZE:
2991                 hci_cc_le_read_white_list_size(hdev, skb);
2992                 break;
2993
2994         case HCI_OP_LE_CLEAR_WHITE_LIST:
2995                 hci_cc_le_clear_white_list(hdev, skb);
2996                 break;
2997
2998         case HCI_OP_LE_ADD_TO_WHITE_LIST:
2999                 hci_cc_le_add_to_white_list(hdev, skb);
3000                 break;
3001
3002         case HCI_OP_LE_DEL_FROM_WHITE_LIST:
3003                 hci_cc_le_del_from_white_list(hdev, skb);
3004                 break;
3005
3006         case HCI_OP_LE_READ_SUPPORTED_STATES:
3007                 hci_cc_le_read_supported_states(hdev, skb);
3008                 break;
3009
3010         case HCI_OP_LE_READ_DEF_DATA_LEN:
3011                 hci_cc_le_read_def_data_len(hdev, skb);
3012                 break;
3013
3014         case HCI_OP_LE_WRITE_DEF_DATA_LEN:
3015                 hci_cc_le_write_def_data_len(hdev, skb);
3016                 break;
3017
3018         case HCI_OP_LE_READ_MAX_DATA_LEN:
3019                 hci_cc_le_read_max_data_len(hdev, skb);
3020                 break;
3021
3022         case HCI_OP_WRITE_LE_HOST_SUPPORTED:
3023                 hci_cc_write_le_host_supported(hdev, skb);
3024                 break;
3025
3026         case HCI_OP_LE_SET_ADV_PARAM:
3027                 hci_cc_set_adv_param(hdev, skb);
3028                 break;
3029
3030         case HCI_OP_READ_RSSI:
3031                 hci_cc_read_rssi(hdev, skb);
3032                 break;
3033
3034         case HCI_OP_READ_TX_POWER:
3035                 hci_cc_read_tx_power(hdev, skb);
3036                 break;
3037
3038         case HCI_OP_WRITE_SSP_DEBUG_MODE:
3039                 hci_cc_write_ssp_debug_mode(hdev, skb);
3040                 break;
3041
3042         default:
3043                 BT_DBG("%s opcode 0x%4.4x", hdev->name, *opcode);
3044                 break;
3045         }
3046
3047         if (*opcode != HCI_OP_NOP)
3048                 cancel_delayed_work(&hdev->cmd_timer);
3049
3050         if (ev->ncmd && !test_bit(HCI_RESET, &hdev->flags))
3051                 atomic_set(&hdev->cmd_cnt, 1);
3052
3053         hci_req_cmd_complete(hdev, *opcode, *status, req_complete,
3054                              req_complete_skb);
3055
3056         if (atomic_read(&hdev->cmd_cnt) && !skb_queue_empty(&hdev->cmd_q))
3057                 queue_work(hdev->workqueue, &hdev->cmd_work);
3058 }
3059
3060 static void hci_cmd_status_evt(struct hci_dev *hdev, struct sk_buff *skb,
3061                                u16 *opcode, u8 *status,
3062                                hci_req_complete_t *req_complete,
3063                                hci_req_complete_skb_t *req_complete_skb)
3064 {
3065         struct hci_ev_cmd_status *ev = (void *) skb->data;
3066
3067         skb_pull(skb, sizeof(*ev));
3068
3069         *opcode = __le16_to_cpu(ev->opcode);
3070         *status = ev->status;
3071
3072         switch (*opcode) {
3073         case HCI_OP_INQUIRY:
3074                 hci_cs_inquiry(hdev, ev->status);
3075                 break;
3076
3077         case HCI_OP_CREATE_CONN:
3078                 hci_cs_create_conn(hdev, ev->status);
3079                 break;
3080
3081         case HCI_OP_DISCONNECT:
3082                 hci_cs_disconnect(hdev, ev->status);
3083                 break;
3084
3085         case HCI_OP_ADD_SCO:
3086                 hci_cs_add_sco(hdev, ev->status);
3087                 break;
3088
3089         case HCI_OP_AUTH_REQUESTED:
3090                 hci_cs_auth_requested(hdev, ev->status);
3091                 break;
3092
3093         case HCI_OP_SET_CONN_ENCRYPT:
3094                 hci_cs_set_conn_encrypt(hdev, ev->status);
3095                 break;
3096
3097         case HCI_OP_REMOTE_NAME_REQ:
3098                 hci_cs_remote_name_req(hdev, ev->status);
3099                 break;
3100
3101         case HCI_OP_READ_REMOTE_FEATURES:
3102                 hci_cs_read_remote_features(hdev, ev->status);
3103                 break;
3104
3105         case HCI_OP_READ_REMOTE_EXT_FEATURES:
3106                 hci_cs_read_remote_ext_features(hdev, ev->status);
3107                 break;
3108
3109         case HCI_OP_SETUP_SYNC_CONN:
3110                 hci_cs_setup_sync_conn(hdev, ev->status);
3111                 break;
3112
3113         case HCI_OP_SNIFF_MODE:
3114                 hci_cs_sniff_mode(hdev, ev->status);
3115                 break;
3116
3117         case HCI_OP_EXIT_SNIFF_MODE:
3118                 hci_cs_exit_sniff_mode(hdev, ev->status);
3119                 break;
3120
3121         case HCI_OP_SWITCH_ROLE:
3122                 hci_cs_switch_role(hdev, ev->status);
3123                 break;
3124
3125         case HCI_OP_LE_CREATE_CONN:
3126                 hci_cs_le_create_conn(hdev, ev->status);
3127                 break;
3128
3129         case HCI_OP_LE_READ_REMOTE_FEATURES:
3130                 hci_cs_le_read_remote_features(hdev, ev->status);
3131                 break;
3132
3133         case HCI_OP_LE_START_ENC:
3134                 hci_cs_le_start_enc(hdev, ev->status);
3135                 break;
3136
3137         default:
3138                 BT_DBG("%s opcode 0x%4.4x", hdev->name, *opcode);
3139                 break;
3140         }
3141
3142         if (*opcode != HCI_OP_NOP)
3143                 cancel_delayed_work(&hdev->cmd_timer);
3144
3145         if (ev->ncmd && !test_bit(HCI_RESET, &hdev->flags))
3146                 atomic_set(&hdev->cmd_cnt, 1);
3147
3148         /* Indicate request completion if the command failed. Also, if
3149          * we're not waiting for a special event and we get a success
3150          * command status we should try to flag the request as completed
3151          * (since for this kind of commands there will not be a command
3152          * complete event).
3153          */
3154         if (ev->status ||
3155             (hdev->sent_cmd && !bt_cb(hdev->sent_cmd)->hci.req_event))
3156                 hci_req_cmd_complete(hdev, *opcode, ev->status, req_complete,
3157                                      req_complete_skb);
3158
3159         if (atomic_read(&hdev->cmd_cnt) && !skb_queue_empty(&hdev->cmd_q))
3160                 queue_work(hdev->workqueue, &hdev->cmd_work);
3161 }
3162
3163 static void hci_hardware_error_evt(struct hci_dev *hdev, struct sk_buff *skb)
3164 {
3165         struct hci_ev_hardware_error *ev = (void *) skb->data;
3166
3167         hdev->hw_error_code = ev->code;
3168
3169         queue_work(hdev->req_workqueue, &hdev->error_reset);
3170 }
3171
3172 static void hci_role_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
3173 {
3174         struct hci_ev_role_change *ev = (void *) skb->data;
3175         struct hci_conn *conn;
3176
3177         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3178
3179         hci_dev_lock(hdev);
3180
3181         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3182         if (conn) {
3183                 if (!ev->status)
3184                         conn->role = ev->role;
3185
3186                 clear_bit(HCI_CONN_RSWITCH_PEND, &conn->flags);
3187
3188                 hci_role_switch_cfm(conn, ev->status, ev->role);
3189         }
3190
3191         hci_dev_unlock(hdev);
3192 }
3193
3194 static void hci_num_comp_pkts_evt(struct hci_dev *hdev, struct sk_buff *skb)
3195 {
3196         struct hci_ev_num_comp_pkts *ev = (void *) skb->data;
3197         int i;
3198
3199         if (hdev->flow_ctl_mode != HCI_FLOW_CTL_MODE_PACKET_BASED) {
3200                 BT_ERR("Wrong event for mode %d", hdev->flow_ctl_mode);
3201                 return;
3202         }
3203
3204         if (skb->len < sizeof(*ev) || skb->len < sizeof(*ev) +
3205             ev->num_hndl * sizeof(struct hci_comp_pkts_info)) {
3206                 BT_DBG("%s bad parameters", hdev->name);
3207                 return;
3208         }
3209
3210         BT_DBG("%s num_hndl %d", hdev->name, ev->num_hndl);
3211
3212         for (i = 0; i < ev->num_hndl; i++) {
3213                 struct hci_comp_pkts_info *info = &ev->handles[i];
3214                 struct hci_conn *conn;
3215                 __u16  handle, count;
3216
3217                 handle = __le16_to_cpu(info->handle);
3218                 count  = __le16_to_cpu(info->count);
3219
3220                 conn = hci_conn_hash_lookup_handle(hdev, handle);
3221                 if (!conn)
3222                         continue;
3223
3224                 conn->sent -= count;
3225
3226                 switch (conn->type) {
3227                 case ACL_LINK:
3228                         hdev->acl_cnt += count;
3229                         if (hdev->acl_cnt > hdev->acl_pkts)
3230                                 hdev->acl_cnt = hdev->acl_pkts;
3231                         break;
3232
3233                 case LE_LINK:
3234                         if (hdev->le_pkts) {
3235                                 hdev->le_cnt += count;
3236                                 if (hdev->le_cnt > hdev->le_pkts)
3237                                         hdev->le_cnt = hdev->le_pkts;
3238                         } else {
3239                                 hdev->acl_cnt += count;
3240                                 if (hdev->acl_cnt > hdev->acl_pkts)
3241                                         hdev->acl_cnt = hdev->acl_pkts;
3242                         }
3243                         break;
3244
3245                 case SCO_LINK:
3246                         hdev->sco_cnt += count;
3247                         if (hdev->sco_cnt > hdev->sco_pkts)
3248                                 hdev->sco_cnt = hdev->sco_pkts;
3249                         break;
3250
3251                 default:
3252                         BT_ERR("Unknown type %d conn %p", conn->type, conn);
3253                         break;
3254                 }
3255         }
3256
3257         queue_work(hdev->workqueue, &hdev->tx_work);
3258 }
3259
3260 static struct hci_conn *__hci_conn_lookup_handle(struct hci_dev *hdev,
3261                                                  __u16 handle)
3262 {
3263         struct hci_chan *chan;
3264
3265         switch (hdev->dev_type) {
3266         case HCI_PRIMARY:
3267                 return hci_conn_hash_lookup_handle(hdev, handle);
3268         case HCI_AMP:
3269                 chan = hci_chan_lookup_handle(hdev, handle);
3270                 if (chan)
3271                         return chan->conn;
3272                 break;
3273         default:
3274                 BT_ERR("%s unknown dev_type %d", hdev->name, hdev->dev_type);
3275                 break;
3276         }
3277
3278         return NULL;
3279 }
3280
3281 static void hci_num_comp_blocks_evt(struct hci_dev *hdev, struct sk_buff *skb)
3282 {
3283         struct hci_ev_num_comp_blocks *ev = (void *) skb->data;
3284         int i;
3285
3286         if (hdev->flow_ctl_mode != HCI_FLOW_CTL_MODE_BLOCK_BASED) {
3287                 BT_ERR("Wrong event for mode %d", hdev->flow_ctl_mode);
3288                 return;
3289         }
3290
3291         if (skb->len < sizeof(*ev) || skb->len < sizeof(*ev) +
3292             ev->num_hndl * sizeof(struct hci_comp_blocks_info)) {
3293                 BT_DBG("%s bad parameters", hdev->name);
3294                 return;
3295         }
3296
3297         BT_DBG("%s num_blocks %d num_hndl %d", hdev->name, ev->num_blocks,
3298                ev->num_hndl);
3299
3300         for (i = 0; i < ev->num_hndl; i++) {
3301                 struct hci_comp_blocks_info *info = &ev->handles[i];
3302                 struct hci_conn *conn = NULL;
3303                 __u16  handle, block_count;
3304
3305                 handle = __le16_to_cpu(info->handle);
3306                 block_count = __le16_to_cpu(info->blocks);
3307
3308                 conn = __hci_conn_lookup_handle(hdev, handle);
3309                 if (!conn)
3310                         continue;
3311
3312                 conn->sent -= block_count;
3313
3314                 switch (conn->type) {
3315                 case ACL_LINK:
3316                 case AMP_LINK:
3317                         hdev->block_cnt += block_count;
3318                         if (hdev->block_cnt > hdev->num_blocks)
3319                                 hdev->block_cnt = hdev->num_blocks;
3320                         break;
3321
3322                 default:
3323                         BT_ERR("Unknown type %d conn %p", conn->type, conn);
3324                         break;
3325                 }
3326         }
3327
3328         queue_work(hdev->workqueue, &hdev->tx_work);
3329 }
3330
3331 static void hci_mode_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
3332 {
3333         struct hci_ev_mode_change *ev = (void *) skb->data;
3334         struct hci_conn *conn;
3335
3336         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3337
3338         hci_dev_lock(hdev);
3339
3340         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
3341         if (conn) {
3342                 conn->mode = ev->mode;
3343
3344                 if (!test_and_clear_bit(HCI_CONN_MODE_CHANGE_PEND,
3345                                         &conn->flags)) {
3346                         if (conn->mode == HCI_CM_ACTIVE)
3347                                 set_bit(HCI_CONN_POWER_SAVE, &conn->flags);
3348                         else
3349                                 clear_bit(HCI_CONN_POWER_SAVE, &conn->flags);
3350                 }
3351
3352                 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->flags))
3353                         hci_sco_setup(conn, ev->status);
3354         }
3355
3356         hci_dev_unlock(hdev);
3357 }
3358
3359 static void hci_pin_code_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
3360 {
3361         struct hci_ev_pin_code_req *ev = (void *) skb->data;
3362         struct hci_conn *conn;
3363
3364         BT_DBG("%s", hdev->name);
3365
3366         hci_dev_lock(hdev);
3367
3368         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3369         if (!conn)
3370                 goto unlock;
3371
3372         if (conn->state == BT_CONNECTED) {
3373                 hci_conn_hold(conn);
3374                 conn->disc_timeout = HCI_PAIRING_TIMEOUT;
3375                 hci_conn_drop(conn);
3376         }
3377
3378         if (!hci_dev_test_flag(hdev, HCI_BONDABLE) &&
3379             !test_bit(HCI_CONN_AUTH_INITIATOR, &conn->flags)) {
3380                 hci_send_cmd(hdev, HCI_OP_PIN_CODE_NEG_REPLY,
3381                              sizeof(ev->bdaddr), &ev->bdaddr);
3382         } else if (hci_dev_test_flag(hdev, HCI_MGMT)) {
3383                 u8 secure;
3384
3385                 if (conn->pending_sec_level == BT_SECURITY_HIGH)
3386                         secure = 1;
3387                 else
3388                         secure = 0;
3389
3390                 mgmt_pin_code_request(hdev, &ev->bdaddr, secure);
3391         }
3392
3393 unlock:
3394         hci_dev_unlock(hdev);
3395 }
3396
3397 static void conn_set_key(struct hci_conn *conn, u8 key_type, u8 pin_len)
3398 {
3399         if (key_type == HCI_LK_CHANGED_COMBINATION)
3400                 return;
3401
3402         conn->pin_length = pin_len;
3403         conn->key_type = key_type;
3404
3405         switch (key_type) {
3406         case HCI_LK_LOCAL_UNIT:
3407         case HCI_LK_REMOTE_UNIT:
3408         case HCI_LK_DEBUG_COMBINATION:
3409                 return;
3410         case HCI_LK_COMBINATION:
3411                 if (pin_len == 16)
3412                         conn->pending_sec_level = BT_SECURITY_HIGH;
3413                 else
3414                         conn->pending_sec_level = BT_SECURITY_MEDIUM;
3415                 break;
3416         case HCI_LK_UNAUTH_COMBINATION_P192:
3417         case HCI_LK_UNAUTH_COMBINATION_P256:
3418                 conn->pending_sec_level = BT_SECURITY_MEDIUM;
3419                 break;
3420         case HCI_LK_AUTH_COMBINATION_P192:
3421                 conn->pending_sec_level = BT_SECURITY_HIGH;
3422                 break;
3423         case HCI_LK_AUTH_COMBINATION_P256:
3424                 conn->pending_sec_level = BT_SECURITY_FIPS;
3425                 break;
3426         }
3427 }
3428
3429 static void hci_link_key_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
3430 {
3431         struct hci_ev_link_key_req *ev = (void *) skb->data;
3432         struct hci_cp_link_key_reply cp;
3433         struct hci_conn *conn;
3434         struct link_key *key;
3435
3436         BT_DBG("%s", hdev->name);
3437
3438         if (!hci_dev_test_flag(hdev, HCI_MGMT))
3439                 return;
3440
3441         hci_dev_lock(hdev);
3442
3443         key = hci_find_link_key(hdev, &ev->bdaddr);
3444         if (!key) {
3445                 BT_DBG("%s link key not found for %pMR", hdev->name,
3446                        &ev->bdaddr);
3447                 goto not_found;
3448         }
3449
3450         BT_DBG("%s found key type %u for %pMR", hdev->name, key->type,
3451                &ev->bdaddr);
3452
3453         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3454         if (conn) {
3455                 clear_bit(HCI_CONN_NEW_LINK_KEY, &conn->flags);
3456
3457                 if ((key->type == HCI_LK_UNAUTH_COMBINATION_P192 ||
3458                      key->type == HCI_LK_UNAUTH_COMBINATION_P256) &&
3459                     conn->auth_type != 0xff && (conn->auth_type & 0x01)) {
3460                         BT_DBG("%s ignoring unauthenticated key", hdev->name);
3461                         goto not_found;
3462                 }
3463
3464                 if (key->type == HCI_LK_COMBINATION && key->pin_len < 16 &&
3465                     (conn->pending_sec_level == BT_SECURITY_HIGH ||
3466                      conn->pending_sec_level == BT_SECURITY_FIPS)) {
3467                         BT_DBG("%s ignoring key unauthenticated for high security",
3468                                hdev->name);
3469                         goto not_found;
3470                 }
3471
3472                 conn_set_key(conn, key->type, key->pin_len);
3473         }
3474
3475         bacpy(&cp.bdaddr, &ev->bdaddr);
3476         memcpy(cp.link_key, key->val, HCI_LINK_KEY_SIZE);
3477
3478         hci_send_cmd(hdev, HCI_OP_LINK_KEY_REPLY, sizeof(cp), &cp);
3479
3480         hci_dev_unlock(hdev);
3481
3482         return;
3483
3484 not_found:
3485         hci_send_cmd(hdev, HCI_OP_LINK_KEY_NEG_REPLY, 6, &ev->bdaddr);
3486         hci_dev_unlock(hdev);
3487 }
3488
3489 static void hci_link_key_notify_evt(struct hci_dev *hdev, struct sk_buff *skb)
3490 {
3491         struct hci_ev_link_key_notify *ev = (void *) skb->data;
3492         struct hci_conn *conn;
3493         struct link_key *key;
3494         bool persistent;
3495         u8 pin_len = 0;
3496
3497         BT_DBG("%s", hdev->name);
3498
3499         hci_dev_lock(hdev);
3500
3501         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3502         if (!conn)
3503                 goto unlock;
3504
3505         hci_conn_hold(conn);
3506         conn->disc_timeout = HCI_DISCONN_TIMEOUT;
3507         hci_conn_drop(conn);
3508
3509         set_bit(HCI_CONN_NEW_LINK_KEY, &conn->flags);
3510         conn_set_key(conn, ev->key_type, conn->pin_length);
3511
3512         if (!hci_dev_test_flag(hdev, HCI_MGMT))
3513                 goto unlock;
3514
3515         key = hci_add_link_key(hdev, conn, &ev->bdaddr, ev->link_key,
3516                                 ev->key_type, pin_len, &persistent);
3517         if (!key)
3518                 goto unlock;
3519
3520         /* Update connection information since adding the key will have
3521          * fixed up the type in the case of changed combination keys.
3522          */
3523         if (ev->key_type == HCI_LK_CHANGED_COMBINATION)
3524                 conn_set_key(conn, key->type, key->pin_len);
3525
3526         mgmt_new_link_key(hdev, key, persistent);
3527
3528         /* Keep debug keys around only if the HCI_KEEP_DEBUG_KEYS flag
3529          * is set. If it's not set simply remove the key from the kernel
3530          * list (we've still notified user space about it but with
3531          * store_hint being 0).
3532          */
3533         if (key->type == HCI_LK_DEBUG_COMBINATION &&
3534             !hci_dev_test_flag(hdev, HCI_KEEP_DEBUG_KEYS)) {
3535                 list_del_rcu(&key->list);
3536                 kfree_rcu(key, rcu);
3537                 goto unlock;
3538         }
3539
3540         if (persistent)
3541                 clear_bit(HCI_CONN_FLUSH_KEY, &conn->flags);
3542         else
3543                 set_bit(HCI_CONN_FLUSH_KEY, &conn->flags);
3544
3545 unlock:
3546         hci_dev_unlock(hdev);
3547 }
3548
3549 static void hci_clock_offset_evt(struct hci_dev *hdev, struct sk_buff *skb)
3550 {
3551         struct hci_ev_clock_offset *ev = (void *) skb->data;
3552         struct hci_conn *conn;
3553
3554         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3555
3556         hci_dev_lock(hdev);
3557
3558         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
3559         if (conn && !ev->status) {
3560                 struct inquiry_entry *ie;
3561
3562                 ie = hci_inquiry_cache_lookup(hdev, &conn->dst);
3563                 if (ie) {
3564                         ie->data.clock_offset = ev->clock_offset;
3565                         ie->timestamp = jiffies;
3566                 }
3567         }
3568
3569         hci_dev_unlock(hdev);
3570 }
3571
3572 static void hci_pkt_type_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
3573 {
3574         struct hci_ev_pkt_type_change *ev = (void *) skb->data;
3575         struct hci_conn *conn;
3576
3577         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3578
3579         hci_dev_lock(hdev);
3580
3581         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
3582         if (conn && !ev->status)
3583                 conn->pkt_type = __le16_to_cpu(ev->pkt_type);
3584
3585         hci_dev_unlock(hdev);
3586 }
3587
3588 static void hci_pscan_rep_mode_evt(struct hci_dev *hdev, struct sk_buff *skb)
3589 {
3590         struct hci_ev_pscan_rep_mode *ev = (void *) skb->data;
3591         struct inquiry_entry *ie;
3592
3593         BT_DBG("%s", hdev->name);
3594
3595         hci_dev_lock(hdev);
3596
3597         ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr);
3598         if (ie) {
3599                 ie->data.pscan_rep_mode = ev->pscan_rep_mode;
3600                 ie->timestamp = jiffies;
3601         }
3602
3603         hci_dev_unlock(hdev);
3604 }
3605
3606 static void hci_inquiry_result_with_rssi_evt(struct hci_dev *hdev,
3607                                              struct sk_buff *skb)
3608 {
3609         struct inquiry_data data;
3610         int num_rsp = *((__u8 *) skb->data);
3611
3612         BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
3613
3614         if (!num_rsp)
3615                 return;
3616
3617         if (hci_dev_test_flag(hdev, HCI_PERIODIC_INQ))
3618                 return;
3619
3620         hci_dev_lock(hdev);
3621
3622         if ((skb->len - 1) / num_rsp != sizeof(struct inquiry_info_with_rssi)) {
3623                 struct inquiry_info_with_rssi_and_pscan_mode *info;
3624                 info = (void *) (skb->data + 1);
3625
3626                 for (; num_rsp; num_rsp--, info++) {
3627                         u32 flags;
3628
3629                         bacpy(&data.bdaddr, &info->bdaddr);
3630                         data.pscan_rep_mode     = info->pscan_rep_mode;
3631                         data.pscan_period_mode  = info->pscan_period_mode;
3632                         data.pscan_mode         = info->pscan_mode;
3633                         memcpy(data.dev_class, info->dev_class, 3);
3634                         data.clock_offset       = info->clock_offset;
3635                         data.rssi               = info->rssi;
3636                         data.ssp_mode           = 0x00;
3637
3638                         flags = hci_inquiry_cache_update(hdev, &data, false);
3639
3640                         mgmt_device_found(hdev, &info->bdaddr, ACL_LINK, 0x00,
3641                                           info->dev_class, info->rssi,
3642                                           flags, NULL, 0, NULL, 0);
3643                 }
3644         } else {
3645                 struct inquiry_info_with_rssi *info = (void *) (skb->data + 1);
3646
3647                 for (; num_rsp; num_rsp--, info++) {
3648                         u32 flags;
3649
3650                         bacpy(&data.bdaddr, &info->bdaddr);
3651                         data.pscan_rep_mode     = info->pscan_rep_mode;
3652                         data.pscan_period_mode  = info->pscan_period_mode;
3653                         data.pscan_mode         = 0x00;
3654                         memcpy(data.dev_class, info->dev_class, 3);
3655                         data.clock_offset       = info->clock_offset;
3656                         data.rssi               = info->rssi;
3657                         data.ssp_mode           = 0x00;
3658
3659                         flags = hci_inquiry_cache_update(hdev, &data, false);
3660
3661                         mgmt_device_found(hdev, &info->bdaddr, ACL_LINK, 0x00,
3662                                           info->dev_class, info->rssi,
3663                                           flags, NULL, 0, NULL, 0);
3664                 }
3665         }
3666
3667         hci_dev_unlock(hdev);
3668 }
3669
3670 static void hci_remote_ext_features_evt(struct hci_dev *hdev,
3671                                         struct sk_buff *skb)
3672 {
3673         struct hci_ev_remote_ext_features *ev = (void *) skb->data;
3674         struct hci_conn *conn;
3675
3676         BT_DBG("%s", hdev->name);
3677
3678         hci_dev_lock(hdev);
3679
3680         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
3681         if (!conn)
3682                 goto unlock;
3683
3684         if (ev->page < HCI_MAX_PAGES)
3685                 memcpy(conn->features[ev->page], ev->features, 8);
3686
3687         if (!ev->status && ev->page == 0x01) {
3688                 struct inquiry_entry *ie;
3689
3690                 ie = hci_inquiry_cache_lookup(hdev, &conn->dst);
3691                 if (ie)
3692                         ie->data.ssp_mode = (ev->features[0] & LMP_HOST_SSP);
3693
3694                 if (ev->features[0] & LMP_HOST_SSP) {
3695                         set_bit(HCI_CONN_SSP_ENABLED, &conn->flags);
3696                 } else {
3697                         /* It is mandatory by the Bluetooth specification that
3698                          * Extended Inquiry Results are only used when Secure
3699                          * Simple Pairing is enabled, but some devices violate
3700                          * this.
3701                          *
3702                          * To make these devices work, the internal SSP
3703                          * enabled flag needs to be cleared if the remote host
3704                          * features do not indicate SSP support */
3705                         clear_bit(HCI_CONN_SSP_ENABLED, &conn->flags);
3706                 }
3707
3708                 if (ev->features[0] & LMP_HOST_SC)
3709                         set_bit(HCI_CONN_SC_ENABLED, &conn->flags);
3710         }
3711
3712         if (conn->state != BT_CONFIG)
3713                 goto unlock;
3714
3715         if (!ev->status && !test_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags)) {
3716                 struct hci_cp_remote_name_req cp;
3717                 memset(&cp, 0, sizeof(cp));
3718                 bacpy(&cp.bdaddr, &conn->dst);
3719                 cp.pscan_rep_mode = 0x02;
3720                 hci_send_cmd(hdev, HCI_OP_REMOTE_NAME_REQ, sizeof(cp), &cp);
3721         } else if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags))
3722                 mgmt_device_connected(hdev, conn, 0, NULL, 0);
3723
3724         if (!hci_outgoing_auth_needed(hdev, conn)) {
3725                 conn->state = BT_CONNECTED;
3726                 hci_connect_cfm(conn, ev->status);
3727                 hci_conn_drop(conn);
3728         }
3729
3730 unlock:
3731         hci_dev_unlock(hdev);
3732 }
3733
3734 static void hci_sync_conn_complete_evt(struct hci_dev *hdev,
3735                                        struct sk_buff *skb)
3736 {
3737         struct hci_ev_sync_conn_complete *ev = (void *) skb->data;
3738         struct hci_conn *conn;
3739
3740         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3741
3742         hci_dev_lock(hdev);
3743
3744         conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
3745         if (!conn) {
3746                 if (ev->link_type == ESCO_LINK)
3747                         goto unlock;
3748
3749                 /* When the link type in the event indicates SCO connection
3750                  * and lookup of the connection object fails, then check
3751                  * if an eSCO connection object exists.
3752                  *
3753                  * The core limits the synchronous connections to either
3754                  * SCO or eSCO. The eSCO connection is preferred and tried
3755                  * to be setup first and until successfully established,
3756                  * the link type will be hinted as eSCO.
3757                  */
3758                 conn = hci_conn_hash_lookup_ba(hdev, ESCO_LINK, &ev->bdaddr);
3759                 if (!conn)
3760                         goto unlock;
3761         }
3762
3763         switch (ev->status) {
3764         case 0x00:
3765                 conn->handle = __le16_to_cpu(ev->handle);
3766                 conn->state  = BT_CONNECTED;
3767                 conn->type   = ev->link_type;
3768
3769                 hci_debugfs_create_conn(conn);
3770                 hci_conn_add_sysfs(conn);
3771                 break;
3772
3773         case 0x10:      /* Connection Accept Timeout */
3774         case 0x0d:      /* Connection Rejected due to Limited Resources */
3775         case 0x11:      /* Unsupported Feature or Parameter Value */
3776         case 0x1c:      /* SCO interval rejected */
3777         case 0x1a:      /* Unsupported Remote Feature */
3778         case 0x1f:      /* Unspecified error */
3779         case 0x20:      /* Unsupported LMP Parameter value */
3780                 if (conn->out) {
3781                         conn->pkt_type = (hdev->esco_type & SCO_ESCO_MASK) |
3782                                         (hdev->esco_type & EDR_ESCO_MASK);
3783                         if (hci_setup_sync(conn, conn->link->handle))
3784                                 goto unlock;
3785                 }
3786                 /* fall through */
3787
3788         default:
3789                 conn->state = BT_CLOSED;
3790                 break;
3791         }
3792
3793         hci_connect_cfm(conn, ev->status);
3794         if (ev->status)
3795                 hci_conn_del(conn);
3796
3797 unlock:
3798         hci_dev_unlock(hdev);
3799 }
3800
3801 static inline size_t eir_get_length(u8 *eir, size_t eir_len)
3802 {
3803         size_t parsed = 0;
3804
3805         while (parsed < eir_len) {
3806                 u8 field_len = eir[0];
3807
3808                 if (field_len == 0)
3809                         return parsed;
3810
3811                 parsed += field_len + 1;
3812                 eir += field_len + 1;
3813         }
3814
3815         return eir_len;
3816 }
3817
3818 static void hci_extended_inquiry_result_evt(struct hci_dev *hdev,
3819                                             struct sk_buff *skb)
3820 {
3821         struct inquiry_data data;
3822         struct extended_inquiry_info *info = (void *) (skb->data + 1);
3823         int num_rsp = *((__u8 *) skb->data);
3824         size_t eir_len;
3825
3826         BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
3827
3828         if (!num_rsp)
3829                 return;
3830
3831         if (hci_dev_test_flag(hdev, HCI_PERIODIC_INQ))
3832                 return;
3833
3834         hci_dev_lock(hdev);
3835
3836         for (; num_rsp; num_rsp--, info++) {
3837                 u32 flags;
3838                 bool name_known;
3839
3840                 bacpy(&data.bdaddr, &info->bdaddr);
3841                 data.pscan_rep_mode     = info->pscan_rep_mode;
3842                 data.pscan_period_mode  = info->pscan_period_mode;
3843                 data.pscan_mode         = 0x00;
3844                 memcpy(data.dev_class, info->dev_class, 3);
3845                 data.clock_offset       = info->clock_offset;
3846                 data.rssi               = info->rssi;
3847                 data.ssp_mode           = 0x01;
3848
3849                 if (hci_dev_test_flag(hdev, HCI_MGMT))
3850                         name_known = eir_get_data(info->data,
3851                                                   sizeof(info->data),
3852                                                   EIR_NAME_COMPLETE, NULL);
3853                 else
3854                         name_known = true;
3855
3856                 flags = hci_inquiry_cache_update(hdev, &data, name_known);
3857
3858                 eir_len = eir_get_length(info->data, sizeof(info->data));
3859
3860                 mgmt_device_found(hdev, &info->bdaddr, ACL_LINK, 0x00,
3861                                   info->dev_class, info->rssi,
3862                                   flags, info->data, eir_len, NULL, 0);
3863         }
3864
3865         hci_dev_unlock(hdev);
3866 }
3867
3868 static void hci_key_refresh_complete_evt(struct hci_dev *hdev,
3869                                          struct sk_buff *skb)
3870 {
3871         struct hci_ev_key_refresh_complete *ev = (void *) skb->data;
3872         struct hci_conn *conn;
3873
3874         BT_DBG("%s status 0x%2.2x handle 0x%4.4x", hdev->name, ev->status,
3875                __le16_to_cpu(ev->handle));
3876
3877         hci_dev_lock(hdev);
3878
3879         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
3880         if (!conn)
3881                 goto unlock;
3882
3883         /* For BR/EDR the necessary steps are taken through the
3884          * auth_complete event.
3885          */
3886         if (conn->type != LE_LINK)
3887                 goto unlock;
3888
3889         if (!ev->status)
3890                 conn->sec_level = conn->pending_sec_level;
3891
3892         clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
3893
3894         if (ev->status && conn->state == BT_CONNECTED) {
3895                 hci_disconnect(conn, HCI_ERROR_AUTH_FAILURE);
3896                 hci_conn_drop(conn);
3897                 goto unlock;
3898         }
3899
3900         if (conn->state == BT_CONFIG) {
3901                 if (!ev->status)
3902                         conn->state = BT_CONNECTED;
3903
3904                 hci_connect_cfm(conn, ev->status);
3905                 hci_conn_drop(conn);
3906         } else {
3907                 hci_auth_cfm(conn, ev->status);
3908
3909                 hci_conn_hold(conn);
3910                 conn->disc_timeout = HCI_DISCONN_TIMEOUT;
3911                 hci_conn_drop(conn);
3912         }
3913
3914 unlock:
3915         hci_dev_unlock(hdev);
3916 }
3917
3918 static u8 hci_get_auth_req(struct hci_conn *conn)
3919 {
3920         /* If remote requests no-bonding follow that lead */
3921         if (conn->remote_auth == HCI_AT_NO_BONDING ||
3922             conn->remote_auth == HCI_AT_NO_BONDING_MITM)
3923                 return conn->remote_auth | (conn->auth_type & 0x01);
3924
3925         /* If both remote and local have enough IO capabilities, require
3926          * MITM protection
3927          */
3928         if (conn->remote_cap != HCI_IO_NO_INPUT_OUTPUT &&
3929             conn->io_capability != HCI_IO_NO_INPUT_OUTPUT)
3930                 return conn->remote_auth | 0x01;
3931
3932         /* No MITM protection possible so ignore remote requirement */
3933         return (conn->remote_auth & ~0x01) | (conn->auth_type & 0x01);
3934 }
3935
3936 static u8 bredr_oob_data_present(struct hci_conn *conn)
3937 {
3938         struct hci_dev *hdev = conn->hdev;
3939         struct oob_data *data;
3940
3941         data = hci_find_remote_oob_data(hdev, &conn->dst, BDADDR_BREDR);
3942         if (!data)
3943                 return 0x00;
3944
3945         if (bredr_sc_enabled(hdev)) {
3946                 /* When Secure Connections is enabled, then just
3947                  * return the present value stored with the OOB
3948                  * data. The stored value contains the right present
3949                  * information. However it can only be trusted when
3950                  * not in Secure Connection Only mode.
3951                  */
3952                 if (!hci_dev_test_flag(hdev, HCI_SC_ONLY))
3953                         return data->present;
3954
3955                 /* When Secure Connections Only mode is enabled, then
3956                  * the P-256 values are required. If they are not
3957                  * available, then do not declare that OOB data is
3958                  * present.
3959                  */
3960                 if (!memcmp(data->rand256, ZERO_KEY, 16) ||
3961                     !memcmp(data->hash256, ZERO_KEY, 16))
3962                         return 0x00;
3963
3964                 return 0x02;
3965         }
3966
3967         /* When Secure Connections is not enabled or actually
3968          * not supported by the hardware, then check that if
3969          * P-192 data values are present.
3970          */
3971         if (!memcmp(data->rand192, ZERO_KEY, 16) ||
3972             !memcmp(data->hash192, ZERO_KEY, 16))
3973                 return 0x00;
3974
3975         return 0x01;
3976 }
3977
3978 static void hci_io_capa_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
3979 {
3980         struct hci_ev_io_capa_request *ev = (void *) skb->data;
3981         struct hci_conn *conn;
3982
3983         BT_DBG("%s", hdev->name);
3984
3985         hci_dev_lock(hdev);
3986
3987         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3988         if (!conn)
3989                 goto unlock;
3990
3991         hci_conn_hold(conn);
3992
3993         if (!hci_dev_test_flag(hdev, HCI_MGMT))
3994                 goto unlock;
3995
3996         /* Allow pairing if we're pairable, the initiators of the
3997          * pairing or if the remote is not requesting bonding.
3998          */
3999         if (hci_dev_test_flag(hdev, HCI_BONDABLE) ||
4000             test_bit(HCI_CONN_AUTH_INITIATOR, &conn->flags) ||
4001             (conn->remote_auth & ~0x01) == HCI_AT_NO_BONDING) {
4002                 struct hci_cp_io_capability_reply cp;
4003
4004                 bacpy(&cp.bdaddr, &ev->bdaddr);
4005                 /* Change the IO capability from KeyboardDisplay
4006                  * to DisplayYesNo as it is not supported by BT spec. */
4007                 cp.capability = (conn->io_capability == 0x04) ?
4008                                 HCI_IO_DISPLAY_YESNO : conn->io_capability;
4009
4010                 /* If we are initiators, there is no remote information yet */
4011                 if (conn->remote_auth == 0xff) {
4012                         /* Request MITM protection if our IO caps allow it
4013                          * except for the no-bonding case.
4014                          */
4015                         if (conn->io_capability != HCI_IO_NO_INPUT_OUTPUT &&
4016                             conn->auth_type != HCI_AT_NO_BONDING)
4017                                 conn->auth_type |= 0x01;
4018                 } else {
4019                         conn->auth_type = hci_get_auth_req(conn);
4020                 }
4021
4022                 /* If we're not bondable, force one of the non-bondable
4023                  * authentication requirement values.
4024                  */
4025                 if (!hci_dev_test_flag(hdev, HCI_BONDABLE))
4026                         conn->auth_type &= HCI_AT_NO_BONDING_MITM;
4027
4028                 cp.authentication = conn->auth_type;
4029                 cp.oob_data = bredr_oob_data_present(conn);
4030
4031                 hci_send_cmd(hdev, HCI_OP_IO_CAPABILITY_REPLY,
4032                              sizeof(cp), &cp);
4033         } else {
4034                 struct hci_cp_io_capability_neg_reply cp;
4035
4036                 bacpy(&cp.bdaddr, &ev->bdaddr);
4037                 cp.reason = HCI_ERROR_PAIRING_NOT_ALLOWED;
4038
4039                 hci_send_cmd(hdev, HCI_OP_IO_CAPABILITY_NEG_REPLY,
4040                              sizeof(cp), &cp);
4041         }
4042
4043 unlock:
4044         hci_dev_unlock(hdev);
4045 }
4046
4047 static void hci_io_capa_reply_evt(struct hci_dev *hdev, struct sk_buff *skb)
4048 {
4049         struct hci_ev_io_capa_reply *ev = (void *) skb->data;
4050         struct hci_conn *conn;
4051
4052         BT_DBG("%s", hdev->name);
4053
4054         hci_dev_lock(hdev);
4055
4056         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
4057         if (!conn)
4058                 goto unlock;
4059
4060         conn->remote_cap = ev->capability;
4061         conn->remote_auth = ev->authentication;
4062
4063 unlock:
4064         hci_dev_unlock(hdev);
4065 }
4066
4067 static void hci_user_confirm_request_evt(struct hci_dev *hdev,
4068                                          struct sk_buff *skb)
4069 {
4070         struct hci_ev_user_confirm_req *ev = (void *) skb->data;
4071         int loc_mitm, rem_mitm, confirm_hint = 0;
4072         struct hci_conn *conn;
4073
4074         BT_DBG("%s", hdev->name);
4075
4076         hci_dev_lock(hdev);
4077
4078         if (!hci_dev_test_flag(hdev, HCI_MGMT))
4079                 goto unlock;
4080
4081         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
4082         if (!conn)
4083                 goto unlock;
4084
4085         loc_mitm = (conn->auth_type & 0x01);
4086         rem_mitm = (conn->remote_auth & 0x01);
4087
4088         /* If we require MITM but the remote device can't provide that
4089          * (it has NoInputNoOutput) then reject the confirmation
4090          * request. We check the security level here since it doesn't
4091          * necessarily match conn->auth_type.
4092          */
4093         if (conn->pending_sec_level > BT_SECURITY_MEDIUM &&
4094             conn->remote_cap == HCI_IO_NO_INPUT_OUTPUT) {
4095                 BT_DBG("Rejecting request: remote device can't provide MITM");
4096                 hci_send_cmd(hdev, HCI_OP_USER_CONFIRM_NEG_REPLY,
4097                              sizeof(ev->bdaddr), &ev->bdaddr);
4098                 goto unlock;
4099         }
4100
4101         /* If no side requires MITM protection; auto-accept */
4102         if ((!loc_mitm || conn->remote_cap == HCI_IO_NO_INPUT_OUTPUT) &&
4103             (!rem_mitm || conn->io_capability == HCI_IO_NO_INPUT_OUTPUT)) {
4104
4105                 /* If we're not the initiators request authorization to
4106                  * proceed from user space (mgmt_user_confirm with
4107                  * confirm_hint set to 1). The exception is if neither
4108                  * side had MITM or if the local IO capability is
4109                  * NoInputNoOutput, in which case we do auto-accept
4110                  */
4111                 if (!test_bit(HCI_CONN_AUTH_PEND, &conn->flags) &&
4112                     conn->io_capability != HCI_IO_NO_INPUT_OUTPUT &&
4113                     (loc_mitm || rem_mitm)) {
4114                         BT_DBG("Confirming auto-accept as acceptor");
4115                         confirm_hint = 1;
4116                         goto confirm;
4117                 }
4118
4119                 BT_DBG("Auto-accept of user confirmation with %ums delay",
4120                        hdev->auto_accept_delay);
4121
4122                 if (hdev->auto_accept_delay > 0) {
4123                         int delay = msecs_to_jiffies(hdev->auto_accept_delay);
4124                         queue_delayed_work(conn->hdev->workqueue,
4125                                            &conn->auto_accept_work, delay);
4126                         goto unlock;
4127                 }
4128
4129                 hci_send_cmd(hdev, HCI_OP_USER_CONFIRM_REPLY,
4130                              sizeof(ev->bdaddr), &ev->bdaddr);
4131                 goto unlock;
4132         }
4133
4134 confirm:
4135         mgmt_user_confirm_request(hdev, &ev->bdaddr, ACL_LINK, 0,
4136                                   le32_to_cpu(ev->passkey), confirm_hint);
4137
4138 unlock:
4139         hci_dev_unlock(hdev);
4140 }
4141
4142 static void hci_user_passkey_request_evt(struct hci_dev *hdev,
4143                                          struct sk_buff *skb)
4144 {
4145         struct hci_ev_user_passkey_req *ev = (void *) skb->data;
4146
4147         BT_DBG("%s", hdev->name);
4148
4149         if (hci_dev_test_flag(hdev, HCI_MGMT))
4150                 mgmt_user_passkey_request(hdev, &ev->bdaddr, ACL_LINK, 0);
4151 }
4152
4153 static void hci_user_passkey_notify_evt(struct hci_dev *hdev,
4154                                         struct sk_buff *skb)
4155 {
4156         struct hci_ev_user_passkey_notify *ev = (void *) skb->data;
4157         struct hci_conn *conn;
4158
4159         BT_DBG("%s", hdev->name);
4160
4161         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
4162         if (!conn)
4163                 return;
4164
4165         conn->passkey_notify = __le32_to_cpu(ev->passkey);
4166         conn->passkey_entered = 0;
4167
4168         if (hci_dev_test_flag(hdev, HCI_MGMT))
4169                 mgmt_user_passkey_notify(hdev, &conn->dst, conn->type,
4170                                          conn->dst_type, conn->passkey_notify,
4171                                          conn->passkey_entered);
4172 }
4173
4174 static void hci_keypress_notify_evt(struct hci_dev *hdev, struct sk_buff *skb)
4175 {
4176         struct hci_ev_keypress_notify *ev = (void *) skb->data;
4177         struct hci_conn *conn;
4178
4179         BT_DBG("%s", hdev->name);
4180
4181         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
4182         if (!conn)
4183                 return;
4184
4185         switch (ev->type) {
4186         case HCI_KEYPRESS_STARTED:
4187                 conn->passkey_entered = 0;
4188                 return;
4189
4190         case HCI_KEYPRESS_ENTERED:
4191                 conn->passkey_entered++;
4192                 break;
4193
4194         case HCI_KEYPRESS_ERASED:
4195                 conn->passkey_entered--;
4196                 break;
4197
4198         case HCI_KEYPRESS_CLEARED:
4199                 conn->passkey_entered = 0;
4200                 break;
4201
4202         case HCI_KEYPRESS_COMPLETED:
4203                 return;
4204         }
4205
4206         if (hci_dev_test_flag(hdev, HCI_MGMT))
4207                 mgmt_user_passkey_notify(hdev, &conn->dst, conn->type,
4208                                          conn->dst_type, conn->passkey_notify,
4209                                          conn->passkey_entered);
4210 }
4211
4212 static void hci_simple_pair_complete_evt(struct hci_dev *hdev,
4213                                          struct sk_buff *skb)
4214 {
4215         struct hci_ev_simple_pair_complete *ev = (void *) skb->data;
4216         struct hci_conn *conn;
4217
4218         BT_DBG("%s", hdev->name);
4219
4220         hci_dev_lock(hdev);
4221
4222         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
4223         if (!conn)
4224                 goto unlock;
4225
4226         /* Reset the authentication requirement to unknown */
4227         conn->remote_auth = 0xff;
4228
4229         /* To avoid duplicate auth_failed events to user space we check
4230          * the HCI_CONN_AUTH_PEND flag which will be set if we
4231          * initiated the authentication. A traditional auth_complete
4232          * event gets always produced as initiator and is also mapped to
4233          * the mgmt_auth_failed event */
4234         if (!test_bit(HCI_CONN_AUTH_PEND, &conn->flags) && ev->status)
4235                 mgmt_auth_failed(conn, ev->status);
4236
4237         hci_conn_drop(conn);
4238
4239 unlock:
4240         hci_dev_unlock(hdev);
4241 }
4242
4243 static void hci_remote_host_features_evt(struct hci_dev *hdev,
4244                                          struct sk_buff *skb)
4245 {
4246         struct hci_ev_remote_host_features *ev = (void *) skb->data;
4247         struct inquiry_entry *ie;
4248         struct hci_conn *conn;
4249
4250         BT_DBG("%s", hdev->name);
4251
4252         hci_dev_lock(hdev);
4253
4254         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
4255         if (conn)
4256                 memcpy(conn->features[1], ev->features, 8);
4257
4258         ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr);
4259         if (ie)
4260                 ie->data.ssp_mode = (ev->features[0] & LMP_HOST_SSP);
4261
4262         hci_dev_unlock(hdev);
4263 }
4264
4265 static void hci_remote_oob_data_request_evt(struct hci_dev *hdev,
4266                                             struct sk_buff *skb)
4267 {
4268         struct hci_ev_remote_oob_data_request *ev = (void *) skb->data;
4269         struct oob_data *data;
4270
4271         BT_DBG("%s", hdev->name);
4272
4273         hci_dev_lock(hdev);
4274
4275         if (!hci_dev_test_flag(hdev, HCI_MGMT))
4276                 goto unlock;
4277
4278         data = hci_find_remote_oob_data(hdev, &ev->bdaddr, BDADDR_BREDR);
4279         if (!data) {
4280                 struct hci_cp_remote_oob_data_neg_reply cp;
4281
4282                 bacpy(&cp.bdaddr, &ev->bdaddr);
4283                 hci_send_cmd(hdev, HCI_OP_REMOTE_OOB_DATA_NEG_REPLY,
4284                              sizeof(cp), &cp);
4285                 goto unlock;
4286         }
4287
4288         if (bredr_sc_enabled(hdev)) {
4289                 struct hci_cp_remote_oob_ext_data_reply cp;
4290
4291                 bacpy(&cp.bdaddr, &ev->bdaddr);
4292                 if (hci_dev_test_flag(hdev, HCI_SC_ONLY)) {
4293                         memset(cp.hash192, 0, sizeof(cp.hash192));
4294                         memset(cp.rand192, 0, sizeof(cp.rand192));
4295                 } else {
4296                         memcpy(cp.hash192, data->hash192, sizeof(cp.hash192));
4297                         memcpy(cp.rand192, data->rand192, sizeof(cp.rand192));
4298                 }
4299                 memcpy(cp.hash256, data->hash256, sizeof(cp.hash256));
4300                 memcpy(cp.rand256, data->rand256, sizeof(cp.rand256));
4301
4302                 hci_send_cmd(hdev, HCI_OP_REMOTE_OOB_EXT_DATA_REPLY,
4303                              sizeof(cp), &cp);
4304         } else {
4305                 struct hci_cp_remote_oob_data_reply cp;
4306
4307                 bacpy(&cp.bdaddr, &ev->bdaddr);
4308                 memcpy(cp.hash, data->hash192, sizeof(cp.hash));
4309                 memcpy(cp.rand, data->rand192, sizeof(cp.rand));
4310
4311                 hci_send_cmd(hdev, HCI_OP_REMOTE_OOB_DATA_REPLY,
4312                              sizeof(cp), &cp);
4313         }
4314
4315 unlock:
4316         hci_dev_unlock(hdev);
4317 }
4318
4319 #if IS_ENABLED(CONFIG_BT_HS)
4320 static void hci_chan_selected_evt(struct hci_dev *hdev, struct sk_buff *skb)
4321 {
4322         struct hci_ev_channel_selected *ev = (void *)skb->data;
4323         struct hci_conn *hcon;
4324
4325         BT_DBG("%s handle 0x%2.2x", hdev->name, ev->phy_handle);
4326
4327         skb_pull(skb, sizeof(*ev));
4328
4329         hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle);
4330         if (!hcon)
4331                 return;
4332
4333         amp_read_loc_assoc_final_data(hdev, hcon);
4334 }
4335
4336 static void hci_phy_link_complete_evt(struct hci_dev *hdev,
4337                                       struct sk_buff *skb)
4338 {
4339         struct hci_ev_phy_link_complete *ev = (void *) skb->data;
4340         struct hci_conn *hcon, *bredr_hcon;
4341
4342         BT_DBG("%s handle 0x%2.2x status 0x%2.2x", hdev->name, ev->phy_handle,
4343                ev->status);
4344
4345         hci_dev_lock(hdev);
4346
4347         hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle);
4348         if (!hcon) {
4349                 hci_dev_unlock(hdev);
4350                 return;
4351         }
4352
4353         if (ev->status) {
4354                 hci_conn_del(hcon);
4355                 hci_dev_unlock(hdev);
4356                 return;
4357         }
4358
4359         bredr_hcon = hcon->amp_mgr->l2cap_conn->hcon;
4360
4361         hcon->state = BT_CONNECTED;
4362         bacpy(&hcon->dst, &bredr_hcon->dst);
4363
4364         hci_conn_hold(hcon);
4365         hcon->disc_timeout = HCI_DISCONN_TIMEOUT;
4366         hci_conn_drop(hcon);
4367
4368         hci_debugfs_create_conn(hcon);
4369         hci_conn_add_sysfs(hcon);
4370
4371         amp_physical_cfm(bredr_hcon, hcon);
4372
4373         hci_dev_unlock(hdev);
4374 }
4375
4376 static void hci_loglink_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
4377 {
4378         struct hci_ev_logical_link_complete *ev = (void *) skb->data;
4379         struct hci_conn *hcon;
4380         struct hci_chan *hchan;
4381         struct amp_mgr *mgr;
4382
4383         BT_DBG("%s log_handle 0x%4.4x phy_handle 0x%2.2x status 0x%2.2x",
4384                hdev->name, le16_to_cpu(ev->handle), ev->phy_handle,
4385                ev->status);
4386
4387         hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle);
4388         if (!hcon)
4389                 return;
4390
4391         /* Create AMP hchan */
4392         hchan = hci_chan_create(hcon);
4393         if (!hchan)
4394                 return;
4395
4396         hchan->handle = le16_to_cpu(ev->handle);
4397
4398         BT_DBG("hcon %p mgr %p hchan %p", hcon, hcon->amp_mgr, hchan);
4399
4400         mgr = hcon->amp_mgr;
4401         if (mgr && mgr->bredr_chan) {
4402                 struct l2cap_chan *bredr_chan = mgr->bredr_chan;
4403
4404                 l2cap_chan_lock(bredr_chan);
4405
4406                 bredr_chan->conn->mtu = hdev->block_mtu;
4407                 l2cap_logical_cfm(bredr_chan, hchan, 0);
4408                 hci_conn_hold(hcon);
4409
4410                 l2cap_chan_unlock(bredr_chan);
4411         }
4412 }
4413
4414 static void hci_disconn_loglink_complete_evt(struct hci_dev *hdev,
4415                                              struct sk_buff *skb)
4416 {
4417         struct hci_ev_disconn_logical_link_complete *ev = (void *) skb->data;
4418         struct hci_chan *hchan;
4419
4420         BT_DBG("%s log handle 0x%4.4x status 0x%2.2x", hdev->name,
4421                le16_to_cpu(ev->handle), ev->status);
4422
4423         if (ev->status)
4424                 return;
4425
4426         hci_dev_lock(hdev);
4427
4428         hchan = hci_chan_lookup_handle(hdev, le16_to_cpu(ev->handle));
4429         if (!hchan)
4430                 goto unlock;
4431
4432         amp_destroy_logical_link(hchan, ev->reason);
4433
4434 unlock:
4435         hci_dev_unlock(hdev);
4436 }
4437
4438 static void hci_disconn_phylink_complete_evt(struct hci_dev *hdev,
4439                                              struct sk_buff *skb)
4440 {
4441         struct hci_ev_disconn_phy_link_complete *ev = (void *) skb->data;
4442         struct hci_conn *hcon;
4443
4444         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
4445
4446         if (ev->status)
4447                 return;
4448
4449         hci_dev_lock(hdev);
4450
4451         hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle);
4452         if (hcon) {
4453                 hcon->state = BT_CLOSED;
4454                 hci_conn_del(hcon);
4455         }
4456
4457         hci_dev_unlock(hdev);
4458 }
4459 #endif
4460
4461 static void hci_le_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
4462 {
4463         struct hci_ev_le_conn_complete *ev = (void *) skb->data;
4464         struct hci_conn_params *params;
4465         struct hci_conn *conn;
4466         struct smp_irk *irk;
4467         u8 addr_type;
4468
4469         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
4470
4471         hci_dev_lock(hdev);
4472
4473         /* All controllers implicitly stop advertising in the event of a
4474          * connection, so ensure that the state bit is cleared.
4475          */
4476         hci_dev_clear_flag(hdev, HCI_LE_ADV);
4477
4478         conn = hci_lookup_le_connect(hdev);
4479         if (!conn) {
4480                 conn = hci_conn_add(hdev, LE_LINK, &ev->bdaddr, ev->role);
4481                 if (!conn) {
4482                         BT_ERR("No memory for new connection");
4483                         goto unlock;
4484                 }
4485
4486                 conn->dst_type = ev->bdaddr_type;
4487
4488                 /* If we didn't have a hci_conn object previously
4489                  * but we're in master role this must be something
4490                  * initiated using a white list. Since white list based
4491                  * connections are not "first class citizens" we don't
4492                  * have full tracking of them. Therefore, we go ahead
4493                  * with a "best effort" approach of determining the
4494                  * initiator address based on the HCI_PRIVACY flag.
4495                  */
4496                 if (conn->out) {
4497                         conn->resp_addr_type = ev->bdaddr_type;
4498                         bacpy(&conn->resp_addr, &ev->bdaddr);
4499                         if (hci_dev_test_flag(hdev, HCI_PRIVACY)) {
4500                                 conn->init_addr_type = ADDR_LE_DEV_RANDOM;
4501                                 bacpy(&conn->init_addr, &hdev->rpa);
4502                         } else {
4503                                 hci_copy_identity_address(hdev,
4504                                                           &conn->init_addr,
4505                                                           &conn->init_addr_type);
4506                         }
4507                 }
4508         } else {
4509                 cancel_delayed_work(&conn->le_conn_timeout);
4510         }
4511
4512         if (!conn->out) {
4513                 /* Set the responder (our side) address type based on
4514                  * the advertising address type.
4515                  */
4516                 conn->resp_addr_type = hdev->adv_addr_type;
4517                 if (hdev->adv_addr_type == ADDR_LE_DEV_RANDOM)
4518                         bacpy(&conn->resp_addr, &hdev->random_addr);
4519                 else
4520                         bacpy(&conn->resp_addr, &hdev->bdaddr);
4521
4522                 conn->init_addr_type = ev->bdaddr_type;
4523                 bacpy(&conn->init_addr, &ev->bdaddr);
4524
4525                 /* For incoming connections, set the default minimum
4526                  * and maximum connection interval. They will be used
4527                  * to check if the parameters are in range and if not
4528                  * trigger the connection update procedure.
4529                  */
4530                 conn->le_conn_min_interval = hdev->le_conn_min_interval;
4531                 conn->le_conn_max_interval = hdev->le_conn_max_interval;
4532         }
4533
4534         /* Lookup the identity address from the stored connection
4535          * address and address type.
4536          *
4537          * When establishing connections to an identity address, the
4538          * connection procedure will store the resolvable random
4539          * address first. Now if it can be converted back into the
4540          * identity address, start using the identity address from
4541          * now on.
4542          */
4543         irk = hci_get_irk(hdev, &conn->dst, conn->dst_type);
4544         if (irk) {
4545                 bacpy(&conn->dst, &irk->bdaddr);
4546                 conn->dst_type = irk->addr_type;
4547         }
4548
4549         if (ev->status) {
4550                 hci_le_conn_failed(conn, ev->status);
4551                 goto unlock;
4552         }
4553
4554         if (conn->dst_type == ADDR_LE_DEV_PUBLIC)
4555                 addr_type = BDADDR_LE_PUBLIC;
4556         else
4557                 addr_type = BDADDR_LE_RANDOM;
4558
4559         /* Drop the connection if the device is blocked */
4560         if (hci_bdaddr_list_lookup(&hdev->blacklist, &conn->dst, addr_type)) {
4561                 hci_conn_drop(conn);
4562                 goto unlock;
4563         }
4564
4565         if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags))
4566                 mgmt_device_connected(hdev, conn, 0, NULL, 0);
4567
4568         conn->sec_level = BT_SECURITY_LOW;
4569         conn->handle = __le16_to_cpu(ev->handle);
4570         conn->state = BT_CONFIG;
4571
4572         conn->le_conn_interval = le16_to_cpu(ev->interval);
4573         conn->le_conn_latency = le16_to_cpu(ev->latency);
4574         conn->le_supv_timeout = le16_to_cpu(ev->supervision_timeout);
4575
4576         hci_debugfs_create_conn(conn);
4577         hci_conn_add_sysfs(conn);
4578
4579         if (!ev->status) {
4580                 /* The remote features procedure is defined for master
4581                  * role only. So only in case of an initiated connection
4582                  * request the remote features.
4583                  *
4584                  * If the local controller supports slave-initiated features
4585                  * exchange, then requesting the remote features in slave
4586                  * role is possible. Otherwise just transition into the
4587                  * connected state without requesting the remote features.
4588                  */
4589                 if (conn->out ||
4590                     (hdev->le_features[0] & HCI_LE_SLAVE_FEATURES)) {
4591                         struct hci_cp_le_read_remote_features cp;
4592
4593                         cp.handle = __cpu_to_le16(conn->handle);
4594
4595                         hci_send_cmd(hdev, HCI_OP_LE_READ_REMOTE_FEATURES,
4596                                      sizeof(cp), &cp);
4597
4598                         hci_conn_hold(conn);
4599                 } else {
4600                         conn->state = BT_CONNECTED;
4601                         hci_connect_cfm(conn, ev->status);
4602                 }
4603         } else {
4604                 hci_connect_cfm(conn, ev->status);
4605         }
4606
4607         params = hci_pend_le_action_lookup(&hdev->pend_le_conns, &conn->dst,
4608                                            conn->dst_type);
4609         if (params) {
4610                 list_del_init(&params->action);
4611                 if (params->conn) {
4612                         hci_conn_drop(params->conn);
4613                         hci_conn_put(params->conn);
4614                         params->conn = NULL;
4615                 }
4616         }
4617
4618 unlock:
4619         hci_update_background_scan(hdev);
4620         hci_dev_unlock(hdev);
4621 }
4622
4623 static void hci_le_conn_update_complete_evt(struct hci_dev *hdev,
4624                                             struct sk_buff *skb)
4625 {
4626         struct hci_ev_le_conn_update_complete *ev = (void *) skb->data;
4627         struct hci_conn *conn;
4628
4629         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
4630
4631         if (ev->status)
4632                 return;
4633
4634         hci_dev_lock(hdev);
4635
4636         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
4637         if (conn) {
4638                 conn->le_conn_interval = le16_to_cpu(ev->interval);
4639                 conn->le_conn_latency = le16_to_cpu(ev->latency);
4640                 conn->le_supv_timeout = le16_to_cpu(ev->supervision_timeout);
4641         }
4642
4643         hci_dev_unlock(hdev);
4644 }
4645
4646 /* This function requires the caller holds hdev->lock */
4647 static struct hci_conn *check_pending_le_conn(struct hci_dev *hdev,
4648                                               bdaddr_t *addr,
4649                                               u8 addr_type, u8 adv_type)
4650 {
4651         struct hci_conn *conn;
4652         struct hci_conn_params *params;
4653
4654         /* If the event is not connectable don't proceed further */
4655         if (adv_type != LE_ADV_IND && adv_type != LE_ADV_DIRECT_IND)
4656                 return NULL;
4657
4658         /* Ignore if the device is blocked */
4659         if (hci_bdaddr_list_lookup(&hdev->blacklist, addr, addr_type))
4660                 return NULL;
4661
4662         /* Most controller will fail if we try to create new connections
4663          * while we have an existing one in slave role.
4664          */
4665         if (hdev->conn_hash.le_num_slave > 0)
4666                 return NULL;
4667
4668         /* If we're not connectable only connect devices that we have in
4669          * our pend_le_conns list.
4670          */
4671         params = hci_pend_le_action_lookup(&hdev->pend_le_conns, addr,
4672                                            addr_type);
4673         if (!params)
4674                 return NULL;
4675
4676         if (!params->explicit_connect) {
4677                 switch (params->auto_connect) {
4678                 case HCI_AUTO_CONN_DIRECT:
4679                         /* Only devices advertising with ADV_DIRECT_IND are
4680                          * triggering a connection attempt. This is allowing
4681                          * incoming connections from slave devices.
4682                          */
4683                         if (adv_type != LE_ADV_DIRECT_IND)
4684                                 return NULL;
4685                         break;
4686                 case HCI_AUTO_CONN_ALWAYS:
4687                         /* Devices advertising with ADV_IND or ADV_DIRECT_IND
4688                          * are triggering a connection attempt. This means
4689                          * that incoming connectioms from slave device are
4690                          * accepted and also outgoing connections to slave
4691                          * devices are established when found.
4692                          */
4693                         break;
4694                 default:
4695                         return NULL;
4696                 }
4697         }
4698
4699         conn = hci_connect_le(hdev, addr, addr_type, BT_SECURITY_LOW,
4700                               HCI_LE_AUTOCONN_TIMEOUT, HCI_ROLE_MASTER);
4701         if (!IS_ERR(conn)) {
4702                 /* If HCI_AUTO_CONN_EXPLICIT is set, conn is already owned
4703                  * by higher layer that tried to connect, if no then
4704                  * store the pointer since we don't really have any
4705                  * other owner of the object besides the params that
4706                  * triggered it. This way we can abort the connection if
4707                  * the parameters get removed and keep the reference
4708                  * count consistent once the connection is established.
4709                  */
4710
4711                 if (!params->explicit_connect)
4712                         params->conn = hci_conn_get(conn);
4713
4714                 return conn;
4715         }
4716
4717         switch (PTR_ERR(conn)) {
4718         case -EBUSY:
4719                 /* If hci_connect() returns -EBUSY it means there is already
4720                  * an LE connection attempt going on. Since controllers don't
4721                  * support more than one connection attempt at the time, we
4722                  * don't consider this an error case.
4723                  */
4724                 break;
4725         default:
4726                 BT_DBG("Failed to connect: err %ld", PTR_ERR(conn));
4727                 return NULL;
4728         }
4729
4730         return NULL;
4731 }
4732
4733 static void process_adv_report(struct hci_dev *hdev, u8 type, bdaddr_t *bdaddr,
4734                                u8 bdaddr_type, bdaddr_t *direct_addr,
4735                                u8 direct_addr_type, s8 rssi, u8 *data, u8 len)
4736 {
4737         struct discovery_state *d = &hdev->discovery;
4738         struct smp_irk *irk;
4739         struct hci_conn *conn;
4740         bool match;
4741         u32 flags;
4742         u8 *ptr, real_len;
4743
4744         switch (type) {
4745         case LE_ADV_IND:
4746         case LE_ADV_DIRECT_IND:
4747         case LE_ADV_SCAN_IND:
4748         case LE_ADV_NONCONN_IND:
4749         case LE_ADV_SCAN_RSP:
4750                 break;
4751         default:
4752                 BT_ERR_RATELIMITED("Unknown advetising packet type: 0x%02x",
4753                                    type);
4754                 return;
4755         }
4756
4757         /* Find the end of the data in case the report contains padded zero
4758          * bytes at the end causing an invalid length value.
4759          *
4760          * When data is NULL, len is 0 so there is no need for extra ptr
4761          * check as 'ptr < data + 0' is already false in such case.
4762          */
4763         for (ptr = data; ptr < data + len && *ptr; ptr += *ptr + 1) {
4764                 if (ptr + 1 + *ptr > data + len)
4765                         break;
4766         }
4767
4768         real_len = ptr - data;
4769
4770         /* Adjust for actual length */
4771         if (len != real_len) {
4772                 BT_ERR_RATELIMITED("%s advertising data length corrected",
4773                                    hdev->name);
4774                 len = real_len;
4775         }
4776
4777         /* If the direct address is present, then this report is from
4778          * a LE Direct Advertising Report event. In that case it is
4779          * important to see if the address is matching the local
4780          * controller address.
4781          */
4782         if (direct_addr) {
4783                 /* Only resolvable random addresses are valid for these
4784                  * kind of reports and others can be ignored.
4785                  */
4786                 if (!hci_bdaddr_is_rpa(direct_addr, direct_addr_type))
4787                         return;
4788
4789                 /* If the controller is not using resolvable random
4790                  * addresses, then this report can be ignored.
4791                  */
4792                 if (!hci_dev_test_flag(hdev, HCI_PRIVACY))
4793                         return;
4794
4795                 /* If the local IRK of the controller does not match
4796                  * with the resolvable random address provided, then
4797                  * this report can be ignored.
4798                  */
4799                 if (!smp_irk_matches(hdev, hdev->irk, direct_addr))
4800                         return;
4801         }
4802
4803         /* Check if we need to convert to identity address */
4804         irk = hci_get_irk(hdev, bdaddr, bdaddr_type);
4805         if (irk) {
4806                 bdaddr = &irk->bdaddr;
4807                 bdaddr_type = irk->addr_type;
4808         }
4809
4810         /* Check if we have been requested to connect to this device */
4811         conn = check_pending_le_conn(hdev, bdaddr, bdaddr_type, type);
4812         if (conn && type == LE_ADV_IND) {
4813                 /* Store report for later inclusion by
4814                  * mgmt_device_connected
4815                  */
4816                 memcpy(conn->le_adv_data, data, len);
4817                 conn->le_adv_data_len = len;
4818         }
4819
4820         /* Passive scanning shouldn't trigger any device found events,
4821          * except for devices marked as CONN_REPORT for which we do send
4822          * device found events.
4823          */
4824         if (hdev->le_scan_type == LE_SCAN_PASSIVE) {
4825                 if (type == LE_ADV_DIRECT_IND)
4826                         return;
4827
4828                 if (!hci_pend_le_action_lookup(&hdev->pend_le_reports,
4829                                                bdaddr, bdaddr_type))
4830                         return;
4831
4832                 if (type == LE_ADV_NONCONN_IND || type == LE_ADV_SCAN_IND)
4833                         flags = MGMT_DEV_FOUND_NOT_CONNECTABLE;
4834                 else
4835                         flags = 0;
4836                 mgmt_device_found(hdev, bdaddr, LE_LINK, bdaddr_type, NULL,
4837                                   rssi, flags, data, len, NULL, 0);
4838                 return;
4839         }
4840
4841         /* When receiving non-connectable or scannable undirected
4842          * advertising reports, this means that the remote device is
4843          * not connectable and then clearly indicate this in the
4844          * device found event.
4845          *
4846          * When receiving a scan response, then there is no way to
4847          * know if the remote device is connectable or not. However
4848          * since scan responses are merged with a previously seen
4849          * advertising report, the flags field from that report
4850          * will be used.
4851          *
4852          * In the really unlikely case that a controller get confused
4853          * and just sends a scan response event, then it is marked as
4854          * not connectable as well.
4855          */
4856         if (type == LE_ADV_NONCONN_IND || type == LE_ADV_SCAN_IND ||
4857             type == LE_ADV_SCAN_RSP)
4858                 flags = MGMT_DEV_FOUND_NOT_CONNECTABLE;
4859         else
4860                 flags = 0;
4861
4862         /* If there's nothing pending either store the data from this
4863          * event or send an immediate device found event if the data
4864          * should not be stored for later.
4865          */
4866         if (!has_pending_adv_report(hdev)) {
4867                 /* If the report will trigger a SCAN_REQ store it for
4868                  * later merging.
4869                  */
4870                 if (type == LE_ADV_IND || type == LE_ADV_SCAN_IND) {
4871                         store_pending_adv_report(hdev, bdaddr, bdaddr_type,
4872                                                  rssi, flags, data, len);
4873                         return;
4874                 }
4875
4876                 mgmt_device_found(hdev, bdaddr, LE_LINK, bdaddr_type, NULL,
4877                                   rssi, flags, data, len, NULL, 0);
4878                 return;
4879         }
4880
4881         /* Check if the pending report is for the same device as the new one */
4882         match = (!bacmp(bdaddr, &d->last_adv_addr) &&
4883                  bdaddr_type == d->last_adv_addr_type);
4884
4885         /* If the pending data doesn't match this report or this isn't a
4886          * scan response (e.g. we got a duplicate ADV_IND) then force
4887          * sending of the pending data.
4888          */
4889         if (type != LE_ADV_SCAN_RSP || !match) {
4890                 /* Send out whatever is in the cache, but skip duplicates */
4891                 if (!match)
4892                         mgmt_device_found(hdev, &d->last_adv_addr, LE_LINK,
4893                                           d->last_adv_addr_type, NULL,
4894                                           d->last_adv_rssi, d->last_adv_flags,
4895                                           d->last_adv_data,
4896                                           d->last_adv_data_len, NULL, 0);
4897
4898                 /* If the new report will trigger a SCAN_REQ store it for
4899                  * later merging.
4900                  */
4901                 if (type == LE_ADV_IND || type == LE_ADV_SCAN_IND) {
4902                         store_pending_adv_report(hdev, bdaddr, bdaddr_type,
4903                                                  rssi, flags, data, len);
4904                         return;
4905                 }
4906
4907                 /* The advertising reports cannot be merged, so clear
4908                  * the pending report and send out a device found event.
4909                  */
4910                 clear_pending_adv_report(hdev);
4911                 mgmt_device_found(hdev, bdaddr, LE_LINK, bdaddr_type, NULL,
4912                                   rssi, flags, data, len, NULL, 0);
4913                 return;
4914         }
4915
4916         /* If we get here we've got a pending ADV_IND or ADV_SCAN_IND and
4917          * the new event is a SCAN_RSP. We can therefore proceed with
4918          * sending a merged device found event.
4919          */
4920         mgmt_device_found(hdev, &d->last_adv_addr, LE_LINK,
4921                           d->last_adv_addr_type, NULL, rssi, d->last_adv_flags,
4922                           d->last_adv_data, d->last_adv_data_len, data, len);
4923         clear_pending_adv_report(hdev);
4924 }
4925
4926 static void hci_le_adv_report_evt(struct hci_dev *hdev, struct sk_buff *skb)
4927 {
4928         u8 num_reports = skb->data[0];
4929         void *ptr = &skb->data[1];
4930
4931         hci_dev_lock(hdev);
4932
4933         while (num_reports--) {
4934                 struct hci_ev_le_advertising_info *ev = ptr;
4935                 s8 rssi;
4936
4937                 rssi = ev->data[ev->length];
4938                 process_adv_report(hdev, ev->evt_type, &ev->bdaddr,
4939                                    ev->bdaddr_type, NULL, 0, rssi,
4940                                    ev->data, ev->length);
4941
4942                 ptr += sizeof(*ev) + ev->length + 1;
4943         }
4944
4945         hci_dev_unlock(hdev);
4946 }
4947
4948 static void hci_le_remote_feat_complete_evt(struct hci_dev *hdev,
4949                                             struct sk_buff *skb)
4950 {
4951         struct hci_ev_le_remote_feat_complete *ev = (void *)skb->data;
4952         struct hci_conn *conn;
4953
4954         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
4955
4956         hci_dev_lock(hdev);
4957
4958         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
4959         if (conn) {
4960                 if (!ev->status)
4961                         memcpy(conn->features[0], ev->features, 8);
4962
4963                 if (conn->state == BT_CONFIG) {
4964                         __u8 status;
4965
4966                         /* If the local controller supports slave-initiated
4967                          * features exchange, but the remote controller does
4968                          * not, then it is possible that the error code 0x1a
4969                          * for unsupported remote feature gets returned.
4970                          *
4971                          * In this specific case, allow the connection to
4972                          * transition into connected state and mark it as
4973                          * successful.
4974                          */
4975                         if ((hdev->le_features[0] & HCI_LE_SLAVE_FEATURES) &&
4976                             !conn->out && ev->status == 0x1a)
4977                                 status = 0x00;
4978                         else
4979                                 status = ev->status;
4980
4981                         conn->state = BT_CONNECTED;
4982                         hci_connect_cfm(conn, status);
4983                         hci_conn_drop(conn);
4984                 }
4985         }
4986
4987         hci_dev_unlock(hdev);
4988 }
4989
4990 static void hci_le_ltk_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
4991 {
4992         struct hci_ev_le_ltk_req *ev = (void *) skb->data;
4993         struct hci_cp_le_ltk_reply cp;
4994         struct hci_cp_le_ltk_neg_reply neg;
4995         struct hci_conn *conn;
4996         struct smp_ltk *ltk;
4997
4998         BT_DBG("%s handle 0x%4.4x", hdev->name, __le16_to_cpu(ev->handle));
4999
5000         hci_dev_lock(hdev);
5001
5002         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
5003         if (conn == NULL)
5004                 goto not_found;
5005
5006         ltk = hci_find_ltk(hdev, &conn->dst, conn->dst_type, conn->role);
5007         if (!ltk)
5008                 goto not_found;
5009
5010         if (smp_ltk_is_sc(ltk)) {
5011                 /* With SC both EDiv and Rand are set to zero */
5012                 if (ev->ediv || ev->rand)
5013                         goto not_found;
5014         } else {
5015                 /* For non-SC keys check that EDiv and Rand match */
5016                 if (ev->ediv != ltk->ediv || ev->rand != ltk->rand)
5017                         goto not_found;
5018         }
5019
5020         memcpy(cp.ltk, ltk->val, ltk->enc_size);
5021         memset(cp.ltk + ltk->enc_size, 0, sizeof(cp.ltk) - ltk->enc_size);
5022         cp.handle = cpu_to_le16(conn->handle);
5023
5024         conn->pending_sec_level = smp_ltk_sec_level(ltk);
5025
5026         conn->enc_key_size = ltk->enc_size;
5027
5028         hci_send_cmd(hdev, HCI_OP_LE_LTK_REPLY, sizeof(cp), &cp);
5029
5030         /* Ref. Bluetooth Core SPEC pages 1975 and 2004. STK is a
5031          * temporary key used to encrypt a connection following
5032          * pairing. It is used during the Encrypted Session Setup to
5033          * distribute the keys. Later, security can be re-established
5034          * using a distributed LTK.
5035          */
5036         if (ltk->type == SMP_STK) {
5037                 set_bit(HCI_CONN_STK_ENCRYPT, &conn->flags);
5038                 list_del_rcu(&ltk->list);
5039                 kfree_rcu(ltk, rcu);
5040         } else {
5041                 clear_bit(HCI_CONN_STK_ENCRYPT, &conn->flags);
5042         }
5043
5044         hci_dev_unlock(hdev);
5045
5046         return;
5047
5048 not_found:
5049         neg.handle = ev->handle;
5050         hci_send_cmd(hdev, HCI_OP_LE_LTK_NEG_REPLY, sizeof(neg), &neg);
5051         hci_dev_unlock(hdev);
5052 }
5053
5054 static void send_conn_param_neg_reply(struct hci_dev *hdev, u16 handle,
5055                                       u8 reason)
5056 {
5057         struct hci_cp_le_conn_param_req_neg_reply cp;
5058
5059         cp.handle = cpu_to_le16(handle);
5060         cp.reason = reason;
5061
5062         hci_send_cmd(hdev, HCI_OP_LE_CONN_PARAM_REQ_NEG_REPLY, sizeof(cp),
5063                      &cp);
5064 }
5065
5066 static void hci_le_remote_conn_param_req_evt(struct hci_dev *hdev,
5067                                              struct sk_buff *skb)
5068 {
5069         struct hci_ev_le_remote_conn_param_req *ev = (void *) skb->data;
5070         struct hci_cp_le_conn_param_req_reply cp;
5071         struct hci_conn *hcon;
5072         u16 handle, min, max, latency, timeout;
5073
5074         handle = le16_to_cpu(ev->handle);
5075         min = le16_to_cpu(ev->interval_min);
5076         max = le16_to_cpu(ev->interval_max);
5077         latency = le16_to_cpu(ev->latency);
5078         timeout = le16_to_cpu(ev->timeout);
5079
5080         hcon = hci_conn_hash_lookup_handle(hdev, handle);
5081         if (!hcon || hcon->state != BT_CONNECTED)
5082                 return send_conn_param_neg_reply(hdev, handle,
5083                                                  HCI_ERROR_UNKNOWN_CONN_ID);
5084
5085         if (hci_check_conn_params(min, max, latency, timeout))
5086                 return send_conn_param_neg_reply(hdev, handle,
5087                                                  HCI_ERROR_INVALID_LL_PARAMS);
5088
5089         if (hcon->role == HCI_ROLE_MASTER) {
5090                 struct hci_conn_params *params;
5091                 u8 store_hint;
5092
5093                 hci_dev_lock(hdev);
5094
5095                 params = hci_conn_params_lookup(hdev, &hcon->dst,
5096                                                 hcon->dst_type);
5097                 if (params) {
5098                         params->conn_min_interval = min;
5099                         params->conn_max_interval = max;
5100                         params->conn_latency = latency;
5101                         params->supervision_timeout = timeout;
5102                         store_hint = 0x01;
5103                 } else{
5104                         store_hint = 0x00;
5105                 }
5106
5107                 hci_dev_unlock(hdev);
5108
5109                 mgmt_new_conn_param(hdev, &hcon->dst, hcon->dst_type,
5110                                     store_hint, min, max, latency, timeout);
5111         }
5112
5113         cp.handle = ev->handle;
5114         cp.interval_min = ev->interval_min;
5115         cp.interval_max = ev->interval_max;
5116         cp.latency = ev->latency;
5117         cp.timeout = ev->timeout;
5118         cp.min_ce_len = 0;
5119         cp.max_ce_len = 0;
5120
5121         hci_send_cmd(hdev, HCI_OP_LE_CONN_PARAM_REQ_REPLY, sizeof(cp), &cp);
5122 }
5123
5124 static void hci_le_direct_adv_report_evt(struct hci_dev *hdev,
5125                                          struct sk_buff *skb)
5126 {
5127         u8 num_reports = skb->data[0];
5128         void *ptr = &skb->data[1];
5129
5130         hci_dev_lock(hdev);
5131
5132         while (num_reports--) {
5133                 struct hci_ev_le_direct_adv_info *ev = ptr;
5134
5135                 process_adv_report(hdev, ev->evt_type, &ev->bdaddr,
5136                                    ev->bdaddr_type, &ev->direct_addr,
5137                                    ev->direct_addr_type, ev->rssi, NULL, 0);
5138
5139                 ptr += sizeof(*ev);
5140         }
5141
5142         hci_dev_unlock(hdev);
5143 }
5144
5145 static void hci_le_meta_evt(struct hci_dev *hdev, struct sk_buff *skb)
5146 {
5147         struct hci_ev_le_meta *le_ev = (void *) skb->data;
5148
5149         skb_pull(skb, sizeof(*le_ev));
5150
5151         switch (le_ev->subevent) {
5152         case HCI_EV_LE_CONN_COMPLETE:
5153                 hci_le_conn_complete_evt(hdev, skb);
5154                 break;
5155
5156         case HCI_EV_LE_CONN_UPDATE_COMPLETE:
5157                 hci_le_conn_update_complete_evt(hdev, skb);
5158                 break;
5159
5160         case HCI_EV_LE_ADVERTISING_REPORT:
5161                 hci_le_adv_report_evt(hdev, skb);
5162                 break;
5163
5164         case HCI_EV_LE_REMOTE_FEAT_COMPLETE:
5165                 hci_le_remote_feat_complete_evt(hdev, skb);
5166                 break;
5167
5168         case HCI_EV_LE_LTK_REQ:
5169                 hci_le_ltk_request_evt(hdev, skb);
5170                 break;
5171
5172         case HCI_EV_LE_REMOTE_CONN_PARAM_REQ:
5173                 hci_le_remote_conn_param_req_evt(hdev, skb);
5174                 break;
5175
5176         case HCI_EV_LE_DIRECT_ADV_REPORT:
5177                 hci_le_direct_adv_report_evt(hdev, skb);
5178                 break;
5179
5180         default:
5181                 break;
5182         }
5183 }
5184
5185 static bool hci_get_cmd_complete(struct hci_dev *hdev, u16 opcode,
5186                                  u8 event, struct sk_buff *skb)
5187 {
5188         struct hci_ev_cmd_complete *ev;
5189         struct hci_event_hdr *hdr;
5190
5191         if (!skb)
5192                 return false;
5193
5194         if (skb->len < sizeof(*hdr)) {
5195                 BT_ERR("Too short HCI event");
5196                 return false;
5197         }
5198
5199         hdr = (void *) skb->data;
5200         skb_pull(skb, HCI_EVENT_HDR_SIZE);
5201
5202         if (event) {
5203                 if (hdr->evt != event)
5204                         return false;
5205                 return true;
5206         }
5207
5208         if (hdr->evt != HCI_EV_CMD_COMPLETE) {
5209                 BT_DBG("Last event is not cmd complete (0x%2.2x)", hdr->evt);
5210                 return false;
5211         }
5212
5213         if (skb->len < sizeof(*ev)) {
5214                 BT_ERR("Too short cmd_complete event");
5215                 return false;
5216         }
5217
5218         ev = (void *) skb->data;
5219         skb_pull(skb, sizeof(*ev));
5220
5221         if (opcode != __le16_to_cpu(ev->opcode)) {
5222                 BT_DBG("opcode doesn't match (0x%2.2x != 0x%2.2x)", opcode,
5223                        __le16_to_cpu(ev->opcode));
5224                 return false;
5225         }
5226
5227         return true;
5228 }
5229
5230 void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb)
5231 {
5232         struct hci_event_hdr *hdr = (void *) skb->data;
5233         hci_req_complete_t req_complete = NULL;
5234         hci_req_complete_skb_t req_complete_skb = NULL;
5235         struct sk_buff *orig_skb = NULL;
5236         u8 status = 0, event = hdr->evt, req_evt = 0;
5237         u16 opcode = HCI_OP_NOP;
5238
5239         if (hdev->sent_cmd && bt_cb(hdev->sent_cmd)->hci.req_event == event) {
5240                 struct hci_command_hdr *cmd_hdr = (void *) hdev->sent_cmd->data;
5241                 opcode = __le16_to_cpu(cmd_hdr->opcode);
5242                 hci_req_cmd_complete(hdev, opcode, status, &req_complete,
5243                                      &req_complete_skb);
5244                 req_evt = event;
5245         }
5246
5247         /* If it looks like we might end up having to call
5248          * req_complete_skb, store a pristine copy of the skb since the
5249          * various handlers may modify the original one through
5250          * skb_pull() calls, etc.
5251          */
5252         if (req_complete_skb || event == HCI_EV_CMD_STATUS ||
5253             event == HCI_EV_CMD_COMPLETE)
5254                 orig_skb = skb_clone(skb, GFP_KERNEL);
5255
5256         skb_pull(skb, HCI_EVENT_HDR_SIZE);
5257
5258         switch (event) {
5259         case HCI_EV_INQUIRY_COMPLETE:
5260                 hci_inquiry_complete_evt(hdev, skb);
5261                 break;
5262
5263         case HCI_EV_INQUIRY_RESULT:
5264                 hci_inquiry_result_evt(hdev, skb);
5265                 break;
5266
5267         case HCI_EV_CONN_COMPLETE:
5268                 hci_conn_complete_evt(hdev, skb);
5269                 break;
5270
5271         case HCI_EV_CONN_REQUEST:
5272                 hci_conn_request_evt(hdev, skb);
5273                 break;
5274
5275         case HCI_EV_DISCONN_COMPLETE:
5276                 hci_disconn_complete_evt(hdev, skb);
5277                 break;
5278
5279         case HCI_EV_AUTH_COMPLETE:
5280                 hci_auth_complete_evt(hdev, skb);
5281                 break;
5282
5283         case HCI_EV_REMOTE_NAME:
5284                 hci_remote_name_evt(hdev, skb);
5285                 break;
5286
5287         case HCI_EV_ENCRYPT_CHANGE:
5288                 hci_encrypt_change_evt(hdev, skb);
5289                 break;
5290
5291         case HCI_EV_CHANGE_LINK_KEY_COMPLETE:
5292                 hci_change_link_key_complete_evt(hdev, skb);
5293                 break;
5294
5295         case HCI_EV_REMOTE_FEATURES:
5296                 hci_remote_features_evt(hdev, skb);
5297                 break;
5298
5299         case HCI_EV_CMD_COMPLETE:
5300                 hci_cmd_complete_evt(hdev, skb, &opcode, &status,
5301                                      &req_complete, &req_complete_skb);
5302                 break;
5303
5304         case HCI_EV_CMD_STATUS:
5305                 hci_cmd_status_evt(hdev, skb, &opcode, &status, &req_complete,
5306                                    &req_complete_skb);
5307                 break;
5308
5309         case HCI_EV_HARDWARE_ERROR:
5310                 hci_hardware_error_evt(hdev, skb);
5311                 break;
5312
5313         case HCI_EV_ROLE_CHANGE:
5314                 hci_role_change_evt(hdev, skb);
5315                 break;
5316
5317         case HCI_EV_NUM_COMP_PKTS:
5318                 hci_num_comp_pkts_evt(hdev, skb);
5319                 break;
5320
5321         case HCI_EV_MODE_CHANGE:
5322                 hci_mode_change_evt(hdev, skb);
5323                 break;
5324
5325         case HCI_EV_PIN_CODE_REQ:
5326                 hci_pin_code_request_evt(hdev, skb);
5327                 break;
5328
5329         case HCI_EV_LINK_KEY_REQ:
5330                 hci_link_key_request_evt(hdev, skb);
5331                 break;
5332
5333         case HCI_EV_LINK_KEY_NOTIFY:
5334                 hci_link_key_notify_evt(hdev, skb);
5335                 break;
5336
5337         case HCI_EV_CLOCK_OFFSET:
5338                 hci_clock_offset_evt(hdev, skb);
5339                 break;
5340
5341         case HCI_EV_PKT_TYPE_CHANGE:
5342                 hci_pkt_type_change_evt(hdev, skb);
5343                 break;
5344
5345         case HCI_EV_PSCAN_REP_MODE:
5346                 hci_pscan_rep_mode_evt(hdev, skb);
5347                 break;
5348
5349         case HCI_EV_INQUIRY_RESULT_WITH_RSSI:
5350                 hci_inquiry_result_with_rssi_evt(hdev, skb);
5351                 break;
5352
5353         case HCI_EV_REMOTE_EXT_FEATURES:
5354                 hci_remote_ext_features_evt(hdev, skb);
5355                 break;
5356
5357         case HCI_EV_SYNC_CONN_COMPLETE:
5358                 hci_sync_conn_complete_evt(hdev, skb);
5359                 break;
5360
5361         case HCI_EV_EXTENDED_INQUIRY_RESULT:
5362                 hci_extended_inquiry_result_evt(hdev, skb);
5363                 break;
5364
5365         case HCI_EV_KEY_REFRESH_COMPLETE:
5366                 hci_key_refresh_complete_evt(hdev, skb);
5367                 break;
5368
5369         case HCI_EV_IO_CAPA_REQUEST:
5370                 hci_io_capa_request_evt(hdev, skb);
5371                 break;
5372
5373         case HCI_EV_IO_CAPA_REPLY:
5374                 hci_io_capa_reply_evt(hdev, skb);
5375                 break;
5376
5377         case HCI_EV_USER_CONFIRM_REQUEST:
5378                 hci_user_confirm_request_evt(hdev, skb);
5379                 break;
5380
5381         case HCI_EV_USER_PASSKEY_REQUEST:
5382                 hci_user_passkey_request_evt(hdev, skb);
5383                 break;
5384
5385         case HCI_EV_USER_PASSKEY_NOTIFY:
5386                 hci_user_passkey_notify_evt(hdev, skb);
5387                 break;
5388
5389         case HCI_EV_KEYPRESS_NOTIFY:
5390                 hci_keypress_notify_evt(hdev, skb);
5391                 break;
5392
5393         case HCI_EV_SIMPLE_PAIR_COMPLETE:
5394                 hci_simple_pair_complete_evt(hdev, skb);
5395                 break;
5396
5397         case HCI_EV_REMOTE_HOST_FEATURES:
5398                 hci_remote_host_features_evt(hdev, skb);
5399                 break;
5400
5401         case HCI_EV_LE_META:
5402                 hci_le_meta_evt(hdev, skb);
5403                 break;
5404
5405         case HCI_EV_REMOTE_OOB_DATA_REQUEST:
5406                 hci_remote_oob_data_request_evt(hdev, skb);
5407                 break;
5408
5409 #if IS_ENABLED(CONFIG_BT_HS)
5410         case HCI_EV_CHANNEL_SELECTED:
5411                 hci_chan_selected_evt(hdev, skb);
5412                 break;
5413
5414         case HCI_EV_PHY_LINK_COMPLETE:
5415                 hci_phy_link_complete_evt(hdev, skb);
5416                 break;
5417
5418         case HCI_EV_LOGICAL_LINK_COMPLETE:
5419                 hci_loglink_complete_evt(hdev, skb);
5420                 break;
5421
5422         case HCI_EV_DISCONN_LOGICAL_LINK_COMPLETE:
5423                 hci_disconn_loglink_complete_evt(hdev, skb);
5424                 break;
5425
5426         case HCI_EV_DISCONN_PHY_LINK_COMPLETE:
5427                 hci_disconn_phylink_complete_evt(hdev, skb);
5428                 break;
5429 #endif
5430
5431         case HCI_EV_NUM_COMP_BLOCKS:
5432                 hci_num_comp_blocks_evt(hdev, skb);
5433                 break;
5434
5435         default:
5436                 BT_DBG("%s event 0x%2.2x", hdev->name, event);
5437                 break;
5438         }
5439
5440         if (req_complete) {
5441                 req_complete(hdev, status, opcode);
5442         } else if (req_complete_skb) {
5443                 if (!hci_get_cmd_complete(hdev, opcode, req_evt, orig_skb)) {
5444                         kfree_skb(orig_skb);
5445                         orig_skb = NULL;
5446                 }
5447                 req_complete_skb(hdev, status, opcode, orig_skb);
5448         }
5449
5450         kfree_skb(orig_skb);
5451         kfree_skb(skb);
5452         hdev->stat.evt_rx++;
5453 }