1139749Simp/*- 2128967Srik * Cronyx Tau-PCI DDK definitions. 3128967Srik * 4128967Srik * Copyright (C) 1999-2003 Cronyx Engineering. 5128967Srik * Author: Serge Vakulenko, <vak@cronyx.ru> 6128967Srik * 7128967Srik * Copyright (C) 2000-2004 Cronyx Engineering. 8128967Srik * Author: Roman Kurakin, <rik@cronyx.ru> 9128967Srik * 10128967Srik * This software is distributed with NO WARRANTIES, not even the implied 11128967Srik * warranties for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12128967Srik * 13128967Srik * Authors grant any other persons or organisations a permission to use, 14128967Srik * modify and redistribute this software in source and binary forms, 15128967Srik * as long as this message is kept with the software, all derivative 16128967Srik * works or modified versions. 17128967Srik * 18138698Srik * $Cronyx: cpddk.h,v 1.8.4.20 2004/12/06 16:21:06 rik Exp $ 19128967Srik * $FreeBSD$ 20128967Srik */ 21128967Srik#define NBRD 6 /* the maximum number of installed boards */ 22128967Srik#define NCHAN 4 /* the number of channels on the board */ 23128967Srik#define NRBUF 64 /* the number of receive buffers per channel, 24128967Srik min 2 */ 25128967Srik#define NTBUF 4 /* the number of transmit buffers per channel */ 26128967Srik#define BUFSZ 1664 /* i/o buffer size (26*64, min 1601) */ 27128967Srik#define QSZ 128 /* intr queue size (multiple of 32, min 32) */ 28128967Srik 29128967Srik#ifndef CPDDK_COBF_SAFE 30128967Srik#pragma pack(4) 31128967Srik 32128967Sriktypedef struct { 33128967Srik unsigned long bpv; /* bipolar violations */ 34128967Srik unsigned long fse; /* frame sync errors */ 35128967Srik unsigned long crce; /* CRC errors */ 36128967Srik unsigned long rcrce; /* remote CRC errors (E-bit) */ 37128967Srik unsigned long uas; /* unavailable seconds */ 38128967Srik unsigned long les; /* line errored seconds */ 39128967Srik unsigned long es; /* errored seconds */ 40128967Srik unsigned long bes; /* bursty errored seconds */ 41128967Srik unsigned long ses; /* severely errored seconds */ 42128967Srik unsigned long oofs; /* out of frame seconds */ 43128967Srik unsigned long css; /* controlled slip seconds */ 44128967Srik unsigned long dm; /* degraded minutes */ 45128967Srik} cp_gstat_t; 46128967Srik 47128967Sriktypedef struct { /* cross-connector parameters */ 48128967Srik unsigned char ts [32]; /* timeslot number */ 49128967Srik unsigned char link [32]; /* E1 link number */ 50128967Srik} cp_dxc_t; 51128967Srik 52128967Sriktypedef struct { 53128967Srik unsigned long len; /* data buffer length, fe, hold, hi */ 54128967Srik#define DESC_FE 0x80000000 55128967Srik#define DESC_HOLD 0x40000000 56128967Srik#define DESC_HI 0x20000000 57128967Srik#define DESC_LEN(v) ((v) >> 16 & 0x1fff) 58128967Srik 59128967Srik unsigned long next; /* next descriptor pointer */ 60128967Srik unsigned long data; /* pointer to data buffer */ 61128967Srik unsigned long status; /* complete, receive abort, fe, len */ 62128967Srik#define DESC_RA 0x00000200 63128967Srik#define DESC_C 0x40000000 64128967Srik 65128967Srik unsigned long fe; /* pointer to frame end descriptor */ 66128967Srik} cp_desc_t; 67128967Srik 68128967Sriktypedef struct { 69128967Srik cp_desc_t tdesc [NTBUF]; /* transmit buffer descriptors */ 70128967Srik cp_desc_t rdesc [NRBUF]; /* receive buffer descriptors */ 71128967Srik unsigned char tbuffer [NTBUF] [BUFSZ]; /* transmit buffers */ 72128967Srik unsigned char rbuffer [NRBUF] [BUFSZ]; /* receive buffers */ 73128967Srik} cp_buf_t; 74128967Srik 75128967Sriktypedef struct { 76128967Srik unsigned long iqrx [NCHAN] [QSZ]; /* rx intr queue */ 77128967Srik unsigned long iqtx [NCHAN] [QSZ]; /* tx intr queue */ 78128967Srik unsigned long iqlx [QSZ]; /* LBI intr queue */ 79128967Srik} cp_qbuf_t; 80128967Srik 81128967Sriktypedef struct _cp_chan_t { 82128967Srik unsigned char *regs; /* base addr of channel registers */ 83128967Srik volatile unsigned long *RXBAR, *TXBAR, *CFG; 84128967Srik volatile unsigned long *BRDA, *FRDA, *LRDA, *BTDA, *FTDA, *LTDA; 85128967Srik unsigned char CCR, CSR, GMD, GLS, E1CS, E1CR, E1EPS; 86128967Srik 87128967Srik unsigned char num; /* channel number, 0..1 */ 88128967Srik unsigned char type; /* channel type */ 89128967Srik#define T_NONE 0 /* no channel */ 90128967Srik#define T_SERIAL 1 /* V.35/RS */ 91128967Srik#define T_G703 2 /* G.703 */ 92128967Srik#define T_E1 3 /* E1 */ 93128967Srik#define T_E3 4 /* E3 */ 94128967Srik#define T_HSSI 5 /* HSSI */ 95128967Srik#define T_DATA 6 /* no physical interface */ 96128967Srik#define T_T3 7 /* T3 */ 97128967Srik#define T_STS1 8 /* STS1 */ 98128967Srik 99128967Srik struct _cp_board_t *board; /* board pointer */ 100128967Srik 101128967Srik unsigned char dtr; /* DTR signal value */ 102128967Srik unsigned char rts; /* RTS signal value */ 103128967Srik unsigned long baud; /* data rate, bps */ 104128967Srik unsigned char dpll; /* dpll mode */ 105128967Srik unsigned char nrzi; /* nrzi mode */ 106128967Srik unsigned char invtxc; /* invert tx clock */ 107128967Srik unsigned char invrxc; /* invert rx clock */ 108128967Srik unsigned char lloop; /* local loopback mode */ 109128967Srik unsigned char rloop; /* remote loopback mode */ 110128967Srik unsigned char gsyn; /* G.703 clock mode */ 111128967Srik#define GSYN_INT 0 /* internal transmit clock source */ 112128967Srik#define GSYN_RCV 1 /* transmit clock source = receive */ 113128967Srik#define GSYN_RCV0 2 /* tclk = rclk from channel 0 */ 114128967Srik#define GSYN_RCV1 3 /* ...from channel 1 */ 115128967Srik#define GSYN_RCV2 4 /* ...from channel 2 */ 116128967Srik#define GSYN_RCV3 5 /* ...from channel 3 */ 117128967Srik 118128967Srik unsigned char scrambler; /* G.703 scrambler enable */ 119128967Srik 120128967Srik unsigned long ts; /* E1 timeslot mask */ 121128967Srik unsigned char higain; /* E1 high gain mode */ 122128967Srik unsigned char use16; /* E1 use ts 16 */ 123128967Srik unsigned char crc4; /* E1 enable CRC4 */ 124128967Srik unsigned char phony; /* E1 phony mode */ 125128967Srik unsigned char unfram; /* E1 unframed mode */ 126128967Srik unsigned char monitor; /* E1 monitoring mode */ 127128967Srik unsigned char dir; /* E1 direction mode */ 128128967Srik cp_dxc_t dxc; /* E1 cross-connect params */ 129128967Srik 130128967Srik unsigned char ais; /* E3 AIS */ 131128967Srik unsigned char losais; /* E3 AIS on LOS*/ 132128967Srik unsigned char ber; /* E3 BER */ 133128967Srik unsigned char cablen; /* E3 cable length */ 134128967Srik unsigned char e3cr1; /* e3cr1 clone */ 135128967Srik 136128967Srik unsigned char scc_ien; /* SCC Interrupts enabled */ 137128967Srik unsigned char ds_ien; /* DS Interrupts enabled */ 138128967Srik 139128967Srik unsigned long imr; 140128967Srik unsigned char ccr; /* CCR image */ 141128967Srik unsigned long ccr0; /* CCR0 clone */ 142128967Srik unsigned long ccr1; /* CCR1 clone */ 143128967Srik unsigned long ccr2; /* CCR2 clone */ 144128967Srik unsigned char gmd; /* G.703 MDi register image */ 145128967Srik unsigned char e1cr; /* E1 CR register image */ 146128967Srik unsigned char ds21x54; /* new tranceiver flag */ 147128967Srik 148128967Srik unsigned long rintr; /* receive interrupts */ 149128967Srik unsigned long tintr; /* transmit interrupts */ 150128967Srik ulong64 ibytes; /* input bytes */ 151128967Srik ulong64 obytes; /* output bytes */ 152128967Srik unsigned long ipkts; /* input packets */ 153128967Srik unsigned long opkts; /* output packets */ 154128967Srik unsigned long underrun; /* output underrun errors */ 155128967Srik unsigned long overrun; /* input overrun errors */ 156128967Srik unsigned long frame; /* input frame errors */ 157128967Srik unsigned long crc; /* input crc errors */ 158128967Srik 159128967Srik unsigned short status; /* E1/G.703 line status bit mask */ 160128967Srik#define ESTS_NOALARM 0x0001 /* no alarm present */ 161128967Srik#define ESTS_FARLOF 0x0002 /* receiving far loss of framing */ 162128967Srik#define ESTS_AIS 0x0008 /* receiving all ones */ 163128967Srik#define ESTS_LOF 0x0020 /* loss of framing */ 164128967Srik#define ESTS_LOS 0x0040 /* loss of signal */ 165128967Srik#define ESTS_AIS16 0x0100 /* receiving all ones in timeslot 16 */ 166128967Srik#define ESTS_FARLOMF 0x0200 /* receiving alarm in timeslot 16 */ 167128967Srik#define ESTS_LOMF 0x0400 /* loss of multiframe sync */ 168128967Srik#define ESTS_TSTREQ 0x0800 /* test code detected */ 169128967Srik#define ESTS_TSTERR 0x1000 /* test error */ 170128967Srik 171128967Srik unsigned long totsec; /* total seconds elapsed */ 172128967Srik unsigned long cursec; /* current seconds elapsed */ 173128967Srik unsigned long degsec; /* degraded seconds */ 174128967Srik unsigned long degerr; /* errors during degraded seconds */ 175128967Srik cp_gstat_t currnt; /* current 15-min interval data */ 176128967Srik cp_gstat_t total; /* total statistics data */ 177128967Srik cp_gstat_t interval [48]; /* 12 hour period data */ 178128967Srik unsigned long e3status; /* E3 status */ 179128967Srik#define E3STS_LOS 0x00000002 /* Lost of synchronization */ 180128967Srik#define E3STS_TXE 0x00000004 /* Transmit error */ 181133848Srik#define E3STS_AIS 0x00000008 /* Transmit error */ 182128967Srik unsigned long e3csec_5; /* 1/5 of second counter */ 183128967Srik unsigned long e3tsec; /* total seconds coounter */ 184128967Srik unsigned long e3ccv; /* E3 current 15-min cv errors */ 185128967Srik unsigned long e3tcv; /* E3 total cv errors */ 186128967Srik unsigned long e3icv[48]; /* E3 12 hour period cv errors */ 187128967Srik 188128967Srik unsigned long *iqrx; /* rx intr queue */ 189128967Srik unsigned long *iqtx; /* tx intr queue */ 190128967Srik int irn, itn; 191128967Srik 192128967Srik unsigned char *tbuf [NTBUF]; /* transmit buffers */ 193128967Srik cp_desc_t *tdesc; /* transmit buffer descriptors */ 194128967Srik unsigned long tphys [NTBUF]; /* transmit buffer phys address */ 195128967Srik unsigned long tdphys [NTBUF]; /* transmit descr phys addresses */ 196128967Srik int tn; /* first active transmit buffer */ 197128967Srik int te; /* first empty transmit buffer */ 198128967Srik 199128967Srik unsigned char *rbuf [NRBUF]; /* receive buffers */ 200128967Srik cp_desc_t *rdesc; /* receive buffer descriptors */ 201128967Srik unsigned long rphys [NRBUF]; /* receive buffer phys address */ 202128967Srik unsigned long rdphys [NRBUF]; /* receive descr phys addresses */ 203128967Srik int rn; /* first active receive buffer */ 204128967Srik 205128967Srik void *tag [NTBUF]; /* system dependent data per buffer */ 206128967Srik void *sys; /* system dependent data per channel */ 207128967Srik unsigned char debug; /* debug level, 0..2 */ 208180132Srik unsigned char debug_shadow; /* debug shadow */ 209128967Srik 210128967Srik void (*transmit) (struct _cp_chan_t *c, void *tag, int len); 211128967Srik void (*receive) (struct _cp_chan_t *c, unsigned char *data, int len); 212128967Srik void (*error) (struct _cp_chan_t *c, int reason); 213128967Srik#define CP_FRAME 1 214128967Srik#define CP_CRC 2 215128967Srik#define CP_UNDERRUN 3 216128967Srik#define CP_OVERRUN 4 217128967Srik#define CP_OVERFLOW 5 218128967Srik} cp_chan_t; 219128967Srik 220128967Sriktypedef struct _cp_board_t { 221128967Srik unsigned char *base; /* base address of adapter registers */ 222128967Srik unsigned char num; /* board number, 0..5 */ 223128967Srik unsigned char type; /* board type Tau/TauE1/TauG703 */ 224128967Srik#define B_TAUPCI 1 /* 2 channels V.35/RS */ 225128967Srik#define B_TAUPCI_E3 2 /* 1 channel E3 */ 226128967Srik#define B_TAUPCI_HSSI 3 /* 1 channel HSSI */ 227128967Srik#define B_TAUPCI_G703 4 /* 2 channels G703 */ 228128967Srik#define B_TAUPCI_E1 5 /* 2 channels E1 */ 229128967Srik#define B_TAUPCI4 6 /* 4 channels V.35/RS */ 230128967Srik#define B_TAUPCI4_G703 7 /* 2 channels G.703 + 2 channels V.35/RS */ 231128967Srik#define B_TAUPCI4_4G703 8 /* 4 channels G.703 */ 232128967Srik#define B_TAUPCI_2E1 9 /* 2 channels E1, 4 data ports */ 233128967Srik#define B_TAUPCI4_E1 10 /* 2 channels E1 + 2 channels V.35/RS */ 234128967Srik#define B_TAUPCI4_4E1 11 /* 4 channels E1 */ 235138698Srik#define B_TAUPCI_L 12 /* 1 channel V.35/RS */ 236128967Srik 237128967Srik unsigned long osc; /* oscillator frequency */ 238128967Srik char name[16]; /* board version name */ 239128967Srik cp_chan_t chan[NCHAN]; /* channel structures */ 240128967Srik unsigned char mux; /* E1 mux mode */ 241128967Srik unsigned char dxc_cas; /* CAS cross-connection */ 242128967Srik unsigned char bcr; /* BCR image */ 243128967Srik unsigned char e1cfg; /* E1 CFG register image */ 244128967Srik unsigned char gpidle; /* idle bits of gp port */ 245128967Srik unsigned char E1DATA; 246128967Srik unsigned long intr; /* interrupt counter */ 247128967Srik unsigned long *iqlx; /* LBI intr queue */ 248128967Srik int iln; 249128967Srik unsigned char fw_type; /* firmware type */ 250128967Srik#define FW_TAUPCI_NONE 0 251133848Srik#define FW_TAUPCI_E3_B 1 252128967Srik#define FW_TAUPCI_2E1_B 2 253128967Srik#define FW_TAUPCI_2E1_A 3 254128967Srik#define FW_TAUPCI_4E1_B 6 255128967Srik#define FW_TAUPCI_4E1_A 7 256133848Srik unsigned char *firmware[8]; /* external firmware */ 257128967Srik void *sys; 258128967Srik} cp_board_t; 259128967Srik 260128967Srik#pragma pack() 261128967Srik 262128967Srik/* PCI device identifiers. */ 263128967Srikextern unsigned short cp_vendor_id; 264128967Srikextern unsigned short cp_device_id; 265128967Srik 266128967Srik/* Initialization. */ 267128967Srikunsigned short cp_init (cp_board_t *b, int num, unsigned char *base); 268128967Srikvoid cp_reset (cp_board_t *b, cp_qbuf_t *buf, unsigned long phys); 269128967Srikvoid cp_hard_reset (cp_board_t *b); 270128967Srikunsigned long cp_regio (cp_chan_t *c, int op, int reg, unsigned long val); 271128967Srik#define REGIO_INB 0 272128967Srik#define REGIO_IN 1 273128967Srik#define REGIO_INS 2 274128967Srik#define REGIO_INX 3 275128967Srik#define REGIO_INB_OUTB 4 276128967Srik#define REGIO_OUTB 5 277128967Srik#define REGIO_OUTX 6 278128967Srik#define REGIO_R_W 7 279128967Srik#define REGIO_OUT_IN 8 280128967Srik#define REGIO_OUTB_INB 9 281128967Srik 282128967Srik/* Callback registration. */ 283128967Srikvoid cp_register_transmit (cp_chan_t *c, void (*func) (cp_chan_t*, void*, int)); 284128967Srikvoid cp_register_receive (cp_chan_t *c, void (*func) (cp_chan_t*, 285128967Srik unsigned char*, int)); 286128967Srikvoid cp_register_error (cp_chan_t *c, void (*func) (cp_chan_t*, int)); 287128967Srik 288128967Srik/* Data transmittion. */ 289128967Srikvoid cp_start_chan (cp_chan_t *c, int tx, int rx, cp_buf_t *cb, unsigned long phys); 290128967Srikvoid cp_stop_chan (cp_chan_t *c); 291128967Srikvoid cp_start_e1 (cp_chan_t *c); 292128967Srikvoid cp_stop_e1 (cp_chan_t *c); 293128967Srikint cp_transmit_space (cp_chan_t *c); 294128967Srikint cp_send_packet (cp_chan_t *c, unsigned char *data, int len, void *tag); 295128967Srik 296128967Srik/* Interrupt control. */ 297128967Srikint cp_interrupt (cp_board_t *b); 298128967Srikint cp_interrupt_poll (cp_board_t *b, int ack); 299128967Srikvoid cp_handle_interrupt (cp_board_t *b); 300128967Srikvoid cp_enable_interrupt (cp_board_t *b, int on); 301128967Srik 302128967Srik/* G.703 timer. */ 303128967Srikvoid cp_g703_timer (cp_chan_t *c); 304128967Srik 305128967Srik/* E1 timer. */ 306128967Srikvoid cp_e1_timer (cp_chan_t *c); 307128967Srik 308128967Srik/* E3 timer. */ 309128967Srikvoid cp_e3_timer (cp_chan_t *c); 310128967Srik 311128967Srik/* LED control. */ 312128967Srikvoid cp_led (cp_board_t *b, int on); 313128967Srik 314128967Srik/* Modem signals. */ 315128967Srikvoid cp_set_dtr (cp_chan_t *c, int on); 316128967Srikvoid cp_set_rts (cp_chan_t *c, int on); 317128967Srikint cp_get_dsr (cp_chan_t *c); 318128967Srikint cp_get_cd (cp_chan_t *c); 319128967Srikint cp_get_cts (cp_chan_t *c); 320128967Srikint cp_get_txcerr (cp_chan_t *c); 321128967Srikint cp_get_rxcerr (cp_chan_t *c); 322128967Srik 323128967Srik/* HDLC parameters. */ 324128967Srikvoid cp_set_baud (cp_chan_t *c, int baud); 325128967Srikvoid cp_set_dpll (cp_chan_t *c, int on); 326128967Srikvoid cp_set_nrzi (cp_chan_t *c, int on); 327128967Srikvoid cp_set_invtxc (cp_chan_t *c, int on); 328128967Srikvoid cp_set_invrxc (cp_chan_t *c, int on); 329128967Srikvoid cp_set_lloop (cp_chan_t *c, int on); 330128967Srik 331128967Srik/* Channel status, cable type. */ 332128967Srikint cp_get_rloop (cp_chan_t *c); 333128967Srikint cp_get_lq (cp_chan_t *c); 334128967Srikint cp_get_cable (cp_chan_t *c); 335128967Srik#define CABLE_RS232 0 336128967Srik#define CABLE_V35 1 337128967Srik#define CABLE_RS530 2 338128967Srik#define CABLE_X21 3 339128967Srik#define CABLE_RS485 4 340128967Srik#define CABLE_NOT_ATTACHED 9 341128967Srik#define CABLE_COAX 10 342128967Srik#define CABLE_TP 11 343128967Srik 344128967Srik/* E1/G.703 parameters. */ 345128967Srikvoid cp_set_gsyn (cp_chan_t *c, int syn); 346128967Srikvoid cp_set_ts (cp_chan_t *c, unsigned long ts); 347128967Srikvoid cp_set_dir (cp_chan_t *c, int dir); 348128967Srikvoid cp_set_mux (cp_board_t *b, int on); 349128967Srikvoid cp_dxc_cas_enable (cp_board_t *b, int on); 350128967Srikvoid cp_set_dxc (cp_chan_t *c, cp_dxc_t *param); 351128967Srikvoid cp_set_higain (cp_chan_t *c, int on); 352128967Srikvoid cp_set_use16 (cp_chan_t *c, int on); 353128967Srikvoid cp_set_crc4 (cp_chan_t *c, int on); 354128967Srikvoid cp_set_phony (cp_chan_t *c, int on); 355128967Srikvoid cp_set_unfram (cp_chan_t *c, int on); 356128967Srikvoid cp_set_scrambler (cp_chan_t *c, int on); 357128967Srikvoid cp_set_monitor (cp_chan_t *c, int on); 358128967Srik 359128967Srik/* E3 parameters. */ 360128967Srikvoid cp_set_rloop (cp_chan_t *c, int on); 361128967Srikvoid cp_set_ber (cp_chan_t *c, int on); 362128967Srikvoid cp_set_cablen (cp_chan_t *c, int on); 363128967Srikvoid cp_set_losais (cp_chan_t *c, int on); 364128967Srik 365128967Srik#endif /* CPDDK_COBF_SAFE */ 366