summaryrefslogtreecommitdiff
path: root/tor.h
blob: 9ab0f54e0d4d864205fa0ba0551ff0839db63728 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
/*
 * Tormenta 2  Quad-T1 PCI Driver
 *
 * Written by Mark Spencer <markster@linux-suppot.net>
 *
 * Copyright (C) 2001, Linux Support Services, Inc.
 *
 * All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 
 *
 */

/*
 * Header file for:
 * BSD Telephony Of Mexico "Tormenta" card LINUX driver, version 1.8X1 3/14/01
 * 
 *   Part of the "Zapata" Computer Telephony Technology.
 *
 *   See http://www.bsdtelephony.com.mx
 *
 *
 *  The technologies, software, hardware, designs, drawings, scheumatics, board
 *  layouts and/or artwork, concepts, methodologies (including the use of all
 *  of these, and that which is derived from the use of all of these), all other
 *  intellectual properties contained herein, and all intellectual property
 *  rights have been and shall continue to be expressly for the benefit of all
 *  mankind, and are perpetually placed in the public domain, and may be used,
 *  copied, and/or modified by anyone, in any manner, for any legal purpose,
 *  without restriction.
 *
 */


#define	NTOR 80  /* max number of Tormenta channels (physical + virtual) */

#ifndef	_MACHINE_TOR_H_
#define	_MACHINE_TOR_H_

#include <linux/ioctl.h>

typedef struct tor_params
{
int	sigtype;  /* read-only */
int rxisoffhook; /* read-only */
int	prewinktime;
int	preflashtime;
int	winktime;
int	flashtime;
int	starttime;
int	rxwinktime;
int	rxflashtime;
int	debouncetime;
} TOR_PARAMS;

typedef struct tor_spaninfo
{
int	spanno;		/* span number */
int	alarms;		/* alarms status */
int	txlevel;	/* what TX level is set to */
int	rxlevel;	/* current RX level */
int	bpvcount;	/* current BPV count */
int	syncsrc;	/* span # of current sync source, or 0 for free run  */
int	numchans;	/* number of configured channels on this span */
} TOR_SPANINFO;

typedef struct tor_maintinfo
{
int	spanno;		/* span number 1-2 */
int	command;	/* command */
} TOR_MAINTINFO;

typedef struct tor_confinfo
{
int	chan;		/* channel number, 0 for current */
int	confno;		/* conference number */
int	confmode;	/* conferencing mode */
} TOR_CONFINFO;

typedef struct tor_gains
{
int	chan;		/* channel number, 0 for current */
unsigned char rxgain[256];	/* Receive gain table */
unsigned char txgain[256];	/* Transmit gain table */
} TOR_GAINS;

struct tor_lineconfig
{
int	lbo[2];		/* line build-outs */
int	lineconfig[2];	/* line config parameters (framing, coding) */
int	psync;		/* primary sync source */
int	ssync;		/* secondary sync source */
} ;

struct tor_chanconfig
{
int	chan;		/* Channel we're applying this to */
int	sigtype;	/* Signal type */
int	master;		/* Master channel if sigtype is TOR_SLAVE */
} ;

/* We use two buffers for output */
#define DEFAULT_NUM_BUFS 2
#define MAX_NUM_BUFS 	 8

#define POLICY_IMMEDIATE	0		/* Start playing/recording immediate */
#define POLICY_WHEN_FULL	1		/* Play/record when buffers are full */

typedef struct tor_bufferinfo
{
int txbufpolicy;	/* Policy for handling receive buffers */
int rxbufpolicy;	/* Policy for handling receive buffers */
int numbufs;		/* How many buffers to use */
int bufsize;		/* How big each buffer is */
int readbufs;		/* How many read buffers are full (read-only) */
int writebufs;		/* How many write buffers are full (read-only) */
} BUFFER_INFO;

typedef struct tor_dialparams
{
int mfv1_tonelen;	/* MF tone length (KP = this * 5/3) */
int dtmf_tonelen;	/* DTMF tone length */
int reserved[4];	/* Reserved for future expansion -- always set to 0 */
} DIAL_PARAMS;

/* Define the max # of outgoing DTMF or MFv1 digits to queue in-kernel */
#define TOR_MAX_DTMF_BUF 256

#define TOR_DIAL_OP_APPEND	1
#define TOR_DIAL_OP_REPLACE	2
#define TOR_DIAL_OP_CANCEL	3

typedef struct tor_dialoperation
{
int op;
char dialstr[TOR_MAX_DTMF_BUF];
} DIAL_OPERATION;

#ifdef TOR_DEVEL
#define TOR_MAJOR 250
#else
#define TOR_MAJOR 196
#endif

#ifndef	ELAST
#define	ELAST 500
#endif

#define	TORMAX	48		/* max physical (real) TOR ports */
#define	NCONF	(TORMAX/2)	/* number of conferences */

#define TOR_CODE	'J'

/*
 * Get Transfer Block Size.
 */
#define TOR_GET_BLOCKSIZE	_IOR (TOR_CODE, 1, int)

/*
 * Set Transfer Block Size.
 */
#define TOR_SET_BLOCKSIZE	_IOW (TOR_CODE, 2, int)

/*
 * Flush Buffer(s) and stop I/O
 */
#define	TOR_FLUSH		_IOW (TOR_CODE, 3, int)

/*
 * Wait for Write to Finish
 */
#define	TOR_SYNC		_IOW (TOR_CODE, 4, int)

/*
 * Get channel parameters
 */
#define TOR_GET_PARAMS		_IOR (TOR_CODE, 5, struct tor_params)

/*
 * Get channel parameters
 */
#define TOR_SET_PARAMS		_IOW (TOR_CODE, 6, struct tor_params)

/*
 * Set Hookswitch Status
 */
#define TOR_HOOK		_IOW (TOR_CODE, 7, int)

/*
 * Get Signalling Event
 */
#define TOR_GETEVENT		_IOR (TOR_CODE, 8, int)

/*
 * Wait for something to happen (IO Mux)
 */
#define TOR_IOMUX		_IOWR (TOR_CODE, 9, int)

/*
 * Get Span Status
 */
#define TOR_SPANSTAT		_IOWR (TOR_CODE, 10, struct tor_spaninfo)

/*
 * Set Maintenance Mode
 */
#define TOR_MAINT		_IOW (TOR_CODE, 11, struct tor_maintinfo)

/*
 * Get Conference Mode
 */
#define TOR_GETCONF		_IOWR (TOR_CODE, 12, struct tor_confinfo)

/*
 * Set Conference Mode
 */
#define TOR_SETCONF		_IOWR (TOR_CODE, 13, struct tor_confinfo)

/*
 * Setup or Remove Conference Link
 */
#define TOR_CONFLINK		_IOW (TOR_CODE, 14, struct tor_confinfo)

/*
 * Display Conference Diagnostic Information on Console
 */
#define TOR_CONFDIAG		_IOR (TOR_CODE, 15, int)

/*
 * Get Channel audio gains
 */
#define TOR_GETGAINS		_IOWR (TOR_CODE, 16, struct tor_gains)

/*
 * Set Channel audio gains
 */
#define TOR_SETGAINS		_IOWR (TOR_CODE, 17, struct tor_gains)

/*
 * Set Line (T1) Configurations and start system
 */
#define	TOR_STARTUP		_IOW (TOR_CODE, 18, struct tor_lineconfig)

/*
 * Set Channel Configuration
 */
#define	TOR_CHANCONFIG		_IOW (TOR_CODE, 19, struct tor_chanconfig)

/*
 * Set Conference to mute mode
 */
#define	TOR_CONFMUTE		_IOW (TOR_CODE, 20, int)

/*
 * Send a particular tone (see TOR_TONE_*)
 */
#define	TOR_SENDTONE		_IOW (TOR_CODE, 21, int)

/*
 * Set your region for tones (see TOR_TONE_ZONE_*)
 */
#define	TOR_SETTONEZONE		_IOW (TOR_CODE, 22, int)

/*
 * Retrieve current region for tones (see TOR_TONE_ZONE_*)
 */
#define	TOR_GETTONEZONE		_IOR (TOR_CODE, 23, int)

/*
 * Master unit only -- set default zone (see TOR_TONE_ZONE_*)
 */
#define	TOR_DEFAULTZONE		_IOW (TOR_CODE, 24, int)

/*
 * Load a tone zone from a tor_tone_def_header, see
 * below...
 */
#define TOR_LOADZONE		_IOW (TOR_CODE, 25, struct tor_tone_def_header)

/*
 * Free a tone zone 
 */
#define TOR_FREEZONE		_IOW (TOR_CODE, 26, int)

/*
 * Set buffer policy 
 */
#define TOR_SET_BUFINFO		_IOW (TOR_CODE, 27, struct tor_bufferinfo)

/*
 * Get current buffer info
 */
#define TOR_GET_BUFINFO		_IOR (TOR_CODE, 28, struct tor_bufferinfo)

/*
 * Get dialing parameters
 */
#define TOR_GET_DIALPARAMS	_IOR (TOR_CODE, 29, struct tor_dialparams)

/*
 * Set dialing parameters
 */
#define TOR_SET_DIALPARAMS	_IOW (TOR_CODE, 30, struct tor_dialparams)

/*
 * Append, replace, or cancel a dial string
 */
#define TOR_DIAL			_IOW (TOR_CODE, 31, struct tor_dialoperation)

/*
 * Set a clear channel into audio mode
 */
#define TOR_AUDIOMODE		_IOW (TOR_CODE, 32, int)

/*
 * Enable or disable echo cancellation on a tormenta channel 
 */
#define TOR_ECHOCANCEL		_IOW (TOR_CODE, 33, int)

/* 
 * Shutdown the card
 */
#define TOR_SHUTDOWN		_IO (TOR_CODE, 100)

#define TOR_TONE_ZONE_MAX		128

#define TOR_TONE_ZONE_DEFAULT 	-1	/* To restore default */

#define TOR_TONE_STOP		-1
#define TOR_TONE_DIALTONE	0
#define TOR_TONE_BUSY		1
#define TOR_TONE_RINGTONE	2
#define TOR_TONE_CONGESTION	3
#define TOR_TONE_CALLWAIT	4
#define TOR_TONE_DIALRECALL	5
#define TOR_TONE_RECORDTONE	6
#define TOR_TONE_INFO		7
#define TOR_TONE_CUST1		8
#define TOR_TONE_CUST2		9
#define TOR_TONE_MAX		16

#define TOR_MAX_CADENCE		16

struct tor_tone_def_header {
	int count;		/* How many samples follow */
	int size;		/* Total size of the *data* of our samples (data only!) */
	int zone;		/* Which zone we are loading */
	int ringcadence[TOR_MAX_CADENCE];	/* Ring cadence in ms (0=on, 1=off, ends with 0 value) */
	char name[40];		/* Informational name of zone */
	/* Immediately follow the tor_tone_def_header by tor_tone_def's */
};

struct tor_tone_def {		/* Structure for zone programming */
	int size;		/* The size of the data we have */
	int tone;		/* See TOR_TONE_* */
	int next;		/* What the next position in the cadence is
				   (They're numbered by the order the appear here) */
	int samples;		/* How many samples to play for this cadence */
	unsigned char data[0];	/* The actual samples */
};

#ifdef __KERNEL__
#endif /* KERNEL */

/* Define the maximum block size */
#define	TOR_MAX_BLOCKSIZE	8192

/* Define the default block size */
#define TOR_DEFAULT_BLOCKSIZE	1024

/* Define the default network block size */
#define TOR_DEFAULT_MTU_MRU	2048

/* Flush and stop the read (input) process */
#define	TOR_FLUSH_READ		1

/* Flush and stop the write (output) process */
#define	TOR_FLUSH_WRITE		2

/* Flush and stop both (input and output) processes */
#define	TOR_FLUSH_BOTH		(TOR_FLUSH_READ | TOR_FLUSH_WRITE)

/* Flush the event queue */
#define	TOR_FLUSH_EVENT		4

/* Flush everything */
#define	TOR_FLUSH_ALL		(TOR_FLUSH_READ | TOR_FLUSH_WRITE | TOR_FLUSH_EVENT)


/* Value for TOR_HOOK, set to ON hook */
#define	TOR_ONHOOK	0

/* Value for TOR_HOOK, set to OFF hook */
#define	TOR_OFFHOOK	1

/* Value for TOR_HOOK, wink (off hook momentarily) */
#define	TOR_WINK	2

/* Value for TOR_HOOK, flash (on hook momentarily) */
#define	TOR_FLASH	3

/* Value for TOR_HOOK, start line */
#define	TOR_START	4

/* Value for TOR_HOOK, ring line (same as start line) */
#define	TOR_RING	TOR_START


/* Ret. Value for GET/WAIT Event, no event */
#define	TOR_EVENT_NONE	0

/* Ret. Value for GET/WAIT Event, Went Onhook */
#define	TOR_EVENT_ONHOOK 1

/* Ret. Value for GET/WAIT Event, Went Offhook or got Ring */
#define	TOR_EVENT_RINGOFFHOOK 2

/* Ret. Value for GET/WAIT Event, Got Wink or Flash */
#define	TOR_EVENT_WINKFLASH 3

/* Ret. Value for GET/WAIT Event, Got Alarm */
#define	TOR_EVENT_ALARM	4

/* Ret. Value for GET/WAIT Event, Got No Alarm (after alarm) */
#define	TOR_EVENT_NOALARM 5

/* Ret. Value for GET/WAIT Event, HDLC Abort frame */
#define TOR_EVENT_ABORT 6

/* Ret. Value for GET/WAIT Event, HDLC Frame overrun */
#define TOR_EVENT_OVERRUN 7

/* Ret. Value for GET/WAIT Event, Bad FCS */
#define TOR_EVENT_BADFCS 8

/* Ret. Value for dial complete */
#define TOR_EVENT_DIALCOMPLETE	9

/* Ret Value for ringer going on */
#define TOR_EVENT_RINGERON 10

/* Ret Value for ringer going off */
#define TOR_EVENT_RINGEROFF 11

/* Ret Value for hook change complete */
#define TOR_EVENT_HOOKCOMPLETE 12

/* Value For signal type, E&M Trunk */
#define	TOR_EM		1

/* Value For signal type, FXS Loopstart Trunk */
#define	TOR_FXSLS	2

/* Value For signal type, FXS Groundstart Trunk */
#define	TOR_FXSGS	3

/* Value For signal type, FXS Kewlstart Trunk */
#define	TOR_FXSKS	4

/* Value For signal type, FXO Loopstart Trunk */
#define	TOR_FXOLS	5

/* Value For signal type, FXS Groundstart Trunk */
#define	TOR_FXOGS	6

/* Value For signal type, FXS Kewlstart Trunk */
#define	TOR_FXOKS	7

/* Value for signal type, Clear Channel (no stuffing or RBS) */
#define TOR_CLEAR	8

/* Value for signal type, HDLC raw */
#define TOR_HDLCRAW	9

/* Value for signal type, HDLC network */
#define TOR_HDLCNET	10

/* Value for signal type, HDLC with FCS calculation/checking */
#define TOR_HDLCFCS	11

/* Value for signal type, Slave channel */
#define TOR_SLAVE	20

/* Value for signal type, flag to indicate pseudo-trunk */
#define	TOR_PSEUDO	0x100

/* Flag Value for IOMUX, read avail */
#define	TOR_IOMUX_READ	1

/* Flag Value for IOMUX, write avail */
#define	TOR_IOMUX_WRITE	2

/* Flag Value for IOMUX, write done */
#define	TOR_IOMUX_WRITEEMPTY	4

/* Flag Value for IOMUX, signalling event avail */
#define	TOR_IOMUX_SIGEVENT	8

/* Flag Value for IOMUX, Do Not Wait if nothing to report */
#define	TOR_IOMUX_NOWAIT	0x100

/* Alarm Condition bits */
#define	TOR_ALARM_NONE		0	/* No alarms */
#define	TOR_ALARM_RECOVER	1	/* Recovering from alarm */
#define	TOR_ALARM_LOOPBACK	2	/* In loopback */
#define	TOR_ALARM_YELLOW	4	/* Yellow Alarm */
#define	TOR_ALARM_RED		8	/* Red Alarm */
#define	TOR_ALARM_BLUE		16	/* Blue Alarm */
#define TOR_ALARM_NOTOPEN	32
/* Maintenance modes */
#define	TOR_MAINT_NONE		0	/* Normal Mode */
#define	TOR_MAINT_LOCALLOOP	1	/* Local Loopback */
#define	TOR_MAINT_REMOTELOOP	2	/* Remote Loopback */
#define	TOR_MAINT_LOOPUP	3	/* send loopup code */
#define	TOR_MAINT_LOOPDOWN	4	/* send loopdown code */

/* Per-span configuration values */
#define	TOR_CONFIG_TXLEVEL	7	/* bits 0-2 are tx level */
#define	TOR_CONFIG_ESF		0x10	/* bit 4 is set for ESF, clear for SF */
#define	TOR_CONFIG_B8ZS		0x20	/* bit 5 is set for B8ZS, clear for D4 */
#define TOR_CONFIG_NOTOPEN	0x40

/* Conference modes */
#define	TOR_CONF_MODE_MASK 0xff		/* mask for modes */
#define	TOR_CONF_NORMAL	0		/* normal mode */
#define	TOR_CONF_MONITOR 1		/* monitor mode (rx of other chan) */
#define	TOR_CONF_MONITORTX 2		/* monitor mode (tx of other chan) */
#define	TOR_CONF_MONITORBOTH 3		/* monitor mode (rx & tx of other chan) */
#define	TOR_CONF_CONF 4			/* conference mode */
#define	TOR_CONF_CONFANN 5		/* conference announce mode */
#define	TOR_CONF_CONFMON 6		/* conference monitor mode */
#define	TOR_CONF_CONFANNMON 7		/* conference announce/monitor mode */
#define	TOR_CONF_REALANDPSEUDO 8	/* real and pseudo port both on conf */
#define	TOR_CONF_FLAG_MASK 0xff00	/* mask for flags */
#define	TOR_CONF_LISTENER 0x100		/* is a listener on the conference */
#define	TOR_CONF_TALKER 0x200		/* is a talker on the conference */
#define	TOR_CONF_PSEUDO_LISTENER 0x400	/* pseudo is a listener on the conference */
#define	TOR_CONF_PSEUDO_TALKER 0x800	/* pseudo is a talker on the conference */


#define	TOR_DEFAULT_WINKTIME	150	/* 150 ms default wink time */
#define	TOR_DEFAULT_FLASHTIME	750	/* 750 ms default flash time */

#define	TOR_DEFAULT_PREWINKTIME	50	/* 50 ms before wink */
#define	TOR_DEFAULT_PREFLASHTIME 50	/* 50 ms before flash */
#define	TOR_DEFAULT_STARTTIME 1500	/* 1500 ms of start */
#define	TOR_DEFAULT_RINGTIME 2000	/* 2000 ms of ring on (start, FXO) */
#if 0
#define	TOR_DEFAULT_RXWINKTIME 250	/* 250ms longest rx wink */
#endif
#define	TOR_DEFAULT_RXWINKTIME 300	/* 300ms longest rx wink (to work with the Atlas) */
#define	TOR_DEFAULT_RXFLASHTIME 1250	/* 1250ms longest rx flash */
#define	TOR_DEFAULT_DEBOUNCETIME 600	/* 600ms of FXS GS signalling debounce */

#define	TOR_LOOPCODE_TIME 10000		/* send loop codes for 10 secs */
#define	TOR_ALARMSETTLE_TIME	5000	/* allow alarms to settle for 5 secs */
#define	TOR_AFTERSTART_TIME 500		/* 500ms after start */

#define TOR_RINGOFFTIME 4000		/* Turn off ringer for 4000 ms */
#define	TOR_KEWLTIME 500		/* 500ms for kewl pulse */

#endif /* !_MACHINE_TOR_H_ */