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()
186 struct hci_dev *hdev = conn->hdev; in hci_acl_create_connection() local
198 conn->link_policy = hdev->link_policy; in hci_acl_create_connection()
204 ie = hci_inquiry_cache_lookup(hdev, &conn->dst); in hci_acl_create_connection()
219 if (lmp_rswitch_capable(hdev) && !(hdev->link_mode & HCI_LM_MASTER)) in hci_acl_create_connection()
224 hci_send_cmd(hdev, HCI_OP_CREATE_CONN, sizeof(cp), &cp); in hci_acl_create_connection()
238 struct hci_dev *hdev = conn->hdev; in hci_disconnect() local
242 hci_send_cmd(hdev, HCI_OP_READ_CLOCK_OFFSET, sizeof(clkoff_cp), in hci_disconnect()
251 struct hci_dev *hdev = conn->hdev; in hci_add_sco() local
264 hci_send_cmd(hdev, HCI_OP_ADD_SCO, sizeof(cp), &cp); in hci_add_sco()
269 struct hci_dev *hdev = conn->hdev; in hci_setup_sync() local
311 if (hci_send_cmd(hdev, HCI_OP_SETUP_SYNC_CONN, sizeof(cp), &cp) < 0) in hci_setup_sync()
320 struct hci_dev *hdev = conn->hdev; in hci_le_conn_update() local
324 hci_dev_lock(hdev); in hci_le_conn_update()
326 params = hci_conn_params_lookup(hdev, &conn->dst, conn->dst_type); in hci_le_conn_update()
334 hci_dev_unlock(hdev); in hci_le_conn_update()
345 hci_send_cmd(hdev, HCI_OP_LE_CONN_UPDATE, sizeof(cp), &cp); in hci_le_conn_update()
356 struct hci_dev *hdev = conn->hdev; in hci_le_start_enc() local
368 hci_send_cmd(hdev, HCI_OP_LE_START_ENC, sizeof(cp), &cp); in hci_le_start_enc()
382 if (lmp_esco_capable(conn->hdev)) in hci_sco_setup()
427 struct hci_dev *hdev = conn->hdev; in hci_conn_idle() local
431 if (!lmp_sniff_capable(hdev) || !lmp_sniff_capable(conn)) in hci_conn_idle()
437 if (lmp_sniffsubr_capable(hdev) && lmp_sniffsubr_capable(conn)) { in hci_conn_idle()
443 hci_send_cmd(hdev, HCI_OP_SNIFF_SUBRATE, sizeof(cp), &cp); in hci_conn_idle()
449 cp.max_interval = cpu_to_le16(hdev->sniff_max_interval); in hci_conn_idle()
450 cp.min_interval = cpu_to_le16(hdev->sniff_min_interval); in hci_conn_idle()
453 hci_send_cmd(hdev, HCI_OP_SNIFF_MODE, sizeof(cp), &cp); in hci_conn_idle()
462 hci_send_cmd(conn->hdev, HCI_OP_USER_CONFIRM_REPLY, sizeof(conn->dst), in hci_conn_auto_accept()
470 struct hci_dev *hdev = conn->hdev; in le_conn_timeout() local
481 hci_send_cmd(hdev, HCI_OP_LE_SET_ADV_ENABLE, sizeof(enable), in le_conn_timeout()
490 struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst, in hci_conn_add() argument
495 BT_DBG("%s dst %pMR", hdev->name, dst); in hci_conn_add()
502 bacpy(&conn->src, &hdev->bdaddr); in hci_conn_add()
503 conn->hdev = hdev; in hci_conn_add()
509 conn->io_capability = hdev->io_capability; in hci_conn_add()
524 conn->pkt_type = hdev->pkt_type & ACL_PTYPE_MASK; in hci_conn_add()
528 hci_copy_identity_address(hdev, &conn->src, &conn->src_type); in hci_conn_add()
531 if (lmp_esco_capable(hdev)) in hci_conn_add()
532 conn->pkt_type = (hdev->esco_type & SCO_ESCO_MASK) | in hci_conn_add()
533 (hdev->esco_type & EDR_ESCO_MASK); in hci_conn_add()
535 conn->pkt_type = hdev->pkt_type & SCO_PTYPE_MASK; in hci_conn_add()
538 conn->pkt_type = hdev->esco_type & ~EDR_ESCO_MASK; in hci_conn_add()
554 hci_dev_hold(hdev); in hci_conn_add()
556 hci_conn_hash_add(hdev, conn); in hci_conn_add()
557 if (hdev->notify) in hci_conn_add()
558 hdev->notify(hdev, HCI_NOTIFY_CONN_ADD); in hci_conn_add()
567 struct hci_dev *hdev = conn->hdev; in hci_conn_del() local
569 BT_DBG("%s hcon %p handle %d", hdev->name, conn, conn->handle); in hci_conn_del()
581 hdev->acl_cnt += conn->sent; in hci_conn_del()
585 if (hdev->le_pkts) in hci_conn_del()
586 hdev->le_cnt += conn->sent; in hci_conn_del()
588 hdev->acl_cnt += conn->sent; in hci_conn_del()
615 struct hci_dev *hdev = NULL, *d; in hci_get_route() local
634 hdev = d; break; in hci_get_route()
638 hdev = d; break; in hci_get_route()
643 if (hdev) in hci_get_route()
644 hdev = hci_dev_hold(hdev); in hci_get_route()
647 return hdev; in hci_get_route()
654 struct hci_dev *hdev = conn->hdev; in hci_le_conn_failed() local
657 params = hci_pend_le_action_lookup(&hdev->pend_le_conns, &conn->dst, in hci_le_conn_failed()
667 mgmt_connect_failed(hdev, &conn->dst, conn->type, conn->dst_type, in hci_le_conn_failed()
677 hci_update_background_scan(hdev); in hci_le_conn_failed()
682 mgmt_reenable_advertising(hdev); in hci_le_conn_failed()
685 static void create_le_conn_complete(struct hci_dev *hdev, u8 status, u16 opcode) in create_le_conn_complete() argument
689 hci_dev_lock(hdev); in create_le_conn_complete()
691 conn = hci_lookup_le_connect(hdev); in create_le_conn_complete()
707 hci_dev_unlock(hdev); in create_le_conn_complete()
714 struct hci_dev *hdev = conn->hdev; in hci_req_add_le_create_conn() local
728 cp.scan_interval = cpu_to_le16(hdev->le_scan_interval); in hci_req_add_le_create_conn()
750 struct hci_dev *hdev = req->hdev; in hci_req_directed_advertising() local
760 hci_dev_clear_flag(hdev, HCI_LE_ADV); in hci_req_directed_advertising()
773 cp.channel_map = hdev->le_adv_channel_map; in hci_req_directed_advertising()
783 struct hci_conn *hci_connect_le(struct hci_dev *hdev, bdaddr_t *dst, in hci_connect_le() argument
794 if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED)) { in hci_connect_le()
795 if (lmp_le_capable(hdev)) in hci_connect_le()
810 conn = hci_conn_hash_lookup_le(hdev, dst, dst_type); in hci_connect_le()
827 if (hci_lookup_le_connect(hdev)) in hci_connect_le()
839 irk = hci_find_irk_by_addr(hdev, dst, dst_type); in hci_connect_le()
849 conn = hci_conn_add(hdev, LE_LINK, dst, role); in hci_connect_le()
862 hci_req_init(&req, hdev); in hci_connect_le()
870 if (hci_dev_test_flag(hdev, HCI_LE_ADV)) { in hci_connect_le()
881 if (hci_dev_test_flag(hdev, HCI_LE_SCAN) && in hci_connect_le()
882 hdev->le_scan_type == LE_SCAN_ACTIVE) { in hci_connect_le()
892 params = hci_conn_params_lookup(hdev, &conn->dst, conn->dst_type); in hci_connect_le()
899 conn->le_conn_min_interval = hdev->le_conn_min_interval; in hci_connect_le()
900 conn->le_conn_max_interval = hdev->le_conn_max_interval; in hci_connect_le()
901 conn->le_conn_latency = hdev->le_conn_latency; in hci_connect_le()
902 conn->le_supv_timeout = hdev->le_supv_timeout; in hci_connect_le()
911 if (hci_dev_test_flag(hdev, HCI_LE_SCAN)) { in hci_connect_le()
913 hci_dev_set_flag(hdev, HCI_LE_SCAN_INTERRUPTED); in hci_connect_le()
936 static void hci_connect_le_scan_complete(struct hci_dev *hdev, u8 status, in hci_connect_le_scan_complete() argument
947 hci_dev_lock(hdev); in hci_connect_le_scan_complete()
949 conn = hci_conn_hash_lookup_state(hdev, LE_LINK, BT_CONNECT); in hci_connect_le_scan_complete()
953 hci_dev_unlock(hdev); in hci_connect_le_scan_complete()
956 static bool is_connected(struct hci_dev *hdev, bdaddr_t *addr, u8 type) in is_connected() argument
960 conn = hci_conn_hash_lookup_le(hdev, addr, type); in is_connected()
974 struct hci_dev *hdev = req->hdev; in hci_explicit_conn_params_set() local
977 if (is_connected(hdev, addr, addr_type)) in hci_explicit_conn_params_set()
980 params = hci_conn_params_lookup(hdev, addr, addr_type); in hci_explicit_conn_params_set()
982 params = hci_conn_params_add(hdev, addr, addr_type); in hci_explicit_conn_params_set()
998 list_add(¶ms->action, &hdev->pend_le_conns); in hci_explicit_conn_params_set()
1011 struct hci_conn *hci_connect_le_scan(struct hci_dev *hdev, bdaddr_t *dst, in hci_connect_le_scan() argument
1020 if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED)) { in hci_connect_le_scan()
1021 if (lmp_le_capable(hdev)) in hci_connect_le_scan()
1036 conn = hci_conn_hash_lookup_le(hdev, dst, dst_type); in hci_connect_le_scan()
1045 conn = hci_conn_add(hdev, LE_LINK, dst, role); in hci_connect_le_scan()
1049 hci_req_init(&req, hdev); in hci_connect_le_scan()
1073 struct hci_conn *hci_connect_acl(struct hci_dev *hdev, bdaddr_t *dst, in hci_connect_acl() argument
1078 if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) { in hci_connect_acl()
1079 if (lmp_bredr_capable(hdev)) in hci_connect_acl()
1085 acl = hci_conn_hash_lookup_ba(hdev, ACL_LINK, dst); in hci_connect_acl()
1087 acl = hci_conn_add(hdev, ACL_LINK, dst, HCI_ROLE_MASTER); in hci_connect_acl()
1104 struct hci_conn *hci_connect_sco(struct hci_dev *hdev, int type, bdaddr_t *dst, in hci_connect_sco() argument
1110 acl = hci_connect_acl(hdev, dst, BT_SECURITY_LOW, HCI_AT_NO_BONDING); in hci_connect_sco()
1114 sco = hci_conn_hash_lookup_ba(hdev, type, dst); in hci_connect_sco()
1116 sco = hci_conn_add(hdev, type, dst, HCI_ROLE_MASTER); in hci_connect_sco()
1156 if (hci_dev_test_flag(conn->hdev, HCI_SC_ONLY)) { in hci_conn_check_link_mode()
1192 hci_send_cmd(conn->hdev, HCI_OP_AUTH_REQUESTED, in hci_conn_auth()
1216 hci_send_cmd(conn->hdev, HCI_OP_SET_CONN_ENCRYPT, sizeof(cp), in hci_conn_encrypt()
1322 hci_send_cmd(conn->hdev, HCI_OP_SWITCH_ROLE, sizeof(cp), &cp); in hci_conn_switch_role()
1332 struct hci_dev *hdev = conn->hdev; in hci_conn_enter_active_mode() local
1345 hci_send_cmd(hdev, HCI_OP_EXIT_SNIFF_MODE, sizeof(cp), &cp); in hci_conn_enter_active_mode()
1349 if (hdev->idle_timeout > 0) in hci_conn_enter_active_mode()
1350 queue_delayed_work(hdev->workqueue, &conn->idle_work, in hci_conn_enter_active_mode()
1351 msecs_to_jiffies(hdev->idle_timeout)); in hci_conn_enter_active_mode()
1355 void hci_conn_hash_flush(struct hci_dev *hdev) in hci_conn_hash_flush() argument
1357 struct hci_conn_hash *h = &hdev->conn_hash; in hci_conn_hash_flush()
1360 BT_DBG("hdev %s", hdev->name); in hci_conn_hash_flush()
1371 void hci_conn_check_pending(struct hci_dev *hdev) in hci_conn_check_pending() argument
1375 BT_DBG("hdev %s", hdev->name); in hci_conn_check_pending()
1377 hci_dev_lock(hdev); in hci_conn_check_pending()
1379 conn = hci_conn_hash_lookup_state(hdev, ACL_LINK, BT_CONNECT2); in hci_conn_check_pending()
1383 hci_dev_unlock(hdev); in hci_conn_check_pending()
1413 struct hci_dev *hdev; in hci_get_conn_list() local
1428 hdev = hci_dev_get(req.dev_id); in hci_get_conn_list()
1429 if (!hdev) { in hci_get_conn_list()
1436 hci_dev_lock(hdev); in hci_get_conn_list()
1437 list_for_each_entry(c, &hdev->conn_hash.list, list) { in hci_get_conn_list()
1447 hci_dev_unlock(hdev); in hci_get_conn_list()
1449 cl->dev_id = hdev->id; in hci_get_conn_list()
1453 hci_dev_put(hdev); in hci_get_conn_list()
1461 int hci_get_conn_info(struct hci_dev *hdev, void __user *arg) in hci_get_conn_info() argument
1471 hci_dev_lock(hdev); in hci_get_conn_info()
1472 conn = hci_conn_hash_lookup_ba(hdev, req.type, &req.bdaddr); in hci_get_conn_info()
1481 hci_dev_unlock(hdev); in hci_get_conn_info()
1489 int hci_get_auth_info(struct hci_dev *hdev, void __user *arg) in hci_get_auth_info() argument
1497 hci_dev_lock(hdev); in hci_get_auth_info()
1498 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &req.bdaddr); in hci_get_auth_info()
1501 hci_dev_unlock(hdev); in hci_get_auth_info()
1511 struct hci_dev *hdev = conn->hdev; in hci_chan_create() local
1514 BT_DBG("%s hcon %p", hdev->name, conn); in hci_chan_create()
1537 struct hci_dev *hdev = conn->hdev; in hci_chan_del() local
1539 BT_DBG("%s hcon %p chan %p", hdev->name, conn, chan); in hci_chan_del()
1577 struct hci_chan *hci_chan_lookup_handle(struct hci_dev *hdev, __u16 handle) in hci_chan_lookup_handle() argument
1579 struct hci_conn_hash *h = &hdev->conn_hash; in hci_chan_lookup_handle()