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
);
51 smp_mb__after_clear_bit(); /* wake_up_bit advises about this barrier */
52 wake_up_bit(&hdev
->flags
, HCI_INQUIRY
);
55 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
58 hci_conn_check_pending(hdev
);
61 static void hci_cc_periodic_inq(struct hci_dev
*hdev
, struct sk_buff
*skb
)
63 __u8 status
= *((__u8
*) skb
->data
);
65 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
70 set_bit(HCI_PERIODIC_INQ
, &hdev
->dev_flags
);
73 static void hci_cc_exit_periodic_inq(struct hci_dev
*hdev
, struct sk_buff
*skb
)
75 __u8 status
= *((__u8
*) skb
->data
);
77 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
82 clear_bit(HCI_PERIODIC_INQ
, &hdev
->dev_flags
);
84 hci_conn_check_pending(hdev
);
87 static void hci_cc_remote_name_req_cancel(struct hci_dev
*hdev
,
90 BT_DBG("%s", hdev
->name
);
93 static void hci_cc_role_discovery(struct hci_dev
*hdev
, struct sk_buff
*skb
)
95 struct hci_rp_role_discovery
*rp
= (void *) skb
->data
;
96 struct hci_conn
*conn
;
98 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
105 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(rp
->handle
));
108 conn
->link_mode
&= ~HCI_LM_MASTER
;
110 conn
->link_mode
|= HCI_LM_MASTER
;
113 hci_dev_unlock(hdev
);
116 static void hci_cc_read_link_policy(struct hci_dev
*hdev
, struct sk_buff
*skb
)
118 struct hci_rp_read_link_policy
*rp
= (void *) skb
->data
;
119 struct hci_conn
*conn
;
121 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
128 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(rp
->handle
));
130 conn
->link_policy
= __le16_to_cpu(rp
->policy
);
132 hci_dev_unlock(hdev
);
135 static void hci_cc_write_link_policy(struct hci_dev
*hdev
, struct sk_buff
*skb
)
137 struct hci_rp_write_link_policy
*rp
= (void *) skb
->data
;
138 struct hci_conn
*conn
;
141 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
146 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_LINK_POLICY
);
152 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(rp
->handle
));
154 conn
->link_policy
= get_unaligned_le16(sent
+ 2);
156 hci_dev_unlock(hdev
);
159 static void hci_cc_read_def_link_policy(struct hci_dev
*hdev
,
162 struct hci_rp_read_def_link_policy
*rp
= (void *) skb
->data
;
164 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
169 hdev
->link_policy
= __le16_to_cpu(rp
->policy
);
172 static void hci_cc_write_def_link_policy(struct hci_dev
*hdev
,
175 __u8 status
= *((__u8
*) skb
->data
);
178 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
180 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_DEF_LINK_POLICY
);
185 hdev
->link_policy
= get_unaligned_le16(sent
);
188 static void hci_cc_reset(struct hci_dev
*hdev
, struct sk_buff
*skb
)
190 __u8 status
= *((__u8
*) skb
->data
);
192 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
194 clear_bit(HCI_RESET
, &hdev
->flags
);
196 /* Reset all non-persistent flags */
197 hdev
->dev_flags
&= ~HCI_PERSISTENT_MASK
;
199 hdev
->discovery
.state
= DISCOVERY_STOPPED
;
200 hdev
->inq_tx_power
= HCI_TX_POWER_INVALID
;
201 hdev
->adv_tx_power
= HCI_TX_POWER_INVALID
;
203 memset(hdev
->adv_data
, 0, sizeof(hdev
->adv_data
));
204 hdev
->adv_data_len
= 0;
207 static void hci_cc_write_local_name(struct hci_dev
*hdev
, struct sk_buff
*skb
)
209 __u8 status
= *((__u8
*) skb
->data
);
212 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
214 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_LOCAL_NAME
);
220 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
221 mgmt_set_local_name_complete(hdev
, sent
, status
);
223 memcpy(hdev
->dev_name
, sent
, HCI_MAX_NAME_LENGTH
);
225 hci_dev_unlock(hdev
);
228 static void hci_cc_read_local_name(struct hci_dev
*hdev
, struct sk_buff
*skb
)
230 struct hci_rp_read_local_name
*rp
= (void *) skb
->data
;
232 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
237 if (test_bit(HCI_SETUP
, &hdev
->dev_flags
))
238 memcpy(hdev
->dev_name
, rp
->name
, HCI_MAX_NAME_LENGTH
);
241 static void hci_cc_write_auth_enable(struct hci_dev
*hdev
, struct sk_buff
*skb
)
243 __u8 status
= *((__u8
*) skb
->data
);
246 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
248 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_AUTH_ENABLE
);
253 __u8 param
= *((__u8
*) sent
);
255 if (param
== AUTH_ENABLED
)
256 set_bit(HCI_AUTH
, &hdev
->flags
);
258 clear_bit(HCI_AUTH
, &hdev
->flags
);
261 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
262 mgmt_auth_enable_complete(hdev
, status
);
265 static void hci_cc_write_encrypt_mode(struct hci_dev
*hdev
, struct sk_buff
*skb
)
267 __u8 status
= *((__u8
*) skb
->data
);
270 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
272 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_ENCRYPT_MODE
);
277 __u8 param
= *((__u8
*) sent
);
280 set_bit(HCI_ENCRYPT
, &hdev
->flags
);
282 clear_bit(HCI_ENCRYPT
, &hdev
->flags
);
286 static void hci_cc_write_scan_enable(struct hci_dev
*hdev
, struct sk_buff
*skb
)
288 __u8 param
, status
= *((__u8
*) skb
->data
);
289 int old_pscan
, old_iscan
;
292 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
294 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_SCAN_ENABLE
);
298 param
= *((__u8
*) sent
);
303 mgmt_write_scan_failed(hdev
, param
, status
);
304 hdev
->discov_timeout
= 0;
308 old_pscan
= test_and_clear_bit(HCI_PSCAN
, &hdev
->flags
);
309 old_iscan
= test_and_clear_bit(HCI_ISCAN
, &hdev
->flags
);
311 if (param
& SCAN_INQUIRY
) {
312 set_bit(HCI_ISCAN
, &hdev
->flags
);
314 mgmt_discoverable(hdev
, 1);
315 if (hdev
->discov_timeout
> 0) {
316 int to
= msecs_to_jiffies(hdev
->discov_timeout
* 1000);
317 queue_delayed_work(hdev
->workqueue
, &hdev
->discov_off
,
320 } else if (old_iscan
)
321 mgmt_discoverable(hdev
, 0);
323 if (param
& SCAN_PAGE
) {
324 set_bit(HCI_PSCAN
, &hdev
->flags
);
326 mgmt_connectable(hdev
, 1);
327 } else if (old_pscan
)
328 mgmt_connectable(hdev
, 0);
331 hci_dev_unlock(hdev
);
334 static void hci_cc_read_class_of_dev(struct hci_dev
*hdev
, struct sk_buff
*skb
)
336 struct hci_rp_read_class_of_dev
*rp
= (void *) skb
->data
;
338 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
343 memcpy(hdev
->dev_class
, rp
->dev_class
, 3);
345 BT_DBG("%s class 0x%.2x%.2x%.2x", hdev
->name
,
346 hdev
->dev_class
[2], hdev
->dev_class
[1], hdev
->dev_class
[0]);
349 static void hci_cc_write_class_of_dev(struct hci_dev
*hdev
, struct sk_buff
*skb
)
351 __u8 status
= *((__u8
*) skb
->data
);
354 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
356 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_CLASS_OF_DEV
);
363 memcpy(hdev
->dev_class
, sent
, 3);
365 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
366 mgmt_set_class_of_dev_complete(hdev
, sent
, status
);
368 hci_dev_unlock(hdev
);
371 static void hci_cc_read_voice_setting(struct hci_dev
*hdev
, struct sk_buff
*skb
)
373 struct hci_rp_read_voice_setting
*rp
= (void *) skb
->data
;
376 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
381 setting
= __le16_to_cpu(rp
->voice_setting
);
383 if (hdev
->voice_setting
== setting
)
386 hdev
->voice_setting
= setting
;
388 BT_DBG("%s voice setting 0x%4.4x", hdev
->name
, setting
);
391 hdev
->notify(hdev
, HCI_NOTIFY_VOICE_SETTING
);
394 static void hci_cc_write_voice_setting(struct hci_dev
*hdev
,
397 __u8 status
= *((__u8
*) skb
->data
);
401 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
406 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_VOICE_SETTING
);
410 setting
= get_unaligned_le16(sent
);
412 if (hdev
->voice_setting
== setting
)
415 hdev
->voice_setting
= setting
;
417 BT_DBG("%s voice setting 0x%4.4x", hdev
->name
, setting
);
420 hdev
->notify(hdev
, HCI_NOTIFY_VOICE_SETTING
);
423 static void hci_cc_write_ssp_mode(struct hci_dev
*hdev
, struct sk_buff
*skb
)
425 __u8 status
= *((__u8
*) skb
->data
);
426 struct hci_cp_write_ssp_mode
*sent
;
428 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
430 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_SSP_MODE
);
436 hdev
->features
[1][0] |= LMP_HOST_SSP
;
438 hdev
->features
[1][0] &= ~LMP_HOST_SSP
;
441 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
442 mgmt_ssp_enable_complete(hdev
, sent
->mode
, status
);
445 set_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
);
447 clear_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
);
451 static void hci_cc_read_local_version(struct hci_dev
*hdev
, struct sk_buff
*skb
)
453 struct hci_rp_read_local_version
*rp
= (void *) skb
->data
;
455 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
460 hdev
->hci_ver
= rp
->hci_ver
;
461 hdev
->hci_rev
= __le16_to_cpu(rp
->hci_rev
);
462 hdev
->lmp_ver
= rp
->lmp_ver
;
463 hdev
->manufacturer
= __le16_to_cpu(rp
->manufacturer
);
464 hdev
->lmp_subver
= __le16_to_cpu(rp
->lmp_subver
);
466 BT_DBG("%s manufacturer 0x%4.4x hci ver %d:%d", hdev
->name
,
467 hdev
->manufacturer
, hdev
->hci_ver
, hdev
->hci_rev
);
470 static void hci_cc_read_local_commands(struct hci_dev
*hdev
,
473 struct hci_rp_read_local_commands
*rp
= (void *) skb
->data
;
475 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
478 memcpy(hdev
->commands
, rp
->commands
, sizeof(hdev
->commands
));
481 static void hci_cc_read_local_features(struct hci_dev
*hdev
,
484 struct hci_rp_read_local_features
*rp
= (void *) skb
->data
;
486 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
491 memcpy(hdev
->features
, rp
->features
, 8);
493 /* Adjust default settings according to features
494 * supported by device. */
496 if (hdev
->features
[0][0] & LMP_3SLOT
)
497 hdev
->pkt_type
|= (HCI_DM3
| HCI_DH3
);
499 if (hdev
->features
[0][0] & LMP_5SLOT
)
500 hdev
->pkt_type
|= (HCI_DM5
| HCI_DH5
);
502 if (hdev
->features
[0][1] & LMP_HV2
) {
503 hdev
->pkt_type
|= (HCI_HV2
);
504 hdev
->esco_type
|= (ESCO_HV2
);
507 if (hdev
->features
[0][1] & LMP_HV3
) {
508 hdev
->pkt_type
|= (HCI_HV3
);
509 hdev
->esco_type
|= (ESCO_HV3
);
512 if (lmp_esco_capable(hdev
))
513 hdev
->esco_type
|= (ESCO_EV3
);
515 if (hdev
->features
[0][4] & LMP_EV4
)
516 hdev
->esco_type
|= (ESCO_EV4
);
518 if (hdev
->features
[0][4] & LMP_EV5
)
519 hdev
->esco_type
|= (ESCO_EV5
);
521 if (hdev
->features
[0][5] & LMP_EDR_ESCO_2M
)
522 hdev
->esco_type
|= (ESCO_2EV3
);
524 if (hdev
->features
[0][5] & LMP_EDR_ESCO_3M
)
525 hdev
->esco_type
|= (ESCO_3EV3
);
527 if (hdev
->features
[0][5] & LMP_EDR_3S_ESCO
)
528 hdev
->esco_type
|= (ESCO_2EV5
| ESCO_3EV5
);
530 BT_DBG("%s features 0x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x", hdev
->name
,
531 hdev
->features
[0][0], hdev
->features
[0][1],
532 hdev
->features
[0][2], hdev
->features
[0][3],
533 hdev
->features
[0][4], hdev
->features
[0][5],
534 hdev
->features
[0][6], hdev
->features
[0][7]);
537 static void hci_cc_read_local_ext_features(struct hci_dev
*hdev
,
540 struct hci_rp_read_local_ext_features
*rp
= (void *) skb
->data
;
542 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
547 if (rp
->page
< HCI_MAX_PAGES
)
548 memcpy(hdev
->features
[rp
->page
], rp
->features
, 8);
551 static void hci_cc_read_flow_control_mode(struct hci_dev
*hdev
,
554 struct hci_rp_read_flow_control_mode
*rp
= (void *) skb
->data
;
556 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
559 hdev
->flow_ctl_mode
= rp
->mode
;
562 static void hci_cc_read_buffer_size(struct hci_dev
*hdev
, struct sk_buff
*skb
)
564 struct hci_rp_read_buffer_size
*rp
= (void *) skb
->data
;
566 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
571 hdev
->acl_mtu
= __le16_to_cpu(rp
->acl_mtu
);
572 hdev
->sco_mtu
= rp
->sco_mtu
;
573 hdev
->acl_pkts
= __le16_to_cpu(rp
->acl_max_pkt
);
574 hdev
->sco_pkts
= __le16_to_cpu(rp
->sco_max_pkt
);
576 if (test_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE
, &hdev
->quirks
)) {
581 hdev
->acl_cnt
= hdev
->acl_pkts
;
582 hdev
->sco_cnt
= hdev
->sco_pkts
;
584 BT_DBG("%s acl mtu %d:%d sco mtu %d:%d", hdev
->name
, hdev
->acl_mtu
,
585 hdev
->acl_pkts
, hdev
->sco_mtu
, hdev
->sco_pkts
);
588 static void hci_cc_read_bd_addr(struct hci_dev
*hdev
, struct sk_buff
*skb
)
590 struct hci_rp_read_bd_addr
*rp
= (void *) skb
->data
;
592 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
595 bacpy(&hdev
->bdaddr
, &rp
->bdaddr
);
598 static void hci_cc_read_page_scan_activity(struct hci_dev
*hdev
,
601 struct hci_rp_read_page_scan_activity
*rp
= (void *) skb
->data
;
603 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
605 if (test_bit(HCI_INIT
, &hdev
->flags
) && !rp
->status
) {
606 hdev
->page_scan_interval
= __le16_to_cpu(rp
->interval
);
607 hdev
->page_scan_window
= __le16_to_cpu(rp
->window
);
611 static void hci_cc_write_page_scan_activity(struct hci_dev
*hdev
,
614 u8 status
= *((u8
*) skb
->data
);
615 struct hci_cp_write_page_scan_activity
*sent
;
617 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
622 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_PAGE_SCAN_ACTIVITY
);
626 hdev
->page_scan_interval
= __le16_to_cpu(sent
->interval
);
627 hdev
->page_scan_window
= __le16_to_cpu(sent
->window
);
630 static void hci_cc_read_page_scan_type(struct hci_dev
*hdev
,
633 struct hci_rp_read_page_scan_type
*rp
= (void *) skb
->data
;
635 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
637 if (test_bit(HCI_INIT
, &hdev
->flags
) && !rp
->status
)
638 hdev
->page_scan_type
= rp
->type
;
641 static void hci_cc_write_page_scan_type(struct hci_dev
*hdev
,
644 u8 status
= *((u8
*) skb
->data
);
647 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
652 type
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_PAGE_SCAN_TYPE
);
654 hdev
->page_scan_type
= *type
;
657 static void hci_cc_read_data_block_size(struct hci_dev
*hdev
,
660 struct hci_rp_read_data_block_size
*rp
= (void *) skb
->data
;
662 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
667 hdev
->block_mtu
= __le16_to_cpu(rp
->max_acl_len
);
668 hdev
->block_len
= __le16_to_cpu(rp
->block_len
);
669 hdev
->num_blocks
= __le16_to_cpu(rp
->num_blocks
);
671 hdev
->block_cnt
= hdev
->num_blocks
;
673 BT_DBG("%s blk mtu %d cnt %d len %d", hdev
->name
, hdev
->block_mtu
,
674 hdev
->block_cnt
, hdev
->block_len
);
677 static void hci_cc_read_local_amp_info(struct hci_dev
*hdev
,
680 struct hci_rp_read_local_amp_info
*rp
= (void *) skb
->data
;
682 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
687 hdev
->amp_status
= rp
->amp_status
;
688 hdev
->amp_total_bw
= __le32_to_cpu(rp
->total_bw
);
689 hdev
->amp_max_bw
= __le32_to_cpu(rp
->max_bw
);
690 hdev
->amp_min_latency
= __le32_to_cpu(rp
->min_latency
);
691 hdev
->amp_max_pdu
= __le32_to_cpu(rp
->max_pdu
);
692 hdev
->amp_type
= rp
->amp_type
;
693 hdev
->amp_pal_cap
= __le16_to_cpu(rp
->pal_cap
);
694 hdev
->amp_assoc_size
= __le16_to_cpu(rp
->max_assoc_size
);
695 hdev
->amp_be_flush_to
= __le32_to_cpu(rp
->be_flush_to
);
696 hdev
->amp_max_flush_to
= __le32_to_cpu(rp
->max_flush_to
);
699 a2mp_send_getinfo_rsp(hdev
);
702 static void hci_cc_read_local_amp_assoc(struct hci_dev
*hdev
,
705 struct hci_rp_read_local_amp_assoc
*rp
= (void *) skb
->data
;
706 struct amp_assoc
*assoc
= &hdev
->loc_assoc
;
707 size_t rem_len
, frag_len
;
709 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
714 frag_len
= skb
->len
- sizeof(*rp
);
715 rem_len
= __le16_to_cpu(rp
->rem_len
);
717 if (rem_len
> frag_len
) {
718 BT_DBG("frag_len %zu rem_len %zu", frag_len
, rem_len
);
720 memcpy(assoc
->data
+ assoc
->offset
, rp
->frag
, frag_len
);
721 assoc
->offset
+= frag_len
;
723 /* Read other fragments */
724 amp_read_loc_assoc_frag(hdev
, rp
->phy_handle
);
729 memcpy(assoc
->data
+ assoc
->offset
, rp
->frag
, rem_len
);
730 assoc
->len
= assoc
->offset
+ rem_len
;
734 /* Send A2MP Rsp when all fragments are received */
735 a2mp_send_getampassoc_rsp(hdev
, rp
->status
);
736 a2mp_send_create_phy_link_req(hdev
, rp
->status
);
739 static void hci_cc_read_inq_rsp_tx_power(struct hci_dev
*hdev
,
742 struct hci_rp_read_inq_rsp_tx_power
*rp
= (void *) skb
->data
;
744 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
747 hdev
->inq_tx_power
= rp
->tx_power
;
750 static void hci_cc_pin_code_reply(struct hci_dev
*hdev
, struct sk_buff
*skb
)
752 struct hci_rp_pin_code_reply
*rp
= (void *) skb
->data
;
753 struct hci_cp_pin_code_reply
*cp
;
754 struct hci_conn
*conn
;
756 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
760 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
761 mgmt_pin_code_reply_complete(hdev
, &rp
->bdaddr
, rp
->status
);
766 cp
= hci_sent_cmd_data(hdev
, HCI_OP_PIN_CODE_REPLY
);
770 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &cp
->bdaddr
);
772 conn
->pin_length
= cp
->pin_len
;
775 hci_dev_unlock(hdev
);
778 static void hci_cc_pin_code_neg_reply(struct hci_dev
*hdev
, struct sk_buff
*skb
)
780 struct hci_rp_pin_code_neg_reply
*rp
= (void *) skb
->data
;
782 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
786 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
787 mgmt_pin_code_neg_reply_complete(hdev
, &rp
->bdaddr
,
790 hci_dev_unlock(hdev
);
793 static void hci_cc_le_read_buffer_size(struct hci_dev
*hdev
,
796 struct hci_rp_le_read_buffer_size
*rp
= (void *) skb
->data
;
798 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
803 hdev
->le_mtu
= __le16_to_cpu(rp
->le_mtu
);
804 hdev
->le_pkts
= rp
->le_max_pkt
;
806 hdev
->le_cnt
= hdev
->le_pkts
;
808 BT_DBG("%s le mtu %d:%d", hdev
->name
, hdev
->le_mtu
, hdev
->le_pkts
);
811 static void hci_cc_le_read_local_features(struct hci_dev
*hdev
,
814 struct hci_rp_le_read_local_features
*rp
= (void *) skb
->data
;
816 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
819 memcpy(hdev
->le_features
, rp
->features
, 8);
822 static void hci_cc_le_read_adv_tx_power(struct hci_dev
*hdev
,
825 struct hci_rp_le_read_adv_tx_power
*rp
= (void *) skb
->data
;
827 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
830 hdev
->adv_tx_power
= rp
->tx_power
;
833 static void hci_cc_user_confirm_reply(struct hci_dev
*hdev
, struct sk_buff
*skb
)
835 struct hci_rp_user_confirm_reply
*rp
= (void *) skb
->data
;
837 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
841 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
842 mgmt_user_confirm_reply_complete(hdev
, &rp
->bdaddr
, ACL_LINK
, 0,
845 hci_dev_unlock(hdev
);
848 static void hci_cc_user_confirm_neg_reply(struct hci_dev
*hdev
,
851 struct hci_rp_user_confirm_reply
*rp
= (void *) skb
->data
;
853 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
857 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
858 mgmt_user_confirm_neg_reply_complete(hdev
, &rp
->bdaddr
,
859 ACL_LINK
, 0, rp
->status
);
861 hci_dev_unlock(hdev
);
864 static void hci_cc_user_passkey_reply(struct hci_dev
*hdev
, struct sk_buff
*skb
)
866 struct hci_rp_user_confirm_reply
*rp
= (void *) skb
->data
;
868 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
872 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
873 mgmt_user_passkey_reply_complete(hdev
, &rp
->bdaddr
, ACL_LINK
,
876 hci_dev_unlock(hdev
);
879 static void hci_cc_user_passkey_neg_reply(struct hci_dev
*hdev
,
882 struct hci_rp_user_confirm_reply
*rp
= (void *) skb
->data
;
884 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
888 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
889 mgmt_user_passkey_neg_reply_complete(hdev
, &rp
->bdaddr
,
890 ACL_LINK
, 0, rp
->status
);
892 hci_dev_unlock(hdev
);
895 static void hci_cc_read_local_oob_data_reply(struct hci_dev
*hdev
,
898 struct hci_rp_read_local_oob_data
*rp
= (void *) skb
->data
;
900 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
903 mgmt_read_local_oob_data_reply_complete(hdev
, rp
->hash
,
904 rp
->randomizer
, rp
->status
);
905 hci_dev_unlock(hdev
);
908 static void hci_cc_le_set_adv_enable(struct hci_dev
*hdev
, struct sk_buff
*skb
)
910 __u8
*sent
, status
= *((__u8
*) skb
->data
);
912 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
914 sent
= hci_sent_cmd_data(hdev
, HCI_OP_LE_SET_ADV_ENABLE
);
922 set_bit(HCI_LE_PERIPHERAL
, &hdev
->dev_flags
);
924 clear_bit(HCI_LE_PERIPHERAL
, &hdev
->dev_flags
);
927 if (!test_bit(HCI_INIT
, &hdev
->flags
)) {
928 struct hci_request req
;
930 hci_req_init(&req
, hdev
);
932 hci_req_run(&req
, NULL
);
935 hci_dev_unlock(hdev
);
938 static void hci_cc_le_set_scan_param(struct hci_dev
*hdev
, struct sk_buff
*skb
)
940 __u8 status
= *((__u8
*) skb
->data
);
942 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
946 mgmt_start_discovery_failed(hdev
, status
);
947 hci_dev_unlock(hdev
);
952 static void hci_cc_le_set_scan_enable(struct hci_dev
*hdev
,
955 struct hci_cp_le_set_scan_enable
*cp
;
956 __u8 status
= *((__u8
*) skb
->data
);
958 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
960 cp
= hci_sent_cmd_data(hdev
, HCI_OP_LE_SET_SCAN_ENABLE
);
964 switch (cp
->enable
) {
965 case LE_SCANNING_ENABLED
:
968 mgmt_start_discovery_failed(hdev
, status
);
969 hci_dev_unlock(hdev
);
973 set_bit(HCI_LE_SCAN
, &hdev
->dev_flags
);
976 hci_discovery_set_state(hdev
, DISCOVERY_FINDING
);
977 hci_dev_unlock(hdev
);
980 case LE_SCANNING_DISABLED
:
983 mgmt_stop_discovery_failed(hdev
, status
);
984 hci_dev_unlock(hdev
);
988 clear_bit(HCI_LE_SCAN
, &hdev
->dev_flags
);
990 if (hdev
->discovery
.type
== DISCOV_TYPE_INTERLEAVED
&&
991 hdev
->discovery
.state
== DISCOVERY_FINDING
) {
992 mgmt_interleaved_discovery(hdev
);
995 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
996 hci_dev_unlock(hdev
);
1002 BT_ERR("Used reserved LE_Scan_Enable param %d", cp
->enable
);
1007 static void hci_cc_le_read_white_list_size(struct hci_dev
*hdev
,
1008 struct sk_buff
*skb
)
1010 struct hci_rp_le_read_white_list_size
*rp
= (void *) skb
->data
;
1012 BT_DBG("%s status 0x%2.2x size %u", hdev
->name
, rp
->status
, rp
->size
);
1015 hdev
->le_white_list_size
= rp
->size
;
1018 static void hci_cc_le_read_supported_states(struct hci_dev
*hdev
,
1019 struct sk_buff
*skb
)
1021 struct hci_rp_le_read_supported_states
*rp
= (void *) skb
->data
;
1023 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
1026 memcpy(hdev
->le_states
, rp
->le_states
, 8);
1029 static void hci_cc_write_le_host_supported(struct hci_dev
*hdev
,
1030 struct sk_buff
*skb
)
1032 struct hci_cp_write_le_host_supported
*sent
;
1033 __u8 status
= *((__u8
*) skb
->data
);
1035 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1037 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_LE_HOST_SUPPORTED
);
1043 hdev
->features
[1][0] |= LMP_HOST_LE
;
1045 hdev
->features
[1][0] &= ~LMP_HOST_LE
;
1048 hdev
->features
[1][0] |= LMP_HOST_LE_BREDR
;
1050 hdev
->features
[1][0] &= ~LMP_HOST_LE_BREDR
;
1053 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
) &&
1054 !test_bit(HCI_INIT
, &hdev
->flags
))
1055 mgmt_le_enable_complete(hdev
, sent
->le
, status
);
1058 static void hci_cc_write_remote_amp_assoc(struct hci_dev
*hdev
,
1059 struct sk_buff
*skb
)
1061 struct hci_rp_write_remote_amp_assoc
*rp
= (void *) skb
->data
;
1063 BT_DBG("%s status 0x%2.2x phy_handle 0x%2.2x",
1064 hdev
->name
, rp
->status
, rp
->phy_handle
);
1069 amp_write_rem_assoc_continue(hdev
, rp
->phy_handle
);
1072 static void hci_cs_inquiry(struct hci_dev
*hdev
, __u8 status
)
1074 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1077 hci_conn_check_pending(hdev
);
1079 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
1080 mgmt_start_discovery_failed(hdev
, status
);
1081 hci_dev_unlock(hdev
);
1085 set_bit(HCI_INQUIRY
, &hdev
->flags
);
1088 hci_discovery_set_state(hdev
, DISCOVERY_FINDING
);
1089 hci_dev_unlock(hdev
);
1092 static void hci_cs_create_conn(struct hci_dev
*hdev
, __u8 status
)
1094 struct hci_cp_create_conn
*cp
;
1095 struct hci_conn
*conn
;
1097 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1099 cp
= hci_sent_cmd_data(hdev
, HCI_OP_CREATE_CONN
);
1105 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &cp
->bdaddr
);
1107 BT_DBG("%s bdaddr %pMR hcon %p", hdev
->name
, &cp
->bdaddr
, conn
);
1110 if (conn
&& conn
->state
== BT_CONNECT
) {
1111 if (status
!= 0x0c || conn
->attempt
> 2) {
1112 conn
->state
= BT_CLOSED
;
1113 hci_proto_connect_cfm(conn
, status
);
1116 conn
->state
= BT_CONNECT2
;
1120 conn
= hci_conn_add(hdev
, ACL_LINK
, &cp
->bdaddr
);
1123 conn
->link_mode
|= HCI_LM_MASTER
;
1125 BT_ERR("No memory for new connection");
1129 hci_dev_unlock(hdev
);
1132 static void hci_cs_add_sco(struct hci_dev
*hdev
, __u8 status
)
1134 struct hci_cp_add_sco
*cp
;
1135 struct hci_conn
*acl
, *sco
;
1138 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1143 cp
= hci_sent_cmd_data(hdev
, HCI_OP_ADD_SCO
);
1147 handle
= __le16_to_cpu(cp
->handle
);
1149 BT_DBG("%s handle 0x%4.4x", hdev
->name
, handle
);
1153 acl
= hci_conn_hash_lookup_handle(hdev
, handle
);
1157 sco
->state
= BT_CLOSED
;
1159 hci_proto_connect_cfm(sco
, status
);
1164 hci_dev_unlock(hdev
);
1167 static void hci_cs_auth_requested(struct hci_dev
*hdev
, __u8 status
)
1169 struct hci_cp_auth_requested
*cp
;
1170 struct hci_conn
*conn
;
1172 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1177 cp
= hci_sent_cmd_data(hdev
, HCI_OP_AUTH_REQUESTED
);
1183 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1185 if (conn
->state
== BT_CONFIG
) {
1186 hci_proto_connect_cfm(conn
, status
);
1187 hci_conn_drop(conn
);
1191 hci_dev_unlock(hdev
);
1194 static void hci_cs_set_conn_encrypt(struct hci_dev
*hdev
, __u8 status
)
1196 struct hci_cp_set_conn_encrypt
*cp
;
1197 struct hci_conn
*conn
;
1199 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1204 cp
= hci_sent_cmd_data(hdev
, HCI_OP_SET_CONN_ENCRYPT
);
1210 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1212 if (conn
->state
== BT_CONFIG
) {
1213 hci_proto_connect_cfm(conn
, status
);
1214 hci_conn_drop(conn
);
1218 hci_dev_unlock(hdev
);
1221 static int hci_outgoing_auth_needed(struct hci_dev
*hdev
,
1222 struct hci_conn
*conn
)
1224 if (conn
->state
!= BT_CONFIG
|| !conn
->out
)
1227 if (conn
->pending_sec_level
== BT_SECURITY_SDP
)
1230 /* Only request authentication for SSP connections or non-SSP
1231 * devices with sec_level HIGH or if MITM protection is requested */
1232 if (!hci_conn_ssp_enabled(conn
) && !(conn
->auth_type
& 0x01) &&
1233 conn
->pending_sec_level
!= BT_SECURITY_HIGH
)
1239 static int hci_resolve_name(struct hci_dev
*hdev
,
1240 struct inquiry_entry
*e
)
1242 struct hci_cp_remote_name_req cp
;
1244 memset(&cp
, 0, sizeof(cp
));
1246 bacpy(&cp
.bdaddr
, &e
->data
.bdaddr
);
1247 cp
.pscan_rep_mode
= e
->data
.pscan_rep_mode
;
1248 cp
.pscan_mode
= e
->data
.pscan_mode
;
1249 cp
.clock_offset
= e
->data
.clock_offset
;
1251 return hci_send_cmd(hdev
, HCI_OP_REMOTE_NAME_REQ
, sizeof(cp
), &cp
);
1254 static bool hci_resolve_next_name(struct hci_dev
*hdev
)
1256 struct discovery_state
*discov
= &hdev
->discovery
;
1257 struct inquiry_entry
*e
;
1259 if (list_empty(&discov
->resolve
))
1262 e
= hci_inquiry_cache_lookup_resolve(hdev
, BDADDR_ANY
, NAME_NEEDED
);
1266 if (hci_resolve_name(hdev
, e
) == 0) {
1267 e
->name_state
= NAME_PENDING
;
1274 static void hci_check_pending_name(struct hci_dev
*hdev
, struct hci_conn
*conn
,
1275 bdaddr_t
*bdaddr
, u8
*name
, u8 name_len
)
1277 struct discovery_state
*discov
= &hdev
->discovery
;
1278 struct inquiry_entry
*e
;
1280 if (conn
&& !test_and_set_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
))
1281 mgmt_device_connected(hdev
, bdaddr
, ACL_LINK
, 0x00, 0, name
,
1282 name_len
, conn
->dev_class
);
1284 if (discov
->state
== DISCOVERY_STOPPED
)
1287 if (discov
->state
== DISCOVERY_STOPPING
)
1288 goto discov_complete
;
1290 if (discov
->state
!= DISCOVERY_RESOLVING
)
1293 e
= hci_inquiry_cache_lookup_resolve(hdev
, bdaddr
, NAME_PENDING
);
1294 /* If the device was not found in a list of found devices names of which
1295 * are pending. there is no need to continue resolving a next name as it
1296 * will be done upon receiving another Remote Name Request Complete
1303 e
->name_state
= NAME_KNOWN
;
1304 mgmt_remote_name(hdev
, bdaddr
, ACL_LINK
, 0x00,
1305 e
->data
.rssi
, name
, name_len
);
1307 e
->name_state
= NAME_NOT_KNOWN
;
1310 if (hci_resolve_next_name(hdev
))
1314 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
1317 static void hci_cs_remote_name_req(struct hci_dev
*hdev
, __u8 status
)
1319 struct hci_cp_remote_name_req
*cp
;
1320 struct hci_conn
*conn
;
1322 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1324 /* If successful wait for the name req complete event before
1325 * checking for the need to do authentication */
1329 cp
= hci_sent_cmd_data(hdev
, HCI_OP_REMOTE_NAME_REQ
);
1335 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &cp
->bdaddr
);
1337 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
1338 hci_check_pending_name(hdev
, conn
, &cp
->bdaddr
, NULL
, 0);
1343 if (!hci_outgoing_auth_needed(hdev
, conn
))
1346 if (!test_and_set_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
)) {
1347 struct hci_cp_auth_requested cp
;
1348 cp
.handle
= __cpu_to_le16(conn
->handle
);
1349 hci_send_cmd(hdev
, HCI_OP_AUTH_REQUESTED
, sizeof(cp
), &cp
);
1353 hci_dev_unlock(hdev
);
1356 static void hci_cs_read_remote_features(struct hci_dev
*hdev
, __u8 status
)
1358 struct hci_cp_read_remote_features
*cp
;
1359 struct hci_conn
*conn
;
1361 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1366 cp
= hci_sent_cmd_data(hdev
, HCI_OP_READ_REMOTE_FEATURES
);
1372 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1374 if (conn
->state
== BT_CONFIG
) {
1375 hci_proto_connect_cfm(conn
, status
);
1376 hci_conn_drop(conn
);
1380 hci_dev_unlock(hdev
);
1383 static void hci_cs_read_remote_ext_features(struct hci_dev
*hdev
, __u8 status
)
1385 struct hci_cp_read_remote_ext_features
*cp
;
1386 struct hci_conn
*conn
;
1388 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1393 cp
= hci_sent_cmd_data(hdev
, HCI_OP_READ_REMOTE_EXT_FEATURES
);
1399 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1401 if (conn
->state
== BT_CONFIG
) {
1402 hci_proto_connect_cfm(conn
, status
);
1403 hci_conn_drop(conn
);
1407 hci_dev_unlock(hdev
);
1410 static void hci_cs_setup_sync_conn(struct hci_dev
*hdev
, __u8 status
)
1412 struct hci_cp_setup_sync_conn
*cp
;
1413 struct hci_conn
*acl
, *sco
;
1416 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1421 cp
= hci_sent_cmd_data(hdev
, HCI_OP_SETUP_SYNC_CONN
);
1425 handle
= __le16_to_cpu(cp
->handle
);
1427 BT_DBG("%s handle 0x%4.4x", hdev
->name
, handle
);
1431 acl
= hci_conn_hash_lookup_handle(hdev
, handle
);
1435 sco
->state
= BT_CLOSED
;
1437 hci_proto_connect_cfm(sco
, status
);
1442 hci_dev_unlock(hdev
);
1445 static void hci_cs_sniff_mode(struct hci_dev
*hdev
, __u8 status
)
1447 struct hci_cp_sniff_mode
*cp
;
1448 struct hci_conn
*conn
;
1450 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1455 cp
= hci_sent_cmd_data(hdev
, HCI_OP_SNIFF_MODE
);
1461 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1463 clear_bit(HCI_CONN_MODE_CHANGE_PEND
, &conn
->flags
);
1465 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND
, &conn
->flags
))
1466 hci_sco_setup(conn
, status
);
1469 hci_dev_unlock(hdev
);
1472 static void hci_cs_exit_sniff_mode(struct hci_dev
*hdev
, __u8 status
)
1474 struct hci_cp_exit_sniff_mode
*cp
;
1475 struct hci_conn
*conn
;
1477 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1482 cp
= hci_sent_cmd_data(hdev
, HCI_OP_EXIT_SNIFF_MODE
);
1488 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1490 clear_bit(HCI_CONN_MODE_CHANGE_PEND
, &conn
->flags
);
1492 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND
, &conn
->flags
))
1493 hci_sco_setup(conn
, status
);
1496 hci_dev_unlock(hdev
);
1499 static void hci_cs_disconnect(struct hci_dev
*hdev
, u8 status
)
1501 struct hci_cp_disconnect
*cp
;
1502 struct hci_conn
*conn
;
1507 cp
= hci_sent_cmd_data(hdev
, HCI_OP_DISCONNECT
);
1513 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1515 mgmt_disconnect_failed(hdev
, &conn
->dst
, conn
->type
,
1516 conn
->dst_type
, status
);
1518 hci_dev_unlock(hdev
);
1521 static void hci_cs_le_create_conn(struct hci_dev
*hdev
, __u8 status
)
1523 struct hci_conn
*conn
;
1525 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1530 conn
= hci_conn_hash_lookup_state(hdev
, LE_LINK
, BT_CONNECT
);
1532 hci_dev_unlock(hdev
);
1536 BT_DBG("%s bdaddr %pMR conn %p", hdev
->name
, &conn
->dst
, conn
);
1538 conn
->state
= BT_CLOSED
;
1539 mgmt_connect_failed(hdev
, &conn
->dst
, conn
->type
,
1540 conn
->dst_type
, status
);
1541 hci_proto_connect_cfm(conn
, status
);
1544 hci_dev_unlock(hdev
);
1548 static void hci_cs_create_phylink(struct hci_dev
*hdev
, u8 status
)
1550 struct hci_cp_create_phy_link
*cp
;
1552 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1554 cp
= hci_sent_cmd_data(hdev
, HCI_OP_CREATE_PHY_LINK
);
1561 struct hci_conn
*hcon
;
1563 hcon
= hci_conn_hash_lookup_handle(hdev
, cp
->phy_handle
);
1567 amp_write_remote_assoc(hdev
, cp
->phy_handle
);
1570 hci_dev_unlock(hdev
);
1573 static void hci_cs_accept_phylink(struct hci_dev
*hdev
, u8 status
)
1575 struct hci_cp_accept_phy_link
*cp
;
1577 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1582 cp
= hci_sent_cmd_data(hdev
, HCI_OP_ACCEPT_PHY_LINK
);
1586 amp_write_remote_assoc(hdev
, cp
->phy_handle
);
1589 static void hci_inquiry_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1591 __u8 status
= *((__u8
*) skb
->data
);
1592 struct discovery_state
*discov
= &hdev
->discovery
;
1593 struct inquiry_entry
*e
;
1595 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1597 hci_conn_check_pending(hdev
);
1599 if (!test_and_clear_bit(HCI_INQUIRY
, &hdev
->flags
))
1602 smp_mb__after_clear_bit(); /* wake_up_bit advises about this barrier */
1603 wake_up_bit(&hdev
->flags
, HCI_INQUIRY
);
1605 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
1610 if (discov
->state
!= DISCOVERY_FINDING
)
1613 if (list_empty(&discov
->resolve
)) {
1614 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
1618 e
= hci_inquiry_cache_lookup_resolve(hdev
, BDADDR_ANY
, NAME_NEEDED
);
1619 if (e
&& hci_resolve_name(hdev
, e
) == 0) {
1620 e
->name_state
= NAME_PENDING
;
1621 hci_discovery_set_state(hdev
, DISCOVERY_RESOLVING
);
1623 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
1627 hci_dev_unlock(hdev
);
1630 static void hci_inquiry_result_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1632 struct inquiry_data data
;
1633 struct inquiry_info
*info
= (void *) (skb
->data
+ 1);
1634 int num_rsp
= *((__u8
*) skb
->data
);
1636 BT_DBG("%s num_rsp %d", hdev
->name
, num_rsp
);
1641 if (test_bit(HCI_PERIODIC_INQ
, &hdev
->dev_flags
))
1646 for (; num_rsp
; num_rsp
--, info
++) {
1647 bool name_known
, ssp
;
1649 bacpy(&data
.bdaddr
, &info
->bdaddr
);
1650 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
1651 data
.pscan_period_mode
= info
->pscan_period_mode
;
1652 data
.pscan_mode
= info
->pscan_mode
;
1653 memcpy(data
.dev_class
, info
->dev_class
, 3);
1654 data
.clock_offset
= info
->clock_offset
;
1656 data
.ssp_mode
= 0x00;
1658 name_known
= hci_inquiry_cache_update(hdev
, &data
, false, &ssp
);
1659 mgmt_device_found(hdev
, &info
->bdaddr
, ACL_LINK
, 0x00,
1660 info
->dev_class
, 0, !name_known
, ssp
, NULL
,
1664 hci_dev_unlock(hdev
);
1667 static void hci_conn_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1669 struct hci_ev_conn_complete
*ev
= (void *) skb
->data
;
1670 struct hci_conn
*conn
;
1672 BT_DBG("%s", hdev
->name
);
1676 conn
= hci_conn_hash_lookup_ba(hdev
, ev
->link_type
, &ev
->bdaddr
);
1678 if (ev
->link_type
!= SCO_LINK
)
1681 conn
= hci_conn_hash_lookup_ba(hdev
, ESCO_LINK
, &ev
->bdaddr
);
1685 conn
->type
= SCO_LINK
;
1689 conn
->handle
= __le16_to_cpu(ev
->handle
);
1691 if (conn
->type
== ACL_LINK
) {
1692 conn
->state
= BT_CONFIG
;
1693 hci_conn_hold(conn
);
1695 if (!conn
->out
&& !hci_conn_ssp_enabled(conn
) &&
1696 !hci_find_link_key(hdev
, &ev
->bdaddr
))
1697 conn
->disc_timeout
= HCI_PAIRING_TIMEOUT
;
1699 conn
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
1701 conn
->state
= BT_CONNECTED
;
1703 hci_conn_add_sysfs(conn
);
1705 if (test_bit(HCI_AUTH
, &hdev
->flags
))
1706 conn
->link_mode
|= HCI_LM_AUTH
;
1708 if (test_bit(HCI_ENCRYPT
, &hdev
->flags
))
1709 conn
->link_mode
|= HCI_LM_ENCRYPT
;
1711 /* Get remote features */
1712 if (conn
->type
== ACL_LINK
) {
1713 struct hci_cp_read_remote_features cp
;
1714 cp
.handle
= ev
->handle
;
1715 hci_send_cmd(hdev
, HCI_OP_READ_REMOTE_FEATURES
,
1719 /* Set packet type for incoming connection */
1720 if (!conn
->out
&& hdev
->hci_ver
< BLUETOOTH_VER_2_0
) {
1721 struct hci_cp_change_conn_ptype cp
;
1722 cp
.handle
= ev
->handle
;
1723 cp
.pkt_type
= cpu_to_le16(conn
->pkt_type
);
1724 hci_send_cmd(hdev
, HCI_OP_CHANGE_CONN_PTYPE
, sizeof(cp
),
1728 conn
->state
= BT_CLOSED
;
1729 if (conn
->type
== ACL_LINK
)
1730 mgmt_connect_failed(hdev
, &ev
->bdaddr
, conn
->type
,
1731 conn
->dst_type
, ev
->status
);
1734 if (conn
->type
== ACL_LINK
)
1735 hci_sco_setup(conn
, ev
->status
);
1738 hci_proto_connect_cfm(conn
, ev
->status
);
1740 } else if (ev
->link_type
!= ACL_LINK
)
1741 hci_proto_connect_cfm(conn
, ev
->status
);
1744 hci_dev_unlock(hdev
);
1746 hci_conn_check_pending(hdev
);
1749 static void hci_conn_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1751 struct hci_ev_conn_request
*ev
= (void *) skb
->data
;
1752 int mask
= hdev
->link_mode
;
1755 BT_DBG("%s bdaddr %pMR type 0x%x", hdev
->name
, &ev
->bdaddr
,
1758 mask
|= hci_proto_connect_ind(hdev
, &ev
->bdaddr
, ev
->link_type
,
1761 if ((mask
& HCI_LM_ACCEPT
) &&
1762 !hci_blacklist_lookup(hdev
, &ev
->bdaddr
)) {
1763 /* Connection accepted */
1764 struct inquiry_entry
*ie
;
1765 struct hci_conn
*conn
;
1769 ie
= hci_inquiry_cache_lookup(hdev
, &ev
->bdaddr
);
1771 memcpy(ie
->data
.dev_class
, ev
->dev_class
, 3);
1773 conn
= hci_conn_hash_lookup_ba(hdev
, ev
->link_type
,
1776 conn
= hci_conn_add(hdev
, ev
->link_type
, &ev
->bdaddr
);
1778 BT_ERR("No memory for new connection");
1779 hci_dev_unlock(hdev
);
1784 memcpy(conn
->dev_class
, ev
->dev_class
, 3);
1786 hci_dev_unlock(hdev
);
1788 if (ev
->link_type
== ACL_LINK
||
1789 (!(flags
& HCI_PROTO_DEFER
) && !lmp_esco_capable(hdev
))) {
1790 struct hci_cp_accept_conn_req cp
;
1791 conn
->state
= BT_CONNECT
;
1793 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
1795 if (lmp_rswitch_capable(hdev
) && (mask
& HCI_LM_MASTER
))
1796 cp
.role
= 0x00; /* Become master */
1798 cp
.role
= 0x01; /* Remain slave */
1800 hci_send_cmd(hdev
, HCI_OP_ACCEPT_CONN_REQ
, sizeof(cp
),
1802 } else if (!(flags
& HCI_PROTO_DEFER
)) {
1803 struct hci_cp_accept_sync_conn_req cp
;
1804 conn
->state
= BT_CONNECT
;
1806 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
1807 cp
.pkt_type
= cpu_to_le16(conn
->pkt_type
);
1809 cp
.tx_bandwidth
= __constant_cpu_to_le32(0x00001f40);
1810 cp
.rx_bandwidth
= __constant_cpu_to_le32(0x00001f40);
1811 cp
.max_latency
= __constant_cpu_to_le16(0xffff);
1812 cp
.content_format
= cpu_to_le16(hdev
->voice_setting
);
1813 cp
.retrans_effort
= 0xff;
1815 hci_send_cmd(hdev
, HCI_OP_ACCEPT_SYNC_CONN_REQ
,
1818 conn
->state
= BT_CONNECT2
;
1819 hci_proto_connect_cfm(conn
, 0);
1822 /* Connection rejected */
1823 struct hci_cp_reject_conn_req cp
;
1825 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
1826 cp
.reason
= HCI_ERROR_REJ_BAD_ADDR
;
1827 hci_send_cmd(hdev
, HCI_OP_REJECT_CONN_REQ
, sizeof(cp
), &cp
);
1831 static u8
hci_to_mgmt_reason(u8 err
)
1834 case HCI_ERROR_CONNECTION_TIMEOUT
:
1835 return MGMT_DEV_DISCONN_TIMEOUT
;
1836 case HCI_ERROR_REMOTE_USER_TERM
:
1837 case HCI_ERROR_REMOTE_LOW_RESOURCES
:
1838 case HCI_ERROR_REMOTE_POWER_OFF
:
1839 return MGMT_DEV_DISCONN_REMOTE
;
1840 case HCI_ERROR_LOCAL_HOST_TERM
:
1841 return MGMT_DEV_DISCONN_LOCAL_HOST
;
1843 return MGMT_DEV_DISCONN_UNKNOWN
;
1847 static void hci_disconn_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1849 struct hci_ev_disconn_complete
*ev
= (void *) skb
->data
;
1850 struct hci_conn
*conn
;
1852 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
1856 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1860 if (ev
->status
== 0)
1861 conn
->state
= BT_CLOSED
;
1863 if (test_and_clear_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
) &&
1864 (conn
->type
== ACL_LINK
|| conn
->type
== LE_LINK
)) {
1866 mgmt_disconnect_failed(hdev
, &conn
->dst
, conn
->type
,
1867 conn
->dst_type
, ev
->status
);
1869 u8 reason
= hci_to_mgmt_reason(ev
->reason
);
1871 mgmt_device_disconnected(hdev
, &conn
->dst
, conn
->type
,
1872 conn
->dst_type
, reason
);
1876 if (ev
->status
== 0) {
1877 if (conn
->type
== ACL_LINK
&& conn
->flush_key
)
1878 hci_remove_link_key(hdev
, &conn
->dst
);
1879 hci_proto_disconn_cfm(conn
, ev
->reason
);
1884 hci_dev_unlock(hdev
);
1887 static void hci_auth_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1889 struct hci_ev_auth_complete
*ev
= (void *) skb
->data
;
1890 struct hci_conn
*conn
;
1892 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
1896 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1901 if (!hci_conn_ssp_enabled(conn
) &&
1902 test_bit(HCI_CONN_REAUTH_PEND
, &conn
->flags
)) {
1903 BT_INFO("re-auth of legacy device is not possible.");
1905 conn
->link_mode
|= HCI_LM_AUTH
;
1906 conn
->sec_level
= conn
->pending_sec_level
;
1909 mgmt_auth_failed(hdev
, &conn
->dst
, conn
->type
, conn
->dst_type
,
1913 clear_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
);
1914 clear_bit(HCI_CONN_REAUTH_PEND
, &conn
->flags
);
1916 if (conn
->state
== BT_CONFIG
) {
1917 if (!ev
->status
&& hci_conn_ssp_enabled(conn
)) {
1918 struct hci_cp_set_conn_encrypt cp
;
1919 cp
.handle
= ev
->handle
;
1921 hci_send_cmd(hdev
, HCI_OP_SET_CONN_ENCRYPT
, sizeof(cp
),
1924 conn
->state
= BT_CONNECTED
;
1925 hci_proto_connect_cfm(conn
, ev
->status
);
1926 hci_conn_drop(conn
);
1929 hci_auth_cfm(conn
, ev
->status
);
1931 hci_conn_hold(conn
);
1932 conn
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
1933 hci_conn_drop(conn
);
1936 if (test_bit(HCI_CONN_ENCRYPT_PEND
, &conn
->flags
)) {
1938 struct hci_cp_set_conn_encrypt cp
;
1939 cp
.handle
= ev
->handle
;
1941 hci_send_cmd(hdev
, HCI_OP_SET_CONN_ENCRYPT
, sizeof(cp
),
1944 clear_bit(HCI_CONN_ENCRYPT_PEND
, &conn
->flags
);
1945 hci_encrypt_cfm(conn
, ev
->status
, 0x00);
1950 hci_dev_unlock(hdev
);
1953 static void hci_remote_name_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1955 struct hci_ev_remote_name
*ev
= (void *) skb
->data
;
1956 struct hci_conn
*conn
;
1958 BT_DBG("%s", hdev
->name
);
1960 hci_conn_check_pending(hdev
);
1964 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
1966 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
1969 if (ev
->status
== 0)
1970 hci_check_pending_name(hdev
, conn
, &ev
->bdaddr
, ev
->name
,
1971 strnlen(ev
->name
, HCI_MAX_NAME_LENGTH
));
1973 hci_check_pending_name(hdev
, conn
, &ev
->bdaddr
, NULL
, 0);
1979 if (!hci_outgoing_auth_needed(hdev
, conn
))
1982 if (!test_and_set_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
)) {
1983 struct hci_cp_auth_requested cp
;
1984 cp
.handle
= __cpu_to_le16(conn
->handle
);
1985 hci_send_cmd(hdev
, HCI_OP_AUTH_REQUESTED
, sizeof(cp
), &cp
);
1989 hci_dev_unlock(hdev
);
1992 static void hci_encrypt_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1994 struct hci_ev_encrypt_change
*ev
= (void *) skb
->data
;
1995 struct hci_conn
*conn
;
1997 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2001 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2005 /* Encryption implies authentication */
2006 conn
->link_mode
|= HCI_LM_AUTH
;
2007 conn
->link_mode
|= HCI_LM_ENCRYPT
;
2008 conn
->sec_level
= conn
->pending_sec_level
;
2010 conn
->link_mode
&= ~HCI_LM_ENCRYPT
;
2013 clear_bit(HCI_CONN_ENCRYPT_PEND
, &conn
->flags
);
2015 if (ev
->status
&& conn
->state
== BT_CONNECTED
) {
2016 hci_disconnect(conn
, HCI_ERROR_AUTH_FAILURE
);
2017 hci_conn_drop(conn
);
2021 if (conn
->state
== BT_CONFIG
) {
2023 conn
->state
= BT_CONNECTED
;
2025 hci_proto_connect_cfm(conn
, ev
->status
);
2026 hci_conn_drop(conn
);
2028 hci_encrypt_cfm(conn
, ev
->status
, ev
->encrypt
);
2032 hci_dev_unlock(hdev
);
2035 static void hci_change_link_key_complete_evt(struct hci_dev
*hdev
,
2036 struct sk_buff
*skb
)
2038 struct hci_ev_change_link_key_complete
*ev
= (void *) skb
->data
;
2039 struct hci_conn
*conn
;
2041 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2045 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2048 conn
->link_mode
|= HCI_LM_SECURE
;
2050 clear_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
);
2052 hci_key_change_cfm(conn
, ev
->status
);
2055 hci_dev_unlock(hdev
);
2058 static void hci_remote_features_evt(struct hci_dev
*hdev
,
2059 struct sk_buff
*skb
)
2061 struct hci_ev_remote_features
*ev
= (void *) skb
->data
;
2062 struct hci_conn
*conn
;
2064 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2068 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2073 memcpy(conn
->features
[0], ev
->features
, 8);
2075 if (conn
->state
!= BT_CONFIG
)
2078 if (!ev
->status
&& lmp_ssp_capable(hdev
) && lmp_ssp_capable(conn
)) {
2079 struct hci_cp_read_remote_ext_features cp
;
2080 cp
.handle
= ev
->handle
;
2082 hci_send_cmd(hdev
, HCI_OP_READ_REMOTE_EXT_FEATURES
,
2087 if (!ev
->status
&& !test_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
)) {
2088 struct hci_cp_remote_name_req cp
;
2089 memset(&cp
, 0, sizeof(cp
));
2090 bacpy(&cp
.bdaddr
, &conn
->dst
);
2091 cp
.pscan_rep_mode
= 0x02;
2092 hci_send_cmd(hdev
, HCI_OP_REMOTE_NAME_REQ
, sizeof(cp
), &cp
);
2093 } else if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
))
2094 mgmt_device_connected(hdev
, &conn
->dst
, conn
->type
,
2095 conn
->dst_type
, 0, NULL
, 0,
2098 if (!hci_outgoing_auth_needed(hdev
, conn
)) {
2099 conn
->state
= BT_CONNECTED
;
2100 hci_proto_connect_cfm(conn
, ev
->status
);
2101 hci_conn_drop(conn
);
2105 hci_dev_unlock(hdev
);
2108 static void hci_cmd_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2110 struct hci_ev_cmd_complete
*ev
= (void *) skb
->data
;
2111 u8 status
= skb
->data
[sizeof(*ev
)];
2114 skb_pull(skb
, sizeof(*ev
));
2116 opcode
= __le16_to_cpu(ev
->opcode
);
2119 case HCI_OP_INQUIRY_CANCEL
:
2120 hci_cc_inquiry_cancel(hdev
, skb
);
2123 case HCI_OP_PERIODIC_INQ
:
2124 hci_cc_periodic_inq(hdev
, skb
);
2127 case HCI_OP_EXIT_PERIODIC_INQ
:
2128 hci_cc_exit_periodic_inq(hdev
, skb
);
2131 case HCI_OP_REMOTE_NAME_REQ_CANCEL
:
2132 hci_cc_remote_name_req_cancel(hdev
, skb
);
2135 case HCI_OP_ROLE_DISCOVERY
:
2136 hci_cc_role_discovery(hdev
, skb
);
2139 case HCI_OP_READ_LINK_POLICY
:
2140 hci_cc_read_link_policy(hdev
, skb
);
2143 case HCI_OP_WRITE_LINK_POLICY
:
2144 hci_cc_write_link_policy(hdev
, skb
);
2147 case HCI_OP_READ_DEF_LINK_POLICY
:
2148 hci_cc_read_def_link_policy(hdev
, skb
);
2151 case HCI_OP_WRITE_DEF_LINK_POLICY
:
2152 hci_cc_write_def_link_policy(hdev
, skb
);
2156 hci_cc_reset(hdev
, skb
);
2159 case HCI_OP_WRITE_LOCAL_NAME
:
2160 hci_cc_write_local_name(hdev
, skb
);
2163 case HCI_OP_READ_LOCAL_NAME
:
2164 hci_cc_read_local_name(hdev
, skb
);
2167 case HCI_OP_WRITE_AUTH_ENABLE
:
2168 hci_cc_write_auth_enable(hdev
, skb
);
2171 case HCI_OP_WRITE_ENCRYPT_MODE
:
2172 hci_cc_write_encrypt_mode(hdev
, skb
);
2175 case HCI_OP_WRITE_SCAN_ENABLE
:
2176 hci_cc_write_scan_enable(hdev
, skb
);
2179 case HCI_OP_READ_CLASS_OF_DEV
:
2180 hci_cc_read_class_of_dev(hdev
, skb
);
2183 case HCI_OP_WRITE_CLASS_OF_DEV
:
2184 hci_cc_write_class_of_dev(hdev
, skb
);
2187 case HCI_OP_READ_VOICE_SETTING
:
2188 hci_cc_read_voice_setting(hdev
, skb
);
2191 case HCI_OP_WRITE_VOICE_SETTING
:
2192 hci_cc_write_voice_setting(hdev
, skb
);
2195 case HCI_OP_WRITE_SSP_MODE
:
2196 hci_cc_write_ssp_mode(hdev
, skb
);
2199 case HCI_OP_READ_LOCAL_VERSION
:
2200 hci_cc_read_local_version(hdev
, skb
);
2203 case HCI_OP_READ_LOCAL_COMMANDS
:
2204 hci_cc_read_local_commands(hdev
, skb
);
2207 case HCI_OP_READ_LOCAL_FEATURES
:
2208 hci_cc_read_local_features(hdev
, skb
);
2211 case HCI_OP_READ_LOCAL_EXT_FEATURES
:
2212 hci_cc_read_local_ext_features(hdev
, skb
);
2215 case HCI_OP_READ_BUFFER_SIZE
:
2216 hci_cc_read_buffer_size(hdev
, skb
);
2219 case HCI_OP_READ_BD_ADDR
:
2220 hci_cc_read_bd_addr(hdev
, skb
);
2223 case HCI_OP_READ_PAGE_SCAN_ACTIVITY
:
2224 hci_cc_read_page_scan_activity(hdev
, skb
);
2227 case HCI_OP_WRITE_PAGE_SCAN_ACTIVITY
:
2228 hci_cc_write_page_scan_activity(hdev
, skb
);
2231 case HCI_OP_READ_PAGE_SCAN_TYPE
:
2232 hci_cc_read_page_scan_type(hdev
, skb
);
2235 case HCI_OP_WRITE_PAGE_SCAN_TYPE
:
2236 hci_cc_write_page_scan_type(hdev
, skb
);
2239 case HCI_OP_READ_DATA_BLOCK_SIZE
:
2240 hci_cc_read_data_block_size(hdev
, skb
);
2243 case HCI_OP_READ_FLOW_CONTROL_MODE
:
2244 hci_cc_read_flow_control_mode(hdev
, skb
);
2247 case HCI_OP_READ_LOCAL_AMP_INFO
:
2248 hci_cc_read_local_amp_info(hdev
, skb
);
2251 case HCI_OP_READ_LOCAL_AMP_ASSOC
:
2252 hci_cc_read_local_amp_assoc(hdev
, skb
);
2255 case HCI_OP_READ_INQ_RSP_TX_POWER
:
2256 hci_cc_read_inq_rsp_tx_power(hdev
, skb
);
2259 case HCI_OP_PIN_CODE_REPLY
:
2260 hci_cc_pin_code_reply(hdev
, skb
);
2263 case HCI_OP_PIN_CODE_NEG_REPLY
:
2264 hci_cc_pin_code_neg_reply(hdev
, skb
);
2267 case HCI_OP_READ_LOCAL_OOB_DATA
:
2268 hci_cc_read_local_oob_data_reply(hdev
, skb
);
2271 case HCI_OP_LE_READ_BUFFER_SIZE
:
2272 hci_cc_le_read_buffer_size(hdev
, skb
);
2275 case HCI_OP_LE_READ_LOCAL_FEATURES
:
2276 hci_cc_le_read_local_features(hdev
, skb
);
2279 case HCI_OP_LE_READ_ADV_TX_POWER
:
2280 hci_cc_le_read_adv_tx_power(hdev
, skb
);
2283 case HCI_OP_USER_CONFIRM_REPLY
:
2284 hci_cc_user_confirm_reply(hdev
, skb
);
2287 case HCI_OP_USER_CONFIRM_NEG_REPLY
:
2288 hci_cc_user_confirm_neg_reply(hdev
, skb
);
2291 case HCI_OP_USER_PASSKEY_REPLY
:
2292 hci_cc_user_passkey_reply(hdev
, skb
);
2295 case HCI_OP_USER_PASSKEY_NEG_REPLY
:
2296 hci_cc_user_passkey_neg_reply(hdev
, skb
);
2299 case HCI_OP_LE_SET_SCAN_PARAM
:
2300 hci_cc_le_set_scan_param(hdev
, skb
);
2303 case HCI_OP_LE_SET_ADV_ENABLE
:
2304 hci_cc_le_set_adv_enable(hdev
, skb
);
2307 case HCI_OP_LE_SET_SCAN_ENABLE
:
2308 hci_cc_le_set_scan_enable(hdev
, skb
);
2311 case HCI_OP_LE_READ_WHITE_LIST_SIZE
:
2312 hci_cc_le_read_white_list_size(hdev
, skb
);
2315 case HCI_OP_LE_READ_SUPPORTED_STATES
:
2316 hci_cc_le_read_supported_states(hdev
, skb
);
2319 case HCI_OP_WRITE_LE_HOST_SUPPORTED
:
2320 hci_cc_write_le_host_supported(hdev
, skb
);
2323 case HCI_OP_WRITE_REMOTE_AMP_ASSOC
:
2324 hci_cc_write_remote_amp_assoc(hdev
, skb
);
2328 BT_DBG("%s opcode 0x%4.4x", hdev
->name
, opcode
);
2332 if (opcode
!= HCI_OP_NOP
)
2333 del_timer(&hdev
->cmd_timer
);
2335 hci_req_cmd_complete(hdev
, opcode
, status
);
2337 if (ev
->ncmd
&& !test_bit(HCI_RESET
, &hdev
->flags
)) {
2338 atomic_set(&hdev
->cmd_cnt
, 1);
2339 if (!skb_queue_empty(&hdev
->cmd_q
))
2340 queue_work(hdev
->workqueue
, &hdev
->cmd_work
);
2344 static void hci_cmd_status_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2346 struct hci_ev_cmd_status
*ev
= (void *) skb
->data
;
2349 skb_pull(skb
, sizeof(*ev
));
2351 opcode
= __le16_to_cpu(ev
->opcode
);
2354 case HCI_OP_INQUIRY
:
2355 hci_cs_inquiry(hdev
, ev
->status
);
2358 case HCI_OP_CREATE_CONN
:
2359 hci_cs_create_conn(hdev
, ev
->status
);
2362 case HCI_OP_ADD_SCO
:
2363 hci_cs_add_sco(hdev
, ev
->status
);
2366 case HCI_OP_AUTH_REQUESTED
:
2367 hci_cs_auth_requested(hdev
, ev
->status
);
2370 case HCI_OP_SET_CONN_ENCRYPT
:
2371 hci_cs_set_conn_encrypt(hdev
, ev
->status
);
2374 case HCI_OP_REMOTE_NAME_REQ
:
2375 hci_cs_remote_name_req(hdev
, ev
->status
);
2378 case HCI_OP_READ_REMOTE_FEATURES
:
2379 hci_cs_read_remote_features(hdev
, ev
->status
);
2382 case HCI_OP_READ_REMOTE_EXT_FEATURES
:
2383 hci_cs_read_remote_ext_features(hdev
, ev
->status
);
2386 case HCI_OP_SETUP_SYNC_CONN
:
2387 hci_cs_setup_sync_conn(hdev
, ev
->status
);
2390 case HCI_OP_SNIFF_MODE
:
2391 hci_cs_sniff_mode(hdev
, ev
->status
);
2394 case HCI_OP_EXIT_SNIFF_MODE
:
2395 hci_cs_exit_sniff_mode(hdev
, ev
->status
);
2398 case HCI_OP_DISCONNECT
:
2399 hci_cs_disconnect(hdev
, ev
->status
);
2402 case HCI_OP_LE_CREATE_CONN
:
2403 hci_cs_le_create_conn(hdev
, ev
->status
);
2406 case HCI_OP_CREATE_PHY_LINK
:
2407 hci_cs_create_phylink(hdev
, ev
->status
);
2410 case HCI_OP_ACCEPT_PHY_LINK
:
2411 hci_cs_accept_phylink(hdev
, ev
->status
);
2415 BT_DBG("%s opcode 0x%4.4x", hdev
->name
, opcode
);
2419 if (opcode
!= HCI_OP_NOP
)
2420 del_timer(&hdev
->cmd_timer
);
2423 (hdev
->sent_cmd
&& !bt_cb(hdev
->sent_cmd
)->req
.event
))
2424 hci_req_cmd_complete(hdev
, opcode
, ev
->status
);
2426 if (ev
->ncmd
&& !test_bit(HCI_RESET
, &hdev
->flags
)) {
2427 atomic_set(&hdev
->cmd_cnt
, 1);
2428 if (!skb_queue_empty(&hdev
->cmd_q
))
2429 queue_work(hdev
->workqueue
, &hdev
->cmd_work
);
2433 static void hci_role_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2435 struct hci_ev_role_change
*ev
= (void *) skb
->data
;
2436 struct hci_conn
*conn
;
2438 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2442 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
2446 conn
->link_mode
&= ~HCI_LM_MASTER
;
2448 conn
->link_mode
|= HCI_LM_MASTER
;
2451 clear_bit(HCI_CONN_RSWITCH_PEND
, &conn
->flags
);
2453 hci_role_switch_cfm(conn
, ev
->status
, ev
->role
);
2456 hci_dev_unlock(hdev
);
2459 static void hci_num_comp_pkts_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2461 struct hci_ev_num_comp_pkts
*ev
= (void *) skb
->data
;
2464 if (hdev
->flow_ctl_mode
!= HCI_FLOW_CTL_MODE_PACKET_BASED
) {
2465 BT_ERR("Wrong event for mode %d", hdev
->flow_ctl_mode
);
2469 if (skb
->len
< sizeof(*ev
) || skb
->len
< sizeof(*ev
) +
2470 ev
->num_hndl
* sizeof(struct hci_comp_pkts_info
)) {
2471 BT_DBG("%s bad parameters", hdev
->name
);
2475 BT_DBG("%s num_hndl %d", hdev
->name
, ev
->num_hndl
);
2477 for (i
= 0; i
< ev
->num_hndl
; i
++) {
2478 struct hci_comp_pkts_info
*info
= &ev
->handles
[i
];
2479 struct hci_conn
*conn
;
2480 __u16 handle
, count
;
2482 handle
= __le16_to_cpu(info
->handle
);
2483 count
= __le16_to_cpu(info
->count
);
2485 conn
= hci_conn_hash_lookup_handle(hdev
, handle
);
2489 conn
->sent
-= count
;
2491 switch (conn
->type
) {
2493 hdev
->acl_cnt
+= count
;
2494 if (hdev
->acl_cnt
> hdev
->acl_pkts
)
2495 hdev
->acl_cnt
= hdev
->acl_pkts
;
2499 if (hdev
->le_pkts
) {
2500 hdev
->le_cnt
+= count
;
2501 if (hdev
->le_cnt
> hdev
->le_pkts
)
2502 hdev
->le_cnt
= hdev
->le_pkts
;
2504 hdev
->acl_cnt
+= count
;
2505 if (hdev
->acl_cnt
> hdev
->acl_pkts
)
2506 hdev
->acl_cnt
= hdev
->acl_pkts
;
2511 hdev
->sco_cnt
+= count
;
2512 if (hdev
->sco_cnt
> hdev
->sco_pkts
)
2513 hdev
->sco_cnt
= hdev
->sco_pkts
;
2517 BT_ERR("Unknown type %d conn %p", conn
->type
, conn
);
2522 queue_work(hdev
->workqueue
, &hdev
->tx_work
);
2525 static struct hci_conn
*__hci_conn_lookup_handle(struct hci_dev
*hdev
,
2528 struct hci_chan
*chan
;
2530 switch (hdev
->dev_type
) {
2532 return hci_conn_hash_lookup_handle(hdev
, handle
);
2534 chan
= hci_chan_lookup_handle(hdev
, handle
);
2539 BT_ERR("%s unknown dev_type %d", hdev
->name
, hdev
->dev_type
);
2546 static void hci_num_comp_blocks_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2548 struct hci_ev_num_comp_blocks
*ev
= (void *) skb
->data
;
2551 if (hdev
->flow_ctl_mode
!= HCI_FLOW_CTL_MODE_BLOCK_BASED
) {
2552 BT_ERR("Wrong event for mode %d", hdev
->flow_ctl_mode
);
2556 if (skb
->len
< sizeof(*ev
) || skb
->len
< sizeof(*ev
) +
2557 ev
->num_hndl
* sizeof(struct hci_comp_blocks_info
)) {
2558 BT_DBG("%s bad parameters", hdev
->name
);
2562 BT_DBG("%s num_blocks %d num_hndl %d", hdev
->name
, ev
->num_blocks
,
2565 for (i
= 0; i
< ev
->num_hndl
; i
++) {
2566 struct hci_comp_blocks_info
*info
= &ev
->handles
[i
];
2567 struct hci_conn
*conn
= NULL
;
2568 __u16 handle
, block_count
;
2570 handle
= __le16_to_cpu(info
->handle
);
2571 block_count
= __le16_to_cpu(info
->blocks
);
2573 conn
= __hci_conn_lookup_handle(hdev
, handle
);
2577 conn
->sent
-= block_count
;
2579 switch (conn
->type
) {
2582 hdev
->block_cnt
+= block_count
;
2583 if (hdev
->block_cnt
> hdev
->num_blocks
)
2584 hdev
->block_cnt
= hdev
->num_blocks
;
2588 BT_ERR("Unknown type %d conn %p", conn
->type
, conn
);
2593 queue_work(hdev
->workqueue
, &hdev
->tx_work
);
2596 static void hci_mode_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2598 struct hci_ev_mode_change
*ev
= (void *) skb
->data
;
2599 struct hci_conn
*conn
;
2601 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2605 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2607 conn
->mode
= ev
->mode
;
2608 conn
->interval
= __le16_to_cpu(ev
->interval
);
2610 if (!test_and_clear_bit(HCI_CONN_MODE_CHANGE_PEND
,
2612 if (conn
->mode
== HCI_CM_ACTIVE
)
2613 set_bit(HCI_CONN_POWER_SAVE
, &conn
->flags
);
2615 clear_bit(HCI_CONN_POWER_SAVE
, &conn
->flags
);
2618 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND
, &conn
->flags
))
2619 hci_sco_setup(conn
, ev
->status
);
2622 hci_dev_unlock(hdev
);
2625 static void hci_pin_code_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2627 struct hci_ev_pin_code_req
*ev
= (void *) skb
->data
;
2628 struct hci_conn
*conn
;
2630 BT_DBG("%s", hdev
->name
);
2634 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
2638 if (conn
->state
== BT_CONNECTED
) {
2639 hci_conn_hold(conn
);
2640 conn
->disc_timeout
= HCI_PAIRING_TIMEOUT
;
2641 hci_conn_drop(conn
);
2644 if (!test_bit(HCI_PAIRABLE
, &hdev
->dev_flags
))
2645 hci_send_cmd(hdev
, HCI_OP_PIN_CODE_NEG_REPLY
,
2646 sizeof(ev
->bdaddr
), &ev
->bdaddr
);
2647 else if (test_bit(HCI_MGMT
, &hdev
->dev_flags
)) {
2650 if (conn
->pending_sec_level
== BT_SECURITY_HIGH
)
2655 mgmt_pin_code_request(hdev
, &ev
->bdaddr
, secure
);
2659 hci_dev_unlock(hdev
);
2662 static void hci_link_key_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2664 struct hci_ev_link_key_req
*ev
= (void *) skb
->data
;
2665 struct hci_cp_link_key_reply cp
;
2666 struct hci_conn
*conn
;
2667 struct link_key
*key
;
2669 BT_DBG("%s", hdev
->name
);
2671 if (!test_bit(HCI_LINK_KEYS
, &hdev
->dev_flags
))
2676 key
= hci_find_link_key(hdev
, &ev
->bdaddr
);
2678 BT_DBG("%s link key not found for %pMR", hdev
->name
,
2683 BT_DBG("%s found key type %u for %pMR", hdev
->name
, key
->type
,
2686 if (!test_bit(HCI_DEBUG_KEYS
, &hdev
->dev_flags
) &&
2687 key
->type
== HCI_LK_DEBUG_COMBINATION
) {
2688 BT_DBG("%s ignoring debug key", hdev
->name
);
2692 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
2694 if (key
->type
== HCI_LK_UNAUTH_COMBINATION
&&
2695 conn
->auth_type
!= 0xff && (conn
->auth_type
& 0x01)) {
2696 BT_DBG("%s ignoring unauthenticated key", hdev
->name
);
2700 if (key
->type
== HCI_LK_COMBINATION
&& key
->pin_len
< 16 &&
2701 conn
->pending_sec_level
== BT_SECURITY_HIGH
) {
2702 BT_DBG("%s ignoring key unauthenticated for high security",
2707 conn
->key_type
= key
->type
;
2708 conn
->pin_length
= key
->pin_len
;
2711 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
2712 memcpy(cp
.link_key
, key
->val
, HCI_LINK_KEY_SIZE
);
2714 hci_send_cmd(hdev
, HCI_OP_LINK_KEY_REPLY
, sizeof(cp
), &cp
);
2716 hci_dev_unlock(hdev
);
2721 hci_send_cmd(hdev
, HCI_OP_LINK_KEY_NEG_REPLY
, 6, &ev
->bdaddr
);
2722 hci_dev_unlock(hdev
);
2725 static void hci_link_key_notify_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2727 struct hci_ev_link_key_notify
*ev
= (void *) skb
->data
;
2728 struct hci_conn
*conn
;
2731 BT_DBG("%s", hdev
->name
);
2735 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
2737 hci_conn_hold(conn
);
2738 conn
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
2739 pin_len
= conn
->pin_length
;
2741 if (ev
->key_type
!= HCI_LK_CHANGED_COMBINATION
)
2742 conn
->key_type
= ev
->key_type
;
2744 hci_conn_drop(conn
);
2747 if (test_bit(HCI_LINK_KEYS
, &hdev
->dev_flags
))
2748 hci_add_link_key(hdev
, conn
, 1, &ev
->bdaddr
, ev
->link_key
,
2749 ev
->key_type
, pin_len
);
2751 hci_dev_unlock(hdev
);
2754 static void hci_clock_offset_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2756 struct hci_ev_clock_offset
*ev
= (void *) skb
->data
;
2757 struct hci_conn
*conn
;
2759 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2763 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2764 if (conn
&& !ev
->status
) {
2765 struct inquiry_entry
*ie
;
2767 ie
= hci_inquiry_cache_lookup(hdev
, &conn
->dst
);
2769 ie
->data
.clock_offset
= ev
->clock_offset
;
2770 ie
->timestamp
= jiffies
;
2774 hci_dev_unlock(hdev
);
2777 static void hci_pkt_type_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2779 struct hci_ev_pkt_type_change
*ev
= (void *) skb
->data
;
2780 struct hci_conn
*conn
;
2782 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2786 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2787 if (conn
&& !ev
->status
)
2788 conn
->pkt_type
= __le16_to_cpu(ev
->pkt_type
);
2790 hci_dev_unlock(hdev
);
2793 static void hci_pscan_rep_mode_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2795 struct hci_ev_pscan_rep_mode
*ev
= (void *) skb
->data
;
2796 struct inquiry_entry
*ie
;
2798 BT_DBG("%s", hdev
->name
);
2802 ie
= hci_inquiry_cache_lookup(hdev
, &ev
->bdaddr
);
2804 ie
->data
.pscan_rep_mode
= ev
->pscan_rep_mode
;
2805 ie
->timestamp
= jiffies
;
2808 hci_dev_unlock(hdev
);
2811 static void hci_inquiry_result_with_rssi_evt(struct hci_dev
*hdev
,
2812 struct sk_buff
*skb
)
2814 struct inquiry_data data
;
2815 int num_rsp
= *((__u8
*) skb
->data
);
2816 bool name_known
, ssp
;
2818 BT_DBG("%s num_rsp %d", hdev
->name
, num_rsp
);
2823 if (test_bit(HCI_PERIODIC_INQ
, &hdev
->dev_flags
))
2828 if ((skb
->len
- 1) / num_rsp
!= sizeof(struct inquiry_info_with_rssi
)) {
2829 struct inquiry_info_with_rssi_and_pscan_mode
*info
;
2830 info
= (void *) (skb
->data
+ 1);
2832 for (; num_rsp
; num_rsp
--, info
++) {
2833 bacpy(&data
.bdaddr
, &info
->bdaddr
);
2834 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
2835 data
.pscan_period_mode
= info
->pscan_period_mode
;
2836 data
.pscan_mode
= info
->pscan_mode
;
2837 memcpy(data
.dev_class
, info
->dev_class
, 3);
2838 data
.clock_offset
= info
->clock_offset
;
2839 data
.rssi
= info
->rssi
;
2840 data
.ssp_mode
= 0x00;
2842 name_known
= hci_inquiry_cache_update(hdev
, &data
,
2844 mgmt_device_found(hdev
, &info
->bdaddr
, ACL_LINK
, 0x00,
2845 info
->dev_class
, info
->rssi
,
2846 !name_known
, ssp
, NULL
, 0);
2849 struct inquiry_info_with_rssi
*info
= (void *) (skb
->data
+ 1);
2851 for (; num_rsp
; num_rsp
--, info
++) {
2852 bacpy(&data
.bdaddr
, &info
->bdaddr
);
2853 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
2854 data
.pscan_period_mode
= info
->pscan_period_mode
;
2855 data
.pscan_mode
= 0x00;
2856 memcpy(data
.dev_class
, info
->dev_class
, 3);
2857 data
.clock_offset
= info
->clock_offset
;
2858 data
.rssi
= info
->rssi
;
2859 data
.ssp_mode
= 0x00;
2860 name_known
= hci_inquiry_cache_update(hdev
, &data
,
2862 mgmt_device_found(hdev
, &info
->bdaddr
, ACL_LINK
, 0x00,
2863 info
->dev_class
, info
->rssi
,
2864 !name_known
, ssp
, NULL
, 0);
2868 hci_dev_unlock(hdev
);
2871 static void hci_remote_ext_features_evt(struct hci_dev
*hdev
,
2872 struct sk_buff
*skb
)
2874 struct hci_ev_remote_ext_features
*ev
= (void *) skb
->data
;
2875 struct hci_conn
*conn
;
2877 BT_DBG("%s", hdev
->name
);
2881 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2885 if (ev
->page
< HCI_MAX_PAGES
)
2886 memcpy(conn
->features
[ev
->page
], ev
->features
, 8);
2888 if (!ev
->status
&& ev
->page
== 0x01) {
2889 struct inquiry_entry
*ie
;
2891 ie
= hci_inquiry_cache_lookup(hdev
, &conn
->dst
);
2893 ie
->data
.ssp_mode
= (ev
->features
[0] & LMP_HOST_SSP
);
2895 if (ev
->features
[0] & LMP_HOST_SSP
) {
2896 set_bit(HCI_CONN_SSP_ENABLED
, &conn
->flags
);
2898 /* It is mandatory by the Bluetooth specification that
2899 * Extended Inquiry Results are only used when Secure
2900 * Simple Pairing is enabled, but some devices violate
2903 * To make these devices work, the internal SSP
2904 * enabled flag needs to be cleared if the remote host
2905 * features do not indicate SSP support */
2906 clear_bit(HCI_CONN_SSP_ENABLED
, &conn
->flags
);
2910 if (conn
->state
!= BT_CONFIG
)
2913 if (!ev
->status
&& !test_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
)) {
2914 struct hci_cp_remote_name_req cp
;
2915 memset(&cp
, 0, sizeof(cp
));
2916 bacpy(&cp
.bdaddr
, &conn
->dst
);
2917 cp
.pscan_rep_mode
= 0x02;
2918 hci_send_cmd(hdev
, HCI_OP_REMOTE_NAME_REQ
, sizeof(cp
), &cp
);
2919 } else if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
))
2920 mgmt_device_connected(hdev
, &conn
->dst
, conn
->type
,
2921 conn
->dst_type
, 0, NULL
, 0,
2924 if (!hci_outgoing_auth_needed(hdev
, conn
)) {
2925 conn
->state
= BT_CONNECTED
;
2926 hci_proto_connect_cfm(conn
, ev
->status
);
2927 hci_conn_drop(conn
);
2931 hci_dev_unlock(hdev
);
2934 static void hci_sync_conn_complete_evt(struct hci_dev
*hdev
,
2935 struct sk_buff
*skb
)
2937 struct hci_ev_sync_conn_complete
*ev
= (void *) skb
->data
;
2938 struct hci_conn
*conn
;
2940 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2944 conn
= hci_conn_hash_lookup_ba(hdev
, ev
->link_type
, &ev
->bdaddr
);
2946 if (ev
->link_type
== ESCO_LINK
)
2949 conn
= hci_conn_hash_lookup_ba(hdev
, ESCO_LINK
, &ev
->bdaddr
);
2953 conn
->type
= SCO_LINK
;
2956 switch (ev
->status
) {
2958 conn
->handle
= __le16_to_cpu(ev
->handle
);
2959 conn
->state
= BT_CONNECTED
;
2961 hci_conn_add_sysfs(conn
);
2964 case 0x11: /* Unsupported Feature or Parameter Value */
2965 case 0x1c: /* SCO interval rejected */
2966 case 0x1a: /* Unsupported Remote Feature */
2967 case 0x1f: /* Unspecified error */
2968 if (conn
->out
&& conn
->attempt
< 2) {
2969 conn
->pkt_type
= (hdev
->esco_type
& SCO_ESCO_MASK
) |
2970 (hdev
->esco_type
& EDR_ESCO_MASK
);
2971 hci_setup_sync(conn
, conn
->link
->handle
);
2977 conn
->state
= BT_CLOSED
;
2981 hci_proto_connect_cfm(conn
, ev
->status
);
2986 hci_dev_unlock(hdev
);
2989 static void hci_extended_inquiry_result_evt(struct hci_dev
*hdev
,
2990 struct sk_buff
*skb
)
2992 struct inquiry_data data
;
2993 struct extended_inquiry_info
*info
= (void *) (skb
->data
+ 1);
2994 int num_rsp
= *((__u8
*) skb
->data
);
2997 BT_DBG("%s num_rsp %d", hdev
->name
, num_rsp
);
3002 if (test_bit(HCI_PERIODIC_INQ
, &hdev
->dev_flags
))
3007 for (; num_rsp
; num_rsp
--, info
++) {
3008 bool name_known
, ssp
;
3010 bacpy(&data
.bdaddr
, &info
->bdaddr
);
3011 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
3012 data
.pscan_period_mode
= info
->pscan_period_mode
;
3013 data
.pscan_mode
= 0x00;
3014 memcpy(data
.dev_class
, info
->dev_class
, 3);
3015 data
.clock_offset
= info
->clock_offset
;
3016 data
.rssi
= info
->rssi
;
3017 data
.ssp_mode
= 0x01;
3019 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3020 name_known
= eir_has_data_type(info
->data
,
3026 name_known
= hci_inquiry_cache_update(hdev
, &data
, name_known
,
3028 eir_len
= eir_get_length(info
->data
, sizeof(info
->data
));
3029 mgmt_device_found(hdev
, &info
->bdaddr
, ACL_LINK
, 0x00,
3030 info
->dev_class
, info
->rssi
, !name_known
,
3031 ssp
, info
->data
, eir_len
);
3034 hci_dev_unlock(hdev
);
3037 static void hci_key_refresh_complete_evt(struct hci_dev
*hdev
,
3038 struct sk_buff
*skb
)
3040 struct hci_ev_key_refresh_complete
*ev
= (void *) skb
->data
;
3041 struct hci_conn
*conn
;
3043 BT_DBG("%s status 0x%2.2x handle 0x%4.4x", hdev
->name
, ev
->status
,
3044 __le16_to_cpu(ev
->handle
));
3048 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
3053 conn
->sec_level
= conn
->pending_sec_level
;
3055 clear_bit(HCI_CONN_ENCRYPT_PEND
, &conn
->flags
);
3057 if (ev
->status
&& conn
->state
== BT_CONNECTED
) {
3058 hci_disconnect(conn
, HCI_ERROR_AUTH_FAILURE
);
3059 hci_conn_drop(conn
);
3063 if (conn
->state
== BT_CONFIG
) {
3065 conn
->state
= BT_CONNECTED
;
3067 hci_proto_connect_cfm(conn
, ev
->status
);
3068 hci_conn_drop(conn
);
3070 hci_auth_cfm(conn
, ev
->status
);
3072 hci_conn_hold(conn
);
3073 conn
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
3074 hci_conn_drop(conn
);
3078 hci_dev_unlock(hdev
);
3081 static u8
hci_get_auth_req(struct hci_conn
*conn
)
3083 /* If remote requests dedicated bonding follow that lead */
3084 if (conn
->remote_auth
== 0x02 || conn
->remote_auth
== 0x03) {
3085 /* If both remote and local IO capabilities allow MITM
3086 * protection then require it, otherwise don't */
3087 if (conn
->remote_cap
== 0x03 || conn
->io_capability
== 0x03)
3093 /* If remote requests no-bonding follow that lead */
3094 if (conn
->remote_auth
== 0x00 || conn
->remote_auth
== 0x01)
3095 return conn
->remote_auth
| (conn
->auth_type
& 0x01);
3097 return conn
->auth_type
;
3100 static void hci_io_capa_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3102 struct hci_ev_io_capa_request
*ev
= (void *) skb
->data
;
3103 struct hci_conn
*conn
;
3105 BT_DBG("%s", hdev
->name
);
3109 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3113 hci_conn_hold(conn
);
3115 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3118 if (test_bit(HCI_PAIRABLE
, &hdev
->dev_flags
) ||
3119 (conn
->remote_auth
& ~0x01) == HCI_AT_NO_BONDING
) {
3120 struct hci_cp_io_capability_reply cp
;
3122 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
3123 /* Change the IO capability from KeyboardDisplay
3124 * to DisplayYesNo as it is not supported by BT spec. */
3125 cp
.capability
= (conn
->io_capability
== 0x04) ?
3126 0x01 : conn
->io_capability
;
3127 conn
->auth_type
= hci_get_auth_req(conn
);
3128 cp
.authentication
= conn
->auth_type
;
3130 if (hci_find_remote_oob_data(hdev
, &conn
->dst
) &&
3131 (conn
->out
|| test_bit(HCI_CONN_REMOTE_OOB
, &conn
->flags
)))
3136 hci_send_cmd(hdev
, HCI_OP_IO_CAPABILITY_REPLY
,
3139 struct hci_cp_io_capability_neg_reply cp
;
3141 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
3142 cp
.reason
= HCI_ERROR_PAIRING_NOT_ALLOWED
;
3144 hci_send_cmd(hdev
, HCI_OP_IO_CAPABILITY_NEG_REPLY
,
3149 hci_dev_unlock(hdev
);
3152 static void hci_io_capa_reply_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3154 struct hci_ev_io_capa_reply
*ev
= (void *) skb
->data
;
3155 struct hci_conn
*conn
;
3157 BT_DBG("%s", hdev
->name
);
3161 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3165 conn
->remote_cap
= ev
->capability
;
3166 conn
->remote_auth
= ev
->authentication
;
3168 set_bit(HCI_CONN_REMOTE_OOB
, &conn
->flags
);
3171 hci_dev_unlock(hdev
);
3174 static void hci_user_confirm_request_evt(struct hci_dev
*hdev
,
3175 struct sk_buff
*skb
)
3177 struct hci_ev_user_confirm_req
*ev
= (void *) skb
->data
;
3178 int loc_mitm
, rem_mitm
, confirm_hint
= 0;
3179 struct hci_conn
*conn
;
3181 BT_DBG("%s", hdev
->name
);
3185 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3188 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3192 loc_mitm
= (conn
->auth_type
& 0x01);
3193 rem_mitm
= (conn
->remote_auth
& 0x01);
3195 /* If we require MITM but the remote device can't provide that
3196 * (it has NoInputNoOutput) then reject the confirmation
3197 * request. The only exception is when we're dedicated bonding
3198 * initiators (connect_cfm_cb set) since then we always have the MITM
3200 if (!conn
->connect_cfm_cb
&& loc_mitm
&& conn
->remote_cap
== 0x03) {
3201 BT_DBG("Rejecting request: remote device can't provide MITM");
3202 hci_send_cmd(hdev
, HCI_OP_USER_CONFIRM_NEG_REPLY
,
3203 sizeof(ev
->bdaddr
), &ev
->bdaddr
);
3207 /* If no side requires MITM protection; auto-accept */
3208 if ((!loc_mitm
|| conn
->remote_cap
== 0x03) &&
3209 (!rem_mitm
|| conn
->io_capability
== 0x03)) {
3211 /* If we're not the initiators request authorization to
3212 * proceed from user space (mgmt_user_confirm with
3213 * confirm_hint set to 1). */
3214 if (!test_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
)) {
3215 BT_DBG("Confirming auto-accept as acceptor");
3220 BT_DBG("Auto-accept of user confirmation with %ums delay",
3221 hdev
->auto_accept_delay
);
3223 if (hdev
->auto_accept_delay
> 0) {
3224 int delay
= msecs_to_jiffies(hdev
->auto_accept_delay
);
3225 mod_timer(&conn
->auto_accept_timer
, jiffies
+ delay
);
3229 hci_send_cmd(hdev
, HCI_OP_USER_CONFIRM_REPLY
,
3230 sizeof(ev
->bdaddr
), &ev
->bdaddr
);
3235 mgmt_user_confirm_request(hdev
, &ev
->bdaddr
, ACL_LINK
, 0, ev
->passkey
,
3239 hci_dev_unlock(hdev
);
3242 static void hci_user_passkey_request_evt(struct hci_dev
*hdev
,
3243 struct sk_buff
*skb
)
3245 struct hci_ev_user_passkey_req
*ev
= (void *) skb
->data
;
3247 BT_DBG("%s", hdev
->name
);
3249 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3250 mgmt_user_passkey_request(hdev
, &ev
->bdaddr
, ACL_LINK
, 0);
3253 static void hci_user_passkey_notify_evt(struct hci_dev
*hdev
,
3254 struct sk_buff
*skb
)
3256 struct hci_ev_user_passkey_notify
*ev
= (void *) skb
->data
;
3257 struct hci_conn
*conn
;
3259 BT_DBG("%s", hdev
->name
);
3261 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3265 conn
->passkey_notify
= __le32_to_cpu(ev
->passkey
);
3266 conn
->passkey_entered
= 0;
3268 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3269 mgmt_user_passkey_notify(hdev
, &conn
->dst
, conn
->type
,
3270 conn
->dst_type
, conn
->passkey_notify
,
3271 conn
->passkey_entered
);
3274 static void hci_keypress_notify_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3276 struct hci_ev_keypress_notify
*ev
= (void *) skb
->data
;
3277 struct hci_conn
*conn
;
3279 BT_DBG("%s", hdev
->name
);
3281 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3286 case HCI_KEYPRESS_STARTED
:
3287 conn
->passkey_entered
= 0;
3290 case HCI_KEYPRESS_ENTERED
:
3291 conn
->passkey_entered
++;
3294 case HCI_KEYPRESS_ERASED
:
3295 conn
->passkey_entered
--;
3298 case HCI_KEYPRESS_CLEARED
:
3299 conn
->passkey_entered
= 0;
3302 case HCI_KEYPRESS_COMPLETED
:
3306 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3307 mgmt_user_passkey_notify(hdev
, &conn
->dst
, conn
->type
,
3308 conn
->dst_type
, conn
->passkey_notify
,
3309 conn
->passkey_entered
);
3312 static void hci_simple_pair_complete_evt(struct hci_dev
*hdev
,
3313 struct sk_buff
*skb
)
3315 struct hci_ev_simple_pair_complete
*ev
= (void *) skb
->data
;
3316 struct hci_conn
*conn
;
3318 BT_DBG("%s", hdev
->name
);
3322 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3326 /* To avoid duplicate auth_failed events to user space we check
3327 * the HCI_CONN_AUTH_PEND flag which will be set if we
3328 * initiated the authentication. A traditional auth_complete
3329 * event gets always produced as initiator and is also mapped to
3330 * the mgmt_auth_failed event */
3331 if (!test_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
) && ev
->status
)
3332 mgmt_auth_failed(hdev
, &conn
->dst
, conn
->type
, conn
->dst_type
,
3335 hci_conn_drop(conn
);
3338 hci_dev_unlock(hdev
);
3341 static void hci_remote_host_features_evt(struct hci_dev
*hdev
,
3342 struct sk_buff
*skb
)
3344 struct hci_ev_remote_host_features
*ev
= (void *) skb
->data
;
3345 struct inquiry_entry
*ie
;
3346 struct hci_conn
*conn
;
3348 BT_DBG("%s", hdev
->name
);
3352 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3354 memcpy(conn
->features
[1], ev
->features
, 8);
3356 ie
= hci_inquiry_cache_lookup(hdev
, &ev
->bdaddr
);
3358 ie
->data
.ssp_mode
= (ev
->features
[0] & LMP_HOST_SSP
);
3360 hci_dev_unlock(hdev
);
3363 static void hci_remote_oob_data_request_evt(struct hci_dev
*hdev
,
3364 struct sk_buff
*skb
)
3366 struct hci_ev_remote_oob_data_request
*ev
= (void *) skb
->data
;
3367 struct oob_data
*data
;
3369 BT_DBG("%s", hdev
->name
);
3373 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3376 data
= hci_find_remote_oob_data(hdev
, &ev
->bdaddr
);
3378 struct hci_cp_remote_oob_data_reply cp
;
3380 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
3381 memcpy(cp
.hash
, data
->hash
, sizeof(cp
.hash
));
3382 memcpy(cp
.randomizer
, data
->randomizer
, sizeof(cp
.randomizer
));
3384 hci_send_cmd(hdev
, HCI_OP_REMOTE_OOB_DATA_REPLY
, sizeof(cp
),
3387 struct hci_cp_remote_oob_data_neg_reply cp
;
3389 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
3390 hci_send_cmd(hdev
, HCI_OP_REMOTE_OOB_DATA_NEG_REPLY
, sizeof(cp
),
3395 hci_dev_unlock(hdev
);
3398 static void hci_phy_link_complete_evt(struct hci_dev
*hdev
,
3399 struct sk_buff
*skb
)
3401 struct hci_ev_phy_link_complete
*ev
= (void *) skb
->data
;
3402 struct hci_conn
*hcon
, *bredr_hcon
;
3404 BT_DBG("%s handle 0x%2.2x status 0x%2.2x", hdev
->name
, ev
->phy_handle
,
3409 hcon
= hci_conn_hash_lookup_handle(hdev
, ev
->phy_handle
);
3411 hci_dev_unlock(hdev
);
3417 hci_dev_unlock(hdev
);
3421 bredr_hcon
= hcon
->amp_mgr
->l2cap_conn
->hcon
;
3423 hcon
->state
= BT_CONNECTED
;
3424 bacpy(&hcon
->dst
, &bredr_hcon
->dst
);
3426 hci_conn_hold(hcon
);
3427 hcon
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
3428 hci_conn_drop(hcon
);
3430 hci_conn_add_sysfs(hcon
);
3432 amp_physical_cfm(bredr_hcon
, hcon
);
3434 hci_dev_unlock(hdev
);
3437 static void hci_loglink_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3439 struct hci_ev_logical_link_complete
*ev
= (void *) skb
->data
;
3440 struct hci_conn
*hcon
;
3441 struct hci_chan
*hchan
;
3442 struct amp_mgr
*mgr
;
3444 BT_DBG("%s log_handle 0x%4.4x phy_handle 0x%2.2x status 0x%2.2x",
3445 hdev
->name
, le16_to_cpu(ev
->handle
), ev
->phy_handle
,
3448 hcon
= hci_conn_hash_lookup_handle(hdev
, ev
->phy_handle
);
3452 /* Create AMP hchan */
3453 hchan
= hci_chan_create(hcon
);
3457 hchan
->handle
= le16_to_cpu(ev
->handle
);
3459 BT_DBG("hcon %p mgr %p hchan %p", hcon
, hcon
->amp_mgr
, hchan
);
3461 mgr
= hcon
->amp_mgr
;
3462 if (mgr
&& mgr
->bredr_chan
) {
3463 struct l2cap_chan
*bredr_chan
= mgr
->bredr_chan
;
3465 l2cap_chan_lock(bredr_chan
);
3467 bredr_chan
->conn
->mtu
= hdev
->block_mtu
;
3468 l2cap_logical_cfm(bredr_chan
, hchan
, 0);
3469 hci_conn_hold(hcon
);
3471 l2cap_chan_unlock(bredr_chan
);
3475 static void hci_disconn_loglink_complete_evt(struct hci_dev
*hdev
,
3476 struct sk_buff
*skb
)
3478 struct hci_ev_disconn_logical_link_complete
*ev
= (void *) skb
->data
;
3479 struct hci_chan
*hchan
;
3481 BT_DBG("%s log handle 0x%4.4x status 0x%2.2x", hdev
->name
,
3482 le16_to_cpu(ev
->handle
), ev
->status
);
3489 hchan
= hci_chan_lookup_handle(hdev
, le16_to_cpu(ev
->handle
));
3493 amp_destroy_logical_link(hchan
, ev
->reason
);
3496 hci_dev_unlock(hdev
);
3499 static void hci_disconn_phylink_complete_evt(struct hci_dev
*hdev
,
3500 struct sk_buff
*skb
)
3502 struct hci_ev_disconn_phy_link_complete
*ev
= (void *) skb
->data
;
3503 struct hci_conn
*hcon
;
3505 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
3512 hcon
= hci_conn_hash_lookup_handle(hdev
, ev
->phy_handle
);
3514 hcon
->state
= BT_CLOSED
;
3518 hci_dev_unlock(hdev
);
3521 static void hci_le_conn_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3523 struct hci_ev_le_conn_complete
*ev
= (void *) skb
->data
;
3524 struct hci_conn
*conn
;
3526 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
3530 conn
= hci_conn_hash_lookup_state(hdev
, LE_LINK
, BT_CONNECT
);
3532 conn
= hci_conn_add(hdev
, LE_LINK
, &ev
->bdaddr
);
3534 BT_ERR("No memory for new connection");
3538 conn
->dst_type
= ev
->bdaddr_type
;
3540 if (ev
->role
== LE_CONN_ROLE_MASTER
) {
3542 conn
->link_mode
|= HCI_LM_MASTER
;
3547 mgmt_connect_failed(hdev
, &conn
->dst
, conn
->type
,
3548 conn
->dst_type
, ev
->status
);
3549 hci_proto_connect_cfm(conn
, ev
->status
);
3550 conn
->state
= BT_CLOSED
;
3555 if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
))
3556 mgmt_device_connected(hdev
, &ev
->bdaddr
, conn
->type
,
3557 conn
->dst_type
, 0, NULL
, 0, NULL
);
3559 conn
->sec_level
= BT_SECURITY_LOW
;
3560 conn
->handle
= __le16_to_cpu(ev
->handle
);
3561 conn
->state
= BT_CONNECTED
;
3563 hci_conn_add_sysfs(conn
);
3565 hci_proto_connect_cfm(conn
, ev
->status
);
3568 hci_dev_unlock(hdev
);
3571 static void hci_le_adv_report_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3573 u8 num_reports
= skb
->data
[0];
3574 void *ptr
= &skb
->data
[1];
3577 while (num_reports
--) {
3578 struct hci_ev_le_advertising_info
*ev
= ptr
;
3580 rssi
= ev
->data
[ev
->length
];
3581 mgmt_device_found(hdev
, &ev
->bdaddr
, LE_LINK
, ev
->bdaddr_type
,
3582 NULL
, rssi
, 0, 1, ev
->data
, ev
->length
);
3584 ptr
+= sizeof(*ev
) + ev
->length
+ 1;
3588 static void hci_le_ltk_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3590 struct hci_ev_le_ltk_req
*ev
= (void *) skb
->data
;
3591 struct hci_cp_le_ltk_reply cp
;
3592 struct hci_cp_le_ltk_neg_reply neg
;
3593 struct hci_conn
*conn
;
3594 struct smp_ltk
*ltk
;
3596 BT_DBG("%s handle 0x%4.4x", hdev
->name
, __le16_to_cpu(ev
->handle
));
3600 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
3604 ltk
= hci_find_ltk(hdev
, ev
->ediv
, ev
->random
);
3608 memcpy(cp
.ltk
, ltk
->val
, sizeof(ltk
->val
));
3609 cp
.handle
= cpu_to_le16(conn
->handle
);
3611 if (ltk
->authenticated
)
3612 conn
->sec_level
= BT_SECURITY_HIGH
;
3614 hci_send_cmd(hdev
, HCI_OP_LE_LTK_REPLY
, sizeof(cp
), &cp
);
3616 if (ltk
->type
& HCI_SMP_STK
) {
3617 list_del(<k
->list
);
3621 hci_dev_unlock(hdev
);
3626 neg
.handle
= ev
->handle
;
3627 hci_send_cmd(hdev
, HCI_OP_LE_LTK_NEG_REPLY
, sizeof(neg
), &neg
);
3628 hci_dev_unlock(hdev
);
3631 static void hci_le_meta_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3633 struct hci_ev_le_meta
*le_ev
= (void *) skb
->data
;
3635 skb_pull(skb
, sizeof(*le_ev
));
3637 switch (le_ev
->subevent
) {
3638 case HCI_EV_LE_CONN_COMPLETE
:
3639 hci_le_conn_complete_evt(hdev
, skb
);
3642 case HCI_EV_LE_ADVERTISING_REPORT
:
3643 hci_le_adv_report_evt(hdev
, skb
);
3646 case HCI_EV_LE_LTK_REQ
:
3647 hci_le_ltk_request_evt(hdev
, skb
);
3655 static void hci_chan_selected_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3657 struct hci_ev_channel_selected
*ev
= (void *) skb
->data
;
3658 struct hci_conn
*hcon
;
3660 BT_DBG("%s handle 0x%2.2x", hdev
->name
, ev
->phy_handle
);
3662 skb_pull(skb
, sizeof(*ev
));
3664 hcon
= hci_conn_hash_lookup_handle(hdev
, ev
->phy_handle
);
3668 amp_read_loc_assoc_final_data(hdev
, hcon
);
3671 void hci_event_packet(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3673 struct hci_event_hdr
*hdr
= (void *) skb
->data
;
3674 __u8 event
= hdr
->evt
;
3678 /* Received events are (currently) only needed when a request is
3679 * ongoing so avoid unnecessary memory allocation.
3681 if (hdev
->req_status
== HCI_REQ_PEND
) {
3682 kfree_skb(hdev
->recv_evt
);
3683 hdev
->recv_evt
= skb_clone(skb
, GFP_KERNEL
);
3686 hci_dev_unlock(hdev
);
3688 skb_pull(skb
, HCI_EVENT_HDR_SIZE
);
3690 if (hdev
->sent_cmd
&& bt_cb(hdev
->sent_cmd
)->req
.event
== event
) {
3691 struct hci_command_hdr
*hdr
= (void *) hdev
->sent_cmd
->data
;
3692 u16 opcode
= __le16_to_cpu(hdr
->opcode
);
3694 hci_req_cmd_complete(hdev
, opcode
, 0);
3698 case HCI_EV_INQUIRY_COMPLETE
:
3699 hci_inquiry_complete_evt(hdev
, skb
);
3702 case HCI_EV_INQUIRY_RESULT
:
3703 hci_inquiry_result_evt(hdev
, skb
);
3706 case HCI_EV_CONN_COMPLETE
:
3707 hci_conn_complete_evt(hdev
, skb
);
3710 case HCI_EV_CONN_REQUEST
:
3711 hci_conn_request_evt(hdev
, skb
);
3714 case HCI_EV_DISCONN_COMPLETE
:
3715 hci_disconn_complete_evt(hdev
, skb
);
3718 case HCI_EV_AUTH_COMPLETE
:
3719 hci_auth_complete_evt(hdev
, skb
);
3722 case HCI_EV_REMOTE_NAME
:
3723 hci_remote_name_evt(hdev
, skb
);
3726 case HCI_EV_ENCRYPT_CHANGE
:
3727 hci_encrypt_change_evt(hdev
, skb
);
3730 case HCI_EV_CHANGE_LINK_KEY_COMPLETE
:
3731 hci_change_link_key_complete_evt(hdev
, skb
);
3734 case HCI_EV_REMOTE_FEATURES
:
3735 hci_remote_features_evt(hdev
, skb
);
3738 case HCI_EV_CMD_COMPLETE
:
3739 hci_cmd_complete_evt(hdev
, skb
);
3742 case HCI_EV_CMD_STATUS
:
3743 hci_cmd_status_evt(hdev
, skb
);
3746 case HCI_EV_ROLE_CHANGE
:
3747 hci_role_change_evt(hdev
, skb
);
3750 case HCI_EV_NUM_COMP_PKTS
:
3751 hci_num_comp_pkts_evt(hdev
, skb
);
3754 case HCI_EV_MODE_CHANGE
:
3755 hci_mode_change_evt(hdev
, skb
);
3758 case HCI_EV_PIN_CODE_REQ
:
3759 hci_pin_code_request_evt(hdev
, skb
);
3762 case HCI_EV_LINK_KEY_REQ
:
3763 hci_link_key_request_evt(hdev
, skb
);
3766 case HCI_EV_LINK_KEY_NOTIFY
:
3767 hci_link_key_notify_evt(hdev
, skb
);
3770 case HCI_EV_CLOCK_OFFSET
:
3771 hci_clock_offset_evt(hdev
, skb
);
3774 case HCI_EV_PKT_TYPE_CHANGE
:
3775 hci_pkt_type_change_evt(hdev
, skb
);
3778 case HCI_EV_PSCAN_REP_MODE
:
3779 hci_pscan_rep_mode_evt(hdev
, skb
);
3782 case HCI_EV_INQUIRY_RESULT_WITH_RSSI
:
3783 hci_inquiry_result_with_rssi_evt(hdev
, skb
);
3786 case HCI_EV_REMOTE_EXT_FEATURES
:
3787 hci_remote_ext_features_evt(hdev
, skb
);
3790 case HCI_EV_SYNC_CONN_COMPLETE
:
3791 hci_sync_conn_complete_evt(hdev
, skb
);
3794 case HCI_EV_EXTENDED_INQUIRY_RESULT
:
3795 hci_extended_inquiry_result_evt(hdev
, skb
);
3798 case HCI_EV_KEY_REFRESH_COMPLETE
:
3799 hci_key_refresh_complete_evt(hdev
, skb
);
3802 case HCI_EV_IO_CAPA_REQUEST
:
3803 hci_io_capa_request_evt(hdev
, skb
);
3806 case HCI_EV_IO_CAPA_REPLY
:
3807 hci_io_capa_reply_evt(hdev
, skb
);
3810 case HCI_EV_USER_CONFIRM_REQUEST
:
3811 hci_user_confirm_request_evt(hdev
, skb
);
3814 case HCI_EV_USER_PASSKEY_REQUEST
:
3815 hci_user_passkey_request_evt(hdev
, skb
);
3818 case HCI_EV_USER_PASSKEY_NOTIFY
:
3819 hci_user_passkey_notify_evt(hdev
, skb
);
3822 case HCI_EV_KEYPRESS_NOTIFY
:
3823 hci_keypress_notify_evt(hdev
, skb
);
3826 case HCI_EV_SIMPLE_PAIR_COMPLETE
:
3827 hci_simple_pair_complete_evt(hdev
, skb
);
3830 case HCI_EV_REMOTE_HOST_FEATURES
:
3831 hci_remote_host_features_evt(hdev
, skb
);
3834 case HCI_EV_LE_META
:
3835 hci_le_meta_evt(hdev
, skb
);
3838 case HCI_EV_CHANNEL_SELECTED
:
3839 hci_chan_selected_evt(hdev
, skb
);
3842 case HCI_EV_REMOTE_OOB_DATA_REQUEST
:
3843 hci_remote_oob_data_request_evt(hdev
, skb
);
3846 case HCI_EV_PHY_LINK_COMPLETE
:
3847 hci_phy_link_complete_evt(hdev
, skb
);
3850 case HCI_EV_LOGICAL_LINK_COMPLETE
:
3851 hci_loglink_complete_evt(hdev
, skb
);
3854 case HCI_EV_DISCONN_LOGICAL_LINK_COMPLETE
:
3855 hci_disconn_loglink_complete_evt(hdev
, skb
);
3858 case HCI_EV_DISCONN_PHY_LINK_COMPLETE
:
3859 hci_disconn_phylink_complete_evt(hdev
, skb
);
3862 case HCI_EV_NUM_COMP_BLOCKS
:
3863 hci_num_comp_blocks_evt(hdev
, skb
);
3867 BT_DBG("%s event 0x%2.2x", hdev
->name
, event
);
3872 hdev
->stat
.evt_rx
++;