| Pavan Savoy | 83ef41f | 2010-09-17 12:06:11 -0400 | [diff] [blame] | 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 <pavan_savoy@ti.com> | 
 | 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 |  | 
| Pavan Savoy | 83ef41f | 2010-09-17 12:06:11 -0400 | [diff] [blame] | 28 | /** | 
| Pavan Savoy | 83ef41f | 2010-09-17 12:06:11 -0400 | [diff] [blame] | 29 |  * enum proto-type - The protocol on WiLink chips which share a | 
 | 30 |  *	common physical interface like UART. | 
 | 31 |  */ | 
 | 32 | enum proto_type { | 
 | 33 | 	ST_BT, | 
 | 34 | 	ST_FM, | 
 | 35 | 	ST_GPS, | 
| Pavan Savoy | 5c88b02 | 2011-02-04 02:23:09 -0600 | [diff] [blame] | 36 | 	ST_MAX_CHANNELS = 16, | 
| Pavan Savoy | 83ef41f | 2010-09-17 12:06:11 -0400 | [diff] [blame] | 37 | }; | 
 | 38 |  | 
 | 39 | /** | 
 | 40 |  * struct st_proto_s - Per Protocol structure from BT/FM/GPS to ST | 
 | 41 |  * @type: type of the protocol being registered among the | 
 | 42 |  *	available proto_type(BT, FM, GPS the protocol which share TTY). | 
 | 43 |  * @recv: the receiver callback pointing to a function in the | 
 | 44 |  *	protocol drivers called by the ST driver upon receiving | 
 | 45 |  *	relevant data. | 
 | 46 |  * @match_packet: reserved for future use, to make ST more generic | 
 | 47 |  * @reg_complete_cb: callback handler pointing to a function in protocol | 
 | 48 |  *	handler called by ST when the pending registrations are complete. | 
 | 49 |  *	The registrations are marked pending, in situations when fw | 
 | 50 |  *	download is in progress. | 
 | 51 |  * @write: pointer to function in ST provided to protocol drivers from ST, | 
 | 52 |  *	to be made use when protocol drivers have data to send to TTY. | 
 | 53 |  * @priv_data: privdate data holder for the protocol drivers, sent | 
 | 54 |  *	from the protocol drivers during registration, and sent back on | 
 | 55 |  *	reg_complete_cb and recv. | 
| Pavan Savoy | 5c88b02 | 2011-02-04 02:23:09 -0600 | [diff] [blame] | 56 |  * @chnl_id: channel id the protocol driver is interested in, the channel | 
 | 57 |  *	id is nothing but the 1st byte of the packet in UART frame. | 
 | 58 |  * @max_frame_size: size of the largest frame the protocol can receive. | 
 | 59 |  * @hdr_len: length of the header structure of the protocol. | 
 | 60 |  * @offset_len_in_hdr: this provides the offset of the length field in the | 
 | 61 |  *	header structure of the protocol header, to assist ST to know | 
 | 62 |  *	how much to receive, if the data is split across UART frames. | 
 | 63 |  * @len_size: whether the length field inside the header is 2 bytes | 
 | 64 |  *	or 1 byte. | 
 | 65 |  * @reserve: the number of bytes ST needs to reserve in the skb being | 
 | 66 |  *	prepared for the protocol driver. | 
| Pavan Savoy | 83ef41f | 2010-09-17 12:06:11 -0400 | [diff] [blame] | 67 |  */ | 
 | 68 | struct st_proto_s { | 
 | 69 | 	enum proto_type type; | 
 | 70 | 	long (*recv) (void *, struct sk_buff *); | 
 | 71 | 	unsigned char (*match_packet) (const unsigned char *data); | 
 | 72 | 	void (*reg_complete_cb) (void *, char data); | 
 | 73 | 	long (*write) (struct sk_buff *skb); | 
 | 74 | 	void *priv_data; | 
| Pavan Savoy | 5c88b02 | 2011-02-04 02:23:09 -0600 | [diff] [blame] | 75 |  | 
 | 76 | 	unsigned char chnl_id; | 
 | 77 | 	unsigned short max_frame_size; | 
 | 78 | 	unsigned char hdr_len; | 
 | 79 | 	unsigned char offset_len_in_hdr; | 
 | 80 | 	unsigned char len_size; | 
 | 81 | 	unsigned char reserve; | 
| Pavan Savoy | 83ef41f | 2010-09-17 12:06:11 -0400 | [diff] [blame] | 82 | }; | 
 | 83 |  | 
 | 84 | extern long st_register(struct st_proto_s *); | 
| Pavan Savoy | 5c88b02 | 2011-02-04 02:23:09 -0600 | [diff] [blame] | 85 | extern long st_unregister(struct st_proto_s *); | 
| Pavan Savoy | 83ef41f | 2010-09-17 12:06:11 -0400 | [diff] [blame] | 86 |  | 
 | 87 |  | 
 | 88 | /* | 
 | 89 |  * header information used by st_core.c | 
 | 90 |  */ | 
 | 91 |  | 
 | 92 | /* states of protocol list */ | 
 | 93 | #define ST_NOTEMPTY	1 | 
 | 94 | #define ST_EMPTY	0 | 
 | 95 |  | 
 | 96 | /* | 
 | 97 |  * possible st_states | 
 | 98 |  */ | 
 | 99 | #define ST_INITIALIZING		1 | 
 | 100 | #define ST_REG_IN_PROGRESS	2 | 
 | 101 | #define ST_REG_PENDING		3 | 
 | 102 | #define ST_WAITING_FOR_RESP	4 | 
 | 103 |  | 
 | 104 | /** | 
 | 105 |  * struct st_data_s - ST core internal structure | 
 | 106 |  * @st_state: different states of ST like initializing, registration | 
 | 107 |  *	in progress, this is mainly used to return relevant err codes | 
 | 108 |  *	when protocol drivers are registering. It is also used to track | 
 | 109 |  *	the recv function, as in during fw download only HCI events | 
 | 110 |  *	can occur , where as during other times other events CH8, CH9 | 
 | 111 |  *	can occur. | 
 | 112 |  * @tty: tty provided by the TTY core for line disciplines. | 
| Pavan Savoy | 83ef41f | 2010-09-17 12:06:11 -0400 | [diff] [blame] | 113 |  * @tx_skb: If for some reason the tty's write returns lesser bytes written | 
 | 114 |  *	then to maintain the rest of data to be written on next instance. | 
 | 115 |  *	This needs to be protected, hence the lock inside wakeup func. | 
 | 116 |  * @tx_state: if the data is being written onto the TTY and protocol driver | 
 | 117 |  *	wants to send more, queue up data and mark that there is | 
 | 118 |  *	more data to send. | 
 | 119 |  * @list: the list of protocols registered, only MAX can exist, one protocol | 
 | 120 |  *	can register only once. | 
 | 121 |  * @rx_state: states to be maintained inside st's tty receive | 
 | 122 |  * @rx_count: count to be maintained inside st's tty receieve | 
 | 123 |  * @rx_skb: the skb where all data for a protocol gets accumulated, | 
 | 124 |  *	since tty might not call receive when a complete event packet | 
 | 125 |  *	is received, the states, count and the skb needs to be maintained. | 
| Pavan Savoy | 5c88b02 | 2011-02-04 02:23:09 -0600 | [diff] [blame] | 126 |  * @rx_chnl: the channel ID for which the data is getting accumalated for. | 
| Pavan Savoy | 83ef41f | 2010-09-17 12:06:11 -0400 | [diff] [blame] | 127 |  * @txq: the list of skbs which needs to be sent onto the TTY. | 
 | 128 |  * @tx_waitq: if the chip is not in AWAKE state, the skbs needs to be queued | 
 | 129 |  *	up in here, PM(WAKEUP_IND) data needs to be sent and then the skbs | 
 | 130 |  *	from waitq can be moved onto the txq. | 
 | 131 |  *	Needs locking too. | 
 | 132 |  * @lock: the lock to protect skbs, queues, and ST states. | 
 | 133 |  * @protos_registered: count of the protocols registered, also when 0 the | 
 | 134 |  *	chip enable gpio can be toggled, and when it changes to 1 the fw | 
 | 135 |  *	needs to be downloaded to initialize chip side ST. | 
 | 136 |  * @ll_state: the various PM states the chip can be, the states are notified | 
 | 137 |  *	to us, when the chip sends relevant PM packets(SLEEP_IND, WAKE_IND). | 
 | 138 |  * @kim_data: reference to the parent encapsulating structure. | 
 | 139 |  * | 
 | 140 |  */ | 
 | 141 | struct st_data_s { | 
 | 142 | 	unsigned long st_state; | 
| Pavan Savoy | 83ef41f | 2010-09-17 12:06:11 -0400 | [diff] [blame] | 143 | 	struct sk_buff *tx_skb; | 
 | 144 | #define ST_TX_SENDING	1 | 
 | 145 | #define ST_TX_WAKEUP	2 | 
 | 146 | 	unsigned long tx_state; | 
| Pavan Savoy | 5c88b02 | 2011-02-04 02:23:09 -0600 | [diff] [blame] | 147 | 	struct st_proto_s *list[ST_MAX_CHANNELS]; | 
| Pavan Savoy | 764b0c4 | 2011-04-08 04:57:42 -0500 | [diff] [blame] | 148 | 	bool is_registered[ST_MAX_CHANNELS]; | 
| Pavan Savoy | 83ef41f | 2010-09-17 12:06:11 -0400 | [diff] [blame] | 149 | 	unsigned long rx_state; | 
 | 150 | 	unsigned long rx_count; | 
 | 151 | 	struct sk_buff *rx_skb; | 
| Pavan Savoy | 5c88b02 | 2011-02-04 02:23:09 -0600 | [diff] [blame] | 152 | 	unsigned char rx_chnl; | 
| Pavan Savoy | 83ef41f | 2010-09-17 12:06:11 -0400 | [diff] [blame] | 153 | 	struct sk_buff_head txq, tx_waitq; | 
 | 154 | 	spinlock_t lock; | 
 | 155 | 	unsigned char	protos_registered; | 
 | 156 | 	unsigned long ll_state; | 
 | 157 | 	void *kim_data; | 
| Pavan Savoy | 764b0c4 | 2011-04-08 04:57:42 -0500 | [diff] [blame] | 158 | 	struct tty_struct *tty; | 
| Pavan Savoy | 83ef41f | 2010-09-17 12:06:11 -0400 | [diff] [blame] | 159 | }; | 
 | 160 |  | 
| Pavan Savoy | ef04d12 | 2011-02-04 02:23:13 -0600 | [diff] [blame] | 161 | /* | 
 | 162 |  * wrapper around tty->ops->write_room to check | 
 | 163 |  * availability during firmware download | 
 | 164 |  */ | 
 | 165 | int st_get_uart_wr_room(struct st_data_s *st_gdata); | 
| Pavan Savoy | 83ef41f | 2010-09-17 12:06:11 -0400 | [diff] [blame] | 166 | /** | 
 | 167 |  * st_int_write - | 
 | 168 |  * point this to tty->driver->write or tty->ops->write | 
 | 169 |  * depending upon the kernel version | 
 | 170 |  */ | 
 | 171 | int st_int_write(struct st_data_s*, const unsigned char*, int); | 
 | 172 |  | 
 | 173 | /** | 
 | 174 |  * st_write - | 
 | 175 |  * internal write function, passed onto protocol drivers | 
 | 176 |  * via the write function ptr of protocol struct | 
 | 177 |  */ | 
 | 178 | long st_write(struct sk_buff *); | 
 | 179 |  | 
 | 180 | /* function to be called from ST-LL */ | 
 | 181 | void st_ll_send_frame(enum proto_type, struct sk_buff *); | 
 | 182 |  | 
 | 183 | /* internal wake up function */ | 
 | 184 | void st_tx_wakeup(struct st_data_s *st_data); | 
 | 185 |  | 
 | 186 | /* init, exit entry funcs called from KIM */ | 
 | 187 | int st_core_init(struct st_data_s **); | 
 | 188 | void st_core_exit(struct st_data_s *); | 
 | 189 |  | 
 | 190 | /* ask for reference from KIM */ | 
 | 191 | void st_kim_ref(struct st_data_s **, int); | 
 | 192 |  | 
 | 193 | #define GPS_STUB_TEST | 
 | 194 | #ifdef GPS_STUB_TEST | 
 | 195 | int gps_chrdrv_stub_write(const unsigned char*, int); | 
 | 196 | void gps_chrdrv_stub_init(void); | 
 | 197 | #endif | 
 | 198 |  | 
 | 199 | /* | 
 | 200 |  * header information used by st_kim.c | 
 | 201 |  */ | 
 | 202 |  | 
 | 203 | /* time in msec to wait for | 
 | 204 |  * line discipline to be installed | 
 | 205 |  */ | 
| Pavan Savoy | ec60d0a | 2011-02-04 02:23:10 -0600 | [diff] [blame] | 206 | #define LDISC_TIME	1000 | 
 | 207 | #define CMD_RESP_TIME	800 | 
| Pavan Savoy | ef04d12 | 2011-02-04 02:23:13 -0600 | [diff] [blame] | 208 | #define CMD_WR_TIME	5000 | 
| Pavan Savoy | 83ef41f | 2010-09-17 12:06:11 -0400 | [diff] [blame] | 209 | #define MAKEWORD(a, b)  ((unsigned short)(((unsigned char)(a)) \ | 
 | 210 | 	| ((unsigned short)((unsigned char)(b))) << 8)) | 
 | 211 |  | 
 | 212 | #define GPIO_HIGH 1 | 
 | 213 | #define GPIO_LOW  0 | 
 | 214 |  | 
 | 215 | /* the Power-On-Reset logic, requires to attempt | 
 | 216 |  * to download firmware onto chip more than once | 
 | 217 |  * since the self-test for chip takes a while | 
 | 218 |  */ | 
 | 219 | #define POR_RETRY_COUNT 5 | 
 | 220 |  | 
 | 221 | /** | 
 | 222 |  * struct chip_version - save the chip version | 
 | 223 |  */ | 
 | 224 | struct chip_version { | 
 | 225 | 	unsigned short full; | 
 | 226 | 	unsigned short chip; | 
 | 227 | 	unsigned short min_ver; | 
 | 228 | 	unsigned short maj_ver; | 
 | 229 | }; | 
 | 230 |  | 
| Pavan Savoy | ec60d0a | 2011-02-04 02:23:10 -0600 | [diff] [blame] | 231 | #define UART_DEV_NAME_LEN 32 | 
| Pavan Savoy | 83ef41f | 2010-09-17 12:06:11 -0400 | [diff] [blame] | 232 | /** | 
 | 233 |  * struct kim_data_s - the KIM internal data, embedded as the | 
 | 234 |  *	platform's drv data. One for each ST device in the system. | 
 | 235 |  * @uim_pid: KIM needs to communicate with UIM to request to install | 
 | 236 |  *	the ldisc by opening UART when protocol drivers register. | 
 | 237 |  * @kim_pdev: the platform device added in one of the board-XX.c file | 
 | 238 |  *	in arch/XX/ directory, 1 for each ST device. | 
 | 239 |  * @kim_rcvd: completion handler to notify when data was received, | 
 | 240 |  *	mainly used during fw download, which involves multiple send/wait | 
 | 241 |  *	for each of the HCI-VS commands. | 
 | 242 |  * @ldisc_installed: completion handler to notify that the UIM accepted | 
 | 243 |  *	the request to install ldisc, notify from tty_open which suggests | 
 | 244 |  *	the ldisc was properly installed. | 
 | 245 |  * @resp_buffer: data buffer for the .bts fw file name. | 
 | 246 |  * @fw_entry: firmware class struct to request/release the fw. | 
| Pavan Savoy | 83ef41f | 2010-09-17 12:06:11 -0400 | [diff] [blame] | 247 |  * @rx_state: the rx state for kim's receive func during fw download. | 
 | 248 |  * @rx_count: the rx count for the kim's receive func during fw download. | 
 | 249 |  * @rx_skb: all of fw data might not come at once, and hence data storage for | 
 | 250 |  *	whole of the fw response, only HCI_EVENTs and hence diff from ST's | 
 | 251 |  *	response. | 
| Pavan Savoy | 83ef41f | 2010-09-17 12:06:11 -0400 | [diff] [blame] | 252 |  * @core_data: ST core's data, which mainly is the tty's disc_data | 
 | 253 |  * @version: chip version available via a sysfs entry. | 
 | 254 |  * | 
 | 255 |  */ | 
 | 256 | struct kim_data_s { | 
 | 257 | 	long uim_pid; | 
 | 258 | 	struct platform_device *kim_pdev; | 
 | 259 | 	struct completion kim_rcvd, ldisc_installed; | 
 | 260 | 	char resp_buffer[30]; | 
 | 261 | 	const struct firmware *fw_entry; | 
| Pavan Savoy | 781a739 | 2011-02-04 02:23:15 -0600 | [diff] [blame] | 262 | 	long nshutdown; | 
| Pavan Savoy | 83ef41f | 2010-09-17 12:06:11 -0400 | [diff] [blame] | 263 | 	unsigned long rx_state; | 
 | 264 | 	unsigned long rx_count; | 
 | 265 | 	struct sk_buff *rx_skb; | 
| Pavan Savoy | 83ef41f | 2010-09-17 12:06:11 -0400 | [diff] [blame] | 266 | 	struct st_data_s *core_data; | 
 | 267 | 	struct chip_version version; | 
| Pavan Savoy | ec60d0a | 2011-02-04 02:23:10 -0600 | [diff] [blame] | 268 | 	unsigned char ldisc_install; | 
 | 269 | 	unsigned char dev_name[UART_DEV_NAME_LEN]; | 
 | 270 | 	unsigned char flow_cntrl; | 
 | 271 | 	unsigned long baud_rate; | 
| Pavan Savoy | 83ef41f | 2010-09-17 12:06:11 -0400 | [diff] [blame] | 272 | }; | 
 | 273 |  | 
 | 274 | /** | 
 | 275 |  * functions called when 1 of the protocol drivers gets | 
 | 276 |  * registered, these need to communicate with UIM to request | 
 | 277 |  * ldisc installed, read chip_version, download relevant fw | 
 | 278 |  */ | 
 | 279 | long st_kim_start(void *); | 
 | 280 | long st_kim_stop(void *); | 
 | 281 |  | 
 | 282 | void st_kim_recv(void *, const unsigned char *, long count); | 
| Pavan Savoy | 83ef41f | 2010-09-17 12:06:11 -0400 | [diff] [blame] | 283 | void st_kim_complete(void *); | 
 | 284 | void kim_st_list_protocols(struct st_data_s *, void *); | 
 | 285 |  | 
 | 286 | /* | 
 | 287 |  * BTS headers | 
 | 288 |  */ | 
 | 289 | #define ACTION_SEND_COMMAND     1 | 
 | 290 | #define ACTION_WAIT_EVENT       2 | 
 | 291 | #define ACTION_SERIAL           3 | 
 | 292 | #define ACTION_DELAY            4 | 
 | 293 | #define ACTION_RUN_SCRIPT       5 | 
 | 294 | #define ACTION_REMARKS          6 | 
 | 295 |  | 
 | 296 | /** | 
 | 297 |  * struct bts_header - the fw file is NOT binary which can | 
 | 298 |  *	be sent onto TTY as is. The .bts is more a script | 
 | 299 |  *	file which has different types of actions. | 
 | 300 |  *	Each such action needs to be parsed by the KIM and | 
 | 301 |  *	relevant procedure to be called. | 
 | 302 |  */ | 
 | 303 | struct bts_header { | 
 | 304 | 	u32 magic; | 
 | 305 | 	u32 version; | 
 | 306 | 	u8 future[24]; | 
 | 307 | 	u8 actions[0]; | 
 | 308 | } __attribute__ ((packed)); | 
 | 309 |  | 
 | 310 | /** | 
 | 311 |  * struct bts_action - Each .bts action has its own type of | 
 | 312 |  *	data. | 
 | 313 |  */ | 
 | 314 | struct bts_action { | 
 | 315 | 	u16 type; | 
 | 316 | 	u16 size; | 
 | 317 | 	u8 data[0]; | 
 | 318 | } __attribute__ ((packed)); | 
 | 319 |  | 
 | 320 | struct bts_action_send { | 
 | 321 | 	u8 data[0]; | 
 | 322 | } __attribute__ ((packed)); | 
 | 323 |  | 
 | 324 | struct bts_action_wait { | 
 | 325 | 	u32 msec; | 
 | 326 | 	u32 size; | 
 | 327 | 	u8 data[0]; | 
 | 328 | } __attribute__ ((packed)); | 
 | 329 |  | 
 | 330 | struct bts_action_delay { | 
 | 331 | 	u32 msec; | 
 | 332 | } __attribute__ ((packed)); | 
 | 333 |  | 
 | 334 | struct bts_action_serial { | 
 | 335 | 	u32 baud; | 
 | 336 | 	u32 flow_control; | 
 | 337 | } __attribute__ ((packed)); | 
 | 338 |  | 
 | 339 | /** | 
 | 340 |  * struct hci_command - the HCI-VS for intrepreting | 
 | 341 |  *	the change baud rate of host-side UART, which | 
 | 342 |  *	needs to be ignored, since UIM would do that | 
 | 343 |  *	when it receives request from KIM for ldisc installation. | 
 | 344 |  */ | 
 | 345 | struct hci_command { | 
 | 346 | 	u8 prefix; | 
 | 347 | 	u16 opcode; | 
 | 348 | 	u8 plen; | 
 | 349 | 	u32 speed; | 
 | 350 | } __attribute__ ((packed)); | 
 | 351 |  | 
 | 352 | /* | 
 | 353 |  * header information used by st_ll.c | 
 | 354 |  */ | 
 | 355 |  | 
 | 356 | /* ST LL receiver states */ | 
 | 357 | #define ST_W4_PACKET_TYPE       0 | 
| Pavan Savoy | 5c88b02 | 2011-02-04 02:23:09 -0600 | [diff] [blame] | 358 | #define ST_W4_HEADER		1 | 
 | 359 | #define ST_W4_DATA		2 | 
| Pavan Savoy | 83ef41f | 2010-09-17 12:06:11 -0400 | [diff] [blame] | 360 |  | 
 | 361 | /* ST LL state machines */ | 
 | 362 | #define ST_LL_ASLEEP               0 | 
 | 363 | #define ST_LL_ASLEEP_TO_AWAKE      1 | 
 | 364 | #define ST_LL_AWAKE                2 | 
 | 365 | #define ST_LL_AWAKE_TO_ASLEEP      3 | 
 | 366 | #define ST_LL_INVALID		   4 | 
 | 367 |  | 
 | 368 | /* different PM notifications coming from chip */ | 
 | 369 | #define LL_SLEEP_IND	0x30 | 
 | 370 | #define LL_SLEEP_ACK	0x31 | 
 | 371 | #define LL_WAKE_UP_IND	0x32 | 
 | 372 | #define LL_WAKE_UP_ACK	0x33 | 
 | 373 |  | 
 | 374 | /* initialize and de-init ST LL */ | 
 | 375 | long st_ll_init(struct st_data_s *); | 
 | 376 | long st_ll_deinit(struct st_data_s *); | 
 | 377 |  | 
 | 378 | /** | 
 | 379 |  * enable/disable ST LL along with KIM start/stop | 
 | 380 |  * called by ST Core | 
 | 381 |  */ | 
 | 382 | void st_ll_enable(struct st_data_s *); | 
 | 383 | void st_ll_disable(struct st_data_s *); | 
 | 384 |  | 
 | 385 | /** | 
 | 386 |  * various funcs used by ST core to set/get the various PM states | 
 | 387 |  * of the chip. | 
 | 388 |  */ | 
 | 389 | unsigned long st_ll_getstate(struct st_data_s *); | 
 | 390 | unsigned long st_ll_sleep_state(struct st_data_s *, unsigned char); | 
 | 391 | void st_ll_wakeup(struct st_data_s *); | 
 | 392 |  | 
 | 393 | /* | 
 | 394 |  * header information used by st_core.c for FM and GPS | 
 | 395 |  * packet parsing, the bluetooth headers are already available | 
 | 396 |  * at net/bluetooth/ | 
 | 397 |  */ | 
 | 398 |  | 
 | 399 | struct fm_event_hdr { | 
 | 400 | 	u8 plen; | 
 | 401 | } __attribute__ ((packed)); | 
 | 402 |  | 
 | 403 | #define FM_MAX_FRAME_SIZE 0xFF	/* TODO: */ | 
 | 404 | #define FM_EVENT_HDR_SIZE 1	/* size of fm_event_hdr */ | 
 | 405 | #define ST_FM_CH8_PKT 0x8 | 
 | 406 |  | 
 | 407 | /* gps stuff */ | 
 | 408 | struct gps_event_hdr { | 
 | 409 | 	u8 opcode; | 
 | 410 | 	u16 plen; | 
 | 411 | } __attribute__ ((packed)); | 
 | 412 |  | 
| Pavan Savoy | 0d7c5f2 | 2011-08-10 10:18:31 -0500 | [diff] [blame] | 413 | /** | 
 | 414 |  * struct ti_st_plat_data - platform data shared between ST driver and | 
 | 415 |  *	platform specific board file which adds the ST device. | 
 | 416 |  * @nshutdown_gpio: Host's GPIO line to which chip's BT_EN is connected. | 
 | 417 |  * @dev_name: The UART/TTY name to which chip is interfaced. (eg: /dev/ttyS1) | 
 | 418 |  * @flow_cntrl: Should always be 1, since UART's CTS/RTS is used for PM | 
 | 419 |  *	purposes. | 
 | 420 |  * @baud_rate: The baud rate supported by the Host UART controller, this will | 
 | 421 |  *	be shared across with the chip via a HCI VS command from User-Space Init | 
 | 422 |  *	Mgr application. | 
 | 423 |  * @suspend: | 
 | 424 |  * @resume: legacy PM routines hooked to platform specific board file, so as | 
 | 425 |  *	to take chip-host interface specific action. | 
 | 426 |  * @chip_enable: | 
 | 427 |  * @chip_disable: Platform/Interface specific mux mode setting, GPIO | 
 | 428 |  *	configuring, Host side PM disabling etc.. can be done here. | 
 | 429 |  * @chip_asleep: | 
 | 430 |  * @chip_awake: Chip specific deep sleep states is communicated to Host | 
 | 431 |  *	specific board-xx.c to take actions such as cut UART clocks when chip | 
 | 432 |  *	asleep or run host faster when chip awake etc.. | 
 | 433 |  * | 
 | 434 |  */ | 
| Pavan Savoy | ec60d0a | 2011-02-04 02:23:10 -0600 | [diff] [blame] | 435 | struct ti_st_plat_data { | 
| Pavan Savoy | 781a739 | 2011-02-04 02:23:15 -0600 | [diff] [blame] | 436 | 	long nshutdown_gpio; | 
| Pavan Savoy | ec60d0a | 2011-02-04 02:23:10 -0600 | [diff] [blame] | 437 | 	unsigned char dev_name[UART_DEV_NAME_LEN]; /* uart name */ | 
 | 438 | 	unsigned char flow_cntrl; /* flow control flag */ | 
 | 439 | 	unsigned long baud_rate; | 
 | 440 | 	int (*suspend)(struct platform_device *, pm_message_t); | 
 | 441 | 	int (*resume)(struct platform_device *); | 
| Pavan Savoy | 0d7c5f2 | 2011-08-10 10:18:31 -0500 | [diff] [blame] | 442 | 	int (*chip_enable) (struct kim_data_s *); | 
 | 443 | 	int (*chip_disable) (struct kim_data_s *); | 
 | 444 | 	int (*chip_asleep) (struct kim_data_s *); | 
 | 445 | 	int (*chip_awake) (struct kim_data_s *); | 
| Pavan Savoy | ec60d0a | 2011-02-04 02:23:10 -0600 | [diff] [blame] | 446 | }; | 
 | 447 |  | 
| Pavan Savoy | 83ef41f | 2010-09-17 12:06:11 -0400 | [diff] [blame] | 448 | #endif /* TI_WILINK_ST_H */ |