Lines Matching defs:hdev

47 static void hci_cc_inquiry_cancel(struct hci_dev *hdev, struct sk_buff *skb,
52 BT_DBG("%s status 0x%2.2x", hdev->name, status);
61 if (status == 0x0c && !test_bit(HCI_INQUIRY, &hdev->flags)) {
62 bt_dev_warn(hdev, "Ignoring error of Inquiry Cancel command");
71 clear_bit(HCI_INQUIRY, &hdev->flags);
73 wake_up_bit(&hdev->flags, HCI_INQUIRY);
75 hci_dev_lock(hdev);
79 if (!hci_dev_test_flag(hdev, HCI_LE_SCAN) ||
80 hdev->le_scan_type != LE_SCAN_ACTIVE)
81 hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
82 hci_dev_unlock(hdev);
84 hci_conn_check_pending(hdev);
87 static void hci_cc_periodic_inq(struct hci_dev *hdev, struct sk_buff *skb)
91 BT_DBG("%s status 0x%2.2x", hdev->name, status);
96 hci_dev_set_flag(hdev, HCI_PERIODIC_INQ);
99 static void hci_cc_exit_periodic_inq(struct hci_dev *hdev, struct sk_buff *skb)
103 BT_DBG("%s status 0x%2.2x", hdev->name, status);
108 hci_dev_clear_flag(hdev, HCI_PERIODIC_INQ);
110 hci_conn_check_pending(hdev);
113 static void hci_cc_remote_name_req_cancel(struct hci_dev *hdev,
116 BT_DBG("%s", hdev->name);
119 static void hci_cc_role_discovery(struct hci_dev *hdev, struct sk_buff *skb)
124 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
129 hci_dev_lock(hdev);
131 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
135 hci_dev_unlock(hdev);
138 static void hci_cc_read_link_policy(struct hci_dev *hdev, struct sk_buff *skb)
143 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
148 hci_dev_lock(hdev);
150 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
154 hci_dev_unlock(hdev);
157 static void hci_cc_write_link_policy(struct hci_dev *hdev, struct sk_buff *skb)
163 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
168 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_LINK_POLICY);
172 hci_dev_lock(hdev);
174 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
178 hci_dev_unlock(hdev);
181 static void hci_cc_read_def_link_policy(struct hci_dev *hdev,
186 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
191 hdev->link_policy = __le16_to_cpu(rp->policy);
194 static void hci_cc_write_def_link_policy(struct hci_dev *hdev,
200 BT_DBG("%s status 0x%2.2x", hdev->name, status);
205 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_DEF_LINK_POLICY);
209 hdev->link_policy = get_unaligned_le16(sent);
212 static void hci_cc_reset(struct hci_dev *hdev, struct sk_buff *skb)
216 BT_DBG("%s status 0x%2.2x", hdev->name, status);
218 clear_bit(HCI_RESET, &hdev->flags);
224 hci_dev_clear_volatile_flags(hdev);
226 hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
228 hdev->inq_tx_power = HCI_TX_POWER_INVALID;
229 hdev->adv_tx_power = HCI_TX_POWER_INVALID;
231 memset(hdev->adv_data, 0, sizeof(hdev->adv_data));
232 hdev->adv_data_len = 0;
234 memset(hdev->scan_rsp_data, 0, sizeof(hdev->scan_rsp_data));
235 hdev->scan_rsp_data_len = 0;
237 hdev->le_scan_type = LE_SCAN_PASSIVE;
239 hdev->ssp_debug_mode = 0;
241 hci_bdaddr_list_clear(&hdev->le_accept_list);
242 hci_bdaddr_list_clear(&hdev->le_resolv_list);
245 static void hci_cc_read_stored_link_key(struct hci_dev *hdev,
251 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
253 sent = hci_sent_cmd_data(hdev, HCI_OP_READ_STORED_LINK_KEY);
258 hdev->stored_max_keys = rp->max_keys;
259 hdev->stored_num_keys = rp->num_keys;
263 static void hci_cc_delete_stored_link_key(struct hci_dev *hdev,
268 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
273 if (rp->num_keys <= hdev->stored_num_keys)
274 hdev->stored_num_keys -= rp->num_keys;
276 hdev->stored_num_keys = 0;
279 static void hci_cc_write_local_name(struct hci_dev *hdev, struct sk_buff *skb)
284 BT_DBG("%s status 0x%2.2x", hdev->name, status);
286 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_LOCAL_NAME);
290 hci_dev_lock(hdev);
292 if (hci_dev_test_flag(hdev, HCI_MGMT))
293 mgmt_set_local_name_complete(hdev, sent, status);
295 memcpy(hdev->dev_name, sent, HCI_MAX_NAME_LENGTH);
297 hci_dev_unlock(hdev);
300 static void hci_cc_read_local_name(struct hci_dev *hdev, struct sk_buff *skb)
304 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
309 if (hci_dev_test_flag(hdev, HCI_SETUP) ||
310 hci_dev_test_flag(hdev, HCI_CONFIG))
311 memcpy(hdev->dev_name, rp->name, HCI_MAX_NAME_LENGTH);
314 static void hci_cc_write_auth_enable(struct hci_dev *hdev, struct sk_buff *skb)
319 BT_DBG("%s status 0x%2.2x", hdev->name, status);
321 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_AUTH_ENABLE);
325 hci_dev_lock(hdev);
331 set_bit(HCI_AUTH, &hdev->flags);
333 clear_bit(HCI_AUTH, &hdev->flags);
336 if (hci_dev_test_flag(hdev, HCI_MGMT))
337 mgmt_auth_enable_complete(hdev, status);
339 hci_dev_unlock(hdev);
342 static void hci_cc_write_encrypt_mode(struct hci_dev *hdev, struct sk_buff *skb)
348 BT_DBG("%s status 0x%2.2x", hdev->name, status);
353 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_ENCRYPT_MODE);
360 set_bit(HCI_ENCRYPT, &hdev->flags);
362 clear_bit(HCI_ENCRYPT, &hdev->flags);
365 static void hci_cc_write_scan_enable(struct hci_dev *hdev, struct sk_buff *skb)
371 BT_DBG("%s status 0x%2.2x", hdev->name, status);
373 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_SCAN_ENABLE);
379 hci_dev_lock(hdev);
382 hdev->discov_timeout = 0;
387 set_bit(HCI_ISCAN, &hdev->flags);
389 clear_bit(HCI_ISCAN, &hdev->flags);
392 set_bit(HCI_PSCAN, &hdev->flags);
394 clear_bit(HCI_PSCAN, &hdev->flags);
397 hci_dev_unlock(hdev);
400 static void hci_cc_read_class_of_dev(struct hci_dev *hdev, struct sk_buff *skb)
404 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
409 memcpy(hdev->dev_class, rp->dev_class, 3);
411 BT_DBG("%s class 0x%.2x%.2x%.2x", hdev->name,
412 hdev->dev_class[2], hdev->dev_class[1], hdev->dev_class[0]);
415 static void hci_cc_write_class_of_dev(struct hci_dev *hdev, struct sk_buff *skb)
420 BT_DBG("%s status 0x%2.2x", hdev->name, status);
422 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_CLASS_OF_DEV);
426 hci_dev_lock(hdev);
429 memcpy(hdev->dev_class, sent, 3);
431 if (hci_dev_test_flag(hdev, HCI_MGMT))
432 mgmt_set_class_of_dev_complete(hdev, sent, status);
434 hci_dev_unlock(hdev);
437 static void hci_cc_read_voice_setting(struct hci_dev *hdev, struct sk_buff *skb)
442 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
449 if (hdev->voice_setting == setting)
452 hdev->voice_setting = setting;
454 BT_DBG("%s voice setting 0x%4.4x", hdev->name, setting);
456 if (hdev->notify)
457 hdev->notify(hdev, HCI_NOTIFY_VOICE_SETTING);
460 static void hci_cc_write_voice_setting(struct hci_dev *hdev,
467 BT_DBG("%s status 0x%2.2x", hdev->name, status);
472 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_VOICE_SETTING);
478 if (hdev->voice_setting == setting)
481 hdev->voice_setting = setting;
483 BT_DBG("%s voice setting 0x%4.4x", hdev->name, setting);
485 if (hdev->notify)
486 hdev->notify(hdev, HCI_NOTIFY_VOICE_SETTING);
489 static void hci_cc_read_num_supported_iac(struct hci_dev *hdev,
494 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
499 hdev->num_iac = rp->num_iac;
501 BT_DBG("%s num iac %d", hdev->name, hdev->num_iac);
504 static void hci_cc_write_ssp_mode(struct hci_dev *hdev, struct sk_buff *skb)
509 BT_DBG("%s status 0x%2.2x", hdev->name, status);
511 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_SSP_MODE);
515 hci_dev_lock(hdev);
519 hdev->features[1][0] |= LMP_HOST_SSP;
521 hdev->features[1][0] &= ~LMP_HOST_SSP;
524 if (hci_dev_test_flag(hdev, HCI_MGMT))
525 mgmt_ssp_enable_complete(hdev, sent->mode, status);
528 hci_dev_set_flag(hdev, HCI_SSP_ENABLED);
530 hci_dev_clear_flag(hdev, HCI_SSP_ENABLED);
533 hci_dev_unlock(hdev);
536 static void hci_cc_write_sc_support(struct hci_dev *hdev, struct sk_buff *skb)
541 BT_DBG("%s status 0x%2.2x", hdev->name, status);
543 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_SC_SUPPORT);
547 hci_dev_lock(hdev);
551 hdev->features[1][0] |= LMP_HOST_SC;
553 hdev->features[1][0] &= ~LMP_HOST_SC;
556 if (!hci_dev_test_flag(hdev, HCI_MGMT) && !status) {
558 hci_dev_set_flag(hdev, HCI_SC_ENABLED);
560 hci_dev_clear_flag(hdev, HCI_SC_ENABLED);
563 hci_dev_unlock(hdev);
566 static void hci_cc_read_local_version(struct hci_dev *hdev, struct sk_buff *skb)
570 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
575 if (hci_dev_test_flag(hdev, HCI_SETUP) ||
576 hci_dev_test_flag(hdev, HCI_CONFIG)) {
577 hdev->hci_ver = rp->hci_ver;
578 hdev->hci_rev = __le16_to_cpu(rp->hci_rev);
579 hdev->lmp_ver = rp->lmp_ver;
580 hdev->manufacturer = __le16_to_cpu(rp->manufacturer);
581 hdev->lmp_subver = __le16_to_cpu(rp->lmp_subver);
585 static void hci_cc_read_local_commands(struct hci_dev *hdev,
590 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
595 if (hci_dev_test_flag(hdev, HCI_SETUP) ||
596 hci_dev_test_flag(hdev, HCI_CONFIG))
597 memcpy(hdev->commands, rp->commands, sizeof(hdev->commands));
600 static void hci_cc_read_auth_payload_timeout(struct hci_dev *hdev,
606 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
611 hci_dev_lock(hdev);
613 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
617 hci_dev_unlock(hdev);
620 static void hci_cc_write_auth_payload_timeout(struct hci_dev *hdev,
627 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
632 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_AUTH_PAYLOAD_TO);
636 hci_dev_lock(hdev);
638 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
642 hci_dev_unlock(hdev);
645 static void hci_cc_read_local_features(struct hci_dev *hdev,
650 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
655 memcpy(hdev->features, rp->features, 8);
660 if (hdev->features[0][0] & LMP_3SLOT)
661 hdev->pkt_type |= (HCI_DM3 | HCI_DH3);
663 if (hdev->features[0][0] & LMP_5SLOT)
664 hdev->pkt_type |= (HCI_DM5 | HCI_DH5);
666 if (hdev->features[0][1] & LMP_HV2) {
667 hdev->pkt_type |= (HCI_HV2);
668 hdev->esco_type |= (ESCO_HV2);
671 if (hdev->features[0][1] & LMP_HV3) {
672 hdev->pkt_type |= (HCI_HV3);
673 hdev->esco_type |= (ESCO_HV3);
676 if (lmp_esco_capable(hdev))
677 hdev->esco_type |= (ESCO_EV3);
679 if (hdev->features[0][4] & LMP_EV4)
680 hdev->esco_type |= (ESCO_EV4);
682 if (hdev->features[0][4] & LMP_EV5)
683 hdev->esco_type |= (ESCO_EV5);
685 if (hdev->features[0][5] & LMP_EDR_ESCO_2M)
686 hdev->esco_type |= (ESCO_2EV3);
688 if (hdev->features[0][5] & LMP_EDR_ESCO_3M)
689 hdev->esco_type |= (ESCO_3EV3);
691 if (hdev->features[0][5] & LMP_EDR_3S_ESCO)
692 hdev->esco_type |= (ESCO_2EV5 | ESCO_3EV5);
695 static void hci_cc_read_local_ext_features(struct hci_dev *hdev,
700 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
705 if (hdev->max_page < rp->max_page)
706 hdev->max_page = rp->max_page;
709 memcpy(hdev->features[rp->page], rp->features, 8);
712 static void hci_cc_read_flow_control_mode(struct hci_dev *hdev,
717 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
722 hdev->flow_ctl_mode = rp->mode;
725 static void hci_cc_read_buffer_size(struct hci_dev *hdev, struct sk_buff *skb)
729 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
734 hdev->acl_mtu = __le16_to_cpu(rp->acl_mtu);
735 hdev->sco_mtu = rp->sco_mtu;
736 hdev->acl_pkts = __le16_to_cpu(rp->acl_max_pkt);
737 hdev->sco_pkts = __le16_to_cpu(rp->sco_max_pkt);
739 if (test_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE, &hdev->quirks)) {
740 hdev->sco_mtu = 64;
741 hdev->sco_pkts = 8;
744 hdev->acl_cnt = hdev->acl_pkts;
745 hdev->sco_cnt = hdev->sco_pkts;
747 BT_DBG("%s acl mtu %d:%d sco mtu %d:%d", hdev->name, hdev->acl_mtu,
748 hdev->acl_pkts, hdev->sco_mtu, hdev->sco_pkts);
751 static void hci_cc_read_bd_addr(struct hci_dev *hdev, struct sk_buff *skb)
755 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
760 if (test_bit(HCI_INIT, &hdev->flags))
761 bacpy(&hdev->bdaddr, &rp->bdaddr);
763 if (hci_dev_test_flag(hdev, HCI_SETUP))
764 bacpy(&hdev->setup_addr, &rp->bdaddr);
767 static void hci_cc_read_local_pairing_opts(struct hci_dev *hdev,
772 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
777 if (hci_dev_test_flag(hdev, HCI_SETUP) ||
778 hci_dev_test_flag(hdev, HCI_CONFIG)) {
779 hdev->pairing_opts = rp->pairing_opts;
780 hdev->max_enc_key_size = rp->max_key_size;
784 static void hci_cc_read_page_scan_activity(struct hci_dev *hdev,
789 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
794 if (test_bit(HCI_INIT, &hdev->flags)) {
795 hdev->page_scan_interval = __le16_to_cpu(rp->interval);
796 hdev->page_scan_window = __le16_to_cpu(rp->window);
800 static void hci_cc_write_page_scan_activity(struct hci_dev *hdev,
806 BT_DBG("%s status 0x%2.2x", hdev->name, status);
811 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_PAGE_SCAN_ACTIVITY);
815 hdev->page_scan_interval = __le16_to_cpu(sent->interval);
816 hdev->page_scan_window = __le16_to_cpu(sent->window);
819 static void hci_cc_read_page_scan_type(struct hci_dev *hdev,
824 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
829 if (test_bit(HCI_INIT, &hdev->flags))
830 hdev->page_scan_type = rp->type;
833 static void hci_cc_write_page_scan_type(struct hci_dev *hdev,
839 BT_DBG("%s status 0x%2.2x", hdev->name, status);
844 type = hci_sent_cmd_data(hdev, HCI_OP_WRITE_PAGE_SCAN_TYPE);
846 hdev->page_scan_type = *type;
849 static void hci_cc_read_data_block_size(struct hci_dev *hdev,
854 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
859 hdev->block_mtu = __le16_to_cpu(rp->max_acl_len);
860 hdev->block_len = __le16_to_cpu(rp->block_len);
861 hdev->num_blocks = __le16_to_cpu(rp->num_blocks);
863 hdev->block_cnt = hdev->num_blocks;
865 BT_DBG("%s blk mtu %d cnt %d len %d", hdev->name, hdev->block_mtu,
866 hdev->block_cnt, hdev->block_len);
869 static void hci_cc_read_clock(struct hci_dev *hdev, struct sk_buff *skb)
875 BT_DBG("%s", hdev->name);
883 hci_dev_lock(hdev);
885 cp = hci_sent_cmd_data(hdev, HCI_OP_READ_CLOCK);
890 hdev->clock = le32_to_cpu(rp->clock);
894 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
901 hci_dev_unlock(hdev);
904 static void hci_cc_read_local_amp_info(struct hci_dev *hdev,
909 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
914 hdev->amp_status = rp->amp_status;
915 hdev->amp_total_bw = __le32_to_cpu(rp->total_bw);
916 hdev->amp_max_bw = __le32_to_cpu(rp->max_bw);
917 hdev->amp_min_latency = __le32_to_cpu(rp->min_latency);
918 hdev->amp_max_pdu = __le32_to_cpu(rp->max_pdu);
919 hdev->amp_type = rp->amp_type;
920 hdev->amp_pal_cap = __le16_to_cpu(rp->pal_cap);
921 hdev->amp_assoc_size = __le16_to_cpu(rp->max_assoc_size);
922 hdev->amp_be_flush_to = __le32_to_cpu(rp->be_flush_to);
923 hdev->amp_max_flush_to = __le32_to_cpu(rp->max_flush_to);
926 static void hci_cc_read_inq_rsp_tx_power(struct hci_dev *hdev,
931 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
936 hdev->inq_tx_power = rp->tx_power;
939 static void hci_cc_read_def_err_data_reporting(struct hci_dev *hdev,
944 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
949 hdev->err_data_reporting = rp->err_data_reporting;
952 static void hci_cc_write_def_err_data_reporting(struct hci_dev *hdev,
958 BT_DBG("%s status 0x%2.2x", hdev->name, status);
963 cp = hci_sent_cmd_data(hdev, HCI_OP_WRITE_DEF_ERR_DATA_REPORTING);
967 hdev->err_data_reporting = cp->err_data_reporting;
970 static void hci_cc_pin_code_reply(struct hci_dev *hdev, struct sk_buff *skb)
976 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
978 hci_dev_lock(hdev);
980 if (hci_dev_test_flag(hdev, HCI_MGMT))
981 mgmt_pin_code_reply_complete(hdev, &rp->bdaddr, rp->status);
986 cp = hci_sent_cmd_data(hdev, HCI_OP_PIN_CODE_REPLY);
990 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
995 hci_dev_unlock(hdev);
998 static void hci_cc_pin_code_neg_reply(struct hci_dev *hdev, struct sk_buff *skb)
1002 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1004 hci_dev_lock(hdev);
1006 if (hci_dev_test_flag(hdev, HCI_MGMT))
1007 mgmt_pin_code_neg_reply_complete(hdev, &rp->bdaddr,
1010 hci_dev_unlock(hdev);
1013 static void hci_cc_le_read_buffer_size(struct hci_dev *hdev,
1018 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1023 hdev->le_mtu = __le16_to_cpu(rp->le_mtu);
1024 hdev->le_pkts = rp->le_max_pkt;
1026 hdev->le_cnt = hdev->le_pkts;
1028 BT_DBG("%s le mtu %d:%d", hdev->name, hdev->le_mtu, hdev->le_pkts);
1031 static void hci_cc_le_read_local_features(struct hci_dev *hdev,
1036 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1041 memcpy(hdev->le_features, rp->features, 8);
1044 static void hci_cc_le_read_adv_tx_power(struct hci_dev *hdev,
1049 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1054 hdev->adv_tx_power = rp->tx_power;
1057 static void hci_cc_user_confirm_reply(struct hci_dev *hdev, struct sk_buff *skb)
1061 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1063 hci_dev_lock(hdev);
1065 if (hci_dev_test_flag(hdev, HCI_MGMT))
1066 mgmt_user_confirm_reply_complete(hdev, &rp->bdaddr, ACL_LINK, 0,
1069 hci_dev_unlock(hdev);
1072 static void hci_cc_user_confirm_neg_reply(struct hci_dev *hdev,
1077 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1079 hci_dev_lock(hdev);
1081 if (hci_dev_test_flag(hdev, HCI_MGMT))
1082 mgmt_user_confirm_neg_reply_complete(hdev, &rp->bdaddr,
1085 hci_dev_unlock(hdev);
1088 static void hci_cc_user_passkey_reply(struct hci_dev *hdev, struct sk_buff *skb)
1092 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1094 hci_dev_lock(hdev);
1096 if (hci_dev_test_flag(hdev, HCI_MGMT))
1097 mgmt_user_passkey_reply_complete(hdev, &rp->bdaddr, ACL_LINK,
1100 hci_dev_unlock(hdev);
1103 static void hci_cc_user_passkey_neg_reply(struct hci_dev *hdev,
1108 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1110 hci_dev_lock(hdev);
1112 if (hci_dev_test_flag(hdev, HCI_MGMT))
1113 mgmt_user_passkey_neg_reply_complete(hdev, &rp->bdaddr,
1116 hci_dev_unlock(hdev);
1119 static void hci_cc_read_local_oob_data(struct hci_dev *hdev,
1124 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1127 static void hci_cc_read_local_oob_ext_data(struct hci_dev *hdev,
1132 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1135 static void hci_cc_le_set_random_addr(struct hci_dev *hdev, struct sk_buff *skb)
1140 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1145 sent = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_RANDOM_ADDR);
1149 hci_dev_lock(hdev);
1151 bacpy(&hdev->random_addr, sent);
1153 hci_dev_unlock(hdev);
1156 static void hci_cc_le_set_default_phy(struct hci_dev *hdev, struct sk_buff *skb)
1161 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1166 cp = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_DEFAULT_PHY);
1170 hci_dev_lock(hdev);
1172 hdev->le_tx_def_phys = cp->tx_phys;
1173 hdev->le_rx_def_phys = cp->rx_phys;
1175 hci_dev_unlock(hdev);
1178 static void hci_cc_le_set_adv_set_random_addr(struct hci_dev *hdev,
1188 cp = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_ADV_SET_RAND_ADDR);
1192 hci_dev_lock(hdev);
1194 if (!hdev->cur_adv_instance) {
1195 /* Store in hdev for instance 0 (Set adv and Directed advs) */
1196 bacpy(&hdev->random_addr, &cp->bdaddr);
1198 adv_instance = hci_find_adv_instance(hdev,
1199 hdev->cur_adv_instance);
1204 hci_dev_unlock(hdev);
1207 static void hci_cc_le_set_adv_enable(struct hci_dev *hdev, struct sk_buff *skb)
1211 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1216 sent = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_ADV_ENABLE);
1220 hci_dev_lock(hdev);
1228 hci_dev_set_flag(hdev, HCI_LE_ADV);
1230 conn = hci_lookup_le_connect(hdev);
1232 queue_delayed_work(hdev->workqueue,
1236 hci_dev_clear_flag(hdev, HCI_LE_ADV);
1239 hci_dev_unlock(hdev);
1242 static void hci_cc_le_set_ext_adv_enable(struct hci_dev *hdev,
1248 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1253 cp = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_EXT_ADV_ENABLE);
1257 hci_dev_lock(hdev);
1262 hci_dev_set_flag(hdev, HCI_LE_ADV);
1264 conn = hci_lookup_le_connect(hdev);
1266 queue_delayed_work(hdev->workqueue,
1270 hci_dev_clear_flag(hdev, HCI_LE_ADV);
1273 hci_dev_unlock(hdev);
1276 static void hci_cc_le_set_scan_param(struct hci_dev *hdev, struct sk_buff *skb)
1281 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1286 cp = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_SCAN_PARAM);
1290 hci_dev_lock(hdev);
1292 hdev->le_scan_type = cp->type;
1294 hci_dev_unlock(hdev);
1297 static void hci_cc_le_set_ext_scan_param(struct hci_dev *hdev,
1304 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1309 cp = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_EXT_SCAN_PARAMS);
1315 hci_dev_lock(hdev);
1317 hdev->le_scan_type = phy_param->type;
1319 hci_dev_unlock(hdev);
1322 static bool has_pending_adv_report(struct hci_dev *hdev)
1324 struct discovery_state *d = &hdev->discovery;
1329 static void clear_pending_adv_report(struct hci_dev *hdev)
1331 struct discovery_state *d = &hdev->discovery;
1337 static void store_pending_adv_report(struct hci_dev *hdev, bdaddr_t *bdaddr,
1341 struct discovery_state *d = &hdev->discovery;
1354 static void le_set_scan_enable_complete(struct hci_dev *hdev, u8 enable)
1356 hci_dev_lock(hdev);
1360 hci_dev_set_flag(hdev, HCI_LE_SCAN);
1361 if (hdev->le_scan_type == LE_SCAN_ACTIVE)
1362 clear_pending_adv_report(hdev);
1370 if (has_pending_adv_report(hdev)) {
1371 struct discovery_state *d = &hdev->discovery;
1373 mgmt_device_found(hdev, &d->last_adv_addr, LE_LINK,
1383 cancel_delayed_work(&hdev->le_scan_disable);
1385 hci_dev_clear_flag(hdev, HCI_LE_SCAN);
1394 if (hci_dev_test_and_clear_flag(hdev, HCI_LE_SCAN_INTERRUPTED))
1395 hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
1396 else if (!hci_dev_test_flag(hdev, HCI_LE_ADV) &&
1397 hdev->discovery.state == DISCOVERY_FINDING)
1398 hci_req_reenable_advertising(hdev);
1403 bt_dev_err(hdev, "use of reserved LE_Scan_Enable param %d",
1408 hci_dev_unlock(hdev);
1411 static void hci_cc_le_set_scan_enable(struct hci_dev *hdev,
1417 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1422 cp = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_SCAN_ENABLE);
1426 le_set_scan_enable_complete(hdev, cp->enable);
1429 static void hci_cc_le_set_ext_scan_enable(struct hci_dev *hdev,
1435 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1440 cp = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_EXT_SCAN_ENABLE);
1444 le_set_scan_enable_complete(hdev, cp->enable);
1447 static void hci_cc_le_read_num_adv_sets(struct hci_dev *hdev,
1452 BT_DBG("%s status 0x%2.2x No of Adv sets %u", hdev->name, rp->status,
1458 hdev->le_num_of_adv_sets = rp->num_of_sets;
1461 static void hci_cc_le_read_accept_list_size(struct hci_dev *hdev,
1466 BT_DBG("%s status 0x%2.2x size %u", hdev->name, rp->status, rp->size);
1471 hdev->le_accept_list_size = rp->size;
1474 static void hci_cc_le_clear_accept_list(struct hci_dev *hdev,
1479 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1484 hci_bdaddr_list_clear(&hdev->le_accept_list);
1487 static void hci_cc_le_add_to_accept_list(struct hci_dev *hdev,
1493 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1498 sent = hci_sent_cmd_data(hdev, HCI_OP_LE_ADD_TO_ACCEPT_LIST);
1502 hci_bdaddr_list_add(&hdev->le_accept_list, &sent->bdaddr,
1506 static void hci_cc_le_del_from_accept_list(struct hci_dev *hdev,
1512 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1517 sent = hci_sent_cmd_data(hdev, HCI_OP_LE_DEL_FROM_ACCEPT_LIST);
1521 hci_bdaddr_list_del(&hdev->le_accept_list, &sent->bdaddr,
1525 static void hci_cc_le_read_supported_states(struct hci_dev *hdev,
1530 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1535 memcpy(hdev->le_states, rp->le_states, 8);
1538 static void hci_cc_le_read_def_data_len(struct hci_dev *hdev,
1543 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1548 hdev->le_def_tx_len = le16_to_cpu(rp->tx_len);
1549 hdev->le_def_tx_time = le16_to_cpu(rp->tx_time);
1552 static void hci_cc_le_write_def_data_len(struct hci_dev *hdev,
1558 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1563 sent = hci_sent_cmd_data(hdev, HCI_OP_LE_WRITE_DEF_DATA_LEN);
1567 hdev->le_def_tx_len = le16_to_cpu(sent->tx_len);
1568 hdev->le_def_tx_time = le16_to_cpu(sent->tx_time);
1571 static void hci_cc_le_add_to_resolv_list(struct hci_dev *hdev,
1577 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1582 sent = hci_sent_cmd_data(hdev, HCI_OP_LE_ADD_TO_RESOLV_LIST);
1586 hci_bdaddr_list_add_with_irk(&hdev->le_resolv_list, &sent->bdaddr,
1591 static void hci_cc_le_del_from_resolv_list(struct hci_dev *hdev,
1597 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1602 sent = hci_sent_cmd_data(hdev, HCI_OP_LE_DEL_FROM_RESOLV_LIST);
1606 hci_bdaddr_list_del_with_irk(&hdev->le_resolv_list, &sent->bdaddr,
1610 static void hci_cc_le_clear_resolv_list(struct hci_dev *hdev,
1615 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1620 hci_bdaddr_list_clear(&hdev->le_resolv_list);
1623 static void hci_cc_le_read_resolv_list_size(struct hci_dev *hdev,
1628 BT_DBG("%s status 0x%2.2x size %u", hdev->name, rp->status, rp->size);
1633 hdev->le_resolv_list_size = rp->size;
1636 static void hci_cc_le_set_addr_resolution_enable(struct hci_dev *hdev,
1641 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1646 sent = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_ADDR_RESOLV_ENABLE);
1650 hci_dev_lock(hdev);
1653 hci_dev_set_flag(hdev, HCI_LL_RPA_RESOLUTION);
1655 hci_dev_clear_flag(hdev, HCI_LL_RPA_RESOLUTION);
1657 hci_dev_unlock(hdev);
1660 static void hci_cc_le_read_max_data_len(struct hci_dev *hdev,
1665 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1670 hdev->le_max_tx_len = le16_to_cpu(rp->tx_len);
1671 hdev->le_max_tx_time = le16_to_cpu(rp->tx_time);
1672 hdev->le_max_rx_len = le16_to_cpu(rp->rx_len);
1673 hdev->le_max_rx_time = le16_to_cpu(rp->rx_time);
1676 static void hci_cc_write_le_host_supported(struct hci_dev *hdev,
1682 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1687 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_LE_HOST_SUPPORTED);
1691 hci_dev_lock(hdev);
1694 hdev->features[1][0] |= LMP_HOST_LE;
1695 hci_dev_set_flag(hdev, HCI_LE_ENABLED);
1697 hdev->features[1][0] &= ~LMP_HOST_LE;
1698 hci_dev_clear_flag(hdev, HCI_LE_ENABLED);
1699 hci_dev_clear_flag(hdev, HCI_ADVERTISING);
1703 hdev->features[1][0] |= LMP_HOST_LE_BREDR;
1705 hdev->features[1][0] &= ~LMP_HOST_LE_BREDR;
1707 hci_dev_unlock(hdev);
1710 static void hci_cc_set_adv_param(struct hci_dev *hdev, struct sk_buff *skb)
1715 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1720 cp = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_ADV_PARAM);
1724 hci_dev_lock(hdev);
1725 hdev->adv_addr_type = cp->own_address_type;
1726 hci_dev_unlock(hdev);
1729 static void hci_cc_set_ext_adv_param(struct hci_dev *hdev, struct sk_buff *skb)
1735 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1740 cp = hci_sent_cmd_data(hdev, HCI_OP_LE_SET_EXT_ADV_PARAMS);
1744 hci_dev_lock(hdev);
1745 hdev->adv_addr_type = cp->own_addr_type;
1746 if (!hdev->cur_adv_instance) {
1747 /* Store in hdev for instance 0 */
1748 hdev->adv_tx_power = rp->tx_power;
1750 adv_instance = hci_find_adv_instance(hdev,
1751 hdev->cur_adv_instance);
1756 hci_req_update_adv_data(hdev, hdev->cur_adv_instance);
1757 hci_dev_unlock(hdev);
1760 static void hci_cc_read_rssi(struct hci_dev *hdev, struct sk_buff *skb)
1765 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1770 hci_dev_lock(hdev);
1772 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
1776 hci_dev_unlock(hdev);
1779 static void hci_cc_read_tx_power(struct hci_dev *hdev, struct sk_buff *skb)
1785 BT_DBG("%s status 0x%2.2x", hdev->name, rp->status);
1790 sent = hci_sent_cmd_data(hdev, HCI_OP_READ_TX_POWER);
1794 hci_dev_lock(hdev);
1796 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
1810 hci_dev_unlock(hdev);
1813 static void hci_cc_write_ssp_debug_mode(struct hci_dev *hdev, struct sk_buff *skb)
1818 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1823 mode = hci_sent_cmd_data(hdev, HCI_OP_WRITE_SSP_DEBUG_MODE);
1825 hdev->ssp_debug_mode = *mode;
1828 static void hci_cs_inquiry(struct hci_dev *hdev, __u8 status)
1830 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1833 hci_conn_check_pending(hdev);
1837 if (hci_sent_cmd_data(hdev, HCI_OP_INQUIRY))
1838 set_bit(HCI_INQUIRY, &hdev->flags);
1841 static void hci_cs_create_conn(struct hci_dev *hdev, __u8 status)
1846 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1848 cp = hci_sent_cmd_data(hdev, HCI_OP_CREATE_CONN);
1852 hci_dev_lock(hdev);
1854 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
1856 BT_DBG("%s bdaddr %pMR hcon %p", hdev->name, &cp->bdaddr, conn);
1869 conn = hci_conn_add(hdev, ACL_LINK, &cp->bdaddr,
1872 bt_dev_err(hdev, "no memory for new connection");
1876 hci_dev_unlock(hdev);
1879 static void hci_cs_add_sco(struct hci_dev *hdev, __u8 status)
1885 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1890 cp = hci_sent_cmd_data(hdev, HCI_OP_ADD_SCO);
1896 BT_DBG("%s handle 0x%4.4x", hdev->name, handle);
1898 hci_dev_lock(hdev);
1900 acl = hci_conn_hash_lookup_handle(hdev, handle);
1911 hci_dev_unlock(hdev);
1914 static void hci_cs_auth_requested(struct hci_dev *hdev, __u8 status)
1919 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1924 cp = hci_sent_cmd_data(hdev, HCI_OP_AUTH_REQUESTED);
1928 hci_dev_lock(hdev);
1930 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1938 hci_dev_unlock(hdev);
1941 static void hci_cs_set_conn_encrypt(struct hci_dev *hdev, __u8 status)
1946 BT_DBG("%s status 0x%2.2x", hdev->name, status);
1951 cp = hci_sent_cmd_data(hdev, HCI_OP_SET_CONN_ENCRYPT);
1955 hci_dev_lock(hdev);
1957 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1965 hci_dev_unlock(hdev);
1968 static int hci_outgoing_auth_needed(struct hci_dev *hdev,
1990 static int hci_resolve_name(struct hci_dev *hdev,
2002 return hci_send_cmd(hdev, HCI_OP_REMOTE_NAME_REQ, sizeof(cp), &cp);
2005 static bool hci_resolve_next_name(struct hci_dev *hdev)
2007 struct discovery_state *discov = &hdev->discovery;
2013 e = hci_inquiry_cache_lookup_resolve(hdev, BDADDR_ANY, NAME_NEEDED);
2017 if (hci_resolve_name(hdev, e) == 0) {
2025 static void hci_check_pending_name(struct hci_dev *hdev, struct hci_conn *conn,
2028 struct discovery_state *discov = &hdev->discovery;
2039 mgmt_device_connected(hdev, conn, 0, name, name_len);
2050 e = hci_inquiry_cache_lookup_resolve(hdev, bdaddr, NAME_PENDING);
2061 mgmt_remote_name(hdev, bdaddr, ACL_LINK, 0x00,
2067 if (hci_resolve_next_name(hdev))
2071 hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
2074 static void hci_cs_remote_name_req(struct hci_dev *hdev, __u8 status)
2079 BT_DBG("%s status 0x%2.2x", hdev->name, status);
2086 cp = hci_sent_cmd_data(hdev, HCI_OP_REMOTE_NAME_REQ);
2090 hci_dev_lock(hdev);
2092 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
2094 if (hci_dev_test_flag(hdev, HCI_MGMT))
2095 hci_check_pending_name(hdev, conn, &cp->bdaddr, NULL, 0);
2100 if (!hci_outgoing_auth_needed(hdev, conn))
2109 hci_send_cmd(hdev, HCI_OP_AUTH_REQUESTED,
2114 hci_dev_unlock(hdev);
2117 static void hci_cs_read_remote_features(struct hci_dev *hdev, __u8 status)
2122 BT_DBG("%s status 0x%2.2x", hdev->name, status);
2127 cp = hci_sent_cmd_data(hdev, HCI_OP_READ_REMOTE_FEATURES);
2131 hci_dev_lock(hdev);
2133 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
2141 hci_dev_unlock(hdev);
2144 static void hci_cs_read_remote_ext_features(struct hci_dev *hdev, __u8 status)
2149 BT_DBG("%s status 0x%2.2x", hdev->name, status);
2154 cp = hci_sent_cmd_data(hdev, HCI_OP_READ_REMOTE_EXT_FEATURES);
2158 hci_dev_lock(hdev);
2160 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
2168 hci_dev_unlock(hdev);
2171 static void hci_cs_setup_sync_conn(struct hci_dev *hdev, __u8 status)
2177 BT_DBG("%s status 0x%2.2x", hdev->name, status);
2182 cp = hci_sent_cmd_data(hdev, HCI_OP_SETUP_SYNC_CONN);
2188 BT_DBG("%s handle 0x%4.4x", hdev->name, handle);
2190 hci_dev_lock(hdev);
2192 acl = hci_conn_hash_lookup_handle(hdev, handle);
2203 hci_dev_unlock(hdev);
2206 static void hci_cs_sniff_mode(struct hci_dev *hdev, __u8 status)
2211 BT_DBG("%s status 0x%2.2x", hdev->name, status);
2216 cp = hci_sent_cmd_data(hdev, HCI_OP_SNIFF_MODE);
2220 hci_dev_lock(hdev);
2222 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
2230 hci_dev_unlock(hdev);
2233 static void hci_cs_exit_sniff_mode(struct hci_dev *hdev, __u8 status)
2238 BT_DBG("%s status 0x%2.2x", hdev->name, status);
2243 cp = hci_sent_cmd_data(hdev, HCI_OP_EXIT_SNIFF_MODE);
2247 hci_dev_lock(hdev);
2249 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
2257 hci_dev_unlock(hdev);
2260 static void hci_cs_disconnect(struct hci_dev *hdev, u8 status)
2268 cp = hci_sent_cmd_data(hdev, HCI_OP_DISCONNECT);
2272 hci_dev_lock(hdev);
2274 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
2278 mgmt_disconnect_failed(hdev, &conn->dst, conn->type,
2288 hci_req_reenable_advertising(hdev);
2291 hci_dev_unlock(hdev);
2294 static void cs_le_create_conn(struct hci_dev *hdev, bdaddr_t *peer_addr,
2300 conn = hci_conn_hash_lookup_le(hdev, peer_addr,
2309 if (use_ll_privacy(hdev) &&
2310 hci_dev_test_flag(hdev, HCI_LL_RPA_RESOLUTION)) {
2327 bacpy(&conn->init_addr, &hdev->random_addr);
2329 bacpy(&conn->init_addr, &hdev->bdaddr);
2340 queue_delayed_work(conn->hdev->workqueue,
2345 static void hci_cs_le_create_conn(struct hci_dev *hdev, u8 status)
2349 BT_DBG("%s status 0x%2.2x", hdev->name, status);
2358 cp = hci_sent_cmd_data(hdev, HCI_OP_LE_CREATE_CONN);
2362 hci_dev_lock(hdev);
2364 cs_le_create_conn(hdev, &cp->peer_addr, cp->peer_addr_type,
2367 hci_dev_unlock(hdev);
2370 static void hci_cs_le_ext_create_conn(struct hci_dev *hdev, u8 status)
2374 BT_DBG("%s status 0x%2.2x", hdev->name, status);
2383 cp = hci_sent_cmd_data(hdev, HCI_OP_LE_EXT_CREATE_CONN);
2387 hci_dev_lock(hdev);
2389 cs_le_create_conn(hdev, &cp->peer_addr, cp->peer_addr_type,
2392 hci_dev_unlock(hdev);
2395 static void hci_cs_le_read_remote_features(struct hci_dev *hdev, u8 status)
2400 BT_DBG("%s status 0x%2.2x", hdev->name, status);
2405 cp = hci_sent_cmd_data(hdev, HCI_OP_LE_READ_REMOTE_FEATURES);
2409 hci_dev_lock(hdev);
2411 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
2419 hci_dev_unlock(hdev);
2422 static void hci_cs_le_start_enc(struct hci_dev *hdev, u8 status)
2427 BT_DBG("%s status 0x%2.2x", hdev->name, status);
2432 hci_dev_lock(hdev);
2434 cp = hci_sent_cmd_data(hdev, HCI_OP_LE_START_ENC);
2438 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
2449 hci_dev_unlock(hdev);
2452 static void hci_cs_switch_role(struct hci_dev *hdev, u8 status)
2457 BT_DBG("%s status 0x%2.2x", hdev->name, status);
2462 cp = hci_sent_cmd_data(hdev, HCI_OP_SWITCH_ROLE);
2466 hci_dev_lock(hdev);
2468 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
2472 hci_dev_unlock(hdev);
2475 static void hci_inquiry_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
2478 struct discovery_state *discov = &hdev->discovery;
2481 BT_DBG("%s status 0x%2.2x", hdev->name, status);
2483 hci_conn_check_pending(hdev);
2485 if (!test_and_clear_bit(HCI_INQUIRY, &hdev->flags))
2489 wake_up_bit(&hdev->flags, HCI_INQUIRY);
2491 if (!hci_dev_test_flag(hdev, HCI_MGMT))
2494 hci_dev_lock(hdev);
2507 if (!hci_dev_test_flag(hdev, HCI_LE_SCAN) ||
2508 !test_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY, &hdev->quirks))
2509 hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
2513 e = hci_inquiry_cache_lookup_resolve(hdev, BDADDR_ANY, NAME_NEEDED);
2514 if (e && hci_resolve_name(hdev, e) == 0) {
2516 hci_discovery_set_state(hdev, DISCOVERY_RESOLVING);
2525 if (!hci_dev_test_flag(hdev, HCI_LE_SCAN) ||
2526 !test_bit(HCI_QUIRK_SIMULTANEOUS_DISCOVERY, &hdev->quirks))
2527 hci_discovery_set_state(hdev, DISCOVERY_STOPPED);
2531 hci_dev_unlock(hdev);
2534 static void hci_inquiry_result_evt(struct hci_dev *hdev, struct sk_buff *skb)
2540 BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
2545 if (hci_dev_test_flag(hdev, HCI_PERIODIC_INQ))
2548 hci_dev_lock(hdev);
2562 flags = hci_inquiry_cache_update(hdev, &data, false);
2564 mgmt_device_found(hdev, &info->bdaddr, ACL_LINK, 0x00,
2569 hci_dev_unlock(hdev);
2572 static void hci_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
2577 BT_DBG("%s", hdev->name);
2579 hci_dev_lock(hdev);
2581 conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
2593 hci_bdaddr_list_lookup_with_flags(&hdev->accept_list,
2596 conn = hci_conn_add(hdev, ev->link_type, &ev->bdaddr,
2599 bt_dev_err(hdev, "no memory for new conn");
2606 conn = hci_conn_hash_lookup_ba(hdev, ESCO_LINK,
2623 !hci_find_link_key(hdev, &ev->bdaddr))
2633 if (test_bit(HCI_AUTH, &hdev->flags))
2636 if (test_bit(HCI_ENCRYPT, &hdev->flags))
2643 hci_send_cmd(hdev, HCI_OP_READ_REMOTE_FEATURES,
2646 hci_req_update_scan(hdev);
2650 if (!conn->out && hdev->hci_ver < BLUETOOTH_VER_2_0) {
2654 hci_send_cmd(hdev, HCI_OP_CHANGE_CONN_PTYPE, sizeof(cp),
2660 mgmt_connect_failed(hdev, &conn->dst, conn->type,
2673 if (hdev->notify)
2674 hdev->notify(hdev, HCI_NOTIFY_ENABLE_SCO_CVSD);
2682 hci_dev_unlock(hdev);
2684 hci_conn_check_pending(hdev);
2687 static void hci_reject_conn(struct hci_dev *hdev, bdaddr_t *bdaddr)
2693 hci_send_cmd(hdev, HCI_OP_REJECT_CONN_REQ, sizeof(cp), &cp);
2696 static void hci_conn_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
2699 int mask = hdev->link_mode;
2704 BT_DBG("%s bdaddr %pMR type 0x%x", hdev->name, &ev->bdaddr,
2710 if (hdev && !bacmp(&hdev->bdaddr, &ev->bdaddr)) {
2711 bt_dev_dbg(hdev, "Reject connection with same BD_ADDR %pMR\n",
2713 hci_reject_conn(hdev, &ev->bdaddr);
2717 mask |= hci_proto_connect_ind(hdev, &ev->bdaddr, ev->link_type,
2721 hci_reject_conn(hdev, &ev->bdaddr);
2725 hci_dev_lock(hdev);
2727 if (hci_bdaddr_list_lookup(&hdev->reject_list, &ev->bdaddr,
2729 hci_reject_conn(hdev, &ev->bdaddr);
2737 if (hci_dev_test_flag(hdev, HCI_MGMT) &&
2738 !hci_dev_test_flag(hdev, HCI_CONNECTABLE) &&
2739 !hci_bdaddr_list_lookup_with_flags(&hdev->accept_list, &ev->bdaddr,
2741 hci_reject_conn(hdev, &ev->bdaddr);
2747 ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr);
2751 conn = hci_conn_hash_lookup_ba(hdev, ev->link_type,
2754 conn = hci_conn_add(hdev, ev->link_type, &ev->bdaddr,
2757 bt_dev_err(hdev, "no memory for new connection");
2764 hci_dev_unlock(hdev);
2767 (!(flags & HCI_PROTO_DEFER) && !lmp_esco_capable(hdev))) {
2773 if (lmp_rswitch_capable(hdev) && (mask & HCI_LM_MASTER))
2778 hci_send_cmd(hdev, HCI_OP_ACCEPT_CONN_REQ, sizeof(cp), &cp);
2789 cp.content_format = cpu_to_le16(hdev->voice_setting);
2792 hci_send_cmd(hdev, HCI_OP_ACCEPT_SYNC_CONN_REQ, sizeof(cp),
2801 hci_dev_unlock(hdev);
2820 static void hci_disconn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
2829 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2831 hci_dev_lock(hdev);
2833 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2838 mgmt_disconnect_failed(hdev, &conn->dst, conn->type,
2852 mgmt_device_disconnected(hdev, &conn->dst, conn->type, conn->dst_type,
2857 hci_remove_link_key(hdev, &conn->dst);
2859 hci_req_update_scan(hdev);
2862 params = hci_conn_params_lookup(hdev, &conn->dst, conn->dst_type);
2873 list_add(&params->action, &hdev->pend_le_conns);
2874 hci_update_background_scan(hdev);
2890 if (list_empty(&hdev->conn_hash.list) &&
2891 test_and_clear_bit(SUSPEND_DISCONNECTING, hdev->suspend_tasks)) {
2892 wake_up(&hdev->suspend_wait_q);
2906 hci_req_reenable_advertising(hdev);
2909 hci_dev_unlock(hdev);
2912 static void hci_auth_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
2917 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
2919 hci_dev_lock(hdev);
2921 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2943 hci_send_cmd(hdev, HCI_OP_SET_CONN_ENCRYPT, sizeof(cp),
2963 hci_send_cmd(hdev, HCI_OP_SET_CONN_ENCRYPT, sizeof(cp),
2972 hci_dev_unlock(hdev);
2975 static void hci_remote_name_evt(struct hci_dev *hdev, struct sk_buff *skb)
2980 BT_DBG("%s", hdev->name);
2982 hci_conn_check_pending(hdev);
2984 hci_dev_lock(hdev);
2986 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
2988 if (!hci_dev_test_flag(hdev, HCI_MGMT))
2992 hci_check_pending_name(hdev, conn, &ev->bdaddr, ev->name,
2995 hci_check_pending_name(hdev, conn, &ev->bdaddr, NULL, 0);
3001 if (!hci_outgoing_auth_needed(hdev, conn))
3010 hci_send_cmd(hdev, HCI_OP_AUTH_REQUESTED, sizeof(cp), &cp);
3014 hci_dev_unlock(hdev);
3017 static void read_enc_key_size_complete(struct hci_dev *hdev, u8 status,
3024 BT_DBG("%s status 0x%02x", hdev->name, status);
3027 bt_dev_err(hdev, "invalid read key size response");
3034 hci_dev_lock(hdev);
3036 conn = hci_conn_hash_lookup_handle(hdev, handle);
3045 bt_dev_err(hdev, "failed to read key size for handle %u",
3055 hci_dev_unlock(hdev);
3058 static void hci_encrypt_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
3063 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3065 hci_dev_lock(hdev);
3067 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
3095 hci_dev_set_flag(hdev, HCI_RPA_EXPIRED);
3096 hci_adv_instances_set_rpa_expired(hdev, true);
3127 if (!(hdev->commands[20] & 0x10)) {
3132 hci_req_init(&req, hdev);
3138 bt_dev_err(hdev, "sending read key size failed");
3155 ((conn->type == ACL_LINK && lmp_ping_capable(hdev)) ||
3156 (conn->type == LE_LINK && (hdev->le_features[0] & HCI_LE_PING)))) {
3160 cp.timeout = cpu_to_le16(hdev->auth_payload_timeout);
3161 hci_send_cmd(conn->hdev, HCI_OP_WRITE_AUTH_PAYLOAD_TO,
3169 hci_dev_unlock(hdev);
3172 static void hci_change_link_key_complete_evt(struct hci_dev *hdev,
3178 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3180 hci_dev_lock(hdev);
3182 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
3192 hci_dev_unlock(hdev);
3195 static void hci_remote_features_evt(struct hci_dev *hdev,
3201 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3203 hci_dev_lock(hdev);
3205 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
3215 if (!ev->status && lmp_ext_feat_capable(hdev) &&
3220 hci_send_cmd(hdev, HCI_OP_READ_REMOTE_EXT_FEATURES,
3230 hci_send_cmd(hdev, HCI_OP_REMOTE_NAME_REQ, sizeof(cp), &cp);
3232 mgmt_device_connected(hdev, conn, 0, NULL, 0);
3234 if (!hci_outgoing_auth_needed(hdev, conn)) {
3241 hci_dev_unlock(hdev);
3244 static void hci_cmd_complete_evt(struct hci_dev *hdev, struct sk_buff *skb,
3258 hci_cc_inquiry_cancel(hdev, skb, status);
3262 hci_cc_periodic_inq(hdev, skb);
3266 hci_cc_exit_periodic_inq(hdev, skb);
3270 hci_cc_remote_name_req_cancel(hdev, skb);
3274 hci_cc_role_discovery(hdev, skb);
3278 hci_cc_read_link_policy(hdev, skb);
3282 hci_cc_write_link_policy(hdev, skb);
3286 hci_cc_read_def_link_policy(hdev, skb);
3290 hci_cc_write_def_link_policy(hdev, skb);
3294 hci_cc_reset(hdev, skb);
3298 hci_cc_read_stored_link_key(hdev, skb);
3302 hci_cc_delete_stored_link_key(hdev, skb);
3306 hci_cc_write_local_name(hdev, skb);
3310 hci_cc_read_local_name(hdev, skb);
3314 hci_cc_write_auth_enable(hdev, skb);
3318 hci_cc_write_encrypt_mode(hdev, skb);
3322 hci_cc_write_scan_enable(hdev, skb);
3326 hci_cc_read_class_of_dev(hdev, skb);
3330 hci_cc_write_class_of_dev(hdev, skb);
3334 hci_cc_read_voice_setting(hdev, skb);
3338 hci_cc_write_voice_setting(hdev, skb);
3342 hci_cc_read_num_supported_iac(hdev, skb);
3346 hci_cc_write_ssp_mode(hdev, skb);
3350 hci_cc_write_sc_support(hdev, skb);
3354 hci_cc_read_auth_payload_timeout(hdev, skb);
3358 hci_cc_write_auth_payload_timeout(hdev, skb);
3362 hci_cc_read_local_version(hdev, skb);
3366 hci_cc_read_local_commands(hdev, skb);
3370 hci_cc_read_local_features(hdev, skb);
3374 hci_cc_read_local_ext_features(hdev, skb);
3378 hci_cc_read_buffer_size(hdev, skb);
3382 hci_cc_read_bd_addr(hdev, skb);
3386 hci_cc_read_local_pairing_opts(hdev, skb);
3390 hci_cc_read_page_scan_activity(hdev, skb);
3394 hci_cc_write_page_scan_activity(hdev, skb);
3398 hci_cc_read_page_scan_type(hdev, skb);
3402 hci_cc_write_page_scan_type(hdev, skb);
3406 hci_cc_read_data_block_size(hdev, skb);
3410 hci_cc_read_flow_control_mode(hdev, skb);
3414 hci_cc_read_local_amp_info(hdev, skb);
3418 hci_cc_read_clock(hdev, skb);
3422 hci_cc_read_inq_rsp_tx_power(hdev, skb);
3426 hci_cc_read_def_err_data_reporting(hdev, skb);
3430 hci_cc_write_def_err_data_reporting(hdev, skb);
3434 hci_cc_pin_code_reply(hdev, skb);
3438 hci_cc_pin_code_neg_reply(hdev, skb);
3442 hci_cc_read_local_oob_data(hdev, skb);
3446 hci_cc_read_local_oob_ext_data(hdev, skb);
3450 hci_cc_le_read_buffer_size(hdev, skb);
3454 hci_cc_le_read_local_features(hdev, skb);
3458 hci_cc_le_read_adv_tx_power(hdev, skb);
3462 hci_cc_user_confirm_reply(hdev, skb);
3466 hci_cc_user_confirm_neg_reply(hdev, skb);
3470 hci_cc_user_passkey_reply(hdev, skb);
3474 hci_cc_user_passkey_neg_reply(hdev, skb);
3478 hci_cc_le_set_random_addr(hdev, skb);
3482 hci_cc_le_set_adv_enable(hdev, skb);
3486 hci_cc_le_set_scan_param(hdev, skb);
3490 hci_cc_le_set_scan_enable(hdev, skb);
3494 hci_cc_le_read_accept_list_size(hdev, skb);
3498 hci_cc_le_clear_accept_list(hdev, skb);
3502 hci_cc_le_add_to_accept_list(hdev, skb);
3506 hci_cc_le_del_from_accept_list(hdev, skb);
3510 hci_cc_le_read_supported_states(hdev, skb);
3514 hci_cc_le_read_def_data_len(hdev, skb);
3518 hci_cc_le_write_def_data_len(hdev, skb);
3522 hci_cc_le_add_to_resolv_list(hdev, skb);
3526 hci_cc_le_del_from_resolv_list(hdev, skb);
3530 hci_cc_le_clear_resolv_list(hdev, skb);
3534 hci_cc_le_read_resolv_list_size(hdev, skb);
3538 hci_cc_le_set_addr_resolution_enable(hdev, skb);
3542 hci_cc_le_read_max_data_len(hdev, skb);
3546 hci_cc_write_le_host_supported(hdev, skb);
3550 hci_cc_set_adv_param(hdev, skb);
3554 hci_cc_read_rssi(hdev, skb);
3558 hci_cc_read_tx_power(hdev, skb);
3562 hci_cc_write_ssp_debug_mode(hdev, skb);
3566 hci_cc_le_set_ext_scan_param(hdev, skb);
3570 hci_cc_le_set_ext_scan_enable(hdev, skb);
3574 hci_cc_le_set_default_phy(hdev, skb);
3578 hci_cc_le_read_num_adv_sets(hdev, skb);
3582 hci_cc_set_ext_adv_param(hdev, skb);
3586 hci_cc_le_set_ext_adv_enable(hdev, skb);
3590 hci_cc_le_set_adv_set_random_addr(hdev, skb);
3594 BT_DBG("%s opcode 0x%4.4x", hdev->name, *opcode);
3599 cancel_delayed_work(&hdev->cmd_timer);
3601 if (ev->ncmd && !test_bit(HCI_RESET, &hdev->flags))
3602 atomic_set(&hdev->cmd_cnt, 1);
3604 hci_req_cmd_complete(hdev, *opcode, *status, req_complete,
3607 if (hci_dev_test_flag(hdev, HCI_CMD_PENDING)) {
3608 bt_dev_err(hdev,
3613 if (atomic_read(&hdev->cmd_cnt) && !skb_queue_empty(&hdev->cmd_q))
3614 queue_work(hdev->workqueue, &hdev->cmd_work);
3617 static void hci_cmd_status_evt(struct hci_dev *hdev, struct sk_buff *skb,
3631 hci_cs_inquiry(hdev, ev->status);
3635 hci_cs_create_conn(hdev, ev->status);
3639 hci_cs_disconnect(hdev, ev->status);
3643 hci_cs_add_sco(hdev, ev->status);
3647 hci_cs_auth_requested(hdev, ev->status);
3651 hci_cs_set_conn_encrypt(hdev, ev->status);
3655 hci_cs_remote_name_req(hdev, ev->status);
3659 hci_cs_read_remote_features(hdev, ev->status);
3663 hci_cs_read_remote_ext_features(hdev, ev->status);
3667 hci_cs_setup_sync_conn(hdev, ev->status);
3671 hci_cs_sniff_mode(hdev, ev->status);
3675 hci_cs_exit_sniff_mode(hdev, ev->status);
3679 hci_cs_switch_role(hdev, ev->status);
3683 hci_cs_le_create_conn(hdev, ev->status);
3687 hci_cs_le_read_remote_features(hdev, ev->status);
3691 hci_cs_le_start_enc(hdev, ev->status);
3695 hci_cs_le_ext_create_conn(hdev, ev->status);
3699 BT_DBG("%s opcode 0x%4.4x", hdev->name, *opcode);
3704 cancel_delayed_work(&hdev->cmd_timer);
3706 if (ev->ncmd && !test_bit(HCI_RESET, &hdev->flags))
3707 atomic_set(&hdev->cmd_cnt, 1);
3716 (hdev->sent_cmd && !bt_cb(hdev->sent_cmd)->hci.req_event))
3717 hci_req_cmd_complete(hdev, *opcode, ev->status, req_complete,
3720 if (hci_dev_test_flag(hdev, HCI_CMD_PENDING)) {
3721 bt_dev_err(hdev,
3726 if (atomic_read(&hdev->cmd_cnt) && !skb_queue_empty(&hdev->cmd_q))
3727 queue_work(hdev->workqueue, &hdev->cmd_work);
3730 static void hci_hardware_error_evt(struct hci_dev *hdev, struct sk_buff *skb)
3734 hdev->hw_error_code = ev->code;
3736 queue_work(hdev->req_workqueue, &hdev->error_reset);
3739 static void hci_role_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
3744 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3746 hci_dev_lock(hdev);
3748 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3758 hci_dev_unlock(hdev);
3761 static void hci_num_comp_pkts_evt(struct hci_dev *hdev, struct sk_buff *skb)
3766 if (hdev->flow_ctl_mode != HCI_FLOW_CTL_MODE_PACKET_BASED) {
3767 bt_dev_err(hdev, "wrong event for mode %d", hdev->flow_ctl_mode);
3773 BT_DBG("%s bad parameters", hdev->name);
3777 BT_DBG("%s num_hndl %d", hdev->name, ev->num_hndl);
3787 conn = hci_conn_hash_lookup_handle(hdev, handle);
3795 hdev->acl_cnt += count;
3796 if (hdev->acl_cnt > hdev->acl_pkts)
3797 hdev->acl_cnt = hdev->acl_pkts;
3801 if (hdev->le_pkts) {
3802 hdev->le_cnt += count;
3803 if (hdev->le_cnt > hdev->le_pkts)
3804 hdev->le_cnt = hdev->le_pkts;
3806 hdev->acl_cnt += count;
3807 if (hdev->acl_cnt > hdev->acl_pkts)
3808 hdev->acl_cnt = hdev->acl_pkts;
3813 hdev->sco_cnt += count;
3814 if (hdev->sco_cnt > hdev->sco_pkts)
3815 hdev->sco_cnt = hdev->sco_pkts;
3819 bt_dev_err(hdev, "unknown type %d conn %p",
3825 queue_work(hdev->workqueue, &hdev->tx_work);
3828 static struct hci_conn *__hci_conn_lookup_handle(struct hci_dev *hdev,
3833 switch (hdev->dev_type) {
3835 return hci_conn_hash_lookup_handle(hdev, handle);
3837 chan = hci_chan_lookup_handle(hdev, handle);
3842 bt_dev_err(hdev, "unknown dev_type %d", hdev->dev_type);
3849 static void hci_num_comp_blocks_evt(struct hci_dev *hdev, struct sk_buff *skb)
3854 if (hdev->flow_ctl_mode != HCI_FLOW_CTL_MODE_BLOCK_BASED) {
3855 bt_dev_err(hdev, "wrong event for mode %d", hdev->flow_ctl_mode);
3861 BT_DBG("%s bad parameters", hdev->name);
3865 BT_DBG("%s num_blocks %d num_hndl %d", hdev->name, ev->num_blocks,
3876 conn = __hci_conn_lookup_handle(hdev, handle);
3885 hdev->block_cnt += block_count;
3886 if (hdev->block_cnt > hdev->num_blocks)
3887 hdev->block_cnt = hdev->num_blocks;
3891 bt_dev_err(hdev, "unknown type %d conn %p",
3897 queue_work(hdev->workqueue, &hdev->tx_work);
3900 static void hci_mode_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
3905 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
3907 hci_dev_lock(hdev);
3909 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
3925 hci_dev_unlock(hdev);
3928 static void hci_pin_code_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
3933 BT_DBG("%s", hdev->name);
3935 hci_dev_lock(hdev);
3937 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
3947 if (!hci_dev_test_flag(hdev, HCI_BONDABLE) &&
3949 hci_send_cmd(hdev, HCI_OP_PIN_CODE_NEG_REPLY,
3951 } else if (hci_dev_test_flag(hdev, HCI_MGMT)) {
3959 mgmt_pin_code_request(hdev, &ev->bdaddr, secure);
3963 hci_dev_unlock(hdev);
3998 static void hci_link_key_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
4005 BT_DBG("%s", hdev->name);
4007 if (!hci_dev_test_flag(hdev, HCI_MGMT))
4010 hci_dev_lock(hdev);
4012 key = hci_find_link_key(hdev, &ev->bdaddr);
4014 BT_DBG("%s link key not found for %pMR", hdev->name,
4019 BT_DBG("%s found key type %u for %pMR", hdev->name, key->type,
4022 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
4029 BT_DBG("%s ignoring unauthenticated key", hdev->name);
4037 hdev->name);
4047 hci_send_cmd(hdev, HCI_OP_LINK_KEY_REPLY, sizeof(cp), &cp);
4049 hci_dev_unlock(hdev);
4054 hci_send_cmd(hdev, HCI_OP_LINK_KEY_NEG_REPLY, 6, &ev->bdaddr);
4055 hci_dev_unlock(hdev);
4058 static void hci_link_key_notify_evt(struct hci_dev *hdev, struct sk_buff *skb)
4066 BT_DBG("%s", hdev->name);
4068 hci_dev_lock(hdev);
4070 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
4076 bt_dev_dbg(hdev, "Ignore NULL link key (ZERO KEY) for %pMR",
4090 if (!hci_dev_test_flag(hdev, HCI_MGMT))
4093 key = hci_add_link_key(hdev, conn, &ev->bdaddr, ev->link_key,
4104 mgmt_new_link_key(hdev, key, persistent);
4112 !hci_dev_test_flag(hdev, HCI_KEEP_DEBUG_KEYS)) {
4124 hci_dev_unlock(hdev);
4127 static void hci_clock_offset_evt(struct hci_dev *hdev, struct sk_buff *skb)
4132 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
4134 hci_dev_lock(hdev);
4136 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
4140 ie = hci_inquiry_cache_lookup(hdev, &conn->dst);
4147 hci_dev_unlock(hdev);
4150 static void hci_pkt_type_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
4155 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
4157 hci_dev_lock(hdev);
4159 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
4163 hci_dev_unlock(hdev);
4166 static void hci_pscan_rep_mode_evt(struct hci_dev *hdev, struct sk_buff *skb)
4171 BT_DBG("%s", hdev->name);
4173 hci_dev_lock(hdev);
4175 ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr);
4181 hci_dev_unlock(hdev);
4184 static void hci_inquiry_result_with_rssi_evt(struct hci_dev *hdev,
4190 BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
4195 if (hci_dev_test_flag(hdev, HCI_PERIODIC_INQ))
4198 hci_dev_lock(hdev);
4219 flags = hci_inquiry_cache_update(hdev, &data, false);
4221 mgmt_device_found(hdev, &info->bdaddr, ACL_LINK, 0x00,
4243 flags = hci_inquiry_cache_update(hdev, &data, false);
4245 mgmt_device_found(hdev, &info->bdaddr, ACL_LINK, 0x00,
4252 hci_dev_unlock(hdev);
4255 static void hci_remote_ext_features_evt(struct hci_dev *hdev,
4261 BT_DBG("%s", hdev->name);
4263 hci_dev_lock(hdev);
4265 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
4275 ie = hci_inquiry_cache_lookup(hdev, &conn->dst);
4305 hci_send_cmd(hdev, HCI_OP_REMOTE_NAME_REQ, sizeof(cp), &cp);
4307 mgmt_device_connected(hdev, conn, 0, NULL, 0);
4309 if (!hci_outgoing_auth_needed(hdev, conn)) {
4316 hci_dev_unlock(hdev);
4319 static void hci_sync_conn_complete_evt(struct hci_dev *hdev,
4334 bt_dev_err(hdev, "Ignoring connect complete event for invalid link type");
4338 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
4340 hci_dev_lock(hdev);
4342 conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
4356 conn = hci_conn_hash_lookup_ba(hdev, ESCO_LINK, &ev->bdaddr);
4374 bt_dev_err(hdev, "Ignoring connect complete event for existing connection");
4395 conn->pkt_type = (hdev->esco_type & SCO_ESCO_MASK) |
4396 (hdev->esco_type & EDR_ESCO_MASK);
4407 bt_dev_dbg(hdev, "SCO connected with air mode: %02x", ev->air_mode);
4411 if (hdev->notify)
4412 hdev->notify(hdev, HCI_NOTIFY_ENABLE_SCO_CVSD);
4415 if (hdev->notify)
4416 hdev->notify(hdev, HCI_NOTIFY_ENABLE_SCO_TRANSP);
4425 hci_dev_unlock(hdev);
4445 static void hci_extended_inquiry_result_evt(struct hci_dev *hdev,
4453 BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
4458 if (hci_dev_test_flag(hdev, HCI_PERIODIC_INQ))
4461 hci_dev_lock(hdev);
4476 if (hci_dev_test_flag(hdev, HCI_MGMT))
4483 flags = hci_inquiry_cache_update(hdev, &data, name_known);
4487 mgmt_device_found(hdev, &info->bdaddr, ACL_LINK, 0x00,
4492 hci_dev_unlock(hdev);
4495 static void hci_key_refresh_complete_evt(struct hci_dev *hdev,
4501 BT_DBG("%s status 0x%2.2x handle 0x%4.4x", hdev->name, ev->status,
4504 hci_dev_lock(hdev);
4506 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
4542 hci_dev_unlock(hdev);
4565 struct hci_dev *hdev = conn->hdev;
4568 data = hci_find_remote_oob_data(hdev, &conn->dst, BDADDR_BREDR);
4572 if (bredr_sc_enabled(hdev)) {
4579 if (!hci_dev_test_flag(hdev, HCI_SC_ONLY))
4605 static void hci_io_capa_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
4610 BT_DBG("%s", hdev->name);
4612 hci_dev_lock(hdev);
4614 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
4615 if (!conn || !hci_dev_test_flag(hdev, HCI_SSP_ENABLED))
4623 if (!hci_dev_test_flag(hdev, HCI_MGMT))
4629 if (hci_dev_test_flag(hdev, HCI_BONDABLE) ||
4655 if (!hci_dev_test_flag(hdev, HCI_BONDABLE))
4661 hci_send_cmd(hdev, HCI_OP_IO_CAPABILITY_REPLY,
4669 hci_send_cmd(hdev, HCI_OP_IO_CAPABILITY_NEG_REPLY,
4674 hci_dev_unlock(hdev);
4677 static void hci_io_capa_reply_evt(struct hci_dev *hdev, struct sk_buff *skb)
4682 BT_DBG("%s", hdev->name);
4684 hci_dev_lock(hdev);
4686 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
4694 hci_dev_unlock(hdev);
4697 static void hci_user_confirm_request_evt(struct hci_dev *hdev,
4704 BT_DBG("%s", hdev->name);
4706 hci_dev_lock(hdev);
4708 if (!hci_dev_test_flag(hdev, HCI_MGMT))
4711 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
4726 hci_send_cmd(hdev, HCI_OP_USER_CONFIRM_NEG_REPLY,
4753 if (hci_find_link_key(hdev, &ev->bdaddr)) {
4754 bt_dev_dbg(hdev, "Local host already has link key");
4760 hdev->auto_accept_delay);
4762 if (hdev->auto_accept_delay > 0) {
4763 int delay = msecs_to_jiffies(hdev->auto_accept_delay);
4764 queue_delayed_work(conn->hdev->workqueue,
4769 hci_send_cmd(hdev, HCI_OP_USER_CONFIRM_REPLY,
4775 mgmt_user_confirm_request(hdev, &ev->bdaddr, ACL_LINK, 0,
4779 hci_dev_unlock(hdev);
4782 static void hci_user_passkey_request_evt(struct hci_dev *hdev,
4787 BT_DBG("%s", hdev->name);
4789 if (hci_dev_test_flag(hdev, HCI_MGMT))
4790 mgmt_user_passkey_request(hdev, &ev->bdaddr, ACL_LINK, 0);
4793 static void hci_user_passkey_notify_evt(struct hci_dev *hdev,
4799 BT_DBG("%s", hdev->name);
4801 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
4808 if (hci_dev_test_flag(hdev, HCI_MGMT))
4809 mgmt_user_passkey_notify(hdev, &conn->dst, conn->type,
4814 static void hci_keypress_notify_evt(struct hci_dev *hdev, struct sk_buff *skb)
4819 BT_DBG("%s", hdev->name);
4821 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
4846 if (hci_dev_test_flag(hdev, HCI_MGMT))
4847 mgmt_user_passkey_notify(hdev, &conn->dst, conn->type,
4852 static void hci_simple_pair_complete_evt(struct hci_dev *hdev,
4858 BT_DBG("%s", hdev->name);
4860 hci_dev_lock(hdev);
4862 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
4880 hci_dev_unlock(hdev);
4883 static void hci_remote_host_features_evt(struct hci_dev *hdev,
4890 BT_DBG("%s", hdev->name);
4892 hci_dev_lock(hdev);
4894 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
4898 ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr);
4902 hci_dev_unlock(hdev);
4905 static void hci_remote_oob_data_request_evt(struct hci_dev *hdev,
4911 BT_DBG("%s", hdev->name);
4913 hci_dev_lock(hdev);
4915 if (!hci_dev_test_flag(hdev, HCI_MGMT))
4918 data = hci_find_remote_oob_data(hdev, &ev->bdaddr, BDADDR_BREDR);
4923 hci_send_cmd(hdev, HCI_OP_REMOTE_OOB_DATA_NEG_REPLY,
4928 if (bredr_sc_enabled(hdev)) {
4932 if (hci_dev_test_flag(hdev, HCI_SC_ONLY)) {
4942 hci_send_cmd(hdev, HCI_OP_REMOTE_OOB_EXT_DATA_REPLY,
4951 hci_send_cmd(hdev, HCI_OP_REMOTE_OOB_DATA_REPLY,
4956 hci_dev_unlock(hdev);
4960 static void hci_chan_selected_evt(struct hci_dev *hdev, struct sk_buff *skb)
4965 BT_DBG("%s handle 0x%2.2x", hdev->name, ev->phy_handle);
4969 hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle);
4973 amp_read_loc_assoc_final_data(hdev, hcon);
4976 static void hci_phy_link_complete_evt(struct hci_dev *hdev,
4982 BT_DBG("%s handle 0x%2.2x status 0x%2.2x", hdev->name, ev->phy_handle,
4985 hci_dev_lock(hdev);
4987 hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle);
4989 hci_dev_unlock(hdev);
4994 hci_dev_unlock(hdev);
5000 hci_dev_unlock(hdev);
5018 hci_dev_unlock(hdev);
5021 static void hci_loglink_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
5029 hdev->name, le16_to_cpu(ev->handle), ev->phy_handle,
5032 hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle);
5052 bredr_chan->conn->mtu = hdev->block_mtu;
5060 static void hci_disconn_loglink_complete_evt(struct hci_dev *hdev,
5066 BT_DBG("%s log handle 0x%4.4x status 0x%2.2x", hdev->name,
5072 hci_dev_lock(hdev);
5074 hchan = hci_chan_lookup_handle(hdev, le16_to_cpu(ev->handle));
5081 hci_dev_unlock(hdev);
5084 static void hci_disconn_phylink_complete_evt(struct hci_dev *hdev,
5090 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
5095 hci_dev_lock(hdev);
5097 hcon = hci_conn_hash_lookup_handle(hdev, ev->phy_handle);
5104 hci_dev_unlock(hdev);
5117 * used instead or hdev->rpa.
5122 } else if (hci_dev_test_flag(conn->hdev, HCI_PRIVACY)) {
5124 bacpy(&conn->init_addr, &conn->hdev->rpa);
5126 hci_copy_identity_address(conn->hdev, &conn->init_addr,
5130 conn->resp_addr_type = conn->hdev->adv_addr_type;
5132 * used instead or hdev->rpa.
5137 } else if (conn->hdev->adv_addr_type == ADDR_LE_DEV_RANDOM) {
5141 if (!ext_adv_capable(conn->hdev))
5143 &conn->hdev->random_addr);
5145 bacpy(&conn->resp_addr, &conn->hdev->bdaddr);
5156 conn->le_conn_min_interval = conn->hdev->le_conn_min_interval;
5157 conn->le_conn_max_interval = conn->hdev->le_conn_max_interval;
5161 static void le_conn_complete_evt(struct hci_dev *hdev, u8 status,
5172 hci_dev_lock(hdev);
5177 hci_dev_clear_flag(hdev, HCI_LE_ADV);
5179 conn = hci_lookup_le_connect(hdev);
5181 conn = hci_conn_add(hdev, LE_LINK, bdaddr, role);
5183 bt_dev_err(hdev, "no memory for new connection");
5200 if (hci_dev_test_flag(hdev, HCI_PRIVACY)) {
5202 bacpy(&conn->init_addr, &hdev->rpa);
5204 hci_copy_identity_address(hdev,
5224 irk = hci_get_irk(hdev, &conn->dst, conn->dst_type);
5241 if (hci_bdaddr_list_lookup(&hdev->reject_list, &conn->dst, addr_type)) {
5247 mgmt_device_connected(hdev, conn, 0, NULL, 0);
5270 (hdev->le_features[0] & HCI_LE_SLAVE_FEATURES)) {
5275 hci_send_cmd(hdev, HCI_OP_LE_READ_REMOTE_FEATURES,
5284 params = hci_pend_le_action_lookup(&hdev->pend_le_conns, &conn->dst,
5296 hci_update_background_scan(hdev);
5297 hci_dev_unlock(hdev);
5300 static void hci_le_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
5304 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
5306 le_conn_complete_evt(hdev, ev->status, &ev->bdaddr, ev->bdaddr_type,
5313 static void hci_le_enh_conn_complete_evt(struct hci_dev *hdev,
5318 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
5320 le_conn_complete_evt(hdev, ev->status, &ev->bdaddr, ev->bdaddr_type,
5326 if (use_ll_privacy(hdev) &&
5327 hci_dev_test_flag(hdev, HCI_ENABLE_LL_PRIVACY) &&
5328 hci_dev_test_flag(hdev, HCI_LL_RPA_RESOLUTION))
5329 hci_req_disable_address_resolution(hdev);
5332 static void hci_le_ext_adv_term_evt(struct hci_dev *hdev, struct sk_buff *skb)
5337 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
5342 adv = hci_find_adv_instance(hdev, ev->handle);
5347 hci_remove_adv_instance(hdev, ev->handle);
5348 mgmt_advertising_removed(NULL, hdev, ev->handle);
5353 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->conn_handle));
5357 if (hdev->adv_addr_type != ADDR_LE_DEV_RANDOM ||
5361 if (!hdev->cur_adv_instance) {
5362 bacpy(&conn->resp_addr, &hdev->random_addr);
5366 adv_instance = hci_find_adv_instance(hdev, hdev->cur_adv_instance);
5372 static void hci_le_conn_update_complete_evt(struct hci_dev *hdev,
5378 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
5383 hci_dev_lock(hdev);
5385 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
5392 hci_dev_unlock(hdev);
5395 /* This function requires the caller holds hdev->lock */
5396 static struct hci_conn *check_pending_le_conn(struct hci_dev *hdev,
5409 if (hci_bdaddr_list_lookup(&hdev->reject_list, addr, addr_type))
5415 if (hdev->conn_hash.le_num_slave > 0 &&
5416 (!test_bit(HCI_QUIRK_VALID_LE_STATES, &hdev->quirks) ||
5417 !(hdev->le_states[3] & 0x10)))
5423 params = hci_pend_le_action_lookup(&hdev->pend_le_conns, addr,
5451 conn = hci_connect_le(hdev, addr, addr_type, BT_SECURITY_LOW,
5452 hdev->def_le_autoconnect_timeout, HCI_ROLE_MASTER,
5486 static void process_adv_report(struct hci_dev *hdev, u8 type, bdaddr_t *bdaddr,
5491 struct discovery_state *d = &hdev->discovery;
5506 bt_dev_err_ratelimited(hdev, "unknown advertising packet "
5512 bt_dev_err_ratelimited(hdev, "legacy adv larger than 31 bytes");
5547 if (!hci_dev_test_flag(hdev, HCI_PRIVACY))
5554 if (!smp_irk_matches(hdev, hdev->irk, direct_addr))
5559 irk = hci_get_irk(hdev, bdaddr, bdaddr_type);
5570 conn = check_pending_le_conn(hdev, bdaddr, bdaddr_type, type,
5584 if (hdev->le_scan_type == LE_SCAN_PASSIVE) {
5588 if (!hci_pend_le_action_lookup(&hdev->pend_le_reports,
5590 idr_is_empty(&hdev->adv_monitors_idr))
5597 mgmt_device_found(hdev, bdaddr, LE_LINK, bdaddr_type, NULL,
5627 if (!ext_adv && !has_pending_adv_report(hdev)) {
5632 store_pending_adv_report(hdev, bdaddr, bdaddr_type,
5637 mgmt_device_found(hdev, bdaddr, LE_LINK, bdaddr_type, NULL,
5653 mgmt_device_found(hdev, &d->last_adv_addr, LE_LINK,
5664 store_pending_adv_report(hdev, bdaddr, bdaddr_type,
5672 clear_pending_adv_report(hdev);
5673 mgmt_device_found(hdev, bdaddr, LE_LINK, bdaddr_type, NULL,
5682 mgmt_device_found(hdev, &d->last_adv_addr, LE_LINK,
5685 clear_pending_adv_report(hdev);
5688 static void hci_le_adv_report_evt(struct hci_dev *hdev, struct sk_buff *skb)
5693 hci_dev_lock(hdev);
5700 bt_dev_err(hdev, "Malicious advertising data.");
5707 process_adv_report(hdev, ev->evt_type, &ev->bdaddr,
5711 bt_dev_err(hdev, "Dropping invalid advertising data");
5717 hci_dev_unlock(hdev);
5720 static u8 ext_evt_type_to_legacy(struct hci_dev *hdev, u16 evt_type)
5758 bt_dev_err_ratelimited(hdev, "Unknown advertising packet type: 0x%02x",
5764 static void hci_le_ext_adv_report_evt(struct hci_dev *hdev, struct sk_buff *skb)
5769 hci_dev_lock(hdev);
5777 legacy_evt_type = ext_evt_type_to_legacy(hdev, evt_type);
5779 process_adv_report(hdev, legacy_evt_type, &ev->bdaddr,
5788 hci_dev_unlock(hdev);
5791 static void hci_le_remote_feat_complete_evt(struct hci_dev *hdev,
5797 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
5799 hci_dev_lock(hdev);
5801 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
5818 if ((hdev->le_features[0] & HCI_LE_SLAVE_FEATURES) &&
5830 hci_dev_unlock(hdev);
5833 static void hci_le_ltk_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
5841 BT_DBG("%s handle 0x%4.4x", hdev->name, __le16_to_cpu(ev->handle));
5843 hci_dev_lock(hdev);
5845 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
5849 ltk = hci_find_ltk(hdev, &conn->dst, conn->dst_type, conn->role);
5871 hci_send_cmd(hdev, HCI_OP_LE_LTK_REPLY, sizeof(cp), &cp);
5887 hci_dev_unlock(hdev);
5893 hci_send_cmd(hdev, HCI_OP_LE_LTK_NEG_REPLY, sizeof(neg), &neg);
5894 hci_dev_unlock(hdev);
5897 static void send_conn_param_neg_reply(struct hci_dev *hdev, u16 handle,
5905 hci_send_cmd(hdev, HCI_OP_LE_CONN_PARAM_REQ_NEG_REPLY, sizeof(cp),
5909 static void hci_le_remote_conn_param_req_evt(struct hci_dev *hdev,
5923 hcon = hci_conn_hash_lookup_handle(hdev, handle);
5925 return send_conn_param_neg_reply(hdev, handle,
5929 return send_conn_param_neg_reply(hdev, handle,
5936 hci_dev_lock(hdev);
5938 params = hci_conn_params_lookup(hdev, &hcon->dst,
5950 hci_dev_unlock(hdev);
5952 mgmt_new_conn_param(hdev, &hcon->dst, hcon->dst_type,
5964 hci_send_cmd(hdev, HCI_OP_LE_CONN_PARAM_REQ_REPLY, sizeof(cp), &cp);
5967 static void hci_le_direct_adv_report_evt(struct hci_dev *hdev,
5976 hci_dev_lock(hdev);
5979 process_adv_report(hdev, ev->evt_type, &ev->bdaddr,
5984 hci_dev_unlock(hdev);
5987 static void hci_le_phy_update_evt(struct hci_dev *hdev, struct sk_buff *skb)
5992 BT_DBG("%s status 0x%2.2x", hdev->name, ev->status);
5997 hci_dev_lock(hdev);
5999 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
6007 hci_dev_unlock(hdev);
6010 static void hci_le_meta_evt(struct hci_dev *hdev, struct sk_buff *skb)
6018 hci_le_conn_complete_evt(hdev, skb);
6022 hci_le_conn_update_complete_evt(hdev, skb);
6026 hci_le_adv_report_evt(hdev, skb);
6030 hci_le_remote_feat_complete_evt(hdev, skb);
6034 hci_le_ltk_request_evt(hdev, skb);
6038 hci_le_remote_conn_param_req_evt(hdev, skb);
6042 hci_le_direct_adv_report_evt(hdev, skb);
6046 hci_le_phy_update_evt(hdev, skb);
6050 hci_le_ext_adv_report_evt(hdev, skb);
6054 hci_le_enh_conn_complete_evt(hdev, skb);
6058 hci_le_ext_adv_term_evt(hdev, skb);
6066 static bool hci_get_cmd_complete(struct hci_dev *hdev, u16 opcode,
6076 bt_dev_err(hdev, "too short HCI event");
6096 bt_dev_err(hdev, "last event is not cmd complete (0x%2.2x)",
6102 bt_dev_err(hdev, "too short cmd_complete event");
6118 static void hci_store_wake_reason(struct hci_dev *hdev, u8 event,
6127 hci_dev_lock(hdev);
6132 if (!hdev->suspended || hdev->wake_reason)
6138 hdev->wake_reason = MGMT_WAKE_REASON_REMOTE_WAKE;
6145 bacpy(&hdev->wake_addr, &conn_complete->bdaddr);
6146 hdev->wake_addr_type = BDADDR_BREDR;
6148 bacpy(&hdev->wake_addr, &conn_request->bdaddr);
6149 hdev->wake_addr_type = BDADDR_BREDR;
6166 bacpy(&hdev->wake_addr, &adv->bdaddr);
6167 hdev->wake_addr_type = adv->bdaddr_type;
6170 bacpy(&hdev->wake_addr, &direct_adv->bdaddr);
6171 hdev->wake_addr_type = direct_adv->bdaddr_type;
6174 bacpy(&hdev->wake_addr, &ext_adv->bdaddr);
6175 hdev->wake_addr_type = ext_adv->bdaddr_type;
6180 hdev->wake_reason = MGMT_WAKE_REASON_UNEXPECTED;
6184 hci_dev_unlock(hdev);
6187 void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb)
6197 bt_dev_warn(hdev, "Received unexpected HCI Event 00000000");
6201 if (hdev->sent_cmd && bt_cb(hdev->sent_cmd)->hci.req_event == event) {
6202 struct hci_command_hdr *cmd_hdr = (void *) hdev->sent_cmd->data;
6204 hci_req_cmd_complete(hdev, opcode, status, &req_complete,
6221 hci_store_wake_reason(hdev, event, skb);
6225 hci_inquiry_complete_evt(hdev, skb);
6229 hci_inquiry_result_evt(hdev, skb);
6233 hci_conn_complete_evt(hdev, skb);
6237 hci_conn_request_evt(hdev, skb);
6241 hci_disconn_complete_evt(hdev, skb);
6245 hci_auth_complete_evt(hdev, skb);
6249 hci_remote_name_evt(hdev, skb);
6253 hci_encrypt_change_evt(hdev, skb);
6257 hci_change_link_key_complete_evt(hdev, skb);
6261 hci_remote_features_evt(hdev, skb);
6265 hci_cmd_complete_evt(hdev, skb, &opcode, &status,
6270 hci_cmd_status_evt(hdev, skb, &opcode, &status, &req_complete,
6275 hci_hardware_error_evt(hdev, skb);
6279 hci_role_change_evt(hdev, skb);
6283 hci_num_comp_pkts_evt(hdev, skb);
6287 hci_mode_change_evt(hdev, skb);
6291 hci_pin_code_request_evt(hdev, skb);
6295 hci_link_key_request_evt(hdev, skb);
6299 hci_link_key_notify_evt(hdev, skb);
6303 hci_clock_offset_evt(hdev, skb);
6307 hci_pkt_type_change_evt(hdev, skb);
6311 hci_pscan_rep_mode_evt(hdev, skb);
6315 hci_inquiry_result_with_rssi_evt(hdev, skb);
6319 hci_remote_ext_features_evt(hdev, skb);
6323 hci_sync_conn_complete_evt(hdev, skb);
6327 hci_extended_inquiry_result_evt(hdev, skb);
6331 hci_key_refresh_complete_evt(hdev, skb);
6335 hci_io_capa_request_evt(hdev, skb);
6339 hci_io_capa_reply_evt(hdev, skb);
6343 hci_user_confirm_request_evt(hdev, skb);
6347 hci_user_passkey_request_evt(hdev, skb);
6351 hci_user_passkey_notify_evt(hdev, skb);
6355 hci_keypress_notify_evt(hdev, skb);
6359 hci_simple_pair_complete_evt(hdev, skb);
6363 hci_remote_host_features_evt(hdev, skb);
6367 hci_le_meta_evt(hdev, skb);
6371 hci_remote_oob_data_request_evt(hdev, skb);
6376 hci_chan_selected_evt(hdev, skb);
6380 hci_phy_link_complete_evt(hdev, skb);
6384 hci_loglink_complete_evt(hdev, skb);
6388 hci_disconn_loglink_complete_evt(hdev, skb);
6392 hci_disconn_phylink_complete_evt(hdev, skb);
6397 hci_num_comp_blocks_evt(hdev, skb);
6401 msft_vendor_evt(hdev, skb);
6405 BT_DBG("%s event 0x%2.2x", hdev->name, event);
6410 req_complete(hdev, status, opcode);
6412 if (!hci_get_cmd_complete(hdev, opcode, req_evt, orig_skb)) {
6416 req_complete_skb(hdev, status, opcode, orig_skb);
6422 hdev->stat.evt_rx++;