Bluetooth: Add RSSI Monitor feature
[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 #ifdef TIZEN_BT
710         bool            rssi_monitored;
711 #endif
712         struct hci_conn *link;
713
714         void (*connect_cfm_cb)  (struct hci_conn *conn, u8 status);
715         void (*security_cfm_cb) (struct hci_conn *conn, u8 status);
716         void (*disconn_cfm_cb)  (struct hci_conn *conn, u8 reason);
717 };
718
719 struct hci_chan {
720         struct list_head list;
721         __u16 handle;
722         struct hci_conn *conn;
723         struct sk_buff_head data_q;
724         unsigned int    sent;
725         __u8            state;
726         bool            amp;
727 };
728
729 struct hci_conn_params {
730         struct list_head list;
731         struct list_head action;
732
733         bdaddr_t addr;
734         u8 addr_type;
735
736         u16 conn_min_interval;
737         u16 conn_max_interval;
738         u16 conn_latency;
739         u16 supervision_timeout;
740
741         enum {
742                 HCI_AUTO_CONN_DISABLED,
743                 HCI_AUTO_CONN_REPORT,
744                 HCI_AUTO_CONN_DIRECT,
745                 HCI_AUTO_CONN_ALWAYS,
746                 HCI_AUTO_CONN_LINK_LOSS,
747                 HCI_AUTO_CONN_EXPLICIT,
748         } auto_connect;
749
750         struct hci_conn *conn;
751         bool explicit_connect;
752         u32 current_flags;
753 };
754
755 extern struct list_head hci_dev_list;
756 extern struct list_head hci_cb_list;
757 extern rwlock_t hci_dev_list_lock;
758 extern struct mutex hci_cb_list_lock;
759
760 #define hci_dev_set_flag(hdev, nr)             set_bit((nr), (hdev)->dev_flags)
761 #define hci_dev_clear_flag(hdev, nr)           clear_bit((nr), (hdev)->dev_flags)
762 #define hci_dev_change_flag(hdev, nr)          change_bit((nr), (hdev)->dev_flags)
763 #define hci_dev_test_flag(hdev, nr)            test_bit((nr), (hdev)->dev_flags)
764 #define hci_dev_test_and_set_flag(hdev, nr)    test_and_set_bit((nr), (hdev)->dev_flags)
765 #define hci_dev_test_and_clear_flag(hdev, nr)  test_and_clear_bit((nr), (hdev)->dev_flags)
766 #define hci_dev_test_and_change_flag(hdev, nr) test_and_change_bit((nr), (hdev)->dev_flags)
767
768 #define hci_dev_clear_volatile_flags(hdev)                      \
769         do {                                                    \
770                 hci_dev_clear_flag(hdev, HCI_LE_SCAN);          \
771                 hci_dev_clear_flag(hdev, HCI_LE_ADV);           \
772                 hci_dev_clear_flag(hdev, HCI_LL_RPA_RESOLUTION);\
773                 hci_dev_clear_flag(hdev, HCI_PERIODIC_INQ);     \
774         } while (0)
775
776 /* ----- HCI interface to upper protocols ----- */
777 int l2cap_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr);
778 int l2cap_disconn_ind(struct hci_conn *hcon);
779 void l2cap_recv_acldata(struct hci_conn *hcon, struct sk_buff *skb, u16 flags);
780
781 #if IS_ENABLED(CONFIG_BT_BREDR)
782 int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr, __u8 *flags);
783 void sco_recv_scodata(struct hci_conn *hcon, struct sk_buff *skb);
784 #else
785 static inline int sco_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr,
786                                   __u8 *flags)
787 {
788         return 0;
789 }
790
791 static inline void sco_recv_scodata(struct hci_conn *hcon, struct sk_buff *skb)
792 {
793 }
794 #endif
795
796 /* ----- Inquiry cache ----- */
797 #define INQUIRY_CACHE_AGE_MAX   (HZ*30)   /* 30 seconds */
798 #define INQUIRY_ENTRY_AGE_MAX   (HZ*60)   /* 60 seconds */
799
800 static inline void discovery_init(struct hci_dev *hdev)
801 {
802         hdev->discovery.state = DISCOVERY_STOPPED;
803         INIT_LIST_HEAD(&hdev->discovery.all);
804         INIT_LIST_HEAD(&hdev->discovery.unknown);
805         INIT_LIST_HEAD(&hdev->discovery.resolve);
806         hdev->discovery.report_invalid_rssi = true;
807         hdev->discovery.rssi = HCI_RSSI_INVALID;
808 }
809
810 static inline void hci_discovery_filter_clear(struct hci_dev *hdev)
811 {
812         hdev->discovery.result_filtering = false;
813         hdev->discovery.report_invalid_rssi = true;
814         hdev->discovery.rssi = HCI_RSSI_INVALID;
815         hdev->discovery.uuid_count = 0;
816         kfree(hdev->discovery.uuids);
817         hdev->discovery.uuids = NULL;
818         hdev->discovery.scan_start = 0;
819         hdev->discovery.scan_duration = 0;
820 }
821
822 bool hci_discovery_active(struct hci_dev *hdev);
823
824 void hci_discovery_set_state(struct hci_dev *hdev, int state);
825
826 static inline int inquiry_cache_empty(struct hci_dev *hdev)
827 {
828         return list_empty(&hdev->discovery.all);
829 }
830
831 static inline long inquiry_cache_age(struct hci_dev *hdev)
832 {
833         struct discovery_state *c = &hdev->discovery;
834         return jiffies - c->timestamp;
835 }
836
837 static inline long inquiry_entry_age(struct inquiry_entry *e)
838 {
839         return jiffies - e->timestamp;
840 }
841
842 struct inquiry_entry *hci_inquiry_cache_lookup(struct hci_dev *hdev,
843                                                bdaddr_t *bdaddr);
844 struct inquiry_entry *hci_inquiry_cache_lookup_unknown(struct hci_dev *hdev,
845                                                        bdaddr_t *bdaddr);
846 struct inquiry_entry *hci_inquiry_cache_lookup_resolve(struct hci_dev *hdev,
847                                                        bdaddr_t *bdaddr,
848                                                        int state);
849 void hci_inquiry_cache_update_resolve(struct hci_dev *hdev,
850                                       struct inquiry_entry *ie);
851 u32 hci_inquiry_cache_update(struct hci_dev *hdev, struct inquiry_data *data,
852                              bool name_known);
853 void hci_inquiry_cache_flush(struct hci_dev *hdev);
854
855 /* ----- HCI Connections ----- */
856 enum {
857         HCI_CONN_AUTH_PEND,
858         HCI_CONN_REAUTH_PEND,
859         HCI_CONN_ENCRYPT_PEND,
860         HCI_CONN_RSWITCH_PEND,
861         HCI_CONN_MODE_CHANGE_PEND,
862         HCI_CONN_SCO_SETUP_PEND,
863         HCI_CONN_MGMT_CONNECTED,
864         HCI_CONN_SSP_ENABLED,
865         HCI_CONN_SC_ENABLED,
866         HCI_CONN_AES_CCM,
867         HCI_CONN_POWER_SAVE,
868         HCI_CONN_FLUSH_KEY,
869         HCI_CONN_ENCRYPT,
870         HCI_CONN_AUTH,
871         HCI_CONN_SECURE,
872         HCI_CONN_FIPS,
873         HCI_CONN_STK_ENCRYPT,
874         HCI_CONN_AUTH_INITIATOR,
875         HCI_CONN_DROP,
876         HCI_CONN_PARAM_REMOVAL_PEND,
877         HCI_CONN_NEW_LINK_KEY,
878         HCI_CONN_SCANNING,
879         HCI_CONN_AUTH_FAILURE,
880 };
881
882 static inline bool hci_conn_ssp_enabled(struct hci_conn *conn)
883 {
884         struct hci_dev *hdev = conn->hdev;
885         return hci_dev_test_flag(hdev, HCI_SSP_ENABLED) &&
886                test_bit(HCI_CONN_SSP_ENABLED, &conn->flags);
887 }
888
889 static inline bool hci_conn_sc_enabled(struct hci_conn *conn)
890 {
891         struct hci_dev *hdev = conn->hdev;
892         return hci_dev_test_flag(hdev, HCI_SC_ENABLED) &&
893                test_bit(HCI_CONN_SC_ENABLED, &conn->flags);
894 }
895
896 static inline void hci_conn_hash_add(struct hci_dev *hdev, struct hci_conn *c)
897 {
898         struct hci_conn_hash *h = &hdev->conn_hash;
899         list_add_rcu(&c->list, &h->list);
900         switch (c->type) {
901         case ACL_LINK:
902                 h->acl_num++;
903                 break;
904         case AMP_LINK:
905                 h->amp_num++;
906                 break;
907         case LE_LINK:
908                 h->le_num++;
909                 if (c->role == HCI_ROLE_SLAVE)
910                         h->le_num_peripheral++;
911                 break;
912         case SCO_LINK:
913         case ESCO_LINK:
914                 h->sco_num++;
915                 break;
916         }
917 }
918
919 static inline void hci_conn_hash_del(struct hci_dev *hdev, struct hci_conn *c)
920 {
921         struct hci_conn_hash *h = &hdev->conn_hash;
922
923         list_del_rcu(&c->list);
924         synchronize_rcu();
925
926         switch (c->type) {
927         case ACL_LINK:
928                 h->acl_num--;
929                 break;
930         case AMP_LINK:
931                 h->amp_num--;
932                 break;
933         case LE_LINK:
934                 h->le_num--;
935                 if (c->role == HCI_ROLE_SLAVE)
936                         h->le_num_peripheral--;
937                 break;
938         case SCO_LINK:
939         case ESCO_LINK:
940                 h->sco_num--;
941                 break;
942         }
943 }
944
945 static inline unsigned int hci_conn_num(struct hci_dev *hdev, __u8 type)
946 {
947         struct hci_conn_hash *h = &hdev->conn_hash;
948         switch (type) {
949         case ACL_LINK:
950                 return h->acl_num;
951         case AMP_LINK:
952                 return h->amp_num;
953         case LE_LINK:
954                 return h->le_num;
955         case SCO_LINK:
956         case ESCO_LINK:
957                 return h->sco_num;
958         default:
959                 return 0;
960         }
961 }
962
963 static inline unsigned int hci_conn_count(struct hci_dev *hdev)
964 {
965         struct hci_conn_hash *c = &hdev->conn_hash;
966
967         return c->acl_num + c->amp_num + c->sco_num + c->le_num;
968 }
969
970 static inline __u8 hci_conn_lookup_type(struct hci_dev *hdev, __u16 handle)
971 {
972         struct hci_conn_hash *h = &hdev->conn_hash;
973         struct hci_conn *c;
974         __u8 type = INVALID_LINK;
975
976         rcu_read_lock();
977
978         list_for_each_entry_rcu(c, &h->list, list) {
979                 if (c->handle == handle) {
980                         type = c->type;
981                         break;
982                 }
983         }
984
985         rcu_read_unlock();
986
987         return type;
988 }
989
990 static inline struct hci_conn *hci_conn_hash_lookup_handle(struct hci_dev *hdev,
991                                                                 __u16 handle)
992 {
993         struct hci_conn_hash *h = &hdev->conn_hash;
994         struct hci_conn  *c;
995
996         rcu_read_lock();
997
998         list_for_each_entry_rcu(c, &h->list, list) {
999                 if (c->handle == handle) {
1000                         rcu_read_unlock();
1001                         return c;
1002                 }
1003         }
1004         rcu_read_unlock();
1005
1006         return NULL;
1007 }
1008
1009 static inline struct hci_conn *hci_conn_hash_lookup_ba(struct hci_dev *hdev,
1010                                                         __u8 type, bdaddr_t *ba)
1011 {
1012         struct hci_conn_hash *h = &hdev->conn_hash;
1013         struct hci_conn  *c;
1014
1015         rcu_read_lock();
1016
1017         list_for_each_entry_rcu(c, &h->list, list) {
1018                 if (c->type == type && !bacmp(&c->dst, ba)) {
1019                         rcu_read_unlock();
1020                         return c;
1021                 }
1022         }
1023
1024         rcu_read_unlock();
1025
1026         return NULL;
1027 }
1028
1029 static inline struct hci_conn *hci_conn_hash_lookup_le(struct hci_dev *hdev,
1030                                                        bdaddr_t *ba,
1031                                                        __u8 ba_type)
1032 {
1033         struct hci_conn_hash *h = &hdev->conn_hash;
1034         struct hci_conn  *c;
1035
1036         rcu_read_lock();
1037
1038         list_for_each_entry_rcu(c, &h->list, list) {
1039                 if (c->type != LE_LINK)
1040                        continue;
1041
1042                 if (ba_type == c->dst_type && !bacmp(&c->dst, ba)) {
1043                         rcu_read_unlock();
1044                         return c;
1045                 }
1046         }
1047
1048         rcu_read_unlock();
1049
1050         return NULL;
1051 }
1052
1053 static inline struct hci_conn *hci_conn_hash_lookup_state(struct hci_dev *hdev,
1054                                                         __u8 type, __u16 state)
1055 {
1056         struct hci_conn_hash *h = &hdev->conn_hash;
1057         struct hci_conn  *c;
1058
1059         rcu_read_lock();
1060
1061         list_for_each_entry_rcu(c, &h->list, list) {
1062                 if (c->type == type && c->state == state) {
1063                         rcu_read_unlock();
1064                         return c;
1065                 }
1066         }
1067
1068         rcu_read_unlock();
1069
1070         return NULL;
1071 }
1072
1073 static inline struct hci_conn *hci_lookup_le_connect(struct hci_dev *hdev)
1074 {
1075         struct hci_conn_hash *h = &hdev->conn_hash;
1076         struct hci_conn  *c;
1077
1078         rcu_read_lock();
1079
1080         list_for_each_entry_rcu(c, &h->list, list) {
1081                 if (c->type == LE_LINK && c->state == BT_CONNECT &&
1082                     !test_bit(HCI_CONN_SCANNING, &c->flags)) {
1083                         rcu_read_unlock();
1084                         return c;
1085                 }
1086         }
1087
1088         rcu_read_unlock();
1089
1090         return NULL;
1091 }
1092
1093 #ifdef TIZEN_BT
1094 static inline bool hci_conn_rssi_state_set(struct hci_dev *hdev,
1095                                         __u8 type, bdaddr_t *ba, bool value)
1096 {
1097         struct hci_conn_hash *h = &hdev->conn_hash;
1098         struct hci_conn  *c;
1099         __u8 conn_type;
1100
1101         if (type == 0x01)
1102                 conn_type = LE_LINK;
1103         else
1104                 conn_type = ACL_LINK;
1105
1106         rcu_read_lock();
1107
1108         list_for_each_entry_rcu(c, &h->list, list) {
1109                 if (c->type == conn_type && !bacmp(&c->dst, ba)) {
1110                         c->rssi_monitored = value;
1111                         rcu_read_unlock();
1112                         return true;
1113                 }
1114         }
1115
1116         rcu_read_unlock();
1117         return false;
1118 }
1119
1120 static inline void hci_conn_rssi_unset_all(struct hci_dev *hdev,
1121                                         __u8 type)
1122 {
1123         struct hci_conn_hash *h = &hdev->conn_hash;
1124         struct hci_conn  *c;
1125         __u8 conn_type;
1126
1127         if (type == 0x01)
1128                 conn_type = LE_LINK;
1129         else
1130                 conn_type = ACL_LINK;
1131
1132         rcu_read_lock();
1133         list_for_each_entry_rcu(c, &h->list, list) {
1134                 if (c->type == conn_type)
1135                         c->rssi_monitored = false;
1136         }
1137         rcu_read_unlock();
1138 }
1139
1140 static inline int hci_conn_hash_lookup_rssi_count(struct hci_dev *hdev)
1141 {
1142         struct hci_conn_hash *h = &hdev->conn_hash;
1143         struct hci_conn  *c;
1144         int count = 0;
1145
1146         rcu_read_lock();
1147         list_for_each_entry_rcu(c, &h->list, list) {
1148                 if (c->rssi_monitored == true)
1149                         ++count;
1150         }
1151         rcu_read_unlock();
1152
1153         return count;
1154 }
1155 #endif
1156
1157 int hci_disconnect(struct hci_conn *conn, __u8 reason);
1158 bool hci_setup_sync(struct hci_conn *conn, __u16 handle);
1159 void hci_sco_setup(struct hci_conn *conn, __u8 status);
1160
1161 struct hci_conn *hci_conn_add(struct hci_dev *hdev, int type, bdaddr_t *dst,
1162                               u8 role);
1163 int hci_conn_del(struct hci_conn *conn);
1164 void hci_conn_hash_flush(struct hci_dev *hdev);
1165 void hci_conn_check_pending(struct hci_dev *hdev);
1166
1167 struct hci_chan *hci_chan_create(struct hci_conn *conn);
1168 void hci_chan_del(struct hci_chan *chan);
1169 void hci_chan_list_flush(struct hci_conn *conn);
1170 struct hci_chan *hci_chan_lookup_handle(struct hci_dev *hdev, __u16 handle);
1171
1172 struct hci_conn *hci_connect_le_scan(struct hci_dev *hdev, bdaddr_t *dst,
1173                                      u8 dst_type, u8 sec_level,
1174                                      u16 conn_timeout,
1175                                      enum conn_reasons conn_reason);
1176 struct hci_conn *hci_connect_le(struct hci_dev *hdev, bdaddr_t *dst,
1177                                 u8 dst_type, u8 sec_level, u16 conn_timeout,
1178                                 u8 role, bdaddr_t *direct_rpa);
1179 struct hci_conn *hci_connect_acl(struct hci_dev *hdev, bdaddr_t *dst,
1180                                  u8 sec_level, u8 auth_type,
1181                                  enum conn_reasons conn_reason);
1182 struct hci_conn *hci_connect_sco(struct hci_dev *hdev, int type, bdaddr_t *dst,
1183                                  __u16 setting);
1184 int hci_conn_check_link_mode(struct hci_conn *conn);
1185 int hci_conn_check_secure(struct hci_conn *conn, __u8 sec_level);
1186 int hci_conn_security(struct hci_conn *conn, __u8 sec_level, __u8 auth_type,
1187                       bool initiator);
1188 int hci_conn_switch_role(struct hci_conn *conn, __u8 role);
1189
1190 void hci_conn_enter_active_mode(struct hci_conn *conn, __u8 force_active);
1191
1192 void hci_le_conn_failed(struct hci_conn *conn, u8 status);
1193
1194 /*
1195  * hci_conn_get() and hci_conn_put() are used to control the life-time of an
1196  * "hci_conn" object. They do not guarantee that the hci_conn object is running,
1197  * working or anything else. They just guarantee that the object is available
1198  * and can be dereferenced. So you can use its locks, local variables and any
1199  * other constant data.
1200  * Before accessing runtime data, you _must_ lock the object and then check that
1201  * it is still running. As soon as you release the locks, the connection might
1202  * get dropped, though.
1203  *
1204  * On the other hand, hci_conn_hold() and hci_conn_drop() are used to control
1205  * how long the underlying connection is held. So every channel that runs on the
1206  * hci_conn object calls this to prevent the connection from disappearing. As
1207  * long as you hold a device, you must also guarantee that you have a valid
1208  * reference to the device via hci_conn_get() (or the initial reference from
1209  * hci_conn_add()).
1210  * The hold()/drop() ref-count is known to drop below 0 sometimes, which doesn't
1211  * break because nobody cares for that. But this means, we cannot use
1212  * _get()/_drop() in it, but require the caller to have a valid ref (FIXME).
1213  */
1214
1215 static inline struct hci_conn *hci_conn_get(struct hci_conn *conn)
1216 {
1217         get_device(&conn->dev);
1218         return conn;
1219 }
1220
1221 static inline void hci_conn_put(struct hci_conn *conn)
1222 {
1223         put_device(&conn->dev);
1224 }
1225
1226 static inline void hci_conn_hold(struct hci_conn *conn)
1227 {
1228         BT_DBG("hcon %p orig refcnt %d", conn, atomic_read(&conn->refcnt));
1229
1230         atomic_inc(&conn->refcnt);
1231         cancel_delayed_work(&conn->disc_work);
1232 }
1233
1234 static inline void hci_conn_drop(struct hci_conn *conn)
1235 {
1236         BT_DBG("hcon %p orig refcnt %d", conn, atomic_read(&conn->refcnt));
1237
1238         if (atomic_dec_and_test(&conn->refcnt)) {
1239                 unsigned long timeo;
1240
1241                 switch (conn->type) {
1242                 case ACL_LINK:
1243                 case LE_LINK:
1244                         cancel_delayed_work(&conn->idle_work);
1245                         if (conn->state == BT_CONNECTED) {
1246                                 timeo = conn->disc_timeout;
1247                                 if (!conn->out)
1248                                         timeo *= 2;
1249                         } else {
1250                                 timeo = 0;
1251                         }
1252                         break;
1253
1254                 case AMP_LINK:
1255                         timeo = conn->disc_timeout;
1256                         break;
1257
1258                 default:
1259                         timeo = 0;
1260                         break;
1261                 }
1262
1263                 cancel_delayed_work(&conn->disc_work);
1264                 queue_delayed_work(conn->hdev->workqueue,
1265                                    &conn->disc_work, timeo);
1266         }
1267 }
1268
1269 /* ----- HCI Devices ----- */
1270 static inline void hci_dev_put(struct hci_dev *d)
1271 {
1272         BT_DBG("%s orig refcnt %d", d->name,
1273                kref_read(&d->dev.kobj.kref));
1274
1275         put_device(&d->dev);
1276 }
1277
1278 static inline struct hci_dev *hci_dev_hold(struct hci_dev *d)
1279 {
1280         BT_DBG("%s orig refcnt %d", d->name,
1281                kref_read(&d->dev.kobj.kref));
1282
1283         get_device(&d->dev);
1284         return d;
1285 }
1286
1287 #define hci_dev_lock(d)         mutex_lock(&d->lock)
1288 #define hci_dev_unlock(d)       mutex_unlock(&d->lock)
1289
1290 #define to_hci_dev(d) container_of(d, struct hci_dev, dev)
1291 #define to_hci_conn(c) container_of(c, struct hci_conn, dev)
1292
1293 static inline void *hci_get_drvdata(struct hci_dev *hdev)
1294 {
1295         return dev_get_drvdata(&hdev->dev);
1296 }
1297
1298 static inline void hci_set_drvdata(struct hci_dev *hdev, void *data)
1299 {
1300         dev_set_drvdata(&hdev->dev, data);
1301 }
1302
1303 static inline void *hci_get_priv(struct hci_dev *hdev)
1304 {
1305         return (char *)hdev + sizeof(*hdev);
1306 }
1307
1308 struct hci_dev *hci_dev_get(int index);
1309 struct hci_dev *hci_get_route(bdaddr_t *dst, bdaddr_t *src, u8 src_type);
1310
1311 struct hci_dev *hci_alloc_dev_priv(int sizeof_priv);
1312
1313 static inline struct hci_dev *hci_alloc_dev(void)
1314 {
1315         return hci_alloc_dev_priv(0);
1316 }
1317
1318 void hci_free_dev(struct hci_dev *hdev);
1319 int hci_register_dev(struct hci_dev *hdev);
1320 void hci_unregister_dev(struct hci_dev *hdev);
1321 void hci_release_dev(struct hci_dev *hdev);
1322 int hci_suspend_dev(struct hci_dev *hdev);
1323 int hci_resume_dev(struct hci_dev *hdev);
1324 int hci_reset_dev(struct hci_dev *hdev);
1325 int hci_recv_frame(struct hci_dev *hdev, struct sk_buff *skb);
1326 int hci_recv_diag(struct hci_dev *hdev, struct sk_buff *skb);
1327 __printf(2, 3) void hci_set_hw_info(struct hci_dev *hdev, const char *fmt, ...);
1328 __printf(2, 3) void hci_set_fw_info(struct hci_dev *hdev, const char *fmt, ...);
1329
1330 static inline void hci_set_msft_opcode(struct hci_dev *hdev, __u16 opcode)
1331 {
1332 #if IS_ENABLED(CONFIG_BT_MSFTEXT)
1333         hdev->msft_opcode = opcode;
1334 #endif
1335 }
1336
1337 static inline void hci_set_aosp_capable(struct hci_dev *hdev)
1338 {
1339 #if IS_ENABLED(CONFIG_BT_AOSPEXT)
1340         hdev->aosp_capable = true;
1341 #endif
1342 }
1343
1344 int hci_dev_open(__u16 dev);
1345 int hci_dev_close(__u16 dev);
1346 int hci_dev_do_close(struct hci_dev *hdev);
1347 int hci_dev_reset(__u16 dev);
1348 int hci_dev_reset_stat(__u16 dev);
1349 int hci_dev_cmd(unsigned int cmd, void __user *arg);
1350 int hci_get_dev_list(void __user *arg);
1351 int hci_get_dev_info(void __user *arg);
1352 int hci_get_conn_list(void __user *arg);
1353 int hci_get_conn_info(struct hci_dev *hdev, void __user *arg);
1354 int hci_get_auth_info(struct hci_dev *hdev, void __user *arg);
1355 int hci_inquiry(void __user *arg);
1356
1357 struct bdaddr_list *hci_bdaddr_list_lookup(struct list_head *list,
1358                                            bdaddr_t *bdaddr, u8 type);
1359 struct bdaddr_list_with_irk *hci_bdaddr_list_lookup_with_irk(
1360                                     struct list_head *list, bdaddr_t *bdaddr,
1361                                     u8 type);
1362 struct bdaddr_list_with_flags *
1363 hci_bdaddr_list_lookup_with_flags(struct list_head *list, bdaddr_t *bdaddr,
1364                                   u8 type);
1365 int hci_bdaddr_list_add(struct list_head *list, bdaddr_t *bdaddr, u8 type);
1366 int hci_bdaddr_list_add_with_irk(struct list_head *list, bdaddr_t *bdaddr,
1367                                  u8 type, u8 *peer_irk, u8 *local_irk);
1368 int hci_bdaddr_list_add_with_flags(struct list_head *list, bdaddr_t *bdaddr,
1369                                    u8 type, u32 flags);
1370 int hci_bdaddr_list_del(struct list_head *list, bdaddr_t *bdaddr, u8 type);
1371 int hci_bdaddr_list_del_with_irk(struct list_head *list, bdaddr_t *bdaddr,
1372                                  u8 type);
1373 int hci_bdaddr_list_del_with_flags(struct list_head *list, bdaddr_t *bdaddr,
1374                                    u8 type);
1375 void hci_bdaddr_list_clear(struct list_head *list);
1376
1377 struct hci_conn_params *hci_conn_params_lookup(struct hci_dev *hdev,
1378                                                bdaddr_t *addr, u8 addr_type);
1379 struct hci_conn_params *hci_conn_params_add(struct hci_dev *hdev,
1380                                             bdaddr_t *addr, u8 addr_type);
1381 void hci_conn_params_del(struct hci_dev *hdev, bdaddr_t *addr, u8 addr_type);
1382 void hci_conn_params_clear_disabled(struct hci_dev *hdev);
1383
1384 struct hci_conn_params *hci_pend_le_action_lookup(struct list_head *list,
1385                                                   bdaddr_t *addr,
1386                                                   u8 addr_type);
1387
1388 void hci_uuids_clear(struct hci_dev *hdev);
1389
1390 void hci_link_keys_clear(struct hci_dev *hdev);
1391 struct link_key *hci_find_link_key(struct hci_dev *hdev, bdaddr_t *bdaddr);
1392 struct link_key *hci_add_link_key(struct hci_dev *hdev, struct hci_conn *conn,
1393                                   bdaddr_t *bdaddr, u8 *val, u8 type,
1394                                   u8 pin_len, bool *persistent);
1395 struct smp_ltk *hci_add_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr,
1396                             u8 addr_type, u8 type, u8 authenticated,
1397                             u8 tk[16], u8 enc_size, __le16 ediv, __le64 rand);
1398 struct smp_ltk *hci_find_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr,
1399                              u8 addr_type, u8 role);
1400 int hci_remove_ltk(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 bdaddr_type);
1401 void hci_smp_ltks_clear(struct hci_dev *hdev);
1402 int hci_remove_link_key(struct hci_dev *hdev, bdaddr_t *bdaddr);
1403
1404 struct smp_irk *hci_find_irk_by_rpa(struct hci_dev *hdev, bdaddr_t *rpa);
1405 struct smp_irk *hci_find_irk_by_addr(struct hci_dev *hdev, bdaddr_t *bdaddr,
1406                                      u8 addr_type);
1407 struct smp_irk *hci_add_irk(struct hci_dev *hdev, bdaddr_t *bdaddr,
1408                             u8 addr_type, u8 val[16], bdaddr_t *rpa);
1409 void hci_remove_irk(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 addr_type);
1410 bool hci_is_blocked_key(struct hci_dev *hdev, u8 type, u8 val[16]);
1411 void hci_blocked_keys_clear(struct hci_dev *hdev);
1412 void hci_smp_irks_clear(struct hci_dev *hdev);
1413
1414 bool hci_bdaddr_is_paired(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 type);
1415
1416 void hci_remote_oob_data_clear(struct hci_dev *hdev);
1417 struct oob_data *hci_find_remote_oob_data(struct hci_dev *hdev,
1418                                           bdaddr_t *bdaddr, u8 bdaddr_type);
1419 int hci_add_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr,
1420                             u8 bdaddr_type, u8 *hash192, u8 *rand192,
1421                             u8 *hash256, u8 *rand256);
1422 int hci_remove_remote_oob_data(struct hci_dev *hdev, bdaddr_t *bdaddr,
1423                                u8 bdaddr_type);
1424
1425 void hci_adv_instances_clear(struct hci_dev *hdev);
1426 struct adv_info *hci_find_adv_instance(struct hci_dev *hdev, u8 instance);
1427 struct adv_info *hci_get_next_instance(struct hci_dev *hdev, u8 instance);
1428 int hci_add_adv_instance(struct hci_dev *hdev, u8 instance, u32 flags,
1429                          u16 adv_data_len, u8 *adv_data,
1430                          u16 scan_rsp_len, u8 *scan_rsp_data,
1431                          u16 timeout, u16 duration, s8 tx_power,
1432                          u32 min_interval, u32 max_interval);
1433 int hci_set_adv_instance_data(struct hci_dev *hdev, u8 instance,
1434                          u16 adv_data_len, u8 *adv_data,
1435                          u16 scan_rsp_len, u8 *scan_rsp_data);
1436 int hci_remove_adv_instance(struct hci_dev *hdev, u8 instance);
1437 void hci_adv_instances_set_rpa_expired(struct hci_dev *hdev, bool rpa_expired);
1438
1439 void hci_adv_monitors_clear(struct hci_dev *hdev);
1440 void hci_free_adv_monitor(struct hci_dev *hdev, struct adv_monitor *monitor);
1441 int hci_add_adv_patterns_monitor_complete(struct hci_dev *hdev, u8 status);
1442 int hci_remove_adv_monitor_complete(struct hci_dev *hdev, u8 status);
1443 bool hci_add_adv_monitor(struct hci_dev *hdev, struct adv_monitor *monitor,
1444                         int *err);
1445 bool hci_remove_single_adv_monitor(struct hci_dev *hdev, u16 handle, int *err);
1446 bool hci_remove_all_adv_monitor(struct hci_dev *hdev, int *err);
1447 bool hci_is_adv_monitoring(struct hci_dev *hdev);
1448 int hci_get_adv_monitor_offload_ext(struct hci_dev *hdev);
1449
1450 void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb);
1451
1452 void hci_init_sysfs(struct hci_dev *hdev);
1453 void hci_conn_init_sysfs(struct hci_conn *conn);
1454 void hci_conn_add_sysfs(struct hci_conn *conn);
1455 void hci_conn_del_sysfs(struct hci_conn *conn);
1456
1457 #define SET_HCIDEV_DEV(hdev, pdev) ((hdev)->dev.parent = (pdev))
1458
1459 /* ----- LMP capabilities ----- */
1460 #define lmp_encrypt_capable(dev)   ((dev)->features[0][0] & LMP_ENCRYPT)
1461 #define lmp_rswitch_capable(dev)   ((dev)->features[0][0] & LMP_RSWITCH)
1462 #define lmp_hold_capable(dev)      ((dev)->features[0][0] & LMP_HOLD)
1463 #define lmp_sniff_capable(dev)     ((dev)->features[0][0] & LMP_SNIFF)
1464 #define lmp_park_capable(dev)      ((dev)->features[0][1] & LMP_PARK)
1465 #define lmp_inq_rssi_capable(dev)  ((dev)->features[0][3] & LMP_RSSI_INQ)
1466 #define lmp_esco_capable(dev)      ((dev)->features[0][3] & LMP_ESCO)
1467 #define lmp_bredr_capable(dev)     (!((dev)->features[0][4] & LMP_NO_BREDR))
1468 #define lmp_le_capable(dev)        ((dev)->features[0][4] & LMP_LE)
1469 #define lmp_sniffsubr_capable(dev) ((dev)->features[0][5] & LMP_SNIFF_SUBR)
1470 #define lmp_pause_enc_capable(dev) ((dev)->features[0][5] & LMP_PAUSE_ENC)
1471 #define lmp_esco_2m_capable(dev)   ((dev)->features[0][5] & LMP_EDR_ESCO_2M)
1472 #define lmp_ext_inq_capable(dev)   ((dev)->features[0][6] & LMP_EXT_INQ)
1473 #define lmp_le_br_capable(dev)     (!!((dev)->features[0][6] & LMP_SIMUL_LE_BR))
1474 #define lmp_ssp_capable(dev)       ((dev)->features[0][6] & LMP_SIMPLE_PAIR)
1475 #define lmp_no_flush_capable(dev)  ((dev)->features[0][6] & LMP_NO_FLUSH)
1476 #define lmp_lsto_capable(dev)      ((dev)->features[0][7] & LMP_LSTO)
1477 #define lmp_inq_tx_pwr_capable(dev) ((dev)->features[0][7] & LMP_INQ_TX_PWR)
1478 #define lmp_ext_feat_capable(dev)  ((dev)->features[0][7] & LMP_EXTFEATURES)
1479 #define lmp_transp_capable(dev)    ((dev)->features[0][2] & LMP_TRANSPARENT)
1480 #define lmp_edr_2m_capable(dev)    ((dev)->features[0][3] & LMP_EDR_2M)
1481 #define lmp_edr_3m_capable(dev)    ((dev)->features[0][3] & LMP_EDR_3M)
1482 #define lmp_edr_3slot_capable(dev) ((dev)->features[0][4] & LMP_EDR_3SLOT)
1483 #define lmp_edr_5slot_capable(dev) ((dev)->features[0][5] & LMP_EDR_5SLOT)
1484
1485 /* ----- Extended LMP capabilities ----- */
1486 #define lmp_cpb_central_capable(dev) ((dev)->features[2][0] & LMP_CPB_CENTRAL)
1487 #define lmp_cpb_peripheral_capable(dev) ((dev)->features[2][0] & LMP_CPB_PERIPHERAL)
1488 #define lmp_sync_train_capable(dev) ((dev)->features[2][0] & LMP_SYNC_TRAIN)
1489 #define lmp_sync_scan_capable(dev)  ((dev)->features[2][0] & LMP_SYNC_SCAN)
1490 #define lmp_sc_capable(dev)         ((dev)->features[2][1] & LMP_SC)
1491 #define lmp_ping_capable(dev)       ((dev)->features[2][1] & LMP_PING)
1492
1493 /* ----- Host capabilities ----- */
1494 #define lmp_host_ssp_capable(dev)  ((dev)->features[1][0] & LMP_HOST_SSP)
1495 #define lmp_host_sc_capable(dev)   ((dev)->features[1][0] & LMP_HOST_SC)
1496 #define lmp_host_le_capable(dev)   (!!((dev)->features[1][0] & LMP_HOST_LE))
1497 #define lmp_host_le_br_capable(dev) (!!((dev)->features[1][0] & LMP_HOST_LE_BREDR))
1498
1499 #define hdev_is_powered(dev)   (test_bit(HCI_UP, &(dev)->flags) && \
1500                                 !hci_dev_test_flag(dev, HCI_AUTO_OFF))
1501 #define bredr_sc_enabled(dev)  (lmp_sc_capable(dev) && \
1502                                 hci_dev_test_flag(dev, HCI_SC_ENABLED))
1503 #define rpa_valid(dev)         (bacmp(&dev->rpa, BDADDR_ANY) && \
1504                                 !hci_dev_test_flag(dev, HCI_RPA_EXPIRED))
1505 #define adv_rpa_valid(adv)     (bacmp(&adv->random_addr, BDADDR_ANY) && \
1506                                 !adv->rpa_expired)
1507
1508 #define scan_1m(dev) (((dev)->le_tx_def_phys & HCI_LE_SET_PHY_1M) || \
1509                       ((dev)->le_rx_def_phys & HCI_LE_SET_PHY_1M))
1510
1511 #define scan_2m(dev) (((dev)->le_tx_def_phys & HCI_LE_SET_PHY_2M) || \
1512                       ((dev)->le_rx_def_phys & HCI_LE_SET_PHY_2M))
1513
1514 #define scan_coded(dev) (((dev)->le_tx_def_phys & HCI_LE_SET_PHY_CODED) || \
1515                          ((dev)->le_rx_def_phys & HCI_LE_SET_PHY_CODED))
1516
1517 /* Use LL Privacy based address resolution if supported */
1518 #define use_ll_privacy(dev) ((dev)->le_features[0] & HCI_LE_LL_PRIVACY)
1519
1520 /* Use ext scanning if set ext scan param and ext scan enable is supported */
1521 #define use_ext_scan(dev) (((dev)->commands[37] & 0x20) && \
1522                            ((dev)->commands[37] & 0x40))
1523 /* Use ext create connection if command is supported */
1524 #define use_ext_conn(dev) ((dev)->commands[37] & 0x80)
1525
1526 /* Extended advertising support */
1527 #define ext_adv_capable(dev) (((dev)->le_features[1] & HCI_LE_EXT_ADV))
1528
1529 /* ----- HCI protocols ----- */
1530 #define HCI_PROTO_DEFER             0x01
1531
1532 static inline int hci_proto_connect_ind(struct hci_dev *hdev, bdaddr_t *bdaddr,
1533                                         __u8 type, __u8 *flags)
1534 {
1535         switch (type) {
1536         case ACL_LINK:
1537                 return l2cap_connect_ind(hdev, bdaddr);
1538
1539         case SCO_LINK:
1540         case ESCO_LINK:
1541                 return sco_connect_ind(hdev, bdaddr, flags);
1542
1543         default:
1544                 BT_ERR("unknown link type %d", type);
1545                 return -EINVAL;
1546         }
1547 }
1548
1549 static inline int hci_proto_disconn_ind(struct hci_conn *conn)
1550 {
1551         if (conn->type != ACL_LINK && conn->type != LE_LINK)
1552                 return HCI_ERROR_REMOTE_USER_TERM;
1553
1554         return l2cap_disconn_ind(conn);
1555 }
1556
1557 /* ----- HCI callbacks ----- */
1558 struct hci_cb {
1559         struct list_head list;
1560
1561         char *name;
1562
1563         void (*connect_cfm)     (struct hci_conn *conn, __u8 status);
1564         void (*disconn_cfm)     (struct hci_conn *conn, __u8 status);
1565         void (*security_cfm)    (struct hci_conn *conn, __u8 status,
1566                                                                 __u8 encrypt);
1567         void (*key_change_cfm)  (struct hci_conn *conn, __u8 status);
1568         void (*role_switch_cfm) (struct hci_conn *conn, __u8 status, __u8 role);
1569 };
1570
1571 static inline void hci_connect_cfm(struct hci_conn *conn, __u8 status)
1572 {
1573         struct hci_cb *cb;
1574
1575         mutex_lock(&hci_cb_list_lock);
1576         list_for_each_entry(cb, &hci_cb_list, list) {
1577                 if (cb->connect_cfm)
1578                         cb->connect_cfm(conn, status);
1579         }
1580         mutex_unlock(&hci_cb_list_lock);
1581
1582         if (conn->connect_cfm_cb)
1583                 conn->connect_cfm_cb(conn, status);
1584 }
1585
1586 static inline void hci_disconn_cfm(struct hci_conn *conn, __u8 reason)
1587 {
1588         struct hci_cb *cb;
1589
1590         mutex_lock(&hci_cb_list_lock);
1591         list_for_each_entry(cb, &hci_cb_list, list) {
1592                 if (cb->disconn_cfm)
1593                         cb->disconn_cfm(conn, reason);
1594         }
1595         mutex_unlock(&hci_cb_list_lock);
1596
1597         if (conn->disconn_cfm_cb)
1598                 conn->disconn_cfm_cb(conn, reason);
1599 }
1600
1601 static inline void hci_auth_cfm(struct hci_conn *conn, __u8 status)
1602 {
1603         struct hci_cb *cb;
1604         __u8 encrypt;
1605
1606         if (test_bit(HCI_CONN_ENCRYPT_PEND, &conn->flags))
1607                 return;
1608
1609         encrypt = test_bit(HCI_CONN_ENCRYPT, &conn->flags) ? 0x01 : 0x00;
1610
1611         mutex_lock(&hci_cb_list_lock);
1612         list_for_each_entry(cb, &hci_cb_list, list) {
1613                 if (cb->security_cfm)
1614                         cb->security_cfm(conn, status, encrypt);
1615         }
1616         mutex_unlock(&hci_cb_list_lock);
1617
1618         if (conn->security_cfm_cb)
1619                 conn->security_cfm_cb(conn, status);
1620 }
1621
1622 static inline void hci_encrypt_cfm(struct hci_conn *conn, __u8 status)
1623 {
1624         struct hci_cb *cb;
1625         __u8 encrypt;
1626
1627         if (conn->state == BT_CONFIG) {
1628                 if (!status)
1629                         conn->state = BT_CONNECTED;
1630
1631                 hci_connect_cfm(conn, status);
1632                 hci_conn_drop(conn);
1633                 return;
1634         }
1635
1636         if (!test_bit(HCI_CONN_ENCRYPT, &conn->flags))
1637                 encrypt = 0x00;
1638         else if (test_bit(HCI_CONN_AES_CCM, &conn->flags))
1639                 encrypt = 0x02;
1640         else
1641                 encrypt = 0x01;
1642
1643         if (!status) {
1644                 if (conn->sec_level == BT_SECURITY_SDP)
1645                         conn->sec_level = BT_SECURITY_LOW;
1646
1647                 if (conn->pending_sec_level > conn->sec_level)
1648                         conn->sec_level = conn->pending_sec_level;
1649         }
1650
1651         mutex_lock(&hci_cb_list_lock);
1652         list_for_each_entry(cb, &hci_cb_list, list) {
1653                 if (cb->security_cfm)
1654                         cb->security_cfm(conn, status, encrypt);
1655         }
1656         mutex_unlock(&hci_cb_list_lock);
1657
1658         if (conn->security_cfm_cb)
1659                 conn->security_cfm_cb(conn, status);
1660 }
1661
1662 static inline void hci_key_change_cfm(struct hci_conn *conn, __u8 status)
1663 {
1664         struct hci_cb *cb;
1665
1666         mutex_lock(&hci_cb_list_lock);
1667         list_for_each_entry(cb, &hci_cb_list, list) {
1668                 if (cb->key_change_cfm)
1669                         cb->key_change_cfm(conn, status);
1670         }
1671         mutex_unlock(&hci_cb_list_lock);
1672 }
1673
1674 static inline void hci_role_switch_cfm(struct hci_conn *conn, __u8 status,
1675                                                                 __u8 role)
1676 {
1677         struct hci_cb *cb;
1678
1679         mutex_lock(&hci_cb_list_lock);
1680         list_for_each_entry(cb, &hci_cb_list, list) {
1681                 if (cb->role_switch_cfm)
1682                         cb->role_switch_cfm(conn, status, role);
1683         }
1684         mutex_unlock(&hci_cb_list_lock);
1685 }
1686
1687 static inline void *eir_get_data(u8 *eir, size_t eir_len, u8 type,
1688                                  size_t *data_len)
1689 {
1690         size_t parsed = 0;
1691
1692         if (eir_len < 2)
1693                 return NULL;
1694
1695         while (parsed < eir_len - 1) {
1696                 u8 field_len = eir[0];
1697
1698                 if (field_len == 0)
1699                         break;
1700
1701                 parsed += field_len + 1;
1702
1703                 if (parsed > eir_len)
1704                         break;
1705
1706                 if (eir[1] != type) {
1707                         eir += field_len + 1;
1708                         continue;
1709                 }
1710
1711                 /* Zero length data */
1712                 if (field_len == 1)
1713                         return NULL;
1714
1715                 if (data_len)
1716                         *data_len = field_len - 1;
1717
1718                 return &eir[2];
1719         }
1720
1721         return NULL;
1722 }
1723
1724 static inline bool hci_bdaddr_is_rpa(bdaddr_t *bdaddr, u8 addr_type)
1725 {
1726         if (addr_type != ADDR_LE_DEV_RANDOM)
1727                 return false;
1728
1729         if ((bdaddr->b[5] & 0xc0) == 0x40)
1730                return true;
1731
1732         return false;
1733 }
1734
1735 static inline bool hci_is_identity_address(bdaddr_t *addr, u8 addr_type)
1736 {
1737         if (addr_type == ADDR_LE_DEV_PUBLIC)
1738                 return true;
1739
1740         /* Check for Random Static address type */
1741         if ((addr->b[5] & 0xc0) == 0xc0)
1742                 return true;
1743
1744         return false;
1745 }
1746
1747 static inline struct smp_irk *hci_get_irk(struct hci_dev *hdev,
1748                                           bdaddr_t *bdaddr, u8 addr_type)
1749 {
1750         if (!hci_bdaddr_is_rpa(bdaddr, addr_type))
1751                 return NULL;
1752
1753         return hci_find_irk_by_rpa(hdev, bdaddr);
1754 }
1755
1756 static inline int hci_check_conn_params(u16 min, u16 max, u16 latency,
1757                                         u16 to_multiplier)
1758 {
1759         u16 max_latency;
1760
1761         if (min > max || min < 6 || max > 3200)
1762                 return -EINVAL;
1763
1764         if (to_multiplier < 10 || to_multiplier > 3200)
1765                 return -EINVAL;
1766
1767         if (max >= to_multiplier * 8)
1768                 return -EINVAL;
1769
1770         max_latency = (to_multiplier * 4 / max) - 1;
1771         if (latency > 499 || latency > max_latency)
1772                 return -EINVAL;
1773
1774         return 0;
1775 }
1776
1777 int hci_register_cb(struct hci_cb *hcb);
1778 int hci_unregister_cb(struct hci_cb *hcb);
1779
1780 struct sk_buff *__hci_cmd_sync(struct hci_dev *hdev, u16 opcode, u32 plen,
1781                                const void *param, u32 timeout);
1782 struct sk_buff *__hci_cmd_sync_ev(struct hci_dev *hdev, u16 opcode, u32 plen,
1783                                   const void *param, u8 event, u32 timeout);
1784 int __hci_cmd_send(struct hci_dev *hdev, u16 opcode, u32 plen,
1785                    const void *param);
1786
1787 int hci_send_cmd(struct hci_dev *hdev, __u16 opcode, __u32 plen,
1788                  const void *param);
1789 void hci_send_acl(struct hci_chan *chan, struct sk_buff *skb, __u16 flags);
1790 void hci_send_sco(struct hci_conn *conn, struct sk_buff *skb);
1791
1792 void *hci_sent_cmd_data(struct hci_dev *hdev, __u16 opcode);
1793
1794 struct sk_buff *hci_cmd_sync(struct hci_dev *hdev, u16 opcode, u32 plen,
1795                              const void *param, u32 timeout);
1796
1797 u32 hci_conn_get_phy(struct hci_conn *conn);
1798
1799 /* ----- HCI Sockets ----- */
1800 void hci_send_to_sock(struct hci_dev *hdev, struct sk_buff *skb);
1801 void hci_send_to_channel(unsigned short channel, struct sk_buff *skb,
1802                          int flag, struct sock *skip_sk);
1803 void hci_send_to_monitor(struct hci_dev *hdev, struct sk_buff *skb);
1804 void hci_send_monitor_ctrl_event(struct hci_dev *hdev, u16 event,
1805                                  void *data, u16 data_len, ktime_t tstamp,
1806                                  int flag, struct sock *skip_sk);
1807
1808 void hci_sock_dev_event(struct hci_dev *hdev, int event);
1809
1810 #define HCI_MGMT_VAR_LEN        BIT(0)
1811 #define HCI_MGMT_NO_HDEV        BIT(1)
1812 #define HCI_MGMT_UNTRUSTED      BIT(2)
1813 #define HCI_MGMT_UNCONFIGURED   BIT(3)
1814 #define HCI_MGMT_HDEV_OPTIONAL  BIT(4)
1815
1816 struct hci_mgmt_handler {
1817         int (*func) (struct sock *sk, struct hci_dev *hdev, void *data,
1818                      u16 data_len);
1819         size_t data_len;
1820         unsigned long flags;
1821 };
1822
1823 struct hci_mgmt_chan {
1824         struct list_head list;
1825         unsigned short channel;
1826         size_t handler_count;
1827         const struct hci_mgmt_handler *handlers;
1828 #ifdef TIZEN_BT
1829         size_t tizen_handler_count;
1830         const struct hci_mgmt_handler *tizen_handlers;
1831 #endif
1832         void (*hdev_init) (struct sock *sk, struct hci_dev *hdev);
1833 };
1834
1835 int hci_mgmt_chan_register(struct hci_mgmt_chan *c);
1836 void hci_mgmt_chan_unregister(struct hci_mgmt_chan *c);
1837
1838 /* Management interface */
1839 #define DISCOV_TYPE_BREDR               (BIT(BDADDR_BREDR))
1840 #define DISCOV_TYPE_LE                  (BIT(BDADDR_LE_PUBLIC) | \
1841                                          BIT(BDADDR_LE_RANDOM))
1842 #define DISCOV_TYPE_INTERLEAVED         (BIT(BDADDR_BREDR) | \
1843                                          BIT(BDADDR_LE_PUBLIC) | \
1844                                          BIT(BDADDR_LE_RANDOM))
1845
1846 /* These LE scan and inquiry parameters were chosen according to LE General
1847  * Discovery Procedure specification.
1848  */
1849 #define DISCOV_LE_SCAN_WIN              0x12
1850 #define DISCOV_LE_SCAN_INT              0x12
1851 #define DISCOV_LE_TIMEOUT               10240   /* msec */
1852 #define DISCOV_INTERLEAVED_TIMEOUT      5120    /* msec */
1853 #define DISCOV_INTERLEAVED_INQUIRY_LEN  0x04
1854 #define DISCOV_BREDR_INQUIRY_LEN        0x08
1855 #define DISCOV_LE_RESTART_DELAY         msecs_to_jiffies(200)   /* msec */
1856 #define DISCOV_LE_FAST_ADV_INT_MIN      0x00A0  /* 100 msec */
1857 #define DISCOV_LE_FAST_ADV_INT_MAX      0x00F0  /* 150 msec */
1858
1859 void mgmt_fill_version_info(void *ver);
1860 int mgmt_new_settings(struct hci_dev *hdev);
1861 void mgmt_index_added(struct hci_dev *hdev);
1862 void mgmt_index_removed(struct hci_dev *hdev);
1863 void mgmt_set_powered_failed(struct hci_dev *hdev, int err);
1864 void mgmt_power_on(struct hci_dev *hdev, int err);
1865 void __mgmt_power_off(struct hci_dev *hdev);
1866 void mgmt_new_link_key(struct hci_dev *hdev, struct link_key *key,
1867                        bool persistent);
1868 void mgmt_device_connected(struct hci_dev *hdev, struct hci_conn *conn,
1869                            u8 *name, u8 name_len);
1870 void mgmt_device_disconnected(struct hci_dev *hdev, bdaddr_t *bdaddr,
1871                               u8 link_type, u8 addr_type, u8 reason,
1872                               bool mgmt_connected);
1873 void mgmt_disconnect_failed(struct hci_dev *hdev, bdaddr_t *bdaddr,
1874                             u8 link_type, u8 addr_type, u8 status);
1875 void mgmt_connect_failed(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
1876                          u8 addr_type, u8 status);
1877 void mgmt_pin_code_request(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 secure);
1878 void mgmt_pin_code_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
1879                                   u8 status);
1880 void mgmt_pin_code_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
1881                                       u8 status);
1882 int mgmt_user_confirm_request(struct hci_dev *hdev, bdaddr_t *bdaddr,
1883                               u8 link_type, u8 addr_type, u32 value,
1884                               u8 confirm_hint);
1885 int mgmt_user_confirm_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
1886                                      u8 link_type, u8 addr_type, u8 status);
1887 int mgmt_user_confirm_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
1888                                          u8 link_type, u8 addr_type, u8 status);
1889 int mgmt_user_passkey_request(struct hci_dev *hdev, bdaddr_t *bdaddr,
1890                               u8 link_type, u8 addr_type);
1891 int mgmt_user_passkey_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
1892                                      u8 link_type, u8 addr_type, u8 status);
1893 int mgmt_user_passkey_neg_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
1894                                          u8 link_type, u8 addr_type, u8 status);
1895 int mgmt_user_passkey_notify(struct hci_dev *hdev, bdaddr_t *bdaddr,
1896                              u8 link_type, u8 addr_type, u32 passkey,
1897                              u8 entered);
1898 void mgmt_auth_failed(struct hci_conn *conn, u8 status);
1899 void mgmt_auth_enable_complete(struct hci_dev *hdev, u8 status);
1900 void mgmt_ssp_enable_complete(struct hci_dev *hdev, u8 enable, u8 status);
1901 void mgmt_set_class_of_dev_complete(struct hci_dev *hdev, u8 *dev_class,
1902                                     u8 status);
1903 void mgmt_set_local_name_complete(struct hci_dev *hdev, u8 *name, u8 status);
1904 void mgmt_start_discovery_complete(struct hci_dev *hdev, u8 status);
1905 void mgmt_stop_discovery_complete(struct hci_dev *hdev, u8 status);
1906 void mgmt_device_found(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
1907                        u8 addr_type, u8 *dev_class, s8 rssi, u32 flags,
1908                        u8 *eir, u16 eir_len, u8 *scan_rsp, u8 scan_rsp_len);
1909 void mgmt_remote_name(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 link_type,
1910                       u8 addr_type, s8 rssi, u8 *name, u8 name_len);
1911 void mgmt_discovering(struct hci_dev *hdev, u8 discovering);
1912 void mgmt_suspending(struct hci_dev *hdev, u8 state);
1913 void mgmt_resuming(struct hci_dev *hdev, u8 reason, bdaddr_t *bdaddr,
1914                    u8 addr_type);
1915 bool mgmt_powering_down(struct hci_dev *hdev);
1916 void mgmt_new_ltk(struct hci_dev *hdev, struct smp_ltk *key, bool persistent);
1917 void mgmt_new_irk(struct hci_dev *hdev, struct smp_irk *irk, bool persistent);
1918 void mgmt_new_csrk(struct hci_dev *hdev, struct smp_csrk *csrk,
1919                    bool persistent);
1920 void mgmt_new_conn_param(struct hci_dev *hdev, bdaddr_t *bdaddr,
1921                          u8 bdaddr_type, u8 store_hint, u16 min_interval,
1922                          u16 max_interval, u16 latency, u16 timeout);
1923 void mgmt_smp_complete(struct hci_conn *conn, bool complete);
1924 bool mgmt_get_connectable(struct hci_dev *hdev);
1925 void mgmt_set_connectable_complete(struct hci_dev *hdev, u8 status);
1926 void mgmt_set_discoverable_complete(struct hci_dev *hdev, u8 status);
1927 u8 mgmt_get_adv_discov_flags(struct hci_dev *hdev);
1928 void mgmt_advertising_added(struct sock *sk, struct hci_dev *hdev,
1929                             u8 instance);
1930 void mgmt_advertising_removed(struct sock *sk, struct hci_dev *hdev,
1931                               u8 instance);
1932 void mgmt_adv_monitor_removed(struct hci_dev *hdev, u16 handle);
1933 int mgmt_phy_configuration_changed(struct hci_dev *hdev, struct sock *skip);
1934 int mgmt_add_adv_patterns_monitor_complete(struct hci_dev *hdev, u8 status);
1935 int mgmt_remove_adv_monitor_complete(struct hci_dev *hdev, u8 status);
1936
1937 #ifdef TIZEN_BT
1938 void mgmt_rssi_enable_success(struct sock *sk, struct hci_dev *hdev,
1939                 void *data, struct hci_cc_rsp_enable_rssi *rp, int success);
1940 void mgmt_rssi_disable_success(struct sock *sk, struct hci_dev *hdev,
1941                 void *data, struct hci_cc_rsp_enable_rssi *rp, int success);
1942 int mgmt_set_rssi_threshold(struct sock *sk, struct hci_dev *hdev,
1943                 void *data, u16 len);
1944 void mgmt_rssi_alert_evt(struct hci_dev *hdev, struct sk_buff *skb);
1945 void mgmt_raw_rssi_response(struct hci_dev *hdev,
1946                 struct hci_cc_rp_get_raw_rssi *rp, int success);
1947 void mgmt_enable_rssi_cc(struct hci_dev *hdev, void *response, u8 status);
1948 #endif
1949
1950 u8 hci_le_conn_update(struct hci_conn *conn, u16 min, u16 max, u16 latency,
1951                       u16 to_multiplier);
1952 void hci_le_start_enc(struct hci_conn *conn, __le16 ediv, __le64 rand,
1953                       __u8 ltk[16], __u8 key_size);
1954
1955 void hci_copy_identity_address(struct hci_dev *hdev, bdaddr_t *bdaddr,
1956                                u8 *bdaddr_type);
1957
1958 #define SCO_AIRMODE_MASK       0x0003
1959 #define SCO_AIRMODE_CVSD       0x0000
1960 #define SCO_AIRMODE_TRANSP     0x0003
1961
1962 #endif /* __HCI_CORE_H */