1 /* $Id: isdnif.h,v 1.1.4.1 2001/11/20 14:19:38 kai Exp $ 2 * 3 * Linux ISDN subsystem 4 * Definition of the interface between the subsystem and its low-level drivers. 5 * 6 * Copyright 1994,95,96 by Fritz Elfert (fritz@isdn4linux.de) 7 * Copyright 1995,96 Thinking Objects Software GmbH Wuerzburg 8 * 9 * This software may be used and distributed according to the terms 10 * of the GNU General Public License, incorporated herein by reference. 11 * 12 */ 13 14 #ifndef __ISDNIF_H__ 15 #define __ISDNIF_H__ 16 17 18 /* 19 * Values for general protocol-selection 20 */ 21 #define ISDN_PTYPE_UNKNOWN 0 /* Protocol undefined */ 22 #define ISDN_PTYPE_1TR6 1 /* german 1TR6-protocol */ 23 #define ISDN_PTYPE_EURO 2 /* EDSS1-protocol */ 24 #define ISDN_PTYPE_LEASED 3 /* for leased lines */ 25 #define ISDN_PTYPE_NI1 4 /* US NI-1 protocol */ 26 #define ISDN_PTYPE_MAX 7 /* Max. 8 Protocols */ 27 28 /* 29 * Values for Layer-2-protocol-selection 30 */ 31 #define ISDN_PROTO_L2_X75I 0 /* X75/LAPB with I-Frames */ 32 #define ISDN_PROTO_L2_X75UI 1 /* X75/LAPB with UI-Frames */ 33 #define ISDN_PROTO_L2_X75BUI 2 /* X75/LAPB with UI-Frames */ 34 #define ISDN_PROTO_L2_HDLC 3 /* HDLC */ 35 #define ISDN_PROTO_L2_TRANS 4 /* Transparent (Voice) */ 36 #define ISDN_PROTO_L2_X25DTE 5 /* X25/LAPB DTE mode */ 37 #define ISDN_PROTO_L2_X25DCE 6 /* X25/LAPB DCE mode */ 38 #define ISDN_PROTO_L2_V11096 7 /* V.110 bitrate adaption 9600 Baud */ 39 #define ISDN_PROTO_L2_V11019 8 /* V.110 bitrate adaption 19200 Baud */ 40 #define ISDN_PROTO_L2_V11038 9 /* V.110 bitrate adaption 38400 Baud */ 41 #define ISDN_PROTO_L2_MODEM 10 /* Analog Modem on Board */ 42 #define ISDN_PROTO_L2_FAX 11 /* Fax Group 2/3 */ 43 #define ISDN_PROTO_L2_HDLC_56K 12 /* HDLC 56k */ 44 #define ISDN_PROTO_L2_MAX 15 /* Max. 16 Protocols */ 45 46 /* 47 * Values for Layer-3-protocol-selection 48 */ 49 #define ISDN_PROTO_L3_TRANS 0 /* Transparent */ 50 #define ISDN_PROTO_L3_TRANSDSP 1 /* Transparent with DSP */ 51 #define ISDN_PROTO_L3_FCLASS2 2 /* Fax Group 2/3 CLASS 2 */ 52 #define ISDN_PROTO_L3_FCLASS1 3 /* Fax Group 2/3 CLASS 1 */ 53 #define ISDN_PROTO_L3_MAX 7 /* Max. 8 Protocols */ 54 55 #ifdef __KERNEL__ 56 57 #include <linux/config.h> 58 #include <linux/skbuff.h> 59 60 /***************************************************************************/ 61 /* Extensions made by Werner Cornelius (werner@ikt.de) */ 62 /* */ 63 /* The proceed command holds a incoming call in a state to leave processes */ 64 /* enough time to check whether ist should be accepted. */ 65 /* The PROT_IO Command extends the interface to make protocol dependant */ 66 /* features available (call diversion, call waiting...). */ 67 /* */ 68 /* The PROT_IO Command is executed with the desired driver id and the arg */ 69 /* parameter coded as follows: */ 70 /* The lower 8 bits of arg contain the desired protocol from ISDN_PTYPE */ 71 /* definitions. The upper 24 bits represent the protocol specific cmd/stat.*/ 72 /* Any additional data is protocol and command specific. */ 73 /* This mechanism also applies to the statcallb callback STAT_PROT. */ 74 /* */ 75 /* This suggested extension permits an easy expansion of protocol specific */ 76 /* handling. Extensions may be added at any time without changing the HL */ 77 /* driver code and not getting conflicts without certifications. */ 78 /* The well known CAPI 2.0 interface handles such extensions in a similar */ 79 /* way. Perhaps a protocol specific module may be added and separately */ 80 /* loaded and linked to the basic isdn module for handling. */ 81 /***************************************************************************/ 82 83 /*****************/ 84 /* DSS1 commands */ 85 /*****************/ 86 #define DSS1_CMD_INVOKE ((0x00 << 8) | ISDN_PTYPE_EURO) /* invoke a supplementary service */ 87 #define DSS1_CMD_INVOKE_ABORT ((0x01 << 8) | ISDN_PTYPE_EURO) /* abort a invoke cmd */ 88 89 /*******************************/ 90 /* DSS1 Status callback values */ 91 /*******************************/ 92 #define DSS1_STAT_INVOKE_RES ((0x80 << 8) | ISDN_PTYPE_EURO) /* Result for invocation */ 93 #define DSS1_STAT_INVOKE_ERR ((0x81 << 8) | ISDN_PTYPE_EURO) /* Error Return for invocation */ 94 #define DSS1_STAT_INVOKE_BRD ((0x82 << 8) | ISDN_PTYPE_EURO) /* Deliver invoke broadcast info */ 95 96 97 /*********************************************************************/ 98 /* structures for DSS1 commands and callback */ 99 /* */ 100 /* An action is invoked by sending a DSS1_CMD_INVOKE. The ll_id, proc*/ 101 /* timeout, datalen and data fields must be set before calling. */ 102 /* */ 103 /* The return value is a positive hl_id value also delivered in the */ 104 /* hl_id field. A value of zero signals no more left hl_id capacitys.*/ 105 /* A negative return value signals errors in LL. So if the return */ 106 /* value is <= 0 no action in LL will be taken -> request ignored */ 107 /* */ 108 /* The timeout field must be filled with a positive value specifying */ 109 /* the amount of time the INVOKED process waits for a reaction from */ 110 /* the network. */ 111 /* If a response (either error or result) is received during this */ 112 /* intervall, a reporting callback is initiated and the process will */ 113 /* be deleted, the hl identifier will be freed. */ 114 /* If no response is received during the specified intervall, a error*/ 115 /* callback is initiated with timeout set to -1 and a datalen set */ 116 /* to 0. */ 117 /* If timeout is set to a value <= 0 during INVOCATION the process is*/ 118 /* immediately deleted after sending the data. No callback occurs ! */ 119 /* */ 120 /* A currently waiting process may be aborted with INVOKE_ABORT. No */ 121 /* callback will occur when a process has been aborted. */ 122 /* */ 123 /* Broadcast invoke frames from the network are reported via the */ 124 /* STAT_INVOKE_BRD callback. The ll_id is set to 0, the other fields */ 125 /* are supplied by the network and not by the HL. */ 126 /*********************************************************************/ 127 128 /*****************/ 129 /* NI1 commands */ 130 /*****************/ 131 #define NI1_CMD_INVOKE ((0x00 << 8) | ISDN_PTYPE_NI1) /* invoke a supplementary service */ 132 #define NI1_CMD_INVOKE_ABORT ((0x01 << 8) | ISDN_PTYPE_NI1) /* abort a invoke cmd */ 133 134 /*******************************/ 135 /* NI1 Status callback values */ 136 /*******************************/ 137 #define NI1_STAT_INVOKE_RES ((0x80 << 8) | ISDN_PTYPE_NI1) /* Result for invocation */ 138 #define NI1_STAT_INVOKE_ERR ((0x81 << 8) | ISDN_PTYPE_NI1) /* Error Return for invocation */ 139 #define NI1_STAT_INVOKE_BRD ((0x82 << 8) | ISDN_PTYPE_NI1) /* Deliver invoke broadcast info */ 140 141 typedef struct 142 { ulong ll_id; /* ID supplied by LL when executing */ 143 /* a command and returned by HL for */ 144 /* INVOKE_RES and INVOKE_ERR */ 145 int hl_id; /* ID supplied by HL when called */ 146 /* for executing a cmd and delivered */ 147 /* for results and errors */ 148 /* must be supplied by LL when aborting*/ 149 int proc; /* invoke procedure used by CMD_INVOKE */ 150 /* returned by callback and broadcast */ 151 int timeout; /* timeout for INVOKE CMD in ms */ 152 /* -1 in stat callback when timed out */ 153 /* error value when error callback */ 154 int datalen; /* length of cmd or stat data */ 155 u_char *data;/* pointer to data delivered or send */ 156 } isdn_cmd_stat; 157 158 /* 159 * Commands from linklevel to lowlevel 160 * 161 */ 162 #define ISDN_CMD_IOCTL 0 /* Perform ioctl */ 163 #define ISDN_CMD_DIAL 1 /* Dial out */ 164 #define ISDN_CMD_ACCEPTD 2 /* Accept an incoming call on D-Chan. */ 165 #define ISDN_CMD_ACCEPTB 3 /* Request B-Channel connect. */ 166 #define ISDN_CMD_HANGUP 4 /* Hangup */ 167 #define ISDN_CMD_CLREAZ 5 /* Clear EAZ(s) of channel */ 168 #define ISDN_CMD_SETEAZ 6 /* Set EAZ(s) of channel */ 169 #define ISDN_CMD_GETEAZ 7 /* Get EAZ(s) of channel */ 170 #define ISDN_CMD_SETSIL 8 /* Set Service-Indicator-List of channel */ 171 #define ISDN_CMD_GETSIL 9 /* Get Service-Indicator-List of channel */ 172 #define ISDN_CMD_SETL2 10 /* Set B-Chan. Layer2-Parameter */ 173 #define ISDN_CMD_GETL2 11 /* Get B-Chan. Layer2-Parameter */ 174 #define ISDN_CMD_SETL3 12 /* Set B-Chan. Layer3-Parameter */ 175 #define ISDN_CMD_GETL3 13 /* Get B-Chan. Layer3-Parameter */ 176 #define ISDN_CMD_LOCK 14 /* Signal usage by upper levels */ 177 #define ISDN_CMD_UNLOCK 15 /* Release usage-lock */ 178 #define ISDN_CMD_SUSPEND 16 /* Suspend connection */ 179 #define ISDN_CMD_RESUME 17 /* Resume connection */ 180 #define ISDN_CMD_PROCEED 18 /* Proceed with call establishment */ 181 #define ISDN_CMD_ALERT 19 /* Alert after Proceeding */ 182 #define ISDN_CMD_REDIR 20 /* Redir a incoming call */ 183 #define ISDN_CMD_PROT_IO 21 /* Protocol specific commands */ 184 #define CAPI_PUT_MESSAGE 22 /* CAPI message send down or up */ 185 #define ISDN_CMD_FAXCMD 23 /* FAX commands to HL-driver */ 186 #define ISDN_CMD_AUDIO 24 /* DSP, DTMF, ... settings */ 187 188 /* 189 * Status-Values delivered from lowlevel to linklevel via 190 * statcallb(). 191 * 192 */ 193 #define ISDN_STAT_STAVAIL 256 /* Raw status-data available */ 194 #define ISDN_STAT_ICALL 257 /* Incoming call detected */ 195 #define ISDN_STAT_RUN 258 /* Signal protocol-code is running */ 196 #define ISDN_STAT_STOP 259 /* Signal halt of protocol-code */ 197 #define ISDN_STAT_DCONN 260 /* Signal D-Channel connect */ 198 #define ISDN_STAT_BCONN 261 /* Signal B-Channel connect */ 199 #define ISDN_STAT_DHUP 262 /* Signal D-Channel disconnect */ 200 #define ISDN_STAT_BHUP 263 /* Signal B-Channel disconnect */ 201 #define ISDN_STAT_CINF 264 /* Charge-Info */ 202 #define ISDN_STAT_LOAD 265 /* Signal new lowlevel-driver is loaded */ 203 #define ISDN_STAT_UNLOAD 266 /* Signal unload of lowlevel-driver */ 204 #define ISDN_STAT_BSENT 267 /* Signal packet sent */ 205 #define ISDN_STAT_NODCH 268 /* Signal no D-Channel */ 206 #define ISDN_STAT_ADDCH 269 /* Add more Channels */ 207 #define ISDN_STAT_CAUSE 270 /* Cause-Message */ 208 #define ISDN_STAT_ICALLW 271 /* Incoming call without B-chan waiting */ 209 #define ISDN_STAT_REDIR 272 /* Redir result */ 210 #define ISDN_STAT_PROT 273 /* protocol IO specific callback */ 211 #define ISDN_STAT_DISPLAY 274 /* deliver a received display message */ 212 #define ISDN_STAT_L1ERR 275 /* Signal Layer-1 Error */ 213 #define ISDN_STAT_FAXIND 276 /* FAX indications from HL-driver */ 214 #define ISDN_STAT_AUDIO 277 /* DTMF, DSP indications */ 215 #define ISDN_STAT_DISCH 278 /* Disable/Enable channel usage */ 216 217 /* 218 * Audio commands 219 */ 220 #define ISDN_AUDIO_SETDD 0 /* Set DTMF detection */ 221 #define ISDN_AUDIO_DTMF 1 /* Rx/Tx DTMF */ 222 223 /* 224 * Values for errcode field 225 */ 226 #define ISDN_STAT_L1ERR_SEND 1 227 #define ISDN_STAT_L1ERR_RECV 2 228 229 /* 230 * Values for feature-field of interface-struct. 231 */ 232 /* Layer 2 */ 233 #define ISDN_FEATURE_L2_X75I (0x0001 << ISDN_PROTO_L2_X75I) 234 #define ISDN_FEATURE_L2_X75UI (0x0001 << ISDN_PROTO_L2_X75UI) 235 #define ISDN_FEATURE_L2_X75BUI (0x0001 << ISDN_PROTO_L2_X75BUI) 236 #define ISDN_FEATURE_L2_HDLC (0x0001 << ISDN_PROTO_L2_HDLC) 237 #define ISDN_FEATURE_L2_TRANS (0x0001 << ISDN_PROTO_L2_TRANS) 238 #define ISDN_FEATURE_L2_X25DTE (0x0001 << ISDN_PROTO_L2_X25DTE) 239 #define ISDN_FEATURE_L2_X25DCE (0x0001 << ISDN_PROTO_L2_X25DCE) 240 #define ISDN_FEATURE_L2_V11096 (0x0001 << ISDN_PROTO_L2_V11096) 241 #define ISDN_FEATURE_L2_V11019 (0x0001 << ISDN_PROTO_L2_V11019) 242 #define ISDN_FEATURE_L2_V11038 (0x0001 << ISDN_PROTO_L2_V11038) 243 #define ISDN_FEATURE_L2_MODEM (0x0001 << ISDN_PROTO_L2_MODEM) 244 #define ISDN_FEATURE_L2_FAX (0x0001 << ISDN_PROTO_L2_FAX) 245 #define ISDN_FEATURE_L2_HDLC_56K (0x0001 << ISDN_PROTO_L2_HDLC_56K) 246 247 #define ISDN_FEATURE_L2_MASK (0x0FFFF) /* Max. 16 protocols */ 248 #define ISDN_FEATURE_L2_SHIFT (0) 249 250 /* Layer 3 */ 251 #define ISDN_FEATURE_L3_TRANS (0x10000 << ISDN_PROTO_L3_TRANS) 252 #define ISDN_FEATURE_L3_TRANSDSP (0x10000 << ISDN_PROTO_L3_TRANSDSP) 253 #define ISDN_FEATURE_L3_FCLASS2 (0x10000 << ISDN_PROTO_L3_FCLASS2) 254 #define ISDN_FEATURE_L3_FCLASS1 (0x10000 << ISDN_PROTO_L3_FCLASS1) 255 256 #define ISDN_FEATURE_L3_MASK (0x0FF0000) /* Max. 8 Protocols */ 257 #define ISDN_FEATURE_L3_SHIFT (16) 258 259 /* Signaling */ 260 #define ISDN_FEATURE_P_UNKNOWN (0x1000000 << ISDN_PTYPE_UNKNOWN) 261 #define ISDN_FEATURE_P_1TR6 (0x1000000 << ISDN_PTYPE_1TR6) 262 #define ISDN_FEATURE_P_EURO (0x1000000 << ISDN_PTYPE_EURO) 263 #define ISDN_FEATURE_P_NI1 (0x1000000 << ISDN_PTYPE_NI1) 264 265 #define ISDN_FEATURE_P_MASK (0x0FF000000) /* Max. 8 Protocols */ 266 #define ISDN_FEATURE_P_SHIFT (24) 267 268 typedef struct setup_parm { 269 unsigned char phone[32]; /* Remote Phone-Number */ 270 unsigned char eazmsn[32]; /* Local EAZ or MSN */ 271 unsigned char si1; /* Service Indicator 1 */ 272 unsigned char si2; /* Service Indicator 2 */ 273 unsigned char plan; /* Numbering plan */ 274 unsigned char screen; /* Screening info */ 275 } setup_parm; 276 277 278 #ifdef CONFIG_ISDN_TTY_FAX 279 /* T.30 Fax G3 */ 280 281 #define FAXIDLEN 21 282 283 typedef struct T30_s { 284 /* session parameters */ 285 __u8 resolution; 286 __u8 rate; 287 __u8 width; 288 __u8 length; 289 __u8 compression; 290 __u8 ecm; 291 __u8 binary; 292 __u8 scantime; 293 __u8 id[FAXIDLEN]; 294 /* additional parameters */ 295 __u8 phase; 296 __u8 direction; 297 __u8 code; 298 __u8 badlin; 299 __u8 badmul; 300 __u8 bor; 301 __u8 fet; 302 __u8 pollid[FAXIDLEN]; 303 __u8 cq; 304 __u8 cr; 305 __u8 ctcrty; 306 __u8 minsp; 307 __u8 phcto; 308 __u8 rel; 309 __u8 nbc; 310 /* remote station parameters */ 311 __u8 r_resolution; 312 __u8 r_rate; 313 __u8 r_width; 314 __u8 r_length; 315 __u8 r_compression; 316 __u8 r_ecm; 317 __u8 r_binary; 318 __u8 r_scantime; 319 __u8 r_id[FAXIDLEN]; 320 __u8 r_code; 321 } T30_s; 322 323 #define ISDN_TTY_FAX_CONN_IN 0 324 #define ISDN_TTY_FAX_CONN_OUT 1 325 326 #define ISDN_TTY_FAX_FCON 0 327 #define ISDN_TTY_FAX_DIS 1 328 #define ISDN_TTY_FAX_FTT 2 329 #define ISDN_TTY_FAX_MCF 3 330 #define ISDN_TTY_FAX_DCS 4 331 #define ISDN_TTY_FAX_TRAIN_OK 5 332 #define ISDN_TTY_FAX_EOP 6 333 #define ISDN_TTY_FAX_EOM 7 334 #define ISDN_TTY_FAX_MPS 8 335 #define ISDN_TTY_FAX_DTC 9 336 #define ISDN_TTY_FAX_RID 10 337 #define ISDN_TTY_FAX_HNG 11 338 #define ISDN_TTY_FAX_DT 12 339 #define ISDN_TTY_FAX_FCON_I 13 340 #define ISDN_TTY_FAX_DR 14 341 #define ISDN_TTY_FAX_ET 15 342 #define ISDN_TTY_FAX_CFR 16 343 #define ISDN_TTY_FAX_PTS 17 344 #define ISDN_TTY_FAX_SENT 18 345 346 #define ISDN_FAX_PHASE_IDLE 0 347 #define ISDN_FAX_PHASE_A 1 348 #define ISDN_FAX_PHASE_B 2 349 #define ISDN_FAX_PHASE_C 3 350 #define ISDN_FAX_PHASE_D 4 351 #define ISDN_FAX_PHASE_E 5 352 353 #endif /* TTY_FAX */ 354 355 #define ISDN_FAX_CLASS1_FAE 0 356 #define ISDN_FAX_CLASS1_FTS 1 357 #define ISDN_FAX_CLASS1_FRS 2 358 #define ISDN_FAX_CLASS1_FTM 3 359 #define ISDN_FAX_CLASS1_FRM 4 360 #define ISDN_FAX_CLASS1_FTH 5 361 #define ISDN_FAX_CLASS1_FRH 6 362 #define ISDN_FAX_CLASS1_CTRL 7 363 364 #define ISDN_FAX_CLASS1_OK 0 365 #define ISDN_FAX_CLASS1_CONNECT 1 366 #define ISDN_FAX_CLASS1_NOCARR 2 367 #define ISDN_FAX_CLASS1_ERROR 3 368 #define ISDN_FAX_CLASS1_FCERROR 4 369 #define ISDN_FAX_CLASS1_QUERY 5 370 371 typedef struct { 372 __u8 cmd; 373 __u8 subcmd; 374 __u8 para[50]; 375 } aux_s; 376 377 #define AT_COMMAND 0 378 #define AT_EQ_VALUE 1 379 #define AT_QUERY 2 380 #define AT_EQ_QUERY 3 381 382 /* CAPI structs */ 383 384 /* this is compatible to the old union size */ 385 #define MAX_CAPI_PARA_LEN 50 386 387 typedef struct { 388 /* Header */ 389 __u16 Length; 390 __u16 ApplId; 391 __u8 Command; 392 __u8 Subcommand; 393 __u16 Messagenumber; 394 395 /* Parameter */ 396 union { 397 __u32 Controller; 398 __u32 PLCI; 399 __u32 NCCI; 400 } adr; 401 __u8 para[MAX_CAPI_PARA_LEN]; 402 } capi_msg; 403 404 /* 405 * Structure for exchanging above infos 406 * 407 */ 408 typedef struct { 409 int driver; /* Lowlevel-Driver-ID */ 410 int command; /* Command or Status (see above) */ 411 ulong arg; /* Additional Data */ 412 union { 413 ulong errcode; /* Type of error with STAT_L1ERR */ 414 int length; /* Amount of bytes sent with STAT_BSENT */ 415 u_char num[50]; /* Additional Data */ 416 setup_parm setup;/* For SETUP msg */ 417 capi_msg cmsg; /* For CAPI like messages */ 418 char display[85];/* display message data */ 419 isdn_cmd_stat isdn_io; /* ISDN IO-parameter/result */ 420 aux_s aux; /* for modem commands/indications */ 421 #ifdef CONFIG_ISDN_TTY_FAX 422 T30_s *fax; /* Pointer to ttys fax struct */ 423 #endif 424 ulong userdata; /* User Data */ 425 } parm; 426 } isdn_ctrl; 427 428 #define dss1_io isdn_io 429 #define ni1_io isdn_io 430 431 /* 432 * The interface-struct itself (initialized at load-time of lowlevel-driver) 433 * 434 * See Documentation/isdn/INTERFACE for a description, how the communication 435 * between the ISDN subsystem and its drivers is done. 436 * 437 */ 438 typedef struct { 439 /* Number of channels supported by this driver 440 */ 441 int channels; 442 443 /* 444 * Maximum Size of transmit/receive-buffer this driver supports. 445 */ 446 int maxbufsize; 447 448 /* Feature-Flags for this driver. 449 * See defines ISDN_FEATURE_... for Values 450 */ 451 unsigned long features; 452 453 /* 454 * Needed for calculating 455 * dev->hard_header_len = linklayer header + hl_hdrlen; 456 * Drivers, not supporting sk_buff's should set this to 0. 457 */ 458 unsigned short hl_hdrlen; 459 460 /* 461 * Receive-Callback using sk_buff's 462 * Parameters: 463 * int Driver-ID 464 * int local channel-number (0 ...) 465 * struct sk_buff *skb received Data 466 */ 467 void (*rcvcallb_skb)(int, int, struct sk_buff *); 468 469 /* Status-Callback 470 * Parameters: 471 * isdn_ctrl* 472 * driver = Driver ID. 473 * command = One of above ISDN_STAT_... constants. 474 * arg = depending on status-type. 475 * num = depending on status-type. 476 */ 477 int (*statcallb)(isdn_ctrl*); 478 479 /* Send command 480 * Parameters: 481 * isdn_ctrl* 482 * driver = Driver ID. 483 * command = One of above ISDN_CMD_... constants. 484 * arg = depending on command. 485 * num = depending on command. 486 */ 487 int (*command)(isdn_ctrl*); 488 489 /* 490 * Send data using sk_buff's 491 * Parameters: 492 * int driverId 493 * int local channel-number (0...) 494 * int Flag: Need ACK for this packet. 495 * struct sk_buff *skb Data to send 496 */ 497 int (*writebuf_skb) (int, int, int, struct sk_buff *); 498 499 /* Send raw D-Channel-Commands 500 * Parameters: 501 * u_char pointer data 502 * int length of data 503 * int Flag: 0 = Call form Kernel-Space (use memcpy, 504 * no schedule allowed) 505 * 1 = Data is in User-Space (use memcpy_fromfs, 506 * may schedule) 507 * int driverId 508 * int local channel-number (0 ...) 509 */ 510 int (*writecmd)(const u_char*, int, int, int, int); 511 512 /* Read raw Status replies 513 * u_char pointer data (volatile) 514 * int length of buffer 515 * int Flag: 0 = Call form Kernel-Space (use memcpy, 516 * no schedule allowed) 517 * 1 = Data is in User-Space (use memcpy_fromfs, 518 * may schedule) 519 * int driverId 520 * int local channel-number (0 ...) 521 */ 522 int (*readstat)(u_char*, int, int, int, int); 523 524 char id[20]; 525 } isdn_if; 526 527 /* 528 * Function which must be called by lowlevel-driver at loadtime with 529 * the following fields of above struct set: 530 * 531 * channels Number of channels that will be supported. 532 * hl_hdrlen Space to preserve in sk_buff's when sending. Drivers, not 533 * supporting sk_buff's should set this to 0. 534 * command Address of Command-Handler. 535 * features Bitwise coded Features of this driver. (use ISDN_FEATURE_...) 536 * writebuf_skb Address of Skbuff-Send-Handler. 537 * writecmd " " D-Channel " which accepts raw D-Ch-Commands. 538 * readstat " " D-Channel " which delivers raw Status-Data. 539 * 540 * The linklevel-driver fills the following fields: 541 * 542 * channels Driver-ID assigned to this driver. (Must be used on all 543 * subsequent callbacks. 544 * rcvcallb_skb Address of handler for received Skbuff's. 545 * statcallb " " " for status-changes. 546 * 547 */ 548 extern int register_isdn(isdn_if*); 549 #include <asm/uaccess.h> 550 551 #endif /* __KERNEL__ */ 552 553 #endif /* __ISDNIF_H__ */ 554