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