2005-04-17 02:20:36 +04:00
/*
* CAPI encode / decode prototypes and defines
*
* Copyright ( C ) 1996 Universidade de Lisboa
2012-02-20 07:52:38 +04:00
*
2005-04-17 02:20:36 +04:00
* Written by Pedro Roque Marques ( roque @ di . fc . ul . pt )
*
2012-02-20 07:52:38 +04:00
* This software may be used and distributed according to the terms of
2005-04-17 02:20:36 +04:00
* the GNU General Public License , incorporated herein by reference .
*/
# ifndef CAPI_H
# define CAPI_H
# define REQ_CAUSE 0x01
# define REQ_DISPLAY 0x04
2012-02-20 07:52:38 +04:00
# define REQ_USER_TO_USER 0x08
2005-04-17 02:20:36 +04:00
2012-02-20 07:52:38 +04:00
# define AppInfoMask REQ_CAUSE | REQ_DISPLAY | REQ_USER_TO_USER
2005-04-17 02:20:36 +04:00
/* Connection Setup */
2012-02-20 07:52:38 +04:00
extern int capi_conn_req ( const char * calledPN , struct sk_buff * * buf ,
2005-04-17 02:20:36 +04:00
int proto ) ;
2012-02-20 07:52:38 +04:00
extern int capi_decode_conn_conf ( struct pcbit_chan * chan , struct sk_buff * skb ,
int * complete ) ;
2005-04-17 02:20:36 +04:00
2012-02-20 07:52:38 +04:00
extern int capi_decode_conn_ind ( struct pcbit_chan * chan , struct sk_buff * skb ,
2005-04-17 02:20:36 +04:00
struct callb_data * info ) ;
2012-02-20 07:52:38 +04:00
extern int capi_conn_resp ( struct pcbit_chan * chan , struct sk_buff * * skb ) ;
2005-04-17 02:20:36 +04:00
2012-02-20 07:52:38 +04:00
extern int capi_conn_active_req ( struct pcbit_chan * chan , struct sk_buff * * skb ) ;
extern int capi_decode_conn_actv_conf ( struct pcbit_chan * chan ,
2005-04-17 02:20:36 +04:00
struct sk_buff * skb ) ;
2012-02-20 07:52:38 +04:00
extern int capi_decode_conn_actv_ind ( struct pcbit_chan * chan ,
2005-04-17 02:20:36 +04:00
struct sk_buff * skb ) ;
2012-02-20 07:52:38 +04:00
extern int capi_conn_active_resp ( struct pcbit_chan * chan ,
2005-04-17 02:20:36 +04:00
struct sk_buff * * skb ) ;
/* Data */
extern int capi_select_proto_req ( struct pcbit_chan * chan , struct sk_buff * * skb ,
int outgoing ) ;
2012-02-20 07:52:38 +04:00
extern int capi_decode_sel_proto_conf ( struct pcbit_chan * chan ,
2005-04-17 02:20:36 +04:00
struct sk_buff * skb ) ;
2012-02-20 07:52:38 +04:00
extern int capi_activate_transp_req ( struct pcbit_chan * chan ,
2005-04-17 02:20:36 +04:00
struct sk_buff * * skb ) ;
2012-02-20 07:52:38 +04:00
extern int capi_decode_actv_trans_conf ( struct pcbit_chan * chan ,
2005-04-17 02:20:36 +04:00
struct sk_buff * skb ) ;
2012-02-20 07:52:38 +04:00
extern int capi_tdata_req ( struct pcbit_chan * chan , struct sk_buff * skb ) ;
extern int capi_tdata_resp ( struct pcbit_chan * chan , struct sk_buff * * skb ) ;
2005-04-17 02:20:36 +04:00
/* Connection Termination */
extern int capi_disc_req ( ushort callref , struct sk_buff * * skb , u_char cause ) ;
extern int capi_decode_disc_ind ( struct pcbit_chan * chan , struct sk_buff * skb ) ;
extern int capi_disc_resp ( struct pcbit_chan * chan , struct sk_buff * * skb ) ;
# ifdef DEBUG
extern int capi_decode_debug_188 ( u_char * hdr , ushort hdrlen ) ;
# endif
2012-02-20 07:52:38 +04:00
static inline struct pcbit_chan *
2005-04-17 02:20:36 +04:00
capi_channel ( struct pcbit_dev * dev , struct sk_buff * skb )
{
ushort callref ;
2012-02-20 07:52:38 +04:00
callref = * ( ( ushort * ) skb - > data ) ;
2005-04-17 02:20:36 +04:00
skb_pull ( skb , 2 ) ;
if ( dev - > b1 - > callref = = callref )
return dev - > b1 ;
else if ( dev - > b2 - > callref = = callref )
return dev - > b2 ;
return NULL ;
}
# endif