Home | History | Annotate | Download | only in 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  */
     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