• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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   */
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 laid 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