diff options
Diffstat (limited to 'include/linux/isdn.h')
-rw-r--r-- | include/linux/isdn.h | 374 |
1 files changed, 232 insertions, 142 deletions
diff --git a/include/linux/isdn.h b/include/linux/isdn.h index 0b61899c0..c0a3ba309 100644 --- a/include/linux/isdn.h +++ b/include/linux/isdn.h @@ -1,4 +1,4 @@ -/* $Id: isdn.h,v 1.37 1998/02/22 19:45:24 fritz Exp $ +/* $Id: isdn.h,v 1.64 1999/04/18 14:57:14 fritz Exp $ * * Main header for the Linux ISDN subsystem (linklevel). * @@ -20,11 +20,102 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * - * Note: This file differs from the corresponding revision as present in the - * isdn4linux CVS repository because some later bug fixes have been extracted - * from the repository and merged into this file. -- Henner Eisen - * * $Log: isdn.h,v $ + * Revision 1.64 1999/04/18 14:57:14 fritz + * Removed TIMRU stuff + * + * Revision 1.63 1999/04/18 14:07:18 fritz + * Removed TIMRU stuff. + * + * Revision 1.62 1999/04/12 13:16:54 fritz + * Changes from 2.0 tree. + * + * Revision 1.61 1999/03/02 11:43:21 armin + * Added variable to store connect-message of Modem. + * Added Timer-define for RegS7 (Wait for Carrier). + * + * Revision 1.60 1998/10/25 14:50:29 fritz + * Backported from MIPS (Cobalt). + * + * Revision 1.59 1998/10/23 10:18:55 paul + * Implementation of "dialmode" (successor of "status") + * You also need current isdnctrl for this! + * + * Revision 1.58 1998/10/23 10:10:06 fritz + * Test-Checkin + * + * Revision 1.57 1998/08/31 21:10:01 he + * new ioctl IIOCNETGPN for /dev/isdninfo (get network interface' + * peer phone number) + * + * Revision 1.56 1998/07/26 18:46:52 armin + * Added silence detection in voice receive mode. + * + * Revision 1.55 1998/06/26 15:13:17 fritz + * Added handling of STAT_ICALL with incomplete CPN. + * Added AT&L for ttyI emulator. + * Added more locking stuff in tty_write. + * + * Revision 1.54 1998/06/18 23:32:01 fritz + * Replaced cli()/restore_flags() in isdn_tty_write() by locking. + * Removed direct-senddown feature in isdn_tty_write because it will + * never succeed with locking and is useless anyway. + * + * Revision 1.53 1998/06/17 19:51:51 he + * merged with 2.1.10[34] (cosmetics and udelay() -> mdelay()) + * brute force fix to avoid Ugh's in isdn_tty_write() + * cleaned up some dead code + * + * Revision 1.52 1998/06/12 11:42:18 detabc + * cleanup abc + * + * Revision 1.51 1998/06/02 12:10:30 detabc + * wegen einer einstweiliger verfuegung gegen DW ist zur zeit + * die abc-extension bis zur klaerung der rechtslage nicht verfuegbar + * + * Revision 1.50 1998/05/05 23:11:51 detabc + * add Item to stop icmp-unreach (max. 6 times of dialwait delay) + * + * Revision 1.49 1998/05/03 17:45:00 detabc + * Add Item to send icmp-host-unreach to all packets + * + * Revision 1.48 1998/04/26 19:58:14 detabc + * include the new abc-extension-items from 2.0.xx kernels + * remove some unused code + * + * Revision 1.47 1998/04/21 18:00:25 detabc + * Add items for secure-callback (abc-extension only) + * + * Revision 1.46 1998/04/14 16:28:59 he + * Fixed user space access with interrupts off and remaining + * copy_{to,from}_user() -> -EFAULT return codes + * + * Revision 1.45 1998/03/24 16:33:12 hipp + * More CCP changes. BSD compression now "works" on a local loopback link. + * Moved some isdn_ppp stuff from isdn.h to isdn_ppp.h + * + * Revision 1.44 1998/03/22 18:50:56 hipp + * Added BSD Compression for syncPPP .. UNTESTED at the moment + * + * Revision 1.43 1998/03/09 17:46:44 he + * merged in 2.1.89 changes + * + * Revision 1.42 1998/03/08 13:53:46 detabc + * add ABC-variables in structur isdn_devt + * + * Revision 1.41 1998/03/08 13:14:37 detabc + * abc-extension support for kernels > 2.1.x + * first try (sorry experimental) + * + * Revision 1.40 1998/03/08 01:08:29 fritz + * Increased NET_DV because of TIMRU + * + * Revision 1.39 1998/03/07 22:42:49 fritz + * Starting generic module support (Nothing usable yet). + * + * Revision 1.38 1998/03/07 18:21:29 cal + * Dynamic Timeout-Rule-Handling vs. 971110 included + * * Revision 1.37 1998/02/22 19:45:24 fritz * Some changes regarding V.110 * @@ -163,6 +254,7 @@ #ifndef isdn_h #define isdn_h +#include <linux/config.h> #include <linux/ioctl.h> #define ISDN_TTY_MAJOR 43 @@ -174,14 +266,20 @@ * the correspondent code in isdn.c */ +#ifdef CONFIG_COBALT_MICRO_SERVER +/* Save memory */ +#define ISDN_MAX_DRIVERS 2 +#define ISDN_MAX_CHANNELS 8 +#else #define ISDN_MAX_DRIVERS 32 #define ISDN_MAX_CHANNELS 64 +#endif #define ISDN_MINOR_B 0 #define ISDN_MINOR_BMAX (ISDN_MAX_CHANNELS-1) -#define ISDN_MINOR_CTRL ISDN_MAX_CHANNELS -#define ISDN_MINOR_CTRLMAX (2*ISDN_MAX_CHANNELS-1) -#define ISDN_MINOR_PPP (2*ISDN_MAX_CHANNELS) -#define ISDN_MINOR_PPPMAX (3*ISDN_MAX_CHANNELS-1) +#define ISDN_MINOR_CTRL 64 +#define ISDN_MINOR_CTRLMAX (64 + (ISDN_MAX_CHANNELS-1)) +#define ISDN_MINOR_PPP 128 +#define ISDN_MINOR_PPPMAX (128 + (ISDN_MAX_CHANNELS-1)) #define ISDN_MINOR_STATUS 255 /* New ioctl-codes */ @@ -192,8 +290,8 @@ #define IIOCNETANM _IO('I',5) #define IIOCNETDNM _IO('I',6) #define IIOCNETGNM _IO('I',7) -#define IIOCGETSET _IO('I',8) -#define IIOCSETSET _IO('I',9) +#define IIOCGETSET _IO('I',8) /* no longer supported */ +#define IIOCSETSET _IO('I',9) /* no longer supported */ #define IIOCSETVER _IO('I',10) #define IIOCNETHUP _IO('I',11) #define IIOCSETGST _IO('I',12) @@ -211,6 +309,8 @@ #define IIOCNETALN _IO('I',32) #define IIOCNETDLN _IO('I',33) +#define IIOCNETGPN _IO('I',34) + #define IIOCDBGVAR _IO('I',127) #define IIOCDRVCTL _IO('I',128) @@ -238,6 +338,8 @@ #define ISDN_MODEM_ANZREG 23 /* Number of Modem-Registers */ #define ISDN_MSNLEN 20 +#define ISDN_LMSNLEN 255 /* Length of tty's Listen-MSN string */ +#define ISDN_CMSGLEN 50 /* Length of CONNECT-Message to add for Modem */ typedef struct { char drvid[25]; @@ -256,8 +358,9 @@ typedef struct { int outgoing; } isdn_net_ioctl_phone; -#define NET_DV 0x04 /* Data version for net_cfg */ -#define TTY_DV 0x04 /* Data version for iprofd etc. */ +#define NET_DV 0x05 /* Data version for net_cfg */ +#define TTY_DV 0x05 /* Data version for iprofd etc. */ +#define INF_DV 0x01 /* Data version for /dev/isdninfo */ typedef struct { char name[10]; /* Name of interface */ @@ -282,8 +385,17 @@ typedef struct { int pppbind; /* ippp device for bindings */ int chargeint; /* Use fixed charge interval length */ int triggercps; /* BogoCPS needed for triggering slave */ + int dialtimeout; /* Dial-Timeout */ + int dialwait; /* Time to wait after failed dial */ + int dialmode; /* Flag: off / on / auto */ } isdn_net_ioctl_cfg; +#define ISDN_NET_DIALMODE_MASK 0xC0 /* bits for status */ +#define ISDN_NET_DM_OFF 0x00 /* this interface is stopped */ +#define ISDN_NET_DM_MANUAL 0x40 /* this interface is on (manual) */ +#define ISDN_NET_DM_AUTO 0x80 /* this interface is autodial */ +#define ISDN_NET_DIALMODE(x) ((&(x))->flags & ISDN_NET_DIALMODE_MASK) + #ifdef __KERNEL__ #ifndef STANDALONE @@ -331,6 +443,7 @@ typedef struct { #include <linux/isdnif.h> + #define ISDN_DRVIOCTL_MASK 0x7f /* Mask for Device-ioctl */ /* Until now unused */ @@ -372,14 +485,17 @@ typedef struct { #define ISDN_TIMER_NETHANGUP 32 #define ISDN_TIMER_IPPP 64 #define ISDN_TIMER_KEEPALIVE 128 /* Cisco-Keepalive */ +#define ISDN_TIMER_CARRIER 256 /* Wait for Carrier */ #define ISDN_TIMER_FAST (ISDN_TIMER_MODEMREAD | ISDN_TIMER_MODEMPLUS | \ ISDN_TIMER_MODEMXMIT) #define ISDN_TIMER_SLOW (ISDN_TIMER_MODEMRING | ISDN_TIMER_NETHANGUP | \ - ISDN_TIMER_NETDIAL | ISDN_TIMER_KEEPALIVE) + ISDN_TIMER_NETDIAL | ISDN_TIMER_KEEPALIVE | \ + ISDN_TIMER_CARRIER) /* Timeout-Values for isdn_net_dial() */ #define ISDN_TIMER_DTIMEOUT10 (10*HZ/(ISDN_TIMER_02SEC*(ISDN_TIMER_RES+1))) #define ISDN_TIMER_DTIMEOUT15 (15*HZ/(ISDN_TIMER_02SEC*(ISDN_TIMER_RES+1))) +#define ISDN_TIMER_DTIMEOUT60 (60*HZ/(ISDN_TIMER_02SEC*(ISDN_TIMER_RES+1))) /* GLOBAL_FLAGS */ #define ISDN_GLOBAL_STOPPED 1 @@ -398,6 +514,7 @@ typedef struct { #define ISDN_NET_TMP 0x10 /* tmp interface until getting an IP */ #define ISDN_NET_DYNAMIC 0x20 /* this link is dynamically allocated */ #endif + #define ISDN_NET_MAGIC 0x49344C02 /* for paranoia-checking */ /* Phone-list-element */ @@ -488,6 +605,11 @@ typedef struct isdn_net_local_s { struct device *, unsigned char *); int pppbind; /* ippp device for bindings */ + int dialtimeout; /* How long shall we try on dialing? (jiffies) */ + int dialwait; /* How long shall we wait after failed attempt? (jiffies) */ + ulong dialstarted; /* jiffies of first dialing-attempt */ + ulong dialwait_timer; /* jiffies of earliest next dialing-attempt */ + int huptimeout; /* How long will the connection be up? (seconds) */ #ifdef CONFIG_ISDN_X25 struct concap_device_ops *dops; /* callbacks used by encapsulator */ #endif @@ -496,18 +618,6 @@ typedef struct isdn_net_local_s { ulong cisco_yourseq; /* Remote keepalive seq. for Cisco */ } isdn_net_local; -#ifdef CONFIG_ISDN_PPP -struct ippp_bundle { - int mp_mrru; /* unused */ - struct mpqueue *last; /* currently defined in isdn_net_dev */ - int min; /* currently calculated 'on the fly' */ - long next_num; /* we wanna see this seq.-number next */ - struct sqqueue *sq; - int modify:1; /* set to 1 while modifying sqqueue */ - int bundled:1; /* bundle active ? */ -}; -#endif - /* the interface itself */ typedef struct isdn_net_dev_s { isdn_net_local *local; @@ -567,6 +677,10 @@ typedef struct atemu { u_char mdmreg[ISDN_MODEM_ANZREG]; /* Modem-Registers */ char pmsn[ISDN_MSNLEN]; /* EAZ/MSNs Profile 0 */ char msn[ISDN_MSNLEN]; /* EAZ/MSN */ + char plmsn[ISDN_LMSNLEN]; /* Listening MSNs Profile 0 */ + char lmsn[ISDN_LMSNLEN]; /* Listening MSNs */ + char cpn[ISDN_MSNLEN]; /* CalledPartyNumber on incoming call */ + char connmsg[ISDN_CMSGLEN]; /* CONNECT-Msg from HL-Driver */ #ifdef CONFIG_ISDN_AUDIO u_char vpar[10]; /* Voice-parameters */ int lastDLE; /* Flag for voice-coding: DLE seen */ @@ -574,6 +688,7 @@ typedef struct atemu { int mdmcmdl; /* Length of Modem-Commandbuffer */ int pluscount; /* Counter for +++ sequence */ int lastplus; /* Timestamp of last + */ + int carrierwait; /* Seconds of carrier waiting */ char mdmcmd[255]; /* Modem-Commandbuffer */ unsigned int charge; /* Charge units of current connection */ } atemu; @@ -593,7 +708,7 @@ typedef struct modem_info { long pgrp; /* pgrp of opening process */ int online; /* 1 = B-Channel is up, drop data */ /* 2 = B-Channel is up, deliver d.*/ - int dialing; /* Dial in progress */ + int dialing; /* Dial in progress or ATA */ int rcvsched; /* Receive needs schedule */ int isdn_driver; /* Index to isdn-driver */ int isdn_channel; /* Index to isdn-channel */ @@ -612,6 +727,7 @@ typedef struct modem_info { int xmit_count; /* # of chars in xmit_buf */ unsigned char *xmit_buf; /* transmit buffer */ struct sk_buff_head xmit_queue; /* transmit queue */ + atomic_t xmit_lock; /* Semaphore for isdn_tty_write */ #ifdef CONFIG_ISDN_AUDIO int vonline; /* Voice-channel status */ /* Bit 0 = recording */ @@ -621,13 +737,19 @@ typedef struct modem_info { void *adpcms; /* state for adpcm decompression */ void *adpcmr; /* state for adpcm compression */ void *dtmf_state; /* state for dtmf decoder */ + void *silence_state; /* state for silence detection */ #endif struct tty_struct *tty; /* Pointer to corresponding tty */ atemu emu; /* AT-emulator data */ struct termios normal_termios; /* For saving termios structs */ struct termios callout_termios; +#if LINUX_VERSION_CODE < 131841 struct wait_queue *open_wait; struct wait_queue *close_wait; +#else + wait_queue_head_t open_wait, close_wait; +#endif + struct semaphore write_sem; } modem_info; #define ISDN_MODEM_WINSIZE 8 @@ -645,72 +767,6 @@ typedef struct { /*======================= End of ISDN-tty stuff ============================*/ -/*======================= Start of sync-ppp stuff ==========================*/ - - -#define NUM_RCV_BUFFS 64 -#define PPP_HARD_HDR_LEN 4 - -#ifdef CONFIG_ISDN_PPP - -struct sqqueue { - struct sqqueue *next; - long sqno_start; - long sqno_end; - struct sk_buff *skb; - long timer; -}; - -struct mpqueue { - struct mpqueue *next; - struct mpqueue *last; - long sqno; - struct sk_buff *skb; - int BEbyte; - unsigned long time; -}; - -struct ippp_buf_queue { - struct ippp_buf_queue *next; - struct ippp_buf_queue *last; - char *buf; /* NULL here indicates end of queue */ - int len; -}; - -struct ippp_struct { - struct ippp_struct *next_link; - int state; - struct ippp_buf_queue rq[NUM_RCV_BUFFS]; /* packet queue for isdn_ppp_read() */ - struct ippp_buf_queue *first; /* pointer to (current) first packet */ - struct ippp_buf_queue *last; /* pointer to (current) last used packet in queue */ - struct wait_queue *wq; - struct wait_queue *wq1; - struct task_struct *tk; - unsigned int mpppcfg; - unsigned int pppcfg; - unsigned int mru; - unsigned int mpmru; - unsigned int mpmtu; - unsigned int maxcid; - isdn_net_local *lp; - int unit; - int minor; - long last_link_seqno; - long mp_seqno; - long range; -#ifdef CONFIG_ISDN_PPP_VJ - unsigned char *cbuf; - struct slcompress *slcomp; -#endif - unsigned long debug; - struct isdn_ppp_compressor *compressor,*link_compressor; - void *decomp_stat,*comp_stat,*link_decomp_stat,*link_comp_stat; -}; - -#endif - -/*======================== End of sync-ppp stuff ===========================*/ - /*======================== Start of V.110 stuff ============================*/ #define V110_BUFSIZE 1024 @@ -743,69 +799,103 @@ typedef struct { char *private; } infostruct; +typedef struct isdn_module { + struct isdn_module *prev; + struct isdn_module *next; + char *name; + int (*get_free_channel)(int, int, int, int, int); + int (*free_channel)(int, int, int); + int (*status_callback)(isdn_ctrl *); + int (*command)(isdn_ctrl *); + int (*receive_callback)(int, int, struct sk_buff *); + int (*writebuf_skb)(int, int, int, struct sk_buff *); + int (*net_start_xmit)(struct sk_buff *, struct device *); + int (*net_receive)(struct device *, struct sk_buff *); + int (*net_open)(struct device *); + int (*net_close)(struct device *); + int priority; +} isdn_module; + +#define DRV_FLAG_RUNNING 1 +#define DRV_FLAG_REJBUS 2 +#define DRV_FLAG_LOADED 4 + /* Description of hardware-level-driver */ typedef struct { - ulong flags; /* Flags */ - int channels; /* Number of channels */ - int reject_bus; /* Flag: Reject rejected call on bus*/ - struct wait_queue *st_waitq; /* Wait-Queue for status-read's */ - int maxbufsize; /* Maximum Buffersize supported */ - unsigned long pktcount; /* Until now: unused */ - int running; /* Flag: Protocolcode running */ - int loaded; /* Flag: Driver loaded */ - int stavail; /* Chars avail on Status-device */ - isdn_if *interface; /* Interface to driver */ - int *rcverr; /* Error-counters for B-Ch.-receive */ - int *rcvcount; /* Byte-counters for B-Ch.-receive */ + ulong online; /* Channel-Online flags */ + ulong flags; /* Misc driver Flags */ + int locks; /* Number of locks for this driver */ + int channels; /* Number of channels */ +#if LINUX_VERSION_CODE < 131841 + struct wait_queue *st_waitq; /* Wait-Queue for status-read's */ +#else + wait_queue_head_t st_waitq; /* Wait-Queue for status-read's */ +#endif + int maxbufsize; /* Maximum Buffersize supported */ + unsigned long pktcount; /* Until now: unused */ + int stavail; /* Chars avail on Status-device */ + isdn_if *interface; /* Interface to driver */ + int *rcverr; /* Error-counters for B-Ch.-receive */ + int *rcvcount; /* Byte-counters for B-Ch.-receive */ #ifdef CONFIG_ISDN_AUDIO - unsigned long DLEflag; /* Flags: Insert DLE at next read */ + unsigned long DLEflag; /* Flags: Insert DLE at next read */ +#endif + struct sk_buff_head *rpqueue; /* Pointers to start of Rcv-Queue */ +#if LINUX_VERSION_CODE < 131841 + struct wait_queue **rcv_waitq; /* Wait-Queues for B-Channel-Reads */ + struct wait_queue **snd_waitq; /* Wait-Queue for B-Channel-Send's */ +#else + wait_queue_head_t *rcv_waitq; /* Wait-Queues for B-Channel-Reads */ + wait_queue_head_t *snd_waitq; /* Wait-Queue for B-Channel-Send's */ #endif - struct sk_buff_head *rpqueue; /* Pointers to start of Rcv-Queue */ - struct wait_queue **rcv_waitq; /* Wait-Queues for B-Channel-Reads */ - struct wait_queue **snd_waitq; /* Wait-Queue for B-Channel-Send's */ - char msn2eaz[10][ISDN_MSNLEN]; /* Mapping-Table MSN->EAZ */ + char msn2eaz[10][ISDN_MSNLEN]; /* Mapping-Table MSN->EAZ */ } driver; /* Main driver-data */ typedef struct isdn_devt { - unsigned short flags; /* Bitmapped Flags: */ - /* */ - int drivers; /* Current number of drivers */ - int channels; /* Current number of channels */ - int net_verbose; /* Verbose-Flag */ - int modempoll; /* Flag: tty-read active */ - int tflags; /* Timer-Flags: */ - /* see ISDN_TIMER_..defines */ - int global_flags; - infostruct *infochain; /* List of open info-devs. */ - struct wait_queue *info_waitq; /* Wait-Queue for isdninfo */ - struct timer_list timer; /* Misc.-function Timer */ - int chanmap[ISDN_MAX_CHANNELS];/* Map minor->device-channel */ - int drvmap[ISDN_MAX_CHANNELS]; /* Map minor->driver-index */ - int usage[ISDN_MAX_CHANNELS]; /* Used by tty/ip/voice */ - char num[ISDN_MAX_CHANNELS][ISDN_MSNLEN]; - /* Remote number of active ch.*/ - int m_idx[ISDN_MAX_CHANNELS]; /* Index for mdm.... */ - driver *drv[ISDN_MAX_DRIVERS]; /* Array of drivers */ - isdn_net_dev *netdev; /* Linked list of net-if's */ - char drvid[ISDN_MAX_DRIVERS][20];/* Driver-ID */ - struct task_struct *profd; /* For iprofd */ - modem mdm; /* tty-driver-data */ - isdn_net_dev *rx_netdev[ISDN_MAX_CHANNELS]; /* rx netdev-pointers */ - isdn_net_dev *st_netdev[ISDN_MAX_CHANNELS]; /* stat netdev-pointers */ - ulong ibytes[ISDN_MAX_CHANNELS]; /* Statistics incoming bytes */ - ulong obytes[ISDN_MAX_CHANNELS]; /* Statistics outgoing bytes */ - int v110emu[ISDN_MAX_CHANNELS];/* V.110 emulator-mode 0=none */ - atomic_t v110use[ISDN_MAX_CHANNELS];/* Usage-Semaphore for stream */ - isdn_v110_stream *v110[ISDN_MAX_CHANNELS]; /* V.110 private data */ - struct semaphore sem; /* serialize list access*/ + unsigned short flags; /* Bitmapped Flags: */ + /* */ + int drivers; /* Current number of drivers */ + int channels; /* Current number of channels */ + int net_verbose; /* Verbose-Flag */ + int modempoll; /* Flag: tty-read active */ + int tflags; /* Timer-Flags: */ + /* see ISDN_TIMER_..defines */ + int global_flags; + infostruct *infochain; /* List of open info-devs. */ +#if LINUX_VERSION_CODE < 131841 + struct wait_queue *info_waitq; /* Wait-Queue for isdninfo */ +#else + wait_queue_head_t info_waitq; /* Wait-Queue for isdninfo */ +#endif + struct timer_list timer; /* Misc.-function Timer */ + int chanmap[ISDN_MAX_CHANNELS];/* Map minor->device-channel */ + int drvmap[ISDN_MAX_CHANNELS]; /* Map minor->driver-index */ + int usage[ISDN_MAX_CHANNELS]; /* Used by tty/ip/voice */ + char num[ISDN_MAX_CHANNELS][ISDN_MSNLEN]; + /* Remote number of active ch.*/ + int m_idx[ISDN_MAX_CHANNELS]; /* Index for mdm.... */ + driver *drv[ISDN_MAX_DRIVERS]; /* Array of drivers */ + isdn_net_dev *netdev; /* Linked list of net-if's */ + char drvid[ISDN_MAX_DRIVERS][20];/* Driver-ID */ + struct task_struct *profd; /* For iprofd */ + modem mdm; /* tty-driver-data */ + isdn_net_dev *rx_netdev[ISDN_MAX_CHANNELS]; /* rx netdev-pointers */ + isdn_net_dev *st_netdev[ISDN_MAX_CHANNELS]; /* stat netdev-pointers */ + ulong ibytes[ISDN_MAX_CHANNELS]; /* Statistics incoming bytes */ + ulong obytes[ISDN_MAX_CHANNELS]; /* Statistics outgoing bytes */ + int v110emu[ISDN_MAX_CHANNELS];/* V.110 emulator-mode 0=none */ + atomic_t v110use[ISDN_MAX_CHANNELS];/* Usage-Semaphore for stream */ + isdn_v110_stream *v110[ISDN_MAX_CHANNELS]; /* V.110 private data */ + struct semaphore sem; /* serialize list access*/ + isdn_module *modules; } isdn_dev; extern isdn_dev *dev; + /* Utility-Macros */ #define MIN(a,b) ((a<b)?a:b) #define MAX(a,b) ((a>b)?a:b) - #endif /* __KERNEL__ */ #endif /* isdn_h */ |