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
|
/*
* Middle-level code for Cronyx Tau32-PCI adapters.
*
* Copyright (C) 2004 Cronyx Engineering
* Copyright (C) 2004 Roman Kurakin <rik@FreeBSD.org>
*
* This software is distributed with NO WARRANTIES, not even the implied
* warranties for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
*
* Authors grant any other persons or organisations a permission to use,
* modify and redistribute this software in source and binary forms,
* as long as this message is kept with the software, all derivative
* works or modified versions.
*
* $Cronyx: ceddk.h,v 1.2.6.1 2005/11/09 13:01:39 rik Exp $
* $FreeBSD$
*/
#define TAU32_UserContext_Add void *sys;
#define TAU32_UserRequest_Add void *sys; TAU32_UserRequest *next;
#include <dev/ce/tau32-ddk.h>
#define NCHAN TAU32_CHANNELS
#ifndef NBRD
# define NBRD 6
#endif
#if NBRD != 6
# error "NBRD != 6"
#endif
#define BUFSZ 1664
typedef struct _ce_buf_item_t {
TAU32_UserRequest req;
unsigned char buf [BUFSZ+4];
unsigned long phys;
} ce_buf_item_t;
typedef struct _ce_buf_t {
ce_buf_item_t tx_item[TAU32_IO_QUEUE];
ce_buf_item_t rx_item[TAU32_IO_QUEUE];
} ce_buf_t;
typedef struct {
unsigned long bpv; /* bipolar violations */
unsigned long fse; /* frame sync errors */
unsigned long crce; /* CRC errors */
unsigned long rcrce; /* remote CRC errors (E-bit) */
unsigned long uas; /* unavailable seconds */
unsigned long les; /* line errored seconds */
unsigned long es; /* errored seconds */
unsigned long bes; /* bursty errored seconds */
unsigned long ses; /* severely errored seconds */
unsigned long oofs; /* out of frame seconds */
unsigned long css; /* controlled slip seconds */
unsigned long dm; /* degraded minutes */
} ce_gstat_t;
typedef struct _ce_chan_t {
unsigned char num;
unsigned char type;
#define T_NONE 0 /* no channel */
#define T_E1 3 /* E1 */
#define T_DATA 6 /* no physical interface */
struct _ce_board_t *board;
unsigned char dtr;
unsigned char rts;
ce_buf_item_t *tx_item;
ce_buf_item_t *rx_item;
TAU32_UserRequest *rx_queue;
TAU32_UserRequest *tx_queue;
unsigned char debug;
unsigned char debug_shadow;
void (*transmit) (struct _ce_chan_t*, void*, int);
void (*receive) (struct _ce_chan_t*, unsigned char*, int);
void (*error) (struct _ce_chan_t*, int);
#define CE_FRAME 1
#define CE_CRC 2
#define CE_UNDERRUN 3
#define CE_OVERRUN 4
#define CE_OVERFLOW 5
int tx_pending;
int rx_pending;
unsigned long rintr;
unsigned long tintr;
ulong64 ibytes;
ulong64 obytes;
unsigned long ipkts;
unsigned long opkts;
unsigned long underrun;
unsigned long overrun;
unsigned long frame;
unsigned long crc;
unsigned short status; /* E1/G.703 line status bit mask */
#define ESTS_NOALARM 0x0001 /* no alarm present */
#define ESTS_FARLOF 0x0002 /* receiving far loss of framing */
#define ESTS_AIS 0x0008 /* receiving all ones */
#define ESTS_LOF 0x0020 /* loss of framing */
#define ESTS_LOS 0x0040 /* loss of signal */
#define ESTS_AIS16 0x0100 /* receiving all ones in timeslot 16 */
#define ESTS_FARLOMF 0x0200 /* receiving alarm in timeslot 16 */
#define ESTS_LOMF 0x0400 /* loss of multiframe sync */
#define ESTS_TSTREQ 0x0800 /* test code detected */
#define ESTS_TSTERR 0x1000 /* test error */
unsigned long totsec; /* total seconds elapsed */
unsigned long cursec; /* current seconds elapsed */
unsigned long degsec; /* degraded seconds */
unsigned long degerr; /* errors during degraded seconds */
ce_gstat_t currnt; /* current 15-min interval data */
ce_gstat_t total; /* total statistics data */
ce_gstat_t interval [48]; /* 12 hour period data */
unsigned int acc_status;
unsigned long config;
unsigned long baud;
unsigned long ts;
unsigned long ts_mask;
unsigned char dir;
unsigned char lloop;
unsigned char rloop;
unsigned char higain;
unsigned char phony;
unsigned char scrambler;
unsigned char unfram;
unsigned char monitor;
unsigned char crc4;
unsigned char use16;
unsigned char gsyn; /* G.703 clock mode */
#define GSYN_INT 0 /* internal transmit clock source */
#define GSYN_RCV 1 /* transmit clock source = receive */
#define GSYN_RCV0 2 /* tclk = rclk from channel 0 */
#define GSYN_RCV1 3 /* ...from channel 1 */
unsigned long mtu;
void *sys;
} ce_chan_t;
#define CONFREQSZ 128
typedef struct _ce_conf_req {
TAU32_UserRequest req[CONFREQSZ+10];
TAU32_UserRequest *queue;
int pending;
} ce_conf_req;
typedef struct _ce_board_t {
TAU32_UserContext ddk;
ce_chan_t chan[NCHAN];
int num;
int mux;
#define TAU32_BASE_NAME "Tau-PCI-32"
#define TAU32_LITE_NAME "Tau-PCI-32/Lite"
#define TAU32_ADPCM_NAME "Tau-PCI-32/ADPCM"
#define TAU32_UNKNOWN_NAME "Unknown Tau-PCI-32"
char name [32];
ce_conf_req cr;
TAU32_CrossMatrix dxc;
unsigned long pmask;
void *sys;
} ce_board_t;
void ce_set_dtr (ce_chan_t *c, int on);
void ce_set_rts (ce_chan_t *c, int on);
int ce_get_cd (ce_chan_t *c);
int ce_get_cts (ce_chan_t *c);
int ce_get_dsr (ce_chan_t *c);
int ce_transmit_space (ce_chan_t *c);
int ce_send_packet (ce_chan_t *c, unsigned char *buf, int len, void *tag);
void ce_start_chan (ce_chan_t *c, int tx, int rx, ce_buf_t *cb, unsigned long phys);
void ce_stop_chan (ce_chan_t *c);
void ce_register_transmit (ce_chan_t *c, void (*func) (ce_chan_t*, void*, int));
void ce_register_receive (ce_chan_t *c, void (*func) (ce_chan_t*,
unsigned char*, int));
void ce_register_error (ce_chan_t *c, void (*func) (ce_chan_t*, int));
void TAU32_CALLBACK_TYPE
ce_error_callback(TAU32_UserContext *pContext, int Item,
unsigned NotifyBits);
void TAU32_CALLBACK_TYPE
ce_status_callback(TAU32_UserContext *pContext, int Item,
unsigned NotifyBits);
void ce_set_baud (ce_chan_t *c, unsigned long baud);
void ce_set_lloop (ce_chan_t *c, unsigned char on);
void ce_set_rloop (ce_chan_t *c, unsigned char on);
void ce_set_higain (ce_chan_t *c, unsigned char on);
void ce_set_unfram (ce_chan_t *c, unsigned char on);
void ce_set_ts (ce_chan_t *c, unsigned long ts);
void ce_set_phony (ce_chan_t *c, unsigned char on);
void ce_set_scrambler (ce_chan_t *c, unsigned char on);
void ce_set_monitor (ce_chan_t *c, unsigned char on);
void ce_set_use16 (ce_chan_t *c, unsigned char on);
void ce_set_crc4 (ce_chan_t *c, unsigned char on);
void ce_set_gsyn (ce_chan_t *c, int syn);
#define CABLE_TP 11
int ce_get_cable (ce_chan_t *c);
void ce_set_dir (ce_chan_t *c, int dir);
void ce_e1_timer (ce_chan_t *c);
void ce_init_board (ce_board_t *b);
|