Bluetooth: Reject SCO when hci connection timeouts
[GitHub/mt8127/android_kernel_alcatel_ttab.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);
a8746417 188 cp.pkt_type = cpu_to_le16(conn->pkt_type);
b6a0dc82 189
82781e63
AE
190 cp.tx_bandwidth = __constant_cpu_to_le32(0x00001f40);
191 cp.rx_bandwidth = __constant_cpu_to_le32(0x00001f40);
192 cp.max_latency = __constant_cpu_to_le16(0xffff);
b6a0dc82
MH
193 cp.voice_setting = cpu_to_le16(hdev->voice_setting);
194 cp.retrans_effort = 0xff;
195
196 hci_send_cmd(hdev, HCI_OP_SETUP_SYNC_CONN, sizeof(cp), &cp);
197}
198
2ce603eb 199void hci_le_conn_update(struct hci_conn *conn, u16 min, u16 max,
5974e4c4 200 u16 latency, u16 to_multiplier)
2ce603eb
CT
201{
202 struct hci_cp_le_conn_update cp;
203 struct hci_dev *hdev = conn->hdev;
204
205 memset(&cp, 0, sizeof(cp));
206
207 cp.handle = cpu_to_le16(conn->handle);
208 cp.conn_interval_min = cpu_to_le16(min);
209 cp.conn_interval_max = cpu_to_le16(max);
210 cp.conn_latency = cpu_to_le16(latency);
211 cp.supervision_timeout = cpu_to_le16(to_multiplier);
82781e63
AE
212 cp.min_ce_len = __constant_cpu_to_le16(0x0001);
213 cp.max_ce_len = __constant_cpu_to_le16(0x0001);
2ce603eb
CT
214
215 hci_send_cmd(hdev, HCI_OP_LE_CONN_UPDATE, sizeof(cp), &cp);
216}
2ce603eb 217
a7a595f6 218void hci_le_start_enc(struct hci_conn *conn, __le16 ediv, __u8 rand[8],
5974e4c4 219 __u8 ltk[16])
a7a595f6
VCG
220{
221 struct hci_dev *hdev = conn->hdev;
222 struct hci_cp_le_start_enc cp;
223
38b3fef1 224 BT_DBG("hcon %p", conn);
a7a595f6
VCG
225
226 memset(&cp, 0, sizeof(cp));
227
228 cp.handle = cpu_to_le16(conn->handle);
229 memcpy(cp.ltk, ltk, sizeof(cp.ltk));
230 cp.ediv = ediv;
51beabdf 231 memcpy(cp.rand, rand, sizeof(cp.rand));
a7a595f6
VCG
232
233 hci_send_cmd(hdev, HCI_OP_LE_START_ENC, sizeof(cp), &cp);
234}
a7a595f6 235
e73439d8
MH
236/* Device _must_ be locked */
237void hci_sco_setup(struct hci_conn *conn, __u8 status)
238{
239 struct hci_conn *sco = conn->link;
240
e73439d8
MH
241 if (!sco)
242 return;
243
38b3fef1
AE
244 BT_DBG("hcon %p", conn);
245
e73439d8
MH
246 if (!status) {
247 if (lmp_esco_capable(conn->hdev))
248 hci_setup_sync(sco, conn->handle);
249 else
250 hci_add_sco(sco, conn->handle);
251 } else {
252 hci_proto_connect_cfm(sco, status);
253 hci_conn_del(sco);
254 }
255}
256
53502d69
AE
257static void hci_conn_disconnect(struct hci_conn *conn)
258{
259 __u8 reason = hci_proto_disconn_ind(conn);
260
261 switch (conn->type) {
53502d69
AE
262 case AMP_LINK:
263 hci_amp_disconn(conn, reason);
264 break;
4c02e2d4 265 default:
bed71748 266 hci_disconnect(conn, reason);
4c02e2d4 267 break;
53502d69
AE
268 }
269}
270
19c40e3b 271static void hci_conn_timeout(struct work_struct *work)
1da177e4 272{
19c40e3b 273 struct hci_conn *conn = container_of(work, struct hci_conn,
5974e4c4 274 disc_work.work);
1da177e4 275
38b3fef1 276 BT_DBG("hcon %p state %s", conn, state_to_string(conn->state));
1da177e4
LT
277
278 if (atomic_read(&conn->refcnt))
279 return;
280
6ac59344
MH
281 switch (conn->state) {
282 case BT_CONNECT:
769be974 283 case BT_CONNECT2:
fcd89c09
VT
284 if (conn->out) {
285 if (conn->type == ACL_LINK)
1aef8669 286 hci_acl_create_connection_cancel(conn);
fcd89c09 287 else if (conn->type == LE_LINK)
1aef8669 288 hci_le_create_connection_cancel(conn);
93796fa6
CT
289 } else if (conn->type == SCO_LINK || conn->type == ESCO_LINK) {
290 hci_reject_sco(conn);
fcd89c09 291 }
6ac59344 292 break;
769be974 293 case BT_CONFIG:
8e87d142 294 case BT_CONNECTED:
53502d69 295 hci_conn_disconnect(conn);
6ac59344
MH
296 break;
297 default:
1da177e4 298 conn->state = BT_CLOSED;
6ac59344
MH
299 break;
300 }
1da177e4
LT
301}
302
416dc94b
GP
303/* Enter sniff mode */
304static void hci_conn_enter_sniff_mode(struct hci_conn *conn)
305{
306 struct hci_dev *hdev = conn->hdev;
307
38b3fef1 308 BT_DBG("hcon %p mode %d", conn, conn->mode);
416dc94b
GP
309
310 if (test_bit(HCI_RAW, &hdev->flags))
311 return;
312
313 if (!lmp_sniff_capable(hdev) || !lmp_sniff_capable(conn))
314 return;
315
316 if (conn->mode != HCI_CM_ACTIVE || !(conn->link_policy & HCI_LP_SNIFF))
317 return;
318
319 if (lmp_sniffsubr_capable(hdev) && lmp_sniffsubr_capable(conn)) {
320 struct hci_cp_sniff_subrate cp;
321 cp.handle = cpu_to_le16(conn->handle);
82781e63
AE
322 cp.max_latency = __constant_cpu_to_le16(0);
323 cp.min_remote_timeout = __constant_cpu_to_le16(0);
324 cp.min_local_timeout = __constant_cpu_to_le16(0);
416dc94b
GP
325 hci_send_cmd(hdev, HCI_OP_SNIFF_SUBRATE, sizeof(cp), &cp);
326 }
327
51a8efd7 328 if (!test_and_set_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags)) {
416dc94b
GP
329 struct hci_cp_sniff_mode cp;
330 cp.handle = cpu_to_le16(conn->handle);
331 cp.max_interval = cpu_to_le16(hdev->sniff_max_interval);
332 cp.min_interval = cpu_to_le16(hdev->sniff_min_interval);
82781e63
AE
333 cp.attempt = __constant_cpu_to_le16(4);
334 cp.timeout = __constant_cpu_to_le16(1);
416dc94b
GP
335 hci_send_cmd(hdev, HCI_OP_SNIFF_MODE, sizeof(cp), &cp);
336 }
337}
338
04837f64 339static void hci_conn_idle(unsigned long arg)
1da177e4 340{
04837f64
MH
341 struct hci_conn *conn = (void *) arg;
342
38b3fef1 343 BT_DBG("hcon %p mode %d", conn, conn->mode);
04837f64
MH
344
345 hci_conn_enter_sniff_mode(conn);
1da177e4
LT
346}
347
9f61656a
JH
348static void hci_conn_auto_accept(unsigned long arg)
349{
350 struct hci_conn *conn = (void *) arg;
351 struct hci_dev *hdev = conn->hdev;
352
9f61656a 353 hci_send_cmd(hdev, HCI_OP_USER_CONFIRM_REPLY, sizeof(conn->dst),
5974e4c4 354 &conn->dst);
9f61656a
JH
355}
356
1da177e4
LT
357struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst)
358{
359 struct hci_conn *conn;
360
6ed93dc6 361 BT_DBG("%s dst %pMR", hdev->name, dst);
1da177e4 362
cb601d7e 363 conn = kzalloc(sizeof(struct hci_conn), GFP_KERNEL);
04837f64 364 if (!conn)
1da177e4 365 return NULL;
1da177e4
LT
366
367 bacpy(&conn->dst, dst);
a8746417
MH
368 conn->hdev = hdev;
369 conn->type = type;
370 conn->mode = HCI_CM_ACTIVE;
371 conn->state = BT_OPEN;
93f19c9f 372 conn->auth_type = HCI_AT_GENERAL_BONDING;
17fa4b9d 373 conn->io_capability = hdev->io_capability;
a9583556 374 conn->remote_auth = 0xff;
13d39315 375 conn->key_type = 0xff;
1da177e4 376
58a681ef 377 set_bit(HCI_CONN_POWER_SAVE, &conn->flags);
052b30b0 378 conn->disc_timeout = HCI_DISCONN_TIMEOUT;
04837f64 379
a8746417
MH
380 switch (type) {
381 case ACL_LINK:
382 conn->pkt_type = hdev->pkt_type & ACL_PTYPE_MASK;
383 break;
384 case SCO_LINK:
385 if (lmp_esco_capable(hdev))
efc7688b
MH
386 conn->pkt_type = (hdev->esco_type & SCO_ESCO_MASK) |
387 (hdev->esco_type & EDR_ESCO_MASK);
a8746417
MH
388 else
389 conn->pkt_type = hdev->pkt_type & SCO_PTYPE_MASK;
390 break;
391 case ESCO_LINK:
efc7688b 392 conn->pkt_type = hdev->esco_type & ~EDR_ESCO_MASK;
a8746417
MH
393 break;
394 }
395
1da177e4 396 skb_queue_head_init(&conn->data_q);
04837f64 397
70c1f20b 398 INIT_LIST_HEAD(&conn->chan_list);
73d80deb 399
19c40e3b 400 INIT_DELAYED_WORK(&conn->disc_work, hci_conn_timeout);
b24b8a24 401 setup_timer(&conn->idle_timer, hci_conn_idle, (unsigned long)conn);
9f61656a 402 setup_timer(&conn->auto_accept_timer, hci_conn_auto_accept,
5974e4c4 403 (unsigned long) conn);
1da177e4
LT
404
405 atomic_set(&conn->refcnt, 0);
406
407 hci_dev_hold(hdev);
408
1da177e4 409 hci_conn_hash_add(hdev, conn);
3c54711c 410 if (hdev->notify)
1da177e4
LT
411 hdev->notify(hdev, HCI_NOTIFY_CONN_ADD);
412
9eba32b8
MH
413 atomic_set(&conn->devref, 0);
414
a67e899c
MH
415 hci_conn_init_sysfs(conn);
416
1da177e4
LT
417 return conn;
418}
419
420int hci_conn_del(struct hci_conn *conn)
421{
422 struct hci_dev *hdev = conn->hdev;
423
38b3fef1 424 BT_DBG("%s hcon %p handle %d", hdev->name, conn, conn->handle);
1da177e4 425
04837f64
MH
426 del_timer(&conn->idle_timer);
427
19c40e3b 428 cancel_delayed_work_sync(&conn->disc_work);
1da177e4 429
9f61656a
JH
430 del_timer(&conn->auto_accept_timer);
431
5b7f9909 432 if (conn->type == ACL_LINK) {
1da177e4
LT
433 struct hci_conn *sco = conn->link;
434 if (sco)
435 sco->link = NULL;
436
437 /* Unacked frames */
438 hdev->acl_cnt += conn->sent;
6ed58ec5
VT
439 } else if (conn->type == LE_LINK) {
440 if (hdev->le_pkts)
441 hdev->le_cnt += conn->sent;
442 else
443 hdev->acl_cnt += conn->sent;
5b7f9909
MH
444 } else {
445 struct hci_conn *acl = conn->link;
446 if (acl) {
447 acl->link = NULL;
76a68ba0 448 hci_conn_drop(acl);
5b7f9909 449 }
1da177e4
LT
450 }
451
2c33c06a 452 hci_chan_list_flush(conn);
73d80deb 453
9740e49d
AE
454 if (conn->amp_mgr)
455 amp_mgr_put(conn->amp_mgr);
456
1da177e4 457 hci_conn_hash_del(hdev, conn);
3c54711c 458 if (hdev->notify)
1da177e4 459 hdev->notify(hdev, HCI_NOTIFY_CONN_DEL);
7d0db0a3 460
1da177e4 461 skb_queue_purge(&conn->data_q);
1da177e4 462
9eba32b8 463 hci_conn_put_device(conn);
2ae9a6be 464
384943ec
MH
465 hci_dev_put(hdev);
466
163f4dab
TT
467 if (conn->handle == 0)
468 kfree(conn);
469
1da177e4
LT
470 return 0;
471}
472
473struct hci_dev *hci_get_route(bdaddr_t *dst, bdaddr_t *src)
474{
475 int use_src = bacmp(src, BDADDR_ANY);
8035ded4 476 struct hci_dev *hdev = NULL, *d;
1da177e4 477
6ed93dc6 478 BT_DBG("%pMR -> %pMR", src, dst);
1da177e4 479
f20d09d5 480 read_lock(&hci_dev_list_lock);
1da177e4 481
8035ded4 482 list_for_each_entry(d, &hci_dev_list, list) {
8fc9ced3 483 if (!test_bit(HCI_UP, &d->flags) ||
d300fa9b
AE
484 test_bit(HCI_RAW, &d->flags) ||
485 d->dev_type != HCI_BREDR)
1da177e4
LT
486 continue;
487
8e87d142 488 /* Simple routing:
1da177e4
LT
489 * No source address - find interface with bdaddr != dst
490 * Source address - find interface with bdaddr == src
491 */
492
493 if (use_src) {
494 if (!bacmp(&d->bdaddr, src)) {
495 hdev = d; break;
496 }
497 } else {
498 if (bacmp(&d->bdaddr, dst)) {
499 hdev = d; break;
500 }
501 }
502 }
503
504 if (hdev)
505 hdev = hci_dev_hold(hdev);
506
f20d09d5 507 read_unlock(&hci_dev_list_lock);
1da177e4
LT
508 return hdev;
509}
510EXPORT_SYMBOL(hci_get_route);
511
d04aef4c
VCG
512static struct hci_conn *hci_connect_le(struct hci_dev *hdev, bdaddr_t *dst,
513 u8 dst_type, u8 sec_level, u8 auth_type)
1da177e4 514{
fcd89c09 515 struct hci_conn *le;
1da177e4 516
f1550478
JH
517 if (test_bit(HCI_LE_PERIPHERAL, &hdev->flags))
518 return ERR_PTR(-ENOTSUPP);
519
d04aef4c
VCG
520 le = hci_conn_hash_lookup_ba(hdev, LE_LINK, dst);
521 if (!le) {
522 le = hci_conn_hash_lookup_state(hdev, LE_LINK, BT_CONNECT);
523 if (le)
524 return ERR_PTR(-EBUSY);
1da177e4 525
d04aef4c
VCG
526 le = hci_conn_add(hdev, LE_LINK, dst);
527 if (!le)
528 return ERR_PTR(-ENOMEM);
dfc94dbd 529
d04aef4c
VCG
530 le->dst_type = bdaddr_to_le(dst_type);
531 hci_le_create_connection(le);
532 }
9f0caeb1 533
d04aef4c
VCG
534 le->pending_sec_level = sec_level;
535 le->auth_type = auth_type;
eda42b50 536
d04aef4c 537 hci_conn_hold(le);
fcd89c09 538
d04aef4c
VCG
539 return le;
540}
fcd89c09 541
db474275
VCG
542static struct hci_conn *hci_connect_acl(struct hci_dev *hdev, bdaddr_t *dst,
543 u8 sec_level, u8 auth_type)
1da177e4
LT
544{
545 struct hci_conn *acl;
fcd89c09 546
70f23020
AE
547 acl = hci_conn_hash_lookup_ba(hdev, ACL_LINK, dst);
548 if (!acl) {
549 acl = hci_conn_add(hdev, ACL_LINK, dst);
550 if (!acl)
48c7aba9 551 return ERR_PTR(-ENOMEM);
1da177e4
LT
552 }
553
554 hci_conn_hold(acl);
555
09ab6f4c 556 if (acl->state == BT_OPEN || acl->state == BT_CLOSED) {
765c2a96
JH
557 acl->sec_level = BT_SECURITY_LOW;
558 acl->pending_sec_level = sec_level;
09ab6f4c 559 acl->auth_type = auth_type;
1aef8669 560 hci_acl_create_connection(acl);
09ab6f4c 561 }
1da177e4 562
db474275
VCG
563 return acl;
564}
565
f91c8468
VCG
566static struct hci_conn *hci_connect_sco(struct hci_dev *hdev, int type,
567 bdaddr_t *dst, u8 sec_level, u8 auth_type)
db474275
VCG
568{
569 struct hci_conn *acl;
570 struct hci_conn *sco;
571
db474275
VCG
572 acl = hci_connect_acl(hdev, dst, sec_level, auth_type);
573 if (IS_ERR(acl))
5b7f9909 574 return acl;
1da177e4 575
70f23020
AE
576 sco = hci_conn_hash_lookup_ba(hdev, type, dst);
577 if (!sco) {
578 sco = hci_conn_add(hdev, type, dst);
579 if (!sco) {
76a68ba0 580 hci_conn_drop(acl);
48c7aba9 581 return ERR_PTR(-ENOMEM);
1da177e4 582 }
5b7f9909 583 }
1da177e4 584
5b7f9909
MH
585 acl->link = sco;
586 sco->link = acl;
1da177e4 587
5b7f9909 588 hci_conn_hold(sco);
1da177e4 589
5b7f9909 590 if (acl->state == BT_CONNECTED &&
5974e4c4 591 (sco->state == BT_OPEN || sco->state == BT_CLOSED)) {
58a681ef 592 set_bit(HCI_CONN_POWER_SAVE, &acl->flags);
14b12d0b 593 hci_conn_enter_active_mode(acl, BT_POWER_FORCE_ACTIVE_ON);
c390216b 594
51a8efd7 595 if (test_bit(HCI_CONN_MODE_CHANGE_PEND, &acl->flags)) {
e73439d8 596 /* defer SCO setup until mode change completed */
51a8efd7 597 set_bit(HCI_CONN_SCO_SETUP_PEND, &acl->flags);
e73439d8
MH
598 return sco;
599 }
600
601 hci_sco_setup(acl, 0x00);
b6a0dc82 602 }
5b7f9909
MH
603
604 return sco;
1da177e4 605}
1da177e4 606
b7d839bf
VCG
607/* Create SCO, ACL or LE connection. */
608struct hci_conn *hci_connect(struct hci_dev *hdev, int type, bdaddr_t *dst,
609 __u8 dst_type, __u8 sec_level, __u8 auth_type)
610{
6ed93dc6 611 BT_DBG("%s dst %pMR type 0x%x", hdev->name, dst, type);
b7d839bf 612
4cd2d983
VCG
613 switch (type) {
614 case LE_LINK:
b7d839bf 615 return hci_connect_le(hdev, dst, dst_type, sec_level, auth_type);
4cd2d983 616 case ACL_LINK:
b7d839bf 617 return hci_connect_acl(hdev, dst, sec_level, auth_type);
4cd2d983 618 case SCO_LINK:
f91c8468
VCG
619 case ESCO_LINK:
620 return hci_connect_sco(hdev, type, dst, sec_level, auth_type);
4cd2d983 621 }
b7d839bf 622
4cd2d983 623 return ERR_PTR(-EINVAL);
b7d839bf
VCG
624}
625
e7c29cb1
MH
626/* Check link security requirement */
627int hci_conn_check_link_mode(struct hci_conn *conn)
628{
38b3fef1 629 BT_DBG("hcon %p", conn);
e7c29cb1 630
aa64a8b5 631 if (hci_conn_ssp_enabled(conn) && !(conn->link_mode & HCI_LM_ENCRYPT))
e7c29cb1
MH
632 return 0;
633
634 return 1;
635}
e7c29cb1 636
1da177e4 637/* Authenticate remote device */
0684e5f9 638static int hci_conn_auth(struct hci_conn *conn, __u8 sec_level, __u8 auth_type)
1da177e4 639{
38b3fef1 640 BT_DBG("hcon %p", conn);
1da177e4 641
765c2a96
JH
642 if (conn->pending_sec_level > sec_level)
643 sec_level = conn->pending_sec_level;
644
96a31833 645 if (sec_level > conn->sec_level)
765c2a96 646 conn->pending_sec_level = sec_level;
96a31833 647 else if (conn->link_mode & HCI_LM_AUTH)
1da177e4
LT
648 return 1;
649
65cf686e
JH
650 /* Make sure we preserve an existing MITM requirement*/
651 auth_type |= (conn->auth_type & 0x01);
652
96a31833
MH
653 conn->auth_type = auth_type;
654
51a8efd7 655 if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
1da177e4 656 struct hci_cp_auth_requested cp;
b7d05bad
PH
657
658 /* encrypt must be pending if auth is also pending */
659 set_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
660
aca3192c 661 cp.handle = cpu_to_le16(conn->handle);
40be492f 662 hci_send_cmd(conn->hdev, HCI_OP_AUTH_REQUESTED,
5974e4c4 663 sizeof(cp), &cp);
19f8def0 664 if (conn->key_type != 0xff)
51a8efd7 665 set_bit(HCI_CONN_REAUTH_PEND, &conn->flags);
1da177e4 666 }
8c1b2355 667
1da177e4
LT
668 return 0;
669}
1da177e4 670
13d39315
WR
671/* Encrypt the the link */
672static void hci_conn_encrypt(struct hci_conn *conn)
673{
38b3fef1 674 BT_DBG("hcon %p", conn);
13d39315 675
51a8efd7 676 if (!test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags)) {
13d39315
WR
677 struct hci_cp_set_conn_encrypt cp;
678 cp.handle = cpu_to_le16(conn->handle);
679 cp.encrypt = 0x01;
680 hci_send_cmd(conn->hdev, HCI_OP_SET_CONN_ENCRYPT, sizeof(cp),
5974e4c4 681 &cp);
13d39315
WR
682 }
683}
684
8c1b2355 685/* Enable security */
0684e5f9 686int hci_conn_security(struct hci_conn *conn, __u8 sec_level, __u8 auth_type)
1da177e4 687{
38b3fef1 688 BT_DBG("hcon %p", conn);
1da177e4 689
d8343f12
VCG
690 if (conn->type == LE_LINK)
691 return smp_conn_security(conn, sec_level);
692
13d39315 693 /* For sdp we don't need the link key. */
8c1b2355
MH
694 if (sec_level == BT_SECURITY_SDP)
695 return 1;
696
13d39315
WR
697 /* For non 2.1 devices and low security level we don't need the link
698 key. */
aa64a8b5 699 if (sec_level == BT_SECURITY_LOW && !hci_conn_ssp_enabled(conn))
3fdca1e1 700 return 1;
8c1b2355 701
13d39315
WR
702 /* For other security levels we need the link key. */
703 if (!(conn->link_mode & HCI_LM_AUTH))
704 goto auth;
705
706 /* An authenticated combination key has sufficient security for any
707 security level. */
708 if (conn->key_type == HCI_LK_AUTH_COMBINATION)
709 goto encrypt;
710
711 /* An unauthenticated combination key has sufficient security for
712 security level 1 and 2. */
713 if (conn->key_type == HCI_LK_UNAUTH_COMBINATION &&
5974e4c4 714 (sec_level == BT_SECURITY_MEDIUM || sec_level == BT_SECURITY_LOW))
13d39315
WR
715 goto encrypt;
716
717 /* A combination key has always sufficient security for the security
718 levels 1 or 2. High security level requires the combination key
719 is generated using maximum PIN code length (16).
720 For pre 2.1 units. */
721 if (conn->key_type == HCI_LK_COMBINATION &&
5974e4c4 722 (sec_level != BT_SECURITY_HIGH || conn->pin_length == 16))
13d39315
WR
723 goto encrypt;
724
725auth:
51a8efd7 726 if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags))
1da177e4
LT
727 return 0;
728
6fdf658c
LAD
729 if (!hci_conn_auth(conn, sec_level, auth_type))
730 return 0;
13d39315
WR
731
732encrypt:
733 if (conn->link_mode & HCI_LM_ENCRYPT)
734 return 1;
8c1b2355 735
13d39315 736 hci_conn_encrypt(conn);
1da177e4
LT
737 return 0;
738}
8c1b2355 739EXPORT_SYMBOL(hci_conn_security);
1da177e4 740
b3b1b061
WR
741/* Check secure link requirement */
742int hci_conn_check_secure(struct hci_conn *conn, __u8 sec_level)
743{
38b3fef1 744 BT_DBG("hcon %p", conn);
b3b1b061
WR
745
746 if (sec_level != BT_SECURITY_HIGH)
747 return 1; /* Accept if non-secure is required */
748
ef4177e2 749 if (conn->sec_level == BT_SECURITY_HIGH)
b3b1b061
WR
750 return 1;
751
752 return 0; /* Reject not secure link */
753}
754EXPORT_SYMBOL(hci_conn_check_secure);
755
1da177e4
LT
756/* Change link key */
757int hci_conn_change_link_key(struct hci_conn *conn)
758{
38b3fef1 759 BT_DBG("hcon %p", conn);
1da177e4 760
51a8efd7 761 if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
1da177e4 762 struct hci_cp_change_conn_link_key cp;
aca3192c 763 cp.handle = cpu_to_le16(conn->handle);
40be492f 764 hci_send_cmd(conn->hdev, HCI_OP_CHANGE_CONN_LINK_KEY,
5974e4c4 765 sizeof(cp), &cp);
1da177e4 766 }
8c1b2355 767
1da177e4
LT
768 return 0;
769}
1da177e4
LT
770
771/* Switch role */
8c1b2355 772int hci_conn_switch_role(struct hci_conn *conn, __u8 role)
1da177e4 773{
38b3fef1 774 BT_DBG("hcon %p", conn);
1da177e4
LT
775
776 if (!role && conn->link_mode & HCI_LM_MASTER)
777 return 1;
778
51a8efd7 779 if (!test_and_set_bit(HCI_CONN_RSWITCH_PEND, &conn->flags)) {
1da177e4
LT
780 struct hci_cp_switch_role cp;
781 bacpy(&cp.bdaddr, &conn->dst);
782 cp.role = role;
a9de9248 783 hci_send_cmd(conn->hdev, HCI_OP_SWITCH_ROLE, sizeof(cp), &cp);
1da177e4 784 }
8c1b2355 785
1da177e4
LT
786 return 0;
787}
788EXPORT_SYMBOL(hci_conn_switch_role);
789
04837f64 790/* Enter active mode */
14b12d0b 791void hci_conn_enter_active_mode(struct hci_conn *conn, __u8 force_active)
04837f64
MH
792{
793 struct hci_dev *hdev = conn->hdev;
794
38b3fef1 795 BT_DBG("hcon %p mode %d", conn, conn->mode);
04837f64
MH
796
797 if (test_bit(HCI_RAW, &hdev->flags))
798 return;
799
14b12d0b
JG
800 if (conn->mode != HCI_CM_SNIFF)
801 goto timer;
802
58a681ef 803 if (!test_bit(HCI_CONN_POWER_SAVE, &conn->flags) && !force_active)
04837f64
MH
804 goto timer;
805
51a8efd7 806 if (!test_and_set_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags)) {
04837f64 807 struct hci_cp_exit_sniff_mode cp;
aca3192c 808 cp.handle = cpu_to_le16(conn->handle);
a9de9248 809 hci_send_cmd(hdev, HCI_OP_EXIT_SNIFF_MODE, sizeof(cp), &cp);
04837f64
MH
810 }
811
812timer:
813 if (hdev->idle_timeout > 0)
814 mod_timer(&conn->idle_timer,
5974e4c4 815 jiffies + msecs_to_jiffies(hdev->idle_timeout));
04837f64
MH
816}
817
1da177e4
LT
818/* Drop all connection on the device */
819void hci_conn_hash_flush(struct hci_dev *hdev)
820{
821 struct hci_conn_hash *h = &hdev->conn_hash;
3c4e0df0 822 struct hci_conn *c, *n;
1da177e4
LT
823
824 BT_DBG("hdev %s", hdev->name);
825
3c4e0df0 826 list_for_each_entry_safe(c, n, &h->list, list) {
1da177e4
LT
827 c->state = BT_CLOSED;
828
9f5a0d7b 829 hci_proto_disconn_cfm(c, HCI_ERROR_LOCAL_HOST_TERM);
1da177e4
LT
830 hci_conn_del(c);
831 }
832}
833
a9de9248
MH
834/* Check pending connect attempts */
835void hci_conn_check_pending(struct hci_dev *hdev)
836{
837 struct hci_conn *conn;
838
839 BT_DBG("hdev %s", hdev->name);
840
841 hci_dev_lock(hdev);
842
843 conn = hci_conn_hash_lookup_state(hdev, ACL_LINK, BT_CONNECT2);
844 if (conn)
1aef8669 845 hci_acl_create_connection(conn);
a9de9248
MH
846
847 hci_dev_unlock(hdev);
848}
849
9eba32b8
MH
850void hci_conn_hold_device(struct hci_conn *conn)
851{
852 atomic_inc(&conn->devref);
853}
854EXPORT_SYMBOL(hci_conn_hold_device);
855
856void hci_conn_put_device(struct hci_conn *conn)
857{
858 if (atomic_dec_and_test(&conn->devref))
859 hci_conn_del_sysfs(conn);
860}
861EXPORT_SYMBOL(hci_conn_put_device);
862
1da177e4
LT
863int hci_get_conn_list(void __user *arg)
864{
fc5fef61 865 struct hci_conn *c;
1da177e4
LT
866 struct hci_conn_list_req req, *cl;
867 struct hci_conn_info *ci;
868 struct hci_dev *hdev;
1da177e4
LT
869 int n = 0, size, err;
870
871 if (copy_from_user(&req, arg, sizeof(req)))
872 return -EFAULT;
873
874 if (!req.conn_num || req.conn_num > (PAGE_SIZE * 2) / sizeof(*ci))
875 return -EINVAL;
876
877 size = sizeof(req) + req.conn_num * sizeof(*ci);
878
70f23020
AE
879 cl = kmalloc(size, GFP_KERNEL);
880 if (!cl)
1da177e4
LT
881 return -ENOMEM;
882
70f23020
AE
883 hdev = hci_dev_get(req.dev_id);
884 if (!hdev) {
1da177e4
LT
885 kfree(cl);
886 return -ENODEV;
887 }
888
889 ci = cl->conn_info;
890
09fd0de5 891 hci_dev_lock(hdev);
8035ded4 892 list_for_each_entry(c, &hdev->conn_hash.list, list) {
1da177e4
LT
893 bacpy(&(ci + n)->bdaddr, &c->dst);
894 (ci + n)->handle = c->handle;
895 (ci + n)->type = c->type;
896 (ci + n)->out = c->out;
897 (ci + n)->state = c->state;
898 (ci + n)->link_mode = c->link_mode;
899 if (++n >= req.conn_num)
900 break;
901 }
09fd0de5 902 hci_dev_unlock(hdev);
1da177e4
LT
903
904 cl->dev_id = hdev->id;
905 cl->conn_num = n;
906 size = sizeof(req) + n * sizeof(*ci);
907
908 hci_dev_put(hdev);
909
910 err = copy_to_user(arg, cl, size);
911 kfree(cl);
912
913 return err ? -EFAULT : 0;
914}
915
916int hci_get_conn_info(struct hci_dev *hdev, void __user *arg)
917{
918 struct hci_conn_info_req req;
919 struct hci_conn_info ci;
920 struct hci_conn *conn;
921 char __user *ptr = arg + sizeof(req);
922
923 if (copy_from_user(&req, arg, sizeof(req)))
924 return -EFAULT;
925
09fd0de5 926 hci_dev_lock(hdev);
1da177e4
LT
927 conn = hci_conn_hash_lookup_ba(hdev, req.type, &req.bdaddr);
928 if (conn) {
929 bacpy(&ci.bdaddr, &conn->dst);
930 ci.handle = conn->handle;
931 ci.type = conn->type;
932 ci.out = conn->out;
933 ci.state = conn->state;
934 ci.link_mode = conn->link_mode;
935 }
09fd0de5 936 hci_dev_unlock(hdev);
1da177e4
LT
937
938 if (!conn)
939 return -ENOENT;
940
941 return copy_to_user(ptr, &ci, sizeof(ci)) ? -EFAULT : 0;
942}
40be492f
MH
943
944int hci_get_auth_info(struct hci_dev *hdev, void __user *arg)
945{
946 struct hci_auth_info_req req;
947 struct hci_conn *conn;
948
949 if (copy_from_user(&req, arg, sizeof(req)))
950 return -EFAULT;
951
09fd0de5 952 hci_dev_lock(hdev);
40be492f
MH
953 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &req.bdaddr);
954 if (conn)
955 req.type = conn->auth_type;
09fd0de5 956 hci_dev_unlock(hdev);
40be492f
MH
957
958 if (!conn)
959 return -ENOENT;
960
961 return copy_to_user(arg, &req, sizeof(req)) ? -EFAULT : 0;
962}
73d80deb
LAD
963
964struct hci_chan *hci_chan_create(struct hci_conn *conn)
965{
966 struct hci_dev *hdev = conn->hdev;
967 struct hci_chan *chan;
968
38b3fef1 969 BT_DBG("%s hcon %p", hdev->name, conn);
73d80deb 970
75d7735c 971 chan = kzalloc(sizeof(struct hci_chan), GFP_KERNEL);
73d80deb
LAD
972 if (!chan)
973 return NULL;
974
975 chan->conn = conn;
976 skb_queue_head_init(&chan->data_q);
168df8e5 977 chan->state = BT_CONNECTED;
73d80deb 978
8192edef 979 list_add_rcu(&chan->list, &conn->chan_list);
73d80deb
LAD
980
981 return chan;
982}
983
9472007c 984void hci_chan_del(struct hci_chan *chan)
73d80deb
LAD
985{
986 struct hci_conn *conn = chan->conn;
987 struct hci_dev *hdev = conn->hdev;
988
38b3fef1 989 BT_DBG("%s hcon %p chan %p", hdev->name, conn, chan);
73d80deb 990
8192edef
GP
991 list_del_rcu(&chan->list);
992
993 synchronize_rcu();
73d80deb 994
76a68ba0 995 hci_conn_drop(conn);
e9b02748 996
73d80deb
LAD
997 skb_queue_purge(&chan->data_q);
998 kfree(chan);
73d80deb
LAD
999}
1000
2c33c06a 1001void hci_chan_list_flush(struct hci_conn *conn)
73d80deb 1002{
2a5a5ec6 1003 struct hci_chan *chan, *n;
73d80deb 1004
38b3fef1 1005 BT_DBG("hcon %p", conn);
73d80deb 1006
2a5a5ec6 1007 list_for_each_entry_safe(chan, n, &conn->chan_list, list)
73d80deb
LAD
1008 hci_chan_del(chan);
1009}
42c4e53e
AE
1010
1011static struct hci_chan *__hci_chan_lookup_handle(struct hci_conn *hcon,
1012 __u16 handle)
1013{
1014 struct hci_chan *hchan;
1015
1016 list_for_each_entry(hchan, &hcon->chan_list, list) {
1017 if (hchan->handle == handle)
1018 return hchan;
1019 }
1020
1021 return NULL;
1022}
1023
1024struct hci_chan *hci_chan_lookup_handle(struct hci_dev *hdev, __u16 handle)
1025{
1026 struct hci_conn_hash *h = &hdev->conn_hash;
1027 struct hci_conn *hcon;
1028 struct hci_chan *hchan = NULL;
1029
1030 rcu_read_lock();
1031
1032 list_for_each_entry_rcu(hcon, &h->list, list) {
1033 hchan = __hci_chan_lookup_handle(hcon, handle);
1034 if (hchan)
1035 break;
1036 }
1037
1038 rcu_read_unlock();
1039
1040 return hchan;
1041}