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/sched.h>
33 #include <linux/slab.h>
34 #include <linux/poll.h>
35 #include <linux/fcntl.h>
36 #include <linux/init.h>
37 #include <linux/skbuff.h>
38 #include <linux/interrupt.h>
39 #include <linux/notifier.h>
42 #include <asm/system.h>
43 #include <asm/uaccess.h>
44 #include <asm/unaligned.h>
46 #include <net/bluetooth/bluetooth.h>
47 #include <net/bluetooth/hci_core.h>
49 #ifndef CONFIG_BT_HCI_CORE_DEBUG
54 /* Handle HCI Event packets */
56 /* Command Complete OGF LINK_CTL */
57 static void hci_cc_link_ctl(struct hci_dev *hdev, __u16 ocf, struct sk_buff *skb)
61 BT_DBG("%s ocf 0x%x", hdev->name, ocf);
64 case OCF_INQUIRY_CANCEL:
65 case OCF_EXIT_PERIODIC_INQ:
66 status = *((__u8 *) skb->data);
69 BT_DBG("%s Inquiry cancel error: status 0x%x", hdev->name, status);
71 clear_bit(HCI_INQUIRY, &hdev->flags);
72 hci_req_complete(hdev, status);
77 BT_DBG("%s Command complete: ogf LINK_CTL ocf %x", hdev->name, ocf);
82 /* Command Complete OGF LINK_POLICY */
83 static void hci_cc_link_policy(struct hci_dev *hdev, __u16 ocf, struct sk_buff *skb)
85 struct hci_conn *conn;
86 struct hci_rp_role_discovery *rd;
87 struct hci_rp_write_link_policy *lp;
90 BT_DBG("%s ocf 0x%x", hdev->name, ocf);
93 case OCF_ROLE_DISCOVERY:
94 rd = (void *) skb->data;
101 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rd->handle));
104 conn->link_mode &= ~HCI_LM_MASTER;
106 conn->link_mode |= HCI_LM_MASTER;
109 hci_dev_unlock(hdev);
112 case OCF_WRITE_LINK_POLICY:
113 sent = hci_sent_cmd_data(hdev, OGF_LINK_POLICY, OCF_WRITE_LINK_POLICY);
117 lp = (struct hci_rp_write_link_policy *) skb->data;
124 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(lp->handle));
126 __le16 policy = get_unaligned((__le16 *) (sent + 2));
127 conn->link_policy = __le16_to_cpu(policy);
130 hci_dev_unlock(hdev);
134 BT_DBG("%s: Command complete: ogf LINK_POLICY ocf %x",
140 /* Command Complete OGF HOST_CTL */
141 static void hci_cc_host_ctl(struct hci_dev *hdev, __u16 ocf, struct sk_buff *skb)
145 struct hci_rp_read_voice_setting *vs;
148 BT_DBG("%s ocf 0x%x", hdev->name, ocf);
152 status = *((__u8 *) skb->data);
153 hci_req_complete(hdev, status);
156 case OCF_SET_EVENT_FLT:
157 status = *((__u8 *) skb->data);
159 BT_DBG("%s SET_EVENT_FLT failed %d", hdev->name, status);
161 BT_DBG("%s SET_EVENT_FLT succeseful", hdev->name);
165 case OCF_WRITE_AUTH_ENABLE:
166 sent = hci_sent_cmd_data(hdev, OGF_HOST_CTL, OCF_WRITE_AUTH_ENABLE);
170 status = *((__u8 *) skb->data);
171 param = *((__u8 *) sent);
174 if (param == AUTH_ENABLED)
175 set_bit(HCI_AUTH, &hdev->flags);
177 clear_bit(HCI_AUTH, &hdev->flags);
179 hci_req_complete(hdev, status);
182 case OCF_WRITE_ENCRYPT_MODE:
183 sent = hci_sent_cmd_data(hdev, OGF_HOST_CTL, OCF_WRITE_ENCRYPT_MODE);
187 status = *((__u8 *) skb->data);
188 param = *((__u8 *) sent);
192 set_bit(HCI_ENCRYPT, &hdev->flags);
194 clear_bit(HCI_ENCRYPT, &hdev->flags);
196 hci_req_complete(hdev, status);
199 case OCF_WRITE_CA_TIMEOUT:
200 status = *((__u8 *) skb->data);
202 BT_DBG("%s OCF_WRITE_CA_TIMEOUT failed %d", hdev->name, status);
204 BT_DBG("%s OCF_WRITE_CA_TIMEOUT succeseful", hdev->name);
208 case OCF_WRITE_PG_TIMEOUT:
209 status = *((__u8 *) skb->data);
211 BT_DBG("%s OCF_WRITE_PG_TIMEOUT failed %d", hdev->name, status);
213 BT_DBG("%s: OCF_WRITE_PG_TIMEOUT succeseful", hdev->name);
217 case OCF_WRITE_SCAN_ENABLE:
218 sent = hci_sent_cmd_data(hdev, OGF_HOST_CTL, OCF_WRITE_SCAN_ENABLE);
222 status = *((__u8 *) skb->data);
223 param = *((__u8 *) sent);
225 BT_DBG("param 0x%x", param);
228 clear_bit(HCI_PSCAN, &hdev->flags);
229 clear_bit(HCI_ISCAN, &hdev->flags);
230 if (param & SCAN_INQUIRY)
231 set_bit(HCI_ISCAN, &hdev->flags);
233 if (param & SCAN_PAGE)
234 set_bit(HCI_PSCAN, &hdev->flags);
236 hci_req_complete(hdev, status);
239 case OCF_READ_VOICE_SETTING:
240 vs = (struct hci_rp_read_voice_setting *) skb->data;
243 BT_DBG("%s READ_VOICE_SETTING failed %d", hdev->name, vs->status);
247 setting = __le16_to_cpu(vs->voice_setting);
249 if (hdev->voice_setting != setting ) {
250 hdev->voice_setting = setting;
252 BT_DBG("%s: voice setting 0x%04x", hdev->name, setting);
255 tasklet_disable(&hdev->tx_task);
256 hdev->notify(hdev, HCI_NOTIFY_VOICE_SETTING);
257 tasklet_enable(&hdev->tx_task);
262 case OCF_WRITE_VOICE_SETTING:
263 sent = hci_sent_cmd_data(hdev, OGF_HOST_CTL, OCF_WRITE_VOICE_SETTING);
267 status = *((__u8 *) skb->data);
268 setting = __le16_to_cpu(get_unaligned((__le16 *) sent));
270 if (!status && hdev->voice_setting != setting) {
271 hdev->voice_setting = setting;
273 BT_DBG("%s: voice setting 0x%04x", hdev->name, setting);
276 tasklet_disable(&hdev->tx_task);
277 hdev->notify(hdev, HCI_NOTIFY_VOICE_SETTING);
278 tasklet_enable(&hdev->tx_task);
281 hci_req_complete(hdev, status);
284 case OCF_HOST_BUFFER_SIZE:
285 status = *((__u8 *) skb->data);
287 BT_DBG("%s OCF_BUFFER_SIZE failed %d", hdev->name, status);
288 hci_req_complete(hdev, status);
293 BT_DBG("%s Command complete: ogf HOST_CTL ocf %x", hdev->name, ocf);
298 /* Command Complete OGF INFO_PARAM */
299 static void hci_cc_info_param(struct hci_dev *hdev, __u16 ocf, struct sk_buff *skb)
301 struct hci_rp_read_loc_version *lv;
302 struct hci_rp_read_local_features *lf;
303 struct hci_rp_read_buffer_size *bs;
304 struct hci_rp_read_bd_addr *ba;
306 BT_DBG("%s ocf 0x%x", hdev->name, ocf);
309 case OCF_READ_LOCAL_VERSION:
310 lv = (struct hci_rp_read_loc_version *) skb->data;
313 BT_DBG("%s READ_LOCAL_VERSION failed %d", hdev->name, lf->status);
317 hdev->hci_ver = lv->hci_ver;
318 hdev->hci_rev = btohs(lv->hci_rev);
319 hdev->manufacturer = btohs(lv->manufacturer);
321 BT_DBG("%s: manufacturer %d hci_ver %d hci_rev %d", hdev->name,
322 hdev->manufacturer, hdev->hci_ver, hdev->hci_rev);
326 case OCF_READ_LOCAL_FEATURES:
327 lf = (struct hci_rp_read_local_features *) skb->data;
330 BT_DBG("%s READ_LOCAL_FEATURES failed %d", hdev->name, lf->status);
334 memcpy(hdev->features, lf->features, sizeof(hdev->features));
336 /* Adjust default settings according to features
337 * supported by device. */
338 if (hdev->features[0] & LMP_3SLOT)
339 hdev->pkt_type |= (HCI_DM3 | HCI_DH3);
341 if (hdev->features[0] & LMP_5SLOT)
342 hdev->pkt_type |= (HCI_DM5 | HCI_DH5);
344 if (hdev->features[1] & LMP_HV2)
345 hdev->pkt_type |= (HCI_HV2);
347 if (hdev->features[1] & LMP_HV3)
348 hdev->pkt_type |= (HCI_HV3);
350 BT_DBG("%s: features 0x%x 0x%x 0x%x", hdev->name,
351 lf->features[0], lf->features[1], lf->features[2]);
355 case OCF_READ_BUFFER_SIZE:
356 bs = (struct hci_rp_read_buffer_size *) skb->data;
359 BT_DBG("%s READ_BUFFER_SIZE failed %d", hdev->name, bs->status);
360 hci_req_complete(hdev, bs->status);
364 hdev->acl_mtu = __le16_to_cpu(bs->acl_mtu);
365 hdev->sco_mtu = bs->sco_mtu;
366 hdev->acl_pkts = __le16_to_cpu(bs->acl_max_pkt);
367 hdev->sco_pkts = __le16_to_cpu(bs->sco_max_pkt);
369 if (test_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE, &hdev->quirks)) {
374 hdev->acl_cnt = hdev->acl_pkts;
375 hdev->sco_cnt = hdev->sco_pkts;
377 BT_DBG("%s mtu: acl %d, sco %d max_pkt: acl %d, sco %d", hdev->name,
378 hdev->acl_mtu, hdev->sco_mtu, hdev->acl_pkts, hdev->sco_pkts);
381 case OCF_READ_BD_ADDR:
382 ba = (struct hci_rp_read_bd_addr *) skb->data;
385 bacpy(&hdev->bdaddr, &ba->bdaddr);
387 BT_DBG("%s: READ_BD_ADDR failed %d", hdev->name, ba->status);
390 hci_req_complete(hdev, ba->status);
394 BT_DBG("%s Command complete: ogf INFO_PARAM ocf %x", hdev->name, ocf);
399 /* Command Status OGF LINK_CTL */
400 static inline void hci_cs_create_conn(struct hci_dev *hdev, __u8 status)
402 struct hci_conn *conn;
403 struct hci_cp_create_conn *cp = hci_sent_cmd_data(hdev, OGF_LINK_CTL, OCF_CREATE_CONN);
410 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
412 BT_DBG("%s status 0x%x bdaddr %s conn %p", hdev->name,
413 status, batostr(&cp->bdaddr), conn);
416 if (conn && conn->state == BT_CONNECT) {
417 conn->state = BT_CLOSED;
418 hci_proto_connect_cfm(conn, status);
423 conn = hci_conn_add(hdev, ACL_LINK, &cp->bdaddr);
426 conn->link_mode |= HCI_LM_MASTER;
428 BT_ERR("No memmory for new connection");
432 hci_dev_unlock(hdev);
435 static void hci_cs_link_ctl(struct hci_dev *hdev, __u16 ocf, __u8 status)
437 BT_DBG("%s ocf 0x%x", hdev->name, ocf);
440 case OCF_CREATE_CONN:
441 hci_cs_create_conn(hdev, status);
446 struct hci_conn *acl, *sco;
447 struct hci_cp_add_sco *cp = hci_sent_cmd_data(hdev, OGF_LINK_CTL, OCF_ADD_SCO);
453 handle = __le16_to_cpu(cp->handle);
455 BT_DBG("%s Add SCO error: handle %d status 0x%x", hdev->name, handle, status);
459 acl = hci_conn_hash_lookup_handle(hdev, handle);
460 if (acl && (sco = acl->link)) {
461 sco->state = BT_CLOSED;
463 hci_proto_connect_cfm(sco, status);
467 hci_dev_unlock(hdev);
473 BT_DBG("%s Inquiry error: status 0x%x", hdev->name, status);
474 hci_req_complete(hdev, status);
476 set_bit(HCI_INQUIRY, &hdev->flags);
481 BT_DBG("%s Command status: ogf LINK_CTL ocf %x status %d",
482 hdev->name, ocf, status);
487 /* Command Status OGF LINK_POLICY */
488 static void hci_cs_link_policy(struct hci_dev *hdev, __u16 ocf, __u8 status)
490 BT_DBG("%s ocf 0x%x", hdev->name, ocf);
495 struct hci_conn *conn;
496 struct hci_cp_sniff_mode *cp = hci_sent_cmd_data(hdev, OGF_LINK_POLICY, OCF_SNIFF_MODE);
503 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
505 clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend);
508 hci_dev_unlock(hdev);
512 case OCF_EXIT_SNIFF_MODE:
514 struct hci_conn *conn;
515 struct hci_cp_exit_sniff_mode *cp = hci_sent_cmd_data(hdev, OGF_LINK_POLICY, OCF_EXIT_SNIFF_MODE);
522 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
524 clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend);
527 hci_dev_unlock(hdev);
532 BT_DBG("%s Command status: ogf LINK_POLICY ocf %x", hdev->name, ocf);
537 /* Command Status OGF HOST_CTL */
538 static void hci_cs_host_ctl(struct hci_dev *hdev, __u16 ocf, __u8 status)
540 BT_DBG("%s ocf 0x%x", hdev->name, ocf);
544 BT_DBG("%s Command status: ogf HOST_CTL ocf %x", hdev->name, ocf);
549 /* Command Status OGF INFO_PARAM */
550 static void hci_cs_info_param(struct hci_dev *hdev, __u16 ocf, __u8 status)
552 BT_DBG("%s: hci_cs_info_param: ocf 0x%x", hdev->name, ocf);
556 BT_DBG("%s Command status: ogf INFO_PARAM ocf %x", hdev->name, ocf);
561 /* Inquiry Complete */
562 static inline void hci_inquiry_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
564 __u8 status = *((__u8 *) skb->data);
566 BT_DBG("%s status %d", hdev->name, status);
568 clear_bit(HCI_INQUIRY, &hdev->flags);
569 hci_req_complete(hdev, status);
573 static inline void hci_inquiry_result_evt(struct hci_dev *hdev, struct sk_buff *skb)
575 struct inquiry_data data;
576 struct inquiry_info *info = (struct inquiry_info *) (skb->data + 1);
577 int num_rsp = *((__u8 *) skb->data);
579 BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
586 for (; num_rsp; num_rsp--) {
587 bacpy(&data.bdaddr, &info->bdaddr);
588 data.pscan_rep_mode = info->pscan_rep_mode;
589 data.pscan_period_mode = info->pscan_period_mode;
590 data.pscan_mode = info->pscan_mode;
591 memcpy(data.dev_class, info->dev_class, 3);
592 data.clock_offset = info->clock_offset;
595 hci_inquiry_cache_update(hdev, &data);
598 hci_dev_unlock(hdev);
601 /* Inquiry Result With RSSI */
602 static inline void hci_inquiry_result_with_rssi_evt(struct hci_dev *hdev, struct sk_buff *skb)
604 struct inquiry_data data;
605 int num_rsp = *((__u8 *) skb->data);
607 BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
614 if ((skb->len - 1) / num_rsp != sizeof(struct inquiry_info_with_rssi)) {
615 struct inquiry_info_with_rssi_and_pscan_mode *info =
616 (struct inquiry_info_with_rssi_and_pscan_mode *) (skb->data + 1);
618 for (; num_rsp; num_rsp--) {
619 bacpy(&data.bdaddr, &info->bdaddr);
620 data.pscan_rep_mode = info->pscan_rep_mode;
621 data.pscan_period_mode = info->pscan_period_mode;
622 data.pscan_mode = info->pscan_mode;
623 memcpy(data.dev_class, info->dev_class, 3);
624 data.clock_offset = info->clock_offset;
625 data.rssi = info->rssi;
627 hci_inquiry_cache_update(hdev, &data);
630 struct inquiry_info_with_rssi *info =
631 (struct inquiry_info_with_rssi *) (skb->data + 1);
633 for (; num_rsp; num_rsp--) {
634 bacpy(&data.bdaddr, &info->bdaddr);
635 data.pscan_rep_mode = info->pscan_rep_mode;
636 data.pscan_period_mode = info->pscan_period_mode;
637 data.pscan_mode = 0x00;
638 memcpy(data.dev_class, info->dev_class, 3);
639 data.clock_offset = info->clock_offset;
640 data.rssi = info->rssi;
642 hci_inquiry_cache_update(hdev, &data);
646 hci_dev_unlock(hdev);
649 /* Extended Inquiry Result */
650 static inline void hci_extended_inquiry_result_evt(struct hci_dev *hdev, struct sk_buff *skb)
652 struct inquiry_data data;
653 struct extended_inquiry_info *info = (struct extended_inquiry_info *) (skb->data + 1);
654 int num_rsp = *((__u8 *) skb->data);
656 BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
663 for (; num_rsp; num_rsp--) {
664 bacpy(&data.bdaddr, &info->bdaddr);
665 data.pscan_rep_mode = info->pscan_rep_mode;
666 data.pscan_period_mode = info->pscan_period_mode;
667 data.pscan_mode = 0x00;
668 memcpy(data.dev_class, info->dev_class, 3);
669 data.clock_offset = info->clock_offset;
670 data.rssi = info->rssi;
672 hci_inquiry_cache_update(hdev, &data);
675 hci_dev_unlock(hdev);
678 /* Connect Request */
679 static inline void hci_conn_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
681 struct hci_ev_conn_request *ev = (struct hci_ev_conn_request *) skb->data;
682 int mask = hdev->link_mode;
684 BT_DBG("%s Connection request: %s type 0x%x", hdev->name,
685 batostr(&ev->bdaddr), ev->link_type);
687 mask |= hci_proto_connect_ind(hdev, &ev->bdaddr, ev->link_type);
689 if (mask & HCI_LM_ACCEPT) {
690 /* Connection accepted */
691 struct hci_conn *conn;
692 struct hci_cp_accept_conn_req cp;
695 conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
697 if (!(conn = hci_conn_add(hdev, ev->link_type, &ev->bdaddr))) {
698 BT_ERR("No memmory for new connection");
699 hci_dev_unlock(hdev);
703 memcpy(conn->dev_class, ev->dev_class, 3);
704 conn->state = BT_CONNECT;
705 hci_dev_unlock(hdev);
707 bacpy(&cp.bdaddr, &ev->bdaddr);
709 if (lmp_rswitch_capable(hdev) && (mask & HCI_LM_MASTER))
710 cp.role = 0x00; /* Become master */
712 cp.role = 0x01; /* Remain slave */
714 hci_send_cmd(hdev, OGF_LINK_CTL,
715 OCF_ACCEPT_CONN_REQ, sizeof(cp), &cp);
717 /* Connection rejected */
718 struct hci_cp_reject_conn_req cp;
720 bacpy(&cp.bdaddr, &ev->bdaddr);
722 hci_send_cmd(hdev, OGF_LINK_CTL,
723 OCF_REJECT_CONN_REQ, sizeof(cp), &cp);
727 /* Connect Complete */
728 static inline void hci_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
730 struct hci_ev_conn_complete *ev = (struct hci_ev_conn_complete *) skb->data;
731 struct hci_conn *conn;
733 BT_DBG("%s", hdev->name);
737 conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
739 hci_dev_unlock(hdev);
744 conn->handle = __le16_to_cpu(ev->handle);
745 conn->state = BT_CONNECTED;
747 if (test_bit(HCI_AUTH, &hdev->flags))
748 conn->link_mode |= HCI_LM_AUTH;
750 if (test_bit(HCI_ENCRYPT, &hdev->flags))
751 conn->link_mode |= HCI_LM_ENCRYPT;
753 /* Get remote features */
754 if (conn->type == ACL_LINK) {
755 struct hci_cp_read_remote_features cp;
756 cp.handle = ev->handle;
757 hci_send_cmd(hdev, OGF_LINK_CTL,
758 OCF_READ_REMOTE_FEATURES, sizeof(cp), &cp);
761 /* Set link policy */
762 if (conn->type == ACL_LINK && hdev->link_policy) {
763 struct hci_cp_write_link_policy cp;
764 cp.handle = ev->handle;
765 cp.policy = __cpu_to_le16(hdev->link_policy);
766 hci_send_cmd(hdev, OGF_LINK_POLICY,
767 OCF_WRITE_LINK_POLICY, sizeof(cp), &cp);
770 /* Set packet type for incoming connection */
772 struct hci_cp_change_conn_ptype cp;
773 cp.handle = ev->handle;
774 cp.pkt_type = (conn->type == ACL_LINK) ?
775 __cpu_to_le16(hdev->pkt_type & ACL_PTYPE_MASK):
776 __cpu_to_le16(hdev->pkt_type & SCO_PTYPE_MASK);
778 hci_send_cmd(hdev, OGF_LINK_CTL,
779 OCF_CHANGE_CONN_PTYPE, sizeof(cp), &cp);
782 conn->state = BT_CLOSED;
784 if (conn->type == ACL_LINK) {
785 struct hci_conn *sco = conn->link;
788 hci_add_sco(sco, conn->handle);
790 hci_proto_connect_cfm(sco, ev->status);
796 hci_proto_connect_cfm(conn, ev->status);
800 hci_dev_unlock(hdev);
803 /* Disconnect Complete */
804 static inline void hci_disconn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
806 struct hci_ev_disconn_complete *ev = (struct hci_ev_disconn_complete *) skb->data;
807 struct hci_conn *conn;
809 BT_DBG("%s status %d", hdev->name, ev->status);
816 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
818 conn->state = BT_CLOSED;
819 hci_proto_disconn_ind(conn, ev->reason);
823 hci_dev_unlock(hdev);
826 /* Number of completed packets */
827 static inline void hci_num_comp_pkts_evt(struct hci_dev *hdev, struct sk_buff *skb)
829 struct hci_ev_num_comp_pkts *ev = (struct hci_ev_num_comp_pkts *) skb->data;
833 skb_pull(skb, sizeof(*ev));
835 BT_DBG("%s num_hndl %d", hdev->name, ev->num_hndl);
837 if (skb->len < ev->num_hndl * 4) {
838 BT_DBG("%s bad parameters", hdev->name);
842 tasklet_disable(&hdev->tx_task);
844 for (i = 0, ptr = (__le16 *) skb->data; i < ev->num_hndl; i++) {
845 struct hci_conn *conn;
848 handle = __le16_to_cpu(get_unaligned(ptr++));
849 count = __le16_to_cpu(get_unaligned(ptr++));
851 conn = hci_conn_hash_lookup_handle(hdev, handle);
855 if (conn->type == SCO_LINK) {
856 if ((hdev->sco_cnt += count) > hdev->sco_pkts)
857 hdev->sco_cnt = hdev->sco_pkts;
859 if ((hdev->acl_cnt += count) > hdev->acl_pkts)
860 hdev->acl_cnt = hdev->acl_pkts;
866 tasklet_enable(&hdev->tx_task);
870 static inline void hci_role_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
872 struct hci_ev_role_change *ev = (struct hci_ev_role_change *) skb->data;
873 struct hci_conn *conn;
875 BT_DBG("%s status %d", hdev->name, ev->status);
879 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
883 conn->link_mode &= ~HCI_LM_MASTER;
885 conn->link_mode |= HCI_LM_MASTER;
888 clear_bit(HCI_CONN_RSWITCH_PEND, &conn->pend);
890 hci_role_switch_cfm(conn, ev->status, ev->role);
893 hci_dev_unlock(hdev);
897 static inline void hci_mode_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
899 struct hci_ev_mode_change *ev = (struct hci_ev_mode_change *) skb->data;
900 struct hci_conn *conn;
902 BT_DBG("%s status %d", hdev->name, ev->status);
906 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
908 conn->mode = ev->mode;
909 conn->interval = __le16_to_cpu(ev->interval);
911 if (!test_and_clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend)) {
912 if (conn->mode == HCI_CM_ACTIVE)
913 conn->power_save = 1;
915 conn->power_save = 0;
919 hci_dev_unlock(hdev);
922 /* Authentication Complete */
923 static inline void hci_auth_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
925 struct hci_ev_auth_complete *ev = (struct hci_ev_auth_complete *) skb->data;
926 struct hci_conn *conn;
928 BT_DBG("%s status %d", hdev->name, ev->status);
932 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
935 conn->link_mode |= HCI_LM_AUTH;
937 clear_bit(HCI_CONN_AUTH_PEND, &conn->pend);
939 hci_auth_cfm(conn, ev->status);
941 if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend)) {
943 struct hci_cp_set_conn_encrypt cp;
944 cp.handle = __cpu_to_le16(conn->handle);
946 hci_send_cmd(conn->hdev, OGF_LINK_CTL,
947 OCF_SET_CONN_ENCRYPT, sizeof(cp), &cp);
949 clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend);
950 hci_encrypt_cfm(conn, ev->status, 0x00);
955 hci_dev_unlock(hdev);
958 /* Encryption Change */
959 static inline void hci_encrypt_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
961 struct hci_ev_encrypt_change *ev = (struct hci_ev_encrypt_change *) skb->data;
962 struct hci_conn *conn;
964 BT_DBG("%s status %d", hdev->name, ev->status);
968 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
972 conn->link_mode |= HCI_LM_ENCRYPT;
974 conn->link_mode &= ~HCI_LM_ENCRYPT;
977 clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend);
979 hci_encrypt_cfm(conn, ev->status, ev->encrypt);
982 hci_dev_unlock(hdev);
985 /* Change Connection Link Key Complete */
986 static inline void hci_change_conn_link_key_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
988 struct hci_ev_change_conn_link_key_complete *ev = (struct hci_ev_change_conn_link_key_complete *) skb->data;
989 struct hci_conn *conn;
991 BT_DBG("%s status %d", hdev->name, ev->status);
995 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
998 conn->link_mode |= HCI_LM_SECURE;
1000 clear_bit(HCI_CONN_AUTH_PEND, &conn->pend);
1002 hci_key_change_cfm(conn, ev->status);
1005 hci_dev_unlock(hdev);
1008 /* Pin Code Request*/
1009 static inline void hci_pin_code_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
1013 /* Link Key Request */
1014 static inline void hci_link_key_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
1018 /* Link Key Notification */
1019 static inline void hci_link_key_notify_evt(struct hci_dev *hdev, struct sk_buff *skb)
1023 /* Remote Features */
1024 static inline void hci_remote_features_evt(struct hci_dev *hdev, struct sk_buff *skb)
1026 struct hci_ev_remote_features *ev = (struct hci_ev_remote_features *) skb->data;
1027 struct hci_conn *conn;
1029 BT_DBG("%s status %d", hdev->name, ev->status);
1033 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1034 if (conn && !ev->status) {
1035 memcpy(conn->features, ev->features, sizeof(conn->features));
1038 hci_dev_unlock(hdev);
1042 static inline void hci_clock_offset_evt(struct hci_dev *hdev, struct sk_buff *skb)
1044 struct hci_ev_clock_offset *ev = (struct hci_ev_clock_offset *) skb->data;
1045 struct hci_conn *conn;
1047 BT_DBG("%s status %d", hdev->name, ev->status);
1051 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1052 if (conn && !ev->status) {
1053 struct inquiry_entry *ie;
1055 if ((ie = hci_inquiry_cache_lookup(hdev, &conn->dst))) {
1056 ie->data.clock_offset = ev->clock_offset;
1057 ie->timestamp = jiffies;
1061 hci_dev_unlock(hdev);
1064 /* Page Scan Repetition Mode */
1065 static inline void hci_pscan_rep_mode_evt(struct hci_dev *hdev, struct sk_buff *skb)
1067 struct hci_ev_pscan_rep_mode *ev = (struct hci_ev_pscan_rep_mode *) skb->data;
1068 struct inquiry_entry *ie;
1070 BT_DBG("%s", hdev->name);
1074 if ((ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr))) {
1075 ie->data.pscan_rep_mode = ev->pscan_rep_mode;
1076 ie->timestamp = jiffies;
1079 hci_dev_unlock(hdev);
1083 static inline void hci_sniff_subrate_evt(struct hci_dev *hdev, struct sk_buff *skb)
1085 struct hci_ev_sniff_subrate *ev = (struct hci_ev_sniff_subrate *) skb->data;
1086 struct hci_conn *conn;
1088 BT_DBG("%s status %d", hdev->name, ev->status);
1092 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1096 hci_dev_unlock(hdev);
1099 void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb)
1101 struct hci_event_hdr *hdr = (struct hci_event_hdr *) skb->data;
1102 struct hci_ev_cmd_complete *ec;
1103 struct hci_ev_cmd_status *cs;
1104 u16 opcode, ocf, ogf;
1106 skb_pull(skb, HCI_EVENT_HDR_SIZE);
1108 BT_DBG("%s evt 0x%x", hdev->name, hdr->evt);
1111 case HCI_EV_NUM_COMP_PKTS:
1112 hci_num_comp_pkts_evt(hdev, skb);
1115 case HCI_EV_INQUIRY_COMPLETE:
1116 hci_inquiry_complete_evt(hdev, skb);
1119 case HCI_EV_INQUIRY_RESULT:
1120 hci_inquiry_result_evt(hdev, skb);
1123 case HCI_EV_INQUIRY_RESULT_WITH_RSSI:
1124 hci_inquiry_result_with_rssi_evt(hdev, skb);
1127 case HCI_EV_EXTENDED_INQUIRY_RESULT:
1128 hci_extended_inquiry_result_evt(hdev, skb);
1131 case HCI_EV_CONN_REQUEST:
1132 hci_conn_request_evt(hdev, skb);
1135 case HCI_EV_CONN_COMPLETE:
1136 hci_conn_complete_evt(hdev, skb);
1139 case HCI_EV_DISCONN_COMPLETE:
1140 hci_disconn_complete_evt(hdev, skb);
1143 case HCI_EV_ROLE_CHANGE:
1144 hci_role_change_evt(hdev, skb);
1147 case HCI_EV_MODE_CHANGE:
1148 hci_mode_change_evt(hdev, skb);
1151 case HCI_EV_AUTH_COMPLETE:
1152 hci_auth_complete_evt(hdev, skb);
1155 case HCI_EV_ENCRYPT_CHANGE:
1156 hci_encrypt_change_evt(hdev, skb);
1159 case HCI_EV_CHANGE_CONN_LINK_KEY_COMPLETE:
1160 hci_change_conn_link_key_complete_evt(hdev, skb);
1163 case HCI_EV_PIN_CODE_REQ:
1164 hci_pin_code_request_evt(hdev, skb);
1167 case HCI_EV_LINK_KEY_REQ:
1168 hci_link_key_request_evt(hdev, skb);
1171 case HCI_EV_LINK_KEY_NOTIFY:
1172 hci_link_key_notify_evt(hdev, skb);
1175 case HCI_EV_REMOTE_FEATURES:
1176 hci_remote_features_evt(hdev, skb);
1179 case HCI_EV_CLOCK_OFFSET:
1180 hci_clock_offset_evt(hdev, skb);
1183 case HCI_EV_PSCAN_REP_MODE:
1184 hci_pscan_rep_mode_evt(hdev, skb);
1187 case HCI_EV_SNIFF_SUBRATE:
1188 hci_sniff_subrate_evt(hdev, skb);
1191 case HCI_EV_CMD_STATUS:
1192 cs = (struct hci_ev_cmd_status *) skb->data;
1193 skb_pull(skb, sizeof(cs));
1195 opcode = __le16_to_cpu(cs->opcode);
1196 ogf = hci_opcode_ogf(opcode);
1197 ocf = hci_opcode_ocf(opcode);
1200 case OGF_INFO_PARAM:
1201 hci_cs_info_param(hdev, ocf, cs->status);
1205 hci_cs_host_ctl(hdev, ocf, cs->status);
1209 hci_cs_link_ctl(hdev, ocf, cs->status);
1212 case OGF_LINK_POLICY:
1213 hci_cs_link_policy(hdev, ocf, cs->status);
1217 BT_DBG("%s Command Status OGF %x", hdev->name, ogf);
1222 atomic_set(&hdev->cmd_cnt, 1);
1223 if (!skb_queue_empty(&hdev->cmd_q))
1224 hci_sched_cmd(hdev);
1228 case HCI_EV_CMD_COMPLETE:
1229 ec = (struct hci_ev_cmd_complete *) skb->data;
1230 skb_pull(skb, sizeof(*ec));
1232 opcode = __le16_to_cpu(ec->opcode);
1233 ogf = hci_opcode_ogf(opcode);
1234 ocf = hci_opcode_ocf(opcode);
1237 case OGF_INFO_PARAM:
1238 hci_cc_info_param(hdev, ocf, skb);
1242 hci_cc_host_ctl(hdev, ocf, skb);
1246 hci_cc_link_ctl(hdev, ocf, skb);
1249 case OGF_LINK_POLICY:
1250 hci_cc_link_policy(hdev, ocf, skb);
1254 BT_DBG("%s Command Completed OGF %x", hdev->name, ogf);
1259 atomic_set(&hdev->cmd_cnt, 1);
1260 if (!skb_queue_empty(&hdev->cmd_q))
1261 hci_sched_cmd(hdev);
1267 hdev->stat.evt_rx++;
1270 /* Generate internal stack event */
1271 void hci_si_event(struct hci_dev *hdev, int type, int dlen, void *data)
1273 struct hci_event_hdr *hdr;
1274 struct hci_ev_stack_internal *ev;
1275 struct sk_buff *skb;
1277 skb = bt_skb_alloc(HCI_EVENT_HDR_SIZE + sizeof(*ev) + dlen, GFP_ATOMIC);
1281 hdr = (void *) skb_put(skb, HCI_EVENT_HDR_SIZE);
1282 hdr->evt = HCI_EV_STACK_INTERNAL;
1283 hdr->plen = sizeof(*ev) + dlen;
1285 ev = (void *) skb_put(skb, sizeof(*ev) + dlen);
1287 memcpy(ev->data, data, dlen);
1289 bt_cb(skb)->incoming = 1;
1290 __net_timestamp(skb);
1292 bt_cb(skb)->pkt_type = HCI_EVENT_PKT;
1293 skb->dev = (void *) hdev;
1294 hci_send_to_sock(hdev, skb);