linux-old/drivers/char/rio/port.h
<<
>>
Prefs
   1/*
   2** -----------------------------------------------------------------------------
   3**
   4**  Perle Specialix driver for Linux
   5**  Ported from existing RIO Driver for SCO sources.
   6 *
   7 *  (C) 1990 - 2000 Specialix International Ltd., Byfleet, Surrey, UK.
   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**      Module          : port.h
  24**      SID             : 1.3
  25**      Last Modified   : 11/6/98 11:34:12
  26**      Retrieved       : 11/6/98 11:34:21
  27**
  28**  ident @(#)port.h    1.3
  29**
  30** -----------------------------------------------------------------------------
  31*/
  32
  33#ifndef __rio_port_h__
  34#define __rio_port_h__
  35
  36#ifdef SCCS_LABELS
  37static char *_port_h_sccs_ = "@(#)port.h        1.3";
  38#endif
  39
  40
  41#undef VPIX
  42
  43
  44/*
  45** the port data structure - one per port in the system
  46*/
  47
  48#ifdef STATS
  49struct RIOStats
  50{
  51        /*
  52        ** interrupt statistics
  53        */
  54        uint    BreakIntCnt;
  55        uint    ModemOffCnt;
  56        uint    ModemOnCnt;
  57        uint    RxIntCnt;
  58        uint    TxIntCnt;
  59        /*
  60        ** throughput statistics
  61        */
  62        uint    RxCharCnt;
  63        uint    RxPktCnt;
  64        uint    RxSaveCnt;
  65        uint    TxCharCnt;
  66        uint    TxPktCnt;
  67        /*
  68        ** driver entry statistics
  69        */
  70        uint    CloseCnt;
  71        uint    IoctlCnt;
  72        uint    OpenCnt;
  73        uint    ReadCnt;
  74        uint    WriteCnt;
  75        /*
  76        ** proc statistics
  77        */
  78        uint    BlockCnt;
  79        uint    OutputCnt;
  80        uint    ResumeCnt;
  81        uint    RflushCnt;
  82        uint    SuspendCnt;
  83        uint    TbreakCnt;
  84        uint    TimeoutCnt;
  85        uint    UnblockCnt;
  86        uint    WflushCnt;
  87        uint    WFBodgeCnt;
  88};
  89#endif
  90
  91/*
  92**      Port data structure
  93*/
  94struct  Port
  95{
  96  struct gs_port gs; 
  97  int                           PortNum;        /* RIO port no., 0-511 */
  98  struct Host   *HostP;
  99  volatile caddr_t              Caddr;
 100  ushort                        HostPort;  /* Port number on host card */
 101  uchar                 RupNum; /* Number of RUP for port */
 102  uchar                 ID2;    /* Second ID of RTA for port */
 103  ulong                 State;  /* FLAGS for open & xopen */
 104#define RIO_LOPEN       0x00001         /* Local open */
 105#define RIO_MOPEN       0x00002         /* Modem open */
 106#define RIO_WOPEN       0x00004         /* Waiting for open */
 107#define RIO_CLOSING     0x00008         /* The port is being close */
 108#define RIO_XPBUSY      0x00010         /* Transparent printer busy */
 109#define RIO_BREAKING    0x00020         /* Break in progress */
 110#define RIO_DIRECT      0x00040         /* Doing Direct output */
 111#define RIO_EXCLUSIVE   0x00080         /* Stream open for exclusive use */
 112#define RIO_NDELAY      0x00100         /* Stream is open FNDELAY */
 113#define RIO_CARR_ON     0x00200         /* Stream has carrier present */
 114#define RIO_XPWANTR     0x00400         /* Stream wanted by Xprint */
 115#define RIO_RBLK        0x00800         /* Stream is read-blocked */
 116#define RIO_BUSY        0x01000         /* Stream is BUSY for write */
 117#define RIO_TIMEOUT     0x02000         /* Stream timeout in progress */
 118#define RIO_TXSTOP      0x04000         /* Stream output is stopped */
 119#define RIO_WAITFLUSH   0x08000         /* Stream waiting for flush */
 120#define RIO_DYNOROD     0x10000         /* Drain failed */
 121#define RIO_DELETED     0x20000         /* RTA has been deleted */
 122#define RIO_ISSCANCODE  0x40000         /* This line is in scancode mode */
 123#define RIO_USING_EUC   0x100000        /* Using extended Unix chars */
 124#define RIO_CAN_COOK    0x200000        /* This line can do cooking */
 125#define RIO_TRIAD_MODE  0x400000        /* Enable TRIAD special ops. */
 126#define RIO_TRIAD_BLOCK 0x800000        /* Next read will block */
 127#define RIO_TRIAD_FUNC  0x1000000       /* Seen a function key coming in */
 128#define RIO_THROTTLE_RX 0x2000000       /* RX needs to be throttled. */
 129
 130    ulong                       Config; /* FLAGS for NOREAD.... */
 131#define RIO_NOREAD      0x0001          /* Are not allowed to read port */
 132#define RIO_NOWRITE     0x0002          /* Are not allowed to write port */
 133#define RIO_NOXPRINT    0x0004          /* Are not allowed to xprint port */
 134#define RIO_NOMASK      0x0007          /* All not allowed things */
 135#define RIO_IXANY       0x0008          /* Port is allowed ixany */
 136#define RIO_MODEM       0x0010          /* Stream is a modem device */
 137#define RIO_IXON        0x0020          /* Port is allowed ixon */
 138#define RIO_WAITDRAIN   0x0040          /* Wait for port to completely drain */
 139#define RIO_MAP_50_TO_50        0x0080  /* Map 50 baud to 50 baud */
 140#define RIO_MAP_110_TO_110      0x0100  /* Map 110 baud to 110 baud */
 141
 142/*
 143** 15.10.1998 ARG - ESIL 0761 prt fix
 144** As LynxOS does not appear to support Hardware Flow Control .....
 145** Define our own flow control flags in 'Config'.
 146*/
 147#define RIO_CTSFLOW     0x0200          /* RIO's own CTSFLOW flag */
 148#define RIO_RTSFLOW     0x0400          /* RIO's own RTSFLOW flag */
 149
 150
 151    struct PHB                  *PhbP;    /* pointer to PHB for port */
 152    WORD                        *TxAdd;   /* Add packets here */
 153    WORD                        *TxStart; /* Start of add array */
 154    WORD                        *TxEnd;         /* End of add array */
 155    WORD                        *RxRemove;      /* Remove packets here */
 156    WORD                        *RxStart;       /* Start of remove array */
 157    WORD                        *RxEnd;         /* End of remove array */
 158    uint                        RtaUniqueNum;   /* Unique number of RTA */
 159    ushort                      PortState;      /* status of port */
 160    ushort                      ModemState;     /* status of modem lines */
 161    ulong                       ModemLines;     /* Modem bits sent to RTA */
 162    uchar                       CookMode;       /* who expands CR/LF? */
 163    uchar                       ParamSem;       /* Prevent write during param */
 164    uchar                       Mapped;         /* if port mapped onto host */
 165    uchar                       SecondBlock;    /* if port belongs to 2nd block
 166                                                   of 16 port RTA */
 167    uchar                       InUse;          /* how many pre-emptive cmds */
 168    uchar                       Lock;           /* if params locked */
 169    uchar                       Store;  /* if params stored across closes */
 170    uchar                       FirstOpen; /* TRUE if first time port opened */
 171    uchar                       FlushCmdBodge;  /* if doing a (non)flush */
 172    uchar                       MagicFlags;     /* require intr processing */
 173#define MAGIC_FLUSH     0x01    /* mirror of WflushFlag */
 174#define MAGIC_REBOOT    0x02    /* RTA re-booted, re-open ports */
 175#define MORE_OUTPUT_EYGOR 0x04  /* riotproc failed to empty clists */
 176    uchar                       WflushFlag;     /* 1 How many WFLUSHs active */
 177/*
 178** Transparent print stuff
 179*/
 180    struct Xprint
 181    {
 182#ifndef MAX_XP_CTRL_LEN
 183#define MAX_XP_CTRL_LEN         16              /* ALSO IN DAEMON.H */
 184#endif
 185        uint                    XpCps;
 186        char                    XpOn[MAX_XP_CTRL_LEN];
 187        char                    XpOff[MAX_XP_CTRL_LEN];
 188        ushort                  XpLen;          /* strlen(XpOn)+strlen(XpOff) */
 189        uchar                   XpActive;
 190        uchar                   XpLastTickOk;   /* TRUE if we can process */
 191#define XP_OPEN         00001
 192#define XP_RUNABLE      00002
 193        struct ttystatics               *XttyP;
 194    } Xprint;
 195#ifdef VPIX
 196    v86_t                       *StashP;
 197    uint                        IntMask;
 198    struct termss               VpixSs;
 199    uchar                       ModemStatusReg; /* Modem status register */
 200#endif
 201    uchar                       RxDataStart;
 202    uchar                       Cor2Copy;       /* copy of COR2 */
 203    char                        *Name;          /* points to the Rta's name */
 204#ifdef STATS
 205    struct RIOStats             Stat;           /* ports statistics */
 206#endif
 207    char                        *TxRingBuffer;
 208    ushort                      TxBufferIn;     /* New data arrives here */
 209    ushort                      TxBufferOut;    /* Intr removes data here */
 210    ushort                      OldTxBufferOut; /* Indicates if draining */
 211    int                         TimeoutId;      /* Timeout ID */
 212    uint                        Debug;
 213    uchar                       WaitUntilBooted; /* True if open should block */
 214    uint                        statsGather;    /* True if gathering stats */
 215    ulong                       txchars;        /* Chars transmitted */
 216    ulong                       rxchars;        /* Chars received */
 217    ulong                       opens;          /* port open count */
 218    ulong                       closes;         /* port close count */
 219    ulong                       ioctls;         /* ioctl count */
 220    uchar                       LastRxTgl;      /* Last state of rx toggle bit */
 221  spinlock_t                            portSem;        /* Lock using this sem */
 222        int                             MonitorTstate;  /* Monitoring ? */
 223        int                             timeout_id;     /* For calling 100 ms delays */
 224        int                             timeout_sem;/* For calling 100 ms delays */
 225        int                             firstOpen;      /* First time open ? */
 226        char *                  p;                      /* save the global struc here .. */
 227};
 228
 229struct ModuleInfo
 230{
 231        char    *Name;
 232        uint    Flags[4];       /* one per port on a module */
 233};
 234#endif
 235
 236/*
 237** This struct is required because trying to grab an entire Port structure
 238** runs into problems with differing struct sizes between driver and config.
 239*/
 240struct PortParams {
 241        uint    Port;
 242        ulong   Config;
 243        ulong   State;
 244        struct ttystatics       *TtyP;
 245};
 246
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.