2010-03-30 13:56:21 +00:00
/*
* Copyright ( C ) ST - Ericsson AB 2010
2013-04-22 23:57:01 +00:00
* Author : Sjur Brendeland
2010-03-30 13:56:21 +00:00
* License terms : GNU General Public License ( GPL ) version 2
*/
# ifndef CFSRVL_H_
# define CFSRVL_H_
# include <linux/list.h>
# include <linux/stddef.h>
# include <linux/types.h>
2010-04-28 08:54:36 +00:00
# include <linux/kref.h>
2011-05-13 02:44:03 +00:00
# include <linux/rculist.h>
2010-04-28 08:54:36 +00:00
2010-03-30 13:56:21 +00:00
struct cfsrvl {
struct cflayer layer ;
bool open ;
bool phy_flow_on ;
bool modem_flow_on ;
2010-06-17 06:55:38 +00:00
bool supports_flowctrl ;
2011-05-13 02:44:03 +00:00
void ( * release ) ( struct cflayer * layer ) ;
2010-03-30 13:56:21 +00:00
struct dev_info dev_info ;
2011-05-13 02:44:03 +00:00
void ( * hold ) ( struct cflayer * lyr ) ;
void ( * put ) ( struct cflayer * lyr ) ;
struct rcu_head rcu ;
2010-03-30 13:56:21 +00:00
} ;
struct cflayer * cfvei_create ( u8 linkid , struct dev_info * dev_info ) ;
struct cflayer * cfdgml_create ( u8 linkid , struct dev_info * dev_info ) ;
struct cflayer * cfutill_create ( u8 linkid , struct dev_info * dev_info ) ;
struct cflayer * cfvidl_create ( u8 linkid , struct dev_info * dev_info ) ;
2010-06-17 06:55:39 +00:00
struct cflayer * cfrfml_create ( u8 linkid , struct dev_info * dev_info ,
int mtu_size ) ;
2010-03-30 13:56:21 +00:00
struct cflayer * cfdbgl_create ( u8 linkid , struct dev_info * dev_info ) ;
2011-05-13 02:44:03 +00:00
void cfsrvl_ctrlcmd ( struct cflayer * layr , enum caif_ctrlcmd ctrl ,
int phyid ) ;
2010-03-30 13:56:21 +00:00
bool cfsrvl_phyid_match ( struct cflayer * layer , int phyid ) ;
2011-04-11 10:43:50 +00:00
2010-03-30 13:56:21 +00:00
void cfsrvl_init ( struct cfsrvl * service ,
2010-06-17 06:55:38 +00:00
u8 channel_id ,
struct dev_info * dev_info ,
bool supports_flowctrl ) ;
2010-03-30 13:56:21 +00:00
bool cfsrvl_ready ( struct cfsrvl * service , int * err ) ;
u8 cfsrvl_getphyid ( struct cflayer * layer ) ;
2010-04-28 08:54:36 +00:00
static inline void cfsrvl_get ( struct cflayer * layr )
{
2011-05-13 02:44:03 +00:00
struct cfsrvl * s = container_of ( layr , struct cfsrvl , layer ) ;
if ( layr = = NULL | | layr - > up = = NULL | | s - > hold = = NULL )
2010-04-28 08:54:36 +00:00
return ;
2011-05-13 02:44:03 +00:00
s - > hold ( layr - > up ) ;
2010-04-28 08:54:36 +00:00
}
static inline void cfsrvl_put ( struct cflayer * layr )
{
2011-05-13 02:44:03 +00:00
struct cfsrvl * s = container_of ( layr , struct cfsrvl , layer ) ;
if ( layr = = NULL | | layr - > up = = NULL | | s - > hold = = NULL )
2010-04-28 08:54:36 +00:00
return ;
2010-06-17 06:55:39 +00:00
2011-05-13 02:44:03 +00:00
s - > put ( layr - > up ) ;
2010-04-28 08:54:36 +00:00
}
2010-03-30 13:56:21 +00:00
# endif /* CFSRVL_H_ */