linux/drivers/bluetooth/hci_uart.h
<<
>>
Prefs
   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      12
  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#define HCI_UART_INTEL  6
  47#define HCI_UART_BCM    7
  48#define HCI_UART_QCA    8
  49#define HCI_UART_AG6XX  9
  50#define HCI_UART_NOKIA  10
  51#define HCI_UART_MRVL   11
  52
  53#define HCI_UART_RAW_DEVICE     0
  54#define HCI_UART_RESET_ON_INIT  1
  55#define HCI_UART_CREATE_AMP     2
  56#define HCI_UART_INIT_PENDING   3
  57#define HCI_UART_EXT_CONFIG     4
  58#define HCI_UART_VND_DETECT     5
  59
  60struct hci_uart;
  61
  62struct hci_uart_proto {
  63        unsigned int id;
  64        const char *name;
  65        unsigned int manufacturer;
  66        unsigned int init_speed;
  67        unsigned int oper_speed;
  68        int (*open)(struct hci_uart *hu);
  69        int (*close)(struct hci_uart *hu);
  70        int (*flush)(struct hci_uart *hu);
  71        int (*setup)(struct hci_uart *hu);
  72        int (*set_baudrate)(struct hci_uart *hu, unsigned int speed);
  73        int (*recv)(struct hci_uart *hu, const void *data, int len);
  74        int (*enqueue)(struct hci_uart *hu, struct sk_buff *skb);
  75        struct sk_buff *(*dequeue)(struct hci_uart *hu);
  76};
  77
  78struct hci_uart {
  79        struct tty_struct       *tty;
  80        struct hci_dev          *hdev;
  81        unsigned long           flags;
  82        unsigned long           hdev_flags;
  83
  84        struct work_struct      init_ready;
  85        struct work_struct      write_work;
  86
  87        const struct hci_uart_proto *proto;
  88        void                    *priv;
  89
  90        struct sk_buff          *tx_skb;
  91        unsigned long           tx_state;
  92
  93        unsigned int init_speed;
  94        unsigned int oper_speed;
  95};
  96
  97/* HCI_UART proto flag bits */
  98#define HCI_UART_PROTO_SET      0
  99#define HCI_UART_REGISTERED     1
 100#define HCI_UART_PROTO_READY    2
 101
 102/* TX states  */
 103#define HCI_UART_SENDING        1
 104#define HCI_UART_TX_WAKEUP      2
 105
 106int hci_uart_register_proto(const struct hci_uart_proto *p);
 107int hci_uart_unregister_proto(const struct hci_uart_proto *p);
 108int hci_uart_tx_wakeup(struct hci_uart *hu);
 109int hci_uart_init_ready(struct hci_uart *hu);
 110void hci_uart_init_tty(struct hci_uart *hu);
 111void hci_uart_set_baudrate(struct hci_uart *hu, unsigned int speed);
 112void hci_uart_set_flow_control(struct hci_uart *hu, bool enable);
 113void hci_uart_set_speeds(struct hci_uart *hu, unsigned int init_speed,
 114                         unsigned int oper_speed);
 115
 116#ifdef CONFIG_BT_HCIUART_H4
 117int h4_init(void);
 118int h4_deinit(void);
 119
 120struct h4_recv_pkt {
 121        u8  type;       /* Packet type */
 122        u8  hlen;       /* Header length */
 123        u8  loff;       /* Data length offset in header */
 124        u8  lsize;      /* Data length field size */
 125        u16 maxlen;     /* Max overall packet length */
 126        int (*recv)(struct hci_dev *hdev, struct sk_buff *skb);
 127};
 128
 129#define H4_RECV_ACL \
 130        .type = HCI_ACLDATA_PKT, \
 131        .hlen = HCI_ACL_HDR_SIZE, \
 132        .loff = 2, \
 133        .lsize = 2, \
 134        .maxlen = HCI_MAX_FRAME_SIZE \
 135
 136#define H4_RECV_SCO \
 137        .type = HCI_SCODATA_PKT, \
 138        .hlen = HCI_SCO_HDR_SIZE, \
 139        .loff = 2, \
 140        .lsize = 1, \
 141        .maxlen = HCI_MAX_SCO_SIZE
 142
 143#define H4_RECV_EVENT \
 144        .type = HCI_EVENT_PKT, \
 145        .hlen = HCI_EVENT_HDR_SIZE, \
 146        .loff = 1, \
 147        .lsize = 1, \
 148        .maxlen = HCI_MAX_EVENT_SIZE
 149
 150struct sk_buff *h4_recv_buf(struct hci_dev *hdev, struct sk_buff *skb,
 151                            const unsigned char *buffer, int count,
 152                            const struct h4_recv_pkt *pkts, int pkts_count);
 153#endif
 154
 155#ifdef CONFIG_BT_HCIUART_BCSP
 156int bcsp_init(void);
 157int bcsp_deinit(void);
 158#endif
 159
 160#ifdef CONFIG_BT_HCIUART_LL
 161int ll_init(void);
 162int ll_deinit(void);
 163#endif
 164
 165#ifdef CONFIG_BT_HCIUART_ATH3K
 166int ath_init(void);
 167int ath_deinit(void);
 168#endif
 169
 170#ifdef CONFIG_BT_HCIUART_3WIRE
 171int h5_init(void);
 172int h5_deinit(void);
 173#endif
 174
 175#ifdef CONFIG_BT_HCIUART_INTEL
 176int intel_init(void);
 177int intel_deinit(void);
 178#endif
 179
 180#ifdef CONFIG_BT_HCIUART_BCM
 181int bcm_init(void);
 182int bcm_deinit(void);
 183#endif
 184
 185#ifdef CONFIG_BT_HCIUART_QCA
 186int qca_init(void);
 187int qca_deinit(void);
 188#endif
 189
 190#ifdef CONFIG_BT_HCIUART_AG6XX
 191int ag6xx_init(void);
 192int ag6xx_deinit(void);
 193#endif
 194
 195#ifdef CONFIG_BT_HCIUART_MRVL
 196int mrvl_init(void);
 197int mrvl_deinit(void);
 198#endif
 199