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
);
202 static void hci_cc_write_local_name(struct hci_dev
*hdev
, struct sk_buff
*skb
)
204 __u8 status
= *((__u8
*) skb
->data
);
207 BT_DBG("%s status 0x%x", hdev
->name
, status
);
209 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_LOCAL_NAME
);
215 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
216 mgmt_set_local_name_complete(hdev
, sent
, status
);
219 memcpy(hdev
->dev_name
, sent
, HCI_MAX_NAME_LENGTH
);
221 hci_dev_unlock(hdev
);
224 static void hci_cc_read_local_name(struct hci_dev
*hdev
, struct sk_buff
*skb
)
226 struct hci_rp_read_local_name
*rp
= (void *) skb
->data
;
228 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
233 memcpy(hdev
->dev_name
, rp
->name
, HCI_MAX_NAME_LENGTH
);
236 static void hci_cc_write_auth_enable(struct hci_dev
*hdev
, struct sk_buff
*skb
)
238 __u8 status
= *((__u8
*) skb
->data
);
241 BT_DBG("%s status 0x%x", hdev
->name
, status
);
243 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_AUTH_ENABLE
);
248 __u8 param
= *((__u8
*) sent
);
250 if (param
== AUTH_ENABLED
)
251 set_bit(HCI_AUTH
, &hdev
->flags
);
253 clear_bit(HCI_AUTH
, &hdev
->flags
);
256 hci_req_complete(hdev
, HCI_OP_WRITE_AUTH_ENABLE
, status
);
259 static void hci_cc_write_encrypt_mode(struct hci_dev
*hdev
, struct sk_buff
*skb
)
261 __u8 status
= *((__u8
*) skb
->data
);
264 BT_DBG("%s status 0x%x", hdev
->name
, status
);
266 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_ENCRYPT_MODE
);
271 __u8 param
= *((__u8
*) sent
);
274 set_bit(HCI_ENCRYPT
, &hdev
->flags
);
276 clear_bit(HCI_ENCRYPT
, &hdev
->flags
);
279 hci_req_complete(hdev
, HCI_OP_WRITE_ENCRYPT_MODE
, status
);
282 static void hci_cc_write_scan_enable(struct hci_dev
*hdev
, struct sk_buff
*skb
)
284 __u8 param
, status
= *((__u8
*) skb
->data
);
285 int old_pscan
, old_iscan
;
288 BT_DBG("%s status 0x%x", hdev
->name
, status
);
290 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_SCAN_ENABLE
);
294 param
= *((__u8
*) sent
);
299 mgmt_write_scan_failed(hdev
, param
, status
);
300 hdev
->discov_timeout
= 0;
304 old_pscan
= test_and_clear_bit(HCI_PSCAN
, &hdev
->flags
);
305 old_iscan
= test_and_clear_bit(HCI_ISCAN
, &hdev
->flags
);
307 if (param
& SCAN_INQUIRY
) {
308 set_bit(HCI_ISCAN
, &hdev
->flags
);
310 mgmt_discoverable(hdev
, 1);
311 if (hdev
->discov_timeout
> 0) {
312 int to
= msecs_to_jiffies(hdev
->discov_timeout
* 1000);
313 queue_delayed_work(hdev
->workqueue
, &hdev
->discov_off
,
316 } else if (old_iscan
)
317 mgmt_discoverable(hdev
, 0);
319 if (param
& SCAN_PAGE
) {
320 set_bit(HCI_PSCAN
, &hdev
->flags
);
322 mgmt_connectable(hdev
, 1);
323 } else if (old_pscan
)
324 mgmt_connectable(hdev
, 0);
327 hci_dev_unlock(hdev
);
328 hci_req_complete(hdev
, HCI_OP_WRITE_SCAN_ENABLE
, status
);
331 static void hci_cc_read_class_of_dev(struct hci_dev
*hdev
, struct sk_buff
*skb
)
333 struct hci_rp_read_class_of_dev
*rp
= (void *) skb
->data
;
335 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
340 memcpy(hdev
->dev_class
, rp
->dev_class
, 3);
342 BT_DBG("%s class 0x%.2x%.2x%.2x", hdev
->name
,
343 hdev
->dev_class
[2], hdev
->dev_class
[1], hdev
->dev_class
[0]);
346 static void hci_cc_write_class_of_dev(struct hci_dev
*hdev
, struct sk_buff
*skb
)
348 __u8 status
= *((__u8
*) skb
->data
);
351 BT_DBG("%s status 0x%x", hdev
->name
, status
);
356 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_CLASS_OF_DEV
);
360 memcpy(hdev
->dev_class
, sent
, 3);
363 static void hci_cc_read_voice_setting(struct hci_dev
*hdev
, struct sk_buff
*skb
)
365 struct hci_rp_read_voice_setting
*rp
= (void *) skb
->data
;
368 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
373 setting
= __le16_to_cpu(rp
->voice_setting
);
375 if (hdev
->voice_setting
== setting
)
378 hdev
->voice_setting
= setting
;
380 BT_DBG("%s voice setting 0x%04x", hdev
->name
, setting
);
383 hdev
->notify(hdev
, HCI_NOTIFY_VOICE_SETTING
);
386 static void hci_cc_write_voice_setting(struct hci_dev
*hdev
, struct sk_buff
*skb
)
388 __u8 status
= *((__u8
*) skb
->data
);
392 BT_DBG("%s status 0x%x", hdev
->name
, status
);
397 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_VOICE_SETTING
);
401 setting
= get_unaligned_le16(sent
);
403 if (hdev
->voice_setting
== setting
)
406 hdev
->voice_setting
= setting
;
408 BT_DBG("%s voice setting 0x%04x", hdev
->name
, setting
);
411 hdev
->notify(hdev
, HCI_NOTIFY_VOICE_SETTING
);
414 static void hci_cc_host_buffer_size(struct hci_dev
*hdev
, struct sk_buff
*skb
)
416 __u8 status
= *((__u8
*) skb
->data
);
418 BT_DBG("%s status 0x%x", hdev
->name
, status
);
420 hci_req_complete(hdev
, HCI_OP_HOST_BUFFER_SIZE
, status
);
423 static void hci_cc_read_ssp_mode(struct hci_dev
*hdev
, struct sk_buff
*skb
)
425 struct hci_rp_read_ssp_mode
*rp
= (void *) skb
->data
;
427 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
433 set_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
);
435 clear_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
);
438 static void hci_cc_write_ssp_mode(struct hci_dev
*hdev
, struct sk_buff
*skb
)
440 __u8 status
= *((__u8
*) skb
->data
);
443 BT_DBG("%s status 0x%x", hdev
->name
, status
);
448 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_SSP_MODE
);
453 set_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
);
455 clear_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
);
458 static u8
hci_get_inquiry_mode(struct hci_dev
*hdev
)
460 if (hdev
->features
[6] & LMP_EXT_INQ
)
463 if (hdev
->features
[3] & LMP_RSSI_INQ
)
466 if (hdev
->manufacturer
== 11 && hdev
->hci_rev
== 0x00 &&
467 hdev
->lmp_subver
== 0x0757)
470 if (hdev
->manufacturer
== 15) {
471 if (hdev
->hci_rev
== 0x03 && hdev
->lmp_subver
== 0x6963)
473 if (hdev
->hci_rev
== 0x09 && hdev
->lmp_subver
== 0x6963)
475 if (hdev
->hci_rev
== 0x00 && hdev
->lmp_subver
== 0x6965)
479 if (hdev
->manufacturer
== 31 && hdev
->hci_rev
== 0x2005 &&
480 hdev
->lmp_subver
== 0x1805)
486 static void hci_setup_inquiry_mode(struct hci_dev
*hdev
)
490 mode
= hci_get_inquiry_mode(hdev
);
492 hci_send_cmd(hdev
, HCI_OP_WRITE_INQUIRY_MODE
, 1, &mode
);
495 static void hci_setup_event_mask(struct hci_dev
*hdev
)
497 /* The second byte is 0xff instead of 0x9f (two reserved bits
498 * disabled) since a Broadcom 1.2 dongle doesn't respond to the
499 * command otherwise */
500 u8 events
[8] = { 0xff, 0xff, 0xfb, 0xff, 0x00, 0x00, 0x00, 0x00 };
502 /* CSR 1.1 dongles does not accept any bitfield so don't try to set
503 * any event mask for pre 1.2 devices */
504 if (hdev
->hci_ver
< BLUETOOTH_VER_1_2
)
507 events
[4] |= 0x01; /* Flow Specification Complete */
508 events
[4] |= 0x02; /* Inquiry Result with RSSI */
509 events
[4] |= 0x04; /* Read Remote Extended Features Complete */
510 events
[5] |= 0x08; /* Synchronous Connection Complete */
511 events
[5] |= 0x10; /* Synchronous Connection Changed */
513 if (hdev
->features
[3] & LMP_RSSI_INQ
)
514 events
[4] |= 0x04; /* Inquiry Result with RSSI */
516 if (hdev
->features
[5] & LMP_SNIFF_SUBR
)
517 events
[5] |= 0x20; /* Sniff Subrating */
519 if (hdev
->features
[5] & LMP_PAUSE_ENC
)
520 events
[5] |= 0x80; /* Encryption Key Refresh Complete */
522 if (hdev
->features
[6] & LMP_EXT_INQ
)
523 events
[5] |= 0x40; /* Extended Inquiry Result */
525 if (hdev
->features
[6] & LMP_NO_FLUSH
)
526 events
[7] |= 0x01; /* Enhanced Flush Complete */
528 if (hdev
->features
[7] & LMP_LSTO
)
529 events
[6] |= 0x80; /* Link Supervision Timeout Changed */
531 if (hdev
->features
[6] & LMP_SIMPLE_PAIR
) {
532 events
[6] |= 0x01; /* IO Capability Request */
533 events
[6] |= 0x02; /* IO Capability Response */
534 events
[6] |= 0x04; /* User Confirmation Request */
535 events
[6] |= 0x08; /* User Passkey Request */
536 events
[6] |= 0x10; /* Remote OOB Data Request */
537 events
[6] |= 0x20; /* Simple Pairing Complete */
538 events
[7] |= 0x04; /* User Passkey Notification */
539 events
[7] |= 0x08; /* Keypress Notification */
540 events
[7] |= 0x10; /* Remote Host Supported
541 * Features Notification */
544 if (hdev
->features
[4] & LMP_LE
)
545 events
[7] |= 0x20; /* LE Meta-Event */
547 hci_send_cmd(hdev
, HCI_OP_SET_EVENT_MASK
, sizeof(events
), events
);
550 static void hci_set_le_support(struct hci_dev
*hdev
)
552 struct hci_cp_write_le_host_supported cp
;
554 memset(&cp
, 0, sizeof(cp
));
558 cp
.simul
= !!(hdev
->features
[6] & LMP_SIMUL_LE_BR
);
561 hci_send_cmd(hdev
, HCI_OP_WRITE_LE_HOST_SUPPORTED
, sizeof(cp
), &cp
);
564 static void hci_setup(struct hci_dev
*hdev
)
566 if (hdev
->dev_type
!= HCI_BREDR
)
569 hci_setup_event_mask(hdev
);
571 if (hdev
->hci_ver
> BLUETOOTH_VER_1_1
)
572 hci_send_cmd(hdev
, HCI_OP_READ_LOCAL_COMMANDS
, 0, NULL
);
574 if (hdev
->features
[6] & LMP_SIMPLE_PAIR
) {
576 hci_send_cmd(hdev
, HCI_OP_WRITE_SSP_MODE
, sizeof(mode
), &mode
);
579 if (hdev
->features
[3] & LMP_RSSI_INQ
)
580 hci_setup_inquiry_mode(hdev
);
582 if (hdev
->features
[7] & LMP_INQ_TX_PWR
)
583 hci_send_cmd(hdev
, HCI_OP_READ_INQ_RSP_TX_POWER
, 0, NULL
);
585 if (hdev
->features
[7] & LMP_EXTFEATURES
) {
586 struct hci_cp_read_local_ext_features cp
;
589 hci_send_cmd(hdev
, HCI_OP_READ_LOCAL_EXT_FEATURES
,
593 if (hdev
->features
[4] & LMP_LE
)
594 hci_set_le_support(hdev
);
597 static void hci_cc_read_local_version(struct hci_dev
*hdev
, struct sk_buff
*skb
)
599 struct hci_rp_read_local_version
*rp
= (void *) skb
->data
;
601 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
606 hdev
->hci_ver
= rp
->hci_ver
;
607 hdev
->hci_rev
= __le16_to_cpu(rp
->hci_rev
);
608 hdev
->lmp_ver
= rp
->lmp_ver
;
609 hdev
->manufacturer
= __le16_to_cpu(rp
->manufacturer
);
610 hdev
->lmp_subver
= __le16_to_cpu(rp
->lmp_subver
);
612 BT_DBG("%s manufacturer %d hci ver %d:%d", hdev
->name
,
614 hdev
->hci_ver
, hdev
->hci_rev
);
616 if (test_bit(HCI_INIT
, &hdev
->flags
))
620 static void hci_setup_link_policy(struct hci_dev
*hdev
)
624 if (hdev
->features
[0] & LMP_RSWITCH
)
625 link_policy
|= HCI_LP_RSWITCH
;
626 if (hdev
->features
[0] & LMP_HOLD
)
627 link_policy
|= HCI_LP_HOLD
;
628 if (hdev
->features
[0] & LMP_SNIFF
)
629 link_policy
|= HCI_LP_SNIFF
;
630 if (hdev
->features
[1] & LMP_PARK
)
631 link_policy
|= HCI_LP_PARK
;
633 link_policy
= cpu_to_le16(link_policy
);
634 hci_send_cmd(hdev
, HCI_OP_WRITE_DEF_LINK_POLICY
,
635 sizeof(link_policy
), &link_policy
);
638 static void hci_cc_read_local_commands(struct hci_dev
*hdev
, struct sk_buff
*skb
)
640 struct hci_rp_read_local_commands
*rp
= (void *) skb
->data
;
642 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
647 memcpy(hdev
->commands
, rp
->commands
, sizeof(hdev
->commands
));
649 if (test_bit(HCI_INIT
, &hdev
->flags
) && (hdev
->commands
[5] & 0x10))
650 hci_setup_link_policy(hdev
);
653 hci_req_complete(hdev
, HCI_OP_READ_LOCAL_COMMANDS
, rp
->status
);
656 static void hci_cc_read_local_features(struct hci_dev
*hdev
, struct sk_buff
*skb
)
658 struct hci_rp_read_local_features
*rp
= (void *) skb
->data
;
660 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
665 memcpy(hdev
->features
, rp
->features
, 8);
667 /* Adjust default settings according to features
668 * supported by device. */
670 if (hdev
->features
[0] & LMP_3SLOT
)
671 hdev
->pkt_type
|= (HCI_DM3
| HCI_DH3
);
673 if (hdev
->features
[0] & LMP_5SLOT
)
674 hdev
->pkt_type
|= (HCI_DM5
| HCI_DH5
);
676 if (hdev
->features
[1] & LMP_HV2
) {
677 hdev
->pkt_type
|= (HCI_HV2
);
678 hdev
->esco_type
|= (ESCO_HV2
);
681 if (hdev
->features
[1] & LMP_HV3
) {
682 hdev
->pkt_type
|= (HCI_HV3
);
683 hdev
->esco_type
|= (ESCO_HV3
);
686 if (hdev
->features
[3] & LMP_ESCO
)
687 hdev
->esco_type
|= (ESCO_EV3
);
689 if (hdev
->features
[4] & LMP_EV4
)
690 hdev
->esco_type
|= (ESCO_EV4
);
692 if (hdev
->features
[4] & LMP_EV5
)
693 hdev
->esco_type
|= (ESCO_EV5
);
695 if (hdev
->features
[5] & LMP_EDR_ESCO_2M
)
696 hdev
->esco_type
|= (ESCO_2EV3
);
698 if (hdev
->features
[5] & LMP_EDR_ESCO_3M
)
699 hdev
->esco_type
|= (ESCO_3EV3
);
701 if (hdev
->features
[5] & LMP_EDR_3S_ESCO
)
702 hdev
->esco_type
|= (ESCO_2EV5
| ESCO_3EV5
);
704 BT_DBG("%s features 0x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x", hdev
->name
,
705 hdev
->features
[0], hdev
->features
[1],
706 hdev
->features
[2], hdev
->features
[3],
707 hdev
->features
[4], hdev
->features
[5],
708 hdev
->features
[6], hdev
->features
[7]);
711 static void hci_cc_read_local_ext_features(struct hci_dev
*hdev
,
714 struct hci_rp_read_local_ext_features
*rp
= (void *) skb
->data
;
716 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
723 memcpy(hdev
->features
, rp
->features
, 8);
726 memcpy(hdev
->host_features
, rp
->features
, 8);
730 hci_req_complete(hdev
, HCI_OP_READ_LOCAL_EXT_FEATURES
, rp
->status
);
733 static void hci_cc_read_flow_control_mode(struct hci_dev
*hdev
,
736 struct hci_rp_read_flow_control_mode
*rp
= (void *) skb
->data
;
738 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
743 hdev
->flow_ctl_mode
= rp
->mode
;
745 hci_req_complete(hdev
, HCI_OP_READ_FLOW_CONTROL_MODE
, rp
->status
);
748 static void hci_cc_read_buffer_size(struct hci_dev
*hdev
, struct sk_buff
*skb
)
750 struct hci_rp_read_buffer_size
*rp
= (void *) skb
->data
;
752 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
757 hdev
->acl_mtu
= __le16_to_cpu(rp
->acl_mtu
);
758 hdev
->sco_mtu
= rp
->sco_mtu
;
759 hdev
->acl_pkts
= __le16_to_cpu(rp
->acl_max_pkt
);
760 hdev
->sco_pkts
= __le16_to_cpu(rp
->sco_max_pkt
);
762 if (test_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE
, &hdev
->quirks
)) {
767 hdev
->acl_cnt
= hdev
->acl_pkts
;
768 hdev
->sco_cnt
= hdev
->sco_pkts
;
770 BT_DBG("%s acl mtu %d:%d sco mtu %d:%d", hdev
->name
,
771 hdev
->acl_mtu
, hdev
->acl_pkts
,
772 hdev
->sco_mtu
, hdev
->sco_pkts
);
775 static void hci_cc_read_bd_addr(struct hci_dev
*hdev
, struct sk_buff
*skb
)
777 struct hci_rp_read_bd_addr
*rp
= (void *) skb
->data
;
779 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
782 bacpy(&hdev
->bdaddr
, &rp
->bdaddr
);
784 hci_req_complete(hdev
, HCI_OP_READ_BD_ADDR
, rp
->status
);
787 static void hci_cc_read_data_block_size(struct hci_dev
*hdev
,
790 struct hci_rp_read_data_block_size
*rp
= (void *) skb
->data
;
792 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
797 hdev
->block_mtu
= __le16_to_cpu(rp
->max_acl_len
);
798 hdev
->block_len
= __le16_to_cpu(rp
->block_len
);
799 hdev
->num_blocks
= __le16_to_cpu(rp
->num_blocks
);
801 hdev
->block_cnt
= hdev
->num_blocks
;
803 BT_DBG("%s blk mtu %d cnt %d len %d", hdev
->name
, hdev
->block_mtu
,
804 hdev
->block_cnt
, hdev
->block_len
);
806 hci_req_complete(hdev
, HCI_OP_READ_DATA_BLOCK_SIZE
, rp
->status
);
809 static void hci_cc_write_ca_timeout(struct hci_dev
*hdev
, struct sk_buff
*skb
)
811 __u8 status
= *((__u8
*) skb
->data
);
813 BT_DBG("%s status 0x%x", hdev
->name
, status
);
815 hci_req_complete(hdev
, HCI_OP_WRITE_CA_TIMEOUT
, status
);
818 static void hci_cc_read_local_amp_info(struct hci_dev
*hdev
,
821 struct hci_rp_read_local_amp_info
*rp
= (void *) skb
->data
;
823 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
828 hdev
->amp_status
= rp
->amp_status
;
829 hdev
->amp_total_bw
= __le32_to_cpu(rp
->total_bw
);
830 hdev
->amp_max_bw
= __le32_to_cpu(rp
->max_bw
);
831 hdev
->amp_min_latency
= __le32_to_cpu(rp
->min_latency
);
832 hdev
->amp_max_pdu
= __le32_to_cpu(rp
->max_pdu
);
833 hdev
->amp_type
= rp
->amp_type
;
834 hdev
->amp_pal_cap
= __le16_to_cpu(rp
->pal_cap
);
835 hdev
->amp_assoc_size
= __le16_to_cpu(rp
->max_assoc_size
);
836 hdev
->amp_be_flush_to
= __le32_to_cpu(rp
->be_flush_to
);
837 hdev
->amp_max_flush_to
= __le32_to_cpu(rp
->max_flush_to
);
839 hci_req_complete(hdev
, HCI_OP_READ_LOCAL_AMP_INFO
, rp
->status
);
842 static void hci_cc_delete_stored_link_key(struct hci_dev
*hdev
,
845 __u8 status
= *((__u8
*) skb
->data
);
847 BT_DBG("%s status 0x%x", hdev
->name
, status
);
849 hci_req_complete(hdev
, HCI_OP_DELETE_STORED_LINK_KEY
, status
);
852 static void hci_cc_set_event_mask(struct hci_dev
*hdev
, struct sk_buff
*skb
)
854 __u8 status
= *((__u8
*) skb
->data
);
856 BT_DBG("%s status 0x%x", hdev
->name
, status
);
858 hci_req_complete(hdev
, HCI_OP_SET_EVENT_MASK
, status
);
861 static void hci_cc_write_inquiry_mode(struct hci_dev
*hdev
,
864 __u8 status
= *((__u8
*) skb
->data
);
866 BT_DBG("%s status 0x%x", hdev
->name
, status
);
868 hci_req_complete(hdev
, HCI_OP_WRITE_INQUIRY_MODE
, status
);
871 static void hci_cc_read_inq_rsp_tx_power(struct hci_dev
*hdev
,
874 __u8 status
= *((__u8
*) skb
->data
);
876 BT_DBG("%s status 0x%x", hdev
->name
, status
);
878 hci_req_complete(hdev
, HCI_OP_READ_INQ_RSP_TX_POWER
, status
);
881 static void hci_cc_set_event_flt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
883 __u8 status
= *((__u8
*) skb
->data
);
885 BT_DBG("%s status 0x%x", hdev
->name
, status
);
887 hci_req_complete(hdev
, HCI_OP_SET_EVENT_FLT
, status
);
890 static void hci_cc_pin_code_reply(struct hci_dev
*hdev
, struct sk_buff
*skb
)
892 struct hci_rp_pin_code_reply
*rp
= (void *) skb
->data
;
893 struct hci_cp_pin_code_reply
*cp
;
894 struct hci_conn
*conn
;
896 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
900 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
901 mgmt_pin_code_reply_complete(hdev
, &rp
->bdaddr
, rp
->status
);
906 cp
= hci_sent_cmd_data(hdev
, HCI_OP_PIN_CODE_REPLY
);
910 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &cp
->bdaddr
);
912 conn
->pin_length
= cp
->pin_len
;
915 hci_dev_unlock(hdev
);
918 static void hci_cc_pin_code_neg_reply(struct hci_dev
*hdev
, struct sk_buff
*skb
)
920 struct hci_rp_pin_code_neg_reply
*rp
= (void *) skb
->data
;
922 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
926 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
927 mgmt_pin_code_neg_reply_complete(hdev
, &rp
->bdaddr
,
930 hci_dev_unlock(hdev
);
933 static void hci_cc_le_read_buffer_size(struct hci_dev
*hdev
,
936 struct hci_rp_le_read_buffer_size
*rp
= (void *) skb
->data
;
938 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
943 hdev
->le_mtu
= __le16_to_cpu(rp
->le_mtu
);
944 hdev
->le_pkts
= rp
->le_max_pkt
;
946 hdev
->le_cnt
= hdev
->le_pkts
;
948 BT_DBG("%s le mtu %d:%d", hdev
->name
, hdev
->le_mtu
, hdev
->le_pkts
);
950 hci_req_complete(hdev
, HCI_OP_LE_READ_BUFFER_SIZE
, rp
->status
);
953 static void hci_cc_user_confirm_reply(struct hci_dev
*hdev
, struct sk_buff
*skb
)
955 struct hci_rp_user_confirm_reply
*rp
= (void *) skb
->data
;
957 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
961 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
962 mgmt_user_confirm_reply_complete(hdev
, &rp
->bdaddr
,
965 hci_dev_unlock(hdev
);
968 static void hci_cc_user_confirm_neg_reply(struct hci_dev
*hdev
,
971 struct hci_rp_user_confirm_reply
*rp
= (void *) skb
->data
;
973 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
977 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
978 mgmt_user_confirm_neg_reply_complete(hdev
, &rp
->bdaddr
,
981 hci_dev_unlock(hdev
);
984 static void hci_cc_user_passkey_reply(struct hci_dev
*hdev
, struct sk_buff
*skb
)
986 struct hci_rp_user_confirm_reply
*rp
= (void *) skb
->data
;
988 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
992 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
993 mgmt_user_passkey_reply_complete(hdev
, &rp
->bdaddr
,
996 hci_dev_unlock(hdev
);
999 static void hci_cc_user_passkey_neg_reply(struct hci_dev
*hdev
,
1000 struct sk_buff
*skb
)
1002 struct hci_rp_user_confirm_reply
*rp
= (void *) skb
->data
;
1004 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
1008 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
1009 mgmt_user_passkey_neg_reply_complete(hdev
, &rp
->bdaddr
,
1012 hci_dev_unlock(hdev
);
1015 static void hci_cc_read_local_oob_data_reply(struct hci_dev
*hdev
,
1016 struct sk_buff
*skb
)
1018 struct hci_rp_read_local_oob_data
*rp
= (void *) skb
->data
;
1020 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
1023 mgmt_read_local_oob_data_reply_complete(hdev
, rp
->hash
,
1024 rp
->randomizer
, rp
->status
);
1025 hci_dev_unlock(hdev
);
1028 static void hci_cc_le_set_scan_param(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1030 __u8 status
= *((__u8
*) skb
->data
);
1032 BT_DBG("%s status 0x%x", hdev
->name
, status
);
1035 static void hci_cc_le_set_scan_enable(struct hci_dev
*hdev
,
1036 struct sk_buff
*skb
)
1038 struct hci_cp_le_set_scan_enable
*cp
;
1039 __u8 status
= *((__u8
*) skb
->data
);
1041 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 set_bit(HCI_LE_SCAN
, &hdev
->dev_flags
);
1054 cancel_delayed_work_sync(&hdev
->adv_work
);
1057 hci_adv_entries_clear(hdev
);
1058 hci_dev_unlock(hdev
);
1061 case LE_SCANNING_DISABLED
:
1062 clear_bit(HCI_LE_SCAN
, &hdev
->dev_flags
);
1064 schedule_delayed_work(&hdev
->adv_work
, ADV_CLEAR_TIMEOUT
);
1068 BT_ERR("Used reserved LE_Scan_Enable param %d", cp
->enable
);
1073 static void hci_cc_le_ltk_reply(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1075 struct hci_rp_le_ltk_reply
*rp
= (void *) skb
->data
;
1077 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
1082 hci_req_complete(hdev
, HCI_OP_LE_LTK_REPLY
, rp
->status
);
1085 static void hci_cc_le_ltk_neg_reply(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1087 struct hci_rp_le_ltk_neg_reply
*rp
= (void *) skb
->data
;
1089 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
1094 hci_req_complete(hdev
, HCI_OP_LE_LTK_NEG_REPLY
, rp
->status
);
1097 static inline void hci_cc_write_le_host_supported(struct hci_dev
*hdev
,
1098 struct sk_buff
*skb
)
1100 struct hci_cp_read_local_ext_features cp
;
1101 __u8 status
= *((__u8
*) skb
->data
);
1103 BT_DBG("%s status 0x%x", hdev
->name
, status
);
1109 hci_send_cmd(hdev
, HCI_OP_READ_LOCAL_EXT_FEATURES
, sizeof(cp
), &cp
);
1112 static inline void hci_cs_inquiry(struct hci_dev
*hdev
, __u8 status
)
1114 BT_DBG("%s status 0x%x", hdev
->name
, status
);
1117 hci_req_complete(hdev
, HCI_OP_INQUIRY
, status
);
1118 hci_conn_check_pending(hdev
);
1120 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
1121 mgmt_start_discovery_failed(hdev
, status
);
1122 hci_dev_unlock(hdev
);
1126 set_bit(HCI_INQUIRY
, &hdev
->flags
);
1129 hci_discovery_set_state(hdev
, DISCOVERY_INQUIRY
);
1130 hci_dev_unlock(hdev
);
1133 static inline void hci_cs_create_conn(struct hci_dev
*hdev
, __u8 status
)
1135 struct hci_cp_create_conn
*cp
;
1136 struct hci_conn
*conn
;
1138 BT_DBG("%s status 0x%x", hdev
->name
, status
);
1140 cp
= hci_sent_cmd_data(hdev
, HCI_OP_CREATE_CONN
);
1146 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &cp
->bdaddr
);
1148 BT_DBG("%s bdaddr %s conn %p", hdev
->name
, batostr(&cp
->bdaddr
), conn
);
1151 if (conn
&& conn
->state
== BT_CONNECT
) {
1152 if (status
!= 0x0c || conn
->attempt
> 2) {
1153 conn
->state
= BT_CLOSED
;
1154 hci_proto_connect_cfm(conn
, status
);
1157 conn
->state
= BT_CONNECT2
;
1161 conn
= hci_conn_add(hdev
, ACL_LINK
, &cp
->bdaddr
);
1164 conn
->link_mode
|= HCI_LM_MASTER
;
1166 BT_ERR("No memory for new connection");
1170 hci_dev_unlock(hdev
);
1173 static void hci_cs_add_sco(struct hci_dev
*hdev
, __u8 status
)
1175 struct hci_cp_add_sco
*cp
;
1176 struct hci_conn
*acl
, *sco
;
1179 BT_DBG("%s status 0x%x", hdev
->name
, status
);
1184 cp
= hci_sent_cmd_data(hdev
, HCI_OP_ADD_SCO
);
1188 handle
= __le16_to_cpu(cp
->handle
);
1190 BT_DBG("%s handle %d", hdev
->name
, handle
);
1194 acl
= hci_conn_hash_lookup_handle(hdev
, handle
);
1198 sco
->state
= BT_CLOSED
;
1200 hci_proto_connect_cfm(sco
, status
);
1205 hci_dev_unlock(hdev
);
1208 static void hci_cs_auth_requested(struct hci_dev
*hdev
, __u8 status
)
1210 struct hci_cp_auth_requested
*cp
;
1211 struct hci_conn
*conn
;
1213 BT_DBG("%s status 0x%x", hdev
->name
, status
);
1218 cp
= hci_sent_cmd_data(hdev
, HCI_OP_AUTH_REQUESTED
);
1224 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1226 if (conn
->state
== BT_CONFIG
) {
1227 hci_proto_connect_cfm(conn
, status
);
1232 hci_dev_unlock(hdev
);
1235 static void hci_cs_set_conn_encrypt(struct hci_dev
*hdev
, __u8 status
)
1237 struct hci_cp_set_conn_encrypt
*cp
;
1238 struct hci_conn
*conn
;
1240 BT_DBG("%s status 0x%x", hdev
->name
, status
);
1245 cp
= hci_sent_cmd_data(hdev
, HCI_OP_SET_CONN_ENCRYPT
);
1251 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1253 if (conn
->state
== BT_CONFIG
) {
1254 hci_proto_connect_cfm(conn
, status
);
1259 hci_dev_unlock(hdev
);
1262 static int hci_outgoing_auth_needed(struct hci_dev
*hdev
,
1263 struct hci_conn
*conn
)
1265 if (conn
->state
!= BT_CONFIG
|| !conn
->out
)
1268 if (conn
->pending_sec_level
== BT_SECURITY_SDP
)
1271 /* Only request authentication for SSP connections or non-SSP
1272 * devices with sec_level HIGH or if MITM protection is requested */
1273 if (!hci_conn_ssp_enabled(conn
) &&
1274 conn
->pending_sec_level
!= BT_SECURITY_HIGH
&&
1275 !(conn
->auth_type
& 0x01))
1281 static inline int hci_resolve_name(struct hci_dev
*hdev
, struct inquiry_entry
*e
)
1283 struct hci_cp_remote_name_req cp
;
1285 memset(&cp
, 0, sizeof(cp
));
1287 bacpy(&cp
.bdaddr
, &e
->data
.bdaddr
);
1288 cp
.pscan_rep_mode
= e
->data
.pscan_rep_mode
;
1289 cp
.pscan_mode
= e
->data
.pscan_mode
;
1290 cp
.clock_offset
= e
->data
.clock_offset
;
1292 return hci_send_cmd(hdev
, HCI_OP_REMOTE_NAME_REQ
, sizeof(cp
), &cp
);
1295 static bool hci_resolve_next_name(struct hci_dev
*hdev
)
1297 struct discovery_state
*discov
= &hdev
->discovery
;
1298 struct inquiry_entry
*e
;
1300 if (list_empty(&discov
->resolve
))
1303 e
= hci_inquiry_cache_lookup_resolve(hdev
, BDADDR_ANY
, NAME_NEEDED
);
1304 if (hci_resolve_name(hdev
, e
) == 0) {
1305 e
->name_state
= NAME_PENDING
;
1312 static void hci_check_pending_name(struct hci_dev
*hdev
, struct hci_conn
*conn
,
1313 bdaddr_t
*bdaddr
, u8
*name
, u8 name_len
)
1315 struct discovery_state
*discov
= &hdev
->discovery
;
1316 struct inquiry_entry
*e
;
1318 if (conn
&& !test_and_set_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
))
1319 mgmt_device_connected(hdev
, bdaddr
, ACL_LINK
, 0x00,
1320 name
, name_len
, conn
->dev_class
);
1322 if (discov
->state
== DISCOVERY_STOPPED
)
1325 if (discov
->state
== DISCOVERY_STOPPING
)
1326 goto discov_complete
;
1328 if (discov
->state
!= DISCOVERY_RESOLVING
)
1331 e
= hci_inquiry_cache_lookup_resolve(hdev
, bdaddr
, NAME_PENDING
);
1333 e
->name_state
= NAME_KNOWN
;
1336 mgmt_remote_name(hdev
, bdaddr
, ACL_LINK
, 0x00,
1337 e
->data
.rssi
, name
, name_len
);
1340 if (hci_resolve_next_name(hdev
))
1344 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
1347 static void hci_cs_remote_name_req(struct hci_dev
*hdev
, __u8 status
)
1349 struct hci_cp_remote_name_req
*cp
;
1350 struct hci_conn
*conn
;
1352 BT_DBG("%s status 0x%x", hdev
->name
, status
);
1354 /* If successful wait for the name req complete event before
1355 * checking for the need to do authentication */
1359 cp
= hci_sent_cmd_data(hdev
, HCI_OP_REMOTE_NAME_REQ
);
1365 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &cp
->bdaddr
);
1367 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
1368 hci_check_pending_name(hdev
, conn
, &cp
->bdaddr
, NULL
, 0);
1373 if (!hci_outgoing_auth_needed(hdev
, conn
))
1376 if (!test_and_set_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
)) {
1377 struct hci_cp_auth_requested cp
;
1378 cp
.handle
= __cpu_to_le16(conn
->handle
);
1379 hci_send_cmd(hdev
, HCI_OP_AUTH_REQUESTED
, sizeof(cp
), &cp
);
1383 hci_dev_unlock(hdev
);
1386 static void hci_cs_read_remote_features(struct hci_dev
*hdev
, __u8 status
)
1388 struct hci_cp_read_remote_features
*cp
;
1389 struct hci_conn
*conn
;
1391 BT_DBG("%s status 0x%x", hdev
->name
, status
);
1396 cp
= hci_sent_cmd_data(hdev
, HCI_OP_READ_REMOTE_FEATURES
);
1402 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1404 if (conn
->state
== BT_CONFIG
) {
1405 hci_proto_connect_cfm(conn
, status
);
1410 hci_dev_unlock(hdev
);
1413 static void hci_cs_read_remote_ext_features(struct hci_dev
*hdev
, __u8 status
)
1415 struct hci_cp_read_remote_ext_features
*cp
;
1416 struct hci_conn
*conn
;
1418 BT_DBG("%s status 0x%x", hdev
->name
, status
);
1423 cp
= hci_sent_cmd_data(hdev
, HCI_OP_READ_REMOTE_EXT_FEATURES
);
1429 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1431 if (conn
->state
== BT_CONFIG
) {
1432 hci_proto_connect_cfm(conn
, status
);
1437 hci_dev_unlock(hdev
);
1440 static void hci_cs_setup_sync_conn(struct hci_dev
*hdev
, __u8 status
)
1442 struct hci_cp_setup_sync_conn
*cp
;
1443 struct hci_conn
*acl
, *sco
;
1446 BT_DBG("%s status 0x%x", hdev
->name
, status
);
1451 cp
= hci_sent_cmd_data(hdev
, HCI_OP_SETUP_SYNC_CONN
);
1455 handle
= __le16_to_cpu(cp
->handle
);
1457 BT_DBG("%s handle %d", hdev
->name
, handle
);
1461 acl
= hci_conn_hash_lookup_handle(hdev
, handle
);
1465 sco
->state
= BT_CLOSED
;
1467 hci_proto_connect_cfm(sco
, status
);
1472 hci_dev_unlock(hdev
);
1475 static void hci_cs_sniff_mode(struct hci_dev
*hdev
, __u8 status
)
1477 struct hci_cp_sniff_mode
*cp
;
1478 struct hci_conn
*conn
;
1480 BT_DBG("%s status 0x%x", hdev
->name
, status
);
1485 cp
= hci_sent_cmd_data(hdev
, HCI_OP_SNIFF_MODE
);
1491 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1493 clear_bit(HCI_CONN_MODE_CHANGE_PEND
, &conn
->flags
);
1495 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND
, &conn
->flags
))
1496 hci_sco_setup(conn
, status
);
1499 hci_dev_unlock(hdev
);
1502 static void hci_cs_exit_sniff_mode(struct hci_dev
*hdev
, __u8 status
)
1504 struct hci_cp_exit_sniff_mode
*cp
;
1505 struct hci_conn
*conn
;
1507 BT_DBG("%s status 0x%x", hdev
->name
, status
);
1512 cp
= hci_sent_cmd_data(hdev
, HCI_OP_EXIT_SNIFF_MODE
);
1518 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1520 clear_bit(HCI_CONN_MODE_CHANGE_PEND
, &conn
->flags
);
1522 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND
, &conn
->flags
))
1523 hci_sco_setup(conn
, status
);
1526 hci_dev_unlock(hdev
);
1529 static void hci_cs_le_create_conn(struct hci_dev
*hdev
, __u8 status
)
1531 struct hci_cp_le_create_conn
*cp
;
1532 struct hci_conn
*conn
;
1534 BT_DBG("%s status 0x%x", hdev
->name
, status
);
1536 cp
= hci_sent_cmd_data(hdev
, HCI_OP_LE_CREATE_CONN
);
1542 conn
= hci_conn_hash_lookup_ba(hdev
, LE_LINK
, &cp
->peer_addr
);
1544 BT_DBG("%s bdaddr %s conn %p", hdev
->name
, batostr(&cp
->peer_addr
),
1548 if (conn
&& conn
->state
== BT_CONNECT
) {
1549 conn
->state
= BT_CLOSED
;
1550 hci_proto_connect_cfm(conn
, status
);
1555 conn
= hci_conn_add(hdev
, LE_LINK
, &cp
->peer_addr
);
1557 conn
->dst_type
= cp
->peer_addr_type
;
1560 BT_ERR("No memory for new connection");
1565 hci_dev_unlock(hdev
);
1568 static void hci_cs_le_start_enc(struct hci_dev
*hdev
, u8 status
)
1570 BT_DBG("%s status 0x%x", hdev
->name
, status
);
1573 static inline void hci_inquiry_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1575 __u8 status
= *((__u8
*) skb
->data
);
1576 struct discovery_state
*discov
= &hdev
->discovery
;
1577 struct inquiry_entry
*e
;
1579 BT_DBG("%s status %d", hdev
->name
, status
);
1581 hci_req_complete(hdev
, HCI_OP_INQUIRY
, status
);
1583 hci_conn_check_pending(hdev
);
1585 if (!test_and_clear_bit(HCI_INQUIRY
, &hdev
->flags
))
1588 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
1593 if (discov
->state
!= DISCOVERY_INQUIRY
)
1596 if (list_empty(&discov
->resolve
)) {
1597 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
1601 e
= hci_inquiry_cache_lookup_resolve(hdev
, BDADDR_ANY
, NAME_NEEDED
);
1602 if (e
&& hci_resolve_name(hdev
, e
) == 0) {
1603 e
->name_state
= NAME_PENDING
;
1604 hci_discovery_set_state(hdev
, DISCOVERY_RESOLVING
);
1606 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
1610 hci_dev_unlock(hdev
);
1613 static inline void hci_inquiry_result_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1615 struct inquiry_data data
;
1616 struct inquiry_info
*info
= (void *) (skb
->data
+ 1);
1617 int num_rsp
= *((__u8
*) skb
->data
);
1619 BT_DBG("%s num_rsp %d", hdev
->name
, num_rsp
);
1626 for (; num_rsp
; num_rsp
--, info
++) {
1629 bacpy(&data
.bdaddr
, &info
->bdaddr
);
1630 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
1631 data
.pscan_period_mode
= info
->pscan_period_mode
;
1632 data
.pscan_mode
= info
->pscan_mode
;
1633 memcpy(data
.dev_class
, info
->dev_class
, 3);
1634 data
.clock_offset
= info
->clock_offset
;
1636 data
.ssp_mode
= 0x00;
1638 name_known
= hci_inquiry_cache_update(hdev
, &data
, false);
1639 mgmt_device_found(hdev
, &info
->bdaddr
, ACL_LINK
, 0x00,
1640 info
->dev_class
, 0, !name_known
,
1644 hci_dev_unlock(hdev
);
1647 static inline void hci_conn_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1649 struct hci_ev_conn_complete
*ev
= (void *) skb
->data
;
1650 struct hci_conn
*conn
;
1652 BT_DBG("%s", hdev
->name
);
1656 conn
= hci_conn_hash_lookup_ba(hdev
, ev
->link_type
, &ev
->bdaddr
);
1658 if (ev
->link_type
!= SCO_LINK
)
1661 conn
= hci_conn_hash_lookup_ba(hdev
, ESCO_LINK
, &ev
->bdaddr
);
1665 conn
->type
= SCO_LINK
;
1669 conn
->handle
= __le16_to_cpu(ev
->handle
);
1671 if (conn
->type
== ACL_LINK
) {
1672 conn
->state
= BT_CONFIG
;
1673 hci_conn_hold(conn
);
1674 conn
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
1676 conn
->state
= BT_CONNECTED
;
1678 hci_conn_hold_device(conn
);
1679 hci_conn_add_sysfs(conn
);
1681 if (test_bit(HCI_AUTH
, &hdev
->flags
))
1682 conn
->link_mode
|= HCI_LM_AUTH
;
1684 if (test_bit(HCI_ENCRYPT
, &hdev
->flags
))
1685 conn
->link_mode
|= HCI_LM_ENCRYPT
;
1687 /* Get remote features */
1688 if (conn
->type
== ACL_LINK
) {
1689 struct hci_cp_read_remote_features cp
;
1690 cp
.handle
= ev
->handle
;
1691 hci_send_cmd(hdev
, HCI_OP_READ_REMOTE_FEATURES
,
1695 /* Set packet type for incoming connection */
1696 if (!conn
->out
&& hdev
->hci_ver
< BLUETOOTH_VER_2_0
) {
1697 struct hci_cp_change_conn_ptype cp
;
1698 cp
.handle
= ev
->handle
;
1699 cp
.pkt_type
= cpu_to_le16(conn
->pkt_type
);
1700 hci_send_cmd(hdev
, HCI_OP_CHANGE_CONN_PTYPE
,
1704 conn
->state
= BT_CLOSED
;
1705 if (conn
->type
== ACL_LINK
)
1706 mgmt_connect_failed(hdev
, &ev
->bdaddr
, conn
->type
,
1707 conn
->dst_type
, ev
->status
);
1710 if (conn
->type
== ACL_LINK
)
1711 hci_sco_setup(conn
, ev
->status
);
1714 hci_proto_connect_cfm(conn
, ev
->status
);
1716 } else if (ev
->link_type
!= ACL_LINK
)
1717 hci_proto_connect_cfm(conn
, ev
->status
);
1720 hci_dev_unlock(hdev
);
1722 hci_conn_check_pending(hdev
);
1725 static inline void hci_conn_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1727 struct hci_ev_conn_request
*ev
= (void *) skb
->data
;
1728 int mask
= hdev
->link_mode
;
1730 BT_DBG("%s bdaddr %s type 0x%x", hdev
->name
,
1731 batostr(&ev
->bdaddr
), ev
->link_type
);
1733 mask
|= hci_proto_connect_ind(hdev
, &ev
->bdaddr
, ev
->link_type
);
1735 if ((mask
& HCI_LM_ACCEPT
) &&
1736 !hci_blacklist_lookup(hdev
, &ev
->bdaddr
)) {
1737 /* Connection accepted */
1738 struct inquiry_entry
*ie
;
1739 struct hci_conn
*conn
;
1743 ie
= hci_inquiry_cache_lookup(hdev
, &ev
->bdaddr
);
1745 memcpy(ie
->data
.dev_class
, ev
->dev_class
, 3);
1747 conn
= hci_conn_hash_lookup_ba(hdev
, ev
->link_type
, &ev
->bdaddr
);
1749 conn
= hci_conn_add(hdev
, ev
->link_type
, &ev
->bdaddr
);
1751 BT_ERR("No memory for new connection");
1752 hci_dev_unlock(hdev
);
1757 memcpy(conn
->dev_class
, ev
->dev_class
, 3);
1758 conn
->state
= BT_CONNECT
;
1760 hci_dev_unlock(hdev
);
1762 if (ev
->link_type
== ACL_LINK
|| !lmp_esco_capable(hdev
)) {
1763 struct hci_cp_accept_conn_req cp
;
1765 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
1767 if (lmp_rswitch_capable(hdev
) && (mask
& HCI_LM_MASTER
))
1768 cp
.role
= 0x00; /* Become master */
1770 cp
.role
= 0x01; /* Remain slave */
1772 hci_send_cmd(hdev
, HCI_OP_ACCEPT_CONN_REQ
,
1775 struct hci_cp_accept_sync_conn_req cp
;
1777 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
1778 cp
.pkt_type
= cpu_to_le16(conn
->pkt_type
);
1780 cp
.tx_bandwidth
= cpu_to_le32(0x00001f40);
1781 cp
.rx_bandwidth
= cpu_to_le32(0x00001f40);
1782 cp
.max_latency
= cpu_to_le16(0xffff);
1783 cp
.content_format
= cpu_to_le16(hdev
->voice_setting
);
1784 cp
.retrans_effort
= 0xff;
1786 hci_send_cmd(hdev
, HCI_OP_ACCEPT_SYNC_CONN_REQ
,
1790 /* Connection rejected */
1791 struct hci_cp_reject_conn_req cp
;
1793 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
1794 cp
.reason
= HCI_ERROR_REJ_BAD_ADDR
;
1795 hci_send_cmd(hdev
, HCI_OP_REJECT_CONN_REQ
, sizeof(cp
), &cp
);
1799 static inline void hci_disconn_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1801 struct hci_ev_disconn_complete
*ev
= (void *) skb
->data
;
1802 struct hci_conn
*conn
;
1804 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
1808 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1812 if (ev
->status
== 0)
1813 conn
->state
= BT_CLOSED
;
1815 if (test_and_clear_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
) &&
1816 (conn
->type
== ACL_LINK
|| conn
->type
== LE_LINK
)) {
1817 if (ev
->status
!= 0)
1818 mgmt_disconnect_failed(hdev
, &conn
->dst
, ev
->status
);
1820 mgmt_device_disconnected(hdev
, &conn
->dst
, conn
->type
,
1824 if (ev
->status
== 0) {
1825 hci_proto_disconn_cfm(conn
, ev
->reason
);
1830 hci_dev_unlock(hdev
);
1833 static inline void hci_auth_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1835 struct hci_ev_auth_complete
*ev
= (void *) skb
->data
;
1836 struct hci_conn
*conn
;
1838 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
1842 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1847 if (!hci_conn_ssp_enabled(conn
) &&
1848 test_bit(HCI_CONN_REAUTH_PEND
, &conn
->flags
)) {
1849 BT_INFO("re-auth of legacy device is not possible.");
1851 conn
->link_mode
|= HCI_LM_AUTH
;
1852 conn
->sec_level
= conn
->pending_sec_level
;
1855 mgmt_auth_failed(hdev
, &conn
->dst
, ev
->status
);
1858 clear_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
);
1859 clear_bit(HCI_CONN_REAUTH_PEND
, &conn
->flags
);
1861 if (conn
->state
== BT_CONFIG
) {
1862 if (!ev
->status
&& hci_conn_ssp_enabled(conn
)) {
1863 struct hci_cp_set_conn_encrypt cp
;
1864 cp
.handle
= ev
->handle
;
1866 hci_send_cmd(hdev
, HCI_OP_SET_CONN_ENCRYPT
, sizeof(cp
),
1869 conn
->state
= BT_CONNECTED
;
1870 hci_proto_connect_cfm(conn
, ev
->status
);
1874 hci_auth_cfm(conn
, ev
->status
);
1876 hci_conn_hold(conn
);
1877 conn
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
1881 if (test_bit(HCI_CONN_ENCRYPT_PEND
, &conn
->flags
)) {
1883 struct hci_cp_set_conn_encrypt cp
;
1884 cp
.handle
= ev
->handle
;
1886 hci_send_cmd(hdev
, HCI_OP_SET_CONN_ENCRYPT
, sizeof(cp
),
1889 clear_bit(HCI_CONN_ENCRYPT_PEND
, &conn
->flags
);
1890 hci_encrypt_cfm(conn
, ev
->status
, 0x00);
1895 hci_dev_unlock(hdev
);
1898 static inline void hci_remote_name_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1900 struct hci_ev_remote_name
*ev
= (void *) skb
->data
;
1901 struct hci_conn
*conn
;
1903 BT_DBG("%s", hdev
->name
);
1905 hci_conn_check_pending(hdev
);
1909 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
1911 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
1914 if (ev
->status
== 0)
1915 hci_check_pending_name(hdev
, conn
, &ev
->bdaddr
, ev
->name
,
1916 strnlen(ev
->name
, HCI_MAX_NAME_LENGTH
));
1918 hci_check_pending_name(hdev
, conn
, &ev
->bdaddr
, NULL
, 0);
1924 if (!hci_outgoing_auth_needed(hdev
, conn
))
1927 if (!test_and_set_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
)) {
1928 struct hci_cp_auth_requested cp
;
1929 cp
.handle
= __cpu_to_le16(conn
->handle
);
1930 hci_send_cmd(hdev
, HCI_OP_AUTH_REQUESTED
, sizeof(cp
), &cp
);
1934 hci_dev_unlock(hdev
);
1937 static inline void hci_encrypt_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1939 struct hci_ev_encrypt_change
*ev
= (void *) skb
->data
;
1940 struct hci_conn
*conn
;
1942 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
1946 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1950 /* Encryption implies authentication */
1951 conn
->link_mode
|= HCI_LM_AUTH
;
1952 conn
->link_mode
|= HCI_LM_ENCRYPT
;
1953 conn
->sec_level
= conn
->pending_sec_level
;
1955 conn
->link_mode
&= ~HCI_LM_ENCRYPT
;
1958 clear_bit(HCI_CONN_ENCRYPT_PEND
, &conn
->flags
);
1960 if (conn
->state
== BT_CONFIG
) {
1962 conn
->state
= BT_CONNECTED
;
1964 hci_proto_connect_cfm(conn
, ev
->status
);
1967 hci_encrypt_cfm(conn
, ev
->status
, ev
->encrypt
);
1970 hci_dev_unlock(hdev
);
1973 static inline void hci_change_link_key_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1975 struct hci_ev_change_link_key_complete
*ev
= (void *) skb
->data
;
1976 struct hci_conn
*conn
;
1978 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
1982 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1985 conn
->link_mode
|= HCI_LM_SECURE
;
1987 clear_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
);
1989 hci_key_change_cfm(conn
, ev
->status
);
1992 hci_dev_unlock(hdev
);
1995 static inline void hci_remote_features_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1997 struct hci_ev_remote_features
*ev
= (void *) skb
->data
;
1998 struct hci_conn
*conn
;
2000 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
2004 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2009 memcpy(conn
->features
, ev
->features
, 8);
2011 if (conn
->state
!= BT_CONFIG
)
2014 if (!ev
->status
&& lmp_ssp_capable(hdev
) && lmp_ssp_capable(conn
)) {
2015 struct hci_cp_read_remote_ext_features cp
;
2016 cp
.handle
= ev
->handle
;
2018 hci_send_cmd(hdev
, HCI_OP_READ_REMOTE_EXT_FEATURES
,
2024 struct hci_cp_remote_name_req cp
;
2025 memset(&cp
, 0, sizeof(cp
));
2026 bacpy(&cp
.bdaddr
, &conn
->dst
);
2027 cp
.pscan_rep_mode
= 0x02;
2028 hci_send_cmd(hdev
, HCI_OP_REMOTE_NAME_REQ
, sizeof(cp
), &cp
);
2029 } else if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
))
2030 mgmt_device_connected(hdev
, &conn
->dst
, conn
->type
,
2031 conn
->dst_type
, NULL
, 0,
2034 if (!hci_outgoing_auth_needed(hdev
, conn
)) {
2035 conn
->state
= BT_CONNECTED
;
2036 hci_proto_connect_cfm(conn
, ev
->status
);
2041 hci_dev_unlock(hdev
);
2044 static inline void hci_remote_version_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2046 BT_DBG("%s", hdev
->name
);
2049 static inline void hci_qos_setup_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2051 BT_DBG("%s", hdev
->name
);
2054 static inline void hci_cmd_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2056 struct hci_ev_cmd_complete
*ev
= (void *) skb
->data
;
2059 skb_pull(skb
, sizeof(*ev
));
2061 opcode
= __le16_to_cpu(ev
->opcode
);
2064 case HCI_OP_INQUIRY_CANCEL
:
2065 hci_cc_inquiry_cancel(hdev
, skb
);
2068 case HCI_OP_EXIT_PERIODIC_INQ
:
2069 hci_cc_exit_periodic_inq(hdev
, skb
);
2072 case HCI_OP_REMOTE_NAME_REQ_CANCEL
:
2073 hci_cc_remote_name_req_cancel(hdev
, skb
);
2076 case HCI_OP_ROLE_DISCOVERY
:
2077 hci_cc_role_discovery(hdev
, skb
);
2080 case HCI_OP_READ_LINK_POLICY
:
2081 hci_cc_read_link_policy(hdev
, skb
);
2084 case HCI_OP_WRITE_LINK_POLICY
:
2085 hci_cc_write_link_policy(hdev
, skb
);
2088 case HCI_OP_READ_DEF_LINK_POLICY
:
2089 hci_cc_read_def_link_policy(hdev
, skb
);
2092 case HCI_OP_WRITE_DEF_LINK_POLICY
:
2093 hci_cc_write_def_link_policy(hdev
, skb
);
2097 hci_cc_reset(hdev
, skb
);
2100 case HCI_OP_WRITE_LOCAL_NAME
:
2101 hci_cc_write_local_name(hdev
, skb
);
2104 case HCI_OP_READ_LOCAL_NAME
:
2105 hci_cc_read_local_name(hdev
, skb
);
2108 case HCI_OP_WRITE_AUTH_ENABLE
:
2109 hci_cc_write_auth_enable(hdev
, skb
);
2112 case HCI_OP_WRITE_ENCRYPT_MODE
:
2113 hci_cc_write_encrypt_mode(hdev
, skb
);
2116 case HCI_OP_WRITE_SCAN_ENABLE
:
2117 hci_cc_write_scan_enable(hdev
, skb
);
2120 case HCI_OP_READ_CLASS_OF_DEV
:
2121 hci_cc_read_class_of_dev(hdev
, skb
);
2124 case HCI_OP_WRITE_CLASS_OF_DEV
:
2125 hci_cc_write_class_of_dev(hdev
, skb
);
2128 case HCI_OP_READ_VOICE_SETTING
:
2129 hci_cc_read_voice_setting(hdev
, skb
);
2132 case HCI_OP_WRITE_VOICE_SETTING
:
2133 hci_cc_write_voice_setting(hdev
, skb
);
2136 case HCI_OP_HOST_BUFFER_SIZE
:
2137 hci_cc_host_buffer_size(hdev
, skb
);
2140 case HCI_OP_READ_SSP_MODE
:
2141 hci_cc_read_ssp_mode(hdev
, skb
);
2144 case HCI_OP_WRITE_SSP_MODE
:
2145 hci_cc_write_ssp_mode(hdev
, skb
);
2148 case HCI_OP_READ_LOCAL_VERSION
:
2149 hci_cc_read_local_version(hdev
, skb
);
2152 case HCI_OP_READ_LOCAL_COMMANDS
:
2153 hci_cc_read_local_commands(hdev
, skb
);
2156 case HCI_OP_READ_LOCAL_FEATURES
:
2157 hci_cc_read_local_features(hdev
, skb
);
2160 case HCI_OP_READ_LOCAL_EXT_FEATURES
:
2161 hci_cc_read_local_ext_features(hdev
, skb
);
2164 case HCI_OP_READ_BUFFER_SIZE
:
2165 hci_cc_read_buffer_size(hdev
, skb
);
2168 case HCI_OP_READ_BD_ADDR
:
2169 hci_cc_read_bd_addr(hdev
, skb
);
2172 case HCI_OP_READ_DATA_BLOCK_SIZE
:
2173 hci_cc_read_data_block_size(hdev
, skb
);
2176 case HCI_OP_WRITE_CA_TIMEOUT
:
2177 hci_cc_write_ca_timeout(hdev
, skb
);
2180 case HCI_OP_READ_FLOW_CONTROL_MODE
:
2181 hci_cc_read_flow_control_mode(hdev
, skb
);
2184 case HCI_OP_READ_LOCAL_AMP_INFO
:
2185 hci_cc_read_local_amp_info(hdev
, skb
);
2188 case HCI_OP_DELETE_STORED_LINK_KEY
:
2189 hci_cc_delete_stored_link_key(hdev
, skb
);
2192 case HCI_OP_SET_EVENT_MASK
:
2193 hci_cc_set_event_mask(hdev
, skb
);
2196 case HCI_OP_WRITE_INQUIRY_MODE
:
2197 hci_cc_write_inquiry_mode(hdev
, skb
);
2200 case HCI_OP_READ_INQ_RSP_TX_POWER
:
2201 hci_cc_read_inq_rsp_tx_power(hdev
, skb
);
2204 case HCI_OP_SET_EVENT_FLT
:
2205 hci_cc_set_event_flt(hdev
, skb
);
2208 case HCI_OP_PIN_CODE_REPLY
:
2209 hci_cc_pin_code_reply(hdev
, skb
);
2212 case HCI_OP_PIN_CODE_NEG_REPLY
:
2213 hci_cc_pin_code_neg_reply(hdev
, skb
);
2216 case HCI_OP_READ_LOCAL_OOB_DATA
:
2217 hci_cc_read_local_oob_data_reply(hdev
, skb
);
2220 case HCI_OP_LE_READ_BUFFER_SIZE
:
2221 hci_cc_le_read_buffer_size(hdev
, skb
);
2224 case HCI_OP_USER_CONFIRM_REPLY
:
2225 hci_cc_user_confirm_reply(hdev
, skb
);
2228 case HCI_OP_USER_CONFIRM_NEG_REPLY
:
2229 hci_cc_user_confirm_neg_reply(hdev
, skb
);
2232 case HCI_OP_USER_PASSKEY_REPLY
:
2233 hci_cc_user_passkey_reply(hdev
, skb
);
2236 case HCI_OP_USER_PASSKEY_NEG_REPLY
:
2237 hci_cc_user_passkey_neg_reply(hdev
, skb
);
2239 case HCI_OP_LE_SET_SCAN_PARAM
:
2240 hci_cc_le_set_scan_param(hdev
, skb
);
2243 case HCI_OP_LE_SET_SCAN_ENABLE
:
2244 hci_cc_le_set_scan_enable(hdev
, skb
);
2247 case HCI_OP_LE_LTK_REPLY
:
2248 hci_cc_le_ltk_reply(hdev
, skb
);
2251 case HCI_OP_LE_LTK_NEG_REPLY
:
2252 hci_cc_le_ltk_neg_reply(hdev
, skb
);
2255 case HCI_OP_WRITE_LE_HOST_SUPPORTED
:
2256 hci_cc_write_le_host_supported(hdev
, skb
);
2260 BT_DBG("%s opcode 0x%x", hdev
->name
, opcode
);
2264 if (ev
->opcode
!= HCI_OP_NOP
)
2265 del_timer(&hdev
->cmd_timer
);
2268 atomic_set(&hdev
->cmd_cnt
, 1);
2269 if (!skb_queue_empty(&hdev
->cmd_q
))
2270 queue_work(hdev
->workqueue
, &hdev
->cmd_work
);
2274 static inline void hci_cmd_status_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2276 struct hci_ev_cmd_status
*ev
= (void *) skb
->data
;
2279 skb_pull(skb
, sizeof(*ev
));
2281 opcode
= __le16_to_cpu(ev
->opcode
);
2284 case HCI_OP_INQUIRY
:
2285 hci_cs_inquiry(hdev
, ev
->status
);
2288 case HCI_OP_CREATE_CONN
:
2289 hci_cs_create_conn(hdev
, ev
->status
);
2292 case HCI_OP_ADD_SCO
:
2293 hci_cs_add_sco(hdev
, ev
->status
);
2296 case HCI_OP_AUTH_REQUESTED
:
2297 hci_cs_auth_requested(hdev
, ev
->status
);
2300 case HCI_OP_SET_CONN_ENCRYPT
:
2301 hci_cs_set_conn_encrypt(hdev
, ev
->status
);
2304 case HCI_OP_REMOTE_NAME_REQ
:
2305 hci_cs_remote_name_req(hdev
, ev
->status
);
2308 case HCI_OP_READ_REMOTE_FEATURES
:
2309 hci_cs_read_remote_features(hdev
, ev
->status
);
2312 case HCI_OP_READ_REMOTE_EXT_FEATURES
:
2313 hci_cs_read_remote_ext_features(hdev
, ev
->status
);
2316 case HCI_OP_SETUP_SYNC_CONN
:
2317 hci_cs_setup_sync_conn(hdev
, ev
->status
);
2320 case HCI_OP_SNIFF_MODE
:
2321 hci_cs_sniff_mode(hdev
, ev
->status
);
2324 case HCI_OP_EXIT_SNIFF_MODE
:
2325 hci_cs_exit_sniff_mode(hdev
, ev
->status
);
2328 case HCI_OP_DISCONNECT
:
2329 if (ev
->status
!= 0)
2330 mgmt_disconnect_failed(hdev
, NULL
, ev
->status
);
2333 case HCI_OP_LE_CREATE_CONN
:
2334 hci_cs_le_create_conn(hdev
, ev
->status
);
2337 case HCI_OP_LE_START_ENC
:
2338 hci_cs_le_start_enc(hdev
, ev
->status
);
2342 BT_DBG("%s opcode 0x%x", hdev
->name
, opcode
);
2346 if (ev
->opcode
!= HCI_OP_NOP
)
2347 del_timer(&hdev
->cmd_timer
);
2349 if (ev
->ncmd
&& !test_bit(HCI_RESET
, &hdev
->flags
)) {
2350 atomic_set(&hdev
->cmd_cnt
, 1);
2351 if (!skb_queue_empty(&hdev
->cmd_q
))
2352 queue_work(hdev
->workqueue
, &hdev
->cmd_work
);
2356 static inline void hci_role_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2358 struct hci_ev_role_change
*ev
= (void *) skb
->data
;
2359 struct hci_conn
*conn
;
2361 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
2365 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
2369 conn
->link_mode
&= ~HCI_LM_MASTER
;
2371 conn
->link_mode
|= HCI_LM_MASTER
;
2374 clear_bit(HCI_CONN_RSWITCH_PEND
, &conn
->flags
);
2376 hci_role_switch_cfm(conn
, ev
->status
, ev
->role
);
2379 hci_dev_unlock(hdev
);
2382 static inline void hci_num_comp_pkts_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2384 struct hci_ev_num_comp_pkts
*ev
= (void *) skb
->data
;
2387 if (hdev
->flow_ctl_mode
!= HCI_FLOW_CTL_MODE_PACKET_BASED
) {
2388 BT_ERR("Wrong event for mode %d", hdev
->flow_ctl_mode
);
2392 if (skb
->len
< sizeof(*ev
) || skb
->len
< sizeof(*ev
) +
2393 ev
->num_hndl
* sizeof(struct hci_comp_pkts_info
)) {
2394 BT_DBG("%s bad parameters", hdev
->name
);
2398 BT_DBG("%s num_hndl %d", hdev
->name
, ev
->num_hndl
);
2400 for (i
= 0; i
< ev
->num_hndl
; i
++) {
2401 struct hci_comp_pkts_info
*info
= &ev
->handles
[i
];
2402 struct hci_conn
*conn
;
2403 __u16 handle
, count
;
2405 handle
= __le16_to_cpu(info
->handle
);
2406 count
= __le16_to_cpu(info
->count
);
2408 conn
= hci_conn_hash_lookup_handle(hdev
, handle
);
2412 conn
->sent
-= count
;
2414 switch (conn
->type
) {
2416 hdev
->acl_cnt
+= count
;
2417 if (hdev
->acl_cnt
> hdev
->acl_pkts
)
2418 hdev
->acl_cnt
= hdev
->acl_pkts
;
2422 if (hdev
->le_pkts
) {
2423 hdev
->le_cnt
+= count
;
2424 if (hdev
->le_cnt
> hdev
->le_pkts
)
2425 hdev
->le_cnt
= hdev
->le_pkts
;
2427 hdev
->acl_cnt
+= count
;
2428 if (hdev
->acl_cnt
> hdev
->acl_pkts
)
2429 hdev
->acl_cnt
= hdev
->acl_pkts
;
2434 hdev
->sco_cnt
+= count
;
2435 if (hdev
->sco_cnt
> hdev
->sco_pkts
)
2436 hdev
->sco_cnt
= hdev
->sco_pkts
;
2440 BT_ERR("Unknown type %d conn %p", conn
->type
, conn
);
2445 queue_work(hdev
->workqueue
, &hdev
->tx_work
);
2448 static inline void hci_num_comp_blocks_evt(struct hci_dev
*hdev
,
2449 struct sk_buff
*skb
)
2451 struct hci_ev_num_comp_blocks
*ev
= (void *) skb
->data
;
2454 if (hdev
->flow_ctl_mode
!= HCI_FLOW_CTL_MODE_BLOCK_BASED
) {
2455 BT_ERR("Wrong event for mode %d", hdev
->flow_ctl_mode
);
2459 if (skb
->len
< sizeof(*ev
) || skb
->len
< sizeof(*ev
) +
2460 ev
->num_hndl
* sizeof(struct hci_comp_blocks_info
)) {
2461 BT_DBG("%s bad parameters", hdev
->name
);
2465 BT_DBG("%s num_blocks %d num_hndl %d", hdev
->name
, ev
->num_blocks
,
2468 for (i
= 0; i
< ev
->num_hndl
; i
++) {
2469 struct hci_comp_blocks_info
*info
= &ev
->handles
[i
];
2470 struct hci_conn
*conn
;
2471 __u16 handle
, block_count
;
2473 handle
= __le16_to_cpu(info
->handle
);
2474 block_count
= __le16_to_cpu(info
->blocks
);
2476 conn
= hci_conn_hash_lookup_handle(hdev
, handle
);
2480 conn
->sent
-= block_count
;
2482 switch (conn
->type
) {
2484 hdev
->block_cnt
+= block_count
;
2485 if (hdev
->block_cnt
> hdev
->num_blocks
)
2486 hdev
->block_cnt
= hdev
->num_blocks
;
2490 BT_ERR("Unknown type %d conn %p", conn
->type
, conn
);
2495 queue_work(hdev
->workqueue
, &hdev
->tx_work
);
2498 static inline void hci_mode_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2500 struct hci_ev_mode_change
*ev
= (void *) skb
->data
;
2501 struct hci_conn
*conn
;
2503 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
2507 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2509 conn
->mode
= ev
->mode
;
2510 conn
->interval
= __le16_to_cpu(ev
->interval
);
2512 if (!test_and_clear_bit(HCI_CONN_MODE_CHANGE_PEND
, &conn
->flags
)) {
2513 if (conn
->mode
== HCI_CM_ACTIVE
)
2514 set_bit(HCI_CONN_POWER_SAVE
, &conn
->flags
);
2516 clear_bit(HCI_CONN_POWER_SAVE
, &conn
->flags
);
2519 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND
, &conn
->flags
))
2520 hci_sco_setup(conn
, ev
->status
);
2523 hci_dev_unlock(hdev
);
2526 static inline void hci_pin_code_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2528 struct hci_ev_pin_code_req
*ev
= (void *) skb
->data
;
2529 struct hci_conn
*conn
;
2531 BT_DBG("%s", hdev
->name
);
2535 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
2539 if (conn
->state
== BT_CONNECTED
) {
2540 hci_conn_hold(conn
);
2541 conn
->disc_timeout
= HCI_PAIRING_TIMEOUT
;
2545 if (!test_bit(HCI_PAIRABLE
, &hdev
->dev_flags
))
2546 hci_send_cmd(hdev
, HCI_OP_PIN_CODE_NEG_REPLY
,
2547 sizeof(ev
->bdaddr
), &ev
->bdaddr
);
2548 else if (test_bit(HCI_MGMT
, &hdev
->dev_flags
)) {
2551 if (conn
->pending_sec_level
== BT_SECURITY_HIGH
)
2556 mgmt_pin_code_request(hdev
, &ev
->bdaddr
, secure
);
2560 hci_dev_unlock(hdev
);
2563 static inline void hci_link_key_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2565 struct hci_ev_link_key_req
*ev
= (void *) skb
->data
;
2566 struct hci_cp_link_key_reply cp
;
2567 struct hci_conn
*conn
;
2568 struct link_key
*key
;
2570 BT_DBG("%s", hdev
->name
);
2572 if (!test_bit(HCI_LINK_KEYS
, &hdev
->dev_flags
))
2577 key
= hci_find_link_key(hdev
, &ev
->bdaddr
);
2579 BT_DBG("%s link key not found for %s", hdev
->name
,
2580 batostr(&ev
->bdaddr
));
2584 BT_DBG("%s found key type %u for %s", hdev
->name
, key
->type
,
2585 batostr(&ev
->bdaddr
));
2587 if (!test_bit(HCI_DEBUG_KEYS
, &hdev
->dev_flags
) &&
2588 key
->type
== HCI_LK_DEBUG_COMBINATION
) {
2589 BT_DBG("%s ignoring debug key", hdev
->name
);
2593 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
2595 if (key
->type
== HCI_LK_UNAUTH_COMBINATION
&&
2596 conn
->auth_type
!= 0xff &&
2597 (conn
->auth_type
& 0x01)) {
2598 BT_DBG("%s ignoring unauthenticated key", hdev
->name
);
2602 if (key
->type
== HCI_LK_COMBINATION
&& key
->pin_len
< 16 &&
2603 conn
->pending_sec_level
== BT_SECURITY_HIGH
) {
2604 BT_DBG("%s ignoring key unauthenticated for high \
2605 security", hdev
->name
);
2609 conn
->key_type
= key
->type
;
2610 conn
->pin_length
= key
->pin_len
;
2613 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
2614 memcpy(cp
.link_key
, key
->val
, 16);
2616 hci_send_cmd(hdev
, HCI_OP_LINK_KEY_REPLY
, sizeof(cp
), &cp
);
2618 hci_dev_unlock(hdev
);
2623 hci_send_cmd(hdev
, HCI_OP_LINK_KEY_NEG_REPLY
, 6, &ev
->bdaddr
);
2624 hci_dev_unlock(hdev
);
2627 static inline void hci_link_key_notify_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2629 struct hci_ev_link_key_notify
*ev
= (void *) skb
->data
;
2630 struct hci_conn
*conn
;
2633 BT_DBG("%s", hdev
->name
);
2637 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
2639 hci_conn_hold(conn
);
2640 conn
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
2641 pin_len
= conn
->pin_length
;
2643 if (ev
->key_type
!= HCI_LK_CHANGED_COMBINATION
)
2644 conn
->key_type
= ev
->key_type
;
2649 if (test_bit(HCI_LINK_KEYS
, &hdev
->dev_flags
))
2650 hci_add_link_key(hdev
, conn
, 1, &ev
->bdaddr
, ev
->link_key
,
2651 ev
->key_type
, pin_len
);
2653 hci_dev_unlock(hdev
);
2656 static inline void hci_clock_offset_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2658 struct hci_ev_clock_offset
*ev
= (void *) skb
->data
;
2659 struct hci_conn
*conn
;
2661 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
2665 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2666 if (conn
&& !ev
->status
) {
2667 struct inquiry_entry
*ie
;
2669 ie
= hci_inquiry_cache_lookup(hdev
, &conn
->dst
);
2671 ie
->data
.clock_offset
= ev
->clock_offset
;
2672 ie
->timestamp
= jiffies
;
2676 hci_dev_unlock(hdev
);
2679 static inline void hci_pkt_type_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2681 struct hci_ev_pkt_type_change
*ev
= (void *) skb
->data
;
2682 struct hci_conn
*conn
;
2684 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
2688 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2689 if (conn
&& !ev
->status
)
2690 conn
->pkt_type
= __le16_to_cpu(ev
->pkt_type
);
2692 hci_dev_unlock(hdev
);
2695 static inline void hci_pscan_rep_mode_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2697 struct hci_ev_pscan_rep_mode
*ev
= (void *) skb
->data
;
2698 struct inquiry_entry
*ie
;
2700 BT_DBG("%s", hdev
->name
);
2704 ie
= hci_inquiry_cache_lookup(hdev
, &ev
->bdaddr
);
2706 ie
->data
.pscan_rep_mode
= ev
->pscan_rep_mode
;
2707 ie
->timestamp
= jiffies
;
2710 hci_dev_unlock(hdev
);
2713 static inline void hci_inquiry_result_with_rssi_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2715 struct inquiry_data data
;
2716 int num_rsp
= *((__u8
*) skb
->data
);
2719 BT_DBG("%s num_rsp %d", hdev
->name
, num_rsp
);
2726 if ((skb
->len
- 1) / num_rsp
!= sizeof(struct inquiry_info_with_rssi
)) {
2727 struct inquiry_info_with_rssi_and_pscan_mode
*info
;
2728 info
= (void *) (skb
->data
+ 1);
2730 for (; num_rsp
; num_rsp
--, info
++) {
2731 bacpy(&data
.bdaddr
, &info
->bdaddr
);
2732 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
2733 data
.pscan_period_mode
= info
->pscan_period_mode
;
2734 data
.pscan_mode
= info
->pscan_mode
;
2735 memcpy(data
.dev_class
, info
->dev_class
, 3);
2736 data
.clock_offset
= info
->clock_offset
;
2737 data
.rssi
= info
->rssi
;
2738 data
.ssp_mode
= 0x00;
2740 name_known
= hci_inquiry_cache_update(hdev
, &data
,
2742 mgmt_device_found(hdev
, &info
->bdaddr
, ACL_LINK
, 0x00,
2743 info
->dev_class
, info
->rssi
,
2744 !name_known
, NULL
, 0);
2747 struct inquiry_info_with_rssi
*info
= (void *) (skb
->data
+ 1);
2749 for (; num_rsp
; num_rsp
--, info
++) {
2750 bacpy(&data
.bdaddr
, &info
->bdaddr
);
2751 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
2752 data
.pscan_period_mode
= info
->pscan_period_mode
;
2753 data
.pscan_mode
= 0x00;
2754 memcpy(data
.dev_class
, info
->dev_class
, 3);
2755 data
.clock_offset
= info
->clock_offset
;
2756 data
.rssi
= info
->rssi
;
2757 data
.ssp_mode
= 0x00;
2758 name_known
= hci_inquiry_cache_update(hdev
, &data
,
2760 mgmt_device_found(hdev
, &info
->bdaddr
, ACL_LINK
, 0x00,
2761 info
->dev_class
, info
->rssi
,
2762 !name_known
, NULL
, 0);
2766 hci_dev_unlock(hdev
);
2769 static inline void hci_remote_ext_features_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2771 struct hci_ev_remote_ext_features
*ev
= (void *) skb
->data
;
2772 struct hci_conn
*conn
;
2774 BT_DBG("%s", hdev
->name
);
2778 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2782 if (!ev
->status
&& ev
->page
== 0x01) {
2783 struct inquiry_entry
*ie
;
2785 ie
= hci_inquiry_cache_lookup(hdev
, &conn
->dst
);
2787 ie
->data
.ssp_mode
= (ev
->features
[0] & 0x01);
2789 if (ev
->features
[0] & 0x01)
2790 set_bit(HCI_CONN_SSP_ENABLED
, &conn
->flags
);
2793 if (conn
->state
!= BT_CONFIG
)
2797 struct hci_cp_remote_name_req cp
;
2798 memset(&cp
, 0, sizeof(cp
));
2799 bacpy(&cp
.bdaddr
, &conn
->dst
);
2800 cp
.pscan_rep_mode
= 0x02;
2801 hci_send_cmd(hdev
, HCI_OP_REMOTE_NAME_REQ
, sizeof(cp
), &cp
);
2802 } else if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
))
2803 mgmt_device_connected(hdev
, &conn
->dst
, conn
->type
,
2804 conn
->dst_type
, NULL
, 0,
2807 if (!hci_outgoing_auth_needed(hdev
, conn
)) {
2808 conn
->state
= BT_CONNECTED
;
2809 hci_proto_connect_cfm(conn
, ev
->status
);
2814 hci_dev_unlock(hdev
);
2817 static inline void hci_sync_conn_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2819 struct hci_ev_sync_conn_complete
*ev
= (void *) skb
->data
;
2820 struct hci_conn
*conn
;
2822 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
2826 conn
= hci_conn_hash_lookup_ba(hdev
, ev
->link_type
, &ev
->bdaddr
);
2828 if (ev
->link_type
== ESCO_LINK
)
2831 conn
= hci_conn_hash_lookup_ba(hdev
, ESCO_LINK
, &ev
->bdaddr
);
2835 conn
->type
= SCO_LINK
;
2838 switch (ev
->status
) {
2840 conn
->handle
= __le16_to_cpu(ev
->handle
);
2841 conn
->state
= BT_CONNECTED
;
2843 hci_conn_hold_device(conn
);
2844 hci_conn_add_sysfs(conn
);
2847 case 0x11: /* Unsupported Feature or Parameter Value */
2848 case 0x1c: /* SCO interval rejected */
2849 case 0x1a: /* Unsupported Remote Feature */
2850 case 0x1f: /* Unspecified error */
2851 if (conn
->out
&& conn
->attempt
< 2) {
2852 conn
->pkt_type
= (hdev
->esco_type
& SCO_ESCO_MASK
) |
2853 (hdev
->esco_type
& EDR_ESCO_MASK
);
2854 hci_setup_sync(conn
, conn
->link
->handle
);
2860 conn
->state
= BT_CLOSED
;
2864 hci_proto_connect_cfm(conn
, ev
->status
);
2869 hci_dev_unlock(hdev
);
2872 static inline void hci_sync_conn_changed_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2874 BT_DBG("%s", hdev
->name
);
2877 static inline void hci_sniff_subrate_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2879 struct hci_ev_sniff_subrate
*ev
= (void *) skb
->data
;
2881 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
2884 static inline void hci_extended_inquiry_result_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2886 struct inquiry_data data
;
2887 struct extended_inquiry_info
*info
= (void *) (skb
->data
+ 1);
2888 int num_rsp
= *((__u8
*) skb
->data
);
2890 BT_DBG("%s num_rsp %d", hdev
->name
, num_rsp
);
2897 for (; num_rsp
; num_rsp
--, info
++) {
2900 bacpy(&data
.bdaddr
, &info
->bdaddr
);
2901 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
2902 data
.pscan_period_mode
= info
->pscan_period_mode
;
2903 data
.pscan_mode
= 0x00;
2904 memcpy(data
.dev_class
, info
->dev_class
, 3);
2905 data
.clock_offset
= info
->clock_offset
;
2906 data
.rssi
= info
->rssi
;
2907 data
.ssp_mode
= 0x01;
2909 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
2910 name_known
= eir_has_data_type(info
->data
,
2916 name_known
= hci_inquiry_cache_update(hdev
, &data
, name_known
);
2917 mgmt_device_found(hdev
, &info
->bdaddr
, ACL_LINK
, 0x00,
2918 info
->dev_class
, info
->rssi
,
2919 !name_known
, info
->data
,
2920 sizeof(info
->data
));
2923 hci_dev_unlock(hdev
);
2926 static inline u8
hci_get_auth_req(struct hci_conn
*conn
)
2928 /* If remote requests dedicated bonding follow that lead */
2929 if (conn
->remote_auth
== 0x02 || conn
->remote_auth
== 0x03) {
2930 /* If both remote and local IO capabilities allow MITM
2931 * protection then require it, otherwise don't */
2932 if (conn
->remote_cap
== 0x03 || conn
->io_capability
== 0x03)
2938 /* If remote requests no-bonding follow that lead */
2939 if (conn
->remote_auth
== 0x00 || conn
->remote_auth
== 0x01)
2940 return conn
->remote_auth
| (conn
->auth_type
& 0x01);
2942 return conn
->auth_type
;
2945 static inline void hci_io_capa_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2947 struct hci_ev_io_capa_request
*ev
= (void *) skb
->data
;
2948 struct hci_conn
*conn
;
2950 BT_DBG("%s", hdev
->name
);
2954 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
2958 hci_conn_hold(conn
);
2960 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
2963 if (test_bit(HCI_PAIRABLE
, &hdev
->dev_flags
) ||
2964 (conn
->remote_auth
& ~0x01) == HCI_AT_NO_BONDING
) {
2965 struct hci_cp_io_capability_reply cp
;
2967 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
2968 /* Change the IO capability from KeyboardDisplay
2969 * to DisplayYesNo as it is not supported by BT spec. */
2970 cp
.capability
= (conn
->io_capability
== 0x04) ?
2971 0x01 : conn
->io_capability
;
2972 conn
->auth_type
= hci_get_auth_req(conn
);
2973 cp
.authentication
= conn
->auth_type
;
2975 if ((conn
->out
|| test_bit(HCI_CONN_REMOTE_OOB
, &conn
->flags
)) &&
2976 hci_find_remote_oob_data(hdev
, &conn
->dst
))
2981 hci_send_cmd(hdev
, HCI_OP_IO_CAPABILITY_REPLY
,
2984 struct hci_cp_io_capability_neg_reply cp
;
2986 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
2987 cp
.reason
= HCI_ERROR_PAIRING_NOT_ALLOWED
;
2989 hci_send_cmd(hdev
, HCI_OP_IO_CAPABILITY_NEG_REPLY
,
2994 hci_dev_unlock(hdev
);
2997 static inline void hci_io_capa_reply_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2999 struct hci_ev_io_capa_reply
*ev
= (void *) skb
->data
;
3000 struct hci_conn
*conn
;
3002 BT_DBG("%s", hdev
->name
);
3006 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3010 conn
->remote_cap
= ev
->capability
;
3011 conn
->remote_auth
= ev
->authentication
;
3013 set_bit(HCI_CONN_REMOTE_OOB
, &conn
->flags
);
3016 hci_dev_unlock(hdev
);
3019 static inline void hci_user_confirm_request_evt(struct hci_dev
*hdev
,
3020 struct sk_buff
*skb
)
3022 struct hci_ev_user_confirm_req
*ev
= (void *) skb
->data
;
3023 int loc_mitm
, rem_mitm
, confirm_hint
= 0;
3024 struct hci_conn
*conn
;
3026 BT_DBG("%s", hdev
->name
);
3030 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3033 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3037 loc_mitm
= (conn
->auth_type
& 0x01);
3038 rem_mitm
= (conn
->remote_auth
& 0x01);
3040 /* If we require MITM but the remote device can't provide that
3041 * (it has NoInputNoOutput) then reject the confirmation
3042 * request. The only exception is when we're dedicated bonding
3043 * initiators (connect_cfm_cb set) since then we always have the MITM
3045 if (!conn
->connect_cfm_cb
&& loc_mitm
&& conn
->remote_cap
== 0x03) {
3046 BT_DBG("Rejecting request: remote device can't provide MITM");
3047 hci_send_cmd(hdev
, HCI_OP_USER_CONFIRM_NEG_REPLY
,
3048 sizeof(ev
->bdaddr
), &ev
->bdaddr
);
3052 /* If no side requires MITM protection; auto-accept */
3053 if ((!loc_mitm
|| conn
->remote_cap
== 0x03) &&
3054 (!rem_mitm
|| conn
->io_capability
== 0x03)) {
3056 /* If we're not the initiators request authorization to
3057 * proceed from user space (mgmt_user_confirm with
3058 * confirm_hint set to 1). */
3059 if (!test_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
)) {
3060 BT_DBG("Confirming auto-accept as acceptor");
3065 BT_DBG("Auto-accept of user confirmation with %ums delay",
3066 hdev
->auto_accept_delay
);
3068 if (hdev
->auto_accept_delay
> 0) {
3069 int delay
= msecs_to_jiffies(hdev
->auto_accept_delay
);
3070 mod_timer(&conn
->auto_accept_timer
, jiffies
+ delay
);
3074 hci_send_cmd(hdev
, HCI_OP_USER_CONFIRM_REPLY
,
3075 sizeof(ev
->bdaddr
), &ev
->bdaddr
);
3080 mgmt_user_confirm_request(hdev
, &ev
->bdaddr
, ev
->passkey
,
3084 hci_dev_unlock(hdev
);
3087 static inline void hci_user_passkey_request_evt(struct hci_dev
*hdev
,
3088 struct sk_buff
*skb
)
3090 struct hci_ev_user_passkey_req
*ev
= (void *) skb
->data
;
3092 BT_DBG("%s", hdev
->name
);
3096 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3097 mgmt_user_passkey_request(hdev
, &ev
->bdaddr
);
3099 hci_dev_unlock(hdev
);
3102 static inline void hci_simple_pair_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3104 struct hci_ev_simple_pair_complete
*ev
= (void *) skb
->data
;
3105 struct hci_conn
*conn
;
3107 BT_DBG("%s", hdev
->name
);
3111 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3115 /* To avoid duplicate auth_failed events to user space we check
3116 * the HCI_CONN_AUTH_PEND flag which will be set if we
3117 * initiated the authentication. A traditional auth_complete
3118 * event gets always produced as initiator and is also mapped to
3119 * the mgmt_auth_failed event */
3120 if (!test_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
) && ev
->status
!= 0)
3121 mgmt_auth_failed(hdev
, &conn
->dst
, ev
->status
);
3126 hci_dev_unlock(hdev
);
3129 static inline void hci_remote_host_features_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3131 struct hci_ev_remote_host_features
*ev
= (void *) skb
->data
;
3132 struct inquiry_entry
*ie
;
3134 BT_DBG("%s", hdev
->name
);
3138 ie
= hci_inquiry_cache_lookup(hdev
, &ev
->bdaddr
);
3140 ie
->data
.ssp_mode
= (ev
->features
[0] & 0x01);
3142 hci_dev_unlock(hdev
);
3145 static inline void hci_remote_oob_data_request_evt(struct hci_dev
*hdev
,
3146 struct sk_buff
*skb
)
3148 struct hci_ev_remote_oob_data_request
*ev
= (void *) skb
->data
;
3149 struct oob_data
*data
;
3151 BT_DBG("%s", hdev
->name
);
3155 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3158 data
= hci_find_remote_oob_data(hdev
, &ev
->bdaddr
);
3160 struct hci_cp_remote_oob_data_reply cp
;
3162 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
3163 memcpy(cp
.hash
, data
->hash
, sizeof(cp
.hash
));
3164 memcpy(cp
.randomizer
, data
->randomizer
, sizeof(cp
.randomizer
));
3166 hci_send_cmd(hdev
, HCI_OP_REMOTE_OOB_DATA_REPLY
, sizeof(cp
),
3169 struct hci_cp_remote_oob_data_neg_reply cp
;
3171 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
3172 hci_send_cmd(hdev
, HCI_OP_REMOTE_OOB_DATA_NEG_REPLY
, sizeof(cp
),
3177 hci_dev_unlock(hdev
);
3180 static inline void hci_le_conn_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3182 struct hci_ev_le_conn_complete
*ev
= (void *) skb
->data
;
3183 struct hci_conn
*conn
;
3185 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
3189 conn
= hci_conn_hash_lookup_ba(hdev
, LE_LINK
, &ev
->bdaddr
);
3191 conn
= hci_conn_add(hdev
, LE_LINK
, &ev
->bdaddr
);
3193 BT_ERR("No memory for new connection");
3194 hci_dev_unlock(hdev
);
3198 conn
->dst_type
= ev
->bdaddr_type
;
3202 mgmt_connect_failed(hdev
, &ev
->bdaddr
, conn
->type
,
3203 conn
->dst_type
, ev
->status
);
3204 hci_proto_connect_cfm(conn
, ev
->status
);
3205 conn
->state
= BT_CLOSED
;
3210 if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
))
3211 mgmt_device_connected(hdev
, &ev
->bdaddr
, conn
->type
,
3212 conn
->dst_type
, NULL
, 0, 0);
3214 conn
->sec_level
= BT_SECURITY_LOW
;
3215 conn
->handle
= __le16_to_cpu(ev
->handle
);
3216 conn
->state
= BT_CONNECTED
;
3218 hci_conn_hold_device(conn
);
3219 hci_conn_add_sysfs(conn
);
3221 hci_proto_connect_cfm(conn
, ev
->status
);
3224 hci_dev_unlock(hdev
);
3227 static inline void hci_le_adv_report_evt(struct hci_dev
*hdev
,
3228 struct sk_buff
*skb
)
3230 u8 num_reports
= skb
->data
[0];
3231 void *ptr
= &skb
->data
[1];
3236 while (num_reports
--) {
3237 struct hci_ev_le_advertising_info
*ev
= ptr
;
3239 hci_add_adv_entry(hdev
, ev
);
3241 rssi
= ev
->data
[ev
->length
];
3242 mgmt_device_found(hdev
, &ev
->bdaddr
, LE_LINK
, ev
->bdaddr_type
,
3243 NULL
, rssi
, 0, ev
->data
, ev
->length
);
3245 ptr
+= sizeof(*ev
) + ev
->length
+ 1;
3248 hci_dev_unlock(hdev
);
3251 static inline void hci_le_ltk_request_evt(struct hci_dev
*hdev
,
3252 struct sk_buff
*skb
)
3254 struct hci_ev_le_ltk_req
*ev
= (void *) skb
->data
;
3255 struct hci_cp_le_ltk_reply cp
;
3256 struct hci_cp_le_ltk_neg_reply neg
;
3257 struct hci_conn
*conn
;
3258 struct link_key
*ltk
;
3260 BT_DBG("%s handle %d", hdev
->name
, cpu_to_le16(ev
->handle
));
3264 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
3268 ltk
= hci_find_ltk(hdev
, ev
->ediv
, ev
->random
);
3272 memcpy(cp
.ltk
, ltk
->val
, sizeof(ltk
->val
));
3273 cp
.handle
= cpu_to_le16(conn
->handle
);
3274 conn
->pin_length
= ltk
->pin_len
;
3276 hci_send_cmd(hdev
, HCI_OP_LE_LTK_REPLY
, sizeof(cp
), &cp
);
3278 hci_dev_unlock(hdev
);
3283 neg
.handle
= ev
->handle
;
3284 hci_send_cmd(hdev
, HCI_OP_LE_LTK_NEG_REPLY
, sizeof(neg
), &neg
);
3285 hci_dev_unlock(hdev
);
3288 static inline void hci_le_meta_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3290 struct hci_ev_le_meta
*le_ev
= (void *) skb
->data
;
3292 skb_pull(skb
, sizeof(*le_ev
));
3294 switch (le_ev
->subevent
) {
3295 case HCI_EV_LE_CONN_COMPLETE
:
3296 hci_le_conn_complete_evt(hdev
, skb
);
3299 case HCI_EV_LE_ADVERTISING_REPORT
:
3300 hci_le_adv_report_evt(hdev
, skb
);
3303 case HCI_EV_LE_LTK_REQ
:
3304 hci_le_ltk_request_evt(hdev
, skb
);
3312 void hci_event_packet(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3314 struct hci_event_hdr
*hdr
= (void *) skb
->data
;
3315 __u8 event
= hdr
->evt
;
3317 skb_pull(skb
, HCI_EVENT_HDR_SIZE
);
3320 case HCI_EV_INQUIRY_COMPLETE
:
3321 hci_inquiry_complete_evt(hdev
, skb
);
3324 case HCI_EV_INQUIRY_RESULT
:
3325 hci_inquiry_result_evt(hdev
, skb
);
3328 case HCI_EV_CONN_COMPLETE
:
3329 hci_conn_complete_evt(hdev
, skb
);
3332 case HCI_EV_CONN_REQUEST
:
3333 hci_conn_request_evt(hdev
, skb
);
3336 case HCI_EV_DISCONN_COMPLETE
:
3337 hci_disconn_complete_evt(hdev
, skb
);
3340 case HCI_EV_AUTH_COMPLETE
:
3341 hci_auth_complete_evt(hdev
, skb
);
3344 case HCI_EV_REMOTE_NAME
:
3345 hci_remote_name_evt(hdev
, skb
);
3348 case HCI_EV_ENCRYPT_CHANGE
:
3349 hci_encrypt_change_evt(hdev
, skb
);
3352 case HCI_EV_CHANGE_LINK_KEY_COMPLETE
:
3353 hci_change_link_key_complete_evt(hdev
, skb
);
3356 case HCI_EV_REMOTE_FEATURES
:
3357 hci_remote_features_evt(hdev
, skb
);
3360 case HCI_EV_REMOTE_VERSION
:
3361 hci_remote_version_evt(hdev
, skb
);
3364 case HCI_EV_QOS_SETUP_COMPLETE
:
3365 hci_qos_setup_complete_evt(hdev
, skb
);
3368 case HCI_EV_CMD_COMPLETE
:
3369 hci_cmd_complete_evt(hdev
, skb
);
3372 case HCI_EV_CMD_STATUS
:
3373 hci_cmd_status_evt(hdev
, skb
);
3376 case HCI_EV_ROLE_CHANGE
:
3377 hci_role_change_evt(hdev
, skb
);
3380 case HCI_EV_NUM_COMP_PKTS
:
3381 hci_num_comp_pkts_evt(hdev
, skb
);
3384 case HCI_EV_MODE_CHANGE
:
3385 hci_mode_change_evt(hdev
, skb
);
3388 case HCI_EV_PIN_CODE_REQ
:
3389 hci_pin_code_request_evt(hdev
, skb
);
3392 case HCI_EV_LINK_KEY_REQ
:
3393 hci_link_key_request_evt(hdev
, skb
);
3396 case HCI_EV_LINK_KEY_NOTIFY
:
3397 hci_link_key_notify_evt(hdev
, skb
);
3400 case HCI_EV_CLOCK_OFFSET
:
3401 hci_clock_offset_evt(hdev
, skb
);
3404 case HCI_EV_PKT_TYPE_CHANGE
:
3405 hci_pkt_type_change_evt(hdev
, skb
);
3408 case HCI_EV_PSCAN_REP_MODE
:
3409 hci_pscan_rep_mode_evt(hdev
, skb
);
3412 case HCI_EV_INQUIRY_RESULT_WITH_RSSI
:
3413 hci_inquiry_result_with_rssi_evt(hdev
, skb
);
3416 case HCI_EV_REMOTE_EXT_FEATURES
:
3417 hci_remote_ext_features_evt(hdev
, skb
);
3420 case HCI_EV_SYNC_CONN_COMPLETE
:
3421 hci_sync_conn_complete_evt(hdev
, skb
);
3424 case HCI_EV_SYNC_CONN_CHANGED
:
3425 hci_sync_conn_changed_evt(hdev
, skb
);
3428 case HCI_EV_SNIFF_SUBRATE
:
3429 hci_sniff_subrate_evt(hdev
, skb
);
3432 case HCI_EV_EXTENDED_INQUIRY_RESULT
:
3433 hci_extended_inquiry_result_evt(hdev
, skb
);
3436 case HCI_EV_IO_CAPA_REQUEST
:
3437 hci_io_capa_request_evt(hdev
, skb
);
3440 case HCI_EV_IO_CAPA_REPLY
:
3441 hci_io_capa_reply_evt(hdev
, skb
);
3444 case HCI_EV_USER_CONFIRM_REQUEST
:
3445 hci_user_confirm_request_evt(hdev
, skb
);
3448 case HCI_EV_USER_PASSKEY_REQUEST
:
3449 hci_user_passkey_request_evt(hdev
, skb
);
3452 case HCI_EV_SIMPLE_PAIR_COMPLETE
:
3453 hci_simple_pair_complete_evt(hdev
, skb
);
3456 case HCI_EV_REMOTE_HOST_FEATURES
:
3457 hci_remote_host_features_evt(hdev
, skb
);
3460 case HCI_EV_LE_META
:
3461 hci_le_meta_evt(hdev
, skb
);
3464 case HCI_EV_REMOTE_OOB_DATA_REQUEST
:
3465 hci_remote_oob_data_request_evt(hdev
, skb
);
3468 case HCI_EV_NUM_COMP_BLOCKS
:
3469 hci_num_comp_blocks_evt(hdev
, skb
);
3473 BT_DBG("%s event 0x%x", hdev
->name
, event
);
3478 hdev
->stat
.evt_rx
++;
3481 /* Generate internal stack event */
3482 void hci_si_event(struct hci_dev
*hdev
, int type
, int dlen
, void *data
)
3484 struct hci_event_hdr
*hdr
;
3485 struct hci_ev_stack_internal
*ev
;
3486 struct sk_buff
*skb
;
3488 skb
= bt_skb_alloc(HCI_EVENT_HDR_SIZE
+ sizeof(*ev
) + dlen
, GFP_ATOMIC
);
3492 hdr
= (void *) skb_put(skb
, HCI_EVENT_HDR_SIZE
);
3493 hdr
->evt
= HCI_EV_STACK_INTERNAL
;
3494 hdr
->plen
= sizeof(*ev
) + dlen
;
3496 ev
= (void *) skb_put(skb
, sizeof(*ev
) + dlen
);
3498 memcpy(ev
->data
, data
, dlen
);
3500 bt_cb(skb
)->incoming
= 1;
3501 __net_timestamp(skb
);
3503 bt_cb(skb
)->pkt_type
= HCI_EVENT_PKT
;
3504 skb
->dev
= (void *) hdev
;
3505 hci_send_to_sock(hdev
, skb
, NULL
);
3509 module_param(enable_le
, bool, 0644);
3510 MODULE_PARM_DESC(enable_le
, "Enable LE support");