--- zzzz-none-000/linux-2.4.17/include/net/bluetooth/bluetooth.h 2001-09-07 16:28:38.000000000 +0000 +++ sangam-fb-401/linux-2.4.17/include/net/bluetooth/bluetooth.h 2005-04-05 07:07:46.000000000 +0000 @@ -23,7 +23,7 @@ */ /* - * $Id: bluetooth.h,v 1.6 2001/08/03 04:19:49 maxk Exp $ + * $Id: bluetooth.h,v 1.9 2002/05/06 21:11:55 maxk Exp $ */ #ifndef __BLUETOOTH_H @@ -31,17 +31,64 @@ #include #include +#include +#include #ifndef AF_BLUETOOTH #define AF_BLUETOOTH 31 #define PF_BLUETOOTH AF_BLUETOOTH #endif +/* Reserv for core and drivers use */ +#define BLUEZ_SKB_RESERVE 8 + +#ifndef MIN +#define MIN(a,b) ((a) < (b) ? (a) : (b)) +#endif + #define BTPROTO_L2CAP 0 #define BTPROTO_HCI 1 +#define BTPROTO_SCO 2 +#define BTPROTO_RFCOMM 3 +#define BTPROTO_BNEP 4 +#define BTPROTO_CMTP 5 +#define BTPROTO_HIDP 6 #define SOL_HCI 0 #define SOL_L2CAP 6 +#define SOL_SCO 17 +#define SOL_RFCOMM 18 + +/* Debugging */ +#ifdef CONFIG_BLUEZ_DEBUG + +#define HCI_CORE_DEBUG 1 +#define HCI_SOCK_DEBUG 1 +#define HCI_UART_DEBUG 1 +#define HCI_USB_DEBUG 1 +//#define HCI_DATA_DUMP 1 + +#define L2CAP_DEBUG 1 +#define SCO_DEBUG 1 +#define AF_BLUETOOTH_DEBUG 1 + +#endif /* CONFIG_BLUEZ_DEBUG */ + +extern void bluez_dump(char *pref, __u8 *buf, int count); + +#if __GNUC__ <= 2 && __GNUC_MINOR__ < 95 +#define __func__ __FUNCTION__ +#endif + +#define BT_INFO(fmt, arg...) printk(KERN_INFO fmt "\n" , ## arg) +#define BT_DBG(fmt, arg...) printk(KERN_INFO "%s: " fmt "\n" , __func__ , ## arg) +#define BT_ERR(fmt, arg...) printk(KERN_ERR "%s: " fmt "\n" , __func__ , ## arg) + +#ifdef HCI_DATA_DUMP +#define BT_DMP(buf, len) bluez_dump(__func__, buf, len) +#else +#define BT_DMP(D...) +#endif /* Connection and socket states */ enum { @@ -50,6 +97,7 @@ BT_BOUND, BT_LISTEN, BT_CONNECT, + BT_CONNECT2, BT_CONFIG, BT_DISCONN, BT_CLOSED @@ -66,7 +114,8 @@ __u8 b[6]; } __attribute__((packed)) bdaddr_t; -#define BDADDR_ANY ((bdaddr_t *)"\000\000\000\000\000") +#define BDADDR_ANY (&(bdaddr_t) {{0, 0, 0, 0, 0, 0}}) +#define BDADDR_LOCAL (&(bdaddr_t) {{0, 0, 0, 0xff, 0xff, 0xff}}) /* Copy, swap, convert BD Address */ static inline int bacmp(bdaddr_t *ba1, bdaddr_t *ba2) @@ -82,6 +131,91 @@ char *batostr(bdaddr_t *ba); bdaddr_t *strtoba(char *str); +/* Common socket structures and functions */ + +#define bluez_pi(sk) ((struct bluez_pinfo *) &sk->protinfo) +#define bluez_sk(pi) ((struct sock *) \ + ((void *)pi - (unsigned long)(&((struct sock *)0)->protinfo))) + +struct bluez_pinfo { + bdaddr_t src; + bdaddr_t dst; + + struct list_head accept_q; + struct sock *parent; +}; + +struct bluez_sock_list { + struct sock *head; + rwlock_t lock; +}; + +int bluez_sock_register(int proto, struct net_proto_family *ops); +int bluez_sock_unregister(int proto); +void bluez_sock_init(struct socket *sock, struct sock *sk); +void bluez_sock_link(struct bluez_sock_list *l, struct sock *s); +void bluez_sock_unlink(struct bluez_sock_list *l, struct sock *s); +int bluez_sock_recvmsg(struct socket *sock, struct msghdr *msg, int len, int flags, struct scm_cookie *scm); +uint bluez_sock_poll(struct file * file, struct socket *sock, poll_table *wait); +int bluez_sock_wait_state(struct sock *sk, int state, unsigned long timeo); + +void bluez_accept_enqueue(struct sock *parent, struct sock *sk); +struct sock * bluez_accept_dequeue(struct sock *parent, struct socket *newsock); + +/* Skb helpers */ +struct bluez_skb_cb { + int incomming; +}; +#define bluez_cb(skb) ((struct bluez_skb_cb *)(skb->cb)) + +static inline struct sk_buff *bluez_skb_alloc(unsigned int len, int how) +{ + struct sk_buff *skb; + + if ((skb = alloc_skb(len + BLUEZ_SKB_RESERVE, how))) { + skb_reserve(skb, BLUEZ_SKB_RESERVE); + bluez_cb(skb)->incomming = 0; + } + return skb; +} + +static inline struct sk_buff *bluez_skb_send_alloc(struct sock *sk, unsigned long len, + int nb, int *err) +{ + struct sk_buff *skb; + + if ((skb = sock_alloc_send_skb(sk, len + BLUEZ_SKB_RESERVE, nb, err))) { + skb_reserve(skb, BLUEZ_SKB_RESERVE); + bluez_cb(skb)->incomming = 0; + } + + return skb; +} + +static inline int skb_frags_no(struct sk_buff *skb) +{ + register struct sk_buff *frag = skb_shinfo(skb)->frag_list; + register int n = 1; + + for (; frag; frag=frag->next, n++); + return n; +} + +int hci_core_init(void); +int hci_core_cleanup(void); +int hci_sock_init(void); +int hci_sock_cleanup(void); + int bterr(__u16 code); +#ifndef MODULE_LICENSE +#define MODULE_LICENSE(x) +#endif + +#ifndef list_for_each_safe +#define list_for_each_safe(pos, n, head) \ + for (pos = (head)->next, n = pos->next; pos != (head); \ + pos = n, n = pos->next) +#endif + #endif /* __BLUETOOTH_H */