]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - net/bluetooth/hci_event.c
ARM: delete struct sys_timer
[karo-tx-linux.git] / net / bluetooth / hci_event.c
1 /*
2    BlueZ - Bluetooth protocol stack for Linux
3    Copyright (c) 2000-2001, 2010, Code Aurora Forum. All rights reserved.
4
5    Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
6
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License version 2 as
9    published by the Free Software Foundation;
10
11    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
12    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
13    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
14    IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
15    CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
16    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19
20    ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
21    COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
22    SOFTWARE IS DISCLAIMED.
23 */
24
25 /* Bluetooth HCI event handling. */
26
27 #include <asm/unaligned.h>
28
29 #include <net/bluetooth/bluetooth.h>
30 #include <net/bluetooth/hci_core.h>
31 #include <net/bluetooth/mgmt.h>
32 #include <net/bluetooth/a2mp.h>
33 #include <net/bluetooth/amp.h>
34
35 /* Handle HCI Event packets */
36
37 static void hci_cc_inquiry_cancel(struct hci_dev *hdev, struct sk_buff *skb)
38 {
39         __u8 status = *((__u8 *) skb->data);
40
41         BT_DBG("%s status 0x%2.2x", hdev->name, status);
42
43         if (status) {
44                 hci_dev_lock(hdev);
45                 mgmt_stop_discovery_failed(hdev, status);
46                 hci_dev_unlock(hdev);
47                 return;
48         }
49
50         clear_bit(HCI_INQUIRY, &hdev->flags);
51
52         hci_dev_lock(hdev);
53         hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
54         hci_dev_unlock(hdev);
55
56         hci_req_complete(hdev, HCI_OP_INQUIRY_CANCEL, status);
57
58         hci_conn_check_pending(hdev);
59 }
60
61 static void hci_cc_periodic_inq(struct hci_dev *hdev, struct sk_buff *skb)
62 {
63         __u8 status = *((__u8 *) skb->data);
64
65         BT_DBG("%s status 0x%2.2x", hdev->name, status);
66
67         if (status)
68                 return;
69
70         set_bit(HCI_PERIODIC_INQ, &hdev->dev_flags);
71 }
72
73 static void hci_cc_exit_periodic_inq(struct hci_dev *hdev, struct sk_buff *skb)
74 {
75         __u8 status = *((__u8 *) skb->data);
76
77         BT_DBG("%s status 0x%2.2x", hdev->name, status);
78
79         if (status)
80                 return;
81
82         clear_bit(HCI_PERIODIC_INQ, &hdev->dev_flags);
83
84         hci_conn_check_pending(hdev);
85 }
86
87 static void hci_cc_remote_name_req_cancel(struct hci_dev *hdev,
88                                           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%2.2x", 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%2.2x", 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%2.2x", 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,
160                                         struct sk_buff *skb)
161 {
162         struct hci_rp_read_def_link_policy *rp = (void *) skb->data;
163
164         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
165
166         if (rp->status)
167                 return;
168
169         hdev->link_policy = __le16_to_cpu(rp->policy);
170 }
171
172 static void hci_cc_write_def_link_policy(struct hci_dev *hdev,
173                                          struct sk_buff *skb)
174 {
175         __u8 status = *((__u8 *) skb->data);
176         void *sent;
177
178         BT_DBG("%s status 0x%2.2x", hdev->name, status);
179
180         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_DEF_LINK_POLICY);
181         if (!sent)
182                 return;
183
184         if (!status)
185                 hdev->link_policy = get_unaligned_le16(sent);
186
187         hci_req_complete(hdev, HCI_OP_WRITE_DEF_LINK_POLICY, status);
188 }
189
190 static void hci_cc_reset(struct hci_dev *hdev, struct sk_buff *skb)
191 {
192         __u8 status = *((__u8 *) skb->data);
193
194         BT_DBG("%s status 0x%2.2x", hdev->name, status);
195
196         clear_bit(HCI_RESET, &hdev->flags);
197
198         hci_req_complete(hdev, HCI_OP_RESET, status);
199
200         /* Reset all non-persistent flags */
201         hdev->dev_flags &= ~(BIT(HCI_LE_SCAN) | BIT(HCI_PENDING_CLASS) |
202                              BIT(HCI_PERIODIC_INQ));
203
204         hdev->discovery.state = DISCOVERY_STOPPED;
205         hdev->inq_tx_power = HCI_TX_POWER_INVALID;
206         hdev->adv_tx_power = HCI_TX_POWER_INVALID;
207
208         memset(hdev->adv_data, 0, sizeof(hdev->adv_data));
209         hdev->adv_data_len = 0;
210 }
211
212 static void hci_cc_write_local_name(struct hci_dev *hdev, struct sk_buff *skb)
213 {
214         __u8 status = *((__u8 *) skb->data);
215         void *sent;
216
217         BT_DBG("%s status 0x%2.2x", hdev->name, status);
218
219         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_LOCAL_NAME);
220         if (!sent)
221                 return;
222
223         hci_dev_lock(hdev);
224
225         if (test_bit(HCI_MGMT, &hdev->dev_flags))
226                 mgmt_set_local_name_complete(hdev, sent, status);
227         else if (!status)
228                 memcpy(hdev->dev_name, sent, HCI_MAX_NAME_LENGTH);
229
230         hci_dev_unlock(hdev);
231
232         if (!status && !test_bit(HCI_INIT, &hdev->flags))
233                 hci_update_ad(hdev);
234
235         hci_req_complete(hdev, HCI_OP_WRITE_LOCAL_NAME, status);
236 }
237
238 static void hci_cc_read_local_name(struct hci_dev *hdev, struct sk_buff *skb)
239 {
240         struct hci_rp_read_local_name *rp = (void *) skb->data;
241
242         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
243
244         if (rp->status)
245                 return;
246
247         if (test_bit(HCI_SETUP, &hdev->dev_flags))
248                 memcpy(hdev->dev_name, rp->name, HCI_MAX_NAME_LENGTH);
249 }
250
251 static void hci_cc_write_auth_enable(struct hci_dev *hdev, struct sk_buff *skb)
252 {
253         __u8 status = *((__u8 *) skb->data);
254         void *sent;
255
256         BT_DBG("%s status 0x%2.2x", hdev->name, status);
257
258         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_AUTH_ENABLE);
259         if (!sent)
260                 return;
261
262         if (!status) {
263                 __u8 param = *((__u8 *) sent);
264
265                 if (param == AUTH_ENABLED)
266                         set_bit(HCI_AUTH, &hdev->flags);
267                 else
268                         clear_bit(HCI_AUTH, &hdev->flags);
269         }
270
271         if (test_bit(HCI_MGMT, &hdev->dev_flags))
272                 mgmt_auth_enable_complete(hdev, status);
273
274         hci_req_complete(hdev, HCI_OP_WRITE_AUTH_ENABLE, status);
275 }
276
277 static void hci_cc_write_encrypt_mode(struct hci_dev *hdev, struct sk_buff *skb)
278 {
279         __u8 status = *((__u8 *) skb->data);
280         void *sent;
281
282         BT_DBG("%s status 0x%2.2x", hdev->name, status);
283
284         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_ENCRYPT_MODE);
285         if (!sent)
286                 return;
287
288         if (!status) {
289                 __u8 param = *((__u8 *) sent);
290
291                 if (param)
292                         set_bit(HCI_ENCRYPT, &hdev->flags);
293                 else
294                         clear_bit(HCI_ENCRYPT, &hdev->flags);
295         }
296
297         hci_req_complete(hdev, HCI_OP_WRITE_ENCRYPT_MODE, status);
298 }
299
300 static void hci_cc_write_scan_enable(struct hci_dev *hdev, struct sk_buff *skb)
301 {
302         __u8 param, status = *((__u8 *) skb->data);
303         int old_pscan, old_iscan;
304         void *sent;
305
306         BT_DBG("%s status 0x%2.2x", hdev->name, status);
307
308         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_SCAN_ENABLE);
309         if (!sent)
310                 return;
311
312         param = *((__u8 *) sent);
313
314         hci_dev_lock(hdev);
315
316         if (status) {
317                 mgmt_write_scan_failed(hdev, param, status);
318                 hdev->discov_timeout = 0;
319                 goto done;
320         }
321
322         old_pscan = test_and_clear_bit(HCI_PSCAN, &hdev->flags);
323         old_iscan = test_and_clear_bit(HCI_ISCAN, &hdev->flags);
324
325         if (param & SCAN_INQUIRY) {
326                 set_bit(HCI_ISCAN, &hdev->flags);
327                 if (!old_iscan)
328                         mgmt_discoverable(hdev, 1);
329                 if (hdev->discov_timeout > 0) {
330                         int to = msecs_to_jiffies(hdev->discov_timeout * 1000);
331                         queue_delayed_work(hdev->workqueue, &hdev->discov_off,
332                                            to);
333                 }
334         } else if (old_iscan)
335                 mgmt_discoverable(hdev, 0);
336
337         if (param & SCAN_PAGE) {
338                 set_bit(HCI_PSCAN, &hdev->flags);
339                 if (!old_pscan)
340                         mgmt_connectable(hdev, 1);
341         } else if (old_pscan)
342                 mgmt_connectable(hdev, 0);
343
344 done:
345         hci_dev_unlock(hdev);
346         hci_req_complete(hdev, HCI_OP_WRITE_SCAN_ENABLE, status);
347 }
348
349 static void hci_cc_read_class_of_dev(struct hci_dev *hdev, struct sk_buff *skb)
350 {
351         struct hci_rp_read_class_of_dev *rp = (void *) skb->data;
352
353         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
354
355         if (rp->status)
356                 return;
357
358         memcpy(hdev->dev_class, rp->dev_class, 3);
359
360         BT_DBG("%s class 0x%.2x%.2x%.2x", hdev->name,
361                hdev->dev_class[2], hdev->dev_class[1], hdev->dev_class[0]);
362 }
363
364 static void hci_cc_write_class_of_dev(struct hci_dev *hdev, struct sk_buff *skb)
365 {
366         __u8 status = *((__u8 *) skb->data);
367         void *sent;
368
369         BT_DBG("%s status 0x%2.2x", hdev->name, status);
370
371         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_CLASS_OF_DEV);
372         if (!sent)
373                 return;
374
375         hci_dev_lock(hdev);
376
377         if (status == 0)
378                 memcpy(hdev->dev_class, sent, 3);
379
380         if (test_bit(HCI_MGMT, &hdev->dev_flags))
381                 mgmt_set_class_of_dev_complete(hdev, sent, status);
382
383         hci_dev_unlock(hdev);
384 }
385
386 static void hci_cc_read_voice_setting(struct hci_dev *hdev, struct sk_buff *skb)
387 {
388         struct hci_rp_read_voice_setting *rp = (void *) skb->data;
389         __u16 setting;
390
391         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
392
393         if (rp->status)
394                 return;
395
396         setting = __le16_to_cpu(rp->voice_setting);
397
398         if (hdev->voice_setting == setting)
399                 return;
400
401         hdev->voice_setting = setting;
402
403         BT_DBG("%s voice setting 0x%4.4x", hdev->name, setting);
404
405         if (hdev->notify)
406                 hdev->notify(hdev, HCI_NOTIFY_VOICE_SETTING);
407 }
408
409 static void hci_cc_write_voice_setting(struct hci_dev *hdev,
410                                        struct sk_buff *skb)
411 {
412         __u8 status = *((__u8 *) skb->data);
413         __u16 setting;
414         void *sent;
415
416         BT_DBG("%s status 0x%2.2x", hdev->name, status);
417
418         if (status)
419                 return;
420
421         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_VOICE_SETTING);
422         if (!sent)
423                 return;
424
425         setting = get_unaligned_le16(sent);
426
427         if (hdev->voice_setting == setting)
428                 return;
429
430         hdev->voice_setting = setting;
431
432         BT_DBG("%s voice setting 0x%4.4x", hdev->name, setting);
433
434         if (hdev->notify)
435                 hdev->notify(hdev, HCI_NOTIFY_VOICE_SETTING);
436 }
437
438 static void hci_cc_host_buffer_size(struct hci_dev *hdev, struct sk_buff *skb)
439 {
440         __u8 status = *((__u8 *) skb->data);
441
442         BT_DBG("%s status 0x%2.2x", hdev->name, status);
443
444         hci_req_complete(hdev, HCI_OP_HOST_BUFFER_SIZE, status);
445 }
446
447 static void hci_cc_write_ssp_mode(struct hci_dev *hdev, struct sk_buff *skb)
448 {
449         __u8 status = *((__u8 *) skb->data);
450         struct hci_cp_write_ssp_mode *sent;
451
452         BT_DBG("%s status 0x%2.2x", hdev->name, status);
453
454         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_SSP_MODE);
455         if (!sent)
456                 return;
457
458         if (!status) {
459                 if (sent->mode)
460                         hdev->host_features[0] |= LMP_HOST_SSP;
461                 else
462                         hdev->host_features[0] &= ~LMP_HOST_SSP;
463         }
464
465         if (test_bit(HCI_MGMT, &hdev->dev_flags))
466                 mgmt_ssp_enable_complete(hdev, sent->mode, status);
467         else if (!status) {
468                 if (sent->mode)
469                         set_bit(HCI_SSP_ENABLED, &hdev->dev_flags);
470                 else
471                         clear_bit(HCI_SSP_ENABLED, &hdev->dev_flags);
472         }
473 }
474
475 static u8 hci_get_inquiry_mode(struct hci_dev *hdev)
476 {
477         if (lmp_ext_inq_capable(hdev))
478                 return 2;
479
480         if (lmp_inq_rssi_capable(hdev))
481                 return 1;
482
483         if (hdev->manufacturer == 11 && hdev->hci_rev == 0x00 &&
484             hdev->lmp_subver == 0x0757)
485                 return 1;
486
487         if (hdev->manufacturer == 15) {
488                 if (hdev->hci_rev == 0x03 && hdev->lmp_subver == 0x6963)
489                         return 1;
490                 if (hdev->hci_rev == 0x09 && hdev->lmp_subver == 0x6963)
491                         return 1;
492                 if (hdev->hci_rev == 0x00 && hdev->lmp_subver == 0x6965)
493                         return 1;
494         }
495
496         if (hdev->manufacturer == 31 && hdev->hci_rev == 0x2005 &&
497             hdev->lmp_subver == 0x1805)
498                 return 1;
499
500         return 0;
501 }
502
503 static void hci_setup_inquiry_mode(struct hci_dev *hdev)
504 {
505         u8 mode;
506
507         mode = hci_get_inquiry_mode(hdev);
508
509         hci_send_cmd(hdev, HCI_OP_WRITE_INQUIRY_MODE, 1, &mode);
510 }
511
512 static void hci_setup_event_mask(struct hci_dev *hdev)
513 {
514         /* The second byte is 0xff instead of 0x9f (two reserved bits
515          * disabled) since a Broadcom 1.2 dongle doesn't respond to the
516          * command otherwise */
517         u8 events[8] = { 0xff, 0xff, 0xfb, 0xff, 0x00, 0x00, 0x00, 0x00 };
518
519         /* CSR 1.1 dongles does not accept any bitfield so don't try to set
520          * any event mask for pre 1.2 devices */
521         if (hdev->hci_ver < BLUETOOTH_VER_1_2)
522                 return;
523
524         if (lmp_bredr_capable(hdev)) {
525                 events[4] |= 0x01; /* Flow Specification Complete */
526                 events[4] |= 0x02; /* Inquiry Result with RSSI */
527                 events[4] |= 0x04; /* Read Remote Extended Features Complete */
528                 events[5] |= 0x08; /* Synchronous Connection Complete */
529                 events[5] |= 0x10; /* Synchronous Connection Changed */
530         }
531
532         if (lmp_inq_rssi_capable(hdev))
533                 events[4] |= 0x02; /* Inquiry Result with RSSI */
534
535         if (lmp_sniffsubr_capable(hdev))
536                 events[5] |= 0x20; /* Sniff Subrating */
537
538         if (lmp_pause_enc_capable(hdev))
539                 events[5] |= 0x80; /* Encryption Key Refresh Complete */
540
541         if (lmp_ext_inq_capable(hdev))
542                 events[5] |= 0x40; /* Extended Inquiry Result */
543
544         if (lmp_no_flush_capable(hdev))
545                 events[7] |= 0x01; /* Enhanced Flush Complete */
546
547         if (lmp_lsto_capable(hdev))
548                 events[6] |= 0x80; /* Link Supervision Timeout Changed */
549
550         if (lmp_ssp_capable(hdev)) {
551                 events[6] |= 0x01;      /* IO Capability Request */
552                 events[6] |= 0x02;      /* IO Capability Response */
553                 events[6] |= 0x04;      /* User Confirmation Request */
554                 events[6] |= 0x08;      /* User Passkey Request */
555                 events[6] |= 0x10;      /* Remote OOB Data Request */
556                 events[6] |= 0x20;      /* Simple Pairing Complete */
557                 events[7] |= 0x04;      /* User Passkey Notification */
558                 events[7] |= 0x08;      /* Keypress Notification */
559                 events[7] |= 0x10;      /* Remote Host Supported
560                                          * Features Notification */
561         }
562
563         if (lmp_le_capable(hdev))
564                 events[7] |= 0x20;      /* LE Meta-Event */
565
566         hci_send_cmd(hdev, HCI_OP_SET_EVENT_MASK, sizeof(events), events);
567
568         if (lmp_le_capable(hdev)) {
569                 memset(events, 0, sizeof(events));
570                 events[0] = 0x1f;
571                 hci_send_cmd(hdev, HCI_OP_LE_SET_EVENT_MASK,
572                              sizeof(events), events);
573         }
574 }
575
576 static void bredr_setup(struct hci_dev *hdev)
577 {
578         struct hci_cp_delete_stored_link_key cp;
579         __le16 param;
580         __u8 flt_type;
581
582         /* Read Buffer Size (ACL mtu, max pkt, etc.) */
583         hci_send_cmd(hdev, HCI_OP_READ_BUFFER_SIZE, 0, NULL);
584
585         /* Read Class of Device */
586         hci_send_cmd(hdev, HCI_OP_READ_CLASS_OF_DEV, 0, NULL);
587
588         /* Read Local Name */
589         hci_send_cmd(hdev, HCI_OP_READ_LOCAL_NAME, 0, NULL);
590
591         /* Read Voice Setting */
592         hci_send_cmd(hdev, HCI_OP_READ_VOICE_SETTING, 0, NULL);
593
594         /* Clear Event Filters */
595         flt_type = HCI_FLT_CLEAR_ALL;
596         hci_send_cmd(hdev, HCI_OP_SET_EVENT_FLT, 1, &flt_type);
597
598         /* Connection accept timeout ~20 secs */
599         param = __constant_cpu_to_le16(0x7d00);
600         hci_send_cmd(hdev, HCI_OP_WRITE_CA_TIMEOUT, 2, &param);
601
602         bacpy(&cp.bdaddr, BDADDR_ANY);
603         cp.delete_all = 1;
604         hci_send_cmd(hdev, HCI_OP_DELETE_STORED_LINK_KEY, sizeof(cp), &cp);
605 }
606
607 static void le_setup(struct hci_dev *hdev)
608 {
609         /* Read LE Buffer Size */
610         hci_send_cmd(hdev, HCI_OP_LE_READ_BUFFER_SIZE, 0, NULL);
611
612         /* Read LE Advertising Channel TX Power */
613         hci_send_cmd(hdev, HCI_OP_LE_READ_ADV_TX_POWER, 0, NULL);
614 }
615
616 static void hci_setup(struct hci_dev *hdev)
617 {
618         if (hdev->dev_type != HCI_BREDR)
619                 return;
620
621         /* Read BD Address */
622         hci_send_cmd(hdev, HCI_OP_READ_BD_ADDR, 0, NULL);
623
624         if (lmp_bredr_capable(hdev))
625                 bredr_setup(hdev);
626
627         if (lmp_le_capable(hdev))
628                 le_setup(hdev);
629
630         hci_setup_event_mask(hdev);
631
632         if (hdev->hci_ver > BLUETOOTH_VER_1_1)
633                 hci_send_cmd(hdev, HCI_OP_READ_LOCAL_COMMANDS, 0, NULL);
634
635         if (lmp_ssp_capable(hdev)) {
636                 if (test_bit(HCI_SSP_ENABLED, &hdev->dev_flags)) {
637                         u8 mode = 0x01;
638                         hci_send_cmd(hdev, HCI_OP_WRITE_SSP_MODE,
639                                      sizeof(mode), &mode);
640                 } else {
641                         struct hci_cp_write_eir cp;
642
643                         memset(hdev->eir, 0, sizeof(hdev->eir));
644                         memset(&cp, 0, sizeof(cp));
645
646                         hci_send_cmd(hdev, HCI_OP_WRITE_EIR, sizeof(cp), &cp);
647                 }
648         }
649
650         if (lmp_inq_rssi_capable(hdev))
651                 hci_setup_inquiry_mode(hdev);
652
653         if (lmp_inq_tx_pwr_capable(hdev))
654                 hci_send_cmd(hdev, HCI_OP_READ_INQ_RSP_TX_POWER, 0, NULL);
655
656         if (lmp_ext_feat_capable(hdev)) {
657                 struct hci_cp_read_local_ext_features cp;
658
659                 cp.page = 0x01;
660                 hci_send_cmd(hdev, HCI_OP_READ_LOCAL_EXT_FEATURES, sizeof(cp),
661                              &cp);
662         }
663
664         if (test_bit(HCI_LINK_SECURITY, &hdev->dev_flags)) {
665                 u8 enable = 1;
666                 hci_send_cmd(hdev, HCI_OP_WRITE_AUTH_ENABLE, sizeof(enable),
667                              &enable);
668         }
669 }
670
671 static void hci_cc_read_local_version(struct hci_dev *hdev, struct sk_buff *skb)
672 {
673         struct hci_rp_read_local_version *rp = (void *) skb->data;
674
675         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
676
677         if (rp->status)
678                 goto done;
679
680         hdev->hci_ver = rp->hci_ver;
681         hdev->hci_rev = __le16_to_cpu(rp->hci_rev);
682         hdev->lmp_ver = rp->lmp_ver;
683         hdev->manufacturer = __le16_to_cpu(rp->manufacturer);
684         hdev->lmp_subver = __le16_to_cpu(rp->lmp_subver);
685
686         BT_DBG("%s manufacturer 0x%4.4x hci ver %d:%d", hdev->name,
687                hdev->manufacturer, hdev->hci_ver, hdev->hci_rev);
688
689         if (test_bit(HCI_INIT, &hdev->flags))
690                 hci_setup(hdev);
691
692 done:
693         hci_req_complete(hdev, HCI_OP_READ_LOCAL_VERSION, rp->status);
694 }
695
696 static void hci_setup_link_policy(struct hci_dev *hdev)
697 {
698         struct hci_cp_write_def_link_policy cp;
699         u16 link_policy = 0;
700
701         if (lmp_rswitch_capable(hdev))
702                 link_policy |= HCI_LP_RSWITCH;
703         if (lmp_hold_capable(hdev))
704                 link_policy |= HCI_LP_HOLD;
705         if (lmp_sniff_capable(hdev))
706                 link_policy |= HCI_LP_SNIFF;
707         if (lmp_park_capable(hdev))
708                 link_policy |= HCI_LP_PARK;
709
710         cp.policy = cpu_to_le16(link_policy);
711         hci_send_cmd(hdev, HCI_OP_WRITE_DEF_LINK_POLICY, sizeof(cp), &cp);
712 }
713
714 static void hci_cc_read_local_commands(struct hci_dev *hdev,
715                                        struct sk_buff *skb)
716 {
717         struct hci_rp_read_local_commands *rp = (void *) skb->data;
718
719         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
720
721         if (rp->status)
722                 goto done;
723
724         memcpy(hdev->commands, rp->commands, sizeof(hdev->commands));
725
726         if (test_bit(HCI_INIT, &hdev->flags) && (hdev->commands[5] & 0x10))
727                 hci_setup_link_policy(hdev);
728
729 done:
730         hci_req_complete(hdev, HCI_OP_READ_LOCAL_COMMANDS, rp->status);
731 }
732
733 static void hci_cc_read_local_features(struct hci_dev *hdev,
734                                        struct sk_buff *skb)
735 {
736         struct hci_rp_read_local_features *rp = (void *) skb->data;
737
738         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
739
740         if (rp->status)
741                 return;
742
743         memcpy(hdev->features, rp->features, 8);
744
745         /* Adjust default settings according to features
746          * supported by device. */
747
748         if (hdev->features[0] & LMP_3SLOT)
749                 hdev->pkt_type |= (HCI_DM3 | HCI_DH3);
750
751         if (hdev->features[0] & LMP_5SLOT)
752                 hdev->pkt_type |= (HCI_DM5 | HCI_DH5);
753
754         if (hdev->features[1] & LMP_HV2) {
755                 hdev->pkt_type  |= (HCI_HV2);
756                 hdev->esco_type |= (ESCO_HV2);
757         }
758
759         if (hdev->features[1] & LMP_HV3) {
760                 hdev->pkt_type  |= (HCI_HV3);
761                 hdev->esco_type |= (ESCO_HV3);
762         }
763
764         if (lmp_esco_capable(hdev))
765                 hdev->esco_type |= (ESCO_EV3);
766
767         if (hdev->features[4] & LMP_EV4)
768                 hdev->esco_type |= (ESCO_EV4);
769
770         if (hdev->features[4] & LMP_EV5)
771                 hdev->esco_type |= (ESCO_EV5);
772
773         if (hdev->features[5] & LMP_EDR_ESCO_2M)
774                 hdev->esco_type |= (ESCO_2EV3);
775
776         if (hdev->features[5] & LMP_EDR_ESCO_3M)
777                 hdev->esco_type |= (ESCO_3EV3);
778
779         if (hdev->features[5] & LMP_EDR_3S_ESCO)
780                 hdev->esco_type |= (ESCO_2EV5 | ESCO_3EV5);
781
782         BT_DBG("%s features 0x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x", hdev->name,
783                hdev->features[0], hdev->features[1],
784                hdev->features[2], hdev->features[3],
785                hdev->features[4], hdev->features[5],
786                hdev->features[6], hdev->features[7]);
787 }
788
789 static void hci_set_le_support(struct hci_dev *hdev)
790 {
791         struct hci_cp_write_le_host_supported cp;
792
793         memset(&cp, 0, sizeof(cp));
794
795         if (test_bit(HCI_LE_ENABLED, &hdev->dev_flags)) {
796                 cp.le = 1;
797                 cp.simul = lmp_le_br_capable(hdev);
798         }
799
800         if (cp.le != lmp_host_le_capable(hdev))
801                 hci_send_cmd(hdev, HCI_OP_WRITE_LE_HOST_SUPPORTED, sizeof(cp),
802                              &cp);
803 }
804
805 static void hci_cc_read_local_ext_features(struct hci_dev *hdev,
806                                            struct sk_buff *skb)
807 {
808         struct hci_rp_read_local_ext_features *rp = (void *) skb->data;
809
810         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
811
812         if (rp->status)
813                 goto done;
814
815         switch (rp->page) {
816         case 0:
817                 memcpy(hdev->features, rp->features, 8);
818                 break;
819         case 1:
820                 memcpy(hdev->host_features, rp->features, 8);
821                 break;
822         }
823
824         if (test_bit(HCI_INIT, &hdev->flags) && lmp_le_capable(hdev))
825                 hci_set_le_support(hdev);
826
827 done:
828         hci_req_complete(hdev, HCI_OP_READ_LOCAL_EXT_FEATURES, rp->status);
829 }
830
831 static void hci_cc_read_flow_control_mode(struct hci_dev *hdev,
832                                           struct sk_buff *skb)
833 {
834         struct hci_rp_read_flow_control_mode *rp = (void *) skb->data;
835
836         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
837
838         if (rp->status)
839                 return;
840
841         hdev->flow_ctl_mode = rp->mode;
842
843         hci_req_complete(hdev, HCI_OP_READ_FLOW_CONTROL_MODE, rp->status);
844 }
845
846 static void hci_cc_read_buffer_size(struct hci_dev *hdev, struct sk_buff *skb)
847 {
848         struct hci_rp_read_buffer_size *rp = (void *) skb->data;
849
850         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
851
852         if (rp->status)
853                 return;
854
855         hdev->acl_mtu  = __le16_to_cpu(rp->acl_mtu);
856         hdev->sco_mtu  = rp->sco_mtu;
857         hdev->acl_pkts = __le16_to_cpu(rp->acl_max_pkt);
858         hdev->sco_pkts = __le16_to_cpu(rp->sco_max_pkt);
859
860         if (test_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE, &hdev->quirks)) {
861                 hdev->sco_mtu  = 64;
862                 hdev->sco_pkts = 8;
863         }
864
865         hdev->acl_cnt = hdev->acl_pkts;
866         hdev->sco_cnt = hdev->sco_pkts;
867
868         BT_DBG("%s acl mtu %d:%d sco mtu %d:%d", hdev->name, hdev->acl_mtu,
869                hdev->acl_pkts, hdev->sco_mtu, hdev->sco_pkts);
870 }
871
872 static void hci_cc_read_bd_addr(struct hci_dev *hdev, struct sk_buff *skb)
873 {
874         struct hci_rp_read_bd_addr *rp = (void *) skb->data;
875
876         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
877
878         if (!rp->status)
879                 bacpy(&hdev->bdaddr, &rp->bdaddr);
880
881         hci_req_complete(hdev, HCI_OP_READ_BD_ADDR, rp->status);
882 }
883
884 static void hci_cc_read_data_block_size(struct hci_dev *hdev,
885                                         struct sk_buff *skb)
886 {
887         struct hci_rp_read_data_block_size *rp = (void *) skb->data;
888
889         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
890
891         if (rp->status)
892                 return;
893
894         hdev->block_mtu = __le16_to_cpu(rp->max_acl_len);
895         hdev->block_len = __le16_to_cpu(rp->block_len);
896         hdev->num_blocks = __le16_to_cpu(rp->num_blocks);
897
898         hdev->block_cnt = hdev->num_blocks;
899
900         BT_DBG("%s blk mtu %d cnt %d len %d", hdev->name, hdev->block_mtu,
901                hdev->block_cnt, hdev->block_len);
902
903         hci_req_complete(hdev, HCI_OP_READ_DATA_BLOCK_SIZE, rp->status);
904 }
905
906 static void hci_cc_write_ca_timeout(struct hci_dev *hdev, struct sk_buff *skb)
907 {
908         __u8 status = *((__u8 *) skb->data);
909
910         BT_DBG("%s status 0x%2.2x", hdev->name, status);
911
912         hci_req_complete(hdev, HCI_OP_WRITE_CA_TIMEOUT, status);
913 }
914
915 static void hci_cc_read_local_amp_info(struct hci_dev *hdev,
916                                        struct sk_buff *skb)
917 {
918         struct hci_rp_read_local_amp_info *rp = (void *) skb->data;
919
920         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
921
922         if (rp->status)
923                 goto a2mp_rsp;
924
925         hdev->amp_status = rp->amp_status;
926         hdev->amp_total_bw = __le32_to_cpu(rp->total_bw);
927         hdev->amp_max_bw = __le32_to_cpu(rp->max_bw);
928         hdev->amp_min_latency = __le32_to_cpu(rp->min_latency);
929         hdev->amp_max_pdu = __le32_to_cpu(rp->max_pdu);
930         hdev->amp_type = rp->amp_type;
931         hdev->amp_pal_cap = __le16_to_cpu(rp->pal_cap);
932         hdev->amp_assoc_size = __le16_to_cpu(rp->max_assoc_size);
933         hdev->amp_be_flush_to = __le32_to_cpu(rp->be_flush_to);
934         hdev->amp_max_flush_to = __le32_to_cpu(rp->max_flush_to);
935
936         hci_req_complete(hdev, HCI_OP_READ_LOCAL_AMP_INFO, rp->status);
937
938 a2mp_rsp:
939         a2mp_send_getinfo_rsp(hdev);
940 }
941
942 static void hci_cc_read_local_amp_assoc(struct hci_dev *hdev,
943                                         struct sk_buff *skb)
944 {
945         struct hci_rp_read_local_amp_assoc *rp = (void *) skb->data;
946         struct amp_assoc *assoc = &hdev->loc_assoc;
947         size_t rem_len, frag_len;
948
949         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
950
951         if (rp->status)
952                 goto a2mp_rsp;
953
954         frag_len = skb->len - sizeof(*rp);
955         rem_len = __le16_to_cpu(rp->rem_len);
956
957         if (rem_len > frag_len) {
958                 BT_DBG("frag_len %zu rem_len %zu", frag_len, rem_len);
959
960                 memcpy(assoc->data + assoc->offset, rp->frag, frag_len);
961                 assoc->offset += frag_len;
962
963                 /* Read other fragments */
964                 amp_read_loc_assoc_frag(hdev, rp->phy_handle);
965
966                 return;
967         }
968
969         memcpy(assoc->data + assoc->offset, rp->frag, rem_len);
970         assoc->len = assoc->offset + rem_len;
971         assoc->offset = 0;
972
973 a2mp_rsp:
974         /* Send A2MP Rsp when all fragments are received */
975         a2mp_send_getampassoc_rsp(hdev, rp->status);
976         a2mp_send_create_phy_link_req(hdev, rp->status);
977 }
978
979 static void hci_cc_delete_stored_link_key(struct hci_dev *hdev,
980                                           struct sk_buff *skb)
981 {
982         __u8 status = *((__u8 *) skb->data);
983
984         BT_DBG("%s status 0x%2.2x", hdev->name, status);
985
986         hci_req_complete(hdev, HCI_OP_DELETE_STORED_LINK_KEY, status);
987 }
988
989 static void hci_cc_set_event_mask(struct hci_dev *hdev, struct sk_buff *skb)
990 {
991         __u8 status = *((__u8 *) skb->data);
992
993         BT_DBG("%s status 0x%2.2x", hdev->name, status);
994
995         hci_req_complete(hdev, HCI_OP_SET_EVENT_MASK, status);
996 }
997
998 static void hci_cc_write_inquiry_mode(struct hci_dev *hdev,
999                                       struct sk_buff *skb)
1000 {
1001         __u8 status = *((__u8 *) skb->data);
1002
1003         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1004
1005         hci_req_complete(hdev, HCI_OP_WRITE_INQUIRY_MODE, status);
1006 }
1007
1008 static void hci_cc_read_inq_rsp_tx_power(struct hci_dev *hdev,
1009                                          struct sk_buff *skb)
1010 {
1011         struct hci_rp_read_inq_rsp_tx_power *rp = (void *) skb->data;
1012
1013         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1014
1015         if (!rp->status)
1016                 hdev->inq_tx_power = rp->tx_power;
1017
1018         hci_req_complete(hdev, HCI_OP_READ_INQ_RSP_TX_POWER, rp->status);
1019 }
1020
1021 static void hci_cc_set_event_flt(struct hci_dev *hdev, struct sk_buff *skb)
1022 {
1023         __u8 status = *((__u8 *) skb->data);
1024
1025         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1026
1027         hci_req_complete(hdev, HCI_OP_SET_EVENT_FLT, status);
1028 }
1029
1030 static void hci_cc_pin_code_reply(struct hci_dev *hdev, struct sk_buff *skb)
1031 {
1032         struct hci_rp_pin_code_reply *rp = (void *) skb->data;
1033         struct hci_cp_pin_code_reply *cp;
1034         struct hci_conn *conn;
1035
1036         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1037
1038         hci_dev_lock(hdev);
1039
1040         if (test_bit(HCI_MGMT, &hdev->dev_flags))
1041                 mgmt_pin_code_reply_complete(hdev, &rp->bdaddr, rp->status);
1042
1043         if (rp->status)
1044                 goto unlock;
1045
1046         cp = hci_sent_cmd_data(hdev, HCI_OP_PIN_CODE_REPLY);
1047         if (!cp)
1048                 goto unlock;
1049
1050         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
1051         if (conn)
1052                 conn->pin_length = cp->pin_len;
1053
1054 unlock:
1055         hci_dev_unlock(hdev);
1056 }
1057
1058 static void hci_cc_pin_code_neg_reply(struct hci_dev *hdev, struct sk_buff *skb)
1059 {
1060         struct hci_rp_pin_code_neg_reply *rp = (void *) skb->data;
1061
1062         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1063
1064         hci_dev_lock(hdev);
1065
1066         if (test_bit(HCI_MGMT, &hdev->dev_flags))
1067                 mgmt_pin_code_neg_reply_complete(hdev, &rp->bdaddr,
1068                                                  rp->status);
1069
1070         hci_dev_unlock(hdev);
1071 }
1072
1073 static void hci_cc_le_read_buffer_size(struct hci_dev *hdev,
1074                                        struct sk_buff *skb)
1075 {
1076         struct hci_rp_le_read_buffer_size *rp = (void *) skb->data;
1077
1078         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1079
1080         if (rp->status)
1081                 return;
1082
1083         hdev->le_mtu = __le16_to_cpu(rp->le_mtu);
1084         hdev->le_pkts = rp->le_max_pkt;
1085
1086         hdev->le_cnt = hdev->le_pkts;
1087
1088         BT_DBG("%s le mtu %d:%d", hdev->name, hdev->le_mtu, hdev->le_pkts);
1089
1090         hci_req_complete(hdev, HCI_OP_LE_READ_BUFFER_SIZE, rp->status);
1091 }
1092
1093 static void hci_cc_le_read_adv_tx_power(struct hci_dev *hdev,
1094                                         struct sk_buff *skb)
1095 {
1096         struct hci_rp_le_read_adv_tx_power *rp = (void *) skb->data;
1097
1098         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1099
1100         if (!rp->status) {
1101                 hdev->adv_tx_power = rp->tx_power;
1102                 if (!test_bit(HCI_INIT, &hdev->flags))
1103                         hci_update_ad(hdev);
1104         }
1105
1106         hci_req_complete(hdev, HCI_OP_LE_READ_ADV_TX_POWER, rp->status);
1107 }
1108
1109 static void hci_cc_le_set_event_mask(struct hci_dev *hdev, struct sk_buff *skb)
1110 {
1111         __u8 status = *((__u8 *) skb->data);
1112
1113         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1114
1115         hci_req_complete(hdev, HCI_OP_LE_SET_EVENT_MASK, status);
1116 }
1117
1118 static void hci_cc_user_confirm_reply(struct hci_dev *hdev, struct sk_buff *skb)
1119 {
1120         struct hci_rp_user_confirm_reply *rp = (void *) skb->data;
1121
1122         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1123
1124         hci_dev_lock(hdev);
1125
1126         if (test_bit(HCI_MGMT, &hdev->dev_flags))
1127                 mgmt_user_confirm_reply_complete(hdev, &rp->bdaddr, ACL_LINK, 0,
1128                                                  rp->status);
1129
1130         hci_dev_unlock(hdev);
1131 }
1132
1133 static void hci_cc_user_confirm_neg_reply(struct hci_dev *hdev,
1134                                           struct sk_buff *skb)
1135 {
1136         struct hci_rp_user_confirm_reply *rp = (void *) skb->data;
1137
1138         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1139
1140         hci_dev_lock(hdev);
1141
1142         if (test_bit(HCI_MGMT, &hdev->dev_flags))
1143                 mgmt_user_confirm_neg_reply_complete(hdev, &rp->bdaddr,
1144                                                      ACL_LINK, 0, rp->status);
1145
1146         hci_dev_unlock(hdev);
1147 }
1148
1149 static void hci_cc_user_passkey_reply(struct hci_dev *hdev, struct sk_buff *skb)
1150 {
1151         struct hci_rp_user_confirm_reply *rp = (void *) skb->data;
1152
1153         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1154
1155         hci_dev_lock(hdev);
1156
1157         if (test_bit(HCI_MGMT, &hdev->dev_flags))
1158                 mgmt_user_passkey_reply_complete(hdev, &rp->bdaddr, ACL_LINK,
1159                                                  0, rp->status);
1160
1161         hci_dev_unlock(hdev);
1162 }
1163
1164 static void hci_cc_user_passkey_neg_reply(struct hci_dev *hdev,
1165                                           struct sk_buff *skb)
1166 {
1167         struct hci_rp_user_confirm_reply *rp = (void *) skb->data;
1168
1169         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1170
1171         hci_dev_lock(hdev);
1172
1173         if (test_bit(HCI_MGMT, &hdev->dev_flags))
1174                 mgmt_user_passkey_neg_reply_complete(hdev, &rp->bdaddr,
1175                                                      ACL_LINK, 0, rp->status);
1176
1177         hci_dev_unlock(hdev);
1178 }
1179
1180 static void hci_cc_read_local_oob_data_reply(struct hci_dev *hdev,
1181                                              struct sk_buff *skb)
1182 {
1183         struct hci_rp_read_local_oob_data *rp = (void *) skb->data;
1184
1185         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1186
1187         hci_dev_lock(hdev);
1188         mgmt_read_local_oob_data_reply_complete(hdev, rp->hash,
1189                                                 rp->randomizer, rp->status);
1190         hci_dev_unlock(hdev);
1191 }
1192
1193 static void hci_cc_le_set_adv_enable(struct hci_dev *hdev, struct sk_buff *skb)
1194 {
1195         __u8 *sent, status = *((__u8 *) skb->data);
1196
1197         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1198
1199         sent = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_ADV_ENABLE);
1200         if (!sent)
1201                 return;
1202
1203         hci_dev_lock(hdev);
1204
1205         if (!status) {
1206                 if (*sent)
1207                         set_bit(HCI_LE_PERIPHERAL, &hdev->dev_flags);
1208                 else
1209                         clear_bit(HCI_LE_PERIPHERAL, &hdev->dev_flags);
1210         }
1211
1212         hci_dev_unlock(hdev);
1213
1214         if (!test_bit(HCI_INIT, &hdev->flags))
1215                 hci_update_ad(hdev);
1216
1217         hci_req_complete(hdev, HCI_OP_LE_SET_ADV_ENABLE, status);
1218 }
1219
1220 static void hci_cc_le_set_scan_param(struct hci_dev *hdev, struct sk_buff *skb)
1221 {
1222         __u8 status = *((__u8 *) skb->data);
1223
1224         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1225
1226         hci_req_complete(hdev, HCI_OP_LE_SET_SCAN_PARAM, status);
1227
1228         if (status) {
1229                 hci_dev_lock(hdev);
1230                 mgmt_start_discovery_failed(hdev, status);
1231                 hci_dev_unlock(hdev);
1232                 return;
1233         }
1234 }
1235
1236 static void hci_cc_le_set_scan_enable(struct hci_dev *hdev,
1237                                       struct sk_buff *skb)
1238 {
1239         struct hci_cp_le_set_scan_enable *cp;
1240         __u8 status = *((__u8 *) skb->data);
1241
1242         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1243
1244         cp = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_SCAN_ENABLE);
1245         if (!cp)
1246                 return;
1247
1248         switch (cp->enable) {
1249         case LE_SCANNING_ENABLED:
1250                 hci_req_complete(hdev, HCI_OP_LE_SET_SCAN_ENABLE, status);
1251
1252                 if (status) {
1253                         hci_dev_lock(hdev);
1254                         mgmt_start_discovery_failed(hdev, status);
1255                         hci_dev_unlock(hdev);
1256                         return;
1257                 }
1258
1259                 set_bit(HCI_LE_SCAN, &hdev->dev_flags);
1260
1261                 hci_dev_lock(hdev);
1262                 hci_discovery_set_state(hdev, DISCOVERY_FINDING);
1263                 hci_dev_unlock(hdev);
1264                 break;
1265
1266         case LE_SCANNING_DISABLED:
1267                 if (status) {
1268                         hci_dev_lock(hdev);
1269                         mgmt_stop_discovery_failed(hdev, status);
1270                         hci_dev_unlock(hdev);
1271                         return;
1272                 }
1273
1274                 clear_bit(HCI_LE_SCAN, &hdev->dev_flags);
1275
1276                 if (hdev->discovery.type == DISCOV_TYPE_INTERLEAVED &&
1277                     hdev->discovery.state == DISCOVERY_FINDING) {
1278                         mgmt_interleaved_discovery(hdev);
1279                 } else {
1280                         hci_dev_lock(hdev);
1281                         hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
1282                         hci_dev_unlock(hdev);
1283                 }
1284
1285                 break;
1286
1287         default:
1288                 BT_ERR("Used reserved LE_Scan_Enable param %d", cp->enable);
1289                 break;
1290         }
1291 }
1292
1293 static void hci_cc_le_ltk_reply(struct hci_dev *hdev, struct sk_buff *skb)
1294 {
1295         struct hci_rp_le_ltk_reply *rp = (void *) skb->data;
1296
1297         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1298
1299         if (rp->status)
1300                 return;
1301
1302         hci_req_complete(hdev, HCI_OP_LE_LTK_REPLY, rp->status);
1303 }
1304
1305 static void hci_cc_le_ltk_neg_reply(struct hci_dev *hdev, struct sk_buff *skb)
1306 {
1307         struct hci_rp_le_ltk_neg_reply *rp = (void *) skb->data;
1308
1309         BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1310
1311         if (rp->status)
1312                 return;
1313
1314         hci_req_complete(hdev, HCI_OP_LE_LTK_NEG_REPLY, rp->status);
1315 }
1316
1317 static void hci_cc_write_le_host_supported(struct hci_dev *hdev,
1318                                            struct sk_buff *skb)
1319 {
1320         struct hci_cp_write_le_host_supported *sent;
1321         __u8 status = *((__u8 *) skb->data);
1322
1323         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1324
1325         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_LE_HOST_SUPPORTED);
1326         if (!sent)
1327                 return;
1328
1329         if (!status) {
1330                 if (sent->le)
1331                         hdev->host_features[0] |= LMP_HOST_LE;
1332                 else
1333                         hdev->host_features[0] &= ~LMP_HOST_LE;
1334
1335                 if (sent->simul)
1336                         hdev->host_features[0] |= LMP_HOST_LE_BREDR;
1337                 else
1338                         hdev->host_features[0] &= ~LMP_HOST_LE_BREDR;
1339         }
1340
1341         if (test_bit(HCI_MGMT, &hdev->dev_flags) &&
1342             !test_bit(HCI_INIT, &hdev->flags))
1343                 mgmt_le_enable_complete(hdev, sent->le, status);
1344
1345         hci_req_complete(hdev, HCI_OP_WRITE_LE_HOST_SUPPORTED, status);
1346 }
1347
1348 static void hci_cc_write_remote_amp_assoc(struct hci_dev *hdev,
1349                                           struct sk_buff *skb)
1350 {
1351         struct hci_rp_write_remote_amp_assoc *rp = (void *) skb->data;
1352
1353         BT_DBG("%s status 0x%2.2x phy_handle 0x%2.2x",
1354                hdev->name, rp->status, rp->phy_handle);
1355
1356         if (rp->status)
1357                 return;
1358
1359         amp_write_rem_assoc_continue(hdev, rp->phy_handle);
1360 }
1361
1362 static void hci_cs_inquiry(struct hci_dev *hdev, __u8 status)
1363 {
1364         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1365
1366         if (status) {
1367                 hci_req_complete(hdev, HCI_OP_INQUIRY, status);
1368                 hci_conn_check_pending(hdev);
1369                 hci_dev_lock(hdev);
1370                 if (test_bit(HCI_MGMT, &hdev->dev_flags))
1371                         mgmt_start_discovery_failed(hdev, status);
1372                 hci_dev_unlock(hdev);
1373                 return;
1374         }
1375
1376         set_bit(HCI_INQUIRY, &hdev->flags);
1377
1378         hci_dev_lock(hdev);
1379         hci_discovery_set_state(hdev, DISCOVERY_FINDING);
1380         hci_dev_unlock(hdev);
1381 }
1382
1383 static void hci_cs_create_conn(struct hci_dev *hdev, __u8 status)
1384 {
1385         struct hci_cp_create_conn *cp;
1386         struct hci_conn *conn;
1387
1388         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1389
1390         cp = hci_sent_cmd_data(hdev, HCI_OP_CREATE_CONN);
1391         if (!cp)
1392                 return;
1393
1394         hci_dev_lock(hdev);
1395
1396         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
1397
1398         BT_DBG("%s bdaddr %pMR hcon %p", hdev->name, &cp->bdaddr, conn);
1399
1400         if (status) {
1401                 if (conn && conn->state == BT_CONNECT) {
1402                         if (status != 0x0c || conn->attempt > 2) {
1403                                 conn->state = BT_CLOSED;
1404                                 hci_proto_connect_cfm(conn, status);
1405                                 hci_conn_del(conn);
1406                         } else
1407                                 conn->state = BT_CONNECT2;
1408                 }
1409         } else {
1410                 if (!conn) {
1411                         conn = hci_conn_add(hdev, ACL_LINK, &cp->bdaddr);
1412                         if (conn) {
1413                                 conn->out = true;
1414                                 conn->link_mode |= HCI_LM_MASTER;
1415                         } else
1416                                 BT_ERR("No memory for new connection");
1417                 }
1418         }
1419
1420         hci_dev_unlock(hdev);
1421 }
1422
1423 static void hci_cs_add_sco(struct hci_dev *hdev, __u8 status)
1424 {
1425         struct hci_cp_add_sco *cp;
1426         struct hci_conn *acl, *sco;
1427         __u16 handle;
1428
1429         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1430
1431         if (!status)
1432                 return;
1433
1434         cp = hci_sent_cmd_data(hdev, HCI_OP_ADD_SCO);
1435         if (!cp)
1436                 return;
1437
1438         handle = __le16_to_cpu(cp->handle);
1439
1440         BT_DBG("%s handle 0x%4.4x", hdev->name, handle);
1441
1442         hci_dev_lock(hdev);
1443
1444         acl = hci_conn_hash_lookup_handle(hdev, handle);
1445         if (acl) {
1446                 sco = acl->link;
1447                 if (sco) {
1448                         sco->state = BT_CLOSED;
1449
1450                         hci_proto_connect_cfm(sco, status);
1451                         hci_conn_del(sco);
1452                 }
1453         }
1454
1455         hci_dev_unlock(hdev);
1456 }
1457
1458 static void hci_cs_auth_requested(struct hci_dev *hdev, __u8 status)
1459 {
1460         struct hci_cp_auth_requested *cp;
1461         struct hci_conn *conn;
1462
1463         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1464
1465         if (!status)
1466                 return;
1467
1468         cp = hci_sent_cmd_data(hdev, HCI_OP_AUTH_REQUESTED);
1469         if (!cp)
1470                 return;
1471
1472         hci_dev_lock(hdev);
1473
1474         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1475         if (conn) {
1476                 if (conn->state == BT_CONFIG) {
1477                         hci_proto_connect_cfm(conn, status);
1478                         hci_conn_put(conn);
1479                 }
1480         }
1481
1482         hci_dev_unlock(hdev);
1483 }
1484
1485 static void hci_cs_set_conn_encrypt(struct hci_dev *hdev, __u8 status)
1486 {
1487         struct hci_cp_set_conn_encrypt *cp;
1488         struct hci_conn *conn;
1489
1490         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1491
1492         if (!status)
1493                 return;
1494
1495         cp = hci_sent_cmd_data(hdev, HCI_OP_SET_CONN_ENCRYPT);
1496         if (!cp)
1497                 return;
1498
1499         hci_dev_lock(hdev);
1500
1501         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1502         if (conn) {
1503                 if (conn->state == BT_CONFIG) {
1504                         hci_proto_connect_cfm(conn, status);
1505                         hci_conn_put(conn);
1506                 }
1507         }
1508
1509         hci_dev_unlock(hdev);
1510 }
1511
1512 static int hci_outgoing_auth_needed(struct hci_dev *hdev,
1513                                     struct hci_conn *conn)
1514 {
1515         if (conn->state != BT_CONFIG || !conn->out)
1516                 return 0;
1517
1518         if (conn->pending_sec_level == BT_SECURITY_SDP)
1519                 return 0;
1520
1521         /* Only request authentication for SSP connections or non-SSP
1522          * devices with sec_level HIGH or if MITM protection is requested */
1523         if (!hci_conn_ssp_enabled(conn) && !(conn->auth_type & 0x01) &&
1524             conn->pending_sec_level != BT_SECURITY_HIGH)
1525                 return 0;
1526
1527         return 1;
1528 }
1529
1530 static int hci_resolve_name(struct hci_dev *hdev,
1531                                    struct inquiry_entry *e)
1532 {
1533         struct hci_cp_remote_name_req cp;
1534
1535         memset(&cp, 0, sizeof(cp));
1536
1537         bacpy(&cp.bdaddr, &e->data.bdaddr);
1538         cp.pscan_rep_mode = e->data.pscan_rep_mode;
1539         cp.pscan_mode = e->data.pscan_mode;
1540         cp.clock_offset = e->data.clock_offset;
1541
1542         return hci_send_cmd(hdev, HCI_OP_REMOTE_NAME_REQ, sizeof(cp), &cp);
1543 }
1544
1545 static bool hci_resolve_next_name(struct hci_dev *hdev)
1546 {
1547         struct discovery_state *discov = &hdev->discovery;
1548         struct inquiry_entry *e;
1549
1550         if (list_empty(&discov->resolve))
1551                 return false;
1552
1553         e = hci_inquiry_cache_lookup_resolve(hdev, BDADDR_ANY, NAME_NEEDED);
1554         if (!e)
1555                 return false;
1556
1557         if (hci_resolve_name(hdev, e) == 0) {
1558                 e->name_state = NAME_PENDING;
1559                 return true;
1560         }
1561
1562         return false;
1563 }
1564
1565 static void hci_check_pending_name(struct hci_dev *hdev, struct hci_conn *conn,
1566                                    bdaddr_t *bdaddr, u8 *name, u8 name_len)
1567 {
1568         struct discovery_state *discov = &hdev->discovery;
1569         struct inquiry_entry *e;
1570
1571         if (conn && !test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags))
1572                 mgmt_device_connected(hdev, bdaddr, ACL_LINK, 0x00, 0, name,
1573                                       name_len, conn->dev_class);
1574
1575         if (discov->state == DISCOVERY_STOPPED)
1576                 return;
1577
1578         if (discov->state == DISCOVERY_STOPPING)
1579                 goto discov_complete;
1580
1581         if (discov->state != DISCOVERY_RESOLVING)
1582                 return;
1583
1584         e = hci_inquiry_cache_lookup_resolve(hdev, bdaddr, NAME_PENDING);
1585         /* If the device was not found in a list of found devices names of which
1586          * are pending. there is no need to continue resolving a next name as it
1587          * will be done upon receiving another Remote Name Request Complete
1588          * Event */
1589         if (!e)
1590                 return;
1591
1592         list_del(&e->list);
1593         if (name) {
1594                 e->name_state = NAME_KNOWN;
1595                 mgmt_remote_name(hdev, bdaddr, ACL_LINK, 0x00,
1596                                  e->data.rssi, name, name_len);
1597         } else {
1598                 e->name_state = NAME_NOT_KNOWN;
1599         }
1600
1601         if (hci_resolve_next_name(hdev))
1602                 return;
1603
1604 discov_complete:
1605         hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
1606 }
1607
1608 static void hci_cs_remote_name_req(struct hci_dev *hdev, __u8 status)
1609 {
1610         struct hci_cp_remote_name_req *cp;
1611         struct hci_conn *conn;
1612
1613         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1614
1615         /* If successful wait for the name req complete event before
1616          * checking for the need to do authentication */
1617         if (!status)
1618                 return;
1619
1620         cp = hci_sent_cmd_data(hdev, HCI_OP_REMOTE_NAME_REQ);
1621         if (!cp)
1622                 return;
1623
1624         hci_dev_lock(hdev);
1625
1626         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
1627
1628         if (test_bit(HCI_MGMT, &hdev->dev_flags))
1629                 hci_check_pending_name(hdev, conn, &cp->bdaddr, NULL, 0);
1630
1631         if (!conn)
1632                 goto unlock;
1633
1634         if (!hci_outgoing_auth_needed(hdev, conn))
1635                 goto unlock;
1636
1637         if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
1638                 struct hci_cp_auth_requested cp;
1639                 cp.handle = __cpu_to_le16(conn->handle);
1640                 hci_send_cmd(hdev, HCI_OP_AUTH_REQUESTED, sizeof(cp), &cp);
1641         }
1642
1643 unlock:
1644         hci_dev_unlock(hdev);
1645 }
1646
1647 static void hci_cs_read_remote_features(struct hci_dev *hdev, __u8 status)
1648 {
1649         struct hci_cp_read_remote_features *cp;
1650         struct hci_conn *conn;
1651
1652         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1653
1654         if (!status)
1655                 return;
1656
1657         cp = hci_sent_cmd_data(hdev, HCI_OP_READ_REMOTE_FEATURES);
1658         if (!cp)
1659                 return;
1660
1661         hci_dev_lock(hdev);
1662
1663         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1664         if (conn) {
1665                 if (conn->state == BT_CONFIG) {
1666                         hci_proto_connect_cfm(conn, status);
1667                         hci_conn_put(conn);
1668                 }
1669         }
1670
1671         hci_dev_unlock(hdev);
1672 }
1673
1674 static void hci_cs_read_remote_ext_features(struct hci_dev *hdev, __u8 status)
1675 {
1676         struct hci_cp_read_remote_ext_features *cp;
1677         struct hci_conn *conn;
1678
1679         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1680
1681         if (!status)
1682                 return;
1683
1684         cp = hci_sent_cmd_data(hdev, HCI_OP_READ_REMOTE_EXT_FEATURES);
1685         if (!cp)
1686                 return;
1687
1688         hci_dev_lock(hdev);
1689
1690         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1691         if (conn) {
1692                 if (conn->state == BT_CONFIG) {
1693                         hci_proto_connect_cfm(conn, status);
1694                         hci_conn_put(conn);
1695                 }
1696         }
1697
1698         hci_dev_unlock(hdev);
1699 }
1700
1701 static void hci_cs_setup_sync_conn(struct hci_dev *hdev, __u8 status)
1702 {
1703         struct hci_cp_setup_sync_conn *cp;
1704         struct hci_conn *acl, *sco;
1705         __u16 handle;
1706
1707         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1708
1709         if (!status)
1710                 return;
1711
1712         cp = hci_sent_cmd_data(hdev, HCI_OP_SETUP_SYNC_CONN);
1713         if (!cp)
1714                 return;
1715
1716         handle = __le16_to_cpu(cp->handle);
1717
1718         BT_DBG("%s handle 0x%4.4x", hdev->name, handle);
1719
1720         hci_dev_lock(hdev);
1721
1722         acl = hci_conn_hash_lookup_handle(hdev, handle);
1723         if (acl) {
1724                 sco = acl->link;
1725                 if (sco) {
1726                         sco->state = BT_CLOSED;
1727
1728                         hci_proto_connect_cfm(sco, status);
1729                         hci_conn_del(sco);
1730                 }
1731         }
1732
1733         hci_dev_unlock(hdev);
1734 }
1735
1736 static void hci_cs_sniff_mode(struct hci_dev *hdev, __u8 status)
1737 {
1738         struct hci_cp_sniff_mode *cp;
1739         struct hci_conn *conn;
1740
1741         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1742
1743         if (!status)
1744                 return;
1745
1746         cp = hci_sent_cmd_data(hdev, HCI_OP_SNIFF_MODE);
1747         if (!cp)
1748                 return;
1749
1750         hci_dev_lock(hdev);
1751
1752         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1753         if (conn) {
1754                 clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags);
1755
1756                 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->flags))
1757                         hci_sco_setup(conn, status);
1758         }
1759
1760         hci_dev_unlock(hdev);
1761 }
1762
1763 static void hci_cs_exit_sniff_mode(struct hci_dev *hdev, __u8 status)
1764 {
1765         struct hci_cp_exit_sniff_mode *cp;
1766         struct hci_conn *conn;
1767
1768         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1769
1770         if (!status)
1771                 return;
1772
1773         cp = hci_sent_cmd_data(hdev, HCI_OP_EXIT_SNIFF_MODE);
1774         if (!cp)
1775                 return;
1776
1777         hci_dev_lock(hdev);
1778
1779         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1780         if (conn) {
1781                 clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags);
1782
1783                 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->flags))
1784                         hci_sco_setup(conn, status);
1785         }
1786
1787         hci_dev_unlock(hdev);
1788 }
1789
1790 static void hci_cs_disconnect(struct hci_dev *hdev, u8 status)
1791 {
1792         struct hci_cp_disconnect *cp;
1793         struct hci_conn *conn;
1794
1795         if (!status)
1796                 return;
1797
1798         cp = hci_sent_cmd_data(hdev, HCI_OP_DISCONNECT);
1799         if (!cp)
1800                 return;
1801
1802         hci_dev_lock(hdev);
1803
1804         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1805         if (conn)
1806                 mgmt_disconnect_failed(hdev, &conn->dst, conn->type,
1807                                        conn->dst_type, status);
1808
1809         hci_dev_unlock(hdev);
1810 }
1811
1812 static void hci_cs_le_create_conn(struct hci_dev *hdev, __u8 status)
1813 {
1814         struct hci_conn *conn;
1815
1816         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1817
1818         if (status) {
1819                 hci_dev_lock(hdev);
1820
1821                 conn = hci_conn_hash_lookup_state(hdev, LE_LINK, BT_CONNECT);
1822                 if (!conn) {
1823                         hci_dev_unlock(hdev);
1824                         return;
1825                 }
1826
1827                 BT_DBG("%s bdaddr %pMR conn %p", hdev->name, &conn->dst, conn);
1828
1829                 conn->state = BT_CLOSED;
1830                 mgmt_connect_failed(hdev, &conn->dst, conn->type,
1831                                     conn->dst_type, status);
1832                 hci_proto_connect_cfm(conn, status);
1833                 hci_conn_del(conn);
1834
1835                 hci_dev_unlock(hdev);
1836         }
1837 }
1838
1839 static void hci_cs_le_start_enc(struct hci_dev *hdev, u8 status)
1840 {
1841         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1842 }
1843
1844 static void hci_cs_create_phylink(struct hci_dev *hdev, u8 status)
1845 {
1846         struct hci_cp_create_phy_link *cp;
1847
1848         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1849
1850         cp = hci_sent_cmd_data(hdev, HCI_OP_CREATE_PHY_LINK);
1851         if (!cp)
1852                 return;
1853
1854         hci_dev_lock(hdev);
1855
1856         if (status) {
1857                 struct hci_conn *hcon;
1858
1859                 hcon = hci_conn_hash_lookup_handle(hdev, cp->phy_handle);
1860                 if (hcon)
1861                         hci_conn_del(hcon);
1862         } else {
1863                 amp_write_remote_assoc(hdev, cp->phy_handle);
1864         }
1865
1866         hci_dev_unlock(hdev);
1867 }
1868
1869 static void hci_cs_accept_phylink(struct hci_dev *hdev, u8 status)
1870 {
1871         struct hci_cp_accept_phy_link *cp;
1872
1873         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1874
1875         if (status)
1876                 return;
1877
1878         cp = hci_sent_cmd_data(hdev, HCI_OP_ACCEPT_PHY_LINK);
1879         if (!cp)
1880                 return;
1881
1882         amp_write_remote_assoc(hdev, cp->phy_handle);
1883 }
1884
1885 static void hci_cs_create_logical_link(struct hci_dev *hdev, u8 status)
1886 {
1887         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1888 }
1889
1890 static void hci_inquiry_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1891 {
1892         __u8 status = *((__u8 *) skb->data);
1893         struct discovery_state *discov = &hdev->discovery;
1894         struct inquiry_entry *e;
1895
1896         BT_DBG("%s status 0x%2.2x", hdev->name, status);
1897
1898         hci_req_complete(hdev, HCI_OP_INQUIRY, status);
1899
1900         hci_conn_check_pending(hdev);
1901
1902         if (!test_and_clear_bit(HCI_INQUIRY, &hdev->flags))
1903                 return;
1904
1905         if (!test_bit(HCI_MGMT, &hdev->dev_flags))
1906                 return;
1907
1908         hci_dev_lock(hdev);
1909
1910         if (discov->state != DISCOVERY_FINDING)
1911                 goto unlock;
1912
1913         if (list_empty(&discov->resolve)) {
1914                 hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
1915                 goto unlock;
1916         }
1917
1918         e = hci_inquiry_cache_lookup_resolve(hdev, BDADDR_ANY, NAME_NEEDED);
1919         if (e && hci_resolve_name(hdev, e) == 0) {
1920                 e->name_state = NAME_PENDING;
1921                 hci_discovery_set_state(hdev, DISCOVERY_RESOLVING);
1922         } else {
1923                 hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
1924         }
1925
1926 unlock:
1927         hci_dev_unlock(hdev);
1928 }
1929
1930 static void hci_inquiry_result_evt(struct hci_dev *hdev, struct sk_buff *skb)
1931 {
1932         struct inquiry_data data;
1933         struct inquiry_info *info = (void *) (skb->data + 1);
1934         int num_rsp = *((__u8 *) skb->data);
1935
1936         BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
1937
1938         if (!num_rsp)
1939                 return;
1940
1941         if (test_bit(HCI_PERIODIC_INQ, &hdev->dev_flags))
1942                 return;
1943
1944         hci_dev_lock(hdev);
1945
1946         for (; num_rsp; num_rsp--, info++) {
1947                 bool name_known, ssp;
1948
1949                 bacpy(&data.bdaddr, &info->bdaddr);
1950                 data.pscan_rep_mode     = info->pscan_rep_mode;
1951                 data.pscan_period_mode  = info->pscan_period_mode;
1952                 data.pscan_mode         = info->pscan_mode;
1953                 memcpy(data.dev_class, info->dev_class, 3);
1954                 data.clock_offset       = info->clock_offset;
1955                 data.rssi               = 0x00;
1956                 data.ssp_mode           = 0x00;
1957
1958                 name_known = hci_inquiry_cache_update(hdev, &data, false, &ssp);
1959                 mgmt_device_found(hdev, &info->bdaddr, ACL_LINK, 0x00,
1960                                   info->dev_class, 0, !name_known, ssp, NULL,
1961                                   0);
1962         }
1963
1964         hci_dev_unlock(hdev);
1965 }
1966
1967 static void hci_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1968 {
1969         struct hci_ev_conn_complete *ev = (void *) skb->data;
1970         struct hci_conn *conn;
1971
1972         BT_DBG("%s", hdev->name);
1973
1974         hci_dev_lock(hdev);
1975
1976         conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
1977         if (!conn) {
1978                 if (ev->link_type != SCO_LINK)
1979                         goto unlock;
1980
1981                 conn = hci_conn_hash_lookup_ba(hdev, ESCO_LINK, &ev->bdaddr);
1982                 if (!conn)
1983                         goto unlock;
1984
1985                 conn->type = SCO_LINK;
1986         }
1987
1988         if (!ev->status) {
1989                 conn->handle = __le16_to_cpu(ev->handle);
1990
1991                 if (conn->type == ACL_LINK) {
1992                         conn->state = BT_CONFIG;
1993                         hci_conn_hold(conn);
1994
1995                         if (!conn->out && !hci_conn_ssp_enabled(conn) &&
1996                             !hci_find_link_key(hdev, &ev->bdaddr))
1997                                 conn->disc_timeout = HCI_PAIRING_TIMEOUT;
1998                         else
1999                                 conn->disc_timeout = HCI_DISCONN_TIMEOUT;
2000                 } else
2001                         conn->state = BT_CONNECTED;
2002
2003                 hci_conn_hold_device(conn);
2004                 hci_conn_add_sysfs(conn);
2005
2006                 if (test_bit(HCI_AUTH, &hdev->flags))
2007                         conn->link_mode |= HCI_LM_AUTH;
2008
2009                 if (test_bit(HCI_ENCRYPT, &hdev->flags))
2010                         conn->link_mode |= HCI_LM_ENCRYPT;
2011
2012                 /* Get remote features */
2013                 if (conn->type == ACL_LINK) {
2014                         struct hci_cp_read_remote_features cp;
2015                         cp.handle = ev->handle;
2016                         hci_send_cmd(hdev, HCI_OP_READ_REMOTE_FEATURES,
2017                                      sizeof(cp), &cp);
2018                 }
2019
2020                 /* Set packet type for incoming connection */
2021                 if (!conn->out && hdev->hci_ver < BLUETOOTH_VER_2_0) {
2022                         struct hci_cp_change_conn_ptype cp;
2023                         cp.handle = ev->handle;
2024                         cp.pkt_type = cpu_to_le16(conn->pkt_type);
2025                         hci_send_cmd(hdev, HCI_OP_CHANGE_CONN_PTYPE, sizeof(cp),
2026                                      &cp);
2027                 }
2028         } else {
2029                 conn->state = BT_CLOSED;
2030                 if (conn->type == ACL_LINK)
2031                         mgmt_connect_failed(hdev, &ev->bdaddr, conn->type,
2032                                             conn->dst_type, ev->status);
2033         }
2034
2035         if (conn->type == ACL_LINK)
2036                 hci_sco_setup(conn, ev->status);
2037
2038         if (ev->status) {
2039                 hci_proto_connect_cfm(conn, ev->status);
2040                 hci_conn_del(conn);
2041         } else if (ev->link_type != ACL_LINK)
2042                 hci_proto_connect_cfm(conn, ev->status);
2043
2044 unlock:
2045         hci_dev_unlock(hdev);
2046
2047         hci_conn_check_pending(hdev);
2048 }
2049
2050 void hci_conn_accept(struct hci_conn *conn, int mask)
2051 {
2052         struct hci_dev *hdev = conn->hdev;
2053
2054         BT_DBG("conn %p", conn);
2055
2056         conn->state = BT_CONFIG;
2057
2058         if (!lmp_esco_capable(hdev)) {
2059                 struct hci_cp_accept_conn_req cp;
2060
2061                 bacpy(&cp.bdaddr, &conn->dst);
2062
2063                 if (lmp_rswitch_capable(hdev) && (mask & HCI_LM_MASTER))
2064                         cp.role = 0x00; /* Become master */
2065                 else
2066                         cp.role = 0x01; /* Remain slave */
2067
2068                 hci_send_cmd(hdev, HCI_OP_ACCEPT_CONN_REQ, sizeof(cp), &cp);
2069         } else /* lmp_esco_capable(hdev)) */ {
2070                 struct hci_cp_accept_sync_conn_req cp;
2071
2072                 bacpy(&cp.bdaddr, &conn->dst);
2073                 cp.pkt_type = cpu_to_le16(conn->pkt_type);
2074
2075                 cp.tx_bandwidth   = __constant_cpu_to_le32(0x00001f40);
2076                 cp.rx_bandwidth   = __constant_cpu_to_le32(0x00001f40);
2077                 cp.max_latency    = __constant_cpu_to_le16(0xffff);
2078                 cp.content_format = cpu_to_le16(hdev->voice_setting);
2079                 cp.retrans_effort = 0xff;
2080
2081                 hci_send_cmd(hdev, HCI_OP_ACCEPT_SYNC_CONN_REQ,
2082                              sizeof(cp), &cp);
2083         }
2084 }
2085
2086 static void hci_conn_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
2087 {
2088         struct hci_ev_conn_request *ev = (void *) skb->data;
2089         int mask = hdev->link_mode;
2090         __u8 flags = 0;
2091
2092         BT_DBG("%s bdaddr %pMR type 0x%x", hdev->name, &ev->bdaddr,
2093                ev->link_type);
2094
2095         mask |= hci_proto_connect_ind(hdev, &ev->bdaddr, ev->link_type,
2096                                       &flags);
2097
2098         if ((mask & HCI_LM_ACCEPT) &&
2099             !hci_blacklist_lookup(hdev, &ev->bdaddr)) {
2100                 /* Connection accepted */
2101                 struct inquiry_entry *ie;
2102                 struct hci_conn *conn;
2103
2104                 hci_dev_lock(hdev);
2105
2106                 ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr);
2107                 if (ie)
2108                         memcpy(ie->data.dev_class, ev->dev_class, 3);
2109
2110                 conn = hci_conn_hash_lookup_ba(hdev, ev->link_type,
2111                                                &ev->bdaddr);
2112                 if (!conn) {
2113                         conn = hci_conn_add(hdev, ev->link_type, &ev->bdaddr);
2114                         if (!conn) {
2115                                 BT_ERR("No memory for new connection");
2116                                 hci_dev_unlock(hdev);
2117                                 return;
2118                         }
2119                 }
2120
2121                 memcpy(conn->dev_class, ev->dev_class, 3);
2122
2123                 hci_dev_unlock(hdev);
2124
2125                 if (ev->link_type == ACL_LINK ||
2126                     (!(flags & HCI_PROTO_DEFER) && !lmp_esco_capable(hdev))) {
2127                         struct hci_cp_accept_conn_req cp;
2128                         conn->state = BT_CONNECT;
2129
2130                         bacpy(&cp.bdaddr, &ev->bdaddr);
2131
2132                         if (lmp_rswitch_capable(hdev) && (mask & HCI_LM_MASTER))
2133                                 cp.role = 0x00; /* Become master */
2134                         else
2135                                 cp.role = 0x01; /* Remain slave */
2136
2137                         hci_send_cmd(hdev, HCI_OP_ACCEPT_CONN_REQ, sizeof(cp),
2138                                      &cp);
2139                 } else if (!(flags & HCI_PROTO_DEFER)) {
2140                         struct hci_cp_accept_sync_conn_req cp;
2141                         conn->state = BT_CONNECT;
2142
2143                         bacpy(&cp.bdaddr, &ev->bdaddr);
2144                         cp.pkt_type = cpu_to_le16(conn->pkt_type);
2145
2146                         cp.tx_bandwidth   = __constant_cpu_to_le32(0x00001f40);
2147                         cp.rx_bandwidth   = __constant_cpu_to_le32(0x00001f40);
2148                         cp.max_latency    = __constant_cpu_to_le16(0xffff);
2149                         cp.content_format = cpu_to_le16(hdev->voice_setting);
2150                         cp.retrans_effort = 0xff;
2151
2152                         hci_send_cmd(hdev, HCI_OP_ACCEPT_SYNC_CONN_REQ,
2153                                      sizeof(cp), &cp);
2154                 } else {
2155                         conn->state = BT_CONNECT2;
2156                         hci_proto_connect_cfm(conn, 0);
2157                         hci_conn_put(conn);
2158                 }
2159         } else {
2160                 /* Connection rejected */
2161                 struct hci_cp_reject_conn_req cp;
2162
2163                 bacpy(&cp.bdaddr, &ev->bdaddr);
2164                 cp.reason = HCI_ERROR_REJ_BAD_ADDR;
2165                 hci_send_cmd(hdev, HCI_OP_REJECT_CONN_REQ, sizeof(cp), &cp);
2166         }
2167 }
2168
2169 static u8 hci_to_mgmt_reason(u8 err)
2170 {
2171         switch (err) {
2172         case HCI_ERROR_CONNECTION_TIMEOUT:
2173                 return MGMT_DEV_DISCONN_TIMEOUT;
2174         case HCI_ERROR_REMOTE_USER_TERM:
2175         case HCI_ERROR_REMOTE_LOW_RESOURCES:
2176         case HCI_ERROR_REMOTE_POWER_OFF:
2177                 return MGMT_DEV_DISCONN_REMOTE;
2178         case HCI_ERROR_LOCAL_HOST_TERM:
2179                 return MGMT_DEV_DISCONN_LOCAL_HOST;
2180         default:
2181                 return MGMT_DEV_DISCONN_UNKNOWN;
2182         }
2183 }
2184
2185 static void hci_disconn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
2186 {
2187         struct hci_ev_disconn_complete *ev = (void *) skb->data;
2188         struct hci_conn *conn;
2189
2190         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2191
2192         hci_dev_lock(hdev);
2193
2194         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2195         if (!conn)
2196                 goto unlock;
2197
2198         if (ev->status == 0)
2199                 conn->state = BT_CLOSED;
2200
2201         if (test_and_clear_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags) &&
2202             (conn->type == ACL_LINK || conn->type == LE_LINK)) {
2203                 if (ev->status) {
2204                         mgmt_disconnect_failed(hdev, &conn->dst, conn->type,
2205                                                conn->dst_type, ev->status);
2206                 } else {
2207                         u8 reason = hci_to_mgmt_reason(ev->reason);
2208
2209                         mgmt_device_disconnected(hdev, &conn->dst, conn->type,
2210                                                  conn->dst_type, reason);
2211                 }
2212         }
2213
2214         if (ev->status == 0) {
2215                 if (conn->type == ACL_LINK && conn->flush_key)
2216                         hci_remove_link_key(hdev, &conn->dst);
2217                 hci_proto_disconn_cfm(conn, ev->reason);
2218                 hci_conn_del(conn);
2219         }
2220
2221 unlock:
2222         hci_dev_unlock(hdev);
2223 }
2224
2225 static void hci_auth_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
2226 {
2227         struct hci_ev_auth_complete *ev = (void *) skb->data;
2228         struct hci_conn *conn;
2229
2230         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2231
2232         hci_dev_lock(hdev);
2233
2234         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2235         if (!conn)
2236                 goto unlock;
2237
2238         if (!ev->status) {
2239                 if (!hci_conn_ssp_enabled(conn) &&
2240                     test_bit(HCI_CONN_REAUTH_PEND, &conn->flags)) {
2241                         BT_INFO("re-auth of legacy device is not possible.");
2242                 } else {
2243                         conn->link_mode |= HCI_LM_AUTH;
2244                         conn->sec_level = conn->pending_sec_level;
2245                 }
2246         } else {
2247                 mgmt_auth_failed(hdev, &conn->dst, conn->type, conn->dst_type,
2248                                  ev->status);
2249         }
2250
2251         clear_bit(HCI_CONN_AUTH_PEND, &conn->flags);
2252         clear_bit(HCI_CONN_REAUTH_PEND, &conn->flags);
2253
2254         if (conn->state == BT_CONFIG) {
2255                 if (!ev->status && hci_conn_ssp_enabled(conn)) {
2256                         struct hci_cp_set_conn_encrypt cp;
2257                         cp.handle  = ev->handle;
2258                         cp.encrypt = 0x01;
2259                         hci_send_cmd(hdev, HCI_OP_SET_CONN_ENCRYPT, sizeof(cp),
2260                                      &cp);
2261                 } else {
2262                         conn->state = BT_CONNECTED;
2263                         hci_proto_connect_cfm(conn, ev->status);
2264                         hci_conn_put(conn);
2265                 }
2266         } else {
2267                 hci_auth_cfm(conn, ev->status);
2268
2269                 hci_conn_hold(conn);
2270                 conn->disc_timeout = HCI_DISCONN_TIMEOUT;
2271                 hci_conn_put(conn);
2272         }
2273
2274         if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags)) {
2275                 if (!ev->status) {
2276                         struct hci_cp_set_conn_encrypt cp;
2277                         cp.handle  = ev->handle;
2278                         cp.encrypt = 0x01;
2279                         hci_send_cmd(hdev, HCI_OP_SET_CONN_ENCRYPT, sizeof(cp),
2280                                      &cp);
2281                 } else {
2282                         clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
2283                         hci_encrypt_cfm(conn, ev->status, 0x00);
2284                 }
2285         }
2286
2287 unlock:
2288         hci_dev_unlock(hdev);
2289 }
2290
2291 static void hci_remote_name_evt(struct hci_dev *hdev, struct sk_buff *skb)
2292 {
2293         struct hci_ev_remote_name *ev = (void *) skb->data;
2294         struct hci_conn *conn;
2295
2296         BT_DBG("%s", hdev->name);
2297
2298         hci_conn_check_pending(hdev);
2299
2300         hci_dev_lock(hdev);
2301
2302         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
2303
2304         if (!test_bit(HCI_MGMT, &hdev->dev_flags))
2305                 goto check_auth;
2306
2307         if (ev->status == 0)
2308                 hci_check_pending_name(hdev, conn, &ev->bdaddr, ev->name,
2309                                        strnlen(ev->name, HCI_MAX_NAME_LENGTH));
2310         else
2311                 hci_check_pending_name(hdev, conn, &ev->bdaddr, NULL, 0);
2312
2313 check_auth:
2314         if (!conn)
2315                 goto unlock;
2316
2317         if (!hci_outgoing_auth_needed(hdev, conn))
2318                 goto unlock;
2319
2320         if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
2321                 struct hci_cp_auth_requested cp;
2322                 cp.handle = __cpu_to_le16(conn->handle);
2323                 hci_send_cmd(hdev, HCI_OP_AUTH_REQUESTED, sizeof(cp), &cp);
2324         }
2325
2326 unlock:
2327         hci_dev_unlock(hdev);
2328 }
2329
2330 static void hci_encrypt_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
2331 {
2332         struct hci_ev_encrypt_change *ev = (void *) skb->data;
2333         struct hci_conn *conn;
2334
2335         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2336
2337         hci_dev_lock(hdev);
2338
2339         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2340         if (conn) {
2341                 if (!ev->status) {
2342                         if (ev->encrypt) {
2343                                 /* Encryption implies authentication */
2344                                 conn->link_mode |= HCI_LM_AUTH;
2345                                 conn->link_mode |= HCI_LM_ENCRYPT;
2346                                 conn->sec_level = conn->pending_sec_level;
2347                         } else
2348                                 conn->link_mode &= ~HCI_LM_ENCRYPT;
2349                 }
2350
2351                 clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
2352
2353                 if (ev->status && conn->state == BT_CONNECTED) {
2354                         hci_acl_disconn(conn, HCI_ERROR_AUTH_FAILURE);
2355                         hci_conn_put(conn);
2356                         goto unlock;
2357                 }
2358
2359                 if (conn->state == BT_CONFIG) {
2360                         if (!ev->status)
2361                                 conn->state = BT_CONNECTED;
2362
2363                         hci_proto_connect_cfm(conn, ev->status);
2364                         hci_conn_put(conn);
2365                 } else
2366                         hci_encrypt_cfm(conn, ev->status, ev->encrypt);
2367         }
2368
2369 unlock:
2370         hci_dev_unlock(hdev);
2371 }
2372
2373 static void hci_change_link_key_complete_evt(struct hci_dev *hdev,
2374                                              struct sk_buff *skb)
2375 {
2376         struct hci_ev_change_link_key_complete *ev = (void *) skb->data;
2377         struct hci_conn *conn;
2378
2379         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2380
2381         hci_dev_lock(hdev);
2382
2383         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2384         if (conn) {
2385                 if (!ev->status)
2386                         conn->link_mode |= HCI_LM_SECURE;
2387
2388                 clear_bit(HCI_CONN_AUTH_PEND, &conn->flags);
2389
2390                 hci_key_change_cfm(conn, ev->status);
2391         }
2392
2393         hci_dev_unlock(hdev);
2394 }
2395
2396 static void hci_remote_features_evt(struct hci_dev *hdev,
2397                                     struct sk_buff *skb)
2398 {
2399         struct hci_ev_remote_features *ev = (void *) skb->data;
2400         struct hci_conn *conn;
2401
2402         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2403
2404         hci_dev_lock(hdev);
2405
2406         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2407         if (!conn)
2408                 goto unlock;
2409
2410         if (!ev->status)
2411                 memcpy(conn->features, ev->features, 8);
2412
2413         if (conn->state != BT_CONFIG)
2414                 goto unlock;
2415
2416         if (!ev->status && lmp_ssp_capable(hdev) && lmp_ssp_capable(conn)) {
2417                 struct hci_cp_read_remote_ext_features cp;
2418                 cp.handle = ev->handle;
2419                 cp.page = 0x01;
2420                 hci_send_cmd(hdev, HCI_OP_READ_REMOTE_EXT_FEATURES,
2421                              sizeof(cp), &cp);
2422                 goto unlock;
2423         }
2424
2425         if (!ev->status && !test_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags)) {
2426                 struct hci_cp_remote_name_req cp;
2427                 memset(&cp, 0, sizeof(cp));
2428                 bacpy(&cp.bdaddr, &conn->dst);
2429                 cp.pscan_rep_mode = 0x02;
2430                 hci_send_cmd(hdev, HCI_OP_REMOTE_NAME_REQ, sizeof(cp), &cp);
2431         } else if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags))
2432                 mgmt_device_connected(hdev, &conn->dst, conn->type,
2433                                       conn->dst_type, 0, NULL, 0,
2434                                       conn->dev_class);
2435
2436         if (!hci_outgoing_auth_needed(hdev, conn)) {
2437                 conn->state = BT_CONNECTED;
2438                 hci_proto_connect_cfm(conn, ev->status);
2439                 hci_conn_put(conn);
2440         }
2441
2442 unlock:
2443         hci_dev_unlock(hdev);
2444 }
2445
2446 static void hci_remote_version_evt(struct hci_dev *hdev, struct sk_buff *skb)
2447 {
2448         BT_DBG("%s", hdev->name);
2449 }
2450
2451 static void hci_qos_setup_complete_evt(struct hci_dev *hdev,
2452                                        struct sk_buff *skb)
2453 {
2454         BT_DBG("%s", hdev->name);
2455 }
2456
2457 static void hci_cmd_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
2458 {
2459         struct hci_ev_cmd_complete *ev = (void *) skb->data;
2460         __u16 opcode;
2461
2462         skb_pull(skb, sizeof(*ev));
2463
2464         opcode = __le16_to_cpu(ev->opcode);
2465
2466         switch (opcode) {
2467         case HCI_OP_INQUIRY_CANCEL:
2468                 hci_cc_inquiry_cancel(hdev, skb);
2469                 break;
2470
2471         case HCI_OP_PERIODIC_INQ:
2472                 hci_cc_periodic_inq(hdev, skb);
2473                 break;
2474
2475         case HCI_OP_EXIT_PERIODIC_INQ:
2476                 hci_cc_exit_periodic_inq(hdev, skb);
2477                 break;
2478
2479         case HCI_OP_REMOTE_NAME_REQ_CANCEL:
2480                 hci_cc_remote_name_req_cancel(hdev, skb);
2481                 break;
2482
2483         case HCI_OP_ROLE_DISCOVERY:
2484                 hci_cc_role_discovery(hdev, skb);
2485                 break;
2486
2487         case HCI_OP_READ_LINK_POLICY:
2488                 hci_cc_read_link_policy(hdev, skb);
2489                 break;
2490
2491         case HCI_OP_WRITE_LINK_POLICY:
2492                 hci_cc_write_link_policy(hdev, skb);
2493                 break;
2494
2495         case HCI_OP_READ_DEF_LINK_POLICY:
2496                 hci_cc_read_def_link_policy(hdev, skb);
2497                 break;
2498
2499         case HCI_OP_WRITE_DEF_LINK_POLICY:
2500                 hci_cc_write_def_link_policy(hdev, skb);
2501                 break;
2502
2503         case HCI_OP_RESET:
2504                 hci_cc_reset(hdev, skb);
2505                 break;
2506
2507         case HCI_OP_WRITE_LOCAL_NAME:
2508                 hci_cc_write_local_name(hdev, skb);
2509                 break;
2510
2511         case HCI_OP_READ_LOCAL_NAME:
2512                 hci_cc_read_local_name(hdev, skb);
2513                 break;
2514
2515         case HCI_OP_WRITE_AUTH_ENABLE:
2516                 hci_cc_write_auth_enable(hdev, skb);
2517                 break;
2518
2519         case HCI_OP_WRITE_ENCRYPT_MODE:
2520                 hci_cc_write_encrypt_mode(hdev, skb);
2521                 break;
2522
2523         case HCI_OP_WRITE_SCAN_ENABLE:
2524                 hci_cc_write_scan_enable(hdev, skb);
2525                 break;
2526
2527         case HCI_OP_READ_CLASS_OF_DEV:
2528                 hci_cc_read_class_of_dev(hdev, skb);
2529                 break;
2530
2531         case HCI_OP_WRITE_CLASS_OF_DEV:
2532                 hci_cc_write_class_of_dev(hdev, skb);
2533                 break;
2534
2535         case HCI_OP_READ_VOICE_SETTING:
2536                 hci_cc_read_voice_setting(hdev, skb);
2537                 break;
2538
2539         case HCI_OP_WRITE_VOICE_SETTING:
2540                 hci_cc_write_voice_setting(hdev, skb);
2541                 break;
2542
2543         case HCI_OP_HOST_BUFFER_SIZE:
2544                 hci_cc_host_buffer_size(hdev, skb);
2545                 break;
2546
2547         case HCI_OP_WRITE_SSP_MODE:
2548                 hci_cc_write_ssp_mode(hdev, skb);
2549                 break;
2550
2551         case HCI_OP_READ_LOCAL_VERSION:
2552                 hci_cc_read_local_version(hdev, skb);
2553                 break;
2554
2555         case HCI_OP_READ_LOCAL_COMMANDS:
2556                 hci_cc_read_local_commands(hdev, skb);
2557                 break;
2558
2559         case HCI_OP_READ_LOCAL_FEATURES:
2560                 hci_cc_read_local_features(hdev, skb);
2561                 break;
2562
2563         case HCI_OP_READ_LOCAL_EXT_FEATURES:
2564                 hci_cc_read_local_ext_features(hdev, skb);
2565                 break;
2566
2567         case HCI_OP_READ_BUFFER_SIZE:
2568                 hci_cc_read_buffer_size(hdev, skb);
2569                 break;
2570
2571         case HCI_OP_READ_BD_ADDR:
2572                 hci_cc_read_bd_addr(hdev, skb);
2573                 break;
2574
2575         case HCI_OP_READ_DATA_BLOCK_SIZE:
2576                 hci_cc_read_data_block_size(hdev, skb);
2577                 break;
2578
2579         case HCI_OP_WRITE_CA_TIMEOUT:
2580                 hci_cc_write_ca_timeout(hdev, skb);
2581                 break;
2582
2583         case HCI_OP_READ_FLOW_CONTROL_MODE:
2584                 hci_cc_read_flow_control_mode(hdev, skb);
2585                 break;
2586
2587         case HCI_OP_READ_LOCAL_AMP_INFO:
2588                 hci_cc_read_local_amp_info(hdev, skb);
2589                 break;
2590
2591         case HCI_OP_READ_LOCAL_AMP_ASSOC:
2592                 hci_cc_read_local_amp_assoc(hdev, skb);
2593                 break;
2594
2595         case HCI_OP_DELETE_STORED_LINK_KEY:
2596                 hci_cc_delete_stored_link_key(hdev, skb);
2597                 break;
2598
2599         case HCI_OP_SET_EVENT_MASK:
2600                 hci_cc_set_event_mask(hdev, skb);
2601                 break;
2602
2603         case HCI_OP_WRITE_INQUIRY_MODE:
2604                 hci_cc_write_inquiry_mode(hdev, skb);
2605                 break;
2606
2607         case HCI_OP_READ_INQ_RSP_TX_POWER:
2608                 hci_cc_read_inq_rsp_tx_power(hdev, skb);
2609                 break;
2610
2611         case HCI_OP_SET_EVENT_FLT:
2612                 hci_cc_set_event_flt(hdev, skb);
2613                 break;
2614
2615         case HCI_OP_PIN_CODE_REPLY:
2616                 hci_cc_pin_code_reply(hdev, skb);
2617                 break;
2618
2619         case HCI_OP_PIN_CODE_NEG_REPLY:
2620                 hci_cc_pin_code_neg_reply(hdev, skb);
2621                 break;
2622
2623         case HCI_OP_READ_LOCAL_OOB_DATA:
2624                 hci_cc_read_local_oob_data_reply(hdev, skb);
2625                 break;
2626
2627         case HCI_OP_LE_READ_BUFFER_SIZE:
2628                 hci_cc_le_read_buffer_size(hdev, skb);
2629                 break;
2630
2631         case HCI_OP_LE_READ_ADV_TX_POWER:
2632                 hci_cc_le_read_adv_tx_power(hdev, skb);
2633                 break;
2634
2635         case HCI_OP_LE_SET_EVENT_MASK:
2636                 hci_cc_le_set_event_mask(hdev, skb);
2637                 break;
2638
2639         case HCI_OP_USER_CONFIRM_REPLY:
2640                 hci_cc_user_confirm_reply(hdev, skb);
2641                 break;
2642
2643         case HCI_OP_USER_CONFIRM_NEG_REPLY:
2644                 hci_cc_user_confirm_neg_reply(hdev, skb);
2645                 break;
2646
2647         case HCI_OP_USER_PASSKEY_REPLY:
2648                 hci_cc_user_passkey_reply(hdev, skb);
2649                 break;
2650
2651         case HCI_OP_USER_PASSKEY_NEG_REPLY:
2652                 hci_cc_user_passkey_neg_reply(hdev, skb);
2653                 break;
2654
2655         case HCI_OP_LE_SET_SCAN_PARAM:
2656                 hci_cc_le_set_scan_param(hdev, skb);
2657                 break;
2658
2659         case HCI_OP_LE_SET_ADV_ENABLE:
2660                 hci_cc_le_set_adv_enable(hdev, skb);
2661                 break;
2662
2663         case HCI_OP_LE_SET_SCAN_ENABLE:
2664                 hci_cc_le_set_scan_enable(hdev, skb);
2665                 break;
2666
2667         case HCI_OP_LE_LTK_REPLY:
2668                 hci_cc_le_ltk_reply(hdev, skb);
2669                 break;
2670
2671         case HCI_OP_LE_LTK_NEG_REPLY:
2672                 hci_cc_le_ltk_neg_reply(hdev, skb);
2673                 break;
2674
2675         case HCI_OP_WRITE_LE_HOST_SUPPORTED:
2676                 hci_cc_write_le_host_supported(hdev, skb);
2677                 break;
2678
2679         case HCI_OP_WRITE_REMOTE_AMP_ASSOC:
2680                 hci_cc_write_remote_amp_assoc(hdev, skb);
2681                 break;
2682
2683         default:
2684                 BT_DBG("%s opcode 0x%4.4x", hdev->name, opcode);
2685                 break;
2686         }
2687
2688         if (ev->opcode != HCI_OP_NOP)
2689                 del_timer(&hdev->cmd_timer);
2690
2691         if (ev->ncmd) {
2692                 atomic_set(&hdev->cmd_cnt, 1);
2693                 if (!skb_queue_empty(&hdev->cmd_q))
2694                         queue_work(hdev->workqueue, &hdev->cmd_work);
2695         }
2696 }
2697
2698 static void hci_cmd_status_evt(struct hci_dev *hdev, struct sk_buff *skb)
2699 {
2700         struct hci_ev_cmd_status *ev = (void *) skb->data;
2701         __u16 opcode;
2702
2703         skb_pull(skb, sizeof(*ev));
2704
2705         opcode = __le16_to_cpu(ev->opcode);
2706
2707         switch (opcode) {
2708         case HCI_OP_INQUIRY:
2709                 hci_cs_inquiry(hdev, ev->status);
2710                 break;
2711
2712         case HCI_OP_CREATE_CONN:
2713                 hci_cs_create_conn(hdev, ev->status);
2714                 break;
2715
2716         case HCI_OP_ADD_SCO:
2717                 hci_cs_add_sco(hdev, ev->status);
2718                 break;
2719
2720         case HCI_OP_AUTH_REQUESTED:
2721                 hci_cs_auth_requested(hdev, ev->status);
2722                 break;
2723
2724         case HCI_OP_SET_CONN_ENCRYPT:
2725                 hci_cs_set_conn_encrypt(hdev, ev->status);
2726                 break;
2727
2728         case HCI_OP_REMOTE_NAME_REQ:
2729                 hci_cs_remote_name_req(hdev, ev->status);
2730                 break;
2731
2732         case HCI_OP_READ_REMOTE_FEATURES:
2733                 hci_cs_read_remote_features(hdev, ev->status);
2734                 break;
2735
2736         case HCI_OP_READ_REMOTE_EXT_FEATURES:
2737                 hci_cs_read_remote_ext_features(hdev, ev->status);
2738                 break;
2739
2740         case HCI_OP_SETUP_SYNC_CONN:
2741                 hci_cs_setup_sync_conn(hdev, ev->status);
2742                 break;
2743
2744         case HCI_OP_SNIFF_MODE:
2745                 hci_cs_sniff_mode(hdev, ev->status);
2746                 break;
2747
2748         case HCI_OP_EXIT_SNIFF_MODE:
2749                 hci_cs_exit_sniff_mode(hdev, ev->status);
2750                 break;
2751
2752         case HCI_OP_DISCONNECT:
2753                 hci_cs_disconnect(hdev, ev->status);
2754                 break;
2755
2756         case HCI_OP_LE_CREATE_CONN:
2757                 hci_cs_le_create_conn(hdev, ev->status);
2758                 break;
2759
2760         case HCI_OP_LE_START_ENC:
2761                 hci_cs_le_start_enc(hdev, ev->status);
2762                 break;
2763
2764         case HCI_OP_CREATE_PHY_LINK:
2765                 hci_cs_create_phylink(hdev, ev->status);
2766                 break;
2767
2768         case HCI_OP_ACCEPT_PHY_LINK:
2769                 hci_cs_accept_phylink(hdev, ev->status);
2770                 break;
2771
2772         case HCI_OP_CREATE_LOGICAL_LINK:
2773                 hci_cs_create_logical_link(hdev, ev->status);
2774                 break;
2775
2776         default:
2777                 BT_DBG("%s opcode 0x%4.4x", hdev->name, opcode);
2778                 break;
2779         }
2780
2781         if (ev->opcode != HCI_OP_NOP)
2782                 del_timer(&hdev->cmd_timer);
2783
2784         if (ev->ncmd && !test_bit(HCI_RESET, &hdev->flags)) {
2785                 atomic_set(&hdev->cmd_cnt, 1);
2786                 if (!skb_queue_empty(&hdev->cmd_q))
2787                         queue_work(hdev->workqueue, &hdev->cmd_work);
2788         }
2789 }
2790
2791 static void hci_role_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
2792 {
2793         struct hci_ev_role_change *ev = (void *) skb->data;
2794         struct hci_conn *conn;
2795
2796         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2797
2798         hci_dev_lock(hdev);
2799
2800         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
2801         if (conn) {
2802                 if (!ev->status) {
2803                         if (ev->role)
2804                                 conn->link_mode &= ~HCI_LM_MASTER;
2805                         else
2806                                 conn->link_mode |= HCI_LM_MASTER;
2807                 }
2808
2809                 clear_bit(HCI_CONN_RSWITCH_PEND, &conn->flags);
2810
2811                 hci_role_switch_cfm(conn, ev->status, ev->role);
2812         }
2813
2814         hci_dev_unlock(hdev);
2815 }
2816
2817 static void hci_num_comp_pkts_evt(struct hci_dev *hdev, struct sk_buff *skb)
2818 {
2819         struct hci_ev_num_comp_pkts *ev = (void *) skb->data;
2820         int i;
2821
2822         if (hdev->flow_ctl_mode != HCI_FLOW_CTL_MODE_PACKET_BASED) {
2823                 BT_ERR("Wrong event for mode %d", hdev->flow_ctl_mode);
2824                 return;
2825         }
2826
2827         if (skb->len < sizeof(*ev) || skb->len < sizeof(*ev) +
2828             ev->num_hndl * sizeof(struct hci_comp_pkts_info)) {
2829                 BT_DBG("%s bad parameters", hdev->name);
2830                 return;
2831         }
2832
2833         BT_DBG("%s num_hndl %d", hdev->name, ev->num_hndl);
2834
2835         for (i = 0; i < ev->num_hndl; i++) {
2836                 struct hci_comp_pkts_info *info = &ev->handles[i];
2837                 struct hci_conn *conn;
2838                 __u16  handle, count;
2839
2840                 handle = __le16_to_cpu(info->handle);
2841                 count  = __le16_to_cpu(info->count);
2842
2843                 conn = hci_conn_hash_lookup_handle(hdev, handle);
2844                 if (!conn)
2845                         continue;
2846
2847                 conn->sent -= count;
2848
2849                 switch (conn->type) {
2850                 case ACL_LINK:
2851                         hdev->acl_cnt += count;
2852                         if (hdev->acl_cnt > hdev->acl_pkts)
2853                                 hdev->acl_cnt = hdev->acl_pkts;
2854                         break;
2855
2856                 case LE_LINK:
2857                         if (hdev->le_pkts) {
2858                                 hdev->le_cnt += count;
2859                                 if (hdev->le_cnt > hdev->le_pkts)
2860                                         hdev->le_cnt = hdev->le_pkts;
2861                         } else {
2862                                 hdev->acl_cnt += count;
2863                                 if (hdev->acl_cnt > hdev->acl_pkts)
2864                                         hdev->acl_cnt = hdev->acl_pkts;
2865                         }
2866                         break;
2867
2868                 case SCO_LINK:
2869                         hdev->sco_cnt += count;
2870                         if (hdev->sco_cnt > hdev->sco_pkts)
2871                                 hdev->sco_cnt = hdev->sco_pkts;
2872                         break;
2873
2874                 default:
2875                         BT_ERR("Unknown type %d conn %p", conn->type, conn);
2876                         break;
2877                 }
2878         }
2879
2880         queue_work(hdev->workqueue, &hdev->tx_work);
2881 }
2882
2883 static struct hci_conn *__hci_conn_lookup_handle(struct hci_dev *hdev,
2884                                                  __u16 handle)
2885 {
2886         struct hci_chan *chan;
2887
2888         switch (hdev->dev_type) {
2889         case HCI_BREDR:
2890                 return hci_conn_hash_lookup_handle(hdev, handle);
2891         case HCI_AMP:
2892                 chan = hci_chan_lookup_handle(hdev, handle);
2893                 if (chan)
2894                         return chan->conn;
2895                 break;
2896         default:
2897                 BT_ERR("%s unknown dev_type %d", hdev->name, hdev->dev_type);
2898                 break;
2899         }
2900
2901         return NULL;
2902 }
2903
2904 static void hci_num_comp_blocks_evt(struct hci_dev *hdev, struct sk_buff *skb)
2905 {
2906         struct hci_ev_num_comp_blocks *ev = (void *) skb->data;
2907         int i;
2908
2909         if (hdev->flow_ctl_mode != HCI_FLOW_CTL_MODE_BLOCK_BASED) {
2910                 BT_ERR("Wrong event for mode %d", hdev->flow_ctl_mode);
2911                 return;
2912         }
2913
2914         if (skb->len < sizeof(*ev) || skb->len < sizeof(*ev) +
2915             ev->num_hndl * sizeof(struct hci_comp_blocks_info)) {
2916                 BT_DBG("%s bad parameters", hdev->name);
2917                 return;
2918         }
2919
2920         BT_DBG("%s num_blocks %d num_hndl %d", hdev->name, ev->num_blocks,
2921                ev->num_hndl);
2922
2923         for (i = 0; i < ev->num_hndl; i++) {
2924                 struct hci_comp_blocks_info *info = &ev->handles[i];
2925                 struct hci_conn *conn = NULL;
2926                 __u16  handle, block_count;
2927
2928                 handle = __le16_to_cpu(info->handle);
2929                 block_count = __le16_to_cpu(info->blocks);
2930
2931                 conn = __hci_conn_lookup_handle(hdev, handle);
2932                 if (!conn)
2933                         continue;
2934
2935                 conn->sent -= block_count;
2936
2937                 switch (conn->type) {
2938                 case ACL_LINK:
2939                 case AMP_LINK:
2940                         hdev->block_cnt += block_count;
2941                         if (hdev->block_cnt > hdev->num_blocks)
2942                                 hdev->block_cnt = hdev->num_blocks;
2943                         break;
2944
2945                 default:
2946                         BT_ERR("Unknown type %d conn %p", conn->type, conn);
2947                         break;
2948                 }
2949         }
2950
2951         queue_work(hdev->workqueue, &hdev->tx_work);
2952 }
2953
2954 static void hci_mode_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
2955 {
2956         struct hci_ev_mode_change *ev = (void *) skb->data;
2957         struct hci_conn *conn;
2958
2959         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2960
2961         hci_dev_lock(hdev);
2962
2963         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2964         if (conn) {
2965                 conn->mode = ev->mode;
2966                 conn->interval = __le16_to_cpu(ev->interval);
2967
2968                 if (!test_and_clear_bit(HCI_CONN_MODE_CHANGE_PEND,
2969                                         &conn->flags)) {
2970                         if (conn->mode == HCI_CM_ACTIVE)
2971                                 set_bit(HCI_CONN_POWER_SAVE, &conn->flags);
2972                         else
2973                                 clear_bit(HCI_CONN_POWER_SAVE, &conn->flags);
2974                 }
2975
2976                 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->flags))
2977                         hci_sco_setup(conn, ev->status);
2978         }
2979
2980         hci_dev_unlock(hdev);
2981 }
2982
2983 static void hci_pin_code_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
2984 {
2985         struct hci_ev_pin_code_req *ev = (void *) skb->data;
2986         struct hci_conn *conn;
2987
2988         BT_DBG("%s", hdev->name);
2989
2990         hci_dev_lock(hdev);
2991
2992         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
2993         if (!conn)
2994                 goto unlock;
2995
2996         if (conn->state == BT_CONNECTED) {
2997                 hci_conn_hold(conn);
2998                 conn->disc_timeout = HCI_PAIRING_TIMEOUT;
2999                 hci_conn_put(conn);
3000         }
3001
3002         if (!test_bit(HCI_PAIRABLE, &hdev->dev_flags))
3003                 hci_send_cmd(hdev, HCI_OP_PIN_CODE_NEG_REPLY,
3004                              sizeof(ev->bdaddr), &ev->bdaddr);
3005         else if (test_bit(HCI_MGMT, &hdev->dev_flags)) {
3006                 u8 secure;
3007
3008                 if (conn->pending_sec_level == BT_SECURITY_HIGH)
3009                         secure = 1;
3010                 else
3011                         secure = 0;
3012
3013                 mgmt_pin_code_request(hdev, &ev->bdaddr, secure);
3014         }
3015
3016 unlock:
3017         hci_dev_unlock(hdev);
3018 }
3019
3020 static void hci_link_key_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
3021 {
3022         struct hci_ev_link_key_req *ev = (void *) skb->data;
3023         struct hci_cp_link_key_reply cp;
3024         struct hci_conn *conn;
3025         struct link_key *key;
3026
3027         BT_DBG("%s", hdev->name);
3028
3029         if (!test_bit(HCI_LINK_KEYS, &hdev->dev_flags))
3030                 return;
3031
3032         hci_dev_lock(hdev);
3033
3034         key = hci_find_link_key(hdev, &ev->bdaddr);
3035         if (!key) {
3036                 BT_DBG("%s link key not found for %pMR", hdev->name,
3037                        &ev->bdaddr);
3038                 goto not_found;
3039         }
3040
3041         BT_DBG("%s found key type %u for %pMR", hdev->name, key->type,
3042                &ev->bdaddr);
3043
3044         if (!test_bit(HCI_DEBUG_KEYS, &hdev->dev_flags) &&
3045             key->type == HCI_LK_DEBUG_COMBINATION) {
3046                 BT_DBG("%s ignoring debug key", hdev->name);
3047                 goto not_found;
3048         }
3049
3050         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3051         if (conn) {
3052                 if (key->type == HCI_LK_UNAUTH_COMBINATION &&
3053                     conn->auth_type != 0xff && (conn->auth_type & 0x01)) {
3054                         BT_DBG("%s ignoring unauthenticated key", hdev->name);
3055                         goto not_found;
3056                 }
3057
3058                 if (key->type == HCI_LK_COMBINATION && key->pin_len < 16 &&
3059                     conn->pending_sec_level == BT_SECURITY_HIGH) {
3060                         BT_DBG("%s ignoring key unauthenticated for high security",
3061                                hdev->name);
3062                         goto not_found;
3063                 }
3064
3065                 conn->key_type = key->type;
3066                 conn->pin_length = key->pin_len;
3067         }
3068
3069         bacpy(&cp.bdaddr, &ev->bdaddr);
3070         memcpy(cp.link_key, key->val, HCI_LINK_KEY_SIZE);
3071
3072         hci_send_cmd(hdev, HCI_OP_LINK_KEY_REPLY, sizeof(cp), &cp);
3073
3074         hci_dev_unlock(hdev);
3075
3076         return;
3077
3078 not_found:
3079         hci_send_cmd(hdev, HCI_OP_LINK_KEY_NEG_REPLY, 6, &ev->bdaddr);
3080         hci_dev_unlock(hdev);
3081 }
3082
3083 static void hci_link_key_notify_evt(struct hci_dev *hdev, struct sk_buff *skb)
3084 {
3085         struct hci_ev_link_key_notify *ev = (void *) skb->data;
3086         struct hci_conn *conn;
3087         u8 pin_len = 0;
3088
3089         BT_DBG("%s", hdev->name);
3090
3091         hci_dev_lock(hdev);
3092
3093         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3094         if (conn) {
3095                 hci_conn_hold(conn);
3096                 conn->disc_timeout = HCI_DISCONN_TIMEOUT;
3097                 pin_len = conn->pin_length;
3098
3099                 if (ev->key_type != HCI_LK_CHANGED_COMBINATION)
3100                         conn->key_type = ev->key_type;
3101
3102                 hci_conn_put(conn);
3103         }
3104
3105         if (test_bit(HCI_LINK_KEYS, &hdev->dev_flags))
3106                 hci_add_link_key(hdev, conn, 1, &ev->bdaddr, ev->link_key,
3107                                  ev->key_type, pin_len);
3108
3109         hci_dev_unlock(hdev);
3110 }
3111
3112 static void hci_clock_offset_evt(struct hci_dev *hdev, struct sk_buff *skb)
3113 {
3114         struct hci_ev_clock_offset *ev = (void *) skb->data;
3115         struct hci_conn *conn;
3116
3117         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3118
3119         hci_dev_lock(hdev);
3120
3121         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
3122         if (conn && !ev->status) {
3123                 struct inquiry_entry *ie;
3124
3125                 ie = hci_inquiry_cache_lookup(hdev, &conn->dst);
3126                 if (ie) {
3127                         ie->data.clock_offset = ev->clock_offset;
3128                         ie->timestamp = jiffies;
3129                 }
3130         }
3131
3132         hci_dev_unlock(hdev);
3133 }
3134
3135 static void hci_pkt_type_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
3136 {
3137         struct hci_ev_pkt_type_change *ev = (void *) skb->data;
3138         struct hci_conn *conn;
3139
3140         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3141
3142         hci_dev_lock(hdev);
3143
3144         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
3145         if (conn && !ev->status)
3146                 conn->pkt_type = __le16_to_cpu(ev->pkt_type);
3147
3148         hci_dev_unlock(hdev);
3149 }
3150
3151 static void hci_pscan_rep_mode_evt(struct hci_dev *hdev, struct sk_buff *skb)
3152 {
3153         struct hci_ev_pscan_rep_mode *ev = (void *) skb->data;
3154         struct inquiry_entry *ie;
3155
3156         BT_DBG("%s", hdev->name);
3157
3158         hci_dev_lock(hdev);
3159
3160         ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr);
3161         if (ie) {
3162                 ie->data.pscan_rep_mode = ev->pscan_rep_mode;
3163                 ie->timestamp = jiffies;
3164         }
3165
3166         hci_dev_unlock(hdev);
3167 }
3168
3169 static void hci_inquiry_result_with_rssi_evt(struct hci_dev *hdev,
3170                                              struct sk_buff *skb)
3171 {
3172         struct inquiry_data data;
3173         int num_rsp = *((__u8 *) skb->data);
3174         bool name_known, ssp;
3175
3176         BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
3177
3178         if (!num_rsp)
3179                 return;
3180
3181         if (test_bit(HCI_PERIODIC_INQ, &hdev->dev_flags))
3182                 return;
3183
3184         hci_dev_lock(hdev);
3185
3186         if ((skb->len - 1) / num_rsp != sizeof(struct inquiry_info_with_rssi)) {
3187                 struct inquiry_info_with_rssi_and_pscan_mode *info;
3188                 info = (void *) (skb->data + 1);
3189
3190                 for (; num_rsp; num_rsp--, info++) {
3191                         bacpy(&data.bdaddr, &info->bdaddr);
3192                         data.pscan_rep_mode     = info->pscan_rep_mode;
3193                         data.pscan_period_mode  = info->pscan_period_mode;
3194                         data.pscan_mode         = info->pscan_mode;
3195                         memcpy(data.dev_class, info->dev_class, 3);
3196                         data.clock_offset       = info->clock_offset;
3197                         data.rssi               = info->rssi;
3198                         data.ssp_mode           = 0x00;
3199
3200                         name_known = hci_inquiry_cache_update(hdev, &data,
3201                                                               false, &ssp);
3202                         mgmt_device_found(hdev, &info->bdaddr, ACL_LINK, 0x00,
3203                                           info->dev_class, info->rssi,
3204                                           !name_known, ssp, NULL, 0);
3205                 }
3206         } else {
3207                 struct inquiry_info_with_rssi *info = (void *) (skb->data + 1);
3208
3209                 for (; num_rsp; num_rsp--, info++) {
3210                         bacpy(&data.bdaddr, &info->bdaddr);
3211                         data.pscan_rep_mode     = info->pscan_rep_mode;
3212                         data.pscan_period_mode  = info->pscan_period_mode;
3213                         data.pscan_mode         = 0x00;
3214                         memcpy(data.dev_class, info->dev_class, 3);
3215                         data.clock_offset       = info->clock_offset;
3216                         data.rssi               = info->rssi;
3217                         data.ssp_mode           = 0x00;
3218                         name_known = hci_inquiry_cache_update(hdev, &data,
3219                                                               false, &ssp);
3220                         mgmt_device_found(hdev, &info->bdaddr, ACL_LINK, 0x00,
3221                                           info->dev_class, info->rssi,
3222                                           !name_known, ssp, NULL, 0);
3223                 }
3224         }
3225
3226         hci_dev_unlock(hdev);
3227 }
3228
3229 static void hci_remote_ext_features_evt(struct hci_dev *hdev,
3230                                         struct sk_buff *skb)
3231 {
3232         struct hci_ev_remote_ext_features *ev = (void *) skb->data;
3233         struct hci_conn *conn;
3234
3235         BT_DBG("%s", hdev->name);
3236
3237         hci_dev_lock(hdev);
3238
3239         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
3240         if (!conn)
3241                 goto unlock;
3242
3243         if (!ev->status && ev->page == 0x01) {
3244                 struct inquiry_entry *ie;
3245
3246                 ie = hci_inquiry_cache_lookup(hdev, &conn->dst);
3247                 if (ie)
3248                         ie->data.ssp_mode = (ev->features[0] & LMP_HOST_SSP);
3249
3250                 if (ev->features[0] & LMP_HOST_SSP)
3251                         set_bit(HCI_CONN_SSP_ENABLED, &conn->flags);
3252         }
3253
3254         if (conn->state != BT_CONFIG)
3255                 goto unlock;
3256
3257         if (!ev->status && !test_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags)) {
3258                 struct hci_cp_remote_name_req cp;
3259                 memset(&cp, 0, sizeof(cp));
3260                 bacpy(&cp.bdaddr, &conn->dst);
3261                 cp.pscan_rep_mode = 0x02;
3262                 hci_send_cmd(hdev, HCI_OP_REMOTE_NAME_REQ, sizeof(cp), &cp);
3263         } else if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags))
3264                 mgmt_device_connected(hdev, &conn->dst, conn->type,
3265                                       conn->dst_type, 0, NULL, 0,
3266                                       conn->dev_class);
3267
3268         if (!hci_outgoing_auth_needed(hdev, conn)) {
3269                 conn->state = BT_CONNECTED;
3270                 hci_proto_connect_cfm(conn, ev->status);
3271                 hci_conn_put(conn);
3272         }
3273
3274 unlock:
3275         hci_dev_unlock(hdev);
3276 }
3277
3278 static void hci_sync_conn_complete_evt(struct hci_dev *hdev,
3279                                        struct sk_buff *skb)
3280 {
3281         struct hci_ev_sync_conn_complete *ev = (void *) skb->data;
3282         struct hci_conn *conn;
3283
3284         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3285
3286         hci_dev_lock(hdev);
3287
3288         conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
3289         if (!conn) {
3290                 if (ev->link_type == ESCO_LINK)
3291                         goto unlock;
3292
3293                 conn = hci_conn_hash_lookup_ba(hdev, ESCO_LINK, &ev->bdaddr);
3294                 if (!conn)
3295                         goto unlock;
3296
3297                 conn->type = SCO_LINK;
3298         }
3299
3300         switch (ev->status) {
3301         case 0x00:
3302                 conn->handle = __le16_to_cpu(ev->handle);
3303                 conn->state  = BT_CONNECTED;
3304
3305                 hci_conn_hold_device(conn);
3306                 hci_conn_add_sysfs(conn);
3307                 break;
3308
3309         case 0x11:      /* Unsupported Feature or Parameter Value */
3310         case 0x1c:      /* SCO interval rejected */
3311         case 0x1a:      /* Unsupported Remote Feature */
3312         case 0x1f:      /* Unspecified error */
3313                 if (conn->out && conn->attempt < 2) {
3314                         conn->pkt_type = (hdev->esco_type & SCO_ESCO_MASK) |
3315                                         (hdev->esco_type & EDR_ESCO_MASK);
3316                         hci_setup_sync(conn, conn->link->handle);
3317                         goto unlock;
3318                 }
3319                 /* fall through */
3320
3321         default:
3322                 conn->state = BT_CLOSED;
3323                 break;
3324         }
3325
3326         hci_proto_connect_cfm(conn, ev->status);
3327         if (ev->status)
3328                 hci_conn_del(conn);
3329
3330 unlock:
3331         hci_dev_unlock(hdev);
3332 }
3333
3334 static void hci_sync_conn_changed_evt(struct hci_dev *hdev, struct sk_buff *skb)
3335 {
3336         BT_DBG("%s", hdev->name);
3337 }
3338
3339 static void hci_sniff_subrate_evt(struct hci_dev *hdev, struct sk_buff *skb)
3340 {
3341         struct hci_ev_sniff_subrate *ev = (void *) skb->data;
3342
3343         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3344 }
3345
3346 static void hci_extended_inquiry_result_evt(struct hci_dev *hdev,
3347                                             struct sk_buff *skb)
3348 {
3349         struct inquiry_data data;
3350         struct extended_inquiry_info *info = (void *) (skb->data + 1);
3351         int num_rsp = *((__u8 *) skb->data);
3352         size_t eir_len;
3353
3354         BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
3355
3356         if (!num_rsp)
3357                 return;
3358
3359         if (test_bit(HCI_PERIODIC_INQ, &hdev->dev_flags))
3360                 return;
3361
3362         hci_dev_lock(hdev);
3363
3364         for (; num_rsp; num_rsp--, info++) {
3365                 bool name_known, ssp;
3366
3367                 bacpy(&data.bdaddr, &info->bdaddr);
3368                 data.pscan_rep_mode     = info->pscan_rep_mode;
3369                 data.pscan_period_mode  = info->pscan_period_mode;
3370                 data.pscan_mode         = 0x00;
3371                 memcpy(data.dev_class, info->dev_class, 3);
3372                 data.clock_offset       = info->clock_offset;
3373                 data.rssi               = info->rssi;
3374                 data.ssp_mode           = 0x01;
3375
3376                 if (test_bit(HCI_MGMT, &hdev->dev_flags))
3377                         name_known = eir_has_data_type(info->data,
3378                                                        sizeof(info->data),
3379                                                        EIR_NAME_COMPLETE);
3380                 else
3381                         name_known = true;
3382
3383                 name_known = hci_inquiry_cache_update(hdev, &data, name_known,
3384                                                       &ssp);
3385                 eir_len = eir_get_length(info->data, sizeof(info->data));
3386                 mgmt_device_found(hdev, &info->bdaddr, ACL_LINK, 0x00,
3387                                   info->dev_class, info->rssi, !name_known,
3388                                   ssp, info->data, eir_len);
3389         }
3390
3391         hci_dev_unlock(hdev);
3392 }
3393
3394 static void hci_key_refresh_complete_evt(struct hci_dev *hdev,
3395                                          struct sk_buff *skb)
3396 {
3397         struct hci_ev_key_refresh_complete *ev = (void *) skb->data;
3398         struct hci_conn *conn;
3399
3400         BT_DBG("%s status 0x%2.2x handle 0x%4.4x", hdev->name, ev->status,
3401                __le16_to_cpu(ev->handle));
3402
3403         hci_dev_lock(hdev);
3404
3405         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
3406         if (!conn)
3407                 goto unlock;
3408
3409         if (!ev->status)
3410                 conn->sec_level = conn->pending_sec_level;
3411
3412         clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
3413
3414         if (ev->status && conn->state == BT_CONNECTED) {
3415                 hci_acl_disconn(conn, HCI_ERROR_AUTH_FAILURE);
3416                 hci_conn_put(conn);
3417                 goto unlock;
3418         }
3419
3420         if (conn->state == BT_CONFIG) {
3421                 if (!ev->status)
3422                         conn->state = BT_CONNECTED;
3423
3424                 hci_proto_connect_cfm(conn, ev->status);
3425                 hci_conn_put(conn);
3426         } else {
3427                 hci_auth_cfm(conn, ev->status);
3428
3429                 hci_conn_hold(conn);
3430                 conn->disc_timeout = HCI_DISCONN_TIMEOUT;
3431                 hci_conn_put(conn);
3432         }
3433
3434 unlock:
3435         hci_dev_unlock(hdev);
3436 }
3437
3438 static u8 hci_get_auth_req(struct hci_conn *conn)
3439 {
3440         /* If remote requests dedicated bonding follow that lead */
3441         if (conn->remote_auth == 0x02 || conn->remote_auth == 0x03) {
3442                 /* If both remote and local IO capabilities allow MITM
3443                  * protection then require it, otherwise don't */
3444                 if (conn->remote_cap == 0x03 || conn->io_capability == 0x03)
3445                         return 0x02;
3446                 else
3447                         return 0x03;
3448         }
3449
3450         /* If remote requests no-bonding follow that lead */
3451         if (conn->remote_auth == 0x00 || conn->remote_auth == 0x01)
3452                 return conn->remote_auth | (conn->auth_type & 0x01);
3453
3454         return conn->auth_type;
3455 }
3456
3457 static void hci_io_capa_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
3458 {
3459         struct hci_ev_io_capa_request *ev = (void *) skb->data;
3460         struct hci_conn *conn;
3461
3462         BT_DBG("%s", hdev->name);
3463
3464         hci_dev_lock(hdev);
3465
3466         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3467         if (!conn)
3468                 goto unlock;
3469
3470         hci_conn_hold(conn);
3471
3472         if (!test_bit(HCI_MGMT, &hdev->dev_flags))
3473                 goto unlock;
3474
3475         if (test_bit(HCI_PAIRABLE, &hdev->dev_flags) ||
3476             (conn->remote_auth & ~0x01) == HCI_AT_NO_BONDING) {
3477                 struct hci_cp_io_capability_reply cp;
3478
3479                 bacpy(&cp.bdaddr, &ev->bdaddr);
3480                 /* Change the IO capability from KeyboardDisplay
3481                  * to DisplayYesNo as it is not supported by BT spec. */
3482                 cp.capability = (conn->io_capability == 0x04) ?
3483                                                 0x01 : conn->io_capability;
3484                 conn->auth_type = hci_get_auth_req(conn);
3485                 cp.authentication = conn->auth_type;
3486
3487                 if (hci_find_remote_oob_data(hdev, &conn->dst) &&
3488                     (conn->out || test_bit(HCI_CONN_REMOTE_OOB, &conn->flags)))
3489                         cp.oob_data = 0x01;
3490                 else
3491                         cp.oob_data = 0x00;
3492
3493                 hci_send_cmd(hdev, HCI_OP_IO_CAPABILITY_REPLY,
3494                              sizeof(cp), &cp);
3495         } else {
3496                 struct hci_cp_io_capability_neg_reply cp;
3497
3498                 bacpy(&cp.bdaddr, &ev->bdaddr);
3499                 cp.reason = HCI_ERROR_PAIRING_NOT_ALLOWED;
3500
3501                 hci_send_cmd(hdev, HCI_OP_IO_CAPABILITY_NEG_REPLY,
3502                              sizeof(cp), &cp);
3503         }
3504
3505 unlock:
3506         hci_dev_unlock(hdev);
3507 }
3508
3509 static void hci_io_capa_reply_evt(struct hci_dev *hdev, struct sk_buff *skb)
3510 {
3511         struct hci_ev_io_capa_reply *ev = (void *) skb->data;
3512         struct hci_conn *conn;
3513
3514         BT_DBG("%s", hdev->name);
3515
3516         hci_dev_lock(hdev);
3517
3518         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3519         if (!conn)
3520                 goto unlock;
3521
3522         conn->remote_cap = ev->capability;
3523         conn->remote_auth = ev->authentication;
3524         if (ev->oob_data)
3525                 set_bit(HCI_CONN_REMOTE_OOB, &conn->flags);
3526
3527 unlock:
3528         hci_dev_unlock(hdev);
3529 }
3530
3531 static void hci_user_confirm_request_evt(struct hci_dev *hdev,
3532                                          struct sk_buff *skb)
3533 {
3534         struct hci_ev_user_confirm_req *ev = (void *) skb->data;
3535         int loc_mitm, rem_mitm, confirm_hint = 0;
3536         struct hci_conn *conn;
3537
3538         BT_DBG("%s", hdev->name);
3539
3540         hci_dev_lock(hdev);
3541
3542         if (!test_bit(HCI_MGMT, &hdev->dev_flags))
3543                 goto unlock;
3544
3545         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3546         if (!conn)
3547                 goto unlock;
3548
3549         loc_mitm = (conn->auth_type & 0x01);
3550         rem_mitm = (conn->remote_auth & 0x01);
3551
3552         /* If we require MITM but the remote device can't provide that
3553          * (it has NoInputNoOutput) then reject the confirmation
3554          * request. The only exception is when we're dedicated bonding
3555          * initiators (connect_cfm_cb set) since then we always have the MITM
3556          * bit set. */
3557         if (!conn->connect_cfm_cb && loc_mitm && conn->remote_cap == 0x03) {
3558                 BT_DBG("Rejecting request: remote device can't provide MITM");
3559                 hci_send_cmd(hdev, HCI_OP_USER_CONFIRM_NEG_REPLY,
3560                              sizeof(ev->bdaddr), &ev->bdaddr);
3561                 goto unlock;
3562         }
3563
3564         /* If no side requires MITM protection; auto-accept */
3565         if ((!loc_mitm || conn->remote_cap == 0x03) &&
3566             (!rem_mitm || conn->io_capability == 0x03)) {
3567
3568                 /* If we're not the initiators request authorization to
3569                  * proceed from user space (mgmt_user_confirm with
3570                  * confirm_hint set to 1). */
3571                 if (!test_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
3572                         BT_DBG("Confirming auto-accept as acceptor");
3573                         confirm_hint = 1;
3574                         goto confirm;
3575                 }
3576
3577                 BT_DBG("Auto-accept of user confirmation with %ums delay",
3578                        hdev->auto_accept_delay);
3579
3580                 if (hdev->auto_accept_delay > 0) {
3581                         int delay = msecs_to_jiffies(hdev->auto_accept_delay);
3582                         mod_timer(&conn->auto_accept_timer, jiffies + delay);
3583                         goto unlock;
3584                 }
3585
3586                 hci_send_cmd(hdev, HCI_OP_USER_CONFIRM_REPLY,
3587                              sizeof(ev->bdaddr), &ev->bdaddr);
3588                 goto unlock;
3589         }
3590
3591 confirm:
3592         mgmt_user_confirm_request(hdev, &ev->bdaddr, ACL_LINK, 0, ev->passkey,
3593                                   confirm_hint);
3594
3595 unlock:
3596         hci_dev_unlock(hdev);
3597 }
3598
3599 static void hci_user_passkey_request_evt(struct hci_dev *hdev,
3600                                          struct sk_buff *skb)
3601 {
3602         struct hci_ev_user_passkey_req *ev = (void *) skb->data;
3603
3604         BT_DBG("%s", hdev->name);
3605
3606         if (test_bit(HCI_MGMT, &hdev->dev_flags))
3607                 mgmt_user_passkey_request(hdev, &ev->bdaddr, ACL_LINK, 0);
3608 }
3609
3610 static void hci_user_passkey_notify_evt(struct hci_dev *hdev,
3611                                         struct sk_buff *skb)
3612 {
3613         struct hci_ev_user_passkey_notify *ev = (void *) skb->data;
3614         struct hci_conn *conn;
3615
3616         BT_DBG("%s", hdev->name);
3617
3618         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3619         if (!conn)
3620                 return;
3621
3622         conn->passkey_notify = __le32_to_cpu(ev->passkey);
3623         conn->passkey_entered = 0;
3624
3625         if (test_bit(HCI_MGMT, &hdev->dev_flags))
3626                 mgmt_user_passkey_notify(hdev, &conn->dst, conn->type,
3627                                          conn->dst_type, conn->passkey_notify,
3628                                          conn->passkey_entered);
3629 }
3630
3631 static void hci_keypress_notify_evt(struct hci_dev *hdev, struct sk_buff *skb)
3632 {
3633         struct hci_ev_keypress_notify *ev = (void *) skb->data;
3634         struct hci_conn *conn;
3635
3636         BT_DBG("%s", hdev->name);
3637
3638         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3639         if (!conn)
3640                 return;
3641
3642         switch (ev->type) {
3643         case HCI_KEYPRESS_STARTED:
3644                 conn->passkey_entered = 0;
3645                 return;
3646
3647         case HCI_KEYPRESS_ENTERED:
3648                 conn->passkey_entered++;
3649                 break;
3650
3651         case HCI_KEYPRESS_ERASED:
3652                 conn->passkey_entered--;
3653                 break;
3654
3655         case HCI_KEYPRESS_CLEARED:
3656                 conn->passkey_entered = 0;
3657                 break;
3658
3659         case HCI_KEYPRESS_COMPLETED:
3660                 return;
3661         }
3662
3663         if (test_bit(HCI_MGMT, &hdev->dev_flags))
3664                 mgmt_user_passkey_notify(hdev, &conn->dst, conn->type,
3665                                          conn->dst_type, conn->passkey_notify,
3666                                          conn->passkey_entered);
3667 }
3668
3669 static void hci_simple_pair_complete_evt(struct hci_dev *hdev,
3670                                          struct sk_buff *skb)
3671 {
3672         struct hci_ev_simple_pair_complete *ev = (void *) skb->data;
3673         struct hci_conn *conn;
3674
3675         BT_DBG("%s", hdev->name);
3676
3677         hci_dev_lock(hdev);
3678
3679         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3680         if (!conn)
3681                 goto unlock;
3682
3683         /* To avoid duplicate auth_failed events to user space we check
3684          * the HCI_CONN_AUTH_PEND flag which will be set if we
3685          * initiated the authentication. A traditional auth_complete
3686          * event gets always produced as initiator and is also mapped to
3687          * the mgmt_auth_failed event */
3688         if (!test_bit(HCI_CONN_AUTH_PEND, &conn->flags) && ev->status)
3689                 mgmt_auth_failed(hdev, &conn->dst, conn->type, conn->dst_type,
3690                                  ev->status);
3691
3692         hci_conn_put(conn);
3693
3694 unlock:
3695         hci_dev_unlock(hdev);
3696 }
3697
3698 static void hci_remote_host_features_evt(struct hci_dev *hdev,
3699                                          struct sk_buff *skb)
3700 {
3701         struct hci_ev_remote_host_features *ev = (void *) skb->data;
3702         struct inquiry_entry *ie;
3703
3704         BT_DBG("%s", hdev->name);
3705
3706         hci_dev_lock(hdev);
3707
3708         ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr);
3709         if (ie)
3710                 ie->data.ssp_mode = (ev->features[0] & LMP_HOST_SSP);
3711
3712         hci_dev_unlock(hdev);
3713 }
3714
3715 static void hci_remote_oob_data_request_evt(struct hci_dev *hdev,
3716                                             struct sk_buff *skb)
3717 {
3718         struct hci_ev_remote_oob_data_request *ev = (void *) skb->data;
3719         struct oob_data *data;
3720
3721         BT_DBG("%s", hdev->name);
3722
3723         hci_dev_lock(hdev);
3724
3725         if (!test_bit(HCI_MGMT, &hdev->dev_flags))
3726                 goto unlock;
3727
3728         data = hci_find_remote_oob_data(hdev, &ev->bdaddr);
3729         if (data) {
3730                 struct hci_cp_remote_oob_data_reply cp;
3731
3732                 bacpy(&cp.bdaddr, &ev->bdaddr);
3733                 memcpy(cp.hash, data->hash, sizeof(cp.hash));
3734                 memcpy(cp.randomizer, data->randomizer, sizeof(cp.randomizer));
3735
3736                 hci_send_cmd(hdev, HCI_OP_REMOTE_OOB_DATA_REPLY, sizeof(cp),
3737                              &cp);
3738         } else {
3739                 struct hci_cp_remote_oob_data_neg_reply cp;
3740
3741                 bacpy(&cp.bdaddr, &ev->bdaddr);
3742                 hci_send_cmd(hdev, HCI_OP_REMOTE_OOB_DATA_NEG_REPLY, sizeof(cp),
3743                              &cp);
3744         }
3745
3746 unlock:
3747         hci_dev_unlock(hdev);
3748 }
3749
3750 static void hci_phy_link_complete_evt(struct hci_dev *hdev,
3751                                       struct sk_buff *skb)
3752 {
3753         struct hci_ev_phy_link_complete *ev = (void *) skb->data;
3754         struct hci_conn *hcon, *bredr_hcon;
3755
3756         BT_DBG("%s handle 0x%2.2x status 0x%2.2x", hdev->name, ev->phy_handle,
3757                ev->status);
3758
3759         hci_dev_lock(hdev);
3760
3761         hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle);
3762         if (!hcon) {
3763                 hci_dev_unlock(hdev);
3764                 return;
3765         }
3766
3767         if (ev->status) {
3768                 hci_conn_del(hcon);
3769                 hci_dev_unlock(hdev);
3770                 return;
3771         }
3772
3773         bredr_hcon = hcon->amp_mgr->l2cap_conn->hcon;
3774
3775         hcon->state = BT_CONNECTED;
3776         bacpy(&hcon->dst, &bredr_hcon->dst);
3777
3778         hci_conn_hold(hcon);
3779         hcon->disc_timeout = HCI_DISCONN_TIMEOUT;
3780         hci_conn_put(hcon);
3781
3782         hci_conn_hold_device(hcon);
3783         hci_conn_add_sysfs(hcon);
3784
3785         amp_physical_cfm(bredr_hcon, hcon);
3786
3787         hci_dev_unlock(hdev);
3788 }
3789
3790 static void hci_loglink_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
3791 {
3792         struct hci_ev_logical_link_complete *ev = (void *) skb->data;
3793         struct hci_conn *hcon;
3794         struct hci_chan *hchan;
3795         struct amp_mgr *mgr;
3796
3797         BT_DBG("%s log_handle 0x%4.4x phy_handle 0x%2.2x status 0x%2.2x",
3798                hdev->name, le16_to_cpu(ev->handle), ev->phy_handle,
3799                ev->status);
3800
3801         hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle);
3802         if (!hcon)
3803                 return;
3804
3805         /* Create AMP hchan */
3806         hchan = hci_chan_create(hcon);
3807         if (!hchan)
3808                 return;
3809
3810         hchan->handle = le16_to_cpu(ev->handle);
3811
3812         BT_DBG("hcon %p mgr %p hchan %p", hcon, hcon->amp_mgr, hchan);
3813
3814         mgr = hcon->amp_mgr;
3815         if (mgr && mgr->bredr_chan) {
3816                 struct l2cap_chan *bredr_chan = mgr->bredr_chan;
3817
3818                 l2cap_chan_lock(bredr_chan);
3819
3820                 bredr_chan->conn->mtu = hdev->block_mtu;
3821                 l2cap_logical_cfm(bredr_chan, hchan, 0);
3822                 hci_conn_hold(hcon);
3823
3824                 l2cap_chan_unlock(bredr_chan);
3825         }
3826 }
3827
3828 static void hci_disconn_loglink_complete_evt(struct hci_dev *hdev,
3829                                              struct sk_buff *skb)
3830 {
3831         struct hci_ev_disconn_logical_link_complete *ev = (void *) skb->data;
3832         struct hci_chan *hchan;
3833
3834         BT_DBG("%s log handle 0x%4.4x status 0x%2.2x", hdev->name,
3835                le16_to_cpu(ev->handle), ev->status);
3836
3837         if (ev->status)
3838                 return;
3839
3840         hci_dev_lock(hdev);
3841
3842         hchan = hci_chan_lookup_handle(hdev, le16_to_cpu(ev->handle));
3843         if (!hchan)
3844                 goto unlock;
3845
3846         amp_destroy_logical_link(hchan, ev->reason);
3847
3848 unlock:
3849         hci_dev_unlock(hdev);
3850 }
3851
3852 static void hci_disconn_phylink_complete_evt(struct hci_dev *hdev,
3853                                              struct sk_buff *skb)
3854 {
3855         struct hci_ev_disconn_phy_link_complete *ev = (void *) skb->data;
3856         struct hci_conn *hcon;
3857
3858         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3859
3860         if (ev->status)
3861                 return;
3862
3863         hci_dev_lock(hdev);
3864
3865         hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle);
3866         if (hcon) {
3867                 hcon->state = BT_CLOSED;
3868                 hci_conn_del(hcon);
3869         }
3870
3871         hci_dev_unlock(hdev);
3872 }
3873
3874 static void hci_le_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
3875 {
3876         struct hci_ev_le_conn_complete *ev = (void *) skb->data;
3877         struct hci_conn *conn;
3878
3879         BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3880
3881         hci_dev_lock(hdev);
3882
3883         conn = hci_conn_hash_lookup_state(hdev, LE_LINK, BT_CONNECT);
3884         if (!conn) {
3885                 conn = hci_conn_add(hdev, LE_LINK, &ev->bdaddr);
3886                 if (!conn) {
3887                         BT_ERR("No memory for new connection");
3888                         goto unlock;
3889                 }
3890
3891                 conn->dst_type = ev->bdaddr_type;
3892
3893                 if (ev->role == LE_CONN_ROLE_MASTER) {
3894                         conn->out = true;
3895                         conn->link_mode |= HCI_LM_MASTER;
3896                 }
3897         }
3898
3899         if (ev->status) {
3900                 mgmt_connect_failed(hdev, &conn->dst, conn->type,
3901                                     conn->dst_type, ev->status);
3902                 hci_proto_connect_cfm(conn, ev->status);
3903                 conn->state = BT_CLOSED;
3904                 hci_conn_del(conn);
3905                 goto unlock;
3906         }
3907
3908         if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags))
3909                 mgmt_device_connected(hdev, &ev->bdaddr, conn->type,
3910                                       conn->dst_type, 0, NULL, 0, NULL);
3911
3912         conn->sec_level = BT_SECURITY_LOW;
3913         conn->handle = __le16_to_cpu(ev->handle);
3914         conn->state = BT_CONNECTED;
3915
3916         hci_conn_hold_device(conn);
3917         hci_conn_add_sysfs(conn);
3918
3919         hci_proto_connect_cfm(conn, ev->status);
3920
3921 unlock:
3922         hci_dev_unlock(hdev);
3923 }
3924
3925 static void hci_le_adv_report_evt(struct hci_dev *hdev, struct sk_buff *skb)
3926 {
3927         u8 num_reports = skb->data[0];
3928         void *ptr = &skb->data[1];
3929         s8 rssi;
3930
3931         hci_dev_lock(hdev);
3932
3933         while (num_reports--) {
3934                 struct hci_ev_le_advertising_info *ev = ptr;
3935
3936                 rssi = ev->data[ev->length];
3937                 mgmt_device_found(hdev, &ev->bdaddr, LE_LINK, ev->bdaddr_type,
3938                                   NULL, rssi, 0, 1, ev->data, ev->length);
3939
3940                 ptr += sizeof(*ev) + ev->length + 1;
3941         }
3942
3943         hci_dev_unlock(hdev);
3944 }
3945
3946 static void hci_le_ltk_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
3947 {
3948         struct hci_ev_le_ltk_req *ev = (void *) skb->data;
3949         struct hci_cp_le_ltk_reply cp;
3950         struct hci_cp_le_ltk_neg_reply neg;
3951         struct hci_conn *conn;
3952         struct smp_ltk *ltk;
3953
3954         BT_DBG("%s handle 0x%4.4x", hdev->name, __le16_to_cpu(ev->handle));
3955
3956         hci_dev_lock(hdev);
3957
3958         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
3959         if (conn == NULL)
3960                 goto not_found;
3961
3962         ltk = hci_find_ltk(hdev, ev->ediv, ev->random);
3963         if (ltk == NULL)
3964                 goto not_found;
3965
3966         memcpy(cp.ltk, ltk->val, sizeof(ltk->val));
3967         cp.handle = cpu_to_le16(conn->handle);
3968
3969         if (ltk->authenticated)
3970                 conn->sec_level = BT_SECURITY_HIGH;
3971
3972         hci_send_cmd(hdev, HCI_OP_LE_LTK_REPLY, sizeof(cp), &cp);
3973
3974         if (ltk->type & HCI_SMP_STK) {
3975                 list_del(&ltk->list);
3976                 kfree(ltk);
3977         }
3978
3979         hci_dev_unlock(hdev);
3980
3981         return;
3982
3983 not_found:
3984         neg.handle = ev->handle;
3985         hci_send_cmd(hdev, HCI_OP_LE_LTK_NEG_REPLY, sizeof(neg), &neg);
3986         hci_dev_unlock(hdev);
3987 }
3988
3989 static void hci_le_meta_evt(struct hci_dev *hdev, struct sk_buff *skb)
3990 {
3991         struct hci_ev_le_meta *le_ev = (void *) skb->data;
3992
3993         skb_pull(skb, sizeof(*le_ev));
3994
3995         switch (le_ev->subevent) {
3996         case HCI_EV_LE_CONN_COMPLETE:
3997                 hci_le_conn_complete_evt(hdev, skb);
3998                 break;
3999
4000         case HCI_EV_LE_ADVERTISING_REPORT:
4001                 hci_le_adv_report_evt(hdev, skb);
4002                 break;
4003
4004         case HCI_EV_LE_LTK_REQ:
4005                 hci_le_ltk_request_evt(hdev, skb);
4006                 break;
4007
4008         default:
4009                 break;
4010         }
4011 }
4012
4013 static void hci_chan_selected_evt(struct hci_dev *hdev, struct sk_buff *skb)
4014 {
4015         struct hci_ev_channel_selected *ev = (void *) skb->data;
4016         struct hci_conn *hcon;
4017
4018         BT_DBG("%s handle 0x%2.2x", hdev->name, ev->phy_handle);
4019
4020         skb_pull(skb, sizeof(*ev));
4021
4022         hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle);
4023         if (!hcon)
4024                 return;
4025
4026         amp_read_loc_assoc_final_data(hdev, hcon);
4027 }
4028
4029 void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb)
4030 {
4031         struct hci_event_hdr *hdr = (void *) skb->data;
4032         __u8 event = hdr->evt;
4033
4034         skb_pull(skb, HCI_EVENT_HDR_SIZE);
4035
4036         switch (event) {
4037         case HCI_EV_INQUIRY_COMPLETE:
4038                 hci_inquiry_complete_evt(hdev, skb);
4039                 break;
4040
4041         case HCI_EV_INQUIRY_RESULT:
4042                 hci_inquiry_result_evt(hdev, skb);
4043                 break;
4044
4045         case HCI_EV_CONN_COMPLETE:
4046                 hci_conn_complete_evt(hdev, skb);
4047                 break;
4048
4049         case HCI_EV_CONN_REQUEST:
4050                 hci_conn_request_evt(hdev, skb);
4051                 break;
4052
4053         case HCI_EV_DISCONN_COMPLETE:
4054                 hci_disconn_complete_evt(hdev, skb);
4055                 break;
4056
4057         case HCI_EV_AUTH_COMPLETE:
4058                 hci_auth_complete_evt(hdev, skb);
4059                 break;
4060
4061         case HCI_EV_REMOTE_NAME:
4062                 hci_remote_name_evt(hdev, skb);
4063                 break;
4064
4065         case HCI_EV_ENCRYPT_CHANGE:
4066                 hci_encrypt_change_evt(hdev, skb);
4067                 break;
4068
4069         case HCI_EV_CHANGE_LINK_KEY_COMPLETE:
4070                 hci_change_link_key_complete_evt(hdev, skb);
4071                 break;
4072
4073         case HCI_EV_REMOTE_FEATURES:
4074                 hci_remote_features_evt(hdev, skb);
4075                 break;
4076
4077         case HCI_EV_REMOTE_VERSION:
4078                 hci_remote_version_evt(hdev, skb);
4079                 break;
4080
4081         case HCI_EV_QOS_SETUP_COMPLETE:
4082                 hci_qos_setup_complete_evt(hdev, skb);
4083                 break;
4084
4085         case HCI_EV_CMD_COMPLETE:
4086                 hci_cmd_complete_evt(hdev, skb);
4087                 break;
4088
4089         case HCI_EV_CMD_STATUS:
4090                 hci_cmd_status_evt(hdev, skb);
4091                 break;
4092
4093         case HCI_EV_ROLE_CHANGE:
4094                 hci_role_change_evt(hdev, skb);
4095                 break;
4096
4097         case HCI_EV_NUM_COMP_PKTS:
4098                 hci_num_comp_pkts_evt(hdev, skb);
4099                 break;
4100
4101         case HCI_EV_MODE_CHANGE:
4102                 hci_mode_change_evt(hdev, skb);
4103                 break;
4104
4105         case HCI_EV_PIN_CODE_REQ:
4106                 hci_pin_code_request_evt(hdev, skb);
4107                 break;
4108
4109         case HCI_EV_LINK_KEY_REQ:
4110                 hci_link_key_request_evt(hdev, skb);
4111                 break;
4112
4113         case HCI_EV_LINK_KEY_NOTIFY:
4114                 hci_link_key_notify_evt(hdev, skb);
4115                 break;
4116
4117         case HCI_EV_CLOCK_OFFSET:
4118                 hci_clock_offset_evt(hdev, skb);
4119                 break;
4120
4121         case HCI_EV_PKT_TYPE_CHANGE:
4122                 hci_pkt_type_change_evt(hdev, skb);
4123                 break;
4124
4125         case HCI_EV_PSCAN_REP_MODE:
4126                 hci_pscan_rep_mode_evt(hdev, skb);
4127                 break;
4128
4129         case HCI_EV_INQUIRY_RESULT_WITH_RSSI:
4130                 hci_inquiry_result_with_rssi_evt(hdev, skb);
4131                 break;
4132
4133         case HCI_EV_REMOTE_EXT_FEATURES:
4134                 hci_remote_ext_features_evt(hdev, skb);
4135                 break;
4136
4137         case HCI_EV_SYNC_CONN_COMPLETE:
4138                 hci_sync_conn_complete_evt(hdev, skb);
4139                 break;
4140
4141         case HCI_EV_SYNC_CONN_CHANGED:
4142                 hci_sync_conn_changed_evt(hdev, skb);
4143                 break;
4144
4145         case HCI_EV_SNIFF_SUBRATE:
4146                 hci_sniff_subrate_evt(hdev, skb);
4147                 break;
4148
4149         case HCI_EV_EXTENDED_INQUIRY_RESULT:
4150                 hci_extended_inquiry_result_evt(hdev, skb);
4151                 break;
4152
4153         case HCI_EV_KEY_REFRESH_COMPLETE:
4154                 hci_key_refresh_complete_evt(hdev, skb);
4155                 break;
4156
4157         case HCI_EV_IO_CAPA_REQUEST:
4158                 hci_io_capa_request_evt(hdev, skb);
4159                 break;
4160
4161         case HCI_EV_IO_CAPA_REPLY:
4162                 hci_io_capa_reply_evt(hdev, skb);
4163                 break;
4164
4165         case HCI_EV_USER_CONFIRM_REQUEST:
4166                 hci_user_confirm_request_evt(hdev, skb);
4167                 break;
4168
4169         case HCI_EV_USER_PASSKEY_REQUEST:
4170                 hci_user_passkey_request_evt(hdev, skb);
4171                 break;
4172
4173         case HCI_EV_USER_PASSKEY_NOTIFY:
4174                 hci_user_passkey_notify_evt(hdev, skb);
4175                 break;
4176
4177         case HCI_EV_KEYPRESS_NOTIFY:
4178                 hci_keypress_notify_evt(hdev, skb);
4179                 break;
4180
4181         case HCI_EV_SIMPLE_PAIR_COMPLETE:
4182                 hci_simple_pair_complete_evt(hdev, skb);
4183                 break;
4184
4185         case HCI_EV_REMOTE_HOST_FEATURES:
4186                 hci_remote_host_features_evt(hdev, skb);
4187                 break;
4188
4189         case HCI_EV_LE_META:
4190                 hci_le_meta_evt(hdev, skb);
4191                 break;
4192
4193         case HCI_EV_CHANNEL_SELECTED:
4194                 hci_chan_selected_evt(hdev, skb);
4195                 break;
4196
4197         case HCI_EV_REMOTE_OOB_DATA_REQUEST:
4198                 hci_remote_oob_data_request_evt(hdev, skb);
4199                 break;
4200
4201         case HCI_EV_PHY_LINK_COMPLETE:
4202                 hci_phy_link_complete_evt(hdev, skb);
4203                 break;
4204
4205         case HCI_EV_LOGICAL_LINK_COMPLETE:
4206                 hci_loglink_complete_evt(hdev, skb);
4207                 break;
4208
4209         case HCI_EV_DISCONN_LOGICAL_LINK_COMPLETE:
4210                 hci_disconn_loglink_complete_evt(hdev, skb);
4211                 break;
4212
4213         case HCI_EV_DISCONN_PHY_LINK_COMPLETE:
4214                 hci_disconn_phylink_complete_evt(hdev, skb);
4215                 break;
4216
4217         case HCI_EV_NUM_COMP_BLOCKS:
4218                 hci_num_comp_blocks_evt(hdev, skb);
4219                 break;
4220
4221         default:
4222                 BT_DBG("%s event 0x%2.2x", hdev->name, event);
4223                 break;
4224         }
4225
4226         kfree_skb(skb);
4227         hdev->stat.evt_rx++;
4228 }