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