Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next
[pandora-kernel.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 <linux/module.h>
28
29 #include <linux/types.h>
30 #include <linux/errno.h>
31 #include <linux/kernel.h>
32 #include <linux/slab.h>
33 #include <linux/poll.h>
34 #include <linux/fcntl.h>
35 #include <linux/init.h>
36 #include <linux/skbuff.h>
37 #include <linux/interrupt.h>
38 #include <linux/notifier.h>
39 #include <net/sock.h>
40
41 #include <asm/system.h>
42 #include <linux/uaccess.h>
43 #include <asm/unaligned.h>
44
45 #include <net/bluetooth/bluetooth.h>
46 #include <net/bluetooth/hci_core.h>
47
48 static int enable_le;
49
50 /* Handle HCI Event packets */
51
52 static void hci_cc_inquiry_cancel(struct hci_dev *hdev, struct sk_buff *skb)
53 {
54         __u8 status = *((__u8 *) skb->data);
55
56         BT_DBG("%s status 0x%x", hdev->name, status);
57
58         if (status)
59                 return;
60
61         if (test_bit(HCI_MGMT, &hdev->flags) &&
62                                 test_and_clear_bit(HCI_INQUIRY, &hdev->flags))
63                 mgmt_discovering(hdev->id, 0);
64
65         hci_req_complete(hdev, HCI_OP_INQUIRY_CANCEL, status);
66
67         hci_conn_check_pending(hdev);
68 }
69
70 static void hci_cc_exit_periodic_inq(struct hci_dev *hdev, struct sk_buff *skb)
71 {
72         __u8 status = *((__u8 *) skb->data);
73
74         BT_DBG("%s status 0x%x", hdev->name, status);
75
76         if (status)
77                 return;
78
79         if (test_bit(HCI_MGMT, &hdev->flags) &&
80                                 test_and_clear_bit(HCI_INQUIRY, &hdev->flags))
81                 mgmt_discovering(hdev->id, 0);
82
83         hci_conn_check_pending(hdev);
84 }
85
86 static void hci_cc_remote_name_req_cancel(struct hci_dev *hdev, struct sk_buff *skb)
87 {
88         BT_DBG("%s", hdev->name);
89 }
90
91 static void hci_cc_role_discovery(struct hci_dev *hdev, struct sk_buff *skb)
92 {
93         struct hci_rp_role_discovery *rp = (void *) skb->data;
94         struct hci_conn *conn;
95
96         BT_DBG("%s status 0x%x", hdev->name, rp->status);
97
98         if (rp->status)
99                 return;
100
101         hci_dev_lock(hdev);
102
103         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
104         if (conn) {
105                 if (rp->role)
106                         conn->link_mode &= ~HCI_LM_MASTER;
107                 else
108                         conn->link_mode |= HCI_LM_MASTER;
109         }
110
111         hci_dev_unlock(hdev);
112 }
113
114 static void hci_cc_read_link_policy(struct hci_dev *hdev, struct sk_buff *skb)
115 {
116         struct hci_rp_read_link_policy *rp = (void *) skb->data;
117         struct hci_conn *conn;
118
119         BT_DBG("%s status 0x%x", hdev->name, rp->status);
120
121         if (rp->status)
122                 return;
123
124         hci_dev_lock(hdev);
125
126         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
127         if (conn)
128                 conn->link_policy = __le16_to_cpu(rp->policy);
129
130         hci_dev_unlock(hdev);
131 }
132
133 static void hci_cc_write_link_policy(struct hci_dev *hdev, struct sk_buff *skb)
134 {
135         struct hci_rp_write_link_policy *rp = (void *) skb->data;
136         struct hci_conn *conn;
137         void *sent;
138
139         BT_DBG("%s status 0x%x", hdev->name, rp->status);
140
141         if (rp->status)
142                 return;
143
144         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_LINK_POLICY);
145         if (!sent)
146                 return;
147
148         hci_dev_lock(hdev);
149
150         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
151         if (conn)
152                 conn->link_policy = get_unaligned_le16(sent + 2);
153
154         hci_dev_unlock(hdev);
155 }
156
157 static void hci_cc_read_def_link_policy(struct hci_dev *hdev, struct sk_buff *skb)
158 {
159         struct hci_rp_read_def_link_policy *rp = (void *) skb->data;
160
161         BT_DBG("%s status 0x%x", hdev->name, rp->status);
162
163         if (rp->status)
164                 return;
165
166         hdev->link_policy = __le16_to_cpu(rp->policy);
167 }
168
169 static void hci_cc_write_def_link_policy(struct hci_dev *hdev, struct sk_buff *skb)
170 {
171         __u8 status = *((__u8 *) skb->data);
172         void *sent;
173
174         BT_DBG("%s status 0x%x", hdev->name, status);
175
176         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_DEF_LINK_POLICY);
177         if (!sent)
178                 return;
179
180         if (!status)
181                 hdev->link_policy = get_unaligned_le16(sent);
182
183         hci_req_complete(hdev, HCI_OP_WRITE_DEF_LINK_POLICY, status);
184 }
185
186 static void hci_cc_reset(struct hci_dev *hdev, struct sk_buff *skb)
187 {
188         __u8 status = *((__u8 *) skb->data);
189
190         BT_DBG("%s status 0x%x", hdev->name, status);
191
192         clear_bit(HCI_RESET, &hdev->flags);
193
194         hci_req_complete(hdev, HCI_OP_RESET, status);
195 }
196
197 static void hci_cc_write_local_name(struct hci_dev *hdev, struct sk_buff *skb)
198 {
199         __u8 status = *((__u8 *) skb->data);
200         void *sent;
201
202         BT_DBG("%s status 0x%x", hdev->name, status);
203
204         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_LOCAL_NAME);
205         if (!sent)
206                 return;
207
208         if (test_bit(HCI_MGMT, &hdev->flags))
209                 mgmt_set_local_name_complete(hdev->id, sent, status);
210
211         if (status)
212                 return;
213
214         memcpy(hdev->dev_name, sent, HCI_MAX_NAME_LENGTH);
215 }
216
217 static void hci_cc_read_local_name(struct hci_dev *hdev, struct sk_buff *skb)
218 {
219         struct hci_rp_read_local_name *rp = (void *) skb->data;
220
221         BT_DBG("%s status 0x%x", hdev->name, rp->status);
222
223         if (rp->status)
224                 return;
225
226         memcpy(hdev->dev_name, rp->name, HCI_MAX_NAME_LENGTH);
227 }
228
229 static void hci_cc_write_auth_enable(struct hci_dev *hdev, struct sk_buff *skb)
230 {
231         __u8 status = *((__u8 *) skb->data);
232         void *sent;
233
234         BT_DBG("%s status 0x%x", hdev->name, status);
235
236         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_AUTH_ENABLE);
237         if (!sent)
238                 return;
239
240         if (!status) {
241                 __u8 param = *((__u8 *) sent);
242
243                 if (param == AUTH_ENABLED)
244                         set_bit(HCI_AUTH, &hdev->flags);
245                 else
246                         clear_bit(HCI_AUTH, &hdev->flags);
247         }
248
249         hci_req_complete(hdev, HCI_OP_WRITE_AUTH_ENABLE, status);
250 }
251
252 static void hci_cc_write_encrypt_mode(struct hci_dev *hdev, struct sk_buff *skb)
253 {
254         __u8 status = *((__u8 *) skb->data);
255         void *sent;
256
257         BT_DBG("%s status 0x%x", hdev->name, status);
258
259         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_ENCRYPT_MODE);
260         if (!sent)
261                 return;
262
263         if (!status) {
264                 __u8 param = *((__u8 *) sent);
265
266                 if (param)
267                         set_bit(HCI_ENCRYPT, &hdev->flags);
268                 else
269                         clear_bit(HCI_ENCRYPT, &hdev->flags);
270         }
271
272         hci_req_complete(hdev, HCI_OP_WRITE_ENCRYPT_MODE, status);
273 }
274
275 static void hci_cc_write_scan_enable(struct hci_dev *hdev, struct sk_buff *skb)
276 {
277         __u8 status = *((__u8 *) skb->data);
278         void *sent;
279
280         BT_DBG("%s status 0x%x", hdev->name, status);
281
282         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_SCAN_ENABLE);
283         if (!sent)
284                 return;
285
286         if (!status) {
287                 __u8 param = *((__u8 *) sent);
288                 int old_pscan, old_iscan;
289
290                 old_pscan = test_and_clear_bit(HCI_PSCAN, &hdev->flags);
291                 old_iscan = test_and_clear_bit(HCI_ISCAN, &hdev->flags);
292
293                 if (param & SCAN_INQUIRY) {
294                         set_bit(HCI_ISCAN, &hdev->flags);
295                         if (!old_iscan)
296                                 mgmt_discoverable(hdev->id, 1);
297                 } else if (old_iscan)
298                         mgmt_discoverable(hdev->id, 0);
299
300                 if (param & SCAN_PAGE) {
301                         set_bit(HCI_PSCAN, &hdev->flags);
302                         if (!old_pscan)
303                                 mgmt_connectable(hdev->id, 1);
304                 } else if (old_pscan)
305                         mgmt_connectable(hdev->id, 0);
306         }
307
308         hci_req_complete(hdev, HCI_OP_WRITE_SCAN_ENABLE, status);
309 }
310
311 static void hci_cc_read_class_of_dev(struct hci_dev *hdev, struct sk_buff *skb)
312 {
313         struct hci_rp_read_class_of_dev *rp = (void *) skb->data;
314
315         BT_DBG("%s status 0x%x", hdev->name, rp->status);
316
317         if (rp->status)
318                 return;
319
320         memcpy(hdev->dev_class, rp->dev_class, 3);
321
322         BT_DBG("%s class 0x%.2x%.2x%.2x", hdev->name,
323                 hdev->dev_class[2], hdev->dev_class[1], hdev->dev_class[0]);
324 }
325
326 static void hci_cc_write_class_of_dev(struct hci_dev *hdev, struct sk_buff *skb)
327 {
328         __u8 status = *((__u8 *) skb->data);
329         void *sent;
330
331         BT_DBG("%s status 0x%x", hdev->name, status);
332
333         if (status)
334                 return;
335
336         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_CLASS_OF_DEV);
337         if (!sent)
338                 return;
339
340         memcpy(hdev->dev_class, sent, 3);
341 }
342
343 static void hci_cc_read_voice_setting(struct hci_dev *hdev, struct sk_buff *skb)
344 {
345         struct hci_rp_read_voice_setting *rp = (void *) skb->data;
346         __u16 setting;
347
348         BT_DBG("%s status 0x%x", hdev->name, rp->status);
349
350         if (rp->status)
351                 return;
352
353         setting = __le16_to_cpu(rp->voice_setting);
354
355         if (hdev->voice_setting == setting)
356                 return;
357
358         hdev->voice_setting = setting;
359
360         BT_DBG("%s voice setting 0x%04x", hdev->name, setting);
361
362         if (hdev->notify) {
363                 tasklet_disable(&hdev->tx_task);
364                 hdev->notify(hdev, HCI_NOTIFY_VOICE_SETTING);
365                 tasklet_enable(&hdev->tx_task);
366         }
367 }
368
369 static void hci_cc_write_voice_setting(struct hci_dev *hdev, struct sk_buff *skb)
370 {
371         __u8 status = *((__u8 *) skb->data);
372         __u16 setting;
373         void *sent;
374
375         BT_DBG("%s status 0x%x", hdev->name, status);
376
377         if (status)
378                 return;
379
380         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_VOICE_SETTING);
381         if (!sent)
382                 return;
383
384         setting = get_unaligned_le16(sent);
385
386         if (hdev->voice_setting == setting)
387                 return;
388
389         hdev->voice_setting = setting;
390
391         BT_DBG("%s voice setting 0x%04x", hdev->name, setting);
392
393         if (hdev->notify) {
394                 tasklet_disable(&hdev->tx_task);
395                 hdev->notify(hdev, HCI_NOTIFY_VOICE_SETTING);
396                 tasklet_enable(&hdev->tx_task);
397         }
398 }
399
400 static void hci_cc_host_buffer_size(struct hci_dev *hdev, struct sk_buff *skb)
401 {
402         __u8 status = *((__u8 *) skb->data);
403
404         BT_DBG("%s status 0x%x", hdev->name, status);
405
406         hci_req_complete(hdev, HCI_OP_HOST_BUFFER_SIZE, status);
407 }
408
409 static void hci_cc_read_ssp_mode(struct hci_dev *hdev, struct sk_buff *skb)
410 {
411         struct hci_rp_read_ssp_mode *rp = (void *) skb->data;
412
413         BT_DBG("%s status 0x%x", hdev->name, rp->status);
414
415         if (rp->status)
416                 return;
417
418         hdev->ssp_mode = rp->mode;
419 }
420
421 static void hci_cc_write_ssp_mode(struct hci_dev *hdev, struct sk_buff *skb)
422 {
423         __u8 status = *((__u8 *) skb->data);
424         void *sent;
425
426         BT_DBG("%s status 0x%x", hdev->name, status);
427
428         if (status)
429                 return;
430
431         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_SSP_MODE);
432         if (!sent)
433                 return;
434
435         hdev->ssp_mode = *((__u8 *) sent);
436 }
437
438 static u8 hci_get_inquiry_mode(struct hci_dev *hdev)
439 {
440         if (hdev->features[6] & LMP_EXT_INQ)
441                 return 2;
442
443         if (hdev->features[3] & LMP_RSSI_INQ)
444                 return 1;
445
446         if (hdev->manufacturer == 11 && hdev->hci_rev == 0x00 &&
447                                                 hdev->lmp_subver == 0x0757)
448                 return 1;
449
450         if (hdev->manufacturer == 15) {
451                 if (hdev->hci_rev == 0x03 && hdev->lmp_subver == 0x6963)
452                         return 1;
453                 if (hdev->hci_rev == 0x09 && hdev->lmp_subver == 0x6963)
454                         return 1;
455                 if (hdev->hci_rev == 0x00 && hdev->lmp_subver == 0x6965)
456                         return 1;
457         }
458
459         if (hdev->manufacturer == 31 && hdev->hci_rev == 0x2005 &&
460                                                 hdev->lmp_subver == 0x1805)
461                 return 1;
462
463         return 0;
464 }
465
466 static void hci_setup_inquiry_mode(struct hci_dev *hdev)
467 {
468         u8 mode;
469
470         mode = hci_get_inquiry_mode(hdev);
471
472         hci_send_cmd(hdev, HCI_OP_WRITE_INQUIRY_MODE, 1, &mode);
473 }
474
475 static void hci_setup_event_mask(struct hci_dev *hdev)
476 {
477         /* The second byte is 0xff instead of 0x9f (two reserved bits
478          * disabled) since a Broadcom 1.2 dongle doesn't respond to the
479          * command otherwise */
480         u8 events[8] = { 0xff, 0xff, 0xfb, 0xff, 0x00, 0x00, 0x00, 0x00 };
481
482         /* CSR 1.1 dongles does not accept any bitfield so don't try to set
483          * any event mask for pre 1.2 devices */
484         if (hdev->lmp_ver <= 1)
485                 return;
486
487         events[4] |= 0x01; /* Flow Specification Complete */
488         events[4] |= 0x02; /* Inquiry Result with RSSI */
489         events[4] |= 0x04; /* Read Remote Extended Features Complete */
490         events[5] |= 0x08; /* Synchronous Connection Complete */
491         events[5] |= 0x10; /* Synchronous Connection Changed */
492
493         if (hdev->features[3] & LMP_RSSI_INQ)
494                 events[4] |= 0x04; /* Inquiry Result with RSSI */
495
496         if (hdev->features[5] & LMP_SNIFF_SUBR)
497                 events[5] |= 0x20; /* Sniff Subrating */
498
499         if (hdev->features[5] & LMP_PAUSE_ENC)
500                 events[5] |= 0x80; /* Encryption Key Refresh Complete */
501
502         if (hdev->features[6] & LMP_EXT_INQ)
503                 events[5] |= 0x40; /* Extended Inquiry Result */
504
505         if (hdev->features[6] & LMP_NO_FLUSH)
506                 events[7] |= 0x01; /* Enhanced Flush Complete */
507
508         if (hdev->features[7] & LMP_LSTO)
509                 events[6] |= 0x80; /* Link Supervision Timeout Changed */
510
511         if (hdev->features[6] & LMP_SIMPLE_PAIR) {
512                 events[6] |= 0x01;      /* IO Capability Request */
513                 events[6] |= 0x02;      /* IO Capability Response */
514                 events[6] |= 0x04;      /* User Confirmation Request */
515                 events[6] |= 0x08;      /* User Passkey Request */
516                 events[6] |= 0x10;      /* Remote OOB Data Request */
517                 events[6] |= 0x20;      /* Simple Pairing Complete */
518                 events[7] |= 0x04;      /* User Passkey Notification */
519                 events[7] |= 0x08;      /* Keypress Notification */
520                 events[7] |= 0x10;      /* Remote Host Supported
521                                          * Features Notification */
522         }
523
524         if (hdev->features[4] & LMP_LE)
525                 events[7] |= 0x20;      /* LE Meta-Event */
526
527         hci_send_cmd(hdev, HCI_OP_SET_EVENT_MASK, sizeof(events), events);
528 }
529
530 static void hci_set_le_support(struct hci_dev *hdev)
531 {
532         struct hci_cp_write_le_host_supported cp;
533
534         memset(&cp, 0, sizeof(cp));
535
536         if (enable_le) {
537                 cp.le = 1;
538                 cp.simul = !!(hdev->features[6] & LMP_SIMUL_LE_BR);
539         }
540
541         hci_send_cmd(hdev, HCI_OP_WRITE_LE_HOST_SUPPORTED, sizeof(cp), &cp);
542 }
543
544 static void hci_setup(struct hci_dev *hdev)
545 {
546         hci_setup_event_mask(hdev);
547
548         if (hdev->lmp_ver > 1)
549                 hci_send_cmd(hdev, HCI_OP_READ_LOCAL_COMMANDS, 0, NULL);
550
551         if (hdev->features[6] & LMP_SIMPLE_PAIR) {
552                 u8 mode = 0x01;
553                 hci_send_cmd(hdev, HCI_OP_WRITE_SSP_MODE, sizeof(mode), &mode);
554         }
555
556         if (hdev->features[3] & LMP_RSSI_INQ)
557                 hci_setup_inquiry_mode(hdev);
558
559         if (hdev->features[7] & LMP_INQ_TX_PWR)
560                 hci_send_cmd(hdev, HCI_OP_READ_INQ_RSP_TX_POWER, 0, NULL);
561
562         if (hdev->features[7] & LMP_EXTFEATURES) {
563                 struct hci_cp_read_local_ext_features cp;
564
565                 cp.page = 0x01;
566                 hci_send_cmd(hdev, HCI_OP_READ_LOCAL_EXT_FEATURES,
567                                                         sizeof(cp), &cp);
568         }
569
570         if (hdev->features[4] & LMP_LE)
571                 hci_set_le_support(hdev);
572 }
573
574 static void hci_cc_read_local_version(struct hci_dev *hdev, struct sk_buff *skb)
575 {
576         struct hci_rp_read_local_version *rp = (void *) skb->data;
577
578         BT_DBG("%s status 0x%x", hdev->name, rp->status);
579
580         if (rp->status)
581                 return;
582
583         hdev->hci_ver = rp->hci_ver;
584         hdev->hci_rev = __le16_to_cpu(rp->hci_rev);
585         hdev->lmp_ver = rp->lmp_ver;
586         hdev->manufacturer = __le16_to_cpu(rp->manufacturer);
587         hdev->lmp_subver = __le16_to_cpu(rp->lmp_subver);
588
589         BT_DBG("%s manufacturer %d hci ver %d:%d", hdev->name,
590                                         hdev->manufacturer,
591                                         hdev->hci_ver, hdev->hci_rev);
592
593         if (test_bit(HCI_INIT, &hdev->flags))
594                 hci_setup(hdev);
595 }
596
597 static void hci_setup_link_policy(struct hci_dev *hdev)
598 {
599         u16 link_policy = 0;
600
601         if (hdev->features[0] & LMP_RSWITCH)
602                 link_policy |= HCI_LP_RSWITCH;
603         if (hdev->features[0] & LMP_HOLD)
604                 link_policy |= HCI_LP_HOLD;
605         if (hdev->features[0] & LMP_SNIFF)
606                 link_policy |= HCI_LP_SNIFF;
607         if (hdev->features[1] & LMP_PARK)
608                 link_policy |= HCI_LP_PARK;
609
610         link_policy = cpu_to_le16(link_policy);
611         hci_send_cmd(hdev, HCI_OP_WRITE_DEF_LINK_POLICY,
612                                         sizeof(link_policy), &link_policy);
613 }
614
615 static void hci_cc_read_local_commands(struct hci_dev *hdev, struct sk_buff *skb)
616 {
617         struct hci_rp_read_local_commands *rp = (void *) skb->data;
618
619         BT_DBG("%s status 0x%x", hdev->name, rp->status);
620
621         if (rp->status)
622                 goto done;
623
624         memcpy(hdev->commands, rp->commands, sizeof(hdev->commands));
625
626         if (test_bit(HCI_INIT, &hdev->flags) && (hdev->commands[5] & 0x10))
627                 hci_setup_link_policy(hdev);
628
629 done:
630         hci_req_complete(hdev, HCI_OP_READ_LOCAL_COMMANDS, rp->status);
631 }
632
633 static void hci_cc_read_local_features(struct hci_dev *hdev, struct sk_buff *skb)
634 {
635         struct hci_rp_read_local_features *rp = (void *) skb->data;
636
637         BT_DBG("%s status 0x%x", hdev->name, rp->status);
638
639         if (rp->status)
640                 return;
641
642         memcpy(hdev->features, rp->features, 8);
643
644         /* Adjust default settings according to features
645          * supported by device. */
646
647         if (hdev->features[0] & LMP_3SLOT)
648                 hdev->pkt_type |= (HCI_DM3 | HCI_DH3);
649
650         if (hdev->features[0] & LMP_5SLOT)
651                 hdev->pkt_type |= (HCI_DM5 | HCI_DH5);
652
653         if (hdev->features[1] & LMP_HV2) {
654                 hdev->pkt_type  |= (HCI_HV2);
655                 hdev->esco_type |= (ESCO_HV2);
656         }
657
658         if (hdev->features[1] & LMP_HV3) {
659                 hdev->pkt_type  |= (HCI_HV3);
660                 hdev->esco_type |= (ESCO_HV3);
661         }
662
663         if (hdev->features[3] & LMP_ESCO)
664                 hdev->esco_type |= (ESCO_EV3);
665
666         if (hdev->features[4] & LMP_EV4)
667                 hdev->esco_type |= (ESCO_EV4);
668
669         if (hdev->features[4] & LMP_EV5)
670                 hdev->esco_type |= (ESCO_EV5);
671
672         if (hdev->features[5] & LMP_EDR_ESCO_2M)
673                 hdev->esco_type |= (ESCO_2EV3);
674
675         if (hdev->features[5] & LMP_EDR_ESCO_3M)
676                 hdev->esco_type |= (ESCO_3EV3);
677
678         if (hdev->features[5] & LMP_EDR_3S_ESCO)
679                 hdev->esco_type |= (ESCO_2EV5 | ESCO_3EV5);
680
681         BT_DBG("%s features 0x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x", hdev->name,
682                                         hdev->features[0], hdev->features[1],
683                                         hdev->features[2], hdev->features[3],
684                                         hdev->features[4], hdev->features[5],
685                                         hdev->features[6], hdev->features[7]);
686 }
687
688 static void hci_cc_read_local_ext_features(struct hci_dev *hdev,
689                                                         struct sk_buff *skb)
690 {
691         struct hci_rp_read_local_ext_features *rp = (void *) skb->data;
692
693         BT_DBG("%s status 0x%x", hdev->name, rp->status);
694
695         if (rp->status)
696                 return;
697
698         memcpy(hdev->extfeatures, rp->features, 8);
699
700         hci_req_complete(hdev, HCI_OP_READ_LOCAL_EXT_FEATURES, rp->status);
701 }
702
703 static void hci_cc_read_buffer_size(struct hci_dev *hdev, struct sk_buff *skb)
704 {
705         struct hci_rp_read_buffer_size *rp = (void *) skb->data;
706
707         BT_DBG("%s status 0x%x", hdev->name, rp->status);
708
709         if (rp->status)
710                 return;
711
712         hdev->acl_mtu  = __le16_to_cpu(rp->acl_mtu);
713         hdev->sco_mtu  = rp->sco_mtu;
714         hdev->acl_pkts = __le16_to_cpu(rp->acl_max_pkt);
715         hdev->sco_pkts = __le16_to_cpu(rp->sco_max_pkt);
716
717         if (test_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE, &hdev->quirks)) {
718                 hdev->sco_mtu  = 64;
719                 hdev->sco_pkts = 8;
720         }
721
722         hdev->acl_cnt = hdev->acl_pkts;
723         hdev->sco_cnt = hdev->sco_pkts;
724
725         BT_DBG("%s acl mtu %d:%d sco mtu %d:%d", hdev->name,
726                                         hdev->acl_mtu, hdev->acl_pkts,
727                                         hdev->sco_mtu, hdev->sco_pkts);
728 }
729
730 static void hci_cc_read_bd_addr(struct hci_dev *hdev, struct sk_buff *skb)
731 {
732         struct hci_rp_read_bd_addr *rp = (void *) skb->data;
733
734         BT_DBG("%s status 0x%x", hdev->name, rp->status);
735
736         if (!rp->status)
737                 bacpy(&hdev->bdaddr, &rp->bdaddr);
738
739         hci_req_complete(hdev, HCI_OP_READ_BD_ADDR, rp->status);
740 }
741
742 static void hci_cc_write_ca_timeout(struct hci_dev *hdev, struct sk_buff *skb)
743 {
744         __u8 status = *((__u8 *) skb->data);
745
746         BT_DBG("%s status 0x%x", hdev->name, status);
747
748         hci_req_complete(hdev, HCI_OP_WRITE_CA_TIMEOUT, status);
749 }
750
751 static void hci_cc_delete_stored_link_key(struct hci_dev *hdev,
752                                                         struct sk_buff *skb)
753 {
754         __u8 status = *((__u8 *) skb->data);
755
756         BT_DBG("%s status 0x%x", hdev->name, status);
757
758         hci_req_complete(hdev, HCI_OP_DELETE_STORED_LINK_KEY, status);
759 }
760
761 static void hci_cc_set_event_mask(struct hci_dev *hdev, struct sk_buff *skb)
762 {
763         __u8 status = *((__u8 *) skb->data);
764
765         BT_DBG("%s status 0x%x", hdev->name, status);
766
767         hci_req_complete(hdev, HCI_OP_SET_EVENT_MASK, status);
768 }
769
770 static void hci_cc_write_inquiry_mode(struct hci_dev *hdev,
771                                                         struct sk_buff *skb)
772 {
773         __u8 status = *((__u8 *) skb->data);
774
775         BT_DBG("%s status 0x%x", hdev->name, status);
776
777         hci_req_complete(hdev, HCI_OP_WRITE_INQUIRY_MODE, status);
778 }
779
780 static void hci_cc_read_inq_rsp_tx_power(struct hci_dev *hdev,
781                                                         struct sk_buff *skb)
782 {
783         __u8 status = *((__u8 *) skb->data);
784
785         BT_DBG("%s status 0x%x", hdev->name, status);
786
787         hci_req_complete(hdev, HCI_OP_READ_INQ_RSP_TX_POWER, status);
788 }
789
790 static void hci_cc_set_event_flt(struct hci_dev *hdev, struct sk_buff *skb)
791 {
792         __u8 status = *((__u8 *) skb->data);
793
794         BT_DBG("%s status 0x%x", hdev->name, status);
795
796         hci_req_complete(hdev, HCI_OP_SET_EVENT_FLT, status);
797 }
798
799 static void hci_cc_pin_code_reply(struct hci_dev *hdev, struct sk_buff *skb)
800 {
801         struct hci_rp_pin_code_reply *rp = (void *) skb->data;
802         struct hci_cp_pin_code_reply *cp;
803         struct hci_conn *conn;
804
805         BT_DBG("%s status 0x%x", hdev->name, rp->status);
806
807         if (test_bit(HCI_MGMT, &hdev->flags))
808                 mgmt_pin_code_reply_complete(hdev->id, &rp->bdaddr, rp->status);
809
810         if (rp->status != 0)
811                 return;
812
813         cp = hci_sent_cmd_data(hdev, HCI_OP_PIN_CODE_REPLY);
814         if (!cp)
815                 return;
816
817         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
818         if (conn)
819                 conn->pin_length = cp->pin_len;
820 }
821
822 static void hci_cc_pin_code_neg_reply(struct hci_dev *hdev, struct sk_buff *skb)
823 {
824         struct hci_rp_pin_code_neg_reply *rp = (void *) skb->data;
825
826         BT_DBG("%s status 0x%x", hdev->name, rp->status);
827
828         if (test_bit(HCI_MGMT, &hdev->flags))
829                 mgmt_pin_code_neg_reply_complete(hdev->id, &rp->bdaddr,
830                                                                 rp->status);
831 }
832 static void hci_cc_le_read_buffer_size(struct hci_dev *hdev,
833                                        struct sk_buff *skb)
834 {
835         struct hci_rp_le_read_buffer_size *rp = (void *) skb->data;
836
837         BT_DBG("%s status 0x%x", hdev->name, rp->status);
838
839         if (rp->status)
840                 return;
841
842         hdev->le_mtu = __le16_to_cpu(rp->le_mtu);
843         hdev->le_pkts = rp->le_max_pkt;
844
845         hdev->le_cnt = hdev->le_pkts;
846
847         BT_DBG("%s le mtu %d:%d", hdev->name, hdev->le_mtu, hdev->le_pkts);
848
849         hci_req_complete(hdev, HCI_OP_LE_READ_BUFFER_SIZE, rp->status);
850 }
851
852 static void hci_cc_user_confirm_reply(struct hci_dev *hdev, struct sk_buff *skb)
853 {
854         struct hci_rp_user_confirm_reply *rp = (void *) skb->data;
855
856         BT_DBG("%s status 0x%x", hdev->name, rp->status);
857
858         if (test_bit(HCI_MGMT, &hdev->flags))
859                 mgmt_user_confirm_reply_complete(hdev->id, &rp->bdaddr,
860                                                                 rp->status);
861 }
862
863 static void hci_cc_user_confirm_neg_reply(struct hci_dev *hdev,
864                                                         struct sk_buff *skb)
865 {
866         struct hci_rp_user_confirm_reply *rp = (void *) skb->data;
867
868         BT_DBG("%s status 0x%x", hdev->name, rp->status);
869
870         if (test_bit(HCI_MGMT, &hdev->flags))
871                 mgmt_user_confirm_neg_reply_complete(hdev->id, &rp->bdaddr,
872                                                                 rp->status);
873 }
874
875 static void hci_cc_read_local_oob_data_reply(struct hci_dev *hdev,
876                                                         struct sk_buff *skb)
877 {
878         struct hci_rp_read_local_oob_data *rp = (void *) skb->data;
879
880         BT_DBG("%s status 0x%x", hdev->name, rp->status);
881
882         mgmt_read_local_oob_data_reply_complete(hdev->id, rp->hash,
883                                                 rp->randomizer, rp->status);
884 }
885
886 static void hci_cc_le_set_scan_enable(struct hci_dev *hdev,
887                                         struct sk_buff *skb)
888 {
889         struct hci_cp_le_set_scan_enable *cp;
890         __u8 status = *((__u8 *) skb->data);
891
892         BT_DBG("%s status 0x%x", hdev->name, status);
893
894         if (status)
895                 return;
896
897         cp = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_SCAN_ENABLE);
898         if (!cp)
899                 return;
900
901         hci_dev_lock(hdev);
902
903         if (cp->enable == 0x01) {
904                 del_timer(&hdev->adv_timer);
905                 hci_adv_entries_clear(hdev);
906         } else if (cp->enable == 0x00) {
907                 mod_timer(&hdev->adv_timer, jiffies + ADV_CLEAR_TIMEOUT);
908         }
909
910         hci_dev_unlock(hdev);
911 }
912
913 static void hci_cc_le_ltk_reply(struct hci_dev *hdev, struct sk_buff *skb)
914 {
915         struct hci_rp_le_ltk_reply *rp = (void *) skb->data;
916
917         BT_DBG("%s status 0x%x", hdev->name, rp->status);
918
919         if (rp->status)
920                 return;
921
922         hci_req_complete(hdev, HCI_OP_LE_LTK_REPLY, rp->status);
923 }
924
925 static void hci_cc_le_ltk_neg_reply(struct hci_dev *hdev, struct sk_buff *skb)
926 {
927         struct hci_rp_le_ltk_neg_reply *rp = (void *) skb->data;
928
929         BT_DBG("%s status 0x%x", hdev->name, rp->status);
930
931         if (rp->status)
932                 return;
933
934         hci_req_complete(hdev, HCI_OP_LE_LTK_NEG_REPLY, rp->status);
935 }
936
937 static inline void hci_cc_write_le_host_supported(struct hci_dev *hdev,
938                                                         struct sk_buff *skb)
939 {
940         struct hci_cp_read_local_ext_features cp;
941         __u8 status = *((__u8 *) skb->data);
942
943         BT_DBG("%s status 0x%x", hdev->name, status);
944
945         if (status)
946                 return;
947
948         cp.page = 0x01;
949         hci_send_cmd(hdev, HCI_OP_READ_LOCAL_EXT_FEATURES, sizeof(cp), &cp);
950 }
951
952 static inline void hci_cs_inquiry(struct hci_dev *hdev, __u8 status)
953 {
954         BT_DBG("%s status 0x%x", hdev->name, status);
955
956         if (status) {
957                 hci_req_complete(hdev, HCI_OP_INQUIRY, status);
958                 hci_conn_check_pending(hdev);
959                 return;
960         }
961
962         if (test_bit(HCI_MGMT, &hdev->flags) &&
963                                         !test_and_set_bit(HCI_INQUIRY,
964                                                         &hdev->flags))
965                 mgmt_discovering(hdev->id, 1);
966 }
967
968 static inline void hci_cs_create_conn(struct hci_dev *hdev, __u8 status)
969 {
970         struct hci_cp_create_conn *cp;
971         struct hci_conn *conn;
972
973         BT_DBG("%s status 0x%x", hdev->name, status);
974
975         cp = hci_sent_cmd_data(hdev, HCI_OP_CREATE_CONN);
976         if (!cp)
977                 return;
978
979         hci_dev_lock(hdev);
980
981         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
982
983         BT_DBG("%s bdaddr %s conn %p", hdev->name, batostr(&cp->bdaddr), conn);
984
985         if (status) {
986                 if (conn && conn->state == BT_CONNECT) {
987                         if (status != 0x0c || conn->attempt > 2) {
988                                 conn->state = BT_CLOSED;
989                                 hci_proto_connect_cfm(conn, status);
990                                 hci_conn_del(conn);
991                         } else
992                                 conn->state = BT_CONNECT2;
993                 }
994         } else {
995                 if (!conn) {
996                         conn = hci_conn_add(hdev, ACL_LINK, &cp->bdaddr);
997                         if (conn) {
998                                 conn->out = 1;
999                                 conn->link_mode |= HCI_LM_MASTER;
1000                         } else
1001                                 BT_ERR("No memory for new connection");
1002                 }
1003         }
1004
1005         hci_dev_unlock(hdev);
1006 }
1007
1008 static void hci_cs_add_sco(struct hci_dev *hdev, __u8 status)
1009 {
1010         struct hci_cp_add_sco *cp;
1011         struct hci_conn *acl, *sco;
1012         __u16 handle;
1013
1014         BT_DBG("%s status 0x%x", hdev->name, status);
1015
1016         if (!status)
1017                 return;
1018
1019         cp = hci_sent_cmd_data(hdev, HCI_OP_ADD_SCO);
1020         if (!cp)
1021                 return;
1022
1023         handle = __le16_to_cpu(cp->handle);
1024
1025         BT_DBG("%s handle %d", hdev->name, handle);
1026
1027         hci_dev_lock(hdev);
1028
1029         acl = hci_conn_hash_lookup_handle(hdev, handle);
1030         if (acl) {
1031                 sco = acl->link;
1032                 if (sco) {
1033                         sco->state = BT_CLOSED;
1034
1035                         hci_proto_connect_cfm(sco, status);
1036                         hci_conn_del(sco);
1037                 }
1038         }
1039
1040         hci_dev_unlock(hdev);
1041 }
1042
1043 static void hci_cs_auth_requested(struct hci_dev *hdev, __u8 status)
1044 {
1045         struct hci_cp_auth_requested *cp;
1046         struct hci_conn *conn;
1047
1048         BT_DBG("%s status 0x%x", hdev->name, status);
1049
1050         if (!status)
1051                 return;
1052
1053         cp = hci_sent_cmd_data(hdev, HCI_OP_AUTH_REQUESTED);
1054         if (!cp)
1055                 return;
1056
1057         hci_dev_lock(hdev);
1058
1059         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1060         if (conn) {
1061                 if (conn->state == BT_CONFIG) {
1062                         hci_proto_connect_cfm(conn, status);
1063                         hci_conn_put(conn);
1064                 }
1065         }
1066
1067         hci_dev_unlock(hdev);
1068 }
1069
1070 static void hci_cs_set_conn_encrypt(struct hci_dev *hdev, __u8 status)
1071 {
1072         struct hci_cp_set_conn_encrypt *cp;
1073         struct hci_conn *conn;
1074
1075         BT_DBG("%s status 0x%x", hdev->name, status);
1076
1077         if (!status)
1078                 return;
1079
1080         cp = hci_sent_cmd_data(hdev, HCI_OP_SET_CONN_ENCRYPT);
1081         if (!cp)
1082                 return;
1083
1084         hci_dev_lock(hdev);
1085
1086         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1087         if (conn) {
1088                 if (conn->state == BT_CONFIG) {
1089                         hci_proto_connect_cfm(conn, status);
1090                         hci_conn_put(conn);
1091                 }
1092         }
1093
1094         hci_dev_unlock(hdev);
1095 }
1096
1097 static int hci_outgoing_auth_needed(struct hci_dev *hdev,
1098                                                         struct hci_conn *conn)
1099 {
1100         if (conn->state != BT_CONFIG || !conn->out)
1101                 return 0;
1102
1103         if (conn->pending_sec_level == BT_SECURITY_SDP)
1104                 return 0;
1105
1106         /* Only request authentication for SSP connections or non-SSP
1107          * devices with sec_level HIGH */
1108         if (!(hdev->ssp_mode > 0 && conn->ssp_mode > 0) &&
1109                                 conn->pending_sec_level != BT_SECURITY_HIGH)
1110                 return 0;
1111
1112         return 1;
1113 }
1114
1115 static void hci_cs_remote_name_req(struct hci_dev *hdev, __u8 status)
1116 {
1117         struct hci_cp_remote_name_req *cp;
1118         struct hci_conn *conn;
1119
1120         BT_DBG("%s status 0x%x", hdev->name, status);
1121
1122         /* If successful wait for the name req complete event before
1123          * checking for the need to do authentication */
1124         if (!status)
1125                 return;
1126
1127         cp = hci_sent_cmd_data(hdev, HCI_OP_REMOTE_NAME_REQ);
1128         if (!cp)
1129                 return;
1130
1131         hci_dev_lock(hdev);
1132
1133         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
1134         if (!conn)
1135                 goto unlock;
1136
1137         if (!hci_outgoing_auth_needed(hdev, conn))
1138                 goto unlock;
1139
1140         if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->pend)) {
1141                 struct hci_cp_auth_requested cp;
1142                 cp.handle = __cpu_to_le16(conn->handle);
1143                 hci_send_cmd(hdev, HCI_OP_AUTH_REQUESTED, sizeof(cp), &cp);
1144         }
1145
1146 unlock:
1147         hci_dev_unlock(hdev);
1148 }
1149
1150 static void hci_cs_read_remote_features(struct hci_dev *hdev, __u8 status)
1151 {
1152         struct hci_cp_read_remote_features *cp;
1153         struct hci_conn *conn;
1154
1155         BT_DBG("%s status 0x%x", hdev->name, status);
1156
1157         if (!status)
1158                 return;
1159
1160         cp = hci_sent_cmd_data(hdev, HCI_OP_READ_REMOTE_FEATURES);
1161         if (!cp)
1162                 return;
1163
1164         hci_dev_lock(hdev);
1165
1166         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1167         if (conn) {
1168                 if (conn->state == BT_CONFIG) {
1169                         hci_proto_connect_cfm(conn, status);
1170                         hci_conn_put(conn);
1171                 }
1172         }
1173
1174         hci_dev_unlock(hdev);
1175 }
1176
1177 static void hci_cs_read_remote_ext_features(struct hci_dev *hdev, __u8 status)
1178 {
1179         struct hci_cp_read_remote_ext_features *cp;
1180         struct hci_conn *conn;
1181
1182         BT_DBG("%s status 0x%x", hdev->name, status);
1183
1184         if (!status)
1185                 return;
1186
1187         cp = hci_sent_cmd_data(hdev, HCI_OP_READ_REMOTE_EXT_FEATURES);
1188         if (!cp)
1189                 return;
1190
1191         hci_dev_lock(hdev);
1192
1193         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1194         if (conn) {
1195                 if (conn->state == BT_CONFIG) {
1196                         hci_proto_connect_cfm(conn, status);
1197                         hci_conn_put(conn);
1198                 }
1199         }
1200
1201         hci_dev_unlock(hdev);
1202 }
1203
1204 static void hci_cs_setup_sync_conn(struct hci_dev *hdev, __u8 status)
1205 {
1206         struct hci_cp_setup_sync_conn *cp;
1207         struct hci_conn *acl, *sco;
1208         __u16 handle;
1209
1210         BT_DBG("%s status 0x%x", hdev->name, status);
1211
1212         if (!status)
1213                 return;
1214
1215         cp = hci_sent_cmd_data(hdev, HCI_OP_SETUP_SYNC_CONN);
1216         if (!cp)
1217                 return;
1218
1219         handle = __le16_to_cpu(cp->handle);
1220
1221         BT_DBG("%s handle %d", hdev->name, handle);
1222
1223         hci_dev_lock(hdev);
1224
1225         acl = hci_conn_hash_lookup_handle(hdev, handle);
1226         if (acl) {
1227                 sco = acl->link;
1228                 if (sco) {
1229                         sco->state = BT_CLOSED;
1230
1231                         hci_proto_connect_cfm(sco, status);
1232                         hci_conn_del(sco);
1233                 }
1234         }
1235
1236         hci_dev_unlock(hdev);
1237 }
1238
1239 static void hci_cs_sniff_mode(struct hci_dev *hdev, __u8 status)
1240 {
1241         struct hci_cp_sniff_mode *cp;
1242         struct hci_conn *conn;
1243
1244         BT_DBG("%s status 0x%x", hdev->name, status);
1245
1246         if (!status)
1247                 return;
1248
1249         cp = hci_sent_cmd_data(hdev, HCI_OP_SNIFF_MODE);
1250         if (!cp)
1251                 return;
1252
1253         hci_dev_lock(hdev);
1254
1255         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1256         if (conn) {
1257                 clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend);
1258
1259                 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->pend))
1260                         hci_sco_setup(conn, status);
1261         }
1262
1263         hci_dev_unlock(hdev);
1264 }
1265
1266 static void hci_cs_exit_sniff_mode(struct hci_dev *hdev, __u8 status)
1267 {
1268         struct hci_cp_exit_sniff_mode *cp;
1269         struct hci_conn *conn;
1270
1271         BT_DBG("%s status 0x%x", hdev->name, status);
1272
1273         if (!status)
1274                 return;
1275
1276         cp = hci_sent_cmd_data(hdev, HCI_OP_EXIT_SNIFF_MODE);
1277         if (!cp)
1278                 return;
1279
1280         hci_dev_lock(hdev);
1281
1282         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1283         if (conn) {
1284                 clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend);
1285
1286                 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->pend))
1287                         hci_sco_setup(conn, status);
1288         }
1289
1290         hci_dev_unlock(hdev);
1291 }
1292
1293 static void hci_cs_le_create_conn(struct hci_dev *hdev, __u8 status)
1294 {
1295         struct hci_cp_le_create_conn *cp;
1296         struct hci_conn *conn;
1297
1298         BT_DBG("%s status 0x%x", hdev->name, status);
1299
1300         cp = hci_sent_cmd_data(hdev, HCI_OP_LE_CREATE_CONN);
1301         if (!cp)
1302                 return;
1303
1304         hci_dev_lock(hdev);
1305
1306         conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, &cp->peer_addr);
1307
1308         BT_DBG("%s bdaddr %s conn %p", hdev->name, batostr(&cp->peer_addr),
1309                 conn);
1310
1311         if (status) {
1312                 if (conn && conn->state == BT_CONNECT) {
1313                         conn->state = BT_CLOSED;
1314                         hci_proto_connect_cfm(conn, status);
1315                         hci_conn_del(conn);
1316                 }
1317         } else {
1318                 if (!conn) {
1319                         conn = hci_conn_add(hdev, LE_LINK, &cp->peer_addr);
1320                         if (conn) {
1321                                 conn->dst_type = cp->peer_addr_type;
1322                                 conn->out = 1;
1323                         } else {
1324                                 BT_ERR("No memory for new connection");
1325                         }
1326                 }
1327         }
1328
1329         hci_dev_unlock(hdev);
1330 }
1331
1332 static void hci_cs_le_start_enc(struct hci_dev *hdev, u8 status)
1333 {
1334         BT_DBG("%s status 0x%x", hdev->name, status);
1335 }
1336
1337 static inline void hci_inquiry_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1338 {
1339         __u8 status = *((__u8 *) skb->data);
1340
1341         BT_DBG("%s status %d", hdev->name, status);
1342
1343         if (test_bit(HCI_MGMT, &hdev->flags) &&
1344                                 test_and_clear_bit(HCI_INQUIRY, &hdev->flags))
1345                 mgmt_discovering(hdev->id, 0);
1346
1347         hci_req_complete(hdev, HCI_OP_INQUIRY, status);
1348
1349         hci_conn_check_pending(hdev);
1350 }
1351
1352 static inline void hci_inquiry_result_evt(struct hci_dev *hdev, struct sk_buff *skb)
1353 {
1354         struct inquiry_data data;
1355         struct inquiry_info *info = (void *) (skb->data + 1);
1356         int num_rsp = *((__u8 *) skb->data);
1357
1358         BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
1359
1360         if (!num_rsp)
1361                 return;
1362
1363         hci_dev_lock(hdev);
1364
1365         if (!test_and_set_bit(HCI_INQUIRY, &hdev->flags)) {
1366
1367                 if (test_bit(HCI_MGMT, &hdev->flags))
1368                         mgmt_discovering(hdev->id, 1);
1369         }
1370
1371         for (; num_rsp; num_rsp--, info++) {
1372                 bacpy(&data.bdaddr, &info->bdaddr);
1373                 data.pscan_rep_mode     = info->pscan_rep_mode;
1374                 data.pscan_period_mode  = info->pscan_period_mode;
1375                 data.pscan_mode         = info->pscan_mode;
1376                 memcpy(data.dev_class, info->dev_class, 3);
1377                 data.clock_offset       = info->clock_offset;
1378                 data.rssi               = 0x00;
1379                 data.ssp_mode           = 0x00;
1380                 hci_inquiry_cache_update(hdev, &data);
1381                 mgmt_device_found(hdev->id, &info->bdaddr, info->dev_class, 0,
1382                                                                         NULL);
1383         }
1384
1385         hci_dev_unlock(hdev);
1386 }
1387
1388 static inline void hci_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1389 {
1390         struct hci_ev_conn_complete *ev = (void *) skb->data;
1391         struct hci_conn *conn;
1392
1393         BT_DBG("%s", hdev->name);
1394
1395         hci_dev_lock(hdev);
1396
1397         conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
1398         if (!conn) {
1399                 if (ev->link_type != SCO_LINK)
1400                         goto unlock;
1401
1402                 conn = hci_conn_hash_lookup_ba(hdev, ESCO_LINK, &ev->bdaddr);
1403                 if (!conn)
1404                         goto unlock;
1405
1406                 conn->type = SCO_LINK;
1407         }
1408
1409         if (!ev->status) {
1410                 conn->handle = __le16_to_cpu(ev->handle);
1411
1412                 if (conn->type == ACL_LINK) {
1413                         conn->state = BT_CONFIG;
1414                         hci_conn_hold(conn);
1415                         conn->disc_timeout = HCI_DISCONN_TIMEOUT;
1416                         mgmt_connected(hdev->id, &ev->bdaddr);
1417                 } else
1418                         conn->state = BT_CONNECTED;
1419
1420                 hci_conn_hold_device(conn);
1421                 hci_conn_add_sysfs(conn);
1422
1423                 if (test_bit(HCI_AUTH, &hdev->flags))
1424                         conn->link_mode |= HCI_LM_AUTH;
1425
1426                 if (test_bit(HCI_ENCRYPT, &hdev->flags))
1427                         conn->link_mode |= HCI_LM_ENCRYPT;
1428
1429                 /* Get remote features */
1430                 if (conn->type == ACL_LINK) {
1431                         struct hci_cp_read_remote_features cp;
1432                         cp.handle = ev->handle;
1433                         hci_send_cmd(hdev, HCI_OP_READ_REMOTE_FEATURES,
1434                                                         sizeof(cp), &cp);
1435                 }
1436
1437                 /* Set packet type for incoming connection */
1438                 if (!conn->out && hdev->hci_ver < 3) {
1439                         struct hci_cp_change_conn_ptype cp;
1440                         cp.handle = ev->handle;
1441                         cp.pkt_type = cpu_to_le16(conn->pkt_type);
1442                         hci_send_cmd(hdev, HCI_OP_CHANGE_CONN_PTYPE,
1443                                                         sizeof(cp), &cp);
1444                 }
1445         } else {
1446                 conn->state = BT_CLOSED;
1447                 if (conn->type == ACL_LINK)
1448                         mgmt_connect_failed(hdev->id, &ev->bdaddr, ev->status);
1449         }
1450
1451         if (conn->type == ACL_LINK)
1452                 hci_sco_setup(conn, ev->status);
1453
1454         if (ev->status) {
1455                 hci_proto_connect_cfm(conn, ev->status);
1456                 hci_conn_del(conn);
1457         } else if (ev->link_type != ACL_LINK)
1458                 hci_proto_connect_cfm(conn, ev->status);
1459
1460 unlock:
1461         hci_dev_unlock(hdev);
1462
1463         hci_conn_check_pending(hdev);
1464 }
1465
1466 static inline void hci_conn_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
1467 {
1468         struct hci_ev_conn_request *ev = (void *) skb->data;
1469         int mask = hdev->link_mode;
1470
1471         BT_DBG("%s bdaddr %s type 0x%x", hdev->name,
1472                                         batostr(&ev->bdaddr), ev->link_type);
1473
1474         mask |= hci_proto_connect_ind(hdev, &ev->bdaddr, ev->link_type);
1475
1476         if ((mask & HCI_LM_ACCEPT) &&
1477                         !hci_blacklist_lookup(hdev, &ev->bdaddr)) {
1478                 /* Connection accepted */
1479                 struct inquiry_entry *ie;
1480                 struct hci_conn *conn;
1481
1482                 hci_dev_lock(hdev);
1483
1484                 ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr);
1485                 if (ie)
1486                         memcpy(ie->data.dev_class, ev->dev_class, 3);
1487
1488                 conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
1489                 if (!conn) {
1490                         conn = hci_conn_add(hdev, ev->link_type, &ev->bdaddr);
1491                         if (!conn) {
1492                                 BT_ERR("No memory for new connection");
1493                                 hci_dev_unlock(hdev);
1494                                 return;
1495                         }
1496                 }
1497
1498                 memcpy(conn->dev_class, ev->dev_class, 3);
1499                 conn->state = BT_CONNECT;
1500
1501                 hci_dev_unlock(hdev);
1502
1503                 if (ev->link_type == ACL_LINK || !lmp_esco_capable(hdev)) {
1504                         struct hci_cp_accept_conn_req cp;
1505
1506                         bacpy(&cp.bdaddr, &ev->bdaddr);
1507
1508                         if (lmp_rswitch_capable(hdev) && (mask & HCI_LM_MASTER))
1509                                 cp.role = 0x00; /* Become master */
1510                         else
1511                                 cp.role = 0x01; /* Remain slave */
1512
1513                         hci_send_cmd(hdev, HCI_OP_ACCEPT_CONN_REQ,
1514                                                         sizeof(cp), &cp);
1515                 } else {
1516                         struct hci_cp_accept_sync_conn_req cp;
1517
1518                         bacpy(&cp.bdaddr, &ev->bdaddr);
1519                         cp.pkt_type = cpu_to_le16(conn->pkt_type);
1520
1521                         cp.tx_bandwidth   = cpu_to_le32(0x00001f40);
1522                         cp.rx_bandwidth   = cpu_to_le32(0x00001f40);
1523                         cp.max_latency    = cpu_to_le16(0xffff);
1524                         cp.content_format = cpu_to_le16(hdev->voice_setting);
1525                         cp.retrans_effort = 0xff;
1526
1527                         hci_send_cmd(hdev, HCI_OP_ACCEPT_SYNC_CONN_REQ,
1528                                                         sizeof(cp), &cp);
1529                 }
1530         } else {
1531                 /* Connection rejected */
1532                 struct hci_cp_reject_conn_req cp;
1533
1534                 bacpy(&cp.bdaddr, &ev->bdaddr);
1535                 cp.reason = 0x0f;
1536                 hci_send_cmd(hdev, HCI_OP_REJECT_CONN_REQ, sizeof(cp), &cp);
1537         }
1538 }
1539
1540 static inline void hci_disconn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1541 {
1542         struct hci_ev_disconn_complete *ev = (void *) skb->data;
1543         struct hci_conn *conn;
1544
1545         BT_DBG("%s status %d", hdev->name, ev->status);
1546
1547         if (ev->status) {
1548                 mgmt_disconnect_failed(hdev->id);
1549                 return;
1550         }
1551
1552         hci_dev_lock(hdev);
1553
1554         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1555         if (!conn)
1556                 goto unlock;
1557
1558         conn->state = BT_CLOSED;
1559
1560         if (conn->type == ACL_LINK || conn->type == LE_LINK)
1561                 mgmt_disconnected(hdev->id, &conn->dst);
1562
1563         hci_proto_disconn_cfm(conn, ev->reason);
1564         hci_conn_del(conn);
1565
1566 unlock:
1567         hci_dev_unlock(hdev);
1568 }
1569
1570 static inline void hci_auth_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1571 {
1572         struct hci_ev_auth_complete *ev = (void *) skb->data;
1573         struct hci_conn *conn;
1574
1575         BT_DBG("%s status %d", hdev->name, ev->status);
1576
1577         hci_dev_lock(hdev);
1578
1579         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1580         if (!conn)
1581                 goto unlock;
1582
1583         if (!ev->status) {
1584                 if (!(conn->ssp_mode > 0 && hdev->ssp_mode > 0) &&
1585                                 test_bit(HCI_CONN_REAUTH_PEND,  &conn->pend)) {
1586                         BT_INFO("re-auth of legacy device is not possible.");
1587                 } else {
1588                         conn->link_mode |= HCI_LM_AUTH;
1589                         conn->sec_level = conn->pending_sec_level;
1590                 }
1591         } else {
1592                 mgmt_auth_failed(hdev->id, &conn->dst, ev->status);
1593         }
1594
1595         clear_bit(HCI_CONN_AUTH_PEND, &conn->pend);
1596         clear_bit(HCI_CONN_REAUTH_PEND, &conn->pend);
1597
1598         if (conn->state == BT_CONFIG) {
1599                 if (!ev->status && hdev->ssp_mode > 0 && conn->ssp_mode > 0) {
1600                         struct hci_cp_set_conn_encrypt cp;
1601                         cp.handle  = ev->handle;
1602                         cp.encrypt = 0x01;
1603                         hci_send_cmd(hdev, HCI_OP_SET_CONN_ENCRYPT, sizeof(cp),
1604                                                                         &cp);
1605                 } else {
1606                         conn->state = BT_CONNECTED;
1607                         hci_proto_connect_cfm(conn, ev->status);
1608                         hci_conn_put(conn);
1609                 }
1610         } else {
1611                 hci_auth_cfm(conn, ev->status);
1612
1613                 hci_conn_hold(conn);
1614                 conn->disc_timeout = HCI_DISCONN_TIMEOUT;
1615                 hci_conn_put(conn);
1616         }
1617
1618         if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend)) {
1619                 if (!ev->status) {
1620                         struct hci_cp_set_conn_encrypt cp;
1621                         cp.handle  = ev->handle;
1622                         cp.encrypt = 0x01;
1623                         hci_send_cmd(hdev, HCI_OP_SET_CONN_ENCRYPT, sizeof(cp),
1624                                                                         &cp);
1625                 } else {
1626                         clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend);
1627                         hci_encrypt_cfm(conn, ev->status, 0x00);
1628                 }
1629         }
1630
1631 unlock:
1632         hci_dev_unlock(hdev);
1633 }
1634
1635 static inline void hci_remote_name_evt(struct hci_dev *hdev, struct sk_buff *skb)
1636 {
1637         struct hci_ev_remote_name *ev = (void *) skb->data;
1638         struct hci_conn *conn;
1639
1640         BT_DBG("%s", hdev->name);
1641
1642         hci_conn_check_pending(hdev);
1643
1644         hci_dev_lock(hdev);
1645
1646         if (ev->status == 0 && test_bit(HCI_MGMT, &hdev->flags))
1647                 mgmt_remote_name(hdev->id, &ev->bdaddr, ev->name);
1648
1649         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
1650         if (!conn)
1651                 goto unlock;
1652
1653         if (!hci_outgoing_auth_needed(hdev, conn))
1654                 goto unlock;
1655
1656         if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->pend)) {
1657                 struct hci_cp_auth_requested cp;
1658                 cp.handle = __cpu_to_le16(conn->handle);
1659                 hci_send_cmd(hdev, HCI_OP_AUTH_REQUESTED, sizeof(cp), &cp);
1660         }
1661
1662 unlock:
1663         hci_dev_unlock(hdev);
1664 }
1665
1666 static inline void hci_encrypt_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
1667 {
1668         struct hci_ev_encrypt_change *ev = (void *) skb->data;
1669         struct hci_conn *conn;
1670
1671         BT_DBG("%s status %d", hdev->name, ev->status);
1672
1673         hci_dev_lock(hdev);
1674
1675         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1676         if (conn) {
1677                 if (!ev->status) {
1678                         if (ev->encrypt) {
1679                                 /* Encryption implies authentication */
1680                                 conn->link_mode |= HCI_LM_AUTH;
1681                                 conn->link_mode |= HCI_LM_ENCRYPT;
1682                                 conn->sec_level = conn->pending_sec_level;
1683                         } else
1684                                 conn->link_mode &= ~HCI_LM_ENCRYPT;
1685                 }
1686
1687                 clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend);
1688
1689                 if (conn->state == BT_CONFIG) {
1690                         if (!ev->status)
1691                                 conn->state = BT_CONNECTED;
1692
1693                         hci_proto_connect_cfm(conn, ev->status);
1694                         hci_conn_put(conn);
1695                 } else
1696                         hci_encrypt_cfm(conn, ev->status, ev->encrypt);
1697         }
1698
1699         hci_dev_unlock(hdev);
1700 }
1701
1702 static inline void hci_change_link_key_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1703 {
1704         struct hci_ev_change_link_key_complete *ev = (void *) skb->data;
1705         struct hci_conn *conn;
1706
1707         BT_DBG("%s status %d", hdev->name, ev->status);
1708
1709         hci_dev_lock(hdev);
1710
1711         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1712         if (conn) {
1713                 if (!ev->status)
1714                         conn->link_mode |= HCI_LM_SECURE;
1715
1716                 clear_bit(HCI_CONN_AUTH_PEND, &conn->pend);
1717
1718                 hci_key_change_cfm(conn, ev->status);
1719         }
1720
1721         hci_dev_unlock(hdev);
1722 }
1723
1724 static inline void hci_remote_features_evt(struct hci_dev *hdev, struct sk_buff *skb)
1725 {
1726         struct hci_ev_remote_features *ev = (void *) skb->data;
1727         struct hci_conn *conn;
1728
1729         BT_DBG("%s status %d", hdev->name, ev->status);
1730
1731         hci_dev_lock(hdev);
1732
1733         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1734         if (!conn)
1735                 goto unlock;
1736
1737         if (!ev->status)
1738                 memcpy(conn->features, ev->features, 8);
1739
1740         if (conn->state != BT_CONFIG)
1741                 goto unlock;
1742
1743         if (!ev->status && lmp_ssp_capable(hdev) && lmp_ssp_capable(conn)) {
1744                 struct hci_cp_read_remote_ext_features cp;
1745                 cp.handle = ev->handle;
1746                 cp.page = 0x01;
1747                 hci_send_cmd(hdev, HCI_OP_READ_REMOTE_EXT_FEATURES,
1748                                                         sizeof(cp), &cp);
1749                 goto unlock;
1750         }
1751
1752         if (!ev->status) {
1753                 struct hci_cp_remote_name_req cp;
1754                 memset(&cp, 0, sizeof(cp));
1755                 bacpy(&cp.bdaddr, &conn->dst);
1756                 cp.pscan_rep_mode = 0x02;
1757                 hci_send_cmd(hdev, HCI_OP_REMOTE_NAME_REQ, sizeof(cp), &cp);
1758         }
1759
1760         if (!hci_outgoing_auth_needed(hdev, conn)) {
1761                 conn->state = BT_CONNECTED;
1762                 hci_proto_connect_cfm(conn, ev->status);
1763                 hci_conn_put(conn);
1764         }
1765
1766 unlock:
1767         hci_dev_unlock(hdev);
1768 }
1769
1770 static inline void hci_remote_version_evt(struct hci_dev *hdev, struct sk_buff *skb)
1771 {
1772         BT_DBG("%s", hdev->name);
1773 }
1774
1775 static inline void hci_qos_setup_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1776 {
1777         BT_DBG("%s", hdev->name);
1778 }
1779
1780 static inline void hci_cmd_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1781 {
1782         struct hci_ev_cmd_complete *ev = (void *) skb->data;
1783         __u16 opcode;
1784
1785         skb_pull(skb, sizeof(*ev));
1786
1787         opcode = __le16_to_cpu(ev->opcode);
1788
1789         switch (opcode) {
1790         case HCI_OP_INQUIRY_CANCEL:
1791                 hci_cc_inquiry_cancel(hdev, skb);
1792                 break;
1793
1794         case HCI_OP_EXIT_PERIODIC_INQ:
1795                 hci_cc_exit_periodic_inq(hdev, skb);
1796                 break;
1797
1798         case HCI_OP_REMOTE_NAME_REQ_CANCEL:
1799                 hci_cc_remote_name_req_cancel(hdev, skb);
1800                 break;
1801
1802         case HCI_OP_ROLE_DISCOVERY:
1803                 hci_cc_role_discovery(hdev, skb);
1804                 break;
1805
1806         case HCI_OP_READ_LINK_POLICY:
1807                 hci_cc_read_link_policy(hdev, skb);
1808                 break;
1809
1810         case HCI_OP_WRITE_LINK_POLICY:
1811                 hci_cc_write_link_policy(hdev, skb);
1812                 break;
1813
1814         case HCI_OP_READ_DEF_LINK_POLICY:
1815                 hci_cc_read_def_link_policy(hdev, skb);
1816                 break;
1817
1818         case HCI_OP_WRITE_DEF_LINK_POLICY:
1819                 hci_cc_write_def_link_policy(hdev, skb);
1820                 break;
1821
1822         case HCI_OP_RESET:
1823                 hci_cc_reset(hdev, skb);
1824                 break;
1825
1826         case HCI_OP_WRITE_LOCAL_NAME:
1827                 hci_cc_write_local_name(hdev, skb);
1828                 break;
1829
1830         case HCI_OP_READ_LOCAL_NAME:
1831                 hci_cc_read_local_name(hdev, skb);
1832                 break;
1833
1834         case HCI_OP_WRITE_AUTH_ENABLE:
1835                 hci_cc_write_auth_enable(hdev, skb);
1836                 break;
1837
1838         case HCI_OP_WRITE_ENCRYPT_MODE:
1839                 hci_cc_write_encrypt_mode(hdev, skb);
1840                 break;
1841
1842         case HCI_OP_WRITE_SCAN_ENABLE:
1843                 hci_cc_write_scan_enable(hdev, skb);
1844                 break;
1845
1846         case HCI_OP_READ_CLASS_OF_DEV:
1847                 hci_cc_read_class_of_dev(hdev, skb);
1848                 break;
1849
1850         case HCI_OP_WRITE_CLASS_OF_DEV:
1851                 hci_cc_write_class_of_dev(hdev, skb);
1852                 break;
1853
1854         case HCI_OP_READ_VOICE_SETTING:
1855                 hci_cc_read_voice_setting(hdev, skb);
1856                 break;
1857
1858         case HCI_OP_WRITE_VOICE_SETTING:
1859                 hci_cc_write_voice_setting(hdev, skb);
1860                 break;
1861
1862         case HCI_OP_HOST_BUFFER_SIZE:
1863                 hci_cc_host_buffer_size(hdev, skb);
1864                 break;
1865
1866         case HCI_OP_READ_SSP_MODE:
1867                 hci_cc_read_ssp_mode(hdev, skb);
1868                 break;
1869
1870         case HCI_OP_WRITE_SSP_MODE:
1871                 hci_cc_write_ssp_mode(hdev, skb);
1872                 break;
1873
1874         case HCI_OP_READ_LOCAL_VERSION:
1875                 hci_cc_read_local_version(hdev, skb);
1876                 break;
1877
1878         case HCI_OP_READ_LOCAL_COMMANDS:
1879                 hci_cc_read_local_commands(hdev, skb);
1880                 break;
1881
1882         case HCI_OP_READ_LOCAL_FEATURES:
1883                 hci_cc_read_local_features(hdev, skb);
1884                 break;
1885
1886         case HCI_OP_READ_LOCAL_EXT_FEATURES:
1887                 hci_cc_read_local_ext_features(hdev, skb);
1888                 break;
1889
1890         case HCI_OP_READ_BUFFER_SIZE:
1891                 hci_cc_read_buffer_size(hdev, skb);
1892                 break;
1893
1894         case HCI_OP_READ_BD_ADDR:
1895                 hci_cc_read_bd_addr(hdev, skb);
1896                 break;
1897
1898         case HCI_OP_WRITE_CA_TIMEOUT:
1899                 hci_cc_write_ca_timeout(hdev, skb);
1900                 break;
1901
1902         case HCI_OP_DELETE_STORED_LINK_KEY:
1903                 hci_cc_delete_stored_link_key(hdev, skb);
1904                 break;
1905
1906         case HCI_OP_SET_EVENT_MASK:
1907                 hci_cc_set_event_mask(hdev, skb);
1908                 break;
1909
1910         case HCI_OP_WRITE_INQUIRY_MODE:
1911                 hci_cc_write_inquiry_mode(hdev, skb);
1912                 break;
1913
1914         case HCI_OP_READ_INQ_RSP_TX_POWER:
1915                 hci_cc_read_inq_rsp_tx_power(hdev, skb);
1916                 break;
1917
1918         case HCI_OP_SET_EVENT_FLT:
1919                 hci_cc_set_event_flt(hdev, skb);
1920                 break;
1921
1922         case HCI_OP_PIN_CODE_REPLY:
1923                 hci_cc_pin_code_reply(hdev, skb);
1924                 break;
1925
1926         case HCI_OP_PIN_CODE_NEG_REPLY:
1927                 hci_cc_pin_code_neg_reply(hdev, skb);
1928                 break;
1929
1930         case HCI_OP_READ_LOCAL_OOB_DATA:
1931                 hci_cc_read_local_oob_data_reply(hdev, skb);
1932                 break;
1933
1934         case HCI_OP_LE_READ_BUFFER_SIZE:
1935                 hci_cc_le_read_buffer_size(hdev, skb);
1936                 break;
1937
1938         case HCI_OP_USER_CONFIRM_REPLY:
1939                 hci_cc_user_confirm_reply(hdev, skb);
1940                 break;
1941
1942         case HCI_OP_USER_CONFIRM_NEG_REPLY:
1943                 hci_cc_user_confirm_neg_reply(hdev, skb);
1944                 break;
1945
1946         case HCI_OP_LE_SET_SCAN_ENABLE:
1947                 hci_cc_le_set_scan_enable(hdev, skb);
1948                 break;
1949
1950         case HCI_OP_LE_LTK_REPLY:
1951                 hci_cc_le_ltk_reply(hdev, skb);
1952                 break;
1953
1954         case HCI_OP_LE_LTK_NEG_REPLY:
1955                 hci_cc_le_ltk_neg_reply(hdev, skb);
1956                 break;
1957
1958         case HCI_OP_WRITE_LE_HOST_SUPPORTED:
1959                 hci_cc_write_le_host_supported(hdev, skb);
1960                 break;
1961
1962         default:
1963                 BT_DBG("%s opcode 0x%x", hdev->name, opcode);
1964                 break;
1965         }
1966
1967         if (ev->opcode != HCI_OP_NOP)
1968                 del_timer(&hdev->cmd_timer);
1969
1970         if (ev->ncmd) {
1971                 atomic_set(&hdev->cmd_cnt, 1);
1972                 if (!skb_queue_empty(&hdev->cmd_q))
1973                         tasklet_schedule(&hdev->cmd_task);
1974         }
1975 }
1976
1977 static inline void hci_cmd_status_evt(struct hci_dev *hdev, struct sk_buff *skb)
1978 {
1979         struct hci_ev_cmd_status *ev = (void *) skb->data;
1980         __u16 opcode;
1981
1982         skb_pull(skb, sizeof(*ev));
1983
1984         opcode = __le16_to_cpu(ev->opcode);
1985
1986         switch (opcode) {
1987         case HCI_OP_INQUIRY:
1988                 hci_cs_inquiry(hdev, ev->status);
1989                 break;
1990
1991         case HCI_OP_CREATE_CONN:
1992                 hci_cs_create_conn(hdev, ev->status);
1993                 break;
1994
1995         case HCI_OP_ADD_SCO:
1996                 hci_cs_add_sco(hdev, ev->status);
1997                 break;
1998
1999         case HCI_OP_AUTH_REQUESTED:
2000                 hci_cs_auth_requested(hdev, ev->status);
2001                 break;
2002
2003         case HCI_OP_SET_CONN_ENCRYPT:
2004                 hci_cs_set_conn_encrypt(hdev, ev->status);
2005                 break;
2006
2007         case HCI_OP_REMOTE_NAME_REQ:
2008                 hci_cs_remote_name_req(hdev, ev->status);
2009                 break;
2010
2011         case HCI_OP_READ_REMOTE_FEATURES:
2012                 hci_cs_read_remote_features(hdev, ev->status);
2013                 break;
2014
2015         case HCI_OP_READ_REMOTE_EXT_FEATURES:
2016                 hci_cs_read_remote_ext_features(hdev, ev->status);
2017                 break;
2018
2019         case HCI_OP_SETUP_SYNC_CONN:
2020                 hci_cs_setup_sync_conn(hdev, ev->status);
2021                 break;
2022
2023         case HCI_OP_SNIFF_MODE:
2024                 hci_cs_sniff_mode(hdev, ev->status);
2025                 break;
2026
2027         case HCI_OP_EXIT_SNIFF_MODE:
2028                 hci_cs_exit_sniff_mode(hdev, ev->status);
2029                 break;
2030
2031         case HCI_OP_DISCONNECT:
2032                 if (ev->status != 0)
2033                         mgmt_disconnect_failed(hdev->id);
2034                 break;
2035
2036         case HCI_OP_LE_CREATE_CONN:
2037                 hci_cs_le_create_conn(hdev, ev->status);
2038                 break;
2039
2040         case HCI_OP_LE_START_ENC:
2041                 hci_cs_le_start_enc(hdev, ev->status);
2042                 break;
2043
2044         default:
2045                 BT_DBG("%s opcode 0x%x", hdev->name, opcode);
2046                 break;
2047         }
2048
2049         if (ev->opcode != HCI_OP_NOP)
2050                 del_timer(&hdev->cmd_timer);
2051
2052         if (ev->ncmd && !test_bit(HCI_RESET, &hdev->flags)) {
2053                 atomic_set(&hdev->cmd_cnt, 1);
2054                 if (!skb_queue_empty(&hdev->cmd_q))
2055                         tasklet_schedule(&hdev->cmd_task);
2056         }
2057 }
2058
2059 static inline void hci_role_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
2060 {
2061         struct hci_ev_role_change *ev = (void *) skb->data;
2062         struct hci_conn *conn;
2063
2064         BT_DBG("%s status %d", hdev->name, ev->status);
2065
2066         hci_dev_lock(hdev);
2067
2068         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
2069         if (conn) {
2070                 if (!ev->status) {
2071                         if (ev->role)
2072                                 conn->link_mode &= ~HCI_LM_MASTER;
2073                         else
2074                                 conn->link_mode |= HCI_LM_MASTER;
2075                 }
2076
2077                 clear_bit(HCI_CONN_RSWITCH_PEND, &conn->pend);
2078
2079                 hci_role_switch_cfm(conn, ev->status, ev->role);
2080         }
2081
2082         hci_dev_unlock(hdev);
2083 }
2084
2085 static inline void hci_num_comp_pkts_evt(struct hci_dev *hdev, struct sk_buff *skb)
2086 {
2087         struct hci_ev_num_comp_pkts *ev = (void *) skb->data;
2088         __le16 *ptr;
2089         int i;
2090
2091         skb_pull(skb, sizeof(*ev));
2092
2093         BT_DBG("%s num_hndl %d", hdev->name, ev->num_hndl);
2094
2095         if (skb->len < ev->num_hndl * 4) {
2096                 BT_DBG("%s bad parameters", hdev->name);
2097                 return;
2098         }
2099
2100         tasklet_disable(&hdev->tx_task);
2101
2102         for (i = 0, ptr = (__le16 *) skb->data; i < ev->num_hndl; i++) {
2103                 struct hci_conn *conn;
2104                 __u16  handle, count;
2105
2106                 handle = get_unaligned_le16(ptr++);
2107                 count  = get_unaligned_le16(ptr++);
2108
2109                 conn = hci_conn_hash_lookup_handle(hdev, handle);
2110                 if (conn) {
2111                         conn->sent -= count;
2112
2113                         if (conn->type == ACL_LINK) {
2114                                 hdev->acl_cnt += count;
2115                                 if (hdev->acl_cnt > hdev->acl_pkts)
2116                                         hdev->acl_cnt = hdev->acl_pkts;
2117                         } else if (conn->type == LE_LINK) {
2118                                 if (hdev->le_pkts) {
2119                                         hdev->le_cnt += count;
2120                                         if (hdev->le_cnt > hdev->le_pkts)
2121                                                 hdev->le_cnt = hdev->le_pkts;
2122                                 } else {
2123                                         hdev->acl_cnt += count;
2124                                         if (hdev->acl_cnt > hdev->acl_pkts)
2125                                                 hdev->acl_cnt = hdev->acl_pkts;
2126                                 }
2127                         } else {
2128                                 hdev->sco_cnt += count;
2129                                 if (hdev->sco_cnt > hdev->sco_pkts)
2130                                         hdev->sco_cnt = hdev->sco_pkts;
2131                         }
2132                 }
2133         }
2134
2135         tasklet_schedule(&hdev->tx_task);
2136
2137         tasklet_enable(&hdev->tx_task);
2138 }
2139
2140 static inline void hci_mode_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
2141 {
2142         struct hci_ev_mode_change *ev = (void *) skb->data;
2143         struct hci_conn *conn;
2144
2145         BT_DBG("%s status %d", hdev->name, ev->status);
2146
2147         hci_dev_lock(hdev);
2148
2149         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2150         if (conn) {
2151                 conn->mode = ev->mode;
2152                 conn->interval = __le16_to_cpu(ev->interval);
2153
2154                 if (!test_and_clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend)) {
2155                         if (conn->mode == HCI_CM_ACTIVE)
2156                                 conn->power_save = 1;
2157                         else
2158                                 conn->power_save = 0;
2159                 }
2160
2161                 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->pend))
2162                         hci_sco_setup(conn, ev->status);
2163         }
2164
2165         hci_dev_unlock(hdev);
2166 }
2167
2168 static inline void hci_pin_code_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
2169 {
2170         struct hci_ev_pin_code_req *ev = (void *) skb->data;
2171         struct hci_conn *conn;
2172
2173         BT_DBG("%s", hdev->name);
2174
2175         hci_dev_lock(hdev);
2176
2177         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
2178         if (conn && conn->state == BT_CONNECTED) {
2179                 hci_conn_hold(conn);
2180                 conn->disc_timeout = HCI_PAIRING_TIMEOUT;
2181                 hci_conn_put(conn);
2182         }
2183
2184         if (!test_bit(HCI_PAIRABLE, &hdev->flags))
2185                 hci_send_cmd(hdev, HCI_OP_PIN_CODE_NEG_REPLY,
2186                                         sizeof(ev->bdaddr), &ev->bdaddr);
2187         else if (test_bit(HCI_MGMT, &hdev->flags)) {
2188                 u8 secure;
2189
2190                 if (conn->pending_sec_level == BT_SECURITY_HIGH)
2191                         secure = 1;
2192                 else
2193                         secure = 0;
2194
2195                 mgmt_pin_code_request(hdev->id, &ev->bdaddr, secure);
2196         }
2197
2198         hci_dev_unlock(hdev);
2199 }
2200
2201 static inline void hci_link_key_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
2202 {
2203         struct hci_ev_link_key_req *ev = (void *) skb->data;
2204         struct hci_cp_link_key_reply cp;
2205         struct hci_conn *conn;
2206         struct link_key *key;
2207
2208         BT_DBG("%s", hdev->name);
2209
2210         if (!test_bit(HCI_LINK_KEYS, &hdev->flags))
2211                 return;
2212
2213         hci_dev_lock(hdev);
2214
2215         key = hci_find_link_key(hdev, &ev->bdaddr);
2216         if (!key) {
2217                 BT_DBG("%s link key not found for %s", hdev->name,
2218                                                         batostr(&ev->bdaddr));
2219                 goto not_found;
2220         }
2221
2222         BT_DBG("%s found key type %u for %s", hdev->name, key->type,
2223                                                         batostr(&ev->bdaddr));
2224
2225         if (!test_bit(HCI_DEBUG_KEYS, &hdev->flags) &&
2226                                 key->type == HCI_LK_DEBUG_COMBINATION) {
2227                 BT_DBG("%s ignoring debug key", hdev->name);
2228                 goto not_found;
2229         }
2230
2231         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
2232         if (conn) {
2233                 if (key->type == HCI_LK_UNAUTH_COMBINATION &&
2234                                 conn->auth_type != 0xff &&
2235                                 (conn->auth_type & 0x01)) {
2236                         BT_DBG("%s ignoring unauthenticated key", hdev->name);
2237                         goto not_found;
2238                 }
2239
2240                 if (key->type == HCI_LK_COMBINATION && key->pin_len < 16 &&
2241                                 conn->pending_sec_level == BT_SECURITY_HIGH) {
2242                         BT_DBG("%s ignoring key unauthenticated for high \
2243                                                         security", hdev->name);
2244                         goto not_found;
2245                 }
2246
2247                 conn->key_type = key->type;
2248                 conn->pin_length = key->pin_len;
2249         }
2250
2251         bacpy(&cp.bdaddr, &ev->bdaddr);
2252         memcpy(cp.link_key, key->val, 16);
2253
2254         hci_send_cmd(hdev, HCI_OP_LINK_KEY_REPLY, sizeof(cp), &cp);
2255
2256         hci_dev_unlock(hdev);
2257
2258         return;
2259
2260 not_found:
2261         hci_send_cmd(hdev, HCI_OP_LINK_KEY_NEG_REPLY, 6, &ev->bdaddr);
2262         hci_dev_unlock(hdev);
2263 }
2264
2265 static inline void hci_link_key_notify_evt(struct hci_dev *hdev, struct sk_buff *skb)
2266 {
2267         struct hci_ev_link_key_notify *ev = (void *) skb->data;
2268         struct hci_conn *conn;
2269         u8 pin_len = 0;
2270
2271         BT_DBG("%s", hdev->name);
2272
2273         hci_dev_lock(hdev);
2274
2275         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
2276         if (conn) {
2277                 hci_conn_hold(conn);
2278                 conn->disc_timeout = HCI_DISCONN_TIMEOUT;
2279                 pin_len = conn->pin_length;
2280
2281                 if (ev->key_type != HCI_LK_CHANGED_COMBINATION)
2282                         conn->key_type = ev->key_type;
2283
2284                 hci_conn_put(conn);
2285         }
2286
2287         if (test_bit(HCI_LINK_KEYS, &hdev->flags))
2288                 hci_add_link_key(hdev, conn, 1, &ev->bdaddr, ev->link_key,
2289                                                         ev->key_type, pin_len);
2290
2291         hci_dev_unlock(hdev);
2292 }
2293
2294 static inline void hci_clock_offset_evt(struct hci_dev *hdev, struct sk_buff *skb)
2295 {
2296         struct hci_ev_clock_offset *ev = (void *) skb->data;
2297         struct hci_conn *conn;
2298
2299         BT_DBG("%s status %d", hdev->name, ev->status);
2300
2301         hci_dev_lock(hdev);
2302
2303         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2304         if (conn && !ev->status) {
2305                 struct inquiry_entry *ie;
2306
2307                 ie = hci_inquiry_cache_lookup(hdev, &conn->dst);
2308                 if (ie) {
2309                         ie->data.clock_offset = ev->clock_offset;
2310                         ie->timestamp = jiffies;
2311                 }
2312         }
2313
2314         hci_dev_unlock(hdev);
2315 }
2316
2317 static inline void hci_pkt_type_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
2318 {
2319         struct hci_ev_pkt_type_change *ev = (void *) skb->data;
2320         struct hci_conn *conn;
2321
2322         BT_DBG("%s status %d", hdev->name, ev->status);
2323
2324         hci_dev_lock(hdev);
2325
2326         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2327         if (conn && !ev->status)
2328                 conn->pkt_type = __le16_to_cpu(ev->pkt_type);
2329
2330         hci_dev_unlock(hdev);
2331 }
2332
2333 static inline void hci_pscan_rep_mode_evt(struct hci_dev *hdev, struct sk_buff *skb)
2334 {
2335         struct hci_ev_pscan_rep_mode *ev = (void *) skb->data;
2336         struct inquiry_entry *ie;
2337
2338         BT_DBG("%s", hdev->name);
2339
2340         hci_dev_lock(hdev);
2341
2342         ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr);
2343         if (ie) {
2344                 ie->data.pscan_rep_mode = ev->pscan_rep_mode;
2345                 ie->timestamp = jiffies;
2346         }
2347
2348         hci_dev_unlock(hdev);
2349 }
2350
2351 static inline void hci_inquiry_result_with_rssi_evt(struct hci_dev *hdev, struct sk_buff *skb)
2352 {
2353         struct inquiry_data data;
2354         int num_rsp = *((__u8 *) skb->data);
2355
2356         BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
2357
2358         if (!num_rsp)
2359                 return;
2360
2361         hci_dev_lock(hdev);
2362
2363         if (!test_and_set_bit(HCI_INQUIRY, &hdev->flags)) {
2364
2365                 if (test_bit(HCI_MGMT, &hdev->flags))
2366                         mgmt_discovering(hdev->id, 1);
2367         }
2368
2369         if ((skb->len - 1) / num_rsp != sizeof(struct inquiry_info_with_rssi)) {
2370                 struct inquiry_info_with_rssi_and_pscan_mode *info;
2371                 info = (void *) (skb->data + 1);
2372
2373                 for (; num_rsp; num_rsp--, info++) {
2374                         bacpy(&data.bdaddr, &info->bdaddr);
2375                         data.pscan_rep_mode     = info->pscan_rep_mode;
2376                         data.pscan_period_mode  = info->pscan_period_mode;
2377                         data.pscan_mode         = info->pscan_mode;
2378                         memcpy(data.dev_class, info->dev_class, 3);
2379                         data.clock_offset       = info->clock_offset;
2380                         data.rssi               = info->rssi;
2381                         data.ssp_mode           = 0x00;
2382                         hci_inquiry_cache_update(hdev, &data);
2383                         mgmt_device_found(hdev->id, &info->bdaddr,
2384                                                 info->dev_class, info->rssi,
2385                                                 NULL);
2386                 }
2387         } else {
2388                 struct inquiry_info_with_rssi *info = (void *) (skb->data + 1);
2389
2390                 for (; num_rsp; num_rsp--, info++) {
2391                         bacpy(&data.bdaddr, &info->bdaddr);
2392                         data.pscan_rep_mode     = info->pscan_rep_mode;
2393                         data.pscan_period_mode  = info->pscan_period_mode;
2394                         data.pscan_mode         = 0x00;
2395                         memcpy(data.dev_class, info->dev_class, 3);
2396                         data.clock_offset       = info->clock_offset;
2397                         data.rssi               = info->rssi;
2398                         data.ssp_mode           = 0x00;
2399                         hci_inquiry_cache_update(hdev, &data);
2400                         mgmt_device_found(hdev->id, &info->bdaddr,
2401                                                 info->dev_class, info->rssi,
2402                                                 NULL);
2403                 }
2404         }
2405
2406         hci_dev_unlock(hdev);
2407 }
2408
2409 static inline void hci_remote_ext_features_evt(struct hci_dev *hdev, struct sk_buff *skb)
2410 {
2411         struct hci_ev_remote_ext_features *ev = (void *) skb->data;
2412         struct hci_conn *conn;
2413
2414         BT_DBG("%s", hdev->name);
2415
2416         hci_dev_lock(hdev);
2417
2418         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2419         if (!conn)
2420                 goto unlock;
2421
2422         if (!ev->status && ev->page == 0x01) {
2423                 struct inquiry_entry *ie;
2424
2425                 ie = hci_inquiry_cache_lookup(hdev, &conn->dst);
2426                 if (ie)
2427                         ie->data.ssp_mode = (ev->features[0] & 0x01);
2428
2429                 conn->ssp_mode = (ev->features[0] & 0x01);
2430         }
2431
2432         if (conn->state != BT_CONFIG)
2433                 goto unlock;
2434
2435         if (!ev->status) {
2436                 struct hci_cp_remote_name_req cp;
2437                 memset(&cp, 0, sizeof(cp));
2438                 bacpy(&cp.bdaddr, &conn->dst);
2439                 cp.pscan_rep_mode = 0x02;
2440                 hci_send_cmd(hdev, HCI_OP_REMOTE_NAME_REQ, sizeof(cp), &cp);
2441         }
2442
2443         if (!hci_outgoing_auth_needed(hdev, conn)) {
2444                 conn->state = BT_CONNECTED;
2445                 hci_proto_connect_cfm(conn, ev->status);
2446                 hci_conn_put(conn);
2447         }
2448
2449 unlock:
2450         hci_dev_unlock(hdev);
2451 }
2452
2453 static inline void hci_sync_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
2454 {
2455         struct hci_ev_sync_conn_complete *ev = (void *) skb->data;
2456         struct hci_conn *conn;
2457
2458         BT_DBG("%s status %d", hdev->name, ev->status);
2459
2460         hci_dev_lock(hdev);
2461
2462         conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
2463         if (!conn) {
2464                 if (ev->link_type == ESCO_LINK)
2465                         goto unlock;
2466
2467                 conn = hci_conn_hash_lookup_ba(hdev, ESCO_LINK, &ev->bdaddr);
2468                 if (!conn)
2469                         goto unlock;
2470
2471                 conn->type = SCO_LINK;
2472         }
2473
2474         switch (ev->status) {
2475         case 0x00:
2476                 conn->handle = __le16_to_cpu(ev->handle);
2477                 conn->state  = BT_CONNECTED;
2478
2479                 hci_conn_hold_device(conn);
2480                 hci_conn_add_sysfs(conn);
2481                 break;
2482
2483         case 0x11:      /* Unsupported Feature or Parameter Value */
2484         case 0x1c:      /* SCO interval rejected */
2485         case 0x1a:      /* Unsupported Remote Feature */
2486         case 0x1f:      /* Unspecified error */
2487                 if (conn->out && conn->attempt < 2) {
2488                         conn->pkt_type = (hdev->esco_type & SCO_ESCO_MASK) |
2489                                         (hdev->esco_type & EDR_ESCO_MASK);
2490                         hci_setup_sync(conn, conn->link->handle);
2491                         goto unlock;
2492                 }
2493                 /* fall through */
2494
2495         default:
2496                 conn->state = BT_CLOSED;
2497                 break;
2498         }
2499
2500         hci_proto_connect_cfm(conn, ev->status);
2501         if (ev->status)
2502                 hci_conn_del(conn);
2503
2504 unlock:
2505         hci_dev_unlock(hdev);
2506 }
2507
2508 static inline void hci_sync_conn_changed_evt(struct hci_dev *hdev, struct sk_buff *skb)
2509 {
2510         BT_DBG("%s", hdev->name);
2511 }
2512
2513 static inline void hci_sniff_subrate_evt(struct hci_dev *hdev, struct sk_buff *skb)
2514 {
2515         struct hci_ev_sniff_subrate *ev = (void *) skb->data;
2516
2517         BT_DBG("%s status %d", hdev->name, ev->status);
2518 }
2519
2520 static inline void hci_extended_inquiry_result_evt(struct hci_dev *hdev, struct sk_buff *skb)
2521 {
2522         struct inquiry_data data;
2523         struct extended_inquiry_info *info = (void *) (skb->data + 1);
2524         int num_rsp = *((__u8 *) skb->data);
2525
2526         BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
2527
2528         if (!num_rsp)
2529                 return;
2530
2531         if (!test_and_set_bit(HCI_INQUIRY, &hdev->flags)) {
2532
2533                 if (test_bit(HCI_MGMT, &hdev->flags))
2534                         mgmt_discovering(hdev->id, 1);
2535         }
2536
2537         hci_dev_lock(hdev);
2538
2539         for (; num_rsp; num_rsp--, info++) {
2540                 bacpy(&data.bdaddr, &info->bdaddr);
2541                 data.pscan_rep_mode     = info->pscan_rep_mode;
2542                 data.pscan_period_mode  = info->pscan_period_mode;
2543                 data.pscan_mode         = 0x00;
2544                 memcpy(data.dev_class, info->dev_class, 3);
2545                 data.clock_offset       = info->clock_offset;
2546                 data.rssi               = info->rssi;
2547                 data.ssp_mode           = 0x01;
2548                 hci_inquiry_cache_update(hdev, &data);
2549                 mgmt_device_found(hdev->id, &info->bdaddr, info->dev_class,
2550                                                 info->rssi, info->data);
2551         }
2552
2553         hci_dev_unlock(hdev);
2554 }
2555
2556 static inline u8 hci_get_auth_req(struct hci_conn *conn)
2557 {
2558         /* If remote requests dedicated bonding follow that lead */
2559         if (conn->remote_auth == 0x02 || conn->remote_auth == 0x03) {
2560                 /* If both remote and local IO capabilities allow MITM
2561                  * protection then require it, otherwise don't */
2562                 if (conn->remote_cap == 0x03 || conn->io_capability == 0x03)
2563                         return 0x02;
2564                 else
2565                         return 0x03;
2566         }
2567
2568         /* If remote requests no-bonding follow that lead */
2569         if (conn->remote_auth == 0x00 || conn->remote_auth == 0x01)
2570                 return conn->remote_auth | (conn->auth_type & 0x01);
2571
2572         return conn->auth_type;
2573 }
2574
2575 static inline void hci_io_capa_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
2576 {
2577         struct hci_ev_io_capa_request *ev = (void *) skb->data;
2578         struct hci_conn *conn;
2579
2580         BT_DBG("%s", hdev->name);
2581
2582         hci_dev_lock(hdev);
2583
2584         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
2585         if (!conn)
2586                 goto unlock;
2587
2588         hci_conn_hold(conn);
2589
2590         if (!test_bit(HCI_MGMT, &hdev->flags))
2591                 goto unlock;
2592
2593         if (test_bit(HCI_PAIRABLE, &hdev->flags) ||
2594                         (conn->remote_auth & ~0x01) == HCI_AT_NO_BONDING) {
2595                 struct hci_cp_io_capability_reply cp;
2596
2597                 bacpy(&cp.bdaddr, &ev->bdaddr);
2598                 cp.capability = conn->io_capability;
2599                 conn->auth_type = hci_get_auth_req(conn);
2600                 cp.authentication = conn->auth_type;
2601
2602                 if ((conn->out == 0x01 || conn->remote_oob == 0x01) &&
2603                                 hci_find_remote_oob_data(hdev, &conn->dst))
2604                         cp.oob_data = 0x01;
2605                 else
2606                         cp.oob_data = 0x00;
2607
2608                 hci_send_cmd(hdev, HCI_OP_IO_CAPABILITY_REPLY,
2609                                                         sizeof(cp), &cp);
2610         } else {
2611                 struct hci_cp_io_capability_neg_reply cp;
2612
2613                 bacpy(&cp.bdaddr, &ev->bdaddr);
2614                 cp.reason = 0x18; /* Pairing not allowed */
2615
2616                 hci_send_cmd(hdev, HCI_OP_IO_CAPABILITY_NEG_REPLY,
2617                                                         sizeof(cp), &cp);
2618         }
2619
2620 unlock:
2621         hci_dev_unlock(hdev);
2622 }
2623
2624 static inline void hci_io_capa_reply_evt(struct hci_dev *hdev, struct sk_buff *skb)
2625 {
2626         struct hci_ev_io_capa_reply *ev = (void *) skb->data;
2627         struct hci_conn *conn;
2628
2629         BT_DBG("%s", hdev->name);
2630
2631         hci_dev_lock(hdev);
2632
2633         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
2634         if (!conn)
2635                 goto unlock;
2636
2637         conn->remote_cap = ev->capability;
2638         conn->remote_oob = ev->oob_data;
2639         conn->remote_auth = ev->authentication;
2640
2641 unlock:
2642         hci_dev_unlock(hdev);
2643 }
2644
2645 static inline void hci_user_confirm_request_evt(struct hci_dev *hdev,
2646                                                         struct sk_buff *skb)
2647 {
2648         struct hci_ev_user_confirm_req *ev = (void *) skb->data;
2649         int loc_mitm, rem_mitm, confirm_hint = 0;
2650         struct hci_conn *conn;
2651
2652         BT_DBG("%s", hdev->name);
2653
2654         hci_dev_lock(hdev);
2655
2656         if (!test_bit(HCI_MGMT, &hdev->flags))
2657                 goto unlock;
2658
2659         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
2660         if (!conn)
2661                 goto unlock;
2662
2663         loc_mitm = (conn->auth_type & 0x01);
2664         rem_mitm = (conn->remote_auth & 0x01);
2665
2666         /* If we require MITM but the remote device can't provide that
2667          * (it has NoInputNoOutput) then reject the confirmation
2668          * request. The only exception is when we're dedicated bonding
2669          * initiators (connect_cfm_cb set) since then we always have the MITM
2670          * bit set. */
2671         if (!conn->connect_cfm_cb && loc_mitm && conn->remote_cap == 0x03) {
2672                 BT_DBG("Rejecting request: remote device can't provide MITM");
2673                 hci_send_cmd(hdev, HCI_OP_USER_CONFIRM_NEG_REPLY,
2674                                         sizeof(ev->bdaddr), &ev->bdaddr);
2675                 goto unlock;
2676         }
2677
2678         /* If no side requires MITM protection; auto-accept */
2679         if ((!loc_mitm || conn->remote_cap == 0x03) &&
2680                                 (!rem_mitm || conn->io_capability == 0x03)) {
2681
2682                 /* If we're not the initiators request authorization to
2683                  * proceed from user space (mgmt_user_confirm with
2684                  * confirm_hint set to 1). */
2685                 if (!test_bit(HCI_CONN_AUTH_PEND, &conn->pend)) {
2686                         BT_DBG("Confirming auto-accept as acceptor");
2687                         confirm_hint = 1;
2688                         goto confirm;
2689                 }
2690
2691                 BT_DBG("Auto-accept of user confirmation with %ums delay",
2692                                                 hdev->auto_accept_delay);
2693
2694                 if (hdev->auto_accept_delay > 0) {
2695                         int delay = msecs_to_jiffies(hdev->auto_accept_delay);
2696                         mod_timer(&conn->auto_accept_timer, jiffies + delay);
2697                         goto unlock;
2698                 }
2699
2700                 hci_send_cmd(hdev, HCI_OP_USER_CONFIRM_REPLY,
2701                                                 sizeof(ev->bdaddr), &ev->bdaddr);
2702                 goto unlock;
2703         }
2704
2705 confirm:
2706         mgmt_user_confirm_request(hdev->id, &ev->bdaddr, ev->passkey,
2707                                                                 confirm_hint);
2708
2709 unlock:
2710         hci_dev_unlock(hdev);
2711 }
2712
2713 static inline void hci_simple_pair_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
2714 {
2715         struct hci_ev_simple_pair_complete *ev = (void *) skb->data;
2716         struct hci_conn *conn;
2717
2718         BT_DBG("%s", hdev->name);
2719
2720         hci_dev_lock(hdev);
2721
2722         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
2723         if (!conn)
2724                 goto unlock;
2725
2726         /* To avoid duplicate auth_failed events to user space we check
2727          * the HCI_CONN_AUTH_PEND flag which will be set if we
2728          * initiated the authentication. A traditional auth_complete
2729          * event gets always produced as initiator and is also mapped to
2730          * the mgmt_auth_failed event */
2731         if (!test_bit(HCI_CONN_AUTH_PEND, &conn->pend) && ev->status != 0)
2732                 mgmt_auth_failed(hdev->id, &conn->dst, ev->status);
2733
2734         hci_conn_put(conn);
2735
2736 unlock:
2737         hci_dev_unlock(hdev);
2738 }
2739
2740 static inline void hci_remote_host_features_evt(struct hci_dev *hdev, struct sk_buff *skb)
2741 {
2742         struct hci_ev_remote_host_features *ev = (void *) skb->data;
2743         struct inquiry_entry *ie;
2744
2745         BT_DBG("%s", hdev->name);
2746
2747         hci_dev_lock(hdev);
2748
2749         ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr);
2750         if (ie)
2751                 ie->data.ssp_mode = (ev->features[0] & 0x01);
2752
2753         hci_dev_unlock(hdev);
2754 }
2755
2756 static inline void hci_remote_oob_data_request_evt(struct hci_dev *hdev,
2757                                                         struct sk_buff *skb)
2758 {
2759         struct hci_ev_remote_oob_data_request *ev = (void *) skb->data;
2760         struct oob_data *data;
2761
2762         BT_DBG("%s", hdev->name);
2763
2764         hci_dev_lock(hdev);
2765
2766         if (!test_bit(HCI_MGMT, &hdev->flags))
2767                 goto unlock;
2768
2769         data = hci_find_remote_oob_data(hdev, &ev->bdaddr);
2770         if (data) {
2771                 struct hci_cp_remote_oob_data_reply cp;
2772
2773                 bacpy(&cp.bdaddr, &ev->bdaddr);
2774                 memcpy(cp.hash, data->hash, sizeof(cp.hash));
2775                 memcpy(cp.randomizer, data->randomizer, sizeof(cp.randomizer));
2776
2777                 hci_send_cmd(hdev, HCI_OP_REMOTE_OOB_DATA_REPLY, sizeof(cp),
2778                                                                         &cp);
2779         } else {
2780                 struct hci_cp_remote_oob_data_neg_reply cp;
2781
2782                 bacpy(&cp.bdaddr, &ev->bdaddr);
2783                 hci_send_cmd(hdev, HCI_OP_REMOTE_OOB_DATA_NEG_REPLY, sizeof(cp),
2784                                                                         &cp);
2785         }
2786
2787 unlock:
2788         hci_dev_unlock(hdev);
2789 }
2790
2791 static inline void hci_le_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
2792 {
2793         struct hci_ev_le_conn_complete *ev = (void *) skb->data;
2794         struct hci_conn *conn;
2795
2796         BT_DBG("%s status %d", hdev->name, ev->status);
2797
2798         hci_dev_lock(hdev);
2799
2800         conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, &ev->bdaddr);
2801         if (!conn) {
2802                 conn = hci_conn_add(hdev, LE_LINK, &ev->bdaddr);
2803                 if (!conn) {
2804                         BT_ERR("No memory for new connection");
2805                         hci_dev_unlock(hdev);
2806                         return;
2807                 }
2808
2809                 conn->dst_type = ev->bdaddr_type;
2810         }
2811
2812         if (ev->status) {
2813                 mgmt_connect_failed(hdev->id, &ev->bdaddr, ev->status);
2814                 hci_proto_connect_cfm(conn, ev->status);
2815                 conn->state = BT_CLOSED;
2816                 hci_conn_del(conn);
2817                 goto unlock;
2818         }
2819
2820         mgmt_connected(hdev->id, &ev->bdaddr);
2821
2822         conn->sec_level = BT_SECURITY_LOW;
2823         conn->handle = __le16_to_cpu(ev->handle);
2824         conn->state = BT_CONNECTED;
2825
2826         hci_conn_hold_device(conn);
2827         hci_conn_add_sysfs(conn);
2828
2829         hci_proto_connect_cfm(conn, ev->status);
2830
2831 unlock:
2832         hci_dev_unlock(hdev);
2833 }
2834
2835 static inline void hci_le_adv_report_evt(struct hci_dev *hdev,
2836                                                 struct sk_buff *skb)
2837 {
2838         struct hci_ev_le_advertising_info *ev;
2839         u8 num_reports;
2840
2841         num_reports = skb->data[0];
2842         ev = (void *) &skb->data[1];
2843
2844         hci_dev_lock(hdev);
2845
2846         hci_add_adv_entry(hdev, ev);
2847
2848         while (--num_reports) {
2849                 ev = (void *) (ev->data + ev->length + 1);
2850                 hci_add_adv_entry(hdev, ev);
2851         }
2852
2853         hci_dev_unlock(hdev);
2854 }
2855
2856 static inline void hci_le_ltk_request_evt(struct hci_dev *hdev,
2857                                                 struct sk_buff *skb)
2858 {
2859         struct hci_ev_le_ltk_req *ev = (void *) skb->data;
2860         struct hci_cp_le_ltk_reply cp;
2861         struct hci_cp_le_ltk_neg_reply neg;
2862         struct hci_conn *conn;
2863         struct link_key *ltk;
2864
2865         BT_DBG("%s handle %d", hdev->name, cpu_to_le16(ev->handle));
2866
2867         hci_dev_lock(hdev);
2868
2869         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2870         if (conn == NULL)
2871                 goto not_found;
2872
2873         ltk = hci_find_ltk(hdev, ev->ediv, ev->random);
2874         if (ltk == NULL)
2875                 goto not_found;
2876
2877         memcpy(cp.ltk, ltk->val, sizeof(ltk->val));
2878         cp.handle = cpu_to_le16(conn->handle);
2879         conn->pin_length = ltk->pin_len;
2880
2881         hci_send_cmd(hdev, HCI_OP_LE_LTK_REPLY, sizeof(cp), &cp);
2882
2883         hci_dev_unlock(hdev);
2884
2885         return;
2886
2887 not_found:
2888         neg.handle = ev->handle;
2889         hci_send_cmd(hdev, HCI_OP_LE_LTK_NEG_REPLY, sizeof(neg), &neg);
2890         hci_dev_unlock(hdev);
2891 }
2892
2893 static inline void hci_le_meta_evt(struct hci_dev *hdev, struct sk_buff *skb)
2894 {
2895         struct hci_ev_le_meta *le_ev = (void *) skb->data;
2896
2897         skb_pull(skb, sizeof(*le_ev));
2898
2899         switch (le_ev->subevent) {
2900         case HCI_EV_LE_CONN_COMPLETE:
2901                 hci_le_conn_complete_evt(hdev, skb);
2902                 break;
2903
2904         case HCI_EV_LE_ADVERTISING_REPORT:
2905                 hci_le_adv_report_evt(hdev, skb);
2906                 break;
2907
2908         case HCI_EV_LE_LTK_REQ:
2909                 hci_le_ltk_request_evt(hdev, skb);
2910                 break;
2911
2912         default:
2913                 break;
2914         }
2915 }
2916
2917 void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb)
2918 {
2919         struct hci_event_hdr *hdr = (void *) skb->data;
2920         __u8 event = hdr->evt;
2921
2922         skb_pull(skb, HCI_EVENT_HDR_SIZE);
2923
2924         switch (event) {
2925         case HCI_EV_INQUIRY_COMPLETE:
2926                 hci_inquiry_complete_evt(hdev, skb);
2927                 break;
2928
2929         case HCI_EV_INQUIRY_RESULT:
2930                 hci_inquiry_result_evt(hdev, skb);
2931                 break;
2932
2933         case HCI_EV_CONN_COMPLETE:
2934                 hci_conn_complete_evt(hdev, skb);
2935                 break;
2936
2937         case HCI_EV_CONN_REQUEST:
2938                 hci_conn_request_evt(hdev, skb);
2939                 break;
2940
2941         case HCI_EV_DISCONN_COMPLETE:
2942                 hci_disconn_complete_evt(hdev, skb);
2943                 break;
2944
2945         case HCI_EV_AUTH_COMPLETE:
2946                 hci_auth_complete_evt(hdev, skb);
2947                 break;
2948
2949         case HCI_EV_REMOTE_NAME:
2950                 hci_remote_name_evt(hdev, skb);
2951                 break;
2952
2953         case HCI_EV_ENCRYPT_CHANGE:
2954                 hci_encrypt_change_evt(hdev, skb);
2955                 break;
2956
2957         case HCI_EV_CHANGE_LINK_KEY_COMPLETE:
2958                 hci_change_link_key_complete_evt(hdev, skb);
2959                 break;
2960
2961         case HCI_EV_REMOTE_FEATURES:
2962                 hci_remote_features_evt(hdev, skb);
2963                 break;
2964
2965         case HCI_EV_REMOTE_VERSION:
2966                 hci_remote_version_evt(hdev, skb);
2967                 break;
2968
2969         case HCI_EV_QOS_SETUP_COMPLETE:
2970                 hci_qos_setup_complete_evt(hdev, skb);
2971                 break;
2972
2973         case HCI_EV_CMD_COMPLETE:
2974                 hci_cmd_complete_evt(hdev, skb);
2975                 break;
2976
2977         case HCI_EV_CMD_STATUS:
2978                 hci_cmd_status_evt(hdev, skb);
2979                 break;
2980
2981         case HCI_EV_ROLE_CHANGE:
2982                 hci_role_change_evt(hdev, skb);
2983                 break;
2984
2985         case HCI_EV_NUM_COMP_PKTS:
2986                 hci_num_comp_pkts_evt(hdev, skb);
2987                 break;
2988
2989         case HCI_EV_MODE_CHANGE:
2990                 hci_mode_change_evt(hdev, skb);
2991                 break;
2992
2993         case HCI_EV_PIN_CODE_REQ:
2994                 hci_pin_code_request_evt(hdev, skb);
2995                 break;
2996
2997         case HCI_EV_LINK_KEY_REQ:
2998                 hci_link_key_request_evt(hdev, skb);
2999                 break;
3000
3001         case HCI_EV_LINK_KEY_NOTIFY:
3002                 hci_link_key_notify_evt(hdev, skb);
3003                 break;
3004
3005         case HCI_EV_CLOCK_OFFSET:
3006                 hci_clock_offset_evt(hdev, skb);
3007                 break;
3008
3009         case HCI_EV_PKT_TYPE_CHANGE:
3010                 hci_pkt_type_change_evt(hdev, skb);
3011                 break;
3012
3013         case HCI_EV_PSCAN_REP_MODE:
3014                 hci_pscan_rep_mode_evt(hdev, skb);
3015                 break;
3016
3017         case HCI_EV_INQUIRY_RESULT_WITH_RSSI:
3018                 hci_inquiry_result_with_rssi_evt(hdev, skb);
3019                 break;
3020
3021         case HCI_EV_REMOTE_EXT_FEATURES:
3022                 hci_remote_ext_features_evt(hdev, skb);
3023                 break;
3024
3025         case HCI_EV_SYNC_CONN_COMPLETE:
3026                 hci_sync_conn_complete_evt(hdev, skb);
3027                 break;
3028
3029         case HCI_EV_SYNC_CONN_CHANGED:
3030                 hci_sync_conn_changed_evt(hdev, skb);
3031                 break;
3032
3033         case HCI_EV_SNIFF_SUBRATE:
3034                 hci_sniff_subrate_evt(hdev, skb);
3035                 break;
3036
3037         case HCI_EV_EXTENDED_INQUIRY_RESULT:
3038                 hci_extended_inquiry_result_evt(hdev, skb);
3039                 break;
3040
3041         case HCI_EV_IO_CAPA_REQUEST:
3042                 hci_io_capa_request_evt(hdev, skb);
3043                 break;
3044
3045         case HCI_EV_IO_CAPA_REPLY:
3046                 hci_io_capa_reply_evt(hdev, skb);
3047                 break;
3048
3049         case HCI_EV_USER_CONFIRM_REQUEST:
3050                 hci_user_confirm_request_evt(hdev, skb);
3051                 break;
3052
3053         case HCI_EV_SIMPLE_PAIR_COMPLETE:
3054                 hci_simple_pair_complete_evt(hdev, skb);
3055                 break;
3056
3057         case HCI_EV_REMOTE_HOST_FEATURES:
3058                 hci_remote_host_features_evt(hdev, skb);
3059                 break;
3060
3061         case HCI_EV_LE_META:
3062                 hci_le_meta_evt(hdev, skb);
3063                 break;
3064
3065         case HCI_EV_REMOTE_OOB_DATA_REQUEST:
3066                 hci_remote_oob_data_request_evt(hdev, skb);
3067                 break;
3068
3069         default:
3070                 BT_DBG("%s event 0x%x", hdev->name, event);
3071                 break;
3072         }
3073
3074         kfree_skb(skb);
3075         hdev->stat.evt_rx++;
3076 }
3077
3078 /* Generate internal stack event */
3079 void hci_si_event(struct hci_dev *hdev, int type, int dlen, void *data)
3080 {
3081         struct hci_event_hdr *hdr;
3082         struct hci_ev_stack_internal *ev;
3083         struct sk_buff *skb;
3084
3085         skb = bt_skb_alloc(HCI_EVENT_HDR_SIZE + sizeof(*ev) + dlen, GFP_ATOMIC);
3086         if (!skb)
3087                 return;
3088
3089         hdr = (void *) skb_put(skb, HCI_EVENT_HDR_SIZE);
3090         hdr->evt  = HCI_EV_STACK_INTERNAL;
3091         hdr->plen = sizeof(*ev) + dlen;
3092
3093         ev  = (void *) skb_put(skb, sizeof(*ev) + dlen);
3094         ev->type = type;
3095         memcpy(ev->data, data, dlen);
3096
3097         bt_cb(skb)->incoming = 1;
3098         __net_timestamp(skb);
3099
3100         bt_cb(skb)->pkt_type = HCI_EVENT_PKT;
3101         skb->dev = (void *) hdev;
3102         hci_send_to_sock(hdev, skb, NULL);
3103         kfree_skb(skb);
3104 }
3105
3106 module_param(enable_le, bool, 0444);
3107 MODULE_PARM_DESC(enable_le, "Enable LE support");