Path: blob/master/include/net/bluetooth/bluetooth.h
10818 views
/*1BlueZ - Bluetooth protocol stack for Linux2Copyright (C) 2000-2001 Qualcomm Incorporated34Written 2000,2001 by Maxim Krasnyansky <[email protected]>56This program is free software; you can redistribute it and/or modify7it under the terms of the GNU General Public License version 2 as8published by the Free Software Foundation;910THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS11OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,12FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.13IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY14CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES15WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN16ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF17OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.1819ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,20COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS21SOFTWARE IS DISCLAIMED.22*/2324#ifndef __BLUETOOTH_H25#define __BLUETOOTH_H2627#include <asm/types.h>28#include <asm/byteorder.h>29#include <linux/list.h>30#include <linux/poll.h>31#include <net/sock.h>3233#ifndef AF_BLUETOOTH34#define AF_BLUETOOTH 3135#define PF_BLUETOOTH AF_BLUETOOTH36#endif3738/* Reserv for core and drivers use */39#define BT_SKB_RESERVE 84041#define BTPROTO_L2CAP 042#define BTPROTO_HCI 143#define BTPROTO_SCO 244#define BTPROTO_RFCOMM 345#define BTPROTO_BNEP 446#define BTPROTO_CMTP 547#define BTPROTO_HIDP 648#define BTPROTO_AVDTP 74950#define SOL_HCI 051#define SOL_L2CAP 652#define SOL_SCO 1753#define SOL_RFCOMM 185455#define BT_SECURITY 456struct bt_security {57__u8 level;58};59#define BT_SECURITY_SDP 060#define BT_SECURITY_LOW 161#define BT_SECURITY_MEDIUM 262#define BT_SECURITY_HIGH 36364#define BT_DEFER_SETUP 76566#define BT_FLUSHABLE 86768#define BT_FLUSHABLE_OFF 069#define BT_FLUSHABLE_ON 17071#define BT_INFO(fmt, arg...) printk(KERN_INFO "Bluetooth: " fmt "\n" , ## arg)72#define BT_ERR(fmt, arg...) printk(KERN_ERR "%s: " fmt "\n" , __func__ , ## arg)73#define BT_DBG(fmt, arg...) pr_debug("%s: " fmt "\n" , __func__ , ## arg)7475/* Connection and socket states */76enum {77BT_CONNECTED = 1, /* Equal to TCP_ESTABLISHED to make net code happy */78BT_OPEN,79BT_BOUND,80BT_LISTEN,81BT_CONNECT,82BT_CONNECT2,83BT_CONFIG,84BT_DISCONN,85BT_CLOSED86};8788/* BD Address */89typedef struct {90__u8 b[6];91} __packed bdaddr_t;9293#define BDADDR_ANY (&(bdaddr_t) {{0, 0, 0, 0, 0, 0}})94#define BDADDR_LOCAL (&(bdaddr_t) {{0, 0, 0, 0xff, 0xff, 0xff}})9596/* Copy, swap, convert BD Address */97static inline int bacmp(bdaddr_t *ba1, bdaddr_t *ba2)98{99return memcmp(ba1, ba2, sizeof(bdaddr_t));100}101static inline void bacpy(bdaddr_t *dst, bdaddr_t *src)102{103memcpy(dst, src, sizeof(bdaddr_t));104}105106void baswap(bdaddr_t *dst, bdaddr_t *src);107char *batostr(bdaddr_t *ba);108bdaddr_t *strtoba(char *str);109110/* Common socket structures and functions */111112#define bt_sk(__sk) ((struct bt_sock *) __sk)113114struct bt_sock {115struct sock sk;116bdaddr_t src;117bdaddr_t dst;118struct list_head accept_q;119struct sock *parent;120u32 defer_setup;121};122123struct bt_sock_list {124struct hlist_head head;125rwlock_t lock;126};127128int bt_sock_register(int proto, const struct net_proto_family *ops);129int bt_sock_unregister(int proto);130void bt_sock_link(struct bt_sock_list *l, struct sock *s);131void bt_sock_unlink(struct bt_sock_list *l, struct sock *s);132int bt_sock_recvmsg(struct kiocb *iocb, struct socket *sock, struct msghdr *msg, size_t len, int flags);133int bt_sock_stream_recvmsg(struct kiocb *iocb, struct socket *sock,134struct msghdr *msg, size_t len, int flags);135uint bt_sock_poll(struct file * file, struct socket *sock, poll_table *wait);136int bt_sock_ioctl(struct socket *sock, unsigned int cmd, unsigned long arg);137int bt_sock_wait_state(struct sock *sk, int state, unsigned long timeo);138139void bt_accept_enqueue(struct sock *parent, struct sock *sk);140void bt_accept_unlink(struct sock *sk);141struct sock *bt_accept_dequeue(struct sock *parent, struct socket *newsock);142143/* Skb helpers */144struct bt_skb_cb {145__u8 pkt_type;146__u8 incoming;147__u16 expect;148__u8 tx_seq;149__u8 retries;150__u8 sar;151unsigned short channel;152};153#define bt_cb(skb) ((struct bt_skb_cb *)((skb)->cb))154155static inline struct sk_buff *bt_skb_alloc(unsigned int len, gfp_t how)156{157struct sk_buff *skb;158159if ((skb = alloc_skb(len + BT_SKB_RESERVE, how))) {160skb_reserve(skb, BT_SKB_RESERVE);161bt_cb(skb)->incoming = 0;162}163return skb;164}165166static inline struct sk_buff *bt_skb_send_alloc(struct sock *sk, unsigned long len,167int nb, int *err)168{169struct sk_buff *skb;170171release_sock(sk);172if ((skb = sock_alloc_send_skb(sk, len + BT_SKB_RESERVE, nb, err))) {173skb_reserve(skb, BT_SKB_RESERVE);174bt_cb(skb)->incoming = 0;175}176lock_sock(sk);177178if (!skb && *err)179return NULL;180181*err = sock_error(sk);182if (*err)183goto out;184185if (sk->sk_shutdown) {186*err = -ECONNRESET;187goto out;188}189190return skb;191192out:193kfree_skb(skb);194return NULL;195}196197int bt_err(__u16 code);198199extern int hci_sock_init(void);200extern void hci_sock_cleanup(void);201202extern int bt_sysfs_init(void);203extern void bt_sysfs_cleanup(void);204205extern struct dentry *bt_debugfs;206207#ifdef CONFIG_BT_L2CAP208int l2cap_init(void);209void l2cap_exit(void);210#else211static inline int l2cap_init(void)212{213return 0;214}215216static inline void l2cap_exit(void)217{218}219#endif220221#ifdef CONFIG_BT_SCO222int sco_init(void);223void sco_exit(void);224#else225static inline int sco_init(void)226{227return 0;228}229230static inline void sco_exit(void)231{232}233#endif234235#endif /* __BLUETOOTH_H */236237238