linux/include/net/bluetooth/bluetooth.h
<<
>>
Prefs
   1/*
   2   BlueZ - Bluetooth protocol stack for Linux
   3   Copyright (C) 2000-2001 Qualcomm Incorporated
   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 __BLUETOOTH_H
  26#define __BLUETOOTH_H
  27
  28#include <linux/poll.h>
  29#include <net/sock.h>
  30#include <linux/seq_file.h>
  31
  32#define BT_SUBSYS_VERSION       2
  33#define BT_SUBSYS_REVISION      22
  34
  35#ifndef AF_BLUETOOTH
  36#define AF_BLUETOOTH    31
  37#define PF_BLUETOOTH    AF_BLUETOOTH
  38#endif
  39
  40/* Bluetooth versions */
  41#define BLUETOOTH_VER_1_1       1
  42#define BLUETOOTH_VER_1_2       2
  43#define BLUETOOTH_VER_2_0       3
  44
  45/* Reserv for core and drivers use */
  46#define BT_SKB_RESERVE  8
  47
  48#define BTPROTO_L2CAP   0
  49#define BTPROTO_HCI     1
  50#define BTPROTO_SCO     2
  51#define BTPROTO_RFCOMM  3
  52#define BTPROTO_BNEP    4
  53#define BTPROTO_CMTP    5
  54#define BTPROTO_HIDP    6
  55#define BTPROTO_AVDTP   7
  56
  57#define SOL_HCI         0
  58#define SOL_L2CAP       6
  59#define SOL_SCO         17
  60#define SOL_RFCOMM      18
  61
  62#define BT_SECURITY     4
  63struct bt_security {
  64        __u8 level;
  65        __u8 key_size;
  66};
  67#define BT_SECURITY_SDP         0
  68#define BT_SECURITY_LOW         1
  69#define BT_SECURITY_MEDIUM      2
  70#define BT_SECURITY_HIGH        3
  71#define BT_SECURITY_FIPS        4
  72
  73#define BT_DEFER_SETUP  7
  74
  75#define BT_FLUSHABLE    8
  76
  77#define BT_FLUSHABLE_OFF        0
  78#define BT_FLUSHABLE_ON         1
  79
  80#define BT_POWER        9
  81struct bt_power {
  82        __u8 force_active;
  83};
  84#define BT_POWER_FORCE_ACTIVE_OFF 0
  85#define BT_POWER_FORCE_ACTIVE_ON  1
  86
  87#define BT_CHANNEL_POLICY       10
  88
  89/* BR/EDR only (default policy)
  90 *   AMP controllers cannot be used.
  91 *   Channel move requests from the remote device are denied.
  92 *   If the L2CAP channel is currently using AMP, move the channel to BR/EDR.
  93 */
  94#define BT_CHANNEL_POLICY_BREDR_ONLY            0
  95
  96/* BR/EDR Preferred
  97 *   Allow use of AMP controllers.
  98 *   If the L2CAP channel is currently on AMP, move it to BR/EDR.
  99 *   Channel move requests from the remote device are allowed.
 100 */
 101#define BT_CHANNEL_POLICY_BREDR_PREFERRED       1
 102
 103/* AMP Preferred
 104 *   Allow use of AMP controllers
 105 *   If the L2CAP channel is currently on BR/EDR and AMP controller
 106 *     resources are available, initiate a channel move to AMP.
 107 *   Channel move requests from the remote device are allowed.
 108 *   If the L2CAP socket has not been connected yet, try to create
 109 *     and configure the channel directly on an AMP controller rather
 110 *     than BR/EDR.
 111 */
 112#define BT_CHANNEL_POLICY_AMP_PREFERRED         2
 113
 114#define BT_VOICE                11
 115struct bt_voice {
 116        __u16 setting;
 117};
 118
 119#define BT_VOICE_TRANSPARENT                    0x0003
 120#define BT_VOICE_CVSD_16BIT                     0x0060
 121
 122#define BT_SNDMTU               12
 123#define BT_RCVMTU               13
 124
 125__printf(1, 2)
 126void bt_info(const char *fmt, ...);
 127__printf(1, 2)
 128void bt_warn(const char *fmt, ...);
 129__printf(1, 2)
 130void bt_err(const char *fmt, ...);
 131__printf(1, 2)
 132void bt_warn_ratelimited(const char *fmt, ...);
 133__printf(1, 2)
 134void bt_err_ratelimited(const char *fmt, ...);
 135
 136#define BT_INFO(fmt, ...)       bt_info(fmt "\n", ##__VA_ARGS__)
 137#define BT_WARN(fmt, ...)       bt_warn(fmt "\n", ##__VA_ARGS__)
 138#define BT_ERR(fmt, ...)        bt_err(fmt "\n", ##__VA_ARGS__)
 139#define BT_DBG(fmt, ...)        pr_debug(fmt "\n", ##__VA_ARGS__)
 140
 141#define bt_dev_info(hdev, fmt, ...)                             \
 142        BT_INFO("%s: " fmt, (hdev)->name, ##__VA_ARGS__)
 143#define bt_dev_warn(hdev, fmt, ...)                             \
 144        BT_WARN("%s: " fmt, (hdev)->name, ##__VA_ARGS__)
 145#define bt_dev_err(hdev, fmt, ...)                              \
 146        BT_ERR("%s: " fmt, (hdev)->name, ##__VA_ARGS__)
 147#define bt_dev_dbg(hdev, fmt, ...)                              \
 148        BT_DBG("%s: " fmt, (hdev)->name, ##__VA_ARGS__)
 149
 150#define bt_dev_warn_ratelimited(hdev, fmt, ...)                 \
 151        bt_warn_ratelimited("%s: " fmt, (hdev)->name, ##__VA_ARGS__)
 152#define bt_dev_err_ratelimited(hdev, fmt, ...)                  \
 153        bt_err_ratelimited("%s: " fmt, (hdev)->name, ##__VA_ARGS__)
 154
 155/* Connection and socket states */
 156enum {
 157        BT_CONNECTED = 1, /* Equal to TCP_ESTABLISHED to make net code happy */
 158        BT_OPEN,
 159        BT_BOUND,
 160        BT_LISTEN,
 161        BT_CONNECT,
 162        BT_CONNECT2,
 163        BT_CONFIG,
 164        BT_DISCONN,
 165        BT_CLOSED
 166};
 167
 168/* If unused will be removed by compiler */
 169static inline const char *state_to_string(int state)
 170{
 171        switch (state) {
 172        case BT_CONNECTED:
 173                return "BT_CONNECTED";
 174        case BT_OPEN:
 175                return "BT_OPEN";
 176        case BT_BOUND:
 177                return "BT_BOUND";
 178        case BT_LISTEN:
 179                return "BT_LISTEN";
 180        case BT_CONNECT:
 181                return "BT_CONNECT";
 182        case BT_CONNECT2:
 183                return "BT_CONNECT2";
 184        case BT_CONFIG:
 185                return "BT_CONFIG";
 186        case BT_DISCONN:
 187                return "BT_DISCONN";
 188        case BT_CLOSED:
 189                return "BT_CLOSED";
 190        }
 191
 192        return "invalid state";
 193}
 194
 195/* BD Address */
 196typedef struct {
 197        __u8 b[6];
 198} __packed bdaddr_t;
 199
 200/* BD Address type */
 201#define BDADDR_BREDR            0x00
 202#define BDADDR_LE_PUBLIC        0x01
 203#define BDADDR_LE_RANDOM        0x02
 204
 205static inline bool bdaddr_type_is_valid(u8 type)
 206{
 207        switch (type) {
 208        case BDADDR_BREDR:
 209        case BDADDR_LE_PUBLIC:
 210        case BDADDR_LE_RANDOM:
 211                return true;
 212        }
 213
 214        return false;
 215}
 216
 217static inline bool bdaddr_type_is_le(u8 type)
 218{
 219        switch (type) {
 220        case BDADDR_LE_PUBLIC:
 221        case BDADDR_LE_RANDOM:
 222                return true;
 223        }
 224
 225        return false;
 226}
 227
 228#define BDADDR_ANY  (&(bdaddr_t) {{0, 0, 0, 0, 0, 0}})
 229#define BDADDR_NONE (&(bdaddr_t) {{0xff, 0xff, 0xff, 0xff, 0xff, 0xff}})
 230
 231/* Copy, swap, convert BD Address */
 232static inline int bacmp(const bdaddr_t *ba1, const bdaddr_t *ba2)
 233{
 234        return memcmp(ba1, ba2, sizeof(bdaddr_t));
 235}
 236static inline void bacpy(bdaddr_t *dst, const bdaddr_t *src)
 237{
 238        memcpy(dst, src, sizeof(bdaddr_t));
 239}
 240
 241void baswap(bdaddr_t *dst, const bdaddr_t *src);
 242
 243/* Common socket structures and functions */
 244
 245#define bt_sk(__sk) ((struct bt_sock *) __sk)
 246
 247struct bt_sock {
 248        struct sock sk;
 249        struct list_head accept_q;
 250        struct sock *parent;
 251        unsigned long flags;
 252        void (*skb_msg_name)(struct sk_buff *, void *, int *);
 253};
 254
 255enum {
 256        BT_SK_DEFER_SETUP,
 257        BT_SK_SUSPEND,
 258};
 259
 260struct bt_sock_list {
 261        struct hlist_head head;
 262        rwlock_t          lock;
 263#ifdef CONFIG_PROC_FS
 264        int (* custom_seq_show)(struct seq_file *, void *);
 265#endif
 266};
 267
 268int  bt_sock_register(int proto, const struct net_proto_family *ops);
 269void bt_sock_unregister(int proto);
 270void bt_sock_link(struct bt_sock_list *l, struct sock *s);
 271void bt_sock_unlink(struct bt_sock_list *l, struct sock *s);
 272int  bt_sock_recvmsg(struct socket *sock, struct msghdr *msg, size_t len,
 273                     int flags);
 274int  bt_sock_stream_recvmsg(struct socket *sock, struct msghdr *msg,
 275                            size_t len, int flags);
 276__poll_t bt_sock_poll(struct file *file, struct socket *sock, poll_table *wait);
 277int  bt_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg);
 278int  bt_sock_wait_state(struct sock *sk, int state, unsigned long timeo);
 279int  bt_sock_wait_ready(struct sock *sk, unsigned long flags);
 280
 281void bt_accept_enqueue(struct sock *parent, struct sock *sk, bool bh);
 282void bt_accept_unlink(struct sock *sk);
 283struct sock *bt_accept_dequeue(struct sock *parent, struct socket *newsock);
 284
 285/* Skb helpers */
 286struct l2cap_ctrl {
 287        u8      sframe:1,
 288                poll:1,
 289                final:1,
 290                fcs:1,
 291                sar:2,
 292                super:2;
 293
 294        u16     reqseq;
 295        u16     txseq;
 296        u8      retries;
 297        __le16  psm;
 298        bdaddr_t bdaddr;
 299        struct l2cap_chan *chan;
 300};
 301
 302struct hci_dev;
 303
 304typedef void (*hci_req_complete_t)(struct hci_dev *hdev, u8 status, u16 opcode);
 305typedef void (*hci_req_complete_skb_t)(struct hci_dev *hdev, u8 status,
 306                                       u16 opcode, struct sk_buff *skb);
 307
 308#define HCI_REQ_START   BIT(0)
 309#define HCI_REQ_SKB     BIT(1)
 310
 311struct hci_ctrl {
 312        u16 opcode;
 313        u8 req_flags;
 314        u8 req_event;
 315        union {
 316                hci_req_complete_t req_complete;
 317                hci_req_complete_skb_t req_complete_skb;
 318        };
 319};
 320
 321struct bt_skb_cb {
 322        u8 pkt_type;
 323        u8 force_active;
 324        u16 expect;
 325        u8 incoming:1;
 326        union {
 327                struct l2cap_ctrl l2cap;
 328                struct hci_ctrl hci;
 329        };
 330};
 331#define bt_cb(skb) ((struct bt_skb_cb *)((skb)->cb))
 332
 333#define hci_skb_pkt_type(skb) bt_cb((skb))->pkt_type
 334#define hci_skb_expect(skb) bt_cb((skb))->expect
 335#define hci_skb_opcode(skb) bt_cb((skb))->hci.opcode
 336
 337static inline struct sk_buff *bt_skb_alloc(unsigned int len, gfp_t how)
 338{
 339        struct sk_buff *skb;
 340
 341        skb = alloc_skb(len + BT_SKB_RESERVE, how);
 342        if (skb)
 343                skb_reserve(skb, BT_SKB_RESERVE);
 344        return skb;
 345}
 346
 347static inline struct sk_buff *bt_skb_send_alloc(struct sock *sk,
 348                                        unsigned long len, int nb, int *err)
 349{
 350        struct sk_buff *skb;
 351
 352        skb = sock_alloc_send_skb(sk, len + BT_SKB_RESERVE, nb, err);
 353        if (skb)
 354                skb_reserve(skb, BT_SKB_RESERVE);
 355
 356        if (!skb && *err)
 357                return NULL;
 358
 359        *err = sock_error(sk);
 360        if (*err)
 361                goto out;
 362
 363        if (sk->sk_shutdown) {
 364                *err = -ECONNRESET;
 365                goto out;
 366        }
 367
 368        return skb;
 369
 370out:
 371        kfree_skb(skb);
 372        return NULL;
 373}
 374
 375int bt_to_errno(u16 code);
 376
 377void hci_sock_set_flag(struct sock *sk, int nr);
 378void hci_sock_clear_flag(struct sock *sk, int nr);
 379int hci_sock_test_flag(struct sock *sk, int nr);
 380unsigned short hci_sock_get_channel(struct sock *sk);
 381u32 hci_sock_get_cookie(struct sock *sk);
 382
 383int hci_sock_init(void);
 384void hci_sock_cleanup(void);
 385
 386int bt_sysfs_init(void);
 387void bt_sysfs_cleanup(void);
 388
 389int bt_procfs_init(struct net *net, const char *name,
 390                   struct bt_sock_list *sk_list,
 391                   int (*seq_show)(struct seq_file *, void *));
 392void bt_procfs_cleanup(struct net *net, const char *name);
 393
 394extern struct dentry *bt_debugfs;
 395
 396int l2cap_init(void);
 397void l2cap_exit(void);
 398
 399#if IS_ENABLED(CONFIG_BT_BREDR)
 400int sco_init(void);
 401void sco_exit(void);
 402#else
 403static inline int sco_init(void)
 404{
 405        return 0;
 406}
 407
 408static inline void sco_exit(void)
 409{
 410}
 411#endif
 412
 413int mgmt_init(void);
 414void mgmt_exit(void);
 415
 416void bt_sock_reclassify_lock(struct sock *sk, int proto);
 417
 418#endif /* __BLUETOOTH_H */
 419