source: svn/trunk/newcon3bcm2_21bu/toolchain/mips-linux-uclibc/include/linux/cdk.h @ 8

Last change on this file since 8 was 2, checked in by jglee, 11 years ago

first commit

  • Property svn:executable set to *
File size: 12.5 KB
Line 
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
Note: See TracBrowser for help on using the repository browser.