]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blame - net/bluetooth/hci_conn.c
Bluetooth: Handle specific error for SCO connection fallback
[mirror_ubuntu-bionic-kernel.git] / net / bluetooth / hci_conn.c
CommitLineData
8e87d142 1/*
1da177e4 2 BlueZ - Bluetooth protocol stack for Linux
2d0a0346 3 Copyright (c) 2000-2001, 2010, Code Aurora Forum. All rights reserved.
1da177e4
LT
4
5 Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
6
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License version 2 as
9 published by the Free Software Foundation;
10
11 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
12 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
13 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
14 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
8e87d142
YH
15 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
16 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
1da177e4
LT
18 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19
8e87d142
YH
20 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
21 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
1da177e4
LT
22 SOFTWARE IS DISCLAIMED.
23*/
24
25/* Bluetooth HCI connection handling. */
26
8c520a59 27#include <linux/export.h>
1da177e4
LT
28
29#include <net/bluetooth/bluetooth.h>
30#include <net/bluetooth/hci_core.h>
9740e49d 31#include <net/bluetooth/a2mp.h>
d8343f12 32#include <net/bluetooth/smp.h>
1da177e4 33
1aef8669 34static void hci_le_create_connection(struct hci_conn *conn)
fcd89c09
VT
35{
36 struct hci_dev *hdev = conn->hdev;
37 struct hci_cp_le_create_conn cp;
38
39 conn->state = BT_CONNECT;
a0c808b3 40 conn->out = true;
b92a6223 41 conn->link_mode |= HCI_LM_MASTER;
7b5c0d52 42 conn->sec_level = BT_SECURITY_LOW;
fcd89c09
VT
43
44 memset(&cp, 0, sizeof(cp));
82781e63
AE
45 cp.scan_interval = __constant_cpu_to_le16(0x0060);
46 cp.scan_window = __constant_cpu_to_le16(0x0030);
fcd89c09 47 bacpy(&cp.peer_addr, &conn->dst);
6d3ce0e7 48 cp.peer_addr_type = conn->dst_type;
82781e63
AE
49 cp.conn_interval_min = __constant_cpu_to_le16(0x0028);
50 cp.conn_interval_max = __constant_cpu_to_le16(0x0038);
51 cp.supervision_timeout = __constant_cpu_to_le16(0x002a);
52 cp.min_ce_len = __constant_cpu_to_le16(0x0000);
53 cp.max_ce_len = __constant_cpu_to_le16(0x0000);
fcd89c09
VT
54
55 hci_send_cmd(hdev, HCI_OP_LE_CREATE_CONN, sizeof(cp), &cp);
56}
57
1aef8669 58static void hci_le_create_connection_cancel(struct hci_conn *conn)
fcd89c09
VT
59{
60 hci_send_cmd(conn->hdev, HCI_OP_LE_CREATE_CONN_CANCEL, 0, NULL);
61}
62
1aef8669 63static void hci_acl_create_connection(struct hci_conn *conn)
1da177e4
LT
64{
65 struct hci_dev *hdev = conn->hdev;
66 struct inquiry_entry *ie;
67 struct hci_cp_create_conn cp;
68
42d2d87c 69 BT_DBG("hcon %p", conn);
1da177e4
LT
70
71 conn->state = BT_CONNECT;
a0c808b3 72 conn->out = true;
a8746417 73
1da177e4
LT
74 conn->link_mode = HCI_LM_MASTER;
75
4c67bc74
MH
76 conn->attempt++;
77
e4e8e37c
MH
78 conn->link_policy = hdev->link_policy;
79
1da177e4
LT
80 memset(&cp, 0, sizeof(cp));
81 bacpy(&cp.bdaddr, &conn->dst);
82 cp.pscan_rep_mode = 0x02;
83
70f23020
AE
84 ie = hci_inquiry_cache_lookup(hdev, &conn->dst);
85 if (ie) {
41a96212
MH
86 if (inquiry_entry_age(ie) <= INQUIRY_ENTRY_AGE_MAX) {
87 cp.pscan_rep_mode = ie->data.pscan_rep_mode;
88 cp.pscan_mode = ie->data.pscan_mode;
89 cp.clock_offset = ie->data.clock_offset |
82781e63 90 __constant_cpu_to_le16(0x8000);
41a96212
MH
91 }
92
1da177e4 93 memcpy(conn->dev_class, ie->data.dev_class, 3);
58a681ef
JH
94 if (ie->data.ssp_mode > 0)
95 set_bit(HCI_CONN_SSP_ENABLED, &conn->flags);
1da177e4
LT
96 }
97
a8746417 98 cp.pkt_type = cpu_to_le16(conn->pkt_type);
1da177e4 99 if (lmp_rswitch_capable(hdev) && !(hdev->link_mode & HCI_LM_MASTER))
b6a0dc82 100 cp.role_switch = 0x01;
1da177e4 101 else
b6a0dc82 102 cp.role_switch = 0x00;
4c67bc74 103
a9de9248 104 hci_send_cmd(hdev, HCI_OP_CREATE_CONN, sizeof(cp), &cp);
1da177e4
LT
105}
106
1aef8669 107static void hci_acl_create_connection_cancel(struct hci_conn *conn)
6ac59344
MH
108{
109 struct hci_cp_create_conn_cancel cp;
110
38b3fef1 111 BT_DBG("hcon %p", conn);
6ac59344 112
d095c1eb 113 if (conn->hdev->hci_ver < BLUETOOTH_VER_1_2)
6ac59344
MH
114 return;
115
116 bacpy(&cp.bdaddr, &conn->dst);
a9de9248 117 hci_send_cmd(conn->hdev, HCI_OP_CREATE_CONN_CANCEL, sizeof(cp), &cp);
6ac59344
MH
118}
119
93796fa6
CT
120static void hci_reject_sco(struct hci_conn *conn)
121{
122 struct hci_cp_reject_sync_conn_req cp;
123
124 cp.reason = HCI_ERROR_REMOTE_USER_TERM;
125 bacpy(&cp.bdaddr, &conn->dst);
126
127 hci_send_cmd(conn->hdev, HCI_OP_REJECT_SYNC_CONN_REQ, sizeof(cp), &cp);
128}
129
bed71748 130void hci_disconnect(struct hci_conn *conn, __u8 reason)
1da177e4
LT
131{
132 struct hci_cp_disconnect cp;
133
38b3fef1 134 BT_DBG("hcon %p", conn);
1da177e4
LT
135
136 conn->state = BT_DISCONN;
137
aca3192c 138 cp.handle = cpu_to_le16(conn->handle);
1da177e4 139 cp.reason = reason;
a9de9248 140 hci_send_cmd(conn->hdev, HCI_OP_DISCONNECT, sizeof(cp), &cp);
1da177e4
LT
141}
142
53502d69
AE
143static void hci_amp_disconn(struct hci_conn *conn, __u8 reason)
144{
145 struct hci_cp_disconn_phy_link cp;
146
147 BT_DBG("hcon %p", conn);
148
149 conn->state = BT_DISCONN;
150
151 cp.phy_handle = HCI_PHY_HANDLE(conn->handle);
152 cp.reason = reason;
153 hci_send_cmd(conn->hdev, HCI_OP_DISCONN_PHY_LINK,
154 sizeof(cp), &cp);
155}
156
57f5d0d1 157static void hci_add_sco(struct hci_conn *conn, __u16 handle)
1da177e4
LT
158{
159 struct hci_dev *hdev = conn->hdev;
160 struct hci_cp_add_sco cp;
161
38b3fef1 162 BT_DBG("hcon %p", conn);
1da177e4
LT
163
164 conn->state = BT_CONNECT;
a0c808b3 165 conn->out = true;
1da177e4 166
efc7688b
MH
167 conn->attempt++;
168
aca3192c 169 cp.handle = cpu_to_le16(handle);
a8746417 170 cp.pkt_type = cpu_to_le16(conn->pkt_type);
1da177e4 171
a9de9248 172 hci_send_cmd(hdev, HCI_OP_ADD_SCO, sizeof(cp), &cp);
1da177e4
LT
173}
174
b6a0dc82
MH
175void hci_setup_sync(struct hci_conn *conn, __u16 handle)
176{
177 struct hci_dev *hdev = conn->hdev;
178 struct hci_cp_setup_sync_conn cp;
179
38b3fef1 180 BT_DBG("hcon %p", conn);
b6a0dc82
MH
181
182 conn->state = BT_CONNECT;
a0c808b3 183 conn->out = true;
b6a0dc82 184
efc7688b
MH
185 conn->attempt++;
186
b6a0dc82 187 cp.handle = cpu_to_le16(handle);
b6a0dc82 188
82781e63
AE
189 cp.tx_bandwidth = __constant_cpu_to_le32(0x00001f40);
190 cp.rx_bandwidth = __constant_cpu_to_le32(0x00001f40);
10c62ddc
FD
191 cp.voice_setting = cpu_to_le16(conn->setting);
192
193 switch (conn->setting & SCO_AIRMODE_MASK) {
194 case SCO_AIRMODE_TRANSP:
195 cp.pkt_type = __constant_cpu_to_le16(EDR_ESCO_MASK &
196 ~ESCO_2EV3);
197 cp.max_latency = __constant_cpu_to_le16(0x000d);
198 cp.retrans_effort = 0x02;
199 break;
200 case SCO_AIRMODE_CVSD:
201 cp.pkt_type = cpu_to_le16(conn->pkt_type);
202 cp.max_latency = __constant_cpu_to_le16(0xffff);
203 cp.retrans_effort = 0xff;
204 break;
205 }
b6a0dc82
MH
206
207 hci_send_cmd(hdev, HCI_OP_SETUP_SYNC_CONN, sizeof(cp), &cp);
208}
209
2ce603eb 210void hci_le_conn_update(struct hci_conn *conn, u16 min, u16 max,
5974e4c4 211 u16 latency, u16 to_multiplier)
2ce603eb
CT
212{
213 struct hci_cp_le_conn_update cp;
214 struct hci_dev *hdev = conn->hdev;
215
216 memset(&cp, 0, sizeof(cp));
217
218 cp.handle = cpu_to_le16(conn->handle);
219 cp.conn_interval_min = cpu_to_le16(min);
220 cp.conn_interval_max = cpu_to_le16(max);
221 cp.conn_latency = cpu_to_le16(latency);
222 cp.supervision_timeout = cpu_to_le16(to_multiplier);
82781e63
AE
223 cp.min_ce_len = __constant_cpu_to_le16(0x0001);
224 cp.max_ce_len = __constant_cpu_to_le16(0x0001);
2ce603eb
CT
225
226 hci_send_cmd(hdev, HCI_OP_LE_CONN_UPDATE, sizeof(cp), &cp);
227}
2ce603eb 228
a7a595f6 229void hci_le_start_enc(struct hci_conn *conn, __le16 ediv, __u8 rand[8],
5974e4c4 230 __u8 ltk[16])
a7a595f6
VCG
231{
232 struct hci_dev *hdev = conn->hdev;
233 struct hci_cp_le_start_enc cp;
234
38b3fef1 235 BT_DBG("hcon %p", conn);
a7a595f6
VCG
236
237 memset(&cp, 0, sizeof(cp));
238
239 cp.handle = cpu_to_le16(conn->handle);
240 memcpy(cp.ltk, ltk, sizeof(cp.ltk));
241 cp.ediv = ediv;
51beabdf 242 memcpy(cp.rand, rand, sizeof(cp.rand));
a7a595f6
VCG
243
244 hci_send_cmd(hdev, HCI_OP_LE_START_ENC, sizeof(cp), &cp);
245}
a7a595f6 246
e73439d8
MH
247/* Device _must_ be locked */
248void hci_sco_setup(struct hci_conn *conn, __u8 status)
249{
250 struct hci_conn *sco = conn->link;
251
e73439d8
MH
252 if (!sco)
253 return;
254
38b3fef1
AE
255 BT_DBG("hcon %p", conn);
256
e73439d8
MH
257 if (!status) {
258 if (lmp_esco_capable(conn->hdev))
259 hci_setup_sync(sco, conn->handle);
260 else
261 hci_add_sco(sco, conn->handle);
262 } else {
263 hci_proto_connect_cfm(sco, status);
264 hci_conn_del(sco);
265 }
266}
267
53502d69
AE
268static void hci_conn_disconnect(struct hci_conn *conn)
269{
270 __u8 reason = hci_proto_disconn_ind(conn);
271
272 switch (conn->type) {
53502d69
AE
273 case AMP_LINK:
274 hci_amp_disconn(conn, reason);
275 break;
4c02e2d4 276 default:
bed71748 277 hci_disconnect(conn, reason);
4c02e2d4 278 break;
53502d69
AE
279 }
280}
281
19c40e3b 282static void hci_conn_timeout(struct work_struct *work)
1da177e4 283{
19c40e3b 284 struct hci_conn *conn = container_of(work, struct hci_conn,
5974e4c4 285 disc_work.work);
1da177e4 286
38b3fef1 287 BT_DBG("hcon %p state %s", conn, state_to_string(conn->state));
1da177e4
LT
288
289 if (atomic_read(&conn->refcnt))
290 return;
291
6ac59344
MH
292 switch (conn->state) {
293 case BT_CONNECT:
769be974 294 case BT_CONNECT2:
fcd89c09
VT
295 if (conn->out) {
296 if (conn->type == ACL_LINK)
1aef8669 297 hci_acl_create_connection_cancel(conn);
fcd89c09 298 else if (conn->type == LE_LINK)
1aef8669 299 hci_le_create_connection_cancel(conn);
93796fa6
CT
300 } else if (conn->type == SCO_LINK || conn->type == ESCO_LINK) {
301 hci_reject_sco(conn);
fcd89c09 302 }
6ac59344 303 break;
769be974 304 case BT_CONFIG:
8e87d142 305 case BT_CONNECTED:
53502d69 306 hci_conn_disconnect(conn);
6ac59344
MH
307 break;
308 default:
1da177e4 309 conn->state = BT_CLOSED;
6ac59344
MH
310 break;
311 }
1da177e4
LT
312}
313
416dc94b
GP
314/* Enter sniff mode */
315static void hci_conn_enter_sniff_mode(struct hci_conn *conn)
316{
317 struct hci_dev *hdev = conn->hdev;
318
38b3fef1 319 BT_DBG("hcon %p mode %d", conn, conn->mode);
416dc94b
GP
320
321 if (test_bit(HCI_RAW, &hdev->flags))
322 return;
323
324 if (!lmp_sniff_capable(hdev) || !lmp_sniff_capable(conn))
325 return;
326
327 if (conn->mode != HCI_CM_ACTIVE || !(conn->link_policy & HCI_LP_SNIFF))
328 return;
329
330 if (lmp_sniffsubr_capable(hdev) && lmp_sniffsubr_capable(conn)) {
331 struct hci_cp_sniff_subrate cp;
332 cp.handle = cpu_to_le16(conn->handle);
82781e63
AE
333 cp.max_latency = __constant_cpu_to_le16(0);
334 cp.min_remote_timeout = __constant_cpu_to_le16(0);
335 cp.min_local_timeout = __constant_cpu_to_le16(0);
416dc94b
GP
336 hci_send_cmd(hdev, HCI_OP_SNIFF_SUBRATE, sizeof(cp), &cp);
337 }
338
51a8efd7 339 if (!test_and_set_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags)) {
416dc94b
GP
340 struct hci_cp_sniff_mode cp;
341 cp.handle = cpu_to_le16(conn->handle);
342 cp.max_interval = cpu_to_le16(hdev->sniff_max_interval);
343 cp.min_interval = cpu_to_le16(hdev->sniff_min_interval);
82781e63
AE
344 cp.attempt = __constant_cpu_to_le16(4);
345 cp.timeout = __constant_cpu_to_le16(1);
416dc94b
GP
346 hci_send_cmd(hdev, HCI_OP_SNIFF_MODE, sizeof(cp), &cp);
347 }
348}
349
04837f64 350static void hci_conn_idle(unsigned long arg)
1da177e4 351{
04837f64
MH
352 struct hci_conn *conn = (void *) arg;
353
38b3fef1 354 BT_DBG("hcon %p mode %d", conn, conn->mode);
04837f64
MH
355
356 hci_conn_enter_sniff_mode(conn);
1da177e4
LT
357}
358
9f61656a
JH
359static void hci_conn_auto_accept(unsigned long arg)
360{
361 struct hci_conn *conn = (void *) arg;
362 struct hci_dev *hdev = conn->hdev;
363
9f61656a 364 hci_send_cmd(hdev, HCI_OP_USER_CONFIRM_REPLY, sizeof(conn->dst),
5974e4c4 365 &conn->dst);
9f61656a
JH
366}
367
1da177e4
LT
368struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst)
369{
370 struct hci_conn *conn;
371
6ed93dc6 372 BT_DBG("%s dst %pMR", hdev->name, dst);
1da177e4 373
cb601d7e 374 conn = kzalloc(sizeof(struct hci_conn), GFP_KERNEL);
04837f64 375 if (!conn)
1da177e4 376 return NULL;
1da177e4
LT
377
378 bacpy(&conn->dst, dst);
a8746417
MH
379 conn->hdev = hdev;
380 conn->type = type;
381 conn->mode = HCI_CM_ACTIVE;
382 conn->state = BT_OPEN;
93f19c9f 383 conn->auth_type = HCI_AT_GENERAL_BONDING;
17fa4b9d 384 conn->io_capability = hdev->io_capability;
a9583556 385 conn->remote_auth = 0xff;
13d39315 386 conn->key_type = 0xff;
1da177e4 387
58a681ef 388 set_bit(HCI_CONN_POWER_SAVE, &conn->flags);
052b30b0 389 conn->disc_timeout = HCI_DISCONN_TIMEOUT;
04837f64 390
a8746417
MH
391 switch (type) {
392 case ACL_LINK:
393 conn->pkt_type = hdev->pkt_type & ACL_PTYPE_MASK;
394 break;
395 case SCO_LINK:
396 if (lmp_esco_capable(hdev))
efc7688b
MH
397 conn->pkt_type = (hdev->esco_type & SCO_ESCO_MASK) |
398 (hdev->esco_type & EDR_ESCO_MASK);
a8746417
MH
399 else
400 conn->pkt_type = hdev->pkt_type & SCO_PTYPE_MASK;
401 break;
402 case ESCO_LINK:
efc7688b 403 conn->pkt_type = hdev->esco_type & ~EDR_ESCO_MASK;
a8746417
MH
404 break;
405 }
406
1da177e4 407 skb_queue_head_init(&conn->data_q);
04837f64 408
70c1f20b 409 INIT_LIST_HEAD(&conn->chan_list);
73d80deb 410
19c40e3b 411 INIT_DELAYED_WORK(&conn->disc_work, hci_conn_timeout);
b24b8a24 412 setup_timer(&conn->idle_timer, hci_conn_idle, (unsigned long)conn);
9f61656a 413 setup_timer(&conn->auto_accept_timer, hci_conn_auto_accept,
5974e4c4 414 (unsigned long) conn);
1da177e4
LT
415
416 atomic_set(&conn->refcnt, 0);
417
418 hci_dev_hold(hdev);
419
1da177e4 420 hci_conn_hash_add(hdev, conn);
3c54711c 421 if (hdev->notify)
1da177e4
LT
422 hdev->notify(hdev, HCI_NOTIFY_CONN_ADD);
423
a67e899c
MH
424 hci_conn_init_sysfs(conn);
425
1da177e4
LT
426 return conn;
427}
428
429int hci_conn_del(struct hci_conn *conn)
430{
431 struct hci_dev *hdev = conn->hdev;
432
38b3fef1 433 BT_DBG("%s hcon %p handle %d", hdev->name, conn, conn->handle);
1da177e4 434
04837f64
MH
435 del_timer(&conn->idle_timer);
436
19c40e3b 437 cancel_delayed_work_sync(&conn->disc_work);
1da177e4 438
9f61656a
JH
439 del_timer(&conn->auto_accept_timer);
440
5b7f9909 441 if (conn->type == ACL_LINK) {
1da177e4
LT
442 struct hci_conn *sco = conn->link;
443 if (sco)
444 sco->link = NULL;
445
446 /* Unacked frames */
447 hdev->acl_cnt += conn->sent;
6ed58ec5
VT
448 } else if (conn->type == LE_LINK) {
449 if (hdev->le_pkts)
450 hdev->le_cnt += conn->sent;
451 else
452 hdev->acl_cnt += conn->sent;
5b7f9909
MH
453 } else {
454 struct hci_conn *acl = conn->link;
455 if (acl) {
456 acl->link = NULL;
76a68ba0 457 hci_conn_drop(acl);
5b7f9909 458 }
1da177e4
LT
459 }
460
2c33c06a 461 hci_chan_list_flush(conn);
73d80deb 462
9740e49d
AE
463 if (conn->amp_mgr)
464 amp_mgr_put(conn->amp_mgr);
465
1da177e4 466 hci_conn_hash_del(hdev, conn);
3c54711c 467 if (hdev->notify)
1da177e4 468 hdev->notify(hdev, HCI_NOTIFY_CONN_DEL);
7d0db0a3 469
1da177e4 470 skb_queue_purge(&conn->data_q);
1da177e4 471
fc225c3f 472 hci_conn_del_sysfs(conn);
2ae9a6be 473
384943ec
MH
474 hci_dev_put(hdev);
475
8d12356f 476 hci_conn_put(conn);
163f4dab 477
1da177e4
LT
478 return 0;
479}
480
481struct hci_dev *hci_get_route(bdaddr_t *dst, bdaddr_t *src)
482{
483 int use_src = bacmp(src, BDADDR_ANY);
8035ded4 484 struct hci_dev *hdev = NULL, *d;
1da177e4 485
6ed93dc6 486 BT_DBG("%pMR -> %pMR", src, dst);
1da177e4 487
f20d09d5 488 read_lock(&hci_dev_list_lock);
1da177e4 489
8035ded4 490 list_for_each_entry(d, &hci_dev_list, list) {
8fc9ced3 491 if (!test_bit(HCI_UP, &d->flags) ||
d300fa9b
AE
492 test_bit(HCI_RAW, &d->flags) ||
493 d->dev_type != HCI_BREDR)
1da177e4
LT
494 continue;
495
8e87d142 496 /* Simple routing:
1da177e4
LT
497 * No source address - find interface with bdaddr != dst
498 * Source address - find interface with bdaddr == src
499 */
500
501 if (use_src) {
502 if (!bacmp(&d->bdaddr, src)) {
503 hdev = d; break;
504 }
505 } else {
506 if (bacmp(&d->bdaddr, dst)) {
507 hdev = d; break;
508 }
509 }
510 }
511
512 if (hdev)
513 hdev = hci_dev_hold(hdev);
514
f20d09d5 515 read_unlock(&hci_dev_list_lock);
1da177e4
LT
516 return hdev;
517}
518EXPORT_SYMBOL(hci_get_route);
519
d04aef4c
VCG
520static struct hci_conn *hci_connect_le(struct hci_dev *hdev, bdaddr_t *dst,
521 u8 dst_type, u8 sec_level, u8 auth_type)
1da177e4 522{
fcd89c09 523 struct hci_conn *le;
1da177e4 524
f1550478
JH
525 if (test_bit(HCI_LE_PERIPHERAL, &hdev->flags))
526 return ERR_PTR(-ENOTSUPP);
527
d04aef4c
VCG
528 le = hci_conn_hash_lookup_ba(hdev, LE_LINK, dst);
529 if (!le) {
530 le = hci_conn_hash_lookup_state(hdev, LE_LINK, BT_CONNECT);
531 if (le)
532 return ERR_PTR(-EBUSY);
1da177e4 533
d04aef4c
VCG
534 le = hci_conn_add(hdev, LE_LINK, dst);
535 if (!le)
536 return ERR_PTR(-ENOMEM);
dfc94dbd 537
d04aef4c
VCG
538 le->dst_type = bdaddr_to_le(dst_type);
539 hci_le_create_connection(le);
540 }
9f0caeb1 541
d04aef4c
VCG
542 le->pending_sec_level = sec_level;
543 le->auth_type = auth_type;
eda42b50 544
d04aef4c 545 hci_conn_hold(le);
fcd89c09 546
d04aef4c
VCG
547 return le;
548}
fcd89c09 549
db474275
VCG
550static struct hci_conn *hci_connect_acl(struct hci_dev *hdev, bdaddr_t *dst,
551 u8 sec_level, u8 auth_type)
1da177e4
LT
552{
553 struct hci_conn *acl;
fcd89c09 554
70f23020
AE
555 acl = hci_conn_hash_lookup_ba(hdev, ACL_LINK, dst);
556 if (!acl) {
557 acl = hci_conn_add(hdev, ACL_LINK, dst);
558 if (!acl)
48c7aba9 559 return ERR_PTR(-ENOMEM);
1da177e4
LT
560 }
561
562 hci_conn_hold(acl);
563
09ab6f4c 564 if (acl->state == BT_OPEN || acl->state == BT_CLOSED) {
765c2a96
JH
565 acl->sec_level = BT_SECURITY_LOW;
566 acl->pending_sec_level = sec_level;
09ab6f4c 567 acl->auth_type = auth_type;
1aef8669 568 hci_acl_create_connection(acl);
09ab6f4c 569 }
1da177e4 570
db474275
VCG
571 return acl;
572}
573
10c62ddc
FD
574struct hci_conn *hci_connect_sco(struct hci_dev *hdev, int type, bdaddr_t *dst,
575 __u16 setting)
db474275
VCG
576{
577 struct hci_conn *acl;
578 struct hci_conn *sco;
579
e660ed6c 580 acl = hci_connect_acl(hdev, dst, BT_SECURITY_LOW, HCI_AT_NO_BONDING);
db474275 581 if (IS_ERR(acl))
5b7f9909 582 return acl;
1da177e4 583
70f23020
AE
584 sco = hci_conn_hash_lookup_ba(hdev, type, dst);
585 if (!sco) {
586 sco = hci_conn_add(hdev, type, dst);
587 if (!sco) {
76a68ba0 588 hci_conn_drop(acl);
48c7aba9 589 return ERR_PTR(-ENOMEM);
1da177e4 590 }
5b7f9909 591 }
1da177e4 592
5b7f9909
MH
593 acl->link = sco;
594 sco->link = acl;
1da177e4 595
5b7f9909 596 hci_conn_hold(sco);
1da177e4 597
10c62ddc
FD
598 sco->setting = setting;
599
5b7f9909 600 if (acl->state == BT_CONNECTED &&
5974e4c4 601 (sco->state == BT_OPEN || sco->state == BT_CLOSED)) {
58a681ef 602 set_bit(HCI_CONN_POWER_SAVE, &acl->flags);
14b12d0b 603 hci_conn_enter_active_mode(acl, BT_POWER_FORCE_ACTIVE_ON);
c390216b 604
51a8efd7 605 if (test_bit(HCI_CONN_MODE_CHANGE_PEND, &acl->flags)) {
e73439d8 606 /* defer SCO setup until mode change completed */
51a8efd7 607 set_bit(HCI_CONN_SCO_SETUP_PEND, &acl->flags);
e73439d8
MH
608 return sco;
609 }
610
611 hci_sco_setup(acl, 0x00);
b6a0dc82 612 }
5b7f9909
MH
613
614 return sco;
1da177e4 615}
1da177e4 616
b7d839bf
VCG
617/* Create SCO, ACL or LE connection. */
618struct hci_conn *hci_connect(struct hci_dev *hdev, int type, bdaddr_t *dst,
619 __u8 dst_type, __u8 sec_level, __u8 auth_type)
620{
6ed93dc6 621 BT_DBG("%s dst %pMR type 0x%x", hdev->name, dst, type);
b7d839bf 622
4cd2d983
VCG
623 switch (type) {
624 case LE_LINK:
b7d839bf 625 return hci_connect_le(hdev, dst, dst_type, sec_level, auth_type);
4cd2d983 626 case ACL_LINK:
b7d839bf 627 return hci_connect_acl(hdev, dst, sec_level, auth_type);
4cd2d983 628 }
b7d839bf 629
4cd2d983 630 return ERR_PTR(-EINVAL);
b7d839bf
VCG
631}
632
e7c29cb1
MH
633/* Check link security requirement */
634int hci_conn_check_link_mode(struct hci_conn *conn)
635{
38b3fef1 636 BT_DBG("hcon %p", conn);
e7c29cb1 637
aa64a8b5 638 if (hci_conn_ssp_enabled(conn) && !(conn->link_mode & HCI_LM_ENCRYPT))
e7c29cb1
MH
639 return 0;
640
641 return 1;
642}
e7c29cb1 643
1da177e4 644/* Authenticate remote device */
0684e5f9 645static int hci_conn_auth(struct hci_conn *conn, __u8 sec_level, __u8 auth_type)
1da177e4 646{
38b3fef1 647 BT_DBG("hcon %p", conn);
1da177e4 648
765c2a96
JH
649 if (conn->pending_sec_level > sec_level)
650 sec_level = conn->pending_sec_level;
651
96a31833 652 if (sec_level > conn->sec_level)
765c2a96 653 conn->pending_sec_level = sec_level;
96a31833 654 else if (conn->link_mode & HCI_LM_AUTH)
1da177e4
LT
655 return 1;
656
65cf686e
JH
657 /* Make sure we preserve an existing MITM requirement*/
658 auth_type |= (conn->auth_type & 0x01);
659
96a31833
MH
660 conn->auth_type = auth_type;
661
51a8efd7 662 if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
1da177e4 663 struct hci_cp_auth_requested cp;
b7d05bad
PH
664
665 /* encrypt must be pending if auth is also pending */
666 set_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
667
aca3192c 668 cp.handle = cpu_to_le16(conn->handle);
40be492f 669 hci_send_cmd(conn->hdev, HCI_OP_AUTH_REQUESTED,
5974e4c4 670 sizeof(cp), &cp);
19f8def0 671 if (conn->key_type != 0xff)
51a8efd7 672 set_bit(HCI_CONN_REAUTH_PEND, &conn->flags);
1da177e4 673 }
8c1b2355 674
1da177e4
LT
675 return 0;
676}
1da177e4 677
13d39315
WR
678/* Encrypt the the link */
679static void hci_conn_encrypt(struct hci_conn *conn)
680{
38b3fef1 681 BT_DBG("hcon %p", conn);
13d39315 682
51a8efd7 683 if (!test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags)) {
13d39315
WR
684 struct hci_cp_set_conn_encrypt cp;
685 cp.handle = cpu_to_le16(conn->handle);
686 cp.encrypt = 0x01;
687 hci_send_cmd(conn->hdev, HCI_OP_SET_CONN_ENCRYPT, sizeof(cp),
5974e4c4 688 &cp);
13d39315
WR
689 }
690}
691
8c1b2355 692/* Enable security */
0684e5f9 693int hci_conn_security(struct hci_conn *conn, __u8 sec_level, __u8 auth_type)
1da177e4 694{
38b3fef1 695 BT_DBG("hcon %p", conn);
1da177e4 696
d8343f12
VCG
697 if (conn->type == LE_LINK)
698 return smp_conn_security(conn, sec_level);
699
13d39315 700 /* For sdp we don't need the link key. */
8c1b2355
MH
701 if (sec_level == BT_SECURITY_SDP)
702 return 1;
703
13d39315
WR
704 /* For non 2.1 devices and low security level we don't need the link
705 key. */
aa64a8b5 706 if (sec_level == BT_SECURITY_LOW && !hci_conn_ssp_enabled(conn))
3fdca1e1 707 return 1;
8c1b2355 708
13d39315
WR
709 /* For other security levels we need the link key. */
710 if (!(conn->link_mode & HCI_LM_AUTH))
711 goto auth;
712
713 /* An authenticated combination key has sufficient security for any
714 security level. */
715 if (conn->key_type == HCI_LK_AUTH_COMBINATION)
716 goto encrypt;
717
718 /* An unauthenticated combination key has sufficient security for
719 security level 1 and 2. */
720 if (conn->key_type == HCI_LK_UNAUTH_COMBINATION &&
5974e4c4 721 (sec_level == BT_SECURITY_MEDIUM || sec_level == BT_SECURITY_LOW))
13d39315
WR
722 goto encrypt;
723
724 /* A combination key has always sufficient security for the security
725 levels 1 or 2. High security level requires the combination key
726 is generated using maximum PIN code length (16).
727 For pre 2.1 units. */
728 if (conn->key_type == HCI_LK_COMBINATION &&
5974e4c4 729 (sec_level != BT_SECURITY_HIGH || conn->pin_length == 16))
13d39315
WR
730 goto encrypt;
731
732auth:
51a8efd7 733 if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags))
1da177e4
LT
734 return 0;
735
6fdf658c
LAD
736 if (!hci_conn_auth(conn, sec_level, auth_type))
737 return 0;
13d39315
WR
738
739encrypt:
740 if (conn->link_mode & HCI_LM_ENCRYPT)
741 return 1;
8c1b2355 742
13d39315 743 hci_conn_encrypt(conn);
1da177e4
LT
744 return 0;
745}
8c1b2355 746EXPORT_SYMBOL(hci_conn_security);
1da177e4 747
b3b1b061
WR
748/* Check secure link requirement */
749int hci_conn_check_secure(struct hci_conn *conn, __u8 sec_level)
750{
38b3fef1 751 BT_DBG("hcon %p", conn);
b3b1b061
WR
752
753 if (sec_level != BT_SECURITY_HIGH)
754 return 1; /* Accept if non-secure is required */
755
ef4177e2 756 if (conn->sec_level == BT_SECURITY_HIGH)
b3b1b061
WR
757 return 1;
758
759 return 0; /* Reject not secure link */
760}
761EXPORT_SYMBOL(hci_conn_check_secure);
762
1da177e4
LT
763/* Change link key */
764int hci_conn_change_link_key(struct hci_conn *conn)
765{
38b3fef1 766 BT_DBG("hcon %p", conn);
1da177e4 767
51a8efd7 768 if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
1da177e4 769 struct hci_cp_change_conn_link_key cp;
aca3192c 770 cp.handle = cpu_to_le16(conn->handle);
40be492f 771 hci_send_cmd(conn->hdev, HCI_OP_CHANGE_CONN_LINK_KEY,
5974e4c4 772 sizeof(cp), &cp);
1da177e4 773 }
8c1b2355 774
1da177e4
LT
775 return 0;
776}
1da177e4
LT
777
778/* Switch role */
8c1b2355 779int hci_conn_switch_role(struct hci_conn *conn, __u8 role)
1da177e4 780{
38b3fef1 781 BT_DBG("hcon %p", conn);
1da177e4
LT
782
783 if (!role && conn->link_mode & HCI_LM_MASTER)
784 return 1;
785
51a8efd7 786 if (!test_and_set_bit(HCI_CONN_RSWITCH_PEND, &conn->flags)) {
1da177e4
LT
787 struct hci_cp_switch_role cp;
788 bacpy(&cp.bdaddr, &conn->dst);
789 cp.role = role;
a9de9248 790 hci_send_cmd(conn->hdev, HCI_OP_SWITCH_ROLE, sizeof(cp), &cp);
1da177e4 791 }
8c1b2355 792
1da177e4
LT
793 return 0;
794}
795EXPORT_SYMBOL(hci_conn_switch_role);
796
04837f64 797/* Enter active mode */
14b12d0b 798void hci_conn_enter_active_mode(struct hci_conn *conn, __u8 force_active)
04837f64
MH
799{
800 struct hci_dev *hdev = conn->hdev;
801
38b3fef1 802 BT_DBG("hcon %p mode %d", conn, conn->mode);
04837f64
MH
803
804 if (test_bit(HCI_RAW, &hdev->flags))
805 return;
806
14b12d0b
JG
807 if (conn->mode != HCI_CM_SNIFF)
808 goto timer;
809
58a681ef 810 if (!test_bit(HCI_CONN_POWER_SAVE, &conn->flags) && !force_active)
04837f64
MH
811 goto timer;
812
51a8efd7 813 if (!test_and_set_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags)) {
04837f64 814 struct hci_cp_exit_sniff_mode cp;
aca3192c 815 cp.handle = cpu_to_le16(conn->handle);
a9de9248 816 hci_send_cmd(hdev, HCI_OP_EXIT_SNIFF_MODE, sizeof(cp), &cp);
04837f64
MH
817 }
818
819timer:
820 if (hdev->idle_timeout > 0)
821 mod_timer(&conn->idle_timer,
5974e4c4 822 jiffies + msecs_to_jiffies(hdev->idle_timeout));
04837f64
MH
823}
824
1da177e4
LT
825/* Drop all connection on the device */
826void hci_conn_hash_flush(struct hci_dev *hdev)
827{
828 struct hci_conn_hash *h = &hdev->conn_hash;
3c4e0df0 829 struct hci_conn *c, *n;
1da177e4
LT
830
831 BT_DBG("hdev %s", hdev->name);
832
3c4e0df0 833 list_for_each_entry_safe(c, n, &h->list, list) {
1da177e4
LT
834 c->state = BT_CLOSED;
835
9f5a0d7b 836 hci_proto_disconn_cfm(c, HCI_ERROR_LOCAL_HOST_TERM);
1da177e4
LT
837 hci_conn_del(c);
838 }
839}
840
a9de9248
MH
841/* Check pending connect attempts */
842void hci_conn_check_pending(struct hci_dev *hdev)
843{
844 struct hci_conn *conn;
845
846 BT_DBG("hdev %s", hdev->name);
847
848 hci_dev_lock(hdev);
849
850 conn = hci_conn_hash_lookup_state(hdev, ACL_LINK, BT_CONNECT2);
851 if (conn)
1aef8669 852 hci_acl_create_connection(conn);
a9de9248
MH
853
854 hci_dev_unlock(hdev);
855}
856
1da177e4
LT
857int hci_get_conn_list(void __user *arg)
858{
fc5fef61 859 struct hci_conn *c;
1da177e4
LT
860 struct hci_conn_list_req req, *cl;
861 struct hci_conn_info *ci;
862 struct hci_dev *hdev;
1da177e4
LT
863 int n = 0, size, err;
864
865 if (copy_from_user(&req, arg, sizeof(req)))
866 return -EFAULT;
867
868 if (!req.conn_num || req.conn_num > (PAGE_SIZE * 2) / sizeof(*ci))
869 return -EINVAL;
870
871 size = sizeof(req) + req.conn_num * sizeof(*ci);
872
70f23020
AE
873 cl = kmalloc(size, GFP_KERNEL);
874 if (!cl)
1da177e4
LT
875 return -ENOMEM;
876
70f23020
AE
877 hdev = hci_dev_get(req.dev_id);
878 if (!hdev) {
1da177e4
LT
879 kfree(cl);
880 return -ENODEV;
881 }
882
883 ci = cl->conn_info;
884
09fd0de5 885 hci_dev_lock(hdev);
8035ded4 886 list_for_each_entry(c, &hdev->conn_hash.list, list) {
1da177e4
LT
887 bacpy(&(ci + n)->bdaddr, &c->dst);
888 (ci + n)->handle = c->handle;
889 (ci + n)->type = c->type;
890 (ci + n)->out = c->out;
891 (ci + n)->state = c->state;
892 (ci + n)->link_mode = c->link_mode;
893 if (++n >= req.conn_num)
894 break;
895 }
09fd0de5 896 hci_dev_unlock(hdev);
1da177e4
LT
897
898 cl->dev_id = hdev->id;
899 cl->conn_num = n;
900 size = sizeof(req) + n * sizeof(*ci);
901
902 hci_dev_put(hdev);
903
904 err = copy_to_user(arg, cl, size);
905 kfree(cl);
906
907 return err ? -EFAULT : 0;
908}
909
910int hci_get_conn_info(struct hci_dev *hdev, void __user *arg)
911{
912 struct hci_conn_info_req req;
913 struct hci_conn_info ci;
914 struct hci_conn *conn;
915 char __user *ptr = arg + sizeof(req);
916
917 if (copy_from_user(&req, arg, sizeof(req)))
918 return -EFAULT;
919
09fd0de5 920 hci_dev_lock(hdev);
1da177e4
LT
921 conn = hci_conn_hash_lookup_ba(hdev, req.type, &req.bdaddr);
922 if (conn) {
923 bacpy(&ci.bdaddr, &conn->dst);
924 ci.handle = conn->handle;
925 ci.type = conn->type;
926 ci.out = conn->out;
927 ci.state = conn->state;
928 ci.link_mode = conn->link_mode;
929 }
09fd0de5 930 hci_dev_unlock(hdev);
1da177e4
LT
931
932 if (!conn)
933 return -ENOENT;
934
935 return copy_to_user(ptr, &ci, sizeof(ci)) ? -EFAULT : 0;
936}
40be492f
MH
937
938int hci_get_auth_info(struct hci_dev *hdev, void __user *arg)
939{
940 struct hci_auth_info_req req;
941 struct hci_conn *conn;
942
943 if (copy_from_user(&req, arg, sizeof(req)))
944 return -EFAULT;
945
09fd0de5 946 hci_dev_lock(hdev);
40be492f
MH
947 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &req.bdaddr);
948 if (conn)
949 req.type = conn->auth_type;
09fd0de5 950 hci_dev_unlock(hdev);
40be492f
MH
951
952 if (!conn)
953 return -ENOENT;
954
955 return copy_to_user(arg, &req, sizeof(req)) ? -EFAULT : 0;
956}
73d80deb
LAD
957
958struct hci_chan *hci_chan_create(struct hci_conn *conn)
959{
960 struct hci_dev *hdev = conn->hdev;
961 struct hci_chan *chan;
962
38b3fef1 963 BT_DBG("%s hcon %p", hdev->name, conn);
73d80deb 964
75d7735c 965 chan = kzalloc(sizeof(struct hci_chan), GFP_KERNEL);
73d80deb
LAD
966 if (!chan)
967 return NULL;
968
969 chan->conn = conn;
970 skb_queue_head_init(&chan->data_q);
168df8e5 971 chan->state = BT_CONNECTED;
73d80deb 972
8192edef 973 list_add_rcu(&chan->list, &conn->chan_list);
73d80deb
LAD
974
975 return chan;
976}
977
9472007c 978void hci_chan_del(struct hci_chan *chan)
73d80deb
LAD
979{
980 struct hci_conn *conn = chan->conn;
981 struct hci_dev *hdev = conn->hdev;
982
38b3fef1 983 BT_DBG("%s hcon %p chan %p", hdev->name, conn, chan);
73d80deb 984
8192edef
GP
985 list_del_rcu(&chan->list);
986
987 synchronize_rcu();
73d80deb 988
76a68ba0 989 hci_conn_drop(conn);
e9b02748 990
73d80deb
LAD
991 skb_queue_purge(&chan->data_q);
992 kfree(chan);
73d80deb
LAD
993}
994
2c33c06a 995void hci_chan_list_flush(struct hci_conn *conn)
73d80deb 996{
2a5a5ec6 997 struct hci_chan *chan, *n;
73d80deb 998
38b3fef1 999 BT_DBG("hcon %p", conn);
73d80deb 1000
2a5a5ec6 1001 list_for_each_entry_safe(chan, n, &conn->chan_list, list)
73d80deb
LAD
1002 hci_chan_del(chan);
1003}
42c4e53e
AE
1004
1005static struct hci_chan *__hci_chan_lookup_handle(struct hci_conn *hcon,
1006 __u16 handle)
1007{
1008 struct hci_chan *hchan;
1009
1010 list_for_each_entry(hchan, &hcon->chan_list, list) {
1011 if (hchan->handle == handle)
1012 return hchan;
1013 }
1014
1015 return NULL;
1016}
1017
1018struct hci_chan *hci_chan_lookup_handle(struct hci_dev *hdev, __u16 handle)
1019{
1020 struct hci_conn_hash *h = &hdev->conn_hash;
1021 struct hci_conn *hcon;
1022 struct hci_chan *hchan = NULL;
1023
1024 rcu_read_lock();
1025
1026 list_for_each_entry_rcu(hcon, &h->list, list) {
1027 hchan = __hci_chan_lookup_handle(hcon, handle);
1028 if (hchan)
1029 break;
1030 }
1031
1032 rcu_read_unlock();
1033
1034 return hchan;
1035}