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