2 BlueZ - Bluetooth protocol stack for Linux
3 Copyright (C) 2000-2001 Qualcomm Incorporated
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/config.h>
28 #include <linux/module.h>
30 #include <linux/types.h>
31 #include <linux/errno.h>
32 #include <linux/kernel.h>
33 #include <linux/sched.h>
34 #include <linux/slab.h>
35 #include <linux/poll.h>
36 #include <linux/fcntl.h>
37 #include <linux/init.h>
38 #include <linux/skbuff.h>
39 #include <linux/interrupt.h>
40 #include <linux/notifier.h>
43 #include <asm/system.h>
44 #include <asm/uaccess.h>
45 #include <asm/unaligned.h>
47 #include <net/bluetooth/bluetooth.h>
48 #include <net/bluetooth/hci_core.h>
50 #ifndef CONFIG_BT_HCI_CORE_DEBUG
55 /* Handle HCI Event packets */
57 /* Command Complete OGF LINK_CTL */
58 static void hci_cc_link_ctl(struct hci_dev
*hdev
, __u16 ocf
, struct sk_buff
*skb
)
62 BT_DBG("%s ocf 0x%x", hdev
->name
, ocf
);
65 case OCF_INQUIRY_CANCEL
:
66 status
= *((__u8
*) skb
->data
);
69 BT_DBG("%s Inquiry cancel error: status 0x%x", hdev
->name
, status
);
71 clear_bit(HCI_INQUIRY
, &hdev
->flags
);
72 hci_req_complete(hdev
, status
);
77 BT_DBG("%s Command complete: ogf LINK_CTL ocf %x", hdev
->name
, ocf
);
82 /* Command Complete OGF LINK_POLICY */
83 static void hci_cc_link_policy(struct hci_dev
*hdev
, __u16 ocf
, struct sk_buff
*skb
)
85 struct hci_conn
*conn
;
86 struct hci_rp_role_discovery
*rd
;
88 BT_DBG("%s ocf 0x%x", hdev
->name
, ocf
);
91 case OCF_ROLE_DISCOVERY
:
92 rd
= (void *) skb
->data
;
99 conn
= hci_conn_hash_lookup_handle(hdev
, __le16_to_cpu(rd
->handle
));
102 conn
->link_mode
&= ~HCI_LM_MASTER
;
104 conn
->link_mode
|= HCI_LM_MASTER
;
107 hci_dev_unlock(hdev
);
111 BT_DBG("%s: Command complete: ogf LINK_POLICY ocf %x",
117 /* Command Complete OGF HOST_CTL */
118 static void hci_cc_host_ctl(struct hci_dev
*hdev
, __u16 ocf
, struct sk_buff
*skb
)
122 struct hci_rp_read_voice_setting
*vs
;
125 BT_DBG("%s ocf 0x%x", hdev
->name
, ocf
);
129 status
= *((__u8
*) skb
->data
);
130 hci_req_complete(hdev
, status
);
133 case OCF_SET_EVENT_FLT
:
134 status
= *((__u8
*) skb
->data
);
136 BT_DBG("%s SET_EVENT_FLT failed %d", hdev
->name
, status
);
138 BT_DBG("%s SET_EVENT_FLT succeseful", hdev
->name
);
142 case OCF_WRITE_AUTH_ENABLE
:
143 sent
= hci_sent_cmd_data(hdev
, OGF_HOST_CTL
, OCF_WRITE_AUTH_ENABLE
);
147 status
= *((__u8
*) skb
->data
);
148 param
= *((__u8
*) sent
);
151 if (param
== AUTH_ENABLED
)
152 set_bit(HCI_AUTH
, &hdev
->flags
);
154 clear_bit(HCI_AUTH
, &hdev
->flags
);
156 hci_req_complete(hdev
, status
);
159 case OCF_WRITE_ENCRYPT_MODE
:
160 sent
= hci_sent_cmd_data(hdev
, OGF_HOST_CTL
, OCF_WRITE_ENCRYPT_MODE
);
164 status
= *((__u8
*) skb
->data
);
165 param
= *((__u8
*) sent
);
169 set_bit(HCI_ENCRYPT
, &hdev
->flags
);
171 clear_bit(HCI_ENCRYPT
, &hdev
->flags
);
173 hci_req_complete(hdev
, status
);
176 case OCF_WRITE_CA_TIMEOUT
:
177 status
= *((__u8
*) skb
->data
);
179 BT_DBG("%s OCF_WRITE_CA_TIMEOUT failed %d", hdev
->name
, status
);
181 BT_DBG("%s OCF_WRITE_CA_TIMEOUT succeseful", hdev
->name
);
185 case OCF_WRITE_PG_TIMEOUT
:
186 status
= *((__u8
*) skb
->data
);
188 BT_DBG("%s OCF_WRITE_PG_TIMEOUT failed %d", hdev
->name
, status
);
190 BT_DBG("%s: OCF_WRITE_PG_TIMEOUT succeseful", hdev
->name
);
194 case OCF_WRITE_SCAN_ENABLE
:
195 sent
= hci_sent_cmd_data(hdev
, OGF_HOST_CTL
, OCF_WRITE_SCAN_ENABLE
);
199 status
= *((__u8
*) skb
->data
);
200 param
= *((__u8
*) sent
);
202 BT_DBG("param 0x%x", param
);
205 clear_bit(HCI_PSCAN
, &hdev
->flags
);
206 clear_bit(HCI_ISCAN
, &hdev
->flags
);
207 if (param
& SCAN_INQUIRY
)
208 set_bit(HCI_ISCAN
, &hdev
->flags
);
210 if (param
& SCAN_PAGE
)
211 set_bit(HCI_PSCAN
, &hdev
->flags
);
213 hci_req_complete(hdev
, status
);
216 case OCF_READ_VOICE_SETTING
:
217 vs
= (struct hci_rp_read_voice_setting
*) skb
->data
;
220 BT_DBG("%s READ_VOICE_SETTING failed %d", hdev
->name
, vs
->status
);
224 setting
= __le16_to_cpu(vs
->voice_setting
);
226 if (hdev
->voice_setting
!= setting
) {
227 hdev
->voice_setting
= setting
;
229 BT_DBG("%s: voice setting 0x%04x", hdev
->name
, setting
);
232 tasklet_disable(&hdev
->tx_task
);
233 hdev
->notify(hdev
, HCI_NOTIFY_VOICE_SETTING
);
234 tasklet_enable(&hdev
->tx_task
);
239 case OCF_WRITE_VOICE_SETTING
:
240 sent
= hci_sent_cmd_data(hdev
, OGF_HOST_CTL
, OCF_WRITE_VOICE_SETTING
);
244 status
= *((__u8
*) skb
->data
);
245 setting
= __le16_to_cpu(get_unaligned((__u16
*) sent
));
247 if (!status
&& hdev
->voice_setting
!= setting
) {
248 hdev
->voice_setting
= setting
;
250 BT_DBG("%s: voice setting 0x%04x", hdev
->name
, setting
);
253 tasklet_disable(&hdev
->tx_task
);
254 hdev
->notify(hdev
, HCI_NOTIFY_VOICE_SETTING
);
255 tasklet_enable(&hdev
->tx_task
);
258 hci_req_complete(hdev
, status
);
261 case OCF_HOST_BUFFER_SIZE
:
262 status
= *((__u8
*) skb
->data
);
264 BT_DBG("%s OCF_BUFFER_SIZE failed %d", hdev
->name
, status
);
265 hci_req_complete(hdev
, status
);
270 BT_DBG("%s Command complete: ogf HOST_CTL ocf %x", hdev
->name
, ocf
);
275 /* Command Complete OGF INFO_PARAM */
276 static void hci_cc_info_param(struct hci_dev
*hdev
, __u16 ocf
, struct sk_buff
*skb
)
278 struct hci_rp_read_loc_features
*lf
;
279 struct hci_rp_read_buffer_size
*bs
;
280 struct hci_rp_read_bd_addr
*ba
;
282 BT_DBG("%s ocf 0x%x", hdev
->name
, ocf
);
285 case OCF_READ_LOCAL_FEATURES
:
286 lf
= (struct hci_rp_read_loc_features
*) skb
->data
;
289 BT_DBG("%s READ_LOCAL_FEATURES failed %d", hdev
->name
, lf
->status
);
293 memcpy(hdev
->features
, lf
->features
, sizeof(hdev
->features
));
295 /* Adjust default settings according to features
296 * supported by device. */
297 if (hdev
->features
[0] & LMP_3SLOT
)
298 hdev
->pkt_type
|= (HCI_DM3
| HCI_DH3
);
300 if (hdev
->features
[0] & LMP_5SLOT
)
301 hdev
->pkt_type
|= (HCI_DM5
| HCI_DH5
);
303 if (hdev
->features
[1] & LMP_HV2
)
304 hdev
->pkt_type
|= (HCI_HV2
);
306 if (hdev
->features
[1] & LMP_HV3
)
307 hdev
->pkt_type
|= (HCI_HV3
);
309 BT_DBG("%s: features 0x%x 0x%x 0x%x", hdev
->name
, lf
->features
[0], lf
->features
[1], lf
->features
[2]);
313 case OCF_READ_BUFFER_SIZE
:
314 bs
= (struct hci_rp_read_buffer_size
*) skb
->data
;
317 BT_DBG("%s READ_BUFFER_SIZE failed %d", hdev
->name
, bs
->status
);
318 hci_req_complete(hdev
, bs
->status
);
322 hdev
->acl_mtu
= __le16_to_cpu(bs
->acl_mtu
);
323 hdev
->sco_mtu
= bs
->sco_mtu
? bs
->sco_mtu
: 64;
324 hdev
->acl_pkts
= hdev
->acl_cnt
= __le16_to_cpu(bs
->acl_max_pkt
);
325 hdev
->sco_pkts
= hdev
->sco_cnt
= __le16_to_cpu(bs
->sco_max_pkt
);
327 BT_DBG("%s mtu: acl %d, sco %d max_pkt: acl %d, sco %d", hdev
->name
,
328 hdev
->acl_mtu
, hdev
->sco_mtu
, hdev
->acl_pkts
, hdev
->sco_pkts
);
331 case OCF_READ_BD_ADDR
:
332 ba
= (struct hci_rp_read_bd_addr
*) skb
->data
;
335 bacpy(&hdev
->bdaddr
, &ba
->bdaddr
);
337 BT_DBG("%s: READ_BD_ADDR failed %d", hdev
->name
, ba
->status
);
340 hci_req_complete(hdev
, ba
->status
);
344 BT_DBG("%s Command complete: ogf INFO_PARAM ocf %x", hdev
->name
, ocf
);
349 /* Command Status OGF LINK_CTL */
350 static inline void hci_cs_create_conn(struct hci_dev
*hdev
, __u8 status
)
352 struct hci_conn
*conn
;
353 struct hci_cp_create_conn
*cp
= hci_sent_cmd_data(hdev
, OGF_LINK_CTL
, OCF_CREATE_CONN
);
360 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &cp
->bdaddr
);
362 BT_DBG("%s status 0x%x bdaddr %s conn %p", hdev
->name
,
363 status
, batostr(&cp
->bdaddr
), conn
);
366 if (conn
&& conn
->state
== BT_CONNECT
) {
367 conn
->state
= BT_CLOSED
;
368 hci_proto_connect_cfm(conn
, status
);
373 conn
= hci_conn_add(hdev
, ACL_LINK
, &cp
->bdaddr
);
376 conn
->link_mode
|= HCI_LM_MASTER
;
378 BT_ERR("No memmory for new connection");
382 hci_dev_unlock(hdev
);
385 static void hci_cs_link_ctl(struct hci_dev
*hdev
, __u16 ocf
, __u8 status
)
387 BT_DBG("%s ocf 0x%x", hdev
->name
, ocf
);
390 case OCF_CREATE_CONN
:
391 hci_cs_create_conn(hdev
, status
);
396 struct hci_conn
*acl
, *sco
;
397 struct hci_cp_add_sco
*cp
= hci_sent_cmd_data(hdev
, OGF_LINK_CTL
, OCF_ADD_SCO
);
403 handle
= __le16_to_cpu(cp
->handle
);
405 BT_DBG("%s Add SCO error: handle %d status 0x%x", hdev
->name
, handle
, status
);
409 acl
= hci_conn_hash_lookup_handle(hdev
, handle
);
410 if (acl
&& (sco
= acl
->link
)) {
411 sco
->state
= BT_CLOSED
;
413 hci_proto_connect_cfm(sco
, status
);
417 hci_dev_unlock(hdev
);
423 BT_DBG("%s Inquiry error: status 0x%x", hdev
->name
, status
);
424 hci_req_complete(hdev
, status
);
426 set_bit(HCI_INQUIRY
, &hdev
->flags
);
431 BT_DBG("%s Command status: ogf LINK_CTL ocf %x status %d",
432 hdev
->name
, ocf
, status
);
437 /* Command Status OGF LINK_POLICY */
438 static void hci_cs_link_policy(struct hci_dev
*hdev
, __u16 ocf
, __u8 status
)
440 BT_DBG("%s ocf 0x%x", hdev
->name
, ocf
);
444 BT_DBG("%s Command status: ogf HOST_POLICY ocf %x", hdev
->name
, ocf
);
449 /* Command Status OGF HOST_CTL */
450 static void hci_cs_host_ctl(struct hci_dev
*hdev
, __u16 ocf
, __u8 status
)
452 BT_DBG("%s ocf 0x%x", hdev
->name
, ocf
);
456 BT_DBG("%s Command status: ogf HOST_CTL ocf %x", hdev
->name
, ocf
);
461 /* Command Status OGF INFO_PARAM */
462 static void hci_cs_info_param(struct hci_dev
*hdev
, __u16 ocf
, __u8 status
)
464 BT_DBG("%s: hci_cs_info_param: ocf 0x%x", hdev
->name
, ocf
);
468 BT_DBG("%s Command status: ogf INFO_PARAM ocf %x", hdev
->name
, ocf
);
473 /* Inquiry Complete */
474 static inline void hci_inquiry_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
476 __u8 status
= *((__u8
*) skb
->data
);
478 BT_DBG("%s status %d", hdev
->name
, status
);
480 clear_bit(HCI_INQUIRY
, &hdev
->flags
);
481 hci_req_complete(hdev
, status
);
485 static inline void hci_inquiry_result_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
487 struct inquiry_info
*info
= (struct inquiry_info
*) (skb
->data
+ 1);
488 int num_rsp
= *((__u8
*) skb
->data
);
490 BT_DBG("%s num_rsp %d", hdev
->name
, num_rsp
);
493 for (; num_rsp
; num_rsp
--) {
494 struct inquiry_data data
;
495 bacpy(&data
.bdaddr
, &info
->bdaddr
);
496 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
497 data
.pscan_period_mode
= info
->pscan_period_mode
;
498 data
.pscan_mode
= info
->pscan_mode
;
499 memcpy(data
.dev_class
, info
->dev_class
, 3);
500 data
.clock_offset
= info
->clock_offset
;
503 hci_inquiry_cache_update(hdev
, &data
);
505 hci_dev_unlock(hdev
);
508 /* Inquiry Result With RSSI */
509 static inline void hci_inquiry_result_with_rssi_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
511 struct inquiry_info_with_rssi
*info
= (struct inquiry_info_with_rssi
*) (skb
->data
+ 1);
512 int num_rsp
= *((__u8
*) skb
->data
);
514 BT_DBG("%s num_rsp %d", hdev
->name
, num_rsp
);
517 for (; num_rsp
; num_rsp
--) {
518 struct inquiry_data data
;
519 bacpy(&data
.bdaddr
, &info
->bdaddr
);
520 data
.pscan_rep_mode
= info
->pscan_rep_mode
;
521 data
.pscan_period_mode
= info
->pscan_period_mode
;
522 data
.pscan_mode
= 0x00;
523 memcpy(data
.dev_class
, info
->dev_class
, 3);
524 data
.clock_offset
= info
->clock_offset
;
525 data
.rssi
= info
->rssi
;
527 hci_inquiry_cache_update(hdev
, &data
);
529 hci_dev_unlock(hdev
);
532 /* Connect Request */
533 static inline void hci_conn_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
535 struct hci_ev_conn_request
*ev
= (struct hci_ev_conn_request
*) skb
->data
;
536 int mask
= hdev
->link_mode
;
538 BT_DBG("%s Connection request: %s type 0x%x", hdev
->name
,
539 batostr(&ev
->bdaddr
), ev
->link_type
);
541 mask
|= hci_proto_connect_ind(hdev
, &ev
->bdaddr
, ev
->link_type
);
543 if (mask
& HCI_LM_ACCEPT
) {
544 /* Connection accepted */
545 struct hci_conn
*conn
;
546 struct hci_cp_accept_conn_req cp
;
549 conn
= hci_conn_hash_lookup_ba(hdev
, ev
->link_type
, &ev
->bdaddr
);
551 if (!(conn
= hci_conn_add(hdev
, ev
->link_type
, &ev
->bdaddr
))) {
552 BT_ERR("No memmory for new connection");
553 hci_dev_unlock(hdev
);
557 memcpy(conn
->dev_class
, ev
->dev_class
, 3);
558 conn
->state
= BT_CONNECT
;
559 hci_dev_unlock(hdev
);
561 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
563 if (lmp_rswitch_capable(hdev
) && (mask
& HCI_LM_MASTER
))
564 cp
.role
= 0x00; /* Become master */
566 cp
.role
= 0x01; /* Remain slave */
568 hci_send_cmd(hdev
, OGF_LINK_CTL
, OCF_ACCEPT_CONN_REQ
, sizeof(cp
), &cp
);
570 /* Connection rejected */
571 struct hci_cp_reject_conn_req cp
;
573 bacpy(&cp
.bdaddr
, &ev
->bdaddr
);
575 hci_send_cmd(hdev
, OGF_LINK_CTL
, OCF_REJECT_CONN_REQ
, sizeof(cp
), &cp
);
579 /* Connect Complete */
580 static inline void hci_conn_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
582 struct hci_ev_conn_complete
*ev
= (struct hci_ev_conn_complete
*) skb
->data
;
583 struct hci_conn
*conn
= NULL
;
585 BT_DBG("%s", hdev
->name
);
589 conn
= hci_conn_hash_lookup_ba(hdev
, ev
->link_type
, &ev
->bdaddr
);
591 hci_dev_unlock(hdev
);
596 conn
->handle
= __le16_to_cpu(ev
->handle
);
597 conn
->state
= BT_CONNECTED
;
599 if (test_bit(HCI_AUTH
, &hdev
->flags
))
600 conn
->link_mode
|= HCI_LM_AUTH
;
602 if (test_bit(HCI_ENCRYPT
, &hdev
->flags
))
603 conn
->link_mode
|= HCI_LM_ENCRYPT
;
605 /* Set link policy */
606 if (conn
->type
== ACL_LINK
&& hdev
->link_policy
) {
607 struct hci_cp_write_link_policy cp
;
608 cp
.handle
= ev
->handle
;
609 cp
.policy
= __cpu_to_le16(hdev
->link_policy
);
610 hci_send_cmd(hdev
, OGF_LINK_POLICY
, OCF_WRITE_LINK_POLICY
, sizeof(cp
), &cp
);
613 /* Set packet type for incoming connection */
615 struct hci_cp_change_conn_ptype cp
;
616 cp
.handle
= ev
->handle
;
617 cp
.pkt_type
= (conn
->type
== ACL_LINK
) ?
618 __cpu_to_le16(hdev
->pkt_type
& ACL_PTYPE_MASK
):
619 __cpu_to_le16(hdev
->pkt_type
& SCO_PTYPE_MASK
);
621 hci_send_cmd(hdev
, OGF_LINK_CTL
, OCF_CHANGE_CONN_PTYPE
, sizeof(cp
), &cp
);
624 conn
->state
= BT_CLOSED
;
626 if (conn
->type
== ACL_LINK
) {
627 struct hci_conn
*sco
= conn
->link
;
630 hci_add_sco(sco
, conn
->handle
);
632 hci_proto_connect_cfm(sco
, ev
->status
);
638 hci_proto_connect_cfm(conn
, ev
->status
);
642 hci_dev_unlock(hdev
);
645 /* Disconnect Complete */
646 static inline void hci_disconn_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
648 struct hci_ev_disconn_complete
*ev
= (struct hci_ev_disconn_complete
*) skb
->data
;
649 struct hci_conn
*conn
= NULL
;
650 __u16 handle
= __le16_to_cpu(ev
->handle
);
652 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
659 conn
= hci_conn_hash_lookup_handle(hdev
, handle
);
661 conn
->state
= BT_CLOSED
;
662 hci_proto_disconn_ind(conn
, ev
->reason
);
666 hci_dev_unlock(hdev
);
669 /* Number of completed packets */
670 static inline void hci_num_comp_pkts_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
672 struct hci_ev_num_comp_pkts
*ev
= (struct hci_ev_num_comp_pkts
*) skb
->data
;
676 skb_pull(skb
, sizeof(*ev
));
678 BT_DBG("%s num_hndl %d", hdev
->name
, ev
->num_hndl
);
680 if (skb
->len
< ev
->num_hndl
* 4) {
681 BT_DBG("%s bad parameters", hdev
->name
);
685 tasklet_disable(&hdev
->tx_task
);
687 for (i
= 0, ptr
= (__u16
*) skb
->data
; i
< ev
->num_hndl
; i
++) {
688 struct hci_conn
*conn
;
691 handle
= __le16_to_cpu(get_unaligned(ptr
++));
692 count
= __le16_to_cpu(get_unaligned(ptr
++));
694 conn
= hci_conn_hash_lookup_handle(hdev
, handle
);
698 if (conn
->type
== SCO_LINK
) {
699 if ((hdev
->sco_cnt
+= count
) > hdev
->sco_pkts
)
700 hdev
->sco_cnt
= hdev
->sco_pkts
;
702 if ((hdev
->acl_cnt
+= count
) > hdev
->acl_pkts
)
703 hdev
->acl_cnt
= hdev
->acl_pkts
;
709 tasklet_enable(&hdev
->tx_task
);
713 static inline void hci_role_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
715 struct hci_ev_role_change
*ev
= (struct hci_ev_role_change
*) skb
->data
;
716 struct hci_conn
*conn
= NULL
;
718 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
722 conn
= hci_conn_hash_lookup_ba(hdev
, ACL_LINK
, &ev
->bdaddr
);
726 conn
->link_mode
&= ~HCI_LM_MASTER
;
728 conn
->link_mode
|= HCI_LM_MASTER
;
731 clear_bit(HCI_CONN_RSWITCH_PEND
, &conn
->pend
);
733 hci_role_switch_cfm(conn
, ev
->status
, ev
->role
);
736 hci_dev_unlock(hdev
);
739 /* Authentication Complete */
740 static inline void hci_auth_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
742 struct hci_ev_auth_complete
*ev
= (struct hci_ev_auth_complete
*) skb
->data
;
743 struct hci_conn
*conn
= NULL
;
744 __u16 handle
= __le16_to_cpu(ev
->handle
);
746 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
750 conn
= hci_conn_hash_lookup_handle(hdev
, handle
);
753 conn
->link_mode
|= HCI_LM_AUTH
;
755 clear_bit(HCI_CONN_AUTH_PEND
, &conn
->pend
);
757 hci_auth_cfm(conn
, ev
->status
);
759 if (test_bit(HCI_CONN_ENCRYPT_PEND
, &conn
->pend
)) {
761 struct hci_cp_set_conn_encrypt cp
;
762 cp
.handle
= __cpu_to_le16(conn
->handle
);
764 hci_send_cmd(conn
->hdev
, OGF_LINK_CTL
,
765 OCF_SET_CONN_ENCRYPT
,
768 clear_bit(HCI_CONN_ENCRYPT_PEND
, &conn
->pend
);
769 hci_encrypt_cfm(conn
, ev
->status
, 0x00);
774 hci_dev_unlock(hdev
);
777 /* Encryption Change */
778 static inline void hci_encrypt_change_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
780 struct hci_ev_encrypt_change
*ev
= (struct hci_ev_encrypt_change
*) skb
->data
;
781 struct hci_conn
*conn
= NULL
;
782 __u16 handle
= __le16_to_cpu(ev
->handle
);
784 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
788 conn
= hci_conn_hash_lookup_handle(hdev
, handle
);
792 conn
->link_mode
|= HCI_LM_ENCRYPT
;
794 conn
->link_mode
&= ~HCI_LM_ENCRYPT
;
797 clear_bit(HCI_CONN_ENCRYPT_PEND
, &conn
->pend
);
799 hci_encrypt_cfm(conn
, ev
->status
, ev
->encrypt
);
802 hci_dev_unlock(hdev
);
805 /* Change Connection Link Key Complete */
806 static inline void hci_change_conn_link_key_complete_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
808 struct hci_ev_change_conn_link_key_complete
*ev
= (struct hci_ev_change_conn_link_key_complete
*) skb
->data
;
809 struct hci_conn
*conn
= NULL
;
810 __u16 handle
= __le16_to_cpu(ev
->handle
);
812 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
816 conn
= hci_conn_hash_lookup_handle(hdev
, handle
);
819 conn
->link_mode
|= HCI_LM_SECURE
;
821 clear_bit(HCI_CONN_AUTH_PEND
, &conn
->pend
);
823 hci_key_change_cfm(conn
, ev
->status
);
826 hci_dev_unlock(hdev
);
829 /* Pin Code Request*/
830 static inline void hci_pin_code_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
834 /* Link Key Request */
835 static inline void hci_link_key_request_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
839 /* Link Key Notification */
840 static inline void hci_link_key_notify_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
845 static inline void hci_clock_offset_evt(struct hci_dev
*hdev
, struct sk_buff
*skb
)
847 struct hci_ev_clock_offset
*ev
= (struct hci_ev_clock_offset
*) skb
->data
;
848 struct hci_conn
*conn
= NULL
;
849 __u16 handle
= __le16_to_cpu(ev
->handle
);
851 BT_DBG("%s status %d", hdev
->name
, ev
->status
);
855 conn
= hci_conn_hash_lookup_handle(hdev
, handle
);
856 if (conn
&& !ev
->status
) {
857 struct inquiry_entry
*ie
;
859 if ((ie
= hci_inquiry_cache_lookup(hdev
, &conn
->dst
))) {
860 ie
->data
.clock_offset
= ev
->clock_offset
;
861 ie
->timestamp
= jiffies
;
865 hci_dev_unlock(hdev
);
868 void hci_event_packet(struct hci_dev
*hdev
, struct sk_buff
*skb
)
870 struct hci_event_hdr
*hdr
= (struct hci_event_hdr
*) skb
->data
;
871 struct hci_ev_cmd_complete
*ec
;
872 struct hci_ev_cmd_status
*cs
;
873 u16 opcode
, ocf
, ogf
;
875 skb_pull(skb
, HCI_EVENT_HDR_SIZE
);
877 BT_DBG("%s evt 0x%x", hdev
->name
, hdr
->evt
);
880 case HCI_EV_NUM_COMP_PKTS
:
881 hci_num_comp_pkts_evt(hdev
, skb
);
884 case HCI_EV_INQUIRY_COMPLETE
:
885 hci_inquiry_complete_evt(hdev
, skb
);
888 case HCI_EV_INQUIRY_RESULT
:
889 hci_inquiry_result_evt(hdev
, skb
);
892 case HCI_EV_INQUIRY_RESULT_WITH_RSSI
:
893 hci_inquiry_result_with_rssi_evt(hdev
, skb
);
896 case HCI_EV_CONN_REQUEST
:
897 hci_conn_request_evt(hdev
, skb
);
900 case HCI_EV_CONN_COMPLETE
:
901 hci_conn_complete_evt(hdev
, skb
);
904 case HCI_EV_DISCONN_COMPLETE
:
905 hci_disconn_complete_evt(hdev
, skb
);
908 case HCI_EV_ROLE_CHANGE
:
909 hci_role_change_evt(hdev
, skb
);
912 case HCI_EV_AUTH_COMPLETE
:
913 hci_auth_complete_evt(hdev
, skb
);
916 case HCI_EV_ENCRYPT_CHANGE
:
917 hci_encrypt_change_evt(hdev
, skb
);
920 case HCI_EV_CHANGE_CONN_LINK_KEY_COMPLETE
:
921 hci_change_conn_link_key_complete_evt(hdev
, skb
);
924 case HCI_EV_PIN_CODE_REQ
:
925 hci_pin_code_request_evt(hdev
, skb
);
928 case HCI_EV_LINK_KEY_REQ
:
929 hci_link_key_request_evt(hdev
, skb
);
932 case HCI_EV_LINK_KEY_NOTIFY
:
933 hci_link_key_notify_evt(hdev
, skb
);
936 case HCI_EV_CLOCK_OFFSET
:
937 hci_clock_offset_evt(hdev
, skb
);
940 case HCI_EV_CMD_STATUS
:
941 cs
= (struct hci_ev_cmd_status
*) skb
->data
;
942 skb_pull(skb
, sizeof(cs
));
944 opcode
= __le16_to_cpu(cs
->opcode
);
945 ogf
= hci_opcode_ogf(opcode
);
946 ocf
= hci_opcode_ocf(opcode
);
950 hci_cs_info_param(hdev
, ocf
, cs
->status
);
954 hci_cs_host_ctl(hdev
, ocf
, cs
->status
);
958 hci_cs_link_ctl(hdev
, ocf
, cs
->status
);
961 case OGF_LINK_POLICY
:
962 hci_cs_link_policy(hdev
, ocf
, cs
->status
);
966 BT_DBG("%s Command Status OGF %x", hdev
->name
, ogf
);
971 atomic_set(&hdev
->cmd_cnt
, 1);
972 if (!skb_queue_empty(&hdev
->cmd_q
))
977 case HCI_EV_CMD_COMPLETE
:
978 ec
= (struct hci_ev_cmd_complete
*) skb
->data
;
979 skb_pull(skb
, sizeof(*ec
));
981 opcode
= __le16_to_cpu(ec
->opcode
);
982 ogf
= hci_opcode_ogf(opcode
);
983 ocf
= hci_opcode_ocf(opcode
);
987 hci_cc_info_param(hdev
, ocf
, skb
);
991 hci_cc_host_ctl(hdev
, ocf
, skb
);
995 hci_cc_link_ctl(hdev
, ocf
, skb
);
998 case OGF_LINK_POLICY
:
999 hci_cc_link_policy(hdev
, ocf
, skb
);
1003 BT_DBG("%s Command Completed OGF %x", hdev
->name
, ogf
);
1008 atomic_set(&hdev
->cmd_cnt
, 1);
1009 if (!skb_queue_empty(&hdev
->cmd_q
))
1010 hci_sched_cmd(hdev
);
1016 hdev
->stat
.evt_rx
++;
1019 /* Generate internal stack event */
1020 void hci_si_event(struct hci_dev
*hdev
, int type
, int dlen
, void *data
)
1022 struct hci_event_hdr
*hdr
;
1023 struct hci_ev_stack_internal
*ev
;
1024 struct sk_buff
*skb
;
1026 skb
= bt_skb_alloc(HCI_EVENT_HDR_SIZE
+ sizeof(*ev
) + dlen
, GFP_ATOMIC
);
1030 hdr
= (void *) skb_put(skb
, HCI_EVENT_HDR_SIZE
);
1031 hdr
->evt
= HCI_EV_STACK_INTERNAL
;
1032 hdr
->plen
= sizeof(*ev
) + dlen
;
1034 ev
= (void *) skb_put(skb
, sizeof(*ev
) + dlen
);
1036 memcpy(ev
->data
, data
, dlen
);
1038 skb
->pkt_type
= HCI_EVENT_PKT
;
1039 skb
->dev
= (void *) hdev
;
1040 hci_send_to_sock(hdev
, skb
);
1043 EXPORT_SYMBOL(hci_si_event
);