Lines Matching refs:hdev
68 struct hci_dev *hdev = file->private_data; in dut_mode_read() local
71 buf[0] = hci_dev_test_flag(hdev, HCI_DUT_MODE) ? 'Y' : 'N'; in dut_mode_read()
80 struct hci_dev *hdev = file->private_data; in dut_mode_write() local
85 if (!test_bit(HCI_UP, &hdev->flags)) in dut_mode_write()
92 if (enable == hci_dev_test_flag(hdev, HCI_DUT_MODE)) in dut_mode_write()
95 hci_req_sync_lock(hdev); in dut_mode_write()
97 skb = __hci_cmd_sync(hdev, HCI_OP_ENABLE_DUT_MODE, 0, NULL, in dut_mode_write()
100 skb = __hci_cmd_sync(hdev, HCI_OP_RESET, 0, NULL, in dut_mode_write()
102 hci_req_sync_unlock(hdev); in dut_mode_write()
109 hci_dev_change_flag(hdev, HCI_DUT_MODE); in dut_mode_write()
124 struct hci_dev *hdev = file->private_data; in vendor_diag_read() local
127 buf[0] = hci_dev_test_flag(hdev, HCI_VENDOR_DIAG) ? 'Y' : 'N'; in vendor_diag_read()
136 struct hci_dev *hdev = file->private_data; in vendor_diag_write() local
149 if (test_bit(HCI_QUIRK_NON_PERSISTENT_DIAG, &hdev->quirks) && in vendor_diag_write()
150 (!test_bit(HCI_RUNNING, &hdev->flags) || in vendor_diag_write()
151 hci_dev_test_flag(hdev, HCI_USER_CHANNEL))) in vendor_diag_write()
154 hci_req_sync_lock(hdev); in vendor_diag_write()
155 err = hdev->set_diag(hdev, enable); in vendor_diag_write()
156 hci_req_sync_unlock(hdev); in vendor_diag_write()
163 hci_dev_set_flag(hdev, HCI_VENDOR_DIAG); in vendor_diag_write()
165 hci_dev_clear_flag(hdev, HCI_VENDOR_DIAG); in vendor_diag_write()
177 static void hci_debugfs_create_basic(struct hci_dev *hdev) in hci_debugfs_create_basic() argument
179 debugfs_create_file("dut_mode", 0644, hdev->debugfs, hdev, in hci_debugfs_create_basic()
182 if (hdev->set_diag) in hci_debugfs_create_basic()
183 debugfs_create_file("vendor_diag", 0644, hdev->debugfs, hdev, in hci_debugfs_create_basic()
189 BT_DBG("%s %ld", req->hdev->name, opt); in hci_reset_req()
192 set_bit(HCI_RESET, &req->hdev->flags); in hci_reset_req()
199 req->hdev->flow_ctl_mode = HCI_FLOW_CTL_MODE_PACKET_BASED; in bredr_init()
213 req->hdev->flow_ctl_mode = HCI_FLOW_CTL_MODE_BLOCK_BASED; in amp_init1()
240 if (req->hdev->commands[14] & 0x20) in amp_init2()
248 struct hci_dev *hdev = req->hdev; in hci_init1_req() local
250 BT_DBG("%s %ld", hdev->name, opt); in hci_init1_req()
253 if (!test_bit(HCI_QUIRK_RESET_ON_CLOSE, &hdev->quirks)) in hci_init1_req()
256 switch (hdev->dev_type) { in hci_init1_req()
264 bt_dev_err(hdev, "Unknown device type %d", hdev->dev_type); in hci_init1_req()
305 struct hci_dev *hdev = req->hdev; in le_setup() local
317 if (!lmp_bredr_capable(hdev)) in le_setup()
318 hci_dev_set_flag(hdev, HCI_LE_ENABLED); in le_setup()
323 struct hci_dev *hdev = req->hdev; in hci_setup_event_mask() local
334 if (hdev->hci_ver < BLUETOOTH_VER_1_2) in hci_setup_event_mask()
337 if (lmp_bredr_capable(hdev)) { in hci_setup_event_mask()
350 if (hdev->commands[0] & 0x20) { in hci_setup_event_mask()
359 if (hdev->commands[2] & 0x80) in hci_setup_event_mask()
364 if (hdev->le_features[0] & HCI_LE_ENCRYPTION) { in hci_setup_event_mask()
370 if (lmp_inq_rssi_capable(hdev) || in hci_setup_event_mask()
371 test_bit(HCI_QUIRK_FIXUP_INQUIRY_MODE, &hdev->quirks)) in hci_setup_event_mask()
374 if (lmp_ext_feat_capable(hdev)) in hci_setup_event_mask()
377 if (lmp_esco_capable(hdev)) { in hci_setup_event_mask()
382 if (lmp_sniffsubr_capable(hdev)) in hci_setup_event_mask()
385 if (lmp_pause_enc_capable(hdev)) in hci_setup_event_mask()
388 if (lmp_ext_inq_capable(hdev)) in hci_setup_event_mask()
391 if (lmp_no_flush_capable(hdev)) in hci_setup_event_mask()
394 if (lmp_lsto_capable(hdev)) in hci_setup_event_mask()
397 if (lmp_ssp_capable(hdev)) { in hci_setup_event_mask()
411 if (lmp_le_capable(hdev)) in hci_setup_event_mask()
419 struct hci_dev *hdev = req->hdev; in hci_init2_req() local
421 if (hdev->dev_type == HCI_AMP) in hci_init2_req()
424 if (lmp_bredr_capable(hdev)) in hci_init2_req()
427 hci_dev_clear_flag(hdev, HCI_BREDR_ENABLED); in hci_init2_req()
429 if (lmp_le_capable(hdev)) in hci_init2_req()
440 if (hdev->hci_ver > BLUETOOTH_VER_1_1 && in hci_init2_req()
441 !test_bit(HCI_QUIRK_BROKEN_LOCAL_COMMANDS, &hdev->quirks)) in hci_init2_req()
444 if (lmp_ssp_capable(hdev)) { in hci_init2_req()
451 hdev->max_page = 0x01; in hci_init2_req()
453 if (hci_dev_test_flag(hdev, HCI_SSP_ENABLED)) { in hci_init2_req()
461 memset(hdev->eir, 0, sizeof(hdev->eir)); in hci_init2_req()
468 if (lmp_inq_rssi_capable(hdev) || in hci_init2_req()
469 test_bit(HCI_QUIRK_FIXUP_INQUIRY_MODE, &hdev->quirks)) { in hci_init2_req()
476 mode = lmp_ext_inq_capable(hdev) ? 0x02 : 0x01; in hci_init2_req()
481 if (lmp_inq_tx_pwr_capable(hdev)) in hci_init2_req()
484 if (lmp_ext_feat_capable(hdev)) { in hci_init2_req()
492 if (hci_dev_test_flag(hdev, HCI_LINK_SECURITY)) { in hci_init2_req()
503 struct hci_dev *hdev = req->hdev; in hci_setup_link_policy() local
507 if (lmp_rswitch_capable(hdev)) in hci_setup_link_policy()
509 if (lmp_hold_capable(hdev)) in hci_setup_link_policy()
511 if (lmp_sniff_capable(hdev)) in hci_setup_link_policy()
513 if (lmp_park_capable(hdev)) in hci_setup_link_policy()
522 struct hci_dev *hdev = req->hdev; in hci_set_le_support() local
526 if (!lmp_bredr_capable(hdev)) in hci_set_le_support()
531 if (hci_dev_test_flag(hdev, HCI_LE_ENABLED)) { in hci_set_le_support()
536 if (cp.le != lmp_host_le_capable(hdev)) in hci_set_le_support()
543 struct hci_dev *hdev = req->hdev; in hci_set_event_mask_page_2() local
550 if (lmp_csb_master_capable(hdev)) { in hci_set_event_mask_page_2()
561 if (lmp_csb_slave_capable(hdev)) { in hci_set_event_mask_page_2()
570 if (lmp_ping_capable(hdev) || hdev->le_features[0] & HCI_LE_PING) { in hci_set_event_mask_page_2()
588 struct hci_dev *hdev = req->hdev; in hci_init3_req() local
593 if (hdev->commands[6] & 0x20 && in hci_init3_req()
594 !test_bit(HCI_QUIRK_BROKEN_STORED_LINK_KEY, &hdev->quirks)) { in hci_init3_req()
602 if (hdev->commands[5] & 0x10) in hci_init3_req()
605 if (hdev->commands[8] & 0x01) in hci_init3_req()
608 if (hdev->commands[18] & 0x04 && in hci_init3_req()
609 !test_bit(HCI_QUIRK_BROKEN_ERR_DATA_REPORTING, &hdev->quirks)) in hci_init3_req()
616 if (hdev->commands[13] & 0x01) in hci_init3_req()
619 if (lmp_le_capable(hdev)) { in hci_init3_req()
624 if (hdev->le_features[0] & HCI_LE_ENCRYPTION) in hci_init3_req()
630 if (hdev->le_features[0] & HCI_LE_CONN_PARAM_REQ_PROC) in hci_init3_req()
638 if (hdev->le_features[0] & HCI_LE_DATA_LEN_EXT) in hci_init3_req()
644 if (hdev->le_features[0] & HCI_LE_LL_PRIVACY) in hci_init3_req()
652 if (hdev->le_features[0] & HCI_LE_EXT_SCAN_POLICY) in hci_init3_req()
660 if (hdev->le_features[1] & HCI_LE_CHAN_SEL_ALG2) in hci_init3_req()
668 if (hdev->commands[26] & 0x08) in hci_init3_req()
674 if (hdev->commands[26] & 0x10) in hci_init3_req()
680 if (hdev->commands[27] & 0x04) in hci_init3_req()
688 if (hdev->commands[27] & 0x20) in hci_init3_req()
696 if (hdev->commands[34] & 0x02) in hci_init3_req()
704 if (hdev->commands[34] & 0x04) in hci_init3_req()
710 if (hdev->commands[35] & (0x20 | 0x40)) in hci_init3_req()
717 if (use_ext_scan(hdev)) in hci_init3_req()
725 if (ext_adv_capable(hdev)) in hci_init3_req()
734 if ((hdev->commands[25] & 0x40) && !ext_adv_capable(hdev)) { in hci_init3_req()
744 if (hdev->commands[26] & 0x40) { in hci_init3_req()
750 if (hdev->commands[26] & 0x80) { in hci_init3_req()
755 if (hdev->commands[34] & 0x40) { in hci_init3_req()
761 if (hdev->commands[34] & 0x20) { in hci_init3_req()
766 if (hdev->commands[35] & 0x40) { in hci_init3_req()
767 __le16 rpa_timeout = cpu_to_le16(hdev->rpa_timeout); in hci_init3_req()
774 if (hdev->le_features[0] & HCI_LE_DATA_LEN_EXT) { in hci_init3_req()
782 if (ext_adv_capable(hdev)) { in hci_init3_req()
792 for (p = 2; p < HCI_MAX_PAGES && p <= hdev->max_page; p++) { in hci_init3_req()
805 struct hci_dev *hdev = req->hdev; in hci_init4_req() local
820 if (hdev->commands[6] & 0x80 && in hci_init4_req()
821 !test_bit(HCI_QUIRK_BROKEN_STORED_LINK_KEY, &hdev->quirks)) { in hci_init4_req()
831 if (hdev->commands[22] & 0x04) in hci_init4_req()
835 if (hdev->commands[29] & 0x20) in hci_init4_req()
839 if (hdev->commands[41] & 0x08) in hci_init4_req()
843 if (hdev->commands[30] & 0x08) in hci_init4_req()
847 if (lmp_sync_train_capable(hdev)) in hci_init4_req()
851 if (hci_dev_test_flag(hdev, HCI_SSP_ENABLED) && in hci_init4_req()
852 bredr_sc_enabled(hdev)) { in hci_init4_req()
862 if (hdev->commands[18] & 0x08 && in hci_init4_req()
863 !test_bit(HCI_QUIRK_BROKEN_ERR_DATA_REPORTING, &hdev->quirks)) { in hci_init4_req()
864 bool enabled = hci_dev_test_flag(hdev, in hci_init4_req()
868 (hdev->err_data_reporting == ERR_DATA_REPORTING_ENABLED)) { in hci_init4_req()
881 if (hdev->le_features[0] & HCI_LE_DATA_LEN_EXT) { in hci_init4_req()
884 cp.tx_len = cpu_to_le16(hdev->le_max_tx_len); in hci_init4_req()
885 cp.tx_time = cpu_to_le16(hdev->le_max_tx_time); in hci_init4_req()
890 if (hdev->commands[35] & 0x20) { in hci_init4_req()
894 cp.tx_phys = hdev->le_tx_def_phys; in hci_init4_req()
895 cp.rx_phys = hdev->le_rx_def_phys; in hci_init4_req()
903 static int __hci_init(struct hci_dev *hdev) in __hci_init() argument
907 err = __hci_req_sync(hdev, hci_init1_req, 0, HCI_INIT_TIMEOUT, NULL); in __hci_init()
911 if (hci_dev_test_flag(hdev, HCI_SETUP)) in __hci_init()
912 hci_debugfs_create_basic(hdev); in __hci_init()
914 err = __hci_req_sync(hdev, hci_init2_req, 0, HCI_INIT_TIMEOUT, NULL); in __hci_init()
922 if (hdev->dev_type != HCI_PRIMARY) in __hci_init()
925 err = __hci_req_sync(hdev, hci_init3_req, 0, HCI_INIT_TIMEOUT, NULL); in __hci_init()
929 err = __hci_req_sync(hdev, hci_init4_req, 0, HCI_INIT_TIMEOUT, NULL); in __hci_init()
945 if (!hci_dev_test_flag(hdev, HCI_SETUP) && in __hci_init()
946 !hci_dev_test_flag(hdev, HCI_CONFIG)) in __hci_init()
949 hci_debugfs_create_common(hdev); in __hci_init()
951 if (lmp_bredr_capable(hdev)) in __hci_init()
952 hci_debugfs_create_bredr(hdev); in __hci_init()
954 if (lmp_le_capable(hdev)) in __hci_init()
955 hci_debugfs_create_le(hdev); in __hci_init()
962 struct hci_dev *hdev = req->hdev; in hci_init0_req() local
964 BT_DBG("%s %ld", hdev->name, opt); in hci_init0_req()
967 if (!test_bit(HCI_QUIRK_RESET_ON_CLOSE, &hdev->quirks)) in hci_init0_req()
974 if (hdev->set_bdaddr) in hci_init0_req()
980 static int __hci_unconf_init(struct hci_dev *hdev) in __hci_unconf_init() argument
984 if (test_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks)) in __hci_unconf_init()
987 err = __hci_req_sync(hdev, hci_init0_req, 0, HCI_INIT_TIMEOUT, NULL); in __hci_unconf_init()
991 if (hci_dev_test_flag(hdev, HCI_SETUP)) in __hci_unconf_init()
992 hci_debugfs_create_basic(hdev); in __hci_unconf_init()
1001 BT_DBG("%s %x", req->hdev->name, scan); in hci_scan_req()
1012 BT_DBG("%s %x", req->hdev->name, auth); in hci_auth_req()
1023 BT_DBG("%s %x", req->hdev->name, encrypt); in hci_encrypt_req()
1034 BT_DBG("%s %x", req->hdev->name, policy); in hci_linkpol_req()
1045 struct hci_dev *hdev = NULL, *d; in hci_dev_get() local
1055 hdev = hci_dev_hold(d); in hci_dev_get()
1060 return hdev; in hci_dev_get()
1065 bool hci_discovery_active(struct hci_dev *hdev) in hci_discovery_active() argument
1067 struct discovery_state *discov = &hdev->discovery; in hci_discovery_active()
1079 void hci_discovery_set_state(struct hci_dev *hdev, int state) in hci_discovery_set_state() argument
1081 int old_state = hdev->discovery.state; in hci_discovery_set_state()
1083 BT_DBG("%s state %u -> %u", hdev->name, hdev->discovery.state, state); in hci_discovery_set_state()
1088 hdev->discovery.state = state; in hci_discovery_set_state()
1092 hci_update_background_scan(hdev); in hci_discovery_set_state()
1095 mgmt_discovering(hdev, 0); in hci_discovery_set_state()
1100 mgmt_discovering(hdev, 1); in hci_discovery_set_state()
1109 void hci_inquiry_cache_flush(struct hci_dev *hdev) in hci_inquiry_cache_flush() argument
1111 struct discovery_state *cache = &hdev->discovery; in hci_inquiry_cache_flush()
1123 struct inquiry_entry *hci_inquiry_cache_lookup(struct hci_dev *hdev, in hci_inquiry_cache_lookup() argument
1126 struct discovery_state *cache = &hdev->discovery; in hci_inquiry_cache_lookup()
1139 struct inquiry_entry *hci_inquiry_cache_lookup_unknown(struct hci_dev *hdev, in hci_inquiry_cache_lookup_unknown() argument
1142 struct discovery_state *cache = &hdev->discovery; in hci_inquiry_cache_lookup_unknown()
1155 struct inquiry_entry *hci_inquiry_cache_lookup_resolve(struct hci_dev *hdev, in hci_inquiry_cache_lookup_resolve() argument
1159 struct discovery_state *cache = &hdev->discovery; in hci_inquiry_cache_lookup_resolve()
1174 void hci_inquiry_cache_update_resolve(struct hci_dev *hdev, in hci_inquiry_cache_update_resolve() argument
1177 struct discovery_state *cache = &hdev->discovery; in hci_inquiry_cache_update_resolve()
1193 u32 hci_inquiry_cache_update(struct hci_dev *hdev, struct inquiry_data *data, in hci_inquiry_cache_update() argument
1196 struct discovery_state *cache = &hdev->discovery; in hci_inquiry_cache_update()
1202 hci_remove_remote_oob_data(hdev, &data->bdaddr, BDADDR_BREDR); in hci_inquiry_cache_update()
1207 ie = hci_inquiry_cache_lookup(hdev, &data->bdaddr); in hci_inquiry_cache_update()
1215 hci_inquiry_cache_update_resolve(hdev, ie); in hci_inquiry_cache_update()
1255 static int inquiry_cache_dump(struct hci_dev *hdev, int num, __u8 *buf) in inquiry_cache_dump() argument
1257 struct discovery_state *cache = &hdev->discovery; in inquiry_cache_dump()
1286 struct hci_dev *hdev = req->hdev; in hci_inq_req() local
1289 BT_DBG("%s", hdev->name); in hci_inq_req()
1291 if (test_bit(HCI_INQUIRY, &hdev->flags)) in hci_inq_req()
1307 struct hci_dev *hdev; in hci_inquiry() local
1315 hdev = hci_dev_get(ir.dev_id); in hci_inquiry()
1316 if (!hdev) in hci_inquiry()
1319 if (hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) { in hci_inquiry()
1324 if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) { in hci_inquiry()
1329 if (hdev->dev_type != HCI_PRIMARY) { in hci_inquiry()
1334 if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) { in hci_inquiry()
1339 hci_dev_lock(hdev); in hci_inquiry()
1340 if (inquiry_cache_age(hdev) > INQUIRY_CACHE_AGE_MAX || in hci_inquiry()
1341 inquiry_cache_empty(hdev) || ir.flags & IREQ_CACHE_FLUSH) { in hci_inquiry()
1342 hci_inquiry_cache_flush(hdev); in hci_inquiry()
1345 hci_dev_unlock(hdev); in hci_inquiry()
1350 err = hci_req_sync(hdev, hci_inq_req, (unsigned long) &ir, in hci_inquiry()
1358 if (wait_on_bit(&hdev->flags, HCI_INQUIRY, in hci_inquiry()
1377 hci_dev_lock(hdev); in hci_inquiry()
1378 ir.num_rsp = inquiry_cache_dump(hdev, max_rsp, buf); in hci_inquiry()
1379 hci_dev_unlock(hdev); in hci_inquiry()
1394 hci_dev_put(hdev); in hci_inquiry()
1410 static void hci_dev_get_bd_addr_from_property(struct hci_dev *hdev) in hci_dev_get_bd_addr_from_property() argument
1412 struct fwnode_handle *fwnode = dev_fwnode(hdev->dev.parent); in hci_dev_get_bd_addr_from_property()
1421 bacpy(&hdev->public_addr, &ba); in hci_dev_get_bd_addr_from_property()
1424 static int hci_dev_do_open(struct hci_dev *hdev) in hci_dev_do_open() argument
1428 BT_DBG("%s %p", hdev->name, hdev); in hci_dev_do_open()
1430 hci_req_sync_lock(hdev); in hci_dev_do_open()
1432 if (hci_dev_test_flag(hdev, HCI_UNREGISTER)) { in hci_dev_do_open()
1437 if (!hci_dev_test_flag(hdev, HCI_SETUP) && in hci_dev_do_open()
1438 !hci_dev_test_flag(hdev, HCI_CONFIG)) { in hci_dev_do_open()
1442 if (hci_dev_test_flag(hdev, HCI_RFKILLED)) { in hci_dev_do_open()
1459 if (!hci_dev_test_flag(hdev, HCI_USER_CHANNEL) && in hci_dev_do_open()
1460 hdev->dev_type == HCI_PRIMARY && in hci_dev_do_open()
1461 !bacmp(&hdev->bdaddr, BDADDR_ANY) && in hci_dev_do_open()
1462 !bacmp(&hdev->static_addr, BDADDR_ANY)) { in hci_dev_do_open()
1468 if (test_bit(HCI_UP, &hdev->flags)) { in hci_dev_do_open()
1473 if (hdev->open(hdev)) { in hci_dev_do_open()
1478 set_bit(HCI_RUNNING, &hdev->flags); in hci_dev_do_open()
1479 hci_sock_dev_event(hdev, HCI_DEV_OPEN); in hci_dev_do_open()
1481 atomic_set(&hdev->cmd_cnt, 1); in hci_dev_do_open()
1482 set_bit(HCI_INIT, &hdev->flags); in hci_dev_do_open()
1484 if (hci_dev_test_flag(hdev, HCI_SETUP) || in hci_dev_do_open()
1485 test_bit(HCI_QUIRK_NON_PERSISTENT_SETUP, &hdev->quirks)) { in hci_dev_do_open()
1488 hci_sock_dev_event(hdev, HCI_DEV_SETUP); in hci_dev_do_open()
1490 if (hdev->setup) in hci_dev_do_open()
1491 ret = hdev->setup(hdev); in hci_dev_do_open()
1498 &hdev->quirks); in hci_dev_do_open()
1503 if (test_bit(HCI_QUIRK_USE_BDADDR_PROPERTY, &hdev->quirks)) { in hci_dev_do_open()
1504 if (!bacmp(&hdev->public_addr, BDADDR_ANY)) in hci_dev_do_open()
1505 hci_dev_get_bd_addr_from_property(hdev); in hci_dev_do_open()
1507 if (bacmp(&hdev->public_addr, BDADDR_ANY) && in hci_dev_do_open()
1508 hdev->set_bdaddr) { in hci_dev_do_open()
1509 ret = hdev->set_bdaddr(hdev, in hci_dev_do_open()
1510 &hdev->public_addr); in hci_dev_do_open()
1533 if (test_bit(HCI_QUIRK_EXTERNAL_CONFIG, &hdev->quirks) || in hci_dev_do_open()
1535 hci_dev_set_flag(hdev, HCI_UNCONFIGURED); in hci_dev_do_open()
1545 if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) in hci_dev_do_open()
1546 ret = __hci_unconf_init(hdev); in hci_dev_do_open()
1549 if (hci_dev_test_flag(hdev, HCI_CONFIG)) { in hci_dev_do_open()
1555 if (bacmp(&hdev->public_addr, BDADDR_ANY) && in hci_dev_do_open()
1556 hdev->set_bdaddr) in hci_dev_do_open()
1557 ret = hdev->set_bdaddr(hdev, &hdev->public_addr); in hci_dev_do_open()
1563 if (!hci_dev_test_flag(hdev, HCI_UNCONFIGURED) && in hci_dev_do_open()
1564 !hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) { in hci_dev_do_open()
1565 ret = __hci_init(hdev); in hci_dev_do_open()
1566 if (!ret && hdev->post_init) in hci_dev_do_open()
1567 ret = hdev->post_init(hdev); in hci_dev_do_open()
1575 if (test_bit(HCI_QUIRK_NON_PERSISTENT_DIAG, &hdev->quirks) && in hci_dev_do_open()
1576 !hci_dev_test_flag(hdev, HCI_USER_CHANNEL) && in hci_dev_do_open()
1577 hci_dev_test_flag(hdev, HCI_VENDOR_DIAG) && hdev->set_diag) in hci_dev_do_open()
1578 ret = hdev->set_diag(hdev, true); in hci_dev_do_open()
1580 msft_do_open(hdev); in hci_dev_do_open()
1582 clear_bit(HCI_INIT, &hdev->flags); in hci_dev_do_open()
1585 hci_dev_hold(hdev); in hci_dev_do_open()
1586 hci_dev_set_flag(hdev, HCI_RPA_EXPIRED); in hci_dev_do_open()
1587 hci_adv_instances_set_rpa_expired(hdev, true); in hci_dev_do_open()
1588 set_bit(HCI_UP, &hdev->flags); in hci_dev_do_open()
1589 hci_sock_dev_event(hdev, HCI_DEV_UP); in hci_dev_do_open()
1590 hci_leds_update_powered(hdev, true); in hci_dev_do_open()
1591 if (!hci_dev_test_flag(hdev, HCI_SETUP) && in hci_dev_do_open()
1592 !hci_dev_test_flag(hdev, HCI_CONFIG) && in hci_dev_do_open()
1593 !hci_dev_test_flag(hdev, HCI_UNCONFIGURED) && in hci_dev_do_open()
1594 !hci_dev_test_flag(hdev, HCI_USER_CHANNEL) && in hci_dev_do_open()
1595 hci_dev_test_flag(hdev, HCI_MGMT) && in hci_dev_do_open()
1596 hdev->dev_type == HCI_PRIMARY) { in hci_dev_do_open()
1597 ret = __hci_req_hci_power_on(hdev); in hci_dev_do_open()
1598 mgmt_power_on(hdev, ret); in hci_dev_do_open()
1602 flush_work(&hdev->tx_work); in hci_dev_do_open()
1603 flush_work(&hdev->cmd_work); in hci_dev_do_open()
1604 flush_work(&hdev->rx_work); in hci_dev_do_open()
1606 skb_queue_purge(&hdev->cmd_q); in hci_dev_do_open()
1607 skb_queue_purge(&hdev->rx_q); in hci_dev_do_open()
1609 if (hdev->flush) in hci_dev_do_open()
1610 hdev->flush(hdev); in hci_dev_do_open()
1612 if (hdev->sent_cmd) { in hci_dev_do_open()
1613 kfree_skb(hdev->sent_cmd); in hci_dev_do_open()
1614 hdev->sent_cmd = NULL; in hci_dev_do_open()
1617 clear_bit(HCI_RUNNING, &hdev->flags); in hci_dev_do_open()
1618 hci_sock_dev_event(hdev, HCI_DEV_CLOSE); in hci_dev_do_open()
1620 hdev->close(hdev); in hci_dev_do_open()
1621 hdev->flags &= BIT(HCI_RAW); in hci_dev_do_open()
1625 hci_req_sync_unlock(hdev); in hci_dev_do_open()
1633 struct hci_dev *hdev; in hci_dev_open() local
1636 hdev = hci_dev_get(dev); in hci_dev_open()
1637 if (!hdev) in hci_dev_open()
1649 if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED) && in hci_dev_open()
1650 !hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) { in hci_dev_open()
1660 if (hci_dev_test_and_clear_flag(hdev, HCI_AUTO_OFF)) in hci_dev_open()
1661 cancel_delayed_work(&hdev->power_off); in hci_dev_open()
1667 flush_workqueue(hdev->req_workqueue); in hci_dev_open()
1675 if (!hci_dev_test_flag(hdev, HCI_USER_CHANNEL) && in hci_dev_open()
1676 !hci_dev_test_flag(hdev, HCI_MGMT)) in hci_dev_open()
1677 hci_dev_set_flag(hdev, HCI_BONDABLE); in hci_dev_open()
1679 err = hci_dev_do_open(hdev); in hci_dev_open()
1682 hci_dev_put(hdev); in hci_dev_open()
1687 static void hci_pend_le_actions_clear(struct hci_dev *hdev) in hci_pend_le_actions_clear() argument
1691 list_for_each_entry(p, &hdev->le_conn_params, list) { in hci_pend_le_actions_clear()
1703 int hci_dev_do_close(struct hci_dev *hdev) in hci_dev_do_close() argument
1707 BT_DBG("%s %p", hdev->name, hdev); in hci_dev_do_close()
1709 if (!hci_dev_test_flag(hdev, HCI_UNREGISTER) && in hci_dev_do_close()
1710 !hci_dev_test_flag(hdev, HCI_USER_CHANNEL) && in hci_dev_do_close()
1711 test_bit(HCI_UP, &hdev->flags)) { in hci_dev_do_close()
1713 if (hdev->shutdown) in hci_dev_do_close()
1714 hdev->shutdown(hdev); in hci_dev_do_close()
1717 cancel_delayed_work(&hdev->power_off); in hci_dev_do_close()
1719 hci_request_cancel_all(hdev); in hci_dev_do_close()
1720 hci_req_sync_lock(hdev); in hci_dev_do_close()
1722 if (!test_and_clear_bit(HCI_UP, &hdev->flags)) { in hci_dev_do_close()
1723 cancel_delayed_work_sync(&hdev->cmd_timer); in hci_dev_do_close()
1724 hci_req_sync_unlock(hdev); in hci_dev_do_close()
1728 hci_leds_update_powered(hdev, false); in hci_dev_do_close()
1731 flush_work(&hdev->tx_work); in hci_dev_do_close()
1732 flush_work(&hdev->rx_work); in hci_dev_do_close()
1734 if (hdev->discov_timeout > 0) { in hci_dev_do_close()
1735 hdev->discov_timeout = 0; in hci_dev_do_close()
1736 hci_dev_clear_flag(hdev, HCI_DISCOVERABLE); in hci_dev_do_close()
1737 hci_dev_clear_flag(hdev, HCI_LIMITED_DISCOVERABLE); in hci_dev_do_close()
1740 if (hci_dev_test_and_clear_flag(hdev, HCI_SERVICE_CACHE)) in hci_dev_do_close()
1741 cancel_delayed_work(&hdev->service_cache); in hci_dev_do_close()
1743 if (hci_dev_test_flag(hdev, HCI_MGMT)) { in hci_dev_do_close()
1746 cancel_delayed_work_sync(&hdev->rpa_expired); in hci_dev_do_close()
1748 list_for_each_entry(adv_instance, &hdev->adv_instances, list) in hci_dev_do_close()
1755 drain_workqueue(hdev->workqueue); in hci_dev_do_close()
1757 hci_dev_lock(hdev); in hci_dev_do_close()
1759 hci_discovery_set_state(hdev, DISCOVERY_STOPPED); in hci_dev_do_close()
1761 auto_off = hci_dev_test_and_clear_flag(hdev, HCI_AUTO_OFF); in hci_dev_do_close()
1763 if (!auto_off && hdev->dev_type == HCI_PRIMARY && in hci_dev_do_close()
1764 !hci_dev_test_flag(hdev, HCI_USER_CHANNEL) && in hci_dev_do_close()
1765 hci_dev_test_flag(hdev, HCI_MGMT)) in hci_dev_do_close()
1766 __mgmt_power_off(hdev); in hci_dev_do_close()
1768 hci_inquiry_cache_flush(hdev); in hci_dev_do_close()
1769 hci_pend_le_actions_clear(hdev); in hci_dev_do_close()
1770 hci_conn_hash_flush(hdev); in hci_dev_do_close()
1771 hci_dev_unlock(hdev); in hci_dev_do_close()
1773 smp_unregister(hdev); in hci_dev_do_close()
1775 hci_sock_dev_event(hdev, HCI_DEV_DOWN); in hci_dev_do_close()
1777 msft_do_close(hdev); in hci_dev_do_close()
1779 if (hdev->flush) in hci_dev_do_close()
1780 hdev->flush(hdev); in hci_dev_do_close()
1783 skb_queue_purge(&hdev->cmd_q); in hci_dev_do_close()
1784 atomic_set(&hdev->cmd_cnt, 1); in hci_dev_do_close()
1785 if (test_bit(HCI_QUIRK_RESET_ON_CLOSE, &hdev->quirks) && in hci_dev_do_close()
1786 !auto_off && !hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) { in hci_dev_do_close()
1787 set_bit(HCI_INIT, &hdev->flags); in hci_dev_do_close()
1788 __hci_req_sync(hdev, hci_reset_req, 0, HCI_CMD_TIMEOUT, NULL); in hci_dev_do_close()
1789 clear_bit(HCI_INIT, &hdev->flags); in hci_dev_do_close()
1793 flush_work(&hdev->cmd_work); in hci_dev_do_close()
1796 skb_queue_purge(&hdev->rx_q); in hci_dev_do_close()
1797 skb_queue_purge(&hdev->cmd_q); in hci_dev_do_close()
1798 skb_queue_purge(&hdev->raw_q); in hci_dev_do_close()
1801 if (hdev->sent_cmd) { in hci_dev_do_close()
1802 cancel_delayed_work_sync(&hdev->cmd_timer); in hci_dev_do_close()
1803 kfree_skb(hdev->sent_cmd); in hci_dev_do_close()
1804 hdev->sent_cmd = NULL; in hci_dev_do_close()
1807 clear_bit(HCI_RUNNING, &hdev->flags); in hci_dev_do_close()
1808 hci_sock_dev_event(hdev, HCI_DEV_CLOSE); in hci_dev_do_close()
1810 if (test_and_clear_bit(SUSPEND_POWERING_DOWN, hdev->suspend_tasks)) in hci_dev_do_close()
1811 wake_up(&hdev->suspend_wait_q); in hci_dev_do_close()
1815 hdev->close(hdev); in hci_dev_do_close()
1818 hdev->flags &= BIT(HCI_RAW); in hci_dev_do_close()
1819 hci_dev_clear_volatile_flags(hdev); in hci_dev_do_close()
1822 hdev->amp_status = AMP_STATUS_POWERED_DOWN; in hci_dev_do_close()
1824 memset(hdev->eir, 0, sizeof(hdev->eir)); in hci_dev_do_close()
1825 memset(hdev->dev_class, 0, sizeof(hdev->dev_class)); in hci_dev_do_close()
1826 bacpy(&hdev->random_addr, BDADDR_ANY); in hci_dev_do_close()
1828 hci_req_sync_unlock(hdev); in hci_dev_do_close()
1830 hci_dev_put(hdev); in hci_dev_do_close()
1836 struct hci_dev *hdev; in hci_dev_close() local
1839 hdev = hci_dev_get(dev); in hci_dev_close()
1840 if (!hdev) in hci_dev_close()
1843 if (hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) { in hci_dev_close()
1848 if (hci_dev_test_and_clear_flag(hdev, HCI_AUTO_OFF)) in hci_dev_close()
1849 cancel_delayed_work(&hdev->power_off); in hci_dev_close()
1851 err = hci_dev_do_close(hdev); in hci_dev_close()
1854 hci_dev_put(hdev); in hci_dev_close()
1858 static int hci_dev_do_reset(struct hci_dev *hdev) in hci_dev_do_reset() argument
1862 BT_DBG("%s %p", hdev->name, hdev); in hci_dev_do_reset()
1864 hci_req_sync_lock(hdev); in hci_dev_do_reset()
1867 skb_queue_purge(&hdev->rx_q); in hci_dev_do_reset()
1868 skb_queue_purge(&hdev->cmd_q); in hci_dev_do_reset()
1873 drain_workqueue(hdev->workqueue); in hci_dev_do_reset()
1875 hci_dev_lock(hdev); in hci_dev_do_reset()
1876 hci_inquiry_cache_flush(hdev); in hci_dev_do_reset()
1877 hci_conn_hash_flush(hdev); in hci_dev_do_reset()
1878 hci_dev_unlock(hdev); in hci_dev_do_reset()
1880 if (hdev->flush) in hci_dev_do_reset()
1881 hdev->flush(hdev); in hci_dev_do_reset()
1883 atomic_set(&hdev->cmd_cnt, 1); in hci_dev_do_reset()
1884 hdev->acl_cnt = 0; hdev->sco_cnt = 0; hdev->le_cnt = 0; in hci_dev_do_reset()
1886 ret = __hci_req_sync(hdev, hci_reset_req, 0, HCI_INIT_TIMEOUT, NULL); in hci_dev_do_reset()
1888 hci_req_sync_unlock(hdev); in hci_dev_do_reset()
1894 struct hci_dev *hdev; in hci_dev_reset() local
1897 hdev = hci_dev_get(dev); in hci_dev_reset()
1898 if (!hdev) in hci_dev_reset()
1901 if (!test_bit(HCI_UP, &hdev->flags)) { in hci_dev_reset()
1906 if (hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) { in hci_dev_reset()
1911 if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) { in hci_dev_reset()
1916 err = hci_dev_do_reset(hdev); in hci_dev_reset()
1919 hci_dev_put(hdev); in hci_dev_reset()
1925 struct hci_dev *hdev; in hci_dev_reset_stat() local
1928 hdev = hci_dev_get(dev); in hci_dev_reset_stat()
1929 if (!hdev) in hci_dev_reset_stat()
1932 if (hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) { in hci_dev_reset_stat()
1937 if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) { in hci_dev_reset_stat()
1942 memset(&hdev->stat, 0, sizeof(struct hci_dev_stats)); in hci_dev_reset_stat()
1945 hci_dev_put(hdev); in hci_dev_reset_stat()
1949 static void hci_update_scan_state(struct hci_dev *hdev, u8 scan) in hci_update_scan_state() argument
1953 BT_DBG("%s scan 0x%02x", hdev->name, scan); in hci_update_scan_state()
1956 conn_changed = !hci_dev_test_and_set_flag(hdev, in hci_update_scan_state()
1959 conn_changed = hci_dev_test_and_clear_flag(hdev, in hci_update_scan_state()
1963 discov_changed = !hci_dev_test_and_set_flag(hdev, in hci_update_scan_state()
1966 hci_dev_clear_flag(hdev, HCI_LIMITED_DISCOVERABLE); in hci_update_scan_state()
1967 discov_changed = hci_dev_test_and_clear_flag(hdev, in hci_update_scan_state()
1971 if (!hci_dev_test_flag(hdev, HCI_MGMT)) in hci_update_scan_state()
1976 hci_dev_set_flag(hdev, HCI_BREDR_ENABLED); in hci_update_scan_state()
1978 if (hci_dev_test_flag(hdev, HCI_LE_ENABLED)) in hci_update_scan_state()
1979 hci_req_update_adv_data(hdev, hdev->cur_adv_instance); in hci_update_scan_state()
1981 mgmt_new_settings(hdev); in hci_update_scan_state()
1987 struct hci_dev *hdev; in hci_dev_cmd() local
1994 hdev = hci_dev_get(dr.dev_id); in hci_dev_cmd()
1995 if (!hdev) in hci_dev_cmd()
1998 if (hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) { in hci_dev_cmd()
2003 if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) { in hci_dev_cmd()
2008 if (hdev->dev_type != HCI_PRIMARY) { in hci_dev_cmd()
2013 if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) { in hci_dev_cmd()
2020 err = hci_req_sync(hdev, hci_auth_req, dr.dev_opt, in hci_dev_cmd()
2025 if (!lmp_encrypt_capable(hdev)) { in hci_dev_cmd()
2030 if (!test_bit(HCI_AUTH, &hdev->flags)) { in hci_dev_cmd()
2032 err = hci_req_sync(hdev, hci_auth_req, dr.dev_opt, in hci_dev_cmd()
2038 err = hci_req_sync(hdev, hci_encrypt_req, dr.dev_opt, in hci_dev_cmd()
2043 err = hci_req_sync(hdev, hci_scan_req, dr.dev_opt, in hci_dev_cmd()
2050 hci_update_scan_state(hdev, dr.dev_opt); in hci_dev_cmd()
2054 err = hci_req_sync(hdev, hci_linkpol_req, dr.dev_opt, in hci_dev_cmd()
2059 hdev->link_mode = ((__u16) dr.dev_opt) & in hci_dev_cmd()
2064 if (hdev->pkt_type == (__u16) dr.dev_opt) in hci_dev_cmd()
2067 hdev->pkt_type = (__u16) dr.dev_opt; in hci_dev_cmd()
2068 mgmt_phy_configuration_changed(hdev, NULL); in hci_dev_cmd()
2072 hdev->acl_mtu = *((__u16 *) &dr.dev_opt + 1); in hci_dev_cmd()
2073 hdev->acl_pkts = *((__u16 *) &dr.dev_opt + 0); in hci_dev_cmd()
2077 hdev->sco_mtu = *((__u16 *) &dr.dev_opt + 1); in hci_dev_cmd()
2078 hdev->sco_pkts = *((__u16 *) &dr.dev_opt + 0); in hci_dev_cmd()
2087 hci_dev_put(hdev); in hci_dev_cmd()
2093 struct hci_dev *hdev; in hci_get_dev_list() local
2114 list_for_each_entry(hdev, &hci_dev_list, list) { in hci_get_dev_list()
2115 unsigned long flags = hdev->flags; in hci_get_dev_list()
2121 if (hci_dev_test_flag(hdev, HCI_AUTO_OFF)) in hci_get_dev_list()
2124 (dr + n)->dev_id = hdev->id; in hci_get_dev_list()
2143 struct hci_dev *hdev; in hci_get_dev_info() local
2151 hdev = hci_dev_get(di.dev_id); in hci_get_dev_info()
2152 if (!hdev) in hci_get_dev_info()
2159 if (hci_dev_test_flag(hdev, HCI_AUTO_OFF)) in hci_get_dev_info()
2160 flags = hdev->flags & ~BIT(HCI_UP); in hci_get_dev_info()
2162 flags = hdev->flags; in hci_get_dev_info()
2164 strcpy(di.name, hdev->name); in hci_get_dev_info()
2165 di.bdaddr = hdev->bdaddr; in hci_get_dev_info()
2166 di.type = (hdev->bus & 0x0f) | ((hdev->dev_type & 0x03) << 4); in hci_get_dev_info()
2168 di.pkt_type = hdev->pkt_type; in hci_get_dev_info()
2169 if (lmp_bredr_capable(hdev)) { in hci_get_dev_info()
2170 di.acl_mtu = hdev->acl_mtu; in hci_get_dev_info()
2171 di.acl_pkts = hdev->acl_pkts; in hci_get_dev_info()
2172 di.sco_mtu = hdev->sco_mtu; in hci_get_dev_info()
2173 di.sco_pkts = hdev->sco_pkts; in hci_get_dev_info()
2175 di.acl_mtu = hdev->le_mtu; in hci_get_dev_info()
2176 di.acl_pkts = hdev->le_pkts; in hci_get_dev_info()
2180 di.link_policy = hdev->link_policy; in hci_get_dev_info()
2181 di.link_mode = hdev->link_mode; in hci_get_dev_info()
2183 memcpy(&di.stat, &hdev->stat, sizeof(di.stat)); in hci_get_dev_info()
2184 memcpy(&di.features, &hdev->features, sizeof(di.features)); in hci_get_dev_info()
2189 hci_dev_put(hdev); in hci_get_dev_info()
2198 struct hci_dev *hdev = data; in hci_rfkill_set_block() local
2200 BT_DBG("%p name %s blocked %d", hdev, hdev->name, blocked); in hci_rfkill_set_block()
2202 if (hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) in hci_rfkill_set_block()
2206 hci_dev_set_flag(hdev, HCI_RFKILLED); in hci_rfkill_set_block()
2207 if (!hci_dev_test_flag(hdev, HCI_SETUP) && in hci_rfkill_set_block()
2208 !hci_dev_test_flag(hdev, HCI_CONFIG)) in hci_rfkill_set_block()
2209 hci_dev_do_close(hdev); in hci_rfkill_set_block()
2211 hci_dev_clear_flag(hdev, HCI_RFKILLED); in hci_rfkill_set_block()
2223 struct hci_dev *hdev = container_of(work, struct hci_dev, power_on); in hci_power_on() local
2226 BT_DBG("%s", hdev->name); in hci_power_on()
2228 if (test_bit(HCI_UP, &hdev->flags) && in hci_power_on()
2229 hci_dev_test_flag(hdev, HCI_MGMT) && in hci_power_on()
2230 hci_dev_test_and_clear_flag(hdev, HCI_AUTO_OFF)) { in hci_power_on()
2231 cancel_delayed_work(&hdev->power_off); in hci_power_on()
2232 hci_req_sync_lock(hdev); in hci_power_on()
2233 err = __hci_req_hci_power_on(hdev); in hci_power_on()
2234 hci_req_sync_unlock(hdev); in hci_power_on()
2235 mgmt_power_on(hdev, err); in hci_power_on()
2239 err = hci_dev_do_open(hdev); in hci_power_on()
2241 hci_dev_lock(hdev); in hci_power_on()
2242 mgmt_set_powered_failed(hdev, err); in hci_power_on()
2243 hci_dev_unlock(hdev); in hci_power_on()
2251 if (hci_dev_test_flag(hdev, HCI_RFKILLED) || in hci_power_on()
2252 hci_dev_test_flag(hdev, HCI_UNCONFIGURED) || in hci_power_on()
2253 (hdev->dev_type == HCI_PRIMARY && in hci_power_on()
2254 !bacmp(&hdev->bdaddr, BDADDR_ANY) && in hci_power_on()
2255 !bacmp(&hdev->static_addr, BDADDR_ANY))) { in hci_power_on()
2256 hci_dev_clear_flag(hdev, HCI_AUTO_OFF); in hci_power_on()
2257 hci_dev_do_close(hdev); in hci_power_on()
2258 } else if (hci_dev_test_flag(hdev, HCI_AUTO_OFF)) { in hci_power_on()
2259 queue_delayed_work(hdev->req_workqueue, &hdev->power_off, in hci_power_on()
2263 if (hci_dev_test_and_clear_flag(hdev, HCI_SETUP)) { in hci_power_on()
2267 if (hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) in hci_power_on()
2268 set_bit(HCI_RAW, &hdev->flags); in hci_power_on()
2277 mgmt_index_added(hdev); in hci_power_on()
2278 } else if (hci_dev_test_and_clear_flag(hdev, HCI_CONFIG)) { in hci_power_on()
2282 if (!hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) in hci_power_on()
2283 clear_bit(HCI_RAW, &hdev->flags); in hci_power_on()
2289 mgmt_index_added(hdev); in hci_power_on()
2295 struct hci_dev *hdev = container_of(work, struct hci_dev, in hci_power_off() local
2298 BT_DBG("%s", hdev->name); in hci_power_off()
2300 hci_dev_do_close(hdev); in hci_power_off()
2305 struct hci_dev *hdev = container_of(work, struct hci_dev, error_reset); in hci_error_reset() local
2307 BT_DBG("%s", hdev->name); in hci_error_reset()
2309 if (hdev->hw_error) in hci_error_reset()
2310 hdev->hw_error(hdev, hdev->hw_error_code); in hci_error_reset()
2312 bt_dev_err(hdev, "hardware error 0x%2.2x", hdev->hw_error_code); in hci_error_reset()
2314 if (hci_dev_do_close(hdev)) in hci_error_reset()
2317 hci_dev_do_open(hdev); in hci_error_reset()
2320 void hci_uuids_clear(struct hci_dev *hdev) in hci_uuids_clear() argument
2324 list_for_each_entry_safe(uuid, tmp, &hdev->uuids, list) { in hci_uuids_clear()
2330 void hci_link_keys_clear(struct hci_dev *hdev) in hci_link_keys_clear() argument
2334 list_for_each_entry(key, &hdev->link_keys, list) { in hci_link_keys_clear()
2340 void hci_smp_ltks_clear(struct hci_dev *hdev) in hci_smp_ltks_clear() argument
2344 list_for_each_entry(k, &hdev->long_term_keys, list) { in hci_smp_ltks_clear()
2350 void hci_smp_irks_clear(struct hci_dev *hdev) in hci_smp_irks_clear() argument
2354 list_for_each_entry(k, &hdev->identity_resolving_keys, list) { in hci_smp_irks_clear()
2360 void hci_blocked_keys_clear(struct hci_dev *hdev) in hci_blocked_keys_clear() argument
2364 list_for_each_entry(b, &hdev->blocked_keys, list) { in hci_blocked_keys_clear()
2370 bool hci_is_blocked_key(struct hci_dev *hdev, u8 type, u8 val[16]) in hci_is_blocked_key() argument
2376 list_for_each_entry_rcu(b, &hdev->blocked_keys, list) { in hci_is_blocked_key()
2387 struct link_key *hci_find_link_key(struct hci_dev *hdev, bdaddr_t *bdaddr) in hci_find_link_key() argument
2392 list_for_each_entry_rcu(k, &hdev->link_keys, list) { in hci_find_link_key()
2396 if (hci_is_blocked_key(hdev, in hci_find_link_key()
2399 bt_dev_warn_ratelimited(hdev, in hci_find_link_key()
2413 static bool hci_persistent_key(struct hci_dev *hdev, struct hci_conn *conn, in hci_persistent_key() argument
2461 struct smp_ltk *hci_find_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr, in hci_find_ltk() argument
2467 list_for_each_entry_rcu(k, &hdev->long_term_keys, list) { in hci_find_ltk()
2474 if (hci_is_blocked_key(hdev, HCI_BLOCKED_KEY_TYPE_LTK, in hci_find_ltk()
2476 bt_dev_warn_ratelimited(hdev, in hci_find_ltk()
2490 struct smp_irk *hci_find_irk_by_rpa(struct hci_dev *hdev, bdaddr_t *rpa) in hci_find_irk_by_rpa() argument
2496 list_for_each_entry_rcu(irk, &hdev->identity_resolving_keys, list) { in hci_find_irk_by_rpa()
2503 list_for_each_entry_rcu(irk, &hdev->identity_resolving_keys, list) { in hci_find_irk_by_rpa()
2504 if (smp_irk_matches(hdev, irk->val, rpa)) { in hci_find_irk_by_rpa()
2512 if (irk_to_return && hci_is_blocked_key(hdev, HCI_BLOCKED_KEY_TYPE_IRK, in hci_find_irk_by_rpa()
2514 bt_dev_warn_ratelimited(hdev, "Identity key blocked for %pMR", in hci_find_irk_by_rpa()
2524 struct smp_irk *hci_find_irk_by_addr(struct hci_dev *hdev, bdaddr_t *bdaddr, in hci_find_irk_by_addr() argument
2535 list_for_each_entry_rcu(irk, &hdev->identity_resolving_keys, list) { in hci_find_irk_by_addr()
2545 if (irk_to_return && hci_is_blocked_key(hdev, HCI_BLOCKED_KEY_TYPE_IRK, in hci_find_irk_by_addr()
2547 bt_dev_warn_ratelimited(hdev, "Identity key blocked for %pMR", in hci_find_irk_by_addr()
2557 struct link_key *hci_add_link_key(struct hci_dev *hdev, struct hci_conn *conn, in hci_add_link_key() argument
2564 old_key = hci_find_link_key(hdev, bdaddr); in hci_add_link_key()
2573 list_add_rcu(&key->list, &hdev->link_keys); in hci_add_link_key()
2576 BT_DBG("%s key for %pMR type %u", hdev->name, bdaddr, type); in hci_add_link_key()
2598 *persistent = hci_persistent_key(hdev, conn, type, in hci_add_link_key()
2604 struct smp_ltk *hci_add_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr, in hci_add_ltk() argument
2611 old_key = hci_find_ltk(hdev, bdaddr, addr_type, role); in hci_add_ltk()
2618 list_add_rcu(&key->list, &hdev->long_term_keys); in hci_add_ltk()
2633 struct smp_irk *hci_add_irk(struct hci_dev *hdev, bdaddr_t *bdaddr, in hci_add_irk() argument
2638 irk = hci_find_irk_by_addr(hdev, bdaddr, addr_type); in hci_add_irk()
2647 list_add_rcu(&irk->list, &hdev->identity_resolving_keys); in hci_add_irk()
2656 int hci_remove_link_key(struct hci_dev *hdev, bdaddr_t *bdaddr) in hci_remove_link_key() argument
2660 key = hci_find_link_key(hdev, bdaddr); in hci_remove_link_key()
2664 BT_DBG("%s removing %pMR", hdev->name, bdaddr); in hci_remove_link_key()
2672 int hci_remove_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 bdaddr_type) in hci_remove_ltk() argument
2677 list_for_each_entry_rcu(k, &hdev->long_term_keys, list) { in hci_remove_ltk()
2681 BT_DBG("%s removing %pMR", hdev->name, bdaddr); in hci_remove_ltk()
2691 void hci_remove_irk(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 addr_type) in hci_remove_irk() argument
2695 list_for_each_entry_rcu(k, &hdev->identity_resolving_keys, list) { in hci_remove_irk()
2699 BT_DBG("%s removing %pMR", hdev->name, bdaddr); in hci_remove_irk()
2706 bool hci_bdaddr_is_paired(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type) in hci_bdaddr_is_paired() argument
2713 if (hci_find_link_key(hdev, bdaddr)) in hci_bdaddr_is_paired()
2724 irk = hci_get_irk(hdev, bdaddr, addr_type); in hci_bdaddr_is_paired()
2731 list_for_each_entry_rcu(k, &hdev->long_term_keys, list) { in hci_bdaddr_is_paired()
2745 struct hci_dev *hdev = container_of(work, struct hci_dev, in hci_cmd_timeout() local
2748 if (hdev->sent_cmd) { in hci_cmd_timeout()
2749 struct hci_command_hdr *sent = (void *) hdev->sent_cmd->data; in hci_cmd_timeout()
2752 bt_dev_err(hdev, "command 0x%4.4x tx timeout", opcode); in hci_cmd_timeout()
2754 bt_dev_err(hdev, "command tx timeout"); in hci_cmd_timeout()
2757 if (hdev->cmd_timeout) in hci_cmd_timeout()
2758 hdev->cmd_timeout(hdev); in hci_cmd_timeout()
2760 atomic_set(&hdev->cmd_cnt, 1); in hci_cmd_timeout()
2761 queue_work(hdev->workqueue, &hdev->cmd_work); in hci_cmd_timeout()
2764 struct oob_data *hci_find_remote_oob_data(struct hci_dev *hdev, in hci_find_remote_oob_data() argument
2769 list_for_each_entry(data, &hdev->remote_oob_data, list) { in hci_find_remote_oob_data()
2780 int hci_remove_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr, in hci_remove_remote_oob_data() argument
2785 data = hci_find_remote_oob_data(hdev, bdaddr, bdaddr_type); in hci_remove_remote_oob_data()
2789 BT_DBG("%s removing %pMR (%u)", hdev->name, bdaddr, bdaddr_type); in hci_remove_remote_oob_data()
2797 void hci_remote_oob_data_clear(struct hci_dev *hdev) in hci_remote_oob_data_clear() argument
2801 list_for_each_entry_safe(data, n, &hdev->remote_oob_data, list) { in hci_remote_oob_data_clear()
2807 int hci_add_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr, in hci_add_remote_oob_data() argument
2813 data = hci_find_remote_oob_data(hdev, bdaddr, bdaddr_type); in hci_add_remote_oob_data()
2821 list_add(&data->list, &hdev->remote_oob_data); in hci_add_remote_oob_data()
2848 BT_DBG("%s for %pMR", hdev->name, bdaddr); in hci_add_remote_oob_data()
2854 struct adv_info *hci_find_adv_instance(struct hci_dev *hdev, u8 instance) in hci_find_adv_instance() argument
2858 list_for_each_entry(adv_instance, &hdev->adv_instances, list) { in hci_find_adv_instance()
2867 struct adv_info *hci_get_next_instance(struct hci_dev *hdev, u8 instance) in hci_get_next_instance() argument
2871 cur_instance = hci_find_adv_instance(hdev, instance); in hci_get_next_instance()
2875 if (cur_instance == list_last_entry(&hdev->adv_instances, in hci_get_next_instance()
2877 return list_first_entry(&hdev->adv_instances, in hci_get_next_instance()
2884 int hci_remove_adv_instance(struct hci_dev *hdev, u8 instance) in hci_remove_adv_instance() argument
2888 adv_instance = hci_find_adv_instance(hdev, instance); in hci_remove_adv_instance()
2892 BT_DBG("%s removing %dMR", hdev->name, instance); in hci_remove_adv_instance()
2894 if (hdev->cur_adv_instance == instance) { in hci_remove_adv_instance()
2895 if (hdev->adv_instance_timeout) { in hci_remove_adv_instance()
2896 cancel_delayed_work(&hdev->adv_instance_expire); in hci_remove_adv_instance()
2897 hdev->adv_instance_timeout = 0; in hci_remove_adv_instance()
2899 hdev->cur_adv_instance = 0x00; in hci_remove_adv_instance()
2907 hdev->adv_instance_cnt--; in hci_remove_adv_instance()
2912 void hci_adv_instances_set_rpa_expired(struct hci_dev *hdev, bool rpa_expired) in hci_adv_instances_set_rpa_expired() argument
2916 list_for_each_entry_safe(adv_instance, n, &hdev->adv_instances, list) in hci_adv_instances_set_rpa_expired()
2921 void hci_adv_instances_clear(struct hci_dev *hdev) in hci_adv_instances_clear() argument
2925 if (hdev->adv_instance_timeout) { in hci_adv_instances_clear()
2926 cancel_delayed_work(&hdev->adv_instance_expire); in hci_adv_instances_clear()
2927 hdev->adv_instance_timeout = 0; in hci_adv_instances_clear()
2930 list_for_each_entry_safe(adv_instance, n, &hdev->adv_instances, list) { in hci_adv_instances_clear()
2936 hdev->adv_instance_cnt = 0; in hci_adv_instances_clear()
2937 hdev->cur_adv_instance = 0x00; in hci_adv_instances_clear()
2951 int hci_add_adv_instance(struct hci_dev *hdev, u8 instance, u32 flags, in hci_add_adv_instance() argument
2958 adv_instance = hci_find_adv_instance(hdev, instance); in hci_add_adv_instance()
2965 if (hdev->adv_instance_cnt >= hdev->le_num_of_adv_sets || in hci_add_adv_instance()
2966 instance < 1 || instance > hdev->le_num_of_adv_sets) in hci_add_adv_instance()
2975 list_add(&adv_instance->list, &hdev->adv_instances); in hci_add_adv_instance()
2976 hdev->adv_instance_cnt++; in hci_add_adv_instance()
2994 adv_instance->duration = hdev->def_multi_adv_rotation_duration; in hci_add_adv_instance()
3003 BT_DBG("%s for %dMR", hdev->name, instance); in hci_add_adv_instance()
3009 void hci_adv_monitors_clear(struct hci_dev *hdev) in hci_adv_monitors_clear() argument
3014 idr_for_each_entry(&hdev->adv_monitors_idr, monitor, handle) in hci_adv_monitors_clear()
3017 idr_destroy(&hdev->adv_monitors_idr); in hci_adv_monitors_clear()
3035 int hci_add_adv_monitor(struct hci_dev *hdev, struct adv_monitor *monitor) in hci_add_adv_monitor() argument
3044 handle = idr_alloc(&hdev->adv_monitors_idr, monitor, min, max, in hci_add_adv_monitor()
3049 hdev->adv_monitors_cnt++; in hci_add_adv_monitor()
3052 hci_update_background_scan(hdev); in hci_add_adv_monitor()
3059 struct hci_dev *hdev = data; in free_adv_monitor() local
3062 idr_remove(&hdev->adv_monitors_idr, monitor->handle); in free_adv_monitor()
3064 hdev->adv_monitors_cnt--; in free_adv_monitor()
3070 int hci_remove_adv_monitor(struct hci_dev *hdev, u16 handle) in hci_remove_adv_monitor() argument
3075 monitor = idr_find(&hdev->adv_monitors_idr, handle); in hci_remove_adv_monitor()
3079 idr_remove(&hdev->adv_monitors_idr, monitor->handle); in hci_remove_adv_monitor()
3081 hdev->adv_monitors_cnt--; in hci_remove_adv_monitor()
3084 idr_for_each(&hdev->adv_monitors_idr, &free_adv_monitor, hdev); in hci_remove_adv_monitor()
3087 hci_update_background_scan(hdev); in hci_remove_adv_monitor()
3093 bool hci_is_adv_monitoring(struct hci_dev *hdev) in hci_is_adv_monitoring() argument
3095 return !idr_is_empty(&hdev->adv_monitors_idr); in hci_is_adv_monitoring()
3284 struct hci_conn_params *hci_conn_params_lookup(struct hci_dev *hdev, in hci_conn_params_lookup() argument
3289 list_for_each_entry(params, &hdev->le_conn_params, list) { in hci_conn_params_lookup()
3324 struct hci_conn_params *hci_conn_params_add(struct hci_dev *hdev, in hci_conn_params_add() argument
3329 params = hci_conn_params_lookup(hdev, addr, addr_type); in hci_conn_params_add()
3335 bt_dev_err(hdev, "out of memory"); in hci_conn_params_add()
3342 list_add(¶ms->list, &hdev->le_conn_params); in hci_conn_params_add()
3345 params->conn_min_interval = hdev->le_conn_min_interval; in hci_conn_params_add()
3346 params->conn_max_interval = hdev->le_conn_max_interval; in hci_conn_params_add()
3347 params->conn_latency = hdev->le_conn_latency; in hci_conn_params_add()
3348 params->supervision_timeout = hdev->le_supv_timeout; in hci_conn_params_add()
3369 void hci_conn_params_del(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type) in hci_conn_params_del() argument
3373 params = hci_conn_params_lookup(hdev, addr, addr_type); in hci_conn_params_del()
3379 hci_update_background_scan(hdev); in hci_conn_params_del()
3385 void hci_conn_params_clear_disabled(struct hci_dev *hdev) in hci_conn_params_clear_disabled() argument
3389 list_for_each_entry_safe(params, tmp, &hdev->le_conn_params, list) { in hci_conn_params_clear_disabled()
3409 static void hci_conn_params_clear_all(struct hci_dev *hdev) in hci_conn_params_clear_all() argument
3413 list_for_each_entry_safe(params, tmp, &hdev->le_conn_params, list) in hci_conn_params_clear_all()
3432 void hci_copy_identity_address(struct hci_dev *hdev, bdaddr_t *bdaddr, in hci_copy_identity_address() argument
3435 if (hci_dev_test_flag(hdev, HCI_FORCE_STATIC_ADDR) || in hci_copy_identity_address()
3436 !bacmp(&hdev->bdaddr, BDADDR_ANY) || in hci_copy_identity_address()
3437 (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED) && in hci_copy_identity_address()
3438 bacmp(&hdev->static_addr, BDADDR_ANY))) { in hci_copy_identity_address()
3439 bacpy(bdaddr, &hdev->static_addr); in hci_copy_identity_address()
3442 bacpy(bdaddr, &hdev->bdaddr); in hci_copy_identity_address()
3447 static void hci_suspend_clear_tasks(struct hci_dev *hdev) in hci_suspend_clear_tasks() argument
3452 clear_bit(i, hdev->suspend_tasks); in hci_suspend_clear_tasks()
3454 wake_up(&hdev->suspend_wait_q); in hci_suspend_clear_tasks()
3457 static int hci_suspend_wait_event(struct hci_dev *hdev) in hci_suspend_wait_event() argument
3460 (find_first_bit(hdev->suspend_tasks, __SUSPEND_NUM_TASKS) == \ in hci_suspend_wait_event()
3464 int ret = wait_event_timeout(hdev->suspend_wait_q, in hci_suspend_wait_event()
3468 bt_dev_err(hdev, "Timed out waiting for suspend events"); in hci_suspend_wait_event()
3470 if (test_bit(i, hdev->suspend_tasks)) in hci_suspend_wait_event()
3471 bt_dev_err(hdev, "Suspend timeout bit: %d", i); in hci_suspend_wait_event()
3472 clear_bit(i, hdev->suspend_tasks); in hci_suspend_wait_event()
3485 struct hci_dev *hdev = in hci_prepare_suspend() local
3488 hci_dev_lock(hdev); in hci_prepare_suspend()
3489 hci_req_prepare_suspend(hdev, hdev->suspend_state_next); in hci_prepare_suspend()
3490 hci_dev_unlock(hdev); in hci_prepare_suspend()
3493 static int hci_change_suspend_state(struct hci_dev *hdev, in hci_change_suspend_state() argument
3496 hdev->suspend_state_next = next; in hci_change_suspend_state()
3497 set_bit(SUSPEND_PREPARE_NOTIFIER, hdev->suspend_tasks); in hci_change_suspend_state()
3498 queue_work(hdev->req_workqueue, &hdev->suspend_prepare); in hci_change_suspend_state()
3499 return hci_suspend_wait_event(hdev); in hci_change_suspend_state()
3502 static void hci_clear_wake_reason(struct hci_dev *hdev) in hci_clear_wake_reason() argument
3504 hci_dev_lock(hdev); in hci_clear_wake_reason()
3506 hdev->wake_reason = 0; in hci_clear_wake_reason()
3507 bacpy(&hdev->wake_addr, BDADDR_ANY); in hci_clear_wake_reason()
3508 hdev->wake_addr_type = 0; in hci_clear_wake_reason()
3510 hci_dev_unlock(hdev); in hci_clear_wake_reason()
3516 struct hci_dev *hdev = in hci_suspend_notifier() local
3522 if (mgmt_powering_down(hdev)) { in hci_suspend_notifier()
3523 set_bit(SUSPEND_POWERING_DOWN, hdev->suspend_tasks); in hci_suspend_notifier()
3524 ret = hci_suspend_wait_event(hdev); in hci_suspend_notifier()
3530 if (!hdev_is_powered(hdev)) in hci_suspend_notifier()
3539 ret = hci_change_suspend_state(hdev, BT_SUSPEND_DISCONNECT); in hci_suspend_notifier()
3546 if (!ret && !(hdev->prevent_wake && hdev->prevent_wake(hdev))) { in hci_suspend_notifier()
3547 ret = hci_change_suspend_state(hdev, in hci_suspend_notifier()
3553 hci_clear_wake_reason(hdev); in hci_suspend_notifier()
3554 mgmt_suspending(hdev, state); in hci_suspend_notifier()
3557 ret = hci_change_suspend_state(hdev, BT_RUNNING); in hci_suspend_notifier()
3559 mgmt_resuming(hdev, hdev->wake_reason, &hdev->wake_addr, in hci_suspend_notifier()
3560 hdev->wake_addr_type); in hci_suspend_notifier()
3568 bt_dev_err(hdev, "Suspend notifier action (%lu) failed: %d", in hci_suspend_notifier()
3577 struct hci_dev *hdev; in hci_alloc_dev() local
3579 hdev = kzalloc(sizeof(*hdev), GFP_KERNEL); in hci_alloc_dev()
3580 if (!hdev) in hci_alloc_dev()
3583 hdev->pkt_type = (HCI_DM1 | HCI_DH1 | HCI_HV1); in hci_alloc_dev()
3584 hdev->esco_type = (ESCO_HV1); in hci_alloc_dev()
3585 hdev->link_mode = (HCI_LM_ACCEPT); in hci_alloc_dev()
3586 hdev->num_iac = 0x01; /* One IAC support is mandatory */ in hci_alloc_dev()
3587 hdev->io_capability = 0x03; /* No Input No Output */ in hci_alloc_dev()
3588 hdev->manufacturer = 0xffff; /* Default to internal use */ in hci_alloc_dev()
3589 hdev->inq_tx_power = HCI_TX_POWER_INVALID; in hci_alloc_dev()
3590 hdev->adv_tx_power = HCI_TX_POWER_INVALID; in hci_alloc_dev()
3591 hdev->adv_instance_cnt = 0; in hci_alloc_dev()
3592 hdev->cur_adv_instance = 0x00; in hci_alloc_dev()
3593 hdev->adv_instance_timeout = 0; in hci_alloc_dev()
3595 hdev->sniff_max_interval = 800; in hci_alloc_dev()
3596 hdev->sniff_min_interval = 80; in hci_alloc_dev()
3598 hdev->le_adv_channel_map = 0x07; in hci_alloc_dev()
3599 hdev->le_adv_min_interval = 0x0800; in hci_alloc_dev()
3600 hdev->le_adv_max_interval = 0x0800; in hci_alloc_dev()
3601 hdev->le_scan_interval = 0x0060; in hci_alloc_dev()
3602 hdev->le_scan_window = 0x0030; in hci_alloc_dev()
3603 hdev->le_scan_int_suspend = 0x0400; in hci_alloc_dev()
3604 hdev->le_scan_window_suspend = 0x0012; in hci_alloc_dev()
3605 hdev->le_scan_int_discovery = DISCOV_LE_SCAN_INT; in hci_alloc_dev()
3606 hdev->le_scan_window_discovery = DISCOV_LE_SCAN_WIN; in hci_alloc_dev()
3607 hdev->le_scan_int_connect = 0x0060; in hci_alloc_dev()
3608 hdev->le_scan_window_connect = 0x0060; in hci_alloc_dev()
3609 hdev->le_conn_min_interval = 0x0018; in hci_alloc_dev()
3610 hdev->le_conn_max_interval = 0x0028; in hci_alloc_dev()
3611 hdev->le_conn_latency = 0x0000; in hci_alloc_dev()
3612 hdev->le_supv_timeout = 0x002a; in hci_alloc_dev()
3613 hdev->le_def_tx_len = 0x001b; in hci_alloc_dev()
3614 hdev->le_def_tx_time = 0x0148; in hci_alloc_dev()
3615 hdev->le_max_tx_len = 0x001b; in hci_alloc_dev()
3616 hdev->le_max_tx_time = 0x0148; in hci_alloc_dev()
3617 hdev->le_max_rx_len = 0x001b; in hci_alloc_dev()
3618 hdev->le_max_rx_time = 0x0148; in hci_alloc_dev()
3619 hdev->le_max_key_size = SMP_MAX_ENC_KEY_SIZE; in hci_alloc_dev()
3620 hdev->le_min_key_size = SMP_MIN_ENC_KEY_SIZE; in hci_alloc_dev()
3621 hdev->le_tx_def_phys = HCI_LE_SET_PHY_1M; in hci_alloc_dev()
3622 hdev->le_rx_def_phys = HCI_LE_SET_PHY_1M; in hci_alloc_dev()
3623 hdev->le_num_of_adv_sets = HCI_MAX_ADV_INSTANCES; in hci_alloc_dev()
3624 hdev->def_multi_adv_rotation_duration = HCI_DEFAULT_ADV_DURATION; in hci_alloc_dev()
3625 hdev->def_le_autoconnect_timeout = HCI_LE_AUTOCONN_TIMEOUT; in hci_alloc_dev()
3627 hdev->rpa_timeout = HCI_DEFAULT_RPA_TIMEOUT; in hci_alloc_dev()
3628 hdev->discov_interleaved_timeout = DISCOV_INTERLEAVED_TIMEOUT; in hci_alloc_dev()
3629 hdev->conn_info_min_age = DEFAULT_CONN_INFO_MIN_AGE; in hci_alloc_dev()
3630 hdev->conn_info_max_age = DEFAULT_CONN_INFO_MAX_AGE; in hci_alloc_dev()
3631 hdev->auth_payload_timeout = DEFAULT_AUTH_PAYLOAD_TIMEOUT; in hci_alloc_dev()
3632 hdev->min_enc_key_size = HCI_MIN_ENC_KEY_SIZE; in hci_alloc_dev()
3635 hdev->def_page_scan_type = PAGE_SCAN_TYPE_STANDARD; in hci_alloc_dev()
3636 hdev->def_page_scan_int = 0x0800; in hci_alloc_dev()
3637 hdev->def_page_scan_window = 0x0012; in hci_alloc_dev()
3639 mutex_init(&hdev->lock); in hci_alloc_dev()
3640 mutex_init(&hdev->req_lock); in hci_alloc_dev()
3642 INIT_LIST_HEAD(&hdev->mgmt_pending); in hci_alloc_dev()
3643 INIT_LIST_HEAD(&hdev->blacklist); in hci_alloc_dev()
3644 INIT_LIST_HEAD(&hdev->whitelist); in hci_alloc_dev()
3645 INIT_LIST_HEAD(&hdev->uuids); in hci_alloc_dev()
3646 INIT_LIST_HEAD(&hdev->link_keys); in hci_alloc_dev()
3647 INIT_LIST_HEAD(&hdev->long_term_keys); in hci_alloc_dev()
3648 INIT_LIST_HEAD(&hdev->identity_resolving_keys); in hci_alloc_dev()
3649 INIT_LIST_HEAD(&hdev->remote_oob_data); in hci_alloc_dev()
3650 INIT_LIST_HEAD(&hdev->le_white_list); in hci_alloc_dev()
3651 INIT_LIST_HEAD(&hdev->le_resolv_list); in hci_alloc_dev()
3652 INIT_LIST_HEAD(&hdev->le_conn_params); in hci_alloc_dev()
3653 INIT_LIST_HEAD(&hdev->pend_le_conns); in hci_alloc_dev()
3654 INIT_LIST_HEAD(&hdev->pend_le_reports); in hci_alloc_dev()
3655 INIT_LIST_HEAD(&hdev->conn_hash.list); in hci_alloc_dev()
3656 INIT_LIST_HEAD(&hdev->adv_instances); in hci_alloc_dev()
3657 INIT_LIST_HEAD(&hdev->blocked_keys); in hci_alloc_dev()
3659 INIT_WORK(&hdev->rx_work, hci_rx_work); in hci_alloc_dev()
3660 INIT_WORK(&hdev->cmd_work, hci_cmd_work); in hci_alloc_dev()
3661 INIT_WORK(&hdev->tx_work, hci_tx_work); in hci_alloc_dev()
3662 INIT_WORK(&hdev->power_on, hci_power_on); in hci_alloc_dev()
3663 INIT_WORK(&hdev->error_reset, hci_error_reset); in hci_alloc_dev()
3664 INIT_WORK(&hdev->suspend_prepare, hci_prepare_suspend); in hci_alloc_dev()
3666 INIT_DELAYED_WORK(&hdev->power_off, hci_power_off); in hci_alloc_dev()
3668 skb_queue_head_init(&hdev->rx_q); in hci_alloc_dev()
3669 skb_queue_head_init(&hdev->cmd_q); in hci_alloc_dev()
3670 skb_queue_head_init(&hdev->raw_q); in hci_alloc_dev()
3672 init_waitqueue_head(&hdev->req_wait_q); in hci_alloc_dev()
3673 init_waitqueue_head(&hdev->suspend_wait_q); in hci_alloc_dev()
3675 INIT_DELAYED_WORK(&hdev->cmd_timer, hci_cmd_timeout); in hci_alloc_dev()
3677 hci_request_setup(hdev); in hci_alloc_dev()
3679 hci_init_sysfs(hdev); in hci_alloc_dev()
3680 discovery_init(hdev); in hci_alloc_dev()
3682 return hdev; in hci_alloc_dev()
3687 void hci_free_dev(struct hci_dev *hdev) in hci_free_dev() argument
3690 put_device(&hdev->dev); in hci_free_dev()
3695 int hci_register_dev(struct hci_dev *hdev) in hci_register_dev() argument
3699 if (!hdev->open || !hdev->close || !hdev->send) in hci_register_dev()
3705 switch (hdev->dev_type) { in hci_register_dev()
3719 sprintf(hdev->name, "hci%d", id); in hci_register_dev()
3720 hdev->id = id; in hci_register_dev()
3722 BT_DBG("%p name %s bus %d", hdev, hdev->name, hdev->bus); in hci_register_dev()
3724 hdev->workqueue = alloc_ordered_workqueue("%s", WQ_HIGHPRI, hdev->name); in hci_register_dev()
3725 if (!hdev->workqueue) { in hci_register_dev()
3730 hdev->req_workqueue = alloc_ordered_workqueue("%s", WQ_HIGHPRI, in hci_register_dev()
3731 hdev->name); in hci_register_dev()
3732 if (!hdev->req_workqueue) { in hci_register_dev()
3733 destroy_workqueue(hdev->workqueue); in hci_register_dev()
3739 hdev->debugfs = debugfs_create_dir(hdev->name, bt_debugfs); in hci_register_dev()
3741 dev_set_name(&hdev->dev, "%s", hdev->name); in hci_register_dev()
3743 error = device_add(&hdev->dev); in hci_register_dev()
3747 hci_leds_init(hdev); in hci_register_dev()
3749 hdev->rfkill = rfkill_alloc(hdev->name, &hdev->dev, in hci_register_dev()
3751 hdev); in hci_register_dev()
3752 if (hdev->rfkill) { in hci_register_dev()
3753 if (rfkill_register(hdev->rfkill) < 0) { in hci_register_dev()
3754 rfkill_destroy(hdev->rfkill); in hci_register_dev()
3755 hdev->rfkill = NULL; in hci_register_dev()
3759 if (hdev->rfkill && rfkill_blocked(hdev->rfkill)) in hci_register_dev()
3760 hci_dev_set_flag(hdev, HCI_RFKILLED); in hci_register_dev()
3762 hci_dev_set_flag(hdev, HCI_SETUP); in hci_register_dev()
3763 hci_dev_set_flag(hdev, HCI_AUTO_OFF); in hci_register_dev()
3765 if (hdev->dev_type == HCI_PRIMARY) { in hci_register_dev()
3769 hci_dev_set_flag(hdev, HCI_BREDR_ENABLED); in hci_register_dev()
3773 list_add(&hdev->list, &hci_dev_list); in hci_register_dev()
3779 if (test_bit(HCI_QUIRK_RAW_DEVICE, &hdev->quirks)) in hci_register_dev()
3780 hci_dev_set_flag(hdev, HCI_UNCONFIGURED); in hci_register_dev()
3782 hci_sock_dev_event(hdev, HCI_DEV_REG); in hci_register_dev()
3783 hci_dev_hold(hdev); in hci_register_dev()
3785 hdev->suspend_notifier.notifier_call = hci_suspend_notifier; in hci_register_dev()
3786 error = register_pm_notifier(&hdev->suspend_notifier); in hci_register_dev()
3790 queue_work(hdev->req_workqueue, &hdev->power_on); in hci_register_dev()
3792 idr_init(&hdev->adv_monitors_idr); in hci_register_dev()
3797 destroy_workqueue(hdev->workqueue); in hci_register_dev()
3798 destroy_workqueue(hdev->req_workqueue); in hci_register_dev()
3800 ida_simple_remove(&hci_index_ida, hdev->id); in hci_register_dev()
3807 void hci_unregister_dev(struct hci_dev *hdev) in hci_unregister_dev() argument
3811 BT_DBG("%p name %s bus %d", hdev, hdev->name, hdev->bus); in hci_unregister_dev()
3813 hci_dev_set_flag(hdev, HCI_UNREGISTER); in hci_unregister_dev()
3815 id = hdev->id; in hci_unregister_dev()
3818 list_del(&hdev->list); in hci_unregister_dev()
3821 cancel_work_sync(&hdev->power_on); in hci_unregister_dev()
3823 hci_suspend_clear_tasks(hdev); in hci_unregister_dev()
3824 unregister_pm_notifier(&hdev->suspend_notifier); in hci_unregister_dev()
3825 cancel_work_sync(&hdev->suspend_prepare); in hci_unregister_dev()
3827 hci_dev_do_close(hdev); in hci_unregister_dev()
3829 if (!test_bit(HCI_INIT, &hdev->flags) && in hci_unregister_dev()
3830 !hci_dev_test_flag(hdev, HCI_SETUP) && in hci_unregister_dev()
3831 !hci_dev_test_flag(hdev, HCI_CONFIG)) { in hci_unregister_dev()
3832 hci_dev_lock(hdev); in hci_unregister_dev()
3833 mgmt_index_removed(hdev); in hci_unregister_dev()
3834 hci_dev_unlock(hdev); in hci_unregister_dev()
3839 BUG_ON(!list_empty(&hdev->mgmt_pending)); in hci_unregister_dev()
3841 hci_sock_dev_event(hdev, HCI_DEV_UNREG); in hci_unregister_dev()
3843 if (hdev->rfkill) { in hci_unregister_dev()
3844 rfkill_unregister(hdev->rfkill); in hci_unregister_dev()
3845 rfkill_destroy(hdev->rfkill); in hci_unregister_dev()
3848 device_del(&hdev->dev); in hci_unregister_dev()
3850 debugfs_remove_recursive(hdev->debugfs); in hci_unregister_dev()
3851 kfree_const(hdev->hw_info); in hci_unregister_dev()
3852 kfree_const(hdev->fw_info); in hci_unregister_dev()
3854 destroy_workqueue(hdev->workqueue); in hci_unregister_dev()
3855 destroy_workqueue(hdev->req_workqueue); in hci_unregister_dev()
3857 hci_dev_lock(hdev); in hci_unregister_dev()
3858 hci_bdaddr_list_clear(&hdev->blacklist); in hci_unregister_dev()
3859 hci_bdaddr_list_clear(&hdev->whitelist); in hci_unregister_dev()
3860 hci_uuids_clear(hdev); in hci_unregister_dev()
3861 hci_link_keys_clear(hdev); in hci_unregister_dev()
3862 hci_smp_ltks_clear(hdev); in hci_unregister_dev()
3863 hci_smp_irks_clear(hdev); in hci_unregister_dev()
3864 hci_remote_oob_data_clear(hdev); in hci_unregister_dev()
3865 hci_adv_instances_clear(hdev); in hci_unregister_dev()
3866 hci_adv_monitors_clear(hdev); in hci_unregister_dev()
3867 hci_bdaddr_list_clear(&hdev->le_white_list); in hci_unregister_dev()
3868 hci_bdaddr_list_clear(&hdev->le_resolv_list); in hci_unregister_dev()
3869 hci_conn_params_clear_all(hdev); in hci_unregister_dev()
3870 hci_discovery_filter_clear(hdev); in hci_unregister_dev()
3871 hci_blocked_keys_clear(hdev); in hci_unregister_dev()
3872 hci_dev_unlock(hdev); in hci_unregister_dev()
3874 hci_dev_put(hdev); in hci_unregister_dev()
3881 int hci_suspend_dev(struct hci_dev *hdev) in hci_suspend_dev() argument
3883 hci_sock_dev_event(hdev, HCI_DEV_SUSPEND); in hci_suspend_dev()
3889 int hci_resume_dev(struct hci_dev *hdev) in hci_resume_dev() argument
3891 hci_sock_dev_event(hdev, HCI_DEV_RESUME); in hci_resume_dev()
3897 int hci_reset_dev(struct hci_dev *hdev) in hci_reset_dev() argument
3910 return hci_recv_frame(hdev, skb); in hci_reset_dev()
3915 int hci_recv_frame(struct hci_dev *hdev, struct sk_buff *skb) in hci_recv_frame() argument
3917 if (!hdev || (!test_bit(HCI_UP, &hdev->flags) in hci_recv_frame()
3918 && !test_bit(HCI_INIT, &hdev->flags))) { in hci_recv_frame()
3937 skb_queue_tail(&hdev->rx_q, skb); in hci_recv_frame()
3938 queue_work(hdev->workqueue, &hdev->rx_work); in hci_recv_frame()
3945 int hci_recv_diag(struct hci_dev *hdev, struct sk_buff *skb) in hci_recv_diag() argument
3953 skb_queue_tail(&hdev->rx_q, skb); in hci_recv_diag()
3954 queue_work(hdev->workqueue, &hdev->rx_work); in hci_recv_diag()
3960 void hci_set_hw_info(struct hci_dev *hdev, const char *fmt, ...) in hci_set_hw_info() argument
3965 kfree_const(hdev->hw_info); in hci_set_hw_info()
3966 hdev->hw_info = kvasprintf_const(GFP_KERNEL, fmt, vargs); in hci_set_hw_info()
3971 void hci_set_fw_info(struct hci_dev *hdev, const char *fmt, ...) in hci_set_fw_info() argument
3976 kfree_const(hdev->fw_info); in hci_set_fw_info()
3977 hdev->fw_info = kvasprintf_const(GFP_KERNEL, fmt, vargs); in hci_set_fw_info()
4008 static void hci_send_frame(struct hci_dev *hdev, struct sk_buff *skb) in hci_send_frame() argument
4012 BT_DBG("%s type %d len %d", hdev->name, hci_skb_pkt_type(skb), in hci_send_frame()
4019 hci_send_to_monitor(hdev, skb); in hci_send_frame()
4021 if (atomic_read(&hdev->promisc)) { in hci_send_frame()
4023 hci_send_to_sock(hdev, skb); in hci_send_frame()
4029 if (!test_bit(HCI_RUNNING, &hdev->flags)) { in hci_send_frame()
4034 err = hdev->send(hdev, skb); in hci_send_frame()
4036 bt_dev_err(hdev, "sending frame failed (%d)", err); in hci_send_frame()
4042 int hci_send_cmd(struct hci_dev *hdev, __u16 opcode, __u32 plen, in hci_send_cmd() argument
4047 BT_DBG("%s opcode 0x%4.4x plen %d", hdev->name, opcode, plen); in hci_send_cmd()
4049 skb = hci_prepare_cmd(hdev, opcode, plen, param); in hci_send_cmd()
4051 bt_dev_err(hdev, "no memory for command"); in hci_send_cmd()
4060 skb_queue_tail(&hdev->cmd_q, skb); in hci_send_cmd()
4061 queue_work(hdev->workqueue, &hdev->cmd_work); in hci_send_cmd()
4066 int __hci_cmd_send(struct hci_dev *hdev, u16 opcode, u32 plen, in __hci_cmd_send() argument
4080 bt_dev_err(hdev, "unresponded command not supported"); in __hci_cmd_send()
4084 skb = hci_prepare_cmd(hdev, opcode, plen, param); in __hci_cmd_send()
4086 bt_dev_err(hdev, "no memory for command (opcode 0x%4.4x)", in __hci_cmd_send()
4091 hci_send_frame(hdev, skb); in __hci_cmd_send()
4098 void *hci_sent_cmd_data(struct hci_dev *hdev, __u16 opcode) in hci_sent_cmd_data() argument
4102 if (!hdev->sent_cmd) in hci_sent_cmd_data()
4105 hdr = (void *) hdev->sent_cmd->data; in hci_sent_cmd_data()
4110 BT_DBG("%s opcode 0x%4.4x", hdev->name, opcode); in hci_sent_cmd_data()
4112 return hdev->sent_cmd->data + HCI_COMMAND_HDR_SIZE; in hci_sent_cmd_data()
4116 struct sk_buff *hci_cmd_sync(struct hci_dev *hdev, u16 opcode, u32 plen, in hci_cmd_sync() argument
4121 if (!test_bit(HCI_UP, &hdev->flags)) in hci_cmd_sync()
4124 bt_dev_dbg(hdev, "opcode 0x%4.4x plen %d", opcode, plen); in hci_cmd_sync()
4126 hci_req_sync_lock(hdev); in hci_cmd_sync()
4127 skb = __hci_cmd_sync(hdev, opcode, plen, param, timeout); in hci_cmd_sync()
4128 hci_req_sync_unlock(hdev); in hci_cmd_sync()
4151 struct hci_dev *hdev = conn->hdev; in hci_queue_acl() local
4159 switch (hdev->dev_type) { in hci_queue_acl()
4167 bt_dev_err(hdev, "unknown dev_type %d", hdev->dev_type); in hci_queue_acl()
4174 BT_DBG("%s nonfrag skb %p len %d", hdev->name, skb, skb->len); in hci_queue_acl()
4179 BT_DBG("%s frag %p len %d", hdev->name, skb, skb->len); in hci_queue_acl()
4200 BT_DBG("%s frag %p len %d", hdev->name, skb, skb->len); in hci_queue_acl()
4211 struct hci_dev *hdev = chan->conn->hdev; in hci_send_acl() local
4213 BT_DBG("%s chan %p flags 0x%4.4x", hdev->name, chan, flags); in hci_send_acl()
4217 queue_work(hdev->workqueue, &hdev->tx_work); in hci_send_acl()
4223 struct hci_dev *hdev = conn->hdev; in hci_send_sco() local
4226 BT_DBG("%s len %d", hdev->name, skb->len); in hci_send_sco()
4238 queue_work(hdev->workqueue, &hdev->tx_work); in hci_send_sco()
4244 static struct hci_conn *hci_low_sent(struct hci_dev *hdev, __u8 type, in hci_low_sent() argument
4247 struct hci_conn_hash *h = &hdev->conn_hash; in hci_low_sent()
4270 if (hci_conn_num(hdev, type) == num) in hci_low_sent()
4281 cnt = hdev->acl_cnt; in hci_low_sent()
4285 cnt = hdev->sco_cnt; in hci_low_sent()
4288 cnt = hdev->le_mtu ? hdev->le_cnt : hdev->acl_cnt; in hci_low_sent()
4292 bt_dev_err(hdev, "unknown link type %d", conn->type); in hci_low_sent()
4304 static void hci_link_tx_to(struct hci_dev *hdev, __u8 type) in hci_link_tx_to() argument
4306 struct hci_conn_hash *h = &hdev->conn_hash; in hci_link_tx_to()
4309 bt_dev_err(hdev, "link tx timeout"); in hci_link_tx_to()
4316 bt_dev_err(hdev, "killing stalled connection %pMR", in hci_link_tx_to()
4325 static struct hci_chan *hci_chan_sent(struct hci_dev *hdev, __u8 type, in hci_chan_sent() argument
4328 struct hci_conn_hash *h = &hdev->conn_hash; in hci_chan_sent()
4334 BT_DBG("%s", hdev->name); in hci_chan_sent()
4373 if (hci_conn_num(hdev, type) == conn_num) in hci_chan_sent()
4384 cnt = hdev->acl_cnt; in hci_chan_sent()
4387 cnt = hdev->block_cnt; in hci_chan_sent()
4391 cnt = hdev->sco_cnt; in hci_chan_sent()
4394 cnt = hdev->le_mtu ? hdev->le_cnt : hdev->acl_cnt; in hci_chan_sent()
4398 bt_dev_err(hdev, "unknown link type %d", chan->conn->type); in hci_chan_sent()
4407 static void hci_prio_recalculate(struct hci_dev *hdev, __u8 type) in hci_prio_recalculate() argument
4409 struct hci_conn_hash *h = &hdev->conn_hash; in hci_prio_recalculate()
4413 BT_DBG("%s", hdev->name); in hci_prio_recalculate()
4449 if (hci_conn_num(hdev, type) == num) in hci_prio_recalculate()
4457 static inline int __get_blocks(struct hci_dev *hdev, struct sk_buff *skb) in __get_blocks() argument
4460 return DIV_ROUND_UP(skb->len - HCI_ACL_HDR_SIZE, hdev->block_len); in __get_blocks()
4463 static void __check_timeout(struct hci_dev *hdev, unsigned int cnt) in __check_timeout() argument
4465 if (!hci_dev_test_flag(hdev, HCI_UNCONFIGURED)) { in __check_timeout()
4468 if (!cnt && time_after(jiffies, hdev->acl_last_tx + in __check_timeout()
4470 hci_link_tx_to(hdev, ACL_LINK); in __check_timeout()
4475 static void hci_sched_sco(struct hci_dev *hdev) in hci_sched_sco() argument
4481 BT_DBG("%s", hdev->name); in hci_sched_sco()
4483 if (!hci_conn_num(hdev, SCO_LINK)) in hci_sched_sco()
4486 while (hdev->sco_cnt && (conn = hci_low_sent(hdev, SCO_LINK, "e))) { in hci_sched_sco()
4489 hci_send_frame(hdev, skb); in hci_sched_sco()
4498 static void hci_sched_esco(struct hci_dev *hdev) in hci_sched_esco() argument
4504 BT_DBG("%s", hdev->name); in hci_sched_esco()
4506 if (!hci_conn_num(hdev, ESCO_LINK)) in hci_sched_esco()
4509 while (hdev->sco_cnt && (conn = hci_low_sent(hdev, ESCO_LINK, in hci_sched_esco()
4513 hci_send_frame(hdev, skb); in hci_sched_esco()
4522 static void hci_sched_acl_pkt(struct hci_dev *hdev) in hci_sched_acl_pkt() argument
4524 unsigned int cnt = hdev->acl_cnt; in hci_sched_acl_pkt()
4529 __check_timeout(hdev, cnt); in hci_sched_acl_pkt()
4531 while (hdev->acl_cnt && in hci_sched_acl_pkt()
4532 (chan = hci_chan_sent(hdev, ACL_LINK, "e))) { in hci_sched_acl_pkt()
4547 hci_send_frame(hdev, skb); in hci_sched_acl_pkt()
4548 hdev->acl_last_tx = jiffies; in hci_sched_acl_pkt()
4550 hdev->acl_cnt--; in hci_sched_acl_pkt()
4555 hci_sched_sco(hdev); in hci_sched_acl_pkt()
4556 hci_sched_esco(hdev); in hci_sched_acl_pkt()
4560 if (cnt != hdev->acl_cnt) in hci_sched_acl_pkt()
4561 hci_prio_recalculate(hdev, ACL_LINK); in hci_sched_acl_pkt()
4564 static void hci_sched_acl_blk(struct hci_dev *hdev) in hci_sched_acl_blk() argument
4566 unsigned int cnt = hdev->block_cnt; in hci_sched_acl_blk()
4572 __check_timeout(hdev, cnt); in hci_sched_acl_blk()
4574 BT_DBG("%s", hdev->name); in hci_sched_acl_blk()
4576 if (hdev->dev_type == HCI_AMP) in hci_sched_acl_blk()
4581 while (hdev->block_cnt > 0 && in hci_sched_acl_blk()
4582 (chan = hci_chan_sent(hdev, type, "e))) { in hci_sched_acl_blk()
4596 blocks = __get_blocks(hdev, skb); in hci_sched_acl_blk()
4597 if (blocks > hdev->block_cnt) in hci_sched_acl_blk()
4603 hci_send_frame(hdev, skb); in hci_sched_acl_blk()
4604 hdev->acl_last_tx = jiffies; in hci_sched_acl_blk()
4606 hdev->block_cnt -= blocks; in hci_sched_acl_blk()
4614 if (cnt != hdev->block_cnt) in hci_sched_acl_blk()
4615 hci_prio_recalculate(hdev, type); in hci_sched_acl_blk()
4618 static void hci_sched_acl(struct hci_dev *hdev) in hci_sched_acl() argument
4620 BT_DBG("%s", hdev->name); in hci_sched_acl()
4623 if (!hci_conn_num(hdev, ACL_LINK) && hdev->dev_type == HCI_PRIMARY) in hci_sched_acl()
4627 if (!hci_conn_num(hdev, AMP_LINK) && hdev->dev_type == HCI_AMP) in hci_sched_acl()
4630 switch (hdev->flow_ctl_mode) { in hci_sched_acl()
4632 hci_sched_acl_pkt(hdev); in hci_sched_acl()
4636 hci_sched_acl_blk(hdev); in hci_sched_acl()
4641 static void hci_sched_le(struct hci_dev *hdev) in hci_sched_le() argument
4647 BT_DBG("%s", hdev->name); in hci_sched_le()
4649 if (!hci_conn_num(hdev, LE_LINK)) in hci_sched_le()
4652 cnt = hdev->le_pkts ? hdev->le_cnt : hdev->acl_cnt; in hci_sched_le()
4654 __check_timeout(hdev, cnt); in hci_sched_le()
4657 while (cnt && (chan = hci_chan_sent(hdev, LE_LINK, "e))) { in hci_sched_le()
4669 hci_send_frame(hdev, skb); in hci_sched_le()
4670 hdev->le_last_tx = jiffies; in hci_sched_le()
4677 hci_sched_sco(hdev); in hci_sched_le()
4678 hci_sched_esco(hdev); in hci_sched_le()
4682 if (hdev->le_pkts) in hci_sched_le()
4683 hdev->le_cnt = cnt; in hci_sched_le()
4685 hdev->acl_cnt = cnt; in hci_sched_le()
4688 hci_prio_recalculate(hdev, LE_LINK); in hci_sched_le()
4693 struct hci_dev *hdev = container_of(work, struct hci_dev, tx_work); in hci_tx_work() local
4696 BT_DBG("%s acl %d sco %d le %d", hdev->name, hdev->acl_cnt, in hci_tx_work()
4697 hdev->sco_cnt, hdev->le_cnt); in hci_tx_work()
4699 if (!hci_dev_test_flag(hdev, HCI_USER_CHANNEL)) { in hci_tx_work()
4701 hci_sched_sco(hdev); in hci_tx_work()
4702 hci_sched_esco(hdev); in hci_tx_work()
4703 hci_sched_acl(hdev); in hci_tx_work()
4704 hci_sched_le(hdev); in hci_tx_work()
4708 while ((skb = skb_dequeue(&hdev->raw_q))) in hci_tx_work()
4709 hci_send_frame(hdev, skb); in hci_tx_work()
4715 static void hci_acldata_packet(struct hci_dev *hdev, struct sk_buff *skb) in hci_acldata_packet() argument
4727 BT_DBG("%s len %d handle 0x%4.4x flags 0x%4.4x", hdev->name, skb->len, in hci_acldata_packet()
4730 hdev->stat.acl_rx++; in hci_acldata_packet()
4732 hci_dev_lock(hdev); in hci_acldata_packet()
4733 conn = hci_conn_hash_lookup_handle(hdev, handle); in hci_acldata_packet()
4734 hci_dev_unlock(hdev); in hci_acldata_packet()
4743 bt_dev_err(hdev, "ACL packet for unknown connection handle %d", in hci_acldata_packet()
4751 static void hci_scodata_packet(struct hci_dev *hdev, struct sk_buff *skb) in hci_scodata_packet() argument
4763 BT_DBG("%s len %d handle 0x%4.4x flags 0x%4.4x", hdev->name, skb->len, in hci_scodata_packet()
4766 hdev->stat.sco_rx++; in hci_scodata_packet()
4768 hci_dev_lock(hdev); in hci_scodata_packet()
4769 conn = hci_conn_hash_lookup_handle(hdev, handle); in hci_scodata_packet()
4770 hci_dev_unlock(hdev); in hci_scodata_packet()
4778 bt_dev_err(hdev, "SCO packet for unknown connection handle %d", in hci_scodata_packet()
4785 static bool hci_req_is_complete(struct hci_dev *hdev) in hci_req_is_complete() argument
4789 skb = skb_peek(&hdev->cmd_q); in hci_req_is_complete()
4796 static void hci_resend_last(struct hci_dev *hdev) in hci_resend_last() argument
4802 if (!hdev->sent_cmd) in hci_resend_last()
4805 sent = (void *) hdev->sent_cmd->data; in hci_resend_last()
4810 skb = skb_clone(hdev->sent_cmd, GFP_KERNEL); in hci_resend_last()
4814 skb_queue_head(&hdev->cmd_q, skb); in hci_resend_last()
4815 queue_work(hdev->workqueue, &hdev->cmd_work); in hci_resend_last()
4818 void hci_req_cmd_complete(struct hci_dev *hdev, u16 opcode, u8 status, in hci_req_cmd_complete() argument
4830 if (!hci_sent_cmd_data(hdev, opcode)) { in hci_req_cmd_complete()
4837 if (test_bit(HCI_INIT, &hdev->flags) && opcode == HCI_OP_RESET) in hci_req_cmd_complete()
4838 hci_resend_last(hdev); in hci_req_cmd_complete()
4844 hci_dev_clear_flag(hdev, HCI_CMD_PENDING); in hci_req_cmd_complete()
4849 if (!status && !hci_req_is_complete(hdev)) in hci_req_cmd_complete()
4856 if (bt_cb(hdev->sent_cmd)->hci.req_flags & HCI_REQ_SKB) { in hci_req_cmd_complete()
4857 *req_complete_skb = bt_cb(hdev->sent_cmd)->hci.req_complete_skb; in hci_req_cmd_complete()
4861 if (bt_cb(hdev->sent_cmd)->hci.req_complete) { in hci_req_cmd_complete()
4862 *req_complete = bt_cb(hdev->sent_cmd)->hci.req_complete; in hci_req_cmd_complete()
4867 spin_lock_irqsave(&hdev->cmd_q.lock, flags); in hci_req_cmd_complete()
4868 while ((skb = __skb_dequeue(&hdev->cmd_q))) { in hci_req_cmd_complete()
4870 __skb_queue_head(&hdev->cmd_q, skb); in hci_req_cmd_complete()
4880 spin_unlock_irqrestore(&hdev->cmd_q.lock, flags); in hci_req_cmd_complete()
4885 struct hci_dev *hdev = container_of(work, struct hci_dev, rx_work); in hci_rx_work() local
4888 BT_DBG("%s", hdev->name); in hci_rx_work()
4890 while ((skb = skb_dequeue(&hdev->rx_q))) { in hci_rx_work()
4892 hci_send_to_monitor(hdev, skb); in hci_rx_work()
4894 if (atomic_read(&hdev->promisc)) { in hci_rx_work()
4896 hci_send_to_sock(hdev, skb); in hci_rx_work()
4905 if (hci_dev_test_flag(hdev, HCI_USER_CHANNEL) && in hci_rx_work()
4906 !test_bit(HCI_INIT, &hdev->flags)) { in hci_rx_work()
4911 if (test_bit(HCI_INIT, &hdev->flags)) { in hci_rx_work()
4925 BT_DBG("%s Event packet", hdev->name); in hci_rx_work()
4926 hci_event_packet(hdev, skb); in hci_rx_work()
4930 BT_DBG("%s ACL data packet", hdev->name); in hci_rx_work()
4931 hci_acldata_packet(hdev, skb); in hci_rx_work()
4935 BT_DBG("%s SCO data packet", hdev->name); in hci_rx_work()
4936 hci_scodata_packet(hdev, skb); in hci_rx_work()
4948 struct hci_dev *hdev = container_of(work, struct hci_dev, cmd_work); in hci_cmd_work() local
4951 BT_DBG("%s cmd_cnt %d cmd queued %d", hdev->name, in hci_cmd_work()
4952 atomic_read(&hdev->cmd_cnt), skb_queue_len(&hdev->cmd_q)); in hci_cmd_work()
4955 if (atomic_read(&hdev->cmd_cnt)) { in hci_cmd_work()
4956 skb = skb_dequeue(&hdev->cmd_q); in hci_cmd_work()
4960 kfree_skb(hdev->sent_cmd); in hci_cmd_work()
4962 hdev->sent_cmd = skb_clone(skb, GFP_KERNEL); in hci_cmd_work()
4963 if (hdev->sent_cmd) { in hci_cmd_work()
4964 if (hci_req_status_pend(hdev)) in hci_cmd_work()
4965 hci_dev_set_flag(hdev, HCI_CMD_PENDING); in hci_cmd_work()
4966 atomic_dec(&hdev->cmd_cnt); in hci_cmd_work()
4967 hci_send_frame(hdev, skb); in hci_cmd_work()
4968 if (test_bit(HCI_RESET, &hdev->flags)) in hci_cmd_work()
4969 cancel_delayed_work(&hdev->cmd_timer); in hci_cmd_work()
4971 schedule_delayed_work(&hdev->cmd_timer, in hci_cmd_work()
4974 skb_queue_head(&hdev->cmd_q, skb); in hci_cmd_work()
4975 queue_work(hdev->workqueue, &hdev->cmd_work); in hci_cmd_work()