Linux-libre 5.7.6-gnu
[librecmc/linux-libre.git] / drivers / isdn / mISDN / layer2.h
1 /* SPDX-License-Identifier: GPL-2.0-only */
2 /*
3  * Layer 2 defines
4  *
5  * Copyright 2008  by Karsten Keil <kkeil@novell.com>
6  */
7
8 #include <linux/mISDNif.h>
9 #include <linux/skbuff.h>
10 #include "fsm.h"
11
12 #define MAX_WINDOW      8
13
14 struct manager {
15         struct mISDNchannel     ch;
16         struct mISDNchannel     bcast;
17         u_long                  options;
18         struct list_head        layer2;
19         rwlock_t                lock;
20         struct FsmInst          deact;
21         struct FsmTimer         datimer;
22         struct sk_buff_head     sendq;
23         struct mISDNchannel     *up;
24         u_int                   nextid;
25         u_int                   lastid;
26 };
27
28 struct teimgr {
29         int                     ri;
30         int                     rcnt;
31         struct FsmInst          tei_m;
32         struct FsmTimer         timer;
33         int                     tval, nval;
34         struct layer2           *l2;
35         struct manager          *mgr;
36 };
37
38 struct laddr {
39         u_char  A;
40         u_char  B;
41 };
42
43 struct layer2 {
44         struct list_head        list;
45         struct mISDNchannel     ch;
46         u_long                  flag;
47         int                     id;
48         struct mISDNchannel     *up;
49         signed char             sapi;
50         signed char             tei;
51         struct laddr            addr;
52         u_int                   maxlen;
53         struct teimgr           *tm;
54         u_int                   vs, va, vr;
55         int                     rc;
56         u_int                   window;
57         u_int                   sow;
58         struct FsmInst          l2m;
59         struct FsmTimer         t200, t203;
60         int                     T200, N200, T203;
61         u_int                   next_id;
62         u_int                   down_id;
63         struct sk_buff          *windowar[MAX_WINDOW];
64         struct sk_buff_head     i_queue;
65         struct sk_buff_head     ui_queue;
66         struct sk_buff_head     down_queue;
67         struct sk_buff_head     tmp_queue;
68 };
69
70 enum {
71         ST_L2_1,
72         ST_L2_2,
73         ST_L2_3,
74         ST_L2_4,
75         ST_L2_5,
76         ST_L2_6,
77         ST_L2_7,
78         ST_L2_8,
79 };
80
81 #define L2_STATE_COUNT (ST_L2_8 + 1)
82
83 extern struct layer2    *create_l2(struct mISDNchannel *, u_int,
84                                    u_long, int, int);
85 extern int              tei_l2(struct layer2 *, u_int, u_long arg);
86
87
88 /* from tei.c */
89 extern int              l2_tei(struct layer2 *, u_int, u_long arg);
90 extern void             TEIrelease(struct layer2 *);
91 extern int              TEIInit(u_int *);
92 extern void             TEIFree(void);
93
94 #define MAX_L2HEADER_LEN 4
95
96 #define RR      0x01
97 #define RNR     0x05
98 #define REJ     0x09
99 #define SABME   0x6f
100 #define SABM    0x2f
101 #define DM      0x0f
102 #define UI      0x03
103 #define DISC    0x43
104 #define UA      0x63
105 #define FRMR    0x87
106 #define XID     0xaf
107
108 #define CMD     0
109 #define RSP     1
110
111 #define LC_FLUSH_WAIT 1
112
113 #define FLG_LAPB        0
114 #define FLG_LAPD        1
115 #define FLG_ORIG        2
116 #define FLG_MOD128      3
117 #define FLG_PEND_REL    4
118 #define FLG_L3_INIT     5
119 #define FLG_T200_RUN    6
120 #define FLG_ACK_PEND    7
121 #define FLG_REJEXC      8
122 #define FLG_OWN_BUSY    9
123 #define FLG_PEER_BUSY   10
124 #define FLG_DCHAN_BUSY  11
125 #define FLG_L1_ACTIV    12
126 #define FLG_ESTAB_PEND  13
127 #define FLG_PTP         14
128 #define FLG_FIXED_TEI   15
129 #define FLG_L2BLOCK     16
130 #define FLG_L1_NOTREADY 17
131 #define FLG_LAPD_NET    18