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
16#ifndef __DIGI_H
17#define __DIGI_H
18
19#ifndef TIOCM_LE
20#define		TIOCM_LE	0x01		/* line enable		*/
21#define		TIOCM_DTR	0x02		/* data terminal ready	*/
22#define		TIOCM_RTS	0x04		/* request to send	*/
23#define		TIOCM_ST	0x08		/* secondary transmit	*/
24#define		TIOCM_SR	0x10		/* secondary receive	*/
25#define		TIOCM_CTS	0x20		/* clear to send	*/
26#define		TIOCM_CAR	0x40		/* carrier detect	*/
27#define		TIOCM_RNG	0x80		/* ring	indicator	*/
28#define		TIOCM_DSR	0x100		/* data set ready	*/
29#define		TIOCM_RI	TIOCM_RNG	/* ring (alternate)	*/
30#define		TIOCM_CD	TIOCM_CAR	/* carrier detect (alt)	*/
31#endif
32
33#if !defined(TIOCMSET)
34#define	TIOCMSET	(('d'<<8) | 252)	/* set modem ctrl state	*/
35#define	TIOCMGET	(('d'<<8) | 253)	/* set modem ctrl state	*/
36#endif
37
38#if !defined(TIOCMBIC)
39#define	TIOCMBIC	(('d'<<8) | 254)	/* set modem ctrl state */
40#define	TIOCMBIS	(('d'<<8) | 255)	/* set modem ctrl state */
41#endif
42
43#define DIGI_GETA	(('e'<<8) | 94)		/* Read params		*/
44#define DIGI_SETA	(('e'<<8) | 95)		/* Set params		*/
45#define DIGI_SETAW	(('e'<<8) | 96)		/* Drain & set params	*/
46#define DIGI_SETAF	(('e'<<8) | 97)		/* Drain, flush & set params */
47#define DIGI_GET_NI_INFO (('d'<<8) | 250) /* Non-intelligent state info */
48#define DIGI_LOOPBACK (('d'<<8) | 252) /*
49					* Enable/disable UART
50					* internal loopback
51					*/
52#define DIGI_FAST	0x0002		/* Fast baud rates		*/
53#define RTSPACE		0x0004		/* RTS input flow control	*/
54#define CTSPACE		0x0008		/* CTS output flow control	*/
55#define DIGI_COOK	0x0080		/* Cooked processing done in FEP */
56#define DIGI_FORCEDCD	0x0100		/* Force carrier		*/
57#define	DIGI_ALTPIN	0x0200		/* Alternate RJ-45 pin config	*/
58#define	DIGI_PRINTER	0x0800		/* Hold port open for flow cntrl*/
59#define DIGI_DTR_TOGGLE	0x2000		/* Support DTR Toggle           */
60#define DIGI_RTS_TOGGLE	0x8000		/* Support RTS Toggle		*/
61#define DIGI_PLEN	28		/* String length		*/
62#define	DIGI_TSIZ	10		/* Terminal string len		*/
63
64/************************************************************************
65 * Structure used with ioctl commands for DIGI parameters.
66 ************************************************************************/
67struct digi_t {
68	unsigned short	digi_flags;		/* Flags (see above)	*/
69	unsigned short	digi_maxcps;		/* Max printer CPS	*/
70	unsigned short	digi_maxchar;		/* Max chars in print queue */
71	unsigned short	digi_bufsize;		/* Buffer size		*/
72	unsigned char	digi_onlen;		/* Length of ON string	*/
73	unsigned char	digi_offlen;		/* Length of OFF string	*/
74	char		digi_onstr[DIGI_PLEN];	/* Printer on string	*/
75	char		digi_offstr[DIGI_PLEN];	/* Printer off string	*/
76	char		digi_term[DIGI_TSIZ];	/* terminal string	*/
77};
78
79/************************************************************************
80 * Structure to get driver status information
81 ************************************************************************/
82struct digi_dinfo {
83	unsigned int	dinfo_nboards;		/* # boards configured	*/
84	char		dinfo_reserved[12];	/* for future expansion */
85	char		dinfo_version[16];	/* driver version       */
86};
87
88#define	DIGI_GETDD	(('d'<<8) | 248)	/* get driver info      */
89
90/************************************************************************
91 * Structure used with ioctl commands for per-board information
92 *
93 * physsize and memsize differ when board has "windowed" memory
94 ************************************************************************/
95struct digi_info {
96	unsigned int	info_bdnum;		/* Board number (0 based)  */
97	unsigned int	info_ioport;		/* io port address         */
98	unsigned int	info_physaddr;		/* memory address          */
99	unsigned int	info_physsize;		/* Size of host mem window */
100	unsigned int	info_memsize;		/* Amount of dual-port mem */
101						/* on board                */
102	unsigned short	info_bdtype;		/* Board type              */
103	unsigned short	info_nports;		/* number of ports         */
104	char		info_bdstate;		/* board state             */
105	char		info_reserved[7];	/* for future expansion    */
106};
107
108#define	DIGI_GETBD	(('d'<<8) | 249)	/* get board info          */
109
110struct digi_getbuffer /* Struct for holding buffer use counts */
111{
112	unsigned long tIn;
113	unsigned long tOut;
114	unsigned long rxbuf;
115	unsigned long txbuf;
116	unsigned long txdone;
117};
118
119struct digi_getcounter {
120	unsigned long norun;		/* number of UART overrun errors */
121	unsigned long noflow;		/* number of buffer overflow errors */
122	unsigned long nframe;		/* number of framing errors */
123	unsigned long nparity;		/* number of parity errors */
124	unsigned long nbreak;		/* number of breaks received */
125	unsigned long rbytes;		/* number of received bytes */
126	unsigned long tbytes;		/* number of bytes transmitted fully */
127};
128
129/* Board State Definitions */
130#define	BD_RUNNING	0x0
131#define	BD_NOFEP	0x5
132
133#define DIGI_SETCUSTOMBAUD	_IOW('e', 106, int)	/* Set integer baud rate */
134#define DIGI_GETCUSTOMBAUD	_IOR('e', 107, int)	/* Get integer baud rate */
135
136#define DIGI_REALPORT_GETBUFFERS (('e'<<8) | 108)
137#define DIGI_REALPORT_SENDIMMEDIATE (('e'<<8) | 109)
138#define DIGI_REALPORT_GETCOUNTERS (('e'<<8) | 110)
139#define DIGI_REALPORT_GETEVENTS (('e'<<8) | 111)
140
141#define EV_OPU		0x0001		/* !<Output paused by client */
142#define EV_OPS		0x0002		/* !<Output paused by reqular sw flowctrl */
143#define EV_IPU		0x0010		/* !<Input paused unconditionally by user */
144#define EV_IPS		0x0020		/* !<Input paused by high/low water marks */
145#define EV_TXB		0x0040		/* !<Transmit break pending */
146
147/*
148 * This structure holds data needed for the intelligent <--> nonintelligent
149 * DPA translation
150 */
151struct ni_info {
152	int board;
153	int channel;
154	int dtr;
155	int rts;
156	int cts;
157	int dsr;
158	int ri;
159	int dcd;
160	int curtx;
161	int currx;
162	unsigned short iflag;
163	unsigned short oflag;
164	unsigned short cflag;
165	unsigned short lflag;
166	unsigned int mstat;
167	unsigned char hflow;
168	unsigned char xmit_stopped;
169	unsigned char recv_stopped;
170	unsigned int baud;
171};
172
173#define T_CLASSIC 0002
174#define T_PCIBUS 0400
175#define T_NEO_EXPRESS 0001
176#define T_NEO 0000
177
178#define TTY_FLIPBUF_SIZE 512
179#endif /* DIGI_H */
180