cserial.h revision 123120
1/* 2 * Ioctl interface to Cronyx serial drivers. 3 * 4 * Copyright (C) 1997-2002 Cronyx Engineering. 5 * Author: Serge Vakulenko, <vak@cronyx.ru> 6 * 7 * Copyright (C) 2001-2003 Cronyx Engineering. 8 * Author: Roman Kurakin, <rik@cronyx.ru> 9 * 10 * This software is distributed with NO WARRANTIES, not even the implied 11 * warranties for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 12 * 13 * Authors grant any other persons or organisations permission to use 14 * or modify this software as long as this message is kept with the software, 15 * all derivative works or modified versions. 16 * 17 * Cronyx Id: cserial.h,v 1.1.2.4 2003/11/12 17:11:08 rik Exp $ 18 * $FreeBSD: head/sys/i386/include/cserial.h 123120 2003-12-03 07:29:38Z imp $ 19 */ 20 21/* 22 * General channel statistics. 23 */ 24struct serial_statistics { 25 unsigned long rintr; /* receive interrupts */ 26 unsigned long tintr; /* transmit interrupts */ 27 unsigned long mintr; /* modem interrupts */ 28 unsigned long ibytes; /* input bytes */ 29 unsigned long ipkts; /* input packets */ 30 unsigned long ierrs; /* input errors */ 31 unsigned long obytes; /* output bytes */ 32 unsigned long opkts; /* output packets */ 33 unsigned long oerrs; /* output errors */ 34}; 35 36/* 37 * Statistics for E1/G703 channels. 38 */ 39struct e1_counters { 40 unsigned long bpv; /* bipolar violations */ 41 unsigned long fse; /* frame sync errors */ 42 unsigned long crce; /* CRC errors */ 43 unsigned long rcrce; /* remote CRC errors (E-bit) */ 44 unsigned long uas; /* unavailable seconds */ 45 unsigned long les; /* line errored seconds */ 46 unsigned long es; /* errored seconds */ 47 unsigned long bes; /* bursty errored seconds */ 48 unsigned long ses; /* severely errored seconds */ 49 unsigned long oofs; /* out of frame seconds */ 50 unsigned long css; /* controlled slip seconds */ 51 unsigned long dm; /* degraded minutes */ 52}; 53 54struct e1_statistics { 55 unsigned long status; /* line status bit mask */ 56 unsigned long cursec; /* seconds in current interval */ 57 unsigned long totsec; /* total seconds elapsed */ 58 struct e1_counters currnt; /* current 15-min interval data */ 59 struct e1_counters total; /* total statistics data */ 60 struct e1_counters interval [48]; /* 12 hour period data */ 61}; 62 63struct e3_statistics { 64 unsigned long status; 65 unsigned long cursec; 66 unsigned long totsec; 67 unsigned long ccv; 68 unsigned long tcv; 69 unsigned long icv[48]; 70}; 71 72#define M_ASYNC 0 /* asynchronous mode */ 73#define M_HDLC 1 /* bit-sync mode (HDLC) */ 74#define M_G703 2 75#define M_E1 3 76 77/* 78 * Receive error codes. 79 */ 80#define ER_FRAMING 1 /* framing error */ 81#define ER_CHECKSUM 2 /* parity/CRC error */ 82#define ER_BREAK 3 /* break state */ 83#define ER_OVERFLOW 4 /* receive buffer overflow */ 84#define ER_OVERRUN 5 /* receive fifo overrun */ 85#define ER_UNDERRUN 6 /* transmit fifo underrun */ 86#define ER_SCC_FRAMING 7 /* subchannel framing error */ 87#define ER_SCC_OVERFLOW 8 /* subchannel receive buffer overflow */ 88#define ER_SCC_OVERRUN 9 /* subchannel receiver overrun */ 89 90/* 91 * E1 channel status. 92 */ 93#define E1_NOALARM 0x0001 /* no alarm present */ 94#define E1_FARLOF 0x0002 /* receiving far loss of framing */ 95#define E1_AIS 0x0008 /* receiving all ones */ 96#define E1_LOF 0x0020 /* loss of framing */ 97#define E1_LOS 0x0040 /* loss of signal */ 98#define E1_AIS16 0x0100 /* receiving all ones in timeslot 16 */ 99#define E1_FARLOMF 0x0200 /* receiving alarm in timeslot 16 */ 100#define E1_LOMF 0x0400 /* loss of multiframe sync */ 101#define E1_TSTREQ 0x0800 /* test code detected */ 102#define E1_TSTERR 0x1000 /* test error */ 103 104#define E3_LOS 0x00000002 /* Lost of synchronization */ 105#define E3_TXE 0x00000004 /* Transmit error */ 106 107/* 108 * Query the mask of all registered channels, max 128. 109 */ 110#define SERIAL_GETREGISTERED _IOR ('x', 0, char[16]) 111 112/* 113 * Attach/detach the protocol to the channel. 114 * The protocol is given by it's name, char[8]. 115 * For example "async", "hdlc", "cisco", "fr", "ppp". 116 */ 117#define SERIAL_GETPROTO _IOR ('x', 1, char [8]) 118#define SERIAL_SETPROTO _IOW ('x', 1, char [8]) 119 120/* 121 * Query/set the hardware mode for the channel. 122 */ 123#define SERIAL_GETMODE _IOR ('x', 2, int) 124#define SERIAL_SETMODE _IOW ('x', 2, int) 125 126#define SERIAL_ASYNC 1 127#define SERIAL_HDLC 2 128 129/* 130 * Get/clear the channel statistics. 131 */ 132#define SERIAL_GETSTAT _IOR ('x', 3, struct serial_statistics) 133#define SERIAL_GETESTAT _IOR ('x', 3, struct e1_statistics) 134#define SERIAL_GETE3STAT _IOR ('x', 3, struct e3_statistics) 135#define SERIAL_CLRSTAT _IO ('x', 3) 136 137/* 138 * Query/set the synchronization mode and baud rate. 139 * If baud==0 then the external clock is used. 140 */ 141#define SERIAL_GETBAUD _IOR ('x', 4, long) 142#define SERIAL_SETBAUD _IOW ('x', 4, long) 143 144/* 145 * Query/set the internal loopback mode, 146 * useful for debugging purposes. 147 */ 148#define SERIAL_GETLOOP _IOR ('x', 5, int) 149#define SERIAL_SETLOOP _IOW ('x', 5, int) 150 151/* 152 * Query/set the DPLL mode, commonly used with NRZI 153 * for channels lacking synchro signals. 154 */ 155#define SERIAL_GETDPLL _IOR ('x', 6, int) 156#define SERIAL_SETDPLL _IOW ('x', 6, int) 157 158/* 159 * Query/set the NRZI encoding (default is NRZ). 160 */ 161#define SERIAL_GETNRZI _IOR ('x', 7, int) 162#define SERIAL_SETNRZI _IOW ('x', 7, int) 163 164/* 165 * Invert receive and transmit clock. 166 */ 167#define SERIAL_GETINVCLK _IOR ('x', 8, int) 168#define SERIAL_SETINVCLK _IOW ('x', 8, int) 169 170/* 171 * Query/set the E1/G703 synchronization mode. 172 */ 173#define SERIAL_GETCLK _IOR ('x', 9, int) 174#define SERIAL_SETCLK _IOW ('x', 9, int) 175 176#define E1CLK_INTERNAL 0 177#define E1CLK_RECEIVE 1 178#define E1CLK_RECEIVE_CHAN0 2 179#define E1CLK_RECEIVE_CHAN1 3 180#define E1CLK_RECEIVE_CHAN2 4 181#define E1CLK_RECEIVE_CHAN3 5 182 183/* 184 * Query/set the E1 timeslot mask. 185 */ 186#define SERIAL_GETTIMESLOTS _IOR ('x', 10, long) 187#define SERIAL_SETTIMESLOTS _IOW ('x', 10, long) 188 189/* 190 * Query/set the E1 subchannel timeslot mask. 191 */ 192#define SERIAL_GETSUBCHAN _IOR ('x', 11, long) 193#define SERIAL_SETSUBCHAN _IOW ('x', 11, long) 194 195/* 196 * Query/set the high input sensitivity mode (E1). 197 */ 198#define SERIAL_GETHIGAIN _IOR ('x', 12, int) 199#define SERIAL_SETHIGAIN _IOW ('x', 12, int) 200 201/* 202 * Query the input signal level in santibells. 203 */ 204#define SERIAL_GETLEVEL _IOR ('x', 13, int) 205 206/* 207 * Get the channel name. 208 */ 209#define SERIAL_GETNAME _IOR ('x', 14, char [32]) 210 211/* 212 * Get version string. 213 */ 214#define SERIAL_GETVERSIONSTRING _IOR ('x', 15, char [256]) 215 216/* 217 * Query/set master channel. 218 */ 219#define SERIAL_GETMASTER _IOR ('x', 16, char [16]) 220#define SERIAL_SETMASTER _IOW ('x', 16, char [16]) 221 222/* 223 * Query/set keepalive. 224 */ 225#define SERIAL_GETKEEPALIVE _IOR ('x', 17, int) 226#define SERIAL_SETKEEPALIVE _IOW ('x', 17, int) 227 228/* 229 * Query/set E1 configuration. 230 */ 231#define SERIAL_GETCFG _IOR ('x', 18, char) 232#define SERIAL_SETCFG _IOW ('x', 18, char) 233 234/* 235 * Query/set debug. 236 */ 237#define SERIAL_GETDEBUG _IOR ('x', 19, int) 238#define SERIAL_SETDEBUG _IOW ('x', 19, int) 239 240/* 241 * Query/set phony mode (E1). 242 */ 243#define SERIAL_GETPHONY _IOR ('x', 20, int) 244#define SERIAL_SETPHONY _IOW ('x', 20, int) 245 246/* 247 * Query/set timeslot 16 usage mode (E1). 248 */ 249#define SERIAL_GETUSE16 _IOR ('x', 21, int) 250#define SERIAL_SETUSE16 _IOW ('x', 21, int) 251 252/* 253 * Query/set crc4 mode (E1). 254 */ 255#define SERIAL_GETCRC4 _IOR ('x', 22, int) 256#define SERIAL_SETCRC4 _IOW ('x', 22, int) 257 258/* 259 * Query/set the timeout to recover after transmit interrupt loss. 260 * If timo==0 recover will be disabled. 261 */ 262#define SERIAL_GETTIMO _IOR ('x', 23, long) 263#define SERIAL_SETTIMO _IOW ('x', 23, long) 264 265/* 266 * Query/set port type for old models of Sigma 267 * -1 Fixed or cable select 268 * 0 RS-232 269 * 1 V35 270 * 2 RS-449 271 * 3 E1 (only for Windows 2000) 272 * 4 G.703 (only for Windows 2000) 273 * 5 DATA (only for Windows 2000) 274 * 6 E3 (only for Windows 2000) 275 * 7 T3 (only for Windows 2000) 276 * 8 STS1 (only for Windows 2000) 277 */ 278#define SERIAL_GETPORT _IOR ('x', 25, int) 279#define SERIAL_SETPORT _IOW ('x', 25, int) 280 281/* 282 * Add the virtual channel DLCI (Frame Relay). 283 */ 284#define SERIAL_ADDDLCI _IOW ('x', 26, int) 285 286/* 287 * Invert receive clock. 288 */ 289#define SERIAL_GETINVRCLK _IOR ('x', 27, int) 290#define SERIAL_SETINVRCLK _IOW ('x', 27, int) 291 292/* 293 * Invert transmit clock. 294 */ 295#define SERIAL_GETINVTCLK _IOR ('x', 28, int) 296#define SERIAL_SETINVTCLK _IOW ('x', 28, int) 297 298/* 299 * Unframed E1 mode. 300 */ 301#define SERIAL_GETUNFRAM _IOR ('x', 29, int) 302#define SERIAL_SETUNFRAM _IOW ('x', 29, int) 303 304/* 305 * E1 monitoring mode. 306 */ 307#define SERIAL_GETMONITOR _IOR ('x', 30, int) 308#define SERIAL_SETMONITOR _IOW ('x', 30, int) 309 310/* 311 * Interrupt number. 312 */ 313#define SERIAL_GETIRQ _IOR ('x', 31, int) 314 315/* 316 * Reset. 317 */ 318#define SERIAL_RESET _IO ('x', 32) 319 320/* 321 * Hard reset. 322 */ 323#define SERIAL_HARDRESET _IO ('x', 33) 324 325/* 326 * Query cable type. 327 */ 328#define SERIAL_GETCABLE _IOR ('x', 34, int) 329 330/* 331 * Assignment of HDLC ports to E1 channels. 332 */ 333#define SERIAL_GETDIR _IOR ('x', 35, int) 334#define SERIAL_SETDIR _IOW ('x', 35, int) 335 336struct dxc_table { /* cross-connector parameters */ 337 unsigned char ts [32]; /* timeslot number */ 338 unsigned char link [32]; /* E1 link number */ 339}; 340 341/* 342 * DXC cross-connector settings for E1 channels. 343 */ 344#define SERIAL_GETDXC _IOR ('x', 36, struct dxc_table) 345#define SERIAL_SETDXC _IOW ('x', 36, struct dxc_table) 346 347/* 348 * Scrambler for G.703. 349 */ 350#define SERIAL_GETSCRAMBLER _IOR ('x', 37, int) 351#define SERIAL_SETSCRAMBLER _IOW ('x', 37, int) 352 353/* 354 * Length of cable for T3 and STS-1. 355 */ 356#define SERIAL_GETCABLEN _IOR ('x', 38, int) 357#define SERIAL_SETCABLEN _IOW ('x', 38, int) 358 359/* 360 * Remote loopback for E3, T3 and STS-1. 361 */ 362#define SERIAL_GETRLOOP _IOR ('x', 39, int) 363#define SERIAL_SETRLOOP _IOW ('x', 39, int) 364 365/* 366 * Dynamic binder interface. 367 */ 368#ifdef __KERNEL__ 369typedef struct _chan_t chan_t; 370typedef struct _proto_t proto_t; 371 372void binder_register_protocol (proto_t *p); 373void binder_unregister_protocol (proto_t *p); 374 375int binder_register_channel (chan_t *h, char *prefix, int minor); 376void binder_unregister_channel (chan_t *h); 377 378/* 379 * Hardware channel driver structure. 380 */ 381struct sk_buff; 382 383struct _chan_t { 384 char name [16]; 385 int mtu; /* max packet size */ 386 int fifosz; /* total hardware i/o buffer size */ 387 int port; /* hardware base i/o port */ 388 int irq; /* hardware interrupt line */ 389 int minor; /* minor number 0..127, assigned by binder */ 390 int debug; /* debug level, 0..2 */ 391 int running; /* running, 0..1 */ 392 struct _proto_t *proto; /* protocol interface data */ 393 void *sw; /* protocol private data */ 394 void *hw; /* hardware layer private data */ 395 396 /* Interface to protocol */ 397 int (*up) (chan_t *h); 398 void (*down) (chan_t *h); 399 int (*transmit) (chan_t *h, struct sk_buff *skb); 400 void (*set_dtr) (chan_t *h, int val); 401 void (*set_rts) (chan_t *h, int val); 402 int (*query_dtr) (chan_t *h); 403 int (*query_rts) (chan_t *h); 404 int (*query_dsr) (chan_t *h); 405 int (*query_cts) (chan_t *h); 406 int (*query_dcd) (chan_t *h); 407 408 /* Interface to async protocol */ 409 void (*set_async_param) (chan_t *h, int baud, int bits, int parity, 410 int stop2, int ignpar, int rtscts, 411 int ixon, int ixany, int symstart, int symstop); 412 void (*send_break) (chan_t *h, int msec); 413 void (*send_xon) (chan_t *h); 414 void (*send_xoff) (chan_t *h); 415 void (*start_transmitter) (chan_t *h); 416 void (*stop_transmitter) (chan_t *h); 417 void (*flush_transmit_buffer) (chan_t *h); 418 419 /* Control interface */ 420 int (*control) (chan_t *h, unsigned int cmd, unsigned long arg); 421}; 422 423/* 424 * Protocol driver structure. 425 */ 426struct _proto_t { 427 char *name; 428 struct _proto_t *next; 429 430 /* Interface to channel */ 431 void (*receive) (chan_t *h, struct sk_buff *skb); 432 void (*receive_error) (chan_t *h, int errcode); 433 void (*transmit) (chan_t *h); 434 void (*modem_event) (chan_t *h); 435 436 /* Interface to binder */ 437 int (*open) (chan_t *h); 438 void (*close) (chan_t *h); 439 int (*read) (chan_t *h, unsigned short flg, char *buf, int len); 440 int (*write) (chan_t *h, unsigned short flg, const char *buf, int len); 441 int (*select) (chan_t *h, int type, void *st, struct file *filp); 442 struct fasync_struct *fasync; 443 444 /* Control interface */ 445 int (*attach) (chan_t *h); 446 int (*detach) (chan_t *h); 447 int (*control) (chan_t *h, unsigned int cmd, unsigned long arg); 448}; 449#endif /* KERNEL */ 450