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