OpenCores
URL https://opencores.org/ocsvn/test_project/test_project/trunk

Subversion Repositories test_project

[/] [test_project/] [trunk/] [linux_sd_driver/] [drivers/] [isdn/] [act2000/] [capi.h] - Blame information for rev 62

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 62 marcus.erl
/* $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      <fritz@isdn4linux.de>
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

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.