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