xref: /openbmc/linux/net/bluetooth/hci_conn.c (revision 3d40aed8)
1 /*
2    BlueZ - Bluetooth protocol stack for Linux
3    Copyright (c) 2000-2001, 2010, Code Aurora Forum. All rights reserved.
4    Copyright 2023 NXP
5 
6    Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
7 
8    This program is free software; you can redistribute it and/or modify
9    it under the terms of the GNU General Public License version 2 as
10    published by the Free Software Foundation;
11 
12    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
13    OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14    FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
15    IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
16    CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
17    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
18    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
19    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
20 
21    ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
22    COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
23    SOFTWARE IS DISCLAIMED.
24 */
25 
26 /* Bluetooth HCI connection handling. */
27 
28 #include <linux/export.h>
29 #include <linux/debugfs.h>
30 
31 #include <net/bluetooth/bluetooth.h>
32 #include <net/bluetooth/hci_core.h>
33 #include <net/bluetooth/l2cap.h>
34 #include <net/bluetooth/iso.h>
35 #include <net/bluetooth/mgmt.h>
36 
37 #include "hci_request.h"
38 #include "smp.h"
39 #include "a2mp.h"
40 #include "eir.h"
41 
42 struct sco_param {
43 	u16 pkt_type;
44 	u16 max_latency;
45 	u8  retrans_effort;
46 };
47 
48 struct conn_handle_t {
49 	struct hci_conn *conn;
50 	__u16 handle;
51 };
52 
53 static const struct sco_param esco_param_cvsd[] = {
54 	{ EDR_ESCO_MASK & ~ESCO_2EV3, 0x000a,	0x01 }, /* S3 */
55 	{ EDR_ESCO_MASK & ~ESCO_2EV3, 0x0007,	0x01 }, /* S2 */
56 	{ EDR_ESCO_MASK | ESCO_EV3,   0x0007,	0x01 }, /* S1 */
57 	{ EDR_ESCO_MASK | ESCO_HV3,   0xffff,	0x01 }, /* D1 */
58 	{ EDR_ESCO_MASK | ESCO_HV1,   0xffff,	0x01 }, /* D0 */
59 };
60 
61 static const struct sco_param sco_param_cvsd[] = {
62 	{ EDR_ESCO_MASK | ESCO_HV3,   0xffff,	0xff }, /* D1 */
63 	{ EDR_ESCO_MASK | ESCO_HV1,   0xffff,	0xff }, /* D0 */
64 };
65 
66 static const struct sco_param esco_param_msbc[] = {
67 	{ EDR_ESCO_MASK & ~ESCO_2EV3, 0x000d,	0x02 }, /* T2 */
68 	{ EDR_ESCO_MASK | ESCO_EV3,   0x0008,	0x02 }, /* T1 */
69 };
70 
71 /* This function requires the caller holds hdev->lock */
72 static void hci_connect_le_scan_cleanup(struct hci_conn *conn, u8 status)
73 {
74 	struct hci_conn_params *params;
75 	struct hci_dev *hdev = conn->hdev;
76 	struct smp_irk *irk;
77 	bdaddr_t *bdaddr;
78 	u8 bdaddr_type;
79 
80 	bdaddr = &conn->dst;
81 	bdaddr_type = conn->dst_type;
82 
83 	/* Check if we need to convert to identity address */
84 	irk = hci_get_irk(hdev, bdaddr, bdaddr_type);
85 	if (irk) {
86 		bdaddr = &irk->bdaddr;
87 		bdaddr_type = irk->addr_type;
88 	}
89 
90 	params = hci_pend_le_action_lookup(&hdev->pend_le_conns, bdaddr,
91 					   bdaddr_type);
92 	if (!params)
93 		return;
94 
95 	if (params->conn) {
96 		hci_conn_drop(params->conn);
97 		hci_conn_put(params->conn);
98 		params->conn = NULL;
99 	}
100 
101 	if (!params->explicit_connect)
102 		return;
103 
104 	/* If the status indicates successful cancellation of
105 	 * the attempt (i.e. Unknown Connection Id) there's no point of
106 	 * notifying failure since we'll go back to keep trying to
107 	 * connect. The only exception is explicit connect requests
108 	 * where a timeout + cancel does indicate an actual failure.
109 	 */
110 	if (status && status != HCI_ERROR_UNKNOWN_CONN_ID)
111 		mgmt_connect_failed(hdev, &conn->dst, conn->type,
112 				    conn->dst_type, status);
113 
114 	/* The connection attempt was doing scan for new RPA, and is
115 	 * in scan phase. If params are not associated with any other
116 	 * autoconnect action, remove them completely. If they are, just unmark
117 	 * them as waiting for connection, by clearing explicit_connect field.
118 	 */
119 	params->explicit_connect = false;
120 
121 	hci_pend_le_list_del_init(params);
122 
123 	switch (params->auto_connect) {
124 	case HCI_AUTO_CONN_EXPLICIT:
125 		hci_conn_params_del(hdev, bdaddr, bdaddr_type);
126 		/* return instead of break to avoid duplicate scan update */
127 		return;
128 	case HCI_AUTO_CONN_DIRECT:
129 	case HCI_AUTO_CONN_ALWAYS:
130 		hci_pend_le_list_add(params, &hdev->pend_le_conns);
131 		break;
132 	case HCI_AUTO_CONN_REPORT:
133 		hci_pend_le_list_add(params, &hdev->pend_le_reports);
134 		break;
135 	default:
136 		break;
137 	}
138 
139 	hci_update_passive_scan(hdev);
140 }
141 
142 static void hci_conn_cleanup(struct hci_conn *conn)
143 {
144 	struct hci_dev *hdev = conn->hdev;
145 
146 	if (test_bit(HCI_CONN_PARAM_REMOVAL_PEND, &conn->flags))
147 		hci_conn_params_del(conn->hdev, &conn->dst, conn->dst_type);
148 
149 	if (test_and_clear_bit(HCI_CONN_FLUSH_KEY, &conn->flags))
150 		hci_remove_link_key(hdev, &conn->dst);
151 
152 	hci_chan_list_flush(conn);
153 
154 	hci_conn_hash_del(hdev, conn);
155 
156 	if (conn->cleanup)
157 		conn->cleanup(conn);
158 
159 	if (conn->type == SCO_LINK || conn->type == ESCO_LINK) {
160 		switch (conn->setting & SCO_AIRMODE_MASK) {
161 		case SCO_AIRMODE_CVSD:
162 		case SCO_AIRMODE_TRANSP:
163 			if (hdev->notify)
164 				hdev->notify(hdev, HCI_NOTIFY_DISABLE_SCO);
165 			break;
166 		}
167 	} else {
168 		if (hdev->notify)
169 			hdev->notify(hdev, HCI_NOTIFY_CONN_DEL);
170 	}
171 
172 	hci_conn_del_sysfs(conn);
173 
174 	debugfs_remove_recursive(conn->debugfs);
175 
176 	hci_dev_put(hdev);
177 
178 	hci_conn_put(conn);
179 }
180 
181 static void le_scan_cleanup(struct work_struct *work)
182 {
183 	struct hci_conn *conn = container_of(work, struct hci_conn,
184 					     le_scan_cleanup);
185 	struct hci_dev *hdev = conn->hdev;
186 	struct hci_conn *c = NULL;
187 
188 	BT_DBG("%s hcon %p", hdev->name, conn);
189 
190 	hci_dev_lock(hdev);
191 
192 	/* Check that the hci_conn is still around */
193 	rcu_read_lock();
194 	list_for_each_entry_rcu(c, &hdev->conn_hash.list, list) {
195 		if (c == conn)
196 			break;
197 	}
198 	rcu_read_unlock();
199 
200 	if (c == conn) {
201 		hci_connect_le_scan_cleanup(conn, 0x00);
202 		hci_conn_cleanup(conn);
203 	}
204 
205 	hci_dev_unlock(hdev);
206 	hci_dev_put(hdev);
207 	hci_conn_put(conn);
208 }
209 
210 static void hci_connect_le_scan_remove(struct hci_conn *conn)
211 {
212 	BT_DBG("%s hcon %p", conn->hdev->name, conn);
213 
214 	/* We can't call hci_conn_del/hci_conn_cleanup here since that
215 	 * could deadlock with another hci_conn_del() call that's holding
216 	 * hci_dev_lock and doing cancel_delayed_work_sync(&conn->disc_work).
217 	 * Instead, grab temporary extra references to the hci_dev and
218 	 * hci_conn and perform the necessary cleanup in a separate work
219 	 * callback.
220 	 */
221 
222 	hci_dev_hold(conn->hdev);
223 	hci_conn_get(conn);
224 
225 	/* Even though we hold a reference to the hdev, many other
226 	 * things might get cleaned up meanwhile, including the hdev's
227 	 * own workqueue, so we can't use that for scheduling.
228 	 */
229 	schedule_work(&conn->le_scan_cleanup);
230 }
231 
232 static void hci_acl_create_connection(struct hci_conn *conn)
233 {
234 	struct hci_dev *hdev = conn->hdev;
235 	struct inquiry_entry *ie;
236 	struct hci_cp_create_conn cp;
237 
238 	BT_DBG("hcon %p", conn);
239 
240 	/* Many controllers disallow HCI Create Connection while it is doing
241 	 * HCI Inquiry. So we cancel the Inquiry first before issuing HCI Create
242 	 * Connection. This may cause the MGMT discovering state to become false
243 	 * without user space's request but it is okay since the MGMT Discovery
244 	 * APIs do not promise that discovery should be done forever. Instead,
245 	 * the user space monitors the status of MGMT discovering and it may
246 	 * request for discovery again when this flag becomes false.
247 	 */
248 	if (test_bit(HCI_INQUIRY, &hdev->flags)) {
249 		/* Put this connection to "pending" state so that it will be
250 		 * executed after the inquiry cancel command complete event.
251 		 */
252 		conn->state = BT_CONNECT2;
253 		hci_send_cmd(hdev, HCI_OP_INQUIRY_CANCEL, 0, NULL);
254 		return;
255 	}
256 
257 	conn->state = BT_CONNECT;
258 	conn->out = true;
259 	conn->role = HCI_ROLE_MASTER;
260 
261 	conn->attempt++;
262 
263 	conn->link_policy = hdev->link_policy;
264 
265 	memset(&cp, 0, sizeof(cp));
266 	bacpy(&cp.bdaddr, &conn->dst);
267 	cp.pscan_rep_mode = 0x02;
268 
269 	ie = hci_inquiry_cache_lookup(hdev, &conn->dst);
270 	if (ie) {
271 		if (inquiry_entry_age(ie) <= INQUIRY_ENTRY_AGE_MAX) {
272 			cp.pscan_rep_mode = ie->data.pscan_rep_mode;
273 			cp.pscan_mode     = ie->data.pscan_mode;
274 			cp.clock_offset   = ie->data.clock_offset |
275 					    cpu_to_le16(0x8000);
276 		}
277 
278 		memcpy(conn->dev_class, ie->data.dev_class, 3);
279 	}
280 
281 	cp.pkt_type = cpu_to_le16(conn->pkt_type);
282 	if (lmp_rswitch_capable(hdev) && !(hdev->link_mode & HCI_LM_MASTER))
283 		cp.role_switch = 0x01;
284 	else
285 		cp.role_switch = 0x00;
286 
287 	hci_send_cmd(hdev, HCI_OP_CREATE_CONN, sizeof(cp), &cp);
288 }
289 
290 int hci_disconnect(struct hci_conn *conn, __u8 reason)
291 {
292 	BT_DBG("hcon %p", conn);
293 
294 	/* When we are central of an established connection and it enters
295 	 * the disconnect timeout, then go ahead and try to read the
296 	 * current clock offset.  Processing of the result is done
297 	 * within the event handling and hci_clock_offset_evt function.
298 	 */
299 	if (conn->type == ACL_LINK && conn->role == HCI_ROLE_MASTER &&
300 	    (conn->state == BT_CONNECTED || conn->state == BT_CONFIG)) {
301 		struct hci_dev *hdev = conn->hdev;
302 		struct hci_cp_read_clock_offset clkoff_cp;
303 
304 		clkoff_cp.handle = cpu_to_le16(conn->handle);
305 		hci_send_cmd(hdev, HCI_OP_READ_CLOCK_OFFSET, sizeof(clkoff_cp),
306 			     &clkoff_cp);
307 	}
308 
309 	return hci_abort_conn(conn, reason);
310 }
311 
312 static void hci_add_sco(struct hci_conn *conn, __u16 handle)
313 {
314 	struct hci_dev *hdev = conn->hdev;
315 	struct hci_cp_add_sco cp;
316 
317 	BT_DBG("hcon %p", conn);
318 
319 	conn->state = BT_CONNECT;
320 	conn->out = true;
321 
322 	conn->attempt++;
323 
324 	cp.handle   = cpu_to_le16(handle);
325 	cp.pkt_type = cpu_to_le16(conn->pkt_type);
326 
327 	hci_send_cmd(hdev, HCI_OP_ADD_SCO, sizeof(cp), &cp);
328 }
329 
330 static bool find_next_esco_param(struct hci_conn *conn,
331 				 const struct sco_param *esco_param, int size)
332 {
333 	if (!conn->parent)
334 		return false;
335 
336 	for (; conn->attempt <= size; conn->attempt++) {
337 		if (lmp_esco_2m_capable(conn->parent) ||
338 		    (esco_param[conn->attempt - 1].pkt_type & ESCO_2EV3))
339 			break;
340 		BT_DBG("hcon %p skipped attempt %d, eSCO 2M not supported",
341 		       conn, conn->attempt);
342 	}
343 
344 	return conn->attempt <= size;
345 }
346 
347 static int configure_datapath_sync(struct hci_dev *hdev, struct bt_codec *codec)
348 {
349 	int err;
350 	__u8 vnd_len, *vnd_data = NULL;
351 	struct hci_op_configure_data_path *cmd = NULL;
352 
353 	err = hdev->get_codec_config_data(hdev, ESCO_LINK, codec, &vnd_len,
354 					  &vnd_data);
355 	if (err < 0)
356 		goto error;
357 
358 	cmd = kzalloc(sizeof(*cmd) + vnd_len, GFP_KERNEL);
359 	if (!cmd) {
360 		err = -ENOMEM;
361 		goto error;
362 	}
363 
364 	err = hdev->get_data_path_id(hdev, &cmd->data_path_id);
365 	if (err < 0)
366 		goto error;
367 
368 	cmd->vnd_len = vnd_len;
369 	memcpy(cmd->vnd_data, vnd_data, vnd_len);
370 
371 	cmd->direction = 0x00;
372 	__hci_cmd_sync_status(hdev, HCI_CONFIGURE_DATA_PATH,
373 			      sizeof(*cmd) + vnd_len, cmd, HCI_CMD_TIMEOUT);
374 
375 	cmd->direction = 0x01;
376 	err = __hci_cmd_sync_status(hdev, HCI_CONFIGURE_DATA_PATH,
377 				    sizeof(*cmd) + vnd_len, cmd,
378 				    HCI_CMD_TIMEOUT);
379 error:
380 
381 	kfree(cmd);
382 	kfree(vnd_data);
383 	return err;
384 }
385 
386 static int hci_enhanced_setup_sync(struct hci_dev *hdev, void *data)
387 {
388 	struct conn_handle_t *conn_handle = data;
389 	struct hci_conn *conn = conn_handle->conn;
390 	__u16 handle = conn_handle->handle;
391 	struct hci_cp_enhanced_setup_sync_conn cp;
392 	const struct sco_param *param;
393 
394 	kfree(conn_handle);
395 
396 	bt_dev_dbg(hdev, "hcon %p", conn);
397 
398 	/* for offload use case, codec needs to configured before opening SCO */
399 	if (conn->codec.data_path)
400 		configure_datapath_sync(hdev, &conn->codec);
401 
402 	conn->state = BT_CONNECT;
403 	conn->out = true;
404 
405 	conn->attempt++;
406 
407 	memset(&cp, 0x00, sizeof(cp));
408 
409 	cp.handle   = cpu_to_le16(handle);
410 
411 	cp.tx_bandwidth   = cpu_to_le32(0x00001f40);
412 	cp.rx_bandwidth   = cpu_to_le32(0x00001f40);
413 
414 	switch (conn->codec.id) {
415 	case BT_CODEC_MSBC:
416 		if (!find_next_esco_param(conn, esco_param_msbc,
417 					  ARRAY_SIZE(esco_param_msbc)))
418 			return -EINVAL;
419 
420 		param = &esco_param_msbc[conn->attempt - 1];
421 		cp.tx_coding_format.id = 0x05;
422 		cp.rx_coding_format.id = 0x05;
423 		cp.tx_codec_frame_size = __cpu_to_le16(60);
424 		cp.rx_codec_frame_size = __cpu_to_le16(60);
425 		cp.in_bandwidth = __cpu_to_le32(32000);
426 		cp.out_bandwidth = __cpu_to_le32(32000);
427 		cp.in_coding_format.id = 0x04;
428 		cp.out_coding_format.id = 0x04;
429 		cp.in_coded_data_size = __cpu_to_le16(16);
430 		cp.out_coded_data_size = __cpu_to_le16(16);
431 		cp.in_pcm_data_format = 2;
432 		cp.out_pcm_data_format = 2;
433 		cp.in_pcm_sample_payload_msb_pos = 0;
434 		cp.out_pcm_sample_payload_msb_pos = 0;
435 		cp.in_data_path = conn->codec.data_path;
436 		cp.out_data_path = conn->codec.data_path;
437 		cp.in_transport_unit_size = 1;
438 		cp.out_transport_unit_size = 1;
439 		break;
440 
441 	case BT_CODEC_TRANSPARENT:
442 		if (!find_next_esco_param(conn, esco_param_msbc,
443 					  ARRAY_SIZE(esco_param_msbc)))
444 			return false;
445 		param = &esco_param_msbc[conn->attempt - 1];
446 		cp.tx_coding_format.id = 0x03;
447 		cp.rx_coding_format.id = 0x03;
448 		cp.tx_codec_frame_size = __cpu_to_le16(60);
449 		cp.rx_codec_frame_size = __cpu_to_le16(60);
450 		cp.in_bandwidth = __cpu_to_le32(0x1f40);
451 		cp.out_bandwidth = __cpu_to_le32(0x1f40);
452 		cp.in_coding_format.id = 0x03;
453 		cp.out_coding_format.id = 0x03;
454 		cp.in_coded_data_size = __cpu_to_le16(16);
455 		cp.out_coded_data_size = __cpu_to_le16(16);
456 		cp.in_pcm_data_format = 2;
457 		cp.out_pcm_data_format = 2;
458 		cp.in_pcm_sample_payload_msb_pos = 0;
459 		cp.out_pcm_sample_payload_msb_pos = 0;
460 		cp.in_data_path = conn->codec.data_path;
461 		cp.out_data_path = conn->codec.data_path;
462 		cp.in_transport_unit_size = 1;
463 		cp.out_transport_unit_size = 1;
464 		break;
465 
466 	case BT_CODEC_CVSD:
467 		if (conn->parent && lmp_esco_capable(conn->parent)) {
468 			if (!find_next_esco_param(conn, esco_param_cvsd,
469 						  ARRAY_SIZE(esco_param_cvsd)))
470 				return -EINVAL;
471 			param = &esco_param_cvsd[conn->attempt - 1];
472 		} else {
473 			if (conn->attempt > ARRAY_SIZE(sco_param_cvsd))
474 				return -EINVAL;
475 			param = &sco_param_cvsd[conn->attempt - 1];
476 		}
477 		cp.tx_coding_format.id = 2;
478 		cp.rx_coding_format.id = 2;
479 		cp.tx_codec_frame_size = __cpu_to_le16(60);
480 		cp.rx_codec_frame_size = __cpu_to_le16(60);
481 		cp.in_bandwidth = __cpu_to_le32(16000);
482 		cp.out_bandwidth = __cpu_to_le32(16000);
483 		cp.in_coding_format.id = 4;
484 		cp.out_coding_format.id = 4;
485 		cp.in_coded_data_size = __cpu_to_le16(16);
486 		cp.out_coded_data_size = __cpu_to_le16(16);
487 		cp.in_pcm_data_format = 2;
488 		cp.out_pcm_data_format = 2;
489 		cp.in_pcm_sample_payload_msb_pos = 0;
490 		cp.out_pcm_sample_payload_msb_pos = 0;
491 		cp.in_data_path = conn->codec.data_path;
492 		cp.out_data_path = conn->codec.data_path;
493 		cp.in_transport_unit_size = 16;
494 		cp.out_transport_unit_size = 16;
495 		break;
496 	default:
497 		return -EINVAL;
498 	}
499 
500 	cp.retrans_effort = param->retrans_effort;
501 	cp.pkt_type = __cpu_to_le16(param->pkt_type);
502 	cp.max_latency = __cpu_to_le16(param->max_latency);
503 
504 	if (hci_send_cmd(hdev, HCI_OP_ENHANCED_SETUP_SYNC_CONN, sizeof(cp), &cp) < 0)
505 		return -EIO;
506 
507 	return 0;
508 }
509 
510 static bool hci_setup_sync_conn(struct hci_conn *conn, __u16 handle)
511 {
512 	struct hci_dev *hdev = conn->hdev;
513 	struct hci_cp_setup_sync_conn cp;
514 	const struct sco_param *param;
515 
516 	bt_dev_dbg(hdev, "hcon %p", conn);
517 
518 	conn->state = BT_CONNECT;
519 	conn->out = true;
520 
521 	conn->attempt++;
522 
523 	cp.handle   = cpu_to_le16(handle);
524 
525 	cp.tx_bandwidth   = cpu_to_le32(0x00001f40);
526 	cp.rx_bandwidth   = cpu_to_le32(0x00001f40);
527 	cp.voice_setting  = cpu_to_le16(conn->setting);
528 
529 	switch (conn->setting & SCO_AIRMODE_MASK) {
530 	case SCO_AIRMODE_TRANSP:
531 		if (!find_next_esco_param(conn, esco_param_msbc,
532 					  ARRAY_SIZE(esco_param_msbc)))
533 			return false;
534 		param = &esco_param_msbc[conn->attempt - 1];
535 		break;
536 	case SCO_AIRMODE_CVSD:
537 		if (conn->parent && lmp_esco_capable(conn->parent)) {
538 			if (!find_next_esco_param(conn, esco_param_cvsd,
539 						  ARRAY_SIZE(esco_param_cvsd)))
540 				return false;
541 			param = &esco_param_cvsd[conn->attempt - 1];
542 		} else {
543 			if (conn->attempt > ARRAY_SIZE(sco_param_cvsd))
544 				return false;
545 			param = &sco_param_cvsd[conn->attempt - 1];
546 		}
547 		break;
548 	default:
549 		return false;
550 	}
551 
552 	cp.retrans_effort = param->retrans_effort;
553 	cp.pkt_type = __cpu_to_le16(param->pkt_type);
554 	cp.max_latency = __cpu_to_le16(param->max_latency);
555 
556 	if (hci_send_cmd(hdev, HCI_OP_SETUP_SYNC_CONN, sizeof(cp), &cp) < 0)
557 		return false;
558 
559 	return true;
560 }
561 
562 bool hci_setup_sync(struct hci_conn *conn, __u16 handle)
563 {
564 	int result;
565 	struct conn_handle_t *conn_handle;
566 
567 	if (enhanced_sync_conn_capable(conn->hdev)) {
568 		conn_handle = kzalloc(sizeof(*conn_handle), GFP_KERNEL);
569 
570 		if (!conn_handle)
571 			return false;
572 
573 		conn_handle->conn = conn;
574 		conn_handle->handle = handle;
575 		result = hci_cmd_sync_queue(conn->hdev, hci_enhanced_setup_sync,
576 					    conn_handle, NULL);
577 		if (result < 0)
578 			kfree(conn_handle);
579 
580 		return result == 0;
581 	}
582 
583 	return hci_setup_sync_conn(conn, handle);
584 }
585 
586 u8 hci_le_conn_update(struct hci_conn *conn, u16 min, u16 max, u16 latency,
587 		      u16 to_multiplier)
588 {
589 	struct hci_dev *hdev = conn->hdev;
590 	struct hci_conn_params *params;
591 	struct hci_cp_le_conn_update cp;
592 
593 	hci_dev_lock(hdev);
594 
595 	params = hci_conn_params_lookup(hdev, &conn->dst, conn->dst_type);
596 	if (params) {
597 		params->conn_min_interval = min;
598 		params->conn_max_interval = max;
599 		params->conn_latency = latency;
600 		params->supervision_timeout = to_multiplier;
601 	}
602 
603 	hci_dev_unlock(hdev);
604 
605 	memset(&cp, 0, sizeof(cp));
606 	cp.handle		= cpu_to_le16(conn->handle);
607 	cp.conn_interval_min	= cpu_to_le16(min);
608 	cp.conn_interval_max	= cpu_to_le16(max);
609 	cp.conn_latency		= cpu_to_le16(latency);
610 	cp.supervision_timeout	= cpu_to_le16(to_multiplier);
611 	cp.min_ce_len		= cpu_to_le16(0x0000);
612 	cp.max_ce_len		= cpu_to_le16(0x0000);
613 
614 	hci_send_cmd(hdev, HCI_OP_LE_CONN_UPDATE, sizeof(cp), &cp);
615 
616 	if (params)
617 		return 0x01;
618 
619 	return 0x00;
620 }
621 
622 void hci_le_start_enc(struct hci_conn *conn, __le16 ediv, __le64 rand,
623 		      __u8 ltk[16], __u8 key_size)
624 {
625 	struct hci_dev *hdev = conn->hdev;
626 	struct hci_cp_le_start_enc cp;
627 
628 	BT_DBG("hcon %p", conn);
629 
630 	memset(&cp, 0, sizeof(cp));
631 
632 	cp.handle = cpu_to_le16(conn->handle);
633 	cp.rand = rand;
634 	cp.ediv = ediv;
635 	memcpy(cp.ltk, ltk, key_size);
636 
637 	hci_send_cmd(hdev, HCI_OP_LE_START_ENC, sizeof(cp), &cp);
638 }
639 
640 /* Device _must_ be locked */
641 void hci_sco_setup(struct hci_conn *conn, __u8 status)
642 {
643 	struct hci_link *link;
644 
645 	link = list_first_entry_or_null(&conn->link_list, struct hci_link, list);
646 	if (!link || !link->conn)
647 		return;
648 
649 	BT_DBG("hcon %p", conn);
650 
651 	if (!status) {
652 		if (lmp_esco_capable(conn->hdev))
653 			hci_setup_sync(link->conn, conn->handle);
654 		else
655 			hci_add_sco(link->conn, conn->handle);
656 	} else {
657 		hci_connect_cfm(link->conn, status);
658 		hci_conn_del(link->conn);
659 	}
660 }
661 
662 static void hci_conn_timeout(struct work_struct *work)
663 {
664 	struct hci_conn *conn = container_of(work, struct hci_conn,
665 					     disc_work.work);
666 	int refcnt = atomic_read(&conn->refcnt);
667 
668 	BT_DBG("hcon %p state %s", conn, state_to_string(conn->state));
669 
670 	WARN_ON(refcnt < 0);
671 
672 	/* FIXME: It was observed that in pairing failed scenario, refcnt
673 	 * drops below 0. Probably this is because l2cap_conn_del calls
674 	 * l2cap_chan_del for each channel, and inside l2cap_chan_del conn is
675 	 * dropped. After that loop hci_chan_del is called which also drops
676 	 * conn. For now make sure that ACL is alive if refcnt is higher then 0,
677 	 * otherwise drop it.
678 	 */
679 	if (refcnt > 0)
680 		return;
681 
682 	/* LE connections in scanning state need special handling */
683 	if (conn->state == BT_CONNECT && conn->type == LE_LINK &&
684 	    test_bit(HCI_CONN_SCANNING, &conn->flags)) {
685 		hci_connect_le_scan_remove(conn);
686 		return;
687 	}
688 
689 	hci_abort_conn(conn, hci_proto_disconn_ind(conn));
690 }
691 
692 /* Enter sniff mode */
693 static void hci_conn_idle(struct work_struct *work)
694 {
695 	struct hci_conn *conn = container_of(work, struct hci_conn,
696 					     idle_work.work);
697 	struct hci_dev *hdev = conn->hdev;
698 
699 	BT_DBG("hcon %p mode %d", conn, conn->mode);
700 
701 	if (!lmp_sniff_capable(hdev) || !lmp_sniff_capable(conn))
702 		return;
703 
704 	if (conn->mode != HCI_CM_ACTIVE || !(conn->link_policy & HCI_LP_SNIFF))
705 		return;
706 
707 	if (lmp_sniffsubr_capable(hdev) && lmp_sniffsubr_capable(conn)) {
708 		struct hci_cp_sniff_subrate cp;
709 		cp.handle             = cpu_to_le16(conn->handle);
710 		cp.max_latency        = cpu_to_le16(0);
711 		cp.min_remote_timeout = cpu_to_le16(0);
712 		cp.min_local_timeout  = cpu_to_le16(0);
713 		hci_send_cmd(hdev, HCI_OP_SNIFF_SUBRATE, sizeof(cp), &cp);
714 	}
715 
716 	if (!test_and_set_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags)) {
717 		struct hci_cp_sniff_mode cp;
718 		cp.handle       = cpu_to_le16(conn->handle);
719 		cp.max_interval = cpu_to_le16(hdev->sniff_max_interval);
720 		cp.min_interval = cpu_to_le16(hdev->sniff_min_interval);
721 		cp.attempt      = cpu_to_le16(4);
722 		cp.timeout      = cpu_to_le16(1);
723 		hci_send_cmd(hdev, HCI_OP_SNIFF_MODE, sizeof(cp), &cp);
724 	}
725 }
726 
727 static void hci_conn_auto_accept(struct work_struct *work)
728 {
729 	struct hci_conn *conn = container_of(work, struct hci_conn,
730 					     auto_accept_work.work);
731 
732 	hci_send_cmd(conn->hdev, HCI_OP_USER_CONFIRM_REPLY, sizeof(conn->dst),
733 		     &conn->dst);
734 }
735 
736 static void le_disable_advertising(struct hci_dev *hdev)
737 {
738 	if (ext_adv_capable(hdev)) {
739 		struct hci_cp_le_set_ext_adv_enable cp;
740 
741 		cp.enable = 0x00;
742 		cp.num_of_sets = 0x00;
743 
744 		hci_send_cmd(hdev, HCI_OP_LE_SET_EXT_ADV_ENABLE, sizeof(cp),
745 			     &cp);
746 	} else {
747 		u8 enable = 0x00;
748 		hci_send_cmd(hdev, HCI_OP_LE_SET_ADV_ENABLE, sizeof(enable),
749 			     &enable);
750 	}
751 }
752 
753 static void le_conn_timeout(struct work_struct *work)
754 {
755 	struct hci_conn *conn = container_of(work, struct hci_conn,
756 					     le_conn_timeout.work);
757 	struct hci_dev *hdev = conn->hdev;
758 
759 	BT_DBG("");
760 
761 	/* We could end up here due to having done directed advertising,
762 	 * so clean up the state if necessary. This should however only
763 	 * happen with broken hardware or if low duty cycle was used
764 	 * (which doesn't have a timeout of its own).
765 	 */
766 	if (conn->role == HCI_ROLE_SLAVE) {
767 		/* Disable LE Advertising */
768 		le_disable_advertising(hdev);
769 		hci_dev_lock(hdev);
770 		hci_conn_failed(conn, HCI_ERROR_ADVERTISING_TIMEOUT);
771 		hci_dev_unlock(hdev);
772 		return;
773 	}
774 
775 	hci_abort_conn(conn, HCI_ERROR_REMOTE_USER_TERM);
776 }
777 
778 struct iso_cig_params {
779 	struct hci_cp_le_set_cig_params cp;
780 	struct hci_cis_params cis[0x1f];
781 };
782 
783 struct iso_list_data {
784 	union {
785 		u8  cig;
786 		u8  big;
787 	};
788 	union {
789 		u8  cis;
790 		u8  bis;
791 		u16 sync_handle;
792 	};
793 	int count;
794 	struct iso_cig_params pdu;
795 };
796 
797 static void bis_list(struct hci_conn *conn, void *data)
798 {
799 	struct iso_list_data *d = data;
800 
801 	/* Skip if not broadcast/ANY address */
802 	if (bacmp(&conn->dst, BDADDR_ANY))
803 		return;
804 
805 	if (d->big != conn->iso_qos.bcast.big || d->bis == BT_ISO_QOS_BIS_UNSET ||
806 	    d->bis != conn->iso_qos.bcast.bis)
807 		return;
808 
809 	d->count++;
810 }
811 
812 static void find_bis(struct hci_conn *conn, void *data)
813 {
814 	struct iso_list_data *d = data;
815 
816 	/* Ignore unicast */
817 	if (bacmp(&conn->dst, BDADDR_ANY))
818 		return;
819 
820 	d->count++;
821 }
822 
823 static int terminate_big_sync(struct hci_dev *hdev, void *data)
824 {
825 	struct iso_list_data *d = data;
826 
827 	bt_dev_dbg(hdev, "big 0x%2.2x bis 0x%2.2x", d->big, d->bis);
828 
829 	hci_remove_ext_adv_instance_sync(hdev, d->bis, NULL);
830 
831 	/* Check if ISO connection is a BIS and terminate BIG if there are
832 	 * no other connections using it.
833 	 */
834 	hci_conn_hash_list_state(hdev, find_bis, ISO_LINK, BT_CONNECTED, d);
835 	if (d->count)
836 		return 0;
837 
838 	return hci_le_terminate_big_sync(hdev, d->big,
839 					 HCI_ERROR_LOCAL_HOST_TERM);
840 }
841 
842 static void terminate_big_destroy(struct hci_dev *hdev, void *data, int err)
843 {
844 	kfree(data);
845 }
846 
847 static int hci_le_terminate_big(struct hci_dev *hdev, u8 big, u8 bis)
848 {
849 	struct iso_list_data *d;
850 	int ret;
851 
852 	bt_dev_dbg(hdev, "big 0x%2.2x bis 0x%2.2x", big, bis);
853 
854 	d = kzalloc(sizeof(*d), GFP_KERNEL);
855 	if (!d)
856 		return -ENOMEM;
857 
858 	d->big = big;
859 	d->bis = bis;
860 
861 	ret = hci_cmd_sync_queue(hdev, terminate_big_sync, d,
862 				 terminate_big_destroy);
863 	if (ret)
864 		kfree(d);
865 
866 	return ret;
867 }
868 
869 static int big_terminate_sync(struct hci_dev *hdev, void *data)
870 {
871 	struct iso_list_data *d = data;
872 
873 	bt_dev_dbg(hdev, "big 0x%2.2x sync_handle 0x%4.4x", d->big,
874 		   d->sync_handle);
875 
876 	/* Check if ISO connection is a BIS and terminate BIG if there are
877 	 * no other connections using it.
878 	 */
879 	hci_conn_hash_list_state(hdev, find_bis, ISO_LINK, BT_CONNECTED, d);
880 	if (d->count)
881 		return 0;
882 
883 	hci_le_big_terminate_sync(hdev, d->big);
884 
885 	return hci_le_pa_terminate_sync(hdev, d->sync_handle);
886 }
887 
888 static int hci_le_big_terminate(struct hci_dev *hdev, u8 big, u16 sync_handle)
889 {
890 	struct iso_list_data *d;
891 	int ret;
892 
893 	bt_dev_dbg(hdev, "big 0x%2.2x sync_handle 0x%4.4x", big, sync_handle);
894 
895 	d = kzalloc(sizeof(*d), GFP_KERNEL);
896 	if (!d)
897 		return -ENOMEM;
898 
899 	d->big = big;
900 	d->sync_handle = sync_handle;
901 
902 	ret = hci_cmd_sync_queue(hdev, big_terminate_sync, d,
903 				 terminate_big_destroy);
904 	if (ret)
905 		kfree(d);
906 
907 	return ret;
908 }
909 
910 /* Cleanup BIS connection
911  *
912  * Detects if there any BIS left connected in a BIG
913  * broadcaster: Remove advertising instance and terminate BIG.
914  * broadcaster receiver: Teminate BIG sync and terminate PA sync.
915  */
916 static void bis_cleanup(struct hci_conn *conn)
917 {
918 	struct hci_dev *hdev = conn->hdev;
919 
920 	bt_dev_dbg(hdev, "conn %p", conn);
921 
922 	if (conn->role == HCI_ROLE_MASTER) {
923 		if (!test_and_clear_bit(HCI_CONN_PER_ADV, &conn->flags))
924 			return;
925 
926 		hci_le_terminate_big(hdev, conn->iso_qos.bcast.big,
927 				     conn->iso_qos.bcast.bis);
928 	} else {
929 		hci_le_big_terminate(hdev, conn->iso_qos.bcast.big,
930 				     conn->sync_handle);
931 	}
932 }
933 
934 static int remove_cig_sync(struct hci_dev *hdev, void *data)
935 {
936 	u8 handle = PTR_ERR(data);
937 
938 	return hci_le_remove_cig_sync(hdev, handle);
939 }
940 
941 static int hci_le_remove_cig(struct hci_dev *hdev, u8 handle)
942 {
943 	bt_dev_dbg(hdev, "handle 0x%2.2x", handle);
944 
945 	return hci_cmd_sync_queue(hdev, remove_cig_sync, ERR_PTR(handle), NULL);
946 }
947 
948 static void find_cis(struct hci_conn *conn, void *data)
949 {
950 	struct iso_list_data *d = data;
951 
952 	/* Ignore broadcast or if CIG don't match */
953 	if (!bacmp(&conn->dst, BDADDR_ANY) || d->cig != conn->iso_qos.ucast.cig)
954 		return;
955 
956 	d->count++;
957 }
958 
959 /* Cleanup CIS connection:
960  *
961  * Detects if there any CIS left connected in a CIG and remove it.
962  */
963 static void cis_cleanup(struct hci_conn *conn)
964 {
965 	struct hci_dev *hdev = conn->hdev;
966 	struct iso_list_data d;
967 
968 	if (conn->iso_qos.ucast.cig == BT_ISO_QOS_CIG_UNSET)
969 		return;
970 
971 	memset(&d, 0, sizeof(d));
972 	d.cig = conn->iso_qos.ucast.cig;
973 
974 	/* Check if ISO connection is a CIS and remove CIG if there are
975 	 * no other connections using it.
976 	 */
977 	hci_conn_hash_list_state(hdev, find_cis, ISO_LINK, BT_BOUND, &d);
978 	hci_conn_hash_list_state(hdev, find_cis, ISO_LINK, BT_CONNECT, &d);
979 	hci_conn_hash_list_state(hdev, find_cis, ISO_LINK, BT_CONNECTED, &d);
980 	if (d.count)
981 		return;
982 
983 	hci_le_remove_cig(hdev, conn->iso_qos.ucast.cig);
984 }
985 
986 struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst,
987 			      u8 role)
988 {
989 	struct hci_conn *conn;
990 
991 	BT_DBG("%s dst %pMR", hdev->name, dst);
992 
993 	conn = kzalloc(sizeof(*conn), GFP_KERNEL);
994 	if (!conn)
995 		return NULL;
996 
997 	bacpy(&conn->dst, dst);
998 	bacpy(&conn->src, &hdev->bdaddr);
999 	conn->handle = HCI_CONN_HANDLE_UNSET;
1000 	conn->hdev  = hdev;
1001 	conn->type  = type;
1002 	conn->role  = role;
1003 	conn->mode  = HCI_CM_ACTIVE;
1004 	conn->state = BT_OPEN;
1005 	conn->auth_type = HCI_AT_GENERAL_BONDING;
1006 	conn->io_capability = hdev->io_capability;
1007 	conn->remote_auth = 0xff;
1008 	conn->key_type = 0xff;
1009 	conn->rssi = HCI_RSSI_INVALID;
1010 	conn->tx_power = HCI_TX_POWER_INVALID;
1011 	conn->max_tx_power = HCI_TX_POWER_INVALID;
1012 
1013 	set_bit(HCI_CONN_POWER_SAVE, &conn->flags);
1014 	conn->disc_timeout = HCI_DISCONN_TIMEOUT;
1015 
1016 	/* Set Default Authenticated payload timeout to 30s */
1017 	conn->auth_payload_timeout = DEFAULT_AUTH_PAYLOAD_TIMEOUT;
1018 
1019 	if (conn->role == HCI_ROLE_MASTER)
1020 		conn->out = true;
1021 
1022 	switch (type) {
1023 	case ACL_LINK:
1024 		conn->pkt_type = hdev->pkt_type & ACL_PTYPE_MASK;
1025 		break;
1026 	case LE_LINK:
1027 		/* conn->src should reflect the local identity address */
1028 		hci_copy_identity_address(hdev, &conn->src, &conn->src_type);
1029 		break;
1030 	case ISO_LINK:
1031 		/* conn->src should reflect the local identity address */
1032 		hci_copy_identity_address(hdev, &conn->src, &conn->src_type);
1033 
1034 		/* set proper cleanup function */
1035 		if (!bacmp(dst, BDADDR_ANY))
1036 			conn->cleanup = bis_cleanup;
1037 		else if (conn->role == HCI_ROLE_MASTER)
1038 			conn->cleanup = cis_cleanup;
1039 
1040 		break;
1041 	case SCO_LINK:
1042 		if (lmp_esco_capable(hdev))
1043 			conn->pkt_type = (hdev->esco_type & SCO_ESCO_MASK) |
1044 					(hdev->esco_type & EDR_ESCO_MASK);
1045 		else
1046 			conn->pkt_type = hdev->pkt_type & SCO_PTYPE_MASK;
1047 		break;
1048 	case ESCO_LINK:
1049 		conn->pkt_type = hdev->esco_type & ~EDR_ESCO_MASK;
1050 		break;
1051 	}
1052 
1053 	skb_queue_head_init(&conn->data_q);
1054 
1055 	INIT_LIST_HEAD(&conn->chan_list);
1056 	INIT_LIST_HEAD(&conn->link_list);
1057 
1058 	INIT_DELAYED_WORK(&conn->disc_work, hci_conn_timeout);
1059 	INIT_DELAYED_WORK(&conn->auto_accept_work, hci_conn_auto_accept);
1060 	INIT_DELAYED_WORK(&conn->idle_work, hci_conn_idle);
1061 	INIT_DELAYED_WORK(&conn->le_conn_timeout, le_conn_timeout);
1062 	INIT_WORK(&conn->le_scan_cleanup, le_scan_cleanup);
1063 
1064 	atomic_set(&conn->refcnt, 0);
1065 
1066 	hci_dev_hold(hdev);
1067 
1068 	hci_conn_hash_add(hdev, conn);
1069 
1070 	/* The SCO and eSCO connections will only be notified when their
1071 	 * setup has been completed. This is different to ACL links which
1072 	 * can be notified right away.
1073 	 */
1074 	if (conn->type != SCO_LINK && conn->type != ESCO_LINK) {
1075 		if (hdev->notify)
1076 			hdev->notify(hdev, HCI_NOTIFY_CONN_ADD);
1077 	}
1078 
1079 	hci_conn_init_sysfs(conn);
1080 
1081 	return conn;
1082 }
1083 
1084 static void hci_conn_unlink(struct hci_conn *conn)
1085 {
1086 	struct hci_dev *hdev = conn->hdev;
1087 
1088 	bt_dev_dbg(hdev, "hcon %p", conn);
1089 
1090 	if (!conn->parent) {
1091 		struct hci_link *link, *t;
1092 
1093 		list_for_each_entry_safe(link, t, &conn->link_list, list) {
1094 			struct hci_conn *child = link->conn;
1095 
1096 			hci_conn_unlink(child);
1097 
1098 			/* If hdev is down it means
1099 			 * hci_dev_close_sync/hci_conn_hash_flush is in progress
1100 			 * and links don't need to be cleanup as all connections
1101 			 * would be cleanup.
1102 			 */
1103 			if (!test_bit(HCI_UP, &hdev->flags))
1104 				continue;
1105 
1106 			/* Due to race, SCO connection might be not established
1107 			 * yet at this point. Delete it now, otherwise it is
1108 			 * possible for it to be stuck and can't be deleted.
1109 			 */
1110 			if ((child->type == SCO_LINK ||
1111 			     child->type == ESCO_LINK) &&
1112 			    child->handle == HCI_CONN_HANDLE_UNSET)
1113 				hci_conn_del(child);
1114 		}
1115 
1116 		return;
1117 	}
1118 
1119 	if (!conn->link)
1120 		return;
1121 
1122 	list_del_rcu(&conn->link->list);
1123 	synchronize_rcu();
1124 
1125 	hci_conn_drop(conn->parent);
1126 	hci_conn_put(conn->parent);
1127 	conn->parent = NULL;
1128 
1129 	kfree(conn->link);
1130 	conn->link = NULL;
1131 }
1132 
1133 void hci_conn_del(struct hci_conn *conn)
1134 {
1135 	struct hci_dev *hdev = conn->hdev;
1136 
1137 	BT_DBG("%s hcon %p handle %d", hdev->name, conn, conn->handle);
1138 
1139 	hci_conn_unlink(conn);
1140 
1141 	cancel_delayed_work_sync(&conn->disc_work);
1142 	cancel_delayed_work_sync(&conn->auto_accept_work);
1143 	cancel_delayed_work_sync(&conn->idle_work);
1144 
1145 	if (conn->type == ACL_LINK) {
1146 		/* Unacked frames */
1147 		hdev->acl_cnt += conn->sent;
1148 	} else if (conn->type == LE_LINK) {
1149 		cancel_delayed_work(&conn->le_conn_timeout);
1150 
1151 		if (hdev->le_pkts)
1152 			hdev->le_cnt += conn->sent;
1153 		else
1154 			hdev->acl_cnt += conn->sent;
1155 	} else {
1156 		/* Unacked ISO frames */
1157 		if (conn->type == ISO_LINK) {
1158 			if (hdev->iso_pkts)
1159 				hdev->iso_cnt += conn->sent;
1160 			else if (hdev->le_pkts)
1161 				hdev->le_cnt += conn->sent;
1162 			else
1163 				hdev->acl_cnt += conn->sent;
1164 		}
1165 	}
1166 
1167 	if (conn->amp_mgr)
1168 		amp_mgr_put(conn->amp_mgr);
1169 
1170 	skb_queue_purge(&conn->data_q);
1171 
1172 	/* Remove the connection from the list and cleanup its remaining
1173 	 * state. This is a separate function since for some cases like
1174 	 * BT_CONNECT_SCAN we *only* want the cleanup part without the
1175 	 * rest of hci_conn_del.
1176 	 */
1177 	hci_conn_cleanup(conn);
1178 }
1179 
1180 struct hci_dev *hci_get_route(bdaddr_t *dst, bdaddr_t *src, uint8_t src_type)
1181 {
1182 	int use_src = bacmp(src, BDADDR_ANY);
1183 	struct hci_dev *hdev = NULL, *d;
1184 
1185 	BT_DBG("%pMR -> %pMR", src, dst);
1186 
1187 	read_lock(&hci_dev_list_lock);
1188 
1189 	list_for_each_entry(d, &hci_dev_list, list) {
1190 		if (!test_bit(HCI_UP, &d->flags) ||
1191 		    hci_dev_test_flag(d, HCI_USER_CHANNEL) ||
1192 		    d->dev_type != HCI_PRIMARY)
1193 			continue;
1194 
1195 		/* Simple routing:
1196 		 *   No source address - find interface with bdaddr != dst
1197 		 *   Source address    - find interface with bdaddr == src
1198 		 */
1199 
1200 		if (use_src) {
1201 			bdaddr_t id_addr;
1202 			u8 id_addr_type;
1203 
1204 			if (src_type == BDADDR_BREDR) {
1205 				if (!lmp_bredr_capable(d))
1206 					continue;
1207 				bacpy(&id_addr, &d->bdaddr);
1208 				id_addr_type = BDADDR_BREDR;
1209 			} else {
1210 				if (!lmp_le_capable(d))
1211 					continue;
1212 
1213 				hci_copy_identity_address(d, &id_addr,
1214 							  &id_addr_type);
1215 
1216 				/* Convert from HCI to three-value type */
1217 				if (id_addr_type == ADDR_LE_DEV_PUBLIC)
1218 					id_addr_type = BDADDR_LE_PUBLIC;
1219 				else
1220 					id_addr_type = BDADDR_LE_RANDOM;
1221 			}
1222 
1223 			if (!bacmp(&id_addr, src) && id_addr_type == src_type) {
1224 				hdev = d; break;
1225 			}
1226 		} else {
1227 			if (bacmp(&d->bdaddr, dst)) {
1228 				hdev = d; break;
1229 			}
1230 		}
1231 	}
1232 
1233 	if (hdev)
1234 		hdev = hci_dev_hold(hdev);
1235 
1236 	read_unlock(&hci_dev_list_lock);
1237 	return hdev;
1238 }
1239 EXPORT_SYMBOL(hci_get_route);
1240 
1241 /* This function requires the caller holds hdev->lock */
1242 static void hci_le_conn_failed(struct hci_conn *conn, u8 status)
1243 {
1244 	struct hci_dev *hdev = conn->hdev;
1245 
1246 	hci_connect_le_scan_cleanup(conn, status);
1247 
1248 	/* Enable advertising in case this was a failed connection
1249 	 * attempt as a peripheral.
1250 	 */
1251 	hci_enable_advertising(hdev);
1252 }
1253 
1254 /* This function requires the caller holds hdev->lock */
1255 void hci_conn_failed(struct hci_conn *conn, u8 status)
1256 {
1257 	struct hci_dev *hdev = conn->hdev;
1258 
1259 	bt_dev_dbg(hdev, "status 0x%2.2x", status);
1260 
1261 	switch (conn->type) {
1262 	case LE_LINK:
1263 		hci_le_conn_failed(conn, status);
1264 		break;
1265 	case ACL_LINK:
1266 		mgmt_connect_failed(hdev, &conn->dst, conn->type,
1267 				    conn->dst_type, status);
1268 		break;
1269 	}
1270 
1271 	conn->state = BT_CLOSED;
1272 	hci_connect_cfm(conn, status);
1273 	hci_conn_del(conn);
1274 }
1275 
1276 static void create_le_conn_complete(struct hci_dev *hdev, void *data, int err)
1277 {
1278 	struct hci_conn *conn = data;
1279 
1280 	bt_dev_dbg(hdev, "err %d", err);
1281 
1282 	hci_dev_lock(hdev);
1283 
1284 	if (!err) {
1285 		hci_connect_le_scan_cleanup(conn, 0x00);
1286 		goto done;
1287 	}
1288 
1289 	/* Check if connection is still pending */
1290 	if (conn != hci_lookup_le_connect(hdev))
1291 		goto done;
1292 
1293 	/* Flush to make sure we send create conn cancel command if needed */
1294 	flush_delayed_work(&conn->le_conn_timeout);
1295 	hci_conn_failed(conn, bt_status(err));
1296 
1297 done:
1298 	hci_dev_unlock(hdev);
1299 }
1300 
1301 static int hci_connect_le_sync(struct hci_dev *hdev, void *data)
1302 {
1303 	struct hci_conn *conn = data;
1304 
1305 	bt_dev_dbg(hdev, "conn %p", conn);
1306 
1307 	return hci_le_create_conn_sync(hdev, conn);
1308 }
1309 
1310 struct hci_conn *hci_connect_le(struct hci_dev *hdev, bdaddr_t *dst,
1311 				u8 dst_type, bool dst_resolved, u8 sec_level,
1312 				u16 conn_timeout, u8 role)
1313 {
1314 	struct hci_conn *conn;
1315 	struct smp_irk *irk;
1316 	int err;
1317 
1318 	/* Let's make sure that le is enabled.*/
1319 	if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED)) {
1320 		if (lmp_le_capable(hdev))
1321 			return ERR_PTR(-ECONNREFUSED);
1322 
1323 		return ERR_PTR(-EOPNOTSUPP);
1324 	}
1325 
1326 	/* Since the controller supports only one LE connection attempt at a
1327 	 * time, we return -EBUSY if there is any connection attempt running.
1328 	 */
1329 	if (hci_lookup_le_connect(hdev))
1330 		return ERR_PTR(-EBUSY);
1331 
1332 	/* If there's already a connection object but it's not in
1333 	 * scanning state it means it must already be established, in
1334 	 * which case we can't do anything else except report a failure
1335 	 * to connect.
1336 	 */
1337 	conn = hci_conn_hash_lookup_le(hdev, dst, dst_type);
1338 	if (conn && !test_bit(HCI_CONN_SCANNING, &conn->flags)) {
1339 		return ERR_PTR(-EBUSY);
1340 	}
1341 
1342 	/* Check if the destination address has been resolved by the controller
1343 	 * since if it did then the identity address shall be used.
1344 	 */
1345 	if (!dst_resolved) {
1346 		/* When given an identity address with existing identity
1347 		 * resolving key, the connection needs to be established
1348 		 * to a resolvable random address.
1349 		 *
1350 		 * Storing the resolvable random address is required here
1351 		 * to handle connection failures. The address will later
1352 		 * be resolved back into the original identity address
1353 		 * from the connect request.
1354 		 */
1355 		irk = hci_find_irk_by_addr(hdev, dst, dst_type);
1356 		if (irk && bacmp(&irk->rpa, BDADDR_ANY)) {
1357 			dst = &irk->rpa;
1358 			dst_type = ADDR_LE_DEV_RANDOM;
1359 		}
1360 	}
1361 
1362 	if (conn) {
1363 		bacpy(&conn->dst, dst);
1364 	} else {
1365 		conn = hci_conn_add(hdev, LE_LINK, dst, role);
1366 		if (!conn)
1367 			return ERR_PTR(-ENOMEM);
1368 		hci_conn_hold(conn);
1369 		conn->pending_sec_level = sec_level;
1370 	}
1371 
1372 	conn->dst_type = dst_type;
1373 	conn->sec_level = BT_SECURITY_LOW;
1374 	conn->conn_timeout = conn_timeout;
1375 
1376 	conn->state = BT_CONNECT;
1377 	clear_bit(HCI_CONN_SCANNING, &conn->flags);
1378 
1379 	err = hci_cmd_sync_queue(hdev, hci_connect_le_sync, conn,
1380 				 create_le_conn_complete);
1381 	if (err) {
1382 		hci_conn_del(conn);
1383 		return ERR_PTR(err);
1384 	}
1385 
1386 	return conn;
1387 }
1388 
1389 static bool is_connected(struct hci_dev *hdev, bdaddr_t *addr, u8 type)
1390 {
1391 	struct hci_conn *conn;
1392 
1393 	conn = hci_conn_hash_lookup_le(hdev, addr, type);
1394 	if (!conn)
1395 		return false;
1396 
1397 	if (conn->state != BT_CONNECTED)
1398 		return false;
1399 
1400 	return true;
1401 }
1402 
1403 /* This function requires the caller holds hdev->lock */
1404 static int hci_explicit_conn_params_set(struct hci_dev *hdev,
1405 					bdaddr_t *addr, u8 addr_type)
1406 {
1407 	struct hci_conn_params *params;
1408 
1409 	if (is_connected(hdev, addr, addr_type))
1410 		return -EISCONN;
1411 
1412 	params = hci_conn_params_lookup(hdev, addr, addr_type);
1413 	if (!params) {
1414 		params = hci_conn_params_add(hdev, addr, addr_type);
1415 		if (!params)
1416 			return -ENOMEM;
1417 
1418 		/* If we created new params, mark them to be deleted in
1419 		 * hci_connect_le_scan_cleanup. It's different case than
1420 		 * existing disabled params, those will stay after cleanup.
1421 		 */
1422 		params->auto_connect = HCI_AUTO_CONN_EXPLICIT;
1423 	}
1424 
1425 	/* We're trying to connect, so make sure params are at pend_le_conns */
1426 	if (params->auto_connect == HCI_AUTO_CONN_DISABLED ||
1427 	    params->auto_connect == HCI_AUTO_CONN_REPORT ||
1428 	    params->auto_connect == HCI_AUTO_CONN_EXPLICIT) {
1429 		hci_pend_le_list_del_init(params);
1430 		hci_pend_le_list_add(params, &hdev->pend_le_conns);
1431 	}
1432 
1433 	params->explicit_connect = true;
1434 
1435 	BT_DBG("addr %pMR (type %u) auto_connect %u", addr, addr_type,
1436 	       params->auto_connect);
1437 
1438 	return 0;
1439 }
1440 
1441 static int qos_set_big(struct hci_dev *hdev, struct bt_iso_qos *qos)
1442 {
1443 	struct iso_list_data data;
1444 
1445 	/* Allocate a BIG if not set */
1446 	if (qos->bcast.big == BT_ISO_QOS_BIG_UNSET) {
1447 		for (data.big = 0x00; data.big < 0xef; data.big++) {
1448 			data.count = 0;
1449 			data.bis = 0xff;
1450 
1451 			hci_conn_hash_list_state(hdev, bis_list, ISO_LINK,
1452 						 BT_BOUND, &data);
1453 			if (!data.count)
1454 				break;
1455 		}
1456 
1457 		if (data.big == 0xef)
1458 			return -EADDRNOTAVAIL;
1459 
1460 		/* Update BIG */
1461 		qos->bcast.big = data.big;
1462 	}
1463 
1464 	return 0;
1465 }
1466 
1467 static int qos_set_bis(struct hci_dev *hdev, struct bt_iso_qos *qos)
1468 {
1469 	struct iso_list_data data;
1470 
1471 	/* Allocate BIS if not set */
1472 	if (qos->bcast.bis == BT_ISO_QOS_BIS_UNSET) {
1473 		/* Find an unused adv set to advertise BIS, skip instance 0x00
1474 		 * since it is reserved as general purpose set.
1475 		 */
1476 		for (data.bis = 0x01; data.bis < hdev->le_num_of_adv_sets;
1477 		     data.bis++) {
1478 			data.count = 0;
1479 
1480 			hci_conn_hash_list_state(hdev, bis_list, ISO_LINK,
1481 						 BT_BOUND, &data);
1482 			if (!data.count)
1483 				break;
1484 		}
1485 
1486 		if (data.bis == hdev->le_num_of_adv_sets)
1487 			return -EADDRNOTAVAIL;
1488 
1489 		/* Update BIS */
1490 		qos->bcast.bis = data.bis;
1491 	}
1492 
1493 	return 0;
1494 }
1495 
1496 /* This function requires the caller holds hdev->lock */
1497 static struct hci_conn *hci_add_bis(struct hci_dev *hdev, bdaddr_t *dst,
1498 				    struct bt_iso_qos *qos)
1499 {
1500 	struct hci_conn *conn;
1501 	struct iso_list_data data;
1502 	int err;
1503 
1504 	/* Let's make sure that le is enabled.*/
1505 	if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED)) {
1506 		if (lmp_le_capable(hdev))
1507 			return ERR_PTR(-ECONNREFUSED);
1508 		return ERR_PTR(-EOPNOTSUPP);
1509 	}
1510 
1511 	err = qos_set_big(hdev, qos);
1512 	if (err)
1513 		return ERR_PTR(err);
1514 
1515 	err = qos_set_bis(hdev, qos);
1516 	if (err)
1517 		return ERR_PTR(err);
1518 
1519 	data.big = qos->bcast.big;
1520 	data.bis = qos->bcast.bis;
1521 	data.count = 0;
1522 
1523 	/* Check if there is already a matching BIG/BIS */
1524 	hci_conn_hash_list_state(hdev, bis_list, ISO_LINK, BT_BOUND, &data);
1525 	if (data.count)
1526 		return ERR_PTR(-EADDRINUSE);
1527 
1528 	conn = hci_conn_hash_lookup_bis(hdev, dst, qos->bcast.big, qos->bcast.bis);
1529 	if (conn)
1530 		return ERR_PTR(-EADDRINUSE);
1531 
1532 	conn = hci_conn_add(hdev, ISO_LINK, dst, HCI_ROLE_MASTER);
1533 	if (!conn)
1534 		return ERR_PTR(-ENOMEM);
1535 
1536 	set_bit(HCI_CONN_PER_ADV, &conn->flags);
1537 	conn->state = BT_CONNECT;
1538 
1539 	hci_conn_hold(conn);
1540 	return conn;
1541 }
1542 
1543 /* This function requires the caller holds hdev->lock */
1544 struct hci_conn *hci_connect_le_scan(struct hci_dev *hdev, bdaddr_t *dst,
1545 				     u8 dst_type, u8 sec_level,
1546 				     u16 conn_timeout,
1547 				     enum conn_reasons conn_reason)
1548 {
1549 	struct hci_conn *conn;
1550 
1551 	/* Let's make sure that le is enabled.*/
1552 	if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED)) {
1553 		if (lmp_le_capable(hdev))
1554 			return ERR_PTR(-ECONNREFUSED);
1555 
1556 		return ERR_PTR(-EOPNOTSUPP);
1557 	}
1558 
1559 	/* Some devices send ATT messages as soon as the physical link is
1560 	 * established. To be able to handle these ATT messages, the user-
1561 	 * space first establishes the connection and then starts the pairing
1562 	 * process.
1563 	 *
1564 	 * So if a hci_conn object already exists for the following connection
1565 	 * attempt, we simply update pending_sec_level and auth_type fields
1566 	 * and return the object found.
1567 	 */
1568 	conn = hci_conn_hash_lookup_le(hdev, dst, dst_type);
1569 	if (conn) {
1570 		if (conn->pending_sec_level < sec_level)
1571 			conn->pending_sec_level = sec_level;
1572 		goto done;
1573 	}
1574 
1575 	BT_DBG("requesting refresh of dst_addr");
1576 
1577 	conn = hci_conn_add(hdev, LE_LINK, dst, HCI_ROLE_MASTER);
1578 	if (!conn)
1579 		return ERR_PTR(-ENOMEM);
1580 
1581 	if (hci_explicit_conn_params_set(hdev, dst, dst_type) < 0) {
1582 		hci_conn_del(conn);
1583 		return ERR_PTR(-EBUSY);
1584 	}
1585 
1586 	conn->state = BT_CONNECT;
1587 	set_bit(HCI_CONN_SCANNING, &conn->flags);
1588 	conn->dst_type = dst_type;
1589 	conn->sec_level = BT_SECURITY_LOW;
1590 	conn->pending_sec_level = sec_level;
1591 	conn->conn_timeout = conn_timeout;
1592 	conn->conn_reason = conn_reason;
1593 
1594 	hci_update_passive_scan(hdev);
1595 
1596 done:
1597 	hci_conn_hold(conn);
1598 	return conn;
1599 }
1600 
1601 struct hci_conn *hci_connect_acl(struct hci_dev *hdev, bdaddr_t *dst,
1602 				 u8 sec_level, u8 auth_type,
1603 				 enum conn_reasons conn_reason)
1604 {
1605 	struct hci_conn *acl;
1606 
1607 	if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) {
1608 		if (lmp_bredr_capable(hdev))
1609 			return ERR_PTR(-ECONNREFUSED);
1610 
1611 		return ERR_PTR(-EOPNOTSUPP);
1612 	}
1613 
1614 	acl = hci_conn_hash_lookup_ba(hdev, ACL_LINK, dst);
1615 	if (!acl) {
1616 		acl = hci_conn_add(hdev, ACL_LINK, dst, HCI_ROLE_MASTER);
1617 		if (!acl)
1618 			return ERR_PTR(-ENOMEM);
1619 	}
1620 
1621 	hci_conn_hold(acl);
1622 
1623 	acl->conn_reason = conn_reason;
1624 	if (acl->state == BT_OPEN || acl->state == BT_CLOSED) {
1625 		acl->sec_level = BT_SECURITY_LOW;
1626 		acl->pending_sec_level = sec_level;
1627 		acl->auth_type = auth_type;
1628 		hci_acl_create_connection(acl);
1629 	}
1630 
1631 	return acl;
1632 }
1633 
1634 static struct hci_link *hci_conn_link(struct hci_conn *parent,
1635 				      struct hci_conn *conn)
1636 {
1637 	struct hci_dev *hdev = parent->hdev;
1638 	struct hci_link *link;
1639 
1640 	bt_dev_dbg(hdev, "parent %p hcon %p", parent, conn);
1641 
1642 	if (conn->link)
1643 		return conn->link;
1644 
1645 	if (conn->parent)
1646 		return NULL;
1647 
1648 	link = kzalloc(sizeof(*link), GFP_KERNEL);
1649 	if (!link)
1650 		return NULL;
1651 
1652 	link->conn = hci_conn_hold(conn);
1653 	conn->link = link;
1654 	conn->parent = hci_conn_get(parent);
1655 
1656 	/* Use list_add_tail_rcu append to the list */
1657 	list_add_tail_rcu(&link->list, &parent->link_list);
1658 
1659 	return link;
1660 }
1661 
1662 struct hci_conn *hci_connect_sco(struct hci_dev *hdev, int type, bdaddr_t *dst,
1663 				 __u16 setting, struct bt_codec *codec)
1664 {
1665 	struct hci_conn *acl;
1666 	struct hci_conn *sco;
1667 	struct hci_link *link;
1668 
1669 	acl = hci_connect_acl(hdev, dst, BT_SECURITY_LOW, HCI_AT_NO_BONDING,
1670 			      CONN_REASON_SCO_CONNECT);
1671 	if (IS_ERR(acl))
1672 		return acl;
1673 
1674 	sco = hci_conn_hash_lookup_ba(hdev, type, dst);
1675 	if (!sco) {
1676 		sco = hci_conn_add(hdev, type, dst, HCI_ROLE_MASTER);
1677 		if (!sco) {
1678 			hci_conn_drop(acl);
1679 			return ERR_PTR(-ENOMEM);
1680 		}
1681 	}
1682 
1683 	link = hci_conn_link(acl, sco);
1684 	if (!link) {
1685 		hci_conn_drop(acl);
1686 		hci_conn_drop(sco);
1687 		return ERR_PTR(-ENOLINK);
1688 	}
1689 
1690 	sco->setting = setting;
1691 	sco->codec = *codec;
1692 
1693 	if (acl->state == BT_CONNECTED &&
1694 	    (sco->state == BT_OPEN || sco->state == BT_CLOSED)) {
1695 		set_bit(HCI_CONN_POWER_SAVE, &acl->flags);
1696 		hci_conn_enter_active_mode(acl, BT_POWER_FORCE_ACTIVE_ON);
1697 
1698 		if (test_bit(HCI_CONN_MODE_CHANGE_PEND, &acl->flags)) {
1699 			/* defer SCO setup until mode change completed */
1700 			set_bit(HCI_CONN_SCO_SETUP_PEND, &acl->flags);
1701 			return sco;
1702 		}
1703 
1704 		hci_sco_setup(acl, 0x00);
1705 	}
1706 
1707 	return sco;
1708 }
1709 
1710 static void cis_add(struct iso_list_data *d, struct bt_iso_qos *qos)
1711 {
1712 	struct hci_cis_params *cis = &d->pdu.cis[d->pdu.cp.num_cis];
1713 
1714 	cis->cis_id = qos->ucast.cis;
1715 	cis->c_sdu  = cpu_to_le16(qos->ucast.out.sdu);
1716 	cis->p_sdu  = cpu_to_le16(qos->ucast.in.sdu);
1717 	cis->c_phy  = qos->ucast.out.phy ? qos->ucast.out.phy : qos->ucast.in.phy;
1718 	cis->p_phy  = qos->ucast.in.phy ? qos->ucast.in.phy : qos->ucast.out.phy;
1719 	cis->c_rtn  = qos->ucast.out.rtn;
1720 	cis->p_rtn  = qos->ucast.in.rtn;
1721 
1722 	d->pdu.cp.num_cis++;
1723 }
1724 
1725 static void cis_list(struct hci_conn *conn, void *data)
1726 {
1727 	struct iso_list_data *d = data;
1728 
1729 	/* Skip if broadcast/ANY address */
1730 	if (!bacmp(&conn->dst, BDADDR_ANY))
1731 		return;
1732 
1733 	if (d->cig != conn->iso_qos.ucast.cig || d->cis == BT_ISO_QOS_CIS_UNSET ||
1734 	    d->cis != conn->iso_qos.ucast.cis)
1735 		return;
1736 
1737 	d->count++;
1738 
1739 	if (d->pdu.cp.cig_id == BT_ISO_QOS_CIG_UNSET ||
1740 	    d->count >= ARRAY_SIZE(d->pdu.cis))
1741 		return;
1742 
1743 	cis_add(d, &conn->iso_qos);
1744 }
1745 
1746 static int hci_le_create_big(struct hci_conn *conn, struct bt_iso_qos *qos)
1747 {
1748 	struct hci_dev *hdev = conn->hdev;
1749 	struct hci_cp_le_create_big cp;
1750 
1751 	memset(&cp, 0, sizeof(cp));
1752 
1753 	cp.handle = qos->bcast.big;
1754 	cp.adv_handle = qos->bcast.bis;
1755 	cp.num_bis  = 0x01;
1756 	hci_cpu_to_le24(qos->bcast.out.interval, cp.bis.sdu_interval);
1757 	cp.bis.sdu = cpu_to_le16(qos->bcast.out.sdu);
1758 	cp.bis.latency =  cpu_to_le16(qos->bcast.out.latency);
1759 	cp.bis.rtn  = qos->bcast.out.rtn;
1760 	cp.bis.phy  = qos->bcast.out.phy;
1761 	cp.bis.packing = qos->bcast.packing;
1762 	cp.bis.framing = qos->bcast.framing;
1763 	cp.bis.encryption = qos->bcast.encryption;
1764 	memcpy(cp.bis.bcode, qos->bcast.bcode, sizeof(cp.bis.bcode));
1765 
1766 	return hci_send_cmd(hdev, HCI_OP_LE_CREATE_BIG, sizeof(cp), &cp);
1767 }
1768 
1769 static void set_cig_params_complete(struct hci_dev *hdev, void *data, int err)
1770 {
1771 	struct iso_cig_params *pdu = data;
1772 
1773 	bt_dev_dbg(hdev, "");
1774 
1775 	if (err)
1776 		bt_dev_err(hdev, "Unable to set CIG parameters: %d", err);
1777 
1778 	kfree(pdu);
1779 }
1780 
1781 static int set_cig_params_sync(struct hci_dev *hdev, void *data)
1782 {
1783 	struct iso_cig_params *pdu = data;
1784 	u32 plen;
1785 
1786 	plen = sizeof(pdu->cp) + pdu->cp.num_cis * sizeof(pdu->cis[0]);
1787 	return __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_CIG_PARAMS, plen, pdu,
1788 				     HCI_CMD_TIMEOUT);
1789 }
1790 
1791 static bool hci_le_set_cig_params(struct hci_conn *conn, struct bt_iso_qos *qos)
1792 {
1793 	struct hci_dev *hdev = conn->hdev;
1794 	struct iso_list_data data;
1795 	struct iso_cig_params *pdu;
1796 
1797 	memset(&data, 0, sizeof(data));
1798 
1799 	/* Allocate first still reconfigurable CIG if not set */
1800 	if (qos->ucast.cig == BT_ISO_QOS_CIG_UNSET) {
1801 		for (data.cig = 0x00; data.cig < 0xf0; data.cig++) {
1802 			data.count = 0;
1803 
1804 			hci_conn_hash_list_state(hdev, find_cis, ISO_LINK,
1805 						 BT_CONNECT, &data);
1806 			if (data.count)
1807 				continue;
1808 
1809 			hci_conn_hash_list_state(hdev, find_cis, ISO_LINK,
1810 						 BT_CONNECTED, &data);
1811 			if (!data.count)
1812 				break;
1813 		}
1814 
1815 		if (data.cig == 0xf0)
1816 			return false;
1817 
1818 		/* Update CIG */
1819 		qos->ucast.cig = data.cig;
1820 	}
1821 
1822 	data.pdu.cp.cig_id = qos->ucast.cig;
1823 	hci_cpu_to_le24(qos->ucast.out.interval, data.pdu.cp.c_interval);
1824 	hci_cpu_to_le24(qos->ucast.in.interval, data.pdu.cp.p_interval);
1825 	data.pdu.cp.sca = qos->ucast.sca;
1826 	data.pdu.cp.packing = qos->ucast.packing;
1827 	data.pdu.cp.framing = qos->ucast.framing;
1828 	data.pdu.cp.c_latency = cpu_to_le16(qos->ucast.out.latency);
1829 	data.pdu.cp.p_latency = cpu_to_le16(qos->ucast.in.latency);
1830 
1831 	if (qos->ucast.cis != BT_ISO_QOS_CIS_UNSET) {
1832 		data.count = 0;
1833 		data.cig = qos->ucast.cig;
1834 		data.cis = qos->ucast.cis;
1835 
1836 		hci_conn_hash_list_state(hdev, cis_list, ISO_LINK, BT_BOUND,
1837 					 &data);
1838 		if (data.count)
1839 			return false;
1840 
1841 		cis_add(&data, qos);
1842 	}
1843 
1844 	/* Reprogram all CIS(s) with the same CIG */
1845 	for (data.cig = qos->ucast.cig, data.cis = 0x00; data.cis < 0x11;
1846 	     data.cis++) {
1847 		data.count = 0;
1848 
1849 		hci_conn_hash_list_state(hdev, cis_list, ISO_LINK, BT_BOUND,
1850 					 &data);
1851 		if (data.count)
1852 			continue;
1853 
1854 		/* Allocate a CIS if not set */
1855 		if (qos->ucast.cis == BT_ISO_QOS_CIS_UNSET) {
1856 			/* Update CIS */
1857 			qos->ucast.cis = data.cis;
1858 			cis_add(&data, qos);
1859 		}
1860 	}
1861 
1862 	if (qos->ucast.cis == BT_ISO_QOS_CIS_UNSET || !data.pdu.cp.num_cis)
1863 		return false;
1864 
1865 	pdu = kmemdup(&data.pdu, sizeof(*pdu), GFP_KERNEL);
1866 	if (!pdu)
1867 		return false;
1868 
1869 	if (hci_cmd_sync_queue(hdev, set_cig_params_sync, pdu,
1870 			       set_cig_params_complete) < 0) {
1871 		kfree(pdu);
1872 		return false;
1873 	}
1874 
1875 	return true;
1876 }
1877 
1878 struct hci_conn *hci_bind_cis(struct hci_dev *hdev, bdaddr_t *dst,
1879 			      __u8 dst_type, struct bt_iso_qos *qos)
1880 {
1881 	struct hci_conn *cis;
1882 
1883 	cis = hci_conn_hash_lookup_cis(hdev, dst, dst_type, qos->ucast.cig,
1884 				       qos->ucast.cis);
1885 	if (!cis) {
1886 		cis = hci_conn_add(hdev, ISO_LINK, dst, HCI_ROLE_MASTER);
1887 		if (!cis)
1888 			return ERR_PTR(-ENOMEM);
1889 		cis->cleanup = cis_cleanup;
1890 		cis->dst_type = dst_type;
1891 	}
1892 
1893 	if (cis->state == BT_CONNECTED)
1894 		return cis;
1895 
1896 	/* Check if CIS has been set and the settings matches */
1897 	if (cis->state == BT_BOUND &&
1898 	    !memcmp(&cis->iso_qos, qos, sizeof(*qos)))
1899 		return cis;
1900 
1901 	/* Update LINK PHYs according to QoS preference */
1902 	cis->le_tx_phy = qos->ucast.out.phy;
1903 	cis->le_rx_phy = qos->ucast.in.phy;
1904 
1905 	/* If output interval is not set use the input interval as it cannot be
1906 	 * 0x000000.
1907 	 */
1908 	if (!qos->ucast.out.interval)
1909 		qos->ucast.out.interval = qos->ucast.in.interval;
1910 
1911 	/* If input interval is not set use the output interval as it cannot be
1912 	 * 0x000000.
1913 	 */
1914 	if (!qos->ucast.in.interval)
1915 		qos->ucast.in.interval = qos->ucast.out.interval;
1916 
1917 	/* If output latency is not set use the input latency as it cannot be
1918 	 * 0x0000.
1919 	 */
1920 	if (!qos->ucast.out.latency)
1921 		qos->ucast.out.latency = qos->ucast.in.latency;
1922 
1923 	/* If input latency is not set use the output latency as it cannot be
1924 	 * 0x0000.
1925 	 */
1926 	if (!qos->ucast.in.latency)
1927 		qos->ucast.in.latency = qos->ucast.out.latency;
1928 
1929 	if (!hci_le_set_cig_params(cis, qos)) {
1930 		hci_conn_drop(cis);
1931 		return ERR_PTR(-EINVAL);
1932 	}
1933 
1934 	cis->iso_qos = *qos;
1935 	cis->state = BT_BOUND;
1936 
1937 	return cis;
1938 }
1939 
1940 bool hci_iso_setup_path(struct hci_conn *conn)
1941 {
1942 	struct hci_dev *hdev = conn->hdev;
1943 	struct hci_cp_le_setup_iso_path cmd;
1944 
1945 	memset(&cmd, 0, sizeof(cmd));
1946 
1947 	if (conn->iso_qos.ucast.out.sdu) {
1948 		cmd.handle = cpu_to_le16(conn->handle);
1949 		cmd.direction = 0x00; /* Input (Host to Controller) */
1950 		cmd.path = 0x00; /* HCI path if enabled */
1951 		cmd.codec = 0x03; /* Transparent Data */
1952 
1953 		if (hci_send_cmd(hdev, HCI_OP_LE_SETUP_ISO_PATH, sizeof(cmd),
1954 				 &cmd) < 0)
1955 			return false;
1956 	}
1957 
1958 	if (conn->iso_qos.ucast.in.sdu) {
1959 		cmd.handle = cpu_to_le16(conn->handle);
1960 		cmd.direction = 0x01; /* Output (Controller to Host) */
1961 		cmd.path = 0x00; /* HCI path if enabled */
1962 		cmd.codec = 0x03; /* Transparent Data */
1963 
1964 		if (hci_send_cmd(hdev, HCI_OP_LE_SETUP_ISO_PATH, sizeof(cmd),
1965 				 &cmd) < 0)
1966 			return false;
1967 	}
1968 
1969 	return true;
1970 }
1971 
1972 static int hci_create_cis_sync(struct hci_dev *hdev, void *data)
1973 {
1974 	return hci_le_create_cis_sync(hdev, data);
1975 }
1976 
1977 int hci_le_create_cis(struct hci_conn *conn)
1978 {
1979 	struct hci_conn *cis;
1980 	struct hci_link *link, *t;
1981 	struct hci_dev *hdev = conn->hdev;
1982 	int err;
1983 
1984 	bt_dev_dbg(hdev, "hcon %p", conn);
1985 
1986 	switch (conn->type) {
1987 	case LE_LINK:
1988 		if (conn->state != BT_CONNECTED || list_empty(&conn->link_list))
1989 			return -EINVAL;
1990 
1991 		cis = NULL;
1992 
1993 		/* hci_conn_link uses list_add_tail_rcu so the list is in
1994 		 * the same order as the connections are requested.
1995 		 */
1996 		list_for_each_entry_safe(link, t, &conn->link_list, list) {
1997 			if (link->conn->state == BT_BOUND) {
1998 				err = hci_le_create_cis(link->conn);
1999 				if (err)
2000 					return err;
2001 
2002 				cis = link->conn;
2003 			}
2004 		}
2005 
2006 		return cis ? 0 : -EINVAL;
2007 	case ISO_LINK:
2008 		cis = conn;
2009 		break;
2010 	default:
2011 		return -EINVAL;
2012 	}
2013 
2014 	if (cis->state == BT_CONNECT)
2015 		return 0;
2016 
2017 	/* Queue Create CIS */
2018 	err = hci_cmd_sync_queue(hdev, hci_create_cis_sync, cis, NULL);
2019 	if (err)
2020 		return err;
2021 
2022 	cis->state = BT_CONNECT;
2023 
2024 	return 0;
2025 }
2026 
2027 static void hci_iso_qos_setup(struct hci_dev *hdev, struct hci_conn *conn,
2028 			      struct bt_iso_io_qos *qos, __u8 phy)
2029 {
2030 	/* Only set MTU if PHY is enabled */
2031 	if (!qos->sdu && qos->phy) {
2032 		if (hdev->iso_mtu > 0)
2033 			qos->sdu = hdev->iso_mtu;
2034 		else if (hdev->le_mtu > 0)
2035 			qos->sdu = hdev->le_mtu;
2036 		else
2037 			qos->sdu = hdev->acl_mtu;
2038 	}
2039 
2040 	/* Use the same PHY as ACL if set to any */
2041 	if (qos->phy == BT_ISO_PHY_ANY)
2042 		qos->phy = phy;
2043 
2044 	/* Use LE ACL connection interval if not set */
2045 	if (!qos->interval)
2046 		/* ACL interval unit in 1.25 ms to us */
2047 		qos->interval = conn->le_conn_interval * 1250;
2048 
2049 	/* Use LE ACL connection latency if not set */
2050 	if (!qos->latency)
2051 		qos->latency = conn->le_conn_latency;
2052 }
2053 
2054 static void hci_bind_bis(struct hci_conn *conn,
2055 			 struct bt_iso_qos *qos)
2056 {
2057 	/* Update LINK PHYs according to QoS preference */
2058 	conn->le_tx_phy = qos->bcast.out.phy;
2059 	conn->le_tx_phy = qos->bcast.out.phy;
2060 	conn->iso_qos = *qos;
2061 	conn->state = BT_BOUND;
2062 }
2063 
2064 static int create_big_sync(struct hci_dev *hdev, void *data)
2065 {
2066 	struct hci_conn *conn = data;
2067 	struct bt_iso_qos *qos = &conn->iso_qos;
2068 	u16 interval, sync_interval = 0;
2069 	u32 flags = 0;
2070 	int err;
2071 
2072 	if (qos->bcast.out.phy == 0x02)
2073 		flags |= MGMT_ADV_FLAG_SEC_2M;
2074 
2075 	/* Align intervals */
2076 	interval = (qos->bcast.out.interval / 1250) * qos->bcast.sync_factor;
2077 
2078 	if (qos->bcast.bis)
2079 		sync_interval = interval * 4;
2080 
2081 	err = hci_start_per_adv_sync(hdev, qos->bcast.bis, conn->le_per_adv_data_len,
2082 				     conn->le_per_adv_data, flags, interval,
2083 				     interval, sync_interval);
2084 	if (err)
2085 		return err;
2086 
2087 	return hci_le_create_big(conn, &conn->iso_qos);
2088 }
2089 
2090 static void create_pa_complete(struct hci_dev *hdev, void *data, int err)
2091 {
2092 	struct hci_cp_le_pa_create_sync *cp = data;
2093 
2094 	bt_dev_dbg(hdev, "");
2095 
2096 	if (err)
2097 		bt_dev_err(hdev, "Unable to create PA: %d", err);
2098 
2099 	kfree(cp);
2100 }
2101 
2102 static int create_pa_sync(struct hci_dev *hdev, void *data)
2103 {
2104 	struct hci_cp_le_pa_create_sync *cp = data;
2105 	int err;
2106 
2107 	err = __hci_cmd_sync_status(hdev, HCI_OP_LE_PA_CREATE_SYNC,
2108 				    sizeof(*cp), cp, HCI_CMD_TIMEOUT);
2109 	if (err) {
2110 		hci_dev_clear_flag(hdev, HCI_PA_SYNC);
2111 		return err;
2112 	}
2113 
2114 	return hci_update_passive_scan_sync(hdev);
2115 }
2116 
2117 int hci_pa_create_sync(struct hci_dev *hdev, bdaddr_t *dst, __u8 dst_type,
2118 		       __u8 sid, struct bt_iso_qos *qos)
2119 {
2120 	struct hci_cp_le_pa_create_sync *cp;
2121 
2122 	if (hci_dev_test_and_set_flag(hdev, HCI_PA_SYNC))
2123 		return -EBUSY;
2124 
2125 	cp = kzalloc(sizeof(*cp), GFP_KERNEL);
2126 	if (!cp) {
2127 		hci_dev_clear_flag(hdev, HCI_PA_SYNC);
2128 		return -ENOMEM;
2129 	}
2130 
2131 	cp->options = qos->bcast.options;
2132 	cp->sid = sid;
2133 	cp->addr_type = dst_type;
2134 	bacpy(&cp->addr, dst);
2135 	cp->skip = cpu_to_le16(qos->bcast.skip);
2136 	cp->sync_timeout = cpu_to_le16(qos->bcast.sync_timeout);
2137 	cp->sync_cte_type = qos->bcast.sync_cte_type;
2138 
2139 	/* Queue start pa_create_sync and scan */
2140 	return hci_cmd_sync_queue(hdev, create_pa_sync, cp, create_pa_complete);
2141 }
2142 
2143 int hci_le_big_create_sync(struct hci_dev *hdev, struct bt_iso_qos *qos,
2144 			   __u16 sync_handle, __u8 num_bis, __u8 bis[])
2145 {
2146 	struct _packed {
2147 		struct hci_cp_le_big_create_sync cp;
2148 		__u8  bis[0x11];
2149 	} pdu;
2150 	int err;
2151 
2152 	if (num_bis > sizeof(pdu.bis))
2153 		return -EINVAL;
2154 
2155 	err = qos_set_big(hdev, qos);
2156 	if (err)
2157 		return err;
2158 
2159 	memset(&pdu, 0, sizeof(pdu));
2160 	pdu.cp.handle = qos->bcast.big;
2161 	pdu.cp.sync_handle = cpu_to_le16(sync_handle);
2162 	pdu.cp.encryption = qos->bcast.encryption;
2163 	memcpy(pdu.cp.bcode, qos->bcast.bcode, sizeof(pdu.cp.bcode));
2164 	pdu.cp.mse = qos->bcast.mse;
2165 	pdu.cp.timeout = cpu_to_le16(qos->bcast.timeout);
2166 	pdu.cp.num_bis = num_bis;
2167 	memcpy(pdu.bis, bis, num_bis);
2168 
2169 	return hci_send_cmd(hdev, HCI_OP_LE_BIG_CREATE_SYNC,
2170 			    sizeof(pdu.cp) + num_bis, &pdu);
2171 }
2172 
2173 static void create_big_complete(struct hci_dev *hdev, void *data, int err)
2174 {
2175 	struct hci_conn *conn = data;
2176 
2177 	bt_dev_dbg(hdev, "conn %p", conn);
2178 
2179 	if (err) {
2180 		bt_dev_err(hdev, "Unable to create BIG: %d", err);
2181 		hci_connect_cfm(conn, err);
2182 		hci_conn_del(conn);
2183 	}
2184 }
2185 
2186 struct hci_conn *hci_connect_bis(struct hci_dev *hdev, bdaddr_t *dst,
2187 				 __u8 dst_type, struct bt_iso_qos *qos,
2188 				 __u8 base_len, __u8 *base)
2189 {
2190 	struct hci_conn *conn;
2191 	int err;
2192 
2193 	/* We need hci_conn object using the BDADDR_ANY as dst */
2194 	conn = hci_add_bis(hdev, dst, qos);
2195 	if (IS_ERR(conn))
2196 		return conn;
2197 
2198 	hci_bind_bis(conn, qos);
2199 
2200 	/* Add Basic Announcement into Peridic Adv Data if BASE is set */
2201 	if (base_len && base) {
2202 		base_len = eir_append_service_data(conn->le_per_adv_data, 0,
2203 						   0x1851, base, base_len);
2204 		conn->le_per_adv_data_len = base_len;
2205 	}
2206 
2207 	/* Queue start periodic advertising and create BIG */
2208 	err = hci_cmd_sync_queue(hdev, create_big_sync, conn,
2209 				 create_big_complete);
2210 	if (err < 0) {
2211 		hci_conn_drop(conn);
2212 		return ERR_PTR(err);
2213 	}
2214 
2215 	hci_iso_qos_setup(hdev, conn, &qos->bcast.out,
2216 			  conn->le_tx_phy ? conn->le_tx_phy :
2217 			  hdev->le_tx_def_phys);
2218 
2219 	return conn;
2220 }
2221 
2222 struct hci_conn *hci_connect_cis(struct hci_dev *hdev, bdaddr_t *dst,
2223 				 __u8 dst_type, struct bt_iso_qos *qos)
2224 {
2225 	struct hci_conn *le;
2226 	struct hci_conn *cis;
2227 	struct hci_link *link;
2228 
2229 	if (hci_dev_test_flag(hdev, HCI_ADVERTISING))
2230 		le = hci_connect_le(hdev, dst, dst_type, false,
2231 				    BT_SECURITY_LOW,
2232 				    HCI_LE_CONN_TIMEOUT,
2233 				    HCI_ROLE_SLAVE);
2234 	else
2235 		le = hci_connect_le_scan(hdev, dst, dst_type,
2236 					 BT_SECURITY_LOW,
2237 					 HCI_LE_CONN_TIMEOUT,
2238 					 CONN_REASON_ISO_CONNECT);
2239 	if (IS_ERR(le))
2240 		return le;
2241 
2242 	hci_iso_qos_setup(hdev, le, &qos->ucast.out,
2243 			  le->le_tx_phy ? le->le_tx_phy : hdev->le_tx_def_phys);
2244 	hci_iso_qos_setup(hdev, le, &qos->ucast.in,
2245 			  le->le_rx_phy ? le->le_rx_phy : hdev->le_rx_def_phys);
2246 
2247 	cis = hci_bind_cis(hdev, dst, dst_type, qos);
2248 	if (IS_ERR(cis)) {
2249 		hci_conn_drop(le);
2250 		return cis;
2251 	}
2252 
2253 	link = hci_conn_link(le, cis);
2254 	if (!link) {
2255 		hci_conn_drop(le);
2256 		hci_conn_drop(cis);
2257 		return ERR_PTR(-ENOLINK);
2258 	}
2259 
2260 	/* If LE is already connected and CIS handle is already set proceed to
2261 	 * Create CIS immediately.
2262 	 */
2263 	if (le->state == BT_CONNECTED && cis->handle != HCI_CONN_HANDLE_UNSET)
2264 		hci_le_create_cis(cis);
2265 
2266 	return cis;
2267 }
2268 
2269 /* Check link security requirement */
2270 int hci_conn_check_link_mode(struct hci_conn *conn)
2271 {
2272 	BT_DBG("hcon %p", conn);
2273 
2274 	/* In Secure Connections Only mode, it is required that Secure
2275 	 * Connections is used and the link is encrypted with AES-CCM
2276 	 * using a P-256 authenticated combination key.
2277 	 */
2278 	if (hci_dev_test_flag(conn->hdev, HCI_SC_ONLY)) {
2279 		if (!hci_conn_sc_enabled(conn) ||
2280 		    !test_bit(HCI_CONN_AES_CCM, &conn->flags) ||
2281 		    conn->key_type != HCI_LK_AUTH_COMBINATION_P256)
2282 			return 0;
2283 	}
2284 
2285 	 /* AES encryption is required for Level 4:
2286 	  *
2287 	  * BLUETOOTH CORE SPECIFICATION Version 5.2 | Vol 3, Part C
2288 	  * page 1319:
2289 	  *
2290 	  * 128-bit equivalent strength for link and encryption keys
2291 	  * required using FIPS approved algorithms (E0 not allowed,
2292 	  * SAFER+ not allowed, and P-192 not allowed; encryption key
2293 	  * not shortened)
2294 	  */
2295 	if (conn->sec_level == BT_SECURITY_FIPS &&
2296 	    !test_bit(HCI_CONN_AES_CCM, &conn->flags)) {
2297 		bt_dev_err(conn->hdev,
2298 			   "Invalid security: Missing AES-CCM usage");
2299 		return 0;
2300 	}
2301 
2302 	if (hci_conn_ssp_enabled(conn) &&
2303 	    !test_bit(HCI_CONN_ENCRYPT, &conn->flags))
2304 		return 0;
2305 
2306 	return 1;
2307 }
2308 
2309 /* Authenticate remote device */
2310 static int hci_conn_auth(struct hci_conn *conn, __u8 sec_level, __u8 auth_type)
2311 {
2312 	BT_DBG("hcon %p", conn);
2313 
2314 	if (conn->pending_sec_level > sec_level)
2315 		sec_level = conn->pending_sec_level;
2316 
2317 	if (sec_level > conn->sec_level)
2318 		conn->pending_sec_level = sec_level;
2319 	else if (test_bit(HCI_CONN_AUTH, &conn->flags))
2320 		return 1;
2321 
2322 	/* Make sure we preserve an existing MITM requirement*/
2323 	auth_type |= (conn->auth_type & 0x01);
2324 
2325 	conn->auth_type = auth_type;
2326 
2327 	if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
2328 		struct hci_cp_auth_requested cp;
2329 
2330 		cp.handle = cpu_to_le16(conn->handle);
2331 		hci_send_cmd(conn->hdev, HCI_OP_AUTH_REQUESTED,
2332 			     sizeof(cp), &cp);
2333 
2334 		/* If we're already encrypted set the REAUTH_PEND flag,
2335 		 * otherwise set the ENCRYPT_PEND.
2336 		 */
2337 		if (test_bit(HCI_CONN_ENCRYPT, &conn->flags))
2338 			set_bit(HCI_CONN_REAUTH_PEND, &conn->flags);
2339 		else
2340 			set_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
2341 	}
2342 
2343 	return 0;
2344 }
2345 
2346 /* Encrypt the link */
2347 static void hci_conn_encrypt(struct hci_conn *conn)
2348 {
2349 	BT_DBG("hcon %p", conn);
2350 
2351 	if (!test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags)) {
2352 		struct hci_cp_set_conn_encrypt cp;
2353 		cp.handle  = cpu_to_le16(conn->handle);
2354 		cp.encrypt = 0x01;
2355 		hci_send_cmd(conn->hdev, HCI_OP_SET_CONN_ENCRYPT, sizeof(cp),
2356 			     &cp);
2357 	}
2358 }
2359 
2360 /* Enable security */
2361 int hci_conn_security(struct hci_conn *conn, __u8 sec_level, __u8 auth_type,
2362 		      bool initiator)
2363 {
2364 	BT_DBG("hcon %p", conn);
2365 
2366 	if (conn->type == LE_LINK)
2367 		return smp_conn_security(conn, sec_level);
2368 
2369 	/* For sdp we don't need the link key. */
2370 	if (sec_level == BT_SECURITY_SDP)
2371 		return 1;
2372 
2373 	/* For non 2.1 devices and low security level we don't need the link
2374 	   key. */
2375 	if (sec_level == BT_SECURITY_LOW && !hci_conn_ssp_enabled(conn))
2376 		return 1;
2377 
2378 	/* For other security levels we need the link key. */
2379 	if (!test_bit(HCI_CONN_AUTH, &conn->flags))
2380 		goto auth;
2381 
2382 	/* An authenticated FIPS approved combination key has sufficient
2383 	 * security for security level 4. */
2384 	if (conn->key_type == HCI_LK_AUTH_COMBINATION_P256 &&
2385 	    sec_level == BT_SECURITY_FIPS)
2386 		goto encrypt;
2387 
2388 	/* An authenticated combination key has sufficient security for
2389 	   security level 3. */
2390 	if ((conn->key_type == HCI_LK_AUTH_COMBINATION_P192 ||
2391 	     conn->key_type == HCI_LK_AUTH_COMBINATION_P256) &&
2392 	    sec_level == BT_SECURITY_HIGH)
2393 		goto encrypt;
2394 
2395 	/* An unauthenticated combination key has sufficient security for
2396 	   security level 1 and 2. */
2397 	if ((conn->key_type == HCI_LK_UNAUTH_COMBINATION_P192 ||
2398 	     conn->key_type == HCI_LK_UNAUTH_COMBINATION_P256) &&
2399 	    (sec_level == BT_SECURITY_MEDIUM || sec_level == BT_SECURITY_LOW))
2400 		goto encrypt;
2401 
2402 	/* A combination key has always sufficient security for the security
2403 	   levels 1 or 2. High security level requires the combination key
2404 	   is generated using maximum PIN code length (16).
2405 	   For pre 2.1 units. */
2406 	if (conn->key_type == HCI_LK_COMBINATION &&
2407 	    (sec_level == BT_SECURITY_MEDIUM || sec_level == BT_SECURITY_LOW ||
2408 	     conn->pin_length == 16))
2409 		goto encrypt;
2410 
2411 auth:
2412 	if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags))
2413 		return 0;
2414 
2415 	if (initiator)
2416 		set_bit(HCI_CONN_AUTH_INITIATOR, &conn->flags);
2417 
2418 	if (!hci_conn_auth(conn, sec_level, auth_type))
2419 		return 0;
2420 
2421 encrypt:
2422 	if (test_bit(HCI_CONN_ENCRYPT, &conn->flags)) {
2423 		/* Ensure that the encryption key size has been read,
2424 		 * otherwise stall the upper layer responses.
2425 		 */
2426 		if (!conn->enc_key_size)
2427 			return 0;
2428 
2429 		/* Nothing else needed, all requirements are met */
2430 		return 1;
2431 	}
2432 
2433 	hci_conn_encrypt(conn);
2434 	return 0;
2435 }
2436 EXPORT_SYMBOL(hci_conn_security);
2437 
2438 /* Check secure link requirement */
2439 int hci_conn_check_secure(struct hci_conn *conn, __u8 sec_level)
2440 {
2441 	BT_DBG("hcon %p", conn);
2442 
2443 	/* Accept if non-secure or higher security level is required */
2444 	if (sec_level != BT_SECURITY_HIGH && sec_level != BT_SECURITY_FIPS)
2445 		return 1;
2446 
2447 	/* Accept if secure or higher security level is already present */
2448 	if (conn->sec_level == BT_SECURITY_HIGH ||
2449 	    conn->sec_level == BT_SECURITY_FIPS)
2450 		return 1;
2451 
2452 	/* Reject not secure link */
2453 	return 0;
2454 }
2455 EXPORT_SYMBOL(hci_conn_check_secure);
2456 
2457 /* Switch role */
2458 int hci_conn_switch_role(struct hci_conn *conn, __u8 role)
2459 {
2460 	BT_DBG("hcon %p", conn);
2461 
2462 	if (role == conn->role)
2463 		return 1;
2464 
2465 	if (!test_and_set_bit(HCI_CONN_RSWITCH_PEND, &conn->flags)) {
2466 		struct hci_cp_switch_role cp;
2467 		bacpy(&cp.bdaddr, &conn->dst);
2468 		cp.role = role;
2469 		hci_send_cmd(conn->hdev, HCI_OP_SWITCH_ROLE, sizeof(cp), &cp);
2470 	}
2471 
2472 	return 0;
2473 }
2474 EXPORT_SYMBOL(hci_conn_switch_role);
2475 
2476 /* Enter active mode */
2477 void hci_conn_enter_active_mode(struct hci_conn *conn, __u8 force_active)
2478 {
2479 	struct hci_dev *hdev = conn->hdev;
2480 
2481 	BT_DBG("hcon %p mode %d", conn, conn->mode);
2482 
2483 	if (conn->mode != HCI_CM_SNIFF)
2484 		goto timer;
2485 
2486 	if (!test_bit(HCI_CONN_POWER_SAVE, &conn->flags) && !force_active)
2487 		goto timer;
2488 
2489 	if (!test_and_set_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags)) {
2490 		struct hci_cp_exit_sniff_mode cp;
2491 		cp.handle = cpu_to_le16(conn->handle);
2492 		hci_send_cmd(hdev, HCI_OP_EXIT_SNIFF_MODE, sizeof(cp), &cp);
2493 	}
2494 
2495 timer:
2496 	if (hdev->idle_timeout > 0)
2497 		queue_delayed_work(hdev->workqueue, &conn->idle_work,
2498 				   msecs_to_jiffies(hdev->idle_timeout));
2499 }
2500 
2501 /* Drop all connection on the device */
2502 void hci_conn_hash_flush(struct hci_dev *hdev)
2503 {
2504 	struct list_head *head = &hdev->conn_hash.list;
2505 	struct hci_conn *conn;
2506 
2507 	BT_DBG("hdev %s", hdev->name);
2508 
2509 	/* We should not traverse the list here, because hci_conn_del
2510 	 * can remove extra links, which may cause the list traversal
2511 	 * to hit items that have already been released.
2512 	 */
2513 	while ((conn = list_first_entry_or_null(head,
2514 						struct hci_conn,
2515 						list)) != NULL) {
2516 		conn->state = BT_CLOSED;
2517 		hci_disconn_cfm(conn, HCI_ERROR_LOCAL_HOST_TERM);
2518 		hci_conn_del(conn);
2519 	}
2520 }
2521 
2522 /* Check pending connect attempts */
2523 void hci_conn_check_pending(struct hci_dev *hdev)
2524 {
2525 	struct hci_conn *conn;
2526 
2527 	BT_DBG("hdev %s", hdev->name);
2528 
2529 	hci_dev_lock(hdev);
2530 
2531 	conn = hci_conn_hash_lookup_state(hdev, ACL_LINK, BT_CONNECT2);
2532 	if (conn)
2533 		hci_acl_create_connection(conn);
2534 
2535 	hci_dev_unlock(hdev);
2536 }
2537 
2538 static u32 get_link_mode(struct hci_conn *conn)
2539 {
2540 	u32 link_mode = 0;
2541 
2542 	if (conn->role == HCI_ROLE_MASTER)
2543 		link_mode |= HCI_LM_MASTER;
2544 
2545 	if (test_bit(HCI_CONN_ENCRYPT, &conn->flags))
2546 		link_mode |= HCI_LM_ENCRYPT;
2547 
2548 	if (test_bit(HCI_CONN_AUTH, &conn->flags))
2549 		link_mode |= HCI_LM_AUTH;
2550 
2551 	if (test_bit(HCI_CONN_SECURE, &conn->flags))
2552 		link_mode |= HCI_LM_SECURE;
2553 
2554 	if (test_bit(HCI_CONN_FIPS, &conn->flags))
2555 		link_mode |= HCI_LM_FIPS;
2556 
2557 	return link_mode;
2558 }
2559 
2560 int hci_get_conn_list(void __user *arg)
2561 {
2562 	struct hci_conn *c;
2563 	struct hci_conn_list_req req, *cl;
2564 	struct hci_conn_info *ci;
2565 	struct hci_dev *hdev;
2566 	int n = 0, size, err;
2567 
2568 	if (copy_from_user(&req, arg, sizeof(req)))
2569 		return -EFAULT;
2570 
2571 	if (!req.conn_num || req.conn_num > (PAGE_SIZE * 2) / sizeof(*ci))
2572 		return -EINVAL;
2573 
2574 	size = sizeof(req) + req.conn_num * sizeof(*ci);
2575 
2576 	cl = kmalloc(size, GFP_KERNEL);
2577 	if (!cl)
2578 		return -ENOMEM;
2579 
2580 	hdev = hci_dev_get(req.dev_id);
2581 	if (!hdev) {
2582 		kfree(cl);
2583 		return -ENODEV;
2584 	}
2585 
2586 	ci = cl->conn_info;
2587 
2588 	hci_dev_lock(hdev);
2589 	list_for_each_entry(c, &hdev->conn_hash.list, list) {
2590 		bacpy(&(ci + n)->bdaddr, &c->dst);
2591 		(ci + n)->handle = c->handle;
2592 		(ci + n)->type  = c->type;
2593 		(ci + n)->out   = c->out;
2594 		(ci + n)->state = c->state;
2595 		(ci + n)->link_mode = get_link_mode(c);
2596 		if (++n >= req.conn_num)
2597 			break;
2598 	}
2599 	hci_dev_unlock(hdev);
2600 
2601 	cl->dev_id = hdev->id;
2602 	cl->conn_num = n;
2603 	size = sizeof(req) + n * sizeof(*ci);
2604 
2605 	hci_dev_put(hdev);
2606 
2607 	err = copy_to_user(arg, cl, size);
2608 	kfree(cl);
2609 
2610 	return err ? -EFAULT : 0;
2611 }
2612 
2613 int hci_get_conn_info(struct hci_dev *hdev, void __user *arg)
2614 {
2615 	struct hci_conn_info_req req;
2616 	struct hci_conn_info ci;
2617 	struct hci_conn *conn;
2618 	char __user *ptr = arg + sizeof(req);
2619 
2620 	if (copy_from_user(&req, arg, sizeof(req)))
2621 		return -EFAULT;
2622 
2623 	hci_dev_lock(hdev);
2624 	conn = hci_conn_hash_lookup_ba(hdev, req.type, &req.bdaddr);
2625 	if (conn) {
2626 		bacpy(&ci.bdaddr, &conn->dst);
2627 		ci.handle = conn->handle;
2628 		ci.type  = conn->type;
2629 		ci.out   = conn->out;
2630 		ci.state = conn->state;
2631 		ci.link_mode = get_link_mode(conn);
2632 	}
2633 	hci_dev_unlock(hdev);
2634 
2635 	if (!conn)
2636 		return -ENOENT;
2637 
2638 	return copy_to_user(ptr, &ci, sizeof(ci)) ? -EFAULT : 0;
2639 }
2640 
2641 int hci_get_auth_info(struct hci_dev *hdev, void __user *arg)
2642 {
2643 	struct hci_auth_info_req req;
2644 	struct hci_conn *conn;
2645 
2646 	if (copy_from_user(&req, arg, sizeof(req)))
2647 		return -EFAULT;
2648 
2649 	hci_dev_lock(hdev);
2650 	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &req.bdaddr);
2651 	if (conn)
2652 		req.type = conn->auth_type;
2653 	hci_dev_unlock(hdev);
2654 
2655 	if (!conn)
2656 		return -ENOENT;
2657 
2658 	return copy_to_user(arg, &req, sizeof(req)) ? -EFAULT : 0;
2659 }
2660 
2661 struct hci_chan *hci_chan_create(struct hci_conn *conn)
2662 {
2663 	struct hci_dev *hdev = conn->hdev;
2664 	struct hci_chan *chan;
2665 
2666 	BT_DBG("%s hcon %p", hdev->name, conn);
2667 
2668 	if (test_bit(HCI_CONN_DROP, &conn->flags)) {
2669 		BT_DBG("Refusing to create new hci_chan");
2670 		return NULL;
2671 	}
2672 
2673 	chan = kzalloc(sizeof(*chan), GFP_KERNEL);
2674 	if (!chan)
2675 		return NULL;
2676 
2677 	chan->conn = hci_conn_get(conn);
2678 	skb_queue_head_init(&chan->data_q);
2679 	chan->state = BT_CONNECTED;
2680 
2681 	list_add_rcu(&chan->list, &conn->chan_list);
2682 
2683 	return chan;
2684 }
2685 
2686 void hci_chan_del(struct hci_chan *chan)
2687 {
2688 	struct hci_conn *conn = chan->conn;
2689 	struct hci_dev *hdev = conn->hdev;
2690 
2691 	BT_DBG("%s hcon %p chan %p", hdev->name, conn, chan);
2692 
2693 	list_del_rcu(&chan->list);
2694 
2695 	synchronize_rcu();
2696 
2697 	/* Prevent new hci_chan's to be created for this hci_conn */
2698 	set_bit(HCI_CONN_DROP, &conn->flags);
2699 
2700 	hci_conn_put(conn);
2701 
2702 	skb_queue_purge(&chan->data_q);
2703 	kfree(chan);
2704 }
2705 
2706 void hci_chan_list_flush(struct hci_conn *conn)
2707 {
2708 	struct hci_chan *chan, *n;
2709 
2710 	BT_DBG("hcon %p", conn);
2711 
2712 	list_for_each_entry_safe(chan, n, &conn->chan_list, list)
2713 		hci_chan_del(chan);
2714 }
2715 
2716 static struct hci_chan *__hci_chan_lookup_handle(struct hci_conn *hcon,
2717 						 __u16 handle)
2718 {
2719 	struct hci_chan *hchan;
2720 
2721 	list_for_each_entry(hchan, &hcon->chan_list, list) {
2722 		if (hchan->handle == handle)
2723 			return hchan;
2724 	}
2725 
2726 	return NULL;
2727 }
2728 
2729 struct hci_chan *hci_chan_lookup_handle(struct hci_dev *hdev, __u16 handle)
2730 {
2731 	struct hci_conn_hash *h = &hdev->conn_hash;
2732 	struct hci_conn *hcon;
2733 	struct hci_chan *hchan = NULL;
2734 
2735 	rcu_read_lock();
2736 
2737 	list_for_each_entry_rcu(hcon, &h->list, list) {
2738 		hchan = __hci_chan_lookup_handle(hcon, handle);
2739 		if (hchan)
2740 			break;
2741 	}
2742 
2743 	rcu_read_unlock();
2744 
2745 	return hchan;
2746 }
2747 
2748 u32 hci_conn_get_phy(struct hci_conn *conn)
2749 {
2750 	u32 phys = 0;
2751 
2752 	/* BLUETOOTH CORE SPECIFICATION Version 5.2 | Vol 2, Part B page 471:
2753 	 * Table 6.2: Packets defined for synchronous, asynchronous, and
2754 	 * CPB logical transport types.
2755 	 */
2756 	switch (conn->type) {
2757 	case SCO_LINK:
2758 		/* SCO logical transport (1 Mb/s):
2759 		 * HV1, HV2, HV3 and DV.
2760 		 */
2761 		phys |= BT_PHY_BR_1M_1SLOT;
2762 
2763 		break;
2764 
2765 	case ACL_LINK:
2766 		/* ACL logical transport (1 Mb/s) ptt=0:
2767 		 * DH1, DM3, DH3, DM5 and DH5.
2768 		 */
2769 		phys |= BT_PHY_BR_1M_1SLOT;
2770 
2771 		if (conn->pkt_type & (HCI_DM3 | HCI_DH3))
2772 			phys |= BT_PHY_BR_1M_3SLOT;
2773 
2774 		if (conn->pkt_type & (HCI_DM5 | HCI_DH5))
2775 			phys |= BT_PHY_BR_1M_5SLOT;
2776 
2777 		/* ACL logical transport (2 Mb/s) ptt=1:
2778 		 * 2-DH1, 2-DH3 and 2-DH5.
2779 		 */
2780 		if (!(conn->pkt_type & HCI_2DH1))
2781 			phys |= BT_PHY_EDR_2M_1SLOT;
2782 
2783 		if (!(conn->pkt_type & HCI_2DH3))
2784 			phys |= BT_PHY_EDR_2M_3SLOT;
2785 
2786 		if (!(conn->pkt_type & HCI_2DH5))
2787 			phys |= BT_PHY_EDR_2M_5SLOT;
2788 
2789 		/* ACL logical transport (3 Mb/s) ptt=1:
2790 		 * 3-DH1, 3-DH3 and 3-DH5.
2791 		 */
2792 		if (!(conn->pkt_type & HCI_3DH1))
2793 			phys |= BT_PHY_EDR_3M_1SLOT;
2794 
2795 		if (!(conn->pkt_type & HCI_3DH3))
2796 			phys |= BT_PHY_EDR_3M_3SLOT;
2797 
2798 		if (!(conn->pkt_type & HCI_3DH5))
2799 			phys |= BT_PHY_EDR_3M_5SLOT;
2800 
2801 		break;
2802 
2803 	case ESCO_LINK:
2804 		/* eSCO logical transport (1 Mb/s): EV3, EV4 and EV5 */
2805 		phys |= BT_PHY_BR_1M_1SLOT;
2806 
2807 		if (!(conn->pkt_type & (ESCO_EV4 | ESCO_EV5)))
2808 			phys |= BT_PHY_BR_1M_3SLOT;
2809 
2810 		/* eSCO logical transport (2 Mb/s): 2-EV3, 2-EV5 */
2811 		if (!(conn->pkt_type & ESCO_2EV3))
2812 			phys |= BT_PHY_EDR_2M_1SLOT;
2813 
2814 		if (!(conn->pkt_type & ESCO_2EV5))
2815 			phys |= BT_PHY_EDR_2M_3SLOT;
2816 
2817 		/* eSCO logical transport (3 Mb/s): 3-EV3, 3-EV5 */
2818 		if (!(conn->pkt_type & ESCO_3EV3))
2819 			phys |= BT_PHY_EDR_3M_1SLOT;
2820 
2821 		if (!(conn->pkt_type & ESCO_3EV5))
2822 			phys |= BT_PHY_EDR_3M_3SLOT;
2823 
2824 		break;
2825 
2826 	case LE_LINK:
2827 		if (conn->le_tx_phy & HCI_LE_SET_PHY_1M)
2828 			phys |= BT_PHY_LE_1M_TX;
2829 
2830 		if (conn->le_rx_phy & HCI_LE_SET_PHY_1M)
2831 			phys |= BT_PHY_LE_1M_RX;
2832 
2833 		if (conn->le_tx_phy & HCI_LE_SET_PHY_2M)
2834 			phys |= BT_PHY_LE_2M_TX;
2835 
2836 		if (conn->le_rx_phy & HCI_LE_SET_PHY_2M)
2837 			phys |= BT_PHY_LE_2M_RX;
2838 
2839 		if (conn->le_tx_phy & HCI_LE_SET_PHY_CODED)
2840 			phys |= BT_PHY_LE_CODED_TX;
2841 
2842 		if (conn->le_rx_phy & HCI_LE_SET_PHY_CODED)
2843 			phys |= BT_PHY_LE_CODED_RX;
2844 
2845 		break;
2846 	}
2847 
2848 	return phys;
2849 }
2850 
2851 int hci_abort_conn(struct hci_conn *conn, u8 reason)
2852 {
2853 	int r = 0;
2854 
2855 	if (test_and_set_bit(HCI_CONN_CANCEL, &conn->flags))
2856 		return 0;
2857 
2858 	switch (conn->state) {
2859 	case BT_CONNECTED:
2860 	case BT_CONFIG:
2861 		if (conn->type == AMP_LINK) {
2862 			struct hci_cp_disconn_phy_link cp;
2863 
2864 			cp.phy_handle = HCI_PHY_HANDLE(conn->handle);
2865 			cp.reason = reason;
2866 			r = hci_send_cmd(conn->hdev, HCI_OP_DISCONN_PHY_LINK,
2867 					 sizeof(cp), &cp);
2868 		} else {
2869 			struct hci_cp_disconnect dc;
2870 
2871 			dc.handle = cpu_to_le16(conn->handle);
2872 			dc.reason = reason;
2873 			r = hci_send_cmd(conn->hdev, HCI_OP_DISCONNECT,
2874 					 sizeof(dc), &dc);
2875 		}
2876 
2877 		conn->state = BT_DISCONN;
2878 
2879 		break;
2880 	case BT_CONNECT:
2881 		if (conn->type == LE_LINK) {
2882 			if (test_bit(HCI_CONN_SCANNING, &conn->flags))
2883 				break;
2884 			r = hci_send_cmd(conn->hdev,
2885 					 HCI_OP_LE_CREATE_CONN_CANCEL, 0, NULL);
2886 		} else if (conn->type == ACL_LINK) {
2887 			if (conn->hdev->hci_ver < BLUETOOTH_VER_1_2)
2888 				break;
2889 			r = hci_send_cmd(conn->hdev,
2890 					 HCI_OP_CREATE_CONN_CANCEL,
2891 					 6, &conn->dst);
2892 		}
2893 		break;
2894 	case BT_CONNECT2:
2895 		if (conn->type == ACL_LINK) {
2896 			struct hci_cp_reject_conn_req rej;
2897 
2898 			bacpy(&rej.bdaddr, &conn->dst);
2899 			rej.reason = reason;
2900 
2901 			r = hci_send_cmd(conn->hdev,
2902 					 HCI_OP_REJECT_CONN_REQ,
2903 					 sizeof(rej), &rej);
2904 		} else if (conn->type == SCO_LINK || conn->type == ESCO_LINK) {
2905 			struct hci_cp_reject_sync_conn_req rej;
2906 
2907 			bacpy(&rej.bdaddr, &conn->dst);
2908 
2909 			/* SCO rejection has its own limited set of
2910 			 * allowed error values (0x0D-0x0F) which isn't
2911 			 * compatible with most values passed to this
2912 			 * function. To be safe hard-code one of the
2913 			 * values that's suitable for SCO.
2914 			 */
2915 			rej.reason = HCI_ERROR_REJ_LIMITED_RESOURCES;
2916 
2917 			r = hci_send_cmd(conn->hdev,
2918 					 HCI_OP_REJECT_SYNC_CONN_REQ,
2919 					 sizeof(rej), &rej);
2920 		}
2921 		break;
2922 	default:
2923 		conn->state = BT_CLOSED;
2924 		break;
2925 	}
2926 
2927 	return r;
2928 }
2929