1$Id: INTERFACE,v 1.15.8.2 2001/03/13 16:17:07 kai Exp $
2
3Description of the Interface between Linklevel and Hardwarelevel
4  of isdn4linux:
5
6
7  The Communication between Linklevel (LL) and Hardwarelevel (HL)
8  is based on the struct isdn_if (defined in isdnif.h).
9
10  An HL-driver can register itself at LL by calling the function
11  register_isdn() with a pointer to that struct. Prior to that, it has
12  to preset some of the fields of isdn_if. The LL sets the rest of
13  the fields. All further communication is done via callbacks using
14  the function-pointers defined in isdn_if.
15
16  Changes/Version numbering:
17
18  During development of the ISDN subsystem, several changes have been
19  made to the interface. Before it went into kernel, the package
20  had a unique version number. The last version, distributed separately
21  was 0.7.4. When the subsystem went into kernel, every functional unit
22  got a separate version number. These numbers are shown at initialization,
23  separated by slashes:
24
25     c.c/t.t/n.n/p.p/a.a/v.v
26
27  where
28
29   c.c is the revision of the common code.
30   t.t is the revision of the tty related code.
31   n.n is the revision of the network related code.
32   p.p is the revision of the ppp related code.
33   a.a is the revision of the audio related code.
34   v.v is the revision of the V.110 related code.
35
36  Changes in this document are marked with '***CHANGEx' where x representing
37  the version number. If that number starts with 0, it refers to the old,
38  separately distributed package. If it starts with one of the letters
39  above, it refers to the revision of the corresponding module. 
40  ***CHANGEIx refers to the revision number of the isdnif.h  
41
421. Description of the fields of isdn_if:
43
44  int channels;
45
46    This field has to be set by the HL-driver to the number of channels
47    supported prior to calling register_isdn(). Upon return of the call,
48    the LL puts an id there, which has to be used by the HL-driver when
49    invoking the other callbacks.
50
51  int maxbufsize;
52
53    ***CHANGE0.6: New since this version.
54
55    Also to be preset by the HL-driver. With this value the HL-driver
56    tells the LL the maximum size of a data-packet it will accept. 
57
58  unsigned long features;
59
60    To be preset by the HL-driver. Using this field, the HL-driver
61    announces the features supported. At the moment this is limited to
62    report the supported layer2 and layer3-protocols. For setting this
63    field the constants ISDN_FEATURE..., declared in isdnif.h have to be
64    used.
65
66    ***CHANGE0.7.1: The line type (1TR6, EDSS1) has to be set.
67
68  unsigned short hl_hdrlen;
69
70    ***CHANGE0.7.4: New field.
71
72    To be preset by the HL-driver, if it supports sk_buff's. The driver
73    should put here the amount of additional space needed in sk_buff's for
74    its internal purposes. Drivers not supporting sk_buff's should 
75    initialize this field to 0.
76
77  void (*rcvcallb_skb)(int, int, struct sk_buff *)
78
79    ***CHANGE0.7.4: New field.
80
81    This field will be set by LL. The HL-driver delivers received data-
82    packets by calling this function. Upon calling, the HL-driver must
83    already have its private data pulled off the head of the sk_buff.
84
85    Parameter:
86      int              driver-Id
87      int              Channel-number locally to the driver. (starting with 0)
88      struct sk_buff * Pointer to sk_buff, containing received data.
89
90  int (*statcallb)(isdn_ctrl*);
91
92    This field will be set by LL. This function has to be called by the
93    HL-driver for signaling status-changes or other events to the LL.
94
95    Parameter:
96      isdn_ctrl*
97
98      The struct isdn_ctrl also defined in isdn_if. The exact meanings of its
99      fields are described together with the descriptions of the possible
100      events. Here is only a short description of the fields:
101
102        driver  = driver Id.
103        command = event-type. (one of the constants ISDN_STAT_...)
104        arg     = depends on event-type.
105        num     = depends on event-type.
106
107    Returnvalue:
108      0 on success, else -1
109
110  int (*command)(isdn_ctrl*);
111
112    This field has to be preset by the HL-driver. It points to a function,
113    to be called by LL to perform functions like dialing, B-channel
114    setup, etc. The exact meaning of the parameters is described with the
115    descriptions of the possible commands.
116
117    Parameter:
118      isdn_ctrl*
119        driver  = driver-Id
120        command = command to perform. (one of the constants ISDN_CMD_...)
121        arg     = depends on command.
122        num     = depends on command.
123    
124    Returnvalue:
125      >=0 on success, else error-code (-ENODEV etc.)
126
127  int (*writebuf_skb)(int, int, int, struct sk_buff *)
128
129    ***CHANGE0.7.4: New field.
130    ***CHANGEI.1.21: New field.
131
132    This field has to be preset by the HL-driver. The given function will
133    be called by the LL for delivering data to be send via B-Channel.
134
135 
136    Parameter:
137      int              driver-Id ***CHANGE0.7.4: New parameter.
138      int              channel-number locally to the HL-driver. (starts with 0)
139      int	       ack ***ChangeI1.21: New parameter
140		       If this is !0, the driver has to signal the delivery
141		       by sending an ISDN_STAT_BSENT. If this is 0, the driver
142		       MUST NOT send an ISDN_STAT_BSENT.
143      struct sk_buff * Pointer to sk_buff containing data to be send via
144                       B-channel.
145
146    Returnvalue:
147      Length of data accepted on success, else error-code (-EINVAL on
148      oversized packets etc.)
149
150  int (*writecmd)(u_char*, int, int, int, int);
151
152    This field has to be preset by the HL-driver. The given function will be
153    called to perform write-requests on /dev/isdnctrl (i.e. sending commands
154    to the card) The data-format is hardware-specific. This function is
155    intended for debugging only. It is not necessary for normal operation
156    and never will be called by the tty-emulation- or network-code. If
157    this function is not supported, the driver has to set NULL here.
158
159    Parameter:
160      u_char* pointer to data.
161      int     length of data.
162      int     flag: 0 = call from within kernel-space. (HL-driver must use
163                        memcpy, may NOT use schedule())
164                    1 = call from user-space. (HL-driver must use
165                        memcpy_fromfs, use of schedule() allowed)
166      int     driver-Id.
167      int     channel-number locally to the HL-driver. (starts with 0)
168
169***CHANGEI1.14: The driver-Id and channel-number are new since this revision.
170
171    Returnvalue:
172      Length of data accepted on success, else error-code (-EINVAL etc.)
173
174  int (*readstat)(u_char*, int, int, int, int);
175
176    This field has to be preset by the HL-driver. The given function will be
177    called to perform read-requests on /dev/isdnctrl (i.e. reading replies
178    from the card) The data-format is hardware-specific. This function is
179    intended for debugging only. It is not necessary for normal operation
180    and never will be called by the tty-emulation- or network-code. If
181    this function is not supported, the driver has to set NULL here.
182
183    Parameter:
184      u_char* pointer to data.
185      int     length of data.
186      int     flag: 0 = call from within kernel-space. (HL-driver must use
187                        memcpy, may NOT use schedule())
188                    1 = call from user-space. (HL-driver must use
189                        memcpy_fromfs, use of schedule() allowed)
190      int     driver-Id.
191      int     channel-number locally to the HL-driver. (starts with 0)
192
193***CHANGEI1.14: The driver-Id and channel-number are new since this revision.
194
195    Returnvalue:
196      Length of data on success, else error-code (-EINVAL etc.)
197
198  char id[20];
199       ***CHANGE0.7: New since this version.
200
201   This string has to be preset by the HL-driver. Its purpose is for
202   identification of the driver by the user. Eg.: it is shown in the
203   status-info of /dev/isdninfo. Furthermore it is used as Id for binding
204   net-interfaces to a specific channel. If a string of length zero is
205   given, upon return, isdn4linux will replace it by a generic name. (line0,
206   line1 etc.) It is recommended to make this string configurable during
207   module-load-time. (copy a global variable to this string.) For doing that,
208   modules 1.2.8 or newer are necessary.
209
2102. Description of the commands, a HL-driver has to support:
211
212   All commands will be performed by calling the function command() described
213   above from within the LL. The field command of the struct-parameter will
214   contain the desired command, the field driver is always set to the
215   appropriate driver-Id.
216
217   Until now, the following commands are defined:
218
219***CHANGEI1.34: The parameter "num" has been replaced by a union "parm" containing
220                the old "num" and a new setup_type struct used for ISDN_CMD_DIAL
221                and ISDN_STAT_ICALL callback.
222
223   ISDN_CMD_IOCTL:
224
225     This command is intended for performing ioctl-calls for configuring
226     hardware or similar purposes (setting port-addresses, loading firmware
227     etc.) For this purpose, in the LL all ioctl-calls with an argument
228     >= IIOCDRVCTL (0x100) will be handed transparently to this
229     function after subtracting 0x100 and placing the result in arg.
230     Example:
231       If a userlevel-program calls ioctl(0x101,...) the function gets
232       called with the field command set to 1.
233
234     Parameter:
235       driver   = driver-Id.
236       command  = ISDN_CMD_IOCTL
237       arg      = Original ioctl-cmd - IIOCDRVCTL
238       parm.num = first bytes filled with (unsigned long)arg
239   
240     Returnvalue:
241       Depending on driver.
242
243  
244  ISDN_CMD_DIAL:
245
246    This command is used to tell the HL-driver it should dial a given
247    number.
248
249    Parameter:
250      driver      = driver-Id.
251      command     = ISDN_CMD_DIAL
252      arg         = channel-number locally to the driver. (starting with 0)
253      
254      parm.setup.phone  = An ASCII-String containing the number to dial.
255      parm.setup.eazmsn = An ASCII-Sting containing the own EAZ or MSN.
256      parm.setup.si1    = The Service-Indicator.
257      parm.setup.si2    = Additional Service-Indicator.
258
259                    If the Line has been designed as SPV (a special german
260                    feature, meaning semi-leased-line) the phone has to
261                    start with an "S".
262      ***CHANGE0.6: In previous versions the EAZ has been given in the
263                    highbyte of arg.
264    ***CHANGE0.7.1: New since this version: ServiceIndicator and AddInfo.
265
266  ISDN_CMD_ACCEPTD:
267
268    With this command, the HL-driver is told to accept a D-Channel-setup.
269    (Response to an incoming call)
270
271    Parameter:
272      driver      = driver-Id.
273      command     = ISDN_CMD_ACCEPTD
274      arg         = channel-number locally to the driver. (starting with 0)
275      parm        = unused.
276
277  ISDN_CMD_ACCEPTB:
278
279    With this command, the HL-driver is told to perform a B-Channel-setup.
280    (after establishing D-Channel-Connection)
281
282    Parameter:
283      driver      = driver-Id.
284      command     = ISDN_CMD_ACCEPTB
285      arg         = channel-number locally to the driver. (starting with 0)
286      parm        = unused.
287
288  ISDN_CMD_HANGUP:
289
290    With this command, the HL-driver is told to hangup (B-Channel if
291    established first, then D-Channel). This command is also used for
292    actively rejecting an incoming call.
293
294    Parameter:
295      driver      = driver-Id.
296      command     = ISDN_CMD_HANGUP
297      arg         = channel-number locally to the driver. (starting with 0)
298      parm        = unused.
299
300  ISDN_CMD_CLREAZ:
301
302    With this command, the HL-driver is told not to signal incoming
303    calls to the LL.
304
305    Parameter:
306      driver      = driver-Id.
307      command     = ISDN_CMD_CLREAZ
308      arg         = channel-number locally to the driver. (starting with 0)
309      parm        = unused.
310
311  ISDN_CMD_SETEAZ:
312
313    With this command, the HL-driver is told to signal incoming calls for
314    the given EAZs/MSNs to the LL.
315
316    Parameter:
317      driver      = driver-Id.
318      command     = ISDN_CMD_SETEAZ
319      arg         = channel-number locally to the driver. (starting with 0)
320      parm.num    = ASCII-String, containing the desired EAZ's/MSN's
321                    (comma-separated). If an empty String is given, the
322                    HL-driver should respond to ALL incoming calls,
323                    regardless of the destination-address.
324      ***CHANGE0.6: New since this version the "empty-string"-feature.
325
326  ISDN_CMD_GETEAZ: (currently unused)
327
328    With this command, the HL-driver is told to report the current setting
329    given with ISDN_CMD_SETEAZ.
330
331    Parameter:
332      driver      = driver-Id.
333      command     = ISDN_CMD_GETEAZ
334      arg         = channel-number locally to the driver. (starting with 0)
335      parm.num    = ASCII-String, containing the current EAZ's/MSN's
336
337  ISDN_CMD_SETSIL: (currently unused)
338
339    With this command, the HL-driver is told to signal only incoming
340    calls with the given Service-Indicators.
341
342    Parameter:
343      driver      = driver-Id.
344      command     = ISDN_CMD_SETSIL
345      arg         = channel-number locally to the driver. (starting with 0)
346      parm.num    = ASCII-String, containing the desired Service-Indicators.
347
348  ISDN_CMD_GETSIL: (currently unused)
349
350    With this command, the HL-driver is told to return the current
351    Service-Indicators it will respond to.
352
353    Parameter:
354      driver      = driver-Id.
355      command     = ISDN_CMD_SETSIL
356      arg         = channel-number locally to the driver. (starting with 0)
357      parm.num    = ASCII-String, containing the current Service-Indicators.
358
359  ISDN_CMD_SETL2:
360
361    With this command, the HL-driver is told to select the given Layer-2-
362    protocol. This command is issued by the LL prior to ISDN_CMD_DIAL or
363    ISDN_CMD_ACCEPTD.
364
365
366    Parameter:
367      driver      = driver-Id.
368      command     = ISDN_CMD_SETL2
369      arg         = channel-number locally to the driver. (starting with 0)
370                    logical or'ed with (protocol-Id << 8)
371                    protocol-Id is one of the constants ISDN_PROTO_L2...
372      parm        = unused.
373
374  ISDN_CMD_GETL2: (currently unused)
375
376    With this command, the HL-driver is told to return the current
377    setting of the Layer-2-protocol.
378
379    Parameter:
380      driver      = driver-Id.
381      command     = ISDN_CMD_GETL2
382      arg         = channel-number locally to the driver. (starting with 0)
383      parm        = unused.
384    Returnvalue:
385      current protocol-Id (one of the constants ISDN_L2_PROTO)
386
387  ISDN_CMD_SETL3:
388
389    With this command, the HL-driver is told to select the given Layer-3-
390    protocol. This command is issued by the LL prior to ISDN_CMD_DIAL or
391    ISDN_CMD_ACCEPTD.
392
393
394    Parameter:
395      driver      = driver-Id.
396      command     = ISDN_CMD_SETL3
397      arg         = channel-number locally to the driver. (starting with 0)
398                    logical or'ed with (protocol-Id << 8)
399                    protocol-Id is one of the constants ISDN_PROTO_L3...
400      parm.fax    = Pointer to T30_s fax struct. (fax usage only)
401
402  ISDN_CMD_GETL2: (currently unused)
403
404    With this command, the HL-driver is told to return the current
405    setting of the Layer-3-protocol.
406
407    Parameter:
408      driver      = driver-Id.
409      command     = ISDN_CMD_GETL3
410      arg         = channel-number locally to the driver. (starting with 0)
411      parm        = unused.
412    Returnvalue:
413      current protocol-Id (one of the constants ISDN_L3_PROTO)
414
415  ISDN_CMD_PROCEED: 
416
417    With this command, the HL-driver is told to proceed with a incoming call.
418
419    Parameter:
420      driver      = driver-Id.
421      command     = ISDN_CMD_PROCEED
422      arg         = channel-number locally to the driver. (starting with 0)
423      setup.eazmsn= empty string or string send as uus1 in DSS1 with 
424                    PROCEED message
425
426  ISDN_CMD_ALERT: 
427
428    With this command, the HL-driver is told to alert a proceeding call.
429
430    Parameter:
431      driver      = driver-Id.
432      command     = ISDN_CMD_ALERT
433      arg         = channel-number locally to the driver. (starting with 0)
434      setup.eazmsn= empty string or string send as uus1 in DSS1 with 
435                    ALERT message
436
437  ISDN_CMD_REDIR: 
438
439    With this command, the HL-driver is told to redirect a call in proceeding
440    or alerting state.  
441
442    Parameter:
443      driver      = driver-Id.
444      command     = ISDN_CMD_REDIR
445      arg         = channel-number locally to the driver. (starting with 0)
446      setup.eazmsn= empty string or string send as uus1 in DSS1 protocol
447      setup.screen= screening indicator
448      setup.phone = redirected to party number
449
450  ISDN_CMD_PROT_IO:
451
452    With this call, the LL-driver invokes protocol specific features through
453    the LL.
454    The call is not implicitely bound to a connection.
455
456    Parameter:
457      driver      = driver-Id
458      command     = ISDN_CMD_PROT_IO
459      arg         = The lower 8 Bits define the addressed protocol as defined
460                    in ISDN_PTYPE..., the upper bits are used to differentiate
461                    the protocol specific CMD.  
462      
463      para        = protocol and function specific. See isdnif.h for detail.
464
465
466  ISDN_CMD_FAXCMD:
467
468    With this command the HL-driver receives a fax sub-command.
469    For details refer to INTERFACE.fax
470
471    Parameter:
472      driver      = driver-Id.
473      command     = ISDN_CMD_FAXCMD
474      arg         = channel-number locally to the driver. (starting with 0)
475      parm        = unused.
476
477
4783. Description of the events to be signaled by the HL-driver to the LL.
479
480  All status-changes are signaled via calling the previously described
481  function statcallb(). The field command of the struct isdn_cmd has
482  to be set by the HL-driver with the appropriate Status-Id (event-number).
483  The field arg has to be set to the channel-number (locally to the driver,
484  starting with 0) to which this event applies. (Exception: STAVAIL-event)
485
486  Until now, the following Status-Ids are defined:
487
488  ISDN_STAT_AVAIL:
489
490    With this call, the HL-driver signals the availability of new data
491    for readstat(). Used only for debugging-purposes, see description
492    of readstat().
493
494    Parameter:
495      driver      = driver-Id
496      command     = ISDN_STAT_STAVAIL
497      arg         = length of available data.
498      parm        = unused.
499
500  ISDN_STAT_ICALL:
501  ISDN_STAT_ICALLW:
502
503    With this call, the HL-driver signals an incoming call to the LL.
504    If ICALLW is signalled the incoming call is a waiting call without
505    a available B-chan.
506
507    Parameter:
508      driver            = driver-Id
509      command           = ISDN_STAT_ICALL
510      arg               = channel-number, locally to the driver. (starting with 0)
511      para.setup.phone  = Callernumber.
512      para.setup.eazmsn = CalledNumber.
513      para.setup.si1    = Service Indicator.
514      para.setup.si2    = Additional Service Indicator.
515      para.setup.plan   = octet 3 from Calling party number Information Element.
516      para.setup.screen = octet 3a from Calling party number Information Element.
517
518    Return:
519      0           = No device matching this call.
520      1           = At least one device matching this call (RING on ttyI).
521                    HL-driver may send ALERTING on the D-channel in this case.
522      2           = Call will be rejected.
523      3           = Incoming called party number is currently incomplete.
524                    Additional digits are required. 
525                    Used for signalling with PtP connections.
526      4	          = Call will be held in a proceeding state 
527                    (HL driver sends PROCEEDING)
528                    Used when a user space prog needs time to interpret a call
529		    para.setup.eazmsn may be filled with an uus1 message of
530		    30 octets maximum. Empty string if no uus. 
531      5           = Call will be actively deflected to another party
532                    Only available in DSS1/EURO protocol
533		    para.setup.phone must be set to destination party number
534		    para.setup.eazmsn may be filled with an uus1 message of
535		    30 octets maximum. Empty string if no uus. 
536      -1          = An error happened. (Invalid parameters for example.)
537  The keypad support now is included in the dial command.	        
538
539
540  ISDN_STAT_RUN:
541
542    With this call, the HL-driver signals availability of the ISDN-card.
543    (after initializing, loading firmware)
544
545    Parameter:
546      driver      = driver-Id
547      command     = ISDN_STAT_RUN
548      arg         = unused.
549      parm        = unused.
550
551  ISDN_STAT_STOP:
552
553    With this call, the HL-driver signals unavailability of the ISDN-card.
554    (before unloading, while resetting/reconfiguring the card)
555
556    Parameter:
557      driver      = driver-Id
558      command     = ISDN_STAT_STOP
559      arg         = unused.
560      parm        = unused.
561
562  ISDN_STAT_DCONN:
563
564   With this call, the HL-driver signals the successful establishment of
565   a D-Channel-connection. (Response to ISDN_CMD_ACCEPTD or ISDN_CMD_DIAL)
566
567    Parameter:
568      driver      = driver-Id
569      command     = ISDN_STAT_DCONN
570      arg         = channel-number, locally to the driver. (starting with 0)
571      parm        = unused.
572
573  ISDN_STAT_BCONN:
574
575   With this call, the HL-driver signals the successful establishment of
576   a B-Channel-connection. (Response to ISDN_CMD_ACCEPTB or because the
577   remote-station has initiated establishment)
578
579   The HL driver should call this when the logical l2/l3 protocol 
580   connection on top of the physical B-channel is established.
581
582    Parameter:
583      driver      = driver-Id
584      command     = ISDN_STAT_BCONN
585      arg         = channel-number, locally to the driver. (starting with 0)
586      parm.num    = ASCII-String, containing type of connection (for analog
587		    modem only). This will be appended to the CONNECT message
588		    e.g. 14400/V.32bis
589
590  ISDN_STAT_DHUP:
591
592   With this call, the HL-driver signals the shutdown of a
593   D-Channel-connection. This could be a response to a prior ISDN_CMD_HANGUP,
594   or caused by a remote-hangup or if the remote-station has actively
595   rejected a call.
596
597    Parameter:
598      driver      = driver-Id
599      command     = ISDN_STAT_DHUP
600      arg         = channel-number, locally to the driver. (starting with 0)
601      parm        = unused.
602
603  ISDN_STAT_BHUP:
604
605   With this call, the HL-driver signals the shutdown of a
606   B-Channel-connection. This could be a response to a prior ISDN_CMD_HANGUP,
607   or caused by a remote-hangup.
608
609   The HL driver should call this as soon as the logical l2/l3 protocol 
610   connection on top of the physical B-channel is released.
611
612    Parameter:
613      driver      = driver-Id
614      command     = ISDN_STAT_BHUP
615      arg         = channel-number, locally to the driver. (starting with 0)
616      parm        = unused.
617
618  ISDN_STAT_CINF:
619
620   With this call, the HL-driver delivers charge-unit information to the
621   LL.
622
623    Parameter:
624      driver      = driver-Id
625      command     = ISDN_STAT_CINF
626      arg         = channel-number, locally to the driver. (starting with 0)
627      parm.num    = ASCII string containing charge-units (digits only).
628
629  ISDN_STAT_LOAD: (currently unused)
630
631  ISDN_STAT_UNLOAD:
632
633   With this call, the HL-driver signals that it will be unloaded now. This
634   tells the LL to release all corresponding data-structures.
635
636    Parameter:
637      driver      = driver-Id
638      command     = ISDN_STAT_UNLOAD
639      arg         = unused.
640      parm        = unused.
641
642  ISDN_STAT_BSENT:
643
644    With this call the HL-driver signals the delivery of a data-packet.
645    This callback is used by the network-interfaces only, tty-Emulation
646    does not need this call.
647
648    Parameter:
649      driver      = driver-Id
650      command     = ISDN_STAT_BSENT
651      arg         = channel-number, locally to the driver. (starting with 0)
652      parm.length = ***CHANGEI.1.21: New field.
653		    the driver has to set this to the original length
654		    of the skb at the time of receiving it from the linklevel.
655
656  ISDN_STAT_NODCH:
657
658    With this call, the driver has to respond to a prior ISDN_CMD_DIAL, if
659    no D-Channel is available.
660
661    Parameter:
662      driver      = driver-Id
663      command     = ISDN_STAT_NODCH
664      arg         = channel-number, locally to the driver. (starting with 0)
665      parm        = unused.
666
667  ISDN_STAT_ADDCH: 
668
669    This call is for HL-drivers, which are unable to check card-type
670    or numbers of supported channels before they have loaded any firmware
671    using ioctl. Those HL-driver simply set the channel-parameter to a
672    minimum channel-number when registering, and later if they know
673    the real amount, perform this call, allocating additional channels.
674
675    Parameter:
676      driver      = driver-Id
677      command     = ISDN_STAT_ADDCH
678      arg         = number of channels to be added.
679      parm        = unused.
680
681  ISDN_STAT_CAUSE:
682
683    With this call, the HL-driver delivers CAUSE-messages to the LL.
684    Currently the LL does not use this messages. Their contents is simply
685    logged via kernel-messages. Therefore, currently the format of the
686    messages is completely free. However they should be printable.
687
688    Parameter:
689      driver      = driver-Id
690      command     = ISDN_STAT_NODCH
691      arg         = channel-number, locally to the driver. (starting with 0)
692      parm.num    = ASCII string containing CAUSE-message.
693
694  ISDN_STAT_DISPLAY:
695
696    With this call, the HL-driver delivers DISPLAY-messages to the LL.
697    Currently the LL does not use this messages. 
698
699    Parameter:
700      driver      = driver-Id
701      command     = ISDN_STAT_DISPLAY
702      arg         = channel-number, locally to the driver. (starting with 0)
703      para.display= string containing DISPLAY-message.
704
705  ISDN_STAT_PROT:
706
707    With this call, the HL-driver delivers protocol specific infos to the LL.
708    The call is not implicitely bound to a connection.
709
710    Parameter:
711      driver      = driver-Id
712      command     = ISDN_STAT_PROT
713      arg         = The lower 8 Bits define the addressed protocol as defined
714                    in ISDN_PTYPE..., the upper bits are used to differentiate
715                    the protocol specific STAT.  
716      
717      para        = protocol and function specific. See isdnif.h for detail.
718
719  ISDN_STAT_DISCH:
720
721    With this call, the HL-driver signals the LL to disable or enable the
722    use of supplied channel and driver.
723    The call may be used to reduce the available number of B-channels after
724    loading the driver. The LL has to ignore a disabled channel when searching
725    for free channels. The HL driver itself never delivers STAT callbacks for
726    disabled channels. 	    
727    The LL returns a nonzero code if the operation was not successful or the
728    selected channel is actually regarded as busy.
729
730    Parameter:
731      driver      = driver-Id
732      command     = ISDN_STAT_DISCH
733      arg         = channel-number, locally to the driver. (starting with 0)
734      parm.num[0] = 0 if channel shall be disabled, else enabled.
735
736  ISDN_STAT_L1ERR:
737
738    ***CHANGEI1.21 new status message.
739    A signal can be sent to the linklevel if an Layer1-error results in
740    packet-loss on receive or send. The field errcode of the cmd.parm
741    union describes the error more precisely.
742
743    Parameter:
744      driver      = driver-Id
745      command     = ISDN_STAT_L1ERR
746      arg         = channel-number, locally to the driver. (starting with 0)
747      parm.errcode= ISDN_STAT_L1ERR_SEND:     Packet lost while sending.
748		    ISDN_STAT_L1ERR_RECV:     Packet lost while receiving.
749  ISDN_STAT_FAXIND:
750
751    With this call the HL-driver signals a fax sub-command to the LL.
752    For details refer to INTERFACE.fax
753
754    Parameter:
755      driver      = driver-Id.
756      command     = ISDN_STAT_FAXIND
757      arg         = channel-number, locally to the driver. (starting with 0)
758      parm        = unused.
759
760