xref: /utopia/UTPA2-700.0.x/projects/tools/lint/mips-linux-gnu_include/linux/cdk.h (revision 53ee8cc121a030b8d368113ac3e966b4705770ef)
1*53ee8cc1Swenshuai.xi /*****************************************************************************/
2*53ee8cc1Swenshuai.xi 
3*53ee8cc1Swenshuai.xi /*
4*53ee8cc1Swenshuai.xi  *	cdk.h  -- CDK interface definitions.
5*53ee8cc1Swenshuai.xi  *
6*53ee8cc1Swenshuai.xi  *	Copyright (C) 1996-1998  Stallion Technologies
7*53ee8cc1Swenshuai.xi  *	Copyright (C) 1994-1996  Greg Ungerer.
8*53ee8cc1Swenshuai.xi  *
9*53ee8cc1Swenshuai.xi  *	This program is free software; you can redistribute it and/or modify
10*53ee8cc1Swenshuai.xi  *	it under the terms of the GNU General Public License as published by
11*53ee8cc1Swenshuai.xi  *	the Free Software Foundation; either version 2 of the License, or
12*53ee8cc1Swenshuai.xi  *	(at your option) any later version.
13*53ee8cc1Swenshuai.xi  *
14*53ee8cc1Swenshuai.xi  *	This program is distributed in the hope that it will be useful,
15*53ee8cc1Swenshuai.xi  *	but WITHOUT ANY WARRANTY; without even the implied warranty of
16*53ee8cc1Swenshuai.xi  *	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17*53ee8cc1Swenshuai.xi  *	GNU General Public License for more details.
18*53ee8cc1Swenshuai.xi  *
19*53ee8cc1Swenshuai.xi  *	You should have received a copy of the GNU General Public License
20*53ee8cc1Swenshuai.xi  *	along with this program; if not, write to the Free Software
21*53ee8cc1Swenshuai.xi  *	Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22*53ee8cc1Swenshuai.xi  */
23*53ee8cc1Swenshuai.xi 
24*53ee8cc1Swenshuai.xi /*****************************************************************************/
25*53ee8cc1Swenshuai.xi #ifndef	_CDK_H
26*53ee8cc1Swenshuai.xi #define	_CDK_H
27*53ee8cc1Swenshuai.xi /*****************************************************************************/
28*53ee8cc1Swenshuai.xi 
29*53ee8cc1Swenshuai.xi #pragma	pack(2)
30*53ee8cc1Swenshuai.xi 
31*53ee8cc1Swenshuai.xi /*
32*53ee8cc1Swenshuai.xi  *	The following set of definitions is used to communicate with the
33*53ee8cc1Swenshuai.xi  *	shared memory interface of the Stallion intelligent multiport serial
34*53ee8cc1Swenshuai.xi  *	boards. The definitions in this file are taken directly from the
35*53ee8cc1Swenshuai.xi  *	document titled "Generic Stackable Interface, Downloader and
36*53ee8cc1Swenshuai.xi  *	Communications Development Kit".
37*53ee8cc1Swenshuai.xi  */
38*53ee8cc1Swenshuai.xi 
39*53ee8cc1Swenshuai.xi /*
40*53ee8cc1Swenshuai.xi  *	Define the set of important shared memory addresses. These are
41*53ee8cc1Swenshuai.xi  *	required to initialize the board and get things started. All of these
42*53ee8cc1Swenshuai.xi  *	addresses are relative to the start of the shared memory.
43*53ee8cc1Swenshuai.xi  */
44*53ee8cc1Swenshuai.xi #define	CDK_SIGADDR	0x200
45*53ee8cc1Swenshuai.xi #define	CDK_FEATADDR	0x280
46*53ee8cc1Swenshuai.xi #define	CDK_CDKADDR	0x300
47*53ee8cc1Swenshuai.xi #define	CDK_RDYADDR	0x262
48*53ee8cc1Swenshuai.xi 
49*53ee8cc1Swenshuai.xi #define	CDK_ALIVEMARKER	13
50*53ee8cc1Swenshuai.xi 
51*53ee8cc1Swenshuai.xi /*
52*53ee8cc1Swenshuai.xi  *	On hardware power up the ROMs located on the EasyConnection 8/64 will
53*53ee8cc1Swenshuai.xi  *	fill out the following signature information into shared memory. This
54*53ee8cc1Swenshuai.xi  *	way the host system can quickly determine that the board is present
55*53ee8cc1Swenshuai.xi  *	and is operational.
56*53ee8cc1Swenshuai.xi  */
57*53ee8cc1Swenshuai.xi typedef struct cdkecpsig {
58*53ee8cc1Swenshuai.xi 	unsigned long	magic;
59*53ee8cc1Swenshuai.xi 	unsigned short	romver;
60*53ee8cc1Swenshuai.xi 	unsigned short	cputype;
61*53ee8cc1Swenshuai.xi 	unsigned char	panelid[8];
62*53ee8cc1Swenshuai.xi } cdkecpsig_t;
63*53ee8cc1Swenshuai.xi 
64*53ee8cc1Swenshuai.xi #define	ECP_MAGIC	0x21504345
65*53ee8cc1Swenshuai.xi 
66*53ee8cc1Swenshuai.xi /*
67*53ee8cc1Swenshuai.xi  *	On hardware power up the ROMs located on the ONboard, Stallion and
68*53ee8cc1Swenshuai.xi  *	Brumbys will fill out the following signature information into shared
69*53ee8cc1Swenshuai.xi  *	memory. This way the host system can quickly determine that the board
70*53ee8cc1Swenshuai.xi  *	is present and is operational.
71*53ee8cc1Swenshuai.xi  */
72*53ee8cc1Swenshuai.xi typedef struct cdkonbsig {
73*53ee8cc1Swenshuai.xi 	unsigned short	magic0;
74*53ee8cc1Swenshuai.xi 	unsigned short	magic1;
75*53ee8cc1Swenshuai.xi 	unsigned short	magic2;
76*53ee8cc1Swenshuai.xi 	unsigned short	magic3;
77*53ee8cc1Swenshuai.xi 	unsigned short	romver;
78*53ee8cc1Swenshuai.xi 	unsigned short	memoff;
79*53ee8cc1Swenshuai.xi 	unsigned short	memseg;
80*53ee8cc1Swenshuai.xi 	unsigned short	amask0;
81*53ee8cc1Swenshuai.xi 	unsigned short	pic;
82*53ee8cc1Swenshuai.xi 	unsigned short	status;
83*53ee8cc1Swenshuai.xi 	unsigned short	btype;
84*53ee8cc1Swenshuai.xi 	unsigned short	clkticks;
85*53ee8cc1Swenshuai.xi 	unsigned short	clkspeed;
86*53ee8cc1Swenshuai.xi 	unsigned short	amask1;
87*53ee8cc1Swenshuai.xi 	unsigned short	amask2;
88*53ee8cc1Swenshuai.xi } cdkonbsig_t;
89*53ee8cc1Swenshuai.xi 
90*53ee8cc1Swenshuai.xi #define	ONB_MAGIC0	0xf2a7
91*53ee8cc1Swenshuai.xi #define	ONB_MAGIC1	0xa149
92*53ee8cc1Swenshuai.xi #define	ONB_MAGIC2	0x6352
93*53ee8cc1Swenshuai.xi #define	ONB_MAGIC3	0xf121
94*53ee8cc1Swenshuai.xi 
95*53ee8cc1Swenshuai.xi /*
96*53ee8cc1Swenshuai.xi  *	Define the feature area structure. The feature area is the set of
97*53ee8cc1Swenshuai.xi  *	startup parameters used by the slave image when it starts executing.
98*53ee8cc1Swenshuai.xi  *	They allow for the specification of buffer sizes, debug trace, etc.
99*53ee8cc1Swenshuai.xi  */
100*53ee8cc1Swenshuai.xi typedef struct cdkfeature {
101*53ee8cc1Swenshuai.xi 	unsigned long	debug;
102*53ee8cc1Swenshuai.xi 	unsigned long	banner;
103*53ee8cc1Swenshuai.xi 	unsigned long	etype;
104*53ee8cc1Swenshuai.xi 	unsigned long	nrdevs;
105*53ee8cc1Swenshuai.xi 	unsigned long	brdspec;
106*53ee8cc1Swenshuai.xi 	unsigned long	txrqsize;
107*53ee8cc1Swenshuai.xi 	unsigned long	rxrqsize;
108*53ee8cc1Swenshuai.xi 	unsigned long	flags;
109*53ee8cc1Swenshuai.xi } cdkfeature_t;
110*53ee8cc1Swenshuai.xi 
111*53ee8cc1Swenshuai.xi #define	ETYP_DDK	0
112*53ee8cc1Swenshuai.xi #define	ETYP_CDK	1
113*53ee8cc1Swenshuai.xi 
114*53ee8cc1Swenshuai.xi /*
115*53ee8cc1Swenshuai.xi  *	Define the CDK header structure. This is the info that the slave
116*53ee8cc1Swenshuai.xi  *	environment sets up after it has been downloaded and started. It
117*53ee8cc1Swenshuai.xi  *	essentially provides a memory map for the shared memory interface.
118*53ee8cc1Swenshuai.xi  */
119*53ee8cc1Swenshuai.xi typedef struct cdkhdr {
120*53ee8cc1Swenshuai.xi 	unsigned short	command;
121*53ee8cc1Swenshuai.xi 	unsigned short	status;
122*53ee8cc1Swenshuai.xi 	unsigned short	port;
123*53ee8cc1Swenshuai.xi 	unsigned short	mode;
124*53ee8cc1Swenshuai.xi 	unsigned long	cmd_buf[14];
125*53ee8cc1Swenshuai.xi 	unsigned short	alive_cnt;
126*53ee8cc1Swenshuai.xi 	unsigned short	intrpt_mode;
127*53ee8cc1Swenshuai.xi 	unsigned char	intrpt_id[8];
128*53ee8cc1Swenshuai.xi 	unsigned char	ver_release;
129*53ee8cc1Swenshuai.xi 	unsigned char	ver_modification;
130*53ee8cc1Swenshuai.xi 	unsigned char	ver_fix;
131*53ee8cc1Swenshuai.xi 	unsigned char	deadman_restart;
132*53ee8cc1Swenshuai.xi 	unsigned short	deadman;
133*53ee8cc1Swenshuai.xi 	unsigned short	nrdevs;
134*53ee8cc1Swenshuai.xi 	unsigned long	memp;
135*53ee8cc1Swenshuai.xi 	unsigned long	hostp;
136*53ee8cc1Swenshuai.xi 	unsigned long	slavep;
137*53ee8cc1Swenshuai.xi 	unsigned char	hostreq;
138*53ee8cc1Swenshuai.xi 	unsigned char	slavereq;
139*53ee8cc1Swenshuai.xi 	unsigned char	cmd_reserved[30];
140*53ee8cc1Swenshuai.xi } cdkhdr_t;
141*53ee8cc1Swenshuai.xi 
142*53ee8cc1Swenshuai.xi #define	MODE_DDK	0
143*53ee8cc1Swenshuai.xi #define	MODE_CDK	1
144*53ee8cc1Swenshuai.xi 
145*53ee8cc1Swenshuai.xi #define	IMD_INTR	0x0
146*53ee8cc1Swenshuai.xi #define	IMD_PPINTR	0x1
147*53ee8cc1Swenshuai.xi #define	IMD_POLL	0xff
148*53ee8cc1Swenshuai.xi 
149*53ee8cc1Swenshuai.xi /*
150*53ee8cc1Swenshuai.xi  *	Define the memory mapping structure. This structure is pointed to by
151*53ee8cc1Swenshuai.xi  *	the memp field in the stlcdkhdr struct. As many as these structures
152*53ee8cc1Swenshuai.xi  *	as required are layed out in shared memory to define how the rest of
153*53ee8cc1Swenshuai.xi  *	shared memory is divided up. There will be one for each port.
154*53ee8cc1Swenshuai.xi  */
155*53ee8cc1Swenshuai.xi typedef struct cdkmem {
156*53ee8cc1Swenshuai.xi 	unsigned short	dtype;
157*53ee8cc1Swenshuai.xi 	unsigned long	offset;
158*53ee8cc1Swenshuai.xi } cdkmem_t;
159*53ee8cc1Swenshuai.xi 
160*53ee8cc1Swenshuai.xi #define	TYP_UNDEFINED	0x0
161*53ee8cc1Swenshuai.xi #define	TYP_ASYNCTRL	0x1
162*53ee8cc1Swenshuai.xi #define	TYP_ASYNC	0x20
163*53ee8cc1Swenshuai.xi #define	TYP_PARALLEL	0x40
164*53ee8cc1Swenshuai.xi #define	TYP_SYNCX21	0x60
165*53ee8cc1Swenshuai.xi 
166*53ee8cc1Swenshuai.xi /*****************************************************************************/
167*53ee8cc1Swenshuai.xi 
168*53ee8cc1Swenshuai.xi /*
169*53ee8cc1Swenshuai.xi  *	Following is a set of defines and structures used to actually deal
170*53ee8cc1Swenshuai.xi  *	with the serial ports on the board. Firstly is the set of commands
171*53ee8cc1Swenshuai.xi  *	that can be applied to ports.
172*53ee8cc1Swenshuai.xi  */
173*53ee8cc1Swenshuai.xi #define	ASYCMD		(((unsigned long) 'a') << 8)
174*53ee8cc1Swenshuai.xi 
175*53ee8cc1Swenshuai.xi #define	A_NULL		(ASYCMD | 0)
176*53ee8cc1Swenshuai.xi #define	A_FLUSH		(ASYCMD | 1)
177*53ee8cc1Swenshuai.xi #define	A_BREAK		(ASYCMD | 2)
178*53ee8cc1Swenshuai.xi #define	A_GETPORT	(ASYCMD | 3)
179*53ee8cc1Swenshuai.xi #define	A_SETPORT	(ASYCMD | 4)
180*53ee8cc1Swenshuai.xi #define	A_SETPORTF	(ASYCMD | 5)
181*53ee8cc1Swenshuai.xi #define	A_SETPORTFTX	(ASYCMD | 6)
182*53ee8cc1Swenshuai.xi #define	A_SETPORTFRX	(ASYCMD | 7)
183*53ee8cc1Swenshuai.xi #define	A_GETSIGNALS	(ASYCMD | 8)
184*53ee8cc1Swenshuai.xi #define	A_SETSIGNALS	(ASYCMD | 9)
185*53ee8cc1Swenshuai.xi #define	A_SETSIGNALSF	(ASYCMD | 10)
186*53ee8cc1Swenshuai.xi #define	A_SETSIGNALSFTX	(ASYCMD | 11)
187*53ee8cc1Swenshuai.xi #define	A_SETSIGNALSFRX	(ASYCMD | 12)
188*53ee8cc1Swenshuai.xi #define	A_GETNOTIFY	(ASYCMD | 13)
189*53ee8cc1Swenshuai.xi #define	A_SETNOTIFY	(ASYCMD | 14)
190*53ee8cc1Swenshuai.xi #define	A_NOTIFY	(ASYCMD | 15)
191*53ee8cc1Swenshuai.xi #define	A_PORTCTRL	(ASYCMD | 16)
192*53ee8cc1Swenshuai.xi #define	A_GETSTATS	(ASYCMD | 17)
193*53ee8cc1Swenshuai.xi #define	A_RQSTATE	(ASYCMD | 18)
194*53ee8cc1Swenshuai.xi #define	A_FLOWSTATE	(ASYCMD | 19)
195*53ee8cc1Swenshuai.xi #define	A_CLEARSTATS	(ASYCMD | 20)
196*53ee8cc1Swenshuai.xi 
197*53ee8cc1Swenshuai.xi /*
198*53ee8cc1Swenshuai.xi  *	Define those arguments used for simple commands.
199*53ee8cc1Swenshuai.xi  */
200*53ee8cc1Swenshuai.xi #define	FLUSHRX		0x1
201*53ee8cc1Swenshuai.xi #define	FLUSHTX		0x2
202*53ee8cc1Swenshuai.xi 
203*53ee8cc1Swenshuai.xi #define	BREAKON		-1
204*53ee8cc1Swenshuai.xi #define	BREAKOFF	-2
205*53ee8cc1Swenshuai.xi 
206*53ee8cc1Swenshuai.xi /*
207*53ee8cc1Swenshuai.xi  *	Define the port setting structure, and all those defines that go along
208*53ee8cc1Swenshuai.xi  *	with it. Basically this structure defines the characteristics of this
209*53ee8cc1Swenshuai.xi  *	port: baud rate, chars, parity, input/output char cooking etc.
210*53ee8cc1Swenshuai.xi  */
211*53ee8cc1Swenshuai.xi typedef struct asyport {
212*53ee8cc1Swenshuai.xi 	unsigned long	baudout;
213*53ee8cc1Swenshuai.xi 	unsigned long	baudin;
214*53ee8cc1Swenshuai.xi 	unsigned long	iflag;
215*53ee8cc1Swenshuai.xi 	unsigned long	oflag;
216*53ee8cc1Swenshuai.xi 	unsigned long	lflag;
217*53ee8cc1Swenshuai.xi 	unsigned long	pflag;
218*53ee8cc1Swenshuai.xi 	unsigned long	flow;
219*53ee8cc1Swenshuai.xi 	unsigned long	spare1;
220*53ee8cc1Swenshuai.xi 	unsigned short	vtime;
221*53ee8cc1Swenshuai.xi 	unsigned short	vmin;
222*53ee8cc1Swenshuai.xi 	unsigned short	txlo;
223*53ee8cc1Swenshuai.xi 	unsigned short	txhi;
224*53ee8cc1Swenshuai.xi 	unsigned short	rxlo;
225*53ee8cc1Swenshuai.xi 	unsigned short	rxhi;
226*53ee8cc1Swenshuai.xi 	unsigned short	rxhog;
227*53ee8cc1Swenshuai.xi 	unsigned short	spare2;
228*53ee8cc1Swenshuai.xi 	unsigned char	csize;
229*53ee8cc1Swenshuai.xi 	unsigned char	stopbs;
230*53ee8cc1Swenshuai.xi 	unsigned char	parity;
231*53ee8cc1Swenshuai.xi 	unsigned char	stopin;
232*53ee8cc1Swenshuai.xi 	unsigned char	startin;
233*53ee8cc1Swenshuai.xi 	unsigned char	stopout;
234*53ee8cc1Swenshuai.xi 	unsigned char	startout;
235*53ee8cc1Swenshuai.xi 	unsigned char	parmark;
236*53ee8cc1Swenshuai.xi 	unsigned char	brkmark;
237*53ee8cc1Swenshuai.xi 	unsigned char	cc[11];
238*53ee8cc1Swenshuai.xi } asyport_t;
239*53ee8cc1Swenshuai.xi 
240*53ee8cc1Swenshuai.xi #define	PT_STOP1	0x0
241*53ee8cc1Swenshuai.xi #define	PT_STOP15	0x1
242*53ee8cc1Swenshuai.xi #define	PT_STOP2	0x2
243*53ee8cc1Swenshuai.xi 
244*53ee8cc1Swenshuai.xi #define	PT_NOPARITY	0x0
245*53ee8cc1Swenshuai.xi #define	PT_ODDPARITY	0x1
246*53ee8cc1Swenshuai.xi #define	PT_EVENPARITY	0x2
247*53ee8cc1Swenshuai.xi #define	PT_MARKPARITY	0x3
248*53ee8cc1Swenshuai.xi #define	PT_SPACEPARITY	0x4
249*53ee8cc1Swenshuai.xi 
250*53ee8cc1Swenshuai.xi #define	F_NONE		0x0
251*53ee8cc1Swenshuai.xi #define	F_IXON		0x1
252*53ee8cc1Swenshuai.xi #define	F_IXOFF		0x2
253*53ee8cc1Swenshuai.xi #define	F_IXANY		0x4
254*53ee8cc1Swenshuai.xi #define	F_IOXANY	0x8
255*53ee8cc1Swenshuai.xi #define	F_RTSFLOW	0x10
256*53ee8cc1Swenshuai.xi #define	F_CTSFLOW	0x20
257*53ee8cc1Swenshuai.xi #define	F_DTRFLOW	0x40
258*53ee8cc1Swenshuai.xi #define	F_DCDFLOW	0x80
259*53ee8cc1Swenshuai.xi #define	F_DSROFLOW	0x100
260*53ee8cc1Swenshuai.xi #define	F_DSRIFLOW	0x200
261*53ee8cc1Swenshuai.xi 
262*53ee8cc1Swenshuai.xi #define	FI_NORX		0x1
263*53ee8cc1Swenshuai.xi #define	FI_RAW		0x2
264*53ee8cc1Swenshuai.xi #define	FI_ISTRIP	0x4
265*53ee8cc1Swenshuai.xi #define	FI_UCLC		0x8
266*53ee8cc1Swenshuai.xi #define	FI_INLCR	0x10
267*53ee8cc1Swenshuai.xi #define	FI_ICRNL	0x20
268*53ee8cc1Swenshuai.xi #define	FI_IGNCR	0x40
269*53ee8cc1Swenshuai.xi #define	FI_IGNBREAK	0x80
270*53ee8cc1Swenshuai.xi #define	FI_DSCRDBREAK	0x100
271*53ee8cc1Swenshuai.xi #define	FI_1MARKBREAK	0x200
272*53ee8cc1Swenshuai.xi #define	FI_2MARKBREAK	0x400
273*53ee8cc1Swenshuai.xi #define	FI_XCHNGBREAK	0x800
274*53ee8cc1Swenshuai.xi #define	FI_IGNRXERRS	0x1000
275*53ee8cc1Swenshuai.xi #define	FI_DSCDRXERRS	0x2000
276*53ee8cc1Swenshuai.xi #define	FI_1MARKRXERRS	0x4000
277*53ee8cc1Swenshuai.xi #define	FI_2MARKRXERRS	0x8000
278*53ee8cc1Swenshuai.xi #define	FI_XCHNGRXERRS	0x10000
279*53ee8cc1Swenshuai.xi #define	FI_DSCRDNULL	0x20000
280*53ee8cc1Swenshuai.xi 
281*53ee8cc1Swenshuai.xi #define	FO_OLCUC	0x1
282*53ee8cc1Swenshuai.xi #define	FO_ONLCR	0x2
283*53ee8cc1Swenshuai.xi #define	FO_OOCRNL	0x4
284*53ee8cc1Swenshuai.xi #define	FO_ONOCR	0x8
285*53ee8cc1Swenshuai.xi #define	FO_ONLRET	0x10
286*53ee8cc1Swenshuai.xi #define	FO_ONL		0x20
287*53ee8cc1Swenshuai.xi #define	FO_OBS		0x40
288*53ee8cc1Swenshuai.xi #define	FO_OVT		0x80
289*53ee8cc1Swenshuai.xi #define	FO_OFF		0x100
290*53ee8cc1Swenshuai.xi #define	FO_OTAB1	0x200
291*53ee8cc1Swenshuai.xi #define	FO_OTAB2	0x400
292*53ee8cc1Swenshuai.xi #define	FO_OTAB3	0x800
293*53ee8cc1Swenshuai.xi #define	FO_OCR1		0x1000
294*53ee8cc1Swenshuai.xi #define	FO_OCR2		0x2000
295*53ee8cc1Swenshuai.xi #define	FO_OCR3		0x4000
296*53ee8cc1Swenshuai.xi #define	FO_OFILL	0x8000
297*53ee8cc1Swenshuai.xi #define	FO_ODELL	0x10000
298*53ee8cc1Swenshuai.xi 
299*53ee8cc1Swenshuai.xi #define	P_RTSLOCK	0x1
300*53ee8cc1Swenshuai.xi #define	P_CTSLOCK	0x2
301*53ee8cc1Swenshuai.xi #define	P_MAPRTS	0x4
302*53ee8cc1Swenshuai.xi #define	P_MAPCTS	0x8
303*53ee8cc1Swenshuai.xi #define	P_LOOPBACK	0x10
304*53ee8cc1Swenshuai.xi #define	P_DTRFOLLOW	0x20
305*53ee8cc1Swenshuai.xi #define	P_FAKEDCD	0x40
306*53ee8cc1Swenshuai.xi 
307*53ee8cc1Swenshuai.xi #define	P_RXIMIN	0x10000
308*53ee8cc1Swenshuai.xi #define	P_RXITIME	0x20000
309*53ee8cc1Swenshuai.xi #define	P_RXTHOLD	0x40000
310*53ee8cc1Swenshuai.xi 
311*53ee8cc1Swenshuai.xi /*
312*53ee8cc1Swenshuai.xi  *	Define a structure to communicate serial port signal and data state
313*53ee8cc1Swenshuai.xi  *	information.
314*53ee8cc1Swenshuai.xi  */
315*53ee8cc1Swenshuai.xi typedef struct asysigs {
316*53ee8cc1Swenshuai.xi 	unsigned long	data;
317*53ee8cc1Swenshuai.xi 	unsigned long	signal;
318*53ee8cc1Swenshuai.xi 	unsigned long	sigvalue;
319*53ee8cc1Swenshuai.xi } asysigs_t;
320*53ee8cc1Swenshuai.xi 
321*53ee8cc1Swenshuai.xi #define	DT_TXBUSY	0x1
322*53ee8cc1Swenshuai.xi #define	DT_TXEMPTY	0x2
323*53ee8cc1Swenshuai.xi #define	DT_TXLOW	0x4
324*53ee8cc1Swenshuai.xi #define	DT_TXHIGH	0x8
325*53ee8cc1Swenshuai.xi #define	DT_TXFULL	0x10
326*53ee8cc1Swenshuai.xi #define	DT_TXHOG	0x20
327*53ee8cc1Swenshuai.xi #define	DT_TXFLOWED	0x40
328*53ee8cc1Swenshuai.xi #define	DT_TXBREAK	0x80
329*53ee8cc1Swenshuai.xi 
330*53ee8cc1Swenshuai.xi #define	DT_RXBUSY	0x100
331*53ee8cc1Swenshuai.xi #define	DT_RXEMPTY	0x200
332*53ee8cc1Swenshuai.xi #define	DT_RXLOW	0x400
333*53ee8cc1Swenshuai.xi #define	DT_RXHIGH	0x800
334*53ee8cc1Swenshuai.xi #define	DT_RXFULL	0x1000
335*53ee8cc1Swenshuai.xi #define	DT_RXHOG	0x2000
336*53ee8cc1Swenshuai.xi #define	DT_RXFLOWED	0x4000
337*53ee8cc1Swenshuai.xi #define	DT_RXBREAK	0x8000
338*53ee8cc1Swenshuai.xi 
339*53ee8cc1Swenshuai.xi #define	SG_DTR		0x1
340*53ee8cc1Swenshuai.xi #define	SG_DCD		0x2
341*53ee8cc1Swenshuai.xi #define	SG_RTS		0x4
342*53ee8cc1Swenshuai.xi #define	SG_CTS		0x8
343*53ee8cc1Swenshuai.xi #define	SG_DSR		0x10
344*53ee8cc1Swenshuai.xi #define	SG_RI		0x20
345*53ee8cc1Swenshuai.xi 
346*53ee8cc1Swenshuai.xi /*
347*53ee8cc1Swenshuai.xi  *	Define the notification setting structure. This is used to tell the
348*53ee8cc1Swenshuai.xi  *	port what events we want to be informed about. Fields here use the
349*53ee8cc1Swenshuai.xi  *	same defines as for the asysigs structure above.
350*53ee8cc1Swenshuai.xi  */
351*53ee8cc1Swenshuai.xi typedef struct asynotify {
352*53ee8cc1Swenshuai.xi 	unsigned long	ctrl;
353*53ee8cc1Swenshuai.xi 	unsigned long	data;
354*53ee8cc1Swenshuai.xi 	unsigned long	signal;
355*53ee8cc1Swenshuai.xi 	unsigned long	sigvalue;
356*53ee8cc1Swenshuai.xi } asynotify_t;
357*53ee8cc1Swenshuai.xi 
358*53ee8cc1Swenshuai.xi /*
359*53ee8cc1Swenshuai.xi  *	Define the port control structure. It is used to do fine grain
360*53ee8cc1Swenshuai.xi  *	control operations on the port.
361*53ee8cc1Swenshuai.xi  */
362*53ee8cc1Swenshuai.xi typedef struct {
363*53ee8cc1Swenshuai.xi 	unsigned long	rxctrl;
364*53ee8cc1Swenshuai.xi 	unsigned long	txctrl;
365*53ee8cc1Swenshuai.xi 	char		rximdch;
366*53ee8cc1Swenshuai.xi 	char		tximdch;
367*53ee8cc1Swenshuai.xi 	char		spare1;
368*53ee8cc1Swenshuai.xi 	char		spare2;
369*53ee8cc1Swenshuai.xi } asyctrl_t;
370*53ee8cc1Swenshuai.xi 
371*53ee8cc1Swenshuai.xi #define	CT_ENABLE	0x1
372*53ee8cc1Swenshuai.xi #define	CT_DISABLE	0x2
373*53ee8cc1Swenshuai.xi #define	CT_STOP		0x4
374*53ee8cc1Swenshuai.xi #define	CT_START	0x8
375*53ee8cc1Swenshuai.xi #define	CT_STARTFLOW	0x10
376*53ee8cc1Swenshuai.xi #define	CT_STOPFLOW	0x20
377*53ee8cc1Swenshuai.xi #define	CT_SENDCHR	0x40
378*53ee8cc1Swenshuai.xi 
379*53ee8cc1Swenshuai.xi /*
380*53ee8cc1Swenshuai.xi  *	Define the stats structure kept for each port. This is a useful set
381*53ee8cc1Swenshuai.xi  *	of data collected for each port on the slave. The A_GETSTATS command
382*53ee8cc1Swenshuai.xi  *	is used to retrieve this data from the slave.
383*53ee8cc1Swenshuai.xi  */
384*53ee8cc1Swenshuai.xi typedef struct asystats {
385*53ee8cc1Swenshuai.xi 	unsigned long	opens;
386*53ee8cc1Swenshuai.xi 	unsigned long	txchars;
387*53ee8cc1Swenshuai.xi 	unsigned long	rxchars;
388*53ee8cc1Swenshuai.xi 	unsigned long	txringq;
389*53ee8cc1Swenshuai.xi 	unsigned long	rxringq;
390*53ee8cc1Swenshuai.xi 	unsigned long	txmsgs;
391*53ee8cc1Swenshuai.xi 	unsigned long	rxmsgs;
392*53ee8cc1Swenshuai.xi 	unsigned long	txflushes;
393*53ee8cc1Swenshuai.xi 	unsigned long	rxflushes;
394*53ee8cc1Swenshuai.xi 	unsigned long	overruns;
395*53ee8cc1Swenshuai.xi 	unsigned long	framing;
396*53ee8cc1Swenshuai.xi 	unsigned long	parity;
397*53ee8cc1Swenshuai.xi 	unsigned long	ringover;
398*53ee8cc1Swenshuai.xi 	unsigned long	lost;
399*53ee8cc1Swenshuai.xi 	unsigned long	rxstart;
400*53ee8cc1Swenshuai.xi 	unsigned long	rxstop;
401*53ee8cc1Swenshuai.xi 	unsigned long	txstart;
402*53ee8cc1Swenshuai.xi 	unsigned long	txstop;
403*53ee8cc1Swenshuai.xi 	unsigned long	dcdcnt;
404*53ee8cc1Swenshuai.xi 	unsigned long	dtrcnt;
405*53ee8cc1Swenshuai.xi 	unsigned long	ctscnt;
406*53ee8cc1Swenshuai.xi 	unsigned long	rtscnt;
407*53ee8cc1Swenshuai.xi 	unsigned long	dsrcnt;
408*53ee8cc1Swenshuai.xi 	unsigned long	ricnt;
409*53ee8cc1Swenshuai.xi 	unsigned long	txbreaks;
410*53ee8cc1Swenshuai.xi 	unsigned long	rxbreaks;
411*53ee8cc1Swenshuai.xi 	unsigned long	signals;
412*53ee8cc1Swenshuai.xi 	unsigned long	state;
413*53ee8cc1Swenshuai.xi 	unsigned long	hwid;
414*53ee8cc1Swenshuai.xi } asystats_t;
415*53ee8cc1Swenshuai.xi 
416*53ee8cc1Swenshuai.xi /*****************************************************************************/
417*53ee8cc1Swenshuai.xi 
418*53ee8cc1Swenshuai.xi /*
419*53ee8cc1Swenshuai.xi  *	All command and control communication with a device on the slave is
420*53ee8cc1Swenshuai.xi  *	via a control block in shared memory. Each device has its own control
421*53ee8cc1Swenshuai.xi  *	block, defined by the following structure. The control block allows
422*53ee8cc1Swenshuai.xi  *	the host to open, close and control the device on the slave.
423*53ee8cc1Swenshuai.xi  */
424*53ee8cc1Swenshuai.xi typedef struct cdkctrl {
425*53ee8cc1Swenshuai.xi 	unsigned char	open;
426*53ee8cc1Swenshuai.xi 	unsigned char	close;
427*53ee8cc1Swenshuai.xi 	unsigned long	openarg;
428*53ee8cc1Swenshuai.xi 	unsigned long	closearg;
429*53ee8cc1Swenshuai.xi 	unsigned long	cmd;
430*53ee8cc1Swenshuai.xi 	unsigned long	status;
431*53ee8cc1Swenshuai.xi 	unsigned long	args[32];
432*53ee8cc1Swenshuai.xi } cdkctrl_t;
433*53ee8cc1Swenshuai.xi 
434*53ee8cc1Swenshuai.xi /*
435*53ee8cc1Swenshuai.xi  *	Each device on the slave passes data to and from the host via a ring
436*53ee8cc1Swenshuai.xi  *	queue in shared memory. Define a ring queue structure to hold the
437*53ee8cc1Swenshuai.xi  *	vital information about each ring queue. Two ring queues will be
438*53ee8cc1Swenshuai.xi  *	allocated for each port, one for receive data and one for transmit
439*53ee8cc1Swenshuai.xi  *	data.
440*53ee8cc1Swenshuai.xi  */
441*53ee8cc1Swenshuai.xi typedef struct cdkasyrq {
442*53ee8cc1Swenshuai.xi 	unsigned long	offset;
443*53ee8cc1Swenshuai.xi 	unsigned short	size;
444*53ee8cc1Swenshuai.xi 	unsigned short	head;
445*53ee8cc1Swenshuai.xi 	unsigned short	tail;
446*53ee8cc1Swenshuai.xi } cdkasyrq_t;
447*53ee8cc1Swenshuai.xi 
448*53ee8cc1Swenshuai.xi /*
449*53ee8cc1Swenshuai.xi  *	Each asynchronous port is defined in shared memory by the following
450*53ee8cc1Swenshuai.xi  *	structure. It contains a control block to command a device, and also
451*53ee8cc1Swenshuai.xi  *	the necessary data channel information as well.
452*53ee8cc1Swenshuai.xi  */
453*53ee8cc1Swenshuai.xi typedef struct cdkasy {
454*53ee8cc1Swenshuai.xi 	cdkctrl_t	ctrl;
455*53ee8cc1Swenshuai.xi 	unsigned short	notify;
456*53ee8cc1Swenshuai.xi 	asynotify_t	changed;
457*53ee8cc1Swenshuai.xi 	unsigned short	receive;
458*53ee8cc1Swenshuai.xi 	cdkasyrq_t	rxq;
459*53ee8cc1Swenshuai.xi 	unsigned short	transmit;
460*53ee8cc1Swenshuai.xi 	cdkasyrq_t	txq;
461*53ee8cc1Swenshuai.xi } cdkasy_t;
462*53ee8cc1Swenshuai.xi 
463*53ee8cc1Swenshuai.xi #pragma	pack()
464*53ee8cc1Swenshuai.xi 
465*53ee8cc1Swenshuai.xi /*****************************************************************************/
466*53ee8cc1Swenshuai.xi 
467*53ee8cc1Swenshuai.xi /*
468*53ee8cc1Swenshuai.xi  *	Define the set of ioctls used by the driver to do special things
469*53ee8cc1Swenshuai.xi  *	to the board. These include interrupting it, and initializing
470*53ee8cc1Swenshuai.xi  *	the driver after board startup and shutdown.
471*53ee8cc1Swenshuai.xi  */
472*53ee8cc1Swenshuai.xi #include <linux/ioctl.h>
473*53ee8cc1Swenshuai.xi 
474*53ee8cc1Swenshuai.xi #define	STL_BINTR	_IO('s',20)
475*53ee8cc1Swenshuai.xi #define	STL_BSTART	_IO('s',21)
476*53ee8cc1Swenshuai.xi #define	STL_BSTOP	_IO('s',22)
477*53ee8cc1Swenshuai.xi #define	STL_BRESET	_IO('s',23)
478*53ee8cc1Swenshuai.xi 
479*53ee8cc1Swenshuai.xi /*
480*53ee8cc1Swenshuai.xi  *	Define a set of ioctl extensions, used to get at special stuff.
481*53ee8cc1Swenshuai.xi  */
482*53ee8cc1Swenshuai.xi #define	STL_GETPFLAG	_IO('s',80)
483*53ee8cc1Swenshuai.xi #define	STL_SETPFLAG	_IO('s',81)
484*53ee8cc1Swenshuai.xi 
485*53ee8cc1Swenshuai.xi /*****************************************************************************/
486*53ee8cc1Swenshuai.xi #endif
487