aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/ce/ceddk.h
blob: 12742dbbef77d57022ef6aaa5cc711971ab66b59 (plain) (blame)
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);