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