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/export.h>
28 #include <asm/unaligned.h>
30 #include <net/bluetooth/bluetooth.h>
31 #include <net/bluetooth/hci_core.h>
32 #include <net/bluetooth/mgmt.h>
33 #include <net/bluetooth/a2mp.h>
34 #include <net/bluetooth/amp.h>
36 /* Handle HCI Event packets */
38 static void hci_cc_inquiry_cancel(struct hci_dev
*hdev
, struct sk_buff
*skb
)
40 __u8 status
= *((__u8
*) skb
->data
);
42 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
46 mgmt_stop_discovery_failed(hdev
, status
);
51 clear_bit(HCI_INQUIRY
, &hdev
->flags
);
54 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
57 hci_req_complete(hdev
, HCI_OP_INQUIRY_CANCEL
, status
);
59 hci_conn_check_pending(hdev
);
62 static void hci_cc_periodic_inq(struct hci_dev
*hdev
, struct sk_buff
*skb
)
64 __u8 status
= *((__u8
*) skb
->data
);
66 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
71 set_bit(HCI_PERIODIC_INQ
, &hdev
->dev_flags
);
74 static void hci_cc_exit_periodic_inq(struct hci_dev
*hdev
, struct sk_buff
*skb
)
76 __u8 status
= *((__u8
*) skb
->data
);
78 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
83 clear_bit(HCI_PERIODIC_INQ
, &hdev
->dev_flags
);
85 hci_conn_check_pending(hdev
);
88 static void hci_cc_remote_name_req_cancel(struct hci_dev
*hdev
,
91 BT_DBG("%s", hdev
->name
);
94 static void hci_cc_role_discovery(struct hci_dev
*hdev
, struct sk_buff
*skb
)
96 struct hci_rp_role_discovery
*rp
= (void *) skb
->data
;
97 struct hci_conn
*conn
;
99 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
106 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(rp
->handle
));
109 conn
->link_mode
&= ~HCI_LM_MASTER
;
111 conn
->link_mode
|= HCI_LM_MASTER
;
114 hci_dev_unlock(hdev
);
117 static void hci_cc_read_link_policy(struct hci_dev
*hdev
, struct sk_buff
*skb
)
119 struct hci_rp_read_link_policy
*rp
= (void *) skb
->data
;
120 struct hci_conn
*conn
;
122 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
129 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(rp
->handle
));
131 conn
->link_policy
= __le16_to_cpu(rp
->policy
);
133 hci_dev_unlock(hdev
);
136 static void hci_cc_write_link_policy(struct hci_dev
*hdev
, struct sk_buff
*skb
)
138 struct hci_rp_write_link_policy
*rp
= (void *) skb
->data
;
139 struct hci_conn
*conn
;
142 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
147 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_LINK_POLICY
);
153 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(rp
->handle
));
155 conn
->link_policy
= get_unaligned_le16(sent
+ 2);
157 hci_dev_unlock(hdev
);
160 static void hci_cc_read_def_link_policy(struct hci_dev
*hdev
,
163 struct hci_rp_read_def_link_policy
*rp
= (void *) skb
->data
;
165 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
170 hdev
->link_policy
= __le16_to_cpu(rp
->policy
);
173 static void hci_cc_write_def_link_policy(struct hci_dev
*hdev
,
176 __u8 status
= *((__u8
*) skb
->data
);
179 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
181 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_DEF_LINK_POLICY
);
186 hdev
->link_policy
= get_unaligned_le16(sent
);
188 hci_req_complete(hdev
, HCI_OP_WRITE_DEF_LINK_POLICY
, status
);
191 static void hci_cc_reset(struct hci_dev
*hdev
, struct sk_buff
*skb
)
193 __u8 status
= *((__u8
*) skb
->data
);
195 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
197 clear_bit(HCI_RESET
, &hdev
->flags
);
199 hci_req_complete(hdev
, HCI_OP_RESET
, status
);
201 /* Reset all non-persistent flags */
202 hdev
->dev_flags
&= ~(BIT(HCI_LE_SCAN
) | BIT(HCI_PENDING_CLASS
) |
203 BIT(HCI_PERIODIC_INQ
));
205 hdev
->discovery
.state
= DISCOVERY_STOPPED
;
208 static void hci_cc_write_local_name(struct hci_dev
*hdev
, struct sk_buff
*skb
)
210 __u8 status
= *((__u8
*) skb
->data
);
213 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
215 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_LOCAL_NAME
);
221 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
222 mgmt_set_local_name_complete(hdev
, sent
, status
);
224 memcpy(hdev
->dev_name
, sent
, HCI_MAX_NAME_LENGTH
);
226 hci_dev_unlock(hdev
);
228 hci_req_complete(hdev
, HCI_OP_WRITE_LOCAL_NAME
, status
);
231 static void hci_cc_read_local_name(struct hci_dev
*hdev
, struct sk_buff
*skb
)
233 struct hci_rp_read_local_name
*rp
= (void *) skb
->data
;
235 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
240 if (test_bit(HCI_SETUP
, &hdev
->dev_flags
))
241 memcpy(hdev
->dev_name
, rp
->name
, HCI_MAX_NAME_LENGTH
);
244 static void hci_cc_write_auth_enable(struct hci_dev
*hdev
, struct sk_buff
*skb
)
246 __u8 status
= *((__u8
*) skb
->data
);
249 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
251 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_AUTH_ENABLE
);
256 __u8 param
= *((__u8
*) sent
);
258 if (param
== AUTH_ENABLED
)
259 set_bit(HCI_AUTH
, &hdev
->flags
);
261 clear_bit(HCI_AUTH
, &hdev
->flags
);
264 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
265 mgmt_auth_enable_complete(hdev
, status
);
267 hci_req_complete(hdev
, HCI_OP_WRITE_AUTH_ENABLE
, status
);
270 static void hci_cc_write_encrypt_mode(struct hci_dev
*hdev
, struct sk_buff
*skb
)
272 __u8 status
= *((__u8
*) skb
->data
);
275 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
277 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_ENCRYPT_MODE
);
282 __u8 param
= *((__u8
*) sent
);
285 set_bit(HCI_ENCRYPT
, &hdev
->flags
);
287 clear_bit(HCI_ENCRYPT
, &hdev
->flags
);
290 hci_req_complete(hdev
, HCI_OP_WRITE_ENCRYPT_MODE
, status
);
293 static void hci_cc_write_scan_enable(struct hci_dev
*hdev
, struct sk_buff
*skb
)
295 __u8 param
, status
= *((__u8
*) skb
->data
);
296 int old_pscan
, old_iscan
;
299 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
301 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_SCAN_ENABLE
);
305 param
= *((__u8
*) sent
);
310 mgmt_write_scan_failed(hdev
, param
, status
);
311 hdev
->discov_timeout
= 0;
315 old_pscan
= test_and_clear_bit(HCI_PSCAN
, &hdev
->flags
);
316 old_iscan
= test_and_clear_bit(HCI_ISCAN
, &hdev
->flags
);
318 if (param
& SCAN_INQUIRY
) {
319 set_bit(HCI_ISCAN
, &hdev
->flags
);
321 mgmt_discoverable(hdev
, 1);
322 if (hdev
->discov_timeout
> 0) {
323 int to
= msecs_to_jiffies(hdev
->discov_timeout
* 1000);
324 queue_delayed_work(hdev
->workqueue
, &hdev
->discov_off
,
327 } else if (old_iscan
)
328 mgmt_discoverable(hdev
, 0);
330 if (param
& SCAN_PAGE
) {
331 set_bit(HCI_PSCAN
, &hdev
->flags
);
333 mgmt_connectable(hdev
, 1);
334 } else if (old_pscan
)
335 mgmt_connectable(hdev
, 0);
338 hci_dev_unlock(hdev
);
339 hci_req_complete(hdev
, HCI_OP_WRITE_SCAN_ENABLE
, status
);
342 static void hci_cc_read_class_of_dev(struct hci_dev
*hdev
, struct sk_buff
*skb
)
344 struct hci_rp_read_class_of_dev
*rp
= (void *) skb
->data
;
346 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
351 memcpy(hdev
->dev_class
, rp
->dev_class
, 3);
353 BT_DBG("%s class 0x%.2x%.2x%.2x", hdev
->name
,
354 hdev
->dev_class
[2], hdev
->dev_class
[1], hdev
->dev_class
[0]);
357 static void hci_cc_write_class_of_dev(struct hci_dev
*hdev
, struct sk_buff
*skb
)
359 __u8 status
= *((__u8
*) skb
->data
);
362 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
364 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_CLASS_OF_DEV
);
371 memcpy(hdev
->dev_class
, sent
, 3);
373 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
374 mgmt_set_class_of_dev_complete(hdev
, sent
, status
);
376 hci_dev_unlock(hdev
);
379 static void hci_cc_read_voice_setting(struct hci_dev
*hdev
, struct sk_buff
*skb
)
381 struct hci_rp_read_voice_setting
*rp
= (void *) skb
->data
;
384 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
389 setting
= __le16_to_cpu(rp
->voice_setting
);
391 if (hdev
->voice_setting
== setting
)
394 hdev
->voice_setting
= setting
;
396 BT_DBG("%s voice setting 0x%4.4x", hdev
->name
, setting
);
399 hdev
->notify(hdev
, HCI_NOTIFY_VOICE_SETTING
);
402 static void hci_cc_write_voice_setting(struct hci_dev
*hdev
,
405 __u8 status
= *((__u8
*) skb
->data
);
409 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
414 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_VOICE_SETTING
);
418 setting
= get_unaligned_le16(sent
);
420 if (hdev
->voice_setting
== setting
)
423 hdev
->voice_setting
= setting
;
425 BT_DBG("%s voice setting 0x%4.4x", hdev
->name
, setting
);
428 hdev
->notify(hdev
, HCI_NOTIFY_VOICE_SETTING
);
431 static void hci_cc_host_buffer_size(struct hci_dev
*hdev
, struct sk_buff
*skb
)
433 __u8 status
= *((__u8
*) skb
->data
);
435 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
437 hci_req_complete(hdev
, HCI_OP_HOST_BUFFER_SIZE
, status
);
440 static void hci_cc_write_ssp_mode(struct hci_dev
*hdev
, struct sk_buff
*skb
)
442 __u8 status
= *((__u8
*) skb
->data
);
445 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
447 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_SSP_MODE
);
451 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
452 mgmt_ssp_enable_complete(hdev
, *((u8
*) sent
), status
);
455 set_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
);
457 clear_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
);
461 static u8
hci_get_inquiry_mode(struct hci_dev
*hdev
)
463 if (hdev
->features
[6] & LMP_EXT_INQ
)
466 if (hdev
->features
[3] & LMP_RSSI_INQ
)
469 if (hdev
->manufacturer
== 11 && hdev
->hci_rev
== 0x00 &&
470 hdev
->lmp_subver
== 0x0757)
473 if (hdev
->manufacturer
== 15) {
474 if (hdev
->hci_rev
== 0x03 && hdev
->lmp_subver
== 0x6963)
476 if (hdev
->hci_rev
== 0x09 && hdev
->lmp_subver
== 0x6963)
478 if (hdev
->hci_rev
== 0x00 && hdev
->lmp_subver
== 0x6965)
482 if (hdev
->manufacturer
== 31 && hdev
->hci_rev
== 0x2005 &&
483 hdev
->lmp_subver
== 0x1805)
489 static void hci_setup_inquiry_mode(struct hci_dev
*hdev
)
493 mode
= hci_get_inquiry_mode(hdev
);
495 hci_send_cmd(hdev
, HCI_OP_WRITE_INQUIRY_MODE
, 1, &mode
);
498 static void hci_setup_event_mask(struct hci_dev
*hdev
)
500 /* The second byte is 0xff instead of 0x9f (two reserved bits
501 * disabled) since a Broadcom 1.2 dongle doesn't respond to the
502 * command otherwise */
503 u8 events
[8] = { 0xff, 0xff, 0xfb, 0xff, 0x00, 0x00, 0x00, 0x00 };
505 /* CSR 1.1 dongles does not accept any bitfield so don't try to set
506 * any event mask for pre 1.2 devices */
507 if (hdev
->hci_ver
< BLUETOOTH_VER_1_2
)
510 if (lmp_bredr_capable(hdev
)) {
511 events
[4] |= 0x01; /* Flow Specification Complete */
512 events
[4] |= 0x02; /* Inquiry Result with RSSI */
513 events
[4] |= 0x04; /* Read Remote Extended Features Complete */
514 events
[5] |= 0x08; /* Synchronous Connection Complete */
515 events
[5] |= 0x10; /* Synchronous Connection Changed */
518 if (hdev
->features
[3] & LMP_RSSI_INQ
)
519 events
[4] |= 0x02; /* Inquiry Result with RSSI */
521 if (lmp_sniffsubr_capable(hdev
))
522 events
[5] |= 0x20; /* Sniff Subrating */
524 if (hdev
->features
[5] & LMP_PAUSE_ENC
)
525 events
[5] |= 0x80; /* Encryption Key Refresh Complete */
527 if (hdev
->features
[6] & LMP_EXT_INQ
)
528 events
[5] |= 0x40; /* Extended Inquiry Result */
530 if (lmp_no_flush_capable(hdev
))
531 events
[7] |= 0x01; /* Enhanced Flush Complete */
533 if (hdev
->features
[7] & LMP_LSTO
)
534 events
[6] |= 0x80; /* Link Supervision Timeout Changed */
536 if (lmp_ssp_capable(hdev
)) {
537 events
[6] |= 0x01; /* IO Capability Request */
538 events
[6] |= 0x02; /* IO Capability Response */
539 events
[6] |= 0x04; /* User Confirmation Request */
540 events
[6] |= 0x08; /* User Passkey Request */
541 events
[6] |= 0x10; /* Remote OOB Data Request */
542 events
[6] |= 0x20; /* Simple Pairing Complete */
543 events
[7] |= 0x04; /* User Passkey Notification */
544 events
[7] |= 0x08; /* Keypress Notification */
545 events
[7] |= 0x10; /* Remote Host Supported
546 * Features Notification */
549 if (lmp_le_capable(hdev
))
550 events
[7] |= 0x20; /* LE Meta-Event */
552 hci_send_cmd(hdev
, HCI_OP_SET_EVENT_MASK
, sizeof(events
), events
);
554 if (lmp_le_capable(hdev
)) {
555 memset(events
, 0, sizeof(events
));
557 hci_send_cmd(hdev
, HCI_OP_LE_SET_EVENT_MASK
,
558 sizeof(events
), events
);
562 static void bredr_init(struct hci_dev
*hdev
)
564 struct hci_cp_delete_stored_link_key cp
;
568 /* Read Buffer Size (ACL mtu, max pkt, etc.) */
569 hci_send_cmd(hdev
, HCI_OP_READ_BUFFER_SIZE
, 0, NULL
);
571 /* Read Class of Device */
572 hci_send_cmd(hdev
, HCI_OP_READ_CLASS_OF_DEV
, 0, NULL
);
574 /* Read Local Name */
575 hci_send_cmd(hdev
, HCI_OP_READ_LOCAL_NAME
, 0, NULL
);
577 /* Read Voice Setting */
578 hci_send_cmd(hdev
, HCI_OP_READ_VOICE_SETTING
, 0, NULL
);
580 /* Clear Event Filters */
581 flt_type
= HCI_FLT_CLEAR_ALL
;
582 hci_send_cmd(hdev
, HCI_OP_SET_EVENT_FLT
, 1, &flt_type
);
584 /* Connection accept timeout ~20 secs */
585 param
= __constant_cpu_to_le16(0x7d00);
586 hci_send_cmd(hdev
, HCI_OP_WRITE_CA_TIMEOUT
, 2, ¶m
);
588 bacpy(&cp
.bdaddr
, BDADDR_ANY
);
590 hci_send_cmd(hdev
, HCI_OP_DELETE_STORED_LINK_KEY
, sizeof(cp
), &cp
);
593 static void le_init(struct hci_dev
*hdev
)
595 /* Read LE Buffer Size */
596 hci_send_cmd(hdev
, HCI_OP_LE_READ_BUFFER_SIZE
, 0, NULL
);
598 /* Read LE Advertising Channel TX Power */
599 hci_send_cmd(hdev
, HCI_OP_LE_READ_ADV_TX_POWER
, 0, NULL
);
602 static void hci_setup(struct hci_dev
*hdev
)
604 if (hdev
->dev_type
!= HCI_BREDR
)
607 /* Read BD Address */
608 hci_send_cmd(hdev
, HCI_OP_READ_BD_ADDR
, 0, NULL
);
610 if (lmp_bredr_capable(hdev
))
613 if (lmp_le_capable(hdev
))
616 hci_setup_event_mask(hdev
);
618 if (hdev
->hci_ver
> BLUETOOTH_VER_1_1
)
619 hci_send_cmd(hdev
, HCI_OP_READ_LOCAL_COMMANDS
, 0, NULL
);
621 if (lmp_ssp_capable(hdev
)) {
622 if (test_bit(HCI_SSP_ENABLED
, &hdev
->dev_flags
)) {
624 hci_send_cmd(hdev
, HCI_OP_WRITE_SSP_MODE
,
625 sizeof(mode
), &mode
);
627 struct hci_cp_write_eir cp
;
629 memset(hdev
->eir
, 0, sizeof(hdev
->eir
));
630 memset(&cp
, 0, sizeof(cp
));
632 hci_send_cmd(hdev
, HCI_OP_WRITE_EIR
, sizeof(cp
), &cp
);
636 if (hdev
->features
[3] & LMP_RSSI_INQ
)
637 hci_setup_inquiry_mode(hdev
);
639 if (hdev
->features
[7] & LMP_INQ_TX_PWR
)
640 hci_send_cmd(hdev
, HCI_OP_READ_INQ_RSP_TX_POWER
, 0, NULL
);
642 if (hdev
->features
[7] & LMP_EXTFEATURES
) {
643 struct hci_cp_read_local_ext_features cp
;
646 hci_send_cmd(hdev
, HCI_OP_READ_LOCAL_EXT_FEATURES
, sizeof(cp
),
650 if (test_bit(HCI_LINK_SECURITY
, &hdev
->dev_flags
)) {
652 hci_send_cmd(hdev
, HCI_OP_WRITE_AUTH_ENABLE
, sizeof(enable
),
657 static void hci_cc_read_local_version(struct hci_dev
*hdev
, struct sk_buff
*skb
)
659 struct hci_rp_read_local_version
*rp
= (void *) skb
->data
;
661 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
666 hdev
->hci_ver
= rp
->hci_ver
;
667 hdev
->hci_rev
= __le16_to_cpu(rp
->hci_rev
);
668 hdev
->lmp_ver
= rp
->lmp_ver
;
669 hdev
->manufacturer
= __le16_to_cpu(rp
->manufacturer
);
670 hdev
->lmp_subver
= __le16_to_cpu(rp
->lmp_subver
);
672 BT_DBG("%s manufacturer 0x%4.4x hci ver %d:%d", hdev
->name
,
673 hdev
->manufacturer
, hdev
->hci_ver
, hdev
->hci_rev
);
675 if (test_bit(HCI_INIT
, &hdev
->flags
))
679 hci_req_complete(hdev
, HCI_OP_READ_LOCAL_VERSION
, rp
->status
);
682 static void hci_setup_link_policy(struct hci_dev
*hdev
)
684 struct hci_cp_write_def_link_policy cp
;
687 if (lmp_rswitch_capable(hdev
))
688 link_policy
|= HCI_LP_RSWITCH
;
689 if (hdev
->features
[0] & LMP_HOLD
)
690 link_policy
|= HCI_LP_HOLD
;
691 if (lmp_sniff_capable(hdev
))
692 link_policy
|= HCI_LP_SNIFF
;
693 if (hdev
->features
[1] & LMP_PARK
)
694 link_policy
|= HCI_LP_PARK
;
696 cp
.policy
= cpu_to_le16(link_policy
);
697 hci_send_cmd(hdev
, HCI_OP_WRITE_DEF_LINK_POLICY
, sizeof(cp
), &cp
);
700 static void hci_cc_read_local_commands(struct hci_dev
*hdev
,
703 struct hci_rp_read_local_commands
*rp
= (void *) skb
->data
;
705 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
710 memcpy(hdev
->commands
, rp
->commands
, sizeof(hdev
->commands
));
712 if (test_bit(HCI_INIT
, &hdev
->flags
) && (hdev
->commands
[5] & 0x10))
713 hci_setup_link_policy(hdev
);
716 hci_req_complete(hdev
, HCI_OP_READ_LOCAL_COMMANDS
, rp
->status
);
719 static void hci_cc_read_local_features(struct hci_dev
*hdev
,
722 struct hci_rp_read_local_features
*rp
= (void *) skb
->data
;
724 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
729 memcpy(hdev
->features
, rp
->features
, 8);
731 /* Adjust default settings according to features
732 * supported by device. */
734 if (hdev
->features
[0] & LMP_3SLOT
)
735 hdev
->pkt_type
|= (HCI_DM3
| HCI_DH3
);
737 if (hdev
->features
[0] & LMP_5SLOT
)
738 hdev
->pkt_type
|= (HCI_DM5
| HCI_DH5
);
740 if (hdev
->features
[1] & LMP_HV2
) {
741 hdev
->pkt_type
|= (HCI_HV2
);
742 hdev
->esco_type
|= (ESCO_HV2
);
745 if (hdev
->features
[1] & LMP_HV3
) {
746 hdev
->pkt_type
|= (HCI_HV3
);
747 hdev
->esco_type
|= (ESCO_HV3
);
750 if (lmp_esco_capable(hdev
))
751 hdev
->esco_type
|= (ESCO_EV3
);
753 if (hdev
->features
[4] & LMP_EV4
)
754 hdev
->esco_type
|= (ESCO_EV4
);
756 if (hdev
->features
[4] & LMP_EV5
)
757 hdev
->esco_type
|= (ESCO_EV5
);
759 if (hdev
->features
[5] & LMP_EDR_ESCO_2M
)
760 hdev
->esco_type
|= (ESCO_2EV3
);
762 if (hdev
->features
[5] & LMP_EDR_ESCO_3M
)
763 hdev
->esco_type
|= (ESCO_3EV3
);
765 if (hdev
->features
[5] & LMP_EDR_3S_ESCO
)
766 hdev
->esco_type
|= (ESCO_2EV5
| ESCO_3EV5
);
768 BT_DBG("%s features 0x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x", hdev
->name
,
769 hdev
->features
[0], hdev
->features
[1],
770 hdev
->features
[2], hdev
->features
[3],
771 hdev
->features
[4], hdev
->features
[5],
772 hdev
->features
[6], hdev
->features
[7]);
775 static void hci_set_le_support(struct hci_dev
*hdev
)
777 struct hci_cp_write_le_host_supported cp
;
779 memset(&cp
, 0, sizeof(cp
));
781 if (test_bit(HCI_LE_ENABLED
, &hdev
->dev_flags
)) {
783 cp
.simul
= !!(hdev
->features
[6] & LMP_SIMUL_LE_BR
);
786 if (cp
.le
!= !!(hdev
->host_features
[0] & LMP_HOST_LE
))
787 hci_send_cmd(hdev
, HCI_OP_WRITE_LE_HOST_SUPPORTED
, sizeof(cp
),
791 static void hci_cc_read_local_ext_features(struct hci_dev
*hdev
,
794 struct hci_rp_read_local_ext_features
*rp
= (void *) skb
->data
;
796 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
803 memcpy(hdev
->features
, rp
->features
, 8);
806 memcpy(hdev
->host_features
, rp
->features
, 8);
810 if (test_bit(HCI_INIT
, &hdev
->flags
) && lmp_le_capable(hdev
))
811 hci_set_le_support(hdev
);
814 hci_req_complete(hdev
, HCI_OP_READ_LOCAL_EXT_FEATURES
, rp
->status
);
817 static void hci_cc_read_flow_control_mode(struct hci_dev
*hdev
,
820 struct hci_rp_read_flow_control_mode
*rp
= (void *) skb
->data
;
822 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
827 hdev
->flow_ctl_mode
= rp
->mode
;
829 hci_req_complete(hdev
, HCI_OP_READ_FLOW_CONTROL_MODE
, rp
->status
);
832 static void hci_cc_read_buffer_size(struct hci_dev
*hdev
, struct sk_buff
*skb
)
834 struct hci_rp_read_buffer_size
*rp
= (void *) skb
->data
;
836 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
841 hdev
->acl_mtu
= __le16_to_cpu(rp
->acl_mtu
);
842 hdev
->sco_mtu
= rp
->sco_mtu
;
843 hdev
->acl_pkts
= __le16_to_cpu(rp
->acl_max_pkt
);
844 hdev
->sco_pkts
= __le16_to_cpu(rp
->sco_max_pkt
);
846 if (test_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE
, &hdev
->quirks
)) {
851 hdev
->acl_cnt
= hdev
->acl_pkts
;
852 hdev
->sco_cnt
= hdev
->sco_pkts
;
854 BT_DBG("%s acl mtu %d:%d sco mtu %d:%d", hdev
->name
, hdev
->acl_mtu
,
855 hdev
->acl_pkts
, hdev
->sco_mtu
, hdev
->sco_pkts
);
858 static void hci_cc_read_bd_addr(struct hci_dev
*hdev
, struct sk_buff
*skb
)
860 struct hci_rp_read_bd_addr
*rp
= (void *) skb
->data
;
862 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
865 bacpy(&hdev
->bdaddr
, &rp
->bdaddr
);
867 hci_req_complete(hdev
, HCI_OP_READ_BD_ADDR
, rp
->status
);
870 static void hci_cc_read_data_block_size(struct hci_dev
*hdev
,
873 struct hci_rp_read_data_block_size
*rp
= (void *) skb
->data
;
875 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
880 hdev
->block_mtu
= __le16_to_cpu(rp
->max_acl_len
);
881 hdev
->block_len
= __le16_to_cpu(rp
->block_len
);
882 hdev
->num_blocks
= __le16_to_cpu(rp
->num_blocks
);
884 hdev
->block_cnt
= hdev
->num_blocks
;
886 BT_DBG("%s blk mtu %d cnt %d len %d", hdev
->name
, hdev
->block_mtu
,
887 hdev
->block_cnt
, hdev
->block_len
);
889 hci_req_complete(hdev
, HCI_OP_READ_DATA_BLOCK_SIZE
, rp
->status
);
892 static void hci_cc_write_ca_timeout(struct hci_dev
*hdev
, struct sk_buff
*skb
)
894 __u8 status
= *((__u8
*) skb
->data
);
896 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
898 hci_req_complete(hdev
, HCI_OP_WRITE_CA_TIMEOUT
, status
);
901 static void hci_cc_read_local_amp_info(struct hci_dev
*hdev
,
904 struct hci_rp_read_local_amp_info
*rp
= (void *) skb
->data
;
906 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
911 hdev
->amp_status
= rp
->amp_status
;
912 hdev
->amp_total_bw
= __le32_to_cpu(rp
->total_bw
);
913 hdev
->amp_max_bw
= __le32_to_cpu(rp
->max_bw
);
914 hdev
->amp_min_latency
= __le32_to_cpu(rp
->min_latency
);
915 hdev
->amp_max_pdu
= __le32_to_cpu(rp
->max_pdu
);
916 hdev
->amp_type
= rp
->amp_type
;
917 hdev
->amp_pal_cap
= __le16_to_cpu(rp
->pal_cap
);
918 hdev
->amp_assoc_size
= __le16_to_cpu(rp
->max_assoc_size
);
919 hdev
->amp_be_flush_to
= __le32_to_cpu(rp
->be_flush_to
);
920 hdev
->amp_max_flush_to
= __le32_to_cpu(rp
->max_flush_to
);
922 hci_req_complete(hdev
, HCI_OP_READ_LOCAL_AMP_INFO
, rp
->status
);
925 a2mp_send_getinfo_rsp(hdev
);
928 static void hci_cc_read_local_amp_assoc(struct hci_dev
*hdev
,
931 struct hci_rp_read_local_amp_assoc
*rp
= (void *) skb
->data
;
932 struct amp_assoc
*assoc
= &hdev
->loc_assoc
;
933 size_t rem_len
, frag_len
;
935 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
940 frag_len
= skb
->len
- sizeof(*rp
);
941 rem_len
= __le16_to_cpu(rp
->rem_len
);
943 if (rem_len
> frag_len
) {
944 BT_DBG("frag_len %zu rem_len %zu", frag_len
, rem_len
);
946 memcpy(assoc
->data
+ assoc
->offset
, rp
->frag
, frag_len
);
947 assoc
->offset
+= frag_len
;
949 /* Read other fragments */
950 amp_read_loc_assoc_frag(hdev
, rp
->phy_handle
);
955 memcpy(assoc
->data
+ assoc
->offset
, rp
->frag
, rem_len
);
956 assoc
->len
= assoc
->offset
+ rem_len
;
960 /* Send A2MP Rsp when all fragments are received */
961 a2mp_send_getampassoc_rsp(hdev
, rp
->status
);
962 a2mp_send_create_phy_link_req(hdev
, rp
->status
);
965 static void hci_cc_delete_stored_link_key(struct hci_dev
*hdev
,
968 __u8 status
= *((__u8
*) skb
->data
);
970 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
972 hci_req_complete(hdev
, HCI_OP_DELETE_STORED_LINK_KEY
, status
);
975 static void hci_cc_set_event_mask(struct hci_dev
*hdev
, struct sk_buff
*skb
)
977 __u8 status
= *((__u8
*) skb
->data
);
979 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
981 hci_req_complete(hdev
, HCI_OP_SET_EVENT_MASK
, status
);
984 static void hci_cc_write_inquiry_mode(struct hci_dev
*hdev
,
987 __u8 status
= *((__u8
*) skb
->data
);
989 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
991 hci_req_complete(hdev
, HCI_OP_WRITE_INQUIRY_MODE
, status
);
994 static void hci_cc_read_inq_rsp_tx_power(struct hci_dev
*hdev
,
997 struct hci_rp_read_inq_rsp_tx_power
*rp
= (void *) skb
->data
;
999 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
1002 hdev
->inq_tx_power
= rp
->tx_power
;
1004 hci_req_complete(hdev
, HCI_OP_READ_INQ_RSP_TX_POWER
, rp
->status
);
1007 static void hci_cc_set_event_flt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1009 __u8 status
= *((__u8
*) skb
->data
);
1011 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1013 hci_req_complete(hdev
, HCI_OP_SET_EVENT_FLT
, status
);
1016 static void hci_cc_pin_code_reply(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1018 struct hci_rp_pin_code_reply
*rp
= (void *) skb
->data
;
1019 struct hci_cp_pin_code_reply
*cp
;
1020 struct hci_conn
*conn
;
1022 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
1026 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
1027 mgmt_pin_code_reply_complete(hdev
, &rp
->bdaddr
, rp
->status
);
1032 cp
= hci_sent_cmd_data(hdev
, HCI_OP_PIN_CODE_REPLY
);
1036 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &cp
->bdaddr
);
1038 conn
->pin_length
= cp
->pin_len
;
1041 hci_dev_unlock(hdev
);
1044 static void hci_cc_pin_code_neg_reply(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1046 struct hci_rp_pin_code_neg_reply
*rp
= (void *) skb
->data
;
1048 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
1052 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
1053 mgmt_pin_code_neg_reply_complete(hdev
, &rp
->bdaddr
,
1056 hci_dev_unlock(hdev
);
1059 static void hci_cc_le_read_buffer_size(struct hci_dev
*hdev
,
1060 struct sk_buff
*skb
)
1062 struct hci_rp_le_read_buffer_size
*rp
= (void *) skb
->data
;
1064 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
1069 hdev
->le_mtu
= __le16_to_cpu(rp
->le_mtu
);
1070 hdev
->le_pkts
= rp
->le_max_pkt
;
1072 hdev
->le_cnt
= hdev
->le_pkts
;
1074 BT_DBG("%s le mtu %d:%d", hdev
->name
, hdev
->le_mtu
, hdev
->le_pkts
);
1076 hci_req_complete(hdev
, HCI_OP_LE_READ_BUFFER_SIZE
, rp
->status
);
1079 static void hci_cc_le_read_adv_tx_power(struct hci_dev
*hdev
,
1080 struct sk_buff
*skb
)
1082 struct hci_rp_le_read_adv_tx_power
*rp
= (void *) skb
->data
;
1084 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
1087 hdev
->adv_tx_power
= rp
->tx_power
;
1089 hci_req_complete(hdev
, HCI_OP_LE_READ_ADV_TX_POWER
, rp
->status
);
1092 static void hci_cc_le_set_event_mask(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1094 __u8 status
= *((__u8
*) skb
->data
);
1096 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1098 hci_req_complete(hdev
, HCI_OP_LE_SET_EVENT_MASK
, status
);
1101 static void hci_cc_user_confirm_reply(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1103 struct hci_rp_user_confirm_reply
*rp
= (void *) skb
->data
;
1105 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
1109 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
1110 mgmt_user_confirm_reply_complete(hdev
, &rp
->bdaddr
, ACL_LINK
, 0,
1113 hci_dev_unlock(hdev
);
1116 static void hci_cc_user_confirm_neg_reply(struct hci_dev
*hdev
,
1117 struct sk_buff
*skb
)
1119 struct hci_rp_user_confirm_reply
*rp
= (void *) skb
->data
;
1121 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
1125 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
1126 mgmt_user_confirm_neg_reply_complete(hdev
, &rp
->bdaddr
,
1127 ACL_LINK
, 0, rp
->status
);
1129 hci_dev_unlock(hdev
);
1132 static void hci_cc_user_passkey_reply(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1134 struct hci_rp_user_confirm_reply
*rp
= (void *) skb
->data
;
1136 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
1140 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
1141 mgmt_user_passkey_reply_complete(hdev
, &rp
->bdaddr
, ACL_LINK
,
1144 hci_dev_unlock(hdev
);
1147 static void hci_cc_user_passkey_neg_reply(struct hci_dev
*hdev
,
1148 struct sk_buff
*skb
)
1150 struct hci_rp_user_confirm_reply
*rp
= (void *) skb
->data
;
1152 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
1156 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
1157 mgmt_user_passkey_neg_reply_complete(hdev
, &rp
->bdaddr
,
1158 ACL_LINK
, 0, rp
->status
);
1160 hci_dev_unlock(hdev
);
1163 static void hci_cc_read_local_oob_data_reply(struct hci_dev
*hdev
,
1164 struct sk_buff
*skb
)
1166 struct hci_rp_read_local_oob_data
*rp
= (void *) skb
->data
;
1168 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
1171 mgmt_read_local_oob_data_reply_complete(hdev
, rp
->hash
,
1172 rp
->randomizer
, rp
->status
);
1173 hci_dev_unlock(hdev
);
1176 static void hci_cc_le_set_scan_param(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1178 __u8 status
= *((__u8
*) skb
->data
);
1180 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1182 hci_req_complete(hdev
, HCI_OP_LE_SET_SCAN_PARAM
, status
);
1186 mgmt_start_discovery_failed(hdev
, status
);
1187 hci_dev_unlock(hdev
);
1192 static void hci_cc_le_set_scan_enable(struct hci_dev
*hdev
,
1193 struct sk_buff
*skb
)
1195 struct hci_cp_le_set_scan_enable
*cp
;
1196 __u8 status
= *((__u8
*) skb
->data
);
1198 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1200 cp
= hci_sent_cmd_data(hdev
, HCI_OP_LE_SET_SCAN_ENABLE
);
1204 switch (cp
->enable
) {
1205 case LE_SCANNING_ENABLED
:
1206 hci_req_complete(hdev
, HCI_OP_LE_SET_SCAN_ENABLE
, status
);
1210 mgmt_start_discovery_failed(hdev
, status
);
1211 hci_dev_unlock(hdev
);
1215 set_bit(HCI_LE_SCAN
, &hdev
->dev_flags
);
1218 hci_discovery_set_state(hdev
, DISCOVERY_FINDING
);
1219 hci_dev_unlock(hdev
);
1222 case LE_SCANNING_DISABLED
:
1225 mgmt_stop_discovery_failed(hdev
, status
);
1226 hci_dev_unlock(hdev
);
1230 clear_bit(HCI_LE_SCAN
, &hdev
->dev_flags
);
1232 if (hdev
->discovery
.type
== DISCOV_TYPE_INTERLEAVED
&&
1233 hdev
->discovery
.state
== DISCOVERY_FINDING
) {
1234 mgmt_interleaved_discovery(hdev
);
1237 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
1238 hci_dev_unlock(hdev
);
1244 BT_ERR("Used reserved LE_Scan_Enable param %d", cp
->enable
);
1249 static void hci_cc_le_ltk_reply(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1251 struct hci_rp_le_ltk_reply
*rp
= (void *) skb
->data
;
1253 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
1258 hci_req_complete(hdev
, HCI_OP_LE_LTK_REPLY
, rp
->status
);
1261 static void hci_cc_le_ltk_neg_reply(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1263 struct hci_rp_le_ltk_neg_reply
*rp
= (void *) skb
->data
;
1265 BT_DBG("%s status 0x%2.2x", hdev
->name
, rp
->status
);
1270 hci_req_complete(hdev
, HCI_OP_LE_LTK_NEG_REPLY
, rp
->status
);
1273 static void hci_cc_write_le_host_supported(struct hci_dev
*hdev
,
1274 struct sk_buff
*skb
)
1276 struct hci_cp_write_le_host_supported
*sent
;
1277 __u8 status
= *((__u8
*) skb
->data
);
1279 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1281 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_LE_HOST_SUPPORTED
);
1287 hdev
->host_features
[0] |= LMP_HOST_LE
;
1289 hdev
->host_features
[0] &= ~LMP_HOST_LE
;
1292 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
) &&
1293 !test_bit(HCI_INIT
, &hdev
->flags
))
1294 mgmt_le_enable_complete(hdev
, sent
->le
, status
);
1296 hci_req_complete(hdev
, HCI_OP_WRITE_LE_HOST_SUPPORTED
, status
);
1299 static void hci_cc_write_remote_amp_assoc(struct hci_dev
*hdev
,
1300 struct sk_buff
*skb
)
1302 struct hci_rp_write_remote_amp_assoc
*rp
= (void *) skb
->data
;
1304 BT_DBG("%s status 0x%2.2x phy_handle 0x%2.2x",
1305 hdev
->name
, rp
->status
, rp
->phy_handle
);
1310 amp_write_rem_assoc_continue(hdev
, rp
->phy_handle
);
1313 static void hci_cs_inquiry(struct hci_dev
*hdev
, __u8 status
)
1315 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1318 hci_req_complete(hdev
, HCI_OP_INQUIRY
, status
);
1319 hci_conn_check_pending(hdev
);
1321 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
1322 mgmt_start_discovery_failed(hdev
, status
);
1323 hci_dev_unlock(hdev
);
1327 set_bit(HCI_INQUIRY
, &hdev
->flags
);
1330 hci_discovery_set_state(hdev
, DISCOVERY_FINDING
);
1331 hci_dev_unlock(hdev
);
1334 static void hci_cs_create_conn(struct hci_dev
*hdev
, __u8 status
)
1336 struct hci_cp_create_conn
*cp
;
1337 struct hci_conn
*conn
;
1339 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1341 cp
= hci_sent_cmd_data(hdev
, HCI_OP_CREATE_CONN
);
1347 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &cp
->bdaddr
);
1349 BT_DBG("%s bdaddr %pMR hcon %p", hdev
->name
, &cp
->bdaddr
, conn
);
1352 if (conn
&& conn
->state
== BT_CONNECT
) {
1353 if (status
!= 0x0c || conn
->attempt
> 2) {
1354 conn
->state
= BT_CLOSED
;
1355 hci_proto_connect_cfm(conn
, status
);
1358 conn
->state
= BT_CONNECT2
;
1362 conn
= hci_conn_add(hdev
, ACL_LINK
, &cp
->bdaddr
);
1365 conn
->link_mode
|= HCI_LM_MASTER
;
1367 BT_ERR("No memory for new connection");
1371 hci_dev_unlock(hdev
);
1374 static void hci_cs_add_sco(struct hci_dev
*hdev
, __u8 status
)
1376 struct hci_cp_add_sco
*cp
;
1377 struct hci_conn
*acl
, *sco
;
1380 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1385 cp
= hci_sent_cmd_data(hdev
, HCI_OP_ADD_SCO
);
1389 handle
= __le16_to_cpu(cp
->handle
);
1391 BT_DBG("%s handle 0x%4.4x", hdev
->name
, handle
);
1395 acl
= hci_conn_hash_lookup_handle(hdev
, handle
);
1399 sco
->state
= BT_CLOSED
;
1401 hci_proto_connect_cfm(sco
, status
);
1406 hci_dev_unlock(hdev
);
1409 static void hci_cs_auth_requested(struct hci_dev
*hdev
, __u8 status
)
1411 struct hci_cp_auth_requested
*cp
;
1412 struct hci_conn
*conn
;
1414 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1419 cp
= hci_sent_cmd_data(hdev
, HCI_OP_AUTH_REQUESTED
);
1425 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1427 if (conn
->state
== BT_CONFIG
) {
1428 hci_proto_connect_cfm(conn
, status
);
1433 hci_dev_unlock(hdev
);
1436 static void hci_cs_set_conn_encrypt(struct hci_dev
*hdev
, __u8 status
)
1438 struct hci_cp_set_conn_encrypt
*cp
;
1439 struct hci_conn
*conn
;
1441 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1446 cp
= hci_sent_cmd_data(hdev
, HCI_OP_SET_CONN_ENCRYPT
);
1452 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1454 if (conn
->state
== BT_CONFIG
) {
1455 hci_proto_connect_cfm(conn
, status
);
1460 hci_dev_unlock(hdev
);
1463 static int hci_outgoing_auth_needed(struct hci_dev
*hdev
,
1464 struct hci_conn
*conn
)
1466 if (conn
->state
!= BT_CONFIG
|| !conn
->out
)
1469 if (conn
->pending_sec_level
== BT_SECURITY_SDP
)
1472 /* Only request authentication for SSP connections or non-SSP
1473 * devices with sec_level HIGH or if MITM protection is requested */
1474 if (!hci_conn_ssp_enabled(conn
) && !(conn
->auth_type
& 0x01) &&
1475 conn
->pending_sec_level
!= BT_SECURITY_HIGH
)
1481 static int hci_resolve_name(struct hci_dev
*hdev
,
1482 struct inquiry_entry
*e
)
1484 struct hci_cp_remote_name_req cp
;
1486 memset(&cp
, 0, sizeof(cp
));
1488 bacpy(&cp
.bdaddr
, &e
->data
.bdaddr
);
1489 cp
.pscan_rep_mode
= e
->data
.pscan_rep_mode
;
1490 cp
.pscan_mode
= e
->data
.pscan_mode
;
1491 cp
.clock_offset
= e
->data
.clock_offset
;
1493 return hci_send_cmd(hdev
, HCI_OP_REMOTE_NAME_REQ
, sizeof(cp
), &cp
);
1496 static bool hci_resolve_next_name(struct hci_dev
*hdev
)
1498 struct discovery_state
*discov
= &hdev
->discovery
;
1499 struct inquiry_entry
*e
;
1501 if (list_empty(&discov
->resolve
))
1504 e
= hci_inquiry_cache_lookup_resolve(hdev
, BDADDR_ANY
, NAME_NEEDED
);
1508 if (hci_resolve_name(hdev
, e
) == 0) {
1509 e
->name_state
= NAME_PENDING
;
1516 static void hci_check_pending_name(struct hci_dev
*hdev
, struct hci_conn
*conn
,
1517 bdaddr_t
*bdaddr
, u8
*name
, u8 name_len
)
1519 struct discovery_state
*discov
= &hdev
->discovery
;
1520 struct inquiry_entry
*e
;
1522 if (conn
&& !test_and_set_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
))
1523 mgmt_device_connected(hdev
, bdaddr
, ACL_LINK
, 0x00, 0, name
,
1524 name_len
, conn
->dev_class
);
1526 if (discov
->state
== DISCOVERY_STOPPED
)
1529 if (discov
->state
== DISCOVERY_STOPPING
)
1530 goto discov_complete
;
1532 if (discov
->state
!= DISCOVERY_RESOLVING
)
1535 e
= hci_inquiry_cache_lookup_resolve(hdev
, bdaddr
, NAME_PENDING
);
1536 /* If the device was not found in a list of found devices names of which
1537 * are pending. there is no need to continue resolving a next name as it
1538 * will be done upon receiving another Remote Name Request Complete
1545 e
->name_state
= NAME_KNOWN
;
1546 mgmt_remote_name(hdev
, bdaddr
, ACL_LINK
, 0x00,
1547 e
->data
.rssi
, name
, name_len
);
1549 e
->name_state
= NAME_NOT_KNOWN
;
1552 if (hci_resolve_next_name(hdev
))
1556 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
1559 static void hci_cs_remote_name_req(struct hci_dev
*hdev
, __u8 status
)
1561 struct hci_cp_remote_name_req
*cp
;
1562 struct hci_conn
*conn
;
1564 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1566 /* If successful wait for the name req complete event before
1567 * checking for the need to do authentication */
1571 cp
= hci_sent_cmd_data(hdev
, HCI_OP_REMOTE_NAME_REQ
);
1577 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &cp
->bdaddr
);
1579 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
1580 hci_check_pending_name(hdev
, conn
, &cp
->bdaddr
, NULL
, 0);
1585 if (!hci_outgoing_auth_needed(hdev
, conn
))
1588 if (!test_and_set_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
)) {
1589 struct hci_cp_auth_requested cp
;
1590 cp
.handle
= __cpu_to_le16(conn
->handle
);
1591 hci_send_cmd(hdev
, HCI_OP_AUTH_REQUESTED
, sizeof(cp
), &cp
);
1595 hci_dev_unlock(hdev
);
1598 static void hci_cs_read_remote_features(struct hci_dev
*hdev
, __u8 status
)
1600 struct hci_cp_read_remote_features
*cp
;
1601 struct hci_conn
*conn
;
1603 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1608 cp
= hci_sent_cmd_data(hdev
, HCI_OP_READ_REMOTE_FEATURES
);
1614 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1616 if (conn
->state
== BT_CONFIG
) {
1617 hci_proto_connect_cfm(conn
, status
);
1622 hci_dev_unlock(hdev
);
1625 static void hci_cs_read_remote_ext_features(struct hci_dev
*hdev
, __u8 status
)
1627 struct hci_cp_read_remote_ext_features
*cp
;
1628 struct hci_conn
*conn
;
1630 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1635 cp
= hci_sent_cmd_data(hdev
, HCI_OP_READ_REMOTE_EXT_FEATURES
);
1641 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1643 if (conn
->state
== BT_CONFIG
) {
1644 hci_proto_connect_cfm(conn
, status
);
1649 hci_dev_unlock(hdev
);
1652 static void hci_cs_setup_sync_conn(struct hci_dev
*hdev
, __u8 status
)
1654 struct hci_cp_setup_sync_conn
*cp
;
1655 struct hci_conn
*acl
, *sco
;
1658 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1663 cp
= hci_sent_cmd_data(hdev
, HCI_OP_SETUP_SYNC_CONN
);
1667 handle
= __le16_to_cpu(cp
->handle
);
1669 BT_DBG("%s handle 0x%4.4x", hdev
->name
, handle
);
1673 acl
= hci_conn_hash_lookup_handle(hdev
, handle
);
1677 sco
->state
= BT_CLOSED
;
1679 hci_proto_connect_cfm(sco
, status
);
1684 hci_dev_unlock(hdev
);
1687 static void hci_cs_sniff_mode(struct hci_dev
*hdev
, __u8 status
)
1689 struct hci_cp_sniff_mode
*cp
;
1690 struct hci_conn
*conn
;
1692 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1697 cp
= hci_sent_cmd_data(hdev
, HCI_OP_SNIFF_MODE
);
1703 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1705 clear_bit(HCI_CONN_MODE_CHANGE_PEND
, &conn
->flags
);
1707 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND
, &conn
->flags
))
1708 hci_sco_setup(conn
, status
);
1711 hci_dev_unlock(hdev
);
1714 static void hci_cs_exit_sniff_mode(struct hci_dev
*hdev
, __u8 status
)
1716 struct hci_cp_exit_sniff_mode
*cp
;
1717 struct hci_conn
*conn
;
1719 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1724 cp
= hci_sent_cmd_data(hdev
, HCI_OP_EXIT_SNIFF_MODE
);
1730 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1732 clear_bit(HCI_CONN_MODE_CHANGE_PEND
, &conn
->flags
);
1734 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND
, &conn
->flags
))
1735 hci_sco_setup(conn
, status
);
1738 hci_dev_unlock(hdev
);
1741 static void hci_cs_disconnect(struct hci_dev
*hdev
, u8 status
)
1743 struct hci_cp_disconnect
*cp
;
1744 struct hci_conn
*conn
;
1749 cp
= hci_sent_cmd_data(hdev
, HCI_OP_DISCONNECT
);
1755 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1757 mgmt_disconnect_failed(hdev
, &conn
->dst
, conn
->type
,
1758 conn
->dst_type
, status
);
1760 hci_dev_unlock(hdev
);
1763 static void hci_cs_le_create_conn(struct hci_dev
*hdev
, __u8 status
)
1765 struct hci_conn
*conn
;
1767 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1772 conn
= hci_conn_hash_lookup_state(hdev
, LE_LINK
, BT_CONNECT
);
1774 hci_dev_unlock(hdev
);
1778 BT_DBG("%s bdaddr %pMR conn %p", hdev
->name
, &conn
->dst
, conn
);
1780 conn
->state
= BT_CLOSED
;
1781 mgmt_connect_failed(hdev
, &conn
->dst
, conn
->type
,
1782 conn
->dst_type
, status
);
1783 hci_proto_connect_cfm(conn
, status
);
1786 hci_dev_unlock(hdev
);
1790 static void hci_cs_le_start_enc(struct hci_dev
*hdev
, u8 status
)
1792 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1795 static void hci_cs_create_phylink(struct hci_dev
*hdev
, u8 status
)
1797 struct hci_cp_create_phy_link
*cp
;
1799 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1804 cp
= hci_sent_cmd_data(hdev
, HCI_OP_CREATE_PHY_LINK
);
1808 amp_write_remote_assoc(hdev
, cp
->phy_handle
);
1811 static void hci_cs_accept_phylink(struct hci_dev
*hdev
, u8 status
)
1813 struct hci_cp_accept_phy_link
*cp
;
1815 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1820 cp
= hci_sent_cmd_data(hdev
, HCI_OP_ACCEPT_PHY_LINK
);
1824 amp_write_remote_assoc(hdev
, cp
->phy_handle
);
1827 static void hci_inquiry_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1829 __u8 status
= *((__u8
*) skb
->data
);
1830 struct discovery_state
*discov
= &hdev
->discovery
;
1831 struct inquiry_entry
*e
;
1833 BT_DBG("%s status 0x%2.2x", hdev
->name
, status
);
1835 hci_req_complete(hdev
, HCI_OP_INQUIRY
, status
);
1837 hci_conn_check_pending(hdev
);
1839 if (!test_and_clear_bit(HCI_INQUIRY
, &hdev
->flags
))
1842 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
1847 if (discov
->state
!= DISCOVERY_FINDING
)
1850 if (list_empty(&discov
->resolve
)) {
1851 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
1855 e
= hci_inquiry_cache_lookup_resolve(hdev
, BDADDR_ANY
, NAME_NEEDED
);
1856 if (e
&& hci_resolve_name(hdev
, e
) == 0) {
1857 e
->name_state
= NAME_PENDING
;
1858 hci_discovery_set_state(hdev
, DISCOVERY_RESOLVING
);
1860 hci_discovery_set_state(hdev
, DISCOVERY_STOPPED
);
1864 hci_dev_unlock(hdev
);
1867 static void hci_inquiry_result_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1869 struct inquiry_data data
;
1870 struct inquiry_info
*info
= (void *) (skb
->data
+ 1);
1871 int num_rsp
= *((__u8
*) skb
->data
);
1873 BT_DBG("%s num_rsp %d", hdev
->name
, num_rsp
);
1878 if (test_bit(HCI_PERIODIC_INQ
, &hdev
->dev_flags
))
1883 for (; num_rsp
; num_rsp
--, info
++) {
1884 bool name_known
, ssp
;
1886 bacpy(&data
.bdaddr
, &info
->bdaddr
);
1887 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
1888 data
.pscan_period_mode
= info
->pscan_period_mode
;
1889 data
.pscan_mode
= info
->pscan_mode
;
1890 memcpy(data
.dev_class
, info
->dev_class
, 3);
1891 data
.clock_offset
= info
->clock_offset
;
1893 data
.ssp_mode
= 0x00;
1895 name_known
= hci_inquiry_cache_update(hdev
, &data
, false, &ssp
);
1896 mgmt_device_found(hdev
, &info
->bdaddr
, ACL_LINK
, 0x00,
1897 info
->dev_class
, 0, !name_known
, ssp
, NULL
,
1901 hci_dev_unlock(hdev
);
1904 static void hci_conn_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1906 struct hci_ev_conn_complete
*ev
= (void *) skb
->data
;
1907 struct hci_conn
*conn
;
1909 BT_DBG("%s", hdev
->name
);
1913 conn
= hci_conn_hash_lookup_ba(hdev
, ev
->link_type
, &ev
->bdaddr
);
1915 if (ev
->link_type
!= SCO_LINK
)
1918 conn
= hci_conn_hash_lookup_ba(hdev
, ESCO_LINK
, &ev
->bdaddr
);
1922 conn
->type
= SCO_LINK
;
1926 conn
->handle
= __le16_to_cpu(ev
->handle
);
1928 if (conn
->type
== ACL_LINK
) {
1929 conn
->state
= BT_CONFIG
;
1930 hci_conn_hold(conn
);
1932 if (!conn
->out
&& !hci_conn_ssp_enabled(conn
) &&
1933 !hci_find_link_key(hdev
, &ev
->bdaddr
))
1934 conn
->disc_timeout
= HCI_PAIRING_TIMEOUT
;
1936 conn
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
1938 conn
->state
= BT_CONNECTED
;
1940 hci_conn_hold_device(conn
);
1941 hci_conn_add_sysfs(conn
);
1943 if (test_bit(HCI_AUTH
, &hdev
->flags
))
1944 conn
->link_mode
|= HCI_LM_AUTH
;
1946 if (test_bit(HCI_ENCRYPT
, &hdev
->flags
))
1947 conn
->link_mode
|= HCI_LM_ENCRYPT
;
1949 /* Get remote features */
1950 if (conn
->type
== ACL_LINK
) {
1951 struct hci_cp_read_remote_features cp
;
1952 cp
.handle
= ev
->handle
;
1953 hci_send_cmd(hdev
, HCI_OP_READ_REMOTE_FEATURES
,
1957 /* Set packet type for incoming connection */
1958 if (!conn
->out
&& hdev
->hci_ver
< BLUETOOTH_VER_2_0
) {
1959 struct hci_cp_change_conn_ptype cp
;
1960 cp
.handle
= ev
->handle
;
1961 cp
.pkt_type
= cpu_to_le16(conn
->pkt_type
);
1962 hci_send_cmd(hdev
, HCI_OP_CHANGE_CONN_PTYPE
, sizeof(cp
),
1966 conn
->state
= BT_CLOSED
;
1967 if (conn
->type
== ACL_LINK
)
1968 mgmt_connect_failed(hdev
, &ev
->bdaddr
, conn
->type
,
1969 conn
->dst_type
, ev
->status
);
1972 if (conn
->type
== ACL_LINK
)
1973 hci_sco_setup(conn
, ev
->status
);
1976 hci_proto_connect_cfm(conn
, ev
->status
);
1978 } else if (ev
->link_type
!= ACL_LINK
)
1979 hci_proto_connect_cfm(conn
, ev
->status
);
1982 hci_dev_unlock(hdev
);
1984 hci_conn_check_pending(hdev
);
1987 static void hci_conn_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1989 struct hci_ev_conn_request
*ev
= (void *) skb
->data
;
1990 int mask
= hdev
->link_mode
;
1992 BT_DBG("%s bdaddr %pMR type 0x%x", hdev
->name
, &ev
->bdaddr
,
1995 mask
|= hci_proto_connect_ind(hdev
, &ev
->bdaddr
, ev
->link_type
);
1997 if ((mask
& HCI_LM_ACCEPT
) &&
1998 !hci_blacklist_lookup(hdev
, &ev
->bdaddr
)) {
1999 /* Connection accepted */
2000 struct inquiry_entry
*ie
;
2001 struct hci_conn
*conn
;
2005 ie
= hci_inquiry_cache_lookup(hdev
, &ev
->bdaddr
);
2007 memcpy(ie
->data
.dev_class
, ev
->dev_class
, 3);
2009 conn
= hci_conn_hash_lookup_ba(hdev
, ev
->link_type
,
2012 conn
= hci_conn_add(hdev
, ev
->link_type
, &ev
->bdaddr
);
2014 BT_ERR("No memory for new connection");
2015 hci_dev_unlock(hdev
);
2020 memcpy(conn
->dev_class
, ev
->dev_class
, 3);
2021 conn
->state
= BT_CONNECT
;
2023 hci_dev_unlock(hdev
);
2025 if (ev
->link_type
== ACL_LINK
|| !lmp_esco_capable(hdev
)) {
2026 struct hci_cp_accept_conn_req cp
;
2028 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
2030 if (lmp_rswitch_capable(hdev
) && (mask
& HCI_LM_MASTER
))
2031 cp
.role
= 0x00; /* Become master */
2033 cp
.role
= 0x01; /* Remain slave */
2035 hci_send_cmd(hdev
, HCI_OP_ACCEPT_CONN_REQ
, sizeof(cp
),
2038 struct hci_cp_accept_sync_conn_req cp
;
2040 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
2041 cp
.pkt_type
= cpu_to_le16(conn
->pkt_type
);
2043 cp
.tx_bandwidth
= __constant_cpu_to_le32(0x00001f40);
2044 cp
.rx_bandwidth
= __constant_cpu_to_le32(0x00001f40);
2045 cp
.max_latency
= __constant_cpu_to_le16(0xffff);
2046 cp
.content_format
= cpu_to_le16(hdev
->voice_setting
);
2047 cp
.retrans_effort
= 0xff;
2049 hci_send_cmd(hdev
, HCI_OP_ACCEPT_SYNC_CONN_REQ
,
2053 /* Connection rejected */
2054 struct hci_cp_reject_conn_req cp
;
2056 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
2057 cp
.reason
= HCI_ERROR_REJ_BAD_ADDR
;
2058 hci_send_cmd(hdev
, HCI_OP_REJECT_CONN_REQ
, sizeof(cp
), &cp
);
2062 static u8
hci_to_mgmt_reason(u8 err
)
2065 case HCI_ERROR_CONNECTION_TIMEOUT
:
2066 return MGMT_DEV_DISCONN_TIMEOUT
;
2067 case HCI_ERROR_REMOTE_USER_TERM
:
2068 case HCI_ERROR_REMOTE_LOW_RESOURCES
:
2069 case HCI_ERROR_REMOTE_POWER_OFF
:
2070 return MGMT_DEV_DISCONN_REMOTE
;
2071 case HCI_ERROR_LOCAL_HOST_TERM
:
2072 return MGMT_DEV_DISCONN_LOCAL_HOST
;
2074 return MGMT_DEV_DISCONN_UNKNOWN
;
2078 static void hci_disconn_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2080 struct hci_ev_disconn_complete
*ev
= (void *) skb
->data
;
2081 struct hci_conn
*conn
;
2083 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2087 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2091 if (ev
->status
== 0)
2092 conn
->state
= BT_CLOSED
;
2094 if (test_and_clear_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
) &&
2095 (conn
->type
== ACL_LINK
|| conn
->type
== LE_LINK
)) {
2097 mgmt_disconnect_failed(hdev
, &conn
->dst
, conn
->type
,
2098 conn
->dst_type
, ev
->status
);
2100 u8 reason
= hci_to_mgmt_reason(ev
->reason
);
2102 mgmt_device_disconnected(hdev
, &conn
->dst
, conn
->type
,
2103 conn
->dst_type
, reason
);
2107 if (ev
->status
== 0) {
2108 if (conn
->type
== ACL_LINK
&& conn
->flush_key
)
2109 hci_remove_link_key(hdev
, &conn
->dst
);
2110 hci_proto_disconn_cfm(conn
, ev
->reason
);
2115 hci_dev_unlock(hdev
);
2118 static void hci_auth_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2120 struct hci_ev_auth_complete
*ev
= (void *) skb
->data
;
2121 struct hci_conn
*conn
;
2123 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2127 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2132 if (!hci_conn_ssp_enabled(conn
) &&
2133 test_bit(HCI_CONN_REAUTH_PEND
, &conn
->flags
)) {
2134 BT_INFO("re-auth of legacy device is not possible.");
2136 conn
->link_mode
|= HCI_LM_AUTH
;
2137 conn
->sec_level
= conn
->pending_sec_level
;
2140 mgmt_auth_failed(hdev
, &conn
->dst
, conn
->type
, conn
->dst_type
,
2144 clear_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
);
2145 clear_bit(HCI_CONN_REAUTH_PEND
, &conn
->flags
);
2147 if (conn
->state
== BT_CONFIG
) {
2148 if (!ev
->status
&& hci_conn_ssp_enabled(conn
)) {
2149 struct hci_cp_set_conn_encrypt cp
;
2150 cp
.handle
= ev
->handle
;
2152 hci_send_cmd(hdev
, HCI_OP_SET_CONN_ENCRYPT
, sizeof(cp
),
2155 conn
->state
= BT_CONNECTED
;
2156 hci_proto_connect_cfm(conn
, ev
->status
);
2160 hci_auth_cfm(conn
, ev
->status
);
2162 hci_conn_hold(conn
);
2163 conn
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
2167 if (test_bit(HCI_CONN_ENCRYPT_PEND
, &conn
->flags
)) {
2169 struct hci_cp_set_conn_encrypt cp
;
2170 cp
.handle
= ev
->handle
;
2172 hci_send_cmd(hdev
, HCI_OP_SET_CONN_ENCRYPT
, sizeof(cp
),
2175 clear_bit(HCI_CONN_ENCRYPT_PEND
, &conn
->flags
);
2176 hci_encrypt_cfm(conn
, ev
->status
, 0x00);
2181 hci_dev_unlock(hdev
);
2184 static void hci_remote_name_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2186 struct hci_ev_remote_name
*ev
= (void *) skb
->data
;
2187 struct hci_conn
*conn
;
2189 BT_DBG("%s", hdev
->name
);
2191 hci_conn_check_pending(hdev
);
2195 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
2197 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
2200 if (ev
->status
== 0)
2201 hci_check_pending_name(hdev
, conn
, &ev
->bdaddr
, ev
->name
,
2202 strnlen(ev
->name
, HCI_MAX_NAME_LENGTH
));
2204 hci_check_pending_name(hdev
, conn
, &ev
->bdaddr
, NULL
, 0);
2210 if (!hci_outgoing_auth_needed(hdev
, conn
))
2213 if (!test_and_set_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
)) {
2214 struct hci_cp_auth_requested cp
;
2215 cp
.handle
= __cpu_to_le16(conn
->handle
);
2216 hci_send_cmd(hdev
, HCI_OP_AUTH_REQUESTED
, sizeof(cp
), &cp
);
2220 hci_dev_unlock(hdev
);
2223 static void hci_encrypt_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2225 struct hci_ev_encrypt_change
*ev
= (void *) skb
->data
;
2226 struct hci_conn
*conn
;
2228 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2232 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2236 /* Encryption implies authentication */
2237 conn
->link_mode
|= HCI_LM_AUTH
;
2238 conn
->link_mode
|= HCI_LM_ENCRYPT
;
2239 conn
->sec_level
= conn
->pending_sec_level
;
2241 conn
->link_mode
&= ~HCI_LM_ENCRYPT
;
2244 clear_bit(HCI_CONN_ENCRYPT_PEND
, &conn
->flags
);
2246 if (ev
->status
&& conn
->state
== BT_CONNECTED
) {
2247 hci_acl_disconn(conn
, HCI_ERROR_AUTH_FAILURE
);
2252 if (conn
->state
== BT_CONFIG
) {
2254 conn
->state
= BT_CONNECTED
;
2256 hci_proto_connect_cfm(conn
, ev
->status
);
2259 hci_encrypt_cfm(conn
, ev
->status
, ev
->encrypt
);
2263 hci_dev_unlock(hdev
);
2266 static void hci_change_link_key_complete_evt(struct hci_dev
*hdev
,
2267 struct sk_buff
*skb
)
2269 struct hci_ev_change_link_key_complete
*ev
= (void *) skb
->data
;
2270 struct hci_conn
*conn
;
2272 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2276 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2279 conn
->link_mode
|= HCI_LM_SECURE
;
2281 clear_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
);
2283 hci_key_change_cfm(conn
, ev
->status
);
2286 hci_dev_unlock(hdev
);
2289 static void hci_remote_features_evt(struct hci_dev
*hdev
,
2290 struct sk_buff
*skb
)
2292 struct hci_ev_remote_features
*ev
= (void *) skb
->data
;
2293 struct hci_conn
*conn
;
2295 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2299 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2304 memcpy(conn
->features
, ev
->features
, 8);
2306 if (conn
->state
!= BT_CONFIG
)
2309 if (!ev
->status
&& lmp_ssp_capable(hdev
) && lmp_ssp_capable(conn
)) {
2310 struct hci_cp_read_remote_ext_features cp
;
2311 cp
.handle
= ev
->handle
;
2313 hci_send_cmd(hdev
, HCI_OP_READ_REMOTE_EXT_FEATURES
,
2318 if (!ev
->status
&& !test_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
)) {
2319 struct hci_cp_remote_name_req cp
;
2320 memset(&cp
, 0, sizeof(cp
));
2321 bacpy(&cp
.bdaddr
, &conn
->dst
);
2322 cp
.pscan_rep_mode
= 0x02;
2323 hci_send_cmd(hdev
, HCI_OP_REMOTE_NAME_REQ
, sizeof(cp
), &cp
);
2324 } else if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
))
2325 mgmt_device_connected(hdev
, &conn
->dst
, conn
->type
,
2326 conn
->dst_type
, 0, NULL
, 0,
2329 if (!hci_outgoing_auth_needed(hdev
, conn
)) {
2330 conn
->state
= BT_CONNECTED
;
2331 hci_proto_connect_cfm(conn
, ev
->status
);
2336 hci_dev_unlock(hdev
);
2339 static void hci_remote_version_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2341 BT_DBG("%s", hdev
->name
);
2344 static void hci_qos_setup_complete_evt(struct hci_dev
*hdev
,
2345 struct sk_buff
*skb
)
2347 BT_DBG("%s", hdev
->name
);
2350 static void hci_cmd_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2352 struct hci_ev_cmd_complete
*ev
= (void *) skb
->data
;
2355 skb_pull(skb
, sizeof(*ev
));
2357 opcode
= __le16_to_cpu(ev
->opcode
);
2360 case HCI_OP_INQUIRY_CANCEL
:
2361 hci_cc_inquiry_cancel(hdev
, skb
);
2364 case HCI_OP_PERIODIC_INQ
:
2365 hci_cc_periodic_inq(hdev
, skb
);
2368 case HCI_OP_EXIT_PERIODIC_INQ
:
2369 hci_cc_exit_periodic_inq(hdev
, skb
);
2372 case HCI_OP_REMOTE_NAME_REQ_CANCEL
:
2373 hci_cc_remote_name_req_cancel(hdev
, skb
);
2376 case HCI_OP_ROLE_DISCOVERY
:
2377 hci_cc_role_discovery(hdev
, skb
);
2380 case HCI_OP_READ_LINK_POLICY
:
2381 hci_cc_read_link_policy(hdev
, skb
);
2384 case HCI_OP_WRITE_LINK_POLICY
:
2385 hci_cc_write_link_policy(hdev
, skb
);
2388 case HCI_OP_READ_DEF_LINK_POLICY
:
2389 hci_cc_read_def_link_policy(hdev
, skb
);
2392 case HCI_OP_WRITE_DEF_LINK_POLICY
:
2393 hci_cc_write_def_link_policy(hdev
, skb
);
2397 hci_cc_reset(hdev
, skb
);
2400 case HCI_OP_WRITE_LOCAL_NAME
:
2401 hci_cc_write_local_name(hdev
, skb
);
2404 case HCI_OP_READ_LOCAL_NAME
:
2405 hci_cc_read_local_name(hdev
, skb
);
2408 case HCI_OP_WRITE_AUTH_ENABLE
:
2409 hci_cc_write_auth_enable(hdev
, skb
);
2412 case HCI_OP_WRITE_ENCRYPT_MODE
:
2413 hci_cc_write_encrypt_mode(hdev
, skb
);
2416 case HCI_OP_WRITE_SCAN_ENABLE
:
2417 hci_cc_write_scan_enable(hdev
, skb
);
2420 case HCI_OP_READ_CLASS_OF_DEV
:
2421 hci_cc_read_class_of_dev(hdev
, skb
);
2424 case HCI_OP_WRITE_CLASS_OF_DEV
:
2425 hci_cc_write_class_of_dev(hdev
, skb
);
2428 case HCI_OP_READ_VOICE_SETTING
:
2429 hci_cc_read_voice_setting(hdev
, skb
);
2432 case HCI_OP_WRITE_VOICE_SETTING
:
2433 hci_cc_write_voice_setting(hdev
, skb
);
2436 case HCI_OP_HOST_BUFFER_SIZE
:
2437 hci_cc_host_buffer_size(hdev
, skb
);
2440 case HCI_OP_WRITE_SSP_MODE
:
2441 hci_cc_write_ssp_mode(hdev
, skb
);
2444 case HCI_OP_READ_LOCAL_VERSION
:
2445 hci_cc_read_local_version(hdev
, skb
);
2448 case HCI_OP_READ_LOCAL_COMMANDS
:
2449 hci_cc_read_local_commands(hdev
, skb
);
2452 case HCI_OP_READ_LOCAL_FEATURES
:
2453 hci_cc_read_local_features(hdev
, skb
);
2456 case HCI_OP_READ_LOCAL_EXT_FEATURES
:
2457 hci_cc_read_local_ext_features(hdev
, skb
);
2460 case HCI_OP_READ_BUFFER_SIZE
:
2461 hci_cc_read_buffer_size(hdev
, skb
);
2464 case HCI_OP_READ_BD_ADDR
:
2465 hci_cc_read_bd_addr(hdev
, skb
);
2468 case HCI_OP_READ_DATA_BLOCK_SIZE
:
2469 hci_cc_read_data_block_size(hdev
, skb
);
2472 case HCI_OP_WRITE_CA_TIMEOUT
:
2473 hci_cc_write_ca_timeout(hdev
, skb
);
2476 case HCI_OP_READ_FLOW_CONTROL_MODE
:
2477 hci_cc_read_flow_control_mode(hdev
, skb
);
2480 case HCI_OP_READ_LOCAL_AMP_INFO
:
2481 hci_cc_read_local_amp_info(hdev
, skb
);
2484 case HCI_OP_READ_LOCAL_AMP_ASSOC
:
2485 hci_cc_read_local_amp_assoc(hdev
, skb
);
2488 case HCI_OP_DELETE_STORED_LINK_KEY
:
2489 hci_cc_delete_stored_link_key(hdev
, skb
);
2492 case HCI_OP_SET_EVENT_MASK
:
2493 hci_cc_set_event_mask(hdev
, skb
);
2496 case HCI_OP_WRITE_INQUIRY_MODE
:
2497 hci_cc_write_inquiry_mode(hdev
, skb
);
2500 case HCI_OP_READ_INQ_RSP_TX_POWER
:
2501 hci_cc_read_inq_rsp_tx_power(hdev
, skb
);
2504 case HCI_OP_SET_EVENT_FLT
:
2505 hci_cc_set_event_flt(hdev
, skb
);
2508 case HCI_OP_PIN_CODE_REPLY
:
2509 hci_cc_pin_code_reply(hdev
, skb
);
2512 case HCI_OP_PIN_CODE_NEG_REPLY
:
2513 hci_cc_pin_code_neg_reply(hdev
, skb
);
2516 case HCI_OP_READ_LOCAL_OOB_DATA
:
2517 hci_cc_read_local_oob_data_reply(hdev
, skb
);
2520 case HCI_OP_LE_READ_BUFFER_SIZE
:
2521 hci_cc_le_read_buffer_size(hdev
, skb
);
2524 case HCI_OP_LE_READ_ADV_TX_POWER
:
2525 hci_cc_le_read_adv_tx_power(hdev
, skb
);
2528 case HCI_OP_LE_SET_EVENT_MASK
:
2529 hci_cc_le_set_event_mask(hdev
, skb
);
2532 case HCI_OP_USER_CONFIRM_REPLY
:
2533 hci_cc_user_confirm_reply(hdev
, skb
);
2536 case HCI_OP_USER_CONFIRM_NEG_REPLY
:
2537 hci_cc_user_confirm_neg_reply(hdev
, skb
);
2540 case HCI_OP_USER_PASSKEY_REPLY
:
2541 hci_cc_user_passkey_reply(hdev
, skb
);
2544 case HCI_OP_USER_PASSKEY_NEG_REPLY
:
2545 hci_cc_user_passkey_neg_reply(hdev
, skb
);
2548 case HCI_OP_LE_SET_SCAN_PARAM
:
2549 hci_cc_le_set_scan_param(hdev
, skb
);
2552 case HCI_OP_LE_SET_SCAN_ENABLE
:
2553 hci_cc_le_set_scan_enable(hdev
, skb
);
2556 case HCI_OP_LE_LTK_REPLY
:
2557 hci_cc_le_ltk_reply(hdev
, skb
);
2560 case HCI_OP_LE_LTK_NEG_REPLY
:
2561 hci_cc_le_ltk_neg_reply(hdev
, skb
);
2564 case HCI_OP_WRITE_LE_HOST_SUPPORTED
:
2565 hci_cc_write_le_host_supported(hdev
, skb
);
2568 case HCI_OP_WRITE_REMOTE_AMP_ASSOC
:
2569 hci_cc_write_remote_amp_assoc(hdev
, skb
);
2573 BT_DBG("%s opcode 0x%4.4x", hdev
->name
, opcode
);
2577 if (ev
->opcode
!= HCI_OP_NOP
)
2578 del_timer(&hdev
->cmd_timer
);
2581 atomic_set(&hdev
->cmd_cnt
, 1);
2582 if (!skb_queue_empty(&hdev
->cmd_q
))
2583 queue_work(hdev
->workqueue
, &hdev
->cmd_work
);
2587 static void hci_cmd_status_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2589 struct hci_ev_cmd_status
*ev
= (void *) skb
->data
;
2592 skb_pull(skb
, sizeof(*ev
));
2594 opcode
= __le16_to_cpu(ev
->opcode
);
2597 case HCI_OP_INQUIRY
:
2598 hci_cs_inquiry(hdev
, ev
->status
);
2601 case HCI_OP_CREATE_CONN
:
2602 hci_cs_create_conn(hdev
, ev
->status
);
2605 case HCI_OP_ADD_SCO
:
2606 hci_cs_add_sco(hdev
, ev
->status
);
2609 case HCI_OP_AUTH_REQUESTED
:
2610 hci_cs_auth_requested(hdev
, ev
->status
);
2613 case HCI_OP_SET_CONN_ENCRYPT
:
2614 hci_cs_set_conn_encrypt(hdev
, ev
->status
);
2617 case HCI_OP_REMOTE_NAME_REQ
:
2618 hci_cs_remote_name_req(hdev
, ev
->status
);
2621 case HCI_OP_READ_REMOTE_FEATURES
:
2622 hci_cs_read_remote_features(hdev
, ev
->status
);
2625 case HCI_OP_READ_REMOTE_EXT_FEATURES
:
2626 hci_cs_read_remote_ext_features(hdev
, ev
->status
);
2629 case HCI_OP_SETUP_SYNC_CONN
:
2630 hci_cs_setup_sync_conn(hdev
, ev
->status
);
2633 case HCI_OP_SNIFF_MODE
:
2634 hci_cs_sniff_mode(hdev
, ev
->status
);
2637 case HCI_OP_EXIT_SNIFF_MODE
:
2638 hci_cs_exit_sniff_mode(hdev
, ev
->status
);
2641 case HCI_OP_DISCONNECT
:
2642 hci_cs_disconnect(hdev
, ev
->status
);
2645 case HCI_OP_LE_CREATE_CONN
:
2646 hci_cs_le_create_conn(hdev
, ev
->status
);
2649 case HCI_OP_LE_START_ENC
:
2650 hci_cs_le_start_enc(hdev
, ev
->status
);
2653 case HCI_OP_CREATE_PHY_LINK
:
2654 hci_cs_create_phylink(hdev
, ev
->status
);
2657 case HCI_OP_ACCEPT_PHY_LINK
:
2658 hci_cs_accept_phylink(hdev
, ev
->status
);
2662 BT_DBG("%s opcode 0x%4.4x", hdev
->name
, opcode
);
2666 if (ev
->opcode
!= HCI_OP_NOP
)
2667 del_timer(&hdev
->cmd_timer
);
2669 if (ev
->ncmd
&& !test_bit(HCI_RESET
, &hdev
->flags
)) {
2670 atomic_set(&hdev
->cmd_cnt
, 1);
2671 if (!skb_queue_empty(&hdev
->cmd_q
))
2672 queue_work(hdev
->workqueue
, &hdev
->cmd_work
);
2676 static void hci_role_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2678 struct hci_ev_role_change
*ev
= (void *) skb
->data
;
2679 struct hci_conn
*conn
;
2681 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2685 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
2689 conn
->link_mode
&= ~HCI_LM_MASTER
;
2691 conn
->link_mode
|= HCI_LM_MASTER
;
2694 clear_bit(HCI_CONN_RSWITCH_PEND
, &conn
->flags
);
2696 hci_role_switch_cfm(conn
, ev
->status
, ev
->role
);
2699 hci_dev_unlock(hdev
);
2702 static void hci_num_comp_pkts_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2704 struct hci_ev_num_comp_pkts
*ev
= (void *) skb
->data
;
2707 if (hdev
->flow_ctl_mode
!= HCI_FLOW_CTL_MODE_PACKET_BASED
) {
2708 BT_ERR("Wrong event for mode %d", hdev
->flow_ctl_mode
);
2712 if (skb
->len
< sizeof(*ev
) || skb
->len
< sizeof(*ev
) +
2713 ev
->num_hndl
* sizeof(struct hci_comp_pkts_info
)) {
2714 BT_DBG("%s bad parameters", hdev
->name
);
2718 BT_DBG("%s num_hndl %d", hdev
->name
, ev
->num_hndl
);
2720 for (i
= 0; i
< ev
->num_hndl
; i
++) {
2721 struct hci_comp_pkts_info
*info
= &ev
->handles
[i
];
2722 struct hci_conn
*conn
;
2723 __u16 handle
, count
;
2725 handle
= __le16_to_cpu(info
->handle
);
2726 count
= __le16_to_cpu(info
->count
);
2728 conn
= hci_conn_hash_lookup_handle(hdev
, handle
);
2732 conn
->sent
-= count
;
2734 switch (conn
->type
) {
2736 hdev
->acl_cnt
+= count
;
2737 if (hdev
->acl_cnt
> hdev
->acl_pkts
)
2738 hdev
->acl_cnt
= hdev
->acl_pkts
;
2742 if (hdev
->le_pkts
) {
2743 hdev
->le_cnt
+= count
;
2744 if (hdev
->le_cnt
> hdev
->le_pkts
)
2745 hdev
->le_cnt
= hdev
->le_pkts
;
2747 hdev
->acl_cnt
+= count
;
2748 if (hdev
->acl_cnt
> hdev
->acl_pkts
)
2749 hdev
->acl_cnt
= hdev
->acl_pkts
;
2754 hdev
->sco_cnt
+= count
;
2755 if (hdev
->sco_cnt
> hdev
->sco_pkts
)
2756 hdev
->sco_cnt
= hdev
->sco_pkts
;
2760 BT_ERR("Unknown type %d conn %p", conn
->type
, conn
);
2765 queue_work(hdev
->workqueue
, &hdev
->tx_work
);
2768 static struct hci_conn
*__hci_conn_lookup_handle(struct hci_dev
*hdev
,
2771 struct hci_chan
*chan
;
2773 switch (hdev
->dev_type
) {
2775 return hci_conn_hash_lookup_handle(hdev
, handle
);
2777 chan
= hci_chan_lookup_handle(hdev
, handle
);
2782 BT_ERR("%s unknown dev_type %d", hdev
->name
, hdev
->dev_type
);
2789 static void hci_num_comp_blocks_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2791 struct hci_ev_num_comp_blocks
*ev
= (void *) skb
->data
;
2794 if (hdev
->flow_ctl_mode
!= HCI_FLOW_CTL_MODE_BLOCK_BASED
) {
2795 BT_ERR("Wrong event for mode %d", hdev
->flow_ctl_mode
);
2799 if (skb
->len
< sizeof(*ev
) || skb
->len
< sizeof(*ev
) +
2800 ev
->num_hndl
* sizeof(struct hci_comp_blocks_info
)) {
2801 BT_DBG("%s bad parameters", hdev
->name
);
2805 BT_DBG("%s num_blocks %d num_hndl %d", hdev
->name
, ev
->num_blocks
,
2808 for (i
= 0; i
< ev
->num_hndl
; i
++) {
2809 struct hci_comp_blocks_info
*info
= &ev
->handles
[i
];
2810 struct hci_conn
*conn
= NULL
;
2811 __u16 handle
, block_count
;
2813 handle
= __le16_to_cpu(info
->handle
);
2814 block_count
= __le16_to_cpu(info
->blocks
);
2816 conn
= __hci_conn_lookup_handle(hdev
, handle
);
2820 conn
->sent
-= block_count
;
2822 switch (conn
->type
) {
2825 hdev
->block_cnt
+= block_count
;
2826 if (hdev
->block_cnt
> hdev
->num_blocks
)
2827 hdev
->block_cnt
= hdev
->num_blocks
;
2831 BT_ERR("Unknown type %d conn %p", conn
->type
, conn
);
2836 queue_work(hdev
->workqueue
, &hdev
->tx_work
);
2839 static void hci_mode_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2841 struct hci_ev_mode_change
*ev
= (void *) skb
->data
;
2842 struct hci_conn
*conn
;
2844 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
2848 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2850 conn
->mode
= ev
->mode
;
2851 conn
->interval
= __le16_to_cpu(ev
->interval
);
2853 if (!test_and_clear_bit(HCI_CONN_MODE_CHANGE_PEND
,
2855 if (conn
->mode
== HCI_CM_ACTIVE
)
2856 set_bit(HCI_CONN_POWER_SAVE
, &conn
->flags
);
2858 clear_bit(HCI_CONN_POWER_SAVE
, &conn
->flags
);
2861 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND
, &conn
->flags
))
2862 hci_sco_setup(conn
, ev
->status
);
2865 hci_dev_unlock(hdev
);
2868 static void hci_pin_code_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2870 struct hci_ev_pin_code_req
*ev
= (void *) skb
->data
;
2871 struct hci_conn
*conn
;
2873 BT_DBG("%s", hdev
->name
);
2877 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
2881 if (conn
->state
== BT_CONNECTED
) {
2882 hci_conn_hold(conn
);
2883 conn
->disc_timeout
= HCI_PAIRING_TIMEOUT
;
2887 if (!test_bit(HCI_PAIRABLE
, &hdev
->dev_flags
))
2888 hci_send_cmd(hdev
, HCI_OP_PIN_CODE_NEG_REPLY
,
2889 sizeof(ev
->bdaddr
), &ev
->bdaddr
);
2890 else if (test_bit(HCI_MGMT
, &hdev
->dev_flags
)) {
2893 if (conn
->pending_sec_level
== BT_SECURITY_HIGH
)
2898 mgmt_pin_code_request(hdev
, &ev
->bdaddr
, secure
);
2902 hci_dev_unlock(hdev
);
2905 static void hci_link_key_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2907 struct hci_ev_link_key_req
*ev
= (void *) skb
->data
;
2908 struct hci_cp_link_key_reply cp
;
2909 struct hci_conn
*conn
;
2910 struct link_key
*key
;
2912 BT_DBG("%s", hdev
->name
);
2914 if (!test_bit(HCI_LINK_KEYS
, &hdev
->dev_flags
))
2919 key
= hci_find_link_key(hdev
, &ev
->bdaddr
);
2921 BT_DBG("%s link key not found for %pMR", hdev
->name
,
2926 BT_DBG("%s found key type %u for %pMR", hdev
->name
, key
->type
,
2929 if (!test_bit(HCI_DEBUG_KEYS
, &hdev
->dev_flags
) &&
2930 key
->type
== HCI_LK_DEBUG_COMBINATION
) {
2931 BT_DBG("%s ignoring debug key", hdev
->name
);
2935 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
2937 if (key
->type
== HCI_LK_UNAUTH_COMBINATION
&&
2938 conn
->auth_type
!= 0xff && (conn
->auth_type
& 0x01)) {
2939 BT_DBG("%s ignoring unauthenticated key", hdev
->name
);
2943 if (key
->type
== HCI_LK_COMBINATION
&& key
->pin_len
< 16 &&
2944 conn
->pending_sec_level
== BT_SECURITY_HIGH
) {
2945 BT_DBG("%s ignoring key unauthenticated for high security",
2950 conn
->key_type
= key
->type
;
2951 conn
->pin_length
= key
->pin_len
;
2954 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
2955 memcpy(cp
.link_key
, key
->val
, HCI_LINK_KEY_SIZE
);
2957 hci_send_cmd(hdev
, HCI_OP_LINK_KEY_REPLY
, sizeof(cp
), &cp
);
2959 hci_dev_unlock(hdev
);
2964 hci_send_cmd(hdev
, HCI_OP_LINK_KEY_NEG_REPLY
, 6, &ev
->bdaddr
);
2965 hci_dev_unlock(hdev
);
2968 static void hci_link_key_notify_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2970 struct hci_ev_link_key_notify
*ev
= (void *) skb
->data
;
2971 struct hci_conn
*conn
;
2974 BT_DBG("%s", hdev
->name
);
2978 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
2980 hci_conn_hold(conn
);
2981 conn
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
2982 pin_len
= conn
->pin_length
;
2984 if (ev
->key_type
!= HCI_LK_CHANGED_COMBINATION
)
2985 conn
->key_type
= ev
->key_type
;
2990 if (test_bit(HCI_LINK_KEYS
, &hdev
->dev_flags
))
2991 hci_add_link_key(hdev
, conn
, 1, &ev
->bdaddr
, ev
->link_key
,
2992 ev
->key_type
, pin_len
);
2994 hci_dev_unlock(hdev
);
2997 static void hci_clock_offset_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2999 struct hci_ev_clock_offset
*ev
= (void *) skb
->data
;
3000 struct hci_conn
*conn
;
3002 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
3006 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
3007 if (conn
&& !ev
->status
) {
3008 struct inquiry_entry
*ie
;
3010 ie
= hci_inquiry_cache_lookup(hdev
, &conn
->dst
);
3012 ie
->data
.clock_offset
= ev
->clock_offset
;
3013 ie
->timestamp
= jiffies
;
3017 hci_dev_unlock(hdev
);
3020 static void hci_pkt_type_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3022 struct hci_ev_pkt_type_change
*ev
= (void *) skb
->data
;
3023 struct hci_conn
*conn
;
3025 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
3029 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
3030 if (conn
&& !ev
->status
)
3031 conn
->pkt_type
= __le16_to_cpu(ev
->pkt_type
);
3033 hci_dev_unlock(hdev
);
3036 static void hci_pscan_rep_mode_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3038 struct hci_ev_pscan_rep_mode
*ev
= (void *) skb
->data
;
3039 struct inquiry_entry
*ie
;
3041 BT_DBG("%s", hdev
->name
);
3045 ie
= hci_inquiry_cache_lookup(hdev
, &ev
->bdaddr
);
3047 ie
->data
.pscan_rep_mode
= ev
->pscan_rep_mode
;
3048 ie
->timestamp
= jiffies
;
3051 hci_dev_unlock(hdev
);
3054 static void hci_inquiry_result_with_rssi_evt(struct hci_dev
*hdev
,
3055 struct sk_buff
*skb
)
3057 struct inquiry_data data
;
3058 int num_rsp
= *((__u8
*) skb
->data
);
3059 bool name_known
, ssp
;
3061 BT_DBG("%s num_rsp %d", hdev
->name
, num_rsp
);
3066 if (test_bit(HCI_PERIODIC_INQ
, &hdev
->dev_flags
))
3071 if ((skb
->len
- 1) / num_rsp
!= sizeof(struct inquiry_info_with_rssi
)) {
3072 struct inquiry_info_with_rssi_and_pscan_mode
*info
;
3073 info
= (void *) (skb
->data
+ 1);
3075 for (; num_rsp
; num_rsp
--, info
++) {
3076 bacpy(&data
.bdaddr
, &info
->bdaddr
);
3077 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
3078 data
.pscan_period_mode
= info
->pscan_period_mode
;
3079 data
.pscan_mode
= info
->pscan_mode
;
3080 memcpy(data
.dev_class
, info
->dev_class
, 3);
3081 data
.clock_offset
= info
->clock_offset
;
3082 data
.rssi
= info
->rssi
;
3083 data
.ssp_mode
= 0x00;
3085 name_known
= hci_inquiry_cache_update(hdev
, &data
,
3087 mgmt_device_found(hdev
, &info
->bdaddr
, ACL_LINK
, 0x00,
3088 info
->dev_class
, info
->rssi
,
3089 !name_known
, ssp
, NULL
, 0);
3092 struct inquiry_info_with_rssi
*info
= (void *) (skb
->data
+ 1);
3094 for (; num_rsp
; num_rsp
--, info
++) {
3095 bacpy(&data
.bdaddr
, &info
->bdaddr
);
3096 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
3097 data
.pscan_period_mode
= info
->pscan_period_mode
;
3098 data
.pscan_mode
= 0x00;
3099 memcpy(data
.dev_class
, info
->dev_class
, 3);
3100 data
.clock_offset
= info
->clock_offset
;
3101 data
.rssi
= info
->rssi
;
3102 data
.ssp_mode
= 0x00;
3103 name_known
= hci_inquiry_cache_update(hdev
, &data
,
3105 mgmt_device_found(hdev
, &info
->bdaddr
, ACL_LINK
, 0x00,
3106 info
->dev_class
, info
->rssi
,
3107 !name_known
, ssp
, NULL
, 0);
3111 hci_dev_unlock(hdev
);
3114 static void hci_remote_ext_features_evt(struct hci_dev
*hdev
,
3115 struct sk_buff
*skb
)
3117 struct hci_ev_remote_ext_features
*ev
= (void *) skb
->data
;
3118 struct hci_conn
*conn
;
3120 BT_DBG("%s", hdev
->name
);
3124 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
3128 if (!ev
->status
&& ev
->page
== 0x01) {
3129 struct inquiry_entry
*ie
;
3131 ie
= hci_inquiry_cache_lookup(hdev
, &conn
->dst
);
3133 ie
->data
.ssp_mode
= (ev
->features
[0] & LMP_HOST_SSP
);
3135 if (ev
->features
[0] & LMP_HOST_SSP
)
3136 set_bit(HCI_CONN_SSP_ENABLED
, &conn
->flags
);
3139 if (conn
->state
!= BT_CONFIG
)
3142 if (!ev
->status
&& !test_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
)) {
3143 struct hci_cp_remote_name_req cp
;
3144 memset(&cp
, 0, sizeof(cp
));
3145 bacpy(&cp
.bdaddr
, &conn
->dst
);
3146 cp
.pscan_rep_mode
= 0x02;
3147 hci_send_cmd(hdev
, HCI_OP_REMOTE_NAME_REQ
, sizeof(cp
), &cp
);
3148 } else if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
))
3149 mgmt_device_connected(hdev
, &conn
->dst
, conn
->type
,
3150 conn
->dst_type
, 0, NULL
, 0,
3153 if (!hci_outgoing_auth_needed(hdev
, conn
)) {
3154 conn
->state
= BT_CONNECTED
;
3155 hci_proto_connect_cfm(conn
, ev
->status
);
3160 hci_dev_unlock(hdev
);
3163 static void hci_sync_conn_complete_evt(struct hci_dev
*hdev
,
3164 struct sk_buff
*skb
)
3166 struct hci_ev_sync_conn_complete
*ev
= (void *) skb
->data
;
3167 struct hci_conn
*conn
;
3169 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
3173 conn
= hci_conn_hash_lookup_ba(hdev
, ev
->link_type
, &ev
->bdaddr
);
3175 if (ev
->link_type
== ESCO_LINK
)
3178 conn
= hci_conn_hash_lookup_ba(hdev
, ESCO_LINK
, &ev
->bdaddr
);
3182 conn
->type
= SCO_LINK
;
3185 switch (ev
->status
) {
3187 conn
->handle
= __le16_to_cpu(ev
->handle
);
3188 conn
->state
= BT_CONNECTED
;
3190 hci_conn_hold_device(conn
);
3191 hci_conn_add_sysfs(conn
);
3194 case 0x11: /* Unsupported Feature or Parameter Value */
3195 case 0x1c: /* SCO interval rejected */
3196 case 0x1a: /* Unsupported Remote Feature */
3197 case 0x1f: /* Unspecified error */
3198 if (conn
->out
&& conn
->attempt
< 2) {
3199 conn
->pkt_type
= (hdev
->esco_type
& SCO_ESCO_MASK
) |
3200 (hdev
->esco_type
& EDR_ESCO_MASK
);
3201 hci_setup_sync(conn
, conn
->link
->handle
);
3207 conn
->state
= BT_CLOSED
;
3211 hci_proto_connect_cfm(conn
, ev
->status
);
3216 hci_dev_unlock(hdev
);
3219 static void hci_sync_conn_changed_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3221 BT_DBG("%s", hdev
->name
);
3224 static void hci_sniff_subrate_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3226 struct hci_ev_sniff_subrate
*ev
= (void *) skb
->data
;
3228 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
3231 static void hci_extended_inquiry_result_evt(struct hci_dev
*hdev
,
3232 struct sk_buff
*skb
)
3234 struct inquiry_data data
;
3235 struct extended_inquiry_info
*info
= (void *) (skb
->data
+ 1);
3236 int num_rsp
= *((__u8
*) skb
->data
);
3239 BT_DBG("%s num_rsp %d", hdev
->name
, num_rsp
);
3244 if (test_bit(HCI_PERIODIC_INQ
, &hdev
->dev_flags
))
3249 for (; num_rsp
; num_rsp
--, info
++) {
3250 bool name_known
, ssp
;
3252 bacpy(&data
.bdaddr
, &info
->bdaddr
);
3253 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
3254 data
.pscan_period_mode
= info
->pscan_period_mode
;
3255 data
.pscan_mode
= 0x00;
3256 memcpy(data
.dev_class
, info
->dev_class
, 3);
3257 data
.clock_offset
= info
->clock_offset
;
3258 data
.rssi
= info
->rssi
;
3259 data
.ssp_mode
= 0x01;
3261 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3262 name_known
= eir_has_data_type(info
->data
,
3268 name_known
= hci_inquiry_cache_update(hdev
, &data
, name_known
,
3270 eir_len
= eir_get_length(info
->data
, sizeof(info
->data
));
3271 mgmt_device_found(hdev
, &info
->bdaddr
, ACL_LINK
, 0x00,
3272 info
->dev_class
, info
->rssi
, !name_known
,
3273 ssp
, info
->data
, eir_len
);
3276 hci_dev_unlock(hdev
);
3279 static void hci_key_refresh_complete_evt(struct hci_dev
*hdev
,
3280 struct sk_buff
*skb
)
3282 struct hci_ev_key_refresh_complete
*ev
= (void *) skb
->data
;
3283 struct hci_conn
*conn
;
3285 BT_DBG("%s status 0x%2.2x handle 0x%4.4x", hdev
->name
, ev
->status
,
3286 __le16_to_cpu(ev
->handle
));
3290 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
3295 conn
->sec_level
= conn
->pending_sec_level
;
3297 clear_bit(HCI_CONN_ENCRYPT_PEND
, &conn
->flags
);
3299 if (ev
->status
&& conn
->state
== BT_CONNECTED
) {
3300 hci_acl_disconn(conn
, HCI_ERROR_AUTH_FAILURE
);
3305 if (conn
->state
== BT_CONFIG
) {
3307 conn
->state
= BT_CONNECTED
;
3309 hci_proto_connect_cfm(conn
, ev
->status
);
3312 hci_auth_cfm(conn
, ev
->status
);
3314 hci_conn_hold(conn
);
3315 conn
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
3320 hci_dev_unlock(hdev
);
3323 static u8
hci_get_auth_req(struct hci_conn
*conn
)
3325 /* If remote requests dedicated bonding follow that lead */
3326 if (conn
->remote_auth
== 0x02 || conn
->remote_auth
== 0x03) {
3327 /* If both remote and local IO capabilities allow MITM
3328 * protection then require it, otherwise don't */
3329 if (conn
->remote_cap
== 0x03 || conn
->io_capability
== 0x03)
3335 /* If remote requests no-bonding follow that lead */
3336 if (conn
->remote_auth
== 0x00 || conn
->remote_auth
== 0x01)
3337 return conn
->remote_auth
| (conn
->auth_type
& 0x01);
3339 return conn
->auth_type
;
3342 static void hci_io_capa_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3344 struct hci_ev_io_capa_request
*ev
= (void *) skb
->data
;
3345 struct hci_conn
*conn
;
3347 BT_DBG("%s", hdev
->name
);
3351 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3355 hci_conn_hold(conn
);
3357 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3360 if (test_bit(HCI_PAIRABLE
, &hdev
->dev_flags
) ||
3361 (conn
->remote_auth
& ~0x01) == HCI_AT_NO_BONDING
) {
3362 struct hci_cp_io_capability_reply cp
;
3364 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
3365 /* Change the IO capability from KeyboardDisplay
3366 * to DisplayYesNo as it is not supported by BT spec. */
3367 cp
.capability
= (conn
->io_capability
== 0x04) ?
3368 0x01 : conn
->io_capability
;
3369 conn
->auth_type
= hci_get_auth_req(conn
);
3370 cp
.authentication
= conn
->auth_type
;
3372 if (hci_find_remote_oob_data(hdev
, &conn
->dst
) &&
3373 (conn
->out
|| test_bit(HCI_CONN_REMOTE_OOB
, &conn
->flags
)))
3378 hci_send_cmd(hdev
, HCI_OP_IO_CAPABILITY_REPLY
,
3381 struct hci_cp_io_capability_neg_reply cp
;
3383 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
3384 cp
.reason
= HCI_ERROR_PAIRING_NOT_ALLOWED
;
3386 hci_send_cmd(hdev
, HCI_OP_IO_CAPABILITY_NEG_REPLY
,
3391 hci_dev_unlock(hdev
);
3394 static void hci_io_capa_reply_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3396 struct hci_ev_io_capa_reply
*ev
= (void *) skb
->data
;
3397 struct hci_conn
*conn
;
3399 BT_DBG("%s", hdev
->name
);
3403 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3407 conn
->remote_cap
= ev
->capability
;
3408 conn
->remote_auth
= ev
->authentication
;
3410 set_bit(HCI_CONN_REMOTE_OOB
, &conn
->flags
);
3413 hci_dev_unlock(hdev
);
3416 static void hci_user_confirm_request_evt(struct hci_dev
*hdev
,
3417 struct sk_buff
*skb
)
3419 struct hci_ev_user_confirm_req
*ev
= (void *) skb
->data
;
3420 int loc_mitm
, rem_mitm
, confirm_hint
= 0;
3421 struct hci_conn
*conn
;
3423 BT_DBG("%s", hdev
->name
);
3427 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3430 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3434 loc_mitm
= (conn
->auth_type
& 0x01);
3435 rem_mitm
= (conn
->remote_auth
& 0x01);
3437 /* If we require MITM but the remote device can't provide that
3438 * (it has NoInputNoOutput) then reject the confirmation
3439 * request. The only exception is when we're dedicated bonding
3440 * initiators (connect_cfm_cb set) since then we always have the MITM
3442 if (!conn
->connect_cfm_cb
&& loc_mitm
&& conn
->remote_cap
== 0x03) {
3443 BT_DBG("Rejecting request: remote device can't provide MITM");
3444 hci_send_cmd(hdev
, HCI_OP_USER_CONFIRM_NEG_REPLY
,
3445 sizeof(ev
->bdaddr
), &ev
->bdaddr
);
3449 /* If no side requires MITM protection; auto-accept */
3450 if ((!loc_mitm
|| conn
->remote_cap
== 0x03) &&
3451 (!rem_mitm
|| conn
->io_capability
== 0x03)) {
3453 /* If we're not the initiators request authorization to
3454 * proceed from user space (mgmt_user_confirm with
3455 * confirm_hint set to 1). */
3456 if (!test_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
)) {
3457 BT_DBG("Confirming auto-accept as acceptor");
3462 BT_DBG("Auto-accept of user confirmation with %ums delay",
3463 hdev
->auto_accept_delay
);
3465 if (hdev
->auto_accept_delay
> 0) {
3466 int delay
= msecs_to_jiffies(hdev
->auto_accept_delay
);
3467 mod_timer(&conn
->auto_accept_timer
, jiffies
+ delay
);
3471 hci_send_cmd(hdev
, HCI_OP_USER_CONFIRM_REPLY
,
3472 sizeof(ev
->bdaddr
), &ev
->bdaddr
);
3477 mgmt_user_confirm_request(hdev
, &ev
->bdaddr
, ACL_LINK
, 0, ev
->passkey
,
3481 hci_dev_unlock(hdev
);
3484 static void hci_user_passkey_request_evt(struct hci_dev
*hdev
,
3485 struct sk_buff
*skb
)
3487 struct hci_ev_user_passkey_req
*ev
= (void *) skb
->data
;
3489 BT_DBG("%s", hdev
->name
);
3491 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3492 mgmt_user_passkey_request(hdev
, &ev
->bdaddr
, ACL_LINK
, 0);
3495 static void hci_user_passkey_notify_evt(struct hci_dev
*hdev
,
3496 struct sk_buff
*skb
)
3498 struct hci_ev_user_passkey_notify
*ev
= (void *) skb
->data
;
3499 struct hci_conn
*conn
;
3501 BT_DBG("%s", hdev
->name
);
3503 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3507 conn
->passkey_notify
= __le32_to_cpu(ev
->passkey
);
3508 conn
->passkey_entered
= 0;
3510 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3511 mgmt_user_passkey_notify(hdev
, &conn
->dst
, conn
->type
,
3512 conn
->dst_type
, conn
->passkey_notify
,
3513 conn
->passkey_entered
);
3516 static void hci_keypress_notify_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3518 struct hci_ev_keypress_notify
*ev
= (void *) skb
->data
;
3519 struct hci_conn
*conn
;
3521 BT_DBG("%s", hdev
->name
);
3523 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3528 case HCI_KEYPRESS_STARTED
:
3529 conn
->passkey_entered
= 0;
3532 case HCI_KEYPRESS_ENTERED
:
3533 conn
->passkey_entered
++;
3536 case HCI_KEYPRESS_ERASED
:
3537 conn
->passkey_entered
--;
3540 case HCI_KEYPRESS_CLEARED
:
3541 conn
->passkey_entered
= 0;
3544 case HCI_KEYPRESS_COMPLETED
:
3548 if (test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3549 mgmt_user_passkey_notify(hdev
, &conn
->dst
, conn
->type
,
3550 conn
->dst_type
, conn
->passkey_notify
,
3551 conn
->passkey_entered
);
3554 static void hci_simple_pair_complete_evt(struct hci_dev
*hdev
,
3555 struct sk_buff
*skb
)
3557 struct hci_ev_simple_pair_complete
*ev
= (void *) skb
->data
;
3558 struct hci_conn
*conn
;
3560 BT_DBG("%s", hdev
->name
);
3564 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
3568 /* To avoid duplicate auth_failed events to user space we check
3569 * the HCI_CONN_AUTH_PEND flag which will be set if we
3570 * initiated the authentication. A traditional auth_complete
3571 * event gets always produced as initiator and is also mapped to
3572 * the mgmt_auth_failed event */
3573 if (!test_bit(HCI_CONN_AUTH_PEND
, &conn
->flags
) && ev
->status
)
3574 mgmt_auth_failed(hdev
, &conn
->dst
, conn
->type
, conn
->dst_type
,
3580 hci_dev_unlock(hdev
);
3583 static void hci_remote_host_features_evt(struct hci_dev
*hdev
,
3584 struct sk_buff
*skb
)
3586 struct hci_ev_remote_host_features
*ev
= (void *) skb
->data
;
3587 struct inquiry_entry
*ie
;
3589 BT_DBG("%s", hdev
->name
);
3593 ie
= hci_inquiry_cache_lookup(hdev
, &ev
->bdaddr
);
3595 ie
->data
.ssp_mode
= (ev
->features
[0] & LMP_HOST_SSP
);
3597 hci_dev_unlock(hdev
);
3600 static void hci_remote_oob_data_request_evt(struct hci_dev
*hdev
,
3601 struct sk_buff
*skb
)
3603 struct hci_ev_remote_oob_data_request
*ev
= (void *) skb
->data
;
3604 struct oob_data
*data
;
3606 BT_DBG("%s", hdev
->name
);
3610 if (!test_bit(HCI_MGMT
, &hdev
->dev_flags
))
3613 data
= hci_find_remote_oob_data(hdev
, &ev
->bdaddr
);
3615 struct hci_cp_remote_oob_data_reply cp
;
3617 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
3618 memcpy(cp
.hash
, data
->hash
, sizeof(cp
.hash
));
3619 memcpy(cp
.randomizer
, data
->randomizer
, sizeof(cp
.randomizer
));
3621 hci_send_cmd(hdev
, HCI_OP_REMOTE_OOB_DATA_REPLY
, sizeof(cp
),
3624 struct hci_cp_remote_oob_data_neg_reply cp
;
3626 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
3627 hci_send_cmd(hdev
, HCI_OP_REMOTE_OOB_DATA_NEG_REPLY
, sizeof(cp
),
3632 hci_dev_unlock(hdev
);
3635 static void hci_le_conn_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3637 struct hci_ev_le_conn_complete
*ev
= (void *) skb
->data
;
3638 struct hci_conn
*conn
;
3640 BT_DBG("%s status 0x%2.2x", hdev
->name
, ev
->status
);
3644 conn
= hci_conn_hash_lookup_state(hdev
, LE_LINK
, BT_CONNECT
);
3646 conn
= hci_conn_add(hdev
, LE_LINK
, &ev
->bdaddr
);
3648 BT_ERR("No memory for new connection");
3652 conn
->dst_type
= ev
->bdaddr_type
;
3654 if (ev
->role
== LE_CONN_ROLE_MASTER
) {
3656 conn
->link_mode
|= HCI_LM_MASTER
;
3661 mgmt_connect_failed(hdev
, &conn
->dst
, conn
->type
,
3662 conn
->dst_type
, ev
->status
);
3663 hci_proto_connect_cfm(conn
, ev
->status
);
3664 conn
->state
= BT_CLOSED
;
3669 if (!test_and_set_bit(HCI_CONN_MGMT_CONNECTED
, &conn
->flags
))
3670 mgmt_device_connected(hdev
, &ev
->bdaddr
, conn
->type
,
3671 conn
->dst_type
, 0, NULL
, 0, NULL
);
3673 conn
->sec_level
= BT_SECURITY_LOW
;
3674 conn
->handle
= __le16_to_cpu(ev
->handle
);
3675 conn
->state
= BT_CONNECTED
;
3677 hci_conn_hold_device(conn
);
3678 hci_conn_add_sysfs(conn
);
3680 hci_proto_connect_cfm(conn
, ev
->status
);
3683 hci_dev_unlock(hdev
);
3686 static void hci_le_adv_report_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3688 u8 num_reports
= skb
->data
[0];
3689 void *ptr
= &skb
->data
[1];
3694 while (num_reports
--) {
3695 struct hci_ev_le_advertising_info
*ev
= ptr
;
3697 rssi
= ev
->data
[ev
->length
];
3698 mgmt_device_found(hdev
, &ev
->bdaddr
, LE_LINK
, ev
->bdaddr_type
,
3699 NULL
, rssi
, 0, 1, ev
->data
, ev
->length
);
3701 ptr
+= sizeof(*ev
) + ev
->length
+ 1;
3704 hci_dev_unlock(hdev
);
3707 static void hci_le_ltk_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3709 struct hci_ev_le_ltk_req
*ev
= (void *) skb
->data
;
3710 struct hci_cp_le_ltk_reply cp
;
3711 struct hci_cp_le_ltk_neg_reply neg
;
3712 struct hci_conn
*conn
;
3713 struct smp_ltk
*ltk
;
3715 BT_DBG("%s handle 0x%4.4x", hdev
->name
, __le16_to_cpu(ev
->handle
));
3719 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
3723 ltk
= hci_find_ltk(hdev
, ev
->ediv
, ev
->random
);
3727 memcpy(cp
.ltk
, ltk
->val
, sizeof(ltk
->val
));
3728 cp
.handle
= cpu_to_le16(conn
->handle
);
3730 if (ltk
->authenticated
)
3731 conn
->sec_level
= BT_SECURITY_HIGH
;
3733 hci_send_cmd(hdev
, HCI_OP_LE_LTK_REPLY
, sizeof(cp
), &cp
);
3735 if (ltk
->type
& HCI_SMP_STK
) {
3736 list_del(<k
->list
);
3740 hci_dev_unlock(hdev
);
3745 neg
.handle
= ev
->handle
;
3746 hci_send_cmd(hdev
, HCI_OP_LE_LTK_NEG_REPLY
, sizeof(neg
), &neg
);
3747 hci_dev_unlock(hdev
);
3750 static void hci_le_meta_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3752 struct hci_ev_le_meta
*le_ev
= (void *) skb
->data
;
3754 skb_pull(skb
, sizeof(*le_ev
));
3756 switch (le_ev
->subevent
) {
3757 case HCI_EV_LE_CONN_COMPLETE
:
3758 hci_le_conn_complete_evt(hdev
, skb
);
3761 case HCI_EV_LE_ADVERTISING_REPORT
:
3762 hci_le_adv_report_evt(hdev
, skb
);
3765 case HCI_EV_LE_LTK_REQ
:
3766 hci_le_ltk_request_evt(hdev
, skb
);
3774 static void hci_chan_selected_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3776 struct hci_ev_channel_selected
*ev
= (void *) skb
->data
;
3777 struct hci_conn
*hcon
;
3779 BT_DBG("%s handle 0x%2.2x", hdev
->name
, ev
->phy_handle
);
3781 skb_pull(skb
, sizeof(*ev
));
3783 hcon
= hci_conn_hash_lookup_handle(hdev
, ev
->phy_handle
);
3787 amp_read_loc_assoc_final_data(hdev
, hcon
);
3790 void hci_event_packet(struct hci_dev
*hdev
, struct sk_buff
*skb
)
3792 struct hci_event_hdr
*hdr
= (void *) skb
->data
;
3793 __u8 event
= hdr
->evt
;
3795 skb_pull(skb
, HCI_EVENT_HDR_SIZE
);
3798 case HCI_EV_INQUIRY_COMPLETE
:
3799 hci_inquiry_complete_evt(hdev
, skb
);
3802 case HCI_EV_INQUIRY_RESULT
:
3803 hci_inquiry_result_evt(hdev
, skb
);
3806 case HCI_EV_CONN_COMPLETE
:
3807 hci_conn_complete_evt(hdev
, skb
);
3810 case HCI_EV_CONN_REQUEST
:
3811 hci_conn_request_evt(hdev
, skb
);
3814 case HCI_EV_DISCONN_COMPLETE
:
3815 hci_disconn_complete_evt(hdev
, skb
);
3818 case HCI_EV_AUTH_COMPLETE
:
3819 hci_auth_complete_evt(hdev
, skb
);
3822 case HCI_EV_REMOTE_NAME
:
3823 hci_remote_name_evt(hdev
, skb
);
3826 case HCI_EV_ENCRYPT_CHANGE
:
3827 hci_encrypt_change_evt(hdev
, skb
);
3830 case HCI_EV_CHANGE_LINK_KEY_COMPLETE
:
3831 hci_change_link_key_complete_evt(hdev
, skb
);
3834 case HCI_EV_REMOTE_FEATURES
:
3835 hci_remote_features_evt(hdev
, skb
);
3838 case HCI_EV_REMOTE_VERSION
:
3839 hci_remote_version_evt(hdev
, skb
);
3842 case HCI_EV_QOS_SETUP_COMPLETE
:
3843 hci_qos_setup_complete_evt(hdev
, skb
);
3846 case HCI_EV_CMD_COMPLETE
:
3847 hci_cmd_complete_evt(hdev
, skb
);
3850 case HCI_EV_CMD_STATUS
:
3851 hci_cmd_status_evt(hdev
, skb
);
3854 case HCI_EV_ROLE_CHANGE
:
3855 hci_role_change_evt(hdev
, skb
);
3858 case HCI_EV_NUM_COMP_PKTS
:
3859 hci_num_comp_pkts_evt(hdev
, skb
);
3862 case HCI_EV_MODE_CHANGE
:
3863 hci_mode_change_evt(hdev
, skb
);
3866 case HCI_EV_PIN_CODE_REQ
:
3867 hci_pin_code_request_evt(hdev
, skb
);
3870 case HCI_EV_LINK_KEY_REQ
:
3871 hci_link_key_request_evt(hdev
, skb
);
3874 case HCI_EV_LINK_KEY_NOTIFY
:
3875 hci_link_key_notify_evt(hdev
, skb
);
3878 case HCI_EV_CLOCK_OFFSET
:
3879 hci_clock_offset_evt(hdev
, skb
);
3882 case HCI_EV_PKT_TYPE_CHANGE
:
3883 hci_pkt_type_change_evt(hdev
, skb
);
3886 case HCI_EV_PSCAN_REP_MODE
:
3887 hci_pscan_rep_mode_evt(hdev
, skb
);
3890 case HCI_EV_INQUIRY_RESULT_WITH_RSSI
:
3891 hci_inquiry_result_with_rssi_evt(hdev
, skb
);
3894 case HCI_EV_REMOTE_EXT_FEATURES
:
3895 hci_remote_ext_features_evt(hdev
, skb
);
3898 case HCI_EV_SYNC_CONN_COMPLETE
:
3899 hci_sync_conn_complete_evt(hdev
, skb
);
3902 case HCI_EV_SYNC_CONN_CHANGED
:
3903 hci_sync_conn_changed_evt(hdev
, skb
);
3906 case HCI_EV_SNIFF_SUBRATE
:
3907 hci_sniff_subrate_evt(hdev
, skb
);
3910 case HCI_EV_EXTENDED_INQUIRY_RESULT
:
3911 hci_extended_inquiry_result_evt(hdev
, skb
);
3914 case HCI_EV_KEY_REFRESH_COMPLETE
:
3915 hci_key_refresh_complete_evt(hdev
, skb
);
3918 case HCI_EV_IO_CAPA_REQUEST
:
3919 hci_io_capa_request_evt(hdev
, skb
);
3922 case HCI_EV_IO_CAPA_REPLY
:
3923 hci_io_capa_reply_evt(hdev
, skb
);
3926 case HCI_EV_USER_CONFIRM_REQUEST
:
3927 hci_user_confirm_request_evt(hdev
, skb
);
3930 case HCI_EV_USER_PASSKEY_REQUEST
:
3931 hci_user_passkey_request_evt(hdev
, skb
);
3934 case HCI_EV_USER_PASSKEY_NOTIFY
:
3935 hci_user_passkey_notify_evt(hdev
, skb
);
3938 case HCI_EV_KEYPRESS_NOTIFY
:
3939 hci_keypress_notify_evt(hdev
, skb
);
3942 case HCI_EV_SIMPLE_PAIR_COMPLETE
:
3943 hci_simple_pair_complete_evt(hdev
, skb
);
3946 case HCI_EV_REMOTE_HOST_FEATURES
:
3947 hci_remote_host_features_evt(hdev
, skb
);
3950 case HCI_EV_LE_META
:
3951 hci_le_meta_evt(hdev
, skb
);
3954 case HCI_EV_CHANNEL_SELECTED
:
3955 hci_chan_selected_evt(hdev
, skb
);
3958 case HCI_EV_REMOTE_OOB_DATA_REQUEST
:
3959 hci_remote_oob_data_request_evt(hdev
, skb
);
3962 case HCI_EV_NUM_COMP_BLOCKS
:
3963 hci_num_comp_blocks_evt(hdev
, skb
);
3967 BT_DBG("%s event 0x%2.2x", hdev
->name
, event
);
3972 hdev
->stat
.evt_rx
++;