OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [linux/] [linux-2.4/] [drivers/] [char/] [rio/] [port.h] - Blame information for rev 1275

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
/*
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
37
static 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
49
struct 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
*/
94
struct  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
 
229
struct 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
*/
240
struct PortParams {
241
        uint    Port;
242
        ulong   Config;
243
        ulong   State;
244
        struct ttystatics       *TtyP;
245
};

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.