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);
|