📄 isdn.h
字号:
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 int cisco_loop; /* Loop counter for Cisco-SLARP */ ulong cisco_myseq; /* Local keepalive seq. for Cisco */ ulong cisco_yourseq; /* Remote keepalive seq. for Cisco */} isdn_net_local;/* the interface itself */typedef struct isdn_net_dev_s { isdn_net_local *local; isdn_net_local *queue; void *next; /* Pointer to next isdn-interface */ struct device dev; /* interface to upper levels */#ifdef CONFIG_ISDN_PPP struct mpqueue *mp_last; struct ippp_bundle ib;#endif#ifdef CONFIG_ISDN_X25 struct concap_proto *cprot; /* connection oriented encapsulation protocol */#endif} isdn_net_dev;/*===================== End of ip-over-ISDN stuff ===========================*//*======================= Start of ISDN-tty stuff ===========================*/#define ISDN_ASYNC_MAGIC 0x49344C01 /* for paranoia-checking */#define ISDN_ASYNC_INITIALIZED 0x80000000 /* port was initialized */#define ISDN_ASYNC_CALLOUT_ACTIVE 0x40000000 /* Call out device active */#define ISDN_ASYNC_NORMAL_ACTIVE 0x20000000 /* Normal device active */#define ISDN_ASYNC_CLOSING 0x08000000 /* Serial port is closing */#define ISDN_ASYNC_CTS_FLOW 0x04000000 /* Do CTS flow control */#define ISDN_ASYNC_CHECK_CD 0x02000000 /* i.e., CLOCAL */#define ISDN_ASYNC_HUP_NOTIFY 0x0001 /* Notify tty on hangups/closes */#define ISDN_ASYNC_SESSION_LOCKOUT 0x0100 /* Lock cua opens on session */#define ISDN_ASYNC_PGRP_LOCKOUT 0x0200 /* Lock cua opens on pgrp */#define ISDN_ASYNC_CALLOUT_NOHUP 0x0400 /* No hangup for cui */#define ISDN_ASYNC_SPLIT_TERMIOS 0x0008 /* Sep. termios for dialin/out */#define ISDN_SERIAL_XMIT_SIZE 1024 /* Default bufsize for write */#define ISDN_SERIAL_XMIT_MAX 4000 /* Maximum bufsize for write */#define ISDN_SERIAL_TYPE_NORMAL 1#define ISDN_SERIAL_TYPE_CALLOUT 2#ifdef CONFIG_ISDN_AUDIO/* For using sk_buffs with audio we need some private variables * within each sk_buff. For this purpose, we declare a struct here, * and put it always at skb->head. A few macros help accessing the * variables. Of course, we need to check skb_headroom prior to * any access. */typedef struct isdn_audio_skb { unsigned short dle_count; unsigned char lock;} isdn_audio_skb;#define ISDN_AUDIO_SKB_DLECOUNT(skb) (((isdn_audio_skb*)skb->head)->dle_count)#define ISDN_AUDIO_SKB_LOCK(skb) (((isdn_audio_skb*)skb->head)->lock)#endif/* Private data of AT-command-interpreter */typedef struct atemu { u_char profile[ISDN_MODEM_ANZREG]; /* Modem-Regs. Profile 0 */ 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 */#endif 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;/* Private data (similar to async_struct in <linux/serial.h>) */typedef struct modem_info { int magic; int flags; /* defined in tty.h */ int x_char; /* xon/xoff character */ int mcr; /* Modem control register */ int msr; /* Modem status register */ int lsr; /* Line status register */ int line; int count; /* # of fd on device */ int blocked_open; /* # of blocked opens */ long session; /* Session of opening process */ 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 or ATA */ int rcvsched; /* Receive needs schedule */ int isdn_driver; /* Index to isdn-driver */ int isdn_channel; /* Index to isdn-channel */ int drv_index; /* Index to dev->usage */ int ncarrier; /* Flag: schedule NO CARRIER */ unsigned char last_cause[8]; /* Last cause message */ unsigned char last_num[ISDN_MSNLEN]; /* Last phone-number */ unsigned char last_l2; /* Last layer-2 protocol */ unsigned char last_si; /* Last service */ unsigned char last_lhup; /* Last hangup local? */ unsigned char last_dir; /* Last direction (in or out) */ struct timer_list nc_timer; /* Timer for delayed NO CARRIER */ int send_outstanding;/* # of outstanding send-requests */ int xmit_size; /* max. # of chars in xmit_buf */ 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 */ /* Bit 1 = playback */ /* Bit 2 = playback, DLE-ETX seen */ struct sk_buff_head dtmf_queue; /* queue for dtmf results */ 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#ifdef CONFIG_ISDN_TTY_FAX struct T30_s *fax; /* T30 Fax Group 3 data/interface */ int faxonline; /* Fax-channel status */#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;#ifdef COMPAT_HAS_NEW_WAITQ wait_queue_head_t open_wait, close_wait;#else struct wait_queue *open_wait; struct wait_queue *close_wait;#endif struct semaphore write_sem;} modem_info;#define ISDN_MODEM_WINSIZE 8/* Description of one ISDN-tty */typedef struct { int refcount; /* Number of opens */ struct tty_driver tty_modem; /* tty-device */ struct tty_driver cua_modem; /* cua-device */ struct tty_struct *modem_table[ISDN_MAX_CHANNELS]; /* ?? copied from Orig */ struct termios *modem_termios[ISDN_MAX_CHANNELS]; struct termios *modem_termios_locked[ISDN_MAX_CHANNELS]; modem_info info[ISDN_MAX_CHANNELS]; /* Private data */} modem;/*======================= End of ISDN-tty stuff ============================*//*======================== Start of V.110 stuff ============================*/#define V110_BUFSIZE 1024typedef struct { int nbytes; /* 1 Matrixbyte -> nbytes in stream */ int nbits; /* Number of used bits in streambyte */ unsigned char key; /* Bitmask in stream eg. 11 (nbits=2) */ int decodelen; /* Amount of data in decodebuf */ int SyncInit; /* Number of sync frames to send */ unsigned char *OnlineFrame; /* Precalculated V110 idle frame */ unsigned char *OfflineFrame; /* Precalculated V110 sync Frame */ int framelen; /* Length of frames */ int skbuser; /* Number of unacked userdata skbs */ int skbidle; /* Number of unacked idle/sync skbs */ int introducer; /* Local vars for decoder */ int dbit; unsigned char b; int skbres; /* space to reserve in outgoing skb */ int maxsize; /* maxbufsize of lowlevel driver */ unsigned char *encodebuf; /* temporary buffer for encoding */ unsigned char decodebuf[V110_BUFSIZE]; /* incomplete V110 matrices */} isdn_v110_stream;/*========================= End of V.110 stuff =============================*//*======================= Start of general stuff ===========================*/typedef struct { char *next; 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 online; /* Channel-Online flags */ ulong flags; /* Misc driver Flags */ int locks; /* Number of locks for this driver */ int channels; /* Number of channels */#ifdef COMPAT_HAS_NEW_WAITQ wait_queue_head_t st_waitq; /* Wait-Queue for status-read's */#else struct wait_queue *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 */#endif struct sk_buff_head *rpqueue; /* Pointers to start of Rcv-Queue */#ifdef COMPAT_HAS_NEW_WAITQ 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 */#else struct wait_queue **rcv_waitq; /* Wait-Queues for B-Channel-Reads */ struct wait_queue **snd_waitq; /* Wait-Queue for B-Channel-Send's */#endif 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. */#ifdef COMPAT_HAS_NEW_WAITQ wait_queue_head_t info_waitq; /* Wait-Queue for isdninfo */#else struct wait_queue *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 */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -