1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun /* 3*4882a593Smuzhiyun * see notice in l1oip.c 4*4882a593Smuzhiyun */ 5*4882a593Smuzhiyun 6*4882a593Smuzhiyun /* debugging */ 7*4882a593Smuzhiyun #define DEBUG_L1OIP_INIT 0x00010000 8*4882a593Smuzhiyun #define DEBUG_L1OIP_SOCKET 0x00020000 9*4882a593Smuzhiyun #define DEBUG_L1OIP_MGR 0x00040000 10*4882a593Smuzhiyun #define DEBUG_L1OIP_MSG 0x00080000 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun /* enable to disorder received bchannels by sequence 2143658798... */ 13*4882a593Smuzhiyun /* 14*4882a593Smuzhiyun #define REORDER_DEBUG 15*4882a593Smuzhiyun */ 16*4882a593Smuzhiyun 17*4882a593Smuzhiyun /* frames */ 18*4882a593Smuzhiyun #define L1OIP_MAX_LEN 2048 /* max packet size form l2 */ 19*4882a593Smuzhiyun #define L1OIP_MAX_PERFRAME 1400 /* max data size in one frame */ 20*4882a593Smuzhiyun 21*4882a593Smuzhiyun 22*4882a593Smuzhiyun /* timers */ 23*4882a593Smuzhiyun #define L1OIP_KEEPALIVE 15 24*4882a593Smuzhiyun #define L1OIP_TIMEOUT 65 25*4882a593Smuzhiyun 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun /* socket */ 28*4882a593Smuzhiyun #define L1OIP_DEFAULTPORT 931 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun 31*4882a593Smuzhiyun /* channel structure */ 32*4882a593Smuzhiyun struct l1oip_chan { 33*4882a593Smuzhiyun struct dchannel *dch; 34*4882a593Smuzhiyun struct bchannel *bch; 35*4882a593Smuzhiyun u32 tx_counter; /* counts xmit bytes/packets */ 36*4882a593Smuzhiyun u32 rx_counter; /* counts recv bytes/packets */ 37*4882a593Smuzhiyun u32 codecstate; /* used by codec to save data */ 38*4882a593Smuzhiyun #ifdef REORDER_DEBUG 39*4882a593Smuzhiyun int disorder_flag; 40*4882a593Smuzhiyun struct sk_buff *disorder_skb; 41*4882a593Smuzhiyun u32 disorder_cnt; 42*4882a593Smuzhiyun #endif 43*4882a593Smuzhiyun }; 44*4882a593Smuzhiyun 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun /* card structure */ 47*4882a593Smuzhiyun struct l1oip { 48*4882a593Smuzhiyun struct list_head list; 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun /* card */ 51*4882a593Smuzhiyun int registered; /* if registered with mISDN */ 52*4882a593Smuzhiyun char name[MISDN_MAX_IDLEN]; 53*4882a593Smuzhiyun int idx; /* card index */ 54*4882a593Smuzhiyun int pri; /* 1=pri, 0=bri */ 55*4882a593Smuzhiyun int d_idx; /* current dchannel number */ 56*4882a593Smuzhiyun int b_num; /* number of bchannels */ 57*4882a593Smuzhiyun u32 id; /* id of connection */ 58*4882a593Smuzhiyun int ondemand; /* if transmis. is on demand */ 59*4882a593Smuzhiyun int bundle; /* bundle channels in one frm */ 60*4882a593Smuzhiyun int codec; /* codec to use for transmis. */ 61*4882a593Smuzhiyun int limit; /* limit number of bchannels */ 62*4882a593Smuzhiyun bool shutdown; /* if card is released */ 63*4882a593Smuzhiyun 64*4882a593Smuzhiyun /* timer */ 65*4882a593Smuzhiyun struct timer_list keep_tl; 66*4882a593Smuzhiyun struct timer_list timeout_tl; 67*4882a593Smuzhiyun int timeout_on; 68*4882a593Smuzhiyun struct work_struct workq; 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun /* socket */ 71*4882a593Smuzhiyun struct socket *socket; /* if set, socket is created */ 72*4882a593Smuzhiyun struct completion socket_complete;/* completion of sock thread */ 73*4882a593Smuzhiyun struct task_struct *socket_thread; 74*4882a593Smuzhiyun spinlock_t socket_lock; /* access sock outside thread */ 75*4882a593Smuzhiyun u32 remoteip; /* if all set, ip is assigned */ 76*4882a593Smuzhiyun u16 localport; /* must always be set */ 77*4882a593Smuzhiyun u16 remoteport; /* must always be set */ 78*4882a593Smuzhiyun struct sockaddr_in sin_local; /* local socket name */ 79*4882a593Smuzhiyun struct sockaddr_in sin_remote; /* remote socket name */ 80*4882a593Smuzhiyun struct msghdr sendmsg; /* ip message to send */ 81*4882a593Smuzhiyun struct kvec sendiov; /* iov for message */ 82*4882a593Smuzhiyun 83*4882a593Smuzhiyun /* frame */ 84*4882a593Smuzhiyun struct l1oip_chan chan[128]; /* channel instances */ 85*4882a593Smuzhiyun }; 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun extern int l1oip_law_to_4bit(u8 *data, int len, u8 *result, u32 *state); 88*4882a593Smuzhiyun extern int l1oip_4bit_to_law(u8 *data, int len, u8 *result); 89*4882a593Smuzhiyun extern int l1oip_alaw_to_ulaw(u8 *data, int len, u8 *result); 90*4882a593Smuzhiyun extern int l1oip_ulaw_to_alaw(u8 *data, int len, u8 *result); 91*4882a593Smuzhiyun extern void l1oip_4bit_free(void); 92*4882a593Smuzhiyun extern int l1oip_4bit_alloc(int ulaw); 93