patch-2.4.19 linux-2.4.19/include/net/bluetooth/bluetooth.h
Next file: linux-2.4.19/include/net/bluetooth/bluez.h
Previous file: linux-2.4.19/include/math-emu/soft-fp.h
Back to the patch index
Back to the overall index
- Lines: 182
- Date:
Fri Aug 2 17:39:46 2002
- Orig file:
linux-2.4.18/include/net/bluetooth/bluetooth.h
- Orig date:
Fri Sep 7 09:28:38 2001
diff -urN linux-2.4.18/include/net/bluetooth/bluetooth.h linux-2.4.19/include/net/bluetooth/bluetooth.h
@@ -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,62 @@
#include <asm/types.h>
#include <asm/byteorder.h>
+#include <linux/poll.h>
+#include <net/sock.h>
#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 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 +95,7 @@
BT_BOUND,
BT_LISTEN,
BT_CONNECT,
+ BT_CONNECT2,
BT_CONFIG,
BT_DISCONN,
BT_CLOSED
@@ -66,7 +112,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 +129,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_w4_connect(struct sock *sk, int flags);
+
+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 */
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)