Viewing file:      cdk.h (12.5 KB)      -rw-r--r-- Select action/file-type:    (+) |   (+) |   (+) | Code (+) | Session (+) |   (+) | SDB (+) |   (+) |   (+) |   (+) |   (+) |   (+) |
 
/*****************************************************************************/
  /*  *    cdk.h  -- CDK interface definitions.  *  *    Copyright (C) 1996-1998  Stallion Technologies (support@stallion.oz.au).  *    Copyright (C) 1994-1996  Greg Ungerer.  *  *    This program is free software; you can redistribute it and/or modify  *    it under the terms of the GNU General Public License as published by  *    the Free Software Foundation; either version 2 of the License, or  *    (at your option) any later version.  *  *    This program is distributed in the hope that it will be useful,  *    but WITHOUT ANY WARRANTY; without even the implied warranty of  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  *    GNU General Public License for more details.  *  *    You should have received a copy of the GNU General Public License  *    along with this program; if not, write to the Free Software  *    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
  /*****************************************************************************/ #ifndef    _CDK_H #define    _CDK_H /*****************************************************************************/
  #pragma    pack(2)
  /*  *    The following set of definitions is used to communicate with the  *    shared memory interface of the Stallion intelligent multiport serial  *    boards. The definitions in this file are taken directly from the  *    document titled "Generic Stackable Interface, Downloader and  *    Communications Development Kit".  */
  /*  *    Define the set of important shared memory addresses. These are  *    required to initialize the board and get things started. All of these  *    addresses are relative to the start of the shared memory.  */ #define    CDK_SIGADDR    0x200 #define    CDK_FEATADDR    0x280 #define    CDK_CDKADDR    0x300 #define    CDK_RDYADDR    0x262
  #define    CDK_ALIVEMARKER    13
  /*  *    On hardware power up the ROMs located on the EasyConnection 8/64 will  *    fill out the following signature information into shared memory. This  *    way the host system can quickly determine that the board is present  *    and is operational.  */ typedef struct cdkecpsig {     unsigned long    magic;     unsigned short    romver;     unsigned short    cputype;     unsigned char    panelid[8]; } cdkecpsig_t;
  #define    ECP_MAGIC    0x21504345
  /*  *    On hardware power up the ROMs located on the ONboard, Stallion and  *    Brumbys will fill out the following signature information into shared  *    memory. This way the host system can quickly determine that the board  *    is present and is operational.  */ typedef struct cdkonbsig {     unsigned short    magic0;     unsigned short    magic1;     unsigned short    magic2;     unsigned short    magic3;     unsigned short    romver;     unsigned short    memoff;     unsigned short    memseg;     unsigned short    amask0;     unsigned short    pic;     unsigned short    status;     unsigned short    btype;     unsigned short    clkticks;     unsigned short    clkspeed;     unsigned short    amask1;     unsigned short    amask2; } cdkonbsig_t;
  #define    ONB_MAGIC0    0xf2a7 #define    ONB_MAGIC1    0xa149 #define    ONB_MAGIC2    0x6352 #define    ONB_MAGIC3    0xf121
  /*  *    Define the feature area structure. The feature area is the set of  *    startup parameters used by the slave image when it starts executing.  *    They allow for the specification of buffer sizes, debug trace, etc.  */ typedef struct cdkfeature {     unsigned long    debug;     unsigned long    banner;     unsigned long    etype;     unsigned long    nrdevs;     unsigned long    brdspec;     unsigned long    txrqsize;     unsigned long    rxrqsize;     unsigned long    flags; } cdkfeature_t;
  #define    ETYP_DDK    0 #define    ETYP_CDK    1
  /*  *    Define the CDK header structure. This is the info that the slave  *    environment sets up after it has been downloaded and started. It  *    essentially provides a memory map for the shared memory interface.  */ typedef struct cdkhdr {     unsigned short    command;     unsigned short    status;     unsigned short    port;     unsigned short    mode;     unsigned long    cmd_buf[14];     unsigned short    alive_cnt;     unsigned short    intrpt_mode;     unsigned char    intrpt_id[8];     unsigned char    ver_release;     unsigned char    ver_modification;     unsigned char    ver_fix;     unsigned char    deadman_restart;     unsigned short    deadman;     unsigned short    nrdevs;     unsigned long    memp;     unsigned long    hostp;     unsigned long    slavep;     unsigned char    hostreq;     unsigned char    slavereq;     unsigned char    cmd_reserved[30]; } cdkhdr_t;
  #define    MODE_DDK    0 #define    MODE_CDK    1
  #define    IMD_INTR    0x0 #define    IMD_PPINTR    0x1 #define    IMD_POLL    0xff
  /*  *    Define the memory mapping structure. This structure is pointed to by  *    the memp field in the stlcdkhdr struct. As many as these structures  *    as required are layed out in shared memory to define how the rest of  *    shared memory is divided up. There will be one for each port.  */ typedef struct cdkmem {     unsigned short    dtype;     unsigned long    offset; } cdkmem_t;
  #define    TYP_UNDEFINED    0x0 #define    TYP_ASYNCTRL    0x1 #define    TYP_ASYNC    0x20 #define    TYP_PARALLEL    0x40 #define    TYP_SYNCX21    0x60
  /*****************************************************************************/
  /*  *    Following is a set of defines and structures used to actually deal  *    with the serial ports on the board. Firstly is the set of commands  *    that can be applied to ports.  */ #define    ASYCMD        (((unsigned long) 'a') << 8)
  #define    A_NULL        (ASYCMD | 0) #define    A_FLUSH        (ASYCMD | 1) #define    A_BREAK        (ASYCMD | 2) #define    A_GETPORT    (ASYCMD | 3) #define    A_SETPORT    (ASYCMD | 4) #define    A_SETPORTF    (ASYCMD | 5) #define    A_SETPORTFTX    (ASYCMD | 6) #define    A_SETPORTFRX    (ASYCMD | 7) #define    A_GETSIGNALS    (ASYCMD | 8) #define    A_SETSIGNALS    (ASYCMD | 9) #define    A_SETSIGNALSF    (ASYCMD | 10) #define    A_SETSIGNALSFTX    (ASYCMD | 11) #define    A_SETSIGNALSFRX    (ASYCMD | 12) #define    A_GETNOTIFY    (ASYCMD | 13) #define    A_SETNOTIFY    (ASYCMD | 14) #define    A_NOTIFY    (ASYCMD | 15) #define    A_PORTCTRL    (ASYCMD | 16) #define    A_GETSTATS    (ASYCMD | 17) #define    A_RQSTATE    (ASYCMD | 18) #define    A_FLOWSTATE    (ASYCMD | 19) #define    A_CLEARSTATS    (ASYCMD | 20)
  /*  *    Define those arguments used for simple commands.  */ #define    FLUSHRX        0x1 #define    FLUSHTX        0x2
  #define    BREAKON        -1 #define    BREAKOFF    -2
  /*  *    Define the port setting structure, and all those defines that go along  *    with it. Basically this structure defines the characteristics of this  *    port: baud rate, chars, parity, input/output char cooking etc.  */ typedef struct asyport {     unsigned long    baudout;     unsigned long    baudin;     unsigned long    iflag;     unsigned long    oflag;     unsigned long    lflag;     unsigned long    pflag;     unsigned long    flow;     unsigned long    spare1;     unsigned short    vtime;     unsigned short    vmin;     unsigned short    txlo;     unsigned short    txhi;     unsigned short    rxlo;     unsigned short    rxhi;     unsigned short    rxhog;     unsigned short    spare2;     unsigned char    csize;     unsigned char    stopbs;     unsigned char    parity;     unsigned char    stopin;     unsigned char    startin;     unsigned char    stopout;     unsigned char    startout;     unsigned char    parmark;     unsigned char    brkmark;     unsigned char    cc[11]; } asyport_t;
  #define    PT_STOP1    0x0 #define    PT_STOP15    0x1 #define    PT_STOP2    0x2
  #define    PT_NOPARITY    0x0 #define    PT_ODDPARITY    0x1 #define    PT_EVENPARITY    0x2 #define    PT_MARKPARITY    0x3 #define    PT_SPACEPARITY    0x4
  #define    F_NONE        0x0 #define    F_IXON        0x1 #define    F_IXOFF        0x2 #define    F_IXANY        0x4 #define    F_IOXANY    0x8 #define    F_RTSFLOW    0x10 #define    F_CTSFLOW    0x20 #define    F_DTRFLOW    0x40 #define    F_DCDFLOW    0x80 #define    F_DSROFLOW    0x100 #define    F_DSRIFLOW    0x200
  #define    FI_NORX        0x1 #define    FI_RAW        0x2 #define    FI_ISTRIP    0x4 #define    FI_UCLC        0x8 #define    FI_INLCR    0x10 #define    FI_ICRNL    0x20 #define    FI_IGNCR    0x40 #define    FI_IGNBREAK    0x80 #define    FI_DSCRDBREAK    0x100 #define    FI_1MARKBREAK    0x200 #define    FI_2MARKBREAK    0x400 #define    FI_XCHNGBREAK    0x800 #define    FI_IGNRXERRS    0x1000 #define    FI_DSCDRXERRS    0x2000 #define    FI_1MARKRXERRS    0x4000 #define    FI_2MARKRXERRS    0x8000 #define    FI_XCHNGRXERRS    0x10000 #define    FI_DSCRDNULL    0x20000
  #define    FO_OLCUC    0x1 #define    FO_ONLCR    0x2 #define    FO_OOCRNL    0x4 #define    FO_ONOCR    0x8 #define    FO_ONLRET    0x10 #define    FO_ONL        0x20 #define    FO_OBS        0x40 #define    FO_OVT        0x80 #define    FO_OFF        0x100 #define    FO_OTAB1    0x200 #define    FO_OTAB2    0x400 #define    FO_OTAB3    0x800 #define    FO_OCR1        0x1000 #define    FO_OCR2        0x2000 #define    FO_OCR3        0x4000 #define    FO_OFILL    0x8000 #define    FO_ODELL    0x10000
  #define    P_RTSLOCK    0x1 #define    P_CTSLOCK    0x2 #define    P_MAPRTS    0x4 #define    P_MAPCTS    0x8 #define    P_LOOPBACK    0x10 #define    P_DTRFOLLOW    0x20 #define    P_FAKEDCD    0x40
  #define    P_RXIMIN    0x10000 #define    P_RXITIME    0x20000 #define    P_RXTHOLD    0x40000
  /*  *    Define a structure to communicate serial port signal and data state  *    information.  */ typedef struct asysigs {     unsigned long    data;     unsigned long    signal;     unsigned long    sigvalue; } asysigs_t;
  #define    DT_TXBUSY    0x1 #define    DT_TXEMPTY    0x2 #define    DT_TXLOW    0x4 #define    DT_TXHIGH    0x8 #define    DT_TXFULL    0x10 #define    DT_TXHOG    0x20 #define    DT_TXFLOWED    0x40 #define    DT_TXBREAK    0x80
  #define    DT_RXBUSY    0x100 #define    DT_RXEMPTY    0x200 #define    DT_RXLOW    0x400 #define    DT_RXHIGH    0x800 #define    DT_RXFULL    0x1000 #define    DT_RXHOG    0x2000 #define    DT_RXFLOWED    0x4000 #define    DT_RXBREAK    0x8000
  #define    SG_DTR        0x1 #define    SG_DCD        0x2 #define    SG_RTS        0x4 #define    SG_CTS        0x8 #define    SG_DSR        0x10 #define    SG_RI        0x20
  /*  *    Define the notification setting structure. This is used to tell the  *    port what events we want to be informed about. Fields here use the  *    same defines as for the asysigs structure above.  */ typedef struct asynotify {     unsigned long    ctrl;     unsigned long    data;     unsigned long    signal;     unsigned long    sigvalue; } asynotify_t;
  /*  *    Define the port control structure. It is used to do fine grain  *    control operations on the port.  */ typedef struct {     unsigned long    rxctrl;     unsigned long    txctrl;     char        rximdch;     char        tximdch;     char        spare1;     char        spare2; } asyctrl_t;
  #define    CT_ENABLE    0x1 #define    CT_DISABLE    0x2 #define    CT_STOP        0x4 #define    CT_START    0x8 #define    CT_STARTFLOW    0x10 #define    CT_STOPFLOW    0x20 #define    CT_SENDCHR    0x40
  /*  *    Define the stats structure kept for each port. This is a useful set  *    of data collected for each port on the slave. The A_GETSTATS command  *    is used to retrieve this data from the slave.  */ typedef struct asystats {     unsigned long    opens;     unsigned long    txchars;     unsigned long    rxchars;     unsigned long    txringq;     unsigned long    rxringq;     unsigned long    txmsgs;     unsigned long    rxmsgs;     unsigned long    txflushes;     unsigned long    rxflushes;     unsigned long    overruns;     unsigned long    framing;     unsigned long    parity;     unsigned long    ringover;     unsigned long    lost;     unsigned long    rxstart;     unsigned long    rxstop;     unsigned long    txstart;     unsigned long    txstop;     unsigned long    dcdcnt;     unsigned long    dtrcnt;     unsigned long    ctscnt;     unsigned long    rtscnt;     unsigned long    dsrcnt;     unsigned long    ricnt;     unsigned long    txbreaks;     unsigned long    rxbreaks;     unsigned long    signals;     unsigned long    state;     unsigned long    hwid; } asystats_t;
  /*****************************************************************************/
  /*  *    All command and control communication with a device on the slave is  *    via a control block in shared memory. Each device has its own control  *    block, defined by the following structure. The control block allows  *    the host to open, close and control the device on the slave.  */ typedef struct cdkctrl {     unsigned char    open;     unsigned char    close;     unsigned long    openarg;     unsigned long    closearg;     unsigned long    cmd;     unsigned long    status;     unsigned long    args[32]; } cdkctrl_t;
  /*  *    Each device on the slave passes data to and from the host via a ring  *    queue in shared memory. Define a ring queue structure to hold the  *    vital information about each ring queue. Two ring queues will be  *    allocated for each port, one for receive data and one for transmit  *    data.  */ typedef struct cdkasyrq {     unsigned long    offset;     unsigned short    size;     unsigned short    head;     unsigned short    tail; } cdkasyrq_t;
  /*  *    Each asynchronous port is defined in shared memory by the following  *    structure. It contains a control block to command a device, and also  *    the necessary data channel information as well.  */ typedef struct cdkasy {     cdkctrl_t    ctrl;     unsigned short    notify;     asynotify_t    changed;     unsigned short    receive;     cdkasyrq_t    rxq;     unsigned short    transmit;     cdkasyrq_t    txq; } cdkasy_t;
  #pragma    pack()
  /*****************************************************************************/
  /*  *    Define the set of ioctls used by the driver to do special things  *    to the board. These include interrupting it, and initializing  *    the driver after board startup and shutdown.  */ #include <linux/ioctl.h>
  #define    STL_BINTR    _IO('s',20) #define    STL_BSTART    _IO('s',21) #define    STL_BSTOP    _IO('s',22) #define    STL_BRESET    _IO('s',23)
  /*  *    Define a set of ioctl extensions, used to get at special stuff.  */ #define    STL_GETPFLAG    _IO('s',80) #define    STL_SETPFLAG    _IO('s',81)
  /*****************************************************************************/ #endif 
  |