The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/i386/include/cdk.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*****************************************************************************/
    2 
    3 /*
    4  * cdk.h  -- CDK interface definitions.
    5  *
    6  * Copyright (c) 1994-1998 Greg Ungerer (gerg@stallion.oz.au).
    7  * All rights reserved.
    8  *
    9  * Redistribution and use in source and binary forms, with or without
   10  * modification, are permitted provided that the following conditions
   11  * are met:
   12  * 1. Redistributions of source code must retain the above copyright
   13  *    notice, this list of conditions and the following disclaimer.
   14  * 2. Redistributions in binary form must reproduce the above copyright
   15  *    notice, this list of conditions and the following disclaimer in the
   16  *    documentation and/or other materials provided with the distribution.
   17  * 3. All advertising materials mentioning features or use of this software
   18  *    must display the following acknowledgement:
   19  *      This product includes software developed by Greg Ungerer.
   20  * 4. Neither the name of the author nor the names of any co-contributors
   21  *    may be used to endorse or promote products derived from this software
   22  *    without specific prior written permission.
   23  *
   24  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
   25  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   26  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   27  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
   28  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   29  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   30  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   31  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   32  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   33  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   34  * SUCH DAMAGE.
   35  *
   36  * $FreeBSD$
   37  */
   38 
   39 /*****************************************************************************/
   40 #ifndef _CDK_H
   41 #define _CDK_H
   42 /*****************************************************************************/
   43 
   44 #pragma pack(2)
   45 
   46 /*
   47  *      The following set of definitions is used to communicate with the
   48  *      shared memory interface of the Stallion intelligent multiport serial
   49  *      boards. The definitions in this file are taken directly from the
   50  *      document titled "Generic Stackable Interface, Downloader and
   51  *      Communications Development Kit".
   52  */
   53 
   54 /*
   55  *      Define the set of importrant shared memory addresses. These are
   56  *      required to intialize the board and get things started. All of these
   57  *      addresses are relative to the start of the shared memory.
   58  */
   59 #define CDK_SIGADDR     0x200
   60 #define CDK_FEATADDR    0x280
   61 #define CDK_CDKADDR     0x300
   62 #define CDK_RDYADDR     0x262
   63 
   64 #define CDK_ALIVEMARKER 13
   65 
   66 /*
   67  *      On hardware power up the ROMs located on the EasyConnection 8/64 will
   68  *      fill out the following signature information into shared memory. This
   69  *      way the host system can quickly determine that the board is present
   70  *      and is operational.
   71  */
   72 typedef struct cdkecpsig {
   73         unsigned long   magic;
   74         unsigned short  romver;
   75         unsigned short  cputype;
   76         unsigned char   panelid[8];
   77 } cdkecpsig_t;
   78 
   79 #define ECP_MAGIC       0x21504345
   80 
   81 /*
   82  *      On hardware power up the ROMs located on the ONboard, Stallion and
   83  *      Brumbys will fill out the following signature information into shared
   84  *      memory. This way the host system can quickly determine that the board
   85  *      is present and is operational.
   86  */
   87 typedef struct cdkonbsig {
   88         unsigned short  magic0;
   89         unsigned short  magic1;
   90         unsigned short  magic2;
   91         unsigned short  magic3;
   92         unsigned short  romver;
   93         unsigned short  memoff;
   94         unsigned short  memseg;
   95         unsigned short  amask0;
   96         unsigned short  pic;
   97         unsigned short  status;
   98         unsigned short  btype;
   99         unsigned short  clkticks;
  100         unsigned short  clkspeed;
  101         unsigned short  amask1;
  102         unsigned short  amask2;
  103 } cdkonbsig_t;
  104 
  105 #define ONB_MAGIC0      0xf2a7
  106 #define ONB_MAGIC1      0xa149
  107 #define ONB_MAGIC2      0x6352
  108 #define ONB_MAGIC3      0xf121
  109 
  110 /*
  111  *      Define the feature area structure. The feature area is the set of
  112  *      startup parameters used by the slave image when it starts executing.
  113  *      They allow for the specification of buffer sizes, debug trace, etc.
  114  */
  115 typedef struct cdkfeature {
  116         unsigned long   debug;
  117         unsigned long   banner;
  118         unsigned long   etype;
  119         unsigned long   nrdevs;
  120         unsigned long   brdspec;
  121         unsigned long   txrqsize;
  122         unsigned long   rxrqsize;
  123         unsigned long   flags;
  124 } cdkfeature_t;
  125 
  126 #define ETYP_DDK        0
  127 #define ETYP_CDK        1
  128 
  129 /*
  130  *      Define the CDK header structure. This is the info that the slave
  131  *      environment sets up after it has been downloaded and started. It
  132  *      essentially provides a memory map for the shared memory interface.
  133  */
  134 typedef struct cdkhdr {
  135         unsigned short  command;
  136         unsigned short  status;
  137         unsigned short  port;
  138         unsigned short  mode;
  139         unsigned long   cmd_buf[14];
  140         unsigned short  alive_cnt;
  141         unsigned short  intrpt_mode;
  142         unsigned char   intrpt_id[8];
  143         unsigned char   ver_release;
  144         unsigned char   ver_modification;
  145         unsigned char   ver_fix;
  146         unsigned char   deadman_restart;
  147         unsigned short  deadman;
  148         unsigned short  nrdevs;
  149         unsigned long   memp;
  150         unsigned long   hostp;
  151         unsigned long   slavep;
  152         unsigned char   hostreq;
  153         unsigned char   slavereq;
  154         unsigned char   cmd_reserved[30];
  155 } cdkhdr_t;
  156 
  157 #define MODE_DDK        0
  158 #define MODE_CDK        1
  159 
  160 #define IMD_INTR        0x0
  161 #define IMD_PPINTR      0x1
  162 #define IMD_POLL        0xff
  163 
  164 /*
  165  *      Define the memory mapping structure. This structure is pointed to by
  166  *      the memp field in the stlcdkhdr struct. As many as these structures
  167  *      as required are layed out in shared memory to define how the rest of
  168  *      shared memory is divided up. There will be one for each port.
  169  */
  170 typedef struct cdkmem {
  171         unsigned short  dtype;
  172         unsigned long   offset;
  173 } cdkmem_t;
  174 
  175 #define TYP_UNDEFINED   0x0
  176 #define TYP_ASYNCTRL    0x1
  177 #define TYP_ASYNC       0x20
  178 #define TYP_PARALLEL    0x40
  179 #define TYP_SYNCX21     0x60
  180 
  181 /*****************************************************************************/
  182 
  183 /*
  184  *      Following is a set of defines and structures used to actually deal
  185  *      with the serial ports on the board. Firstly is the set of commands
  186  *      that can be applied to ports.
  187  */
  188 #define ASYCMD          (((unsigned long) 'a') << 8)
  189 
  190 #define A_NULL          (ASYCMD | 0)
  191 #define A_FLUSH         (ASYCMD | 1)
  192 #define A_BREAK         (ASYCMD | 2)
  193 #define A_GETPORT       (ASYCMD | 3)
  194 #define A_SETPORT       (ASYCMD | 4)
  195 #define A_SETPORTF      (ASYCMD | 5)
  196 #define A_SETPORTFTX    (ASYCMD | 6)
  197 #define A_SETPORTFRX    (ASYCMD | 7)
  198 #define A_GETSIGNALS    (ASYCMD | 8)
  199 #define A_SETSIGNALS    (ASYCMD | 9)
  200 #define A_SETSIGNALSF   (ASYCMD | 10)
  201 #define A_SETSIGNALSFTX (ASYCMD | 11)
  202 #define A_SETSIGNALSFRX (ASYCMD | 12)
  203 #define A_GETNOTIFY     (ASYCMD | 13)
  204 #define A_SETNOTIFY     (ASYCMD | 14)
  205 #define A_NOTIFY        (ASYCMD | 15)
  206 #define A_PORTCTRL      (ASYCMD | 16)
  207 #define A_GETSTATS      (ASYCMD | 17)
  208 #define A_RQSTATE       (ASYCMD | 18)
  209 #define A_FLOWSTATE     (ASYCMD | 19)
  210 #define A_CLEARSTATS    (ASYCMD | 20)
  211 
  212 /*
  213  *      Define those arguments used for simple commands.
  214  */
  215 #define FLUSHRX         0x1
  216 #define FLUSHTX         0x2
  217 
  218 #define BREAKON         -1
  219 #define BREAKOFF        -2
  220 
  221 /*
  222  *      Define the port setting structure, and all those defines that go along
  223  *      with it. Basically this structure defines the charcateristics of this
  224  *      port: baud rate, chars, parity, input/output char cooking etc.
  225  */
  226 typedef struct asyport {
  227         unsigned long   baudout;
  228         unsigned long   baudin;
  229         unsigned long   iflag;
  230         unsigned long   oflag;
  231         unsigned long   lflag;
  232         unsigned long   pflag;
  233         unsigned long   flow;
  234         unsigned long   spare1;
  235         unsigned short  vtime;
  236         unsigned short  vmin;
  237         unsigned short  txlo;
  238         unsigned short  txhi;
  239         unsigned short  rxlo;
  240         unsigned short  rxhi;
  241         unsigned short  rxhog;
  242         unsigned short  spare2;
  243         unsigned char   csize;
  244         unsigned char   stopbs;
  245         unsigned char   parity;
  246         unsigned char   stopin;
  247         unsigned char   startin;
  248         unsigned char   stopout;
  249         unsigned char   startout;
  250         unsigned char   parmark;
  251         unsigned char   brkmark;
  252         unsigned char   cc[11];
  253 } asyport_t;
  254 
  255 #define PT_STOP1        0x0
  256 #define PT_STOP15       0x1
  257 #define PT_STOP2        0x2
  258 
  259 #define PT_NOPARITY     0x0
  260 #define PT_ODDPARITY    0x1
  261 #define PT_EVENPARITY   0x2
  262 #define PT_MARKPARITY   0x3
  263 #define PT_SPACEPARITY  0x4
  264 
  265 #define F_NONE          0x0
  266 #define F_IXON          0x1
  267 #define F_IXOFF         0x2
  268 #define F_IXANY         0x4
  269 #define F_IOXANY        0x8
  270 #define F_RTSFLOW       0x10
  271 #define F_CTSFLOW       0x20
  272 #define F_DTRFLOW       0x40
  273 #define F_DCDFLOW       0x80
  274 #define F_DSROFLOW      0x100
  275 #define F_DSRIFLOW      0x200
  276 
  277 #define FI_NORX         0x1
  278 #define FI_RAW          0x2
  279 #define FI_ISTRIP       0x4
  280 #define FI_UCLC         0x8
  281 #define FI_INLCR        0x10
  282 #define FI_ICRNL        0x20
  283 #define FI_IGNCR        0x40
  284 #define FI_IGNBREAK     0x80
  285 #define FI_DSCRDBREAK   0x100
  286 #define FI_1MARKBREAK   0x200
  287 #define FI_2MARKBREAK   0x400
  288 #define FI_XCHNGBREAK   0x800
  289 #define FI_IGNRXERRS    0x1000
  290 #define FI_DSCDRXERRS   0x2000
  291 #define FI_1MARKRXERRS  0x4000
  292 #define FI_2MARKRXERRS  0x8000
  293 #define FI_XCHNGRXERRS  0x10000
  294 #define FI_DSCRDNULL    0x20000
  295 
  296 #define FO_OLCUC        0x1
  297 #define FO_ONLCR        0x2
  298 #define FO_OOCRNL       0x4
  299 #define FO_ONOCR        0x8
  300 #define FO_ONLRET       0x10
  301 #define FO_ONL          0x20
  302 #define FO_OBS          0x40
  303 #define FO_OVT          0x80
  304 #define FO_OFF          0x100
  305 #define FO_OTAB1        0x200
  306 #define FO_OTAB2        0x400
  307 #define FO_OTAB3        0x800
  308 #define FO_OCR1         0x1000
  309 #define FO_OCR2         0x2000
  310 #define FO_OCR3         0x4000
  311 #define FO_OFILL        0x8000
  312 #define FO_ODELL        0x10000
  313 
  314 #define P_RTSLOCK       0x1
  315 #define P_CTSLOCK       0x2
  316 #define P_MAPRTS        0x4
  317 #define P_MAPCTS        0x8
  318 #define P_LOOPBACK      0x10
  319 #define P_DTRFOLLOW     0x20
  320 #define P_FAKEDCD       0x40
  321 
  322 #define P_RXIMIN        0x10000
  323 #define P_RXITIME       0x20000
  324 #define P_RXTHOLD       0x40000
  325 
  326 /*
  327  *      Define a structure to communicate serial port signal and data state
  328  *      information.
  329  */
  330 typedef struct asysigs {
  331         unsigned long   data;
  332         unsigned long   signal;
  333         unsigned long   sigvalue;
  334 } asysigs_t;
  335 
  336 #define DT_TXBUSY       0x1
  337 #define DT_TXEMPTY      0x2
  338 #define DT_TXLOW        0x4
  339 #define DT_TXHIGH       0x8
  340 #define DT_TXFULL       0x10
  341 #define DT_TXHOG        0x20
  342 #define DT_TXFLOWED     0x40
  343 #define DT_TXBREAK      0x80
  344 
  345 #define DT_RXBUSY       0x100
  346 #define DT_RXEMPTY      0x200
  347 #define DT_RXLOW        0x400
  348 #define DT_RXHIGH       0x800
  349 #define DT_RXFULL       0x1000
  350 #define DT_RXHOG        0x2000
  351 #define DT_RXFLOWED     0x4000
  352 #define DT_RXBREAK      0x8000
  353 
  354 #define SG_DTR          0x1
  355 #define SG_DCD          0x2
  356 #define SG_RTS          0x4
  357 #define SG_CTS          0x8
  358 #define SG_DSR          0x10
  359 #define SG_RI           0x20
  360 
  361 /*
  362  *      Define the notification setting structure. This is used to tell the
  363  *      port what events we want to be informed about. Fields here use the
  364  *      same defines as for the asysigs structure above.
  365  */
  366 typedef struct asynotify {
  367         unsigned long   ctrl;
  368         unsigned long   data;
  369         unsigned long   signal;
  370         unsigned long   sigvalue;
  371 } asynotify_t;
  372 
  373 /*
  374  *      Define the port control structure. It is used to do fine grain
  375  *      control operations on the port.
  376  */
  377 typedef struct {
  378         unsigned long   rxctrl;
  379         unsigned long   txctrl;
  380         char            rximdch;
  381         char            tximdch;
  382         char            spare1;
  383         char            spare2;
  384 } asyctrl_t;
  385 
  386 #define CT_ENABLE       0x1
  387 #define CT_DISABLE      0x2
  388 #define CT_STOP         0x4
  389 #define CT_START        0x8
  390 #define CT_STARTFLOW    0x10
  391 #define CT_STOPFLOW     0x20
  392 #define CT_SENDCHR      0x40
  393 
  394 /*
  395  *      Define the stats structure kept for each port. This is a useful set
  396  *      of data collected for each port on the slave. The A_GETSTATS command
  397  *      is used to retrive this data from the slave.
  398  */
  399 typedef struct asystats {
  400         unsigned long   opens;
  401         unsigned long   txchars;
  402         unsigned long   rxchars;
  403         unsigned long   txringq;
  404         unsigned long   rxringq;
  405         unsigned long   txmsgs;
  406         unsigned long   rxmsgs;
  407         unsigned long   txflushes;
  408         unsigned long   rxflushes;
  409         unsigned long   overruns;
  410         unsigned long   framing;
  411         unsigned long   parity;
  412         unsigned long   ringover;
  413         unsigned long   lost;
  414         unsigned long   rxstart;
  415         unsigned long   rxstop;
  416         unsigned long   txstart;
  417         unsigned long   txstop;
  418         unsigned long   dcdcnt;
  419         unsigned long   dtrcnt;
  420         unsigned long   ctscnt;
  421         unsigned long   rtscnt;
  422         unsigned long   dsrcnt;
  423         unsigned long   ricnt;
  424         unsigned long   txbreaks;
  425         unsigned long   rxbreaks;
  426         unsigned long   signals;
  427         unsigned long   state;
  428         unsigned long   hwid;
  429 } asystats_t;
  430 
  431 /*****************************************************************************/
  432 
  433 /*
  434  *      All command and control communication with a device on the slave is
  435  *      via a control block in shared memory. Each device has its own control
  436  *      block, defined by the following structure. The control block allows
  437  *      the host to open, close and control the device on the slave.
  438  */
  439 typedef struct cdkctrl {
  440         unsigned char   open;
  441         unsigned char   close;
  442         unsigned long   openarg;
  443         unsigned long   closearg;
  444         unsigned long   cmd;
  445         unsigned long   status;
  446         unsigned long   args[32];
  447 } cdkctrl_t;
  448 
  449 /*
  450  *      Each device on the slave passes data to and from the host via a ring
  451  *      queue in shared memory. Define a ring queue structure to hold the
  452  *      vital information about each ring queue. Two ring queues will be
  453  *      allocated for each port, one for reveice data and one for transmit
  454  *      data.
  455  */
  456 typedef struct cdkasyrq {
  457         unsigned long   offset;
  458         unsigned short  size;
  459         unsigned short  head;
  460         unsigned short  tail;
  461 } cdkasyrq_t;
  462 
  463 /*
  464  *      Each asynchronous port is defined in shared memory by the following
  465  *      structure. It contains a control block to command a device, and also
  466  *      the neccessary data channel information as well.
  467  */
  468 typedef struct cdkasy {
  469         cdkctrl_t       ctrl;
  470         unsigned short  notify;
  471         asynotify_t     changed;
  472         unsigned short  receive;
  473         cdkasyrq_t      rxq;
  474         unsigned short  transmit;
  475         cdkasyrq_t      txq;
  476 } cdkasy_t;
  477 
  478 #pragma pack()
  479 
  480 /*****************************************************************************/
  481 
  482 /*
  483  *      Define the set of ioctls used by the driver to do special things
  484  *      to the board. These include interrupting it, and initializeing
  485  *      the driver after board startup and shutdown.
  486  */
  487 #define STL_BINTR       _IO('s', 20)
  488 #define STL_BSTART      _IO('s', 21)
  489 #define STL_BSTOP       _IO('s', 22)
  490 #define STL_BRESET      _IO('s', 23)
  491 
  492 /*
  493  *      Define a set of ioctl extensions, used to get at special stuff.
  494  */
  495 #define STL_GETPFLAG    _IOR('s', 80, unsigned long)
  496 #define STL_SETPFLAG    _IOW('s', 81, unsigned long)
  497 
  498 /*****************************************************************************/
  499 #endif

Cache object: c8967ae6c9a0e7f69e322aa088241319


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.