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