Subversion Repositories shark

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
422 giacomo 1
/*****************************************************************************/
2
 
3
/*
4
 *      cdk.h  -- CDK interface definitions.
5
 *
6
 *      Copyright (C) 1996-1998  Stallion Technologies (support@stallion.oz.au).
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