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