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 hci_conn_add_sysfs(conn);
184 tasklet_enable(&hdev->tx_task);
189 int hci_conn_del(struct hci_conn *conn)
191 struct hci_dev *hdev = conn->hdev;
193 BT_DBG("%s conn %p handle %d", hdev->name, conn, conn->handle);
195 del_timer(&conn->idle_timer);
197 del_timer(&conn->disc_timer);
199 if (conn->type == SCO_LINK) {
200 struct hci_conn *acl = conn->link;
206 struct hci_conn *sco = conn->link;
211 hdev->acl_cnt += conn->sent;
214 tasklet_disable(&hdev->tx_task);
216 hci_conn_del_sysfs(conn);
218 hci_conn_hash_del(hdev, conn);
220 hdev->notify(hdev, HCI_NOTIFY_CONN_DEL);
222 tasklet_enable(&hdev->tx_task);
224 skb_queue_purge(&conn->data_q);
228 /* will free via device release */
229 put_device(&conn->dev);
234 struct hci_dev *hci_get_route(bdaddr_t *dst, bdaddr_t *src)
236 int use_src = bacmp(src, BDADDR_ANY);
237 struct hci_dev *hdev = NULL;
240 BT_DBG("%s -> %s", batostr(src), batostr(dst));
242 read_lock_bh(&hci_dev_list_lock);
244 list_for_each(p, &hci_dev_list) {
245 struct hci_dev *d = list_entry(p, struct hci_dev, list);
247 if (!test_bit(HCI_UP, &d->flags) || test_bit(HCI_RAW, &d->flags))
251 * No source address - find interface with bdaddr != dst
252 * Source address - find interface with bdaddr == src
256 if (!bacmp(&d->bdaddr, src)) {
260 if (bacmp(&d->bdaddr, dst)) {
267 hdev = hci_dev_hold(hdev);
269 read_unlock_bh(&hci_dev_list_lock);
272 EXPORT_SYMBOL(hci_get_route);
274 /* Create SCO or ACL connection.
275 * Device _must_ be locked */
276 struct hci_conn * hci_connect(struct hci_dev *hdev, int type, bdaddr_t *dst)
278 struct hci_conn *acl;
280 BT_DBG("%s dst %s", hdev->name, batostr(dst));
282 if (!(acl = hci_conn_hash_lookup_ba(hdev, ACL_LINK, dst))) {
283 if (!(acl = hci_conn_add(hdev, ACL_LINK, dst)))
289 if (acl->state == BT_OPEN || acl->state == BT_CLOSED)
290 hci_acl_connect(acl);
292 if (type == SCO_LINK) {
293 struct hci_conn *sco;
295 if (!(sco = hci_conn_hash_lookup_ba(hdev, SCO_LINK, dst))) {
296 if (!(sco = hci_conn_add(hdev, SCO_LINK, dst))) {
306 if (acl->state == BT_CONNECTED &&
307 (sco->state == BT_OPEN || sco->state == BT_CLOSED))
308 hci_add_sco(sco, acl->handle);
315 EXPORT_SYMBOL(hci_connect);
317 /* Authenticate remote device */
318 int hci_conn_auth(struct hci_conn *conn)
320 BT_DBG("conn %p", conn);
322 if (conn->link_mode & HCI_LM_AUTH)
325 if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->pend)) {
326 struct hci_cp_auth_requested cp;
327 cp.handle = __cpu_to_le16(conn->handle);
328 hci_send_cmd(conn->hdev, OGF_LINK_CTL, OCF_AUTH_REQUESTED, sizeof(cp), &cp);
332 EXPORT_SYMBOL(hci_conn_auth);
334 /* Enable encryption */
335 int hci_conn_encrypt(struct hci_conn *conn)
337 BT_DBG("conn %p", conn);
339 if (conn->link_mode & HCI_LM_ENCRYPT)
342 if (test_and_set_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend))
345 if (hci_conn_auth(conn)) {
346 struct hci_cp_set_conn_encrypt cp;
347 cp.handle = __cpu_to_le16(conn->handle);
349 hci_send_cmd(conn->hdev, OGF_LINK_CTL, OCF_SET_CONN_ENCRYPT, sizeof(cp), &cp);
353 EXPORT_SYMBOL(hci_conn_encrypt);
355 /* Change link key */
356 int hci_conn_change_link_key(struct hci_conn *conn)
358 BT_DBG("conn %p", conn);
360 if (!test_and_set_bit(HCI_CONN_AUTH_PEND, &conn->pend)) {
361 struct hci_cp_change_conn_link_key cp;
362 cp.handle = __cpu_to_le16(conn->handle);
363 hci_send_cmd(conn->hdev, OGF_LINK_CTL, OCF_CHANGE_CONN_LINK_KEY, sizeof(cp), &cp);
367 EXPORT_SYMBOL(hci_conn_change_link_key);
370 int hci_conn_switch_role(struct hci_conn *conn, uint8_t role)
372 BT_DBG("conn %p", conn);
374 if (!role && conn->link_mode & HCI_LM_MASTER)
377 if (!test_and_set_bit(HCI_CONN_RSWITCH_PEND, &conn->pend)) {
378 struct hci_cp_switch_role cp;
379 bacpy(&cp.bdaddr, &conn->dst);
381 hci_send_cmd(conn->hdev, OGF_LINK_POLICY, OCF_SWITCH_ROLE, sizeof(cp), &cp);
385 EXPORT_SYMBOL(hci_conn_switch_role);
387 /* Enter active mode */
388 void hci_conn_enter_active_mode(struct hci_conn *conn)
390 struct hci_dev *hdev = conn->hdev;
392 BT_DBG("conn %p mode %d", conn, conn->mode);
394 if (test_bit(HCI_RAW, &hdev->flags))
397 if (conn->mode != HCI_CM_SNIFF || !conn->power_save)
400 if (!test_and_set_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend)) {
401 struct hci_cp_exit_sniff_mode cp;
402 cp.handle = __cpu_to_le16(conn->handle);
403 hci_send_cmd(hdev, OGF_LINK_POLICY,
404 OCF_EXIT_SNIFF_MODE, sizeof(cp), &cp);
408 if (hdev->idle_timeout > 0)
409 mod_timer(&conn->idle_timer,
410 jiffies + msecs_to_jiffies(hdev->idle_timeout));
413 /* Enter sniff mode */
414 void hci_conn_enter_sniff_mode(struct hci_conn *conn)
416 struct hci_dev *hdev = conn->hdev;
418 BT_DBG("conn %p mode %d", conn, conn->mode);
420 if (test_bit(HCI_RAW, &hdev->flags))
423 if (!lmp_sniff_capable(hdev) || !lmp_sniff_capable(conn))
426 if (conn->mode != HCI_CM_ACTIVE || !(conn->link_policy & HCI_LP_SNIFF))
429 if (lmp_sniffsubr_capable(hdev) && lmp_sniffsubr_capable(conn)) {
430 struct hci_cp_sniff_subrate cp;
431 cp.handle = __cpu_to_le16(conn->handle);
432 cp.max_latency = __constant_cpu_to_le16(0);
433 cp.min_remote_timeout = __constant_cpu_to_le16(0);
434 cp.min_local_timeout = __constant_cpu_to_le16(0);
435 hci_send_cmd(hdev, OGF_LINK_POLICY,
436 OCF_SNIFF_SUBRATE, sizeof(cp), &cp);
439 if (!test_and_set_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend)) {
440 struct hci_cp_sniff_mode cp;
441 cp.handle = __cpu_to_le16(conn->handle);
442 cp.max_interval = __cpu_to_le16(hdev->sniff_max_interval);
443 cp.min_interval = __cpu_to_le16(hdev->sniff_min_interval);
444 cp.attempt = __constant_cpu_to_le16(4);
445 cp.timeout = __constant_cpu_to_le16(1);
446 hci_send_cmd(hdev, OGF_LINK_POLICY,
447 OCF_SNIFF_MODE, sizeof(cp), &cp);
451 /* Drop all connection on the device */
452 void hci_conn_hash_flush(struct hci_dev *hdev)
454 struct hci_conn_hash *h = &hdev->conn_hash;
457 BT_DBG("hdev %s", hdev->name);
460 while (p != &h->list) {
463 c = list_entry(p, struct hci_conn, list);
466 c->state = BT_CLOSED;
468 hci_proto_disconn_ind(c, 0x16);
473 int hci_get_conn_list(void __user *arg)
475 struct hci_conn_list_req req, *cl;
476 struct hci_conn_info *ci;
477 struct hci_dev *hdev;
479 int n = 0, size, err;
481 if (copy_from_user(&req, arg, sizeof(req)))
484 if (!req.conn_num || req.conn_num > (PAGE_SIZE * 2) / sizeof(*ci))
487 size = sizeof(req) + req.conn_num * sizeof(*ci);
489 if (!(cl = kmalloc(size, GFP_KERNEL)))
492 if (!(hdev = hci_dev_get(req.dev_id))) {
499 hci_dev_lock_bh(hdev);
500 list_for_each(p, &hdev->conn_hash.list) {
501 register struct hci_conn *c;
502 c = list_entry(p, struct hci_conn, list);
504 bacpy(&(ci + n)->bdaddr, &c->dst);
505 (ci + n)->handle = c->handle;
506 (ci + n)->type = c->type;
507 (ci + n)->out = c->out;
508 (ci + n)->state = c->state;
509 (ci + n)->link_mode = c->link_mode;
510 if (++n >= req.conn_num)
513 hci_dev_unlock_bh(hdev);
515 cl->dev_id = hdev->id;
517 size = sizeof(req) + n * sizeof(*ci);
521 err = copy_to_user(arg, cl, size);
524 return err ? -EFAULT : 0;
527 int hci_get_conn_info(struct hci_dev *hdev, void __user *arg)
529 struct hci_conn_info_req req;
530 struct hci_conn_info ci;
531 struct hci_conn *conn;
532 char __user *ptr = arg + sizeof(req);
534 if (copy_from_user(&req, arg, sizeof(req)))
537 hci_dev_lock_bh(hdev);
538 conn = hci_conn_hash_lookup_ba(hdev, req.type, &req.bdaddr);
540 bacpy(&ci.bdaddr, &conn->dst);
541 ci.handle = conn->handle;
542 ci.type = conn->type;
544 ci.state = conn->state;
545 ci.link_mode = conn->link_mode;
547 hci_dev_unlock_bh(hdev);
552 return copy_to_user(ptr, &ci, sizeof(ci)) ? -EFAULT : 0;