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 clear_bit(HCI_RESET
, &hdev
->flags
);
188 hci_req_complete(hdev
, HCI_OP_RESET
, status
);
191 static void hci_cc_write_local_name(struct hci_dev
*hdev
, struct sk_buff
*skb
)
193 __u8 status
= *((__u8
*) skb
->data
);
196 BT_DBG("%s status 0x%x", hdev
->name
, status
);
201 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_LOCAL_NAME
);
205 memcpy(hdev
->dev_name
, sent
, 248);
208 static void hci_cc_read_local_name(struct hci_dev
*hdev
, struct sk_buff
*skb
)
210 struct hci_rp_read_local_name
*rp
= (void *) skb
->data
;
212 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
217 memcpy(hdev
->dev_name
, rp
->name
, 248);
220 static void hci_cc_write_auth_enable(struct hci_dev
*hdev
, struct sk_buff
*skb
)
222 __u8 status
= *((__u8
*) skb
->data
);
225 BT_DBG("%s status 0x%x", hdev
->name
, status
);
227 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_AUTH_ENABLE
);
232 __u8 param
= *((__u8
*) sent
);
234 if (param
== AUTH_ENABLED
)
235 set_bit(HCI_AUTH
, &hdev
->flags
);
237 clear_bit(HCI_AUTH
, &hdev
->flags
);
240 hci_req_complete(hdev
, HCI_OP_WRITE_AUTH_ENABLE
, status
);
243 static void hci_cc_write_encrypt_mode(struct hci_dev
*hdev
, struct sk_buff
*skb
)
245 __u8 status
= *((__u8
*) skb
->data
);
248 BT_DBG("%s status 0x%x", hdev
->name
, status
);
250 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_ENCRYPT_MODE
);
255 __u8 param
= *((__u8
*) sent
);
258 set_bit(HCI_ENCRYPT
, &hdev
->flags
);
260 clear_bit(HCI_ENCRYPT
, &hdev
->flags
);
263 hci_req_complete(hdev
, HCI_OP_WRITE_ENCRYPT_MODE
, status
);
266 static void hci_cc_write_scan_enable(struct hci_dev
*hdev
, struct sk_buff
*skb
)
268 __u8 status
= *((__u8
*) skb
->data
);
271 BT_DBG("%s status 0x%x", hdev
->name
, status
);
273 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_SCAN_ENABLE
);
278 __u8 param
= *((__u8
*) sent
);
280 clear_bit(HCI_PSCAN
, &hdev
->flags
);
281 clear_bit(HCI_ISCAN
, &hdev
->flags
);
283 if (param
& SCAN_INQUIRY
)
284 set_bit(HCI_ISCAN
, &hdev
->flags
);
286 if (param
& SCAN_PAGE
)
287 set_bit(HCI_PSCAN
, &hdev
->flags
);
290 hci_req_complete(hdev
, HCI_OP_WRITE_SCAN_ENABLE
, status
);
293 static void hci_cc_read_class_of_dev(struct hci_dev
*hdev
, struct sk_buff
*skb
)
295 struct hci_rp_read_class_of_dev
*rp
= (void *) skb
->data
;
297 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
302 memcpy(hdev
->dev_class
, rp
->dev_class
, 3);
304 BT_DBG("%s class 0x%.2x%.2x%.2x", hdev
->name
,
305 hdev
->dev_class
[2], hdev
->dev_class
[1], hdev
->dev_class
[0]);
308 static void hci_cc_write_class_of_dev(struct hci_dev
*hdev
, struct sk_buff
*skb
)
310 __u8 status
= *((__u8
*) skb
->data
);
313 BT_DBG("%s status 0x%x", hdev
->name
, status
);
318 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_CLASS_OF_DEV
);
322 memcpy(hdev
->dev_class
, sent
, 3);
325 static void hci_cc_read_voice_setting(struct hci_dev
*hdev
, struct sk_buff
*skb
)
327 struct hci_rp_read_voice_setting
*rp
= (void *) skb
->data
;
330 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
335 setting
= __le16_to_cpu(rp
->voice_setting
);
337 if (hdev
->voice_setting
== setting
)
340 hdev
->voice_setting
= setting
;
342 BT_DBG("%s voice setting 0x%04x", hdev
->name
, setting
);
345 tasklet_disable(&hdev
->tx_task
);
346 hdev
->notify(hdev
, HCI_NOTIFY_VOICE_SETTING
);
347 tasklet_enable(&hdev
->tx_task
);
351 static void hci_cc_write_voice_setting(struct hci_dev
*hdev
, struct sk_buff
*skb
)
353 __u8 status
= *((__u8
*) skb
->data
);
357 BT_DBG("%s status 0x%x", hdev
->name
, status
);
362 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_VOICE_SETTING
);
366 setting
= get_unaligned_le16(sent
);
368 if (hdev
->voice_setting
== setting
)
371 hdev
->voice_setting
= setting
;
373 BT_DBG("%s voice setting 0x%04x", hdev
->name
, setting
);
376 tasklet_disable(&hdev
->tx_task
);
377 hdev
->notify(hdev
, HCI_NOTIFY_VOICE_SETTING
);
378 tasklet_enable(&hdev
->tx_task
);
382 static void hci_cc_host_buffer_size(struct hci_dev
*hdev
, struct sk_buff
*skb
)
384 __u8 status
= *((__u8
*) skb
->data
);
386 BT_DBG("%s status 0x%x", hdev
->name
, status
);
388 hci_req_complete(hdev
, HCI_OP_HOST_BUFFER_SIZE
, status
);
391 static void hci_cc_read_ssp_mode(struct hci_dev
*hdev
, struct sk_buff
*skb
)
393 struct hci_rp_read_ssp_mode
*rp
= (void *) skb
->data
;
395 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
400 hdev
->ssp_mode
= rp
->mode
;
403 static void hci_cc_write_ssp_mode(struct hci_dev
*hdev
, struct sk_buff
*skb
)
405 __u8 status
= *((__u8
*) skb
->data
);
408 BT_DBG("%s status 0x%x", hdev
->name
, status
);
413 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_SSP_MODE
);
417 hdev
->ssp_mode
= *((__u8
*) sent
);
420 static void hci_cc_read_local_version(struct hci_dev
*hdev
, struct sk_buff
*skb
)
422 struct hci_rp_read_local_version
*rp
= (void *) skb
->data
;
424 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
429 hdev
->hci_ver
= rp
->hci_ver
;
430 hdev
->hci_rev
= __le16_to_cpu(rp
->hci_rev
);
431 hdev
->manufacturer
= __le16_to_cpu(rp
->manufacturer
);
433 BT_DBG("%s manufacturer %d hci ver %d:%d", hdev
->name
,
435 hdev
->hci_ver
, hdev
->hci_rev
);
438 static void hci_cc_read_local_commands(struct hci_dev
*hdev
, struct sk_buff
*skb
)
440 struct hci_rp_read_local_commands
*rp
= (void *) skb
->data
;
442 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
447 memcpy(hdev
->commands
, rp
->commands
, sizeof(hdev
->commands
));
450 static void hci_cc_read_local_features(struct hci_dev
*hdev
, struct sk_buff
*skb
)
452 struct hci_rp_read_local_features
*rp
= (void *) skb
->data
;
454 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
459 memcpy(hdev
->features
, rp
->features
, 8);
461 /* Adjust default settings according to features
462 * supported by device. */
464 if (hdev
->features
[0] & LMP_3SLOT
)
465 hdev
->pkt_type
|= (HCI_DM3
| HCI_DH3
);
467 if (hdev
->features
[0] & LMP_5SLOT
)
468 hdev
->pkt_type
|= (HCI_DM5
| HCI_DH5
);
470 if (hdev
->features
[1] & LMP_HV2
) {
471 hdev
->pkt_type
|= (HCI_HV2
);
472 hdev
->esco_type
|= (ESCO_HV2
);
475 if (hdev
->features
[1] & LMP_HV3
) {
476 hdev
->pkt_type
|= (HCI_HV3
);
477 hdev
->esco_type
|= (ESCO_HV3
);
480 if (hdev
->features
[3] & LMP_ESCO
)
481 hdev
->esco_type
|= (ESCO_EV3
);
483 if (hdev
->features
[4] & LMP_EV4
)
484 hdev
->esco_type
|= (ESCO_EV4
);
486 if (hdev
->features
[4] & LMP_EV5
)
487 hdev
->esco_type
|= (ESCO_EV5
);
489 if (hdev
->features
[5] & LMP_EDR_ESCO_2M
)
490 hdev
->esco_type
|= (ESCO_2EV3
);
492 if (hdev
->features
[5] & LMP_EDR_ESCO_3M
)
493 hdev
->esco_type
|= (ESCO_3EV3
);
495 if (hdev
->features
[5] & LMP_EDR_3S_ESCO
)
496 hdev
->esco_type
|= (ESCO_2EV5
| ESCO_3EV5
);
498 BT_DBG("%s features 0x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x", hdev
->name
,
499 hdev
->features
[0], hdev
->features
[1],
500 hdev
->features
[2], hdev
->features
[3],
501 hdev
->features
[4], hdev
->features
[5],
502 hdev
->features
[6], hdev
->features
[7]);
505 static void hci_cc_read_buffer_size(struct hci_dev
*hdev
, struct sk_buff
*skb
)
507 struct hci_rp_read_buffer_size
*rp
= (void *) skb
->data
;
509 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
514 hdev
->acl_mtu
= __le16_to_cpu(rp
->acl_mtu
);
515 hdev
->sco_mtu
= rp
->sco_mtu
;
516 hdev
->acl_pkts
= __le16_to_cpu(rp
->acl_max_pkt
);
517 hdev
->sco_pkts
= __le16_to_cpu(rp
->sco_max_pkt
);
519 if (test_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE
, &hdev
->quirks
)) {
524 hdev
->acl_cnt
= hdev
->acl_pkts
;
525 hdev
->sco_cnt
= hdev
->sco_pkts
;
527 BT_DBG("%s acl mtu %d:%d sco mtu %d:%d", hdev
->name
,
528 hdev
->acl_mtu
, hdev
->acl_pkts
,
529 hdev
->sco_mtu
, hdev
->sco_pkts
);
532 static void hci_cc_read_bd_addr(struct hci_dev
*hdev
, struct sk_buff
*skb
)
534 struct hci_rp_read_bd_addr
*rp
= (void *) skb
->data
;
536 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
539 bacpy(&hdev
->bdaddr
, &rp
->bdaddr
);
541 hci_req_complete(hdev
, HCI_OP_READ_BD_ADDR
, rp
->status
);
544 static void hci_cc_write_ca_timeout(struct hci_dev
*hdev
, struct sk_buff
*skb
)
546 __u8 status
= *((__u8
*) skb
->data
);
548 BT_DBG("%s status 0x%x", hdev
->name
, status
);
550 hci_req_complete(hdev
, HCI_OP_WRITE_CA_TIMEOUT
, status
);
553 static inline void hci_cs_inquiry(struct hci_dev
*hdev
, __u8 status
)
555 BT_DBG("%s status 0x%x", hdev
->name
, status
);
558 hci_req_complete(hdev
, HCI_OP_INQUIRY
, status
);
560 hci_conn_check_pending(hdev
);
562 set_bit(HCI_INQUIRY
, &hdev
->flags
);
565 static inline void hci_cs_create_conn(struct hci_dev
*hdev
, __u8 status
)
567 struct hci_cp_create_conn
*cp
;
568 struct hci_conn
*conn
;
570 BT_DBG("%s status 0x%x", hdev
->name
, status
);
572 cp
= hci_sent_cmd_data(hdev
, HCI_OP_CREATE_CONN
);
578 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &cp
->bdaddr
);
580 BT_DBG("%s bdaddr %s conn %p", hdev
->name
, batostr(&cp
->bdaddr
), conn
);
583 if (conn
&& conn
->state
== BT_CONNECT
) {
584 if (status
!= 0x0c || conn
->attempt
> 2) {
585 conn
->state
= BT_CLOSED
;
586 hci_proto_connect_cfm(conn
, status
);
589 conn
->state
= BT_CONNECT2
;
593 conn
= hci_conn_add(hdev
, ACL_LINK
, &cp
->bdaddr
);
596 conn
->link_mode
|= HCI_LM_MASTER
;
598 BT_ERR("No memory for new connection");
602 hci_dev_unlock(hdev
);
605 static void hci_cs_add_sco(struct hci_dev
*hdev
, __u8 status
)
607 struct hci_cp_add_sco
*cp
;
608 struct hci_conn
*acl
, *sco
;
611 BT_DBG("%s status 0x%x", hdev
->name
, status
);
616 cp
= hci_sent_cmd_data(hdev
, HCI_OP_ADD_SCO
);
620 handle
= __le16_to_cpu(cp
->handle
);
622 BT_DBG("%s handle %d", hdev
->name
, handle
);
626 acl
= hci_conn_hash_lookup_handle(hdev
, handle
);
627 if (acl
&& (sco
= acl
->link
)) {
628 sco
->state
= BT_CLOSED
;
630 hci_proto_connect_cfm(sco
, status
);
634 hci_dev_unlock(hdev
);
637 static void hci_cs_auth_requested(struct hci_dev
*hdev
, __u8 status
)
639 struct hci_cp_auth_requested
*cp
;
640 struct hci_conn
*conn
;
642 BT_DBG("%s status 0x%x", hdev
->name
, status
);
647 cp
= hci_sent_cmd_data(hdev
, HCI_OP_AUTH_REQUESTED
);
653 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
655 if (conn
->state
== BT_CONFIG
) {
656 hci_proto_connect_cfm(conn
, status
);
661 hci_dev_unlock(hdev
);
664 static void hci_cs_set_conn_encrypt(struct hci_dev
*hdev
, __u8 status
)
666 struct hci_cp_set_conn_encrypt
*cp
;
667 struct hci_conn
*conn
;
669 BT_DBG("%s status 0x%x", hdev
->name
, status
);
674 cp
= hci_sent_cmd_data(hdev
, HCI_OP_SET_CONN_ENCRYPT
);
680 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
682 if (conn
->state
== BT_CONFIG
) {
683 hci_proto_connect_cfm(conn
, status
);
688 hci_dev_unlock(hdev
);
691 static int hci_outgoing_auth_needed(struct hci_dev
*hdev
,
692 struct hci_conn
*conn
)
694 if (conn
->state
!= BT_CONFIG
|| !conn
->out
)
697 if (conn
->pending_sec_level
== BT_SECURITY_SDP
)
700 /* Only request authentication for SSP connections or non-SSP
701 * devices with sec_level HIGH */
702 if (!(hdev
->ssp_mode
> 0 && conn
->ssp_mode
> 0) &&
703 conn
->pending_sec_level
!= BT_SECURITY_HIGH
)
709 static void hci_cs_remote_name_req(struct hci_dev
*hdev
, __u8 status
)
711 struct hci_cp_remote_name_req
*cp
;
712 struct hci_conn
*conn
;
714 BT_DBG("%s status 0x%x", hdev
->name
, status
);
716 /* If successful wait for the name req complete event before
717 * checking for the need to do authentication */
721 cp
= hci_sent_cmd_data(hdev
, HCI_OP_REMOTE_NAME_REQ
);
727 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &cp
->bdaddr
);
728 if (conn
&& hci_outgoing_auth_needed(hdev
, conn
)) {
729 struct hci_cp_auth_requested cp
;
730 cp
.handle
= __cpu_to_le16(conn
->handle
);
731 hci_send_cmd(hdev
, HCI_OP_AUTH_REQUESTED
, sizeof(cp
), &cp
);
734 hci_dev_unlock(hdev
);
737 static void hci_cs_read_remote_features(struct hci_dev
*hdev
, __u8 status
)
739 struct hci_cp_read_remote_features
*cp
;
740 struct hci_conn
*conn
;
742 BT_DBG("%s status 0x%x", hdev
->name
, status
);
747 cp
= hci_sent_cmd_data(hdev
, HCI_OP_READ_REMOTE_FEATURES
);
753 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
755 if (conn
->state
== BT_CONFIG
) {
756 hci_proto_connect_cfm(conn
, status
);
761 hci_dev_unlock(hdev
);
764 static void hci_cs_read_remote_ext_features(struct hci_dev
*hdev
, __u8 status
)
766 struct hci_cp_read_remote_ext_features
*cp
;
767 struct hci_conn
*conn
;
769 BT_DBG("%s status 0x%x", hdev
->name
, status
);
774 cp
= hci_sent_cmd_data(hdev
, HCI_OP_READ_REMOTE_EXT_FEATURES
);
780 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
782 if (conn
->state
== BT_CONFIG
) {
783 hci_proto_connect_cfm(conn
, status
);
788 hci_dev_unlock(hdev
);
791 static void hci_cs_setup_sync_conn(struct hci_dev
*hdev
, __u8 status
)
793 struct hci_cp_setup_sync_conn
*cp
;
794 struct hci_conn
*acl
, *sco
;
797 BT_DBG("%s status 0x%x", hdev
->name
, status
);
802 cp
= hci_sent_cmd_data(hdev
, HCI_OP_SETUP_SYNC_CONN
);
806 handle
= __le16_to_cpu(cp
->handle
);
808 BT_DBG("%s handle %d", hdev
->name
, handle
);
812 acl
= hci_conn_hash_lookup_handle(hdev
, handle
);
813 if (acl
&& (sco
= acl
->link
)) {
814 sco
->state
= BT_CLOSED
;
816 hci_proto_connect_cfm(sco
, status
);
820 hci_dev_unlock(hdev
);
823 static void hci_cs_sniff_mode(struct hci_dev
*hdev
, __u8 status
)
825 struct hci_cp_sniff_mode
*cp
;
826 struct hci_conn
*conn
;
828 BT_DBG("%s status 0x%x", hdev
->name
, status
);
833 cp
= hci_sent_cmd_data(hdev
, HCI_OP_SNIFF_MODE
);
839 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
841 clear_bit(HCI_CONN_MODE_CHANGE_PEND
, &conn
->pend
);
843 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND
, &conn
->pend
))
844 hci_sco_setup(conn
, status
);
847 hci_dev_unlock(hdev
);
850 static void hci_cs_exit_sniff_mode(struct hci_dev
*hdev
, __u8 status
)
852 struct hci_cp_exit_sniff_mode
*cp
;
853 struct hci_conn
*conn
;
855 BT_DBG("%s status 0x%x", hdev
->name
, status
);
860 cp
= hci_sent_cmd_data(hdev
, HCI_OP_EXIT_SNIFF_MODE
);
866 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
868 clear_bit(HCI_CONN_MODE_CHANGE_PEND
, &conn
->pend
);
870 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND
, &conn
->pend
))
871 hci_sco_setup(conn
, status
);
874 hci_dev_unlock(hdev
);
877 static inline void hci_inquiry_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
879 __u8 status
= *((__u8
*) skb
->data
);
881 BT_DBG("%s status %d", hdev
->name
, status
);
883 clear_bit(HCI_INQUIRY
, &hdev
->flags
);
885 hci_req_complete(hdev
, HCI_OP_INQUIRY
, status
);
887 hci_conn_check_pending(hdev
);
890 static inline void hci_inquiry_result_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
892 struct inquiry_data data
;
893 struct inquiry_info
*info
= (void *) (skb
->data
+ 1);
894 int num_rsp
= *((__u8
*) skb
->data
);
896 BT_DBG("%s num_rsp %d", hdev
->name
, num_rsp
);
903 for (; num_rsp
; num_rsp
--) {
904 bacpy(&data
.bdaddr
, &info
->bdaddr
);
905 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
906 data
.pscan_period_mode
= info
->pscan_period_mode
;
907 data
.pscan_mode
= info
->pscan_mode
;
908 memcpy(data
.dev_class
, info
->dev_class
, 3);
909 data
.clock_offset
= info
->clock_offset
;
911 data
.ssp_mode
= 0x00;
913 hci_inquiry_cache_update(hdev
, &data
);
916 hci_dev_unlock(hdev
);
919 static inline void hci_conn_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
921 struct hci_ev_conn_complete
*ev
= (void *) skb
->data
;
922 struct hci_conn
*conn
;
924 BT_DBG("%s", hdev
->name
);
928 conn
= hci_conn_hash_lookup_ba(hdev
, ev
->link_type
, &ev
->bdaddr
);
930 if (ev
->link_type
!= SCO_LINK
)
933 conn
= hci_conn_hash_lookup_ba(hdev
, ESCO_LINK
, &ev
->bdaddr
);
937 conn
->type
= SCO_LINK
;
941 conn
->handle
= __le16_to_cpu(ev
->handle
);
943 if (conn
->type
== ACL_LINK
) {
944 conn
->state
= BT_CONFIG
;
946 conn
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
948 conn
->state
= BT_CONNECTED
;
950 hci_conn_hold_device(conn
);
951 hci_conn_add_sysfs(conn
);
953 if (test_bit(HCI_AUTH
, &hdev
->flags
))
954 conn
->link_mode
|= HCI_LM_AUTH
;
956 if (test_bit(HCI_ENCRYPT
, &hdev
->flags
))
957 conn
->link_mode
|= HCI_LM_ENCRYPT
;
959 /* Get remote features */
960 if (conn
->type
== ACL_LINK
) {
961 struct hci_cp_read_remote_features cp
;
962 cp
.handle
= ev
->handle
;
963 hci_send_cmd(hdev
, HCI_OP_READ_REMOTE_FEATURES
,
967 /* Set packet type for incoming connection */
968 if (!conn
->out
&& hdev
->hci_ver
< 3) {
969 struct hci_cp_change_conn_ptype cp
;
970 cp
.handle
= ev
->handle
;
971 cp
.pkt_type
= cpu_to_le16(conn
->pkt_type
);
972 hci_send_cmd(hdev
, HCI_OP_CHANGE_CONN_PTYPE
,
976 conn
->state
= BT_CLOSED
;
978 if (conn
->type
== ACL_LINK
)
979 hci_sco_setup(conn
, ev
->status
);
982 hci_proto_connect_cfm(conn
, ev
->status
);
984 } else if (ev
->link_type
!= ACL_LINK
)
985 hci_proto_connect_cfm(conn
, ev
->status
);
988 hci_dev_unlock(hdev
);
990 hci_conn_check_pending(hdev
);
993 static inline void hci_conn_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
995 struct hci_ev_conn_request
*ev
= (void *) skb
->data
;
996 int mask
= hdev
->link_mode
;
998 BT_DBG("%s bdaddr %s type 0x%x", hdev
->name
,
999 batostr(&ev
->bdaddr
), ev
->link_type
);
1001 mask
|= hci_proto_connect_ind(hdev
, &ev
->bdaddr
, ev
->link_type
);
1003 if ((mask
& HCI_LM_ACCEPT
) && !hci_blacklist_lookup(hdev
, &ev
->bdaddr
)) {
1004 /* Connection accepted */
1005 struct inquiry_entry
*ie
;
1006 struct hci_conn
*conn
;
1010 ie
= hci_inquiry_cache_lookup(hdev
, &ev
->bdaddr
);
1012 memcpy(ie
->data
.dev_class
, ev
->dev_class
, 3);
1014 conn
= hci_conn_hash_lookup_ba(hdev
, ev
->link_type
, &ev
->bdaddr
);
1016 conn
= hci_conn_add(hdev
, ev
->link_type
, &ev
->bdaddr
);
1018 BT_ERR("No memory for new connection");
1019 hci_dev_unlock(hdev
);
1024 memcpy(conn
->dev_class
, ev
->dev_class
, 3);
1025 conn
->state
= BT_CONNECT
;
1027 hci_dev_unlock(hdev
);
1029 if (ev
->link_type
== ACL_LINK
|| !lmp_esco_capable(hdev
)) {
1030 struct hci_cp_accept_conn_req cp
;
1032 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
1034 if (lmp_rswitch_capable(hdev
) && (mask
& HCI_LM_MASTER
))
1035 cp
.role
= 0x00; /* Become master */
1037 cp
.role
= 0x01; /* Remain slave */
1039 hci_send_cmd(hdev
, HCI_OP_ACCEPT_CONN_REQ
,
1042 struct hci_cp_accept_sync_conn_req cp
;
1044 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
1045 cp
.pkt_type
= cpu_to_le16(conn
->pkt_type
);
1047 cp
.tx_bandwidth
= cpu_to_le32(0x00001f40);
1048 cp
.rx_bandwidth
= cpu_to_le32(0x00001f40);
1049 cp
.max_latency
= cpu_to_le16(0xffff);
1050 cp
.content_format
= cpu_to_le16(hdev
->voice_setting
);
1051 cp
.retrans_effort
= 0xff;
1053 hci_send_cmd(hdev
, HCI_OP_ACCEPT_SYNC_CONN_REQ
,
1057 /* Connection rejected */
1058 struct hci_cp_reject_conn_req cp
;
1060 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
1062 hci_send_cmd(hdev
, HCI_OP_REJECT_CONN_REQ
, sizeof(cp
), &cp
);
1066 static inline void hci_disconn_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1068 struct hci_ev_disconn_complete
*ev
= (void *) skb
->data
;
1069 struct hci_conn
*conn
;
1071 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
1078 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1080 conn
->state
= BT_CLOSED
;
1082 hci_proto_disconn_cfm(conn
, ev
->reason
);
1086 hci_dev_unlock(hdev
);
1089 static inline void hci_auth_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1091 struct hci_ev_auth_complete
*ev
= (void *) skb
->data
;
1092 struct hci_conn
*conn
;
1094 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
1098 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1101 conn
->link_mode
|= HCI_LM_AUTH
;
1102 conn
->sec_level
= conn
->pending_sec_level
;
1104 conn
->sec_level
= BT_SECURITY_LOW
;
1106 clear_bit(HCI_CONN_AUTH_PEND
, &conn
->pend
);
1108 if (conn
->state
== BT_CONFIG
) {
1109 if (!ev
->status
&& hdev
->ssp_mode
> 0 &&
1110 conn
->ssp_mode
> 0) {
1111 struct hci_cp_set_conn_encrypt cp
;
1112 cp
.handle
= ev
->handle
;
1114 hci_send_cmd(hdev
, HCI_OP_SET_CONN_ENCRYPT
,
1117 conn
->state
= BT_CONNECTED
;
1118 hci_proto_connect_cfm(conn
, ev
->status
);
1122 hci_auth_cfm(conn
, ev
->status
);
1124 hci_conn_hold(conn
);
1125 conn
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
1129 if (test_bit(HCI_CONN_ENCRYPT_PEND
, &conn
->pend
)) {
1131 struct hci_cp_set_conn_encrypt cp
;
1132 cp
.handle
= ev
->handle
;
1134 hci_send_cmd(hdev
, HCI_OP_SET_CONN_ENCRYPT
,
1137 clear_bit(HCI_CONN_ENCRYPT_PEND
, &conn
->pend
);
1138 hci_encrypt_cfm(conn
, ev
->status
, 0x00);
1143 hci_dev_unlock(hdev
);
1146 static inline void hci_remote_name_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1148 struct hci_ev_remote_name
*ev
= (void *) skb
->data
;
1149 struct hci_conn
*conn
;
1151 BT_DBG("%s", hdev
->name
);
1153 hci_conn_check_pending(hdev
);
1157 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
1158 if (conn
&& hci_outgoing_auth_needed(hdev
, conn
)) {
1159 struct hci_cp_auth_requested cp
;
1160 cp
.handle
= __cpu_to_le16(conn
->handle
);
1161 hci_send_cmd(hdev
, HCI_OP_AUTH_REQUESTED
, sizeof(cp
), &cp
);
1164 hci_dev_unlock(hdev
);
1167 static inline void hci_encrypt_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1169 struct hci_ev_encrypt_change
*ev
= (void *) skb
->data
;
1170 struct hci_conn
*conn
;
1172 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
1176 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1180 /* Encryption implies authentication */
1181 conn
->link_mode
|= HCI_LM_AUTH
;
1182 conn
->link_mode
|= HCI_LM_ENCRYPT
;
1184 conn
->link_mode
&= ~HCI_LM_ENCRYPT
;
1187 clear_bit(HCI_CONN_ENCRYPT_PEND
, &conn
->pend
);
1189 if (conn
->state
== BT_CONFIG
) {
1191 conn
->state
= BT_CONNECTED
;
1193 hci_proto_connect_cfm(conn
, ev
->status
);
1196 hci_encrypt_cfm(conn
, ev
->status
, ev
->encrypt
);
1199 hci_dev_unlock(hdev
);
1202 static inline void hci_change_link_key_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1204 struct hci_ev_change_link_key_complete
*ev
= (void *) skb
->data
;
1205 struct hci_conn
*conn
;
1207 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
1211 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1214 conn
->link_mode
|= HCI_LM_SECURE
;
1216 clear_bit(HCI_CONN_AUTH_PEND
, &conn
->pend
);
1218 hci_key_change_cfm(conn
, ev
->status
);
1221 hci_dev_unlock(hdev
);
1224 static inline void hci_remote_features_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1226 struct hci_ev_remote_features
*ev
= (void *) skb
->data
;
1227 struct hci_conn
*conn
;
1229 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
1233 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1238 memcpy(conn
->features
, ev
->features
, 8);
1240 if (conn
->state
!= BT_CONFIG
)
1243 if (!ev
->status
&& lmp_ssp_capable(hdev
) && lmp_ssp_capable(conn
)) {
1244 struct hci_cp_read_remote_ext_features cp
;
1245 cp
.handle
= ev
->handle
;
1247 hci_send_cmd(hdev
, HCI_OP_READ_REMOTE_EXT_FEATURES
,
1253 struct hci_cp_remote_name_req cp
;
1254 memset(&cp
, 0, sizeof(cp
));
1255 bacpy(&cp
.bdaddr
, &conn
->dst
);
1256 cp
.pscan_rep_mode
= 0x02;
1257 hci_send_cmd(hdev
, HCI_OP_REMOTE_NAME_REQ
, sizeof(cp
), &cp
);
1260 if (!hci_outgoing_auth_needed(hdev
, conn
)) {
1261 conn
->state
= BT_CONNECTED
;
1262 hci_proto_connect_cfm(conn
, ev
->status
);
1267 hci_dev_unlock(hdev
);
1270 static inline void hci_remote_version_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1272 BT_DBG("%s", hdev
->name
);
1275 static inline void hci_qos_setup_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1277 BT_DBG("%s", hdev
->name
);
1280 static inline void hci_cmd_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1282 struct hci_ev_cmd_complete
*ev
= (void *) skb
->data
;
1285 skb_pull(skb
, sizeof(*ev
));
1287 opcode
= __le16_to_cpu(ev
->opcode
);
1290 case HCI_OP_INQUIRY_CANCEL
:
1291 hci_cc_inquiry_cancel(hdev
, skb
);
1294 case HCI_OP_EXIT_PERIODIC_INQ
:
1295 hci_cc_exit_periodic_inq(hdev
, skb
);
1298 case HCI_OP_REMOTE_NAME_REQ_CANCEL
:
1299 hci_cc_remote_name_req_cancel(hdev
, skb
);
1302 case HCI_OP_ROLE_DISCOVERY
:
1303 hci_cc_role_discovery(hdev
, skb
);
1306 case HCI_OP_READ_LINK_POLICY
:
1307 hci_cc_read_link_policy(hdev
, skb
);
1310 case HCI_OP_WRITE_LINK_POLICY
:
1311 hci_cc_write_link_policy(hdev
, skb
);
1314 case HCI_OP_READ_DEF_LINK_POLICY
:
1315 hci_cc_read_def_link_policy(hdev
, skb
);
1318 case HCI_OP_WRITE_DEF_LINK_POLICY
:
1319 hci_cc_write_def_link_policy(hdev
, skb
);
1323 hci_cc_reset(hdev
, skb
);
1326 case HCI_OP_WRITE_LOCAL_NAME
:
1327 hci_cc_write_local_name(hdev
, skb
);
1330 case HCI_OP_READ_LOCAL_NAME
:
1331 hci_cc_read_local_name(hdev
, skb
);
1334 case HCI_OP_WRITE_AUTH_ENABLE
:
1335 hci_cc_write_auth_enable(hdev
, skb
);
1338 case HCI_OP_WRITE_ENCRYPT_MODE
:
1339 hci_cc_write_encrypt_mode(hdev
, skb
);
1342 case HCI_OP_WRITE_SCAN_ENABLE
:
1343 hci_cc_write_scan_enable(hdev
, skb
);
1346 case HCI_OP_READ_CLASS_OF_DEV
:
1347 hci_cc_read_class_of_dev(hdev
, skb
);
1350 case HCI_OP_WRITE_CLASS_OF_DEV
:
1351 hci_cc_write_class_of_dev(hdev
, skb
);
1354 case HCI_OP_READ_VOICE_SETTING
:
1355 hci_cc_read_voice_setting(hdev
, skb
);
1358 case HCI_OP_WRITE_VOICE_SETTING
:
1359 hci_cc_write_voice_setting(hdev
, skb
);
1362 case HCI_OP_HOST_BUFFER_SIZE
:
1363 hci_cc_host_buffer_size(hdev
, skb
);
1366 case HCI_OP_READ_SSP_MODE
:
1367 hci_cc_read_ssp_mode(hdev
, skb
);
1370 case HCI_OP_WRITE_SSP_MODE
:
1371 hci_cc_write_ssp_mode(hdev
, skb
);
1374 case HCI_OP_READ_LOCAL_VERSION
:
1375 hci_cc_read_local_version(hdev
, skb
);
1378 case HCI_OP_READ_LOCAL_COMMANDS
:
1379 hci_cc_read_local_commands(hdev
, skb
);
1382 case HCI_OP_READ_LOCAL_FEATURES
:
1383 hci_cc_read_local_features(hdev
, skb
);
1386 case HCI_OP_READ_BUFFER_SIZE
:
1387 hci_cc_read_buffer_size(hdev
, skb
);
1390 case HCI_OP_READ_BD_ADDR
:
1391 hci_cc_read_bd_addr(hdev
, skb
);
1394 case HCI_OP_WRITE_CA_TIMEOUT
:
1395 hci_cc_write_ca_timeout(hdev
, skb
);
1399 BT_DBG("%s opcode 0x%x", hdev
->name
, opcode
);
1404 atomic_set(&hdev
->cmd_cnt
, 1);
1405 if (!skb_queue_empty(&hdev
->cmd_q
))
1406 tasklet_schedule(&hdev
->cmd_task
);
1410 static inline void hci_cmd_status_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1412 struct hci_ev_cmd_status
*ev
= (void *) skb
->data
;
1415 skb_pull(skb
, sizeof(*ev
));
1417 opcode
= __le16_to_cpu(ev
->opcode
);
1420 case HCI_OP_INQUIRY
:
1421 hci_cs_inquiry(hdev
, ev
->status
);
1424 case HCI_OP_CREATE_CONN
:
1425 hci_cs_create_conn(hdev
, ev
->status
);
1428 case HCI_OP_ADD_SCO
:
1429 hci_cs_add_sco(hdev
, ev
->status
);
1432 case HCI_OP_AUTH_REQUESTED
:
1433 hci_cs_auth_requested(hdev
, ev
->status
);
1436 case HCI_OP_SET_CONN_ENCRYPT
:
1437 hci_cs_set_conn_encrypt(hdev
, ev
->status
);
1440 case HCI_OP_REMOTE_NAME_REQ
:
1441 hci_cs_remote_name_req(hdev
, ev
->status
);
1444 case HCI_OP_READ_REMOTE_FEATURES
:
1445 hci_cs_read_remote_features(hdev
, ev
->status
);
1448 case HCI_OP_READ_REMOTE_EXT_FEATURES
:
1449 hci_cs_read_remote_ext_features(hdev
, ev
->status
);
1452 case HCI_OP_SETUP_SYNC_CONN
:
1453 hci_cs_setup_sync_conn(hdev
, ev
->status
);
1456 case HCI_OP_SNIFF_MODE
:
1457 hci_cs_sniff_mode(hdev
, ev
->status
);
1460 case HCI_OP_EXIT_SNIFF_MODE
:
1461 hci_cs_exit_sniff_mode(hdev
, ev
->status
);
1465 BT_DBG("%s opcode 0x%x", hdev
->name
, opcode
);
1469 if (ev
->ncmd
&& !test_bit(HCI_RESET
, &hdev
->flags
)) {
1470 atomic_set(&hdev
->cmd_cnt
, 1);
1471 if (!skb_queue_empty(&hdev
->cmd_q
))
1472 tasklet_schedule(&hdev
->cmd_task
);
1476 static inline void hci_role_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1478 struct hci_ev_role_change
*ev
= (void *) skb
->data
;
1479 struct hci_conn
*conn
;
1481 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
1485 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
1489 conn
->link_mode
&= ~HCI_LM_MASTER
;
1491 conn
->link_mode
|= HCI_LM_MASTER
;
1494 clear_bit(HCI_CONN_RSWITCH_PEND
, &conn
->pend
);
1496 hci_role_switch_cfm(conn
, ev
->status
, ev
->role
);
1499 hci_dev_unlock(hdev
);
1502 static inline void hci_num_comp_pkts_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1504 struct hci_ev_num_comp_pkts
*ev
= (void *) skb
->data
;
1508 skb_pull(skb
, sizeof(*ev
));
1510 BT_DBG("%s num_hndl %d", hdev
->name
, ev
->num_hndl
);
1512 if (skb
->len
< ev
->num_hndl
* 4) {
1513 BT_DBG("%s bad parameters", hdev
->name
);
1517 tasklet_disable(&hdev
->tx_task
);
1519 for (i
= 0, ptr
= (__le16
*) skb
->data
; i
< ev
->num_hndl
; i
++) {
1520 struct hci_conn
*conn
;
1521 __u16 handle
, count
;
1523 handle
= get_unaligned_le16(ptr
++);
1524 count
= get_unaligned_le16(ptr
++);
1526 conn
= hci_conn_hash_lookup_handle(hdev
, handle
);
1528 conn
->sent
-= count
;
1530 if (conn
->type
== ACL_LINK
) {
1531 hdev
->acl_cnt
+= count
;
1532 if (hdev
->acl_cnt
> hdev
->acl_pkts
)
1533 hdev
->acl_cnt
= hdev
->acl_pkts
;
1535 hdev
->sco_cnt
+= count
;
1536 if (hdev
->sco_cnt
> hdev
->sco_pkts
)
1537 hdev
->sco_cnt
= hdev
->sco_pkts
;
1542 tasklet_schedule(&hdev
->tx_task
);
1544 tasklet_enable(&hdev
->tx_task
);
1547 static inline void hci_mode_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1549 struct hci_ev_mode_change
*ev
= (void *) skb
->data
;
1550 struct hci_conn
*conn
;
1552 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
1556 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1558 conn
->mode
= ev
->mode
;
1559 conn
->interval
= __le16_to_cpu(ev
->interval
);
1561 if (!test_and_clear_bit(HCI_CONN_MODE_CHANGE_PEND
, &conn
->pend
)) {
1562 if (conn
->mode
== HCI_CM_ACTIVE
)
1563 conn
->power_save
= 1;
1565 conn
->power_save
= 0;
1568 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND
, &conn
->pend
))
1569 hci_sco_setup(conn
, ev
->status
);
1572 hci_dev_unlock(hdev
);
1575 static inline void hci_pin_code_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1577 struct hci_ev_pin_code_req
*ev
= (void *) skb
->data
;
1578 struct hci_conn
*conn
;
1580 BT_DBG("%s", hdev
->name
);
1584 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
1585 if (conn
&& conn
->state
== BT_CONNECTED
) {
1586 hci_conn_hold(conn
);
1587 conn
->disc_timeout
= HCI_PAIRING_TIMEOUT
;
1591 hci_dev_unlock(hdev
);
1594 static inline void hci_link_key_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1596 BT_DBG("%s", hdev
->name
);
1599 static inline void hci_link_key_notify_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1601 struct hci_ev_link_key_notify
*ev
= (void *) skb
->data
;
1602 struct hci_conn
*conn
;
1604 BT_DBG("%s", hdev
->name
);
1608 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
1610 hci_conn_hold(conn
);
1611 conn
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
1615 hci_dev_unlock(hdev
);
1618 static inline void hci_clock_offset_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1620 struct hci_ev_clock_offset
*ev
= (void *) skb
->data
;
1621 struct hci_conn
*conn
;
1623 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
1627 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1628 if (conn
&& !ev
->status
) {
1629 struct inquiry_entry
*ie
;
1631 ie
= hci_inquiry_cache_lookup(hdev
, &conn
->dst
);
1633 ie
->data
.clock_offset
= ev
->clock_offset
;
1634 ie
->timestamp
= jiffies
;
1638 hci_dev_unlock(hdev
);
1641 static inline void hci_pkt_type_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1643 struct hci_ev_pkt_type_change
*ev
= (void *) skb
->data
;
1644 struct hci_conn
*conn
;
1646 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
1650 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1651 if (conn
&& !ev
->status
)
1652 conn
->pkt_type
= __le16_to_cpu(ev
->pkt_type
);
1654 hci_dev_unlock(hdev
);
1657 static inline void hci_pscan_rep_mode_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1659 struct hci_ev_pscan_rep_mode
*ev
= (void *) skb
->data
;
1660 struct inquiry_entry
*ie
;
1662 BT_DBG("%s", hdev
->name
);
1666 ie
= hci_inquiry_cache_lookup(hdev
, &ev
->bdaddr
);
1668 ie
->data
.pscan_rep_mode
= ev
->pscan_rep_mode
;
1669 ie
->timestamp
= jiffies
;
1672 hci_dev_unlock(hdev
);
1675 static inline void hci_inquiry_result_with_rssi_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1677 struct inquiry_data data
;
1678 int num_rsp
= *((__u8
*) skb
->data
);
1680 BT_DBG("%s num_rsp %d", hdev
->name
, num_rsp
);
1687 if ((skb
->len
- 1) / num_rsp
!= sizeof(struct inquiry_info_with_rssi
)) {
1688 struct inquiry_info_with_rssi_and_pscan_mode
*info
= (void *) (skb
->data
+ 1);
1690 for (; num_rsp
; num_rsp
--) {
1691 bacpy(&data
.bdaddr
, &info
->bdaddr
);
1692 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
1693 data
.pscan_period_mode
= info
->pscan_period_mode
;
1694 data
.pscan_mode
= info
->pscan_mode
;
1695 memcpy(data
.dev_class
, info
->dev_class
, 3);
1696 data
.clock_offset
= info
->clock_offset
;
1697 data
.rssi
= info
->rssi
;
1698 data
.ssp_mode
= 0x00;
1700 hci_inquiry_cache_update(hdev
, &data
);
1703 struct inquiry_info_with_rssi
*info
= (void *) (skb
->data
+ 1);
1705 for (; num_rsp
; num_rsp
--) {
1706 bacpy(&data
.bdaddr
, &info
->bdaddr
);
1707 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
1708 data
.pscan_period_mode
= info
->pscan_period_mode
;
1709 data
.pscan_mode
= 0x00;
1710 memcpy(data
.dev_class
, info
->dev_class
, 3);
1711 data
.clock_offset
= info
->clock_offset
;
1712 data
.rssi
= info
->rssi
;
1713 data
.ssp_mode
= 0x00;
1715 hci_inquiry_cache_update(hdev
, &data
);
1719 hci_dev_unlock(hdev
);
1722 static inline void hci_remote_ext_features_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1724 struct hci_ev_remote_ext_features
*ev
= (void *) skb
->data
;
1725 struct hci_conn
*conn
;
1727 BT_DBG("%s", hdev
->name
);
1731 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1735 if (!ev
->status
&& ev
->page
== 0x01) {
1736 struct inquiry_entry
*ie
;
1738 ie
= hci_inquiry_cache_lookup(hdev
, &conn
->dst
);
1740 ie
->data
.ssp_mode
= (ev
->features
[0] & 0x01);
1742 conn
->ssp_mode
= (ev
->features
[0] & 0x01);
1745 if (conn
->state
!= BT_CONFIG
)
1749 struct hci_cp_remote_name_req cp
;
1750 memset(&cp
, 0, sizeof(cp
));
1751 bacpy(&cp
.bdaddr
, &conn
->dst
);
1752 cp
.pscan_rep_mode
= 0x02;
1753 hci_send_cmd(hdev
, HCI_OP_REMOTE_NAME_REQ
, sizeof(cp
), &cp
);
1756 if (!hci_outgoing_auth_needed(hdev
, conn
)) {
1757 conn
->state
= BT_CONNECTED
;
1758 hci_proto_connect_cfm(conn
, ev
->status
);
1763 hci_dev_unlock(hdev
);
1766 static inline void hci_sync_conn_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1768 struct hci_ev_sync_conn_complete
*ev
= (void *) skb
->data
;
1769 struct hci_conn
*conn
;
1771 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
1775 conn
= hci_conn_hash_lookup_ba(hdev
, ev
->link_type
, &ev
->bdaddr
);
1777 if (ev
->link_type
== ESCO_LINK
)
1780 conn
= hci_conn_hash_lookup_ba(hdev
, ESCO_LINK
, &ev
->bdaddr
);
1784 conn
->type
= SCO_LINK
;
1787 switch (ev
->status
) {
1789 conn
->handle
= __le16_to_cpu(ev
->handle
);
1790 conn
->state
= BT_CONNECTED
;
1792 hci_conn_hold_device(conn
);
1793 hci_conn_add_sysfs(conn
);
1796 case 0x11: /* Unsupported Feature or Parameter Value */
1797 case 0x1c: /* SCO interval rejected */
1798 case 0x1a: /* Unsupported Remote Feature */
1799 case 0x1f: /* Unspecified error */
1800 if (conn
->out
&& conn
->attempt
< 2) {
1801 conn
->pkt_type
= (hdev
->esco_type
& SCO_ESCO_MASK
) |
1802 (hdev
->esco_type
& EDR_ESCO_MASK
);
1803 hci_setup_sync(conn
, conn
->link
->handle
);
1809 conn
->state
= BT_CLOSED
;
1813 hci_proto_connect_cfm(conn
, ev
->status
);
1818 hci_dev_unlock(hdev
);
1821 static inline void hci_sync_conn_changed_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1823 BT_DBG("%s", hdev
->name
);
1826 static inline void hci_sniff_subrate_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1828 struct hci_ev_sniff_subrate
*ev
= (void *) skb
->data
;
1829 struct hci_conn
*conn
;
1831 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
1835 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1839 hci_dev_unlock(hdev
);
1842 static inline void hci_extended_inquiry_result_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1844 struct inquiry_data data
;
1845 struct extended_inquiry_info
*info
= (void *) (skb
->data
+ 1);
1846 int num_rsp
= *((__u8
*) skb
->data
);
1848 BT_DBG("%s num_rsp %d", hdev
->name
, num_rsp
);
1855 for (; num_rsp
; num_rsp
--) {
1856 bacpy(&data
.bdaddr
, &info
->bdaddr
);
1857 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
1858 data
.pscan_period_mode
= info
->pscan_period_mode
;
1859 data
.pscan_mode
= 0x00;
1860 memcpy(data
.dev_class
, info
->dev_class
, 3);
1861 data
.clock_offset
= info
->clock_offset
;
1862 data
.rssi
= info
->rssi
;
1863 data
.ssp_mode
= 0x01;
1865 hci_inquiry_cache_update(hdev
, &data
);
1868 hci_dev_unlock(hdev
);
1871 static inline void hci_io_capa_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1873 struct hci_ev_io_capa_request
*ev
= (void *) skb
->data
;
1874 struct hci_conn
*conn
;
1876 BT_DBG("%s", hdev
->name
);
1880 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
1882 hci_conn_hold(conn
);
1884 hci_dev_unlock(hdev
);
1887 static inline void hci_simple_pair_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1889 struct hci_ev_simple_pair_complete
*ev
= (void *) skb
->data
;
1890 struct hci_conn
*conn
;
1892 BT_DBG("%s", hdev
->name
);
1896 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
1900 hci_dev_unlock(hdev
);
1903 static inline void hci_remote_host_features_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1905 struct hci_ev_remote_host_features
*ev
= (void *) skb
->data
;
1906 struct inquiry_entry
*ie
;
1908 BT_DBG("%s", hdev
->name
);
1912 ie
= hci_inquiry_cache_lookup(hdev
, &ev
->bdaddr
);
1914 ie
->data
.ssp_mode
= (ev
->features
[0] & 0x01);
1916 hci_dev_unlock(hdev
);
1919 void hci_event_packet(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1921 struct hci_event_hdr
*hdr
= (void *) skb
->data
;
1922 __u8 event
= hdr
->evt
;
1924 skb_pull(skb
, HCI_EVENT_HDR_SIZE
);
1927 case HCI_EV_INQUIRY_COMPLETE
:
1928 hci_inquiry_complete_evt(hdev
, skb
);
1931 case HCI_EV_INQUIRY_RESULT
:
1932 hci_inquiry_result_evt(hdev
, skb
);
1935 case HCI_EV_CONN_COMPLETE
:
1936 hci_conn_complete_evt(hdev
, skb
);
1939 case HCI_EV_CONN_REQUEST
:
1940 hci_conn_request_evt(hdev
, skb
);
1943 case HCI_EV_DISCONN_COMPLETE
:
1944 hci_disconn_complete_evt(hdev
, skb
);
1947 case HCI_EV_AUTH_COMPLETE
:
1948 hci_auth_complete_evt(hdev
, skb
);
1951 case HCI_EV_REMOTE_NAME
:
1952 hci_remote_name_evt(hdev
, skb
);
1955 case HCI_EV_ENCRYPT_CHANGE
:
1956 hci_encrypt_change_evt(hdev
, skb
);
1959 case HCI_EV_CHANGE_LINK_KEY_COMPLETE
:
1960 hci_change_link_key_complete_evt(hdev
, skb
);
1963 case HCI_EV_REMOTE_FEATURES
:
1964 hci_remote_features_evt(hdev
, skb
);
1967 case HCI_EV_REMOTE_VERSION
:
1968 hci_remote_version_evt(hdev
, skb
);
1971 case HCI_EV_QOS_SETUP_COMPLETE
:
1972 hci_qos_setup_complete_evt(hdev
, skb
);
1975 case HCI_EV_CMD_COMPLETE
:
1976 hci_cmd_complete_evt(hdev
, skb
);
1979 case HCI_EV_CMD_STATUS
:
1980 hci_cmd_status_evt(hdev
, skb
);
1983 case HCI_EV_ROLE_CHANGE
:
1984 hci_role_change_evt(hdev
, skb
);
1987 case HCI_EV_NUM_COMP_PKTS
:
1988 hci_num_comp_pkts_evt(hdev
, skb
);
1991 case HCI_EV_MODE_CHANGE
:
1992 hci_mode_change_evt(hdev
, skb
);
1995 case HCI_EV_PIN_CODE_REQ
:
1996 hci_pin_code_request_evt(hdev
, skb
);
1999 case HCI_EV_LINK_KEY_REQ
:
2000 hci_link_key_request_evt(hdev
, skb
);
2003 case HCI_EV_LINK_KEY_NOTIFY
:
2004 hci_link_key_notify_evt(hdev
, skb
);
2007 case HCI_EV_CLOCK_OFFSET
:
2008 hci_clock_offset_evt(hdev
, skb
);
2011 case HCI_EV_PKT_TYPE_CHANGE
:
2012 hci_pkt_type_change_evt(hdev
, skb
);
2015 case HCI_EV_PSCAN_REP_MODE
:
2016 hci_pscan_rep_mode_evt(hdev
, skb
);
2019 case HCI_EV_INQUIRY_RESULT_WITH_RSSI
:
2020 hci_inquiry_result_with_rssi_evt(hdev
, skb
);
2023 case HCI_EV_REMOTE_EXT_FEATURES
:
2024 hci_remote_ext_features_evt(hdev
, skb
);
2027 case HCI_EV_SYNC_CONN_COMPLETE
:
2028 hci_sync_conn_complete_evt(hdev
, skb
);
2031 case HCI_EV_SYNC_CONN_CHANGED
:
2032 hci_sync_conn_changed_evt(hdev
, skb
);
2035 case HCI_EV_SNIFF_SUBRATE
:
2036 hci_sniff_subrate_evt(hdev
, skb
);
2039 case HCI_EV_EXTENDED_INQUIRY_RESULT
:
2040 hci_extended_inquiry_result_evt(hdev
, skb
);
2043 case HCI_EV_IO_CAPA_REQUEST
:
2044 hci_io_capa_request_evt(hdev
, skb
);
2047 case HCI_EV_SIMPLE_PAIR_COMPLETE
:
2048 hci_simple_pair_complete_evt(hdev
, skb
);
2051 case HCI_EV_REMOTE_HOST_FEATURES
:
2052 hci_remote_host_features_evt(hdev
, skb
);
2056 BT_DBG("%s event 0x%x", hdev
->name
, event
);
2061 hdev
->stat
.evt_rx
++;
2064 /* Generate internal stack event */
2065 void hci_si_event(struct hci_dev
*hdev
, int type
, int dlen
, void *data
)
2067 struct hci_event_hdr
*hdr
;
2068 struct hci_ev_stack_internal
*ev
;
2069 struct sk_buff
*skb
;
2071 skb
= bt_skb_alloc(HCI_EVENT_HDR_SIZE
+ sizeof(*ev
) + dlen
, GFP_ATOMIC
);
2075 hdr
= (void *) skb_put(skb
, HCI_EVENT_HDR_SIZE
);
2076 hdr
->evt
= HCI_EV_STACK_INTERNAL
;
2077 hdr
->plen
= sizeof(*ev
) + dlen
;
2079 ev
= (void *) skb_put(skb
, sizeof(*ev
) + dlen
);
2081 memcpy(ev
->data
, data
, dlen
);
2083 bt_cb(skb
)->incoming
= 1;
2084 __net_timestamp(skb
);
2086 bt_cb(skb
)->pkt_type
= HCI_EVENT_PKT
;
2087 skb
->dev
= (void *) hdev
;
2088 hci_send_to_sock(hdev
, skb
);