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 static bool enable_le
;
50 /* Handle HCI Event packets */
52 static void hci_cc_inquiry_cancel(struct hci_dev
*hdev
, struct sk_buff
*skb
)
54 __u8 status
= *((__u8
*) skb
->data
);
56 BT_DBG("%s status 0x%x", hdev
->name
, status
);
60 mgmt_stop_discovery_failed(hdev
, status
);
65 clear_bit(HCI_INQUIRY
, &hdev
->flags
);
68 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
71 hci_req_complete(hdev
, HCI_OP_INQUIRY_CANCEL
, status
);
73 hci_conn_check_pending(hdev
);
76 static void hci_cc_exit_periodic_inq(struct hci_dev
*hdev
, struct sk_buff
*skb
)
78 __u8 status
= *((__u8
*) skb
->data
);
80 BT_DBG("%s status 0x%x", hdev
->name
, status
);
85 hci_conn_check_pending(hdev
);
88 static void hci_cc_remote_name_req_cancel(struct hci_dev
*hdev
, struct sk_buff
*skb
)
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%x", 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%x", 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%x", 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
, struct sk_buff
*skb
)
161 struct hci_rp_read_def_link_policy
*rp
= (void *) skb
->data
;
163 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
168 hdev
->link_policy
= __le16_to_cpu(rp
->policy
);
171 static void hci_cc_write_def_link_policy(struct hci_dev
*hdev
, struct sk_buff
*skb
)
173 __u8 status
= *((__u8
*) skb
->data
);
176 BT_DBG("%s status 0x%x", hdev
->name
, status
);
178 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_DEF_LINK_POLICY
);
183 hdev
->link_policy
= get_unaligned_le16(sent
);
185 hci_req_complete(hdev
, HCI_OP_WRITE_DEF_LINK_POLICY
, status
);
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%x", hdev
->name
, status
);
194 clear_bit(HCI_RESET
, &hdev
->flags
);
196 hci_req_complete(hdev
, HCI_OP_RESET
, status
);
198 /* Reset all flags, except persistent ones */
199 hdev
->dev_flags
&= BIT(HCI_MGMT
) | BIT(HCI_SETUP
) | BIT(HCI_AUTO_OFF
) |
200 BIT(HCI_LINK_KEYS
) | BIT(HCI_DEBUG_KEYS
);
203 static void hci_cc_write_local_name(struct hci_dev
*hdev
, struct sk_buff
*skb
)
205 __u8 status
= *((__u8
*) skb
->data
);
208 BT_DBG("%s status 0x%x", hdev
->name
, status
);
210 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_LOCAL_NAME
);
216 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
217 mgmt_set_local_name_complete(hdev
, sent
, status
);
220 memcpy(hdev
->dev_name
, sent
, HCI_MAX_NAME_LENGTH
);
222 hci_dev_unlock(hdev
);
225 static void hci_cc_read_local_name(struct hci_dev
*hdev
, struct sk_buff
*skb
)
227 struct hci_rp_read_local_name
*rp
= (void *) skb
->data
;
229 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
234 memcpy(hdev
->dev_name
, rp
->name
, HCI_MAX_NAME_LENGTH
);
237 static void hci_cc_write_auth_enable(struct hci_dev
*hdev
, struct sk_buff
*skb
)
239 __u8 status
= *((__u8
*) skb
->data
);
242 BT_DBG("%s status 0x%x", hdev
->name
, status
);
244 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_AUTH_ENABLE
);
249 __u8 param
= *((__u8
*) sent
);
251 if (param
== AUTH_ENABLED
)
252 set_bit(HCI_AUTH
, &hdev
->flags
);
254 clear_bit(HCI_AUTH
, &hdev
->flags
);
257 hci_req_complete(hdev
, HCI_OP_WRITE_AUTH_ENABLE
, status
);
260 static void hci_cc_write_encrypt_mode(struct hci_dev
*hdev
, struct sk_buff
*skb
)
262 __u8 status
= *((__u8
*) skb
->data
);
265 BT_DBG("%s status 0x%x", hdev
->name
, status
);
267 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_ENCRYPT_MODE
);
272 __u8 param
= *((__u8
*) sent
);
275 set_bit(HCI_ENCRYPT
, &hdev
->flags
);
277 clear_bit(HCI_ENCRYPT
, &hdev
->flags
);
280 hci_req_complete(hdev
, HCI_OP_WRITE_ENCRYPT_MODE
, status
);
283 static void hci_cc_write_scan_enable(struct hci_dev
*hdev
, struct sk_buff
*skb
)
285 __u8 param
, status
= *((__u8
*) skb
->data
);
286 int old_pscan
, old_iscan
;
289 BT_DBG("%s status 0x%x", hdev
->name
, status
);
291 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_SCAN_ENABLE
);
295 param
= *((__u8
*) sent
);
300 mgmt_write_scan_failed(hdev
, param
, status
);
301 hdev
->discov_timeout
= 0;
305 old_pscan
= test_and_clear_bit(HCI_PSCAN
, &hdev
->flags
);
306 old_iscan
= test_and_clear_bit(HCI_ISCAN
, &hdev
->flags
);
308 if (param
& SCAN_INQUIRY
) {
309 set_bit(HCI_ISCAN
, &hdev
->flags
);
311 mgmt_discoverable(hdev
, 1);
312 if (hdev
->discov_timeout
> 0) {
313 int to
= msecs_to_jiffies(hdev
->discov_timeout
* 1000);
314 queue_delayed_work(hdev
->workqueue
, &hdev
->discov_off
,
317 } else if (old_iscan
)
318 mgmt_discoverable(hdev
, 0);
320 if (param
& SCAN_PAGE
) {
321 set_bit(HCI_PSCAN
, &hdev
->flags
);
323 mgmt_connectable(hdev
, 1);
324 } else if (old_pscan
)
325 mgmt_connectable(hdev
, 0);
328 hci_dev_unlock(hdev
);
329 hci_req_complete(hdev
, HCI_OP_WRITE_SCAN_ENABLE
, status
);
332 static void hci_cc_read_class_of_dev(struct hci_dev
*hdev
, struct sk_buff
*skb
)
334 struct hci_rp_read_class_of_dev
*rp
= (void *) skb
->data
;
336 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
341 memcpy(hdev
->dev_class
, rp
->dev_class
, 3);
343 BT_DBG("%s class 0x%.2x%.2x%.2x", hdev
->name
,
344 hdev
->dev_class
[2], hdev
->dev_class
[1], hdev
->dev_class
[0]);
347 static void hci_cc_write_class_of_dev(struct hci_dev
*hdev
, struct sk_buff
*skb
)
349 __u8 status
= *((__u8
*) skb
->data
);
352 BT_DBG("%s status 0x%x", hdev
->name
, status
);
357 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_CLASS_OF_DEV
);
361 memcpy(hdev
->dev_class
, sent
, 3);
364 static void hci_cc_read_voice_setting(struct hci_dev
*hdev
, struct sk_buff
*skb
)
366 struct hci_rp_read_voice_setting
*rp
= (void *) skb
->data
;
369 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
374 setting
= __le16_to_cpu(rp
->voice_setting
);
376 if (hdev
->voice_setting
== setting
)
379 hdev
->voice_setting
= setting
;
381 BT_DBG("%s voice setting 0x%04x", hdev
->name
, setting
);
384 hdev
->notify(hdev
, HCI_NOTIFY_VOICE_SETTING
);
387 static void hci_cc_write_voice_setting(struct hci_dev
*hdev
, struct sk_buff
*skb
)
389 __u8 status
= *((__u8
*) skb
->data
);
393 BT_DBG("%s status 0x%x", hdev
->name
, status
);
398 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_VOICE_SETTING
);
402 setting
= get_unaligned_le16(sent
);
404 if (hdev
->voice_setting
== setting
)
407 hdev
->voice_setting
= setting
;
409 BT_DBG("%s voice setting 0x%04x", hdev
->name
, setting
);
412 hdev
->notify(hdev
, HCI_NOTIFY_VOICE_SETTING
);
415 static void hci_cc_host_buffer_size(struct hci_dev
*hdev
, struct sk_buff
*skb
)
417 __u8 status
= *((__u8
*) skb
->data
);
419 BT_DBG("%s status 0x%x", hdev
->name
, status
);
421 hci_req_complete(hdev
, HCI_OP_HOST_BUFFER_SIZE
, status
);
424 static void hci_cc_read_ssp_mode(struct hci_dev
*hdev
, struct sk_buff
*skb
)
426 struct hci_rp_read_ssp_mode
*rp
= (void *) skb
->data
;
428 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
434 set_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
);
436 clear_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
);
439 static void hci_cc_write_ssp_mode(struct hci_dev
*hdev
, struct sk_buff
*skb
)
441 __u8 status
= *((__u8
*) skb
->data
);
444 BT_DBG("%s status 0x%x", hdev
->name
, status
);
449 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_SSP_MODE
);
454 set_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
);
456 clear_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
);
459 static u8
hci_get_inquiry_mode(struct hci_dev
*hdev
)
461 if (hdev
->features
[6] & LMP_EXT_INQ
)
464 if (hdev
->features
[3] & LMP_RSSI_INQ
)
467 if (hdev
->manufacturer
== 11 && hdev
->hci_rev
== 0x00 &&
468 hdev
->lmp_subver
== 0x0757)
471 if (hdev
->manufacturer
== 15) {
472 if (hdev
->hci_rev
== 0x03 && hdev
->lmp_subver
== 0x6963)
474 if (hdev
->hci_rev
== 0x09 && hdev
->lmp_subver
== 0x6963)
476 if (hdev
->hci_rev
== 0x00 && hdev
->lmp_subver
== 0x6965)
480 if (hdev
->manufacturer
== 31 && hdev
->hci_rev
== 0x2005 &&
481 hdev
->lmp_subver
== 0x1805)
487 static void hci_setup_inquiry_mode(struct hci_dev
*hdev
)
491 mode
= hci_get_inquiry_mode(hdev
);
493 hci_send_cmd(hdev
, HCI_OP_WRITE_INQUIRY_MODE
, 1, &mode
);
496 static void hci_setup_event_mask(struct hci_dev
*hdev
)
498 /* The second byte is 0xff instead of 0x9f (two reserved bits
499 * disabled) since a Broadcom 1.2 dongle doesn't respond to the
500 * command otherwise */
501 u8 events
[8] = { 0xff, 0xff, 0xfb, 0xff, 0x00, 0x00, 0x00, 0x00 };
503 /* CSR 1.1 dongles does not accept any bitfield so don't try to set
504 * any event mask for pre 1.2 devices */
505 if (hdev
->hci_ver
< BLUETOOTH_VER_1_2
)
508 events
[4] |= 0x01; /* Flow Specification Complete */
509 events
[4] |= 0x02; /* Inquiry Result with RSSI */
510 events
[4] |= 0x04; /* Read Remote Extended Features Complete */
511 events
[5] |= 0x08; /* Synchronous Connection Complete */
512 events
[5] |= 0x10; /* Synchronous Connection Changed */
514 if (hdev
->features
[3] & LMP_RSSI_INQ
)
515 events
[4] |= 0x04; /* Inquiry Result with RSSI */
517 if (hdev
->features
[5] & LMP_SNIFF_SUBR
)
518 events
[5] |= 0x20; /* Sniff Subrating */
520 if (hdev
->features
[5] & LMP_PAUSE_ENC
)
521 events
[5] |= 0x80; /* Encryption Key Refresh Complete */
523 if (hdev
->features
[6] & LMP_EXT_INQ
)
524 events
[5] |= 0x40; /* Extended Inquiry Result */
526 if (hdev
->features
[6] & LMP_NO_FLUSH
)
527 events
[7] |= 0x01; /* Enhanced Flush Complete */
529 if (hdev
->features
[7] & LMP_LSTO
)
530 events
[6] |= 0x80; /* Link Supervision Timeout Changed */
532 if (hdev
->features
[6] & LMP_SIMPLE_PAIR
) {
533 events
[6] |= 0x01; /* IO Capability Request */
534 events
[6] |= 0x02; /* IO Capability Response */
535 events
[6] |= 0x04; /* User Confirmation Request */
536 events
[6] |= 0x08; /* User Passkey Request */
537 events
[6] |= 0x10; /* Remote OOB Data Request */
538 events
[6] |= 0x20; /* Simple Pairing Complete */
539 events
[7] |= 0x04; /* User Passkey Notification */
540 events
[7] |= 0x08; /* Keypress Notification */
541 events
[7] |= 0x10; /* Remote Host Supported
542 * Features Notification */
545 if (hdev
->features
[4] & LMP_LE
)
546 events
[7] |= 0x20; /* LE Meta-Event */
548 hci_send_cmd(hdev
, HCI_OP_SET_EVENT_MASK
, sizeof(events
), events
);
551 static void hci_set_le_support(struct hci_dev
*hdev
)
553 struct hci_cp_write_le_host_supported cp
;
555 memset(&cp
, 0, sizeof(cp
));
559 cp
.simul
= !!(hdev
->features
[6] & LMP_SIMUL_LE_BR
);
562 hci_send_cmd(hdev
, HCI_OP_WRITE_LE_HOST_SUPPORTED
, sizeof(cp
), &cp
);
565 static void hci_setup(struct hci_dev
*hdev
)
567 if (hdev
->dev_type
!= HCI_BREDR
)
570 hci_setup_event_mask(hdev
);
572 if (hdev
->hci_ver
> BLUETOOTH_VER_1_1
)
573 hci_send_cmd(hdev
, HCI_OP_READ_LOCAL_COMMANDS
, 0, NULL
);
575 if (hdev
->features
[6] & LMP_SIMPLE_PAIR
) {
577 hci_send_cmd(hdev
, HCI_OP_WRITE_SSP_MODE
, sizeof(mode
), &mode
);
580 if (hdev
->features
[3] & LMP_RSSI_INQ
)
581 hci_setup_inquiry_mode(hdev
);
583 if (hdev
->features
[7] & LMP_INQ_TX_PWR
)
584 hci_send_cmd(hdev
, HCI_OP_READ_INQ_RSP_TX_POWER
, 0, NULL
);
586 if (hdev
->features
[7] & LMP_EXTFEATURES
) {
587 struct hci_cp_read_local_ext_features cp
;
590 hci_send_cmd(hdev
, HCI_OP_READ_LOCAL_EXT_FEATURES
,
594 if (hdev
->features
[4] & LMP_LE
)
595 hci_set_le_support(hdev
);
598 static void hci_cc_read_local_version(struct hci_dev
*hdev
, struct sk_buff
*skb
)
600 struct hci_rp_read_local_version
*rp
= (void *) skb
->data
;
602 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
607 hdev
->hci_ver
= rp
->hci_ver
;
608 hdev
->hci_rev
= __le16_to_cpu(rp
->hci_rev
);
609 hdev
->lmp_ver
= rp
->lmp_ver
;
610 hdev
->manufacturer
= __le16_to_cpu(rp
->manufacturer
);
611 hdev
->lmp_subver
= __le16_to_cpu(rp
->lmp_subver
);
613 BT_DBG("%s manufacturer %d hci ver %d:%d", hdev
->name
,
615 hdev
->hci_ver
, hdev
->hci_rev
);
617 if (test_bit(HCI_INIT
, &hdev
->flags
))
621 static void hci_setup_link_policy(struct hci_dev
*hdev
)
625 if (hdev
->features
[0] & LMP_RSWITCH
)
626 link_policy
|= HCI_LP_RSWITCH
;
627 if (hdev
->features
[0] & LMP_HOLD
)
628 link_policy
|= HCI_LP_HOLD
;
629 if (hdev
->features
[0] & LMP_SNIFF
)
630 link_policy
|= HCI_LP_SNIFF
;
631 if (hdev
->features
[1] & LMP_PARK
)
632 link_policy
|= HCI_LP_PARK
;
634 link_policy
= cpu_to_le16(link_policy
);
635 hci_send_cmd(hdev
, HCI_OP_WRITE_DEF_LINK_POLICY
,
636 sizeof(link_policy
), &link_policy
);
639 static void hci_cc_read_local_commands(struct hci_dev
*hdev
, struct sk_buff
*skb
)
641 struct hci_rp_read_local_commands
*rp
= (void *) skb
->data
;
643 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
648 memcpy(hdev
->commands
, rp
->commands
, sizeof(hdev
->commands
));
650 if (test_bit(HCI_INIT
, &hdev
->flags
) && (hdev
->commands
[5] & 0x10))
651 hci_setup_link_policy(hdev
);
654 hci_req_complete(hdev
, HCI_OP_READ_LOCAL_COMMANDS
, rp
->status
);
657 static void hci_cc_read_local_features(struct hci_dev
*hdev
, struct sk_buff
*skb
)
659 struct hci_rp_read_local_features
*rp
= (void *) skb
->data
;
661 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
666 memcpy(hdev
->features
, rp
->features
, 8);
668 /* Adjust default settings according to features
669 * supported by device. */
671 if (hdev
->features
[0] & LMP_3SLOT
)
672 hdev
->pkt_type
|= (HCI_DM3
| HCI_DH3
);
674 if (hdev
->features
[0] & LMP_5SLOT
)
675 hdev
->pkt_type
|= (HCI_DM5
| HCI_DH5
);
677 if (hdev
->features
[1] & LMP_HV2
) {
678 hdev
->pkt_type
|= (HCI_HV2
);
679 hdev
->esco_type
|= (ESCO_HV2
);
682 if (hdev
->features
[1] & LMP_HV3
) {
683 hdev
->pkt_type
|= (HCI_HV3
);
684 hdev
->esco_type
|= (ESCO_HV3
);
687 if (hdev
->features
[3] & LMP_ESCO
)
688 hdev
->esco_type
|= (ESCO_EV3
);
690 if (hdev
->features
[4] & LMP_EV4
)
691 hdev
->esco_type
|= (ESCO_EV4
);
693 if (hdev
->features
[4] & LMP_EV5
)
694 hdev
->esco_type
|= (ESCO_EV5
);
696 if (hdev
->features
[5] & LMP_EDR_ESCO_2M
)
697 hdev
->esco_type
|= (ESCO_2EV3
);
699 if (hdev
->features
[5] & LMP_EDR_ESCO_3M
)
700 hdev
->esco_type
|= (ESCO_3EV3
);
702 if (hdev
->features
[5] & LMP_EDR_3S_ESCO
)
703 hdev
->esco_type
|= (ESCO_2EV5
| ESCO_3EV5
);
705 BT_DBG("%s features 0x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x", hdev
->name
,
706 hdev
->features
[0], hdev
->features
[1],
707 hdev
->features
[2], hdev
->features
[3],
708 hdev
->features
[4], hdev
->features
[5],
709 hdev
->features
[6], hdev
->features
[7]);
712 static void hci_cc_read_local_ext_features(struct hci_dev
*hdev
,
715 struct hci_rp_read_local_ext_features
*rp
= (void *) skb
->data
;
717 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
724 memcpy(hdev
->features
, rp
->features
, 8);
727 memcpy(hdev
->host_features
, rp
->features
, 8);
731 hci_req_complete(hdev
, HCI_OP_READ_LOCAL_EXT_FEATURES
, rp
->status
);
734 static void hci_cc_read_flow_control_mode(struct hci_dev
*hdev
,
737 struct hci_rp_read_flow_control_mode
*rp
= (void *) skb
->data
;
739 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
744 hdev
->flow_ctl_mode
= rp
->mode
;
746 hci_req_complete(hdev
, HCI_OP_READ_FLOW_CONTROL_MODE
, rp
->status
);
749 static void hci_cc_read_buffer_size(struct hci_dev
*hdev
, struct sk_buff
*skb
)
751 struct hci_rp_read_buffer_size
*rp
= (void *) skb
->data
;
753 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
758 hdev
->acl_mtu
= __le16_to_cpu(rp
->acl_mtu
);
759 hdev
->sco_mtu
= rp
->sco_mtu
;
760 hdev
->acl_pkts
= __le16_to_cpu(rp
->acl_max_pkt
);
761 hdev
->sco_pkts
= __le16_to_cpu(rp
->sco_max_pkt
);
763 if (test_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE
, &hdev
->quirks
)) {
768 hdev
->acl_cnt
= hdev
->acl_pkts
;
769 hdev
->sco_cnt
= hdev
->sco_pkts
;
771 BT_DBG("%s acl mtu %d:%d sco mtu %d:%d", hdev
->name
,
772 hdev
->acl_mtu
, hdev
->acl_pkts
,
773 hdev
->sco_mtu
, hdev
->sco_pkts
);
776 static void hci_cc_read_bd_addr(struct hci_dev
*hdev
, struct sk_buff
*skb
)
778 struct hci_rp_read_bd_addr
*rp
= (void *) skb
->data
;
780 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
783 bacpy(&hdev
->bdaddr
, &rp
->bdaddr
);
785 hci_req_complete(hdev
, HCI_OP_READ_BD_ADDR
, rp
->status
);
788 static void hci_cc_read_data_block_size(struct hci_dev
*hdev
,
791 struct hci_rp_read_data_block_size
*rp
= (void *) skb
->data
;
793 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
798 hdev
->block_mtu
= __le16_to_cpu(rp
->max_acl_len
);
799 hdev
->block_len
= __le16_to_cpu(rp
->block_len
);
800 hdev
->num_blocks
= __le16_to_cpu(rp
->num_blocks
);
802 hdev
->block_cnt
= hdev
->num_blocks
;
804 BT_DBG("%s blk mtu %d cnt %d len %d", hdev
->name
, hdev
->block_mtu
,
805 hdev
->block_cnt
, hdev
->block_len
);
807 hci_req_complete(hdev
, HCI_OP_READ_DATA_BLOCK_SIZE
, rp
->status
);
810 static void hci_cc_write_ca_timeout(struct hci_dev
*hdev
, struct sk_buff
*skb
)
812 __u8 status
= *((__u8
*) skb
->data
);
814 BT_DBG("%s status 0x%x", hdev
->name
, status
);
816 hci_req_complete(hdev
, HCI_OP_WRITE_CA_TIMEOUT
, status
);
819 static void hci_cc_read_local_amp_info(struct hci_dev
*hdev
,
822 struct hci_rp_read_local_amp_info
*rp
= (void *) skb
->data
;
824 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
829 hdev
->amp_status
= rp
->amp_status
;
830 hdev
->amp_total_bw
= __le32_to_cpu(rp
->total_bw
);
831 hdev
->amp_max_bw
= __le32_to_cpu(rp
->max_bw
);
832 hdev
->amp_min_latency
= __le32_to_cpu(rp
->min_latency
);
833 hdev
->amp_max_pdu
= __le32_to_cpu(rp
->max_pdu
);
834 hdev
->amp_type
= rp
->amp_type
;
835 hdev
->amp_pal_cap
= __le16_to_cpu(rp
->pal_cap
);
836 hdev
->amp_assoc_size
= __le16_to_cpu(rp
->max_assoc_size
);
837 hdev
->amp_be_flush_to
= __le32_to_cpu(rp
->be_flush_to
);
838 hdev
->amp_max_flush_to
= __le32_to_cpu(rp
->max_flush_to
);
840 hci_req_complete(hdev
, HCI_OP_READ_LOCAL_AMP_INFO
, rp
->status
);
843 static void hci_cc_delete_stored_link_key(struct hci_dev
*hdev
,
846 __u8 status
= *((__u8
*) skb
->data
);
848 BT_DBG("%s status 0x%x", hdev
->name
, status
);
850 hci_req_complete(hdev
, HCI_OP_DELETE_STORED_LINK_KEY
, status
);
853 static void hci_cc_set_event_mask(struct hci_dev
*hdev
, struct sk_buff
*skb
)
855 __u8 status
= *((__u8
*) skb
->data
);
857 BT_DBG("%s status 0x%x", hdev
->name
, status
);
859 hci_req_complete(hdev
, HCI_OP_SET_EVENT_MASK
, status
);
862 static void hci_cc_write_inquiry_mode(struct hci_dev
*hdev
,
865 __u8 status
= *((__u8
*) skb
->data
);
867 BT_DBG("%s status 0x%x", hdev
->name
, status
);
869 hci_req_complete(hdev
, HCI_OP_WRITE_INQUIRY_MODE
, status
);
872 static void hci_cc_read_inq_rsp_tx_power(struct hci_dev
*hdev
,
875 __u8 status
= *((__u8
*) skb
->data
);
877 BT_DBG("%s status 0x%x", hdev
->name
, status
);
879 hci_req_complete(hdev
, HCI_OP_READ_INQ_RSP_TX_POWER
, status
);
882 static void hci_cc_set_event_flt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
884 __u8 status
= *((__u8
*) skb
->data
);
886 BT_DBG("%s status 0x%x", hdev
->name
, status
);
888 hci_req_complete(hdev
, HCI_OP_SET_EVENT_FLT
, status
);
891 static void hci_cc_pin_code_reply(struct hci_dev
*hdev
, struct sk_buff
*skb
)
893 struct hci_rp_pin_code_reply
*rp
= (void *) skb
->data
;
894 struct hci_cp_pin_code_reply
*cp
;
895 struct hci_conn
*conn
;
897 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
901 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
902 mgmt_pin_code_reply_complete(hdev
, &rp
->bdaddr
, rp
->status
);
907 cp
= hci_sent_cmd_data(hdev
, HCI_OP_PIN_CODE_REPLY
);
911 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &cp
->bdaddr
);
913 conn
->pin_length
= cp
->pin_len
;
916 hci_dev_unlock(hdev
);
919 static void hci_cc_pin_code_neg_reply(struct hci_dev
*hdev
, struct sk_buff
*skb
)
921 struct hci_rp_pin_code_neg_reply
*rp
= (void *) skb
->data
;
923 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
927 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
928 mgmt_pin_code_neg_reply_complete(hdev
, &rp
->bdaddr
,
931 hci_dev_unlock(hdev
);
934 static void hci_cc_le_read_buffer_size(struct hci_dev
*hdev
,
937 struct hci_rp_le_read_buffer_size
*rp
= (void *) skb
->data
;
939 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
944 hdev
->le_mtu
= __le16_to_cpu(rp
->le_mtu
);
945 hdev
->le_pkts
= rp
->le_max_pkt
;
947 hdev
->le_cnt
= hdev
->le_pkts
;
949 BT_DBG("%s le mtu %d:%d", hdev
->name
, hdev
->le_mtu
, hdev
->le_pkts
);
951 hci_req_complete(hdev
, HCI_OP_LE_READ_BUFFER_SIZE
, rp
->status
);
954 static void hci_cc_user_confirm_reply(struct hci_dev
*hdev
, struct sk_buff
*skb
)
956 struct hci_rp_user_confirm_reply
*rp
= (void *) skb
->data
;
958 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
962 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
963 mgmt_user_confirm_reply_complete(hdev
, &rp
->bdaddr
,
966 hci_dev_unlock(hdev
);
969 static void hci_cc_user_confirm_neg_reply(struct hci_dev
*hdev
,
972 struct hci_rp_user_confirm_reply
*rp
= (void *) skb
->data
;
974 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
978 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
979 mgmt_user_confirm_neg_reply_complete(hdev
, &rp
->bdaddr
,
982 hci_dev_unlock(hdev
);
985 static void hci_cc_user_passkey_reply(struct hci_dev
*hdev
, struct sk_buff
*skb
)
987 struct hci_rp_user_confirm_reply
*rp
= (void *) skb
->data
;
989 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
993 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
994 mgmt_user_passkey_reply_complete(hdev
, &rp
->bdaddr
,
997 hci_dev_unlock(hdev
);
1000 static void hci_cc_user_passkey_neg_reply(struct hci_dev
*hdev
,
1001 struct sk_buff
*skb
)
1003 struct hci_rp_user_confirm_reply
*rp
= (void *) skb
->data
;
1005 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
1009 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
1010 mgmt_user_passkey_neg_reply_complete(hdev
, &rp
->bdaddr
,
1013 hci_dev_unlock(hdev
);
1016 static void hci_cc_read_local_oob_data_reply(struct hci_dev
*hdev
,
1017 struct sk_buff
*skb
)
1019 struct hci_rp_read_local_oob_data
*rp
= (void *) skb
->data
;
1021 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
1024 mgmt_read_local_oob_data_reply_complete(hdev
, rp
->hash
,
1025 rp
->randomizer
, rp
->status
);
1026 hci_dev_unlock(hdev
);
1029 static void hci_cc_le_set_scan_param(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1031 __u8 status
= *((__u8
*) skb
->data
);
1033 BT_DBG("%s status 0x%x", hdev
->name
, status
);
1035 hci_req_complete(hdev
, HCI_OP_LE_SET_SCAN_PARAM
, status
);
1038 static void hci_cc_le_set_scan_enable(struct hci_dev
*hdev
,
1039 struct sk_buff
*skb
)
1041 struct hci_cp_le_set_scan_enable
*cp
;
1042 __u8 status
= *((__u8
*) skb
->data
);
1044 BT_DBG("%s status 0x%x", hdev
->name
, status
);
1046 cp
= hci_sent_cmd_data(hdev
, HCI_OP_LE_SET_SCAN_ENABLE
);
1050 switch (cp
->enable
) {
1051 case LE_SCANNING_ENABLED
:
1052 hci_req_complete(hdev
, HCI_OP_LE_SET_SCAN_ENABLE
, status
);
1057 set_bit(HCI_LE_SCAN
, &hdev
->dev_flags
);
1059 cancel_delayed_work_sync(&hdev
->adv_work
);
1062 hci_adv_entries_clear(hdev
);
1063 hci_discovery_set_state(hdev
, DISCOVERY_LE_SCAN
);
1064 hci_dev_unlock(hdev
);
1067 case LE_SCANNING_DISABLED
:
1071 clear_bit(HCI_LE_SCAN
, &hdev
->dev_flags
);
1074 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
1075 hci_dev_unlock(hdev
);
1077 schedule_delayed_work(&hdev
->adv_work
, ADV_CLEAR_TIMEOUT
);
1081 BT_ERR("Used reserved LE_Scan_Enable param %d", cp
->enable
);
1086 static void hci_cc_le_ltk_reply(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1088 struct hci_rp_le_ltk_reply
*rp
= (void *) skb
->data
;
1090 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
1095 hci_req_complete(hdev
, HCI_OP_LE_LTK_REPLY
, rp
->status
);
1098 static void hci_cc_le_ltk_neg_reply(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1100 struct hci_rp_le_ltk_neg_reply
*rp
= (void *) skb
->data
;
1102 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
1107 hci_req_complete(hdev
, HCI_OP_LE_LTK_NEG_REPLY
, rp
->status
);
1110 static inline void hci_cc_write_le_host_supported(struct hci_dev
*hdev
,
1111 struct sk_buff
*skb
)
1113 struct hci_cp_read_local_ext_features cp
;
1114 __u8 status
= *((__u8
*) skb
->data
);
1116 BT_DBG("%s status 0x%x", hdev
->name
, status
);
1122 hci_send_cmd(hdev
, HCI_OP_READ_LOCAL_EXT_FEATURES
, sizeof(cp
), &cp
);
1125 static inline void hci_cs_inquiry(struct hci_dev
*hdev
, __u8 status
)
1127 BT_DBG("%s status 0x%x", hdev
->name
, status
);
1130 hci_req_complete(hdev
, HCI_OP_INQUIRY
, status
);
1131 hci_conn_check_pending(hdev
);
1133 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
1134 mgmt_start_discovery_failed(hdev
, status
);
1135 hci_dev_unlock(hdev
);
1139 set_bit(HCI_INQUIRY
, &hdev
->flags
);
1142 hci_discovery_set_state(hdev
, DISCOVERY_INQUIRY
);
1143 hci_dev_unlock(hdev
);
1146 static inline void hci_cs_create_conn(struct hci_dev
*hdev
, __u8 status
)
1148 struct hci_cp_create_conn
*cp
;
1149 struct hci_conn
*conn
;
1151 BT_DBG("%s status 0x%x", hdev
->name
, status
);
1153 cp
= hci_sent_cmd_data(hdev
, HCI_OP_CREATE_CONN
);
1159 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &cp
->bdaddr
);
1161 BT_DBG("%s bdaddr %s conn %p", hdev
->name
, batostr(&cp
->bdaddr
), conn
);
1164 if (conn
&& conn
->state
== BT_CONNECT
) {
1165 if (status
!= 0x0c || conn
->attempt
> 2) {
1166 conn
->state
= BT_CLOSED
;
1167 hci_proto_connect_cfm(conn
, status
);
1170 conn
->state
= BT_CONNECT2
;
1174 conn
= hci_conn_add(hdev
, ACL_LINK
, &cp
->bdaddr
);
1177 conn
->link_mode
|= HCI_LM_MASTER
;
1179 BT_ERR("No memory for new connection");
1183 hci_dev_unlock(hdev
);
1186 static void hci_cs_add_sco(struct hci_dev
*hdev
, __u8 status
)
1188 struct hci_cp_add_sco
*cp
;
1189 struct hci_conn
*acl
, *sco
;
1192 BT_DBG("%s status 0x%x", hdev
->name
, status
);
1197 cp
= hci_sent_cmd_data(hdev
, HCI_OP_ADD_SCO
);
1201 handle
= __le16_to_cpu(cp
->handle
);
1203 BT_DBG("%s handle %d", hdev
->name
, handle
);
1207 acl
= hci_conn_hash_lookup_handle(hdev
, handle
);
1211 sco
->state
= BT_CLOSED
;
1213 hci_proto_connect_cfm(sco
, status
);
1218 hci_dev_unlock(hdev
);
1221 static void hci_cs_auth_requested(struct hci_dev
*hdev
, __u8 status
)
1223 struct hci_cp_auth_requested
*cp
;
1224 struct hci_conn
*conn
;
1226 BT_DBG("%s status 0x%x", hdev
->name
, status
);
1231 cp
= hci_sent_cmd_data(hdev
, HCI_OP_AUTH_REQUESTED
);
1237 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1239 if (conn
->state
== BT_CONFIG
) {
1240 hci_proto_connect_cfm(conn
, status
);
1245 hci_dev_unlock(hdev
);
1248 static void hci_cs_set_conn_encrypt(struct hci_dev
*hdev
, __u8 status
)
1250 struct hci_cp_set_conn_encrypt
*cp
;
1251 struct hci_conn
*conn
;
1253 BT_DBG("%s status 0x%x", hdev
->name
, status
);
1258 cp
= hci_sent_cmd_data(hdev
, HCI_OP_SET_CONN_ENCRYPT
);
1264 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1266 if (conn
->state
== BT_CONFIG
) {
1267 hci_proto_connect_cfm(conn
, status
);
1272 hci_dev_unlock(hdev
);
1275 static int hci_outgoing_auth_needed(struct hci_dev
*hdev
,
1276 struct hci_conn
*conn
)
1278 if (conn
->state
!= BT_CONFIG
|| !conn
->out
)
1281 if (conn
->pending_sec_level
== BT_SECURITY_SDP
)
1284 /* Only request authentication for SSP connections or non-SSP
1285 * devices with sec_level HIGH or if MITM protection is requested */
1286 if (!hci_conn_ssp_enabled(conn
) &&
1287 conn
->pending_sec_level
!= BT_SECURITY_HIGH
&&
1288 !(conn
->auth_type
& 0x01))
1294 static inline int hci_resolve_name(struct hci_dev
*hdev
, struct inquiry_entry
*e
)
1296 struct hci_cp_remote_name_req cp
;
1298 memset(&cp
, 0, sizeof(cp
));
1300 bacpy(&cp
.bdaddr
, &e
->data
.bdaddr
);
1301 cp
.pscan_rep_mode
= e
->data
.pscan_rep_mode
;
1302 cp
.pscan_mode
= e
->data
.pscan_mode
;
1303 cp
.clock_offset
= e
->data
.clock_offset
;
1305 return hci_send_cmd(hdev
, HCI_OP_REMOTE_NAME_REQ
, sizeof(cp
), &cp
);
1308 static bool hci_resolve_next_name(struct hci_dev
*hdev
)
1310 struct discovery_state
*discov
= &hdev
->discovery
;
1311 struct inquiry_entry
*e
;
1313 if (list_empty(&discov
->resolve
))
1316 e
= hci_inquiry_cache_lookup_resolve(hdev
, BDADDR_ANY
, NAME_NEEDED
);
1317 if (hci_resolve_name(hdev
, e
) == 0) {
1318 e
->name_state
= NAME_PENDING
;
1325 static void hci_check_pending_name(struct hci_dev
*hdev
, struct hci_conn
*conn
,
1326 bdaddr_t
*bdaddr
, u8
*name
, u8 name_len
)
1328 struct discovery_state
*discov
= &hdev
->discovery
;
1329 struct inquiry_entry
*e
;
1331 if (conn
&& !test_and_set_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
))
1332 mgmt_device_connected(hdev
, bdaddr
, ACL_LINK
, 0x00,
1333 name
, name_len
, conn
->dev_class
);
1335 if (discov
->state
== DISCOVERY_STOPPED
)
1338 if (discov
->state
== DISCOVERY_STOPPING
)
1339 goto discov_complete
;
1341 if (discov
->state
!= DISCOVERY_RESOLVING
)
1344 e
= hci_inquiry_cache_lookup_resolve(hdev
, bdaddr
, NAME_PENDING
);
1346 e
->name_state
= NAME_KNOWN
;
1349 mgmt_remote_name(hdev
, bdaddr
, ACL_LINK
, 0x00,
1350 e
->data
.rssi
, name
, name_len
);
1353 if (hci_resolve_next_name(hdev
))
1357 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
1360 static void hci_cs_remote_name_req(struct hci_dev
*hdev
, __u8 status
)
1362 struct hci_cp_remote_name_req
*cp
;
1363 struct hci_conn
*conn
;
1365 BT_DBG("%s status 0x%x", hdev
->name
, status
);
1367 /* If successful wait for the name req complete event before
1368 * checking for the need to do authentication */
1372 cp
= hci_sent_cmd_data(hdev
, HCI_OP_REMOTE_NAME_REQ
);
1378 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &cp
->bdaddr
);
1380 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
1381 hci_check_pending_name(hdev
, conn
, &cp
->bdaddr
, NULL
, 0);
1386 if (!hci_outgoing_auth_needed(hdev
, conn
))
1389 if (!test_and_set_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
)) {
1390 struct hci_cp_auth_requested cp
;
1391 cp
.handle
= __cpu_to_le16(conn
->handle
);
1392 hci_send_cmd(hdev
, HCI_OP_AUTH_REQUESTED
, sizeof(cp
), &cp
);
1396 hci_dev_unlock(hdev
);
1399 static void hci_cs_read_remote_features(struct hci_dev
*hdev
, __u8 status
)
1401 struct hci_cp_read_remote_features
*cp
;
1402 struct hci_conn
*conn
;
1404 BT_DBG("%s status 0x%x", hdev
->name
, status
);
1409 cp
= hci_sent_cmd_data(hdev
, HCI_OP_READ_REMOTE_FEATURES
);
1415 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1417 if (conn
->state
== BT_CONFIG
) {
1418 hci_proto_connect_cfm(conn
, status
);
1423 hci_dev_unlock(hdev
);
1426 static void hci_cs_read_remote_ext_features(struct hci_dev
*hdev
, __u8 status
)
1428 struct hci_cp_read_remote_ext_features
*cp
;
1429 struct hci_conn
*conn
;
1431 BT_DBG("%s status 0x%x", hdev
->name
, status
);
1436 cp
= hci_sent_cmd_data(hdev
, HCI_OP_READ_REMOTE_EXT_FEATURES
);
1442 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1444 if (conn
->state
== BT_CONFIG
) {
1445 hci_proto_connect_cfm(conn
, status
);
1450 hci_dev_unlock(hdev
);
1453 static void hci_cs_setup_sync_conn(struct hci_dev
*hdev
, __u8 status
)
1455 struct hci_cp_setup_sync_conn
*cp
;
1456 struct hci_conn
*acl
, *sco
;
1459 BT_DBG("%s status 0x%x", hdev
->name
, status
);
1464 cp
= hci_sent_cmd_data(hdev
, HCI_OP_SETUP_SYNC_CONN
);
1468 handle
= __le16_to_cpu(cp
->handle
);
1470 BT_DBG("%s handle %d", hdev
->name
, handle
);
1474 acl
= hci_conn_hash_lookup_handle(hdev
, handle
);
1478 sco
->state
= BT_CLOSED
;
1480 hci_proto_connect_cfm(sco
, status
);
1485 hci_dev_unlock(hdev
);
1488 static void hci_cs_sniff_mode(struct hci_dev
*hdev
, __u8 status
)
1490 struct hci_cp_sniff_mode
*cp
;
1491 struct hci_conn
*conn
;
1493 BT_DBG("%s status 0x%x", hdev
->name
, status
);
1498 cp
= hci_sent_cmd_data(hdev
, HCI_OP_SNIFF_MODE
);
1504 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1506 clear_bit(HCI_CONN_MODE_CHANGE_PEND
, &conn
->flags
);
1508 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND
, &conn
->flags
))
1509 hci_sco_setup(conn
, status
);
1512 hci_dev_unlock(hdev
);
1515 static void hci_cs_exit_sniff_mode(struct hci_dev
*hdev
, __u8 status
)
1517 struct hci_cp_exit_sniff_mode
*cp
;
1518 struct hci_conn
*conn
;
1520 BT_DBG("%s status 0x%x", hdev
->name
, status
);
1525 cp
= hci_sent_cmd_data(hdev
, HCI_OP_EXIT_SNIFF_MODE
);
1531 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1533 clear_bit(HCI_CONN_MODE_CHANGE_PEND
, &conn
->flags
);
1535 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND
, &conn
->flags
))
1536 hci_sco_setup(conn
, status
);
1539 hci_dev_unlock(hdev
);
1542 static void hci_cs_le_create_conn(struct hci_dev
*hdev
, __u8 status
)
1544 struct hci_cp_le_create_conn
*cp
;
1545 struct hci_conn
*conn
;
1547 BT_DBG("%s status 0x%x", hdev
->name
, status
);
1549 cp
= hci_sent_cmd_data(hdev
, HCI_OP_LE_CREATE_CONN
);
1555 conn
= hci_conn_hash_lookup_ba(hdev
, LE_LINK
, &cp
->peer_addr
);
1557 BT_DBG("%s bdaddr %s conn %p", hdev
->name
, batostr(&cp
->peer_addr
),
1561 if (conn
&& conn
->state
== BT_CONNECT
) {
1562 conn
->state
= BT_CLOSED
;
1563 hci_proto_connect_cfm(conn
, status
);
1568 conn
= hci_conn_add(hdev
, LE_LINK
, &cp
->peer_addr
);
1570 conn
->dst_type
= cp
->peer_addr_type
;
1573 BT_ERR("No memory for new connection");
1578 hci_dev_unlock(hdev
);
1581 static void hci_cs_le_start_enc(struct hci_dev
*hdev
, u8 status
)
1583 BT_DBG("%s status 0x%x", hdev
->name
, status
);
1586 static inline void hci_inquiry_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1588 __u8 status
= *((__u8
*) skb
->data
);
1589 struct discovery_state
*discov
= &hdev
->discovery
;
1590 struct inquiry_entry
*e
;
1592 BT_DBG("%s status %d", hdev
->name
, status
);
1594 hci_req_complete(hdev
, HCI_OP_INQUIRY
, status
);
1596 hci_conn_check_pending(hdev
);
1598 if (!test_and_clear_bit(HCI_INQUIRY
, &hdev
->flags
))
1601 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
1606 if (discov
->state
!= DISCOVERY_INQUIRY
)
1609 if (list_empty(&discov
->resolve
)) {
1610 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
1614 e
= hci_inquiry_cache_lookup_resolve(hdev
, BDADDR_ANY
, NAME_NEEDED
);
1615 if (e
&& hci_resolve_name(hdev
, e
) == 0) {
1616 e
->name_state
= NAME_PENDING
;
1617 hci_discovery_set_state(hdev
, DISCOVERY_RESOLVING
);
1619 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
1623 hci_dev_unlock(hdev
);
1626 static inline void hci_inquiry_result_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1628 struct inquiry_data data
;
1629 struct inquiry_info
*info
= (void *) (skb
->data
+ 1);
1630 int num_rsp
= *((__u8
*) skb
->data
);
1632 BT_DBG("%s num_rsp %d", hdev
->name
, num_rsp
);
1639 for (; num_rsp
; num_rsp
--, info
++) {
1642 bacpy(&data
.bdaddr
, &info
->bdaddr
);
1643 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
1644 data
.pscan_period_mode
= info
->pscan_period_mode
;
1645 data
.pscan_mode
= info
->pscan_mode
;
1646 memcpy(data
.dev_class
, info
->dev_class
, 3);
1647 data
.clock_offset
= info
->clock_offset
;
1649 data
.ssp_mode
= 0x00;
1651 name_known
= hci_inquiry_cache_update(hdev
, &data
, false);
1652 mgmt_device_found(hdev
, &info
->bdaddr
, ACL_LINK
, 0x00,
1653 info
->dev_class
, 0, !name_known
,
1657 hci_dev_unlock(hdev
);
1660 static inline void hci_conn_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1662 struct hci_ev_conn_complete
*ev
= (void *) skb
->data
;
1663 struct hci_conn
*conn
;
1665 BT_DBG("%s", hdev
->name
);
1669 conn
= hci_conn_hash_lookup_ba(hdev
, ev
->link_type
, &ev
->bdaddr
);
1671 if (ev
->link_type
!= SCO_LINK
)
1674 conn
= hci_conn_hash_lookup_ba(hdev
, ESCO_LINK
, &ev
->bdaddr
);
1678 conn
->type
= SCO_LINK
;
1682 conn
->handle
= __le16_to_cpu(ev
->handle
);
1684 if (conn
->type
== ACL_LINK
) {
1685 conn
->state
= BT_CONFIG
;
1686 hci_conn_hold(conn
);
1687 conn
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
1689 conn
->state
= BT_CONNECTED
;
1691 hci_conn_hold_device(conn
);
1692 hci_conn_add_sysfs(conn
);
1694 if (test_bit(HCI_AUTH
, &hdev
->flags
))
1695 conn
->link_mode
|= HCI_LM_AUTH
;
1697 if (test_bit(HCI_ENCRYPT
, &hdev
->flags
))
1698 conn
->link_mode
|= HCI_LM_ENCRYPT
;
1700 /* Get remote features */
1701 if (conn
->type
== ACL_LINK
) {
1702 struct hci_cp_read_remote_features cp
;
1703 cp
.handle
= ev
->handle
;
1704 hci_send_cmd(hdev
, HCI_OP_READ_REMOTE_FEATURES
,
1708 /* Set packet type for incoming connection */
1709 if (!conn
->out
&& hdev
->hci_ver
< BLUETOOTH_VER_2_0
) {
1710 struct hci_cp_change_conn_ptype cp
;
1711 cp
.handle
= ev
->handle
;
1712 cp
.pkt_type
= cpu_to_le16(conn
->pkt_type
);
1713 hci_send_cmd(hdev
, HCI_OP_CHANGE_CONN_PTYPE
,
1717 conn
->state
= BT_CLOSED
;
1718 if (conn
->type
== ACL_LINK
)
1719 mgmt_connect_failed(hdev
, &ev
->bdaddr
, conn
->type
,
1720 conn
->dst_type
, ev
->status
);
1723 if (conn
->type
== ACL_LINK
)
1724 hci_sco_setup(conn
, ev
->status
);
1727 hci_proto_connect_cfm(conn
, ev
->status
);
1729 } else if (ev
->link_type
!= ACL_LINK
)
1730 hci_proto_connect_cfm(conn
, ev
->status
);
1733 hci_dev_unlock(hdev
);
1735 hci_conn_check_pending(hdev
);
1738 static inline void hci_conn_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1740 struct hci_ev_conn_request
*ev
= (void *) skb
->data
;
1741 int mask
= hdev
->link_mode
;
1743 BT_DBG("%s bdaddr %s type 0x%x", hdev
->name
,
1744 batostr(&ev
->bdaddr
), ev
->link_type
);
1746 mask
|= hci_proto_connect_ind(hdev
, &ev
->bdaddr
, ev
->link_type
);
1748 if ((mask
& HCI_LM_ACCEPT
) &&
1749 !hci_blacklist_lookup(hdev
, &ev
->bdaddr
)) {
1750 /* Connection accepted */
1751 struct inquiry_entry
*ie
;
1752 struct hci_conn
*conn
;
1756 ie
= hci_inquiry_cache_lookup(hdev
, &ev
->bdaddr
);
1758 memcpy(ie
->data
.dev_class
, ev
->dev_class
, 3);
1760 conn
= hci_conn_hash_lookup_ba(hdev
, ev
->link_type
, &ev
->bdaddr
);
1762 conn
= hci_conn_add(hdev
, ev
->link_type
, &ev
->bdaddr
);
1764 BT_ERR("No memory for new connection");
1765 hci_dev_unlock(hdev
);
1770 memcpy(conn
->dev_class
, ev
->dev_class
, 3);
1771 conn
->state
= BT_CONNECT
;
1773 hci_dev_unlock(hdev
);
1775 if (ev
->link_type
== ACL_LINK
|| !lmp_esco_capable(hdev
)) {
1776 struct hci_cp_accept_conn_req cp
;
1778 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
1780 if (lmp_rswitch_capable(hdev
) && (mask
& HCI_LM_MASTER
))
1781 cp
.role
= 0x00; /* Become master */
1783 cp
.role
= 0x01; /* Remain slave */
1785 hci_send_cmd(hdev
, HCI_OP_ACCEPT_CONN_REQ
,
1788 struct hci_cp_accept_sync_conn_req cp
;
1790 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
1791 cp
.pkt_type
= cpu_to_le16(conn
->pkt_type
);
1793 cp
.tx_bandwidth
= cpu_to_le32(0x00001f40);
1794 cp
.rx_bandwidth
= cpu_to_le32(0x00001f40);
1795 cp
.max_latency
= cpu_to_le16(0xffff);
1796 cp
.content_format
= cpu_to_le16(hdev
->voice_setting
);
1797 cp
.retrans_effort
= 0xff;
1799 hci_send_cmd(hdev
, HCI_OP_ACCEPT_SYNC_CONN_REQ
,
1803 /* Connection rejected */
1804 struct hci_cp_reject_conn_req cp
;
1806 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
1807 cp
.reason
= HCI_ERROR_REJ_BAD_ADDR
;
1808 hci_send_cmd(hdev
, HCI_OP_REJECT_CONN_REQ
, sizeof(cp
), &cp
);
1812 static inline void hci_disconn_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1814 struct hci_ev_disconn_complete
*ev
= (void *) skb
->data
;
1815 struct hci_conn
*conn
;
1817 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
1821 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1825 if (ev
->status
== 0)
1826 conn
->state
= BT_CLOSED
;
1828 if (test_and_clear_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
) &&
1829 (conn
->type
== ACL_LINK
|| conn
->type
== LE_LINK
)) {
1830 if (ev
->status
!= 0)
1831 mgmt_disconnect_failed(hdev
, &conn
->dst
, ev
->status
);
1833 mgmt_device_disconnected(hdev
, &conn
->dst
, conn
->type
,
1837 if (ev
->status
== 0) {
1838 hci_proto_disconn_cfm(conn
, ev
->reason
);
1843 hci_dev_unlock(hdev
);
1846 static inline void hci_auth_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1848 struct hci_ev_auth_complete
*ev
= (void *) skb
->data
;
1849 struct hci_conn
*conn
;
1851 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
1855 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1860 if (!hci_conn_ssp_enabled(conn
) &&
1861 test_bit(HCI_CONN_REAUTH_PEND
, &conn
->flags
)) {
1862 BT_INFO("re-auth of legacy device is not possible.");
1864 conn
->link_mode
|= HCI_LM_AUTH
;
1865 conn
->sec_level
= conn
->pending_sec_level
;
1868 mgmt_auth_failed(hdev
, &conn
->dst
, ev
->status
);
1871 clear_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
);
1872 clear_bit(HCI_CONN_REAUTH_PEND
, &conn
->flags
);
1874 if (conn
->state
== BT_CONFIG
) {
1875 if (!ev
->status
&& hci_conn_ssp_enabled(conn
)) {
1876 struct hci_cp_set_conn_encrypt cp
;
1877 cp
.handle
= ev
->handle
;
1879 hci_send_cmd(hdev
, HCI_OP_SET_CONN_ENCRYPT
, sizeof(cp
),
1882 conn
->state
= BT_CONNECTED
;
1883 hci_proto_connect_cfm(conn
, ev
->status
);
1887 hci_auth_cfm(conn
, ev
->status
);
1889 hci_conn_hold(conn
);
1890 conn
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
1894 if (test_bit(HCI_CONN_ENCRYPT_PEND
, &conn
->flags
)) {
1896 struct hci_cp_set_conn_encrypt cp
;
1897 cp
.handle
= ev
->handle
;
1899 hci_send_cmd(hdev
, HCI_OP_SET_CONN_ENCRYPT
, sizeof(cp
),
1902 clear_bit(HCI_CONN_ENCRYPT_PEND
, &conn
->flags
);
1903 hci_encrypt_cfm(conn
, ev
->status
, 0x00);
1908 hci_dev_unlock(hdev
);
1911 static inline void hci_remote_name_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1913 struct hci_ev_remote_name
*ev
= (void *) skb
->data
;
1914 struct hci_conn
*conn
;
1916 BT_DBG("%s", hdev
->name
);
1918 hci_conn_check_pending(hdev
);
1922 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
1924 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
1927 if (ev
->status
== 0)
1928 hci_check_pending_name(hdev
, conn
, &ev
->bdaddr
, ev
->name
,
1929 strnlen(ev
->name
, HCI_MAX_NAME_LENGTH
));
1931 hci_check_pending_name(hdev
, conn
, &ev
->bdaddr
, NULL
, 0);
1937 if (!hci_outgoing_auth_needed(hdev
, conn
))
1940 if (!test_and_set_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
)) {
1941 struct hci_cp_auth_requested cp
;
1942 cp
.handle
= __cpu_to_le16(conn
->handle
);
1943 hci_send_cmd(hdev
, HCI_OP_AUTH_REQUESTED
, sizeof(cp
), &cp
);
1947 hci_dev_unlock(hdev
);
1950 static inline void hci_encrypt_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1952 struct hci_ev_encrypt_change
*ev
= (void *) skb
->data
;
1953 struct hci_conn
*conn
;
1955 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
1959 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1963 /* Encryption implies authentication */
1964 conn
->link_mode
|= HCI_LM_AUTH
;
1965 conn
->link_mode
|= HCI_LM_ENCRYPT
;
1966 conn
->sec_level
= conn
->pending_sec_level
;
1968 conn
->link_mode
&= ~HCI_LM_ENCRYPT
;
1971 clear_bit(HCI_CONN_ENCRYPT_PEND
, &conn
->flags
);
1973 if (conn
->state
== BT_CONFIG
) {
1975 conn
->state
= BT_CONNECTED
;
1977 hci_proto_connect_cfm(conn
, ev
->status
);
1980 hci_encrypt_cfm(conn
, ev
->status
, ev
->encrypt
);
1983 hci_dev_unlock(hdev
);
1986 static inline void hci_change_link_key_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1988 struct hci_ev_change_link_key_complete
*ev
= (void *) skb
->data
;
1989 struct hci_conn
*conn
;
1991 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
1995 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1998 conn
->link_mode
|= HCI_LM_SECURE
;
2000 clear_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
);
2002 hci_key_change_cfm(conn
, ev
->status
);
2005 hci_dev_unlock(hdev
);
2008 static inline void hci_remote_features_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2010 struct hci_ev_remote_features
*ev
= (void *) skb
->data
;
2011 struct hci_conn
*conn
;
2013 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
2017 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2022 memcpy(conn
->features
, ev
->features
, 8);
2024 if (conn
->state
!= BT_CONFIG
)
2027 if (!ev
->status
&& lmp_ssp_capable(hdev
) && lmp_ssp_capable(conn
)) {
2028 struct hci_cp_read_remote_ext_features cp
;
2029 cp
.handle
= ev
->handle
;
2031 hci_send_cmd(hdev
, HCI_OP_READ_REMOTE_EXT_FEATURES
,
2037 struct hci_cp_remote_name_req cp
;
2038 memset(&cp
, 0, sizeof(cp
));
2039 bacpy(&cp
.bdaddr
, &conn
->dst
);
2040 cp
.pscan_rep_mode
= 0x02;
2041 hci_send_cmd(hdev
, HCI_OP_REMOTE_NAME_REQ
, sizeof(cp
), &cp
);
2042 } else if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
))
2043 mgmt_device_connected(hdev
, &conn
->dst
, conn
->type
,
2044 conn
->dst_type
, NULL
, 0,
2047 if (!hci_outgoing_auth_needed(hdev
, conn
)) {
2048 conn
->state
= BT_CONNECTED
;
2049 hci_proto_connect_cfm(conn
, ev
->status
);
2054 hci_dev_unlock(hdev
);
2057 static inline void hci_remote_version_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2059 BT_DBG("%s", hdev
->name
);
2062 static inline void hci_qos_setup_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2064 BT_DBG("%s", hdev
->name
);
2067 static inline void hci_cmd_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2069 struct hci_ev_cmd_complete
*ev
= (void *) skb
->data
;
2072 skb_pull(skb
, sizeof(*ev
));
2074 opcode
= __le16_to_cpu(ev
->opcode
);
2077 case HCI_OP_INQUIRY_CANCEL
:
2078 hci_cc_inquiry_cancel(hdev
, skb
);
2081 case HCI_OP_EXIT_PERIODIC_INQ
:
2082 hci_cc_exit_periodic_inq(hdev
, skb
);
2085 case HCI_OP_REMOTE_NAME_REQ_CANCEL
:
2086 hci_cc_remote_name_req_cancel(hdev
, skb
);
2089 case HCI_OP_ROLE_DISCOVERY
:
2090 hci_cc_role_discovery(hdev
, skb
);
2093 case HCI_OP_READ_LINK_POLICY
:
2094 hci_cc_read_link_policy(hdev
, skb
);
2097 case HCI_OP_WRITE_LINK_POLICY
:
2098 hci_cc_write_link_policy(hdev
, skb
);
2101 case HCI_OP_READ_DEF_LINK_POLICY
:
2102 hci_cc_read_def_link_policy(hdev
, skb
);
2105 case HCI_OP_WRITE_DEF_LINK_POLICY
:
2106 hci_cc_write_def_link_policy(hdev
, skb
);
2110 hci_cc_reset(hdev
, skb
);
2113 case HCI_OP_WRITE_LOCAL_NAME
:
2114 hci_cc_write_local_name(hdev
, skb
);
2117 case HCI_OP_READ_LOCAL_NAME
:
2118 hci_cc_read_local_name(hdev
, skb
);
2121 case HCI_OP_WRITE_AUTH_ENABLE
:
2122 hci_cc_write_auth_enable(hdev
, skb
);
2125 case HCI_OP_WRITE_ENCRYPT_MODE
:
2126 hci_cc_write_encrypt_mode(hdev
, skb
);
2129 case HCI_OP_WRITE_SCAN_ENABLE
:
2130 hci_cc_write_scan_enable(hdev
, skb
);
2133 case HCI_OP_READ_CLASS_OF_DEV
:
2134 hci_cc_read_class_of_dev(hdev
, skb
);
2137 case HCI_OP_WRITE_CLASS_OF_DEV
:
2138 hci_cc_write_class_of_dev(hdev
, skb
);
2141 case HCI_OP_READ_VOICE_SETTING
:
2142 hci_cc_read_voice_setting(hdev
, skb
);
2145 case HCI_OP_WRITE_VOICE_SETTING
:
2146 hci_cc_write_voice_setting(hdev
, skb
);
2149 case HCI_OP_HOST_BUFFER_SIZE
:
2150 hci_cc_host_buffer_size(hdev
, skb
);
2153 case HCI_OP_READ_SSP_MODE
:
2154 hci_cc_read_ssp_mode(hdev
, skb
);
2157 case HCI_OP_WRITE_SSP_MODE
:
2158 hci_cc_write_ssp_mode(hdev
, skb
);
2161 case HCI_OP_READ_LOCAL_VERSION
:
2162 hci_cc_read_local_version(hdev
, skb
);
2165 case HCI_OP_READ_LOCAL_COMMANDS
:
2166 hci_cc_read_local_commands(hdev
, skb
);
2169 case HCI_OP_READ_LOCAL_FEATURES
:
2170 hci_cc_read_local_features(hdev
, skb
);
2173 case HCI_OP_READ_LOCAL_EXT_FEATURES
:
2174 hci_cc_read_local_ext_features(hdev
, skb
);
2177 case HCI_OP_READ_BUFFER_SIZE
:
2178 hci_cc_read_buffer_size(hdev
, skb
);
2181 case HCI_OP_READ_BD_ADDR
:
2182 hci_cc_read_bd_addr(hdev
, skb
);
2185 case HCI_OP_READ_DATA_BLOCK_SIZE
:
2186 hci_cc_read_data_block_size(hdev
, skb
);
2189 case HCI_OP_WRITE_CA_TIMEOUT
:
2190 hci_cc_write_ca_timeout(hdev
, skb
);
2193 case HCI_OP_READ_FLOW_CONTROL_MODE
:
2194 hci_cc_read_flow_control_mode(hdev
, skb
);
2197 case HCI_OP_READ_LOCAL_AMP_INFO
:
2198 hci_cc_read_local_amp_info(hdev
, skb
);
2201 case HCI_OP_DELETE_STORED_LINK_KEY
:
2202 hci_cc_delete_stored_link_key(hdev
, skb
);
2205 case HCI_OP_SET_EVENT_MASK
:
2206 hci_cc_set_event_mask(hdev
, skb
);
2209 case HCI_OP_WRITE_INQUIRY_MODE
:
2210 hci_cc_write_inquiry_mode(hdev
, skb
);
2213 case HCI_OP_READ_INQ_RSP_TX_POWER
:
2214 hci_cc_read_inq_rsp_tx_power(hdev
, skb
);
2217 case HCI_OP_SET_EVENT_FLT
:
2218 hci_cc_set_event_flt(hdev
, skb
);
2221 case HCI_OP_PIN_CODE_REPLY
:
2222 hci_cc_pin_code_reply(hdev
, skb
);
2225 case HCI_OP_PIN_CODE_NEG_REPLY
:
2226 hci_cc_pin_code_neg_reply(hdev
, skb
);
2229 case HCI_OP_READ_LOCAL_OOB_DATA
:
2230 hci_cc_read_local_oob_data_reply(hdev
, skb
);
2233 case HCI_OP_LE_READ_BUFFER_SIZE
:
2234 hci_cc_le_read_buffer_size(hdev
, skb
);
2237 case HCI_OP_USER_CONFIRM_REPLY
:
2238 hci_cc_user_confirm_reply(hdev
, skb
);
2241 case HCI_OP_USER_CONFIRM_NEG_REPLY
:
2242 hci_cc_user_confirm_neg_reply(hdev
, skb
);
2245 case HCI_OP_USER_PASSKEY_REPLY
:
2246 hci_cc_user_passkey_reply(hdev
, skb
);
2249 case HCI_OP_USER_PASSKEY_NEG_REPLY
:
2250 hci_cc_user_passkey_neg_reply(hdev
, skb
);
2252 case HCI_OP_LE_SET_SCAN_PARAM
:
2253 hci_cc_le_set_scan_param(hdev
, skb
);
2256 case HCI_OP_LE_SET_SCAN_ENABLE
:
2257 hci_cc_le_set_scan_enable(hdev
, skb
);
2260 case HCI_OP_LE_LTK_REPLY
:
2261 hci_cc_le_ltk_reply(hdev
, skb
);
2264 case HCI_OP_LE_LTK_NEG_REPLY
:
2265 hci_cc_le_ltk_neg_reply(hdev
, skb
);
2268 case HCI_OP_WRITE_LE_HOST_SUPPORTED
:
2269 hci_cc_write_le_host_supported(hdev
, skb
);
2273 BT_DBG("%s opcode 0x%x", hdev
->name
, opcode
);
2277 if (ev
->opcode
!= HCI_OP_NOP
)
2278 del_timer(&hdev
->cmd_timer
);
2281 atomic_set(&hdev
->cmd_cnt
, 1);
2282 if (!skb_queue_empty(&hdev
->cmd_q
))
2283 queue_work(hdev
->workqueue
, &hdev
->cmd_work
);
2287 static inline void hci_cmd_status_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2289 struct hci_ev_cmd_status
*ev
= (void *) skb
->data
;
2292 skb_pull(skb
, sizeof(*ev
));
2294 opcode
= __le16_to_cpu(ev
->opcode
);
2297 case HCI_OP_INQUIRY
:
2298 hci_cs_inquiry(hdev
, ev
->status
);
2301 case HCI_OP_CREATE_CONN
:
2302 hci_cs_create_conn(hdev
, ev
->status
);
2305 case HCI_OP_ADD_SCO
:
2306 hci_cs_add_sco(hdev
, ev
->status
);
2309 case HCI_OP_AUTH_REQUESTED
:
2310 hci_cs_auth_requested(hdev
, ev
->status
);
2313 case HCI_OP_SET_CONN_ENCRYPT
:
2314 hci_cs_set_conn_encrypt(hdev
, ev
->status
);
2317 case HCI_OP_REMOTE_NAME_REQ
:
2318 hci_cs_remote_name_req(hdev
, ev
->status
);
2321 case HCI_OP_READ_REMOTE_FEATURES
:
2322 hci_cs_read_remote_features(hdev
, ev
->status
);
2325 case HCI_OP_READ_REMOTE_EXT_FEATURES
:
2326 hci_cs_read_remote_ext_features(hdev
, ev
->status
);
2329 case HCI_OP_SETUP_SYNC_CONN
:
2330 hci_cs_setup_sync_conn(hdev
, ev
->status
);
2333 case HCI_OP_SNIFF_MODE
:
2334 hci_cs_sniff_mode(hdev
, ev
->status
);
2337 case HCI_OP_EXIT_SNIFF_MODE
:
2338 hci_cs_exit_sniff_mode(hdev
, ev
->status
);
2341 case HCI_OP_DISCONNECT
:
2342 if (ev
->status
!= 0)
2343 mgmt_disconnect_failed(hdev
, NULL
, ev
->status
);
2346 case HCI_OP_LE_CREATE_CONN
:
2347 hci_cs_le_create_conn(hdev
, ev
->status
);
2350 case HCI_OP_LE_START_ENC
:
2351 hci_cs_le_start_enc(hdev
, ev
->status
);
2355 BT_DBG("%s opcode 0x%x", hdev
->name
, opcode
);
2359 if (ev
->opcode
!= HCI_OP_NOP
)
2360 del_timer(&hdev
->cmd_timer
);
2362 if (ev
->ncmd
&& !test_bit(HCI_RESET
, &hdev
->flags
)) {
2363 atomic_set(&hdev
->cmd_cnt
, 1);
2364 if (!skb_queue_empty(&hdev
->cmd_q
))
2365 queue_work(hdev
->workqueue
, &hdev
->cmd_work
);
2369 static inline void hci_role_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2371 struct hci_ev_role_change
*ev
= (void *) skb
->data
;
2372 struct hci_conn
*conn
;
2374 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
2378 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
2382 conn
->link_mode
&= ~HCI_LM_MASTER
;
2384 conn
->link_mode
|= HCI_LM_MASTER
;
2387 clear_bit(HCI_CONN_RSWITCH_PEND
, &conn
->flags
);
2389 hci_role_switch_cfm(conn
, ev
->status
, ev
->role
);
2392 hci_dev_unlock(hdev
);
2395 static inline void hci_num_comp_pkts_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2397 struct hci_ev_num_comp_pkts
*ev
= (void *) skb
->data
;
2400 if (hdev
->flow_ctl_mode
!= HCI_FLOW_CTL_MODE_PACKET_BASED
) {
2401 BT_ERR("Wrong event for mode %d", hdev
->flow_ctl_mode
);
2405 if (skb
->len
< sizeof(*ev
) || skb
->len
< sizeof(*ev
) +
2406 ev
->num_hndl
* sizeof(struct hci_comp_pkts_info
)) {
2407 BT_DBG("%s bad parameters", hdev
->name
);
2411 BT_DBG("%s num_hndl %d", hdev
->name
, ev
->num_hndl
);
2413 for (i
= 0; i
< ev
->num_hndl
; i
++) {
2414 struct hci_comp_pkts_info
*info
= &ev
->handles
[i
];
2415 struct hci_conn
*conn
;
2416 __u16 handle
, count
;
2418 handle
= __le16_to_cpu(info
->handle
);
2419 count
= __le16_to_cpu(info
->count
);
2421 conn
= hci_conn_hash_lookup_handle(hdev
, handle
);
2425 conn
->sent
-= count
;
2427 switch (conn
->type
) {
2429 hdev
->acl_cnt
+= count
;
2430 if (hdev
->acl_cnt
> hdev
->acl_pkts
)
2431 hdev
->acl_cnt
= hdev
->acl_pkts
;
2435 if (hdev
->le_pkts
) {
2436 hdev
->le_cnt
+= count
;
2437 if (hdev
->le_cnt
> hdev
->le_pkts
)
2438 hdev
->le_cnt
= hdev
->le_pkts
;
2440 hdev
->acl_cnt
+= count
;
2441 if (hdev
->acl_cnt
> hdev
->acl_pkts
)
2442 hdev
->acl_cnt
= hdev
->acl_pkts
;
2447 hdev
->sco_cnt
+= count
;
2448 if (hdev
->sco_cnt
> hdev
->sco_pkts
)
2449 hdev
->sco_cnt
= hdev
->sco_pkts
;
2453 BT_ERR("Unknown type %d conn %p", conn
->type
, conn
);
2458 queue_work(hdev
->workqueue
, &hdev
->tx_work
);
2461 static inline void hci_num_comp_blocks_evt(struct hci_dev
*hdev
,
2462 struct sk_buff
*skb
)
2464 struct hci_ev_num_comp_blocks
*ev
= (void *) skb
->data
;
2467 if (hdev
->flow_ctl_mode
!= HCI_FLOW_CTL_MODE_BLOCK_BASED
) {
2468 BT_ERR("Wrong event for mode %d", hdev
->flow_ctl_mode
);
2472 if (skb
->len
< sizeof(*ev
) || skb
->len
< sizeof(*ev
) +
2473 ev
->num_hndl
* sizeof(struct hci_comp_blocks_info
)) {
2474 BT_DBG("%s bad parameters", hdev
->name
);
2478 BT_DBG("%s num_blocks %d num_hndl %d", hdev
->name
, ev
->num_blocks
,
2481 for (i
= 0; i
< ev
->num_hndl
; i
++) {
2482 struct hci_comp_blocks_info
*info
= &ev
->handles
[i
];
2483 struct hci_conn
*conn
;
2484 __u16 handle
, block_count
;
2486 handle
= __le16_to_cpu(info
->handle
);
2487 block_count
= __le16_to_cpu(info
->blocks
);
2489 conn
= hci_conn_hash_lookup_handle(hdev
, handle
);
2493 conn
->sent
-= block_count
;
2495 switch (conn
->type
) {
2497 hdev
->block_cnt
+= block_count
;
2498 if (hdev
->block_cnt
> hdev
->num_blocks
)
2499 hdev
->block_cnt
= hdev
->num_blocks
;
2503 BT_ERR("Unknown type %d conn %p", conn
->type
, conn
);
2508 queue_work(hdev
->workqueue
, &hdev
->tx_work
);
2511 static inline void hci_mode_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2513 struct hci_ev_mode_change
*ev
= (void *) skb
->data
;
2514 struct hci_conn
*conn
;
2516 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
2520 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2522 conn
->mode
= ev
->mode
;
2523 conn
->interval
= __le16_to_cpu(ev
->interval
);
2525 if (!test_and_clear_bit(HCI_CONN_MODE_CHANGE_PEND
, &conn
->flags
)) {
2526 if (conn
->mode
== HCI_CM_ACTIVE
)
2527 set_bit(HCI_CONN_POWER_SAVE
, &conn
->flags
);
2529 clear_bit(HCI_CONN_POWER_SAVE
, &conn
->flags
);
2532 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND
, &conn
->flags
))
2533 hci_sco_setup(conn
, ev
->status
);
2536 hci_dev_unlock(hdev
);
2539 static inline void hci_pin_code_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2541 struct hci_ev_pin_code_req
*ev
= (void *) skb
->data
;
2542 struct hci_conn
*conn
;
2544 BT_DBG("%s", hdev
->name
);
2548 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
2552 if (conn
->state
== BT_CONNECTED
) {
2553 hci_conn_hold(conn
);
2554 conn
->disc_timeout
= HCI_PAIRING_TIMEOUT
;
2558 if (!test_bit(HCI_PAIRABLE
, &hdev
->dev_flags
))
2559 hci_send_cmd(hdev
, HCI_OP_PIN_CODE_NEG_REPLY
,
2560 sizeof(ev
->bdaddr
), &ev
->bdaddr
);
2561 else if (test_bit(HCI_MGMT
, &hdev
->dev_flags
)) {
2564 if (conn
->pending_sec_level
== BT_SECURITY_HIGH
)
2569 mgmt_pin_code_request(hdev
, &ev
->bdaddr
, secure
);
2573 hci_dev_unlock(hdev
);
2576 static inline void hci_link_key_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2578 struct hci_ev_link_key_req
*ev
= (void *) skb
->data
;
2579 struct hci_cp_link_key_reply cp
;
2580 struct hci_conn
*conn
;
2581 struct link_key
*key
;
2583 BT_DBG("%s", hdev
->name
);
2585 if (!test_bit(HCI_LINK_KEYS
, &hdev
->dev_flags
))
2590 key
= hci_find_link_key(hdev
, &ev
->bdaddr
);
2592 BT_DBG("%s link key not found for %s", hdev
->name
,
2593 batostr(&ev
->bdaddr
));
2597 BT_DBG("%s found key type %u for %s", hdev
->name
, key
->type
,
2598 batostr(&ev
->bdaddr
));
2600 if (!test_bit(HCI_DEBUG_KEYS
, &hdev
->dev_flags
) &&
2601 key
->type
== HCI_LK_DEBUG_COMBINATION
) {
2602 BT_DBG("%s ignoring debug key", hdev
->name
);
2606 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
2608 if (key
->type
== HCI_LK_UNAUTH_COMBINATION
&&
2609 conn
->auth_type
!= 0xff &&
2610 (conn
->auth_type
& 0x01)) {
2611 BT_DBG("%s ignoring unauthenticated key", hdev
->name
);
2615 if (key
->type
== HCI_LK_COMBINATION
&& key
->pin_len
< 16 &&
2616 conn
->pending_sec_level
== BT_SECURITY_HIGH
) {
2617 BT_DBG("%s ignoring key unauthenticated for high \
2618 security", hdev
->name
);
2622 conn
->key_type
= key
->type
;
2623 conn
->pin_length
= key
->pin_len
;
2626 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
2627 memcpy(cp
.link_key
, key
->val
, 16);
2629 hci_send_cmd(hdev
, HCI_OP_LINK_KEY_REPLY
, sizeof(cp
), &cp
);
2631 hci_dev_unlock(hdev
);
2636 hci_send_cmd(hdev
, HCI_OP_LINK_KEY_NEG_REPLY
, 6, &ev
->bdaddr
);
2637 hci_dev_unlock(hdev
);
2640 static inline void hci_link_key_notify_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2642 struct hci_ev_link_key_notify
*ev
= (void *) skb
->data
;
2643 struct hci_conn
*conn
;
2646 BT_DBG("%s", hdev
->name
);
2650 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
2652 hci_conn_hold(conn
);
2653 conn
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
2654 pin_len
= conn
->pin_length
;
2656 if (ev
->key_type
!= HCI_LK_CHANGED_COMBINATION
)
2657 conn
->key_type
= ev
->key_type
;
2662 if (test_bit(HCI_LINK_KEYS
, &hdev
->dev_flags
))
2663 hci_add_link_key(hdev
, conn
, 1, &ev
->bdaddr
, ev
->link_key
,
2664 ev
->key_type
, pin_len
);
2666 hci_dev_unlock(hdev
);
2669 static inline void hci_clock_offset_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2671 struct hci_ev_clock_offset
*ev
= (void *) skb
->data
;
2672 struct hci_conn
*conn
;
2674 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
2678 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2679 if (conn
&& !ev
->status
) {
2680 struct inquiry_entry
*ie
;
2682 ie
= hci_inquiry_cache_lookup(hdev
, &conn
->dst
);
2684 ie
->data
.clock_offset
= ev
->clock_offset
;
2685 ie
->timestamp
= jiffies
;
2689 hci_dev_unlock(hdev
);
2692 static inline void hci_pkt_type_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2694 struct hci_ev_pkt_type_change
*ev
= (void *) skb
->data
;
2695 struct hci_conn
*conn
;
2697 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
2701 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2702 if (conn
&& !ev
->status
)
2703 conn
->pkt_type
= __le16_to_cpu(ev
->pkt_type
);
2705 hci_dev_unlock(hdev
);
2708 static inline void hci_pscan_rep_mode_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2710 struct hci_ev_pscan_rep_mode
*ev
= (void *) skb
->data
;
2711 struct inquiry_entry
*ie
;
2713 BT_DBG("%s", hdev
->name
);
2717 ie
= hci_inquiry_cache_lookup(hdev
, &ev
->bdaddr
);
2719 ie
->data
.pscan_rep_mode
= ev
->pscan_rep_mode
;
2720 ie
->timestamp
= jiffies
;
2723 hci_dev_unlock(hdev
);
2726 static inline void hci_inquiry_result_with_rssi_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2728 struct inquiry_data data
;
2729 int num_rsp
= *((__u8
*) skb
->data
);
2732 BT_DBG("%s num_rsp %d", hdev
->name
, num_rsp
);
2739 if ((skb
->len
- 1) / num_rsp
!= sizeof(struct inquiry_info_with_rssi
)) {
2740 struct inquiry_info_with_rssi_and_pscan_mode
*info
;
2741 info
= (void *) (skb
->data
+ 1);
2743 for (; num_rsp
; num_rsp
--, info
++) {
2744 bacpy(&data
.bdaddr
, &info
->bdaddr
);
2745 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
2746 data
.pscan_period_mode
= info
->pscan_period_mode
;
2747 data
.pscan_mode
= info
->pscan_mode
;
2748 memcpy(data
.dev_class
, info
->dev_class
, 3);
2749 data
.clock_offset
= info
->clock_offset
;
2750 data
.rssi
= info
->rssi
;
2751 data
.ssp_mode
= 0x00;
2753 name_known
= hci_inquiry_cache_update(hdev
, &data
,
2755 mgmt_device_found(hdev
, &info
->bdaddr
, ACL_LINK
, 0x00,
2756 info
->dev_class
, info
->rssi
,
2757 !name_known
, NULL
, 0);
2760 struct inquiry_info_with_rssi
*info
= (void *) (skb
->data
+ 1);
2762 for (; num_rsp
; num_rsp
--, info
++) {
2763 bacpy(&data
.bdaddr
, &info
->bdaddr
);
2764 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
2765 data
.pscan_period_mode
= info
->pscan_period_mode
;
2766 data
.pscan_mode
= 0x00;
2767 memcpy(data
.dev_class
, info
->dev_class
, 3);
2768 data
.clock_offset
= info
->clock_offset
;
2769 data
.rssi
= info
->rssi
;
2770 data
.ssp_mode
= 0x00;
2771 name_known
= hci_inquiry_cache_update(hdev
, &data
,
2773 mgmt_device_found(hdev
, &info
->bdaddr
, ACL_LINK
, 0x00,
2774 info
->dev_class
, info
->rssi
,
2775 !name_known
, NULL
, 0);
2779 hci_dev_unlock(hdev
);
2782 static inline void hci_remote_ext_features_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2784 struct hci_ev_remote_ext_features
*ev
= (void *) skb
->data
;
2785 struct hci_conn
*conn
;
2787 BT_DBG("%s", hdev
->name
);
2791 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2795 if (!ev
->status
&& ev
->page
== 0x01) {
2796 struct inquiry_entry
*ie
;
2798 ie
= hci_inquiry_cache_lookup(hdev
, &conn
->dst
);
2800 ie
->data
.ssp_mode
= (ev
->features
[0] & 0x01);
2802 if (ev
->features
[0] & 0x01)
2803 set_bit(HCI_CONN_SSP_ENABLED
, &conn
->flags
);
2806 if (conn
->state
!= BT_CONFIG
)
2810 struct hci_cp_remote_name_req cp
;
2811 memset(&cp
, 0, sizeof(cp
));
2812 bacpy(&cp
.bdaddr
, &conn
->dst
);
2813 cp
.pscan_rep_mode
= 0x02;
2814 hci_send_cmd(hdev
, HCI_OP_REMOTE_NAME_REQ
, sizeof(cp
), &cp
);
2815 } else if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
))
2816 mgmt_device_connected(hdev
, &conn
->dst
, conn
->type
,
2817 conn
->dst_type
, NULL
, 0,
2820 if (!hci_outgoing_auth_needed(hdev
, conn
)) {
2821 conn
->state
= BT_CONNECTED
;
2822 hci_proto_connect_cfm(conn
, ev
->status
);
2827 hci_dev_unlock(hdev
);
2830 static inline void hci_sync_conn_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2832 struct hci_ev_sync_conn_complete
*ev
= (void *) skb
->data
;
2833 struct hci_conn
*conn
;
2835 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
2839 conn
= hci_conn_hash_lookup_ba(hdev
, ev
->link_type
, &ev
->bdaddr
);
2841 if (ev
->link_type
== ESCO_LINK
)
2844 conn
= hci_conn_hash_lookup_ba(hdev
, ESCO_LINK
, &ev
->bdaddr
);
2848 conn
->type
= SCO_LINK
;
2851 switch (ev
->status
) {
2853 conn
->handle
= __le16_to_cpu(ev
->handle
);
2854 conn
->state
= BT_CONNECTED
;
2856 hci_conn_hold_device(conn
);
2857 hci_conn_add_sysfs(conn
);
2860 case 0x11: /* Unsupported Feature or Parameter Value */
2861 case 0x1c: /* SCO interval rejected */
2862 case 0x1a: /* Unsupported Remote Feature */
2863 case 0x1f: /* Unspecified error */
2864 if (conn
->out
&& conn
->attempt
< 2) {
2865 conn
->pkt_type
= (hdev
->esco_type
& SCO_ESCO_MASK
) |
2866 (hdev
->esco_type
& EDR_ESCO_MASK
);
2867 hci_setup_sync(conn
, conn
->link
->handle
);
2873 conn
->state
= BT_CLOSED
;
2877 hci_proto_connect_cfm(conn
, ev
->status
);
2882 hci_dev_unlock(hdev
);
2885 static inline void hci_sync_conn_changed_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2887 BT_DBG("%s", hdev
->name
);
2890 static inline void hci_sniff_subrate_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2892 struct hci_ev_sniff_subrate
*ev
= (void *) skb
->data
;
2894 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
2897 static inline void hci_extended_inquiry_result_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2899 struct inquiry_data data
;
2900 struct extended_inquiry_info
*info
= (void *) (skb
->data
+ 1);
2901 int num_rsp
= *((__u8
*) skb
->data
);
2903 BT_DBG("%s num_rsp %d", hdev
->name
, num_rsp
);
2910 for (; num_rsp
; num_rsp
--, info
++) {
2913 bacpy(&data
.bdaddr
, &info
->bdaddr
);
2914 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
2915 data
.pscan_period_mode
= info
->pscan_period_mode
;
2916 data
.pscan_mode
= 0x00;
2917 memcpy(data
.dev_class
, info
->dev_class
, 3);
2918 data
.clock_offset
= info
->clock_offset
;
2919 data
.rssi
= info
->rssi
;
2920 data
.ssp_mode
= 0x01;
2922 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
2923 name_known
= eir_has_data_type(info
->data
,
2929 name_known
= hci_inquiry_cache_update(hdev
, &data
, name_known
);
2930 mgmt_device_found(hdev
, &info
->bdaddr
, ACL_LINK
, 0x00,
2931 info
->dev_class
, info
->rssi
,
2932 !name_known
, info
->data
,
2933 sizeof(info
->data
));
2936 hci_dev_unlock(hdev
);
2939 static inline u8
hci_get_auth_req(struct hci_conn
*conn
)
2941 /* If remote requests dedicated bonding follow that lead */
2942 if (conn
->remote_auth
== 0x02 || conn
->remote_auth
== 0x03) {
2943 /* If both remote and local IO capabilities allow MITM
2944 * protection then require it, otherwise don't */
2945 if (conn
->remote_cap
== 0x03 || conn
->io_capability
== 0x03)
2951 /* If remote requests no-bonding follow that lead */
2952 if (conn
->remote_auth
== 0x00 || conn
->remote_auth
== 0x01)
2953 return conn
->remote_auth
| (conn
->auth_type
& 0x01);
2955 return conn
->auth_type
;
2958 static inline void hci_io_capa_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2960 struct hci_ev_io_capa_request
*ev
= (void *) skb
->data
;
2961 struct hci_conn
*conn
;
2963 BT_DBG("%s", hdev
->name
);
2967 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
2971 hci_conn_hold(conn
);
2973 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
2976 if (test_bit(HCI_PAIRABLE
, &hdev
->dev_flags
) ||
2977 (conn
->remote_auth
& ~0x01) == HCI_AT_NO_BONDING
) {
2978 struct hci_cp_io_capability_reply cp
;
2980 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
2981 /* Change the IO capability from KeyboardDisplay
2982 * to DisplayYesNo as it is not supported by BT spec. */
2983 cp
.capability
= (conn
->io_capability
== 0x04) ?
2984 0x01 : conn
->io_capability
;
2985 conn
->auth_type
= hci_get_auth_req(conn
);
2986 cp
.authentication
= conn
->auth_type
;
2988 if ((conn
->out
|| test_bit(HCI_CONN_REMOTE_OOB
, &conn
->flags
)) &&
2989 hci_find_remote_oob_data(hdev
, &conn
->dst
))
2994 hci_send_cmd(hdev
, HCI_OP_IO_CAPABILITY_REPLY
,
2997 struct hci_cp_io_capability_neg_reply cp
;
2999 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
3000 cp
.reason
= HCI_ERROR_PAIRING_NOT_ALLOWED
;
3002 hci_send_cmd(hdev
, HCI_OP_IO_CAPABILITY_NEG_REPLY
,
3007 hci_dev_unlock(hdev
);
3010 static inline void hci_io_capa_reply_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3012 struct hci_ev_io_capa_reply
*ev
= (void *) skb
->data
;
3013 struct hci_conn
*conn
;
3015 BT_DBG("%s", hdev
->name
);
3019 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3023 conn
->remote_cap
= ev
->capability
;
3024 conn
->remote_auth
= ev
->authentication
;
3026 set_bit(HCI_CONN_REMOTE_OOB
, &conn
->flags
);
3029 hci_dev_unlock(hdev
);
3032 static inline void hci_user_confirm_request_evt(struct hci_dev
*hdev
,
3033 struct sk_buff
*skb
)
3035 struct hci_ev_user_confirm_req
*ev
= (void *) skb
->data
;
3036 int loc_mitm
, rem_mitm
, confirm_hint
= 0;
3037 struct hci_conn
*conn
;
3039 BT_DBG("%s", hdev
->name
);
3043 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3046 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3050 loc_mitm
= (conn
->auth_type
& 0x01);
3051 rem_mitm
= (conn
->remote_auth
& 0x01);
3053 /* If we require MITM but the remote device can't provide that
3054 * (it has NoInputNoOutput) then reject the confirmation
3055 * request. The only exception is when we're dedicated bonding
3056 * initiators (connect_cfm_cb set) since then we always have the MITM
3058 if (!conn
->connect_cfm_cb
&& loc_mitm
&& conn
->remote_cap
== 0x03) {
3059 BT_DBG("Rejecting request: remote device can't provide MITM");
3060 hci_send_cmd(hdev
, HCI_OP_USER_CONFIRM_NEG_REPLY
,
3061 sizeof(ev
->bdaddr
), &ev
->bdaddr
);
3065 /* If no side requires MITM protection; auto-accept */
3066 if ((!loc_mitm
|| conn
->remote_cap
== 0x03) &&
3067 (!rem_mitm
|| conn
->io_capability
== 0x03)) {
3069 /* If we're not the initiators request authorization to
3070 * proceed from user space (mgmt_user_confirm with
3071 * confirm_hint set to 1). */
3072 if (!test_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
)) {
3073 BT_DBG("Confirming auto-accept as acceptor");
3078 BT_DBG("Auto-accept of user confirmation with %ums delay",
3079 hdev
->auto_accept_delay
);
3081 if (hdev
->auto_accept_delay
> 0) {
3082 int delay
= msecs_to_jiffies(hdev
->auto_accept_delay
);
3083 mod_timer(&conn
->auto_accept_timer
, jiffies
+ delay
);
3087 hci_send_cmd(hdev
, HCI_OP_USER_CONFIRM_REPLY
,
3088 sizeof(ev
->bdaddr
), &ev
->bdaddr
);
3093 mgmt_user_confirm_request(hdev
, &ev
->bdaddr
, ev
->passkey
,
3097 hci_dev_unlock(hdev
);
3100 static inline void hci_user_passkey_request_evt(struct hci_dev
*hdev
,
3101 struct sk_buff
*skb
)
3103 struct hci_ev_user_passkey_req
*ev
= (void *) skb
->data
;
3105 BT_DBG("%s", hdev
->name
);
3109 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3110 mgmt_user_passkey_request(hdev
, &ev
->bdaddr
);
3112 hci_dev_unlock(hdev
);
3115 static inline void hci_simple_pair_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3117 struct hci_ev_simple_pair_complete
*ev
= (void *) skb
->data
;
3118 struct hci_conn
*conn
;
3120 BT_DBG("%s", hdev
->name
);
3124 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3128 /* To avoid duplicate auth_failed events to user space we check
3129 * the HCI_CONN_AUTH_PEND flag which will be set if we
3130 * initiated the authentication. A traditional auth_complete
3131 * event gets always produced as initiator and is also mapped to
3132 * the mgmt_auth_failed event */
3133 if (!test_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
) && ev
->status
!= 0)
3134 mgmt_auth_failed(hdev
, &conn
->dst
, ev
->status
);
3139 hci_dev_unlock(hdev
);
3142 static inline void hci_remote_host_features_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3144 struct hci_ev_remote_host_features
*ev
= (void *) skb
->data
;
3145 struct inquiry_entry
*ie
;
3147 BT_DBG("%s", hdev
->name
);
3151 ie
= hci_inquiry_cache_lookup(hdev
, &ev
->bdaddr
);
3153 ie
->data
.ssp_mode
= (ev
->features
[0] & 0x01);
3155 hci_dev_unlock(hdev
);
3158 static inline void hci_remote_oob_data_request_evt(struct hci_dev
*hdev
,
3159 struct sk_buff
*skb
)
3161 struct hci_ev_remote_oob_data_request
*ev
= (void *) skb
->data
;
3162 struct oob_data
*data
;
3164 BT_DBG("%s", hdev
->name
);
3168 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3171 data
= hci_find_remote_oob_data(hdev
, &ev
->bdaddr
);
3173 struct hci_cp_remote_oob_data_reply cp
;
3175 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
3176 memcpy(cp
.hash
, data
->hash
, sizeof(cp
.hash
));
3177 memcpy(cp
.randomizer
, data
->randomizer
, sizeof(cp
.randomizer
));
3179 hci_send_cmd(hdev
, HCI_OP_REMOTE_OOB_DATA_REPLY
, sizeof(cp
),
3182 struct hci_cp_remote_oob_data_neg_reply cp
;
3184 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
3185 hci_send_cmd(hdev
, HCI_OP_REMOTE_OOB_DATA_NEG_REPLY
, sizeof(cp
),
3190 hci_dev_unlock(hdev
);
3193 static inline void hci_le_conn_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3195 struct hci_ev_le_conn_complete
*ev
= (void *) skb
->data
;
3196 struct hci_conn
*conn
;
3198 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
3202 conn
= hci_conn_hash_lookup_ba(hdev
, LE_LINK
, &ev
->bdaddr
);
3204 conn
= hci_conn_add(hdev
, LE_LINK
, &ev
->bdaddr
);
3206 BT_ERR("No memory for new connection");
3207 hci_dev_unlock(hdev
);
3211 conn
->dst_type
= ev
->bdaddr_type
;
3215 mgmt_connect_failed(hdev
, &ev
->bdaddr
, conn
->type
,
3216 conn
->dst_type
, ev
->status
);
3217 hci_proto_connect_cfm(conn
, ev
->status
);
3218 conn
->state
= BT_CLOSED
;
3223 if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
))
3224 mgmt_device_connected(hdev
, &ev
->bdaddr
, conn
->type
,
3225 conn
->dst_type
, NULL
, 0, 0);
3227 conn
->sec_level
= BT_SECURITY_LOW
;
3228 conn
->handle
= __le16_to_cpu(ev
->handle
);
3229 conn
->state
= BT_CONNECTED
;
3231 hci_conn_hold_device(conn
);
3232 hci_conn_add_sysfs(conn
);
3234 hci_proto_connect_cfm(conn
, ev
->status
);
3237 hci_dev_unlock(hdev
);
3240 static inline void hci_le_adv_report_evt(struct hci_dev
*hdev
,
3241 struct sk_buff
*skb
)
3243 u8 num_reports
= skb
->data
[0];
3244 void *ptr
= &skb
->data
[1];
3249 while (num_reports
--) {
3250 struct hci_ev_le_advertising_info
*ev
= ptr
;
3252 hci_add_adv_entry(hdev
, ev
);
3254 rssi
= ev
->data
[ev
->length
];
3255 mgmt_device_found(hdev
, &ev
->bdaddr
, LE_LINK
, ev
->bdaddr_type
,
3256 NULL
, rssi
, 0, ev
->data
, ev
->length
);
3258 ptr
+= sizeof(*ev
) + ev
->length
+ 1;
3261 hci_dev_unlock(hdev
);
3264 static inline void hci_le_ltk_request_evt(struct hci_dev
*hdev
,
3265 struct sk_buff
*skb
)
3267 struct hci_ev_le_ltk_req
*ev
= (void *) skb
->data
;
3268 struct hci_cp_le_ltk_reply cp
;
3269 struct hci_cp_le_ltk_neg_reply neg
;
3270 struct hci_conn
*conn
;
3271 struct smp_ltk
*ltk
;
3273 BT_DBG("%s handle %d", hdev
->name
, cpu_to_le16(ev
->handle
));
3277 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
3281 ltk
= hci_find_ltk(hdev
, ev
->ediv
, ev
->random
);
3285 memcpy(cp
.ltk
, ltk
->val
, sizeof(ltk
->val
));
3286 cp
.handle
= cpu_to_le16(conn
->handle
);
3288 if (ltk
->authenticated
)
3289 conn
->sec_level
= BT_SECURITY_HIGH
;
3291 hci_send_cmd(hdev
, HCI_OP_LE_LTK_REPLY
, sizeof(cp
), &cp
);
3293 if (ltk
->type
& HCI_SMP_STK
) {
3294 list_del(<k
->list
);
3298 hci_dev_unlock(hdev
);
3303 neg
.handle
= ev
->handle
;
3304 hci_send_cmd(hdev
, HCI_OP_LE_LTK_NEG_REPLY
, sizeof(neg
), &neg
);
3305 hci_dev_unlock(hdev
);
3308 static inline void hci_le_meta_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3310 struct hci_ev_le_meta
*le_ev
= (void *) skb
->data
;
3312 skb_pull(skb
, sizeof(*le_ev
));
3314 switch (le_ev
->subevent
) {
3315 case HCI_EV_LE_CONN_COMPLETE
:
3316 hci_le_conn_complete_evt(hdev
, skb
);
3319 case HCI_EV_LE_ADVERTISING_REPORT
:
3320 hci_le_adv_report_evt(hdev
, skb
);
3323 case HCI_EV_LE_LTK_REQ
:
3324 hci_le_ltk_request_evt(hdev
, skb
);
3332 void hci_event_packet(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3334 struct hci_event_hdr
*hdr
= (void *) skb
->data
;
3335 __u8 event
= hdr
->evt
;
3337 skb_pull(skb
, HCI_EVENT_HDR_SIZE
);
3340 case HCI_EV_INQUIRY_COMPLETE
:
3341 hci_inquiry_complete_evt(hdev
, skb
);
3344 case HCI_EV_INQUIRY_RESULT
:
3345 hci_inquiry_result_evt(hdev
, skb
);
3348 case HCI_EV_CONN_COMPLETE
:
3349 hci_conn_complete_evt(hdev
, skb
);
3352 case HCI_EV_CONN_REQUEST
:
3353 hci_conn_request_evt(hdev
, skb
);
3356 case HCI_EV_DISCONN_COMPLETE
:
3357 hci_disconn_complete_evt(hdev
, skb
);
3360 case HCI_EV_AUTH_COMPLETE
:
3361 hci_auth_complete_evt(hdev
, skb
);
3364 case HCI_EV_REMOTE_NAME
:
3365 hci_remote_name_evt(hdev
, skb
);
3368 case HCI_EV_ENCRYPT_CHANGE
:
3369 hci_encrypt_change_evt(hdev
, skb
);
3372 case HCI_EV_CHANGE_LINK_KEY_COMPLETE
:
3373 hci_change_link_key_complete_evt(hdev
, skb
);
3376 case HCI_EV_REMOTE_FEATURES
:
3377 hci_remote_features_evt(hdev
, skb
);
3380 case HCI_EV_REMOTE_VERSION
:
3381 hci_remote_version_evt(hdev
, skb
);
3384 case HCI_EV_QOS_SETUP_COMPLETE
:
3385 hci_qos_setup_complete_evt(hdev
, skb
);
3388 case HCI_EV_CMD_COMPLETE
:
3389 hci_cmd_complete_evt(hdev
, skb
);
3392 case HCI_EV_CMD_STATUS
:
3393 hci_cmd_status_evt(hdev
, skb
);
3396 case HCI_EV_ROLE_CHANGE
:
3397 hci_role_change_evt(hdev
, skb
);
3400 case HCI_EV_NUM_COMP_PKTS
:
3401 hci_num_comp_pkts_evt(hdev
, skb
);
3404 case HCI_EV_MODE_CHANGE
:
3405 hci_mode_change_evt(hdev
, skb
);
3408 case HCI_EV_PIN_CODE_REQ
:
3409 hci_pin_code_request_evt(hdev
, skb
);
3412 case HCI_EV_LINK_KEY_REQ
:
3413 hci_link_key_request_evt(hdev
, skb
);
3416 case HCI_EV_LINK_KEY_NOTIFY
:
3417 hci_link_key_notify_evt(hdev
, skb
);
3420 case HCI_EV_CLOCK_OFFSET
:
3421 hci_clock_offset_evt(hdev
, skb
);
3424 case HCI_EV_PKT_TYPE_CHANGE
:
3425 hci_pkt_type_change_evt(hdev
, skb
);
3428 case HCI_EV_PSCAN_REP_MODE
:
3429 hci_pscan_rep_mode_evt(hdev
, skb
);
3432 case HCI_EV_INQUIRY_RESULT_WITH_RSSI
:
3433 hci_inquiry_result_with_rssi_evt(hdev
, skb
);
3436 case HCI_EV_REMOTE_EXT_FEATURES
:
3437 hci_remote_ext_features_evt(hdev
, skb
);
3440 case HCI_EV_SYNC_CONN_COMPLETE
:
3441 hci_sync_conn_complete_evt(hdev
, skb
);
3444 case HCI_EV_SYNC_CONN_CHANGED
:
3445 hci_sync_conn_changed_evt(hdev
, skb
);
3448 case HCI_EV_SNIFF_SUBRATE
:
3449 hci_sniff_subrate_evt(hdev
, skb
);
3452 case HCI_EV_EXTENDED_INQUIRY_RESULT
:
3453 hci_extended_inquiry_result_evt(hdev
, skb
);
3456 case HCI_EV_IO_CAPA_REQUEST
:
3457 hci_io_capa_request_evt(hdev
, skb
);
3460 case HCI_EV_IO_CAPA_REPLY
:
3461 hci_io_capa_reply_evt(hdev
, skb
);
3464 case HCI_EV_USER_CONFIRM_REQUEST
:
3465 hci_user_confirm_request_evt(hdev
, skb
);
3468 case HCI_EV_USER_PASSKEY_REQUEST
:
3469 hci_user_passkey_request_evt(hdev
, skb
);
3472 case HCI_EV_SIMPLE_PAIR_COMPLETE
:
3473 hci_simple_pair_complete_evt(hdev
, skb
);
3476 case HCI_EV_REMOTE_HOST_FEATURES
:
3477 hci_remote_host_features_evt(hdev
, skb
);
3480 case HCI_EV_LE_META
:
3481 hci_le_meta_evt(hdev
, skb
);
3484 case HCI_EV_REMOTE_OOB_DATA_REQUEST
:
3485 hci_remote_oob_data_request_evt(hdev
, skb
);
3488 case HCI_EV_NUM_COMP_BLOCKS
:
3489 hci_num_comp_blocks_evt(hdev
, skb
);
3493 BT_DBG("%s event 0x%x", hdev
->name
, event
);
3498 hdev
->stat
.evt_rx
++;
3501 /* Generate internal stack event */
3502 void hci_si_event(struct hci_dev
*hdev
, int type
, int dlen
, void *data
)
3504 struct hci_event_hdr
*hdr
;
3505 struct hci_ev_stack_internal
*ev
;
3506 struct sk_buff
*skb
;
3508 skb
= bt_skb_alloc(HCI_EVENT_HDR_SIZE
+ sizeof(*ev
) + dlen
, GFP_ATOMIC
);
3512 hdr
= (void *) skb_put(skb
, HCI_EVENT_HDR_SIZE
);
3513 hdr
->evt
= HCI_EV_STACK_INTERNAL
;
3514 hdr
->plen
= sizeof(*ev
) + dlen
;
3516 ev
= (void *) skb_put(skb
, sizeof(*ev
) + dlen
);
3518 memcpy(ev
->data
, data
, dlen
);
3520 bt_cb(skb
)->incoming
= 1;
3521 __net_timestamp(skb
);
3523 bt_cb(skb
)->pkt_type
= HCI_EVENT_PKT
;
3524 skb
->dev
= (void *) hdev
;
3525 hci_send_to_sock(hdev
, skb
, NULL
);
3529 module_param(enable_le
, bool, 0644);
3530 MODULE_PARM_DESC(enable_le
, "Enable LE support");