2005-04-17 02:20:36 +04:00
/*
2005-10-28 21:20:45 +04:00
*
* Bluetooth HCI UART driver
*
* Copyright ( C ) 2000 - 2001 Qualcomm Incorporated
* Copyright ( C ) 2002 - 2003 Maxim Krasnyansky < maxk @ qualcomm . com >
* Copyright ( C ) 2004 - 2005 Marcel Holtmann < marcel @ holtmann . org >
*
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 2 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 59 Temple Place , Suite 330 , Boston , MA 02111 - 1307 USA
*
2005-04-17 02:20:36 +04:00
*/
2005-10-28 21:20:45 +04:00
# ifndef N_HCI
2005-04-17 02:20:36 +04:00
# define N_HCI 15
# endif
/* Ioctls */
2007-05-09 11:15:35 +04:00
# define HCIUARTSETPROTO _IOW('U', 200, int)
# define HCIUARTGETPROTO _IOR('U', 201, int)
# define HCIUARTGETDEVICE _IOR('U', 202, int)
2010-07-12 18:37:04 +04:00
# define HCIUARTSETFLAGS _IOW('U', 203, int)
# define HCIUARTGETFLAGS _IOR('U', 204, int)
2005-04-17 02:20:36 +04:00
/* UART protocols */
2010-07-19 11:04:07 +04:00
# define HCI_UART_MAX_PROTO 6
2005-04-17 02:20:36 +04:00
# define HCI_UART_H4 0
# define HCI_UART_BCSP 1
# define HCI_UART_3WIRE 2
# define HCI_UART_H4DS 3
2007-10-20 15:42:36 +04:00
# define HCI_UART_LL 4
2010-07-19 11:04:07 +04:00
# define HCI_UART_ATH3K 5
2005-04-17 02:20:36 +04:00
2010-07-12 18:37:04 +04:00
# define HCI_UART_RAW_DEVICE 0
2005-04-17 02:20:36 +04:00
struct hci_uart ;
struct hci_uart_proto {
unsigned int id ;
int ( * open ) ( struct hci_uart * hu ) ;
int ( * close ) ( struct hci_uart * hu ) ;
int ( * flush ) ( struct hci_uart * hu ) ;
int ( * recv ) ( struct hci_uart * hu , void * data , int len ) ;
int ( * enqueue ) ( struct hci_uart * hu , struct sk_buff * skb ) ;
struct sk_buff * ( * dequeue ) ( struct hci_uart * hu ) ;
} ;
struct hci_uart {
2005-10-28 21:20:45 +04:00
struct tty_struct * tty ;
struct hci_dev * hdev ;
unsigned long flags ;
2010-07-12 18:37:04 +04:00
unsigned long hdev_flags ;
2005-04-17 02:20:36 +04:00
2005-10-28 21:20:45 +04:00
struct hci_uart_proto * proto ;
void * priv ;
struct sk_buff * tx_skb ;
unsigned long tx_state ;
spinlock_t rx_lock ;
2005-04-17 02:20:36 +04:00
} ;
2010-07-12 18:37:04 +04:00
/* HCI_UART proto flag bits */
2005-10-28 21:20:45 +04:00
# define HCI_UART_PROTO_SET 0
2005-04-17 02:20:36 +04:00
/* TX states */
2005-10-28 21:20:45 +04:00
# define HCI_UART_SENDING 1
# define HCI_UART_TX_WAKEUP 2
2005-04-17 02:20:36 +04:00
int hci_uart_register_proto ( struct hci_uart_proto * p ) ;
int hci_uart_unregister_proto ( struct hci_uart_proto * p ) ;
int hci_uart_tx_wakeup ( struct hci_uart * hu ) ;
2005-10-28 21:20:45 +04:00
# ifdef CONFIG_BT_HCIUART_H4
int h4_init ( void ) ;
int h4_deinit ( void ) ;
# endif
# ifdef CONFIG_BT_HCIUART_BCSP
int bcsp_init ( void ) ;
int bcsp_deinit ( void ) ;
# endif
2007-10-20 15:42:36 +04:00
# ifdef CONFIG_BT_HCIUART_LL
int ll_init ( void ) ;
int ll_deinit ( void ) ;
# endif
2010-07-19 11:04:07 +04:00
# ifdef CONFIG_BT_HCIUART_ATH3K
int ath_init ( void ) ;
int ath_deinit ( void ) ;
# endif