Bluetooth: Remove useless check in hci_connect()
[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
1da177e4
LT
27#include <linux/module.h>
28
29#include <linux/types.h>
30#include <linux/errno.h>
31#include <linux/kernel.h>
1da177e4
LT
32#include <linux/slab.h>
33#include <linux/poll.h>
34#include <linux/fcntl.h>
35#include <linux/init.h>
36#include <linux/skbuff.h>
37#include <linux/interrupt.h>
38#include <linux/notifier.h>
39#include <net/sock.h>
40
41#include <asm/system.h>
70f23020 42#include <linux/uaccess.h>
1da177e4
LT
43#include <asm/unaligned.h>
44
45#include <net/bluetooth/bluetooth.h>
46#include <net/bluetooth/hci_core.h>
47
fcd89c09
VT
48static void hci_le_connect(struct hci_conn *conn)
49{
50 struct hci_dev *hdev = conn->hdev;
51 struct hci_cp_le_create_conn cp;
52
53 conn->state = BT_CONNECT;
54 conn->out = 1;
b92a6223 55 conn->link_mode |= HCI_LM_MASTER;
fcd89c09
VT
56
57 memset(&cp, 0, sizeof(cp));
58 cp.scan_interval = cpu_to_le16(0x0004);
59 cp.scan_window = cpu_to_le16(0x0004);
60 bacpy(&cp.peer_addr, &conn->dst);
61 cp.conn_interval_min = cpu_to_le16(0x0008);
62 cp.conn_interval_max = cpu_to_le16(0x0100);
63 cp.supervision_timeout = cpu_to_le16(0x0064);
64 cp.min_ce_len = cpu_to_le16(0x0001);
65 cp.max_ce_len = cpu_to_le16(0x0001);
66
67 hci_send_cmd(hdev, HCI_OP_LE_CREATE_CONN, sizeof(cp), &cp);
68}
69
70static void hci_le_connect_cancel(struct hci_conn *conn)
71{
72 hci_send_cmd(conn->hdev, HCI_OP_LE_CREATE_CONN_CANCEL, 0, NULL);
73}
74
4c67bc74 75void hci_acl_connect(struct hci_conn *conn)
1da177e4
LT
76{
77 struct hci_dev *hdev = conn->hdev;
78 struct inquiry_entry *ie;
79 struct hci_cp_create_conn cp;
80
81 BT_DBG("%p", conn);
82
83 conn->state = BT_CONNECT;
a8746417
MH
84 conn->out = 1;
85
1da177e4
LT
86 conn->link_mode = HCI_LM_MASTER;
87
4c67bc74
MH
88 conn->attempt++;
89
e4e8e37c
MH
90 conn->link_policy = hdev->link_policy;
91
1da177e4
LT
92 memset(&cp, 0, sizeof(cp));
93 bacpy(&cp.bdaddr, &conn->dst);
94 cp.pscan_rep_mode = 0x02;
95
70f23020
AE
96 ie = hci_inquiry_cache_lookup(hdev, &conn->dst);
97 if (ie) {
41a96212
MH
98 if (inquiry_entry_age(ie) <= INQUIRY_ENTRY_AGE_MAX) {
99 cp.pscan_rep_mode = ie->data.pscan_rep_mode;
100 cp.pscan_mode = ie->data.pscan_mode;
101 cp.clock_offset = ie->data.clock_offset |
102 cpu_to_le16(0x8000);
103 }
104
1da177e4 105 memcpy(conn->dev_class, ie->data.dev_class, 3);
41a96212 106 conn->ssp_mode = ie->data.ssp_mode;
1da177e4
LT
107 }
108
a8746417 109 cp.pkt_type = cpu_to_le16(conn->pkt_type);
1da177e4 110 if (lmp_rswitch_capable(hdev) && !(hdev->link_mode & HCI_LM_MASTER))
b6a0dc82 111 cp.role_switch = 0x01;
1da177e4 112 else
b6a0dc82 113 cp.role_switch = 0x00;
4c67bc74 114
a9de9248 115 hci_send_cmd(hdev, HCI_OP_CREATE_CONN, sizeof(cp), &cp);
1da177e4
LT
116}
117
6ac59344
MH
118static void hci_acl_connect_cancel(struct hci_conn *conn)
119{
120 struct hci_cp_create_conn_cancel cp;
121
122 BT_DBG("%p", conn);
123
124 if (conn->hdev->hci_ver < 2)
125 return;
126
127 bacpy(&cp.bdaddr, &conn->dst);
a9de9248 128 hci_send_cmd(conn->hdev, HCI_OP_CREATE_CONN_CANCEL, sizeof(cp), &cp);
6ac59344
MH
129}
130
1da177e4
LT
131void hci_acl_disconn(struct hci_conn *conn, __u8 reason)
132{
133 struct hci_cp_disconnect cp;
134
135 BT_DBG("%p", conn);
136
137 conn->state = BT_DISCONN;
138
aca3192c 139 cp.handle = cpu_to_le16(conn->handle);
1da177e4 140 cp.reason = reason;
a9de9248 141 hci_send_cmd(conn->hdev, HCI_OP_DISCONNECT, sizeof(cp), &cp);
1da177e4
LT
142}
143
144void hci_add_sco(struct hci_conn *conn, __u16 handle)
145{
146 struct hci_dev *hdev = conn->hdev;
147 struct hci_cp_add_sco cp;
148
149 BT_DBG("%p", conn);
150
151 conn->state = BT_CONNECT;
152 conn->out = 1;
153
efc7688b
MH
154 conn->attempt++;
155
aca3192c 156 cp.handle = cpu_to_le16(handle);
a8746417 157 cp.pkt_type = cpu_to_le16(conn->pkt_type);
1da177e4 158
a9de9248 159 hci_send_cmd(hdev, HCI_OP_ADD_SCO, sizeof(cp), &cp);
1da177e4
LT
160}
161
b6a0dc82
MH
162void hci_setup_sync(struct hci_conn *conn, __u16 handle)
163{
164 struct hci_dev *hdev = conn->hdev;
165 struct hci_cp_setup_sync_conn cp;
166
167 BT_DBG("%p", conn);
168
169 conn->state = BT_CONNECT;
170 conn->out = 1;
171
efc7688b
MH
172 conn->attempt++;
173
b6a0dc82 174 cp.handle = cpu_to_le16(handle);
a8746417 175 cp.pkt_type = cpu_to_le16(conn->pkt_type);
b6a0dc82
MH
176
177 cp.tx_bandwidth = cpu_to_le32(0x00001f40);
178 cp.rx_bandwidth = cpu_to_le32(0x00001f40);
179 cp.max_latency = cpu_to_le16(0xffff);
180 cp.voice_setting = cpu_to_le16(hdev->voice_setting);
181 cp.retrans_effort = 0xff;
182
183 hci_send_cmd(hdev, HCI_OP_SETUP_SYNC_CONN, sizeof(cp), &cp);
184}
185
2ce603eb
CT
186void hci_le_conn_update(struct hci_conn *conn, u16 min, u16 max,
187 u16 latency, u16 to_multiplier)
188{
189 struct hci_cp_le_conn_update cp;
190 struct hci_dev *hdev = conn->hdev;
191
192 memset(&cp, 0, sizeof(cp));
193
194 cp.handle = cpu_to_le16(conn->handle);
195 cp.conn_interval_min = cpu_to_le16(min);
196 cp.conn_interval_max = cpu_to_le16(max);
197 cp.conn_latency = cpu_to_le16(latency);
198 cp.supervision_timeout = cpu_to_le16(to_multiplier);
199 cp.min_ce_len = cpu_to_le16(0x0001);
200 cp.max_ce_len = cpu_to_le16(0x0001);
201
202 hci_send_cmd(hdev, HCI_OP_LE_CONN_UPDATE, sizeof(cp), &cp);
203}
204EXPORT_SYMBOL(hci_le_conn_update);
205
e73439d8
MH
206/* Device _must_ be locked */
207void hci_sco_setup(struct hci_conn *conn, __u8 status)
208{
209 struct hci_conn *sco = conn->link;
210
211 BT_DBG("%p", conn);
212
213 if (!sco)
214 return;
215
216 if (!status) {
217 if (lmp_esco_capable(conn->hdev))
218 hci_setup_sync(sco, conn->handle);
219 else
220 hci_add_sco(sco, conn->handle);
221 } else {
222 hci_proto_connect_cfm(sco, status);
223 hci_conn_del(sco);
224 }
225}
226
1da177e4
LT
227static void hci_conn_timeout(unsigned long arg)
228{
04837f64
MH
229 struct hci_conn *conn = (void *) arg;
230 struct hci_dev *hdev = conn->hdev;
2950f21a 231 __u8 reason;
1da177e4
LT
232
233 BT_DBG("conn %p state %d", conn, conn->state);
234
235 if (atomic_read(&conn->refcnt))
236 return;
237
238 hci_dev_lock(hdev);
6ac59344
MH
239
240 switch (conn->state) {
241 case BT_CONNECT:
769be974 242 case BT_CONNECT2:
fcd89c09
VT
243 if (conn->out) {
244 if (conn->type == ACL_LINK)
245 hci_acl_connect_cancel(conn);
246 else if (conn->type == LE_LINK)
247 hci_le_connect_cancel(conn);
248 }
6ac59344 249 break;
769be974 250 case BT_CONFIG:
8e87d142 251 case BT_CONNECTED:
2950f21a
MH
252 reason = hci_proto_disconn_ind(conn);
253 hci_acl_disconn(conn, reason);
6ac59344
MH
254 break;
255 default:
1da177e4 256 conn->state = BT_CLOSED;
6ac59344
MH
257 break;
258 }
259
1da177e4 260 hci_dev_unlock(hdev);
1da177e4
LT
261}
262
04837f64 263static void hci_conn_idle(unsigned long arg)
1da177e4 264{
04837f64
MH
265 struct hci_conn *conn = (void *) arg;
266
267 BT_DBG("conn %p mode %d", conn, conn->mode);
268
269 hci_conn_enter_sniff_mode(conn);
1da177e4
LT
270}
271
9f61656a
JH
272static void hci_conn_auto_accept(unsigned long arg)
273{
274 struct hci_conn *conn = (void *) arg;
275 struct hci_dev *hdev = conn->hdev;
276
277 hci_dev_lock(hdev);
278
279 hci_send_cmd(hdev, HCI_OP_USER_CONFIRM_REPLY, sizeof(conn->dst),
280 &conn->dst);
281
282 hci_dev_unlock(hdev);
283}
284
1da177e4
LT
285struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst)
286{
287 struct hci_conn *conn;
288
289 BT_DBG("%s dst %s", hdev->name, batostr(dst));
290
04837f64
MH
291 conn = kzalloc(sizeof(struct hci_conn), GFP_ATOMIC);
292 if (!conn)
1da177e4 293 return NULL;
1da177e4
LT
294
295 bacpy(&conn->dst, dst);
a8746417
MH
296 conn->hdev = hdev;
297 conn->type = type;
298 conn->mode = HCI_CM_ACTIVE;
299 conn->state = BT_OPEN;
93f19c9f 300 conn->auth_type = HCI_AT_GENERAL_BONDING;
17fa4b9d 301 conn->io_capability = hdev->io_capability;
a9583556 302 conn->remote_auth = 0xff;
13d39315 303 conn->key_type = 0xff;
1da177e4 304
04837f64 305 conn->power_save = 1;
052b30b0 306 conn->disc_timeout = HCI_DISCONN_TIMEOUT;
04837f64 307
a8746417
MH
308 switch (type) {
309 case ACL_LINK:
310 conn->pkt_type = hdev->pkt_type & ACL_PTYPE_MASK;
311 break;
312 case SCO_LINK:
313 if (lmp_esco_capable(hdev))
efc7688b
MH
314 conn->pkt_type = (hdev->esco_type & SCO_ESCO_MASK) |
315 (hdev->esco_type & EDR_ESCO_MASK);
a8746417
MH
316 else
317 conn->pkt_type = hdev->pkt_type & SCO_PTYPE_MASK;
318 break;
319 case ESCO_LINK:
efc7688b 320 conn->pkt_type = hdev->esco_type & ~EDR_ESCO_MASK;
a8746417
MH
321 break;
322 }
323
1da177e4 324 skb_queue_head_init(&conn->data_q);
04837f64 325
b24b8a24
PE
326 setup_timer(&conn->disc_timer, hci_conn_timeout, (unsigned long)conn);
327 setup_timer(&conn->idle_timer, hci_conn_idle, (unsigned long)conn);
9f61656a
JH
328 setup_timer(&conn->auto_accept_timer, hci_conn_auto_accept,
329 (unsigned long) conn);
1da177e4
LT
330
331 atomic_set(&conn->refcnt, 0);
332
333 hci_dev_hold(hdev);
334
335 tasklet_disable(&hdev->tx_task);
336
337 hci_conn_hash_add(hdev, conn);
338 if (hdev->notify)
339 hdev->notify(hdev, HCI_NOTIFY_CONN_ADD);
340
9eba32b8
MH
341 atomic_set(&conn->devref, 0);
342
a67e899c
MH
343 hci_conn_init_sysfs(conn);
344
1da177e4
LT
345 tasklet_enable(&hdev->tx_task);
346
347 return conn;
348}
349
350int hci_conn_del(struct hci_conn *conn)
351{
352 struct hci_dev *hdev = conn->hdev;
353
354 BT_DBG("%s conn %p handle %d", hdev->name, conn, conn->handle);
355
04837f64
MH
356 del_timer(&conn->idle_timer);
357
358 del_timer(&conn->disc_timer);
1da177e4 359
9f61656a
JH
360 del_timer(&conn->auto_accept_timer);
361
5b7f9909 362 if (conn->type == ACL_LINK) {
1da177e4
LT
363 struct hci_conn *sco = conn->link;
364 if (sco)
365 sco->link = NULL;
366
367 /* Unacked frames */
368 hdev->acl_cnt += conn->sent;
6ed58ec5
VT
369 } else if (conn->type == LE_LINK) {
370 if (hdev->le_pkts)
371 hdev->le_cnt += conn->sent;
372 else
373 hdev->acl_cnt += conn->sent;
5b7f9909
MH
374 } else {
375 struct hci_conn *acl = conn->link;
376 if (acl) {
377 acl->link = NULL;
378 hci_conn_put(acl);
379 }
1da177e4
LT
380 }
381
382 tasklet_disable(&hdev->tx_task);
7d0db0a3 383
1da177e4
LT
384 hci_conn_hash_del(hdev, conn);
385 if (hdev->notify)
386 hdev->notify(hdev, HCI_NOTIFY_CONN_DEL);
7d0db0a3 387
1da177e4 388 tasklet_enable(&hdev->tx_task);
7d0db0a3 389
1da177e4 390 skb_queue_purge(&conn->data_q);
1da177e4 391
9eba32b8 392 hci_conn_put_device(conn);
2ae9a6be 393
384943ec
MH
394 hci_dev_put(hdev);
395
1da177e4
LT
396 return 0;
397}
398
399struct hci_dev *hci_get_route(bdaddr_t *dst, bdaddr_t *src)
400{
401 int use_src = bacmp(src, BDADDR_ANY);
402 struct hci_dev *hdev = NULL;
403 struct list_head *p;
404
405 BT_DBG("%s -> %s", batostr(src), batostr(dst));
406
407 read_lock_bh(&hci_dev_list_lock);
408
409 list_for_each(p, &hci_dev_list) {
410 struct hci_dev *d = list_entry(p, struct hci_dev, list);
411
412 if (!test_bit(HCI_UP, &d->flags) || test_bit(HCI_RAW, &d->flags))
413 continue;
414
8e87d142 415 /* Simple routing:
1da177e4
LT
416 * No source address - find interface with bdaddr != dst
417 * Source address - find interface with bdaddr == src
418 */
419
420 if (use_src) {
421 if (!bacmp(&d->bdaddr, src)) {
422 hdev = d; break;
423 }
424 } else {
425 if (bacmp(&d->bdaddr, dst)) {
426 hdev = d; break;
427 }
428 }
429 }
430
431 if (hdev)
432 hdev = hci_dev_hold(hdev);
433
434 read_unlock_bh(&hci_dev_list_lock);
435 return hdev;
436}
437EXPORT_SYMBOL(hci_get_route);
438
fcd89c09 439/* Create SCO, ACL or LE connection.
1da177e4 440 * Device _must_ be locked */
8c1b2355 441struct hci_conn *hci_connect(struct hci_dev *hdev, int type, bdaddr_t *dst, __u8 sec_level, __u8 auth_type)
1da177e4
LT
442{
443 struct hci_conn *acl;
5b7f9909 444 struct hci_conn *sco;
fcd89c09 445 struct hci_conn *le;
1da177e4
LT
446
447 BT_DBG("%s dst %s", hdev->name, batostr(dst));
448
fcd89c09
VT
449 if (type == LE_LINK) {
450 le = hci_conn_hash_lookup_ba(hdev, LE_LINK, dst);
15c4794f 451 if (le)
30e76272 452 return ERR_PTR(-EBUSY);
15c4794f 453 le = hci_conn_add(hdev, LE_LINK, dst);
fcd89c09 454 if (!le)
30e76272 455 return ERR_PTR(-ENOMEM);
893d6751
AG
456
457 hci_le_connect(le);
fcd89c09
VT
458
459 hci_conn_hold(le);
460
461 return le;
462 }
463
70f23020
AE
464 acl = hci_conn_hash_lookup_ba(hdev, ACL_LINK, dst);
465 if (!acl) {
466 acl = hci_conn_add(hdev, ACL_LINK, dst);
467 if (!acl)
1da177e4
LT
468 return NULL;
469 }
470
471 hci_conn_hold(acl);
472
09ab6f4c 473 if (acl->state == BT_OPEN || acl->state == BT_CLOSED) {
765c2a96
JH
474 acl->sec_level = BT_SECURITY_LOW;
475 acl->pending_sec_level = sec_level;
09ab6f4c 476 acl->auth_type = auth_type;
1da177e4 477 hci_acl_connect(acl);
09ab6f4c 478 }
1da177e4 479
5b7f9909
MH
480 if (type == ACL_LINK)
481 return acl;
1da177e4 482
70f23020
AE
483 sco = hci_conn_hash_lookup_ba(hdev, type, dst);
484 if (!sco) {
485 sco = hci_conn_add(hdev, type, dst);
486 if (!sco) {
5b7f9909
MH
487 hci_conn_put(acl);
488 return NULL;
1da177e4 489 }
5b7f9909 490 }
1da177e4 491
5b7f9909
MH
492 acl->link = sco;
493 sco->link = acl;
1da177e4 494
5b7f9909 495 hci_conn_hold(sco);
1da177e4 496
5b7f9909 497 if (acl->state == BT_CONNECTED &&
b6a0dc82 498 (sco->state == BT_OPEN || sco->state == BT_CLOSED)) {
c390216b
NP
499 acl->power_save = 1;
500 hci_conn_enter_active_mode(acl);
501
e73439d8
MH
502 if (test_bit(HCI_CONN_MODE_CHANGE_PEND, &acl->pend)) {
503 /* defer SCO setup until mode change completed */
504 set_bit(HCI_CONN_SCO_SETUP_PEND, &acl->pend);
505 return sco;
506 }
507
508 hci_sco_setup(acl, 0x00);
b6a0dc82 509 }
5b7f9909
MH
510
511 return sco;
1da177e4
LT
512}
513EXPORT_SYMBOL(hci_connect);
514
e7c29cb1
MH
515/* Check link security requirement */
516int hci_conn_check_link_mode(struct hci_conn *conn)
517{
518 BT_DBG("conn %p", conn);
519
520 if (conn->ssp_mode > 0 && conn->hdev->ssp_mode > 0 &&
521 !(conn->link_mode & HCI_LM_ENCRYPT))
522 return 0;
523
524 return 1;
525}
526EXPORT_SYMBOL(hci_conn_check_link_mode);
527
1da177e4 528/* Authenticate remote device */
0684e5f9 529static int hci_conn_auth(struct hci_conn *conn, __u8 sec_level, __u8 auth_type)
1da177e4
LT
530{
531 BT_DBG("conn %p", conn);
532
765c2a96
JH
533 if (conn->pending_sec_level > sec_level)
534 sec_level = conn->pending_sec_level;
535
96a31833 536 if (sec_level > conn->sec_level)
765c2a96 537 conn->pending_sec_level = sec_level;
96a31833 538 else if (conn->link_mode & HCI_LM_AUTH)
1da177e4
LT
539 return 1;
540
65cf686e
JH
541 /* Make sure we preserve an existing MITM requirement*/
542 auth_type |= (conn->auth_type & 0x01);
543
96a31833
MH
544 conn->auth_type = auth_type;
545
1da177e4
LT
546 if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->pend)) {
547 struct hci_cp_auth_requested cp;
aca3192c 548 cp.handle = cpu_to_le16(conn->handle);
40be492f
MH
549 hci_send_cmd(conn->hdev, HCI_OP_AUTH_REQUESTED,
550 sizeof(cp), &cp);
19f8def0
WR
551 if (conn->key_type != 0xff)
552 set_bit(HCI_CONN_REAUTH_PEND, &conn->pend);
1da177e4 553 }
8c1b2355 554
1da177e4
LT
555 return 0;
556}
1da177e4 557
13d39315
WR
558/* Encrypt the the link */
559static void hci_conn_encrypt(struct hci_conn *conn)
560{
561 BT_DBG("conn %p", conn);
562
563 if (!test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend)) {
564 struct hci_cp_set_conn_encrypt cp;
565 cp.handle = cpu_to_le16(conn->handle);
566 cp.encrypt = 0x01;
567 hci_send_cmd(conn->hdev, HCI_OP_SET_CONN_ENCRYPT, sizeof(cp),
568 &cp);
569 }
570}
571
8c1b2355 572/* Enable security */
0684e5f9 573int hci_conn_security(struct hci_conn *conn, __u8 sec_level, __u8 auth_type)
1da177e4
LT
574{
575 BT_DBG("conn %p", conn);
576
13d39315 577 /* For sdp we don't need the link key. */
8c1b2355
MH
578 if (sec_level == BT_SECURITY_SDP)
579 return 1;
580
13d39315
WR
581 /* For non 2.1 devices and low security level we don't need the link
582 key. */
3fdca1e1
MH
583 if (sec_level == BT_SECURITY_LOW &&
584 (!conn->ssp_mode || !conn->hdev->ssp_mode))
585 return 1;
8c1b2355 586
13d39315
WR
587 /* For other security levels we need the link key. */
588 if (!(conn->link_mode & HCI_LM_AUTH))
589 goto auth;
590
591 /* An authenticated combination key has sufficient security for any
592 security level. */
593 if (conn->key_type == HCI_LK_AUTH_COMBINATION)
594 goto encrypt;
595
596 /* An unauthenticated combination key has sufficient security for
597 security level 1 and 2. */
598 if (conn->key_type == HCI_LK_UNAUTH_COMBINATION &&
599 (sec_level == BT_SECURITY_MEDIUM ||
600 sec_level == BT_SECURITY_LOW))
601 goto encrypt;
602
603 /* A combination key has always sufficient security for the security
604 levels 1 or 2. High security level requires the combination key
605 is generated using maximum PIN code length (16).
606 For pre 2.1 units. */
607 if (conn->key_type == HCI_LK_COMBINATION &&
608 (sec_level != BT_SECURITY_HIGH ||
609 conn->pin_length == 16))
610 goto encrypt;
611
612auth:
1da177e4
LT
613 if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend))
614 return 0;
615
13d39315
WR
616 hci_conn_auth(conn, sec_level, auth_type);
617 return 0;
618
619encrypt:
620 if (conn->link_mode & HCI_LM_ENCRYPT)
621 return 1;
8c1b2355 622
13d39315 623 hci_conn_encrypt(conn);
1da177e4
LT
624 return 0;
625}
8c1b2355 626EXPORT_SYMBOL(hci_conn_security);
1da177e4 627
b3b1b061
WR
628/* Check secure link requirement */
629int hci_conn_check_secure(struct hci_conn *conn, __u8 sec_level)
630{
631 BT_DBG("conn %p", conn);
632
633 if (sec_level != BT_SECURITY_HIGH)
634 return 1; /* Accept if non-secure is required */
635
636 if (conn->key_type == HCI_LK_AUTH_COMBINATION ||
637 (conn->key_type == HCI_LK_COMBINATION &&
638 conn->pin_length == 16))
639 return 1;
640
641 return 0; /* Reject not secure link */
642}
643EXPORT_SYMBOL(hci_conn_check_secure);
644
1da177e4
LT
645/* Change link key */
646int hci_conn_change_link_key(struct hci_conn *conn)
647{
648 BT_DBG("conn %p", conn);
649
650 if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->pend)) {
651 struct hci_cp_change_conn_link_key cp;
aca3192c 652 cp.handle = cpu_to_le16(conn->handle);
40be492f
MH
653 hci_send_cmd(conn->hdev, HCI_OP_CHANGE_CONN_LINK_KEY,
654 sizeof(cp), &cp);
1da177e4 655 }
8c1b2355 656
1da177e4
LT
657 return 0;
658}
659EXPORT_SYMBOL(hci_conn_change_link_key);
660
661/* Switch role */
8c1b2355 662int hci_conn_switch_role(struct hci_conn *conn, __u8 role)
1da177e4
LT
663{
664 BT_DBG("conn %p", conn);
665
666 if (!role && conn->link_mode & HCI_LM_MASTER)
667 return 1;
668
669 if (!test_and_set_bit(HCI_CONN_RSWITCH_PEND, &conn->pend)) {
670 struct hci_cp_switch_role cp;
671 bacpy(&cp.bdaddr, &conn->dst);
672 cp.role = role;
a9de9248 673 hci_send_cmd(conn->hdev, HCI_OP_SWITCH_ROLE, sizeof(cp), &cp);
1da177e4 674 }
8c1b2355 675
1da177e4
LT
676 return 0;
677}
678EXPORT_SYMBOL(hci_conn_switch_role);
679
04837f64
MH
680/* Enter active mode */
681void hci_conn_enter_active_mode(struct hci_conn *conn)
682{
683 struct hci_dev *hdev = conn->hdev;
684
685 BT_DBG("conn %p mode %d", conn, conn->mode);
686
687 if (test_bit(HCI_RAW, &hdev->flags))
688 return;
689
690 if (conn->mode != HCI_CM_SNIFF || !conn->power_save)
691 goto timer;
692
693 if (!test_and_set_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend)) {
694 struct hci_cp_exit_sniff_mode cp;
aca3192c 695 cp.handle = cpu_to_le16(conn->handle);
a9de9248 696 hci_send_cmd(hdev, HCI_OP_EXIT_SNIFF_MODE, sizeof(cp), &cp);
04837f64
MH
697 }
698
699timer:
700 if (hdev->idle_timeout > 0)
701 mod_timer(&conn->idle_timer,
702 jiffies + msecs_to_jiffies(hdev->idle_timeout));
703}
704
705/* Enter sniff mode */
706void hci_conn_enter_sniff_mode(struct hci_conn *conn)
707{
708 struct hci_dev *hdev = conn->hdev;
709
710 BT_DBG("conn %p mode %d", conn, conn->mode);
711
712 if (test_bit(HCI_RAW, &hdev->flags))
713 return;
714
715 if (!lmp_sniff_capable(hdev) || !lmp_sniff_capable(conn))
716 return;
717
718 if (conn->mode != HCI_CM_ACTIVE || !(conn->link_policy & HCI_LP_SNIFF))
719 return;
720
721 if (lmp_sniffsubr_capable(hdev) && lmp_sniffsubr_capable(conn)) {
722 struct hci_cp_sniff_subrate cp;
aca3192c
YH
723 cp.handle = cpu_to_le16(conn->handle);
724 cp.max_latency = cpu_to_le16(0);
725 cp.min_remote_timeout = cpu_to_le16(0);
726 cp.min_local_timeout = cpu_to_le16(0);
a9de9248 727 hci_send_cmd(hdev, HCI_OP_SNIFF_SUBRATE, sizeof(cp), &cp);
04837f64
MH
728 }
729
730 if (!test_and_set_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend)) {
731 struct hci_cp_sniff_mode cp;
aca3192c
YH
732 cp.handle = cpu_to_le16(conn->handle);
733 cp.max_interval = cpu_to_le16(hdev->sniff_max_interval);
734 cp.min_interval = cpu_to_le16(hdev->sniff_min_interval);
735 cp.attempt = cpu_to_le16(4);
736 cp.timeout = cpu_to_le16(1);
a9de9248 737 hci_send_cmd(hdev, HCI_OP_SNIFF_MODE, sizeof(cp), &cp);
04837f64
MH
738 }
739}
740
1da177e4
LT
741/* Drop all connection on the device */
742void hci_conn_hash_flush(struct hci_dev *hdev)
743{
744 struct hci_conn_hash *h = &hdev->conn_hash;
745 struct list_head *p;
746
747 BT_DBG("hdev %s", hdev->name);
748
749 p = h->list.next;
750 while (p != &h->list) {
751 struct hci_conn *c;
752
753 c = list_entry(p, struct hci_conn, list);
754 p = p->next;
755
756 c->state = BT_CLOSED;
757
2950f21a 758 hci_proto_disconn_cfm(c, 0x16);
1da177e4
LT
759 hci_conn_del(c);
760 }
761}
762
a9de9248
MH
763/* Check pending connect attempts */
764void hci_conn_check_pending(struct hci_dev *hdev)
765{
766 struct hci_conn *conn;
767
768 BT_DBG("hdev %s", hdev->name);
769
770 hci_dev_lock(hdev);
771
772 conn = hci_conn_hash_lookup_state(hdev, ACL_LINK, BT_CONNECT2);
773 if (conn)
774 hci_acl_connect(conn);
775
776 hci_dev_unlock(hdev);
777}
778
9eba32b8
MH
779void hci_conn_hold_device(struct hci_conn *conn)
780{
781 atomic_inc(&conn->devref);
782}
783EXPORT_SYMBOL(hci_conn_hold_device);
784
785void hci_conn_put_device(struct hci_conn *conn)
786{
787 if (atomic_dec_and_test(&conn->devref))
788 hci_conn_del_sysfs(conn);
789}
790EXPORT_SYMBOL(hci_conn_put_device);
791
1da177e4
LT
792int hci_get_conn_list(void __user *arg)
793{
794 struct hci_conn_list_req req, *cl;
795 struct hci_conn_info *ci;
796 struct hci_dev *hdev;
797 struct list_head *p;
798 int n = 0, size, err;
799
800 if (copy_from_user(&req, arg, sizeof(req)))
801 return -EFAULT;
802
803 if (!req.conn_num || req.conn_num > (PAGE_SIZE * 2) / sizeof(*ci))
804 return -EINVAL;
805
806 size = sizeof(req) + req.conn_num * sizeof(*ci);
807
70f23020
AE
808 cl = kmalloc(size, GFP_KERNEL);
809 if (!cl)
1da177e4
LT
810 return -ENOMEM;
811
70f23020
AE
812 hdev = hci_dev_get(req.dev_id);
813 if (!hdev) {
1da177e4
LT
814 kfree(cl);
815 return -ENODEV;
816 }
817
818 ci = cl->conn_info;
819
820 hci_dev_lock_bh(hdev);
821 list_for_each(p, &hdev->conn_hash.list) {
822 register struct hci_conn *c;
823 c = list_entry(p, struct hci_conn, list);
824
825 bacpy(&(ci + n)->bdaddr, &c->dst);
826 (ci + n)->handle = c->handle;
827 (ci + n)->type = c->type;
828 (ci + n)->out = c->out;
829 (ci + n)->state = c->state;
830 (ci + n)->link_mode = c->link_mode;
831 if (++n >= req.conn_num)
832 break;
833 }
834 hci_dev_unlock_bh(hdev);
835
836 cl->dev_id = hdev->id;
837 cl->conn_num = n;
838 size = sizeof(req) + n * sizeof(*ci);
839
840 hci_dev_put(hdev);
841
842 err = copy_to_user(arg, cl, size);
843 kfree(cl);
844
845 return err ? -EFAULT : 0;
846}
847
848int hci_get_conn_info(struct hci_dev *hdev, void __user *arg)
849{
850 struct hci_conn_info_req req;
851 struct hci_conn_info ci;
852 struct hci_conn *conn;
853 char __user *ptr = arg + sizeof(req);
854
855 if (copy_from_user(&req, arg, sizeof(req)))
856 return -EFAULT;
857
858 hci_dev_lock_bh(hdev);
859 conn = hci_conn_hash_lookup_ba(hdev, req.type, &req.bdaddr);
860 if (conn) {
861 bacpy(&ci.bdaddr, &conn->dst);
862 ci.handle = conn->handle;
863 ci.type = conn->type;
864 ci.out = conn->out;
865 ci.state = conn->state;
866 ci.link_mode = conn->link_mode;
867 }
868 hci_dev_unlock_bh(hdev);
869
870 if (!conn)
871 return -ENOENT;
872
873 return copy_to_user(ptr, &ci, sizeof(ci)) ? -EFAULT : 0;
874}
40be492f
MH
875
876int hci_get_auth_info(struct hci_dev *hdev, void __user *arg)
877{
878 struct hci_auth_info_req req;
879 struct hci_conn *conn;
880
881 if (copy_from_user(&req, arg, sizeof(req)))
882 return -EFAULT;
883
884 hci_dev_lock_bh(hdev);
885 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &req.bdaddr);
886 if (conn)
887 req.type = conn->auth_type;
888 hci_dev_unlock_bh(hdev);
889
890 if (!conn)
891 return -ENOENT;
892
893 return copy_to_user(arg, &req, sizeof(req)) ? -EFAULT : 0;
894}