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