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