blob: c21abdae1cbd31f0895ca83753bf6039f4ac1af7 [file] [log] [blame]
John Stultz5c69c8c2015-11-23 17:13:51 -08001/*
2 * User Mode Init manager - For shared transport
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program;if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 */
18
19#ifndef UIM_H
20#define UIM_H
21
22/* the line discipline ideally should be coming
23 * from tty.h
24 */
25#define N_TI_WL 22
26
27/* Paramaters to set the baud rate*/
28#define FLOW_CTL 0x0001
29#define BOTHER 0x00001000
30#define ARM_NCCS 19
31
32#ifndef TCGETS2
33#define TCGETS2 _IOR('T',0x2A, struct termios2)
34#endif
35#ifndef TCSETS2
36#define TCSETS2 _IOW('T',0x2B, struct termios2)
37#endif
38
39/*HCI Command and Event information*/
40#define HCI_HDR_OPCODE 0xff36
41#define WRITE_BD_ADDR_OPCODE 0xFC06
42#define RESP_PREFIX 0x04
43#define MAX_TRY 10
44
45/* HCI Packet types */
46#define HCI_COMMAND_PKT 0x01
47#define HCI_EVENT_PKT 0x04
48
49/* HCI command macros*/
50#define HCI_EVENT_HDR_SIZE 2
51#define HCI_COMMAND_HDR_SIZE 3
52#define HCI_COMMAND_HDR_SIZE 3
53
54/* HCI event macros*/
55#define EVT_CMD_COMPLETE_SIZE 3
56#define EVT_CMD_STATUS_SIZE 4
57#define EVT_CMD_COMPLETE 0x0E
58#define EVT_CMD_STATUS 0x0F
59
60/* use it for string lengths and buffers */
61#define UART_DEV_NAME_LEN 32
62/* BD address length in format xx:xx:xx:xx:xx:xx */
63#define BD_ADDR_LEN 17
64
65/* the sysfs entries with device configuration set by
66 * shared transport driver
67 */
68#define INSTALL_SYSFS_ENTRY "/sys/devices/platform/kim/install"
69#define DEV_NAME_SYSFS "/sys/devices/platform/kim/dev_name"
70#define BAUD_RATE_SYSFS "/sys/devices/platform/kim/baud_rate"
71#define FLOW_CTRL_SYSFS "/sys/devices/platform/kim/flow_cntrl"
72
73
74#define VERBOSE
75/*Debug logs*/
76#define UIM_ERR(fmt, arg...) printf("uim:"fmt"\n" , ##arg)
77#if defined(UIM_DEBUG) /* limited debug messages */
78#define UIM_START_FUNC() printf("uim: Inside %s", __FUNCTION__)
79#define UIM_DBG(fmt, arg...) printf("uim:"fmt"\n" , ## arg)
80#define UIM_VER(fmt, arg...)
81#elif defined(VERBOSE) /* very verbose */
82#define UIM_START_FUNC() printf("uim:@ %s\n", __FUNCTION__)
83#define UIM_DBG(fmt, arg...) printf("uim:"fmt"\n" , ## arg)
84#define UIM_VER(fmt, arg...) printf("uim:"fmt"\n" , ## arg)
85#else /* error msgs only */
86#define UIM_START_FUNC()
87#define UIM_DBG(fmt, arg...)
88#define UIM_VER(fmt, arg...)
89#endif
90
91/* HCI command header*/
92typedef struct {
93 uint16_t opcode; /* OCF & OGF */
94 uint8_t plen;
95} __attribute__ ((packed)) hci_command_hdr;
96
97/* HCI event header*/
98typedef struct {
99 uint8_t evt;
100 uint8_t plen;
101} __attribute__ ((packed)) hci_event_hdr;
102
103/* HCI command complete event*/
104typedef struct {
105 uint8_t ncmd;
106 uint16_t opcode;
107} __attribute__ ((packed)) evt_cmd_complete;
108
109/* HCI event status*/
110typedef struct {
111 uint8_t status;
112 uint8_t ncmd;
113 uint16_t opcode;
114} __attribute__ ((packed)) evt_cmd_status;
115
116/* HCI Event structure to set the cusrom baud rate*/
117typedef struct {
118 uint8_t uart_prefix;
119 hci_event_hdr hci_hdr;
120 evt_cmd_complete cmd_complete;
121 uint8_t status;
122 uint8_t data[16];
123} __attribute__ ((packed)) command_complete_t;
124
125/* HCI Command structure to set the cusrom baud rate*/
126typedef struct {
127 uint8_t uart_prefix;
128 hci_command_hdr hci_hdr;
129 uint32_t speed;
130} __attribute__ ((packed)) uim_speed_change_cmd;
131
132/* BD address structure to set the uim BD address*/
133typedef struct {
134 unsigned char b[6];
135} __attribute__((packed)) bdaddr_t;
136
137/* HCI Command structure to set the uim BD address*/
138typedef struct {
139 uint8_t uart_prefix;
140 hci_command_hdr hci_hdr;
141 bdaddr_t addr;
142} __attribute__ ((packed)) uim_bdaddr_change_cmd;\
143
144#endif /* UIM_H */