GNU Linux-libre 5.10.217-gnu1
[releases.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 <linux/idr.h>
29 #include <linux/leds.h>
30 #include <linux/rculist.h>
31
32 #include <net/bluetooth/hci.h>
33 #include <net/bluetooth/hci_sock.h>
34
35 /* HCI priority */
36 #define HCI_PRIO_MAX    7
37
38 /* HCI maximum id value */
39 #define HCI_MAX_ID 10000
40
41 /* HCI Core structures */
42 struct inquiry_data {
43         bdaddr_t        bdaddr;
44         __u8            pscan_rep_mode;
45         __u8            pscan_period_mode;
46         __u8            pscan_mode;
47         __u8            dev_class[3];
48         __le16          clock_offset;
49         __s8            rssi;
50         __u8            ssp_mode;
51 };
52
53 struct inquiry_entry {
54         struct list_head        all;            /* inq_cache.all */
55         struct list_head        list;           /* unknown or resolve */
56         enum {
57                 NAME_NOT_KNOWN,
58                 NAME_NEEDED,
59                 NAME_PENDING,
60                 NAME_KNOWN,
61         } name_state;
62         __u32                   timestamp;
63         struct inquiry_data     data;
64 };
65
66 struct discovery_state {
67         int                     type;
68         enum {
69                 DISCOVERY_STOPPED,
70                 DISCOVERY_STARTING,
71                 DISCOVERY_FINDING,
72                 DISCOVERY_RESOLVING,
73                 DISCOVERY_STOPPING,
74         } state;
75         struct list_head        all;    /* All devices found during inquiry */
76         struct list_head        unknown;        /* Name state not known */
77         struct list_head        resolve;        /* Name needs to be resolved */
78         __u32                   timestamp;
79         bdaddr_t                last_adv_addr;
80         u8                      last_adv_addr_type;
81         s8                      last_adv_rssi;
82         u32                     last_adv_flags;
83         u8                      last_adv_data[HCI_MAX_AD_LENGTH];
84         u8                      last_adv_data_len;
85         bool                    report_invalid_rssi;
86         bool                    result_filtering;
87         bool                    limited;
88         s8                      rssi;
89         u16                     uuid_count;
90         u8                      (*uuids)[16];
91         unsigned long           scan_start;
92         unsigned long           scan_duration;
93 };
94
95 #define SUSPEND_NOTIFIER_TIMEOUT        msecs_to_jiffies(2000) /* 2 seconds */
96
97 enum suspend_tasks {
98         SUSPEND_PAUSE_DISCOVERY,
99         SUSPEND_UNPAUSE_DISCOVERY,
100
101         SUSPEND_PAUSE_ADVERTISING,
102         SUSPEND_UNPAUSE_ADVERTISING,
103
104         SUSPEND_SCAN_DISABLE,
105         SUSPEND_SCAN_ENABLE,
106         SUSPEND_DISCONNECTING,
107
108         SUSPEND_POWERING_DOWN,
109
110         SUSPEND_PREPARE_NOTIFIER,
111         __SUSPEND_NUM_TASKS
112 };
113
114 enum suspended_state {
115         BT_RUNNING = 0,
116         BT_SUSPEND_DISCONNECT,
117         BT_SUSPEND_CONFIGURE_WAKE,
118 };
119
120 struct hci_conn_hash {
121         struct list_head list;
122         unsigned int     acl_num;
123         unsigned int     amp_num;
124         unsigned int     sco_num;
125         unsigned int     le_num;
126         unsigned int     le_num_slave;
127 };
128
129 struct bdaddr_list {
130         struct list_head list;
131         bdaddr_t bdaddr;
132         u8 bdaddr_type;
133 };
134
135 struct bdaddr_list_with_irk {
136         struct list_head list;
137         bdaddr_t bdaddr;
138         u8 bdaddr_type;
139         u8 peer_irk[16];
140         u8 local_irk[16];
141 };
142
143 struct bdaddr_list_with_flags {
144         struct list_head list;
145         bdaddr_t bdaddr;
146         u8 bdaddr_type;
147         u32 current_flags;
148 };
149
150 enum hci_conn_flags {
151         HCI_CONN_FLAG_REMOTE_WAKEUP,
152         HCI_CONN_FLAG_MAX
153 };
154
155 #define hci_conn_test_flag(nr, flags) ((flags) & (1U << nr))
156
157 /* Make sure number of flags doesn't exceed sizeof(current_flags) */
158 static_assert(HCI_CONN_FLAG_MAX < 32);
159
160 struct bt_uuid {
161         struct list_head list;
162         u8 uuid[16];
163         u8 size;
164         u8 svc_hint;
165 };
166
167 struct blocked_key {
168         struct list_head list;
169         struct rcu_head rcu;
170         u8 type;
171         u8 val[16];
172 };
173
174 struct smp_csrk {
175         bdaddr_t bdaddr;
176         u8 bdaddr_type;
177         u8 link_type;
178         u8 type;
179         u8 val[16];
180 };
181
182 struct smp_ltk {
183         struct list_head list;
184         struct rcu_head rcu;
185         bdaddr_t bdaddr;
186         u8 bdaddr_type;
187         u8 link_type;
188         u8 authenticated;
189         u8 type;
190         u8 enc_size;
191         __le16 ediv;
192         __le64 rand;
193         u8 val[16];
194 };
195
196 struct smp_irk {
197         struct list_head list;
198         struct rcu_head rcu;
199         bdaddr_t rpa;
200         bdaddr_t bdaddr;
201         u8 addr_type;
202         u8 link_type;
203         u8 val[16];
204 };
205
206 struct link_key {
207         struct list_head list;
208         struct rcu_head rcu;
209         bdaddr_t bdaddr;
210         u8 bdaddr_type;
211         u8 link_type;
212         u8 type;
213         u8 val[HCI_LINK_KEY_SIZE];
214         u8 pin_len;
215 };
216
217 struct oob_data {
218         struct list_head list;
219         bdaddr_t bdaddr;
220         u8 bdaddr_type;
221         u8 present;
222         u8 hash192[16];
223         u8 rand192[16];
224         u8 hash256[16];
225         u8 rand256[16];
226 };
227
228 struct adv_info {
229         struct list_head list;
230         bool pending;
231         __u8    instance;
232         __u32   flags;
233         __u16   timeout;
234         __u16   remaining_time;
235         __u16   duration;
236         __u16   adv_data_len;
237         __u8    adv_data[HCI_MAX_EXT_AD_LENGTH];
238         __u16   scan_rsp_len;
239         __u8    scan_rsp_data[HCI_MAX_EXT_AD_LENGTH];
240         __s8    tx_power;
241         bdaddr_t        random_addr;
242         bool            rpa_expired;
243         struct delayed_work     rpa_expired_cb;
244 };
245
246 #define HCI_MAX_ADV_INSTANCES           5
247 #define HCI_DEFAULT_ADV_DURATION        2
248
249 struct adv_pattern {
250         struct list_head list;
251         __u8 ad_type;
252         __u8 offset;
253         __u8 length;
254         __u8 value[HCI_MAX_AD_LENGTH];
255 };
256
257 struct adv_monitor {
258         struct list_head patterns;
259         bool            active;
260         __u16           handle;
261 };
262
263 #define HCI_MIN_ADV_MONITOR_HANDLE              1
264 #define HCI_MAX_ADV_MONITOR_NUM_HANDLES 32
265 #define HCI_MAX_ADV_MONITOR_NUM_PATTERNS        16
266
267 #define HCI_MAX_SHORT_NAME_LENGTH       10
268
269 /* Min encryption key size to match with SMP */
270 #define HCI_MIN_ENC_KEY_SIZE            7
271
272 /* Default LE RPA expiry time, 15 minutes */
273 #define HCI_DEFAULT_RPA_TIMEOUT         (15 * 60)
274
275 /* Default min/max age of connection information (1s/3s) */
276 #define DEFAULT_CONN_INFO_MIN_AGE       1000
277 #define DEFAULT_CONN_INFO_MAX_AGE       3000
278 /* Default authenticated payload timeout 30s */
279 #define DEFAULT_AUTH_PAYLOAD_TIMEOUT   0x0bb8
280
281 struct amp_assoc {
282         __u16   len;
283         __u16   offset;
284         __u16   rem_len;
285         __u16   len_so_far;
286         __u8    data[HCI_MAX_AMP_ASSOC_SIZE];
287 };
288
289 #define HCI_MAX_PAGES   3
290
291 struct hci_dev {
292         struct list_head list;
293         struct mutex    lock;
294
295         const char      *name;
296         unsigned long   flags;
297         __u16           id;
298         __u8            bus;
299         __u8            dev_type;
300         bdaddr_t        bdaddr;
301         bdaddr_t        setup_addr;
302         bdaddr_t        public_addr;
303         bdaddr_t        random_addr;
304         bdaddr_t        static_addr;
305         __u8            adv_addr_type;
306         __u8            dev_name[HCI_MAX_NAME_LENGTH];
307         __u8            short_name[HCI_MAX_SHORT_NAME_LENGTH];
308         __u8            eir[HCI_MAX_EIR_LENGTH];
309         __u16           appearance;
310         __u8            dev_class[3];
311         __u8            major_class;
312         __u8            minor_class;
313         __u8            max_page;
314         __u8            features[HCI_MAX_PAGES][8];
315         __u8            le_features[8];
316         __u8            le_accept_list_size;
317         __u8            le_resolv_list_size;
318         __u8            le_num_of_adv_sets;
319         __u8            le_states[8];
320         __u8            commands[64];
321         __u8            hci_ver;
322         __u16           hci_rev;
323         __u8            lmp_ver;
324         __u16           manufacturer;
325         __u16           lmp_subver;
326         __u16           voice_setting;
327         __u8            num_iac;
328         __u8            stored_max_keys;
329         __u8            stored_num_keys;
330         __u8            io_capability;
331         __s8            inq_tx_power;
332         __u8            err_data_reporting;
333         __u16           page_scan_interval;
334         __u16           page_scan_window;
335         __u8            page_scan_type;
336         __u8            le_adv_channel_map;
337         __u16           le_adv_min_interval;
338         __u16           le_adv_max_interval;
339         __u8            le_scan_type;
340         __u16           le_scan_interval;
341         __u16           le_scan_window;
342         __u16           le_scan_int_suspend;
343         __u16           le_scan_window_suspend;
344         __u16           le_scan_int_discovery;
345         __u16           le_scan_window_discovery;
346         __u16           le_scan_int_adv_monitor;
347         __u16           le_scan_window_adv_monitor;
348         __u16           le_scan_int_connect;
349         __u16           le_scan_window_connect;
350         __u16           le_conn_min_interval;
351         __u16           le_conn_max_interval;
352         __u16           le_conn_latency;
353         __u16           le_supv_timeout;
354         __u16           le_def_tx_len;
355         __u16           le_def_tx_time;
356         __u16           le_max_tx_len;
357         __u16           le_max_tx_time;
358         __u16           le_max_rx_len;
359         __u16           le_max_rx_time;
360         __u8            le_max_key_size;
361         __u8            le_min_key_size;
362         __u16           discov_interleaved_timeout;
363         __u16           conn_info_min_age;
364         __u16           conn_info_max_age;
365         __u16           auth_payload_timeout;
366         __u8            min_enc_key_size;
367         __u8            max_enc_key_size;
368         __u8            pairing_opts;
369         __u8            ssp_debug_mode;
370         __u8            hw_error_code;
371         __u32           clock;
372         __u16           advmon_allowlist_duration;
373         __u16           advmon_no_filter_duration;
374
375         __u16           devid_source;
376         __u16           devid_vendor;
377         __u16           devid_product;
378         __u16           devid_version;
379
380         __u8            def_page_scan_type;
381         __u16           def_page_scan_int;
382         __u16           def_page_scan_window;
383         __u8            def_inq_scan_type;
384         __u16           def_inq_scan_int;
385         __u16           def_inq_scan_window;
386         __u16           def_br_lsto;
387         __u16           def_page_timeout;
388         __u16           def_multi_adv_rotation_duration;
389         __u16           def_le_autoconnect_timeout;
390
391         __u16           pkt_type;
392         __u16           esco_type;
393         __u16           link_policy;
394         __u16           link_mode;
395
396         __u32           idle_timeout;
397         __u16           sniff_min_interval;
398         __u16           sniff_max_interval;
399
400         __u8            amp_status;
401         __u32           amp_total_bw;
402         __u32           amp_max_bw;
403         __u32           amp_min_latency;
404         __u32           amp_max_pdu;
405         __u8            amp_type;
406         __u16           amp_pal_cap;
407         __u16           amp_assoc_size;
408         __u32           amp_max_flush_to;
409         __u32           amp_be_flush_to;
410
411         struct amp_assoc        loc_assoc;
412
413         __u8            flow_ctl_mode;
414
415         unsigned int    auto_accept_delay;
416
417         unsigned long   quirks;
418
419         atomic_t        cmd_cnt;
420         unsigned int    acl_cnt;
421         unsigned int    sco_cnt;
422         unsigned int    le_cnt;
423
424         unsigned int    acl_mtu;
425         unsigned int    sco_mtu;
426         unsigned int    le_mtu;
427         unsigned int    acl_pkts;
428         unsigned int    sco_pkts;
429         unsigned int    le_pkts;
430
431         __u16           block_len;
432         __u16           block_mtu;
433         __u16           num_blocks;
434         __u16           block_cnt;
435
436         unsigned long   acl_last_tx;
437         unsigned long   sco_last_tx;
438         unsigned long   le_last_tx;
439
440         __u8            le_tx_def_phys;
441         __u8            le_rx_def_phys;
442
443         struct workqueue_struct *workqueue;
444         struct workqueue_struct *req_workqueue;
445
446         struct work_struct      power_on;
447         struct delayed_work     power_off;
448         struct work_struct      error_reset;
449
450         __u16                   discov_timeout;
451         struct delayed_work     discov_off;
452
453         struct delayed_work     service_cache;
454
455         struct delayed_work     cmd_timer;
456
457         struct work_struct      rx_work;
458         struct work_struct      cmd_work;
459         struct work_struct      tx_work;
460
461         struct work_struct      discov_update;
462         struct work_struct      bg_scan_update;
463         struct work_struct      scan_update;
464         struct work_struct      connectable_update;
465         struct work_struct      discoverable_update;
466         struct delayed_work     le_scan_disable;
467         struct delayed_work     le_scan_restart;
468
469         struct sk_buff_head     rx_q;
470         struct sk_buff_head     raw_q;
471         struct sk_buff_head     cmd_q;
472
473         struct sk_buff          *sent_cmd;
474
475         struct mutex            req_lock;
476         wait_queue_head_t       req_wait_q;
477         __u32                   req_status;
478         __u32                   req_result;
479         struct sk_buff          *req_skb;
480
481         void                    *smp_data;
482         void                    *smp_bredr_data;
483
484         struct discovery_state  discovery;
485
486         int                     discovery_old_state;
487         bool                    discovery_paused;
488         int                     advertising_old_state;
489         bool                    advertising_paused;
490
491         struct notifier_block   suspend_notifier;
492         struct work_struct      suspend_prepare;
493         enum suspended_state    suspend_state_next;
494         enum suspended_state    suspend_state;
495         bool                    scanning_paused;
496         bool                    suspended;
497         u8                      wake_reason;
498         bdaddr_t                wake_addr;
499         u8                      wake_addr_type;
500
501         wait_queue_head_t       suspend_wait_q;
502         DECLARE_BITMAP(suspend_tasks, __SUSPEND_NUM_TASKS);
503
504         struct hci_conn_hash    conn_hash;
505
506         struct list_head        mgmt_pending;
507         struct list_head        reject_list;
508         struct list_head        accept_list;
509         struct list_head        uuids;
510         struct list_head        link_keys;
511         struct list_head        long_term_keys;
512         struct list_head        identity_resolving_keys;
513         struct list_head        remote_oob_data;
514         struct list_head        le_accept_list;
515         struct list_head        le_resolv_list;
516         struct list_head        le_conn_params;
517         struct list_head        pend_le_conns;
518         struct list_head        pend_le_reports;
519         struct list_head        blocked_keys;
520
521         struct hci_dev_stats    stat;
522
523         atomic_t                promisc;
524
525         const char              *hw_info;
526         const char              *fw_info;
527         struct dentry           *debugfs;
528
529         struct device           dev;
530
531         struct rfkill           *rfkill;
532
533         DECLARE_BITMAP(dev_flags, __HCI_NUM_FLAGS);
534
535         __s8                    adv_tx_power;
536         __u8                    adv_data[HCI_MAX_EXT_AD_LENGTH];
537         __u8                    adv_data_len;
538         __u8                    scan_rsp_data[HCI_MAX_EXT_AD_LENGTH];
539         __u8                    scan_rsp_data_len;
540
541         struct list_head        adv_instances;
542         unsigned int            adv_instance_cnt;
543         __u8                    cur_adv_instance;
544         __u16                   adv_instance_timeout;
545         struct delayed_work     adv_instance_expire;
546
547         struct idr              adv_monitors_idr;
548         unsigned int            adv_monitors_cnt;
549
550         __u8                    irk[16];
551         __u32                   rpa_timeout;
552         struct delayed_work     rpa_expired;
553         bdaddr_t                rpa;
554
555         enum {
556                 INTERLEAVE_SCAN_NONE,
557                 INTERLEAVE_SCAN_NO_FILTER,
558                 INTERLEAVE_SCAN_ALLOWLIST
559         } interleave_scan_state;
560
561         struct delayed_work     interleave_scan;
562
563 #if IS_ENABLED(CONFIG_BT_LEDS)
564         struct led_trigger      *power_led;
565 #endif
566
567 #if IS_ENABLED(CONFIG_BT_MSFTEXT)
568         __u16                   msft_opcode;
569         void                    *msft_data;
570 #endif
571
572         int (*open)(struct hci_dev *hdev);
573         int (*close)(struct hci_dev *hdev);
574         int (*flush)(struct hci_dev *hdev);
575         int (*setup)(struct hci_dev *hdev);
576         int (*shutdown)(struct hci_dev *hdev);
577         int (*send)(struct hci_dev *hdev, struct sk_buff *skb);
578         void (*notify)(struct hci_dev *hdev, unsigned int evt);
579         void (*hw_error)(struct hci_dev *hdev, u8 code);
580         int (*post_init)(struct hci_dev *hdev);
581         int (*set_diag)(struct hci_dev *hdev, bool enable);
582         int (*set_bdaddr)(struct hci_dev *hdev, const bdaddr_t *bdaddr);
583         void (*cmd_timeout)(struct hci_dev *hdev);
584         bool (*prevent_wake)(struct hci_dev *hdev);
585 };
586
587 #define HCI_PHY_HANDLE(handle)  (handle & 0xff)
588
589 enum conn_reasons {
590         CONN_REASON_PAIR_DEVICE,
591         CONN_REASON_L2CAP_CHAN,
592         CONN_REASON_SCO_CONNECT,
593 };
594
595 struct hci_conn {
596         struct list_head list;
597
598         atomic_t        refcnt;
599
600         bdaddr_t        dst;
601         __u8            dst_type;
602         bdaddr_t        src;
603         __u8            src_type;
604         bdaddr_t        init_addr;
605         __u8            init_addr_type;
606         bdaddr_t        resp_addr;
607         __u8            resp_addr_type;
608         __u16           handle;
609         __u16           state;
610         __u8            mode;
611         __u8            type;
612         __u8            role;
613         bool            out;
614         __u8            attempt;
615         __u8            dev_class[3];
616         __u8            features[HCI_MAX_PAGES][8];
617         __u16           pkt_type;
618         __u16           link_policy;
619         __u8            key_type;
620         __u8            auth_type;
621         __u8            sec_level;
622         __u8            pending_sec_level;
623         __u8            pin_length;
624         __u8            enc_key_size;
625         __u8            io_capability;
626         __u32           passkey_notify;
627         __u8            passkey_entered;
628         __u16           disc_timeout;
629         __u16           conn_timeout;
630         __u16           setting;
631         __u16           auth_payload_timeout;
632         __u16           le_conn_min_interval;
633         __u16           le_conn_max_interval;
634         __u16           le_conn_interval;
635         __u16           le_conn_latency;
636         __u16           le_supv_timeout;
637         __u8            le_adv_data[HCI_MAX_AD_LENGTH];
638         __u8            le_adv_data_len;
639         __u8            le_tx_phy;
640         __u8            le_rx_phy;
641         __s8            rssi;
642         __s8            tx_power;
643         __s8            max_tx_power;
644         unsigned long   flags;
645
646         enum conn_reasons conn_reason;
647
648         __u32           clock;
649         __u16           clock_accuracy;
650
651         unsigned long   conn_info_timestamp;
652
653         __u8            remote_cap;
654         __u8            remote_auth;
655         __u8            remote_id;
656
657         unsigned int    sent;
658
659         struct sk_buff_head data_q;
660         struct list_head chan_list;
661
662         struct delayed_work disc_work;
663         struct delayed_work auto_accept_work;
664         struct delayed_work idle_work;
665         struct delayed_work le_conn_timeout;
666         struct work_struct  le_scan_cleanup;
667
668         struct device   dev;
669         struct dentry   *debugfs;
670
671         struct hci_dev  *hdev;
672         void            *l2cap_data;
673         void            *sco_data;
674         struct amp_mgr  *amp_mgr;
675
676         struct hci_conn *link;
677
678         void (*connect_cfm_cb)  (struct hci_conn *conn, u8 status);
679         void (*security_cfm_cb) (struct hci_conn *conn, u8 status);
680         void (*disconn_cfm_cb)  (struct hci_conn *conn, u8 reason);
681 };
682
683 struct hci_chan {
684         struct list_head list;
685         __u16 handle;
686         struct hci_conn *conn;
687         struct sk_buff_head data_q;
688         unsigned int    sent;
689         __u8            state;
690         bool            amp;
691 };
692
693 struct hci_conn_params {
694         struct list_head list;
695         struct list_head action;
696
697         bdaddr_t addr;
698         u8 addr_type;
699
700         u16 conn_min_interval;
701         u16 conn_max_interval;
702         u16 conn_latency;
703         u16 supervision_timeout;
704
705         enum {
706                 HCI_AUTO_CONN_DISABLED,
707                 HCI_AUTO_CONN_REPORT,
708                 HCI_AUTO_CONN_DIRECT,
709                 HCI_AUTO_CONN_ALWAYS,
710                 HCI_AUTO_CONN_LINK_LOSS,
711                 HCI_AUTO_CONN_EXPLICIT,
712         } auto_connect;
713
714         struct hci_conn *conn;
715         bool explicit_connect;
716         u32 current_flags;
717 };
718
719 extern struct list_head hci_dev_list;
720 extern struct list_head hci_cb_list;
721 extern rwlock_t hci_dev_list_lock;
722 extern struct mutex hci_cb_list_lock;
723
724 #define hci_dev_set_flag(hdev, nr)             set_bit((nr), (hdev)->dev_flags)
725 #define hci_dev_clear_flag(hdev, nr)           clear_bit((nr), (hdev)->dev_flags)
726 #define hci_dev_change_flag(hdev, nr)          change_bit((nr), (hdev)->dev_flags)
727 #define hci_dev_test_flag(hdev, nr)            test_bit((nr), (hdev)->dev_flags)
728 #define hci_dev_test_and_set_flag(hdev, nr)    test_and_set_bit((nr), (hdev)->dev_flags)
729 #define hci_dev_test_and_clear_flag(hdev, nr)  test_and_clear_bit((nr), (hdev)->dev_flags)
730 #define hci_dev_test_and_change_flag(hdev, nr) test_and_change_bit((nr), (hdev)->dev_flags)
731
732 #define hci_dev_clear_volatile_flags(hdev)                      \
733         do {                                                    \
734                 hci_dev_clear_flag(hdev, HCI_LE_SCAN);          \
735                 hci_dev_clear_flag(hdev, HCI_LE_ADV);           \
736                 hci_dev_clear_flag(hdev, HCI_LL_RPA_RESOLUTION);\
737                 hci_dev_clear_flag(hdev, HCI_PERIODIC_INQ);     \
738         } while (0)
739
740 /* ----- HCI interface to upper protocols ----- */
741 int l2cap_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr);
742 int l2cap_disconn_ind(struct hci_conn *hcon);
743 void l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, u16 flags);
744
745 #if IS_ENABLED(CONFIG_BT_BREDR)
746 int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 *flags);
747 void sco_recv_scodata(struct hci_conn *hcon, struct sk_buff *skb);
748 #else
749 static inline int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr,
750                                   __u8 *flags)
751 {
752         return 0;
753 }
754
755 static inline void sco_recv_scodata(struct hci_conn *hcon, struct sk_buff *skb)
756 {
757 }
758 #endif
759
760 /* ----- Inquiry cache ----- */
761 #define INQUIRY_CACHE_AGE_MAX   (HZ*30)   /* 30 seconds */
762 #define INQUIRY_ENTRY_AGE_MAX   (HZ*60)   /* 60 seconds */
763
764 static inline void discovery_init(struct hci_dev *hdev)
765 {
766         hdev->discovery.state = DISCOVERY_STOPPED;
767         INIT_LIST_HEAD(&hdev->discovery.all);
768         INIT_LIST_HEAD(&hdev->discovery.unknown);
769         INIT_LIST_HEAD(&hdev->discovery.resolve);
770         hdev->discovery.report_invalid_rssi = true;
771         hdev->discovery.rssi = HCI_RSSI_INVALID;
772 }
773
774 static inline void hci_discovery_filter_clear(struct hci_dev *hdev)
775 {
776         hdev->discovery.result_filtering = false;
777         hdev->discovery.report_invalid_rssi = true;
778         hdev->discovery.rssi = HCI_RSSI_INVALID;
779         hdev->discovery.uuid_count = 0;
780         kfree(hdev->discovery.uuids);
781         hdev->discovery.uuids = NULL;
782         hdev->discovery.scan_start = 0;
783         hdev->discovery.scan_duration = 0;
784 }
785
786 bool hci_discovery_active(struct hci_dev *hdev);
787
788 void hci_discovery_set_state(struct hci_dev *hdev, int state);
789
790 static inline int inquiry_cache_empty(struct hci_dev *hdev)
791 {
792         return list_empty(&hdev->discovery.all);
793 }
794
795 static inline long inquiry_cache_age(struct hci_dev *hdev)
796 {
797         struct discovery_state *c = &hdev->discovery;
798         return jiffies - c->timestamp;
799 }
800
801 static inline long inquiry_entry_age(struct inquiry_entry *e)
802 {
803         return jiffies - e->timestamp;
804 }
805
806 struct inquiry_entry *hci_inquiry_cache_lookup(struct hci_dev *hdev,
807                                                bdaddr_t *bdaddr);
808 struct inquiry_entry *hci_inquiry_cache_lookup_unknown(struct hci_dev *hdev,
809                                                        bdaddr_t *bdaddr);
810 struct inquiry_entry *hci_inquiry_cache_lookup_resolve(struct hci_dev *hdev,
811                                                        bdaddr_t *bdaddr,
812                                                        int state);
813 void hci_inquiry_cache_update_resolve(struct hci_dev *hdev,
814                                       struct inquiry_entry *ie);
815 u32 hci_inquiry_cache_update(struct hci_dev *hdev, struct inquiry_data *data,
816                              bool name_known);
817 void hci_inquiry_cache_flush(struct hci_dev *hdev);
818
819 /* ----- HCI Connections ----- */
820 enum {
821         HCI_CONN_AUTH_PEND,
822         HCI_CONN_ENCRYPT_PEND,
823         HCI_CONN_RSWITCH_PEND,
824         HCI_CONN_MODE_CHANGE_PEND,
825         HCI_CONN_SCO_SETUP_PEND,
826         HCI_CONN_MGMT_CONNECTED,
827         HCI_CONN_SSP_ENABLED,
828         HCI_CONN_SC_ENABLED,
829         HCI_CONN_AES_CCM,
830         HCI_CONN_POWER_SAVE,
831         HCI_CONN_FLUSH_KEY,
832         HCI_CONN_ENCRYPT,
833         HCI_CONN_AUTH,
834         HCI_CONN_SECURE,
835         HCI_CONN_FIPS,
836         HCI_CONN_STK_ENCRYPT,
837         HCI_CONN_AUTH_INITIATOR,
838         HCI_CONN_DROP,
839         HCI_CONN_PARAM_REMOVAL_PEND,
840         HCI_CONN_NEW_LINK_KEY,
841         HCI_CONN_SCANNING,
842         HCI_CONN_AUTH_FAILURE,
843 };
844
845 static inline bool hci_conn_ssp_enabled(struct hci_conn *conn)
846 {
847         struct hci_dev *hdev = conn->hdev;
848         return hci_dev_test_flag(hdev, HCI_SSP_ENABLED) &&
849                test_bit(HCI_CONN_SSP_ENABLED, &conn->flags);
850 }
851
852 static inline bool hci_conn_sc_enabled(struct hci_conn *conn)
853 {
854         struct hci_dev *hdev = conn->hdev;
855         return hci_dev_test_flag(hdev, HCI_SC_ENABLED) &&
856                test_bit(HCI_CONN_SC_ENABLED, &conn->flags);
857 }
858
859 static inline void hci_conn_hash_add(struct hci_dev *hdev, struct hci_conn *c)
860 {
861         struct hci_conn_hash *h = &hdev->conn_hash;
862         list_add_rcu(&c->list, &h->list);
863         switch (c->type) {
864         case ACL_LINK:
865                 h->acl_num++;
866                 break;
867         case AMP_LINK:
868                 h->amp_num++;
869                 break;
870         case LE_LINK:
871                 h->le_num++;
872                 if (c->role == HCI_ROLE_SLAVE)
873                         h->le_num_slave++;
874                 break;
875         case SCO_LINK:
876         case ESCO_LINK:
877                 h->sco_num++;
878                 break;
879         }
880 }
881
882 static inline void hci_conn_hash_del(struct hci_dev *hdev, struct hci_conn *c)
883 {
884         struct hci_conn_hash *h = &hdev->conn_hash;
885
886         list_del_rcu(&c->list);
887         synchronize_rcu();
888
889         switch (c->type) {
890         case ACL_LINK:
891                 h->acl_num--;
892                 break;
893         case AMP_LINK:
894                 h->amp_num--;
895                 break;
896         case LE_LINK:
897                 h->le_num--;
898                 if (c->role == HCI_ROLE_SLAVE)
899                         h->le_num_slave--;
900                 break;
901         case SCO_LINK:
902         case ESCO_LINK:
903                 h->sco_num--;
904                 break;
905         }
906 }
907
908 static inline unsigned int hci_conn_num(struct hci_dev *hdev, __u8 type)
909 {
910         struct hci_conn_hash *h = &hdev->conn_hash;
911         switch (type) {
912         case ACL_LINK:
913                 return h->acl_num;
914         case AMP_LINK:
915                 return h->amp_num;
916         case LE_LINK:
917                 return h->le_num;
918         case SCO_LINK:
919         case ESCO_LINK:
920                 return h->sco_num;
921         default:
922                 return 0;
923         }
924 }
925
926 static inline unsigned int hci_conn_count(struct hci_dev *hdev)
927 {
928         struct hci_conn_hash *c = &hdev->conn_hash;
929
930         return c->acl_num + c->amp_num + c->sco_num + c->le_num;
931 }
932
933 static inline __u8 hci_conn_lookup_type(struct hci_dev *hdev, __u16 handle)
934 {
935         struct hci_conn_hash *h = &hdev->conn_hash;
936         struct hci_conn *c;
937         __u8 type = INVALID_LINK;
938
939         rcu_read_lock();
940
941         list_for_each_entry_rcu(c, &h->list, list) {
942                 if (c->handle == handle) {
943                         type = c->type;
944                         break;
945                 }
946         }
947
948         rcu_read_unlock();
949
950         return type;
951 }
952
953 static inline struct hci_conn *hci_conn_hash_lookup_handle(struct hci_dev *hdev,
954                                                                 __u16 handle)
955 {
956         struct hci_conn_hash *h = &hdev->conn_hash;
957         struct hci_conn  *c;
958
959         rcu_read_lock();
960
961         list_for_each_entry_rcu(c, &h->list, list) {
962                 if (c->handle == handle) {
963                         rcu_read_unlock();
964                         return c;
965                 }
966         }
967         rcu_read_unlock();
968
969         return NULL;
970 }
971
972 static inline struct hci_conn *hci_conn_hash_lookup_ba(struct hci_dev *hdev,
973                                                         __u8 type, bdaddr_t *ba)
974 {
975         struct hci_conn_hash *h = &hdev->conn_hash;
976         struct hci_conn  *c;
977
978         rcu_read_lock();
979
980         list_for_each_entry_rcu(c, &h->list, list) {
981                 if (c->type == type && !bacmp(&c->dst, ba)) {
982                         rcu_read_unlock();
983                         return c;
984                 }
985         }
986
987         rcu_read_unlock();
988
989         return NULL;
990 }
991
992 static inline struct hci_conn *hci_conn_hash_lookup_le(struct hci_dev *hdev,
993                                                        bdaddr_t *ba,
994                                                        __u8 ba_type)
995 {
996         struct hci_conn_hash *h = &hdev->conn_hash;
997         struct hci_conn  *c;
998
999         rcu_read_lock();
1000
1001         list_for_each_entry_rcu(c, &h->list, list) {
1002                 if (c->type != LE_LINK)
1003                        continue;
1004
1005                 if (ba_type == c->dst_type && !bacmp(&c->dst, ba)) {
1006                         rcu_read_unlock();
1007                         return c;
1008                 }
1009         }
1010
1011         rcu_read_unlock();
1012
1013         return NULL;
1014 }
1015
1016 static inline struct hci_conn *hci_conn_hash_lookup_state(struct hci_dev *hdev,
1017                                                         __u8 type, __u16 state)
1018 {
1019         struct hci_conn_hash *h = &hdev->conn_hash;
1020         struct hci_conn  *c;
1021
1022         rcu_read_lock();
1023
1024         list_for_each_entry_rcu(c, &h->list, list) {
1025                 if (c->type == type && c->state == state) {
1026                         rcu_read_unlock();
1027                         return c;
1028                 }
1029         }
1030
1031         rcu_read_unlock();
1032
1033         return NULL;
1034 }
1035
1036 static inline struct hci_conn *hci_lookup_le_connect(struct hci_dev *hdev)
1037 {
1038         struct hci_conn_hash *h = &hdev->conn_hash;
1039         struct hci_conn  *c;
1040
1041         rcu_read_lock();
1042
1043         list_for_each_entry_rcu(c, &h->list, list) {
1044                 if (c->type == LE_LINK && c->state == BT_CONNECT &&
1045                     !test_bit(HCI_CONN_SCANNING, &c->flags)) {
1046                         rcu_read_unlock();
1047                         return c;
1048                 }
1049         }
1050
1051         rcu_read_unlock();
1052
1053         return NULL;
1054 }
1055
1056 int hci_disconnect(struct hci_conn *conn, __u8 reason);
1057 bool hci_setup_sync(struct hci_conn *conn, __u16 handle);
1058 void hci_sco_setup(struct hci_conn *conn, __u8 status);
1059
1060 struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst,
1061                               u8 role);
1062 int hci_conn_del(struct hci_conn *conn);
1063 void hci_conn_hash_flush(struct hci_dev *hdev);
1064 void hci_conn_check_pending(struct hci_dev *hdev);
1065
1066 struct hci_chan *hci_chan_create(struct hci_conn *conn);
1067 void hci_chan_del(struct hci_chan *chan);
1068 void hci_chan_list_flush(struct hci_conn *conn);
1069 struct hci_chan *hci_chan_lookup_handle(struct hci_dev *hdev, __u16 handle);
1070
1071 struct hci_conn *hci_connect_le_scan(struct hci_dev *hdev, bdaddr_t *dst,
1072                                      u8 dst_type, u8 sec_level,
1073                                      u16 conn_timeout,
1074                                      enum conn_reasons conn_reason);
1075 struct hci_conn *hci_connect_le(struct hci_dev *hdev, bdaddr_t *dst,
1076                                 u8 dst_type, u8 sec_level, u16 conn_timeout,
1077                                 u8 role, bdaddr_t *direct_rpa);
1078 struct hci_conn *hci_connect_acl(struct hci_dev *hdev, bdaddr_t *dst,
1079                                  u8 sec_level, u8 auth_type,
1080                                  enum conn_reasons conn_reason);
1081 struct hci_conn *hci_connect_sco(struct hci_dev *hdev, int type, bdaddr_t *dst,
1082                                  __u16 setting);
1083 int hci_conn_check_link_mode(struct hci_conn *conn);
1084 int hci_conn_check_secure(struct hci_conn *conn, __u8 sec_level);
1085 int hci_conn_security(struct hci_conn *conn, __u8 sec_level, __u8 auth_type,
1086                       bool initiator);
1087 int hci_conn_switch_role(struct hci_conn *conn, __u8 role);
1088
1089 void hci_conn_enter_active_mode(struct hci_conn *conn, __u8 force_active);
1090
1091 void hci_le_conn_failed(struct hci_conn *conn, u8 status);
1092
1093 /*
1094  * hci_conn_get() and hci_conn_put() are used to control the life-time of an
1095  * "hci_conn" object. They do not guarantee that the hci_conn object is running,
1096  * working or anything else. They just guarantee that the object is available
1097  * and can be dereferenced. So you can use its locks, local variables and any
1098  * other constant data.
1099  * Before accessing runtime data, you _must_ lock the object and then check that
1100  * it is still running. As soon as you release the locks, the connection might
1101  * get dropped, though.
1102  *
1103  * On the other hand, hci_conn_hold() and hci_conn_drop() are used to control
1104  * how long the underlying connection is held. So every channel that runs on the
1105  * hci_conn object calls this to prevent the connection from disappearing. As
1106  * long as you hold a device, you must also guarantee that you have a valid
1107  * reference to the device via hci_conn_get() (or the initial reference from
1108  * hci_conn_add()).
1109  * The hold()/drop() ref-count is known to drop below 0 sometimes, which doesn't
1110  * break because nobody cares for that. But this means, we cannot use
1111  * _get()/_drop() in it, but require the caller to have a valid ref (FIXME).
1112  */
1113
1114 static inline struct hci_conn *hci_conn_get(struct hci_conn *conn)
1115 {
1116         get_device(&conn->dev);
1117         return conn;
1118 }
1119
1120 static inline void hci_conn_put(struct hci_conn *conn)
1121 {
1122         put_device(&conn->dev);
1123 }
1124
1125 static inline void hci_conn_hold(struct hci_conn *conn)
1126 {
1127         BT_DBG("hcon %p orig refcnt %d", conn, atomic_read(&conn->refcnt));
1128
1129         atomic_inc(&conn->refcnt);
1130         cancel_delayed_work(&conn->disc_work);
1131 }
1132
1133 static inline void hci_conn_drop(struct hci_conn *conn)
1134 {
1135         BT_DBG("hcon %p orig refcnt %d", conn, atomic_read(&conn->refcnt));
1136
1137         if (atomic_dec_and_test(&conn->refcnt)) {
1138                 unsigned long timeo;
1139
1140                 switch (conn->type) {
1141                 case ACL_LINK:
1142                 case LE_LINK:
1143                         cancel_delayed_work(&conn->idle_work);
1144                         if (conn->state == BT_CONNECTED) {
1145                                 timeo = conn->disc_timeout;
1146                                 if (!conn->out)
1147                                         timeo *= 2;
1148                         } else {
1149                                 timeo = 0;
1150                         }
1151                         break;
1152
1153                 case AMP_LINK:
1154                         timeo = conn->disc_timeout;
1155                         break;
1156
1157                 default:
1158                         timeo = 0;
1159                         break;
1160                 }
1161
1162                 cancel_delayed_work(&conn->disc_work);
1163                 queue_delayed_work(conn->hdev->workqueue,
1164                                    &conn->disc_work, timeo);
1165         }
1166 }
1167
1168 /* ----- HCI Devices ----- */
1169 static inline void hci_dev_put(struct hci_dev *d)
1170 {
1171         BT_DBG("%s orig refcnt %d", d->name,
1172                kref_read(&d->dev.kobj.kref));
1173
1174         put_device(&d->dev);
1175 }
1176
1177 static inline struct hci_dev *hci_dev_hold(struct hci_dev *d)
1178 {
1179         BT_DBG("%s orig refcnt %d", d->name,
1180                kref_read(&d->dev.kobj.kref));
1181
1182         get_device(&d->dev);
1183         return d;
1184 }
1185
1186 #define hci_dev_lock(d)         mutex_lock(&d->lock)
1187 #define hci_dev_unlock(d)       mutex_unlock(&d->lock)
1188
1189 #define to_hci_dev(d) container_of(d, struct hci_dev, dev)
1190 #define to_hci_conn(c) container_of(c, struct hci_conn, dev)
1191
1192 static inline void *hci_get_drvdata(struct hci_dev *hdev)
1193 {
1194         return dev_get_drvdata(&hdev->dev);
1195 }
1196
1197 static inline void hci_set_drvdata(struct hci_dev *hdev, void *data)
1198 {
1199         dev_set_drvdata(&hdev->dev, data);
1200 }
1201
1202 struct hci_dev *hci_dev_get(int index);
1203 struct hci_dev *hci_get_route(bdaddr_t *dst, bdaddr_t *src, u8 src_type);
1204
1205 struct hci_dev *hci_alloc_dev(void);
1206 void hci_free_dev(struct hci_dev *hdev);
1207 int hci_register_dev(struct hci_dev *hdev);
1208 void hci_unregister_dev(struct hci_dev *hdev);
1209 void hci_cleanup_dev(struct hci_dev *hdev);
1210 int hci_suspend_dev(struct hci_dev *hdev);
1211 int hci_resume_dev(struct hci_dev *hdev);
1212 int hci_reset_dev(struct hci_dev *hdev);
1213 int hci_recv_frame(struct hci_dev *hdev, struct sk_buff *skb);
1214 int hci_recv_diag(struct hci_dev *hdev, struct sk_buff *skb);
1215 __printf(2, 3) void hci_set_hw_info(struct hci_dev *hdev, const char *fmt, ...);
1216 __printf(2, 3) void hci_set_fw_info(struct hci_dev *hdev, const char *fmt, ...);
1217
1218 static inline void hci_set_msft_opcode(struct hci_dev *hdev, __u16 opcode)
1219 {
1220 #if IS_ENABLED(CONFIG_BT_MSFTEXT)
1221         hdev->msft_opcode = opcode;
1222 #endif
1223 }
1224
1225 int hci_dev_open(__u16 dev);
1226 int hci_dev_close(__u16 dev);
1227 int hci_dev_do_close(struct hci_dev *hdev);
1228 int hci_dev_reset(__u16 dev);
1229 int hci_dev_reset_stat(__u16 dev);
1230 int hci_dev_cmd(unsigned int cmd, void __user *arg);
1231 int hci_get_dev_list(void __user *arg);
1232 int hci_get_dev_info(void __user *arg);
1233 int hci_get_conn_list(void __user *arg);
1234 int hci_get_conn_info(struct hci_dev *hdev, void __user *arg);
1235 int hci_get_auth_info(struct hci_dev *hdev, void __user *arg);
1236 int hci_inquiry(void __user *arg);
1237
1238 struct bdaddr_list *hci_bdaddr_list_lookup(struct list_head *list,
1239                                            bdaddr_t *bdaddr, u8 type);
1240 struct bdaddr_list_with_irk *hci_bdaddr_list_lookup_with_irk(
1241                                     struct list_head *list, bdaddr_t *bdaddr,
1242                                     u8 type);
1243 struct bdaddr_list_with_flags *
1244 hci_bdaddr_list_lookup_with_flags(struct list_head *list, bdaddr_t *bdaddr,
1245                                   u8 type);
1246 int hci_bdaddr_list_add(struct list_head *list, bdaddr_t *bdaddr, u8 type);
1247 int hci_bdaddr_list_add_with_irk(struct list_head *list, bdaddr_t *bdaddr,
1248                                  u8 type, u8 *peer_irk, u8 *local_irk);
1249 int hci_bdaddr_list_add_with_flags(struct list_head *list, bdaddr_t *bdaddr,
1250                                    u8 type, u32 flags);
1251 int hci_bdaddr_list_del(struct list_head *list, bdaddr_t *bdaddr, u8 type);
1252 int hci_bdaddr_list_del_with_irk(struct list_head *list, bdaddr_t *bdaddr,
1253                                  u8 type);
1254 int hci_bdaddr_list_del_with_flags(struct list_head *list, bdaddr_t *bdaddr,
1255                                    u8 type);
1256 void hci_bdaddr_list_clear(struct list_head *list);
1257
1258 struct hci_conn_params *hci_conn_params_lookup(struct hci_dev *hdev,
1259                                                bdaddr_t *addr, u8 addr_type);
1260 struct hci_conn_params *hci_conn_params_add(struct hci_dev *hdev,
1261                                             bdaddr_t *addr, u8 addr_type);
1262 void hci_conn_params_del(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type);
1263 void hci_conn_params_clear_disabled(struct hci_dev *hdev);
1264
1265 struct hci_conn_params *hci_pend_le_action_lookup(struct list_head *list,
1266                                                   bdaddr_t *addr,
1267                                                   u8 addr_type);
1268
1269 void hci_uuids_clear(struct hci_dev *hdev);
1270
1271 void hci_link_keys_clear(struct hci_dev *hdev);
1272 struct link_key *hci_find_link_key(struct hci_dev *hdev, bdaddr_t *bdaddr);
1273 struct link_key *hci_add_link_key(struct hci_dev *hdev, struct hci_conn *conn,
1274                                   bdaddr_t *bdaddr, u8 *val, u8 type,
1275                                   u8 pin_len, bool *persistent);
1276 struct smp_ltk *hci_add_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr,
1277                             u8 addr_type, u8 type, u8 authenticated,
1278                             u8 tk[16], u8 enc_size, __le16 ediv, __le64 rand);
1279 struct smp_ltk *hci_find_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr,
1280                              u8 addr_type, u8 role);
1281 int hci_remove_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 bdaddr_type);
1282 void hci_smp_ltks_clear(struct hci_dev *hdev);
1283 int hci_remove_link_key(struct hci_dev *hdev, bdaddr_t *bdaddr);
1284
1285 struct smp_irk *hci_find_irk_by_rpa(struct hci_dev *hdev, bdaddr_t *rpa);
1286 struct smp_irk *hci_find_irk_by_addr(struct hci_dev *hdev, bdaddr_t *bdaddr,
1287                                      u8 addr_type);
1288 struct smp_irk *hci_add_irk(struct hci_dev *hdev, bdaddr_t *bdaddr,
1289                             u8 addr_type, u8 val[16], bdaddr_t *rpa);
1290 void hci_remove_irk(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 addr_type);
1291 bool hci_is_blocked_key(struct hci_dev *hdev, u8 type, u8 val[16]);
1292 void hci_blocked_keys_clear(struct hci_dev *hdev);
1293 void hci_smp_irks_clear(struct hci_dev *hdev);
1294
1295 bool hci_bdaddr_is_paired(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type);
1296
1297 void hci_remote_oob_data_clear(struct hci_dev *hdev);
1298 struct oob_data *hci_find_remote_oob_data(struct hci_dev *hdev,
1299                                           bdaddr_t *bdaddr, u8 bdaddr_type);
1300 int hci_add_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr,
1301                             u8 bdaddr_type, u8 *hash192, u8 *rand192,
1302                             u8 *hash256, u8 *rand256);
1303 int hci_remove_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr,
1304                                u8 bdaddr_type);
1305
1306 void hci_adv_instances_clear(struct hci_dev *hdev);
1307 struct adv_info *hci_find_adv_instance(struct hci_dev *hdev, u8 instance);
1308 struct adv_info *hci_get_next_instance(struct hci_dev *hdev, u8 instance);
1309 int hci_add_adv_instance(struct hci_dev *hdev, u8 instance, u32 flags,
1310                          u16 adv_data_len, u8 *adv_data,
1311                          u16 scan_rsp_len, u8 *scan_rsp_data,
1312                          u16 timeout, u16 duration);
1313 int hci_remove_adv_instance(struct hci_dev *hdev, u8 instance);
1314 void hci_adv_instances_set_rpa_expired(struct hci_dev *hdev, bool rpa_expired);
1315
1316 void hci_adv_monitors_clear(struct hci_dev *hdev);
1317 void hci_free_adv_monitor(struct adv_monitor *monitor);
1318 int hci_add_adv_monitor(struct hci_dev *hdev, struct adv_monitor *monitor);
1319 int hci_remove_adv_monitor(struct hci_dev *hdev, u16 handle);
1320 bool hci_is_adv_monitoring(struct hci_dev *hdev);
1321
1322 void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb);
1323
1324 void hci_init_sysfs(struct hci_dev *hdev);
1325 void hci_conn_init_sysfs(struct hci_conn *conn);
1326 void hci_conn_add_sysfs(struct hci_conn *conn);
1327 void hci_conn_del_sysfs(struct hci_conn *conn);
1328
1329 #define SET_HCIDEV_DEV(hdev, pdev) ((hdev)->dev.parent = (pdev))
1330
1331 /* ----- LMP capabilities ----- */
1332 #define lmp_encrypt_capable(dev)   ((dev)->features[0][0] & LMP_ENCRYPT)
1333 #define lmp_rswitch_capable(dev)   ((dev)->features[0][0] & LMP_RSWITCH)
1334 #define lmp_hold_capable(dev)      ((dev)->features[0][0] & LMP_HOLD)
1335 #define lmp_sniff_capable(dev)     ((dev)->features[0][0] & LMP_SNIFF)
1336 #define lmp_park_capable(dev)      ((dev)->features[0][1] & LMP_PARK)
1337 #define lmp_inq_rssi_capable(dev)  ((dev)->features[0][3] & LMP_RSSI_INQ)
1338 #define lmp_esco_capable(dev)      ((dev)->features[0][3] & LMP_ESCO)
1339 #define lmp_bredr_capable(dev)     (!((dev)->features[0][4] & LMP_NO_BREDR))
1340 #define lmp_le_capable(dev)        ((dev)->features[0][4] & LMP_LE)
1341 #define lmp_sniffsubr_capable(dev) ((dev)->features[0][5] & LMP_SNIFF_SUBR)
1342 #define lmp_pause_enc_capable(dev) ((dev)->features[0][5] & LMP_PAUSE_ENC)
1343 #define lmp_ext_inq_capable(dev)   ((dev)->features[0][6] & LMP_EXT_INQ)
1344 #define lmp_le_br_capable(dev)     (!!((dev)->features[0][6] & LMP_SIMUL_LE_BR))
1345 #define lmp_ssp_capable(dev)       ((dev)->features[0][6] & LMP_SIMPLE_PAIR)
1346 #define lmp_no_flush_capable(dev)  ((dev)->features[0][6] & LMP_NO_FLUSH)
1347 #define lmp_lsto_capable(dev)      ((dev)->features[0][7] & LMP_LSTO)
1348 #define lmp_inq_tx_pwr_capable(dev) ((dev)->features[0][7] & LMP_INQ_TX_PWR)
1349 #define lmp_ext_feat_capable(dev)  ((dev)->features[0][7] & LMP_EXTFEATURES)
1350 #define lmp_transp_capable(dev)    ((dev)->features[0][2] & LMP_TRANSPARENT)
1351 #define lmp_edr_2m_capable(dev)    ((dev)->features[0][3] & LMP_EDR_2M)
1352 #define lmp_edr_3m_capable(dev)    ((dev)->features[0][3] & LMP_EDR_3M)
1353 #define lmp_edr_3slot_capable(dev) ((dev)->features[0][4] & LMP_EDR_3SLOT)
1354 #define lmp_edr_5slot_capable(dev) ((dev)->features[0][5] & LMP_EDR_5SLOT)
1355
1356 /* ----- Extended LMP capabilities ----- */
1357 #define lmp_csb_master_capable(dev) ((dev)->features[2][0] & LMP_CSB_MASTER)
1358 #define lmp_csb_slave_capable(dev)  ((dev)->features[2][0] & LMP_CSB_SLAVE)
1359 #define lmp_sync_train_capable(dev) ((dev)->features[2][0] & LMP_SYNC_TRAIN)
1360 #define lmp_sync_scan_capable(dev)  ((dev)->features[2][0] & LMP_SYNC_SCAN)
1361 #define lmp_sc_capable(dev)         ((dev)->features[2][1] & LMP_SC)
1362 #define lmp_ping_capable(dev)       ((dev)->features[2][1] & LMP_PING)
1363
1364 /* ----- Host capabilities ----- */
1365 #define lmp_host_ssp_capable(dev)  ((dev)->features[1][0] & LMP_HOST_SSP)
1366 #define lmp_host_sc_capable(dev)   ((dev)->features[1][0] & LMP_HOST_SC)
1367 #define lmp_host_le_capable(dev)   (!!((dev)->features[1][0] & LMP_HOST_LE))
1368 #define lmp_host_le_br_capable(dev) (!!((dev)->features[1][0] & LMP_HOST_LE_BREDR))
1369
1370 #define hdev_is_powered(dev)   (test_bit(HCI_UP, &(dev)->flags) && \
1371                                 !hci_dev_test_flag(dev, HCI_AUTO_OFF))
1372 #define bredr_sc_enabled(dev)  (lmp_sc_capable(dev) && \
1373                                 hci_dev_test_flag(dev, HCI_SC_ENABLED))
1374
1375 #define scan_1m(dev) (((dev)->le_tx_def_phys & HCI_LE_SET_PHY_1M) || \
1376                       ((dev)->le_rx_def_phys & HCI_LE_SET_PHY_1M))
1377
1378 #define scan_2m(dev) (((dev)->le_tx_def_phys & HCI_LE_SET_PHY_2M) || \
1379                       ((dev)->le_rx_def_phys & HCI_LE_SET_PHY_2M))
1380
1381 #define scan_coded(dev) (((dev)->le_tx_def_phys & HCI_LE_SET_PHY_CODED) || \
1382                          ((dev)->le_rx_def_phys & HCI_LE_SET_PHY_CODED))
1383
1384 /* Use LL Privacy based address resolution if supported */
1385 #define use_ll_privacy(dev) ((dev)->le_features[0] & HCI_LE_LL_PRIVACY)
1386
1387 /* Use ext scanning if set ext scan param and ext scan enable is supported */
1388 #define use_ext_scan(dev) (((dev)->commands[37] & 0x20) && \
1389                            ((dev)->commands[37] & 0x40))
1390 /* Use ext create connection if command is supported */
1391 #define use_ext_conn(dev) ((dev)->commands[37] & 0x80)
1392
1393 /* Extended advertising support */
1394 #define ext_adv_capable(dev) (((dev)->le_features[1] & HCI_LE_EXT_ADV))
1395
1396 /* ----- HCI protocols ----- */
1397 #define HCI_PROTO_DEFER             0x01
1398
1399 static inline int hci_proto_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr,
1400                                         __u8 type, __u8 *flags)
1401 {
1402         switch (type) {
1403         case ACL_LINK:
1404                 return l2cap_connect_ind(hdev, bdaddr);
1405
1406         case SCO_LINK:
1407         case ESCO_LINK:
1408                 return sco_connect_ind(hdev, bdaddr, flags);
1409
1410         default:
1411                 BT_ERR("unknown link type %d", type);
1412                 return -EINVAL;
1413         }
1414 }
1415
1416 static inline int hci_proto_disconn_ind(struct hci_conn *conn)
1417 {
1418         if (conn->type != ACL_LINK && conn->type != LE_LINK)
1419                 return HCI_ERROR_REMOTE_USER_TERM;
1420
1421         return l2cap_disconn_ind(conn);
1422 }
1423
1424 /* ----- HCI callbacks ----- */
1425 struct hci_cb {
1426         struct list_head list;
1427
1428         char *name;
1429
1430         void (*connect_cfm)     (struct hci_conn *conn, __u8 status);
1431         void (*disconn_cfm)     (struct hci_conn *conn, __u8 status);
1432         void (*security_cfm)    (struct hci_conn *conn, __u8 status,
1433                                                                 __u8 encrypt);
1434         void (*key_change_cfm)  (struct hci_conn *conn, __u8 status);
1435         void (*role_switch_cfm) (struct hci_conn *conn, __u8 status, __u8 role);
1436 };
1437
1438 static inline void hci_connect_cfm(struct hci_conn *conn, __u8 status)
1439 {
1440         struct hci_cb *cb;
1441
1442         mutex_lock(&hci_cb_list_lock);
1443         list_for_each_entry(cb, &hci_cb_list, list) {
1444                 if (cb->connect_cfm)
1445                         cb->connect_cfm(conn, status);
1446         }
1447         mutex_unlock(&hci_cb_list_lock);
1448
1449         if (conn->connect_cfm_cb)
1450                 conn->connect_cfm_cb(conn, status);
1451 }
1452
1453 static inline void hci_disconn_cfm(struct hci_conn *conn, __u8 reason)
1454 {
1455         struct hci_cb *cb;
1456
1457         mutex_lock(&hci_cb_list_lock);
1458         list_for_each_entry(cb, &hci_cb_list, list) {
1459                 if (cb->disconn_cfm)
1460                         cb->disconn_cfm(conn, reason);
1461         }
1462         mutex_unlock(&hci_cb_list_lock);
1463
1464         if (conn->disconn_cfm_cb)
1465                 conn->disconn_cfm_cb(conn, reason);
1466 }
1467
1468 static inline void hci_auth_cfm(struct hci_conn *conn, __u8 status)
1469 {
1470         struct hci_cb *cb;
1471         __u8 encrypt;
1472
1473         if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags))
1474                 return;
1475
1476         encrypt = test_bit(HCI_CONN_ENCRYPT, &conn->flags) ? 0x01 : 0x00;
1477
1478         mutex_lock(&hci_cb_list_lock);
1479         list_for_each_entry(cb, &hci_cb_list, list) {
1480                 if (cb->security_cfm)
1481                         cb->security_cfm(conn, status, encrypt);
1482         }
1483         mutex_unlock(&hci_cb_list_lock);
1484
1485         if (conn->security_cfm_cb)
1486                 conn->security_cfm_cb(conn, status);
1487 }
1488
1489 static inline void hci_encrypt_cfm(struct hci_conn *conn, __u8 status)
1490 {
1491         struct hci_cb *cb;
1492         __u8 encrypt;
1493
1494         if (conn->state == BT_CONFIG) {
1495                 if (!status)
1496                         conn->state = BT_CONNECTED;
1497
1498                 hci_connect_cfm(conn, status);
1499                 hci_conn_drop(conn);
1500                 return;
1501         }
1502
1503         if (!test_bit(HCI_CONN_ENCRYPT, &conn->flags))
1504                 encrypt = 0x00;
1505         else if (test_bit(HCI_CONN_AES_CCM, &conn->flags))
1506                 encrypt = 0x02;
1507         else
1508                 encrypt = 0x01;
1509
1510         if (!status) {
1511                 if (conn->sec_level == BT_SECURITY_SDP)
1512                         conn->sec_level = BT_SECURITY_LOW;
1513
1514                 if (conn->pending_sec_level > conn->sec_level)
1515                         conn->sec_level = conn->pending_sec_level;
1516         }
1517
1518         mutex_lock(&hci_cb_list_lock);
1519         list_for_each_entry(cb, &hci_cb_list, list) {
1520                 if (cb->security_cfm)
1521                         cb->security_cfm(conn, status, encrypt);
1522         }
1523         mutex_unlock(&hci_cb_list_lock);
1524
1525         if (conn->security_cfm_cb)
1526                 conn->security_cfm_cb(conn, status);
1527 }
1528
1529 static inline void hci_key_change_cfm(struct hci_conn *conn, __u8 status)
1530 {
1531         struct hci_cb *cb;
1532
1533         mutex_lock(&hci_cb_list_lock);
1534         list_for_each_entry(cb, &hci_cb_list, list) {
1535                 if (cb->key_change_cfm)
1536                         cb->key_change_cfm(conn, status);
1537         }
1538         mutex_unlock(&hci_cb_list_lock);
1539 }
1540
1541 static inline void hci_role_switch_cfm(struct hci_conn *conn, __u8 status,
1542                                                                 __u8 role)
1543 {
1544         struct hci_cb *cb;
1545
1546         mutex_lock(&hci_cb_list_lock);
1547         list_for_each_entry(cb, &hci_cb_list, list) {
1548                 if (cb->role_switch_cfm)
1549                         cb->role_switch_cfm(conn, status, role);
1550         }
1551         mutex_unlock(&hci_cb_list_lock);
1552 }
1553
1554 static inline void *eir_get_data(u8 *eir, size_t eir_len, u8 type,
1555                                  size_t *data_len)
1556 {
1557         size_t parsed = 0;
1558
1559         if (eir_len < 2)
1560                 return NULL;
1561
1562         while (parsed < eir_len - 1) {
1563                 u8 field_len = eir[0];
1564
1565                 if (field_len == 0)
1566                         break;
1567
1568                 parsed += field_len + 1;
1569
1570                 if (parsed > eir_len)
1571                         break;
1572
1573                 if (eir[1] != type) {
1574                         eir += field_len + 1;
1575                         continue;
1576                 }
1577
1578                 /* Zero length data */
1579                 if (field_len == 1)
1580                         return NULL;
1581
1582                 if (data_len)
1583                         *data_len = field_len - 1;
1584
1585                 return &eir[2];
1586         }
1587
1588         return NULL;
1589 }
1590
1591 static inline bool hci_bdaddr_is_rpa(bdaddr_t *bdaddr, u8 addr_type)
1592 {
1593         if (addr_type != ADDR_LE_DEV_RANDOM)
1594                 return false;
1595
1596         if ((bdaddr->b[5] & 0xc0) == 0x40)
1597                return true;
1598
1599         return false;
1600 }
1601
1602 static inline bool hci_is_identity_address(bdaddr_t *addr, u8 addr_type)
1603 {
1604         if (addr_type == ADDR_LE_DEV_PUBLIC)
1605                 return true;
1606
1607         /* Check for Random Static address type */
1608         if ((addr->b[5] & 0xc0) == 0xc0)
1609                 return true;
1610
1611         return false;
1612 }
1613
1614 static inline struct smp_irk *hci_get_irk(struct hci_dev *hdev,
1615                                           bdaddr_t *bdaddr, u8 addr_type)
1616 {
1617         if (!hci_bdaddr_is_rpa(bdaddr, addr_type))
1618                 return NULL;
1619
1620         return hci_find_irk_by_rpa(hdev, bdaddr);
1621 }
1622
1623 static inline int hci_check_conn_params(u16 min, u16 max, u16 latency,
1624                                         u16 to_multiplier)
1625 {
1626         u16 max_latency;
1627
1628         if (min > max || min < 6 || max > 3200)
1629                 return -EINVAL;
1630
1631         if (to_multiplier < 10 || to_multiplier > 3200)
1632                 return -EINVAL;
1633
1634         if (max >= to_multiplier * 8)
1635                 return -EINVAL;
1636
1637         max_latency = (to_multiplier * 4 / max) - 1;
1638         if (latency > 499 || latency > max_latency)
1639                 return -EINVAL;
1640
1641         return 0;
1642 }
1643
1644 int hci_register_cb(struct hci_cb *hcb);
1645 int hci_unregister_cb(struct hci_cb *hcb);
1646
1647 struct sk_buff *__hci_cmd_sync(struct hci_dev *hdev, u16 opcode, u32 plen,
1648                                const void *param, u32 timeout);
1649 struct sk_buff *__hci_cmd_sync_ev(struct hci_dev *hdev, u16 opcode, u32 plen,
1650                                   const void *param, u8 event, u32 timeout);
1651 int __hci_cmd_send(struct hci_dev *hdev, u16 opcode, u32 plen,
1652                    const void *param);
1653
1654 int hci_send_cmd(struct hci_dev *hdev, __u16 opcode, __u32 plen,
1655                  const void *param);
1656 void hci_send_acl(struct hci_chan *chan, struct sk_buff *skb, __u16 flags);
1657 void hci_send_sco(struct hci_conn *conn, struct sk_buff *skb);
1658
1659 void *hci_sent_cmd_data(struct hci_dev *hdev, __u16 opcode);
1660
1661 struct sk_buff *hci_cmd_sync(struct hci_dev *hdev, u16 opcode, u32 plen,
1662                              const void *param, u32 timeout);
1663
1664 u32 hci_conn_get_phy(struct hci_conn *conn);
1665
1666 /* ----- HCI Sockets ----- */
1667 void hci_send_to_sock(struct hci_dev *hdev, struct sk_buff *skb);
1668 void hci_send_to_channel(unsigned short channel, struct sk_buff *skb,
1669                          int flag, struct sock *skip_sk);
1670 void hci_send_to_monitor(struct hci_dev *hdev, struct sk_buff *skb);
1671 void hci_send_monitor_ctrl_event(struct hci_dev *hdev, u16 event,
1672                                  void *data, u16 data_len, ktime_t tstamp,
1673                                  int flag, struct sock *skip_sk);
1674
1675 void hci_sock_dev_event(struct hci_dev *hdev, int event);
1676
1677 #define HCI_MGMT_VAR_LEN        BIT(0)
1678 #define HCI_MGMT_NO_HDEV        BIT(1)
1679 #define HCI_MGMT_UNTRUSTED      BIT(2)
1680 #define HCI_MGMT_UNCONFIGURED   BIT(3)
1681 #define HCI_MGMT_HDEV_OPTIONAL  BIT(4)
1682
1683 struct hci_mgmt_handler {
1684         int (*func) (struct sock *sk, struct hci_dev *hdev, void *data,
1685                      u16 data_len);
1686         size_t data_len;
1687         unsigned long flags;
1688 };
1689
1690 struct hci_mgmt_chan {
1691         struct list_head list;
1692         unsigned short channel;
1693         size_t handler_count;
1694         const struct hci_mgmt_handler *handlers;
1695         void (*hdev_init) (struct sock *sk, struct hci_dev *hdev);
1696 };
1697
1698 int hci_mgmt_chan_register(struct hci_mgmt_chan *c);
1699 void hci_mgmt_chan_unregister(struct hci_mgmt_chan *c);
1700
1701 /* Management interface */
1702 #define DISCOV_TYPE_BREDR               (BIT(BDADDR_BREDR))
1703 #define DISCOV_TYPE_LE                  (BIT(BDADDR_LE_PUBLIC) | \
1704                                          BIT(BDADDR_LE_RANDOM))
1705 #define DISCOV_TYPE_INTERLEAVED         (BIT(BDADDR_BREDR) | \
1706                                          BIT(BDADDR_LE_PUBLIC) | \
1707                                          BIT(BDADDR_LE_RANDOM))
1708
1709 /* These LE scan and inquiry parameters were chosen according to LE General
1710  * Discovery Procedure specification.
1711  */
1712 #define DISCOV_LE_SCAN_WIN              0x12
1713 #define DISCOV_LE_SCAN_INT              0x12
1714 #define DISCOV_LE_TIMEOUT               10240   /* msec */
1715 #define DISCOV_INTERLEAVED_TIMEOUT      5120    /* msec */
1716 #define DISCOV_INTERLEAVED_INQUIRY_LEN  0x04
1717 #define DISCOV_BREDR_INQUIRY_LEN        0x08
1718 #define DISCOV_LE_RESTART_DELAY         msecs_to_jiffies(200)   /* msec */
1719 #define DISCOV_LE_FAST_ADV_INT_MIN     100     /* msec */
1720 #define DISCOV_LE_FAST_ADV_INT_MAX     150     /* msec */
1721
1722 void mgmt_fill_version_info(void *ver);
1723 int mgmt_new_settings(struct hci_dev *hdev);
1724 void mgmt_index_added(struct hci_dev *hdev);
1725 void mgmt_index_removed(struct hci_dev *hdev);
1726 void mgmt_set_powered_failed(struct hci_dev *hdev, int err);
1727 void mgmt_power_on(struct hci_dev *hdev, int err);
1728 void __mgmt_power_off(struct hci_dev *hdev);
1729 void mgmt_new_link_key(struct hci_dev *hdev, struct link_key *key,
1730                        bool persistent);
1731 void mgmt_device_connected(struct hci_dev *hdev, struct hci_conn *conn,
1732                            u32 flags, u8 *name, u8 name_len);
1733 void mgmt_device_disconnected(struct hci_dev *hdev, bdaddr_t *bdaddr,
1734                               u8 link_type, u8 addr_type, u8 reason,
1735                               bool mgmt_connected);
1736 void mgmt_disconnect_failed(struct hci_dev *hdev, bdaddr_t *bdaddr,
1737                             u8 link_type, u8 addr_type, u8 status);
1738 void mgmt_connect_failed(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
1739                          u8 addr_type, u8 status);
1740 void mgmt_pin_code_request(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 secure);
1741 void mgmt_pin_code_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
1742                                   u8 status);
1743 void mgmt_pin_code_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
1744                                       u8 status);
1745 int mgmt_user_confirm_request(struct hci_dev *hdev, bdaddr_t *bdaddr,
1746                               u8 link_type, u8 addr_type, u32 value,
1747                               u8 confirm_hint);
1748 int mgmt_user_confirm_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
1749                                      u8 link_type, u8 addr_type, u8 status);
1750 int mgmt_user_confirm_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
1751                                          u8 link_type, u8 addr_type, u8 status);
1752 int mgmt_user_passkey_request(struct hci_dev *hdev, bdaddr_t *bdaddr,
1753                               u8 link_type, u8 addr_type);
1754 int mgmt_user_passkey_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
1755                                      u8 link_type, u8 addr_type, u8 status);
1756 int mgmt_user_passkey_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
1757                                          u8 link_type, u8 addr_type, u8 status);
1758 int mgmt_user_passkey_notify(struct hci_dev *hdev, bdaddr_t *bdaddr,
1759                              u8 link_type, u8 addr_type, u32 passkey,
1760                              u8 entered);
1761 void mgmt_auth_failed(struct hci_conn *conn, u8 status);
1762 void mgmt_auth_enable_complete(struct hci_dev *hdev, u8 status);
1763 void mgmt_ssp_enable_complete(struct hci_dev *hdev, u8 enable, u8 status);
1764 void mgmt_set_class_of_dev_complete(struct hci_dev *hdev, u8 *dev_class,
1765                                     u8 status);
1766 void mgmt_set_local_name_complete(struct hci_dev *hdev, u8 *name, u8 status);
1767 void mgmt_start_discovery_complete(struct hci_dev *hdev, u8 status);
1768 void mgmt_stop_discovery_complete(struct hci_dev *hdev, u8 status);
1769 void mgmt_device_found(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
1770                        u8 addr_type, u8 *dev_class, s8 rssi, u32 flags,
1771                        u8 *eir, u16 eir_len, u8 *scan_rsp, u8 scan_rsp_len);
1772 void mgmt_remote_name(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
1773                       u8 addr_type, s8 rssi, u8 *name, u8 name_len);
1774 void mgmt_discovering(struct hci_dev *hdev, u8 discovering);
1775 void mgmt_suspending(struct hci_dev *hdev, u8 state);
1776 void mgmt_resuming(struct hci_dev *hdev, u8 reason, bdaddr_t *bdaddr,
1777                    u8 addr_type);
1778 bool mgmt_powering_down(struct hci_dev *hdev);
1779 void mgmt_new_ltk(struct hci_dev *hdev, struct smp_ltk *key, bool persistent);
1780 void mgmt_new_irk(struct hci_dev *hdev, struct smp_irk *irk, bool persistent);
1781 void mgmt_new_csrk(struct hci_dev *hdev, struct smp_csrk *csrk,
1782                    bool persistent);
1783 void mgmt_new_conn_param(struct hci_dev *hdev, bdaddr_t *bdaddr,
1784                          u8 bdaddr_type, u8 store_hint, u16 min_interval,
1785                          u16 max_interval, u16 latency, u16 timeout);
1786 void mgmt_smp_complete(struct hci_conn *conn, bool complete);
1787 bool mgmt_get_connectable(struct hci_dev *hdev);
1788 void mgmt_set_connectable_complete(struct hci_dev *hdev, u8 status);
1789 void mgmt_set_discoverable_complete(struct hci_dev *hdev, u8 status);
1790 u8 mgmt_get_adv_discov_flags(struct hci_dev *hdev);
1791 void mgmt_advertising_added(struct sock *sk, struct hci_dev *hdev,
1792                             u8 instance);
1793 void mgmt_advertising_removed(struct sock *sk, struct hci_dev *hdev,
1794                               u8 instance);
1795 int mgmt_phy_configuration_changed(struct hci_dev *hdev, struct sock *skip);
1796
1797 u8 hci_le_conn_update(struct hci_conn *conn, u16 min, u16 max, u16 latency,
1798                       u16 to_multiplier);
1799 void hci_le_start_enc(struct hci_conn *conn, __le16 ediv, __le64 rand,
1800                       __u8 ltk[16], __u8 key_size);
1801
1802 void hci_copy_identity_address(struct hci_dev *hdev, bdaddr_t *bdaddr,
1803                                u8 *bdaddr_type);
1804
1805 #define SCO_AIRMODE_MASK       0x0003
1806 #define SCO_AIRMODE_CVSD       0x0000
1807 #define SCO_AIRMODE_TRANSP     0x0003
1808
1809 #endif /* __HCI_CORE_H */