Lines Matching +full:cpb +full:- +full:codec

2    BlueZ - Bluetooth protocol stack for Linux
3 Copyright (c) 2000-2001, 2010, Code Aurora Forum. All rights reserved.
70 /* This function requires the caller holds hdev->lock */
74 struct hci_dev *hdev = conn->hdev; in hci_connect_le_scan_cleanup()
79 bdaddr = &conn->dst; in hci_connect_le_scan_cleanup()
80 bdaddr_type = conn->dst_type; in hci_connect_le_scan_cleanup()
85 bdaddr = &irk->bdaddr; in hci_connect_le_scan_cleanup()
86 bdaddr_type = irk->addr_type; in hci_connect_le_scan_cleanup()
89 params = hci_pend_le_action_lookup(&hdev->pend_le_conns, bdaddr, in hci_connect_le_scan_cleanup()
91 if (!params || !params->explicit_connect) in hci_connect_le_scan_cleanup()
99 params->explicit_connect = false; in hci_connect_le_scan_cleanup()
101 list_del_init(&params->action); in hci_connect_le_scan_cleanup()
103 switch (params->auto_connect) { in hci_connect_le_scan_cleanup()
110 list_add(&params->action, &hdev->pend_le_conns); in hci_connect_le_scan_cleanup()
113 list_add(&params->action, &hdev->pend_le_reports); in hci_connect_le_scan_cleanup()
124 struct hci_dev *hdev = conn->hdev; in hci_conn_cleanup()
126 if (test_bit(HCI_CONN_PARAM_REMOVAL_PEND, &conn->flags)) in hci_conn_cleanup()
127 hci_conn_params_del(conn->hdev, &conn->dst, conn->dst_type); in hci_conn_cleanup()
129 if (test_and_clear_bit(HCI_CONN_FLUSH_KEY, &conn->flags)) in hci_conn_cleanup()
130 hci_remove_link_key(hdev, &conn->dst); in hci_conn_cleanup()
136 if (conn->cleanup) in hci_conn_cleanup()
137 conn->cleanup(conn); in hci_conn_cleanup()
139 if (conn->type == SCO_LINK || conn->type == ESCO_LINK) { in hci_conn_cleanup()
140 switch (conn->setting & SCO_AIRMODE_MASK) { in hci_conn_cleanup()
143 if (hdev->notify) in hci_conn_cleanup()
144 hdev->notify(hdev, HCI_NOTIFY_DISABLE_SCO); in hci_conn_cleanup()
148 if (hdev->notify) in hci_conn_cleanup()
149 hdev->notify(hdev, HCI_NOTIFY_CONN_DEL); in hci_conn_cleanup()
154 debugfs_remove_recursive(conn->debugfs); in hci_conn_cleanup()
165 struct hci_dev *hdev = conn->hdev; in le_scan_cleanup()
168 BT_DBG("%s hcon %p", hdev->name, conn); in le_scan_cleanup()
174 list_for_each_entry_rcu(c, &hdev->conn_hash.list, list) { in le_scan_cleanup()
192 BT_DBG("%s hcon %p", conn->hdev->name, conn); in hci_connect_le_scan_remove()
196 * hci_dev_lock and doing cancel_delayed_work_sync(&conn->disc_work). in hci_connect_le_scan_remove()
202 hci_dev_hold(conn->hdev); in hci_connect_le_scan_remove()
209 schedule_work(&conn->le_scan_cleanup); in hci_connect_le_scan_remove()
214 struct hci_dev *hdev = conn->hdev; in hci_acl_create_connection()
228 if (test_bit(HCI_INQUIRY, &hdev->flags)) { in hci_acl_create_connection()
232 conn->state = BT_CONNECT2; in hci_acl_create_connection()
237 conn->state = BT_CONNECT; in hci_acl_create_connection()
238 conn->out = true; in hci_acl_create_connection()
239 conn->role = HCI_ROLE_MASTER; in hci_acl_create_connection()
241 conn->attempt++; in hci_acl_create_connection()
243 conn->link_policy = hdev->link_policy; in hci_acl_create_connection()
246 bacpy(&cp.bdaddr, &conn->dst); in hci_acl_create_connection()
249 ie = hci_inquiry_cache_lookup(hdev, &conn->dst); in hci_acl_create_connection()
252 cp.pscan_rep_mode = ie->data.pscan_rep_mode; in hci_acl_create_connection()
253 cp.pscan_mode = ie->data.pscan_mode; in hci_acl_create_connection()
254 cp.clock_offset = ie->data.clock_offset | in hci_acl_create_connection()
258 memcpy(conn->dev_class, ie->data.dev_class, 3); in hci_acl_create_connection()
261 cp.pkt_type = cpu_to_le16(conn->pkt_type); in hci_acl_create_connection()
262 if (lmp_rswitch_capable(hdev) && !(hdev->link_mode & HCI_LM_MASTER)) in hci_acl_create_connection()
279 if (conn->type == ACL_LINK && conn->role == HCI_ROLE_MASTER && in hci_disconnect()
280 (conn->state == BT_CONNECTED || conn->state == BT_CONFIG)) { in hci_disconnect()
281 struct hci_dev *hdev = conn->hdev; in hci_disconnect()
284 clkoff_cp.handle = cpu_to_le16(conn->handle); in hci_disconnect()
294 struct hci_dev *hdev = conn->hdev; in hci_add_sco()
299 conn->state = BT_CONNECT; in hci_add_sco()
300 conn->out = true; in hci_add_sco()
302 conn->attempt++; in hci_add_sco()
305 cp.pkt_type = cpu_to_le16(conn->pkt_type); in hci_add_sco()
313 for (; conn->attempt <= size; conn->attempt++) { in find_next_esco_param()
314 if (lmp_esco_2m_capable(conn->link) || in find_next_esco_param()
315 (esco_param[conn->attempt - 1].pkt_type & ESCO_2EV3)) in find_next_esco_param()
318 conn, conn->attempt); in find_next_esco_param()
321 return conn->attempt <= size; in find_next_esco_param()
324 static int configure_datapath_sync(struct hci_dev *hdev, struct bt_codec *codec) in configure_datapath_sync() argument
330 err = hdev->get_codec_config_data(hdev, ESCO_LINK, codec, &vnd_len, in configure_datapath_sync()
337 err = -ENOMEM; in configure_datapath_sync()
341 err = hdev->get_data_path_id(hdev, &cmd->data_path_id); in configure_datapath_sync()
345 cmd->vnd_len = vnd_len; in configure_datapath_sync()
346 memcpy(cmd->vnd_data, vnd_data, vnd_len); in configure_datapath_sync()
348 cmd->direction = 0x00; in configure_datapath_sync()
352 cmd->direction = 0x01; in configure_datapath_sync()
366 struct hci_conn *conn = conn_handle->conn; in hci_enhanced_setup_sync()
367 __u16 handle = conn_handle->handle; in hci_enhanced_setup_sync()
375 /* for offload use case, codec needs to configured before opening SCO */ in hci_enhanced_setup_sync()
376 if (conn->codec.data_path) in hci_enhanced_setup_sync()
377 configure_datapath_sync(hdev, &conn->codec); in hci_enhanced_setup_sync()
379 conn->state = BT_CONNECT; in hci_enhanced_setup_sync()
380 conn->out = true; in hci_enhanced_setup_sync()
382 conn->attempt++; in hci_enhanced_setup_sync()
391 switch (conn->codec.id) { in hci_enhanced_setup_sync()
395 return -EINVAL; in hci_enhanced_setup_sync()
397 param = &esco_param_msbc[conn->attempt - 1]; in hci_enhanced_setup_sync()
412 cp.in_data_path = conn->codec.data_path; in hci_enhanced_setup_sync()
413 cp.out_data_path = conn->codec.data_path; in hci_enhanced_setup_sync()
422 param = &esco_param_msbc[conn->attempt - 1]; in hci_enhanced_setup_sync()
437 cp.in_data_path = conn->codec.data_path; in hci_enhanced_setup_sync()
438 cp.out_data_path = conn->codec.data_path; in hci_enhanced_setup_sync()
444 if (lmp_esco_capable(conn->link)) { in hci_enhanced_setup_sync()
447 return -EINVAL; in hci_enhanced_setup_sync()
448 param = &esco_param_cvsd[conn->attempt - 1]; in hci_enhanced_setup_sync()
450 if (conn->attempt > ARRAY_SIZE(sco_param_cvsd)) in hci_enhanced_setup_sync()
451 return -EINVAL; in hci_enhanced_setup_sync()
452 param = &sco_param_cvsd[conn->attempt - 1]; in hci_enhanced_setup_sync()
468 cp.in_data_path = conn->codec.data_path; in hci_enhanced_setup_sync()
469 cp.out_data_path = conn->codec.data_path; in hci_enhanced_setup_sync()
474 return -EINVAL; in hci_enhanced_setup_sync()
477 cp.retrans_effort = param->retrans_effort; in hci_enhanced_setup_sync()
478 cp.pkt_type = __cpu_to_le16(param->pkt_type); in hci_enhanced_setup_sync()
479 cp.max_latency = __cpu_to_le16(param->max_latency); in hci_enhanced_setup_sync()
482 return -EIO; in hci_enhanced_setup_sync()
489 struct hci_dev *hdev = conn->hdev; in hci_setup_sync_conn()
495 conn->state = BT_CONNECT; in hci_setup_sync_conn()
496 conn->out = true; in hci_setup_sync_conn()
498 conn->attempt++; in hci_setup_sync_conn()
504 cp.voice_setting = cpu_to_le16(conn->setting); in hci_setup_sync_conn()
506 switch (conn->setting & SCO_AIRMODE_MASK) { in hci_setup_sync_conn()
511 param = &esco_param_msbc[conn->attempt - 1]; in hci_setup_sync_conn()
514 if (lmp_esco_capable(conn->link)) { in hci_setup_sync_conn()
518 param = &esco_param_cvsd[conn->attempt - 1]; in hci_setup_sync_conn()
520 if (conn->attempt > ARRAY_SIZE(sco_param_cvsd)) in hci_setup_sync_conn()
522 param = &sco_param_cvsd[conn->attempt - 1]; in hci_setup_sync_conn()
529 cp.retrans_effort = param->retrans_effort; in hci_setup_sync_conn()
530 cp.pkt_type = __cpu_to_le16(param->pkt_type); in hci_setup_sync_conn()
531 cp.max_latency = __cpu_to_le16(param->max_latency); in hci_setup_sync_conn()
544 if (enhanced_sync_conn_capable(conn->hdev)) { in hci_setup_sync()
550 conn_handle->conn = conn; in hci_setup_sync()
551 conn_handle->handle = handle; in hci_setup_sync()
552 result = hci_cmd_sync_queue(conn->hdev, hci_enhanced_setup_sync, in hci_setup_sync()
566 struct hci_dev *hdev = conn->hdev; in hci_le_conn_update()
572 params = hci_conn_params_lookup(hdev, &conn->dst, conn->dst_type); in hci_le_conn_update()
574 params->conn_min_interval = min; in hci_le_conn_update()
575 params->conn_max_interval = max; in hci_le_conn_update()
576 params->conn_latency = latency; in hci_le_conn_update()
577 params->supervision_timeout = to_multiplier; in hci_le_conn_update()
583 cp.handle = cpu_to_le16(conn->handle); in hci_le_conn_update()
602 struct hci_dev *hdev = conn->hdev; in hci_le_start_enc()
609 cp.handle = cpu_to_le16(conn->handle); in hci_le_start_enc()
620 struct hci_conn *sco = conn->link; in hci_sco_setup()
628 if (lmp_esco_capable(conn->hdev)) in hci_sco_setup()
629 hci_setup_sync(sco, conn->handle); in hci_sco_setup()
631 hci_add_sco(sco, conn->handle); in hci_sco_setup()
642 int refcnt = atomic_read(&conn->refcnt); in hci_conn_timeout()
644 BT_DBG("hcon %p state %s", conn, state_to_string(conn->state)); in hci_conn_timeout()
659 if (conn->state == BT_CONNECT && conn->type == LE_LINK && in hci_conn_timeout()
660 test_bit(HCI_CONN_SCANNING, &conn->flags)) { in hci_conn_timeout()
673 struct hci_dev *hdev = conn->hdev; in hci_conn_idle()
675 BT_DBG("hcon %p mode %d", conn, conn->mode); in hci_conn_idle()
680 if (conn->mode != HCI_CM_ACTIVE || !(conn->link_policy & HCI_LP_SNIFF)) in hci_conn_idle()
685 cp.handle = cpu_to_le16(conn->handle); in hci_conn_idle()
692 if (!test_and_set_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags)) { in hci_conn_idle()
694 cp.handle = cpu_to_le16(conn->handle); in hci_conn_idle()
695 cp.max_interval = cpu_to_le16(hdev->sniff_max_interval); in hci_conn_idle()
696 cp.min_interval = cpu_to_le16(hdev->sniff_min_interval); in hci_conn_idle()
708 hci_send_cmd(conn->hdev, HCI_OP_USER_CONFIRM_REPLY, sizeof(conn->dst), in hci_conn_auto_accept()
709 &conn->dst); in hci_conn_auto_accept()
733 struct hci_dev *hdev = conn->hdev; in le_conn_timeout()
742 if (conn->role == HCI_ROLE_SLAVE) { in le_conn_timeout()
776 if (bacmp(&conn->dst, BDADDR_ANY)) in bis_list()
779 if (d->big != conn->iso_qos.big || d->bis == BT_ISO_QOS_BIS_UNSET || in bis_list()
780 d->bis != conn->iso_qos.bis) in bis_list()
783 d->count++; in bis_list()
791 if (bacmp(&conn->dst, BDADDR_ANY)) in find_bis()
794 d->count++; in find_bis()
801 bt_dev_dbg(hdev, "big 0x%2.2x bis 0x%2.2x", d->big, d->bis); in terminate_big_sync()
803 hci_remove_ext_adv_instance_sync(hdev, d->bis, NULL); in terminate_big_sync()
809 if (d->count) in terminate_big_sync()
812 return hci_le_terminate_big_sync(hdev, d->big, in terminate_big_sync()
829 return -ENOMEM; in hci_le_terminate_big()
832 d->big = big; in hci_le_terminate_big()
833 d->bis = bis; in hci_le_terminate_big()
843 bt_dev_dbg(hdev, "big 0x%2.2x sync_handle 0x%4.4x", d->big, in big_terminate_sync()
844 d->sync_handle); in big_terminate_sync()
850 if (d->count) in big_terminate_sync()
853 hci_le_big_terminate_sync(hdev, d->big); in big_terminate_sync()
855 return hci_le_pa_terminate_sync(hdev, d->sync_handle); in big_terminate_sync()
866 return -ENOMEM; in hci_le_big_terminate()
869 d->big = big; in hci_le_big_terminate()
870 d->sync_handle = sync_handle; in hci_le_big_terminate()
884 struct hci_dev *hdev = conn->hdev; in bis_cleanup()
888 if (conn->role == HCI_ROLE_MASTER) { in bis_cleanup()
889 if (!test_and_clear_bit(HCI_CONN_PER_ADV, &conn->flags)) in bis_cleanup()
892 hci_le_terminate_big(hdev, conn->iso_qos.big, in bis_cleanup()
893 conn->iso_qos.bis); in bis_cleanup()
895 hci_le_big_terminate(hdev, conn->iso_qos.big, in bis_cleanup()
896 conn->sync_handle); in bis_cleanup()
919 if (!bacmp(&conn->dst, BDADDR_ANY)) in find_cis()
922 d->count++; in find_cis()
931 struct hci_dev *hdev = conn->hdev; in cis_cleanup()
935 d.cig = conn->iso_qos.cig; in cis_cleanup()
944 hci_le_remove_cig(hdev, conn->iso_qos.cig); in cis_cleanup()
952 BT_DBG("%s dst %pMR", hdev->name, dst); in hci_conn_add()
958 bacpy(&conn->dst, dst); in hci_conn_add()
959 bacpy(&conn->src, &hdev->bdaddr); in hci_conn_add()
960 conn->handle = HCI_CONN_HANDLE_UNSET; in hci_conn_add()
961 conn->hdev = hdev; in hci_conn_add()
962 conn->type = type; in hci_conn_add()
963 conn->role = role; in hci_conn_add()
964 conn->mode = HCI_CM_ACTIVE; in hci_conn_add()
965 conn->state = BT_OPEN; in hci_conn_add()
966 conn->auth_type = HCI_AT_GENERAL_BONDING; in hci_conn_add()
967 conn->io_capability = hdev->io_capability; in hci_conn_add()
968 conn->remote_auth = 0xff; in hci_conn_add()
969 conn->key_type = 0xff; in hci_conn_add()
970 conn->rssi = HCI_RSSI_INVALID; in hci_conn_add()
971 conn->tx_power = HCI_TX_POWER_INVALID; in hci_conn_add()
972 conn->max_tx_power = HCI_TX_POWER_INVALID; in hci_conn_add()
974 set_bit(HCI_CONN_POWER_SAVE, &conn->flags); in hci_conn_add()
975 conn->disc_timeout = HCI_DISCONN_TIMEOUT; in hci_conn_add()
978 conn->auth_payload_timeout = DEFAULT_AUTH_PAYLOAD_TIMEOUT; in hci_conn_add()
980 if (conn->role == HCI_ROLE_MASTER) in hci_conn_add()
981 conn->out = true; in hci_conn_add()
985 conn->pkt_type = hdev->pkt_type & ACL_PTYPE_MASK; in hci_conn_add()
988 /* conn->src should reflect the local identity address */ in hci_conn_add()
989 hci_copy_identity_address(hdev, &conn->src, &conn->src_type); in hci_conn_add()
992 /* conn->src should reflect the local identity address */ in hci_conn_add()
993 hci_copy_identity_address(hdev, &conn->src, &conn->src_type); in hci_conn_add()
997 conn->cleanup = bis_cleanup; in hci_conn_add()
998 else if (conn->role == HCI_ROLE_MASTER) in hci_conn_add()
999 conn->cleanup = cis_cleanup; in hci_conn_add()
1004 conn->pkt_type = (hdev->esco_type & SCO_ESCO_MASK) | in hci_conn_add()
1005 (hdev->esco_type & EDR_ESCO_MASK); in hci_conn_add()
1007 conn->pkt_type = hdev->pkt_type & SCO_PTYPE_MASK; in hci_conn_add()
1010 conn->pkt_type = hdev->esco_type & ~EDR_ESCO_MASK; in hci_conn_add()
1014 skb_queue_head_init(&conn->data_q); in hci_conn_add()
1016 INIT_LIST_HEAD(&conn->chan_list); in hci_conn_add()
1018 INIT_DELAYED_WORK(&conn->disc_work, hci_conn_timeout); in hci_conn_add()
1019 INIT_DELAYED_WORK(&conn->auto_accept_work, hci_conn_auto_accept); in hci_conn_add()
1020 INIT_DELAYED_WORK(&conn->idle_work, hci_conn_idle); in hci_conn_add()
1021 INIT_DELAYED_WORK(&conn->le_conn_timeout, le_conn_timeout); in hci_conn_add()
1022 INIT_WORK(&conn->le_scan_cleanup, le_scan_cleanup); in hci_conn_add()
1024 atomic_set(&conn->refcnt, 0); in hci_conn_add()
1034 if (conn->type != SCO_LINK && conn->type != ESCO_LINK) { in hci_conn_add()
1035 if (hdev->notify) in hci_conn_add()
1036 hdev->notify(hdev, HCI_NOTIFY_CONN_ADD); in hci_conn_add()
1046 struct hci_dev *hdev = conn->hdev; in hci_conn_del()
1048 BT_DBG("%s hcon %p handle %d", hdev->name, conn, conn->handle); in hci_conn_del()
1050 cancel_delayed_work_sync(&conn->disc_work); in hci_conn_del()
1051 cancel_delayed_work_sync(&conn->auto_accept_work); in hci_conn_del()
1052 cancel_delayed_work_sync(&conn->idle_work); in hci_conn_del()
1054 if (conn->type == ACL_LINK) { in hci_conn_del()
1055 struct hci_conn *sco = conn->link; in hci_conn_del()
1057 sco->link = NULL; in hci_conn_del()
1060 hdev->acl_cnt += conn->sent; in hci_conn_del()
1061 } else if (conn->type == LE_LINK) { in hci_conn_del()
1062 cancel_delayed_work(&conn->le_conn_timeout); in hci_conn_del()
1064 if (hdev->le_pkts) in hci_conn_del()
1065 hdev->le_cnt += conn->sent; in hci_conn_del()
1067 hdev->acl_cnt += conn->sent; in hci_conn_del()
1069 struct hci_conn *acl = conn->link; in hci_conn_del()
1072 acl->link = NULL; in hci_conn_del()
1077 if (conn->type == ISO_LINK) { in hci_conn_del()
1078 if (hdev->iso_pkts) in hci_conn_del()
1079 hdev->iso_cnt += conn->sent; in hci_conn_del()
1080 else if (hdev->le_pkts) in hci_conn_del()
1081 hdev->le_cnt += conn->sent; in hci_conn_del()
1083 hdev->acl_cnt += conn->sent; in hci_conn_del()
1087 if (conn->amp_mgr) in hci_conn_del()
1088 amp_mgr_put(conn->amp_mgr); in hci_conn_del()
1090 skb_queue_purge(&conn->data_q); in hci_conn_del()
1107 BT_DBG("%pMR -> %pMR", src, dst); in hci_get_route()
1112 if (!test_bit(HCI_UP, &d->flags) || in hci_get_route()
1114 d->dev_type != HCI_PRIMARY) in hci_get_route()
1118 * No source address - find interface with bdaddr != dst in hci_get_route()
1119 * Source address - find interface with bdaddr == src in hci_get_route()
1129 bacpy(&id_addr, &d->bdaddr); in hci_get_route()
1138 /* Convert from HCI to three-value type */ in hci_get_route()
1149 if (bacmp(&d->bdaddr, dst)) { in hci_get_route()
1163 /* This function requires the caller holds hdev->lock */
1166 struct hci_dev *hdev = conn->hdev; in hci_le_conn_failed()
1169 params = hci_pend_le_action_lookup(&hdev->pend_le_conns, &conn->dst, in hci_le_conn_failed()
1170 conn->dst_type); in hci_le_conn_failed()
1171 if (params && params->conn) { in hci_le_conn_failed()
1172 hci_conn_drop(params->conn); in hci_le_conn_failed()
1173 hci_conn_put(params->conn); in hci_le_conn_failed()
1174 params->conn = NULL; in hci_le_conn_failed()
1184 (params && params->explicit_connect)) in hci_le_conn_failed()
1185 mgmt_connect_failed(hdev, &conn->dst, conn->type, in hci_le_conn_failed()
1186 conn->dst_type, status); in hci_le_conn_failed()
1199 /* This function requires the caller holds hdev->lock */
1202 struct hci_dev *hdev = conn->hdev; in hci_conn_failed()
1206 switch (conn->type) { in hci_conn_failed()
1211 mgmt_connect_failed(hdev, &conn->dst, conn->type, in hci_conn_failed()
1212 conn->dst_type, status); in hci_conn_failed()
1216 conn->state = BT_CLOSED; in hci_conn_failed()
1264 return ERR_PTR(-ECONNREFUSED); in hci_connect_le()
1266 return ERR_PTR(-EOPNOTSUPP); in hci_connect_le()
1270 * time, we return -EBUSY if there is any connection attempt running. in hci_connect_le()
1273 return ERR_PTR(-EBUSY); in hci_connect_le()
1281 if (conn && !test_bit(HCI_CONN_SCANNING, &conn->flags)) { in hci_connect_le()
1282 return ERR_PTR(-EBUSY); in hci_connect_le()
1299 if (irk && bacmp(&irk->rpa, BDADDR_ANY)) { in hci_connect_le()
1300 dst = &irk->rpa; in hci_connect_le()
1306 bacpy(&conn->dst, dst); in hci_connect_le()
1310 return ERR_PTR(-ENOMEM); in hci_connect_le()
1312 conn->pending_sec_level = sec_level; in hci_connect_le()
1315 conn->dst_type = dst_type; in hci_connect_le()
1316 conn->sec_level = BT_SECURITY_LOW; in hci_connect_le()
1317 conn->conn_timeout = conn_timeout; in hci_connect_le()
1319 conn->state = BT_CONNECT; in hci_connect_le()
1320 clear_bit(HCI_CONN_SCANNING, &conn->flags); in hci_connect_le()
1340 if (conn->state != BT_CONNECTED) in is_connected()
1346 /* This function requires the caller holds hdev->lock */
1353 return -EISCONN; in hci_explicit_conn_params_set()
1359 return -ENOMEM; in hci_explicit_conn_params_set()
1365 params->auto_connect = HCI_AUTO_CONN_EXPLICIT; in hci_explicit_conn_params_set()
1369 if (params->auto_connect == HCI_AUTO_CONN_DISABLED || in hci_explicit_conn_params_set()
1370 params->auto_connect == HCI_AUTO_CONN_REPORT || in hci_explicit_conn_params_set()
1371 params->auto_connect == HCI_AUTO_CONN_EXPLICIT) { in hci_explicit_conn_params_set()
1372 list_del_init(&params->action); in hci_explicit_conn_params_set()
1373 list_add(&params->action, &hdev->pend_le_conns); in hci_explicit_conn_params_set()
1376 params->explicit_connect = true; in hci_explicit_conn_params_set()
1379 params->auto_connect); in hci_explicit_conn_params_set()
1389 if (qos->big == BT_ISO_QOS_BIG_UNSET) { in qos_set_big()
1401 return -EADDRNOTAVAIL; in qos_set_big()
1404 qos->big = data.big; in qos_set_big()
1415 if (qos->bis == BT_ISO_QOS_BIS_UNSET) { in qos_set_bis()
1419 for (data.bis = 0x01; data.bis < hdev->le_num_of_adv_sets; in qos_set_bis()
1429 if (data.bis == hdev->le_num_of_adv_sets) in qos_set_bis()
1430 return -EADDRNOTAVAIL; in qos_set_bis()
1433 qos->bis = data.bis; in qos_set_bis()
1439 /* This function requires the caller holds hdev->lock */
1450 return ERR_PTR(-ECONNREFUSED); in hci_add_bis()
1451 return ERR_PTR(-EOPNOTSUPP); in hci_add_bis()
1462 data.big = qos->big; in hci_add_bis()
1463 data.bis = qos->bis; in hci_add_bis()
1469 return ERR_PTR(-EADDRINUSE); in hci_add_bis()
1471 conn = hci_conn_hash_lookup_bis(hdev, dst, qos->big, qos->bis); in hci_add_bis()
1473 return ERR_PTR(-EADDRINUSE); in hci_add_bis()
1477 return ERR_PTR(-ENOMEM); in hci_add_bis()
1479 set_bit(HCI_CONN_PER_ADV, &conn->flags); in hci_add_bis()
1480 conn->state = BT_CONNECT; in hci_add_bis()
1486 /* This function requires the caller holds hdev->lock */
1497 return ERR_PTR(-ECONNREFUSED); in hci_connect_le_scan()
1499 return ERR_PTR(-EOPNOTSUPP); in hci_connect_le_scan()
1503 * established. To be able to handle these ATT messages, the user- in hci_connect_le_scan()
1513 if (conn->pending_sec_level < sec_level) in hci_connect_le_scan()
1514 conn->pending_sec_level = sec_level; in hci_connect_le_scan()
1522 return ERR_PTR(-ENOMEM); in hci_connect_le_scan()
1526 return ERR_PTR(-EBUSY); in hci_connect_le_scan()
1529 conn->state = BT_CONNECT; in hci_connect_le_scan()
1530 set_bit(HCI_CONN_SCANNING, &conn->flags); in hci_connect_le_scan()
1531 conn->dst_type = dst_type; in hci_connect_le_scan()
1532 conn->sec_level = BT_SECURITY_LOW; in hci_connect_le_scan()
1533 conn->pending_sec_level = sec_level; in hci_connect_le_scan()
1534 conn->conn_timeout = conn_timeout; in hci_connect_le_scan()
1535 conn->conn_reason = conn_reason; in hci_connect_le_scan()
1552 return ERR_PTR(-ECONNREFUSED); in hci_connect_acl()
1554 return ERR_PTR(-EOPNOTSUPP); in hci_connect_acl()
1561 return ERR_PTR(-ENOMEM); in hci_connect_acl()
1566 acl->conn_reason = conn_reason; in hci_connect_acl()
1567 if (acl->state == BT_OPEN || acl->state == BT_CLOSED) { in hci_connect_acl()
1568 acl->sec_level = BT_SECURITY_LOW; in hci_connect_acl()
1569 acl->pending_sec_level = sec_level; in hci_connect_acl()
1570 acl->auth_type = auth_type; in hci_connect_acl()
1578 __u16 setting, struct bt_codec *codec) in hci_connect_sco() argument
1593 return ERR_PTR(-ENOMEM); in hci_connect_sco()
1597 acl->link = sco; in hci_connect_sco()
1598 sco->link = acl; in hci_connect_sco()
1602 sco->setting = setting; in hci_connect_sco()
1603 sco->codec = *codec; in hci_connect_sco()
1605 if (acl->state == BT_CONNECTED && in hci_connect_sco()
1606 (sco->state == BT_OPEN || sco->state == BT_CLOSED)) { in hci_connect_sco()
1607 set_bit(HCI_CONN_POWER_SAVE, &acl->flags); in hci_connect_sco()
1610 if (test_bit(HCI_CONN_MODE_CHANGE_PEND, &acl->flags)) { in hci_connect_sco()
1612 set_bit(HCI_CONN_SCO_SETUP_PEND, &acl->flags); in hci_connect_sco()
1624 struct hci_cis_params *cis = &d->pdu.cis[d->pdu.cp.num_cis]; in cis_add()
1626 cis->cis_id = qos->cis; in cis_add()
1627 cis->c_sdu = cpu_to_le16(qos->out.sdu); in cis_add()
1628 cis->p_sdu = cpu_to_le16(qos->in.sdu); in cis_add()
1629 cis->c_phy = qos->out.phy ? qos->out.phy : qos->in.phy; in cis_add()
1630 cis->p_phy = qos->in.phy ? qos->in.phy : qos->out.phy; in cis_add()
1631 cis->c_rtn = qos->out.rtn; in cis_add()
1632 cis->p_rtn = qos->in.rtn; in cis_add()
1634 d->pdu.cp.num_cis++; in cis_add()
1642 if (!bacmp(&conn->dst, BDADDR_ANY)) in cis_list()
1645 if (d->cig != conn->iso_qos.cig || d->cis == BT_ISO_QOS_CIS_UNSET || in cis_list()
1646 d->cis != conn->iso_qos.cis) in cis_list()
1649 d->count++; in cis_list()
1651 if (d->pdu.cp.cig_id == BT_ISO_QOS_CIG_UNSET || in cis_list()
1652 d->count >= ARRAY_SIZE(d->pdu.cis)) in cis_list()
1655 cis_add(d, &conn->iso_qos); in cis_list()
1660 struct hci_dev *hdev = conn->hdev; in hci_le_create_big()
1665 cp.handle = qos->big; in hci_le_create_big()
1666 cp.adv_handle = qos->bis; in hci_le_create_big()
1668 hci_cpu_to_le24(qos->out.interval, cp.bis.sdu_interval); in hci_le_create_big()
1669 cp.bis.sdu = cpu_to_le16(qos->out.sdu); in hci_le_create_big()
1670 cp.bis.latency = cpu_to_le16(qos->out.latency); in hci_le_create_big()
1671 cp.bis.rtn = qos->out.rtn; in hci_le_create_big()
1672 cp.bis.phy = qos->out.phy; in hci_le_create_big()
1673 cp.bis.packing = qos->packing; in hci_le_create_big()
1674 cp.bis.framing = qos->framing; in hci_le_create_big()
1683 struct hci_dev *hdev = conn->hdev; in hci_le_set_cig_params()
1689 if (qos->cig == BT_ISO_QOS_CIG_UNSET) { in hci_le_set_cig_params()
1709 qos->cig = data.cig; in hci_le_set_cig_params()
1712 data.pdu.cp.cig_id = qos->cig; in hci_le_set_cig_params()
1713 hci_cpu_to_le24(qos->out.interval, data.pdu.cp.c_interval); in hci_le_set_cig_params()
1714 hci_cpu_to_le24(qos->in.interval, data.pdu.cp.p_interval); in hci_le_set_cig_params()
1715 data.pdu.cp.sca = qos->sca; in hci_le_set_cig_params()
1716 data.pdu.cp.packing = qos->packing; in hci_le_set_cig_params()
1717 data.pdu.cp.framing = qos->framing; in hci_le_set_cig_params()
1718 data.pdu.cp.c_latency = cpu_to_le16(qos->out.latency); in hci_le_set_cig_params()
1719 data.pdu.cp.p_latency = cpu_to_le16(qos->in.latency); in hci_le_set_cig_params()
1721 if (qos->cis != BT_ISO_QOS_CIS_UNSET) { in hci_le_set_cig_params()
1723 data.cig = qos->cig; in hci_le_set_cig_params()
1724 data.cis = qos->cis; in hci_le_set_cig_params()
1735 for (data.cig = qos->cig, data.cis = 0x00; data.cis < 0x11; in hci_le_set_cig_params()
1745 if (qos->cis == BT_ISO_QOS_CIS_UNSET) { in hci_le_set_cig_params()
1747 qos->cis = data.cis; in hci_le_set_cig_params()
1752 if (qos->cis == BT_ISO_QOS_CIS_UNSET || !data.pdu.cp.num_cis) in hci_le_set_cig_params()
1773 return ERR_PTR(-ENOMEM); in hci_bind_cis()
1774 cis->cleanup = cis_cleanup; in hci_bind_cis()
1775 cis->dst_type = dst_type; in hci_bind_cis()
1778 if (cis->state == BT_CONNECTED) in hci_bind_cis()
1782 if (cis->state == BT_BOUND && in hci_bind_cis()
1783 !memcmp(&cis->iso_qos, qos, sizeof(*qos))) in hci_bind_cis()
1787 cis->le_tx_phy = qos->out.phy; in hci_bind_cis()
1788 cis->le_rx_phy = qos->in.phy; in hci_bind_cis()
1793 if (!qos->out.interval) in hci_bind_cis()
1794 qos->out.interval = qos->in.interval; in hci_bind_cis()
1799 if (!qos->in.interval) in hci_bind_cis()
1800 qos->in.interval = qos->out.interval; in hci_bind_cis()
1805 if (!qos->out.latency) in hci_bind_cis()
1806 qos->out.latency = qos->in.latency; in hci_bind_cis()
1811 if (!qos->in.latency) in hci_bind_cis()
1812 qos->in.latency = qos->out.latency; in hci_bind_cis()
1816 return ERR_PTR(-EINVAL); in hci_bind_cis()
1819 cis->iso_qos = *qos; in hci_bind_cis()
1820 cis->state = BT_BOUND; in hci_bind_cis()
1827 struct hci_dev *hdev = conn->hdev; in hci_iso_setup_path()
1832 if (conn->iso_qos.out.sdu) { in hci_iso_setup_path()
1833 cmd.handle = cpu_to_le16(conn->handle); in hci_iso_setup_path()
1836 cmd.codec = 0x03; /* Transparent Data */ in hci_iso_setup_path()
1843 if (conn->iso_qos.in.sdu) { in hci_iso_setup_path()
1844 cmd.handle = cpu_to_le16(conn->handle); in hci_iso_setup_path()
1847 cmd.codec = 0x03; /* Transparent Data */ in hci_iso_setup_path()
1867 cmd.cis[0].acl_handle = cpu_to_le16(conn->link->handle); in hci_create_cis_sync()
1868 cmd.cis[0].cis_handle = cpu_to_le16(conn->handle); in hci_create_cis_sync()
1870 cig = conn->iso_qos.cig; in hci_create_cis_sync()
1876 list_for_each_entry_rcu(conn, &hdev->conn_hash.list, list) { in hci_create_cis_sync()
1879 if (conn == data || conn->type != ISO_LINK || in hci_create_cis_sync()
1880 conn->state == BT_CONNECTED || conn->iso_qos.cig != cig) in hci_create_cis_sync()
1884 if (conn->link->state != BT_CONNECTED || in hci_create_cis_sync()
1885 conn->state != BT_CONNECT) { in hci_create_cis_sync()
1901 cis->acl_handle = cpu_to_le16(conn->link->handle); in hci_create_cis_sync()
1902 cis->cis_handle = cpu_to_le16(conn->handle); in hci_create_cis_sync()
1920 struct hci_dev *hdev = conn->hdev; in hci_le_create_cis()
1923 switch (conn->type) { in hci_le_create_cis()
1925 if (!conn->link || conn->state != BT_CONNECTED) in hci_le_create_cis()
1926 return -EINVAL; in hci_le_create_cis()
1927 cis = conn->link; in hci_le_create_cis()
1933 return -EINVAL; in hci_le_create_cis()
1936 if (cis->state == BT_CONNECT) in hci_le_create_cis()
1944 cis->state = BT_CONNECT; in hci_le_create_cis()
1953 if (!qos->sdu && qos->phy) { in hci_iso_qos_setup()
1954 if (hdev->iso_mtu > 0) in hci_iso_qos_setup()
1955 qos->sdu = hdev->iso_mtu; in hci_iso_qos_setup()
1956 else if (hdev->le_mtu > 0) in hci_iso_qos_setup()
1957 qos->sdu = hdev->le_mtu; in hci_iso_qos_setup()
1959 qos->sdu = hdev->acl_mtu; in hci_iso_qos_setup()
1963 if (qos->phy == BT_ISO_PHY_ANY) in hci_iso_qos_setup()
1964 qos->phy = phy; in hci_iso_qos_setup()
1967 if (!qos->interval) in hci_iso_qos_setup()
1969 qos->interval = conn->le_conn_interval * 1250; in hci_iso_qos_setup()
1972 if (!qos->latency) in hci_iso_qos_setup()
1973 qos->latency = conn->le_conn_latency; in hci_iso_qos_setup()
1980 conn->le_tx_phy = qos->out.phy; in hci_bind_bis()
1981 conn->le_tx_phy = qos->out.phy; in hci_bind_bis()
1982 conn->iso_qos = *qos; in hci_bind_bis()
1983 conn->state = BT_BOUND; in hci_bind_bis()
1991 struct bt_iso_qos *qos = &conn->iso_qos; in create_big_sync()
1996 if (qos->out.phy == 0x02) in create_big_sync()
2000 interval = qos->out.interval / 1250; in create_big_sync()
2002 if (qos->bis) in create_big_sync()
2003 sync_interval = qos->sync_interval * 1600; in create_big_sync()
2005 err = hci_start_per_adv_sync(hdev, qos->bis, conn->le_per_adv_data_len, in create_big_sync()
2006 conn->le_per_adv_data, flags, interval, in create_big_sync()
2011 return hci_le_create_big(conn, &conn->iso_qos); in create_big_sync()
2047 return -EBUSY; in hci_pa_create_sync()
2052 return -ENOMEM; in hci_pa_create_sync()
2062 cp->sid = sid; in hci_pa_create_sync()
2063 cp->addr_type = dst_type; in hci_pa_create_sync()
2064 bacpy(&cp->addr, dst); in hci_pa_create_sync()
2080 return -EINVAL; in hci_le_big_create_sync()
2087 pdu.cp.handle = qos->big; in hci_le_big_create_sync()
2124 return ERR_PTR(-ENOMEM); in hci_connect_bis()
2129 base_len = eir_append_service_data(conn->le_per_adv_data, 0, in hci_connect_bis()
2131 conn->le_per_adv_data_len = base_len; in hci_connect_bis()
2142 hci_iso_qos_setup(hdev, conn, &qos->out, in hci_connect_bis()
2143 conn->le_tx_phy ? conn->le_tx_phy : in hci_connect_bis()
2144 hdev->le_tx_def_phys); in hci_connect_bis()
2168 hci_iso_qos_setup(hdev, le, &qos->out, in hci_connect_cis()
2169 le->le_tx_phy ? le->le_tx_phy : hdev->le_tx_def_phys); in hci_connect_cis()
2170 hci_iso_qos_setup(hdev, le, &qos->in, in hci_connect_cis()
2171 le->le_rx_phy ? le->le_rx_phy : hdev->le_rx_def_phys); in hci_connect_cis()
2179 le->link = cis; in hci_connect_cis()
2180 cis->link = le; in hci_connect_cis()
2187 if (le->state == BT_CONNECTED && cis->handle != HCI_CONN_HANDLE_UNSET) in hci_connect_cis()
2199 * Connections is used and the link is encrypted with AES-CCM in hci_conn_check_link_mode()
2200 * using a P-256 authenticated combination key. in hci_conn_check_link_mode()
2202 if (hci_dev_test_flag(conn->hdev, HCI_SC_ONLY)) { in hci_conn_check_link_mode()
2204 !test_bit(HCI_CONN_AES_CCM, &conn->flags) || in hci_conn_check_link_mode()
2205 conn->key_type != HCI_LK_AUTH_COMBINATION_P256) in hci_conn_check_link_mode()
2214 * 128-bit equivalent strength for link and encryption keys in hci_conn_check_link_mode()
2216 * SAFER+ not allowed, and P-192 not allowed; encryption key in hci_conn_check_link_mode()
2219 if (conn->sec_level == BT_SECURITY_FIPS && in hci_conn_check_link_mode()
2220 !test_bit(HCI_CONN_AES_CCM, &conn->flags)) { in hci_conn_check_link_mode()
2221 bt_dev_err(conn->hdev, in hci_conn_check_link_mode()
2222 "Invalid security: Missing AES-CCM usage"); in hci_conn_check_link_mode()
2227 !test_bit(HCI_CONN_ENCRYPT, &conn->flags)) in hci_conn_check_link_mode()
2238 if (conn->pending_sec_level > sec_level) in hci_conn_auth()
2239 sec_level = conn->pending_sec_level; in hci_conn_auth()
2241 if (sec_level > conn->sec_level) in hci_conn_auth()
2242 conn->pending_sec_level = sec_level; in hci_conn_auth()
2243 else if (test_bit(HCI_CONN_AUTH, &conn->flags)) in hci_conn_auth()
2247 auth_type |= (conn->auth_type & 0x01); in hci_conn_auth()
2249 conn->auth_type = auth_type; in hci_conn_auth()
2251 if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->flags)) { in hci_conn_auth()
2254 cp.handle = cpu_to_le16(conn->handle); in hci_conn_auth()
2255 hci_send_cmd(conn->hdev, HCI_OP_AUTH_REQUESTED, in hci_conn_auth()
2261 if (test_bit(HCI_CONN_ENCRYPT, &conn->flags)) in hci_conn_auth()
2262 set_bit(HCI_CONN_REAUTH_PEND, &conn->flags); in hci_conn_auth()
2264 set_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags); in hci_conn_auth()
2275 if (!test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags)) { in hci_conn_encrypt()
2277 cp.handle = cpu_to_le16(conn->handle); in hci_conn_encrypt()
2279 hci_send_cmd(conn->hdev, HCI_OP_SET_CONN_ENCRYPT, sizeof(cp), in hci_conn_encrypt()
2290 if (conn->type == LE_LINK) in hci_conn_security()
2303 if (!test_bit(HCI_CONN_AUTH, &conn->flags)) in hci_conn_security()
2308 if (conn->key_type == HCI_LK_AUTH_COMBINATION_P256 && in hci_conn_security()
2314 if ((conn->key_type == HCI_LK_AUTH_COMBINATION_P192 || in hci_conn_security()
2315 conn->key_type == HCI_LK_AUTH_COMBINATION_P256) && in hci_conn_security()
2321 if ((conn->key_type == HCI_LK_UNAUTH_COMBINATION_P192 || in hci_conn_security()
2322 conn->key_type == HCI_LK_UNAUTH_COMBINATION_P256) && in hci_conn_security()
2330 if (conn->key_type == HCI_LK_COMBINATION && in hci_conn_security()
2332 conn->pin_length == 16)) in hci_conn_security()
2336 if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags)) in hci_conn_security()
2340 set_bit(HCI_CONN_AUTH_INITIATOR, &conn->flags); in hci_conn_security()
2346 if (test_bit(HCI_CONN_ENCRYPT, &conn->flags)) { in hci_conn_security()
2350 if (!conn->enc_key_size) in hci_conn_security()
2367 /* Accept if non-secure or higher security level is required */ in hci_conn_check_secure()
2372 if (conn->sec_level == BT_SECURITY_HIGH || in hci_conn_check_secure()
2373 conn->sec_level == BT_SECURITY_FIPS) in hci_conn_check_secure()
2386 if (role == conn->role) in hci_conn_switch_role()
2389 if (!test_and_set_bit(HCI_CONN_RSWITCH_PEND, &conn->flags)) { in hci_conn_switch_role()
2391 bacpy(&cp.bdaddr, &conn->dst); in hci_conn_switch_role()
2393 hci_send_cmd(conn->hdev, HCI_OP_SWITCH_ROLE, sizeof(cp), &cp); in hci_conn_switch_role()
2403 struct hci_dev *hdev = conn->hdev; in hci_conn_enter_active_mode()
2405 BT_DBG("hcon %p mode %d", conn, conn->mode); in hci_conn_enter_active_mode()
2407 if (conn->mode != HCI_CM_SNIFF) in hci_conn_enter_active_mode()
2410 if (!test_bit(HCI_CONN_POWER_SAVE, &conn->flags) && !force_active) in hci_conn_enter_active_mode()
2413 if (!test_and_set_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags)) { in hci_conn_enter_active_mode()
2415 cp.handle = cpu_to_le16(conn->handle); in hci_conn_enter_active_mode()
2420 if (hdev->idle_timeout > 0) in hci_conn_enter_active_mode()
2421 queue_delayed_work(hdev->workqueue, &conn->idle_work, in hci_conn_enter_active_mode()
2422 msecs_to_jiffies(hdev->idle_timeout)); in hci_conn_enter_active_mode()
2428 struct hci_conn_hash *h = &hdev->conn_hash; in hci_conn_hash_flush()
2431 BT_DBG("hdev %s", hdev->name); in hci_conn_hash_flush()
2433 list_for_each_entry_safe(c, n, &h->list, list) { in hci_conn_hash_flush()
2434 c->state = BT_CLOSED; in hci_conn_hash_flush()
2446 BT_DBG("hdev %s", hdev->name); in hci_conn_check_pending()
2461 if (conn->role == HCI_ROLE_MASTER) in get_link_mode()
2464 if (test_bit(HCI_CONN_ENCRYPT, &conn->flags)) in get_link_mode()
2467 if (test_bit(HCI_CONN_AUTH, &conn->flags)) in get_link_mode()
2470 if (test_bit(HCI_CONN_SECURE, &conn->flags)) in get_link_mode()
2473 if (test_bit(HCI_CONN_FIPS, &conn->flags)) in get_link_mode()
2488 return -EFAULT; in hci_get_conn_list()
2491 return -EINVAL; in hci_get_conn_list()
2497 return -ENOMEM; in hci_get_conn_list()
2502 return -ENODEV; in hci_get_conn_list()
2505 ci = cl->conn_info; in hci_get_conn_list()
2508 list_for_each_entry(c, &hdev->conn_hash.list, list) { in hci_get_conn_list()
2509 bacpy(&(ci + n)->bdaddr, &c->dst); in hci_get_conn_list()
2510 (ci + n)->handle = c->handle; in hci_get_conn_list()
2511 (ci + n)->type = c->type; in hci_get_conn_list()
2512 (ci + n)->out = c->out; in hci_get_conn_list()
2513 (ci + n)->state = c->state; in hci_get_conn_list()
2514 (ci + n)->link_mode = get_link_mode(c); in hci_get_conn_list()
2520 cl->dev_id = hdev->id; in hci_get_conn_list()
2521 cl->conn_num = n; in hci_get_conn_list()
2529 return err ? -EFAULT : 0; in hci_get_conn_list()
2540 return -EFAULT; in hci_get_conn_info()
2545 bacpy(&ci.bdaddr, &conn->dst); in hci_get_conn_info()
2546 ci.handle = conn->handle; in hci_get_conn_info()
2547 ci.type = conn->type; in hci_get_conn_info()
2548 ci.out = conn->out; in hci_get_conn_info()
2549 ci.state = conn->state; in hci_get_conn_info()
2555 return -ENOENT; in hci_get_conn_info()
2557 return copy_to_user(ptr, &ci, sizeof(ci)) ? -EFAULT : 0; in hci_get_conn_info()
2566 return -EFAULT; in hci_get_auth_info()
2571 req.type = conn->auth_type; in hci_get_auth_info()
2575 return -ENOENT; in hci_get_auth_info()
2577 return copy_to_user(arg, &req, sizeof(req)) ? -EFAULT : 0; in hci_get_auth_info()
2582 struct hci_dev *hdev = conn->hdev; in hci_chan_create()
2585 BT_DBG("%s hcon %p", hdev->name, conn); in hci_chan_create()
2587 if (test_bit(HCI_CONN_DROP, &conn->flags)) { in hci_chan_create()
2596 chan->conn = hci_conn_get(conn); in hci_chan_create()
2597 skb_queue_head_init(&chan->data_q); in hci_chan_create()
2598 chan->state = BT_CONNECTED; in hci_chan_create()
2600 list_add_rcu(&chan->list, &conn->chan_list); in hci_chan_create()
2607 struct hci_conn *conn = chan->conn; in hci_chan_del()
2608 struct hci_dev *hdev = conn->hdev; in hci_chan_del()
2610 BT_DBG("%s hcon %p chan %p", hdev->name, conn, chan); in hci_chan_del()
2612 list_del_rcu(&chan->list); in hci_chan_del()
2617 set_bit(HCI_CONN_DROP, &conn->flags); in hci_chan_del()
2621 skb_queue_purge(&chan->data_q); in hci_chan_del()
2631 list_for_each_entry_safe(chan, n, &conn->chan_list, list) in hci_chan_list_flush()
2640 list_for_each_entry(hchan, &hcon->chan_list, list) { in __hci_chan_lookup_handle()
2641 if (hchan->handle == handle) in __hci_chan_lookup_handle()
2650 struct hci_conn_hash *h = &hdev->conn_hash; in hci_chan_lookup_handle()
2656 list_for_each_entry_rcu(hcon, &h->list, list) { in hci_chan_lookup_handle()
2673 * CPB logical transport types. in hci_conn_get_phy()
2675 switch (conn->type) { in hci_conn_get_phy()
2690 if (conn->pkt_type & (HCI_DM3 | HCI_DH3)) in hci_conn_get_phy()
2693 if (conn->pkt_type & (HCI_DM5 | HCI_DH5)) in hci_conn_get_phy()
2697 * 2-DH1, 2-DH3 and 2-DH5. in hci_conn_get_phy()
2699 if (!(conn->pkt_type & HCI_2DH1)) in hci_conn_get_phy()
2702 if (!(conn->pkt_type & HCI_2DH3)) in hci_conn_get_phy()
2705 if (!(conn->pkt_type & HCI_2DH5)) in hci_conn_get_phy()
2709 * 3-DH1, 3-DH3 and 3-DH5. in hci_conn_get_phy()
2711 if (!(conn->pkt_type & HCI_3DH1)) in hci_conn_get_phy()
2714 if (!(conn->pkt_type & HCI_3DH3)) in hci_conn_get_phy()
2717 if (!(conn->pkt_type & HCI_3DH5)) in hci_conn_get_phy()
2726 if (!(conn->pkt_type & (ESCO_EV4 | ESCO_EV5))) in hci_conn_get_phy()
2729 /* eSCO logical transport (2 Mb/s): 2-EV3, 2-EV5 */ in hci_conn_get_phy()
2730 if (!(conn->pkt_type & ESCO_2EV3)) in hci_conn_get_phy()
2733 if (!(conn->pkt_type & ESCO_2EV5)) in hci_conn_get_phy()
2736 /* eSCO logical transport (3 Mb/s): 3-EV3, 3-EV5 */ in hci_conn_get_phy()
2737 if (!(conn->pkt_type & ESCO_3EV3)) in hci_conn_get_phy()
2740 if (!(conn->pkt_type & ESCO_3EV5)) in hci_conn_get_phy()
2746 if (conn->le_tx_phy & HCI_LE_SET_PHY_1M) in hci_conn_get_phy()
2749 if (conn->le_rx_phy & HCI_LE_SET_PHY_1M) in hci_conn_get_phy()
2752 if (conn->le_tx_phy & HCI_LE_SET_PHY_2M) in hci_conn_get_phy()
2755 if (conn->le_rx_phy & HCI_LE_SET_PHY_2M) in hci_conn_get_phy()
2758 if (conn->le_tx_phy & HCI_LE_SET_PHY_CODED) in hci_conn_get_phy()
2761 if (conn->le_rx_phy & HCI_LE_SET_PHY_CODED) in hci_conn_get_phy()
2774 switch (conn->state) { in hci_abort_conn()
2777 if (conn->type == AMP_LINK) { in hci_abort_conn()
2780 cp.phy_handle = HCI_PHY_HANDLE(conn->handle); in hci_abort_conn()
2782 r = hci_send_cmd(conn->hdev, HCI_OP_DISCONN_PHY_LINK, in hci_abort_conn()
2787 dc.handle = cpu_to_le16(conn->handle); in hci_abort_conn()
2789 r = hci_send_cmd(conn->hdev, HCI_OP_DISCONNECT, in hci_abort_conn()
2793 conn->state = BT_DISCONN; in hci_abort_conn()
2797 if (conn->type == LE_LINK) { in hci_abort_conn()
2798 if (test_bit(HCI_CONN_SCANNING, &conn->flags)) in hci_abort_conn()
2800 r = hci_send_cmd(conn->hdev, in hci_abort_conn()
2802 } else if (conn->type == ACL_LINK) { in hci_abort_conn()
2803 if (conn->hdev->hci_ver < BLUETOOTH_VER_1_2) in hci_abort_conn()
2805 r = hci_send_cmd(conn->hdev, in hci_abort_conn()
2807 6, &conn->dst); in hci_abort_conn()
2811 if (conn->type == ACL_LINK) { in hci_abort_conn()
2814 bacpy(&rej.bdaddr, &conn->dst); in hci_abort_conn()
2817 r = hci_send_cmd(conn->hdev, in hci_abort_conn()
2820 } else if (conn->type == SCO_LINK || conn->type == ESCO_LINK) { in hci_abort_conn()
2823 bacpy(&rej.bdaddr, &conn->dst); in hci_abort_conn()
2826 * allowed error values (0x0D-0x0F) which isn't in hci_abort_conn()
2828 * function. To be safe hard-code one of the in hci_abort_conn()
2833 r = hci_send_cmd(conn->hdev, in hci_abort_conn()
2839 conn->state = BT_CLOSED; in hci_abort_conn()