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_conn_check_pending(hdev
);
59 static void hci_cc_periodic_inq(struct hci_dev
*hdev
, struct sk_buff
*skb
)
61 __u8 status
= *((__u8
*) skb
->data
);
63 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
68 set_bit(HCI_PERIODIC_INQ
, &hdev
->dev_flags
);
71 static void hci_cc_exit_periodic_inq(struct hci_dev
*hdev
, struct sk_buff
*skb
)
73 __u8 status
= *((__u8
*) skb
->data
);
75 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
80 clear_bit(HCI_PERIODIC_INQ
, &hdev
->dev_flags
);
82 hci_conn_check_pending(hdev
);
85 static void hci_cc_remote_name_req_cancel(struct hci_dev
*hdev
,
88 BT_DBG("%s", hdev
->name
);
91 static void hci_cc_role_discovery(struct hci_dev
*hdev
, struct sk_buff
*skb
)
93 struct hci_rp_role_discovery
*rp
= (void *) skb
->data
;
94 struct hci_conn
*conn
;
96 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
103 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(rp
->handle
));
106 conn
->link_mode
&= ~HCI_LM_MASTER
;
108 conn
->link_mode
|= HCI_LM_MASTER
;
111 hci_dev_unlock(hdev
);
114 static void hci_cc_read_link_policy(struct hci_dev
*hdev
, struct sk_buff
*skb
)
116 struct hci_rp_read_link_policy
*rp
= (void *) skb
->data
;
117 struct hci_conn
*conn
;
119 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
126 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(rp
->handle
));
128 conn
->link_policy
= __le16_to_cpu(rp
->policy
);
130 hci_dev_unlock(hdev
);
133 static void hci_cc_write_link_policy(struct hci_dev
*hdev
, struct sk_buff
*skb
)
135 struct hci_rp_write_link_policy
*rp
= (void *) skb
->data
;
136 struct hci_conn
*conn
;
139 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
144 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_LINK_POLICY
);
150 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(rp
->handle
));
152 conn
->link_policy
= get_unaligned_le16(sent
+ 2);
154 hci_dev_unlock(hdev
);
157 static void hci_cc_read_def_link_policy(struct hci_dev
*hdev
,
160 struct hci_rp_read_def_link_policy
*rp
= (void *) skb
->data
;
162 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
167 hdev
->link_policy
= __le16_to_cpu(rp
->policy
);
170 static void hci_cc_write_def_link_policy(struct hci_dev
*hdev
,
173 __u8 status
= *((__u8
*) skb
->data
);
176 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
178 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_DEF_LINK_POLICY
);
183 hdev
->link_policy
= get_unaligned_le16(sent
);
186 static void hci_cc_reset(struct hci_dev
*hdev
, struct sk_buff
*skb
)
188 __u8 status
= *((__u8
*) skb
->data
);
190 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
192 clear_bit(HCI_RESET
, &hdev
->flags
);
194 /* Reset all non-persistent flags */
195 hdev
->dev_flags
&= ~HCI_PERSISTENT_MASK
;
197 hdev
->discovery
.state
= DISCOVERY_STOPPED
;
198 hdev
->inq_tx_power
= HCI_TX_POWER_INVALID
;
199 hdev
->adv_tx_power
= HCI_TX_POWER_INVALID
;
201 memset(hdev
->adv_data
, 0, sizeof(hdev
->adv_data
));
202 hdev
->adv_data_len
= 0;
205 static void hci_cc_write_local_name(struct hci_dev
*hdev
, struct sk_buff
*skb
)
207 __u8 status
= *((__u8
*) skb
->data
);
210 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
212 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_LOCAL_NAME
);
218 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
219 mgmt_set_local_name_complete(hdev
, sent
, status
);
221 memcpy(hdev
->dev_name
, sent
, HCI_MAX_NAME_LENGTH
);
223 hci_dev_unlock(hdev
);
226 static void hci_cc_read_local_name(struct hci_dev
*hdev
, struct sk_buff
*skb
)
228 struct hci_rp_read_local_name
*rp
= (void *) skb
->data
;
230 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
235 if (test_bit(HCI_SETUP
, &hdev
->dev_flags
))
236 memcpy(hdev
->dev_name
, rp
->name
, HCI_MAX_NAME_LENGTH
);
239 static void hci_cc_write_auth_enable(struct hci_dev
*hdev
, struct sk_buff
*skb
)
241 __u8 status
= *((__u8
*) skb
->data
);
244 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
246 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_AUTH_ENABLE
);
251 __u8 param
= *((__u8
*) sent
);
253 if (param
== AUTH_ENABLED
)
254 set_bit(HCI_AUTH
, &hdev
->flags
);
256 clear_bit(HCI_AUTH
, &hdev
->flags
);
259 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
260 mgmt_auth_enable_complete(hdev
, status
);
263 static void hci_cc_write_encrypt_mode(struct hci_dev
*hdev
, struct sk_buff
*skb
)
265 __u8 status
= *((__u8
*) skb
->data
);
268 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
270 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_ENCRYPT_MODE
);
275 __u8 param
= *((__u8
*) sent
);
278 set_bit(HCI_ENCRYPT
, &hdev
->flags
);
280 clear_bit(HCI_ENCRYPT
, &hdev
->flags
);
284 static void hci_cc_write_scan_enable(struct hci_dev
*hdev
, struct sk_buff
*skb
)
286 __u8 param
, status
= *((__u8
*) skb
->data
);
287 int old_pscan
, old_iscan
;
290 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
292 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_SCAN_ENABLE
);
296 param
= *((__u8
*) sent
);
301 mgmt_write_scan_failed(hdev
, param
, status
);
302 hdev
->discov_timeout
= 0;
306 old_pscan
= test_and_clear_bit(HCI_PSCAN
, &hdev
->flags
);
307 old_iscan
= test_and_clear_bit(HCI_ISCAN
, &hdev
->flags
);
309 if (param
& SCAN_INQUIRY
) {
310 set_bit(HCI_ISCAN
, &hdev
->flags
);
312 mgmt_discoverable(hdev
, 1);
313 if (hdev
->discov_timeout
> 0) {
314 int to
= msecs_to_jiffies(hdev
->discov_timeout
* 1000);
315 queue_delayed_work(hdev
->workqueue
, &hdev
->discov_off
,
318 } else if (old_iscan
)
319 mgmt_discoverable(hdev
, 0);
321 if (param
& SCAN_PAGE
) {
322 set_bit(HCI_PSCAN
, &hdev
->flags
);
324 mgmt_connectable(hdev
, 1);
325 } else if (old_pscan
)
326 mgmt_connectable(hdev
, 0);
329 hci_dev_unlock(hdev
);
332 static void hci_cc_read_class_of_dev(struct hci_dev
*hdev
, struct sk_buff
*skb
)
334 struct hci_rp_read_class_of_dev
*rp
= (void *) skb
->data
;
336 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
341 memcpy(hdev
->dev_class
, rp
->dev_class
, 3);
343 BT_DBG("%s class 0x%.2x%.2x%.2x", hdev
->name
,
344 hdev
->dev_class
[2], hdev
->dev_class
[1], hdev
->dev_class
[0]);
347 static void hci_cc_write_class_of_dev(struct hci_dev
*hdev
, struct sk_buff
*skb
)
349 __u8 status
= *((__u8
*) skb
->data
);
352 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
354 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_CLASS_OF_DEV
);
361 memcpy(hdev
->dev_class
, sent
, 3);
363 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
364 mgmt_set_class_of_dev_complete(hdev
, sent
, status
);
366 hci_dev_unlock(hdev
);
369 static void hci_cc_read_voice_setting(struct hci_dev
*hdev
, struct sk_buff
*skb
)
371 struct hci_rp_read_voice_setting
*rp
= (void *) skb
->data
;
374 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
379 setting
= __le16_to_cpu(rp
->voice_setting
);
381 if (hdev
->voice_setting
== setting
)
384 hdev
->voice_setting
= setting
;
386 BT_DBG("%s voice setting 0x%4.4x", hdev
->name
, setting
);
389 hdev
->notify(hdev
, HCI_NOTIFY_VOICE_SETTING
);
392 static void hci_cc_write_voice_setting(struct hci_dev
*hdev
,
395 __u8 status
= *((__u8
*) skb
->data
);
399 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
404 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_VOICE_SETTING
);
408 setting
= get_unaligned_le16(sent
);
410 if (hdev
->voice_setting
== setting
)
413 hdev
->voice_setting
= setting
;
415 BT_DBG("%s voice setting 0x%4.4x", hdev
->name
, setting
);
418 hdev
->notify(hdev
, HCI_NOTIFY_VOICE_SETTING
);
421 static void hci_cc_write_ssp_mode(struct hci_dev
*hdev
, struct sk_buff
*skb
)
423 __u8 status
= *((__u8
*) skb
->data
);
424 struct hci_cp_write_ssp_mode
*sent
;
426 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
428 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_SSP_MODE
);
434 hdev
->host_features
[0] |= LMP_HOST_SSP
;
436 hdev
->host_features
[0] &= ~LMP_HOST_SSP
;
439 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
440 mgmt_ssp_enable_complete(hdev
, sent
->mode
, status
);
443 set_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
);
445 clear_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
);
449 static void hci_cc_read_local_version(struct hci_dev
*hdev
, struct sk_buff
*skb
)
451 struct hci_rp_read_local_version
*rp
= (void *) skb
->data
;
453 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
458 hdev
->hci_ver
= rp
->hci_ver
;
459 hdev
->hci_rev
= __le16_to_cpu(rp
->hci_rev
);
460 hdev
->lmp_ver
= rp
->lmp_ver
;
461 hdev
->manufacturer
= __le16_to_cpu(rp
->manufacturer
);
462 hdev
->lmp_subver
= __le16_to_cpu(rp
->lmp_subver
);
464 BT_DBG("%s manufacturer 0x%4.4x hci ver %d:%d", hdev
->name
,
465 hdev
->manufacturer
, hdev
->hci_ver
, hdev
->hci_rev
);
468 static void hci_cc_read_local_commands(struct hci_dev
*hdev
,
471 struct hci_rp_read_local_commands
*rp
= (void *) skb
->data
;
473 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
476 memcpy(hdev
->commands
, rp
->commands
, sizeof(hdev
->commands
));
479 static void hci_cc_read_local_features(struct hci_dev
*hdev
,
482 struct hci_rp_read_local_features
*rp
= (void *) skb
->data
;
484 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
489 memcpy(hdev
->features
, rp
->features
, 8);
491 /* Adjust default settings according to features
492 * supported by device. */
494 if (hdev
->features
[0] & LMP_3SLOT
)
495 hdev
->pkt_type
|= (HCI_DM3
| HCI_DH3
);
497 if (hdev
->features
[0] & LMP_5SLOT
)
498 hdev
->pkt_type
|= (HCI_DM5
| HCI_DH5
);
500 if (hdev
->features
[1] & LMP_HV2
) {
501 hdev
->pkt_type
|= (HCI_HV2
);
502 hdev
->esco_type
|= (ESCO_HV2
);
505 if (hdev
->features
[1] & LMP_HV3
) {
506 hdev
->pkt_type
|= (HCI_HV3
);
507 hdev
->esco_type
|= (ESCO_HV3
);
510 if (lmp_esco_capable(hdev
))
511 hdev
->esco_type
|= (ESCO_EV3
);
513 if (hdev
->features
[4] & LMP_EV4
)
514 hdev
->esco_type
|= (ESCO_EV4
);
516 if (hdev
->features
[4] & LMP_EV5
)
517 hdev
->esco_type
|= (ESCO_EV5
);
519 if (hdev
->features
[5] & LMP_EDR_ESCO_2M
)
520 hdev
->esco_type
|= (ESCO_2EV3
);
522 if (hdev
->features
[5] & LMP_EDR_ESCO_3M
)
523 hdev
->esco_type
|= (ESCO_3EV3
);
525 if (hdev
->features
[5] & LMP_EDR_3S_ESCO
)
526 hdev
->esco_type
|= (ESCO_2EV5
| ESCO_3EV5
);
528 BT_DBG("%s features 0x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x", hdev
->name
,
529 hdev
->features
[0], hdev
->features
[1],
530 hdev
->features
[2], hdev
->features
[3],
531 hdev
->features
[4], hdev
->features
[5],
532 hdev
->features
[6], hdev
->features
[7]);
535 static void hci_cc_read_local_ext_features(struct hci_dev
*hdev
,
538 struct hci_rp_read_local_ext_features
*rp
= (void *) skb
->data
;
540 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
547 memcpy(hdev
->features
, rp
->features
, 8);
550 memcpy(hdev
->host_features
, rp
->features
, 8);
555 static void hci_cc_read_flow_control_mode(struct hci_dev
*hdev
,
558 struct hci_rp_read_flow_control_mode
*rp
= (void *) skb
->data
;
560 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
563 hdev
->flow_ctl_mode
= rp
->mode
;
566 static void hci_cc_read_buffer_size(struct hci_dev
*hdev
, struct sk_buff
*skb
)
568 struct hci_rp_read_buffer_size
*rp
= (void *) skb
->data
;
570 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
575 hdev
->acl_mtu
= __le16_to_cpu(rp
->acl_mtu
);
576 hdev
->sco_mtu
= rp
->sco_mtu
;
577 hdev
->acl_pkts
= __le16_to_cpu(rp
->acl_max_pkt
);
578 hdev
->sco_pkts
= __le16_to_cpu(rp
->sco_max_pkt
);
580 if (test_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE
, &hdev
->quirks
)) {
585 hdev
->acl_cnt
= hdev
->acl_pkts
;
586 hdev
->sco_cnt
= hdev
->sco_pkts
;
588 BT_DBG("%s acl mtu %d:%d sco mtu %d:%d", hdev
->name
, hdev
->acl_mtu
,
589 hdev
->acl_pkts
, hdev
->sco_mtu
, hdev
->sco_pkts
);
592 static void hci_cc_read_bd_addr(struct hci_dev
*hdev
, struct sk_buff
*skb
)
594 struct hci_rp_read_bd_addr
*rp
= (void *) skb
->data
;
596 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
599 bacpy(&hdev
->bdaddr
, &rp
->bdaddr
);
602 static void hci_cc_read_page_scan_activity(struct hci_dev
*hdev
,
605 struct hci_rp_read_page_scan_activity
*rp
= (void *) skb
->data
;
607 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
609 if (test_bit(HCI_INIT
, &hdev
->flags
) && !rp
->status
) {
610 hdev
->page_scan_interval
= __le16_to_cpu(rp
->interval
);
611 hdev
->page_scan_window
= __le16_to_cpu(rp
->window
);
615 static void hci_cc_write_page_scan_activity(struct hci_dev
*hdev
,
618 u8 status
= *((u8
*) skb
->data
);
619 struct hci_cp_write_page_scan_activity
*sent
;
621 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
626 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_PAGE_SCAN_ACTIVITY
);
630 hdev
->page_scan_interval
= __le16_to_cpu(sent
->interval
);
631 hdev
->page_scan_window
= __le16_to_cpu(sent
->window
);
634 static void hci_cc_read_page_scan_type(struct hci_dev
*hdev
,
637 struct hci_rp_read_page_scan_type
*rp
= (void *) skb
->data
;
639 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
641 if (test_bit(HCI_INIT
, &hdev
->flags
) && !rp
->status
)
642 hdev
->page_scan_type
= rp
->type
;
645 static void hci_cc_write_page_scan_type(struct hci_dev
*hdev
,
648 u8 status
= *((u8
*) skb
->data
);
651 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
656 type
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_PAGE_SCAN_TYPE
);
658 hdev
->page_scan_type
= *type
;
661 static void hci_cc_read_data_block_size(struct hci_dev
*hdev
,
664 struct hci_rp_read_data_block_size
*rp
= (void *) skb
->data
;
666 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
671 hdev
->block_mtu
= __le16_to_cpu(rp
->max_acl_len
);
672 hdev
->block_len
= __le16_to_cpu(rp
->block_len
);
673 hdev
->num_blocks
= __le16_to_cpu(rp
->num_blocks
);
675 hdev
->block_cnt
= hdev
->num_blocks
;
677 BT_DBG("%s blk mtu %d cnt %d len %d", hdev
->name
, hdev
->block_mtu
,
678 hdev
->block_cnt
, hdev
->block_len
);
681 static void hci_cc_read_local_amp_info(struct hci_dev
*hdev
,
684 struct hci_rp_read_local_amp_info
*rp
= (void *) skb
->data
;
686 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
691 hdev
->amp_status
= rp
->amp_status
;
692 hdev
->amp_total_bw
= __le32_to_cpu(rp
->total_bw
);
693 hdev
->amp_max_bw
= __le32_to_cpu(rp
->max_bw
);
694 hdev
->amp_min_latency
= __le32_to_cpu(rp
->min_latency
);
695 hdev
->amp_max_pdu
= __le32_to_cpu(rp
->max_pdu
);
696 hdev
->amp_type
= rp
->amp_type
;
697 hdev
->amp_pal_cap
= __le16_to_cpu(rp
->pal_cap
);
698 hdev
->amp_assoc_size
= __le16_to_cpu(rp
->max_assoc_size
);
699 hdev
->amp_be_flush_to
= __le32_to_cpu(rp
->be_flush_to
);
700 hdev
->amp_max_flush_to
= __le32_to_cpu(rp
->max_flush_to
);
703 a2mp_send_getinfo_rsp(hdev
);
706 static void hci_cc_read_local_amp_assoc(struct hci_dev
*hdev
,
709 struct hci_rp_read_local_amp_assoc
*rp
= (void *) skb
->data
;
710 struct amp_assoc
*assoc
= &hdev
->loc_assoc
;
711 size_t rem_len
, frag_len
;
713 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
718 frag_len
= skb
->len
- sizeof(*rp
);
719 rem_len
= __le16_to_cpu(rp
->rem_len
);
721 if (rem_len
> frag_len
) {
722 BT_DBG("frag_len %zu rem_len %zu", frag_len
, rem_len
);
724 memcpy(assoc
->data
+ assoc
->offset
, rp
->frag
, frag_len
);
725 assoc
->offset
+= frag_len
;
727 /* Read other fragments */
728 amp_read_loc_assoc_frag(hdev
, rp
->phy_handle
);
733 memcpy(assoc
->data
+ assoc
->offset
, rp
->frag
, rem_len
);
734 assoc
->len
= assoc
->offset
+ rem_len
;
738 /* Send A2MP Rsp when all fragments are received */
739 a2mp_send_getampassoc_rsp(hdev
, rp
->status
);
740 a2mp_send_create_phy_link_req(hdev
, rp
->status
);
743 static void hci_cc_read_inq_rsp_tx_power(struct hci_dev
*hdev
,
746 struct hci_rp_read_inq_rsp_tx_power
*rp
= (void *) skb
->data
;
748 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
751 hdev
->inq_tx_power
= rp
->tx_power
;
754 static void hci_cc_pin_code_reply(struct hci_dev
*hdev
, struct sk_buff
*skb
)
756 struct hci_rp_pin_code_reply
*rp
= (void *) skb
->data
;
757 struct hci_cp_pin_code_reply
*cp
;
758 struct hci_conn
*conn
;
760 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
764 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
765 mgmt_pin_code_reply_complete(hdev
, &rp
->bdaddr
, rp
->status
);
770 cp
= hci_sent_cmd_data(hdev
, HCI_OP_PIN_CODE_REPLY
);
774 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &cp
->bdaddr
);
776 conn
->pin_length
= cp
->pin_len
;
779 hci_dev_unlock(hdev
);
782 static void hci_cc_pin_code_neg_reply(struct hci_dev
*hdev
, struct sk_buff
*skb
)
784 struct hci_rp_pin_code_neg_reply
*rp
= (void *) skb
->data
;
786 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
790 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
791 mgmt_pin_code_neg_reply_complete(hdev
, &rp
->bdaddr
,
794 hci_dev_unlock(hdev
);
797 static void hci_cc_le_read_buffer_size(struct hci_dev
*hdev
,
800 struct hci_rp_le_read_buffer_size
*rp
= (void *) skb
->data
;
802 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
807 hdev
->le_mtu
= __le16_to_cpu(rp
->le_mtu
);
808 hdev
->le_pkts
= rp
->le_max_pkt
;
810 hdev
->le_cnt
= hdev
->le_pkts
;
812 BT_DBG("%s le mtu %d:%d", hdev
->name
, hdev
->le_mtu
, hdev
->le_pkts
);
815 static void hci_cc_le_read_local_features(struct hci_dev
*hdev
,
818 struct hci_rp_le_read_local_features
*rp
= (void *) skb
->data
;
820 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
823 memcpy(hdev
->le_features
, rp
->features
, 8);
826 static void hci_cc_le_read_adv_tx_power(struct hci_dev
*hdev
,
829 struct hci_rp_le_read_adv_tx_power
*rp
= (void *) skb
->data
;
831 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
834 hdev
->adv_tx_power
= rp
->tx_power
;
837 static void hci_cc_user_confirm_reply(struct hci_dev
*hdev
, struct sk_buff
*skb
)
839 struct hci_rp_user_confirm_reply
*rp
= (void *) skb
->data
;
841 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
845 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
846 mgmt_user_confirm_reply_complete(hdev
, &rp
->bdaddr
, ACL_LINK
, 0,
849 hci_dev_unlock(hdev
);
852 static void hci_cc_user_confirm_neg_reply(struct hci_dev
*hdev
,
855 struct hci_rp_user_confirm_reply
*rp
= (void *) skb
->data
;
857 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
861 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
862 mgmt_user_confirm_neg_reply_complete(hdev
, &rp
->bdaddr
,
863 ACL_LINK
, 0, rp
->status
);
865 hci_dev_unlock(hdev
);
868 static void hci_cc_user_passkey_reply(struct hci_dev
*hdev
, struct sk_buff
*skb
)
870 struct hci_rp_user_confirm_reply
*rp
= (void *) skb
->data
;
872 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
876 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
877 mgmt_user_passkey_reply_complete(hdev
, &rp
->bdaddr
, ACL_LINK
,
880 hci_dev_unlock(hdev
);
883 static void hci_cc_user_passkey_neg_reply(struct hci_dev
*hdev
,
886 struct hci_rp_user_confirm_reply
*rp
= (void *) skb
->data
;
888 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
892 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
893 mgmt_user_passkey_neg_reply_complete(hdev
, &rp
->bdaddr
,
894 ACL_LINK
, 0, rp
->status
);
896 hci_dev_unlock(hdev
);
899 static void hci_cc_read_local_oob_data_reply(struct hci_dev
*hdev
,
902 struct hci_rp_read_local_oob_data
*rp
= (void *) skb
->data
;
904 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
907 mgmt_read_local_oob_data_reply_complete(hdev
, rp
->hash
,
908 rp
->randomizer
, rp
->status
);
909 hci_dev_unlock(hdev
);
912 static void hci_cc_le_set_adv_enable(struct hci_dev
*hdev
, struct sk_buff
*skb
)
914 __u8
*sent
, status
= *((__u8
*) skb
->data
);
916 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
918 sent
= hci_sent_cmd_data(hdev
, HCI_OP_LE_SET_ADV_ENABLE
);
926 set_bit(HCI_LE_PERIPHERAL
, &hdev
->dev_flags
);
928 clear_bit(HCI_LE_PERIPHERAL
, &hdev
->dev_flags
);
931 if (!test_bit(HCI_INIT
, &hdev
->flags
)) {
932 struct hci_request req
;
934 hci_req_init(&req
, hdev
);
936 hci_req_run(&req
, NULL
);
939 hci_dev_unlock(hdev
);
942 static void hci_cc_le_set_scan_param(struct hci_dev
*hdev
, struct sk_buff
*skb
)
944 __u8 status
= *((__u8
*) skb
->data
);
946 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
950 mgmt_start_discovery_failed(hdev
, status
);
951 hci_dev_unlock(hdev
);
956 static void hci_cc_le_set_scan_enable(struct hci_dev
*hdev
,
959 struct hci_cp_le_set_scan_enable
*cp
;
960 __u8 status
= *((__u8
*) skb
->data
);
962 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
964 cp
= hci_sent_cmd_data(hdev
, HCI_OP_LE_SET_SCAN_ENABLE
);
968 switch (cp
->enable
) {
969 case LE_SCANNING_ENABLED
:
972 mgmt_start_discovery_failed(hdev
, status
);
973 hci_dev_unlock(hdev
);
977 set_bit(HCI_LE_SCAN
, &hdev
->dev_flags
);
980 hci_discovery_set_state(hdev
, DISCOVERY_FINDING
);
981 hci_dev_unlock(hdev
);
984 case LE_SCANNING_DISABLED
:
987 mgmt_stop_discovery_failed(hdev
, status
);
988 hci_dev_unlock(hdev
);
992 clear_bit(HCI_LE_SCAN
, &hdev
->dev_flags
);
994 if (hdev
->discovery
.type
== DISCOV_TYPE_INTERLEAVED
&&
995 hdev
->discovery
.state
== DISCOVERY_FINDING
) {
996 mgmt_interleaved_discovery(hdev
);
999 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
1000 hci_dev_unlock(hdev
);
1006 BT_ERR("Used reserved LE_Scan_Enable param %d", cp
->enable
);
1011 static void hci_cc_le_read_white_list_size(struct hci_dev
*hdev
,
1012 struct sk_buff
*skb
)
1014 struct hci_rp_le_read_white_list_size
*rp
= (void *) skb
->data
;
1016 BT_DBG("%s status 0x%2.2x size %u", hdev
->name
, rp
->status
, rp
->size
);
1019 hdev
->le_white_list_size
= rp
->size
;
1022 static void hci_cc_le_read_supported_states(struct hci_dev
*hdev
,
1023 struct sk_buff
*skb
)
1025 struct hci_rp_le_read_supported_states
*rp
= (void *) skb
->data
;
1027 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
1030 memcpy(hdev
->le_states
, rp
->le_states
, 8);
1033 static void hci_cc_write_le_host_supported(struct hci_dev
*hdev
,
1034 struct sk_buff
*skb
)
1036 struct hci_cp_write_le_host_supported
*sent
;
1037 __u8 status
= *((__u8
*) skb
->data
);
1039 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1041 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_LE_HOST_SUPPORTED
);
1047 hdev
->host_features
[0] |= LMP_HOST_LE
;
1049 hdev
->host_features
[0] &= ~LMP_HOST_LE
;
1052 hdev
->host_features
[0] |= LMP_HOST_LE_BREDR
;
1054 hdev
->host_features
[0] &= ~LMP_HOST_LE_BREDR
;
1057 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
) &&
1058 !test_bit(HCI_INIT
, &hdev
->flags
))
1059 mgmt_le_enable_complete(hdev
, sent
->le
, status
);
1062 static void hci_cc_write_remote_amp_assoc(struct hci_dev
*hdev
,
1063 struct sk_buff
*skb
)
1065 struct hci_rp_write_remote_amp_assoc
*rp
= (void *) skb
->data
;
1067 BT_DBG("%s status 0x%2.2x phy_handle 0x%2.2x",
1068 hdev
->name
, rp
->status
, rp
->phy_handle
);
1073 amp_write_rem_assoc_continue(hdev
, rp
->phy_handle
);
1076 static void hci_cs_inquiry(struct hci_dev
*hdev
, __u8 status
)
1078 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1081 hci_conn_check_pending(hdev
);
1083 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
1084 mgmt_start_discovery_failed(hdev
, status
);
1085 hci_dev_unlock(hdev
);
1089 set_bit(HCI_INQUIRY
, &hdev
->flags
);
1092 hci_discovery_set_state(hdev
, DISCOVERY_FINDING
);
1093 hci_dev_unlock(hdev
);
1096 static void hci_cs_create_conn(struct hci_dev
*hdev
, __u8 status
)
1098 struct hci_cp_create_conn
*cp
;
1099 struct hci_conn
*conn
;
1101 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1103 cp
= hci_sent_cmd_data(hdev
, HCI_OP_CREATE_CONN
);
1109 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &cp
->bdaddr
);
1111 BT_DBG("%s bdaddr %pMR hcon %p", hdev
->name
, &cp
->bdaddr
, conn
);
1114 if (conn
&& conn
->state
== BT_CONNECT
) {
1115 if (status
!= 0x0c || conn
->attempt
> 2) {
1116 conn
->state
= BT_CLOSED
;
1117 hci_proto_connect_cfm(conn
, status
);
1120 conn
->state
= BT_CONNECT2
;
1124 conn
= hci_conn_add(hdev
, ACL_LINK
, &cp
->bdaddr
);
1127 conn
->link_mode
|= HCI_LM_MASTER
;
1129 BT_ERR("No memory for new connection");
1133 hci_dev_unlock(hdev
);
1136 static void hci_cs_add_sco(struct hci_dev
*hdev
, __u8 status
)
1138 struct hci_cp_add_sco
*cp
;
1139 struct hci_conn
*acl
, *sco
;
1142 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1147 cp
= hci_sent_cmd_data(hdev
, HCI_OP_ADD_SCO
);
1151 handle
= __le16_to_cpu(cp
->handle
);
1153 BT_DBG("%s handle 0x%4.4x", hdev
->name
, handle
);
1157 acl
= hci_conn_hash_lookup_handle(hdev
, handle
);
1161 sco
->state
= BT_CLOSED
;
1163 hci_proto_connect_cfm(sco
, status
);
1168 hci_dev_unlock(hdev
);
1171 static void hci_cs_auth_requested(struct hci_dev
*hdev
, __u8 status
)
1173 struct hci_cp_auth_requested
*cp
;
1174 struct hci_conn
*conn
;
1176 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1181 cp
= hci_sent_cmd_data(hdev
, HCI_OP_AUTH_REQUESTED
);
1187 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1189 if (conn
->state
== BT_CONFIG
) {
1190 hci_proto_connect_cfm(conn
, status
);
1195 hci_dev_unlock(hdev
);
1198 static void hci_cs_set_conn_encrypt(struct hci_dev
*hdev
, __u8 status
)
1200 struct hci_cp_set_conn_encrypt
*cp
;
1201 struct hci_conn
*conn
;
1203 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1208 cp
= hci_sent_cmd_data(hdev
, HCI_OP_SET_CONN_ENCRYPT
);
1214 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1216 if (conn
->state
== BT_CONFIG
) {
1217 hci_proto_connect_cfm(conn
, status
);
1222 hci_dev_unlock(hdev
);
1225 static int hci_outgoing_auth_needed(struct hci_dev
*hdev
,
1226 struct hci_conn
*conn
)
1228 if (conn
->state
!= BT_CONFIG
|| !conn
->out
)
1231 if (conn
->pending_sec_level
== BT_SECURITY_SDP
)
1234 /* Only request authentication for SSP connections or non-SSP
1235 * devices with sec_level HIGH or if MITM protection is requested */
1236 if (!hci_conn_ssp_enabled(conn
) && !(conn
->auth_type
& 0x01) &&
1237 conn
->pending_sec_level
!= BT_SECURITY_HIGH
)
1243 static int hci_resolve_name(struct hci_dev
*hdev
,
1244 struct inquiry_entry
*e
)
1246 struct hci_cp_remote_name_req cp
;
1248 memset(&cp
, 0, sizeof(cp
));
1250 bacpy(&cp
.bdaddr
, &e
->data
.bdaddr
);
1251 cp
.pscan_rep_mode
= e
->data
.pscan_rep_mode
;
1252 cp
.pscan_mode
= e
->data
.pscan_mode
;
1253 cp
.clock_offset
= e
->data
.clock_offset
;
1255 return hci_send_cmd(hdev
, HCI_OP_REMOTE_NAME_REQ
, sizeof(cp
), &cp
);
1258 static bool hci_resolve_next_name(struct hci_dev
*hdev
)
1260 struct discovery_state
*discov
= &hdev
->discovery
;
1261 struct inquiry_entry
*e
;
1263 if (list_empty(&discov
->resolve
))
1266 e
= hci_inquiry_cache_lookup_resolve(hdev
, BDADDR_ANY
, NAME_NEEDED
);
1270 if (hci_resolve_name(hdev
, e
) == 0) {
1271 e
->name_state
= NAME_PENDING
;
1278 static void hci_check_pending_name(struct hci_dev
*hdev
, struct hci_conn
*conn
,
1279 bdaddr_t
*bdaddr
, u8
*name
, u8 name_len
)
1281 struct discovery_state
*discov
= &hdev
->discovery
;
1282 struct inquiry_entry
*e
;
1284 if (conn
&& !test_and_set_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
))
1285 mgmt_device_connected(hdev
, bdaddr
, ACL_LINK
, 0x00, 0, name
,
1286 name_len
, conn
->dev_class
);
1288 if (discov
->state
== DISCOVERY_STOPPED
)
1291 if (discov
->state
== DISCOVERY_STOPPING
)
1292 goto discov_complete
;
1294 if (discov
->state
!= DISCOVERY_RESOLVING
)
1297 e
= hci_inquiry_cache_lookup_resolve(hdev
, bdaddr
, NAME_PENDING
);
1298 /* If the device was not found in a list of found devices names of which
1299 * are pending. there is no need to continue resolving a next name as it
1300 * will be done upon receiving another Remote Name Request Complete
1307 e
->name_state
= NAME_KNOWN
;
1308 mgmt_remote_name(hdev
, bdaddr
, ACL_LINK
, 0x00,
1309 e
->data
.rssi
, name
, name_len
);
1311 e
->name_state
= NAME_NOT_KNOWN
;
1314 if (hci_resolve_next_name(hdev
))
1318 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
1321 static void hci_cs_remote_name_req(struct hci_dev
*hdev
, __u8 status
)
1323 struct hci_cp_remote_name_req
*cp
;
1324 struct hci_conn
*conn
;
1326 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1328 /* If successful wait for the name req complete event before
1329 * checking for the need to do authentication */
1333 cp
= hci_sent_cmd_data(hdev
, HCI_OP_REMOTE_NAME_REQ
);
1339 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &cp
->bdaddr
);
1341 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
1342 hci_check_pending_name(hdev
, conn
, &cp
->bdaddr
, NULL
, 0);
1347 if (!hci_outgoing_auth_needed(hdev
, conn
))
1350 if (!test_and_set_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
)) {
1351 struct hci_cp_auth_requested cp
;
1352 cp
.handle
= __cpu_to_le16(conn
->handle
);
1353 hci_send_cmd(hdev
, HCI_OP_AUTH_REQUESTED
, sizeof(cp
), &cp
);
1357 hci_dev_unlock(hdev
);
1360 static void hci_cs_read_remote_features(struct hci_dev
*hdev
, __u8 status
)
1362 struct hci_cp_read_remote_features
*cp
;
1363 struct hci_conn
*conn
;
1365 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1370 cp
= hci_sent_cmd_data(hdev
, HCI_OP_READ_REMOTE_FEATURES
);
1376 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1378 if (conn
->state
== BT_CONFIG
) {
1379 hci_proto_connect_cfm(conn
, status
);
1384 hci_dev_unlock(hdev
);
1387 static void hci_cs_read_remote_ext_features(struct hci_dev
*hdev
, __u8 status
)
1389 struct hci_cp_read_remote_ext_features
*cp
;
1390 struct hci_conn
*conn
;
1392 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1397 cp
= hci_sent_cmd_data(hdev
, HCI_OP_READ_REMOTE_EXT_FEATURES
);
1403 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1405 if (conn
->state
== BT_CONFIG
) {
1406 hci_proto_connect_cfm(conn
, status
);
1411 hci_dev_unlock(hdev
);
1414 static void hci_cs_setup_sync_conn(struct hci_dev
*hdev
, __u8 status
)
1416 struct hci_cp_setup_sync_conn
*cp
;
1417 struct hci_conn
*acl
, *sco
;
1420 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1425 cp
= hci_sent_cmd_data(hdev
, HCI_OP_SETUP_SYNC_CONN
);
1429 handle
= __le16_to_cpu(cp
->handle
);
1431 BT_DBG("%s handle 0x%4.4x", hdev
->name
, handle
);
1435 acl
= hci_conn_hash_lookup_handle(hdev
, handle
);
1439 sco
->state
= BT_CLOSED
;
1441 hci_proto_connect_cfm(sco
, status
);
1446 hci_dev_unlock(hdev
);
1449 static void hci_cs_sniff_mode(struct hci_dev
*hdev
, __u8 status
)
1451 struct hci_cp_sniff_mode
*cp
;
1452 struct hci_conn
*conn
;
1454 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1459 cp
= hci_sent_cmd_data(hdev
, HCI_OP_SNIFF_MODE
);
1465 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1467 clear_bit(HCI_CONN_MODE_CHANGE_PEND
, &conn
->flags
);
1469 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND
, &conn
->flags
))
1470 hci_sco_setup(conn
, status
);
1473 hci_dev_unlock(hdev
);
1476 static void hci_cs_exit_sniff_mode(struct hci_dev
*hdev
, __u8 status
)
1478 struct hci_cp_exit_sniff_mode
*cp
;
1479 struct hci_conn
*conn
;
1481 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1486 cp
= hci_sent_cmd_data(hdev
, HCI_OP_EXIT_SNIFF_MODE
);
1492 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1494 clear_bit(HCI_CONN_MODE_CHANGE_PEND
, &conn
->flags
);
1496 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND
, &conn
->flags
))
1497 hci_sco_setup(conn
, status
);
1500 hci_dev_unlock(hdev
);
1503 static void hci_cs_disconnect(struct hci_dev
*hdev
, u8 status
)
1505 struct hci_cp_disconnect
*cp
;
1506 struct hci_conn
*conn
;
1511 cp
= hci_sent_cmd_data(hdev
, HCI_OP_DISCONNECT
);
1517 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1519 mgmt_disconnect_failed(hdev
, &conn
->dst
, conn
->type
,
1520 conn
->dst_type
, status
);
1522 hci_dev_unlock(hdev
);
1525 static void hci_cs_le_create_conn(struct hci_dev
*hdev
, __u8 status
)
1527 struct hci_conn
*conn
;
1529 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1534 conn
= hci_conn_hash_lookup_state(hdev
, LE_LINK
, BT_CONNECT
);
1536 hci_dev_unlock(hdev
);
1540 BT_DBG("%s bdaddr %pMR conn %p", hdev
->name
, &conn
->dst
, conn
);
1542 conn
->state
= BT_CLOSED
;
1543 mgmt_connect_failed(hdev
, &conn
->dst
, conn
->type
,
1544 conn
->dst_type
, status
);
1545 hci_proto_connect_cfm(conn
, status
);
1548 hci_dev_unlock(hdev
);
1552 static void hci_cs_create_phylink(struct hci_dev
*hdev
, u8 status
)
1554 struct hci_cp_create_phy_link
*cp
;
1556 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1558 cp
= hci_sent_cmd_data(hdev
, HCI_OP_CREATE_PHY_LINK
);
1565 struct hci_conn
*hcon
;
1567 hcon
= hci_conn_hash_lookup_handle(hdev
, cp
->phy_handle
);
1571 amp_write_remote_assoc(hdev
, cp
->phy_handle
);
1574 hci_dev_unlock(hdev
);
1577 static void hci_cs_accept_phylink(struct hci_dev
*hdev
, u8 status
)
1579 struct hci_cp_accept_phy_link
*cp
;
1581 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1586 cp
= hci_sent_cmd_data(hdev
, HCI_OP_ACCEPT_PHY_LINK
);
1590 amp_write_remote_assoc(hdev
, cp
->phy_handle
);
1593 static void hci_inquiry_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1595 __u8 status
= *((__u8
*) skb
->data
);
1596 struct discovery_state
*discov
= &hdev
->discovery
;
1597 struct inquiry_entry
*e
;
1599 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1601 hci_conn_check_pending(hdev
);
1603 if (!test_and_clear_bit(HCI_INQUIRY
, &hdev
->flags
))
1606 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
1611 if (discov
->state
!= DISCOVERY_FINDING
)
1614 if (list_empty(&discov
->resolve
)) {
1615 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
1619 e
= hci_inquiry_cache_lookup_resolve(hdev
, BDADDR_ANY
, NAME_NEEDED
);
1620 if (e
&& hci_resolve_name(hdev
, e
) == 0) {
1621 e
->name_state
= NAME_PENDING
;
1622 hci_discovery_set_state(hdev
, DISCOVERY_RESOLVING
);
1624 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
1628 hci_dev_unlock(hdev
);
1631 static void hci_inquiry_result_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1633 struct inquiry_data data
;
1634 struct inquiry_info
*info
= (void *) (skb
->data
+ 1);
1635 int num_rsp
= *((__u8
*) skb
->data
);
1637 BT_DBG("%s num_rsp %d", hdev
->name
, num_rsp
);
1642 if (test_bit(HCI_PERIODIC_INQ
, &hdev
->dev_flags
))
1647 for (; num_rsp
; num_rsp
--, info
++) {
1648 bool name_known
, ssp
;
1650 bacpy(&data
.bdaddr
, &info
->bdaddr
);
1651 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
1652 data
.pscan_period_mode
= info
->pscan_period_mode
;
1653 data
.pscan_mode
= info
->pscan_mode
;
1654 memcpy(data
.dev_class
, info
->dev_class
, 3);
1655 data
.clock_offset
= info
->clock_offset
;
1657 data
.ssp_mode
= 0x00;
1659 name_known
= hci_inquiry_cache_update(hdev
, &data
, false, &ssp
);
1660 mgmt_device_found(hdev
, &info
->bdaddr
, ACL_LINK
, 0x00,
1661 info
->dev_class
, 0, !name_known
, ssp
, NULL
,
1665 hci_dev_unlock(hdev
);
1668 static void hci_conn_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1670 struct hci_ev_conn_complete
*ev
= (void *) skb
->data
;
1671 struct hci_conn
*conn
;
1673 BT_DBG("%s", hdev
->name
);
1677 conn
= hci_conn_hash_lookup_ba(hdev
, ev
->link_type
, &ev
->bdaddr
);
1679 if (ev
->link_type
!= SCO_LINK
)
1682 conn
= hci_conn_hash_lookup_ba(hdev
, ESCO_LINK
, &ev
->bdaddr
);
1686 conn
->type
= SCO_LINK
;
1690 conn
->handle
= __le16_to_cpu(ev
->handle
);
1692 if (conn
->type
== ACL_LINK
) {
1693 conn
->state
= BT_CONFIG
;
1694 hci_conn_hold(conn
);
1696 if (!conn
->out
&& !hci_conn_ssp_enabled(conn
) &&
1697 !hci_find_link_key(hdev
, &ev
->bdaddr
))
1698 conn
->disc_timeout
= HCI_PAIRING_TIMEOUT
;
1700 conn
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
1702 conn
->state
= BT_CONNECTED
;
1704 hci_conn_hold_device(conn
);
1705 hci_conn_add_sysfs(conn
);
1707 if (test_bit(HCI_AUTH
, &hdev
->flags
))
1708 conn
->link_mode
|= HCI_LM_AUTH
;
1710 if (test_bit(HCI_ENCRYPT
, &hdev
->flags
))
1711 conn
->link_mode
|= HCI_LM_ENCRYPT
;
1713 /* Get remote features */
1714 if (conn
->type
== ACL_LINK
) {
1715 struct hci_cp_read_remote_features cp
;
1716 cp
.handle
= ev
->handle
;
1717 hci_send_cmd(hdev
, HCI_OP_READ_REMOTE_FEATURES
,
1721 /* Set packet type for incoming connection */
1722 if (!conn
->out
&& hdev
->hci_ver
< BLUETOOTH_VER_2_0
) {
1723 struct hci_cp_change_conn_ptype cp
;
1724 cp
.handle
= ev
->handle
;
1725 cp
.pkt_type
= cpu_to_le16(conn
->pkt_type
);
1726 hci_send_cmd(hdev
, HCI_OP_CHANGE_CONN_PTYPE
, sizeof(cp
),
1730 conn
->state
= BT_CLOSED
;
1731 if (conn
->type
== ACL_LINK
)
1732 mgmt_connect_failed(hdev
, &ev
->bdaddr
, conn
->type
,
1733 conn
->dst_type
, ev
->status
);
1736 if (conn
->type
== ACL_LINK
)
1737 hci_sco_setup(conn
, ev
->status
);
1740 hci_proto_connect_cfm(conn
, ev
->status
);
1742 } else if (ev
->link_type
!= ACL_LINK
)
1743 hci_proto_connect_cfm(conn
, ev
->status
);
1746 hci_dev_unlock(hdev
);
1748 hci_conn_check_pending(hdev
);
1751 void hci_conn_accept(struct hci_conn
*conn
, int mask
)
1753 struct hci_dev
*hdev
= conn
->hdev
;
1755 BT_DBG("conn %p", conn
);
1757 conn
->state
= BT_CONFIG
;
1759 if (!lmp_esco_capable(hdev
)) {
1760 struct hci_cp_accept_conn_req cp
;
1762 bacpy(&cp
.bdaddr
, &conn
->dst
);
1764 if (lmp_rswitch_capable(hdev
) && (mask
& HCI_LM_MASTER
))
1765 cp
.role
= 0x00; /* Become master */
1767 cp
.role
= 0x01; /* Remain slave */
1769 hci_send_cmd(hdev
, HCI_OP_ACCEPT_CONN_REQ
, sizeof(cp
), &cp
);
1770 } else /* lmp_esco_capable(hdev)) */ {
1771 struct hci_cp_accept_sync_conn_req cp
;
1773 bacpy(&cp
.bdaddr
, &conn
->dst
);
1774 cp
.pkt_type
= cpu_to_le16(conn
->pkt_type
);
1776 cp
.tx_bandwidth
= __constant_cpu_to_le32(0x00001f40);
1777 cp
.rx_bandwidth
= __constant_cpu_to_le32(0x00001f40);
1778 cp
.max_latency
= __constant_cpu_to_le16(0xffff);
1779 cp
.content_format
= cpu_to_le16(hdev
->voice_setting
);
1780 cp
.retrans_effort
= 0xff;
1782 hci_send_cmd(hdev
, HCI_OP_ACCEPT_SYNC_CONN_REQ
,
1787 static void hci_conn_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1789 struct hci_ev_conn_request
*ev
= (void *) skb
->data
;
1790 int mask
= hdev
->link_mode
;
1793 BT_DBG("%s bdaddr %pMR type 0x%x", hdev
->name
, &ev
->bdaddr
,
1796 mask
|= hci_proto_connect_ind(hdev
, &ev
->bdaddr
, ev
->link_type
,
1799 if ((mask
& HCI_LM_ACCEPT
) &&
1800 !hci_blacklist_lookup(hdev
, &ev
->bdaddr
)) {
1801 /* Connection accepted */
1802 struct inquiry_entry
*ie
;
1803 struct hci_conn
*conn
;
1807 ie
= hci_inquiry_cache_lookup(hdev
, &ev
->bdaddr
);
1809 memcpy(ie
->data
.dev_class
, ev
->dev_class
, 3);
1811 conn
= hci_conn_hash_lookup_ba(hdev
, ev
->link_type
,
1814 conn
= hci_conn_add(hdev
, ev
->link_type
, &ev
->bdaddr
);
1816 BT_ERR("No memory for new connection");
1817 hci_dev_unlock(hdev
);
1822 memcpy(conn
->dev_class
, ev
->dev_class
, 3);
1824 hci_dev_unlock(hdev
);
1826 if (ev
->link_type
== ACL_LINK
||
1827 (!(flags
& HCI_PROTO_DEFER
) && !lmp_esco_capable(hdev
))) {
1828 struct hci_cp_accept_conn_req cp
;
1829 conn
->state
= BT_CONNECT
;
1831 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
1833 if (lmp_rswitch_capable(hdev
) && (mask
& HCI_LM_MASTER
))
1834 cp
.role
= 0x00; /* Become master */
1836 cp
.role
= 0x01; /* Remain slave */
1838 hci_send_cmd(hdev
, HCI_OP_ACCEPT_CONN_REQ
, sizeof(cp
),
1840 } else if (!(flags
& HCI_PROTO_DEFER
)) {
1841 struct hci_cp_accept_sync_conn_req cp
;
1842 conn
->state
= BT_CONNECT
;
1844 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
1845 cp
.pkt_type
= cpu_to_le16(conn
->pkt_type
);
1847 cp
.tx_bandwidth
= __constant_cpu_to_le32(0x00001f40);
1848 cp
.rx_bandwidth
= __constant_cpu_to_le32(0x00001f40);
1849 cp
.max_latency
= __constant_cpu_to_le16(0xffff);
1850 cp
.content_format
= cpu_to_le16(hdev
->voice_setting
);
1851 cp
.retrans_effort
= 0xff;
1853 hci_send_cmd(hdev
, HCI_OP_ACCEPT_SYNC_CONN_REQ
,
1856 conn
->state
= BT_CONNECT2
;
1857 hci_proto_connect_cfm(conn
, 0);
1861 /* Connection rejected */
1862 struct hci_cp_reject_conn_req cp
;
1864 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
1865 cp
.reason
= HCI_ERROR_REJ_BAD_ADDR
;
1866 hci_send_cmd(hdev
, HCI_OP_REJECT_CONN_REQ
, sizeof(cp
), &cp
);
1870 static u8
hci_to_mgmt_reason(u8 err
)
1873 case HCI_ERROR_CONNECTION_TIMEOUT
:
1874 return MGMT_DEV_DISCONN_TIMEOUT
;
1875 case HCI_ERROR_REMOTE_USER_TERM
:
1876 case HCI_ERROR_REMOTE_LOW_RESOURCES
:
1877 case HCI_ERROR_REMOTE_POWER_OFF
:
1878 return MGMT_DEV_DISCONN_REMOTE
;
1879 case HCI_ERROR_LOCAL_HOST_TERM
:
1880 return MGMT_DEV_DISCONN_LOCAL_HOST
;
1882 return MGMT_DEV_DISCONN_UNKNOWN
;
1886 static void hci_disconn_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1888 struct hci_ev_disconn_complete
*ev
= (void *) skb
->data
;
1889 struct hci_conn
*conn
;
1891 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
1895 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1899 if (ev
->status
== 0)
1900 conn
->state
= BT_CLOSED
;
1902 if (test_and_clear_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
) &&
1903 (conn
->type
== ACL_LINK
|| conn
->type
== LE_LINK
)) {
1905 mgmt_disconnect_failed(hdev
, &conn
->dst
, conn
->type
,
1906 conn
->dst_type
, ev
->status
);
1908 u8 reason
= hci_to_mgmt_reason(ev
->reason
);
1910 mgmt_device_disconnected(hdev
, &conn
->dst
, conn
->type
,
1911 conn
->dst_type
, reason
);
1915 if (ev
->status
== 0) {
1916 if (conn
->type
== ACL_LINK
&& conn
->flush_key
)
1917 hci_remove_link_key(hdev
, &conn
->dst
);
1918 hci_proto_disconn_cfm(conn
, ev
->reason
);
1923 hci_dev_unlock(hdev
);
1926 static void hci_auth_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1928 struct hci_ev_auth_complete
*ev
= (void *) skb
->data
;
1929 struct hci_conn
*conn
;
1931 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
1935 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1940 if (!hci_conn_ssp_enabled(conn
) &&
1941 test_bit(HCI_CONN_REAUTH_PEND
, &conn
->flags
)) {
1942 BT_INFO("re-auth of legacy device is not possible.");
1944 conn
->link_mode
|= HCI_LM_AUTH
;
1945 conn
->sec_level
= conn
->pending_sec_level
;
1948 mgmt_auth_failed(hdev
, &conn
->dst
, conn
->type
, conn
->dst_type
,
1952 clear_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
);
1953 clear_bit(HCI_CONN_REAUTH_PEND
, &conn
->flags
);
1955 if (conn
->state
== BT_CONFIG
) {
1956 if (!ev
->status
&& hci_conn_ssp_enabled(conn
)) {
1957 struct hci_cp_set_conn_encrypt cp
;
1958 cp
.handle
= ev
->handle
;
1960 hci_send_cmd(hdev
, HCI_OP_SET_CONN_ENCRYPT
, sizeof(cp
),
1963 conn
->state
= BT_CONNECTED
;
1964 hci_proto_connect_cfm(conn
, ev
->status
);
1968 hci_auth_cfm(conn
, ev
->status
);
1970 hci_conn_hold(conn
);
1971 conn
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
1975 if (test_bit(HCI_CONN_ENCRYPT_PEND
, &conn
->flags
)) {
1977 struct hci_cp_set_conn_encrypt cp
;
1978 cp
.handle
= ev
->handle
;
1980 hci_send_cmd(hdev
, HCI_OP_SET_CONN_ENCRYPT
, sizeof(cp
),
1983 clear_bit(HCI_CONN_ENCRYPT_PEND
, &conn
->flags
);
1984 hci_encrypt_cfm(conn
, ev
->status
, 0x00);
1989 hci_dev_unlock(hdev
);
1992 static void hci_remote_name_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1994 struct hci_ev_remote_name
*ev
= (void *) skb
->data
;
1995 struct hci_conn
*conn
;
1997 BT_DBG("%s", hdev
->name
);
1999 hci_conn_check_pending(hdev
);
2003 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
2005 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
2008 if (ev
->status
== 0)
2009 hci_check_pending_name(hdev
, conn
, &ev
->bdaddr
, ev
->name
,
2010 strnlen(ev
->name
, HCI_MAX_NAME_LENGTH
));
2012 hci_check_pending_name(hdev
, conn
, &ev
->bdaddr
, NULL
, 0);
2018 if (!hci_outgoing_auth_needed(hdev
, conn
))
2021 if (!test_and_set_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
)) {
2022 struct hci_cp_auth_requested cp
;
2023 cp
.handle
= __cpu_to_le16(conn
->handle
);
2024 hci_send_cmd(hdev
, HCI_OP_AUTH_REQUESTED
, sizeof(cp
), &cp
);
2028 hci_dev_unlock(hdev
);
2031 static void hci_encrypt_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2033 struct hci_ev_encrypt_change
*ev
= (void *) skb
->data
;
2034 struct hci_conn
*conn
;
2036 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2040 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2044 /* Encryption implies authentication */
2045 conn
->link_mode
|= HCI_LM_AUTH
;
2046 conn
->link_mode
|= HCI_LM_ENCRYPT
;
2047 conn
->sec_level
= conn
->pending_sec_level
;
2049 conn
->link_mode
&= ~HCI_LM_ENCRYPT
;
2052 clear_bit(HCI_CONN_ENCRYPT_PEND
, &conn
->flags
);
2054 if (ev
->status
&& conn
->state
== BT_CONNECTED
) {
2055 hci_disconnect(conn
, HCI_ERROR_AUTH_FAILURE
);
2060 if (conn
->state
== BT_CONFIG
) {
2062 conn
->state
= BT_CONNECTED
;
2064 hci_proto_connect_cfm(conn
, ev
->status
);
2067 hci_encrypt_cfm(conn
, ev
->status
, ev
->encrypt
);
2071 hci_dev_unlock(hdev
);
2074 static void hci_change_link_key_complete_evt(struct hci_dev
*hdev
,
2075 struct sk_buff
*skb
)
2077 struct hci_ev_change_link_key_complete
*ev
= (void *) skb
->data
;
2078 struct hci_conn
*conn
;
2080 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2084 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2087 conn
->link_mode
|= HCI_LM_SECURE
;
2089 clear_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
);
2091 hci_key_change_cfm(conn
, ev
->status
);
2094 hci_dev_unlock(hdev
);
2097 static void hci_remote_features_evt(struct hci_dev
*hdev
,
2098 struct sk_buff
*skb
)
2100 struct hci_ev_remote_features
*ev
= (void *) skb
->data
;
2101 struct hci_conn
*conn
;
2103 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2107 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2112 memcpy(conn
->features
, ev
->features
, 8);
2114 if (conn
->state
!= BT_CONFIG
)
2117 if (!ev
->status
&& lmp_ssp_capable(hdev
) && lmp_ssp_capable(conn
)) {
2118 struct hci_cp_read_remote_ext_features cp
;
2119 cp
.handle
= ev
->handle
;
2121 hci_send_cmd(hdev
, HCI_OP_READ_REMOTE_EXT_FEATURES
,
2126 if (!ev
->status
&& !test_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
)) {
2127 struct hci_cp_remote_name_req cp
;
2128 memset(&cp
, 0, sizeof(cp
));
2129 bacpy(&cp
.bdaddr
, &conn
->dst
);
2130 cp
.pscan_rep_mode
= 0x02;
2131 hci_send_cmd(hdev
, HCI_OP_REMOTE_NAME_REQ
, sizeof(cp
), &cp
);
2132 } else if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
))
2133 mgmt_device_connected(hdev
, &conn
->dst
, conn
->type
,
2134 conn
->dst_type
, 0, NULL
, 0,
2137 if (!hci_outgoing_auth_needed(hdev
, conn
)) {
2138 conn
->state
= BT_CONNECTED
;
2139 hci_proto_connect_cfm(conn
, ev
->status
);
2144 hci_dev_unlock(hdev
);
2147 static void hci_cmd_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2149 struct hci_ev_cmd_complete
*ev
= (void *) skb
->data
;
2150 u8 status
= skb
->data
[sizeof(*ev
)];
2153 skb_pull(skb
, sizeof(*ev
));
2155 opcode
= __le16_to_cpu(ev
->opcode
);
2158 case HCI_OP_INQUIRY_CANCEL
:
2159 hci_cc_inquiry_cancel(hdev
, skb
);
2162 case HCI_OP_PERIODIC_INQ
:
2163 hci_cc_periodic_inq(hdev
, skb
);
2166 case HCI_OP_EXIT_PERIODIC_INQ
:
2167 hci_cc_exit_periodic_inq(hdev
, skb
);
2170 case HCI_OP_REMOTE_NAME_REQ_CANCEL
:
2171 hci_cc_remote_name_req_cancel(hdev
, skb
);
2174 case HCI_OP_ROLE_DISCOVERY
:
2175 hci_cc_role_discovery(hdev
, skb
);
2178 case HCI_OP_READ_LINK_POLICY
:
2179 hci_cc_read_link_policy(hdev
, skb
);
2182 case HCI_OP_WRITE_LINK_POLICY
:
2183 hci_cc_write_link_policy(hdev
, skb
);
2186 case HCI_OP_READ_DEF_LINK_POLICY
:
2187 hci_cc_read_def_link_policy(hdev
, skb
);
2190 case HCI_OP_WRITE_DEF_LINK_POLICY
:
2191 hci_cc_write_def_link_policy(hdev
, skb
);
2195 hci_cc_reset(hdev
, skb
);
2198 case HCI_OP_WRITE_LOCAL_NAME
:
2199 hci_cc_write_local_name(hdev
, skb
);
2202 case HCI_OP_READ_LOCAL_NAME
:
2203 hci_cc_read_local_name(hdev
, skb
);
2206 case HCI_OP_WRITE_AUTH_ENABLE
:
2207 hci_cc_write_auth_enable(hdev
, skb
);
2210 case HCI_OP_WRITE_ENCRYPT_MODE
:
2211 hci_cc_write_encrypt_mode(hdev
, skb
);
2214 case HCI_OP_WRITE_SCAN_ENABLE
:
2215 hci_cc_write_scan_enable(hdev
, skb
);
2218 case HCI_OP_READ_CLASS_OF_DEV
:
2219 hci_cc_read_class_of_dev(hdev
, skb
);
2222 case HCI_OP_WRITE_CLASS_OF_DEV
:
2223 hci_cc_write_class_of_dev(hdev
, skb
);
2226 case HCI_OP_READ_VOICE_SETTING
:
2227 hci_cc_read_voice_setting(hdev
, skb
);
2230 case HCI_OP_WRITE_VOICE_SETTING
:
2231 hci_cc_write_voice_setting(hdev
, skb
);
2234 case HCI_OP_WRITE_SSP_MODE
:
2235 hci_cc_write_ssp_mode(hdev
, skb
);
2238 case HCI_OP_READ_LOCAL_VERSION
:
2239 hci_cc_read_local_version(hdev
, skb
);
2242 case HCI_OP_READ_LOCAL_COMMANDS
:
2243 hci_cc_read_local_commands(hdev
, skb
);
2246 case HCI_OP_READ_LOCAL_FEATURES
:
2247 hci_cc_read_local_features(hdev
, skb
);
2250 case HCI_OP_READ_LOCAL_EXT_FEATURES
:
2251 hci_cc_read_local_ext_features(hdev
, skb
);
2254 case HCI_OP_READ_BUFFER_SIZE
:
2255 hci_cc_read_buffer_size(hdev
, skb
);
2258 case HCI_OP_READ_BD_ADDR
:
2259 hci_cc_read_bd_addr(hdev
, skb
);
2262 case HCI_OP_READ_PAGE_SCAN_ACTIVITY
:
2263 hci_cc_read_page_scan_activity(hdev
, skb
);
2266 case HCI_OP_WRITE_PAGE_SCAN_ACTIVITY
:
2267 hci_cc_write_page_scan_activity(hdev
, skb
);
2270 case HCI_OP_READ_PAGE_SCAN_TYPE
:
2271 hci_cc_read_page_scan_type(hdev
, skb
);
2274 case HCI_OP_WRITE_PAGE_SCAN_TYPE
:
2275 hci_cc_write_page_scan_type(hdev
, skb
);
2278 case HCI_OP_READ_DATA_BLOCK_SIZE
:
2279 hci_cc_read_data_block_size(hdev
, skb
);
2282 case HCI_OP_READ_FLOW_CONTROL_MODE
:
2283 hci_cc_read_flow_control_mode(hdev
, skb
);
2286 case HCI_OP_READ_LOCAL_AMP_INFO
:
2287 hci_cc_read_local_amp_info(hdev
, skb
);
2290 case HCI_OP_READ_LOCAL_AMP_ASSOC
:
2291 hci_cc_read_local_amp_assoc(hdev
, skb
);
2294 case HCI_OP_READ_INQ_RSP_TX_POWER
:
2295 hci_cc_read_inq_rsp_tx_power(hdev
, skb
);
2298 case HCI_OP_PIN_CODE_REPLY
:
2299 hci_cc_pin_code_reply(hdev
, skb
);
2302 case HCI_OP_PIN_CODE_NEG_REPLY
:
2303 hci_cc_pin_code_neg_reply(hdev
, skb
);
2306 case HCI_OP_READ_LOCAL_OOB_DATA
:
2307 hci_cc_read_local_oob_data_reply(hdev
, skb
);
2310 case HCI_OP_LE_READ_BUFFER_SIZE
:
2311 hci_cc_le_read_buffer_size(hdev
, skb
);
2314 case HCI_OP_LE_READ_LOCAL_FEATURES
:
2315 hci_cc_le_read_local_features(hdev
, skb
);
2318 case HCI_OP_LE_READ_ADV_TX_POWER
:
2319 hci_cc_le_read_adv_tx_power(hdev
, skb
);
2322 case HCI_OP_USER_CONFIRM_REPLY
:
2323 hci_cc_user_confirm_reply(hdev
, skb
);
2326 case HCI_OP_USER_CONFIRM_NEG_REPLY
:
2327 hci_cc_user_confirm_neg_reply(hdev
, skb
);
2330 case HCI_OP_USER_PASSKEY_REPLY
:
2331 hci_cc_user_passkey_reply(hdev
, skb
);
2334 case HCI_OP_USER_PASSKEY_NEG_REPLY
:
2335 hci_cc_user_passkey_neg_reply(hdev
, skb
);
2338 case HCI_OP_LE_SET_SCAN_PARAM
:
2339 hci_cc_le_set_scan_param(hdev
, skb
);
2342 case HCI_OP_LE_SET_ADV_ENABLE
:
2343 hci_cc_le_set_adv_enable(hdev
, skb
);
2346 case HCI_OP_LE_SET_SCAN_ENABLE
:
2347 hci_cc_le_set_scan_enable(hdev
, skb
);
2350 case HCI_OP_LE_READ_WHITE_LIST_SIZE
:
2351 hci_cc_le_read_white_list_size(hdev
, skb
);
2354 case HCI_OP_LE_READ_SUPPORTED_STATES
:
2355 hci_cc_le_read_supported_states(hdev
, skb
);
2358 case HCI_OP_WRITE_LE_HOST_SUPPORTED
:
2359 hci_cc_write_le_host_supported(hdev
, skb
);
2362 case HCI_OP_WRITE_REMOTE_AMP_ASSOC
:
2363 hci_cc_write_remote_amp_assoc(hdev
, skb
);
2367 BT_DBG("%s opcode 0x%4.4x", hdev
->name
, opcode
);
2371 if (opcode
!= HCI_OP_NOP
)
2372 del_timer(&hdev
->cmd_timer
);
2374 hci_req_cmd_complete(hdev
, opcode
, status
);
2376 if (ev
->ncmd
&& !test_bit(HCI_RESET
, &hdev
->flags
)) {
2377 atomic_set(&hdev
->cmd_cnt
, 1);
2378 if (!skb_queue_empty(&hdev
->cmd_q
))
2379 queue_work(hdev
->workqueue
, &hdev
->cmd_work
);
2383 static void hci_cmd_status_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2385 struct hci_ev_cmd_status
*ev
= (void *) skb
->data
;
2388 skb_pull(skb
, sizeof(*ev
));
2390 opcode
= __le16_to_cpu(ev
->opcode
);
2393 case HCI_OP_INQUIRY
:
2394 hci_cs_inquiry(hdev
, ev
->status
);
2397 case HCI_OP_CREATE_CONN
:
2398 hci_cs_create_conn(hdev
, ev
->status
);
2401 case HCI_OP_ADD_SCO
:
2402 hci_cs_add_sco(hdev
, ev
->status
);
2405 case HCI_OP_AUTH_REQUESTED
:
2406 hci_cs_auth_requested(hdev
, ev
->status
);
2409 case HCI_OP_SET_CONN_ENCRYPT
:
2410 hci_cs_set_conn_encrypt(hdev
, ev
->status
);
2413 case HCI_OP_REMOTE_NAME_REQ
:
2414 hci_cs_remote_name_req(hdev
, ev
->status
);
2417 case HCI_OP_READ_REMOTE_FEATURES
:
2418 hci_cs_read_remote_features(hdev
, ev
->status
);
2421 case HCI_OP_READ_REMOTE_EXT_FEATURES
:
2422 hci_cs_read_remote_ext_features(hdev
, ev
->status
);
2425 case HCI_OP_SETUP_SYNC_CONN
:
2426 hci_cs_setup_sync_conn(hdev
, ev
->status
);
2429 case HCI_OP_SNIFF_MODE
:
2430 hci_cs_sniff_mode(hdev
, ev
->status
);
2433 case HCI_OP_EXIT_SNIFF_MODE
:
2434 hci_cs_exit_sniff_mode(hdev
, ev
->status
);
2437 case HCI_OP_DISCONNECT
:
2438 hci_cs_disconnect(hdev
, ev
->status
);
2441 case HCI_OP_LE_CREATE_CONN
:
2442 hci_cs_le_create_conn(hdev
, ev
->status
);
2445 case HCI_OP_CREATE_PHY_LINK
:
2446 hci_cs_create_phylink(hdev
, ev
->status
);
2449 case HCI_OP_ACCEPT_PHY_LINK
:
2450 hci_cs_accept_phylink(hdev
, ev
->status
);
2454 BT_DBG("%s opcode 0x%4.4x", hdev
->name
, opcode
);
2458 if (opcode
!= HCI_OP_NOP
)
2459 del_timer(&hdev
->cmd_timer
);
2461 hci_req_cmd_complete(hdev
, opcode
, ev
->status
);
2463 if (ev
->ncmd
&& !test_bit(HCI_RESET
, &hdev
->flags
)) {
2464 atomic_set(&hdev
->cmd_cnt
, 1);
2465 if (!skb_queue_empty(&hdev
->cmd_q
))
2466 queue_work(hdev
->workqueue
, &hdev
->cmd_work
);
2470 static void hci_role_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2472 struct hci_ev_role_change
*ev
= (void *) skb
->data
;
2473 struct hci_conn
*conn
;
2475 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2479 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
2483 conn
->link_mode
&= ~HCI_LM_MASTER
;
2485 conn
->link_mode
|= HCI_LM_MASTER
;
2488 clear_bit(HCI_CONN_RSWITCH_PEND
, &conn
->flags
);
2490 hci_role_switch_cfm(conn
, ev
->status
, ev
->role
);
2493 hci_dev_unlock(hdev
);
2496 static void hci_num_comp_pkts_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2498 struct hci_ev_num_comp_pkts
*ev
= (void *) skb
->data
;
2501 if (hdev
->flow_ctl_mode
!= HCI_FLOW_CTL_MODE_PACKET_BASED
) {
2502 BT_ERR("Wrong event for mode %d", hdev
->flow_ctl_mode
);
2506 if (skb
->len
< sizeof(*ev
) || skb
->len
< sizeof(*ev
) +
2507 ev
->num_hndl
* sizeof(struct hci_comp_pkts_info
)) {
2508 BT_DBG("%s bad parameters", hdev
->name
);
2512 BT_DBG("%s num_hndl %d", hdev
->name
, ev
->num_hndl
);
2514 for (i
= 0; i
< ev
->num_hndl
; i
++) {
2515 struct hci_comp_pkts_info
*info
= &ev
->handles
[i
];
2516 struct hci_conn
*conn
;
2517 __u16 handle
, count
;
2519 handle
= __le16_to_cpu(info
->handle
);
2520 count
= __le16_to_cpu(info
->count
);
2522 conn
= hci_conn_hash_lookup_handle(hdev
, handle
);
2526 conn
->sent
-= count
;
2528 switch (conn
->type
) {
2530 hdev
->acl_cnt
+= count
;
2531 if (hdev
->acl_cnt
> hdev
->acl_pkts
)
2532 hdev
->acl_cnt
= hdev
->acl_pkts
;
2536 if (hdev
->le_pkts
) {
2537 hdev
->le_cnt
+= count
;
2538 if (hdev
->le_cnt
> hdev
->le_pkts
)
2539 hdev
->le_cnt
= hdev
->le_pkts
;
2541 hdev
->acl_cnt
+= count
;
2542 if (hdev
->acl_cnt
> hdev
->acl_pkts
)
2543 hdev
->acl_cnt
= hdev
->acl_pkts
;
2548 hdev
->sco_cnt
+= count
;
2549 if (hdev
->sco_cnt
> hdev
->sco_pkts
)
2550 hdev
->sco_cnt
= hdev
->sco_pkts
;
2554 BT_ERR("Unknown type %d conn %p", conn
->type
, conn
);
2559 queue_work(hdev
->workqueue
, &hdev
->tx_work
);
2562 static struct hci_conn
*__hci_conn_lookup_handle(struct hci_dev
*hdev
,
2565 struct hci_chan
*chan
;
2567 switch (hdev
->dev_type
) {
2569 return hci_conn_hash_lookup_handle(hdev
, handle
);
2571 chan
= hci_chan_lookup_handle(hdev
, handle
);
2576 BT_ERR("%s unknown dev_type %d", hdev
->name
, hdev
->dev_type
);
2583 static void hci_num_comp_blocks_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2585 struct hci_ev_num_comp_blocks
*ev
= (void *) skb
->data
;
2588 if (hdev
->flow_ctl_mode
!= HCI_FLOW_CTL_MODE_BLOCK_BASED
) {
2589 BT_ERR("Wrong event for mode %d", hdev
->flow_ctl_mode
);
2593 if (skb
->len
< sizeof(*ev
) || skb
->len
< sizeof(*ev
) +
2594 ev
->num_hndl
* sizeof(struct hci_comp_blocks_info
)) {
2595 BT_DBG("%s bad parameters", hdev
->name
);
2599 BT_DBG("%s num_blocks %d num_hndl %d", hdev
->name
, ev
->num_blocks
,
2602 for (i
= 0; i
< ev
->num_hndl
; i
++) {
2603 struct hci_comp_blocks_info
*info
= &ev
->handles
[i
];
2604 struct hci_conn
*conn
= NULL
;
2605 __u16 handle
, block_count
;
2607 handle
= __le16_to_cpu(info
->handle
);
2608 block_count
= __le16_to_cpu(info
->blocks
);
2610 conn
= __hci_conn_lookup_handle(hdev
, handle
);
2614 conn
->sent
-= block_count
;
2616 switch (conn
->type
) {
2619 hdev
->block_cnt
+= block_count
;
2620 if (hdev
->block_cnt
> hdev
->num_blocks
)
2621 hdev
->block_cnt
= hdev
->num_blocks
;
2625 BT_ERR("Unknown type %d conn %p", conn
->type
, conn
);
2630 queue_work(hdev
->workqueue
, &hdev
->tx_work
);
2633 static void hci_mode_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2635 struct hci_ev_mode_change
*ev
= (void *) skb
->data
;
2636 struct hci_conn
*conn
;
2638 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2642 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2644 conn
->mode
= ev
->mode
;
2645 conn
->interval
= __le16_to_cpu(ev
->interval
);
2647 if (!test_and_clear_bit(HCI_CONN_MODE_CHANGE_PEND
,
2649 if (conn
->mode
== HCI_CM_ACTIVE
)
2650 set_bit(HCI_CONN_POWER_SAVE
, &conn
->flags
);
2652 clear_bit(HCI_CONN_POWER_SAVE
, &conn
->flags
);
2655 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND
, &conn
->flags
))
2656 hci_sco_setup(conn
, ev
->status
);
2659 hci_dev_unlock(hdev
);
2662 static void hci_pin_code_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2664 struct hci_ev_pin_code_req
*ev
= (void *) skb
->data
;
2665 struct hci_conn
*conn
;
2667 BT_DBG("%s", hdev
->name
);
2671 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
2675 if (conn
->state
== BT_CONNECTED
) {
2676 hci_conn_hold(conn
);
2677 conn
->disc_timeout
= HCI_PAIRING_TIMEOUT
;
2681 if (!test_bit(HCI_PAIRABLE
, &hdev
->dev_flags
))
2682 hci_send_cmd(hdev
, HCI_OP_PIN_CODE_NEG_REPLY
,
2683 sizeof(ev
->bdaddr
), &ev
->bdaddr
);
2684 else if (test_bit(HCI_MGMT
, &hdev
->dev_flags
)) {
2687 if (conn
->pending_sec_level
== BT_SECURITY_HIGH
)
2692 mgmt_pin_code_request(hdev
, &ev
->bdaddr
, secure
);
2696 hci_dev_unlock(hdev
);
2699 static void hci_link_key_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2701 struct hci_ev_link_key_req
*ev
= (void *) skb
->data
;
2702 struct hci_cp_link_key_reply cp
;
2703 struct hci_conn
*conn
;
2704 struct link_key
*key
;
2706 BT_DBG("%s", hdev
->name
);
2708 if (!test_bit(HCI_LINK_KEYS
, &hdev
->dev_flags
))
2713 key
= hci_find_link_key(hdev
, &ev
->bdaddr
);
2715 BT_DBG("%s link key not found for %pMR", hdev
->name
,
2720 BT_DBG("%s found key type %u for %pMR", hdev
->name
, key
->type
,
2723 if (!test_bit(HCI_DEBUG_KEYS
, &hdev
->dev_flags
) &&
2724 key
->type
== HCI_LK_DEBUG_COMBINATION
) {
2725 BT_DBG("%s ignoring debug key", hdev
->name
);
2729 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
2731 if (key
->type
== HCI_LK_UNAUTH_COMBINATION
&&
2732 conn
->auth_type
!= 0xff && (conn
->auth_type
& 0x01)) {
2733 BT_DBG("%s ignoring unauthenticated key", hdev
->name
);
2737 if (key
->type
== HCI_LK_COMBINATION
&& key
->pin_len
< 16 &&
2738 conn
->pending_sec_level
== BT_SECURITY_HIGH
) {
2739 BT_DBG("%s ignoring key unauthenticated for high security",
2744 conn
->key_type
= key
->type
;
2745 conn
->pin_length
= key
->pin_len
;
2748 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
2749 memcpy(cp
.link_key
, key
->val
, HCI_LINK_KEY_SIZE
);
2751 hci_send_cmd(hdev
, HCI_OP_LINK_KEY_REPLY
, sizeof(cp
), &cp
);
2753 hci_dev_unlock(hdev
);
2758 hci_send_cmd(hdev
, HCI_OP_LINK_KEY_NEG_REPLY
, 6, &ev
->bdaddr
);
2759 hci_dev_unlock(hdev
);
2762 static void hci_link_key_notify_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2764 struct hci_ev_link_key_notify
*ev
= (void *) skb
->data
;
2765 struct hci_conn
*conn
;
2768 BT_DBG("%s", hdev
->name
);
2772 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
2774 hci_conn_hold(conn
);
2775 conn
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
2776 pin_len
= conn
->pin_length
;
2778 if (ev
->key_type
!= HCI_LK_CHANGED_COMBINATION
)
2779 conn
->key_type
= ev
->key_type
;
2784 if (test_bit(HCI_LINK_KEYS
, &hdev
->dev_flags
))
2785 hci_add_link_key(hdev
, conn
, 1, &ev
->bdaddr
, ev
->link_key
,
2786 ev
->key_type
, pin_len
);
2788 hci_dev_unlock(hdev
);
2791 static void hci_clock_offset_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2793 struct hci_ev_clock_offset
*ev
= (void *) skb
->data
;
2794 struct hci_conn
*conn
;
2796 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2800 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2801 if (conn
&& !ev
->status
) {
2802 struct inquiry_entry
*ie
;
2804 ie
= hci_inquiry_cache_lookup(hdev
, &conn
->dst
);
2806 ie
->data
.clock_offset
= ev
->clock_offset
;
2807 ie
->timestamp
= jiffies
;
2811 hci_dev_unlock(hdev
);
2814 static void hci_pkt_type_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2816 struct hci_ev_pkt_type_change
*ev
= (void *) skb
->data
;
2817 struct hci_conn
*conn
;
2819 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2823 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2824 if (conn
&& !ev
->status
)
2825 conn
->pkt_type
= __le16_to_cpu(ev
->pkt_type
);
2827 hci_dev_unlock(hdev
);
2830 static void hci_pscan_rep_mode_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2832 struct hci_ev_pscan_rep_mode
*ev
= (void *) skb
->data
;
2833 struct inquiry_entry
*ie
;
2835 BT_DBG("%s", hdev
->name
);
2839 ie
= hci_inquiry_cache_lookup(hdev
, &ev
->bdaddr
);
2841 ie
->data
.pscan_rep_mode
= ev
->pscan_rep_mode
;
2842 ie
->timestamp
= jiffies
;
2845 hci_dev_unlock(hdev
);
2848 static void hci_inquiry_result_with_rssi_evt(struct hci_dev
*hdev
,
2849 struct sk_buff
*skb
)
2851 struct inquiry_data data
;
2852 int num_rsp
= *((__u8
*) skb
->data
);
2853 bool name_known
, ssp
;
2855 BT_DBG("%s num_rsp %d", hdev
->name
, num_rsp
);
2860 if (test_bit(HCI_PERIODIC_INQ
, &hdev
->dev_flags
))
2865 if ((skb
->len
- 1) / num_rsp
!= sizeof(struct inquiry_info_with_rssi
)) {
2866 struct inquiry_info_with_rssi_and_pscan_mode
*info
;
2867 info
= (void *) (skb
->data
+ 1);
2869 for (; num_rsp
; num_rsp
--, info
++) {
2870 bacpy(&data
.bdaddr
, &info
->bdaddr
);
2871 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
2872 data
.pscan_period_mode
= info
->pscan_period_mode
;
2873 data
.pscan_mode
= info
->pscan_mode
;
2874 memcpy(data
.dev_class
, info
->dev_class
, 3);
2875 data
.clock_offset
= info
->clock_offset
;
2876 data
.rssi
= info
->rssi
;
2877 data
.ssp_mode
= 0x00;
2879 name_known
= hci_inquiry_cache_update(hdev
, &data
,
2881 mgmt_device_found(hdev
, &info
->bdaddr
, ACL_LINK
, 0x00,
2882 info
->dev_class
, info
->rssi
,
2883 !name_known
, ssp
, NULL
, 0);
2886 struct inquiry_info_with_rssi
*info
= (void *) (skb
->data
+ 1);
2888 for (; num_rsp
; num_rsp
--, info
++) {
2889 bacpy(&data
.bdaddr
, &info
->bdaddr
);
2890 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
2891 data
.pscan_period_mode
= info
->pscan_period_mode
;
2892 data
.pscan_mode
= 0x00;
2893 memcpy(data
.dev_class
, info
->dev_class
, 3);
2894 data
.clock_offset
= info
->clock_offset
;
2895 data
.rssi
= info
->rssi
;
2896 data
.ssp_mode
= 0x00;
2897 name_known
= hci_inquiry_cache_update(hdev
, &data
,
2899 mgmt_device_found(hdev
, &info
->bdaddr
, ACL_LINK
, 0x00,
2900 info
->dev_class
, info
->rssi
,
2901 !name_known
, ssp
, NULL
, 0);
2905 hci_dev_unlock(hdev
);
2908 static void hci_remote_ext_features_evt(struct hci_dev
*hdev
,
2909 struct sk_buff
*skb
)
2911 struct hci_ev_remote_ext_features
*ev
= (void *) skb
->data
;
2912 struct hci_conn
*conn
;
2914 BT_DBG("%s", hdev
->name
);
2918 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2922 if (!ev
->status
&& ev
->page
== 0x01) {
2923 struct inquiry_entry
*ie
;
2925 ie
= hci_inquiry_cache_lookup(hdev
, &conn
->dst
);
2927 ie
->data
.ssp_mode
= (ev
->features
[0] & LMP_HOST_SSP
);
2929 if (ev
->features
[0] & LMP_HOST_SSP
)
2930 set_bit(HCI_CONN_SSP_ENABLED
, &conn
->flags
);
2933 if (conn
->state
!= BT_CONFIG
)
2936 if (!ev
->status
&& !test_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
)) {
2937 struct hci_cp_remote_name_req cp
;
2938 memset(&cp
, 0, sizeof(cp
));
2939 bacpy(&cp
.bdaddr
, &conn
->dst
);
2940 cp
.pscan_rep_mode
= 0x02;
2941 hci_send_cmd(hdev
, HCI_OP_REMOTE_NAME_REQ
, sizeof(cp
), &cp
);
2942 } else if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
))
2943 mgmt_device_connected(hdev
, &conn
->dst
, conn
->type
,
2944 conn
->dst_type
, 0, NULL
, 0,
2947 if (!hci_outgoing_auth_needed(hdev
, conn
)) {
2948 conn
->state
= BT_CONNECTED
;
2949 hci_proto_connect_cfm(conn
, ev
->status
);
2954 hci_dev_unlock(hdev
);
2957 static void hci_sync_conn_complete_evt(struct hci_dev
*hdev
,
2958 struct sk_buff
*skb
)
2960 struct hci_ev_sync_conn_complete
*ev
= (void *) skb
->data
;
2961 struct hci_conn
*conn
;
2963 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2967 conn
= hci_conn_hash_lookup_ba(hdev
, ev
->link_type
, &ev
->bdaddr
);
2969 if (ev
->link_type
== ESCO_LINK
)
2972 conn
= hci_conn_hash_lookup_ba(hdev
, ESCO_LINK
, &ev
->bdaddr
);
2976 conn
->type
= SCO_LINK
;
2979 switch (ev
->status
) {
2981 conn
->handle
= __le16_to_cpu(ev
->handle
);
2982 conn
->state
= BT_CONNECTED
;
2984 hci_conn_hold_device(conn
);
2985 hci_conn_add_sysfs(conn
);
2988 case 0x11: /* Unsupported Feature or Parameter Value */
2989 case 0x1c: /* SCO interval rejected */
2990 case 0x1a: /* Unsupported Remote Feature */
2991 case 0x1f: /* Unspecified error */
2992 if (conn
->out
&& conn
->attempt
< 2) {
2993 conn
->pkt_type
= (hdev
->esco_type
& SCO_ESCO_MASK
) |
2994 (hdev
->esco_type
& EDR_ESCO_MASK
);
2995 hci_setup_sync(conn
, conn
->link
->handle
);
3001 conn
->state
= BT_CLOSED
;
3005 hci_proto_connect_cfm(conn
, ev
->status
);
3010 hci_dev_unlock(hdev
);
3013 static void hci_extended_inquiry_result_evt(struct hci_dev
*hdev
,
3014 struct sk_buff
*skb
)
3016 struct inquiry_data data
;
3017 struct extended_inquiry_info
*info
= (void *) (skb
->data
+ 1);
3018 int num_rsp
= *((__u8
*) skb
->data
);
3021 BT_DBG("%s num_rsp %d", hdev
->name
, num_rsp
);
3026 if (test_bit(HCI_PERIODIC_INQ
, &hdev
->dev_flags
))
3031 for (; num_rsp
; num_rsp
--, info
++) {
3032 bool name_known
, ssp
;
3034 bacpy(&data
.bdaddr
, &info
->bdaddr
);
3035 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
3036 data
.pscan_period_mode
= info
->pscan_period_mode
;
3037 data
.pscan_mode
= 0x00;
3038 memcpy(data
.dev_class
, info
->dev_class
, 3);
3039 data
.clock_offset
= info
->clock_offset
;
3040 data
.rssi
= info
->rssi
;
3041 data
.ssp_mode
= 0x01;
3043 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3044 name_known
= eir_has_data_type(info
->data
,
3050 name_known
= hci_inquiry_cache_update(hdev
, &data
, name_known
,
3052 eir_len
= eir_get_length(info
->data
, sizeof(info
->data
));
3053 mgmt_device_found(hdev
, &info
->bdaddr
, ACL_LINK
, 0x00,
3054 info
->dev_class
, info
->rssi
, !name_known
,
3055 ssp
, info
->data
, eir_len
);
3058 hci_dev_unlock(hdev
);
3061 static void hci_key_refresh_complete_evt(struct hci_dev
*hdev
,
3062 struct sk_buff
*skb
)
3064 struct hci_ev_key_refresh_complete
*ev
= (void *) skb
->data
;
3065 struct hci_conn
*conn
;
3067 BT_DBG("%s status 0x%2.2x handle 0x%4.4x", hdev
->name
, ev
->status
,
3068 __le16_to_cpu(ev
->handle
));
3072 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
3077 conn
->sec_level
= conn
->pending_sec_level
;
3079 clear_bit(HCI_CONN_ENCRYPT_PEND
, &conn
->flags
);
3081 if (ev
->status
&& conn
->state
== BT_CONNECTED
) {
3082 hci_disconnect(conn
, HCI_ERROR_AUTH_FAILURE
);
3087 if (conn
->state
== BT_CONFIG
) {
3089 conn
->state
= BT_CONNECTED
;
3091 hci_proto_connect_cfm(conn
, ev
->status
);
3094 hci_auth_cfm(conn
, ev
->status
);
3096 hci_conn_hold(conn
);
3097 conn
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
3102 hci_dev_unlock(hdev
);
3105 static u8
hci_get_auth_req(struct hci_conn
*conn
)
3107 /* If remote requests dedicated bonding follow that lead */
3108 if (conn
->remote_auth
== 0x02 || conn
->remote_auth
== 0x03) {
3109 /* If both remote and local IO capabilities allow MITM
3110 * protection then require it, otherwise don't */
3111 if (conn
->remote_cap
== 0x03 || conn
->io_capability
== 0x03)
3117 /* If remote requests no-bonding follow that lead */
3118 if (conn
->remote_auth
== 0x00 || conn
->remote_auth
== 0x01)
3119 return conn
->remote_auth
| (conn
->auth_type
& 0x01);
3121 return conn
->auth_type
;
3124 static void hci_io_capa_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3126 struct hci_ev_io_capa_request
*ev
= (void *) skb
->data
;
3127 struct hci_conn
*conn
;
3129 BT_DBG("%s", hdev
->name
);
3133 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3137 hci_conn_hold(conn
);
3139 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3142 if (test_bit(HCI_PAIRABLE
, &hdev
->dev_flags
) ||
3143 (conn
->remote_auth
& ~0x01) == HCI_AT_NO_BONDING
) {
3144 struct hci_cp_io_capability_reply cp
;
3146 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
3147 /* Change the IO capability from KeyboardDisplay
3148 * to DisplayYesNo as it is not supported by BT spec. */
3149 cp
.capability
= (conn
->io_capability
== 0x04) ?
3150 0x01 : conn
->io_capability
;
3151 conn
->auth_type
= hci_get_auth_req(conn
);
3152 cp
.authentication
= conn
->auth_type
;
3154 if (hci_find_remote_oob_data(hdev
, &conn
->dst
) &&
3155 (conn
->out
|| test_bit(HCI_CONN_REMOTE_OOB
, &conn
->flags
)))
3160 hci_send_cmd(hdev
, HCI_OP_IO_CAPABILITY_REPLY
,
3163 struct hci_cp_io_capability_neg_reply cp
;
3165 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
3166 cp
.reason
= HCI_ERROR_PAIRING_NOT_ALLOWED
;
3168 hci_send_cmd(hdev
, HCI_OP_IO_CAPABILITY_NEG_REPLY
,
3173 hci_dev_unlock(hdev
);
3176 static void hci_io_capa_reply_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3178 struct hci_ev_io_capa_reply
*ev
= (void *) skb
->data
;
3179 struct hci_conn
*conn
;
3181 BT_DBG("%s", hdev
->name
);
3185 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3189 conn
->remote_cap
= ev
->capability
;
3190 conn
->remote_auth
= ev
->authentication
;
3192 set_bit(HCI_CONN_REMOTE_OOB
, &conn
->flags
);
3195 hci_dev_unlock(hdev
);
3198 static void hci_user_confirm_request_evt(struct hci_dev
*hdev
,
3199 struct sk_buff
*skb
)
3201 struct hci_ev_user_confirm_req
*ev
= (void *) skb
->data
;
3202 int loc_mitm
, rem_mitm
, confirm_hint
= 0;
3203 struct hci_conn
*conn
;
3205 BT_DBG("%s", hdev
->name
);
3209 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3212 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3216 loc_mitm
= (conn
->auth_type
& 0x01);
3217 rem_mitm
= (conn
->remote_auth
& 0x01);
3219 /* If we require MITM but the remote device can't provide that
3220 * (it has NoInputNoOutput) then reject the confirmation
3221 * request. The only exception is when we're dedicated bonding
3222 * initiators (connect_cfm_cb set) since then we always have the MITM
3224 if (!conn
->connect_cfm_cb
&& loc_mitm
&& conn
->remote_cap
== 0x03) {
3225 BT_DBG("Rejecting request: remote device can't provide MITM");
3226 hci_send_cmd(hdev
, HCI_OP_USER_CONFIRM_NEG_REPLY
,
3227 sizeof(ev
->bdaddr
), &ev
->bdaddr
);
3231 /* If no side requires MITM protection; auto-accept */
3232 if ((!loc_mitm
|| conn
->remote_cap
== 0x03) &&
3233 (!rem_mitm
|| conn
->io_capability
== 0x03)) {
3235 /* If we're not the initiators request authorization to
3236 * proceed from user space (mgmt_user_confirm with
3237 * confirm_hint set to 1). */
3238 if (!test_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
)) {
3239 BT_DBG("Confirming auto-accept as acceptor");
3244 BT_DBG("Auto-accept of user confirmation with %ums delay",
3245 hdev
->auto_accept_delay
);
3247 if (hdev
->auto_accept_delay
> 0) {
3248 int delay
= msecs_to_jiffies(hdev
->auto_accept_delay
);
3249 mod_timer(&conn
->auto_accept_timer
, jiffies
+ delay
);
3253 hci_send_cmd(hdev
, HCI_OP_USER_CONFIRM_REPLY
,
3254 sizeof(ev
->bdaddr
), &ev
->bdaddr
);
3259 mgmt_user_confirm_request(hdev
, &ev
->bdaddr
, ACL_LINK
, 0, ev
->passkey
,
3263 hci_dev_unlock(hdev
);
3266 static void hci_user_passkey_request_evt(struct hci_dev
*hdev
,
3267 struct sk_buff
*skb
)
3269 struct hci_ev_user_passkey_req
*ev
= (void *) skb
->data
;
3271 BT_DBG("%s", hdev
->name
);
3273 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3274 mgmt_user_passkey_request(hdev
, &ev
->bdaddr
, ACL_LINK
, 0);
3277 static void hci_user_passkey_notify_evt(struct hci_dev
*hdev
,
3278 struct sk_buff
*skb
)
3280 struct hci_ev_user_passkey_notify
*ev
= (void *) skb
->data
;
3281 struct hci_conn
*conn
;
3283 BT_DBG("%s", hdev
->name
);
3285 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3289 conn
->passkey_notify
= __le32_to_cpu(ev
->passkey
);
3290 conn
->passkey_entered
= 0;
3292 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3293 mgmt_user_passkey_notify(hdev
, &conn
->dst
, conn
->type
,
3294 conn
->dst_type
, conn
->passkey_notify
,
3295 conn
->passkey_entered
);
3298 static void hci_keypress_notify_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3300 struct hci_ev_keypress_notify
*ev
= (void *) skb
->data
;
3301 struct hci_conn
*conn
;
3303 BT_DBG("%s", hdev
->name
);
3305 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3310 case HCI_KEYPRESS_STARTED
:
3311 conn
->passkey_entered
= 0;
3314 case HCI_KEYPRESS_ENTERED
:
3315 conn
->passkey_entered
++;
3318 case HCI_KEYPRESS_ERASED
:
3319 conn
->passkey_entered
--;
3322 case HCI_KEYPRESS_CLEARED
:
3323 conn
->passkey_entered
= 0;
3326 case HCI_KEYPRESS_COMPLETED
:
3330 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3331 mgmt_user_passkey_notify(hdev
, &conn
->dst
, conn
->type
,
3332 conn
->dst_type
, conn
->passkey_notify
,
3333 conn
->passkey_entered
);
3336 static void hci_simple_pair_complete_evt(struct hci_dev
*hdev
,
3337 struct sk_buff
*skb
)
3339 struct hci_ev_simple_pair_complete
*ev
= (void *) skb
->data
;
3340 struct hci_conn
*conn
;
3342 BT_DBG("%s", hdev
->name
);
3346 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3350 /* To avoid duplicate auth_failed events to user space we check
3351 * the HCI_CONN_AUTH_PEND flag which will be set if we
3352 * initiated the authentication. A traditional auth_complete
3353 * event gets always produced as initiator and is also mapped to
3354 * the mgmt_auth_failed event */
3355 if (!test_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
) && ev
->status
)
3356 mgmt_auth_failed(hdev
, &conn
->dst
, conn
->type
, conn
->dst_type
,
3362 hci_dev_unlock(hdev
);
3365 static void hci_remote_host_features_evt(struct hci_dev
*hdev
,
3366 struct sk_buff
*skb
)
3368 struct hci_ev_remote_host_features
*ev
= (void *) skb
->data
;
3369 struct inquiry_entry
*ie
;
3371 BT_DBG("%s", hdev
->name
);
3375 ie
= hci_inquiry_cache_lookup(hdev
, &ev
->bdaddr
);
3377 ie
->data
.ssp_mode
= (ev
->features
[0] & LMP_HOST_SSP
);
3379 hci_dev_unlock(hdev
);
3382 static void hci_remote_oob_data_request_evt(struct hci_dev
*hdev
,
3383 struct sk_buff
*skb
)
3385 struct hci_ev_remote_oob_data_request
*ev
= (void *) skb
->data
;
3386 struct oob_data
*data
;
3388 BT_DBG("%s", hdev
->name
);
3392 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3395 data
= hci_find_remote_oob_data(hdev
, &ev
->bdaddr
);
3397 struct hci_cp_remote_oob_data_reply cp
;
3399 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
3400 memcpy(cp
.hash
, data
->hash
, sizeof(cp
.hash
));
3401 memcpy(cp
.randomizer
, data
->randomizer
, sizeof(cp
.randomizer
));
3403 hci_send_cmd(hdev
, HCI_OP_REMOTE_OOB_DATA_REPLY
, sizeof(cp
),
3406 struct hci_cp_remote_oob_data_neg_reply cp
;
3408 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
3409 hci_send_cmd(hdev
, HCI_OP_REMOTE_OOB_DATA_NEG_REPLY
, sizeof(cp
),
3414 hci_dev_unlock(hdev
);
3417 static void hci_phy_link_complete_evt(struct hci_dev
*hdev
,
3418 struct sk_buff
*skb
)
3420 struct hci_ev_phy_link_complete
*ev
= (void *) skb
->data
;
3421 struct hci_conn
*hcon
, *bredr_hcon
;
3423 BT_DBG("%s handle 0x%2.2x status 0x%2.2x", hdev
->name
, ev
->phy_handle
,
3428 hcon
= hci_conn_hash_lookup_handle(hdev
, ev
->phy_handle
);
3430 hci_dev_unlock(hdev
);
3436 hci_dev_unlock(hdev
);
3440 bredr_hcon
= hcon
->amp_mgr
->l2cap_conn
->hcon
;
3442 hcon
->state
= BT_CONNECTED
;
3443 bacpy(&hcon
->dst
, &bredr_hcon
->dst
);
3445 hci_conn_hold(hcon
);
3446 hcon
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
3449 hci_conn_hold_device(hcon
);
3450 hci_conn_add_sysfs(hcon
);
3452 amp_physical_cfm(bredr_hcon
, hcon
);
3454 hci_dev_unlock(hdev
);
3457 static void hci_loglink_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3459 struct hci_ev_logical_link_complete
*ev
= (void *) skb
->data
;
3460 struct hci_conn
*hcon
;
3461 struct hci_chan
*hchan
;
3462 struct amp_mgr
*mgr
;
3464 BT_DBG("%s log_handle 0x%4.4x phy_handle 0x%2.2x status 0x%2.2x",
3465 hdev
->name
, le16_to_cpu(ev
->handle
), ev
->phy_handle
,
3468 hcon
= hci_conn_hash_lookup_handle(hdev
, ev
->phy_handle
);
3472 /* Create AMP hchan */
3473 hchan
= hci_chan_create(hcon
);
3477 hchan
->handle
= le16_to_cpu(ev
->handle
);
3479 BT_DBG("hcon %p mgr %p hchan %p", hcon
, hcon
->amp_mgr
, hchan
);
3481 mgr
= hcon
->amp_mgr
;
3482 if (mgr
&& mgr
->bredr_chan
) {
3483 struct l2cap_chan
*bredr_chan
= mgr
->bredr_chan
;
3485 l2cap_chan_lock(bredr_chan
);
3487 bredr_chan
->conn
->mtu
= hdev
->block_mtu
;
3488 l2cap_logical_cfm(bredr_chan
, hchan
, 0);
3489 hci_conn_hold(hcon
);
3491 l2cap_chan_unlock(bredr_chan
);
3495 static void hci_disconn_loglink_complete_evt(struct hci_dev
*hdev
,
3496 struct sk_buff
*skb
)
3498 struct hci_ev_disconn_logical_link_complete
*ev
= (void *) skb
->data
;
3499 struct hci_chan
*hchan
;
3501 BT_DBG("%s log handle 0x%4.4x status 0x%2.2x", hdev
->name
,
3502 le16_to_cpu(ev
->handle
), ev
->status
);
3509 hchan
= hci_chan_lookup_handle(hdev
, le16_to_cpu(ev
->handle
));
3513 amp_destroy_logical_link(hchan
, ev
->reason
);
3516 hci_dev_unlock(hdev
);
3519 static void hci_disconn_phylink_complete_evt(struct hci_dev
*hdev
,
3520 struct sk_buff
*skb
)
3522 struct hci_ev_disconn_phy_link_complete
*ev
= (void *) skb
->data
;
3523 struct hci_conn
*hcon
;
3525 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
3532 hcon
= hci_conn_hash_lookup_handle(hdev
, ev
->phy_handle
);
3534 hcon
->state
= BT_CLOSED
;
3538 hci_dev_unlock(hdev
);
3541 static void hci_le_conn_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3543 struct hci_ev_le_conn_complete
*ev
= (void *) skb
->data
;
3544 struct hci_conn
*conn
;
3546 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
3550 conn
= hci_conn_hash_lookup_state(hdev
, LE_LINK
, BT_CONNECT
);
3552 conn
= hci_conn_add(hdev
, LE_LINK
, &ev
->bdaddr
);
3554 BT_ERR("No memory for new connection");
3558 conn
->dst_type
= ev
->bdaddr_type
;
3560 if (ev
->role
== LE_CONN_ROLE_MASTER
) {
3562 conn
->link_mode
|= HCI_LM_MASTER
;
3567 mgmt_connect_failed(hdev
, &conn
->dst
, conn
->type
,
3568 conn
->dst_type
, ev
->status
);
3569 hci_proto_connect_cfm(conn
, ev
->status
);
3570 conn
->state
= BT_CLOSED
;
3575 if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
))
3576 mgmt_device_connected(hdev
, &ev
->bdaddr
, conn
->type
,
3577 conn
->dst_type
, 0, NULL
, 0, NULL
);
3579 conn
->sec_level
= BT_SECURITY_LOW
;
3580 conn
->handle
= __le16_to_cpu(ev
->handle
);
3581 conn
->state
= BT_CONNECTED
;
3583 hci_conn_hold_device(conn
);
3584 hci_conn_add_sysfs(conn
);
3586 hci_proto_connect_cfm(conn
, ev
->status
);
3589 hci_dev_unlock(hdev
);
3592 static void hci_le_adv_report_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3594 u8 num_reports
= skb
->data
[0];
3595 void *ptr
= &skb
->data
[1];
3598 while (num_reports
--) {
3599 struct hci_ev_le_advertising_info
*ev
= ptr
;
3601 rssi
= ev
->data
[ev
->length
];
3602 mgmt_device_found(hdev
, &ev
->bdaddr
, LE_LINK
, ev
->bdaddr_type
,
3603 NULL
, rssi
, 0, 1, ev
->data
, ev
->length
);
3605 ptr
+= sizeof(*ev
) + ev
->length
+ 1;
3609 static void hci_le_ltk_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3611 struct hci_ev_le_ltk_req
*ev
= (void *) skb
->data
;
3612 struct hci_cp_le_ltk_reply cp
;
3613 struct hci_cp_le_ltk_neg_reply neg
;
3614 struct hci_conn
*conn
;
3615 struct smp_ltk
*ltk
;
3617 BT_DBG("%s handle 0x%4.4x", hdev
->name
, __le16_to_cpu(ev
->handle
));
3621 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
3625 ltk
= hci_find_ltk(hdev
, ev
->ediv
, ev
->random
);
3629 memcpy(cp
.ltk
, ltk
->val
, sizeof(ltk
->val
));
3630 cp
.handle
= cpu_to_le16(conn
->handle
);
3632 if (ltk
->authenticated
)
3633 conn
->sec_level
= BT_SECURITY_HIGH
;
3635 hci_send_cmd(hdev
, HCI_OP_LE_LTK_REPLY
, sizeof(cp
), &cp
);
3637 if (ltk
->type
& HCI_SMP_STK
) {
3638 list_del(<k
->list
);
3642 hci_dev_unlock(hdev
);
3647 neg
.handle
= ev
->handle
;
3648 hci_send_cmd(hdev
, HCI_OP_LE_LTK_NEG_REPLY
, sizeof(neg
), &neg
);
3649 hci_dev_unlock(hdev
);
3652 static void hci_le_meta_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3654 struct hci_ev_le_meta
*le_ev
= (void *) skb
->data
;
3656 skb_pull(skb
, sizeof(*le_ev
));
3658 switch (le_ev
->subevent
) {
3659 case HCI_EV_LE_CONN_COMPLETE
:
3660 hci_le_conn_complete_evt(hdev
, skb
);
3663 case HCI_EV_LE_ADVERTISING_REPORT
:
3664 hci_le_adv_report_evt(hdev
, skb
);
3667 case HCI_EV_LE_LTK_REQ
:
3668 hci_le_ltk_request_evt(hdev
, skb
);
3676 static void hci_chan_selected_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3678 struct hci_ev_channel_selected
*ev
= (void *) skb
->data
;
3679 struct hci_conn
*hcon
;
3681 BT_DBG("%s handle 0x%2.2x", hdev
->name
, ev
->phy_handle
);
3683 skb_pull(skb
, sizeof(*ev
));
3685 hcon
= hci_conn_hash_lookup_handle(hdev
, ev
->phy_handle
);
3689 amp_read_loc_assoc_final_data(hdev
, hcon
);
3692 void hci_event_packet(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3694 struct hci_event_hdr
*hdr
= (void *) skb
->data
;
3695 __u8 event
= hdr
->evt
;
3697 skb_pull(skb
, HCI_EVENT_HDR_SIZE
);
3700 case HCI_EV_INQUIRY_COMPLETE
:
3701 hci_inquiry_complete_evt(hdev
, skb
);
3704 case HCI_EV_INQUIRY_RESULT
:
3705 hci_inquiry_result_evt(hdev
, skb
);
3708 case HCI_EV_CONN_COMPLETE
:
3709 hci_conn_complete_evt(hdev
, skb
);
3712 case HCI_EV_CONN_REQUEST
:
3713 hci_conn_request_evt(hdev
, skb
);
3716 case HCI_EV_DISCONN_COMPLETE
:
3717 hci_disconn_complete_evt(hdev
, skb
);
3720 case HCI_EV_AUTH_COMPLETE
:
3721 hci_auth_complete_evt(hdev
, skb
);
3724 case HCI_EV_REMOTE_NAME
:
3725 hci_remote_name_evt(hdev
, skb
);
3728 case HCI_EV_ENCRYPT_CHANGE
:
3729 hci_encrypt_change_evt(hdev
, skb
);
3732 case HCI_EV_CHANGE_LINK_KEY_COMPLETE
:
3733 hci_change_link_key_complete_evt(hdev
, skb
);
3736 case HCI_EV_REMOTE_FEATURES
:
3737 hci_remote_features_evt(hdev
, skb
);
3740 case HCI_EV_CMD_COMPLETE
:
3741 hci_cmd_complete_evt(hdev
, skb
);
3744 case HCI_EV_CMD_STATUS
:
3745 hci_cmd_status_evt(hdev
, skb
);
3748 case HCI_EV_ROLE_CHANGE
:
3749 hci_role_change_evt(hdev
, skb
);
3752 case HCI_EV_NUM_COMP_PKTS
:
3753 hci_num_comp_pkts_evt(hdev
, skb
);
3756 case HCI_EV_MODE_CHANGE
:
3757 hci_mode_change_evt(hdev
, skb
);
3760 case HCI_EV_PIN_CODE_REQ
:
3761 hci_pin_code_request_evt(hdev
, skb
);
3764 case HCI_EV_LINK_KEY_REQ
:
3765 hci_link_key_request_evt(hdev
, skb
);
3768 case HCI_EV_LINK_KEY_NOTIFY
:
3769 hci_link_key_notify_evt(hdev
, skb
);
3772 case HCI_EV_CLOCK_OFFSET
:
3773 hci_clock_offset_evt(hdev
, skb
);
3776 case HCI_EV_PKT_TYPE_CHANGE
:
3777 hci_pkt_type_change_evt(hdev
, skb
);
3780 case HCI_EV_PSCAN_REP_MODE
:
3781 hci_pscan_rep_mode_evt(hdev
, skb
);
3784 case HCI_EV_INQUIRY_RESULT_WITH_RSSI
:
3785 hci_inquiry_result_with_rssi_evt(hdev
, skb
);
3788 case HCI_EV_REMOTE_EXT_FEATURES
:
3789 hci_remote_ext_features_evt(hdev
, skb
);
3792 case HCI_EV_SYNC_CONN_COMPLETE
:
3793 hci_sync_conn_complete_evt(hdev
, skb
);
3796 case HCI_EV_EXTENDED_INQUIRY_RESULT
:
3797 hci_extended_inquiry_result_evt(hdev
, skb
);
3800 case HCI_EV_KEY_REFRESH_COMPLETE
:
3801 hci_key_refresh_complete_evt(hdev
, skb
);
3804 case HCI_EV_IO_CAPA_REQUEST
:
3805 hci_io_capa_request_evt(hdev
, skb
);
3808 case HCI_EV_IO_CAPA_REPLY
:
3809 hci_io_capa_reply_evt(hdev
, skb
);
3812 case HCI_EV_USER_CONFIRM_REQUEST
:
3813 hci_user_confirm_request_evt(hdev
, skb
);
3816 case HCI_EV_USER_PASSKEY_REQUEST
:
3817 hci_user_passkey_request_evt(hdev
, skb
);
3820 case HCI_EV_USER_PASSKEY_NOTIFY
:
3821 hci_user_passkey_notify_evt(hdev
, skb
);
3824 case HCI_EV_KEYPRESS_NOTIFY
:
3825 hci_keypress_notify_evt(hdev
, skb
);
3828 case HCI_EV_SIMPLE_PAIR_COMPLETE
:
3829 hci_simple_pair_complete_evt(hdev
, skb
);
3832 case HCI_EV_REMOTE_HOST_FEATURES
:
3833 hci_remote_host_features_evt(hdev
, skb
);
3836 case HCI_EV_LE_META
:
3837 hci_le_meta_evt(hdev
, skb
);
3840 case HCI_EV_CHANNEL_SELECTED
:
3841 hci_chan_selected_evt(hdev
, skb
);
3844 case HCI_EV_REMOTE_OOB_DATA_REQUEST
:
3845 hci_remote_oob_data_request_evt(hdev
, skb
);
3848 case HCI_EV_PHY_LINK_COMPLETE
:
3849 hci_phy_link_complete_evt(hdev
, skb
);
3852 case HCI_EV_LOGICAL_LINK_COMPLETE
:
3853 hci_loglink_complete_evt(hdev
, skb
);
3856 case HCI_EV_DISCONN_LOGICAL_LINK_COMPLETE
:
3857 hci_disconn_loglink_complete_evt(hdev
, skb
);
3860 case HCI_EV_DISCONN_PHY_LINK_COMPLETE
:
3861 hci_disconn_phylink_complete_evt(hdev
, skb
);
3864 case HCI_EV_NUM_COMP_BLOCKS
:
3865 hci_num_comp_blocks_evt(hdev
, skb
);
3869 BT_DBG("%s event 0x%2.2x", hdev
->name
, event
);
3874 hdev
->stat
.evt_rx
++;