2 BlueZ - Bluetooth protocol stack for Linux
3 Copyright (C) 2000-2001 Qualcomm Incorporated
5 Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
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;
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.
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.
25 /* Bluetooth HCI connection handling. */
27 #include <linux/module.h>
29 #include <linux/types.h>
30 #include <linux/errno.h>
31 #include <linux/kernel.h>
32 #include <linux/sched.h>
33 #include <linux/slab.h>
34 #include <linux/poll.h>
35 #include <linux/fcntl.h>
36 #include <linux/init.h>
37 #include <linux/skbuff.h>
38 #include <linux/interrupt.h>
39 #include <linux/notifier.h>
42 #include <asm/system.h>
43 #include <asm/uaccess.h>
44 #include <asm/unaligned.h>
46 #include <net/bluetooth/bluetooth.h>
47 #include <net/bluetooth/hci_core.h>
49 #ifndef CONFIG_BT_HCI_CORE_DEBUG
54 static void hci_acl_connect(struct hci_conn *conn)
56 struct hci_dev *hdev = conn->hdev;
57 struct inquiry_entry *ie;
58 struct hci_cp_create_conn cp;
62 conn->state = BT_CONNECT;
64 conn->link_mode = HCI_LM_MASTER;
66 memset(&cp, 0, sizeof(cp));
67 bacpy(&cp.bdaddr, &conn->dst);
68 cp.pscan_rep_mode = 0x02;
70 if ((ie = hci_inquiry_cache_lookup(hdev, &conn->dst)) &&
71 inquiry_entry_age(ie) <= INQUIRY_ENTRY_AGE_MAX) {
72 cp.pscan_rep_mode = ie->data.pscan_rep_mode;
73 cp.pscan_mode = ie->data.pscan_mode;
74 cp.clock_offset = ie->data.clock_offset | __cpu_to_le16(0x8000);
75 memcpy(conn->dev_class, ie->data.dev_class, 3);
78 cp.pkt_type = __cpu_to_le16(hdev->pkt_type & ACL_PTYPE_MASK);
79 if (lmp_rswitch_capable(hdev) && !(hdev->link_mode & HCI_LM_MASTER))
80 cp.role_switch = 0x01;
82 cp.role_switch = 0x00;
84 hci_send_cmd(hdev, OGF_LINK_CTL, OCF_CREATE_CONN, sizeof(cp), &cp);
87 void hci_acl_disconn(struct hci_conn *conn, __u8 reason)
89 struct hci_cp_disconnect cp;
93 conn->state = BT_DISCONN;
95 cp.handle = __cpu_to_le16(conn->handle);
97 hci_send_cmd(conn->hdev, OGF_LINK_CTL, OCF_DISCONNECT, sizeof(cp), &cp);
100 void hci_add_sco(struct hci_conn *conn, __u16 handle)
102 struct hci_dev *hdev = conn->hdev;
103 struct hci_cp_add_sco cp;
107 conn->state = BT_CONNECT;
110 cp.pkt_type = __cpu_to_le16(hdev->pkt_type & SCO_PTYPE_MASK);
111 cp.handle = __cpu_to_le16(handle);
113 hci_send_cmd(hdev, OGF_LINK_CTL, OCF_ADD_SCO, sizeof(cp), &cp);
116 static void hci_conn_timeout(unsigned long arg)
118 struct hci_conn *conn = (void *) arg;
119 struct hci_dev *hdev = conn->hdev;
121 BT_DBG("conn %p state %d", conn, conn->state);
123 if (atomic_read(&conn->refcnt))
127 if (conn->state == BT_CONNECTED)
128 hci_acl_disconn(conn, 0x13);
130 conn->state = BT_CLOSED;
131 hci_dev_unlock(hdev);
135 static void hci_conn_idle(unsigned long arg)
137 struct hci_conn *conn = (void *) arg;
139 BT_DBG("conn %p mode %d", conn, conn->mode);
141 hci_conn_enter_sniff_mode(conn);
144 struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst)
146 struct hci_conn *conn;
148 BT_DBG("%s dst %s", hdev->name, batostr(dst));
150 conn = kzalloc(sizeof(struct hci_conn), GFP_ATOMIC);
154 bacpy(&conn->dst, dst);
157 conn->mode = HCI_CM_ACTIVE;
158 conn->state = BT_OPEN;
160 conn->power_save = 1;
162 skb_queue_head_init(&conn->data_q);
164 init_timer(&conn->disc_timer);
165 conn->disc_timer.function = hci_conn_timeout;
166 conn->disc_timer.data = (unsigned long) conn;
168 init_timer(&conn->idle_timer);
169 conn->idle_timer.function = hci_conn_idle;
170 conn->idle_timer.data = (unsigned long) conn;
172 atomic_set(&conn->refcnt, 0);
176 tasklet_disable(&hdev->tx_task);
178 hci_conn_hash_add(hdev, conn);
180 hdev->notify(hdev, HCI_NOTIFY_CONN_ADD);
182 tasklet_enable(&hdev->tx_task);
187 int hci_conn_del(struct hci_conn *conn)
189 struct hci_dev *hdev = conn->hdev;
191 BT_DBG("%s conn %p handle %d", hdev->name, conn, conn->handle);
193 del_timer(&conn->idle_timer);
195 del_timer(&conn->disc_timer);
197 if (conn->type == SCO_LINK) {
198 struct hci_conn *acl = conn->link;
204 struct hci_conn *sco = conn->link;
209 hdev->acl_cnt += conn->sent;
212 tasklet_disable(&hdev->tx_task);
214 hci_conn_hash_del(hdev, conn);
216 hdev->notify(hdev, HCI_NOTIFY_CONN_DEL);
218 tasklet_enable(&hdev->tx_task);
220 skb_queue_purge(&conn->data_q);
228 struct hci_dev *hci_get_route(bdaddr_t *dst, bdaddr_t *src)
230 int use_src = bacmp(src, BDADDR_ANY);
231 struct hci_dev *hdev = NULL;
234 BT_DBG("%s -> %s", batostr(src), batostr(dst));
236 read_lock_bh(&hci_dev_list_lock);
238 list_for_each(p, &hci_dev_list) {
239 struct hci_dev *d = list_entry(p, struct hci_dev, list);
241 if (!test_bit(HCI_UP, &d->flags) || test_bit(HCI_RAW, &d->flags))
245 * No source address - find interface with bdaddr != dst
246 * Source address - find interface with bdaddr == src
250 if (!bacmp(&d->bdaddr, src)) {
254 if (bacmp(&d->bdaddr, dst)) {
261 hdev = hci_dev_hold(hdev);
263 read_unlock_bh(&hci_dev_list_lock);
266 EXPORT_SYMBOL(hci_get_route);
268 /* Create SCO or ACL connection.
269 * Device _must_ be locked */
270 struct hci_conn * hci_connect(struct hci_dev *hdev, int type, bdaddr_t *dst)
272 struct hci_conn *acl;
274 BT_DBG("%s dst %s", hdev->name, batostr(dst));
276 if (!(acl = hci_conn_hash_lookup_ba(hdev, ACL_LINK, dst))) {
277 if (!(acl = hci_conn_add(hdev, ACL_LINK, dst)))
283 if (acl->state == BT_OPEN || acl->state == BT_CLOSED)
284 hci_acl_connect(acl);
286 if (type == SCO_LINK) {
287 struct hci_conn *sco;
289 if (!(sco = hci_conn_hash_lookup_ba(hdev, SCO_LINK, dst))) {
290 if (!(sco = hci_conn_add(hdev, SCO_LINK, dst))) {
300 if (acl->state == BT_CONNECTED &&
301 (sco->state == BT_OPEN || sco->state == BT_CLOSED))
302 hci_add_sco(sco, acl->handle);
309 EXPORT_SYMBOL(hci_connect);
311 /* Authenticate remote device */
312 int hci_conn_auth(struct hci_conn *conn)
314 BT_DBG("conn %p", conn);
316 if (conn->link_mode & HCI_LM_AUTH)
319 if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->pend)) {
320 struct hci_cp_auth_requested cp;
321 cp.handle = __cpu_to_le16(conn->handle);
322 hci_send_cmd(conn->hdev, OGF_LINK_CTL, OCF_AUTH_REQUESTED, sizeof(cp), &cp);
326 EXPORT_SYMBOL(hci_conn_auth);
328 /* Enable encryption */
329 int hci_conn_encrypt(struct hci_conn *conn)
331 BT_DBG("conn %p", conn);
333 if (conn->link_mode & HCI_LM_ENCRYPT)
336 if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend))
339 if (hci_conn_auth(conn)) {
340 struct hci_cp_set_conn_encrypt cp;
341 cp.handle = __cpu_to_le16(conn->handle);
343 hci_send_cmd(conn->hdev, OGF_LINK_CTL, OCF_SET_CONN_ENCRYPT, sizeof(cp), &cp);
347 EXPORT_SYMBOL(hci_conn_encrypt);
349 /* Change link key */
350 int hci_conn_change_link_key(struct hci_conn *conn)
352 BT_DBG("conn %p", conn);
354 if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->pend)) {
355 struct hci_cp_change_conn_link_key cp;
356 cp.handle = __cpu_to_le16(conn->handle);
357 hci_send_cmd(conn->hdev, OGF_LINK_CTL, OCF_CHANGE_CONN_LINK_KEY, sizeof(cp), &cp);
361 EXPORT_SYMBOL(hci_conn_change_link_key);
364 int hci_conn_switch_role(struct hci_conn *conn, uint8_t role)
366 BT_DBG("conn %p", conn);
368 if (!role && conn->link_mode & HCI_LM_MASTER)
371 if (!test_and_set_bit(HCI_CONN_RSWITCH_PEND, &conn->pend)) {
372 struct hci_cp_switch_role cp;
373 bacpy(&cp.bdaddr, &conn->dst);
375 hci_send_cmd(conn->hdev, OGF_LINK_POLICY, OCF_SWITCH_ROLE, sizeof(cp), &cp);
379 EXPORT_SYMBOL(hci_conn_switch_role);
381 /* Enter active mode */
382 void hci_conn_enter_active_mode(struct hci_conn *conn)
384 struct hci_dev *hdev = conn->hdev;
386 BT_DBG("conn %p mode %d", conn, conn->mode);
388 if (test_bit(HCI_RAW, &hdev->flags))
391 if (conn->mode != HCI_CM_SNIFF || !conn->power_save)
394 if (!test_and_set_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend)) {
395 struct hci_cp_exit_sniff_mode cp;
396 cp.handle = __cpu_to_le16(conn->handle);
397 hci_send_cmd(hdev, OGF_LINK_POLICY,
398 OCF_EXIT_SNIFF_MODE, sizeof(cp), &cp);
402 if (hdev->idle_timeout > 0)
403 mod_timer(&conn->idle_timer,
404 jiffies + msecs_to_jiffies(hdev->idle_timeout));
407 /* Enter sniff mode */
408 void hci_conn_enter_sniff_mode(struct hci_conn *conn)
410 struct hci_dev *hdev = conn->hdev;
412 BT_DBG("conn %p mode %d", conn, conn->mode);
414 if (test_bit(HCI_RAW, &hdev->flags))
417 if (!lmp_sniff_capable(hdev) || !lmp_sniff_capable(conn))
420 if (conn->mode != HCI_CM_ACTIVE || !(conn->link_policy & HCI_LP_SNIFF))
423 if (lmp_sniffsubr_capable(hdev) && lmp_sniffsubr_capable(conn)) {
424 struct hci_cp_sniff_subrate cp;
425 cp.handle = __cpu_to_le16(conn->handle);
426 cp.max_latency = __constant_cpu_to_le16(0);
427 cp.min_remote_timeout = __constant_cpu_to_le16(0);
428 cp.min_local_timeout = __constant_cpu_to_le16(0);
429 hci_send_cmd(hdev, OGF_LINK_POLICY,
430 OCF_SNIFF_SUBRATE, sizeof(cp), &cp);
433 if (!test_and_set_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend)) {
434 struct hci_cp_sniff_mode cp;
435 cp.handle = __cpu_to_le16(conn->handle);
436 cp.max_interval = __cpu_to_le16(hdev->sniff_max_interval);
437 cp.min_interval = __cpu_to_le16(hdev->sniff_min_interval);
438 cp.attempt = __constant_cpu_to_le16(4);
439 cp.timeout = __constant_cpu_to_le16(1);
440 hci_send_cmd(hdev, OGF_LINK_POLICY,
441 OCF_SNIFF_MODE, sizeof(cp), &cp);
445 /* Drop all connection on the device */
446 void hci_conn_hash_flush(struct hci_dev *hdev)
448 struct hci_conn_hash *h = &hdev->conn_hash;
451 BT_DBG("hdev %s", hdev->name);
454 while (p != &h->list) {
457 c = list_entry(p, struct hci_conn, list);
460 c->state = BT_CLOSED;
462 hci_proto_disconn_ind(c, 0x16);
467 int hci_get_conn_list(void __user *arg)
469 struct hci_conn_list_req req, *cl;
470 struct hci_conn_info *ci;
471 struct hci_dev *hdev;
473 int n = 0, size, err;
475 if (copy_from_user(&req, arg, sizeof(req)))
478 if (!req.conn_num || req.conn_num > (PAGE_SIZE * 2) / sizeof(*ci))
481 size = sizeof(req) + req.conn_num * sizeof(*ci);
483 if (!(cl = kmalloc(size, GFP_KERNEL)))
486 if (!(hdev = hci_dev_get(req.dev_id))) {
493 hci_dev_lock_bh(hdev);
494 list_for_each(p, &hdev->conn_hash.list) {
495 register struct hci_conn *c;
496 c = list_entry(p, struct hci_conn, list);
498 bacpy(&(ci + n)->bdaddr, &c->dst);
499 (ci + n)->handle = c->handle;
500 (ci + n)->type = c->type;
501 (ci + n)->out = c->out;
502 (ci + n)->state = c->state;
503 (ci + n)->link_mode = c->link_mode;
504 if (++n >= req.conn_num)
507 hci_dev_unlock_bh(hdev);
509 cl->dev_id = hdev->id;
511 size = sizeof(req) + n * sizeof(*ci);
515 err = copy_to_user(arg, cl, size);
518 return err ? -EFAULT : 0;
521 int hci_get_conn_info(struct hci_dev *hdev, void __user *arg)
523 struct hci_conn_info_req req;
524 struct hci_conn_info ci;
525 struct hci_conn *conn;
526 char __user *ptr = arg + sizeof(req);
528 if (copy_from_user(&req, arg, sizeof(req)))
531 hci_dev_lock_bh(hdev);
532 conn = hci_conn_hash_lookup_ba(hdev, req.type, &req.bdaddr);
534 bacpy(&ci.bdaddr, &conn->dst);
535 ci.handle = conn->handle;
536 ci.type = conn->type;
538 ci.state = conn->state;
539 ci.link_mode = conn->link_mode;
541 hci_dev_unlock_bh(hdev);
546 return copy_to_user(ptr, &ci, sizeof(ci)) ? -EFAULT : 0;