2010-03-30 17:56:23 +04:00
/*
* Copyright ( C ) ST - Ericsson AB 2010
2013-04-23 03:57:01 +04:00
* Author : Sjur Brendeland
2010-03-30 17:56:23 +04:00
* License terms : GNU General Public License ( GPL ) version 2
*/
2010-09-06 01:31:11 +04:00
# define pr_fmt(fmt) KBUILD_MODNAME ":%s(): " fmt, __func__
2010-03-30 17:56:23 +04:00
# include <linux/stddef.h>
# include <linux/slab.h>
# include <net/caif/caif_layer.h>
# include <net/caif/cfsrvl.h>
# include <net/caif/cfpkt.h>
2010-11-01 14:52:47 +03:00
# define container_obj(layr) ((struct cfsrvl *) layr)
2010-03-30 17:56:23 +04:00
static int cfdbgl_receive ( struct cflayer * layr , struct cfpkt * pkt ) ;
static int cfdbgl_transmit ( struct cflayer * layr , struct cfpkt * pkt ) ;
struct cflayer * cfdbgl_create ( u8 channel_id , struct dev_info * dev_info )
{
2011-08-25 17:22:24 +04:00
struct cfsrvl * dbg = kzalloc ( sizeof ( struct cfsrvl ) , GFP_ATOMIC ) ;
if ( ! dbg )
2010-03-30 17:56:23 +04:00
return NULL ;
caif_assert ( offsetof ( struct cfsrvl , layer ) = = 0 ) ;
2010-06-17 10:55:38 +04:00
cfsrvl_init ( dbg , channel_id , dev_info , false ) ;
2010-03-30 17:56:23 +04:00
dbg - > layer . receive = cfdbgl_receive ;
dbg - > layer . transmit = cfdbgl_transmit ;
snprintf ( dbg - > layer . name , CAIF_LAYER_NAME_SZ - 1 , " dbg%d " , channel_id ) ;
return & dbg - > layer ;
}
static int cfdbgl_receive ( struct cflayer * layr , struct cfpkt * pkt )
{
return layr - > up - > receive ( layr - > up , pkt ) ;
}
static int cfdbgl_transmit ( struct cflayer * layr , struct cfpkt * pkt )
{
2010-11-01 14:52:47 +03:00
struct cfsrvl * service = container_obj ( layr ) ;
struct caif_payload_info * info ;
int ret ;
2012-03-11 14:28:31 +04:00
if ( ! cfsrvl_ready ( service , & ret ) ) {
cfpkt_destroy ( pkt ) ;
2010-11-01 14:52:47 +03:00
return ret ;
2012-03-11 14:28:31 +04:00
}
2010-11-01 14:52:47 +03:00
/* Add info for MUX-layer to route the packet out */
info = cfpkt_info ( pkt ) ;
info - > channel_id = service - > layer . id ;
info - > dev_info = & service - > dev_info ;
2010-03-30 17:56:23 +04:00
return layr - > dn - > transmit ( layr - > dn , pkt ) ;
}