2 BlueZ - Bluetooth protocol stack for Linux
3 Copyright (C) 2000-2001 Qualcomm Incorporated
4 Copyright (C) 2011 ProFUSION Embedded Systems
6 Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
8 This program is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License version 2 as
10 published by the Free Software Foundation;
12 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
13 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
14 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
15 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
16 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
17 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
18 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
19 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
21 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
22 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
23 SOFTWARE IS DISCLAIMED.
26 /* Bluetooth HCI core. */
28 #include <linux/jiffies.h>
29 #include <linux/module.h>
30 #include <linux/kmod.h>
32 #include <linux/types.h>
33 #include <linux/errno.h>
34 #include <linux/kernel.h>
35 #include <linux/sched.h>
36 #include <linux/slab.h>
37 #include <linux/poll.h>
38 #include <linux/fcntl.h>
39 #include <linux/init.h>
40 #include <linux/skbuff.h>
41 #include <linux/workqueue.h>
42 #include <linux/interrupt.h>
43 #include <linux/notifier.h>
44 #include <linux/rfkill.h>
45 #include <linux/timer.h>
46 #include <linux/crypto.h>
49 #include <asm/system.h>
50 #include <linux/uaccess.h>
51 #include <asm/unaligned.h>
53 #include <net/bluetooth/bluetooth.h>
54 #include <net/bluetooth/hci_core.h>
56 #define AUTO_OFF_TIMEOUT 2000
60 static void hci_rx_work(struct work_struct
*work
);
61 static void hci_cmd_work(struct work_struct
*work
);
62 static void hci_tx_work(struct work_struct
*work
);
65 LIST_HEAD(hci_dev_list
);
66 DEFINE_RWLOCK(hci_dev_list_lock
);
68 /* HCI callback list */
69 LIST_HEAD(hci_cb_list
);
70 DEFINE_RWLOCK(hci_cb_list_lock
);
72 /* HCI notifiers list */
73 static ATOMIC_NOTIFIER_HEAD(hci_notifier
);
75 /* ---- HCI notifications ---- */
77 int hci_register_notifier(struct notifier_block
*nb
)
79 return atomic_notifier_chain_register(&hci_notifier
, nb
);
82 int hci_unregister_notifier(struct notifier_block
*nb
)
84 return atomic_notifier_chain_unregister(&hci_notifier
, nb
);
87 static void hci_notify(struct hci_dev
*hdev
, int event
)
89 atomic_notifier_call_chain(&hci_notifier
, event
, hdev
);
92 /* ---- HCI requests ---- */
94 void hci_req_complete(struct hci_dev
*hdev
, __u16 cmd
, int result
)
96 BT_DBG("%s command 0x%04x result 0x%2.2x", hdev
->name
, cmd
, result
);
98 /* If this is the init phase check if the completed command matches
99 * the last init command, and if not just return.
101 if (test_bit(HCI_INIT
, &hdev
->flags
) && hdev
->init_last_cmd
!= cmd
)
104 if (hdev
->req_status
== HCI_REQ_PEND
) {
105 hdev
->req_result
= result
;
106 hdev
->req_status
= HCI_REQ_DONE
;
107 wake_up_interruptible(&hdev
->req_wait_q
);
111 static void hci_req_cancel(struct hci_dev
*hdev
, int err
)
113 BT_DBG("%s err 0x%2.2x", hdev
->name
, err
);
115 if (hdev
->req_status
== HCI_REQ_PEND
) {
116 hdev
->req_result
= err
;
117 hdev
->req_status
= HCI_REQ_CANCELED
;
118 wake_up_interruptible(&hdev
->req_wait_q
);
122 /* Execute request and wait for completion. */
123 static int __hci_request(struct hci_dev
*hdev
, void (*req
)(struct hci_dev
*hdev
, unsigned long opt
),
124 unsigned long opt
, __u32 timeout
)
126 DECLARE_WAITQUEUE(wait
, current
);
129 BT_DBG("%s start", hdev
->name
);
131 hdev
->req_status
= HCI_REQ_PEND
;
133 add_wait_queue(&hdev
->req_wait_q
, &wait
);
134 set_current_state(TASK_INTERRUPTIBLE
);
137 schedule_timeout(timeout
);
139 remove_wait_queue(&hdev
->req_wait_q
, &wait
);
141 if (signal_pending(current
))
144 switch (hdev
->req_status
) {
146 err
= -bt_to_errno(hdev
->req_result
);
149 case HCI_REQ_CANCELED
:
150 err
= -hdev
->req_result
;
158 hdev
->req_status
= hdev
->req_result
= 0;
160 BT_DBG("%s end: err %d", hdev
->name
, err
);
165 static inline int hci_request(struct hci_dev
*hdev
, void (*req
)(struct hci_dev
*hdev
, unsigned long opt
),
166 unsigned long opt
, __u32 timeout
)
170 if (!test_bit(HCI_UP
, &hdev
->flags
))
173 /* Serialize all requests */
175 ret
= __hci_request(hdev
, req
, opt
, timeout
);
176 hci_req_unlock(hdev
);
181 static void hci_reset_req(struct hci_dev
*hdev
, unsigned long opt
)
183 BT_DBG("%s %ld", hdev
->name
, opt
);
186 set_bit(HCI_RESET
, &hdev
->flags
);
187 hci_send_cmd(hdev
, HCI_OP_RESET
, 0, NULL
);
190 static void bredr_init(struct hci_dev
*hdev
)
192 struct hci_cp_delete_stored_link_key cp
;
196 hdev
->flow_ctl_mode
= HCI_FLOW_CTL_MODE_PACKET_BASED
;
198 /* Mandatory initialization */
201 if (!test_bit(HCI_QUIRK_NO_RESET
, &hdev
->quirks
)) {
202 set_bit(HCI_RESET
, &hdev
->flags
);
203 hci_send_cmd(hdev
, HCI_OP_RESET
, 0, NULL
);
206 /* Read Local Supported Features */
207 hci_send_cmd(hdev
, HCI_OP_READ_LOCAL_FEATURES
, 0, NULL
);
209 /* Read Local Version */
210 hci_send_cmd(hdev
, HCI_OP_READ_LOCAL_VERSION
, 0, NULL
);
212 /* Read Buffer Size (ACL mtu, max pkt, etc.) */
213 hci_send_cmd(hdev
, HCI_OP_READ_BUFFER_SIZE
, 0, NULL
);
215 /* Read BD Address */
216 hci_send_cmd(hdev
, HCI_OP_READ_BD_ADDR
, 0, NULL
);
218 /* Read Class of Device */
219 hci_send_cmd(hdev
, HCI_OP_READ_CLASS_OF_DEV
, 0, NULL
);
221 /* Read Local Name */
222 hci_send_cmd(hdev
, HCI_OP_READ_LOCAL_NAME
, 0, NULL
);
224 /* Read Voice Setting */
225 hci_send_cmd(hdev
, HCI_OP_READ_VOICE_SETTING
, 0, NULL
);
227 /* Optional initialization */
229 /* Clear Event Filters */
230 flt_type
= HCI_FLT_CLEAR_ALL
;
231 hci_send_cmd(hdev
, HCI_OP_SET_EVENT_FLT
, 1, &flt_type
);
233 /* Connection accept timeout ~20 secs */
234 param
= cpu_to_le16(0x7d00);
235 hci_send_cmd(hdev
, HCI_OP_WRITE_CA_TIMEOUT
, 2, ¶m
);
237 bacpy(&cp
.bdaddr
, BDADDR_ANY
);
239 hci_send_cmd(hdev
, HCI_OP_DELETE_STORED_LINK_KEY
, sizeof(cp
), &cp
);
242 static void amp_init(struct hci_dev
*hdev
)
244 hdev
->flow_ctl_mode
= HCI_FLOW_CTL_MODE_BLOCK_BASED
;
247 hci_send_cmd(hdev
, HCI_OP_RESET
, 0, NULL
);
249 /* Read Local Version */
250 hci_send_cmd(hdev
, HCI_OP_READ_LOCAL_VERSION
, 0, NULL
);
253 static void hci_init_req(struct hci_dev
*hdev
, unsigned long opt
)
257 BT_DBG("%s %ld", hdev
->name
, opt
);
259 /* Driver initialization */
261 /* Special commands */
262 while ((skb
= skb_dequeue(&hdev
->driver_init
))) {
263 bt_cb(skb
)->pkt_type
= HCI_COMMAND_PKT
;
264 skb
->dev
= (void *) hdev
;
266 skb_queue_tail(&hdev
->cmd_q
, skb
);
267 queue_work(hdev
->workqueue
, &hdev
->cmd_work
);
269 skb_queue_purge(&hdev
->driver_init
);
271 switch (hdev
->dev_type
) {
281 BT_ERR("Unknown device type %d", hdev
->dev_type
);
287 static void hci_le_init_req(struct hci_dev
*hdev
, unsigned long opt
)
289 BT_DBG("%s", hdev
->name
);
291 /* Read LE buffer size */
292 hci_send_cmd(hdev
, HCI_OP_LE_READ_BUFFER_SIZE
, 0, NULL
);
295 static void hci_scan_req(struct hci_dev
*hdev
, unsigned long opt
)
299 BT_DBG("%s %x", hdev
->name
, scan
);
301 /* Inquiry and Page scans */
302 hci_send_cmd(hdev
, HCI_OP_WRITE_SCAN_ENABLE
, 1, &scan
);
305 static void hci_auth_req(struct hci_dev
*hdev
, unsigned long opt
)
309 BT_DBG("%s %x", hdev
->name
, auth
);
312 hci_send_cmd(hdev
, HCI_OP_WRITE_AUTH_ENABLE
, 1, &auth
);
315 static void hci_encrypt_req(struct hci_dev
*hdev
, unsigned long opt
)
319 BT_DBG("%s %x", hdev
->name
, encrypt
);
322 hci_send_cmd(hdev
, HCI_OP_WRITE_ENCRYPT_MODE
, 1, &encrypt
);
325 static void hci_linkpol_req(struct hci_dev
*hdev
, unsigned long opt
)
327 __le16 policy
= cpu_to_le16(opt
);
329 BT_DBG("%s %x", hdev
->name
, policy
);
331 /* Default link policy */
332 hci_send_cmd(hdev
, HCI_OP_WRITE_DEF_LINK_POLICY
, 2, &policy
);
335 /* Get HCI device by index.
336 * Device is held on return. */
337 struct hci_dev
*hci_dev_get(int index
)
339 struct hci_dev
*hdev
= NULL
, *d
;
346 read_lock(&hci_dev_list_lock
);
347 list_for_each_entry(d
, &hci_dev_list
, list
) {
348 if (d
->id
== index
) {
349 hdev
= hci_dev_hold(d
);
353 read_unlock(&hci_dev_list_lock
);
357 /* ---- Inquiry support ---- */
359 bool hci_discovery_active(struct hci_dev
*hdev
)
361 struct discovery_state
*discov
= &hdev
->discovery
;
363 switch (discov
->state
) {
364 case DISCOVERY_INQUIRY
:
365 case DISCOVERY_LE_SCAN
:
366 case DISCOVERY_RESOLVING
:
374 void hci_discovery_set_state(struct hci_dev
*hdev
, int state
)
376 BT_DBG("%s state %u -> %u", hdev
->name
, hdev
->discovery
.state
, state
);
378 if (hdev
->discovery
.state
== state
)
382 case DISCOVERY_STOPPED
:
383 mgmt_discovering(hdev
, 0);
385 case DISCOVERY_STARTING
:
387 case DISCOVERY_INQUIRY
:
388 case DISCOVERY_LE_SCAN
:
389 mgmt_discovering(hdev
, 1);
391 case DISCOVERY_RESOLVING
:
393 case DISCOVERY_STOPPING
:
397 hdev
->discovery
.state
= state
;
400 static void inquiry_cache_flush(struct hci_dev
*hdev
)
402 struct discovery_state
*cache
= &hdev
->discovery
;
403 struct inquiry_entry
*p
, *n
;
405 list_for_each_entry_safe(p
, n
, &cache
->all
, all
) {
410 INIT_LIST_HEAD(&cache
->unknown
);
411 INIT_LIST_HEAD(&cache
->resolve
);
412 cache
->state
= DISCOVERY_STOPPED
;
415 struct inquiry_entry
*hci_inquiry_cache_lookup(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
)
417 struct discovery_state
*cache
= &hdev
->discovery
;
418 struct inquiry_entry
*e
;
420 BT_DBG("cache %p, %s", cache
, batostr(bdaddr
));
422 list_for_each_entry(e
, &cache
->all
, all
) {
423 if (!bacmp(&e
->data
.bdaddr
, bdaddr
))
430 struct inquiry_entry
*hci_inquiry_cache_lookup_unknown(struct hci_dev
*hdev
,
433 struct discovery_state
*cache
= &hdev
->discovery
;
434 struct inquiry_entry
*e
;
436 BT_DBG("cache %p, %s", cache
, batostr(bdaddr
));
438 list_for_each_entry(e
, &cache
->unknown
, list
) {
439 if (!bacmp(&e
->data
.bdaddr
, bdaddr
))
446 struct inquiry_entry
*hci_inquiry_cache_lookup_resolve(struct hci_dev
*hdev
,
450 struct discovery_state
*cache
= &hdev
->discovery
;
451 struct inquiry_entry
*e
;
453 BT_DBG("cache %p bdaddr %s state %d", cache
, batostr(bdaddr
), state
);
455 list_for_each_entry(e
, &cache
->resolve
, list
) {
456 if (!bacmp(bdaddr
, BDADDR_ANY
) && e
->name_state
== state
)
458 if (!bacmp(&e
->data
.bdaddr
, bdaddr
))
465 void hci_inquiry_cache_update_resolve(struct hci_dev
*hdev
,
466 struct inquiry_entry
*ie
)
468 struct discovery_state
*cache
= &hdev
->discovery
;
469 struct list_head
*pos
= &cache
->resolve
;
470 struct inquiry_entry
*p
;
474 list_for_each_entry(p
, &cache
->resolve
, list
) {
475 if (p
->name_state
!= NAME_PENDING
&&
476 abs(p
->data
.rssi
) >= abs(ie
->data
.rssi
))
481 list_add(&ie
->list
, pos
);
484 bool hci_inquiry_cache_update(struct hci_dev
*hdev
, struct inquiry_data
*data
,
487 struct discovery_state
*cache
= &hdev
->discovery
;
488 struct inquiry_entry
*ie
;
490 BT_DBG("cache %p, %s", cache
, batostr(&data
->bdaddr
));
492 ie
= hci_inquiry_cache_lookup(hdev
, &data
->bdaddr
);
494 if (ie
->name_state
== NAME_NEEDED
&&
495 data
->rssi
!= ie
->data
.rssi
) {
496 ie
->data
.rssi
= data
->rssi
;
497 hci_inquiry_cache_update_resolve(hdev
, ie
);
503 /* Entry not in the cache. Add new one. */
504 ie
= kzalloc(sizeof(struct inquiry_entry
), GFP_ATOMIC
);
508 list_add(&ie
->all
, &cache
->all
);
511 ie
->name_state
= NAME_KNOWN
;
513 ie
->name_state
= NAME_NOT_KNOWN
;
514 list_add(&ie
->list
, &cache
->unknown
);
518 if (name_known
&& ie
->name_state
!= NAME_KNOWN
&&
519 ie
->name_state
!= NAME_PENDING
) {
520 ie
->name_state
= NAME_KNOWN
;
524 memcpy(&ie
->data
, data
, sizeof(*data
));
525 ie
->timestamp
= jiffies
;
526 cache
->timestamp
= jiffies
;
528 if (ie
->name_state
== NAME_NOT_KNOWN
)
534 static int inquiry_cache_dump(struct hci_dev
*hdev
, int num
, __u8
*buf
)
536 struct discovery_state
*cache
= &hdev
->discovery
;
537 struct inquiry_info
*info
= (struct inquiry_info
*) buf
;
538 struct inquiry_entry
*e
;
541 list_for_each_entry(e
, &cache
->all
, all
) {
542 struct inquiry_data
*data
= &e
->data
;
547 bacpy(&info
->bdaddr
, &data
->bdaddr
);
548 info
->pscan_rep_mode
= data
->pscan_rep_mode
;
549 info
->pscan_period_mode
= data
->pscan_period_mode
;
550 info
->pscan_mode
= data
->pscan_mode
;
551 memcpy(info
->dev_class
, data
->dev_class
, 3);
552 info
->clock_offset
= data
->clock_offset
;
558 BT_DBG("cache %p, copied %d", cache
, copied
);
562 static void hci_inq_req(struct hci_dev
*hdev
, unsigned long opt
)
564 struct hci_inquiry_req
*ir
= (struct hci_inquiry_req
*) opt
;
565 struct hci_cp_inquiry cp
;
567 BT_DBG("%s", hdev
->name
);
569 if (test_bit(HCI_INQUIRY
, &hdev
->flags
))
573 memcpy(&cp
.lap
, &ir
->lap
, 3);
574 cp
.length
= ir
->length
;
575 cp
.num_rsp
= ir
->num_rsp
;
576 hci_send_cmd(hdev
, HCI_OP_INQUIRY
, sizeof(cp
), &cp
);
579 int hci_inquiry(void __user
*arg
)
581 __u8 __user
*ptr
= arg
;
582 struct hci_inquiry_req ir
;
583 struct hci_dev
*hdev
;
584 int err
= 0, do_inquiry
= 0, max_rsp
;
588 if (copy_from_user(&ir
, ptr
, sizeof(ir
)))
591 hdev
= hci_dev_get(ir
.dev_id
);
596 if (inquiry_cache_age(hdev
) > INQUIRY_CACHE_AGE_MAX
||
597 inquiry_cache_empty(hdev
) ||
598 ir
.flags
& IREQ_CACHE_FLUSH
) {
599 inquiry_cache_flush(hdev
);
602 hci_dev_unlock(hdev
);
604 timeo
= ir
.length
* msecs_to_jiffies(2000);
607 err
= hci_request(hdev
, hci_inq_req
, (unsigned long)&ir
, timeo
);
612 /* for unlimited number of responses we will use buffer with 255 entries */
613 max_rsp
= (ir
.num_rsp
== 0) ? 255 : ir
.num_rsp
;
615 /* cache_dump can't sleep. Therefore we allocate temp buffer and then
616 * copy it to the user space.
618 buf
= kmalloc(sizeof(struct inquiry_info
) * max_rsp
, GFP_KERNEL
);
625 ir
.num_rsp
= inquiry_cache_dump(hdev
, max_rsp
, buf
);
626 hci_dev_unlock(hdev
);
628 BT_DBG("num_rsp %d", ir
.num_rsp
);
630 if (!copy_to_user(ptr
, &ir
, sizeof(ir
))) {
632 if (copy_to_user(ptr
, buf
, sizeof(struct inquiry_info
) *
645 /* ---- HCI ioctl helpers ---- */
647 int hci_dev_open(__u16 dev
)
649 struct hci_dev
*hdev
;
652 hdev
= hci_dev_get(dev
);
656 BT_DBG("%s %p", hdev
->name
, hdev
);
660 if (hdev
->rfkill
&& rfkill_blocked(hdev
->rfkill
)) {
665 if (test_bit(HCI_UP
, &hdev
->flags
)) {
670 if (test_bit(HCI_QUIRK_RAW_DEVICE
, &hdev
->quirks
))
671 set_bit(HCI_RAW
, &hdev
->flags
);
673 /* Treat all non BR/EDR controllers as raw devices if
674 enable_hs is not set */
675 if (hdev
->dev_type
!= HCI_BREDR
&& !enable_hs
)
676 set_bit(HCI_RAW
, &hdev
->flags
);
678 if (hdev
->open(hdev
)) {
683 if (!test_bit(HCI_RAW
, &hdev
->flags
)) {
684 atomic_set(&hdev
->cmd_cnt
, 1);
685 set_bit(HCI_INIT
, &hdev
->flags
);
686 hdev
->init_last_cmd
= 0;
688 ret
= __hci_request(hdev
, hci_init_req
, 0,
689 msecs_to_jiffies(HCI_INIT_TIMEOUT
));
691 if (lmp_host_le_capable(hdev
))
692 ret
= __hci_request(hdev
, hci_le_init_req
, 0,
693 msecs_to_jiffies(HCI_INIT_TIMEOUT
));
695 clear_bit(HCI_INIT
, &hdev
->flags
);
700 set_bit(HCI_UP
, &hdev
->flags
);
701 hci_notify(hdev
, HCI_DEV_UP
);
702 if (!test_bit(HCI_SETUP
, &hdev
->dev_flags
)) {
704 mgmt_powered(hdev
, 1);
705 hci_dev_unlock(hdev
);
708 /* Init failed, cleanup */
709 flush_work(&hdev
->tx_work
);
710 flush_work(&hdev
->cmd_work
);
711 flush_work(&hdev
->rx_work
);
713 skb_queue_purge(&hdev
->cmd_q
);
714 skb_queue_purge(&hdev
->rx_q
);
719 if (hdev
->sent_cmd
) {
720 kfree_skb(hdev
->sent_cmd
);
721 hdev
->sent_cmd
= NULL
;
729 hci_req_unlock(hdev
);
734 static int hci_dev_do_close(struct hci_dev
*hdev
)
736 BT_DBG("%s %p", hdev
->name
, hdev
);
738 hci_req_cancel(hdev
, ENODEV
);
741 if (!test_and_clear_bit(HCI_UP
, &hdev
->flags
)) {
742 del_timer_sync(&hdev
->cmd_timer
);
743 hci_req_unlock(hdev
);
747 /* Flush RX and TX works */
748 flush_work(&hdev
->tx_work
);
749 flush_work(&hdev
->rx_work
);
751 if (hdev
->discov_timeout
> 0) {
752 cancel_delayed_work(&hdev
->discov_off
);
753 hdev
->discov_timeout
= 0;
756 if (test_and_clear_bit(HCI_AUTO_OFF
, &hdev
->dev_flags
))
757 cancel_delayed_work(&hdev
->power_off
);
759 if (test_and_clear_bit(HCI_SERVICE_CACHE
, &hdev
->dev_flags
))
760 cancel_delayed_work(&hdev
->service_cache
);
762 cancel_delayed_work_sync(&hdev
->le_scan_disable
);
765 inquiry_cache_flush(hdev
);
766 hci_conn_hash_flush(hdev
);
767 hci_dev_unlock(hdev
);
769 hci_notify(hdev
, HCI_DEV_DOWN
);
775 skb_queue_purge(&hdev
->cmd_q
);
776 atomic_set(&hdev
->cmd_cnt
, 1);
777 if (!test_bit(HCI_RAW
, &hdev
->flags
) &&
778 test_bit(HCI_QUIRK_NO_RESET
, &hdev
->quirks
)) {
779 set_bit(HCI_INIT
, &hdev
->flags
);
780 __hci_request(hdev
, hci_reset_req
, 0,
781 msecs_to_jiffies(250));
782 clear_bit(HCI_INIT
, &hdev
->flags
);
786 flush_work(&hdev
->cmd_work
);
789 skb_queue_purge(&hdev
->rx_q
);
790 skb_queue_purge(&hdev
->cmd_q
);
791 skb_queue_purge(&hdev
->raw_q
);
793 /* Drop last sent command */
794 if (hdev
->sent_cmd
) {
795 del_timer_sync(&hdev
->cmd_timer
);
796 kfree_skb(hdev
->sent_cmd
);
797 hdev
->sent_cmd
= NULL
;
800 /* After this point our queues are empty
801 * and no tasks are scheduled. */
805 mgmt_powered(hdev
, 0);
806 hci_dev_unlock(hdev
);
811 hci_req_unlock(hdev
);
817 int hci_dev_close(__u16 dev
)
819 struct hci_dev
*hdev
;
822 hdev
= hci_dev_get(dev
);
825 err
= hci_dev_do_close(hdev
);
830 int hci_dev_reset(__u16 dev
)
832 struct hci_dev
*hdev
;
835 hdev
= hci_dev_get(dev
);
841 if (!test_bit(HCI_UP
, &hdev
->flags
))
845 skb_queue_purge(&hdev
->rx_q
);
846 skb_queue_purge(&hdev
->cmd_q
);
849 inquiry_cache_flush(hdev
);
850 hci_conn_hash_flush(hdev
);
851 hci_dev_unlock(hdev
);
856 atomic_set(&hdev
->cmd_cnt
, 1);
857 hdev
->acl_cnt
= 0; hdev
->sco_cnt
= 0; hdev
->le_cnt
= 0;
859 if (!test_bit(HCI_RAW
, &hdev
->flags
))
860 ret
= __hci_request(hdev
, hci_reset_req
, 0,
861 msecs_to_jiffies(HCI_INIT_TIMEOUT
));
864 hci_req_unlock(hdev
);
869 int hci_dev_reset_stat(__u16 dev
)
871 struct hci_dev
*hdev
;
874 hdev
= hci_dev_get(dev
);
878 memset(&hdev
->stat
, 0, sizeof(struct hci_dev_stats
));
885 int hci_dev_cmd(unsigned int cmd
, void __user
*arg
)
887 struct hci_dev
*hdev
;
888 struct hci_dev_req dr
;
891 if (copy_from_user(&dr
, arg
, sizeof(dr
)))
894 hdev
= hci_dev_get(dr
.dev_id
);
900 err
= hci_request(hdev
, hci_auth_req
, dr
.dev_opt
,
901 msecs_to_jiffies(HCI_INIT_TIMEOUT
));
905 if (!lmp_encrypt_capable(hdev
)) {
910 if (!test_bit(HCI_AUTH
, &hdev
->flags
)) {
911 /* Auth must be enabled first */
912 err
= hci_request(hdev
, hci_auth_req
, dr
.dev_opt
,
913 msecs_to_jiffies(HCI_INIT_TIMEOUT
));
918 err
= hci_request(hdev
, hci_encrypt_req
, dr
.dev_opt
,
919 msecs_to_jiffies(HCI_INIT_TIMEOUT
));
923 err
= hci_request(hdev
, hci_scan_req
, dr
.dev_opt
,
924 msecs_to_jiffies(HCI_INIT_TIMEOUT
));
928 err
= hci_request(hdev
, hci_linkpol_req
, dr
.dev_opt
,
929 msecs_to_jiffies(HCI_INIT_TIMEOUT
));
933 hdev
->link_mode
= ((__u16
) dr
.dev_opt
) &
934 (HCI_LM_MASTER
| HCI_LM_ACCEPT
);
938 hdev
->pkt_type
= (__u16
) dr
.dev_opt
;
942 hdev
->acl_mtu
= *((__u16
*) &dr
.dev_opt
+ 1);
943 hdev
->acl_pkts
= *((__u16
*) &dr
.dev_opt
+ 0);
947 hdev
->sco_mtu
= *((__u16
*) &dr
.dev_opt
+ 1);
948 hdev
->sco_pkts
= *((__u16
*) &dr
.dev_opt
+ 0);
960 int hci_get_dev_list(void __user
*arg
)
962 struct hci_dev
*hdev
;
963 struct hci_dev_list_req
*dl
;
964 struct hci_dev_req
*dr
;
965 int n
= 0, size
, err
;
968 if (get_user(dev_num
, (__u16 __user
*) arg
))
971 if (!dev_num
|| dev_num
> (PAGE_SIZE
* 2) / sizeof(*dr
))
974 size
= sizeof(*dl
) + dev_num
* sizeof(*dr
);
976 dl
= kzalloc(size
, GFP_KERNEL
);
982 read_lock(&hci_dev_list_lock
);
983 list_for_each_entry(hdev
, &hci_dev_list
, list
) {
984 if (test_and_clear_bit(HCI_AUTO_OFF
, &hdev
->dev_flags
))
985 cancel_delayed_work(&hdev
->power_off
);
987 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
988 set_bit(HCI_PAIRABLE
, &hdev
->dev_flags
);
990 (dr
+ n
)->dev_id
= hdev
->id
;
991 (dr
+ n
)->dev_opt
= hdev
->flags
;
996 read_unlock(&hci_dev_list_lock
);
999 size
= sizeof(*dl
) + n
* sizeof(*dr
);
1001 err
= copy_to_user(arg
, dl
, size
);
1004 return err
? -EFAULT
: 0;
1007 int hci_get_dev_info(void __user
*arg
)
1009 struct hci_dev
*hdev
;
1010 struct hci_dev_info di
;
1013 if (copy_from_user(&di
, arg
, sizeof(di
)))
1016 hdev
= hci_dev_get(di
.dev_id
);
1020 if (test_and_clear_bit(HCI_AUTO_OFF
, &hdev
->dev_flags
))
1021 cancel_delayed_work_sync(&hdev
->power_off
);
1023 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
1024 set_bit(HCI_PAIRABLE
, &hdev
->dev_flags
);
1026 strcpy(di
.name
, hdev
->name
);
1027 di
.bdaddr
= hdev
->bdaddr
;
1028 di
.type
= (hdev
->bus
& 0x0f) | (hdev
->dev_type
<< 4);
1029 di
.flags
= hdev
->flags
;
1030 di
.pkt_type
= hdev
->pkt_type
;
1031 di
.acl_mtu
= hdev
->acl_mtu
;
1032 di
.acl_pkts
= hdev
->acl_pkts
;
1033 di
.sco_mtu
= hdev
->sco_mtu
;
1034 di
.sco_pkts
= hdev
->sco_pkts
;
1035 di
.link_policy
= hdev
->link_policy
;
1036 di
.link_mode
= hdev
->link_mode
;
1038 memcpy(&di
.stat
, &hdev
->stat
, sizeof(di
.stat
));
1039 memcpy(&di
.features
, &hdev
->features
, sizeof(di
.features
));
1041 if (copy_to_user(arg
, &di
, sizeof(di
)))
1049 /* ---- Interface to HCI drivers ---- */
1051 static int hci_rfkill_set_block(void *data
, bool blocked
)
1053 struct hci_dev
*hdev
= data
;
1055 BT_DBG("%p name %s blocked %d", hdev
, hdev
->name
, blocked
);
1060 hci_dev_do_close(hdev
);
1065 static const struct rfkill_ops hci_rfkill_ops
= {
1066 .set_block
= hci_rfkill_set_block
,
1069 /* Alloc HCI device */
1070 struct hci_dev
*hci_alloc_dev(void)
1072 struct hci_dev
*hdev
;
1074 hdev
= kzalloc(sizeof(struct hci_dev
), GFP_KERNEL
);
1078 hci_init_sysfs(hdev
);
1079 skb_queue_head_init(&hdev
->driver_init
);
1083 EXPORT_SYMBOL(hci_alloc_dev
);
1085 /* Free HCI device */
1086 void hci_free_dev(struct hci_dev
*hdev
)
1088 skb_queue_purge(&hdev
->driver_init
);
1090 /* will free via device release */
1091 put_device(&hdev
->dev
);
1093 EXPORT_SYMBOL(hci_free_dev
);
1095 static void hci_power_on(struct work_struct
*work
)
1097 struct hci_dev
*hdev
= container_of(work
, struct hci_dev
, power_on
);
1099 BT_DBG("%s", hdev
->name
);
1101 if (hci_dev_open(hdev
->id
) < 0)
1104 if (test_bit(HCI_AUTO_OFF
, &hdev
->dev_flags
))
1105 schedule_delayed_work(&hdev
->power_off
,
1106 msecs_to_jiffies(AUTO_OFF_TIMEOUT
));
1108 if (test_and_clear_bit(HCI_SETUP
, &hdev
->dev_flags
))
1109 mgmt_index_added(hdev
);
1112 static void hci_power_off(struct work_struct
*work
)
1114 struct hci_dev
*hdev
= container_of(work
, struct hci_dev
,
1117 BT_DBG("%s", hdev
->name
);
1119 clear_bit(HCI_AUTO_OFF
, &hdev
->dev_flags
);
1121 hci_dev_close(hdev
->id
);
1124 static void hci_discov_off(struct work_struct
*work
)
1126 struct hci_dev
*hdev
;
1127 u8 scan
= SCAN_PAGE
;
1129 hdev
= container_of(work
, struct hci_dev
, discov_off
.work
);
1131 BT_DBG("%s", hdev
->name
);
1135 hci_send_cmd(hdev
, HCI_OP_WRITE_SCAN_ENABLE
, sizeof(scan
), &scan
);
1137 hdev
->discov_timeout
= 0;
1139 hci_dev_unlock(hdev
);
1142 int hci_uuids_clear(struct hci_dev
*hdev
)
1144 struct list_head
*p
, *n
;
1146 list_for_each_safe(p
, n
, &hdev
->uuids
) {
1147 struct bt_uuid
*uuid
;
1149 uuid
= list_entry(p
, struct bt_uuid
, list
);
1158 int hci_link_keys_clear(struct hci_dev
*hdev
)
1160 struct list_head
*p
, *n
;
1162 list_for_each_safe(p
, n
, &hdev
->link_keys
) {
1163 struct link_key
*key
;
1165 key
= list_entry(p
, struct link_key
, list
);
1174 int hci_smp_ltks_clear(struct hci_dev
*hdev
)
1176 struct smp_ltk
*k
, *tmp
;
1178 list_for_each_entry_safe(k
, tmp
, &hdev
->long_term_keys
, list
) {
1186 struct link_key
*hci_find_link_key(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
)
1190 list_for_each_entry(k
, &hdev
->link_keys
, list
)
1191 if (bacmp(bdaddr
, &k
->bdaddr
) == 0)
1197 static int hci_persistent_key(struct hci_dev
*hdev
, struct hci_conn
*conn
,
1198 u8 key_type
, u8 old_key_type
)
1201 if (key_type
< 0x03)
1204 /* Debug keys are insecure so don't store them persistently */
1205 if (key_type
== HCI_LK_DEBUG_COMBINATION
)
1208 /* Changed combination key and there's no previous one */
1209 if (key_type
== HCI_LK_CHANGED_COMBINATION
&& old_key_type
== 0xff)
1212 /* Security mode 3 case */
1216 /* Neither local nor remote side had no-bonding as requirement */
1217 if (conn
->auth_type
> 0x01 && conn
->remote_auth
> 0x01)
1220 /* Local side had dedicated bonding as requirement */
1221 if (conn
->auth_type
== 0x02 || conn
->auth_type
== 0x03)
1224 /* Remote side had dedicated bonding as requirement */
1225 if (conn
->remote_auth
== 0x02 || conn
->remote_auth
== 0x03)
1228 /* If none of the above criteria match, then don't store the key
1233 struct smp_ltk
*hci_find_ltk(struct hci_dev
*hdev
, __le16 ediv
, u8 rand
[8])
1237 list_for_each_entry(k
, &hdev
->long_term_keys
, list
) {
1238 if (k
->ediv
!= ediv
||
1239 memcmp(rand
, k
->rand
, sizeof(k
->rand
)))
1247 EXPORT_SYMBOL(hci_find_ltk
);
1249 struct smp_ltk
*hci_find_ltk_by_addr(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
,
1254 list_for_each_entry(k
, &hdev
->long_term_keys
, list
)
1255 if (addr_type
== k
->bdaddr_type
&&
1256 bacmp(bdaddr
, &k
->bdaddr
) == 0)
1261 EXPORT_SYMBOL(hci_find_ltk_by_addr
);
1263 int hci_add_link_key(struct hci_dev
*hdev
, struct hci_conn
*conn
, int new_key
,
1264 bdaddr_t
*bdaddr
, u8
*val
, u8 type
, u8 pin_len
)
1266 struct link_key
*key
, *old_key
;
1267 u8 old_key_type
, persistent
;
1269 old_key
= hci_find_link_key(hdev
, bdaddr
);
1271 old_key_type
= old_key
->type
;
1274 old_key_type
= conn
? conn
->key_type
: 0xff;
1275 key
= kzalloc(sizeof(*key
), GFP_ATOMIC
);
1278 list_add(&key
->list
, &hdev
->link_keys
);
1281 BT_DBG("%s key for %s type %u", hdev
->name
, batostr(bdaddr
), type
);
1283 /* Some buggy controller combinations generate a changed
1284 * combination key for legacy pairing even when there's no
1286 if (type
== HCI_LK_CHANGED_COMBINATION
&&
1287 (!conn
|| conn
->remote_auth
== 0xff) &&
1288 old_key_type
== 0xff) {
1289 type
= HCI_LK_COMBINATION
;
1291 conn
->key_type
= type
;
1294 bacpy(&key
->bdaddr
, bdaddr
);
1295 memcpy(key
->val
, val
, 16);
1296 key
->pin_len
= pin_len
;
1298 if (type
== HCI_LK_CHANGED_COMBINATION
)
1299 key
->type
= old_key_type
;
1306 persistent
= hci_persistent_key(hdev
, conn
, type
, old_key_type
);
1308 mgmt_new_link_key(hdev
, key
, persistent
);
1311 list_del(&key
->list
);
1318 int hci_add_ltk(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
, u8 addr_type
, u8 type
,
1319 int new_key
, u8 authenticated
, u8 tk
[16],
1320 u8 enc_size
, u16 ediv
, u8 rand
[8])
1322 struct smp_ltk
*key
, *old_key
;
1324 if (!(type
& HCI_SMP_STK
) && !(type
& HCI_SMP_LTK
))
1327 old_key
= hci_find_ltk_by_addr(hdev
, bdaddr
, addr_type
);
1331 key
= kzalloc(sizeof(*key
), GFP_ATOMIC
);
1334 list_add(&key
->list
, &hdev
->long_term_keys
);
1337 bacpy(&key
->bdaddr
, bdaddr
);
1338 key
->bdaddr_type
= addr_type
;
1339 memcpy(key
->val
, tk
, sizeof(key
->val
));
1340 key
->authenticated
= authenticated
;
1342 key
->enc_size
= enc_size
;
1344 memcpy(key
->rand
, rand
, sizeof(key
->rand
));
1349 if (type
& HCI_SMP_LTK
)
1350 mgmt_new_ltk(hdev
, key
, 1);
1355 int hci_remove_link_key(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
)
1357 struct link_key
*key
;
1359 key
= hci_find_link_key(hdev
, bdaddr
);
1363 BT_DBG("%s removing %s", hdev
->name
, batostr(bdaddr
));
1365 list_del(&key
->list
);
1371 int hci_remove_ltk(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
)
1373 struct smp_ltk
*k
, *tmp
;
1375 list_for_each_entry_safe(k
, tmp
, &hdev
->long_term_keys
, list
) {
1376 if (bacmp(bdaddr
, &k
->bdaddr
))
1379 BT_DBG("%s removing %s", hdev
->name
, batostr(bdaddr
));
1388 /* HCI command timer function */
1389 static void hci_cmd_timer(unsigned long arg
)
1391 struct hci_dev
*hdev
= (void *) arg
;
1393 BT_ERR("%s command tx timeout", hdev
->name
);
1394 atomic_set(&hdev
->cmd_cnt
, 1);
1395 queue_work(hdev
->workqueue
, &hdev
->cmd_work
);
1398 struct oob_data
*hci_find_remote_oob_data(struct hci_dev
*hdev
,
1401 struct oob_data
*data
;
1403 list_for_each_entry(data
, &hdev
->remote_oob_data
, list
)
1404 if (bacmp(bdaddr
, &data
->bdaddr
) == 0)
1410 int hci_remove_remote_oob_data(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
)
1412 struct oob_data
*data
;
1414 data
= hci_find_remote_oob_data(hdev
, bdaddr
);
1418 BT_DBG("%s removing %s", hdev
->name
, batostr(bdaddr
));
1420 list_del(&data
->list
);
1426 int hci_remote_oob_data_clear(struct hci_dev
*hdev
)
1428 struct oob_data
*data
, *n
;
1430 list_for_each_entry_safe(data
, n
, &hdev
->remote_oob_data
, list
) {
1431 list_del(&data
->list
);
1438 int hci_add_remote_oob_data(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
, u8
*hash
,
1441 struct oob_data
*data
;
1443 data
= hci_find_remote_oob_data(hdev
, bdaddr
);
1446 data
= kmalloc(sizeof(*data
), GFP_ATOMIC
);
1450 bacpy(&data
->bdaddr
, bdaddr
);
1451 list_add(&data
->list
, &hdev
->remote_oob_data
);
1454 memcpy(data
->hash
, hash
, sizeof(data
->hash
));
1455 memcpy(data
->randomizer
, randomizer
, sizeof(data
->randomizer
));
1457 BT_DBG("%s for %s", hdev
->name
, batostr(bdaddr
));
1462 struct bdaddr_list
*hci_blacklist_lookup(struct hci_dev
*hdev
,
1465 struct bdaddr_list
*b
;
1467 list_for_each_entry(b
, &hdev
->blacklist
, list
)
1468 if (bacmp(bdaddr
, &b
->bdaddr
) == 0)
1474 int hci_blacklist_clear(struct hci_dev
*hdev
)
1476 struct list_head
*p
, *n
;
1478 list_for_each_safe(p
, n
, &hdev
->blacklist
) {
1479 struct bdaddr_list
*b
;
1481 b
= list_entry(p
, struct bdaddr_list
, list
);
1490 int hci_blacklist_add(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
)
1492 struct bdaddr_list
*entry
;
1494 if (bacmp(bdaddr
, BDADDR_ANY
) == 0)
1497 if (hci_blacklist_lookup(hdev
, bdaddr
))
1500 entry
= kzalloc(sizeof(struct bdaddr_list
), GFP_KERNEL
);
1504 bacpy(&entry
->bdaddr
, bdaddr
);
1506 list_add(&entry
->list
, &hdev
->blacklist
);
1508 return mgmt_device_blocked(hdev
, bdaddr
);
1511 int hci_blacklist_del(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
)
1513 struct bdaddr_list
*entry
;
1515 if (bacmp(bdaddr
, BDADDR_ANY
) == 0)
1516 return hci_blacklist_clear(hdev
);
1518 entry
= hci_blacklist_lookup(hdev
, bdaddr
);
1522 list_del(&entry
->list
);
1525 return mgmt_device_unblocked(hdev
, bdaddr
);
1528 static void hci_clear_adv_cache(struct work_struct
*work
)
1530 struct hci_dev
*hdev
= container_of(work
, struct hci_dev
,
1535 hci_adv_entries_clear(hdev
);
1537 hci_dev_unlock(hdev
);
1540 int hci_adv_entries_clear(struct hci_dev
*hdev
)
1542 struct adv_entry
*entry
, *tmp
;
1544 list_for_each_entry_safe(entry
, tmp
, &hdev
->adv_entries
, list
) {
1545 list_del(&entry
->list
);
1549 BT_DBG("%s adv cache cleared", hdev
->name
);
1554 struct adv_entry
*hci_find_adv_entry(struct hci_dev
*hdev
, bdaddr_t
*bdaddr
)
1556 struct adv_entry
*entry
;
1558 list_for_each_entry(entry
, &hdev
->adv_entries
, list
)
1559 if (bacmp(bdaddr
, &entry
->bdaddr
) == 0)
1565 static inline int is_connectable_adv(u8 evt_type
)
1567 if (evt_type
== ADV_IND
|| evt_type
== ADV_DIRECT_IND
)
1573 int hci_add_adv_entry(struct hci_dev
*hdev
,
1574 struct hci_ev_le_advertising_info
*ev
)
1576 struct adv_entry
*entry
;
1578 if (!is_connectable_adv(ev
->evt_type
))
1581 /* Only new entries should be added to adv_entries. So, if
1582 * bdaddr was found, don't add it. */
1583 if (hci_find_adv_entry(hdev
, &ev
->bdaddr
))
1586 entry
= kzalloc(sizeof(*entry
), GFP_KERNEL
);
1590 bacpy(&entry
->bdaddr
, &ev
->bdaddr
);
1591 entry
->bdaddr_type
= ev
->bdaddr_type
;
1593 list_add(&entry
->list
, &hdev
->adv_entries
);
1595 BT_DBG("%s adv entry added: address %s type %u", hdev
->name
,
1596 batostr(&entry
->bdaddr
), entry
->bdaddr_type
);
1601 static void le_scan_param_req(struct hci_dev
*hdev
, unsigned long opt
)
1603 struct le_scan_params
*param
= (struct le_scan_params
*) opt
;
1604 struct hci_cp_le_set_scan_param cp
;
1606 memset(&cp
, 0, sizeof(cp
));
1607 cp
.type
= param
->type
;
1608 cp
.interval
= cpu_to_le16(param
->interval
);
1609 cp
.window
= cpu_to_le16(param
->window
);
1611 hci_send_cmd(hdev
, HCI_OP_LE_SET_SCAN_PARAM
, sizeof(cp
), &cp
);
1614 static void le_scan_enable_req(struct hci_dev
*hdev
, unsigned long opt
)
1616 struct hci_cp_le_set_scan_enable cp
;
1618 memset(&cp
, 0, sizeof(cp
));
1621 hci_send_cmd(hdev
, HCI_OP_LE_SET_SCAN_ENABLE
, sizeof(cp
), &cp
);
1624 static int hci_do_le_scan(struct hci_dev
*hdev
, u8 type
, u16 interval
,
1625 u16 window
, int timeout
)
1627 long timeo
= msecs_to_jiffies(3000);
1628 struct le_scan_params param
;
1631 BT_DBG("%s", hdev
->name
);
1633 if (test_bit(HCI_LE_SCAN
, &hdev
->dev_flags
))
1634 return -EINPROGRESS
;
1637 param
.interval
= interval
;
1638 param
.window
= window
;
1642 err
= __hci_request(hdev
, le_scan_param_req
, (unsigned long) ¶m
,
1645 err
= __hci_request(hdev
, le_scan_enable_req
, 0, timeo
);
1647 hci_req_unlock(hdev
);
1652 schedule_delayed_work(&hdev
->le_scan_disable
,
1653 msecs_to_jiffies(timeout
));
1658 static void le_scan_disable_work(struct work_struct
*work
)
1660 struct hci_dev
*hdev
= container_of(work
, struct hci_dev
,
1661 le_scan_disable
.work
);
1662 struct hci_cp_le_set_scan_enable cp
;
1664 BT_DBG("%s", hdev
->name
);
1666 memset(&cp
, 0, sizeof(cp
));
1668 hci_send_cmd(hdev
, HCI_OP_LE_SET_SCAN_ENABLE
, sizeof(cp
), &cp
);
1671 /* Register HCI device */
1672 int hci_register_dev(struct hci_dev
*hdev
)
1674 struct list_head
*head
= &hci_dev_list
, *p
;
1677 BT_DBG("%p name %s bus %d", hdev
, hdev
->name
, hdev
->bus
);
1679 if (!hdev
->open
|| !hdev
->close
)
1682 /* Do not allow HCI_AMP devices to register at index 0,
1683 * so the index can be used as the AMP controller ID.
1685 id
= (hdev
->dev_type
== HCI_BREDR
) ? 0 : 1;
1687 write_lock(&hci_dev_list_lock
);
1689 /* Find first available device id */
1690 list_for_each(p
, &hci_dev_list
) {
1691 if (list_entry(p
, struct hci_dev
, list
)->id
!= id
)
1696 sprintf(hdev
->name
, "hci%d", id
);
1698 list_add_tail(&hdev
->list
, head
);
1700 mutex_init(&hdev
->lock
);
1703 hdev
->dev_flags
= 0;
1704 hdev
->pkt_type
= (HCI_DM1
| HCI_DH1
| HCI_HV1
);
1705 hdev
->esco_type
= (ESCO_HV1
);
1706 hdev
->link_mode
= (HCI_LM_ACCEPT
);
1707 hdev
->io_capability
= 0x03; /* No Input No Output */
1709 hdev
->idle_timeout
= 0;
1710 hdev
->sniff_max_interval
= 800;
1711 hdev
->sniff_min_interval
= 80;
1713 INIT_WORK(&hdev
->rx_work
, hci_rx_work
);
1714 INIT_WORK(&hdev
->cmd_work
, hci_cmd_work
);
1715 INIT_WORK(&hdev
->tx_work
, hci_tx_work
);
1718 skb_queue_head_init(&hdev
->rx_q
);
1719 skb_queue_head_init(&hdev
->cmd_q
);
1720 skb_queue_head_init(&hdev
->raw_q
);
1722 setup_timer(&hdev
->cmd_timer
, hci_cmd_timer
, (unsigned long) hdev
);
1724 for (i
= 0; i
< NUM_REASSEMBLY
; i
++)
1725 hdev
->reassembly
[i
] = NULL
;
1727 init_waitqueue_head(&hdev
->req_wait_q
);
1728 mutex_init(&hdev
->req_lock
);
1730 discovery_init(hdev
);
1732 hci_conn_hash_init(hdev
);
1734 INIT_LIST_HEAD(&hdev
->mgmt_pending
);
1736 INIT_LIST_HEAD(&hdev
->blacklist
);
1738 INIT_LIST_HEAD(&hdev
->uuids
);
1740 INIT_LIST_HEAD(&hdev
->link_keys
);
1741 INIT_LIST_HEAD(&hdev
->long_term_keys
);
1743 INIT_LIST_HEAD(&hdev
->remote_oob_data
);
1745 INIT_LIST_HEAD(&hdev
->adv_entries
);
1747 INIT_DELAYED_WORK(&hdev
->adv_work
, hci_clear_adv_cache
);
1748 INIT_WORK(&hdev
->power_on
, hci_power_on
);
1749 INIT_DELAYED_WORK(&hdev
->power_off
, hci_power_off
);
1751 INIT_DELAYED_WORK(&hdev
->discov_off
, hci_discov_off
);
1753 memset(&hdev
->stat
, 0, sizeof(struct hci_dev_stats
));
1755 atomic_set(&hdev
->promisc
, 0);
1757 INIT_DELAYED_WORK(&hdev
->le_scan_disable
, le_scan_disable_work
);
1759 write_unlock(&hci_dev_list_lock
);
1761 hdev
->workqueue
= alloc_workqueue(hdev
->name
, WQ_HIGHPRI
| WQ_UNBOUND
|
1763 if (!hdev
->workqueue
) {
1768 error
= hci_add_sysfs(hdev
);
1772 hdev
->rfkill
= rfkill_alloc(hdev
->name
, &hdev
->dev
,
1773 RFKILL_TYPE_BLUETOOTH
, &hci_rfkill_ops
, hdev
);
1775 if (rfkill_register(hdev
->rfkill
) < 0) {
1776 rfkill_destroy(hdev
->rfkill
);
1777 hdev
->rfkill
= NULL
;
1781 set_bit(HCI_AUTO_OFF
, &hdev
->dev_flags
);
1782 set_bit(HCI_SETUP
, &hdev
->dev_flags
);
1783 schedule_work(&hdev
->power_on
);
1785 hci_notify(hdev
, HCI_DEV_REG
);
1791 destroy_workqueue(hdev
->workqueue
);
1793 write_lock(&hci_dev_list_lock
);
1794 list_del(&hdev
->list
);
1795 write_unlock(&hci_dev_list_lock
);
1799 EXPORT_SYMBOL(hci_register_dev
);
1801 /* Unregister HCI device */
1802 void hci_unregister_dev(struct hci_dev
*hdev
)
1806 BT_DBG("%p name %s bus %d", hdev
, hdev
->name
, hdev
->bus
);
1808 write_lock(&hci_dev_list_lock
);
1809 list_del(&hdev
->list
);
1810 write_unlock(&hci_dev_list_lock
);
1812 hci_dev_do_close(hdev
);
1814 for (i
= 0; i
< NUM_REASSEMBLY
; i
++)
1815 kfree_skb(hdev
->reassembly
[i
]);
1817 if (!test_bit(HCI_INIT
, &hdev
->flags
) &&
1818 !test_bit(HCI_SETUP
, &hdev
->dev_flags
)) {
1820 mgmt_index_removed(hdev
);
1821 hci_dev_unlock(hdev
);
1824 /* mgmt_index_removed should take care of emptying the
1826 BUG_ON(!list_empty(&hdev
->mgmt_pending
));
1828 hci_notify(hdev
, HCI_DEV_UNREG
);
1831 rfkill_unregister(hdev
->rfkill
);
1832 rfkill_destroy(hdev
->rfkill
);
1835 hci_del_sysfs(hdev
);
1837 cancel_delayed_work_sync(&hdev
->adv_work
);
1839 destroy_workqueue(hdev
->workqueue
);
1842 hci_blacklist_clear(hdev
);
1843 hci_uuids_clear(hdev
);
1844 hci_link_keys_clear(hdev
);
1845 hci_smp_ltks_clear(hdev
);
1846 hci_remote_oob_data_clear(hdev
);
1847 hci_adv_entries_clear(hdev
);
1848 hci_dev_unlock(hdev
);
1852 EXPORT_SYMBOL(hci_unregister_dev
);
1854 /* Suspend HCI device */
1855 int hci_suspend_dev(struct hci_dev
*hdev
)
1857 hci_notify(hdev
, HCI_DEV_SUSPEND
);
1860 EXPORT_SYMBOL(hci_suspend_dev
);
1862 /* Resume HCI device */
1863 int hci_resume_dev(struct hci_dev
*hdev
)
1865 hci_notify(hdev
, HCI_DEV_RESUME
);
1868 EXPORT_SYMBOL(hci_resume_dev
);
1870 /* Receive frame from HCI drivers */
1871 int hci_recv_frame(struct sk_buff
*skb
)
1873 struct hci_dev
*hdev
= (struct hci_dev
*) skb
->dev
;
1874 if (!hdev
|| (!test_bit(HCI_UP
, &hdev
->flags
)
1875 && !test_bit(HCI_INIT
, &hdev
->flags
))) {
1881 bt_cb(skb
)->incoming
= 1;
1884 __net_timestamp(skb
);
1886 skb_queue_tail(&hdev
->rx_q
, skb
);
1887 queue_work(hdev
->workqueue
, &hdev
->rx_work
);
1891 EXPORT_SYMBOL(hci_recv_frame
);
1893 static int hci_reassembly(struct hci_dev
*hdev
, int type
, void *data
,
1894 int count
, __u8 index
)
1899 struct sk_buff
*skb
;
1900 struct bt_skb_cb
*scb
;
1902 if ((type
< HCI_ACLDATA_PKT
|| type
> HCI_EVENT_PKT
) ||
1903 index
>= NUM_REASSEMBLY
)
1906 skb
= hdev
->reassembly
[index
];
1910 case HCI_ACLDATA_PKT
:
1911 len
= HCI_MAX_FRAME_SIZE
;
1912 hlen
= HCI_ACL_HDR_SIZE
;
1915 len
= HCI_MAX_EVENT_SIZE
;
1916 hlen
= HCI_EVENT_HDR_SIZE
;
1918 case HCI_SCODATA_PKT
:
1919 len
= HCI_MAX_SCO_SIZE
;
1920 hlen
= HCI_SCO_HDR_SIZE
;
1924 skb
= bt_skb_alloc(len
, GFP_ATOMIC
);
1928 scb
= (void *) skb
->cb
;
1930 scb
->pkt_type
= type
;
1932 skb
->dev
= (void *) hdev
;
1933 hdev
->reassembly
[index
] = skb
;
1937 scb
= (void *) skb
->cb
;
1938 len
= min(scb
->expect
, (__u16
)count
);
1940 memcpy(skb_put(skb
, len
), data
, len
);
1949 if (skb
->len
== HCI_EVENT_HDR_SIZE
) {
1950 struct hci_event_hdr
*h
= hci_event_hdr(skb
);
1951 scb
->expect
= h
->plen
;
1953 if (skb_tailroom(skb
) < scb
->expect
) {
1955 hdev
->reassembly
[index
] = NULL
;
1961 case HCI_ACLDATA_PKT
:
1962 if (skb
->len
== HCI_ACL_HDR_SIZE
) {
1963 struct hci_acl_hdr
*h
= hci_acl_hdr(skb
);
1964 scb
->expect
= __le16_to_cpu(h
->dlen
);
1966 if (skb_tailroom(skb
) < scb
->expect
) {
1968 hdev
->reassembly
[index
] = NULL
;
1974 case HCI_SCODATA_PKT
:
1975 if (skb
->len
== HCI_SCO_HDR_SIZE
) {
1976 struct hci_sco_hdr
*h
= hci_sco_hdr(skb
);
1977 scb
->expect
= h
->dlen
;
1979 if (skb_tailroom(skb
) < scb
->expect
) {
1981 hdev
->reassembly
[index
] = NULL
;
1988 if (scb
->expect
== 0) {
1989 /* Complete frame */
1991 bt_cb(skb
)->pkt_type
= type
;
1992 hci_recv_frame(skb
);
1994 hdev
->reassembly
[index
] = NULL
;
2002 int hci_recv_fragment(struct hci_dev
*hdev
, int type
, void *data
, int count
)
2006 if (type
< HCI_ACLDATA_PKT
|| type
> HCI_EVENT_PKT
)
2010 rem
= hci_reassembly(hdev
, type
, data
, count
, type
- 1);
2014 data
+= (count
- rem
);
2020 EXPORT_SYMBOL(hci_recv_fragment
);
2022 #define STREAM_REASSEMBLY 0
2024 int hci_recv_stream_fragment(struct hci_dev
*hdev
, void *data
, int count
)
2030 struct sk_buff
*skb
= hdev
->reassembly
[STREAM_REASSEMBLY
];
2033 struct { char type
; } *pkt
;
2035 /* Start of the frame */
2042 type
= bt_cb(skb
)->pkt_type
;
2044 rem
= hci_reassembly(hdev
, type
, data
, count
,
2049 data
+= (count
- rem
);
2055 EXPORT_SYMBOL(hci_recv_stream_fragment
);
2057 /* ---- Interface to upper protocols ---- */
2059 int hci_register_cb(struct hci_cb
*cb
)
2061 BT_DBG("%p name %s", cb
, cb
->name
);
2063 write_lock(&hci_cb_list_lock
);
2064 list_add(&cb
->list
, &hci_cb_list
);
2065 write_unlock(&hci_cb_list_lock
);
2069 EXPORT_SYMBOL(hci_register_cb
);
2071 int hci_unregister_cb(struct hci_cb
*cb
)
2073 BT_DBG("%p name %s", cb
, cb
->name
);
2075 write_lock(&hci_cb_list_lock
);
2076 list_del(&cb
->list
);
2077 write_unlock(&hci_cb_list_lock
);
2081 EXPORT_SYMBOL(hci_unregister_cb
);
2083 static int hci_send_frame(struct sk_buff
*skb
)
2085 struct hci_dev
*hdev
= (struct hci_dev
*) skb
->dev
;
2092 BT_DBG("%s type %d len %d", hdev
->name
, bt_cb(skb
)->pkt_type
, skb
->len
);
2094 if (atomic_read(&hdev
->promisc
)) {
2096 __net_timestamp(skb
);
2098 hci_send_to_sock(hdev
, skb
, NULL
);
2101 /* Get rid of skb owner, prior to sending to the driver. */
2104 return hdev
->send(skb
);
2107 /* Send HCI command */
2108 int hci_send_cmd(struct hci_dev
*hdev
, __u16 opcode
, __u32 plen
, void *param
)
2110 int len
= HCI_COMMAND_HDR_SIZE
+ plen
;
2111 struct hci_command_hdr
*hdr
;
2112 struct sk_buff
*skb
;
2114 BT_DBG("%s opcode 0x%x plen %d", hdev
->name
, opcode
, plen
);
2116 skb
= bt_skb_alloc(len
, GFP_ATOMIC
);
2118 BT_ERR("%s no memory for command", hdev
->name
);
2122 hdr
= (struct hci_command_hdr
*) skb_put(skb
, HCI_COMMAND_HDR_SIZE
);
2123 hdr
->opcode
= cpu_to_le16(opcode
);
2127 memcpy(skb_put(skb
, plen
), param
, plen
);
2129 BT_DBG("skb len %d", skb
->len
);
2131 bt_cb(skb
)->pkt_type
= HCI_COMMAND_PKT
;
2132 skb
->dev
= (void *) hdev
;
2134 if (test_bit(HCI_INIT
, &hdev
->flags
))
2135 hdev
->init_last_cmd
= opcode
;
2137 skb_queue_tail(&hdev
->cmd_q
, skb
);
2138 queue_work(hdev
->workqueue
, &hdev
->cmd_work
);
2143 /* Get data from the previously sent command */
2144 void *hci_sent_cmd_data(struct hci_dev
*hdev
, __u16 opcode
)
2146 struct hci_command_hdr
*hdr
;
2148 if (!hdev
->sent_cmd
)
2151 hdr
= (void *) hdev
->sent_cmd
->data
;
2153 if (hdr
->opcode
!= cpu_to_le16(opcode
))
2156 BT_DBG("%s opcode 0x%x", hdev
->name
, opcode
);
2158 return hdev
->sent_cmd
->data
+ HCI_COMMAND_HDR_SIZE
;
2162 static void hci_add_acl_hdr(struct sk_buff
*skb
, __u16 handle
, __u16 flags
)
2164 struct hci_acl_hdr
*hdr
;
2167 skb_push(skb
, HCI_ACL_HDR_SIZE
);
2168 skb_reset_transport_header(skb
);
2169 hdr
= (struct hci_acl_hdr
*)skb_transport_header(skb
);
2170 hdr
->handle
= cpu_to_le16(hci_handle_pack(handle
, flags
));
2171 hdr
->dlen
= cpu_to_le16(len
);
2174 static void hci_queue_acl(struct hci_conn
*conn
, struct sk_buff_head
*queue
,
2175 struct sk_buff
*skb
, __u16 flags
)
2177 struct hci_dev
*hdev
= conn
->hdev
;
2178 struct sk_buff
*list
;
2180 list
= skb_shinfo(skb
)->frag_list
;
2182 /* Non fragmented */
2183 BT_DBG("%s nonfrag skb %p len %d", hdev
->name
, skb
, skb
->len
);
2185 skb_queue_tail(queue
, skb
);
2188 BT_DBG("%s frag %p len %d", hdev
->name
, skb
, skb
->len
);
2190 skb_shinfo(skb
)->frag_list
= NULL
;
2192 /* Queue all fragments atomically */
2193 spin_lock(&queue
->lock
);
2195 __skb_queue_tail(queue
, skb
);
2197 flags
&= ~ACL_START
;
2200 skb
= list
; list
= list
->next
;
2202 skb
->dev
= (void *) hdev
;
2203 bt_cb(skb
)->pkt_type
= HCI_ACLDATA_PKT
;
2204 hci_add_acl_hdr(skb
, conn
->handle
, flags
);
2206 BT_DBG("%s frag %p len %d", hdev
->name
, skb
, skb
->len
);
2208 __skb_queue_tail(queue
, skb
);
2211 spin_unlock(&queue
->lock
);
2215 void hci_send_acl(struct hci_chan
*chan
, struct sk_buff
*skb
, __u16 flags
)
2217 struct hci_conn
*conn
= chan
->conn
;
2218 struct hci_dev
*hdev
= conn
->hdev
;
2220 BT_DBG("%s chan %p flags 0x%x", hdev
->name
, chan
, flags
);
2222 skb
->dev
= (void *) hdev
;
2223 bt_cb(skb
)->pkt_type
= HCI_ACLDATA_PKT
;
2224 hci_add_acl_hdr(skb
, conn
->handle
, flags
);
2226 hci_queue_acl(conn
, &chan
->data_q
, skb
, flags
);
2228 queue_work(hdev
->workqueue
, &hdev
->tx_work
);
2230 EXPORT_SYMBOL(hci_send_acl
);
2233 void hci_send_sco(struct hci_conn
*conn
, struct sk_buff
*skb
)
2235 struct hci_dev
*hdev
= conn
->hdev
;
2236 struct hci_sco_hdr hdr
;
2238 BT_DBG("%s len %d", hdev
->name
, skb
->len
);
2240 hdr
.handle
= cpu_to_le16(conn
->handle
);
2241 hdr
.dlen
= skb
->len
;
2243 skb_push(skb
, HCI_SCO_HDR_SIZE
);
2244 skb_reset_transport_header(skb
);
2245 memcpy(skb_transport_header(skb
), &hdr
, HCI_SCO_HDR_SIZE
);
2247 skb
->dev
= (void *) hdev
;
2248 bt_cb(skb
)->pkt_type
= HCI_SCODATA_PKT
;
2250 skb_queue_tail(&conn
->data_q
, skb
);
2251 queue_work(hdev
->workqueue
, &hdev
->tx_work
);
2253 EXPORT_SYMBOL(hci_send_sco
);
2255 /* ---- HCI TX task (outgoing data) ---- */
2257 /* HCI Connection scheduler */
2258 static inline struct hci_conn
*hci_low_sent(struct hci_dev
*hdev
, __u8 type
, int *quote
)
2260 struct hci_conn_hash
*h
= &hdev
->conn_hash
;
2261 struct hci_conn
*conn
= NULL
, *c
;
2262 int num
= 0, min
= ~0;
2264 /* We don't have to lock device here. Connections are always
2265 * added and removed with TX task disabled. */
2269 list_for_each_entry_rcu(c
, &h
->list
, list
) {
2270 if (c
->type
!= type
|| skb_queue_empty(&c
->data_q
))
2273 if (c
->state
!= BT_CONNECTED
&& c
->state
!= BT_CONFIG
)
2278 if (c
->sent
< min
) {
2283 if (hci_conn_num(hdev
, type
) == num
)
2292 switch (conn
->type
) {
2294 cnt
= hdev
->acl_cnt
;
2298 cnt
= hdev
->sco_cnt
;
2301 cnt
= hdev
->le_mtu
? hdev
->le_cnt
: hdev
->acl_cnt
;
2305 BT_ERR("Unknown link type");
2313 BT_DBG("conn %p quote %d", conn
, *quote
);
2317 static inline void hci_link_tx_to(struct hci_dev
*hdev
, __u8 type
)
2319 struct hci_conn_hash
*h
= &hdev
->conn_hash
;
2322 BT_ERR("%s link tx timeout", hdev
->name
);
2326 /* Kill stalled connections */
2327 list_for_each_entry_rcu(c
, &h
->list
, list
) {
2328 if (c
->type
== type
&& c
->sent
) {
2329 BT_ERR("%s killing stalled connection %s",
2330 hdev
->name
, batostr(&c
->dst
));
2331 hci_acl_disconn(c
, 0x13);
2338 static inline struct hci_chan
*hci_chan_sent(struct hci_dev
*hdev
, __u8 type
,
2341 struct hci_conn_hash
*h
= &hdev
->conn_hash
;
2342 struct hci_chan
*chan
= NULL
;
2343 int num
= 0, min
= ~0, cur_prio
= 0;
2344 struct hci_conn
*conn
;
2345 int cnt
, q
, conn_num
= 0;
2347 BT_DBG("%s", hdev
->name
);
2351 list_for_each_entry_rcu(conn
, &h
->list
, list
) {
2352 struct hci_chan
*tmp
;
2354 if (conn
->type
!= type
)
2357 if (conn
->state
!= BT_CONNECTED
&& conn
->state
!= BT_CONFIG
)
2362 list_for_each_entry_rcu(tmp
, &conn
->chan_list
, list
) {
2363 struct sk_buff
*skb
;
2365 if (skb_queue_empty(&tmp
->data_q
))
2368 skb
= skb_peek(&tmp
->data_q
);
2369 if (skb
->priority
< cur_prio
)
2372 if (skb
->priority
> cur_prio
) {
2375 cur_prio
= skb
->priority
;
2380 if (conn
->sent
< min
) {
2386 if (hci_conn_num(hdev
, type
) == conn_num
)
2395 switch (chan
->conn
->type
) {
2397 cnt
= hdev
->acl_cnt
;
2401 cnt
= hdev
->sco_cnt
;
2404 cnt
= hdev
->le_mtu
? hdev
->le_cnt
: hdev
->acl_cnt
;
2408 BT_ERR("Unknown link type");
2413 BT_DBG("chan %p quote %d", chan
, *quote
);
2417 static void hci_prio_recalculate(struct hci_dev
*hdev
, __u8 type
)
2419 struct hci_conn_hash
*h
= &hdev
->conn_hash
;
2420 struct hci_conn
*conn
;
2423 BT_DBG("%s", hdev
->name
);
2427 list_for_each_entry_rcu(conn
, &h
->list
, list
) {
2428 struct hci_chan
*chan
;
2430 if (conn
->type
!= type
)
2433 if (conn
->state
!= BT_CONNECTED
&& conn
->state
!= BT_CONFIG
)
2438 list_for_each_entry_rcu(chan
, &conn
->chan_list
, list
) {
2439 struct sk_buff
*skb
;
2446 if (skb_queue_empty(&chan
->data_q
))
2449 skb
= skb_peek(&chan
->data_q
);
2450 if (skb
->priority
>= HCI_PRIO_MAX
- 1)
2453 skb
->priority
= HCI_PRIO_MAX
- 1;
2455 BT_DBG("chan %p skb %p promoted to %d", chan
, skb
,
2459 if (hci_conn_num(hdev
, type
) == num
)
2467 static inline int __get_blocks(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2469 /* Calculate count of blocks used by this packet */
2470 return DIV_ROUND_UP(skb
->len
- HCI_ACL_HDR_SIZE
, hdev
->block_len
);
2473 static inline void __check_timeout(struct hci_dev
*hdev
, unsigned int cnt
)
2475 if (!test_bit(HCI_RAW
, &hdev
->flags
)) {
2476 /* ACL tx timeout must be longer than maximum
2477 * link supervision timeout (40.9 seconds) */
2478 if (!cnt
&& time_after(jiffies
, hdev
->acl_last_tx
+
2479 msecs_to_jiffies(HCI_ACL_TX_TIMEOUT
)))
2480 hci_link_tx_to(hdev
, ACL_LINK
);
2484 static inline void hci_sched_acl_pkt(struct hci_dev
*hdev
)
2486 unsigned int cnt
= hdev
->acl_cnt
;
2487 struct hci_chan
*chan
;
2488 struct sk_buff
*skb
;
2491 __check_timeout(hdev
, cnt
);
2493 while (hdev
->acl_cnt
&&
2494 (chan
= hci_chan_sent(hdev
, ACL_LINK
, "e
))) {
2495 u32 priority
= (skb_peek(&chan
->data_q
))->priority
;
2496 while (quote
-- && (skb
= skb_peek(&chan
->data_q
))) {
2497 BT_DBG("chan %p skb %p len %d priority %u", chan
, skb
,
2498 skb
->len
, skb
->priority
);
2500 /* Stop if priority has changed */
2501 if (skb
->priority
< priority
)
2504 skb
= skb_dequeue(&chan
->data_q
);
2506 hci_conn_enter_active_mode(chan
->conn
,
2507 bt_cb(skb
)->force_active
);
2509 hci_send_frame(skb
);
2510 hdev
->acl_last_tx
= jiffies
;
2518 if (cnt
!= hdev
->acl_cnt
)
2519 hci_prio_recalculate(hdev
, ACL_LINK
);
2522 static inline void hci_sched_acl_blk(struct hci_dev
*hdev
)
2524 unsigned int cnt
= hdev
->block_cnt
;
2525 struct hci_chan
*chan
;
2526 struct sk_buff
*skb
;
2529 __check_timeout(hdev
, cnt
);
2531 while (hdev
->block_cnt
> 0 &&
2532 (chan
= hci_chan_sent(hdev
, ACL_LINK
, "e
))) {
2533 u32 priority
= (skb_peek(&chan
->data_q
))->priority
;
2534 while (quote
> 0 && (skb
= skb_peek(&chan
->data_q
))) {
2537 BT_DBG("chan %p skb %p len %d priority %u", chan
, skb
,
2538 skb
->len
, skb
->priority
);
2540 /* Stop if priority has changed */
2541 if (skb
->priority
< priority
)
2544 skb
= skb_dequeue(&chan
->data_q
);
2546 blocks
= __get_blocks(hdev
, skb
);
2547 if (blocks
> hdev
->block_cnt
)
2550 hci_conn_enter_active_mode(chan
->conn
,
2551 bt_cb(skb
)->force_active
);
2553 hci_send_frame(skb
);
2554 hdev
->acl_last_tx
= jiffies
;
2556 hdev
->block_cnt
-= blocks
;
2559 chan
->sent
+= blocks
;
2560 chan
->conn
->sent
+= blocks
;
2564 if (cnt
!= hdev
->block_cnt
)
2565 hci_prio_recalculate(hdev
, ACL_LINK
);
2568 static inline void hci_sched_acl(struct hci_dev
*hdev
)
2570 BT_DBG("%s", hdev
->name
);
2572 if (!hci_conn_num(hdev
, ACL_LINK
))
2575 switch (hdev
->flow_ctl_mode
) {
2576 case HCI_FLOW_CTL_MODE_PACKET_BASED
:
2577 hci_sched_acl_pkt(hdev
);
2580 case HCI_FLOW_CTL_MODE_BLOCK_BASED
:
2581 hci_sched_acl_blk(hdev
);
2587 static inline void hci_sched_sco(struct hci_dev
*hdev
)
2589 struct hci_conn
*conn
;
2590 struct sk_buff
*skb
;
2593 BT_DBG("%s", hdev
->name
);
2595 if (!hci_conn_num(hdev
, SCO_LINK
))
2598 while (hdev
->sco_cnt
&& (conn
= hci_low_sent(hdev
, SCO_LINK
, "e
))) {
2599 while (quote
-- && (skb
= skb_dequeue(&conn
->data_q
))) {
2600 BT_DBG("skb %p len %d", skb
, skb
->len
);
2601 hci_send_frame(skb
);
2604 if (conn
->sent
== ~0)
2610 static inline void hci_sched_esco(struct hci_dev
*hdev
)
2612 struct hci_conn
*conn
;
2613 struct sk_buff
*skb
;
2616 BT_DBG("%s", hdev
->name
);
2618 if (!hci_conn_num(hdev
, ESCO_LINK
))
2621 while (hdev
->sco_cnt
&& (conn
= hci_low_sent(hdev
, ESCO_LINK
, "e
))) {
2622 while (quote
-- && (skb
= skb_dequeue(&conn
->data_q
))) {
2623 BT_DBG("skb %p len %d", skb
, skb
->len
);
2624 hci_send_frame(skb
);
2627 if (conn
->sent
== ~0)
2633 static inline void hci_sched_le(struct hci_dev
*hdev
)
2635 struct hci_chan
*chan
;
2636 struct sk_buff
*skb
;
2637 int quote
, cnt
, tmp
;
2639 BT_DBG("%s", hdev
->name
);
2641 if (!hci_conn_num(hdev
, LE_LINK
))
2644 if (!test_bit(HCI_RAW
, &hdev
->flags
)) {
2645 /* LE tx timeout must be longer than maximum
2646 * link supervision timeout (40.9 seconds) */
2647 if (!hdev
->le_cnt
&& hdev
->le_pkts
&&
2648 time_after(jiffies
, hdev
->le_last_tx
+ HZ
* 45))
2649 hci_link_tx_to(hdev
, LE_LINK
);
2652 cnt
= hdev
->le_pkts
? hdev
->le_cnt
: hdev
->acl_cnt
;
2654 while (cnt
&& (chan
= hci_chan_sent(hdev
, LE_LINK
, "e
))) {
2655 u32 priority
= (skb_peek(&chan
->data_q
))->priority
;
2656 while (quote
-- && (skb
= skb_peek(&chan
->data_q
))) {
2657 BT_DBG("chan %p skb %p len %d priority %u", chan
, skb
,
2658 skb
->len
, skb
->priority
);
2660 /* Stop if priority has changed */
2661 if (skb
->priority
< priority
)
2664 skb
= skb_dequeue(&chan
->data_q
);
2666 hci_send_frame(skb
);
2667 hdev
->le_last_tx
= jiffies
;
2678 hdev
->acl_cnt
= cnt
;
2681 hci_prio_recalculate(hdev
, LE_LINK
);
2684 static void hci_tx_work(struct work_struct
*work
)
2686 struct hci_dev
*hdev
= container_of(work
, struct hci_dev
, tx_work
);
2687 struct sk_buff
*skb
;
2689 BT_DBG("%s acl %d sco %d le %d", hdev
->name
, hdev
->acl_cnt
,
2690 hdev
->sco_cnt
, hdev
->le_cnt
);
2692 /* Schedule queues and send stuff to HCI driver */
2694 hci_sched_acl(hdev
);
2696 hci_sched_sco(hdev
);
2698 hci_sched_esco(hdev
);
2702 /* Send next queued raw (unknown type) packet */
2703 while ((skb
= skb_dequeue(&hdev
->raw_q
)))
2704 hci_send_frame(skb
);
2707 /* ----- HCI RX task (incoming data processing) ----- */
2709 /* ACL data packet */
2710 static inline void hci_acldata_packet(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2712 struct hci_acl_hdr
*hdr
= (void *) skb
->data
;
2713 struct hci_conn
*conn
;
2714 __u16 handle
, flags
;
2716 skb_pull(skb
, HCI_ACL_HDR_SIZE
);
2718 handle
= __le16_to_cpu(hdr
->handle
);
2719 flags
= hci_flags(handle
);
2720 handle
= hci_handle(handle
);
2722 BT_DBG("%s len %d handle 0x%x flags 0x%x", hdev
->name
, skb
->len
, handle
, flags
);
2724 hdev
->stat
.acl_rx
++;
2727 conn
= hci_conn_hash_lookup_handle(hdev
, handle
);
2728 hci_dev_unlock(hdev
);
2731 hci_conn_enter_active_mode(conn
, BT_POWER_FORCE_ACTIVE_OFF
);
2733 /* Send to upper protocol */
2734 l2cap_recv_acldata(conn
, skb
, flags
);
2737 BT_ERR("%s ACL packet for unknown connection handle %d",
2738 hdev
->name
, handle
);
2744 /* SCO data packet */
2745 static inline void hci_scodata_packet(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2747 struct hci_sco_hdr
*hdr
= (void *) skb
->data
;
2748 struct hci_conn
*conn
;
2751 skb_pull(skb
, HCI_SCO_HDR_SIZE
);
2753 handle
= __le16_to_cpu(hdr
->handle
);
2755 BT_DBG("%s len %d handle 0x%x", hdev
->name
, skb
->len
, handle
);
2757 hdev
->stat
.sco_rx
++;
2760 conn
= hci_conn_hash_lookup_handle(hdev
, handle
);
2761 hci_dev_unlock(hdev
);
2764 /* Send to upper protocol */
2765 sco_recv_scodata(conn
, skb
);
2768 BT_ERR("%s SCO packet for unknown connection handle %d",
2769 hdev
->name
, handle
);
2775 static void hci_rx_work(struct work_struct
*work
)
2777 struct hci_dev
*hdev
= container_of(work
, struct hci_dev
, rx_work
);
2778 struct sk_buff
*skb
;
2780 BT_DBG("%s", hdev
->name
);
2782 while ((skb
= skb_dequeue(&hdev
->rx_q
))) {
2783 if (atomic_read(&hdev
->promisc
)) {
2784 /* Send copy to the sockets */
2785 hci_send_to_sock(hdev
, skb
, NULL
);
2788 if (test_bit(HCI_RAW
, &hdev
->flags
)) {
2793 if (test_bit(HCI_INIT
, &hdev
->flags
)) {
2794 /* Don't process data packets in this states. */
2795 switch (bt_cb(skb
)->pkt_type
) {
2796 case HCI_ACLDATA_PKT
:
2797 case HCI_SCODATA_PKT
:
2804 switch (bt_cb(skb
)->pkt_type
) {
2806 BT_DBG("%s Event packet", hdev
->name
);
2807 hci_event_packet(hdev
, skb
);
2810 case HCI_ACLDATA_PKT
:
2811 BT_DBG("%s ACL data packet", hdev
->name
);
2812 hci_acldata_packet(hdev
, skb
);
2815 case HCI_SCODATA_PKT
:
2816 BT_DBG("%s SCO data packet", hdev
->name
);
2817 hci_scodata_packet(hdev
, skb
);
2827 static void hci_cmd_work(struct work_struct
*work
)
2829 struct hci_dev
*hdev
= container_of(work
, struct hci_dev
, cmd_work
);
2830 struct sk_buff
*skb
;
2832 BT_DBG("%s cmd %d", hdev
->name
, atomic_read(&hdev
->cmd_cnt
));
2834 /* Send queued commands */
2835 if (atomic_read(&hdev
->cmd_cnt
)) {
2836 skb
= skb_dequeue(&hdev
->cmd_q
);
2840 kfree_skb(hdev
->sent_cmd
);
2842 hdev
->sent_cmd
= skb_clone(skb
, GFP_ATOMIC
);
2843 if (hdev
->sent_cmd
) {
2844 atomic_dec(&hdev
->cmd_cnt
);
2845 hci_send_frame(skb
);
2846 if (test_bit(HCI_RESET
, &hdev
->flags
))
2847 del_timer(&hdev
->cmd_timer
);
2849 mod_timer(&hdev
->cmd_timer
,
2850 jiffies
+ msecs_to_jiffies(HCI_CMD_TIMEOUT
));
2852 skb_queue_head(&hdev
->cmd_q
, skb
);
2853 queue_work(hdev
->workqueue
, &hdev
->cmd_work
);
2858 int hci_do_inquiry(struct hci_dev
*hdev
, u8 length
)
2860 /* General inquiry access code (GIAC) */
2861 u8 lap
[3] = { 0x33, 0x8b, 0x9e };
2862 struct hci_cp_inquiry cp
;
2864 BT_DBG("%s", hdev
->name
);
2866 if (test_bit(HCI_INQUIRY
, &hdev
->flags
))
2867 return -EINPROGRESS
;
2869 inquiry_cache_flush(hdev
);
2871 memset(&cp
, 0, sizeof(cp
));
2872 memcpy(&cp
.lap
, lap
, sizeof(cp
.lap
));
2875 return hci_send_cmd(hdev
, HCI_OP_INQUIRY
, sizeof(cp
), &cp
);
2878 int hci_cancel_inquiry(struct hci_dev
*hdev
)
2880 BT_DBG("%s", hdev
->name
);
2882 if (!test_bit(HCI_INQUIRY
, &hdev
->flags
))
2885 return hci_send_cmd(hdev
, HCI_OP_INQUIRY_CANCEL
, 0, NULL
);
2888 module_param(enable_hs
, bool, 0644);
2889 MODULE_PARM_DESC(enable_hs
, "Enable High Speed");