162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * see notice in l1oip.c 462306a36Sopenharmony_ci */ 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci/* debugging */ 762306a36Sopenharmony_ci#define DEBUG_L1OIP_INIT 0x00010000 862306a36Sopenharmony_ci#define DEBUG_L1OIP_SOCKET 0x00020000 962306a36Sopenharmony_ci#define DEBUG_L1OIP_MGR 0x00040000 1062306a36Sopenharmony_ci#define DEBUG_L1OIP_MSG 0x00080000 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci/* enable to disorder received bchannels by sequence 2143658798... */ 1362306a36Sopenharmony_ci/* 1462306a36Sopenharmony_ci #define REORDER_DEBUG 1562306a36Sopenharmony_ci*/ 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci/* frames */ 1862306a36Sopenharmony_ci#define L1OIP_MAX_LEN 2048 /* max packet size form l2 */ 1962306a36Sopenharmony_ci#define L1OIP_MAX_PERFRAME 1400 /* max data size in one frame */ 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_ci/* timers */ 2362306a36Sopenharmony_ci#define L1OIP_KEEPALIVE 15 2462306a36Sopenharmony_ci#define L1OIP_TIMEOUT 65 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ci/* socket */ 2862306a36Sopenharmony_ci#define L1OIP_DEFAULTPORT 931 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ci/* channel structure */ 3262306a36Sopenharmony_cistruct l1oip_chan { 3362306a36Sopenharmony_ci struct dchannel *dch; 3462306a36Sopenharmony_ci struct bchannel *bch; 3562306a36Sopenharmony_ci u32 tx_counter; /* counts xmit bytes/packets */ 3662306a36Sopenharmony_ci u32 rx_counter; /* counts recv bytes/packets */ 3762306a36Sopenharmony_ci u32 codecstate; /* used by codec to save data */ 3862306a36Sopenharmony_ci#ifdef REORDER_DEBUG 3962306a36Sopenharmony_ci int disorder_flag; 4062306a36Sopenharmony_ci struct sk_buff *disorder_skb; 4162306a36Sopenharmony_ci u32 disorder_cnt; 4262306a36Sopenharmony_ci#endif 4362306a36Sopenharmony_ci}; 4462306a36Sopenharmony_ci 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ci/* card structure */ 4762306a36Sopenharmony_cistruct l1oip { 4862306a36Sopenharmony_ci struct list_head list; 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ci /* card */ 5162306a36Sopenharmony_ci int registered; /* if registered with mISDN */ 5262306a36Sopenharmony_ci char name[MISDN_MAX_IDLEN]; 5362306a36Sopenharmony_ci int idx; /* card index */ 5462306a36Sopenharmony_ci int pri; /* 1=pri, 0=bri */ 5562306a36Sopenharmony_ci int d_idx; /* current dchannel number */ 5662306a36Sopenharmony_ci int b_num; /* number of bchannels */ 5762306a36Sopenharmony_ci u32 id; /* id of connection */ 5862306a36Sopenharmony_ci int ondemand; /* if transmis. is on demand */ 5962306a36Sopenharmony_ci int bundle; /* bundle channels in one frm */ 6062306a36Sopenharmony_ci int codec; /* codec to use for transmis. */ 6162306a36Sopenharmony_ci int limit; /* limit number of bchannels */ 6262306a36Sopenharmony_ci bool shutdown; /* if card is released */ 6362306a36Sopenharmony_ci 6462306a36Sopenharmony_ci /* timer */ 6562306a36Sopenharmony_ci struct timer_list keep_tl; 6662306a36Sopenharmony_ci struct timer_list timeout_tl; 6762306a36Sopenharmony_ci int timeout_on; 6862306a36Sopenharmony_ci struct work_struct workq; 6962306a36Sopenharmony_ci 7062306a36Sopenharmony_ci /* socket */ 7162306a36Sopenharmony_ci struct socket *socket; /* if set, socket is created */ 7262306a36Sopenharmony_ci struct completion socket_complete;/* completion of sock thread */ 7362306a36Sopenharmony_ci struct task_struct *socket_thread; 7462306a36Sopenharmony_ci spinlock_t socket_lock; /* access sock outside thread */ 7562306a36Sopenharmony_ci u32 remoteip; /* if all set, ip is assigned */ 7662306a36Sopenharmony_ci u16 localport; /* must always be set */ 7762306a36Sopenharmony_ci u16 remoteport; /* must always be set */ 7862306a36Sopenharmony_ci struct sockaddr_in sin_local; /* local socket name */ 7962306a36Sopenharmony_ci struct sockaddr_in sin_remote; /* remote socket name */ 8062306a36Sopenharmony_ci struct msghdr sendmsg; /* ip message to send */ 8162306a36Sopenharmony_ci struct kvec sendiov; /* iov for message */ 8262306a36Sopenharmony_ci 8362306a36Sopenharmony_ci /* frame */ 8462306a36Sopenharmony_ci struct l1oip_chan chan[128]; /* channel instances */ 8562306a36Sopenharmony_ci}; 8662306a36Sopenharmony_ci 8762306a36Sopenharmony_ciextern int l1oip_law_to_4bit(u8 *data, int len, u8 *result, u32 *state); 8862306a36Sopenharmony_ciextern int l1oip_4bit_to_law(u8 *data, int len, u8 *result); 8962306a36Sopenharmony_ciextern int l1oip_alaw_to_ulaw(u8 *data, int len, u8 *result); 9062306a36Sopenharmony_ciextern int l1oip_ulaw_to_alaw(u8 *data, int len, u8 *result); 9162306a36Sopenharmony_ciextern void l1oip_4bit_free(void); 9262306a36Sopenharmony_ciextern int l1oip_4bit_alloc(int ulaw); 93