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.
28 * $Id: hci_event.c,v 1.1.1.1 2005/04/11 02:51:12 jack Exp $
31 #include <linux/config.h>
32 #include <linux/module.h>
34 #include <linux/types.h>
35 #include <linux/errno.h>
36 #include <linux/kernel.h>
37 #include <linux/major.h>
38 #include <linux/sched.h>
39 #include <linux/slab.h>
40 #include <linux/poll.h>
41 #include <linux/fcntl.h>
42 #include <linux/init.h>
43 #include <linux/skbuff.h>
44 #include <linux/interrupt.h>
45 #include <linux/notifier.h>
48 #include <asm/system.h>
49 #include <asm/uaccess.h>
50 #include <asm/unaligned.h>
52 #include <net/bluetooth/bluetooth.h>
53 #include <net/bluetooth/hci_core.h>
55 #ifndef HCI_CORE_DEBUG
57 #define BT_DBG( A... )
60 /* Handle HCI Event packets */
62 /* Command Complete OGF LINK_CTL */
63 static void hci_cc_link_ctl(struct hci_dev *hdev, __u16 ocf, struct sk_buff *skb)
65 BT_DBG("%s ocf 0x%x", hdev->name, ocf);
69 BT_DBG("%s Command complete: ogf LINK_CTL ocf %x", hdev->name, ocf);
74 /* Command Complete OGF LINK_POLICY */
75 static void hci_cc_link_policy(struct hci_dev *hdev, __u16 ocf, struct sk_buff *skb)
77 struct hci_conn *conn;
78 role_discovery_rp *rd;
80 BT_DBG("%s ocf 0x%x", hdev->name, ocf);
83 case OCF_ROLE_DISCOVERY:
84 rd = (void *) skb->data;
91 conn = conn_hash_lookup_handle(hdev, __le16_to_cpu(rd->handle));
94 conn->link_mode &= ~HCI_LM_MASTER;
96 conn->link_mode |= HCI_LM_MASTER;
103 BT_DBG("%s: Command complete: ogf LINK_POLICY ocf %x",
109 /* Command Complete OGF HOST_CTL */
110 static void hci_cc_host_ctl(struct hci_dev *hdev, __u16 ocf, struct sk_buff *skb)
115 BT_DBG("%s ocf 0x%x", hdev->name, ocf);
119 status = *((__u8 *) skb->data);
120 hci_req_complete(hdev, status);
123 case OCF_SET_EVENT_FLT:
124 status = *((__u8 *) skb->data);
126 BT_DBG("%s SET_EVENT_FLT failed %d", hdev->name, status);
128 BT_DBG("%s SET_EVENT_FLT succeseful", hdev->name);
132 case OCF_WRITE_AUTH_ENABLE:
133 sent = hci_sent_cmd_data(hdev, OGF_HOST_CTL, OCF_WRITE_AUTH_ENABLE);
137 status = *((__u8 *) skb->data);
138 param = *((__u8 *) sent);
141 if (param == AUTH_ENABLED)
142 set_bit(HCI_AUTH, &hdev->flags);
144 clear_bit(HCI_AUTH, &hdev->flags);
146 hci_req_complete(hdev, status);
149 case OCF_WRITE_ENCRYPT_MODE:
150 sent = hci_sent_cmd_data(hdev, OGF_HOST_CTL, OCF_WRITE_ENCRYPT_MODE);
154 status = *((__u8 *) skb->data);
155 param = *((__u8 *) sent);
159 set_bit(HCI_ENCRYPT, &hdev->flags);
161 clear_bit(HCI_ENCRYPT, &hdev->flags);
163 hci_req_complete(hdev, status);
166 case OCF_WRITE_CA_TIMEOUT:
167 status = *((__u8 *) skb->data);
169 BT_DBG("%s OCF_WRITE_CA_TIMEOUT failed %d", hdev->name, status);
171 BT_DBG("%s OCF_WRITE_CA_TIMEOUT succeseful", hdev->name);
175 case OCF_WRITE_PG_TIMEOUT:
176 status = *((__u8 *) skb->data);
178 BT_DBG("%s OCF_WRITE_PG_TIMEOUT failed %d", hdev->name, status);
180 BT_DBG("%s: OCF_WRITE_PG_TIMEOUT succeseful", hdev->name);
184 case OCF_WRITE_SCAN_ENABLE:
185 sent = hci_sent_cmd_data(hdev, OGF_HOST_CTL, OCF_WRITE_SCAN_ENABLE);
188 status = *((__u8 *) skb->data);
189 param = *((__u8 *) sent);
191 BT_DBG("param 0x%x", param);
194 clear_bit(HCI_PSCAN, &hdev->flags);
195 clear_bit(HCI_ISCAN, &hdev->flags);
196 if (param & SCAN_INQUIRY)
197 set_bit(HCI_ISCAN, &hdev->flags);
199 if (param & SCAN_PAGE)
200 set_bit(HCI_PSCAN, &hdev->flags);
202 hci_req_complete(hdev, status);
205 case OCF_HOST_BUFFER_SIZE:
206 status = *((__u8 *) skb->data);
208 BT_DBG("%s OCF_BUFFER_SIZE failed %d", hdev->name, status);
209 hci_req_complete(hdev, status);
214 BT_DBG("%s Command complete: ogf HOST_CTL ocf %x", hdev->name, ocf);
219 /* Command Complete OGF INFO_PARAM */
220 static void hci_cc_info_param(struct hci_dev *hdev, __u16 ocf, struct sk_buff *skb)
222 read_local_features_rp *lf;
223 read_buffer_size_rp *bs;
226 BT_DBG("%s ocf 0x%x", hdev->name, ocf);
229 case OCF_READ_LOCAL_FEATURES:
230 lf = (read_local_features_rp *) skb->data;
233 BT_DBG("%s READ_LOCAL_FEATURES failed %d", hdev->name, lf->status);
237 memcpy(hdev->features, lf->features, sizeof(hdev->features));
239 /* Adjust default settings according to features
240 * supported by device. */
241 if (hdev->features[0] & LMP_3SLOT)
242 hdev->pkt_type |= (HCI_DM3 | HCI_DH3);
244 if (hdev->features[0] & LMP_5SLOT)
245 hdev->pkt_type |= (HCI_DM5 | HCI_DH5);
247 if (hdev->features[1] & LMP_HV2)
248 hdev->pkt_type |= (HCI_HV2);
250 if (hdev->features[1] & LMP_HV3)
251 hdev->pkt_type |= (HCI_HV3);
253 BT_DBG("%s: features 0x%x 0x%x 0x%x", hdev->name, lf->features[0], lf->features[1], lf->features[2]);
257 case OCF_READ_BUFFER_SIZE:
258 bs = (read_buffer_size_rp *) skb->data;
261 BT_DBG("%s READ_BUFFER_SIZE failed %d", hdev->name, bs->status);
262 hci_req_complete(hdev, bs->status);
266 hdev->acl_mtu = __le16_to_cpu(bs->acl_mtu);
267 hdev->sco_mtu = bs->sco_mtu ? bs->sco_mtu : 64;
268 hdev->acl_pkts = hdev->acl_cnt = __le16_to_cpu(bs->acl_max_pkt);
269 hdev->sco_pkts = hdev->sco_cnt = __le16_to_cpu(bs->sco_max_pkt);
271 BT_DBG("%s mtu: acl %d, sco %d max_pkt: acl %d, sco %d", hdev->name,
272 hdev->acl_mtu, hdev->sco_mtu, hdev->acl_pkts, hdev->sco_pkts);
275 case OCF_READ_BD_ADDR:
276 ba = (read_bd_addr_rp *) skb->data;
279 bacpy(&hdev->bdaddr, &ba->bdaddr);
281 BT_DBG("%s: READ_BD_ADDR failed %d", hdev->name, ba->status);
284 hci_req_complete(hdev, ba->status);
288 BT_DBG("%s Command complete: ogf INFO_PARAM ocf %x", hdev->name, ocf);
293 /* Command Status OGF LINK_CTL */
294 static inline void hci_cs_create_conn(struct hci_dev *hdev, __u8 status)
296 struct hci_conn *conn;
297 create_conn_cp *cc = hci_sent_cmd_data(hdev, OGF_LINK_CTL, OCF_CREATE_CONN);
304 conn = conn_hash_lookup_ba(hdev, ACL_LINK, &cc->bdaddr);
306 BT_DBG("%s status 0x%x bdaddr %s conn %p", hdev->name,
307 status, batostr(&cc->bdaddr), conn);
311 conn->state = BT_CLOSED;
312 hci_proto_connect_cfm(conn, status);
317 conn = hci_conn_add(hdev, ACL_LINK, &cc->bdaddr);
320 conn->link_mode |= HCI_LM_MASTER;
322 BT_ERR("No memmory for new connection");
326 hci_dev_unlock(hdev);
329 static void hci_cs_link_ctl(struct hci_dev *hdev, __u16 ocf, __u8 status)
331 BT_DBG("%s ocf 0x%x", hdev->name, ocf);
334 case OCF_CREATE_CONN:
335 hci_cs_create_conn(hdev, status);
340 struct hci_conn *acl, *sco;
341 add_sco_cp *cp = hci_sent_cmd_data(hdev,
342 OGF_LINK_CTL, OCF_ADD_SCO);
348 handle = __le16_to_cpu(cp->handle);
350 BT_DBG("%s Add SCO error: handle %d status 0x%x", hdev->name, handle, status);
354 acl = conn_hash_lookup_handle(hdev, handle);
355 if (acl && (sco = acl->link)) {
356 sco->state = BT_CLOSED;
357 hci_proto_connect_cfm(sco, status);
361 hci_dev_unlock(hdev);
367 BT_DBG("%s Inquiry error: status 0x%x", hdev->name, status);
368 hci_req_complete(hdev, status);
370 set_bit(HCI_INQUIRY, &hdev->flags);
375 BT_DBG("%s Command status: ogf LINK_CTL ocf %x status %d",
376 hdev->name, ocf, status);
381 /* Command Status OGF LINK_POLICY */
382 static void hci_cs_link_policy(struct hci_dev *hdev, __u16 ocf, __u8 status)
384 BT_DBG("%s ocf 0x%x", hdev->name, ocf);
388 BT_DBG("%s Command status: ogf HOST_POLICY ocf %x", hdev->name, ocf);
393 /* Command Status OGF HOST_CTL */
394 static void hci_cs_host_ctl(struct hci_dev *hdev, __u16 ocf, __u8 status)
396 BT_DBG("%s ocf 0x%x", hdev->name, ocf);
400 BT_DBG("%s Command status: ogf HOST_CTL ocf %x", hdev->name, ocf);
405 /* Command Status OGF INFO_PARAM */
406 static void hci_cs_info_param(struct hci_dev *hdev, __u16 ocf, __u8 status)
408 BT_DBG("%s: hci_cs_info_param: ocf 0x%x", hdev->name, ocf);
412 BT_DBG("%s Command status: ogf INFO_PARAM ocf %x", hdev->name, ocf);
417 /* Inquiry Complete */
418 static inline void hci_inquiry_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
420 __u8 status = *((__u8 *) skb->data);
422 BT_DBG("%s status %d", hdev->name, status);
424 clear_bit(HCI_INQUIRY, &hdev->flags);
425 hci_req_complete(hdev, status);
429 static inline void hci_inquiry_result_evt(struct hci_dev *hdev, struct sk_buff *skb)
431 inquiry_info *info = (inquiry_info *) (skb->data + 1);
432 int num_rsp = *((__u8 *) skb->data);
434 BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
437 for (; num_rsp; num_rsp--)
438 inquiry_cache_update(hdev, info++);
439 hci_dev_unlock(hdev);
442 /* Connect Request */
443 static inline void hci_conn_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
445 evt_conn_request *cr = (evt_conn_request *) skb->data;
446 int mask = hdev->link_mode;
448 BT_DBG("%s Connection request: %s type 0x%x", hdev->name,
449 batostr(&cr->bdaddr), cr->link_type);
451 mask |= hci_proto_connect_ind(hdev, &cr->bdaddr, cr->link_type);
453 if (mask & HCI_LM_ACCEPT) {
454 /* Connection accepted */
455 struct hci_conn *conn;
456 accept_conn_req_cp ac;
459 conn = conn_hash_lookup_ba(hdev, cr->link_type, &cr->bdaddr);
461 if (!(conn = hci_conn_add(hdev, cr->link_type, &cr->bdaddr))) {
462 BT_ERR("No memmory for new connection");
463 hci_dev_unlock(hdev);
467 conn->state = BT_CONNECT;
468 hci_dev_unlock(hdev);
470 bacpy(&ac.bdaddr, &cr->bdaddr);
472 if (lmp_rswitch_capable(hdev) && (mask & HCI_LM_MASTER))
473 ac.role = 0x00; /* Become master */
475 ac.role = 0x01; /* Remain slave */
477 hci_send_cmd(hdev, OGF_LINK_CTL, OCF_ACCEPT_CONN_REQ,
478 ACCEPT_CONN_REQ_CP_SIZE, &ac);
480 /* Connection rejected */
481 reject_conn_req_cp rc;
483 bacpy(&rc.bdaddr, &cr->bdaddr);
485 hci_send_cmd(hdev, OGF_LINK_CTL, OCF_REJECT_CONN_REQ,
486 REJECT_CONN_REQ_CP_SIZE, &rc);
490 /* Connect Complete */
491 static inline void hci_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
493 evt_conn_complete *cc = (evt_conn_complete *) skb->data;
494 struct hci_conn *conn = NULL;
496 BT_DBG("%s", hdev->name);
500 conn = conn_hash_lookup_ba(hdev, cc->link_type, &cc->bdaddr);
502 hci_dev_unlock(hdev);
507 conn->handle = __le16_to_cpu(cc->handle);
508 conn->state = BT_CONNECTED;
510 if (test_bit(HCI_AUTH, &hdev->flags))
511 conn->link_mode |= HCI_LM_AUTH;
513 if (test_bit(HCI_ENCRYPT, &hdev->flags))
514 conn->link_mode |= HCI_LM_ENCRYPT;
517 /* Set link policy */
518 if (conn->type == ACL_LINK && hdev->link_policy) {
519 write_link_policy_cp lp;
520 lp.handle = cc->handle;
521 lp.policy = __cpu_to_le16(hdev->link_policy);
522 hci_send_cmd(hdev, OGF_LINK_POLICY, OCF_WRITE_LINK_POLICY,
523 WRITE_LINK_POLICY_CP_SIZE, &lp);
526 /* Set packet type for incomming connection */
528 change_conn_ptype_cp cp;
529 cp.handle = cc->handle;
530 cp.pkt_type = (conn->type == ACL_LINK) ?
531 __cpu_to_le16(hdev->pkt_type & ACL_PTYPE_MASK):
532 __cpu_to_le16(hdev->pkt_type & SCO_PTYPE_MASK);
534 hci_send_cmd(hdev, OGF_LINK_CTL, OCF_CHANGE_CONN_PTYPE,
535 CHANGE_CONN_PTYPE_CP_SIZE, &cp);
538 conn->state = BT_CLOSED;
540 if (conn->type == ACL_LINK) {
541 struct hci_conn *sco = conn->link;
544 hci_add_sco(sco, conn->handle);
546 hci_proto_connect_cfm(sco, cc->status);
552 hci_proto_connect_cfm(conn, cc->status);
556 hci_dev_unlock(hdev);
559 /* Disconnect Complete */
560 static inline void hci_disconn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
562 evt_disconn_complete *dc = (evt_disconn_complete *) skb->data;
563 struct hci_conn *conn = NULL;
564 __u16 handle = __le16_to_cpu(dc->handle);
566 BT_DBG("%s status %d", hdev->name, dc->status);
573 conn = conn_hash_lookup_handle(hdev, handle);
575 conn->state = BT_CLOSED;
576 hci_proto_disconn_ind(conn, dc->reason);
580 hci_dev_unlock(hdev);
583 /* Number of completed packets */
584 static inline void hci_num_comp_pkts_evt(struct hci_dev *hdev, struct sk_buff *skb)
586 evt_num_comp_pkts *nc = (evt_num_comp_pkts *) skb->data;
590 skb_pull(skb, EVT_NUM_COMP_PKTS_SIZE);
592 BT_DBG("%s num_hndl %d", hdev->name, nc->num_hndl);
594 if (skb->len < nc->num_hndl * 4) {
595 BT_DBG("%s bad parameters", hdev->name);
599 tasklet_disable(&hdev->tx_task);
601 for (i = 0, ptr = (__u16 *) skb->data; i < nc->num_hndl; i++) {
602 struct hci_conn *conn;
605 handle = __le16_to_cpu(get_unaligned(ptr++));
606 count = __le16_to_cpu(get_unaligned(ptr++));
608 conn = conn_hash_lookup_handle(hdev, handle);
612 if (conn->type == SCO_LINK) {
613 if ((hdev->sco_cnt += count) > hdev->sco_pkts)
614 hdev->sco_cnt = hdev->sco_pkts;
616 if ((hdev->acl_cnt += count) > hdev->acl_pkts)
617 hdev->acl_cnt = hdev->acl_pkts;
623 tasklet_enable(&hdev->tx_task);
627 static inline void hci_role_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
629 evt_role_change *rc = (evt_role_change *) skb->data;
630 struct hci_conn *conn = NULL;
632 BT_DBG("%s status %d", hdev->name, rc->status);
639 conn = conn_hash_lookup_ba(hdev, ACL_LINK, &rc->bdaddr);
642 conn->link_mode &= ~HCI_LM_MASTER;
644 conn->link_mode |= HCI_LM_MASTER;
647 hci_dev_unlock(hdev);
650 /* Authentication Complete */
651 static inline void hci_auth_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
653 evt_auth_complete *ac = (evt_auth_complete *) skb->data;
654 struct hci_conn *conn = NULL;
655 __u16 handle = __le16_to_cpu(ac->handle);
657 BT_DBG("%s status %d", hdev->name, ac->status);
661 conn = conn_hash_lookup_handle(hdev, handle);
664 conn->link_mode |= HCI_LM_AUTH;
665 clear_bit(HCI_CONN_AUTH_PEND, &conn->pend);
667 hci_proto_auth_cfm(conn, ac->status);
669 if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend)) {
671 set_conn_encrypt_cp ce;
672 ce.handle = __cpu_to_le16(conn->handle);
674 hci_send_cmd(conn->hdev, OGF_LINK_CTL,
675 OCF_SET_CONN_ENCRYPT,
676 SET_CONN_ENCRYPT_CP_SIZE, &ce);
678 clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend);
679 hci_proto_encrypt_cfm(conn, ac->status);
684 hci_dev_unlock(hdev);
687 /* Encryption Change */
688 static inline void hci_encrypt_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
690 evt_encrypt_change *ec = (evt_encrypt_change *) skb->data;
691 struct hci_conn *conn = NULL;
692 __u16 handle = __le16_to_cpu(ec->handle);
694 BT_DBG("%s status %d", hdev->name, ec->status);
698 conn = conn_hash_lookup_handle(hdev, handle);
702 conn->link_mode |= HCI_LM_ENCRYPT;
704 conn->link_mode &= ~HCI_LM_ENCRYPT;
706 clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend);
708 hci_proto_encrypt_cfm(conn, ec->status);
711 hci_dev_unlock(hdev);
714 void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb)
716 hci_event_hdr *he = (hci_event_hdr *) skb->data;
718 evt_cmd_complete *ec;
719 __u16 opcode, ocf, ogf;
721 skb_pull(skb, HCI_EVENT_HDR_SIZE);
723 BT_DBG("%s evt 0x%x", hdev->name, he->evt);
726 case EVT_NUM_COMP_PKTS:
727 hci_num_comp_pkts_evt(hdev, skb);
730 case EVT_INQUIRY_COMPLETE:
731 hci_inquiry_complete_evt(hdev, skb);
734 case EVT_INQUIRY_RESULT:
735 hci_inquiry_result_evt(hdev, skb);
738 case EVT_CONN_REQUEST:
739 hci_conn_request_evt(hdev, skb);
742 case EVT_CONN_COMPLETE:
743 hci_conn_complete_evt(hdev, skb);
746 case EVT_DISCONN_COMPLETE:
747 hci_disconn_complete_evt(hdev, skb);
750 case EVT_ROLE_CHANGE:
751 hci_role_change_evt(hdev, skb);
754 case EVT_AUTH_COMPLETE:
755 hci_auth_complete_evt(hdev, skb);
758 case EVT_ENCRYPT_CHANGE:
759 hci_encrypt_change_evt(hdev, skb);
763 cs = (evt_cmd_status *) skb->data;
764 skb_pull(skb, EVT_CMD_STATUS_SIZE);
766 opcode = __le16_to_cpu(cs->opcode);
767 ogf = cmd_opcode_ogf(opcode);
768 ocf = cmd_opcode_ocf(opcode);
772 hci_cs_info_param(hdev, ocf, cs->status);
776 hci_cs_host_ctl(hdev, ocf, cs->status);
780 hci_cs_link_ctl(hdev, ocf, cs->status);
783 case OGF_LINK_POLICY:
784 hci_cs_link_policy(hdev, ocf, cs->status);
788 BT_DBG("%s Command Status OGF %x", hdev->name, ogf);
793 atomic_set(&hdev->cmd_cnt, 1);
794 if (!skb_queue_empty(&hdev->cmd_q))
799 case EVT_CMD_COMPLETE:
800 ec = (evt_cmd_complete *) skb->data;
801 skb_pull(skb, EVT_CMD_COMPLETE_SIZE);
803 opcode = __le16_to_cpu(ec->opcode);
804 ogf = cmd_opcode_ogf(opcode);
805 ocf = cmd_opcode_ocf(opcode);
809 hci_cc_info_param(hdev, ocf, skb);
813 hci_cc_host_ctl(hdev, ocf, skb);
817 hci_cc_link_ctl(hdev, ocf, skb);
820 case OGF_LINK_POLICY:
821 hci_cc_link_policy(hdev, ocf, skb);
825 BT_DBG("%s Command Completed OGF %x", hdev->name, ogf);
830 atomic_set(&hdev->cmd_cnt, 1);
831 if (!skb_queue_empty(&hdev->cmd_q))
841 /* General internal stack event */
842 void hci_si_event(struct hci_dev *hdev, int type, int dlen, void *data)
845 evt_stack_internal *si;
850 size = HCI_EVENT_HDR_SIZE + EVT_STACK_INTERNAL_SIZE + dlen;
851 skb = bluez_skb_alloc(size, GFP_ATOMIC);
855 ptr = skb_put(skb, size);
858 eh->evt = EVT_STACK_INTERNAL;
859 eh->plen = EVT_STACK_INTERNAL_SIZE + dlen;
860 ptr += HCI_EVENT_HDR_SIZE;
864 memcpy(si->data, data, dlen);
866 skb->pkt_type = HCI_EVENT_PKT;
867 skb->dev = (void *) hdev;
868 hci_send_to_sock(hdev, skb);