Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
[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
a67e899c
MH
413 hci_conn_init_sysfs(conn);
414
1da177e4
LT
415 return conn;
416}
417
418int hci_conn_del(struct hci_conn *conn)
419{
420 struct hci_dev *hdev = conn->hdev;
421
38b3fef1 422 BT_DBG("%s hcon %p handle %d", hdev->name, conn, conn->handle);
1da177e4 423
04837f64
MH
424 del_timer(&conn->idle_timer);
425
19c40e3b 426 cancel_delayed_work_sync(&conn->disc_work);
1da177e4 427
9f61656a
JH
428 del_timer(&conn->auto_accept_timer);
429
5b7f9909 430 if (conn->type == ACL_LINK) {
1da177e4
LT
431 struct hci_conn *sco = conn->link;
432 if (sco)
433 sco->link = NULL;
434
435 /* Unacked frames */
436 hdev->acl_cnt += conn->sent;
6ed58ec5
VT
437 } else if (conn->type == LE_LINK) {
438 if (hdev->le_pkts)
439 hdev->le_cnt += conn->sent;
440 else
441 hdev->acl_cnt += conn->sent;
5b7f9909
MH
442 } else {
443 struct hci_conn *acl = conn->link;
444 if (acl) {
445 acl->link = NULL;
76a68ba0 446 hci_conn_drop(acl);
5b7f9909 447 }
1da177e4
LT
448 }
449
2c33c06a 450 hci_chan_list_flush(conn);
73d80deb 451
9740e49d
AE
452 if (conn->amp_mgr)
453 amp_mgr_put(conn->amp_mgr);
454
1da177e4 455 hci_conn_hash_del(hdev, conn);
3c54711c 456 if (hdev->notify)
1da177e4 457 hdev->notify(hdev, HCI_NOTIFY_CONN_DEL);
7d0db0a3 458
1da177e4 459 skb_queue_purge(&conn->data_q);
1da177e4 460
fc225c3f 461 hci_conn_del_sysfs(conn);
2ae9a6be 462
384943ec
MH
463 hci_dev_put(hdev);
464
8d12356f 465 hci_conn_put(conn);
163f4dab 466
1da177e4
LT
467 return 0;
468}
469
470struct hci_dev *hci_get_route(bdaddr_t *dst, bdaddr_t *src)
471{
472 int use_src = bacmp(src, BDADDR_ANY);
8035ded4 473 struct hci_dev *hdev = NULL, *d;
1da177e4 474
6ed93dc6 475 BT_DBG("%pMR -> %pMR", src, dst);
1da177e4 476
f20d09d5 477 read_lock(&hci_dev_list_lock);
1da177e4 478
8035ded4 479 list_for_each_entry(d, &hci_dev_list, list) {
8fc9ced3 480 if (!test_bit(HCI_UP, &d->flags) ||
d300fa9b
AE
481 test_bit(HCI_RAW, &d->flags) ||
482 d->dev_type != HCI_BREDR)
1da177e4
LT
483 continue;
484
8e87d142 485 /* Simple routing:
1da177e4
LT
486 * No source address - find interface with bdaddr != dst
487 * Source address - find interface with bdaddr == src
488 */
489
490 if (use_src) {
491 if (!bacmp(&d->bdaddr, src)) {
492 hdev = d; break;
493 }
494 } else {
495 if (bacmp(&d->bdaddr, dst)) {
496 hdev = d; break;
497 }
498 }
499 }
500
501 if (hdev)
502 hdev = hci_dev_hold(hdev);
503
f20d09d5 504 read_unlock(&hci_dev_list_lock);
1da177e4
LT
505 return hdev;
506}
507EXPORT_SYMBOL(hci_get_route);
508
d04aef4c
VCG
509static struct hci_conn *hci_connect_le(struct hci_dev *hdev, bdaddr_t *dst,
510 u8 dst_type, u8 sec_level, u8 auth_type)
1da177e4 511{
fcd89c09 512 struct hci_conn *le;
1da177e4 513
f1550478
JH
514 if (test_bit(HCI_LE_PERIPHERAL, &hdev->flags))
515 return ERR_PTR(-ENOTSUPP);
516
d04aef4c
VCG
517 le = hci_conn_hash_lookup_ba(hdev, LE_LINK, dst);
518 if (!le) {
519 le = hci_conn_hash_lookup_state(hdev, LE_LINK, BT_CONNECT);
520 if (le)
521 return ERR_PTR(-EBUSY);
1da177e4 522
d04aef4c
VCG
523 le = hci_conn_add(hdev, LE_LINK, dst);
524 if (!le)
525 return ERR_PTR(-ENOMEM);
dfc94dbd 526
d04aef4c
VCG
527 le->dst_type = bdaddr_to_le(dst_type);
528 hci_le_create_connection(le);
529 }
9f0caeb1 530
d04aef4c
VCG
531 le->pending_sec_level = sec_level;
532 le->auth_type = auth_type;
eda42b50 533
d04aef4c 534 hci_conn_hold(le);
fcd89c09 535
d04aef4c
VCG
536 return le;
537}
fcd89c09 538
db474275
VCG
539static struct hci_conn *hci_connect_acl(struct hci_dev *hdev, bdaddr_t *dst,
540 u8 sec_level, u8 auth_type)
1da177e4
LT
541{
542 struct hci_conn *acl;
fcd89c09 543
70f23020
AE
544 acl = hci_conn_hash_lookup_ba(hdev, ACL_LINK, dst);
545 if (!acl) {
546 acl = hci_conn_add(hdev, ACL_LINK, dst);
547 if (!acl)
48c7aba9 548 return ERR_PTR(-ENOMEM);
1da177e4
LT
549 }
550
551 hci_conn_hold(acl);
552
09ab6f4c 553 if (acl->state == BT_OPEN || acl->state == BT_CLOSED) {
765c2a96
JH
554 acl->sec_level = BT_SECURITY_LOW;
555 acl->pending_sec_level = sec_level;
09ab6f4c 556 acl->auth_type = auth_type;
1aef8669 557 hci_acl_create_connection(acl);
09ab6f4c 558 }
1da177e4 559
db474275
VCG
560 return acl;
561}
562
f91c8468
VCG
563static struct hci_conn *hci_connect_sco(struct hci_dev *hdev, int type,
564 bdaddr_t *dst, u8 sec_level, u8 auth_type)
db474275
VCG
565{
566 struct hci_conn *acl;
567 struct hci_conn *sco;
568
db474275
VCG
569 acl = hci_connect_acl(hdev, dst, sec_level, auth_type);
570 if (IS_ERR(acl))
5b7f9909 571 return acl;
1da177e4 572
70f23020
AE
573 sco = hci_conn_hash_lookup_ba(hdev, type, dst);
574 if (!sco) {
575 sco = hci_conn_add(hdev, type, dst);
576 if (!sco) {
76a68ba0 577 hci_conn_drop(acl);
48c7aba9 578 return ERR_PTR(-ENOMEM);
1da177e4 579 }
5b7f9909 580 }
1da177e4 581
5b7f9909
MH
582 acl->link = sco;
583 sco->link = acl;
1da177e4 584
5b7f9909 585 hci_conn_hold(sco);
1da177e4 586
5b7f9909 587 if (acl->state == BT_CONNECTED &&
5974e4c4 588 (sco->state == BT_OPEN || sco->state == BT_CLOSED)) {
58a681ef 589 set_bit(HCI_CONN_POWER_SAVE, &acl->flags);
14b12d0b 590 hci_conn_enter_active_mode(acl, BT_POWER_FORCE_ACTIVE_ON);
c390216b 591
51a8efd7 592 if (test_bit(HCI_CONN_MODE_CHANGE_PEND, &acl->flags)) {
e73439d8 593 /* defer SCO setup until mode change completed */
51a8efd7 594 set_bit(HCI_CONN_SCO_SETUP_PEND, &acl->flags);
e73439d8
MH
595 return sco;
596 }
597
598 hci_sco_setup(acl, 0x00);
b6a0dc82 599 }
5b7f9909
MH
600
601 return sco;
1da177e4 602}
1da177e4 603
b7d839bf
VCG
604/* Create SCO, ACL or LE connection. */
605struct hci_conn *hci_connect(struct hci_dev *hdev, int type, bdaddr_t *dst,
606 __u8 dst_type, __u8 sec_level, __u8 auth_type)
607{
6ed93dc6 608 BT_DBG("%s dst %pMR type 0x%x", hdev->name, dst, type);
b7d839bf 609
4cd2d983
VCG
610 switch (type) {
611 case LE_LINK:
b7d839bf 612 return hci_connect_le(hdev, dst, dst_type, sec_level, auth_type);
4cd2d983 613 case ACL_LINK:
b7d839bf 614 return hci_connect_acl(hdev, dst, sec_level, auth_type);
4cd2d983 615 case SCO_LINK:
f91c8468
VCG
616 case ESCO_LINK:
617 return hci_connect_sco(hdev, type, dst, sec_level, auth_type);
4cd2d983 618 }
b7d839bf 619
4cd2d983 620 return ERR_PTR(-EINVAL);
b7d839bf
VCG
621}
622
e7c29cb1
MH
623/* Check link security requirement */
624int hci_conn_check_link_mode(struct hci_conn *conn)
625{
38b3fef1 626 BT_DBG("hcon %p", conn);
e7c29cb1 627
aa64a8b5 628 if (hci_conn_ssp_enabled(conn) && !(conn->link_mode & HCI_LM_ENCRYPT))
e7c29cb1
MH
629 return 0;
630
631 return 1;
632}
e7c29cb1 633
1da177e4 634/* Authenticate remote device */
0684e5f9 635static int hci_conn_auth(struct hci_conn *conn, __u8 sec_level, __u8 auth_type)
1da177e4 636{
38b3fef1 637 BT_DBG("hcon %p", conn);
1da177e4 638
765c2a96
JH
639 if (conn->pending_sec_level > sec_level)
640 sec_level = conn->pending_sec_level;
641
96a31833 642 if (sec_level > conn->sec_level)
765c2a96 643 conn->pending_sec_level = sec_level;
96a31833 644 else if (conn->link_mode & HCI_LM_AUTH)
1da177e4
LT
645 return 1;
646
65cf686e
JH
647 /* Make sure we preserve an existing MITM requirement*/
648 auth_type |= (conn->auth_type & 0x01);
649
96a31833
MH
650 conn->auth_type = auth_type;
651
51a8efd7 652 if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
1da177e4 653 struct hci_cp_auth_requested cp;
b7d05bad
PH
654
655 /* encrypt must be pending if auth is also pending */
656 set_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags);
657
aca3192c 658 cp.handle = cpu_to_le16(conn->handle);
40be492f 659 hci_send_cmd(conn->hdev, HCI_OP_AUTH_REQUESTED,
5974e4c4 660 sizeof(cp), &cp);
19f8def0 661 if (conn->key_type != 0xff)
51a8efd7 662 set_bit(HCI_CONN_REAUTH_PEND, &conn->flags);
1da177e4 663 }
8c1b2355 664
1da177e4
LT
665 return 0;
666}
1da177e4 667
13d39315
WR
668/* Encrypt the the link */
669static void hci_conn_encrypt(struct hci_conn *conn)
670{
38b3fef1 671 BT_DBG("hcon %p", conn);
13d39315 672
51a8efd7 673 if (!test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags)) {
13d39315
WR
674 struct hci_cp_set_conn_encrypt cp;
675 cp.handle = cpu_to_le16(conn->handle);
676 cp.encrypt = 0x01;
677 hci_send_cmd(conn->hdev, HCI_OP_SET_CONN_ENCRYPT, sizeof(cp),
5974e4c4 678 &cp);
13d39315
WR
679 }
680}
681
8c1b2355 682/* Enable security */
0684e5f9 683int hci_conn_security(struct hci_conn *conn, __u8 sec_level, __u8 auth_type)
1da177e4 684{
38b3fef1 685 BT_DBG("hcon %p", conn);
1da177e4 686
d8343f12
VCG
687 if (conn->type == LE_LINK)
688 return smp_conn_security(conn, sec_level);
689
13d39315 690 /* For sdp we don't need the link key. */
8c1b2355
MH
691 if (sec_level == BT_SECURITY_SDP)
692 return 1;
693
13d39315
WR
694 /* For non 2.1 devices and low security level we don't need the link
695 key. */
aa64a8b5 696 if (sec_level == BT_SECURITY_LOW && !hci_conn_ssp_enabled(conn))
3fdca1e1 697 return 1;
8c1b2355 698
13d39315
WR
699 /* For other security levels we need the link key. */
700 if (!(conn->link_mode & HCI_LM_AUTH))
701 goto auth;
702
703 /* An authenticated combination key has sufficient security for any
704 security level. */
705 if (conn->key_type == HCI_LK_AUTH_COMBINATION)
706 goto encrypt;
707
708 /* An unauthenticated combination key has sufficient security for
709 security level 1 and 2. */
710 if (conn->key_type == HCI_LK_UNAUTH_COMBINATION &&
5974e4c4 711 (sec_level == BT_SECURITY_MEDIUM || sec_level == BT_SECURITY_LOW))
13d39315
WR
712 goto encrypt;
713
714 /* A combination key has always sufficient security for the security
715 levels 1 or 2. High security level requires the combination key
716 is generated using maximum PIN code length (16).
717 For pre 2.1 units. */
718 if (conn->key_type == HCI_LK_COMBINATION &&
5974e4c4 719 (sec_level != BT_SECURITY_HIGH || conn->pin_length == 16))
13d39315
WR
720 goto encrypt;
721
722auth:
51a8efd7 723 if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags))
1da177e4
LT
724 return 0;
725
6fdf658c
LAD
726 if (!hci_conn_auth(conn, sec_level, auth_type))
727 return 0;
13d39315
WR
728
729encrypt:
730 if (conn->link_mode & HCI_LM_ENCRYPT)
731 return 1;
8c1b2355 732
13d39315 733 hci_conn_encrypt(conn);
1da177e4
LT
734 return 0;
735}
8c1b2355 736EXPORT_SYMBOL(hci_conn_security);
1da177e4 737
b3b1b061
WR
738/* Check secure link requirement */
739int hci_conn_check_secure(struct hci_conn *conn, __u8 sec_level)
740{
38b3fef1 741 BT_DBG("hcon %p", conn);
b3b1b061
WR
742
743 if (sec_level != BT_SECURITY_HIGH)
744 return 1; /* Accept if non-secure is required */
745
ef4177e2 746 if (conn->sec_level == BT_SECURITY_HIGH)
b3b1b061
WR
747 return 1;
748
749 return 0; /* Reject not secure link */
750}
751EXPORT_SYMBOL(hci_conn_check_secure);
752
1da177e4
LT
753/* Change link key */
754int hci_conn_change_link_key(struct hci_conn *conn)
755{
38b3fef1 756 BT_DBG("hcon %p", conn);
1da177e4 757
51a8efd7 758 if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->flags)) {
1da177e4 759 struct hci_cp_change_conn_link_key cp;
aca3192c 760 cp.handle = cpu_to_le16(conn->handle);
40be492f 761 hci_send_cmd(conn->hdev, HCI_OP_CHANGE_CONN_LINK_KEY,
5974e4c4 762 sizeof(cp), &cp);
1da177e4 763 }
8c1b2355 764
1da177e4
LT
765 return 0;
766}
1da177e4
LT
767
768/* Switch role */
8c1b2355 769int hci_conn_switch_role(struct hci_conn *conn, __u8 role)
1da177e4 770{
38b3fef1 771 BT_DBG("hcon %p", conn);
1da177e4
LT
772
773 if (!role && conn->link_mode & HCI_LM_MASTER)
774 return 1;
775
51a8efd7 776 if (!test_and_set_bit(HCI_CONN_RSWITCH_PEND, &conn->flags)) {
1da177e4
LT
777 struct hci_cp_switch_role cp;
778 bacpy(&cp.bdaddr, &conn->dst);
779 cp.role = role;
a9de9248 780 hci_send_cmd(conn->hdev, HCI_OP_SWITCH_ROLE, sizeof(cp), &cp);
1da177e4 781 }
8c1b2355 782
1da177e4
LT
783 return 0;
784}
785EXPORT_SYMBOL(hci_conn_switch_role);
786
04837f64 787/* Enter active mode */
14b12d0b 788void hci_conn_enter_active_mode(struct hci_conn *conn, __u8 force_active)
04837f64
MH
789{
790 struct hci_dev *hdev = conn->hdev;
791
38b3fef1 792 BT_DBG("hcon %p mode %d", conn, conn->mode);
04837f64
MH
793
794 if (test_bit(HCI_RAW, &hdev->flags))
795 return;
796
14b12d0b
JG
797 if (conn->mode != HCI_CM_SNIFF)
798 goto timer;
799
58a681ef 800 if (!test_bit(HCI_CONN_POWER_SAVE, &conn->flags) && !force_active)
04837f64
MH
801 goto timer;
802
51a8efd7 803 if (!test_and_set_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->flags)) {
04837f64 804 struct hci_cp_exit_sniff_mode cp;
aca3192c 805 cp.handle = cpu_to_le16(conn->handle);
a9de9248 806 hci_send_cmd(hdev, HCI_OP_EXIT_SNIFF_MODE, sizeof(cp), &cp);
04837f64
MH
807 }
808
809timer:
810 if (hdev->idle_timeout > 0)
811 mod_timer(&conn->idle_timer,
5974e4c4 812 jiffies + msecs_to_jiffies(hdev->idle_timeout));
04837f64
MH
813}
814
1da177e4
LT
815/* Drop all connection on the device */
816void hci_conn_hash_flush(struct hci_dev *hdev)
817{
818 struct hci_conn_hash *h = &hdev->conn_hash;
3c4e0df0 819 struct hci_conn *c, *n;
1da177e4
LT
820
821 BT_DBG("hdev %s", hdev->name);
822
3c4e0df0 823 list_for_each_entry_safe(c, n, &h->list, list) {
1da177e4
LT
824 c->state = BT_CLOSED;
825
9f5a0d7b 826 hci_proto_disconn_cfm(c, HCI_ERROR_LOCAL_HOST_TERM);
1da177e4
LT
827 hci_conn_del(c);
828 }
829}
830
a9de9248
MH
831/* Check pending connect attempts */
832void hci_conn_check_pending(struct hci_dev *hdev)
833{
834 struct hci_conn *conn;
835
836 BT_DBG("hdev %s", hdev->name);
837
838 hci_dev_lock(hdev);
839
840 conn = hci_conn_hash_lookup_state(hdev, ACL_LINK, BT_CONNECT2);
841 if (conn)
1aef8669 842 hci_acl_create_connection(conn);
a9de9248
MH
843
844 hci_dev_unlock(hdev);
845}
846
1da177e4
LT
847int hci_get_conn_list(void __user *arg)
848{
fc5fef61 849 struct hci_conn *c;
1da177e4
LT
850 struct hci_conn_list_req req, *cl;
851 struct hci_conn_info *ci;
852 struct hci_dev *hdev;
1da177e4
LT
853 int n = 0, size, err;
854
855 if (copy_from_user(&req, arg, sizeof(req)))
856 return -EFAULT;
857
858 if (!req.conn_num || req.conn_num > (PAGE_SIZE * 2) / sizeof(*ci))
859 return -EINVAL;
860
861 size = sizeof(req) + req.conn_num * sizeof(*ci);
862
70f23020
AE
863 cl = kmalloc(size, GFP_KERNEL);
864 if (!cl)
1da177e4
LT
865 return -ENOMEM;
866
70f23020
AE
867 hdev = hci_dev_get(req.dev_id);
868 if (!hdev) {
1da177e4
LT
869 kfree(cl);
870 return -ENODEV;
871 }
872
873 ci = cl->conn_info;
874
09fd0de5 875 hci_dev_lock(hdev);
8035ded4 876 list_for_each_entry(c, &hdev->conn_hash.list, list) {
1da177e4
LT
877 bacpy(&(ci + n)->bdaddr, &c->dst);
878 (ci + n)->handle = c->handle;
879 (ci + n)->type = c->type;
880 (ci + n)->out = c->out;
881 (ci + n)->state = c->state;
882 (ci + n)->link_mode = c->link_mode;
883 if (++n >= req.conn_num)
884 break;
885 }
09fd0de5 886 hci_dev_unlock(hdev);
1da177e4
LT
887
888 cl->dev_id = hdev->id;
889 cl->conn_num = n;
890 size = sizeof(req) + n * sizeof(*ci);
891
892 hci_dev_put(hdev);
893
894 err = copy_to_user(arg, cl, size);
895 kfree(cl);
896
897 return err ? -EFAULT : 0;
898}
899
900int hci_get_conn_info(struct hci_dev *hdev, void __user *arg)
901{
902 struct hci_conn_info_req req;
903 struct hci_conn_info ci;
904 struct hci_conn *conn;
905 char __user *ptr = arg + sizeof(req);
906
907 if (copy_from_user(&req, arg, sizeof(req)))
908 return -EFAULT;
909
09fd0de5 910 hci_dev_lock(hdev);
1da177e4
LT
911 conn = hci_conn_hash_lookup_ba(hdev, req.type, &req.bdaddr);
912 if (conn) {
913 bacpy(&ci.bdaddr, &conn->dst);
914 ci.handle = conn->handle;
915 ci.type = conn->type;
916 ci.out = conn->out;
917 ci.state = conn->state;
918 ci.link_mode = conn->link_mode;
919 }
09fd0de5 920 hci_dev_unlock(hdev);
1da177e4
LT
921
922 if (!conn)
923 return -ENOENT;
924
925 return copy_to_user(ptr, &ci, sizeof(ci)) ? -EFAULT : 0;
926}
40be492f
MH
927
928int hci_get_auth_info(struct hci_dev *hdev, void __user *arg)
929{
930 struct hci_auth_info_req req;
931 struct hci_conn *conn;
932
933 if (copy_from_user(&req, arg, sizeof(req)))
934 return -EFAULT;
935
09fd0de5 936 hci_dev_lock(hdev);
40be492f
MH
937 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &req.bdaddr);
938 if (conn)
939 req.type = conn->auth_type;
09fd0de5 940 hci_dev_unlock(hdev);
40be492f
MH
941
942 if (!conn)
943 return -ENOENT;
944
945 return copy_to_user(arg, &req, sizeof(req)) ? -EFAULT : 0;
946}
73d80deb
LAD
947
948struct hci_chan *hci_chan_create(struct hci_conn *conn)
949{
950 struct hci_dev *hdev = conn->hdev;
951 struct hci_chan *chan;
952
38b3fef1 953 BT_DBG("%s hcon %p", hdev->name, conn);
73d80deb 954
75d7735c 955 chan = kzalloc(sizeof(struct hci_chan), GFP_KERNEL);
73d80deb
LAD
956 if (!chan)
957 return NULL;
958
959 chan->conn = conn;
960 skb_queue_head_init(&chan->data_q);
168df8e5 961 chan->state = BT_CONNECTED;
73d80deb 962
8192edef 963 list_add_rcu(&chan->list, &conn->chan_list);
73d80deb
LAD
964
965 return chan;
966}
967
9472007c 968void hci_chan_del(struct hci_chan *chan)
73d80deb
LAD
969{
970 struct hci_conn *conn = chan->conn;
971 struct hci_dev *hdev = conn->hdev;
972
38b3fef1 973 BT_DBG("%s hcon %p chan %p", hdev->name, conn, chan);
73d80deb 974
8192edef
GP
975 list_del_rcu(&chan->list);
976
977 synchronize_rcu();
73d80deb 978
76a68ba0 979 hci_conn_drop(conn);
e9b02748 980
73d80deb
LAD
981 skb_queue_purge(&chan->data_q);
982 kfree(chan);
73d80deb
LAD
983}
984
2c33c06a 985void hci_chan_list_flush(struct hci_conn *conn)
73d80deb 986{
2a5a5ec6 987 struct hci_chan *chan, *n;
73d80deb 988
38b3fef1 989 BT_DBG("hcon %p", conn);
73d80deb 990
2a5a5ec6 991 list_for_each_entry_safe(chan, n, &conn->chan_list, list)
73d80deb
LAD
992 hci_chan_del(chan);
993}
42c4e53e
AE
994
995static struct hci_chan *__hci_chan_lookup_handle(struct hci_conn *hcon,
996 __u16 handle)
997{
998 struct hci_chan *hchan;
999
1000 list_for_each_entry(hchan, &hcon->chan_list, list) {
1001 if (hchan->handle == handle)
1002 return hchan;
1003 }
1004
1005 return NULL;
1006}
1007
1008struct hci_chan *hci_chan_lookup_handle(struct hci_dev *hdev, __u16 handle)
1009{
1010 struct hci_conn_hash *h = &hdev->conn_hash;
1011 struct hci_conn *hcon;
1012 struct hci_chan *hchan = NULL;
1013
1014 rcu_read_lock();
1015
1016 list_for_each_entry_rcu(hcon, &h->list, list) {
1017 hchan = __hci_chan_lookup_handle(hcon, handle);
1018 if (hchan)
1019 break;
1020 }
1021
1022 rcu_read_unlock();
1023
1024 return hchan;
1025}