hci_conn.c 45.3 KB
Newer Older
1
/*
Linus Torvalds's avatar
Linus Torvalds committed
2
   BlueZ - Bluetooth protocol stack for Linux
3
   Copyright (c) 2000-2001, 2010, Code Aurora Forum. All rights reserved.
Linus Torvalds's avatar
Linus Torvalds committed
4 5 6 7 8 9 10 11 12 13 14

   Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License version 2 as
   published by the Free Software Foundation;

   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
   IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
15 16 17
   CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
Linus Torvalds's avatar
Linus Torvalds committed
18 19
   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

20 21
   ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
   COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
Linus Torvalds's avatar
Linus Torvalds committed
22 23 24 25 26
   SOFTWARE IS DISCLAIMED.
*/

/* Bluetooth HCI connection handling. */

27
#include <linux/export.h>
28
#include <linux/debugfs.h>
Linus Torvalds's avatar
Linus Torvalds committed
29 30 31

#include <net/bluetooth/bluetooth.h>
#include <net/bluetooth/hci_core.h>
32
#include <net/bluetooth/l2cap.h>
Linus Torvalds's avatar
Linus Torvalds committed
33

34
#include "hci_request.h"
35
#include "smp.h"
36 37
#include "a2mp.h"

38 39 40
struct sco_param {
	u16 pkt_type;
	u16 max_latency;
41
	u8  retrans_effort;
42 43
};

44
static const struct sco_param esco_param_cvsd[] = {
45 46 47 48 49
	{ EDR_ESCO_MASK & ~ESCO_2EV3, 0x000a,	0x01 }, /* S3 */
	{ EDR_ESCO_MASK & ~ESCO_2EV3, 0x0007,	0x01 }, /* S2 */
	{ EDR_ESCO_MASK | ESCO_EV3,   0x0007,	0x01 }, /* S1 */
	{ EDR_ESCO_MASK | ESCO_HV3,   0xffff,	0x01 }, /* D1 */
	{ EDR_ESCO_MASK | ESCO_HV1,   0xffff,	0x01 }, /* D0 */
50 51
};

52
static const struct sco_param sco_param_cvsd[] = {
53 54
	{ EDR_ESCO_MASK | ESCO_HV3,   0xffff,	0xff }, /* D1 */
	{ EDR_ESCO_MASK | ESCO_HV1,   0xffff,	0xff }, /* D0 */
55 56
};

57
static const struct sco_param esco_param_msbc[] = {
58 59
	{ EDR_ESCO_MASK & ~ESCO_2EV3, 0x000d,	0x02 }, /* T2 */
	{ EDR_ESCO_MASK | ESCO_EV3,   0x0008,	0x02 }, /* T1 */
60 61
};

62 63 64 65
/* This function requires the caller holds hdev->lock */
static void hci_connect_le_scan_cleanup(struct hci_conn *conn)
{
	struct hci_conn_params *params;
66
	struct hci_dev *hdev = conn->hdev;
67 68 69 70 71 72 73 74
	struct smp_irk *irk;
	bdaddr_t *bdaddr;
	u8 bdaddr_type;

	bdaddr = &conn->dst;
	bdaddr_type = conn->dst_type;

	/* Check if we need to convert to identity address */
75
	irk = hci_get_irk(hdev, bdaddr, bdaddr_type);
76 77 78 79 80
	if (irk) {
		bdaddr = &irk->bdaddr;
		bdaddr_type = irk->addr_type;
	}

81 82 83
	params = hci_pend_le_action_lookup(&hdev->pend_le_conns, bdaddr,
					   bdaddr_type);
	if (!params || !params->explicit_connect)
84 85 86 87 88 89 90
		return;

	/* The connection attempt was doing scan for new RPA, and is
	 * in scan phase. If params are not associated with any other
	 * autoconnect action, remove them completely. If they are, just unmark
	 * them as waiting for connection, by clearing explicit_connect field.
	 */
91 92 93 94 95 96
	params->explicit_connect = false;

	list_del_init(&params->action);

	switch (params->auto_connect) {
	case HCI_AUTO_CONN_EXPLICIT:
97
		hci_conn_params_del(hdev, bdaddr, bdaddr_type);
98 99 100 101
		/* return instead of break to avoid duplicate scan update */
		return;
	case HCI_AUTO_CONN_DIRECT:
	case HCI_AUTO_CONN_ALWAYS:
102
		list_add(&params->action, &hdev->pend_le_conns);
103 104
		break;
	case HCI_AUTO_CONN_REPORT:
105
		list_add(&params->action, &hdev->pend_le_reports);
106 107 108
		break;
	default:
		break;
109
	}
110

111
	hci_update_passive_scan(hdev);
112 113
}

114 115 116 117 118 119 120 121 122 123 124
static void hci_conn_cleanup(struct hci_conn *conn)
{
	struct hci_dev *hdev = conn->hdev;

	if (test_bit(HCI_CONN_PARAM_REMOVAL_PEND, &conn->flags))
		hci_conn_params_del(conn->hdev, &conn->dst, conn->dst_type);

	hci_chan_list_flush(conn);

	hci_conn_hash_del(hdev, conn);

125 126 127 128 129 130 131 132 133 134 135 136
	if (conn->type == SCO_LINK || conn->type == ESCO_LINK) {
		switch (conn->setting & SCO_AIRMODE_MASK) {
		case SCO_AIRMODE_CVSD:
		case SCO_AIRMODE_TRANSP:
			if (hdev->notify)
				hdev->notify(hdev, HCI_NOTIFY_DISABLE_SCO);
			break;
		}
	} else {
		if (hdev->notify)
			hdev->notify(hdev, HCI_NOTIFY_CONN_DEL);
	}
137 138 139 140 141 142 143 144 145 146

	hci_conn_del_sysfs(conn);

	debugfs_remove_recursive(conn->debugfs);

	hci_dev_put(hdev);

	hci_conn_put(conn);
}

147
static void le_scan_cleanup(struct work_struct *work)
148
{
149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174
	struct hci_conn *conn = container_of(work, struct hci_conn,
					     le_scan_cleanup);
	struct hci_dev *hdev = conn->hdev;
	struct hci_conn *c = NULL;

	BT_DBG("%s hcon %p", hdev->name, conn);

	hci_dev_lock(hdev);

	/* Check that the hci_conn is still around */
	rcu_read_lock();
	list_for_each_entry_rcu(c, &hdev->conn_hash.list, list) {
		if (c == conn)
			break;
	}
	rcu_read_unlock();

	if (c == conn) {
		hci_connect_le_scan_cleanup(conn);
		hci_conn_cleanup(conn);
	}

	hci_dev_unlock(hdev);
	hci_dev_put(hdev);
	hci_conn_put(conn);
}
175

176 177 178 179 180 181 182 183 184 185
static void hci_connect_le_scan_remove(struct hci_conn *conn)
{
	BT_DBG("%s hcon %p", conn->hdev->name, conn);

	/* We can't call hci_conn_del/hci_conn_cleanup here since that
	 * could deadlock with another hci_conn_del() call that's holding
	 * hci_dev_lock and doing cancel_delayed_work_sync(&conn->disc_work).
	 * Instead, grab temporary extra references to the hci_dev and
	 * hci_conn and perform the necessary cleanup in a separate work
	 * callback.
186
	 */
187 188 189 190

	hci_dev_hold(conn->hdev);
	hci_conn_get(conn);

191 192 193 194
	/* Even though we hold a reference to the hdev, many other
	 * things might get cleaned up meanwhile, including the hdev's
	 * own workqueue, so we can't use that for scheduling.
	 */
195
	schedule_work(&conn->le_scan_cleanup);
196 197
}

198
static void hci_acl_create_connection(struct hci_conn *conn)
Linus Torvalds's avatar
Linus Torvalds committed
199 200 201 202 203
{
	struct hci_dev *hdev = conn->hdev;
	struct inquiry_entry *ie;
	struct hci_cp_create_conn cp;

204
	BT_DBG("hcon %p", conn);
Linus Torvalds's avatar
Linus Torvalds committed
205

206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222
	/* Many controllers disallow HCI Create Connection while it is doing
	 * HCI Inquiry. So we cancel the Inquiry first before issuing HCI Create
	 * Connection. This may cause the MGMT discovering state to become false
	 * without user space's request but it is okay since the MGMT Discovery
	 * APIs do not promise that discovery should be done forever. Instead,
	 * the user space monitors the status of MGMT discovering and it may
	 * request for discovery again when this flag becomes false.
	 */
	if (test_bit(HCI_INQUIRY, &hdev->flags)) {
		/* Put this connection to "pending" state so that it will be
		 * executed after the inquiry cancel command complete event.
		 */
		conn->state = BT_CONNECT2;
		hci_send_cmd(hdev, HCI_OP_INQUIRY_CANCEL, 0, NULL);
		return;
	}

Linus Torvalds's avatar
Linus Torvalds committed
223
	conn->state = BT_CONNECT;
224
	conn->out = true;
225
	conn->role = HCI_ROLE_MASTER;
Linus Torvalds's avatar
Linus Torvalds committed
226

227 228
	conn->attempt++;

229 230
	conn->link_policy = hdev->link_policy;

Linus Torvalds's avatar
Linus Torvalds committed
231 232 233 234
	memset(&cp, 0, sizeof(cp));
	bacpy(&cp.bdaddr, &conn->dst);
	cp.pscan_rep_mode = 0x02;

235 236
	ie = hci_inquiry_cache_lookup(hdev, &conn->dst);
	if (ie) {
237 238 239 240
		if (inquiry_entry_age(ie) <= INQUIRY_ENTRY_AGE_MAX) {
			cp.pscan_rep_mode = ie->data.pscan_rep_mode;
			cp.pscan_mode     = ie->data.pscan_mode;
			cp.clock_offset   = ie->data.clock_offset |
241
					    cpu_to_le16(0x8000);
242 243
		}

Linus Torvalds's avatar
Linus Torvalds committed
244 245 246
		memcpy(conn->dev_class, ie->data.dev_class, 3);
	}

247
	cp.pkt_type = cpu_to_le16(conn->pkt_type);
Linus Torvalds's avatar
Linus Torvalds committed
248
	if (lmp_rswitch_capable(hdev) && !(hdev->link_mode & HCI_LM_MASTER))
249
		cp.role_switch = 0x01;
Linus Torvalds's avatar
Linus Torvalds committed
250
	else
251
		cp.role_switch = 0x00;
252

253
	hci_send_cmd(hdev, HCI_OP_CREATE_CONN, sizeof(cp), &cp);
Linus Torvalds's avatar
Linus Torvalds committed
254 255
}

256
int hci_disconnect(struct hci_conn *conn, __u8 reason)
Linus Torvalds's avatar
Linus Torvalds committed
257
{
258
	BT_DBG("hcon %p", conn);
Linus Torvalds's avatar
Linus Torvalds committed
259

260
	/* When we are central of an established connection and it enters
261 262 263 264
	 * the disconnect timeout, then go ahead and try to read the
	 * current clock offset.  Processing of the result is done
	 * within the event handling and hci_clock_offset_evt function.
	 */
265 266
	if (conn->type == ACL_LINK && conn->role == HCI_ROLE_MASTER &&
	    (conn->state == BT_CONNECTED || conn->state == BT_CONFIG)) {
267
		struct hci_dev *hdev = conn->hdev;
268
		struct hci_cp_read_clock_offset clkoff_cp;
269

270 271 272
		clkoff_cp.handle = cpu_to_le16(conn->handle);
		hci_send_cmd(hdev, HCI_OP_READ_CLOCK_OFFSET, sizeof(clkoff_cp),
			     &clkoff_cp);
273 274
	}

275
	return hci_abort_conn(conn, reason);
Linus Torvalds's avatar
Linus Torvalds committed
276 277
}

278
static void hci_add_sco(struct hci_conn *conn, __u16 handle)
Linus Torvalds's avatar
Linus Torvalds committed
279 280 281 282
{
	struct hci_dev *hdev = conn->hdev;
	struct hci_cp_add_sco cp;

283
	BT_DBG("hcon %p", conn);
Linus Torvalds's avatar
Linus Torvalds committed
284 285

	conn->state = BT_CONNECT;
286
	conn->out = true;
Linus Torvalds's avatar
Linus Torvalds committed
287

288 289
	conn->attempt++;

290
	cp.handle   = cpu_to_le16(handle);
291
	cp.pkt_type = cpu_to_le16(conn->pkt_type);
Linus Torvalds's avatar
Linus Torvalds committed
292

293
	hci_send_cmd(hdev, HCI_OP_ADD_SCO, sizeof(cp), &cp);
Linus Torvalds's avatar
Linus Torvalds committed
294 295
}

296 297 298 299 300 301 302 303 304 305 306 307 308 309
static bool find_next_esco_param(struct hci_conn *conn,
				 const struct sco_param *esco_param, int size)
{
	for (; conn->attempt <= size; conn->attempt++) {
		if (lmp_esco_2m_capable(conn->link) ||
		    (esco_param[conn->attempt - 1].pkt_type & ESCO_2EV3))
			break;
		BT_DBG("hcon %p skipped attempt %d, eSCO 2M not supported",
		       conn, conn->attempt);
	}

	return conn->attempt <= size;
}

310 311 312 313 314 315 316 317
static bool hci_enhanced_setup_sync_conn(struct hci_conn *conn, __u16 handle)
{
	struct hci_dev *hdev = conn->hdev;
	struct hci_cp_enhanced_setup_sync_conn cp;
	const struct sco_param *param;

	bt_dev_dbg(hdev, "hcon %p", conn);

318 319 320 321
	/* for offload use case, codec needs to configured before opening SCO */
	if (conn->codec.data_path)
		hci_req_configure_datapath(hdev, &conn->codec);

322 323 324 325 326 327 328 329 330 331 332 333 334
	conn->state = BT_CONNECT;
	conn->out = true;

	conn->attempt++;

	memset(&cp, 0x00, sizeof(cp));

	cp.handle   = cpu_to_le16(handle);

	cp.tx_bandwidth   = cpu_to_le32(0x00001f40);
	cp.rx_bandwidth   = cpu_to_le32(0x00001f40);

	switch (conn->codec.id) {
335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360
	case BT_CODEC_MSBC:
		if (!find_next_esco_param(conn, esco_param_msbc,
					  ARRAY_SIZE(esco_param_msbc)))
			return false;

		param = &esco_param_msbc[conn->attempt - 1];
		cp.tx_coding_format.id = 0x05;
		cp.rx_coding_format.id = 0x05;
		cp.tx_codec_frame_size = __cpu_to_le16(60);
		cp.rx_codec_frame_size = __cpu_to_le16(60);
		cp.in_bandwidth = __cpu_to_le32(32000);
		cp.out_bandwidth = __cpu_to_le32(32000);
		cp.in_coding_format.id = 0x04;
		cp.out_coding_format.id = 0x04;
		cp.in_coded_data_size = __cpu_to_le16(16);
		cp.out_coded_data_size = __cpu_to_le16(16);
		cp.in_pcm_data_format = 2;
		cp.out_pcm_data_format = 2;
		cp.in_pcm_sample_payload_msb_pos = 0;
		cp.out_pcm_sample_payload_msb_pos = 0;
		cp.in_data_path = conn->codec.data_path;
		cp.out_data_path = conn->codec.data_path;
		cp.in_transport_unit_size = 1;
		cp.out_transport_unit_size = 1;
		break;

361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430
	case BT_CODEC_TRANSPARENT:
		if (!find_next_esco_param(conn, esco_param_msbc,
					  ARRAY_SIZE(esco_param_msbc)))
			return false;
		param = &esco_param_msbc[conn->attempt - 1];
		cp.tx_coding_format.id = 0x03;
		cp.rx_coding_format.id = 0x03;
		cp.tx_codec_frame_size = __cpu_to_le16(60);
		cp.rx_codec_frame_size = __cpu_to_le16(60);
		cp.in_bandwidth = __cpu_to_le32(0x1f40);
		cp.out_bandwidth = __cpu_to_le32(0x1f40);
		cp.in_coding_format.id = 0x03;
		cp.out_coding_format.id = 0x03;
		cp.in_coded_data_size = __cpu_to_le16(16);
		cp.out_coded_data_size = __cpu_to_le16(16);
		cp.in_pcm_data_format = 2;
		cp.out_pcm_data_format = 2;
		cp.in_pcm_sample_payload_msb_pos = 0;
		cp.out_pcm_sample_payload_msb_pos = 0;
		cp.in_data_path = conn->codec.data_path;
		cp.out_data_path = conn->codec.data_path;
		cp.in_transport_unit_size = 1;
		cp.out_transport_unit_size = 1;
		break;

	case BT_CODEC_CVSD:
		if (lmp_esco_capable(conn->link)) {
			if (!find_next_esco_param(conn, esco_param_cvsd,
						  ARRAY_SIZE(esco_param_cvsd)))
				return false;
			param = &esco_param_cvsd[conn->attempt - 1];
		} else {
			if (conn->attempt > ARRAY_SIZE(sco_param_cvsd))
				return false;
			param = &sco_param_cvsd[conn->attempt - 1];
		}
		cp.tx_coding_format.id = 2;
		cp.rx_coding_format.id = 2;
		cp.tx_codec_frame_size = __cpu_to_le16(60);
		cp.rx_codec_frame_size = __cpu_to_le16(60);
		cp.in_bandwidth = __cpu_to_le32(16000);
		cp.out_bandwidth = __cpu_to_le32(16000);
		cp.in_coding_format.id = 4;
		cp.out_coding_format.id = 4;
		cp.in_coded_data_size = __cpu_to_le16(16);
		cp.out_coded_data_size = __cpu_to_le16(16);
		cp.in_pcm_data_format = 2;
		cp.out_pcm_data_format = 2;
		cp.in_pcm_sample_payload_msb_pos = 0;
		cp.out_pcm_sample_payload_msb_pos = 0;
		cp.in_data_path = conn->codec.data_path;
		cp.out_data_path = conn->codec.data_path;
		cp.in_transport_unit_size = 16;
		cp.out_transport_unit_size = 16;
		break;
	default:
		return false;
	}

	cp.retrans_effort = param->retrans_effort;
	cp.pkt_type = __cpu_to_le16(param->pkt_type);
	cp.max_latency = __cpu_to_le16(param->max_latency);

	if (hci_send_cmd(hdev, HCI_OP_ENHANCED_SETUP_SYNC_CONN, sizeof(cp), &cp) < 0)
		return false;

	return true;
}

static bool hci_setup_sync_conn(struct hci_conn *conn, __u16 handle)
431 432 433
{
	struct hci_dev *hdev = conn->hdev;
	struct hci_cp_setup_sync_conn cp;
434
	const struct sco_param *param;
435

436
	bt_dev_dbg(hdev, "hcon %p", conn);
437 438

	conn->state = BT_CONNECT;
439
	conn->out = true;
440

441 442
	conn->attempt++;

443 444
	cp.handle   = cpu_to_le16(handle);

445 446
	cp.tx_bandwidth   = cpu_to_le32(0x00001f40);
	cp.rx_bandwidth   = cpu_to_le32(0x00001f40);
447 448 449 450
	cp.voice_setting  = cpu_to_le16(conn->setting);

	switch (conn->setting & SCO_AIRMODE_MASK) {
	case SCO_AIRMODE_TRANSP:
451 452
		if (!find_next_esco_param(conn, esco_param_msbc,
					  ARRAY_SIZE(esco_param_msbc)))
453
			return false;
454
		param = &esco_param_msbc[conn->attempt - 1];
455 456
		break;
	case SCO_AIRMODE_CVSD:
457
		if (lmp_esco_capable(conn->link)) {
458 459
			if (!find_next_esco_param(conn, esco_param_cvsd,
						  ARRAY_SIZE(esco_param_cvsd)))
460 461 462 463 464 465 466
				return false;
			param = &esco_param_cvsd[conn->attempt - 1];
		} else {
			if (conn->attempt > ARRAY_SIZE(sco_param_cvsd))
				return false;
			param = &sco_param_cvsd[conn->attempt - 1];
		}
467
		break;
468 469
	default:
		return false;
470
	}
471

472
	cp.retrans_effort = param->retrans_effort;
473 474 475 476 477 478 479
	cp.pkt_type = __cpu_to_le16(param->pkt_type);
	cp.max_latency = __cpu_to_le16(param->max_latency);

	if (hci_send_cmd(hdev, HCI_OP_SETUP_SYNC_CONN, sizeof(cp), &cp) < 0)
		return false;

	return true;
480 481
}

482 483 484 485 486 487 488 489
bool hci_setup_sync(struct hci_conn *conn, __u16 handle)
{
	if (enhanced_sco_capable(conn->hdev))
		return hci_enhanced_setup_sync_conn(conn, handle);

	return hci_setup_sync_conn(conn, handle);
}

490 491
u8 hci_le_conn_update(struct hci_conn *conn, u16 min, u16 max, u16 latency,
		      u16 to_multiplier)
492 493
{
	struct hci_dev *hdev = conn->hdev;
494 495
	struct hci_conn_params *params;
	struct hci_cp_le_conn_update cp;
496

497
	hci_dev_lock(hdev);
498

499 500 501 502 503 504 505 506 507 508 509
	params = hci_conn_params_lookup(hdev, &conn->dst, conn->dst_type);
	if (params) {
		params->conn_min_interval = min;
		params->conn_max_interval = max;
		params->conn_latency = latency;
		params->supervision_timeout = to_multiplier;
	}

	hci_dev_unlock(hdev);

	memset(&cp, 0, sizeof(cp));
510 511 512 513 514
	cp.handle		= cpu_to_le16(conn->handle);
	cp.conn_interval_min	= cpu_to_le16(min);
	cp.conn_interval_max	= cpu_to_le16(max);
	cp.conn_latency		= cpu_to_le16(latency);
	cp.supervision_timeout	= cpu_to_le16(to_multiplier);
515 516
	cp.min_ce_len		= cpu_to_le16(0x0000);
	cp.max_ce_len		= cpu_to_le16(0x0000);
517 518

	hci_send_cmd(hdev, HCI_OP_LE_CONN_UPDATE, sizeof(cp), &cp);
519 520 521 522 523

	if (params)
		return 0x01;

	return 0x00;
524 525
}

526
void hci_le_start_enc(struct hci_conn *conn, __le16 ediv, __le64 rand,
527
		      __u8 ltk[16], __u8 key_size)
528 529 530 531
{
	struct hci_dev *hdev = conn->hdev;
	struct hci_cp_le_start_enc cp;

532
	BT_DBG("hcon %p", conn);
533 534 535 536

	memset(&cp, 0, sizeof(cp));

	cp.handle = cpu_to_le16(conn->handle);
537
	cp.rand = rand;
538
	cp.ediv = ediv;
539
	memcpy(cp.ltk, ltk, key_size);
540 541 542 543

	hci_send_cmd(hdev, HCI_OP_LE_START_ENC, sizeof(cp), &cp);
}

544 545 546 547 548 549 550 551
/* Device _must_ be locked */
void hci_sco_setup(struct hci_conn *conn, __u8 status)
{
	struct hci_conn *sco = conn->link;

	if (!sco)
		return;

552 553
	BT_DBG("hcon %p", conn);

554 555 556 557 558 559
	if (!status) {
		if (lmp_esco_capable(conn->hdev))
			hci_setup_sync(sco, conn->handle);
		else
			hci_add_sco(sco, conn->handle);
	} else {
560
		hci_connect_cfm(sco, status);
561 562 563 564
		hci_conn_del(sco);
	}
}

565
static void hci_conn_timeout(struct work_struct *work)
Linus Torvalds's avatar
Linus Torvalds committed
566
{
567
	struct hci_conn *conn = container_of(work, struct hci_conn,
568
					     disc_work.work);
569
	int refcnt = atomic_read(&conn->refcnt);
Linus Torvalds's avatar
Linus Torvalds committed
570

571
	BT_DBG("hcon %p state %s", conn, state_to_string(conn->state));
Linus Torvalds's avatar
Linus Torvalds committed
572

573 574 575 576 577 578 579 580 581 582
	WARN_ON(refcnt < 0);

	/* FIXME: It was observed that in pairing failed scenario, refcnt
	 * drops below 0. Probably this is because l2cap_conn_del calls
	 * l2cap_chan_del for each channel, and inside l2cap_chan_del conn is
	 * dropped. After that loop hci_chan_del is called which also drops
	 * conn. For now make sure that ACL is alive if refcnt is higher then 0,
	 * otherwise drop it.
	 */
	if (refcnt > 0)
Linus Torvalds's avatar
Linus Torvalds committed
583 584
		return;

585 586 587 588 589
	/* LE connections in scanning state need special handling */
	if (conn->state == BT_CONNECT && conn->type == LE_LINK &&
	    test_bit(HCI_CONN_SCANNING, &conn->flags)) {
		hci_connect_le_scan_remove(conn);
		return;
590
	}
591 592

	hci_abort_conn(conn, hci_proto_disconn_ind(conn));
Linus Torvalds's avatar
Linus Torvalds committed
593 594
}

595
/* Enter sniff mode */
596
static void hci_conn_idle(struct work_struct *work)
597
{
598 599
	struct hci_conn *conn = container_of(work, struct hci_conn,
					     idle_work.work);
600 601
	struct hci_dev *hdev = conn->hdev;

602
	BT_DBG("hcon %p mode %d", conn, conn->mode);
603 604 605 606 607 608 609 610 611 612

	if (!lmp_sniff_capable(hdev) || !lmp_sniff_capable(conn))
		return;

	if (conn->mode != HCI_CM_ACTIVE || !(conn->link_policy & HCI_LP_SNIFF))
		return;

	if (lmp_sniffsubr_capable(hdev) && lmp_sniffsubr_capable(conn)) {
		struct hci_cp_sniff_subrate cp;
		cp.handle             = cpu_to_le16(conn->handle);
613 614 615
		cp.max_latency        = cpu_to_le16(0);
		cp.min_remote_timeout = cpu_to_le16(0);
		cp.min_local_timeout  = cpu_to_le16(0);
616 617 618
		hci_send_cmd(hdev, HCI_OP_SNIFF_SUBRATE, sizeof(cp), &cp);
	}

619
	if (!test_and_set_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags)) {
620 621 622 623
		struct hci_cp_sniff_mode cp;
		cp.handle       = cpu_to_le16(conn->handle);
		cp.max_interval = cpu_to_le16(hdev->sniff_max_interval);
		cp.min_interval = cpu_to_le16(hdev->sniff_min_interval);
624 625
		cp.attempt      = cpu_to_le16(4);
		cp.timeout      = cpu_to_le16(1);
626 627 628 629
		hci_send_cmd(hdev, HCI_OP_SNIFF_MODE, sizeof(cp), &cp);
	}
}

630
static void hci_conn_auto_accept(struct work_struct *work)
631
{
632 633
	struct hci_conn *conn = container_of(work, struct hci_conn,
					     auto_accept_work.work);
634

635
	hci_send_cmd(conn->hdev, HCI_OP_USER_CONFIRM_REPLY, sizeof(conn->dst),
636
		     &conn->dst);
637 638
}

639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655
static void le_disable_advertising(struct hci_dev *hdev)
{
	if (ext_adv_capable(hdev)) {
		struct hci_cp_le_set_ext_adv_enable cp;

		cp.enable = 0x00;
		cp.num_of_sets = 0x00;

		hci_send_cmd(hdev, HCI_OP_LE_SET_EXT_ADV_ENABLE, sizeof(cp),
			     &cp);
	} else {
		u8 enable = 0x00;
		hci_send_cmd(hdev, HCI_OP_LE_SET_ADV_ENABLE, sizeof(enable),
			     &enable);
	}
}

656 657 658 659
static void le_conn_timeout(struct work_struct *work)
{
	struct hci_conn *conn = container_of(work, struct hci_conn,
					     le_conn_timeout.work);
660
	struct hci_dev *hdev = conn->hdev;
661 662 663

	BT_DBG("");

664 665 666 667 668
	/* We could end up here due to having done directed advertising,
	 * so clean up the state if necessary. This should however only
	 * happen with broken hardware or if low duty cycle was used
	 * (which doesn't have a timeout of its own).
	 */
669
	if (conn->role == HCI_ROLE_SLAVE) {
670 671
		/* Disable LE Advertising */
		le_disable_advertising(hdev);
672
		hci_dev_lock(hdev);
673
		hci_le_conn_failed(conn, HCI_ERROR_ADVERTISING_TIMEOUT);
674
		hci_dev_unlock(hdev);
675 676 677
		return;
	}

678
	hci_abort_conn(conn, HCI_ERROR_REMOTE_USER_TERM);
679 680
}

681 682
struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst,
			      u8 role)
Linus Torvalds's avatar
Linus Torvalds committed
683 684 685
{
	struct hci_conn *conn;

686
	BT_DBG("%s dst %pMR", hdev->name, dst);
Linus Torvalds's avatar
Linus Torvalds committed
687

688
	conn = kzalloc(sizeof(*conn), GFP_KERNEL);
689
	if (!conn)
Linus Torvalds's avatar
Linus Torvalds committed
690 691 692
		return NULL;

	bacpy(&conn->dst, dst);
693
	bacpy(&conn->src, &hdev->bdaddr);
694
	conn->handle = HCI_CONN_HANDLE_UNSET;
695 696
	conn->hdev  = hdev;
	conn->type  = type;
697
	conn->role  = role;
698 699
	conn->mode  = HCI_CM_ACTIVE;
	conn->state = BT_OPEN;
700
	conn->auth_type = HCI_AT_GENERAL_BONDING;
701
	conn->io_capability = hdev->io_capability;
702
	conn->remote_auth = 0xff;
703
	conn->key_type = 0xff;
704
	conn->rssi = HCI_RSSI_INVALID;
705
	conn->tx_power = HCI_TX_POWER_INVALID;
706
	conn->max_tx_power = HCI_TX_POWER_INVALID;
Linus Torvalds's avatar
Linus Torvalds committed
707

708
	set_bit(HCI_CONN_POWER_SAVE, &conn->flags);
709
	conn->disc_timeout = HCI_DISCONN_TIMEOUT;
710

711 712 713
	/* Set Default Authenticated payload timeout to 30s */
	conn->auth_payload_timeout = DEFAULT_AUTH_PAYLOAD_TIMEOUT;

714 715 716
	if (conn->role == HCI_ROLE_MASTER)
		conn->out = true;

717 718 719 720
	switch (type) {
	case ACL_LINK:
		conn->pkt_type = hdev->pkt_type & ACL_PTYPE_MASK;
		break;
721 722 723 724
	case LE_LINK:
		/* conn->src should reflect the local identity address */
		hci_copy_identity_address(hdev, &conn->src, &conn->src_type);
		break;
725 726
	case SCO_LINK:
		if (lmp_esco_capable(hdev))
727 728
			conn->pkt_type = (hdev->esco_type & SCO_ESCO_MASK) |
					(hdev->esco_type & EDR_ESCO_MASK);
729 730 731 732
		else
			conn->pkt_type = hdev->pkt_type & SCO_PTYPE_MASK;
		break;
	case ESCO_LINK:
733
		conn->pkt_type = hdev->esco_type & ~EDR_ESCO_MASK;
734 735 736
		break;
	}

Linus Torvalds's avatar
Linus Torvalds committed
737
	skb_queue_head_init(&conn->data_q);
738

739
	INIT_LIST_HEAD(&conn->chan_list);
740

741
	INIT_DELAYED_WORK(&conn->disc_work, hci_conn_timeout);
742
	INIT_DELAYED_WORK(&conn->auto_accept_work, hci_conn_auto_accept);
743
	INIT_DELAYED_WORK(&conn->idle_work, hci_conn_idle);
744
	INIT_DELAYED_WORK(&conn->le_conn_timeout, le_conn_timeout);
745
	INIT_WORK(&conn->le_scan_cleanup, le_scan_cleanup);
Linus Torvalds's avatar
Linus Torvalds committed
746 747 748 749 750 751

	atomic_set(&conn->refcnt, 0);

	hci_dev_hold(hdev);

	hci_conn_hash_add(hdev, conn);
752 753 754 755 756 757 758 759 760

	/* The SCO and eSCO connections will only be notified when their
	 * setup has been completed. This is different to ACL links which
	 * can be notified right away.
	 */
	if (conn->type != SCO_LINK && conn->type != ESCO_LINK) {
		if (hdev->notify)
			hdev->notify(hdev, HCI_NOTIFY_CONN_ADD);
	}
Linus Torvalds's avatar
Linus Torvalds committed
761

762 763
	hci_conn_init_sysfs(conn);

Linus Torvalds's avatar
Linus Torvalds committed
764 765 766 767 768 769 770
	return conn;
}

int hci_conn_del(struct hci_conn *conn)
{
	struct hci_dev *hdev = conn->hdev;

771
	BT_DBG("%s hcon %p handle %d", hdev->name, conn, conn->handle);
Linus Torvalds's avatar
Linus Torvalds committed
772

773
	cancel_delayed_work_sync(&conn->disc_work);
774
	cancel_delayed_work_sync(&conn->auto_accept_work);
775
	cancel_delayed_work_sync(&conn->idle_work);
776

777
	if (conn->type == ACL_LINK) {
Linus Torvalds's avatar
Linus Torvalds committed
778 779 780 781 782 783
		struct hci_conn *sco = conn->link;
		if (sco)
			sco->link = NULL;

		/* Unacked frames */
		hdev->acl_cnt += conn->sent;
784
	} else if (conn->type == LE_LINK) {
785
		cancel_delayed_work(&conn->le_conn_timeout);
786

787 788 789 790
		if (hdev->le_pkts)
			hdev->le_cnt += conn->sent;
		else
			hdev->acl_cnt += conn->sent;
791 792 793 794
	} else {
		struct hci_conn *acl = conn->link;
		if (acl) {
			acl->link = NULL;
795
			hci_conn_drop(acl);
796
		}
Linus Torvalds's avatar
Linus Torvalds committed
797 798
	}

799 800 801
	if (conn->amp_mgr)
		amp_mgr_put(conn->amp_mgr);

Linus Torvalds's avatar
Linus Torvalds committed
802 803
	skb_queue_purge(&conn->data_q);

804 805 806 807 808 809
	/* Remove the connection from the list and cleanup its remaining
	 * state. This is a separate function since for some cases like
	 * BT_CONNECT_SCAN we *only* want the cleanup part without the
	 * rest of hci_conn_del.
	 */
	hci_conn_cleanup(conn);
810

Linus Torvalds's avatar
Linus Torvalds committed
811 812 813
	return 0;
}

814
struct hci_dev *hci_get_route(bdaddr_t *dst, bdaddr_t *src, uint8_t src_type)
Linus Torvalds's avatar
Linus Torvalds committed
815 816
{
	int use_src = bacmp(src, BDADDR_ANY);
817
	struct hci_dev *hdev = NULL, *d;
Linus Torvalds's avatar
Linus Torvalds committed
818

819
	BT_DBG("%pMR -> %pMR", src, dst);
Linus Torvalds's avatar
Linus Torvalds committed
820

821
	read_lock(&hci_dev_list_lock);
Linus Torvalds's avatar
Linus Torvalds committed
822

823
	list_for_each_entry(d, &hci_dev_list, list) {
824
		if (!test_bit(HCI_UP, &d->flags) ||
825
		    hci_dev_test_flag(d, HCI_USER_CHANNEL) ||
826
		    d->dev_type != HCI_PRIMARY)
Linus Torvalds's avatar
Linus Torvalds committed
827 828
			continue;

829
		/* Simple routing:
Linus Torvalds's avatar
Linus Torvalds committed
830 831 832 833 834
		 *   No source address - find interface with bdaddr != dst
		 *   Source address    - find interface with bdaddr == src
		 */

		if (use_src) {
835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857
			bdaddr_t id_addr;
			u8 id_addr_type;

			if (src_type == BDADDR_BREDR) {
				if (!lmp_bredr_capable(d))
					continue;
				bacpy(&id_addr, &d->bdaddr);
				id_addr_type = BDADDR_BREDR;
			} else {
				if (!lmp_le_capable(d))
					continue;

				hci_copy_identity_address(d, &id_addr,
							  &id_addr_type);

				/* Convert from HCI to three-value type */
				if (id_addr_type == ADDR_LE_DEV_PUBLIC)
					id_addr_type = BDADDR_LE_PUBLIC;
				else
					id_addr_type = BDADDR_LE_RANDOM;
			}

			if (!bacmp(&id_addr, src) && id_addr_type == src_type) {
Linus Torvalds's avatar
Linus Torvalds committed
858 859 860 861 862 863 864 865 866 867 868 869
				hdev = d; break;
			}
		} else {
			if (bacmp(&d->bdaddr, dst)) {
				hdev = d; break;
			}
		}
	}

	if (hdev)
		hdev = hci_dev_hold(hdev);

870
	read_unlock(&hci_dev_list_lock);
Linus Torvalds's avatar
Linus Torvalds committed
871 872 873 874
	return hdev;
}
EXPORT_SYMBOL(hci_get_route);

875
/* This function requires the caller holds hdev->lock */
876
void hci_le_conn_failed(struct hci_conn *conn, u8 status)
877 878
{
	struct hci_dev *hdev = conn->hdev;
879 880 881 882 883 884
	struct hci_conn_params *params;

	params = hci_pend_le_action_lookup(&hdev->pend_le_conns, &conn->dst,
					   conn->dst_type);
	if (params && params->conn) {
		hci_conn_drop(params->conn);
885
		hci_conn_put(params->conn);
886 887
		params->conn = NULL;
	}
888 889 890

	conn->state = BT_CLOSED;

891
	/* If the status indicates successful cancellation of
892
	 * the attempt (i.e. Unknown Connection Id) there's no point of
893 894 895 896 897 898 899 900
	 * notifying failure since we'll go back to keep trying to
	 * connect. The only exception is explicit connect requests
	 * where a timeout + cancel does indicate an actual failure.
	 */
	if (status != HCI_ERROR_UNKNOWN_CONN_ID ||
	    (params && params->explicit_connect))
		mgmt_connect_failed(hdev, &conn->dst, conn->type,
				    conn->dst_type, status);
901

902
	hci_connect_cfm(conn, status);
903 904

	hci_conn_del(conn);
905 906 907 908

	/* Since we may have temporarily stopped the background scanning in
	 * favor of connection establishment, we should restart it.
	 */
909
	hci_update_passive_scan(hdev);
910

911
	/* Enable advertising in case this was a failed connection
912 913
	 * attempt as a peripheral.
	 */
914
	hci_enable_advertising(hdev);
915 916
}

917
static void create_le_conn_complete(struct hci_dev *hdev, void *data, int err)
918
{
919
	struct hci_conn *conn = data;
920

921 922
	hci_dev_lock(hdev);

923
	if (!err) {
924 925 926
		hci_connect_le_scan_cleanup(conn);
		goto done;
	}
927

928
	bt_dev_err(hdev, "request failed to create LE connection: err %d", err);
929 930 931 932

	if (!conn)
		goto done;

933
	hci_le_conn_failed(conn, err);
934 935 936 937 938

done:
	hci_dev_unlock(hdev);
}

939
static int hci_connect_le_sync(struct hci_dev *hdev, void *data)
940
{
941
	struct hci_conn *conn = data;
942

943
	bt_dev_dbg(hdev, "conn %p", conn);
944

945
	return hci_le_create_conn_sync(hdev, conn);
946 947
}

948
struct hci_conn *hci_connect_le(struct hci_dev *hdev, bdaddr_t *dst,
949
				u8 dst_type, bool dst_resolved, u8 sec_level,
950
				u16 conn_timeout, u8 role)
Linus Torvalds's avatar
Linus Torvalds committed
951
{
952
	struct hci_conn *conn;
953
	struct smp_irk *irk;
954
	int err;
Linus Torvalds's avatar
Linus Torvalds committed
955

956
	/* Let's make sure that le is enabled.*/
957
	if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED)) {
958 959 960 961 962 963
		if (lmp_le_capable(hdev))
			return ERR_PTR(-ECONNREFUSED);

		return ERR_PTR(-EOPNOTSUPP);
	}

964 965 966 967 968 969
	/* Since the controller supports only one LE connection attempt at a
	 * time, we return -EBUSY if there is any connection attempt running.
	 */
	if (hci_lookup_le_connect(hdev))
		return ERR_PTR(-EBUSY);

970 971 972 973
	/* If there's already a connection object but it's not in
	 * scanning state it means it must already be established, in
	 * which case we can't do anything else except report a failure
	 * to connect.
974
	 */
975
	conn = hci_conn_hash_lookup_le(hdev, dst, dst_type);
976 977
	if (conn && !test_bit(HCI_CONN_SCANNING, &conn->flags)) {
		return ERR_PTR(-EBUSY);
978
	}
979

980 981
	/* Check if the destination address has been resolved by the controller
	 * since if it did then the identity address shall be used.
982
	 */
983 984 985 986 987 988 989 990 991 992 993 994 995 996 997
	if (!dst_resolved) {
		/* When given an identity address with existing identity
		 * resolving key, the connection needs to be established
		 * to a resolvable random address.
		 *
		 * Storing the resolvable random address is required here
		 * to handle connection failures. The address will later
		 * be resolved back into the original identity address
		 * from the connect request.
		 */
		irk = hci_find_irk_by_addr(hdev, dst, dst_type);
		if (irk && bacmp(&irk->rpa, BDADDR_ANY)) {
			dst = &irk->rpa;
			dst_type = ADDR_LE_DEV_RANDOM;
		}
998 999
	}

1000
	if (conn) {
1001 1002 1003
		bacpy(&conn->dst, dst);
	} else {
		conn = hci_conn_add(hdev, LE_LINK, dst, role);
1004 1005 1006 1007
		if (!conn)
			return ERR_PTR(-ENOMEM);
		hci_conn_hold(conn);
		conn->pending_sec_level = sec_level;
1008 1009
	}

1010
	conn->dst_type = dst_type;
1011
	conn->sec_level = BT_SECURITY_LOW;
1012
	conn->conn_timeout = conn_timeout;
1013

1014 1015
	conn->state = BT_CONNECT;
	clear_bit(HCI_CONN_SCANNING, &conn->flags);
1016

1017 1018
	err = hci_cmd_sync_queue(hdev, hci_connect_le_sync, conn,
				 create_le_conn_complete);
1019 1020
	if (err) {
		hci_conn_del(conn);
1021
		return ERR_PTR(err);
1022
	}
1023

1024
	return conn;
1025
}
1026

1027 1028 1029 1030
static bool is_connected(struct hci_dev *hdev, bdaddr_t *addr, u8 type)
{
	struct hci_conn *conn;

1031
	conn = hci_conn_hash_lookup_le(hdev, addr, type);
1032 1033 1034 1035 1036 1037 1038 1039 1040 1041
	if (!conn)
		return false;

	if (conn->state != BT_CONNECTED)
		return false;

	return true;
}

/* This function requires the caller holds hdev->lock */
1042
static int hci_explicit_conn_params_set(struct hci_dev *hdev,
1043 1044 1045 1046 1047 1048 1049
					bdaddr_t *addr, u8 addr_type)
{
	struct hci_conn_params *params;

	if (is_connected(hdev, addr, addr_type))
		return -EISCONN;

1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061
	params = hci_conn_params_lookup(hdev, addr, addr_type);
	if (!params) {
		params = hci_conn_params_add(hdev, addr, addr_type);
		if (!params)
			return -ENOMEM;

		/* If we created new params, mark them to be deleted in
		 * hci_connect_le_scan_cleanup. It's different case than
		 * existing disabled params, those will stay after cleanup.
		 */
		params->auto_connect = HCI_AUTO_CONN_EXPLICIT;
	}
1062

1063
	/* We're trying to connect, so make sure params are at pend_le_conns */
1064
	if (params->auto_connect == HCI_AUTO_CONN_DISABLED ||
1065 1066
	    params->auto_connect == HCI_AUTO_CONN_REPORT ||
	    params->auto_connect == HCI_AUTO_CONN_EXPLICIT) {
1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081
		list_del_init(&params->action);
		list_add(&params->action, &hdev->pend_le_conns);
	}

	params->explicit_connect = true;

	BT_DBG("addr %pMR (type %u) auto_connect %u", addr, addr_type,
	       params->auto_connect);

	return 0;
}

/* This function requires the caller holds hdev->lock */
struct hci_conn *hci_connect_le_scan(struct hci_dev *hdev, bdaddr_t *dst,
				     u8 dst_type, u8 sec_level,
1082 1083
				     u16 conn_timeout,
				     enum conn_reasons conn_reason)
1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103
{
	struct hci_conn *conn;

	/* Let's make sure that le is enabled.*/
	if (!hci_dev_test_flag(hdev, HCI_LE_ENABLED)) {
		if (lmp_le_capable(hdev))
			return ERR_PTR(-ECONNREFUSED);

		return ERR_PTR(-EOPNOTSUPP);
	}

	/* Some devices send ATT messages as soon as the physical link is
	 * established. To be able to handle these ATT messages, the user-
	 * space first establishes the connection and then starts the pairing
	 * process.
	 *
	 * So if a hci_conn object already exists for the following connection
	 * attempt, we simply update pending_sec_level and auth_type fields
	 * and return the object found.
	 */
1104
	conn = hci_conn_hash_lookup_le(hdev, dst, dst_type);
1105 1106 1107 1108 1109 1110 1111 1112
	if (conn) {
		if (conn->pending_sec_level < sec_level)
			conn->pending_sec_level = sec_level;
		goto done;
	}

	BT_DBG("requesting refresh of dst_addr");

1113
	conn = hci_conn_add(hdev, LE_LINK, dst, HCI_ROLE_MASTER);
1114 1115 1116
	if (!conn)
		return ERR_PTR(-ENOMEM);

1117 1118
	if (hci_explicit_conn_params_set(hdev, dst, dst_type) < 0) {
		hci_conn_del(conn);
1119
		return ERR_PTR(-EBUSY);
1120
	}
1121 1122 1123 1124 1125 1126 1127

	conn->state = BT_CONNECT;
	set_bit(HCI_CONN_SCANNING, &conn->flags);
	conn->dst_type = dst_type;
	conn->sec_level = BT_SECURITY_LOW;
	conn->pending_sec_level = sec_level;
	conn->conn_timeout = conn_timeout;
1128
	conn->conn_reason = conn_reason;
1129

1130
	hci_update_passive_scan(hdev);
1131

1132 1133 1134 1135 1136
done:
	hci_conn_hold(conn);
	return conn;
}

1137
struct hci_conn *hci_connect_acl(struct hci_dev *hdev, bdaddr_t *dst,
1138 1139
				 u8 sec_level, u8 auth_type,
				 enum conn_reasons conn_reason)
Linus Torvalds's avatar
Linus Torvalds committed
1140 1141
{
	struct hci_conn *acl;
1142

1143
	if (!hci_dev_test_flag(hdev, HCI_BREDR_ENABLED)) {
1144 1145 1146
		if (lmp_bredr_capable(hdev))
			return ERR_PTR(-ECONNREFUSED);

1147
		return ERR_PTR(-EOPNOTSUPP);
1148
	}
1149

1150 1151
	acl = hci_conn_hash_lookup_ba(hdev, ACL_LINK, dst);
	if (!acl) {
1152
		acl = hci_conn_add(hdev, ACL_LINK, dst, HCI_ROLE_MASTER);
1153
		if (!acl)
1154
			return ERR_PTR(-ENOMEM);
Linus Torvalds's avatar
Linus Torvalds committed
1155 1156 1157 1158
	}

	hci_conn_hold(acl);

1159
	acl->conn_reason = conn_reason;
1160
	if (acl->state == BT_OPEN || acl->state == BT_CLOSED) {
1161 1162
		acl->sec_level = BT_SECURITY_LOW;
		acl->pending_sec_level = sec_level;
1163
		acl->auth_type = auth_type;
1164
		hci_acl_create_connection(acl);
1165
	}
Linus Torvalds's avatar
Linus Torvalds committed
1166

1167 1168 1169
	return acl;
}

1170
struct hci_conn *hci_connect_sco(struct hci_dev *hdev, int type, bdaddr_t *dst,
1171
				 __u16 setting, struct bt_codec *codec)
1172 1173 1174 1175
{
	struct hci_conn *acl;
	struct hci_conn *sco;

1176 1177
	acl = hci_connect_acl(hdev, dst, BT_SECURITY_LOW, HCI_AT_NO_BONDING,
			      CONN_REASON_SCO_CONNECT);
1178
	if (IS_ERR(acl))
1179
		return acl;
Linus Torvalds's avatar
Linus Torvalds committed
1180

1181 1182
	sco = hci_conn_hash_lookup_ba(hdev, type, dst);
	if (!sco) {
1183
		sco = hci_conn_add(hdev, type, dst, HCI_ROLE_MASTER);
1184
		if (!sco) {
1185
			hci_conn_drop(acl);
1186
			return ERR_PTR(-ENOMEM);
Linus Torvalds's avatar
Linus Torvalds committed
1187
		}
1188
	}
Linus Torvalds's avatar
Linus Torvalds committed
1189

1190 1191
	acl->link = sco;
	sco->link = acl;
Linus Torvalds's avatar
Linus Torvalds committed
1192

1193
	hci_conn_hold(sco);
Linus Torvalds's avatar
Linus Torvalds committed
1194

1195
	sco->setting = setting;
1196
	sco->codec = *codec;
1197

1198
	if (acl->state == BT_CONNECTED &&
1199
	    (sco->state == BT_OPEN || sco->state == BT_CLOSED)) {
1200
		set_bit(HCI_CONN_POWER_SAVE, &acl->flags);
1201
		hci_conn_enter_active_mode(acl, BT_POWER_FORCE_ACTIVE_ON);
1202

1203
		if (test_bit(HCI_CONN_MODE_CHANGE_PEND, &acl->flags)) {
1204
			/* defer SCO setup until mode change completed */
1205
			set_bit(HCI_CONN_SCO_SETUP_PEND, &acl->flags);
1206 1207 1208 1209
			return sco;
		}

		hci_sco_setup(acl, 0x00);
1210
	}
1211 1212

	return sco;
Linus Torvalds's avatar
Linus Torvalds committed
1213 1214
}

1215 1216 1217
/* Check link security requirement */
int hci_conn_check_link_mode(struct hci_conn *conn)
{
1218
	BT_DBG("hcon %p", conn);
1219

1220 1221 1222 1223
	/* In Secure Connections Only mode, it is required that Secure
	 * Connections is used and the link is encrypted with AES-CCM
	 * using a P-256 authenticated combination key.
	 */
1224
	if (hci_dev_test_flag(conn->hdev, HCI_SC_ONLY)) {
1225 1226 1227 1228 1229 1230
		if (!hci_conn_sc_enabled(conn) ||
		    !test_bit(HCI_CONN_AES_CCM, &conn->flags) ||
		    conn->key_type != HCI_LK_AUTH_COMBINATION_P256)
			return 0;
	}

1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247
	 /* AES encryption is required for Level 4:
	  *
	  * BLUETOOTH CORE SPECIFICATION Version 5.2 | Vol 3, Part C
	  * page 1319:
	  *
	  * 128-bit equivalent strength for link and encryption keys
	  * required using FIPS approved algorithms (E0 not allowed,
	  * SAFER+ not allowed, and P-192 not allowed; encryption key
	  * not shortened)
	  */
	if (conn->sec_level == BT_SECURITY_FIPS &&
	    !test_bit(HCI_CONN_AES_CCM, &conn->flags)) {
		bt_dev_err(conn->hdev,
			   "Invalid security: Missing AES-CCM usage");
		return 0;
	}

1248 1249
	if (hci_conn_ssp_enabled(conn) &&
	    !test_bit(HCI_CONN_ENCRYPT, &conn->flags))
1250 1251 1252 1253 1254
		return 0;

	return 1;
}

Linus Torvalds's avatar
Linus Torvalds committed
1255
/* Authenticate remote device */
1256
static int hci_conn_auth(struct hci_conn *conn, __u8 sec_level, __u8 auth_type)
Linus Torvalds's avatar
Linus Torvalds committed
1257
{
1258
	BT_DBG("hcon %p", conn);
Linus Torvalds's avatar
Linus Torvalds committed
1259

1260 1261 1262
	if (conn->pending_sec_level > sec_level)
		sec_level = conn->pending_sec_level;

1263
	if (sec_level > conn->sec_level)
1264
		conn->pending_sec_level = sec_level;
1265
	else if (test_bit(HCI_CONN_AUTH, &conn->flags))
Linus Torvalds's avatar
Linus Torvalds committed
1266 1267
		return 1;

1268 1269 1270
	/* Make sure we preserve an existing MITM requirement*/
	auth_type |= (conn->auth_type & 0x01);

1271 1272
	conn->auth_type = auth_type;

1273
	if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
Linus Torvalds's avatar
Linus Torvalds committed
1274
		struct hci_cp_auth_requested cp;
1275

1276
		cp.handle = cpu_to_le16(conn->handle);
1277
		hci_send_cmd(conn->hdev, HCI_OP_AUTH_REQUESTED,
1278
			     sizeof(cp), &cp);
1279 1280 1281 1282

		/* If we're already encrypted set the REAUTH_PEND flag,
		 * otherwise set the ENCRYPT_PEND.
		 */
1283
		if (test_bit(HCI_CONN_ENCRYPT, &conn->flags))
1284
			set_bit(HCI_CONN_REAUTH_PEND, &conn->flags);
1285 1286
		else
			set_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
Linus Torvalds's avatar
Linus Torvalds committed
1287
	}
1288

Linus Torvalds's avatar
Linus Torvalds committed
1289 1290 1291
	return 0;
}

1292
/* Encrypt the link */
1293 1294
static void hci_conn_encrypt(struct hci_conn *conn)
{
1295
	BT_DBG("hcon %p", conn);
1296

1297
	if (!test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags)) {
1298 1299 1300 1301
		struct hci_cp_set_conn_encrypt cp;
		cp.handle  = cpu_to_le16(conn->handle);
		cp.encrypt = 0x01;
		hci_send_cmd(conn->hdev, HCI_OP_SET_CONN_ENCRYPT, sizeof(cp),
1302
			     &cp);
1303 1304 1305
	}
}

1306
/* Enable security */
1307 1308
int hci_conn_security(struct hci_conn *conn, __u8 sec_level, __u8 auth_type,
		      bool initiator)
Linus Torvalds's avatar
Linus Torvalds committed
1309
{
1310
	BT_DBG("hcon %p", conn);
Linus Torvalds's avatar
Linus Torvalds committed
1311

1312 1313 1314
	if (conn->type == LE_LINK)
		return smp_conn_security(conn, sec_level);

1315
	/* For sdp we don't need the link key. */
1316 1317 1318
	if (sec_level == BT_SECURITY_SDP)
		return 1;

1319 1320
	/* For non 2.1 devices and low security level we don't need the link
	   key. */
1321
	if (sec_level == BT_SECURITY_LOW && !hci_conn_ssp_enabled(conn))
1322
		return 1;
1323

1324
	/* For other security levels we need the link key. */
1325
	if (!test_bit(HCI_CONN_AUTH, &conn->flags))
1326 1327
		goto auth;

1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338
	/* An authenticated FIPS approved combination key has sufficient
	 * security for security level 4. */
	if (conn->key_type == HCI_LK_AUTH_COMBINATION_P256 &&
	    sec_level == BT_SECURITY_FIPS)
		goto encrypt;

	/* An authenticated combination key has sufficient security for
	   security level 3. */
	if ((conn->key_type == HCI_LK_AUTH_COMBINATION_P192 ||
	     conn->key_type == HCI_LK_AUTH_COMBINATION_P256) &&
	    sec_level == BT_SECURITY_HIGH)
1339 1340 1341 1342
		goto encrypt;

	/* An unauthenticated combination key has sufficient security for
	   security level 1 and 2. */
1343 1344
	if ((conn->key_type == HCI_LK_UNAUTH_COMBINATION_P192 ||
	     conn->key_type == HCI_LK_UNAUTH_COMBINATION_P256) &&
1345
	    (sec_level == BT_SECURITY_MEDIUM || sec_level == BT_SECURITY_LOW))
1346 1347 1348 1349 1350 1351 1352
		goto encrypt;

	/* A combination key has always sufficient security for the security
	   levels 1 or 2. High security level requires the combination key
	   is generated using maximum PIN code length (16).
	   For pre 2.1 units. */
	if (conn->key_type == HCI_LK_COMBINATION &&
1353 1354
	    (sec_level == BT_SECURITY_MEDIUM || sec_level == BT_SECURITY_LOW ||
	     conn->pin_length == 16))
1355 1356 1357
		goto encrypt;

auth:
1358
	if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags))
Linus Torvalds's avatar
Linus Torvalds committed
1359 1360
		return 0;

1361 1362 1363
	if (initiator)
		set_bit(HCI_CONN_AUTH_INITIATOR, &conn->flags);

1364 1365
	if (!hci_conn_auth(conn, sec_level, auth_type))
		return 0;
1366 1367

encrypt:
1368 1369 1370 1371 1372 1373 1374 1375
	if (test_bit(HCI_CONN_ENCRYPT, &conn->flags)) {
		/* Ensure that the encryption key size has been read,
		 * otherwise stall the upper layer responses.
		 */
		if (!conn->enc_key_size)
			return 0;

		/* Nothing else needed, all requirements are met */
1376
		return 1;
1377
	}
1378

1379
	hci_conn_encrypt(conn);
Linus Torvalds's avatar
Linus Torvalds committed
1380 1381
	return 0;
}
1382
EXPORT_SYMBOL(hci_conn_security);
Linus Torvalds's avatar
Linus Torvalds committed
1383

1384 1385 1386
/* Check secure link requirement */
int hci_conn_check_secure(struct hci_conn *conn, __u8 sec_level)
{
1387
	BT_DBG("hcon %p", conn);
1388

1389 1390 1391
	/* Accept if non-secure or higher security level is required */
	if (sec_level != BT_SECURITY_HIGH && sec_level != BT_SECURITY_FIPS)
		return 1;
1392

1393 1394 1395
	/* Accept if secure or higher security level is already present */
	if (conn->sec_level == BT_SECURITY_HIGH ||
	    conn->sec_level == BT_SECURITY_FIPS)
1396 1397
		return 1;

1398 1399
	/* Reject not secure link */
	return 0;
1400 1401 1402
}
EXPORT_SYMBOL(hci_conn_check_secure);

Linus Torvalds's avatar
Linus Torvalds committed
1403
/* Switch role */
1404
int hci_conn_switch_role(struct hci_conn *conn, __u8 role)
Linus Torvalds's avatar
Linus Torvalds committed
1405
{
1406
	BT_DBG("hcon %p", conn);
Linus Torvalds's avatar
Linus Torvalds committed
1407

1408
	if (role == conn->role)
Linus Torvalds's avatar
Linus Torvalds committed
1409 1410
		return 1;

1411
	if (!test_and_set_bit(HCI_CONN_RSWITCH_PEND, &conn->flags)) {
Linus Torvalds's avatar
Linus Torvalds committed
1412 1413 1414
		struct hci_cp_switch_role cp;
		bacpy(&cp.bdaddr, &conn->dst);
		cp.role = role;
1415
		hci_send_cmd(conn->hdev, HCI_OP_SWITCH_ROLE, sizeof(cp), &cp);
Linus Torvalds's avatar
Linus Torvalds committed
1416
	}
1417

Linus Torvalds's avatar
Linus Torvalds committed
1418 1419 1420 1421
	return 0;
}
EXPORT_SYMBOL(hci_conn_switch_role);

1422
/* Enter active mode */
1423
void hci_conn_enter_active_mode(struct hci_conn *conn, __u8 force_active)
1424 1425 1426
{
	struct hci_dev *hdev = conn->hdev;

1427
	BT_DBG("hcon %p mode %d", conn, conn->mode);
1428

1429 1430 1431
	if (conn->mode != HCI_CM_SNIFF)
		goto timer;

1432
	if (!test_bit(HCI_CONN_POWER_SAVE, &conn->flags) && !force_active)
1433 1434
		goto timer;

1435
	if (!test_and_set_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags)) {
1436
		struct hci_cp_exit_sniff_mode cp;
1437
		cp.handle = cpu_to_le16(conn->handle);
1438
		hci_send_cmd(hdev, HCI_OP_EXIT_SNIFF_MODE, sizeof(cp), &cp);
1439 1440 1441 1442
	}

timer:
	if (hdev->idle_timeout > 0)
1443 1444
		queue_delayed_work(hdev->workqueue, &conn->idle_work,
				   msecs_to_jiffies(hdev->idle_timeout));
1445 1446
}

Linus Torvalds's avatar
Linus Torvalds committed
1447 1448 1449 1450
/* Drop all connection on the device */
void hci_conn_hash_flush(struct hci_dev *hdev)
{
	struct hci_conn_hash *h = &hdev->conn_hash;
1451
	struct hci_conn *c, *n;
Linus Torvalds's avatar
Linus Torvalds committed
1452 1453 1454

	BT_DBG("hdev %s", hdev->name);

1455
	list_for_each_entry_safe(c, n, &h->list, list) {
Linus Torvalds's avatar
Linus Torvalds committed
1456 1457
		c->state = BT_CLOSED;

1458
		hci_disconn_cfm(c, HCI_ERROR_LOCAL_HOST_TERM);
Linus Torvalds's avatar
Linus Torvalds committed
1459 1460 1461 1462
		hci_conn_del(c);
	}
}

1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473
/* Check pending connect attempts */
void hci_conn_check_pending(struct hci_dev *hdev)
{
	struct hci_conn *conn;

	BT_DBG("hdev %s", hdev->name);

	hci_dev_lock(hdev);

	conn = hci_conn_hash_lookup_state(hdev, ACL_LINK, BT_CONNECT2);
	if (conn)
1474
		hci_acl_create_connection(conn);
1475 1476 1477 1478

	hci_dev_unlock(hdev);
}

1479 1480 1481 1482
static u32 get_link_mode(struct hci_conn *conn)
{
	u32 link_mode = 0;

1483
	if (conn->role == HCI_ROLE_MASTER)
1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500
		link_mode |= HCI_LM_MASTER;

	if (test_bit(HCI_CONN_ENCRYPT, &conn->flags))
		link_mode |= HCI_LM_ENCRYPT;

	if (test_bit(HCI_CONN_AUTH, &conn->flags))
		link_mode |= HCI_LM_AUTH;

	if (test_bit(HCI_CONN_SECURE, &conn->flags))
		link_mode |= HCI_LM_SECURE;

	if (test_bit(HCI_CONN_FIPS, &conn->flags))
		link_mode |= HCI_LM_FIPS;

	return link_mode;
}

Linus Torvalds's avatar
Linus Torvalds committed
1501 1502
int hci_get_conn_list(void __user *arg)
{
1503
	struct hci_conn *c;
Linus Torvalds's avatar
Linus Torvalds committed
1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516
	struct hci_conn_list_req req, *cl;
	struct hci_conn_info *ci;
	struct hci_dev *hdev;
	int n = 0, size, err;

	if (copy_from_user(&req, arg, sizeof(req)))
		return -EFAULT;

	if (!req.conn_num || req.conn_num > (PAGE_SIZE * 2) / sizeof(*ci))
		return -EINVAL;

	size = sizeof(req) + req.conn_num * sizeof(*ci);

1517 1518
	cl = kmalloc(size, GFP_KERNEL);
	if (!cl)
Linus Torvalds's avatar
Linus Torvalds committed
1519 1520
		return -ENOMEM;

1521 1522
	hdev = hci_dev_get(req.dev_id);
	if (!hdev) {
Linus Torvalds's avatar
Linus Torvalds committed
1523 1524 1525 1526 1527 1528
		kfree(cl);
		return -ENODEV;
	}

	ci = cl->conn_info;

1529
	hci_dev_lock(hdev);
1530
	list_for_each_entry(c, &hdev->conn_hash.list, list) {
Linus Torvalds's avatar
Linus Torvalds committed
1531 1532 1533 1534 1535
		bacpy(&(ci + n)->bdaddr, &c->dst);
		(ci + n)->handle = c->handle;
		(ci + n)->type  = c->type;
		(ci + n)->out   = c->out;
		(ci + n)->state = c->state;
1536
		(ci + n)->link_mode = get_link_mode(c);
Linus Torvalds's avatar
Linus Torvalds committed
1537 1538 1539
		if (++n >= req.conn_num)
			break;
	}
1540
	hci_dev_unlock(hdev);
Linus Torvalds's avatar
Linus Torvalds committed
1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563

	cl->dev_id = hdev->id;
	cl->conn_num = n;
	size = sizeof(req) + n * sizeof(*ci);

	hci_dev_put(hdev);

	err = copy_to_user(arg, cl, size);
	kfree(cl);

	return err ? -EFAULT : 0;
}

int hci_get_conn_info(struct hci_dev *hdev, void __user *arg)
{
	struct hci_conn_info_req req;
	struct hci_conn_info ci;
	struct hci_conn *conn;
	char __user *ptr = arg + sizeof(req);

	if (copy_from_user(&req, arg, sizeof(req)))
		return -EFAULT;

1564
	hci_dev_lock(hdev);
Linus Torvalds's avatar
Linus Torvalds committed
1565 1566 1567 1568 1569 1570 1571
	conn = hci_conn_hash_lookup_ba(hdev, req.type, &req.bdaddr);
	if (conn) {
		bacpy(&ci.bdaddr, &conn->dst);
		ci.handle = conn->handle;
		ci.type  = conn->type;
		ci.out   = conn->out;
		ci.state = conn->state;
1572
		ci.link_mode = get_link_mode(conn);
Linus Torvalds's avatar
Linus Torvalds committed
1573
	}
1574
	hci_dev_unlock(hdev);
Linus Torvalds's avatar
Linus Torvalds committed
1575 1576 1577 1578 1579 1580

	if (!conn)
		return -ENOENT;

	return copy_to_user(ptr, &ci, sizeof(ci)) ? -EFAULT : 0;
}
1581 1582 1583 1584 1585 1586 1587 1588 1589

int hci_get_auth_info(struct hci_dev *hdev, void __user *arg)
{
	struct hci_auth_info_req req;
	struct hci_conn *conn;

	if (copy_from_user(&req, arg, sizeof(req)))
		return -EFAULT;

1590
	hci_dev_lock(hdev);
1591 1592 1593
	conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &req.bdaddr);
	if (conn)
		req.type = conn->auth_type;
1594
	hci_dev_unlock(hdev);
1595 1596 1597 1598 1599 1600

	if (!conn)
		return -ENOENT;

	return copy_to_user(arg, &req, sizeof(req)) ? -EFAULT : 0;
}
1601 1602 1603 1604 1605 1606

struct hci_chan *hci_chan_create(struct hci_conn *conn)
{
	struct hci_dev *hdev = conn->hdev;
	struct hci_chan *chan;

1607
	BT_DBG("%s hcon %p", hdev->name, conn);
1608

1609 1610 1611 1612 1613
	if (test_bit(HCI_CONN_DROP, &conn->flags)) {
		BT_DBG("Refusing to create new hci_chan");
		return NULL;
	}

1614
	chan = kzalloc(sizeof(*chan), GFP_KERNEL);
1615 1616 1617
	if (!chan)
		return NULL;

1618
	chan->conn = hci_conn_get(conn);
1619
	skb_queue_head_init(&chan->data_q);
1620
	chan->state = BT_CONNECTED;
1621

1622
	list_add_rcu(&chan->list, &conn->chan_list);
1623 1624 1625 1626

	return chan;
}

1627
void hci_chan_del(struct hci_chan *chan)
1628 1629 1630 1631
{
	struct hci_conn *conn = chan->conn;
	struct hci_dev *hdev = conn->hdev;

1632
	BT_DBG("%s hcon %p chan %p", hdev->name, conn, chan);
1633

1634 1635 1636
	list_del_rcu(&chan->list);

	synchronize_rcu();
1637

1638
	/* Prevent new hci_chan's to be created for this hci_conn */
1639
	set_bit(HCI_CONN_DROP, &conn->flags);
1640

1641
	hci_conn_put(conn);
1642

1643 1644 1645 1646
	skb_queue_purge(&chan->data_q);
	kfree(chan);
}

1647
void hci_chan_list_flush(struct hci_conn *conn)
1648
{
1649
	struct hci_chan *chan, *n;
1650

1651
	BT_DBG("hcon %p", conn);
1652

1653
	list_for_each_entry_safe(chan, n, &conn->chan_list, list)
1654 1655
		hci_chan_del(chan);
}
1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687

static struct hci_chan *__hci_chan_lookup_handle(struct hci_conn *hcon,
						 __u16 handle)
{
	struct hci_chan *hchan;

	list_for_each_entry(hchan, &hcon->chan_list, list) {
		if (hchan->handle == handle)
			return hchan;
	}

	return NULL;
}

struct hci_chan *hci_chan_lookup_handle(struct hci_dev *hdev, __u16 handle)
{
	struct hci_conn_hash *h = &hdev->conn_hash;
	struct hci_conn *hcon;
	struct hci_chan *hchan = NULL;

	rcu_read_lock();

	list_for_each_entry_rcu(hcon, &h->list, list) {
		hchan = __hci_chan_lookup_handle(hcon, handle);
		if (hchan)
			break;
	}

	rcu_read_unlock();

	return hchan;
}
1688 1689 1690 1691 1692 1693 1694

u32 hci_conn_get_phy(struct hci_conn *conn)
{
	u32 phys = 0;

	/* BLUETOOTH CORE SPECIFICATION Version 5.2 | Vol 2, Part B page 471:
	 * Table 6.2: Packets defined for synchronous, asynchronous, and
1695
	 * CPB logical transport types.
1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790
	 */
	switch (conn->type) {
	case SCO_LINK:
		/* SCO logical transport (1 Mb/s):
		 * HV1, HV2, HV3 and DV.
		 */
		phys |= BT_PHY_BR_1M_1SLOT;

		break;

	case ACL_LINK:
		/* ACL logical transport (1 Mb/s) ptt=0:
		 * DH1, DM3, DH3, DM5 and DH5.
		 */
		phys |= BT_PHY_BR_1M_1SLOT;

		if (conn->pkt_type & (HCI_DM3 | HCI_DH3))
			phys |= BT_PHY_BR_1M_3SLOT;

		if (conn->pkt_type & (HCI_DM5 | HCI_DH5))
			phys |= BT_PHY_BR_1M_5SLOT;

		/* ACL logical transport (2 Mb/s) ptt=1:
		 * 2-DH1, 2-DH3 and 2-DH5.
		 */
		if (!(conn->pkt_type & HCI_2DH1))
			phys |= BT_PHY_EDR_2M_1SLOT;

		if (!(conn->pkt_type & HCI_2DH3))
			phys |= BT_PHY_EDR_2M_3SLOT;

		if (!(conn->pkt_type & HCI_2DH5))
			phys |= BT_PHY_EDR_2M_5SLOT;

		/* ACL logical transport (3 Mb/s) ptt=1:
		 * 3-DH1, 3-DH3 and 3-DH5.
		 */
		if (!(conn->pkt_type & HCI_3DH1))
			phys |= BT_PHY_EDR_3M_1SLOT;

		if (!(conn->pkt_type & HCI_3DH3))
			phys |= BT_PHY_EDR_3M_3SLOT;

		if (!(conn->pkt_type & HCI_3DH5))
			phys |= BT_PHY_EDR_3M_5SLOT;

		break;

	case ESCO_LINK:
		/* eSCO logical transport (1 Mb/s): EV3, EV4 and EV5 */
		phys |= BT_PHY_BR_1M_1SLOT;

		if (!(conn->pkt_type & (ESCO_EV4 | ESCO_EV5)))
			phys |= BT_PHY_BR_1M_3SLOT;

		/* eSCO logical transport (2 Mb/s): 2-EV3, 2-EV5 */
		if (!(conn->pkt_type & ESCO_2EV3))
			phys |= BT_PHY_EDR_2M_1SLOT;

		if (!(conn->pkt_type & ESCO_2EV5))
			phys |= BT_PHY_EDR_2M_3SLOT;

		/* eSCO logical transport (3 Mb/s): 3-EV3, 3-EV5 */
		if (!(conn->pkt_type & ESCO_3EV3))
			phys |= BT_PHY_EDR_3M_1SLOT;

		if (!(conn->pkt_type & ESCO_3EV5))
			phys |= BT_PHY_EDR_3M_3SLOT;

		break;

	case LE_LINK:
		if (conn->le_tx_phy & HCI_LE_SET_PHY_1M)
			phys |= BT_PHY_LE_1M_TX;

		if (conn->le_rx_phy & HCI_LE_SET_PHY_1M)
			phys |= BT_PHY_LE_1M_RX;

		if (conn->le_tx_phy & HCI_LE_SET_PHY_2M)
			phys |= BT_PHY_LE_2M_TX;

		if (conn->le_rx_phy & HCI_LE_SET_PHY_2M)
			phys |= BT_PHY_LE_2M_RX;

		if (conn->le_tx_phy & HCI_LE_SET_PHY_CODED)
			phys |= BT_PHY_LE_CODED_TX;

		if (conn->le_rx_phy & HCI_LE_SET_PHY_CODED)
			phys |= BT_PHY_LE_CODED_RX;

		break;
	}

	return phys;
}