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 u8 hci_get_inquiry_mode(struct hci_dev *hdev)
429 if (hdev->features[6] & LMP_EXT_INQ)
432 if (hdev->features[3] & LMP_RSSI_INQ)
435 if (hdev->manufacturer == 11 && hdev->hci_rev == 0x00 &&
436 hdev->lmp_subver == 0x0757)
439 if (hdev->manufacturer == 15) {
440 if (hdev->hci_rev == 0x03 && hdev->lmp_subver == 0x6963)
442 if (hdev->hci_rev == 0x09 && hdev->lmp_subver == 0x6963)
444 if (hdev->hci_rev == 0x00 && hdev->lmp_subver == 0x6965)
448 if (hdev->manufacturer == 31 && hdev->hci_rev == 0x2005 &&
449 hdev->lmp_subver == 0x1805)
455 static void hci_setup_inquiry_mode(struct hci_dev *hdev)
459 mode = hci_get_inquiry_mode(hdev);
461 hci_send_cmd(hdev, HCI_OP_WRITE_INQUIRY_MODE, 1, &mode);
464 static void hci_setup_event_mask(struct hci_dev *hdev)
466 /* The second byte is 0xff instead of 0x9f (two reserved bits
467 * disabled) since a Broadcom 1.2 dongle doesn't respond to the
468 * command otherwise */
469 u8 events[8] = { 0xff, 0xff, 0xfb, 0xff, 0x00, 0x00, 0x00, 0x00 };
471 /* Events for 1.2 and newer controllers */
472 if (hdev->lmp_ver > 1) {
473 events[4] |= 0x01; /* Flow Specification Complete */
474 events[4] |= 0x02; /* Inquiry Result with RSSI */
475 events[4] |= 0x04; /* Read Remote Extended Features Complete */
476 events[5] |= 0x08; /* Synchronous Connection Complete */
477 events[5] |= 0x10; /* Synchronous Connection Changed */
480 if (hdev->features[3] & LMP_RSSI_INQ)
481 events[4] |= 0x04; /* Inquiry Result with RSSI */
483 if (hdev->features[5] & LMP_SNIFF_SUBR)
484 events[5] |= 0x20; /* Sniff Subrating */
486 if (hdev->features[5] & LMP_PAUSE_ENC)
487 events[5] |= 0x80; /* Encryption Key Refresh Complete */
489 if (hdev->features[6] & LMP_EXT_INQ)
490 events[5] |= 0x40; /* Extended Inquiry Result */
492 if (hdev->features[6] & LMP_NO_FLUSH)
493 events[7] |= 0x01; /* Enhanced Flush Complete */
495 if (hdev->features[7] & LMP_LSTO)
496 events[6] |= 0x80; /* Link Supervision Timeout Changed */
498 if (hdev->features[6] & LMP_SIMPLE_PAIR) {
499 events[6] |= 0x01; /* IO Capability Request */
500 events[6] |= 0x02; /* IO Capability Response */
501 events[6] |= 0x04; /* User Confirmation Request */
502 events[6] |= 0x08; /* User Passkey Request */
503 events[6] |= 0x10; /* Remote OOB Data Request */
504 events[6] |= 0x20; /* Simple Pairing Complete */
505 events[7] |= 0x04; /* User Passkey Notification */
506 events[7] |= 0x08; /* Keypress Notification */
507 events[7] |= 0x10; /* Remote Host Supported
508 * Features Notification */
511 if (hdev->features[4] & LMP_LE)
512 events[7] |= 0x20; /* LE Meta-Event */
514 hci_send_cmd(hdev, HCI_OP_SET_EVENT_MASK, sizeof(events), events);
517 static void hci_setup(struct hci_dev *hdev)
519 hci_setup_event_mask(hdev);
521 if (hdev->lmp_ver > 1)
522 hci_send_cmd(hdev, HCI_OP_READ_LOCAL_COMMANDS, 0, NULL);
524 if (hdev->features[6] & LMP_SIMPLE_PAIR) {
526 hci_send_cmd(hdev, HCI_OP_WRITE_SSP_MODE, sizeof(mode), &mode);
529 if (hdev->features[3] & LMP_RSSI_INQ)
530 hci_setup_inquiry_mode(hdev);
532 if (hdev->features[7] & LMP_INQ_TX_PWR)
533 hci_send_cmd(hdev, HCI_OP_READ_INQ_RSP_TX_POWER, 0, NULL);
536 static void hci_cc_read_local_version(struct hci_dev *hdev, struct sk_buff *skb)
538 struct hci_rp_read_local_version *rp = (void *) skb->data;
540 BT_DBG("%s status 0x%x", hdev->name, rp->status);
545 hdev->hci_ver = rp->hci_ver;
546 hdev->hci_rev = __le16_to_cpu(rp->hci_rev);
547 hdev->lmp_ver = rp->lmp_ver;
548 hdev->manufacturer = __le16_to_cpu(rp->manufacturer);
549 hdev->lmp_subver = __le16_to_cpu(rp->lmp_subver);
551 BT_DBG("%s manufacturer %d hci ver %d:%d", hdev->name,
553 hdev->hci_ver, hdev->hci_rev);
555 if (test_bit(HCI_INIT, &hdev->flags))
559 static void hci_setup_link_policy(struct hci_dev *hdev)
563 if (hdev->features[0] & LMP_RSWITCH)
564 link_policy |= HCI_LP_RSWITCH;
565 if (hdev->features[0] & LMP_HOLD)
566 link_policy |= HCI_LP_HOLD;
567 if (hdev->features[0] & LMP_SNIFF)
568 link_policy |= HCI_LP_SNIFF;
569 if (hdev->features[1] & LMP_PARK)
570 link_policy |= HCI_LP_PARK;
572 link_policy = cpu_to_le16(link_policy);
573 hci_send_cmd(hdev, HCI_OP_WRITE_DEF_LINK_POLICY,
574 sizeof(link_policy), &link_policy);
577 static void hci_cc_read_local_commands(struct hci_dev *hdev, struct sk_buff *skb)
579 struct hci_rp_read_local_commands *rp = (void *) skb->data;
581 BT_DBG("%s status 0x%x", hdev->name, rp->status);
586 memcpy(hdev->commands, rp->commands, sizeof(hdev->commands));
588 if (test_bit(HCI_INIT, &hdev->flags) && (hdev->commands[5] & 0x10))
589 hci_setup_link_policy(hdev);
592 hci_req_complete(hdev, HCI_OP_READ_LOCAL_COMMANDS, rp->status);
595 static void hci_cc_read_local_features(struct hci_dev *hdev, struct sk_buff *skb)
597 struct hci_rp_read_local_features *rp = (void *) skb->data;
599 BT_DBG("%s status 0x%x", hdev->name, rp->status);
604 memcpy(hdev->features, rp->features, 8);
606 /* Adjust default settings according to features
607 * supported by device. */
609 if (hdev->features[0] & LMP_3SLOT)
610 hdev->pkt_type |= (HCI_DM3 | HCI_DH3);
612 if (hdev->features[0] & LMP_5SLOT)
613 hdev->pkt_type |= (HCI_DM5 | HCI_DH5);
615 if (hdev->features[1] & LMP_HV2) {
616 hdev->pkt_type |= (HCI_HV2);
617 hdev->esco_type |= (ESCO_HV2);
620 if (hdev->features[1] & LMP_HV3) {
621 hdev->pkt_type |= (HCI_HV3);
622 hdev->esco_type |= (ESCO_HV3);
625 if (hdev->features[3] & LMP_ESCO)
626 hdev->esco_type |= (ESCO_EV3);
628 if (hdev->features[4] & LMP_EV4)
629 hdev->esco_type |= (ESCO_EV4);
631 if (hdev->features[4] & LMP_EV5)
632 hdev->esco_type |= (ESCO_EV5);
634 if (hdev->features[5] & LMP_EDR_ESCO_2M)
635 hdev->esco_type |= (ESCO_2EV3);
637 if (hdev->features[5] & LMP_EDR_ESCO_3M)
638 hdev->esco_type |= (ESCO_3EV3);
640 if (hdev->features[5] & LMP_EDR_3S_ESCO)
641 hdev->esco_type |= (ESCO_2EV5 | ESCO_3EV5);
643 BT_DBG("%s features 0x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x", hdev->name,
644 hdev->features[0], hdev->features[1],
645 hdev->features[2], hdev->features[3],
646 hdev->features[4], hdev->features[5],
647 hdev->features[6], hdev->features[7]);
650 static void hci_cc_read_buffer_size(struct hci_dev *hdev, struct sk_buff *skb)
652 struct hci_rp_read_buffer_size *rp = (void *) skb->data;
654 BT_DBG("%s status 0x%x", hdev->name, rp->status);
659 hdev->acl_mtu = __le16_to_cpu(rp->acl_mtu);
660 hdev->sco_mtu = rp->sco_mtu;
661 hdev->acl_pkts = __le16_to_cpu(rp->acl_max_pkt);
662 hdev->sco_pkts = __le16_to_cpu(rp->sco_max_pkt);
664 if (test_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE, &hdev->quirks)) {
669 hdev->acl_cnt = hdev->acl_pkts;
670 hdev->sco_cnt = hdev->sco_pkts;
672 BT_DBG("%s acl mtu %d:%d sco mtu %d:%d", hdev->name,
673 hdev->acl_mtu, hdev->acl_pkts,
674 hdev->sco_mtu, hdev->sco_pkts);
677 static void hci_cc_read_bd_addr(struct hci_dev *hdev, struct sk_buff *skb)
679 struct hci_rp_read_bd_addr *rp = (void *) skb->data;
681 BT_DBG("%s status 0x%x", hdev->name, rp->status);
684 bacpy(&hdev->bdaddr, &rp->bdaddr);
686 hci_req_complete(hdev, HCI_OP_READ_BD_ADDR, rp->status);
689 static void hci_cc_write_ca_timeout(struct hci_dev *hdev, struct sk_buff *skb)
691 __u8 status = *((__u8 *) skb->data);
693 BT_DBG("%s status 0x%x", hdev->name, status);
695 hci_req_complete(hdev, HCI_OP_WRITE_CA_TIMEOUT, status);
698 static void hci_cc_delete_stored_link_key(struct hci_dev *hdev,
701 __u8 status = *((__u8 *) skb->data);
703 BT_DBG("%s status 0x%x", hdev->name, status);
705 hci_req_complete(hdev, HCI_OP_DELETE_STORED_LINK_KEY, status);
708 static void hci_cc_set_event_mask(struct hci_dev *hdev, struct sk_buff *skb)
710 __u8 status = *((__u8 *) skb->data);
712 BT_DBG("%s status 0x%x", hdev->name, status);
714 hci_req_complete(hdev, HCI_OP_SET_EVENT_MASK, status);
717 static void hci_cc_write_inquiry_mode(struct hci_dev *hdev,
720 __u8 status = *((__u8 *) skb->data);
722 BT_DBG("%s status 0x%x", hdev->name, status);
724 hci_req_complete(hdev, HCI_OP_WRITE_INQUIRY_MODE, status);
727 static void hci_cc_read_inq_rsp_tx_power(struct hci_dev *hdev,
730 __u8 status = *((__u8 *) skb->data);
732 BT_DBG("%s status 0x%x", hdev->name, status);
734 hci_req_complete(hdev, HCI_OP_READ_INQ_RSP_TX_POWER, status);
737 static void hci_cc_set_event_flt(struct hci_dev *hdev, struct sk_buff *skb)
739 __u8 status = *((__u8 *) skb->data);
741 BT_DBG("%s status 0x%x", hdev->name, status);
743 hci_req_complete(hdev, HCI_OP_SET_EVENT_FLT, status);
746 static void hci_cc_pin_code_reply(struct hci_dev *hdev, struct sk_buff *skb)
748 struct hci_rp_pin_code_reply *rp = (void *) skb->data;
749 struct hci_cp_pin_code_reply *cp;
750 struct hci_conn *conn;
752 BT_DBG("%s status 0x%x", hdev->name, rp->status);
754 if (test_bit(HCI_MGMT, &hdev->flags))
755 mgmt_pin_code_reply_complete(hdev->id, &rp->bdaddr, rp->status);
760 cp = hci_sent_cmd_data(hdev, HCI_OP_PIN_CODE_REPLY);
764 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
766 conn->pin_length = cp->pin_len;
769 static void hci_cc_pin_code_neg_reply(struct hci_dev *hdev, struct sk_buff *skb)
771 struct hci_rp_pin_code_neg_reply *rp = (void *) skb->data;
773 BT_DBG("%s status 0x%x", hdev->name, rp->status);
775 if (test_bit(HCI_MGMT, &hdev->flags))
776 mgmt_pin_code_neg_reply_complete(hdev->id, &rp->bdaddr,
779 static void hci_cc_le_read_buffer_size(struct hci_dev *hdev,
782 struct hci_rp_le_read_buffer_size *rp = (void *) skb->data;
784 BT_DBG("%s status 0x%x", hdev->name, rp->status);
789 hdev->le_mtu = __le16_to_cpu(rp->le_mtu);
790 hdev->le_pkts = rp->le_max_pkt;
792 hdev->le_cnt = hdev->le_pkts;
794 BT_DBG("%s le mtu %d:%d", hdev->name, hdev->le_mtu, hdev->le_pkts);
796 hci_req_complete(hdev, HCI_OP_LE_READ_BUFFER_SIZE, rp->status);
799 static inline void hci_cs_inquiry(struct hci_dev *hdev, __u8 status)
801 BT_DBG("%s status 0x%x", hdev->name, status);
804 hci_req_complete(hdev, HCI_OP_INQUIRY, status);
806 hci_conn_check_pending(hdev);
808 set_bit(HCI_INQUIRY, &hdev->flags);
811 static inline void hci_cs_create_conn(struct hci_dev *hdev, __u8 status)
813 struct hci_cp_create_conn *cp;
814 struct hci_conn *conn;
816 BT_DBG("%s status 0x%x", hdev->name, status);
818 cp = hci_sent_cmd_data(hdev, HCI_OP_CREATE_CONN);
824 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
826 BT_DBG("%s bdaddr %s conn %p", hdev->name, batostr(&cp->bdaddr), conn);
829 if (conn && conn->state == BT_CONNECT) {
830 if (status != 0x0c || conn->attempt > 2) {
831 conn->state = BT_CLOSED;
832 hci_proto_connect_cfm(conn, status);
835 conn->state = BT_CONNECT2;
839 conn = hci_conn_add(hdev, ACL_LINK, &cp->bdaddr);
842 conn->link_mode |= HCI_LM_MASTER;
844 BT_ERR("No memory for new connection");
848 hci_dev_unlock(hdev);
851 static void hci_cs_add_sco(struct hci_dev *hdev, __u8 status)
853 struct hci_cp_add_sco *cp;
854 struct hci_conn *acl, *sco;
857 BT_DBG("%s status 0x%x", hdev->name, status);
862 cp = hci_sent_cmd_data(hdev, HCI_OP_ADD_SCO);
866 handle = __le16_to_cpu(cp->handle);
868 BT_DBG("%s handle %d", hdev->name, handle);
872 acl = hci_conn_hash_lookup_handle(hdev, handle);
876 sco->state = BT_CLOSED;
878 hci_proto_connect_cfm(sco, status);
883 hci_dev_unlock(hdev);
886 static void hci_cs_auth_requested(struct hci_dev *hdev, __u8 status)
888 struct hci_cp_auth_requested *cp;
889 struct hci_conn *conn;
891 BT_DBG("%s status 0x%x", hdev->name, status);
896 cp = hci_sent_cmd_data(hdev, HCI_OP_AUTH_REQUESTED);
902 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
904 if (conn->state == BT_CONFIG) {
905 hci_proto_connect_cfm(conn, status);
910 hci_dev_unlock(hdev);
913 static void hci_cs_set_conn_encrypt(struct hci_dev *hdev, __u8 status)
915 struct hci_cp_set_conn_encrypt *cp;
916 struct hci_conn *conn;
918 BT_DBG("%s status 0x%x", hdev->name, status);
923 cp = hci_sent_cmd_data(hdev, HCI_OP_SET_CONN_ENCRYPT);
929 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
931 if (conn->state == BT_CONFIG) {
932 hci_proto_connect_cfm(conn, status);
937 hci_dev_unlock(hdev);
940 static int hci_outgoing_auth_needed(struct hci_dev *hdev,
941 struct hci_conn *conn)
943 if (conn->state != BT_CONFIG || !conn->out)
946 if (conn->pending_sec_level == BT_SECURITY_SDP)
949 /* Only request authentication for SSP connections or non-SSP
950 * devices with sec_level HIGH */
951 if (!(hdev->ssp_mode > 0 && conn->ssp_mode > 0) &&
952 conn->pending_sec_level != BT_SECURITY_HIGH)
958 static void hci_cs_remote_name_req(struct hci_dev *hdev, __u8 status)
960 struct hci_cp_remote_name_req *cp;
961 struct hci_conn *conn;
963 BT_DBG("%s status 0x%x", hdev->name, status);
965 /* If successful wait for the name req complete event before
966 * checking for the need to do authentication */
970 cp = hci_sent_cmd_data(hdev, HCI_OP_REMOTE_NAME_REQ);
976 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
977 if (conn && hci_outgoing_auth_needed(hdev, conn)) {
978 struct hci_cp_auth_requested cp;
979 cp.handle = __cpu_to_le16(conn->handle);
980 hci_send_cmd(hdev, HCI_OP_AUTH_REQUESTED, sizeof(cp), &cp);
983 hci_dev_unlock(hdev);
986 static void hci_cs_read_remote_features(struct hci_dev *hdev, __u8 status)
988 struct hci_cp_read_remote_features *cp;
989 struct hci_conn *conn;
991 BT_DBG("%s status 0x%x", hdev->name, status);
996 cp = hci_sent_cmd_data(hdev, HCI_OP_READ_REMOTE_FEATURES);
1002 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1004 if (conn->state == BT_CONFIG) {
1005 hci_proto_connect_cfm(conn, status);
1010 hci_dev_unlock(hdev);
1013 static void hci_cs_read_remote_ext_features(struct hci_dev *hdev, __u8 status)
1015 struct hci_cp_read_remote_ext_features *cp;
1016 struct hci_conn *conn;
1018 BT_DBG("%s status 0x%x", hdev->name, status);
1023 cp = hci_sent_cmd_data(hdev, HCI_OP_READ_REMOTE_EXT_FEATURES);
1029 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1031 if (conn->state == BT_CONFIG) {
1032 hci_proto_connect_cfm(conn, status);
1037 hci_dev_unlock(hdev);
1040 static void hci_cs_setup_sync_conn(struct hci_dev *hdev, __u8 status)
1042 struct hci_cp_setup_sync_conn *cp;
1043 struct hci_conn *acl, *sco;
1046 BT_DBG("%s status 0x%x", hdev->name, status);
1051 cp = hci_sent_cmd_data(hdev, HCI_OP_SETUP_SYNC_CONN);
1055 handle = __le16_to_cpu(cp->handle);
1057 BT_DBG("%s handle %d", hdev->name, handle);
1061 acl = hci_conn_hash_lookup_handle(hdev, handle);
1065 sco->state = BT_CLOSED;
1067 hci_proto_connect_cfm(sco, status);
1072 hci_dev_unlock(hdev);
1075 static void hci_cs_sniff_mode(struct hci_dev *hdev, __u8 status)
1077 struct hci_cp_sniff_mode *cp;
1078 struct hci_conn *conn;
1080 BT_DBG("%s status 0x%x", hdev->name, status);
1085 cp = hci_sent_cmd_data(hdev, HCI_OP_SNIFF_MODE);
1091 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1093 clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend);
1095 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->pend))
1096 hci_sco_setup(conn, status);
1099 hci_dev_unlock(hdev);
1102 static void hci_cs_exit_sniff_mode(struct hci_dev *hdev, __u8 status)
1104 struct hci_cp_exit_sniff_mode *cp;
1105 struct hci_conn *conn;
1107 BT_DBG("%s status 0x%x", hdev->name, status);
1112 cp = hci_sent_cmd_data(hdev, HCI_OP_EXIT_SNIFF_MODE);
1118 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
1120 clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend);
1122 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->pend))
1123 hci_sco_setup(conn, status);
1126 hci_dev_unlock(hdev);
1129 static void hci_cs_le_create_conn(struct hci_dev *hdev, __u8 status)
1131 struct hci_cp_le_create_conn *cp;
1132 struct hci_conn *conn;
1134 BT_DBG("%s status 0x%x", hdev->name, status);
1136 cp = hci_sent_cmd_data(hdev, HCI_OP_LE_CREATE_CONN);
1142 conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, &cp->peer_addr);
1144 BT_DBG("%s bdaddr %s conn %p", hdev->name, batostr(&cp->peer_addr),
1148 if (conn && conn->state == BT_CONNECT) {
1149 conn->state = BT_CLOSED;
1150 hci_proto_connect_cfm(conn, status);
1155 conn = hci_conn_add(hdev, LE_LINK, &cp->peer_addr);
1159 BT_ERR("No memory for new connection");
1163 hci_dev_unlock(hdev);
1166 static inline void hci_inquiry_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1168 __u8 status = *((__u8 *) skb->data);
1170 BT_DBG("%s status %d", hdev->name, status);
1172 clear_bit(HCI_INQUIRY, &hdev->flags);
1174 hci_req_complete(hdev, HCI_OP_INQUIRY, status);
1176 hci_conn_check_pending(hdev);
1179 static inline void hci_inquiry_result_evt(struct hci_dev *hdev, struct sk_buff *skb)
1181 struct inquiry_data data;
1182 struct inquiry_info *info = (void *) (skb->data + 1);
1183 int num_rsp = *((__u8 *) skb->data);
1185 BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
1192 for (; num_rsp; num_rsp--) {
1193 bacpy(&data.bdaddr, &info->bdaddr);
1194 data.pscan_rep_mode = info->pscan_rep_mode;
1195 data.pscan_period_mode = info->pscan_period_mode;
1196 data.pscan_mode = info->pscan_mode;
1197 memcpy(data.dev_class, info->dev_class, 3);
1198 data.clock_offset = info->clock_offset;
1200 data.ssp_mode = 0x00;
1202 hci_inquiry_cache_update(hdev, &data);
1205 hci_dev_unlock(hdev);
1208 static inline void hci_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1210 struct hci_ev_conn_complete *ev = (void *) skb->data;
1211 struct hci_conn *conn;
1213 BT_DBG("%s", hdev->name);
1217 conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
1219 if (ev->link_type != SCO_LINK)
1222 conn = hci_conn_hash_lookup_ba(hdev, ESCO_LINK, &ev->bdaddr);
1226 conn->type = SCO_LINK;
1230 conn->handle = __le16_to_cpu(ev->handle);
1232 if (conn->type == ACL_LINK) {
1233 conn->state = BT_CONFIG;
1234 hci_conn_hold(conn);
1235 conn->disc_timeout = HCI_DISCONN_TIMEOUT;
1236 mgmt_connected(hdev->id, &ev->bdaddr);
1238 conn->state = BT_CONNECTED;
1240 hci_conn_hold_device(conn);
1241 hci_conn_add_sysfs(conn);
1243 if (test_bit(HCI_AUTH, &hdev->flags))
1244 conn->link_mode |= HCI_LM_AUTH;
1246 if (test_bit(HCI_ENCRYPT, &hdev->flags))
1247 conn->link_mode |= HCI_LM_ENCRYPT;
1249 /* Get remote features */
1250 if (conn->type == ACL_LINK) {
1251 struct hci_cp_read_remote_features cp;
1252 cp.handle = ev->handle;
1253 hci_send_cmd(hdev, HCI_OP_READ_REMOTE_FEATURES,
1257 /* Set packet type for incoming connection */
1258 if (!conn->out && hdev->hci_ver < 3) {
1259 struct hci_cp_change_conn_ptype cp;
1260 cp.handle = ev->handle;
1261 cp.pkt_type = cpu_to_le16(conn->pkt_type);
1262 hci_send_cmd(hdev, HCI_OP_CHANGE_CONN_PTYPE,
1266 conn->state = BT_CLOSED;
1267 if (conn->type == ACL_LINK)
1268 mgmt_connect_failed(hdev->id, &ev->bdaddr, ev->status);
1271 if (conn->type == ACL_LINK)
1272 hci_sco_setup(conn, ev->status);
1275 hci_proto_connect_cfm(conn, ev->status);
1277 } else if (ev->link_type != ACL_LINK)
1278 hci_proto_connect_cfm(conn, ev->status);
1281 hci_dev_unlock(hdev);
1283 hci_conn_check_pending(hdev);
1286 static inline void hci_conn_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
1288 struct hci_ev_conn_request *ev = (void *) skb->data;
1289 int mask = hdev->link_mode;
1291 BT_DBG("%s bdaddr %s type 0x%x", hdev->name,
1292 batostr(&ev->bdaddr), ev->link_type);
1294 mask |= hci_proto_connect_ind(hdev, &ev->bdaddr, ev->link_type);
1296 if ((mask & HCI_LM_ACCEPT) && !hci_blacklist_lookup(hdev, &ev->bdaddr)) {
1297 /* Connection accepted */
1298 struct inquiry_entry *ie;
1299 struct hci_conn *conn;
1303 ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr);
1305 memcpy(ie->data.dev_class, ev->dev_class, 3);
1307 conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
1309 conn = hci_conn_add(hdev, ev->link_type, &ev->bdaddr);
1311 BT_ERR("No memory for new connection");
1312 hci_dev_unlock(hdev);
1317 memcpy(conn->dev_class, ev->dev_class, 3);
1318 conn->state = BT_CONNECT;
1320 hci_dev_unlock(hdev);
1322 if (ev->link_type == ACL_LINK || !lmp_esco_capable(hdev)) {
1323 struct hci_cp_accept_conn_req cp;
1325 bacpy(&cp.bdaddr, &ev->bdaddr);
1327 if (lmp_rswitch_capable(hdev) && (mask & HCI_LM_MASTER))
1328 cp.role = 0x00; /* Become master */
1330 cp.role = 0x01; /* Remain slave */
1332 hci_send_cmd(hdev, HCI_OP_ACCEPT_CONN_REQ,
1335 struct hci_cp_accept_sync_conn_req cp;
1337 bacpy(&cp.bdaddr, &ev->bdaddr);
1338 cp.pkt_type = cpu_to_le16(conn->pkt_type);
1340 cp.tx_bandwidth = cpu_to_le32(0x00001f40);
1341 cp.rx_bandwidth = cpu_to_le32(0x00001f40);
1342 cp.max_latency = cpu_to_le16(0xffff);
1343 cp.content_format = cpu_to_le16(hdev->voice_setting);
1344 cp.retrans_effort = 0xff;
1346 hci_send_cmd(hdev, HCI_OP_ACCEPT_SYNC_CONN_REQ,
1350 /* Connection rejected */
1351 struct hci_cp_reject_conn_req cp;
1353 bacpy(&cp.bdaddr, &ev->bdaddr);
1355 hci_send_cmd(hdev, HCI_OP_REJECT_CONN_REQ, sizeof(cp), &cp);
1359 static inline void hci_disconn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1361 struct hci_ev_disconn_complete *ev = (void *) skb->data;
1362 struct hci_conn *conn;
1364 BT_DBG("%s status %d", hdev->name, ev->status);
1367 mgmt_disconnect_failed(hdev->id);
1373 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1377 conn->state = BT_CLOSED;
1379 if (conn->type == ACL_LINK)
1380 mgmt_disconnected(hdev->id, &conn->dst);
1382 hci_proto_disconn_cfm(conn, ev->reason);
1386 hci_dev_unlock(hdev);
1389 static inline void hci_auth_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1391 struct hci_ev_auth_complete *ev = (void *) skb->data;
1392 struct hci_conn *conn;
1394 BT_DBG("%s status %d", hdev->name, ev->status);
1398 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1401 conn->link_mode |= HCI_LM_AUTH;
1402 conn->sec_level = conn->pending_sec_level;
1404 conn->sec_level = BT_SECURITY_LOW;
1406 clear_bit(HCI_CONN_AUTH_PEND, &conn->pend);
1408 if (conn->state == BT_CONFIG) {
1409 if (!ev->status && hdev->ssp_mode > 0 &&
1410 conn->ssp_mode > 0) {
1411 struct hci_cp_set_conn_encrypt cp;
1412 cp.handle = ev->handle;
1414 hci_send_cmd(hdev, HCI_OP_SET_CONN_ENCRYPT,
1417 conn->state = BT_CONNECTED;
1418 hci_proto_connect_cfm(conn, ev->status);
1422 hci_auth_cfm(conn, ev->status);
1424 hci_conn_hold(conn);
1425 conn->disc_timeout = HCI_DISCONN_TIMEOUT;
1429 if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend)) {
1431 struct hci_cp_set_conn_encrypt cp;
1432 cp.handle = ev->handle;
1434 hci_send_cmd(hdev, HCI_OP_SET_CONN_ENCRYPT,
1437 clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend);
1438 hci_encrypt_cfm(conn, ev->status, 0x00);
1443 hci_dev_unlock(hdev);
1446 static inline void hci_remote_name_evt(struct hci_dev *hdev, struct sk_buff *skb)
1448 struct hci_ev_remote_name *ev = (void *) skb->data;
1449 struct hci_conn *conn;
1451 BT_DBG("%s", hdev->name);
1453 hci_conn_check_pending(hdev);
1457 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
1458 if (conn && hci_outgoing_auth_needed(hdev, conn)) {
1459 struct hci_cp_auth_requested cp;
1460 cp.handle = __cpu_to_le16(conn->handle);
1461 hci_send_cmd(hdev, HCI_OP_AUTH_REQUESTED, sizeof(cp), &cp);
1464 hci_dev_unlock(hdev);
1467 static inline void hci_encrypt_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
1469 struct hci_ev_encrypt_change *ev = (void *) skb->data;
1470 struct hci_conn *conn;
1472 BT_DBG("%s status %d", hdev->name, ev->status);
1476 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1480 /* Encryption implies authentication */
1481 conn->link_mode |= HCI_LM_AUTH;
1482 conn->link_mode |= HCI_LM_ENCRYPT;
1484 conn->link_mode &= ~HCI_LM_ENCRYPT;
1487 clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend);
1489 if (conn->state == BT_CONFIG) {
1491 conn->state = BT_CONNECTED;
1493 hci_proto_connect_cfm(conn, ev->status);
1496 hci_encrypt_cfm(conn, ev->status, ev->encrypt);
1499 hci_dev_unlock(hdev);
1502 static inline void hci_change_link_key_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1504 struct hci_ev_change_link_key_complete *ev = (void *) skb->data;
1505 struct hci_conn *conn;
1507 BT_DBG("%s status %d", hdev->name, ev->status);
1511 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1514 conn->link_mode |= HCI_LM_SECURE;
1516 clear_bit(HCI_CONN_AUTH_PEND, &conn->pend);
1518 hci_key_change_cfm(conn, ev->status);
1521 hci_dev_unlock(hdev);
1524 static inline void hci_remote_features_evt(struct hci_dev *hdev, struct sk_buff *skb)
1526 struct hci_ev_remote_features *ev = (void *) skb->data;
1527 struct hci_conn *conn;
1529 BT_DBG("%s status %d", hdev->name, ev->status);
1533 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1538 memcpy(conn->features, ev->features, 8);
1540 if (conn->state != BT_CONFIG)
1543 if (!ev->status && lmp_ssp_capable(hdev) && lmp_ssp_capable(conn)) {
1544 struct hci_cp_read_remote_ext_features cp;
1545 cp.handle = ev->handle;
1547 hci_send_cmd(hdev, HCI_OP_READ_REMOTE_EXT_FEATURES,
1553 struct hci_cp_remote_name_req cp;
1554 memset(&cp, 0, sizeof(cp));
1555 bacpy(&cp.bdaddr, &conn->dst);
1556 cp.pscan_rep_mode = 0x02;
1557 hci_send_cmd(hdev, HCI_OP_REMOTE_NAME_REQ, sizeof(cp), &cp);
1560 if (!hci_outgoing_auth_needed(hdev, conn)) {
1561 conn->state = BT_CONNECTED;
1562 hci_proto_connect_cfm(conn, ev->status);
1567 hci_dev_unlock(hdev);
1570 static inline void hci_remote_version_evt(struct hci_dev *hdev, struct sk_buff *skb)
1572 BT_DBG("%s", hdev->name);
1575 static inline void hci_qos_setup_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1577 BT_DBG("%s", hdev->name);
1580 static inline void hci_cmd_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1582 struct hci_ev_cmd_complete *ev = (void *) skb->data;
1585 skb_pull(skb, sizeof(*ev));
1587 opcode = __le16_to_cpu(ev->opcode);
1590 case HCI_OP_INQUIRY_CANCEL:
1591 hci_cc_inquiry_cancel(hdev, skb);
1594 case HCI_OP_EXIT_PERIODIC_INQ:
1595 hci_cc_exit_periodic_inq(hdev, skb);
1598 case HCI_OP_REMOTE_NAME_REQ_CANCEL:
1599 hci_cc_remote_name_req_cancel(hdev, skb);
1602 case HCI_OP_ROLE_DISCOVERY:
1603 hci_cc_role_discovery(hdev, skb);
1606 case HCI_OP_READ_LINK_POLICY:
1607 hci_cc_read_link_policy(hdev, skb);
1610 case HCI_OP_WRITE_LINK_POLICY:
1611 hci_cc_write_link_policy(hdev, skb);
1614 case HCI_OP_READ_DEF_LINK_POLICY:
1615 hci_cc_read_def_link_policy(hdev, skb);
1618 case HCI_OP_WRITE_DEF_LINK_POLICY:
1619 hci_cc_write_def_link_policy(hdev, skb);
1623 hci_cc_reset(hdev, skb);
1626 case HCI_OP_WRITE_LOCAL_NAME:
1627 hci_cc_write_local_name(hdev, skb);
1630 case HCI_OP_READ_LOCAL_NAME:
1631 hci_cc_read_local_name(hdev, skb);
1634 case HCI_OP_WRITE_AUTH_ENABLE:
1635 hci_cc_write_auth_enable(hdev, skb);
1638 case HCI_OP_WRITE_ENCRYPT_MODE:
1639 hci_cc_write_encrypt_mode(hdev, skb);
1642 case HCI_OP_WRITE_SCAN_ENABLE:
1643 hci_cc_write_scan_enable(hdev, skb);
1646 case HCI_OP_READ_CLASS_OF_DEV:
1647 hci_cc_read_class_of_dev(hdev, skb);
1650 case HCI_OP_WRITE_CLASS_OF_DEV:
1651 hci_cc_write_class_of_dev(hdev, skb);
1654 case HCI_OP_READ_VOICE_SETTING:
1655 hci_cc_read_voice_setting(hdev, skb);
1658 case HCI_OP_WRITE_VOICE_SETTING:
1659 hci_cc_write_voice_setting(hdev, skb);
1662 case HCI_OP_HOST_BUFFER_SIZE:
1663 hci_cc_host_buffer_size(hdev, skb);
1666 case HCI_OP_READ_SSP_MODE:
1667 hci_cc_read_ssp_mode(hdev, skb);
1670 case HCI_OP_WRITE_SSP_MODE:
1671 hci_cc_write_ssp_mode(hdev, skb);
1674 case HCI_OP_READ_LOCAL_VERSION:
1675 hci_cc_read_local_version(hdev, skb);
1678 case HCI_OP_READ_LOCAL_COMMANDS:
1679 hci_cc_read_local_commands(hdev, skb);
1682 case HCI_OP_READ_LOCAL_FEATURES:
1683 hci_cc_read_local_features(hdev, skb);
1686 case HCI_OP_READ_BUFFER_SIZE:
1687 hci_cc_read_buffer_size(hdev, skb);
1690 case HCI_OP_READ_BD_ADDR:
1691 hci_cc_read_bd_addr(hdev, skb);
1694 case HCI_OP_WRITE_CA_TIMEOUT:
1695 hci_cc_write_ca_timeout(hdev, skb);
1698 case HCI_OP_DELETE_STORED_LINK_KEY:
1699 hci_cc_delete_stored_link_key(hdev, skb);
1702 case HCI_OP_SET_EVENT_MASK:
1703 hci_cc_set_event_mask(hdev, skb);
1706 case HCI_OP_WRITE_INQUIRY_MODE:
1707 hci_cc_write_inquiry_mode(hdev, skb);
1710 case HCI_OP_READ_INQ_RSP_TX_POWER:
1711 hci_cc_read_inq_rsp_tx_power(hdev, skb);
1714 case HCI_OP_SET_EVENT_FLT:
1715 hci_cc_set_event_flt(hdev, skb);
1718 case HCI_OP_PIN_CODE_REPLY:
1719 hci_cc_pin_code_reply(hdev, skb);
1722 case HCI_OP_PIN_CODE_NEG_REPLY:
1723 hci_cc_pin_code_neg_reply(hdev, skb);
1726 case HCI_OP_LE_READ_BUFFER_SIZE:
1727 hci_cc_le_read_buffer_size(hdev, skb);
1731 BT_DBG("%s opcode 0x%x", hdev->name, opcode);
1736 atomic_set(&hdev->cmd_cnt, 1);
1737 if (!skb_queue_empty(&hdev->cmd_q))
1738 tasklet_schedule(&hdev->cmd_task);
1742 static inline void hci_cmd_status_evt(struct hci_dev *hdev, struct sk_buff *skb)
1744 struct hci_ev_cmd_status *ev = (void *) skb->data;
1747 skb_pull(skb, sizeof(*ev));
1749 opcode = __le16_to_cpu(ev->opcode);
1752 case HCI_OP_INQUIRY:
1753 hci_cs_inquiry(hdev, ev->status);
1756 case HCI_OP_CREATE_CONN:
1757 hci_cs_create_conn(hdev, ev->status);
1760 case HCI_OP_ADD_SCO:
1761 hci_cs_add_sco(hdev, ev->status);
1764 case HCI_OP_AUTH_REQUESTED:
1765 hci_cs_auth_requested(hdev, ev->status);
1768 case HCI_OP_SET_CONN_ENCRYPT:
1769 hci_cs_set_conn_encrypt(hdev, ev->status);
1772 case HCI_OP_REMOTE_NAME_REQ:
1773 hci_cs_remote_name_req(hdev, ev->status);
1776 case HCI_OP_READ_REMOTE_FEATURES:
1777 hci_cs_read_remote_features(hdev, ev->status);
1780 case HCI_OP_READ_REMOTE_EXT_FEATURES:
1781 hci_cs_read_remote_ext_features(hdev, ev->status);
1784 case HCI_OP_SETUP_SYNC_CONN:
1785 hci_cs_setup_sync_conn(hdev, ev->status);
1788 case HCI_OP_SNIFF_MODE:
1789 hci_cs_sniff_mode(hdev, ev->status);
1792 case HCI_OP_EXIT_SNIFF_MODE:
1793 hci_cs_exit_sniff_mode(hdev, ev->status);
1796 case HCI_OP_DISCONNECT:
1797 if (ev->status != 0)
1798 mgmt_disconnect_failed(hdev->id);
1801 case HCI_OP_LE_CREATE_CONN:
1802 hci_cs_le_create_conn(hdev, ev->status);
1806 BT_DBG("%s opcode 0x%x", hdev->name, opcode);
1811 atomic_set(&hdev->cmd_cnt, 1);
1812 if (!skb_queue_empty(&hdev->cmd_q))
1813 tasklet_schedule(&hdev->cmd_task);
1817 static inline void hci_role_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
1819 struct hci_ev_role_change *ev = (void *) skb->data;
1820 struct hci_conn *conn;
1822 BT_DBG("%s status %d", hdev->name, ev->status);
1826 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
1830 conn->link_mode &= ~HCI_LM_MASTER;
1832 conn->link_mode |= HCI_LM_MASTER;
1835 clear_bit(HCI_CONN_RSWITCH_PEND, &conn->pend);
1837 hci_role_switch_cfm(conn, ev->status, ev->role);
1840 hci_dev_unlock(hdev);
1843 static inline void hci_num_comp_pkts_evt(struct hci_dev *hdev, struct sk_buff *skb)
1845 struct hci_ev_num_comp_pkts *ev = (void *) skb->data;
1849 skb_pull(skb, sizeof(*ev));
1851 BT_DBG("%s num_hndl %d", hdev->name, ev->num_hndl);
1853 if (skb->len < ev->num_hndl * 4) {
1854 BT_DBG("%s bad parameters", hdev->name);
1858 tasklet_disable(&hdev->tx_task);
1860 for (i = 0, ptr = (__le16 *) skb->data; i < ev->num_hndl; i++) {
1861 struct hci_conn *conn;
1862 __u16 handle, count;
1864 handle = get_unaligned_le16(ptr++);
1865 count = get_unaligned_le16(ptr++);
1867 conn = hci_conn_hash_lookup_handle(hdev, handle);
1869 conn->sent -= count;
1871 if (conn->type == ACL_LINK) {
1872 hdev->acl_cnt += count;
1873 if (hdev->acl_cnt > hdev->acl_pkts)
1874 hdev->acl_cnt = hdev->acl_pkts;
1875 } else if (conn->type == LE_LINK) {
1876 if (hdev->le_pkts) {
1877 hdev->le_cnt += count;
1878 if (hdev->le_cnt > hdev->le_pkts)
1879 hdev->le_cnt = hdev->le_pkts;
1881 hdev->acl_cnt += count;
1882 if (hdev->acl_cnt > hdev->acl_pkts)
1883 hdev->acl_cnt = hdev->acl_pkts;
1886 hdev->sco_cnt += count;
1887 if (hdev->sco_cnt > hdev->sco_pkts)
1888 hdev->sco_cnt = hdev->sco_pkts;
1893 tasklet_schedule(&hdev->tx_task);
1895 tasklet_enable(&hdev->tx_task);
1898 static inline void hci_mode_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
1900 struct hci_ev_mode_change *ev = (void *) skb->data;
1901 struct hci_conn *conn;
1903 BT_DBG("%s status %d", hdev->name, ev->status);
1907 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1909 conn->mode = ev->mode;
1910 conn->interval = __le16_to_cpu(ev->interval);
1912 if (!test_and_clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend)) {
1913 if (conn->mode == HCI_CM_ACTIVE)
1914 conn->power_save = 1;
1916 conn->power_save = 0;
1919 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND, &conn->pend))
1920 hci_sco_setup(conn, ev->status);
1923 hci_dev_unlock(hdev);
1926 static inline void hci_pin_code_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
1928 struct hci_ev_pin_code_req *ev = (void *) skb->data;
1929 struct hci_conn *conn;
1931 BT_DBG("%s", hdev->name);
1935 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
1936 if (conn && conn->state == BT_CONNECTED) {
1937 hci_conn_hold(conn);
1938 conn->disc_timeout = HCI_PAIRING_TIMEOUT;
1942 if (!test_bit(HCI_PAIRABLE, &hdev->flags))
1943 hci_send_cmd(hdev, HCI_OP_PIN_CODE_NEG_REPLY,
1944 sizeof(ev->bdaddr), &ev->bdaddr);
1946 if (test_bit(HCI_MGMT, &hdev->flags))
1947 mgmt_pin_code_request(hdev->id, &ev->bdaddr);
1949 hci_dev_unlock(hdev);
1952 static inline void hci_link_key_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
1954 struct hci_ev_link_key_req *ev = (void *) skb->data;
1955 struct hci_cp_link_key_reply cp;
1956 struct hci_conn *conn;
1957 struct link_key *key;
1959 BT_DBG("%s", hdev->name);
1961 if (!test_bit(HCI_LINK_KEYS, &hdev->flags))
1966 key = hci_find_link_key(hdev, &ev->bdaddr);
1968 BT_DBG("%s link key not found for %s", hdev->name,
1969 batostr(&ev->bdaddr));
1973 BT_DBG("%s found key type %u for %s", hdev->name, key->type,
1974 batostr(&ev->bdaddr));
1976 if (!test_bit(HCI_DEBUG_KEYS, &hdev->flags) && key->type == 0x03) {
1977 BT_DBG("%s ignoring debug key", hdev->name);
1981 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
1983 if (key->type == 0x04 && conn && conn->auth_type != 0xff &&
1984 (conn->auth_type & 0x01)) {
1985 BT_DBG("%s ignoring unauthenticated key", hdev->name);
1989 bacpy(&cp.bdaddr, &ev->bdaddr);
1990 memcpy(cp.link_key, key->val, 16);
1992 hci_send_cmd(hdev, HCI_OP_LINK_KEY_REPLY, sizeof(cp), &cp);
1994 hci_dev_unlock(hdev);
1999 hci_send_cmd(hdev, HCI_OP_LINK_KEY_NEG_REPLY, 6, &ev->bdaddr);
2000 hci_dev_unlock(hdev);
2003 static inline void hci_link_key_notify_evt(struct hci_dev *hdev, struct sk_buff *skb)
2005 struct hci_ev_link_key_notify *ev = (void *) skb->data;
2006 struct hci_conn *conn;
2009 BT_DBG("%s", hdev->name);
2013 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
2015 hci_conn_hold(conn);
2016 conn->disc_timeout = HCI_DISCONN_TIMEOUT;
2017 pin_len = conn->pin_length;
2021 if (test_bit(HCI_LINK_KEYS, &hdev->flags))
2022 hci_add_link_key(hdev, 1, &ev->bdaddr, ev->link_key,
2023 ev->key_type, pin_len);
2025 hci_dev_unlock(hdev);
2028 static inline void hci_clock_offset_evt(struct hci_dev *hdev, struct sk_buff *skb)
2030 struct hci_ev_clock_offset *ev = (void *) skb->data;
2031 struct hci_conn *conn;
2033 BT_DBG("%s status %d", hdev->name, ev->status);
2037 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2038 if (conn && !ev->status) {
2039 struct inquiry_entry *ie;
2041 ie = hci_inquiry_cache_lookup(hdev, &conn->dst);
2043 ie->data.clock_offset = ev->clock_offset;
2044 ie->timestamp = jiffies;
2048 hci_dev_unlock(hdev);
2051 static inline void hci_pkt_type_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
2053 struct hci_ev_pkt_type_change *ev = (void *) skb->data;
2054 struct hci_conn *conn;
2056 BT_DBG("%s status %d", hdev->name, ev->status);
2060 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2061 if (conn && !ev->status)
2062 conn->pkt_type = __le16_to_cpu(ev->pkt_type);
2064 hci_dev_unlock(hdev);
2067 static inline void hci_pscan_rep_mode_evt(struct hci_dev *hdev, struct sk_buff *skb)
2069 struct hci_ev_pscan_rep_mode *ev = (void *) skb->data;
2070 struct inquiry_entry *ie;
2072 BT_DBG("%s", hdev->name);
2076 ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr);
2078 ie->data.pscan_rep_mode = ev->pscan_rep_mode;
2079 ie->timestamp = jiffies;
2082 hci_dev_unlock(hdev);
2085 static inline void hci_inquiry_result_with_rssi_evt(struct hci_dev *hdev, struct sk_buff *skb)
2087 struct inquiry_data data;
2088 int num_rsp = *((__u8 *) skb->data);
2090 BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
2097 if ((skb->len - 1) / num_rsp != sizeof(struct inquiry_info_with_rssi)) {
2098 struct inquiry_info_with_rssi_and_pscan_mode *info = (void *) (skb->data + 1);
2100 for (; num_rsp; num_rsp--) {
2101 bacpy(&data.bdaddr, &info->bdaddr);
2102 data.pscan_rep_mode = info->pscan_rep_mode;
2103 data.pscan_period_mode = info->pscan_period_mode;
2104 data.pscan_mode = info->pscan_mode;
2105 memcpy(data.dev_class, info->dev_class, 3);
2106 data.clock_offset = info->clock_offset;
2107 data.rssi = info->rssi;
2108 data.ssp_mode = 0x00;
2110 hci_inquiry_cache_update(hdev, &data);
2113 struct inquiry_info_with_rssi *info = (void *) (skb->data + 1);
2115 for (; num_rsp; num_rsp--) {
2116 bacpy(&data.bdaddr, &info->bdaddr);
2117 data.pscan_rep_mode = info->pscan_rep_mode;
2118 data.pscan_period_mode = info->pscan_period_mode;
2119 data.pscan_mode = 0x00;
2120 memcpy(data.dev_class, info->dev_class, 3);
2121 data.clock_offset = info->clock_offset;
2122 data.rssi = info->rssi;
2123 data.ssp_mode = 0x00;
2125 hci_inquiry_cache_update(hdev, &data);
2129 hci_dev_unlock(hdev);
2132 static inline void hci_remote_ext_features_evt(struct hci_dev *hdev, struct sk_buff *skb)
2134 struct hci_ev_remote_ext_features *ev = (void *) skb->data;
2135 struct hci_conn *conn;
2137 BT_DBG("%s", hdev->name);
2141 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2145 if (!ev->status && ev->page == 0x01) {
2146 struct inquiry_entry *ie;
2148 ie = hci_inquiry_cache_lookup(hdev, &conn->dst);
2150 ie->data.ssp_mode = (ev->features[0] & 0x01);
2152 conn->ssp_mode = (ev->features[0] & 0x01);
2155 if (conn->state != BT_CONFIG)
2159 struct hci_cp_remote_name_req cp;
2160 memset(&cp, 0, sizeof(cp));
2161 bacpy(&cp.bdaddr, &conn->dst);
2162 cp.pscan_rep_mode = 0x02;
2163 hci_send_cmd(hdev, HCI_OP_REMOTE_NAME_REQ, sizeof(cp), &cp);
2166 if (!hci_outgoing_auth_needed(hdev, conn)) {
2167 conn->state = BT_CONNECTED;
2168 hci_proto_connect_cfm(conn, ev->status);
2173 hci_dev_unlock(hdev);
2176 static inline void hci_sync_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
2178 struct hci_ev_sync_conn_complete *ev = (void *) skb->data;
2179 struct hci_conn *conn;
2181 BT_DBG("%s status %d", hdev->name, ev->status);
2185 conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
2187 if (ev->link_type == ESCO_LINK)
2190 conn = hci_conn_hash_lookup_ba(hdev, ESCO_LINK, &ev->bdaddr);
2194 conn->type = SCO_LINK;
2197 switch (ev->status) {
2199 conn->handle = __le16_to_cpu(ev->handle);
2200 conn->state = BT_CONNECTED;
2202 hci_conn_hold_device(conn);
2203 hci_conn_add_sysfs(conn);
2206 case 0x11: /* Unsupported Feature or Parameter Value */
2207 case 0x1c: /* SCO interval rejected */
2208 case 0x1a: /* Unsupported Remote Feature */
2209 case 0x1f: /* Unspecified error */
2210 if (conn->out && conn->attempt < 2) {
2211 conn->pkt_type = (hdev->esco_type & SCO_ESCO_MASK) |
2212 (hdev->esco_type & EDR_ESCO_MASK);
2213 hci_setup_sync(conn, conn->link->handle);
2219 conn->state = BT_CLOSED;
2223 hci_proto_connect_cfm(conn, ev->status);
2228 hci_dev_unlock(hdev);
2231 static inline void hci_sync_conn_changed_evt(struct hci_dev *hdev, struct sk_buff *skb)
2233 BT_DBG("%s", hdev->name);
2236 static inline void hci_sniff_subrate_evt(struct hci_dev *hdev, struct sk_buff *skb)
2238 struct hci_ev_sniff_subrate *ev = (void *) skb->data;
2239 struct hci_conn *conn;
2241 BT_DBG("%s status %d", hdev->name, ev->status);
2245 conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
2249 hci_dev_unlock(hdev);
2252 static inline void hci_extended_inquiry_result_evt(struct hci_dev *hdev, struct sk_buff *skb)
2254 struct inquiry_data data;
2255 struct extended_inquiry_info *info = (void *) (skb->data + 1);
2256 int num_rsp = *((__u8 *) skb->data);
2258 BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
2265 for (; num_rsp; num_rsp--) {
2266 bacpy(&data.bdaddr, &info->bdaddr);
2267 data.pscan_rep_mode = info->pscan_rep_mode;
2268 data.pscan_period_mode = info->pscan_period_mode;
2269 data.pscan_mode = 0x00;
2270 memcpy(data.dev_class, info->dev_class, 3);
2271 data.clock_offset = info->clock_offset;
2272 data.rssi = info->rssi;
2273 data.ssp_mode = 0x01;
2275 hci_inquiry_cache_update(hdev, &data);
2278 hci_dev_unlock(hdev);
2281 static inline u8 hci_get_auth_req(struct hci_conn *conn)
2283 /* If remote requests dedicated bonding follow that lead */
2284 if (conn->remote_auth == 0x02 || conn->remote_auth == 0x03) {
2285 /* If both remote and local IO capabilities allow MITM
2286 * protection then require it, otherwise don't */
2287 if (conn->remote_cap == 0x03 || conn->io_capability == 0x03)
2293 /* If remote requests no-bonding follow that lead */
2294 if (conn->remote_auth == 0x00 || conn->remote_auth == 0x01)
2297 return conn->auth_type;
2300 static inline void hci_io_capa_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
2302 struct hci_ev_io_capa_request *ev = (void *) skb->data;
2303 struct hci_conn *conn;
2305 BT_DBG("%s", hdev->name);
2309 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
2313 hci_conn_hold(conn);
2315 if (!test_bit(HCI_MGMT, &hdev->flags))
2318 if (test_bit(HCI_PAIRABLE, &hdev->flags) ||
2319 (conn->remote_auth & ~0x01) == HCI_AT_NO_BONDING) {
2320 struct hci_cp_io_capability_reply cp;
2322 bacpy(&cp.bdaddr, &ev->bdaddr);
2323 cp.capability = conn->io_capability;
2325 cp.authentication = hci_get_auth_req(conn);
2327 hci_send_cmd(hdev, HCI_OP_IO_CAPABILITY_REPLY,
2330 struct hci_cp_io_capability_neg_reply cp;
2332 bacpy(&cp.bdaddr, &ev->bdaddr);
2333 cp.reason = 0x16; /* Pairing not allowed */
2335 hci_send_cmd(hdev, HCI_OP_IO_CAPABILITY_NEG_REPLY,
2340 hci_dev_unlock(hdev);
2343 static inline void hci_io_capa_reply_evt(struct hci_dev *hdev, struct sk_buff *skb)
2345 struct hci_ev_io_capa_reply *ev = (void *) skb->data;
2346 struct hci_conn *conn;
2348 BT_DBG("%s", hdev->name);
2352 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
2356 hci_conn_hold(conn);
2358 conn->remote_cap = ev->capability;
2359 conn->remote_oob = ev->oob_data;
2360 conn->remote_auth = ev->authentication;
2363 hci_dev_unlock(hdev);
2366 static inline void hci_simple_pair_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
2368 struct hci_ev_simple_pair_complete *ev = (void *) skb->data;
2369 struct hci_conn *conn;
2371 BT_DBG("%s", hdev->name);
2375 conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
2379 hci_dev_unlock(hdev);
2382 static inline void hci_remote_host_features_evt(struct hci_dev *hdev, struct sk_buff *skb)
2384 struct hci_ev_remote_host_features *ev = (void *) skb->data;
2385 struct inquiry_entry *ie;
2387 BT_DBG("%s", hdev->name);
2391 ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr);
2393 ie->data.ssp_mode = (ev->features[0] & 0x01);
2395 hci_dev_unlock(hdev);
2398 static inline void hci_le_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
2400 struct hci_ev_le_conn_complete *ev = (void *) skb->data;
2401 struct hci_conn *conn;
2403 BT_DBG("%s status %d", hdev->name, ev->status);
2407 conn = hci_conn_hash_lookup_ba(hdev, LE_LINK, &ev->bdaddr);
2409 conn = hci_conn_add(hdev, LE_LINK, &ev->bdaddr);
2411 BT_ERR("No memory for new connection");
2412 hci_dev_unlock(hdev);
2418 hci_proto_connect_cfm(conn, ev->status);
2419 conn->state = BT_CLOSED;
2424 conn->handle = __le16_to_cpu(ev->handle);
2425 conn->state = BT_CONNECTED;
2427 hci_conn_hold_device(conn);
2428 hci_conn_add_sysfs(conn);
2430 hci_proto_connect_cfm(conn, ev->status);
2433 hci_dev_unlock(hdev);
2436 static inline void hci_le_meta_evt(struct hci_dev *hdev, struct sk_buff *skb)
2438 struct hci_ev_le_meta *le_ev = (void *) skb->data;
2440 skb_pull(skb, sizeof(*le_ev));
2442 switch (le_ev->subevent) {
2443 case HCI_EV_LE_CONN_COMPLETE:
2444 hci_le_conn_complete_evt(hdev, skb);
2452 void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb)
2454 struct hci_event_hdr *hdr = (void *) skb->data;
2455 __u8 event = hdr->evt;
2457 skb_pull(skb, HCI_EVENT_HDR_SIZE);
2460 case HCI_EV_INQUIRY_COMPLETE:
2461 hci_inquiry_complete_evt(hdev, skb);
2464 case HCI_EV_INQUIRY_RESULT:
2465 hci_inquiry_result_evt(hdev, skb);
2468 case HCI_EV_CONN_COMPLETE:
2469 hci_conn_complete_evt(hdev, skb);
2472 case HCI_EV_CONN_REQUEST:
2473 hci_conn_request_evt(hdev, skb);
2476 case HCI_EV_DISCONN_COMPLETE:
2477 hci_disconn_complete_evt(hdev, skb);
2480 case HCI_EV_AUTH_COMPLETE:
2481 hci_auth_complete_evt(hdev, skb);
2484 case HCI_EV_REMOTE_NAME:
2485 hci_remote_name_evt(hdev, skb);
2488 case HCI_EV_ENCRYPT_CHANGE:
2489 hci_encrypt_change_evt(hdev, skb);
2492 case HCI_EV_CHANGE_LINK_KEY_COMPLETE:
2493 hci_change_link_key_complete_evt(hdev, skb);
2496 case HCI_EV_REMOTE_FEATURES:
2497 hci_remote_features_evt(hdev, skb);
2500 case HCI_EV_REMOTE_VERSION:
2501 hci_remote_version_evt(hdev, skb);
2504 case HCI_EV_QOS_SETUP_COMPLETE:
2505 hci_qos_setup_complete_evt(hdev, skb);
2508 case HCI_EV_CMD_COMPLETE:
2509 hci_cmd_complete_evt(hdev, skb);
2512 case HCI_EV_CMD_STATUS:
2513 hci_cmd_status_evt(hdev, skb);
2516 case HCI_EV_ROLE_CHANGE:
2517 hci_role_change_evt(hdev, skb);
2520 case HCI_EV_NUM_COMP_PKTS:
2521 hci_num_comp_pkts_evt(hdev, skb);
2524 case HCI_EV_MODE_CHANGE:
2525 hci_mode_change_evt(hdev, skb);
2528 case HCI_EV_PIN_CODE_REQ:
2529 hci_pin_code_request_evt(hdev, skb);
2532 case HCI_EV_LINK_KEY_REQ:
2533 hci_link_key_request_evt(hdev, skb);
2536 case HCI_EV_LINK_KEY_NOTIFY:
2537 hci_link_key_notify_evt(hdev, skb);
2540 case HCI_EV_CLOCK_OFFSET:
2541 hci_clock_offset_evt(hdev, skb);
2544 case HCI_EV_PKT_TYPE_CHANGE:
2545 hci_pkt_type_change_evt(hdev, skb);
2548 case HCI_EV_PSCAN_REP_MODE:
2549 hci_pscan_rep_mode_evt(hdev, skb);
2552 case HCI_EV_INQUIRY_RESULT_WITH_RSSI:
2553 hci_inquiry_result_with_rssi_evt(hdev, skb);
2556 case HCI_EV_REMOTE_EXT_FEATURES:
2557 hci_remote_ext_features_evt(hdev, skb);
2560 case HCI_EV_SYNC_CONN_COMPLETE:
2561 hci_sync_conn_complete_evt(hdev, skb);
2564 case HCI_EV_SYNC_CONN_CHANGED:
2565 hci_sync_conn_changed_evt(hdev, skb);
2568 case HCI_EV_SNIFF_SUBRATE:
2569 hci_sniff_subrate_evt(hdev, skb);
2572 case HCI_EV_EXTENDED_INQUIRY_RESULT:
2573 hci_extended_inquiry_result_evt(hdev, skb);
2576 case HCI_EV_IO_CAPA_REQUEST:
2577 hci_io_capa_request_evt(hdev, skb);
2580 case HCI_EV_IO_CAPA_REPLY:
2581 hci_io_capa_reply_evt(hdev, skb);
2584 case HCI_EV_SIMPLE_PAIR_COMPLETE:
2585 hci_simple_pair_complete_evt(hdev, skb);
2588 case HCI_EV_REMOTE_HOST_FEATURES:
2589 hci_remote_host_features_evt(hdev, skb);
2592 case HCI_EV_LE_META:
2593 hci_le_meta_evt(hdev, skb);
2597 BT_DBG("%s event 0x%x", hdev->name, event);
2602 hdev->stat.evt_rx++;
2605 /* Generate internal stack event */
2606 void hci_si_event(struct hci_dev *hdev, int type, int dlen, void *data)
2608 struct hci_event_hdr *hdr;
2609 struct hci_ev_stack_internal *ev;
2610 struct sk_buff *skb;
2612 skb = bt_skb_alloc(HCI_EVENT_HDR_SIZE + sizeof(*ev) + dlen, GFP_ATOMIC);
2616 hdr = (void *) skb_put(skb, HCI_EVENT_HDR_SIZE);
2617 hdr->evt = HCI_EV_STACK_INTERNAL;
2618 hdr->plen = sizeof(*ev) + dlen;
2620 ev = (void *) skb_put(skb, sizeof(*ev) + dlen);
2622 memcpy(ev->data, data, dlen);
2624 bt_cb(skb)->incoming = 1;
2625 __net_timestamp(skb);
2627 bt_cb(skb)->pkt_type = HCI_EVENT_PKT;
2628 skb->dev = (void *) hdev;
2629 hci_send_to_sock(hdev, skb, NULL);