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 <linux/module.h>
29 #include <linux/types.h>
30 #include <linux/errno.h>
31 #include <linux/kernel.h>
32 #include <linux/slab.h>
33 #include <linux/poll.h>
34 #include <linux/fcntl.h>
35 #include <linux/init.h>
36 #include <linux/skbuff.h>
37 #include <linux/interrupt.h>
38 #include <linux/notifier.h>
41 #include <asm/system.h>
42 #include <linux/uaccess.h>
43 #include <asm/unaligned.h>
45 #include <net/bluetooth/bluetooth.h>
46 #include <net/bluetooth/hci_core.h>
48 /* Handle HCI Event packets */
50 static void hci_cc_inquiry_cancel(struct hci_dev
*hdev
, struct sk_buff
*skb
)
52 __u8 status
= *((__u8
*) skb
->data
);
54 BT_DBG("%s status 0x%x", hdev
->name
, status
);
59 clear_bit(HCI_INQUIRY
, &hdev
->flags
);
61 hci_req_complete(hdev
, HCI_OP_INQUIRY_CANCEL
, status
);
63 hci_conn_check_pending(hdev
);
66 static void hci_cc_exit_periodic_inq(struct hci_dev
*hdev
, struct sk_buff
*skb
)
68 __u8 status
= *((__u8
*) skb
->data
);
70 BT_DBG("%s status 0x%x", hdev
->name
, status
);
75 clear_bit(HCI_INQUIRY
, &hdev
->flags
);
77 hci_conn_check_pending(hdev
);
80 static void hci_cc_remote_name_req_cancel(struct hci_dev
*hdev
, struct sk_buff
*skb
)
82 BT_DBG("%s", hdev
->name
);
85 static void hci_cc_role_discovery(struct hci_dev
*hdev
, struct sk_buff
*skb
)
87 struct hci_rp_role_discovery
*rp
= (void *) skb
->data
;
88 struct hci_conn
*conn
;
90 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
97 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(rp
->handle
));
100 conn
->link_mode
&= ~HCI_LM_MASTER
;
102 conn
->link_mode
|= HCI_LM_MASTER
;
105 hci_dev_unlock(hdev
);
108 static void hci_cc_read_link_policy(struct hci_dev
*hdev
, struct sk_buff
*skb
)
110 struct hci_rp_read_link_policy
*rp
= (void *) skb
->data
;
111 struct hci_conn
*conn
;
113 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
120 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(rp
->handle
));
122 conn
->link_policy
= __le16_to_cpu(rp
->policy
);
124 hci_dev_unlock(hdev
);
127 static void hci_cc_write_link_policy(struct hci_dev
*hdev
, struct sk_buff
*skb
)
129 struct hci_rp_write_link_policy
*rp
= (void *) skb
->data
;
130 struct hci_conn
*conn
;
133 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
138 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_LINK_POLICY
);
144 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(rp
->handle
));
146 conn
->link_policy
= get_unaligned_le16(sent
+ 2);
148 hci_dev_unlock(hdev
);
151 static void hci_cc_read_def_link_policy(struct hci_dev
*hdev
, struct sk_buff
*skb
)
153 struct hci_rp_read_def_link_policy
*rp
= (void *) skb
->data
;
155 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
160 hdev
->link_policy
= __le16_to_cpu(rp
->policy
);
163 static void hci_cc_write_def_link_policy(struct hci_dev
*hdev
, struct sk_buff
*skb
)
165 __u8 status
= *((__u8
*) skb
->data
);
168 BT_DBG("%s status 0x%x", hdev
->name
, status
);
170 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_DEF_LINK_POLICY
);
175 hdev
->link_policy
= get_unaligned_le16(sent
);
177 hci_req_complete(hdev
, HCI_OP_WRITE_DEF_LINK_POLICY
, status
);
180 static void hci_cc_reset(struct hci_dev
*hdev
, struct sk_buff
*skb
)
182 __u8 status
= *((__u8
*) skb
->data
);
184 BT_DBG("%s status 0x%x", hdev
->name
, status
);
186 hci_req_complete(hdev
, HCI_OP_RESET
, status
);
189 static void hci_cc_write_local_name(struct hci_dev
*hdev
, struct sk_buff
*skb
)
191 __u8 status
= *((__u8
*) skb
->data
);
194 BT_DBG("%s status 0x%x", hdev
->name
, status
);
199 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_LOCAL_NAME
);
203 memcpy(hdev
->dev_name
, sent
, 248);
206 static void hci_cc_read_local_name(struct hci_dev
*hdev
, struct sk_buff
*skb
)
208 struct hci_rp_read_local_name
*rp
= (void *) skb
->data
;
210 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
215 memcpy(hdev
->dev_name
, rp
->name
, 248);
218 static void hci_cc_write_auth_enable(struct hci_dev
*hdev
, struct sk_buff
*skb
)
220 __u8 status
= *((__u8
*) skb
->data
);
223 BT_DBG("%s status 0x%x", hdev
->name
, status
);
225 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_AUTH_ENABLE
);
230 __u8 param
= *((__u8
*) sent
);
232 if (param
== AUTH_ENABLED
)
233 set_bit(HCI_AUTH
, &hdev
->flags
);
235 clear_bit(HCI_AUTH
, &hdev
->flags
);
238 hci_req_complete(hdev
, HCI_OP_WRITE_AUTH_ENABLE
, status
);
241 static void hci_cc_write_encrypt_mode(struct hci_dev
*hdev
, struct sk_buff
*skb
)
243 __u8 status
= *((__u8
*) skb
->data
);
246 BT_DBG("%s status 0x%x", hdev
->name
, status
);
248 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_ENCRYPT_MODE
);
253 __u8 param
= *((__u8
*) sent
);
256 set_bit(HCI_ENCRYPT
, &hdev
->flags
);
258 clear_bit(HCI_ENCRYPT
, &hdev
->flags
);
261 hci_req_complete(hdev
, HCI_OP_WRITE_ENCRYPT_MODE
, status
);
264 static void hci_cc_write_scan_enable(struct hci_dev
*hdev
, struct sk_buff
*skb
)
266 __u8 status
= *((__u8
*) skb
->data
);
269 BT_DBG("%s status 0x%x", hdev
->name
, status
);
271 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_SCAN_ENABLE
);
276 __u8 param
= *((__u8
*) sent
);
278 clear_bit(HCI_PSCAN
, &hdev
->flags
);
279 clear_bit(HCI_ISCAN
, &hdev
->flags
);
281 if (param
& SCAN_INQUIRY
)
282 set_bit(HCI_ISCAN
, &hdev
->flags
);
284 if (param
& SCAN_PAGE
)
285 set_bit(HCI_PSCAN
, &hdev
->flags
);
288 hci_req_complete(hdev
, HCI_OP_WRITE_SCAN_ENABLE
, status
);
291 static void hci_cc_read_class_of_dev(struct hci_dev
*hdev
, struct sk_buff
*skb
)
293 struct hci_rp_read_class_of_dev
*rp
= (void *) skb
->data
;
295 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
300 memcpy(hdev
->dev_class
, rp
->dev_class
, 3);
302 BT_DBG("%s class 0x%.2x%.2x%.2x", hdev
->name
,
303 hdev
->dev_class
[2], hdev
->dev_class
[1], hdev
->dev_class
[0]);
306 static void hci_cc_write_class_of_dev(struct hci_dev
*hdev
, struct sk_buff
*skb
)
308 __u8 status
= *((__u8
*) skb
->data
);
311 BT_DBG("%s status 0x%x", hdev
->name
, status
);
316 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_CLASS_OF_DEV
);
320 memcpy(hdev
->dev_class
, sent
, 3);
323 static void hci_cc_read_voice_setting(struct hci_dev
*hdev
, struct sk_buff
*skb
)
325 struct hci_rp_read_voice_setting
*rp
= (void *) skb
->data
;
328 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
333 setting
= __le16_to_cpu(rp
->voice_setting
);
335 if (hdev
->voice_setting
== setting
)
338 hdev
->voice_setting
= setting
;
340 BT_DBG("%s voice setting 0x%04x", hdev
->name
, setting
);
343 tasklet_disable(&hdev
->tx_task
);
344 hdev
->notify(hdev
, HCI_NOTIFY_VOICE_SETTING
);
345 tasklet_enable(&hdev
->tx_task
);
349 static void hci_cc_write_voice_setting(struct hci_dev
*hdev
, struct sk_buff
*skb
)
351 __u8 status
= *((__u8
*) skb
->data
);
355 BT_DBG("%s status 0x%x", hdev
->name
, status
);
360 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_VOICE_SETTING
);
364 setting
= get_unaligned_le16(sent
);
366 if (hdev
->voice_setting
== setting
)
369 hdev
->voice_setting
= setting
;
371 BT_DBG("%s voice setting 0x%04x", hdev
->name
, setting
);
374 tasklet_disable(&hdev
->tx_task
);
375 hdev
->notify(hdev
, HCI_NOTIFY_VOICE_SETTING
);
376 tasklet_enable(&hdev
->tx_task
);
380 static void hci_cc_host_buffer_size(struct hci_dev
*hdev
, struct sk_buff
*skb
)
382 __u8 status
= *((__u8
*) skb
->data
);
384 BT_DBG("%s status 0x%x", hdev
->name
, status
);
386 hci_req_complete(hdev
, HCI_OP_HOST_BUFFER_SIZE
, status
);
389 static void hci_cc_read_ssp_mode(struct hci_dev
*hdev
, struct sk_buff
*skb
)
391 struct hci_rp_read_ssp_mode
*rp
= (void *) skb
->data
;
393 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
398 hdev
->ssp_mode
= rp
->mode
;
401 static void hci_cc_write_ssp_mode(struct hci_dev
*hdev
, struct sk_buff
*skb
)
403 __u8 status
= *((__u8
*) skb
->data
);
406 BT_DBG("%s status 0x%x", hdev
->name
, status
);
411 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_SSP_MODE
);
415 hdev
->ssp_mode
= *((__u8
*) sent
);
418 static void hci_cc_read_local_version(struct hci_dev
*hdev
, struct sk_buff
*skb
)
420 struct hci_rp_read_local_version
*rp
= (void *) skb
->data
;
422 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
427 hdev
->hci_ver
= rp
->hci_ver
;
428 hdev
->hci_rev
= __le16_to_cpu(rp
->hci_rev
);
429 hdev
->manufacturer
= __le16_to_cpu(rp
->manufacturer
);
431 BT_DBG("%s manufacturer %d hci ver %d:%d", hdev
->name
,
433 hdev
->hci_ver
, hdev
->hci_rev
);
436 static void hci_cc_read_local_commands(struct hci_dev
*hdev
, struct sk_buff
*skb
)
438 struct hci_rp_read_local_commands
*rp
= (void *) skb
->data
;
440 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
445 memcpy(hdev
->commands
, rp
->commands
, sizeof(hdev
->commands
));
448 static void hci_cc_read_local_features(struct hci_dev
*hdev
, struct sk_buff
*skb
)
450 struct hci_rp_read_local_features
*rp
= (void *) skb
->data
;
452 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
457 memcpy(hdev
->features
, rp
->features
, 8);
459 /* Adjust default settings according to features
460 * supported by device. */
462 if (hdev
->features
[0] & LMP_3SLOT
)
463 hdev
->pkt_type
|= (HCI_DM3
| HCI_DH3
);
465 if (hdev
->features
[0] & LMP_5SLOT
)
466 hdev
->pkt_type
|= (HCI_DM5
| HCI_DH5
);
468 if (hdev
->features
[1] & LMP_HV2
) {
469 hdev
->pkt_type
|= (HCI_HV2
);
470 hdev
->esco_type
|= (ESCO_HV2
);
473 if (hdev
->features
[1] & LMP_HV3
) {
474 hdev
->pkt_type
|= (HCI_HV3
);
475 hdev
->esco_type
|= (ESCO_HV3
);
478 if (hdev
->features
[3] & LMP_ESCO
)
479 hdev
->esco_type
|= (ESCO_EV3
);
481 if (hdev
->features
[4] & LMP_EV4
)
482 hdev
->esco_type
|= (ESCO_EV4
);
484 if (hdev
->features
[4] & LMP_EV5
)
485 hdev
->esco_type
|= (ESCO_EV5
);
487 if (hdev
->features
[5] & LMP_EDR_ESCO_2M
)
488 hdev
->esco_type
|= (ESCO_2EV3
);
490 if (hdev
->features
[5] & LMP_EDR_ESCO_3M
)
491 hdev
->esco_type
|= (ESCO_3EV3
);
493 if (hdev
->features
[5] & LMP_EDR_3S_ESCO
)
494 hdev
->esco_type
|= (ESCO_2EV5
| ESCO_3EV5
);
496 BT_DBG("%s features 0x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x", hdev
->name
,
497 hdev
->features
[0], hdev
->features
[1],
498 hdev
->features
[2], hdev
->features
[3],
499 hdev
->features
[4], hdev
->features
[5],
500 hdev
->features
[6], hdev
->features
[7]);
503 static void hci_cc_read_buffer_size(struct hci_dev
*hdev
, struct sk_buff
*skb
)
505 struct hci_rp_read_buffer_size
*rp
= (void *) skb
->data
;
507 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
512 hdev
->acl_mtu
= __le16_to_cpu(rp
->acl_mtu
);
513 hdev
->sco_mtu
= rp
->sco_mtu
;
514 hdev
->acl_pkts
= __le16_to_cpu(rp
->acl_max_pkt
);
515 hdev
->sco_pkts
= __le16_to_cpu(rp
->sco_max_pkt
);
517 if (test_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE
, &hdev
->quirks
)) {
522 hdev
->acl_cnt
= hdev
->acl_pkts
;
523 hdev
->sco_cnt
= hdev
->sco_pkts
;
525 BT_DBG("%s acl mtu %d:%d sco mtu %d:%d", hdev
->name
,
526 hdev
->acl_mtu
, hdev
->acl_pkts
,
527 hdev
->sco_mtu
, hdev
->sco_pkts
);
530 static void hci_cc_read_bd_addr(struct hci_dev
*hdev
, struct sk_buff
*skb
)
532 struct hci_rp_read_bd_addr
*rp
= (void *) skb
->data
;
534 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
537 bacpy(&hdev
->bdaddr
, &rp
->bdaddr
);
539 hci_req_complete(hdev
, HCI_OP_READ_BD_ADDR
, rp
->status
);
542 static void hci_cc_write_ca_timeout(struct hci_dev
*hdev
, struct sk_buff
*skb
)
544 __u8 status
= *((__u8
*) skb
->data
);
546 BT_DBG("%s status 0x%x", hdev
->name
, status
);
548 hci_req_complete(hdev
, HCI_OP_WRITE_CA_TIMEOUT
, status
);
551 static inline void hci_cs_inquiry(struct hci_dev
*hdev
, __u8 status
)
553 BT_DBG("%s status 0x%x", hdev
->name
, status
);
556 hci_req_complete(hdev
, HCI_OP_INQUIRY
, status
);
558 hci_conn_check_pending(hdev
);
560 set_bit(HCI_INQUIRY
, &hdev
->flags
);
563 static inline void hci_cs_create_conn(struct hci_dev
*hdev
, __u8 status
)
565 struct hci_cp_create_conn
*cp
;
566 struct hci_conn
*conn
;
568 BT_DBG("%s status 0x%x", hdev
->name
, status
);
570 cp
= hci_sent_cmd_data(hdev
, HCI_OP_CREATE_CONN
);
576 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &cp
->bdaddr
);
578 BT_DBG("%s bdaddr %s conn %p", hdev
->name
, batostr(&cp
->bdaddr
), conn
);
581 if (conn
&& conn
->state
== BT_CONNECT
) {
582 if (status
!= 0x0c || conn
->attempt
> 2) {
583 conn
->state
= BT_CLOSED
;
584 hci_proto_connect_cfm(conn
, status
);
587 conn
->state
= BT_CONNECT2
;
591 conn
= hci_conn_add(hdev
, ACL_LINK
, &cp
->bdaddr
);
594 conn
->link_mode
|= HCI_LM_MASTER
;
596 BT_ERR("No memory for new connection");
600 hci_dev_unlock(hdev
);
603 static void hci_cs_add_sco(struct hci_dev
*hdev
, __u8 status
)
605 struct hci_cp_add_sco
*cp
;
606 struct hci_conn
*acl
, *sco
;
609 BT_DBG("%s status 0x%x", hdev
->name
, status
);
614 cp
= hci_sent_cmd_data(hdev
, HCI_OP_ADD_SCO
);
618 handle
= __le16_to_cpu(cp
->handle
);
620 BT_DBG("%s handle %d", hdev
->name
, handle
);
624 acl
= hci_conn_hash_lookup_handle(hdev
, handle
);
625 if (acl
&& (sco
= acl
->link
)) {
626 sco
->state
= BT_CLOSED
;
628 hci_proto_connect_cfm(sco
, status
);
632 hci_dev_unlock(hdev
);
635 static void hci_cs_auth_requested(struct hci_dev
*hdev
, __u8 status
)
637 struct hci_cp_auth_requested
*cp
;
638 struct hci_conn
*conn
;
640 BT_DBG("%s status 0x%x", hdev
->name
, status
);
645 cp
= hci_sent_cmd_data(hdev
, HCI_OP_AUTH_REQUESTED
);
651 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
653 if (conn
->state
== BT_CONFIG
) {
654 hci_proto_connect_cfm(conn
, status
);
659 hci_dev_unlock(hdev
);
662 static void hci_cs_set_conn_encrypt(struct hci_dev
*hdev
, __u8 status
)
664 struct hci_cp_set_conn_encrypt
*cp
;
665 struct hci_conn
*conn
;
667 BT_DBG("%s status 0x%x", hdev
->name
, status
);
672 cp
= hci_sent_cmd_data(hdev
, HCI_OP_SET_CONN_ENCRYPT
);
678 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
680 if (conn
->state
== BT_CONFIG
) {
681 hci_proto_connect_cfm(conn
, status
);
686 hci_dev_unlock(hdev
);
689 static int hci_outgoing_auth_needed(struct hci_dev
*hdev
,
690 struct hci_conn
*conn
)
692 if (conn
->state
!= BT_CONFIG
|| !conn
->out
)
695 if (conn
->sec_level
== BT_SECURITY_SDP
)
698 /* Only request authentication for SSP connections or non-SSP
699 * devices with sec_level HIGH */
700 if (!(hdev
->ssp_mode
> 0 && conn
->ssp_mode
> 0) &&
701 conn
->sec_level
!= BT_SECURITY_HIGH
)
707 static void hci_cs_remote_name_req(struct hci_dev
*hdev
, __u8 status
)
709 struct hci_cp_remote_name_req
*cp
;
710 struct hci_conn
*conn
;
712 BT_DBG("%s status 0x%x", hdev
->name
, status
);
714 /* If successful wait for the name req complete event before
715 * checking for the need to do authentication */
719 cp
= hci_sent_cmd_data(hdev
, HCI_OP_REMOTE_NAME_REQ
);
725 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &cp
->bdaddr
);
726 if (conn
&& hci_outgoing_auth_needed(hdev
, conn
)) {
727 struct hci_cp_auth_requested cp
;
728 cp
.handle
= __cpu_to_le16(conn
->handle
);
729 hci_send_cmd(hdev
, HCI_OP_AUTH_REQUESTED
, sizeof(cp
), &cp
);
732 hci_dev_unlock(hdev
);
735 static void hci_cs_read_remote_features(struct hci_dev
*hdev
, __u8 status
)
737 struct hci_cp_read_remote_features
*cp
;
738 struct hci_conn
*conn
;
740 BT_DBG("%s status 0x%x", hdev
->name
, status
);
745 cp
= hci_sent_cmd_data(hdev
, HCI_OP_READ_REMOTE_FEATURES
);
751 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
753 if (conn
->state
== BT_CONFIG
) {
754 hci_proto_connect_cfm(conn
, status
);
759 hci_dev_unlock(hdev
);
762 static void hci_cs_read_remote_ext_features(struct hci_dev
*hdev
, __u8 status
)
764 struct hci_cp_read_remote_ext_features
*cp
;
765 struct hci_conn
*conn
;
767 BT_DBG("%s status 0x%x", hdev
->name
, status
);
772 cp
= hci_sent_cmd_data(hdev
, HCI_OP_READ_REMOTE_EXT_FEATURES
);
778 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
780 if (conn
->state
== BT_CONFIG
) {
781 hci_proto_connect_cfm(conn
, status
);
786 hci_dev_unlock(hdev
);
789 static void hci_cs_setup_sync_conn(struct hci_dev
*hdev
, __u8 status
)
791 struct hci_cp_setup_sync_conn
*cp
;
792 struct hci_conn
*acl
, *sco
;
795 BT_DBG("%s status 0x%x", hdev
->name
, status
);
800 cp
= hci_sent_cmd_data(hdev
, HCI_OP_SETUP_SYNC_CONN
);
804 handle
= __le16_to_cpu(cp
->handle
);
806 BT_DBG("%s handle %d", hdev
->name
, handle
);
810 acl
= hci_conn_hash_lookup_handle(hdev
, handle
);
811 if (acl
&& (sco
= acl
->link
)) {
812 sco
->state
= BT_CLOSED
;
814 hci_proto_connect_cfm(sco
, status
);
818 hci_dev_unlock(hdev
);
821 static void hci_cs_sniff_mode(struct hci_dev
*hdev
, __u8 status
)
823 struct hci_cp_sniff_mode
*cp
;
824 struct hci_conn
*conn
;
826 BT_DBG("%s status 0x%x", hdev
->name
, status
);
831 cp
= hci_sent_cmd_data(hdev
, HCI_OP_SNIFF_MODE
);
837 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
839 clear_bit(HCI_CONN_MODE_CHANGE_PEND
, &conn
->pend
);
841 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND
, &conn
->pend
))
842 hci_sco_setup(conn
, status
);
845 hci_dev_unlock(hdev
);
848 static void hci_cs_exit_sniff_mode(struct hci_dev
*hdev
, __u8 status
)
850 struct hci_cp_exit_sniff_mode
*cp
;
851 struct hci_conn
*conn
;
853 BT_DBG("%s status 0x%x", hdev
->name
, status
);
858 cp
= hci_sent_cmd_data(hdev
, HCI_OP_EXIT_SNIFF_MODE
);
864 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
866 clear_bit(HCI_CONN_MODE_CHANGE_PEND
, &conn
->pend
);
868 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND
, &conn
->pend
))
869 hci_sco_setup(conn
, status
);
872 hci_dev_unlock(hdev
);
875 static inline void hci_inquiry_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
877 __u8 status
= *((__u8
*) skb
->data
);
879 BT_DBG("%s status %d", hdev
->name
, status
);
881 clear_bit(HCI_INQUIRY
, &hdev
->flags
);
883 hci_req_complete(hdev
, HCI_OP_INQUIRY
, status
);
885 hci_conn_check_pending(hdev
);
888 static inline void hci_inquiry_result_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
890 struct inquiry_data data
;
891 struct inquiry_info
*info
= (void *) (skb
->data
+ 1);
892 int num_rsp
= *((__u8
*) skb
->data
);
894 BT_DBG("%s num_rsp %d", hdev
->name
, num_rsp
);
901 for (; num_rsp
; num_rsp
--) {
902 bacpy(&data
.bdaddr
, &info
->bdaddr
);
903 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
904 data
.pscan_period_mode
= info
->pscan_period_mode
;
905 data
.pscan_mode
= info
->pscan_mode
;
906 memcpy(data
.dev_class
, info
->dev_class
, 3);
907 data
.clock_offset
= info
->clock_offset
;
909 data
.ssp_mode
= 0x00;
911 hci_inquiry_cache_update(hdev
, &data
);
914 hci_dev_unlock(hdev
);
917 static inline void hci_conn_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
919 struct hci_ev_conn_complete
*ev
= (void *) skb
->data
;
920 struct hci_conn
*conn
;
922 BT_DBG("%s", hdev
->name
);
926 conn
= hci_conn_hash_lookup_ba(hdev
, ev
->link_type
, &ev
->bdaddr
);
928 if (ev
->link_type
!= SCO_LINK
)
931 conn
= hci_conn_hash_lookup_ba(hdev
, ESCO_LINK
, &ev
->bdaddr
);
935 conn
->type
= SCO_LINK
;
939 conn
->handle
= __le16_to_cpu(ev
->handle
);
941 if (conn
->type
== ACL_LINK
) {
942 conn
->state
= BT_CONFIG
;
944 conn
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
946 conn
->state
= BT_CONNECTED
;
948 hci_conn_hold_device(conn
);
949 hci_conn_add_sysfs(conn
);
951 if (test_bit(HCI_AUTH
, &hdev
->flags
))
952 conn
->link_mode
|= HCI_LM_AUTH
;
954 if (test_bit(HCI_ENCRYPT
, &hdev
->flags
))
955 conn
->link_mode
|= HCI_LM_ENCRYPT
;
957 /* Get remote features */
958 if (conn
->type
== ACL_LINK
) {
959 struct hci_cp_read_remote_features cp
;
960 cp
.handle
= ev
->handle
;
961 hci_send_cmd(hdev
, HCI_OP_READ_REMOTE_FEATURES
,
965 /* Set packet type for incoming connection */
966 if (!conn
->out
&& hdev
->hci_ver
< 3) {
967 struct hci_cp_change_conn_ptype cp
;
968 cp
.handle
= ev
->handle
;
969 cp
.pkt_type
= cpu_to_le16(conn
->pkt_type
);
970 hci_send_cmd(hdev
, HCI_OP_CHANGE_CONN_PTYPE
,
974 conn
->state
= BT_CLOSED
;
976 if (conn
->type
== ACL_LINK
)
977 hci_sco_setup(conn
, ev
->status
);
980 hci_proto_connect_cfm(conn
, ev
->status
);
982 } else if (ev
->link_type
!= ACL_LINK
)
983 hci_proto_connect_cfm(conn
, ev
->status
);
986 hci_dev_unlock(hdev
);
988 hci_conn_check_pending(hdev
);
991 static inline void hci_conn_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
993 struct hci_ev_conn_request
*ev
= (void *) skb
->data
;
994 int mask
= hdev
->link_mode
;
996 BT_DBG("%s bdaddr %s type 0x%x", hdev
->name
,
997 batostr(&ev
->bdaddr
), ev
->link_type
);
999 mask
|= hci_proto_connect_ind(hdev
, &ev
->bdaddr
, ev
->link_type
);
1001 if ((mask
& HCI_LM_ACCEPT
) && !hci_blacklist_lookup(hdev
, &ev
->bdaddr
)) {
1002 /* Connection accepted */
1003 struct inquiry_entry
*ie
;
1004 struct hci_conn
*conn
;
1008 ie
= hci_inquiry_cache_lookup(hdev
, &ev
->bdaddr
);
1010 memcpy(ie
->data
.dev_class
, ev
->dev_class
, 3);
1012 conn
= hci_conn_hash_lookup_ba(hdev
, ev
->link_type
, &ev
->bdaddr
);
1014 conn
= hci_conn_add(hdev
, ev
->link_type
, &ev
->bdaddr
);
1016 BT_ERR("No memory for new connection");
1017 hci_dev_unlock(hdev
);
1022 memcpy(conn
->dev_class
, ev
->dev_class
, 3);
1023 conn
->state
= BT_CONNECT
;
1025 hci_dev_unlock(hdev
);
1027 if (ev
->link_type
== ACL_LINK
|| !lmp_esco_capable(hdev
)) {
1028 struct hci_cp_accept_conn_req cp
;
1030 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
1032 if (lmp_rswitch_capable(hdev
) && (mask
& HCI_LM_MASTER
))
1033 cp
.role
= 0x00; /* Become master */
1035 cp
.role
= 0x01; /* Remain slave */
1037 hci_send_cmd(hdev
, HCI_OP_ACCEPT_CONN_REQ
,
1040 struct hci_cp_accept_sync_conn_req cp
;
1042 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
1043 cp
.pkt_type
= cpu_to_le16(conn
->pkt_type
);
1045 cp
.tx_bandwidth
= cpu_to_le32(0x00001f40);
1046 cp
.rx_bandwidth
= cpu_to_le32(0x00001f40);
1047 cp
.max_latency
= cpu_to_le16(0xffff);
1048 cp
.content_format
= cpu_to_le16(hdev
->voice_setting
);
1049 cp
.retrans_effort
= 0xff;
1051 hci_send_cmd(hdev
, HCI_OP_ACCEPT_SYNC_CONN_REQ
,
1055 /* Connection rejected */
1056 struct hci_cp_reject_conn_req cp
;
1058 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
1060 hci_send_cmd(hdev
, HCI_OP_REJECT_CONN_REQ
, sizeof(cp
), &cp
);
1064 static inline void hci_disconn_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1066 struct hci_ev_disconn_complete
*ev
= (void *) skb
->data
;
1067 struct hci_conn
*conn
;
1069 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
1076 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1078 conn
->state
= BT_CLOSED
;
1080 hci_proto_disconn_cfm(conn
, ev
->reason
);
1084 hci_dev_unlock(hdev
);
1087 static inline void hci_auth_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1089 struct hci_ev_auth_complete
*ev
= (void *) skb
->data
;
1090 struct hci_conn
*conn
;
1092 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
1096 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1099 conn
->link_mode
|= HCI_LM_AUTH
;
1101 conn
->sec_level
= BT_SECURITY_LOW
;
1103 clear_bit(HCI_CONN_AUTH_PEND
, &conn
->pend
);
1105 if (conn
->state
== BT_CONFIG
) {
1106 if (!ev
->status
&& hdev
->ssp_mode
> 0 &&
1107 conn
->ssp_mode
> 0) {
1108 struct hci_cp_set_conn_encrypt cp
;
1109 cp
.handle
= ev
->handle
;
1111 hci_send_cmd(hdev
, HCI_OP_SET_CONN_ENCRYPT
,
1114 conn
->state
= BT_CONNECTED
;
1115 hci_proto_connect_cfm(conn
, ev
->status
);
1119 hci_auth_cfm(conn
, ev
->status
);
1121 hci_conn_hold(conn
);
1122 conn
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
1126 if (test_bit(HCI_CONN_ENCRYPT_PEND
, &conn
->pend
)) {
1128 struct hci_cp_set_conn_encrypt cp
;
1129 cp
.handle
= ev
->handle
;
1131 hci_send_cmd(hdev
, HCI_OP_SET_CONN_ENCRYPT
,
1134 clear_bit(HCI_CONN_ENCRYPT_PEND
, &conn
->pend
);
1135 hci_encrypt_cfm(conn
, ev
->status
, 0x00);
1140 hci_dev_unlock(hdev
);
1143 static inline void hci_remote_name_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1145 struct hci_ev_remote_name
*ev
= (void *) skb
->data
;
1146 struct hci_conn
*conn
;
1148 BT_DBG("%s", hdev
->name
);
1150 hci_conn_check_pending(hdev
);
1154 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
1155 if (conn
&& hci_outgoing_auth_needed(hdev
, conn
)) {
1156 struct hci_cp_auth_requested cp
;
1157 cp
.handle
= __cpu_to_le16(conn
->handle
);
1158 hci_send_cmd(hdev
, HCI_OP_AUTH_REQUESTED
, sizeof(cp
), &cp
);
1161 hci_dev_unlock(hdev
);
1164 static inline void hci_encrypt_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1166 struct hci_ev_encrypt_change
*ev
= (void *) skb
->data
;
1167 struct hci_conn
*conn
;
1169 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
1173 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1177 /* Encryption implies authentication */
1178 conn
->link_mode
|= HCI_LM_AUTH
;
1179 conn
->link_mode
|= HCI_LM_ENCRYPT
;
1181 conn
->link_mode
&= ~HCI_LM_ENCRYPT
;
1184 clear_bit(HCI_CONN_ENCRYPT_PEND
, &conn
->pend
);
1186 if (conn
->state
== BT_CONFIG
) {
1188 conn
->state
= BT_CONNECTED
;
1190 hci_proto_connect_cfm(conn
, ev
->status
);
1193 hci_encrypt_cfm(conn
, ev
->status
, ev
->encrypt
);
1196 hci_dev_unlock(hdev
);
1199 static inline void hci_change_link_key_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1201 struct hci_ev_change_link_key_complete
*ev
= (void *) skb
->data
;
1202 struct hci_conn
*conn
;
1204 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
1208 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1211 conn
->link_mode
|= HCI_LM_SECURE
;
1213 clear_bit(HCI_CONN_AUTH_PEND
, &conn
->pend
);
1215 hci_key_change_cfm(conn
, ev
->status
);
1218 hci_dev_unlock(hdev
);
1221 static inline void hci_remote_features_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1223 struct hci_ev_remote_features
*ev
= (void *) skb
->data
;
1224 struct hci_conn
*conn
;
1226 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
1230 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1235 memcpy(conn
->features
, ev
->features
, 8);
1237 if (conn
->state
!= BT_CONFIG
)
1240 if (!ev
->status
&& lmp_ssp_capable(hdev
) && lmp_ssp_capable(conn
)) {
1241 struct hci_cp_read_remote_ext_features cp
;
1242 cp
.handle
= ev
->handle
;
1244 hci_send_cmd(hdev
, HCI_OP_READ_REMOTE_EXT_FEATURES
,
1250 struct hci_cp_remote_name_req cp
;
1251 memset(&cp
, 0, sizeof(cp
));
1252 bacpy(&cp
.bdaddr
, &conn
->dst
);
1253 cp
.pscan_rep_mode
= 0x02;
1254 hci_send_cmd(hdev
, HCI_OP_REMOTE_NAME_REQ
, sizeof(cp
), &cp
);
1257 if (!hci_outgoing_auth_needed(hdev
, conn
)) {
1258 conn
->state
= BT_CONNECTED
;
1259 hci_proto_connect_cfm(conn
, ev
->status
);
1264 hci_dev_unlock(hdev
);
1267 static inline void hci_remote_version_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1269 BT_DBG("%s", hdev
->name
);
1272 static inline void hci_qos_setup_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1274 BT_DBG("%s", hdev
->name
);
1277 static inline void hci_cmd_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1279 struct hci_ev_cmd_complete
*ev
= (void *) skb
->data
;
1282 skb_pull(skb
, sizeof(*ev
));
1284 opcode
= __le16_to_cpu(ev
->opcode
);
1287 case HCI_OP_INQUIRY_CANCEL
:
1288 hci_cc_inquiry_cancel(hdev
, skb
);
1291 case HCI_OP_EXIT_PERIODIC_INQ
:
1292 hci_cc_exit_periodic_inq(hdev
, skb
);
1295 case HCI_OP_REMOTE_NAME_REQ_CANCEL
:
1296 hci_cc_remote_name_req_cancel(hdev
, skb
);
1299 case HCI_OP_ROLE_DISCOVERY
:
1300 hci_cc_role_discovery(hdev
, skb
);
1303 case HCI_OP_READ_LINK_POLICY
:
1304 hci_cc_read_link_policy(hdev
, skb
);
1307 case HCI_OP_WRITE_LINK_POLICY
:
1308 hci_cc_write_link_policy(hdev
, skb
);
1311 case HCI_OP_READ_DEF_LINK_POLICY
:
1312 hci_cc_read_def_link_policy(hdev
, skb
);
1315 case HCI_OP_WRITE_DEF_LINK_POLICY
:
1316 hci_cc_write_def_link_policy(hdev
, skb
);
1320 hci_cc_reset(hdev
, skb
);
1323 case HCI_OP_WRITE_LOCAL_NAME
:
1324 hci_cc_write_local_name(hdev
, skb
);
1327 case HCI_OP_READ_LOCAL_NAME
:
1328 hci_cc_read_local_name(hdev
, skb
);
1331 case HCI_OP_WRITE_AUTH_ENABLE
:
1332 hci_cc_write_auth_enable(hdev
, skb
);
1335 case HCI_OP_WRITE_ENCRYPT_MODE
:
1336 hci_cc_write_encrypt_mode(hdev
, skb
);
1339 case HCI_OP_WRITE_SCAN_ENABLE
:
1340 hci_cc_write_scan_enable(hdev
, skb
);
1343 case HCI_OP_READ_CLASS_OF_DEV
:
1344 hci_cc_read_class_of_dev(hdev
, skb
);
1347 case HCI_OP_WRITE_CLASS_OF_DEV
:
1348 hci_cc_write_class_of_dev(hdev
, skb
);
1351 case HCI_OP_READ_VOICE_SETTING
:
1352 hci_cc_read_voice_setting(hdev
, skb
);
1355 case HCI_OP_WRITE_VOICE_SETTING
:
1356 hci_cc_write_voice_setting(hdev
, skb
);
1359 case HCI_OP_HOST_BUFFER_SIZE
:
1360 hci_cc_host_buffer_size(hdev
, skb
);
1363 case HCI_OP_READ_SSP_MODE
:
1364 hci_cc_read_ssp_mode(hdev
, skb
);
1367 case HCI_OP_WRITE_SSP_MODE
:
1368 hci_cc_write_ssp_mode(hdev
, skb
);
1371 case HCI_OP_READ_LOCAL_VERSION
:
1372 hci_cc_read_local_version(hdev
, skb
);
1375 case HCI_OP_READ_LOCAL_COMMANDS
:
1376 hci_cc_read_local_commands(hdev
, skb
);
1379 case HCI_OP_READ_LOCAL_FEATURES
:
1380 hci_cc_read_local_features(hdev
, skb
);
1383 case HCI_OP_READ_BUFFER_SIZE
:
1384 hci_cc_read_buffer_size(hdev
, skb
);
1387 case HCI_OP_READ_BD_ADDR
:
1388 hci_cc_read_bd_addr(hdev
, skb
);
1391 case HCI_OP_WRITE_CA_TIMEOUT
:
1392 hci_cc_write_ca_timeout(hdev
, skb
);
1396 BT_DBG("%s opcode 0x%x", hdev
->name
, opcode
);
1401 atomic_set(&hdev
->cmd_cnt
, 1);
1402 if (!skb_queue_empty(&hdev
->cmd_q
))
1403 tasklet_schedule(&hdev
->cmd_task
);
1407 static inline void hci_cmd_status_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1409 struct hci_ev_cmd_status
*ev
= (void *) skb
->data
;
1412 skb_pull(skb
, sizeof(*ev
));
1414 opcode
= __le16_to_cpu(ev
->opcode
);
1417 case HCI_OP_INQUIRY
:
1418 hci_cs_inquiry(hdev
, ev
->status
);
1421 case HCI_OP_CREATE_CONN
:
1422 hci_cs_create_conn(hdev
, ev
->status
);
1425 case HCI_OP_ADD_SCO
:
1426 hci_cs_add_sco(hdev
, ev
->status
);
1429 case HCI_OP_AUTH_REQUESTED
:
1430 hci_cs_auth_requested(hdev
, ev
->status
);
1433 case HCI_OP_SET_CONN_ENCRYPT
:
1434 hci_cs_set_conn_encrypt(hdev
, ev
->status
);
1437 case HCI_OP_REMOTE_NAME_REQ
:
1438 hci_cs_remote_name_req(hdev
, ev
->status
);
1441 case HCI_OP_READ_REMOTE_FEATURES
:
1442 hci_cs_read_remote_features(hdev
, ev
->status
);
1445 case HCI_OP_READ_REMOTE_EXT_FEATURES
:
1446 hci_cs_read_remote_ext_features(hdev
, ev
->status
);
1449 case HCI_OP_SETUP_SYNC_CONN
:
1450 hci_cs_setup_sync_conn(hdev
, ev
->status
);
1453 case HCI_OP_SNIFF_MODE
:
1454 hci_cs_sniff_mode(hdev
, ev
->status
);
1457 case HCI_OP_EXIT_SNIFF_MODE
:
1458 hci_cs_exit_sniff_mode(hdev
, ev
->status
);
1462 BT_DBG("%s opcode 0x%x", hdev
->name
, opcode
);
1467 atomic_set(&hdev
->cmd_cnt
, 1);
1468 if (!skb_queue_empty(&hdev
->cmd_q
))
1469 tasklet_schedule(&hdev
->cmd_task
);
1473 static inline void hci_role_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1475 struct hci_ev_role_change
*ev
= (void *) skb
->data
;
1476 struct hci_conn
*conn
;
1478 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
1482 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
1486 conn
->link_mode
&= ~HCI_LM_MASTER
;
1488 conn
->link_mode
|= HCI_LM_MASTER
;
1491 clear_bit(HCI_CONN_RSWITCH_PEND
, &conn
->pend
);
1493 hci_role_switch_cfm(conn
, ev
->status
, ev
->role
);
1496 hci_dev_unlock(hdev
);
1499 static inline void hci_num_comp_pkts_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1501 struct hci_ev_num_comp_pkts
*ev
= (void *) skb
->data
;
1505 skb_pull(skb
, sizeof(*ev
));
1507 BT_DBG("%s num_hndl %d", hdev
->name
, ev
->num_hndl
);
1509 if (skb
->len
< ev
->num_hndl
* 4) {
1510 BT_DBG("%s bad parameters", hdev
->name
);
1514 tasklet_disable(&hdev
->tx_task
);
1516 for (i
= 0, ptr
= (__le16
*) skb
->data
; i
< ev
->num_hndl
; i
++) {
1517 struct hci_conn
*conn
;
1518 __u16 handle
, count
;
1520 handle
= get_unaligned_le16(ptr
++);
1521 count
= get_unaligned_le16(ptr
++);
1523 conn
= hci_conn_hash_lookup_handle(hdev
, handle
);
1525 conn
->sent
-= count
;
1527 if (conn
->type
== ACL_LINK
) {
1528 hdev
->acl_cnt
+= count
;
1529 if (hdev
->acl_cnt
> hdev
->acl_pkts
)
1530 hdev
->acl_cnt
= hdev
->acl_pkts
;
1532 hdev
->sco_cnt
+= count
;
1533 if (hdev
->sco_cnt
> hdev
->sco_pkts
)
1534 hdev
->sco_cnt
= hdev
->sco_pkts
;
1539 tasklet_schedule(&hdev
->tx_task
);
1541 tasklet_enable(&hdev
->tx_task
);
1544 static inline void hci_mode_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1546 struct hci_ev_mode_change
*ev
= (void *) skb
->data
;
1547 struct hci_conn
*conn
;
1549 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
1553 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1555 conn
->mode
= ev
->mode
;
1556 conn
->interval
= __le16_to_cpu(ev
->interval
);
1558 if (!test_and_clear_bit(HCI_CONN_MODE_CHANGE_PEND
, &conn
->pend
)) {
1559 if (conn
->mode
== HCI_CM_ACTIVE
)
1560 conn
->power_save
= 1;
1562 conn
->power_save
= 0;
1565 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND
, &conn
->pend
))
1566 hci_sco_setup(conn
, ev
->status
);
1569 hci_dev_unlock(hdev
);
1572 static inline void hci_pin_code_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1574 struct hci_ev_pin_code_req
*ev
= (void *) skb
->data
;
1575 struct hci_conn
*conn
;
1577 BT_DBG("%s", hdev
->name
);
1581 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
1582 if (conn
&& conn
->state
== BT_CONNECTED
) {
1583 hci_conn_hold(conn
);
1584 conn
->disc_timeout
= HCI_PAIRING_TIMEOUT
;
1588 hci_dev_unlock(hdev
);
1591 static inline void hci_link_key_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1593 BT_DBG("%s", hdev
->name
);
1596 static inline void hci_link_key_notify_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1598 struct hci_ev_link_key_notify
*ev
= (void *) skb
->data
;
1599 struct hci_conn
*conn
;
1601 BT_DBG("%s", hdev
->name
);
1605 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
1607 hci_conn_hold(conn
);
1608 conn
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
1612 hci_dev_unlock(hdev
);
1615 static inline void hci_clock_offset_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1617 struct hci_ev_clock_offset
*ev
= (void *) skb
->data
;
1618 struct hci_conn
*conn
;
1620 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
1624 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1625 if (conn
&& !ev
->status
) {
1626 struct inquiry_entry
*ie
;
1628 ie
= hci_inquiry_cache_lookup(hdev
, &conn
->dst
);
1630 ie
->data
.clock_offset
= ev
->clock_offset
;
1631 ie
->timestamp
= jiffies
;
1635 hci_dev_unlock(hdev
);
1638 static inline void hci_pkt_type_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1640 struct hci_ev_pkt_type_change
*ev
= (void *) skb
->data
;
1641 struct hci_conn
*conn
;
1643 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
1647 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1648 if (conn
&& !ev
->status
)
1649 conn
->pkt_type
= __le16_to_cpu(ev
->pkt_type
);
1651 hci_dev_unlock(hdev
);
1654 static inline void hci_pscan_rep_mode_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1656 struct hci_ev_pscan_rep_mode
*ev
= (void *) skb
->data
;
1657 struct inquiry_entry
*ie
;
1659 BT_DBG("%s", hdev
->name
);
1663 ie
= hci_inquiry_cache_lookup(hdev
, &ev
->bdaddr
);
1665 ie
->data
.pscan_rep_mode
= ev
->pscan_rep_mode
;
1666 ie
->timestamp
= jiffies
;
1669 hci_dev_unlock(hdev
);
1672 static inline void hci_inquiry_result_with_rssi_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1674 struct inquiry_data data
;
1675 int num_rsp
= *((__u8
*) skb
->data
);
1677 BT_DBG("%s num_rsp %d", hdev
->name
, num_rsp
);
1684 if ((skb
->len
- 1) / num_rsp
!= sizeof(struct inquiry_info_with_rssi
)) {
1685 struct inquiry_info_with_rssi_and_pscan_mode
*info
= (void *) (skb
->data
+ 1);
1687 for (; num_rsp
; num_rsp
--) {
1688 bacpy(&data
.bdaddr
, &info
->bdaddr
);
1689 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
1690 data
.pscan_period_mode
= info
->pscan_period_mode
;
1691 data
.pscan_mode
= info
->pscan_mode
;
1692 memcpy(data
.dev_class
, info
->dev_class
, 3);
1693 data
.clock_offset
= info
->clock_offset
;
1694 data
.rssi
= info
->rssi
;
1695 data
.ssp_mode
= 0x00;
1697 hci_inquiry_cache_update(hdev
, &data
);
1700 struct inquiry_info_with_rssi
*info
= (void *) (skb
->data
+ 1);
1702 for (; num_rsp
; num_rsp
--) {
1703 bacpy(&data
.bdaddr
, &info
->bdaddr
);
1704 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
1705 data
.pscan_period_mode
= info
->pscan_period_mode
;
1706 data
.pscan_mode
= 0x00;
1707 memcpy(data
.dev_class
, info
->dev_class
, 3);
1708 data
.clock_offset
= info
->clock_offset
;
1709 data
.rssi
= info
->rssi
;
1710 data
.ssp_mode
= 0x00;
1712 hci_inquiry_cache_update(hdev
, &data
);
1716 hci_dev_unlock(hdev
);
1719 static inline void hci_remote_ext_features_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1721 struct hci_ev_remote_ext_features
*ev
= (void *) skb
->data
;
1722 struct hci_conn
*conn
;
1724 BT_DBG("%s", hdev
->name
);
1728 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1732 if (!ev
->status
&& ev
->page
== 0x01) {
1733 struct inquiry_entry
*ie
;
1735 ie
= hci_inquiry_cache_lookup(hdev
, &conn
->dst
);
1737 ie
->data
.ssp_mode
= (ev
->features
[0] & 0x01);
1739 conn
->ssp_mode
= (ev
->features
[0] & 0x01);
1742 if (conn
->state
!= BT_CONFIG
)
1746 struct hci_cp_remote_name_req cp
;
1747 memset(&cp
, 0, sizeof(cp
));
1748 bacpy(&cp
.bdaddr
, &conn
->dst
);
1749 cp
.pscan_rep_mode
= 0x02;
1750 hci_send_cmd(hdev
, HCI_OP_REMOTE_NAME_REQ
, sizeof(cp
), &cp
);
1753 if (!hci_outgoing_auth_needed(hdev
, conn
)) {
1754 conn
->state
= BT_CONNECTED
;
1755 hci_proto_connect_cfm(conn
, ev
->status
);
1760 hci_dev_unlock(hdev
);
1763 static inline void hci_sync_conn_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1765 struct hci_ev_sync_conn_complete
*ev
= (void *) skb
->data
;
1766 struct hci_conn
*conn
;
1768 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
1772 conn
= hci_conn_hash_lookup_ba(hdev
, ev
->link_type
, &ev
->bdaddr
);
1774 if (ev
->link_type
== ESCO_LINK
)
1777 conn
= hci_conn_hash_lookup_ba(hdev
, ESCO_LINK
, &ev
->bdaddr
);
1781 conn
->type
= SCO_LINK
;
1784 switch (ev
->status
) {
1786 conn
->handle
= __le16_to_cpu(ev
->handle
);
1787 conn
->state
= BT_CONNECTED
;
1789 hci_conn_hold_device(conn
);
1790 hci_conn_add_sysfs(conn
);
1793 case 0x11: /* Unsupported Feature or Parameter Value */
1794 case 0x1c: /* SCO interval rejected */
1795 case 0x1a: /* Unsupported Remote Feature */
1796 case 0x1f: /* Unspecified error */
1797 if (conn
->out
&& conn
->attempt
< 2) {
1798 conn
->pkt_type
= (hdev
->esco_type
& SCO_ESCO_MASK
) |
1799 (hdev
->esco_type
& EDR_ESCO_MASK
);
1800 hci_setup_sync(conn
, conn
->link
->handle
);
1806 conn
->state
= BT_CLOSED
;
1810 hci_proto_connect_cfm(conn
, ev
->status
);
1815 hci_dev_unlock(hdev
);
1818 static inline void hci_sync_conn_changed_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1820 BT_DBG("%s", hdev
->name
);
1823 static inline void hci_sniff_subrate_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1825 struct hci_ev_sniff_subrate
*ev
= (void *) skb
->data
;
1826 struct hci_conn
*conn
;
1828 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
1832 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1836 hci_dev_unlock(hdev
);
1839 static inline void hci_extended_inquiry_result_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1841 struct inquiry_data data
;
1842 struct extended_inquiry_info
*info
= (void *) (skb
->data
+ 1);
1843 int num_rsp
= *((__u8
*) skb
->data
);
1845 BT_DBG("%s num_rsp %d", hdev
->name
, num_rsp
);
1852 for (; num_rsp
; num_rsp
--) {
1853 bacpy(&data
.bdaddr
, &info
->bdaddr
);
1854 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
1855 data
.pscan_period_mode
= info
->pscan_period_mode
;
1856 data
.pscan_mode
= 0x00;
1857 memcpy(data
.dev_class
, info
->dev_class
, 3);
1858 data
.clock_offset
= info
->clock_offset
;
1859 data
.rssi
= info
->rssi
;
1860 data
.ssp_mode
= 0x01;
1862 hci_inquiry_cache_update(hdev
, &data
);
1865 hci_dev_unlock(hdev
);
1868 static inline void hci_io_capa_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1870 struct hci_ev_io_capa_request
*ev
= (void *) skb
->data
;
1871 struct hci_conn
*conn
;
1873 BT_DBG("%s", hdev
->name
);
1877 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
1879 hci_conn_hold(conn
);
1881 hci_dev_unlock(hdev
);
1884 static inline void hci_simple_pair_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1886 struct hci_ev_simple_pair_complete
*ev
= (void *) skb
->data
;
1887 struct hci_conn
*conn
;
1889 BT_DBG("%s", hdev
->name
);
1893 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
1897 hci_dev_unlock(hdev
);
1900 static inline void hci_remote_host_features_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1902 struct hci_ev_remote_host_features
*ev
= (void *) skb
->data
;
1903 struct inquiry_entry
*ie
;
1905 BT_DBG("%s", hdev
->name
);
1909 ie
= hci_inquiry_cache_lookup(hdev
, &ev
->bdaddr
);
1911 ie
->data
.ssp_mode
= (ev
->features
[0] & 0x01);
1913 hci_dev_unlock(hdev
);
1916 void hci_event_packet(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1918 struct hci_event_hdr
*hdr
= (void *) skb
->data
;
1919 __u8 event
= hdr
->evt
;
1921 skb_pull(skb
, HCI_EVENT_HDR_SIZE
);
1924 case HCI_EV_INQUIRY_COMPLETE
:
1925 hci_inquiry_complete_evt(hdev
, skb
);
1928 case HCI_EV_INQUIRY_RESULT
:
1929 hci_inquiry_result_evt(hdev
, skb
);
1932 case HCI_EV_CONN_COMPLETE
:
1933 hci_conn_complete_evt(hdev
, skb
);
1936 case HCI_EV_CONN_REQUEST
:
1937 hci_conn_request_evt(hdev
, skb
);
1940 case HCI_EV_DISCONN_COMPLETE
:
1941 hci_disconn_complete_evt(hdev
, skb
);
1944 case HCI_EV_AUTH_COMPLETE
:
1945 hci_auth_complete_evt(hdev
, skb
);
1948 case HCI_EV_REMOTE_NAME
:
1949 hci_remote_name_evt(hdev
, skb
);
1952 case HCI_EV_ENCRYPT_CHANGE
:
1953 hci_encrypt_change_evt(hdev
, skb
);
1956 case HCI_EV_CHANGE_LINK_KEY_COMPLETE
:
1957 hci_change_link_key_complete_evt(hdev
, skb
);
1960 case HCI_EV_REMOTE_FEATURES
:
1961 hci_remote_features_evt(hdev
, skb
);
1964 case HCI_EV_REMOTE_VERSION
:
1965 hci_remote_version_evt(hdev
, skb
);
1968 case HCI_EV_QOS_SETUP_COMPLETE
:
1969 hci_qos_setup_complete_evt(hdev
, skb
);
1972 case HCI_EV_CMD_COMPLETE
:
1973 hci_cmd_complete_evt(hdev
, skb
);
1976 case HCI_EV_CMD_STATUS
:
1977 hci_cmd_status_evt(hdev
, skb
);
1980 case HCI_EV_ROLE_CHANGE
:
1981 hci_role_change_evt(hdev
, skb
);
1984 case HCI_EV_NUM_COMP_PKTS
:
1985 hci_num_comp_pkts_evt(hdev
, skb
);
1988 case HCI_EV_MODE_CHANGE
:
1989 hci_mode_change_evt(hdev
, skb
);
1992 case HCI_EV_PIN_CODE_REQ
:
1993 hci_pin_code_request_evt(hdev
, skb
);
1996 case HCI_EV_LINK_KEY_REQ
:
1997 hci_link_key_request_evt(hdev
, skb
);
2000 case HCI_EV_LINK_KEY_NOTIFY
:
2001 hci_link_key_notify_evt(hdev
, skb
);
2004 case HCI_EV_CLOCK_OFFSET
:
2005 hci_clock_offset_evt(hdev
, skb
);
2008 case HCI_EV_PKT_TYPE_CHANGE
:
2009 hci_pkt_type_change_evt(hdev
, skb
);
2012 case HCI_EV_PSCAN_REP_MODE
:
2013 hci_pscan_rep_mode_evt(hdev
, skb
);
2016 case HCI_EV_INQUIRY_RESULT_WITH_RSSI
:
2017 hci_inquiry_result_with_rssi_evt(hdev
, skb
);
2020 case HCI_EV_REMOTE_EXT_FEATURES
:
2021 hci_remote_ext_features_evt(hdev
, skb
);
2024 case HCI_EV_SYNC_CONN_COMPLETE
:
2025 hci_sync_conn_complete_evt(hdev
, skb
);
2028 case HCI_EV_SYNC_CONN_CHANGED
:
2029 hci_sync_conn_changed_evt(hdev
, skb
);
2032 case HCI_EV_SNIFF_SUBRATE
:
2033 hci_sniff_subrate_evt(hdev
, skb
);
2036 case HCI_EV_EXTENDED_INQUIRY_RESULT
:
2037 hci_extended_inquiry_result_evt(hdev
, skb
);
2040 case HCI_EV_IO_CAPA_REQUEST
:
2041 hci_io_capa_request_evt(hdev
, skb
);
2044 case HCI_EV_SIMPLE_PAIR_COMPLETE
:
2045 hci_simple_pair_complete_evt(hdev
, skb
);
2048 case HCI_EV_REMOTE_HOST_FEATURES
:
2049 hci_remote_host_features_evt(hdev
, skb
);
2053 BT_DBG("%s event 0x%x", hdev
->name
, event
);
2058 hdev
->stat
.evt_rx
++;
2061 /* Generate internal stack event */
2062 void hci_si_event(struct hci_dev
*hdev
, int type
, int dlen
, void *data
)
2064 struct hci_event_hdr
*hdr
;
2065 struct hci_ev_stack_internal
*ev
;
2066 struct sk_buff
*skb
;
2068 skb
= bt_skb_alloc(HCI_EVENT_HDR_SIZE
+ sizeof(*ev
) + dlen
, GFP_ATOMIC
);
2072 hdr
= (void *) skb_put(skb
, HCI_EVENT_HDR_SIZE
);
2073 hdr
->evt
= HCI_EV_STACK_INTERNAL
;
2074 hdr
->plen
= sizeof(*ev
) + dlen
;
2076 ev
= (void *) skb_put(skb
, sizeof(*ev
) + dlen
);
2078 memcpy(ev
->data
, data
, dlen
);
2080 bt_cb(skb
)->incoming
= 1;
2081 __net_timestamp(skb
);
2083 bt_cb(skb
)->pkt_type
= HCI_EVENT_PKT
;
2084 skb
->dev
= (void *) hdev
;
2085 hci_send_to_sock(hdev
, skb
);