include/linux/cdk.h
changeset 0 aa628870c1d3
equal deleted inserted replaced
-1:000000000000 0:aa628870c1d3
       
     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 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