linux/include/linux/cdk.h
<<
>>
Prefs
   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
 487