Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
ti_wilink_st.h
Go to the documentation of this file.
1 /*
2  * Shared Transport Header file
3  * To be included by the protocol stack drivers for
4  * Texas Instruments BT,FM and GPS combo chip drivers
5  * and also serves the sub-modules of the shared transport driver.
6  *
7  * Copyright (C) 2009-2010 Texas Instruments
8  * Author: Pavan Savoy <[email protected]>
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 version 2 as
12  * published by the Free Software Foundation.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License
20  * along with this program; if not, write to the Free Software
21  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22  *
23  */
24 
25 #ifndef TI_WILINK_ST_H
26 #define TI_WILINK_ST_H
27 
28 #include <linux/skbuff.h>
29 
34 enum proto_type {
39 };
40 
70 struct st_proto_s {
72  long (*recv) (void *, struct sk_buff *);
73  unsigned char (*match_packet) (const unsigned char *data);
74  void (*reg_complete_cb) (void *, char data);
75  long (*write) (struct sk_buff *skb);
76  void *priv_data;
77 
78  unsigned char chnl_id;
79  unsigned short max_frame_size;
80  unsigned char hdr_len;
81  unsigned char offset_len_in_hdr;
82  unsigned char len_size;
83  unsigned char reserve;
84 };
85 
86 extern long st_register(struct st_proto_s *);
87 extern long st_unregister(struct st_proto_s *);
88 
89 
90 /*
91  * header information used by st_core.c
92  */
93 
94 /* states of protocol list */
95 #define ST_NOTEMPTY 1
96 #define ST_EMPTY 0
97 
98 /*
99  * possible st_states
100  */
101 #define ST_INITIALIZING 1
102 #define ST_REG_IN_PROGRESS 2
103 #define ST_REG_PENDING 3
104 #define ST_WAITING_FOR_RESP 4
105 
143 struct st_data_s {
144  unsigned long st_state;
145  struct sk_buff *tx_skb;
146 #define ST_TX_SENDING 1
147 #define ST_TX_WAKEUP 2
148  unsigned long tx_state;
151  unsigned long rx_state;
152  unsigned long rx_count;
153  struct sk_buff *rx_skb;
154  unsigned char rx_chnl;
155  struct sk_buff_head txq, tx_waitq;
157  unsigned char protos_registered;
158  unsigned long ll_state;
159  void *kim_data;
160  struct tty_struct *tty;
161 };
162 
163 /*
164  * wrapper around tty->ops->write_room to check
165  * availability during firmware download
166  */
167 int st_get_uart_wr_room(struct st_data_s *st_gdata);
173 int st_int_write(struct st_data_s*, const unsigned char*, int);
174 
180 long st_write(struct sk_buff *);
181 
182 /* function to be called from ST-LL */
183 void st_ll_send_frame(enum proto_type, struct sk_buff *);
184 
185 /* internal wake up function */
186 void st_tx_wakeup(struct st_data_s *st_data);
187 
188 /* init, exit entry funcs called from KIM */
189 int st_core_init(struct st_data_s **);
190 void st_core_exit(struct st_data_s *);
191 
192 /* ask for reference from KIM */
193 void st_kim_ref(struct st_data_s **, int);
194 
195 #define GPS_STUB_TEST
196 #ifdef GPS_STUB_TEST
197 int gps_chrdrv_stub_write(const unsigned char*, int);
198 void gps_chrdrv_stub_init(void);
199 #endif
200 
201 /*
202  * header information used by st_kim.c
203  */
204 
205 /* time in msec to wait for
206  * line discipline to be installed
207  */
208 #define LDISC_TIME 1000
209 #define CMD_RESP_TIME 800
210 #define CMD_WR_TIME 5000
211 #define MAKEWORD(a, b) ((unsigned short)(((unsigned char)(a)) \
212  | ((unsigned short)((unsigned char)(b))) << 8))
213 
214 #define GPIO_HIGH 1
215 #define GPIO_LOW 0
216 
217 /* the Power-On-Reset logic, requires to attempt
218  * to download firmware onto chip more than once
219  * since the self-test for chip takes a while
220  */
221 #define POR_RETRY_COUNT 5
222 
226 struct chip_version {
227  unsigned short full;
228  unsigned short chip;
229  unsigned short min_ver;
230  unsigned short maj_ver;
231 };
232 
233 #define UART_DEV_NAME_LEN 32
234 
258 struct kim_data_s {
259  long uim_pid;
261  struct completion kim_rcvd, ldisc_installed;
262  char resp_buffer[30];
263  const struct firmware *fw_entry;
264  long nshutdown;
265  unsigned long rx_state;
266  unsigned long rx_count;
267  struct sk_buff *rx_skb;
270  unsigned char ldisc_install;
271  unsigned char dev_name[UART_DEV_NAME_LEN];
272  unsigned char flow_cntrl;
273  unsigned long baud_rate;
274 };
275 
281 long st_kim_start(void *);
282 long st_kim_stop(void *);
283 
284 void st_kim_complete(void *);
285 void kim_st_list_protocols(struct st_data_s *, void *);
286 void st_kim_recv(void *, const unsigned char *, long);
287 
288 
289 /*
290  * BTS headers
291  */
292 #define ACTION_SEND_COMMAND 1
293 #define ACTION_WAIT_EVENT 2
294 #define ACTION_SERIAL 3
295 #define ACTION_DELAY 4
296 #define ACTION_RUN_SCRIPT 5
297 #define ACTION_REMARKS 6
298 
306 struct bts_header {
309  u8 future[24];
311 } __attribute__ ((packed));
317 struct bts_action {
320  u8 data[0];
321 } __attribute__ ((packed));
324  u8 data[0];
325 } __attribute__ ((packed));
326 
330  u8 data[0];
331 } __attribute__ ((packed));
335 } __attribute__ ((packed));
336 
340 } __attribute__ ((packed));
348 struct hci_command {
353 } __attribute__ ((packed));
355 /*
356  * header information used by st_ll.c
357  */
358 
359 /* ST LL receiver states */
360 #define ST_W4_PACKET_TYPE 0
361 #define ST_W4_HEADER 1
362 #define ST_W4_DATA 2
363 
364 /* ST LL state machines */
365 #define ST_LL_ASLEEP 0
366 #define ST_LL_ASLEEP_TO_AWAKE 1
367 #define ST_LL_AWAKE 2
368 #define ST_LL_AWAKE_TO_ASLEEP 3
369 #define ST_LL_INVALID 4
370 
371 /* different PM notifications coming from chip */
372 #define LL_SLEEP_IND 0x30
373 #define LL_SLEEP_ACK 0x31
374 #define LL_WAKE_UP_IND 0x32
375 #define LL_WAKE_UP_ACK 0x33
376 
377 /* initialize and de-init ST LL */
378 long st_ll_init(struct st_data_s *);
379 long st_ll_deinit(struct st_data_s *);
380 
385 void st_ll_enable(struct st_data_s *);
386 void st_ll_disable(struct st_data_s *);
387 
392 unsigned long st_ll_getstate(struct st_data_s *);
393 unsigned long st_ll_sleep_state(struct st_data_s *, unsigned char);
394 void st_ll_wakeup(struct st_data_s *);
395 
396 /*
397  * header information used by st_core.c for FM and GPS
398  * packet parsing, the bluetooth headers are already available
399  * at net/bluetooth/
400  */
401 
402 struct fm_event_hdr {
404 } __attribute__ ((packed));
405 
406 #define FM_MAX_FRAME_SIZE 0xFF /* TODO: */
407 #define FM_EVENT_HDR_SIZE 1 /* size of fm_event_hdr */
408 #define ST_FM_CH8_PKT 0x8
409 
410 /* gps stuff */
414 } __attribute__ ((packed));
415 
440  unsigned char dev_name[UART_DEV_NAME_LEN]; /* uart name */
441  unsigned char flow_cntrl; /* flow control flag */
442  unsigned long baud_rate;
444  int (*resume)(struct platform_device *);
445  int (*chip_enable) (struct kim_data_s *);
446  int (*chip_disable) (struct kim_data_s *);
447  int (*chip_asleep) (struct kim_data_s *);
448  int (*chip_awake) (struct kim_data_s *);
449 };
450 
451 #endif /* TI_WILINK_ST_H */