2 BlueZ - Bluetooth protocol stack for Linux
3 Copyright (c) 2000-2001, 2010, Code Aurora Forum. All rights reserved.
5 Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License version 2 as
9 published by the Free Software Foundation;
11 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
12 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
13 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
14 IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
15 CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
16 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
17 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
18 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
20 ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
21 COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
22 SOFTWARE IS DISCLAIMED.
25 /* Bluetooth HCI event handling. */
27 #include <linux/module.h>
29 #include <linux/types.h>
30 #include <linux/errno.h>
31 #include <linux/kernel.h>
32 #include <linux/slab.h>
33 #include <linux/poll.h>
34 #include <linux/fcntl.h>
35 #include <linux/init.h>
36 #include <linux/skbuff.h>
37 #include <linux/interrupt.h>
38 #include <linux/notifier.h>
41 #include <asm/system.h>
42 #include <linux/uaccess.h>
43 #include <asm/unaligned.h>
45 #include <net/bluetooth/bluetooth.h>
46 #include <net/bluetooth/hci_core.h>
48 /* Handle HCI Event packets */
50 static void hci_cc_inquiry_cancel(struct hci_dev
*hdev
, struct sk_buff
*skb
)
52 __u8 status
= *((__u8
*) skb
->data
);
54 BT_DBG("%s status 0x%x", hdev
->name
, status
);
59 clear_bit(HCI_INQUIRY
, &hdev
->flags
);
61 hci_req_complete(hdev
, HCI_OP_INQUIRY_CANCEL
, status
);
63 hci_conn_check_pending(hdev
);
66 static void hci_cc_exit_periodic_inq(struct hci_dev
*hdev
, struct sk_buff
*skb
)
68 __u8 status
= *((__u8
*) skb
->data
);
70 BT_DBG("%s status 0x%x", hdev
->name
, status
);
75 clear_bit(HCI_INQUIRY
, &hdev
->flags
);
77 hci_conn_check_pending(hdev
);
80 static void hci_cc_remote_name_req_cancel(struct hci_dev
*hdev
, struct sk_buff
*skb
)
82 BT_DBG("%s", hdev
->name
);
85 static void hci_cc_role_discovery(struct hci_dev
*hdev
, struct sk_buff
*skb
)
87 struct hci_rp_role_discovery
*rp
= (void *) skb
->data
;
88 struct hci_conn
*conn
;
90 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
97 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(rp
->handle
));
100 conn
->link_mode
&= ~HCI_LM_MASTER
;
102 conn
->link_mode
|= HCI_LM_MASTER
;
105 hci_dev_unlock(hdev
);
108 static void hci_cc_read_link_policy(struct hci_dev
*hdev
, struct sk_buff
*skb
)
110 struct hci_rp_read_link_policy
*rp
= (void *) skb
->data
;
111 struct hci_conn
*conn
;
113 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
120 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(rp
->handle
));
122 conn
->link_policy
= __le16_to_cpu(rp
->policy
);
124 hci_dev_unlock(hdev
);
127 static void hci_cc_write_link_policy(struct hci_dev
*hdev
, struct sk_buff
*skb
)
129 struct hci_rp_write_link_policy
*rp
= (void *) skb
->data
;
130 struct hci_conn
*conn
;
133 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
138 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_LINK_POLICY
);
144 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(rp
->handle
));
146 conn
->link_policy
= get_unaligned_le16(sent
+ 2);
148 hci_dev_unlock(hdev
);
151 static void hci_cc_read_def_link_policy(struct hci_dev
*hdev
, struct sk_buff
*skb
)
153 struct hci_rp_read_def_link_policy
*rp
= (void *) skb
->data
;
155 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
160 hdev
->link_policy
= __le16_to_cpu(rp
->policy
);
163 static void hci_cc_write_def_link_policy(struct hci_dev
*hdev
, struct sk_buff
*skb
)
165 __u8 status
= *((__u8
*) skb
->data
);
168 BT_DBG("%s status 0x%x", hdev
->name
, status
);
170 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_DEF_LINK_POLICY
);
175 hdev
->link_policy
= get_unaligned_le16(sent
);
177 hci_req_complete(hdev
, HCI_OP_WRITE_DEF_LINK_POLICY
, status
);
180 static void hci_cc_reset(struct hci_dev
*hdev
, struct sk_buff
*skb
)
182 __u8 status
= *((__u8
*) skb
->data
);
184 BT_DBG("%s status 0x%x", hdev
->name
, status
);
186 hci_req_complete(hdev
, HCI_OP_RESET
, status
);
189 static void hci_cc_write_local_name(struct hci_dev
*hdev
, struct sk_buff
*skb
)
191 __u8 status
= *((__u8
*) skb
->data
);
194 BT_DBG("%s status 0x%x", hdev
->name
, status
);
199 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_LOCAL_NAME
);
203 memcpy(hdev
->dev_name
, sent
, 248);
206 static void hci_cc_read_local_name(struct hci_dev
*hdev
, struct sk_buff
*skb
)
208 struct hci_rp_read_local_name
*rp
= (void *) skb
->data
;
210 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
215 memcpy(hdev
->dev_name
, rp
->name
, 248);
218 static void hci_cc_write_auth_enable(struct hci_dev
*hdev
, struct sk_buff
*skb
)
220 __u8 status
= *((__u8
*) skb
->data
);
223 BT_DBG("%s status 0x%x", hdev
->name
, status
);
225 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_AUTH_ENABLE
);
230 __u8 param
= *((__u8
*) sent
);
232 if (param
== AUTH_ENABLED
)
233 set_bit(HCI_AUTH
, &hdev
->flags
);
235 clear_bit(HCI_AUTH
, &hdev
->flags
);
238 hci_req_complete(hdev
, HCI_OP_WRITE_AUTH_ENABLE
, status
);
241 static void hci_cc_write_encrypt_mode(struct hci_dev
*hdev
, struct sk_buff
*skb
)
243 __u8 status
= *((__u8
*) skb
->data
);
246 BT_DBG("%s status 0x%x", hdev
->name
, status
);
248 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_ENCRYPT_MODE
);
253 __u8 param
= *((__u8
*) sent
);
256 set_bit(HCI_ENCRYPT
, &hdev
->flags
);
258 clear_bit(HCI_ENCRYPT
, &hdev
->flags
);
261 hci_req_complete(hdev
, HCI_OP_WRITE_ENCRYPT_MODE
, status
);
264 static void hci_cc_write_scan_enable(struct hci_dev
*hdev
, struct sk_buff
*skb
)
266 __u8 status
= *((__u8
*) skb
->data
);
269 BT_DBG("%s status 0x%x", hdev
->name
, status
);
271 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_SCAN_ENABLE
);
276 __u8 param
= *((__u8
*) sent
);
277 int old_pscan
, old_iscan
;
279 old_pscan
= test_and_clear_bit(HCI_PSCAN
, &hdev
->flags
);
280 old_iscan
= test_and_clear_bit(HCI_ISCAN
, &hdev
->flags
);
282 if (param
& SCAN_INQUIRY
) {
283 set_bit(HCI_ISCAN
, &hdev
->flags
);
285 mgmt_discoverable(hdev
->id
, 1);
286 } else if (old_iscan
)
287 mgmt_discoverable(hdev
->id
, 0);
289 if (param
& SCAN_PAGE
) {
290 set_bit(HCI_PSCAN
, &hdev
->flags
);
292 mgmt_connectable(hdev
->id
, 1);
293 } else if (old_pscan
)
294 mgmt_connectable(hdev
->id
, 0);
297 hci_req_complete(hdev
, HCI_OP_WRITE_SCAN_ENABLE
, status
);
300 static void hci_cc_read_class_of_dev(struct hci_dev
*hdev
, struct sk_buff
*skb
)
302 struct hci_rp_read_class_of_dev
*rp
= (void *) skb
->data
;
304 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
309 memcpy(hdev
->dev_class
, rp
->dev_class
, 3);
311 BT_DBG("%s class 0x%.2x%.2x%.2x", hdev
->name
,
312 hdev
->dev_class
[2], hdev
->dev_class
[1], hdev
->dev_class
[0]);
315 static void hci_cc_write_class_of_dev(struct hci_dev
*hdev
, struct sk_buff
*skb
)
317 __u8 status
= *((__u8
*) skb
->data
);
320 BT_DBG("%s status 0x%x", hdev
->name
, status
);
325 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_CLASS_OF_DEV
);
329 memcpy(hdev
->dev_class
, sent
, 3);
332 static void hci_cc_read_voice_setting(struct hci_dev
*hdev
, struct sk_buff
*skb
)
334 struct hci_rp_read_voice_setting
*rp
= (void *) skb
->data
;
337 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
342 setting
= __le16_to_cpu(rp
->voice_setting
);
344 if (hdev
->voice_setting
== setting
)
347 hdev
->voice_setting
= setting
;
349 BT_DBG("%s voice setting 0x%04x", hdev
->name
, setting
);
352 tasklet_disable(&hdev
->tx_task
);
353 hdev
->notify(hdev
, HCI_NOTIFY_VOICE_SETTING
);
354 tasklet_enable(&hdev
->tx_task
);
358 static void hci_cc_write_voice_setting(struct hci_dev
*hdev
, struct sk_buff
*skb
)
360 __u8 status
= *((__u8
*) skb
->data
);
364 BT_DBG("%s status 0x%x", hdev
->name
, status
);
369 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_VOICE_SETTING
);
373 setting
= get_unaligned_le16(sent
);
375 if (hdev
->voice_setting
== setting
)
378 hdev
->voice_setting
= setting
;
380 BT_DBG("%s voice setting 0x%04x", hdev
->name
, setting
);
383 tasklet_disable(&hdev
->tx_task
);
384 hdev
->notify(hdev
, HCI_NOTIFY_VOICE_SETTING
);
385 tasklet_enable(&hdev
->tx_task
);
389 static void hci_cc_host_buffer_size(struct hci_dev
*hdev
, struct sk_buff
*skb
)
391 __u8 status
= *((__u8
*) skb
->data
);
393 BT_DBG("%s status 0x%x", hdev
->name
, status
);
395 hci_req_complete(hdev
, HCI_OP_HOST_BUFFER_SIZE
, status
);
398 static void hci_cc_read_ssp_mode(struct hci_dev
*hdev
, struct sk_buff
*skb
)
400 struct hci_rp_read_ssp_mode
*rp
= (void *) skb
->data
;
402 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
407 hdev
->ssp_mode
= rp
->mode
;
410 static void hci_cc_write_ssp_mode(struct hci_dev
*hdev
, struct sk_buff
*skb
)
412 __u8 status
= *((__u8
*) skb
->data
);
415 BT_DBG("%s status 0x%x", hdev
->name
, status
);
420 sent
= hci_sent_cmd_data(hdev
, HCI_OP_WRITE_SSP_MODE
);
424 hdev
->ssp_mode
= *((__u8
*) sent
);
427 static u8
hci_get_inquiry_mode(struct hci_dev
*hdev
)
429 if (hdev
->features
[6] & LMP_EXT_INQ
)
432 if (hdev
->features
[3] & LMP_RSSI_INQ
)
435 if (hdev
->manufacturer
== 11 && hdev
->hci_rev
== 0x00 &&
436 hdev
->lmp_subver
== 0x0757)
439 if (hdev
->manufacturer
== 15) {
440 if (hdev
->hci_rev
== 0x03 && hdev
->lmp_subver
== 0x6963)
442 if (hdev
->hci_rev
== 0x09 && hdev
->lmp_subver
== 0x6963)
444 if (hdev
->hci_rev
== 0x00 && hdev
->lmp_subver
== 0x6965)
448 if (hdev
->manufacturer
== 31 && hdev
->hci_rev
== 0x2005 &&
449 hdev
->lmp_subver
== 0x1805)
455 static void hci_setup_inquiry_mode(struct hci_dev
*hdev
)
459 mode
= hci_get_inquiry_mode(hdev
);
461 hci_send_cmd(hdev
, HCI_OP_WRITE_INQUIRY_MODE
, 1, &mode
);
464 static void hci_setup_event_mask(struct hci_dev
*hdev
)
466 /* The second byte is 0xff instead of 0x9f (two reserved bits
467 * disabled) since a Broadcom 1.2 dongle doesn't respond to the
468 * command otherwise */
469 u8 events
[8] = { 0xff, 0xff, 0xfb, 0xff, 0x00, 0x00, 0x00, 0x00 };
471 /* Events for 1.2 and newer controllers */
472 if (hdev
->lmp_ver
> 1) {
473 events
[4] |= 0x01; /* Flow Specification Complete */
474 events
[4] |= 0x02; /* Inquiry Result with RSSI */
475 events
[4] |= 0x04; /* Read Remote Extended Features Complete */
476 events
[5] |= 0x08; /* Synchronous Connection Complete */
477 events
[5] |= 0x10; /* Synchronous Connection Changed */
480 if (hdev
->features
[3] & LMP_RSSI_INQ
)
481 events
[4] |= 0x04; /* Inquiry Result with RSSI */
483 if (hdev
->features
[5] & LMP_SNIFF_SUBR
)
484 events
[5] |= 0x20; /* Sniff Subrating */
486 if (hdev
->features
[5] & LMP_PAUSE_ENC
)
487 events
[5] |= 0x80; /* Encryption Key Refresh Complete */
489 if (hdev
->features
[6] & LMP_EXT_INQ
)
490 events
[5] |= 0x40; /* Extended Inquiry Result */
492 if (hdev
->features
[6] & LMP_NO_FLUSH
)
493 events
[7] |= 0x01; /* Enhanced Flush Complete */
495 if (hdev
->features
[7] & LMP_LSTO
)
496 events
[6] |= 0x80; /* Link Supervision Timeout Changed */
498 if (hdev
->features
[6] & LMP_SIMPLE_PAIR
) {
499 events
[6] |= 0x01; /* IO Capability Request */
500 events
[6] |= 0x02; /* IO Capability Response */
501 events
[6] |= 0x04; /* User Confirmation Request */
502 events
[6] |= 0x08; /* User Passkey Request */
503 events
[6] |= 0x10; /* Remote OOB Data Request */
504 events
[6] |= 0x20; /* Simple Pairing Complete */
505 events
[7] |= 0x04; /* User Passkey Notification */
506 events
[7] |= 0x08; /* Keypress Notification */
507 events
[7] |= 0x10; /* Remote Host Supported
508 * Features Notification */
511 if (hdev
->features
[4] & LMP_LE
)
512 events
[7] |= 0x20; /* LE Meta-Event */
514 hci_send_cmd(hdev
, HCI_OP_SET_EVENT_MASK
, sizeof(events
), events
);
517 static void hci_setup(struct hci_dev
*hdev
)
519 hci_setup_event_mask(hdev
);
521 if (hdev
->lmp_ver
> 1)
522 hci_send_cmd(hdev
, HCI_OP_READ_LOCAL_COMMANDS
, 0, NULL
);
524 if (hdev
->features
[6] & LMP_SIMPLE_PAIR
) {
526 hci_send_cmd(hdev
, HCI_OP_WRITE_SSP_MODE
, sizeof(mode
), &mode
);
529 if (hdev
->features
[3] & LMP_RSSI_INQ
)
530 hci_setup_inquiry_mode(hdev
);
532 if (hdev
->features
[7] & LMP_INQ_TX_PWR
)
533 hci_send_cmd(hdev
, HCI_OP_READ_INQ_RSP_TX_POWER
, 0, NULL
);
536 static void hci_cc_read_local_version(struct hci_dev
*hdev
, struct sk_buff
*skb
)
538 struct hci_rp_read_local_version
*rp
= (void *) skb
->data
;
540 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
545 hdev
->hci_ver
= rp
->hci_ver
;
546 hdev
->hci_rev
= __le16_to_cpu(rp
->hci_rev
);
547 hdev
->lmp_ver
= rp
->lmp_ver
;
548 hdev
->manufacturer
= __le16_to_cpu(rp
->manufacturer
);
549 hdev
->lmp_subver
= __le16_to_cpu(rp
->lmp_subver
);
551 BT_DBG("%s manufacturer %d hci ver %d:%d", hdev
->name
,
553 hdev
->hci_ver
, hdev
->hci_rev
);
555 if (test_bit(HCI_INIT
, &hdev
->flags
))
559 static void hci_setup_link_policy(struct hci_dev
*hdev
)
563 if (hdev
->features
[0] & LMP_RSWITCH
)
564 link_policy
|= HCI_LP_RSWITCH
;
565 if (hdev
->features
[0] & LMP_HOLD
)
566 link_policy
|= HCI_LP_HOLD
;
567 if (hdev
->features
[0] & LMP_SNIFF
)
568 link_policy
|= HCI_LP_SNIFF
;
569 if (hdev
->features
[1] & LMP_PARK
)
570 link_policy
|= HCI_LP_PARK
;
572 link_policy
= cpu_to_le16(link_policy
);
573 hci_send_cmd(hdev
, HCI_OP_WRITE_DEF_LINK_POLICY
,
574 sizeof(link_policy
), &link_policy
);
577 static void hci_cc_read_local_commands(struct hci_dev
*hdev
, struct sk_buff
*skb
)
579 struct hci_rp_read_local_commands
*rp
= (void *) skb
->data
;
581 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
586 memcpy(hdev
->commands
, rp
->commands
, sizeof(hdev
->commands
));
588 if (test_bit(HCI_INIT
, &hdev
->flags
) && (hdev
->commands
[5] & 0x10))
589 hci_setup_link_policy(hdev
);
592 hci_req_complete(hdev
, HCI_OP_READ_LOCAL_COMMANDS
, rp
->status
);
595 static void hci_cc_read_local_features(struct hci_dev
*hdev
, struct sk_buff
*skb
)
597 struct hci_rp_read_local_features
*rp
= (void *) skb
->data
;
599 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
604 memcpy(hdev
->features
, rp
->features
, 8);
606 /* Adjust default settings according to features
607 * supported by device. */
609 if (hdev
->features
[0] & LMP_3SLOT
)
610 hdev
->pkt_type
|= (HCI_DM3
| HCI_DH3
);
612 if (hdev
->features
[0] & LMP_5SLOT
)
613 hdev
->pkt_type
|= (HCI_DM5
| HCI_DH5
);
615 if (hdev
->features
[1] & LMP_HV2
) {
616 hdev
->pkt_type
|= (HCI_HV2
);
617 hdev
->esco_type
|= (ESCO_HV2
);
620 if (hdev
->features
[1] & LMP_HV3
) {
621 hdev
->pkt_type
|= (HCI_HV3
);
622 hdev
->esco_type
|= (ESCO_HV3
);
625 if (hdev
->features
[3] & LMP_ESCO
)
626 hdev
->esco_type
|= (ESCO_EV3
);
628 if (hdev
->features
[4] & LMP_EV4
)
629 hdev
->esco_type
|= (ESCO_EV4
);
631 if (hdev
->features
[4] & LMP_EV5
)
632 hdev
->esco_type
|= (ESCO_EV5
);
634 if (hdev
->features
[5] & LMP_EDR_ESCO_2M
)
635 hdev
->esco_type
|= (ESCO_2EV3
);
637 if (hdev
->features
[5] & LMP_EDR_ESCO_3M
)
638 hdev
->esco_type
|= (ESCO_3EV3
);
640 if (hdev
->features
[5] & LMP_EDR_3S_ESCO
)
641 hdev
->esco_type
|= (ESCO_2EV5
| ESCO_3EV5
);
643 BT_DBG("%s features 0x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x", hdev
->name
,
644 hdev
->features
[0], hdev
->features
[1],
645 hdev
->features
[2], hdev
->features
[3],
646 hdev
->features
[4], hdev
->features
[5],
647 hdev
->features
[6], hdev
->features
[7]);
650 static void hci_cc_read_buffer_size(struct hci_dev
*hdev
, struct sk_buff
*skb
)
652 struct hci_rp_read_buffer_size
*rp
= (void *) skb
->data
;
654 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
659 hdev
->acl_mtu
= __le16_to_cpu(rp
->acl_mtu
);
660 hdev
->sco_mtu
= rp
->sco_mtu
;
661 hdev
->acl_pkts
= __le16_to_cpu(rp
->acl_max_pkt
);
662 hdev
->sco_pkts
= __le16_to_cpu(rp
->sco_max_pkt
);
664 if (test_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE
, &hdev
->quirks
)) {
669 hdev
->acl_cnt
= hdev
->acl_pkts
;
670 hdev
->sco_cnt
= hdev
->sco_pkts
;
672 BT_DBG("%s acl mtu %d:%d sco mtu %d:%d", hdev
->name
,
673 hdev
->acl_mtu
, hdev
->acl_pkts
,
674 hdev
->sco_mtu
, hdev
->sco_pkts
);
677 static void hci_cc_read_bd_addr(struct hci_dev
*hdev
, struct sk_buff
*skb
)
679 struct hci_rp_read_bd_addr
*rp
= (void *) skb
->data
;
681 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
684 bacpy(&hdev
->bdaddr
, &rp
->bdaddr
);
686 hci_req_complete(hdev
, HCI_OP_READ_BD_ADDR
, rp
->status
);
689 static void hci_cc_write_ca_timeout(struct hci_dev
*hdev
, struct sk_buff
*skb
)
691 __u8 status
= *((__u8
*) skb
->data
);
693 BT_DBG("%s status 0x%x", hdev
->name
, status
);
695 hci_req_complete(hdev
, HCI_OP_WRITE_CA_TIMEOUT
, status
);
698 static void hci_cc_delete_stored_link_key(struct hci_dev
*hdev
,
701 __u8 status
= *((__u8
*) skb
->data
);
703 BT_DBG("%s status 0x%x", hdev
->name
, status
);
705 hci_req_complete(hdev
, HCI_OP_DELETE_STORED_LINK_KEY
, status
);
708 static void hci_cc_set_event_mask(struct hci_dev
*hdev
, struct sk_buff
*skb
)
710 __u8 status
= *((__u8
*) skb
->data
);
712 BT_DBG("%s status 0x%x", hdev
->name
, status
);
714 hci_req_complete(hdev
, HCI_OP_SET_EVENT_MASK
, status
);
717 static void hci_cc_write_inquiry_mode(struct hci_dev
*hdev
,
720 __u8 status
= *((__u8
*) skb
->data
);
722 BT_DBG("%s status 0x%x", hdev
->name
, status
);
724 hci_req_complete(hdev
, HCI_OP_WRITE_INQUIRY_MODE
, status
);
727 static void hci_cc_read_inq_rsp_tx_power(struct hci_dev
*hdev
,
730 __u8 status
= *((__u8
*) skb
->data
);
732 BT_DBG("%s status 0x%x", hdev
->name
, status
);
734 hci_req_complete(hdev
, HCI_OP_READ_INQ_RSP_TX_POWER
, status
);
737 static void hci_cc_set_event_flt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
739 __u8 status
= *((__u8
*) skb
->data
);
741 BT_DBG("%s status 0x%x", hdev
->name
, status
);
743 hci_req_complete(hdev
, HCI_OP_SET_EVENT_FLT
, status
);
746 static void hci_cc_pin_code_reply(struct hci_dev
*hdev
, struct sk_buff
*skb
)
748 struct hci_rp_pin_code_reply
*rp
= (void *) skb
->data
;
749 struct hci_cp_pin_code_reply
*cp
;
750 struct hci_conn
*conn
;
752 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
754 if (test_bit(HCI_MGMT
, &hdev
->flags
))
755 mgmt_pin_code_reply_complete(hdev
->id
, &rp
->bdaddr
, rp
->status
);
760 cp
= hci_sent_cmd_data(hdev
, HCI_OP_PIN_CODE_REPLY
);
764 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &cp
->bdaddr
);
766 conn
->pin_length
= cp
->pin_len
;
769 static void hci_cc_pin_code_neg_reply(struct hci_dev
*hdev
, struct sk_buff
*skb
)
771 struct hci_rp_pin_code_neg_reply
*rp
= (void *) skb
->data
;
773 BT_DBG("%s status 0x%x", hdev
->name
, rp
->status
);
775 if (test_bit(HCI_MGMT
, &hdev
->flags
))
776 mgmt_pin_code_neg_reply_complete(hdev
->id
, &rp
->bdaddr
,
780 static inline void hci_cs_inquiry(struct hci_dev
*hdev
, __u8 status
)
782 BT_DBG("%s status 0x%x", hdev
->name
, status
);
785 hci_req_complete(hdev
, HCI_OP_INQUIRY
, status
);
787 hci_conn_check_pending(hdev
);
789 set_bit(HCI_INQUIRY
, &hdev
->flags
);
792 static inline void hci_cs_create_conn(struct hci_dev
*hdev
, __u8 status
)
794 struct hci_cp_create_conn
*cp
;
795 struct hci_conn
*conn
;
797 BT_DBG("%s status 0x%x", hdev
->name
, status
);
799 cp
= hci_sent_cmd_data(hdev
, HCI_OP_CREATE_CONN
);
805 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &cp
->bdaddr
);
807 BT_DBG("%s bdaddr %s conn %p", hdev
->name
, batostr(&cp
->bdaddr
), conn
);
810 if (conn
&& conn
->state
== BT_CONNECT
) {
811 if (status
!= 0x0c || conn
->attempt
> 2) {
812 conn
->state
= BT_CLOSED
;
813 hci_proto_connect_cfm(conn
, status
);
816 conn
->state
= BT_CONNECT2
;
820 conn
= hci_conn_add(hdev
, ACL_LINK
, &cp
->bdaddr
);
823 conn
->link_mode
|= HCI_LM_MASTER
;
825 BT_ERR("No memory for new connection");
829 hci_dev_unlock(hdev
);
832 static void hci_cs_add_sco(struct hci_dev
*hdev
, __u8 status
)
834 struct hci_cp_add_sco
*cp
;
835 struct hci_conn
*acl
, *sco
;
838 BT_DBG("%s status 0x%x", hdev
->name
, status
);
843 cp
= hci_sent_cmd_data(hdev
, HCI_OP_ADD_SCO
);
847 handle
= __le16_to_cpu(cp
->handle
);
849 BT_DBG("%s handle %d", hdev
->name
, handle
);
853 acl
= hci_conn_hash_lookup_handle(hdev
, handle
);
854 if (acl
&& (sco
= acl
->link
)) {
855 sco
->state
= BT_CLOSED
;
857 hci_proto_connect_cfm(sco
, status
);
861 hci_dev_unlock(hdev
);
864 static void hci_cs_auth_requested(struct hci_dev
*hdev
, __u8 status
)
866 struct hci_cp_auth_requested
*cp
;
867 struct hci_conn
*conn
;
869 BT_DBG("%s status 0x%x", hdev
->name
, status
);
874 cp
= hci_sent_cmd_data(hdev
, HCI_OP_AUTH_REQUESTED
);
880 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
882 if (conn
->state
== BT_CONFIG
) {
883 hci_proto_connect_cfm(conn
, status
);
888 hci_dev_unlock(hdev
);
891 static void hci_cs_set_conn_encrypt(struct hci_dev
*hdev
, __u8 status
)
893 struct hci_cp_set_conn_encrypt
*cp
;
894 struct hci_conn
*conn
;
896 BT_DBG("%s status 0x%x", hdev
->name
, status
);
901 cp
= hci_sent_cmd_data(hdev
, HCI_OP_SET_CONN_ENCRYPT
);
907 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
909 if (conn
->state
== BT_CONFIG
) {
910 hci_proto_connect_cfm(conn
, status
);
915 hci_dev_unlock(hdev
);
918 static int hci_outgoing_auth_needed(struct hci_dev
*hdev
,
919 struct hci_conn
*conn
)
921 if (conn
->state
!= BT_CONFIG
|| !conn
->out
)
924 if (conn
->pending_sec_level
== BT_SECURITY_SDP
)
927 /* Only request authentication for SSP connections or non-SSP
928 * devices with sec_level HIGH */
929 if (!(hdev
->ssp_mode
> 0 && conn
->ssp_mode
> 0) &&
930 conn
->pending_sec_level
!= BT_SECURITY_HIGH
)
936 static void hci_cs_remote_name_req(struct hci_dev
*hdev
, __u8 status
)
938 struct hci_cp_remote_name_req
*cp
;
939 struct hci_conn
*conn
;
941 BT_DBG("%s status 0x%x", hdev
->name
, status
);
943 /* If successful wait for the name req complete event before
944 * checking for the need to do authentication */
948 cp
= hci_sent_cmd_data(hdev
, HCI_OP_REMOTE_NAME_REQ
);
954 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &cp
->bdaddr
);
955 if (conn
&& hci_outgoing_auth_needed(hdev
, conn
)) {
956 struct hci_cp_auth_requested cp
;
957 cp
.handle
= __cpu_to_le16(conn
->handle
);
958 hci_send_cmd(hdev
, HCI_OP_AUTH_REQUESTED
, sizeof(cp
), &cp
);
961 hci_dev_unlock(hdev
);
964 static void hci_cs_read_remote_features(struct hci_dev
*hdev
, __u8 status
)
966 struct hci_cp_read_remote_features
*cp
;
967 struct hci_conn
*conn
;
969 BT_DBG("%s status 0x%x", hdev
->name
, status
);
974 cp
= hci_sent_cmd_data(hdev
, HCI_OP_READ_REMOTE_FEATURES
);
980 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
982 if (conn
->state
== BT_CONFIG
) {
983 hci_proto_connect_cfm(conn
, status
);
988 hci_dev_unlock(hdev
);
991 static void hci_cs_read_remote_ext_features(struct hci_dev
*hdev
, __u8 status
)
993 struct hci_cp_read_remote_ext_features
*cp
;
994 struct hci_conn
*conn
;
996 BT_DBG("%s status 0x%x", hdev
->name
, status
);
1001 cp
= hci_sent_cmd_data(hdev
, HCI_OP_READ_REMOTE_EXT_FEATURES
);
1007 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1009 if (conn
->state
== BT_CONFIG
) {
1010 hci_proto_connect_cfm(conn
, status
);
1015 hci_dev_unlock(hdev
);
1018 static void hci_cs_setup_sync_conn(struct hci_dev
*hdev
, __u8 status
)
1020 struct hci_cp_setup_sync_conn
*cp
;
1021 struct hci_conn
*acl
, *sco
;
1024 BT_DBG("%s status 0x%x", hdev
->name
, status
);
1029 cp
= hci_sent_cmd_data(hdev
, HCI_OP_SETUP_SYNC_CONN
);
1033 handle
= __le16_to_cpu(cp
->handle
);
1035 BT_DBG("%s handle %d", hdev
->name
, handle
);
1039 acl
= hci_conn_hash_lookup_handle(hdev
, handle
);
1040 if (acl
&& (sco
= acl
->link
)) {
1041 sco
->state
= BT_CLOSED
;
1043 hci_proto_connect_cfm(sco
, status
);
1047 hci_dev_unlock(hdev
);
1050 static void hci_cs_sniff_mode(struct hci_dev
*hdev
, __u8 status
)
1052 struct hci_cp_sniff_mode
*cp
;
1053 struct hci_conn
*conn
;
1055 BT_DBG("%s status 0x%x", hdev
->name
, status
);
1060 cp
= hci_sent_cmd_data(hdev
, HCI_OP_SNIFF_MODE
);
1066 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1068 clear_bit(HCI_CONN_MODE_CHANGE_PEND
, &conn
->pend
);
1070 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND
, &conn
->pend
))
1071 hci_sco_setup(conn
, status
);
1074 hci_dev_unlock(hdev
);
1077 static void hci_cs_exit_sniff_mode(struct hci_dev
*hdev
, __u8 status
)
1079 struct hci_cp_exit_sniff_mode
*cp
;
1080 struct hci_conn
*conn
;
1082 BT_DBG("%s status 0x%x", hdev
->name
, status
);
1087 cp
= hci_sent_cmd_data(hdev
, HCI_OP_EXIT_SNIFF_MODE
);
1093 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(cp
->handle
));
1095 clear_bit(HCI_CONN_MODE_CHANGE_PEND
, &conn
->pend
);
1097 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND
, &conn
->pend
))
1098 hci_sco_setup(conn
, status
);
1101 hci_dev_unlock(hdev
);
1104 static inline void hci_inquiry_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1106 __u8 status
= *((__u8
*) skb
->data
);
1108 BT_DBG("%s status %d", hdev
->name
, status
);
1110 clear_bit(HCI_INQUIRY
, &hdev
->flags
);
1112 hci_req_complete(hdev
, HCI_OP_INQUIRY
, status
);
1114 hci_conn_check_pending(hdev
);
1117 static inline void hci_inquiry_result_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1119 struct inquiry_data data
;
1120 struct inquiry_info
*info
= (void *) (skb
->data
+ 1);
1121 int num_rsp
= *((__u8
*) skb
->data
);
1123 BT_DBG("%s num_rsp %d", hdev
->name
, num_rsp
);
1130 for (; num_rsp
; num_rsp
--) {
1131 bacpy(&data
.bdaddr
, &info
->bdaddr
);
1132 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
1133 data
.pscan_period_mode
= info
->pscan_period_mode
;
1134 data
.pscan_mode
= info
->pscan_mode
;
1135 memcpy(data
.dev_class
, info
->dev_class
, 3);
1136 data
.clock_offset
= info
->clock_offset
;
1138 data
.ssp_mode
= 0x00;
1140 hci_inquiry_cache_update(hdev
, &data
);
1143 hci_dev_unlock(hdev
);
1146 static inline void hci_conn_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1148 struct hci_ev_conn_complete
*ev
= (void *) skb
->data
;
1149 struct hci_conn
*conn
;
1151 BT_DBG("%s", hdev
->name
);
1155 conn
= hci_conn_hash_lookup_ba(hdev
, ev
->link_type
, &ev
->bdaddr
);
1157 if (ev
->link_type
!= SCO_LINK
)
1160 conn
= hci_conn_hash_lookup_ba(hdev
, ESCO_LINK
, &ev
->bdaddr
);
1164 conn
->type
= SCO_LINK
;
1168 conn
->handle
= __le16_to_cpu(ev
->handle
);
1170 if (conn
->type
== ACL_LINK
) {
1171 conn
->state
= BT_CONFIG
;
1172 hci_conn_hold(conn
);
1173 conn
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
1174 mgmt_connected(hdev
->id
, &ev
->bdaddr
);
1176 conn
->state
= BT_CONNECTED
;
1178 hci_conn_hold_device(conn
);
1179 hci_conn_add_sysfs(conn
);
1181 if (test_bit(HCI_AUTH
, &hdev
->flags
))
1182 conn
->link_mode
|= HCI_LM_AUTH
;
1184 if (test_bit(HCI_ENCRYPT
, &hdev
->flags
))
1185 conn
->link_mode
|= HCI_LM_ENCRYPT
;
1187 /* Get remote features */
1188 if (conn
->type
== ACL_LINK
) {
1189 struct hci_cp_read_remote_features cp
;
1190 cp
.handle
= ev
->handle
;
1191 hci_send_cmd(hdev
, HCI_OP_READ_REMOTE_FEATURES
,
1195 /* Set packet type for incoming connection */
1196 if (!conn
->out
&& hdev
->hci_ver
< 3) {
1197 struct hci_cp_change_conn_ptype cp
;
1198 cp
.handle
= ev
->handle
;
1199 cp
.pkt_type
= cpu_to_le16(conn
->pkt_type
);
1200 hci_send_cmd(hdev
, HCI_OP_CHANGE_CONN_PTYPE
,
1204 conn
->state
= BT_CLOSED
;
1205 if (conn
->type
== ACL_LINK
)
1206 mgmt_connect_failed(hdev
->id
, &ev
->bdaddr
, ev
->status
);
1209 if (conn
->type
== ACL_LINK
)
1210 hci_sco_setup(conn
, ev
->status
);
1213 hci_proto_connect_cfm(conn
, ev
->status
);
1215 } else if (ev
->link_type
!= ACL_LINK
)
1216 hci_proto_connect_cfm(conn
, ev
->status
);
1219 hci_dev_unlock(hdev
);
1221 hci_conn_check_pending(hdev
);
1224 static inline void hci_conn_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1226 struct hci_ev_conn_request
*ev
= (void *) skb
->data
;
1227 int mask
= hdev
->link_mode
;
1229 BT_DBG("%s bdaddr %s type 0x%x", hdev
->name
,
1230 batostr(&ev
->bdaddr
), ev
->link_type
);
1232 mask
|= hci_proto_connect_ind(hdev
, &ev
->bdaddr
, ev
->link_type
);
1234 if ((mask
& HCI_LM_ACCEPT
) && !hci_blacklist_lookup(hdev
, &ev
->bdaddr
)) {
1235 /* Connection accepted */
1236 struct inquiry_entry
*ie
;
1237 struct hci_conn
*conn
;
1241 ie
= hci_inquiry_cache_lookup(hdev
, &ev
->bdaddr
);
1243 memcpy(ie
->data
.dev_class
, ev
->dev_class
, 3);
1245 conn
= hci_conn_hash_lookup_ba(hdev
, ev
->link_type
, &ev
->bdaddr
);
1247 conn
= hci_conn_add(hdev
, ev
->link_type
, &ev
->bdaddr
);
1249 BT_ERR("No memory for new connection");
1250 hci_dev_unlock(hdev
);
1255 memcpy(conn
->dev_class
, ev
->dev_class
, 3);
1256 conn
->state
= BT_CONNECT
;
1258 hci_dev_unlock(hdev
);
1260 if (ev
->link_type
== ACL_LINK
|| !lmp_esco_capable(hdev
)) {
1261 struct hci_cp_accept_conn_req cp
;
1263 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
1265 if (lmp_rswitch_capable(hdev
) && (mask
& HCI_LM_MASTER
))
1266 cp
.role
= 0x00; /* Become master */
1268 cp
.role
= 0x01; /* Remain slave */
1270 hci_send_cmd(hdev
, HCI_OP_ACCEPT_CONN_REQ
,
1273 struct hci_cp_accept_sync_conn_req cp
;
1275 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
1276 cp
.pkt_type
= cpu_to_le16(conn
->pkt_type
);
1278 cp
.tx_bandwidth
= cpu_to_le32(0x00001f40);
1279 cp
.rx_bandwidth
= cpu_to_le32(0x00001f40);
1280 cp
.max_latency
= cpu_to_le16(0xffff);
1281 cp
.content_format
= cpu_to_le16(hdev
->voice_setting
);
1282 cp
.retrans_effort
= 0xff;
1284 hci_send_cmd(hdev
, HCI_OP_ACCEPT_SYNC_CONN_REQ
,
1288 /* Connection rejected */
1289 struct hci_cp_reject_conn_req cp
;
1291 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
1293 hci_send_cmd(hdev
, HCI_OP_REJECT_CONN_REQ
, sizeof(cp
), &cp
);
1297 static inline void hci_disconn_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1299 struct hci_ev_disconn_complete
*ev
= (void *) skb
->data
;
1300 struct hci_conn
*conn
;
1302 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
1305 mgmt_disconnect_failed(hdev
->id
);
1311 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1315 conn
->state
= BT_CLOSED
;
1317 if (conn
->type
== ACL_LINK
)
1318 mgmt_disconnected(hdev
->id
, &conn
->dst
);
1320 hci_proto_disconn_cfm(conn
, ev
->reason
);
1324 hci_dev_unlock(hdev
);
1327 static inline void hci_auth_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1329 struct hci_ev_auth_complete
*ev
= (void *) skb
->data
;
1330 struct hci_conn
*conn
;
1332 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
1336 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1339 conn
->link_mode
|= HCI_LM_AUTH
;
1340 conn
->sec_level
= conn
->pending_sec_level
;
1342 conn
->sec_level
= BT_SECURITY_LOW
;
1344 clear_bit(HCI_CONN_AUTH_PEND
, &conn
->pend
);
1346 if (conn
->state
== BT_CONFIG
) {
1347 if (!ev
->status
&& hdev
->ssp_mode
> 0 &&
1348 conn
->ssp_mode
> 0) {
1349 struct hci_cp_set_conn_encrypt cp
;
1350 cp
.handle
= ev
->handle
;
1352 hci_send_cmd(hdev
, HCI_OP_SET_CONN_ENCRYPT
,
1355 conn
->state
= BT_CONNECTED
;
1356 hci_proto_connect_cfm(conn
, ev
->status
);
1360 hci_auth_cfm(conn
, ev
->status
);
1362 hci_conn_hold(conn
);
1363 conn
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
1367 if (test_bit(HCI_CONN_ENCRYPT_PEND
, &conn
->pend
)) {
1369 struct hci_cp_set_conn_encrypt cp
;
1370 cp
.handle
= ev
->handle
;
1372 hci_send_cmd(hdev
, HCI_OP_SET_CONN_ENCRYPT
,
1375 clear_bit(HCI_CONN_ENCRYPT_PEND
, &conn
->pend
);
1376 hci_encrypt_cfm(conn
, ev
->status
, 0x00);
1381 hci_dev_unlock(hdev
);
1384 static inline void hci_remote_name_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1386 struct hci_ev_remote_name
*ev
= (void *) skb
->data
;
1387 struct hci_conn
*conn
;
1389 BT_DBG("%s", hdev
->name
);
1391 hci_conn_check_pending(hdev
);
1395 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
1396 if (conn
&& hci_outgoing_auth_needed(hdev
, conn
)) {
1397 struct hci_cp_auth_requested cp
;
1398 cp
.handle
= __cpu_to_le16(conn
->handle
);
1399 hci_send_cmd(hdev
, HCI_OP_AUTH_REQUESTED
, sizeof(cp
), &cp
);
1402 hci_dev_unlock(hdev
);
1405 static inline void hci_encrypt_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1407 struct hci_ev_encrypt_change
*ev
= (void *) skb
->data
;
1408 struct hci_conn
*conn
;
1410 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
1414 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1418 /* Encryption implies authentication */
1419 conn
->link_mode
|= HCI_LM_AUTH
;
1420 conn
->link_mode
|= HCI_LM_ENCRYPT
;
1422 conn
->link_mode
&= ~HCI_LM_ENCRYPT
;
1425 clear_bit(HCI_CONN_ENCRYPT_PEND
, &conn
->pend
);
1427 if (conn
->state
== BT_CONFIG
) {
1429 conn
->state
= BT_CONNECTED
;
1431 hci_proto_connect_cfm(conn
, ev
->status
);
1434 hci_encrypt_cfm(conn
, ev
->status
, ev
->encrypt
);
1437 hci_dev_unlock(hdev
);
1440 static inline void hci_change_link_key_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1442 struct hci_ev_change_link_key_complete
*ev
= (void *) skb
->data
;
1443 struct hci_conn
*conn
;
1445 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
1449 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1452 conn
->link_mode
|= HCI_LM_SECURE
;
1454 clear_bit(HCI_CONN_AUTH_PEND
, &conn
->pend
);
1456 hci_key_change_cfm(conn
, ev
->status
);
1459 hci_dev_unlock(hdev
);
1462 static inline void hci_remote_features_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1464 struct hci_ev_remote_features
*ev
= (void *) skb
->data
;
1465 struct hci_conn
*conn
;
1467 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
1471 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1476 memcpy(conn
->features
, ev
->features
, 8);
1478 if (conn
->state
!= BT_CONFIG
)
1481 if (!ev
->status
&& lmp_ssp_capable(hdev
) && lmp_ssp_capable(conn
)) {
1482 struct hci_cp_read_remote_ext_features cp
;
1483 cp
.handle
= ev
->handle
;
1485 hci_send_cmd(hdev
, HCI_OP_READ_REMOTE_EXT_FEATURES
,
1491 struct hci_cp_remote_name_req cp
;
1492 memset(&cp
, 0, sizeof(cp
));
1493 bacpy(&cp
.bdaddr
, &conn
->dst
);
1494 cp
.pscan_rep_mode
= 0x02;
1495 hci_send_cmd(hdev
, HCI_OP_REMOTE_NAME_REQ
, sizeof(cp
), &cp
);
1498 if (!hci_outgoing_auth_needed(hdev
, conn
)) {
1499 conn
->state
= BT_CONNECTED
;
1500 hci_proto_connect_cfm(conn
, ev
->status
);
1505 hci_dev_unlock(hdev
);
1508 static inline void hci_remote_version_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1510 BT_DBG("%s", hdev
->name
);
1513 static inline void hci_qos_setup_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1515 BT_DBG("%s", hdev
->name
);
1518 static inline void hci_cmd_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1520 struct hci_ev_cmd_complete
*ev
= (void *) skb
->data
;
1523 skb_pull(skb
, sizeof(*ev
));
1525 opcode
= __le16_to_cpu(ev
->opcode
);
1528 case HCI_OP_INQUIRY_CANCEL
:
1529 hci_cc_inquiry_cancel(hdev
, skb
);
1532 case HCI_OP_EXIT_PERIODIC_INQ
:
1533 hci_cc_exit_periodic_inq(hdev
, skb
);
1536 case HCI_OP_REMOTE_NAME_REQ_CANCEL
:
1537 hci_cc_remote_name_req_cancel(hdev
, skb
);
1540 case HCI_OP_ROLE_DISCOVERY
:
1541 hci_cc_role_discovery(hdev
, skb
);
1544 case HCI_OP_READ_LINK_POLICY
:
1545 hci_cc_read_link_policy(hdev
, skb
);
1548 case HCI_OP_WRITE_LINK_POLICY
:
1549 hci_cc_write_link_policy(hdev
, skb
);
1552 case HCI_OP_READ_DEF_LINK_POLICY
:
1553 hci_cc_read_def_link_policy(hdev
, skb
);
1556 case HCI_OP_WRITE_DEF_LINK_POLICY
:
1557 hci_cc_write_def_link_policy(hdev
, skb
);
1561 hci_cc_reset(hdev
, skb
);
1564 case HCI_OP_WRITE_LOCAL_NAME
:
1565 hci_cc_write_local_name(hdev
, skb
);
1568 case HCI_OP_READ_LOCAL_NAME
:
1569 hci_cc_read_local_name(hdev
, skb
);
1572 case HCI_OP_WRITE_AUTH_ENABLE
:
1573 hci_cc_write_auth_enable(hdev
, skb
);
1576 case HCI_OP_WRITE_ENCRYPT_MODE
:
1577 hci_cc_write_encrypt_mode(hdev
, skb
);
1580 case HCI_OP_WRITE_SCAN_ENABLE
:
1581 hci_cc_write_scan_enable(hdev
, skb
);
1584 case HCI_OP_READ_CLASS_OF_DEV
:
1585 hci_cc_read_class_of_dev(hdev
, skb
);
1588 case HCI_OP_WRITE_CLASS_OF_DEV
:
1589 hci_cc_write_class_of_dev(hdev
, skb
);
1592 case HCI_OP_READ_VOICE_SETTING
:
1593 hci_cc_read_voice_setting(hdev
, skb
);
1596 case HCI_OP_WRITE_VOICE_SETTING
:
1597 hci_cc_write_voice_setting(hdev
, skb
);
1600 case HCI_OP_HOST_BUFFER_SIZE
:
1601 hci_cc_host_buffer_size(hdev
, skb
);
1604 case HCI_OP_READ_SSP_MODE
:
1605 hci_cc_read_ssp_mode(hdev
, skb
);
1608 case HCI_OP_WRITE_SSP_MODE
:
1609 hci_cc_write_ssp_mode(hdev
, skb
);
1612 case HCI_OP_READ_LOCAL_VERSION
:
1613 hci_cc_read_local_version(hdev
, skb
);
1616 case HCI_OP_READ_LOCAL_COMMANDS
:
1617 hci_cc_read_local_commands(hdev
, skb
);
1620 case HCI_OP_READ_LOCAL_FEATURES
:
1621 hci_cc_read_local_features(hdev
, skb
);
1624 case HCI_OP_READ_BUFFER_SIZE
:
1625 hci_cc_read_buffer_size(hdev
, skb
);
1628 case HCI_OP_READ_BD_ADDR
:
1629 hci_cc_read_bd_addr(hdev
, skb
);
1632 case HCI_OP_WRITE_CA_TIMEOUT
:
1633 hci_cc_write_ca_timeout(hdev
, skb
);
1636 case HCI_OP_DELETE_STORED_LINK_KEY
:
1637 hci_cc_delete_stored_link_key(hdev
, skb
);
1640 case HCI_OP_SET_EVENT_MASK
:
1641 hci_cc_set_event_mask(hdev
, skb
);
1644 case HCI_OP_WRITE_INQUIRY_MODE
:
1645 hci_cc_write_inquiry_mode(hdev
, skb
);
1648 case HCI_OP_READ_INQ_RSP_TX_POWER
:
1649 hci_cc_read_inq_rsp_tx_power(hdev
, skb
);
1652 case HCI_OP_SET_EVENT_FLT
:
1653 hci_cc_set_event_flt(hdev
, skb
);
1656 case HCI_OP_PIN_CODE_REPLY
:
1657 hci_cc_pin_code_reply(hdev
, skb
);
1660 case HCI_OP_PIN_CODE_NEG_REPLY
:
1661 hci_cc_pin_code_neg_reply(hdev
, skb
);
1665 BT_DBG("%s opcode 0x%x", hdev
->name
, opcode
);
1670 atomic_set(&hdev
->cmd_cnt
, 1);
1671 if (!skb_queue_empty(&hdev
->cmd_q
))
1672 tasklet_schedule(&hdev
->cmd_task
);
1676 static inline void hci_cmd_status_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1678 struct hci_ev_cmd_status
*ev
= (void *) skb
->data
;
1681 skb_pull(skb
, sizeof(*ev
));
1683 opcode
= __le16_to_cpu(ev
->opcode
);
1686 case HCI_OP_INQUIRY
:
1687 hci_cs_inquiry(hdev
, ev
->status
);
1690 case HCI_OP_CREATE_CONN
:
1691 hci_cs_create_conn(hdev
, ev
->status
);
1694 case HCI_OP_ADD_SCO
:
1695 hci_cs_add_sco(hdev
, ev
->status
);
1698 case HCI_OP_AUTH_REQUESTED
:
1699 hci_cs_auth_requested(hdev
, ev
->status
);
1702 case HCI_OP_SET_CONN_ENCRYPT
:
1703 hci_cs_set_conn_encrypt(hdev
, ev
->status
);
1706 case HCI_OP_REMOTE_NAME_REQ
:
1707 hci_cs_remote_name_req(hdev
, ev
->status
);
1710 case HCI_OP_READ_REMOTE_FEATURES
:
1711 hci_cs_read_remote_features(hdev
, ev
->status
);
1714 case HCI_OP_READ_REMOTE_EXT_FEATURES
:
1715 hci_cs_read_remote_ext_features(hdev
, ev
->status
);
1718 case HCI_OP_SETUP_SYNC_CONN
:
1719 hci_cs_setup_sync_conn(hdev
, ev
->status
);
1722 case HCI_OP_SNIFF_MODE
:
1723 hci_cs_sniff_mode(hdev
, ev
->status
);
1726 case HCI_OP_EXIT_SNIFF_MODE
:
1727 hci_cs_exit_sniff_mode(hdev
, ev
->status
);
1730 case HCI_OP_DISCONNECT
:
1731 if (ev
->status
!= 0)
1732 mgmt_disconnect_failed(hdev
->id
);
1736 BT_DBG("%s opcode 0x%x", hdev
->name
, opcode
);
1741 atomic_set(&hdev
->cmd_cnt
, 1);
1742 if (!skb_queue_empty(&hdev
->cmd_q
))
1743 tasklet_schedule(&hdev
->cmd_task
);
1747 static inline void hci_role_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1749 struct hci_ev_role_change
*ev
= (void *) skb
->data
;
1750 struct hci_conn
*conn
;
1752 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
1756 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
1760 conn
->link_mode
&= ~HCI_LM_MASTER
;
1762 conn
->link_mode
|= HCI_LM_MASTER
;
1765 clear_bit(HCI_CONN_RSWITCH_PEND
, &conn
->pend
);
1767 hci_role_switch_cfm(conn
, ev
->status
, ev
->role
);
1770 hci_dev_unlock(hdev
);
1773 static inline void hci_num_comp_pkts_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1775 struct hci_ev_num_comp_pkts
*ev
= (void *) skb
->data
;
1779 skb_pull(skb
, sizeof(*ev
));
1781 BT_DBG("%s num_hndl %d", hdev
->name
, ev
->num_hndl
);
1783 if (skb
->len
< ev
->num_hndl
* 4) {
1784 BT_DBG("%s bad parameters", hdev
->name
);
1788 tasklet_disable(&hdev
->tx_task
);
1790 for (i
= 0, ptr
= (__le16
*) skb
->data
; i
< ev
->num_hndl
; i
++) {
1791 struct hci_conn
*conn
;
1792 __u16 handle
, count
;
1794 handle
= get_unaligned_le16(ptr
++);
1795 count
= get_unaligned_le16(ptr
++);
1797 conn
= hci_conn_hash_lookup_handle(hdev
, handle
);
1799 conn
->sent
-= count
;
1801 if (conn
->type
== ACL_LINK
) {
1802 hdev
->acl_cnt
+= count
;
1803 if (hdev
->acl_cnt
> hdev
->acl_pkts
)
1804 hdev
->acl_cnt
= hdev
->acl_pkts
;
1806 hdev
->sco_cnt
+= count
;
1807 if (hdev
->sco_cnt
> hdev
->sco_pkts
)
1808 hdev
->sco_cnt
= hdev
->sco_pkts
;
1813 tasklet_schedule(&hdev
->tx_task
);
1815 tasklet_enable(&hdev
->tx_task
);
1818 static inline void hci_mode_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1820 struct hci_ev_mode_change
*ev
= (void *) skb
->data
;
1821 struct hci_conn
*conn
;
1823 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
1827 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1829 conn
->mode
= ev
->mode
;
1830 conn
->interval
= __le16_to_cpu(ev
->interval
);
1832 if (!test_and_clear_bit(HCI_CONN_MODE_CHANGE_PEND
, &conn
->pend
)) {
1833 if (conn
->mode
== HCI_CM_ACTIVE
)
1834 conn
->power_save
= 1;
1836 conn
->power_save
= 0;
1839 if (test_and_clear_bit(HCI_CONN_SCO_SETUP_PEND
, &conn
->pend
))
1840 hci_sco_setup(conn
, ev
->status
);
1843 hci_dev_unlock(hdev
);
1846 static inline void hci_pin_code_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1848 struct hci_ev_pin_code_req
*ev
= (void *) skb
->data
;
1849 struct hci_conn
*conn
;
1851 BT_DBG("%s", hdev
->name
);
1855 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
1856 if (conn
&& conn
->state
== BT_CONNECTED
) {
1857 hci_conn_hold(conn
);
1858 conn
->disc_timeout
= HCI_PAIRING_TIMEOUT
;
1862 if (!test_bit(HCI_PAIRABLE
, &hdev
->flags
))
1863 hci_send_cmd(hdev
, HCI_OP_PIN_CODE_NEG_REPLY
,
1864 sizeof(ev
->bdaddr
), &ev
->bdaddr
);
1866 if (test_bit(HCI_MGMT
, &hdev
->flags
))
1867 mgmt_pin_code_request(hdev
->id
, &ev
->bdaddr
);
1869 hci_dev_unlock(hdev
);
1872 static inline void hci_link_key_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1874 struct hci_ev_link_key_req
*ev
= (void *) skb
->data
;
1875 struct hci_cp_link_key_reply cp
;
1876 struct hci_conn
*conn
;
1877 struct link_key
*key
;
1879 BT_DBG("%s", hdev
->name
);
1881 if (!test_bit(HCI_LINK_KEYS
, &hdev
->flags
))
1886 key
= hci_find_link_key(hdev
, &ev
->bdaddr
);
1888 BT_DBG("%s link key not found for %s", hdev
->name
,
1889 batostr(&ev
->bdaddr
));
1893 BT_DBG("%s found key type %u for %s", hdev
->name
, key
->type
,
1894 batostr(&ev
->bdaddr
));
1896 if (!test_bit(HCI_DEBUG_KEYS
, &hdev
->flags
) && key
->type
== 0x03) {
1897 BT_DBG("%s ignoring debug key", hdev
->name
);
1901 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
1903 if (key
->type
== 0x04 && conn
&& conn
->auth_type
!= 0xff &&
1904 (conn
->auth_type
& 0x01)) {
1905 BT_DBG("%s ignoring unauthenticated key", hdev
->name
);
1909 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
1910 memcpy(cp
.link_key
, key
->val
, 16);
1912 hci_send_cmd(hdev
, HCI_OP_LINK_KEY_REPLY
, sizeof(cp
), &cp
);
1914 hci_dev_unlock(hdev
);
1919 hci_send_cmd(hdev
, HCI_OP_LINK_KEY_NEG_REPLY
, 6, &ev
->bdaddr
);
1920 hci_dev_unlock(hdev
);
1923 static inline void hci_link_key_notify_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1925 struct hci_ev_link_key_notify
*ev
= (void *) skb
->data
;
1926 struct hci_conn
*conn
;
1929 BT_DBG("%s", hdev
->name
);
1933 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
1935 hci_conn_hold(conn
);
1936 conn
->disc_timeout
= HCI_DISCONN_TIMEOUT
;
1937 pin_len
= conn
->pin_length
;
1941 if (test_bit(HCI_LINK_KEYS
, &hdev
->flags
))
1942 hci_add_link_key(hdev
, 1, &ev
->bdaddr
, ev
->link_key
,
1943 ev
->key_type
, pin_len
);
1945 hci_dev_unlock(hdev
);
1948 static inline void hci_clock_offset_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1950 struct hci_ev_clock_offset
*ev
= (void *) skb
->data
;
1951 struct hci_conn
*conn
;
1953 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
1957 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1958 if (conn
&& !ev
->status
) {
1959 struct inquiry_entry
*ie
;
1961 ie
= hci_inquiry_cache_lookup(hdev
, &conn
->dst
);
1963 ie
->data
.clock_offset
= ev
->clock_offset
;
1964 ie
->timestamp
= jiffies
;
1968 hci_dev_unlock(hdev
);
1971 static inline void hci_pkt_type_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1973 struct hci_ev_pkt_type_change
*ev
= (void *) skb
->data
;
1974 struct hci_conn
*conn
;
1976 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
1980 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
1981 if (conn
&& !ev
->status
)
1982 conn
->pkt_type
= __le16_to_cpu(ev
->pkt_type
);
1984 hci_dev_unlock(hdev
);
1987 static inline void hci_pscan_rep_mode_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
1989 struct hci_ev_pscan_rep_mode
*ev
= (void *) skb
->data
;
1990 struct inquiry_entry
*ie
;
1992 BT_DBG("%s", hdev
->name
);
1996 ie
= hci_inquiry_cache_lookup(hdev
, &ev
->bdaddr
);
1998 ie
->data
.pscan_rep_mode
= ev
->pscan_rep_mode
;
1999 ie
->timestamp
= jiffies
;
2002 hci_dev_unlock(hdev
);
2005 static inline void hci_inquiry_result_with_rssi_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2007 struct inquiry_data data
;
2008 int num_rsp
= *((__u8
*) skb
->data
);
2010 BT_DBG("%s num_rsp %d", hdev
->name
, num_rsp
);
2017 if ((skb
->len
- 1) / num_rsp
!= sizeof(struct inquiry_info_with_rssi
)) {
2018 struct inquiry_info_with_rssi_and_pscan_mode
*info
= (void *) (skb
->data
+ 1);
2020 for (; num_rsp
; num_rsp
--) {
2021 bacpy(&data
.bdaddr
, &info
->bdaddr
);
2022 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
2023 data
.pscan_period_mode
= info
->pscan_period_mode
;
2024 data
.pscan_mode
= info
->pscan_mode
;
2025 memcpy(data
.dev_class
, info
->dev_class
, 3);
2026 data
.clock_offset
= info
->clock_offset
;
2027 data
.rssi
= info
->rssi
;
2028 data
.ssp_mode
= 0x00;
2030 hci_inquiry_cache_update(hdev
, &data
);
2033 struct inquiry_info_with_rssi
*info
= (void *) (skb
->data
+ 1);
2035 for (; num_rsp
; num_rsp
--) {
2036 bacpy(&data
.bdaddr
, &info
->bdaddr
);
2037 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
2038 data
.pscan_period_mode
= info
->pscan_period_mode
;
2039 data
.pscan_mode
= 0x00;
2040 memcpy(data
.dev_class
, info
->dev_class
, 3);
2041 data
.clock_offset
= info
->clock_offset
;
2042 data
.rssi
= info
->rssi
;
2043 data
.ssp_mode
= 0x00;
2045 hci_inquiry_cache_update(hdev
, &data
);
2049 hci_dev_unlock(hdev
);
2052 static inline void hci_remote_ext_features_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2054 struct hci_ev_remote_ext_features
*ev
= (void *) skb
->data
;
2055 struct hci_conn
*conn
;
2057 BT_DBG("%s", hdev
->name
);
2061 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2065 if (!ev
->status
&& ev
->page
== 0x01) {
2066 struct inquiry_entry
*ie
;
2068 ie
= hci_inquiry_cache_lookup(hdev
, &conn
->dst
);
2070 ie
->data
.ssp_mode
= (ev
->features
[0] & 0x01);
2072 conn
->ssp_mode
= (ev
->features
[0] & 0x01);
2075 if (conn
->state
!= BT_CONFIG
)
2079 struct hci_cp_remote_name_req cp
;
2080 memset(&cp
, 0, sizeof(cp
));
2081 bacpy(&cp
.bdaddr
, &conn
->dst
);
2082 cp
.pscan_rep_mode
= 0x02;
2083 hci_send_cmd(hdev
, HCI_OP_REMOTE_NAME_REQ
, sizeof(cp
), &cp
);
2086 if (!hci_outgoing_auth_needed(hdev
, conn
)) {
2087 conn
->state
= BT_CONNECTED
;
2088 hci_proto_connect_cfm(conn
, ev
->status
);
2093 hci_dev_unlock(hdev
);
2096 static inline void hci_sync_conn_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2098 struct hci_ev_sync_conn_complete
*ev
= (void *) skb
->data
;
2099 struct hci_conn
*conn
;
2101 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
2105 conn
= hci_conn_hash_lookup_ba(hdev
, ev
->link_type
, &ev
->bdaddr
);
2107 if (ev
->link_type
== ESCO_LINK
)
2110 conn
= hci_conn_hash_lookup_ba(hdev
, ESCO_LINK
, &ev
->bdaddr
);
2114 conn
->type
= SCO_LINK
;
2117 switch (ev
->status
) {
2119 conn
->handle
= __le16_to_cpu(ev
->handle
);
2120 conn
->state
= BT_CONNECTED
;
2122 hci_conn_hold_device(conn
);
2123 hci_conn_add_sysfs(conn
);
2126 case 0x11: /* Unsupported Feature or Parameter Value */
2127 case 0x1c: /* SCO interval rejected */
2128 case 0x1a: /* Unsupported Remote Feature */
2129 case 0x1f: /* Unspecified error */
2130 if (conn
->out
&& conn
->attempt
< 2) {
2131 conn
->pkt_type
= (hdev
->esco_type
& SCO_ESCO_MASK
) |
2132 (hdev
->esco_type
& EDR_ESCO_MASK
);
2133 hci_setup_sync(conn
, conn
->link
->handle
);
2139 conn
->state
= BT_CLOSED
;
2143 hci_proto_connect_cfm(conn
, ev
->status
);
2148 hci_dev_unlock(hdev
);
2151 static inline void hci_sync_conn_changed_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2153 BT_DBG("%s", hdev
->name
);
2156 static inline void hci_sniff_subrate_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2158 struct hci_ev_sniff_subrate
*ev
= (void *) skb
->data
;
2159 struct hci_conn
*conn
;
2161 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
2165 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(ev
->handle
));
2169 hci_dev_unlock(hdev
);
2172 static inline void hci_extended_inquiry_result_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2174 struct inquiry_data data
;
2175 struct extended_inquiry_info
*info
= (void *) (skb
->data
+ 1);
2176 int num_rsp
= *((__u8
*) skb
->data
);
2178 BT_DBG("%s num_rsp %d", hdev
->name
, num_rsp
);
2185 for (; num_rsp
; num_rsp
--) {
2186 bacpy(&data
.bdaddr
, &info
->bdaddr
);
2187 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
2188 data
.pscan_period_mode
= info
->pscan_period_mode
;
2189 data
.pscan_mode
= 0x00;
2190 memcpy(data
.dev_class
, info
->dev_class
, 3);
2191 data
.clock_offset
= info
->clock_offset
;
2192 data
.rssi
= info
->rssi
;
2193 data
.ssp_mode
= 0x01;
2195 hci_inquiry_cache_update(hdev
, &data
);
2198 hci_dev_unlock(hdev
);
2201 static inline u8
hci_get_auth_req(struct hci_conn
*conn
)
2203 /* If remote requests dedicated bonding follow that lead */
2204 if (conn
->remote_auth
== 0x02 || conn
->remote_auth
== 0x03) {
2205 /* If both remote and local IO capabilities allow MITM
2206 * protection then require it, otherwise don't */
2207 if (conn
->remote_cap
== 0x03 || conn
->io_capability
== 0x03)
2213 /* If remote requests no-bonding follow that lead */
2214 if (conn
->remote_auth
== 0x00 || conn
->remote_auth
== 0x01)
2217 return conn
->auth_type
;
2220 static inline void hci_io_capa_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2222 struct hci_ev_io_capa_request
*ev
= (void *) skb
->data
;
2223 struct hci_conn
*conn
;
2225 BT_DBG("%s", hdev
->name
);
2229 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
2233 hci_conn_hold(conn
);
2235 if (!test_bit(HCI_MGMT
, &hdev
->flags
))
2238 if (test_bit(HCI_PAIRABLE
, &hdev
->flags
) ||
2239 (conn
->remote_auth
& ~0x01) == HCI_AT_NO_BONDING
) {
2240 struct hci_cp_io_capability_reply cp
;
2242 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
2243 cp
.capability
= conn
->io_capability
;
2245 cp
.authentication
= hci_get_auth_req(conn
);
2247 hci_send_cmd(hdev
, HCI_OP_IO_CAPABILITY_REPLY
,
2250 struct hci_cp_io_capability_neg_reply cp
;
2252 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
2253 cp
.reason
= 0x16; /* Pairing not allowed */
2255 hci_send_cmd(hdev
, HCI_OP_IO_CAPABILITY_NEG_REPLY
,
2260 hci_dev_unlock(hdev
);
2263 static inline void hci_io_capa_reply_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2265 struct hci_ev_io_capa_reply
*ev
= (void *) skb
->data
;
2266 struct hci_conn
*conn
;
2268 BT_DBG("%s", hdev
->name
);
2272 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
2276 hci_conn_hold(conn
);
2278 conn
->remote_cap
= ev
->capability
;
2279 conn
->remote_oob
= ev
->oob_data
;
2280 conn
->remote_auth
= ev
->authentication
;
2283 hci_dev_unlock(hdev
);
2286 static inline void hci_simple_pair_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2288 struct hci_ev_simple_pair_complete
*ev
= (void *) skb
->data
;
2289 struct hci_conn
*conn
;
2291 BT_DBG("%s", hdev
->name
);
2295 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
2299 hci_dev_unlock(hdev
);
2302 static inline void hci_remote_host_features_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2304 struct hci_ev_remote_host_features
*ev
= (void *) skb
->data
;
2305 struct inquiry_entry
*ie
;
2307 BT_DBG("%s", hdev
->name
);
2311 ie
= hci_inquiry_cache_lookup(hdev
, &ev
->bdaddr
);
2313 ie
->data
.ssp_mode
= (ev
->features
[0] & 0x01);
2315 hci_dev_unlock(hdev
);
2318 void hci_event_packet(struct hci_dev
*hdev
, struct sk_buff
*skb
)
2320 struct hci_event_hdr
*hdr
= (void *) skb
->data
;
2321 __u8 event
= hdr
->evt
;
2323 skb_pull(skb
, HCI_EVENT_HDR_SIZE
);
2326 case HCI_EV_INQUIRY_COMPLETE
:
2327 hci_inquiry_complete_evt(hdev
, skb
);
2330 case HCI_EV_INQUIRY_RESULT
:
2331 hci_inquiry_result_evt(hdev
, skb
);
2334 case HCI_EV_CONN_COMPLETE
:
2335 hci_conn_complete_evt(hdev
, skb
);
2338 case HCI_EV_CONN_REQUEST
:
2339 hci_conn_request_evt(hdev
, skb
);
2342 case HCI_EV_DISCONN_COMPLETE
:
2343 hci_disconn_complete_evt(hdev
, skb
);
2346 case HCI_EV_AUTH_COMPLETE
:
2347 hci_auth_complete_evt(hdev
, skb
);
2350 case HCI_EV_REMOTE_NAME
:
2351 hci_remote_name_evt(hdev
, skb
);
2354 case HCI_EV_ENCRYPT_CHANGE
:
2355 hci_encrypt_change_evt(hdev
, skb
);
2358 case HCI_EV_CHANGE_LINK_KEY_COMPLETE
:
2359 hci_change_link_key_complete_evt(hdev
, skb
);
2362 case HCI_EV_REMOTE_FEATURES
:
2363 hci_remote_features_evt(hdev
, skb
);
2366 case HCI_EV_REMOTE_VERSION
:
2367 hci_remote_version_evt(hdev
, skb
);
2370 case HCI_EV_QOS_SETUP_COMPLETE
:
2371 hci_qos_setup_complete_evt(hdev
, skb
);
2374 case HCI_EV_CMD_COMPLETE
:
2375 hci_cmd_complete_evt(hdev
, skb
);
2378 case HCI_EV_CMD_STATUS
:
2379 hci_cmd_status_evt(hdev
, skb
);
2382 case HCI_EV_ROLE_CHANGE
:
2383 hci_role_change_evt(hdev
, skb
);
2386 case HCI_EV_NUM_COMP_PKTS
:
2387 hci_num_comp_pkts_evt(hdev
, skb
);
2390 case HCI_EV_MODE_CHANGE
:
2391 hci_mode_change_evt(hdev
, skb
);
2394 case HCI_EV_PIN_CODE_REQ
:
2395 hci_pin_code_request_evt(hdev
, skb
);
2398 case HCI_EV_LINK_KEY_REQ
:
2399 hci_link_key_request_evt(hdev
, skb
);
2402 case HCI_EV_LINK_KEY_NOTIFY
:
2403 hci_link_key_notify_evt(hdev
, skb
);
2406 case HCI_EV_CLOCK_OFFSET
:
2407 hci_clock_offset_evt(hdev
, skb
);
2410 case HCI_EV_PKT_TYPE_CHANGE
:
2411 hci_pkt_type_change_evt(hdev
, skb
);
2414 case HCI_EV_PSCAN_REP_MODE
:
2415 hci_pscan_rep_mode_evt(hdev
, skb
);
2418 case HCI_EV_INQUIRY_RESULT_WITH_RSSI
:
2419 hci_inquiry_result_with_rssi_evt(hdev
, skb
);
2422 case HCI_EV_REMOTE_EXT_FEATURES
:
2423 hci_remote_ext_features_evt(hdev
, skb
);
2426 case HCI_EV_SYNC_CONN_COMPLETE
:
2427 hci_sync_conn_complete_evt(hdev
, skb
);
2430 case HCI_EV_SYNC_CONN_CHANGED
:
2431 hci_sync_conn_changed_evt(hdev
, skb
);
2434 case HCI_EV_SNIFF_SUBRATE
:
2435 hci_sniff_subrate_evt(hdev
, skb
);
2438 case HCI_EV_EXTENDED_INQUIRY_RESULT
:
2439 hci_extended_inquiry_result_evt(hdev
, skb
);
2442 case HCI_EV_IO_CAPA_REQUEST
:
2443 hci_io_capa_request_evt(hdev
, skb
);
2446 case HCI_EV_IO_CAPA_REPLY
:
2447 hci_io_capa_reply_evt(hdev
, skb
);
2450 case HCI_EV_SIMPLE_PAIR_COMPLETE
:
2451 hci_simple_pair_complete_evt(hdev
, skb
);
2454 case HCI_EV_REMOTE_HOST_FEATURES
:
2455 hci_remote_host_features_evt(hdev
, skb
);
2459 BT_DBG("%s event 0x%x", hdev
->name
, event
);
2464 hdev
->stat
.evt_rx
++;
2467 /* Generate internal stack event */
2468 void hci_si_event(struct hci_dev
*hdev
, int type
, int dlen
, void *data
)
2470 struct hci_event_hdr
*hdr
;
2471 struct hci_ev_stack_internal
*ev
;
2472 struct sk_buff
*skb
;
2474 skb
= bt_skb_alloc(HCI_EVENT_HDR_SIZE
+ sizeof(*ev
) + dlen
, GFP_ATOMIC
);
2478 hdr
= (void *) skb_put(skb
, HCI_EVENT_HDR_SIZE
);
2479 hdr
->evt
= HCI_EV_STACK_INTERNAL
;
2480 hdr
->plen
= sizeof(*ev
) + dlen
;
2482 ev
= (void *) skb_put(skb
, sizeof(*ev
) + dlen
);
2484 memcpy(ev
->data
, data
, dlen
);
2486 bt_cb(skb
)->incoming
= 1;
2487 __net_timestamp(skb
);
2489 bt_cb(skb
)->pkt_type
= HCI_EVENT_PKT
;
2490 skb
->dev
= (void *) hdev
;
2491 hci_send_to_sock(hdev
, skb
, NULL
);