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
&= ~(BIT(HCI_LE_SCAN
) | BIT(HCI_PERIODIC_INQ
));
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
);
227 if (!status
&& !test_bit(HCI_INIT
, &hdev
->flags
))
231 static void hci_cc_read_local_name(struct hci_dev
*hdev
, struct sk_buff
*skb
)
233 struct hci_rp_read_local_name
*rp
= (void *) skb
->data
;
235 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
240 if (test_bit(HCI_SETUP
, &hdev
->dev_flags
))
241 memcpy(hdev
->dev_name
, rp
->name
, HCI_MAX_NAME_LENGTH
);
244 static void hci_cc_write_auth_enable(struct hci_dev
*hdev
, struct sk_buff
*skb
)
246 __u8 status
= *((__u8
*) skb
->data
);
249 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
251 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_AUTH_ENABLE
);
256 __u8 param
= *((__u8
*) sent
);
258 if (param
== AUTH_ENABLED
)
259 set_bit(HCI_AUTH
, &hdev
->flags
);
261 clear_bit(HCI_AUTH
, &hdev
->flags
);
264 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
265 mgmt_auth_enable_complete(hdev
, status
);
268 static void hci_cc_write_encrypt_mode(struct hci_dev
*hdev
, struct sk_buff
*skb
)
270 __u8 status
= *((__u8
*) skb
->data
);
273 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
275 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_ENCRYPT_MODE
);
280 __u8 param
= *((__u8
*) sent
);
283 set_bit(HCI_ENCRYPT
, &hdev
->flags
);
285 clear_bit(HCI_ENCRYPT
, &hdev
->flags
);
289 static void hci_cc_write_scan_enable(struct hci_dev
*hdev
, struct sk_buff
*skb
)
291 __u8 param
, status
= *((__u8
*) skb
->data
);
292 int old_pscan
, old_iscan
;
295 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
297 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_SCAN_ENABLE
);
301 param
= *((__u8
*) sent
);
306 mgmt_write_scan_failed(hdev
, param
, status
);
307 hdev
->discov_timeout
= 0;
311 old_pscan
= test_and_clear_bit(HCI_PSCAN
, &hdev
->flags
);
312 old_iscan
= test_and_clear_bit(HCI_ISCAN
, &hdev
->flags
);
314 if (param
& SCAN_INQUIRY
) {
315 set_bit(HCI_ISCAN
, &hdev
->flags
);
317 mgmt_discoverable(hdev
, 1);
318 if (hdev
->discov_timeout
> 0) {
319 int to
= msecs_to_jiffies(hdev
->discov_timeout
* 1000);
320 queue_delayed_work(hdev
->workqueue
, &hdev
->discov_off
,
323 } else if (old_iscan
)
324 mgmt_discoverable(hdev
, 0);
326 if (param
& SCAN_PAGE
) {
327 set_bit(HCI_PSCAN
, &hdev
->flags
);
329 mgmt_connectable(hdev
, 1);
330 } else if (old_pscan
)
331 mgmt_connectable(hdev
, 0);
334 hci_dev_unlock(hdev
);
337 static void hci_cc_read_class_of_dev(struct hci_dev
*hdev
, struct sk_buff
*skb
)
339 struct hci_rp_read_class_of_dev
*rp
= (void *) skb
->data
;
341 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
346 memcpy(hdev
->dev_class
, rp
->dev_class
, 3);
348 BT_DBG("%s class 0x%.2x%.2x%.2x", hdev
->name
,
349 hdev
->dev_class
[2], hdev
->dev_class
[1], hdev
->dev_class
[0]);
352 static void hci_cc_write_class_of_dev(struct hci_dev
*hdev
, struct sk_buff
*skb
)
354 __u8 status
= *((__u8
*) skb
->data
);
357 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
359 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_CLASS_OF_DEV
);
366 memcpy(hdev
->dev_class
, sent
, 3);
368 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
369 mgmt_set_class_of_dev_complete(hdev
, sent
, status
);
371 hci_dev_unlock(hdev
);
374 static void hci_cc_read_voice_setting(struct hci_dev
*hdev
, struct sk_buff
*skb
)
376 struct hci_rp_read_voice_setting
*rp
= (void *) skb
->data
;
379 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
384 setting
= __le16_to_cpu(rp
->voice_setting
);
386 if (hdev
->voice_setting
== setting
)
389 hdev
->voice_setting
= setting
;
391 BT_DBG("%s voice setting 0x%4.4x", hdev
->name
, setting
);
394 hdev
->notify(hdev
, HCI_NOTIFY_VOICE_SETTING
);
397 static void hci_cc_write_voice_setting(struct hci_dev
*hdev
,
400 __u8 status
= *((__u8
*) skb
->data
);
404 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
409 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_VOICE_SETTING
);
413 setting
= get_unaligned_le16(sent
);
415 if (hdev
->voice_setting
== setting
)
418 hdev
->voice_setting
= setting
;
420 BT_DBG("%s voice setting 0x%4.4x", hdev
->name
, setting
);
423 hdev
->notify(hdev
, HCI_NOTIFY_VOICE_SETTING
);
426 static void hci_cc_write_ssp_mode(struct hci_dev
*hdev
, struct sk_buff
*skb
)
428 __u8 status
= *((__u8
*) skb
->data
);
429 struct hci_cp_write_ssp_mode
*sent
;
431 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
433 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_SSP_MODE
);
439 hdev
->host_features
[0] |= LMP_HOST_SSP
;
441 hdev
->host_features
[0] &= ~LMP_HOST_SSP
;
444 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
445 mgmt_ssp_enable_complete(hdev
, sent
->mode
, status
);
448 set_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
);
450 clear_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
);
454 static void hci_cc_read_local_version(struct hci_dev
*hdev
, struct sk_buff
*skb
)
456 struct hci_rp_read_local_version
*rp
= (void *) skb
->data
;
458 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
463 hdev
->hci_ver
= rp
->hci_ver
;
464 hdev
->hci_rev
= __le16_to_cpu(rp
->hci_rev
);
465 hdev
->lmp_ver
= rp
->lmp_ver
;
466 hdev
->manufacturer
= __le16_to_cpu(rp
->manufacturer
);
467 hdev
->lmp_subver
= __le16_to_cpu(rp
->lmp_subver
);
469 BT_DBG("%s manufacturer 0x%4.4x hci ver %d:%d", hdev
->name
,
470 hdev
->manufacturer
, hdev
->hci_ver
, hdev
->hci_rev
);
473 static void hci_cc_read_local_commands(struct hci_dev
*hdev
,
476 struct hci_rp_read_local_commands
*rp
= (void *) skb
->data
;
478 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
481 memcpy(hdev
->commands
, rp
->commands
, sizeof(hdev
->commands
));
484 static void hci_cc_read_local_features(struct hci_dev
*hdev
,
487 struct hci_rp_read_local_features
*rp
= (void *) skb
->data
;
489 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
494 memcpy(hdev
->features
, rp
->features
, 8);
496 /* Adjust default settings according to features
497 * supported by device. */
499 if (hdev
->features
[0] & LMP_3SLOT
)
500 hdev
->pkt_type
|= (HCI_DM3
| HCI_DH3
);
502 if (hdev
->features
[0] & LMP_5SLOT
)
503 hdev
->pkt_type
|= (HCI_DM5
| HCI_DH5
);
505 if (hdev
->features
[1] & LMP_HV2
) {
506 hdev
->pkt_type
|= (HCI_HV2
);
507 hdev
->esco_type
|= (ESCO_HV2
);
510 if (hdev
->features
[1] & LMP_HV3
) {
511 hdev
->pkt_type
|= (HCI_HV3
);
512 hdev
->esco_type
|= (ESCO_HV3
);
515 if (lmp_esco_capable(hdev
))
516 hdev
->esco_type
|= (ESCO_EV3
);
518 if (hdev
->features
[4] & LMP_EV4
)
519 hdev
->esco_type
|= (ESCO_EV4
);
521 if (hdev
->features
[4] & LMP_EV5
)
522 hdev
->esco_type
|= (ESCO_EV5
);
524 if (hdev
->features
[5] & LMP_EDR_ESCO_2M
)
525 hdev
->esco_type
|= (ESCO_2EV3
);
527 if (hdev
->features
[5] & LMP_EDR_ESCO_3M
)
528 hdev
->esco_type
|= (ESCO_3EV3
);
530 if (hdev
->features
[5] & LMP_EDR_3S_ESCO
)
531 hdev
->esco_type
|= (ESCO_2EV5
| ESCO_3EV5
);
533 BT_DBG("%s features 0x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x", hdev
->name
,
534 hdev
->features
[0], hdev
->features
[1],
535 hdev
->features
[2], hdev
->features
[3],
536 hdev
->features
[4], hdev
->features
[5],
537 hdev
->features
[6], hdev
->features
[7]);
540 static void hci_cc_read_local_ext_features(struct hci_dev
*hdev
,
543 struct hci_rp_read_local_ext_features
*rp
= (void *) skb
->data
;
545 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
552 memcpy(hdev
->features
, rp
->features
, 8);
555 memcpy(hdev
->host_features
, rp
->features
, 8);
560 static void hci_cc_read_flow_control_mode(struct hci_dev
*hdev
,
563 struct hci_rp_read_flow_control_mode
*rp
= (void *) skb
->data
;
565 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
568 hdev
->flow_ctl_mode
= rp
->mode
;
571 static void hci_cc_read_buffer_size(struct hci_dev
*hdev
, struct sk_buff
*skb
)
573 struct hci_rp_read_buffer_size
*rp
= (void *) skb
->data
;
575 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
580 hdev
->acl_mtu
= __le16_to_cpu(rp
->acl_mtu
);
581 hdev
->sco_mtu
= rp
->sco_mtu
;
582 hdev
->acl_pkts
= __le16_to_cpu(rp
->acl_max_pkt
);
583 hdev
->sco_pkts
= __le16_to_cpu(rp
->sco_max_pkt
);
585 if (test_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE
, &hdev
->quirks
)) {
590 hdev
->acl_cnt
= hdev
->acl_pkts
;
591 hdev
->sco_cnt
= hdev
->sco_pkts
;
593 BT_DBG("%s acl mtu %d:%d sco mtu %d:%d", hdev
->name
, hdev
->acl_mtu
,
594 hdev
->acl_pkts
, hdev
->sco_mtu
, hdev
->sco_pkts
);
597 static void hci_cc_read_bd_addr(struct hci_dev
*hdev
, struct sk_buff
*skb
)
599 struct hci_rp_read_bd_addr
*rp
= (void *) skb
->data
;
601 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
604 bacpy(&hdev
->bdaddr
, &rp
->bdaddr
);
607 static void hci_cc_read_data_block_size(struct hci_dev
*hdev
,
610 struct hci_rp_read_data_block_size
*rp
= (void *) skb
->data
;
612 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
617 hdev
->block_mtu
= __le16_to_cpu(rp
->max_acl_len
);
618 hdev
->block_len
= __le16_to_cpu(rp
->block_len
);
619 hdev
->num_blocks
= __le16_to_cpu(rp
->num_blocks
);
621 hdev
->block_cnt
= hdev
->num_blocks
;
623 BT_DBG("%s blk mtu %d cnt %d len %d", hdev
->name
, hdev
->block_mtu
,
624 hdev
->block_cnt
, hdev
->block_len
);
627 static void hci_cc_read_local_amp_info(struct hci_dev
*hdev
,
630 struct hci_rp_read_local_amp_info
*rp
= (void *) skb
->data
;
632 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
637 hdev
->amp_status
= rp
->amp_status
;
638 hdev
->amp_total_bw
= __le32_to_cpu(rp
->total_bw
);
639 hdev
->amp_max_bw
= __le32_to_cpu(rp
->max_bw
);
640 hdev
->amp_min_latency
= __le32_to_cpu(rp
->min_latency
);
641 hdev
->amp_max_pdu
= __le32_to_cpu(rp
->max_pdu
);
642 hdev
->amp_type
= rp
->amp_type
;
643 hdev
->amp_pal_cap
= __le16_to_cpu(rp
->pal_cap
);
644 hdev
->amp_assoc_size
= __le16_to_cpu(rp
->max_assoc_size
);
645 hdev
->amp_be_flush_to
= __le32_to_cpu(rp
->be_flush_to
);
646 hdev
->amp_max_flush_to
= __le32_to_cpu(rp
->max_flush_to
);
649 a2mp_send_getinfo_rsp(hdev
);
652 static void hci_cc_read_local_amp_assoc(struct hci_dev
*hdev
,
655 struct hci_rp_read_local_amp_assoc
*rp
= (void *) skb
->data
;
656 struct amp_assoc
*assoc
= &hdev
->loc_assoc
;
657 size_t rem_len
, frag_len
;
659 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
664 frag_len
= skb
->len
- sizeof(*rp
);
665 rem_len
= __le16_to_cpu(rp
->rem_len
);
667 if (rem_len
> frag_len
) {
668 BT_DBG("frag_len %zu rem_len %zu", frag_len
, rem_len
);
670 memcpy(assoc
->data
+ assoc
->offset
, rp
->frag
, frag_len
);
671 assoc
->offset
+= frag_len
;
673 /* Read other fragments */
674 amp_read_loc_assoc_frag(hdev
, rp
->phy_handle
);
679 memcpy(assoc
->data
+ assoc
->offset
, rp
->frag
, rem_len
);
680 assoc
->len
= assoc
->offset
+ rem_len
;
684 /* Send A2MP Rsp when all fragments are received */
685 a2mp_send_getampassoc_rsp(hdev
, rp
->status
);
686 a2mp_send_create_phy_link_req(hdev
, rp
->status
);
689 static void hci_cc_read_inq_rsp_tx_power(struct hci_dev
*hdev
,
692 struct hci_rp_read_inq_rsp_tx_power
*rp
= (void *) skb
->data
;
694 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
697 hdev
->inq_tx_power
= rp
->tx_power
;
700 static void hci_cc_pin_code_reply(struct hci_dev
*hdev
, struct sk_buff
*skb
)
702 struct hci_rp_pin_code_reply
*rp
= (void *) skb
->data
;
703 struct hci_cp_pin_code_reply
*cp
;
704 struct hci_conn
*conn
;
706 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
710 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
711 mgmt_pin_code_reply_complete(hdev
, &rp
->bdaddr
, rp
->status
);
716 cp
= hci_sent_cmd_data(hdev
, HCI_OP_PIN_CODE_REPLY
);
720 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &cp
->bdaddr
);
722 conn
->pin_length
= cp
->pin_len
;
725 hci_dev_unlock(hdev
);
728 static void hci_cc_pin_code_neg_reply(struct hci_dev
*hdev
, struct sk_buff
*skb
)
730 struct hci_rp_pin_code_neg_reply
*rp
= (void *) skb
->data
;
732 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
736 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
737 mgmt_pin_code_neg_reply_complete(hdev
, &rp
->bdaddr
,
740 hci_dev_unlock(hdev
);
743 static void hci_cc_le_read_buffer_size(struct hci_dev
*hdev
,
746 struct hci_rp_le_read_buffer_size
*rp
= (void *) skb
->data
;
748 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
753 hdev
->le_mtu
= __le16_to_cpu(rp
->le_mtu
);
754 hdev
->le_pkts
= rp
->le_max_pkt
;
756 hdev
->le_cnt
= hdev
->le_pkts
;
758 BT_DBG("%s le mtu %d:%d", hdev
->name
, hdev
->le_mtu
, hdev
->le_pkts
);
761 static void hci_cc_le_read_local_features(struct hci_dev
*hdev
,
764 struct hci_rp_le_read_local_features
*rp
= (void *) skb
->data
;
766 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
769 memcpy(hdev
->le_features
, rp
->features
, 8);
772 static void hci_cc_le_read_adv_tx_power(struct hci_dev
*hdev
,
775 struct hci_rp_le_read_adv_tx_power
*rp
= (void *) skb
->data
;
777 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
780 hdev
->adv_tx_power
= rp
->tx_power
;
781 if (!test_bit(HCI_INIT
, &hdev
->flags
))
786 static void hci_cc_user_confirm_reply(struct hci_dev
*hdev
, struct sk_buff
*skb
)
788 struct hci_rp_user_confirm_reply
*rp
= (void *) skb
->data
;
790 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
794 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
795 mgmt_user_confirm_reply_complete(hdev
, &rp
->bdaddr
, ACL_LINK
, 0,
798 hci_dev_unlock(hdev
);
801 static void hci_cc_user_confirm_neg_reply(struct hci_dev
*hdev
,
804 struct hci_rp_user_confirm_reply
*rp
= (void *) skb
->data
;
806 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
810 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
811 mgmt_user_confirm_neg_reply_complete(hdev
, &rp
->bdaddr
,
812 ACL_LINK
, 0, rp
->status
);
814 hci_dev_unlock(hdev
);
817 static void hci_cc_user_passkey_reply(struct hci_dev
*hdev
, struct sk_buff
*skb
)
819 struct hci_rp_user_confirm_reply
*rp
= (void *) skb
->data
;
821 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
825 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
826 mgmt_user_passkey_reply_complete(hdev
, &rp
->bdaddr
, ACL_LINK
,
829 hci_dev_unlock(hdev
);
832 static void hci_cc_user_passkey_neg_reply(struct hci_dev
*hdev
,
835 struct hci_rp_user_confirm_reply
*rp
= (void *) skb
->data
;
837 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
841 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
842 mgmt_user_passkey_neg_reply_complete(hdev
, &rp
->bdaddr
,
843 ACL_LINK
, 0, rp
->status
);
845 hci_dev_unlock(hdev
);
848 static void hci_cc_read_local_oob_data_reply(struct hci_dev
*hdev
,
851 struct hci_rp_read_local_oob_data
*rp
= (void *) skb
->data
;
853 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
856 mgmt_read_local_oob_data_reply_complete(hdev
, rp
->hash
,
857 rp
->randomizer
, rp
->status
);
858 hci_dev_unlock(hdev
);
861 static void hci_cc_le_set_adv_enable(struct hci_dev
*hdev
, struct sk_buff
*skb
)
863 __u8
*sent
, status
= *((__u8
*) skb
->data
);
865 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
867 sent
= hci_sent_cmd_data(hdev
, HCI_OP_LE_SET_ADV_ENABLE
);
875 set_bit(HCI_LE_PERIPHERAL
, &hdev
->dev_flags
);
877 clear_bit(HCI_LE_PERIPHERAL
, &hdev
->dev_flags
);
880 hci_dev_unlock(hdev
);
882 if (!test_bit(HCI_INIT
, &hdev
->flags
))
886 static void hci_cc_le_set_scan_param(struct hci_dev
*hdev
, struct sk_buff
*skb
)
888 __u8 status
= *((__u8
*) skb
->data
);
890 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
894 mgmt_start_discovery_failed(hdev
, status
);
895 hci_dev_unlock(hdev
);
900 static void hci_cc_le_set_scan_enable(struct hci_dev
*hdev
,
903 struct hci_cp_le_set_scan_enable
*cp
;
904 __u8 status
= *((__u8
*) skb
->data
);
906 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
908 cp
= hci_sent_cmd_data(hdev
, HCI_OP_LE_SET_SCAN_ENABLE
);
912 switch (cp
->enable
) {
913 case LE_SCANNING_ENABLED
:
916 mgmt_start_discovery_failed(hdev
, status
);
917 hci_dev_unlock(hdev
);
921 set_bit(HCI_LE_SCAN
, &hdev
->dev_flags
);
924 hci_discovery_set_state(hdev
, DISCOVERY_FINDING
);
925 hci_dev_unlock(hdev
);
928 case LE_SCANNING_DISABLED
:
931 mgmt_stop_discovery_failed(hdev
, status
);
932 hci_dev_unlock(hdev
);
936 clear_bit(HCI_LE_SCAN
, &hdev
->dev_flags
);
938 if (hdev
->discovery
.type
== DISCOV_TYPE_INTERLEAVED
&&
939 hdev
->discovery
.state
== DISCOVERY_FINDING
) {
940 mgmt_interleaved_discovery(hdev
);
943 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
944 hci_dev_unlock(hdev
);
950 BT_ERR("Used reserved LE_Scan_Enable param %d", cp
->enable
);
955 static void hci_cc_le_read_white_list_size(struct hci_dev
*hdev
,
958 struct hci_rp_le_read_white_list_size
*rp
= (void *) skb
->data
;
960 BT_DBG("%s status 0x%2.2x size %u", hdev
->name
, rp
->status
, rp
->size
);
963 hdev
->le_white_list_size
= rp
->size
;
966 static void hci_cc_le_read_supported_states(struct hci_dev
*hdev
,
969 struct hci_rp_le_read_supported_states
*rp
= (void *) skb
->data
;
971 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
974 memcpy(hdev
->le_states
, rp
->le_states
, 8);
977 static void hci_cc_write_le_host_supported(struct hci_dev
*hdev
,
980 struct hci_cp_write_le_host_supported
*sent
;
981 __u8 status
= *((__u8
*) skb
->data
);
983 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
985 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_LE_HOST_SUPPORTED
);
991 hdev
->host_features
[0] |= LMP_HOST_LE
;
993 hdev
->host_features
[0] &= ~LMP_HOST_LE
;
996 hdev
->host_features
[0] |= LMP_HOST_LE_BREDR
;
998 hdev
->host_features
[0] &= ~LMP_HOST_LE_BREDR
;
1001 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
) &&
1002 !test_bit(HCI_INIT
, &hdev
->flags
))
1003 mgmt_le_enable_complete(hdev
, sent
->le
, status
);
1006 static void hci_cc_write_remote_amp_assoc(struct hci_dev
*hdev
,
1007 struct sk_buff
*skb
)
1009 struct hci_rp_write_remote_amp_assoc
*rp
= (void *) skb
->data
;
1011 BT_DBG("%s status 0x%2.2x phy_handle 0x%2.2x",
1012 hdev
->name
, rp
->status
, rp
->phy_handle
);
1017 amp_write_rem_assoc_continue(hdev
, rp
->phy_handle
);
1020 static void hci_cs_inquiry(struct hci_dev
*hdev
, __u8 status
)
1022 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1025 hci_conn_check_pending(hdev
);
1027 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
1028 mgmt_start_discovery_failed(hdev
, status
);
1029 hci_dev_unlock(hdev
);
1033 set_bit(HCI_INQUIRY
, &hdev
->flags
);
1036 hci_discovery_set_state(hdev
, DISCOVERY_FINDING
);
1037 hci_dev_unlock(hdev
);
1040 static void hci_cs_create_conn(struct hci_dev
*hdev
, __u8 status
)
1042 struct hci_cp_create_conn
*cp
;
1043 struct hci_conn
*conn
;
1045 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1047 cp
= hci_sent_cmd_data(hdev
, HCI_OP_CREATE_CONN
);
1053 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &cp
->bdaddr
);
1055 BT_DBG("%s bdaddr %pMR hcon %p", hdev
->name
, &cp
->bdaddr
, conn
);
1058 if (conn
&& conn
->state
== BT_CONNECT
) {
1059 if (status
!= 0x0c || conn
->attempt
> 2) {
1060 conn
->state
= BT_CLOSED
;
1061 hci_proto_connect_cfm(conn
, status
);
1064 conn
->state
= BT_CONNECT2
;
1068 conn
= hci_conn_add(hdev
, ACL_LINK
, &cp
->bdaddr
);
1071 conn
->link_mode
|= HCI_LM_MASTER
;
1073 BT_ERR("No memory for new connection");
1077 hci_dev_unlock(hdev
);
1080 static void hci_cs_add_sco(struct hci_dev
*hdev
, __u8 status
)
1082 struct hci_cp_add_sco
*cp
;
1083 struct hci_conn
*acl
, *sco
;
1086 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1091 cp
= hci_sent_cmd_data(hdev
, HCI_OP_ADD_SCO
);
1095 handle
= __le16_to_cpu(cp
->handle
);
1097 BT_DBG("%s handle 0x%4.4x", hdev
->name
, handle
);
1101 acl
= hci_conn_hash_lookup_handle(hdev
, handle
);
1105 sco
->state
= BT_CLOSED
;
1107 hci_proto_connect_cfm(sco
, status
);
1112 hci_dev_unlock(hdev
);
1115 static void hci_cs_auth_requested(struct hci_dev
*hdev
, __u8 status
)
1117 struct hci_cp_auth_requested
*cp
;
1118 struct hci_conn
*conn
;
1120 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1125 cp
= hci_sent_cmd_data(hdev
, HCI_OP_AUTH_REQUESTED
);
1131 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1133 if (conn
->state
== BT_CONFIG
) {
1134 hci_proto_connect_cfm(conn
, status
);
1139 hci_dev_unlock(hdev
);
1142 static void hci_cs_set_conn_encrypt(struct hci_dev
*hdev
, __u8 status
)
1144 struct hci_cp_set_conn_encrypt
*cp
;
1145 struct hci_conn
*conn
;
1147 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1152 cp
= hci_sent_cmd_data(hdev
, HCI_OP_SET_CONN_ENCRYPT
);
1158 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1160 if (conn
->state
== BT_CONFIG
) {
1161 hci_proto_connect_cfm(conn
, status
);
1166 hci_dev_unlock(hdev
);
1169 static int hci_outgoing_auth_needed(struct hci_dev
*hdev
,
1170 struct hci_conn
*conn
)
1172 if (conn
->state
!= BT_CONFIG
|| !conn
->out
)
1175 if (conn
->pending_sec_level
== BT_SECURITY_SDP
)
1178 /* Only request authentication for SSP connections or non-SSP
1179 * devices with sec_level HIGH or if MITM protection is requested */
1180 if (!hci_conn_ssp_enabled(conn
) && !(conn
->auth_type
& 0x01) &&
1181 conn
->pending_sec_level
!= BT_SECURITY_HIGH
)
1187 static int hci_resolve_name(struct hci_dev
*hdev
,
1188 struct inquiry_entry
*e
)
1190 struct hci_cp_remote_name_req cp
;
1192 memset(&cp
, 0, sizeof(cp
));
1194 bacpy(&cp
.bdaddr
, &e
->data
.bdaddr
);
1195 cp
.pscan_rep_mode
= e
->data
.pscan_rep_mode
;
1196 cp
.pscan_mode
= e
->data
.pscan_mode
;
1197 cp
.clock_offset
= e
->data
.clock_offset
;
1199 return hci_send_cmd(hdev
, HCI_OP_REMOTE_NAME_REQ
, sizeof(cp
), &cp
);
1202 static bool hci_resolve_next_name(struct hci_dev
*hdev
)
1204 struct discovery_state
*discov
= &hdev
->discovery
;
1205 struct inquiry_entry
*e
;
1207 if (list_empty(&discov
->resolve
))
1210 e
= hci_inquiry_cache_lookup_resolve(hdev
, BDADDR_ANY
, NAME_NEEDED
);
1214 if (hci_resolve_name(hdev
, e
) == 0) {
1215 e
->name_state
= NAME_PENDING
;
1222 static void hci_check_pending_name(struct hci_dev
*hdev
, struct hci_conn
*conn
,
1223 bdaddr_t
*bdaddr
, u8
*name
, u8 name_len
)
1225 struct discovery_state
*discov
= &hdev
->discovery
;
1226 struct inquiry_entry
*e
;
1228 if (conn
&& !test_and_set_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
))
1229 mgmt_device_connected(hdev
, bdaddr
, ACL_LINK
, 0x00, 0, name
,
1230 name_len
, conn
->dev_class
);
1232 if (discov
->state
== DISCOVERY_STOPPED
)
1235 if (discov
->state
== DISCOVERY_STOPPING
)
1236 goto discov_complete
;
1238 if (discov
->state
!= DISCOVERY_RESOLVING
)
1241 e
= hci_inquiry_cache_lookup_resolve(hdev
, bdaddr
, NAME_PENDING
);
1242 /* If the device was not found in a list of found devices names of which
1243 * are pending. there is no need to continue resolving a next name as it
1244 * will be done upon receiving another Remote Name Request Complete
1251 e
->name_state
= NAME_KNOWN
;
1252 mgmt_remote_name(hdev
, bdaddr
, ACL_LINK
, 0x00,
1253 e
->data
.rssi
, name
, name_len
);
1255 e
->name_state
= NAME_NOT_KNOWN
;
1258 if (hci_resolve_next_name(hdev
))
1262 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
1265 static void hci_cs_remote_name_req(struct hci_dev
*hdev
, __u8 status
)
1267 struct hci_cp_remote_name_req
*cp
;
1268 struct hci_conn
*conn
;
1270 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1272 /* If successful wait for the name req complete event before
1273 * checking for the need to do authentication */
1277 cp
= hci_sent_cmd_data(hdev
, HCI_OP_REMOTE_NAME_REQ
);
1283 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &cp
->bdaddr
);
1285 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
1286 hci_check_pending_name(hdev
, conn
, &cp
->bdaddr
, NULL
, 0);
1291 if (!hci_outgoing_auth_needed(hdev
, conn
))
1294 if (!test_and_set_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
)) {
1295 struct hci_cp_auth_requested cp
;
1296 cp
.handle
= __cpu_to_le16(conn
->handle
);
1297 hci_send_cmd(hdev
, HCI_OP_AUTH_REQUESTED
, sizeof(cp
), &cp
);
1301 hci_dev_unlock(hdev
);
1304 static void hci_cs_read_remote_features(struct hci_dev
*hdev
, __u8 status
)
1306 struct hci_cp_read_remote_features
*cp
;
1307 struct hci_conn
*conn
;
1309 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1314 cp
= hci_sent_cmd_data(hdev
, HCI_OP_READ_REMOTE_FEATURES
);
1320 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1322 if (conn
->state
== BT_CONFIG
) {
1323 hci_proto_connect_cfm(conn
, status
);
1328 hci_dev_unlock(hdev
);
1331 static void hci_cs_read_remote_ext_features(struct hci_dev
*hdev
, __u8 status
)
1333 struct hci_cp_read_remote_ext_features
*cp
;
1334 struct hci_conn
*conn
;
1336 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1341 cp
= hci_sent_cmd_data(hdev
, HCI_OP_READ_REMOTE_EXT_FEATURES
);
1347 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1349 if (conn
->state
== BT_CONFIG
) {
1350 hci_proto_connect_cfm(conn
, status
);
1355 hci_dev_unlock(hdev
);
1358 static void hci_cs_setup_sync_conn(struct hci_dev
*hdev
, __u8 status
)
1360 struct hci_cp_setup_sync_conn
*cp
;
1361 struct hci_conn
*acl
, *sco
;
1364 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1369 cp
= hci_sent_cmd_data(hdev
, HCI_OP_SETUP_SYNC_CONN
);
1373 handle
= __le16_to_cpu(cp
->handle
);
1375 BT_DBG("%s handle 0x%4.4x", hdev
->name
, handle
);
1379 acl
= hci_conn_hash_lookup_handle(hdev
, handle
);
1383 sco
->state
= BT_CLOSED
;
1385 hci_proto_connect_cfm(sco
, status
);
1390 hci_dev_unlock(hdev
);
1393 static void hci_cs_sniff_mode(struct hci_dev
*hdev
, __u8 status
)
1395 struct hci_cp_sniff_mode
*cp
;
1396 struct hci_conn
*conn
;
1398 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1403 cp
= hci_sent_cmd_data(hdev
, HCI_OP_SNIFF_MODE
);
1409 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1411 clear_bit(HCI_CONN_MODE_CHANGE_PEND
, &conn
->flags
);
1413 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND
, &conn
->flags
))
1414 hci_sco_setup(conn
, status
);
1417 hci_dev_unlock(hdev
);
1420 static void hci_cs_exit_sniff_mode(struct hci_dev
*hdev
, __u8 status
)
1422 struct hci_cp_exit_sniff_mode
*cp
;
1423 struct hci_conn
*conn
;
1425 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1430 cp
= hci_sent_cmd_data(hdev
, HCI_OP_EXIT_SNIFF_MODE
);
1436 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1438 clear_bit(HCI_CONN_MODE_CHANGE_PEND
, &conn
->flags
);
1440 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND
, &conn
->flags
))
1441 hci_sco_setup(conn
, status
);
1444 hci_dev_unlock(hdev
);
1447 static void hci_cs_disconnect(struct hci_dev
*hdev
, u8 status
)
1449 struct hci_cp_disconnect
*cp
;
1450 struct hci_conn
*conn
;
1455 cp
= hci_sent_cmd_data(hdev
, HCI_OP_DISCONNECT
);
1461 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1463 mgmt_disconnect_failed(hdev
, &conn
->dst
, conn
->type
,
1464 conn
->dst_type
, status
);
1466 hci_dev_unlock(hdev
);
1469 static void hci_cs_le_create_conn(struct hci_dev
*hdev
, __u8 status
)
1471 struct hci_conn
*conn
;
1473 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1478 conn
= hci_conn_hash_lookup_state(hdev
, LE_LINK
, BT_CONNECT
);
1480 hci_dev_unlock(hdev
);
1484 BT_DBG("%s bdaddr %pMR conn %p", hdev
->name
, &conn
->dst
, conn
);
1486 conn
->state
= BT_CLOSED
;
1487 mgmt_connect_failed(hdev
, &conn
->dst
, conn
->type
,
1488 conn
->dst_type
, status
);
1489 hci_proto_connect_cfm(conn
, status
);
1492 hci_dev_unlock(hdev
);
1496 static void hci_cs_create_phylink(struct hci_dev
*hdev
, u8 status
)
1498 struct hci_cp_create_phy_link
*cp
;
1500 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1502 cp
= hci_sent_cmd_data(hdev
, HCI_OP_CREATE_PHY_LINK
);
1509 struct hci_conn
*hcon
;
1511 hcon
= hci_conn_hash_lookup_handle(hdev
, cp
->phy_handle
);
1515 amp_write_remote_assoc(hdev
, cp
->phy_handle
);
1518 hci_dev_unlock(hdev
);
1521 static void hci_cs_accept_phylink(struct hci_dev
*hdev
, u8 status
)
1523 struct hci_cp_accept_phy_link
*cp
;
1525 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1530 cp
= hci_sent_cmd_data(hdev
, HCI_OP_ACCEPT_PHY_LINK
);
1534 amp_write_remote_assoc(hdev
, cp
->phy_handle
);
1537 static void hci_inquiry_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1539 __u8 status
= *((__u8
*) skb
->data
);
1540 struct discovery_state
*discov
= &hdev
->discovery
;
1541 struct inquiry_entry
*e
;
1543 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1545 hci_req_cmd_complete(hdev
, HCI_OP_INQUIRY
, status
);
1547 hci_conn_check_pending(hdev
);
1549 if (!test_and_clear_bit(HCI_INQUIRY
, &hdev
->flags
))
1552 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
1557 if (discov
->state
!= DISCOVERY_FINDING
)
1560 if (list_empty(&discov
->resolve
)) {
1561 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
1565 e
= hci_inquiry_cache_lookup_resolve(hdev
, BDADDR_ANY
, NAME_NEEDED
);
1566 if (e
&& hci_resolve_name(hdev
, e
) == 0) {
1567 e
->name_state
= NAME_PENDING
;
1568 hci_discovery_set_state(hdev
, DISCOVERY_RESOLVING
);
1570 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
1574 hci_dev_unlock(hdev
);
1577 static void hci_inquiry_result_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1579 struct inquiry_data data
;
1580 struct inquiry_info
*info
= (void *) (skb
->data
+ 1);
1581 int num_rsp
= *((__u8
*) skb
->data
);
1583 BT_DBG("%s num_rsp %d", hdev
->name
, num_rsp
);
1588 if (test_bit(HCI_PERIODIC_INQ
, &hdev
->dev_flags
))
1593 for (; num_rsp
; num_rsp
--, info
++) {
1594 bool name_known
, ssp
;
1596 bacpy(&data
.bdaddr
, &info
->bdaddr
);
1597 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
1598 data
.pscan_period_mode
= info
->pscan_period_mode
;
1599 data
.pscan_mode
= info
->pscan_mode
;
1600 memcpy(data
.dev_class
, info
->dev_class
, 3);
1601 data
.clock_offset
= info
->clock_offset
;
1603 data
.ssp_mode
= 0x00;
1605 name_known
= hci_inquiry_cache_update(hdev
, &data
, false, &ssp
);
1606 mgmt_device_found(hdev
, &info
->bdaddr
, ACL_LINK
, 0x00,
1607 info
->dev_class
, 0, !name_known
, ssp
, NULL
,
1611 hci_dev_unlock(hdev
);
1614 static void hci_conn_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1616 struct hci_ev_conn_complete
*ev
= (void *) skb
->data
;
1617 struct hci_conn
*conn
;
1619 BT_DBG("%s", hdev
->name
);
1623 conn
= hci_conn_hash_lookup_ba(hdev
, ev
->link_type
, &ev
->bdaddr
);
1625 if (ev
->link_type
!= SCO_LINK
)
1628 conn
= hci_conn_hash_lookup_ba(hdev
, ESCO_LINK
, &ev
->bdaddr
);
1632 conn
->type
= SCO_LINK
;
1636 conn
->handle
= __le16_to_cpu(ev
->handle
);
1638 if (conn
->type
== ACL_LINK
) {
1639 conn
->state
= BT_CONFIG
;
1640 hci_conn_hold(conn
);
1642 if (!conn
->out
&& !hci_conn_ssp_enabled(conn
) &&
1643 !hci_find_link_key(hdev
, &ev
->bdaddr
))
1644 conn
->disc_timeout
= HCI_PAIRING_TIMEOUT
;
1646 conn
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
1648 conn
->state
= BT_CONNECTED
;
1650 hci_conn_hold_device(conn
);
1651 hci_conn_add_sysfs(conn
);
1653 if (test_bit(HCI_AUTH
, &hdev
->flags
))
1654 conn
->link_mode
|= HCI_LM_AUTH
;
1656 if (test_bit(HCI_ENCRYPT
, &hdev
->flags
))
1657 conn
->link_mode
|= HCI_LM_ENCRYPT
;
1659 /* Get remote features */
1660 if (conn
->type
== ACL_LINK
) {
1661 struct hci_cp_read_remote_features cp
;
1662 cp
.handle
= ev
->handle
;
1663 hci_send_cmd(hdev
, HCI_OP_READ_REMOTE_FEATURES
,
1667 /* Set packet type for incoming connection */
1668 if (!conn
->out
&& hdev
->hci_ver
< BLUETOOTH_VER_2_0
) {
1669 struct hci_cp_change_conn_ptype cp
;
1670 cp
.handle
= ev
->handle
;
1671 cp
.pkt_type
= cpu_to_le16(conn
->pkt_type
);
1672 hci_send_cmd(hdev
, HCI_OP_CHANGE_CONN_PTYPE
, sizeof(cp
),
1676 conn
->state
= BT_CLOSED
;
1677 if (conn
->type
== ACL_LINK
)
1678 mgmt_connect_failed(hdev
, &ev
->bdaddr
, conn
->type
,
1679 conn
->dst_type
, ev
->status
);
1682 if (conn
->type
== ACL_LINK
)
1683 hci_sco_setup(conn
, ev
->status
);
1686 hci_proto_connect_cfm(conn
, ev
->status
);
1688 } else if (ev
->link_type
!= ACL_LINK
)
1689 hci_proto_connect_cfm(conn
, ev
->status
);
1692 hci_dev_unlock(hdev
);
1694 hci_conn_check_pending(hdev
);
1697 void hci_conn_accept(struct hci_conn
*conn
, int mask
)
1699 struct hci_dev
*hdev
= conn
->hdev
;
1701 BT_DBG("conn %p", conn
);
1703 conn
->state
= BT_CONFIG
;
1705 if (!lmp_esco_capable(hdev
)) {
1706 struct hci_cp_accept_conn_req cp
;
1708 bacpy(&cp
.bdaddr
, &conn
->dst
);
1710 if (lmp_rswitch_capable(hdev
) && (mask
& HCI_LM_MASTER
))
1711 cp
.role
= 0x00; /* Become master */
1713 cp
.role
= 0x01; /* Remain slave */
1715 hci_send_cmd(hdev
, HCI_OP_ACCEPT_CONN_REQ
, sizeof(cp
), &cp
);
1716 } else /* lmp_esco_capable(hdev)) */ {
1717 struct hci_cp_accept_sync_conn_req cp
;
1719 bacpy(&cp
.bdaddr
, &conn
->dst
);
1720 cp
.pkt_type
= cpu_to_le16(conn
->pkt_type
);
1722 cp
.tx_bandwidth
= __constant_cpu_to_le32(0x00001f40);
1723 cp
.rx_bandwidth
= __constant_cpu_to_le32(0x00001f40);
1724 cp
.max_latency
= __constant_cpu_to_le16(0xffff);
1725 cp
.content_format
= cpu_to_le16(hdev
->voice_setting
);
1726 cp
.retrans_effort
= 0xff;
1728 hci_send_cmd(hdev
, HCI_OP_ACCEPT_SYNC_CONN_REQ
,
1733 static void hci_conn_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1735 struct hci_ev_conn_request
*ev
= (void *) skb
->data
;
1736 int mask
= hdev
->link_mode
;
1739 BT_DBG("%s bdaddr %pMR type 0x%x", hdev
->name
, &ev
->bdaddr
,
1742 mask
|= hci_proto_connect_ind(hdev
, &ev
->bdaddr
, ev
->link_type
,
1745 if ((mask
& HCI_LM_ACCEPT
) &&
1746 !hci_blacklist_lookup(hdev
, &ev
->bdaddr
)) {
1747 /* Connection accepted */
1748 struct inquiry_entry
*ie
;
1749 struct hci_conn
*conn
;
1753 ie
= hci_inquiry_cache_lookup(hdev
, &ev
->bdaddr
);
1755 memcpy(ie
->data
.dev_class
, ev
->dev_class
, 3);
1757 conn
= hci_conn_hash_lookup_ba(hdev
, ev
->link_type
,
1760 conn
= hci_conn_add(hdev
, ev
->link_type
, &ev
->bdaddr
);
1762 BT_ERR("No memory for new connection");
1763 hci_dev_unlock(hdev
);
1768 memcpy(conn
->dev_class
, ev
->dev_class
, 3);
1770 hci_dev_unlock(hdev
);
1772 if (ev
->link_type
== ACL_LINK
||
1773 (!(flags
& HCI_PROTO_DEFER
) && !lmp_esco_capable(hdev
))) {
1774 struct hci_cp_accept_conn_req cp
;
1775 conn
->state
= BT_CONNECT
;
1777 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
1779 if (lmp_rswitch_capable(hdev
) && (mask
& HCI_LM_MASTER
))
1780 cp
.role
= 0x00; /* Become master */
1782 cp
.role
= 0x01; /* Remain slave */
1784 hci_send_cmd(hdev
, HCI_OP_ACCEPT_CONN_REQ
, sizeof(cp
),
1786 } else if (!(flags
& HCI_PROTO_DEFER
)) {
1787 struct hci_cp_accept_sync_conn_req cp
;
1788 conn
->state
= BT_CONNECT
;
1790 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
1791 cp
.pkt_type
= cpu_to_le16(conn
->pkt_type
);
1793 cp
.tx_bandwidth
= __constant_cpu_to_le32(0x00001f40);
1794 cp
.rx_bandwidth
= __constant_cpu_to_le32(0x00001f40);
1795 cp
.max_latency
= __constant_cpu_to_le16(0xffff);
1796 cp
.content_format
= cpu_to_le16(hdev
->voice_setting
);
1797 cp
.retrans_effort
= 0xff;
1799 hci_send_cmd(hdev
, HCI_OP_ACCEPT_SYNC_CONN_REQ
,
1802 conn
->state
= BT_CONNECT2
;
1803 hci_proto_connect_cfm(conn
, 0);
1807 /* Connection rejected */
1808 struct hci_cp_reject_conn_req cp
;
1810 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
1811 cp
.reason
= HCI_ERROR_REJ_BAD_ADDR
;
1812 hci_send_cmd(hdev
, HCI_OP_REJECT_CONN_REQ
, sizeof(cp
), &cp
);
1816 static u8
hci_to_mgmt_reason(u8 err
)
1819 case HCI_ERROR_CONNECTION_TIMEOUT
:
1820 return MGMT_DEV_DISCONN_TIMEOUT
;
1821 case HCI_ERROR_REMOTE_USER_TERM
:
1822 case HCI_ERROR_REMOTE_LOW_RESOURCES
:
1823 case HCI_ERROR_REMOTE_POWER_OFF
:
1824 return MGMT_DEV_DISCONN_REMOTE
;
1825 case HCI_ERROR_LOCAL_HOST_TERM
:
1826 return MGMT_DEV_DISCONN_LOCAL_HOST
;
1828 return MGMT_DEV_DISCONN_UNKNOWN
;
1832 static void hci_disconn_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1834 struct hci_ev_disconn_complete
*ev
= (void *) skb
->data
;
1835 struct hci_conn
*conn
;
1837 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
1841 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1845 if (ev
->status
== 0)
1846 conn
->state
= BT_CLOSED
;
1848 if (test_and_clear_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
) &&
1849 (conn
->type
== ACL_LINK
|| conn
->type
== LE_LINK
)) {
1851 mgmt_disconnect_failed(hdev
, &conn
->dst
, conn
->type
,
1852 conn
->dst_type
, ev
->status
);
1854 u8 reason
= hci_to_mgmt_reason(ev
->reason
);
1856 mgmt_device_disconnected(hdev
, &conn
->dst
, conn
->type
,
1857 conn
->dst_type
, reason
);
1861 if (ev
->status
== 0) {
1862 if (conn
->type
== ACL_LINK
&& conn
->flush_key
)
1863 hci_remove_link_key(hdev
, &conn
->dst
);
1864 hci_proto_disconn_cfm(conn
, ev
->reason
);
1869 hci_dev_unlock(hdev
);
1872 static void hci_auth_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1874 struct hci_ev_auth_complete
*ev
= (void *) skb
->data
;
1875 struct hci_conn
*conn
;
1877 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
1881 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1886 if (!hci_conn_ssp_enabled(conn
) &&
1887 test_bit(HCI_CONN_REAUTH_PEND
, &conn
->flags
)) {
1888 BT_INFO("re-auth of legacy device is not possible.");
1890 conn
->link_mode
|= HCI_LM_AUTH
;
1891 conn
->sec_level
= conn
->pending_sec_level
;
1894 mgmt_auth_failed(hdev
, &conn
->dst
, conn
->type
, conn
->dst_type
,
1898 clear_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
);
1899 clear_bit(HCI_CONN_REAUTH_PEND
, &conn
->flags
);
1901 if (conn
->state
== BT_CONFIG
) {
1902 if (!ev
->status
&& hci_conn_ssp_enabled(conn
)) {
1903 struct hci_cp_set_conn_encrypt cp
;
1904 cp
.handle
= ev
->handle
;
1906 hci_send_cmd(hdev
, HCI_OP_SET_CONN_ENCRYPT
, sizeof(cp
),
1909 conn
->state
= BT_CONNECTED
;
1910 hci_proto_connect_cfm(conn
, ev
->status
);
1914 hci_auth_cfm(conn
, ev
->status
);
1916 hci_conn_hold(conn
);
1917 conn
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
1921 if (test_bit(HCI_CONN_ENCRYPT_PEND
, &conn
->flags
)) {
1923 struct hci_cp_set_conn_encrypt cp
;
1924 cp
.handle
= ev
->handle
;
1926 hci_send_cmd(hdev
, HCI_OP_SET_CONN_ENCRYPT
, sizeof(cp
),
1929 clear_bit(HCI_CONN_ENCRYPT_PEND
, &conn
->flags
);
1930 hci_encrypt_cfm(conn
, ev
->status
, 0x00);
1935 hci_dev_unlock(hdev
);
1938 static void hci_remote_name_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1940 struct hci_ev_remote_name
*ev
= (void *) skb
->data
;
1941 struct hci_conn
*conn
;
1943 BT_DBG("%s", hdev
->name
);
1945 hci_conn_check_pending(hdev
);
1949 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
1951 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
1954 if (ev
->status
== 0)
1955 hci_check_pending_name(hdev
, conn
, &ev
->bdaddr
, ev
->name
,
1956 strnlen(ev
->name
, HCI_MAX_NAME_LENGTH
));
1958 hci_check_pending_name(hdev
, conn
, &ev
->bdaddr
, NULL
, 0);
1964 if (!hci_outgoing_auth_needed(hdev
, conn
))
1967 if (!test_and_set_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
)) {
1968 struct hci_cp_auth_requested cp
;
1969 cp
.handle
= __cpu_to_le16(conn
->handle
);
1970 hci_send_cmd(hdev
, HCI_OP_AUTH_REQUESTED
, sizeof(cp
), &cp
);
1974 hci_dev_unlock(hdev
);
1977 static void hci_encrypt_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1979 struct hci_ev_encrypt_change
*ev
= (void *) skb
->data
;
1980 struct hci_conn
*conn
;
1982 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
1986 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1990 /* Encryption implies authentication */
1991 conn
->link_mode
|= HCI_LM_AUTH
;
1992 conn
->link_mode
|= HCI_LM_ENCRYPT
;
1993 conn
->sec_level
= conn
->pending_sec_level
;
1995 conn
->link_mode
&= ~HCI_LM_ENCRYPT
;
1998 clear_bit(HCI_CONN_ENCRYPT_PEND
, &conn
->flags
);
2000 if (ev
->status
&& conn
->state
== BT_CONNECTED
) {
2001 hci_disconnect(conn
, HCI_ERROR_AUTH_FAILURE
);
2006 if (conn
->state
== BT_CONFIG
) {
2008 conn
->state
= BT_CONNECTED
;
2010 hci_proto_connect_cfm(conn
, ev
->status
);
2013 hci_encrypt_cfm(conn
, ev
->status
, ev
->encrypt
);
2017 hci_dev_unlock(hdev
);
2020 static void hci_change_link_key_complete_evt(struct hci_dev
*hdev
,
2021 struct sk_buff
*skb
)
2023 struct hci_ev_change_link_key_complete
*ev
= (void *) skb
->data
;
2024 struct hci_conn
*conn
;
2026 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2030 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2033 conn
->link_mode
|= HCI_LM_SECURE
;
2035 clear_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
);
2037 hci_key_change_cfm(conn
, ev
->status
);
2040 hci_dev_unlock(hdev
);
2043 static void hci_remote_features_evt(struct hci_dev
*hdev
,
2044 struct sk_buff
*skb
)
2046 struct hci_ev_remote_features
*ev
= (void *) skb
->data
;
2047 struct hci_conn
*conn
;
2049 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2053 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2058 memcpy(conn
->features
, ev
->features
, 8);
2060 if (conn
->state
!= BT_CONFIG
)
2063 if (!ev
->status
&& lmp_ssp_capable(hdev
) && lmp_ssp_capable(conn
)) {
2064 struct hci_cp_read_remote_ext_features cp
;
2065 cp
.handle
= ev
->handle
;
2067 hci_send_cmd(hdev
, HCI_OP_READ_REMOTE_EXT_FEATURES
,
2072 if (!ev
->status
&& !test_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
)) {
2073 struct hci_cp_remote_name_req cp
;
2074 memset(&cp
, 0, sizeof(cp
));
2075 bacpy(&cp
.bdaddr
, &conn
->dst
);
2076 cp
.pscan_rep_mode
= 0x02;
2077 hci_send_cmd(hdev
, HCI_OP_REMOTE_NAME_REQ
, sizeof(cp
), &cp
);
2078 } else if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
))
2079 mgmt_device_connected(hdev
, &conn
->dst
, conn
->type
,
2080 conn
->dst_type
, 0, NULL
, 0,
2083 if (!hci_outgoing_auth_needed(hdev
, conn
)) {
2084 conn
->state
= BT_CONNECTED
;
2085 hci_proto_connect_cfm(conn
, ev
->status
);
2090 hci_dev_unlock(hdev
);
2093 static void hci_cmd_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2095 struct hci_ev_cmd_complete
*ev
= (void *) skb
->data
;
2096 u8 status
= skb
->data
[sizeof(*ev
)];
2099 skb_pull(skb
, sizeof(*ev
));
2101 opcode
= __le16_to_cpu(ev
->opcode
);
2104 case HCI_OP_INQUIRY_CANCEL
:
2105 hci_cc_inquiry_cancel(hdev
, skb
);
2108 case HCI_OP_PERIODIC_INQ
:
2109 hci_cc_periodic_inq(hdev
, skb
);
2112 case HCI_OP_EXIT_PERIODIC_INQ
:
2113 hci_cc_exit_periodic_inq(hdev
, skb
);
2116 case HCI_OP_REMOTE_NAME_REQ_CANCEL
:
2117 hci_cc_remote_name_req_cancel(hdev
, skb
);
2120 case HCI_OP_ROLE_DISCOVERY
:
2121 hci_cc_role_discovery(hdev
, skb
);
2124 case HCI_OP_READ_LINK_POLICY
:
2125 hci_cc_read_link_policy(hdev
, skb
);
2128 case HCI_OP_WRITE_LINK_POLICY
:
2129 hci_cc_write_link_policy(hdev
, skb
);
2132 case HCI_OP_READ_DEF_LINK_POLICY
:
2133 hci_cc_read_def_link_policy(hdev
, skb
);
2136 case HCI_OP_WRITE_DEF_LINK_POLICY
:
2137 hci_cc_write_def_link_policy(hdev
, skb
);
2141 hci_cc_reset(hdev
, skb
);
2144 case HCI_OP_WRITE_LOCAL_NAME
:
2145 hci_cc_write_local_name(hdev
, skb
);
2148 case HCI_OP_READ_LOCAL_NAME
:
2149 hci_cc_read_local_name(hdev
, skb
);
2152 case HCI_OP_WRITE_AUTH_ENABLE
:
2153 hci_cc_write_auth_enable(hdev
, skb
);
2156 case HCI_OP_WRITE_ENCRYPT_MODE
:
2157 hci_cc_write_encrypt_mode(hdev
, skb
);
2160 case HCI_OP_WRITE_SCAN_ENABLE
:
2161 hci_cc_write_scan_enable(hdev
, skb
);
2164 case HCI_OP_READ_CLASS_OF_DEV
:
2165 hci_cc_read_class_of_dev(hdev
, skb
);
2168 case HCI_OP_WRITE_CLASS_OF_DEV
:
2169 hci_cc_write_class_of_dev(hdev
, skb
);
2172 case HCI_OP_READ_VOICE_SETTING
:
2173 hci_cc_read_voice_setting(hdev
, skb
);
2176 case HCI_OP_WRITE_VOICE_SETTING
:
2177 hci_cc_write_voice_setting(hdev
, skb
);
2180 case HCI_OP_WRITE_SSP_MODE
:
2181 hci_cc_write_ssp_mode(hdev
, skb
);
2184 case HCI_OP_READ_LOCAL_VERSION
:
2185 hci_cc_read_local_version(hdev
, skb
);
2188 case HCI_OP_READ_LOCAL_COMMANDS
:
2189 hci_cc_read_local_commands(hdev
, skb
);
2192 case HCI_OP_READ_LOCAL_FEATURES
:
2193 hci_cc_read_local_features(hdev
, skb
);
2196 case HCI_OP_READ_LOCAL_EXT_FEATURES
:
2197 hci_cc_read_local_ext_features(hdev
, skb
);
2200 case HCI_OP_READ_BUFFER_SIZE
:
2201 hci_cc_read_buffer_size(hdev
, skb
);
2204 case HCI_OP_READ_BD_ADDR
:
2205 hci_cc_read_bd_addr(hdev
, skb
);
2208 case HCI_OP_READ_DATA_BLOCK_SIZE
:
2209 hci_cc_read_data_block_size(hdev
, skb
);
2212 case HCI_OP_READ_FLOW_CONTROL_MODE
:
2213 hci_cc_read_flow_control_mode(hdev
, skb
);
2216 case HCI_OP_READ_LOCAL_AMP_INFO
:
2217 hci_cc_read_local_amp_info(hdev
, skb
);
2220 case HCI_OP_READ_LOCAL_AMP_ASSOC
:
2221 hci_cc_read_local_amp_assoc(hdev
, skb
);
2224 case HCI_OP_READ_INQ_RSP_TX_POWER
:
2225 hci_cc_read_inq_rsp_tx_power(hdev
, skb
);
2228 case HCI_OP_PIN_CODE_REPLY
:
2229 hci_cc_pin_code_reply(hdev
, skb
);
2232 case HCI_OP_PIN_CODE_NEG_REPLY
:
2233 hci_cc_pin_code_neg_reply(hdev
, skb
);
2236 case HCI_OP_READ_LOCAL_OOB_DATA
:
2237 hci_cc_read_local_oob_data_reply(hdev
, skb
);
2240 case HCI_OP_LE_READ_BUFFER_SIZE
:
2241 hci_cc_le_read_buffer_size(hdev
, skb
);
2244 case HCI_OP_LE_READ_LOCAL_FEATURES
:
2245 hci_cc_le_read_local_features(hdev
, skb
);
2248 case HCI_OP_LE_READ_ADV_TX_POWER
:
2249 hci_cc_le_read_adv_tx_power(hdev
, skb
);
2252 case HCI_OP_USER_CONFIRM_REPLY
:
2253 hci_cc_user_confirm_reply(hdev
, skb
);
2256 case HCI_OP_USER_CONFIRM_NEG_REPLY
:
2257 hci_cc_user_confirm_neg_reply(hdev
, skb
);
2260 case HCI_OP_USER_PASSKEY_REPLY
:
2261 hci_cc_user_passkey_reply(hdev
, skb
);
2264 case HCI_OP_USER_PASSKEY_NEG_REPLY
:
2265 hci_cc_user_passkey_neg_reply(hdev
, skb
);
2268 case HCI_OP_LE_SET_SCAN_PARAM
:
2269 hci_cc_le_set_scan_param(hdev
, skb
);
2272 case HCI_OP_LE_SET_ADV_ENABLE
:
2273 hci_cc_le_set_adv_enable(hdev
, skb
);
2276 case HCI_OP_LE_SET_SCAN_ENABLE
:
2277 hci_cc_le_set_scan_enable(hdev
, skb
);
2280 case HCI_OP_LE_READ_WHITE_LIST_SIZE
:
2281 hci_cc_le_read_white_list_size(hdev
, skb
);
2284 case HCI_OP_LE_READ_SUPPORTED_STATES
:
2285 hci_cc_le_read_supported_states(hdev
, skb
);
2288 case HCI_OP_WRITE_LE_HOST_SUPPORTED
:
2289 hci_cc_write_le_host_supported(hdev
, skb
);
2292 case HCI_OP_WRITE_REMOTE_AMP_ASSOC
:
2293 hci_cc_write_remote_amp_assoc(hdev
, skb
);
2297 BT_DBG("%s opcode 0x%4.4x", hdev
->name
, opcode
);
2301 if (opcode
!= HCI_OP_NOP
)
2302 del_timer(&hdev
->cmd_timer
);
2304 hci_req_cmd_complete(hdev
, opcode
, status
);
2306 if (ev
->ncmd
&& !test_bit(HCI_RESET
, &hdev
->flags
)) {
2307 atomic_set(&hdev
->cmd_cnt
, 1);
2308 if (!skb_queue_empty(&hdev
->cmd_q
))
2309 queue_work(hdev
->workqueue
, &hdev
->cmd_work
);
2313 static void hci_cmd_status_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2315 struct hci_ev_cmd_status
*ev
= (void *) skb
->data
;
2318 skb_pull(skb
, sizeof(*ev
));
2320 opcode
= __le16_to_cpu(ev
->opcode
);
2323 case HCI_OP_INQUIRY
:
2324 hci_cs_inquiry(hdev
, ev
->status
);
2327 case HCI_OP_CREATE_CONN
:
2328 hci_cs_create_conn(hdev
, ev
->status
);
2331 case HCI_OP_ADD_SCO
:
2332 hci_cs_add_sco(hdev
, ev
->status
);
2335 case HCI_OP_AUTH_REQUESTED
:
2336 hci_cs_auth_requested(hdev
, ev
->status
);
2339 case HCI_OP_SET_CONN_ENCRYPT
:
2340 hci_cs_set_conn_encrypt(hdev
, ev
->status
);
2343 case HCI_OP_REMOTE_NAME_REQ
:
2344 hci_cs_remote_name_req(hdev
, ev
->status
);
2347 case HCI_OP_READ_REMOTE_FEATURES
:
2348 hci_cs_read_remote_features(hdev
, ev
->status
);
2351 case HCI_OP_READ_REMOTE_EXT_FEATURES
:
2352 hci_cs_read_remote_ext_features(hdev
, ev
->status
);
2355 case HCI_OP_SETUP_SYNC_CONN
:
2356 hci_cs_setup_sync_conn(hdev
, ev
->status
);
2359 case HCI_OP_SNIFF_MODE
:
2360 hci_cs_sniff_mode(hdev
, ev
->status
);
2363 case HCI_OP_EXIT_SNIFF_MODE
:
2364 hci_cs_exit_sniff_mode(hdev
, ev
->status
);
2367 case HCI_OP_DISCONNECT
:
2368 hci_cs_disconnect(hdev
, ev
->status
);
2371 case HCI_OP_LE_CREATE_CONN
:
2372 hci_cs_le_create_conn(hdev
, ev
->status
);
2375 case HCI_OP_CREATE_PHY_LINK
:
2376 hci_cs_create_phylink(hdev
, ev
->status
);
2379 case HCI_OP_ACCEPT_PHY_LINK
:
2380 hci_cs_accept_phylink(hdev
, ev
->status
);
2384 BT_DBG("%s opcode 0x%4.4x", hdev
->name
, opcode
);
2388 if (opcode
!= HCI_OP_NOP
)
2389 del_timer(&hdev
->cmd_timer
);
2391 hci_req_cmd_status(hdev
, opcode
, ev
->status
);
2393 if (ev
->ncmd
&& !test_bit(HCI_RESET
, &hdev
->flags
)) {
2394 atomic_set(&hdev
->cmd_cnt
, 1);
2395 if (!skb_queue_empty(&hdev
->cmd_q
))
2396 queue_work(hdev
->workqueue
, &hdev
->cmd_work
);
2400 static void hci_role_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2402 struct hci_ev_role_change
*ev
= (void *) skb
->data
;
2403 struct hci_conn
*conn
;
2405 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2409 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
2413 conn
->link_mode
&= ~HCI_LM_MASTER
;
2415 conn
->link_mode
|= HCI_LM_MASTER
;
2418 clear_bit(HCI_CONN_RSWITCH_PEND
, &conn
->flags
);
2420 hci_role_switch_cfm(conn
, ev
->status
, ev
->role
);
2423 hci_dev_unlock(hdev
);
2426 static void hci_num_comp_pkts_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2428 struct hci_ev_num_comp_pkts
*ev
= (void *) skb
->data
;
2431 if (hdev
->flow_ctl_mode
!= HCI_FLOW_CTL_MODE_PACKET_BASED
) {
2432 BT_ERR("Wrong event for mode %d", hdev
->flow_ctl_mode
);
2436 if (skb
->len
< sizeof(*ev
) || skb
->len
< sizeof(*ev
) +
2437 ev
->num_hndl
* sizeof(struct hci_comp_pkts_info
)) {
2438 BT_DBG("%s bad parameters", hdev
->name
);
2442 BT_DBG("%s num_hndl %d", hdev
->name
, ev
->num_hndl
);
2444 for (i
= 0; i
< ev
->num_hndl
; i
++) {
2445 struct hci_comp_pkts_info
*info
= &ev
->handles
[i
];
2446 struct hci_conn
*conn
;
2447 __u16 handle
, count
;
2449 handle
= __le16_to_cpu(info
->handle
);
2450 count
= __le16_to_cpu(info
->count
);
2452 conn
= hci_conn_hash_lookup_handle(hdev
, handle
);
2456 conn
->sent
-= count
;
2458 switch (conn
->type
) {
2460 hdev
->acl_cnt
+= count
;
2461 if (hdev
->acl_cnt
> hdev
->acl_pkts
)
2462 hdev
->acl_cnt
= hdev
->acl_pkts
;
2466 if (hdev
->le_pkts
) {
2467 hdev
->le_cnt
+= count
;
2468 if (hdev
->le_cnt
> hdev
->le_pkts
)
2469 hdev
->le_cnt
= hdev
->le_pkts
;
2471 hdev
->acl_cnt
+= count
;
2472 if (hdev
->acl_cnt
> hdev
->acl_pkts
)
2473 hdev
->acl_cnt
= hdev
->acl_pkts
;
2478 hdev
->sco_cnt
+= count
;
2479 if (hdev
->sco_cnt
> hdev
->sco_pkts
)
2480 hdev
->sco_cnt
= hdev
->sco_pkts
;
2484 BT_ERR("Unknown type %d conn %p", conn
->type
, conn
);
2489 queue_work(hdev
->workqueue
, &hdev
->tx_work
);
2492 static struct hci_conn
*__hci_conn_lookup_handle(struct hci_dev
*hdev
,
2495 struct hci_chan
*chan
;
2497 switch (hdev
->dev_type
) {
2499 return hci_conn_hash_lookup_handle(hdev
, handle
);
2501 chan
= hci_chan_lookup_handle(hdev
, handle
);
2506 BT_ERR("%s unknown dev_type %d", hdev
->name
, hdev
->dev_type
);
2513 static void hci_num_comp_blocks_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2515 struct hci_ev_num_comp_blocks
*ev
= (void *) skb
->data
;
2518 if (hdev
->flow_ctl_mode
!= HCI_FLOW_CTL_MODE_BLOCK_BASED
) {
2519 BT_ERR("Wrong event for mode %d", hdev
->flow_ctl_mode
);
2523 if (skb
->len
< sizeof(*ev
) || skb
->len
< sizeof(*ev
) +
2524 ev
->num_hndl
* sizeof(struct hci_comp_blocks_info
)) {
2525 BT_DBG("%s bad parameters", hdev
->name
);
2529 BT_DBG("%s num_blocks %d num_hndl %d", hdev
->name
, ev
->num_blocks
,
2532 for (i
= 0; i
< ev
->num_hndl
; i
++) {
2533 struct hci_comp_blocks_info
*info
= &ev
->handles
[i
];
2534 struct hci_conn
*conn
= NULL
;
2535 __u16 handle
, block_count
;
2537 handle
= __le16_to_cpu(info
->handle
);
2538 block_count
= __le16_to_cpu(info
->blocks
);
2540 conn
= __hci_conn_lookup_handle(hdev
, handle
);
2544 conn
->sent
-= block_count
;
2546 switch (conn
->type
) {
2549 hdev
->block_cnt
+= block_count
;
2550 if (hdev
->block_cnt
> hdev
->num_blocks
)
2551 hdev
->block_cnt
= hdev
->num_blocks
;
2555 BT_ERR("Unknown type %d conn %p", conn
->type
, conn
);
2560 queue_work(hdev
->workqueue
, &hdev
->tx_work
);
2563 static void hci_mode_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2565 struct hci_ev_mode_change
*ev
= (void *) skb
->data
;
2566 struct hci_conn
*conn
;
2568 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2572 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2574 conn
->mode
= ev
->mode
;
2575 conn
->interval
= __le16_to_cpu(ev
->interval
);
2577 if (!test_and_clear_bit(HCI_CONN_MODE_CHANGE_PEND
,
2579 if (conn
->mode
== HCI_CM_ACTIVE
)
2580 set_bit(HCI_CONN_POWER_SAVE
, &conn
->flags
);
2582 clear_bit(HCI_CONN_POWER_SAVE
, &conn
->flags
);
2585 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND
, &conn
->flags
))
2586 hci_sco_setup(conn
, ev
->status
);
2589 hci_dev_unlock(hdev
);
2592 static void hci_pin_code_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2594 struct hci_ev_pin_code_req
*ev
= (void *) skb
->data
;
2595 struct hci_conn
*conn
;
2597 BT_DBG("%s", hdev
->name
);
2601 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
2605 if (conn
->state
== BT_CONNECTED
) {
2606 hci_conn_hold(conn
);
2607 conn
->disc_timeout
= HCI_PAIRING_TIMEOUT
;
2611 if (!test_bit(HCI_PAIRABLE
, &hdev
->dev_flags
))
2612 hci_send_cmd(hdev
, HCI_OP_PIN_CODE_NEG_REPLY
,
2613 sizeof(ev
->bdaddr
), &ev
->bdaddr
);
2614 else if (test_bit(HCI_MGMT
, &hdev
->dev_flags
)) {
2617 if (conn
->pending_sec_level
== BT_SECURITY_HIGH
)
2622 mgmt_pin_code_request(hdev
, &ev
->bdaddr
, secure
);
2626 hci_dev_unlock(hdev
);
2629 static void hci_link_key_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2631 struct hci_ev_link_key_req
*ev
= (void *) skb
->data
;
2632 struct hci_cp_link_key_reply cp
;
2633 struct hci_conn
*conn
;
2634 struct link_key
*key
;
2636 BT_DBG("%s", hdev
->name
);
2638 if (!test_bit(HCI_LINK_KEYS
, &hdev
->dev_flags
))
2643 key
= hci_find_link_key(hdev
, &ev
->bdaddr
);
2645 BT_DBG("%s link key not found for %pMR", hdev
->name
,
2650 BT_DBG("%s found key type %u for %pMR", hdev
->name
, key
->type
,
2653 if (!test_bit(HCI_DEBUG_KEYS
, &hdev
->dev_flags
) &&
2654 key
->type
== HCI_LK_DEBUG_COMBINATION
) {
2655 BT_DBG("%s ignoring debug key", hdev
->name
);
2659 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
2661 if (key
->type
== HCI_LK_UNAUTH_COMBINATION
&&
2662 conn
->auth_type
!= 0xff && (conn
->auth_type
& 0x01)) {
2663 BT_DBG("%s ignoring unauthenticated key", hdev
->name
);
2667 if (key
->type
== HCI_LK_COMBINATION
&& key
->pin_len
< 16 &&
2668 conn
->pending_sec_level
== BT_SECURITY_HIGH
) {
2669 BT_DBG("%s ignoring key unauthenticated for high security",
2674 conn
->key_type
= key
->type
;
2675 conn
->pin_length
= key
->pin_len
;
2678 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
2679 memcpy(cp
.link_key
, key
->val
, HCI_LINK_KEY_SIZE
);
2681 hci_send_cmd(hdev
, HCI_OP_LINK_KEY_REPLY
, sizeof(cp
), &cp
);
2683 hci_dev_unlock(hdev
);
2688 hci_send_cmd(hdev
, HCI_OP_LINK_KEY_NEG_REPLY
, 6, &ev
->bdaddr
);
2689 hci_dev_unlock(hdev
);
2692 static void hci_link_key_notify_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2694 struct hci_ev_link_key_notify
*ev
= (void *) skb
->data
;
2695 struct hci_conn
*conn
;
2698 BT_DBG("%s", hdev
->name
);
2702 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
2704 hci_conn_hold(conn
);
2705 conn
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
2706 pin_len
= conn
->pin_length
;
2708 if (ev
->key_type
!= HCI_LK_CHANGED_COMBINATION
)
2709 conn
->key_type
= ev
->key_type
;
2714 if (test_bit(HCI_LINK_KEYS
, &hdev
->dev_flags
))
2715 hci_add_link_key(hdev
, conn
, 1, &ev
->bdaddr
, ev
->link_key
,
2716 ev
->key_type
, pin_len
);
2718 hci_dev_unlock(hdev
);
2721 static void hci_clock_offset_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2723 struct hci_ev_clock_offset
*ev
= (void *) skb
->data
;
2724 struct hci_conn
*conn
;
2726 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2730 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2731 if (conn
&& !ev
->status
) {
2732 struct inquiry_entry
*ie
;
2734 ie
= hci_inquiry_cache_lookup(hdev
, &conn
->dst
);
2736 ie
->data
.clock_offset
= ev
->clock_offset
;
2737 ie
->timestamp
= jiffies
;
2741 hci_dev_unlock(hdev
);
2744 static void hci_pkt_type_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2746 struct hci_ev_pkt_type_change
*ev
= (void *) skb
->data
;
2747 struct hci_conn
*conn
;
2749 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2753 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2754 if (conn
&& !ev
->status
)
2755 conn
->pkt_type
= __le16_to_cpu(ev
->pkt_type
);
2757 hci_dev_unlock(hdev
);
2760 static void hci_pscan_rep_mode_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2762 struct hci_ev_pscan_rep_mode
*ev
= (void *) skb
->data
;
2763 struct inquiry_entry
*ie
;
2765 BT_DBG("%s", hdev
->name
);
2769 ie
= hci_inquiry_cache_lookup(hdev
, &ev
->bdaddr
);
2771 ie
->data
.pscan_rep_mode
= ev
->pscan_rep_mode
;
2772 ie
->timestamp
= jiffies
;
2775 hci_dev_unlock(hdev
);
2778 static void hci_inquiry_result_with_rssi_evt(struct hci_dev
*hdev
,
2779 struct sk_buff
*skb
)
2781 struct inquiry_data data
;
2782 int num_rsp
= *((__u8
*) skb
->data
);
2783 bool name_known
, ssp
;
2785 BT_DBG("%s num_rsp %d", hdev
->name
, num_rsp
);
2790 if (test_bit(HCI_PERIODIC_INQ
, &hdev
->dev_flags
))
2795 if ((skb
->len
- 1) / num_rsp
!= sizeof(struct inquiry_info_with_rssi
)) {
2796 struct inquiry_info_with_rssi_and_pscan_mode
*info
;
2797 info
= (void *) (skb
->data
+ 1);
2799 for (; num_rsp
; num_rsp
--, info
++) {
2800 bacpy(&data
.bdaddr
, &info
->bdaddr
);
2801 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
2802 data
.pscan_period_mode
= info
->pscan_period_mode
;
2803 data
.pscan_mode
= info
->pscan_mode
;
2804 memcpy(data
.dev_class
, info
->dev_class
, 3);
2805 data
.clock_offset
= info
->clock_offset
;
2806 data
.rssi
= info
->rssi
;
2807 data
.ssp_mode
= 0x00;
2809 name_known
= hci_inquiry_cache_update(hdev
, &data
,
2811 mgmt_device_found(hdev
, &info
->bdaddr
, ACL_LINK
, 0x00,
2812 info
->dev_class
, info
->rssi
,
2813 !name_known
, ssp
, NULL
, 0);
2816 struct inquiry_info_with_rssi
*info
= (void *) (skb
->data
+ 1);
2818 for (; num_rsp
; num_rsp
--, info
++) {
2819 bacpy(&data
.bdaddr
, &info
->bdaddr
);
2820 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
2821 data
.pscan_period_mode
= info
->pscan_period_mode
;
2822 data
.pscan_mode
= 0x00;
2823 memcpy(data
.dev_class
, info
->dev_class
, 3);
2824 data
.clock_offset
= info
->clock_offset
;
2825 data
.rssi
= info
->rssi
;
2826 data
.ssp_mode
= 0x00;
2827 name_known
= hci_inquiry_cache_update(hdev
, &data
,
2829 mgmt_device_found(hdev
, &info
->bdaddr
, ACL_LINK
, 0x00,
2830 info
->dev_class
, info
->rssi
,
2831 !name_known
, ssp
, NULL
, 0);
2835 hci_dev_unlock(hdev
);
2838 static void hci_remote_ext_features_evt(struct hci_dev
*hdev
,
2839 struct sk_buff
*skb
)
2841 struct hci_ev_remote_ext_features
*ev
= (void *) skb
->data
;
2842 struct hci_conn
*conn
;
2844 BT_DBG("%s", hdev
->name
);
2848 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2852 if (!ev
->status
&& ev
->page
== 0x01) {
2853 struct inquiry_entry
*ie
;
2855 ie
= hci_inquiry_cache_lookup(hdev
, &conn
->dst
);
2857 ie
->data
.ssp_mode
= (ev
->features
[0] & LMP_HOST_SSP
);
2859 if (ev
->features
[0] & LMP_HOST_SSP
)
2860 set_bit(HCI_CONN_SSP_ENABLED
, &conn
->flags
);
2863 if (conn
->state
!= BT_CONFIG
)
2866 if (!ev
->status
&& !test_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
)) {
2867 struct hci_cp_remote_name_req cp
;
2868 memset(&cp
, 0, sizeof(cp
));
2869 bacpy(&cp
.bdaddr
, &conn
->dst
);
2870 cp
.pscan_rep_mode
= 0x02;
2871 hci_send_cmd(hdev
, HCI_OP_REMOTE_NAME_REQ
, sizeof(cp
), &cp
);
2872 } else if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
))
2873 mgmt_device_connected(hdev
, &conn
->dst
, conn
->type
,
2874 conn
->dst_type
, 0, NULL
, 0,
2877 if (!hci_outgoing_auth_needed(hdev
, conn
)) {
2878 conn
->state
= BT_CONNECTED
;
2879 hci_proto_connect_cfm(conn
, ev
->status
);
2884 hci_dev_unlock(hdev
);
2887 static void hci_sync_conn_complete_evt(struct hci_dev
*hdev
,
2888 struct sk_buff
*skb
)
2890 struct hci_ev_sync_conn_complete
*ev
= (void *) skb
->data
;
2891 struct hci_conn
*conn
;
2893 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2897 conn
= hci_conn_hash_lookup_ba(hdev
, ev
->link_type
, &ev
->bdaddr
);
2899 if (ev
->link_type
== ESCO_LINK
)
2902 conn
= hci_conn_hash_lookup_ba(hdev
, ESCO_LINK
, &ev
->bdaddr
);
2906 conn
->type
= SCO_LINK
;
2909 switch (ev
->status
) {
2911 conn
->handle
= __le16_to_cpu(ev
->handle
);
2912 conn
->state
= BT_CONNECTED
;
2914 hci_conn_hold_device(conn
);
2915 hci_conn_add_sysfs(conn
);
2918 case 0x11: /* Unsupported Feature or Parameter Value */
2919 case 0x1c: /* SCO interval rejected */
2920 case 0x1a: /* Unsupported Remote Feature */
2921 case 0x1f: /* Unspecified error */
2922 if (conn
->out
&& conn
->attempt
< 2) {
2923 conn
->pkt_type
= (hdev
->esco_type
& SCO_ESCO_MASK
) |
2924 (hdev
->esco_type
& EDR_ESCO_MASK
);
2925 hci_setup_sync(conn
, conn
->link
->handle
);
2931 conn
->state
= BT_CLOSED
;
2935 hci_proto_connect_cfm(conn
, ev
->status
);
2940 hci_dev_unlock(hdev
);
2943 static void hci_extended_inquiry_result_evt(struct hci_dev
*hdev
,
2944 struct sk_buff
*skb
)
2946 struct inquiry_data data
;
2947 struct extended_inquiry_info
*info
= (void *) (skb
->data
+ 1);
2948 int num_rsp
= *((__u8
*) skb
->data
);
2951 BT_DBG("%s num_rsp %d", hdev
->name
, num_rsp
);
2956 if (test_bit(HCI_PERIODIC_INQ
, &hdev
->dev_flags
))
2961 for (; num_rsp
; num_rsp
--, info
++) {
2962 bool name_known
, ssp
;
2964 bacpy(&data
.bdaddr
, &info
->bdaddr
);
2965 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
2966 data
.pscan_period_mode
= info
->pscan_period_mode
;
2967 data
.pscan_mode
= 0x00;
2968 memcpy(data
.dev_class
, info
->dev_class
, 3);
2969 data
.clock_offset
= info
->clock_offset
;
2970 data
.rssi
= info
->rssi
;
2971 data
.ssp_mode
= 0x01;
2973 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
2974 name_known
= eir_has_data_type(info
->data
,
2980 name_known
= hci_inquiry_cache_update(hdev
, &data
, name_known
,
2982 eir_len
= eir_get_length(info
->data
, sizeof(info
->data
));
2983 mgmt_device_found(hdev
, &info
->bdaddr
, ACL_LINK
, 0x00,
2984 info
->dev_class
, info
->rssi
, !name_known
,
2985 ssp
, info
->data
, eir_len
);
2988 hci_dev_unlock(hdev
);
2991 static void hci_key_refresh_complete_evt(struct hci_dev
*hdev
,
2992 struct sk_buff
*skb
)
2994 struct hci_ev_key_refresh_complete
*ev
= (void *) skb
->data
;
2995 struct hci_conn
*conn
;
2997 BT_DBG("%s status 0x%2.2x handle 0x%4.4x", hdev
->name
, ev
->status
,
2998 __le16_to_cpu(ev
->handle
));
3002 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
3007 conn
->sec_level
= conn
->pending_sec_level
;
3009 clear_bit(HCI_CONN_ENCRYPT_PEND
, &conn
->flags
);
3011 if (ev
->status
&& conn
->state
== BT_CONNECTED
) {
3012 hci_disconnect(conn
, HCI_ERROR_AUTH_FAILURE
);
3017 if (conn
->state
== BT_CONFIG
) {
3019 conn
->state
= BT_CONNECTED
;
3021 hci_proto_connect_cfm(conn
, ev
->status
);
3024 hci_auth_cfm(conn
, ev
->status
);
3026 hci_conn_hold(conn
);
3027 conn
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
3032 hci_dev_unlock(hdev
);
3035 static u8
hci_get_auth_req(struct hci_conn
*conn
)
3037 /* If remote requests dedicated bonding follow that lead */
3038 if (conn
->remote_auth
== 0x02 || conn
->remote_auth
== 0x03) {
3039 /* If both remote and local IO capabilities allow MITM
3040 * protection then require it, otherwise don't */
3041 if (conn
->remote_cap
== 0x03 || conn
->io_capability
== 0x03)
3047 /* If remote requests no-bonding follow that lead */
3048 if (conn
->remote_auth
== 0x00 || conn
->remote_auth
== 0x01)
3049 return conn
->remote_auth
| (conn
->auth_type
& 0x01);
3051 return conn
->auth_type
;
3054 static void hci_io_capa_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3056 struct hci_ev_io_capa_request
*ev
= (void *) skb
->data
;
3057 struct hci_conn
*conn
;
3059 BT_DBG("%s", hdev
->name
);
3063 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3067 hci_conn_hold(conn
);
3069 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3072 if (test_bit(HCI_PAIRABLE
, &hdev
->dev_flags
) ||
3073 (conn
->remote_auth
& ~0x01) == HCI_AT_NO_BONDING
) {
3074 struct hci_cp_io_capability_reply cp
;
3076 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
3077 /* Change the IO capability from KeyboardDisplay
3078 * to DisplayYesNo as it is not supported by BT spec. */
3079 cp
.capability
= (conn
->io_capability
== 0x04) ?
3080 0x01 : conn
->io_capability
;
3081 conn
->auth_type
= hci_get_auth_req(conn
);
3082 cp
.authentication
= conn
->auth_type
;
3084 if (hci_find_remote_oob_data(hdev
, &conn
->dst
) &&
3085 (conn
->out
|| test_bit(HCI_CONN_REMOTE_OOB
, &conn
->flags
)))
3090 hci_send_cmd(hdev
, HCI_OP_IO_CAPABILITY_REPLY
,
3093 struct hci_cp_io_capability_neg_reply cp
;
3095 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
3096 cp
.reason
= HCI_ERROR_PAIRING_NOT_ALLOWED
;
3098 hci_send_cmd(hdev
, HCI_OP_IO_CAPABILITY_NEG_REPLY
,
3103 hci_dev_unlock(hdev
);
3106 static void hci_io_capa_reply_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3108 struct hci_ev_io_capa_reply
*ev
= (void *) skb
->data
;
3109 struct hci_conn
*conn
;
3111 BT_DBG("%s", hdev
->name
);
3115 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3119 conn
->remote_cap
= ev
->capability
;
3120 conn
->remote_auth
= ev
->authentication
;
3122 set_bit(HCI_CONN_REMOTE_OOB
, &conn
->flags
);
3125 hci_dev_unlock(hdev
);
3128 static void hci_user_confirm_request_evt(struct hci_dev
*hdev
,
3129 struct sk_buff
*skb
)
3131 struct hci_ev_user_confirm_req
*ev
= (void *) skb
->data
;
3132 int loc_mitm
, rem_mitm
, confirm_hint
= 0;
3133 struct hci_conn
*conn
;
3135 BT_DBG("%s", hdev
->name
);
3139 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3142 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3146 loc_mitm
= (conn
->auth_type
& 0x01);
3147 rem_mitm
= (conn
->remote_auth
& 0x01);
3149 /* If we require MITM but the remote device can't provide that
3150 * (it has NoInputNoOutput) then reject the confirmation
3151 * request. The only exception is when we're dedicated bonding
3152 * initiators (connect_cfm_cb set) since then we always have the MITM
3154 if (!conn
->connect_cfm_cb
&& loc_mitm
&& conn
->remote_cap
== 0x03) {
3155 BT_DBG("Rejecting request: remote device can't provide MITM");
3156 hci_send_cmd(hdev
, HCI_OP_USER_CONFIRM_NEG_REPLY
,
3157 sizeof(ev
->bdaddr
), &ev
->bdaddr
);
3161 /* If no side requires MITM protection; auto-accept */
3162 if ((!loc_mitm
|| conn
->remote_cap
== 0x03) &&
3163 (!rem_mitm
|| conn
->io_capability
== 0x03)) {
3165 /* If we're not the initiators request authorization to
3166 * proceed from user space (mgmt_user_confirm with
3167 * confirm_hint set to 1). */
3168 if (!test_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
)) {
3169 BT_DBG("Confirming auto-accept as acceptor");
3174 BT_DBG("Auto-accept of user confirmation with %ums delay",
3175 hdev
->auto_accept_delay
);
3177 if (hdev
->auto_accept_delay
> 0) {
3178 int delay
= msecs_to_jiffies(hdev
->auto_accept_delay
);
3179 mod_timer(&conn
->auto_accept_timer
, jiffies
+ delay
);
3183 hci_send_cmd(hdev
, HCI_OP_USER_CONFIRM_REPLY
,
3184 sizeof(ev
->bdaddr
), &ev
->bdaddr
);
3189 mgmt_user_confirm_request(hdev
, &ev
->bdaddr
, ACL_LINK
, 0, ev
->passkey
,
3193 hci_dev_unlock(hdev
);
3196 static void hci_user_passkey_request_evt(struct hci_dev
*hdev
,
3197 struct sk_buff
*skb
)
3199 struct hci_ev_user_passkey_req
*ev
= (void *) skb
->data
;
3201 BT_DBG("%s", hdev
->name
);
3203 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3204 mgmt_user_passkey_request(hdev
, &ev
->bdaddr
, ACL_LINK
, 0);
3207 static void hci_user_passkey_notify_evt(struct hci_dev
*hdev
,
3208 struct sk_buff
*skb
)
3210 struct hci_ev_user_passkey_notify
*ev
= (void *) skb
->data
;
3211 struct hci_conn
*conn
;
3213 BT_DBG("%s", hdev
->name
);
3215 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3219 conn
->passkey_notify
= __le32_to_cpu(ev
->passkey
);
3220 conn
->passkey_entered
= 0;
3222 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3223 mgmt_user_passkey_notify(hdev
, &conn
->dst
, conn
->type
,
3224 conn
->dst_type
, conn
->passkey_notify
,
3225 conn
->passkey_entered
);
3228 static void hci_keypress_notify_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3230 struct hci_ev_keypress_notify
*ev
= (void *) skb
->data
;
3231 struct hci_conn
*conn
;
3233 BT_DBG("%s", hdev
->name
);
3235 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3240 case HCI_KEYPRESS_STARTED
:
3241 conn
->passkey_entered
= 0;
3244 case HCI_KEYPRESS_ENTERED
:
3245 conn
->passkey_entered
++;
3248 case HCI_KEYPRESS_ERASED
:
3249 conn
->passkey_entered
--;
3252 case HCI_KEYPRESS_CLEARED
:
3253 conn
->passkey_entered
= 0;
3256 case HCI_KEYPRESS_COMPLETED
:
3260 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3261 mgmt_user_passkey_notify(hdev
, &conn
->dst
, conn
->type
,
3262 conn
->dst_type
, conn
->passkey_notify
,
3263 conn
->passkey_entered
);
3266 static void hci_simple_pair_complete_evt(struct hci_dev
*hdev
,
3267 struct sk_buff
*skb
)
3269 struct hci_ev_simple_pair_complete
*ev
= (void *) skb
->data
;
3270 struct hci_conn
*conn
;
3272 BT_DBG("%s", hdev
->name
);
3276 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3280 /* To avoid duplicate auth_failed events to user space we check
3281 * the HCI_CONN_AUTH_PEND flag which will be set if we
3282 * initiated the authentication. A traditional auth_complete
3283 * event gets always produced as initiator and is also mapped to
3284 * the mgmt_auth_failed event */
3285 if (!test_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
) && ev
->status
)
3286 mgmt_auth_failed(hdev
, &conn
->dst
, conn
->type
, conn
->dst_type
,
3292 hci_dev_unlock(hdev
);
3295 static void hci_remote_host_features_evt(struct hci_dev
*hdev
,
3296 struct sk_buff
*skb
)
3298 struct hci_ev_remote_host_features
*ev
= (void *) skb
->data
;
3299 struct inquiry_entry
*ie
;
3301 BT_DBG("%s", hdev
->name
);
3305 ie
= hci_inquiry_cache_lookup(hdev
, &ev
->bdaddr
);
3307 ie
->data
.ssp_mode
= (ev
->features
[0] & LMP_HOST_SSP
);
3309 hci_dev_unlock(hdev
);
3312 static void hci_remote_oob_data_request_evt(struct hci_dev
*hdev
,
3313 struct sk_buff
*skb
)
3315 struct hci_ev_remote_oob_data_request
*ev
= (void *) skb
->data
;
3316 struct oob_data
*data
;
3318 BT_DBG("%s", hdev
->name
);
3322 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3325 data
= hci_find_remote_oob_data(hdev
, &ev
->bdaddr
);
3327 struct hci_cp_remote_oob_data_reply cp
;
3329 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
3330 memcpy(cp
.hash
, data
->hash
, sizeof(cp
.hash
));
3331 memcpy(cp
.randomizer
, data
->randomizer
, sizeof(cp
.randomizer
));
3333 hci_send_cmd(hdev
, HCI_OP_REMOTE_OOB_DATA_REPLY
, sizeof(cp
),
3336 struct hci_cp_remote_oob_data_neg_reply cp
;
3338 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
3339 hci_send_cmd(hdev
, HCI_OP_REMOTE_OOB_DATA_NEG_REPLY
, sizeof(cp
),
3344 hci_dev_unlock(hdev
);
3347 static void hci_phy_link_complete_evt(struct hci_dev
*hdev
,
3348 struct sk_buff
*skb
)
3350 struct hci_ev_phy_link_complete
*ev
= (void *) skb
->data
;
3351 struct hci_conn
*hcon
, *bredr_hcon
;
3353 BT_DBG("%s handle 0x%2.2x status 0x%2.2x", hdev
->name
, ev
->phy_handle
,
3358 hcon
= hci_conn_hash_lookup_handle(hdev
, ev
->phy_handle
);
3360 hci_dev_unlock(hdev
);
3366 hci_dev_unlock(hdev
);
3370 bredr_hcon
= hcon
->amp_mgr
->l2cap_conn
->hcon
;
3372 hcon
->state
= BT_CONNECTED
;
3373 bacpy(&hcon
->dst
, &bredr_hcon
->dst
);
3375 hci_conn_hold(hcon
);
3376 hcon
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
3379 hci_conn_hold_device(hcon
);
3380 hci_conn_add_sysfs(hcon
);
3382 amp_physical_cfm(bredr_hcon
, hcon
);
3384 hci_dev_unlock(hdev
);
3387 static void hci_loglink_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3389 struct hci_ev_logical_link_complete
*ev
= (void *) skb
->data
;
3390 struct hci_conn
*hcon
;
3391 struct hci_chan
*hchan
;
3392 struct amp_mgr
*mgr
;
3394 BT_DBG("%s log_handle 0x%4.4x phy_handle 0x%2.2x status 0x%2.2x",
3395 hdev
->name
, le16_to_cpu(ev
->handle
), ev
->phy_handle
,
3398 hcon
= hci_conn_hash_lookup_handle(hdev
, ev
->phy_handle
);
3402 /* Create AMP hchan */
3403 hchan
= hci_chan_create(hcon
);
3407 hchan
->handle
= le16_to_cpu(ev
->handle
);
3409 BT_DBG("hcon %p mgr %p hchan %p", hcon
, hcon
->amp_mgr
, hchan
);
3411 mgr
= hcon
->amp_mgr
;
3412 if (mgr
&& mgr
->bredr_chan
) {
3413 struct l2cap_chan
*bredr_chan
= mgr
->bredr_chan
;
3415 l2cap_chan_lock(bredr_chan
);
3417 bredr_chan
->conn
->mtu
= hdev
->block_mtu
;
3418 l2cap_logical_cfm(bredr_chan
, hchan
, 0);
3419 hci_conn_hold(hcon
);
3421 l2cap_chan_unlock(bredr_chan
);
3425 static void hci_disconn_loglink_complete_evt(struct hci_dev
*hdev
,
3426 struct sk_buff
*skb
)
3428 struct hci_ev_disconn_logical_link_complete
*ev
= (void *) skb
->data
;
3429 struct hci_chan
*hchan
;
3431 BT_DBG("%s log handle 0x%4.4x status 0x%2.2x", hdev
->name
,
3432 le16_to_cpu(ev
->handle
), ev
->status
);
3439 hchan
= hci_chan_lookup_handle(hdev
, le16_to_cpu(ev
->handle
));
3443 amp_destroy_logical_link(hchan
, ev
->reason
);
3446 hci_dev_unlock(hdev
);
3449 static void hci_disconn_phylink_complete_evt(struct hci_dev
*hdev
,
3450 struct sk_buff
*skb
)
3452 struct hci_ev_disconn_phy_link_complete
*ev
= (void *) skb
->data
;
3453 struct hci_conn
*hcon
;
3455 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
3462 hcon
= hci_conn_hash_lookup_handle(hdev
, ev
->phy_handle
);
3464 hcon
->state
= BT_CLOSED
;
3468 hci_dev_unlock(hdev
);
3471 static void hci_le_conn_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3473 struct hci_ev_le_conn_complete
*ev
= (void *) skb
->data
;
3474 struct hci_conn
*conn
;
3476 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
3480 conn
= hci_conn_hash_lookup_state(hdev
, LE_LINK
, BT_CONNECT
);
3482 conn
= hci_conn_add(hdev
, LE_LINK
, &ev
->bdaddr
);
3484 BT_ERR("No memory for new connection");
3488 conn
->dst_type
= ev
->bdaddr_type
;
3490 if (ev
->role
== LE_CONN_ROLE_MASTER
) {
3492 conn
->link_mode
|= HCI_LM_MASTER
;
3497 mgmt_connect_failed(hdev
, &conn
->dst
, conn
->type
,
3498 conn
->dst_type
, ev
->status
);
3499 hci_proto_connect_cfm(conn
, ev
->status
);
3500 conn
->state
= BT_CLOSED
;
3505 if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
))
3506 mgmt_device_connected(hdev
, &ev
->bdaddr
, conn
->type
,
3507 conn
->dst_type
, 0, NULL
, 0, NULL
);
3509 conn
->sec_level
= BT_SECURITY_LOW
;
3510 conn
->handle
= __le16_to_cpu(ev
->handle
);
3511 conn
->state
= BT_CONNECTED
;
3513 hci_conn_hold_device(conn
);
3514 hci_conn_add_sysfs(conn
);
3516 hci_proto_connect_cfm(conn
, ev
->status
);
3519 hci_dev_unlock(hdev
);
3522 static void hci_le_adv_report_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3524 u8 num_reports
= skb
->data
[0];
3525 void *ptr
= &skb
->data
[1];
3528 while (num_reports
--) {
3529 struct hci_ev_le_advertising_info
*ev
= ptr
;
3531 rssi
= ev
->data
[ev
->length
];
3532 mgmt_device_found(hdev
, &ev
->bdaddr
, LE_LINK
, ev
->bdaddr_type
,
3533 NULL
, rssi
, 0, 1, ev
->data
, ev
->length
);
3535 ptr
+= sizeof(*ev
) + ev
->length
+ 1;
3539 static void hci_le_ltk_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3541 struct hci_ev_le_ltk_req
*ev
= (void *) skb
->data
;
3542 struct hci_cp_le_ltk_reply cp
;
3543 struct hci_cp_le_ltk_neg_reply neg
;
3544 struct hci_conn
*conn
;
3545 struct smp_ltk
*ltk
;
3547 BT_DBG("%s handle 0x%4.4x", hdev
->name
, __le16_to_cpu(ev
->handle
));
3551 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
3555 ltk
= hci_find_ltk(hdev
, ev
->ediv
, ev
->random
);
3559 memcpy(cp
.ltk
, ltk
->val
, sizeof(ltk
->val
));
3560 cp
.handle
= cpu_to_le16(conn
->handle
);
3562 if (ltk
->authenticated
)
3563 conn
->sec_level
= BT_SECURITY_HIGH
;
3565 hci_send_cmd(hdev
, HCI_OP_LE_LTK_REPLY
, sizeof(cp
), &cp
);
3567 if (ltk
->type
& HCI_SMP_STK
) {
3568 list_del(<k
->list
);
3572 hci_dev_unlock(hdev
);
3577 neg
.handle
= ev
->handle
;
3578 hci_send_cmd(hdev
, HCI_OP_LE_LTK_NEG_REPLY
, sizeof(neg
), &neg
);
3579 hci_dev_unlock(hdev
);
3582 static void hci_le_meta_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3584 struct hci_ev_le_meta
*le_ev
= (void *) skb
->data
;
3586 skb_pull(skb
, sizeof(*le_ev
));
3588 switch (le_ev
->subevent
) {
3589 case HCI_EV_LE_CONN_COMPLETE
:
3590 hci_le_conn_complete_evt(hdev
, skb
);
3593 case HCI_EV_LE_ADVERTISING_REPORT
:
3594 hci_le_adv_report_evt(hdev
, skb
);
3597 case HCI_EV_LE_LTK_REQ
:
3598 hci_le_ltk_request_evt(hdev
, skb
);
3606 static void hci_chan_selected_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3608 struct hci_ev_channel_selected
*ev
= (void *) skb
->data
;
3609 struct hci_conn
*hcon
;
3611 BT_DBG("%s handle 0x%2.2x", hdev
->name
, ev
->phy_handle
);
3613 skb_pull(skb
, sizeof(*ev
));
3615 hcon
= hci_conn_hash_lookup_handle(hdev
, ev
->phy_handle
);
3619 amp_read_loc_assoc_final_data(hdev
, hcon
);
3622 void hci_event_packet(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3624 struct hci_event_hdr
*hdr
= (void *) skb
->data
;
3625 __u8 event
= hdr
->evt
;
3627 skb_pull(skb
, HCI_EVENT_HDR_SIZE
);
3630 case HCI_EV_INQUIRY_COMPLETE
:
3631 hci_inquiry_complete_evt(hdev
, skb
);
3634 case HCI_EV_INQUIRY_RESULT
:
3635 hci_inquiry_result_evt(hdev
, skb
);
3638 case HCI_EV_CONN_COMPLETE
:
3639 hci_conn_complete_evt(hdev
, skb
);
3642 case HCI_EV_CONN_REQUEST
:
3643 hci_conn_request_evt(hdev
, skb
);
3646 case HCI_EV_DISCONN_COMPLETE
:
3647 hci_disconn_complete_evt(hdev
, skb
);
3650 case HCI_EV_AUTH_COMPLETE
:
3651 hci_auth_complete_evt(hdev
, skb
);
3654 case HCI_EV_REMOTE_NAME
:
3655 hci_remote_name_evt(hdev
, skb
);
3658 case HCI_EV_ENCRYPT_CHANGE
:
3659 hci_encrypt_change_evt(hdev
, skb
);
3662 case HCI_EV_CHANGE_LINK_KEY_COMPLETE
:
3663 hci_change_link_key_complete_evt(hdev
, skb
);
3666 case HCI_EV_REMOTE_FEATURES
:
3667 hci_remote_features_evt(hdev
, skb
);
3670 case HCI_EV_CMD_COMPLETE
:
3671 hci_cmd_complete_evt(hdev
, skb
);
3674 case HCI_EV_CMD_STATUS
:
3675 hci_cmd_status_evt(hdev
, skb
);
3678 case HCI_EV_ROLE_CHANGE
:
3679 hci_role_change_evt(hdev
, skb
);
3682 case HCI_EV_NUM_COMP_PKTS
:
3683 hci_num_comp_pkts_evt(hdev
, skb
);
3686 case HCI_EV_MODE_CHANGE
:
3687 hci_mode_change_evt(hdev
, skb
);
3690 case HCI_EV_PIN_CODE_REQ
:
3691 hci_pin_code_request_evt(hdev
, skb
);
3694 case HCI_EV_LINK_KEY_REQ
:
3695 hci_link_key_request_evt(hdev
, skb
);
3698 case HCI_EV_LINK_KEY_NOTIFY
:
3699 hci_link_key_notify_evt(hdev
, skb
);
3702 case HCI_EV_CLOCK_OFFSET
:
3703 hci_clock_offset_evt(hdev
, skb
);
3706 case HCI_EV_PKT_TYPE_CHANGE
:
3707 hci_pkt_type_change_evt(hdev
, skb
);
3710 case HCI_EV_PSCAN_REP_MODE
:
3711 hci_pscan_rep_mode_evt(hdev
, skb
);
3714 case HCI_EV_INQUIRY_RESULT_WITH_RSSI
:
3715 hci_inquiry_result_with_rssi_evt(hdev
, skb
);
3718 case HCI_EV_REMOTE_EXT_FEATURES
:
3719 hci_remote_ext_features_evt(hdev
, skb
);
3722 case HCI_EV_SYNC_CONN_COMPLETE
:
3723 hci_sync_conn_complete_evt(hdev
, skb
);
3726 case HCI_EV_EXTENDED_INQUIRY_RESULT
:
3727 hci_extended_inquiry_result_evt(hdev
, skb
);
3730 case HCI_EV_KEY_REFRESH_COMPLETE
:
3731 hci_key_refresh_complete_evt(hdev
, skb
);
3734 case HCI_EV_IO_CAPA_REQUEST
:
3735 hci_io_capa_request_evt(hdev
, skb
);
3738 case HCI_EV_IO_CAPA_REPLY
:
3739 hci_io_capa_reply_evt(hdev
, skb
);
3742 case HCI_EV_USER_CONFIRM_REQUEST
:
3743 hci_user_confirm_request_evt(hdev
, skb
);
3746 case HCI_EV_USER_PASSKEY_REQUEST
:
3747 hci_user_passkey_request_evt(hdev
, skb
);
3750 case HCI_EV_USER_PASSKEY_NOTIFY
:
3751 hci_user_passkey_notify_evt(hdev
, skb
);
3754 case HCI_EV_KEYPRESS_NOTIFY
:
3755 hci_keypress_notify_evt(hdev
, skb
);
3758 case HCI_EV_SIMPLE_PAIR_COMPLETE
:
3759 hci_simple_pair_complete_evt(hdev
, skb
);
3762 case HCI_EV_REMOTE_HOST_FEATURES
:
3763 hci_remote_host_features_evt(hdev
, skb
);
3766 case HCI_EV_LE_META
:
3767 hci_le_meta_evt(hdev
, skb
);
3770 case HCI_EV_CHANNEL_SELECTED
:
3771 hci_chan_selected_evt(hdev
, skb
);
3774 case HCI_EV_REMOTE_OOB_DATA_REQUEST
:
3775 hci_remote_oob_data_request_evt(hdev
, skb
);
3778 case HCI_EV_PHY_LINK_COMPLETE
:
3779 hci_phy_link_complete_evt(hdev
, skb
);
3782 case HCI_EV_LOGICAL_LINK_COMPLETE
:
3783 hci_loglink_complete_evt(hdev
, skb
);
3786 case HCI_EV_DISCONN_LOGICAL_LINK_COMPLETE
:
3787 hci_disconn_loglink_complete_evt(hdev
, skb
);
3790 case HCI_EV_DISCONN_PHY_LINK_COMPLETE
:
3791 hci_disconn_phylink_complete_evt(hdev
, skb
);
3794 case HCI_EV_NUM_COMP_BLOCKS
:
3795 hci_num_comp_blocks_evt(hdev
, skb
);
3799 BT_DBG("%s event 0x%2.2x", hdev
->name
, event
);
3804 hdev
->stat
.evt_rx
++;