2 BlueZ - Bluetooth protocol stack for Linux
3 Copyright (c) 2000-2001, 2010, Code Aurora Forum. All rights reserved.
5 Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
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;
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.
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.
25 /* Bluetooth HCI event handling. */
27 #include <asm/unaligned.h>
29 #include <net/bluetooth/bluetooth.h>
30 #include <net/bluetooth/hci_core.h>
31 #include <net/bluetooth/mgmt.h>
36 /* Handle HCI Event packets */
38 static void hci_cc_inquiry_cancel(struct hci_dev *hdev, struct sk_buff *skb)
40 __u8 status = *((__u8 *) skb->data);
42 BT_DBG("%s status 0x%2.2x", hdev->name, status);
47 clear_bit(HCI_INQUIRY, &hdev->flags);
48 smp_mb__after_clear_bit(); /* wake_up_bit advises about this barrier */
49 wake_up_bit(&hdev->flags, HCI_INQUIRY);
51 hci_conn_check_pending(hdev);
54 static void hci_cc_periodic_inq(struct hci_dev *hdev, struct sk_buff *skb)
56 __u8 status = *((__u8 *) skb->data);
58 BT_DBG("%s status 0x%2.2x", hdev->name, status);
63 set_bit(HCI_PERIODIC_INQ, &hdev->dev_flags);
66 static void hci_cc_exit_periodic_inq(struct hci_dev *hdev, struct sk_buff *skb)
68 __u8 status = *((__u8 *) skb->data);
70 BT_DBG("%s status 0x%2.2x", hdev->name, status);
75 clear_bit(HCI_PERIODIC_INQ, &hdev->dev_flags);
77 hci_conn_check_pending(hdev);
80 static void hci_cc_remote_name_req_cancel(struct hci_dev *hdev,
83 BT_DBG("%s", hdev->name);
86 static void hci_cc_role_discovery(struct hci_dev *hdev, struct sk_buff *skb)
88 struct hci_rp_role_discovery *rp = (void *) skb->data;
89 struct hci_conn *conn;
91 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
98 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
101 conn->link_mode &= ~HCI_LM_MASTER;
103 conn->link_mode |= HCI_LM_MASTER;
106 hci_dev_unlock(hdev);
109 static void hci_cc_read_link_policy(struct hci_dev *hdev, struct sk_buff *skb)
111 struct hci_rp_read_link_policy *rp = (void *) skb->data;
112 struct hci_conn *conn;
114 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
121 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
123 conn->link_policy = __le16_to_cpu(rp->policy);
125 hci_dev_unlock(hdev);
128 static void hci_cc_write_link_policy(struct hci_dev *hdev, struct sk_buff *skb)
130 struct hci_rp_write_link_policy *rp = (void *) skb->data;
131 struct hci_conn *conn;
134 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
139 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_LINK_POLICY);
145 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
147 conn->link_policy = get_unaligned_le16(sent + 2);
149 hci_dev_unlock(hdev);
152 static void hci_cc_read_def_link_policy(struct hci_dev *hdev,
155 struct hci_rp_read_def_link_policy *rp = (void *) skb->data;
157 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
162 hdev->link_policy = __le16_to_cpu(rp->policy);
165 static void hci_cc_write_def_link_policy(struct hci_dev *hdev,
168 __u8 status = *((__u8 *) skb->data);
171 BT_DBG("%s status 0x%2.2x", hdev->name, status);
173 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_DEF_LINK_POLICY);
178 hdev->link_policy = get_unaligned_le16(sent);
181 static void hci_cc_reset(struct hci_dev *hdev, struct sk_buff *skb)
183 __u8 status = *((__u8 *) skb->data);
185 BT_DBG("%s status 0x%2.2x", hdev->name, status);
187 clear_bit(HCI_RESET, &hdev->flags);
189 /* Reset all non-persistent flags */
190 hdev->dev_flags &= ~HCI_PERSISTENT_MASK;
192 hdev->discovery.state = DISCOVERY_STOPPED;
193 hdev->inq_tx_power = HCI_TX_POWER_INVALID;
194 hdev->adv_tx_power = HCI_TX_POWER_INVALID;
196 memset(hdev->adv_data, 0, sizeof(hdev->adv_data));
197 hdev->adv_data_len = 0;
199 memset(hdev->scan_rsp_data, 0, sizeof(hdev->scan_rsp_data));
200 hdev->scan_rsp_data_len = 0;
202 hdev->ssp_debug_mode = 0;
205 static void hci_cc_write_local_name(struct hci_dev *hdev, struct sk_buff *skb)
207 __u8 status = *((__u8 *) skb->data);
210 BT_DBG("%s status 0x%2.2x", hdev->name, status);
212 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_LOCAL_NAME);
218 if (test_bit(HCI_MGMT, &hdev->dev_flags))
219 mgmt_set_local_name_complete(hdev, sent, status);
221 memcpy(hdev->dev_name, sent, HCI_MAX_NAME_LENGTH);
223 hci_dev_unlock(hdev);
226 static void hci_cc_read_local_name(struct hci_dev *hdev, struct sk_buff *skb)
228 struct hci_rp_read_local_name *rp = (void *) skb->data;
230 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
235 if (test_bit(HCI_SETUP, &hdev->dev_flags))
236 memcpy(hdev->dev_name, rp->name, HCI_MAX_NAME_LENGTH);
239 static void hci_cc_write_auth_enable(struct hci_dev *hdev, struct sk_buff *skb)
241 __u8 status = *((__u8 *) skb->data);
244 BT_DBG("%s status 0x%2.2x", hdev->name, status);
246 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_AUTH_ENABLE);
251 __u8 param = *((__u8 *) sent);
253 if (param == AUTH_ENABLED)
254 set_bit(HCI_AUTH, &hdev->flags);
256 clear_bit(HCI_AUTH, &hdev->flags);
259 if (test_bit(HCI_MGMT, &hdev->dev_flags))
260 mgmt_auth_enable_complete(hdev, status);
263 static void hci_cc_write_encrypt_mode(struct hci_dev *hdev, struct sk_buff *skb)
265 __u8 status = *((__u8 *) skb->data);
268 BT_DBG("%s status 0x%2.2x", hdev->name, status);
270 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_ENCRYPT_MODE);
275 __u8 param = *((__u8 *) sent);
278 set_bit(HCI_ENCRYPT, &hdev->flags);
280 clear_bit(HCI_ENCRYPT, &hdev->flags);
284 static void hci_cc_write_scan_enable(struct hci_dev *hdev, struct sk_buff *skb)
286 __u8 param, status = *((__u8 *) skb->data);
287 int old_pscan, old_iscan;
290 BT_DBG("%s status 0x%2.2x", hdev->name, status);
292 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_SCAN_ENABLE);
296 param = *((__u8 *) sent);
301 mgmt_write_scan_failed(hdev, param, status);
302 hdev->discov_timeout = 0;
306 /* We need to ensure that we set this back on if someone changed
307 * the scan mode through a raw HCI socket.
309 set_bit(HCI_BREDR_ENABLED, &hdev->dev_flags);
311 old_pscan = test_and_clear_bit(HCI_PSCAN, &hdev->flags);
312 old_iscan = test_and_clear_bit(HCI_ISCAN, &hdev->flags);
314 if (param & SCAN_INQUIRY) {
315 set_bit(HCI_ISCAN, &hdev->flags);
317 mgmt_discoverable(hdev, 1);
318 } else if (old_iscan)
319 mgmt_discoverable(hdev, 0);
321 if (param & SCAN_PAGE) {
322 set_bit(HCI_PSCAN, &hdev->flags);
324 mgmt_connectable(hdev, 1);
325 } else if (old_pscan)
326 mgmt_connectable(hdev, 0);
329 hci_dev_unlock(hdev);
332 static void hci_cc_read_class_of_dev(struct hci_dev *hdev, struct sk_buff *skb)
334 struct hci_rp_read_class_of_dev *rp = (void *) skb->data;
336 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
341 memcpy(hdev->dev_class, rp->dev_class, 3);
343 BT_DBG("%s class 0x%.2x%.2x%.2x", hdev->name,
344 hdev->dev_class[2], hdev->dev_class[1], hdev->dev_class[0]);
347 static void hci_cc_write_class_of_dev(struct hci_dev *hdev, struct sk_buff *skb)
349 __u8 status = *((__u8 *) skb->data);
352 BT_DBG("%s status 0x%2.2x", hdev->name, status);
354 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_CLASS_OF_DEV);
361 memcpy(hdev->dev_class, sent, 3);
363 if (test_bit(HCI_MGMT, &hdev->dev_flags))
364 mgmt_set_class_of_dev_complete(hdev, sent, status);
366 hci_dev_unlock(hdev);
369 static void hci_cc_read_voice_setting(struct hci_dev *hdev, struct sk_buff *skb)
371 struct hci_rp_read_voice_setting *rp = (void *) skb->data;
374 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
379 setting = __le16_to_cpu(rp->voice_setting);
381 if (hdev->voice_setting == setting)
384 hdev->voice_setting = setting;
386 BT_DBG("%s voice setting 0x%4.4x", hdev->name, setting);
389 hdev->notify(hdev, HCI_NOTIFY_VOICE_SETTING);
392 static void hci_cc_write_voice_setting(struct hci_dev *hdev,
395 __u8 status = *((__u8 *) skb->data);
399 BT_DBG("%s status 0x%2.2x", hdev->name, status);
404 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_VOICE_SETTING);
408 setting = get_unaligned_le16(sent);
410 if (hdev->voice_setting == setting)
413 hdev->voice_setting = setting;
415 BT_DBG("%s voice setting 0x%4.4x", hdev->name, setting);
418 hdev->notify(hdev, HCI_NOTIFY_VOICE_SETTING);
421 static void hci_cc_read_num_supported_iac(struct hci_dev *hdev,
424 struct hci_rp_read_num_supported_iac *rp = (void *) skb->data;
426 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
431 hdev->num_iac = rp->num_iac;
433 BT_DBG("%s num iac %d", hdev->name, hdev->num_iac);
436 static void hci_cc_write_ssp_mode(struct hci_dev *hdev, struct sk_buff *skb)
438 __u8 status = *((__u8 *) skb->data);
439 struct hci_cp_write_ssp_mode *sent;
441 BT_DBG("%s status 0x%2.2x", hdev->name, status);
443 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_SSP_MODE);
449 hdev->features[1][0] |= LMP_HOST_SSP;
451 hdev->features[1][0] &= ~LMP_HOST_SSP;
454 if (test_bit(HCI_MGMT, &hdev->dev_flags))
455 mgmt_ssp_enable_complete(hdev, sent->mode, status);
458 set_bit(HCI_SSP_ENABLED, &hdev->dev_flags);
460 clear_bit(HCI_SSP_ENABLED, &hdev->dev_flags);
464 static void hci_cc_write_sc_support(struct hci_dev *hdev, struct sk_buff *skb)
466 u8 status = *((u8 *) skb->data);
467 struct hci_cp_write_sc_support *sent;
469 BT_DBG("%s status 0x%2.2x", hdev->name, status);
471 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_SC_SUPPORT);
477 hdev->features[1][0] |= LMP_HOST_SC;
479 hdev->features[1][0] &= ~LMP_HOST_SC;
482 if (test_bit(HCI_MGMT, &hdev->dev_flags))
483 mgmt_sc_enable_complete(hdev, sent->support, status);
486 set_bit(HCI_SC_ENABLED, &hdev->dev_flags);
488 clear_bit(HCI_SC_ENABLED, &hdev->dev_flags);
492 static void hci_cc_read_local_version(struct hci_dev *hdev, struct sk_buff *skb)
494 struct hci_rp_read_local_version *rp = (void *) skb->data;
496 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
501 if (test_bit(HCI_SETUP, &hdev->dev_flags)) {
502 hdev->hci_ver = rp->hci_ver;
503 hdev->hci_rev = __le16_to_cpu(rp->hci_rev);
504 hdev->lmp_ver = rp->lmp_ver;
505 hdev->manufacturer = __le16_to_cpu(rp->manufacturer);
506 hdev->lmp_subver = __le16_to_cpu(rp->lmp_subver);
510 static void hci_cc_read_local_commands(struct hci_dev *hdev,
513 struct hci_rp_read_local_commands *rp = (void *) skb->data;
515 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
520 if (test_bit(HCI_SETUP, &hdev->dev_flags))
521 memcpy(hdev->commands, rp->commands, sizeof(hdev->commands));
524 static void hci_cc_read_local_features(struct hci_dev *hdev,
527 struct hci_rp_read_local_features *rp = (void *) skb->data;
529 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
534 memcpy(hdev->features, rp->features, 8);
536 /* Adjust default settings according to features
537 * supported by device. */
539 if (hdev->features[0][0] & LMP_3SLOT)
540 hdev->pkt_type |= (HCI_DM3 | HCI_DH3);
542 if (hdev->features[0][0] & LMP_5SLOT)
543 hdev->pkt_type |= (HCI_DM5 | HCI_DH5);
545 if (hdev->features[0][1] & LMP_HV2) {
546 hdev->pkt_type |= (HCI_HV2);
547 hdev->esco_type |= (ESCO_HV2);
550 if (hdev->features[0][1] & LMP_HV3) {
551 hdev->pkt_type |= (HCI_HV3);
552 hdev->esco_type |= (ESCO_HV3);
555 if (lmp_esco_capable(hdev))
556 hdev->esco_type |= (ESCO_EV3);
558 if (hdev->features[0][4] & LMP_EV4)
559 hdev->esco_type |= (ESCO_EV4);
561 if (hdev->features[0][4] & LMP_EV5)
562 hdev->esco_type |= (ESCO_EV5);
564 if (hdev->features[0][5] & LMP_EDR_ESCO_2M)
565 hdev->esco_type |= (ESCO_2EV3);
567 if (hdev->features[0][5] & LMP_EDR_ESCO_3M)
568 hdev->esco_type |= (ESCO_3EV3);
570 if (hdev->features[0][5] & LMP_EDR_3S_ESCO)
571 hdev->esco_type |= (ESCO_2EV5 | ESCO_3EV5);
574 static void hci_cc_read_local_ext_features(struct hci_dev *hdev,
577 struct hci_rp_read_local_ext_features *rp = (void *) skb->data;
579 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
584 if (hdev->max_page < rp->max_page)
585 hdev->max_page = rp->max_page;
587 if (rp->page < HCI_MAX_PAGES)
588 memcpy(hdev->features[rp->page], rp->features, 8);
591 static void hci_cc_read_flow_control_mode(struct hci_dev *hdev,
594 struct hci_rp_read_flow_control_mode *rp = (void *) skb->data;
596 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
599 hdev->flow_ctl_mode = rp->mode;
602 static void hci_cc_read_buffer_size(struct hci_dev *hdev, struct sk_buff *skb)
604 struct hci_rp_read_buffer_size *rp = (void *) skb->data;
606 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
611 hdev->acl_mtu = __le16_to_cpu(rp->acl_mtu);
612 hdev->sco_mtu = rp->sco_mtu;
613 hdev->acl_pkts = __le16_to_cpu(rp->acl_max_pkt);
614 hdev->sco_pkts = __le16_to_cpu(rp->sco_max_pkt);
616 if (test_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE, &hdev->quirks)) {
621 hdev->acl_cnt = hdev->acl_pkts;
622 hdev->sco_cnt = hdev->sco_pkts;
624 BT_DBG("%s acl mtu %d:%d sco mtu %d:%d", hdev->name, hdev->acl_mtu,
625 hdev->acl_pkts, hdev->sco_mtu, hdev->sco_pkts);
628 static void hci_cc_read_bd_addr(struct hci_dev *hdev, struct sk_buff *skb)
630 struct hci_rp_read_bd_addr *rp = (void *) skb->data;
632 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
635 bacpy(&hdev->bdaddr, &rp->bdaddr);
638 static void hci_cc_read_page_scan_activity(struct hci_dev *hdev,
641 struct hci_rp_read_page_scan_activity *rp = (void *) skb->data;
643 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
645 if (test_bit(HCI_INIT, &hdev->flags) && !rp->status) {
646 hdev->page_scan_interval = __le16_to_cpu(rp->interval);
647 hdev->page_scan_window = __le16_to_cpu(rp->window);
651 static void hci_cc_write_page_scan_activity(struct hci_dev *hdev,
654 u8 status = *((u8 *) skb->data);
655 struct hci_cp_write_page_scan_activity *sent;
657 BT_DBG("%s status 0x%2.2x", hdev->name, status);
662 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_PAGE_SCAN_ACTIVITY);
666 hdev->page_scan_interval = __le16_to_cpu(sent->interval);
667 hdev->page_scan_window = __le16_to_cpu(sent->window);
670 static void hci_cc_read_page_scan_type(struct hci_dev *hdev,
673 struct hci_rp_read_page_scan_type *rp = (void *) skb->data;
675 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
677 if (test_bit(HCI_INIT, &hdev->flags) && !rp->status)
678 hdev->page_scan_type = rp->type;
681 static void hci_cc_write_page_scan_type(struct hci_dev *hdev,
684 u8 status = *((u8 *) skb->data);
687 BT_DBG("%s status 0x%2.2x", hdev->name, status);
692 type = hci_sent_cmd_data(hdev, HCI_OP_WRITE_PAGE_SCAN_TYPE);
694 hdev->page_scan_type = *type;
697 static void hci_cc_read_data_block_size(struct hci_dev *hdev,
700 struct hci_rp_read_data_block_size *rp = (void *) skb->data;
702 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
707 hdev->block_mtu = __le16_to_cpu(rp->max_acl_len);
708 hdev->block_len = __le16_to_cpu(rp->block_len);
709 hdev->num_blocks = __le16_to_cpu(rp->num_blocks);
711 hdev->block_cnt = hdev->num_blocks;
713 BT_DBG("%s blk mtu %d cnt %d len %d", hdev->name, hdev->block_mtu,
714 hdev->block_cnt, hdev->block_len);
717 static void hci_cc_read_local_amp_info(struct hci_dev *hdev,
720 struct hci_rp_read_local_amp_info *rp = (void *) skb->data;
722 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
727 hdev->amp_status = rp->amp_status;
728 hdev->amp_total_bw = __le32_to_cpu(rp->total_bw);
729 hdev->amp_max_bw = __le32_to_cpu(rp->max_bw);
730 hdev->amp_min_latency = __le32_to_cpu(rp->min_latency);
731 hdev->amp_max_pdu = __le32_to_cpu(rp->max_pdu);
732 hdev->amp_type = rp->amp_type;
733 hdev->amp_pal_cap = __le16_to_cpu(rp->pal_cap);
734 hdev->amp_assoc_size = __le16_to_cpu(rp->max_assoc_size);
735 hdev->amp_be_flush_to = __le32_to_cpu(rp->be_flush_to);
736 hdev->amp_max_flush_to = __le32_to_cpu(rp->max_flush_to);
739 a2mp_send_getinfo_rsp(hdev);
742 static void hci_cc_read_local_amp_assoc(struct hci_dev *hdev,
745 struct hci_rp_read_local_amp_assoc *rp = (void *) skb->data;
746 struct amp_assoc *assoc = &hdev->loc_assoc;
747 size_t rem_len, frag_len;
749 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
754 frag_len = skb->len - sizeof(*rp);
755 rem_len = __le16_to_cpu(rp->rem_len);
757 if (rem_len > frag_len) {
758 BT_DBG("frag_len %zu rem_len %zu", frag_len, rem_len);
760 memcpy(assoc->data + assoc->offset, rp->frag, frag_len);
761 assoc->offset += frag_len;
763 /* Read other fragments */
764 amp_read_loc_assoc_frag(hdev, rp->phy_handle);
769 memcpy(assoc->data + assoc->offset, rp->frag, rem_len);
770 assoc->len = assoc->offset + rem_len;
774 /* Send A2MP Rsp when all fragments are received */
775 a2mp_send_getampassoc_rsp(hdev, rp->status);
776 a2mp_send_create_phy_link_req(hdev, rp->status);
779 static void hci_cc_read_inq_rsp_tx_power(struct hci_dev *hdev,
782 struct hci_rp_read_inq_rsp_tx_power *rp = (void *) skb->data;
784 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
787 hdev->inq_tx_power = rp->tx_power;
790 static void hci_cc_pin_code_reply(struct hci_dev *hdev, struct sk_buff *skb)
792 struct hci_rp_pin_code_reply *rp = (void *) skb->data;
793 struct hci_cp_pin_code_reply *cp;
794 struct hci_conn *conn;
796 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
800 if (test_bit(HCI_MGMT, &hdev->dev_flags))
801 mgmt_pin_code_reply_complete(hdev, &rp->bdaddr, rp->status);
806 cp = hci_sent_cmd_data(hdev, HCI_OP_PIN_CODE_REPLY);
810 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
812 conn->pin_length = cp->pin_len;
815 hci_dev_unlock(hdev);
818 static void hci_cc_pin_code_neg_reply(struct hci_dev *hdev, struct sk_buff *skb)
820 struct hci_rp_pin_code_neg_reply *rp = (void *) skb->data;
822 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
826 if (test_bit(HCI_MGMT, &hdev->dev_flags))
827 mgmt_pin_code_neg_reply_complete(hdev, &rp->bdaddr,
830 hci_dev_unlock(hdev);
833 static void hci_cc_le_read_buffer_size(struct hci_dev *hdev,
836 struct hci_rp_le_read_buffer_size *rp = (void *) skb->data;
838 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
843 hdev->le_mtu = __le16_to_cpu(rp->le_mtu);
844 hdev->le_pkts = rp->le_max_pkt;
846 hdev->le_cnt = hdev->le_pkts;
848 BT_DBG("%s le mtu %d:%d", hdev->name, hdev->le_mtu, hdev->le_pkts);
851 static void hci_cc_le_read_local_features(struct hci_dev *hdev,
854 struct hci_rp_le_read_local_features *rp = (void *) skb->data;
856 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
859 memcpy(hdev->le_features, rp->features, 8);
862 static void hci_cc_le_read_adv_tx_power(struct hci_dev *hdev,
865 struct hci_rp_le_read_adv_tx_power *rp = (void *) skb->data;
867 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
870 hdev->adv_tx_power = rp->tx_power;
873 static void hci_cc_user_confirm_reply(struct hci_dev *hdev, struct sk_buff *skb)
875 struct hci_rp_user_confirm_reply *rp = (void *) skb->data;
877 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
881 if (test_bit(HCI_MGMT, &hdev->dev_flags))
882 mgmt_user_confirm_reply_complete(hdev, &rp->bdaddr, ACL_LINK, 0,
885 hci_dev_unlock(hdev);
888 static void hci_cc_user_confirm_neg_reply(struct hci_dev *hdev,
891 struct hci_rp_user_confirm_reply *rp = (void *) skb->data;
893 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
897 if (test_bit(HCI_MGMT, &hdev->dev_flags))
898 mgmt_user_confirm_neg_reply_complete(hdev, &rp->bdaddr,
899 ACL_LINK, 0, rp->status);
901 hci_dev_unlock(hdev);
904 static void hci_cc_user_passkey_reply(struct hci_dev *hdev, struct sk_buff *skb)
906 struct hci_rp_user_confirm_reply *rp = (void *) skb->data;
908 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
912 if (test_bit(HCI_MGMT, &hdev->dev_flags))
913 mgmt_user_passkey_reply_complete(hdev, &rp->bdaddr, ACL_LINK,
916 hci_dev_unlock(hdev);
919 static void hci_cc_user_passkey_neg_reply(struct hci_dev *hdev,
922 struct hci_rp_user_confirm_reply *rp = (void *) skb->data;
924 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
928 if (test_bit(HCI_MGMT, &hdev->dev_flags))
929 mgmt_user_passkey_neg_reply_complete(hdev, &rp->bdaddr,
930 ACL_LINK, 0, rp->status);
932 hci_dev_unlock(hdev);
935 static void hci_cc_read_local_oob_data(struct hci_dev *hdev,
938 struct hci_rp_read_local_oob_data *rp = (void *) skb->data;
940 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
943 mgmt_read_local_oob_data_complete(hdev, rp->hash, rp->randomizer,
944 NULL, NULL, rp->status);
945 hci_dev_unlock(hdev);
948 static void hci_cc_read_local_oob_ext_data(struct hci_dev *hdev,
951 struct hci_rp_read_local_oob_ext_data *rp = (void *) skb->data;
953 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
956 mgmt_read_local_oob_data_complete(hdev, rp->hash192, rp->randomizer192,
957 rp->hash256, rp->randomizer256,
959 hci_dev_unlock(hdev);
963 static void hci_cc_le_set_random_addr(struct hci_dev *hdev, struct sk_buff *skb)
965 __u8 status = *((__u8 *) skb->data);
968 BT_DBG("%s status 0x%2.2x", hdev->name, status);
970 sent = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_RANDOM_ADDR);
977 bacpy(&hdev->random_addr, sent);
979 hci_dev_unlock(hdev);
982 static void hci_cc_le_set_adv_enable(struct hci_dev *hdev, struct sk_buff *skb)
984 __u8 *sent, status = *((__u8 *) skb->data);
986 BT_DBG("%s status 0x%2.2x", hdev->name, status);
988 sent = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_ADV_ENABLE);
995 mgmt_advertising(hdev, *sent);
997 hci_dev_unlock(hdev);
1000 static void hci_cc_le_set_scan_enable(struct hci_dev *hdev,
1001 struct sk_buff *skb)
1003 struct hci_cp_le_set_scan_enable *cp;
1004 __u8 status = *((__u8 *) skb->data);
1006 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1008 cp = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_SCAN_ENABLE);
1015 switch (cp->enable) {
1016 case LE_SCAN_ENABLE:
1017 set_bit(HCI_LE_SCAN, &hdev->dev_flags);
1020 case LE_SCAN_DISABLE:
1021 clear_bit(HCI_LE_SCAN, &hdev->dev_flags);
1025 BT_ERR("Used reserved LE_Scan_Enable param %d", cp->enable);
1030 static void hci_cc_le_read_white_list_size(struct hci_dev *hdev,
1031 struct sk_buff *skb)
1033 struct hci_rp_le_read_white_list_size *rp = (void *) skb->data;
1035 BT_DBG("%s status 0x%2.2x size %u", hdev->name, rp->status, rp->size);
1038 hdev->le_white_list_size = rp->size;
1041 static void hci_cc_le_clear_white_list(struct hci_dev *hdev,
1042 struct sk_buff *skb)
1044 __u8 status = *((__u8 *) skb->data);
1046 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1049 hci_white_list_clear(hdev);
1052 static void hci_cc_le_add_to_white_list(struct hci_dev *hdev,
1053 struct sk_buff *skb)
1055 struct hci_cp_le_add_to_white_list *sent;
1056 __u8 status = *((__u8 *) skb->data);
1058 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1060 sent = hci_sent_cmd_data(hdev, HCI_OP_LE_ADD_TO_WHITE_LIST);
1065 hci_white_list_add(hdev, &sent->bdaddr, sent->bdaddr_type);
1068 static void hci_cc_le_del_from_white_list(struct hci_dev *hdev,
1069 struct sk_buff *skb)
1071 struct hci_cp_le_del_from_white_list *sent;
1072 __u8 status = *((__u8 *) skb->data);
1074 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1076 sent = hci_sent_cmd_data(hdev, HCI_OP_LE_DEL_FROM_WHITE_LIST);
1081 hci_white_list_del(hdev, &sent->bdaddr, sent->bdaddr_type);
1084 static void hci_cc_le_read_supported_states(struct hci_dev *hdev,
1085 struct sk_buff *skb)
1087 struct hci_rp_le_read_supported_states *rp = (void *) skb->data;
1089 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1092 memcpy(hdev->le_states, rp->le_states, 8);
1095 static void hci_cc_write_le_host_supported(struct hci_dev *hdev,
1096 struct sk_buff *skb)
1098 struct hci_cp_write_le_host_supported *sent;
1099 __u8 status = *((__u8 *) skb->data);
1101 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1103 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_LE_HOST_SUPPORTED);
1109 hdev->features[1][0] |= LMP_HOST_LE;
1110 set_bit(HCI_LE_ENABLED, &hdev->dev_flags);
1112 hdev->features[1][0] &= ~LMP_HOST_LE;
1113 clear_bit(HCI_LE_ENABLED, &hdev->dev_flags);
1114 clear_bit(HCI_ADVERTISING, &hdev->dev_flags);
1118 hdev->features[1][0] |= LMP_HOST_LE_BREDR;
1120 hdev->features[1][0] &= ~LMP_HOST_LE_BREDR;
1124 static void hci_cc_set_adv_param(struct hci_dev *hdev, struct sk_buff *skb)
1126 struct hci_cp_le_set_adv_param *cp;
1127 u8 status = *((u8 *) skb->data);
1129 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1134 cp = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_ADV_PARAM);
1139 hdev->adv_addr_type = cp->own_address_type;
1140 hci_dev_unlock(hdev);
1143 static void hci_cc_write_remote_amp_assoc(struct hci_dev *hdev,
1144 struct sk_buff *skb)
1146 struct hci_rp_write_remote_amp_assoc *rp = (void *) skb->data;
1148 BT_DBG("%s status 0x%2.2x phy_handle 0x%2.2x",
1149 hdev->name, rp->status, rp->phy_handle);
1154 amp_write_rem_assoc_continue(hdev, rp->phy_handle);
1157 static void hci_cs_inquiry(struct hci_dev *hdev, __u8 status)
1159 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1162 hci_conn_check_pending(hdev);
1166 set_bit(HCI_INQUIRY, &hdev->flags);
1169 static void hci_cs_create_conn(struct hci_dev *hdev, __u8 status)
1171 struct hci_cp_create_conn *cp;
1172 struct hci_conn *conn;
1174 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1176 cp = hci_sent_cmd_data(hdev, HCI_OP_CREATE_CONN);
1182 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
1184 BT_DBG("%s bdaddr %pMR hcon %p", hdev->name, &cp->bdaddr, conn);
1187 if (conn && conn->state == BT_CONNECT) {
1188 if (status != 0x0c || conn->attempt > 2) {
1189 conn->state = BT_CLOSED;
1190 hci_proto_connect_cfm(conn, status);
1193 conn->state = BT_CONNECT2;
1197 conn = hci_conn_add(hdev, ACL_LINK, &cp->bdaddr);
1200 conn->link_mode |= HCI_LM_MASTER;
1202 BT_ERR("No memory for new connection");
1206 hci_dev_unlock(hdev);
1209 static void hci_cs_add_sco(struct hci_dev *hdev, __u8 status)
1211 struct hci_cp_add_sco *cp;
1212 struct hci_conn *acl, *sco;
1215 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1220 cp = hci_sent_cmd_data(hdev, HCI_OP_ADD_SCO);
1224 handle = __le16_to_cpu(cp->handle);
1226 BT_DBG("%s handle 0x%4.4x", hdev->name, handle);
1230 acl = hci_conn_hash_lookup_handle(hdev, handle);
1234 sco->state = BT_CLOSED;
1236 hci_proto_connect_cfm(sco, status);
1241 hci_dev_unlock(hdev);
1244 static void hci_cs_auth_requested(struct hci_dev *hdev, __u8 status)
1246 struct hci_cp_auth_requested *cp;
1247 struct hci_conn *conn;
1249 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1254 cp = hci_sent_cmd_data(hdev, HCI_OP_AUTH_REQUESTED);
1260 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1262 if (conn->state == BT_CONFIG) {
1263 hci_proto_connect_cfm(conn, status);
1264 hci_conn_drop(conn);
1268 hci_dev_unlock(hdev);
1271 static void hci_cs_set_conn_encrypt(struct hci_dev *hdev, __u8 status)
1273 struct hci_cp_set_conn_encrypt *cp;
1274 struct hci_conn *conn;
1276 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1281 cp = hci_sent_cmd_data(hdev, HCI_OP_SET_CONN_ENCRYPT);
1287 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1289 if (conn->state == BT_CONFIG) {
1290 hci_proto_connect_cfm(conn, status);
1291 hci_conn_drop(conn);
1295 hci_dev_unlock(hdev);
1298 static int hci_outgoing_auth_needed(struct hci_dev *hdev,
1299 struct hci_conn *conn)
1301 if (conn->state != BT_CONFIG || !conn->out)
1304 if (conn->pending_sec_level == BT_SECURITY_SDP)
1307 /* Only request authentication for SSP connections or non-SSP
1308 * devices with sec_level MEDIUM or HIGH or if MITM protection
1311 if (!hci_conn_ssp_enabled(conn) && !(conn->auth_type & 0x01) &&
1312 conn->pending_sec_level != BT_SECURITY_HIGH &&
1313 conn->pending_sec_level != BT_SECURITY_MEDIUM)
1319 static int hci_resolve_name(struct hci_dev *hdev,
1320 struct inquiry_entry *e)
1322 struct hci_cp_remote_name_req cp;
1324 memset(&cp, 0, sizeof(cp));
1326 bacpy(&cp.bdaddr, &e->data.bdaddr);
1327 cp.pscan_rep_mode = e->data.pscan_rep_mode;
1328 cp.pscan_mode = e->data.pscan_mode;
1329 cp.clock_offset = e->data.clock_offset;
1331 return hci_send_cmd(hdev, HCI_OP_REMOTE_NAME_REQ, sizeof(cp), &cp);
1334 static bool hci_resolve_next_name(struct hci_dev *hdev)
1336 struct discovery_state *discov = &hdev->discovery;
1337 struct inquiry_entry *e;
1339 if (list_empty(&discov->resolve))
1342 e = hci_inquiry_cache_lookup_resolve(hdev, BDADDR_ANY, NAME_NEEDED);
1346 if (hci_resolve_name(hdev, e) == 0) {
1347 e->name_state = NAME_PENDING;
1354 static void hci_check_pending_name(struct hci_dev *hdev, struct hci_conn *conn,
1355 bdaddr_t *bdaddr, u8 *name, u8 name_len)
1357 struct discovery_state *discov = &hdev->discovery;
1358 struct inquiry_entry *e;
1360 if (conn && !test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags))
1361 mgmt_device_connected(hdev, bdaddr, ACL_LINK, 0x00, 0, name,
1362 name_len, conn->dev_class);
1364 if (discov->state == DISCOVERY_STOPPED)
1367 if (discov->state == DISCOVERY_STOPPING)
1368 goto discov_complete;
1370 if (discov->state != DISCOVERY_RESOLVING)
1373 e = hci_inquiry_cache_lookup_resolve(hdev, bdaddr, NAME_PENDING);
1374 /* If the device was not found in a list of found devices names of which
1375 * are pending. there is no need to continue resolving a next name as it
1376 * will be done upon receiving another Remote Name Request Complete
1383 e->name_state = NAME_KNOWN;
1384 mgmt_remote_name(hdev, bdaddr, ACL_LINK, 0x00,
1385 e->data.rssi, name, name_len);
1387 e->name_state = NAME_NOT_KNOWN;
1390 if (hci_resolve_next_name(hdev))
1394 hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
1397 static void hci_cs_remote_name_req(struct hci_dev *hdev, __u8 status)
1399 struct hci_cp_remote_name_req *cp;
1400 struct hci_conn *conn;
1402 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1404 /* If successful wait for the name req complete event before
1405 * checking for the need to do authentication */
1409 cp = hci_sent_cmd_data(hdev, HCI_OP_REMOTE_NAME_REQ);
1415 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
1417 if (test_bit(HCI_MGMT, &hdev->dev_flags))
1418 hci_check_pending_name(hdev, conn, &cp->bdaddr, NULL, 0);
1423 if (!hci_outgoing_auth_needed(hdev, conn))
1426 if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
1427 struct hci_cp_auth_requested auth_cp;
1429 auth_cp.handle = __cpu_to_le16(conn->handle);
1430 hci_send_cmd(hdev, HCI_OP_AUTH_REQUESTED,
1431 sizeof(auth_cp), &auth_cp);
1435 hci_dev_unlock(hdev);
1438 static void hci_cs_read_remote_features(struct hci_dev *hdev, __u8 status)
1440 struct hci_cp_read_remote_features *cp;
1441 struct hci_conn *conn;
1443 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1448 cp = hci_sent_cmd_data(hdev, HCI_OP_READ_REMOTE_FEATURES);
1454 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1456 if (conn->state == BT_CONFIG) {
1457 hci_proto_connect_cfm(conn, status);
1458 hci_conn_drop(conn);
1462 hci_dev_unlock(hdev);
1465 static void hci_cs_read_remote_ext_features(struct hci_dev *hdev, __u8 status)
1467 struct hci_cp_read_remote_ext_features *cp;
1468 struct hci_conn *conn;
1470 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1475 cp = hci_sent_cmd_data(hdev, HCI_OP_READ_REMOTE_EXT_FEATURES);
1481 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1483 if (conn->state == BT_CONFIG) {
1484 hci_proto_connect_cfm(conn, status);
1485 hci_conn_drop(conn);
1489 hci_dev_unlock(hdev);
1492 static void hci_cs_setup_sync_conn(struct hci_dev *hdev, __u8 status)
1494 struct hci_cp_setup_sync_conn *cp;
1495 struct hci_conn *acl, *sco;
1498 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1503 cp = hci_sent_cmd_data(hdev, HCI_OP_SETUP_SYNC_CONN);
1507 handle = __le16_to_cpu(cp->handle);
1509 BT_DBG("%s handle 0x%4.4x", hdev->name, handle);
1513 acl = hci_conn_hash_lookup_handle(hdev, handle);
1517 sco->state = BT_CLOSED;
1519 hci_proto_connect_cfm(sco, status);
1524 hci_dev_unlock(hdev);
1527 static void hci_cs_sniff_mode(struct hci_dev *hdev, __u8 status)
1529 struct hci_cp_sniff_mode *cp;
1530 struct hci_conn *conn;
1532 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1537 cp = hci_sent_cmd_data(hdev, HCI_OP_SNIFF_MODE);
1543 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1545 clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags);
1547 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->flags))
1548 hci_sco_setup(conn, status);
1551 hci_dev_unlock(hdev);
1554 static void hci_cs_exit_sniff_mode(struct hci_dev *hdev, __u8 status)
1556 struct hci_cp_exit_sniff_mode *cp;
1557 struct hci_conn *conn;
1559 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1564 cp = hci_sent_cmd_data(hdev, HCI_OP_EXIT_SNIFF_MODE);
1570 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1572 clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags);
1574 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->flags))
1575 hci_sco_setup(conn, status);
1578 hci_dev_unlock(hdev);
1581 static void hci_cs_disconnect(struct hci_dev *hdev, u8 status)
1583 struct hci_cp_disconnect *cp;
1584 struct hci_conn *conn;
1589 cp = hci_sent_cmd_data(hdev, HCI_OP_DISCONNECT);
1595 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1597 mgmt_disconnect_failed(hdev, &conn->dst, conn->type,
1598 conn->dst_type, status);
1600 hci_dev_unlock(hdev);
1603 static void hci_cs_create_phylink(struct hci_dev *hdev, u8 status)
1605 struct hci_cp_create_phy_link *cp;
1607 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1609 cp = hci_sent_cmd_data(hdev, HCI_OP_CREATE_PHY_LINK);
1616 struct hci_conn *hcon;
1618 hcon = hci_conn_hash_lookup_handle(hdev, cp->phy_handle);
1622 amp_write_remote_assoc(hdev, cp->phy_handle);
1625 hci_dev_unlock(hdev);
1628 static void hci_cs_accept_phylink(struct hci_dev *hdev, u8 status)
1630 struct hci_cp_accept_phy_link *cp;
1632 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1637 cp = hci_sent_cmd_data(hdev, HCI_OP_ACCEPT_PHY_LINK);
1641 amp_write_remote_assoc(hdev, cp->phy_handle);
1644 static void hci_inquiry_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1646 __u8 status = *((__u8 *) skb->data);
1647 struct discovery_state *discov = &hdev->discovery;
1648 struct inquiry_entry *e;
1650 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1652 hci_conn_check_pending(hdev);
1654 if (!test_and_clear_bit(HCI_INQUIRY, &hdev->flags))
1657 smp_mb__after_clear_bit(); /* wake_up_bit advises about this barrier */
1658 wake_up_bit(&hdev->flags, HCI_INQUIRY);
1660 if (!test_bit(HCI_MGMT, &hdev->dev_flags))
1665 if (discov->state != DISCOVERY_FINDING)
1668 if (list_empty(&discov->resolve)) {
1669 hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
1673 e = hci_inquiry_cache_lookup_resolve(hdev, BDADDR_ANY, NAME_NEEDED);
1674 if (e && hci_resolve_name(hdev, e) == 0) {
1675 e->name_state = NAME_PENDING;
1676 hci_discovery_set_state(hdev, DISCOVERY_RESOLVING);
1678 hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
1682 hci_dev_unlock(hdev);
1685 static void hci_inquiry_result_evt(struct hci_dev *hdev, struct sk_buff *skb)
1687 struct inquiry_data data;
1688 struct inquiry_info *info = (void *) (skb->data + 1);
1689 int num_rsp = *((__u8 *) skb->data);
1691 BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
1696 if (test_bit(HCI_PERIODIC_INQ, &hdev->dev_flags))
1701 for (; num_rsp; num_rsp--, info++) {
1702 bool name_known, ssp;
1704 bacpy(&data.bdaddr, &info->bdaddr);
1705 data.pscan_rep_mode = info->pscan_rep_mode;
1706 data.pscan_period_mode = info->pscan_period_mode;
1707 data.pscan_mode = info->pscan_mode;
1708 memcpy(data.dev_class, info->dev_class, 3);
1709 data.clock_offset = info->clock_offset;
1711 data.ssp_mode = 0x00;
1713 name_known = hci_inquiry_cache_update(hdev, &data, false, &ssp);
1714 mgmt_device_found(hdev, &info->bdaddr, ACL_LINK, 0x00,
1715 info->dev_class, 0, !name_known, ssp, NULL,
1719 hci_dev_unlock(hdev);
1722 static void hci_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1724 struct hci_ev_conn_complete *ev = (void *) skb->data;
1725 struct hci_conn *conn;
1727 BT_DBG("%s", hdev->name);
1731 conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
1733 if (ev->link_type != SCO_LINK)
1736 conn = hci_conn_hash_lookup_ba(hdev, ESCO_LINK, &ev->bdaddr);
1740 conn->type = SCO_LINK;
1744 conn->handle = __le16_to_cpu(ev->handle);
1746 if (conn->type == ACL_LINK) {
1747 conn->state = BT_CONFIG;
1748 hci_conn_hold(conn);
1750 if (!conn->out && !hci_conn_ssp_enabled(conn) &&
1751 !hci_find_link_key(hdev, &ev->bdaddr))
1752 conn->disc_timeout = HCI_PAIRING_TIMEOUT;
1754 conn->disc_timeout = HCI_DISCONN_TIMEOUT;
1756 conn->state = BT_CONNECTED;
1758 hci_conn_add_sysfs(conn);
1760 if (test_bit(HCI_AUTH, &hdev->flags))
1761 conn->link_mode |= HCI_LM_AUTH;
1763 if (test_bit(HCI_ENCRYPT, &hdev->flags))
1764 conn->link_mode |= HCI_LM_ENCRYPT;
1766 /* Get remote features */
1767 if (conn->type == ACL_LINK) {
1768 struct hci_cp_read_remote_features cp;
1769 cp.handle = ev->handle;
1770 hci_send_cmd(hdev, HCI_OP_READ_REMOTE_FEATURES,
1774 /* Set packet type for incoming connection */
1775 if (!conn->out && hdev->hci_ver < BLUETOOTH_VER_2_0) {
1776 struct hci_cp_change_conn_ptype cp;
1777 cp.handle = ev->handle;
1778 cp.pkt_type = cpu_to_le16(conn->pkt_type);
1779 hci_send_cmd(hdev, HCI_OP_CHANGE_CONN_PTYPE, sizeof(cp),
1783 conn->state = BT_CLOSED;
1784 if (conn->type == ACL_LINK)
1785 mgmt_connect_failed(hdev, &conn->dst, conn->type,
1786 conn->dst_type, ev->status);
1789 if (conn->type == ACL_LINK)
1790 hci_sco_setup(conn, ev->status);
1793 hci_proto_connect_cfm(conn, ev->status);
1795 } else if (ev->link_type != ACL_LINK)
1796 hci_proto_connect_cfm(conn, ev->status);
1799 hci_dev_unlock(hdev);
1801 hci_conn_check_pending(hdev);
1804 static void hci_conn_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
1806 struct hci_ev_conn_request *ev = (void *) skb->data;
1807 int mask = hdev->link_mode;
1810 BT_DBG("%s bdaddr %pMR type 0x%x", hdev->name, &ev->bdaddr,
1813 mask |= hci_proto_connect_ind(hdev, &ev->bdaddr, ev->link_type,
1816 if ((mask & HCI_LM_ACCEPT) &&
1817 !hci_blacklist_lookup(hdev, &ev->bdaddr, BDADDR_BREDR)) {
1818 /* Connection accepted */
1819 struct inquiry_entry *ie;
1820 struct hci_conn *conn;
1824 ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr);
1826 memcpy(ie->data.dev_class, ev->dev_class, 3);
1828 conn = hci_conn_hash_lookup_ba(hdev, ev->link_type,
1831 conn = hci_conn_add(hdev, ev->link_type, &ev->bdaddr);
1833 BT_ERR("No memory for new connection");
1834 hci_dev_unlock(hdev);
1839 memcpy(conn->dev_class, ev->dev_class, 3);
1841 hci_dev_unlock(hdev);
1843 if (ev->link_type == ACL_LINK ||
1844 (!(flags & HCI_PROTO_DEFER) && !lmp_esco_capable(hdev))) {
1845 struct hci_cp_accept_conn_req cp;
1846 conn->state = BT_CONNECT;
1848 bacpy(&cp.bdaddr, &ev->bdaddr);
1850 if (lmp_rswitch_capable(hdev) && (mask & HCI_LM_MASTER))
1851 cp.role = 0x00; /* Become master */
1853 cp.role = 0x01; /* Remain slave */
1855 hci_send_cmd(hdev, HCI_OP_ACCEPT_CONN_REQ, sizeof(cp),
1857 } else if (!(flags & HCI_PROTO_DEFER)) {
1858 struct hci_cp_accept_sync_conn_req cp;
1859 conn->state = BT_CONNECT;
1861 bacpy(&cp.bdaddr, &ev->bdaddr);
1862 cp.pkt_type = cpu_to_le16(conn->pkt_type);
1864 cp.tx_bandwidth = __constant_cpu_to_le32(0x00001f40);
1865 cp.rx_bandwidth = __constant_cpu_to_le32(0x00001f40);
1866 cp.max_latency = __constant_cpu_to_le16(0xffff);
1867 cp.content_format = cpu_to_le16(hdev->voice_setting);
1868 cp.retrans_effort = 0xff;
1870 hci_send_cmd(hdev, HCI_OP_ACCEPT_SYNC_CONN_REQ,
1873 conn->state = BT_CONNECT2;
1874 hci_proto_connect_cfm(conn, 0);
1877 /* Connection rejected */
1878 struct hci_cp_reject_conn_req cp;
1880 bacpy(&cp.bdaddr, &ev->bdaddr);
1881 cp.reason = HCI_ERROR_REJ_BAD_ADDR;
1882 hci_send_cmd(hdev, HCI_OP_REJECT_CONN_REQ, sizeof(cp), &cp);
1886 static u8 hci_to_mgmt_reason(u8 err)
1889 case HCI_ERROR_CONNECTION_TIMEOUT:
1890 return MGMT_DEV_DISCONN_TIMEOUT;
1891 case HCI_ERROR_REMOTE_USER_TERM:
1892 case HCI_ERROR_REMOTE_LOW_RESOURCES:
1893 case HCI_ERROR_REMOTE_POWER_OFF:
1894 return MGMT_DEV_DISCONN_REMOTE;
1895 case HCI_ERROR_LOCAL_HOST_TERM:
1896 return MGMT_DEV_DISCONN_LOCAL_HOST;
1898 return MGMT_DEV_DISCONN_UNKNOWN;
1902 static void hci_disconn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1904 struct hci_ev_disconn_complete *ev = (void *) skb->data;
1905 u8 reason = hci_to_mgmt_reason(ev->reason);
1906 struct hci_conn_params *params;
1907 struct hci_conn *conn;
1908 bool mgmt_connected;
1911 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
1915 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1920 mgmt_disconnect_failed(hdev, &conn->dst, conn->type,
1921 conn->dst_type, ev->status);
1925 conn->state = BT_CLOSED;
1927 mgmt_connected = test_and_clear_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags);
1928 mgmt_device_disconnected(hdev, &conn->dst, conn->type, conn->dst_type,
1929 reason, mgmt_connected);
1931 if (conn->type == ACL_LINK && conn->flush_key)
1932 hci_remove_link_key(hdev, &conn->dst);
1934 params = hci_conn_params_lookup(hdev, &conn->dst, conn->dst_type);
1936 switch (params->auto_connect) {
1937 case HCI_AUTO_CONN_LINK_LOSS:
1938 if (ev->reason != HCI_ERROR_CONNECTION_TIMEOUT)
1942 case HCI_AUTO_CONN_ALWAYS:
1943 hci_pend_le_conn_add(hdev, &conn->dst, conn->dst_type);
1953 hci_proto_disconn_cfm(conn, ev->reason);
1956 /* Re-enable advertising if necessary, since it might
1957 * have been disabled by the connection. From the
1958 * HCI_LE_Set_Advertise_Enable command description in
1959 * the core specification (v4.0):
1960 * "The Controller shall continue advertising until the Host
1961 * issues an LE_Set_Advertise_Enable command with
1962 * Advertising_Enable set to 0x00 (Advertising is disabled)
1963 * or until a connection is created or until the Advertising
1964 * is timed out due to Directed Advertising."
1966 if (type == LE_LINK)
1967 mgmt_reenable_advertising(hdev);
1970 hci_dev_unlock(hdev);
1973 static void hci_auth_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1975 struct hci_ev_auth_complete *ev = (void *) skb->data;
1976 struct hci_conn *conn;
1978 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
1982 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1987 if (!hci_conn_ssp_enabled(conn) &&
1988 test_bit(HCI_CONN_REAUTH_PEND, &conn->flags)) {
1989 BT_INFO("re-auth of legacy device is not possible.");
1991 conn->link_mode |= HCI_LM_AUTH;
1992 conn->sec_level = conn->pending_sec_level;
1995 mgmt_auth_failed(hdev, &conn->dst, conn->type, conn->dst_type,
1999 clear_bit(HCI_CONN_AUTH_PEND, &conn->flags);
2000 clear_bit(HCI_CONN_REAUTH_PEND, &conn->flags);
2002 if (conn->state == BT_CONFIG) {
2003 if (!ev->status && hci_conn_ssp_enabled(conn)) {
2004 struct hci_cp_set_conn_encrypt cp;
2005 cp.handle = ev->handle;
2007 hci_send_cmd(hdev, HCI_OP_SET_CONN_ENCRYPT, sizeof(cp),
2010 conn->state = BT_CONNECTED;
2011 hci_proto_connect_cfm(conn, ev->status);
2012 hci_conn_drop(conn);
2015 hci_auth_cfm(conn, ev->status);
2017 hci_conn_hold(conn);
2018 conn->disc_timeout = HCI_DISCONN_TIMEOUT;
2019 hci_conn_drop(conn);
2022 if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags)) {
2024 struct hci_cp_set_conn_encrypt cp;
2025 cp.handle = ev->handle;
2027 hci_send_cmd(hdev, HCI_OP_SET_CONN_ENCRYPT, sizeof(cp),
2030 clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
2031 hci_encrypt_cfm(conn, ev->status, 0x00);
2036 hci_dev_unlock(hdev);
2039 static void hci_remote_name_evt(struct hci_dev *hdev, struct sk_buff *skb)
2041 struct hci_ev_remote_name *ev = (void *) skb->data;
2042 struct hci_conn *conn;
2044 BT_DBG("%s", hdev->name);
2046 hci_conn_check_pending(hdev);
2050 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
2052 if (!test_bit(HCI_MGMT, &hdev->dev_flags))
2055 if (ev->status == 0)
2056 hci_check_pending_name(hdev, conn, &ev->bdaddr, ev->name,
2057 strnlen(ev->name, HCI_MAX_NAME_LENGTH));
2059 hci_check_pending_name(hdev, conn, &ev->bdaddr, NULL, 0);
2065 if (!hci_outgoing_auth_needed(hdev, conn))
2068 if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
2069 struct hci_cp_auth_requested cp;
2070 cp.handle = __cpu_to_le16(conn->handle);
2071 hci_send_cmd(hdev, HCI_OP_AUTH_REQUESTED, sizeof(cp), &cp);
2075 hci_dev_unlock(hdev);
2078 static void hci_encrypt_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
2080 struct hci_ev_encrypt_change *ev = (void *) skb->data;
2081 struct hci_conn *conn;
2083 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2087 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2093 /* Encryption implies authentication */
2094 conn->link_mode |= HCI_LM_AUTH;
2095 conn->link_mode |= HCI_LM_ENCRYPT;
2096 conn->sec_level = conn->pending_sec_level;
2098 /* P-256 authentication key implies FIPS */
2099 if (conn->key_type == HCI_LK_AUTH_COMBINATION_P256)
2100 conn->link_mode |= HCI_LM_FIPS;
2102 if ((conn->type == ACL_LINK && ev->encrypt == 0x02) ||
2103 conn->type == LE_LINK)
2104 set_bit(HCI_CONN_AES_CCM, &conn->flags);
2106 conn->link_mode &= ~HCI_LM_ENCRYPT;
2107 clear_bit(HCI_CONN_AES_CCM, &conn->flags);
2111 clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
2113 if (ev->status && conn->state == BT_CONNECTED) {
2114 hci_disconnect(conn, HCI_ERROR_AUTH_FAILURE);
2115 hci_conn_drop(conn);
2119 if (conn->state == BT_CONFIG) {
2121 conn->state = BT_CONNECTED;
2123 hci_proto_connect_cfm(conn, ev->status);
2124 hci_conn_drop(conn);
2126 hci_encrypt_cfm(conn, ev->status, ev->encrypt);
2129 hci_dev_unlock(hdev);
2132 static void hci_change_link_key_complete_evt(struct hci_dev *hdev,
2133 struct sk_buff *skb)
2135 struct hci_ev_change_link_key_complete *ev = (void *) skb->data;
2136 struct hci_conn *conn;
2138 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2142 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2145 conn->link_mode |= HCI_LM_SECURE;
2147 clear_bit(HCI_CONN_AUTH_PEND, &conn->flags);
2149 hci_key_change_cfm(conn, ev->status);
2152 hci_dev_unlock(hdev);
2155 static void hci_remote_features_evt(struct hci_dev *hdev,
2156 struct sk_buff *skb)
2158 struct hci_ev_remote_features *ev = (void *) skb->data;
2159 struct hci_conn *conn;
2161 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2165 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2170 memcpy(conn->features[0], ev->features, 8);
2172 if (conn->state != BT_CONFIG)
2175 if (!ev->status && lmp_ssp_capable(hdev) && lmp_ssp_capable(conn)) {
2176 struct hci_cp_read_remote_ext_features cp;
2177 cp.handle = ev->handle;
2179 hci_send_cmd(hdev, HCI_OP_READ_REMOTE_EXT_FEATURES,
2184 if (!ev->status && !test_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags)) {
2185 struct hci_cp_remote_name_req cp;
2186 memset(&cp, 0, sizeof(cp));
2187 bacpy(&cp.bdaddr, &conn->dst);
2188 cp.pscan_rep_mode = 0x02;
2189 hci_send_cmd(hdev, HCI_OP_REMOTE_NAME_REQ, sizeof(cp), &cp);
2190 } else if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags))
2191 mgmt_device_connected(hdev, &conn->dst, conn->type,
2192 conn->dst_type, 0, NULL, 0,
2195 if (!hci_outgoing_auth_needed(hdev, conn)) {
2196 conn->state = BT_CONNECTED;
2197 hci_proto_connect_cfm(conn, ev->status);
2198 hci_conn_drop(conn);
2202 hci_dev_unlock(hdev);
2205 static void hci_cmd_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
2207 struct hci_ev_cmd_complete *ev = (void *) skb->data;
2208 u8 status = skb->data[sizeof(*ev)];
2211 skb_pull(skb, sizeof(*ev));
2213 opcode = __le16_to_cpu(ev->opcode);
2216 case HCI_OP_INQUIRY_CANCEL:
2217 hci_cc_inquiry_cancel(hdev, skb);
2220 case HCI_OP_PERIODIC_INQ:
2221 hci_cc_periodic_inq(hdev, skb);
2224 case HCI_OP_EXIT_PERIODIC_INQ:
2225 hci_cc_exit_periodic_inq(hdev, skb);
2228 case HCI_OP_REMOTE_NAME_REQ_CANCEL:
2229 hci_cc_remote_name_req_cancel(hdev, skb);
2232 case HCI_OP_ROLE_DISCOVERY:
2233 hci_cc_role_discovery(hdev, skb);
2236 case HCI_OP_READ_LINK_POLICY:
2237 hci_cc_read_link_policy(hdev, skb);
2240 case HCI_OP_WRITE_LINK_POLICY:
2241 hci_cc_write_link_policy(hdev, skb);
2244 case HCI_OP_READ_DEF_LINK_POLICY:
2245 hci_cc_read_def_link_policy(hdev, skb);
2248 case HCI_OP_WRITE_DEF_LINK_POLICY:
2249 hci_cc_write_def_link_policy(hdev, skb);
2253 hci_cc_reset(hdev, skb);
2256 case HCI_OP_WRITE_LOCAL_NAME:
2257 hci_cc_write_local_name(hdev, skb);
2260 case HCI_OP_READ_LOCAL_NAME:
2261 hci_cc_read_local_name(hdev, skb);
2264 case HCI_OP_WRITE_AUTH_ENABLE:
2265 hci_cc_write_auth_enable(hdev, skb);
2268 case HCI_OP_WRITE_ENCRYPT_MODE:
2269 hci_cc_write_encrypt_mode(hdev, skb);
2272 case HCI_OP_WRITE_SCAN_ENABLE:
2273 hci_cc_write_scan_enable(hdev, skb);
2276 case HCI_OP_READ_CLASS_OF_DEV:
2277 hci_cc_read_class_of_dev(hdev, skb);
2280 case HCI_OP_WRITE_CLASS_OF_DEV:
2281 hci_cc_write_class_of_dev(hdev, skb);
2284 case HCI_OP_READ_VOICE_SETTING:
2285 hci_cc_read_voice_setting(hdev, skb);
2288 case HCI_OP_WRITE_VOICE_SETTING:
2289 hci_cc_write_voice_setting(hdev, skb);
2292 case HCI_OP_READ_NUM_SUPPORTED_IAC:
2293 hci_cc_read_num_supported_iac(hdev, skb);
2296 case HCI_OP_WRITE_SSP_MODE:
2297 hci_cc_write_ssp_mode(hdev, skb);
2300 case HCI_OP_WRITE_SC_SUPPORT:
2301 hci_cc_write_sc_support(hdev, skb);
2304 case HCI_OP_READ_LOCAL_VERSION:
2305 hci_cc_read_local_version(hdev, skb);
2308 case HCI_OP_READ_LOCAL_COMMANDS:
2309 hci_cc_read_local_commands(hdev, skb);
2312 case HCI_OP_READ_LOCAL_FEATURES:
2313 hci_cc_read_local_features(hdev, skb);
2316 case HCI_OP_READ_LOCAL_EXT_FEATURES:
2317 hci_cc_read_local_ext_features(hdev, skb);
2320 case HCI_OP_READ_BUFFER_SIZE:
2321 hci_cc_read_buffer_size(hdev, skb);
2324 case HCI_OP_READ_BD_ADDR:
2325 hci_cc_read_bd_addr(hdev, skb);
2328 case HCI_OP_READ_PAGE_SCAN_ACTIVITY:
2329 hci_cc_read_page_scan_activity(hdev, skb);
2332 case HCI_OP_WRITE_PAGE_SCAN_ACTIVITY:
2333 hci_cc_write_page_scan_activity(hdev, skb);
2336 case HCI_OP_READ_PAGE_SCAN_TYPE:
2337 hci_cc_read_page_scan_type(hdev, skb);
2340 case HCI_OP_WRITE_PAGE_SCAN_TYPE:
2341 hci_cc_write_page_scan_type(hdev, skb);
2344 case HCI_OP_READ_DATA_BLOCK_SIZE:
2345 hci_cc_read_data_block_size(hdev, skb);
2348 case HCI_OP_READ_FLOW_CONTROL_MODE:
2349 hci_cc_read_flow_control_mode(hdev, skb);
2352 case HCI_OP_READ_LOCAL_AMP_INFO:
2353 hci_cc_read_local_amp_info(hdev, skb);
2356 case HCI_OP_READ_LOCAL_AMP_ASSOC:
2357 hci_cc_read_local_amp_assoc(hdev, skb);
2360 case HCI_OP_READ_INQ_RSP_TX_POWER:
2361 hci_cc_read_inq_rsp_tx_power(hdev, skb);
2364 case HCI_OP_PIN_CODE_REPLY:
2365 hci_cc_pin_code_reply(hdev, skb);
2368 case HCI_OP_PIN_CODE_NEG_REPLY:
2369 hci_cc_pin_code_neg_reply(hdev, skb);
2372 case HCI_OP_READ_LOCAL_OOB_DATA:
2373 hci_cc_read_local_oob_data(hdev, skb);
2376 case HCI_OP_READ_LOCAL_OOB_EXT_DATA:
2377 hci_cc_read_local_oob_ext_data(hdev, skb);
2380 case HCI_OP_LE_READ_BUFFER_SIZE:
2381 hci_cc_le_read_buffer_size(hdev, skb);
2384 case HCI_OP_LE_READ_LOCAL_FEATURES:
2385 hci_cc_le_read_local_features(hdev, skb);
2388 case HCI_OP_LE_READ_ADV_TX_POWER:
2389 hci_cc_le_read_adv_tx_power(hdev, skb);
2392 case HCI_OP_USER_CONFIRM_REPLY:
2393 hci_cc_user_confirm_reply(hdev, skb);
2396 case HCI_OP_USER_CONFIRM_NEG_REPLY:
2397 hci_cc_user_confirm_neg_reply(hdev, skb);
2400 case HCI_OP_USER_PASSKEY_REPLY:
2401 hci_cc_user_passkey_reply(hdev, skb);
2404 case HCI_OP_USER_PASSKEY_NEG_REPLY:
2405 hci_cc_user_passkey_neg_reply(hdev, skb);
2408 case HCI_OP_LE_SET_RANDOM_ADDR:
2409 hci_cc_le_set_random_addr(hdev, skb);
2412 case HCI_OP_LE_SET_ADV_ENABLE:
2413 hci_cc_le_set_adv_enable(hdev, skb);
2416 case HCI_OP_LE_SET_SCAN_ENABLE:
2417 hci_cc_le_set_scan_enable(hdev, skb);
2420 case HCI_OP_LE_READ_WHITE_LIST_SIZE:
2421 hci_cc_le_read_white_list_size(hdev, skb);
2424 case HCI_OP_LE_CLEAR_WHITE_LIST:
2425 hci_cc_le_clear_white_list(hdev, skb);
2428 case HCI_OP_LE_ADD_TO_WHITE_LIST:
2429 hci_cc_le_add_to_white_list(hdev, skb);
2432 case HCI_OP_LE_DEL_FROM_WHITE_LIST:
2433 hci_cc_le_del_from_white_list(hdev, skb);
2436 case HCI_OP_LE_READ_SUPPORTED_STATES:
2437 hci_cc_le_read_supported_states(hdev, skb);
2440 case HCI_OP_WRITE_LE_HOST_SUPPORTED:
2441 hci_cc_write_le_host_supported(hdev, skb);
2444 case HCI_OP_LE_SET_ADV_PARAM:
2445 hci_cc_set_adv_param(hdev, skb);
2448 case HCI_OP_WRITE_REMOTE_AMP_ASSOC:
2449 hci_cc_write_remote_amp_assoc(hdev, skb);
2453 BT_DBG("%s opcode 0x%4.4x", hdev->name, opcode);
2457 if (opcode != HCI_OP_NOP)
2458 del_timer(&hdev->cmd_timer);
2460 hci_req_cmd_complete(hdev, opcode, status);
2462 if (ev->ncmd && !test_bit(HCI_RESET, &hdev->flags)) {
2463 atomic_set(&hdev->cmd_cnt, 1);
2464 if (!skb_queue_empty(&hdev->cmd_q))
2465 queue_work(hdev->workqueue, &hdev->cmd_work);
2469 static void hci_cmd_status_evt(struct hci_dev *hdev, struct sk_buff *skb)
2471 struct hci_ev_cmd_status *ev = (void *) skb->data;
2474 skb_pull(skb, sizeof(*ev));
2476 opcode = __le16_to_cpu(ev->opcode);
2479 case HCI_OP_INQUIRY:
2480 hci_cs_inquiry(hdev, ev->status);
2483 case HCI_OP_CREATE_CONN:
2484 hci_cs_create_conn(hdev, ev->status);
2487 case HCI_OP_ADD_SCO:
2488 hci_cs_add_sco(hdev, ev->status);
2491 case HCI_OP_AUTH_REQUESTED:
2492 hci_cs_auth_requested(hdev, ev->status);
2495 case HCI_OP_SET_CONN_ENCRYPT:
2496 hci_cs_set_conn_encrypt(hdev, ev->status);
2499 case HCI_OP_REMOTE_NAME_REQ:
2500 hci_cs_remote_name_req(hdev, ev->status);
2503 case HCI_OP_READ_REMOTE_FEATURES:
2504 hci_cs_read_remote_features(hdev, ev->status);
2507 case HCI_OP_READ_REMOTE_EXT_FEATURES:
2508 hci_cs_read_remote_ext_features(hdev, ev->status);
2511 case HCI_OP_SETUP_SYNC_CONN:
2512 hci_cs_setup_sync_conn(hdev, ev->status);
2515 case HCI_OP_SNIFF_MODE:
2516 hci_cs_sniff_mode(hdev, ev->status);
2519 case HCI_OP_EXIT_SNIFF_MODE:
2520 hci_cs_exit_sniff_mode(hdev, ev->status);
2523 case HCI_OP_DISCONNECT:
2524 hci_cs_disconnect(hdev, ev->status);
2527 case HCI_OP_CREATE_PHY_LINK:
2528 hci_cs_create_phylink(hdev, ev->status);
2531 case HCI_OP_ACCEPT_PHY_LINK:
2532 hci_cs_accept_phylink(hdev, ev->status);
2536 BT_DBG("%s opcode 0x%4.4x", hdev->name, opcode);
2540 if (opcode != HCI_OP_NOP)
2541 del_timer(&hdev->cmd_timer);
2544 (hdev->sent_cmd && !bt_cb(hdev->sent_cmd)->req.event))
2545 hci_req_cmd_complete(hdev, opcode, ev->status);
2547 if (ev->ncmd && !test_bit(HCI_RESET, &hdev->flags)) {
2548 atomic_set(&hdev->cmd_cnt, 1);
2549 if (!skb_queue_empty(&hdev->cmd_q))
2550 queue_work(hdev->workqueue, &hdev->cmd_work);
2554 static void hci_role_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
2556 struct hci_ev_role_change *ev = (void *) skb->data;
2557 struct hci_conn *conn;
2559 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2563 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
2567 conn->link_mode &= ~HCI_LM_MASTER;
2569 conn->link_mode |= HCI_LM_MASTER;
2572 clear_bit(HCI_CONN_RSWITCH_PEND, &conn->flags);
2574 hci_role_switch_cfm(conn, ev->status, ev->role);
2577 hci_dev_unlock(hdev);
2580 static void hci_num_comp_pkts_evt(struct hci_dev *hdev, struct sk_buff *skb)
2582 struct hci_ev_num_comp_pkts *ev = (void *) skb->data;
2585 if (hdev->flow_ctl_mode != HCI_FLOW_CTL_MODE_PACKET_BASED) {
2586 BT_ERR("Wrong event for mode %d", hdev->flow_ctl_mode);
2590 if (skb->len < sizeof(*ev) || skb->len < sizeof(*ev) +
2591 ev->num_hndl * sizeof(struct hci_comp_pkts_info)) {
2592 BT_DBG("%s bad parameters", hdev->name);
2596 BT_DBG("%s num_hndl %d", hdev->name, ev->num_hndl);
2598 for (i = 0; i < ev->num_hndl; i++) {
2599 struct hci_comp_pkts_info *info = &ev->handles[i];
2600 struct hci_conn *conn;
2601 __u16 handle, count;
2603 handle = __le16_to_cpu(info->handle);
2604 count = __le16_to_cpu(info->count);
2606 conn = hci_conn_hash_lookup_handle(hdev, handle);
2610 conn->sent -= count;
2612 switch (conn->type) {
2614 hdev->acl_cnt += count;
2615 if (hdev->acl_cnt > hdev->acl_pkts)
2616 hdev->acl_cnt = hdev->acl_pkts;
2620 if (hdev->le_pkts) {
2621 hdev->le_cnt += count;
2622 if (hdev->le_cnt > hdev->le_pkts)
2623 hdev->le_cnt = hdev->le_pkts;
2625 hdev->acl_cnt += count;
2626 if (hdev->acl_cnt > hdev->acl_pkts)
2627 hdev->acl_cnt = hdev->acl_pkts;
2632 hdev->sco_cnt += count;
2633 if (hdev->sco_cnt > hdev->sco_pkts)
2634 hdev->sco_cnt = hdev->sco_pkts;
2638 BT_ERR("Unknown type %d conn %p", conn->type, conn);
2643 queue_work(hdev->workqueue, &hdev->tx_work);
2646 static struct hci_conn *__hci_conn_lookup_handle(struct hci_dev *hdev,
2649 struct hci_chan *chan;
2651 switch (hdev->dev_type) {
2653 return hci_conn_hash_lookup_handle(hdev, handle);
2655 chan = hci_chan_lookup_handle(hdev, handle);
2660 BT_ERR("%s unknown dev_type %d", hdev->name, hdev->dev_type);
2667 static void hci_num_comp_blocks_evt(struct hci_dev *hdev, struct sk_buff *skb)
2669 struct hci_ev_num_comp_blocks *ev = (void *) skb->data;
2672 if (hdev->flow_ctl_mode != HCI_FLOW_CTL_MODE_BLOCK_BASED) {
2673 BT_ERR("Wrong event for mode %d", hdev->flow_ctl_mode);
2677 if (skb->len < sizeof(*ev) || skb->len < sizeof(*ev) +
2678 ev->num_hndl * sizeof(struct hci_comp_blocks_info)) {
2679 BT_DBG("%s bad parameters", hdev->name);
2683 BT_DBG("%s num_blocks %d num_hndl %d", hdev->name, ev->num_blocks,
2686 for (i = 0; i < ev->num_hndl; i++) {
2687 struct hci_comp_blocks_info *info = &ev->handles[i];
2688 struct hci_conn *conn = NULL;
2689 __u16 handle, block_count;
2691 handle = __le16_to_cpu(info->handle);
2692 block_count = __le16_to_cpu(info->blocks);
2694 conn = __hci_conn_lookup_handle(hdev, handle);
2698 conn->sent -= block_count;
2700 switch (conn->type) {
2703 hdev->block_cnt += block_count;
2704 if (hdev->block_cnt > hdev->num_blocks)
2705 hdev->block_cnt = hdev->num_blocks;
2709 BT_ERR("Unknown type %d conn %p", conn->type, conn);
2714 queue_work(hdev->workqueue, &hdev->tx_work);
2717 static void hci_mode_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
2719 struct hci_ev_mode_change *ev = (void *) skb->data;
2720 struct hci_conn *conn;
2722 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2726 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2728 conn->mode = ev->mode;
2730 if (!test_and_clear_bit(HCI_CONN_MODE_CHANGE_PEND,
2732 if (conn->mode == HCI_CM_ACTIVE)
2733 set_bit(HCI_CONN_POWER_SAVE, &conn->flags);
2735 clear_bit(HCI_CONN_POWER_SAVE, &conn->flags);
2738 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->flags))
2739 hci_sco_setup(conn, ev->status);
2742 hci_dev_unlock(hdev);
2745 static void hci_pin_code_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
2747 struct hci_ev_pin_code_req *ev = (void *) skb->data;
2748 struct hci_conn *conn;
2750 BT_DBG("%s", hdev->name);
2754 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
2758 if (conn->state == BT_CONNECTED) {
2759 hci_conn_hold(conn);
2760 conn->disc_timeout = HCI_PAIRING_TIMEOUT;
2761 hci_conn_drop(conn);
2764 if (!test_bit(HCI_PAIRABLE, &hdev->dev_flags))
2765 hci_send_cmd(hdev, HCI_OP_PIN_CODE_NEG_REPLY,
2766 sizeof(ev->bdaddr), &ev->bdaddr);
2767 else if (test_bit(HCI_MGMT, &hdev->dev_flags)) {
2770 if (conn->pending_sec_level == BT_SECURITY_HIGH)
2775 mgmt_pin_code_request(hdev, &ev->bdaddr, secure);
2779 hci_dev_unlock(hdev);
2782 static void hci_link_key_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
2784 struct hci_ev_link_key_req *ev = (void *) skb->data;
2785 struct hci_cp_link_key_reply cp;
2786 struct hci_conn *conn;
2787 struct link_key *key;
2789 BT_DBG("%s", hdev->name);
2791 if (!test_bit(HCI_MGMT, &hdev->dev_flags))
2796 key = hci_find_link_key(hdev, &ev->bdaddr);
2798 BT_DBG("%s link key not found for %pMR", hdev->name,
2803 BT_DBG("%s found key type %u for %pMR", hdev->name, key->type,
2806 if (!test_bit(HCI_DEBUG_KEYS, &hdev->dev_flags) &&
2807 key->type == HCI_LK_DEBUG_COMBINATION) {
2808 BT_DBG("%s ignoring debug key", hdev->name);
2812 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
2814 if ((key->type == HCI_LK_UNAUTH_COMBINATION_P192 ||
2815 key->type == HCI_LK_UNAUTH_COMBINATION_P256) &&
2816 conn->auth_type != 0xff && (conn->auth_type & 0x01)) {
2817 BT_DBG("%s ignoring unauthenticated key", hdev->name);
2821 if (key->type == HCI_LK_COMBINATION && key->pin_len < 16 &&
2822 conn->pending_sec_level == BT_SECURITY_HIGH) {
2823 BT_DBG("%s ignoring key unauthenticated for high security",
2828 conn->key_type = key->type;
2829 conn->pin_length = key->pin_len;
2832 bacpy(&cp.bdaddr, &ev->bdaddr);
2833 memcpy(cp.link_key, key->val, HCI_LINK_KEY_SIZE);
2835 hci_send_cmd(hdev, HCI_OP_LINK_KEY_REPLY, sizeof(cp), &cp);
2837 hci_dev_unlock(hdev);
2842 hci_send_cmd(hdev, HCI_OP_LINK_KEY_NEG_REPLY, 6, &ev->bdaddr);
2843 hci_dev_unlock(hdev);
2846 static void hci_link_key_notify_evt(struct hci_dev *hdev, struct sk_buff *skb)
2848 struct hci_ev_link_key_notify *ev = (void *) skb->data;
2849 struct hci_conn *conn;
2852 BT_DBG("%s", hdev->name);
2856 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
2858 hci_conn_hold(conn);
2859 conn->disc_timeout = HCI_DISCONN_TIMEOUT;
2860 pin_len = conn->pin_length;
2862 if (ev->key_type != HCI_LK_CHANGED_COMBINATION)
2863 conn->key_type = ev->key_type;
2865 hci_conn_drop(conn);
2868 if (test_bit(HCI_MGMT, &hdev->dev_flags))
2869 hci_add_link_key(hdev, conn, 1, &ev->bdaddr, ev->link_key,
2870 ev->key_type, pin_len);
2872 hci_dev_unlock(hdev);
2875 static void hci_clock_offset_evt(struct hci_dev *hdev, struct sk_buff *skb)
2877 struct hci_ev_clock_offset *ev = (void *) skb->data;
2878 struct hci_conn *conn;
2880 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2884 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2885 if (conn && !ev->status) {
2886 struct inquiry_entry *ie;
2888 ie = hci_inquiry_cache_lookup(hdev, &conn->dst);
2890 ie->data.clock_offset = ev->clock_offset;
2891 ie->timestamp = jiffies;
2895 hci_dev_unlock(hdev);
2898 static void hci_pkt_type_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
2900 struct hci_ev_pkt_type_change *ev = (void *) skb->data;
2901 struct hci_conn *conn;
2903 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2907 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2908 if (conn && !ev->status)
2909 conn->pkt_type = __le16_to_cpu(ev->pkt_type);
2911 hci_dev_unlock(hdev);
2914 static void hci_pscan_rep_mode_evt(struct hci_dev *hdev, struct sk_buff *skb)
2916 struct hci_ev_pscan_rep_mode *ev = (void *) skb->data;
2917 struct inquiry_entry *ie;
2919 BT_DBG("%s", hdev->name);
2923 ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr);
2925 ie->data.pscan_rep_mode = ev->pscan_rep_mode;
2926 ie->timestamp = jiffies;
2929 hci_dev_unlock(hdev);
2932 static void hci_inquiry_result_with_rssi_evt(struct hci_dev *hdev,
2933 struct sk_buff *skb)
2935 struct inquiry_data data;
2936 int num_rsp = *((__u8 *) skb->data);
2937 bool name_known, ssp;
2939 BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
2944 if (test_bit(HCI_PERIODIC_INQ, &hdev->dev_flags))
2949 if ((skb->len - 1) / num_rsp != sizeof(struct inquiry_info_with_rssi)) {
2950 struct inquiry_info_with_rssi_and_pscan_mode *info;
2951 info = (void *) (skb->data + 1);
2953 for (; num_rsp; num_rsp--, info++) {
2954 bacpy(&data.bdaddr, &info->bdaddr);
2955 data.pscan_rep_mode = info->pscan_rep_mode;
2956 data.pscan_period_mode = info->pscan_period_mode;
2957 data.pscan_mode = info->pscan_mode;
2958 memcpy(data.dev_class, info->dev_class, 3);
2959 data.clock_offset = info->clock_offset;
2960 data.rssi = info->rssi;
2961 data.ssp_mode = 0x00;
2963 name_known = hci_inquiry_cache_update(hdev, &data,
2965 mgmt_device_found(hdev, &info->bdaddr, ACL_LINK, 0x00,
2966 info->dev_class, info->rssi,
2967 !name_known, ssp, NULL, 0);
2970 struct inquiry_info_with_rssi *info = (void *) (skb->data + 1);
2972 for (; num_rsp; num_rsp--, info++) {
2973 bacpy(&data.bdaddr, &info->bdaddr);
2974 data.pscan_rep_mode = info->pscan_rep_mode;
2975 data.pscan_period_mode = info->pscan_period_mode;
2976 data.pscan_mode = 0x00;
2977 memcpy(data.dev_class, info->dev_class, 3);
2978 data.clock_offset = info->clock_offset;
2979 data.rssi = info->rssi;
2980 data.ssp_mode = 0x00;
2981 name_known = hci_inquiry_cache_update(hdev, &data,
2983 mgmt_device_found(hdev, &info->bdaddr, ACL_LINK, 0x00,
2984 info->dev_class, info->rssi,
2985 !name_known, ssp, NULL, 0);
2989 hci_dev_unlock(hdev);
2992 static void hci_remote_ext_features_evt(struct hci_dev *hdev,
2993 struct sk_buff *skb)
2995 struct hci_ev_remote_ext_features *ev = (void *) skb->data;
2996 struct hci_conn *conn;
2998 BT_DBG("%s", hdev->name);
3002 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
3006 if (ev->page < HCI_MAX_PAGES)
3007 memcpy(conn->features[ev->page], ev->features, 8);
3009 if (!ev->status && ev->page == 0x01) {
3010 struct inquiry_entry *ie;
3012 ie = hci_inquiry_cache_lookup(hdev, &conn->dst);
3014 ie->data.ssp_mode = (ev->features[0] & LMP_HOST_SSP);
3016 if (ev->features[0] & LMP_HOST_SSP) {
3017 set_bit(HCI_CONN_SSP_ENABLED, &conn->flags);
3019 /* It is mandatory by the Bluetooth specification that
3020 * Extended Inquiry Results are only used when Secure
3021 * Simple Pairing is enabled, but some devices violate
3024 * To make these devices work, the internal SSP
3025 * enabled flag needs to be cleared if the remote host
3026 * features do not indicate SSP support */
3027 clear_bit(HCI_CONN_SSP_ENABLED, &conn->flags);
3030 if (ev->features[0] & LMP_HOST_SC)
3031 set_bit(HCI_CONN_SC_ENABLED, &conn->flags);
3034 if (conn->state != BT_CONFIG)
3037 if (!ev->status && !test_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags)) {
3038 struct hci_cp_remote_name_req cp;
3039 memset(&cp, 0, sizeof(cp));
3040 bacpy(&cp.bdaddr, &conn->dst);
3041 cp.pscan_rep_mode = 0x02;
3042 hci_send_cmd(hdev, HCI_OP_REMOTE_NAME_REQ, sizeof(cp), &cp);
3043 } else if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags))
3044 mgmt_device_connected(hdev, &conn->dst, conn->type,
3045 conn->dst_type, 0, NULL, 0,
3048 if (!hci_outgoing_auth_needed(hdev, conn)) {
3049 conn->state = BT_CONNECTED;
3050 hci_proto_connect_cfm(conn, ev->status);
3051 hci_conn_drop(conn);
3055 hci_dev_unlock(hdev);
3058 static void hci_sync_conn_complete_evt(struct hci_dev *hdev,
3059 struct sk_buff *skb)
3061 struct hci_ev_sync_conn_complete *ev = (void *) skb->data;
3062 struct hci_conn *conn;
3064 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3068 conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
3070 if (ev->link_type == ESCO_LINK)
3073 conn = hci_conn_hash_lookup_ba(hdev, ESCO_LINK, &ev->bdaddr);
3077 conn->type = SCO_LINK;
3080 switch (ev->status) {
3082 conn->handle = __le16_to_cpu(ev->handle);
3083 conn->state = BT_CONNECTED;
3085 hci_conn_add_sysfs(conn);
3088 case 0x0d: /* Connection Rejected due to Limited Resources */
3089 case 0x11: /* Unsupported Feature or Parameter Value */
3090 case 0x1c: /* SCO interval rejected */
3091 case 0x1a: /* Unsupported Remote Feature */
3092 case 0x1f: /* Unspecified error */
3094 conn->pkt_type = (hdev->esco_type & SCO_ESCO_MASK) |
3095 (hdev->esco_type & EDR_ESCO_MASK);
3096 if (hci_setup_sync(conn, conn->link->handle))
3102 conn->state = BT_CLOSED;
3106 hci_proto_connect_cfm(conn, ev->status);
3111 hci_dev_unlock(hdev);
3114 static inline size_t eir_get_length(u8 *eir, size_t eir_len)
3118 while (parsed < eir_len) {
3119 u8 field_len = eir[0];
3124 parsed += field_len + 1;
3125 eir += field_len + 1;
3131 static void hci_extended_inquiry_result_evt(struct hci_dev *hdev,
3132 struct sk_buff *skb)
3134 struct inquiry_data data;
3135 struct extended_inquiry_info *info = (void *) (skb->data + 1);
3136 int num_rsp = *((__u8 *) skb->data);
3139 BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
3144 if (test_bit(HCI_PERIODIC_INQ, &hdev->dev_flags))
3149 for (; num_rsp; num_rsp--, info++) {
3150 bool name_known, ssp;
3152 bacpy(&data.bdaddr, &info->bdaddr);
3153 data.pscan_rep_mode = info->pscan_rep_mode;
3154 data.pscan_period_mode = info->pscan_period_mode;
3155 data.pscan_mode = 0x00;
3156 memcpy(data.dev_class, info->dev_class, 3);
3157 data.clock_offset = info->clock_offset;
3158 data.rssi = info->rssi;
3159 data.ssp_mode = 0x01;
3161 if (test_bit(HCI_MGMT, &hdev->dev_flags))
3162 name_known = eir_has_data_type(info->data,
3168 name_known = hci_inquiry_cache_update(hdev, &data, name_known,
3170 eir_len = eir_get_length(info->data, sizeof(info->data));
3171 mgmt_device_found(hdev, &info->bdaddr, ACL_LINK, 0x00,
3172 info->dev_class, info->rssi, !name_known,
3173 ssp, info->data, eir_len);
3176 hci_dev_unlock(hdev);
3179 static void hci_key_refresh_complete_evt(struct hci_dev *hdev,
3180 struct sk_buff *skb)
3182 struct hci_ev_key_refresh_complete *ev = (void *) skb->data;
3183 struct hci_conn *conn;
3185 BT_DBG("%s status 0x%2.2x handle 0x%4.4x", hdev->name, ev->status,
3186 __le16_to_cpu(ev->handle));
3190 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
3195 conn->sec_level = conn->pending_sec_level;
3197 clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
3199 if (ev->status && conn->state == BT_CONNECTED) {
3200 hci_disconnect(conn, HCI_ERROR_AUTH_FAILURE);
3201 hci_conn_drop(conn);
3205 if (conn->state == BT_CONFIG) {
3207 conn->state = BT_CONNECTED;
3209 hci_proto_connect_cfm(conn, ev->status);
3210 hci_conn_drop(conn);
3212 hci_auth_cfm(conn, ev->status);
3214 hci_conn_hold(conn);
3215 conn->disc_timeout = HCI_DISCONN_TIMEOUT;
3216 hci_conn_drop(conn);
3220 hci_dev_unlock(hdev);
3223 static u8 hci_get_auth_req(struct hci_conn *conn)
3225 /* If remote requests dedicated bonding follow that lead */
3226 if (conn->remote_auth == HCI_AT_DEDICATED_BONDING ||
3227 conn->remote_auth == HCI_AT_DEDICATED_BONDING_MITM) {
3228 /* If both remote and local IO capabilities allow MITM
3229 * protection then require it, otherwise don't */
3230 if (conn->remote_cap == HCI_IO_NO_INPUT_OUTPUT ||
3231 conn->io_capability == HCI_IO_NO_INPUT_OUTPUT)
3232 return HCI_AT_DEDICATED_BONDING;
3234 return HCI_AT_DEDICATED_BONDING_MITM;
3237 /* If remote requests no-bonding follow that lead */
3238 if (conn->remote_auth == HCI_AT_NO_BONDING ||
3239 conn->remote_auth == HCI_AT_NO_BONDING_MITM)
3240 return conn->remote_auth | (conn->auth_type & 0x01);
3242 return conn->auth_type;
3245 static void hci_io_capa_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
3247 struct hci_ev_io_capa_request *ev = (void *) skb->data;
3248 struct hci_conn *conn;
3250 BT_DBG("%s", hdev->name);
3254 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3258 hci_conn_hold(conn);
3260 if (!test_bit(HCI_MGMT, &hdev->dev_flags))
3263 if (test_bit(HCI_PAIRABLE, &hdev->dev_flags) ||
3264 (conn->remote_auth & ~0x01) == HCI_AT_NO_BONDING) {
3265 struct hci_cp_io_capability_reply cp;
3267 bacpy(&cp.bdaddr, &ev->bdaddr);
3268 /* Change the IO capability from KeyboardDisplay
3269 * to DisplayYesNo as it is not supported by BT spec. */
3270 cp.capability = (conn->io_capability == 0x04) ?
3271 HCI_IO_DISPLAY_YESNO : conn->io_capability;
3272 conn->auth_type = hci_get_auth_req(conn);
3273 cp.authentication = conn->auth_type;
3275 if (hci_find_remote_oob_data(hdev, &conn->dst) &&
3276 (conn->out || test_bit(HCI_CONN_REMOTE_OOB, &conn->flags)))
3281 hci_send_cmd(hdev, HCI_OP_IO_CAPABILITY_REPLY,
3284 struct hci_cp_io_capability_neg_reply cp;
3286 bacpy(&cp.bdaddr, &ev->bdaddr);
3287 cp.reason = HCI_ERROR_PAIRING_NOT_ALLOWED;
3289 hci_send_cmd(hdev, HCI_OP_IO_CAPABILITY_NEG_REPLY,
3294 hci_dev_unlock(hdev);
3297 static void hci_io_capa_reply_evt(struct hci_dev *hdev, struct sk_buff *skb)
3299 struct hci_ev_io_capa_reply *ev = (void *) skb->data;
3300 struct hci_conn *conn;
3302 BT_DBG("%s", hdev->name);
3306 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3310 conn->remote_cap = ev->capability;
3311 conn->remote_auth = ev->authentication;
3313 set_bit(HCI_CONN_REMOTE_OOB, &conn->flags);
3316 hci_dev_unlock(hdev);
3319 static void hci_user_confirm_request_evt(struct hci_dev *hdev,
3320 struct sk_buff *skb)
3322 struct hci_ev_user_confirm_req *ev = (void *) skb->data;
3323 int loc_mitm, rem_mitm, confirm_hint = 0;
3324 struct hci_conn *conn;
3326 BT_DBG("%s", hdev->name);
3330 if (!test_bit(HCI_MGMT, &hdev->dev_flags))
3333 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3337 loc_mitm = (conn->auth_type & 0x01);
3338 rem_mitm = (conn->remote_auth & 0x01);
3340 /* If we require MITM but the remote device can't provide that
3341 * (it has NoInputNoOutput) then reject the confirmation
3342 * request. The only exception is when we're dedicated bonding
3343 * initiators (connect_cfm_cb set) since then we always have the MITM
3345 if (!conn->connect_cfm_cb && loc_mitm &&
3346 conn->remote_cap == HCI_IO_NO_INPUT_OUTPUT) {
3347 BT_DBG("Rejecting request: remote device can't provide MITM");
3348 hci_send_cmd(hdev, HCI_OP_USER_CONFIRM_NEG_REPLY,
3349 sizeof(ev->bdaddr), &ev->bdaddr);
3353 /* If no side requires MITM protection; auto-accept */
3354 if ((!loc_mitm || conn->remote_cap == HCI_IO_NO_INPUT_OUTPUT) &&
3355 (!rem_mitm || conn->io_capability == HCI_IO_NO_INPUT_OUTPUT)) {
3357 /* If we're not the initiators request authorization to
3358 * proceed from user space (mgmt_user_confirm with
3359 * confirm_hint set to 1). */
3360 if (!test_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
3361 BT_DBG("Confirming auto-accept as acceptor");
3366 BT_DBG("Auto-accept of user confirmation with %ums delay",
3367 hdev->auto_accept_delay);
3369 if (hdev->auto_accept_delay > 0) {
3370 int delay = msecs_to_jiffies(hdev->auto_accept_delay);
3371 queue_delayed_work(conn->hdev->workqueue,
3372 &conn->auto_accept_work, delay);
3376 hci_send_cmd(hdev, HCI_OP_USER_CONFIRM_REPLY,
3377 sizeof(ev->bdaddr), &ev->bdaddr);
3382 mgmt_user_confirm_request(hdev, &ev->bdaddr, ACL_LINK, 0, ev->passkey,
3386 hci_dev_unlock(hdev);
3389 static void hci_user_passkey_request_evt(struct hci_dev *hdev,
3390 struct sk_buff *skb)
3392 struct hci_ev_user_passkey_req *ev = (void *) skb->data;
3394 BT_DBG("%s", hdev->name);
3396 if (test_bit(HCI_MGMT, &hdev->dev_flags))
3397 mgmt_user_passkey_request(hdev, &ev->bdaddr, ACL_LINK, 0);
3400 static void hci_user_passkey_notify_evt(struct hci_dev *hdev,
3401 struct sk_buff *skb)
3403 struct hci_ev_user_passkey_notify *ev = (void *) skb->data;
3404 struct hci_conn *conn;
3406 BT_DBG("%s", hdev->name);
3408 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3412 conn->passkey_notify = __le32_to_cpu(ev->passkey);
3413 conn->passkey_entered = 0;
3415 if (test_bit(HCI_MGMT, &hdev->dev_flags))
3416 mgmt_user_passkey_notify(hdev, &conn->dst, conn->type,
3417 conn->dst_type, conn->passkey_notify,
3418 conn->passkey_entered);
3421 static void hci_keypress_notify_evt(struct hci_dev *hdev, struct sk_buff *skb)
3423 struct hci_ev_keypress_notify *ev = (void *) skb->data;
3424 struct hci_conn *conn;
3426 BT_DBG("%s", hdev->name);
3428 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3433 case HCI_KEYPRESS_STARTED:
3434 conn->passkey_entered = 0;
3437 case HCI_KEYPRESS_ENTERED:
3438 conn->passkey_entered++;
3441 case HCI_KEYPRESS_ERASED:
3442 conn->passkey_entered--;
3445 case HCI_KEYPRESS_CLEARED:
3446 conn->passkey_entered = 0;
3449 case HCI_KEYPRESS_COMPLETED:
3453 if (test_bit(HCI_MGMT, &hdev->dev_flags))
3454 mgmt_user_passkey_notify(hdev, &conn->dst, conn->type,
3455 conn->dst_type, conn->passkey_notify,
3456 conn->passkey_entered);
3459 static void hci_simple_pair_complete_evt(struct hci_dev *hdev,
3460 struct sk_buff *skb)
3462 struct hci_ev_simple_pair_complete *ev = (void *) skb->data;
3463 struct hci_conn *conn;
3465 BT_DBG("%s", hdev->name);
3469 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3473 /* To avoid duplicate auth_failed events to user space we check
3474 * the HCI_CONN_AUTH_PEND flag which will be set if we
3475 * initiated the authentication. A traditional auth_complete
3476 * event gets always produced as initiator and is also mapped to
3477 * the mgmt_auth_failed event */
3478 if (!test_bit(HCI_CONN_AUTH_PEND, &conn->flags) && ev->status)
3479 mgmt_auth_failed(hdev, &conn->dst, conn->type, conn->dst_type,
3482 hci_conn_drop(conn);
3485 hci_dev_unlock(hdev);
3488 static void hci_remote_host_features_evt(struct hci_dev *hdev,
3489 struct sk_buff *skb)
3491 struct hci_ev_remote_host_features *ev = (void *) skb->data;
3492 struct inquiry_entry *ie;
3493 struct hci_conn *conn;
3495 BT_DBG("%s", hdev->name);
3499 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3501 memcpy(conn->features[1], ev->features, 8);
3503 ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr);
3505 ie->data.ssp_mode = (ev->features[0] & LMP_HOST_SSP);
3507 hci_dev_unlock(hdev);
3510 static void hci_remote_oob_data_request_evt(struct hci_dev *hdev,
3511 struct sk_buff *skb)
3513 struct hci_ev_remote_oob_data_request *ev = (void *) skb->data;
3514 struct oob_data *data;
3516 BT_DBG("%s", hdev->name);
3520 if (!test_bit(HCI_MGMT, &hdev->dev_flags))
3523 data = hci_find_remote_oob_data(hdev, &ev->bdaddr);
3525 if (test_bit(HCI_SC_ENABLED, &hdev->dev_flags)) {
3526 struct hci_cp_remote_oob_ext_data_reply cp;
3528 bacpy(&cp.bdaddr, &ev->bdaddr);
3529 memcpy(cp.hash192, data->hash192, sizeof(cp.hash192));
3530 memcpy(cp.randomizer192, data->randomizer192,
3531 sizeof(cp.randomizer192));
3532 memcpy(cp.hash256, data->hash256, sizeof(cp.hash256));
3533 memcpy(cp.randomizer256, data->randomizer256,
3534 sizeof(cp.randomizer256));
3536 hci_send_cmd(hdev, HCI_OP_REMOTE_OOB_EXT_DATA_REPLY,
3539 struct hci_cp_remote_oob_data_reply cp;
3541 bacpy(&cp.bdaddr, &ev->bdaddr);
3542 memcpy(cp.hash, data->hash192, sizeof(cp.hash));
3543 memcpy(cp.randomizer, data->randomizer192,
3544 sizeof(cp.randomizer));
3546 hci_send_cmd(hdev, HCI_OP_REMOTE_OOB_DATA_REPLY,
3550 struct hci_cp_remote_oob_data_neg_reply cp;
3552 bacpy(&cp.bdaddr, &ev->bdaddr);
3553 hci_send_cmd(hdev, HCI_OP_REMOTE_OOB_DATA_NEG_REPLY,
3558 hci_dev_unlock(hdev);
3561 static void hci_phy_link_complete_evt(struct hci_dev *hdev,
3562 struct sk_buff *skb)
3564 struct hci_ev_phy_link_complete *ev = (void *) skb->data;
3565 struct hci_conn *hcon, *bredr_hcon;
3567 BT_DBG("%s handle 0x%2.2x status 0x%2.2x", hdev->name, ev->phy_handle,
3572 hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle);
3574 hci_dev_unlock(hdev);
3580 hci_dev_unlock(hdev);
3584 bredr_hcon = hcon->amp_mgr->l2cap_conn->hcon;
3586 hcon->state = BT_CONNECTED;
3587 bacpy(&hcon->dst, &bredr_hcon->dst);
3589 hci_conn_hold(hcon);
3590 hcon->disc_timeout = HCI_DISCONN_TIMEOUT;
3591 hci_conn_drop(hcon);
3593 hci_conn_add_sysfs(hcon);
3595 amp_physical_cfm(bredr_hcon, hcon);
3597 hci_dev_unlock(hdev);
3600 static void hci_loglink_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
3602 struct hci_ev_logical_link_complete *ev = (void *) skb->data;
3603 struct hci_conn *hcon;
3604 struct hci_chan *hchan;
3605 struct amp_mgr *mgr;
3607 BT_DBG("%s log_handle 0x%4.4x phy_handle 0x%2.2x status 0x%2.2x",
3608 hdev->name, le16_to_cpu(ev->handle), ev->phy_handle,
3611 hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle);
3615 /* Create AMP hchan */
3616 hchan = hci_chan_create(hcon);
3620 hchan->handle = le16_to_cpu(ev->handle);
3622 BT_DBG("hcon %p mgr %p hchan %p", hcon, hcon->amp_mgr, hchan);
3624 mgr = hcon->amp_mgr;
3625 if (mgr && mgr->bredr_chan) {
3626 struct l2cap_chan *bredr_chan = mgr->bredr_chan;
3628 l2cap_chan_lock(bredr_chan);
3630 bredr_chan->conn->mtu = hdev->block_mtu;
3631 l2cap_logical_cfm(bredr_chan, hchan, 0);
3632 hci_conn_hold(hcon);
3634 l2cap_chan_unlock(bredr_chan);
3638 static void hci_disconn_loglink_complete_evt(struct hci_dev *hdev,
3639 struct sk_buff *skb)
3641 struct hci_ev_disconn_logical_link_complete *ev = (void *) skb->data;
3642 struct hci_chan *hchan;
3644 BT_DBG("%s log handle 0x%4.4x status 0x%2.2x", hdev->name,
3645 le16_to_cpu(ev->handle), ev->status);
3652 hchan = hci_chan_lookup_handle(hdev, le16_to_cpu(ev->handle));
3656 amp_destroy_logical_link(hchan, ev->reason);
3659 hci_dev_unlock(hdev);
3662 static void hci_disconn_phylink_complete_evt(struct hci_dev *hdev,
3663 struct sk_buff *skb)
3665 struct hci_ev_disconn_phy_link_complete *ev = (void *) skb->data;
3666 struct hci_conn *hcon;
3668 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3675 hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle);
3677 hcon->state = BT_CLOSED;
3681 hci_dev_unlock(hdev);
3684 static void hci_le_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
3686 struct hci_ev_le_conn_complete *ev = (void *) skb->data;
3687 struct hci_conn *conn;
3688 struct smp_irk *irk;
3690 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3694 conn = hci_conn_hash_lookup_state(hdev, LE_LINK, BT_CONNECT);
3696 conn = hci_conn_add(hdev, LE_LINK, &ev->bdaddr);
3698 BT_ERR("No memory for new connection");
3702 conn->dst_type = ev->bdaddr_type;
3704 /* The advertising parameters for own address type
3705 * define which source address and source address
3706 * type this connections has.
3708 if (bacmp(&conn->src, BDADDR_ANY)) {
3709 conn->src_type = ADDR_LE_DEV_PUBLIC;
3711 bacpy(&conn->src, &hdev->static_addr);
3712 conn->src_type = ADDR_LE_DEV_RANDOM;
3715 if (ev->role == LE_CONN_ROLE_MASTER) {
3717 conn->link_mode |= HCI_LM_MASTER;
3721 /* Ensure that the hci_conn contains the identity address type
3722 * regardless of which address the connection was made with.
3724 hci_copy_identity_address(hdev, &conn->src, &conn->src_type);
3726 /* Lookup the identity address from the stored connection
3727 * address and address type.
3729 * When establishing connections to an identity address, the
3730 * connection procedure will store the resolvable random
3731 * address first. Now if it can be converted back into the
3732 * identity address, start using the identity address from
3735 irk = hci_get_irk(hdev, &conn->dst, conn->dst_type);
3737 bacpy(&conn->dst, &irk->bdaddr);
3738 conn->dst_type = irk->addr_type;
3742 hci_le_conn_failed(conn, ev->status);
3746 if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED, &conn->flags))
3747 mgmt_device_connected(hdev, &conn->dst, conn->type,
3748 conn->dst_type, 0, NULL, 0, NULL);
3750 conn->sec_level = BT_SECURITY_LOW;
3751 conn->handle = __le16_to_cpu(ev->handle);
3752 conn->state = BT_CONNECTED;
3754 if (test_bit(HCI_6LOWPAN_ENABLED, &hdev->dev_flags))
3755 set_bit(HCI_CONN_6LOWPAN, &conn->flags);
3757 hci_conn_add_sysfs(conn);
3759 hci_proto_connect_cfm(conn, ev->status);
3761 hci_pend_le_conn_del(hdev, &conn->dst, conn->dst_type);
3764 hci_dev_unlock(hdev);
3767 /* This function requires the caller holds hdev->lock */
3768 static void check_pending_le_conn(struct hci_dev *hdev, bdaddr_t *addr,
3771 struct hci_conn *conn;
3772 struct smp_irk *irk;
3774 /* If this is a resolvable address, we should resolve it and then
3775 * update address and address type variables.
3777 irk = hci_get_irk(hdev, addr, addr_type);
3779 addr = &irk->bdaddr;
3780 addr_type = irk->addr_type;
3783 if (!hci_pend_le_conn_lookup(hdev, addr, addr_type))
3786 conn = hci_connect_le(hdev, addr, addr_type, BT_SECURITY_LOW,
3791 switch (PTR_ERR(conn)) {
3793 /* If hci_connect() returns -EBUSY it means there is already
3794 * an LE connection attempt going on. Since controllers don't
3795 * support more than one connection attempt at the time, we
3796 * don't consider this an error case.
3800 BT_DBG("Failed to connect: err %ld", PTR_ERR(conn));
3804 static void hci_le_adv_report_evt(struct hci_dev *hdev, struct sk_buff *skb)
3806 u8 num_reports = skb->data[0];
3807 void *ptr = &skb->data[1];
3812 while (num_reports--) {
3813 struct hci_ev_le_advertising_info *ev = ptr;
3815 if (ev->evt_type == LE_ADV_IND ||
3816 ev->evt_type == LE_ADV_DIRECT_IND)
3817 check_pending_le_conn(hdev, &ev->bdaddr,
3820 rssi = ev->data[ev->length];
3821 mgmt_device_found(hdev, &ev->bdaddr, LE_LINK, ev->bdaddr_type,
3822 NULL, rssi, 0, 1, ev->data, ev->length);
3824 ptr += sizeof(*ev) + ev->length + 1;
3827 hci_dev_unlock(hdev);
3830 static void hci_le_ltk_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
3832 struct hci_ev_le_ltk_req *ev = (void *) skb->data;
3833 struct hci_cp_le_ltk_reply cp;
3834 struct hci_cp_le_ltk_neg_reply neg;
3835 struct hci_conn *conn;
3836 struct smp_ltk *ltk;
3838 BT_DBG("%s handle 0x%4.4x", hdev->name, __le16_to_cpu(ev->handle));
3842 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
3846 ltk = hci_find_ltk(hdev, ev->ediv, ev->random, conn->out);
3850 memcpy(cp.ltk, ltk->val, sizeof(ltk->val));
3851 cp.handle = cpu_to_le16(conn->handle);
3853 if (ltk->authenticated)
3854 conn->pending_sec_level = BT_SECURITY_HIGH;
3856 conn->pending_sec_level = BT_SECURITY_MEDIUM;
3858 conn->enc_key_size = ltk->enc_size;
3860 hci_send_cmd(hdev, HCI_OP_LE_LTK_REPLY, sizeof(cp), &cp);
3862 if (ltk->type & HCI_SMP_STK) {
3863 list_del(<k->list);
3867 hci_dev_unlock(hdev);
3872 neg.handle = ev->handle;
3873 hci_send_cmd(hdev, HCI_OP_LE_LTK_NEG_REPLY, sizeof(neg), &neg);
3874 hci_dev_unlock(hdev);
3877 static void hci_le_meta_evt(struct hci_dev *hdev, struct sk_buff *skb)
3879 struct hci_ev_le_meta *le_ev = (void *) skb->data;
3881 skb_pull(skb, sizeof(*le_ev));
3883 switch (le_ev->subevent) {
3884 case HCI_EV_LE_CONN_COMPLETE:
3885 hci_le_conn_complete_evt(hdev, skb);
3888 case HCI_EV_LE_ADVERTISING_REPORT:
3889 hci_le_adv_report_evt(hdev, skb);
3892 case HCI_EV_LE_LTK_REQ:
3893 hci_le_ltk_request_evt(hdev, skb);
3901 static void hci_chan_selected_evt(struct hci_dev *hdev, struct sk_buff *skb)
3903 struct hci_ev_channel_selected *ev = (void *) skb->data;
3904 struct hci_conn *hcon;
3906 BT_DBG("%s handle 0x%2.2x", hdev->name, ev->phy_handle);
3908 skb_pull(skb, sizeof(*ev));
3910 hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle);
3914 amp_read_loc_assoc_final_data(hdev, hcon);
3917 void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb)
3919 struct hci_event_hdr *hdr = (void *) skb->data;
3920 __u8 event = hdr->evt;
3924 /* Received events are (currently) only needed when a request is
3925 * ongoing so avoid unnecessary memory allocation.
3927 if (hdev->req_status == HCI_REQ_PEND) {
3928 kfree_skb(hdev->recv_evt);
3929 hdev->recv_evt = skb_clone(skb, GFP_KERNEL);
3932 hci_dev_unlock(hdev);
3934 skb_pull(skb, HCI_EVENT_HDR_SIZE);
3936 if (hdev->sent_cmd && bt_cb(hdev->sent_cmd)->req.event == event) {
3937 struct hci_command_hdr *cmd_hdr = (void *) hdev->sent_cmd->data;
3938 u16 opcode = __le16_to_cpu(cmd_hdr->opcode);
3940 hci_req_cmd_complete(hdev, opcode, 0);
3944 case HCI_EV_INQUIRY_COMPLETE:
3945 hci_inquiry_complete_evt(hdev, skb);
3948 case HCI_EV_INQUIRY_RESULT:
3949 hci_inquiry_result_evt(hdev, skb);
3952 case HCI_EV_CONN_COMPLETE:
3953 hci_conn_complete_evt(hdev, skb);
3956 case HCI_EV_CONN_REQUEST:
3957 hci_conn_request_evt(hdev, skb);
3960 case HCI_EV_DISCONN_COMPLETE:
3961 hci_disconn_complete_evt(hdev, skb);
3964 case HCI_EV_AUTH_COMPLETE:
3965 hci_auth_complete_evt(hdev, skb);
3968 case HCI_EV_REMOTE_NAME:
3969 hci_remote_name_evt(hdev, skb);
3972 case HCI_EV_ENCRYPT_CHANGE:
3973 hci_encrypt_change_evt(hdev, skb);
3976 case HCI_EV_CHANGE_LINK_KEY_COMPLETE:
3977 hci_change_link_key_complete_evt(hdev, skb);
3980 case HCI_EV_REMOTE_FEATURES:
3981 hci_remote_features_evt(hdev, skb);
3984 case HCI_EV_CMD_COMPLETE:
3985 hci_cmd_complete_evt(hdev, skb);
3988 case HCI_EV_CMD_STATUS:
3989 hci_cmd_status_evt(hdev, skb);
3992 case HCI_EV_ROLE_CHANGE:
3993 hci_role_change_evt(hdev, skb);
3996 case HCI_EV_NUM_COMP_PKTS:
3997 hci_num_comp_pkts_evt(hdev, skb);
4000 case HCI_EV_MODE_CHANGE:
4001 hci_mode_change_evt(hdev, skb);
4004 case HCI_EV_PIN_CODE_REQ:
4005 hci_pin_code_request_evt(hdev, skb);
4008 case HCI_EV_LINK_KEY_REQ:
4009 hci_link_key_request_evt(hdev, skb);
4012 case HCI_EV_LINK_KEY_NOTIFY:
4013 hci_link_key_notify_evt(hdev, skb);
4016 case HCI_EV_CLOCK_OFFSET:
4017 hci_clock_offset_evt(hdev, skb);
4020 case HCI_EV_PKT_TYPE_CHANGE:
4021 hci_pkt_type_change_evt(hdev, skb);
4024 case HCI_EV_PSCAN_REP_MODE:
4025 hci_pscan_rep_mode_evt(hdev, skb);
4028 case HCI_EV_INQUIRY_RESULT_WITH_RSSI:
4029 hci_inquiry_result_with_rssi_evt(hdev, skb);
4032 case HCI_EV_REMOTE_EXT_FEATURES:
4033 hci_remote_ext_features_evt(hdev, skb);
4036 case HCI_EV_SYNC_CONN_COMPLETE:
4037 hci_sync_conn_complete_evt(hdev, skb);
4040 case HCI_EV_EXTENDED_INQUIRY_RESULT:
4041 hci_extended_inquiry_result_evt(hdev, skb);
4044 case HCI_EV_KEY_REFRESH_COMPLETE:
4045 hci_key_refresh_complete_evt(hdev, skb);
4048 case HCI_EV_IO_CAPA_REQUEST:
4049 hci_io_capa_request_evt(hdev, skb);
4052 case HCI_EV_IO_CAPA_REPLY:
4053 hci_io_capa_reply_evt(hdev, skb);
4056 case HCI_EV_USER_CONFIRM_REQUEST:
4057 hci_user_confirm_request_evt(hdev, skb);
4060 case HCI_EV_USER_PASSKEY_REQUEST:
4061 hci_user_passkey_request_evt(hdev, skb);
4064 case HCI_EV_USER_PASSKEY_NOTIFY:
4065 hci_user_passkey_notify_evt(hdev, skb);
4068 case HCI_EV_KEYPRESS_NOTIFY:
4069 hci_keypress_notify_evt(hdev, skb);
4072 case HCI_EV_SIMPLE_PAIR_COMPLETE:
4073 hci_simple_pair_complete_evt(hdev, skb);
4076 case HCI_EV_REMOTE_HOST_FEATURES:
4077 hci_remote_host_features_evt(hdev, skb);
4080 case HCI_EV_LE_META:
4081 hci_le_meta_evt(hdev, skb);
4084 case HCI_EV_CHANNEL_SELECTED:
4085 hci_chan_selected_evt(hdev, skb);
4088 case HCI_EV_REMOTE_OOB_DATA_REQUEST:
4089 hci_remote_oob_data_request_evt(hdev, skb);
4092 case HCI_EV_PHY_LINK_COMPLETE:
4093 hci_phy_link_complete_evt(hdev, skb);
4096 case HCI_EV_LOGICAL_LINK_COMPLETE:
4097 hci_loglink_complete_evt(hdev, skb);
4100 case HCI_EV_DISCONN_LOGICAL_LINK_COMPLETE:
4101 hci_disconn_loglink_complete_evt(hdev, skb);
4104 case HCI_EV_DISCONN_PHY_LINK_COMPLETE:
4105 hci_disconn_phylink_complete_evt(hdev, skb);
4108 case HCI_EV_NUM_COMP_BLOCKS:
4109 hci_num_comp_blocks_evt(hdev, skb);
4113 BT_DBG("%s event 0x%2.2x", hdev->name, event);
4118 hdev->stat.evt_rx++;