[POWERPC] spufs: Add infrastructure needed for gang scheduling
[linux-2.6] / include / linux / cdk.h
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