Linux kernel & device driver programming

Cross-Referenced Linux and Device Driver Code

[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ]
Version: [ 2.6.11.8 ] [ 2.6.25 ] [ 2.6.25.8 ] [ 2.6.31.13 ] Architecture: [ i386 ]
  1 /*
  2    BlueZ - Bluetooth protocol stack for Linux
  3    Copyright (C) 2000-2001 Qualcomm Incorporated
  4 
  5    Written 2000,2001 by Maxim Krasnyansky <maxk@qualcomm.com>
  6 
  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;
 10 
 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.
 19 
 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.
 23 */
 24 
 25 /* Bluetooth HCI event handling. */
 26 
 27 #include <linux/module.h>
 28 
 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>
 39 #include <net/sock.h>
 40 
 41 #include <asm/system.h>
 42 #include <asm/uaccess.h>
 43 #include <asm/unaligned.h>
 44 
 45 #include <net/bluetooth/bluetooth.h>
 46 #include <net/bluetooth/hci_core.h>
 47 
 48 #ifndef CONFIG_BT_HCI_CORE_DEBUG
 49 #undef  BT_DBG
 50 #define BT_DBG(D...)
 51 #endif
 52 
 53 /* Handle HCI Event packets */
 54 
 55 static void hci_cc_inquiry_cancel(struct hci_dev *hdev, struct sk_buff *skb)
 56 {
 57         __u8 status = *((__u8 *) skb->data);
 58 
 59         BT_DBG("%s status 0x%x", hdev->name, status);
 60 
 61         if (status)
 62                 return;
 63 
 64         clear_bit(HCI_INQUIRY, &hdev->flags);
 65 
 66         hci_req_complete(hdev, status);
 67 
 68         hci_conn_check_pending(hdev);
 69 }
 70 
 71 static void hci_cc_exit_periodic_inq(struct hci_dev *hdev, struct sk_buff *skb)
 72 {
 73         __u8 status = *((__u8 *) skb->data);
 74 
 75         BT_DBG("%s status 0x%x", hdev->name, status);
 76 
 77         if (status)
 78                 return;
 79 
 80         clear_bit(HCI_INQUIRY, &hdev->flags);
 81 
 82         hci_conn_check_pending(hdev);
 83 }
 84 
 85 static void hci_cc_remote_name_req_cancel(struct hci_dev *hdev, struct sk_buff *skb)
 86 {
 87         BT_DBG("%s", hdev->name);
 88 }
 89 
 90 static void hci_cc_role_discovery(struct hci_dev *hdev, struct sk_buff *skb)
 91 {
 92         struct hci_rp_role_discovery *rp = (void *) skb->data;
 93         struct hci_conn *conn;
 94 
 95         BT_DBG("%s status 0x%x", hdev->name, rp->status);
 96 
 97         if (rp->status)
 98                 return;
 99 
100         hci_dev_lock(hdev);
101 
102         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
103         if (conn) {
104                 if (rp->role)
105                         conn->link_mode &= ~HCI_LM_MASTER;
106                 else
107                         conn->link_mode |= HCI_LM_MASTER;
108         }
109 
110         hci_dev_unlock(hdev);
111 }
112 
113 static void hci_cc_write_link_policy(struct hci_dev *hdev, struct sk_buff *skb)
114 {
115         struct hci_rp_write_link_policy *rp = (void *) skb->data;
116         struct hci_conn *conn;
117         void *sent;
118 
119         BT_DBG("%s status 0x%x", hdev->name, rp->status);
120 
121         if (rp->status)
122                 return;
123 
124         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_LINK_POLICY);
125         if (!sent)
126                 return;
127 
128         hci_dev_lock(hdev);
129 
130         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(rp->handle));
131         if (conn) {
132                 __le16 policy = get_unaligned((__le16 *) (sent + 2));
133                 conn->link_policy = __le16_to_cpu(policy);
134         }
135 
136         hci_dev_unlock(hdev);
137 }
138 
139 static void hci_cc_reset(struct hci_dev *hdev, struct sk_buff *skb)
140 {
141         __u8 status = *((__u8 *) skb->data);
142 
143         BT_DBG("%s status 0x%x", hdev->name, status);
144 
145         hci_req_complete(hdev, status);
146 }
147 
148 static void hci_cc_write_local_name(struct hci_dev *hdev, struct sk_buff *skb)
149 {
150         __u8 status = *((__u8 *) skb->data);
151         void *sent;
152 
153         BT_DBG("%s status 0x%x", hdev->name, status);
154 
155         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_LOCAL_NAME);
156         if (!sent)
157                 return;
158 
159         if (!status)
160                 memcpy(hdev->dev_name, sent, 248);
161 }
162 
163 static void hci_cc_read_local_name(struct hci_dev *hdev, struct sk_buff *skb)
164 {
165         struct hci_rp_read_local_name *rp = (void *) skb->data;
166 
167         BT_DBG("%s status 0x%x", hdev->name, rp->status);
168 
169         if (rp->status)
170                 return;
171 
172         memcpy(hdev->dev_name, rp->name, 248);
173 }
174 
175 static void hci_cc_write_auth_enable(struct hci_dev *hdev, struct sk_buff *skb)
176 {
177         __u8 status = *((__u8 *) skb->data);
178         void *sent;
179 
180         BT_DBG("%s status 0x%x", hdev->name, status);
181 
182         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_AUTH_ENABLE);
183         if (!sent)
184                 return;
185 
186         if (!status) {
187                 __u8 param = *((__u8 *) sent);
188 
189                 if (param == AUTH_ENABLED)
190                         set_bit(HCI_AUTH, &hdev->flags);
191                 else
192                         clear_bit(HCI_AUTH, &hdev->flags);
193         }
194 
195         hci_req_complete(hdev, status);
196 }
197 
198 static void hci_cc_write_encrypt_mode(struct hci_dev *hdev, struct sk_buff *skb)
199 {
200         __u8 status = *((__u8 *) skb->data);
201         void *sent;
202 
203         BT_DBG("%s status 0x%x", hdev->name, status);
204 
205         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_ENCRYPT_MODE);
206         if (!sent)
207                 return;
208 
209         if (!status) {
210                 __u8 param = *((__u8 *) sent);
211 
212                 if (param)
213                         set_bit(HCI_ENCRYPT, &hdev->flags);
214                 else
215                         clear_bit(HCI_ENCRYPT, &hdev->flags);
216         }
217 
218         hci_req_complete(hdev, status);
219 }
220 
221 static void hci_cc_write_scan_enable(struct hci_dev *hdev, struct sk_buff *skb)
222 {
223         __u8 status = *((__u8 *) skb->data);
224         void *sent;
225 
226         BT_DBG("%s status 0x%x", hdev->name, status);
227 
228         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_SCAN_ENABLE);
229         if (!sent)
230                 return;
231 
232         if (!status) {
233                 __u8 param = *((__u8 *) sent);
234 
235                 clear_bit(HCI_PSCAN, &hdev->flags);
236                 clear_bit(HCI_ISCAN, &hdev->flags);
237 
238                 if (param & SCAN_INQUIRY)
239                         set_bit(HCI_ISCAN, &hdev->flags);
240 
241                 if (param & SCAN_PAGE)
242                         set_bit(HCI_PSCAN, &hdev->flags);
243         }
244 
245         hci_req_complete(hdev, status);
246 }
247 
248 static void hci_cc_read_class_of_dev(struct hci_dev *hdev, struct sk_buff *skb)
249 {
250         struct hci_rp_read_class_of_dev *rp = (void *) skb->data;
251 
252         BT_DBG("%s status 0x%x", hdev->name, rp->status);
253 
254         if (rp->status)
255                 return;
256 
257         memcpy(hdev->dev_class, rp->dev_class, 3);
258 
259         BT_DBG("%s class 0x%.2x%.2x%.2x", hdev->name,
260                 hdev->dev_class[2], hdev->dev_class[1], hdev->dev_class[0]);
261 }
262 
263 static void hci_cc_write_class_of_dev(struct hci_dev *hdev, struct sk_buff *skb)
264 {
265         __u8 status = *((__u8 *) skb->data);
266         void *sent;
267 
268         BT_DBG("%s status 0x%x", hdev->name, status);
269 
270         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_CLASS_OF_DEV);
271         if (!sent)
272                 return;
273 
274         if (!status)
275                 memcpy(hdev->dev_class, sent, 3);
276 }
277 
278 static void hci_cc_read_voice_setting(struct hci_dev *hdev, struct sk_buff *skb)
279 {
280         struct hci_rp_read_voice_setting *rp = (void *) skb->data;
281         __u16 setting;
282 
283         BT_DBG("%s status 0x%x", hdev->name, rp->status);
284 
285         if (rp->status)
286                 return;
287 
288         setting = __le16_to_cpu(rp->voice_setting);
289 
290         if (hdev->voice_setting == setting )
291                 return;
292 
293         hdev->voice_setting = setting;
294 
295         BT_DBG("%s voice setting 0x%04x", hdev->name, setting);
296 
297         if (hdev->notify) {
298                 tasklet_disable(&hdev->tx_task);
299                 hdev->notify(hdev, HCI_NOTIFY_VOICE_SETTING);
300                 tasklet_enable(&hdev->tx_task);
301         }
302 }
303 
304 static void hci_cc_write_voice_setting(struct hci_dev *hdev, struct sk_buff *skb)
305 {
306         __u8 status = *((__u8 *) skb->data);
307         void *sent;
308 
309         BT_DBG("%s status 0x%x", hdev->name, status);
310 
311         sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_VOICE_SETTING);
312         if (!sent)
313                 return;
314 
315         if (!status) {
316                 __u16 setting = __le16_to_cpu(get_unaligned((__le16 *) sent));
317 
318                 if (hdev->voice_setting != setting) {
319                         hdev->voice_setting = setting;
320 
321                         BT_DBG("%s voice setting 0x%04x", hdev->name, setting);
322 
323                         if (hdev->notify) {
324                                 tasklet_disable(&hdev->tx_task);
325                                 hdev->notify(hdev, HCI_NOTIFY_VOICE_SETTING);
326                                 tasklet_enable(&hdev->tx_task);
327                         }
328                 }
329         }
330 }
331 
332 static void hci_cc_host_buffer_size(struct hci_dev *hdev, struct sk_buff *skb)
333 {
334         __u8 status = *((__u8 *) skb->data);
335 
336         BT_DBG("%s status 0x%x", hdev->name, status);
337 
338         hci_req_complete(hdev, status);
339 }
340 
341 static void hci_cc_read_local_version(struct hci_dev *hdev, struct sk_buff *skb)
342 {
343         struct hci_rp_read_local_version *rp = (void *) skb->data;
344 
345         BT_DBG("%s status 0x%x", hdev->name, rp->status);
346 
347         if (rp->status)
348                 return;
349 
350         hdev->hci_ver = rp->hci_ver;
351         hdev->hci_rev = btohs(rp->hci_rev);
352         hdev->manufacturer = btohs(rp->manufacturer);
353 
354         BT_DBG("%s manufacturer %d hci ver %d:%d", hdev->name,
355                                         hdev->manufacturer,
356                                         hdev->hci_ver, hdev->hci_rev);
357 }
358 
359 static void hci_cc_read_local_commands(struct hci_dev *hdev, struct sk_buff *skb)
360 {
361         struct hci_rp_read_local_commands *rp = (void *) skb->data;
362 
363         BT_DBG("%s status 0x%x", hdev->name, rp->status);
364 
365         if (rp->status)
366                 return;
367 
368         memcpy(hdev->commands, rp->commands, sizeof(hdev->commands));
369 }
370 
371 static void hci_cc_read_local_features(struct hci_dev *hdev, struct sk_buff *skb)
372 {
373         struct hci_rp_read_local_features *rp = (void *) skb->data;
374 
375         BT_DBG("%s status 0x%x", hdev->name, rp->status);
376 
377         if (rp->status)
378                 return;
379 
380         memcpy(hdev->features, rp->features, 8);
381 
382         /* Adjust default settings according to features
383          * supported by device. */
384 
385         if (hdev->features[0] & LMP_3SLOT)
386                 hdev->pkt_type |= (HCI_DM3 | HCI_DH3);
387 
388         if (hdev->features[0] & LMP_5SLOT)
389                 hdev->pkt_type |= (HCI_DM5 | HCI_DH5);
390 
391         if (hdev->features[1] & LMP_HV2) {
392                 hdev->pkt_type  |= (HCI_HV2);
393                 hdev->esco_type |= (ESCO_HV2);
394         }
395 
396         if (hdev->features[1] & LMP_HV3) {
397                 hdev->pkt_type  |= (HCI_HV3);
398                 hdev->esco_type |= (ESCO_HV3);
399         }
400 
401         if (hdev->features[3] & LMP_ESCO)
402                 hdev->esco_type |= (ESCO_EV3);
403 
404         if (hdev->features[4] & LMP_EV4)
405                 hdev->esco_type |= (ESCO_EV4);
406 
407         if (hdev->features[4] & LMP_EV5)
408                 hdev->esco_type |= (ESCO_EV5);
409 
410         BT_DBG("%s features 0x%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x", hdev->name,
411                                         hdev->features[0], hdev->features[1],
412                                         hdev->features[2], hdev->features[3],
413                                         hdev->features[4], hdev->features[5],
414                                         hdev->features[6], hdev->features[7]);
415 }
416 
417 static void hci_cc_read_buffer_size(struct hci_dev *hdev, struct sk_buff *skb)
418 {
419         struct hci_rp_read_buffer_size *rp = (void *) skb->data;
420 
421         BT_DBG("%s status 0x%x", hdev->name, rp->status);
422 
423         if (rp->status)
424                 return;
425 
426         hdev->acl_mtu  = __le16_to_cpu(rp->acl_mtu);
427         hdev->sco_mtu  = rp->sco_mtu;
428         hdev->acl_pkts = __le16_to_cpu(rp->acl_max_pkt);
429         hdev->sco_pkts = __le16_to_cpu(rp->sco_max_pkt);
430 
431         if (test_bit(HCI_QUIRK_FIXUP_BUFFER_SIZE, &hdev->quirks)) {
432                 hdev->sco_mtu  = 64;
433                 hdev->sco_pkts = 8;
434         }
435 
436         hdev->acl_cnt = hdev->acl_pkts;
437         hdev->sco_cnt = hdev->sco_pkts;
438 
439         BT_DBG("%s acl mtu %d:%d sco mtu %d:%d", hdev->name,
440                                         hdev->acl_mtu, hdev->acl_pkts,
441                                         hdev->sco_mtu, hdev->sco_pkts);
442 }
443 
444 static void hci_cc_read_bd_addr(struct hci_dev *hdev, struct sk_buff *skb)
445 {
446         struct hci_rp_read_bd_addr *rp = (void *) skb->data;
447 
448         BT_DBG("%s status 0x%x", hdev->name, rp->status);
449 
450         if (!rp->status)
451                 bacpy(&hdev->bdaddr, &rp->bdaddr);
452 
453         hci_req_complete(hdev, rp->status);
454 }
455 
456 static inline void hci_cs_inquiry(struct hci_dev *hdev, __u8 status)
457 {
458         BT_DBG("%s status 0x%x", hdev->name, status);
459 
460         if (status) {
461                 hci_req_complete(hdev, status);
462 
463                 hci_conn_check_pending(hdev);
464         } else
465                 set_bit(HCI_INQUIRY, &hdev->flags);
466 }
467 
468 static inline void hci_cs_create_conn(struct hci_dev *hdev, __u8 status)
469 {
470         struct hci_cp_create_conn *cp;
471         struct hci_conn *conn;
472 
473         BT_DBG("%s status 0x%x", hdev->name, status);
474 
475         cp = hci_sent_cmd_data(hdev, HCI_OP_CREATE_CONN);
476         if (!cp)
477                 return;
478 
479         hci_dev_lock(hdev);
480 
481         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &cp->bdaddr);
482 
483         BT_DBG("%s bdaddr %s conn %p", hdev->name, batostr(&cp->bdaddr), conn);
484 
485         if (status) {
486                 if (conn && conn->state == BT_CONNECT) {
487                         if (status != 0x0c || conn->attempt > 2) {
488                                 conn->state = BT_CLOSED;
489                                 hci_proto_connect_cfm(conn, status);
490                                 hci_conn_del(conn);
491                         } else
492                                 conn->state = BT_CONNECT2;
493                 }
494         } else {
495                 if (!conn) {
496                         conn = hci_conn_add(hdev, ACL_LINK, &cp->bdaddr);
497                         if (conn) {
498                                 conn->out = 1;
499                                 conn->link_mode |= HCI_LM_MASTER;
500                         } else
501                                 BT_ERR("No memmory for new connection");
502                 }
503         }
504 
505         hci_dev_unlock(hdev);
506 }
507 
508 static void hci_cs_add_sco(struct hci_dev *hdev, __u8 status)
509 {
510         struct hci_cp_add_sco *cp;
511         struct hci_conn *acl, *sco;
512         __u16 handle;
513 
514         BT_DBG("%s status 0x%x", hdev->name, status);
515 
516         if (!status)
517                 return;
518 
519         cp = hci_sent_cmd_data(hdev, HCI_OP_ADD_SCO);
520         if (!cp)
521                 return;
522 
523         handle = __le16_to_cpu(cp->handle);
524 
525         BT_DBG("%s handle %d", hdev->name, handle);
526 
527         hci_dev_lock(hdev);
528 
529         acl = hci_conn_hash_lookup_handle(hdev, handle);
530         if (acl && (sco = acl->link)) {
531                 sco->state = BT_CLOSED;
532 
533                 hci_proto_connect_cfm(sco, status);
534                 hci_conn_del(sco);
535         }
536 
537         hci_dev_unlock(hdev);
538 }
539 
540 static void hci_cs_remote_name_req(struct hci_dev *hdev, __u8 status)
541 {
542         BT_DBG("%s status 0x%x", hdev->name, status);
543 }
544 
545 static void hci_cs_setup_sync_conn(struct hci_dev *hdev, __u8 status)
546 {
547         struct hci_cp_setup_sync_conn *cp;
548         struct hci_conn *acl, *sco;
549         __u16 handle;
550 
551         BT_DBG("%s status 0x%x", hdev->name, status);
552 
553         if (!status)
554                 return;
555 
556         cp = hci_sent_cmd_data(hdev, HCI_OP_SETUP_SYNC_CONN);
557         if (!cp)
558                 return;
559 
560         handle = __le16_to_cpu(cp->handle);
561 
562         BT_DBG("%s handle %d", hdev->name, handle);
563 
564         hci_dev_lock(hdev);
565 
566         acl = hci_conn_hash_lookup_handle(hdev, handle);
567         if (acl && (sco = acl->link)) {
568                 sco->state = BT_CLOSED;
569 
570                 hci_proto_connect_cfm(sco, status);
571                 hci_conn_del(sco);
572         }
573 
574         hci_dev_unlock(hdev);
575 }
576 
577 static void hci_cs_sniff_mode(struct hci_dev *hdev, __u8 status)
578 {
579         struct hci_cp_sniff_mode *cp;
580         struct hci_conn *conn;
581 
582         BT_DBG("%s status 0x%x", hdev->name, status);
583 
584         if (!status)
585                 return;
586 
587         cp = hci_sent_cmd_data(hdev, HCI_OP_SNIFF_MODE);
588         if (!cp)
589                 return;
590 
591         hci_dev_lock(hdev);
592 
593         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
594         if (conn)
595                 clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend);
596 
597         hci_dev_unlock(hdev);
598 }
599 
600 static void hci_cs_exit_sniff_mode(struct hci_dev *hdev, __u8 status)
601 {
602         struct hci_cp_exit_sniff_mode *cp;
603         struct hci_conn *conn;
604 
605         BT_DBG("%s status 0x%x", hdev->name, status);
606 
607         if (!status)
608                 return;
609 
610         cp = hci_sent_cmd_data(hdev, HCI_OP_EXIT_SNIFF_MODE);
611         if (!cp)
612                 return;
613 
614         hci_dev_lock(hdev);
615 
616         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(cp->handle));
617         if (conn)
618                 clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend);
619 
620         hci_dev_unlock(hdev);
621 }
622 
623 static inline void hci_inquiry_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
624 {
625         __u8 status = *((__u8 *) skb->data);
626 
627         BT_DBG("%s status %d", hdev->name, status);
628 
629         clear_bit(HCI_INQUIRY, &hdev->flags);
630 
631         hci_req_complete(hdev, status);
632 
633         hci_conn_check_pending(hdev);
634 }
635 
636 static inline void hci_inquiry_result_evt(struct hci_dev *hdev, struct sk_buff *skb)
637 {
638         struct inquiry_data data;
639         struct inquiry_info *info = (void *) (skb->data + 1);
640         int num_rsp = *((__u8 *) skb->data);
641 
642         BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
643 
644         if (!num_rsp)
645                 return;
646 
647         hci_dev_lock(hdev);
648 
649         for (; num_rsp; num_rsp--) {
650                 bacpy(&data.bdaddr, &info->bdaddr);
651                 data.pscan_rep_mode     = info->pscan_rep_mode;
652                 data.pscan_period_mode  = info->pscan_period_mode;
653                 data.pscan_mode         = info->pscan_mode;
654                 memcpy(data.dev_class, info->dev_class, 3);
655                 data.clock_offset       = info->clock_offset;
656                 data.rssi               = 0x00;
657                 info++;
658                 hci_inquiry_cache_update(hdev, &data);
659         }
660 
661         hci_dev_unlock(hdev);
662 }
663 
664 static inline void hci_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
665 {
666         struct hci_ev_conn_complete *ev = (void *) skb->data;
667         struct hci_conn *conn;
668 
669         BT_DBG("%s", hdev->name);
670 
671         hci_dev_lock(hdev);
672 
673         conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
674         if (!conn)
675                 goto unlock;
676 
677         if (!ev->status) {
678                 conn->handle = __le16_to_cpu(ev->handle);
679                 conn->state  = BT_CONNECTED;
680 
681                 if (test_bit(HCI_AUTH, &hdev->flags))
682                         conn->link_mode |= HCI_LM_AUTH;
683 
684                 if (test_bit(HCI_ENCRYPT, &hdev->flags))
685                         conn->link_mode |= HCI_LM_ENCRYPT;
686 
687                 /* Get remote features */
688                 if (conn->type == ACL_LINK) {
689                         struct hci_cp_read_remote_features cp;
690                         cp.handle = ev->handle;
691                         hci_send_cmd(hdev, HCI_OP_READ_REMOTE_FEATURES, sizeof(cp), &cp);
692                 }
693 
694                 /* Set link policy */
695                 if (conn->type == ACL_LINK && hdev->link_policy) {
696                         struct hci_cp_write_link_policy cp;
697                         cp.handle = ev->handle;
698                         cp.policy = cpu_to_le16(hdev->link_policy);
699                         hci_send_cmd(hdev, HCI_OP_WRITE_LINK_POLICY, sizeof(cp), &cp);
700                 }
701 
702                 /* Set packet type for incoming connection */
703                 if (!conn->out) {
704                         struct hci_cp_change_conn_ptype cp;
705                         cp.handle = ev->handle;
706                         cp.pkt_type = (conn->type == ACL_LINK) ?
707                                 cpu_to_le16(hdev->pkt_type & ACL_PTYPE_MASK):
708                                 cpu_to_le16(hdev->pkt_type & SCO_PTYPE_MASK);
709 
710                         hci_send_cmd(hdev, HCI_OP_CHANGE_CONN_PTYPE, sizeof(cp), &cp);
711                 } else {
712                         /* Update disconnect timer */
713                         hci_conn_hold(conn);
714                         hci_conn_put(conn);
715                 }
716         } else
717                 conn->state = BT_CLOSED;
718 
719         if (conn->type == ACL_LINK) {
720                 struct hci_conn *sco = conn->link;
721                 if (sco) {
722                         if (!ev->status) {
723                                 if (lmp_esco_capable(hdev))
724                                         hci_setup_sync(sco, conn->handle);
725                                 else
726                                         hci_add_sco(sco, conn->handle);
727                         } else {
728                                 hci_proto_connect_cfm(sco, ev->status);
729                                 hci_conn_del(sco);
730                         }
731                 }
732         }
733 
734         hci_proto_connect_cfm(conn, ev->status);
735         if (ev->status)
736                 hci_conn_del(conn);
737 
738 unlock:
739         hci_dev_unlock(hdev);
740 
741         hci_conn_check_pending(hdev);
742 }
743 
744 static inline void hci_conn_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
745 {
746         struct hci_ev_conn_request *ev = (void *) skb->data;
747         int mask = hdev->link_mode;
748 
749         BT_DBG("%s bdaddr %s type 0x%x", hdev->name,
750                                         batostr(&ev->bdaddr), ev->link_type);
751 
752         mask |= hci_proto_connect_ind(hdev, &ev->bdaddr, ev->link_type);
753 
754         if (mask & HCI_LM_ACCEPT) {
755                 /* Connection accepted */
756                 struct hci_conn *conn;
757 
758                 hci_dev_lock(hdev);
759 
760                 conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
761                 if (!conn) {
762                         if (!(conn = hci_conn_add(hdev, ev->link_type, &ev->bdaddr))) {
763                                 BT_ERR("No memmory for new connection");
764                                 hci_dev_unlock(hdev);
765                                 return;
766                         }
767                 }
768 
769                 memcpy(conn->dev_class, ev->dev_class, 3);
770                 conn->state = BT_CONNECT;
771 
772                 hci_dev_unlock(hdev);
773 
774                 if (ev->link_type == ACL_LINK || !lmp_esco_capable(hdev)) {
775                         struct hci_cp_accept_conn_req cp;
776 
777                         bacpy(&cp.bdaddr, &ev->bdaddr);
778 
779                         if (lmp_rswitch_capable(hdev) && (mask & HCI_LM_MASTER))
780                                 cp.role = 0x00; /* Become master */
781                         else
782                                 cp.role = 0x01; /* Remain slave */
783 
784                         hci_send_cmd(hdev, HCI_OP_ACCEPT_CONN_REQ,
785                                                         sizeof(cp), &cp);
786                 } else {
787                         struct hci_cp_accept_sync_conn_req cp;
788 
789                         bacpy(&cp.bdaddr, &ev->bdaddr);
790                         cp.pkt_type = cpu_to_le16(hdev->esco_type);
791 
792                         cp.tx_bandwidth   = cpu_to_le32(0x00001f40);
793                         cp.rx_bandwidth   = cpu_to_le32(0x00001f40);
794                         cp.max_latency    = cpu_to_le16(0xffff);
795                         cp.content_format = cpu_to_le16(hdev->voice_setting);
796                         cp.retrans_effort = 0xff;
797 
798                         hci_send_cmd(hdev, HCI_OP_ACCEPT_SYNC_CONN_REQ,
799                                                         sizeof(cp), &cp);
800                 }
801         } else {
802                 /* Connection rejected */
803                 struct hci_cp_reject_conn_req cp;
804 
805                 bacpy(&cp.bdaddr, &ev->bdaddr);
806                 cp.reason = 0x0f;
807                 hci_send_cmd(hdev, HCI_OP_REJECT_CONN_REQ, sizeof(cp), &cp);
808         }
809 }
810 
811 static inline void hci_disconn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
812 {
813         struct hci_ev_disconn_complete *ev = (void *) skb->data;
814         struct hci_conn *conn;
815 
816         BT_DBG("%s status %d", hdev->name, ev->status);
817 
818         if (ev->status)
819                 return;
820 
821         hci_dev_lock(hdev);
822 
823         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
824         if (conn) {
825                 conn->state = BT_CLOSED;
826                 hci_proto_disconn_ind(conn, ev->reason);
827                 hci_conn_del(conn);
828         }
829 
830         hci_dev_unlock(hdev);
831 }
832 
833 static inline void hci_auth_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
834 {
835         struct hci_ev_auth_complete *ev = (void *) skb->data;
836         struct hci_conn *conn;
837 
838         BT_DBG("%s status %d", hdev->name, ev->status);
839 
840         hci_dev_lock(hdev);
841 
842         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
843         if (conn) {
844                 if (!ev->status)
845                         conn->link_mode |= HCI_LM_AUTH;
846 
847                 clear_bit(HCI_CONN_AUTH_PEND, &conn->pend);
848 
849                 hci_auth_cfm(conn, ev->status);
850 
851                 if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend)) {
852                         if (!ev->status) {
853                                 struct hci_cp_set_conn_encrypt cp;
854                                 cp.handle  = cpu_to_le16(conn->handle);
855                                 cp.encrypt = 1;
856                                 hci_send_cmd(conn->hdev,
857                                         HCI_OP_SET_CONN_ENCRYPT, sizeof(cp), &cp);
858                         } else {
859                                 clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend);
860                                 hci_encrypt_cfm(conn, ev->status, 0x00);
861                         }
862                 }
863         }
864 
865         hci_dev_unlock(hdev);
866 }
867 
868 static inline void hci_remote_name_evt(struct hci_dev *hdev, struct sk_buff *skb)
869 {
870         BT_DBG("%s", hdev->name);
871 
872         hci_conn_check_pending(hdev);
873 }
874 
875 static inline void hci_encrypt_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
876 {
877         struct hci_ev_encrypt_change *ev = (void *) skb->data;
878         struct hci_conn *conn;
879 
880         BT_DBG("%s status %d", hdev->name, ev->status);
881 
882         hci_dev_lock(hdev);
883 
884         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
885         if (conn) {
886                 if (!ev->status) {
887                         if (ev->encrypt)
888                                 conn->link_mode |= HCI_LM_ENCRYPT;
889                         else
890                                 conn->link_mode &= ~HCI_LM_ENCRYPT;
891                 }
892 
893                 clear_bit(HCI_CONN_ENCRYPT_PEND, &conn->pend);
894 
895                 hci_encrypt_cfm(conn, ev->status, ev->encrypt);
896         }
897 
898         hci_dev_unlock(hdev);
899 }
900 
901 static inline void hci_change_link_key_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
902 {
903         struct hci_ev_change_link_key_complete *ev = (void *) skb->data;
904         struct hci_conn *conn;
905 
906         BT_DBG("%s status %d", hdev->name, ev->status);
907 
908         hci_dev_lock(hdev);
909 
910         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
911         if (conn) {
912                 if (!ev->status)
913                         conn->link_mode |= HCI_LM_SECURE;
914 
915                 clear_bit(HCI_CONN_AUTH_PEND, &conn->pend);
916 
917                 hci_key_change_cfm(conn, ev->status);
918         }
919 
920         hci_dev_unlock(hdev);
921 }
922 
923 static inline void hci_remote_features_evt(struct hci_dev *hdev, struct sk_buff *skb)
924 {
925         struct hci_ev_remote_features *ev = (void *) skb->data;
926         struct hci_conn *conn;
927 
928         BT_DBG("%s status %d", hdev->name, ev->status);
929 
930         if (ev->status)
931                 return;
932 
933         hci_dev_lock(hdev);
934 
935         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
936         if (conn)
937                 memcpy(conn->features, ev->features, 8);
938 
939         hci_dev_unlock(hdev);
940 }
941 
942 static inline void hci_remote_version_evt(struct hci_dev *hdev, struct sk_buff *skb)
943 {
944         BT_DBG("%s", hdev->name);
945 }
946 
947 static inline void hci_qos_setup_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
948 {
949         BT_DBG("%s", hdev->name);
950 }
951 
952 static inline void hci_cmd_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
953 {
954         struct hci_ev_cmd_complete *ev = (void *) skb->data;
955         __u16 opcode;
956 
957         skb_pull(skb, sizeof(*ev));
958 
959         opcode = __le16_to_cpu(ev->opcode);
960 
961         switch (opcode) {
962         case HCI_OP_INQUIRY_CANCEL:
963                 hci_cc_inquiry_cancel(hdev, skb);
964                 break;
965 
966         case HCI_OP_EXIT_PERIODIC_INQ:
967                 hci_cc_exit_periodic_inq(hdev, skb);
968                 break;
969 
970         case HCI_OP_REMOTE_NAME_REQ_CANCEL:
971                 hci_cc_remote_name_req_cancel(hdev, skb);
972                 break;
973 
974         case HCI_OP_ROLE_DISCOVERY:
975                 hci_cc_role_discovery(hdev, skb);
976                 break;
977 
978         case HCI_OP_WRITE_LINK_POLICY:
979                 hci_cc_write_link_policy(hdev, skb);
980                 break;
981 
982         case HCI_OP_RESET:
983                 hci_cc_reset(hdev, skb);
984                 break;
985 
986         case HCI_OP_WRITE_LOCAL_NAME:
987                 hci_cc_write_local_name(hdev, skb);
988                 break;
989 
990         case HCI_OP_READ_LOCAL_NAME:
991                 hci_cc_read_local_name(hdev, skb);
992                 break;
993 
994         case HCI_OP_WRITE_AUTH_ENABLE:
995                 hci_cc_write_auth_enable(hdev, skb);
996                 break;
997 
998         case HCI_OP_WRITE_ENCRYPT_MODE:
999                 hci_cc_write_encrypt_mode(hdev, skb);
1000                 break;
1001 
1002         case HCI_OP_WRITE_SCAN_ENABLE:
1003                 hci_cc_write_scan_enable(hdev, skb);
1004                 break;
1005 
1006         case HCI_OP_READ_CLASS_OF_DEV:
1007                 hci_cc_read_class_of_dev(hdev, skb);
1008                 break;
1009 
1010         case HCI_OP_WRITE_CLASS_OF_DEV:
1011                 hci_cc_write_class_of_dev(hdev, skb);
1012                 break;
1013 
1014         case HCI_OP_READ_VOICE_SETTING:
1015                 hci_cc_read_voice_setting(hdev, skb);
1016                 break;
1017 
1018         case HCI_OP_WRITE_VOICE_SETTING:
1019                 hci_cc_write_voice_setting(hdev, skb);
1020                 break;
1021 
1022         case HCI_OP_HOST_BUFFER_SIZE:
1023                 hci_cc_host_buffer_size(hdev, skb);
1024                 break;
1025 
1026         case HCI_OP_READ_LOCAL_VERSION:
1027                 hci_cc_read_local_version(hdev, skb);
1028                 break;
1029 
1030         case HCI_OP_READ_LOCAL_COMMANDS:
1031                 hci_cc_read_local_commands(hdev, skb);
1032                 break;
1033 
1034         case HCI_OP_READ_LOCAL_FEATURES:
1035                 hci_cc_read_local_features(hdev, skb);
1036                 break;
1037 
1038         case HCI_OP_READ_BUFFER_SIZE:
1039                 hci_cc_read_buffer_size(hdev, skb);
1040                 break;
1041 
1042         case HCI_OP_READ_BD_ADDR:
1043                 hci_cc_read_bd_addr(hdev, skb);
1044                 break;
1045 
1046         default:
1047                 BT_DBG("%s opcode 0x%x", hdev->name, opcode);
1048                 break;
1049         }
1050 
1051         if (ev->ncmd) {
1052                 atomic_set(&hdev->cmd_cnt, 1);
1053                 if (!skb_queue_empty(&hdev->cmd_q))
1054                         hci_sched_cmd(hdev);
1055         }
1056 }
1057 
1058 static inline void hci_cmd_status_evt(struct hci_dev *hdev, struct sk_buff *skb)
1059 {
1060         struct hci_ev_cmd_status *ev = (void *) skb->data;
1061         __u16 opcode;
1062 
1063         skb_pull(skb, sizeof(*ev));
1064 
1065         opcode = __le16_to_cpu(ev->opcode);
1066 
1067         switch (opcode) {
1068         case HCI_OP_INQUIRY:
1069                 hci_cs_inquiry(hdev, ev->status);
1070                 break;
1071 
1072         case HCI_OP_CREATE_CONN:
1073                 hci_cs_create_conn(hdev, ev->status);
1074                 break;
1075 
1076         case HCI_OP_ADD_SCO:
1077                 hci_cs_add_sco(hdev, ev->status);
1078                 break;
1079 
1080         case HCI_OP_REMOTE_NAME_REQ:
1081                 hci_cs_remote_name_req(hdev, ev->status);
1082                 break;
1083 
1084         case HCI_OP_SETUP_SYNC_CONN:
1085                 hci_cs_setup_sync_conn(hdev, ev->status);
1086                 break;
1087 
1088         case HCI_OP_SNIFF_MODE:
1089                 hci_cs_sniff_mode(hdev, ev->status);
1090                 break;
1091 
1092         case HCI_OP_EXIT_SNIFF_MODE:
1093                 hci_cs_exit_sniff_mode(hdev, ev->status);
1094                 break;
1095 
1096         default:
1097                 BT_DBG("%s opcode 0x%x", hdev->name, opcode);
1098                 break;
1099         }
1100 
1101         if (ev->ncmd) {
1102                 atomic_set(&hdev->cmd_cnt, 1);
1103                 if (!skb_queue_empty(&hdev->cmd_q))
1104                         hci_sched_cmd(hdev);
1105         }
1106 }
1107 
1108 static inline void hci_role_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
1109 {
1110         struct hci_ev_role_change *ev = (void *) skb->data;
1111         struct hci_conn *conn;
1112 
1113         BT_DBG("%s status %d", hdev->name, ev->status);
1114 
1115         hci_dev_lock(hdev);
1116 
1117         conn = hci_conn_hash_lookup_ba(hdev, ACL_LINK, &ev->bdaddr);
1118         if (conn) {
1119                 if (!ev->status) {
1120                         if (ev->role)
1121                                 conn->link_mode &= ~HCI_LM_MASTER;
1122                         else
1123                                 conn->link_mode |= HCI_LM_MASTER;
1124                 }
1125 
1126                 clear_bit(HCI_CONN_RSWITCH_PEND, &conn->pend);
1127 
1128                 hci_role_switch_cfm(conn, ev->status, ev->role);
1129         }
1130 
1131         hci_dev_unlock(hdev);
1132 }
1133 
1134 static inline void hci_num_comp_pkts_evt(struct hci_dev *hdev, struct sk_buff *skb)
1135 {
1136         struct hci_ev_num_comp_pkts *ev = (void *) skb->data;
1137         __le16 *ptr;
1138         int i;
1139 
1140         skb_pull(skb, sizeof(*ev));
1141 
1142         BT_DBG("%s num_hndl %d", hdev->name, ev->num_hndl);
1143 
1144         if (skb->len < ev->num_hndl * 4) {
1145                 BT_DBG("%s bad parameters", hdev->name);
1146                 return;
1147         }
1148 
1149         tasklet_disable(&hdev->tx_task);
1150 
1151         for (i = 0, ptr = (__le16 *) skb->data; i < ev->num_hndl; i++) {
1152                 struct hci_conn *conn;
1153                 __u16  handle, count;
1154 
1155                 handle = __le16_to_cpu(get_unaligned(ptr++));
1156                 count  = __le16_to_cpu(get_unaligned(ptr++));
1157 
1158                 conn = hci_conn_hash_lookup_handle(hdev, handle);
1159                 if (conn) {
1160                         conn->sent -= count;
1161 
1162                         if (conn->type == ACL_LINK) {
1163                                 if ((hdev->acl_cnt += count) > hdev->acl_pkts)
1164                                         hdev->acl_cnt = hdev->acl_pkts;
1165                         } else {
1166                                 if ((hdev->sco_cnt += count) > hdev->sco_pkts)
1167                                         hdev->sco_cnt = hdev->sco_pkts;
1168                         }
1169                 }
1170         }
1171 
1172         hci_sched_tx(hdev);
1173 
1174         tasklet_enable(&hdev->tx_task);
1175 }
1176 
1177 static inline void hci_mode_change_evt(struct hci_dev *hdev, struct sk_buff *skb)
1178 {
1179         struct hci_ev_mode_change *ev = (void *) skb->data;
1180         struct hci_conn *conn;
1181 
1182         BT_DBG("%s status %d", hdev->name, ev->status);
1183 
1184         hci_dev_lock(hdev);
1185 
1186         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1187         if (conn) {
1188                 conn->mode = ev->mode;
1189                 conn->interval = __le16_to_cpu(ev->interval);
1190 
1191                 if (!test_and_clear_bit(HCI_CONN_MODE_CHANGE_PEND, &conn->pend)) {
1192                         if (conn->mode == HCI_CM_ACTIVE)
1193                                 conn->power_save = 1;
1194                         else
1195                                 conn->power_save = 0;
1196                 }
1197         }
1198 
1199         hci_dev_unlock(hdev);
1200 }
1201 
1202 static inline void hci_pin_code_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
1203 {
1204         BT_DBG("%s", hdev->name);
1205 }
1206 
1207 static inline void hci_link_key_request_evt(struct hci_dev *hdev, struct sk_buff *skb)
1208 {
1209         BT_DBG("%s", hdev->name);
1210 }
1211 
1212 static inline void hci_link_key_notify_evt(struct hci_dev *hdev, struct sk_buff *skb)
1213 {
1214         BT_DBG("%s", hdev->name);
1215 }
1216 
1217 static inline void hci_clock_offset_evt(struct hci_dev *hdev, struct sk_buff *skb)
1218 {
1219         struct hci_ev_clock_offset *ev = (void *) skb->data;
1220         struct hci_conn *conn;
1221 
1222         BT_DBG("%s status %d", hdev->name, ev->status);
1223 
1224         hci_dev_lock(hdev);
1225 
1226         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1227         if (conn && !ev->status) {
1228                 struct inquiry_entry *ie;
1229 
1230                 if ((ie = hci_inquiry_cache_lookup(hdev, &conn->dst))) {
1231                         ie->data.clock_offset = ev->clock_offset;
1232                         ie->timestamp = jiffies;
1233                 }
1234         }
1235 
1236         hci_dev_unlock(hdev);
1237 }
1238 
1239 static inline void hci_pscan_rep_mode_evt(struct hci_dev *hdev, struct sk_buff *skb)
1240 {
1241         struct hci_ev_pscan_rep_mode *ev = (void *) skb->data;
1242         struct inquiry_entry *ie;
1243 
1244         BT_DBG("%s", hdev->name);
1245 
1246         hci_dev_lock(hdev);
1247 
1248         if ((ie = hci_inquiry_cache_lookup(hdev, &ev->bdaddr))) {
1249                 ie->data.pscan_rep_mode = ev->pscan_rep_mode;
1250                 ie->timestamp = jiffies;
1251         }
1252 
1253         hci_dev_unlock(hdev);
1254 }
1255 
1256 static inline void hci_inquiry_result_with_rssi_evt(struct hci_dev *hdev, struct sk_buff *skb)
1257 {
1258         struct inquiry_data data;
1259         int num_rsp = *((__u8 *) skb->data);
1260 
1261         BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
1262 
1263         if (!num_rsp)
1264                 return;
1265 
1266         hci_dev_lock(hdev);
1267 
1268         if ((skb->len - 1) / num_rsp != sizeof(struct inquiry_info_with_rssi)) {
1269                 struct inquiry_info_with_rssi_and_pscan_mode *info = (void *) (skb->data + 1);
1270 
1271                 for (; num_rsp; num_rsp--) {
1272                         bacpy(&data.bdaddr, &info->bdaddr);
1273                         data.pscan_rep_mode     = info->pscan_rep_mode;
1274                         data.pscan_period_mode  = info->pscan_period_mode;
1275                         data.pscan_mode         = info->pscan_mode;
1276                         memcpy(data.dev_class, info->dev_class, 3);
1277                         data.clock_offset       = info->clock_offset;
1278                         data.rssi               = info->rssi;
1279                         info++;
1280                         hci_inquiry_cache_update(hdev, &data);
1281                 }
1282         } else {
1283                 struct inquiry_info_with_rssi *info = (void *) (skb->data + 1);
1284 
1285                 for (; num_rsp; num_rsp--) {
1286                         bacpy(&data.bdaddr, &info->bdaddr);
1287                         data.pscan_rep_mode     = info->pscan_rep_mode;
1288                         data.pscan_period_mode  = info->pscan_period_mode;
1289                         data.pscan_mode         = 0x00;
1290                         memcpy(data.dev_class, info->dev_class, 3);
1291                         data.clock_offset       = info->clock_offset;
1292                         data.rssi               = info->rssi;
1293                         info++;
1294                         hci_inquiry_cache_update(hdev, &data);
1295                 }
1296         }
1297 
1298         hci_dev_unlock(hdev);
1299 }
1300 
1301 static inline void hci_remote_ext_features_evt(struct hci_dev *hdev, struct sk_buff *skb)
1302 {
1303         BT_DBG("%s", hdev->name);
1304 }
1305 
1306 static inline void hci_sync_conn_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
1307 {
1308         struct hci_ev_sync_conn_complete *ev = (void *) skb->data;
1309         struct hci_conn *conn;
1310 
1311         BT_DBG("%s status %d", hdev->name, ev->status);
1312 
1313         hci_dev_lock(hdev);
1314 
1315         conn = hci_conn_hash_lookup_ba(hdev, ev->link_type, &ev->bdaddr);
1316         if (!conn)
1317                 goto unlock;
1318 
1319         if (!ev->status) {
1320                 conn->handle = __le16_to_cpu(ev->handle);
1321                 conn->state  = BT_CONNECTED;
1322         } else
1323                 conn->state = BT_CLOSED;
1324 
1325         hci_proto_connect_cfm(conn, ev->status);
1326         if (ev->status)
1327                 hci_conn_del(conn);
1328 
1329 unlock:
1330         hci_dev_unlock(hdev);
1331 }
1332 
1333 static inline void hci_sync_conn_changed_evt(struct hci_dev *hdev, struct sk_buff *skb)
1334 {
1335         BT_DBG("%s", hdev->name);
1336 }
1337 
1338 static inline void hci_sniff_subrate_evt(struct hci_dev *hdev, struct sk_buff *skb)
1339 {
1340         struct hci_ev_sniff_subrate *ev = (void *) skb->data;
1341         struct hci_conn *conn;
1342 
1343         BT_DBG("%s status %d", hdev->name, ev->status);
1344 
1345         hci_dev_lock(hdev);
1346 
1347         conn = hci_conn_hash_lookup_handle(hdev, __le16_to_cpu(ev->handle));
1348         if (conn) {
1349         }
1350 
1351         hci_dev_unlock(hdev);
1352 }
1353 
1354 static inline void hci_extended_inquiry_result_evt(struct hci_dev *hdev, struct sk_buff *skb)
1355 {
1356         struct inquiry_data data;
1357         struct extended_inquiry_info *info = (void *) (skb->data + 1);
1358         int num_rsp = *((__u8 *) skb->data);
1359 
1360         BT_DBG("%s num_rsp %d", hdev->name, num_rsp);
1361 
1362         if (!num_rsp)
1363                 return;
1364 
1365         hci_dev_lock(hdev);
1366 
1367         for (; num_rsp; num_rsp--) {
1368                 bacpy(&data.bdaddr, &info->bdaddr);
1369                 data.pscan_rep_mode     = info->pscan_rep_mode;
1370                 data.pscan_period_mode  = info->pscan_period_mode;
1371                 data.pscan_mode         = 0x00;
1372                 memcpy(data.dev_class, info->dev_class, 3);
1373                 data.clock_offset       = info->clock_offset;
1374                 data.rssi               = info->rssi;
1375                 info++;
1376                 hci_inquiry_cache_update(hdev, &data);
1377         }
1378 
1379         hci_dev_unlock(hdev);
1380 }
1381 
1382 void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb)
1383 {
1384         struct hci_event_hdr *hdr = (void *) skb->data;
1385         __u8 event = hdr->evt;
1386 
1387         skb_pull(skb, HCI_EVENT_HDR_SIZE);
1388 
1389         switch (event) {
1390         case HCI_EV_INQUIRY_COMPLETE:
1391                 hci_inquiry_complete_evt(hdev, skb);
1392                 break;
1393 
1394         case HCI_EV_INQUIRY_RESULT:
1395                 hci_inquiry_result_evt(hdev, skb);
1396                 break;
1397 
1398         case HCI_EV_CONN_COMPLETE:
1399                 hci_conn_complete_evt(hdev, skb);
1400                 break;
1401 
1402         case HCI_EV_CONN_REQUEST:
1403                 hci_conn_request_evt(hdev, skb);
1404                 break;
1405 
1406         case HCI_EV_DISCONN_COMPLETE:
1407                 hci_disconn_complete_evt(hdev, skb);
1408                 break;
1409 
1410         case HCI_EV_AUTH_COMPLETE:
1411                 hci_auth_complete_evt(hdev, skb);
1412                 break;
1413 
1414         case HCI_EV_REMOTE_NAME:
1415                 hci_remote_name_evt(hdev, skb);
1416                 break;
1417 
1418         case HCI_EV_ENCRYPT_CHANGE:
1419                 hci_encrypt_change_evt(hdev, skb);
1420                 break;
1421 
1422         case HCI_EV_CHANGE_LINK_KEY_COMPLETE:
1423                 hci_change_link_key_complete_evt(hdev, skb);
1424                 break;
1425 
1426         case HCI_EV_REMOTE_FEATURES:
1427                 hci_remote_features_evt(hdev, skb);
1428                 break;
1429 
1430         case HCI_EV_REMOTE_VERSION:
1431                 hci_remote_version_evt(hdev, skb);
1432                 break;
1433 
1434         case HCI_EV_QOS_SETUP_COMPLETE:
1435                 hci_qos_setup_complete_evt(hdev, skb);
1436                 break;
1437 
1438         case HCI_EV_CMD_COMPLETE:
1439                 hci_cmd_complete_evt(hdev, skb);
1440                 break;
1441 
1442         case HCI_EV_CMD_STATUS:
1443                 hci_cmd_status_evt(hdev, skb);
1444                 break;
1445 
1446         case HCI_EV_ROLE_CHANGE:
1447                 hci_role_change_evt(hdev, skb);
1448                 break;
1449 
1450         case HCI_EV_NUM_COMP_PKTS:
1451                 hci_num_comp_pkts_evt(hdev, skb);
1452                 break;
1453 
1454         case HCI_EV_MODE_CHANGE:
1455                 hci_mode_change_evt(hdev, skb);
1456                 break;
1457 
1458         case HCI_EV_PIN_CODE_REQ:
1459                 hci_pin_code_request_evt(hdev, skb);
1460                 break;
1461 
1462         case HCI_EV_LINK_KEY_REQ:
1463                 hci_link_key_request_evt(hdev, skb);
1464                 break;
1465 
1466         case HCI_EV_LINK_KEY_NOTIFY:
1467                 hci_link_key_notify_evt(hdev, skb);
1468                 break;
1469 
1470         case HCI_EV_CLOCK_OFFSET:
1471                 hci_clock_offset_evt(hdev, skb);
1472                 break;
1473 
1474         case HCI_EV_PSCAN_REP_MODE:
1475                 hci_pscan_rep_mode_evt(hdev, skb);
1476                 break;
1477 
1478         case HCI_EV_INQUIRY_RESULT_WITH_RSSI:
1479                 hci_inquiry_result_with_rssi_evt(hdev, skb);
1480                 break;
1481 
1482         case HCI_EV_REMOTE_EXT_FEATURES:
1483                 hci_remote_ext_features_evt(hdev, skb);
1484                 break;
1485 
1486         case HCI_EV_SYNC_CONN_COMPLETE:
1487                 hci_sync_conn_complete_evt(hdev, skb);
1488                 break;
1489 
1490         case HCI_EV_SYNC_CONN_CHANGED:
1491                 hci_sync_conn_changed_evt(hdev, skb);
1492                 break;
1493 
1494         case HCI_EV_SNIFF_SUBRATE:
1495                 hci_sniff_subrate_evt(hdev, skb);
1496                 break;
1497 
1498         case HCI_EV_EXTENDED_INQUIRY_RESULT:
1499                 hci_extended_inquiry_result_evt(hdev, skb);
1500                 break;
1501 
1502         default:
1503                 BT_DBG("%s event 0x%x", hdev->name, event);
1504                 break;
1505         }
1506 
1507         kfree_skb(skb);
1508         hdev->stat.evt_rx++;
1509 }
1510 
1511 /* Generate internal stack event */
1512 void hci_si_event(struct hci_dev *hdev, int type, int dlen, void *data)
1513 {
1514         struct hci_event_hdr *hdr;
1515         struct hci_ev_stack_internal *ev;
1516         struct sk_buff *skb;
1517 
1518         skb = bt_skb_alloc(HCI_EVENT_HDR_SIZE + sizeof(*ev) + dlen, GFP_ATOMIC);
1519         if (!skb)
1520                 return;
1521 
1522         hdr = (void *) skb_put(skb, HCI_EVENT_HDR_SIZE);
1523         hdr->evt  = HCI_EV_STACK_INTERNAL;
1524         hdr->plen = sizeof(*ev) + dlen;
1525 
1526         ev  = (void *) skb_put(skb, sizeof(*ev) + dlen);
1527         ev->type = type;
1528         memcpy(ev->data, data, dlen);
1529 
1530         bt_cb(skb)->incoming = 1;
1531         __net_timestamp(skb);
1532 
1533         bt_cb(skb)->pkt_type = HCI_EVENT_PKT;
1534         skb->dev = (void *) hdev;
1535         hci_send_to_sock(hdev, skb);
1536         kfree_skb(skb);
1537 }
1538 
  This page was automatically generated by the LXR engine.