1982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/*
2982edd19a092114c479134cb16e0af54730edf1fPrashant Malani *  Copyright (c) 2013, The Linux Foundation. All rights reserved.
3982edd19a092114c479134cb16e0af54730edf1fPrashant Malani *  Not a Contribution.
4982edd19a092114c479134cb16e0af54730edf1fPrashant Malani *  Copyright (C) 2009-2012 Broadcom Corporation
5982edd19a092114c479134cb16e0af54730edf1fPrashant Malani *
6982edd19a092114c479134cb16e0af54730edf1fPrashant Malani *  Licensed under the Apache License, Version 2.0 (the "License");
7982edd19a092114c479134cb16e0af54730edf1fPrashant Malani *  you may not use this file except in compliance with the License.
8982edd19a092114c479134cb16e0af54730edf1fPrashant Malani *  You may obtain a copy of the License at
9982edd19a092114c479134cb16e0af54730edf1fPrashant Malani *
10982edd19a092114c479134cb16e0af54730edf1fPrashant Malani *  http://www.apache.org/licenses/LICENSE-2.0
11982edd19a092114c479134cb16e0af54730edf1fPrashant Malani *
12982edd19a092114c479134cb16e0af54730edf1fPrashant Malani *  Unless required by applicable law or agreed to in writing, software
13982edd19a092114c479134cb16e0af54730edf1fPrashant Malani *  distributed under the License is distributed on an "AS IS" BASIS,
14982edd19a092114c479134cb16e0af54730edf1fPrashant Malani *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15982edd19a092114c479134cb16e0af54730edf1fPrashant Malani *  See the License for the specific language governing permissions and
16982edd19a092114c479134cb16e0af54730edf1fPrashant Malani *  limitations under the License.
17982edd19a092114c479134cb16e0af54730edf1fPrashant Malani */
18982edd19a092114c479134cb16e0af54730edf1fPrashant Malani
19982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#ifndef HCI_UART_H
20982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define HCI_UART_H
21982edd19a092114c479134cb16e0af54730edf1fPrashant Malani
22982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/* Variables to identify the platform */
23982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/*BT HS UART TTY DEVICE */
24982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define BT_HS_UART_DEVICE "/dev/ttyHS0"
25982edd19a092114c479134cb16e0af54730edf1fPrashant Malani
26982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/**** baud rates ****/
27982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_BAUD_300        0
28982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_BAUD_600        1
29982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_BAUD_1200       2
30982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_BAUD_2400       3
31982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_BAUD_9600       4
32982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_BAUD_19200      5
33982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_BAUD_57600      6
34982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_BAUD_115200     7
35982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_BAUD_230400     8
36982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_BAUD_460800     9
37982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_BAUD_921600     10
38982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_BAUD_1M         11
39982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_BAUD_1_5M       12
40982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_BAUD_2M         13
41982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_BAUD_3M         14
42982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_BAUD_4M         15
43982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_BAUD_AUTO       16
44982edd19a092114c479134cb16e0af54730edf1fPrashant Malani
45982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/**** Data Format ****/
46982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/* Stop Bits */
47982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_STOPBITS_1      1
48982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_STOPBITS_1_5    (1<<1)
49982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_STOPBITS_2      (1<<2)
50982edd19a092114c479134cb16e0af54730edf1fPrashant Malani
51982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/* Parity Bits */
52982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_PARITY_NONE     (1<<3)
53982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_PARITY_EVEN     (1<<4)
54982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_PARITY_ODD      (1<<5)
55982edd19a092114c479134cb16e0af54730edf1fPrashant Malani
56982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/* Data Bits */
57982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_DATABITS_5      (1<<6)
58982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_DATABITS_6      (1<<7)
59982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_DATABITS_7      (1<<8)
60982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_DATABITS_8      (1<<9)
61982edd19a092114c479134cb16e0af54730edf1fPrashant Malani
62982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/* HCI Packet types */
63982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define HCI_COMMAND_PKT     0x01
64982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define HCI_ACLDATA_PKT      0x02
65982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define HCI_SCODATA_PKT     0x03
66982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define HCI_EVENT_PKT           0x04
67982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define HCI_VENDOR_PKT        0xff
68982edd19a092114c479134cb16e0af54730edf1fPrashant Malani
69982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/* HCI Command/Event Opcode */
70982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define HCI_RESET                       0x0C03
71982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define EVT_CMD_COMPLETE       0x0E
72982edd19a092114c479134cb16e0af54730edf1fPrashant Malani
73982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/* Command opcode pack/unpack */
74982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define cmd_opcode_pack(ogf, ocf)   (uint16_t)((ocf & 0x03ff)|(ogf << 10))
75982edd19a092114c479134cb16e0af54730edf1fPrashant Malani
76982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#if (BT_WAKE_VIA_USERIAL_IOCTL==TRUE)
77982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/* These are the ioctl values used for bt_wake ioctl via UART driver. you may
78982edd19a092114c479134cb16e0af54730edf1fPrashant Malani * need to redefine them on you platform!
79982edd19a092114c479134cb16e0af54730edf1fPrashant Malani * Logically they need to be unique and not colide with existing uart ioctl's.
80982edd19a092114c479134cb16e0af54730edf1fPrashant Malani */
81982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#ifndef USERIAL_IOCTL_BT_WAKE_ASSERT
82982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_IOCTL_BT_WAKE_ASSERT   0x8003
83982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#endif
84982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#ifndef USERIAL_IOCTL_BT_WAKE_DEASSERT
85982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_IOCTL_BT_WAKE_DEASSERT 0x8004
86982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#endif
87982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#ifndef USERIAL_IOCTL_BT_WAKE_GET_ST
88982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_IOCTL_BT_WAKE_GET_ST   0x8005
89982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#endif
90982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#endif // (BT_WAKE_VIA_USERIAL_IOCTL==TRUE)
91982edd19a092114c479134cb16e0af54730edf1fPrashant Malani
92982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/* UART CLOCK IOCTLS*/
93982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_OP_CLK_ON 0x5441
94982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_OP_CLK_OFF 0x5442
95982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define USERIAL_OP_CLK_STATE 0x5443
96982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/******************************************************************************
97982edd19a092114c479134cb16e0af54730edf1fPrashant Malani**  Type definitions
98982edd19a092114c479134cb16e0af54730edf1fPrashant Malani******************************************************************************/
99982edd19a092114c479134cb16e0af54730edf1fPrashant Malani
100982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/* Structure used to configure serial port during open */
101982edd19a092114c479134cb16e0af54730edf1fPrashant Malanitypedef struct
102982edd19a092114c479134cb16e0af54730edf1fPrashant Malani{
103982edd19a092114c479134cb16e0af54730edf1fPrashant Malani    uint16_t fmt;       /* Data format */
104982edd19a092114c479134cb16e0af54730edf1fPrashant Malani    uint8_t  baud;      /* Baud rate */
105982edd19a092114c479134cb16e0af54730edf1fPrashant Malani} tUSERIAL_CFG;
106982edd19a092114c479134cb16e0af54730edf1fPrashant Malani
107982edd19a092114c479134cb16e0af54730edf1fPrashant Malanitypedef enum {
108982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#if (BT_WAKE_VIA_USERIAL_IOCTL==TRUE)
109982edd19a092114c479134cb16e0af54730edf1fPrashant Malani    USERIAL_OP_ASSERT_BT_WAKE,
110982edd19a092114c479134cb16e0af54730edf1fPrashant Malani    USERIAL_OP_DEASSERT_BT_WAKE,
111982edd19a092114c479134cb16e0af54730edf1fPrashant Malani    USERIAL_OP_GET_BT_WAKE_STATE,
112982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#endif
113982edd19a092114c479134cb16e0af54730edf1fPrashant Malani    USERIAL_OP_FLOW_ON,
114982edd19a092114c479134cb16e0af54730edf1fPrashant Malani    USERIAL_OP_FLOW_OFF,
115982edd19a092114c479134cb16e0af54730edf1fPrashant Malani    USERIAL_OP_NOP,
116982edd19a092114c479134cb16e0af54730edf1fPrashant Malani} userial_vendor_ioctl_op_t;
117982edd19a092114c479134cb16e0af54730edf1fPrashant Malani
118982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/* UPIO signals */
119982edd19a092114c479134cb16e0af54730edf1fPrashant Malanienum {
120982edd19a092114c479134cb16e0af54730edf1fPrashant Malani    UPIO_BT_WAKE = 0,
121982edd19a092114c479134cb16e0af54730edf1fPrashant Malani    UPIO_HOST_WAKE,
122982edd19a092114c479134cb16e0af54730edf1fPrashant Malani    UPIO_LPM_MODE,
123982edd19a092114c479134cb16e0af54730edf1fPrashant Malani    UPIO_MAX_COUNT
124982edd19a092114c479134cb16e0af54730edf1fPrashant Malani};
125982edd19a092114c479134cb16e0af54730edf1fPrashant Malani
126982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/* UPIO assertion/deassertion */
127982edd19a092114c479134cb16e0af54730edf1fPrashant Malanienum {
128982edd19a092114c479134cb16e0af54730edf1fPrashant Malani    UPIO_UNKNOWN = 0,
129982edd19a092114c479134cb16e0af54730edf1fPrashant Malani    UPIO_DEASSERT,
130982edd19a092114c479134cb16e0af54730edf1fPrashant Malani    UPIO_ASSERT
131982edd19a092114c479134cb16e0af54730edf1fPrashant Malani};
132982edd19a092114c479134cb16e0af54730edf1fPrashant Malani
133982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#define VND_PORT_NAME_MAXLEN    256
134982edd19a092114c479134cb16e0af54730edf1fPrashant Malani
135982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/* vendor serial control block */
136982edd19a092114c479134cb16e0af54730edf1fPrashant Malanitypedef struct
137982edd19a092114c479134cb16e0af54730edf1fPrashant Malani{
138982edd19a092114c479134cb16e0af54730edf1fPrashant Malani    int fd;                     /* fd to Bluetooth device */
139982edd19a092114c479134cb16e0af54730edf1fPrashant Malani    struct termios termios;     /* serial terminal of BT port */
140982edd19a092114c479134cb16e0af54730edf1fPrashant Malani    char port_name[VND_PORT_NAME_MAXLEN];
141982edd19a092114c479134cb16e0af54730edf1fPrashant Malani} vnd_userial_cb_t;
142982edd19a092114c479134cb16e0af54730edf1fPrashant Malani
143982edd19a092114c479134cb16e0af54730edf1fPrashant Malanitypedef struct {
144982edd19a092114c479134cb16e0af54730edf1fPrashant Malani    uint8_t     ncmd;
145982edd19a092114c479134cb16e0af54730edf1fPrashant Malani    uint16_t    opcode;
146982edd19a092114c479134cb16e0af54730edf1fPrashant Malani} __attribute__ ((packed)) evt_cmd_complete;
147982edd19a092114c479134cb16e0af54730edf1fPrashant Malani
148982edd19a092114c479134cb16e0af54730edf1fPrashant Malanitypedef struct {
149982edd19a092114c479134cb16e0af54730edf1fPrashant Malani    uint8_t     status;
150982edd19a092114c479134cb16e0af54730edf1fPrashant Malani    uint8_t     ncmd;
151982edd19a092114c479134cb16e0af54730edf1fPrashant Malani    uint16_t    opcode;
152982edd19a092114c479134cb16e0af54730edf1fPrashant Malani} __attribute__ ((packed)) evt_cmd_status;
153982edd19a092114c479134cb16e0af54730edf1fPrashant Malani
154982edd19a092114c479134cb16e0af54730edf1fPrashant Malanitypedef struct {
155982edd19a092114c479134cb16e0af54730edf1fPrashant Malani    uint16_t    opcode;
156982edd19a092114c479134cb16e0af54730edf1fPrashant Malani    uint8_t     plen;
157982edd19a092114c479134cb16e0af54730edf1fPrashant Malani} __attribute__ ((packed))  hci_command_hdr;
158982edd19a092114c479134cb16e0af54730edf1fPrashant Malani
159982edd19a092114c479134cb16e0af54730edf1fPrashant Malanitypedef struct {
160982edd19a092114c479134cb16e0af54730edf1fPrashant Malani    uint8_t     evt;
161982edd19a092114c479134cb16e0af54730edf1fPrashant Malani    uint8_t     plen;
162982edd19a092114c479134cb16e0af54730edf1fPrashant Malani} __attribute__ ((packed))  hci_event_hdr;
163982edd19a092114c479134cb16e0af54730edf1fPrashant Malani
164982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/******************************************************************************
165982edd19a092114c479134cb16e0af54730edf1fPrashant Malani**  Extern
166982edd19a092114c479134cb16e0af54730edf1fPrashant Malani******************************************************************************/
167982edd19a092114c479134cb16e0af54730edf1fPrashant Malaniextern vnd_userial_cb_t vnd_userial;
168982edd19a092114c479134cb16e0af54730edf1fPrashant Malani
169982edd19a092114c479134cb16e0af54730edf1fPrashant Malani
170982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/*******************************************************************************
171982edd19a092114c479134cb16e0af54730edf1fPrashant Malani**
172982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** Function        userial_vendor_init
173982edd19a092114c479134cb16e0af54730edf1fPrashant Malani**
174982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** Description     Initialize userial vendor-specific control block
175982edd19a092114c479134cb16e0af54730edf1fPrashant Malani**
176982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** Returns         None
177982edd19a092114c479134cb16e0af54730edf1fPrashant Malani**
178982edd19a092114c479134cb16e0af54730edf1fPrashant Malani*******************************************************************************/
179982edd19a092114c479134cb16e0af54730edf1fPrashant Malanivoid userial_vendor_init(void);
180982edd19a092114c479134cb16e0af54730edf1fPrashant Malani
181982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/*******************************************************************************
182982edd19a092114c479134cb16e0af54730edf1fPrashant Malani**
183982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** Function        userial_vendor_open
184982edd19a092114c479134cb16e0af54730edf1fPrashant Malani**
185982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** Description     Open the serial port with the given configuration
186982edd19a092114c479134cb16e0af54730edf1fPrashant Malani**
187982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** Returns         device fd
188982edd19a092114c479134cb16e0af54730edf1fPrashant Malani**
189982edd19a092114c479134cb16e0af54730edf1fPrashant Malani*******************************************************************************/
190982edd19a092114c479134cb16e0af54730edf1fPrashant Malaniint userial_vendor_open(tUSERIAL_CFG *p_cfg);
191982edd19a092114c479134cb16e0af54730edf1fPrashant Malani
192982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/*******************************************************************************
193982edd19a092114c479134cb16e0af54730edf1fPrashant Malani**
194982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** Function        userial_vendor_close
195982edd19a092114c479134cb16e0af54730edf1fPrashant Malani**
196982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** Description     Conduct vendor-specific close work
197982edd19a092114c479134cb16e0af54730edf1fPrashant Malani**
198982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** Returns         None
199982edd19a092114c479134cb16e0af54730edf1fPrashant Malani**
200982edd19a092114c479134cb16e0af54730edf1fPrashant Malani*******************************************************************************/
201982edd19a092114c479134cb16e0af54730edf1fPrashant Malanivoid userial_vendor_close(void);
202982edd19a092114c479134cb16e0af54730edf1fPrashant Malani
203982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/*******************************************************************************
204982edd19a092114c479134cb16e0af54730edf1fPrashant Malani**
205982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** Function        userial_vendor_set_baud
206982edd19a092114c479134cb16e0af54730edf1fPrashant Malani**
207982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** Description     Set new baud rate
208982edd19a092114c479134cb16e0af54730edf1fPrashant Malani**
209982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** Returns         None
210982edd19a092114c479134cb16e0af54730edf1fPrashant Malani**
211982edd19a092114c479134cb16e0af54730edf1fPrashant Malani*******************************************************************************/
212982edd19a092114c479134cb16e0af54730edf1fPrashant Malanivoid userial_vendor_set_baud(uint8_t userial_baud);
213982edd19a092114c479134cb16e0af54730edf1fPrashant Malani
214982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/*******************************************************************************
215982edd19a092114c479134cb16e0af54730edf1fPrashant Malani**
216982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** Function        userial_vendor_ioctl
217982edd19a092114c479134cb16e0af54730edf1fPrashant Malani**
218982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** Description     ioctl inteface
219982edd19a092114c479134cb16e0af54730edf1fPrashant Malani**
220982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** Returns         int error
221982edd19a092114c479134cb16e0af54730edf1fPrashant Malani**
222982edd19a092114c479134cb16e0af54730edf1fPrashant Malani*******************************************************************************/
223982edd19a092114c479134cb16e0af54730edf1fPrashant Malaniint userial_vendor_ioctl(userial_vendor_ioctl_op_t op, int *p_data);
224982edd19a092114c479134cb16e0af54730edf1fPrashant Malani
225982edd19a092114c479134cb16e0af54730edf1fPrashant Malani/*******************************************************************************
226982edd19a092114c479134cb16e0af54730edf1fPrashant Malani**
227982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** Function        read_hci_event
228982edd19a092114c479134cb16e0af54730edf1fPrashant Malani**
229982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** Description     Read HCI event during vendor initialization
230982edd19a092114c479134cb16e0af54730edf1fPrashant Malani**
231982edd19a092114c479134cb16e0af54730edf1fPrashant Malani** Returns         int: size to read
232982edd19a092114c479134cb16e0af54730edf1fPrashant Malani**
233982edd19a092114c479134cb16e0af54730edf1fPrashant Malani*******************************************************************************/
234982edd19a092114c479134cb16e0af54730edf1fPrashant Malaniint read_hci_event(int fd, unsigned char* buf, int size);
235982edd19a092114c479134cb16e0af54730edf1fPrashant Malani
236982edd19a092114c479134cb16e0af54730edf1fPrashant Malani#endif /* HCI_UART_H */
237