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