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 <asm/unaligned.h>
29 #include <net/bluetooth/bluetooth.h>
30 #include <net/bluetooth/hci_core.h>
31 #include <net/bluetooth/mgmt.h>
32 #include <net/bluetooth/a2mp.h>
33 #include <net/bluetooth/amp.h>
35 /* Handle HCI Event packets */
37 static void hci_cc_inquiry_cancel(struct hci_dev
*hdev
, struct sk_buff
*skb
)
39 __u8 status
= *((__u8
*) skb
->data
);
41 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
46 clear_bit(HCI_INQUIRY
, &hdev
->flags
);
47 smp_mb__after_clear_bit(); /* wake_up_bit advises about this barrier */
48 wake_up_bit(&hdev
->flags
, HCI_INQUIRY
);
50 hci_conn_check_pending(hdev
);
53 static void hci_cc_periodic_inq(struct hci_dev
*hdev
, struct sk_buff
*skb
)
55 __u8 status
= *((__u8
*) skb
->data
);
57 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
62 set_bit(HCI_PERIODIC_INQ
, &hdev
->dev_flags
);
65 static void hci_cc_exit_periodic_inq(struct hci_dev
*hdev
, struct sk_buff
*skb
)
67 __u8 status
= *((__u8
*) skb
->data
);
69 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
74 clear_bit(HCI_PERIODIC_INQ
, &hdev
->dev_flags
);
76 hci_conn_check_pending(hdev
);
79 static void hci_cc_remote_name_req_cancel(struct hci_dev
*hdev
,
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%2.2x", 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%2.2x", 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%2.2x", 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
,
154 struct hci_rp_read_def_link_policy
*rp
= (void *) skb
->data
;
156 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
161 hdev
->link_policy
= __le16_to_cpu(rp
->policy
);
164 static void hci_cc_write_def_link_policy(struct hci_dev
*hdev
,
167 __u8 status
= *((__u8
*) skb
->data
);
170 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
172 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_DEF_LINK_POLICY
);
177 hdev
->link_policy
= get_unaligned_le16(sent
);
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%2.2x", hdev
->name
, status
);
186 clear_bit(HCI_RESET
, &hdev
->flags
);
188 /* Reset all non-persistent flags */
189 hdev
->dev_flags
&= ~HCI_PERSISTENT_MASK
;
191 hdev
->discovery
.state
= DISCOVERY_STOPPED
;
192 hdev
->inq_tx_power
= HCI_TX_POWER_INVALID
;
193 hdev
->adv_tx_power
= HCI_TX_POWER_INVALID
;
195 memset(hdev
->adv_data
, 0, sizeof(hdev
->adv_data
));
196 hdev
->adv_data_len
= 0;
199 static void hci_cc_write_local_name(struct hci_dev
*hdev
, struct sk_buff
*skb
)
201 __u8 status
= *((__u8
*) skb
->data
);
204 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
206 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_LOCAL_NAME
);
212 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
213 mgmt_set_local_name_complete(hdev
, sent
, status
);
215 memcpy(hdev
->dev_name
, sent
, HCI_MAX_NAME_LENGTH
);
217 hci_dev_unlock(hdev
);
220 static void hci_cc_read_local_name(struct hci_dev
*hdev
, struct sk_buff
*skb
)
222 struct hci_rp_read_local_name
*rp
= (void *) skb
->data
;
224 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
229 if (test_bit(HCI_SETUP
, &hdev
->dev_flags
))
230 memcpy(hdev
->dev_name
, rp
->name
, HCI_MAX_NAME_LENGTH
);
233 static void hci_cc_write_auth_enable(struct hci_dev
*hdev
, struct sk_buff
*skb
)
235 __u8 status
= *((__u8
*) skb
->data
);
238 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
240 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_AUTH_ENABLE
);
245 __u8 param
= *((__u8
*) sent
);
247 if (param
== AUTH_ENABLED
)
248 set_bit(HCI_AUTH
, &hdev
->flags
);
250 clear_bit(HCI_AUTH
, &hdev
->flags
);
253 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
254 mgmt_auth_enable_complete(hdev
, status
);
257 static void hci_cc_write_encrypt_mode(struct hci_dev
*hdev
, struct sk_buff
*skb
)
259 __u8 status
= *((__u8
*) skb
->data
);
262 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
264 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_ENCRYPT_MODE
);
269 __u8 param
= *((__u8
*) sent
);
272 set_bit(HCI_ENCRYPT
, &hdev
->flags
);
274 clear_bit(HCI_ENCRYPT
, &hdev
->flags
);
278 static void hci_cc_write_scan_enable(struct hci_dev
*hdev
, struct sk_buff
*skb
)
280 __u8 param
, status
= *((__u8
*) skb
->data
);
281 int old_pscan
, old_iscan
;
284 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
286 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_SCAN_ENABLE
);
290 param
= *((__u8
*) sent
);
295 mgmt_write_scan_failed(hdev
, param
, status
);
296 hdev
->discov_timeout
= 0;
300 /* We need to ensure that we set this back on if someone changed
301 * the scan mode through a raw HCI socket.
303 set_bit(HCI_BREDR_ENABLED
, &hdev
->dev_flags
);
305 old_pscan
= test_and_clear_bit(HCI_PSCAN
, &hdev
->flags
);
306 old_iscan
= test_and_clear_bit(HCI_ISCAN
, &hdev
->flags
);
308 if (param
& SCAN_INQUIRY
) {
309 set_bit(HCI_ISCAN
, &hdev
->flags
);
311 mgmt_discoverable(hdev
, 1);
312 if (hdev
->discov_timeout
> 0) {
313 int to
= msecs_to_jiffies(hdev
->discov_timeout
* 1000);
314 queue_delayed_work(hdev
->workqueue
, &hdev
->discov_off
,
317 } else if (old_iscan
)
318 mgmt_discoverable(hdev
, 0);
320 if (param
& SCAN_PAGE
) {
321 set_bit(HCI_PSCAN
, &hdev
->flags
);
323 mgmt_connectable(hdev
, 1);
324 } else if (old_pscan
)
325 mgmt_connectable(hdev
, 0);
328 hci_dev_unlock(hdev
);
331 static void hci_cc_read_class_of_dev(struct hci_dev
*hdev
, struct sk_buff
*skb
)
333 struct hci_rp_read_class_of_dev
*rp
= (void *) skb
->data
;
335 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
340 memcpy(hdev
->dev_class
, rp
->dev_class
, 3);
342 BT_DBG("%s class 0x%.2x%.2x%.2x", hdev
->name
,
343 hdev
->dev_class
[2], hdev
->dev_class
[1], hdev
->dev_class
[0]);
346 static void hci_cc_write_class_of_dev(struct hci_dev
*hdev
, struct sk_buff
*skb
)
348 __u8 status
= *((__u8
*) skb
->data
);
351 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
353 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_CLASS_OF_DEV
);
360 memcpy(hdev
->dev_class
, sent
, 3);
362 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
363 mgmt_set_class_of_dev_complete(hdev
, sent
, status
);
365 hci_dev_unlock(hdev
);
368 static void hci_cc_read_voice_setting(struct hci_dev
*hdev
, struct sk_buff
*skb
)
370 struct hci_rp_read_voice_setting
*rp
= (void *) skb
->data
;
373 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
378 setting
= __le16_to_cpu(rp
->voice_setting
);
380 if (hdev
->voice_setting
== setting
)
383 hdev
->voice_setting
= setting
;
385 BT_DBG("%s voice setting 0x%4.4x", hdev
->name
, setting
);
388 hdev
->notify(hdev
, HCI_NOTIFY_VOICE_SETTING
);
391 static void hci_cc_write_voice_setting(struct hci_dev
*hdev
,
394 __u8 status
= *((__u8
*) skb
->data
);
398 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
403 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_VOICE_SETTING
);
407 setting
= get_unaligned_le16(sent
);
409 if (hdev
->voice_setting
== setting
)
412 hdev
->voice_setting
= setting
;
414 BT_DBG("%s voice setting 0x%4.4x", hdev
->name
, setting
);
417 hdev
->notify(hdev
, HCI_NOTIFY_VOICE_SETTING
);
420 static void hci_cc_write_ssp_mode(struct hci_dev
*hdev
, struct sk_buff
*skb
)
422 __u8 status
= *((__u8
*) skb
->data
);
423 struct hci_cp_write_ssp_mode
*sent
;
425 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
427 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_SSP_MODE
);
433 hdev
->features
[1][0] |= LMP_HOST_SSP
;
435 hdev
->features
[1][0] &= ~LMP_HOST_SSP
;
438 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
439 mgmt_ssp_enable_complete(hdev
, sent
->mode
, status
);
442 set_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
);
444 clear_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
);
448 static void hci_cc_read_local_version(struct hci_dev
*hdev
, struct sk_buff
*skb
)
450 struct hci_rp_read_local_version
*rp
= (void *) skb
->data
;
452 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
457 hdev
->hci_ver
= rp
->hci_ver
;
458 hdev
->hci_rev
= __le16_to_cpu(rp
->hci_rev
);
459 hdev
->lmp_ver
= rp
->lmp_ver
;
460 hdev
->manufacturer
= __le16_to_cpu(rp
->manufacturer
);
461 hdev
->lmp_subver
= __le16_to_cpu(rp
->lmp_subver
);
463 BT_DBG("%s manufacturer 0x%4.4x hci ver %d:%d", hdev
->name
,
464 hdev
->manufacturer
, hdev
->hci_ver
, hdev
->hci_rev
);
467 static void hci_cc_read_local_commands(struct hci_dev
*hdev
,
470 struct hci_rp_read_local_commands
*rp
= (void *) skb
->data
;
472 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
475 memcpy(hdev
->commands
, rp
->commands
, sizeof(hdev
->commands
));
478 static void hci_cc_read_local_features(struct hci_dev
*hdev
,
481 struct hci_rp_read_local_features
*rp
= (void *) skb
->data
;
483 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
488 memcpy(hdev
->features
, rp
->features
, 8);
490 /* Adjust default settings according to features
491 * supported by device. */
493 if (hdev
->features
[0][0] & LMP_3SLOT
)
494 hdev
->pkt_type
|= (HCI_DM3
| HCI_DH3
);
496 if (hdev
->features
[0][0] & LMP_5SLOT
)
497 hdev
->pkt_type
|= (HCI_DM5
| HCI_DH5
);
499 if (hdev
->features
[0][1] & LMP_HV2
) {
500 hdev
->pkt_type
|= (HCI_HV2
);
501 hdev
->esco_type
|= (ESCO_HV2
);
504 if (hdev
->features
[0][1] & LMP_HV3
) {
505 hdev
->pkt_type
|= (HCI_HV3
);
506 hdev
->esco_type
|= (ESCO_HV3
);
509 if (lmp_esco_capable(hdev
))
510 hdev
->esco_type
|= (ESCO_EV3
);
512 if (hdev
->features
[0][4] & LMP_EV4
)
513 hdev
->esco_type
|= (ESCO_EV4
);
515 if (hdev
->features
[0][4] & LMP_EV5
)
516 hdev
->esco_type
|= (ESCO_EV5
);
518 if (hdev
->features
[0][5] & LMP_EDR_ESCO_2M
)
519 hdev
->esco_type
|= (ESCO_2EV3
);
521 if (hdev
->features
[0][5] & LMP_EDR_ESCO_3M
)
522 hdev
->esco_type
|= (ESCO_3EV3
);
524 if (hdev
->features
[0][5] & LMP_EDR_3S_ESCO
)
525 hdev
->esco_type
|= (ESCO_2EV5
| ESCO_3EV5
);
527 BT_DBG("%s features 0x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x", hdev
->name
,
528 hdev
->features
[0][0], hdev
->features
[0][1],
529 hdev
->features
[0][2], hdev
->features
[0][3],
530 hdev
->features
[0][4], hdev
->features
[0][5],
531 hdev
->features
[0][6], hdev
->features
[0][7]);
534 static void hci_cc_read_local_ext_features(struct hci_dev
*hdev
,
537 struct hci_rp_read_local_ext_features
*rp
= (void *) skb
->data
;
539 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
544 hdev
->max_page
= rp
->max_page
;
546 if (rp
->page
< HCI_MAX_PAGES
)
547 memcpy(hdev
->features
[rp
->page
], rp
->features
, 8);
550 static void hci_cc_read_flow_control_mode(struct hci_dev
*hdev
,
553 struct hci_rp_read_flow_control_mode
*rp
= (void *) skb
->data
;
555 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
558 hdev
->flow_ctl_mode
= rp
->mode
;
561 static void hci_cc_read_buffer_size(struct hci_dev
*hdev
, struct sk_buff
*skb
)
563 struct hci_rp_read_buffer_size
*rp
= (void *) skb
->data
;
565 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
570 hdev
->acl_mtu
= __le16_to_cpu(rp
->acl_mtu
);
571 hdev
->sco_mtu
= rp
->sco_mtu
;
572 hdev
->acl_pkts
= __le16_to_cpu(rp
->acl_max_pkt
);
573 hdev
->sco_pkts
= __le16_to_cpu(rp
->sco_max_pkt
);
575 if (test_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE
, &hdev
->quirks
)) {
580 hdev
->acl_cnt
= hdev
->acl_pkts
;
581 hdev
->sco_cnt
= hdev
->sco_pkts
;
583 BT_DBG("%s acl mtu %d:%d sco mtu %d:%d", hdev
->name
, hdev
->acl_mtu
,
584 hdev
->acl_pkts
, hdev
->sco_mtu
, hdev
->sco_pkts
);
587 static void hci_cc_read_bd_addr(struct hci_dev
*hdev
, struct sk_buff
*skb
)
589 struct hci_rp_read_bd_addr
*rp
= (void *) skb
->data
;
591 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
594 bacpy(&hdev
->bdaddr
, &rp
->bdaddr
);
597 static void hci_cc_read_page_scan_activity(struct hci_dev
*hdev
,
600 struct hci_rp_read_page_scan_activity
*rp
= (void *) skb
->data
;
602 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
604 if (test_bit(HCI_INIT
, &hdev
->flags
) && !rp
->status
) {
605 hdev
->page_scan_interval
= __le16_to_cpu(rp
->interval
);
606 hdev
->page_scan_window
= __le16_to_cpu(rp
->window
);
610 static void hci_cc_write_page_scan_activity(struct hci_dev
*hdev
,
613 u8 status
= *((u8
*) skb
->data
);
614 struct hci_cp_write_page_scan_activity
*sent
;
616 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
621 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_PAGE_SCAN_ACTIVITY
);
625 hdev
->page_scan_interval
= __le16_to_cpu(sent
->interval
);
626 hdev
->page_scan_window
= __le16_to_cpu(sent
->window
);
629 static void hci_cc_read_page_scan_type(struct hci_dev
*hdev
,
632 struct hci_rp_read_page_scan_type
*rp
= (void *) skb
->data
;
634 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
636 if (test_bit(HCI_INIT
, &hdev
->flags
) && !rp
->status
)
637 hdev
->page_scan_type
= rp
->type
;
640 static void hci_cc_write_page_scan_type(struct hci_dev
*hdev
,
643 u8 status
= *((u8
*) skb
->data
);
646 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
651 type
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_PAGE_SCAN_TYPE
);
653 hdev
->page_scan_type
= *type
;
656 static void hci_cc_read_data_block_size(struct hci_dev
*hdev
,
659 struct hci_rp_read_data_block_size
*rp
= (void *) skb
->data
;
661 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
666 hdev
->block_mtu
= __le16_to_cpu(rp
->max_acl_len
);
667 hdev
->block_len
= __le16_to_cpu(rp
->block_len
);
668 hdev
->num_blocks
= __le16_to_cpu(rp
->num_blocks
);
670 hdev
->block_cnt
= hdev
->num_blocks
;
672 BT_DBG("%s blk mtu %d cnt %d len %d", hdev
->name
, hdev
->block_mtu
,
673 hdev
->block_cnt
, hdev
->block_len
);
676 static void hci_cc_read_local_amp_info(struct hci_dev
*hdev
,
679 struct hci_rp_read_local_amp_info
*rp
= (void *) skb
->data
;
681 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
686 hdev
->amp_status
= rp
->amp_status
;
687 hdev
->amp_total_bw
= __le32_to_cpu(rp
->total_bw
);
688 hdev
->amp_max_bw
= __le32_to_cpu(rp
->max_bw
);
689 hdev
->amp_min_latency
= __le32_to_cpu(rp
->min_latency
);
690 hdev
->amp_max_pdu
= __le32_to_cpu(rp
->max_pdu
);
691 hdev
->amp_type
= rp
->amp_type
;
692 hdev
->amp_pal_cap
= __le16_to_cpu(rp
->pal_cap
);
693 hdev
->amp_assoc_size
= __le16_to_cpu(rp
->max_assoc_size
);
694 hdev
->amp_be_flush_to
= __le32_to_cpu(rp
->be_flush_to
);
695 hdev
->amp_max_flush_to
= __le32_to_cpu(rp
->max_flush_to
);
698 a2mp_send_getinfo_rsp(hdev
);
701 static void hci_cc_read_local_amp_assoc(struct hci_dev
*hdev
,
704 struct hci_rp_read_local_amp_assoc
*rp
= (void *) skb
->data
;
705 struct amp_assoc
*assoc
= &hdev
->loc_assoc
;
706 size_t rem_len
, frag_len
;
708 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
713 frag_len
= skb
->len
- sizeof(*rp
);
714 rem_len
= __le16_to_cpu(rp
->rem_len
);
716 if (rem_len
> frag_len
) {
717 BT_DBG("frag_len %zu rem_len %zu", frag_len
, rem_len
);
719 memcpy(assoc
->data
+ assoc
->offset
, rp
->frag
, frag_len
);
720 assoc
->offset
+= frag_len
;
722 /* Read other fragments */
723 amp_read_loc_assoc_frag(hdev
, rp
->phy_handle
);
728 memcpy(assoc
->data
+ assoc
->offset
, rp
->frag
, rem_len
);
729 assoc
->len
= assoc
->offset
+ rem_len
;
733 /* Send A2MP Rsp when all fragments are received */
734 a2mp_send_getampassoc_rsp(hdev
, rp
->status
);
735 a2mp_send_create_phy_link_req(hdev
, rp
->status
);
738 static void hci_cc_read_inq_rsp_tx_power(struct hci_dev
*hdev
,
741 struct hci_rp_read_inq_rsp_tx_power
*rp
= (void *) skb
->data
;
743 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
746 hdev
->inq_tx_power
= rp
->tx_power
;
749 static void hci_cc_pin_code_reply(struct hci_dev
*hdev
, struct sk_buff
*skb
)
751 struct hci_rp_pin_code_reply
*rp
= (void *) skb
->data
;
752 struct hci_cp_pin_code_reply
*cp
;
753 struct hci_conn
*conn
;
755 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
759 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
760 mgmt_pin_code_reply_complete(hdev
, &rp
->bdaddr
, rp
->status
);
765 cp
= hci_sent_cmd_data(hdev
, HCI_OP_PIN_CODE_REPLY
);
769 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &cp
->bdaddr
);
771 conn
->pin_length
= cp
->pin_len
;
774 hci_dev_unlock(hdev
);
777 static void hci_cc_pin_code_neg_reply(struct hci_dev
*hdev
, struct sk_buff
*skb
)
779 struct hci_rp_pin_code_neg_reply
*rp
= (void *) skb
->data
;
781 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
785 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
786 mgmt_pin_code_neg_reply_complete(hdev
, &rp
->bdaddr
,
789 hci_dev_unlock(hdev
);
792 static void hci_cc_le_read_buffer_size(struct hci_dev
*hdev
,
795 struct hci_rp_le_read_buffer_size
*rp
= (void *) skb
->data
;
797 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
802 hdev
->le_mtu
= __le16_to_cpu(rp
->le_mtu
);
803 hdev
->le_pkts
= rp
->le_max_pkt
;
805 hdev
->le_cnt
= hdev
->le_pkts
;
807 BT_DBG("%s le mtu %d:%d", hdev
->name
, hdev
->le_mtu
, hdev
->le_pkts
);
810 static void hci_cc_le_read_local_features(struct hci_dev
*hdev
,
813 struct hci_rp_le_read_local_features
*rp
= (void *) skb
->data
;
815 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
818 memcpy(hdev
->le_features
, rp
->features
, 8);
821 static void hci_cc_le_read_adv_tx_power(struct hci_dev
*hdev
,
824 struct hci_rp_le_read_adv_tx_power
*rp
= (void *) skb
->data
;
826 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
829 hdev
->adv_tx_power
= rp
->tx_power
;
832 static void hci_cc_user_confirm_reply(struct hci_dev
*hdev
, struct sk_buff
*skb
)
834 struct hci_rp_user_confirm_reply
*rp
= (void *) skb
->data
;
836 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
840 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
841 mgmt_user_confirm_reply_complete(hdev
, &rp
->bdaddr
, ACL_LINK
, 0,
844 hci_dev_unlock(hdev
);
847 static void hci_cc_user_confirm_neg_reply(struct hci_dev
*hdev
,
850 struct hci_rp_user_confirm_reply
*rp
= (void *) skb
->data
;
852 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
856 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
857 mgmt_user_confirm_neg_reply_complete(hdev
, &rp
->bdaddr
,
858 ACL_LINK
, 0, rp
->status
);
860 hci_dev_unlock(hdev
);
863 static void hci_cc_user_passkey_reply(struct hci_dev
*hdev
, struct sk_buff
*skb
)
865 struct hci_rp_user_confirm_reply
*rp
= (void *) skb
->data
;
867 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
871 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
872 mgmt_user_passkey_reply_complete(hdev
, &rp
->bdaddr
, ACL_LINK
,
875 hci_dev_unlock(hdev
);
878 static void hci_cc_user_passkey_neg_reply(struct hci_dev
*hdev
,
881 struct hci_rp_user_confirm_reply
*rp
= (void *) skb
->data
;
883 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
887 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
888 mgmt_user_passkey_neg_reply_complete(hdev
, &rp
->bdaddr
,
889 ACL_LINK
, 0, rp
->status
);
891 hci_dev_unlock(hdev
);
894 static void hci_cc_read_local_oob_data_reply(struct hci_dev
*hdev
,
897 struct hci_rp_read_local_oob_data
*rp
= (void *) skb
->data
;
899 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
902 mgmt_read_local_oob_data_reply_complete(hdev
, rp
->hash
,
903 rp
->randomizer
, rp
->status
);
904 hci_dev_unlock(hdev
);
907 static void hci_cc_le_set_adv_enable(struct hci_dev
*hdev
, struct sk_buff
*skb
)
909 __u8
*sent
, status
= *((__u8
*) skb
->data
);
911 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
913 sent
= hci_sent_cmd_data(hdev
, HCI_OP_LE_SET_ADV_ENABLE
);
921 set_bit(HCI_ADVERTISING
, &hdev
->dev_flags
);
923 clear_bit(HCI_ADVERTISING
, &hdev
->dev_flags
);
926 if (!test_bit(HCI_INIT
, &hdev
->flags
)) {
927 struct hci_request req
;
929 hci_req_init(&req
, hdev
);
931 hci_req_run(&req
, NULL
);
934 hci_dev_unlock(hdev
);
937 static void hci_cc_le_set_scan_enable(struct hci_dev
*hdev
,
940 struct hci_cp_le_set_scan_enable
*cp
;
941 __u8 status
= *((__u8
*) skb
->data
);
943 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
945 cp
= hci_sent_cmd_data(hdev
, HCI_OP_LE_SET_SCAN_ENABLE
);
952 switch (cp
->enable
) {
954 set_bit(HCI_LE_SCAN
, &hdev
->dev_flags
);
957 case LE_SCAN_DISABLE
:
958 clear_bit(HCI_LE_SCAN
, &hdev
->dev_flags
);
962 BT_ERR("Used reserved LE_Scan_Enable param %d", cp
->enable
);
967 static void hci_cc_le_read_white_list_size(struct hci_dev
*hdev
,
970 struct hci_rp_le_read_white_list_size
*rp
= (void *) skb
->data
;
972 BT_DBG("%s status 0x%2.2x size %u", hdev
->name
, rp
->status
, rp
->size
);
975 hdev
->le_white_list_size
= rp
->size
;
978 static void hci_cc_le_read_supported_states(struct hci_dev
*hdev
,
981 struct hci_rp_le_read_supported_states
*rp
= (void *) skb
->data
;
983 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
986 memcpy(hdev
->le_states
, rp
->le_states
, 8);
989 static void hci_cc_write_le_host_supported(struct hci_dev
*hdev
,
992 struct hci_cp_write_le_host_supported
*sent
;
993 __u8 status
= *((__u8
*) skb
->data
);
995 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
997 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_LE_HOST_SUPPORTED
);
1003 hdev
->features
[1][0] |= LMP_HOST_LE
;
1004 set_bit(HCI_LE_ENABLED
, &hdev
->dev_flags
);
1006 hdev
->features
[1][0] &= ~LMP_HOST_LE
;
1007 clear_bit(HCI_LE_ENABLED
, &hdev
->dev_flags
);
1008 clear_bit(HCI_ADVERTISING
, &hdev
->dev_flags
);
1012 hdev
->features
[1][0] |= LMP_HOST_LE_BREDR
;
1014 hdev
->features
[1][0] &= ~LMP_HOST_LE_BREDR
;
1018 static void hci_cc_write_remote_amp_assoc(struct hci_dev
*hdev
,
1019 struct sk_buff
*skb
)
1021 struct hci_rp_write_remote_amp_assoc
*rp
= (void *) skb
->data
;
1023 BT_DBG("%s status 0x%2.2x phy_handle 0x%2.2x",
1024 hdev
->name
, rp
->status
, rp
->phy_handle
);
1029 amp_write_rem_assoc_continue(hdev
, rp
->phy_handle
);
1032 static void hci_cs_inquiry(struct hci_dev
*hdev
, __u8 status
)
1034 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1037 hci_conn_check_pending(hdev
);
1041 set_bit(HCI_INQUIRY
, &hdev
->flags
);
1044 static void hci_cs_create_conn(struct hci_dev
*hdev
, __u8 status
)
1046 struct hci_cp_create_conn
*cp
;
1047 struct hci_conn
*conn
;
1049 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1051 cp
= hci_sent_cmd_data(hdev
, HCI_OP_CREATE_CONN
);
1057 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &cp
->bdaddr
);
1059 BT_DBG("%s bdaddr %pMR hcon %p", hdev
->name
, &cp
->bdaddr
, conn
);
1062 if (conn
&& conn
->state
== BT_CONNECT
) {
1063 if (status
!= 0x0c || conn
->attempt
> 2) {
1064 conn
->state
= BT_CLOSED
;
1065 hci_proto_connect_cfm(conn
, status
);
1068 conn
->state
= BT_CONNECT2
;
1072 conn
= hci_conn_add(hdev
, ACL_LINK
, &cp
->bdaddr
);
1075 conn
->link_mode
|= HCI_LM_MASTER
;
1077 BT_ERR("No memory for new connection");
1081 hci_dev_unlock(hdev
);
1084 static void hci_cs_add_sco(struct hci_dev
*hdev
, __u8 status
)
1086 struct hci_cp_add_sco
*cp
;
1087 struct hci_conn
*acl
, *sco
;
1090 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1095 cp
= hci_sent_cmd_data(hdev
, HCI_OP_ADD_SCO
);
1099 handle
= __le16_to_cpu(cp
->handle
);
1101 BT_DBG("%s handle 0x%4.4x", hdev
->name
, handle
);
1105 acl
= hci_conn_hash_lookup_handle(hdev
, handle
);
1109 sco
->state
= BT_CLOSED
;
1111 hci_proto_connect_cfm(sco
, status
);
1116 hci_dev_unlock(hdev
);
1119 static void hci_cs_auth_requested(struct hci_dev
*hdev
, __u8 status
)
1121 struct hci_cp_auth_requested
*cp
;
1122 struct hci_conn
*conn
;
1124 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1129 cp
= hci_sent_cmd_data(hdev
, HCI_OP_AUTH_REQUESTED
);
1135 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1137 if (conn
->state
== BT_CONFIG
) {
1138 hci_proto_connect_cfm(conn
, status
);
1139 hci_conn_drop(conn
);
1143 hci_dev_unlock(hdev
);
1146 static void hci_cs_set_conn_encrypt(struct hci_dev
*hdev
, __u8 status
)
1148 struct hci_cp_set_conn_encrypt
*cp
;
1149 struct hci_conn
*conn
;
1151 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1156 cp
= hci_sent_cmd_data(hdev
, HCI_OP_SET_CONN_ENCRYPT
);
1162 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1164 if (conn
->state
== BT_CONFIG
) {
1165 hci_proto_connect_cfm(conn
, status
);
1166 hci_conn_drop(conn
);
1170 hci_dev_unlock(hdev
);
1173 static int hci_outgoing_auth_needed(struct hci_dev
*hdev
,
1174 struct hci_conn
*conn
)
1176 if (conn
->state
!= BT_CONFIG
|| !conn
->out
)
1179 if (conn
->pending_sec_level
== BT_SECURITY_SDP
)
1182 /* Only request authentication for SSP connections or non-SSP
1183 * devices with sec_level HIGH or if MITM protection is requested */
1184 if (!hci_conn_ssp_enabled(conn
) && !(conn
->auth_type
& 0x01) &&
1185 conn
->pending_sec_level
!= BT_SECURITY_HIGH
)
1191 static int hci_resolve_name(struct hci_dev
*hdev
,
1192 struct inquiry_entry
*e
)
1194 struct hci_cp_remote_name_req cp
;
1196 memset(&cp
, 0, sizeof(cp
));
1198 bacpy(&cp
.bdaddr
, &e
->data
.bdaddr
);
1199 cp
.pscan_rep_mode
= e
->data
.pscan_rep_mode
;
1200 cp
.pscan_mode
= e
->data
.pscan_mode
;
1201 cp
.clock_offset
= e
->data
.clock_offset
;
1203 return hci_send_cmd(hdev
, HCI_OP_REMOTE_NAME_REQ
, sizeof(cp
), &cp
);
1206 static bool hci_resolve_next_name(struct hci_dev
*hdev
)
1208 struct discovery_state
*discov
= &hdev
->discovery
;
1209 struct inquiry_entry
*e
;
1211 if (list_empty(&discov
->resolve
))
1214 e
= hci_inquiry_cache_lookup_resolve(hdev
, BDADDR_ANY
, NAME_NEEDED
);
1218 if (hci_resolve_name(hdev
, e
) == 0) {
1219 e
->name_state
= NAME_PENDING
;
1226 static void hci_check_pending_name(struct hci_dev
*hdev
, struct hci_conn
*conn
,
1227 bdaddr_t
*bdaddr
, u8
*name
, u8 name_len
)
1229 struct discovery_state
*discov
= &hdev
->discovery
;
1230 struct inquiry_entry
*e
;
1232 if (conn
&& !test_and_set_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
))
1233 mgmt_device_connected(hdev
, bdaddr
, ACL_LINK
, 0x00, 0, name
,
1234 name_len
, conn
->dev_class
);
1236 if (discov
->state
== DISCOVERY_STOPPED
)
1239 if (discov
->state
== DISCOVERY_STOPPING
)
1240 goto discov_complete
;
1242 if (discov
->state
!= DISCOVERY_RESOLVING
)
1245 e
= hci_inquiry_cache_lookup_resolve(hdev
, bdaddr
, NAME_PENDING
);
1246 /* If the device was not found in a list of found devices names of which
1247 * are pending. there is no need to continue resolving a next name as it
1248 * will be done upon receiving another Remote Name Request Complete
1255 e
->name_state
= NAME_KNOWN
;
1256 mgmt_remote_name(hdev
, bdaddr
, ACL_LINK
, 0x00,
1257 e
->data
.rssi
, name
, name_len
);
1259 e
->name_state
= NAME_NOT_KNOWN
;
1262 if (hci_resolve_next_name(hdev
))
1266 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
1269 static void hci_cs_remote_name_req(struct hci_dev
*hdev
, __u8 status
)
1271 struct hci_cp_remote_name_req
*cp
;
1272 struct hci_conn
*conn
;
1274 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1276 /* If successful wait for the name req complete event before
1277 * checking for the need to do authentication */
1281 cp
= hci_sent_cmd_data(hdev
, HCI_OP_REMOTE_NAME_REQ
);
1287 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &cp
->bdaddr
);
1289 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
1290 hci_check_pending_name(hdev
, conn
, &cp
->bdaddr
, NULL
, 0);
1295 if (!hci_outgoing_auth_needed(hdev
, conn
))
1298 if (!test_and_set_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
)) {
1299 struct hci_cp_auth_requested auth_cp
;
1301 auth_cp
.handle
= __cpu_to_le16(conn
->handle
);
1302 hci_send_cmd(hdev
, HCI_OP_AUTH_REQUESTED
,
1303 sizeof(auth_cp
), &auth_cp
);
1307 hci_dev_unlock(hdev
);
1310 static void hci_cs_read_remote_features(struct hci_dev
*hdev
, __u8 status
)
1312 struct hci_cp_read_remote_features
*cp
;
1313 struct hci_conn
*conn
;
1315 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1320 cp
= hci_sent_cmd_data(hdev
, HCI_OP_READ_REMOTE_FEATURES
);
1326 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1328 if (conn
->state
== BT_CONFIG
) {
1329 hci_proto_connect_cfm(conn
, status
);
1330 hci_conn_drop(conn
);
1334 hci_dev_unlock(hdev
);
1337 static void hci_cs_read_remote_ext_features(struct hci_dev
*hdev
, __u8 status
)
1339 struct hci_cp_read_remote_ext_features
*cp
;
1340 struct hci_conn
*conn
;
1342 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1347 cp
= hci_sent_cmd_data(hdev
, HCI_OP_READ_REMOTE_EXT_FEATURES
);
1353 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1355 if (conn
->state
== BT_CONFIG
) {
1356 hci_proto_connect_cfm(conn
, status
);
1357 hci_conn_drop(conn
);
1361 hci_dev_unlock(hdev
);
1364 static void hci_cs_setup_sync_conn(struct hci_dev
*hdev
, __u8 status
)
1366 struct hci_cp_setup_sync_conn
*cp
;
1367 struct hci_conn
*acl
, *sco
;
1370 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1375 cp
= hci_sent_cmd_data(hdev
, HCI_OP_SETUP_SYNC_CONN
);
1379 handle
= __le16_to_cpu(cp
->handle
);
1381 BT_DBG("%s handle 0x%4.4x", hdev
->name
, handle
);
1385 acl
= hci_conn_hash_lookup_handle(hdev
, handle
);
1389 sco
->state
= BT_CLOSED
;
1391 hci_proto_connect_cfm(sco
, status
);
1396 hci_dev_unlock(hdev
);
1399 static void hci_cs_sniff_mode(struct hci_dev
*hdev
, __u8 status
)
1401 struct hci_cp_sniff_mode
*cp
;
1402 struct hci_conn
*conn
;
1404 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1409 cp
= hci_sent_cmd_data(hdev
, HCI_OP_SNIFF_MODE
);
1415 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1417 clear_bit(HCI_CONN_MODE_CHANGE_PEND
, &conn
->flags
);
1419 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND
, &conn
->flags
))
1420 hci_sco_setup(conn
, status
);
1423 hci_dev_unlock(hdev
);
1426 static void hci_cs_exit_sniff_mode(struct hci_dev
*hdev
, __u8 status
)
1428 struct hci_cp_exit_sniff_mode
*cp
;
1429 struct hci_conn
*conn
;
1431 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1436 cp
= hci_sent_cmd_data(hdev
, HCI_OP_EXIT_SNIFF_MODE
);
1442 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1444 clear_bit(HCI_CONN_MODE_CHANGE_PEND
, &conn
->flags
);
1446 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND
, &conn
->flags
))
1447 hci_sco_setup(conn
, status
);
1450 hci_dev_unlock(hdev
);
1453 static void hci_cs_disconnect(struct hci_dev
*hdev
, u8 status
)
1455 struct hci_cp_disconnect
*cp
;
1456 struct hci_conn
*conn
;
1461 cp
= hci_sent_cmd_data(hdev
, HCI_OP_DISCONNECT
);
1467 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1469 mgmt_disconnect_failed(hdev
, &conn
->dst
, conn
->type
,
1470 conn
->dst_type
, status
);
1472 hci_dev_unlock(hdev
);
1475 static void hci_cs_create_phylink(struct hci_dev
*hdev
, u8 status
)
1477 struct hci_cp_create_phy_link
*cp
;
1479 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1481 cp
= hci_sent_cmd_data(hdev
, HCI_OP_CREATE_PHY_LINK
);
1488 struct hci_conn
*hcon
;
1490 hcon
= hci_conn_hash_lookup_handle(hdev
, cp
->phy_handle
);
1494 amp_write_remote_assoc(hdev
, cp
->phy_handle
);
1497 hci_dev_unlock(hdev
);
1500 static void hci_cs_accept_phylink(struct hci_dev
*hdev
, u8 status
)
1502 struct hci_cp_accept_phy_link
*cp
;
1504 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1509 cp
= hci_sent_cmd_data(hdev
, HCI_OP_ACCEPT_PHY_LINK
);
1513 amp_write_remote_assoc(hdev
, cp
->phy_handle
);
1516 static void hci_inquiry_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1518 __u8 status
= *((__u8
*) skb
->data
);
1519 struct discovery_state
*discov
= &hdev
->discovery
;
1520 struct inquiry_entry
*e
;
1522 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1524 hci_conn_check_pending(hdev
);
1526 if (!test_and_clear_bit(HCI_INQUIRY
, &hdev
->flags
))
1529 smp_mb__after_clear_bit(); /* wake_up_bit advises about this barrier */
1530 wake_up_bit(&hdev
->flags
, HCI_INQUIRY
);
1532 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
1537 if (discov
->state
!= DISCOVERY_FINDING
)
1540 if (list_empty(&discov
->resolve
)) {
1541 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
1545 e
= hci_inquiry_cache_lookup_resolve(hdev
, BDADDR_ANY
, NAME_NEEDED
);
1546 if (e
&& hci_resolve_name(hdev
, e
) == 0) {
1547 e
->name_state
= NAME_PENDING
;
1548 hci_discovery_set_state(hdev
, DISCOVERY_RESOLVING
);
1550 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
1554 hci_dev_unlock(hdev
);
1557 static void hci_inquiry_result_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1559 struct inquiry_data data
;
1560 struct inquiry_info
*info
= (void *) (skb
->data
+ 1);
1561 int num_rsp
= *((__u8
*) skb
->data
);
1563 BT_DBG("%s num_rsp %d", hdev
->name
, num_rsp
);
1568 if (test_bit(HCI_PERIODIC_INQ
, &hdev
->dev_flags
))
1573 for (; num_rsp
; num_rsp
--, info
++) {
1574 bool name_known
, ssp
;
1576 bacpy(&data
.bdaddr
, &info
->bdaddr
);
1577 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
1578 data
.pscan_period_mode
= info
->pscan_period_mode
;
1579 data
.pscan_mode
= info
->pscan_mode
;
1580 memcpy(data
.dev_class
, info
->dev_class
, 3);
1581 data
.clock_offset
= info
->clock_offset
;
1583 data
.ssp_mode
= 0x00;
1585 name_known
= hci_inquiry_cache_update(hdev
, &data
, false, &ssp
);
1586 mgmt_device_found(hdev
, &info
->bdaddr
, ACL_LINK
, 0x00,
1587 info
->dev_class
, 0, !name_known
, ssp
, NULL
,
1591 hci_dev_unlock(hdev
);
1594 static void hci_conn_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1596 struct hci_ev_conn_complete
*ev
= (void *) skb
->data
;
1597 struct hci_conn
*conn
;
1599 BT_DBG("%s", hdev
->name
);
1603 conn
= hci_conn_hash_lookup_ba(hdev
, ev
->link_type
, &ev
->bdaddr
);
1605 if (ev
->link_type
!= SCO_LINK
)
1608 conn
= hci_conn_hash_lookup_ba(hdev
, ESCO_LINK
, &ev
->bdaddr
);
1612 conn
->type
= SCO_LINK
;
1616 conn
->handle
= __le16_to_cpu(ev
->handle
);
1618 if (conn
->type
== ACL_LINK
) {
1619 conn
->state
= BT_CONFIG
;
1620 hci_conn_hold(conn
);
1622 if (!conn
->out
&& !hci_conn_ssp_enabled(conn
) &&
1623 !hci_find_link_key(hdev
, &ev
->bdaddr
))
1624 conn
->disc_timeout
= HCI_PAIRING_TIMEOUT
;
1626 conn
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
1628 conn
->state
= BT_CONNECTED
;
1630 hci_conn_add_sysfs(conn
);
1632 if (test_bit(HCI_AUTH
, &hdev
->flags
))
1633 conn
->link_mode
|= HCI_LM_AUTH
;
1635 if (test_bit(HCI_ENCRYPT
, &hdev
->flags
))
1636 conn
->link_mode
|= HCI_LM_ENCRYPT
;
1638 /* Get remote features */
1639 if (conn
->type
== ACL_LINK
) {
1640 struct hci_cp_read_remote_features cp
;
1641 cp
.handle
= ev
->handle
;
1642 hci_send_cmd(hdev
, HCI_OP_READ_REMOTE_FEATURES
,
1646 /* Set packet type for incoming connection */
1647 if (!conn
->out
&& hdev
->hci_ver
< BLUETOOTH_VER_2_0
) {
1648 struct hci_cp_change_conn_ptype cp
;
1649 cp
.handle
= ev
->handle
;
1650 cp
.pkt_type
= cpu_to_le16(conn
->pkt_type
);
1651 hci_send_cmd(hdev
, HCI_OP_CHANGE_CONN_PTYPE
, sizeof(cp
),
1655 conn
->state
= BT_CLOSED
;
1656 if (conn
->type
== ACL_LINK
)
1657 mgmt_connect_failed(hdev
, &ev
->bdaddr
, conn
->type
,
1658 conn
->dst_type
, ev
->status
);
1661 if (conn
->type
== ACL_LINK
)
1662 hci_sco_setup(conn
, ev
->status
);
1665 hci_proto_connect_cfm(conn
, ev
->status
);
1667 } else if (ev
->link_type
!= ACL_LINK
)
1668 hci_proto_connect_cfm(conn
, ev
->status
);
1671 hci_dev_unlock(hdev
);
1673 hci_conn_check_pending(hdev
);
1676 static void hci_conn_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1678 struct hci_ev_conn_request
*ev
= (void *) skb
->data
;
1679 int mask
= hdev
->link_mode
;
1682 BT_DBG("%s bdaddr %pMR type 0x%x", hdev
->name
, &ev
->bdaddr
,
1685 mask
|= hci_proto_connect_ind(hdev
, &ev
->bdaddr
, ev
->link_type
,
1688 if ((mask
& HCI_LM_ACCEPT
) &&
1689 !hci_blacklist_lookup(hdev
, &ev
->bdaddr
)) {
1690 /* Connection accepted */
1691 struct inquiry_entry
*ie
;
1692 struct hci_conn
*conn
;
1696 ie
= hci_inquiry_cache_lookup(hdev
, &ev
->bdaddr
);
1698 memcpy(ie
->data
.dev_class
, ev
->dev_class
, 3);
1700 conn
= hci_conn_hash_lookup_ba(hdev
, ev
->link_type
,
1703 conn
= hci_conn_add(hdev
, ev
->link_type
, &ev
->bdaddr
);
1705 BT_ERR("No memory for new connection");
1706 hci_dev_unlock(hdev
);
1711 memcpy(conn
->dev_class
, ev
->dev_class
, 3);
1713 hci_dev_unlock(hdev
);
1715 if (ev
->link_type
== ACL_LINK
||
1716 (!(flags
& HCI_PROTO_DEFER
) && !lmp_esco_capable(hdev
))) {
1717 struct hci_cp_accept_conn_req cp
;
1718 conn
->state
= BT_CONNECT
;
1720 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
1722 if (lmp_rswitch_capable(hdev
) && (mask
& HCI_LM_MASTER
))
1723 cp
.role
= 0x00; /* Become master */
1725 cp
.role
= 0x01; /* Remain slave */
1727 hci_send_cmd(hdev
, HCI_OP_ACCEPT_CONN_REQ
, sizeof(cp
),
1729 } else if (!(flags
& HCI_PROTO_DEFER
)) {
1730 struct hci_cp_accept_sync_conn_req cp
;
1731 conn
->state
= BT_CONNECT
;
1733 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
1734 cp
.pkt_type
= cpu_to_le16(conn
->pkt_type
);
1736 cp
.tx_bandwidth
= __constant_cpu_to_le32(0x00001f40);
1737 cp
.rx_bandwidth
= __constant_cpu_to_le32(0x00001f40);
1738 cp
.max_latency
= __constant_cpu_to_le16(0xffff);
1739 cp
.content_format
= cpu_to_le16(hdev
->voice_setting
);
1740 cp
.retrans_effort
= 0xff;
1742 hci_send_cmd(hdev
, HCI_OP_ACCEPT_SYNC_CONN_REQ
,
1745 conn
->state
= BT_CONNECT2
;
1746 hci_proto_connect_cfm(conn
, 0);
1749 /* Connection rejected */
1750 struct hci_cp_reject_conn_req cp
;
1752 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
1753 cp
.reason
= HCI_ERROR_REJ_BAD_ADDR
;
1754 hci_send_cmd(hdev
, HCI_OP_REJECT_CONN_REQ
, sizeof(cp
), &cp
);
1758 static u8
hci_to_mgmt_reason(u8 err
)
1761 case HCI_ERROR_CONNECTION_TIMEOUT
:
1762 return MGMT_DEV_DISCONN_TIMEOUT
;
1763 case HCI_ERROR_REMOTE_USER_TERM
:
1764 case HCI_ERROR_REMOTE_LOW_RESOURCES
:
1765 case HCI_ERROR_REMOTE_POWER_OFF
:
1766 return MGMT_DEV_DISCONN_REMOTE
;
1767 case HCI_ERROR_LOCAL_HOST_TERM
:
1768 return MGMT_DEV_DISCONN_LOCAL_HOST
;
1770 return MGMT_DEV_DISCONN_UNKNOWN
;
1774 static void hci_disconn_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1776 struct hci_ev_disconn_complete
*ev
= (void *) skb
->data
;
1777 struct hci_conn
*conn
;
1779 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
1783 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1787 if (ev
->status
== 0)
1788 conn
->state
= BT_CLOSED
;
1790 if (test_and_clear_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
) &&
1791 (conn
->type
== ACL_LINK
|| conn
->type
== LE_LINK
)) {
1793 mgmt_disconnect_failed(hdev
, &conn
->dst
, conn
->type
,
1794 conn
->dst_type
, ev
->status
);
1796 u8 reason
= hci_to_mgmt_reason(ev
->reason
);
1798 mgmt_device_disconnected(hdev
, &conn
->dst
, conn
->type
,
1799 conn
->dst_type
, reason
);
1803 if (ev
->status
== 0) {
1804 u8 type
= conn
->type
;
1806 if (type
== ACL_LINK
&& conn
->flush_key
)
1807 hci_remove_link_key(hdev
, &conn
->dst
);
1808 hci_proto_disconn_cfm(conn
, ev
->reason
);
1811 /* Re-enable advertising if necessary, since it might
1812 * have been disabled by the connection. From the
1813 * HCI_LE_Set_Advertise_Enable command description in
1814 * the core specification (v4.0):
1815 * "The Controller shall continue advertising until the Host
1816 * issues an LE_Set_Advertise_Enable command with
1817 * Advertising_Enable set to 0x00 (Advertising is disabled)
1818 * or until a connection is created or until the Advertising
1819 * is timed out due to Directed Advertising."
1821 if (type
== LE_LINK
)
1822 mgmt_reenable_advertising(hdev
);
1826 hci_dev_unlock(hdev
);
1829 static void hci_auth_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1831 struct hci_ev_auth_complete
*ev
= (void *) skb
->data
;
1832 struct hci_conn
*conn
;
1834 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
1838 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1843 if (!hci_conn_ssp_enabled(conn
) &&
1844 test_bit(HCI_CONN_REAUTH_PEND
, &conn
->flags
)) {
1845 BT_INFO("re-auth of legacy device is not possible.");
1847 conn
->link_mode
|= HCI_LM_AUTH
;
1848 conn
->sec_level
= conn
->pending_sec_level
;
1851 mgmt_auth_failed(hdev
, &conn
->dst
, conn
->type
, conn
->dst_type
,
1855 clear_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
);
1856 clear_bit(HCI_CONN_REAUTH_PEND
, &conn
->flags
);
1858 if (conn
->state
== BT_CONFIG
) {
1859 if (!ev
->status
&& hci_conn_ssp_enabled(conn
)) {
1860 struct hci_cp_set_conn_encrypt cp
;
1861 cp
.handle
= ev
->handle
;
1863 hci_send_cmd(hdev
, HCI_OP_SET_CONN_ENCRYPT
, sizeof(cp
),
1866 conn
->state
= BT_CONNECTED
;
1867 hci_proto_connect_cfm(conn
, ev
->status
);
1868 hci_conn_drop(conn
);
1871 hci_auth_cfm(conn
, ev
->status
);
1873 hci_conn_hold(conn
);
1874 conn
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
1875 hci_conn_drop(conn
);
1878 if (test_bit(HCI_CONN_ENCRYPT_PEND
, &conn
->flags
)) {
1880 struct hci_cp_set_conn_encrypt cp
;
1881 cp
.handle
= ev
->handle
;
1883 hci_send_cmd(hdev
, HCI_OP_SET_CONN_ENCRYPT
, sizeof(cp
),
1886 clear_bit(HCI_CONN_ENCRYPT_PEND
, &conn
->flags
);
1887 hci_encrypt_cfm(conn
, ev
->status
, 0x00);
1892 hci_dev_unlock(hdev
);
1895 static void hci_remote_name_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1897 struct hci_ev_remote_name
*ev
= (void *) skb
->data
;
1898 struct hci_conn
*conn
;
1900 BT_DBG("%s", hdev
->name
);
1902 hci_conn_check_pending(hdev
);
1906 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
1908 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
1911 if (ev
->status
== 0)
1912 hci_check_pending_name(hdev
, conn
, &ev
->bdaddr
, ev
->name
,
1913 strnlen(ev
->name
, HCI_MAX_NAME_LENGTH
));
1915 hci_check_pending_name(hdev
, conn
, &ev
->bdaddr
, NULL
, 0);
1921 if (!hci_outgoing_auth_needed(hdev
, conn
))
1924 if (!test_and_set_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
)) {
1925 struct hci_cp_auth_requested cp
;
1926 cp
.handle
= __cpu_to_le16(conn
->handle
);
1927 hci_send_cmd(hdev
, HCI_OP_AUTH_REQUESTED
, sizeof(cp
), &cp
);
1931 hci_dev_unlock(hdev
);
1934 static void hci_encrypt_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1936 struct hci_ev_encrypt_change
*ev
= (void *) skb
->data
;
1937 struct hci_conn
*conn
;
1939 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
1943 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1947 /* Encryption implies authentication */
1948 conn
->link_mode
|= HCI_LM_AUTH
;
1949 conn
->link_mode
|= HCI_LM_ENCRYPT
;
1950 conn
->sec_level
= conn
->pending_sec_level
;
1952 conn
->link_mode
&= ~HCI_LM_ENCRYPT
;
1955 clear_bit(HCI_CONN_ENCRYPT_PEND
, &conn
->flags
);
1957 if (ev
->status
&& conn
->state
== BT_CONNECTED
) {
1958 hci_disconnect(conn
, HCI_ERROR_AUTH_FAILURE
);
1959 hci_conn_drop(conn
);
1963 if (conn
->state
== BT_CONFIG
) {
1965 conn
->state
= BT_CONNECTED
;
1967 hci_proto_connect_cfm(conn
, ev
->status
);
1968 hci_conn_drop(conn
);
1970 hci_encrypt_cfm(conn
, ev
->status
, ev
->encrypt
);
1974 hci_dev_unlock(hdev
);
1977 static void hci_change_link_key_complete_evt(struct hci_dev
*hdev
,
1978 struct sk_buff
*skb
)
1980 struct hci_ev_change_link_key_complete
*ev
= (void *) skb
->data
;
1981 struct hci_conn
*conn
;
1983 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
1987 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1990 conn
->link_mode
|= HCI_LM_SECURE
;
1992 clear_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
);
1994 hci_key_change_cfm(conn
, ev
->status
);
1997 hci_dev_unlock(hdev
);
2000 static void hci_remote_features_evt(struct hci_dev
*hdev
,
2001 struct sk_buff
*skb
)
2003 struct hci_ev_remote_features
*ev
= (void *) skb
->data
;
2004 struct hci_conn
*conn
;
2006 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2010 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2015 memcpy(conn
->features
[0], ev
->features
, 8);
2017 if (conn
->state
!= BT_CONFIG
)
2020 if (!ev
->status
&& lmp_ssp_capable(hdev
) && lmp_ssp_capable(conn
)) {
2021 struct hci_cp_read_remote_ext_features cp
;
2022 cp
.handle
= ev
->handle
;
2024 hci_send_cmd(hdev
, HCI_OP_READ_REMOTE_EXT_FEATURES
,
2029 if (!ev
->status
&& !test_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
)) {
2030 struct hci_cp_remote_name_req cp
;
2031 memset(&cp
, 0, sizeof(cp
));
2032 bacpy(&cp
.bdaddr
, &conn
->dst
);
2033 cp
.pscan_rep_mode
= 0x02;
2034 hci_send_cmd(hdev
, HCI_OP_REMOTE_NAME_REQ
, sizeof(cp
), &cp
);
2035 } else if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
))
2036 mgmt_device_connected(hdev
, &conn
->dst
, conn
->type
,
2037 conn
->dst_type
, 0, NULL
, 0,
2040 if (!hci_outgoing_auth_needed(hdev
, conn
)) {
2041 conn
->state
= BT_CONNECTED
;
2042 hci_proto_connect_cfm(conn
, ev
->status
);
2043 hci_conn_drop(conn
);
2047 hci_dev_unlock(hdev
);
2050 static void hci_cmd_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2052 struct hci_ev_cmd_complete
*ev
= (void *) skb
->data
;
2053 u8 status
= skb
->data
[sizeof(*ev
)];
2056 skb_pull(skb
, sizeof(*ev
));
2058 opcode
= __le16_to_cpu(ev
->opcode
);
2061 case HCI_OP_INQUIRY_CANCEL
:
2062 hci_cc_inquiry_cancel(hdev
, skb
);
2065 case HCI_OP_PERIODIC_INQ
:
2066 hci_cc_periodic_inq(hdev
, skb
);
2069 case HCI_OP_EXIT_PERIODIC_INQ
:
2070 hci_cc_exit_periodic_inq(hdev
, skb
);
2073 case HCI_OP_REMOTE_NAME_REQ_CANCEL
:
2074 hci_cc_remote_name_req_cancel(hdev
, skb
);
2077 case HCI_OP_ROLE_DISCOVERY
:
2078 hci_cc_role_discovery(hdev
, skb
);
2081 case HCI_OP_READ_LINK_POLICY
:
2082 hci_cc_read_link_policy(hdev
, skb
);
2085 case HCI_OP_WRITE_LINK_POLICY
:
2086 hci_cc_write_link_policy(hdev
, skb
);
2089 case HCI_OP_READ_DEF_LINK_POLICY
:
2090 hci_cc_read_def_link_policy(hdev
, skb
);
2093 case HCI_OP_WRITE_DEF_LINK_POLICY
:
2094 hci_cc_write_def_link_policy(hdev
, skb
);
2098 hci_cc_reset(hdev
, skb
);
2101 case HCI_OP_WRITE_LOCAL_NAME
:
2102 hci_cc_write_local_name(hdev
, skb
);
2105 case HCI_OP_READ_LOCAL_NAME
:
2106 hci_cc_read_local_name(hdev
, skb
);
2109 case HCI_OP_WRITE_AUTH_ENABLE
:
2110 hci_cc_write_auth_enable(hdev
, skb
);
2113 case HCI_OP_WRITE_ENCRYPT_MODE
:
2114 hci_cc_write_encrypt_mode(hdev
, skb
);
2117 case HCI_OP_WRITE_SCAN_ENABLE
:
2118 hci_cc_write_scan_enable(hdev
, skb
);
2121 case HCI_OP_READ_CLASS_OF_DEV
:
2122 hci_cc_read_class_of_dev(hdev
, skb
);
2125 case HCI_OP_WRITE_CLASS_OF_DEV
:
2126 hci_cc_write_class_of_dev(hdev
, skb
);
2129 case HCI_OP_READ_VOICE_SETTING
:
2130 hci_cc_read_voice_setting(hdev
, skb
);
2133 case HCI_OP_WRITE_VOICE_SETTING
:
2134 hci_cc_write_voice_setting(hdev
, skb
);
2137 case HCI_OP_WRITE_SSP_MODE
:
2138 hci_cc_write_ssp_mode(hdev
, skb
);
2141 case HCI_OP_READ_LOCAL_VERSION
:
2142 hci_cc_read_local_version(hdev
, skb
);
2145 case HCI_OP_READ_LOCAL_COMMANDS
:
2146 hci_cc_read_local_commands(hdev
, skb
);
2149 case HCI_OP_READ_LOCAL_FEATURES
:
2150 hci_cc_read_local_features(hdev
, skb
);
2153 case HCI_OP_READ_LOCAL_EXT_FEATURES
:
2154 hci_cc_read_local_ext_features(hdev
, skb
);
2157 case HCI_OP_READ_BUFFER_SIZE
:
2158 hci_cc_read_buffer_size(hdev
, skb
);
2161 case HCI_OP_READ_BD_ADDR
:
2162 hci_cc_read_bd_addr(hdev
, skb
);
2165 case HCI_OP_READ_PAGE_SCAN_ACTIVITY
:
2166 hci_cc_read_page_scan_activity(hdev
, skb
);
2169 case HCI_OP_WRITE_PAGE_SCAN_ACTIVITY
:
2170 hci_cc_write_page_scan_activity(hdev
, skb
);
2173 case HCI_OP_READ_PAGE_SCAN_TYPE
:
2174 hci_cc_read_page_scan_type(hdev
, skb
);
2177 case HCI_OP_WRITE_PAGE_SCAN_TYPE
:
2178 hci_cc_write_page_scan_type(hdev
, skb
);
2181 case HCI_OP_READ_DATA_BLOCK_SIZE
:
2182 hci_cc_read_data_block_size(hdev
, skb
);
2185 case HCI_OP_READ_FLOW_CONTROL_MODE
:
2186 hci_cc_read_flow_control_mode(hdev
, skb
);
2189 case HCI_OP_READ_LOCAL_AMP_INFO
:
2190 hci_cc_read_local_amp_info(hdev
, skb
);
2193 case HCI_OP_READ_LOCAL_AMP_ASSOC
:
2194 hci_cc_read_local_amp_assoc(hdev
, skb
);
2197 case HCI_OP_READ_INQ_RSP_TX_POWER
:
2198 hci_cc_read_inq_rsp_tx_power(hdev
, skb
);
2201 case HCI_OP_PIN_CODE_REPLY
:
2202 hci_cc_pin_code_reply(hdev
, skb
);
2205 case HCI_OP_PIN_CODE_NEG_REPLY
:
2206 hci_cc_pin_code_neg_reply(hdev
, skb
);
2209 case HCI_OP_READ_LOCAL_OOB_DATA
:
2210 hci_cc_read_local_oob_data_reply(hdev
, skb
);
2213 case HCI_OP_LE_READ_BUFFER_SIZE
:
2214 hci_cc_le_read_buffer_size(hdev
, skb
);
2217 case HCI_OP_LE_READ_LOCAL_FEATURES
:
2218 hci_cc_le_read_local_features(hdev
, skb
);
2221 case HCI_OP_LE_READ_ADV_TX_POWER
:
2222 hci_cc_le_read_adv_tx_power(hdev
, skb
);
2225 case HCI_OP_USER_CONFIRM_REPLY
:
2226 hci_cc_user_confirm_reply(hdev
, skb
);
2229 case HCI_OP_USER_CONFIRM_NEG_REPLY
:
2230 hci_cc_user_confirm_neg_reply(hdev
, skb
);
2233 case HCI_OP_USER_PASSKEY_REPLY
:
2234 hci_cc_user_passkey_reply(hdev
, skb
);
2237 case HCI_OP_USER_PASSKEY_NEG_REPLY
:
2238 hci_cc_user_passkey_neg_reply(hdev
, skb
);
2241 case HCI_OP_LE_SET_ADV_ENABLE
:
2242 hci_cc_le_set_adv_enable(hdev
, skb
);
2245 case HCI_OP_LE_SET_SCAN_ENABLE
:
2246 hci_cc_le_set_scan_enable(hdev
, skb
);
2249 case HCI_OP_LE_READ_WHITE_LIST_SIZE
:
2250 hci_cc_le_read_white_list_size(hdev
, skb
);
2253 case HCI_OP_LE_READ_SUPPORTED_STATES
:
2254 hci_cc_le_read_supported_states(hdev
, skb
);
2257 case HCI_OP_WRITE_LE_HOST_SUPPORTED
:
2258 hci_cc_write_le_host_supported(hdev
, skb
);
2261 case HCI_OP_WRITE_REMOTE_AMP_ASSOC
:
2262 hci_cc_write_remote_amp_assoc(hdev
, skb
);
2266 BT_DBG("%s opcode 0x%4.4x", hdev
->name
, opcode
);
2270 if (opcode
!= HCI_OP_NOP
)
2271 del_timer(&hdev
->cmd_timer
);
2273 hci_req_cmd_complete(hdev
, opcode
, status
);
2275 if (ev
->ncmd
&& !test_bit(HCI_RESET
, &hdev
->flags
)) {
2276 atomic_set(&hdev
->cmd_cnt
, 1);
2277 if (!skb_queue_empty(&hdev
->cmd_q
))
2278 queue_work(hdev
->workqueue
, &hdev
->cmd_work
);
2282 static void hci_cmd_status_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2284 struct hci_ev_cmd_status
*ev
= (void *) skb
->data
;
2287 skb_pull(skb
, sizeof(*ev
));
2289 opcode
= __le16_to_cpu(ev
->opcode
);
2292 case HCI_OP_INQUIRY
:
2293 hci_cs_inquiry(hdev
, ev
->status
);
2296 case HCI_OP_CREATE_CONN
:
2297 hci_cs_create_conn(hdev
, ev
->status
);
2300 case HCI_OP_ADD_SCO
:
2301 hci_cs_add_sco(hdev
, ev
->status
);
2304 case HCI_OP_AUTH_REQUESTED
:
2305 hci_cs_auth_requested(hdev
, ev
->status
);
2308 case HCI_OP_SET_CONN_ENCRYPT
:
2309 hci_cs_set_conn_encrypt(hdev
, ev
->status
);
2312 case HCI_OP_REMOTE_NAME_REQ
:
2313 hci_cs_remote_name_req(hdev
, ev
->status
);
2316 case HCI_OP_READ_REMOTE_FEATURES
:
2317 hci_cs_read_remote_features(hdev
, ev
->status
);
2320 case HCI_OP_READ_REMOTE_EXT_FEATURES
:
2321 hci_cs_read_remote_ext_features(hdev
, ev
->status
);
2324 case HCI_OP_SETUP_SYNC_CONN
:
2325 hci_cs_setup_sync_conn(hdev
, ev
->status
);
2328 case HCI_OP_SNIFF_MODE
:
2329 hci_cs_sniff_mode(hdev
, ev
->status
);
2332 case HCI_OP_EXIT_SNIFF_MODE
:
2333 hci_cs_exit_sniff_mode(hdev
, ev
->status
);
2336 case HCI_OP_DISCONNECT
:
2337 hci_cs_disconnect(hdev
, ev
->status
);
2340 case HCI_OP_CREATE_PHY_LINK
:
2341 hci_cs_create_phylink(hdev
, ev
->status
);
2344 case HCI_OP_ACCEPT_PHY_LINK
:
2345 hci_cs_accept_phylink(hdev
, ev
->status
);
2349 BT_DBG("%s opcode 0x%4.4x", hdev
->name
, opcode
);
2353 if (opcode
!= HCI_OP_NOP
)
2354 del_timer(&hdev
->cmd_timer
);
2357 (hdev
->sent_cmd
&& !bt_cb(hdev
->sent_cmd
)->req
.event
))
2358 hci_req_cmd_complete(hdev
, opcode
, ev
->status
);
2360 if (ev
->ncmd
&& !test_bit(HCI_RESET
, &hdev
->flags
)) {
2361 atomic_set(&hdev
->cmd_cnt
, 1);
2362 if (!skb_queue_empty(&hdev
->cmd_q
))
2363 queue_work(hdev
->workqueue
, &hdev
->cmd_work
);
2367 static void hci_role_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2369 struct hci_ev_role_change
*ev
= (void *) skb
->data
;
2370 struct hci_conn
*conn
;
2372 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2376 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
2380 conn
->link_mode
&= ~HCI_LM_MASTER
;
2382 conn
->link_mode
|= HCI_LM_MASTER
;
2385 clear_bit(HCI_CONN_RSWITCH_PEND
, &conn
->flags
);
2387 hci_role_switch_cfm(conn
, ev
->status
, ev
->role
);
2390 hci_dev_unlock(hdev
);
2393 static void hci_num_comp_pkts_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2395 struct hci_ev_num_comp_pkts
*ev
= (void *) skb
->data
;
2398 if (hdev
->flow_ctl_mode
!= HCI_FLOW_CTL_MODE_PACKET_BASED
) {
2399 BT_ERR("Wrong event for mode %d", hdev
->flow_ctl_mode
);
2403 if (skb
->len
< sizeof(*ev
) || skb
->len
< sizeof(*ev
) +
2404 ev
->num_hndl
* sizeof(struct hci_comp_pkts_info
)) {
2405 BT_DBG("%s bad parameters", hdev
->name
);
2409 BT_DBG("%s num_hndl %d", hdev
->name
, ev
->num_hndl
);
2411 for (i
= 0; i
< ev
->num_hndl
; i
++) {
2412 struct hci_comp_pkts_info
*info
= &ev
->handles
[i
];
2413 struct hci_conn
*conn
;
2414 __u16 handle
, count
;
2416 handle
= __le16_to_cpu(info
->handle
);
2417 count
= __le16_to_cpu(info
->count
);
2419 conn
= hci_conn_hash_lookup_handle(hdev
, handle
);
2423 conn
->sent
-= count
;
2425 switch (conn
->type
) {
2427 hdev
->acl_cnt
+= count
;
2428 if (hdev
->acl_cnt
> hdev
->acl_pkts
)
2429 hdev
->acl_cnt
= hdev
->acl_pkts
;
2433 if (hdev
->le_pkts
) {
2434 hdev
->le_cnt
+= count
;
2435 if (hdev
->le_cnt
> hdev
->le_pkts
)
2436 hdev
->le_cnt
= hdev
->le_pkts
;
2438 hdev
->acl_cnt
+= count
;
2439 if (hdev
->acl_cnt
> hdev
->acl_pkts
)
2440 hdev
->acl_cnt
= hdev
->acl_pkts
;
2445 hdev
->sco_cnt
+= count
;
2446 if (hdev
->sco_cnt
> hdev
->sco_pkts
)
2447 hdev
->sco_cnt
= hdev
->sco_pkts
;
2451 BT_ERR("Unknown type %d conn %p", conn
->type
, conn
);
2456 queue_work(hdev
->workqueue
, &hdev
->tx_work
);
2459 static struct hci_conn
*__hci_conn_lookup_handle(struct hci_dev
*hdev
,
2462 struct hci_chan
*chan
;
2464 switch (hdev
->dev_type
) {
2466 return hci_conn_hash_lookup_handle(hdev
, handle
);
2468 chan
= hci_chan_lookup_handle(hdev
, handle
);
2473 BT_ERR("%s unknown dev_type %d", hdev
->name
, hdev
->dev_type
);
2480 static void hci_num_comp_blocks_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2482 struct hci_ev_num_comp_blocks
*ev
= (void *) skb
->data
;
2485 if (hdev
->flow_ctl_mode
!= HCI_FLOW_CTL_MODE_BLOCK_BASED
) {
2486 BT_ERR("Wrong event for mode %d", hdev
->flow_ctl_mode
);
2490 if (skb
->len
< sizeof(*ev
) || skb
->len
< sizeof(*ev
) +
2491 ev
->num_hndl
* sizeof(struct hci_comp_blocks_info
)) {
2492 BT_DBG("%s bad parameters", hdev
->name
);
2496 BT_DBG("%s num_blocks %d num_hndl %d", hdev
->name
, ev
->num_blocks
,
2499 for (i
= 0; i
< ev
->num_hndl
; i
++) {
2500 struct hci_comp_blocks_info
*info
= &ev
->handles
[i
];
2501 struct hci_conn
*conn
= NULL
;
2502 __u16 handle
, block_count
;
2504 handle
= __le16_to_cpu(info
->handle
);
2505 block_count
= __le16_to_cpu(info
->blocks
);
2507 conn
= __hci_conn_lookup_handle(hdev
, handle
);
2511 conn
->sent
-= block_count
;
2513 switch (conn
->type
) {
2516 hdev
->block_cnt
+= block_count
;
2517 if (hdev
->block_cnt
> hdev
->num_blocks
)
2518 hdev
->block_cnt
= hdev
->num_blocks
;
2522 BT_ERR("Unknown type %d conn %p", conn
->type
, conn
);
2527 queue_work(hdev
->workqueue
, &hdev
->tx_work
);
2530 static void hci_mode_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2532 struct hci_ev_mode_change
*ev
= (void *) skb
->data
;
2533 struct hci_conn
*conn
;
2535 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2539 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2541 conn
->mode
= ev
->mode
;
2542 conn
->interval
= __le16_to_cpu(ev
->interval
);
2544 if (!test_and_clear_bit(HCI_CONN_MODE_CHANGE_PEND
,
2546 if (conn
->mode
== HCI_CM_ACTIVE
)
2547 set_bit(HCI_CONN_POWER_SAVE
, &conn
->flags
);
2549 clear_bit(HCI_CONN_POWER_SAVE
, &conn
->flags
);
2552 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND
, &conn
->flags
))
2553 hci_sco_setup(conn
, ev
->status
);
2556 hci_dev_unlock(hdev
);
2559 static void hci_pin_code_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2561 struct hci_ev_pin_code_req
*ev
= (void *) skb
->data
;
2562 struct hci_conn
*conn
;
2564 BT_DBG("%s", hdev
->name
);
2568 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
2572 if (conn
->state
== BT_CONNECTED
) {
2573 hci_conn_hold(conn
);
2574 conn
->disc_timeout
= HCI_PAIRING_TIMEOUT
;
2575 hci_conn_drop(conn
);
2578 if (!test_bit(HCI_PAIRABLE
, &hdev
->dev_flags
))
2579 hci_send_cmd(hdev
, HCI_OP_PIN_CODE_NEG_REPLY
,
2580 sizeof(ev
->bdaddr
), &ev
->bdaddr
);
2581 else if (test_bit(HCI_MGMT
, &hdev
->dev_flags
)) {
2584 if (conn
->pending_sec_level
== BT_SECURITY_HIGH
)
2589 mgmt_pin_code_request(hdev
, &ev
->bdaddr
, secure
);
2593 hci_dev_unlock(hdev
);
2596 static void hci_link_key_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2598 struct hci_ev_link_key_req
*ev
= (void *) skb
->data
;
2599 struct hci_cp_link_key_reply cp
;
2600 struct hci_conn
*conn
;
2601 struct link_key
*key
;
2603 BT_DBG("%s", hdev
->name
);
2605 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
2610 key
= hci_find_link_key(hdev
, &ev
->bdaddr
);
2612 BT_DBG("%s link key not found for %pMR", hdev
->name
,
2617 BT_DBG("%s found key type %u for %pMR", hdev
->name
, key
->type
,
2620 if (!test_bit(HCI_DEBUG_KEYS
, &hdev
->dev_flags
) &&
2621 key
->type
== HCI_LK_DEBUG_COMBINATION
) {
2622 BT_DBG("%s ignoring debug key", hdev
->name
);
2626 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
2628 if (key
->type
== HCI_LK_UNAUTH_COMBINATION
&&
2629 conn
->auth_type
!= 0xff && (conn
->auth_type
& 0x01)) {
2630 BT_DBG("%s ignoring unauthenticated key", hdev
->name
);
2634 if (key
->type
== HCI_LK_COMBINATION
&& key
->pin_len
< 16 &&
2635 conn
->pending_sec_level
== BT_SECURITY_HIGH
) {
2636 BT_DBG("%s ignoring key unauthenticated for high security",
2641 conn
->key_type
= key
->type
;
2642 conn
->pin_length
= key
->pin_len
;
2645 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
2646 memcpy(cp
.link_key
, key
->val
, HCI_LINK_KEY_SIZE
);
2648 hci_send_cmd(hdev
, HCI_OP_LINK_KEY_REPLY
, sizeof(cp
), &cp
);
2650 hci_dev_unlock(hdev
);
2655 hci_send_cmd(hdev
, HCI_OP_LINK_KEY_NEG_REPLY
, 6, &ev
->bdaddr
);
2656 hci_dev_unlock(hdev
);
2659 static void hci_link_key_notify_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2661 struct hci_ev_link_key_notify
*ev
= (void *) skb
->data
;
2662 struct hci_conn
*conn
;
2665 BT_DBG("%s", hdev
->name
);
2669 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
2671 hci_conn_hold(conn
);
2672 conn
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
2673 pin_len
= conn
->pin_length
;
2675 if (ev
->key_type
!= HCI_LK_CHANGED_COMBINATION
)
2676 conn
->key_type
= ev
->key_type
;
2678 hci_conn_drop(conn
);
2681 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
2682 hci_add_link_key(hdev
, conn
, 1, &ev
->bdaddr
, ev
->link_key
,
2683 ev
->key_type
, pin_len
);
2685 hci_dev_unlock(hdev
);
2688 static void hci_clock_offset_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2690 struct hci_ev_clock_offset
*ev
= (void *) skb
->data
;
2691 struct hci_conn
*conn
;
2693 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2697 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2698 if (conn
&& !ev
->status
) {
2699 struct inquiry_entry
*ie
;
2701 ie
= hci_inquiry_cache_lookup(hdev
, &conn
->dst
);
2703 ie
->data
.clock_offset
= ev
->clock_offset
;
2704 ie
->timestamp
= jiffies
;
2708 hci_dev_unlock(hdev
);
2711 static void hci_pkt_type_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2713 struct hci_ev_pkt_type_change
*ev
= (void *) skb
->data
;
2714 struct hci_conn
*conn
;
2716 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2720 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2721 if (conn
&& !ev
->status
)
2722 conn
->pkt_type
= __le16_to_cpu(ev
->pkt_type
);
2724 hci_dev_unlock(hdev
);
2727 static void hci_pscan_rep_mode_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2729 struct hci_ev_pscan_rep_mode
*ev
= (void *) skb
->data
;
2730 struct inquiry_entry
*ie
;
2732 BT_DBG("%s", hdev
->name
);
2736 ie
= hci_inquiry_cache_lookup(hdev
, &ev
->bdaddr
);
2738 ie
->data
.pscan_rep_mode
= ev
->pscan_rep_mode
;
2739 ie
->timestamp
= jiffies
;
2742 hci_dev_unlock(hdev
);
2745 static void hci_inquiry_result_with_rssi_evt(struct hci_dev
*hdev
,
2746 struct sk_buff
*skb
)
2748 struct inquiry_data data
;
2749 int num_rsp
= *((__u8
*) skb
->data
);
2750 bool name_known
, ssp
;
2752 BT_DBG("%s num_rsp %d", hdev
->name
, num_rsp
);
2757 if (test_bit(HCI_PERIODIC_INQ
, &hdev
->dev_flags
))
2762 if ((skb
->len
- 1) / num_rsp
!= sizeof(struct inquiry_info_with_rssi
)) {
2763 struct inquiry_info_with_rssi_and_pscan_mode
*info
;
2764 info
= (void *) (skb
->data
+ 1);
2766 for (; num_rsp
; num_rsp
--, info
++) {
2767 bacpy(&data
.bdaddr
, &info
->bdaddr
);
2768 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
2769 data
.pscan_period_mode
= info
->pscan_period_mode
;
2770 data
.pscan_mode
= info
->pscan_mode
;
2771 memcpy(data
.dev_class
, info
->dev_class
, 3);
2772 data
.clock_offset
= info
->clock_offset
;
2773 data
.rssi
= info
->rssi
;
2774 data
.ssp_mode
= 0x00;
2776 name_known
= hci_inquiry_cache_update(hdev
, &data
,
2778 mgmt_device_found(hdev
, &info
->bdaddr
, ACL_LINK
, 0x00,
2779 info
->dev_class
, info
->rssi
,
2780 !name_known
, ssp
, NULL
, 0);
2783 struct inquiry_info_with_rssi
*info
= (void *) (skb
->data
+ 1);
2785 for (; num_rsp
; num_rsp
--, info
++) {
2786 bacpy(&data
.bdaddr
, &info
->bdaddr
);
2787 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
2788 data
.pscan_period_mode
= info
->pscan_period_mode
;
2789 data
.pscan_mode
= 0x00;
2790 memcpy(data
.dev_class
, info
->dev_class
, 3);
2791 data
.clock_offset
= info
->clock_offset
;
2792 data
.rssi
= info
->rssi
;
2793 data
.ssp_mode
= 0x00;
2794 name_known
= hci_inquiry_cache_update(hdev
, &data
,
2796 mgmt_device_found(hdev
, &info
->bdaddr
, ACL_LINK
, 0x00,
2797 info
->dev_class
, info
->rssi
,
2798 !name_known
, ssp
, NULL
, 0);
2802 hci_dev_unlock(hdev
);
2805 static void hci_remote_ext_features_evt(struct hci_dev
*hdev
,
2806 struct sk_buff
*skb
)
2808 struct hci_ev_remote_ext_features
*ev
= (void *) skb
->data
;
2809 struct hci_conn
*conn
;
2811 BT_DBG("%s", hdev
->name
);
2815 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2819 if (ev
->page
< HCI_MAX_PAGES
)
2820 memcpy(conn
->features
[ev
->page
], ev
->features
, 8);
2822 if (!ev
->status
&& ev
->page
== 0x01) {
2823 struct inquiry_entry
*ie
;
2825 ie
= hci_inquiry_cache_lookup(hdev
, &conn
->dst
);
2827 ie
->data
.ssp_mode
= (ev
->features
[0] & LMP_HOST_SSP
);
2829 if (ev
->features
[0] & LMP_HOST_SSP
) {
2830 set_bit(HCI_CONN_SSP_ENABLED
, &conn
->flags
);
2832 /* It is mandatory by the Bluetooth specification that
2833 * Extended Inquiry Results are only used when Secure
2834 * Simple Pairing is enabled, but some devices violate
2837 * To make these devices work, the internal SSP
2838 * enabled flag needs to be cleared if the remote host
2839 * features do not indicate SSP support */
2840 clear_bit(HCI_CONN_SSP_ENABLED
, &conn
->flags
);
2844 if (conn
->state
!= BT_CONFIG
)
2847 if (!ev
->status
&& !test_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
)) {
2848 struct hci_cp_remote_name_req cp
;
2849 memset(&cp
, 0, sizeof(cp
));
2850 bacpy(&cp
.bdaddr
, &conn
->dst
);
2851 cp
.pscan_rep_mode
= 0x02;
2852 hci_send_cmd(hdev
, HCI_OP_REMOTE_NAME_REQ
, sizeof(cp
), &cp
);
2853 } else if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
))
2854 mgmt_device_connected(hdev
, &conn
->dst
, conn
->type
,
2855 conn
->dst_type
, 0, NULL
, 0,
2858 if (!hci_outgoing_auth_needed(hdev
, conn
)) {
2859 conn
->state
= BT_CONNECTED
;
2860 hci_proto_connect_cfm(conn
, ev
->status
);
2861 hci_conn_drop(conn
);
2865 hci_dev_unlock(hdev
);
2868 static void hci_sync_conn_complete_evt(struct hci_dev
*hdev
,
2869 struct sk_buff
*skb
)
2871 struct hci_ev_sync_conn_complete
*ev
= (void *) skb
->data
;
2872 struct hci_conn
*conn
;
2874 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2878 conn
= hci_conn_hash_lookup_ba(hdev
, ev
->link_type
, &ev
->bdaddr
);
2880 if (ev
->link_type
== ESCO_LINK
)
2883 conn
= hci_conn_hash_lookup_ba(hdev
, ESCO_LINK
, &ev
->bdaddr
);
2887 conn
->type
= SCO_LINK
;
2890 switch (ev
->status
) {
2892 conn
->handle
= __le16_to_cpu(ev
->handle
);
2893 conn
->state
= BT_CONNECTED
;
2895 hci_conn_add_sysfs(conn
);
2898 case 0x0d: /* Connection Rejected due to Limited Resources */
2899 case 0x11: /* Unsupported Feature or Parameter Value */
2900 case 0x1c: /* SCO interval rejected */
2901 case 0x1a: /* Unsupported Remote Feature */
2902 case 0x1f: /* Unspecified error */
2904 conn
->pkt_type
= (hdev
->esco_type
& SCO_ESCO_MASK
) |
2905 (hdev
->esco_type
& EDR_ESCO_MASK
);
2906 if (hci_setup_sync(conn
, conn
->link
->handle
))
2912 conn
->state
= BT_CLOSED
;
2916 hci_proto_connect_cfm(conn
, ev
->status
);
2921 hci_dev_unlock(hdev
);
2924 static void hci_extended_inquiry_result_evt(struct hci_dev
*hdev
,
2925 struct sk_buff
*skb
)
2927 struct inquiry_data data
;
2928 struct extended_inquiry_info
*info
= (void *) (skb
->data
+ 1);
2929 int num_rsp
= *((__u8
*) skb
->data
);
2932 BT_DBG("%s num_rsp %d", hdev
->name
, num_rsp
);
2937 if (test_bit(HCI_PERIODIC_INQ
, &hdev
->dev_flags
))
2942 for (; num_rsp
; num_rsp
--, info
++) {
2943 bool name_known
, ssp
;
2945 bacpy(&data
.bdaddr
, &info
->bdaddr
);
2946 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
2947 data
.pscan_period_mode
= info
->pscan_period_mode
;
2948 data
.pscan_mode
= 0x00;
2949 memcpy(data
.dev_class
, info
->dev_class
, 3);
2950 data
.clock_offset
= info
->clock_offset
;
2951 data
.rssi
= info
->rssi
;
2952 data
.ssp_mode
= 0x01;
2954 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
2955 name_known
= eir_has_data_type(info
->data
,
2961 name_known
= hci_inquiry_cache_update(hdev
, &data
, name_known
,
2963 eir_len
= eir_get_length(info
->data
, sizeof(info
->data
));
2964 mgmt_device_found(hdev
, &info
->bdaddr
, ACL_LINK
, 0x00,
2965 info
->dev_class
, info
->rssi
, !name_known
,
2966 ssp
, info
->data
, eir_len
);
2969 hci_dev_unlock(hdev
);
2972 static void hci_key_refresh_complete_evt(struct hci_dev
*hdev
,
2973 struct sk_buff
*skb
)
2975 struct hci_ev_key_refresh_complete
*ev
= (void *) skb
->data
;
2976 struct hci_conn
*conn
;
2978 BT_DBG("%s status 0x%2.2x handle 0x%4.4x", hdev
->name
, ev
->status
,
2979 __le16_to_cpu(ev
->handle
));
2983 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2988 conn
->sec_level
= conn
->pending_sec_level
;
2990 clear_bit(HCI_CONN_ENCRYPT_PEND
, &conn
->flags
);
2992 if (ev
->status
&& conn
->state
== BT_CONNECTED
) {
2993 hci_disconnect(conn
, HCI_ERROR_AUTH_FAILURE
);
2994 hci_conn_drop(conn
);
2998 if (conn
->state
== BT_CONFIG
) {
3000 conn
->state
= BT_CONNECTED
;
3002 hci_proto_connect_cfm(conn
, ev
->status
);
3003 hci_conn_drop(conn
);
3005 hci_auth_cfm(conn
, ev
->status
);
3007 hci_conn_hold(conn
);
3008 conn
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
3009 hci_conn_drop(conn
);
3013 hci_dev_unlock(hdev
);
3016 static u8
hci_get_auth_req(struct hci_conn
*conn
)
3018 /* If remote requests dedicated bonding follow that lead */
3019 if (conn
->remote_auth
== HCI_AT_DEDICATED_BONDING
||
3020 conn
->remote_auth
== HCI_AT_DEDICATED_BONDING_MITM
) {
3021 /* If both remote and local IO capabilities allow MITM
3022 * protection then require it, otherwise don't */
3023 if (conn
->remote_cap
== HCI_IO_NO_INPUT_OUTPUT
||
3024 conn
->io_capability
== HCI_IO_NO_INPUT_OUTPUT
)
3025 return HCI_AT_DEDICATED_BONDING
;
3027 return HCI_AT_DEDICATED_BONDING_MITM
;
3030 /* If remote requests no-bonding follow that lead */
3031 if (conn
->remote_auth
== HCI_AT_NO_BONDING
||
3032 conn
->remote_auth
== HCI_AT_NO_BONDING_MITM
)
3033 return conn
->remote_auth
| (conn
->auth_type
& 0x01);
3035 return conn
->auth_type
;
3038 static void hci_io_capa_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3040 struct hci_ev_io_capa_request
*ev
= (void *) skb
->data
;
3041 struct hci_conn
*conn
;
3043 BT_DBG("%s", hdev
->name
);
3047 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3051 hci_conn_hold(conn
);
3053 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3056 if (test_bit(HCI_PAIRABLE
, &hdev
->dev_flags
) ||
3057 (conn
->remote_auth
& ~0x01) == HCI_AT_NO_BONDING
) {
3058 struct hci_cp_io_capability_reply cp
;
3060 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
3061 /* Change the IO capability from KeyboardDisplay
3062 * to DisplayYesNo as it is not supported by BT spec. */
3063 cp
.capability
= (conn
->io_capability
== 0x04) ?
3064 HCI_IO_DISPLAY_YESNO
: conn
->io_capability
;
3065 conn
->auth_type
= hci_get_auth_req(conn
);
3066 cp
.authentication
= conn
->auth_type
;
3068 if (hci_find_remote_oob_data(hdev
, &conn
->dst
) &&
3069 (conn
->out
|| test_bit(HCI_CONN_REMOTE_OOB
, &conn
->flags
)))
3074 hci_send_cmd(hdev
, HCI_OP_IO_CAPABILITY_REPLY
,
3077 struct hci_cp_io_capability_neg_reply cp
;
3079 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
3080 cp
.reason
= HCI_ERROR_PAIRING_NOT_ALLOWED
;
3082 hci_send_cmd(hdev
, HCI_OP_IO_CAPABILITY_NEG_REPLY
,
3087 hci_dev_unlock(hdev
);
3090 static void hci_io_capa_reply_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3092 struct hci_ev_io_capa_reply
*ev
= (void *) skb
->data
;
3093 struct hci_conn
*conn
;
3095 BT_DBG("%s", hdev
->name
);
3099 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3103 conn
->remote_cap
= ev
->capability
;
3104 conn
->remote_auth
= ev
->authentication
;
3106 set_bit(HCI_CONN_REMOTE_OOB
, &conn
->flags
);
3109 hci_dev_unlock(hdev
);
3112 static void hci_user_confirm_request_evt(struct hci_dev
*hdev
,
3113 struct sk_buff
*skb
)
3115 struct hci_ev_user_confirm_req
*ev
= (void *) skb
->data
;
3116 int loc_mitm
, rem_mitm
, confirm_hint
= 0;
3117 struct hci_conn
*conn
;
3119 BT_DBG("%s", hdev
->name
);
3123 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3126 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3130 loc_mitm
= (conn
->auth_type
& 0x01);
3131 rem_mitm
= (conn
->remote_auth
& 0x01);
3133 /* If we require MITM but the remote device can't provide that
3134 * (it has NoInputNoOutput) then reject the confirmation
3135 * request. The only exception is when we're dedicated bonding
3136 * initiators (connect_cfm_cb set) since then we always have the MITM
3138 if (!conn
->connect_cfm_cb
&& loc_mitm
&&
3139 conn
->remote_cap
== HCI_IO_NO_INPUT_OUTPUT
) {
3140 BT_DBG("Rejecting request: remote device can't provide MITM");
3141 hci_send_cmd(hdev
, HCI_OP_USER_CONFIRM_NEG_REPLY
,
3142 sizeof(ev
->bdaddr
), &ev
->bdaddr
);
3146 /* If no side requires MITM protection; auto-accept */
3147 if ((!loc_mitm
|| conn
->remote_cap
== HCI_IO_NO_INPUT_OUTPUT
) &&
3148 (!rem_mitm
|| conn
->io_capability
== HCI_IO_NO_INPUT_OUTPUT
)) {
3150 /* If we're not the initiators request authorization to
3151 * proceed from user space (mgmt_user_confirm with
3152 * confirm_hint set to 1). */
3153 if (!test_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
)) {
3154 BT_DBG("Confirming auto-accept as acceptor");
3159 BT_DBG("Auto-accept of user confirmation with %ums delay",
3160 hdev
->auto_accept_delay
);
3162 if (hdev
->auto_accept_delay
> 0) {
3163 int delay
= msecs_to_jiffies(hdev
->auto_accept_delay
);
3164 mod_timer(&conn
->auto_accept_timer
, jiffies
+ delay
);
3168 hci_send_cmd(hdev
, HCI_OP_USER_CONFIRM_REPLY
,
3169 sizeof(ev
->bdaddr
), &ev
->bdaddr
);
3174 mgmt_user_confirm_request(hdev
, &ev
->bdaddr
, ACL_LINK
, 0, ev
->passkey
,
3178 hci_dev_unlock(hdev
);
3181 static void hci_user_passkey_request_evt(struct hci_dev
*hdev
,
3182 struct sk_buff
*skb
)
3184 struct hci_ev_user_passkey_req
*ev
= (void *) skb
->data
;
3186 BT_DBG("%s", hdev
->name
);
3188 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3189 mgmt_user_passkey_request(hdev
, &ev
->bdaddr
, ACL_LINK
, 0);
3192 static void hci_user_passkey_notify_evt(struct hci_dev
*hdev
,
3193 struct sk_buff
*skb
)
3195 struct hci_ev_user_passkey_notify
*ev
= (void *) skb
->data
;
3196 struct hci_conn
*conn
;
3198 BT_DBG("%s", hdev
->name
);
3200 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3204 conn
->passkey_notify
= __le32_to_cpu(ev
->passkey
);
3205 conn
->passkey_entered
= 0;
3207 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3208 mgmt_user_passkey_notify(hdev
, &conn
->dst
, conn
->type
,
3209 conn
->dst_type
, conn
->passkey_notify
,
3210 conn
->passkey_entered
);
3213 static void hci_keypress_notify_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3215 struct hci_ev_keypress_notify
*ev
= (void *) skb
->data
;
3216 struct hci_conn
*conn
;
3218 BT_DBG("%s", hdev
->name
);
3220 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3225 case HCI_KEYPRESS_STARTED
:
3226 conn
->passkey_entered
= 0;
3229 case HCI_KEYPRESS_ENTERED
:
3230 conn
->passkey_entered
++;
3233 case HCI_KEYPRESS_ERASED
:
3234 conn
->passkey_entered
--;
3237 case HCI_KEYPRESS_CLEARED
:
3238 conn
->passkey_entered
= 0;
3241 case HCI_KEYPRESS_COMPLETED
:
3245 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3246 mgmt_user_passkey_notify(hdev
, &conn
->dst
, conn
->type
,
3247 conn
->dst_type
, conn
->passkey_notify
,
3248 conn
->passkey_entered
);
3251 static void hci_simple_pair_complete_evt(struct hci_dev
*hdev
,
3252 struct sk_buff
*skb
)
3254 struct hci_ev_simple_pair_complete
*ev
= (void *) skb
->data
;
3255 struct hci_conn
*conn
;
3257 BT_DBG("%s", hdev
->name
);
3261 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3265 /* To avoid duplicate auth_failed events to user space we check
3266 * the HCI_CONN_AUTH_PEND flag which will be set if we
3267 * initiated the authentication. A traditional auth_complete
3268 * event gets always produced as initiator and is also mapped to
3269 * the mgmt_auth_failed event */
3270 if (!test_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
) && ev
->status
)
3271 mgmt_auth_failed(hdev
, &conn
->dst
, conn
->type
, conn
->dst_type
,
3274 hci_conn_drop(conn
);
3277 hci_dev_unlock(hdev
);
3280 static void hci_remote_host_features_evt(struct hci_dev
*hdev
,
3281 struct sk_buff
*skb
)
3283 struct hci_ev_remote_host_features
*ev
= (void *) skb
->data
;
3284 struct inquiry_entry
*ie
;
3285 struct hci_conn
*conn
;
3287 BT_DBG("%s", hdev
->name
);
3291 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3293 memcpy(conn
->features
[1], ev
->features
, 8);
3295 ie
= hci_inquiry_cache_lookup(hdev
, &ev
->bdaddr
);
3297 ie
->data
.ssp_mode
= (ev
->features
[0] & LMP_HOST_SSP
);
3299 hci_dev_unlock(hdev
);
3302 static void hci_remote_oob_data_request_evt(struct hci_dev
*hdev
,
3303 struct sk_buff
*skb
)
3305 struct hci_ev_remote_oob_data_request
*ev
= (void *) skb
->data
;
3306 struct oob_data
*data
;
3308 BT_DBG("%s", hdev
->name
);
3312 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3315 data
= hci_find_remote_oob_data(hdev
, &ev
->bdaddr
);
3317 struct hci_cp_remote_oob_data_reply cp
;
3319 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
3320 memcpy(cp
.hash
, data
->hash
, sizeof(cp
.hash
));
3321 memcpy(cp
.randomizer
, data
->randomizer
, sizeof(cp
.randomizer
));
3323 hci_send_cmd(hdev
, HCI_OP_REMOTE_OOB_DATA_REPLY
, sizeof(cp
),
3326 struct hci_cp_remote_oob_data_neg_reply cp
;
3328 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
3329 hci_send_cmd(hdev
, HCI_OP_REMOTE_OOB_DATA_NEG_REPLY
, sizeof(cp
),
3334 hci_dev_unlock(hdev
);
3337 static void hci_phy_link_complete_evt(struct hci_dev
*hdev
,
3338 struct sk_buff
*skb
)
3340 struct hci_ev_phy_link_complete
*ev
= (void *) skb
->data
;
3341 struct hci_conn
*hcon
, *bredr_hcon
;
3343 BT_DBG("%s handle 0x%2.2x status 0x%2.2x", hdev
->name
, ev
->phy_handle
,
3348 hcon
= hci_conn_hash_lookup_handle(hdev
, ev
->phy_handle
);
3350 hci_dev_unlock(hdev
);
3356 hci_dev_unlock(hdev
);
3360 bredr_hcon
= hcon
->amp_mgr
->l2cap_conn
->hcon
;
3362 hcon
->state
= BT_CONNECTED
;
3363 bacpy(&hcon
->dst
, &bredr_hcon
->dst
);
3365 hci_conn_hold(hcon
);
3366 hcon
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
3367 hci_conn_drop(hcon
);
3369 hci_conn_add_sysfs(hcon
);
3371 amp_physical_cfm(bredr_hcon
, hcon
);
3373 hci_dev_unlock(hdev
);
3376 static void hci_loglink_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3378 struct hci_ev_logical_link_complete
*ev
= (void *) skb
->data
;
3379 struct hci_conn
*hcon
;
3380 struct hci_chan
*hchan
;
3381 struct amp_mgr
*mgr
;
3383 BT_DBG("%s log_handle 0x%4.4x phy_handle 0x%2.2x status 0x%2.2x",
3384 hdev
->name
, le16_to_cpu(ev
->handle
), ev
->phy_handle
,
3387 hcon
= hci_conn_hash_lookup_handle(hdev
, ev
->phy_handle
);
3391 /* Create AMP hchan */
3392 hchan
= hci_chan_create(hcon
);
3396 hchan
->handle
= le16_to_cpu(ev
->handle
);
3398 BT_DBG("hcon %p mgr %p hchan %p", hcon
, hcon
->amp_mgr
, hchan
);
3400 mgr
= hcon
->amp_mgr
;
3401 if (mgr
&& mgr
->bredr_chan
) {
3402 struct l2cap_chan
*bredr_chan
= mgr
->bredr_chan
;
3404 l2cap_chan_lock(bredr_chan
);
3406 bredr_chan
->conn
->mtu
= hdev
->block_mtu
;
3407 l2cap_logical_cfm(bredr_chan
, hchan
, 0);
3408 hci_conn_hold(hcon
);
3410 l2cap_chan_unlock(bredr_chan
);
3414 static void hci_disconn_loglink_complete_evt(struct hci_dev
*hdev
,
3415 struct sk_buff
*skb
)
3417 struct hci_ev_disconn_logical_link_complete
*ev
= (void *) skb
->data
;
3418 struct hci_chan
*hchan
;
3420 BT_DBG("%s log handle 0x%4.4x status 0x%2.2x", hdev
->name
,
3421 le16_to_cpu(ev
->handle
), ev
->status
);
3428 hchan
= hci_chan_lookup_handle(hdev
, le16_to_cpu(ev
->handle
));
3432 amp_destroy_logical_link(hchan
, ev
->reason
);
3435 hci_dev_unlock(hdev
);
3438 static void hci_disconn_phylink_complete_evt(struct hci_dev
*hdev
,
3439 struct sk_buff
*skb
)
3441 struct hci_ev_disconn_phy_link_complete
*ev
= (void *) skb
->data
;
3442 struct hci_conn
*hcon
;
3444 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
3451 hcon
= hci_conn_hash_lookup_handle(hdev
, ev
->phy_handle
);
3453 hcon
->state
= BT_CLOSED
;
3457 hci_dev_unlock(hdev
);
3460 static void hci_le_conn_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3462 struct hci_ev_le_conn_complete
*ev
= (void *) skb
->data
;
3463 struct hci_conn
*conn
;
3465 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
3469 conn
= hci_conn_hash_lookup_state(hdev
, LE_LINK
, BT_CONNECT
);
3471 conn
= hci_conn_add(hdev
, LE_LINK
, &ev
->bdaddr
);
3473 BT_ERR("No memory for new connection");
3477 conn
->dst_type
= ev
->bdaddr_type
;
3479 if (ev
->role
== LE_CONN_ROLE_MASTER
) {
3481 conn
->link_mode
|= HCI_LM_MASTER
;
3486 mgmt_connect_failed(hdev
, &conn
->dst
, conn
->type
,
3487 conn
->dst_type
, ev
->status
);
3488 hci_proto_connect_cfm(conn
, ev
->status
);
3489 conn
->state
= BT_CLOSED
;
3494 if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
))
3495 mgmt_device_connected(hdev
, &ev
->bdaddr
, conn
->type
,
3496 conn
->dst_type
, 0, NULL
, 0, NULL
);
3498 conn
->sec_level
= BT_SECURITY_LOW
;
3499 conn
->handle
= __le16_to_cpu(ev
->handle
);
3500 conn
->state
= BT_CONNECTED
;
3502 hci_conn_add_sysfs(conn
);
3504 hci_proto_connect_cfm(conn
, ev
->status
);
3507 hci_dev_unlock(hdev
);
3510 static void hci_le_adv_report_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3512 u8 num_reports
= skb
->data
[0];
3513 void *ptr
= &skb
->data
[1];
3516 while (num_reports
--) {
3517 struct hci_ev_le_advertising_info
*ev
= ptr
;
3519 rssi
= ev
->data
[ev
->length
];
3520 mgmt_device_found(hdev
, &ev
->bdaddr
, LE_LINK
, ev
->bdaddr_type
,
3521 NULL
, rssi
, 0, 1, ev
->data
, ev
->length
);
3523 ptr
+= sizeof(*ev
) + ev
->length
+ 1;
3527 static void hci_le_ltk_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3529 struct hci_ev_le_ltk_req
*ev
= (void *) skb
->data
;
3530 struct hci_cp_le_ltk_reply cp
;
3531 struct hci_cp_le_ltk_neg_reply neg
;
3532 struct hci_conn
*conn
;
3533 struct smp_ltk
*ltk
;
3535 BT_DBG("%s handle 0x%4.4x", hdev
->name
, __le16_to_cpu(ev
->handle
));
3539 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
3543 ltk
= hci_find_ltk(hdev
, ev
->ediv
, ev
->random
);
3547 memcpy(cp
.ltk
, ltk
->val
, sizeof(ltk
->val
));
3548 cp
.handle
= cpu_to_le16(conn
->handle
);
3550 if (ltk
->authenticated
)
3551 conn
->pending_sec_level
= BT_SECURITY_HIGH
;
3553 conn
->pending_sec_level
= BT_SECURITY_MEDIUM
;
3555 conn
->enc_key_size
= ltk
->enc_size
;
3557 hci_send_cmd(hdev
, HCI_OP_LE_LTK_REPLY
, sizeof(cp
), &cp
);
3559 if (ltk
->type
& HCI_SMP_STK
) {
3560 list_del(<k
->list
);
3564 hci_dev_unlock(hdev
);
3569 neg
.handle
= ev
->handle
;
3570 hci_send_cmd(hdev
, HCI_OP_LE_LTK_NEG_REPLY
, sizeof(neg
), &neg
);
3571 hci_dev_unlock(hdev
);
3574 static void hci_le_meta_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3576 struct hci_ev_le_meta
*le_ev
= (void *) skb
->data
;
3578 skb_pull(skb
, sizeof(*le_ev
));
3580 switch (le_ev
->subevent
) {
3581 case HCI_EV_LE_CONN_COMPLETE
:
3582 hci_le_conn_complete_evt(hdev
, skb
);
3585 case HCI_EV_LE_ADVERTISING_REPORT
:
3586 hci_le_adv_report_evt(hdev
, skb
);
3589 case HCI_EV_LE_LTK_REQ
:
3590 hci_le_ltk_request_evt(hdev
, skb
);
3598 static void hci_chan_selected_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3600 struct hci_ev_channel_selected
*ev
= (void *) skb
->data
;
3601 struct hci_conn
*hcon
;
3603 BT_DBG("%s handle 0x%2.2x", hdev
->name
, ev
->phy_handle
);
3605 skb_pull(skb
, sizeof(*ev
));
3607 hcon
= hci_conn_hash_lookup_handle(hdev
, ev
->phy_handle
);
3611 amp_read_loc_assoc_final_data(hdev
, hcon
);
3614 void hci_event_packet(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3616 struct hci_event_hdr
*hdr
= (void *) skb
->data
;
3617 __u8 event
= hdr
->evt
;
3621 /* Received events are (currently) only needed when a request is
3622 * ongoing so avoid unnecessary memory allocation.
3624 if (hdev
->req_status
== HCI_REQ_PEND
) {
3625 kfree_skb(hdev
->recv_evt
);
3626 hdev
->recv_evt
= skb_clone(skb
, GFP_KERNEL
);
3629 hci_dev_unlock(hdev
);
3631 skb_pull(skb
, HCI_EVENT_HDR_SIZE
);
3633 if (hdev
->sent_cmd
&& bt_cb(hdev
->sent_cmd
)->req
.event
== event
) {
3634 struct hci_command_hdr
*cmd_hdr
= (void *) hdev
->sent_cmd
->data
;
3635 u16 opcode
= __le16_to_cpu(cmd_hdr
->opcode
);
3637 hci_req_cmd_complete(hdev
, opcode
, 0);
3641 case HCI_EV_INQUIRY_COMPLETE
:
3642 hci_inquiry_complete_evt(hdev
, skb
);
3645 case HCI_EV_INQUIRY_RESULT
:
3646 hci_inquiry_result_evt(hdev
, skb
);
3649 case HCI_EV_CONN_COMPLETE
:
3650 hci_conn_complete_evt(hdev
, skb
);
3653 case HCI_EV_CONN_REQUEST
:
3654 hci_conn_request_evt(hdev
, skb
);
3657 case HCI_EV_DISCONN_COMPLETE
:
3658 hci_disconn_complete_evt(hdev
, skb
);
3661 case HCI_EV_AUTH_COMPLETE
:
3662 hci_auth_complete_evt(hdev
, skb
);
3665 case HCI_EV_REMOTE_NAME
:
3666 hci_remote_name_evt(hdev
, skb
);
3669 case HCI_EV_ENCRYPT_CHANGE
:
3670 hci_encrypt_change_evt(hdev
, skb
);
3673 case HCI_EV_CHANGE_LINK_KEY_COMPLETE
:
3674 hci_change_link_key_complete_evt(hdev
, skb
);
3677 case HCI_EV_REMOTE_FEATURES
:
3678 hci_remote_features_evt(hdev
, skb
);
3681 case HCI_EV_CMD_COMPLETE
:
3682 hci_cmd_complete_evt(hdev
, skb
);
3685 case HCI_EV_CMD_STATUS
:
3686 hci_cmd_status_evt(hdev
, skb
);
3689 case HCI_EV_ROLE_CHANGE
:
3690 hci_role_change_evt(hdev
, skb
);
3693 case HCI_EV_NUM_COMP_PKTS
:
3694 hci_num_comp_pkts_evt(hdev
, skb
);
3697 case HCI_EV_MODE_CHANGE
:
3698 hci_mode_change_evt(hdev
, skb
);
3701 case HCI_EV_PIN_CODE_REQ
:
3702 hci_pin_code_request_evt(hdev
, skb
);
3705 case HCI_EV_LINK_KEY_REQ
:
3706 hci_link_key_request_evt(hdev
, skb
);
3709 case HCI_EV_LINK_KEY_NOTIFY
:
3710 hci_link_key_notify_evt(hdev
, skb
);
3713 case HCI_EV_CLOCK_OFFSET
:
3714 hci_clock_offset_evt(hdev
, skb
);
3717 case HCI_EV_PKT_TYPE_CHANGE
:
3718 hci_pkt_type_change_evt(hdev
, skb
);
3721 case HCI_EV_PSCAN_REP_MODE
:
3722 hci_pscan_rep_mode_evt(hdev
, skb
);
3725 case HCI_EV_INQUIRY_RESULT_WITH_RSSI
:
3726 hci_inquiry_result_with_rssi_evt(hdev
, skb
);
3729 case HCI_EV_REMOTE_EXT_FEATURES
:
3730 hci_remote_ext_features_evt(hdev
, skb
);
3733 case HCI_EV_SYNC_CONN_COMPLETE
:
3734 hci_sync_conn_complete_evt(hdev
, skb
);
3737 case HCI_EV_EXTENDED_INQUIRY_RESULT
:
3738 hci_extended_inquiry_result_evt(hdev
, skb
);
3741 case HCI_EV_KEY_REFRESH_COMPLETE
:
3742 hci_key_refresh_complete_evt(hdev
, skb
);
3745 case HCI_EV_IO_CAPA_REQUEST
:
3746 hci_io_capa_request_evt(hdev
, skb
);
3749 case HCI_EV_IO_CAPA_REPLY
:
3750 hci_io_capa_reply_evt(hdev
, skb
);
3753 case HCI_EV_USER_CONFIRM_REQUEST
:
3754 hci_user_confirm_request_evt(hdev
, skb
);
3757 case HCI_EV_USER_PASSKEY_REQUEST
:
3758 hci_user_passkey_request_evt(hdev
, skb
);
3761 case HCI_EV_USER_PASSKEY_NOTIFY
:
3762 hci_user_passkey_notify_evt(hdev
, skb
);
3765 case HCI_EV_KEYPRESS_NOTIFY
:
3766 hci_keypress_notify_evt(hdev
, skb
);
3769 case HCI_EV_SIMPLE_PAIR_COMPLETE
:
3770 hci_simple_pair_complete_evt(hdev
, skb
);
3773 case HCI_EV_REMOTE_HOST_FEATURES
:
3774 hci_remote_host_features_evt(hdev
, skb
);
3777 case HCI_EV_LE_META
:
3778 hci_le_meta_evt(hdev
, skb
);
3781 case HCI_EV_CHANNEL_SELECTED
:
3782 hci_chan_selected_evt(hdev
, skb
);
3785 case HCI_EV_REMOTE_OOB_DATA_REQUEST
:
3786 hci_remote_oob_data_request_evt(hdev
, skb
);
3789 case HCI_EV_PHY_LINK_COMPLETE
:
3790 hci_phy_link_complete_evt(hdev
, skb
);
3793 case HCI_EV_LOGICAL_LINK_COMPLETE
:
3794 hci_loglink_complete_evt(hdev
, skb
);
3797 case HCI_EV_DISCONN_LOGICAL_LINK_COMPLETE
:
3798 hci_disconn_loglink_complete_evt(hdev
, skb
);
3801 case HCI_EV_DISCONN_PHY_LINK_COMPLETE
:
3802 hci_disconn_phylink_complete_evt(hdev
, skb
);
3805 case HCI_EV_NUM_COMP_BLOCKS
:
3806 hci_num_comp_blocks_evt(hdev
, skb
);
3810 BT_DBG("%s event 0x%2.2x", hdev
->name
, event
);
3815 hdev
->stat
.evt_rx
++;