]> git.karo-electronics.de Git - karo-tx-linux.git/blob - drivers/staging/dgnc/digi.h
Linux 3.12-rc6
[karo-tx-linux.git] / drivers / staging / dgnc / digi.h
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  *
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
44 #ifndef TIOCM_LE
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 /************************************************************************
123  * Values for digi_flags
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. */
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 */
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 */
204         unsigned int    shrink_buf_hseg;        /* '186 Begining of Dual-Port */
205
206         unsigned int    shrink_buf_lseg;        /* '186 Begining of freed memory */
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 */
221         unsigned char   shrink_buf_init;        /* Non-Zero if it caused an
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,
228                                                               3 = PC/Xe
229                                                               4 = MC/Xi
230                                                               5 = COMX/i */
231         unsigned char   shrink_buf_card;        /* Card number */
232
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      */
245
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          */
265
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 /*
300 * This structure is used with the DIGI_FEPCMD ioctl to
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
321 struct digi_getcounter {
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
398 #define EV_OPS          0x0002          //!<Output paused by reqular sw flowctrl
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
405 //#define EV_IPH        0x0040          //!<Input paused w/ hardware
406 #define EV_IPA          0x0400          //!<Input paused by pattern alarm module
407
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 */