Lines Matching refs:hdev
66 struct hci_dev *hdev = conn->hdev; in hci_connect_le_scan_cleanup() local
75 irk = hci_get_irk(hdev, bdaddr, bdaddr_type); in hci_connect_le_scan_cleanup()
81 params = hci_pend_le_action_lookup(&hdev->pend_le_conns, bdaddr, in hci_connect_le_scan_cleanup()
97 hci_conn_params_del(hdev, bdaddr, bdaddr_type); in hci_connect_le_scan_cleanup()
102 list_add(¶ms->action, &hdev->pend_le_conns); in hci_connect_le_scan_cleanup()
105 list_add(¶ms->action, &hdev->pend_le_reports); in hci_connect_le_scan_cleanup()
111 hci_update_background_scan(hdev); in hci_connect_le_scan_cleanup()
116 struct hci_dev *hdev = conn->hdev; in hci_conn_cleanup() local
119 hci_conn_params_del(conn->hdev, &conn->dst, conn->dst_type); in hci_conn_cleanup()
123 hci_conn_hash_del(hdev, conn); in hci_conn_cleanup()
125 if (hdev->notify) in hci_conn_cleanup()
126 hdev->notify(hdev, HCI_NOTIFY_CONN_DEL); in hci_conn_cleanup()
132 hci_dev_put(hdev); in hci_conn_cleanup()
141 struct hci_dev *hdev = conn->hdev; in le_scan_cleanup() local
144 BT_DBG("%s hcon %p", hdev->name, conn); in le_scan_cleanup()
146 hci_dev_lock(hdev); in le_scan_cleanup()
150 list_for_each_entry_rcu(c, &hdev->conn_hash.list, list) { in le_scan_cleanup()
161 hci_dev_unlock(hdev); in le_scan_cleanup()
162 hci_dev_put(hdev); in le_scan_cleanup()
168 BT_DBG("%s hcon %p", conn->hdev->name, conn); in hci_connect_le_scan_remove()
178 hci_dev_hold(conn->hdev); in hci_connect_le_scan_remove()
190 struct hci_dev *hdev = conn->hdev; in hci_acl_create_connection() local
202 conn->link_policy = hdev->link_policy; in hci_acl_create_connection()
208 ie = hci_inquiry_cache_lookup(hdev, &conn->dst); in hci_acl_create_connection()
223 if (lmp_rswitch_capable(hdev) && !(hdev->link_mode & HCI_LM_MASTER)) in hci_acl_create_connection()
228 hci_send_cmd(hdev, HCI_OP_CREATE_CONN, sizeof(cp), &cp); in hci_acl_create_connection()
242 struct hci_dev *hdev = conn->hdev; in hci_disconnect() local
246 hci_send_cmd(hdev, HCI_OP_READ_CLOCK_OFFSET, sizeof(clkoff_cp), in hci_disconnect()
255 struct hci_dev *hdev = conn->hdev; in hci_add_sco() local
268 hci_send_cmd(hdev, HCI_OP_ADD_SCO, sizeof(cp), &cp); in hci_add_sco()
273 struct hci_dev *hdev = conn->hdev; in hci_setup_sync() local
315 if (hci_send_cmd(hdev, HCI_OP_SETUP_SYNC_CONN, sizeof(cp), &cp) < 0) in hci_setup_sync()
324 struct hci_dev *hdev = conn->hdev; in hci_le_conn_update() local
328 hci_dev_lock(hdev); in hci_le_conn_update()
330 params = hci_conn_params_lookup(hdev, &conn->dst, conn->dst_type); in hci_le_conn_update()
338 hci_dev_unlock(hdev); in hci_le_conn_update()
349 hci_send_cmd(hdev, HCI_OP_LE_CONN_UPDATE, sizeof(cp), &cp); in hci_le_conn_update()
360 struct hci_dev *hdev = conn->hdev; in hci_le_start_enc() local
372 hci_send_cmd(hdev, HCI_OP_LE_START_ENC, sizeof(cp), &cp); in hci_le_start_enc()
386 if (lmp_esco_capable(conn->hdev)) in hci_sco_setup()
431 struct hci_dev *hdev = conn->hdev; in hci_conn_idle() local
435 if (!lmp_sniff_capable(hdev) || !lmp_sniff_capable(conn)) in hci_conn_idle()
441 if (lmp_sniffsubr_capable(hdev) && lmp_sniffsubr_capable(conn)) { in hci_conn_idle()
447 hci_send_cmd(hdev, HCI_OP_SNIFF_SUBRATE, sizeof(cp), &cp); in hci_conn_idle()
453 cp.max_interval = cpu_to_le16(hdev->sniff_max_interval); in hci_conn_idle()
454 cp.min_interval = cpu_to_le16(hdev->sniff_min_interval); in hci_conn_idle()
457 hci_send_cmd(hdev, HCI_OP_SNIFF_MODE, sizeof(cp), &cp); in hci_conn_idle()
466 hci_send_cmd(conn->hdev, HCI_OP_USER_CONFIRM_REPLY, sizeof(conn->dst), in hci_conn_auto_accept()
474 struct hci_dev *hdev = conn->hdev; in le_conn_timeout() local
485 hci_send_cmd(hdev, HCI_OP_LE_SET_ADV_ENABLE, sizeof(enable), in le_conn_timeout()
494 struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst, in hci_conn_add() argument
499 BT_DBG("%s dst %pMR", hdev->name, dst); in hci_conn_add()
506 bacpy(&conn->src, &hdev->bdaddr); in hci_conn_add()
507 conn->hdev = hdev; in hci_conn_add()
513 conn->io_capability = hdev->io_capability; in hci_conn_add()
528 conn->pkt_type = hdev->pkt_type & ACL_PTYPE_MASK; in hci_conn_add()
532 hci_copy_identity_address(hdev, &conn->src, &conn->src_type); in hci_conn_add()
535 if (lmp_esco_capable(hdev)) in hci_conn_add()
536 conn->pkt_type = (hdev->esco_type & SCO_ESCO_MASK) | in hci_conn_add()
537 (hdev->esco_type & EDR_ESCO_MASK); in hci_conn_add()
539 conn->pkt_type = hdev->pkt_type & SCO_PTYPE_MASK; in hci_conn_add()
542 conn->pkt_type = hdev->esco_type & ~EDR_ESCO_MASK; in hci_conn_add()
558 hci_dev_hold(hdev); in hci_conn_add()
560 hci_conn_hash_add(hdev, conn); in hci_conn_add()
561 if (hdev->notify) in hci_conn_add()
562 hdev->notify(hdev, HCI_NOTIFY_CONN_ADD); in hci_conn_add()
571 struct hci_dev *hdev = conn->hdev; in hci_conn_del() local
573 BT_DBG("%s hcon %p handle %d", hdev->name, conn, conn->handle); in hci_conn_del()
585 hdev->acl_cnt += conn->sent; in hci_conn_del()
589 if (hdev->le_pkts) in hci_conn_del()
590 hdev->le_cnt += conn->sent; in hci_conn_del()
592 hdev->acl_cnt += conn->sent; in hci_conn_del()
619 struct hci_dev *hdev = NULL, *d; in hci_get_route() local
660 hdev = d; break; in hci_get_route()
664 hdev = d; break; in hci_get_route()
669 if (hdev) in hci_get_route()
670 hdev = hci_dev_hold(hdev); in hci_get_route()
673 return hdev; in hci_get_route()
680 struct hci_dev *hdev = conn->hdev; in hci_le_conn_failed() local
683 params = hci_pend_le_action_lookup(&hdev->pend_le_conns, &conn->dst, in hci_le_conn_failed()
701 mgmt_connect_failed(hdev, &conn->dst, conn->type, in hci_le_conn_failed()
711 hci_update_background_scan(hdev); in hci_le_conn_failed()
716 hci_req_reenable_advertising(hdev); in hci_le_conn_failed()
719 static void create_le_conn_complete(struct hci_dev *hdev, u8 status, u16 opcode) in create_le_conn_complete() argument
723 hci_dev_lock(hdev); in create_le_conn_complete()
725 conn = hci_lookup_le_connect(hdev); in create_le_conn_complete()
732 bt_dev_err(hdev, "request failed to create LE connection: " in create_le_conn_complete()
741 hci_dev_unlock(hdev); in create_le_conn_complete()
746 struct hci_dev *hdev = conn->hdev; in conn_use_rpa() local
748 return hci_dev_test_flag(hdev, HCI_PRIVACY); in conn_use_rpa()
754 struct hci_dev *hdev = conn->hdev; in set_ext_conn_params() local
761 p->scan_interval = cpu_to_le16(hdev->le_scan_interval); in set_ext_conn_params()
775 struct hci_dev *hdev = conn->hdev; in hci_req_add_le_create_conn() local
782 if (bacmp(&req->hdev->random_addr, direct_rpa)) in hci_req_add_le_create_conn()
797 if (use_ext_conn(hdev)) { in hci_req_add_le_create_conn()
814 if (scan_1m(hdev)) { in hci_req_add_le_create_conn()
822 if (scan_2m(hdev)) { in hci_req_add_le_create_conn()
830 if (scan_coded(hdev)) { in hci_req_add_le_create_conn()
847 cp.scan_interval = cpu_to_le16(hdev->le_scan_interval); in hci_req_add_le_create_conn()
870 struct hci_dev *hdev = req->hdev; in hci_req_directed_advertising() local
874 if (ext_adv_capable(hdev)) { in hci_req_directed_advertising()
881 if (hci_get_random_address(hdev, false, conn_use_rpa(conn), NULL, in hci_req_directed_advertising()
889 cp.channel_map = hdev->le_adv_channel_map; in hci_req_directed_advertising()
902 bacmp(&random_addr, &hdev->random_addr)) { in hci_req_directed_advertising()
924 hci_dev_clear_flag(hdev, HCI_LE_ADV); in hci_req_directed_advertising()
938 cp.channel_map = hdev->le_adv_channel_map; in hci_req_directed_advertising()
950 struct hci_conn *hci_connect_le(struct hci_dev *hdev, bdaddr_t *dst, in hci_connect_le() argument
961 if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED)) { in hci_connect_le()
962 if (lmp_le_capable(hdev)) in hci_connect_le()
971 if (hci_lookup_le_connect(hdev)) in hci_connect_le()
979 conn = hci_conn_hash_lookup_le(hdev, dst, dst_type); in hci_connect_le()
993 irk = hci_find_irk_by_addr(hdev, dst, dst_type); in hci_connect_le()
1002 conn = hci_conn_add(hdev, LE_LINK, dst, role); in hci_connect_le()
1013 hci_req_init(&req, hdev); in hci_connect_le()
1021 if (hci_dev_test_flag(hdev, HCI_LE_ADV)) { in hci_connect_le()
1032 if (hci_dev_test_flag(hdev, HCI_LE_SCAN) && in hci_connect_le()
1033 hdev->le_scan_type == LE_SCAN_ACTIVE) { in hci_connect_le()
1043 params = hci_conn_params_lookup(hdev, &conn->dst, conn->dst_type); in hci_connect_le()
1050 conn->le_conn_min_interval = hdev->le_conn_min_interval; in hci_connect_le()
1051 conn->le_conn_max_interval = hdev->le_conn_max_interval; in hci_connect_le()
1052 conn->le_conn_latency = hdev->le_conn_latency; in hci_connect_le()
1053 conn->le_supv_timeout = hdev->le_supv_timeout; in hci_connect_le()
1062 if (hci_dev_test_flag(hdev, HCI_LE_SCAN)) { in hci_connect_le()
1064 hci_dev_set_flag(hdev, HCI_LE_SCAN_INTERRUPTED); in hci_connect_le()
1079 static bool is_connected(struct hci_dev *hdev, bdaddr_t *addr, u8 type) in is_connected() argument
1083 conn = hci_conn_hash_lookup_le(hdev, addr, type); in is_connected()
1094 static int hci_explicit_conn_params_set(struct hci_dev *hdev, in hci_explicit_conn_params_set() argument
1099 if (is_connected(hdev, addr, addr_type)) in hci_explicit_conn_params_set()
1102 params = hci_conn_params_lookup(hdev, addr, addr_type); in hci_explicit_conn_params_set()
1104 params = hci_conn_params_add(hdev, addr, addr_type); in hci_explicit_conn_params_set()
1120 list_add(¶ms->action, &hdev->pend_le_conns); in hci_explicit_conn_params_set()
1132 struct hci_conn *hci_connect_le_scan(struct hci_dev *hdev, bdaddr_t *dst, in hci_connect_le_scan() argument
1139 if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED)) { in hci_connect_le_scan()
1140 if (lmp_le_capable(hdev)) in hci_connect_le_scan()
1155 conn = hci_conn_hash_lookup_le(hdev, dst, dst_type); in hci_connect_le_scan()
1164 conn = hci_conn_add(hdev, LE_LINK, dst, HCI_ROLE_MASTER); in hci_connect_le_scan()
1168 if (hci_explicit_conn_params_set(hdev, dst, dst_type) < 0) in hci_connect_le_scan()
1178 hci_update_background_scan(hdev); in hci_connect_le_scan()
1185 struct hci_conn *hci_connect_acl(struct hci_dev *hdev, bdaddr_t *dst, in hci_connect_acl() argument
1190 if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) { in hci_connect_acl()
1191 if (lmp_bredr_capable(hdev)) in hci_connect_acl()
1197 acl = hci_conn_hash_lookup_ba(hdev, ACL_LINK, dst); in hci_connect_acl()
1199 acl = hci_conn_add(hdev, ACL_LINK, dst, HCI_ROLE_MASTER); in hci_connect_acl()
1216 struct hci_conn *hci_connect_sco(struct hci_dev *hdev, int type, bdaddr_t *dst, in hci_connect_sco() argument
1222 acl = hci_connect_acl(hdev, dst, BT_SECURITY_LOW, HCI_AT_NO_BONDING); in hci_connect_sco()
1226 sco = hci_conn_hash_lookup_ba(hdev, type, dst); in hci_connect_sco()
1228 sco = hci_conn_add(hdev, type, dst, HCI_ROLE_MASTER); in hci_connect_sco()
1268 if (hci_dev_test_flag(conn->hdev, HCI_SC_ONLY)) { in hci_conn_check_link_mode()
1304 hci_send_cmd(conn->hdev, HCI_OP_AUTH_REQUESTED, in hci_conn_auth()
1328 hci_send_cmd(conn->hdev, HCI_OP_SET_CONN_ENCRYPT, sizeof(cp), in hci_conn_encrypt()
1434 hci_send_cmd(conn->hdev, HCI_OP_SWITCH_ROLE, sizeof(cp), &cp); in hci_conn_switch_role()
1444 struct hci_dev *hdev = conn->hdev; in hci_conn_enter_active_mode() local
1457 hci_send_cmd(hdev, HCI_OP_EXIT_SNIFF_MODE, sizeof(cp), &cp); in hci_conn_enter_active_mode()
1461 if (hdev->idle_timeout > 0) in hci_conn_enter_active_mode()
1462 queue_delayed_work(hdev->workqueue, &conn->idle_work, in hci_conn_enter_active_mode()
1463 msecs_to_jiffies(hdev->idle_timeout)); in hci_conn_enter_active_mode()
1467 void hci_conn_hash_flush(struct hci_dev *hdev) in hci_conn_hash_flush() argument
1469 struct hci_conn_hash *h = &hdev->conn_hash; in hci_conn_hash_flush()
1472 BT_DBG("hdev %s", hdev->name); in hci_conn_hash_flush()
1483 void hci_conn_check_pending(struct hci_dev *hdev) in hci_conn_check_pending() argument
1487 BT_DBG("hdev %s", hdev->name); in hci_conn_check_pending()
1489 hci_dev_lock(hdev); in hci_conn_check_pending()
1491 conn = hci_conn_hash_lookup_state(hdev, ACL_LINK, BT_CONNECT2); in hci_conn_check_pending()
1495 hci_dev_unlock(hdev); in hci_conn_check_pending()
1525 struct hci_dev *hdev; in hci_get_conn_list() local
1540 hdev = hci_dev_get(req.dev_id); in hci_get_conn_list()
1541 if (!hdev) { in hci_get_conn_list()
1548 hci_dev_lock(hdev); in hci_get_conn_list()
1549 list_for_each_entry(c, &hdev->conn_hash.list, list) { in hci_get_conn_list()
1559 hci_dev_unlock(hdev); in hci_get_conn_list()
1561 cl->dev_id = hdev->id; in hci_get_conn_list()
1565 hci_dev_put(hdev); in hci_get_conn_list()
1573 int hci_get_conn_info(struct hci_dev *hdev, void __user *arg) in hci_get_conn_info() argument
1583 hci_dev_lock(hdev); in hci_get_conn_info()
1584 conn = hci_conn_hash_lookup_ba(hdev, req.type, &req.bdaddr); in hci_get_conn_info()
1593 hci_dev_unlock(hdev); in hci_get_conn_info()
1601 int hci_get_auth_info(struct hci_dev *hdev, void __user *arg) in hci_get_auth_info() argument
1609 hci_dev_lock(hdev); in hci_get_auth_info()
1610 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &req.bdaddr); in hci_get_auth_info()
1613 hci_dev_unlock(hdev); in hci_get_auth_info()
1623 struct hci_dev *hdev = conn->hdev; in hci_chan_create() local
1626 BT_DBG("%s hcon %p", hdev->name, conn); in hci_chan_create()
1649 struct hci_dev *hdev = conn->hdev; in hci_chan_del() local
1651 BT_DBG("%s hcon %p chan %p", hdev->name, conn, chan); in hci_chan_del()
1689 struct hci_chan *hci_chan_lookup_handle(struct hci_dev *hdev, __u16 handle) in hci_chan_lookup_handle() argument
1691 struct hci_conn_hash *h = &hdev->conn_hash; in hci_chan_lookup_handle()