]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - net/bluetooth/hci_event.c
Merge tag 'md/4.3-rc6-fixes' of git://neil.brown.name/md
[karo-tx-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                         mgmt_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_ba(hdev, LE_LINK, &cp->peer_addr);
1919         if (!conn)
1920                 goto unlock;
1921
1922         /* Store the initiator and responder address information which
1923          * is needed for SMP. These values will not change during the
1924          * lifetime of the connection.
1925          */
1926         conn->init_addr_type = cp->own_address_type;
1927         if (cp->own_address_type == ADDR_LE_DEV_RANDOM)
1928                 bacpy(&conn->init_addr, &hdev->random_addr);
1929         else
1930                 bacpy(&conn->init_addr, &hdev->bdaddr);
1931
1932         conn->resp_addr_type = cp->peer_addr_type;
1933         bacpy(&conn->resp_addr, &cp->peer_addr);
1934
1935         /* We don't want the connection attempt to stick around
1936          * indefinitely since LE doesn't have a page timeout concept
1937          * like BR/EDR. Set a timer for any connection that doesn't use
1938          * the white list for connecting.
1939          */
1940         if (cp->filter_policy == HCI_LE_USE_PEER_ADDR)
1941                 queue_delayed_work(conn->hdev->workqueue,
1942                                    &conn->le_conn_timeout,
1943                                    conn->conn_timeout);
1944
1945 unlock:
1946         hci_dev_unlock(hdev);
1947 }
1948
1949 static void hci_cs_le_read_remote_features(struct hci_dev *hdev, u8 status)
1950 {
1951         struct hci_cp_le_read_remote_features *cp;
1952         struct hci_conn *conn;
1953
1954         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1955
1956         if (!status)
1957                 return;
1958
1959         cp = hci_sent_cmd_data(hdev, HCI_OP_LE_READ_REMOTE_FEATURES);
1960         if (!cp)
1961                 return;
1962
1963         hci_dev_lock(hdev);
1964
1965         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1966         if (conn) {
1967                 if (conn->state == BT_CONFIG) {
1968                         hci_connect_cfm(conn, status);
1969                         hci_conn_drop(conn);
1970                 }
1971         }
1972
1973         hci_dev_unlock(hdev);
1974 }
1975
1976 static void hci_cs_le_start_enc(struct hci_dev *hdev, u8 status)
1977 {
1978         struct hci_cp_le_start_enc *cp;
1979         struct hci_conn *conn;
1980
1981         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1982
1983         if (!status)
1984                 return;
1985
1986         hci_dev_lock(hdev);
1987
1988         cp = hci_sent_cmd_data(hdev, HCI_OP_LE_START_ENC);
1989         if (!cp)
1990                 goto unlock;
1991
1992         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1993         if (!conn)
1994                 goto unlock;
1995
1996         if (conn->state != BT_CONNECTED)
1997                 goto unlock;
1998
1999         hci_disconnect(conn, HCI_ERROR_AUTH_FAILURE);
2000         hci_conn_drop(conn);
2001
2002 unlock:
2003         hci_dev_unlock(hdev);
2004 }
2005
2006 static void hci_cs_switch_role(struct hci_dev *hdev, u8 status)
2007 {
2008         struct hci_cp_switch_role *cp;
2009         struct hci_conn *conn;
2010
2011         BT_DBG("%s status 0x%2.2x", hdev->name, status);
2012
2013         if (!status)
2014                 return;
2015
2016         cp = hci_sent_cmd_data(hdev, HCI_OP_SWITCH_ROLE);
2017         if (!cp)
2018                 return;
2019
2020         hci_dev_lock(hdev);
2021
2022         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
2023         if (conn)
2024                 clear_bit(HCI_CONN_RSWITCH_PEND, &conn->flags);
2025
2026         hci_dev_unlock(hdev);
2027 }
2028
2029 static void hci_inquiry_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
2030 {
2031         __u8 status = *((__u8 *) skb->data);
2032         struct discovery_state *discov = &hdev->discovery;
2033         struct inquiry_entry *e;
2034
2035         BT_DBG("%s status 0x%2.2x", hdev->name, status);
2036
2037         hci_conn_check_pending(hdev);
2038
2039         if (!test_and_clear_bit(HCI_INQUIRY, &hdev->flags))
2040                 return;
2041
2042         smp_mb__after_atomic(); /* wake_up_bit advises about this barrier */
2043         wake_up_bit(&hdev->flags, HCI_INQUIRY);
2044
2045         if (!hci_dev_test_flag(hdev, HCI_MGMT))
2046                 return;
2047
2048         hci_dev_lock(hdev);
2049
2050         if (discov->state != DISCOVERY_FINDING)
2051                 goto unlock;
2052
2053         if (list_empty(&discov->resolve)) {
2054                 /* When BR/EDR inquiry is active and no LE scanning is in
2055                  * progress, then change discovery state to indicate completion.
2056                  *
2057                  * When running LE scanning and BR/EDR inquiry simultaneously
2058                  * and the LE scan already finished, then change the discovery
2059                  * state to indicate completion.
2060                  */
2061                 if (!hci_dev_test_flag(hdev, HCI_LE_SCAN) ||
2062                     !test_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY, &hdev->quirks))
2063                         hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
2064                 goto unlock;
2065         }
2066
2067         e = hci_inquiry_cache_lookup_resolve(hdev, BDADDR_ANY, NAME_NEEDED);
2068         if (e && hci_resolve_name(hdev, e) == 0) {
2069                 e->name_state = NAME_PENDING;
2070                 hci_discovery_set_state(hdev, DISCOVERY_RESOLVING);
2071         } else {
2072                 /* When BR/EDR inquiry is active and no LE scanning is in
2073                  * progress, then change discovery state to indicate completion.
2074                  *
2075                  * When running LE scanning and BR/EDR inquiry simultaneously
2076                  * and the LE scan already finished, then change the discovery
2077                  * state to indicate completion.
2078                  */
2079                 if (!hci_dev_test_flag(hdev, HCI_LE_SCAN) ||
2080                     !test_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY, &hdev->quirks))
2081                         hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
2082         }
2083
2084 unlock:
2085         hci_dev_unlock(hdev);
2086 }
2087
2088 static void hci_inquiry_result_evt(struct hci_dev *hdev, struct sk_buff *skb)
2089 {
2090         struct inquiry_data data;
2091         struct inquiry_info *info = (void *) (skb->data + 1);
2092         int num_rsp = *((__u8 *) skb->data);
2093
2094         BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
2095
2096         if (!num_rsp)
2097                 return;
2098
2099         if (hci_dev_test_flag(hdev, HCI_PERIODIC_INQ))
2100                 return;
2101
2102         hci_dev_lock(hdev);
2103
2104         for (; num_rsp; num_rsp--, info++) {
2105                 u32 flags;
2106
2107                 bacpy(&data.bdaddr, &info->bdaddr);
2108                 data.pscan_rep_mode     = info->pscan_rep_mode;
2109                 data.pscan_period_mode  = info->pscan_period_mode;
2110                 data.pscan_mode         = info->pscan_mode;
2111                 memcpy(data.dev_class, info->dev_class, 3);
2112                 data.clock_offset       = info->clock_offset;
2113                 data.rssi               = HCI_RSSI_INVALID;
2114                 data.ssp_mode           = 0x00;
2115
2116                 flags = hci_inquiry_cache_update(hdev, &data, false);
2117
2118                 mgmt_device_found(hdev, &info->bdaddr, ACL_LINK, 0x00,
2119                                   info->dev_class, HCI_RSSI_INVALID,
2120                                   flags, NULL, 0, NULL, 0);
2121         }
2122
2123         hci_dev_unlock(hdev);
2124 }
2125
2126 static void hci_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
2127 {
2128         struct hci_ev_conn_complete *ev = (void *) skb->data;
2129         struct hci_conn *conn;
2130
2131         BT_DBG("%s", hdev->name);
2132
2133         hci_dev_lock(hdev);
2134
2135         conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
2136         if (!conn) {
2137                 if (ev->link_type != SCO_LINK)
2138                         goto unlock;
2139
2140                 conn = hci_conn_hash_lookup_ba(hdev, ESCO_LINK, &ev->bdaddr);
2141                 if (!conn)
2142                         goto unlock;
2143
2144                 conn->type = SCO_LINK;
2145         }
2146
2147         if (!ev->status) {
2148                 conn->handle = __le16_to_cpu(ev->handle);
2149
2150                 if (conn->type == ACL_LINK) {
2151                         conn->state = BT_CONFIG;
2152                         hci_conn_hold(conn);
2153
2154                         if (!conn->out && !hci_conn_ssp_enabled(conn) &&
2155                             !hci_find_link_key(hdev, &ev->bdaddr))
2156                                 conn->disc_timeout = HCI_PAIRING_TIMEOUT;
2157                         else
2158                                 conn->disc_timeout = HCI_DISCONN_TIMEOUT;
2159                 } else
2160                         conn->state = BT_CONNECTED;
2161
2162                 hci_debugfs_create_conn(conn);
2163                 hci_conn_add_sysfs(conn);
2164
2165                 if (test_bit(HCI_AUTH, &hdev->flags))
2166                         set_bit(HCI_CONN_AUTH, &conn->flags);
2167
2168                 if (test_bit(HCI_ENCRYPT, &hdev->flags))
2169                         set_bit(HCI_CONN_ENCRYPT, &conn->flags);
2170
2171                 /* Get remote features */
2172                 if (conn->type == ACL_LINK) {
2173                         struct hci_cp_read_remote_features cp;
2174                         cp.handle = ev->handle;
2175                         hci_send_cmd(hdev, HCI_OP_READ_REMOTE_FEATURES,
2176                                      sizeof(cp), &cp);
2177
2178                         hci_update_page_scan(hdev);
2179                 }
2180
2181                 /* Set packet type for incoming connection */
2182                 if (!conn->out && hdev->hci_ver < BLUETOOTH_VER_2_0) {
2183                         struct hci_cp_change_conn_ptype cp;
2184                         cp.handle = ev->handle;
2185                         cp.pkt_type = cpu_to_le16(conn->pkt_type);
2186                         hci_send_cmd(hdev, HCI_OP_CHANGE_CONN_PTYPE, sizeof(cp),
2187                                      &cp);
2188                 }
2189         } else {
2190                 conn->state = BT_CLOSED;
2191                 if (conn->type == ACL_LINK)
2192                         mgmt_connect_failed(hdev, &conn->dst, conn->type,
2193                                             conn->dst_type, ev->status);
2194         }
2195
2196         if (conn->type == ACL_LINK)
2197                 hci_sco_setup(conn, ev->status);
2198
2199         if (ev->status) {
2200                 hci_connect_cfm(conn, ev->status);
2201                 hci_conn_del(conn);
2202         } else if (ev->link_type != ACL_LINK)
2203                 hci_connect_cfm(conn, ev->status);
2204
2205 unlock:
2206         hci_dev_unlock(hdev);
2207
2208         hci_conn_check_pending(hdev);
2209 }
2210
2211 static void hci_reject_conn(struct hci_dev *hdev, bdaddr_t *bdaddr)
2212 {
2213         struct hci_cp_reject_conn_req cp;
2214
2215         bacpy(&cp.bdaddr, bdaddr);
2216         cp.reason = HCI_ERROR_REJ_BAD_ADDR;
2217         hci_send_cmd(hdev, HCI_OP_REJECT_CONN_REQ, sizeof(cp), &cp);
2218 }
2219
2220 static void hci_conn_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
2221 {
2222         struct hci_ev_conn_request *ev = (void *) skb->data;
2223         int mask = hdev->link_mode;
2224         struct inquiry_entry *ie;
2225         struct hci_conn *conn;
2226         __u8 flags = 0;
2227
2228         BT_DBG("%s bdaddr %pMR type 0x%x", hdev->name, &ev->bdaddr,
2229                ev->link_type);
2230
2231         mask |= hci_proto_connect_ind(hdev, &ev->bdaddr, ev->link_type,
2232                                       &flags);
2233
2234         if (!(mask & HCI_LM_ACCEPT)) {
2235                 hci_reject_conn(hdev, &ev->bdaddr);
2236                 return;
2237         }
2238
2239         if (hci_bdaddr_list_lookup(&hdev->blacklist, &ev->bdaddr,
2240                                    BDADDR_BREDR)) {
2241                 hci_reject_conn(hdev, &ev->bdaddr);
2242                 return;
2243         }
2244
2245         /* Require HCI_CONNECTABLE or a whitelist entry to accept the
2246          * connection. These features are only touched through mgmt so
2247          * only do the checks if HCI_MGMT is set.
2248          */
2249         if (hci_dev_test_flag(hdev, HCI_MGMT) &&
2250             !hci_dev_test_flag(hdev, HCI_CONNECTABLE) &&
2251             !hci_bdaddr_list_lookup(&hdev->whitelist, &ev->bdaddr,
2252                                     BDADDR_BREDR)) {
2253                     hci_reject_conn(hdev, &ev->bdaddr);
2254                     return;
2255         }
2256
2257         /* Connection accepted */
2258
2259         hci_dev_lock(hdev);
2260
2261         ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr);
2262         if (ie)
2263                 memcpy(ie->data.dev_class, ev->dev_class, 3);
2264
2265         conn = hci_conn_hash_lookup_ba(hdev, ev->link_type,
2266                         &ev->bdaddr);
2267         if (!conn) {
2268                 conn = hci_conn_add(hdev, ev->link_type, &ev->bdaddr,
2269                                     HCI_ROLE_SLAVE);
2270                 if (!conn) {
2271                         BT_ERR("No memory for new connection");
2272                         hci_dev_unlock(hdev);
2273                         return;
2274                 }
2275         }
2276
2277         memcpy(conn->dev_class, ev->dev_class, 3);
2278
2279         hci_dev_unlock(hdev);
2280
2281         if (ev->link_type == ACL_LINK ||
2282             (!(flags & HCI_PROTO_DEFER) && !lmp_esco_capable(hdev))) {
2283                 struct hci_cp_accept_conn_req cp;
2284                 conn->state = BT_CONNECT;
2285
2286                 bacpy(&cp.bdaddr, &ev->bdaddr);
2287
2288                 if (lmp_rswitch_capable(hdev) && (mask & HCI_LM_MASTER))
2289                         cp.role = 0x00; /* Become master */
2290                 else
2291                         cp.role = 0x01; /* Remain slave */
2292
2293                 hci_send_cmd(hdev, HCI_OP_ACCEPT_CONN_REQ, sizeof(cp), &cp);
2294         } else if (!(flags & HCI_PROTO_DEFER)) {
2295                 struct hci_cp_accept_sync_conn_req cp;
2296                 conn->state = BT_CONNECT;
2297
2298                 bacpy(&cp.bdaddr, &ev->bdaddr);
2299                 cp.pkt_type = cpu_to_le16(conn->pkt_type);
2300
2301                 cp.tx_bandwidth   = cpu_to_le32(0x00001f40);
2302                 cp.rx_bandwidth   = cpu_to_le32(0x00001f40);
2303                 cp.max_latency    = cpu_to_le16(0xffff);
2304                 cp.content_format = cpu_to_le16(hdev->voice_setting);
2305                 cp.retrans_effort = 0xff;
2306
2307                 hci_send_cmd(hdev, HCI_OP_ACCEPT_SYNC_CONN_REQ, sizeof(cp),
2308                              &cp);
2309         } else {
2310                 conn->state = BT_CONNECT2;
2311                 hci_connect_cfm(conn, 0);
2312         }
2313 }
2314
2315 static u8 hci_to_mgmt_reason(u8 err)
2316 {
2317         switch (err) {
2318         case HCI_ERROR_CONNECTION_TIMEOUT:
2319                 return MGMT_DEV_DISCONN_TIMEOUT;
2320         case HCI_ERROR_REMOTE_USER_TERM:
2321         case HCI_ERROR_REMOTE_LOW_RESOURCES:
2322         case HCI_ERROR_REMOTE_POWER_OFF:
2323                 return MGMT_DEV_DISCONN_REMOTE;
2324         case HCI_ERROR_LOCAL_HOST_TERM:
2325                 return MGMT_DEV_DISCONN_LOCAL_HOST;
2326         default:
2327                 return MGMT_DEV_DISCONN_UNKNOWN;
2328         }
2329 }
2330
2331 static void hci_disconn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
2332 {
2333         struct hci_ev_disconn_complete *ev = (void *) skb->data;
2334         u8 reason = hci_to_mgmt_reason(ev->reason);
2335         struct hci_conn_params *params;
2336         struct hci_conn *conn;
2337         bool mgmt_connected;
2338         u8 type;
2339
2340         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2341
2342         hci_dev_lock(hdev);
2343
2344         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2345         if (!conn)
2346                 goto unlock;
2347
2348         if (ev->status) {
2349                 mgmt_disconnect_failed(hdev, &conn->dst, conn->type,
2350                                        conn->dst_type, ev->status);
2351                 goto unlock;
2352         }
2353
2354         conn->state = BT_CLOSED;
2355
2356         mgmt_connected = test_and_clear_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags);
2357         mgmt_device_disconnected(hdev, &conn->dst, conn->type, conn->dst_type,
2358                                 reason, mgmt_connected);
2359
2360         if (conn->type == ACL_LINK) {
2361                 if (test_bit(HCI_CONN_FLUSH_KEY, &conn->flags))
2362                         hci_remove_link_key(hdev, &conn->dst);
2363
2364                 hci_update_page_scan(hdev);
2365         }
2366
2367         params = hci_conn_params_lookup(hdev, &conn->dst, conn->dst_type);
2368         if (params) {
2369                 switch (params->auto_connect) {
2370                 case HCI_AUTO_CONN_LINK_LOSS:
2371                         if (ev->reason != HCI_ERROR_CONNECTION_TIMEOUT)
2372                                 break;
2373                         /* Fall through */
2374
2375                 case HCI_AUTO_CONN_DIRECT:
2376                 case HCI_AUTO_CONN_ALWAYS:
2377                         list_del_init(&params->action);
2378                         list_add(&params->action, &hdev->pend_le_conns);
2379                         hci_update_background_scan(hdev);
2380                         break;
2381
2382                 default:
2383                         break;
2384                 }
2385         }
2386
2387         type = conn->type;
2388
2389         hci_disconn_cfm(conn, ev->reason);
2390         hci_conn_del(conn);
2391
2392         /* Re-enable advertising if necessary, since it might
2393          * have been disabled by the connection. From the
2394          * HCI_LE_Set_Advertise_Enable command description in
2395          * the core specification (v4.0):
2396          * "The Controller shall continue advertising until the Host
2397          * issues an LE_Set_Advertise_Enable command with
2398          * Advertising_Enable set to 0x00 (Advertising is disabled)
2399          * or until a connection is created or until the Advertising
2400          * is timed out due to Directed Advertising."
2401          */
2402         if (type == LE_LINK)
2403                 mgmt_reenable_advertising(hdev);
2404
2405 unlock:
2406         hci_dev_unlock(hdev);
2407 }
2408
2409 static void hci_auth_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
2410 {
2411         struct hci_ev_auth_complete *ev = (void *) skb->data;
2412         struct hci_conn *conn;
2413
2414         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2415
2416         hci_dev_lock(hdev);
2417
2418         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2419         if (!conn)
2420                 goto unlock;
2421
2422         if (!ev->status) {
2423                 if (!hci_conn_ssp_enabled(conn) &&
2424                     test_bit(HCI_CONN_REAUTH_PEND, &conn->flags)) {
2425                         BT_INFO("re-auth of legacy device is not possible.");
2426                 } else {
2427                         set_bit(HCI_CONN_AUTH, &conn->flags);
2428                         conn->sec_level = conn->pending_sec_level;
2429                 }
2430         } else {
2431                 mgmt_auth_failed(conn, ev->status);
2432         }
2433
2434         clear_bit(HCI_CONN_AUTH_PEND, &conn->flags);
2435         clear_bit(HCI_CONN_REAUTH_PEND, &conn->flags);
2436
2437         if (conn->state == BT_CONFIG) {
2438                 if (!ev->status && hci_conn_ssp_enabled(conn)) {
2439                         struct hci_cp_set_conn_encrypt cp;
2440                         cp.handle  = ev->handle;
2441                         cp.encrypt = 0x01;
2442                         hci_send_cmd(hdev, HCI_OP_SET_CONN_ENCRYPT, sizeof(cp),
2443                                      &cp);
2444                 } else {
2445                         conn->state = BT_CONNECTED;
2446                         hci_connect_cfm(conn, ev->status);
2447                         hci_conn_drop(conn);
2448                 }
2449         } else {
2450                 hci_auth_cfm(conn, ev->status);
2451
2452                 hci_conn_hold(conn);
2453                 conn->disc_timeout = HCI_DISCONN_TIMEOUT;
2454                 hci_conn_drop(conn);
2455         }
2456
2457         if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags)) {
2458                 if (!ev->status) {
2459                         struct hci_cp_set_conn_encrypt cp;
2460                         cp.handle  = ev->handle;
2461                         cp.encrypt = 0x01;
2462                         hci_send_cmd(hdev, HCI_OP_SET_CONN_ENCRYPT, sizeof(cp),
2463                                      &cp);
2464                 } else {
2465                         clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
2466                         hci_encrypt_cfm(conn, ev->status, 0x00);
2467                 }
2468         }
2469
2470 unlock:
2471         hci_dev_unlock(hdev);
2472 }
2473
2474 static void hci_remote_name_evt(struct hci_dev *hdev, struct sk_buff *skb)
2475 {
2476         struct hci_ev_remote_name *ev = (void *) skb->data;
2477         struct hci_conn *conn;
2478
2479         BT_DBG("%s", hdev->name);
2480
2481         hci_conn_check_pending(hdev);
2482
2483         hci_dev_lock(hdev);
2484
2485         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
2486
2487         if (!hci_dev_test_flag(hdev, HCI_MGMT))
2488                 goto check_auth;
2489
2490         if (ev->status == 0)
2491                 hci_check_pending_name(hdev, conn, &ev->bdaddr, ev->name,
2492                                        strnlen(ev->name, HCI_MAX_NAME_LENGTH));
2493         else
2494                 hci_check_pending_name(hdev, conn, &ev->bdaddr, NULL, 0);
2495
2496 check_auth:
2497         if (!conn)
2498                 goto unlock;
2499
2500         if (!hci_outgoing_auth_needed(hdev, conn))
2501                 goto unlock;
2502
2503         if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
2504                 struct hci_cp_auth_requested cp;
2505
2506                 set_bit(HCI_CONN_AUTH_INITIATOR, &conn->flags);
2507
2508                 cp.handle = __cpu_to_le16(conn->handle);
2509                 hci_send_cmd(hdev, HCI_OP_AUTH_REQUESTED, sizeof(cp), &cp);
2510         }
2511
2512 unlock:
2513         hci_dev_unlock(hdev);
2514 }
2515
2516 static void read_enc_key_size_complete(struct hci_dev *hdev, u8 status,
2517                                        u16 opcode, struct sk_buff *skb)
2518 {
2519         const struct hci_rp_read_enc_key_size *rp;
2520         struct hci_conn *conn;
2521         u16 handle;
2522
2523         BT_DBG("%s status 0x%02x", hdev->name, status);
2524
2525         if (!skb || skb->len < sizeof(*rp)) {
2526                 BT_ERR("%s invalid HCI Read Encryption Key Size response",
2527                        hdev->name);
2528                 return;
2529         }
2530
2531         rp = (void *)skb->data;
2532         handle = le16_to_cpu(rp->handle);
2533
2534         hci_dev_lock(hdev);
2535
2536         conn = hci_conn_hash_lookup_handle(hdev, handle);
2537         if (!conn)
2538                 goto unlock;
2539
2540         /* If we fail to read the encryption key size, assume maximum
2541          * (which is the same we do also when this HCI command isn't
2542          * supported.
2543          */
2544         if (rp->status) {
2545                 BT_ERR("%s failed to read key size for handle %u", hdev->name,
2546                        handle);
2547                 conn->enc_key_size = HCI_LINK_KEY_SIZE;
2548         } else {
2549                 conn->enc_key_size = rp->key_size;
2550         }
2551
2552         if (conn->state == BT_CONFIG) {
2553                 conn->state = BT_CONNECTED;
2554                 hci_connect_cfm(conn, 0);
2555                 hci_conn_drop(conn);
2556         } else {
2557                 u8 encrypt;
2558
2559                 if (!test_bit(HCI_CONN_ENCRYPT, &conn->flags))
2560                         encrypt = 0x00;
2561                 else if (test_bit(HCI_CONN_AES_CCM, &conn->flags))
2562                         encrypt = 0x02;
2563                 else
2564                         encrypt = 0x01;
2565
2566                 hci_encrypt_cfm(conn, 0, encrypt);
2567         }
2568
2569 unlock:
2570         hci_dev_unlock(hdev);
2571 }
2572
2573 static void hci_encrypt_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
2574 {
2575         struct hci_ev_encrypt_change *ev = (void *) skb->data;
2576         struct hci_conn *conn;
2577
2578         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2579
2580         hci_dev_lock(hdev);
2581
2582         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2583         if (!conn)
2584                 goto unlock;
2585
2586         if (!ev->status) {
2587                 if (ev->encrypt) {
2588                         /* Encryption implies authentication */
2589                         set_bit(HCI_CONN_AUTH, &conn->flags);
2590                         set_bit(HCI_CONN_ENCRYPT, &conn->flags);
2591                         conn->sec_level = conn->pending_sec_level;
2592
2593                         /* P-256 authentication key implies FIPS */
2594                         if (conn->key_type == HCI_LK_AUTH_COMBINATION_P256)
2595                                 set_bit(HCI_CONN_FIPS, &conn->flags);
2596
2597                         if ((conn->type == ACL_LINK && ev->encrypt == 0x02) ||
2598                             conn->type == LE_LINK)
2599                                 set_bit(HCI_CONN_AES_CCM, &conn->flags);
2600                 } else {
2601                         clear_bit(HCI_CONN_ENCRYPT, &conn->flags);
2602                         clear_bit(HCI_CONN_AES_CCM, &conn->flags);
2603                 }
2604         }
2605
2606         /* We should disregard the current RPA and generate a new one
2607          * whenever the encryption procedure fails.
2608          */
2609         if (ev->status && conn->type == LE_LINK)
2610                 hci_dev_set_flag(hdev, HCI_RPA_EXPIRED);
2611
2612         clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
2613
2614         if (ev->status && conn->state == BT_CONNECTED) {
2615                 hci_disconnect(conn, HCI_ERROR_AUTH_FAILURE);
2616                 hci_conn_drop(conn);
2617                 goto unlock;
2618         }
2619
2620         /* In Secure Connections Only mode, do not allow any connections
2621          * that are not encrypted with AES-CCM using a P-256 authenticated
2622          * combination key.
2623          */
2624         if (hci_dev_test_flag(hdev, HCI_SC_ONLY) &&
2625             (!test_bit(HCI_CONN_AES_CCM, &conn->flags) ||
2626              conn->key_type != HCI_LK_AUTH_COMBINATION_P256)) {
2627                 hci_connect_cfm(conn, HCI_ERROR_AUTH_FAILURE);
2628                 hci_conn_drop(conn);
2629                 goto unlock;
2630         }
2631
2632         /* Try reading the encryption key size for encrypted ACL links */
2633         if (!ev->status && ev->encrypt && conn->type == ACL_LINK) {
2634                 struct hci_cp_read_enc_key_size cp;
2635                 struct hci_request req;
2636
2637                 /* Only send HCI_Read_Encryption_Key_Size if the
2638                  * controller really supports it. If it doesn't, assume
2639                  * the default size (16).
2640                  */
2641                 if (!(hdev->commands[20] & 0x10)) {
2642                         conn->enc_key_size = HCI_LINK_KEY_SIZE;
2643                         goto notify;
2644                 }
2645
2646                 hci_req_init(&req, hdev);
2647
2648                 cp.handle = cpu_to_le16(conn->handle);
2649                 hci_req_add(&req, HCI_OP_READ_ENC_KEY_SIZE, sizeof(cp), &cp);
2650
2651                 if (hci_req_run_skb(&req, read_enc_key_size_complete)) {
2652                         BT_ERR("Sending HCI Read Encryption Key Size failed");
2653                         conn->enc_key_size = HCI_LINK_KEY_SIZE;
2654                         goto notify;
2655                 }
2656
2657                 goto unlock;
2658         }
2659
2660 notify:
2661         if (conn->state == BT_CONFIG) {
2662                 if (!ev->status)
2663                         conn->state = BT_CONNECTED;
2664
2665                 hci_connect_cfm(conn, ev->status);
2666                 hci_conn_drop(conn);
2667         } else
2668                 hci_encrypt_cfm(conn, ev->status, ev->encrypt);
2669
2670 unlock:
2671         hci_dev_unlock(hdev);
2672 }
2673
2674 static void hci_change_link_key_complete_evt(struct hci_dev *hdev,
2675                                              struct sk_buff *skb)
2676 {
2677         struct hci_ev_change_link_key_complete *ev = (void *) skb->data;
2678         struct hci_conn *conn;
2679
2680         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2681
2682         hci_dev_lock(hdev);
2683
2684         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2685         if (conn) {
2686                 if (!ev->status)
2687                         set_bit(HCI_CONN_SECURE, &conn->flags);
2688
2689                 clear_bit(HCI_CONN_AUTH_PEND, &conn->flags);
2690
2691                 hci_key_change_cfm(conn, ev->status);
2692         }
2693
2694         hci_dev_unlock(hdev);
2695 }
2696
2697 static void hci_remote_features_evt(struct hci_dev *hdev,
2698                                     struct sk_buff *skb)
2699 {
2700         struct hci_ev_remote_features *ev = (void *) skb->data;
2701         struct hci_conn *conn;
2702
2703         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2704
2705         hci_dev_lock(hdev);
2706
2707         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2708         if (!conn)
2709                 goto unlock;
2710
2711         if (!ev->status)
2712                 memcpy(conn->features[0], ev->features, 8);
2713
2714         if (conn->state != BT_CONFIG)
2715                 goto unlock;
2716
2717         if (!ev->status && lmp_ext_feat_capable(hdev) &&
2718             lmp_ext_feat_capable(conn)) {
2719                 struct hci_cp_read_remote_ext_features cp;
2720                 cp.handle = ev->handle;
2721                 cp.page = 0x01;
2722                 hci_send_cmd(hdev, HCI_OP_READ_REMOTE_EXT_FEATURES,
2723                              sizeof(cp), &cp);
2724                 goto unlock;
2725         }
2726
2727         if (!ev->status && !test_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags)) {
2728                 struct hci_cp_remote_name_req cp;
2729                 memset(&cp, 0, sizeof(cp));
2730                 bacpy(&cp.bdaddr, &conn->dst);
2731                 cp.pscan_rep_mode = 0x02;
2732                 hci_send_cmd(hdev, HCI_OP_REMOTE_NAME_REQ, sizeof(cp), &cp);
2733         } else if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags))
2734                 mgmt_device_connected(hdev, conn, 0, NULL, 0);
2735
2736         if (!hci_outgoing_auth_needed(hdev, conn)) {
2737                 conn->state = BT_CONNECTED;
2738                 hci_connect_cfm(conn, ev->status);
2739                 hci_conn_drop(conn);
2740         }
2741
2742 unlock:
2743         hci_dev_unlock(hdev);
2744 }
2745
2746 static void hci_cmd_complete_evt(struct hci_dev *hdev, struct sk_buff *skb,
2747                                  u16 *opcode, u8 *status,
2748                                  hci_req_complete_t *req_complete,
2749                                  hci_req_complete_skb_t *req_complete_skb)
2750 {
2751         struct hci_ev_cmd_complete *ev = (void *) skb->data;
2752
2753         *opcode = __le16_to_cpu(ev->opcode);
2754         *status = skb->data[sizeof(*ev)];
2755
2756         skb_pull(skb, sizeof(*ev));
2757
2758         switch (*opcode) {
2759         case HCI_OP_INQUIRY_CANCEL:
2760                 hci_cc_inquiry_cancel(hdev, skb);
2761                 break;
2762
2763         case HCI_OP_PERIODIC_INQ:
2764                 hci_cc_periodic_inq(hdev, skb);
2765                 break;
2766
2767         case HCI_OP_EXIT_PERIODIC_INQ:
2768                 hci_cc_exit_periodic_inq(hdev, skb);
2769                 break;
2770
2771         case HCI_OP_REMOTE_NAME_REQ_CANCEL:
2772                 hci_cc_remote_name_req_cancel(hdev, skb);
2773                 break;
2774
2775         case HCI_OP_ROLE_DISCOVERY:
2776                 hci_cc_role_discovery(hdev, skb);
2777                 break;
2778
2779         case HCI_OP_READ_LINK_POLICY:
2780                 hci_cc_read_link_policy(hdev, skb);
2781                 break;
2782
2783         case HCI_OP_WRITE_LINK_POLICY:
2784                 hci_cc_write_link_policy(hdev, skb);
2785                 break;
2786
2787         case HCI_OP_READ_DEF_LINK_POLICY:
2788                 hci_cc_read_def_link_policy(hdev, skb);
2789                 break;
2790
2791         case HCI_OP_WRITE_DEF_LINK_POLICY:
2792                 hci_cc_write_def_link_policy(hdev, skb);
2793                 break;
2794
2795         case HCI_OP_RESET:
2796                 hci_cc_reset(hdev, skb);
2797                 break;
2798
2799         case HCI_OP_READ_STORED_LINK_KEY:
2800                 hci_cc_read_stored_link_key(hdev, skb);
2801                 break;
2802
2803         case HCI_OP_DELETE_STORED_LINK_KEY:
2804                 hci_cc_delete_stored_link_key(hdev, skb);
2805                 break;
2806
2807         case HCI_OP_WRITE_LOCAL_NAME:
2808                 hci_cc_write_local_name(hdev, skb);
2809                 break;
2810
2811         case HCI_OP_READ_LOCAL_NAME:
2812                 hci_cc_read_local_name(hdev, skb);
2813                 break;
2814
2815         case HCI_OP_WRITE_AUTH_ENABLE:
2816                 hci_cc_write_auth_enable(hdev, skb);
2817                 break;
2818
2819         case HCI_OP_WRITE_ENCRYPT_MODE:
2820                 hci_cc_write_encrypt_mode(hdev, skb);
2821                 break;
2822
2823         case HCI_OP_WRITE_SCAN_ENABLE:
2824                 hci_cc_write_scan_enable(hdev, skb);
2825                 break;
2826
2827         case HCI_OP_READ_CLASS_OF_DEV:
2828                 hci_cc_read_class_of_dev(hdev, skb);
2829                 break;
2830
2831         case HCI_OP_WRITE_CLASS_OF_DEV:
2832                 hci_cc_write_class_of_dev(hdev, skb);
2833                 break;
2834
2835         case HCI_OP_READ_VOICE_SETTING:
2836                 hci_cc_read_voice_setting(hdev, skb);
2837                 break;
2838
2839         case HCI_OP_WRITE_VOICE_SETTING:
2840                 hci_cc_write_voice_setting(hdev, skb);
2841                 break;
2842
2843         case HCI_OP_READ_NUM_SUPPORTED_IAC:
2844                 hci_cc_read_num_supported_iac(hdev, skb);
2845                 break;
2846
2847         case HCI_OP_WRITE_SSP_MODE:
2848                 hci_cc_write_ssp_mode(hdev, skb);
2849                 break;
2850
2851         case HCI_OP_WRITE_SC_SUPPORT:
2852                 hci_cc_write_sc_support(hdev, skb);
2853                 break;
2854
2855         case HCI_OP_READ_LOCAL_VERSION:
2856                 hci_cc_read_local_version(hdev, skb);
2857                 break;
2858
2859         case HCI_OP_READ_LOCAL_COMMANDS:
2860                 hci_cc_read_local_commands(hdev, skb);
2861                 break;
2862
2863         case HCI_OP_READ_LOCAL_FEATURES:
2864                 hci_cc_read_local_features(hdev, skb);
2865                 break;
2866
2867         case HCI_OP_READ_LOCAL_EXT_FEATURES:
2868                 hci_cc_read_local_ext_features(hdev, skb);
2869                 break;
2870
2871         case HCI_OP_READ_BUFFER_SIZE:
2872                 hci_cc_read_buffer_size(hdev, skb);
2873                 break;
2874
2875         case HCI_OP_READ_BD_ADDR:
2876                 hci_cc_read_bd_addr(hdev, skb);
2877                 break;
2878
2879         case HCI_OP_READ_PAGE_SCAN_ACTIVITY:
2880                 hci_cc_read_page_scan_activity(hdev, skb);
2881                 break;
2882
2883         case HCI_OP_WRITE_PAGE_SCAN_ACTIVITY:
2884                 hci_cc_write_page_scan_activity(hdev, skb);
2885                 break;
2886
2887         case HCI_OP_READ_PAGE_SCAN_TYPE:
2888                 hci_cc_read_page_scan_type(hdev, skb);
2889                 break;
2890
2891         case HCI_OP_WRITE_PAGE_SCAN_TYPE:
2892                 hci_cc_write_page_scan_type(hdev, skb);
2893                 break;
2894
2895         case HCI_OP_READ_DATA_BLOCK_SIZE:
2896                 hci_cc_read_data_block_size(hdev, skb);
2897                 break;
2898
2899         case HCI_OP_READ_FLOW_CONTROL_MODE:
2900                 hci_cc_read_flow_control_mode(hdev, skb);
2901                 break;
2902
2903         case HCI_OP_READ_LOCAL_AMP_INFO:
2904                 hci_cc_read_local_amp_info(hdev, skb);
2905                 break;
2906
2907         case HCI_OP_READ_CLOCK:
2908                 hci_cc_read_clock(hdev, skb);
2909                 break;
2910
2911         case HCI_OP_READ_INQ_RSP_TX_POWER:
2912                 hci_cc_read_inq_rsp_tx_power(hdev, skb);
2913                 break;
2914
2915         case HCI_OP_PIN_CODE_REPLY:
2916                 hci_cc_pin_code_reply(hdev, skb);
2917                 break;
2918
2919         case HCI_OP_PIN_CODE_NEG_REPLY:
2920                 hci_cc_pin_code_neg_reply(hdev, skb);
2921                 break;
2922
2923         case HCI_OP_READ_LOCAL_OOB_DATA:
2924                 hci_cc_read_local_oob_data(hdev, skb);
2925                 break;
2926
2927         case HCI_OP_READ_LOCAL_OOB_EXT_DATA:
2928                 hci_cc_read_local_oob_ext_data(hdev, skb);
2929                 break;
2930
2931         case HCI_OP_LE_READ_BUFFER_SIZE:
2932                 hci_cc_le_read_buffer_size(hdev, skb);
2933                 break;
2934
2935         case HCI_OP_LE_READ_LOCAL_FEATURES:
2936                 hci_cc_le_read_local_features(hdev, skb);
2937                 break;
2938
2939         case HCI_OP_LE_READ_ADV_TX_POWER:
2940                 hci_cc_le_read_adv_tx_power(hdev, skb);
2941                 break;
2942
2943         case HCI_OP_USER_CONFIRM_REPLY:
2944                 hci_cc_user_confirm_reply(hdev, skb);
2945                 break;
2946
2947         case HCI_OP_USER_CONFIRM_NEG_REPLY:
2948                 hci_cc_user_confirm_neg_reply(hdev, skb);
2949                 break;
2950
2951         case HCI_OP_USER_PASSKEY_REPLY:
2952                 hci_cc_user_passkey_reply(hdev, skb);
2953                 break;
2954
2955         case HCI_OP_USER_PASSKEY_NEG_REPLY:
2956                 hci_cc_user_passkey_neg_reply(hdev, skb);
2957                 break;
2958
2959         case HCI_OP_LE_SET_RANDOM_ADDR:
2960                 hci_cc_le_set_random_addr(hdev, skb);
2961                 break;
2962
2963         case HCI_OP_LE_SET_ADV_ENABLE:
2964                 hci_cc_le_set_adv_enable(hdev, skb);
2965                 break;
2966
2967         case HCI_OP_LE_SET_SCAN_PARAM:
2968                 hci_cc_le_set_scan_param(hdev, skb);
2969                 break;
2970
2971         case HCI_OP_LE_SET_SCAN_ENABLE:
2972                 hci_cc_le_set_scan_enable(hdev, skb);
2973                 break;
2974
2975         case HCI_OP_LE_READ_WHITE_LIST_SIZE:
2976                 hci_cc_le_read_white_list_size(hdev, skb);
2977                 break;
2978
2979         case HCI_OP_LE_CLEAR_WHITE_LIST:
2980                 hci_cc_le_clear_white_list(hdev, skb);
2981                 break;
2982
2983         case HCI_OP_LE_ADD_TO_WHITE_LIST:
2984                 hci_cc_le_add_to_white_list(hdev, skb);
2985                 break;
2986
2987         case HCI_OP_LE_DEL_FROM_WHITE_LIST:
2988                 hci_cc_le_del_from_white_list(hdev, skb);
2989                 break;
2990
2991         case HCI_OP_LE_READ_SUPPORTED_STATES:
2992                 hci_cc_le_read_supported_states(hdev, skb);
2993                 break;
2994
2995         case HCI_OP_LE_READ_DEF_DATA_LEN:
2996                 hci_cc_le_read_def_data_len(hdev, skb);
2997                 break;
2998
2999         case HCI_OP_LE_WRITE_DEF_DATA_LEN:
3000                 hci_cc_le_write_def_data_len(hdev, skb);
3001                 break;
3002
3003         case HCI_OP_LE_READ_MAX_DATA_LEN:
3004                 hci_cc_le_read_max_data_len(hdev, skb);
3005                 break;
3006
3007         case HCI_OP_WRITE_LE_HOST_SUPPORTED:
3008                 hci_cc_write_le_host_supported(hdev, skb);
3009                 break;
3010
3011         case HCI_OP_LE_SET_ADV_PARAM:
3012                 hci_cc_set_adv_param(hdev, skb);
3013                 break;
3014
3015         case HCI_OP_READ_RSSI:
3016                 hci_cc_read_rssi(hdev, skb);
3017                 break;
3018
3019         case HCI_OP_READ_TX_POWER:
3020                 hci_cc_read_tx_power(hdev, skb);
3021                 break;
3022
3023         case HCI_OP_WRITE_SSP_DEBUG_MODE:
3024                 hci_cc_write_ssp_debug_mode(hdev, skb);
3025                 break;
3026
3027         default:
3028                 BT_DBG("%s opcode 0x%4.4x", hdev->name, *opcode);
3029                 break;
3030         }
3031
3032         if (*opcode != HCI_OP_NOP)
3033                 cancel_delayed_work(&hdev->cmd_timer);
3034
3035         if (ev->ncmd && !test_bit(HCI_RESET, &hdev->flags))
3036                 atomic_set(&hdev->cmd_cnt, 1);
3037
3038         hci_req_cmd_complete(hdev, *opcode, *status, req_complete,
3039                              req_complete_skb);
3040
3041         if (atomic_read(&hdev->cmd_cnt) && !skb_queue_empty(&hdev->cmd_q))
3042                 queue_work(hdev->workqueue, &hdev->cmd_work);
3043 }
3044
3045 static void hci_cmd_status_evt(struct hci_dev *hdev, struct sk_buff *skb,
3046                                u16 *opcode, u8 *status,
3047                                hci_req_complete_t *req_complete,
3048                                hci_req_complete_skb_t *req_complete_skb)
3049 {
3050         struct hci_ev_cmd_status *ev = (void *) skb->data;
3051
3052         skb_pull(skb, sizeof(*ev));
3053
3054         *opcode = __le16_to_cpu(ev->opcode);
3055         *status = ev->status;
3056
3057         switch (*opcode) {
3058         case HCI_OP_INQUIRY:
3059                 hci_cs_inquiry(hdev, ev->status);
3060                 break;
3061
3062         case HCI_OP_CREATE_CONN:
3063                 hci_cs_create_conn(hdev, ev->status);
3064                 break;
3065
3066         case HCI_OP_DISCONNECT:
3067                 hci_cs_disconnect(hdev, ev->status);
3068                 break;
3069
3070         case HCI_OP_ADD_SCO:
3071                 hci_cs_add_sco(hdev, ev->status);
3072                 break;
3073
3074         case HCI_OP_AUTH_REQUESTED:
3075                 hci_cs_auth_requested(hdev, ev->status);
3076                 break;
3077
3078         case HCI_OP_SET_CONN_ENCRYPT:
3079                 hci_cs_set_conn_encrypt(hdev, ev->status);
3080                 break;
3081
3082         case HCI_OP_REMOTE_NAME_REQ:
3083                 hci_cs_remote_name_req(hdev, ev->status);
3084                 break;
3085
3086         case HCI_OP_READ_REMOTE_FEATURES:
3087                 hci_cs_read_remote_features(hdev, ev->status);
3088                 break;
3089
3090         case HCI_OP_READ_REMOTE_EXT_FEATURES:
3091                 hci_cs_read_remote_ext_features(hdev, ev->status);
3092                 break;
3093
3094         case HCI_OP_SETUP_SYNC_CONN:
3095                 hci_cs_setup_sync_conn(hdev, ev->status);
3096                 break;
3097
3098         case HCI_OP_SNIFF_MODE:
3099                 hci_cs_sniff_mode(hdev, ev->status);
3100                 break;
3101
3102         case HCI_OP_EXIT_SNIFF_MODE:
3103                 hci_cs_exit_sniff_mode(hdev, ev->status);
3104                 break;
3105
3106         case HCI_OP_SWITCH_ROLE:
3107                 hci_cs_switch_role(hdev, ev->status);
3108                 break;
3109
3110         case HCI_OP_LE_CREATE_CONN:
3111                 hci_cs_le_create_conn(hdev, ev->status);
3112                 break;
3113
3114         case HCI_OP_LE_READ_REMOTE_FEATURES:
3115                 hci_cs_le_read_remote_features(hdev, ev->status);
3116                 break;
3117
3118         case HCI_OP_LE_START_ENC:
3119                 hci_cs_le_start_enc(hdev, ev->status);
3120                 break;
3121
3122         default:
3123                 BT_DBG("%s opcode 0x%4.4x", hdev->name, *opcode);
3124                 break;
3125         }
3126
3127         if (*opcode != HCI_OP_NOP)
3128                 cancel_delayed_work(&hdev->cmd_timer);
3129
3130         if (ev->ncmd && !test_bit(HCI_RESET, &hdev->flags))
3131                 atomic_set(&hdev->cmd_cnt, 1);
3132
3133         /* Indicate request completion if the command failed. Also, if
3134          * we're not waiting for a special event and we get a success
3135          * command status we should try to flag the request as completed
3136          * (since for this kind of commands there will not be a command
3137          * complete event).
3138          */
3139         if (ev->status ||
3140             (hdev->sent_cmd && !bt_cb(hdev->sent_cmd)->req.event))
3141                 hci_req_cmd_complete(hdev, *opcode, ev->status, req_complete,
3142                                      req_complete_skb);
3143
3144         if (atomic_read(&hdev->cmd_cnt) && !skb_queue_empty(&hdev->cmd_q))
3145                 queue_work(hdev->workqueue, &hdev->cmd_work);
3146 }
3147
3148 static void hci_hardware_error_evt(struct hci_dev *hdev, struct sk_buff *skb)
3149 {
3150         struct hci_ev_hardware_error *ev = (void *) skb->data;
3151
3152         hdev->hw_error_code = ev->code;
3153
3154         queue_work(hdev->req_workqueue, &hdev->error_reset);
3155 }
3156
3157 static void hci_role_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
3158 {
3159         struct hci_ev_role_change *ev = (void *) skb->data;
3160         struct hci_conn *conn;
3161
3162         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3163
3164         hci_dev_lock(hdev);
3165
3166         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3167         if (conn) {
3168                 if (!ev->status)
3169                         conn->role = ev->role;
3170
3171                 clear_bit(HCI_CONN_RSWITCH_PEND, &conn->flags);
3172
3173                 hci_role_switch_cfm(conn, ev->status, ev->role);
3174         }
3175
3176         hci_dev_unlock(hdev);
3177 }
3178
3179 static void hci_num_comp_pkts_evt(struct hci_dev *hdev, struct sk_buff *skb)
3180 {
3181         struct hci_ev_num_comp_pkts *ev = (void *) skb->data;
3182         int i;
3183
3184         if (hdev->flow_ctl_mode != HCI_FLOW_CTL_MODE_PACKET_BASED) {
3185                 BT_ERR("Wrong event for mode %d", hdev->flow_ctl_mode);
3186                 return;
3187         }
3188
3189         if (skb->len < sizeof(*ev) || skb->len < sizeof(*ev) +
3190             ev->num_hndl * sizeof(struct hci_comp_pkts_info)) {
3191                 BT_DBG("%s bad parameters", hdev->name);
3192                 return;
3193         }
3194
3195         BT_DBG("%s num_hndl %d", hdev->name, ev->num_hndl);
3196
3197         for (i = 0; i < ev->num_hndl; i++) {
3198                 struct hci_comp_pkts_info *info = &ev->handles[i];
3199                 struct hci_conn *conn;
3200                 __u16  handle, count;
3201
3202                 handle = __le16_to_cpu(info->handle);
3203                 count  = __le16_to_cpu(info->count);
3204
3205                 conn = hci_conn_hash_lookup_handle(hdev, handle);
3206                 if (!conn)
3207                         continue;
3208
3209                 conn->sent -= count;
3210
3211                 switch (conn->type) {
3212                 case ACL_LINK:
3213                         hdev->acl_cnt += count;
3214                         if (hdev->acl_cnt > hdev->acl_pkts)
3215                                 hdev->acl_cnt = hdev->acl_pkts;
3216                         break;
3217
3218                 case LE_LINK:
3219                         if (hdev->le_pkts) {
3220                                 hdev->le_cnt += count;
3221                                 if (hdev->le_cnt > hdev->le_pkts)
3222                                         hdev->le_cnt = hdev->le_pkts;
3223                         } else {
3224                                 hdev->acl_cnt += count;
3225                                 if (hdev->acl_cnt > hdev->acl_pkts)
3226                                         hdev->acl_cnt = hdev->acl_pkts;
3227                         }
3228                         break;
3229
3230                 case SCO_LINK:
3231                         hdev->sco_cnt += count;
3232                         if (hdev->sco_cnt > hdev->sco_pkts)
3233                                 hdev->sco_cnt = hdev->sco_pkts;
3234                         break;
3235
3236                 default:
3237                         BT_ERR("Unknown type %d conn %p", conn->type, conn);
3238                         break;
3239                 }
3240         }
3241
3242         queue_work(hdev->workqueue, &hdev->tx_work);
3243 }
3244
3245 static struct hci_conn *__hci_conn_lookup_handle(struct hci_dev *hdev,
3246                                                  __u16 handle)
3247 {
3248         struct hci_chan *chan;
3249
3250         switch (hdev->dev_type) {
3251         case HCI_BREDR:
3252                 return hci_conn_hash_lookup_handle(hdev, handle);
3253         case HCI_AMP:
3254                 chan = hci_chan_lookup_handle(hdev, handle);
3255                 if (chan)
3256                         return chan->conn;
3257                 break;
3258         default:
3259                 BT_ERR("%s unknown dev_type %d", hdev->name, hdev->dev_type);
3260                 break;
3261         }
3262
3263         return NULL;
3264 }
3265
3266 static void hci_num_comp_blocks_evt(struct hci_dev *hdev, struct sk_buff *skb)
3267 {
3268         struct hci_ev_num_comp_blocks *ev = (void *) skb->data;
3269         int i;
3270
3271         if (hdev->flow_ctl_mode != HCI_FLOW_CTL_MODE_BLOCK_BASED) {
3272                 BT_ERR("Wrong event for mode %d", hdev->flow_ctl_mode);
3273                 return;
3274         }
3275
3276         if (skb->len < sizeof(*ev) || skb->len < sizeof(*ev) +
3277             ev->num_hndl * sizeof(struct hci_comp_blocks_info)) {
3278                 BT_DBG("%s bad parameters", hdev->name);
3279                 return;
3280         }
3281
3282         BT_DBG("%s num_blocks %d num_hndl %d", hdev->name, ev->num_blocks,
3283                ev->num_hndl);
3284
3285         for (i = 0; i < ev->num_hndl; i++) {
3286                 struct hci_comp_blocks_info *info = &ev->handles[i];
3287                 struct hci_conn *conn = NULL;
3288                 __u16  handle, block_count;
3289
3290                 handle = __le16_to_cpu(info->handle);
3291                 block_count = __le16_to_cpu(info->blocks);
3292
3293                 conn = __hci_conn_lookup_handle(hdev, handle);
3294                 if (!conn)
3295                         continue;
3296
3297                 conn->sent -= block_count;
3298
3299                 switch (conn->type) {
3300                 case ACL_LINK:
3301                 case AMP_LINK:
3302                         hdev->block_cnt += block_count;
3303                         if (hdev->block_cnt > hdev->num_blocks)
3304                                 hdev->block_cnt = hdev->num_blocks;
3305                         break;
3306
3307                 default:
3308                         BT_ERR("Unknown type %d conn %p", conn->type, conn);
3309                         break;
3310                 }
3311         }
3312
3313         queue_work(hdev->workqueue, &hdev->tx_work);
3314 }
3315
3316 static void hci_mode_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
3317 {
3318         struct hci_ev_mode_change *ev = (void *) skb->data;
3319         struct hci_conn *conn;
3320
3321         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3322
3323         hci_dev_lock(hdev);
3324
3325         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
3326         if (conn) {
3327                 conn->mode = ev->mode;
3328
3329                 if (!test_and_clear_bit(HCI_CONN_MODE_CHANGE_PEND,
3330                                         &conn->flags)) {
3331                         if (conn->mode == HCI_CM_ACTIVE)
3332                                 set_bit(HCI_CONN_POWER_SAVE, &conn->flags);
3333                         else
3334                                 clear_bit(HCI_CONN_POWER_SAVE, &conn->flags);
3335                 }
3336
3337                 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->flags))
3338                         hci_sco_setup(conn, ev->status);
3339         }
3340
3341         hci_dev_unlock(hdev);
3342 }
3343
3344 static void hci_pin_code_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
3345 {
3346         struct hci_ev_pin_code_req *ev = (void *) skb->data;
3347         struct hci_conn *conn;
3348
3349         BT_DBG("%s", hdev->name);
3350
3351         hci_dev_lock(hdev);
3352
3353         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3354         if (!conn)
3355                 goto unlock;
3356
3357         if (conn->state == BT_CONNECTED) {
3358                 hci_conn_hold(conn);
3359                 conn->disc_timeout = HCI_PAIRING_TIMEOUT;
3360                 hci_conn_drop(conn);
3361         }
3362
3363         if (!hci_dev_test_flag(hdev, HCI_BONDABLE) &&
3364             !test_bit(HCI_CONN_AUTH_INITIATOR, &conn->flags)) {
3365                 hci_send_cmd(hdev, HCI_OP_PIN_CODE_NEG_REPLY,
3366                              sizeof(ev->bdaddr), &ev->bdaddr);
3367         } else if (hci_dev_test_flag(hdev, HCI_MGMT)) {
3368                 u8 secure;
3369
3370                 if (conn->pending_sec_level == BT_SECURITY_HIGH)
3371                         secure = 1;
3372                 else
3373                         secure = 0;
3374
3375                 mgmt_pin_code_request(hdev, &ev->bdaddr, secure);
3376         }
3377
3378 unlock:
3379         hci_dev_unlock(hdev);
3380 }
3381
3382 static void conn_set_key(struct hci_conn *conn, u8 key_type, u8 pin_len)
3383 {
3384         if (key_type == HCI_LK_CHANGED_COMBINATION)
3385                 return;
3386
3387         conn->pin_length = pin_len;
3388         conn->key_type = key_type;
3389
3390         switch (key_type) {
3391         case HCI_LK_LOCAL_UNIT:
3392         case HCI_LK_REMOTE_UNIT:
3393         case HCI_LK_DEBUG_COMBINATION:
3394                 return;
3395         case HCI_LK_COMBINATION:
3396                 if (pin_len == 16)
3397                         conn->pending_sec_level = BT_SECURITY_HIGH;
3398                 else
3399                         conn->pending_sec_level = BT_SECURITY_MEDIUM;
3400                 break;
3401         case HCI_LK_UNAUTH_COMBINATION_P192:
3402         case HCI_LK_UNAUTH_COMBINATION_P256:
3403                 conn->pending_sec_level = BT_SECURITY_MEDIUM;
3404                 break;
3405         case HCI_LK_AUTH_COMBINATION_P192:
3406                 conn->pending_sec_level = BT_SECURITY_HIGH;
3407                 break;
3408         case HCI_LK_AUTH_COMBINATION_P256:
3409                 conn->pending_sec_level = BT_SECURITY_FIPS;
3410                 break;
3411         }
3412 }
3413
3414 static void hci_link_key_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
3415 {
3416         struct hci_ev_link_key_req *ev = (void *) skb->data;
3417         struct hci_cp_link_key_reply cp;
3418         struct hci_conn *conn;
3419         struct link_key *key;
3420
3421         BT_DBG("%s", hdev->name);
3422
3423         if (!hci_dev_test_flag(hdev, HCI_MGMT))
3424                 return;
3425
3426         hci_dev_lock(hdev);
3427
3428         key = hci_find_link_key(hdev, &ev->bdaddr);
3429         if (!key) {
3430                 BT_DBG("%s link key not found for %pMR", hdev->name,
3431                        &ev->bdaddr);
3432                 goto not_found;
3433         }
3434
3435         BT_DBG("%s found key type %u for %pMR", hdev->name, key->type,
3436                &ev->bdaddr);
3437
3438         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3439         if (conn) {
3440                 clear_bit(HCI_CONN_NEW_LINK_KEY, &conn->flags);
3441
3442                 if ((key->type == HCI_LK_UNAUTH_COMBINATION_P192 ||
3443                      key->type == HCI_LK_UNAUTH_COMBINATION_P256) &&
3444                     conn->auth_type != 0xff && (conn->auth_type & 0x01)) {
3445                         BT_DBG("%s ignoring unauthenticated key", hdev->name);
3446                         goto not_found;
3447                 }
3448
3449                 if (key->type == HCI_LK_COMBINATION && key->pin_len < 16 &&
3450                     (conn->pending_sec_level == BT_SECURITY_HIGH ||
3451                      conn->pending_sec_level == BT_SECURITY_FIPS)) {
3452                         BT_DBG("%s ignoring key unauthenticated for high security",
3453                                hdev->name);
3454                         goto not_found;
3455                 }
3456
3457                 conn_set_key(conn, key->type, key->pin_len);
3458         }
3459
3460         bacpy(&cp.bdaddr, &ev->bdaddr);
3461         memcpy(cp.link_key, key->val, HCI_LINK_KEY_SIZE);
3462
3463         hci_send_cmd(hdev, HCI_OP_LINK_KEY_REPLY, sizeof(cp), &cp);
3464
3465         hci_dev_unlock(hdev);
3466
3467         return;
3468
3469 not_found:
3470         hci_send_cmd(hdev, HCI_OP_LINK_KEY_NEG_REPLY, 6, &ev->bdaddr);
3471         hci_dev_unlock(hdev);
3472 }
3473
3474 static void hci_link_key_notify_evt(struct hci_dev *hdev, struct sk_buff *skb)
3475 {
3476         struct hci_ev_link_key_notify *ev = (void *) skb->data;
3477         struct hci_conn *conn;
3478         struct link_key *key;
3479         bool persistent;
3480         u8 pin_len = 0;
3481
3482         BT_DBG("%s", hdev->name);
3483
3484         hci_dev_lock(hdev);
3485
3486         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3487         if (!conn)
3488                 goto unlock;
3489
3490         hci_conn_hold(conn);
3491         conn->disc_timeout = HCI_DISCONN_TIMEOUT;
3492         hci_conn_drop(conn);
3493
3494         set_bit(HCI_CONN_NEW_LINK_KEY, &conn->flags);
3495         conn_set_key(conn, ev->key_type, conn->pin_length);
3496
3497         if (!hci_dev_test_flag(hdev, HCI_MGMT))
3498                 goto unlock;
3499
3500         key = hci_add_link_key(hdev, conn, &ev->bdaddr, ev->link_key,
3501                                 ev->key_type, pin_len, &persistent);
3502         if (!key)
3503                 goto unlock;
3504
3505         /* Update connection information since adding the key will have
3506          * fixed up the type in the case of changed combination keys.
3507          */
3508         if (ev->key_type == HCI_LK_CHANGED_COMBINATION)
3509                 conn_set_key(conn, key->type, key->pin_len);
3510
3511         mgmt_new_link_key(hdev, key, persistent);
3512
3513         /* Keep debug keys around only if the HCI_KEEP_DEBUG_KEYS flag
3514          * is set. If it's not set simply remove the key from the kernel
3515          * list (we've still notified user space about it but with
3516          * store_hint being 0).
3517          */
3518         if (key->type == HCI_LK_DEBUG_COMBINATION &&
3519             !hci_dev_test_flag(hdev, HCI_KEEP_DEBUG_KEYS)) {
3520                 list_del_rcu(&key->list);
3521                 kfree_rcu(key, rcu);
3522                 goto unlock;
3523         }
3524
3525         if (persistent)
3526                 clear_bit(HCI_CONN_FLUSH_KEY, &conn->flags);
3527         else
3528                 set_bit(HCI_CONN_FLUSH_KEY, &conn->flags);
3529
3530 unlock:
3531         hci_dev_unlock(hdev);
3532 }
3533
3534 static void hci_clock_offset_evt(struct hci_dev *hdev, struct sk_buff *skb)
3535 {
3536         struct hci_ev_clock_offset *ev = (void *) skb->data;
3537         struct hci_conn *conn;
3538
3539         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3540
3541         hci_dev_lock(hdev);
3542
3543         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
3544         if (conn && !ev->status) {
3545                 struct inquiry_entry *ie;
3546
3547                 ie = hci_inquiry_cache_lookup(hdev, &conn->dst);
3548                 if (ie) {
3549                         ie->data.clock_offset = ev->clock_offset;
3550                         ie->timestamp = jiffies;
3551                 }
3552         }
3553
3554         hci_dev_unlock(hdev);
3555 }
3556
3557 static void hci_pkt_type_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
3558 {
3559         struct hci_ev_pkt_type_change *ev = (void *) skb->data;
3560         struct hci_conn *conn;
3561
3562         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3563
3564         hci_dev_lock(hdev);
3565
3566         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
3567         if (conn && !ev->status)
3568                 conn->pkt_type = __le16_to_cpu(ev->pkt_type);
3569
3570         hci_dev_unlock(hdev);
3571 }
3572
3573 static void hci_pscan_rep_mode_evt(struct hci_dev *hdev, struct sk_buff *skb)
3574 {
3575         struct hci_ev_pscan_rep_mode *ev = (void *) skb->data;
3576         struct inquiry_entry *ie;
3577
3578         BT_DBG("%s", hdev->name);
3579
3580         hci_dev_lock(hdev);
3581
3582         ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr);
3583         if (ie) {
3584                 ie->data.pscan_rep_mode = ev->pscan_rep_mode;
3585                 ie->timestamp = jiffies;
3586         }
3587
3588         hci_dev_unlock(hdev);
3589 }
3590
3591 static void hci_inquiry_result_with_rssi_evt(struct hci_dev *hdev,
3592                                              struct sk_buff *skb)
3593 {
3594         struct inquiry_data data;
3595         int num_rsp = *((__u8 *) skb->data);
3596
3597         BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
3598
3599         if (!num_rsp)
3600                 return;
3601
3602         if (hci_dev_test_flag(hdev, HCI_PERIODIC_INQ))
3603                 return;
3604
3605         hci_dev_lock(hdev);
3606
3607         if ((skb->len - 1) / num_rsp != sizeof(struct inquiry_info_with_rssi)) {
3608                 struct inquiry_info_with_rssi_and_pscan_mode *info;
3609                 info = (void *) (skb->data + 1);
3610
3611                 for (; num_rsp; num_rsp--, info++) {
3612                         u32 flags;
3613
3614                         bacpy(&data.bdaddr, &info->bdaddr);
3615                         data.pscan_rep_mode     = info->pscan_rep_mode;
3616                         data.pscan_period_mode  = info->pscan_period_mode;
3617                         data.pscan_mode         = info->pscan_mode;
3618                         memcpy(data.dev_class, info->dev_class, 3);
3619                         data.clock_offset       = info->clock_offset;
3620                         data.rssi               = info->rssi;
3621                         data.ssp_mode           = 0x00;
3622
3623                         flags = hci_inquiry_cache_update(hdev, &data, false);
3624
3625                         mgmt_device_found(hdev, &info->bdaddr, ACL_LINK, 0x00,
3626                                           info->dev_class, info->rssi,
3627                                           flags, NULL, 0, NULL, 0);
3628                 }
3629         } else {
3630                 struct inquiry_info_with_rssi *info = (void *) (skb->data + 1);
3631
3632                 for (; num_rsp; num_rsp--, info++) {
3633                         u32 flags;
3634
3635                         bacpy(&data.bdaddr, &info->bdaddr);
3636                         data.pscan_rep_mode     = info->pscan_rep_mode;
3637                         data.pscan_period_mode  = info->pscan_period_mode;
3638                         data.pscan_mode         = 0x00;
3639                         memcpy(data.dev_class, info->dev_class, 3);
3640                         data.clock_offset       = info->clock_offset;
3641                         data.rssi               = info->rssi;
3642                         data.ssp_mode           = 0x00;
3643
3644                         flags = hci_inquiry_cache_update(hdev, &data, false);
3645
3646                         mgmt_device_found(hdev, &info->bdaddr, ACL_LINK, 0x00,
3647                                           info->dev_class, info->rssi,
3648                                           flags, NULL, 0, NULL, 0);
3649                 }
3650         }
3651
3652         hci_dev_unlock(hdev);
3653 }
3654
3655 static void hci_remote_ext_features_evt(struct hci_dev *hdev,
3656                                         struct sk_buff *skb)
3657 {
3658         struct hci_ev_remote_ext_features *ev = (void *) skb->data;
3659         struct hci_conn *conn;
3660
3661         BT_DBG("%s", hdev->name);
3662
3663         hci_dev_lock(hdev);
3664
3665         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
3666         if (!conn)
3667                 goto unlock;
3668
3669         if (ev->page < HCI_MAX_PAGES)
3670                 memcpy(conn->features[ev->page], ev->features, 8);
3671
3672         if (!ev->status && ev->page == 0x01) {
3673                 struct inquiry_entry *ie;
3674
3675                 ie = hci_inquiry_cache_lookup(hdev, &conn->dst);
3676                 if (ie)
3677                         ie->data.ssp_mode = (ev->features[0] & LMP_HOST_SSP);
3678
3679                 if (ev->features[0] & LMP_HOST_SSP) {
3680                         set_bit(HCI_CONN_SSP_ENABLED, &conn->flags);
3681                 } else {
3682                         /* It is mandatory by the Bluetooth specification that
3683                          * Extended Inquiry Results are only used when Secure
3684                          * Simple Pairing is enabled, but some devices violate
3685                          * this.
3686                          *
3687                          * To make these devices work, the internal SSP
3688                          * enabled flag needs to be cleared if the remote host
3689                          * features do not indicate SSP support */
3690                         clear_bit(HCI_CONN_SSP_ENABLED, &conn->flags);
3691                 }
3692
3693                 if (ev->features[0] & LMP_HOST_SC)
3694                         set_bit(HCI_CONN_SC_ENABLED, &conn->flags);
3695         }
3696
3697         if (conn->state != BT_CONFIG)
3698                 goto unlock;
3699
3700         if (!ev->status && !test_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags)) {
3701                 struct hci_cp_remote_name_req cp;
3702                 memset(&cp, 0, sizeof(cp));
3703                 bacpy(&cp.bdaddr, &conn->dst);
3704                 cp.pscan_rep_mode = 0x02;
3705                 hci_send_cmd(hdev, HCI_OP_REMOTE_NAME_REQ, sizeof(cp), &cp);
3706         } else if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags))
3707                 mgmt_device_connected(hdev, conn, 0, NULL, 0);
3708
3709         if (!hci_outgoing_auth_needed(hdev, conn)) {
3710                 conn->state = BT_CONNECTED;
3711                 hci_connect_cfm(conn, ev->status);
3712                 hci_conn_drop(conn);
3713         }
3714
3715 unlock:
3716         hci_dev_unlock(hdev);
3717 }
3718
3719 static void hci_sync_conn_complete_evt(struct hci_dev *hdev,
3720                                        struct sk_buff *skb)
3721 {
3722         struct hci_ev_sync_conn_complete *ev = (void *) skb->data;
3723         struct hci_conn *conn;
3724
3725         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3726
3727         hci_dev_lock(hdev);
3728
3729         conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
3730         if (!conn) {
3731                 if (ev->link_type == ESCO_LINK)
3732                         goto unlock;
3733
3734                 /* When the link type in the event indicates SCO connection
3735                  * and lookup of the connection object fails, then check
3736                  * if an eSCO connection object exists.
3737                  *
3738                  * The core limits the synchronous connections to either
3739                  * SCO or eSCO. The eSCO connection is preferred and tried
3740                  * to be setup first and until successfully established,
3741                  * the link type will be hinted as eSCO.
3742                  */
3743                 conn = hci_conn_hash_lookup_ba(hdev, ESCO_LINK, &ev->bdaddr);
3744                 if (!conn)
3745                         goto unlock;
3746         }
3747
3748         switch (ev->status) {
3749         case 0x00:
3750                 conn->handle = __le16_to_cpu(ev->handle);
3751                 conn->state  = BT_CONNECTED;
3752                 conn->type   = ev->link_type;
3753
3754                 hci_debugfs_create_conn(conn);
3755                 hci_conn_add_sysfs(conn);
3756                 break;
3757
3758         case 0x10:      /* Connection Accept Timeout */
3759         case 0x0d:      /* Connection Rejected due to Limited Resources */
3760         case 0x11:      /* Unsupported Feature or Parameter Value */
3761         case 0x1c:      /* SCO interval rejected */
3762         case 0x1a:      /* Unsupported Remote Feature */
3763         case 0x1f:      /* Unspecified error */
3764         case 0x20:      /* Unsupported LMP Parameter value */
3765                 if (conn->out) {
3766                         conn->pkt_type = (hdev->esco_type & SCO_ESCO_MASK) |
3767                                         (hdev->esco_type & EDR_ESCO_MASK);
3768                         if (hci_setup_sync(conn, conn->link->handle))
3769                                 goto unlock;
3770                 }
3771                 /* fall through */
3772
3773         default:
3774                 conn->state = BT_CLOSED;
3775                 break;
3776         }
3777
3778         hci_connect_cfm(conn, ev->status);
3779         if (ev->status)
3780                 hci_conn_del(conn);
3781
3782 unlock:
3783         hci_dev_unlock(hdev);
3784 }
3785
3786 static inline size_t eir_get_length(u8 *eir, size_t eir_len)
3787 {
3788         size_t parsed = 0;
3789
3790         while (parsed < eir_len) {
3791                 u8 field_len = eir[0];
3792
3793                 if (field_len == 0)
3794                         return parsed;
3795
3796                 parsed += field_len + 1;
3797                 eir += field_len + 1;
3798         }
3799
3800         return eir_len;
3801 }
3802
3803 static void hci_extended_inquiry_result_evt(struct hci_dev *hdev,
3804                                             struct sk_buff *skb)
3805 {
3806         struct inquiry_data data;
3807         struct extended_inquiry_info *info = (void *) (skb->data + 1);
3808         int num_rsp = *((__u8 *) skb->data);
3809         size_t eir_len;
3810
3811         BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
3812
3813         if (!num_rsp)
3814                 return;
3815
3816         if (hci_dev_test_flag(hdev, HCI_PERIODIC_INQ))
3817                 return;
3818
3819         hci_dev_lock(hdev);
3820
3821         for (; num_rsp; num_rsp--, info++) {
3822                 u32 flags;
3823                 bool name_known;
3824
3825                 bacpy(&data.bdaddr, &info->bdaddr);
3826                 data.pscan_rep_mode     = info->pscan_rep_mode;
3827                 data.pscan_period_mode  = info->pscan_period_mode;
3828                 data.pscan_mode         = 0x00;
3829                 memcpy(data.dev_class, info->dev_class, 3);
3830                 data.clock_offset       = info->clock_offset;
3831                 data.rssi               = info->rssi;
3832                 data.ssp_mode           = 0x01;
3833
3834                 if (hci_dev_test_flag(hdev, HCI_MGMT))
3835                         name_known = eir_has_data_type(info->data,
3836                                                        sizeof(info->data),
3837                                                        EIR_NAME_COMPLETE);
3838                 else
3839                         name_known = true;
3840
3841                 flags = hci_inquiry_cache_update(hdev, &data, name_known);
3842
3843                 eir_len = eir_get_length(info->data, sizeof(info->data));
3844
3845                 mgmt_device_found(hdev, &info->bdaddr, ACL_LINK, 0x00,
3846                                   info->dev_class, info->rssi,
3847                                   flags, info->data, eir_len, NULL, 0);
3848         }
3849
3850         hci_dev_unlock(hdev);
3851 }
3852
3853 static void hci_key_refresh_complete_evt(struct hci_dev *hdev,
3854                                          struct sk_buff *skb)
3855 {
3856         struct hci_ev_key_refresh_complete *ev = (void *) skb->data;
3857         struct hci_conn *conn;
3858
3859         BT_DBG("%s status 0x%2.2x handle 0x%4.4x", hdev->name, ev->status,
3860                __le16_to_cpu(ev->handle));
3861
3862         hci_dev_lock(hdev);
3863
3864         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
3865         if (!conn)
3866                 goto unlock;
3867
3868         /* For BR/EDR the necessary steps are taken through the
3869          * auth_complete event.
3870          */
3871         if (conn->type != LE_LINK)
3872                 goto unlock;
3873
3874         if (!ev->status)
3875                 conn->sec_level = conn->pending_sec_level;
3876
3877         clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
3878
3879         if (ev->status && conn->state == BT_CONNECTED) {
3880                 hci_disconnect(conn, HCI_ERROR_AUTH_FAILURE);
3881                 hci_conn_drop(conn);
3882                 goto unlock;
3883         }
3884
3885         if (conn->state == BT_CONFIG) {
3886                 if (!ev->status)
3887                         conn->state = BT_CONNECTED;
3888
3889                 hci_connect_cfm(conn, ev->status);
3890                 hci_conn_drop(conn);
3891         } else {
3892                 hci_auth_cfm(conn, ev->status);
3893
3894                 hci_conn_hold(conn);
3895                 conn->disc_timeout = HCI_DISCONN_TIMEOUT;
3896                 hci_conn_drop(conn);
3897         }
3898
3899 unlock:
3900         hci_dev_unlock(hdev);
3901 }
3902
3903 static u8 hci_get_auth_req(struct hci_conn *conn)
3904 {
3905         /* If remote requests no-bonding follow that lead */
3906         if (conn->remote_auth == HCI_AT_NO_BONDING ||
3907             conn->remote_auth == HCI_AT_NO_BONDING_MITM)
3908                 return conn->remote_auth | (conn->auth_type & 0x01);
3909
3910         /* If both remote and local have enough IO capabilities, require
3911          * MITM protection
3912          */
3913         if (conn->remote_cap != HCI_IO_NO_INPUT_OUTPUT &&
3914             conn->io_capability != HCI_IO_NO_INPUT_OUTPUT)
3915                 return conn->remote_auth | 0x01;
3916
3917         /* No MITM protection possible so ignore remote requirement */
3918         return (conn->remote_auth & ~0x01) | (conn->auth_type & 0x01);
3919 }
3920
3921 static u8 bredr_oob_data_present(struct hci_conn *conn)
3922 {
3923         struct hci_dev *hdev = conn->hdev;
3924         struct oob_data *data;
3925
3926         data = hci_find_remote_oob_data(hdev, &conn->dst, BDADDR_BREDR);
3927         if (!data)
3928                 return 0x00;
3929
3930         if (bredr_sc_enabled(hdev)) {
3931                 /* When Secure Connections is enabled, then just
3932                  * return the present value stored with the OOB
3933                  * data. The stored value contains the right present
3934                  * information. However it can only be trusted when
3935                  * not in Secure Connection Only mode.
3936                  */
3937                 if (!hci_dev_test_flag(hdev, HCI_SC_ONLY))
3938                         return data->present;
3939
3940                 /* When Secure Connections Only mode is enabled, then
3941                  * the P-256 values are required. If they are not
3942                  * available, then do not declare that OOB data is
3943                  * present.
3944                  */
3945                 if (!memcmp(data->rand256, ZERO_KEY, 16) ||
3946                     !memcmp(data->hash256, ZERO_KEY, 16))
3947                         return 0x00;
3948
3949                 return 0x02;
3950         }
3951
3952         /* When Secure Connections is not enabled or actually
3953          * not supported by the hardware, then check that if
3954          * P-192 data values are present.
3955          */
3956         if (!memcmp(data->rand192, ZERO_KEY, 16) ||
3957             !memcmp(data->hash192, ZERO_KEY, 16))
3958                 return 0x00;
3959
3960         return 0x01;
3961 }
3962
3963 static void hci_io_capa_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
3964 {
3965         struct hci_ev_io_capa_request *ev = (void *) skb->data;
3966         struct hci_conn *conn;
3967
3968         BT_DBG("%s", hdev->name);
3969
3970         hci_dev_lock(hdev);
3971
3972         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3973         if (!conn)
3974                 goto unlock;
3975
3976         hci_conn_hold(conn);
3977
3978         if (!hci_dev_test_flag(hdev, HCI_MGMT))
3979                 goto unlock;
3980
3981         /* Allow pairing if we're pairable, the initiators of the
3982          * pairing or if the remote is not requesting bonding.
3983          */
3984         if (hci_dev_test_flag(hdev, HCI_BONDABLE) ||
3985             test_bit(HCI_CONN_AUTH_INITIATOR, &conn->flags) ||
3986             (conn->remote_auth & ~0x01) == HCI_AT_NO_BONDING) {
3987                 struct hci_cp_io_capability_reply cp;
3988
3989                 bacpy(&cp.bdaddr, &ev->bdaddr);
3990                 /* Change the IO capability from KeyboardDisplay
3991                  * to DisplayYesNo as it is not supported by BT spec. */
3992                 cp.capability = (conn->io_capability == 0x04) ?
3993                                 HCI_IO_DISPLAY_YESNO : conn->io_capability;
3994
3995                 /* If we are initiators, there is no remote information yet */
3996                 if (conn->remote_auth == 0xff) {
3997                         /* Request MITM protection if our IO caps allow it
3998                          * except for the no-bonding case.
3999                          */
4000                         if (conn->io_capability != HCI_IO_NO_INPUT_OUTPUT &&
4001                             conn->auth_type != HCI_AT_NO_BONDING)
4002                                 conn->auth_type |= 0x01;
4003                 } else {
4004                         conn->auth_type = hci_get_auth_req(conn);
4005                 }
4006
4007                 /* If we're not bondable, force one of the non-bondable
4008                  * authentication requirement values.
4009                  */
4010                 if (!hci_dev_test_flag(hdev, HCI_BONDABLE))
4011                         conn->auth_type &= HCI_AT_NO_BONDING_MITM;
4012
4013                 cp.authentication = conn->auth_type;
4014                 cp.oob_data = bredr_oob_data_present(conn);
4015
4016                 hci_send_cmd(hdev, HCI_OP_IO_CAPABILITY_REPLY,
4017                              sizeof(cp), &cp);
4018         } else {
4019                 struct hci_cp_io_capability_neg_reply cp;
4020
4021                 bacpy(&cp.bdaddr, &ev->bdaddr);
4022                 cp.reason = HCI_ERROR_PAIRING_NOT_ALLOWED;
4023
4024                 hci_send_cmd(hdev, HCI_OP_IO_CAPABILITY_NEG_REPLY,
4025                              sizeof(cp), &cp);
4026         }
4027
4028 unlock:
4029         hci_dev_unlock(hdev);
4030 }
4031
4032 static void hci_io_capa_reply_evt(struct hci_dev *hdev, struct sk_buff *skb)
4033 {
4034         struct hci_ev_io_capa_reply *ev = (void *) skb->data;
4035         struct hci_conn *conn;
4036
4037         BT_DBG("%s", hdev->name);
4038
4039         hci_dev_lock(hdev);
4040
4041         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
4042         if (!conn)
4043                 goto unlock;
4044
4045         conn->remote_cap = ev->capability;
4046         conn->remote_auth = ev->authentication;
4047
4048 unlock:
4049         hci_dev_unlock(hdev);
4050 }
4051
4052 static void hci_user_confirm_request_evt(struct hci_dev *hdev,
4053                                          struct sk_buff *skb)
4054 {
4055         struct hci_ev_user_confirm_req *ev = (void *) skb->data;
4056         int loc_mitm, rem_mitm, confirm_hint = 0;
4057         struct hci_conn *conn;
4058
4059         BT_DBG("%s", hdev->name);
4060
4061         hci_dev_lock(hdev);
4062
4063         if (!hci_dev_test_flag(hdev, HCI_MGMT))
4064                 goto unlock;
4065
4066         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
4067         if (!conn)
4068                 goto unlock;
4069
4070         loc_mitm = (conn->auth_type & 0x01);
4071         rem_mitm = (conn->remote_auth & 0x01);
4072
4073         /* If we require MITM but the remote device can't provide that
4074          * (it has NoInputNoOutput) then reject the confirmation
4075          * request. We check the security level here since it doesn't
4076          * necessarily match conn->auth_type.
4077          */
4078         if (conn->pending_sec_level > BT_SECURITY_MEDIUM &&
4079             conn->remote_cap == HCI_IO_NO_INPUT_OUTPUT) {
4080                 BT_DBG("Rejecting request: remote device can't provide MITM");
4081                 hci_send_cmd(hdev, HCI_OP_USER_CONFIRM_NEG_REPLY,
4082                              sizeof(ev->bdaddr), &ev->bdaddr);
4083                 goto unlock;
4084         }
4085
4086         /* If no side requires MITM protection; auto-accept */
4087         if ((!loc_mitm || conn->remote_cap == HCI_IO_NO_INPUT_OUTPUT) &&
4088             (!rem_mitm || conn->io_capability == HCI_IO_NO_INPUT_OUTPUT)) {
4089
4090                 /* If we're not the initiators request authorization to
4091                  * proceed from user space (mgmt_user_confirm with
4092                  * confirm_hint set to 1). The exception is if neither
4093                  * side had MITM or if the local IO capability is
4094                  * NoInputNoOutput, in which case we do auto-accept
4095                  */
4096                 if (!test_bit(HCI_CONN_AUTH_PEND, &conn->flags) &&
4097                     conn->io_capability != HCI_IO_NO_INPUT_OUTPUT &&
4098                     (loc_mitm || rem_mitm)) {
4099                         BT_DBG("Confirming auto-accept as acceptor");
4100                         confirm_hint = 1;
4101                         goto confirm;
4102                 }
4103
4104                 BT_DBG("Auto-accept of user confirmation with %ums delay",
4105                        hdev->auto_accept_delay);
4106
4107                 if (hdev->auto_accept_delay > 0) {
4108                         int delay = msecs_to_jiffies(hdev->auto_accept_delay);
4109                         queue_delayed_work(conn->hdev->workqueue,
4110                                            &conn->auto_accept_work, delay);
4111                         goto unlock;
4112                 }
4113
4114                 hci_send_cmd(hdev, HCI_OP_USER_CONFIRM_REPLY,
4115                              sizeof(ev->bdaddr), &ev->bdaddr);
4116                 goto unlock;
4117         }
4118
4119 confirm:
4120         mgmt_user_confirm_request(hdev, &ev->bdaddr, ACL_LINK, 0,
4121                                   le32_to_cpu(ev->passkey), confirm_hint);
4122
4123 unlock:
4124         hci_dev_unlock(hdev);
4125 }
4126
4127 static void hci_user_passkey_request_evt(struct hci_dev *hdev,
4128                                          struct sk_buff *skb)
4129 {
4130         struct hci_ev_user_passkey_req *ev = (void *) skb->data;
4131
4132         BT_DBG("%s", hdev->name);
4133
4134         if (hci_dev_test_flag(hdev, HCI_MGMT))
4135                 mgmt_user_passkey_request(hdev, &ev->bdaddr, ACL_LINK, 0);
4136 }
4137
4138 static void hci_user_passkey_notify_evt(struct hci_dev *hdev,
4139                                         struct sk_buff *skb)
4140 {
4141         struct hci_ev_user_passkey_notify *ev = (void *) skb->data;
4142         struct hci_conn *conn;
4143
4144         BT_DBG("%s", hdev->name);
4145
4146         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
4147         if (!conn)
4148                 return;
4149
4150         conn->passkey_notify = __le32_to_cpu(ev->passkey);
4151         conn->passkey_entered = 0;
4152
4153         if (hci_dev_test_flag(hdev, HCI_MGMT))
4154                 mgmt_user_passkey_notify(hdev, &conn->dst, conn->type,
4155                                          conn->dst_type, conn->passkey_notify,
4156                                          conn->passkey_entered);
4157 }
4158
4159 static void hci_keypress_notify_evt(struct hci_dev *hdev, struct sk_buff *skb)
4160 {
4161         struct hci_ev_keypress_notify *ev = (void *) skb->data;
4162         struct hci_conn *conn;
4163
4164         BT_DBG("%s", hdev->name);
4165
4166         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
4167         if (!conn)
4168                 return;
4169
4170         switch (ev->type) {
4171         case HCI_KEYPRESS_STARTED:
4172                 conn->passkey_entered = 0;
4173                 return;
4174
4175         case HCI_KEYPRESS_ENTERED:
4176                 conn->passkey_entered++;
4177                 break;
4178
4179         case HCI_KEYPRESS_ERASED:
4180                 conn->passkey_entered--;
4181                 break;
4182
4183         case HCI_KEYPRESS_CLEARED:
4184                 conn->passkey_entered = 0;
4185                 break;
4186
4187         case HCI_KEYPRESS_COMPLETED:
4188                 return;
4189         }
4190
4191         if (hci_dev_test_flag(hdev, HCI_MGMT))
4192                 mgmt_user_passkey_notify(hdev, &conn->dst, conn->type,
4193                                          conn->dst_type, conn->passkey_notify,
4194                                          conn->passkey_entered);
4195 }
4196
4197 static void hci_simple_pair_complete_evt(struct hci_dev *hdev,
4198                                          struct sk_buff *skb)
4199 {
4200         struct hci_ev_simple_pair_complete *ev = (void *) skb->data;
4201         struct hci_conn *conn;
4202
4203         BT_DBG("%s", hdev->name);
4204
4205         hci_dev_lock(hdev);
4206
4207         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
4208         if (!conn)
4209                 goto unlock;
4210
4211         /* Reset the authentication requirement to unknown */
4212         conn->remote_auth = 0xff;
4213
4214         /* To avoid duplicate auth_failed events to user space we check
4215          * the HCI_CONN_AUTH_PEND flag which will be set if we
4216          * initiated the authentication. A traditional auth_complete
4217          * event gets always produced as initiator and is also mapped to
4218          * the mgmt_auth_failed event */
4219         if (!test_bit(HCI_CONN_AUTH_PEND, &conn->flags) && ev->status)
4220                 mgmt_auth_failed(conn, ev->status);
4221
4222         hci_conn_drop(conn);
4223
4224 unlock:
4225         hci_dev_unlock(hdev);
4226 }
4227
4228 static void hci_remote_host_features_evt(struct hci_dev *hdev,
4229                                          struct sk_buff *skb)
4230 {
4231         struct hci_ev_remote_host_features *ev = (void *) skb->data;
4232         struct inquiry_entry *ie;
4233         struct hci_conn *conn;
4234
4235         BT_DBG("%s", hdev->name);
4236
4237         hci_dev_lock(hdev);
4238
4239         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
4240         if (conn)
4241                 memcpy(conn->features[1], ev->features, 8);
4242
4243         ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr);
4244         if (ie)
4245                 ie->data.ssp_mode = (ev->features[0] & LMP_HOST_SSP);
4246
4247         hci_dev_unlock(hdev);
4248 }
4249
4250 static void hci_remote_oob_data_request_evt(struct hci_dev *hdev,
4251                                             struct sk_buff *skb)
4252 {
4253         struct hci_ev_remote_oob_data_request *ev = (void *) skb->data;
4254         struct oob_data *data;
4255
4256         BT_DBG("%s", hdev->name);
4257
4258         hci_dev_lock(hdev);
4259
4260         if (!hci_dev_test_flag(hdev, HCI_MGMT))
4261                 goto unlock;
4262
4263         data = hci_find_remote_oob_data(hdev, &ev->bdaddr, BDADDR_BREDR);
4264         if (!data) {
4265                 struct hci_cp_remote_oob_data_neg_reply cp;
4266
4267                 bacpy(&cp.bdaddr, &ev->bdaddr);
4268                 hci_send_cmd(hdev, HCI_OP_REMOTE_OOB_DATA_NEG_REPLY,
4269                              sizeof(cp), &cp);
4270                 goto unlock;
4271         }
4272
4273         if (bredr_sc_enabled(hdev)) {
4274                 struct hci_cp_remote_oob_ext_data_reply cp;
4275
4276                 bacpy(&cp.bdaddr, &ev->bdaddr);
4277                 if (hci_dev_test_flag(hdev, HCI_SC_ONLY)) {
4278                         memset(cp.hash192, 0, sizeof(cp.hash192));
4279                         memset(cp.rand192, 0, sizeof(cp.rand192));
4280                 } else {
4281                         memcpy(cp.hash192, data->hash192, sizeof(cp.hash192));
4282                         memcpy(cp.rand192, data->rand192, sizeof(cp.rand192));
4283                 }
4284                 memcpy(cp.hash256, data->hash256, sizeof(cp.hash256));
4285                 memcpy(cp.rand256, data->rand256, sizeof(cp.rand256));
4286
4287                 hci_send_cmd(hdev, HCI_OP_REMOTE_OOB_EXT_DATA_REPLY,
4288                              sizeof(cp), &cp);
4289         } else {
4290                 struct hci_cp_remote_oob_data_reply cp;
4291
4292                 bacpy(&cp.bdaddr, &ev->bdaddr);
4293                 memcpy(cp.hash, data->hash192, sizeof(cp.hash));
4294                 memcpy(cp.rand, data->rand192, sizeof(cp.rand));
4295
4296                 hci_send_cmd(hdev, HCI_OP_REMOTE_OOB_DATA_REPLY,
4297                              sizeof(cp), &cp);
4298         }
4299
4300 unlock:
4301         hci_dev_unlock(hdev);
4302 }
4303
4304 #if IS_ENABLED(CONFIG_BT_HS)
4305 static void hci_chan_selected_evt(struct hci_dev *hdev, struct sk_buff *skb)
4306 {
4307         struct hci_ev_channel_selected *ev = (void *)skb->data;
4308         struct hci_conn *hcon;
4309
4310         BT_DBG("%s handle 0x%2.2x", hdev->name, ev->phy_handle);
4311
4312         skb_pull(skb, sizeof(*ev));
4313
4314         hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle);
4315         if (!hcon)
4316                 return;
4317
4318         amp_read_loc_assoc_final_data(hdev, hcon);
4319 }
4320
4321 static void hci_phy_link_complete_evt(struct hci_dev *hdev,
4322                                       struct sk_buff *skb)
4323 {
4324         struct hci_ev_phy_link_complete *ev = (void *) skb->data;
4325         struct hci_conn *hcon, *bredr_hcon;
4326
4327         BT_DBG("%s handle 0x%2.2x status 0x%2.2x", hdev->name, ev->phy_handle,
4328                ev->status);
4329
4330         hci_dev_lock(hdev);
4331
4332         hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle);
4333         if (!hcon) {
4334                 hci_dev_unlock(hdev);
4335                 return;
4336         }
4337
4338         if (ev->status) {
4339                 hci_conn_del(hcon);
4340                 hci_dev_unlock(hdev);
4341                 return;
4342         }
4343
4344         bredr_hcon = hcon->amp_mgr->l2cap_conn->hcon;
4345
4346         hcon->state = BT_CONNECTED;
4347         bacpy(&hcon->dst, &bredr_hcon->dst);
4348
4349         hci_conn_hold(hcon);
4350         hcon->disc_timeout = HCI_DISCONN_TIMEOUT;
4351         hci_conn_drop(hcon);
4352
4353         hci_debugfs_create_conn(hcon);
4354         hci_conn_add_sysfs(hcon);
4355
4356         amp_physical_cfm(bredr_hcon, hcon);
4357
4358         hci_dev_unlock(hdev);
4359 }
4360
4361 static void hci_loglink_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
4362 {
4363         struct hci_ev_logical_link_complete *ev = (void *) skb->data;
4364         struct hci_conn *hcon;
4365         struct hci_chan *hchan;
4366         struct amp_mgr *mgr;
4367
4368         BT_DBG("%s log_handle 0x%4.4x phy_handle 0x%2.2x status 0x%2.2x",
4369                hdev->name, le16_to_cpu(ev->handle), ev->phy_handle,
4370                ev->status);
4371
4372         hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle);
4373         if (!hcon)
4374                 return;
4375
4376         /* Create AMP hchan */
4377         hchan = hci_chan_create(hcon);
4378         if (!hchan)
4379                 return;
4380
4381         hchan->handle = le16_to_cpu(ev->handle);
4382
4383         BT_DBG("hcon %p mgr %p hchan %p", hcon, hcon->amp_mgr, hchan);
4384
4385         mgr = hcon->amp_mgr;
4386         if (mgr && mgr->bredr_chan) {
4387                 struct l2cap_chan *bredr_chan = mgr->bredr_chan;
4388
4389                 l2cap_chan_lock(bredr_chan);
4390
4391                 bredr_chan->conn->mtu = hdev->block_mtu;
4392                 l2cap_logical_cfm(bredr_chan, hchan, 0);
4393                 hci_conn_hold(hcon);
4394
4395                 l2cap_chan_unlock(bredr_chan);
4396         }
4397 }
4398
4399 static void hci_disconn_loglink_complete_evt(struct hci_dev *hdev,
4400                                              struct sk_buff *skb)
4401 {
4402         struct hci_ev_disconn_logical_link_complete *ev = (void *) skb->data;
4403         struct hci_chan *hchan;
4404
4405         BT_DBG("%s log handle 0x%4.4x status 0x%2.2x", hdev->name,
4406                le16_to_cpu(ev->handle), ev->status);
4407
4408         if (ev->status)
4409                 return;
4410
4411         hci_dev_lock(hdev);
4412
4413         hchan = hci_chan_lookup_handle(hdev, le16_to_cpu(ev->handle));
4414         if (!hchan)
4415                 goto unlock;
4416
4417         amp_destroy_logical_link(hchan, ev->reason);
4418
4419 unlock:
4420         hci_dev_unlock(hdev);
4421 }
4422
4423 static void hci_disconn_phylink_complete_evt(struct hci_dev *hdev,
4424                                              struct sk_buff *skb)
4425 {
4426         struct hci_ev_disconn_phy_link_complete *ev = (void *) skb->data;
4427         struct hci_conn *hcon;
4428
4429         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
4430
4431         if (ev->status)
4432                 return;
4433
4434         hci_dev_lock(hdev);
4435
4436         hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle);
4437         if (hcon) {
4438                 hcon->state = BT_CLOSED;
4439                 hci_conn_del(hcon);
4440         }
4441
4442         hci_dev_unlock(hdev);
4443 }
4444 #endif
4445
4446 static void hci_le_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
4447 {
4448         struct hci_ev_le_conn_complete *ev = (void *) skb->data;
4449         struct hci_conn_params *params;
4450         struct hci_conn *conn;
4451         struct smp_irk *irk;
4452         u8 addr_type;
4453
4454         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
4455
4456         hci_dev_lock(hdev);
4457
4458         /* All controllers implicitly stop advertising in the event of a
4459          * connection, so ensure that the state bit is cleared.
4460          */
4461         hci_dev_clear_flag(hdev, HCI_LE_ADV);
4462
4463         conn = hci_lookup_le_connect(hdev);
4464         if (!conn) {
4465                 conn = hci_conn_add(hdev, LE_LINK, &ev->bdaddr, ev->role);
4466                 if (!conn) {
4467                         BT_ERR("No memory for new connection");
4468                         goto unlock;
4469                 }
4470
4471                 conn->dst_type = ev->bdaddr_type;
4472
4473                 /* If we didn't have a hci_conn object previously
4474                  * but we're in master role this must be something
4475                  * initiated using a white list. Since white list based
4476                  * connections are not "first class citizens" we don't
4477                  * have full tracking of them. Therefore, we go ahead
4478                  * with a "best effort" approach of determining the
4479                  * initiator address based on the HCI_PRIVACY flag.
4480                  */
4481                 if (conn->out) {
4482                         conn->resp_addr_type = ev->bdaddr_type;
4483                         bacpy(&conn->resp_addr, &ev->bdaddr);
4484                         if (hci_dev_test_flag(hdev, HCI_PRIVACY)) {
4485                                 conn->init_addr_type = ADDR_LE_DEV_RANDOM;
4486                                 bacpy(&conn->init_addr, &hdev->rpa);
4487                         } else {
4488                                 hci_copy_identity_address(hdev,
4489                                                           &conn->init_addr,
4490                                                           &conn->init_addr_type);
4491                         }
4492                 }
4493         } else {
4494                 cancel_delayed_work(&conn->le_conn_timeout);
4495         }
4496
4497         if (!conn->out) {
4498                 /* Set the responder (our side) address type based on
4499                  * the advertising address type.
4500                  */
4501                 conn->resp_addr_type = hdev->adv_addr_type;
4502                 if (hdev->adv_addr_type == ADDR_LE_DEV_RANDOM)
4503                         bacpy(&conn->resp_addr, &hdev->random_addr);
4504                 else
4505                         bacpy(&conn->resp_addr, &hdev->bdaddr);
4506
4507                 conn->init_addr_type = ev->bdaddr_type;
4508                 bacpy(&conn->init_addr, &ev->bdaddr);
4509
4510                 /* For incoming connections, set the default minimum
4511                  * and maximum connection interval. They will be used
4512                  * to check if the parameters are in range and if not
4513                  * trigger the connection update procedure.
4514                  */
4515                 conn->le_conn_min_interval = hdev->le_conn_min_interval;
4516                 conn->le_conn_max_interval = hdev->le_conn_max_interval;
4517         }
4518
4519         /* Lookup the identity address from the stored connection
4520          * address and address type.
4521          *
4522          * When establishing connections to an identity address, the
4523          * connection procedure will store the resolvable random
4524          * address first. Now if it can be converted back into the
4525          * identity address, start using the identity address from
4526          * now on.
4527          */
4528         irk = hci_get_irk(hdev, &conn->dst, conn->dst_type);
4529         if (irk) {
4530                 bacpy(&conn->dst, &irk->bdaddr);
4531                 conn->dst_type = irk->addr_type;
4532         }
4533
4534         if (ev->status) {
4535                 hci_le_conn_failed(conn, ev->status);
4536                 goto unlock;
4537         }
4538
4539         if (conn->dst_type == ADDR_LE_DEV_PUBLIC)
4540                 addr_type = BDADDR_LE_PUBLIC;
4541         else
4542                 addr_type = BDADDR_LE_RANDOM;
4543
4544         /* Drop the connection if the device is blocked */
4545         if (hci_bdaddr_list_lookup(&hdev->blacklist, &conn->dst, addr_type)) {
4546                 hci_conn_drop(conn);
4547                 goto unlock;
4548         }
4549
4550         if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags))
4551                 mgmt_device_connected(hdev, conn, 0, NULL, 0);
4552
4553         conn->sec_level = BT_SECURITY_LOW;
4554         conn->handle = __le16_to_cpu(ev->handle);
4555         conn->state = BT_CONFIG;
4556
4557         conn->le_conn_interval = le16_to_cpu(ev->interval);
4558         conn->le_conn_latency = le16_to_cpu(ev->latency);
4559         conn->le_supv_timeout = le16_to_cpu(ev->supervision_timeout);
4560
4561         hci_debugfs_create_conn(conn);
4562         hci_conn_add_sysfs(conn);
4563
4564         if (!ev->status) {
4565                 /* The remote features procedure is defined for master
4566                  * role only. So only in case of an initiated connection
4567                  * request the remote features.
4568                  *
4569                  * If the local controller supports slave-initiated features
4570                  * exchange, then requesting the remote features in slave
4571                  * role is possible. Otherwise just transition into the
4572                  * connected state without requesting the remote features.
4573                  */
4574                 if (conn->out ||
4575                     (hdev->le_features[0] & HCI_LE_SLAVE_FEATURES)) {
4576                         struct hci_cp_le_read_remote_features cp;
4577
4578                         cp.handle = __cpu_to_le16(conn->handle);
4579
4580                         hci_send_cmd(hdev, HCI_OP_LE_READ_REMOTE_FEATURES,
4581                                      sizeof(cp), &cp);
4582
4583                         hci_conn_hold(conn);
4584                 } else {
4585                         conn->state = BT_CONNECTED;
4586                         hci_connect_cfm(conn, ev->status);
4587                 }
4588         } else {
4589                 hci_connect_cfm(conn, ev->status);
4590         }
4591
4592         params = hci_pend_le_action_lookup(&hdev->pend_le_conns, &conn->dst,
4593                                            conn->dst_type);
4594         if (params) {
4595                 list_del_init(&params->action);
4596                 if (params->conn) {
4597                         hci_conn_drop(params->conn);
4598                         hci_conn_put(params->conn);
4599                         params->conn = NULL;
4600                 }
4601         }
4602
4603 unlock:
4604         hci_update_background_scan(hdev);
4605         hci_dev_unlock(hdev);
4606 }
4607
4608 static void hci_le_conn_update_complete_evt(struct hci_dev *hdev,
4609                                             struct sk_buff *skb)
4610 {
4611         struct hci_ev_le_conn_update_complete *ev = (void *) skb->data;
4612         struct hci_conn *conn;
4613
4614         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
4615
4616         if (ev->status)
4617                 return;
4618
4619         hci_dev_lock(hdev);
4620
4621         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
4622         if (conn) {
4623                 conn->le_conn_interval = le16_to_cpu(ev->interval);
4624                 conn->le_conn_latency = le16_to_cpu(ev->latency);
4625                 conn->le_supv_timeout = le16_to_cpu(ev->supervision_timeout);
4626         }
4627
4628         hci_dev_unlock(hdev);
4629 }
4630
4631 /* This function requires the caller holds hdev->lock */
4632 static struct hci_conn *check_pending_le_conn(struct hci_dev *hdev,
4633                                               bdaddr_t *addr,
4634                                               u8 addr_type, u8 adv_type)
4635 {
4636         struct hci_conn *conn;
4637         struct hci_conn_params *params;
4638
4639         /* If the event is not connectable don't proceed further */
4640         if (adv_type != LE_ADV_IND && adv_type != LE_ADV_DIRECT_IND)
4641                 return NULL;
4642
4643         /* Ignore if the device is blocked */
4644         if (hci_bdaddr_list_lookup(&hdev->blacklist, addr, addr_type))
4645                 return NULL;
4646
4647         /* Most controller will fail if we try to create new connections
4648          * while we have an existing one in slave role.
4649          */
4650         if (hdev->conn_hash.le_num_slave > 0)
4651                 return NULL;
4652
4653         /* If we're not connectable only connect devices that we have in
4654          * our pend_le_conns list.
4655          */
4656         params = hci_pend_le_action_lookup(&hdev->pend_le_conns, addr,
4657                                            addr_type);
4658         if (!params)
4659                 return NULL;
4660
4661         if (!params->explicit_connect) {
4662                 switch (params->auto_connect) {
4663                 case HCI_AUTO_CONN_DIRECT:
4664                         /* Only devices advertising with ADV_DIRECT_IND are
4665                          * triggering a connection attempt. This is allowing
4666                          * incoming connections from slave devices.
4667                          */
4668                         if (adv_type != LE_ADV_DIRECT_IND)
4669                                 return NULL;
4670                         break;
4671                 case HCI_AUTO_CONN_ALWAYS:
4672                         /* Devices advertising with ADV_IND or ADV_DIRECT_IND
4673                          * are triggering a connection attempt. This means
4674                          * that incoming connectioms from slave device are
4675                          * accepted and also outgoing connections to slave
4676                          * devices are established when found.
4677                          */
4678                         break;
4679                 default:
4680                         return NULL;
4681                 }
4682         }
4683
4684         conn = hci_connect_le(hdev, addr, addr_type, BT_SECURITY_LOW,
4685                               HCI_LE_AUTOCONN_TIMEOUT, HCI_ROLE_MASTER);
4686         if (!IS_ERR(conn)) {
4687                 /* If HCI_AUTO_CONN_EXPLICIT is set, conn is already owned
4688                  * by higher layer that tried to connect, if no then
4689                  * store the pointer since we don't really have any
4690                  * other owner of the object besides the params that
4691                  * triggered it. This way we can abort the connection if
4692                  * the parameters get removed and keep the reference
4693                  * count consistent once the connection is established.
4694                  */
4695
4696                 if (!params->explicit_connect)
4697                         params->conn = hci_conn_get(conn);
4698
4699                 return conn;
4700         }
4701
4702         switch (PTR_ERR(conn)) {
4703         case -EBUSY:
4704                 /* If hci_connect() returns -EBUSY it means there is already
4705                  * an LE connection attempt going on. Since controllers don't
4706                  * support more than one connection attempt at the time, we
4707                  * don't consider this an error case.
4708                  */
4709                 break;
4710         default:
4711                 BT_DBG("Failed to connect: err %ld", PTR_ERR(conn));
4712                 return NULL;
4713         }
4714
4715         return NULL;
4716 }
4717
4718 static void process_adv_report(struct hci_dev *hdev, u8 type, bdaddr_t *bdaddr,
4719                                u8 bdaddr_type, bdaddr_t *direct_addr,
4720                                u8 direct_addr_type, s8 rssi, u8 *data, u8 len)
4721 {
4722         struct discovery_state *d = &hdev->discovery;
4723         struct smp_irk *irk;
4724         struct hci_conn *conn;
4725         bool match;
4726         u32 flags;
4727
4728         /* If the direct address is present, then this report is from
4729          * a LE Direct Advertising Report event. In that case it is
4730          * important to see if the address is matching the local
4731          * controller address.
4732          */
4733         if (direct_addr) {
4734                 /* Only resolvable random addresses are valid for these
4735                  * kind of reports and others can be ignored.
4736                  */
4737                 if (!hci_bdaddr_is_rpa(direct_addr, direct_addr_type))
4738                         return;
4739
4740                 /* If the controller is not using resolvable random
4741                  * addresses, then this report can be ignored.
4742                  */
4743                 if (!hci_dev_test_flag(hdev, HCI_PRIVACY))
4744                         return;
4745
4746                 /* If the local IRK of the controller does not match
4747                  * with the resolvable random address provided, then
4748                  * this report can be ignored.
4749                  */
4750                 if (!smp_irk_matches(hdev, hdev->irk, direct_addr))
4751                         return;
4752         }
4753
4754         /* Check if we need to convert to identity address */
4755         irk = hci_get_irk(hdev, bdaddr, bdaddr_type);
4756         if (irk) {
4757                 bdaddr = &irk->bdaddr;
4758                 bdaddr_type = irk->addr_type;
4759         }
4760
4761         /* Check if we have been requested to connect to this device */
4762         conn = check_pending_le_conn(hdev, bdaddr, bdaddr_type, type);
4763         if (conn && type == LE_ADV_IND) {
4764                 /* Store report for later inclusion by
4765                  * mgmt_device_connected
4766                  */
4767                 memcpy(conn->le_adv_data, data, len);
4768                 conn->le_adv_data_len = len;
4769         }
4770
4771         /* Passive scanning shouldn't trigger any device found events,
4772          * except for devices marked as CONN_REPORT for which we do send
4773          * device found events.
4774          */
4775         if (hdev->le_scan_type == LE_SCAN_PASSIVE) {
4776                 if (type == LE_ADV_DIRECT_IND)
4777                         return;
4778
4779                 if (!hci_pend_le_action_lookup(&hdev->pend_le_reports,
4780                                                bdaddr, bdaddr_type))
4781                         return;
4782
4783                 if (type == LE_ADV_NONCONN_IND || type == LE_ADV_SCAN_IND)
4784                         flags = MGMT_DEV_FOUND_NOT_CONNECTABLE;
4785                 else
4786                         flags = 0;
4787                 mgmt_device_found(hdev, bdaddr, LE_LINK, bdaddr_type, NULL,
4788                                   rssi, flags, data, len, NULL, 0);
4789                 return;
4790         }
4791
4792         /* When receiving non-connectable or scannable undirected
4793          * advertising reports, this means that the remote device is
4794          * not connectable and then clearly indicate this in the
4795          * device found event.
4796          *
4797          * When receiving a scan response, then there is no way to
4798          * know if the remote device is connectable or not. However
4799          * since scan responses are merged with a previously seen
4800          * advertising report, the flags field from that report
4801          * will be used.
4802          *
4803          * In the really unlikely case that a controller get confused
4804          * and just sends a scan response event, then it is marked as
4805          * not connectable as well.
4806          */
4807         if (type == LE_ADV_NONCONN_IND || type == LE_ADV_SCAN_IND ||
4808             type == LE_ADV_SCAN_RSP)
4809                 flags = MGMT_DEV_FOUND_NOT_CONNECTABLE;
4810         else
4811                 flags = 0;
4812
4813         /* If there's nothing pending either store the data from this
4814          * event or send an immediate device found event if the data
4815          * should not be stored for later.
4816          */
4817         if (!has_pending_adv_report(hdev)) {
4818                 /* If the report will trigger a SCAN_REQ store it for
4819                  * later merging.
4820                  */
4821                 if (type == LE_ADV_IND || type == LE_ADV_SCAN_IND) {
4822                         store_pending_adv_report(hdev, bdaddr, bdaddr_type,
4823                                                  rssi, flags, data, len);
4824                         return;
4825                 }
4826
4827                 mgmt_device_found(hdev, bdaddr, LE_LINK, bdaddr_type, NULL,
4828                                   rssi, flags, data, len, NULL, 0);
4829                 return;
4830         }
4831
4832         /* Check if the pending report is for the same device as the new one */
4833         match = (!bacmp(bdaddr, &d->last_adv_addr) &&
4834                  bdaddr_type == d->last_adv_addr_type);
4835
4836         /* If the pending data doesn't match this report or this isn't a
4837          * scan response (e.g. we got a duplicate ADV_IND) then force
4838          * sending of the pending data.
4839          */
4840         if (type != LE_ADV_SCAN_RSP || !match) {
4841                 /* Send out whatever is in the cache, but skip duplicates */
4842                 if (!match)
4843                         mgmt_device_found(hdev, &d->last_adv_addr, LE_LINK,
4844                                           d->last_adv_addr_type, NULL,
4845                                           d->last_adv_rssi, d->last_adv_flags,
4846                                           d->last_adv_data,
4847                                           d->last_adv_data_len, NULL, 0);
4848
4849                 /* If the new report will trigger a SCAN_REQ store it for
4850                  * later merging.
4851                  */
4852                 if (type == LE_ADV_IND || type == LE_ADV_SCAN_IND) {
4853                         store_pending_adv_report(hdev, bdaddr, bdaddr_type,
4854                                                  rssi, flags, data, len);
4855                         return;
4856                 }
4857
4858                 /* The advertising reports cannot be merged, so clear
4859                  * the pending report and send out a device found event.
4860                  */
4861                 clear_pending_adv_report(hdev);
4862                 mgmt_device_found(hdev, bdaddr, LE_LINK, bdaddr_type, NULL,
4863                                   rssi, flags, data, len, NULL, 0);
4864                 return;
4865         }
4866
4867         /* If we get here we've got a pending ADV_IND or ADV_SCAN_IND and
4868          * the new event is a SCAN_RSP. We can therefore proceed with
4869          * sending a merged device found event.
4870          */
4871         mgmt_device_found(hdev, &d->last_adv_addr, LE_LINK,
4872                           d->last_adv_addr_type, NULL, rssi, d->last_adv_flags,
4873                           d->last_adv_data, d->last_adv_data_len, data, len);
4874         clear_pending_adv_report(hdev);
4875 }
4876
4877 static void hci_le_adv_report_evt(struct hci_dev *hdev, struct sk_buff *skb)
4878 {
4879         u8 num_reports = skb->data[0];
4880         void *ptr = &skb->data[1];
4881
4882         hci_dev_lock(hdev);
4883
4884         while (num_reports--) {
4885                 struct hci_ev_le_advertising_info *ev = ptr;
4886                 s8 rssi;
4887
4888                 rssi = ev->data[ev->length];
4889                 process_adv_report(hdev, ev->evt_type, &ev->bdaddr,
4890                                    ev->bdaddr_type, NULL, 0, rssi,
4891                                    ev->data, ev->length);
4892
4893                 ptr += sizeof(*ev) + ev->length + 1;
4894         }
4895
4896         hci_dev_unlock(hdev);
4897 }
4898
4899 static void hci_le_remote_feat_complete_evt(struct hci_dev *hdev,
4900                                             struct sk_buff *skb)
4901 {
4902         struct hci_ev_le_remote_feat_complete *ev = (void *)skb->data;
4903         struct hci_conn *conn;
4904
4905         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
4906
4907         hci_dev_lock(hdev);
4908
4909         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
4910         if (conn) {
4911                 if (!ev->status)
4912                         memcpy(conn->features[0], ev->features, 8);
4913
4914                 if (conn->state == BT_CONFIG) {
4915                         __u8 status;
4916
4917                         /* If the local controller supports slave-initiated
4918                          * features exchange, but the remote controller does
4919                          * not, then it is possible that the error code 0x1a
4920                          * for unsupported remote feature gets returned.
4921                          *
4922                          * In this specific case, allow the connection to
4923                          * transition into connected state and mark it as
4924                          * successful.
4925                          */
4926                         if ((hdev->le_features[0] & HCI_LE_SLAVE_FEATURES) &&
4927                             !conn->out && ev->status == 0x1a)
4928                                 status = 0x00;
4929                         else
4930                                 status = ev->status;
4931
4932                         conn->state = BT_CONNECTED;
4933                         hci_connect_cfm(conn, status);
4934                         hci_conn_drop(conn);
4935                 }
4936         }
4937
4938         hci_dev_unlock(hdev);
4939 }
4940
4941 static void hci_le_ltk_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
4942 {
4943         struct hci_ev_le_ltk_req *ev = (void *) skb->data;
4944         struct hci_cp_le_ltk_reply cp;
4945         struct hci_cp_le_ltk_neg_reply neg;
4946         struct hci_conn *conn;
4947         struct smp_ltk *ltk;
4948
4949         BT_DBG("%s handle 0x%4.4x", hdev->name, __le16_to_cpu(ev->handle));
4950
4951         hci_dev_lock(hdev);
4952
4953         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
4954         if (conn == NULL)
4955                 goto not_found;
4956
4957         ltk = hci_find_ltk(hdev, &conn->dst, conn->dst_type, conn->role);
4958         if (!ltk)
4959                 goto not_found;
4960
4961         if (smp_ltk_is_sc(ltk)) {
4962                 /* With SC both EDiv and Rand are set to zero */
4963                 if (ev->ediv || ev->rand)
4964                         goto not_found;
4965         } else {
4966                 /* For non-SC keys check that EDiv and Rand match */
4967                 if (ev->ediv != ltk->ediv || ev->rand != ltk->rand)
4968                         goto not_found;
4969         }
4970
4971         memcpy(cp.ltk, ltk->val, ltk->enc_size);
4972         memset(cp.ltk + ltk->enc_size, 0, sizeof(cp.ltk) - ltk->enc_size);
4973         cp.handle = cpu_to_le16(conn->handle);
4974
4975         conn->pending_sec_level = smp_ltk_sec_level(ltk);
4976
4977         conn->enc_key_size = ltk->enc_size;
4978
4979         hci_send_cmd(hdev, HCI_OP_LE_LTK_REPLY, sizeof(cp), &cp);
4980
4981         /* Ref. Bluetooth Core SPEC pages 1975 and 2004. STK is a
4982          * temporary key used to encrypt a connection following
4983          * pairing. It is used during the Encrypted Session Setup to
4984          * distribute the keys. Later, security can be re-established
4985          * using a distributed LTK.
4986          */
4987         if (ltk->type == SMP_STK) {
4988                 set_bit(HCI_CONN_STK_ENCRYPT, &conn->flags);
4989                 list_del_rcu(&ltk->list);
4990                 kfree_rcu(ltk, rcu);
4991         } else {
4992                 clear_bit(HCI_CONN_STK_ENCRYPT, &conn->flags);
4993         }
4994
4995         hci_dev_unlock(hdev);
4996
4997         return;
4998
4999 not_found:
5000         neg.handle = ev->handle;
5001         hci_send_cmd(hdev, HCI_OP_LE_LTK_NEG_REPLY, sizeof(neg), &neg);
5002         hci_dev_unlock(hdev);
5003 }
5004
5005 static void send_conn_param_neg_reply(struct hci_dev *hdev, u16 handle,
5006                                       u8 reason)
5007 {
5008         struct hci_cp_le_conn_param_req_neg_reply cp;
5009
5010         cp.handle = cpu_to_le16(handle);
5011         cp.reason = reason;
5012
5013         hci_send_cmd(hdev, HCI_OP_LE_CONN_PARAM_REQ_NEG_REPLY, sizeof(cp),
5014                      &cp);
5015 }
5016
5017 static void hci_le_remote_conn_param_req_evt(struct hci_dev *hdev,
5018                                              struct sk_buff *skb)
5019 {
5020         struct hci_ev_le_remote_conn_param_req *ev = (void *) skb->data;
5021         struct hci_cp_le_conn_param_req_reply cp;
5022         struct hci_conn *hcon;
5023         u16 handle, min, max, latency, timeout;
5024
5025         handle = le16_to_cpu(ev->handle);
5026         min = le16_to_cpu(ev->interval_min);
5027         max = le16_to_cpu(ev->interval_max);
5028         latency = le16_to_cpu(ev->latency);
5029         timeout = le16_to_cpu(ev->timeout);
5030
5031         hcon = hci_conn_hash_lookup_handle(hdev, handle);
5032         if (!hcon || hcon->state != BT_CONNECTED)
5033                 return send_conn_param_neg_reply(hdev, handle,
5034                                                  HCI_ERROR_UNKNOWN_CONN_ID);
5035
5036         if (hci_check_conn_params(min, max, latency, timeout))
5037                 return send_conn_param_neg_reply(hdev, handle,
5038                                                  HCI_ERROR_INVALID_LL_PARAMS);
5039
5040         if (hcon->role == HCI_ROLE_MASTER) {
5041                 struct hci_conn_params *params;
5042                 u8 store_hint;
5043
5044                 hci_dev_lock(hdev);
5045
5046                 params = hci_conn_params_lookup(hdev, &hcon->dst,
5047                                                 hcon->dst_type);
5048                 if (params) {
5049                         params->conn_min_interval = min;
5050                         params->conn_max_interval = max;
5051                         params->conn_latency = latency;
5052                         params->supervision_timeout = timeout;
5053                         store_hint = 0x01;
5054                 } else{
5055                         store_hint = 0x00;
5056                 }
5057
5058                 hci_dev_unlock(hdev);
5059
5060                 mgmt_new_conn_param(hdev, &hcon->dst, hcon->dst_type,
5061                                     store_hint, min, max, latency, timeout);
5062         }
5063
5064         cp.handle = ev->handle;
5065         cp.interval_min = ev->interval_min;
5066         cp.interval_max = ev->interval_max;
5067         cp.latency = ev->latency;
5068         cp.timeout = ev->timeout;
5069         cp.min_ce_len = 0;
5070         cp.max_ce_len = 0;
5071
5072         hci_send_cmd(hdev, HCI_OP_LE_CONN_PARAM_REQ_REPLY, sizeof(cp), &cp);
5073 }
5074
5075 static void hci_le_direct_adv_report_evt(struct hci_dev *hdev,
5076                                          struct sk_buff *skb)
5077 {
5078         u8 num_reports = skb->data[0];
5079         void *ptr = &skb->data[1];
5080
5081         hci_dev_lock(hdev);
5082
5083         while (num_reports--) {
5084                 struct hci_ev_le_direct_adv_info *ev = ptr;
5085
5086                 process_adv_report(hdev, ev->evt_type, &ev->bdaddr,
5087                                    ev->bdaddr_type, &ev->direct_addr,
5088                                    ev->direct_addr_type, ev->rssi, NULL, 0);
5089
5090                 ptr += sizeof(*ev);
5091         }
5092
5093         hci_dev_unlock(hdev);
5094 }
5095
5096 static void hci_le_meta_evt(struct hci_dev *hdev, struct sk_buff *skb)
5097 {
5098         struct hci_ev_le_meta *le_ev = (void *) skb->data;
5099
5100         skb_pull(skb, sizeof(*le_ev));
5101
5102         switch (le_ev->subevent) {
5103         case HCI_EV_LE_CONN_COMPLETE:
5104                 hci_le_conn_complete_evt(hdev, skb);
5105                 break;
5106
5107         case HCI_EV_LE_CONN_UPDATE_COMPLETE:
5108                 hci_le_conn_update_complete_evt(hdev, skb);
5109                 break;
5110
5111         case HCI_EV_LE_ADVERTISING_REPORT:
5112                 hci_le_adv_report_evt(hdev, skb);
5113                 break;
5114
5115         case HCI_EV_LE_REMOTE_FEAT_COMPLETE:
5116                 hci_le_remote_feat_complete_evt(hdev, skb);
5117                 break;
5118
5119         case HCI_EV_LE_LTK_REQ:
5120                 hci_le_ltk_request_evt(hdev, skb);
5121                 break;
5122
5123         case HCI_EV_LE_REMOTE_CONN_PARAM_REQ:
5124                 hci_le_remote_conn_param_req_evt(hdev, skb);
5125                 break;
5126
5127         case HCI_EV_LE_DIRECT_ADV_REPORT:
5128                 hci_le_direct_adv_report_evt(hdev, skb);
5129                 break;
5130
5131         default:
5132                 break;
5133         }
5134 }
5135
5136 static bool hci_get_cmd_complete(struct hci_dev *hdev, u16 opcode,
5137                                  u8 event, struct sk_buff *skb)
5138 {
5139         struct hci_ev_cmd_complete *ev;
5140         struct hci_event_hdr *hdr;
5141
5142         if (!skb)
5143                 return false;
5144
5145         if (skb->len < sizeof(*hdr)) {
5146                 BT_ERR("Too short HCI event");
5147                 return false;
5148         }
5149
5150         hdr = (void *) skb->data;
5151         skb_pull(skb, HCI_EVENT_HDR_SIZE);
5152
5153         if (event) {
5154                 if (hdr->evt != event)
5155                         return false;
5156                 return true;
5157         }
5158
5159         if (hdr->evt != HCI_EV_CMD_COMPLETE) {
5160                 BT_DBG("Last event is not cmd complete (0x%2.2x)", hdr->evt);
5161                 return false;
5162         }
5163
5164         if (skb->len < sizeof(*ev)) {
5165                 BT_ERR("Too short cmd_complete event");
5166                 return false;
5167         }
5168
5169         ev = (void *) skb->data;
5170         skb_pull(skb, sizeof(*ev));
5171
5172         if (opcode != __le16_to_cpu(ev->opcode)) {
5173                 BT_DBG("opcode doesn't match (0x%2.2x != 0x%2.2x)", opcode,
5174                        __le16_to_cpu(ev->opcode));
5175                 return false;
5176         }
5177
5178         return true;
5179 }
5180
5181 void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb)
5182 {
5183         struct hci_event_hdr *hdr = (void *) skb->data;
5184         hci_req_complete_t req_complete = NULL;
5185         hci_req_complete_skb_t req_complete_skb = NULL;
5186         struct sk_buff *orig_skb = NULL;
5187         u8 status = 0, event = hdr->evt, req_evt = 0;
5188         u16 opcode = HCI_OP_NOP;
5189
5190         if (hdev->sent_cmd && bt_cb(hdev->sent_cmd)->req.event == event) {
5191                 struct hci_command_hdr *cmd_hdr = (void *) hdev->sent_cmd->data;
5192                 opcode = __le16_to_cpu(cmd_hdr->opcode);
5193                 hci_req_cmd_complete(hdev, opcode, status, &req_complete,
5194                                      &req_complete_skb);
5195                 req_evt = event;
5196         }
5197
5198         /* If it looks like we might end up having to call
5199          * req_complete_skb, store a pristine copy of the skb since the
5200          * various handlers may modify the original one through
5201          * skb_pull() calls, etc.
5202          */
5203         if (req_complete_skb || event == HCI_EV_CMD_STATUS ||
5204             event == HCI_EV_CMD_COMPLETE)
5205                 orig_skb = skb_clone(skb, GFP_KERNEL);
5206
5207         skb_pull(skb, HCI_EVENT_HDR_SIZE);
5208
5209         switch (event) {
5210         case HCI_EV_INQUIRY_COMPLETE:
5211                 hci_inquiry_complete_evt(hdev, skb);
5212                 break;
5213
5214         case HCI_EV_INQUIRY_RESULT:
5215                 hci_inquiry_result_evt(hdev, skb);
5216                 break;
5217
5218         case HCI_EV_CONN_COMPLETE:
5219                 hci_conn_complete_evt(hdev, skb);
5220                 break;
5221
5222         case HCI_EV_CONN_REQUEST:
5223                 hci_conn_request_evt(hdev, skb);
5224                 break;
5225
5226         case HCI_EV_DISCONN_COMPLETE:
5227                 hci_disconn_complete_evt(hdev, skb);
5228                 break;
5229
5230         case HCI_EV_AUTH_COMPLETE:
5231                 hci_auth_complete_evt(hdev, skb);
5232                 break;
5233
5234         case HCI_EV_REMOTE_NAME:
5235                 hci_remote_name_evt(hdev, skb);
5236                 break;
5237
5238         case HCI_EV_ENCRYPT_CHANGE:
5239                 hci_encrypt_change_evt(hdev, skb);
5240                 break;
5241
5242         case HCI_EV_CHANGE_LINK_KEY_COMPLETE:
5243                 hci_change_link_key_complete_evt(hdev, skb);
5244                 break;
5245
5246         case HCI_EV_REMOTE_FEATURES:
5247                 hci_remote_features_evt(hdev, skb);
5248                 break;
5249
5250         case HCI_EV_CMD_COMPLETE:
5251                 hci_cmd_complete_evt(hdev, skb, &opcode, &status,
5252                                      &req_complete, &req_complete_skb);
5253                 break;
5254
5255         case HCI_EV_CMD_STATUS:
5256                 hci_cmd_status_evt(hdev, skb, &opcode, &status, &req_complete,
5257                                    &req_complete_skb);
5258                 break;
5259
5260         case HCI_EV_HARDWARE_ERROR:
5261                 hci_hardware_error_evt(hdev, skb);
5262                 break;
5263
5264         case HCI_EV_ROLE_CHANGE:
5265                 hci_role_change_evt(hdev, skb);
5266                 break;
5267
5268         case HCI_EV_NUM_COMP_PKTS:
5269                 hci_num_comp_pkts_evt(hdev, skb);
5270                 break;
5271
5272         case HCI_EV_MODE_CHANGE:
5273                 hci_mode_change_evt(hdev, skb);
5274                 break;
5275
5276         case HCI_EV_PIN_CODE_REQ:
5277                 hci_pin_code_request_evt(hdev, skb);
5278                 break;
5279
5280         case HCI_EV_LINK_KEY_REQ:
5281                 hci_link_key_request_evt(hdev, skb);
5282                 break;
5283
5284         case HCI_EV_LINK_KEY_NOTIFY:
5285                 hci_link_key_notify_evt(hdev, skb);
5286                 break;
5287
5288         case HCI_EV_CLOCK_OFFSET:
5289                 hci_clock_offset_evt(hdev, skb);
5290                 break;
5291
5292         case HCI_EV_PKT_TYPE_CHANGE:
5293                 hci_pkt_type_change_evt(hdev, skb);
5294                 break;
5295
5296         case HCI_EV_PSCAN_REP_MODE:
5297                 hci_pscan_rep_mode_evt(hdev, skb);
5298                 break;
5299
5300         case HCI_EV_INQUIRY_RESULT_WITH_RSSI:
5301                 hci_inquiry_result_with_rssi_evt(hdev, skb);
5302                 break;
5303
5304         case HCI_EV_REMOTE_EXT_FEATURES:
5305                 hci_remote_ext_features_evt(hdev, skb);
5306                 break;
5307
5308         case HCI_EV_SYNC_CONN_COMPLETE:
5309                 hci_sync_conn_complete_evt(hdev, skb);
5310                 break;
5311
5312         case HCI_EV_EXTENDED_INQUIRY_RESULT:
5313                 hci_extended_inquiry_result_evt(hdev, skb);
5314                 break;
5315
5316         case HCI_EV_KEY_REFRESH_COMPLETE:
5317                 hci_key_refresh_complete_evt(hdev, skb);
5318                 break;
5319
5320         case HCI_EV_IO_CAPA_REQUEST:
5321                 hci_io_capa_request_evt(hdev, skb);
5322                 break;
5323
5324         case HCI_EV_IO_CAPA_REPLY:
5325                 hci_io_capa_reply_evt(hdev, skb);
5326                 break;
5327
5328         case HCI_EV_USER_CONFIRM_REQUEST:
5329                 hci_user_confirm_request_evt(hdev, skb);
5330                 break;
5331
5332         case HCI_EV_USER_PASSKEY_REQUEST:
5333                 hci_user_passkey_request_evt(hdev, skb);
5334                 break;
5335
5336         case HCI_EV_USER_PASSKEY_NOTIFY:
5337                 hci_user_passkey_notify_evt(hdev, skb);
5338                 break;
5339
5340         case HCI_EV_KEYPRESS_NOTIFY:
5341                 hci_keypress_notify_evt(hdev, skb);
5342                 break;
5343
5344         case HCI_EV_SIMPLE_PAIR_COMPLETE:
5345                 hci_simple_pair_complete_evt(hdev, skb);
5346                 break;
5347
5348         case HCI_EV_REMOTE_HOST_FEATURES:
5349                 hci_remote_host_features_evt(hdev, skb);
5350                 break;
5351
5352         case HCI_EV_LE_META:
5353                 hci_le_meta_evt(hdev, skb);
5354                 break;
5355
5356         case HCI_EV_REMOTE_OOB_DATA_REQUEST:
5357                 hci_remote_oob_data_request_evt(hdev, skb);
5358                 break;
5359
5360 #if IS_ENABLED(CONFIG_BT_HS)
5361         case HCI_EV_CHANNEL_SELECTED:
5362                 hci_chan_selected_evt(hdev, skb);
5363                 break;
5364
5365         case HCI_EV_PHY_LINK_COMPLETE:
5366                 hci_phy_link_complete_evt(hdev, skb);
5367                 break;
5368
5369         case HCI_EV_LOGICAL_LINK_COMPLETE:
5370                 hci_loglink_complete_evt(hdev, skb);
5371                 break;
5372
5373         case HCI_EV_DISCONN_LOGICAL_LINK_COMPLETE:
5374                 hci_disconn_loglink_complete_evt(hdev, skb);
5375                 break;
5376
5377         case HCI_EV_DISCONN_PHY_LINK_COMPLETE:
5378                 hci_disconn_phylink_complete_evt(hdev, skb);
5379                 break;
5380 #endif
5381
5382         case HCI_EV_NUM_COMP_BLOCKS:
5383                 hci_num_comp_blocks_evt(hdev, skb);
5384                 break;
5385
5386         default:
5387                 BT_DBG("%s event 0x%2.2x", hdev->name, event);
5388                 break;
5389         }
5390
5391         if (req_complete) {
5392                 req_complete(hdev, status, opcode);
5393         } else if (req_complete_skb) {
5394                 if (!hci_get_cmd_complete(hdev, opcode, req_evt, orig_skb)) {
5395                         kfree_skb(orig_skb);
5396                         orig_skb = NULL;
5397                 }
5398                 req_complete_skb(hdev, status, opcode, orig_skb);
5399         }
5400
5401         kfree_skb(orig_skb);
5402         kfree_skb(skb);
5403         hdev->stat.evt_rx++;
5404 }