Merge branch 'for-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/bluetoot...
[firefly-linux-kernel-4.4.55.git] / include / net / bluetooth / hci_core.h
1 /*
2    BlueZ - Bluetooth protocol stack for Linux
3    Copyright (c) 2000-2001, 2010, Code Aurora Forum. All rights reserved.
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 #ifndef __HCI_CORE_H
26 #define __HCI_CORE_H
27
28 #include <net/bluetooth/hci.h>
29 #include <net/bluetooth/hci_sock.h>
30
31 /* HCI priority */
32 #define HCI_PRIO_MAX    7
33
34 /* HCI Core structures */
35 struct inquiry_data {
36         bdaddr_t        bdaddr;
37         __u8            pscan_rep_mode;
38         __u8            pscan_period_mode;
39         __u8            pscan_mode;
40         __u8            dev_class[3];
41         __le16          clock_offset;
42         __s8            rssi;
43         __u8            ssp_mode;
44 };
45
46 struct inquiry_entry {
47         struct list_head        all;            /* inq_cache.all */
48         struct list_head        list;           /* unknown or resolve */
49         enum {
50                 NAME_NOT_KNOWN,
51                 NAME_NEEDED,
52                 NAME_PENDING,
53                 NAME_KNOWN,
54         } name_state;
55         __u32                   timestamp;
56         struct inquiry_data     data;
57 };
58
59 struct discovery_state {
60         int                     type;
61         enum {
62                 DISCOVERY_STOPPED,
63                 DISCOVERY_STARTING,
64                 DISCOVERY_FINDING,
65                 DISCOVERY_RESOLVING,
66                 DISCOVERY_STOPPING,
67         } state;
68         struct list_head        all;    /* All devices found during inquiry */
69         struct list_head        unknown;        /* Name state not known */
70         struct list_head        resolve;        /* Name needs to be resolved */
71         __u32                   timestamp;
72         bdaddr_t                last_adv_addr;
73         u8                      last_adv_addr_type;
74         s8                      last_adv_rssi;
75         u32                     last_adv_flags;
76         u8                      last_adv_data[HCI_MAX_AD_LENGTH];
77         u8                      last_adv_data_len;
78 };
79
80 struct hci_conn_hash {
81         struct list_head list;
82         unsigned int     acl_num;
83         unsigned int     amp_num;
84         unsigned int     sco_num;
85         unsigned int     le_num;
86         unsigned int     le_num_slave;
87 };
88
89 struct bdaddr_list {
90         struct list_head list;
91         bdaddr_t bdaddr;
92         u8 bdaddr_type;
93 };
94
95 struct bt_uuid {
96         struct list_head list;
97         u8 uuid[16];
98         u8 size;
99         u8 svc_hint;
100 };
101
102 struct smp_csrk {
103         bdaddr_t bdaddr;
104         u8 bdaddr_type;
105         u8 master;
106         u8 val[16];
107 };
108
109 struct smp_ltk {
110         struct list_head list;
111         bdaddr_t bdaddr;
112         u8 bdaddr_type;
113         u8 authenticated;
114         u8 type;
115         u8 enc_size;
116         __le16 ediv;
117         __le64 rand;
118         u8 val[16];
119 };
120
121 struct smp_irk {
122         struct list_head list;
123         bdaddr_t rpa;
124         bdaddr_t bdaddr;
125         u8 addr_type;
126         u8 val[16];
127 };
128
129 struct link_key {
130         struct list_head list;
131         bdaddr_t bdaddr;
132         u8 type;
133         u8 val[HCI_LINK_KEY_SIZE];
134         u8 pin_len;
135 };
136
137 struct oob_data {
138         struct list_head list;
139         bdaddr_t bdaddr;
140         u8 hash192[16];
141         u8 randomizer192[16];
142         u8 hash256[16];
143         u8 randomizer256[16];
144 };
145
146 #define HCI_MAX_SHORT_NAME_LENGTH       10
147
148 /* Default LE RPA expiry time, 15 minutes */
149 #define HCI_DEFAULT_RPA_TIMEOUT         (15 * 60)
150
151 /* Default min/max age of connection information (1s/3s) */
152 #define DEFAULT_CONN_INFO_MIN_AGE       1000
153 #define DEFAULT_CONN_INFO_MAX_AGE       3000
154
155 struct amp_assoc {
156         __u16   len;
157         __u16   offset;
158         __u16   rem_len;
159         __u16   len_so_far;
160         __u8    data[HCI_MAX_AMP_ASSOC_SIZE];
161 };
162
163 #define HCI_MAX_PAGES   3
164
165 #define NUM_REASSEMBLY 4
166 struct hci_dev {
167         struct list_head list;
168         struct mutex    lock;
169
170         char            name[8];
171         unsigned long   flags;
172         __u16           id;
173         __u8            bus;
174         __u8            dev_type;
175         bdaddr_t        bdaddr;
176         bdaddr_t        setup_addr;
177         bdaddr_t        public_addr;
178         bdaddr_t        random_addr;
179         bdaddr_t        static_addr;
180         __u8            adv_addr_type;
181         __u8            dev_name[HCI_MAX_NAME_LENGTH];
182         __u8            short_name[HCI_MAX_SHORT_NAME_LENGTH];
183         __u8            eir[HCI_MAX_EIR_LENGTH];
184         __u8            dev_class[3];
185         __u8            major_class;
186         __u8            minor_class;
187         __u8            max_page;
188         __u8            features[HCI_MAX_PAGES][8];
189         __u8            le_features[8];
190         __u8            le_white_list_size;
191         __u8            le_states[8];
192         __u8            commands[64];
193         __u8            hci_ver;
194         __u16           hci_rev;
195         __u8            lmp_ver;
196         __u16           manufacturer;
197         __u16           lmp_subver;
198         __u16           voice_setting;
199         __u8            num_iac;
200         __u8            io_capability;
201         __s8            inq_tx_power;
202         __u16           page_scan_interval;
203         __u16           page_scan_window;
204         __u8            page_scan_type;
205         __u8            le_adv_channel_map;
206         __u8            le_scan_type;
207         __u16           le_scan_interval;
208         __u16           le_scan_window;
209         __u16           le_conn_min_interval;
210         __u16           le_conn_max_interval;
211         __u16           le_conn_latency;
212         __u16           le_supv_timeout;
213         __u16           discov_interleaved_timeout;
214         __u16           conn_info_min_age;
215         __u16           conn_info_max_age;
216         __u8            ssp_debug_mode;
217         __u32           clock;
218
219         __u16           devid_source;
220         __u16           devid_vendor;
221         __u16           devid_product;
222         __u16           devid_version;
223
224         __u16           pkt_type;
225         __u16           esco_type;
226         __u16           link_policy;
227         __u16           link_mode;
228
229         __u32           idle_timeout;
230         __u16           sniff_min_interval;
231         __u16           sniff_max_interval;
232
233         __u8            amp_status;
234         __u32           amp_total_bw;
235         __u32           amp_max_bw;
236         __u32           amp_min_latency;
237         __u32           amp_max_pdu;
238         __u8            amp_type;
239         __u16           amp_pal_cap;
240         __u16           amp_assoc_size;
241         __u32           amp_max_flush_to;
242         __u32           amp_be_flush_to;
243
244         struct amp_assoc        loc_assoc;
245
246         __u8            flow_ctl_mode;
247
248         unsigned int    auto_accept_delay;
249
250         unsigned long   quirks;
251
252         atomic_t        cmd_cnt;
253         unsigned int    acl_cnt;
254         unsigned int    sco_cnt;
255         unsigned int    le_cnt;
256
257         unsigned int    acl_mtu;
258         unsigned int    sco_mtu;
259         unsigned int    le_mtu;
260         unsigned int    acl_pkts;
261         unsigned int    sco_pkts;
262         unsigned int    le_pkts;
263
264         __u16           block_len;
265         __u16           block_mtu;
266         __u16           num_blocks;
267         __u16           block_cnt;
268
269         unsigned long   acl_last_tx;
270         unsigned long   sco_last_tx;
271         unsigned long   le_last_tx;
272
273         struct workqueue_struct *workqueue;
274         struct workqueue_struct *req_workqueue;
275
276         struct work_struct      power_on;
277         struct delayed_work     power_off;
278
279         __u16                   discov_timeout;
280         struct delayed_work     discov_off;
281
282         struct delayed_work     service_cache;
283
284         struct delayed_work     cmd_timer;
285
286         struct work_struct      rx_work;
287         struct work_struct      cmd_work;
288         struct work_struct      tx_work;
289
290         struct sk_buff_head     rx_q;
291         struct sk_buff_head     raw_q;
292         struct sk_buff_head     cmd_q;
293
294         struct sk_buff          *recv_evt;
295         struct sk_buff          *sent_cmd;
296         struct sk_buff          *reassembly[NUM_REASSEMBLY];
297
298         struct mutex            req_lock;
299         wait_queue_head_t       req_wait_q;
300         __u32                   req_status;
301         __u32                   req_result;
302
303         struct crypto_blkcipher *tfm_aes;
304
305         struct discovery_state  discovery;
306         struct hci_conn_hash    conn_hash;
307
308         struct list_head        mgmt_pending;
309         struct list_head        blacklist;
310         struct list_head        whitelist;
311         struct list_head        uuids;
312         struct list_head        link_keys;
313         struct list_head        long_term_keys;
314         struct list_head        identity_resolving_keys;
315         struct list_head        remote_oob_data;
316         struct list_head        le_white_list;
317         struct list_head        le_conn_params;
318         struct list_head        pend_le_conns;
319         struct list_head        pend_le_reports;
320
321         struct hci_dev_stats    stat;
322
323         atomic_t                promisc;
324
325         struct dentry           *debugfs;
326
327         struct device           dev;
328
329         struct rfkill           *rfkill;
330
331         unsigned long           dbg_flags;
332         unsigned long           dev_flags;
333
334         struct delayed_work     le_scan_disable;
335
336         __s8                    adv_tx_power;
337         __u8                    adv_data[HCI_MAX_AD_LENGTH];
338         __u8                    adv_data_len;
339         __u8                    scan_rsp_data[HCI_MAX_AD_LENGTH];
340         __u8                    scan_rsp_data_len;
341
342         __u8                    irk[16];
343         __u32                   rpa_timeout;
344         struct delayed_work     rpa_expired;
345         bdaddr_t                rpa;
346
347         int (*open)(struct hci_dev *hdev);
348         int (*close)(struct hci_dev *hdev);
349         int (*flush)(struct hci_dev *hdev);
350         int (*setup)(struct hci_dev *hdev);
351         int (*send)(struct hci_dev *hdev, struct sk_buff *skb);
352         void (*notify)(struct hci_dev *hdev, unsigned int evt);
353         int (*set_bdaddr)(struct hci_dev *hdev, const bdaddr_t *bdaddr);
354 };
355
356 #define HCI_PHY_HANDLE(handle)  (handle & 0xff)
357
358 struct hci_conn {
359         struct list_head list;
360
361         atomic_t        refcnt;
362
363         bdaddr_t        dst;
364         __u8            dst_type;
365         bdaddr_t        src;
366         __u8            src_type;
367         bdaddr_t        init_addr;
368         __u8            init_addr_type;
369         bdaddr_t        resp_addr;
370         __u8            resp_addr_type;
371         __u16           handle;
372         __u16           state;
373         __u8            mode;
374         __u8            type;
375         __u8            role;
376         bool            out;
377         __u8            attempt;
378         __u8            dev_class[3];
379         __u8            features[HCI_MAX_PAGES][8];
380         __u16           pkt_type;
381         __u16           link_policy;
382         __u8            key_type;
383         __u8            auth_type;
384         __u8            sec_level;
385         __u8            pending_sec_level;
386         __u8            pin_length;
387         __u8            enc_key_size;
388         __u8            io_capability;
389         __u32           passkey_notify;
390         __u8            passkey_entered;
391         __u16           disc_timeout;
392         __u16           conn_timeout;
393         __u16           setting;
394         __u16           le_conn_min_interval;
395         __u16           le_conn_max_interval;
396         __u16           le_conn_interval;
397         __u16           le_conn_latency;
398         __u16           le_supv_timeout;
399         __s8            rssi;
400         __s8            tx_power;
401         __s8            max_tx_power;
402         unsigned long   flags;
403
404         __u32           clock;
405         __u16           clock_accuracy;
406
407         unsigned long   conn_info_timestamp;
408
409         __u8            remote_cap;
410         __u8            remote_auth;
411         __u8            remote_id;
412
413         unsigned int    sent;
414
415         struct sk_buff_head data_q;
416         struct list_head chan_list;
417
418         struct delayed_work disc_work;
419         struct delayed_work auto_accept_work;
420         struct delayed_work idle_work;
421         struct delayed_work le_conn_timeout;
422
423         struct device   dev;
424
425         struct hci_dev  *hdev;
426         void            *l2cap_data;
427         void            *sco_data;
428         struct amp_mgr  *amp_mgr;
429
430         struct hci_conn *link;
431
432         void (*connect_cfm_cb)  (struct hci_conn *conn, u8 status);
433         void (*security_cfm_cb) (struct hci_conn *conn, u8 status);
434         void (*disconn_cfm_cb)  (struct hci_conn *conn, u8 reason);
435 };
436
437 struct hci_chan {
438         struct list_head list;
439         __u16 handle;
440         struct hci_conn *conn;
441         struct sk_buff_head data_q;
442         unsigned int    sent;
443         __u8            state;
444 };
445
446 struct hci_conn_params {
447         struct list_head list;
448         struct list_head action;
449
450         bdaddr_t addr;
451         u8 addr_type;
452
453         u16 conn_min_interval;
454         u16 conn_max_interval;
455         u16 conn_latency;
456         u16 supervision_timeout;
457
458         enum {
459                 HCI_AUTO_CONN_DISABLED,
460                 HCI_AUTO_CONN_REPORT,
461                 HCI_AUTO_CONN_ALWAYS,
462                 HCI_AUTO_CONN_LINK_LOSS,
463         } auto_connect;
464 };
465
466 extern struct list_head hci_dev_list;
467 extern struct list_head hci_cb_list;
468 extern rwlock_t hci_dev_list_lock;
469 extern rwlock_t hci_cb_list_lock;
470
471 /* ----- HCI interface to upper protocols ----- */
472 int l2cap_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr);
473 void l2cap_connect_cfm(struct hci_conn *hcon, u8 status);
474 int l2cap_disconn_ind(struct hci_conn *hcon);
475 void l2cap_disconn_cfm(struct hci_conn *hcon, u8 reason);
476 int l2cap_security_cfm(struct hci_conn *hcon, u8 status, u8 encrypt);
477 int l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, u16 flags);
478
479 int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 *flags);
480 void sco_connect_cfm(struct hci_conn *hcon, __u8 status);
481 void sco_disconn_cfm(struct hci_conn *hcon, __u8 reason);
482 int sco_recv_scodata(struct hci_conn *hcon, struct sk_buff *skb);
483
484 /* ----- Inquiry cache ----- */
485 #define INQUIRY_CACHE_AGE_MAX   (HZ*30)   /* 30 seconds */
486 #define INQUIRY_ENTRY_AGE_MAX   (HZ*60)   /* 60 seconds */
487
488 static inline void discovery_init(struct hci_dev *hdev)
489 {
490         hdev->discovery.state = DISCOVERY_STOPPED;
491         INIT_LIST_HEAD(&hdev->discovery.all);
492         INIT_LIST_HEAD(&hdev->discovery.unknown);
493         INIT_LIST_HEAD(&hdev->discovery.resolve);
494 }
495
496 bool hci_discovery_active(struct hci_dev *hdev);
497
498 void hci_discovery_set_state(struct hci_dev *hdev, int state);
499
500 static inline int inquiry_cache_empty(struct hci_dev *hdev)
501 {
502         return list_empty(&hdev->discovery.all);
503 }
504
505 static inline long inquiry_cache_age(struct hci_dev *hdev)
506 {
507         struct discovery_state *c = &hdev->discovery;
508         return jiffies - c->timestamp;
509 }
510
511 static inline long inquiry_entry_age(struct inquiry_entry *e)
512 {
513         return jiffies - e->timestamp;
514 }
515
516 struct inquiry_entry *hci_inquiry_cache_lookup(struct hci_dev *hdev,
517                                                bdaddr_t *bdaddr);
518 struct inquiry_entry *hci_inquiry_cache_lookup_unknown(struct hci_dev *hdev,
519                                                        bdaddr_t *bdaddr);
520 struct inquiry_entry *hci_inquiry_cache_lookup_resolve(struct hci_dev *hdev,
521                                                        bdaddr_t *bdaddr,
522                                                        int state);
523 void hci_inquiry_cache_update_resolve(struct hci_dev *hdev,
524                                       struct inquiry_entry *ie);
525 u32 hci_inquiry_cache_update(struct hci_dev *hdev, struct inquiry_data *data,
526                              bool name_known);
527 void hci_inquiry_cache_flush(struct hci_dev *hdev);
528
529 /* ----- HCI Connections ----- */
530 enum {
531         HCI_CONN_AUTH_PEND,
532         HCI_CONN_REAUTH_PEND,
533         HCI_CONN_ENCRYPT_PEND,
534         HCI_CONN_RSWITCH_PEND,
535         HCI_CONN_MODE_CHANGE_PEND,
536         HCI_CONN_SCO_SETUP_PEND,
537         HCI_CONN_LE_SMP_PEND,
538         HCI_CONN_MGMT_CONNECTED,
539         HCI_CONN_SSP_ENABLED,
540         HCI_CONN_SC_ENABLED,
541         HCI_CONN_AES_CCM,
542         HCI_CONN_POWER_SAVE,
543         HCI_CONN_REMOTE_OOB,
544         HCI_CONN_FLUSH_KEY,
545         HCI_CONN_ENCRYPT,
546         HCI_CONN_AUTH,
547         HCI_CONN_SECURE,
548         HCI_CONN_FIPS,
549         HCI_CONN_STK_ENCRYPT,
550         HCI_CONN_AUTH_INITIATOR,
551 };
552
553 static inline bool hci_conn_ssp_enabled(struct hci_conn *conn)
554 {
555         struct hci_dev *hdev = conn->hdev;
556         return test_bit(HCI_SSP_ENABLED, &hdev->dev_flags) &&
557                test_bit(HCI_CONN_SSP_ENABLED, &conn->flags);
558 }
559
560 static inline bool hci_conn_sc_enabled(struct hci_conn *conn)
561 {
562         struct hci_dev *hdev = conn->hdev;
563         return test_bit(HCI_SC_ENABLED, &hdev->dev_flags) &&
564                test_bit(HCI_CONN_SC_ENABLED, &conn->flags);
565 }
566
567 static inline void hci_conn_hash_add(struct hci_dev *hdev, struct hci_conn *c)
568 {
569         struct hci_conn_hash *h = &hdev->conn_hash;
570         list_add_rcu(&c->list, &h->list);
571         switch (c->type) {
572         case ACL_LINK:
573                 h->acl_num++;
574                 break;
575         case AMP_LINK:
576                 h->amp_num++;
577                 break;
578         case LE_LINK:
579                 h->le_num++;
580                 if (c->role == HCI_ROLE_SLAVE)
581                         h->le_num_slave++;
582                 break;
583         case SCO_LINK:
584         case ESCO_LINK:
585                 h->sco_num++;
586                 break;
587         }
588 }
589
590 static inline void hci_conn_hash_del(struct hci_dev *hdev, struct hci_conn *c)
591 {
592         struct hci_conn_hash *h = &hdev->conn_hash;
593
594         list_del_rcu(&c->list);
595         synchronize_rcu();
596
597         switch (c->type) {
598         case ACL_LINK:
599                 h->acl_num--;
600                 break;
601         case AMP_LINK:
602                 h->amp_num--;
603                 break;
604         case LE_LINK:
605                 h->le_num--;
606                 if (c->role == HCI_ROLE_SLAVE)
607                         h->le_num_slave--;
608                 break;
609         case SCO_LINK:
610         case ESCO_LINK:
611                 h->sco_num--;
612                 break;
613         }
614 }
615
616 static inline unsigned int hci_conn_num(struct hci_dev *hdev, __u8 type)
617 {
618         struct hci_conn_hash *h = &hdev->conn_hash;
619         switch (type) {
620         case ACL_LINK:
621                 return h->acl_num;
622         case AMP_LINK:
623                 return h->amp_num;
624         case LE_LINK:
625                 return h->le_num;
626         case SCO_LINK:
627         case ESCO_LINK:
628                 return h->sco_num;
629         default:
630                 return 0;
631         }
632 }
633
634 static inline unsigned int hci_conn_count(struct hci_dev *hdev)
635 {
636         struct hci_conn_hash *c = &hdev->conn_hash;
637
638         return c->acl_num + c->amp_num + c->sco_num + c->le_num;
639 }
640
641 static inline struct hci_conn *hci_conn_hash_lookup_handle(struct hci_dev *hdev,
642                                                                 __u16 handle)
643 {
644         struct hci_conn_hash *h = &hdev->conn_hash;
645         struct hci_conn  *c;
646
647         rcu_read_lock();
648
649         list_for_each_entry_rcu(c, &h->list, list) {
650                 if (c->handle == handle) {
651                         rcu_read_unlock();
652                         return c;
653                 }
654         }
655         rcu_read_unlock();
656
657         return NULL;
658 }
659
660 static inline struct hci_conn *hci_conn_hash_lookup_ba(struct hci_dev *hdev,
661                                                         __u8 type, bdaddr_t *ba)
662 {
663         struct hci_conn_hash *h = &hdev->conn_hash;
664         struct hci_conn  *c;
665
666         rcu_read_lock();
667
668         list_for_each_entry_rcu(c, &h->list, list) {
669                 if (c->type == type && !bacmp(&c->dst, ba)) {
670                         rcu_read_unlock();
671                         return c;
672                 }
673         }
674
675         rcu_read_unlock();
676
677         return NULL;
678 }
679
680 static inline struct hci_conn *hci_conn_hash_lookup_state(struct hci_dev *hdev,
681                                                         __u8 type, __u16 state)
682 {
683         struct hci_conn_hash *h = &hdev->conn_hash;
684         struct hci_conn  *c;
685
686         rcu_read_lock();
687
688         list_for_each_entry_rcu(c, &h->list, list) {
689                 if (c->type == type && c->state == state) {
690                         rcu_read_unlock();
691                         return c;
692                 }
693         }
694
695         rcu_read_unlock();
696
697         return NULL;
698 }
699
700 void hci_disconnect(struct hci_conn *conn, __u8 reason);
701 bool hci_setup_sync(struct hci_conn *conn, __u16 handle);
702 void hci_sco_setup(struct hci_conn *conn, __u8 status);
703
704 struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst,
705                               u8 role);
706 int hci_conn_del(struct hci_conn *conn);
707 void hci_conn_hash_flush(struct hci_dev *hdev);
708 void hci_conn_check_pending(struct hci_dev *hdev);
709
710 struct hci_chan *hci_chan_create(struct hci_conn *conn);
711 void hci_chan_del(struct hci_chan *chan);
712 void hci_chan_list_flush(struct hci_conn *conn);
713 struct hci_chan *hci_chan_lookup_handle(struct hci_dev *hdev, __u16 handle);
714
715 struct hci_conn *hci_connect_le(struct hci_dev *hdev, bdaddr_t *dst,
716                                 u8 dst_type, u8 sec_level, u16 conn_timeout,
717                                 u8 role);
718 struct hci_conn *hci_connect_acl(struct hci_dev *hdev, bdaddr_t *dst,
719                                  u8 sec_level, u8 auth_type);
720 struct hci_conn *hci_connect_sco(struct hci_dev *hdev, int type, bdaddr_t *dst,
721                                  __u16 setting);
722 int hci_conn_check_link_mode(struct hci_conn *conn);
723 int hci_conn_check_secure(struct hci_conn *conn, __u8 sec_level);
724 int hci_conn_security(struct hci_conn *conn, __u8 sec_level, __u8 auth_type,
725                       bool initiator);
726 int hci_conn_change_link_key(struct hci_conn *conn);
727 int hci_conn_switch_role(struct hci_conn *conn, __u8 role);
728
729 void hci_conn_enter_active_mode(struct hci_conn *conn, __u8 force_active);
730
731 void hci_le_conn_failed(struct hci_conn *conn, u8 status);
732
733 /*
734  * hci_conn_get() and hci_conn_put() are used to control the life-time of an
735  * "hci_conn" object. They do not guarantee that the hci_conn object is running,
736  * working or anything else. They just guarantee that the object is available
737  * and can be dereferenced. So you can use its locks, local variables and any
738  * other constant data.
739  * Before accessing runtime data, you _must_ lock the object and then check that
740  * it is still running. As soon as you release the locks, the connection might
741  * get dropped, though.
742  *
743  * On the other hand, hci_conn_hold() and hci_conn_drop() are used to control
744  * how long the underlying connection is held. So every channel that runs on the
745  * hci_conn object calls this to prevent the connection from disappearing. As
746  * long as you hold a device, you must also guarantee that you have a valid
747  * reference to the device via hci_conn_get() (or the initial reference from
748  * hci_conn_add()).
749  * The hold()/drop() ref-count is known to drop below 0 sometimes, which doesn't
750  * break because nobody cares for that. But this means, we cannot use
751  * _get()/_drop() in it, but require the caller to have a valid ref (FIXME).
752  */
753
754 static inline void hci_conn_get(struct hci_conn *conn)
755 {
756         get_device(&conn->dev);
757 }
758
759 static inline void hci_conn_put(struct hci_conn *conn)
760 {
761         put_device(&conn->dev);
762 }
763
764 static inline void hci_conn_hold(struct hci_conn *conn)
765 {
766         BT_DBG("hcon %p orig refcnt %d", conn, atomic_read(&conn->refcnt));
767
768         atomic_inc(&conn->refcnt);
769         cancel_delayed_work(&conn->disc_work);
770 }
771
772 static inline void hci_conn_drop(struct hci_conn *conn)
773 {
774         BT_DBG("hcon %p orig refcnt %d", conn, atomic_read(&conn->refcnt));
775
776         if (atomic_dec_and_test(&conn->refcnt)) {
777                 unsigned long timeo;
778
779                 switch (conn->type) {
780                 case ACL_LINK:
781                 case LE_LINK:
782                         cancel_delayed_work(&conn->idle_work);
783                         if (conn->state == BT_CONNECTED) {
784                                 timeo = conn->disc_timeout;
785                                 if (!conn->out)
786                                         timeo *= 2;
787                         } else {
788                                 timeo = msecs_to_jiffies(10);
789                         }
790                         break;
791
792                 case AMP_LINK:
793                         timeo = conn->disc_timeout;
794                         break;
795
796                 default:
797                         timeo = msecs_to_jiffies(10);
798                         break;
799                 }
800
801                 cancel_delayed_work(&conn->disc_work);
802                 queue_delayed_work(conn->hdev->workqueue,
803                                    &conn->disc_work, timeo);
804         }
805 }
806
807 /* ----- HCI Devices ----- */
808 static inline void hci_dev_put(struct hci_dev *d)
809 {
810         BT_DBG("%s orig refcnt %d", d->name,
811                atomic_read(&d->dev.kobj.kref.refcount));
812
813         put_device(&d->dev);
814 }
815
816 static inline struct hci_dev *hci_dev_hold(struct hci_dev *d)
817 {
818         BT_DBG("%s orig refcnt %d", d->name,
819                atomic_read(&d->dev.kobj.kref.refcount));
820
821         get_device(&d->dev);
822         return d;
823 }
824
825 #define hci_dev_lock(d)         mutex_lock(&d->lock)
826 #define hci_dev_unlock(d)       mutex_unlock(&d->lock)
827
828 #define to_hci_dev(d) container_of(d, struct hci_dev, dev)
829 #define to_hci_conn(c) container_of(c, struct hci_conn, dev)
830
831 static inline void *hci_get_drvdata(struct hci_dev *hdev)
832 {
833         return dev_get_drvdata(&hdev->dev);
834 }
835
836 static inline void hci_set_drvdata(struct hci_dev *hdev, void *data)
837 {
838         dev_set_drvdata(&hdev->dev, data);
839 }
840
841 struct hci_dev *hci_dev_get(int index);
842 struct hci_dev *hci_get_route(bdaddr_t *dst, bdaddr_t *src);
843
844 struct hci_dev *hci_alloc_dev(void);
845 void hci_free_dev(struct hci_dev *hdev);
846 int hci_register_dev(struct hci_dev *hdev);
847 void hci_unregister_dev(struct hci_dev *hdev);
848 int hci_suspend_dev(struct hci_dev *hdev);
849 int hci_resume_dev(struct hci_dev *hdev);
850 int hci_dev_open(__u16 dev);
851 int hci_dev_close(__u16 dev);
852 int hci_dev_reset(__u16 dev);
853 int hci_dev_reset_stat(__u16 dev);
854 int hci_dev_cmd(unsigned int cmd, void __user *arg);
855 int hci_get_dev_list(void __user *arg);
856 int hci_get_dev_info(void __user *arg);
857 int hci_get_conn_list(void __user *arg);
858 int hci_get_conn_info(struct hci_dev *hdev, void __user *arg);
859 int hci_get_auth_info(struct hci_dev *hdev, void __user *arg);
860 int hci_inquiry(void __user *arg);
861
862 struct bdaddr_list *hci_bdaddr_list_lookup(struct list_head *list,
863                                            bdaddr_t *bdaddr, u8 type);
864 int hci_bdaddr_list_add(struct list_head *list, bdaddr_t *bdaddr, u8 type);
865 int hci_bdaddr_list_del(struct list_head *list, bdaddr_t *bdaddr, u8 type);
866 void hci_bdaddr_list_clear(struct list_head *list);
867
868 struct hci_conn_params *hci_conn_params_lookup(struct hci_dev *hdev,
869                                                bdaddr_t *addr, u8 addr_type);
870 struct hci_conn_params *hci_conn_params_add(struct hci_dev *hdev,
871                                             bdaddr_t *addr, u8 addr_type);
872 int hci_conn_params_set(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type,
873                         u8 auto_connect);
874 void hci_conn_params_del(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type);
875 void hci_conn_params_clear_all(struct hci_dev *hdev);
876 void hci_conn_params_clear_disabled(struct hci_dev *hdev);
877
878 struct hci_conn_params *hci_pend_le_action_lookup(struct list_head *list,
879                                                   bdaddr_t *addr,
880                                                   u8 addr_type);
881
882 void hci_update_background_scan(struct hci_dev *hdev);
883
884 void hci_uuids_clear(struct hci_dev *hdev);
885
886 void hci_link_keys_clear(struct hci_dev *hdev);
887 struct link_key *hci_find_link_key(struct hci_dev *hdev, bdaddr_t *bdaddr);
888 struct link_key *hci_add_link_key(struct hci_dev *hdev, struct hci_conn *conn,
889                                   bdaddr_t *bdaddr, u8 *val, u8 type,
890                                   u8 pin_len, bool *persistent);
891 struct smp_ltk *hci_find_ltk(struct hci_dev *hdev, __le16 ediv, __le64 rand,
892                              u8 role);
893 struct smp_ltk *hci_add_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr,
894                             u8 addr_type, u8 type, u8 authenticated,
895                             u8 tk[16], u8 enc_size, __le16 ediv, __le64 rand);
896 struct smp_ltk *hci_find_ltk_by_addr(struct hci_dev *hdev, bdaddr_t *bdaddr,
897                                      u8 addr_type, u8 role);
898 int hci_remove_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 bdaddr_type);
899 void hci_smp_ltks_clear(struct hci_dev *hdev);
900 int hci_remove_link_key(struct hci_dev *hdev, bdaddr_t *bdaddr);
901
902 struct smp_irk *hci_find_irk_by_rpa(struct hci_dev *hdev, bdaddr_t *rpa);
903 struct smp_irk *hci_find_irk_by_addr(struct hci_dev *hdev, bdaddr_t *bdaddr,
904                                      u8 addr_type);
905 struct smp_irk *hci_add_irk(struct hci_dev *hdev, bdaddr_t *bdaddr,
906                             u8 addr_type, u8 val[16], bdaddr_t *rpa);
907 void hci_remove_irk(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 addr_type);
908 void hci_smp_irks_clear(struct hci_dev *hdev);
909
910 void hci_remote_oob_data_clear(struct hci_dev *hdev);
911 struct oob_data *hci_find_remote_oob_data(struct hci_dev *hdev,
912                                           bdaddr_t *bdaddr);
913 int hci_add_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr,
914                             u8 *hash, u8 *randomizer);
915 int hci_add_remote_oob_ext_data(struct hci_dev *hdev, bdaddr_t *bdaddr,
916                                 u8 *hash192, u8 *randomizer192,
917                                 u8 *hash256, u8 *randomizer256);
918 int hci_remove_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr);
919
920 void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb);
921
922 int hci_recv_frame(struct hci_dev *hdev, struct sk_buff *skb);
923 int hci_recv_fragment(struct hci_dev *hdev, int type, void *data, int count);
924 int hci_recv_stream_fragment(struct hci_dev *hdev, void *data, int count);
925
926 void hci_init_sysfs(struct hci_dev *hdev);
927 void hci_conn_init_sysfs(struct hci_conn *conn);
928 void hci_conn_add_sysfs(struct hci_conn *conn);
929 void hci_conn_del_sysfs(struct hci_conn *conn);
930
931 #define SET_HCIDEV_DEV(hdev, pdev) ((hdev)->dev.parent = (pdev))
932
933 /* ----- LMP capabilities ----- */
934 #define lmp_encrypt_capable(dev)   ((dev)->features[0][0] & LMP_ENCRYPT)
935 #define lmp_rswitch_capable(dev)   ((dev)->features[0][0] & LMP_RSWITCH)
936 #define lmp_hold_capable(dev)      ((dev)->features[0][0] & LMP_HOLD)
937 #define lmp_sniff_capable(dev)     ((dev)->features[0][0] & LMP_SNIFF)
938 #define lmp_park_capable(dev)      ((dev)->features[0][1] & LMP_PARK)
939 #define lmp_inq_rssi_capable(dev)  ((dev)->features[0][3] & LMP_RSSI_INQ)
940 #define lmp_esco_capable(dev)      ((dev)->features[0][3] & LMP_ESCO)
941 #define lmp_bredr_capable(dev)     (!((dev)->features[0][4] & LMP_NO_BREDR))
942 #define lmp_le_capable(dev)        ((dev)->features[0][4] & LMP_LE)
943 #define lmp_sniffsubr_capable(dev) ((dev)->features[0][5] & LMP_SNIFF_SUBR)
944 #define lmp_pause_enc_capable(dev) ((dev)->features[0][5] & LMP_PAUSE_ENC)
945 #define lmp_ext_inq_capable(dev)   ((dev)->features[0][6] & LMP_EXT_INQ)
946 #define lmp_le_br_capable(dev)     (!!((dev)->features[0][6] & LMP_SIMUL_LE_BR))
947 #define lmp_ssp_capable(dev)       ((dev)->features[0][6] & LMP_SIMPLE_PAIR)
948 #define lmp_no_flush_capable(dev)  ((dev)->features[0][6] & LMP_NO_FLUSH)
949 #define lmp_lsto_capable(dev)      ((dev)->features[0][7] & LMP_LSTO)
950 #define lmp_inq_tx_pwr_capable(dev) ((dev)->features[0][7] & LMP_INQ_TX_PWR)
951 #define lmp_ext_feat_capable(dev)  ((dev)->features[0][7] & LMP_EXTFEATURES)
952 #define lmp_transp_capable(dev)    ((dev)->features[0][2] & LMP_TRANSPARENT)
953
954 /* ----- Extended LMP capabilities ----- */
955 #define lmp_csb_master_capable(dev) ((dev)->features[2][0] & LMP_CSB_MASTER)
956 #define lmp_csb_slave_capable(dev)  ((dev)->features[2][0] & LMP_CSB_SLAVE)
957 #define lmp_sync_train_capable(dev) ((dev)->features[2][0] & LMP_SYNC_TRAIN)
958 #define lmp_sync_scan_capable(dev)  ((dev)->features[2][0] & LMP_SYNC_SCAN)
959 #define lmp_sc_capable(dev)         ((dev)->features[2][1] & LMP_SC)
960 #define lmp_ping_capable(dev)       ((dev)->features[2][1] & LMP_PING)
961
962 /* ----- Host capabilities ----- */
963 #define lmp_host_ssp_capable(dev)  ((dev)->features[1][0] & LMP_HOST_SSP)
964 #define lmp_host_sc_capable(dev)   ((dev)->features[1][0] & LMP_HOST_SC)
965 #define lmp_host_le_capable(dev)   (!!((dev)->features[1][0] & LMP_HOST_LE))
966 #define lmp_host_le_br_capable(dev) (!!((dev)->features[1][0] & LMP_HOST_LE_BREDR))
967
968 /* ----- HCI protocols ----- */
969 #define HCI_PROTO_DEFER             0x01
970
971 static inline int hci_proto_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr,
972                                         __u8 type, __u8 *flags)
973 {
974         switch (type) {
975         case ACL_LINK:
976                 return l2cap_connect_ind(hdev, bdaddr);
977
978         case SCO_LINK:
979         case ESCO_LINK:
980                 return sco_connect_ind(hdev, bdaddr, flags);
981
982         default:
983                 BT_ERR("unknown link type %d", type);
984                 return -EINVAL;
985         }
986 }
987
988 static inline void hci_proto_connect_cfm(struct hci_conn *conn, __u8 status)
989 {
990         switch (conn->type) {
991         case ACL_LINK:
992         case LE_LINK:
993                 l2cap_connect_cfm(conn, status);
994                 break;
995
996         case SCO_LINK:
997         case ESCO_LINK:
998                 sco_connect_cfm(conn, status);
999                 break;
1000
1001         default:
1002                 BT_ERR("unknown link type %d", conn->type);
1003                 break;
1004         }
1005
1006         if (conn->connect_cfm_cb)
1007                 conn->connect_cfm_cb(conn, status);
1008 }
1009
1010 static inline int hci_proto_disconn_ind(struct hci_conn *conn)
1011 {
1012         if (conn->type != ACL_LINK && conn->type != LE_LINK)
1013                 return HCI_ERROR_REMOTE_USER_TERM;
1014
1015         return l2cap_disconn_ind(conn);
1016 }
1017
1018 static inline void hci_proto_disconn_cfm(struct hci_conn *conn, __u8 reason)
1019 {
1020         switch (conn->type) {
1021         case ACL_LINK:
1022         case LE_LINK:
1023                 l2cap_disconn_cfm(conn, reason);
1024                 break;
1025
1026         case SCO_LINK:
1027         case ESCO_LINK:
1028                 sco_disconn_cfm(conn, reason);
1029                 break;
1030
1031         /* L2CAP would be handled for BREDR chan */
1032         case AMP_LINK:
1033                 break;
1034
1035         default:
1036                 BT_ERR("unknown link type %d", conn->type);
1037                 break;
1038         }
1039
1040         if (conn->disconn_cfm_cb)
1041                 conn->disconn_cfm_cb(conn, reason);
1042 }
1043
1044 static inline void hci_proto_auth_cfm(struct hci_conn *conn, __u8 status)
1045 {
1046         __u8 encrypt;
1047
1048         if (conn->type != ACL_LINK && conn->type != LE_LINK)
1049                 return;
1050
1051         if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags))
1052                 return;
1053
1054         encrypt = test_bit(HCI_CONN_ENCRYPT, &conn->flags) ? 0x01 : 0x00;
1055         l2cap_security_cfm(conn, status, encrypt);
1056
1057         if (conn->security_cfm_cb)
1058                 conn->security_cfm_cb(conn, status);
1059 }
1060
1061 static inline void hci_proto_encrypt_cfm(struct hci_conn *conn, __u8 status,
1062                                                                 __u8 encrypt)
1063 {
1064         if (conn->type != ACL_LINK && conn->type != LE_LINK)
1065                 return;
1066
1067         l2cap_security_cfm(conn, status, encrypt);
1068
1069         if (conn->security_cfm_cb)
1070                 conn->security_cfm_cb(conn, status);
1071 }
1072
1073 /* ----- HCI callbacks ----- */
1074 struct hci_cb {
1075         struct list_head list;
1076
1077         char *name;
1078
1079         void (*security_cfm)    (struct hci_conn *conn, __u8 status,
1080                                                                 __u8 encrypt);
1081         void (*key_change_cfm)  (struct hci_conn *conn, __u8 status);
1082         void (*role_switch_cfm) (struct hci_conn *conn, __u8 status, __u8 role);
1083 };
1084
1085 static inline void hci_auth_cfm(struct hci_conn *conn, __u8 status)
1086 {
1087         struct hci_cb *cb;
1088         __u8 encrypt;
1089
1090         hci_proto_auth_cfm(conn, status);
1091
1092         if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags))
1093                 return;
1094
1095         encrypt = test_bit(HCI_CONN_ENCRYPT, &conn->flags) ? 0x01 : 0x00;
1096
1097         read_lock(&hci_cb_list_lock);
1098         list_for_each_entry(cb, &hci_cb_list, list) {
1099                 if (cb->security_cfm)
1100                         cb->security_cfm(conn, status, encrypt);
1101         }
1102         read_unlock(&hci_cb_list_lock);
1103 }
1104
1105 static inline void hci_encrypt_cfm(struct hci_conn *conn, __u8 status,
1106                                                                 __u8 encrypt)
1107 {
1108         struct hci_cb *cb;
1109
1110         if (conn->sec_level == BT_SECURITY_SDP)
1111                 conn->sec_level = BT_SECURITY_LOW;
1112
1113         if (conn->pending_sec_level > conn->sec_level)
1114                 conn->sec_level = conn->pending_sec_level;
1115
1116         hci_proto_encrypt_cfm(conn, status, encrypt);
1117
1118         read_lock(&hci_cb_list_lock);
1119         list_for_each_entry(cb, &hci_cb_list, list) {
1120                 if (cb->security_cfm)
1121                         cb->security_cfm(conn, status, encrypt);
1122         }
1123         read_unlock(&hci_cb_list_lock);
1124 }
1125
1126 static inline void hci_key_change_cfm(struct hci_conn *conn, __u8 status)
1127 {
1128         struct hci_cb *cb;
1129
1130         read_lock(&hci_cb_list_lock);
1131         list_for_each_entry(cb, &hci_cb_list, list) {
1132                 if (cb->key_change_cfm)
1133                         cb->key_change_cfm(conn, status);
1134         }
1135         read_unlock(&hci_cb_list_lock);
1136 }
1137
1138 static inline void hci_role_switch_cfm(struct hci_conn *conn, __u8 status,
1139                                                                 __u8 role)
1140 {
1141         struct hci_cb *cb;
1142
1143         read_lock(&hci_cb_list_lock);
1144         list_for_each_entry(cb, &hci_cb_list, list) {
1145                 if (cb->role_switch_cfm)
1146                         cb->role_switch_cfm(conn, status, role);
1147         }
1148         read_unlock(&hci_cb_list_lock);
1149 }
1150
1151 static inline bool eir_has_data_type(u8 *data, size_t data_len, u8 type)
1152 {
1153         size_t parsed = 0;
1154
1155         if (data_len < 2)
1156                 return false;
1157
1158         while (parsed < data_len - 1) {
1159                 u8 field_len = data[0];
1160
1161                 if (field_len == 0)
1162                         break;
1163
1164                 parsed += field_len + 1;
1165
1166                 if (parsed > data_len)
1167                         break;
1168
1169                 if (data[1] == type)
1170                         return true;
1171
1172                 data += field_len + 1;
1173         }
1174
1175         return false;
1176 }
1177
1178 static inline bool hci_bdaddr_is_rpa(bdaddr_t *bdaddr, u8 addr_type)
1179 {
1180         if (addr_type != ADDR_LE_DEV_RANDOM)
1181                 return false;
1182
1183         if ((bdaddr->b[5] & 0xc0) == 0x40)
1184                return true;
1185
1186         return false;
1187 }
1188
1189 static inline bool hci_is_identity_address(bdaddr_t *addr, u8 addr_type)
1190 {
1191         if (addr_type == ADDR_LE_DEV_PUBLIC)
1192                 return true;
1193
1194         /* Check for Random Static address type */
1195         if ((addr->b[5] & 0xc0) == 0xc0)
1196                 return true;
1197
1198         return false;
1199 }
1200
1201 static inline struct smp_irk *hci_get_irk(struct hci_dev *hdev,
1202                                           bdaddr_t *bdaddr, u8 addr_type)
1203 {
1204         if (!hci_bdaddr_is_rpa(bdaddr, addr_type))
1205                 return NULL;
1206
1207         return hci_find_irk_by_rpa(hdev, bdaddr);
1208 }
1209
1210 static inline int hci_check_conn_params(u16 min, u16 max, u16 latency,
1211                                         u16 to_multiplier)
1212 {
1213         u16 max_latency;
1214
1215         if (min > max || min < 6 || max > 3200)
1216                 return -EINVAL;
1217
1218         if (to_multiplier < 10 || to_multiplier > 3200)
1219                 return -EINVAL;
1220
1221         if (max >= to_multiplier * 8)
1222                 return -EINVAL;
1223
1224         max_latency = (to_multiplier * 8 / max) - 1;
1225         if (latency > 499 || latency > max_latency)
1226                 return -EINVAL;
1227
1228         return 0;
1229 }
1230
1231 int hci_register_cb(struct hci_cb *hcb);
1232 int hci_unregister_cb(struct hci_cb *hcb);
1233
1234 struct hci_request {
1235         struct hci_dev          *hdev;
1236         struct sk_buff_head     cmd_q;
1237
1238         /* If something goes wrong when building the HCI request, the error
1239          * value is stored in this field.
1240          */
1241         int                     err;
1242 };
1243
1244 void hci_req_init(struct hci_request *req, struct hci_dev *hdev);
1245 int hci_req_run(struct hci_request *req, hci_req_complete_t complete);
1246 void hci_req_add(struct hci_request *req, u16 opcode, u32 plen,
1247                  const void *param);
1248 void hci_req_add_ev(struct hci_request *req, u16 opcode, u32 plen,
1249                     const void *param, u8 event);
1250 void hci_req_cmd_complete(struct hci_dev *hdev, u16 opcode, u8 status);
1251 bool hci_req_pending(struct hci_dev *hdev);
1252
1253 void hci_req_add_le_scan_disable(struct hci_request *req);
1254 void hci_req_add_le_passive_scan(struct hci_request *req);
1255
1256 struct sk_buff *__hci_cmd_sync(struct hci_dev *hdev, u16 opcode, u32 plen,
1257                                const void *param, u32 timeout);
1258 struct sk_buff *__hci_cmd_sync_ev(struct hci_dev *hdev, u16 opcode, u32 plen,
1259                                   const void *param, u8 event, u32 timeout);
1260
1261 int hci_send_cmd(struct hci_dev *hdev, __u16 opcode, __u32 plen,
1262                  const void *param);
1263 void hci_send_acl(struct hci_chan *chan, struct sk_buff *skb, __u16 flags);
1264 void hci_send_sco(struct hci_conn *conn, struct sk_buff *skb);
1265
1266 void *hci_sent_cmd_data(struct hci_dev *hdev, __u16 opcode);
1267
1268 /* ----- HCI Sockets ----- */
1269 void hci_send_to_sock(struct hci_dev *hdev, struct sk_buff *skb);
1270 void hci_send_to_control(struct sk_buff *skb, struct sock *skip_sk);
1271 void hci_send_to_monitor(struct hci_dev *hdev, struct sk_buff *skb);
1272
1273 void hci_sock_dev_event(struct hci_dev *hdev, int event);
1274
1275 /* Management interface */
1276 #define DISCOV_TYPE_BREDR               (BIT(BDADDR_BREDR))
1277 #define DISCOV_TYPE_LE                  (BIT(BDADDR_LE_PUBLIC) | \
1278                                          BIT(BDADDR_LE_RANDOM))
1279 #define DISCOV_TYPE_INTERLEAVED         (BIT(BDADDR_BREDR) | \
1280                                          BIT(BDADDR_LE_PUBLIC) | \
1281                                          BIT(BDADDR_LE_RANDOM))
1282
1283 /* These LE scan and inquiry parameters were chosen according to LE General
1284  * Discovery Procedure specification.
1285  */
1286 #define DISCOV_LE_SCAN_WIN              0x12
1287 #define DISCOV_LE_SCAN_INT              0x12
1288 #define DISCOV_LE_TIMEOUT               10240   /* msec */
1289 #define DISCOV_INTERLEAVED_TIMEOUT      5120    /* msec */
1290 #define DISCOV_INTERLEAVED_INQUIRY_LEN  0x04
1291 #define DISCOV_BREDR_INQUIRY_LEN        0x08
1292
1293 int mgmt_control(struct sock *sk, struct msghdr *msg, size_t len);
1294 int mgmt_new_settings(struct hci_dev *hdev);
1295 void mgmt_index_added(struct hci_dev *hdev);
1296 void mgmt_index_removed(struct hci_dev *hdev);
1297 void mgmt_set_powered_failed(struct hci_dev *hdev, int err);
1298 int mgmt_powered(struct hci_dev *hdev, u8 powered);
1299 int mgmt_update_adv_data(struct hci_dev *hdev);
1300 void mgmt_discoverable_timeout(struct hci_dev *hdev);
1301 void mgmt_new_link_key(struct hci_dev *hdev, struct link_key *key,
1302                        bool persistent);
1303 void mgmt_device_connected(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
1304                            u8 addr_type, u32 flags, u8 *name, u8 name_len,
1305                            u8 *dev_class);
1306 void mgmt_device_disconnected(struct hci_dev *hdev, bdaddr_t *bdaddr,
1307                               u8 link_type, u8 addr_type, u8 reason,
1308                               bool mgmt_connected);
1309 void mgmt_disconnect_failed(struct hci_dev *hdev, bdaddr_t *bdaddr,
1310                             u8 link_type, u8 addr_type, u8 status);
1311 void mgmt_connect_failed(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
1312                          u8 addr_type, u8 status);
1313 void mgmt_pin_code_request(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 secure);
1314 void mgmt_pin_code_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
1315                                   u8 status);
1316 void mgmt_pin_code_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
1317                                       u8 status);
1318 int mgmt_user_confirm_request(struct hci_dev *hdev, bdaddr_t *bdaddr,
1319                               u8 link_type, u8 addr_type, u32 value,
1320                               u8 confirm_hint);
1321 int mgmt_user_confirm_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
1322                                      u8 link_type, u8 addr_type, u8 status);
1323 int mgmt_user_confirm_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
1324                                          u8 link_type, u8 addr_type, u8 status);
1325 int mgmt_user_passkey_request(struct hci_dev *hdev, bdaddr_t *bdaddr,
1326                               u8 link_type, u8 addr_type);
1327 int mgmt_user_passkey_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
1328                                      u8 link_type, u8 addr_type, u8 status);
1329 int mgmt_user_passkey_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
1330                                          u8 link_type, u8 addr_type, u8 status);
1331 int mgmt_user_passkey_notify(struct hci_dev *hdev, bdaddr_t *bdaddr,
1332                              u8 link_type, u8 addr_type, u32 passkey,
1333                              u8 entered);
1334 void mgmt_auth_failed(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
1335                       u8 addr_type, u8 status);
1336 void mgmt_auth_enable_complete(struct hci_dev *hdev, u8 status);
1337 void mgmt_ssp_enable_complete(struct hci_dev *hdev, u8 enable, u8 status);
1338 void mgmt_sc_enable_complete(struct hci_dev *hdev, u8 enable, u8 status);
1339 void mgmt_set_class_of_dev_complete(struct hci_dev *hdev, u8 *dev_class,
1340                                     u8 status);
1341 void mgmt_set_local_name_complete(struct hci_dev *hdev, u8 *name, u8 status);
1342 void mgmt_read_local_oob_data_complete(struct hci_dev *hdev, u8 *hash192,
1343                                        u8 *randomizer192, u8 *hash256,
1344                                        u8 *randomizer256, u8 status);
1345 void mgmt_device_found(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
1346                        u8 addr_type, u8 *dev_class, s8 rssi, u32 flags,
1347                        u8 *eir, u16 eir_len, u8 *scan_rsp, u8 scan_rsp_len);
1348 void mgmt_remote_name(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
1349                       u8 addr_type, s8 rssi, u8 *name, u8 name_len);
1350 void mgmt_discovering(struct hci_dev *hdev, u8 discovering);
1351 void mgmt_new_ltk(struct hci_dev *hdev, struct smp_ltk *key, bool persistent);
1352 void mgmt_new_irk(struct hci_dev *hdev, struct smp_irk *irk);
1353 void mgmt_new_csrk(struct hci_dev *hdev, struct smp_csrk *csrk,
1354                    bool persistent);
1355 void mgmt_new_conn_param(struct hci_dev *hdev, bdaddr_t *bdaddr,
1356                          u8 bdaddr_type, u8 store_hint, u16 min_interval,
1357                          u16 max_interval, u16 latency, u16 timeout);
1358 void mgmt_reenable_advertising(struct hci_dev *hdev);
1359 void mgmt_smp_complete(struct hci_conn *conn, bool complete);
1360
1361 u8 hci_le_conn_update(struct hci_conn *conn, u16 min, u16 max, u16 latency,
1362                       u16 to_multiplier);
1363 void hci_le_start_enc(struct hci_conn *conn, __le16 ediv, __le64 rand,
1364                                                         __u8 ltk[16]);
1365
1366 int hci_update_random_address(struct hci_request *req, bool require_privacy,
1367                               u8 *own_addr_type);
1368 void hci_copy_identity_address(struct hci_dev *hdev, bdaddr_t *bdaddr,
1369                                u8 *bdaddr_type);
1370
1371 #define SCO_AIRMODE_MASK       0x0003
1372 #define SCO_AIRMODE_CVSD       0x0000
1373 #define SCO_AIRMODE_TRANSP     0x0003
1374
1375 #endif /* __HCI_CORE_H */