2 BlueZ - Bluetooth protocol stack for Linux
3 Copyright (c) 2000-2001, 2010, Code Aurora Forum. All rights reserved.
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 <linux/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, HCI_OP_INQUIRY_CANCEL, 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, HCI_OP_WRITE_DEF_LINK_POLICY, 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, HCI_OP_RESET, 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, HCI_OP_WRITE_AUTH_ENABLE, 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, HCI_OP_WRITE_ENCRYPT_MODE, 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);
277 int old_pscan, old_iscan;
279 old_pscan = test_and_clear_bit(HCI_PSCAN, &hdev->flags);
280 old_iscan = test_and_clear_bit(HCI_ISCAN, &hdev->flags);
282 if (param & SCAN_INQUIRY) {
283 set_bit(HCI_ISCAN, &hdev->flags);
285 mgmt_discoverable(hdev->id, 1);
286 } else if (old_iscan)
287 mgmt_discoverable(hdev->id, 0);
289 if (param & SCAN_PAGE) {
290 set_bit(HCI_PSCAN, &hdev->flags);
292 mgmt_connectable(hdev->id, 1);
293 } else if (old_pscan)
294 mgmt_connectable(hdev->id, 0);
297 hci_req_complete(hdev, HCI_OP_WRITE_SCAN_ENABLE, status);
300 static void hci_cc_read_class_of_dev(struct hci_dev *hdev, struct sk_buff *skb)
302 struct hci_rp_read_class_of_dev *rp = (void *) skb->data;
304 BT_DBG("%s status 0x%x", hdev->name, rp->status);
309 memcpy(hdev->dev_class, rp->dev_class, 3);
311 BT_DBG("%s class 0x%.2x%.2x%.2x", hdev->name,
312 hdev->dev_class[2], hdev->dev_class[1], hdev->dev_class[0]);
315 static void hci_cc_write_class_of_dev(struct hci_dev *hdev, struct sk_buff *skb)
317 __u8 status = *((__u8 *) skb->data);
320 BT_DBG("%s status 0x%x", hdev->name, status);
325 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_CLASS_OF_DEV);
329 memcpy(hdev->dev_class, sent, 3);
332 static void hci_cc_read_voice_setting(struct hci_dev *hdev, struct sk_buff *skb)
334 struct hci_rp_read_voice_setting *rp = (void *) skb->data;
337 BT_DBG("%s status 0x%x", hdev->name, rp->status);
342 setting = __le16_to_cpu(rp->voice_setting);
344 if (hdev->voice_setting == setting)
347 hdev->voice_setting = setting;
349 BT_DBG("%s voice setting 0x%04x", hdev->name, setting);
352 tasklet_disable(&hdev->tx_task);
353 hdev->notify(hdev, HCI_NOTIFY_VOICE_SETTING);
354 tasklet_enable(&hdev->tx_task);
358 static void hci_cc_write_voice_setting(struct hci_dev *hdev, struct sk_buff *skb)
360 __u8 status = *((__u8 *) skb->data);
364 BT_DBG("%s status 0x%x", hdev->name, status);
369 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_VOICE_SETTING);
373 setting = get_unaligned_le16(sent);
375 if (hdev->voice_setting == setting)
378 hdev->voice_setting = setting;
380 BT_DBG("%s voice setting 0x%04x", hdev->name, setting);
383 tasklet_disable(&hdev->tx_task);
384 hdev->notify(hdev, HCI_NOTIFY_VOICE_SETTING);
385 tasklet_enable(&hdev->tx_task);
389 static void hci_cc_host_buffer_size(struct hci_dev *hdev, struct sk_buff *skb)
391 __u8 status = *((__u8 *) skb->data);
393 BT_DBG("%s status 0x%x", hdev->name, status);
395 hci_req_complete(hdev, HCI_OP_HOST_BUFFER_SIZE, status);
398 static void hci_cc_read_ssp_mode(struct hci_dev *hdev, struct sk_buff *skb)
400 struct hci_rp_read_ssp_mode *rp = (void *) skb->data;
402 BT_DBG("%s status 0x%x", hdev->name, rp->status);
407 hdev->ssp_mode = rp->mode;
410 static void hci_cc_write_ssp_mode(struct hci_dev *hdev, struct sk_buff *skb)
412 __u8 status = *((__u8 *) skb->data);
415 BT_DBG("%s status 0x%x", hdev->name, status);
420 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_SSP_MODE);
424 hdev->ssp_mode = *((__u8 *) sent);
427 static void hci_cc_read_local_version(struct hci_dev *hdev, struct sk_buff *skb)
429 struct hci_rp_read_local_version *rp = (void *) skb->data;
431 BT_DBG("%s status 0x%x", hdev->name, rp->status);
436 hdev->hci_ver = rp->hci_ver;
437 hdev->hci_rev = __le16_to_cpu(rp->hci_rev);
438 hdev->manufacturer = __le16_to_cpu(rp->manufacturer);
440 BT_DBG("%s manufacturer %d hci ver %d:%d", hdev->name,
442 hdev->hci_ver, hdev->hci_rev);
445 static void hci_cc_read_local_commands(struct hci_dev *hdev, struct sk_buff *skb)
447 struct hci_rp_read_local_commands *rp = (void *) skb->data;
449 BT_DBG("%s status 0x%x", hdev->name, rp->status);
454 memcpy(hdev->commands, rp->commands, sizeof(hdev->commands));
457 static void hci_cc_read_local_features(struct hci_dev *hdev, struct sk_buff *skb)
459 struct hci_rp_read_local_features *rp = (void *) skb->data;
461 BT_DBG("%s status 0x%x", hdev->name, rp->status);
466 memcpy(hdev->features, rp->features, 8);
468 /* Adjust default settings according to features
469 * supported by device. */
471 if (hdev->features[0] & LMP_3SLOT)
472 hdev->pkt_type |= (HCI_DM3 | HCI_DH3);
474 if (hdev->features[0] & LMP_5SLOT)
475 hdev->pkt_type |= (HCI_DM5 | HCI_DH5);
477 if (hdev->features[1] & LMP_HV2) {
478 hdev->pkt_type |= (HCI_HV2);
479 hdev->esco_type |= (ESCO_HV2);
482 if (hdev->features[1] & LMP_HV3) {
483 hdev->pkt_type |= (HCI_HV3);
484 hdev->esco_type |= (ESCO_HV3);
487 if (hdev->features[3] & LMP_ESCO)
488 hdev->esco_type |= (ESCO_EV3);
490 if (hdev->features[4] & LMP_EV4)
491 hdev->esco_type |= (ESCO_EV4);
493 if (hdev->features[4] & LMP_EV5)
494 hdev->esco_type |= (ESCO_EV5);
496 if (hdev->features[5] & LMP_EDR_ESCO_2M)
497 hdev->esco_type |= (ESCO_2EV3);
499 if (hdev->features[5] & LMP_EDR_ESCO_3M)
500 hdev->esco_type |= (ESCO_3EV3);
502 if (hdev->features[5] & LMP_EDR_3S_ESCO)
503 hdev->esco_type |= (ESCO_2EV5 | ESCO_3EV5);
505 BT_DBG("%s features 0x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x", hdev->name,
506 hdev->features[0], hdev->features[1],
507 hdev->features[2], hdev->features[3],
508 hdev->features[4], hdev->features[5],
509 hdev->features[6], hdev->features[7]);
512 static void hci_cc_read_buffer_size(struct hci_dev *hdev, struct sk_buff *skb)
514 struct hci_rp_read_buffer_size *rp = (void *) skb->data;
516 BT_DBG("%s status 0x%x", hdev->name, rp->status);
521 hdev->acl_mtu = __le16_to_cpu(rp->acl_mtu);
522 hdev->sco_mtu = rp->sco_mtu;
523 hdev->acl_pkts = __le16_to_cpu(rp->acl_max_pkt);
524 hdev->sco_pkts = __le16_to_cpu(rp->sco_max_pkt);
526 if (test_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE, &hdev->quirks)) {
531 hdev->acl_cnt = hdev->acl_pkts;
532 hdev->sco_cnt = hdev->sco_pkts;
534 BT_DBG("%s acl mtu %d:%d sco mtu %d:%d", hdev->name,
535 hdev->acl_mtu, hdev->acl_pkts,
536 hdev->sco_mtu, hdev->sco_pkts);
539 static void hci_cc_read_bd_addr(struct hci_dev *hdev, struct sk_buff *skb)
541 struct hci_rp_read_bd_addr *rp = (void *) skb->data;
543 BT_DBG("%s status 0x%x", hdev->name, rp->status);
546 bacpy(&hdev->bdaddr, &rp->bdaddr);
548 hci_req_complete(hdev, HCI_OP_READ_BD_ADDR, rp->status);
551 static void hci_cc_write_ca_timeout(struct hci_dev *hdev, struct sk_buff *skb)
553 __u8 status = *((__u8 *) skb->data);
555 BT_DBG("%s status 0x%x", hdev->name, status);
557 hci_req_complete(hdev, HCI_OP_WRITE_CA_TIMEOUT, status);
560 static inline void hci_cs_inquiry(struct hci_dev *hdev, __u8 status)
562 BT_DBG("%s status 0x%x", hdev->name, status);
565 hci_req_complete(hdev, HCI_OP_INQUIRY, status);
567 hci_conn_check_pending(hdev);
569 set_bit(HCI_INQUIRY, &hdev->flags);
572 static inline void hci_cs_create_conn(struct hci_dev *hdev, __u8 status)
574 struct hci_cp_create_conn *cp;
575 struct hci_conn *conn;
577 BT_DBG("%s status 0x%x", hdev->name, status);
579 cp = hci_sent_cmd_data(hdev, HCI_OP_CREATE_CONN);
585 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
587 BT_DBG("%s bdaddr %s conn %p", hdev->name, batostr(&cp->bdaddr), conn);
590 if (conn && conn->state == BT_CONNECT) {
591 if (status != 0x0c || conn->attempt > 2) {
592 conn->state = BT_CLOSED;
593 hci_proto_connect_cfm(conn, status);
596 conn->state = BT_CONNECT2;
600 conn = hci_conn_add(hdev, ACL_LINK, &cp->bdaddr);
603 conn->link_mode |= HCI_LM_MASTER;
605 BT_ERR("No memory for new connection");
609 hci_dev_unlock(hdev);
612 static void hci_cs_add_sco(struct hci_dev *hdev, __u8 status)
614 struct hci_cp_add_sco *cp;
615 struct hci_conn *acl, *sco;
618 BT_DBG("%s status 0x%x", hdev->name, status);
623 cp = hci_sent_cmd_data(hdev, HCI_OP_ADD_SCO);
627 handle = __le16_to_cpu(cp->handle);
629 BT_DBG("%s handle %d", hdev->name, handle);
633 acl = hci_conn_hash_lookup_handle(hdev, handle);
634 if (acl && (sco = acl->link)) {
635 sco->state = BT_CLOSED;
637 hci_proto_connect_cfm(sco, status);
641 hci_dev_unlock(hdev);
644 static void hci_cs_auth_requested(struct hci_dev *hdev, __u8 status)
646 struct hci_cp_auth_requested *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_AUTH_REQUESTED);
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_set_conn_encrypt(struct hci_dev *hdev, __u8 status)
673 struct hci_cp_set_conn_encrypt *cp;
674 struct hci_conn *conn;
676 BT_DBG("%s status 0x%x", hdev->name, status);
681 cp = hci_sent_cmd_data(hdev, HCI_OP_SET_CONN_ENCRYPT);
687 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
689 if (conn->state == BT_CONFIG) {
690 hci_proto_connect_cfm(conn, status);
695 hci_dev_unlock(hdev);
698 static int hci_outgoing_auth_needed(struct hci_dev *hdev,
699 struct hci_conn *conn)
701 if (conn->state != BT_CONFIG || !conn->out)
704 if (conn->pending_sec_level == BT_SECURITY_SDP)
707 /* Only request authentication for SSP connections or non-SSP
708 * devices with sec_level HIGH */
709 if (!(hdev->ssp_mode > 0 && conn->ssp_mode > 0) &&
710 conn->pending_sec_level != BT_SECURITY_HIGH)
716 static void hci_cs_remote_name_req(struct hci_dev *hdev, __u8 status)
718 struct hci_cp_remote_name_req *cp;
719 struct hci_conn *conn;
721 BT_DBG("%s status 0x%x", hdev->name, status);
723 /* If successful wait for the name req complete event before
724 * checking for the need to do authentication */
728 cp = hci_sent_cmd_data(hdev, HCI_OP_REMOTE_NAME_REQ);
734 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
735 if (conn && hci_outgoing_auth_needed(hdev, conn)) {
736 struct hci_cp_auth_requested cp;
737 cp.handle = __cpu_to_le16(conn->handle);
738 hci_send_cmd(hdev, HCI_OP_AUTH_REQUESTED, sizeof(cp), &cp);
741 hci_dev_unlock(hdev);
744 static void hci_cs_read_remote_features(struct hci_dev *hdev, __u8 status)
746 struct hci_cp_read_remote_features *cp;
747 struct hci_conn *conn;
749 BT_DBG("%s status 0x%x", hdev->name, status);
754 cp = hci_sent_cmd_data(hdev, HCI_OP_READ_REMOTE_FEATURES);
760 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
762 if (conn->state == BT_CONFIG) {
763 hci_proto_connect_cfm(conn, status);
768 hci_dev_unlock(hdev);
771 static void hci_cs_read_remote_ext_features(struct hci_dev *hdev, __u8 status)
773 struct hci_cp_read_remote_ext_features *cp;
774 struct hci_conn *conn;
776 BT_DBG("%s status 0x%x", hdev->name, status);
781 cp = hci_sent_cmd_data(hdev, HCI_OP_READ_REMOTE_EXT_FEATURES);
787 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
789 if (conn->state == BT_CONFIG) {
790 hci_proto_connect_cfm(conn, status);
795 hci_dev_unlock(hdev);
798 static void hci_cs_setup_sync_conn(struct hci_dev *hdev, __u8 status)
800 struct hci_cp_setup_sync_conn *cp;
801 struct hci_conn *acl, *sco;
804 BT_DBG("%s status 0x%x", hdev->name, status);
809 cp = hci_sent_cmd_data(hdev, HCI_OP_SETUP_SYNC_CONN);
813 handle = __le16_to_cpu(cp->handle);
815 BT_DBG("%s handle %d", hdev->name, handle);
819 acl = hci_conn_hash_lookup_handle(hdev, handle);
820 if (acl && (sco = acl->link)) {
821 sco->state = BT_CLOSED;
823 hci_proto_connect_cfm(sco, status);
827 hci_dev_unlock(hdev);
830 static void hci_cs_sniff_mode(struct hci_dev *hdev, __u8 status)
832 struct hci_cp_sniff_mode *cp;
833 struct hci_conn *conn;
835 BT_DBG("%s status 0x%x", hdev->name, status);
840 cp = hci_sent_cmd_data(hdev, HCI_OP_SNIFF_MODE);
846 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
848 clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend);
850 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->pend))
851 hci_sco_setup(conn, status);
854 hci_dev_unlock(hdev);
857 static void hci_cs_exit_sniff_mode(struct hci_dev *hdev, __u8 status)
859 struct hci_cp_exit_sniff_mode *cp;
860 struct hci_conn *conn;
862 BT_DBG("%s status 0x%x", hdev->name, status);
867 cp = hci_sent_cmd_data(hdev, HCI_OP_EXIT_SNIFF_MODE);
873 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
875 clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend);
877 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->pend))
878 hci_sco_setup(conn, status);
881 hci_dev_unlock(hdev);
884 static inline void hci_inquiry_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
886 __u8 status = *((__u8 *) skb->data);
888 BT_DBG("%s status %d", hdev->name, status);
890 clear_bit(HCI_INQUIRY, &hdev->flags);
892 hci_req_complete(hdev, HCI_OP_INQUIRY, status);
894 hci_conn_check_pending(hdev);
897 static inline void hci_inquiry_result_evt(struct hci_dev *hdev, struct sk_buff *skb)
899 struct inquiry_data data;
900 struct inquiry_info *info = (void *) (skb->data + 1);
901 int num_rsp = *((__u8 *) skb->data);
903 BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
910 for (; num_rsp; num_rsp--) {
911 bacpy(&data.bdaddr, &info->bdaddr);
912 data.pscan_rep_mode = info->pscan_rep_mode;
913 data.pscan_period_mode = info->pscan_period_mode;
914 data.pscan_mode = info->pscan_mode;
915 memcpy(data.dev_class, info->dev_class, 3);
916 data.clock_offset = info->clock_offset;
918 data.ssp_mode = 0x00;
920 hci_inquiry_cache_update(hdev, &data);
923 hci_dev_unlock(hdev);
926 static inline void hci_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
928 struct hci_ev_conn_complete *ev = (void *) skb->data;
929 struct hci_conn *conn;
931 BT_DBG("%s", hdev->name);
935 conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
937 if (ev->link_type != SCO_LINK)
940 conn = hci_conn_hash_lookup_ba(hdev, ESCO_LINK, &ev->bdaddr);
944 conn->type = SCO_LINK;
948 conn->handle = __le16_to_cpu(ev->handle);
950 if (conn->type == ACL_LINK) {
951 conn->state = BT_CONFIG;
953 conn->disc_timeout = HCI_DISCONN_TIMEOUT;
955 conn->state = BT_CONNECTED;
957 hci_conn_hold_device(conn);
958 hci_conn_add_sysfs(conn);
960 if (test_bit(HCI_AUTH, &hdev->flags))
961 conn->link_mode |= HCI_LM_AUTH;
963 if (test_bit(HCI_ENCRYPT, &hdev->flags))
964 conn->link_mode |= HCI_LM_ENCRYPT;
966 /* Get remote features */
967 if (conn->type == ACL_LINK) {
968 struct hci_cp_read_remote_features cp;
969 cp.handle = ev->handle;
970 hci_send_cmd(hdev, HCI_OP_READ_REMOTE_FEATURES,
974 /* Set packet type for incoming connection */
975 if (!conn->out && hdev->hci_ver < 3) {
976 struct hci_cp_change_conn_ptype cp;
977 cp.handle = ev->handle;
978 cp.pkt_type = cpu_to_le16(conn->pkt_type);
979 hci_send_cmd(hdev, HCI_OP_CHANGE_CONN_PTYPE,
983 conn->state = BT_CLOSED;
985 if (conn->type == ACL_LINK)
986 hci_sco_setup(conn, ev->status);
989 hci_proto_connect_cfm(conn, ev->status);
991 } else if (ev->link_type != ACL_LINK)
992 hci_proto_connect_cfm(conn, ev->status);
995 hci_dev_unlock(hdev);
997 hci_conn_check_pending(hdev);
1000 static inline void hci_conn_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
1002 struct hci_ev_conn_request *ev = (void *) skb->data;
1003 int mask = hdev->link_mode;
1005 BT_DBG("%s bdaddr %s type 0x%x", hdev->name,
1006 batostr(&ev->bdaddr), ev->link_type);
1008 mask |= hci_proto_connect_ind(hdev, &ev->bdaddr, ev->link_type);
1010 if ((mask & HCI_LM_ACCEPT) && !hci_blacklist_lookup(hdev, &ev->bdaddr)) {
1011 /* Connection accepted */
1012 struct inquiry_entry *ie;
1013 struct hci_conn *conn;
1017 ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr);
1019 memcpy(ie->data.dev_class, ev->dev_class, 3);
1021 conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
1023 conn = hci_conn_add(hdev, ev->link_type, &ev->bdaddr);
1025 BT_ERR("No memory for new connection");
1026 hci_dev_unlock(hdev);
1031 memcpy(conn->dev_class, ev->dev_class, 3);
1032 conn->state = BT_CONNECT;
1034 hci_dev_unlock(hdev);
1036 if (ev->link_type == ACL_LINK || !lmp_esco_capable(hdev)) {
1037 struct hci_cp_accept_conn_req cp;
1039 bacpy(&cp.bdaddr, &ev->bdaddr);
1041 if (lmp_rswitch_capable(hdev) && (mask & HCI_LM_MASTER))
1042 cp.role = 0x00; /* Become master */
1044 cp.role = 0x01; /* Remain slave */
1046 hci_send_cmd(hdev, HCI_OP_ACCEPT_CONN_REQ,
1049 struct hci_cp_accept_sync_conn_req cp;
1051 bacpy(&cp.bdaddr, &ev->bdaddr);
1052 cp.pkt_type = cpu_to_le16(conn->pkt_type);
1054 cp.tx_bandwidth = cpu_to_le32(0x00001f40);
1055 cp.rx_bandwidth = cpu_to_le32(0x00001f40);
1056 cp.max_latency = cpu_to_le16(0xffff);
1057 cp.content_format = cpu_to_le16(hdev->voice_setting);
1058 cp.retrans_effort = 0xff;
1060 hci_send_cmd(hdev, HCI_OP_ACCEPT_SYNC_CONN_REQ,
1064 /* Connection rejected */
1065 struct hci_cp_reject_conn_req cp;
1067 bacpy(&cp.bdaddr, &ev->bdaddr);
1069 hci_send_cmd(hdev, HCI_OP_REJECT_CONN_REQ, sizeof(cp), &cp);
1073 static inline void hci_disconn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1075 struct hci_ev_disconn_complete *ev = (void *) skb->data;
1076 struct hci_conn *conn;
1078 BT_DBG("%s status %d", hdev->name, ev->status);
1085 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1087 conn->state = BT_CLOSED;
1089 hci_proto_disconn_cfm(conn, ev->reason);
1093 hci_dev_unlock(hdev);
1096 static inline void hci_auth_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1098 struct hci_ev_auth_complete *ev = (void *) skb->data;
1099 struct hci_conn *conn;
1101 BT_DBG("%s status %d", hdev->name, ev->status);
1105 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1108 conn->link_mode |= HCI_LM_AUTH;
1109 conn->sec_level = conn->pending_sec_level;
1111 conn->sec_level = BT_SECURITY_LOW;
1113 clear_bit(HCI_CONN_AUTH_PEND, &conn->pend);
1115 if (conn->state == BT_CONFIG) {
1116 if (!ev->status && hdev->ssp_mode > 0 &&
1117 conn->ssp_mode > 0) {
1118 struct hci_cp_set_conn_encrypt cp;
1119 cp.handle = ev->handle;
1121 hci_send_cmd(hdev, HCI_OP_SET_CONN_ENCRYPT,
1124 conn->state = BT_CONNECTED;
1125 hci_proto_connect_cfm(conn, ev->status);
1129 hci_auth_cfm(conn, ev->status);
1131 hci_conn_hold(conn);
1132 conn->disc_timeout = HCI_DISCONN_TIMEOUT;
1136 if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend)) {
1138 struct hci_cp_set_conn_encrypt cp;
1139 cp.handle = ev->handle;
1141 hci_send_cmd(hdev, HCI_OP_SET_CONN_ENCRYPT,
1144 clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend);
1145 hci_encrypt_cfm(conn, ev->status, 0x00);
1150 hci_dev_unlock(hdev);
1153 static inline void hci_remote_name_evt(struct hci_dev *hdev, struct sk_buff *skb)
1155 struct hci_ev_remote_name *ev = (void *) skb->data;
1156 struct hci_conn *conn;
1158 BT_DBG("%s", hdev->name);
1160 hci_conn_check_pending(hdev);
1164 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
1165 if (conn && hci_outgoing_auth_needed(hdev, conn)) {
1166 struct hci_cp_auth_requested cp;
1167 cp.handle = __cpu_to_le16(conn->handle);
1168 hci_send_cmd(hdev, HCI_OP_AUTH_REQUESTED, sizeof(cp), &cp);
1171 hci_dev_unlock(hdev);
1174 static inline void hci_encrypt_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
1176 struct hci_ev_encrypt_change *ev = (void *) skb->data;
1177 struct hci_conn *conn;
1179 BT_DBG("%s status %d", hdev->name, ev->status);
1183 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1187 /* Encryption implies authentication */
1188 conn->link_mode |= HCI_LM_AUTH;
1189 conn->link_mode |= HCI_LM_ENCRYPT;
1191 conn->link_mode &= ~HCI_LM_ENCRYPT;
1194 clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend);
1196 if (conn->state == BT_CONFIG) {
1198 conn->state = BT_CONNECTED;
1200 hci_proto_connect_cfm(conn, ev->status);
1203 hci_encrypt_cfm(conn, ev->status, ev->encrypt);
1206 hci_dev_unlock(hdev);
1209 static inline void hci_change_link_key_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1211 struct hci_ev_change_link_key_complete *ev = (void *) skb->data;
1212 struct hci_conn *conn;
1214 BT_DBG("%s status %d", hdev->name, ev->status);
1218 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1221 conn->link_mode |= HCI_LM_SECURE;
1223 clear_bit(HCI_CONN_AUTH_PEND, &conn->pend);
1225 hci_key_change_cfm(conn, ev->status);
1228 hci_dev_unlock(hdev);
1231 static inline void hci_remote_features_evt(struct hci_dev *hdev, struct sk_buff *skb)
1233 struct hci_ev_remote_features *ev = (void *) skb->data;
1234 struct hci_conn *conn;
1236 BT_DBG("%s status %d", hdev->name, ev->status);
1240 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1245 memcpy(conn->features, ev->features, 8);
1247 if (conn->state != BT_CONFIG)
1250 if (!ev->status && lmp_ssp_capable(hdev) && lmp_ssp_capable(conn)) {
1251 struct hci_cp_read_remote_ext_features cp;
1252 cp.handle = ev->handle;
1254 hci_send_cmd(hdev, HCI_OP_READ_REMOTE_EXT_FEATURES,
1260 struct hci_cp_remote_name_req cp;
1261 memset(&cp, 0, sizeof(cp));
1262 bacpy(&cp.bdaddr, &conn->dst);
1263 cp.pscan_rep_mode = 0x02;
1264 hci_send_cmd(hdev, HCI_OP_REMOTE_NAME_REQ, sizeof(cp), &cp);
1267 if (!hci_outgoing_auth_needed(hdev, conn)) {
1268 conn->state = BT_CONNECTED;
1269 hci_proto_connect_cfm(conn, ev->status);
1274 hci_dev_unlock(hdev);
1277 static inline void hci_remote_version_evt(struct hci_dev *hdev, struct sk_buff *skb)
1279 BT_DBG("%s", hdev->name);
1282 static inline void hci_qos_setup_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1284 BT_DBG("%s", hdev->name);
1287 static inline void hci_cmd_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1289 struct hci_ev_cmd_complete *ev = (void *) skb->data;
1292 skb_pull(skb, sizeof(*ev));
1294 opcode = __le16_to_cpu(ev->opcode);
1297 case HCI_OP_INQUIRY_CANCEL:
1298 hci_cc_inquiry_cancel(hdev, skb);
1301 case HCI_OP_EXIT_PERIODIC_INQ:
1302 hci_cc_exit_periodic_inq(hdev, skb);
1305 case HCI_OP_REMOTE_NAME_REQ_CANCEL:
1306 hci_cc_remote_name_req_cancel(hdev, skb);
1309 case HCI_OP_ROLE_DISCOVERY:
1310 hci_cc_role_discovery(hdev, skb);
1313 case HCI_OP_READ_LINK_POLICY:
1314 hci_cc_read_link_policy(hdev, skb);
1317 case HCI_OP_WRITE_LINK_POLICY:
1318 hci_cc_write_link_policy(hdev, skb);
1321 case HCI_OP_READ_DEF_LINK_POLICY:
1322 hci_cc_read_def_link_policy(hdev, skb);
1325 case HCI_OP_WRITE_DEF_LINK_POLICY:
1326 hci_cc_write_def_link_policy(hdev, skb);
1330 hci_cc_reset(hdev, skb);
1333 case HCI_OP_WRITE_LOCAL_NAME:
1334 hci_cc_write_local_name(hdev, skb);
1337 case HCI_OP_READ_LOCAL_NAME:
1338 hci_cc_read_local_name(hdev, skb);
1341 case HCI_OP_WRITE_AUTH_ENABLE:
1342 hci_cc_write_auth_enable(hdev, skb);
1345 case HCI_OP_WRITE_ENCRYPT_MODE:
1346 hci_cc_write_encrypt_mode(hdev, skb);
1349 case HCI_OP_WRITE_SCAN_ENABLE:
1350 hci_cc_write_scan_enable(hdev, skb);
1353 case HCI_OP_READ_CLASS_OF_DEV:
1354 hci_cc_read_class_of_dev(hdev, skb);
1357 case HCI_OP_WRITE_CLASS_OF_DEV:
1358 hci_cc_write_class_of_dev(hdev, skb);
1361 case HCI_OP_READ_VOICE_SETTING:
1362 hci_cc_read_voice_setting(hdev, skb);
1365 case HCI_OP_WRITE_VOICE_SETTING:
1366 hci_cc_write_voice_setting(hdev, skb);
1369 case HCI_OP_HOST_BUFFER_SIZE:
1370 hci_cc_host_buffer_size(hdev, skb);
1373 case HCI_OP_READ_SSP_MODE:
1374 hci_cc_read_ssp_mode(hdev, skb);
1377 case HCI_OP_WRITE_SSP_MODE:
1378 hci_cc_write_ssp_mode(hdev, skb);
1381 case HCI_OP_READ_LOCAL_VERSION:
1382 hci_cc_read_local_version(hdev, skb);
1385 case HCI_OP_READ_LOCAL_COMMANDS:
1386 hci_cc_read_local_commands(hdev, skb);
1389 case HCI_OP_READ_LOCAL_FEATURES:
1390 hci_cc_read_local_features(hdev, skb);
1393 case HCI_OP_READ_BUFFER_SIZE:
1394 hci_cc_read_buffer_size(hdev, skb);
1397 case HCI_OP_READ_BD_ADDR:
1398 hci_cc_read_bd_addr(hdev, skb);
1401 case HCI_OP_WRITE_CA_TIMEOUT:
1402 hci_cc_write_ca_timeout(hdev, skb);
1406 BT_DBG("%s opcode 0x%x", hdev->name, opcode);
1411 atomic_set(&hdev->cmd_cnt, 1);
1412 if (!skb_queue_empty(&hdev->cmd_q))
1413 tasklet_schedule(&hdev->cmd_task);
1417 static inline void hci_cmd_status_evt(struct hci_dev *hdev, struct sk_buff *skb)
1419 struct hci_ev_cmd_status *ev = (void *) skb->data;
1422 skb_pull(skb, sizeof(*ev));
1424 opcode = __le16_to_cpu(ev->opcode);
1427 case HCI_OP_INQUIRY:
1428 hci_cs_inquiry(hdev, ev->status);
1431 case HCI_OP_CREATE_CONN:
1432 hci_cs_create_conn(hdev, ev->status);
1435 case HCI_OP_ADD_SCO:
1436 hci_cs_add_sco(hdev, ev->status);
1439 case HCI_OP_AUTH_REQUESTED:
1440 hci_cs_auth_requested(hdev, ev->status);
1443 case HCI_OP_SET_CONN_ENCRYPT:
1444 hci_cs_set_conn_encrypt(hdev, ev->status);
1447 case HCI_OP_REMOTE_NAME_REQ:
1448 hci_cs_remote_name_req(hdev, ev->status);
1451 case HCI_OP_READ_REMOTE_FEATURES:
1452 hci_cs_read_remote_features(hdev, ev->status);
1455 case HCI_OP_READ_REMOTE_EXT_FEATURES:
1456 hci_cs_read_remote_ext_features(hdev, ev->status);
1459 case HCI_OP_SETUP_SYNC_CONN:
1460 hci_cs_setup_sync_conn(hdev, ev->status);
1463 case HCI_OP_SNIFF_MODE:
1464 hci_cs_sniff_mode(hdev, ev->status);
1467 case HCI_OP_EXIT_SNIFF_MODE:
1468 hci_cs_exit_sniff_mode(hdev, ev->status);
1472 BT_DBG("%s opcode 0x%x", hdev->name, opcode);
1477 atomic_set(&hdev->cmd_cnt, 1);
1478 if (!skb_queue_empty(&hdev->cmd_q))
1479 tasklet_schedule(&hdev->cmd_task);
1483 static inline void hci_role_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
1485 struct hci_ev_role_change *ev = (void *) skb->data;
1486 struct hci_conn *conn;
1488 BT_DBG("%s status %d", hdev->name, ev->status);
1492 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
1496 conn->link_mode &= ~HCI_LM_MASTER;
1498 conn->link_mode |= HCI_LM_MASTER;
1501 clear_bit(HCI_CONN_RSWITCH_PEND, &conn->pend);
1503 hci_role_switch_cfm(conn, ev->status, ev->role);
1506 hci_dev_unlock(hdev);
1509 static inline void hci_num_comp_pkts_evt(struct hci_dev *hdev, struct sk_buff *skb)
1511 struct hci_ev_num_comp_pkts *ev = (void *) skb->data;
1515 skb_pull(skb, sizeof(*ev));
1517 BT_DBG("%s num_hndl %d", hdev->name, ev->num_hndl);
1519 if (skb->len < ev->num_hndl * 4) {
1520 BT_DBG("%s bad parameters", hdev->name);
1524 tasklet_disable(&hdev->tx_task);
1526 for (i = 0, ptr = (__le16 *) skb->data; i < ev->num_hndl; i++) {
1527 struct hci_conn *conn;
1528 __u16 handle, count;
1530 handle = get_unaligned_le16(ptr++);
1531 count = get_unaligned_le16(ptr++);
1533 conn = hci_conn_hash_lookup_handle(hdev, handle);
1535 conn->sent -= count;
1537 if (conn->type == ACL_LINK) {
1538 hdev->acl_cnt += count;
1539 if (hdev->acl_cnt > hdev->acl_pkts)
1540 hdev->acl_cnt = hdev->acl_pkts;
1542 hdev->sco_cnt += count;
1543 if (hdev->sco_cnt > hdev->sco_pkts)
1544 hdev->sco_cnt = hdev->sco_pkts;
1549 tasklet_schedule(&hdev->tx_task);
1551 tasklet_enable(&hdev->tx_task);
1554 static inline void hci_mode_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
1556 struct hci_ev_mode_change *ev = (void *) skb->data;
1557 struct hci_conn *conn;
1559 BT_DBG("%s status %d", hdev->name, ev->status);
1563 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1565 conn->mode = ev->mode;
1566 conn->interval = __le16_to_cpu(ev->interval);
1568 if (!test_and_clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend)) {
1569 if (conn->mode == HCI_CM_ACTIVE)
1570 conn->power_save = 1;
1572 conn->power_save = 0;
1575 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->pend))
1576 hci_sco_setup(conn, ev->status);
1579 hci_dev_unlock(hdev);
1582 static inline void hci_pin_code_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
1584 struct hci_ev_pin_code_req *ev = (void *) skb->data;
1585 struct hci_conn *conn;
1587 BT_DBG("%s", hdev->name);
1591 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
1592 if (conn && conn->state == BT_CONNECTED) {
1593 hci_conn_hold(conn);
1594 conn->disc_timeout = HCI_PAIRING_TIMEOUT;
1598 if (!test_bit(HCI_PAIRABLE, &hdev->flags))
1599 hci_send_cmd(hdev, HCI_OP_PIN_CODE_NEG_REPLY,
1600 sizeof(ev->bdaddr), &ev->bdaddr);
1602 hci_dev_unlock(hdev);
1605 static inline void hci_link_key_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
1607 BT_DBG("%s", hdev->name);
1610 static inline void hci_link_key_notify_evt(struct hci_dev *hdev, struct sk_buff *skb)
1612 struct hci_ev_link_key_notify *ev = (void *) skb->data;
1613 struct hci_conn *conn;
1615 BT_DBG("%s", hdev->name);
1619 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
1621 hci_conn_hold(conn);
1622 conn->disc_timeout = HCI_DISCONN_TIMEOUT;
1626 hci_dev_unlock(hdev);
1629 static inline void hci_clock_offset_evt(struct hci_dev *hdev, struct sk_buff *skb)
1631 struct hci_ev_clock_offset *ev = (void *) skb->data;
1632 struct hci_conn *conn;
1634 BT_DBG("%s status %d", hdev->name, ev->status);
1638 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1639 if (conn && !ev->status) {
1640 struct inquiry_entry *ie;
1642 ie = hci_inquiry_cache_lookup(hdev, &conn->dst);
1644 ie->data.clock_offset = ev->clock_offset;
1645 ie->timestamp = jiffies;
1649 hci_dev_unlock(hdev);
1652 static inline void hci_pkt_type_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
1654 struct hci_ev_pkt_type_change *ev = (void *) skb->data;
1655 struct hci_conn *conn;
1657 BT_DBG("%s status %d", hdev->name, ev->status);
1661 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1662 if (conn && !ev->status)
1663 conn->pkt_type = __le16_to_cpu(ev->pkt_type);
1665 hci_dev_unlock(hdev);
1668 static inline void hci_pscan_rep_mode_evt(struct hci_dev *hdev, struct sk_buff *skb)
1670 struct hci_ev_pscan_rep_mode *ev = (void *) skb->data;
1671 struct inquiry_entry *ie;
1673 BT_DBG("%s", hdev->name);
1677 ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr);
1679 ie->data.pscan_rep_mode = ev->pscan_rep_mode;
1680 ie->timestamp = jiffies;
1683 hci_dev_unlock(hdev);
1686 static inline void hci_inquiry_result_with_rssi_evt(struct hci_dev *hdev, struct sk_buff *skb)
1688 struct inquiry_data data;
1689 int num_rsp = *((__u8 *) skb->data);
1691 BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
1698 if ((skb->len - 1) / num_rsp != sizeof(struct inquiry_info_with_rssi)) {
1699 struct inquiry_info_with_rssi_and_pscan_mode *info = (void *) (skb->data + 1);
1701 for (; num_rsp; num_rsp--) {
1702 bacpy(&data.bdaddr, &info->bdaddr);
1703 data.pscan_rep_mode = info->pscan_rep_mode;
1704 data.pscan_period_mode = info->pscan_period_mode;
1705 data.pscan_mode = info->pscan_mode;
1706 memcpy(data.dev_class, info->dev_class, 3);
1707 data.clock_offset = info->clock_offset;
1708 data.rssi = info->rssi;
1709 data.ssp_mode = 0x00;
1711 hci_inquiry_cache_update(hdev, &data);
1714 struct inquiry_info_with_rssi *info = (void *) (skb->data + 1);
1716 for (; num_rsp; num_rsp--) {
1717 bacpy(&data.bdaddr, &info->bdaddr);
1718 data.pscan_rep_mode = info->pscan_rep_mode;
1719 data.pscan_period_mode = info->pscan_period_mode;
1720 data.pscan_mode = 0x00;
1721 memcpy(data.dev_class, info->dev_class, 3);
1722 data.clock_offset = info->clock_offset;
1723 data.rssi = info->rssi;
1724 data.ssp_mode = 0x00;
1726 hci_inquiry_cache_update(hdev, &data);
1730 hci_dev_unlock(hdev);
1733 static inline void hci_remote_ext_features_evt(struct hci_dev *hdev, struct sk_buff *skb)
1735 struct hci_ev_remote_ext_features *ev = (void *) skb->data;
1736 struct hci_conn *conn;
1738 BT_DBG("%s", hdev->name);
1742 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1746 if (!ev->status && ev->page == 0x01) {
1747 struct inquiry_entry *ie;
1749 ie = hci_inquiry_cache_lookup(hdev, &conn->dst);
1751 ie->data.ssp_mode = (ev->features[0] & 0x01);
1753 conn->ssp_mode = (ev->features[0] & 0x01);
1756 if (conn->state != BT_CONFIG)
1760 struct hci_cp_remote_name_req cp;
1761 memset(&cp, 0, sizeof(cp));
1762 bacpy(&cp.bdaddr, &conn->dst);
1763 cp.pscan_rep_mode = 0x02;
1764 hci_send_cmd(hdev, HCI_OP_REMOTE_NAME_REQ, sizeof(cp), &cp);
1767 if (!hci_outgoing_auth_needed(hdev, conn)) {
1768 conn->state = BT_CONNECTED;
1769 hci_proto_connect_cfm(conn, ev->status);
1774 hci_dev_unlock(hdev);
1777 static inline void hci_sync_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1779 struct hci_ev_sync_conn_complete *ev = (void *) skb->data;
1780 struct hci_conn *conn;
1782 BT_DBG("%s status %d", hdev->name, ev->status);
1786 conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
1788 if (ev->link_type == ESCO_LINK)
1791 conn = hci_conn_hash_lookup_ba(hdev, ESCO_LINK, &ev->bdaddr);
1795 conn->type = SCO_LINK;
1798 switch (ev->status) {
1800 conn->handle = __le16_to_cpu(ev->handle);
1801 conn->state = BT_CONNECTED;
1803 hci_conn_hold_device(conn);
1804 hci_conn_add_sysfs(conn);
1807 case 0x11: /* Unsupported Feature or Parameter Value */
1808 case 0x1c: /* SCO interval rejected */
1809 case 0x1a: /* Unsupported Remote Feature */
1810 case 0x1f: /* Unspecified error */
1811 if (conn->out && conn->attempt < 2) {
1812 conn->pkt_type = (hdev->esco_type & SCO_ESCO_MASK) |
1813 (hdev->esco_type & EDR_ESCO_MASK);
1814 hci_setup_sync(conn, conn->link->handle);
1820 conn->state = BT_CLOSED;
1824 hci_proto_connect_cfm(conn, ev->status);
1829 hci_dev_unlock(hdev);
1832 static inline void hci_sync_conn_changed_evt(struct hci_dev *hdev, struct sk_buff *skb)
1834 BT_DBG("%s", hdev->name);
1837 static inline void hci_sniff_subrate_evt(struct hci_dev *hdev, struct sk_buff *skb)
1839 struct hci_ev_sniff_subrate *ev = (void *) skb->data;
1840 struct hci_conn *conn;
1842 BT_DBG("%s status %d", hdev->name, ev->status);
1846 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1850 hci_dev_unlock(hdev);
1853 static inline void hci_extended_inquiry_result_evt(struct hci_dev *hdev, struct sk_buff *skb)
1855 struct inquiry_data data;
1856 struct extended_inquiry_info *info = (void *) (skb->data + 1);
1857 int num_rsp = *((__u8 *) skb->data);
1859 BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
1866 for (; num_rsp; num_rsp--) {
1867 bacpy(&data.bdaddr, &info->bdaddr);
1868 data.pscan_rep_mode = info->pscan_rep_mode;
1869 data.pscan_period_mode = info->pscan_period_mode;
1870 data.pscan_mode = 0x00;
1871 memcpy(data.dev_class, info->dev_class, 3);
1872 data.clock_offset = info->clock_offset;
1873 data.rssi = info->rssi;
1874 data.ssp_mode = 0x01;
1876 hci_inquiry_cache_update(hdev, &data);
1879 hci_dev_unlock(hdev);
1882 static inline void hci_io_capa_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
1884 struct hci_ev_io_capa_request *ev = (void *) skb->data;
1885 struct hci_conn *conn;
1887 BT_DBG("%s", hdev->name);
1891 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
1895 hci_conn_hold(conn);
1897 if (!test_bit(HCI_MGMT, &hdev->flags))
1900 if (test_bit(HCI_PAIRABLE, &hdev->flags) ||
1901 (conn->remote_auth & ~0x01) == HCI_AT_NO_BONDING) {
1902 /* FIXME: Do IO capa response based on information
1903 * provided through the management interface */
1905 struct hci_cp_io_capability_neg_reply cp;
1907 bacpy(&cp.bdaddr, &ev->bdaddr);
1908 cp.reason = 0x16; /* Pairing not allowed */
1910 hci_send_cmd(hdev, HCI_OP_IO_CAPABILITY_NEG_REPLY,
1915 hci_dev_unlock(hdev);
1918 static inline void hci_io_capa_reply_evt(struct hci_dev *hdev, struct sk_buff *skb)
1920 struct hci_ev_io_capa_reply *ev = (void *) skb->data;
1921 struct hci_conn *conn;
1923 BT_DBG("%s", hdev->name);
1927 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
1931 hci_conn_hold(conn);
1933 conn->remote_cap = ev->capability;
1934 conn->remote_oob = ev->oob_data;
1935 conn->remote_auth = ev->authentication;
1938 hci_dev_unlock(hdev);
1941 static inline void hci_simple_pair_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1943 struct hci_ev_simple_pair_complete *ev = (void *) skb->data;
1944 struct hci_conn *conn;
1946 BT_DBG("%s", hdev->name);
1950 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
1954 hci_dev_unlock(hdev);
1957 static inline void hci_remote_host_features_evt(struct hci_dev *hdev, struct sk_buff *skb)
1959 struct hci_ev_remote_host_features *ev = (void *) skb->data;
1960 struct inquiry_entry *ie;
1962 BT_DBG("%s", hdev->name);
1966 ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr);
1968 ie->data.ssp_mode = (ev->features[0] & 0x01);
1970 hci_dev_unlock(hdev);
1973 void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb)
1975 struct hci_event_hdr *hdr = (void *) skb->data;
1976 __u8 event = hdr->evt;
1978 skb_pull(skb, HCI_EVENT_HDR_SIZE);
1981 case HCI_EV_INQUIRY_COMPLETE:
1982 hci_inquiry_complete_evt(hdev, skb);
1985 case HCI_EV_INQUIRY_RESULT:
1986 hci_inquiry_result_evt(hdev, skb);
1989 case HCI_EV_CONN_COMPLETE:
1990 hci_conn_complete_evt(hdev, skb);
1993 case HCI_EV_CONN_REQUEST:
1994 hci_conn_request_evt(hdev, skb);
1997 case HCI_EV_DISCONN_COMPLETE:
1998 hci_disconn_complete_evt(hdev, skb);
2001 case HCI_EV_AUTH_COMPLETE:
2002 hci_auth_complete_evt(hdev, skb);
2005 case HCI_EV_REMOTE_NAME:
2006 hci_remote_name_evt(hdev, skb);
2009 case HCI_EV_ENCRYPT_CHANGE:
2010 hci_encrypt_change_evt(hdev, skb);
2013 case HCI_EV_CHANGE_LINK_KEY_COMPLETE:
2014 hci_change_link_key_complete_evt(hdev, skb);
2017 case HCI_EV_REMOTE_FEATURES:
2018 hci_remote_features_evt(hdev, skb);
2021 case HCI_EV_REMOTE_VERSION:
2022 hci_remote_version_evt(hdev, skb);
2025 case HCI_EV_QOS_SETUP_COMPLETE:
2026 hci_qos_setup_complete_evt(hdev, skb);
2029 case HCI_EV_CMD_COMPLETE:
2030 hci_cmd_complete_evt(hdev, skb);
2033 case HCI_EV_CMD_STATUS:
2034 hci_cmd_status_evt(hdev, skb);
2037 case HCI_EV_ROLE_CHANGE:
2038 hci_role_change_evt(hdev, skb);
2041 case HCI_EV_NUM_COMP_PKTS:
2042 hci_num_comp_pkts_evt(hdev, skb);
2045 case HCI_EV_MODE_CHANGE:
2046 hci_mode_change_evt(hdev, skb);
2049 case HCI_EV_PIN_CODE_REQ:
2050 hci_pin_code_request_evt(hdev, skb);
2053 case HCI_EV_LINK_KEY_REQ:
2054 hci_link_key_request_evt(hdev, skb);
2057 case HCI_EV_LINK_KEY_NOTIFY:
2058 hci_link_key_notify_evt(hdev, skb);
2061 case HCI_EV_CLOCK_OFFSET:
2062 hci_clock_offset_evt(hdev, skb);
2065 case HCI_EV_PKT_TYPE_CHANGE:
2066 hci_pkt_type_change_evt(hdev, skb);
2069 case HCI_EV_PSCAN_REP_MODE:
2070 hci_pscan_rep_mode_evt(hdev, skb);
2073 case HCI_EV_INQUIRY_RESULT_WITH_RSSI:
2074 hci_inquiry_result_with_rssi_evt(hdev, skb);
2077 case HCI_EV_REMOTE_EXT_FEATURES:
2078 hci_remote_ext_features_evt(hdev, skb);
2081 case HCI_EV_SYNC_CONN_COMPLETE:
2082 hci_sync_conn_complete_evt(hdev, skb);
2085 case HCI_EV_SYNC_CONN_CHANGED:
2086 hci_sync_conn_changed_evt(hdev, skb);
2089 case HCI_EV_SNIFF_SUBRATE:
2090 hci_sniff_subrate_evt(hdev, skb);
2093 case HCI_EV_EXTENDED_INQUIRY_RESULT:
2094 hci_extended_inquiry_result_evt(hdev, skb);
2097 case HCI_EV_IO_CAPA_REQUEST:
2098 hci_io_capa_request_evt(hdev, skb);
2101 case HCI_EV_IO_CAPA_REPLY:
2102 hci_io_capa_reply_evt(hdev, skb);
2105 case HCI_EV_SIMPLE_PAIR_COMPLETE:
2106 hci_simple_pair_complete_evt(hdev, skb);
2109 case HCI_EV_REMOTE_HOST_FEATURES:
2110 hci_remote_host_features_evt(hdev, skb);
2114 BT_DBG("%s event 0x%x", hdev->name, event);
2119 hdev->stat.evt_rx++;
2122 /* Generate internal stack event */
2123 void hci_si_event(struct hci_dev *hdev, int type, int dlen, void *data)
2125 struct hci_event_hdr *hdr;
2126 struct hci_ev_stack_internal *ev;
2127 struct sk_buff *skb;
2129 skb = bt_skb_alloc(HCI_EVENT_HDR_SIZE + sizeof(*ev) + dlen, GFP_ATOMIC);
2133 hdr = (void *) skb_put(skb, HCI_EVENT_HDR_SIZE);
2134 hdr->evt = HCI_EV_STACK_INTERNAL;
2135 hdr->plen = sizeof(*ev) + dlen;
2137 ev = (void *) skb_put(skb, sizeof(*ev) + dlen);
2139 memcpy(ev->data, data, dlen);
2141 bt_cb(skb)->incoming = 1;
2142 __net_timestamp(skb);
2144 bt_cb(skb)->pkt_type = HCI_EVENT_PKT;
2145 skb->dev = (void *) hdev;
2146 hci_send_to_sock(hdev, skb, NULL);