Merge branch 'next' into for-linus-3.0
[pandora-kernel.git] / net / bluetooth / hci_conn.c
1 /*
2    BlueZ - Bluetooth protocol stack for Linux
3    Copyright (c) 2000-2001, 2010, Code Aurora Forum. All rights reserved.
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
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
18    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
19
20    ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
21    COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
22    SOFTWARE IS DISCLAIMED.
23 */
24
25 /* Bluetooth HCI connection handling. */
26
27 #include <linux/module.h>
28
29 #include <linux/types.h>
30 #include <linux/errno.h>
31 #include <linux/kernel.h>
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>
42 #include <linux/uaccess.h>
43 #include <asm/unaligned.h>
44
45 #include <net/bluetooth/bluetooth.h>
46 #include <net/bluetooth/hci_core.h>
47
48 static 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;
55         conn->link_mode |= HCI_LM_MASTER;
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
70 static 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
75 void hci_acl_connect(struct hci_conn *conn)
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;
84         conn->out = 1;
85
86         conn->link_mode = HCI_LM_MASTER;
87
88         conn->attempt++;
89
90         conn->link_policy = hdev->link_policy;
91
92         memset(&cp, 0, sizeof(cp));
93         bacpy(&cp.bdaddr, &conn->dst);
94         cp.pscan_rep_mode = 0x02;
95
96         ie = hci_inquiry_cache_lookup(hdev, &conn->dst);
97         if (ie) {
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
105                 memcpy(conn->dev_class, ie->data.dev_class, 3);
106                 conn->ssp_mode = ie->data.ssp_mode;
107         }
108
109         cp.pkt_type = cpu_to_le16(conn->pkt_type);
110         if (lmp_rswitch_capable(hdev) && !(hdev->link_mode & HCI_LM_MASTER))
111                 cp.role_switch = 0x01;
112         else
113                 cp.role_switch = 0x00;
114
115         hci_send_cmd(hdev, HCI_OP_CREATE_CONN, sizeof(cp), &cp);
116 }
117
118 static 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);
128         hci_send_cmd(conn->hdev, HCI_OP_CREATE_CONN_CANCEL, sizeof(cp), &cp);
129 }
130
131 void 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
139         cp.handle = cpu_to_le16(conn->handle);
140         cp.reason = reason;
141         hci_send_cmd(conn->hdev, HCI_OP_DISCONNECT, sizeof(cp), &cp);
142 }
143
144 void 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
154         conn->attempt++;
155
156         cp.handle   = cpu_to_le16(handle);
157         cp.pkt_type = cpu_to_le16(conn->pkt_type);
158
159         hci_send_cmd(hdev, HCI_OP_ADD_SCO, sizeof(cp), &cp);
160 }
161
162 void 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
172         conn->attempt++;
173
174         cp.handle   = cpu_to_le16(handle);
175         cp.pkt_type = cpu_to_le16(conn->pkt_type);
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
186 void 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 }
204 EXPORT_SYMBOL(hci_le_conn_update);
205
206 /* Device _must_ be locked */
207 void 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
227 static void hci_conn_timeout(unsigned long arg)
228 {
229         struct hci_conn *conn = (void *) arg;
230         struct hci_dev *hdev = conn->hdev;
231         __u8 reason;
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);
239
240         switch (conn->state) {
241         case BT_CONNECT:
242         case BT_CONNECT2:
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                 }
249                 break;
250         case BT_CONFIG:
251         case BT_CONNECTED:
252                 reason = hci_proto_disconn_ind(conn);
253                 hci_acl_disconn(conn, reason);
254                 break;
255         default:
256                 conn->state = BT_CLOSED;
257                 break;
258         }
259
260         hci_dev_unlock(hdev);
261 }
262
263 static void hci_conn_idle(unsigned long arg)
264 {
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);
270 }
271
272 static 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
285 struct 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
291         conn = kzalloc(sizeof(struct hci_conn), GFP_ATOMIC);
292         if (!conn)
293                 return NULL;
294
295         bacpy(&conn->dst, dst);
296         conn->hdev  = hdev;
297         conn->type  = type;
298         conn->mode  = HCI_CM_ACTIVE;
299         conn->state = BT_OPEN;
300         conn->auth_type = HCI_AT_GENERAL_BONDING;
301         conn->io_capability = hdev->io_capability;
302         conn->remote_auth = 0xff;
303         conn->key_type = 0xff;
304
305         conn->power_save = 1;
306         conn->disc_timeout = HCI_DISCONN_TIMEOUT;
307
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))
314                         conn->pkt_type = (hdev->esco_type & SCO_ESCO_MASK) |
315                                         (hdev->esco_type & EDR_ESCO_MASK);
316                 else
317                         conn->pkt_type = hdev->pkt_type & SCO_PTYPE_MASK;
318                 break;
319         case ESCO_LINK:
320                 conn->pkt_type = hdev->esco_type & ~EDR_ESCO_MASK;
321                 break;
322         }
323
324         skb_queue_head_init(&conn->data_q);
325
326         setup_timer(&conn->disc_timer, hci_conn_timeout, (unsigned long)conn);
327         setup_timer(&conn->idle_timer, hci_conn_idle, (unsigned long)conn);
328         setup_timer(&conn->auto_accept_timer, hci_conn_auto_accept,
329                                                         (unsigned long) conn);
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
341         atomic_set(&conn->devref, 0);
342
343         hci_conn_init_sysfs(conn);
344
345         tasklet_enable(&hdev->tx_task);
346
347         return conn;
348 }
349
350 int 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
356         del_timer(&conn->idle_timer);
357
358         del_timer(&conn->disc_timer);
359
360         del_timer(&conn->auto_accept_timer);
361
362         if (conn->type == ACL_LINK) {
363                 struct hci_conn *sco = conn->link;
364                 if (sco)
365                         sco->link = NULL;
366
367                 /* Unacked frames */
368                 hdev->acl_cnt += conn->sent;
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;
374         } else {
375                 struct hci_conn *acl = conn->link;
376                 if (acl) {
377                         acl->link = NULL;
378                         hci_conn_put(acl);
379                 }
380         }
381
382         tasklet_disable(&hdev->tx_task);
383
384         hci_conn_hash_del(hdev, conn);
385         if (hdev->notify)
386                 hdev->notify(hdev, HCI_NOTIFY_CONN_DEL);
387
388         tasklet_enable(&hdev->tx_task);
389
390         skb_queue_purge(&conn->data_q);
391
392         hci_conn_put_device(conn);
393
394         hci_dev_put(hdev);
395
396         if (conn->handle == 0)
397                 kfree(conn);
398
399         return 0;
400 }
401
402 struct hci_dev *hci_get_route(bdaddr_t *dst, bdaddr_t *src)
403 {
404         int use_src = bacmp(src, BDADDR_ANY);
405         struct hci_dev *hdev = NULL;
406         struct list_head *p;
407
408         BT_DBG("%s -> %s", batostr(src), batostr(dst));
409
410         read_lock_bh(&hci_dev_list_lock);
411
412         list_for_each(p, &hci_dev_list) {
413                 struct hci_dev *d = list_entry(p, struct hci_dev, list);
414
415                 if (!test_bit(HCI_UP, &d->flags) || test_bit(HCI_RAW, &d->flags))
416                         continue;
417
418                 /* Simple routing:
419                  *   No source address - find interface with bdaddr != dst
420                  *   Source address    - find interface with bdaddr == src
421                  */
422
423                 if (use_src) {
424                         if (!bacmp(&d->bdaddr, src)) {
425                                 hdev = d; break;
426                         }
427                 } else {
428                         if (bacmp(&d->bdaddr, dst)) {
429                                 hdev = d; break;
430                         }
431                 }
432         }
433
434         if (hdev)
435                 hdev = hci_dev_hold(hdev);
436
437         read_unlock_bh(&hci_dev_list_lock);
438         return hdev;
439 }
440 EXPORT_SYMBOL(hci_get_route);
441
442 /* Create SCO, ACL or LE connection.
443  * Device _must_ be locked */
444 struct hci_conn *hci_connect(struct hci_dev *hdev, int type, bdaddr_t *dst, __u8 sec_level, __u8 auth_type)
445 {
446         struct hci_conn *acl;
447         struct hci_conn *sco;
448         struct hci_conn *le;
449
450         BT_DBG("%s dst %s", hdev->name, batostr(dst));
451
452         if (type == LE_LINK) {
453                 le = hci_conn_hash_lookup_ba(hdev, LE_LINK, dst);
454                 if (le)
455                         return ERR_PTR(-EBUSY);
456                 le = hci_conn_add(hdev, LE_LINK, dst);
457                 if (!le)
458                         return ERR_PTR(-ENOMEM);
459                 if (le->state == BT_OPEN)
460                         hci_le_connect(le);
461
462                 hci_conn_hold(le);
463
464                 return le;
465         }
466
467         acl = hci_conn_hash_lookup_ba(hdev, ACL_LINK, dst);
468         if (!acl) {
469                 acl = hci_conn_add(hdev, ACL_LINK, dst);
470                 if (!acl)
471                         return NULL;
472         }
473
474         hci_conn_hold(acl);
475
476         if (acl->state == BT_OPEN || acl->state == BT_CLOSED) {
477                 acl->sec_level = BT_SECURITY_LOW;
478                 acl->pending_sec_level = sec_level;
479                 acl->auth_type = auth_type;
480                 hci_acl_connect(acl);
481         }
482
483         if (type == ACL_LINK)
484                 return acl;
485
486         sco = hci_conn_hash_lookup_ba(hdev, type, dst);
487         if (!sco) {
488                 sco = hci_conn_add(hdev, type, dst);
489                 if (!sco) {
490                         hci_conn_put(acl);
491                         return NULL;
492                 }
493         }
494
495         acl->link = sco;
496         sco->link = acl;
497
498         hci_conn_hold(sco);
499
500         if (acl->state == BT_CONNECTED &&
501                         (sco->state == BT_OPEN || sco->state == BT_CLOSED)) {
502                 acl->power_save = 1;
503                 hci_conn_enter_active_mode(acl);
504
505                 if (test_bit(HCI_CONN_MODE_CHANGE_PEND, &acl->pend)) {
506                         /* defer SCO setup until mode change completed */
507                         set_bit(HCI_CONN_SCO_SETUP_PEND, &acl->pend);
508                         return sco;
509                 }
510
511                 hci_sco_setup(acl, 0x00);
512         }
513
514         return sco;
515 }
516 EXPORT_SYMBOL(hci_connect);
517
518 /* Check link security requirement */
519 int hci_conn_check_link_mode(struct hci_conn *conn)
520 {
521         BT_DBG("conn %p", conn);
522
523         if (conn->ssp_mode > 0 && conn->hdev->ssp_mode > 0 &&
524                                         !(conn->link_mode & HCI_LM_ENCRYPT))
525                 return 0;
526
527         return 1;
528 }
529 EXPORT_SYMBOL(hci_conn_check_link_mode);
530
531 /* Authenticate remote device */
532 static int hci_conn_auth(struct hci_conn *conn, __u8 sec_level, __u8 auth_type)
533 {
534         BT_DBG("conn %p", conn);
535
536         if (conn->pending_sec_level > sec_level)
537                 sec_level = conn->pending_sec_level;
538
539         if (sec_level > conn->sec_level)
540                 conn->pending_sec_level = sec_level;
541         else if (conn->link_mode & HCI_LM_AUTH)
542                 return 1;
543
544         /* Make sure we preserve an existing MITM requirement*/
545         auth_type |= (conn->auth_type & 0x01);
546
547         conn->auth_type = auth_type;
548
549         if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->pend)) {
550                 struct hci_cp_auth_requested cp;
551                 cp.handle = cpu_to_le16(conn->handle);
552                 hci_send_cmd(conn->hdev, HCI_OP_AUTH_REQUESTED,
553                                                         sizeof(cp), &cp);
554         }
555
556         return 0;
557 }
558
559 /* Encrypt the the link */
560 static void hci_conn_encrypt(struct hci_conn *conn)
561 {
562         BT_DBG("conn %p", conn);
563
564         if (!test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend)) {
565                 struct hci_cp_set_conn_encrypt cp;
566                 cp.handle  = cpu_to_le16(conn->handle);
567                 cp.encrypt = 0x01;
568                 hci_send_cmd(conn->hdev, HCI_OP_SET_CONN_ENCRYPT, sizeof(cp),
569                                                                         &cp);
570         }
571 }
572
573 /* Enable security */
574 int hci_conn_security(struct hci_conn *conn, __u8 sec_level, __u8 auth_type)
575 {
576         BT_DBG("conn %p", conn);
577
578         /* For sdp we don't need the link key. */
579         if (sec_level == BT_SECURITY_SDP)
580                 return 1;
581
582         /* For non 2.1 devices and low security level we don't need the link
583            key. */
584         if (sec_level == BT_SECURITY_LOW &&
585                                 (!conn->ssp_mode || !conn->hdev->ssp_mode))
586                 return 1;
587
588         /* For other security levels we need the link key. */
589         if (!(conn->link_mode & HCI_LM_AUTH))
590                 goto auth;
591
592         /* An authenticated combination key has sufficient security for any
593            security level. */
594         if (conn->key_type == HCI_LK_AUTH_COMBINATION)
595                 goto encrypt;
596
597         /* An unauthenticated combination key has sufficient security for
598            security level 1 and 2. */
599         if (conn->key_type == HCI_LK_UNAUTH_COMBINATION &&
600                         (sec_level == BT_SECURITY_MEDIUM ||
601                         sec_level == BT_SECURITY_LOW))
602                 goto encrypt;
603
604         /* A combination key has always sufficient security for the security
605            levels 1 or 2. High security level requires the combination key
606            is generated using maximum PIN code length (16).
607            For pre 2.1 units. */
608         if (conn->key_type == HCI_LK_COMBINATION &&
609                         (sec_level != BT_SECURITY_HIGH ||
610                         conn->pin_length == 16))
611                 goto encrypt;
612
613 auth:
614         if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend))
615                 return 0;
616
617         if (!hci_conn_auth(conn, sec_level, auth_type))
618                 return 0;
619
620 encrypt:
621         if (conn->link_mode & HCI_LM_ENCRYPT)
622                 return 1;
623
624         hci_conn_encrypt(conn);
625         return 0;
626 }
627 EXPORT_SYMBOL(hci_conn_security);
628
629 /* Check secure link requirement */
630 int hci_conn_check_secure(struct hci_conn *conn, __u8 sec_level)
631 {
632         BT_DBG("conn %p", conn);
633
634         if (sec_level != BT_SECURITY_HIGH)
635                 return 1; /* Accept if non-secure is required */
636
637         if (conn->key_type == HCI_LK_AUTH_COMBINATION ||
638                         (conn->key_type == HCI_LK_COMBINATION &&
639                         conn->pin_length == 16))
640                 return 1;
641
642         return 0; /* Reject not secure link */
643 }
644 EXPORT_SYMBOL(hci_conn_check_secure);
645
646 /* Change link key */
647 int hci_conn_change_link_key(struct hci_conn *conn)
648 {
649         BT_DBG("conn %p", conn);
650
651         if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->pend)) {
652                 struct hci_cp_change_conn_link_key cp;
653                 cp.handle = cpu_to_le16(conn->handle);
654                 hci_send_cmd(conn->hdev, HCI_OP_CHANGE_CONN_LINK_KEY,
655                                                         sizeof(cp), &cp);
656         }
657
658         return 0;
659 }
660 EXPORT_SYMBOL(hci_conn_change_link_key);
661
662 /* Switch role */
663 int hci_conn_switch_role(struct hci_conn *conn, __u8 role)
664 {
665         BT_DBG("conn %p", conn);
666
667         if (!role && conn->link_mode & HCI_LM_MASTER)
668                 return 1;
669
670         if (!test_and_set_bit(HCI_CONN_RSWITCH_PEND, &conn->pend)) {
671                 struct hci_cp_switch_role cp;
672                 bacpy(&cp.bdaddr, &conn->dst);
673                 cp.role = role;
674                 hci_send_cmd(conn->hdev, HCI_OP_SWITCH_ROLE, sizeof(cp), &cp);
675         }
676
677         return 0;
678 }
679 EXPORT_SYMBOL(hci_conn_switch_role);
680
681 /* Enter active mode */
682 void hci_conn_enter_active_mode(struct hci_conn *conn)
683 {
684         struct hci_dev *hdev = conn->hdev;
685
686         BT_DBG("conn %p mode %d", conn, conn->mode);
687
688         if (test_bit(HCI_RAW, &hdev->flags))
689                 return;
690
691         if (conn->mode != HCI_CM_SNIFF || !conn->power_save)
692                 goto timer;
693
694         if (!test_and_set_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend)) {
695                 struct hci_cp_exit_sniff_mode cp;
696                 cp.handle = cpu_to_le16(conn->handle);
697                 hci_send_cmd(hdev, HCI_OP_EXIT_SNIFF_MODE, sizeof(cp), &cp);
698         }
699
700 timer:
701         if (hdev->idle_timeout > 0)
702                 mod_timer(&conn->idle_timer,
703                         jiffies + msecs_to_jiffies(hdev->idle_timeout));
704 }
705
706 /* Enter sniff mode */
707 void hci_conn_enter_sniff_mode(struct hci_conn *conn)
708 {
709         struct hci_dev *hdev = conn->hdev;
710
711         BT_DBG("conn %p mode %d", conn, conn->mode);
712
713         if (test_bit(HCI_RAW, &hdev->flags))
714                 return;
715
716         if (!lmp_sniff_capable(hdev) || !lmp_sniff_capable(conn))
717                 return;
718
719         if (conn->mode != HCI_CM_ACTIVE || !(conn->link_policy & HCI_LP_SNIFF))
720                 return;
721
722         if (lmp_sniffsubr_capable(hdev) && lmp_sniffsubr_capable(conn)) {
723                 struct hci_cp_sniff_subrate cp;
724                 cp.handle             = cpu_to_le16(conn->handle);
725                 cp.max_latency        = cpu_to_le16(0);
726                 cp.min_remote_timeout = cpu_to_le16(0);
727                 cp.min_local_timeout  = cpu_to_le16(0);
728                 hci_send_cmd(hdev, HCI_OP_SNIFF_SUBRATE, sizeof(cp), &cp);
729         }
730
731         if (!test_and_set_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend)) {
732                 struct hci_cp_sniff_mode cp;
733                 cp.handle       = cpu_to_le16(conn->handle);
734                 cp.max_interval = cpu_to_le16(hdev->sniff_max_interval);
735                 cp.min_interval = cpu_to_le16(hdev->sniff_min_interval);
736                 cp.attempt      = cpu_to_le16(4);
737                 cp.timeout      = cpu_to_le16(1);
738                 hci_send_cmd(hdev, HCI_OP_SNIFF_MODE, sizeof(cp), &cp);
739         }
740 }
741
742 /* Drop all connection on the device */
743 void hci_conn_hash_flush(struct hci_dev *hdev)
744 {
745         struct hci_conn_hash *h = &hdev->conn_hash;
746         struct list_head *p;
747
748         BT_DBG("hdev %s", hdev->name);
749
750         p = h->list.next;
751         while (p != &h->list) {
752                 struct hci_conn *c;
753
754                 c = list_entry(p, struct hci_conn, list);
755                 p = p->next;
756
757                 c->state = BT_CLOSED;
758
759                 hci_proto_disconn_cfm(c, 0x16);
760                 hci_conn_del(c);
761         }
762 }
763
764 /* Check pending connect attempts */
765 void hci_conn_check_pending(struct hci_dev *hdev)
766 {
767         struct hci_conn *conn;
768
769         BT_DBG("hdev %s", hdev->name);
770
771         hci_dev_lock(hdev);
772
773         conn = hci_conn_hash_lookup_state(hdev, ACL_LINK, BT_CONNECT2);
774         if (conn)
775                 hci_acl_connect(conn);
776
777         hci_dev_unlock(hdev);
778 }
779
780 void hci_conn_hold_device(struct hci_conn *conn)
781 {
782         atomic_inc(&conn->devref);
783 }
784 EXPORT_SYMBOL(hci_conn_hold_device);
785
786 void hci_conn_put_device(struct hci_conn *conn)
787 {
788         if (atomic_dec_and_test(&conn->devref))
789                 hci_conn_del_sysfs(conn);
790 }
791 EXPORT_SYMBOL(hci_conn_put_device);
792
793 int hci_get_conn_list(void __user *arg)
794 {
795         struct hci_conn_list_req req, *cl;
796         struct hci_conn_info *ci;
797         struct hci_dev *hdev;
798         struct list_head *p;
799         int n = 0, size, err;
800
801         if (copy_from_user(&req, arg, sizeof(req)))
802                 return -EFAULT;
803
804         if (!req.conn_num || req.conn_num > (PAGE_SIZE * 2) / sizeof(*ci))
805                 return -EINVAL;
806
807         size = sizeof(req) + req.conn_num * sizeof(*ci);
808
809         cl = kmalloc(size, GFP_KERNEL);
810         if (!cl)
811                 return -ENOMEM;
812
813         hdev = hci_dev_get(req.dev_id);
814         if (!hdev) {
815                 kfree(cl);
816                 return -ENODEV;
817         }
818
819         ci = cl->conn_info;
820
821         hci_dev_lock_bh(hdev);
822         list_for_each(p, &hdev->conn_hash.list) {
823                 register struct hci_conn *c;
824                 c = list_entry(p, struct hci_conn, list);
825
826                 bacpy(&(ci + n)->bdaddr, &c->dst);
827                 (ci + n)->handle = c->handle;
828                 (ci + n)->type  = c->type;
829                 (ci + n)->out   = c->out;
830                 (ci + n)->state = c->state;
831                 (ci + n)->link_mode = c->link_mode;
832                 if (++n >= req.conn_num)
833                         break;
834         }
835         hci_dev_unlock_bh(hdev);
836
837         cl->dev_id = hdev->id;
838         cl->conn_num = n;
839         size = sizeof(req) + n * sizeof(*ci);
840
841         hci_dev_put(hdev);
842
843         err = copy_to_user(arg, cl, size);
844         kfree(cl);
845
846         return err ? -EFAULT : 0;
847 }
848
849 int hci_get_conn_info(struct hci_dev *hdev, void __user *arg)
850 {
851         struct hci_conn_info_req req;
852         struct hci_conn_info ci;
853         struct hci_conn *conn;
854         char __user *ptr = arg + sizeof(req);
855
856         if (copy_from_user(&req, arg, sizeof(req)))
857                 return -EFAULT;
858
859         hci_dev_lock_bh(hdev);
860         conn = hci_conn_hash_lookup_ba(hdev, req.type, &req.bdaddr);
861         if (conn) {
862                 bacpy(&ci.bdaddr, &conn->dst);
863                 ci.handle = conn->handle;
864                 ci.type  = conn->type;
865                 ci.out   = conn->out;
866                 ci.state = conn->state;
867                 ci.link_mode = conn->link_mode;
868         }
869         hci_dev_unlock_bh(hdev);
870
871         if (!conn)
872                 return -ENOENT;
873
874         return copy_to_user(ptr, &ci, sizeof(ci)) ? -EFAULT : 0;
875 }
876
877 int hci_get_auth_info(struct hci_dev *hdev, void __user *arg)
878 {
879         struct hci_auth_info_req req;
880         struct hci_conn *conn;
881
882         if (copy_from_user(&req, arg, sizeof(req)))
883                 return -EFAULT;
884
885         hci_dev_lock_bh(hdev);
886         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &req.bdaddr);
887         if (conn)
888                 req.type = conn->auth_type;
889         hci_dev_unlock_bh(hdev);
890
891         if (!conn)
892                 return -ENOENT;
893
894         return copy_to_user(arg, &req, sizeof(req)) ? -EFAULT : 0;
895 }