Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/drivers/isdn/act2000/capi.h
17531 views
1
/* $Id: capi.h,v 1.6.6.2 2001/09/23 22:24:32 kai Exp $
2
*
3
* ISDN lowlevel-module for the IBM ISDN-S0 Active 2000.
4
*
5
* Author Fritz Elfert
6
* Copyright by Fritz Elfert <[email protected]>
7
*
8
* This software may be used and distributed according to the terms
9
* of the GNU General Public License, incorporated herein by reference.
10
*
11
* Thanks to Friedemann Baitinger and IBM Germany
12
*
13
*/
14
15
#ifndef CAPI_H
16
#define CAPI_H
17
18
/* Command-part of a CAPI message */
19
typedef struct actcapi_msgcmd {
20
__u8 cmd;
21
__u8 subcmd;
22
} actcapi_msgcmd;
23
24
/* CAPI message header */
25
typedef struct actcapi_msghdr {
26
__u16 len;
27
__u16 applicationID;
28
actcapi_msgcmd cmd;
29
__u16 msgnum;
30
} actcapi_msghdr;
31
32
/* CAPI message description (for debugging) */
33
typedef struct actcapi_msgdsc {
34
actcapi_msgcmd cmd;
35
char *description;
36
} actcapi_msgdsc;
37
38
/* CAPI Address */
39
typedef struct actcapi_addr {
40
__u8 len; /* Length of element */
41
__u8 tnp; /* Type/Numbering Plan */
42
__u8 num[20]; /* Caller ID */
43
} actcapi_addr;
44
45
/* CAPI INFO element mask */
46
typedef union actcapi_infonr { /* info number */
47
__u16 mask; /* info-mask field */
48
struct bmask { /* bit definitions */
49
unsigned codes : 3; /* code set */
50
unsigned rsvd : 5; /* reserved */
51
unsigned svind : 1; /* single, variable length ind. */
52
unsigned wtype : 7; /* W-element type */
53
} bmask;
54
} actcapi_infonr;
55
56
/* CAPI INFO element */
57
typedef union actcapi_infoel { /* info element */
58
__u8 len; /* length of info element */
59
__u8 display[40]; /* display contents */
60
__u8 uuinfo[40]; /* User-user info field */
61
struct cause { /* Cause information */
62
unsigned ext2 : 1; /* extension */
63
unsigned cod : 2; /* coding standard */
64
unsigned spare : 1; /* spare */
65
unsigned loc : 4; /* location */
66
unsigned ext1 : 1; /* extension */
67
unsigned cval : 7; /* Cause value */
68
} cause;
69
struct charge { /* Charging information */
70
__u8 toc; /* type of charging info */
71
__u8 unit[10]; /* charging units */
72
} charge;
73
__u8 date[20]; /* date fields */
74
__u8 stat; /* state of remote party */
75
} actcapi_infoel;
76
77
/* Message for EAZ<->MSN Mapping */
78
typedef struct actcapi_msn {
79
__u8 eaz;
80
__u8 len; /* Length of MSN */
81
__u8 msn[15];
82
} __attribute__((packed)) actcapi_msn;
83
84
typedef struct actcapi_dlpd {
85
__u8 len; /* Length of structure */
86
__u16 dlen; /* Data Length */
87
__u8 laa; /* Link Address A */
88
__u8 lab; /* Link Address B */
89
__u8 modulo; /* Modulo Mode */
90
__u8 win; /* Window size */
91
__u8 xid[100]; /* XID Information */
92
} __attribute__((packed)) actcapi_dlpd;
93
94
typedef struct actcapi_ncpd {
95
__u8 len; /* Length of structure */
96
__u16 lic;
97
__u16 hic;
98
__u16 ltc;
99
__u16 htc;
100
__u16 loc;
101
__u16 hoc;
102
__u8 modulo;
103
} __attribute__((packed)) actcapi_ncpd;
104
#define actcapi_ncpi actcapi_ncpd
105
106
/*
107
* Layout of NCCI field in a B3 DATA CAPI message is different from
108
* standard at act2000:
109
*
110
* Bit 0-4 = PLCI
111
* Bit 5-7 = Controller
112
* Bit 8-15 = NCCI
113
*/
114
#define MAKE_NCCI(plci,contr,ncci) \
115
((plci & 0x1f) | ((contr & 0x7) << 5) | ((ncci & 0xff) << 8))
116
117
#define EVAL_NCCI(fakencci,plci,contr,ncci) { \
118
plci = fakencci & 0x1f; \
119
contr = (fakencci >> 5) & 0x7; \
120
ncci = (fakencci >> 8) & 0xff; \
121
}
122
123
/*
124
* Layout of PLCI field in a B3 DATA CAPI message is different from
125
* standard at act2000:
126
*
127
* Bit 0-4 = PLCI
128
* Bit 5-7 = Controller
129
* Bit 8-15 = reserved (must be 0)
130
*/
131
#define MAKE_PLCI(plci,contr) \
132
((plci & 0x1f) | ((contr & 0x7) << 5))
133
134
#define EVAL_PLCI(fakeplci,plci,contr) { \
135
plci = fakeplci & 0x1f; \
136
contr = (fakeplci >> 5) & 0x7; \
137
}
138
139
typedef struct actcapi_msg {
140
actcapi_msghdr hdr;
141
union {
142
__u16 manuf_msg;
143
struct manufacturer_req_net {
144
__u16 manuf_msg;
145
__u16 controller;
146
__u8 nettype;
147
} manufacturer_req_net;
148
struct manufacturer_req_v42 {
149
__u16 manuf_msg;
150
__u16 controller;
151
__u32 v42control;
152
} manufacturer_req_v42;
153
struct manufacturer_conf_v42 {
154
__u16 manuf_msg;
155
__u16 controller;
156
} manufacturer_conf_v42;
157
struct manufacturer_req_err {
158
__u16 manuf_msg;
159
__u16 controller;
160
} manufacturer_req_err;
161
struct manufacturer_ind_err {
162
__u16 manuf_msg;
163
__u16 controller;
164
__u32 errcode;
165
__u8 errstring; /* actually up to 160 */
166
} manufacturer_ind_err;
167
struct manufacturer_req_msn {
168
__u16 manuf_msg;
169
__u16 controller;
170
actcapi_msn msnmap;
171
} __attribute ((packed)) manufacturer_req_msn;
172
/* TODO: TraceInit-req/conf/ind/resp and
173
* TraceDump-req/conf/ind/resp
174
*/
175
struct connect_req {
176
__u8 controller;
177
__u8 bchan;
178
__u32 infomask;
179
__u8 si1;
180
__u8 si2;
181
__u8 eaz;
182
actcapi_addr addr;
183
} __attribute__ ((packed)) connect_req;
184
struct connect_conf {
185
__u16 plci;
186
__u16 info;
187
} connect_conf;
188
struct connect_ind {
189
__u16 plci;
190
__u8 controller;
191
__u8 si1;
192
__u8 si2;
193
__u8 eaz;
194
actcapi_addr addr;
195
} __attribute__ ((packed)) connect_ind;
196
struct connect_resp {
197
__u16 plci;
198
__u8 rejectcause;
199
} connect_resp;
200
struct connect_active_ind {
201
__u16 plci;
202
actcapi_addr addr;
203
} __attribute__ ((packed)) connect_active_ind;
204
struct connect_active_resp {
205
__u16 plci;
206
} connect_active_resp;
207
struct connect_b3_req {
208
__u16 plci;
209
actcapi_ncpi ncpi;
210
} __attribute__ ((packed)) connect_b3_req;
211
struct connect_b3_conf {
212
__u16 plci;
213
__u16 ncci;
214
__u16 info;
215
} connect_b3_conf;
216
struct connect_b3_ind {
217
__u16 ncci;
218
__u16 plci;
219
actcapi_ncpi ncpi;
220
} __attribute__ ((packed)) connect_b3_ind;
221
struct connect_b3_resp {
222
__u16 ncci;
223
__u8 rejectcause;
224
actcapi_ncpi ncpi;
225
} __attribute__ ((packed)) connect_b3_resp;
226
struct disconnect_req {
227
__u16 plci;
228
__u8 cause;
229
} disconnect_req;
230
struct disconnect_conf {
231
__u16 plci;
232
__u16 info;
233
} disconnect_conf;
234
struct disconnect_ind {
235
__u16 plci;
236
__u16 info;
237
} disconnect_ind;
238
struct disconnect_resp {
239
__u16 plci;
240
} disconnect_resp;
241
struct connect_b3_active_ind {
242
__u16 ncci;
243
actcapi_ncpi ncpi;
244
} __attribute__ ((packed)) connect_b3_active_ind;
245
struct connect_b3_active_resp {
246
__u16 ncci;
247
} connect_b3_active_resp;
248
struct disconnect_b3_req {
249
__u16 ncci;
250
actcapi_ncpi ncpi;
251
} __attribute__ ((packed)) disconnect_b3_req;
252
struct disconnect_b3_conf {
253
__u16 ncci;
254
__u16 info;
255
} disconnect_b3_conf;
256
struct disconnect_b3_ind {
257
__u16 ncci;
258
__u16 info;
259
actcapi_ncpi ncpi;
260
} __attribute__ ((packed)) disconnect_b3_ind;
261
struct disconnect_b3_resp {
262
__u16 ncci;
263
} disconnect_b3_resp;
264
struct info_ind {
265
__u16 plci;
266
actcapi_infonr nr;
267
actcapi_infoel el;
268
} __attribute__ ((packed)) info_ind;
269
struct info_resp {
270
__u16 plci;
271
} info_resp;
272
struct listen_b3_req {
273
__u16 plci;
274
} listen_b3_req;
275
struct listen_b3_conf {
276
__u16 plci;
277
__u16 info;
278
} listen_b3_conf;
279
struct select_b2_protocol_req {
280
__u16 plci;
281
__u8 protocol;
282
actcapi_dlpd dlpd;
283
} __attribute__ ((packed)) select_b2_protocol_req;
284
struct select_b2_protocol_conf {
285
__u16 plci;
286
__u16 info;
287
} select_b2_protocol_conf;
288
struct select_b3_protocol_req {
289
__u16 plci;
290
__u8 protocol;
291
actcapi_ncpd ncpd;
292
} __attribute__ ((packed)) select_b3_protocol_req;
293
struct select_b3_protocol_conf {
294
__u16 plci;
295
__u16 info;
296
} select_b3_protocol_conf;
297
struct listen_req {
298
__u8 controller;
299
__u32 infomask;
300
__u16 eazmask;
301
__u16 simask;
302
} __attribute__ ((packed)) listen_req;
303
struct listen_conf {
304
__u8 controller;
305
__u16 info;
306
} __attribute__ ((packed)) listen_conf;
307
struct data_b3_req {
308
__u16 fakencci;
309
__u16 datalen;
310
__u32 unused;
311
__u8 blocknr;
312
__u16 flags;
313
} __attribute ((packed)) data_b3_req;
314
struct data_b3_ind {
315
__u16 fakencci;
316
__u16 datalen;
317
__u32 unused;
318
__u8 blocknr;
319
__u16 flags;
320
} __attribute__ ((packed)) data_b3_ind;
321
struct data_b3_resp {
322
__u16 ncci;
323
__u8 blocknr;
324
} __attribute__ ((packed)) data_b3_resp;
325
struct data_b3_conf {
326
__u16 ncci;
327
__u8 blocknr;
328
__u16 info;
329
} __attribute__ ((packed)) data_b3_conf;
330
} msg;
331
} __attribute__ ((packed)) actcapi_msg;
332
333
static inline unsigned short
334
actcapi_nextsmsg(act2000_card *card)
335
{
336
unsigned long flags;
337
unsigned short n;
338
339
spin_lock_irqsave(&card->mnlock, flags);
340
n = card->msgnum;
341
card->msgnum++;
342
card->msgnum &= 0x7fff;
343
spin_unlock_irqrestore(&card->mnlock, flags);
344
return n;
345
}
346
#define DEBUG_MSG
347
#undef DEBUG_DATA_MSG
348
#undef DEBUG_DUMP_SKB
349
350
extern int actcapi_chkhdr(act2000_card *, actcapi_msghdr *);
351
extern int actcapi_listen_req(act2000_card *);
352
extern int actcapi_manufacturer_req_net(act2000_card *);
353
extern int actcapi_manufacturer_req_errh(act2000_card *);
354
extern int actcapi_manufacturer_req_msn(act2000_card *);
355
extern int actcapi_connect_req(act2000_card *, act2000_chan *, char *, char, int, int);
356
extern void actcapi_select_b2_protocol_req(act2000_card *, act2000_chan *);
357
extern void actcapi_disconnect_b3_req(act2000_card *, act2000_chan *);
358
extern void actcapi_connect_resp(act2000_card *, act2000_chan *, __u8);
359
extern void actcapi_dispatch(struct work_struct *);
360
#ifdef DEBUG_MSG
361
extern void actcapi_debug_msg(struct sk_buff *skb, int);
362
#else
363
#define actcapi_debug_msg(skb, len)
364
#endif
365
#endif
366
367