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