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
);
45 mgmt_stop_discovery_failed(hdev
, status
);
50 clear_bit(HCI_INQUIRY
, &hdev
->flags
);
53 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
56 hci_req_cmd_complete(hdev
, HCI_OP_INQUIRY
, status
);
58 hci_conn_check_pending(hdev
);
61 static void hci_cc_periodic_inq(struct hci_dev
*hdev
, struct sk_buff
*skb
)
63 __u8 status
= *((__u8
*) skb
->data
);
65 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
70 set_bit(HCI_PERIODIC_INQ
, &hdev
->dev_flags
);
73 static void hci_cc_exit_periodic_inq(struct hci_dev
*hdev
, struct sk_buff
*skb
)
75 __u8 status
= *((__u8
*) skb
->data
);
77 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
82 clear_bit(HCI_PERIODIC_INQ
, &hdev
->dev_flags
);
84 hci_conn_check_pending(hdev
);
87 static void hci_cc_remote_name_req_cancel(struct hci_dev
*hdev
,
90 BT_DBG("%s", hdev
->name
);
93 static void hci_cc_role_discovery(struct hci_dev
*hdev
, struct sk_buff
*skb
)
95 struct hci_rp_role_discovery
*rp
= (void *) skb
->data
;
96 struct hci_conn
*conn
;
98 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
105 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(rp
->handle
));
108 conn
->link_mode
&= ~HCI_LM_MASTER
;
110 conn
->link_mode
|= HCI_LM_MASTER
;
113 hci_dev_unlock(hdev
);
116 static void hci_cc_read_link_policy(struct hci_dev
*hdev
, struct sk_buff
*skb
)
118 struct hci_rp_read_link_policy
*rp
= (void *) skb
->data
;
119 struct hci_conn
*conn
;
121 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
128 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(rp
->handle
));
130 conn
->link_policy
= __le16_to_cpu(rp
->policy
);
132 hci_dev_unlock(hdev
);
135 static void hci_cc_write_link_policy(struct hci_dev
*hdev
, struct sk_buff
*skb
)
137 struct hci_rp_write_link_policy
*rp
= (void *) skb
->data
;
138 struct hci_conn
*conn
;
141 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
146 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_LINK_POLICY
);
152 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(rp
->handle
));
154 conn
->link_policy
= get_unaligned_le16(sent
+ 2);
156 hci_dev_unlock(hdev
);
159 static void hci_cc_read_def_link_policy(struct hci_dev
*hdev
,
162 struct hci_rp_read_def_link_policy
*rp
= (void *) skb
->data
;
164 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
169 hdev
->link_policy
= __le16_to_cpu(rp
->policy
);
172 static void hci_cc_write_def_link_policy(struct hci_dev
*hdev
,
175 __u8 status
= *((__u8
*) skb
->data
);
178 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
180 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_DEF_LINK_POLICY
);
185 hdev
->link_policy
= get_unaligned_le16(sent
);
188 static void hci_cc_reset(struct hci_dev
*hdev
, struct sk_buff
*skb
)
190 __u8 status
= *((__u8
*) skb
->data
);
192 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
194 clear_bit(HCI_RESET
, &hdev
->flags
);
196 /* Reset all non-persistent flags */
197 hdev
->dev_flags
&= ~HCI_PERSISTENT_MASK
;
199 hdev
->discovery
.state
= DISCOVERY_STOPPED
;
200 hdev
->inq_tx_power
= HCI_TX_POWER_INVALID
;
201 hdev
->adv_tx_power
= HCI_TX_POWER_INVALID
;
203 memset(hdev
->adv_data
, 0, sizeof(hdev
->adv_data
));
204 hdev
->adv_data_len
= 0;
207 static void hci_cc_write_local_name(struct hci_dev
*hdev
, struct sk_buff
*skb
)
209 __u8 status
= *((__u8
*) skb
->data
);
212 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
214 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_LOCAL_NAME
);
220 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
221 mgmt_set_local_name_complete(hdev
, sent
, status
);
223 memcpy(hdev
->dev_name
, sent
, HCI_MAX_NAME_LENGTH
);
225 hci_dev_unlock(hdev
);
228 static void hci_cc_read_local_name(struct hci_dev
*hdev
, struct sk_buff
*skb
)
230 struct hci_rp_read_local_name
*rp
= (void *) skb
->data
;
232 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
237 if (test_bit(HCI_SETUP
, &hdev
->dev_flags
))
238 memcpy(hdev
->dev_name
, rp
->name
, HCI_MAX_NAME_LENGTH
);
241 static void hci_cc_write_auth_enable(struct hci_dev
*hdev
, struct sk_buff
*skb
)
243 __u8 status
= *((__u8
*) skb
->data
);
246 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
248 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_AUTH_ENABLE
);
253 __u8 param
= *((__u8
*) sent
);
255 if (param
== AUTH_ENABLED
)
256 set_bit(HCI_AUTH
, &hdev
->flags
);
258 clear_bit(HCI_AUTH
, &hdev
->flags
);
261 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
262 mgmt_auth_enable_complete(hdev
, status
);
265 static void hci_cc_write_encrypt_mode(struct hci_dev
*hdev
, struct sk_buff
*skb
)
267 __u8 status
= *((__u8
*) skb
->data
);
270 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
272 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_ENCRYPT_MODE
);
277 __u8 param
= *((__u8
*) sent
);
280 set_bit(HCI_ENCRYPT
, &hdev
->flags
);
282 clear_bit(HCI_ENCRYPT
, &hdev
->flags
);
286 static void hci_cc_write_scan_enable(struct hci_dev
*hdev
, struct sk_buff
*skb
)
288 __u8 param
, status
= *((__u8
*) skb
->data
);
289 int old_pscan
, old_iscan
;
292 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
294 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_SCAN_ENABLE
);
298 param
= *((__u8
*) sent
);
303 mgmt_write_scan_failed(hdev
, param
, status
);
304 hdev
->discov_timeout
= 0;
308 old_pscan
= test_and_clear_bit(HCI_PSCAN
, &hdev
->flags
);
309 old_iscan
= test_and_clear_bit(HCI_ISCAN
, &hdev
->flags
);
311 if (param
& SCAN_INQUIRY
) {
312 set_bit(HCI_ISCAN
, &hdev
->flags
);
314 mgmt_discoverable(hdev
, 1);
315 if (hdev
->discov_timeout
> 0) {
316 int to
= msecs_to_jiffies(hdev
->discov_timeout
* 1000);
317 queue_delayed_work(hdev
->workqueue
, &hdev
->discov_off
,
320 } else if (old_iscan
)
321 mgmt_discoverable(hdev
, 0);
323 if (param
& SCAN_PAGE
) {
324 set_bit(HCI_PSCAN
, &hdev
->flags
);
326 mgmt_connectable(hdev
, 1);
327 } else if (old_pscan
)
328 mgmt_connectable(hdev
, 0);
331 hci_dev_unlock(hdev
);
334 static void hci_cc_read_class_of_dev(struct hci_dev
*hdev
, struct sk_buff
*skb
)
336 struct hci_rp_read_class_of_dev
*rp
= (void *) skb
->data
;
338 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
343 memcpy(hdev
->dev_class
, rp
->dev_class
, 3);
345 BT_DBG("%s class 0x%.2x%.2x%.2x", hdev
->name
,
346 hdev
->dev_class
[2], hdev
->dev_class
[1], hdev
->dev_class
[0]);
349 static void hci_cc_write_class_of_dev(struct hci_dev
*hdev
, struct sk_buff
*skb
)
351 __u8 status
= *((__u8
*) skb
->data
);
354 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
356 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_CLASS_OF_DEV
);
363 memcpy(hdev
->dev_class
, sent
, 3);
365 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
366 mgmt_set_class_of_dev_complete(hdev
, sent
, status
);
368 hci_dev_unlock(hdev
);
371 static void hci_cc_read_voice_setting(struct hci_dev
*hdev
, struct sk_buff
*skb
)
373 struct hci_rp_read_voice_setting
*rp
= (void *) skb
->data
;
376 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
381 setting
= __le16_to_cpu(rp
->voice_setting
);
383 if (hdev
->voice_setting
== setting
)
386 hdev
->voice_setting
= setting
;
388 BT_DBG("%s voice setting 0x%4.4x", hdev
->name
, setting
);
391 hdev
->notify(hdev
, HCI_NOTIFY_VOICE_SETTING
);
394 static void hci_cc_write_voice_setting(struct hci_dev
*hdev
,
397 __u8 status
= *((__u8
*) skb
->data
);
401 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
406 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_VOICE_SETTING
);
410 setting
= get_unaligned_le16(sent
);
412 if (hdev
->voice_setting
== setting
)
415 hdev
->voice_setting
= setting
;
417 BT_DBG("%s voice setting 0x%4.4x", hdev
->name
, setting
);
420 hdev
->notify(hdev
, HCI_NOTIFY_VOICE_SETTING
);
423 static void hci_cc_write_ssp_mode(struct hci_dev
*hdev
, struct sk_buff
*skb
)
425 __u8 status
= *((__u8
*) skb
->data
);
426 struct hci_cp_write_ssp_mode
*sent
;
428 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
430 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_SSP_MODE
);
436 hdev
->host_features
[0] |= LMP_HOST_SSP
;
438 hdev
->host_features
[0] &= ~LMP_HOST_SSP
;
441 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
442 mgmt_ssp_enable_complete(hdev
, sent
->mode
, status
);
445 set_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
);
447 clear_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
);
451 static void hci_cc_read_local_version(struct hci_dev
*hdev
, struct sk_buff
*skb
)
453 struct hci_rp_read_local_version
*rp
= (void *) skb
->data
;
455 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
460 hdev
->hci_ver
= rp
->hci_ver
;
461 hdev
->hci_rev
= __le16_to_cpu(rp
->hci_rev
);
462 hdev
->lmp_ver
= rp
->lmp_ver
;
463 hdev
->manufacturer
= __le16_to_cpu(rp
->manufacturer
);
464 hdev
->lmp_subver
= __le16_to_cpu(rp
->lmp_subver
);
466 BT_DBG("%s manufacturer 0x%4.4x hci ver %d:%d", hdev
->name
,
467 hdev
->manufacturer
, hdev
->hci_ver
, hdev
->hci_rev
);
470 static void hci_cc_read_local_commands(struct hci_dev
*hdev
,
473 struct hci_rp_read_local_commands
*rp
= (void *) skb
->data
;
475 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
478 memcpy(hdev
->commands
, rp
->commands
, sizeof(hdev
->commands
));
481 static void hci_cc_read_local_features(struct hci_dev
*hdev
,
484 struct hci_rp_read_local_features
*rp
= (void *) skb
->data
;
486 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
491 memcpy(hdev
->features
, rp
->features
, 8);
493 /* Adjust default settings according to features
494 * supported by device. */
496 if (hdev
->features
[0] & LMP_3SLOT
)
497 hdev
->pkt_type
|= (HCI_DM3
| HCI_DH3
);
499 if (hdev
->features
[0] & LMP_5SLOT
)
500 hdev
->pkt_type
|= (HCI_DM5
| HCI_DH5
);
502 if (hdev
->features
[1] & LMP_HV2
) {
503 hdev
->pkt_type
|= (HCI_HV2
);
504 hdev
->esco_type
|= (ESCO_HV2
);
507 if (hdev
->features
[1] & LMP_HV3
) {
508 hdev
->pkt_type
|= (HCI_HV3
);
509 hdev
->esco_type
|= (ESCO_HV3
);
512 if (lmp_esco_capable(hdev
))
513 hdev
->esco_type
|= (ESCO_EV3
);
515 if (hdev
->features
[4] & LMP_EV4
)
516 hdev
->esco_type
|= (ESCO_EV4
);
518 if (hdev
->features
[4] & LMP_EV5
)
519 hdev
->esco_type
|= (ESCO_EV5
);
521 if (hdev
->features
[5] & LMP_EDR_ESCO_2M
)
522 hdev
->esco_type
|= (ESCO_2EV3
);
524 if (hdev
->features
[5] & LMP_EDR_ESCO_3M
)
525 hdev
->esco_type
|= (ESCO_3EV3
);
527 if (hdev
->features
[5] & LMP_EDR_3S_ESCO
)
528 hdev
->esco_type
|= (ESCO_2EV5
| ESCO_3EV5
);
530 BT_DBG("%s features 0x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x", hdev
->name
,
531 hdev
->features
[0], hdev
->features
[1],
532 hdev
->features
[2], hdev
->features
[3],
533 hdev
->features
[4], hdev
->features
[5],
534 hdev
->features
[6], hdev
->features
[7]);
537 static void hci_cc_read_local_ext_features(struct hci_dev
*hdev
,
540 struct hci_rp_read_local_ext_features
*rp
= (void *) skb
->data
;
542 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
549 memcpy(hdev
->features
, rp
->features
, 8);
552 memcpy(hdev
->host_features
, rp
->features
, 8);
557 static void hci_cc_read_flow_control_mode(struct hci_dev
*hdev
,
560 struct hci_rp_read_flow_control_mode
*rp
= (void *) skb
->data
;
562 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
565 hdev
->flow_ctl_mode
= rp
->mode
;
568 static void hci_cc_read_buffer_size(struct hci_dev
*hdev
, struct sk_buff
*skb
)
570 struct hci_rp_read_buffer_size
*rp
= (void *) skb
->data
;
572 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
577 hdev
->acl_mtu
= __le16_to_cpu(rp
->acl_mtu
);
578 hdev
->sco_mtu
= rp
->sco_mtu
;
579 hdev
->acl_pkts
= __le16_to_cpu(rp
->acl_max_pkt
);
580 hdev
->sco_pkts
= __le16_to_cpu(rp
->sco_max_pkt
);
582 if (test_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE
, &hdev
->quirks
)) {
587 hdev
->acl_cnt
= hdev
->acl_pkts
;
588 hdev
->sco_cnt
= hdev
->sco_pkts
;
590 BT_DBG("%s acl mtu %d:%d sco mtu %d:%d", hdev
->name
, hdev
->acl_mtu
,
591 hdev
->acl_pkts
, hdev
->sco_mtu
, hdev
->sco_pkts
);
594 static void hci_cc_read_bd_addr(struct hci_dev
*hdev
, struct sk_buff
*skb
)
596 struct hci_rp_read_bd_addr
*rp
= (void *) skb
->data
;
598 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
601 bacpy(&hdev
->bdaddr
, &rp
->bdaddr
);
604 static void hci_cc_read_data_block_size(struct hci_dev
*hdev
,
607 struct hci_rp_read_data_block_size
*rp
= (void *) skb
->data
;
609 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
614 hdev
->block_mtu
= __le16_to_cpu(rp
->max_acl_len
);
615 hdev
->block_len
= __le16_to_cpu(rp
->block_len
);
616 hdev
->num_blocks
= __le16_to_cpu(rp
->num_blocks
);
618 hdev
->block_cnt
= hdev
->num_blocks
;
620 BT_DBG("%s blk mtu %d cnt %d len %d", hdev
->name
, hdev
->block_mtu
,
621 hdev
->block_cnt
, hdev
->block_len
);
624 static void hci_cc_read_local_amp_info(struct hci_dev
*hdev
,
627 struct hci_rp_read_local_amp_info
*rp
= (void *) skb
->data
;
629 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
634 hdev
->amp_status
= rp
->amp_status
;
635 hdev
->amp_total_bw
= __le32_to_cpu(rp
->total_bw
);
636 hdev
->amp_max_bw
= __le32_to_cpu(rp
->max_bw
);
637 hdev
->amp_min_latency
= __le32_to_cpu(rp
->min_latency
);
638 hdev
->amp_max_pdu
= __le32_to_cpu(rp
->max_pdu
);
639 hdev
->amp_type
= rp
->amp_type
;
640 hdev
->amp_pal_cap
= __le16_to_cpu(rp
->pal_cap
);
641 hdev
->amp_assoc_size
= __le16_to_cpu(rp
->max_assoc_size
);
642 hdev
->amp_be_flush_to
= __le32_to_cpu(rp
->be_flush_to
);
643 hdev
->amp_max_flush_to
= __le32_to_cpu(rp
->max_flush_to
);
646 a2mp_send_getinfo_rsp(hdev
);
649 static void hci_cc_read_local_amp_assoc(struct hci_dev
*hdev
,
652 struct hci_rp_read_local_amp_assoc
*rp
= (void *) skb
->data
;
653 struct amp_assoc
*assoc
= &hdev
->loc_assoc
;
654 size_t rem_len
, frag_len
;
656 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
661 frag_len
= skb
->len
- sizeof(*rp
);
662 rem_len
= __le16_to_cpu(rp
->rem_len
);
664 if (rem_len
> frag_len
) {
665 BT_DBG("frag_len %zu rem_len %zu", frag_len
, rem_len
);
667 memcpy(assoc
->data
+ assoc
->offset
, rp
->frag
, frag_len
);
668 assoc
->offset
+= frag_len
;
670 /* Read other fragments */
671 amp_read_loc_assoc_frag(hdev
, rp
->phy_handle
);
676 memcpy(assoc
->data
+ assoc
->offset
, rp
->frag
, rem_len
);
677 assoc
->len
= assoc
->offset
+ rem_len
;
681 /* Send A2MP Rsp when all fragments are received */
682 a2mp_send_getampassoc_rsp(hdev
, rp
->status
);
683 a2mp_send_create_phy_link_req(hdev
, rp
->status
);
686 static void hci_cc_read_inq_rsp_tx_power(struct hci_dev
*hdev
,
689 struct hci_rp_read_inq_rsp_tx_power
*rp
= (void *) skb
->data
;
691 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
694 hdev
->inq_tx_power
= rp
->tx_power
;
697 static void hci_cc_pin_code_reply(struct hci_dev
*hdev
, struct sk_buff
*skb
)
699 struct hci_rp_pin_code_reply
*rp
= (void *) skb
->data
;
700 struct hci_cp_pin_code_reply
*cp
;
701 struct hci_conn
*conn
;
703 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
707 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
708 mgmt_pin_code_reply_complete(hdev
, &rp
->bdaddr
, rp
->status
);
713 cp
= hci_sent_cmd_data(hdev
, HCI_OP_PIN_CODE_REPLY
);
717 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &cp
->bdaddr
);
719 conn
->pin_length
= cp
->pin_len
;
722 hci_dev_unlock(hdev
);
725 static void hci_cc_pin_code_neg_reply(struct hci_dev
*hdev
, struct sk_buff
*skb
)
727 struct hci_rp_pin_code_neg_reply
*rp
= (void *) skb
->data
;
729 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
733 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
734 mgmt_pin_code_neg_reply_complete(hdev
, &rp
->bdaddr
,
737 hci_dev_unlock(hdev
);
740 static void hci_cc_le_read_buffer_size(struct hci_dev
*hdev
,
743 struct hci_rp_le_read_buffer_size
*rp
= (void *) skb
->data
;
745 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
750 hdev
->le_mtu
= __le16_to_cpu(rp
->le_mtu
);
751 hdev
->le_pkts
= rp
->le_max_pkt
;
753 hdev
->le_cnt
= hdev
->le_pkts
;
755 BT_DBG("%s le mtu %d:%d", hdev
->name
, hdev
->le_mtu
, hdev
->le_pkts
);
758 static void hci_cc_le_read_local_features(struct hci_dev
*hdev
,
761 struct hci_rp_le_read_local_features
*rp
= (void *) skb
->data
;
763 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
766 memcpy(hdev
->le_features
, rp
->features
, 8);
769 static void hci_cc_le_read_adv_tx_power(struct hci_dev
*hdev
,
772 struct hci_rp_le_read_adv_tx_power
*rp
= (void *) skb
->data
;
774 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
777 hdev
->adv_tx_power
= rp
->tx_power
;
780 static void hci_cc_user_confirm_reply(struct hci_dev
*hdev
, struct sk_buff
*skb
)
782 struct hci_rp_user_confirm_reply
*rp
= (void *) skb
->data
;
784 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
788 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
789 mgmt_user_confirm_reply_complete(hdev
, &rp
->bdaddr
, ACL_LINK
, 0,
792 hci_dev_unlock(hdev
);
795 static void hci_cc_user_confirm_neg_reply(struct hci_dev
*hdev
,
798 struct hci_rp_user_confirm_reply
*rp
= (void *) skb
->data
;
800 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
804 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
805 mgmt_user_confirm_neg_reply_complete(hdev
, &rp
->bdaddr
,
806 ACL_LINK
, 0, rp
->status
);
808 hci_dev_unlock(hdev
);
811 static void hci_cc_user_passkey_reply(struct hci_dev
*hdev
, struct sk_buff
*skb
)
813 struct hci_rp_user_confirm_reply
*rp
= (void *) skb
->data
;
815 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
819 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
820 mgmt_user_passkey_reply_complete(hdev
, &rp
->bdaddr
, ACL_LINK
,
823 hci_dev_unlock(hdev
);
826 static void hci_cc_user_passkey_neg_reply(struct hci_dev
*hdev
,
829 struct hci_rp_user_confirm_reply
*rp
= (void *) skb
->data
;
831 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
835 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
836 mgmt_user_passkey_neg_reply_complete(hdev
, &rp
->bdaddr
,
837 ACL_LINK
, 0, rp
->status
);
839 hci_dev_unlock(hdev
);
842 static void hci_cc_read_local_oob_data_reply(struct hci_dev
*hdev
,
845 struct hci_rp_read_local_oob_data
*rp
= (void *) skb
->data
;
847 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
850 mgmt_read_local_oob_data_reply_complete(hdev
, rp
->hash
,
851 rp
->randomizer
, rp
->status
);
852 hci_dev_unlock(hdev
);
855 static void hci_cc_le_set_adv_enable(struct hci_dev
*hdev
, struct sk_buff
*skb
)
857 __u8
*sent
, status
= *((__u8
*) skb
->data
);
859 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
861 sent
= hci_sent_cmd_data(hdev
, HCI_OP_LE_SET_ADV_ENABLE
);
869 set_bit(HCI_LE_PERIPHERAL
, &hdev
->dev_flags
);
871 clear_bit(HCI_LE_PERIPHERAL
, &hdev
->dev_flags
);
874 if (!test_bit(HCI_INIT
, &hdev
->flags
)) {
875 struct hci_request req
;
877 hci_req_init(&req
, hdev
);
879 hci_req_run(&req
, NULL
);
882 hci_dev_unlock(hdev
);
885 static void hci_cc_le_set_scan_param(struct hci_dev
*hdev
, struct sk_buff
*skb
)
887 __u8 status
= *((__u8
*) skb
->data
);
889 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
893 mgmt_start_discovery_failed(hdev
, status
);
894 hci_dev_unlock(hdev
);
899 static void hci_cc_le_set_scan_enable(struct hci_dev
*hdev
,
902 struct hci_cp_le_set_scan_enable
*cp
;
903 __u8 status
= *((__u8
*) skb
->data
);
905 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
907 cp
= hci_sent_cmd_data(hdev
, HCI_OP_LE_SET_SCAN_ENABLE
);
911 switch (cp
->enable
) {
912 case LE_SCANNING_ENABLED
:
915 mgmt_start_discovery_failed(hdev
, status
);
916 hci_dev_unlock(hdev
);
920 set_bit(HCI_LE_SCAN
, &hdev
->dev_flags
);
923 hci_discovery_set_state(hdev
, DISCOVERY_FINDING
);
924 hci_dev_unlock(hdev
);
927 case LE_SCANNING_DISABLED
:
930 mgmt_stop_discovery_failed(hdev
, status
);
931 hci_dev_unlock(hdev
);
935 clear_bit(HCI_LE_SCAN
, &hdev
->dev_flags
);
937 if (hdev
->discovery
.type
== DISCOV_TYPE_INTERLEAVED
&&
938 hdev
->discovery
.state
== DISCOVERY_FINDING
) {
939 mgmt_interleaved_discovery(hdev
);
942 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
943 hci_dev_unlock(hdev
);
949 BT_ERR("Used reserved LE_Scan_Enable param %d", cp
->enable
);
954 static void hci_cc_le_read_white_list_size(struct hci_dev
*hdev
,
957 struct hci_rp_le_read_white_list_size
*rp
= (void *) skb
->data
;
959 BT_DBG("%s status 0x%2.2x size %u", hdev
->name
, rp
->status
, rp
->size
);
962 hdev
->le_white_list_size
= rp
->size
;
965 static void hci_cc_le_read_supported_states(struct hci_dev
*hdev
,
968 struct hci_rp_le_read_supported_states
*rp
= (void *) skb
->data
;
970 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
973 memcpy(hdev
->le_states
, rp
->le_states
, 8);
976 static void hci_cc_write_le_host_supported(struct hci_dev
*hdev
,
979 struct hci_cp_write_le_host_supported
*sent
;
980 __u8 status
= *((__u8
*) skb
->data
);
982 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
984 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_LE_HOST_SUPPORTED
);
990 hdev
->host_features
[0] |= LMP_HOST_LE
;
992 hdev
->host_features
[0] &= ~LMP_HOST_LE
;
995 hdev
->host_features
[0] |= LMP_HOST_LE_BREDR
;
997 hdev
->host_features
[0] &= ~LMP_HOST_LE_BREDR
;
1000 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
) &&
1001 !test_bit(HCI_INIT
, &hdev
->flags
))
1002 mgmt_le_enable_complete(hdev
, sent
->le
, status
);
1005 static void hci_cc_write_remote_amp_assoc(struct hci_dev
*hdev
,
1006 struct sk_buff
*skb
)
1008 struct hci_rp_write_remote_amp_assoc
*rp
= (void *) skb
->data
;
1010 BT_DBG("%s status 0x%2.2x phy_handle 0x%2.2x",
1011 hdev
->name
, rp
->status
, rp
->phy_handle
);
1016 amp_write_rem_assoc_continue(hdev
, rp
->phy_handle
);
1019 static void hci_cs_inquiry(struct hci_dev
*hdev
, __u8 status
)
1021 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1024 hci_conn_check_pending(hdev
);
1026 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
1027 mgmt_start_discovery_failed(hdev
, status
);
1028 hci_dev_unlock(hdev
);
1032 set_bit(HCI_INQUIRY
, &hdev
->flags
);
1035 hci_discovery_set_state(hdev
, DISCOVERY_FINDING
);
1036 hci_dev_unlock(hdev
);
1039 static void hci_cs_create_conn(struct hci_dev
*hdev
, __u8 status
)
1041 struct hci_cp_create_conn
*cp
;
1042 struct hci_conn
*conn
;
1044 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1046 cp
= hci_sent_cmd_data(hdev
, HCI_OP_CREATE_CONN
);
1052 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &cp
->bdaddr
);
1054 BT_DBG("%s bdaddr %pMR hcon %p", hdev
->name
, &cp
->bdaddr
, conn
);
1057 if (conn
&& conn
->state
== BT_CONNECT
) {
1058 if (status
!= 0x0c || conn
->attempt
> 2) {
1059 conn
->state
= BT_CLOSED
;
1060 hci_proto_connect_cfm(conn
, status
);
1063 conn
->state
= BT_CONNECT2
;
1067 conn
= hci_conn_add(hdev
, ACL_LINK
, &cp
->bdaddr
);
1070 conn
->link_mode
|= HCI_LM_MASTER
;
1072 BT_ERR("No memory for new connection");
1076 hci_dev_unlock(hdev
);
1079 static void hci_cs_add_sco(struct hci_dev
*hdev
, __u8 status
)
1081 struct hci_cp_add_sco
*cp
;
1082 struct hci_conn
*acl
, *sco
;
1085 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1090 cp
= hci_sent_cmd_data(hdev
, HCI_OP_ADD_SCO
);
1094 handle
= __le16_to_cpu(cp
->handle
);
1096 BT_DBG("%s handle 0x%4.4x", hdev
->name
, handle
);
1100 acl
= hci_conn_hash_lookup_handle(hdev
, handle
);
1104 sco
->state
= BT_CLOSED
;
1106 hci_proto_connect_cfm(sco
, status
);
1111 hci_dev_unlock(hdev
);
1114 static void hci_cs_auth_requested(struct hci_dev
*hdev
, __u8 status
)
1116 struct hci_cp_auth_requested
*cp
;
1117 struct hci_conn
*conn
;
1119 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1124 cp
= hci_sent_cmd_data(hdev
, HCI_OP_AUTH_REQUESTED
);
1130 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1132 if (conn
->state
== BT_CONFIG
) {
1133 hci_proto_connect_cfm(conn
, status
);
1138 hci_dev_unlock(hdev
);
1141 static void hci_cs_set_conn_encrypt(struct hci_dev
*hdev
, __u8 status
)
1143 struct hci_cp_set_conn_encrypt
*cp
;
1144 struct hci_conn
*conn
;
1146 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1151 cp
= hci_sent_cmd_data(hdev
, HCI_OP_SET_CONN_ENCRYPT
);
1157 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1159 if (conn
->state
== BT_CONFIG
) {
1160 hci_proto_connect_cfm(conn
, status
);
1165 hci_dev_unlock(hdev
);
1168 static int hci_outgoing_auth_needed(struct hci_dev
*hdev
,
1169 struct hci_conn
*conn
)
1171 if (conn
->state
!= BT_CONFIG
|| !conn
->out
)
1174 if (conn
->pending_sec_level
== BT_SECURITY_SDP
)
1177 /* Only request authentication for SSP connections or non-SSP
1178 * devices with sec_level HIGH or if MITM protection is requested */
1179 if (!hci_conn_ssp_enabled(conn
) && !(conn
->auth_type
& 0x01) &&
1180 conn
->pending_sec_level
!= BT_SECURITY_HIGH
)
1186 static int hci_resolve_name(struct hci_dev
*hdev
,
1187 struct inquiry_entry
*e
)
1189 struct hci_cp_remote_name_req cp
;
1191 memset(&cp
, 0, sizeof(cp
));
1193 bacpy(&cp
.bdaddr
, &e
->data
.bdaddr
);
1194 cp
.pscan_rep_mode
= e
->data
.pscan_rep_mode
;
1195 cp
.pscan_mode
= e
->data
.pscan_mode
;
1196 cp
.clock_offset
= e
->data
.clock_offset
;
1198 return hci_send_cmd(hdev
, HCI_OP_REMOTE_NAME_REQ
, sizeof(cp
), &cp
);
1201 static bool hci_resolve_next_name(struct hci_dev
*hdev
)
1203 struct discovery_state
*discov
= &hdev
->discovery
;
1204 struct inquiry_entry
*e
;
1206 if (list_empty(&discov
->resolve
))
1209 e
= hci_inquiry_cache_lookup_resolve(hdev
, BDADDR_ANY
, NAME_NEEDED
);
1213 if (hci_resolve_name(hdev
, e
) == 0) {
1214 e
->name_state
= NAME_PENDING
;
1221 static void hci_check_pending_name(struct hci_dev
*hdev
, struct hci_conn
*conn
,
1222 bdaddr_t
*bdaddr
, u8
*name
, u8 name_len
)
1224 struct discovery_state
*discov
= &hdev
->discovery
;
1225 struct inquiry_entry
*e
;
1227 if (conn
&& !test_and_set_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
))
1228 mgmt_device_connected(hdev
, bdaddr
, ACL_LINK
, 0x00, 0, name
,
1229 name_len
, conn
->dev_class
);
1231 if (discov
->state
== DISCOVERY_STOPPED
)
1234 if (discov
->state
== DISCOVERY_STOPPING
)
1235 goto discov_complete
;
1237 if (discov
->state
!= DISCOVERY_RESOLVING
)
1240 e
= hci_inquiry_cache_lookup_resolve(hdev
, bdaddr
, NAME_PENDING
);
1241 /* If the device was not found in a list of found devices names of which
1242 * are pending. there is no need to continue resolving a next name as it
1243 * will be done upon receiving another Remote Name Request Complete
1250 e
->name_state
= NAME_KNOWN
;
1251 mgmt_remote_name(hdev
, bdaddr
, ACL_LINK
, 0x00,
1252 e
->data
.rssi
, name
, name_len
);
1254 e
->name_state
= NAME_NOT_KNOWN
;
1257 if (hci_resolve_next_name(hdev
))
1261 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
1264 static void hci_cs_remote_name_req(struct hci_dev
*hdev
, __u8 status
)
1266 struct hci_cp_remote_name_req
*cp
;
1267 struct hci_conn
*conn
;
1269 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1271 /* If successful wait for the name req complete event before
1272 * checking for the need to do authentication */
1276 cp
= hci_sent_cmd_data(hdev
, HCI_OP_REMOTE_NAME_REQ
);
1282 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &cp
->bdaddr
);
1284 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
1285 hci_check_pending_name(hdev
, conn
, &cp
->bdaddr
, NULL
, 0);
1290 if (!hci_outgoing_auth_needed(hdev
, conn
))
1293 if (!test_and_set_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
)) {
1294 struct hci_cp_auth_requested cp
;
1295 cp
.handle
= __cpu_to_le16(conn
->handle
);
1296 hci_send_cmd(hdev
, HCI_OP_AUTH_REQUESTED
, sizeof(cp
), &cp
);
1300 hci_dev_unlock(hdev
);
1303 static void hci_cs_read_remote_features(struct hci_dev
*hdev
, __u8 status
)
1305 struct hci_cp_read_remote_features
*cp
;
1306 struct hci_conn
*conn
;
1308 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1313 cp
= hci_sent_cmd_data(hdev
, HCI_OP_READ_REMOTE_FEATURES
);
1319 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1321 if (conn
->state
== BT_CONFIG
) {
1322 hci_proto_connect_cfm(conn
, status
);
1327 hci_dev_unlock(hdev
);
1330 static void hci_cs_read_remote_ext_features(struct hci_dev
*hdev
, __u8 status
)
1332 struct hci_cp_read_remote_ext_features
*cp
;
1333 struct hci_conn
*conn
;
1335 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1340 cp
= hci_sent_cmd_data(hdev
, HCI_OP_READ_REMOTE_EXT_FEATURES
);
1346 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1348 if (conn
->state
== BT_CONFIG
) {
1349 hci_proto_connect_cfm(conn
, status
);
1354 hci_dev_unlock(hdev
);
1357 static void hci_cs_setup_sync_conn(struct hci_dev
*hdev
, __u8 status
)
1359 struct hci_cp_setup_sync_conn
*cp
;
1360 struct hci_conn
*acl
, *sco
;
1363 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1368 cp
= hci_sent_cmd_data(hdev
, HCI_OP_SETUP_SYNC_CONN
);
1372 handle
= __le16_to_cpu(cp
->handle
);
1374 BT_DBG("%s handle 0x%4.4x", hdev
->name
, handle
);
1378 acl
= hci_conn_hash_lookup_handle(hdev
, handle
);
1382 sco
->state
= BT_CLOSED
;
1384 hci_proto_connect_cfm(sco
, status
);
1389 hci_dev_unlock(hdev
);
1392 static void hci_cs_sniff_mode(struct hci_dev
*hdev
, __u8 status
)
1394 struct hci_cp_sniff_mode
*cp
;
1395 struct hci_conn
*conn
;
1397 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1402 cp
= hci_sent_cmd_data(hdev
, HCI_OP_SNIFF_MODE
);
1408 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1410 clear_bit(HCI_CONN_MODE_CHANGE_PEND
, &conn
->flags
);
1412 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND
, &conn
->flags
))
1413 hci_sco_setup(conn
, status
);
1416 hci_dev_unlock(hdev
);
1419 static void hci_cs_exit_sniff_mode(struct hci_dev
*hdev
, __u8 status
)
1421 struct hci_cp_exit_sniff_mode
*cp
;
1422 struct hci_conn
*conn
;
1424 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1429 cp
= hci_sent_cmd_data(hdev
, HCI_OP_EXIT_SNIFF_MODE
);
1435 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1437 clear_bit(HCI_CONN_MODE_CHANGE_PEND
, &conn
->flags
);
1439 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND
, &conn
->flags
))
1440 hci_sco_setup(conn
, status
);
1443 hci_dev_unlock(hdev
);
1446 static void hci_cs_disconnect(struct hci_dev
*hdev
, u8 status
)
1448 struct hci_cp_disconnect
*cp
;
1449 struct hci_conn
*conn
;
1454 cp
= hci_sent_cmd_data(hdev
, HCI_OP_DISCONNECT
);
1460 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1462 mgmt_disconnect_failed(hdev
, &conn
->dst
, conn
->type
,
1463 conn
->dst_type
, status
);
1465 hci_dev_unlock(hdev
);
1468 static void hci_cs_le_create_conn(struct hci_dev
*hdev
, __u8 status
)
1470 struct hci_conn
*conn
;
1472 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1477 conn
= hci_conn_hash_lookup_state(hdev
, LE_LINK
, BT_CONNECT
);
1479 hci_dev_unlock(hdev
);
1483 BT_DBG("%s bdaddr %pMR conn %p", hdev
->name
, &conn
->dst
, conn
);
1485 conn
->state
= BT_CLOSED
;
1486 mgmt_connect_failed(hdev
, &conn
->dst
, conn
->type
,
1487 conn
->dst_type
, status
);
1488 hci_proto_connect_cfm(conn
, status
);
1491 hci_dev_unlock(hdev
);
1495 static void hci_cs_create_phylink(struct hci_dev
*hdev
, u8 status
)
1497 struct hci_cp_create_phy_link
*cp
;
1499 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1501 cp
= hci_sent_cmd_data(hdev
, HCI_OP_CREATE_PHY_LINK
);
1508 struct hci_conn
*hcon
;
1510 hcon
= hci_conn_hash_lookup_handle(hdev
, cp
->phy_handle
);
1514 amp_write_remote_assoc(hdev
, cp
->phy_handle
);
1517 hci_dev_unlock(hdev
);
1520 static void hci_cs_accept_phylink(struct hci_dev
*hdev
, u8 status
)
1522 struct hci_cp_accept_phy_link
*cp
;
1524 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1529 cp
= hci_sent_cmd_data(hdev
, HCI_OP_ACCEPT_PHY_LINK
);
1533 amp_write_remote_assoc(hdev
, cp
->phy_handle
);
1536 static void hci_inquiry_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1538 __u8 status
= *((__u8
*) skb
->data
);
1539 struct discovery_state
*discov
= &hdev
->discovery
;
1540 struct inquiry_entry
*e
;
1542 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1544 hci_req_cmd_complete(hdev
, HCI_OP_INQUIRY
, status
);
1546 hci_conn_check_pending(hdev
);
1548 if (!test_and_clear_bit(HCI_INQUIRY
, &hdev
->flags
))
1551 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
1556 if (discov
->state
!= DISCOVERY_FINDING
)
1559 if (list_empty(&discov
->resolve
)) {
1560 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
1564 e
= hci_inquiry_cache_lookup_resolve(hdev
, BDADDR_ANY
, NAME_NEEDED
);
1565 if (e
&& hci_resolve_name(hdev
, e
) == 0) {
1566 e
->name_state
= NAME_PENDING
;
1567 hci_discovery_set_state(hdev
, DISCOVERY_RESOLVING
);
1569 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
1573 hci_dev_unlock(hdev
);
1576 static void hci_inquiry_result_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1578 struct inquiry_data data
;
1579 struct inquiry_info
*info
= (void *) (skb
->data
+ 1);
1580 int num_rsp
= *((__u8
*) skb
->data
);
1582 BT_DBG("%s num_rsp %d", hdev
->name
, num_rsp
);
1587 if (test_bit(HCI_PERIODIC_INQ
, &hdev
->dev_flags
))
1592 for (; num_rsp
; num_rsp
--, info
++) {
1593 bool name_known
, ssp
;
1595 bacpy(&data
.bdaddr
, &info
->bdaddr
);
1596 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
1597 data
.pscan_period_mode
= info
->pscan_period_mode
;
1598 data
.pscan_mode
= info
->pscan_mode
;
1599 memcpy(data
.dev_class
, info
->dev_class
, 3);
1600 data
.clock_offset
= info
->clock_offset
;
1602 data
.ssp_mode
= 0x00;
1604 name_known
= hci_inquiry_cache_update(hdev
, &data
, false, &ssp
);
1605 mgmt_device_found(hdev
, &info
->bdaddr
, ACL_LINK
, 0x00,
1606 info
->dev_class
, 0, !name_known
, ssp
, NULL
,
1610 hci_dev_unlock(hdev
);
1613 static void hci_conn_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1615 struct hci_ev_conn_complete
*ev
= (void *) skb
->data
;
1616 struct hci_conn
*conn
;
1618 BT_DBG("%s", hdev
->name
);
1622 conn
= hci_conn_hash_lookup_ba(hdev
, ev
->link_type
, &ev
->bdaddr
);
1624 if (ev
->link_type
!= SCO_LINK
)
1627 conn
= hci_conn_hash_lookup_ba(hdev
, ESCO_LINK
, &ev
->bdaddr
);
1631 conn
->type
= SCO_LINK
;
1635 conn
->handle
= __le16_to_cpu(ev
->handle
);
1637 if (conn
->type
== ACL_LINK
) {
1638 conn
->state
= BT_CONFIG
;
1639 hci_conn_hold(conn
);
1641 if (!conn
->out
&& !hci_conn_ssp_enabled(conn
) &&
1642 !hci_find_link_key(hdev
, &ev
->bdaddr
))
1643 conn
->disc_timeout
= HCI_PAIRING_TIMEOUT
;
1645 conn
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
1647 conn
->state
= BT_CONNECTED
;
1649 hci_conn_hold_device(conn
);
1650 hci_conn_add_sysfs(conn
);
1652 if (test_bit(HCI_AUTH
, &hdev
->flags
))
1653 conn
->link_mode
|= HCI_LM_AUTH
;
1655 if (test_bit(HCI_ENCRYPT
, &hdev
->flags
))
1656 conn
->link_mode
|= HCI_LM_ENCRYPT
;
1658 /* Get remote features */
1659 if (conn
->type
== ACL_LINK
) {
1660 struct hci_cp_read_remote_features cp
;
1661 cp
.handle
= ev
->handle
;
1662 hci_send_cmd(hdev
, HCI_OP_READ_REMOTE_FEATURES
,
1666 /* Set packet type for incoming connection */
1667 if (!conn
->out
&& hdev
->hci_ver
< BLUETOOTH_VER_2_0
) {
1668 struct hci_cp_change_conn_ptype cp
;
1669 cp
.handle
= ev
->handle
;
1670 cp
.pkt_type
= cpu_to_le16(conn
->pkt_type
);
1671 hci_send_cmd(hdev
, HCI_OP_CHANGE_CONN_PTYPE
, sizeof(cp
),
1675 conn
->state
= BT_CLOSED
;
1676 if (conn
->type
== ACL_LINK
)
1677 mgmt_connect_failed(hdev
, &ev
->bdaddr
, conn
->type
,
1678 conn
->dst_type
, ev
->status
);
1681 if (conn
->type
== ACL_LINK
)
1682 hci_sco_setup(conn
, ev
->status
);
1685 hci_proto_connect_cfm(conn
, ev
->status
);
1687 } else if (ev
->link_type
!= ACL_LINK
)
1688 hci_proto_connect_cfm(conn
, ev
->status
);
1691 hci_dev_unlock(hdev
);
1693 hci_conn_check_pending(hdev
);
1696 void hci_conn_accept(struct hci_conn
*conn
, int mask
)
1698 struct hci_dev
*hdev
= conn
->hdev
;
1700 BT_DBG("conn %p", conn
);
1702 conn
->state
= BT_CONFIG
;
1704 if (!lmp_esco_capable(hdev
)) {
1705 struct hci_cp_accept_conn_req cp
;
1707 bacpy(&cp
.bdaddr
, &conn
->dst
);
1709 if (lmp_rswitch_capable(hdev
) && (mask
& HCI_LM_MASTER
))
1710 cp
.role
= 0x00; /* Become master */
1712 cp
.role
= 0x01; /* Remain slave */
1714 hci_send_cmd(hdev
, HCI_OP_ACCEPT_CONN_REQ
, sizeof(cp
), &cp
);
1715 } else /* lmp_esco_capable(hdev)) */ {
1716 struct hci_cp_accept_sync_conn_req cp
;
1718 bacpy(&cp
.bdaddr
, &conn
->dst
);
1719 cp
.pkt_type
= cpu_to_le16(conn
->pkt_type
);
1721 cp
.tx_bandwidth
= __constant_cpu_to_le32(0x00001f40);
1722 cp
.rx_bandwidth
= __constant_cpu_to_le32(0x00001f40);
1723 cp
.max_latency
= __constant_cpu_to_le16(0xffff);
1724 cp
.content_format
= cpu_to_le16(hdev
->voice_setting
);
1725 cp
.retrans_effort
= 0xff;
1727 hci_send_cmd(hdev
, HCI_OP_ACCEPT_SYNC_CONN_REQ
,
1732 static void hci_conn_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1734 struct hci_ev_conn_request
*ev
= (void *) skb
->data
;
1735 int mask
= hdev
->link_mode
;
1738 BT_DBG("%s bdaddr %pMR type 0x%x", hdev
->name
, &ev
->bdaddr
,
1741 mask
|= hci_proto_connect_ind(hdev
, &ev
->bdaddr
, ev
->link_type
,
1744 if ((mask
& HCI_LM_ACCEPT
) &&
1745 !hci_blacklist_lookup(hdev
, &ev
->bdaddr
)) {
1746 /* Connection accepted */
1747 struct inquiry_entry
*ie
;
1748 struct hci_conn
*conn
;
1752 ie
= hci_inquiry_cache_lookup(hdev
, &ev
->bdaddr
);
1754 memcpy(ie
->data
.dev_class
, ev
->dev_class
, 3);
1756 conn
= hci_conn_hash_lookup_ba(hdev
, ev
->link_type
,
1759 conn
= hci_conn_add(hdev
, ev
->link_type
, &ev
->bdaddr
);
1761 BT_ERR("No memory for new connection");
1762 hci_dev_unlock(hdev
);
1767 memcpy(conn
->dev_class
, ev
->dev_class
, 3);
1769 hci_dev_unlock(hdev
);
1771 if (ev
->link_type
== ACL_LINK
||
1772 (!(flags
& HCI_PROTO_DEFER
) && !lmp_esco_capable(hdev
))) {
1773 struct hci_cp_accept_conn_req cp
;
1774 conn
->state
= BT_CONNECT
;
1776 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
1778 if (lmp_rswitch_capable(hdev
) && (mask
& HCI_LM_MASTER
))
1779 cp
.role
= 0x00; /* Become master */
1781 cp
.role
= 0x01; /* Remain slave */
1783 hci_send_cmd(hdev
, HCI_OP_ACCEPT_CONN_REQ
, sizeof(cp
),
1785 } else if (!(flags
& HCI_PROTO_DEFER
)) {
1786 struct hci_cp_accept_sync_conn_req cp
;
1787 conn
->state
= BT_CONNECT
;
1789 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
1790 cp
.pkt_type
= cpu_to_le16(conn
->pkt_type
);
1792 cp
.tx_bandwidth
= __constant_cpu_to_le32(0x00001f40);
1793 cp
.rx_bandwidth
= __constant_cpu_to_le32(0x00001f40);
1794 cp
.max_latency
= __constant_cpu_to_le16(0xffff);
1795 cp
.content_format
= cpu_to_le16(hdev
->voice_setting
);
1796 cp
.retrans_effort
= 0xff;
1798 hci_send_cmd(hdev
, HCI_OP_ACCEPT_SYNC_CONN_REQ
,
1801 conn
->state
= BT_CONNECT2
;
1802 hci_proto_connect_cfm(conn
, 0);
1806 /* Connection rejected */
1807 struct hci_cp_reject_conn_req cp
;
1809 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
1810 cp
.reason
= HCI_ERROR_REJ_BAD_ADDR
;
1811 hci_send_cmd(hdev
, HCI_OP_REJECT_CONN_REQ
, sizeof(cp
), &cp
);
1815 static u8
hci_to_mgmt_reason(u8 err
)
1818 case HCI_ERROR_CONNECTION_TIMEOUT
:
1819 return MGMT_DEV_DISCONN_TIMEOUT
;
1820 case HCI_ERROR_REMOTE_USER_TERM
:
1821 case HCI_ERROR_REMOTE_LOW_RESOURCES
:
1822 case HCI_ERROR_REMOTE_POWER_OFF
:
1823 return MGMT_DEV_DISCONN_REMOTE
;
1824 case HCI_ERROR_LOCAL_HOST_TERM
:
1825 return MGMT_DEV_DISCONN_LOCAL_HOST
;
1827 return MGMT_DEV_DISCONN_UNKNOWN
;
1831 static void hci_disconn_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1833 struct hci_ev_disconn_complete
*ev
= (void *) skb
->data
;
1834 struct hci_conn
*conn
;
1836 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
1840 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1844 if (ev
->status
== 0)
1845 conn
->state
= BT_CLOSED
;
1847 if (test_and_clear_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
) &&
1848 (conn
->type
== ACL_LINK
|| conn
->type
== LE_LINK
)) {
1850 mgmt_disconnect_failed(hdev
, &conn
->dst
, conn
->type
,
1851 conn
->dst_type
, ev
->status
);
1853 u8 reason
= hci_to_mgmt_reason(ev
->reason
);
1855 mgmt_device_disconnected(hdev
, &conn
->dst
, conn
->type
,
1856 conn
->dst_type
, reason
);
1860 if (ev
->status
== 0) {
1861 if (conn
->type
== ACL_LINK
&& conn
->flush_key
)
1862 hci_remove_link_key(hdev
, &conn
->dst
);
1863 hci_proto_disconn_cfm(conn
, ev
->reason
);
1868 hci_dev_unlock(hdev
);
1871 static void hci_auth_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1873 struct hci_ev_auth_complete
*ev
= (void *) skb
->data
;
1874 struct hci_conn
*conn
;
1876 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
1880 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1885 if (!hci_conn_ssp_enabled(conn
) &&
1886 test_bit(HCI_CONN_REAUTH_PEND
, &conn
->flags
)) {
1887 BT_INFO("re-auth of legacy device is not possible.");
1889 conn
->link_mode
|= HCI_LM_AUTH
;
1890 conn
->sec_level
= conn
->pending_sec_level
;
1893 mgmt_auth_failed(hdev
, &conn
->dst
, conn
->type
, conn
->dst_type
,
1897 clear_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
);
1898 clear_bit(HCI_CONN_REAUTH_PEND
, &conn
->flags
);
1900 if (conn
->state
== BT_CONFIG
) {
1901 if (!ev
->status
&& hci_conn_ssp_enabled(conn
)) {
1902 struct hci_cp_set_conn_encrypt cp
;
1903 cp
.handle
= ev
->handle
;
1905 hci_send_cmd(hdev
, HCI_OP_SET_CONN_ENCRYPT
, sizeof(cp
),
1908 conn
->state
= BT_CONNECTED
;
1909 hci_proto_connect_cfm(conn
, ev
->status
);
1913 hci_auth_cfm(conn
, ev
->status
);
1915 hci_conn_hold(conn
);
1916 conn
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
1920 if (test_bit(HCI_CONN_ENCRYPT_PEND
, &conn
->flags
)) {
1922 struct hci_cp_set_conn_encrypt cp
;
1923 cp
.handle
= ev
->handle
;
1925 hci_send_cmd(hdev
, HCI_OP_SET_CONN_ENCRYPT
, sizeof(cp
),
1928 clear_bit(HCI_CONN_ENCRYPT_PEND
, &conn
->flags
);
1929 hci_encrypt_cfm(conn
, ev
->status
, 0x00);
1934 hci_dev_unlock(hdev
);
1937 static void hci_remote_name_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1939 struct hci_ev_remote_name
*ev
= (void *) skb
->data
;
1940 struct hci_conn
*conn
;
1942 BT_DBG("%s", hdev
->name
);
1944 hci_conn_check_pending(hdev
);
1948 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
1950 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
1953 if (ev
->status
== 0)
1954 hci_check_pending_name(hdev
, conn
, &ev
->bdaddr
, ev
->name
,
1955 strnlen(ev
->name
, HCI_MAX_NAME_LENGTH
));
1957 hci_check_pending_name(hdev
, conn
, &ev
->bdaddr
, NULL
, 0);
1963 if (!hci_outgoing_auth_needed(hdev
, conn
))
1966 if (!test_and_set_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
)) {
1967 struct hci_cp_auth_requested cp
;
1968 cp
.handle
= __cpu_to_le16(conn
->handle
);
1969 hci_send_cmd(hdev
, HCI_OP_AUTH_REQUESTED
, sizeof(cp
), &cp
);
1973 hci_dev_unlock(hdev
);
1976 static void hci_encrypt_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1978 struct hci_ev_encrypt_change
*ev
= (void *) skb
->data
;
1979 struct hci_conn
*conn
;
1981 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
1985 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1989 /* Encryption implies authentication */
1990 conn
->link_mode
|= HCI_LM_AUTH
;
1991 conn
->link_mode
|= HCI_LM_ENCRYPT
;
1992 conn
->sec_level
= conn
->pending_sec_level
;
1994 conn
->link_mode
&= ~HCI_LM_ENCRYPT
;
1997 clear_bit(HCI_CONN_ENCRYPT_PEND
, &conn
->flags
);
1999 if (ev
->status
&& conn
->state
== BT_CONNECTED
) {
2000 hci_disconnect(conn
, HCI_ERROR_AUTH_FAILURE
);
2005 if (conn
->state
== BT_CONFIG
) {
2007 conn
->state
= BT_CONNECTED
;
2009 hci_proto_connect_cfm(conn
, ev
->status
);
2012 hci_encrypt_cfm(conn
, ev
->status
, ev
->encrypt
);
2016 hci_dev_unlock(hdev
);
2019 static void hci_change_link_key_complete_evt(struct hci_dev
*hdev
,
2020 struct sk_buff
*skb
)
2022 struct hci_ev_change_link_key_complete
*ev
= (void *) skb
->data
;
2023 struct hci_conn
*conn
;
2025 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2029 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2032 conn
->link_mode
|= HCI_LM_SECURE
;
2034 clear_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
);
2036 hci_key_change_cfm(conn
, ev
->status
);
2039 hci_dev_unlock(hdev
);
2042 static void hci_remote_features_evt(struct hci_dev
*hdev
,
2043 struct sk_buff
*skb
)
2045 struct hci_ev_remote_features
*ev
= (void *) skb
->data
;
2046 struct hci_conn
*conn
;
2048 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2052 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2057 memcpy(conn
->features
, ev
->features
, 8);
2059 if (conn
->state
!= BT_CONFIG
)
2062 if (!ev
->status
&& lmp_ssp_capable(hdev
) && lmp_ssp_capable(conn
)) {
2063 struct hci_cp_read_remote_ext_features cp
;
2064 cp
.handle
= ev
->handle
;
2066 hci_send_cmd(hdev
, HCI_OP_READ_REMOTE_EXT_FEATURES
,
2071 if (!ev
->status
&& !test_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
)) {
2072 struct hci_cp_remote_name_req cp
;
2073 memset(&cp
, 0, sizeof(cp
));
2074 bacpy(&cp
.bdaddr
, &conn
->dst
);
2075 cp
.pscan_rep_mode
= 0x02;
2076 hci_send_cmd(hdev
, HCI_OP_REMOTE_NAME_REQ
, sizeof(cp
), &cp
);
2077 } else if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
))
2078 mgmt_device_connected(hdev
, &conn
->dst
, conn
->type
,
2079 conn
->dst_type
, 0, NULL
, 0,
2082 if (!hci_outgoing_auth_needed(hdev
, conn
)) {
2083 conn
->state
= BT_CONNECTED
;
2084 hci_proto_connect_cfm(conn
, ev
->status
);
2089 hci_dev_unlock(hdev
);
2092 static void hci_cmd_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2094 struct hci_ev_cmd_complete
*ev
= (void *) skb
->data
;
2095 u8 status
= skb
->data
[sizeof(*ev
)];
2098 skb_pull(skb
, sizeof(*ev
));
2100 opcode
= __le16_to_cpu(ev
->opcode
);
2103 case HCI_OP_INQUIRY_CANCEL
:
2104 hci_cc_inquiry_cancel(hdev
, skb
);
2107 case HCI_OP_PERIODIC_INQ
:
2108 hci_cc_periodic_inq(hdev
, skb
);
2111 case HCI_OP_EXIT_PERIODIC_INQ
:
2112 hci_cc_exit_periodic_inq(hdev
, skb
);
2115 case HCI_OP_REMOTE_NAME_REQ_CANCEL
:
2116 hci_cc_remote_name_req_cancel(hdev
, skb
);
2119 case HCI_OP_ROLE_DISCOVERY
:
2120 hci_cc_role_discovery(hdev
, skb
);
2123 case HCI_OP_READ_LINK_POLICY
:
2124 hci_cc_read_link_policy(hdev
, skb
);
2127 case HCI_OP_WRITE_LINK_POLICY
:
2128 hci_cc_write_link_policy(hdev
, skb
);
2131 case HCI_OP_READ_DEF_LINK_POLICY
:
2132 hci_cc_read_def_link_policy(hdev
, skb
);
2135 case HCI_OP_WRITE_DEF_LINK_POLICY
:
2136 hci_cc_write_def_link_policy(hdev
, skb
);
2140 hci_cc_reset(hdev
, skb
);
2143 case HCI_OP_WRITE_LOCAL_NAME
:
2144 hci_cc_write_local_name(hdev
, skb
);
2147 case HCI_OP_READ_LOCAL_NAME
:
2148 hci_cc_read_local_name(hdev
, skb
);
2151 case HCI_OP_WRITE_AUTH_ENABLE
:
2152 hci_cc_write_auth_enable(hdev
, skb
);
2155 case HCI_OP_WRITE_ENCRYPT_MODE
:
2156 hci_cc_write_encrypt_mode(hdev
, skb
);
2159 case HCI_OP_WRITE_SCAN_ENABLE
:
2160 hci_cc_write_scan_enable(hdev
, skb
);
2163 case HCI_OP_READ_CLASS_OF_DEV
:
2164 hci_cc_read_class_of_dev(hdev
, skb
);
2167 case HCI_OP_WRITE_CLASS_OF_DEV
:
2168 hci_cc_write_class_of_dev(hdev
, skb
);
2171 case HCI_OP_READ_VOICE_SETTING
:
2172 hci_cc_read_voice_setting(hdev
, skb
);
2175 case HCI_OP_WRITE_VOICE_SETTING
:
2176 hci_cc_write_voice_setting(hdev
, skb
);
2179 case HCI_OP_WRITE_SSP_MODE
:
2180 hci_cc_write_ssp_mode(hdev
, skb
);
2183 case HCI_OP_READ_LOCAL_VERSION
:
2184 hci_cc_read_local_version(hdev
, skb
);
2187 case HCI_OP_READ_LOCAL_COMMANDS
:
2188 hci_cc_read_local_commands(hdev
, skb
);
2191 case HCI_OP_READ_LOCAL_FEATURES
:
2192 hci_cc_read_local_features(hdev
, skb
);
2195 case HCI_OP_READ_LOCAL_EXT_FEATURES
:
2196 hci_cc_read_local_ext_features(hdev
, skb
);
2199 case HCI_OP_READ_BUFFER_SIZE
:
2200 hci_cc_read_buffer_size(hdev
, skb
);
2203 case HCI_OP_READ_BD_ADDR
:
2204 hci_cc_read_bd_addr(hdev
, skb
);
2207 case HCI_OP_READ_DATA_BLOCK_SIZE
:
2208 hci_cc_read_data_block_size(hdev
, skb
);
2211 case HCI_OP_READ_FLOW_CONTROL_MODE
:
2212 hci_cc_read_flow_control_mode(hdev
, skb
);
2215 case HCI_OP_READ_LOCAL_AMP_INFO
:
2216 hci_cc_read_local_amp_info(hdev
, skb
);
2219 case HCI_OP_READ_LOCAL_AMP_ASSOC
:
2220 hci_cc_read_local_amp_assoc(hdev
, skb
);
2223 case HCI_OP_READ_INQ_RSP_TX_POWER
:
2224 hci_cc_read_inq_rsp_tx_power(hdev
, skb
);
2227 case HCI_OP_PIN_CODE_REPLY
:
2228 hci_cc_pin_code_reply(hdev
, skb
);
2231 case HCI_OP_PIN_CODE_NEG_REPLY
:
2232 hci_cc_pin_code_neg_reply(hdev
, skb
);
2235 case HCI_OP_READ_LOCAL_OOB_DATA
:
2236 hci_cc_read_local_oob_data_reply(hdev
, skb
);
2239 case HCI_OP_LE_READ_BUFFER_SIZE
:
2240 hci_cc_le_read_buffer_size(hdev
, skb
);
2243 case HCI_OP_LE_READ_LOCAL_FEATURES
:
2244 hci_cc_le_read_local_features(hdev
, skb
);
2247 case HCI_OP_LE_READ_ADV_TX_POWER
:
2248 hci_cc_le_read_adv_tx_power(hdev
, skb
);
2251 case HCI_OP_USER_CONFIRM_REPLY
:
2252 hci_cc_user_confirm_reply(hdev
, skb
);
2255 case HCI_OP_USER_CONFIRM_NEG_REPLY
:
2256 hci_cc_user_confirm_neg_reply(hdev
, skb
);
2259 case HCI_OP_USER_PASSKEY_REPLY
:
2260 hci_cc_user_passkey_reply(hdev
, skb
);
2263 case HCI_OP_USER_PASSKEY_NEG_REPLY
:
2264 hci_cc_user_passkey_neg_reply(hdev
, skb
);
2267 case HCI_OP_LE_SET_SCAN_PARAM
:
2268 hci_cc_le_set_scan_param(hdev
, skb
);
2271 case HCI_OP_LE_SET_ADV_ENABLE
:
2272 hci_cc_le_set_adv_enable(hdev
, skb
);
2275 case HCI_OP_LE_SET_SCAN_ENABLE
:
2276 hci_cc_le_set_scan_enable(hdev
, skb
);
2279 case HCI_OP_LE_READ_WHITE_LIST_SIZE
:
2280 hci_cc_le_read_white_list_size(hdev
, skb
);
2283 case HCI_OP_LE_READ_SUPPORTED_STATES
:
2284 hci_cc_le_read_supported_states(hdev
, skb
);
2287 case HCI_OP_WRITE_LE_HOST_SUPPORTED
:
2288 hci_cc_write_le_host_supported(hdev
, skb
);
2291 case HCI_OP_WRITE_REMOTE_AMP_ASSOC
:
2292 hci_cc_write_remote_amp_assoc(hdev
, skb
);
2296 BT_DBG("%s opcode 0x%4.4x", hdev
->name
, opcode
);
2300 if (opcode
!= HCI_OP_NOP
)
2301 del_timer(&hdev
->cmd_timer
);
2303 hci_req_cmd_complete(hdev
, opcode
, status
);
2305 if (ev
->ncmd
&& !test_bit(HCI_RESET
, &hdev
->flags
)) {
2306 atomic_set(&hdev
->cmd_cnt
, 1);
2307 if (!skb_queue_empty(&hdev
->cmd_q
))
2308 queue_work(hdev
->workqueue
, &hdev
->cmd_work
);
2312 static void hci_cmd_status_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2314 struct hci_ev_cmd_status
*ev
= (void *) skb
->data
;
2317 skb_pull(skb
, sizeof(*ev
));
2319 opcode
= __le16_to_cpu(ev
->opcode
);
2322 case HCI_OP_INQUIRY
:
2323 hci_cs_inquiry(hdev
, ev
->status
);
2326 case HCI_OP_CREATE_CONN
:
2327 hci_cs_create_conn(hdev
, ev
->status
);
2330 case HCI_OP_ADD_SCO
:
2331 hci_cs_add_sco(hdev
, ev
->status
);
2334 case HCI_OP_AUTH_REQUESTED
:
2335 hci_cs_auth_requested(hdev
, ev
->status
);
2338 case HCI_OP_SET_CONN_ENCRYPT
:
2339 hci_cs_set_conn_encrypt(hdev
, ev
->status
);
2342 case HCI_OP_REMOTE_NAME_REQ
:
2343 hci_cs_remote_name_req(hdev
, ev
->status
);
2346 case HCI_OP_READ_REMOTE_FEATURES
:
2347 hci_cs_read_remote_features(hdev
, ev
->status
);
2350 case HCI_OP_READ_REMOTE_EXT_FEATURES
:
2351 hci_cs_read_remote_ext_features(hdev
, ev
->status
);
2354 case HCI_OP_SETUP_SYNC_CONN
:
2355 hci_cs_setup_sync_conn(hdev
, ev
->status
);
2358 case HCI_OP_SNIFF_MODE
:
2359 hci_cs_sniff_mode(hdev
, ev
->status
);
2362 case HCI_OP_EXIT_SNIFF_MODE
:
2363 hci_cs_exit_sniff_mode(hdev
, ev
->status
);
2366 case HCI_OP_DISCONNECT
:
2367 hci_cs_disconnect(hdev
, ev
->status
);
2370 case HCI_OP_LE_CREATE_CONN
:
2371 hci_cs_le_create_conn(hdev
, ev
->status
);
2374 case HCI_OP_CREATE_PHY_LINK
:
2375 hci_cs_create_phylink(hdev
, ev
->status
);
2378 case HCI_OP_ACCEPT_PHY_LINK
:
2379 hci_cs_accept_phylink(hdev
, ev
->status
);
2383 BT_DBG("%s opcode 0x%4.4x", hdev
->name
, opcode
);
2387 if (opcode
!= HCI_OP_NOP
)
2388 del_timer(&hdev
->cmd_timer
);
2390 hci_req_cmd_status(hdev
, opcode
, ev
->status
);
2392 if (ev
->ncmd
&& !test_bit(HCI_RESET
, &hdev
->flags
)) {
2393 atomic_set(&hdev
->cmd_cnt
, 1);
2394 if (!skb_queue_empty(&hdev
->cmd_q
))
2395 queue_work(hdev
->workqueue
, &hdev
->cmd_work
);
2399 static void hci_role_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2401 struct hci_ev_role_change
*ev
= (void *) skb
->data
;
2402 struct hci_conn
*conn
;
2404 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2408 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
2412 conn
->link_mode
&= ~HCI_LM_MASTER
;
2414 conn
->link_mode
|= HCI_LM_MASTER
;
2417 clear_bit(HCI_CONN_RSWITCH_PEND
, &conn
->flags
);
2419 hci_role_switch_cfm(conn
, ev
->status
, ev
->role
);
2422 hci_dev_unlock(hdev
);
2425 static void hci_num_comp_pkts_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2427 struct hci_ev_num_comp_pkts
*ev
= (void *) skb
->data
;
2430 if (hdev
->flow_ctl_mode
!= HCI_FLOW_CTL_MODE_PACKET_BASED
) {
2431 BT_ERR("Wrong event for mode %d", hdev
->flow_ctl_mode
);
2435 if (skb
->len
< sizeof(*ev
) || skb
->len
< sizeof(*ev
) +
2436 ev
->num_hndl
* sizeof(struct hci_comp_pkts_info
)) {
2437 BT_DBG("%s bad parameters", hdev
->name
);
2441 BT_DBG("%s num_hndl %d", hdev
->name
, ev
->num_hndl
);
2443 for (i
= 0; i
< ev
->num_hndl
; i
++) {
2444 struct hci_comp_pkts_info
*info
= &ev
->handles
[i
];
2445 struct hci_conn
*conn
;
2446 __u16 handle
, count
;
2448 handle
= __le16_to_cpu(info
->handle
);
2449 count
= __le16_to_cpu(info
->count
);
2451 conn
= hci_conn_hash_lookup_handle(hdev
, handle
);
2455 conn
->sent
-= count
;
2457 switch (conn
->type
) {
2459 hdev
->acl_cnt
+= count
;
2460 if (hdev
->acl_cnt
> hdev
->acl_pkts
)
2461 hdev
->acl_cnt
= hdev
->acl_pkts
;
2465 if (hdev
->le_pkts
) {
2466 hdev
->le_cnt
+= count
;
2467 if (hdev
->le_cnt
> hdev
->le_pkts
)
2468 hdev
->le_cnt
= hdev
->le_pkts
;
2470 hdev
->acl_cnt
+= count
;
2471 if (hdev
->acl_cnt
> hdev
->acl_pkts
)
2472 hdev
->acl_cnt
= hdev
->acl_pkts
;
2477 hdev
->sco_cnt
+= count
;
2478 if (hdev
->sco_cnt
> hdev
->sco_pkts
)
2479 hdev
->sco_cnt
= hdev
->sco_pkts
;
2483 BT_ERR("Unknown type %d conn %p", conn
->type
, conn
);
2488 queue_work(hdev
->workqueue
, &hdev
->tx_work
);
2491 static struct hci_conn
*__hci_conn_lookup_handle(struct hci_dev
*hdev
,
2494 struct hci_chan
*chan
;
2496 switch (hdev
->dev_type
) {
2498 return hci_conn_hash_lookup_handle(hdev
, handle
);
2500 chan
= hci_chan_lookup_handle(hdev
, handle
);
2505 BT_ERR("%s unknown dev_type %d", hdev
->name
, hdev
->dev_type
);
2512 static void hci_num_comp_blocks_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2514 struct hci_ev_num_comp_blocks
*ev
= (void *) skb
->data
;
2517 if (hdev
->flow_ctl_mode
!= HCI_FLOW_CTL_MODE_BLOCK_BASED
) {
2518 BT_ERR("Wrong event for mode %d", hdev
->flow_ctl_mode
);
2522 if (skb
->len
< sizeof(*ev
) || skb
->len
< sizeof(*ev
) +
2523 ev
->num_hndl
* sizeof(struct hci_comp_blocks_info
)) {
2524 BT_DBG("%s bad parameters", hdev
->name
);
2528 BT_DBG("%s num_blocks %d num_hndl %d", hdev
->name
, ev
->num_blocks
,
2531 for (i
= 0; i
< ev
->num_hndl
; i
++) {
2532 struct hci_comp_blocks_info
*info
= &ev
->handles
[i
];
2533 struct hci_conn
*conn
= NULL
;
2534 __u16 handle
, block_count
;
2536 handle
= __le16_to_cpu(info
->handle
);
2537 block_count
= __le16_to_cpu(info
->blocks
);
2539 conn
= __hci_conn_lookup_handle(hdev
, handle
);
2543 conn
->sent
-= block_count
;
2545 switch (conn
->type
) {
2548 hdev
->block_cnt
+= block_count
;
2549 if (hdev
->block_cnt
> hdev
->num_blocks
)
2550 hdev
->block_cnt
= hdev
->num_blocks
;
2554 BT_ERR("Unknown type %d conn %p", conn
->type
, conn
);
2559 queue_work(hdev
->workqueue
, &hdev
->tx_work
);
2562 static void hci_mode_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2564 struct hci_ev_mode_change
*ev
= (void *) skb
->data
;
2565 struct hci_conn
*conn
;
2567 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2571 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2573 conn
->mode
= ev
->mode
;
2574 conn
->interval
= __le16_to_cpu(ev
->interval
);
2576 if (!test_and_clear_bit(HCI_CONN_MODE_CHANGE_PEND
,
2578 if (conn
->mode
== HCI_CM_ACTIVE
)
2579 set_bit(HCI_CONN_POWER_SAVE
, &conn
->flags
);
2581 clear_bit(HCI_CONN_POWER_SAVE
, &conn
->flags
);
2584 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND
, &conn
->flags
))
2585 hci_sco_setup(conn
, ev
->status
);
2588 hci_dev_unlock(hdev
);
2591 static void hci_pin_code_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2593 struct hci_ev_pin_code_req
*ev
= (void *) skb
->data
;
2594 struct hci_conn
*conn
;
2596 BT_DBG("%s", hdev
->name
);
2600 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
2604 if (conn
->state
== BT_CONNECTED
) {
2605 hci_conn_hold(conn
);
2606 conn
->disc_timeout
= HCI_PAIRING_TIMEOUT
;
2610 if (!test_bit(HCI_PAIRABLE
, &hdev
->dev_flags
))
2611 hci_send_cmd(hdev
, HCI_OP_PIN_CODE_NEG_REPLY
,
2612 sizeof(ev
->bdaddr
), &ev
->bdaddr
);
2613 else if (test_bit(HCI_MGMT
, &hdev
->dev_flags
)) {
2616 if (conn
->pending_sec_level
== BT_SECURITY_HIGH
)
2621 mgmt_pin_code_request(hdev
, &ev
->bdaddr
, secure
);
2625 hci_dev_unlock(hdev
);
2628 static void hci_link_key_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2630 struct hci_ev_link_key_req
*ev
= (void *) skb
->data
;
2631 struct hci_cp_link_key_reply cp
;
2632 struct hci_conn
*conn
;
2633 struct link_key
*key
;
2635 BT_DBG("%s", hdev
->name
);
2637 if (!test_bit(HCI_LINK_KEYS
, &hdev
->dev_flags
))
2642 key
= hci_find_link_key(hdev
, &ev
->bdaddr
);
2644 BT_DBG("%s link key not found for %pMR", hdev
->name
,
2649 BT_DBG("%s found key type %u for %pMR", hdev
->name
, key
->type
,
2652 if (!test_bit(HCI_DEBUG_KEYS
, &hdev
->dev_flags
) &&
2653 key
->type
== HCI_LK_DEBUG_COMBINATION
) {
2654 BT_DBG("%s ignoring debug key", hdev
->name
);
2658 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
2660 if (key
->type
== HCI_LK_UNAUTH_COMBINATION
&&
2661 conn
->auth_type
!= 0xff && (conn
->auth_type
& 0x01)) {
2662 BT_DBG("%s ignoring unauthenticated key", hdev
->name
);
2666 if (key
->type
== HCI_LK_COMBINATION
&& key
->pin_len
< 16 &&
2667 conn
->pending_sec_level
== BT_SECURITY_HIGH
) {
2668 BT_DBG("%s ignoring key unauthenticated for high security",
2673 conn
->key_type
= key
->type
;
2674 conn
->pin_length
= key
->pin_len
;
2677 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
2678 memcpy(cp
.link_key
, key
->val
, HCI_LINK_KEY_SIZE
);
2680 hci_send_cmd(hdev
, HCI_OP_LINK_KEY_REPLY
, sizeof(cp
), &cp
);
2682 hci_dev_unlock(hdev
);
2687 hci_send_cmd(hdev
, HCI_OP_LINK_KEY_NEG_REPLY
, 6, &ev
->bdaddr
);
2688 hci_dev_unlock(hdev
);
2691 static void hci_link_key_notify_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2693 struct hci_ev_link_key_notify
*ev
= (void *) skb
->data
;
2694 struct hci_conn
*conn
;
2697 BT_DBG("%s", hdev
->name
);
2701 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
2703 hci_conn_hold(conn
);
2704 conn
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
2705 pin_len
= conn
->pin_length
;
2707 if (ev
->key_type
!= HCI_LK_CHANGED_COMBINATION
)
2708 conn
->key_type
= ev
->key_type
;
2713 if (test_bit(HCI_LINK_KEYS
, &hdev
->dev_flags
))
2714 hci_add_link_key(hdev
, conn
, 1, &ev
->bdaddr
, ev
->link_key
,
2715 ev
->key_type
, pin_len
);
2717 hci_dev_unlock(hdev
);
2720 static void hci_clock_offset_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2722 struct hci_ev_clock_offset
*ev
= (void *) skb
->data
;
2723 struct hci_conn
*conn
;
2725 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2729 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2730 if (conn
&& !ev
->status
) {
2731 struct inquiry_entry
*ie
;
2733 ie
= hci_inquiry_cache_lookup(hdev
, &conn
->dst
);
2735 ie
->data
.clock_offset
= ev
->clock_offset
;
2736 ie
->timestamp
= jiffies
;
2740 hci_dev_unlock(hdev
);
2743 static void hci_pkt_type_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2745 struct hci_ev_pkt_type_change
*ev
= (void *) skb
->data
;
2746 struct hci_conn
*conn
;
2748 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2752 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2753 if (conn
&& !ev
->status
)
2754 conn
->pkt_type
= __le16_to_cpu(ev
->pkt_type
);
2756 hci_dev_unlock(hdev
);
2759 static void hci_pscan_rep_mode_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2761 struct hci_ev_pscan_rep_mode
*ev
= (void *) skb
->data
;
2762 struct inquiry_entry
*ie
;
2764 BT_DBG("%s", hdev
->name
);
2768 ie
= hci_inquiry_cache_lookup(hdev
, &ev
->bdaddr
);
2770 ie
->data
.pscan_rep_mode
= ev
->pscan_rep_mode
;
2771 ie
->timestamp
= jiffies
;
2774 hci_dev_unlock(hdev
);
2777 static void hci_inquiry_result_with_rssi_evt(struct hci_dev
*hdev
,
2778 struct sk_buff
*skb
)
2780 struct inquiry_data data
;
2781 int num_rsp
= *((__u8
*) skb
->data
);
2782 bool name_known
, ssp
;
2784 BT_DBG("%s num_rsp %d", hdev
->name
, num_rsp
);
2789 if (test_bit(HCI_PERIODIC_INQ
, &hdev
->dev_flags
))
2794 if ((skb
->len
- 1) / num_rsp
!= sizeof(struct inquiry_info_with_rssi
)) {
2795 struct inquiry_info_with_rssi_and_pscan_mode
*info
;
2796 info
= (void *) (skb
->data
+ 1);
2798 for (; num_rsp
; num_rsp
--, info
++) {
2799 bacpy(&data
.bdaddr
, &info
->bdaddr
);
2800 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
2801 data
.pscan_period_mode
= info
->pscan_period_mode
;
2802 data
.pscan_mode
= info
->pscan_mode
;
2803 memcpy(data
.dev_class
, info
->dev_class
, 3);
2804 data
.clock_offset
= info
->clock_offset
;
2805 data
.rssi
= info
->rssi
;
2806 data
.ssp_mode
= 0x00;
2808 name_known
= hci_inquiry_cache_update(hdev
, &data
,
2810 mgmt_device_found(hdev
, &info
->bdaddr
, ACL_LINK
, 0x00,
2811 info
->dev_class
, info
->rssi
,
2812 !name_known
, ssp
, NULL
, 0);
2815 struct inquiry_info_with_rssi
*info
= (void *) (skb
->data
+ 1);
2817 for (; num_rsp
; num_rsp
--, info
++) {
2818 bacpy(&data
.bdaddr
, &info
->bdaddr
);
2819 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
2820 data
.pscan_period_mode
= info
->pscan_period_mode
;
2821 data
.pscan_mode
= 0x00;
2822 memcpy(data
.dev_class
, info
->dev_class
, 3);
2823 data
.clock_offset
= info
->clock_offset
;
2824 data
.rssi
= info
->rssi
;
2825 data
.ssp_mode
= 0x00;
2826 name_known
= hci_inquiry_cache_update(hdev
, &data
,
2828 mgmt_device_found(hdev
, &info
->bdaddr
, ACL_LINK
, 0x00,
2829 info
->dev_class
, info
->rssi
,
2830 !name_known
, ssp
, NULL
, 0);
2834 hci_dev_unlock(hdev
);
2837 static void hci_remote_ext_features_evt(struct hci_dev
*hdev
,
2838 struct sk_buff
*skb
)
2840 struct hci_ev_remote_ext_features
*ev
= (void *) skb
->data
;
2841 struct hci_conn
*conn
;
2843 BT_DBG("%s", hdev
->name
);
2847 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2851 if (!ev
->status
&& ev
->page
== 0x01) {
2852 struct inquiry_entry
*ie
;
2854 ie
= hci_inquiry_cache_lookup(hdev
, &conn
->dst
);
2856 ie
->data
.ssp_mode
= (ev
->features
[0] & LMP_HOST_SSP
);
2858 if (ev
->features
[0] & LMP_HOST_SSP
)
2859 set_bit(HCI_CONN_SSP_ENABLED
, &conn
->flags
);
2862 if (conn
->state
!= BT_CONFIG
)
2865 if (!ev
->status
&& !test_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
)) {
2866 struct hci_cp_remote_name_req cp
;
2867 memset(&cp
, 0, sizeof(cp
));
2868 bacpy(&cp
.bdaddr
, &conn
->dst
);
2869 cp
.pscan_rep_mode
= 0x02;
2870 hci_send_cmd(hdev
, HCI_OP_REMOTE_NAME_REQ
, sizeof(cp
), &cp
);
2871 } else if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
))
2872 mgmt_device_connected(hdev
, &conn
->dst
, conn
->type
,
2873 conn
->dst_type
, 0, NULL
, 0,
2876 if (!hci_outgoing_auth_needed(hdev
, conn
)) {
2877 conn
->state
= BT_CONNECTED
;
2878 hci_proto_connect_cfm(conn
, ev
->status
);
2883 hci_dev_unlock(hdev
);
2886 static void hci_sync_conn_complete_evt(struct hci_dev
*hdev
,
2887 struct sk_buff
*skb
)
2889 struct hci_ev_sync_conn_complete
*ev
= (void *) skb
->data
;
2890 struct hci_conn
*conn
;
2892 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2896 conn
= hci_conn_hash_lookup_ba(hdev
, ev
->link_type
, &ev
->bdaddr
);
2898 if (ev
->link_type
== ESCO_LINK
)
2901 conn
= hci_conn_hash_lookup_ba(hdev
, ESCO_LINK
, &ev
->bdaddr
);
2905 conn
->type
= SCO_LINK
;
2908 switch (ev
->status
) {
2910 conn
->handle
= __le16_to_cpu(ev
->handle
);
2911 conn
->state
= BT_CONNECTED
;
2913 hci_conn_hold_device(conn
);
2914 hci_conn_add_sysfs(conn
);
2917 case 0x11: /* Unsupported Feature or Parameter Value */
2918 case 0x1c: /* SCO interval rejected */
2919 case 0x1a: /* Unsupported Remote Feature */
2920 case 0x1f: /* Unspecified error */
2921 if (conn
->out
&& conn
->attempt
< 2) {
2922 conn
->pkt_type
= (hdev
->esco_type
& SCO_ESCO_MASK
) |
2923 (hdev
->esco_type
& EDR_ESCO_MASK
);
2924 hci_setup_sync(conn
, conn
->link
->handle
);
2930 conn
->state
= BT_CLOSED
;
2934 hci_proto_connect_cfm(conn
, ev
->status
);
2939 hci_dev_unlock(hdev
);
2942 static void hci_extended_inquiry_result_evt(struct hci_dev
*hdev
,
2943 struct sk_buff
*skb
)
2945 struct inquiry_data data
;
2946 struct extended_inquiry_info
*info
= (void *) (skb
->data
+ 1);
2947 int num_rsp
= *((__u8
*) skb
->data
);
2950 BT_DBG("%s num_rsp %d", hdev
->name
, num_rsp
);
2955 if (test_bit(HCI_PERIODIC_INQ
, &hdev
->dev_flags
))
2960 for (; num_rsp
; num_rsp
--, info
++) {
2961 bool name_known
, ssp
;
2963 bacpy(&data
.bdaddr
, &info
->bdaddr
);
2964 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
2965 data
.pscan_period_mode
= info
->pscan_period_mode
;
2966 data
.pscan_mode
= 0x00;
2967 memcpy(data
.dev_class
, info
->dev_class
, 3);
2968 data
.clock_offset
= info
->clock_offset
;
2969 data
.rssi
= info
->rssi
;
2970 data
.ssp_mode
= 0x01;
2972 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
2973 name_known
= eir_has_data_type(info
->data
,
2979 name_known
= hci_inquiry_cache_update(hdev
, &data
, name_known
,
2981 eir_len
= eir_get_length(info
->data
, sizeof(info
->data
));
2982 mgmt_device_found(hdev
, &info
->bdaddr
, ACL_LINK
, 0x00,
2983 info
->dev_class
, info
->rssi
, !name_known
,
2984 ssp
, info
->data
, eir_len
);
2987 hci_dev_unlock(hdev
);
2990 static void hci_key_refresh_complete_evt(struct hci_dev
*hdev
,
2991 struct sk_buff
*skb
)
2993 struct hci_ev_key_refresh_complete
*ev
= (void *) skb
->data
;
2994 struct hci_conn
*conn
;
2996 BT_DBG("%s status 0x%2.2x handle 0x%4.4x", hdev
->name
, ev
->status
,
2997 __le16_to_cpu(ev
->handle
));
3001 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
3006 conn
->sec_level
= conn
->pending_sec_level
;
3008 clear_bit(HCI_CONN_ENCRYPT_PEND
, &conn
->flags
);
3010 if (ev
->status
&& conn
->state
== BT_CONNECTED
) {
3011 hci_disconnect(conn
, HCI_ERROR_AUTH_FAILURE
);
3016 if (conn
->state
== BT_CONFIG
) {
3018 conn
->state
= BT_CONNECTED
;
3020 hci_proto_connect_cfm(conn
, ev
->status
);
3023 hci_auth_cfm(conn
, ev
->status
);
3025 hci_conn_hold(conn
);
3026 conn
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
3031 hci_dev_unlock(hdev
);
3034 static u8
hci_get_auth_req(struct hci_conn
*conn
)
3036 /* If remote requests dedicated bonding follow that lead */
3037 if (conn
->remote_auth
== 0x02 || conn
->remote_auth
== 0x03) {
3038 /* If both remote and local IO capabilities allow MITM
3039 * protection then require it, otherwise don't */
3040 if (conn
->remote_cap
== 0x03 || conn
->io_capability
== 0x03)
3046 /* If remote requests no-bonding follow that lead */
3047 if (conn
->remote_auth
== 0x00 || conn
->remote_auth
== 0x01)
3048 return conn
->remote_auth
| (conn
->auth_type
& 0x01);
3050 return conn
->auth_type
;
3053 static void hci_io_capa_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3055 struct hci_ev_io_capa_request
*ev
= (void *) skb
->data
;
3056 struct hci_conn
*conn
;
3058 BT_DBG("%s", hdev
->name
);
3062 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3066 hci_conn_hold(conn
);
3068 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3071 if (test_bit(HCI_PAIRABLE
, &hdev
->dev_flags
) ||
3072 (conn
->remote_auth
& ~0x01) == HCI_AT_NO_BONDING
) {
3073 struct hci_cp_io_capability_reply cp
;
3075 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
3076 /* Change the IO capability from KeyboardDisplay
3077 * to DisplayYesNo as it is not supported by BT spec. */
3078 cp
.capability
= (conn
->io_capability
== 0x04) ?
3079 0x01 : conn
->io_capability
;
3080 conn
->auth_type
= hci_get_auth_req(conn
);
3081 cp
.authentication
= conn
->auth_type
;
3083 if (hci_find_remote_oob_data(hdev
, &conn
->dst
) &&
3084 (conn
->out
|| test_bit(HCI_CONN_REMOTE_OOB
, &conn
->flags
)))
3089 hci_send_cmd(hdev
, HCI_OP_IO_CAPABILITY_REPLY
,
3092 struct hci_cp_io_capability_neg_reply cp
;
3094 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
3095 cp
.reason
= HCI_ERROR_PAIRING_NOT_ALLOWED
;
3097 hci_send_cmd(hdev
, HCI_OP_IO_CAPABILITY_NEG_REPLY
,
3102 hci_dev_unlock(hdev
);
3105 static void hci_io_capa_reply_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3107 struct hci_ev_io_capa_reply
*ev
= (void *) skb
->data
;
3108 struct hci_conn
*conn
;
3110 BT_DBG("%s", hdev
->name
);
3114 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3118 conn
->remote_cap
= ev
->capability
;
3119 conn
->remote_auth
= ev
->authentication
;
3121 set_bit(HCI_CONN_REMOTE_OOB
, &conn
->flags
);
3124 hci_dev_unlock(hdev
);
3127 static void hci_user_confirm_request_evt(struct hci_dev
*hdev
,
3128 struct sk_buff
*skb
)
3130 struct hci_ev_user_confirm_req
*ev
= (void *) skb
->data
;
3131 int loc_mitm
, rem_mitm
, confirm_hint
= 0;
3132 struct hci_conn
*conn
;
3134 BT_DBG("%s", hdev
->name
);
3138 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3141 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3145 loc_mitm
= (conn
->auth_type
& 0x01);
3146 rem_mitm
= (conn
->remote_auth
& 0x01);
3148 /* If we require MITM but the remote device can't provide that
3149 * (it has NoInputNoOutput) then reject the confirmation
3150 * request. The only exception is when we're dedicated bonding
3151 * initiators (connect_cfm_cb set) since then we always have the MITM
3153 if (!conn
->connect_cfm_cb
&& loc_mitm
&& conn
->remote_cap
== 0x03) {
3154 BT_DBG("Rejecting request: remote device can't provide MITM");
3155 hci_send_cmd(hdev
, HCI_OP_USER_CONFIRM_NEG_REPLY
,
3156 sizeof(ev
->bdaddr
), &ev
->bdaddr
);
3160 /* If no side requires MITM protection; auto-accept */
3161 if ((!loc_mitm
|| conn
->remote_cap
== 0x03) &&
3162 (!rem_mitm
|| conn
->io_capability
== 0x03)) {
3164 /* If we're not the initiators request authorization to
3165 * proceed from user space (mgmt_user_confirm with
3166 * confirm_hint set to 1). */
3167 if (!test_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
)) {
3168 BT_DBG("Confirming auto-accept as acceptor");
3173 BT_DBG("Auto-accept of user confirmation with %ums delay",
3174 hdev
->auto_accept_delay
);
3176 if (hdev
->auto_accept_delay
> 0) {
3177 int delay
= msecs_to_jiffies(hdev
->auto_accept_delay
);
3178 mod_timer(&conn
->auto_accept_timer
, jiffies
+ delay
);
3182 hci_send_cmd(hdev
, HCI_OP_USER_CONFIRM_REPLY
,
3183 sizeof(ev
->bdaddr
), &ev
->bdaddr
);
3188 mgmt_user_confirm_request(hdev
, &ev
->bdaddr
, ACL_LINK
, 0, ev
->passkey
,
3192 hci_dev_unlock(hdev
);
3195 static void hci_user_passkey_request_evt(struct hci_dev
*hdev
,
3196 struct sk_buff
*skb
)
3198 struct hci_ev_user_passkey_req
*ev
= (void *) skb
->data
;
3200 BT_DBG("%s", hdev
->name
);
3202 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3203 mgmt_user_passkey_request(hdev
, &ev
->bdaddr
, ACL_LINK
, 0);
3206 static void hci_user_passkey_notify_evt(struct hci_dev
*hdev
,
3207 struct sk_buff
*skb
)
3209 struct hci_ev_user_passkey_notify
*ev
= (void *) skb
->data
;
3210 struct hci_conn
*conn
;
3212 BT_DBG("%s", hdev
->name
);
3214 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3218 conn
->passkey_notify
= __le32_to_cpu(ev
->passkey
);
3219 conn
->passkey_entered
= 0;
3221 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3222 mgmt_user_passkey_notify(hdev
, &conn
->dst
, conn
->type
,
3223 conn
->dst_type
, conn
->passkey_notify
,
3224 conn
->passkey_entered
);
3227 static void hci_keypress_notify_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3229 struct hci_ev_keypress_notify
*ev
= (void *) skb
->data
;
3230 struct hci_conn
*conn
;
3232 BT_DBG("%s", hdev
->name
);
3234 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3239 case HCI_KEYPRESS_STARTED
:
3240 conn
->passkey_entered
= 0;
3243 case HCI_KEYPRESS_ENTERED
:
3244 conn
->passkey_entered
++;
3247 case HCI_KEYPRESS_ERASED
:
3248 conn
->passkey_entered
--;
3251 case HCI_KEYPRESS_CLEARED
:
3252 conn
->passkey_entered
= 0;
3255 case HCI_KEYPRESS_COMPLETED
:
3259 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3260 mgmt_user_passkey_notify(hdev
, &conn
->dst
, conn
->type
,
3261 conn
->dst_type
, conn
->passkey_notify
,
3262 conn
->passkey_entered
);
3265 static void hci_simple_pair_complete_evt(struct hci_dev
*hdev
,
3266 struct sk_buff
*skb
)
3268 struct hci_ev_simple_pair_complete
*ev
= (void *) skb
->data
;
3269 struct hci_conn
*conn
;
3271 BT_DBG("%s", hdev
->name
);
3275 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3279 /* To avoid duplicate auth_failed events to user space we check
3280 * the HCI_CONN_AUTH_PEND flag which will be set if we
3281 * initiated the authentication. A traditional auth_complete
3282 * event gets always produced as initiator and is also mapped to
3283 * the mgmt_auth_failed event */
3284 if (!test_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
) && ev
->status
)
3285 mgmt_auth_failed(hdev
, &conn
->dst
, conn
->type
, conn
->dst_type
,
3291 hci_dev_unlock(hdev
);
3294 static void hci_remote_host_features_evt(struct hci_dev
*hdev
,
3295 struct sk_buff
*skb
)
3297 struct hci_ev_remote_host_features
*ev
= (void *) skb
->data
;
3298 struct inquiry_entry
*ie
;
3300 BT_DBG("%s", hdev
->name
);
3304 ie
= hci_inquiry_cache_lookup(hdev
, &ev
->bdaddr
);
3306 ie
->data
.ssp_mode
= (ev
->features
[0] & LMP_HOST_SSP
);
3308 hci_dev_unlock(hdev
);
3311 static void hci_remote_oob_data_request_evt(struct hci_dev
*hdev
,
3312 struct sk_buff
*skb
)
3314 struct hci_ev_remote_oob_data_request
*ev
= (void *) skb
->data
;
3315 struct oob_data
*data
;
3317 BT_DBG("%s", hdev
->name
);
3321 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3324 data
= hci_find_remote_oob_data(hdev
, &ev
->bdaddr
);
3326 struct hci_cp_remote_oob_data_reply cp
;
3328 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
3329 memcpy(cp
.hash
, data
->hash
, sizeof(cp
.hash
));
3330 memcpy(cp
.randomizer
, data
->randomizer
, sizeof(cp
.randomizer
));
3332 hci_send_cmd(hdev
, HCI_OP_REMOTE_OOB_DATA_REPLY
, sizeof(cp
),
3335 struct hci_cp_remote_oob_data_neg_reply cp
;
3337 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
3338 hci_send_cmd(hdev
, HCI_OP_REMOTE_OOB_DATA_NEG_REPLY
, sizeof(cp
),
3343 hci_dev_unlock(hdev
);
3346 static void hci_phy_link_complete_evt(struct hci_dev
*hdev
,
3347 struct sk_buff
*skb
)
3349 struct hci_ev_phy_link_complete
*ev
= (void *) skb
->data
;
3350 struct hci_conn
*hcon
, *bredr_hcon
;
3352 BT_DBG("%s handle 0x%2.2x status 0x%2.2x", hdev
->name
, ev
->phy_handle
,
3357 hcon
= hci_conn_hash_lookup_handle(hdev
, ev
->phy_handle
);
3359 hci_dev_unlock(hdev
);
3365 hci_dev_unlock(hdev
);
3369 bredr_hcon
= hcon
->amp_mgr
->l2cap_conn
->hcon
;
3371 hcon
->state
= BT_CONNECTED
;
3372 bacpy(&hcon
->dst
, &bredr_hcon
->dst
);
3374 hci_conn_hold(hcon
);
3375 hcon
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
3378 hci_conn_hold_device(hcon
);
3379 hci_conn_add_sysfs(hcon
);
3381 amp_physical_cfm(bredr_hcon
, hcon
);
3383 hci_dev_unlock(hdev
);
3386 static void hci_loglink_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3388 struct hci_ev_logical_link_complete
*ev
= (void *) skb
->data
;
3389 struct hci_conn
*hcon
;
3390 struct hci_chan
*hchan
;
3391 struct amp_mgr
*mgr
;
3393 BT_DBG("%s log_handle 0x%4.4x phy_handle 0x%2.2x status 0x%2.2x",
3394 hdev
->name
, le16_to_cpu(ev
->handle
), ev
->phy_handle
,
3397 hcon
= hci_conn_hash_lookup_handle(hdev
, ev
->phy_handle
);
3401 /* Create AMP hchan */
3402 hchan
= hci_chan_create(hcon
);
3406 hchan
->handle
= le16_to_cpu(ev
->handle
);
3408 BT_DBG("hcon %p mgr %p hchan %p", hcon
, hcon
->amp_mgr
, hchan
);
3410 mgr
= hcon
->amp_mgr
;
3411 if (mgr
&& mgr
->bredr_chan
) {
3412 struct l2cap_chan
*bredr_chan
= mgr
->bredr_chan
;
3414 l2cap_chan_lock(bredr_chan
);
3416 bredr_chan
->conn
->mtu
= hdev
->block_mtu
;
3417 l2cap_logical_cfm(bredr_chan
, hchan
, 0);
3418 hci_conn_hold(hcon
);
3420 l2cap_chan_unlock(bredr_chan
);
3424 static void hci_disconn_loglink_complete_evt(struct hci_dev
*hdev
,
3425 struct sk_buff
*skb
)
3427 struct hci_ev_disconn_logical_link_complete
*ev
= (void *) skb
->data
;
3428 struct hci_chan
*hchan
;
3430 BT_DBG("%s log handle 0x%4.4x status 0x%2.2x", hdev
->name
,
3431 le16_to_cpu(ev
->handle
), ev
->status
);
3438 hchan
= hci_chan_lookup_handle(hdev
, le16_to_cpu(ev
->handle
));
3442 amp_destroy_logical_link(hchan
, ev
->reason
);
3445 hci_dev_unlock(hdev
);
3448 static void hci_disconn_phylink_complete_evt(struct hci_dev
*hdev
,
3449 struct sk_buff
*skb
)
3451 struct hci_ev_disconn_phy_link_complete
*ev
= (void *) skb
->data
;
3452 struct hci_conn
*hcon
;
3454 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
3461 hcon
= hci_conn_hash_lookup_handle(hdev
, ev
->phy_handle
);
3463 hcon
->state
= BT_CLOSED
;
3467 hci_dev_unlock(hdev
);
3470 static void hci_le_conn_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3472 struct hci_ev_le_conn_complete
*ev
= (void *) skb
->data
;
3473 struct hci_conn
*conn
;
3475 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
3479 conn
= hci_conn_hash_lookup_state(hdev
, LE_LINK
, BT_CONNECT
);
3481 conn
= hci_conn_add(hdev
, LE_LINK
, &ev
->bdaddr
);
3483 BT_ERR("No memory for new connection");
3487 conn
->dst_type
= ev
->bdaddr_type
;
3489 if (ev
->role
== LE_CONN_ROLE_MASTER
) {
3491 conn
->link_mode
|= HCI_LM_MASTER
;
3496 mgmt_connect_failed(hdev
, &conn
->dst
, conn
->type
,
3497 conn
->dst_type
, ev
->status
);
3498 hci_proto_connect_cfm(conn
, ev
->status
);
3499 conn
->state
= BT_CLOSED
;
3504 if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
))
3505 mgmt_device_connected(hdev
, &ev
->bdaddr
, conn
->type
,
3506 conn
->dst_type
, 0, NULL
, 0, NULL
);
3508 conn
->sec_level
= BT_SECURITY_LOW
;
3509 conn
->handle
= __le16_to_cpu(ev
->handle
);
3510 conn
->state
= BT_CONNECTED
;
3512 hci_conn_hold_device(conn
);
3513 hci_conn_add_sysfs(conn
);
3515 hci_proto_connect_cfm(conn
, ev
->status
);
3518 hci_dev_unlock(hdev
);
3521 static void hci_le_adv_report_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3523 u8 num_reports
= skb
->data
[0];
3524 void *ptr
= &skb
->data
[1];
3527 while (num_reports
--) {
3528 struct hci_ev_le_advertising_info
*ev
= ptr
;
3530 rssi
= ev
->data
[ev
->length
];
3531 mgmt_device_found(hdev
, &ev
->bdaddr
, LE_LINK
, ev
->bdaddr_type
,
3532 NULL
, rssi
, 0, 1, ev
->data
, ev
->length
);
3534 ptr
+= sizeof(*ev
) + ev
->length
+ 1;
3538 static void hci_le_ltk_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3540 struct hci_ev_le_ltk_req
*ev
= (void *) skb
->data
;
3541 struct hci_cp_le_ltk_reply cp
;
3542 struct hci_cp_le_ltk_neg_reply neg
;
3543 struct hci_conn
*conn
;
3544 struct smp_ltk
*ltk
;
3546 BT_DBG("%s handle 0x%4.4x", hdev
->name
, __le16_to_cpu(ev
->handle
));
3550 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
3554 ltk
= hci_find_ltk(hdev
, ev
->ediv
, ev
->random
);
3558 memcpy(cp
.ltk
, ltk
->val
, sizeof(ltk
->val
));
3559 cp
.handle
= cpu_to_le16(conn
->handle
);
3561 if (ltk
->authenticated
)
3562 conn
->sec_level
= BT_SECURITY_HIGH
;
3564 hci_send_cmd(hdev
, HCI_OP_LE_LTK_REPLY
, sizeof(cp
), &cp
);
3566 if (ltk
->type
& HCI_SMP_STK
) {
3567 list_del(<k
->list
);
3571 hci_dev_unlock(hdev
);
3576 neg
.handle
= ev
->handle
;
3577 hci_send_cmd(hdev
, HCI_OP_LE_LTK_NEG_REPLY
, sizeof(neg
), &neg
);
3578 hci_dev_unlock(hdev
);
3581 static void hci_le_meta_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3583 struct hci_ev_le_meta
*le_ev
= (void *) skb
->data
;
3585 skb_pull(skb
, sizeof(*le_ev
));
3587 switch (le_ev
->subevent
) {
3588 case HCI_EV_LE_CONN_COMPLETE
:
3589 hci_le_conn_complete_evt(hdev
, skb
);
3592 case HCI_EV_LE_ADVERTISING_REPORT
:
3593 hci_le_adv_report_evt(hdev
, skb
);
3596 case HCI_EV_LE_LTK_REQ
:
3597 hci_le_ltk_request_evt(hdev
, skb
);
3605 static void hci_chan_selected_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3607 struct hci_ev_channel_selected
*ev
= (void *) skb
->data
;
3608 struct hci_conn
*hcon
;
3610 BT_DBG("%s handle 0x%2.2x", hdev
->name
, ev
->phy_handle
);
3612 skb_pull(skb
, sizeof(*ev
));
3614 hcon
= hci_conn_hash_lookup_handle(hdev
, ev
->phy_handle
);
3618 amp_read_loc_assoc_final_data(hdev
, hcon
);
3621 void hci_event_packet(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3623 struct hci_event_hdr
*hdr
= (void *) skb
->data
;
3624 __u8 event
= hdr
->evt
;
3626 skb_pull(skb
, HCI_EVENT_HDR_SIZE
);
3629 case HCI_EV_INQUIRY_COMPLETE
:
3630 hci_inquiry_complete_evt(hdev
, skb
);
3633 case HCI_EV_INQUIRY_RESULT
:
3634 hci_inquiry_result_evt(hdev
, skb
);
3637 case HCI_EV_CONN_COMPLETE
:
3638 hci_conn_complete_evt(hdev
, skb
);
3641 case HCI_EV_CONN_REQUEST
:
3642 hci_conn_request_evt(hdev
, skb
);
3645 case HCI_EV_DISCONN_COMPLETE
:
3646 hci_disconn_complete_evt(hdev
, skb
);
3649 case HCI_EV_AUTH_COMPLETE
:
3650 hci_auth_complete_evt(hdev
, skb
);
3653 case HCI_EV_REMOTE_NAME
:
3654 hci_remote_name_evt(hdev
, skb
);
3657 case HCI_EV_ENCRYPT_CHANGE
:
3658 hci_encrypt_change_evt(hdev
, skb
);
3661 case HCI_EV_CHANGE_LINK_KEY_COMPLETE
:
3662 hci_change_link_key_complete_evt(hdev
, skb
);
3665 case HCI_EV_REMOTE_FEATURES
:
3666 hci_remote_features_evt(hdev
, skb
);
3669 case HCI_EV_CMD_COMPLETE
:
3670 hci_cmd_complete_evt(hdev
, skb
);
3673 case HCI_EV_CMD_STATUS
:
3674 hci_cmd_status_evt(hdev
, skb
);
3677 case HCI_EV_ROLE_CHANGE
:
3678 hci_role_change_evt(hdev
, skb
);
3681 case HCI_EV_NUM_COMP_PKTS
:
3682 hci_num_comp_pkts_evt(hdev
, skb
);
3685 case HCI_EV_MODE_CHANGE
:
3686 hci_mode_change_evt(hdev
, skb
);
3689 case HCI_EV_PIN_CODE_REQ
:
3690 hci_pin_code_request_evt(hdev
, skb
);
3693 case HCI_EV_LINK_KEY_REQ
:
3694 hci_link_key_request_evt(hdev
, skb
);
3697 case HCI_EV_LINK_KEY_NOTIFY
:
3698 hci_link_key_notify_evt(hdev
, skb
);
3701 case HCI_EV_CLOCK_OFFSET
:
3702 hci_clock_offset_evt(hdev
, skb
);
3705 case HCI_EV_PKT_TYPE_CHANGE
:
3706 hci_pkt_type_change_evt(hdev
, skb
);
3709 case HCI_EV_PSCAN_REP_MODE
:
3710 hci_pscan_rep_mode_evt(hdev
, skb
);
3713 case HCI_EV_INQUIRY_RESULT_WITH_RSSI
:
3714 hci_inquiry_result_with_rssi_evt(hdev
, skb
);
3717 case HCI_EV_REMOTE_EXT_FEATURES
:
3718 hci_remote_ext_features_evt(hdev
, skb
);
3721 case HCI_EV_SYNC_CONN_COMPLETE
:
3722 hci_sync_conn_complete_evt(hdev
, skb
);
3725 case HCI_EV_EXTENDED_INQUIRY_RESULT
:
3726 hci_extended_inquiry_result_evt(hdev
, skb
);
3729 case HCI_EV_KEY_REFRESH_COMPLETE
:
3730 hci_key_refresh_complete_evt(hdev
, skb
);
3733 case HCI_EV_IO_CAPA_REQUEST
:
3734 hci_io_capa_request_evt(hdev
, skb
);
3737 case HCI_EV_IO_CAPA_REPLY
:
3738 hci_io_capa_reply_evt(hdev
, skb
);
3741 case HCI_EV_USER_CONFIRM_REQUEST
:
3742 hci_user_confirm_request_evt(hdev
, skb
);
3745 case HCI_EV_USER_PASSKEY_REQUEST
:
3746 hci_user_passkey_request_evt(hdev
, skb
);
3749 case HCI_EV_USER_PASSKEY_NOTIFY
:
3750 hci_user_passkey_notify_evt(hdev
, skb
);
3753 case HCI_EV_KEYPRESS_NOTIFY
:
3754 hci_keypress_notify_evt(hdev
, skb
);
3757 case HCI_EV_SIMPLE_PAIR_COMPLETE
:
3758 hci_simple_pair_complete_evt(hdev
, skb
);
3761 case HCI_EV_REMOTE_HOST_FEATURES
:
3762 hci_remote_host_features_evt(hdev
, skb
);
3765 case HCI_EV_LE_META
:
3766 hci_le_meta_evt(hdev
, skb
);
3769 case HCI_EV_CHANNEL_SELECTED
:
3770 hci_chan_selected_evt(hdev
, skb
);
3773 case HCI_EV_REMOTE_OOB_DATA_REQUEST
:
3774 hci_remote_oob_data_request_evt(hdev
, skb
);
3777 case HCI_EV_PHY_LINK_COMPLETE
:
3778 hci_phy_link_complete_evt(hdev
, skb
);
3781 case HCI_EV_LOGICAL_LINK_COMPLETE
:
3782 hci_loglink_complete_evt(hdev
, skb
);
3785 case HCI_EV_DISCONN_LOGICAL_LINK_COMPLETE
:
3786 hci_disconn_loglink_complete_evt(hdev
, skb
);
3789 case HCI_EV_DISCONN_PHY_LINK_COMPLETE
:
3790 hci_disconn_phylink_complete_evt(hdev
, skb
);
3793 case HCI_EV_NUM_COMP_BLOCKS
:
3794 hci_num_comp_blocks_evt(hdev
, skb
);
3798 BT_DBG("%s event 0x%2.2x", hdev
->name
, event
);
3803 hdev
->stat
.evt_rx
++;