]> CyberLeo.Net >> Repos - FreeBSD/releng/9.2.git/blob - sys/dev/ce/ceddk.h
- Copy stable/9 to releng/9.2 as part of the 9.2-RELEASE cycle.
[FreeBSD/releng/9.2.git] / sys / dev / ce / ceddk.h
1 /*
2  * Middle-level code for Cronyx Tau32-PCI adapters.
3  *
4  * Copyright (C) 2004 Cronyx Engineering
5  * Copyright (C) 2004 Roman Kurakin <rik@FreeBSD.org>
6  *
7  * This software is distributed with NO WARRANTIES, not even the implied
8  * warranties for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
9  *
10  * Authors grant any other persons or organisations a permission to use,
11  * modify and redistribute this software in source and binary forms,
12  * as long as this message is kept with the software, all derivative
13  * works or modified versions.
14  *
15  * $Cronyx: ceddk.h,v 1.2.6.1 2005/11/09 13:01:39 rik Exp $
16  * $FreeBSD$
17  */
18
19 #define TAU32_UserContext_Add   void    *sys;
20 #define TAU32_UserRequest_Add   void    *sys; TAU32_UserRequest *next;
21
22 #include <dev/ce/tau32-ddk.h>
23
24 #define NCHAN   TAU32_CHANNELS
25 #ifndef NBRD
26 #   define NBRD 6
27 #endif
28 #if NBRD != 6
29 #   error "NBRD != 6"
30 #endif
31
32 #define BUFSZ   1664
33
34 typedef struct _ce_buf_item_t {
35         TAU32_UserRequest req;
36         unsigned char buf [BUFSZ+4];
37         unsigned long phys;
38 } ce_buf_item_t;
39
40 typedef struct _ce_buf_t {
41         ce_buf_item_t tx_item[TAU32_IO_QUEUE];
42         ce_buf_item_t rx_item[TAU32_IO_QUEUE];
43 } ce_buf_t;
44
45 typedef struct {
46         unsigned long bpv;              /* bipolar violations */
47         unsigned long fse;              /* frame sync errors */
48         unsigned long crce;             /* CRC errors */
49         unsigned long rcrce;            /* remote CRC errors (E-bit) */
50         unsigned long uas;              /* unavailable seconds */
51         unsigned long les;              /* line errored seconds */
52         unsigned long es;               /* errored seconds */
53         unsigned long bes;              /* bursty errored seconds */
54         unsigned long ses;              /* severely errored seconds */
55         unsigned long oofs;             /* out of frame seconds */
56         unsigned long css;              /* controlled slip seconds */
57         unsigned long dm;               /* degraded minutes */
58 } ce_gstat_t;
59
60 typedef struct _ce_chan_t {
61         unsigned char num;
62         unsigned char type;
63 #define T_NONE          0               /* no channel */
64 #define T_E1            3               /* E1 */
65 #define T_DATA          6               /* no physical interface */
66         
67         struct _ce_board_t *board;
68         unsigned char dtr;
69         unsigned char rts;
70         ce_buf_item_t *tx_item;
71         ce_buf_item_t *rx_item;
72         TAU32_UserRequest *rx_queue;
73         TAU32_UserRequest *tx_queue;
74         unsigned char debug;
75         unsigned char debug_shadow;
76         void (*transmit) (struct _ce_chan_t*, void*, int);
77         void (*receive) (struct _ce_chan_t*, unsigned char*, int);
78         void (*error) (struct _ce_chan_t*, int);
79 #define CE_FRAME         1
80 #define CE_CRC           2
81 #define CE_UNDERRUN      3
82 #define CE_OVERRUN       4
83 #define CE_OVERFLOW      5
84         int tx_pending;
85         int rx_pending;
86         unsigned long rintr;
87         unsigned long tintr;
88         ulong64 ibytes;
89         ulong64 obytes;
90         unsigned long ipkts;
91         unsigned long opkts;
92         unsigned long underrun;
93         unsigned long overrun;
94         unsigned long frame;
95         unsigned long crc;
96
97         unsigned short status;          /* E1/G.703 line status bit mask */
98 #define ESTS_NOALARM    0x0001          /* no alarm present */
99 #define ESTS_FARLOF     0x0002          /* receiving far loss of framing */
100 #define ESTS_AIS        0x0008          /* receiving all ones */
101 #define ESTS_LOF        0x0020          /* loss of framing */
102 #define ESTS_LOS        0x0040          /* loss of signal */
103 #define ESTS_AIS16      0x0100          /* receiving all ones in timeslot 16 */
104 #define ESTS_FARLOMF    0x0200          /* receiving alarm in timeslot 16 */
105 #define ESTS_LOMF       0x0400          /* loss of multiframe sync */
106 #define ESTS_TSTREQ     0x0800          /* test code detected */
107 #define ESTS_TSTERR     0x1000          /* test error */
108
109         unsigned long totsec;           /* total seconds elapsed */
110         unsigned long cursec;           /* current seconds elapsed */
111         unsigned long degsec;           /* degraded seconds */
112         unsigned long degerr;           /* errors during degraded seconds */
113         ce_gstat_t currnt;              /* current 15-min interval data */
114         ce_gstat_t total;               /* total statistics data */
115         ce_gstat_t interval [48];       /* 12 hour period data */
116
117         unsigned int acc_status;
118         unsigned long config;
119         unsigned long baud;
120         unsigned long ts;
121         unsigned long ts_mask;
122         unsigned char dir;
123         unsigned char lloop;
124         unsigned char rloop;
125         unsigned char higain;
126         unsigned char phony;
127         unsigned char scrambler;
128         unsigned char unfram;
129         unsigned char monitor;
130         unsigned char crc4;
131         unsigned char use16;
132         unsigned char gsyn;             /* G.703 clock mode */
133 #define GSYN_INT        0               /* internal transmit clock source */
134 #define GSYN_RCV        1               /* transmit clock source = receive */
135 #define GSYN_RCV0       2               /* tclk = rclk from channel 0 */
136 #define GSYN_RCV1       3               /* ...from channel 1 */
137         unsigned long mtu;
138         void *sys;
139 } ce_chan_t;
140
141 #define CONFREQSZ       128
142 typedef struct _ce_conf_req {
143         TAU32_UserRequest req[CONFREQSZ+10];
144         TAU32_UserRequest *queue;
145         int     pending;
146 } ce_conf_req;
147
148 typedef struct _ce_board_t {
149         TAU32_UserContext       ddk;
150         ce_chan_t               chan[NCHAN];
151         int                     num;
152         int                     mux;
153 #define TAU32_BASE_NAME         "Tau-PCI-32"
154 #define TAU32_LITE_NAME         "Tau-PCI-32/Lite"
155 #define TAU32_ADPCM_NAME        "Tau-PCI-32/ADPCM"
156 #define TAU32_UNKNOWN_NAME      "Unknown Tau-PCI-32"
157         char                    name [32];
158         ce_conf_req             cr;
159         TAU32_CrossMatrix       dxc;
160         unsigned long           pmask;
161         void *sys;
162 } ce_board_t;
163
164 void ce_set_dtr (ce_chan_t *c, int on);
165 void ce_set_rts (ce_chan_t *c, int on);
166 int ce_get_cd (ce_chan_t *c);
167 int ce_get_cts (ce_chan_t *c);
168 int ce_get_dsr (ce_chan_t *c);
169
170 int ce_transmit_space (ce_chan_t *c);
171 int ce_send_packet (ce_chan_t *c, unsigned char *buf, int len, void *tag);
172 void ce_start_chan (ce_chan_t *c, int tx, int rx, ce_buf_t *cb, unsigned long phys);
173 void ce_stop_chan (ce_chan_t *c);
174 void ce_register_transmit (ce_chan_t *c, void (*func) (ce_chan_t*, void*, int));
175 void ce_register_receive (ce_chan_t *c, void (*func) (ce_chan_t*,
176                                                         unsigned char*, int));
177 void ce_register_error (ce_chan_t *c, void (*func) (ce_chan_t*, int));
178
179 void TAU32_CALLBACK_TYPE
180         ce_error_callback(TAU32_UserContext *pContext, int Item,
181                           unsigned NotifyBits);
182 void TAU32_CALLBACK_TYPE
183         ce_status_callback(TAU32_UserContext *pContext, int Item,
184                           unsigned NotifyBits);
185
186 void ce_set_baud (ce_chan_t *c, unsigned long baud);
187 void ce_set_lloop (ce_chan_t *c, unsigned char on);
188 void ce_set_rloop (ce_chan_t *c, unsigned char on);
189 void ce_set_higain (ce_chan_t *c, unsigned char on);
190 void ce_set_unfram (ce_chan_t *c, unsigned char on);
191 void ce_set_ts (ce_chan_t *c, unsigned long ts);
192 void ce_set_phony (ce_chan_t *c, unsigned char on);
193 void ce_set_scrambler (ce_chan_t *c, unsigned char on);
194 void ce_set_monitor (ce_chan_t *c, unsigned char on);
195 void ce_set_use16 (ce_chan_t *c, unsigned char on);
196 void ce_set_crc4 (ce_chan_t *c, unsigned char on);
197 void ce_set_gsyn (ce_chan_t *c, int syn);
198 #define CABLE_TP                11
199 int ce_get_cable (ce_chan_t *c);
200 void ce_set_dir (ce_chan_t *c, int dir);
201 void ce_e1_timer (ce_chan_t *c);
202 void ce_init_board (ce_board_t *b);