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 event handling. */
27 #include <linux/module.h>
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>
41 #include <asm/system.h>
42 #include <asm/uaccess.h>
43 #include <asm/unaligned.h>
45 #include <net/bluetooth/bluetooth.h>
46 #include <net/bluetooth/hci_core.h>
48 #ifndef CONFIG_BT_HCI_CORE_DEBUG
53 /* Handle HCI Event packets */
55 static void hci_cc_inquiry_cancel(struct hci_dev *hdev, struct sk_buff *skb)
57 __u8 status = *((__u8 *) skb->data);
59 BT_DBG("%s status 0x%x", hdev->name, status);
64 clear_bit(HCI_INQUIRY, &hdev->flags);
66 hci_req_complete(hdev, status);
68 hci_conn_check_pending(hdev);
71 static void hci_cc_exit_periodic_inq(struct hci_dev *hdev, struct sk_buff *skb)
73 __u8 status = *((__u8 *) skb->data);
75 BT_DBG("%s status 0x%x", hdev->name, status);
80 clear_bit(HCI_INQUIRY, &hdev->flags);
82 hci_conn_check_pending(hdev);
85 static void hci_cc_remote_name_req_cancel(struct hci_dev *hdev, struct sk_buff *skb)
87 BT_DBG("%s", hdev->name);
90 static void hci_cc_role_discovery(struct hci_dev *hdev, struct sk_buff *skb)
92 struct hci_rp_role_discovery *rp = (void *) skb->data;
93 struct hci_conn *conn;
95 BT_DBG("%s status 0x%x", hdev->name, rp->status);
102 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
105 conn->link_mode &= ~HCI_LM_MASTER;
107 conn->link_mode |= HCI_LM_MASTER;
110 hci_dev_unlock(hdev);
113 static void hci_cc_write_link_policy(struct hci_dev *hdev, struct sk_buff *skb)
115 struct hci_rp_write_link_policy *rp = (void *) skb->data;
116 struct hci_conn *conn;
119 BT_DBG("%s status 0x%x", hdev->name, rp->status);
124 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_LINK_POLICY);
130 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
132 __le16 policy = get_unaligned((__le16 *) (sent + 2));
133 conn->link_policy = __le16_to_cpu(policy);
136 hci_dev_unlock(hdev);
139 static void hci_cc_reset(struct hci_dev *hdev, struct sk_buff *skb)
141 __u8 status = *((__u8 *) skb->data);
143 BT_DBG("%s status 0x%x", hdev->name, status);
145 hci_req_complete(hdev, status);
148 static void hci_cc_write_local_name(struct hci_dev *hdev, struct sk_buff *skb)
150 __u8 status = *((__u8 *) skb->data);
153 BT_DBG("%s status 0x%x", hdev->name, status);
155 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_LOCAL_NAME);
160 memcpy(hdev->dev_name, sent, 248);
163 static void hci_cc_read_local_name(struct hci_dev *hdev, struct sk_buff *skb)
165 struct hci_rp_read_local_name *rp = (void *) skb->data;
167 BT_DBG("%s status 0x%x", hdev->name, rp->status);
172 memcpy(hdev->dev_name, rp->name, 248);
175 static void hci_cc_write_auth_enable(struct hci_dev *hdev, struct sk_buff *skb)
177 __u8 status = *((__u8 *) skb->data);
180 BT_DBG("%s status 0x%x", hdev->name, status);
182 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_AUTH_ENABLE);
187 __u8 param = *((__u8 *) sent);
189 if (param == AUTH_ENABLED)
190 set_bit(HCI_AUTH, &hdev->flags);
192 clear_bit(HCI_AUTH, &hdev->flags);
195 hci_req_complete(hdev, status);
198 static void hci_cc_write_encrypt_mode(struct hci_dev *hdev, struct sk_buff *skb)
200 __u8 status = *((__u8 *) skb->data);
203 BT_DBG("%s status 0x%x", hdev->name, status);
205 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_ENCRYPT_MODE);
210 __u8 param = *((__u8 *) sent);
213 set_bit(HCI_ENCRYPT, &hdev->flags);
215 clear_bit(HCI_ENCRYPT, &hdev->flags);
218 hci_req_complete(hdev, status);
221 static void hci_cc_write_scan_enable(struct hci_dev *hdev, struct sk_buff *skb)
223 __u8 status = *((__u8 *) skb->data);
226 BT_DBG("%s status 0x%x", hdev->name, status);
228 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_SCAN_ENABLE);
233 __u8 param = *((__u8 *) sent);
235 clear_bit(HCI_PSCAN, &hdev->flags);
236 clear_bit(HCI_ISCAN, &hdev->flags);
238 if (param & SCAN_INQUIRY)
239 set_bit(HCI_ISCAN, &hdev->flags);
241 if (param & SCAN_PAGE)
242 set_bit(HCI_PSCAN, &hdev->flags);
245 hci_req_complete(hdev, status);
248 static void hci_cc_read_class_of_dev(struct hci_dev *hdev, struct sk_buff *skb)
250 struct hci_rp_read_class_of_dev *rp = (void *) skb->data;
252 BT_DBG("%s status 0x%x", hdev->name, rp->status);
257 memcpy(hdev->dev_class, rp->dev_class, 3);
259 BT_DBG("%s class 0x%.2x%.2x%.2x", hdev->name,
260 hdev->dev_class[2], hdev->dev_class[1], hdev->dev_class[0]);
263 static void hci_cc_write_class_of_dev(struct hci_dev *hdev, struct sk_buff *skb)
265 __u8 status = *((__u8 *) skb->data);
268 BT_DBG("%s status 0x%x", hdev->name, status);
270 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_CLASS_OF_DEV);
275 memcpy(hdev->dev_class, sent, 3);
278 static void hci_cc_read_voice_setting(struct hci_dev *hdev, struct sk_buff *skb)
280 struct hci_rp_read_voice_setting *rp = (void *) skb->data;
283 BT_DBG("%s status 0x%x", hdev->name, rp->status);
288 setting = __le16_to_cpu(rp->voice_setting);
290 if (hdev->voice_setting == setting )
293 hdev->voice_setting = setting;
295 BT_DBG("%s voice setting 0x%04x", hdev->name, setting);
298 tasklet_disable(&hdev->tx_task);
299 hdev->notify(hdev, HCI_NOTIFY_VOICE_SETTING);
300 tasklet_enable(&hdev->tx_task);
304 static void hci_cc_write_voice_setting(struct hci_dev *hdev, struct sk_buff *skb)
306 __u8 status = *((__u8 *) skb->data);
309 BT_DBG("%s status 0x%x", hdev->name, status);
311 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_VOICE_SETTING);
316 __u16 setting = __le16_to_cpu(get_unaligned((__le16 *) sent));
318 if (hdev->voice_setting != setting) {
319 hdev->voice_setting = setting;
321 BT_DBG("%s voice setting 0x%04x", hdev->name, setting);
324 tasklet_disable(&hdev->tx_task);
325 hdev->notify(hdev, HCI_NOTIFY_VOICE_SETTING);
326 tasklet_enable(&hdev->tx_task);
332 static void hci_cc_host_buffer_size(struct hci_dev *hdev, struct sk_buff *skb)
334 __u8 status = *((__u8 *) skb->data);
336 BT_DBG("%s status 0x%x", hdev->name, status);
338 hci_req_complete(hdev, status);
341 static void hci_cc_read_local_version(struct hci_dev *hdev, struct sk_buff *skb)
343 struct hci_rp_read_local_version *rp = (void *) skb->data;
345 BT_DBG("%s status 0x%x", hdev->name, rp->status);
350 hdev->hci_ver = rp->hci_ver;
351 hdev->hci_rev = btohs(rp->hci_rev);
352 hdev->manufacturer = btohs(rp->manufacturer);
354 BT_DBG("%s manufacturer %d hci ver %d:%d", hdev->name,
356 hdev->hci_ver, hdev->hci_rev);
359 static void hci_cc_read_local_commands(struct hci_dev *hdev, struct sk_buff *skb)
361 struct hci_rp_read_local_commands *rp = (void *) skb->data;
363 BT_DBG("%s status 0x%x", hdev->name, rp->status);
368 memcpy(hdev->commands, rp->commands, sizeof(hdev->commands));
371 static void hci_cc_read_local_features(struct hci_dev *hdev, struct sk_buff *skb)
373 struct hci_rp_read_local_features *rp = (void *) skb->data;
375 BT_DBG("%s status 0x%x", hdev->name, rp->status);
380 memcpy(hdev->features, rp->features, 8);
382 /* Adjust default settings according to features
383 * supported by device. */
385 if (hdev->features[0] & LMP_3SLOT)
386 hdev->pkt_type |= (HCI_DM3 | HCI_DH3);
388 if (hdev->features[0] & LMP_5SLOT)
389 hdev->pkt_type |= (HCI_DM5 | HCI_DH5);
391 if (hdev->features[1] & LMP_HV2) {
392 hdev->pkt_type |= (HCI_HV2);
393 hdev->esco_type |= (ESCO_HV2);
396 if (hdev->features[1] & LMP_HV3) {
397 hdev->pkt_type |= (HCI_HV3);
398 hdev->esco_type |= (ESCO_HV3);
401 if (hdev->features[3] & LMP_ESCO)
402 hdev->esco_type |= (ESCO_EV3);
404 if (hdev->features[4] & LMP_EV4)
405 hdev->esco_type |= (ESCO_EV4);
407 if (hdev->features[4] & LMP_EV5)
408 hdev->esco_type |= (ESCO_EV5);
410 BT_DBG("%s features 0x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x", hdev->name,
411 hdev->features[0], hdev->features[1],
412 hdev->features[2], hdev->features[3],
413 hdev->features[4], hdev->features[5],
414 hdev->features[6], hdev->features[7]);
417 static void hci_cc_read_buffer_size(struct hci_dev *hdev, struct sk_buff *skb)
419 struct hci_rp_read_buffer_size *rp = (void *) skb->data;
421 BT_DBG("%s status 0x%x", hdev->name, rp->status);
426 hdev->acl_mtu = __le16_to_cpu(rp->acl_mtu);
427 hdev->sco_mtu = rp->sco_mtu;
428 hdev->acl_pkts = __le16_to_cpu(rp->acl_max_pkt);
429 hdev->sco_pkts = __le16_to_cpu(rp->sco_max_pkt);
431 if (test_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE, &hdev->quirks)) {
436 hdev->acl_cnt = hdev->acl_pkts;
437 hdev->sco_cnt = hdev->sco_pkts;
439 BT_DBG("%s acl mtu %d:%d sco mtu %d:%d", hdev->name,
440 hdev->acl_mtu, hdev->acl_pkts,
441 hdev->sco_mtu, hdev->sco_pkts);
444 static void hci_cc_read_bd_addr(struct hci_dev *hdev, struct sk_buff *skb)
446 struct hci_rp_read_bd_addr *rp = (void *) skb->data;
448 BT_DBG("%s status 0x%x", hdev->name, rp->status);
451 bacpy(&hdev->bdaddr, &rp->bdaddr);
453 hci_req_complete(hdev, rp->status);
456 static inline void hci_cs_inquiry(struct hci_dev *hdev, __u8 status)
458 BT_DBG("%s status 0x%x", hdev->name, status);
461 hci_req_complete(hdev, status);
463 hci_conn_check_pending(hdev);
465 set_bit(HCI_INQUIRY, &hdev->flags);
468 static inline void hci_cs_create_conn(struct hci_dev *hdev, __u8 status)
470 struct hci_cp_create_conn *cp;
471 struct hci_conn *conn;
473 BT_DBG("%s status 0x%x", hdev->name, status);
475 cp = hci_sent_cmd_data(hdev, HCI_OP_CREATE_CONN);
481 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
483 BT_DBG("%s bdaddr %s conn %p", hdev->name, batostr(&cp->bdaddr), conn);
486 if (conn && conn->state == BT_CONNECT) {
487 if (status != 0x0c || conn->attempt > 2) {
488 conn->state = BT_CLOSED;
489 hci_proto_connect_cfm(conn, status);
492 conn->state = BT_CONNECT2;
496 conn = hci_conn_add(hdev, ACL_LINK, &cp->bdaddr);
499 conn->link_mode |= HCI_LM_MASTER;
501 BT_ERR("No memmory for new connection");
505 hci_dev_unlock(hdev);
508 static void hci_cs_add_sco(struct hci_dev *hdev, __u8 status)
510 struct hci_cp_add_sco *cp;
511 struct hci_conn *acl, *sco;
514 BT_DBG("%s status 0x%x", hdev->name, status);
519 cp = hci_sent_cmd_data(hdev, HCI_OP_ADD_SCO);
523 handle = __le16_to_cpu(cp->handle);
525 BT_DBG("%s handle %d", hdev->name, handle);
529 acl = hci_conn_hash_lookup_handle(hdev, handle);
530 if (acl && (sco = acl->link)) {
531 sco->state = BT_CLOSED;
533 hci_proto_connect_cfm(sco, status);
537 hci_dev_unlock(hdev);
540 static void hci_cs_remote_name_req(struct hci_dev *hdev, __u8 status)
542 BT_DBG("%s status 0x%x", hdev->name, status);
545 static void hci_cs_setup_sync_conn(struct hci_dev *hdev, __u8 status)
547 struct hci_cp_setup_sync_conn *cp;
548 struct hci_conn *acl, *sco;
551 BT_DBG("%s status 0x%x", hdev->name, status);
556 cp = hci_sent_cmd_data(hdev, HCI_OP_SETUP_SYNC_CONN);
560 handle = __le16_to_cpu(cp->handle);
562 BT_DBG("%s handle %d", hdev->name, handle);
566 acl = hci_conn_hash_lookup_handle(hdev, handle);
567 if (acl && (sco = acl->link)) {
568 sco->state = BT_CLOSED;
570 hci_proto_connect_cfm(sco, status);
574 hci_dev_unlock(hdev);
577 static void hci_cs_sniff_mode(struct hci_dev *hdev, __u8 status)
579 struct hci_cp_sniff_mode *cp;
580 struct hci_conn *conn;
582 BT_DBG("%s status 0x%x", hdev->name, status);
587 cp = hci_sent_cmd_data(hdev, HCI_OP_SNIFF_MODE);
593 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
595 clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend);
597 hci_dev_unlock(hdev);
600 static void hci_cs_exit_sniff_mode(struct hci_dev *hdev, __u8 status)
602 struct hci_cp_exit_sniff_mode *cp;
603 struct hci_conn *conn;
605 BT_DBG("%s status 0x%x", hdev->name, status);
610 cp = hci_sent_cmd_data(hdev, HCI_OP_EXIT_SNIFF_MODE);
616 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
618 clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend);
620 hci_dev_unlock(hdev);
623 static inline void hci_inquiry_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
625 __u8 status = *((__u8 *) skb->data);
627 BT_DBG("%s status %d", hdev->name, status);
629 clear_bit(HCI_INQUIRY, &hdev->flags);
631 hci_req_complete(hdev, status);
633 hci_conn_check_pending(hdev);
636 static inline void hci_inquiry_result_evt(struct hci_dev *hdev, struct sk_buff *skb)
638 struct inquiry_data data;
639 struct inquiry_info *info = (void *) (skb->data + 1);
640 int num_rsp = *((__u8 *) skb->data);
642 BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
649 for (; num_rsp; num_rsp--) {
650 bacpy(&data.bdaddr, &info->bdaddr);
651 data.pscan_rep_mode = info->pscan_rep_mode;
652 data.pscan_period_mode = info->pscan_period_mode;
653 data.pscan_mode = info->pscan_mode;
654 memcpy(data.dev_class, info->dev_class, 3);
655 data.clock_offset = info->clock_offset;
658 hci_inquiry_cache_update(hdev, &data);
661 hci_dev_unlock(hdev);
664 static inline void hci_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
666 struct hci_ev_conn_complete *ev = (void *) skb->data;
667 struct hci_conn *conn;
669 BT_DBG("%s", hdev->name);
673 conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
678 conn->handle = __le16_to_cpu(ev->handle);
679 conn->state = BT_CONNECTED;
681 if (test_bit(HCI_AUTH, &hdev->flags))
682 conn->link_mode |= HCI_LM_AUTH;
684 if (test_bit(HCI_ENCRYPT, &hdev->flags))
685 conn->link_mode |= HCI_LM_ENCRYPT;
687 /* Get remote features */
688 if (conn->type == ACL_LINK) {
689 struct hci_cp_read_remote_features cp;
690 cp.handle = ev->handle;
691 hci_send_cmd(hdev, HCI_OP_READ_REMOTE_FEATURES, sizeof(cp), &cp);
694 /* Set link policy */
695 if (conn->type == ACL_LINK && hdev->link_policy) {
696 struct hci_cp_write_link_policy cp;
697 cp.handle = ev->handle;
698 cp.policy = cpu_to_le16(hdev->link_policy);
699 hci_send_cmd(hdev, HCI_OP_WRITE_LINK_POLICY, sizeof(cp), &cp);
702 /* Set packet type for incoming connection */
704 struct hci_cp_change_conn_ptype cp;
705 cp.handle = ev->handle;
706 cp.pkt_type = (conn->type == ACL_LINK) ?
707 cpu_to_le16(hdev->pkt_type & ACL_PTYPE_MASK):
708 cpu_to_le16(hdev->pkt_type & SCO_PTYPE_MASK);
710 hci_send_cmd(hdev, HCI_OP_CHANGE_CONN_PTYPE, sizeof(cp), &cp);
712 /* Update disconnect timer */
717 conn->state = BT_CLOSED;
719 if (conn->type == ACL_LINK) {
720 struct hci_conn *sco = conn->link;
723 if (lmp_esco_capable(hdev))
724 hci_setup_sync(sco, conn->handle);
726 hci_add_sco(sco, conn->handle);
728 hci_proto_connect_cfm(sco, ev->status);
734 hci_proto_connect_cfm(conn, ev->status);
739 hci_dev_unlock(hdev);
741 hci_conn_check_pending(hdev);
744 static inline void hci_conn_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
746 struct hci_ev_conn_request *ev = (void *) skb->data;
747 int mask = hdev->link_mode;
749 BT_DBG("%s bdaddr %s type 0x%x", hdev->name,
750 batostr(&ev->bdaddr), ev->link_type);
752 mask |= hci_proto_connect_ind(hdev, &ev->bdaddr, ev->link_type);
754 if (mask & HCI_LM_ACCEPT) {
755 /* Connection accepted */
756 struct hci_conn *conn;
760 conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
762 if (!(conn = hci_conn_add(hdev, ev->link_type, &ev->bdaddr))) {
763 BT_ERR("No memmory for new connection");
764 hci_dev_unlock(hdev);
769 memcpy(conn->dev_class, ev->dev_class, 3);
770 conn->state = BT_CONNECT;
772 hci_dev_unlock(hdev);
774 if (ev->link_type == ACL_LINK || !lmp_esco_capable(hdev)) {
775 struct hci_cp_accept_conn_req cp;
777 bacpy(&cp.bdaddr, &ev->bdaddr);
779 if (lmp_rswitch_capable(hdev) && (mask & HCI_LM_MASTER))
780 cp.role = 0x00; /* Become master */
782 cp.role = 0x01; /* Remain slave */
784 hci_send_cmd(hdev, HCI_OP_ACCEPT_CONN_REQ,
787 struct hci_cp_accept_sync_conn_req cp;
789 bacpy(&cp.bdaddr, &ev->bdaddr);
790 cp.pkt_type = cpu_to_le16(hdev->esco_type);
792 cp.tx_bandwidth = cpu_to_le32(0x00001f40);
793 cp.rx_bandwidth = cpu_to_le32(0x00001f40);
794 cp.max_latency = cpu_to_le16(0xffff);
795 cp.content_format = cpu_to_le16(hdev->voice_setting);
796 cp.retrans_effort = 0xff;
798 hci_send_cmd(hdev, HCI_OP_ACCEPT_SYNC_CONN_REQ,
802 /* Connection rejected */
803 struct hci_cp_reject_conn_req cp;
805 bacpy(&cp.bdaddr, &ev->bdaddr);
807 hci_send_cmd(hdev, HCI_OP_REJECT_CONN_REQ, sizeof(cp), &cp);
811 static inline void hci_disconn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
813 struct hci_ev_disconn_complete *ev = (void *) skb->data;
814 struct hci_conn *conn;
816 BT_DBG("%s status %d", hdev->name, ev->status);
823 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
825 conn->state = BT_CLOSED;
826 hci_proto_disconn_ind(conn, ev->reason);
830 hci_dev_unlock(hdev);
833 static inline void hci_auth_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
835 struct hci_ev_auth_complete *ev = (void *) skb->data;
836 struct hci_conn *conn;
838 BT_DBG("%s status %d", hdev->name, ev->status);
842 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
845 conn->link_mode |= HCI_LM_AUTH;
847 clear_bit(HCI_CONN_AUTH_PEND, &conn->pend);
849 hci_auth_cfm(conn, ev->status);
851 if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend)) {
853 struct hci_cp_set_conn_encrypt cp;
854 cp.handle = cpu_to_le16(conn->handle);
856 hci_send_cmd(conn->hdev,
857 HCI_OP_SET_CONN_ENCRYPT, sizeof(cp), &cp);
859 clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend);
860 hci_encrypt_cfm(conn, ev->status, 0x00);
865 hci_dev_unlock(hdev);
868 static inline void hci_remote_name_evt(struct hci_dev *hdev, struct sk_buff *skb)
870 BT_DBG("%s", hdev->name);
872 hci_conn_check_pending(hdev);
875 static inline void hci_encrypt_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
877 struct hci_ev_encrypt_change *ev = (void *) skb->data;
878 struct hci_conn *conn;
880 BT_DBG("%s status %d", hdev->name, ev->status);
884 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
888 conn->link_mode |= HCI_LM_ENCRYPT;
890 conn->link_mode &= ~HCI_LM_ENCRYPT;
893 clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend);
895 hci_encrypt_cfm(conn, ev->status, ev->encrypt);
898 hci_dev_unlock(hdev);
901 static inline void hci_change_link_key_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
903 struct hci_ev_change_link_key_complete *ev = (void *) skb->data;
904 struct hci_conn *conn;
906 BT_DBG("%s status %d", hdev->name, ev->status);
910 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
913 conn->link_mode |= HCI_LM_SECURE;
915 clear_bit(HCI_CONN_AUTH_PEND, &conn->pend);
917 hci_key_change_cfm(conn, ev->status);
920 hci_dev_unlock(hdev);
923 static inline void hci_remote_features_evt(struct hci_dev *hdev, struct sk_buff *skb)
925 struct hci_ev_remote_features *ev = (void *) skb->data;
926 struct hci_conn *conn;
928 BT_DBG("%s status %d", hdev->name, ev->status);
935 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
937 memcpy(conn->features, ev->features, 8);
939 hci_dev_unlock(hdev);
942 static inline void hci_remote_version_evt(struct hci_dev *hdev, struct sk_buff *skb)
944 BT_DBG("%s", hdev->name);
947 static inline void hci_qos_setup_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
949 BT_DBG("%s", hdev->name);
952 static inline void hci_cmd_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
954 struct hci_ev_cmd_complete *ev = (void *) skb->data;
957 skb_pull(skb, sizeof(*ev));
959 opcode = __le16_to_cpu(ev->opcode);
962 case HCI_OP_INQUIRY_CANCEL:
963 hci_cc_inquiry_cancel(hdev, skb);
966 case HCI_OP_EXIT_PERIODIC_INQ:
967 hci_cc_exit_periodic_inq(hdev, skb);
970 case HCI_OP_REMOTE_NAME_REQ_CANCEL:
971 hci_cc_remote_name_req_cancel(hdev, skb);
974 case HCI_OP_ROLE_DISCOVERY:
975 hci_cc_role_discovery(hdev, skb);
978 case HCI_OP_WRITE_LINK_POLICY:
979 hci_cc_write_link_policy(hdev, skb);
983 hci_cc_reset(hdev, skb);
986 case HCI_OP_WRITE_LOCAL_NAME:
987 hci_cc_write_local_name(hdev, skb);
990 case HCI_OP_READ_LOCAL_NAME:
991 hci_cc_read_local_name(hdev, skb);
994 case HCI_OP_WRITE_AUTH_ENABLE:
995 hci_cc_write_auth_enable(hdev, skb);
998 case HCI_OP_WRITE_ENCRYPT_MODE:
999 hci_cc_write_encrypt_mode(hdev, skb);
1002 case HCI_OP_WRITE_SCAN_ENABLE:
1003 hci_cc_write_scan_enable(hdev, skb);
1006 case HCI_OP_READ_CLASS_OF_DEV:
1007 hci_cc_read_class_of_dev(hdev, skb);
1010 case HCI_OP_WRITE_CLASS_OF_DEV:
1011 hci_cc_write_class_of_dev(hdev, skb);
1014 case HCI_OP_READ_VOICE_SETTING:
1015 hci_cc_read_voice_setting(hdev, skb);
1018 case HCI_OP_WRITE_VOICE_SETTING:
1019 hci_cc_write_voice_setting(hdev, skb);
1022 case HCI_OP_HOST_BUFFER_SIZE:
1023 hci_cc_host_buffer_size(hdev, skb);
1026 case HCI_OP_READ_LOCAL_VERSION:
1027 hci_cc_read_local_version(hdev, skb);
1030 case HCI_OP_READ_LOCAL_COMMANDS:
1031 hci_cc_read_local_commands(hdev, skb);
1034 case HCI_OP_READ_LOCAL_FEATURES:
1035 hci_cc_read_local_features(hdev, skb);
1038 case HCI_OP_READ_BUFFER_SIZE:
1039 hci_cc_read_buffer_size(hdev, skb);
1042 case HCI_OP_READ_BD_ADDR:
1043 hci_cc_read_bd_addr(hdev, skb);
1047 BT_DBG("%s opcode 0x%x", hdev->name, opcode);
1052 atomic_set(&hdev->cmd_cnt, 1);
1053 if (!skb_queue_empty(&hdev->cmd_q))
1054 hci_sched_cmd(hdev);
1058 static inline void hci_cmd_status_evt(struct hci_dev *hdev, struct sk_buff *skb)
1060 struct hci_ev_cmd_status *ev = (void *) skb->data;
1063 skb_pull(skb, sizeof(*ev));
1065 opcode = __le16_to_cpu(ev->opcode);
1068 case HCI_OP_INQUIRY:
1069 hci_cs_inquiry(hdev, ev->status);
1072 case HCI_OP_CREATE_CONN:
1073 hci_cs_create_conn(hdev, ev->status);
1076 case HCI_OP_ADD_SCO:
1077 hci_cs_add_sco(hdev, ev->status);
1080 case HCI_OP_REMOTE_NAME_REQ:
1081 hci_cs_remote_name_req(hdev, ev->status);
1084 case HCI_OP_SETUP_SYNC_CONN:
1085 hci_cs_setup_sync_conn(hdev, ev->status);
1088 case HCI_OP_SNIFF_MODE:
1089 hci_cs_sniff_mode(hdev, ev->status);
1092 case HCI_OP_EXIT_SNIFF_MODE:
1093 hci_cs_exit_sniff_mode(hdev, ev->status);
1097 BT_DBG("%s opcode 0x%x", hdev->name, opcode);
1102 atomic_set(&hdev->cmd_cnt, 1);
1103 if (!skb_queue_empty(&hdev->cmd_q))
1104 hci_sched_cmd(hdev);
1108 static inline void hci_role_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
1110 struct hci_ev_role_change *ev = (void *) skb->data;
1111 struct hci_conn *conn;
1113 BT_DBG("%s status %d", hdev->name, ev->status);
1117 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
1121 conn->link_mode &= ~HCI_LM_MASTER;
1123 conn->link_mode |= HCI_LM_MASTER;
1126 clear_bit(HCI_CONN_RSWITCH_PEND, &conn->pend);
1128 hci_role_switch_cfm(conn, ev->status, ev->role);
1131 hci_dev_unlock(hdev);
1134 static inline void hci_num_comp_pkts_evt(struct hci_dev *hdev, struct sk_buff *skb)
1136 struct hci_ev_num_comp_pkts *ev = (void *) skb->data;
1140 skb_pull(skb, sizeof(*ev));
1142 BT_DBG("%s num_hndl %d", hdev->name, ev->num_hndl);
1144 if (skb->len < ev->num_hndl * 4) {
1145 BT_DBG("%s bad parameters", hdev->name);
1149 tasklet_disable(&hdev->tx_task);
1151 for (i = 0, ptr = (__le16 *) skb->data; i < ev->num_hndl; i++) {
1152 struct hci_conn *conn;
1153 __u16 handle, count;
1155 handle = __le16_to_cpu(get_unaligned(ptr++));
1156 count = __le16_to_cpu(get_unaligned(ptr++));
1158 conn = hci_conn_hash_lookup_handle(hdev, handle);
1160 conn->sent -= count;
1162 if (conn->type == ACL_LINK) {
1163 if ((hdev->acl_cnt += count) > hdev->acl_pkts)
1164 hdev->acl_cnt = hdev->acl_pkts;
1166 if ((hdev->sco_cnt += count) > hdev->sco_pkts)
1167 hdev->sco_cnt = hdev->sco_pkts;
1174 tasklet_enable(&hdev->tx_task);
1177 static inline void hci_mode_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
1179 struct hci_ev_mode_change *ev = (void *) skb->data;
1180 struct hci_conn *conn;
1182 BT_DBG("%s status %d", hdev->name, ev->status);
1186 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1188 conn->mode = ev->mode;
1189 conn->interval = __le16_to_cpu(ev->interval);
1191 if (!test_and_clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend)) {
1192 if (conn->mode == HCI_CM_ACTIVE)
1193 conn->power_save = 1;
1195 conn->power_save = 0;
1199 hci_dev_unlock(hdev);
1202 static inline void hci_pin_code_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
1204 BT_DBG("%s", hdev->name);
1207 static inline void hci_link_key_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
1209 BT_DBG("%s", hdev->name);
1212 static inline void hci_link_key_notify_evt(struct hci_dev *hdev, struct sk_buff *skb)
1214 BT_DBG("%s", hdev->name);
1217 static inline void hci_clock_offset_evt(struct hci_dev *hdev, struct sk_buff *skb)
1219 struct hci_ev_clock_offset *ev = (void *) skb->data;
1220 struct hci_conn *conn;
1222 BT_DBG("%s status %d", hdev->name, ev->status);
1226 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1227 if (conn && !ev->status) {
1228 struct inquiry_entry *ie;
1230 if ((ie = hci_inquiry_cache_lookup(hdev, &conn->dst))) {
1231 ie->data.clock_offset = ev->clock_offset;
1232 ie->timestamp = jiffies;
1236 hci_dev_unlock(hdev);
1239 static inline void hci_pscan_rep_mode_evt(struct hci_dev *hdev, struct sk_buff *skb)
1241 struct hci_ev_pscan_rep_mode *ev = (void *) skb->data;
1242 struct inquiry_entry *ie;
1244 BT_DBG("%s", hdev->name);
1248 if ((ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr))) {
1249 ie->data.pscan_rep_mode = ev->pscan_rep_mode;
1250 ie->timestamp = jiffies;
1253 hci_dev_unlock(hdev);
1256 static inline void hci_inquiry_result_with_rssi_evt(struct hci_dev *hdev, struct sk_buff *skb)
1258 struct inquiry_data data;
1259 int num_rsp = *((__u8 *) skb->data);
1261 BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
1268 if ((skb->len - 1) / num_rsp != sizeof(struct inquiry_info_with_rssi)) {
1269 struct inquiry_info_with_rssi_and_pscan_mode *info = (void *) (skb->data + 1);
1271 for (; num_rsp; num_rsp--) {
1272 bacpy(&data.bdaddr, &info->bdaddr);
1273 data.pscan_rep_mode = info->pscan_rep_mode;
1274 data.pscan_period_mode = info->pscan_period_mode;
1275 data.pscan_mode = info->pscan_mode;
1276 memcpy(data.dev_class, info->dev_class, 3);
1277 data.clock_offset = info->clock_offset;
1278 data.rssi = info->rssi;
1280 hci_inquiry_cache_update(hdev, &data);
1283 struct inquiry_info_with_rssi *info = (void *) (skb->data + 1);
1285 for (; num_rsp; num_rsp--) {
1286 bacpy(&data.bdaddr, &info->bdaddr);
1287 data.pscan_rep_mode = info->pscan_rep_mode;
1288 data.pscan_period_mode = info->pscan_period_mode;
1289 data.pscan_mode = 0x00;
1290 memcpy(data.dev_class, info->dev_class, 3);
1291 data.clock_offset = info->clock_offset;
1292 data.rssi = info->rssi;
1294 hci_inquiry_cache_update(hdev, &data);
1298 hci_dev_unlock(hdev);
1301 static inline void hci_remote_ext_features_evt(struct hci_dev *hdev, struct sk_buff *skb)
1303 BT_DBG("%s", hdev->name);
1306 static inline void hci_sync_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1308 struct hci_ev_sync_conn_complete *ev = (void *) skb->data;
1309 struct hci_conn *conn;
1311 BT_DBG("%s status %d", hdev->name, ev->status);
1315 conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
1320 conn->handle = __le16_to_cpu(ev->handle);
1321 conn->state = BT_CONNECTED;
1323 conn->state = BT_CLOSED;
1325 hci_proto_connect_cfm(conn, ev->status);
1330 hci_dev_unlock(hdev);
1333 static inline void hci_sync_conn_changed_evt(struct hci_dev *hdev, struct sk_buff *skb)
1335 BT_DBG("%s", hdev->name);
1338 static inline void hci_sniff_subrate_evt(struct hci_dev *hdev, struct sk_buff *skb)
1340 struct hci_ev_sniff_subrate *ev = (void *) skb->data;
1341 struct hci_conn *conn;
1343 BT_DBG("%s status %d", hdev->name, ev->status);
1347 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1351 hci_dev_unlock(hdev);
1354 static inline void hci_extended_inquiry_result_evt(struct hci_dev *hdev, struct sk_buff *skb)
1356 struct inquiry_data data;
1357 struct extended_inquiry_info *info = (void *) (skb->data + 1);
1358 int num_rsp = *((__u8 *) skb->data);
1360 BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
1367 for (; num_rsp; num_rsp--) {
1368 bacpy(&data.bdaddr, &info->bdaddr);
1369 data.pscan_rep_mode = info->pscan_rep_mode;
1370 data.pscan_period_mode = info->pscan_period_mode;
1371 data.pscan_mode = 0x00;
1372 memcpy(data.dev_class, info->dev_class, 3);
1373 data.clock_offset = info->clock_offset;
1374 data.rssi = info->rssi;
1376 hci_inquiry_cache_update(hdev, &data);
1379 hci_dev_unlock(hdev);
1382 void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb)
1384 struct hci_event_hdr *hdr = (void *) skb->data;
1385 __u8 event = hdr->evt;
1387 skb_pull(skb, HCI_EVENT_HDR_SIZE);
1390 case HCI_EV_INQUIRY_COMPLETE:
1391 hci_inquiry_complete_evt(hdev, skb);
1394 case HCI_EV_INQUIRY_RESULT:
1395 hci_inquiry_result_evt(hdev, skb);
1398 case HCI_EV_CONN_COMPLETE:
1399 hci_conn_complete_evt(hdev, skb);
1402 case HCI_EV_CONN_REQUEST:
1403 hci_conn_request_evt(hdev, skb);
1406 case HCI_EV_DISCONN_COMPLETE:
1407 hci_disconn_complete_evt(hdev, skb);
1410 case HCI_EV_AUTH_COMPLETE:
1411 hci_auth_complete_evt(hdev, skb);
1414 case HCI_EV_REMOTE_NAME:
1415 hci_remote_name_evt(hdev, skb);
1418 case HCI_EV_ENCRYPT_CHANGE:
1419 hci_encrypt_change_evt(hdev, skb);
1422 case HCI_EV_CHANGE_LINK_KEY_COMPLETE:
1423 hci_change_link_key_complete_evt(hdev, skb);
1426 case HCI_EV_REMOTE_FEATURES:
1427 hci_remote_features_evt(hdev, skb);
1430 case HCI_EV_REMOTE_VERSION:
1431 hci_remote_version_evt(hdev, skb);
1434 case HCI_EV_QOS_SETUP_COMPLETE:
1435 hci_qos_setup_complete_evt(hdev, skb);
1438 case HCI_EV_CMD_COMPLETE:
1439 hci_cmd_complete_evt(hdev, skb);
1442 case HCI_EV_CMD_STATUS:
1443 hci_cmd_status_evt(hdev, skb);
1446 case HCI_EV_ROLE_CHANGE:
1447 hci_role_change_evt(hdev, skb);
1450 case HCI_EV_NUM_COMP_PKTS:
1451 hci_num_comp_pkts_evt(hdev, skb);
1454 case HCI_EV_MODE_CHANGE:
1455 hci_mode_change_evt(hdev, skb);
1458 case HCI_EV_PIN_CODE_REQ:
1459 hci_pin_code_request_evt(hdev, skb);
1462 case HCI_EV_LINK_KEY_REQ:
1463 hci_link_key_request_evt(hdev, skb);
1466 case HCI_EV_LINK_KEY_NOTIFY:
1467 hci_link_key_notify_evt(hdev, skb);
1470 case HCI_EV_CLOCK_OFFSET:
1471 hci_clock_offset_evt(hdev, skb);
1474 case HCI_EV_PSCAN_REP_MODE:
1475 hci_pscan_rep_mode_evt(hdev, skb);
1478 case HCI_EV_INQUIRY_RESULT_WITH_RSSI:
1479 hci_inquiry_result_with_rssi_evt(hdev, skb);
1482 case HCI_EV_REMOTE_EXT_FEATURES:
1483 hci_remote_ext_features_evt(hdev, skb);
1486 case HCI_EV_SYNC_CONN_COMPLETE:
1487 hci_sync_conn_complete_evt(hdev, skb);
1490 case HCI_EV_SYNC_CONN_CHANGED:
1491 hci_sync_conn_changed_evt(hdev, skb);
1494 case HCI_EV_SNIFF_SUBRATE:
1495 hci_sniff_subrate_evt(hdev, skb);
1498 case HCI_EV_EXTENDED_INQUIRY_RESULT:
1499 hci_extended_inquiry_result_evt(hdev, skb);
1503 BT_DBG("%s event 0x%x", hdev->name, event);
1508 hdev->stat.evt_rx++;
1511 /* Generate internal stack event */
1512 void hci_si_event(struct hci_dev *hdev, int type, int dlen, void *data)
1514 struct hci_event_hdr *hdr;
1515 struct hci_ev_stack_internal *ev;
1516 struct sk_buff *skb;
1518 skb = bt_skb_alloc(HCI_EVENT_HDR_SIZE + sizeof(*ev) + dlen, GFP_ATOMIC);
1522 hdr = (void *) skb_put(skb, HCI_EVENT_HDR_SIZE);
1523 hdr->evt = HCI_EV_STACK_INTERNAL;
1524 hdr->plen = sizeof(*ev) + dlen;
1526 ev = (void *) skb_put(skb, sizeof(*ev) + dlen);
1528 memcpy(ev->data, data, dlen);
1530 bt_cb(skb)->incoming = 1;
1531 __net_timestamp(skb);
1533 bt_cb(skb)->pkt_type = HCI_EVENT_PKT;
1534 skb->dev = (void *) hdev;
1535 hci_send_to_sock(hdev, skb);