hci_uart.h revision b3190df628617c7a4f188a9465aeabe1f5761933
1/*
2 *
3 *  Bluetooth HCI UART driver
4 *
5 *  Copyright (C) 2000-2001  Qualcomm Incorporated
6 *  Copyright (C) 2002-2003  Maxim Krasnyansky <maxk@qualcomm.com>
7 *  Copyright (C) 2004-2005  Marcel Holtmann <marcel@holtmann.org>
8 *
9 *
10 *  This program is free software; you can redistribute it and/or modify
11 *  it under the terms of the GNU General Public License as published by
12 *  the Free Software Foundation; either version 2 of the License, or
13 *  (at your option) any later version.
14 *
15 *  This program is distributed in the hope that it will be useful,
16 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
17 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18 *  GNU General Public License for more details.
19 *
20 *  You should have received a copy of the GNU General Public License
21 *  along with this program; if not, write to the Free Software
22 *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
23 *
24 */
25
26#ifndef N_HCI
27#define N_HCI	15
28#endif
29
30/* Ioctls */
31#define HCIUARTSETPROTO		_IOW('U', 200, int)
32#define HCIUARTGETPROTO		_IOR('U', 201, int)
33#define HCIUARTGETDEVICE	_IOR('U', 202, int)
34#define HCIUARTSETFLAGS		_IOW('U', 203, int)
35#define HCIUARTGETFLAGS		_IOR('U', 204, int)
36
37/* UART protocols */
38#define HCI_UART_MAX_PROTO	6
39
40#define HCI_UART_H4	0
41#define HCI_UART_BCSP	1
42#define HCI_UART_3WIRE	2
43#define HCI_UART_H4DS	3
44#define HCI_UART_LL	4
45#define HCI_UART_ATH3K	5
46
47#define HCI_UART_RAW_DEVICE	0
48
49struct hci_uart;
50
51struct hci_uart_proto {
52	unsigned int id;
53	int (*open)(struct hci_uart *hu);
54	int (*close)(struct hci_uart *hu);
55	int (*flush)(struct hci_uart *hu);
56	int (*recv)(struct hci_uart *hu, void *data, int len);
57	int (*enqueue)(struct hci_uart *hu, struct sk_buff *skb);
58	struct sk_buff *(*dequeue)(struct hci_uart *hu);
59};
60
61struct hci_uart {
62	struct tty_struct	*tty;
63	struct hci_dev		*hdev;
64	unsigned long		flags;
65	unsigned long		hdev_flags;
66
67	struct hci_uart_proto	*proto;
68	void			*priv;
69
70	struct sk_buff		*tx_skb;
71	unsigned long		tx_state;
72	spinlock_t		rx_lock;
73};
74
75/* HCI_UART proto flag bits */
76#define HCI_UART_PROTO_SET	0
77
78/* TX states  */
79#define HCI_UART_SENDING	1
80#define HCI_UART_TX_WAKEUP	2
81
82int hci_uart_register_proto(struct hci_uart_proto *p);
83int hci_uart_unregister_proto(struct hci_uart_proto *p);
84int hci_uart_tx_wakeup(struct hci_uart *hu);
85
86#ifdef CONFIG_BT_HCIUART_H4
87int h4_init(void);
88int h4_deinit(void);
89#endif
90
91#ifdef CONFIG_BT_HCIUART_BCSP
92int bcsp_init(void);
93int bcsp_deinit(void);
94#endif
95
96#ifdef CONFIG_BT_HCIUART_LL
97int ll_init(void);
98int ll_deinit(void);
99#endif
100
101#ifdef CONFIG_BT_HCIUART_ATH3K
102int ath_init(void);
103int ath_deinit(void);
104#endif
105