Commit | Line | Data |
---|---|---|
0b99d589 LL |
1 | /* |
2 | * Copyright 2003 Digi International (www.digi.com) | |
3 | * Scott H Kilau <Scott_Kilau at digi dot com> | |
4 | * | |
5 | * This program is free software; you can redistribute it and/or modify | |
6 | * it under the terms of the GNU General Public License as published by | |
7 | * the Free Software Foundation; either version 2, or (at your option) | |
8 | * any later version. | |
9 | * | |
10 | * This program is distributed in the hope that it will be useful, | |
11 | * but WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED; without even the | |
12 | * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR | |
13 | * PURPOSE. See the GNU General Public License for more details. | |
14 | * | |
15 | * You should have received a copy of the GNU General Public License | |
16 | * along with this program; if not, write to the Free Software | |
17 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |
18 | * | |
0b99d589 LL |
19 | * NOTE: THIS IS A SHARED HEADER. DO NOT CHANGE CODING STYLE!!! |
20 | */ | |
21 | ||
22 | #ifndef __DIGI_H | |
23 | #define __DIGI_H | |
24 | ||
25 | /************************************************************************ | |
26 | *** Definitions for Digi ditty(1) command. | |
27 | ************************************************************************/ | |
28 | ||
29 | ||
30 | /* | |
31 | * Copyright (c) 1988-96 Digi International Inc., All Rights Reserved. | |
32 | */ | |
33 | ||
34 | /************************************************************************ | |
35 | * This module provides application access to special Digi | |
36 | * serial line enhancements which are not standard UNIX(tm) features. | |
37 | ************************************************************************/ | |
38 | ||
39 | #if !defined(TIOCMODG) | |
40 | ||
41 | #define TIOCMODG ('d'<<8) | 250 /* get modem ctrl state */ | |
42 | #define TIOCMODS ('d'<<8) | 251 /* set modem ctrl state */ | |
43 | ||
b8f5472a | 44 | #ifndef TIOCM_LE |
0b99d589 LL |
45 | #define TIOCM_LE 0x01 /* line enable */ |
46 | #define TIOCM_DTR 0x02 /* data terminal ready */ | |
47 | #define TIOCM_RTS 0x04 /* request to send */ | |
48 | #define TIOCM_ST 0x08 /* secondary transmit */ | |
49 | #define TIOCM_SR 0x10 /* secondary receive */ | |
50 | #define TIOCM_CTS 0x20 /* clear to send */ | |
51 | #define TIOCM_CAR 0x40 /* carrier detect */ | |
52 | #define TIOCM_RNG 0x80 /* ring indicator */ | |
53 | #define TIOCM_DSR 0x100 /* data set ready */ | |
54 | #define TIOCM_RI TIOCM_RNG /* ring (alternate) */ | |
55 | #define TIOCM_CD TIOCM_CAR /* carrier detect (alt) */ | |
56 | #endif | |
57 | ||
58 | #endif | |
59 | ||
60 | #if !defined(TIOCMSET) | |
61 | #define TIOCMSET ('d'<<8) | 252 /* set modem ctrl state */ | |
62 | #define TIOCMGET ('d'<<8) | 253 /* set modem ctrl state */ | |
63 | #endif | |
64 | ||
65 | #if !defined(TIOCMBIC) | |
66 | #define TIOCMBIC ('d'<<8) | 254 /* set modem ctrl state */ | |
67 | #define TIOCMBIS ('d'<<8) | 255 /* set modem ctrl state */ | |
68 | #endif | |
69 | ||
70 | ||
71 | #if !defined(TIOCSDTR) | |
72 | #define TIOCSDTR ('e'<<8) | 0 /* set DTR */ | |
73 | #define TIOCCDTR ('e'<<8) | 1 /* clear DTR */ | |
74 | #endif | |
75 | ||
76 | /************************************************************************ | |
77 | * Ioctl command arguments for DIGI parameters. | |
78 | ************************************************************************/ | |
79 | #define DIGI_GETA ('e'<<8) | 94 /* Read params */ | |
80 | ||
81 | #define DIGI_SETA ('e'<<8) | 95 /* Set params */ | |
82 | #define DIGI_SETAW ('e'<<8) | 96 /* Drain & set params */ | |
83 | #define DIGI_SETAF ('e'<<8) | 97 /* Drain, flush & set params */ | |
84 | ||
85 | #define DIGI_KME ('e'<<8) | 98 /* Read/Write Host */ | |
86 | /* Adapter Memory */ | |
87 | ||
88 | #define DIGI_GETFLOW ('e'<<8) | 99 /* Get startc/stopc flow */ | |
89 | /* control characters */ | |
90 | #define DIGI_SETFLOW ('e'<<8) | 100 /* Set startc/stopc flow */ | |
91 | /* control characters */ | |
92 | #define DIGI_GETAFLOW ('e'<<8) | 101 /* Get Aux. startc/stopc */ | |
93 | /* flow control chars */ | |
94 | #define DIGI_SETAFLOW ('e'<<8) | 102 /* Set Aux. startc/stopc */ | |
95 | /* flow control chars */ | |
96 | ||
97 | #define DIGI_GEDELAY ('d'<<8) | 246 /* Get edelay */ | |
98 | #define DIGI_SEDELAY ('d'<<8) | 247 /* Set edelay */ | |
99 | ||
100 | struct digiflow_t { | |
101 | unsigned char startc; /* flow cntl start char */ | |
102 | unsigned char stopc; /* flow cntl stop char */ | |
103 | }; | |
104 | ||
105 | ||
106 | #ifdef FLOW_2200 | |
107 | #define F2200_GETA ('e'<<8) | 104 /* Get 2x36 flow cntl flags */ | |
108 | #define F2200_SETAW ('e'<<8) | 105 /* Set 2x36 flow cntl flags */ | |
109 | #define F2200_MASK 0x03 /* 2200 flow cntl bit mask */ | |
110 | #define FCNTL_2200 0x01 /* 2x36 terminal flow cntl */ | |
111 | #define PCNTL_2200 0x02 /* 2x36 printer flow cntl */ | |
112 | #define F2200_XON 0xf8 | |
113 | #define P2200_XON 0xf9 | |
114 | #define F2200_XOFF 0xfa | |
115 | #define P2200_XOFF 0xfb | |
116 | ||
117 | #define FXOFF_MASK 0x03 /* 2200 flow status mask */ | |
118 | #define RCVD_FXOFF 0x01 /* 2x36 Terminal XOFF rcvd */ | |
119 | #define RCVD_PXOFF 0x02 /* 2x36 Printer XOFF rcvd */ | |
120 | #endif | |
121 | ||
122 | /************************************************************************ | |
b8f5472a | 123 | * Values for digi_flags |
0b99d589 LL |
124 | ************************************************************************/ |
125 | #define DIGI_IXON 0x0001 /* Handle IXON in the FEP */ | |
126 | #define DIGI_FAST 0x0002 /* Fast baud rates */ | |
127 | #define RTSPACE 0x0004 /* RTS input flow control */ | |
128 | #define CTSPACE 0x0008 /* CTS output flow control */ | |
129 | #define DSRPACE 0x0010 /* DSR output flow control */ | |
130 | #define DCDPACE 0x0020 /* DCD output flow control */ | |
131 | #define DTRPACE 0x0040 /* DTR input flow control */ | |
132 | #define DIGI_COOK 0x0080 /* Cooked processing done in FEP */ | |
133 | #define DIGI_FORCEDCD 0x0100 /* Force carrier */ | |
134 | #define DIGI_ALTPIN 0x0200 /* Alternate RJ-45 pin config */ | |
135 | #define DIGI_AIXON 0x0400 /* Aux flow control in fep */ | |
136 | #define DIGI_PRINTER 0x0800 /* Hold port open for flow cntrl*/ | |
137 | #define DIGI_PP_INPUT 0x1000 /* Change parallel port to input*/ | |
138 | #define DIGI_DTR_TOGGLE 0x2000 /* Support DTR Toggle */ | |
139 | #define DIGI_422 0x4000 /* for 422/232 selectable panel */ | |
140 | #define DIGI_RTS_TOGGLE 0x8000 /* Support RTS Toggle */ | |
141 | ||
142 | /************************************************************************ | |
143 | * These options are not supported on the comxi. | |
144 | ************************************************************************/ | |
145 | #define DIGI_COMXI (DIGI_FAST|DIGI_COOK|DSRPACE|DCDPACE|DTRPACE) | |
146 | ||
147 | #define DIGI_PLEN 28 /* String length */ | |
148 | #define DIGI_TSIZ 10 /* Terminal string len */ | |
149 | ||
150 | /************************************************************************ | |
151 | * Structure used with ioctl commands for DIGI parameters. | |
152 | ************************************************************************/ | |
153 | struct digi_t { | |
154 | unsigned short digi_flags; /* Flags (see above) */ | |
155 | unsigned short digi_maxcps; /* Max printer CPS */ | |
156 | unsigned short digi_maxchar; /* Max chars in print queue */ | |
157 | unsigned short digi_bufsize; /* Buffer size */ | |
158 | unsigned char digi_onlen; /* Length of ON string */ | |
159 | unsigned char digi_offlen; /* Length of OFF string */ | |
160 | char digi_onstr[DIGI_PLEN]; /* Printer on string */ | |
161 | char digi_offstr[DIGI_PLEN]; /* Printer off string */ | |
162 | char digi_term[DIGI_TSIZ]; /* terminal string */ | |
163 | }; | |
164 | ||
165 | /************************************************************************ | |
166 | * KME definitions and structures. | |
167 | ************************************************************************/ | |
168 | #define RW_IDLE 0 /* Operation complete */ | |
169 | #define RW_READ 1 /* Read Concentrator Memory */ | |
170 | #define RW_WRITE 2 /* Write Concentrator Memory */ | |
171 | ||
172 | struct rw_t { | |
173 | unsigned char rw_req; /* Request type */ | |
174 | unsigned char rw_board; /* Host Adapter board number */ | |
175 | unsigned char rw_conc; /* Concentrator number */ | |
176 | unsigned char rw_reserved; /* Reserved for expansion */ | |
177 | unsigned int rw_addr; /* Address in concentrator */ | |
178 | unsigned short rw_size; /* Read/write request length */ | |
179 | unsigned char rw_data[128]; /* Data to read/write */ | |
180 | }; | |
181 | ||
182 | /*********************************************************************** | |
183 | * Shrink Buffer and Board Information definitions and structures. | |
184 | ||
185 | ************************************************************************/ | |
186 | /* Board type return codes */ | |
187 | #define PCXI_TYPE 1 /* Board type at the designated port is a PC/Xi */ | |
188 | #define PCXM_TYPE 2 /* Board type at the designated port is a PC/Xm */ | |
189 | #define PCXE_TYPE 3 /* Board type at the designated port is a PC/Xe */ | |
190 | #define MCXI_TYPE 4 /* Board type at the designated port is a MC/Xi */ | |
191 | #define COMXI_TYPE 5 /* Board type at the designated port is a COM/Xi */ | |
192 | ||
193 | /* Non-Zero Result codes. */ | |
b8f5472a LL |
194 | #define RESULT_NOBDFND 1 /* A Digi product at that port is not config installed */ |
195 | #define RESULT_NODESCT 2 /* A memory descriptor was not obtainable */ | |
0b99d589 LL |
196 | #define RESULT_NOOSSIG 3 /* FEP/OS signature was not detected on the board */ |
197 | #define RESULT_TOOSML 4 /* Too small an area to shrink. */ | |
198 | #define RESULT_NOCHAN 5 /* Channel structure for the board was not found */ | |
199 | ||
200 | struct shrink_buf_struct { | |
201 | unsigned int shrink_buf_vaddr; /* Virtual address of board */ | |
202 | unsigned int shrink_buf_phys; /* Physical address of board */ | |
203 | unsigned int shrink_buf_bseg; /* Amount of board memory */ | |
79e30af2 | 204 | unsigned int shrink_buf_hseg; /* '186 Beginning of Dual-Port */ |
0b99d589 | 205 | |
79e30af2 | 206 | unsigned int shrink_buf_lseg; /* '186 Beginning of freed memory */ |
0b99d589 LL |
207 | unsigned int shrink_buf_mseg; /* Linear address from start of |
208 | dual-port were freed memory | |
209 | begins, host viewpoint. */ | |
210 | ||
211 | unsigned int shrink_buf_bdparam; /* Parameter for xxmemon and | |
212 | xxmemoff */ | |
213 | ||
214 | unsigned int shrink_buf_reserva; /* Reserved */ | |
215 | unsigned int shrink_buf_reservb; /* Reserved */ | |
216 | unsigned int shrink_buf_reservc; /* Reserved */ | |
217 | unsigned int shrink_buf_reservd; /* Reserved */ | |
218 | ||
219 | unsigned char shrink_buf_result; /* Reason for call failing | |
220 | Zero is Good return */ | |
b8f5472a | 221 | unsigned char shrink_buf_init; /* Non-Zero if it caused an |
0b99d589 LL |
222 | xxinit call. */ |
223 | ||
224 | unsigned char shrink_buf_anports; /* Number of async ports */ | |
225 | unsigned char shrink_buf_snports; /* Number of sync ports */ | |
226 | unsigned char shrink_buf_type; /* Board type 1 = PC/Xi, | |
227 | 2 = PC/Xm, | |
b8f5472a LL |
228 | 3 = PC/Xe |
229 | 4 = MC/Xi | |
0b99d589 LL |
230 | 5 = COMX/i */ |
231 | unsigned char shrink_buf_card; /* Card number */ | |
b8f5472a | 232 | |
0b99d589 LL |
233 | }; |
234 | ||
235 | /************************************************************************ | |
236 | * Structure to get driver status information | |
237 | ************************************************************************/ | |
238 | struct digi_dinfo { | |
239 | unsigned int dinfo_nboards; /* # boards configured */ | |
240 | char dinfo_reserved[12]; /* for future expansion */ | |
241 | char dinfo_version[16]; /* driver version */ | |
242 | }; | |
243 | ||
244 | #define DIGI_GETDD ('d'<<8) | 248 /* get driver info */ | |
b8f5472a | 245 | |
0b99d589 LL |
246 | /************************************************************************ |
247 | * Structure used with ioctl commands for per-board information | |
248 | * | |
249 | * physsize and memsize differ when board has "windowed" memory | |
250 | ************************************************************************/ | |
251 | struct digi_info { | |
252 | unsigned int info_bdnum; /* Board number (0 based) */ | |
253 | unsigned int info_ioport; /* io port address */ | |
254 | unsigned int info_physaddr; /* memory address */ | |
255 | unsigned int info_physsize; /* Size of host mem window */ | |
256 | unsigned int info_memsize; /* Amount of dual-port mem */ | |
257 | /* on board */ | |
258 | unsigned short info_bdtype; /* Board type */ | |
259 | unsigned short info_nports; /* number of ports */ | |
260 | char info_bdstate; /* board state */ | |
261 | char info_reserved[7]; /* for future expansion */ | |
262 | }; | |
263 | ||
264 | #define DIGI_GETBD ('d'<<8) | 249 /* get board info */ | |
b8f5472a | 265 | |
0b99d589 LL |
266 | struct digi_stat { |
267 | unsigned int info_chan; /* Channel number (0 based) */ | |
268 | unsigned int info_brd; /* Board number (0 based) */ | |
269 | unsigned int info_cflag; /* cflag for channel */ | |
270 | unsigned int info_iflag; /* iflag for channel */ | |
271 | unsigned int info_oflag; /* oflag for channel */ | |
272 | unsigned int info_mstat; /* mstat for channel */ | |
273 | unsigned int info_tx_data; /* tx_data for channel */ | |
274 | unsigned int info_rx_data; /* rx_data for channel */ | |
275 | unsigned int info_hflow; /* hflow for channel */ | |
276 | unsigned int info_reserved[8]; /* for future expansion */ | |
277 | }; | |
278 | ||
279 | #define DIGI_GETSTAT ('d'<<8) | 244 /* get board info */ | |
280 | /************************************************************************ | |
281 | * | |
282 | * Structure used with ioctl commands for per-channel information | |
283 | * | |
284 | ************************************************************************/ | |
285 | struct digi_ch { | |
286 | unsigned int info_bdnum; /* Board number (0 based) */ | |
287 | unsigned int info_channel; /* Channel index number */ | |
288 | unsigned int info_ch_cflag; /* Channel cflag */ | |
289 | unsigned int info_ch_iflag; /* Channel iflag */ | |
290 | unsigned int info_ch_oflag; /* Channel oflag */ | |
291 | unsigned int info_chsize; /* Channel structure size */ | |
292 | unsigned int info_sleep_stat; /* sleep status */ | |
293 | dev_t info_dev; /* device number */ | |
294 | unsigned char info_initstate; /* Channel init state */ | |
295 | unsigned char info_running; /* Channel running state */ | |
296 | int reserved[8]; /* reserved for future use */ | |
297 | }; | |
298 | ||
299 | /* | |
b8f5472a | 300 | * This structure is used with the DIGI_FEPCMD ioctl to |
0b99d589 LL |
301 | * tell the driver which port to send the command for. |
302 | */ | |
303 | struct digi_cmd { | |
304 | int cmd; | |
305 | int word; | |
306 | int ncmds; | |
307 | int chan; /* channel index (zero based) */ | |
308 | int bdid; /* board index (zero based) */ | |
309 | }; | |
310 | ||
311 | ||
312 | struct digi_getbuffer /* Struct for holding buffer use counts */ | |
313 | { | |
314 | unsigned long tIn; | |
315 | unsigned long tOut; | |
316 | unsigned long rxbuf; | |
317 | unsigned long txbuf; | |
318 | unsigned long txdone; | |
319 | }; | |
320 | ||
ba48f61b | 321 | struct digi_getcounter { |
0b99d589 LL |
322 | unsigned long norun; /* number of UART overrun errors */ |
323 | unsigned long noflow; /* number of buffer overflow errors */ | |
324 | unsigned long nframe; /* number of framing errors */ | |
325 | unsigned long nparity; /* number of parity errors */ | |
326 | unsigned long nbreak; /* number of breaks received */ | |
327 | unsigned long rbytes; /* number of received bytes */ | |
328 | unsigned long tbytes; /* number of bytes transmitted fully */ | |
329 | }; | |
330 | ||
331 | /* | |
332 | * info_sleep_stat defines | |
333 | */ | |
334 | #define INFO_RUNWAIT 0x0001 | |
335 | #define INFO_WOPEN 0x0002 | |
336 | #define INFO_TTIOW 0x0004 | |
337 | #define INFO_CH_RWAIT 0x0008 | |
338 | #define INFO_CH_WEMPTY 0x0010 | |
339 | #define INFO_CH_WLOW 0x0020 | |
340 | #define INFO_XXBUF_BUSY 0x0040 | |
341 | ||
342 | #define DIGI_GETCH ('d'<<8) | 245 /* get board info */ | |
343 | ||
344 | /* Board type definitions */ | |
345 | ||
346 | #define SUBTYPE 0007 | |
347 | #define T_PCXI 0000 | |
348 | #define T_PCXM 0001 | |
349 | #define T_PCXE 0002 | |
350 | #define T_PCXR 0003 | |
351 | #define T_SP 0004 | |
352 | #define T_SP_PLUS 0005 | |
353 | # define T_HERC 0000 | |
354 | # define T_HOU 0001 | |
355 | # define T_LON 0002 | |
356 | # define T_CHA 0003 | |
357 | #define FAMILY 0070 | |
358 | #define T_COMXI 0000 | |
359 | #define T_PCXX 0010 | |
360 | #define T_CX 0020 | |
361 | #define T_EPC 0030 | |
362 | #define T_PCLITE 0040 | |
363 | #define T_SPXX 0050 | |
364 | #define T_AVXX 0060 | |
365 | #define T_DXB 0070 | |
366 | #define T_A2K_4_8 0070 | |
367 | #define BUSTYPE 0700 | |
368 | #define T_ISABUS 0000 | |
369 | #define T_MCBUS 0100 | |
370 | #define T_EISABUS 0200 | |
371 | #define T_PCIBUS 0400 | |
372 | ||
373 | /* Board State Definitions */ | |
374 | ||
375 | #define BD_RUNNING 0x0 | |
376 | #define BD_REASON 0x7f | |
377 | #define BD_NOTFOUND 0x1 | |
378 | #define BD_NOIOPORT 0x2 | |
379 | #define BD_NOMEM 0x3 | |
380 | #define BD_NOBIOS 0x4 | |
381 | #define BD_NOFEP 0x5 | |
382 | #define BD_FAILED 0x6 | |
383 | #define BD_ALLOCATED 0x7 | |
384 | #define BD_TRIBOOT 0x8 | |
385 | #define BD_BADKME 0x80 | |
386 | ||
387 | #define DIGI_SPOLL ('d'<<8) | 254 /* change poller rate */ | |
388 | ||
389 | #define DIGI_SETCUSTOMBAUD _IOW('e', 106, int) /* Set integer baud rate */ | |
390 | #define DIGI_GETCUSTOMBAUD _IOR('e', 107, int) /* Get integer baud rate */ | |
391 | ||
392 | #define DIGI_REALPORT_GETBUFFERS ('e'<<8 ) | 108 | |
393 | #define DIGI_REALPORT_SENDIMMEDIATE ('e'<<8 ) | 109 | |
394 | #define DIGI_REALPORT_GETCOUNTERS ('e'<<8 ) | 110 | |
395 | #define DIGI_REALPORT_GETEVENTS ('e'<<8 ) | 111 | |
396 | ||
397 | #define EV_OPU 0x0001 //!<Output paused by client | |
b8f5472a | 398 | #define EV_OPS 0x0002 //!<Output paused by reqular sw flowctrl |
0b99d589 LL |
399 | #define EV_OPX 0x0004 //!<Output paused by extra sw flowctrl |
400 | #define EV_OPH 0x0008 //!<Output paused by hw flowctrl | |
401 | #define EV_OPT 0x0800 //!<Output paused for RTS Toggle predelay | |
402 | ||
403 | #define EV_IPU 0x0010 //!<Input paused unconditionally by user | |
404 | #define EV_IPS 0x0020 //!<Input paused by high/low water marks | |
b8f5472a | 405 | //#define EV_IPH 0x0040 //!<Input paused w/ hardware |
0b99d589 | 406 | #define EV_IPA 0x0400 //!<Input paused by pattern alarm module |
b8f5472a | 407 | |
0b99d589 LL |
408 | #define EV_TXB 0x0040 //!<Transmit break pending |
409 | #define EV_TXI 0x0080 //!<Transmit immediate pending | |
410 | #define EV_TXF 0x0100 //!<Transmit flowctrl char pending | |
411 | #define EV_RXB 0x0200 //!<Break received | |
412 | ||
413 | #define EV_OPALL 0x080f //!<Output pause flags | |
414 | #define EV_IPALL 0x0430 //!<Input pause flags | |
415 | ||
416 | #endif /* DIGI_H */ |