129 lines
4.3 KiB
C
129 lines
4.3 KiB
C
/*
|
|
* Shared Transport Core header file
|
|
*
|
|
* Copyright (C) 2009 Texas Instruments
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License version 2 as
|
|
* published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*
|
|
*/
|
|
|
|
#ifndef ST_CORE_H
|
|
#define ST_CORE_H
|
|
|
|
#include <linux/skbuff.h>
|
|
#include "st.h"
|
|
|
|
/* states of protocol list */
|
|
#define ST_NOTEMPTY 1
|
|
#define ST_EMPTY 0
|
|
|
|
/*
|
|
* possible st_states
|
|
*/
|
|
#define ST_INITIALIZING 1
|
|
#define ST_REG_IN_PROGRESS 2
|
|
#define ST_REG_PENDING 3
|
|
#define ST_WAITING_FOR_RESP 4
|
|
|
|
/**
|
|
* struct st_data_s - ST core internal structure
|
|
* @st_state: different states of ST like initializing, registration
|
|
* in progress, this is mainly used to return relevant err codes
|
|
* when protocol drivers are registering. It is also used to track
|
|
* the recv function, as in during fw download only HCI events
|
|
* can occur , where as during other times other events CH8, CH9
|
|
* can occur.
|
|
* @tty: tty provided by the TTY core for line disciplines.
|
|
* @ldisc_ops: the procedures that this line discipline registers with TTY.
|
|
* @tx_skb: If for some reason the tty's write returns lesser bytes written
|
|
* then to maintain the rest of data to be written on next instance.
|
|
* This needs to be protected, hence the lock inside wakeup func.
|
|
* @tx_state: if the data is being written onto the TTY and protocol driver
|
|
* wants to send more, queue up data and mark that there is
|
|
* more data to send.
|
|
* @list: the list of protocols registered, only MAX can exist, one protocol
|
|
* can register only once.
|
|
* @rx_state: states to be maintained inside st's tty receive
|
|
* @rx_count: count to be maintained inside st's tty receieve
|
|
* @rx_skb: the skb where all data for a protocol gets accumulated,
|
|
* since tty might not call receive when a complete event packet
|
|
* is received, the states, count and the skb needs to be maintained.
|
|
* @txq: the list of skbs which needs to be sent onto the TTY.
|
|
* @tx_waitq: if the chip is not in AWAKE state, the skbs needs to be queued
|
|
* up in here, PM(WAKEUP_IND) data needs to be sent and then the skbs
|
|
* from waitq can be moved onto the txq.
|
|
* Needs locking too.
|
|
* @lock: the lock to protect skbs, queues, and ST states.
|
|
* @protos_registered: count of the protocols registered, also when 0 the
|
|
* chip enable gpio can be toggled, and when it changes to 1 the fw
|
|
* needs to be downloaded to initialize chip side ST.
|
|
* @ll_state: the various PM states the chip can be, the states are notified
|
|
* to us, when the chip sends relevant PM packets(SLEEP_IND, WAKE_IND).
|
|
* @kim_data: reference to the parent encapsulating structure.
|
|
*
|
|
*/
|
|
struct st_data_s {
|
|
unsigned long st_state;
|
|
struct tty_struct *tty;
|
|
struct tty_ldisc_ops *ldisc_ops;
|
|
struct sk_buff *tx_skb;
|
|
#define ST_TX_SENDING 1
|
|
#define ST_TX_WAKEUP 2
|
|
unsigned long tx_state;
|
|
struct st_proto_s *list[ST_MAX];
|
|
unsigned long rx_state;
|
|
unsigned long rx_count;
|
|
struct sk_buff *rx_skb;
|
|
struct sk_buff_head txq, tx_waitq;
|
|
spinlock_t lock;
|
|
unsigned char protos_registered;
|
|
unsigned long ll_state;
|
|
void *kim_data;
|
|
};
|
|
|
|
/**
|
|
* st_int_write -
|
|
* point this to tty->driver->write or tty->ops->write
|
|
* depending upon the kernel version
|
|
*/
|
|
int st_int_write(struct st_data_s*, const unsigned char*, int);
|
|
|
|
/**
|
|
* st_write -
|
|
* internal write function, passed onto protocol drivers
|
|
* via the write function ptr of protocol struct
|
|
*/
|
|
long st_write(struct sk_buff *);
|
|
|
|
/* function to be called from ST-LL */
|
|
void st_ll_send_frame(enum proto_type, struct sk_buff *);
|
|
|
|
/* internal wake up function */
|
|
void st_tx_wakeup(struct st_data_s *st_data);
|
|
|
|
/* init, exit entry funcs called from KIM */
|
|
int st_core_init(struct st_data_s **);
|
|
void st_core_exit(struct st_data_s *);
|
|
|
|
/* ask for reference from KIM */
|
|
void st_kim_ref(struct st_data_s **);
|
|
|
|
#define GPS_STUB_TEST
|
|
#ifdef GPS_STUB_TEST
|
|
int gps_chrdrv_stub_write(const unsigned char*, int);
|
|
void gps_chrdrv_stub_init(void);
|
|
#endif
|
|
|
|
#endif /*ST_CORE_H */
|