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