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_read_link_policy(struct hci_dev *hdev, struct sk_buff *skb)
115 struct hci_rp_read_link_policy *rp = (void *) skb->data;
116 struct hci_conn *conn;
118 BT_DBG("%s status 0x%x", hdev->name, rp->status);
125 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
127 conn->link_policy = __le16_to_cpu(rp->policy);
129 hci_dev_unlock(hdev);
132 static void hci_cc_write_link_policy(struct hci_dev *hdev, struct sk_buff *skb)
134 struct hci_rp_write_link_policy *rp = (void *) skb->data;
135 struct hci_conn *conn;
138 BT_DBG("%s status 0x%x", hdev->name, rp->status);
143 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_LINK_POLICY);
149 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
151 conn->link_policy = get_unaligned_le16(sent + 2);
153 hci_dev_unlock(hdev);
156 static void hci_cc_read_def_link_policy(struct hci_dev *hdev, struct sk_buff *skb)
158 struct hci_rp_read_def_link_policy *rp = (void *) skb->data;
160 BT_DBG("%s status 0x%x", hdev->name, rp->status);
165 hdev->link_policy = __le16_to_cpu(rp->policy);
168 static void hci_cc_write_def_link_policy(struct hci_dev *hdev, struct sk_buff *skb)
170 __u8 status = *((__u8 *) skb->data);
173 BT_DBG("%s status 0x%x", hdev->name, status);
175 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_DEF_LINK_POLICY);
180 hdev->link_policy = get_unaligned_le16(sent);
182 hci_req_complete(hdev, status);
185 static void hci_cc_reset(struct hci_dev *hdev, struct sk_buff *skb)
187 __u8 status = *((__u8 *) skb->data);
189 BT_DBG("%s status 0x%x", hdev->name, status);
191 hci_req_complete(hdev, status);
194 static void hci_cc_write_local_name(struct hci_dev *hdev, struct sk_buff *skb)
196 __u8 status = *((__u8 *) skb->data);
199 BT_DBG("%s status 0x%x", hdev->name, status);
204 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_LOCAL_NAME);
208 memcpy(hdev->dev_name, sent, 248);
211 static void hci_cc_read_local_name(struct hci_dev *hdev, struct sk_buff *skb)
213 struct hci_rp_read_local_name *rp = (void *) skb->data;
215 BT_DBG("%s status 0x%x", hdev->name, rp->status);
220 memcpy(hdev->dev_name, rp->name, 248);
223 static void hci_cc_write_auth_enable(struct hci_dev *hdev, struct sk_buff *skb)
225 __u8 status = *((__u8 *) skb->data);
228 BT_DBG("%s status 0x%x", hdev->name, status);
230 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_AUTH_ENABLE);
235 __u8 param = *((__u8 *) sent);
237 if (param == AUTH_ENABLED)
238 set_bit(HCI_AUTH, &hdev->flags);
240 clear_bit(HCI_AUTH, &hdev->flags);
243 hci_req_complete(hdev, status);
246 static void hci_cc_write_encrypt_mode(struct hci_dev *hdev, struct sk_buff *skb)
248 __u8 status = *((__u8 *) skb->data);
251 BT_DBG("%s status 0x%x", hdev->name, status);
253 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_ENCRYPT_MODE);
258 __u8 param = *((__u8 *) sent);
261 set_bit(HCI_ENCRYPT, &hdev->flags);
263 clear_bit(HCI_ENCRYPT, &hdev->flags);
266 hci_req_complete(hdev, status);
269 static void hci_cc_write_scan_enable(struct hci_dev *hdev, struct sk_buff *skb)
271 __u8 status = *((__u8 *) skb->data);
274 BT_DBG("%s status 0x%x", hdev->name, status);
276 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_SCAN_ENABLE);
281 __u8 param = *((__u8 *) sent);
283 clear_bit(HCI_PSCAN, &hdev->flags);
284 clear_bit(HCI_ISCAN, &hdev->flags);
286 if (param & SCAN_INQUIRY)
287 set_bit(HCI_ISCAN, &hdev->flags);
289 if (param & SCAN_PAGE)
290 set_bit(HCI_PSCAN, &hdev->flags);
293 hci_req_complete(hdev, status);
296 static void hci_cc_read_class_of_dev(struct hci_dev *hdev, struct sk_buff *skb)
298 struct hci_rp_read_class_of_dev *rp = (void *) skb->data;
300 BT_DBG("%s status 0x%x", hdev->name, rp->status);
305 memcpy(hdev->dev_class, rp->dev_class, 3);
307 BT_DBG("%s class 0x%.2x%.2x%.2x", hdev->name,
308 hdev->dev_class[2], hdev->dev_class[1], hdev->dev_class[0]);
311 static void hci_cc_write_class_of_dev(struct hci_dev *hdev, struct sk_buff *skb)
313 __u8 status = *((__u8 *) skb->data);
316 BT_DBG("%s status 0x%x", hdev->name, status);
321 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_CLASS_OF_DEV);
325 memcpy(hdev->dev_class, sent, 3);
328 static void hci_cc_read_voice_setting(struct hci_dev *hdev, struct sk_buff *skb)
330 struct hci_rp_read_voice_setting *rp = (void *) skb->data;
333 BT_DBG("%s status 0x%x", hdev->name, rp->status);
338 setting = __le16_to_cpu(rp->voice_setting);
340 if (hdev->voice_setting == setting)
343 hdev->voice_setting = setting;
345 BT_DBG("%s voice setting 0x%04x", hdev->name, setting);
348 tasklet_disable(&hdev->tx_task);
349 hdev->notify(hdev, HCI_NOTIFY_VOICE_SETTING);
350 tasklet_enable(&hdev->tx_task);
354 static void hci_cc_write_voice_setting(struct hci_dev *hdev, struct sk_buff *skb)
356 __u8 status = *((__u8 *) skb->data);
360 BT_DBG("%s status 0x%x", hdev->name, status);
365 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_VOICE_SETTING);
369 setting = get_unaligned_le16(sent);
371 if (hdev->voice_setting == setting)
374 hdev->voice_setting = setting;
376 BT_DBG("%s voice setting 0x%04x", hdev->name, setting);
379 tasklet_disable(&hdev->tx_task);
380 hdev->notify(hdev, HCI_NOTIFY_VOICE_SETTING);
381 tasklet_enable(&hdev->tx_task);
385 static void hci_cc_host_buffer_size(struct hci_dev *hdev, struct sk_buff *skb)
387 __u8 status = *((__u8 *) skb->data);
389 BT_DBG("%s status 0x%x", hdev->name, status);
391 hci_req_complete(hdev, status);
394 static void hci_cc_read_local_version(struct hci_dev *hdev, struct sk_buff *skb)
396 struct hci_rp_read_local_version *rp = (void *) skb->data;
398 BT_DBG("%s status 0x%x", hdev->name, rp->status);
403 hdev->hci_ver = rp->hci_ver;
404 hdev->hci_rev = __le16_to_cpu(rp->hci_rev);
405 hdev->manufacturer = __le16_to_cpu(rp->manufacturer);
407 BT_DBG("%s manufacturer %d hci ver %d:%d", hdev->name,
409 hdev->hci_ver, hdev->hci_rev);
412 static void hci_cc_read_local_commands(struct hci_dev *hdev, struct sk_buff *skb)
414 struct hci_rp_read_local_commands *rp = (void *) skb->data;
416 BT_DBG("%s status 0x%x", hdev->name, rp->status);
421 memcpy(hdev->commands, rp->commands, sizeof(hdev->commands));
424 static void hci_cc_read_local_features(struct hci_dev *hdev, struct sk_buff *skb)
426 struct hci_rp_read_local_features *rp = (void *) skb->data;
428 BT_DBG("%s status 0x%x", hdev->name, rp->status);
433 memcpy(hdev->features, rp->features, 8);
435 /* Adjust default settings according to features
436 * supported by device. */
438 if (hdev->features[0] & LMP_3SLOT)
439 hdev->pkt_type |= (HCI_DM3 | HCI_DH3);
441 if (hdev->features[0] & LMP_5SLOT)
442 hdev->pkt_type |= (HCI_DM5 | HCI_DH5);
444 if (hdev->features[1] & LMP_HV2) {
445 hdev->pkt_type |= (HCI_HV2);
446 hdev->esco_type |= (ESCO_HV2);
449 if (hdev->features[1] & LMP_HV3) {
450 hdev->pkt_type |= (HCI_HV3);
451 hdev->esco_type |= (ESCO_HV3);
454 if (hdev->features[3] & LMP_ESCO)
455 hdev->esco_type |= (ESCO_EV3);
457 if (hdev->features[4] & LMP_EV4)
458 hdev->esco_type |= (ESCO_EV4);
460 if (hdev->features[4] & LMP_EV5)
461 hdev->esco_type |= (ESCO_EV5);
463 BT_DBG("%s features 0x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x", hdev->name,
464 hdev->features[0], hdev->features[1],
465 hdev->features[2], hdev->features[3],
466 hdev->features[4], hdev->features[5],
467 hdev->features[6], hdev->features[7]);
470 static void hci_cc_read_buffer_size(struct hci_dev *hdev, struct sk_buff *skb)
472 struct hci_rp_read_buffer_size *rp = (void *) skb->data;
474 BT_DBG("%s status 0x%x", hdev->name, rp->status);
479 hdev->acl_mtu = __le16_to_cpu(rp->acl_mtu);
480 hdev->sco_mtu = rp->sco_mtu;
481 hdev->acl_pkts = __le16_to_cpu(rp->acl_max_pkt);
482 hdev->sco_pkts = __le16_to_cpu(rp->sco_max_pkt);
484 if (test_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE, &hdev->quirks)) {
489 hdev->acl_cnt = hdev->acl_pkts;
490 hdev->sco_cnt = hdev->sco_pkts;
492 BT_DBG("%s acl mtu %d:%d sco mtu %d:%d", hdev->name,
493 hdev->acl_mtu, hdev->acl_pkts,
494 hdev->sco_mtu, hdev->sco_pkts);
497 static void hci_cc_read_bd_addr(struct hci_dev *hdev, struct sk_buff *skb)
499 struct hci_rp_read_bd_addr *rp = (void *) skb->data;
501 BT_DBG("%s status 0x%x", hdev->name, rp->status);
504 bacpy(&hdev->bdaddr, &rp->bdaddr);
506 hci_req_complete(hdev, rp->status);
509 static inline void hci_cs_inquiry(struct hci_dev *hdev, __u8 status)
511 BT_DBG("%s status 0x%x", hdev->name, status);
514 hci_req_complete(hdev, status);
516 hci_conn_check_pending(hdev);
518 set_bit(HCI_INQUIRY, &hdev->flags);
521 static inline void hci_cs_create_conn(struct hci_dev *hdev, __u8 status)
523 struct hci_cp_create_conn *cp;
524 struct hci_conn *conn;
526 BT_DBG("%s status 0x%x", hdev->name, status);
528 cp = hci_sent_cmd_data(hdev, HCI_OP_CREATE_CONN);
534 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
536 BT_DBG("%s bdaddr %s conn %p", hdev->name, batostr(&cp->bdaddr), conn);
539 if (conn && conn->state == BT_CONNECT) {
540 if (status != 0x0c || conn->attempt > 2) {
541 conn->state = BT_CLOSED;
542 hci_proto_connect_cfm(conn, status);
545 conn->state = BT_CONNECT2;
549 conn = hci_conn_add(hdev, ACL_LINK, &cp->bdaddr);
552 conn->link_mode |= HCI_LM_MASTER;
554 BT_ERR("No memmory for new connection");
558 hci_dev_unlock(hdev);
561 static void hci_cs_add_sco(struct hci_dev *hdev, __u8 status)
563 struct hci_cp_add_sco *cp;
564 struct hci_conn *acl, *sco;
567 BT_DBG("%s status 0x%x", hdev->name, status);
572 cp = hci_sent_cmd_data(hdev, HCI_OP_ADD_SCO);
576 handle = __le16_to_cpu(cp->handle);
578 BT_DBG("%s handle %d", hdev->name, handle);
582 acl = hci_conn_hash_lookup_handle(hdev, handle);
583 if (acl && (sco = acl->link)) {
584 sco->state = BT_CLOSED;
586 hci_proto_connect_cfm(sco, status);
590 hci_dev_unlock(hdev);
593 static void hci_cs_remote_name_req(struct hci_dev *hdev, __u8 status)
595 BT_DBG("%s status 0x%x", hdev->name, status);
598 static void hci_cs_setup_sync_conn(struct hci_dev *hdev, __u8 status)
600 struct hci_cp_setup_sync_conn *cp;
601 struct hci_conn *acl, *sco;
604 BT_DBG("%s status 0x%x", hdev->name, status);
609 cp = hci_sent_cmd_data(hdev, HCI_OP_SETUP_SYNC_CONN);
613 handle = __le16_to_cpu(cp->handle);
615 BT_DBG("%s handle %d", hdev->name, handle);
619 acl = hci_conn_hash_lookup_handle(hdev, handle);
620 if (acl && (sco = acl->link)) {
621 sco->state = BT_CLOSED;
623 hci_proto_connect_cfm(sco, status);
627 hci_dev_unlock(hdev);
630 static void hci_cs_sniff_mode(struct hci_dev *hdev, __u8 status)
632 struct hci_cp_sniff_mode *cp;
633 struct hci_conn *conn;
635 BT_DBG("%s status 0x%x", hdev->name, status);
640 cp = hci_sent_cmd_data(hdev, HCI_OP_SNIFF_MODE);
646 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
648 clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend);
650 hci_dev_unlock(hdev);
653 static void hci_cs_exit_sniff_mode(struct hci_dev *hdev, __u8 status)
655 struct hci_cp_exit_sniff_mode *cp;
656 struct hci_conn *conn;
658 BT_DBG("%s status 0x%x", hdev->name, status);
663 cp = hci_sent_cmd_data(hdev, HCI_OP_EXIT_SNIFF_MODE);
669 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
671 clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend);
673 hci_dev_unlock(hdev);
676 static inline void hci_inquiry_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
678 __u8 status = *((__u8 *) skb->data);
680 BT_DBG("%s status %d", hdev->name, status);
682 clear_bit(HCI_INQUIRY, &hdev->flags);
684 hci_req_complete(hdev, status);
686 hci_conn_check_pending(hdev);
689 static inline void hci_inquiry_result_evt(struct hci_dev *hdev, struct sk_buff *skb)
691 struct inquiry_data data;
692 struct inquiry_info *info = (void *) (skb->data + 1);
693 int num_rsp = *((__u8 *) skb->data);
695 BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
702 for (; num_rsp; num_rsp--) {
703 bacpy(&data.bdaddr, &info->bdaddr);
704 data.pscan_rep_mode = info->pscan_rep_mode;
705 data.pscan_period_mode = info->pscan_period_mode;
706 data.pscan_mode = info->pscan_mode;
707 memcpy(data.dev_class, info->dev_class, 3);
708 data.clock_offset = info->clock_offset;
711 hci_inquiry_cache_update(hdev, &data);
714 hci_dev_unlock(hdev);
717 static inline void hci_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
719 struct hci_ev_conn_complete *ev = (void *) skb->data;
720 struct hci_conn *conn;
722 BT_DBG("%s", hdev->name);
726 conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
731 conn->handle = __le16_to_cpu(ev->handle);
732 conn->state = BT_CONNECTED;
734 if (test_bit(HCI_AUTH, &hdev->flags))
735 conn->link_mode |= HCI_LM_AUTH;
737 if (test_bit(HCI_ENCRYPT, &hdev->flags))
738 conn->link_mode |= HCI_LM_ENCRYPT;
740 /* Get remote features */
741 if (conn->type == ACL_LINK) {
742 struct hci_cp_read_remote_features cp;
743 cp.handle = ev->handle;
744 hci_send_cmd(hdev, HCI_OP_READ_REMOTE_FEATURES, sizeof(cp), &cp);
747 /* Set packet type for incoming connection */
748 if (!conn->out && hdev->hci_ver < 3) {
749 struct hci_cp_change_conn_ptype cp;
750 cp.handle = ev->handle;
751 cp.pkt_type = cpu_to_le16(conn->pkt_type);
752 hci_send_cmd(hdev, HCI_OP_CHANGE_CONN_PTYPE,
755 /* Update disconnect timer */
760 conn->state = BT_CLOSED;
762 if (conn->type == ACL_LINK) {
763 struct hci_conn *sco = conn->link;
766 if (lmp_esco_capable(hdev))
767 hci_setup_sync(sco, conn->handle);
769 hci_add_sco(sco, conn->handle);
771 hci_proto_connect_cfm(sco, ev->status);
777 hci_proto_connect_cfm(conn, ev->status);
782 hci_dev_unlock(hdev);
784 hci_conn_check_pending(hdev);
787 static inline void hci_conn_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
789 struct hci_ev_conn_request *ev = (void *) skb->data;
790 int mask = hdev->link_mode;
792 BT_DBG("%s bdaddr %s type 0x%x", hdev->name,
793 batostr(&ev->bdaddr), ev->link_type);
795 mask |= hci_proto_connect_ind(hdev, &ev->bdaddr, ev->link_type);
797 if (mask & HCI_LM_ACCEPT) {
798 /* Connection accepted */
799 struct hci_conn *conn;
803 conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
805 if (!(conn = hci_conn_add(hdev, ev->link_type, &ev->bdaddr))) {
806 BT_ERR("No memmory for new connection");
807 hci_dev_unlock(hdev);
812 memcpy(conn->dev_class, ev->dev_class, 3);
813 conn->state = BT_CONNECT;
815 hci_dev_unlock(hdev);
817 if (ev->link_type == ACL_LINK || !lmp_esco_capable(hdev)) {
818 struct hci_cp_accept_conn_req cp;
820 bacpy(&cp.bdaddr, &ev->bdaddr);
822 if (lmp_rswitch_capable(hdev) && (mask & HCI_LM_MASTER))
823 cp.role = 0x00; /* Become master */
825 cp.role = 0x01; /* Remain slave */
827 hci_send_cmd(hdev, HCI_OP_ACCEPT_CONN_REQ,
830 struct hci_cp_accept_sync_conn_req cp;
832 bacpy(&cp.bdaddr, &ev->bdaddr);
833 cp.pkt_type = cpu_to_le16(conn->pkt_type);
835 cp.tx_bandwidth = cpu_to_le32(0x00001f40);
836 cp.rx_bandwidth = cpu_to_le32(0x00001f40);
837 cp.max_latency = cpu_to_le16(0xffff);
838 cp.content_format = cpu_to_le16(hdev->voice_setting);
839 cp.retrans_effort = 0xff;
841 hci_send_cmd(hdev, HCI_OP_ACCEPT_SYNC_CONN_REQ,
845 /* Connection rejected */
846 struct hci_cp_reject_conn_req cp;
848 bacpy(&cp.bdaddr, &ev->bdaddr);
850 hci_send_cmd(hdev, HCI_OP_REJECT_CONN_REQ, sizeof(cp), &cp);
854 static inline void hci_disconn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
856 struct hci_ev_disconn_complete *ev = (void *) skb->data;
857 struct hci_conn *conn;
859 BT_DBG("%s status %d", hdev->name, ev->status);
866 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
868 conn->state = BT_CLOSED;
869 hci_proto_disconn_ind(conn, ev->reason);
873 hci_dev_unlock(hdev);
876 static inline void hci_auth_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
878 struct hci_ev_auth_complete *ev = (void *) skb->data;
879 struct hci_conn *conn;
881 BT_DBG("%s status %d", hdev->name, ev->status);
885 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
888 conn->link_mode |= HCI_LM_AUTH;
890 clear_bit(HCI_CONN_AUTH_PEND, &conn->pend);
892 hci_auth_cfm(conn, ev->status);
894 if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend)) {
896 struct hci_cp_set_conn_encrypt cp;
897 cp.handle = cpu_to_le16(conn->handle);
899 hci_send_cmd(conn->hdev,
900 HCI_OP_SET_CONN_ENCRYPT, sizeof(cp), &cp);
902 clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend);
903 hci_encrypt_cfm(conn, ev->status, 0x00);
908 hci_dev_unlock(hdev);
911 static inline void hci_remote_name_evt(struct hci_dev *hdev, struct sk_buff *skb)
913 BT_DBG("%s", hdev->name);
915 hci_conn_check_pending(hdev);
918 static inline void hci_encrypt_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
920 struct hci_ev_encrypt_change *ev = (void *) skb->data;
921 struct hci_conn *conn;
923 BT_DBG("%s status %d", hdev->name, ev->status);
927 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
931 /* Encryption implies authentication */
932 conn->link_mode |= HCI_LM_AUTH;
933 conn->link_mode |= HCI_LM_ENCRYPT;
935 conn->link_mode &= ~HCI_LM_ENCRYPT;
938 clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend);
940 hci_encrypt_cfm(conn, ev->status, ev->encrypt);
943 hci_dev_unlock(hdev);
946 static inline void hci_change_link_key_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
948 struct hci_ev_change_link_key_complete *ev = (void *) skb->data;
949 struct hci_conn *conn;
951 BT_DBG("%s status %d", hdev->name, ev->status);
955 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
958 conn->link_mode |= HCI_LM_SECURE;
960 clear_bit(HCI_CONN_AUTH_PEND, &conn->pend);
962 hci_key_change_cfm(conn, ev->status);
965 hci_dev_unlock(hdev);
968 static inline void hci_remote_features_evt(struct hci_dev *hdev, struct sk_buff *skb)
970 struct hci_ev_remote_features *ev = (void *) skb->data;
971 struct hci_conn *conn;
973 BT_DBG("%s status %d", hdev->name, ev->status);
980 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
982 memcpy(conn->features, ev->features, 8);
984 hci_dev_unlock(hdev);
987 static inline void hci_remote_version_evt(struct hci_dev *hdev, struct sk_buff *skb)
989 BT_DBG("%s", hdev->name);
992 static inline void hci_qos_setup_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
994 BT_DBG("%s", hdev->name);
997 static inline void hci_cmd_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
999 struct hci_ev_cmd_complete *ev = (void *) skb->data;
1002 skb_pull(skb, sizeof(*ev));
1004 opcode = __le16_to_cpu(ev->opcode);
1007 case HCI_OP_INQUIRY_CANCEL:
1008 hci_cc_inquiry_cancel(hdev, skb);
1011 case HCI_OP_EXIT_PERIODIC_INQ:
1012 hci_cc_exit_periodic_inq(hdev, skb);
1015 case HCI_OP_REMOTE_NAME_REQ_CANCEL:
1016 hci_cc_remote_name_req_cancel(hdev, skb);
1019 case HCI_OP_ROLE_DISCOVERY:
1020 hci_cc_role_discovery(hdev, skb);
1023 case HCI_OP_READ_LINK_POLICY:
1024 hci_cc_read_link_policy(hdev, skb);
1027 case HCI_OP_WRITE_LINK_POLICY:
1028 hci_cc_write_link_policy(hdev, skb);
1031 case HCI_OP_READ_DEF_LINK_POLICY:
1032 hci_cc_read_def_link_policy(hdev, skb);
1035 case HCI_OP_WRITE_DEF_LINK_POLICY:
1036 hci_cc_write_def_link_policy(hdev, skb);
1040 hci_cc_reset(hdev, skb);
1043 case HCI_OP_WRITE_LOCAL_NAME:
1044 hci_cc_write_local_name(hdev, skb);
1047 case HCI_OP_READ_LOCAL_NAME:
1048 hci_cc_read_local_name(hdev, skb);
1051 case HCI_OP_WRITE_AUTH_ENABLE:
1052 hci_cc_write_auth_enable(hdev, skb);
1055 case HCI_OP_WRITE_ENCRYPT_MODE:
1056 hci_cc_write_encrypt_mode(hdev, skb);
1059 case HCI_OP_WRITE_SCAN_ENABLE:
1060 hci_cc_write_scan_enable(hdev, skb);
1063 case HCI_OP_READ_CLASS_OF_DEV:
1064 hci_cc_read_class_of_dev(hdev, skb);
1067 case HCI_OP_WRITE_CLASS_OF_DEV:
1068 hci_cc_write_class_of_dev(hdev, skb);
1071 case HCI_OP_READ_VOICE_SETTING:
1072 hci_cc_read_voice_setting(hdev, skb);
1075 case HCI_OP_WRITE_VOICE_SETTING:
1076 hci_cc_write_voice_setting(hdev, skb);
1079 case HCI_OP_HOST_BUFFER_SIZE:
1080 hci_cc_host_buffer_size(hdev, skb);
1083 case HCI_OP_READ_LOCAL_VERSION:
1084 hci_cc_read_local_version(hdev, skb);
1087 case HCI_OP_READ_LOCAL_COMMANDS:
1088 hci_cc_read_local_commands(hdev, skb);
1091 case HCI_OP_READ_LOCAL_FEATURES:
1092 hci_cc_read_local_features(hdev, skb);
1095 case HCI_OP_READ_BUFFER_SIZE:
1096 hci_cc_read_buffer_size(hdev, skb);
1099 case HCI_OP_READ_BD_ADDR:
1100 hci_cc_read_bd_addr(hdev, skb);
1104 BT_DBG("%s opcode 0x%x", hdev->name, opcode);
1109 atomic_set(&hdev->cmd_cnt, 1);
1110 if (!skb_queue_empty(&hdev->cmd_q))
1111 hci_sched_cmd(hdev);
1115 static inline void hci_cmd_status_evt(struct hci_dev *hdev, struct sk_buff *skb)
1117 struct hci_ev_cmd_status *ev = (void *) skb->data;
1120 skb_pull(skb, sizeof(*ev));
1122 opcode = __le16_to_cpu(ev->opcode);
1125 case HCI_OP_INQUIRY:
1126 hci_cs_inquiry(hdev, ev->status);
1129 case HCI_OP_CREATE_CONN:
1130 hci_cs_create_conn(hdev, ev->status);
1133 case HCI_OP_ADD_SCO:
1134 hci_cs_add_sco(hdev, ev->status);
1137 case HCI_OP_REMOTE_NAME_REQ:
1138 hci_cs_remote_name_req(hdev, ev->status);
1141 case HCI_OP_SETUP_SYNC_CONN:
1142 hci_cs_setup_sync_conn(hdev, ev->status);
1145 case HCI_OP_SNIFF_MODE:
1146 hci_cs_sniff_mode(hdev, ev->status);
1149 case HCI_OP_EXIT_SNIFF_MODE:
1150 hci_cs_exit_sniff_mode(hdev, ev->status);
1154 BT_DBG("%s opcode 0x%x", hdev->name, opcode);
1159 atomic_set(&hdev->cmd_cnt, 1);
1160 if (!skb_queue_empty(&hdev->cmd_q))
1161 hci_sched_cmd(hdev);
1165 static inline void hci_role_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
1167 struct hci_ev_role_change *ev = (void *) skb->data;
1168 struct hci_conn *conn;
1170 BT_DBG("%s status %d", hdev->name, ev->status);
1174 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
1178 conn->link_mode &= ~HCI_LM_MASTER;
1180 conn->link_mode |= HCI_LM_MASTER;
1183 clear_bit(HCI_CONN_RSWITCH_PEND, &conn->pend);
1185 hci_role_switch_cfm(conn, ev->status, ev->role);
1188 hci_dev_unlock(hdev);
1191 static inline void hci_num_comp_pkts_evt(struct hci_dev *hdev, struct sk_buff *skb)
1193 struct hci_ev_num_comp_pkts *ev = (void *) skb->data;
1197 skb_pull(skb, sizeof(*ev));
1199 BT_DBG("%s num_hndl %d", hdev->name, ev->num_hndl);
1201 if (skb->len < ev->num_hndl * 4) {
1202 BT_DBG("%s bad parameters", hdev->name);
1206 tasklet_disable(&hdev->tx_task);
1208 for (i = 0, ptr = (__le16 *) skb->data; i < ev->num_hndl; i++) {
1209 struct hci_conn *conn;
1210 __u16 handle, count;
1212 handle = get_unaligned_le16(ptr++);
1213 count = get_unaligned_le16(ptr++);
1215 conn = hci_conn_hash_lookup_handle(hdev, handle);
1217 conn->sent -= count;
1219 if (conn->type == ACL_LINK) {
1220 if ((hdev->acl_cnt += count) > hdev->acl_pkts)
1221 hdev->acl_cnt = hdev->acl_pkts;
1223 if ((hdev->sco_cnt += count) > hdev->sco_pkts)
1224 hdev->sco_cnt = hdev->sco_pkts;
1231 tasklet_enable(&hdev->tx_task);
1234 static inline void hci_mode_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
1236 struct hci_ev_mode_change *ev = (void *) skb->data;
1237 struct hci_conn *conn;
1239 BT_DBG("%s status %d", hdev->name, ev->status);
1243 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1245 conn->mode = ev->mode;
1246 conn->interval = __le16_to_cpu(ev->interval);
1248 if (!test_and_clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend)) {
1249 if (conn->mode == HCI_CM_ACTIVE)
1250 conn->power_save = 1;
1252 conn->power_save = 0;
1256 hci_dev_unlock(hdev);
1259 static inline void hci_pin_code_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
1261 BT_DBG("%s", hdev->name);
1264 static inline void hci_link_key_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
1266 BT_DBG("%s", hdev->name);
1269 static inline void hci_link_key_notify_evt(struct hci_dev *hdev, struct sk_buff *skb)
1271 BT_DBG("%s", hdev->name);
1274 static inline void hci_clock_offset_evt(struct hci_dev *hdev, struct sk_buff *skb)
1276 struct hci_ev_clock_offset *ev = (void *) skb->data;
1277 struct hci_conn *conn;
1279 BT_DBG("%s status %d", hdev->name, ev->status);
1283 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1284 if (conn && !ev->status) {
1285 struct inquiry_entry *ie;
1287 if ((ie = hci_inquiry_cache_lookup(hdev, &conn->dst))) {
1288 ie->data.clock_offset = ev->clock_offset;
1289 ie->timestamp = jiffies;
1293 hci_dev_unlock(hdev);
1296 static inline void hci_pkt_type_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
1298 struct hci_ev_pkt_type_change *ev = (void *) skb->data;
1299 struct hci_conn *conn;
1301 BT_DBG("%s status %d", hdev->name, ev->status);
1305 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1306 if (conn && !ev->status)
1307 conn->pkt_type = __le16_to_cpu(ev->pkt_type);
1309 hci_dev_unlock(hdev);
1312 static inline void hci_pscan_rep_mode_evt(struct hci_dev *hdev, struct sk_buff *skb)
1314 struct hci_ev_pscan_rep_mode *ev = (void *) skb->data;
1315 struct inquiry_entry *ie;
1317 BT_DBG("%s", hdev->name);
1321 if ((ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr))) {
1322 ie->data.pscan_rep_mode = ev->pscan_rep_mode;
1323 ie->timestamp = jiffies;
1326 hci_dev_unlock(hdev);
1329 static inline void hci_inquiry_result_with_rssi_evt(struct hci_dev *hdev, struct sk_buff *skb)
1331 struct inquiry_data data;
1332 int num_rsp = *((__u8 *) skb->data);
1334 BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
1341 if ((skb->len - 1) / num_rsp != sizeof(struct inquiry_info_with_rssi)) {
1342 struct inquiry_info_with_rssi_and_pscan_mode *info = (void *) (skb->data + 1);
1344 for (; num_rsp; num_rsp--) {
1345 bacpy(&data.bdaddr, &info->bdaddr);
1346 data.pscan_rep_mode = info->pscan_rep_mode;
1347 data.pscan_period_mode = info->pscan_period_mode;
1348 data.pscan_mode = info->pscan_mode;
1349 memcpy(data.dev_class, info->dev_class, 3);
1350 data.clock_offset = info->clock_offset;
1351 data.rssi = info->rssi;
1353 hci_inquiry_cache_update(hdev, &data);
1356 struct inquiry_info_with_rssi *info = (void *) (skb->data + 1);
1358 for (; num_rsp; num_rsp--) {
1359 bacpy(&data.bdaddr, &info->bdaddr);
1360 data.pscan_rep_mode = info->pscan_rep_mode;
1361 data.pscan_period_mode = info->pscan_period_mode;
1362 data.pscan_mode = 0x00;
1363 memcpy(data.dev_class, info->dev_class, 3);
1364 data.clock_offset = info->clock_offset;
1365 data.rssi = info->rssi;
1367 hci_inquiry_cache_update(hdev, &data);
1371 hci_dev_unlock(hdev);
1374 static inline void hci_remote_ext_features_evt(struct hci_dev *hdev, struct sk_buff *skb)
1376 BT_DBG("%s", hdev->name);
1379 static inline void hci_sync_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1381 struct hci_ev_sync_conn_complete *ev = (void *) skb->data;
1382 struct hci_conn *conn;
1384 BT_DBG("%s status %d", hdev->name, ev->status);
1388 conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
1390 if (ev->link_type == ESCO_LINK)
1393 conn = hci_conn_hash_lookup_ba(hdev, ESCO_LINK, &ev->bdaddr);
1397 conn->type = SCO_LINK;
1401 conn->handle = __le16_to_cpu(ev->handle);
1402 conn->state = BT_CONNECTED;
1404 conn->state = BT_CLOSED;
1406 hci_proto_connect_cfm(conn, ev->status);
1411 hci_dev_unlock(hdev);
1414 static inline void hci_sync_conn_changed_evt(struct hci_dev *hdev, struct sk_buff *skb)
1416 BT_DBG("%s", hdev->name);
1419 static inline void hci_sniff_subrate_evt(struct hci_dev *hdev, struct sk_buff *skb)
1421 struct hci_ev_sniff_subrate *ev = (void *) skb->data;
1422 struct hci_conn *conn;
1424 BT_DBG("%s status %d", hdev->name, ev->status);
1428 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1432 hci_dev_unlock(hdev);
1435 static inline void hci_extended_inquiry_result_evt(struct hci_dev *hdev, struct sk_buff *skb)
1437 struct inquiry_data data;
1438 struct extended_inquiry_info *info = (void *) (skb->data + 1);
1439 int num_rsp = *((__u8 *) skb->data);
1441 BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
1448 for (; num_rsp; num_rsp--) {
1449 bacpy(&data.bdaddr, &info->bdaddr);
1450 data.pscan_rep_mode = info->pscan_rep_mode;
1451 data.pscan_period_mode = info->pscan_period_mode;
1452 data.pscan_mode = 0x00;
1453 memcpy(data.dev_class, info->dev_class, 3);
1454 data.clock_offset = info->clock_offset;
1455 data.rssi = info->rssi;
1457 hci_inquiry_cache_update(hdev, &data);
1460 hci_dev_unlock(hdev);
1463 void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb)
1465 struct hci_event_hdr *hdr = (void *) skb->data;
1466 __u8 event = hdr->evt;
1468 skb_pull(skb, HCI_EVENT_HDR_SIZE);
1471 case HCI_EV_INQUIRY_COMPLETE:
1472 hci_inquiry_complete_evt(hdev, skb);
1475 case HCI_EV_INQUIRY_RESULT:
1476 hci_inquiry_result_evt(hdev, skb);
1479 case HCI_EV_CONN_COMPLETE:
1480 hci_conn_complete_evt(hdev, skb);
1483 case HCI_EV_CONN_REQUEST:
1484 hci_conn_request_evt(hdev, skb);
1487 case HCI_EV_DISCONN_COMPLETE:
1488 hci_disconn_complete_evt(hdev, skb);
1491 case HCI_EV_AUTH_COMPLETE:
1492 hci_auth_complete_evt(hdev, skb);
1495 case HCI_EV_REMOTE_NAME:
1496 hci_remote_name_evt(hdev, skb);
1499 case HCI_EV_ENCRYPT_CHANGE:
1500 hci_encrypt_change_evt(hdev, skb);
1503 case HCI_EV_CHANGE_LINK_KEY_COMPLETE:
1504 hci_change_link_key_complete_evt(hdev, skb);
1507 case HCI_EV_REMOTE_FEATURES:
1508 hci_remote_features_evt(hdev, skb);
1511 case HCI_EV_REMOTE_VERSION:
1512 hci_remote_version_evt(hdev, skb);
1515 case HCI_EV_QOS_SETUP_COMPLETE:
1516 hci_qos_setup_complete_evt(hdev, skb);
1519 case HCI_EV_CMD_COMPLETE:
1520 hci_cmd_complete_evt(hdev, skb);
1523 case HCI_EV_CMD_STATUS:
1524 hci_cmd_status_evt(hdev, skb);
1527 case HCI_EV_ROLE_CHANGE:
1528 hci_role_change_evt(hdev, skb);
1531 case HCI_EV_NUM_COMP_PKTS:
1532 hci_num_comp_pkts_evt(hdev, skb);
1535 case HCI_EV_MODE_CHANGE:
1536 hci_mode_change_evt(hdev, skb);
1539 case HCI_EV_PIN_CODE_REQ:
1540 hci_pin_code_request_evt(hdev, skb);
1543 case HCI_EV_LINK_KEY_REQ:
1544 hci_link_key_request_evt(hdev, skb);
1547 case HCI_EV_LINK_KEY_NOTIFY:
1548 hci_link_key_notify_evt(hdev, skb);
1551 case HCI_EV_CLOCK_OFFSET:
1552 hci_clock_offset_evt(hdev, skb);
1555 case HCI_EV_PKT_TYPE_CHANGE:
1556 hci_pkt_type_change_evt(hdev, skb);
1559 case HCI_EV_PSCAN_REP_MODE:
1560 hci_pscan_rep_mode_evt(hdev, skb);
1563 case HCI_EV_INQUIRY_RESULT_WITH_RSSI:
1564 hci_inquiry_result_with_rssi_evt(hdev, skb);
1567 case HCI_EV_REMOTE_EXT_FEATURES:
1568 hci_remote_ext_features_evt(hdev, skb);
1571 case HCI_EV_SYNC_CONN_COMPLETE:
1572 hci_sync_conn_complete_evt(hdev, skb);
1575 case HCI_EV_SYNC_CONN_CHANGED:
1576 hci_sync_conn_changed_evt(hdev, skb);
1579 case HCI_EV_SNIFF_SUBRATE:
1580 hci_sniff_subrate_evt(hdev, skb);
1583 case HCI_EV_EXTENDED_INQUIRY_RESULT:
1584 hci_extended_inquiry_result_evt(hdev, skb);
1588 BT_DBG("%s event 0x%x", hdev->name, event);
1593 hdev->stat.evt_rx++;
1596 /* Generate internal stack event */
1597 void hci_si_event(struct hci_dev *hdev, int type, int dlen, void *data)
1599 struct hci_event_hdr *hdr;
1600 struct hci_ev_stack_internal *ev;
1601 struct sk_buff *skb;
1603 skb = bt_skb_alloc(HCI_EVENT_HDR_SIZE + sizeof(*ev) + dlen, GFP_ATOMIC);
1607 hdr = (void *) skb_put(skb, HCI_EVENT_HDR_SIZE);
1608 hdr->evt = HCI_EV_STACK_INTERNAL;
1609 hdr->plen = sizeof(*ev) + dlen;
1611 ev = (void *) skb_put(skb, sizeof(*ev) + dlen);
1613 memcpy(ev->data, data, dlen);
1615 bt_cb(skb)->incoming = 1;
1616 __net_timestamp(skb);
1618 bt_cb(skb)->pkt_type = HCI_EVENT_PKT;
1619 skb->dev = (void *) hdev;
1620 hci_send_to_sock(hdev, skb);