File: /usr/include/linux/cdk.h

1     /*****************************************************************************/
2     
3     /*
4      *	cdk.h  -- CDK interface definitions.
5      *
6      *	Copyright (C) 1996-1998  Stallion Technologies (support@stallion.oz.au).
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      */
57     typedef 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      */
72     typedef 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      */
100     typedef 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      */
119     typedef 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      */
155     typedef 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      */
211     typedef 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      */
315     typedef 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      */
351     typedef 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      */
362     typedef 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      */
384     typedef 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      */
424     typedef 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      */
441     typedef 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      */
453     typedef 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