2 BlueZ - Bluetooth protocol stack for Linux
3 Copyright (c) 2000-2001, 2010, Code Aurora Forum. All rights reserved.
5 Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License version 2 as
9 published by the Free Software Foundation;
11 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
12 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
13 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
14 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
15 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
16 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
20 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
21 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
22 SOFTWARE IS DISCLAIMED.
25 /* Bluetooth HCI event handling. */
27 #include <asm/unaligned.h>
29 #include <net/bluetooth/bluetooth.h>
30 #include <net/bluetooth/hci_core.h>
31 #include <net/bluetooth/mgmt.h>
32 #include <net/bluetooth/a2mp.h>
33 #include <net/bluetooth/amp.h>
35 /* Handle HCI Event packets */
37 static void hci_cc_inquiry_cancel(struct hci_dev
*hdev
, struct sk_buff
*skb
)
39 __u8 status
= *((__u8
*) skb
->data
);
41 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
46 clear_bit(HCI_INQUIRY
, &hdev
->flags
);
47 smp_mb__after_clear_bit(); /* wake_up_bit advises about this barrier */
48 wake_up_bit(&hdev
->flags
, HCI_INQUIRY
);
51 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
54 hci_conn_check_pending(hdev
);
57 static void hci_cc_periodic_inq(struct hci_dev
*hdev
, struct sk_buff
*skb
)
59 __u8 status
= *((__u8
*) skb
->data
);
61 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
66 set_bit(HCI_PERIODIC_INQ
, &hdev
->dev_flags
);
69 static void hci_cc_exit_periodic_inq(struct hci_dev
*hdev
, struct sk_buff
*skb
)
71 __u8 status
= *((__u8
*) skb
->data
);
73 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
78 clear_bit(HCI_PERIODIC_INQ
, &hdev
->dev_flags
);
80 hci_conn_check_pending(hdev
);
83 static void hci_cc_remote_name_req_cancel(struct hci_dev
*hdev
,
86 BT_DBG("%s", hdev
->name
);
89 static void hci_cc_role_discovery(struct hci_dev
*hdev
, struct sk_buff
*skb
)
91 struct hci_rp_role_discovery
*rp
= (void *) skb
->data
;
92 struct hci_conn
*conn
;
94 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
101 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(rp
->handle
));
104 conn
->link_mode
&= ~HCI_LM_MASTER
;
106 conn
->link_mode
|= HCI_LM_MASTER
;
109 hci_dev_unlock(hdev
);
112 static void hci_cc_read_link_policy(struct hci_dev
*hdev
, struct sk_buff
*skb
)
114 struct hci_rp_read_link_policy
*rp
= (void *) skb
->data
;
115 struct hci_conn
*conn
;
117 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
124 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(rp
->handle
));
126 conn
->link_policy
= __le16_to_cpu(rp
->policy
);
128 hci_dev_unlock(hdev
);
131 static void hci_cc_write_link_policy(struct hci_dev
*hdev
, struct sk_buff
*skb
)
133 struct hci_rp_write_link_policy
*rp
= (void *) skb
->data
;
134 struct hci_conn
*conn
;
137 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
142 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_LINK_POLICY
);
148 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(rp
->handle
));
150 conn
->link_policy
= get_unaligned_le16(sent
+ 2);
152 hci_dev_unlock(hdev
);
155 static void hci_cc_read_def_link_policy(struct hci_dev
*hdev
,
158 struct hci_rp_read_def_link_policy
*rp
= (void *) skb
->data
;
160 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
165 hdev
->link_policy
= __le16_to_cpu(rp
->policy
);
168 static void hci_cc_write_def_link_policy(struct hci_dev
*hdev
,
171 __u8 status
= *((__u8
*) skb
->data
);
174 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
176 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_DEF_LINK_POLICY
);
181 hdev
->link_policy
= get_unaligned_le16(sent
);
184 static void hci_cc_reset(struct hci_dev
*hdev
, struct sk_buff
*skb
)
186 __u8 status
= *((__u8
*) skb
->data
);
188 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
190 clear_bit(HCI_RESET
, &hdev
->flags
);
192 /* Reset all non-persistent flags */
193 hdev
->dev_flags
&= ~HCI_PERSISTENT_MASK
;
195 hdev
->discovery
.state
= DISCOVERY_STOPPED
;
196 hdev
->inq_tx_power
= HCI_TX_POWER_INVALID
;
197 hdev
->adv_tx_power
= HCI_TX_POWER_INVALID
;
199 memset(hdev
->adv_data
, 0, sizeof(hdev
->adv_data
));
200 hdev
->adv_data_len
= 0;
203 static void hci_cc_write_local_name(struct hci_dev
*hdev
, struct sk_buff
*skb
)
205 __u8 status
= *((__u8
*) skb
->data
);
208 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
210 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_LOCAL_NAME
);
216 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
217 mgmt_set_local_name_complete(hdev
, sent
, status
);
219 memcpy(hdev
->dev_name
, sent
, HCI_MAX_NAME_LENGTH
);
221 hci_dev_unlock(hdev
);
224 static void hci_cc_read_local_name(struct hci_dev
*hdev
, struct sk_buff
*skb
)
226 struct hci_rp_read_local_name
*rp
= (void *) skb
->data
;
228 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
233 if (test_bit(HCI_SETUP
, &hdev
->dev_flags
))
234 memcpy(hdev
->dev_name
, rp
->name
, HCI_MAX_NAME_LENGTH
);
237 static void hci_cc_write_auth_enable(struct hci_dev
*hdev
, struct sk_buff
*skb
)
239 __u8 status
= *((__u8
*) skb
->data
);
242 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
244 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_AUTH_ENABLE
);
249 __u8 param
= *((__u8
*) sent
);
251 if (param
== AUTH_ENABLED
)
252 set_bit(HCI_AUTH
, &hdev
->flags
);
254 clear_bit(HCI_AUTH
, &hdev
->flags
);
257 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
258 mgmt_auth_enable_complete(hdev
, status
);
261 static void hci_cc_write_encrypt_mode(struct hci_dev
*hdev
, struct sk_buff
*skb
)
263 __u8 status
= *((__u8
*) skb
->data
);
266 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
268 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_ENCRYPT_MODE
);
273 __u8 param
= *((__u8
*) sent
);
276 set_bit(HCI_ENCRYPT
, &hdev
->flags
);
278 clear_bit(HCI_ENCRYPT
, &hdev
->flags
);
282 static void hci_cc_write_scan_enable(struct hci_dev
*hdev
, struct sk_buff
*skb
)
284 __u8 param
, status
= *((__u8
*) skb
->data
);
285 int old_pscan
, old_iscan
;
288 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
290 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_SCAN_ENABLE
);
294 param
= *((__u8
*) sent
);
299 mgmt_write_scan_failed(hdev
, param
, status
);
300 hdev
->discov_timeout
= 0;
304 old_pscan
= test_and_clear_bit(HCI_PSCAN
, &hdev
->flags
);
305 old_iscan
= test_and_clear_bit(HCI_ISCAN
, &hdev
->flags
);
307 if (param
& SCAN_INQUIRY
) {
308 set_bit(HCI_ISCAN
, &hdev
->flags
);
310 mgmt_discoverable(hdev
, 1);
311 if (hdev
->discov_timeout
> 0) {
312 int to
= msecs_to_jiffies(hdev
->discov_timeout
* 1000);
313 queue_delayed_work(hdev
->workqueue
, &hdev
->discov_off
,
316 } else if (old_iscan
)
317 mgmt_discoverable(hdev
, 0);
319 if (param
& SCAN_PAGE
) {
320 set_bit(HCI_PSCAN
, &hdev
->flags
);
322 mgmt_connectable(hdev
, 1);
323 } else if (old_pscan
)
324 mgmt_connectable(hdev
, 0);
327 hci_dev_unlock(hdev
);
330 static void hci_cc_read_class_of_dev(struct hci_dev
*hdev
, struct sk_buff
*skb
)
332 struct hci_rp_read_class_of_dev
*rp
= (void *) skb
->data
;
334 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
339 memcpy(hdev
->dev_class
, rp
->dev_class
, 3);
341 BT_DBG("%s class 0x%.2x%.2x%.2x", hdev
->name
,
342 hdev
->dev_class
[2], hdev
->dev_class
[1], hdev
->dev_class
[0]);
345 static void hci_cc_write_class_of_dev(struct hci_dev
*hdev
, struct sk_buff
*skb
)
347 __u8 status
= *((__u8
*) skb
->data
);
350 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
352 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_CLASS_OF_DEV
);
359 memcpy(hdev
->dev_class
, sent
, 3);
361 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
362 mgmt_set_class_of_dev_complete(hdev
, sent
, status
);
364 hci_dev_unlock(hdev
);
367 static void hci_cc_read_voice_setting(struct hci_dev
*hdev
, struct sk_buff
*skb
)
369 struct hci_rp_read_voice_setting
*rp
= (void *) skb
->data
;
372 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
377 setting
= __le16_to_cpu(rp
->voice_setting
);
379 if (hdev
->voice_setting
== setting
)
382 hdev
->voice_setting
= setting
;
384 BT_DBG("%s voice setting 0x%4.4x", hdev
->name
, setting
);
387 hdev
->notify(hdev
, HCI_NOTIFY_VOICE_SETTING
);
390 static void hci_cc_write_voice_setting(struct hci_dev
*hdev
,
393 __u8 status
= *((__u8
*) skb
->data
);
397 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
402 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_VOICE_SETTING
);
406 setting
= get_unaligned_le16(sent
);
408 if (hdev
->voice_setting
== setting
)
411 hdev
->voice_setting
= setting
;
413 BT_DBG("%s voice setting 0x%4.4x", hdev
->name
, setting
);
416 hdev
->notify(hdev
, HCI_NOTIFY_VOICE_SETTING
);
419 static void hci_cc_write_ssp_mode(struct hci_dev
*hdev
, struct sk_buff
*skb
)
421 __u8 status
= *((__u8
*) skb
->data
);
422 struct hci_cp_write_ssp_mode
*sent
;
424 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
426 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_SSP_MODE
);
432 hdev
->features
[1][0] |= LMP_HOST_SSP
;
434 hdev
->features
[1][0] &= ~LMP_HOST_SSP
;
437 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
438 mgmt_ssp_enable_complete(hdev
, sent
->mode
, status
);
441 set_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
);
443 clear_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
);
447 static void hci_cc_read_local_version(struct hci_dev
*hdev
, struct sk_buff
*skb
)
449 struct hci_rp_read_local_version
*rp
= (void *) skb
->data
;
451 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
456 hdev
->hci_ver
= rp
->hci_ver
;
457 hdev
->hci_rev
= __le16_to_cpu(rp
->hci_rev
);
458 hdev
->lmp_ver
= rp
->lmp_ver
;
459 hdev
->manufacturer
= __le16_to_cpu(rp
->manufacturer
);
460 hdev
->lmp_subver
= __le16_to_cpu(rp
->lmp_subver
);
462 BT_DBG("%s manufacturer 0x%4.4x hci ver %d:%d", hdev
->name
,
463 hdev
->manufacturer
, hdev
->hci_ver
, hdev
->hci_rev
);
466 static void hci_cc_read_local_commands(struct hci_dev
*hdev
,
469 struct hci_rp_read_local_commands
*rp
= (void *) skb
->data
;
471 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
474 memcpy(hdev
->commands
, rp
->commands
, sizeof(hdev
->commands
));
477 static void hci_cc_read_local_features(struct hci_dev
*hdev
,
480 struct hci_rp_read_local_features
*rp
= (void *) skb
->data
;
482 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
487 memcpy(hdev
->features
, rp
->features
, 8);
489 /* Adjust default settings according to features
490 * supported by device. */
492 if (hdev
->features
[0][0] & LMP_3SLOT
)
493 hdev
->pkt_type
|= (HCI_DM3
| HCI_DH3
);
495 if (hdev
->features
[0][0] & LMP_5SLOT
)
496 hdev
->pkt_type
|= (HCI_DM5
| HCI_DH5
);
498 if (hdev
->features
[0][1] & LMP_HV2
) {
499 hdev
->pkt_type
|= (HCI_HV2
);
500 hdev
->esco_type
|= (ESCO_HV2
);
503 if (hdev
->features
[0][1] & LMP_HV3
) {
504 hdev
->pkt_type
|= (HCI_HV3
);
505 hdev
->esco_type
|= (ESCO_HV3
);
508 if (lmp_esco_capable(hdev
))
509 hdev
->esco_type
|= (ESCO_EV3
);
511 if (hdev
->features
[0][4] & LMP_EV4
)
512 hdev
->esco_type
|= (ESCO_EV4
);
514 if (hdev
->features
[0][4] & LMP_EV5
)
515 hdev
->esco_type
|= (ESCO_EV5
);
517 if (hdev
->features
[0][5] & LMP_EDR_ESCO_2M
)
518 hdev
->esco_type
|= (ESCO_2EV3
);
520 if (hdev
->features
[0][5] & LMP_EDR_ESCO_3M
)
521 hdev
->esco_type
|= (ESCO_3EV3
);
523 if (hdev
->features
[0][5] & LMP_EDR_3S_ESCO
)
524 hdev
->esco_type
|= (ESCO_2EV5
| ESCO_3EV5
);
526 BT_DBG("%s features 0x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x", hdev
->name
,
527 hdev
->features
[0][0], hdev
->features
[0][1],
528 hdev
->features
[0][2], hdev
->features
[0][3],
529 hdev
->features
[0][4], hdev
->features
[0][5],
530 hdev
->features
[0][6], hdev
->features
[0][7]);
533 static void hci_cc_read_local_ext_features(struct hci_dev
*hdev
,
536 struct hci_rp_read_local_ext_features
*rp
= (void *) skb
->data
;
538 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
543 hdev
->max_page
= rp
->max_page
;
545 if (rp
->page
< HCI_MAX_PAGES
)
546 memcpy(hdev
->features
[rp
->page
], rp
->features
, 8);
549 static void hci_cc_read_flow_control_mode(struct hci_dev
*hdev
,
552 struct hci_rp_read_flow_control_mode
*rp
= (void *) skb
->data
;
554 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
557 hdev
->flow_ctl_mode
= rp
->mode
;
560 static void hci_cc_read_buffer_size(struct hci_dev
*hdev
, struct sk_buff
*skb
)
562 struct hci_rp_read_buffer_size
*rp
= (void *) skb
->data
;
564 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
569 hdev
->acl_mtu
= __le16_to_cpu(rp
->acl_mtu
);
570 hdev
->sco_mtu
= rp
->sco_mtu
;
571 hdev
->acl_pkts
= __le16_to_cpu(rp
->acl_max_pkt
);
572 hdev
->sco_pkts
= __le16_to_cpu(rp
->sco_max_pkt
);
574 if (test_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE
, &hdev
->quirks
)) {
579 hdev
->acl_cnt
= hdev
->acl_pkts
;
580 hdev
->sco_cnt
= hdev
->sco_pkts
;
582 BT_DBG("%s acl mtu %d:%d sco mtu %d:%d", hdev
->name
, hdev
->acl_mtu
,
583 hdev
->acl_pkts
, hdev
->sco_mtu
, hdev
->sco_pkts
);
586 static void hci_cc_read_bd_addr(struct hci_dev
*hdev
, struct sk_buff
*skb
)
588 struct hci_rp_read_bd_addr
*rp
= (void *) skb
->data
;
590 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
593 bacpy(&hdev
->bdaddr
, &rp
->bdaddr
);
596 static void hci_cc_read_page_scan_activity(struct hci_dev
*hdev
,
599 struct hci_rp_read_page_scan_activity
*rp
= (void *) skb
->data
;
601 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
603 if (test_bit(HCI_INIT
, &hdev
->flags
) && !rp
->status
) {
604 hdev
->page_scan_interval
= __le16_to_cpu(rp
->interval
);
605 hdev
->page_scan_window
= __le16_to_cpu(rp
->window
);
609 static void hci_cc_write_page_scan_activity(struct hci_dev
*hdev
,
612 u8 status
= *((u8
*) skb
->data
);
613 struct hci_cp_write_page_scan_activity
*sent
;
615 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
620 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_PAGE_SCAN_ACTIVITY
);
624 hdev
->page_scan_interval
= __le16_to_cpu(sent
->interval
);
625 hdev
->page_scan_window
= __le16_to_cpu(sent
->window
);
628 static void hci_cc_read_page_scan_type(struct hci_dev
*hdev
,
631 struct hci_rp_read_page_scan_type
*rp
= (void *) skb
->data
;
633 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
635 if (test_bit(HCI_INIT
, &hdev
->flags
) && !rp
->status
)
636 hdev
->page_scan_type
= rp
->type
;
639 static void hci_cc_write_page_scan_type(struct hci_dev
*hdev
,
642 u8 status
= *((u8
*) skb
->data
);
645 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
650 type
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_PAGE_SCAN_TYPE
);
652 hdev
->page_scan_type
= *type
;
655 static void hci_cc_read_data_block_size(struct hci_dev
*hdev
,
658 struct hci_rp_read_data_block_size
*rp
= (void *) skb
->data
;
660 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
665 hdev
->block_mtu
= __le16_to_cpu(rp
->max_acl_len
);
666 hdev
->block_len
= __le16_to_cpu(rp
->block_len
);
667 hdev
->num_blocks
= __le16_to_cpu(rp
->num_blocks
);
669 hdev
->block_cnt
= hdev
->num_blocks
;
671 BT_DBG("%s blk mtu %d cnt %d len %d", hdev
->name
, hdev
->block_mtu
,
672 hdev
->block_cnt
, hdev
->block_len
);
675 static void hci_cc_read_local_amp_info(struct hci_dev
*hdev
,
678 struct hci_rp_read_local_amp_info
*rp
= (void *) skb
->data
;
680 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
685 hdev
->amp_status
= rp
->amp_status
;
686 hdev
->amp_total_bw
= __le32_to_cpu(rp
->total_bw
);
687 hdev
->amp_max_bw
= __le32_to_cpu(rp
->max_bw
);
688 hdev
->amp_min_latency
= __le32_to_cpu(rp
->min_latency
);
689 hdev
->amp_max_pdu
= __le32_to_cpu(rp
->max_pdu
);
690 hdev
->amp_type
= rp
->amp_type
;
691 hdev
->amp_pal_cap
= __le16_to_cpu(rp
->pal_cap
);
692 hdev
->amp_assoc_size
= __le16_to_cpu(rp
->max_assoc_size
);
693 hdev
->amp_be_flush_to
= __le32_to_cpu(rp
->be_flush_to
);
694 hdev
->amp_max_flush_to
= __le32_to_cpu(rp
->max_flush_to
);
697 a2mp_send_getinfo_rsp(hdev
);
700 static void hci_cc_read_local_amp_assoc(struct hci_dev
*hdev
,
703 struct hci_rp_read_local_amp_assoc
*rp
= (void *) skb
->data
;
704 struct amp_assoc
*assoc
= &hdev
->loc_assoc
;
705 size_t rem_len
, frag_len
;
707 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
712 frag_len
= skb
->len
- sizeof(*rp
);
713 rem_len
= __le16_to_cpu(rp
->rem_len
);
715 if (rem_len
> frag_len
) {
716 BT_DBG("frag_len %zu rem_len %zu", frag_len
, rem_len
);
718 memcpy(assoc
->data
+ assoc
->offset
, rp
->frag
, frag_len
);
719 assoc
->offset
+= frag_len
;
721 /* Read other fragments */
722 amp_read_loc_assoc_frag(hdev
, rp
->phy_handle
);
727 memcpy(assoc
->data
+ assoc
->offset
, rp
->frag
, rem_len
);
728 assoc
->len
= assoc
->offset
+ rem_len
;
732 /* Send A2MP Rsp when all fragments are received */
733 a2mp_send_getampassoc_rsp(hdev
, rp
->status
);
734 a2mp_send_create_phy_link_req(hdev
, rp
->status
);
737 static void hci_cc_read_inq_rsp_tx_power(struct hci_dev
*hdev
,
740 struct hci_rp_read_inq_rsp_tx_power
*rp
= (void *) skb
->data
;
742 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
745 hdev
->inq_tx_power
= rp
->tx_power
;
748 static void hci_cc_pin_code_reply(struct hci_dev
*hdev
, struct sk_buff
*skb
)
750 struct hci_rp_pin_code_reply
*rp
= (void *) skb
->data
;
751 struct hci_cp_pin_code_reply
*cp
;
752 struct hci_conn
*conn
;
754 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
758 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
759 mgmt_pin_code_reply_complete(hdev
, &rp
->bdaddr
, rp
->status
);
764 cp
= hci_sent_cmd_data(hdev
, HCI_OP_PIN_CODE_REPLY
);
768 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &cp
->bdaddr
);
770 conn
->pin_length
= cp
->pin_len
;
773 hci_dev_unlock(hdev
);
776 static void hci_cc_pin_code_neg_reply(struct hci_dev
*hdev
, struct sk_buff
*skb
)
778 struct hci_rp_pin_code_neg_reply
*rp
= (void *) skb
->data
;
780 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
784 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
785 mgmt_pin_code_neg_reply_complete(hdev
, &rp
->bdaddr
,
788 hci_dev_unlock(hdev
);
791 static void hci_cc_le_read_buffer_size(struct hci_dev
*hdev
,
794 struct hci_rp_le_read_buffer_size
*rp
= (void *) skb
->data
;
796 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
801 hdev
->le_mtu
= __le16_to_cpu(rp
->le_mtu
);
802 hdev
->le_pkts
= rp
->le_max_pkt
;
804 hdev
->le_cnt
= hdev
->le_pkts
;
806 BT_DBG("%s le mtu %d:%d", hdev
->name
, hdev
->le_mtu
, hdev
->le_pkts
);
809 static void hci_cc_le_read_local_features(struct hci_dev
*hdev
,
812 struct hci_rp_le_read_local_features
*rp
= (void *) skb
->data
;
814 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
817 memcpy(hdev
->le_features
, rp
->features
, 8);
820 static void hci_cc_le_read_adv_tx_power(struct hci_dev
*hdev
,
823 struct hci_rp_le_read_adv_tx_power
*rp
= (void *) skb
->data
;
825 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
828 hdev
->adv_tx_power
= rp
->tx_power
;
831 static void hci_cc_user_confirm_reply(struct hci_dev
*hdev
, struct sk_buff
*skb
)
833 struct hci_rp_user_confirm_reply
*rp
= (void *) skb
->data
;
835 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
839 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
840 mgmt_user_confirm_reply_complete(hdev
, &rp
->bdaddr
, ACL_LINK
, 0,
843 hci_dev_unlock(hdev
);
846 static void hci_cc_user_confirm_neg_reply(struct hci_dev
*hdev
,
849 struct hci_rp_user_confirm_reply
*rp
= (void *) skb
->data
;
851 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
855 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
856 mgmt_user_confirm_neg_reply_complete(hdev
, &rp
->bdaddr
,
857 ACL_LINK
, 0, rp
->status
);
859 hci_dev_unlock(hdev
);
862 static void hci_cc_user_passkey_reply(struct hci_dev
*hdev
, struct sk_buff
*skb
)
864 struct hci_rp_user_confirm_reply
*rp
= (void *) skb
->data
;
866 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
870 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
871 mgmt_user_passkey_reply_complete(hdev
, &rp
->bdaddr
, ACL_LINK
,
874 hci_dev_unlock(hdev
);
877 static void hci_cc_user_passkey_neg_reply(struct hci_dev
*hdev
,
880 struct hci_rp_user_confirm_reply
*rp
= (void *) skb
->data
;
882 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
886 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
887 mgmt_user_passkey_neg_reply_complete(hdev
, &rp
->bdaddr
,
888 ACL_LINK
, 0, rp
->status
);
890 hci_dev_unlock(hdev
);
893 static void hci_cc_read_local_oob_data_reply(struct hci_dev
*hdev
,
896 struct hci_rp_read_local_oob_data
*rp
= (void *) skb
->data
;
898 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
901 mgmt_read_local_oob_data_reply_complete(hdev
, rp
->hash
,
902 rp
->randomizer
, rp
->status
);
903 hci_dev_unlock(hdev
);
906 static void hci_cc_le_set_adv_enable(struct hci_dev
*hdev
, struct sk_buff
*skb
)
908 __u8
*sent
, status
= *((__u8
*) skb
->data
);
910 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
912 sent
= hci_sent_cmd_data(hdev
, HCI_OP_LE_SET_ADV_ENABLE
);
920 set_bit(HCI_LE_PERIPHERAL
, &hdev
->dev_flags
);
922 clear_bit(HCI_LE_PERIPHERAL
, &hdev
->dev_flags
);
925 if (!test_bit(HCI_INIT
, &hdev
->flags
)) {
926 struct hci_request req
;
928 hci_req_init(&req
, hdev
);
930 hci_req_run(&req
, NULL
);
933 hci_dev_unlock(hdev
);
936 static void hci_cc_le_set_scan_enable(struct hci_dev
*hdev
,
939 struct hci_cp_le_set_scan_enable
*cp
;
940 __u8 status
= *((__u8
*) skb
->data
);
942 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
944 cp
= hci_sent_cmd_data(hdev
, HCI_OP_LE_SET_SCAN_ENABLE
);
951 switch (cp
->enable
) {
953 set_bit(HCI_LE_SCAN
, &hdev
->dev_flags
);
956 case LE_SCAN_DISABLE
:
957 clear_bit(HCI_LE_SCAN
, &hdev
->dev_flags
);
961 BT_ERR("Used reserved LE_Scan_Enable param %d", cp
->enable
);
966 static void hci_cc_le_read_white_list_size(struct hci_dev
*hdev
,
969 struct hci_rp_le_read_white_list_size
*rp
= (void *) skb
->data
;
971 BT_DBG("%s status 0x%2.2x size %u", hdev
->name
, rp
->status
, rp
->size
);
974 hdev
->le_white_list_size
= rp
->size
;
977 static void hci_cc_le_read_supported_states(struct hci_dev
*hdev
,
980 struct hci_rp_le_read_supported_states
*rp
= (void *) skb
->data
;
982 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
985 memcpy(hdev
->le_states
, rp
->le_states
, 8);
988 static void hci_cc_write_le_host_supported(struct hci_dev
*hdev
,
991 struct hci_cp_write_le_host_supported
*sent
;
992 __u8 status
= *((__u8
*) skb
->data
);
994 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
996 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_LE_HOST_SUPPORTED
);
1002 hdev
->features
[1][0] |= LMP_HOST_LE
;
1004 hdev
->features
[1][0] &= ~LMP_HOST_LE
;
1007 hdev
->features
[1][0] |= LMP_HOST_LE_BREDR
;
1009 hdev
->features
[1][0] &= ~LMP_HOST_LE_BREDR
;
1012 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
) &&
1013 !test_bit(HCI_INIT
, &hdev
->flags
))
1014 mgmt_le_enable_complete(hdev
, sent
->le
, status
);
1017 static void hci_cc_write_remote_amp_assoc(struct hci_dev
*hdev
,
1018 struct sk_buff
*skb
)
1020 struct hci_rp_write_remote_amp_assoc
*rp
= (void *) skb
->data
;
1022 BT_DBG("%s status 0x%2.2x phy_handle 0x%2.2x",
1023 hdev
->name
, rp
->status
, rp
->phy_handle
);
1028 amp_write_rem_assoc_continue(hdev
, rp
->phy_handle
);
1031 static void hci_cs_inquiry(struct hci_dev
*hdev
, __u8 status
)
1033 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1036 hci_conn_check_pending(hdev
);
1040 set_bit(HCI_INQUIRY
, &hdev
->flags
);
1043 static void hci_cs_create_conn(struct hci_dev
*hdev
, __u8 status
)
1045 struct hci_cp_create_conn
*cp
;
1046 struct hci_conn
*conn
;
1048 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1050 cp
= hci_sent_cmd_data(hdev
, HCI_OP_CREATE_CONN
);
1056 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &cp
->bdaddr
);
1058 BT_DBG("%s bdaddr %pMR hcon %p", hdev
->name
, &cp
->bdaddr
, conn
);
1061 if (conn
&& conn
->state
== BT_CONNECT
) {
1062 if (status
!= 0x0c || conn
->attempt
> 2) {
1063 conn
->state
= BT_CLOSED
;
1064 hci_proto_connect_cfm(conn
, status
);
1067 conn
->state
= BT_CONNECT2
;
1071 conn
= hci_conn_add(hdev
, ACL_LINK
, &cp
->bdaddr
);
1074 conn
->link_mode
|= HCI_LM_MASTER
;
1076 BT_ERR("No memory for new connection");
1080 hci_dev_unlock(hdev
);
1083 static void hci_cs_add_sco(struct hci_dev
*hdev
, __u8 status
)
1085 struct hci_cp_add_sco
*cp
;
1086 struct hci_conn
*acl
, *sco
;
1089 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1094 cp
= hci_sent_cmd_data(hdev
, HCI_OP_ADD_SCO
);
1098 handle
= __le16_to_cpu(cp
->handle
);
1100 BT_DBG("%s handle 0x%4.4x", hdev
->name
, handle
);
1104 acl
= hci_conn_hash_lookup_handle(hdev
, handle
);
1108 sco
->state
= BT_CLOSED
;
1110 hci_proto_connect_cfm(sco
, status
);
1115 hci_dev_unlock(hdev
);
1118 static void hci_cs_auth_requested(struct hci_dev
*hdev
, __u8 status
)
1120 struct hci_cp_auth_requested
*cp
;
1121 struct hci_conn
*conn
;
1123 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1128 cp
= hci_sent_cmd_data(hdev
, HCI_OP_AUTH_REQUESTED
);
1134 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1136 if (conn
->state
== BT_CONFIG
) {
1137 hci_proto_connect_cfm(conn
, status
);
1138 hci_conn_drop(conn
);
1142 hci_dev_unlock(hdev
);
1145 static void hci_cs_set_conn_encrypt(struct hci_dev
*hdev
, __u8 status
)
1147 struct hci_cp_set_conn_encrypt
*cp
;
1148 struct hci_conn
*conn
;
1150 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1155 cp
= hci_sent_cmd_data(hdev
, HCI_OP_SET_CONN_ENCRYPT
);
1161 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1163 if (conn
->state
== BT_CONFIG
) {
1164 hci_proto_connect_cfm(conn
, status
);
1165 hci_conn_drop(conn
);
1169 hci_dev_unlock(hdev
);
1172 static int hci_outgoing_auth_needed(struct hci_dev
*hdev
,
1173 struct hci_conn
*conn
)
1175 if (conn
->state
!= BT_CONFIG
|| !conn
->out
)
1178 if (conn
->pending_sec_level
== BT_SECURITY_SDP
)
1181 /* Only request authentication for SSP connections or non-SSP
1182 * devices with sec_level HIGH or if MITM protection is requested */
1183 if (!hci_conn_ssp_enabled(conn
) && !(conn
->auth_type
& 0x01) &&
1184 conn
->pending_sec_level
!= BT_SECURITY_HIGH
)
1190 static int hci_resolve_name(struct hci_dev
*hdev
,
1191 struct inquiry_entry
*e
)
1193 struct hci_cp_remote_name_req cp
;
1195 memset(&cp
, 0, sizeof(cp
));
1197 bacpy(&cp
.bdaddr
, &e
->data
.bdaddr
);
1198 cp
.pscan_rep_mode
= e
->data
.pscan_rep_mode
;
1199 cp
.pscan_mode
= e
->data
.pscan_mode
;
1200 cp
.clock_offset
= e
->data
.clock_offset
;
1202 return hci_send_cmd(hdev
, HCI_OP_REMOTE_NAME_REQ
, sizeof(cp
), &cp
);
1205 static bool hci_resolve_next_name(struct hci_dev
*hdev
)
1207 struct discovery_state
*discov
= &hdev
->discovery
;
1208 struct inquiry_entry
*e
;
1210 if (list_empty(&discov
->resolve
))
1213 e
= hci_inquiry_cache_lookup_resolve(hdev
, BDADDR_ANY
, NAME_NEEDED
);
1217 if (hci_resolve_name(hdev
, e
) == 0) {
1218 e
->name_state
= NAME_PENDING
;
1225 static void hci_check_pending_name(struct hci_dev
*hdev
, struct hci_conn
*conn
,
1226 bdaddr_t
*bdaddr
, u8
*name
, u8 name_len
)
1228 struct discovery_state
*discov
= &hdev
->discovery
;
1229 struct inquiry_entry
*e
;
1231 if (conn
&& !test_and_set_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
))
1232 mgmt_device_connected(hdev
, bdaddr
, ACL_LINK
, 0x00, 0, name
,
1233 name_len
, conn
->dev_class
);
1235 if (discov
->state
== DISCOVERY_STOPPED
)
1238 if (discov
->state
== DISCOVERY_STOPPING
)
1239 goto discov_complete
;
1241 if (discov
->state
!= DISCOVERY_RESOLVING
)
1244 e
= hci_inquiry_cache_lookup_resolve(hdev
, bdaddr
, NAME_PENDING
);
1245 /* If the device was not found in a list of found devices names of which
1246 * are pending. there is no need to continue resolving a next name as it
1247 * will be done upon receiving another Remote Name Request Complete
1254 e
->name_state
= NAME_KNOWN
;
1255 mgmt_remote_name(hdev
, bdaddr
, ACL_LINK
, 0x00,
1256 e
->data
.rssi
, name
, name_len
);
1258 e
->name_state
= NAME_NOT_KNOWN
;
1261 if (hci_resolve_next_name(hdev
))
1265 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
1268 static void hci_cs_remote_name_req(struct hci_dev
*hdev
, __u8 status
)
1270 struct hci_cp_remote_name_req
*cp
;
1271 struct hci_conn
*conn
;
1273 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1275 /* If successful wait for the name req complete event before
1276 * checking for the need to do authentication */
1280 cp
= hci_sent_cmd_data(hdev
, HCI_OP_REMOTE_NAME_REQ
);
1286 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &cp
->bdaddr
);
1288 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
1289 hci_check_pending_name(hdev
, conn
, &cp
->bdaddr
, NULL
, 0);
1294 if (!hci_outgoing_auth_needed(hdev
, conn
))
1297 if (!test_and_set_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
)) {
1298 struct hci_cp_auth_requested cp
;
1299 cp
.handle
= __cpu_to_le16(conn
->handle
);
1300 hci_send_cmd(hdev
, HCI_OP_AUTH_REQUESTED
, sizeof(cp
), &cp
);
1304 hci_dev_unlock(hdev
);
1307 static void hci_cs_read_remote_features(struct hci_dev
*hdev
, __u8 status
)
1309 struct hci_cp_read_remote_features
*cp
;
1310 struct hci_conn
*conn
;
1312 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1317 cp
= hci_sent_cmd_data(hdev
, HCI_OP_READ_REMOTE_FEATURES
);
1323 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1325 if (conn
->state
== BT_CONFIG
) {
1326 hci_proto_connect_cfm(conn
, status
);
1327 hci_conn_drop(conn
);
1331 hci_dev_unlock(hdev
);
1334 static void hci_cs_read_remote_ext_features(struct hci_dev
*hdev
, __u8 status
)
1336 struct hci_cp_read_remote_ext_features
*cp
;
1337 struct hci_conn
*conn
;
1339 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1344 cp
= hci_sent_cmd_data(hdev
, HCI_OP_READ_REMOTE_EXT_FEATURES
);
1350 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1352 if (conn
->state
== BT_CONFIG
) {
1353 hci_proto_connect_cfm(conn
, status
);
1354 hci_conn_drop(conn
);
1358 hci_dev_unlock(hdev
);
1361 static void hci_cs_setup_sync_conn(struct hci_dev
*hdev
, __u8 status
)
1363 struct hci_cp_setup_sync_conn
*cp
;
1364 struct hci_conn
*acl
, *sco
;
1367 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1372 cp
= hci_sent_cmd_data(hdev
, HCI_OP_SETUP_SYNC_CONN
);
1376 handle
= __le16_to_cpu(cp
->handle
);
1378 BT_DBG("%s handle 0x%4.4x", hdev
->name
, handle
);
1382 acl
= hci_conn_hash_lookup_handle(hdev
, handle
);
1386 sco
->state
= BT_CLOSED
;
1388 hci_proto_connect_cfm(sco
, status
);
1393 hci_dev_unlock(hdev
);
1396 static void hci_cs_sniff_mode(struct hci_dev
*hdev
, __u8 status
)
1398 struct hci_cp_sniff_mode
*cp
;
1399 struct hci_conn
*conn
;
1401 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1406 cp
= hci_sent_cmd_data(hdev
, HCI_OP_SNIFF_MODE
);
1412 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1414 clear_bit(HCI_CONN_MODE_CHANGE_PEND
, &conn
->flags
);
1416 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND
, &conn
->flags
))
1417 hci_sco_setup(conn
, status
);
1420 hci_dev_unlock(hdev
);
1423 static void hci_cs_exit_sniff_mode(struct hci_dev
*hdev
, __u8 status
)
1425 struct hci_cp_exit_sniff_mode
*cp
;
1426 struct hci_conn
*conn
;
1428 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1433 cp
= hci_sent_cmd_data(hdev
, HCI_OP_EXIT_SNIFF_MODE
);
1439 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1441 clear_bit(HCI_CONN_MODE_CHANGE_PEND
, &conn
->flags
);
1443 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND
, &conn
->flags
))
1444 hci_sco_setup(conn
, status
);
1447 hci_dev_unlock(hdev
);
1450 static void hci_cs_disconnect(struct hci_dev
*hdev
, u8 status
)
1452 struct hci_cp_disconnect
*cp
;
1453 struct hci_conn
*conn
;
1458 cp
= hci_sent_cmd_data(hdev
, HCI_OP_DISCONNECT
);
1464 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1466 mgmt_disconnect_failed(hdev
, &conn
->dst
, conn
->type
,
1467 conn
->dst_type
, status
);
1469 hci_dev_unlock(hdev
);
1472 static void hci_cs_le_create_conn(struct hci_dev
*hdev
, __u8 status
)
1474 struct hci_conn
*conn
;
1476 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1481 conn
= hci_conn_hash_lookup_state(hdev
, LE_LINK
, BT_CONNECT
);
1483 hci_dev_unlock(hdev
);
1487 BT_DBG("%s bdaddr %pMR conn %p", hdev
->name
, &conn
->dst
, conn
);
1489 conn
->state
= BT_CLOSED
;
1490 mgmt_connect_failed(hdev
, &conn
->dst
, conn
->type
,
1491 conn
->dst_type
, status
);
1492 hci_proto_connect_cfm(conn
, status
);
1495 hci_dev_unlock(hdev
);
1499 static void hci_cs_create_phylink(struct hci_dev
*hdev
, u8 status
)
1501 struct hci_cp_create_phy_link
*cp
;
1503 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1505 cp
= hci_sent_cmd_data(hdev
, HCI_OP_CREATE_PHY_LINK
);
1512 struct hci_conn
*hcon
;
1514 hcon
= hci_conn_hash_lookup_handle(hdev
, cp
->phy_handle
);
1518 amp_write_remote_assoc(hdev
, cp
->phy_handle
);
1521 hci_dev_unlock(hdev
);
1524 static void hci_cs_accept_phylink(struct hci_dev
*hdev
, u8 status
)
1526 struct hci_cp_accept_phy_link
*cp
;
1528 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1533 cp
= hci_sent_cmd_data(hdev
, HCI_OP_ACCEPT_PHY_LINK
);
1537 amp_write_remote_assoc(hdev
, cp
->phy_handle
);
1540 static void hci_inquiry_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1542 __u8 status
= *((__u8
*) skb
->data
);
1543 struct discovery_state
*discov
= &hdev
->discovery
;
1544 struct inquiry_entry
*e
;
1546 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1548 hci_conn_check_pending(hdev
);
1550 if (!test_and_clear_bit(HCI_INQUIRY
, &hdev
->flags
))
1553 smp_mb__after_clear_bit(); /* wake_up_bit advises about this barrier */
1554 wake_up_bit(&hdev
->flags
, HCI_INQUIRY
);
1556 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
1561 if (discov
->state
!= DISCOVERY_FINDING
)
1564 if (list_empty(&discov
->resolve
)) {
1565 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
1569 e
= hci_inquiry_cache_lookup_resolve(hdev
, BDADDR_ANY
, NAME_NEEDED
);
1570 if (e
&& hci_resolve_name(hdev
, e
) == 0) {
1571 e
->name_state
= NAME_PENDING
;
1572 hci_discovery_set_state(hdev
, DISCOVERY_RESOLVING
);
1574 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
1578 hci_dev_unlock(hdev
);
1581 static void hci_inquiry_result_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1583 struct inquiry_data data
;
1584 struct inquiry_info
*info
= (void *) (skb
->data
+ 1);
1585 int num_rsp
= *((__u8
*) skb
->data
);
1587 BT_DBG("%s num_rsp %d", hdev
->name
, num_rsp
);
1592 if (test_bit(HCI_PERIODIC_INQ
, &hdev
->dev_flags
))
1597 for (; num_rsp
; num_rsp
--, info
++) {
1598 bool name_known
, ssp
;
1600 bacpy(&data
.bdaddr
, &info
->bdaddr
);
1601 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
1602 data
.pscan_period_mode
= info
->pscan_period_mode
;
1603 data
.pscan_mode
= info
->pscan_mode
;
1604 memcpy(data
.dev_class
, info
->dev_class
, 3);
1605 data
.clock_offset
= info
->clock_offset
;
1607 data
.ssp_mode
= 0x00;
1609 name_known
= hci_inquiry_cache_update(hdev
, &data
, false, &ssp
);
1610 mgmt_device_found(hdev
, &info
->bdaddr
, ACL_LINK
, 0x00,
1611 info
->dev_class
, 0, !name_known
, ssp
, NULL
,
1615 hci_dev_unlock(hdev
);
1618 static void hci_conn_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1620 struct hci_ev_conn_complete
*ev
= (void *) skb
->data
;
1621 struct hci_conn
*conn
;
1623 BT_DBG("%s", hdev
->name
);
1627 conn
= hci_conn_hash_lookup_ba(hdev
, ev
->link_type
, &ev
->bdaddr
);
1629 if (ev
->link_type
!= SCO_LINK
)
1632 conn
= hci_conn_hash_lookup_ba(hdev
, ESCO_LINK
, &ev
->bdaddr
);
1636 conn
->type
= SCO_LINK
;
1640 conn
->handle
= __le16_to_cpu(ev
->handle
);
1642 if (conn
->type
== ACL_LINK
) {
1643 conn
->state
= BT_CONFIG
;
1644 hci_conn_hold(conn
);
1646 if (!conn
->out
&& !hci_conn_ssp_enabled(conn
) &&
1647 !hci_find_link_key(hdev
, &ev
->bdaddr
))
1648 conn
->disc_timeout
= HCI_PAIRING_TIMEOUT
;
1650 conn
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
1652 conn
->state
= BT_CONNECTED
;
1654 hci_conn_add_sysfs(conn
);
1656 if (test_bit(HCI_AUTH
, &hdev
->flags
))
1657 conn
->link_mode
|= HCI_LM_AUTH
;
1659 if (test_bit(HCI_ENCRYPT
, &hdev
->flags
))
1660 conn
->link_mode
|= HCI_LM_ENCRYPT
;
1662 /* Get remote features */
1663 if (conn
->type
== ACL_LINK
) {
1664 struct hci_cp_read_remote_features cp
;
1665 cp
.handle
= ev
->handle
;
1666 hci_send_cmd(hdev
, HCI_OP_READ_REMOTE_FEATURES
,
1670 /* Set packet type for incoming connection */
1671 if (!conn
->out
&& hdev
->hci_ver
< BLUETOOTH_VER_2_0
) {
1672 struct hci_cp_change_conn_ptype cp
;
1673 cp
.handle
= ev
->handle
;
1674 cp
.pkt_type
= cpu_to_le16(conn
->pkt_type
);
1675 hci_send_cmd(hdev
, HCI_OP_CHANGE_CONN_PTYPE
, sizeof(cp
),
1679 conn
->state
= BT_CLOSED
;
1680 if (conn
->type
== ACL_LINK
)
1681 mgmt_connect_failed(hdev
, &ev
->bdaddr
, conn
->type
,
1682 conn
->dst_type
, ev
->status
);
1685 if (conn
->type
== ACL_LINK
)
1686 hci_sco_setup(conn
, ev
->status
);
1689 hci_proto_connect_cfm(conn
, ev
->status
);
1691 } else if (ev
->link_type
!= ACL_LINK
)
1692 hci_proto_connect_cfm(conn
, ev
->status
);
1695 hci_dev_unlock(hdev
);
1697 hci_conn_check_pending(hdev
);
1700 static void hci_conn_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1702 struct hci_ev_conn_request
*ev
= (void *) skb
->data
;
1703 int mask
= hdev
->link_mode
;
1706 BT_DBG("%s bdaddr %pMR type 0x%x", hdev
->name
, &ev
->bdaddr
,
1709 mask
|= hci_proto_connect_ind(hdev
, &ev
->bdaddr
, ev
->link_type
,
1712 if ((mask
& HCI_LM_ACCEPT
) &&
1713 !hci_blacklist_lookup(hdev
, &ev
->bdaddr
)) {
1714 /* Connection accepted */
1715 struct inquiry_entry
*ie
;
1716 struct hci_conn
*conn
;
1720 ie
= hci_inquiry_cache_lookup(hdev
, &ev
->bdaddr
);
1722 memcpy(ie
->data
.dev_class
, ev
->dev_class
, 3);
1724 conn
= hci_conn_hash_lookup_ba(hdev
, ev
->link_type
,
1727 conn
= hci_conn_add(hdev
, ev
->link_type
, &ev
->bdaddr
);
1729 BT_ERR("No memory for new connection");
1730 hci_dev_unlock(hdev
);
1735 memcpy(conn
->dev_class
, ev
->dev_class
, 3);
1737 hci_dev_unlock(hdev
);
1739 if (ev
->link_type
== ACL_LINK
||
1740 (!(flags
& HCI_PROTO_DEFER
) && !lmp_esco_capable(hdev
))) {
1741 struct hci_cp_accept_conn_req cp
;
1742 conn
->state
= BT_CONNECT
;
1744 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
1746 if (lmp_rswitch_capable(hdev
) && (mask
& HCI_LM_MASTER
))
1747 cp
.role
= 0x00; /* Become master */
1749 cp
.role
= 0x01; /* Remain slave */
1751 hci_send_cmd(hdev
, HCI_OP_ACCEPT_CONN_REQ
, sizeof(cp
),
1753 } else if (!(flags
& HCI_PROTO_DEFER
)) {
1754 struct hci_cp_accept_sync_conn_req cp
;
1755 conn
->state
= BT_CONNECT
;
1757 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
1758 cp
.pkt_type
= cpu_to_le16(conn
->pkt_type
);
1760 cp
.tx_bandwidth
= __constant_cpu_to_le32(0x00001f40);
1761 cp
.rx_bandwidth
= __constant_cpu_to_le32(0x00001f40);
1762 cp
.max_latency
= __constant_cpu_to_le16(0xffff);
1763 cp
.content_format
= cpu_to_le16(hdev
->voice_setting
);
1764 cp
.retrans_effort
= 0xff;
1766 hci_send_cmd(hdev
, HCI_OP_ACCEPT_SYNC_CONN_REQ
,
1769 conn
->state
= BT_CONNECT2
;
1770 hci_proto_connect_cfm(conn
, 0);
1773 /* Connection rejected */
1774 struct hci_cp_reject_conn_req cp
;
1776 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
1777 cp
.reason
= HCI_ERROR_REJ_BAD_ADDR
;
1778 hci_send_cmd(hdev
, HCI_OP_REJECT_CONN_REQ
, sizeof(cp
), &cp
);
1782 static u8
hci_to_mgmt_reason(u8 err
)
1785 case HCI_ERROR_CONNECTION_TIMEOUT
:
1786 return MGMT_DEV_DISCONN_TIMEOUT
;
1787 case HCI_ERROR_REMOTE_USER_TERM
:
1788 case HCI_ERROR_REMOTE_LOW_RESOURCES
:
1789 case HCI_ERROR_REMOTE_POWER_OFF
:
1790 return MGMT_DEV_DISCONN_REMOTE
;
1791 case HCI_ERROR_LOCAL_HOST_TERM
:
1792 return MGMT_DEV_DISCONN_LOCAL_HOST
;
1794 return MGMT_DEV_DISCONN_UNKNOWN
;
1798 static void hci_disconn_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1800 struct hci_ev_disconn_complete
*ev
= (void *) skb
->data
;
1801 struct hci_conn
*conn
;
1803 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
1807 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1811 if (ev
->status
== 0)
1812 conn
->state
= BT_CLOSED
;
1814 if (test_and_clear_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
) &&
1815 (conn
->type
== ACL_LINK
|| conn
->type
== LE_LINK
)) {
1817 mgmt_disconnect_failed(hdev
, &conn
->dst
, conn
->type
,
1818 conn
->dst_type
, ev
->status
);
1820 u8 reason
= hci_to_mgmt_reason(ev
->reason
);
1822 mgmt_device_disconnected(hdev
, &conn
->dst
, conn
->type
,
1823 conn
->dst_type
, reason
);
1827 if (ev
->status
== 0) {
1828 if (conn
->type
== ACL_LINK
&& conn
->flush_key
)
1829 hci_remove_link_key(hdev
, &conn
->dst
);
1830 hci_proto_disconn_cfm(conn
, ev
->reason
);
1835 hci_dev_unlock(hdev
);
1838 static void hci_auth_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1840 struct hci_ev_auth_complete
*ev
= (void *) skb
->data
;
1841 struct hci_conn
*conn
;
1843 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
1847 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1852 if (!hci_conn_ssp_enabled(conn
) &&
1853 test_bit(HCI_CONN_REAUTH_PEND
, &conn
->flags
)) {
1854 BT_INFO("re-auth of legacy device is not possible.");
1856 conn
->link_mode
|= HCI_LM_AUTH
;
1857 conn
->sec_level
= conn
->pending_sec_level
;
1860 mgmt_auth_failed(hdev
, &conn
->dst
, conn
->type
, conn
->dst_type
,
1864 clear_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
);
1865 clear_bit(HCI_CONN_REAUTH_PEND
, &conn
->flags
);
1867 if (conn
->state
== BT_CONFIG
) {
1868 if (!ev
->status
&& hci_conn_ssp_enabled(conn
)) {
1869 struct hci_cp_set_conn_encrypt cp
;
1870 cp
.handle
= ev
->handle
;
1872 hci_send_cmd(hdev
, HCI_OP_SET_CONN_ENCRYPT
, sizeof(cp
),
1875 conn
->state
= BT_CONNECTED
;
1876 hci_proto_connect_cfm(conn
, ev
->status
);
1877 hci_conn_drop(conn
);
1880 hci_auth_cfm(conn
, ev
->status
);
1882 hci_conn_hold(conn
);
1883 conn
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
1884 hci_conn_drop(conn
);
1887 if (test_bit(HCI_CONN_ENCRYPT_PEND
, &conn
->flags
)) {
1889 struct hci_cp_set_conn_encrypt cp
;
1890 cp
.handle
= ev
->handle
;
1892 hci_send_cmd(hdev
, HCI_OP_SET_CONN_ENCRYPT
, sizeof(cp
),
1895 clear_bit(HCI_CONN_ENCRYPT_PEND
, &conn
->flags
);
1896 hci_encrypt_cfm(conn
, ev
->status
, 0x00);
1901 hci_dev_unlock(hdev
);
1904 static void hci_remote_name_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1906 struct hci_ev_remote_name
*ev
= (void *) skb
->data
;
1907 struct hci_conn
*conn
;
1909 BT_DBG("%s", hdev
->name
);
1911 hci_conn_check_pending(hdev
);
1915 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
1917 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
1920 if (ev
->status
== 0)
1921 hci_check_pending_name(hdev
, conn
, &ev
->bdaddr
, ev
->name
,
1922 strnlen(ev
->name
, HCI_MAX_NAME_LENGTH
));
1924 hci_check_pending_name(hdev
, conn
, &ev
->bdaddr
, NULL
, 0);
1930 if (!hci_outgoing_auth_needed(hdev
, conn
))
1933 if (!test_and_set_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
)) {
1934 struct hci_cp_auth_requested cp
;
1935 cp
.handle
= __cpu_to_le16(conn
->handle
);
1936 hci_send_cmd(hdev
, HCI_OP_AUTH_REQUESTED
, sizeof(cp
), &cp
);
1940 hci_dev_unlock(hdev
);
1943 static void hci_encrypt_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1945 struct hci_ev_encrypt_change
*ev
= (void *) skb
->data
;
1946 struct hci_conn
*conn
;
1948 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
1952 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1956 /* Encryption implies authentication */
1957 conn
->link_mode
|= HCI_LM_AUTH
;
1958 conn
->link_mode
|= HCI_LM_ENCRYPT
;
1959 conn
->sec_level
= conn
->pending_sec_level
;
1961 conn
->link_mode
&= ~HCI_LM_ENCRYPT
;
1964 clear_bit(HCI_CONN_ENCRYPT_PEND
, &conn
->flags
);
1966 if (ev
->status
&& conn
->state
== BT_CONNECTED
) {
1967 hci_disconnect(conn
, HCI_ERROR_AUTH_FAILURE
);
1968 hci_conn_drop(conn
);
1972 if (conn
->state
== BT_CONFIG
) {
1974 conn
->state
= BT_CONNECTED
;
1976 hci_proto_connect_cfm(conn
, ev
->status
);
1977 hci_conn_drop(conn
);
1979 hci_encrypt_cfm(conn
, ev
->status
, ev
->encrypt
);
1983 hci_dev_unlock(hdev
);
1986 static void hci_change_link_key_complete_evt(struct hci_dev
*hdev
,
1987 struct sk_buff
*skb
)
1989 struct hci_ev_change_link_key_complete
*ev
= (void *) skb
->data
;
1990 struct hci_conn
*conn
;
1992 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
1996 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1999 conn
->link_mode
|= HCI_LM_SECURE
;
2001 clear_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
);
2003 hci_key_change_cfm(conn
, ev
->status
);
2006 hci_dev_unlock(hdev
);
2009 static void hci_remote_features_evt(struct hci_dev
*hdev
,
2010 struct sk_buff
*skb
)
2012 struct hci_ev_remote_features
*ev
= (void *) skb
->data
;
2013 struct hci_conn
*conn
;
2015 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2019 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2024 memcpy(conn
->features
[0], ev
->features
, 8);
2026 if (conn
->state
!= BT_CONFIG
)
2029 if (!ev
->status
&& lmp_ssp_capable(hdev
) && lmp_ssp_capable(conn
)) {
2030 struct hci_cp_read_remote_ext_features cp
;
2031 cp
.handle
= ev
->handle
;
2033 hci_send_cmd(hdev
, HCI_OP_READ_REMOTE_EXT_FEATURES
,
2038 if (!ev
->status
&& !test_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
)) {
2039 struct hci_cp_remote_name_req cp
;
2040 memset(&cp
, 0, sizeof(cp
));
2041 bacpy(&cp
.bdaddr
, &conn
->dst
);
2042 cp
.pscan_rep_mode
= 0x02;
2043 hci_send_cmd(hdev
, HCI_OP_REMOTE_NAME_REQ
, sizeof(cp
), &cp
);
2044 } else if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
))
2045 mgmt_device_connected(hdev
, &conn
->dst
, conn
->type
,
2046 conn
->dst_type
, 0, NULL
, 0,
2049 if (!hci_outgoing_auth_needed(hdev
, conn
)) {
2050 conn
->state
= BT_CONNECTED
;
2051 hci_proto_connect_cfm(conn
, ev
->status
);
2052 hci_conn_drop(conn
);
2056 hci_dev_unlock(hdev
);
2059 static void hci_cmd_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2061 struct hci_ev_cmd_complete
*ev
= (void *) skb
->data
;
2062 u8 status
= skb
->data
[sizeof(*ev
)];
2065 skb_pull(skb
, sizeof(*ev
));
2067 opcode
= __le16_to_cpu(ev
->opcode
);
2070 case HCI_OP_INQUIRY_CANCEL
:
2071 hci_cc_inquiry_cancel(hdev
, skb
);
2074 case HCI_OP_PERIODIC_INQ
:
2075 hci_cc_periodic_inq(hdev
, skb
);
2078 case HCI_OP_EXIT_PERIODIC_INQ
:
2079 hci_cc_exit_periodic_inq(hdev
, skb
);
2082 case HCI_OP_REMOTE_NAME_REQ_CANCEL
:
2083 hci_cc_remote_name_req_cancel(hdev
, skb
);
2086 case HCI_OP_ROLE_DISCOVERY
:
2087 hci_cc_role_discovery(hdev
, skb
);
2090 case HCI_OP_READ_LINK_POLICY
:
2091 hci_cc_read_link_policy(hdev
, skb
);
2094 case HCI_OP_WRITE_LINK_POLICY
:
2095 hci_cc_write_link_policy(hdev
, skb
);
2098 case HCI_OP_READ_DEF_LINK_POLICY
:
2099 hci_cc_read_def_link_policy(hdev
, skb
);
2102 case HCI_OP_WRITE_DEF_LINK_POLICY
:
2103 hci_cc_write_def_link_policy(hdev
, skb
);
2107 hci_cc_reset(hdev
, skb
);
2110 case HCI_OP_WRITE_LOCAL_NAME
:
2111 hci_cc_write_local_name(hdev
, skb
);
2114 case HCI_OP_READ_LOCAL_NAME
:
2115 hci_cc_read_local_name(hdev
, skb
);
2118 case HCI_OP_WRITE_AUTH_ENABLE
:
2119 hci_cc_write_auth_enable(hdev
, skb
);
2122 case HCI_OP_WRITE_ENCRYPT_MODE
:
2123 hci_cc_write_encrypt_mode(hdev
, skb
);
2126 case HCI_OP_WRITE_SCAN_ENABLE
:
2127 hci_cc_write_scan_enable(hdev
, skb
);
2130 case HCI_OP_READ_CLASS_OF_DEV
:
2131 hci_cc_read_class_of_dev(hdev
, skb
);
2134 case HCI_OP_WRITE_CLASS_OF_DEV
:
2135 hci_cc_write_class_of_dev(hdev
, skb
);
2138 case HCI_OP_READ_VOICE_SETTING
:
2139 hci_cc_read_voice_setting(hdev
, skb
);
2142 case HCI_OP_WRITE_VOICE_SETTING
:
2143 hci_cc_write_voice_setting(hdev
, skb
);
2146 case HCI_OP_WRITE_SSP_MODE
:
2147 hci_cc_write_ssp_mode(hdev
, skb
);
2150 case HCI_OP_READ_LOCAL_VERSION
:
2151 hci_cc_read_local_version(hdev
, skb
);
2154 case HCI_OP_READ_LOCAL_COMMANDS
:
2155 hci_cc_read_local_commands(hdev
, skb
);
2158 case HCI_OP_READ_LOCAL_FEATURES
:
2159 hci_cc_read_local_features(hdev
, skb
);
2162 case HCI_OP_READ_LOCAL_EXT_FEATURES
:
2163 hci_cc_read_local_ext_features(hdev
, skb
);
2166 case HCI_OP_READ_BUFFER_SIZE
:
2167 hci_cc_read_buffer_size(hdev
, skb
);
2170 case HCI_OP_READ_BD_ADDR
:
2171 hci_cc_read_bd_addr(hdev
, skb
);
2174 case HCI_OP_READ_PAGE_SCAN_ACTIVITY
:
2175 hci_cc_read_page_scan_activity(hdev
, skb
);
2178 case HCI_OP_WRITE_PAGE_SCAN_ACTIVITY
:
2179 hci_cc_write_page_scan_activity(hdev
, skb
);
2182 case HCI_OP_READ_PAGE_SCAN_TYPE
:
2183 hci_cc_read_page_scan_type(hdev
, skb
);
2186 case HCI_OP_WRITE_PAGE_SCAN_TYPE
:
2187 hci_cc_write_page_scan_type(hdev
, skb
);
2190 case HCI_OP_READ_DATA_BLOCK_SIZE
:
2191 hci_cc_read_data_block_size(hdev
, skb
);
2194 case HCI_OP_READ_FLOW_CONTROL_MODE
:
2195 hci_cc_read_flow_control_mode(hdev
, skb
);
2198 case HCI_OP_READ_LOCAL_AMP_INFO
:
2199 hci_cc_read_local_amp_info(hdev
, skb
);
2202 case HCI_OP_READ_LOCAL_AMP_ASSOC
:
2203 hci_cc_read_local_amp_assoc(hdev
, skb
);
2206 case HCI_OP_READ_INQ_RSP_TX_POWER
:
2207 hci_cc_read_inq_rsp_tx_power(hdev
, skb
);
2210 case HCI_OP_PIN_CODE_REPLY
:
2211 hci_cc_pin_code_reply(hdev
, skb
);
2214 case HCI_OP_PIN_CODE_NEG_REPLY
:
2215 hci_cc_pin_code_neg_reply(hdev
, skb
);
2218 case HCI_OP_READ_LOCAL_OOB_DATA
:
2219 hci_cc_read_local_oob_data_reply(hdev
, skb
);
2222 case HCI_OP_LE_READ_BUFFER_SIZE
:
2223 hci_cc_le_read_buffer_size(hdev
, skb
);
2226 case HCI_OP_LE_READ_LOCAL_FEATURES
:
2227 hci_cc_le_read_local_features(hdev
, skb
);
2230 case HCI_OP_LE_READ_ADV_TX_POWER
:
2231 hci_cc_le_read_adv_tx_power(hdev
, skb
);
2234 case HCI_OP_USER_CONFIRM_REPLY
:
2235 hci_cc_user_confirm_reply(hdev
, skb
);
2238 case HCI_OP_USER_CONFIRM_NEG_REPLY
:
2239 hci_cc_user_confirm_neg_reply(hdev
, skb
);
2242 case HCI_OP_USER_PASSKEY_REPLY
:
2243 hci_cc_user_passkey_reply(hdev
, skb
);
2246 case HCI_OP_USER_PASSKEY_NEG_REPLY
:
2247 hci_cc_user_passkey_neg_reply(hdev
, skb
);
2250 case HCI_OP_LE_SET_ADV_ENABLE
:
2251 hci_cc_le_set_adv_enable(hdev
, skb
);
2254 case HCI_OP_LE_SET_SCAN_ENABLE
:
2255 hci_cc_le_set_scan_enable(hdev
, skb
);
2258 case HCI_OP_LE_READ_WHITE_LIST_SIZE
:
2259 hci_cc_le_read_white_list_size(hdev
, skb
);
2262 case HCI_OP_LE_READ_SUPPORTED_STATES
:
2263 hci_cc_le_read_supported_states(hdev
, skb
);
2266 case HCI_OP_WRITE_LE_HOST_SUPPORTED
:
2267 hci_cc_write_le_host_supported(hdev
, skb
);
2270 case HCI_OP_WRITE_REMOTE_AMP_ASSOC
:
2271 hci_cc_write_remote_amp_assoc(hdev
, skb
);
2275 BT_DBG("%s opcode 0x%4.4x", hdev
->name
, opcode
);
2279 if (opcode
!= HCI_OP_NOP
)
2280 del_timer(&hdev
->cmd_timer
);
2282 hci_req_cmd_complete(hdev
, opcode
, status
);
2284 if (ev
->ncmd
&& !test_bit(HCI_RESET
, &hdev
->flags
)) {
2285 atomic_set(&hdev
->cmd_cnt
, 1);
2286 if (!skb_queue_empty(&hdev
->cmd_q
))
2287 queue_work(hdev
->workqueue
, &hdev
->cmd_work
);
2291 static void hci_cmd_status_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2293 struct hci_ev_cmd_status
*ev
= (void *) skb
->data
;
2296 skb_pull(skb
, sizeof(*ev
));
2298 opcode
= __le16_to_cpu(ev
->opcode
);
2301 case HCI_OP_INQUIRY
:
2302 hci_cs_inquiry(hdev
, ev
->status
);
2305 case HCI_OP_CREATE_CONN
:
2306 hci_cs_create_conn(hdev
, ev
->status
);
2309 case HCI_OP_ADD_SCO
:
2310 hci_cs_add_sco(hdev
, ev
->status
);
2313 case HCI_OP_AUTH_REQUESTED
:
2314 hci_cs_auth_requested(hdev
, ev
->status
);
2317 case HCI_OP_SET_CONN_ENCRYPT
:
2318 hci_cs_set_conn_encrypt(hdev
, ev
->status
);
2321 case HCI_OP_REMOTE_NAME_REQ
:
2322 hci_cs_remote_name_req(hdev
, ev
->status
);
2325 case HCI_OP_READ_REMOTE_FEATURES
:
2326 hci_cs_read_remote_features(hdev
, ev
->status
);
2329 case HCI_OP_READ_REMOTE_EXT_FEATURES
:
2330 hci_cs_read_remote_ext_features(hdev
, ev
->status
);
2333 case HCI_OP_SETUP_SYNC_CONN
:
2334 hci_cs_setup_sync_conn(hdev
, ev
->status
);
2337 case HCI_OP_SNIFF_MODE
:
2338 hci_cs_sniff_mode(hdev
, ev
->status
);
2341 case HCI_OP_EXIT_SNIFF_MODE
:
2342 hci_cs_exit_sniff_mode(hdev
, ev
->status
);
2345 case HCI_OP_DISCONNECT
:
2346 hci_cs_disconnect(hdev
, ev
->status
);
2349 case HCI_OP_LE_CREATE_CONN
:
2350 hci_cs_le_create_conn(hdev
, ev
->status
);
2353 case HCI_OP_CREATE_PHY_LINK
:
2354 hci_cs_create_phylink(hdev
, ev
->status
);
2357 case HCI_OP_ACCEPT_PHY_LINK
:
2358 hci_cs_accept_phylink(hdev
, ev
->status
);
2362 BT_DBG("%s opcode 0x%4.4x", hdev
->name
, opcode
);
2366 if (opcode
!= HCI_OP_NOP
)
2367 del_timer(&hdev
->cmd_timer
);
2370 (hdev
->sent_cmd
&& !bt_cb(hdev
->sent_cmd
)->req
.event
))
2371 hci_req_cmd_complete(hdev
, opcode
, ev
->status
);
2373 if (ev
->ncmd
&& !test_bit(HCI_RESET
, &hdev
->flags
)) {
2374 atomic_set(&hdev
->cmd_cnt
, 1);
2375 if (!skb_queue_empty(&hdev
->cmd_q
))
2376 queue_work(hdev
->workqueue
, &hdev
->cmd_work
);
2380 static void hci_role_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2382 struct hci_ev_role_change
*ev
= (void *) skb
->data
;
2383 struct hci_conn
*conn
;
2385 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2389 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
2393 conn
->link_mode
&= ~HCI_LM_MASTER
;
2395 conn
->link_mode
|= HCI_LM_MASTER
;
2398 clear_bit(HCI_CONN_RSWITCH_PEND
, &conn
->flags
);
2400 hci_role_switch_cfm(conn
, ev
->status
, ev
->role
);
2403 hci_dev_unlock(hdev
);
2406 static void hci_num_comp_pkts_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2408 struct hci_ev_num_comp_pkts
*ev
= (void *) skb
->data
;
2411 if (hdev
->flow_ctl_mode
!= HCI_FLOW_CTL_MODE_PACKET_BASED
) {
2412 BT_ERR("Wrong event for mode %d", hdev
->flow_ctl_mode
);
2416 if (skb
->len
< sizeof(*ev
) || skb
->len
< sizeof(*ev
) +
2417 ev
->num_hndl
* sizeof(struct hci_comp_pkts_info
)) {
2418 BT_DBG("%s bad parameters", hdev
->name
);
2422 BT_DBG("%s num_hndl %d", hdev
->name
, ev
->num_hndl
);
2424 for (i
= 0; i
< ev
->num_hndl
; i
++) {
2425 struct hci_comp_pkts_info
*info
= &ev
->handles
[i
];
2426 struct hci_conn
*conn
;
2427 __u16 handle
, count
;
2429 handle
= __le16_to_cpu(info
->handle
);
2430 count
= __le16_to_cpu(info
->count
);
2432 conn
= hci_conn_hash_lookup_handle(hdev
, handle
);
2436 conn
->sent
-= count
;
2438 switch (conn
->type
) {
2440 hdev
->acl_cnt
+= count
;
2441 if (hdev
->acl_cnt
> hdev
->acl_pkts
)
2442 hdev
->acl_cnt
= hdev
->acl_pkts
;
2446 if (hdev
->le_pkts
) {
2447 hdev
->le_cnt
+= count
;
2448 if (hdev
->le_cnt
> hdev
->le_pkts
)
2449 hdev
->le_cnt
= hdev
->le_pkts
;
2451 hdev
->acl_cnt
+= count
;
2452 if (hdev
->acl_cnt
> hdev
->acl_pkts
)
2453 hdev
->acl_cnt
= hdev
->acl_pkts
;
2458 hdev
->sco_cnt
+= count
;
2459 if (hdev
->sco_cnt
> hdev
->sco_pkts
)
2460 hdev
->sco_cnt
= hdev
->sco_pkts
;
2464 BT_ERR("Unknown type %d conn %p", conn
->type
, conn
);
2469 queue_work(hdev
->workqueue
, &hdev
->tx_work
);
2472 static struct hci_conn
*__hci_conn_lookup_handle(struct hci_dev
*hdev
,
2475 struct hci_chan
*chan
;
2477 switch (hdev
->dev_type
) {
2479 return hci_conn_hash_lookup_handle(hdev
, handle
);
2481 chan
= hci_chan_lookup_handle(hdev
, handle
);
2486 BT_ERR("%s unknown dev_type %d", hdev
->name
, hdev
->dev_type
);
2493 static void hci_num_comp_blocks_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2495 struct hci_ev_num_comp_blocks
*ev
= (void *) skb
->data
;
2498 if (hdev
->flow_ctl_mode
!= HCI_FLOW_CTL_MODE_BLOCK_BASED
) {
2499 BT_ERR("Wrong event for mode %d", hdev
->flow_ctl_mode
);
2503 if (skb
->len
< sizeof(*ev
) || skb
->len
< sizeof(*ev
) +
2504 ev
->num_hndl
* sizeof(struct hci_comp_blocks_info
)) {
2505 BT_DBG("%s bad parameters", hdev
->name
);
2509 BT_DBG("%s num_blocks %d num_hndl %d", hdev
->name
, ev
->num_blocks
,
2512 for (i
= 0; i
< ev
->num_hndl
; i
++) {
2513 struct hci_comp_blocks_info
*info
= &ev
->handles
[i
];
2514 struct hci_conn
*conn
= NULL
;
2515 __u16 handle
, block_count
;
2517 handle
= __le16_to_cpu(info
->handle
);
2518 block_count
= __le16_to_cpu(info
->blocks
);
2520 conn
= __hci_conn_lookup_handle(hdev
, handle
);
2524 conn
->sent
-= block_count
;
2526 switch (conn
->type
) {
2529 hdev
->block_cnt
+= block_count
;
2530 if (hdev
->block_cnt
> hdev
->num_blocks
)
2531 hdev
->block_cnt
= hdev
->num_blocks
;
2535 BT_ERR("Unknown type %d conn %p", conn
->type
, conn
);
2540 queue_work(hdev
->workqueue
, &hdev
->tx_work
);
2543 static void hci_mode_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2545 struct hci_ev_mode_change
*ev
= (void *) skb
->data
;
2546 struct hci_conn
*conn
;
2548 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2552 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2554 conn
->mode
= ev
->mode
;
2555 conn
->interval
= __le16_to_cpu(ev
->interval
);
2557 if (!test_and_clear_bit(HCI_CONN_MODE_CHANGE_PEND
,
2559 if (conn
->mode
== HCI_CM_ACTIVE
)
2560 set_bit(HCI_CONN_POWER_SAVE
, &conn
->flags
);
2562 clear_bit(HCI_CONN_POWER_SAVE
, &conn
->flags
);
2565 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND
, &conn
->flags
))
2566 hci_sco_setup(conn
, ev
->status
);
2569 hci_dev_unlock(hdev
);
2572 static void hci_pin_code_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2574 struct hci_ev_pin_code_req
*ev
= (void *) skb
->data
;
2575 struct hci_conn
*conn
;
2577 BT_DBG("%s", hdev
->name
);
2581 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
2585 if (conn
->state
== BT_CONNECTED
) {
2586 hci_conn_hold(conn
);
2587 conn
->disc_timeout
= HCI_PAIRING_TIMEOUT
;
2588 hci_conn_drop(conn
);
2591 if (!test_bit(HCI_PAIRABLE
, &hdev
->dev_flags
))
2592 hci_send_cmd(hdev
, HCI_OP_PIN_CODE_NEG_REPLY
,
2593 sizeof(ev
->bdaddr
), &ev
->bdaddr
);
2594 else if (test_bit(HCI_MGMT
, &hdev
->dev_flags
)) {
2597 if (conn
->pending_sec_level
== BT_SECURITY_HIGH
)
2602 mgmt_pin_code_request(hdev
, &ev
->bdaddr
, secure
);
2606 hci_dev_unlock(hdev
);
2609 static void hci_link_key_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2611 struct hci_ev_link_key_req
*ev
= (void *) skb
->data
;
2612 struct hci_cp_link_key_reply cp
;
2613 struct hci_conn
*conn
;
2614 struct link_key
*key
;
2616 BT_DBG("%s", hdev
->name
);
2618 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
2623 key
= hci_find_link_key(hdev
, &ev
->bdaddr
);
2625 BT_DBG("%s link key not found for %pMR", hdev
->name
,
2630 BT_DBG("%s found key type %u for %pMR", hdev
->name
, key
->type
,
2633 if (!test_bit(HCI_DEBUG_KEYS
, &hdev
->dev_flags
) &&
2634 key
->type
== HCI_LK_DEBUG_COMBINATION
) {
2635 BT_DBG("%s ignoring debug key", hdev
->name
);
2639 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
2641 if (key
->type
== HCI_LK_UNAUTH_COMBINATION
&&
2642 conn
->auth_type
!= 0xff && (conn
->auth_type
& 0x01)) {
2643 BT_DBG("%s ignoring unauthenticated key", hdev
->name
);
2647 if (key
->type
== HCI_LK_COMBINATION
&& key
->pin_len
< 16 &&
2648 conn
->pending_sec_level
== BT_SECURITY_HIGH
) {
2649 BT_DBG("%s ignoring key unauthenticated for high security",
2654 conn
->key_type
= key
->type
;
2655 conn
->pin_length
= key
->pin_len
;
2658 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
2659 memcpy(cp
.link_key
, key
->val
, HCI_LINK_KEY_SIZE
);
2661 hci_send_cmd(hdev
, HCI_OP_LINK_KEY_REPLY
, sizeof(cp
), &cp
);
2663 hci_dev_unlock(hdev
);
2668 hci_send_cmd(hdev
, HCI_OP_LINK_KEY_NEG_REPLY
, 6, &ev
->bdaddr
);
2669 hci_dev_unlock(hdev
);
2672 static void hci_link_key_notify_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2674 struct hci_ev_link_key_notify
*ev
= (void *) skb
->data
;
2675 struct hci_conn
*conn
;
2678 BT_DBG("%s", hdev
->name
);
2682 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
2684 hci_conn_hold(conn
);
2685 conn
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
2686 pin_len
= conn
->pin_length
;
2688 if (ev
->key_type
!= HCI_LK_CHANGED_COMBINATION
)
2689 conn
->key_type
= ev
->key_type
;
2691 hci_conn_drop(conn
);
2694 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
2695 hci_add_link_key(hdev
, conn
, 1, &ev
->bdaddr
, ev
->link_key
,
2696 ev
->key_type
, pin_len
);
2698 hci_dev_unlock(hdev
);
2701 static void hci_clock_offset_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2703 struct hci_ev_clock_offset
*ev
= (void *) skb
->data
;
2704 struct hci_conn
*conn
;
2706 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2710 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2711 if (conn
&& !ev
->status
) {
2712 struct inquiry_entry
*ie
;
2714 ie
= hci_inquiry_cache_lookup(hdev
, &conn
->dst
);
2716 ie
->data
.clock_offset
= ev
->clock_offset
;
2717 ie
->timestamp
= jiffies
;
2721 hci_dev_unlock(hdev
);
2724 static void hci_pkt_type_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2726 struct hci_ev_pkt_type_change
*ev
= (void *) skb
->data
;
2727 struct hci_conn
*conn
;
2729 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2733 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2734 if (conn
&& !ev
->status
)
2735 conn
->pkt_type
= __le16_to_cpu(ev
->pkt_type
);
2737 hci_dev_unlock(hdev
);
2740 static void hci_pscan_rep_mode_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2742 struct hci_ev_pscan_rep_mode
*ev
= (void *) skb
->data
;
2743 struct inquiry_entry
*ie
;
2745 BT_DBG("%s", hdev
->name
);
2749 ie
= hci_inquiry_cache_lookup(hdev
, &ev
->bdaddr
);
2751 ie
->data
.pscan_rep_mode
= ev
->pscan_rep_mode
;
2752 ie
->timestamp
= jiffies
;
2755 hci_dev_unlock(hdev
);
2758 static void hci_inquiry_result_with_rssi_evt(struct hci_dev
*hdev
,
2759 struct sk_buff
*skb
)
2761 struct inquiry_data data
;
2762 int num_rsp
= *((__u8
*) skb
->data
);
2763 bool name_known
, ssp
;
2765 BT_DBG("%s num_rsp %d", hdev
->name
, num_rsp
);
2770 if (test_bit(HCI_PERIODIC_INQ
, &hdev
->dev_flags
))
2775 if ((skb
->len
- 1) / num_rsp
!= sizeof(struct inquiry_info_with_rssi
)) {
2776 struct inquiry_info_with_rssi_and_pscan_mode
*info
;
2777 info
= (void *) (skb
->data
+ 1);
2779 for (; num_rsp
; num_rsp
--, info
++) {
2780 bacpy(&data
.bdaddr
, &info
->bdaddr
);
2781 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
2782 data
.pscan_period_mode
= info
->pscan_period_mode
;
2783 data
.pscan_mode
= info
->pscan_mode
;
2784 memcpy(data
.dev_class
, info
->dev_class
, 3);
2785 data
.clock_offset
= info
->clock_offset
;
2786 data
.rssi
= info
->rssi
;
2787 data
.ssp_mode
= 0x00;
2789 name_known
= hci_inquiry_cache_update(hdev
, &data
,
2791 mgmt_device_found(hdev
, &info
->bdaddr
, ACL_LINK
, 0x00,
2792 info
->dev_class
, info
->rssi
,
2793 !name_known
, ssp
, NULL
, 0);
2796 struct inquiry_info_with_rssi
*info
= (void *) (skb
->data
+ 1);
2798 for (; num_rsp
; num_rsp
--, info
++) {
2799 bacpy(&data
.bdaddr
, &info
->bdaddr
);
2800 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
2801 data
.pscan_period_mode
= info
->pscan_period_mode
;
2802 data
.pscan_mode
= 0x00;
2803 memcpy(data
.dev_class
, info
->dev_class
, 3);
2804 data
.clock_offset
= info
->clock_offset
;
2805 data
.rssi
= info
->rssi
;
2806 data
.ssp_mode
= 0x00;
2807 name_known
= hci_inquiry_cache_update(hdev
, &data
,
2809 mgmt_device_found(hdev
, &info
->bdaddr
, ACL_LINK
, 0x00,
2810 info
->dev_class
, info
->rssi
,
2811 !name_known
, ssp
, NULL
, 0);
2815 hci_dev_unlock(hdev
);
2818 static void hci_remote_ext_features_evt(struct hci_dev
*hdev
,
2819 struct sk_buff
*skb
)
2821 struct hci_ev_remote_ext_features
*ev
= (void *) skb
->data
;
2822 struct hci_conn
*conn
;
2824 BT_DBG("%s", hdev
->name
);
2828 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2832 if (ev
->page
< HCI_MAX_PAGES
)
2833 memcpy(conn
->features
[ev
->page
], ev
->features
, 8);
2835 if (!ev
->status
&& ev
->page
== 0x01) {
2836 struct inquiry_entry
*ie
;
2838 ie
= hci_inquiry_cache_lookup(hdev
, &conn
->dst
);
2840 ie
->data
.ssp_mode
= (ev
->features
[0] & LMP_HOST_SSP
);
2842 if (ev
->features
[0] & LMP_HOST_SSP
) {
2843 set_bit(HCI_CONN_SSP_ENABLED
, &conn
->flags
);
2845 /* It is mandatory by the Bluetooth specification that
2846 * Extended Inquiry Results are only used when Secure
2847 * Simple Pairing is enabled, but some devices violate
2850 * To make these devices work, the internal SSP
2851 * enabled flag needs to be cleared if the remote host
2852 * features do not indicate SSP support */
2853 clear_bit(HCI_CONN_SSP_ENABLED
, &conn
->flags
);
2857 if (conn
->state
!= BT_CONFIG
)
2860 if (!ev
->status
&& !test_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
)) {
2861 struct hci_cp_remote_name_req cp
;
2862 memset(&cp
, 0, sizeof(cp
));
2863 bacpy(&cp
.bdaddr
, &conn
->dst
);
2864 cp
.pscan_rep_mode
= 0x02;
2865 hci_send_cmd(hdev
, HCI_OP_REMOTE_NAME_REQ
, sizeof(cp
), &cp
);
2866 } else if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
))
2867 mgmt_device_connected(hdev
, &conn
->dst
, conn
->type
,
2868 conn
->dst_type
, 0, NULL
, 0,
2871 if (!hci_outgoing_auth_needed(hdev
, conn
)) {
2872 conn
->state
= BT_CONNECTED
;
2873 hci_proto_connect_cfm(conn
, ev
->status
);
2874 hci_conn_drop(conn
);
2878 hci_dev_unlock(hdev
);
2881 static void hci_sync_conn_complete_evt(struct hci_dev
*hdev
,
2882 struct sk_buff
*skb
)
2884 struct hci_ev_sync_conn_complete
*ev
= (void *) skb
->data
;
2885 struct hci_conn
*conn
;
2887 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2891 conn
= hci_conn_hash_lookup_ba(hdev
, ev
->link_type
, &ev
->bdaddr
);
2893 if (ev
->link_type
== ESCO_LINK
)
2896 conn
= hci_conn_hash_lookup_ba(hdev
, ESCO_LINK
, &ev
->bdaddr
);
2900 conn
->type
= SCO_LINK
;
2903 switch (ev
->status
) {
2905 conn
->handle
= __le16_to_cpu(ev
->handle
);
2906 conn
->state
= BT_CONNECTED
;
2908 hci_conn_add_sysfs(conn
);
2911 case 0x0d: /* Connection Rejected due to Limited Resources */
2912 case 0x11: /* Unsupported Feature or Parameter Value */
2913 case 0x1c: /* SCO interval rejected */
2914 case 0x1a: /* Unsupported Remote Feature */
2915 case 0x1f: /* Unspecified error */
2917 conn
->pkt_type
= (hdev
->esco_type
& SCO_ESCO_MASK
) |
2918 (hdev
->esco_type
& EDR_ESCO_MASK
);
2919 if (hci_setup_sync(conn
, conn
->link
->handle
))
2925 conn
->state
= BT_CLOSED
;
2929 hci_proto_connect_cfm(conn
, ev
->status
);
2934 hci_dev_unlock(hdev
);
2937 static void hci_extended_inquiry_result_evt(struct hci_dev
*hdev
,
2938 struct sk_buff
*skb
)
2940 struct inquiry_data data
;
2941 struct extended_inquiry_info
*info
= (void *) (skb
->data
+ 1);
2942 int num_rsp
= *((__u8
*) skb
->data
);
2945 BT_DBG("%s num_rsp %d", hdev
->name
, num_rsp
);
2950 if (test_bit(HCI_PERIODIC_INQ
, &hdev
->dev_flags
))
2955 for (; num_rsp
; num_rsp
--, info
++) {
2956 bool name_known
, ssp
;
2958 bacpy(&data
.bdaddr
, &info
->bdaddr
);
2959 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
2960 data
.pscan_period_mode
= info
->pscan_period_mode
;
2961 data
.pscan_mode
= 0x00;
2962 memcpy(data
.dev_class
, info
->dev_class
, 3);
2963 data
.clock_offset
= info
->clock_offset
;
2964 data
.rssi
= info
->rssi
;
2965 data
.ssp_mode
= 0x01;
2967 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
2968 name_known
= eir_has_data_type(info
->data
,
2974 name_known
= hci_inquiry_cache_update(hdev
, &data
, name_known
,
2976 eir_len
= eir_get_length(info
->data
, sizeof(info
->data
));
2977 mgmt_device_found(hdev
, &info
->bdaddr
, ACL_LINK
, 0x00,
2978 info
->dev_class
, info
->rssi
, !name_known
,
2979 ssp
, info
->data
, eir_len
);
2982 hci_dev_unlock(hdev
);
2985 static void hci_key_refresh_complete_evt(struct hci_dev
*hdev
,
2986 struct sk_buff
*skb
)
2988 struct hci_ev_key_refresh_complete
*ev
= (void *) skb
->data
;
2989 struct hci_conn
*conn
;
2991 BT_DBG("%s status 0x%2.2x handle 0x%4.4x", hdev
->name
, ev
->status
,
2992 __le16_to_cpu(ev
->handle
));
2996 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
3000 /* For BR/EDR the necessary steps are taken through the
3001 * auth_complete event.
3003 if (conn
->type
!= LE_LINK
)
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
);
3013 hci_conn_drop(conn
);
3017 if (conn
->state
== BT_CONFIG
) {
3019 conn
->state
= BT_CONNECTED
;
3021 hci_proto_connect_cfm(conn
, ev
->status
);
3022 hci_conn_drop(conn
);
3024 hci_auth_cfm(conn
, ev
->status
);
3026 hci_conn_hold(conn
);
3027 conn
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
3028 hci_conn_drop(conn
);
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
== HCI_AT_DEDICATED_BONDING
||
3039 conn
->remote_auth
== HCI_AT_DEDICATED_BONDING_MITM
) {
3040 /* If both remote and local IO capabilities allow MITM
3041 * protection then require it, otherwise don't */
3042 if (conn
->remote_cap
== HCI_IO_NO_INPUT_OUTPUT
||
3043 conn
->io_capability
== HCI_IO_NO_INPUT_OUTPUT
)
3044 return HCI_AT_DEDICATED_BONDING
;
3046 return HCI_AT_DEDICATED_BONDING_MITM
;
3049 /* If remote requests no-bonding follow that lead */
3050 if (conn
->remote_auth
== HCI_AT_NO_BONDING
||
3051 conn
->remote_auth
== HCI_AT_NO_BONDING_MITM
)
3052 return conn
->remote_auth
| (conn
->auth_type
& 0x01);
3054 return conn
->auth_type
;
3057 static void hci_io_capa_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3059 struct hci_ev_io_capa_request
*ev
= (void *) skb
->data
;
3060 struct hci_conn
*conn
;
3062 BT_DBG("%s", hdev
->name
);
3066 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3070 hci_conn_hold(conn
);
3072 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3075 if (test_bit(HCI_PAIRABLE
, &hdev
->dev_flags
) ||
3076 (conn
->remote_auth
& ~0x01) == HCI_AT_NO_BONDING
) {
3077 struct hci_cp_io_capability_reply cp
;
3079 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
3080 /* Change the IO capability from KeyboardDisplay
3081 * to DisplayYesNo as it is not supported by BT spec. */
3082 cp
.capability
= (conn
->io_capability
== 0x04) ?
3083 HCI_IO_DISPLAY_YESNO
: conn
->io_capability
;
3084 conn
->auth_type
= hci_get_auth_req(conn
);
3085 cp
.authentication
= conn
->auth_type
;
3087 if (hci_find_remote_oob_data(hdev
, &conn
->dst
) &&
3088 (conn
->out
|| test_bit(HCI_CONN_REMOTE_OOB
, &conn
->flags
)))
3093 hci_send_cmd(hdev
, HCI_OP_IO_CAPABILITY_REPLY
,
3096 struct hci_cp_io_capability_neg_reply cp
;
3098 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
3099 cp
.reason
= HCI_ERROR_PAIRING_NOT_ALLOWED
;
3101 hci_send_cmd(hdev
, HCI_OP_IO_CAPABILITY_NEG_REPLY
,
3106 hci_dev_unlock(hdev
);
3109 static void hci_io_capa_reply_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3111 struct hci_ev_io_capa_reply
*ev
= (void *) skb
->data
;
3112 struct hci_conn
*conn
;
3114 BT_DBG("%s", hdev
->name
);
3118 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3122 conn
->remote_cap
= ev
->capability
;
3123 conn
->remote_auth
= ev
->authentication
;
3125 set_bit(HCI_CONN_REMOTE_OOB
, &conn
->flags
);
3128 hci_dev_unlock(hdev
);
3131 static void hci_user_confirm_request_evt(struct hci_dev
*hdev
,
3132 struct sk_buff
*skb
)
3134 struct hci_ev_user_confirm_req
*ev
= (void *) skb
->data
;
3135 int loc_mitm
, rem_mitm
, confirm_hint
= 0;
3136 struct hci_conn
*conn
;
3138 BT_DBG("%s", hdev
->name
);
3142 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3145 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3149 loc_mitm
= (conn
->auth_type
& 0x01);
3150 rem_mitm
= (conn
->remote_auth
& 0x01);
3152 /* If we require MITM but the remote device can't provide that
3153 * (it has NoInputNoOutput) then reject the confirmation
3154 * request. The only exception is when we're dedicated bonding
3155 * initiators (connect_cfm_cb set) since then we always have the MITM
3157 if (!conn
->connect_cfm_cb
&& loc_mitm
&&
3158 conn
->remote_cap
== HCI_IO_NO_INPUT_OUTPUT
) {
3159 BT_DBG("Rejecting request: remote device can't provide MITM");
3160 hci_send_cmd(hdev
, HCI_OP_USER_CONFIRM_NEG_REPLY
,
3161 sizeof(ev
->bdaddr
), &ev
->bdaddr
);
3165 /* If no side requires MITM protection; auto-accept */
3166 if ((!loc_mitm
|| conn
->remote_cap
== HCI_IO_NO_INPUT_OUTPUT
) &&
3167 (!rem_mitm
|| conn
->io_capability
== HCI_IO_NO_INPUT_OUTPUT
)) {
3169 /* If we're not the initiators request authorization to
3170 * proceed from user space (mgmt_user_confirm with
3171 * confirm_hint set to 1). The exception is if neither
3172 * side had MITM in which case we do auto-accept.
3174 if (!test_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
) &&
3175 (loc_mitm
|| rem_mitm
)) {
3176 BT_DBG("Confirming auto-accept as acceptor");
3181 BT_DBG("Auto-accept of user confirmation with %ums delay",
3182 hdev
->auto_accept_delay
);
3184 if (hdev
->auto_accept_delay
> 0) {
3185 int delay
= msecs_to_jiffies(hdev
->auto_accept_delay
);
3186 mod_timer(&conn
->auto_accept_timer
, jiffies
+ delay
);
3190 hci_send_cmd(hdev
, HCI_OP_USER_CONFIRM_REPLY
,
3191 sizeof(ev
->bdaddr
), &ev
->bdaddr
);
3196 mgmt_user_confirm_request(hdev
, &ev
->bdaddr
, ACL_LINK
, 0, ev
->passkey
,
3200 hci_dev_unlock(hdev
);
3203 static void hci_user_passkey_request_evt(struct hci_dev
*hdev
,
3204 struct sk_buff
*skb
)
3206 struct hci_ev_user_passkey_req
*ev
= (void *) skb
->data
;
3208 BT_DBG("%s", hdev
->name
);
3210 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3211 mgmt_user_passkey_request(hdev
, &ev
->bdaddr
, ACL_LINK
, 0);
3214 static void hci_user_passkey_notify_evt(struct hci_dev
*hdev
,
3215 struct sk_buff
*skb
)
3217 struct hci_ev_user_passkey_notify
*ev
= (void *) skb
->data
;
3218 struct hci_conn
*conn
;
3220 BT_DBG("%s", hdev
->name
);
3222 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3226 conn
->passkey_notify
= __le32_to_cpu(ev
->passkey
);
3227 conn
->passkey_entered
= 0;
3229 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3230 mgmt_user_passkey_notify(hdev
, &conn
->dst
, conn
->type
,
3231 conn
->dst_type
, conn
->passkey_notify
,
3232 conn
->passkey_entered
);
3235 static void hci_keypress_notify_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3237 struct hci_ev_keypress_notify
*ev
= (void *) skb
->data
;
3238 struct hci_conn
*conn
;
3240 BT_DBG("%s", hdev
->name
);
3242 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3247 case HCI_KEYPRESS_STARTED
:
3248 conn
->passkey_entered
= 0;
3251 case HCI_KEYPRESS_ENTERED
:
3252 conn
->passkey_entered
++;
3255 case HCI_KEYPRESS_ERASED
:
3256 conn
->passkey_entered
--;
3259 case HCI_KEYPRESS_CLEARED
:
3260 conn
->passkey_entered
= 0;
3263 case HCI_KEYPRESS_COMPLETED
:
3267 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3268 mgmt_user_passkey_notify(hdev
, &conn
->dst
, conn
->type
,
3269 conn
->dst_type
, conn
->passkey_notify
,
3270 conn
->passkey_entered
);
3273 static void hci_simple_pair_complete_evt(struct hci_dev
*hdev
,
3274 struct sk_buff
*skb
)
3276 struct hci_ev_simple_pair_complete
*ev
= (void *) skb
->data
;
3277 struct hci_conn
*conn
;
3279 BT_DBG("%s", hdev
->name
);
3283 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3287 /* To avoid duplicate auth_failed events to user space we check
3288 * the HCI_CONN_AUTH_PEND flag which will be set if we
3289 * initiated the authentication. A traditional auth_complete
3290 * event gets always produced as initiator and is also mapped to
3291 * the mgmt_auth_failed event */
3292 if (!test_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
) && ev
->status
)
3293 mgmt_auth_failed(hdev
, &conn
->dst
, conn
->type
, conn
->dst_type
,
3296 hci_conn_drop(conn
);
3299 hci_dev_unlock(hdev
);
3302 static void hci_remote_host_features_evt(struct hci_dev
*hdev
,
3303 struct sk_buff
*skb
)
3305 struct hci_ev_remote_host_features
*ev
= (void *) skb
->data
;
3306 struct inquiry_entry
*ie
;
3307 struct hci_conn
*conn
;
3309 BT_DBG("%s", hdev
->name
);
3313 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3315 memcpy(conn
->features
[1], ev
->features
, 8);
3317 ie
= hci_inquiry_cache_lookup(hdev
, &ev
->bdaddr
);
3319 ie
->data
.ssp_mode
= (ev
->features
[0] & LMP_HOST_SSP
);
3321 hci_dev_unlock(hdev
);
3324 static void hci_remote_oob_data_request_evt(struct hci_dev
*hdev
,
3325 struct sk_buff
*skb
)
3327 struct hci_ev_remote_oob_data_request
*ev
= (void *) skb
->data
;
3328 struct oob_data
*data
;
3330 BT_DBG("%s", hdev
->name
);
3334 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3337 data
= hci_find_remote_oob_data(hdev
, &ev
->bdaddr
);
3339 struct hci_cp_remote_oob_data_reply cp
;
3341 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
3342 memcpy(cp
.hash
, data
->hash
, sizeof(cp
.hash
));
3343 memcpy(cp
.randomizer
, data
->randomizer
, sizeof(cp
.randomizer
));
3345 hci_send_cmd(hdev
, HCI_OP_REMOTE_OOB_DATA_REPLY
, sizeof(cp
),
3348 struct hci_cp_remote_oob_data_neg_reply cp
;
3350 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
3351 hci_send_cmd(hdev
, HCI_OP_REMOTE_OOB_DATA_NEG_REPLY
, sizeof(cp
),
3356 hci_dev_unlock(hdev
);
3359 static void hci_phy_link_complete_evt(struct hci_dev
*hdev
,
3360 struct sk_buff
*skb
)
3362 struct hci_ev_phy_link_complete
*ev
= (void *) skb
->data
;
3363 struct hci_conn
*hcon
, *bredr_hcon
;
3365 BT_DBG("%s handle 0x%2.2x status 0x%2.2x", hdev
->name
, ev
->phy_handle
,
3370 hcon
= hci_conn_hash_lookup_handle(hdev
, ev
->phy_handle
);
3372 hci_dev_unlock(hdev
);
3378 hci_dev_unlock(hdev
);
3382 bredr_hcon
= hcon
->amp_mgr
->l2cap_conn
->hcon
;
3384 hcon
->state
= BT_CONNECTED
;
3385 bacpy(&hcon
->dst
, &bredr_hcon
->dst
);
3387 hci_conn_hold(hcon
);
3388 hcon
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
3389 hci_conn_drop(hcon
);
3391 hci_conn_add_sysfs(hcon
);
3393 amp_physical_cfm(bredr_hcon
, hcon
);
3395 hci_dev_unlock(hdev
);
3398 static void hci_loglink_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3400 struct hci_ev_logical_link_complete
*ev
= (void *) skb
->data
;
3401 struct hci_conn
*hcon
;
3402 struct hci_chan
*hchan
;
3403 struct amp_mgr
*mgr
;
3405 BT_DBG("%s log_handle 0x%4.4x phy_handle 0x%2.2x status 0x%2.2x",
3406 hdev
->name
, le16_to_cpu(ev
->handle
), ev
->phy_handle
,
3409 hcon
= hci_conn_hash_lookup_handle(hdev
, ev
->phy_handle
);
3413 /* Create AMP hchan */
3414 hchan
= hci_chan_create(hcon
);
3418 hchan
->handle
= le16_to_cpu(ev
->handle
);
3420 BT_DBG("hcon %p mgr %p hchan %p", hcon
, hcon
->amp_mgr
, hchan
);
3422 mgr
= hcon
->amp_mgr
;
3423 if (mgr
&& mgr
->bredr_chan
) {
3424 struct l2cap_chan
*bredr_chan
= mgr
->bredr_chan
;
3426 l2cap_chan_lock(bredr_chan
);
3428 bredr_chan
->conn
->mtu
= hdev
->block_mtu
;
3429 l2cap_logical_cfm(bredr_chan
, hchan
, 0);
3430 hci_conn_hold(hcon
);
3432 l2cap_chan_unlock(bredr_chan
);
3436 static void hci_disconn_loglink_complete_evt(struct hci_dev
*hdev
,
3437 struct sk_buff
*skb
)
3439 struct hci_ev_disconn_logical_link_complete
*ev
= (void *) skb
->data
;
3440 struct hci_chan
*hchan
;
3442 BT_DBG("%s log handle 0x%4.4x status 0x%2.2x", hdev
->name
,
3443 le16_to_cpu(ev
->handle
), ev
->status
);
3450 hchan
= hci_chan_lookup_handle(hdev
, le16_to_cpu(ev
->handle
));
3454 amp_destroy_logical_link(hchan
, ev
->reason
);
3457 hci_dev_unlock(hdev
);
3460 static void hci_disconn_phylink_complete_evt(struct hci_dev
*hdev
,
3461 struct sk_buff
*skb
)
3463 struct hci_ev_disconn_phy_link_complete
*ev
= (void *) skb
->data
;
3464 struct hci_conn
*hcon
;
3466 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
3473 hcon
= hci_conn_hash_lookup_handle(hdev
, ev
->phy_handle
);
3475 hcon
->state
= BT_CLOSED
;
3479 hci_dev_unlock(hdev
);
3482 static void hci_le_conn_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3484 struct hci_ev_le_conn_complete
*ev
= (void *) skb
->data
;
3485 struct hci_conn
*conn
;
3487 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
3491 conn
= hci_conn_hash_lookup_state(hdev
, LE_LINK
, BT_CONNECT
);
3493 conn
= hci_conn_add(hdev
, LE_LINK
, &ev
->bdaddr
);
3495 BT_ERR("No memory for new connection");
3499 conn
->dst_type
= ev
->bdaddr_type
;
3501 if (ev
->role
== LE_CONN_ROLE_MASTER
) {
3503 conn
->link_mode
|= HCI_LM_MASTER
;
3508 mgmt_connect_failed(hdev
, &conn
->dst
, conn
->type
,
3509 conn
->dst_type
, ev
->status
);
3510 hci_proto_connect_cfm(conn
, ev
->status
);
3511 conn
->state
= BT_CLOSED
;
3516 if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
))
3517 mgmt_device_connected(hdev
, &ev
->bdaddr
, conn
->type
,
3518 conn
->dst_type
, 0, NULL
, 0, NULL
);
3520 conn
->sec_level
= BT_SECURITY_LOW
;
3521 conn
->handle
= __le16_to_cpu(ev
->handle
);
3522 conn
->state
= BT_CONNECTED
;
3524 hci_conn_add_sysfs(conn
);
3526 hci_proto_connect_cfm(conn
, ev
->status
);
3529 hci_dev_unlock(hdev
);
3532 static void hci_le_adv_report_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3534 u8 num_reports
= skb
->data
[0];
3535 void *ptr
= &skb
->data
[1];
3538 while (num_reports
--) {
3539 struct hci_ev_le_advertising_info
*ev
= ptr
;
3541 rssi
= ev
->data
[ev
->length
];
3542 mgmt_device_found(hdev
, &ev
->bdaddr
, LE_LINK
, ev
->bdaddr_type
,
3543 NULL
, rssi
, 0, 1, ev
->data
, ev
->length
);
3545 ptr
+= sizeof(*ev
) + ev
->length
+ 1;
3549 static void hci_le_ltk_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3551 struct hci_ev_le_ltk_req
*ev
= (void *) skb
->data
;
3552 struct hci_cp_le_ltk_reply cp
;
3553 struct hci_cp_le_ltk_neg_reply neg
;
3554 struct hci_conn
*conn
;
3555 struct smp_ltk
*ltk
;
3557 BT_DBG("%s handle 0x%4.4x", hdev
->name
, __le16_to_cpu(ev
->handle
));
3561 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
3565 ltk
= hci_find_ltk(hdev
, ev
->ediv
, ev
->random
);
3569 memcpy(cp
.ltk
, ltk
->val
, sizeof(ltk
->val
));
3570 cp
.handle
= cpu_to_le16(conn
->handle
);
3572 if (ltk
->authenticated
)
3573 conn
->pending_sec_level
= BT_SECURITY_HIGH
;
3575 conn
->pending_sec_level
= BT_SECURITY_MEDIUM
;
3577 conn
->enc_key_size
= ltk
->enc_size
;
3579 hci_send_cmd(hdev
, HCI_OP_LE_LTK_REPLY
, sizeof(cp
), &cp
);
3581 /* Ref. Bluetooth Core SPEC pages 1975 and 2004. STK is a
3582 * temporary key used to encrypt a connection following
3583 * pairing. It is used during the Encrypted Session Setup to
3584 * distribute the keys. Later, security can be re-established
3585 * using a distributed LTK.
3587 if (ltk
->type
== HCI_SMP_STK_SLAVE
) {
3588 list_del(<k
->list
);
3592 hci_dev_unlock(hdev
);
3597 neg
.handle
= ev
->handle
;
3598 hci_send_cmd(hdev
, HCI_OP_LE_LTK_NEG_REPLY
, sizeof(neg
), &neg
);
3599 hci_dev_unlock(hdev
);
3602 static void hci_le_meta_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3604 struct hci_ev_le_meta
*le_ev
= (void *) skb
->data
;
3606 skb_pull(skb
, sizeof(*le_ev
));
3608 switch (le_ev
->subevent
) {
3609 case HCI_EV_LE_CONN_COMPLETE
:
3610 hci_le_conn_complete_evt(hdev
, skb
);
3613 case HCI_EV_LE_ADVERTISING_REPORT
:
3614 hci_le_adv_report_evt(hdev
, skb
);
3617 case HCI_EV_LE_LTK_REQ
:
3618 hci_le_ltk_request_evt(hdev
, skb
);
3626 static void hci_chan_selected_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3628 struct hci_ev_channel_selected
*ev
= (void *) skb
->data
;
3629 struct hci_conn
*hcon
;
3631 BT_DBG("%s handle 0x%2.2x", hdev
->name
, ev
->phy_handle
);
3633 skb_pull(skb
, sizeof(*ev
));
3635 hcon
= hci_conn_hash_lookup_handle(hdev
, ev
->phy_handle
);
3639 amp_read_loc_assoc_final_data(hdev
, hcon
);
3642 void hci_event_packet(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3644 struct hci_event_hdr
*hdr
= (void *) skb
->data
;
3645 __u8 event
= hdr
->evt
;
3649 /* Received events are (currently) only needed when a request is
3650 * ongoing so avoid unnecessary memory allocation.
3652 if (hdev
->req_status
== HCI_REQ_PEND
) {
3653 kfree_skb(hdev
->recv_evt
);
3654 hdev
->recv_evt
= skb_clone(skb
, GFP_KERNEL
);
3657 hci_dev_unlock(hdev
);
3659 skb_pull(skb
, HCI_EVENT_HDR_SIZE
);
3661 if (hdev
->sent_cmd
&& bt_cb(hdev
->sent_cmd
)->req
.event
== event
) {
3662 struct hci_command_hdr
*hdr
= (void *) hdev
->sent_cmd
->data
;
3663 u16 opcode
= __le16_to_cpu(hdr
->opcode
);
3665 hci_req_cmd_complete(hdev
, opcode
, 0);
3669 case HCI_EV_INQUIRY_COMPLETE
:
3670 hci_inquiry_complete_evt(hdev
, skb
);
3673 case HCI_EV_INQUIRY_RESULT
:
3674 hci_inquiry_result_evt(hdev
, skb
);
3677 case HCI_EV_CONN_COMPLETE
:
3678 hci_conn_complete_evt(hdev
, skb
);
3681 case HCI_EV_CONN_REQUEST
:
3682 hci_conn_request_evt(hdev
, skb
);
3685 case HCI_EV_DISCONN_COMPLETE
:
3686 hci_disconn_complete_evt(hdev
, skb
);
3689 case HCI_EV_AUTH_COMPLETE
:
3690 hci_auth_complete_evt(hdev
, skb
);
3693 case HCI_EV_REMOTE_NAME
:
3694 hci_remote_name_evt(hdev
, skb
);
3697 case HCI_EV_ENCRYPT_CHANGE
:
3698 hci_encrypt_change_evt(hdev
, skb
);
3701 case HCI_EV_CHANGE_LINK_KEY_COMPLETE
:
3702 hci_change_link_key_complete_evt(hdev
, skb
);
3705 case HCI_EV_REMOTE_FEATURES
:
3706 hci_remote_features_evt(hdev
, skb
);
3709 case HCI_EV_CMD_COMPLETE
:
3710 hci_cmd_complete_evt(hdev
, skb
);
3713 case HCI_EV_CMD_STATUS
:
3714 hci_cmd_status_evt(hdev
, skb
);
3717 case HCI_EV_ROLE_CHANGE
:
3718 hci_role_change_evt(hdev
, skb
);
3721 case HCI_EV_NUM_COMP_PKTS
:
3722 hci_num_comp_pkts_evt(hdev
, skb
);
3725 case HCI_EV_MODE_CHANGE
:
3726 hci_mode_change_evt(hdev
, skb
);
3729 case HCI_EV_PIN_CODE_REQ
:
3730 hci_pin_code_request_evt(hdev
, skb
);
3733 case HCI_EV_LINK_KEY_REQ
:
3734 hci_link_key_request_evt(hdev
, skb
);
3737 case HCI_EV_LINK_KEY_NOTIFY
:
3738 hci_link_key_notify_evt(hdev
, skb
);
3741 case HCI_EV_CLOCK_OFFSET
:
3742 hci_clock_offset_evt(hdev
, skb
);
3745 case HCI_EV_PKT_TYPE_CHANGE
:
3746 hci_pkt_type_change_evt(hdev
, skb
);
3749 case HCI_EV_PSCAN_REP_MODE
:
3750 hci_pscan_rep_mode_evt(hdev
, skb
);
3753 case HCI_EV_INQUIRY_RESULT_WITH_RSSI
:
3754 hci_inquiry_result_with_rssi_evt(hdev
, skb
);
3757 case HCI_EV_REMOTE_EXT_FEATURES
:
3758 hci_remote_ext_features_evt(hdev
, skb
);
3761 case HCI_EV_SYNC_CONN_COMPLETE
:
3762 hci_sync_conn_complete_evt(hdev
, skb
);
3765 case HCI_EV_EXTENDED_INQUIRY_RESULT
:
3766 hci_extended_inquiry_result_evt(hdev
, skb
);
3769 case HCI_EV_KEY_REFRESH_COMPLETE
:
3770 hci_key_refresh_complete_evt(hdev
, skb
);
3773 case HCI_EV_IO_CAPA_REQUEST
:
3774 hci_io_capa_request_evt(hdev
, skb
);
3777 case HCI_EV_IO_CAPA_REPLY
:
3778 hci_io_capa_reply_evt(hdev
, skb
);
3781 case HCI_EV_USER_CONFIRM_REQUEST
:
3782 hci_user_confirm_request_evt(hdev
, skb
);
3785 case HCI_EV_USER_PASSKEY_REQUEST
:
3786 hci_user_passkey_request_evt(hdev
, skb
);
3789 case HCI_EV_USER_PASSKEY_NOTIFY
:
3790 hci_user_passkey_notify_evt(hdev
, skb
);
3793 case HCI_EV_KEYPRESS_NOTIFY
:
3794 hci_keypress_notify_evt(hdev
, skb
);
3797 case HCI_EV_SIMPLE_PAIR_COMPLETE
:
3798 hci_simple_pair_complete_evt(hdev
, skb
);
3801 case HCI_EV_REMOTE_HOST_FEATURES
:
3802 hci_remote_host_features_evt(hdev
, skb
);
3805 case HCI_EV_LE_META
:
3806 hci_le_meta_evt(hdev
, skb
);
3809 case HCI_EV_CHANNEL_SELECTED
:
3810 hci_chan_selected_evt(hdev
, skb
);
3813 case HCI_EV_REMOTE_OOB_DATA_REQUEST
:
3814 hci_remote_oob_data_request_evt(hdev
, skb
);
3817 case HCI_EV_PHY_LINK_COMPLETE
:
3818 hci_phy_link_complete_evt(hdev
, skb
);
3821 case HCI_EV_LOGICAL_LINK_COMPLETE
:
3822 hci_loglink_complete_evt(hdev
, skb
);
3825 case HCI_EV_DISCONN_LOGICAL_LINK_COMPLETE
:
3826 hci_disconn_loglink_complete_evt(hdev
, skb
);
3829 case HCI_EV_DISCONN_PHY_LINK_COMPLETE
:
3830 hci_disconn_phylink_complete_evt(hdev
, skb
);
3833 case HCI_EV_NUM_COMP_BLOCKS
:
3834 hci_num_comp_blocks_evt(hdev
, skb
);
3838 BT_DBG("%s event 0x%2.2x", hdev
->name
, event
);
3843 hdev
->stat
.evt_rx
++;