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