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 /* Handle HCI Event packets */
50 static void hci_cc_inquiry_cancel(struct hci_dev *hdev, struct sk_buff *skb)
52 __u8 status = *((__u8 *) skb->data);
54 BT_DBG("%s status 0x%x", hdev->name, status);
59 clear_bit(HCI_INQUIRY, &hdev->flags);
61 hci_req_complete(hdev, status);
63 hci_conn_check_pending(hdev);
66 static void hci_cc_exit_periodic_inq(struct hci_dev *hdev, struct sk_buff *skb)
68 __u8 status = *((__u8 *) skb->data);
70 BT_DBG("%s status 0x%x", hdev->name, status);
75 clear_bit(HCI_INQUIRY, &hdev->flags);
77 hci_conn_check_pending(hdev);
80 static void hci_cc_remote_name_req_cancel(struct hci_dev *hdev, struct sk_buff *skb)
82 BT_DBG("%s", hdev->name);
85 static void hci_cc_role_discovery(struct hci_dev *hdev, struct sk_buff *skb)
87 struct hci_rp_role_discovery *rp = (void *) skb->data;
88 struct hci_conn *conn;
90 BT_DBG("%s status 0x%x", hdev->name, rp->status);
97 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
100 conn->link_mode &= ~HCI_LM_MASTER;
102 conn->link_mode |= HCI_LM_MASTER;
105 hci_dev_unlock(hdev);
108 static void hci_cc_read_link_policy(struct hci_dev *hdev, struct sk_buff *skb)
110 struct hci_rp_read_link_policy *rp = (void *) skb->data;
111 struct hci_conn *conn;
113 BT_DBG("%s status 0x%x", hdev->name, rp->status);
120 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
122 conn->link_policy = __le16_to_cpu(rp->policy);
124 hci_dev_unlock(hdev);
127 static void hci_cc_write_link_policy(struct hci_dev *hdev, struct sk_buff *skb)
129 struct hci_rp_write_link_policy *rp = (void *) skb->data;
130 struct hci_conn *conn;
133 BT_DBG("%s status 0x%x", hdev->name, rp->status);
138 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_LINK_POLICY);
144 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
146 conn->link_policy = get_unaligned_le16(sent + 2);
148 hci_dev_unlock(hdev);
151 static void hci_cc_read_def_link_policy(struct hci_dev *hdev, struct sk_buff *skb)
153 struct hci_rp_read_def_link_policy *rp = (void *) skb->data;
155 BT_DBG("%s status 0x%x", hdev->name, rp->status);
160 hdev->link_policy = __le16_to_cpu(rp->policy);
163 static void hci_cc_write_def_link_policy(struct hci_dev *hdev, struct sk_buff *skb)
165 __u8 status = *((__u8 *) skb->data);
168 BT_DBG("%s status 0x%x", hdev->name, status);
170 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_DEF_LINK_POLICY);
175 hdev->link_policy = get_unaligned_le16(sent);
177 hci_req_complete(hdev, status);
180 static void hci_cc_reset(struct hci_dev *hdev, struct sk_buff *skb)
182 __u8 status = *((__u8 *) skb->data);
184 BT_DBG("%s status 0x%x", hdev->name, status);
186 hci_req_complete(hdev, status);
189 static void hci_cc_write_local_name(struct hci_dev *hdev, struct sk_buff *skb)
191 __u8 status = *((__u8 *) skb->data);
194 BT_DBG("%s status 0x%x", hdev->name, status);
199 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_LOCAL_NAME);
203 memcpy(hdev->dev_name, sent, 248);
206 static void hci_cc_read_local_name(struct hci_dev *hdev, struct sk_buff *skb)
208 struct hci_rp_read_local_name *rp = (void *) skb->data;
210 BT_DBG("%s status 0x%x", hdev->name, rp->status);
215 memcpy(hdev->dev_name, rp->name, 248);
218 static void hci_cc_write_auth_enable(struct hci_dev *hdev, struct sk_buff *skb)
220 __u8 status = *((__u8 *) skb->data);
223 BT_DBG("%s status 0x%x", hdev->name, status);
225 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_AUTH_ENABLE);
230 __u8 param = *((__u8 *) sent);
232 if (param == AUTH_ENABLED)
233 set_bit(HCI_AUTH, &hdev->flags);
235 clear_bit(HCI_AUTH, &hdev->flags);
238 hci_req_complete(hdev, status);
241 static void hci_cc_write_encrypt_mode(struct hci_dev *hdev, struct sk_buff *skb)
243 __u8 status = *((__u8 *) skb->data);
246 BT_DBG("%s status 0x%x", hdev->name, status);
248 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_ENCRYPT_MODE);
253 __u8 param = *((__u8 *) sent);
256 set_bit(HCI_ENCRYPT, &hdev->flags);
258 clear_bit(HCI_ENCRYPT, &hdev->flags);
261 hci_req_complete(hdev, status);
264 static void hci_cc_write_scan_enable(struct hci_dev *hdev, struct sk_buff *skb)
266 __u8 status = *((__u8 *) skb->data);
269 BT_DBG("%s status 0x%x", hdev->name, status);
271 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_SCAN_ENABLE);
276 __u8 param = *((__u8 *) sent);
278 clear_bit(HCI_PSCAN, &hdev->flags);
279 clear_bit(HCI_ISCAN, &hdev->flags);
281 if (param & SCAN_INQUIRY)
282 set_bit(HCI_ISCAN, &hdev->flags);
284 if (param & SCAN_PAGE)
285 set_bit(HCI_PSCAN, &hdev->flags);
288 hci_req_complete(hdev, status);
291 static void hci_cc_read_class_of_dev(struct hci_dev *hdev, struct sk_buff *skb)
293 struct hci_rp_read_class_of_dev *rp = (void *) skb->data;
295 BT_DBG("%s status 0x%x", hdev->name, rp->status);
300 memcpy(hdev->dev_class, rp->dev_class, 3);
302 BT_DBG("%s class 0x%.2x%.2x%.2x", hdev->name,
303 hdev->dev_class[2], hdev->dev_class[1], hdev->dev_class[0]);
306 static void hci_cc_write_class_of_dev(struct hci_dev *hdev, struct sk_buff *skb)
308 __u8 status = *((__u8 *) skb->data);
311 BT_DBG("%s status 0x%x", hdev->name, status);
316 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_CLASS_OF_DEV);
320 memcpy(hdev->dev_class, sent, 3);
323 static void hci_cc_read_voice_setting(struct hci_dev *hdev, struct sk_buff *skb)
325 struct hci_rp_read_voice_setting *rp = (void *) skb->data;
328 BT_DBG("%s status 0x%x", hdev->name, rp->status);
333 setting = __le16_to_cpu(rp->voice_setting);
335 if (hdev->voice_setting == setting)
338 hdev->voice_setting = setting;
340 BT_DBG("%s voice setting 0x%04x", hdev->name, setting);
343 tasklet_disable(&hdev->tx_task);
344 hdev->notify(hdev, HCI_NOTIFY_VOICE_SETTING);
345 tasklet_enable(&hdev->tx_task);
349 static void hci_cc_write_voice_setting(struct hci_dev *hdev, struct sk_buff *skb)
351 __u8 status = *((__u8 *) skb->data);
355 BT_DBG("%s status 0x%x", hdev->name, status);
360 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_VOICE_SETTING);
364 setting = get_unaligned_le16(sent);
366 if (hdev->voice_setting == setting)
369 hdev->voice_setting = setting;
371 BT_DBG("%s voice setting 0x%04x", hdev->name, setting);
374 tasklet_disable(&hdev->tx_task);
375 hdev->notify(hdev, HCI_NOTIFY_VOICE_SETTING);
376 tasklet_enable(&hdev->tx_task);
380 static void hci_cc_host_buffer_size(struct hci_dev *hdev, struct sk_buff *skb)
382 __u8 status = *((__u8 *) skb->data);
384 BT_DBG("%s status 0x%x", hdev->name, status);
386 hci_req_complete(hdev, status);
389 static void hci_cc_read_ssp_mode(struct hci_dev *hdev, struct sk_buff *skb)
391 struct hci_rp_read_ssp_mode *rp = (void *) skb->data;
393 BT_DBG("%s status 0x%x", hdev->name, rp->status);
398 hdev->ssp_mode = rp->mode;
401 static void hci_cc_write_ssp_mode(struct hci_dev *hdev, struct sk_buff *skb)
403 __u8 status = *((__u8 *) skb->data);
406 BT_DBG("%s status 0x%x", hdev->name, status);
411 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_SSP_MODE);
415 hdev->ssp_mode = *((__u8 *) sent);
418 static void hci_cc_read_local_version(struct hci_dev *hdev, struct sk_buff *skb)
420 struct hci_rp_read_local_version *rp = (void *) skb->data;
422 BT_DBG("%s status 0x%x", hdev->name, rp->status);
427 hdev->hci_ver = rp->hci_ver;
428 hdev->hci_rev = __le16_to_cpu(rp->hci_rev);
429 hdev->manufacturer = __le16_to_cpu(rp->manufacturer);
431 BT_DBG("%s manufacturer %d hci ver %d:%d", hdev->name,
433 hdev->hci_ver, hdev->hci_rev);
436 static void hci_cc_read_local_commands(struct hci_dev *hdev, struct sk_buff *skb)
438 struct hci_rp_read_local_commands *rp = (void *) skb->data;
440 BT_DBG("%s status 0x%x", hdev->name, rp->status);
445 memcpy(hdev->commands, rp->commands, sizeof(hdev->commands));
448 static void hci_cc_read_local_features(struct hci_dev *hdev, struct sk_buff *skb)
450 struct hci_rp_read_local_features *rp = (void *) skb->data;
452 BT_DBG("%s status 0x%x", hdev->name, rp->status);
457 memcpy(hdev->features, rp->features, 8);
459 /* Adjust default settings according to features
460 * supported by device. */
462 if (hdev->features[0] & LMP_3SLOT)
463 hdev->pkt_type |= (HCI_DM3 | HCI_DH3);
465 if (hdev->features[0] & LMP_5SLOT)
466 hdev->pkt_type |= (HCI_DM5 | HCI_DH5);
468 if (hdev->features[1] & LMP_HV2) {
469 hdev->pkt_type |= (HCI_HV2);
470 hdev->esco_type |= (ESCO_HV2);
473 if (hdev->features[1] & LMP_HV3) {
474 hdev->pkt_type |= (HCI_HV3);
475 hdev->esco_type |= (ESCO_HV3);
478 if (hdev->features[3] & LMP_ESCO)
479 hdev->esco_type |= (ESCO_EV3);
481 if (hdev->features[4] & LMP_EV4)
482 hdev->esco_type |= (ESCO_EV4);
484 if (hdev->features[4] & LMP_EV5)
485 hdev->esco_type |= (ESCO_EV5);
487 BT_DBG("%s features 0x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x", hdev->name,
488 hdev->features[0], hdev->features[1],
489 hdev->features[2], hdev->features[3],
490 hdev->features[4], hdev->features[5],
491 hdev->features[6], hdev->features[7]);
494 static void hci_cc_read_buffer_size(struct hci_dev *hdev, struct sk_buff *skb)
496 struct hci_rp_read_buffer_size *rp = (void *) skb->data;
498 BT_DBG("%s status 0x%x", hdev->name, rp->status);
503 hdev->acl_mtu = __le16_to_cpu(rp->acl_mtu);
504 hdev->sco_mtu = rp->sco_mtu;
505 hdev->acl_pkts = __le16_to_cpu(rp->acl_max_pkt);
506 hdev->sco_pkts = __le16_to_cpu(rp->sco_max_pkt);
508 if (test_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE, &hdev->quirks)) {
513 hdev->acl_cnt = hdev->acl_pkts;
514 hdev->sco_cnt = hdev->sco_pkts;
516 BT_DBG("%s acl mtu %d:%d sco mtu %d:%d", hdev->name,
517 hdev->acl_mtu, hdev->acl_pkts,
518 hdev->sco_mtu, hdev->sco_pkts);
521 static void hci_cc_read_bd_addr(struct hci_dev *hdev, struct sk_buff *skb)
523 struct hci_rp_read_bd_addr *rp = (void *) skb->data;
525 BT_DBG("%s status 0x%x", hdev->name, rp->status);
528 bacpy(&hdev->bdaddr, &rp->bdaddr);
530 hci_req_complete(hdev, rp->status);
533 static inline void hci_cs_inquiry(struct hci_dev *hdev, __u8 status)
535 BT_DBG("%s status 0x%x", hdev->name, status);
538 hci_req_complete(hdev, status);
540 hci_conn_check_pending(hdev);
542 set_bit(HCI_INQUIRY, &hdev->flags);
545 static inline void hci_cs_create_conn(struct hci_dev *hdev, __u8 status)
547 struct hci_cp_create_conn *cp;
548 struct hci_conn *conn;
550 BT_DBG("%s status 0x%x", hdev->name, status);
552 cp = hci_sent_cmd_data(hdev, HCI_OP_CREATE_CONN);
558 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
560 BT_DBG("%s bdaddr %s conn %p", hdev->name, batostr(&cp->bdaddr), conn);
563 if (conn && conn->state == BT_CONNECT) {
564 if (status != 0x0c || conn->attempt > 2) {
565 conn->state = BT_CLOSED;
566 hci_proto_connect_cfm(conn, status);
569 conn->state = BT_CONNECT2;
573 conn = hci_conn_add(hdev, ACL_LINK, &cp->bdaddr);
576 conn->link_mode |= HCI_LM_MASTER;
578 BT_ERR("No memmory for new connection");
582 hci_dev_unlock(hdev);
585 static void hci_cs_add_sco(struct hci_dev *hdev, __u8 status)
587 struct hci_cp_add_sco *cp;
588 struct hci_conn *acl, *sco;
591 BT_DBG("%s status 0x%x", hdev->name, status);
596 cp = hci_sent_cmd_data(hdev, HCI_OP_ADD_SCO);
600 handle = __le16_to_cpu(cp->handle);
602 BT_DBG("%s handle %d", hdev->name, handle);
606 acl = hci_conn_hash_lookup_handle(hdev, handle);
607 if (acl && (sco = acl->link)) {
608 sco->state = BT_CLOSED;
610 hci_proto_connect_cfm(sco, status);
614 hci_dev_unlock(hdev);
617 static void hci_cs_auth_requested(struct hci_dev *hdev, __u8 status)
619 struct hci_cp_auth_requested *cp;
620 struct hci_conn *conn;
622 BT_DBG("%s status 0x%x", hdev->name, status);
627 cp = hci_sent_cmd_data(hdev, HCI_OP_AUTH_REQUESTED);
633 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
635 if (conn->state == BT_CONFIG) {
636 hci_proto_connect_cfm(conn, status);
641 hci_dev_unlock(hdev);
644 static void hci_cs_set_conn_encrypt(struct hci_dev *hdev, __u8 status)
646 struct hci_cp_set_conn_encrypt *cp;
647 struct hci_conn *conn;
649 BT_DBG("%s status 0x%x", hdev->name, status);
654 cp = hci_sent_cmd_data(hdev, HCI_OP_SET_CONN_ENCRYPT);
660 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
662 if (conn->state == BT_CONFIG) {
663 hci_proto_connect_cfm(conn, status);
668 hci_dev_unlock(hdev);
671 static void hci_cs_remote_name_req(struct hci_dev *hdev, __u8 status)
673 BT_DBG("%s status 0x%x", hdev->name, status);
676 static void hci_cs_read_remote_features(struct hci_dev *hdev, __u8 status)
678 struct hci_cp_read_remote_features *cp;
679 struct hci_conn *conn;
681 BT_DBG("%s status 0x%x", hdev->name, status);
686 cp = hci_sent_cmd_data(hdev, HCI_OP_READ_REMOTE_FEATURES);
692 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
694 if (conn->state == BT_CONFIG) {
695 hci_proto_connect_cfm(conn, status);
700 hci_dev_unlock(hdev);
703 static void hci_cs_read_remote_ext_features(struct hci_dev *hdev, __u8 status)
705 struct hci_cp_read_remote_ext_features *cp;
706 struct hci_conn *conn;
708 BT_DBG("%s status 0x%x", hdev->name, status);
713 cp = hci_sent_cmd_data(hdev, HCI_OP_READ_REMOTE_EXT_FEATURES);
719 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
721 if (conn->state == BT_CONFIG) {
722 hci_proto_connect_cfm(conn, status);
727 hci_dev_unlock(hdev);
730 static void hci_cs_setup_sync_conn(struct hci_dev *hdev, __u8 status)
732 struct hci_cp_setup_sync_conn *cp;
733 struct hci_conn *acl, *sco;
736 BT_DBG("%s status 0x%x", hdev->name, status);
741 cp = hci_sent_cmd_data(hdev, HCI_OP_SETUP_SYNC_CONN);
745 handle = __le16_to_cpu(cp->handle);
747 BT_DBG("%s handle %d", hdev->name, handle);
751 acl = hci_conn_hash_lookup_handle(hdev, handle);
752 if (acl && (sco = acl->link)) {
753 sco->state = BT_CLOSED;
755 hci_proto_connect_cfm(sco, status);
759 hci_dev_unlock(hdev);
762 static void hci_cs_sniff_mode(struct hci_dev *hdev, __u8 status)
764 struct hci_cp_sniff_mode *cp;
765 struct hci_conn *conn;
767 BT_DBG("%s status 0x%x", hdev->name, status);
772 cp = hci_sent_cmd_data(hdev, HCI_OP_SNIFF_MODE);
778 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
780 clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend);
782 hci_dev_unlock(hdev);
785 static void hci_cs_exit_sniff_mode(struct hci_dev *hdev, __u8 status)
787 struct hci_cp_exit_sniff_mode *cp;
788 struct hci_conn *conn;
790 BT_DBG("%s status 0x%x", hdev->name, status);
795 cp = hci_sent_cmd_data(hdev, HCI_OP_EXIT_SNIFF_MODE);
801 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
803 clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend);
805 hci_dev_unlock(hdev);
808 static inline void hci_inquiry_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
810 __u8 status = *((__u8 *) skb->data);
812 BT_DBG("%s status %d", hdev->name, status);
814 clear_bit(HCI_INQUIRY, &hdev->flags);
816 hci_req_complete(hdev, status);
818 hci_conn_check_pending(hdev);
821 static inline void hci_inquiry_result_evt(struct hci_dev *hdev, struct sk_buff *skb)
823 struct inquiry_data data;
824 struct inquiry_info *info = (void *) (skb->data + 1);
825 int num_rsp = *((__u8 *) skb->data);
827 BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
834 for (; num_rsp; num_rsp--) {
835 bacpy(&data.bdaddr, &info->bdaddr);
836 data.pscan_rep_mode = info->pscan_rep_mode;
837 data.pscan_period_mode = info->pscan_period_mode;
838 data.pscan_mode = info->pscan_mode;
839 memcpy(data.dev_class, info->dev_class, 3);
840 data.clock_offset = info->clock_offset;
842 data.ssp_mode = 0x00;
844 hci_inquiry_cache_update(hdev, &data);
847 hci_dev_unlock(hdev);
850 static inline void hci_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
852 struct hci_ev_conn_complete *ev = (void *) skb->data;
853 struct hci_conn *conn;
855 BT_DBG("%s", hdev->name);
859 conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
864 conn->handle = __le16_to_cpu(ev->handle);
866 if (conn->type == ACL_LINK) {
867 conn->state = BT_CONFIG;
870 conn->state = BT_CONNECTED;
872 hci_conn_add_sysfs(conn);
874 if (test_bit(HCI_AUTH, &hdev->flags))
875 conn->link_mode |= HCI_LM_AUTH;
877 if (test_bit(HCI_ENCRYPT, &hdev->flags))
878 conn->link_mode |= HCI_LM_ENCRYPT;
880 /* Get remote features */
881 if (conn->type == ACL_LINK) {
882 struct hci_cp_read_remote_features cp;
883 cp.handle = ev->handle;
884 hci_send_cmd(hdev, HCI_OP_READ_REMOTE_FEATURES,
888 /* Set packet type for incoming connection */
889 if (!conn->out && hdev->hci_ver < 3) {
890 struct hci_cp_change_conn_ptype cp;
891 cp.handle = ev->handle;
892 cp.pkt_type = cpu_to_le16(conn->pkt_type);
893 hci_send_cmd(hdev, HCI_OP_CHANGE_CONN_PTYPE,
897 conn->state = BT_CLOSED;
899 if (conn->type == ACL_LINK) {
900 struct hci_conn *sco = conn->link;
903 if (lmp_esco_capable(hdev))
904 hci_setup_sync(sco, conn->handle);
906 hci_add_sco(sco, conn->handle);
908 hci_proto_connect_cfm(sco, ev->status);
915 hci_proto_connect_cfm(conn, ev->status);
917 } else if (ev->link_type != ACL_LINK)
918 hci_proto_connect_cfm(conn, ev->status);
921 hci_dev_unlock(hdev);
923 hci_conn_check_pending(hdev);
926 static inline void hci_conn_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
928 struct hci_ev_conn_request *ev = (void *) skb->data;
929 int mask = hdev->link_mode;
931 BT_DBG("%s bdaddr %s type 0x%x", hdev->name,
932 batostr(&ev->bdaddr), ev->link_type);
934 mask |= hci_proto_connect_ind(hdev, &ev->bdaddr, ev->link_type);
936 if (mask & HCI_LM_ACCEPT) {
937 /* Connection accepted */
938 struct inquiry_entry *ie;
939 struct hci_conn *conn;
943 if ((ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr)))
944 memcpy(ie->data.dev_class, ev->dev_class, 3);
946 conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
948 if (!(conn = hci_conn_add(hdev, ev->link_type, &ev->bdaddr))) {
949 BT_ERR("No memmory for new connection");
950 hci_dev_unlock(hdev);
955 memcpy(conn->dev_class, ev->dev_class, 3);
956 conn->state = BT_CONNECT;
958 hci_dev_unlock(hdev);
960 if (ev->link_type == ACL_LINK || !lmp_esco_capable(hdev)) {
961 struct hci_cp_accept_conn_req cp;
963 bacpy(&cp.bdaddr, &ev->bdaddr);
965 if (lmp_rswitch_capable(hdev) && (mask & HCI_LM_MASTER))
966 cp.role = 0x00; /* Become master */
968 cp.role = 0x01; /* Remain slave */
970 hci_send_cmd(hdev, HCI_OP_ACCEPT_CONN_REQ,
973 struct hci_cp_accept_sync_conn_req cp;
975 bacpy(&cp.bdaddr, &ev->bdaddr);
976 cp.pkt_type = cpu_to_le16(conn->pkt_type);
978 cp.tx_bandwidth = cpu_to_le32(0x00001f40);
979 cp.rx_bandwidth = cpu_to_le32(0x00001f40);
980 cp.max_latency = cpu_to_le16(0xffff);
981 cp.content_format = cpu_to_le16(hdev->voice_setting);
982 cp.retrans_effort = 0xff;
984 hci_send_cmd(hdev, HCI_OP_ACCEPT_SYNC_CONN_REQ,
988 /* Connection rejected */
989 struct hci_cp_reject_conn_req cp;
991 bacpy(&cp.bdaddr, &ev->bdaddr);
993 hci_send_cmd(hdev, HCI_OP_REJECT_CONN_REQ, sizeof(cp), &cp);
997 static inline void hci_disconn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
999 struct hci_ev_disconn_complete *ev = (void *) skb->data;
1000 struct hci_conn *conn;
1002 BT_DBG("%s status %d", hdev->name, ev->status);
1009 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1011 conn->state = BT_CLOSED;
1013 hci_conn_del_sysfs(conn);
1015 hci_proto_disconn_ind(conn, ev->reason);
1019 hci_dev_unlock(hdev);
1022 static inline void hci_auth_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1024 struct hci_ev_auth_complete *ev = (void *) skb->data;
1025 struct hci_conn *conn;
1027 BT_DBG("%s status %d", hdev->name, ev->status);
1031 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1034 conn->link_mode |= HCI_LM_AUTH;
1036 clear_bit(HCI_CONN_AUTH_PEND, &conn->pend);
1038 if (conn->state == BT_CONFIG) {
1039 if (!ev->status && hdev->ssp_mode > 0 &&
1040 conn->ssp_mode > 0) {
1041 struct hci_cp_set_conn_encrypt cp;
1042 cp.handle = ev->handle;
1044 hci_send_cmd(hdev, HCI_OP_SET_CONN_ENCRYPT,
1047 conn->state = BT_CONNECTED;
1048 hci_proto_connect_cfm(conn, ev->status);
1052 hci_auth_cfm(conn, ev->status);
1054 if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend)) {
1056 struct hci_cp_set_conn_encrypt cp;
1057 cp.handle = ev->handle;
1059 hci_send_cmd(hdev, HCI_OP_SET_CONN_ENCRYPT,
1062 clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend);
1063 hci_encrypt_cfm(conn, ev->status, 0x00);
1068 hci_dev_unlock(hdev);
1071 static inline void hci_remote_name_evt(struct hci_dev *hdev, struct sk_buff *skb)
1073 BT_DBG("%s", hdev->name);
1075 hci_conn_check_pending(hdev);
1078 static inline void hci_encrypt_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
1080 struct hci_ev_encrypt_change *ev = (void *) skb->data;
1081 struct hci_conn *conn;
1083 BT_DBG("%s status %d", hdev->name, ev->status);
1087 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1091 /* Encryption implies authentication */
1092 conn->link_mode |= HCI_LM_AUTH;
1093 conn->link_mode |= HCI_LM_ENCRYPT;
1095 conn->link_mode &= ~HCI_LM_ENCRYPT;
1098 clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend);
1100 if (conn->state == BT_CONFIG) {
1102 conn->state = BT_CONNECTED;
1104 hci_proto_connect_cfm(conn, ev->status);
1107 hci_encrypt_cfm(conn, ev->status, ev->encrypt);
1110 hci_dev_unlock(hdev);
1113 static inline void hci_change_link_key_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1115 struct hci_ev_change_link_key_complete *ev = (void *) skb->data;
1116 struct hci_conn *conn;
1118 BT_DBG("%s status %d", hdev->name, ev->status);
1122 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1125 conn->link_mode |= HCI_LM_SECURE;
1127 clear_bit(HCI_CONN_AUTH_PEND, &conn->pend);
1129 hci_key_change_cfm(conn, ev->status);
1132 hci_dev_unlock(hdev);
1135 static inline void hci_remote_features_evt(struct hci_dev *hdev, struct sk_buff *skb)
1137 struct hci_ev_remote_features *ev = (void *) skb->data;
1138 struct hci_conn *conn;
1140 BT_DBG("%s status %d", hdev->name, ev->status);
1144 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1147 memcpy(conn->features, ev->features, 8);
1149 if (conn->state == BT_CONFIG) {
1150 if (!ev->status && lmp_ssp_capable(hdev) &&
1151 lmp_ssp_capable(conn)) {
1152 struct hci_cp_read_remote_ext_features cp;
1153 cp.handle = ev->handle;
1156 HCI_OP_READ_REMOTE_EXT_FEATURES,
1159 conn->state = BT_CONNECTED;
1160 hci_proto_connect_cfm(conn, ev->status);
1166 hci_dev_unlock(hdev);
1169 static inline void hci_remote_version_evt(struct hci_dev *hdev, struct sk_buff *skb)
1171 BT_DBG("%s", hdev->name);
1174 static inline void hci_qos_setup_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1176 BT_DBG("%s", hdev->name);
1179 static inline void hci_cmd_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1181 struct hci_ev_cmd_complete *ev = (void *) skb->data;
1184 skb_pull(skb, sizeof(*ev));
1186 opcode = __le16_to_cpu(ev->opcode);
1189 case HCI_OP_INQUIRY_CANCEL:
1190 hci_cc_inquiry_cancel(hdev, skb);
1193 case HCI_OP_EXIT_PERIODIC_INQ:
1194 hci_cc_exit_periodic_inq(hdev, skb);
1197 case HCI_OP_REMOTE_NAME_REQ_CANCEL:
1198 hci_cc_remote_name_req_cancel(hdev, skb);
1201 case HCI_OP_ROLE_DISCOVERY:
1202 hci_cc_role_discovery(hdev, skb);
1205 case HCI_OP_READ_LINK_POLICY:
1206 hci_cc_read_link_policy(hdev, skb);
1209 case HCI_OP_WRITE_LINK_POLICY:
1210 hci_cc_write_link_policy(hdev, skb);
1213 case HCI_OP_READ_DEF_LINK_POLICY:
1214 hci_cc_read_def_link_policy(hdev, skb);
1217 case HCI_OP_WRITE_DEF_LINK_POLICY:
1218 hci_cc_write_def_link_policy(hdev, skb);
1222 hci_cc_reset(hdev, skb);
1225 case HCI_OP_WRITE_LOCAL_NAME:
1226 hci_cc_write_local_name(hdev, skb);
1229 case HCI_OP_READ_LOCAL_NAME:
1230 hci_cc_read_local_name(hdev, skb);
1233 case HCI_OP_WRITE_AUTH_ENABLE:
1234 hci_cc_write_auth_enable(hdev, skb);
1237 case HCI_OP_WRITE_ENCRYPT_MODE:
1238 hci_cc_write_encrypt_mode(hdev, skb);
1241 case HCI_OP_WRITE_SCAN_ENABLE:
1242 hci_cc_write_scan_enable(hdev, skb);
1245 case HCI_OP_READ_CLASS_OF_DEV:
1246 hci_cc_read_class_of_dev(hdev, skb);
1249 case HCI_OP_WRITE_CLASS_OF_DEV:
1250 hci_cc_write_class_of_dev(hdev, skb);
1253 case HCI_OP_READ_VOICE_SETTING:
1254 hci_cc_read_voice_setting(hdev, skb);
1257 case HCI_OP_WRITE_VOICE_SETTING:
1258 hci_cc_write_voice_setting(hdev, skb);
1261 case HCI_OP_HOST_BUFFER_SIZE:
1262 hci_cc_host_buffer_size(hdev, skb);
1265 case HCI_OP_READ_SSP_MODE:
1266 hci_cc_read_ssp_mode(hdev, skb);
1269 case HCI_OP_WRITE_SSP_MODE:
1270 hci_cc_write_ssp_mode(hdev, skb);
1273 case HCI_OP_READ_LOCAL_VERSION:
1274 hci_cc_read_local_version(hdev, skb);
1277 case HCI_OP_READ_LOCAL_COMMANDS:
1278 hci_cc_read_local_commands(hdev, skb);
1281 case HCI_OP_READ_LOCAL_FEATURES:
1282 hci_cc_read_local_features(hdev, skb);
1285 case HCI_OP_READ_BUFFER_SIZE:
1286 hci_cc_read_buffer_size(hdev, skb);
1289 case HCI_OP_READ_BD_ADDR:
1290 hci_cc_read_bd_addr(hdev, skb);
1294 BT_DBG("%s opcode 0x%x", hdev->name, opcode);
1299 atomic_set(&hdev->cmd_cnt, 1);
1300 if (!skb_queue_empty(&hdev->cmd_q))
1301 hci_sched_cmd(hdev);
1305 static inline void hci_cmd_status_evt(struct hci_dev *hdev, struct sk_buff *skb)
1307 struct hci_ev_cmd_status *ev = (void *) skb->data;
1310 skb_pull(skb, sizeof(*ev));
1312 opcode = __le16_to_cpu(ev->opcode);
1315 case HCI_OP_INQUIRY:
1316 hci_cs_inquiry(hdev, ev->status);
1319 case HCI_OP_CREATE_CONN:
1320 hci_cs_create_conn(hdev, ev->status);
1323 case HCI_OP_ADD_SCO:
1324 hci_cs_add_sco(hdev, ev->status);
1327 case HCI_OP_AUTH_REQUESTED:
1328 hci_cs_auth_requested(hdev, ev->status);
1331 case HCI_OP_SET_CONN_ENCRYPT:
1332 hci_cs_set_conn_encrypt(hdev, ev->status);
1335 case HCI_OP_REMOTE_NAME_REQ:
1336 hci_cs_remote_name_req(hdev, ev->status);
1339 case HCI_OP_READ_REMOTE_FEATURES:
1340 hci_cs_read_remote_features(hdev, ev->status);
1343 case HCI_OP_READ_REMOTE_EXT_FEATURES:
1344 hci_cs_read_remote_ext_features(hdev, ev->status);
1347 case HCI_OP_SETUP_SYNC_CONN:
1348 hci_cs_setup_sync_conn(hdev, ev->status);
1351 case HCI_OP_SNIFF_MODE:
1352 hci_cs_sniff_mode(hdev, ev->status);
1355 case HCI_OP_EXIT_SNIFF_MODE:
1356 hci_cs_exit_sniff_mode(hdev, ev->status);
1360 BT_DBG("%s opcode 0x%x", hdev->name, opcode);
1365 atomic_set(&hdev->cmd_cnt, 1);
1366 if (!skb_queue_empty(&hdev->cmd_q))
1367 hci_sched_cmd(hdev);
1371 static inline void hci_role_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
1373 struct hci_ev_role_change *ev = (void *) skb->data;
1374 struct hci_conn *conn;
1376 BT_DBG("%s status %d", hdev->name, ev->status);
1380 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
1384 conn->link_mode &= ~HCI_LM_MASTER;
1386 conn->link_mode |= HCI_LM_MASTER;
1389 clear_bit(HCI_CONN_RSWITCH_PEND, &conn->pend);
1391 hci_role_switch_cfm(conn, ev->status, ev->role);
1394 hci_dev_unlock(hdev);
1397 static inline void hci_num_comp_pkts_evt(struct hci_dev *hdev, struct sk_buff *skb)
1399 struct hci_ev_num_comp_pkts *ev = (void *) skb->data;
1403 skb_pull(skb, sizeof(*ev));
1405 BT_DBG("%s num_hndl %d", hdev->name, ev->num_hndl);
1407 if (skb->len < ev->num_hndl * 4) {
1408 BT_DBG("%s bad parameters", hdev->name);
1412 tasklet_disable(&hdev->tx_task);
1414 for (i = 0, ptr = (__le16 *) skb->data; i < ev->num_hndl; i++) {
1415 struct hci_conn *conn;
1416 __u16 handle, count;
1418 handle = get_unaligned_le16(ptr++);
1419 count = get_unaligned_le16(ptr++);
1421 conn = hci_conn_hash_lookup_handle(hdev, handle);
1423 conn->sent -= count;
1425 if (conn->type == ACL_LINK) {
1426 if ((hdev->acl_cnt += count) > hdev->acl_pkts)
1427 hdev->acl_cnt = hdev->acl_pkts;
1429 if ((hdev->sco_cnt += count) > hdev->sco_pkts)
1430 hdev->sco_cnt = hdev->sco_pkts;
1437 tasklet_enable(&hdev->tx_task);
1440 static inline void hci_mode_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
1442 struct hci_ev_mode_change *ev = (void *) skb->data;
1443 struct hci_conn *conn;
1445 BT_DBG("%s status %d", hdev->name, ev->status);
1449 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1451 conn->mode = ev->mode;
1452 conn->interval = __le16_to_cpu(ev->interval);
1454 if (!test_and_clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend)) {
1455 if (conn->mode == HCI_CM_ACTIVE)
1456 conn->power_save = 1;
1458 conn->power_save = 0;
1462 hci_dev_unlock(hdev);
1465 static inline void hci_pin_code_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
1467 BT_DBG("%s", hdev->name);
1470 static inline void hci_link_key_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
1472 BT_DBG("%s", hdev->name);
1475 static inline void hci_link_key_notify_evt(struct hci_dev *hdev, struct sk_buff *skb)
1477 BT_DBG("%s", hdev->name);
1480 static inline void hci_clock_offset_evt(struct hci_dev *hdev, struct sk_buff *skb)
1482 struct hci_ev_clock_offset *ev = (void *) skb->data;
1483 struct hci_conn *conn;
1485 BT_DBG("%s status %d", hdev->name, ev->status);
1489 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1490 if (conn && !ev->status) {
1491 struct inquiry_entry *ie;
1493 if ((ie = hci_inquiry_cache_lookup(hdev, &conn->dst))) {
1494 ie->data.clock_offset = ev->clock_offset;
1495 ie->timestamp = jiffies;
1499 hci_dev_unlock(hdev);
1502 static inline void hci_pkt_type_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
1504 struct hci_ev_pkt_type_change *ev = (void *) skb->data;
1505 struct hci_conn *conn;
1507 BT_DBG("%s status %d", hdev->name, ev->status);
1511 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1512 if (conn && !ev->status)
1513 conn->pkt_type = __le16_to_cpu(ev->pkt_type);
1515 hci_dev_unlock(hdev);
1518 static inline void hci_pscan_rep_mode_evt(struct hci_dev *hdev, struct sk_buff *skb)
1520 struct hci_ev_pscan_rep_mode *ev = (void *) skb->data;
1521 struct inquiry_entry *ie;
1523 BT_DBG("%s", hdev->name);
1527 if ((ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr))) {
1528 ie->data.pscan_rep_mode = ev->pscan_rep_mode;
1529 ie->timestamp = jiffies;
1532 hci_dev_unlock(hdev);
1535 static inline void hci_inquiry_result_with_rssi_evt(struct hci_dev *hdev, struct sk_buff *skb)
1537 struct inquiry_data data;
1538 int num_rsp = *((__u8 *) skb->data);
1540 BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
1547 if ((skb->len - 1) / num_rsp != sizeof(struct inquiry_info_with_rssi)) {
1548 struct inquiry_info_with_rssi_and_pscan_mode *info = (void *) (skb->data + 1);
1550 for (; num_rsp; num_rsp--) {
1551 bacpy(&data.bdaddr, &info->bdaddr);
1552 data.pscan_rep_mode = info->pscan_rep_mode;
1553 data.pscan_period_mode = info->pscan_period_mode;
1554 data.pscan_mode = info->pscan_mode;
1555 memcpy(data.dev_class, info->dev_class, 3);
1556 data.clock_offset = info->clock_offset;
1557 data.rssi = info->rssi;
1558 data.ssp_mode = 0x00;
1560 hci_inquiry_cache_update(hdev, &data);
1563 struct inquiry_info_with_rssi *info = (void *) (skb->data + 1);
1565 for (; num_rsp; num_rsp--) {
1566 bacpy(&data.bdaddr, &info->bdaddr);
1567 data.pscan_rep_mode = info->pscan_rep_mode;
1568 data.pscan_period_mode = info->pscan_period_mode;
1569 data.pscan_mode = 0x00;
1570 memcpy(data.dev_class, info->dev_class, 3);
1571 data.clock_offset = info->clock_offset;
1572 data.rssi = info->rssi;
1573 data.ssp_mode = 0x00;
1575 hci_inquiry_cache_update(hdev, &data);
1579 hci_dev_unlock(hdev);
1582 static inline void hci_remote_ext_features_evt(struct hci_dev *hdev, struct sk_buff *skb)
1584 struct hci_ev_remote_ext_features *ev = (void *) skb->data;
1585 struct hci_conn *conn;
1587 BT_DBG("%s", hdev->name);
1591 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1593 if (!ev->status && ev->page == 0x01) {
1594 struct inquiry_entry *ie;
1596 if ((ie = hci_inquiry_cache_lookup(hdev, &conn->dst)))
1597 ie->data.ssp_mode = (ev->features[0] & 0x01);
1599 conn->ssp_mode = (ev->features[0] & 0x01);
1602 if (conn->state == BT_CONFIG) {
1603 if (!ev->status && hdev->ssp_mode > 0 &&
1604 conn->ssp_mode > 0 && conn->out &&
1605 conn->sec_level != BT_SECURITY_SDP) {
1606 struct hci_cp_auth_requested cp;
1607 cp.handle = ev->handle;
1608 hci_send_cmd(hdev, HCI_OP_AUTH_REQUESTED,
1611 conn->state = BT_CONNECTED;
1612 hci_proto_connect_cfm(conn, ev->status);
1618 hci_dev_unlock(hdev);
1621 static inline void hci_sync_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1623 struct hci_ev_sync_conn_complete *ev = (void *) skb->data;
1624 struct hci_conn *conn;
1626 BT_DBG("%s status %d", hdev->name, ev->status);
1630 conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
1632 if (ev->link_type == ESCO_LINK)
1635 conn = hci_conn_hash_lookup_ba(hdev, ESCO_LINK, &ev->bdaddr);
1639 conn->type = SCO_LINK;
1643 conn->handle = __le16_to_cpu(ev->handle);
1644 conn->state = BT_CONNECTED;
1646 hci_conn_add_sysfs(conn);
1648 conn->state = BT_CLOSED;
1650 hci_proto_connect_cfm(conn, ev->status);
1655 hci_dev_unlock(hdev);
1658 static inline void hci_sync_conn_changed_evt(struct hci_dev *hdev, struct sk_buff *skb)
1660 BT_DBG("%s", hdev->name);
1663 static inline void hci_sniff_subrate_evt(struct hci_dev *hdev, struct sk_buff *skb)
1665 struct hci_ev_sniff_subrate *ev = (void *) skb->data;
1666 struct hci_conn *conn;
1668 BT_DBG("%s status %d", hdev->name, ev->status);
1672 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1676 hci_dev_unlock(hdev);
1679 static inline void hci_extended_inquiry_result_evt(struct hci_dev *hdev, struct sk_buff *skb)
1681 struct inquiry_data data;
1682 struct extended_inquiry_info *info = (void *) (skb->data + 1);
1683 int num_rsp = *((__u8 *) skb->data);
1685 BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
1692 for (; num_rsp; num_rsp--) {
1693 bacpy(&data.bdaddr, &info->bdaddr);
1694 data.pscan_rep_mode = info->pscan_rep_mode;
1695 data.pscan_period_mode = info->pscan_period_mode;
1696 data.pscan_mode = 0x00;
1697 memcpy(data.dev_class, info->dev_class, 3);
1698 data.clock_offset = info->clock_offset;
1699 data.rssi = info->rssi;
1700 data.ssp_mode = 0x01;
1702 hci_inquiry_cache_update(hdev, &data);
1705 hci_dev_unlock(hdev);
1708 static inline void hci_io_capa_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
1710 struct hci_ev_io_capa_request *ev = (void *) skb->data;
1711 struct hci_conn *conn;
1713 BT_DBG("%s", hdev->name);
1717 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
1719 hci_conn_hold(conn);
1721 hci_dev_unlock(hdev);
1724 static inline void hci_simple_pair_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1726 struct hci_ev_simple_pair_complete *ev = (void *) skb->data;
1727 struct hci_conn *conn;
1729 BT_DBG("%s", hdev->name);
1733 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
1737 hci_dev_unlock(hdev);
1740 static inline void hci_remote_host_features_evt(struct hci_dev *hdev, struct sk_buff *skb)
1742 struct hci_ev_remote_host_features *ev = (void *) skb->data;
1743 struct inquiry_entry *ie;
1745 BT_DBG("%s", hdev->name);
1749 if ((ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr)))
1750 ie->data.ssp_mode = (ev->features[0] & 0x01);
1752 hci_dev_unlock(hdev);
1755 void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb)
1757 struct hci_event_hdr *hdr = (void *) skb->data;
1758 __u8 event = hdr->evt;
1760 skb_pull(skb, HCI_EVENT_HDR_SIZE);
1763 case HCI_EV_INQUIRY_COMPLETE:
1764 hci_inquiry_complete_evt(hdev, skb);
1767 case HCI_EV_INQUIRY_RESULT:
1768 hci_inquiry_result_evt(hdev, skb);
1771 case HCI_EV_CONN_COMPLETE:
1772 hci_conn_complete_evt(hdev, skb);
1775 case HCI_EV_CONN_REQUEST:
1776 hci_conn_request_evt(hdev, skb);
1779 case HCI_EV_DISCONN_COMPLETE:
1780 hci_disconn_complete_evt(hdev, skb);
1783 case HCI_EV_AUTH_COMPLETE:
1784 hci_auth_complete_evt(hdev, skb);
1787 case HCI_EV_REMOTE_NAME:
1788 hci_remote_name_evt(hdev, skb);
1791 case HCI_EV_ENCRYPT_CHANGE:
1792 hci_encrypt_change_evt(hdev, skb);
1795 case HCI_EV_CHANGE_LINK_KEY_COMPLETE:
1796 hci_change_link_key_complete_evt(hdev, skb);
1799 case HCI_EV_REMOTE_FEATURES:
1800 hci_remote_features_evt(hdev, skb);
1803 case HCI_EV_REMOTE_VERSION:
1804 hci_remote_version_evt(hdev, skb);
1807 case HCI_EV_QOS_SETUP_COMPLETE:
1808 hci_qos_setup_complete_evt(hdev, skb);
1811 case HCI_EV_CMD_COMPLETE:
1812 hci_cmd_complete_evt(hdev, skb);
1815 case HCI_EV_CMD_STATUS:
1816 hci_cmd_status_evt(hdev, skb);
1819 case HCI_EV_ROLE_CHANGE:
1820 hci_role_change_evt(hdev, skb);
1823 case HCI_EV_NUM_COMP_PKTS:
1824 hci_num_comp_pkts_evt(hdev, skb);
1827 case HCI_EV_MODE_CHANGE:
1828 hci_mode_change_evt(hdev, skb);
1831 case HCI_EV_PIN_CODE_REQ:
1832 hci_pin_code_request_evt(hdev, skb);
1835 case HCI_EV_LINK_KEY_REQ:
1836 hci_link_key_request_evt(hdev, skb);
1839 case HCI_EV_LINK_KEY_NOTIFY:
1840 hci_link_key_notify_evt(hdev, skb);
1843 case HCI_EV_CLOCK_OFFSET:
1844 hci_clock_offset_evt(hdev, skb);
1847 case HCI_EV_PKT_TYPE_CHANGE:
1848 hci_pkt_type_change_evt(hdev, skb);
1851 case HCI_EV_PSCAN_REP_MODE:
1852 hci_pscan_rep_mode_evt(hdev, skb);
1855 case HCI_EV_INQUIRY_RESULT_WITH_RSSI:
1856 hci_inquiry_result_with_rssi_evt(hdev, skb);
1859 case HCI_EV_REMOTE_EXT_FEATURES:
1860 hci_remote_ext_features_evt(hdev, skb);
1863 case HCI_EV_SYNC_CONN_COMPLETE:
1864 hci_sync_conn_complete_evt(hdev, skb);
1867 case HCI_EV_SYNC_CONN_CHANGED:
1868 hci_sync_conn_changed_evt(hdev, skb);
1871 case HCI_EV_SNIFF_SUBRATE:
1872 hci_sniff_subrate_evt(hdev, skb);
1875 case HCI_EV_EXTENDED_INQUIRY_RESULT:
1876 hci_extended_inquiry_result_evt(hdev, skb);
1879 case HCI_EV_IO_CAPA_REQUEST:
1880 hci_io_capa_request_evt(hdev, skb);
1883 case HCI_EV_SIMPLE_PAIR_COMPLETE:
1884 hci_simple_pair_complete_evt(hdev, skb);
1887 case HCI_EV_REMOTE_HOST_FEATURES:
1888 hci_remote_host_features_evt(hdev, skb);
1892 BT_DBG("%s event 0x%x", hdev->name, event);
1897 hdev->stat.evt_rx++;
1900 /* Generate internal stack event */
1901 void hci_si_event(struct hci_dev *hdev, int type, int dlen, void *data)
1903 struct hci_event_hdr *hdr;
1904 struct hci_ev_stack_internal *ev;
1905 struct sk_buff *skb;
1907 skb = bt_skb_alloc(HCI_EVENT_HDR_SIZE + sizeof(*ev) + dlen, GFP_ATOMIC);
1911 hdr = (void *) skb_put(skb, HCI_EVENT_HDR_SIZE);
1912 hdr->evt = HCI_EV_STACK_INTERNAL;
1913 hdr->plen = sizeof(*ev) + dlen;
1915 ev = (void *) skb_put(skb, sizeof(*ev) + dlen);
1917 memcpy(ev->data, data, dlen);
1919 bt_cb(skb)->incoming = 1;
1920 __net_timestamp(skb);
1922 bt_cb(skb)->pkt_type = HCI_EVENT_PKT;
1923 skb->dev = (void *) hdev;
1924 hci_send_to_sock(hdev, skb);