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