2 BlueZ - Bluetooth protocol stack for Linux
3 Copyright (C) 2000-2001 Qualcomm Incorporated
5 Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License version 2 as
9 published by the Free Software Foundation;
11 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
12 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
13 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
14 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
15 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
16 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
20 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
21 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
22 SOFTWARE IS DISCLAIMED.
25 /* Bluetooth HCI event handling. */
27 #include <linux/module.h>
29 #include <linux/types.h>
30 #include <linux/errno.h>
31 #include <linux/kernel.h>
32 #include <linux/slab.h>
33 #include <linux/poll.h>
34 #include <linux/fcntl.h>
35 #include <linux/init.h>
36 #include <linux/skbuff.h>
37 #include <linux/interrupt.h>
38 #include <linux/notifier.h>
41 #include <asm/system.h>
42 #include <asm/uaccess.h>
43 #include <asm/unaligned.h>
45 #include <net/bluetooth/bluetooth.h>
46 #include <net/bluetooth/hci_core.h>
48 #ifndef CONFIG_BT_HCI_CORE_DEBUG
53 /* Handle HCI Event packets */
55 static void hci_cc_inquiry_cancel(struct hci_dev *hdev, struct sk_buff *skb)
57 __u8 status = *((__u8 *) skb->data);
59 BT_DBG("%s status 0x%x", hdev->name, status);
64 clear_bit(HCI_INQUIRY, &hdev->flags);
66 hci_req_complete(hdev, status);
68 hci_conn_check_pending(hdev);
71 static void hci_cc_exit_periodic_inq(struct hci_dev *hdev, struct sk_buff *skb)
73 __u8 status = *((__u8 *) skb->data);
75 BT_DBG("%s status 0x%x", hdev->name, status);
80 clear_bit(HCI_INQUIRY, &hdev->flags);
82 hci_conn_check_pending(hdev);
85 static void hci_cc_remote_name_req_cancel(struct hci_dev *hdev, struct sk_buff *skb)
87 BT_DBG("%s", hdev->name);
90 static void hci_cc_role_discovery(struct hci_dev *hdev, struct sk_buff *skb)
92 struct hci_rp_role_discovery *rp = (void *) skb->data;
93 struct hci_conn *conn;
95 BT_DBG("%s status 0x%x", hdev->name, rp->status);
102 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
105 conn->link_mode &= ~HCI_LM_MASTER;
107 conn->link_mode |= HCI_LM_MASTER;
110 hci_dev_unlock(hdev);
113 static void hci_cc_write_link_policy(struct hci_dev *hdev, struct sk_buff *skb)
115 struct hci_rp_write_link_policy *rp = (void *) skb->data;
116 struct hci_conn *conn;
119 BT_DBG("%s status 0x%x", hdev->name, rp->status);
124 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_LINK_POLICY);
130 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
132 __le16 policy = get_unaligned((__le16 *) (sent + 2));
133 conn->link_policy = __le16_to_cpu(policy);
136 hci_dev_unlock(hdev);
139 static void hci_cc_reset(struct hci_dev *hdev, struct sk_buff *skb)
141 __u8 status = *((__u8 *) skb->data);
143 BT_DBG("%s status 0x%x", hdev->name, status);
145 hci_req_complete(hdev, status);
148 static void hci_cc_write_local_name(struct hci_dev *hdev, struct sk_buff *skb)
150 __u8 status = *((__u8 *) skb->data);
153 BT_DBG("%s status 0x%x", hdev->name, status);
155 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_LOCAL_NAME);
160 memcpy(hdev->dev_name, sent, 248);
163 static void hci_cc_read_local_name(struct hci_dev *hdev, struct sk_buff *skb)
165 struct hci_rp_read_local_name *rp = (void *) skb->data;
167 BT_DBG("%s status 0x%x", hdev->name, rp->status);
172 memcpy(hdev->dev_name, rp->name, 248);
175 static void hci_cc_write_auth_enable(struct hci_dev *hdev, struct sk_buff *skb)
177 __u8 status = *((__u8 *) skb->data);
180 BT_DBG("%s status 0x%x", hdev->name, status);
182 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_AUTH_ENABLE);
187 __u8 param = *((__u8 *) sent);
189 if (param == AUTH_ENABLED)
190 set_bit(HCI_AUTH, &hdev->flags);
192 clear_bit(HCI_AUTH, &hdev->flags);
195 hci_req_complete(hdev, status);
198 static void hci_cc_write_encrypt_mode(struct hci_dev *hdev, struct sk_buff *skb)
200 __u8 status = *((__u8 *) skb->data);
203 BT_DBG("%s status 0x%x", hdev->name, status);
205 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_ENCRYPT_MODE);
210 __u8 param = *((__u8 *) sent);
213 set_bit(HCI_ENCRYPT, &hdev->flags);
215 clear_bit(HCI_ENCRYPT, &hdev->flags);
218 hci_req_complete(hdev, status);
221 static void hci_cc_write_scan_enable(struct hci_dev *hdev, struct sk_buff *skb)
223 __u8 status = *((__u8 *) skb->data);
226 BT_DBG("%s status 0x%x", hdev->name, status);
228 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_SCAN_ENABLE);
233 __u8 param = *((__u8 *) sent);
235 clear_bit(HCI_PSCAN, &hdev->flags);
236 clear_bit(HCI_ISCAN, &hdev->flags);
238 if (param & SCAN_INQUIRY)
239 set_bit(HCI_ISCAN, &hdev->flags);
241 if (param & SCAN_PAGE)
242 set_bit(HCI_PSCAN, &hdev->flags);
245 hci_req_complete(hdev, status);
248 static void hci_cc_read_class_of_dev(struct hci_dev *hdev, struct sk_buff *skb)
250 struct hci_rp_read_class_of_dev *rp = (void *) skb->data;
252 BT_DBG("%s status 0x%x", hdev->name, rp->status);
257 memcpy(hdev->dev_class, rp->dev_class, 3);
259 BT_DBG("%s class 0x%.2x%.2x%.2x", hdev->name,
260 hdev->dev_class[2], hdev->dev_class[1], hdev->dev_class[0]);
263 static void hci_cc_write_class_of_dev(struct hci_dev *hdev, struct sk_buff *skb)
265 __u8 status = *((__u8 *) skb->data);
268 BT_DBG("%s status 0x%x", hdev->name, status);
270 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_CLASS_OF_DEV);
275 memcpy(hdev->dev_class, sent, 3);
278 static void hci_cc_read_voice_setting(struct hci_dev *hdev, struct sk_buff *skb)
280 struct hci_rp_read_voice_setting *rp = (void *) skb->data;
283 BT_DBG("%s status 0x%x", hdev->name, rp->status);
288 setting = __le16_to_cpu(rp->voice_setting);
290 if (hdev->voice_setting == setting )
293 hdev->voice_setting = setting;
295 BT_DBG("%s voice setting 0x%04x", hdev->name, setting);
298 tasklet_disable(&hdev->tx_task);
299 hdev->notify(hdev, HCI_NOTIFY_VOICE_SETTING);
300 tasklet_enable(&hdev->tx_task);
304 static void hci_cc_write_voice_setting(struct hci_dev *hdev, struct sk_buff *skb)
306 __u8 status = *((__u8 *) skb->data);
309 BT_DBG("%s status 0x%x", hdev->name, status);
311 sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_VOICE_SETTING);
316 __u16 setting = __le16_to_cpu(get_unaligned((__le16 *) sent));
318 if (hdev->voice_setting != setting) {
319 hdev->voice_setting = setting;
321 BT_DBG("%s voice setting 0x%04x", hdev->name, setting);
324 tasklet_disable(&hdev->tx_task);
325 hdev->notify(hdev, HCI_NOTIFY_VOICE_SETTING);
326 tasklet_enable(&hdev->tx_task);
332 static void hci_cc_host_buffer_size(struct hci_dev *hdev, struct sk_buff *skb)
334 __u8 status = *((__u8 *) skb->data);
336 BT_DBG("%s status 0x%x", hdev->name, status);
338 hci_req_complete(hdev, status);
341 static void hci_cc_read_local_version(struct hci_dev *hdev, struct sk_buff *skb)
343 struct hci_rp_read_local_version *rp = (void *) skb->data;
345 BT_DBG("%s status 0x%x", hdev->name, rp->status);
350 hdev->hci_ver = rp->hci_ver;
351 hdev->hci_rev = btohs(rp->hci_rev);
352 hdev->manufacturer = btohs(rp->manufacturer);
354 BT_DBG("%s manufacturer %d hci ver %d:%d", hdev->name,
356 hdev->hci_ver, hdev->hci_rev);
359 static void hci_cc_read_local_commands(struct hci_dev *hdev, struct sk_buff *skb)
361 struct hci_rp_read_local_commands *rp = (void *) skb->data;
363 BT_DBG("%s status 0x%x", hdev->name, rp->status);
368 memcpy(hdev->commands, rp->commands, sizeof(hdev->commands));
371 static void hci_cc_read_local_features(struct hci_dev *hdev, struct sk_buff *skb)
373 struct hci_rp_read_local_features *rp = (void *) skb->data;
375 BT_DBG("%s status 0x%x", hdev->name, rp->status);
380 memcpy(hdev->features, rp->features, 8);
382 /* Adjust default settings according to features
383 * supported by device. */
385 if (hdev->features[0] & LMP_3SLOT)
386 hdev->pkt_type |= (HCI_DM3 | HCI_DH3);
388 if (hdev->features[0] & LMP_5SLOT)
389 hdev->pkt_type |= (HCI_DM5 | HCI_DH5);
391 if (hdev->features[1] & LMP_HV2) {
392 hdev->pkt_type |= (HCI_HV2);
393 hdev->esco_type |= (ESCO_HV2);
396 if (hdev->features[1] & LMP_HV3) {
397 hdev->pkt_type |= (HCI_HV3);
398 hdev->esco_type |= (ESCO_HV3);
401 if (hdev->features[3] & LMP_ESCO)
402 hdev->esco_type |= (ESCO_EV3);
404 if (hdev->features[4] & LMP_EV4)
405 hdev->esco_type |= (ESCO_EV4);
407 if (hdev->features[4] & LMP_EV5)
408 hdev->esco_type |= (ESCO_EV5);
410 BT_DBG("%s features 0x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x", hdev->name,
411 hdev->features[0], hdev->features[1],
412 hdev->features[2], hdev->features[3],
413 hdev->features[4], hdev->features[5],
414 hdev->features[6], hdev->features[7]);
417 static void hci_cc_read_buffer_size(struct hci_dev *hdev, struct sk_buff *skb)
419 struct hci_rp_read_buffer_size *rp = (void *) skb->data;
421 BT_DBG("%s status 0x%x", hdev->name, rp->status);
426 hdev->acl_mtu = __le16_to_cpu(rp->acl_mtu);
427 hdev->sco_mtu = rp->sco_mtu;
428 hdev->acl_pkts = __le16_to_cpu(rp->acl_max_pkt);
429 hdev->sco_pkts = __le16_to_cpu(rp->sco_max_pkt);
431 if (test_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE, &hdev->quirks)) {
436 hdev->acl_cnt = hdev->acl_pkts;
437 hdev->sco_cnt = hdev->sco_pkts;
439 BT_DBG("%s acl mtu %d:%d sco mtu %d:%d", hdev->name,
440 hdev->acl_mtu, hdev->acl_pkts,
441 hdev->sco_mtu, hdev->sco_pkts);
444 static void hci_cc_read_bd_addr(struct hci_dev *hdev, struct sk_buff *skb)
446 struct hci_rp_read_bd_addr *rp = (void *) skb->data;
448 BT_DBG("%s status 0x%x", hdev->name, rp->status);
451 bacpy(&hdev->bdaddr, &rp->bdaddr);
453 hci_req_complete(hdev, rp->status);
456 static inline void hci_cs_inquiry(struct hci_dev *hdev, __u8 status)
458 BT_DBG("%s status 0x%x", hdev->name, status);
461 hci_req_complete(hdev, status);
463 hci_conn_check_pending(hdev);
465 set_bit(HCI_INQUIRY, &hdev->flags);
468 static inline void hci_cs_create_conn(struct hci_dev *hdev, __u8 status)
470 struct hci_cp_create_conn *cp;
471 struct hci_conn *conn;
473 BT_DBG("%s status 0x%x", hdev->name, status);
475 cp = hci_sent_cmd_data(hdev, HCI_OP_CREATE_CONN);
481 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
483 BT_DBG("%s bdaddr %s conn %p", hdev->name, batostr(&cp->bdaddr), conn);
486 if (conn && conn->state == BT_CONNECT) {
487 if (status != 0x0c || conn->attempt > 2) {
488 conn->state = BT_CLOSED;
489 hci_proto_connect_cfm(conn, status);
492 conn->state = BT_CONNECT2;
496 conn = hci_conn_add(hdev, ACL_LINK, &cp->bdaddr);
499 conn->link_mode |= HCI_LM_MASTER;
501 BT_ERR("No memmory for new connection");
505 hci_dev_unlock(hdev);
508 static void hci_cs_add_sco(struct hci_dev *hdev, __u8 status)
510 struct hci_cp_add_sco *cp;
511 struct hci_conn *acl, *sco;
517 BT_DBG("%s status 0x%x", hdev->name, status);
519 cp = hci_sent_cmd_data(hdev, HCI_OP_ADD_SCO);
523 handle = __le16_to_cpu(cp->handle);
525 BT_DBG("%s handle %d", hdev->name, handle);
529 acl = hci_conn_hash_lookup_handle(hdev, handle);
530 if (acl && (sco = acl->link)) {
531 sco->state = BT_CLOSED;
533 hci_proto_connect_cfm(sco, status);
537 hci_dev_unlock(hdev);
540 static void hci_cs_remote_name_req(struct hci_dev *hdev, __u8 status)
542 BT_DBG("%s status 0x%x", hdev->name, status);
545 static void hci_cs_setup_sync_conn(struct hci_dev *hdev, __u8 status)
547 BT_DBG("%s status 0x%x", hdev->name, status);
550 static void hci_cs_sniff_mode(struct hci_dev *hdev, __u8 status)
552 struct hci_cp_sniff_mode *cp;
553 struct hci_conn *conn;
555 BT_DBG("%s status 0x%x", hdev->name, status);
560 cp = hci_sent_cmd_data(hdev, HCI_OP_SNIFF_MODE);
566 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
568 clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend);
570 hci_dev_unlock(hdev);
573 static void hci_cs_exit_sniff_mode(struct hci_dev *hdev, __u8 status)
575 struct hci_cp_exit_sniff_mode *cp;
576 struct hci_conn *conn;
578 BT_DBG("%s status 0x%x", hdev->name, status);
583 cp = hci_sent_cmd_data(hdev, HCI_OP_EXIT_SNIFF_MODE);
589 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
591 clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend);
593 hci_dev_unlock(hdev);
596 static inline void hci_inquiry_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
598 __u8 status = *((__u8 *) skb->data);
600 BT_DBG("%s status %d", hdev->name, status);
602 clear_bit(HCI_INQUIRY, &hdev->flags);
604 hci_req_complete(hdev, status);
606 hci_conn_check_pending(hdev);
609 static inline void hci_inquiry_result_evt(struct hci_dev *hdev, struct sk_buff *skb)
611 struct inquiry_data data;
612 struct inquiry_info *info = (void *) (skb->data + 1);
613 int num_rsp = *((__u8 *) skb->data);
615 BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
622 for (; num_rsp; num_rsp--) {
623 bacpy(&data.bdaddr, &info->bdaddr);
624 data.pscan_rep_mode = info->pscan_rep_mode;
625 data.pscan_period_mode = info->pscan_period_mode;
626 data.pscan_mode = info->pscan_mode;
627 memcpy(data.dev_class, info->dev_class, 3);
628 data.clock_offset = info->clock_offset;
631 hci_inquiry_cache_update(hdev, &data);
634 hci_dev_unlock(hdev);
637 static inline void hci_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
639 struct hci_ev_conn_complete *ev = (void *) skb->data;
640 struct hci_conn *conn;
642 BT_DBG("%s", hdev->name);
646 conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
651 conn->handle = __le16_to_cpu(ev->handle);
652 conn->state = BT_CONNECTED;
654 if (test_bit(HCI_AUTH, &hdev->flags))
655 conn->link_mode |= HCI_LM_AUTH;
657 if (test_bit(HCI_ENCRYPT, &hdev->flags))
658 conn->link_mode |= HCI_LM_ENCRYPT;
660 /* Get remote features */
661 if (conn->type == ACL_LINK) {
662 struct hci_cp_read_remote_features cp;
663 cp.handle = ev->handle;
664 hci_send_cmd(hdev, HCI_OP_READ_REMOTE_FEATURES, sizeof(cp), &cp);
667 /* Set link policy */
668 if (conn->type == ACL_LINK && hdev->link_policy) {
669 struct hci_cp_write_link_policy cp;
670 cp.handle = ev->handle;
671 cp.policy = cpu_to_le16(hdev->link_policy);
672 hci_send_cmd(hdev, HCI_OP_WRITE_LINK_POLICY, sizeof(cp), &cp);
675 /* Set packet type for incoming connection */
677 struct hci_cp_change_conn_ptype cp;
678 cp.handle = ev->handle;
679 cp.pkt_type = (conn->type == ACL_LINK) ?
680 cpu_to_le16(hdev->pkt_type & ACL_PTYPE_MASK):
681 cpu_to_le16(hdev->pkt_type & SCO_PTYPE_MASK);
683 hci_send_cmd(hdev, HCI_OP_CHANGE_CONN_PTYPE, sizeof(cp), &cp);
685 /* Update disconnect timer */
690 conn->state = BT_CLOSED;
692 if (conn->type == ACL_LINK) {
693 struct hci_conn *sco = conn->link;
696 hci_add_sco(sco, conn->handle);
698 hci_proto_connect_cfm(sco, ev->status);
704 hci_proto_connect_cfm(conn, ev->status);
709 hci_dev_unlock(hdev);
711 hci_conn_check_pending(hdev);
714 static inline void hci_conn_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
716 struct hci_ev_conn_request *ev = (void *) skb->data;
717 int mask = hdev->link_mode;
719 BT_DBG("%s bdaddr %s type 0x%x", hdev->name,
720 batostr(&ev->bdaddr), ev->link_type);
722 mask |= hci_proto_connect_ind(hdev, &ev->bdaddr, ev->link_type);
724 if (mask & HCI_LM_ACCEPT) {
725 /* Connection accepted */
726 struct hci_conn *conn;
727 struct hci_cp_accept_conn_req cp;
730 conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
732 if (!(conn = hci_conn_add(hdev, ev->link_type, &ev->bdaddr))) {
733 BT_ERR("No memmory for new connection");
734 hci_dev_unlock(hdev);
738 memcpy(conn->dev_class, ev->dev_class, 3);
739 conn->state = BT_CONNECT;
740 hci_dev_unlock(hdev);
742 bacpy(&cp.bdaddr, &ev->bdaddr);
744 if (lmp_rswitch_capable(hdev) && (mask & HCI_LM_MASTER))
745 cp.role = 0x00; /* Become master */
747 cp.role = 0x01; /* Remain slave */
749 hci_send_cmd(hdev, HCI_OP_ACCEPT_CONN_REQ, sizeof(cp), &cp);
751 /* Connection rejected */
752 struct hci_cp_reject_conn_req cp;
754 bacpy(&cp.bdaddr, &ev->bdaddr);
756 hci_send_cmd(hdev, HCI_OP_REJECT_CONN_REQ, sizeof(cp), &cp);
760 static inline void hci_disconn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
762 struct hci_ev_disconn_complete *ev = (void *) skb->data;
763 struct hci_conn *conn;
765 BT_DBG("%s status %d", hdev->name, ev->status);
772 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
774 conn->state = BT_CLOSED;
775 hci_proto_disconn_ind(conn, ev->reason);
779 hci_dev_unlock(hdev);
782 static inline void hci_auth_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
784 struct hci_ev_auth_complete *ev = (void *) skb->data;
785 struct hci_conn *conn;
787 BT_DBG("%s status %d", hdev->name, ev->status);
791 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
794 conn->link_mode |= HCI_LM_AUTH;
796 clear_bit(HCI_CONN_AUTH_PEND, &conn->pend);
798 hci_auth_cfm(conn, ev->status);
800 if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend)) {
802 struct hci_cp_set_conn_encrypt cp;
803 cp.handle = cpu_to_le16(conn->handle);
805 hci_send_cmd(conn->hdev,
806 HCI_OP_SET_CONN_ENCRYPT, sizeof(cp), &cp);
808 clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend);
809 hci_encrypt_cfm(conn, ev->status, 0x00);
814 hci_dev_unlock(hdev);
817 static inline void hci_remote_name_evt(struct hci_dev *hdev, struct sk_buff *skb)
819 BT_DBG("%s", hdev->name);
821 hci_conn_check_pending(hdev);
824 static inline void hci_encrypt_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
826 struct hci_ev_encrypt_change *ev = (void *) skb->data;
827 struct hci_conn *conn;
829 BT_DBG("%s status %d", hdev->name, ev->status);
833 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
837 conn->link_mode |= HCI_LM_ENCRYPT;
839 conn->link_mode &= ~HCI_LM_ENCRYPT;
842 clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend);
844 hci_encrypt_cfm(conn, ev->status, ev->encrypt);
847 hci_dev_unlock(hdev);
850 static inline void hci_change_link_key_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
852 struct hci_ev_change_link_key_complete *ev = (void *) skb->data;
853 struct hci_conn *conn;
855 BT_DBG("%s status %d", hdev->name, ev->status);
859 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
862 conn->link_mode |= HCI_LM_SECURE;
864 clear_bit(HCI_CONN_AUTH_PEND, &conn->pend);
866 hci_key_change_cfm(conn, ev->status);
869 hci_dev_unlock(hdev);
872 static inline void hci_remote_features_evt(struct hci_dev *hdev, struct sk_buff *skb)
874 struct hci_ev_remote_features *ev = (void *) skb->data;
875 struct hci_conn *conn;
877 BT_DBG("%s status %d", hdev->name, ev->status);
884 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
886 memcpy(conn->features, ev->features, 8);
888 hci_dev_unlock(hdev);
891 static inline void hci_remote_version_evt(struct hci_dev *hdev, struct sk_buff *skb)
893 BT_DBG("%s", hdev->name);
896 static inline void hci_qos_setup_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
898 BT_DBG("%s", hdev->name);
901 static inline void hci_cmd_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
903 struct hci_ev_cmd_complete *ev = (void *) skb->data;
906 skb_pull(skb, sizeof(*ev));
908 opcode = __le16_to_cpu(ev->opcode);
911 case HCI_OP_INQUIRY_CANCEL:
912 hci_cc_inquiry_cancel(hdev, skb);
915 case HCI_OP_EXIT_PERIODIC_INQ:
916 hci_cc_exit_periodic_inq(hdev, skb);
919 case HCI_OP_REMOTE_NAME_REQ_CANCEL:
920 hci_cc_remote_name_req_cancel(hdev, skb);
923 case HCI_OP_ROLE_DISCOVERY:
924 hci_cc_role_discovery(hdev, skb);
927 case HCI_OP_WRITE_LINK_POLICY:
928 hci_cc_write_link_policy(hdev, skb);
932 hci_cc_reset(hdev, skb);
935 case HCI_OP_WRITE_LOCAL_NAME:
936 hci_cc_write_local_name(hdev, skb);
939 case HCI_OP_READ_LOCAL_NAME:
940 hci_cc_read_local_name(hdev, skb);
943 case HCI_OP_WRITE_AUTH_ENABLE:
944 hci_cc_write_auth_enable(hdev, skb);
947 case HCI_OP_WRITE_ENCRYPT_MODE:
948 hci_cc_write_encrypt_mode(hdev, skb);
951 case HCI_OP_WRITE_SCAN_ENABLE:
952 hci_cc_write_scan_enable(hdev, skb);
955 case HCI_OP_READ_CLASS_OF_DEV:
956 hci_cc_read_class_of_dev(hdev, skb);
959 case HCI_OP_WRITE_CLASS_OF_DEV:
960 hci_cc_write_class_of_dev(hdev, skb);
963 case HCI_OP_READ_VOICE_SETTING:
964 hci_cc_read_voice_setting(hdev, skb);
967 case HCI_OP_WRITE_VOICE_SETTING:
968 hci_cc_write_voice_setting(hdev, skb);
971 case HCI_OP_HOST_BUFFER_SIZE:
972 hci_cc_host_buffer_size(hdev, skb);
975 case HCI_OP_READ_LOCAL_VERSION:
976 hci_cc_read_local_version(hdev, skb);
979 case HCI_OP_READ_LOCAL_COMMANDS:
980 hci_cc_read_local_commands(hdev, skb);
983 case HCI_OP_READ_LOCAL_FEATURES:
984 hci_cc_read_local_features(hdev, skb);
987 case HCI_OP_READ_BUFFER_SIZE:
988 hci_cc_read_buffer_size(hdev, skb);
991 case HCI_OP_READ_BD_ADDR:
992 hci_cc_read_bd_addr(hdev, skb);
996 BT_DBG("%s opcode 0x%x", hdev->name, opcode);
1001 atomic_set(&hdev->cmd_cnt, 1);
1002 if (!skb_queue_empty(&hdev->cmd_q))
1003 hci_sched_cmd(hdev);
1007 static inline void hci_cmd_status_evt(struct hci_dev *hdev, struct sk_buff *skb)
1009 struct hci_ev_cmd_status *ev = (void *) skb->data;
1012 skb_pull(skb, sizeof(*ev));
1014 opcode = __le16_to_cpu(ev->opcode);
1017 case HCI_OP_INQUIRY:
1018 hci_cs_inquiry(hdev, ev->status);
1021 case HCI_OP_CREATE_CONN:
1022 hci_cs_create_conn(hdev, ev->status);
1025 case HCI_OP_ADD_SCO:
1026 hci_cs_add_sco(hdev, ev->status);
1029 case HCI_OP_REMOTE_NAME_REQ:
1030 hci_cs_remote_name_req(hdev, ev->status);
1033 case HCI_OP_SETUP_SYNC_CONN:
1034 hci_cs_setup_sync_conn(hdev, ev->status);
1037 case HCI_OP_SNIFF_MODE:
1038 hci_cs_sniff_mode(hdev, ev->status);
1041 case HCI_OP_EXIT_SNIFF_MODE:
1042 hci_cs_exit_sniff_mode(hdev, ev->status);
1046 BT_DBG("%s opcode 0x%x", hdev->name, opcode);
1051 atomic_set(&hdev->cmd_cnt, 1);
1052 if (!skb_queue_empty(&hdev->cmd_q))
1053 hci_sched_cmd(hdev);
1057 static inline void hci_role_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
1059 struct hci_ev_role_change *ev = (void *) skb->data;
1060 struct hci_conn *conn;
1062 BT_DBG("%s status %d", hdev->name, ev->status);
1066 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
1070 conn->link_mode &= ~HCI_LM_MASTER;
1072 conn->link_mode |= HCI_LM_MASTER;
1075 clear_bit(HCI_CONN_RSWITCH_PEND, &conn->pend);
1077 hci_role_switch_cfm(conn, ev->status, ev->role);
1080 hci_dev_unlock(hdev);
1083 static inline void hci_num_comp_pkts_evt(struct hci_dev *hdev, struct sk_buff *skb)
1085 struct hci_ev_num_comp_pkts *ev = (void *) skb->data;
1089 skb_pull(skb, sizeof(*ev));
1091 BT_DBG("%s num_hndl %d", hdev->name, ev->num_hndl);
1093 if (skb->len < ev->num_hndl * 4) {
1094 BT_DBG("%s bad parameters", hdev->name);
1098 tasklet_disable(&hdev->tx_task);
1100 for (i = 0, ptr = (__le16 *) skb->data; i < ev->num_hndl; i++) {
1101 struct hci_conn *conn;
1102 __u16 handle, count;
1104 handle = __le16_to_cpu(get_unaligned(ptr++));
1105 count = __le16_to_cpu(get_unaligned(ptr++));
1107 conn = hci_conn_hash_lookup_handle(hdev, handle);
1109 conn->sent -= count;
1111 if (conn->type == ACL_LINK) {
1112 if ((hdev->acl_cnt += count) > hdev->acl_pkts)
1113 hdev->acl_cnt = hdev->acl_pkts;
1115 if ((hdev->sco_cnt += count) > hdev->sco_pkts)
1116 hdev->sco_cnt = hdev->sco_pkts;
1123 tasklet_enable(&hdev->tx_task);
1126 static inline void hci_mode_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
1128 struct hci_ev_mode_change *ev = (void *) skb->data;
1129 struct hci_conn *conn;
1131 BT_DBG("%s status %d", hdev->name, ev->status);
1135 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1137 conn->mode = ev->mode;
1138 conn->interval = __le16_to_cpu(ev->interval);
1140 if (!test_and_clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend)) {
1141 if (conn->mode == HCI_CM_ACTIVE)
1142 conn->power_save = 1;
1144 conn->power_save = 0;
1148 hci_dev_unlock(hdev);
1151 static inline void hci_pin_code_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
1153 BT_DBG("%s", hdev->name);
1156 static inline void hci_link_key_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
1158 BT_DBG("%s", hdev->name);
1161 static inline void hci_link_key_notify_evt(struct hci_dev *hdev, struct sk_buff *skb)
1163 BT_DBG("%s", hdev->name);
1166 static inline void hci_clock_offset_evt(struct hci_dev *hdev, struct sk_buff *skb)
1168 struct hci_ev_clock_offset *ev = (void *) skb->data;
1169 struct hci_conn *conn;
1171 BT_DBG("%s status %d", hdev->name, ev->status);
1175 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1176 if (conn && !ev->status) {
1177 struct inquiry_entry *ie;
1179 if ((ie = hci_inquiry_cache_lookup(hdev, &conn->dst))) {
1180 ie->data.clock_offset = ev->clock_offset;
1181 ie->timestamp = jiffies;
1185 hci_dev_unlock(hdev);
1188 static inline void hci_pscan_rep_mode_evt(struct hci_dev *hdev, struct sk_buff *skb)
1190 struct hci_ev_pscan_rep_mode *ev = (void *) skb->data;
1191 struct inquiry_entry *ie;
1193 BT_DBG("%s", hdev->name);
1197 if ((ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr))) {
1198 ie->data.pscan_rep_mode = ev->pscan_rep_mode;
1199 ie->timestamp = jiffies;
1202 hci_dev_unlock(hdev);
1205 static inline void hci_inquiry_result_with_rssi_evt(struct hci_dev *hdev, struct sk_buff *skb)
1207 struct inquiry_data data;
1208 int num_rsp = *((__u8 *) skb->data);
1210 BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
1217 if ((skb->len - 1) / num_rsp != sizeof(struct inquiry_info_with_rssi)) {
1218 struct inquiry_info_with_rssi_and_pscan_mode *info = (void *) (skb->data + 1);
1220 for (; num_rsp; num_rsp--) {
1221 bacpy(&data.bdaddr, &info->bdaddr);
1222 data.pscan_rep_mode = info->pscan_rep_mode;
1223 data.pscan_period_mode = info->pscan_period_mode;
1224 data.pscan_mode = info->pscan_mode;
1225 memcpy(data.dev_class, info->dev_class, 3);
1226 data.clock_offset = info->clock_offset;
1227 data.rssi = info->rssi;
1229 hci_inquiry_cache_update(hdev, &data);
1232 struct inquiry_info_with_rssi *info = (void *) (skb->data + 1);
1234 for (; num_rsp; num_rsp--) {
1235 bacpy(&data.bdaddr, &info->bdaddr);
1236 data.pscan_rep_mode = info->pscan_rep_mode;
1237 data.pscan_period_mode = info->pscan_period_mode;
1238 data.pscan_mode = 0x00;
1239 memcpy(data.dev_class, info->dev_class, 3);
1240 data.clock_offset = info->clock_offset;
1241 data.rssi = info->rssi;
1243 hci_inquiry_cache_update(hdev, &data);
1247 hci_dev_unlock(hdev);
1250 static inline void hci_remote_ext_features_evt(struct hci_dev *hdev, struct sk_buff *skb)
1252 BT_DBG("%s", hdev->name);
1255 static inline void hci_sync_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1257 BT_DBG("%s", hdev->name);
1260 static inline void hci_sync_conn_changed_evt(struct hci_dev *hdev, struct sk_buff *skb)
1262 BT_DBG("%s", hdev->name);
1265 static inline void hci_sniff_subrate_evt(struct hci_dev *hdev, struct sk_buff *skb)
1267 struct hci_ev_sniff_subrate *ev = (void *) skb->data;
1268 struct hci_conn *conn;
1270 BT_DBG("%s status %d", hdev->name, ev->status);
1274 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1278 hci_dev_unlock(hdev);
1281 static inline void hci_extended_inquiry_result_evt(struct hci_dev *hdev, struct sk_buff *skb)
1283 struct inquiry_data data;
1284 struct extended_inquiry_info *info = (void *) (skb->data + 1);
1285 int num_rsp = *((__u8 *) skb->data);
1287 BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
1294 for (; num_rsp; num_rsp--) {
1295 bacpy(&data.bdaddr, &info->bdaddr);
1296 data.pscan_rep_mode = info->pscan_rep_mode;
1297 data.pscan_period_mode = info->pscan_period_mode;
1298 data.pscan_mode = 0x00;
1299 memcpy(data.dev_class, info->dev_class, 3);
1300 data.clock_offset = info->clock_offset;
1301 data.rssi = info->rssi;
1303 hci_inquiry_cache_update(hdev, &data);
1306 hci_dev_unlock(hdev);
1309 void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb)
1311 struct hci_event_hdr *hdr = (void *) skb->data;
1312 __u8 event = hdr->evt;
1314 skb_pull(skb, HCI_EVENT_HDR_SIZE);
1317 case HCI_EV_INQUIRY_COMPLETE:
1318 hci_inquiry_complete_evt(hdev, skb);
1321 case HCI_EV_INQUIRY_RESULT:
1322 hci_inquiry_result_evt(hdev, skb);
1325 case HCI_EV_CONN_COMPLETE:
1326 hci_conn_complete_evt(hdev, skb);
1329 case HCI_EV_CONN_REQUEST:
1330 hci_conn_request_evt(hdev, skb);
1333 case HCI_EV_DISCONN_COMPLETE:
1334 hci_disconn_complete_evt(hdev, skb);
1337 case HCI_EV_AUTH_COMPLETE:
1338 hci_auth_complete_evt(hdev, skb);
1341 case HCI_EV_REMOTE_NAME:
1342 hci_remote_name_evt(hdev, skb);
1345 case HCI_EV_ENCRYPT_CHANGE:
1346 hci_encrypt_change_evt(hdev, skb);
1349 case HCI_EV_CHANGE_LINK_KEY_COMPLETE:
1350 hci_change_link_key_complete_evt(hdev, skb);
1353 case HCI_EV_REMOTE_FEATURES:
1354 hci_remote_features_evt(hdev, skb);
1357 case HCI_EV_REMOTE_VERSION:
1358 hci_remote_version_evt(hdev, skb);
1361 case HCI_EV_QOS_SETUP_COMPLETE:
1362 hci_qos_setup_complete_evt(hdev, skb);
1365 case HCI_EV_CMD_COMPLETE:
1366 hci_cmd_complete_evt(hdev, skb);
1369 case HCI_EV_CMD_STATUS:
1370 hci_cmd_status_evt(hdev, skb);
1373 case HCI_EV_ROLE_CHANGE:
1374 hci_role_change_evt(hdev, skb);
1377 case HCI_EV_NUM_COMP_PKTS:
1378 hci_num_comp_pkts_evt(hdev, skb);
1381 case HCI_EV_MODE_CHANGE:
1382 hci_mode_change_evt(hdev, skb);
1385 case HCI_EV_PIN_CODE_REQ:
1386 hci_pin_code_request_evt(hdev, skb);
1389 case HCI_EV_LINK_KEY_REQ:
1390 hci_link_key_request_evt(hdev, skb);
1393 case HCI_EV_LINK_KEY_NOTIFY:
1394 hci_link_key_notify_evt(hdev, skb);
1397 case HCI_EV_CLOCK_OFFSET:
1398 hci_clock_offset_evt(hdev, skb);
1401 case HCI_EV_PSCAN_REP_MODE:
1402 hci_pscan_rep_mode_evt(hdev, skb);
1405 case HCI_EV_INQUIRY_RESULT_WITH_RSSI:
1406 hci_inquiry_result_with_rssi_evt(hdev, skb);
1409 case HCI_EV_REMOTE_EXT_FEATURES:
1410 hci_remote_ext_features_evt(hdev, skb);
1413 case HCI_EV_SYNC_CONN_COMPLETE:
1414 hci_sync_conn_complete_evt(hdev, skb);
1417 case HCI_EV_SYNC_CONN_CHANGED:
1418 hci_sync_conn_changed_evt(hdev, skb);
1421 case HCI_EV_SNIFF_SUBRATE:
1422 hci_sniff_subrate_evt(hdev, skb);
1425 case HCI_EV_EXTENDED_INQUIRY_RESULT:
1426 hci_extended_inquiry_result_evt(hdev, skb);
1430 BT_DBG("%s event 0x%x", hdev->name, event);
1435 hdev->stat.evt_rx++;
1438 /* Generate internal stack event */
1439 void hci_si_event(struct hci_dev *hdev, int type, int dlen, void *data)
1441 struct hci_event_hdr *hdr;
1442 struct hci_ev_stack_internal *ev;
1443 struct sk_buff *skb;
1445 skb = bt_skb_alloc(HCI_EVENT_HDR_SIZE + sizeof(*ev) + dlen, GFP_ATOMIC);
1449 hdr = (void *) skb_put(skb, HCI_EVENT_HDR_SIZE);
1450 hdr->evt = HCI_EV_STACK_INTERNAL;
1451 hdr->plen = sizeof(*ev) + dlen;
1453 ev = (void *) skb_put(skb, sizeof(*ev) + dlen);
1455 memcpy(ev->data, data, dlen);
1457 bt_cb(skb)->incoming = 1;
1458 __net_timestamp(skb);
1460 bt_cb(skb)->pkt_type = HCI_EVENT_PKT;
1461 skb->dev = (void *) hdev;
1462 hci_send_to_sock(hdev, skb);