]> Pileus Git - ~andy/linux/blob - drivers/staging/dgrp/drp.h
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/ide
[~andy/linux] / drivers / staging / dgrp / drp.h
1 /*
2  *
3  * Copyright 1999 Digi International (www.digi.com)
4  *     Gene Olson  <gene at digi dot com>
5  *     James Puzzo <jamesp at digi dot com>
6  *     Scott Kilau <scottk at digi dot com>
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2, or (at your option)
11  * any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED; without even the
15  * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
16  * PURPOSE.  See the GNU General Public License for more details.
17  *
18  */
19
20 /************************************************************************
21  * Master include file for Linux Realport Driver.
22  ************************************************************************/
23
24 #ifndef __DRP_H
25 #define __DRP_H
26
27 #include <linux/types.h>
28 #include <linux/wait.h>
29 #include <linux/semaphore.h>
30 #include <linux/tty.h>
31
32
33 #include "digirp.h"
34
35 /************************************************************************
36  * Tuning parameters.
37  ************************************************************************/
38
39 #define CHAN_MAX        64              /* Max # ports per server */
40
41 #define SEQ_MAX         128             /* Max # transmit sequences (2^n) */
42 #define SEQ_MASK        (SEQ_MAX-1)     /* Sequence buffer modulus mask */
43
44 #define TBUF_MAX        4096            /* Size of transmit buffer (2^n) */
45 #define RBUF_MAX        4096            /* Size of receive buffer (2^n) */
46
47 #define TBUF_MASK       (TBUF_MAX-1)    /* Transmit buffer modulus mask */
48 #define RBUF_MASK       (RBUF_MAX-1)    /* Receive buffer modulus mask */
49
50 #define TBUF_LOW        1000            /* Transmit low water mark */
51
52 #define UIO_BASE        1000            /* Base for write operations */
53 #define UIO_MIN         2000            /* Minimum size application buffer */
54 #define UIO_MAX         8100            /* Unix I/O buffer size */
55
56 #define MON_MAX         65536           /* Monitor buffer size (2^n) */
57 #define MON_MASK        (MON_MAX-1)     /* Monitor wrap mask */
58
59 #define DPA_MAX         65536           /* DPA buffer size (2^n) */
60 #define DPA_MASK        (DPA_MAX-1)     /* DPA wrap mask */
61 #define DPA_HIGH_WATER  58000           /* Enforce flow control when
62                                          * over this amount
63                                          */
64
65 #define IDLE_MAX        (20 * HZ)       /* Max TCP link idle time */
66
67 #define MAX_DESC_LEN    100             /* Maximum length of stored PS
68                                          * description
69                                          */
70
71 #define WRITEBUFLEN     ((4096) + 4)    /* 4 extra for alignment play space */
72
73 #define VPDSIZE         512
74
75 /************************************************************************
76  * Minor device decoding conventions.
77  ************************************************************************
78  *
79  * For Linux, the net and mon devices are handled via "proc", so we
80  * only have to mux the "tty" devices.  Since every PortServer will
81  * have an individual major number, the PortServer number does not
82  * need to be encoded, and in fact, does not need to exist.
83  *
84  */
85
86 /*
87  * Port device decoding conventions:
88  *
89  *      Device 00 - 3f        64 dial-in modem devices. (tty)
90  *      Device 40 - 7f        64 dial-out tty devices.  (cu)
91  *      Device 80 - bf        64 dial-out printer devices.
92  *
93  *  IS_PRINT(dev)               This is a printer device.
94  *
95  *  OPEN_CATEGORY(dev)          Specifies the device category.  No two
96  *                              devices of different categories may be open
97  *                              at the same time.
98  *
99  * The following require the category returned by OPEN_CATEGORY().
100  *
101  *  OPEN_WAIT_AVAIL(cat)        Waits on open until the device becomes
102  *                              available.  Fails if NDELAY specified.
103  *
104  *  OPEN_WAIT_CARRIER(cat)      Waits on open if carrier is not present.
105  *                              Succeeds if NDELAY is given.
106  *
107  *  OPEN_FORCES_CARRIER(cat)    Carrier is forced high on open.
108  *
109  */
110
111 #define PORT_NUM(dev)                   ((dev) & 0x3f)
112
113 #define OPEN_CATEGORY(dev)              ((((dev) & 0x80) & 0x40))
114 #define IS_PRINT(dev)                   (((dev) & 0xff) >= 0x80)
115
116 #define OPEN_WAIT_AVAIL(cat)            (((cat) & 0x40) == 0x000)
117 #define OPEN_WAIT_CARRIER(cat)          (((cat) & 0x40) == 0x000)
118 #define OPEN_FORCES_CARRIER(cat)        (((cat) & 0x40) != 0x000)
119
120
121 /************************************************************************
122  * Modem signal defines for 16450/16550 compatible FEP.
123  * set in ch_mout, ch_mflow, ch_mlast etc
124  ************************************************************************/
125
126 /* TODO : Re-verify that these modem signal definitions are correct */
127
128 #define DM_DTR          0x01
129 #define DM_RTS          0x02
130 #define DM_RTS_TOGGLE   0x04
131
132 #define DM_OUT1         0x04
133 #define DM_OUT2         0x08
134
135 #define DM_CTS          0x10
136 #define DM_DSR          0x20
137 #define DM_RI           0x40
138 #define DM_CD           0x80            /* This is the DCD flag */
139
140
141 /************************************************************************
142  * Realport Event Flags.
143  ************************************************************************/
144
145 #define EV_OPU          0x0001          /* Ouput paused by client */
146 #define EV_OPS          0x0002          /* Output paused by XOFF */
147 #define EV_OPX          0x0004          /* Output paused by XXOFF */
148 #define EV_OPH          0x0008          /* Output paused by MFLOW */
149 #define EV_IPU          0x0010          /* Input paused by client */
150 #define EV_IPS          0x0020          /* Input paused by hi/low water */
151 #define EV_TXB          0x0040          /* Transmit break pending */
152 #define EV_TXI          0x0080          /* Transmit immediate pending */
153 #define EV_TXF          0x0100          /* Transmit flow control pending */
154 #define EV_RXB          0x0200          /* Break received */
155
156
157 /************************************************************************
158  * Realport CFLAGS.
159  ************************************************************************/
160
161 #define CF_CS5          0x0000          /* 5 bit characters */
162 #define CF_CS6          0x0010          /* 6 bit characters */
163 #define CF_CS7          0x0020          /* 7 bit characters */
164 #define CF_CS8          0x0030          /* 8 bit characters */
165 #define CF_CSIZE        0x0030          /* Character size */
166 #define CF_CSTOPB       0x0040          /* Two stop bits */
167 #define CF_CREAD        0x0080          /* Enable receiver */
168 #define CF_PARENB       0x0100          /* Enable parity */
169 #define CF_PARODD       0x0200          /* Odd parity */
170 #define CF_HUPCL        0x0400          /* Drop DTR on close */
171
172
173 /************************************************************************
174  * Realport XFLAGS.
175  ************************************************************************/
176
177 #define XF_XPAR         0x0001          /* Enable Mark/Space Parity */
178 #define XF_XMODEM       0x0002          /* Enable in-band modem signalling */
179 #define XF_XCASE        0x0004          /* Convert special characters */
180 #define XF_XEDATA       0x0008          /* Error data in stream */
181 #define XF_XTOSS        0x0010          /* Toss IXANY characters */
182 #define XF_XIXON        0x0020          /* xxon/xxoff enable */
183
184
185 /************************************************************************
186  * Realport IFLAGS.
187  ************************************************************************/
188
189 #define IF_IGNBRK       0x0001          /* Ignore input break */
190 #define IF_BRKINT       0x0002          /* Break interrupt */
191 #define IF_IGNPAR       0x0004          /* Ignore error characters */
192 #define IF_PARMRK       0x0008          /* Error chars marked with 0xff */
193 #define IF_INPCK        0x0010          /* Input parity checking enabled */
194 #define IF_ISTRIP       0x0020          /* Input chars masked with 0x7F */
195 #define IF_IXON         0x0400          /* Output software flow control */
196 #define IF_IXANY        0x0800          /* Restart output on any char */
197 #define IF_IXOFF        0x1000          /* Input software flow control */
198 #define IF_DOSMODE      0x8000          /* 16450-compatible errors */
199
200
201 /************************************************************************
202  * Realport OFLAGS.
203  ************************************************************************/
204
205 #define OF_OLCUC        0x0002          /* Map lower to upper case */
206 #define OF_ONLCR        0x0004          /* Map NL to CR-NL */
207 #define OF_OCRNL        0x0008          /* Map CR to NL */
208 #define OF_ONOCR        0x0010          /* No CR output at column 0 */
209 #define OF_ONLRET       0x0020          /* Assume NL does NL/CR */
210 #define OF_TAB3         0x1800          /* Tabs expand to 8 spaces */
211 #define OF_TABDLY       0x1800          /* Tab delay */
212
213 /************************************************************************
214  * Unit flag definitions for un_flag.
215  ************************************************************************/
216
217 /* These are the DIGI unit flags */
218 #define UN_EXCL         0x00010000      /* Exclusive open */
219 #define UN_STICKY       0x00020000      /* TTY Settings are now sticky */
220 #define UN_BUSY         0x00040000      /* Some work this channel */
221 #define UN_PWAIT        0x00080000      /* Printer waiting for terminal */
222 #define UN_TIME         0x00100000      /* Waiting on time */
223 #define UN_EMPTY        0x00200000      /* Waiting output queue empty */
224 #define UN_LOW          0x00400000      /* Waiting output low water */
225 #define UN_DIGI_MASK    0x00FF0000      /* Waiting output low water */
226
227 /*
228  * Definitions for async_struct (and serial_struct) flags field
229  *
230  * these are the ASYNC flags copied from serial.h
231  *
232  */
233 #define UN_HUP_NOTIFY   0x0001 /* Notify getty on hangups and
234                                 * closes on the callout port
235                                 */
236 #define UN_FOURPORT     0x0002  /* Set OU1, OUT2 per AST Fourport settings */
237 #define UN_SAK          0x0004  /* Secure Attention Key (Orange book) */
238 #define UN_SPLIT_TERMIOS 0x0008 /* Separate termios for dialin/callout */
239
240 #define UN_SPD_MASK     0x0030
241 #define UN_SPD_HI       0x0010  /* Use 56000 instead of 38400 bps */
242 #define UN_SPD_VHI      0x0020  /* Use 115200 instead of 38400 bps */
243 #define UN_SPD_CUST     0x0030  /* Use user-specified divisor */
244
245 #define UN_SKIP_TEST    0x0040 /* Skip UART test during autoconfiguration */
246 #define UN_AUTO_IRQ     0x0080 /* Do automatic IRQ during autoconfiguration */
247
248 #define UN_SESSION_LOCKOUT 0x0100 /* Lock out cua opens based on session */
249 #define UN_PGRP_LOCKOUT    0x0200 /* Lock out cua opens based on pgrp */
250 #define UN_CALLOUT_NOHUP   0x0400 /* Don't do hangups for cua device */
251
252 #define UN_FLAGS        0x0FFF  /* Possible legal async flags */
253 #define UN_USR_MASK     0x0430  /* Legal flags that non-privileged
254                                  * users can set or reset
255                                  */
256
257 #define UN_INITIALIZED          0x80000000 /* Serial port was initialized */
258 #define UN_CALLOUT_ACTIVE       0x40000000 /* Call out device is active */
259 #define UN_NORMAL_ACTIVE        0x20000000 /* Normal device is active */
260 #define UN_BOOT_AUTOCONF        0x10000000 /* Autoconfigure port on bootup */
261 #define UN_CLOSING              0x08000000 /* Serial port is closing */
262 #define UN_CTS_FLOW             0x04000000 /* Do CTS flow control */
263 #define UN_CHECK_CD             0x02000000 /* i.e., CLOCAL */
264 #define UN_SHARE_IRQ            0x01000000 /* for multifunction cards */
265
266
267 /************************************************************************
268  * Structure for terminal or printer unit.  struct un_struct
269  *
270  * Note that in some places the code assumes the "tty_t" is placed
271  * first in the structure.
272  ************************************************************************/
273
274 struct un_struct {
275         struct tty_struct *un_tty;              /* System TTY struct */
276         struct ch_struct *un_ch;                /* Associated channel */
277
278         ushort     un_open_count;               /* Successful open count */
279         int             un_flag;                /* Unit flags */
280         ushort     un_tbusy;            /* Busy transmit count */
281
282         wait_queue_head_t  un_open_wait;
283         wait_queue_head_t  un_close_wait;
284         ushort  un_type;
285         struct device *un_sysfs;
286 };
287
288
289 /************************************************************************
290  * Channel State Numbers for ch_state.
291  ************************************************************************/
292
293 /*
294  * The ordering is important.
295  *
296  *    state <= CS_WAIT_CANCEL implies the channel is definitely closed.
297  *
298  *    state >= CS_WAIT_FAIL  implies the channel is definitely open.
299  *
300  *    state >= CS_READY implies data is allowed on the channel.
301  */
302
303 enum dgrp_ch_state_t {
304         CS_IDLE = 0,        /* Channel is idle */
305         CS_WAIT_OPEN = 1,   /* Waiting for Immediate Open Resp */
306         CS_WAIT_CANCEL = 2, /* Waiting for Per/Incom Cancel Resp */
307         CS_WAIT_FAIL = 3,   /* Waiting for Immed Open Failure */
308         CS_SEND_QUERY = 4,  /* Ready to send Port Query */
309         CS_WAIT_QUERY = 5,  /* Waiting for Port Query Response */
310         CS_READY = 6,       /* Ready to accept commands and data */
311         CS_SEND_CLOSE = 7,  /* Ready to send Close Request */
312         CS_WAIT_CLOSE = 8   /* Waiting for Close Response */
313 };
314
315 /************************************************************************
316  * Device flag definitions for ch_flag.
317  ************************************************************************/
318
319 /*
320  *  Note that the state of the two carrier based flags is key.  When
321  *  we check for carrier state transitions, we look at the current
322  *  physical state of the DCD line and compare it with PHYS_CD (which
323  *  was the state the last time we checked), and we also determine
324  *  a new virtual state (composite of the physical state, FORCEDCD,
325  *  CLOCAL, etc.) and compare it with VIRT_CD.
326  *
327  *  VIRTUAL transitions high will have the side effect of waking blocked
328  *  opens.
329  *
330  *  PHYSICAL transitions low will cause hangups to occur _IF_ the virtual
331  *  state is also low.  We DON'T want to hangup on a PURE virtual drop.
332  */
333
334 #define CH_HANGUP       0x00002         /* Server port ready to close */
335
336 #define CH_VIRT_CD      0x00004         /* Carrier was virtually present */
337 #define CH_PHYS_CD      0x00008         /* Carrier was physically present */
338
339 #define CH_CLOCAL       0x00010         /* CLOCAL set in cflags */
340 #define CH_BAUD0        0x00020         /* Baud rate zero hangup */
341
342 #define CH_FAST_READ    0x00040         /* Fast reads are enabled */
343 #define CH_FAST_WRITE   0x00080         /* Fast writes are enabled */
344
345 #define CH_PRON         0x00100         /* Printer on string active */
346 #define CH_RX_FLUSH     0x00200         /* Flushing receive data */
347 #define CH_LOW          0x00400         /* Thread waiting for LOW water */
348 #define CH_EMPTY        0x00800         /* Thread waiting for EMPTY */
349 #define CH_DRAIN        0x01000         /* Close is waiting to drain */
350 #define CH_INPUT        0x02000         /* Thread waiting for INPUT */
351 #define CH_RXSTOP       0x04000         /* Stop output to ldisc */
352 #define CH_PARAM        0x08000         /* A parameter was updated */
353 #define CH_WAITING_SYNC 0x10000         /* A pending sync was assigned
354                                          * to this port.
355                                          */
356 #define CH_PORT_GONE    0x20000         /* Port has disappeared */
357 #define CH_TX_BREAK     0x40000         /* TX Break to be sent,
358                                          * but has not yet.
359                                          */
360
361 /************************************************************************
362  * Types of Open Requests for ch_otype.
363  ************************************************************************/
364
365 #define OTYPE_IMMEDIATE   0             /* Immediate Open */
366 #define OTYPE_PERSISTENT  1             /* Persistent Open */
367 #define OTYPE_INCOMING    2             /* Incoming Open */
368
369
370 /************************************************************************
371  * Request/Response flags.
372  ************************************************************************/
373
374 #define RR_SEQUENCE     0x0001          /* Get server RLAST, TIN */
375 #define RR_STATUS       0x0002          /* Get server MINT, EINT */
376 #define RR_BUFFER       0x0004          /* Get server RSIZE, TSIZE */
377 #define RR_CAPABILITY   0x0008          /* Get server port capabilities */
378
379 #define RR_TX_FLUSH     0x0040          /* Flush output buffers */
380 #define RR_RX_FLUSH     0x0080          /* Flush input buffers */
381
382 #define RR_TX_STOP      0x0100          /* Pause output */
383 #define RR_RX_STOP      0x0200          /* Pause input */
384 #define RR_TX_START     0x0400          /* Start output */
385 #define RR_RX_START     0x0800          /* Start input */
386
387 #define RR_TX_BREAK     0x1000          /* Send BREAK */
388 #define RR_TX_ICHAR     0x2000          /* Send character immediate */
389
390
391 /************************************************************************
392  * Channel information structure.   struct ch_struct
393  ************************************************************************/
394
395 struct ch_struct {
396         struct digi_struct ch_digi;             /* Digi variables */
397         int     ch_edelay;              /* Digi edelay */
398
399         struct tty_port port;
400         struct un_struct ch_tun;        /* Terminal unit info */
401         struct un_struct ch_pun;        /* Printer unit info */
402
403         struct nd_struct *ch_nd;        /* Node pointer */
404         u8  *ch_tbuf;           /* Local Transmit Buffer */
405         u8  *ch_rbuf;           /* Local Receive Buffer */
406         ulong   ch_cpstime;             /* Printer CPS time */
407         ulong   ch_waketime;            /* Printer wake time */
408
409         ulong   ch_flag;                /* CH_* flags */
410
411         enum dgrp_ch_state_t ch_state;          /* CS_* Protocol state */
412         ushort  ch_send;                /* Bit vector of RR_* requests */
413         ushort  ch_expect;              /* Bit vector of RR_* responses */
414         ushort  ch_wait_carrier;        /* Thread count waiting for carrier */
415         ushort  ch_wait_count[3];       /* Thread count waiting by otype */
416
417         ushort  ch_portnum;             /* Port number */
418         ushort  ch_open_count;          /* Successful open count */
419         ushort  ch_category;            /* Device category */
420         ushort  ch_open_error;          /* Last open error number */
421         ushort  ch_break_time;          /* Pending break request time */
422         ushort  ch_cpsrem;              /* Printer CPS remainder */
423         ushort  ch_ocook;               /* Realport fastcook oflags */
424         ushort  ch_inwait;              /* Thread count in CLIST input */
425
426         ushort  ch_tin;                 /* Local transmit buffer in ptr */
427         ushort  ch_tout;                /* Local transmit buffer out ptr */
428         ushort  ch_s_tin;               /* Realport TIN */
429         ushort  ch_s_tpos;              /* Realport TPOS */
430         ushort  ch_s_tsize;             /* Realport TSIZE */
431         ushort  ch_s_treq;              /* Realport TREQ */
432         ushort  ch_s_elast;             /* Realport ELAST */
433
434         ushort  ch_rin;                 /* Local receive buffer in ptr */
435         ushort  ch_rout;                /* Local receive buffer out ptr */
436         ushort  ch_s_rin;               /* Realport RIN */
437         /* David Fries 7-13-2001, ch_s_rin should be renamed ch_s_rout because
438          * the variable we want to represent is the PortServer's ROUT, which is
439          * the sequence number for the next byte the PortServer will send us.
440          * RIN is the sequence number for the next byte the PortServer will
441          * receive from the uart.  The port server will send data as long as
442          * ROUT is less than RWIN.  What would happen is the port is opened, it
443          * receives data, it gives the value of RIN, we set the RWIN to
444          * RIN+RBUF_MAX-1, it sends us RWIN-ROUT bytes which overflows.  ROUT
445          * is set to zero when the port is opened, so we start at zero and
446          * count up as data is received.
447          */
448         ushort  ch_s_rwin;              /* Realport RWIN */
449         ushort  ch_s_rsize;             /* Realport RSIZE */
450
451         ushort  ch_tmax;                /* Local TMAX */
452         ushort  ch_ttime;               /* Local TTIME */
453         ushort  ch_rmax;                /* Local RMAX */
454         ushort  ch_rtime;               /* Local RTIME */
455         ushort  ch_rlow;                /* Local RLOW */
456         ushort  ch_rhigh;               /* Local RHIGH */
457
458         ushort  ch_s_tmax;              /* Realport TMAX */
459         ushort  ch_s_ttime;             /* Realport TTIME */
460         ushort  ch_s_rmax;              /* Realport RMAX */
461         ushort  ch_s_rtime;             /* Realport RTIME */
462         ushort  ch_s_rlow;              /* Realport RLOW */
463         ushort  ch_s_rhigh;             /* Realport RHIGH */
464
465         ushort  ch_brate;               /* Local baud rate */
466         ushort  ch_cflag;               /* Local tty cflags */
467         ushort  ch_iflag;               /* Local tty iflags */
468         ushort  ch_oflag;               /* Local tty oflags */
469         ushort  ch_xflag;               /* Local tty xflags */
470
471         ushort  ch_s_brate;             /* Realport BRATE */
472         ushort  ch_s_cflag;             /* Realport CFLAG */
473         ushort  ch_s_iflag;             /* Realport IFLAG */
474         ushort  ch_s_oflag;             /* Realport OFLAG */
475         ushort  ch_s_xflag;             /* Realport XFLAG */
476
477         u8      ch_otype;               /* Open request type */
478         u8      ch_pscan_savechar;      /* Last character read by parity scan */
479         u8      ch_pscan_state;         /* PScan State based on last 2 chars */
480         u8      ch_otype_waiting;       /* Type of open pending in server */
481         u8      ch_flush_seq;           /* Receive flush end sequence */
482         u8      ch_s_mlast;             /* Realport MLAST */
483
484         u8      ch_mout;                /* Local MOUT */
485         u8      ch_mflow;               /* Local MFLOW */
486         u8      ch_mctrl;               /* Local MCTRL */
487         u8      ch_xon;                 /* Local XON */
488         u8      ch_xoff;                /* Local XOFF */
489         u8      ch_lnext;               /* Local LNEXT */
490         u8      ch_xxon;                /* Local XXON */
491         u8      ch_xxoff;               /* Local XXOFF */
492
493         u8      ch_s_mout;              /* Realport MOUT */
494         u8      ch_s_mflow;             /* Realport MFLOW */
495         u8      ch_s_mctrl;             /* Realport MCTRL */
496         u8      ch_s_xon;               /* Realport XON */
497         u8      ch_s_xoff;              /* Realport XOFF */
498         u8      ch_s_lnext;             /* Realport LNEXT */
499         u8      ch_s_xxon;              /* Realport XXON */
500         u8      ch_s_xxoff;             /* Realport XXOFF */
501
502         wait_queue_head_t ch_flag_wait; /* Wait queue for ch_flag changes */
503         wait_queue_head_t ch_sleep;     /* Wait queue for my_sleep() */
504
505         int     ch_custom_speed;        /* Realport custom speed */
506         int     ch_txcount;             /* Running TX count */
507         int     ch_rxcount;             /* Running RX count */
508 };
509
510
511 /************************************************************************
512  * Node State definitions.
513  ************************************************************************/
514
515 enum dgrp_nd_state_t {
516         NS_CLOSED = 0,     /* Network device is closed */
517         NS_IDLE = 1,       /* Network connection inactive */
518         NS_SEND_QUERY = 2, /* Send server query */
519         NS_WAIT_QUERY = 3, /* Wait for query response */
520         NS_READY = 4,      /* Network ready */
521         NS_SEND_ERROR = 5  /* Must send error hangup */
522 };
523
524 #define ND_STATE_STR(x) \
525         ((x) == NS_CLOSED     ? "CLOSED"     : \
526         ((x) == NS_IDLE       ? "IDLE"       : \
527         ((x) == NS_SEND_QUERY ? "SEND_QUERY" : \
528         ((x) == NS_WAIT_QUERY ? "WAIT_QUERY" : \
529         ((x) == NS_READY      ? "READY"      : \
530         ((x) == NS_SEND_ERROR ? "SEND_ERROR" : "UNKNOWN"))))))
531
532 /************************************************************************
533  * Node Flag definitions.
534  ************************************************************************/
535
536 #define ND_SELECT       0x0001          /* Multiple net read selects */
537 #define ND_DEB_WAIT     0x0002          /* Debug Device waiting */
538
539
540 /************************************************************************
541  * Monitoring flag definitions.
542  ************************************************************************/
543
544 #define MON_WAIT_DATA   0x0001          /* Waiting for buffer data */
545 #define MON_WAIT_SPACE  0x0002          /* Waiting for buffer space */
546
547 /************************************************************************
548  * DPA flag definitions.
549  ************************************************************************/
550
551 #define DPA_WAIT_DATA   0x0001          /* Waiting for buffer data */
552 #define DPA_WAIT_SPACE  0x0002          /* Waiting for buffer space */
553
554
555 /************************************************************************
556  * Definitions taken from Realport Dump.
557  ************************************************************************/
558
559 #define RPDUMP_MAGIC    "Digi-RealPort-1.0"
560
561 #define RPDUMP_MESSAGE  0xE2            /* Descriptive message */
562 #define RPDUMP_RESET    0xE7            /* Connection reset */
563 #define RPDUMP_CLIENT   0xE8            /* Client data */
564 #define RPDUMP_SERVER   0xE9            /* Server data */
565
566
567 /************************************************************************
568  * Node request/response definitions.
569  ************************************************************************/
570
571 #define NR_ECHO         0x0001          /* Server echo packet */
572 #define NR_IDENT        0x0002          /* Server Product ID */
573 #define NR_CAPABILITY   0x0004          /* Server Capabilties */
574 #define NR_VPD          0x0008          /* Server VPD, if any */
575 #define NR_PASSWORD     0x0010          /* Server Password */
576
577 /************************************************************************
578  * Registration status of the node's Linux struct tty_driver structures.
579  ************************************************************************/
580 #define SERIAL_TTDRV_REG   0x0001     /* nd_serial_ttdriver registered  */
581 #define CALLOUT_TTDRV_REG  0x0002     /* nd_callout_ttdriver registered */
582 #define XPRINT_TTDRV_REG   0x0004     /* nd_xprint_ttdriver registered  */
583
584
585 /************************************************************************
586  * Node structure.  There exists one of these for each associated
587  * realport server.
588  ************************************************************************/
589
590 struct nd_struct {
591         struct list_head        list;
592         long          nd_major;            /* Node's major number           */
593         long          nd_ID;               /* Node's ID code                */
594
595         char          nd_serial_name[50];   /* "tty_dgrp_<id>_" + null      */
596         char          nd_callout_name[50];  /* "cu_dgrp_<id>_" + null       */
597         char          nd_xprint_name[50];   /* "pr_dgrp_<id>_" + null       */
598
599         char         password[16];        /* Password for server, if needed */
600         int          nd_tty_ref_cnt;      /* Linux tty reference count     */
601
602         struct proc_dir_entry *nd_net_de; /* Dir entry for /proc/dgrp/net  */
603         struct proc_dir_entry *nd_mon_de; /* Dir entry for /proc/dgrp/mon  */
604         struct proc_dir_entry *nd_ports_de; /* Dir entry for /proc/dgrp/ports*/
605         struct proc_dir_entry *nd_dpa_de; /* Dir entry for /proc/dgrp/dpa  */
606
607         spinlock_t nd_lock;               /* General node lock             */
608
609         struct semaphore nd_net_semaphore; /* Net read/write lock           */
610         struct semaphore nd_mon_semaphore; /* Monitor buffer lock           */
611         spinlock_t nd_dpa_lock;         /* DPA buffer lock           */
612
613         enum dgrp_nd_state_t nd_state;    /* NS_* network state */
614         int           nd_chan_count;       /* # active channels             */
615         int           nd_flag;             /* Node flags                    */
616         int           nd_send;             /* Responses to send             */
617         int           nd_expect;           /* Responses we expect           */
618
619         u8       *nd_iobuf;            /* Network R/W Buffer            */
620         wait_queue_head_t nd_tx_waitq;    /* Network select wait queue     */
621
622         u8       *nd_inputbuf;         /* Input Buffer                  */
623         u8       *nd_inputflagbuf;     /* Input Flags Buffer            */
624
625         int           nd_tx_deposit;       /* Accumulated transmit deposits */
626         int           nd_tx_charge;        /* Accumulated transmit charges  */
627         int           nd_tx_credit;        /* Current TX credit             */
628         int           nd_tx_ready;         /* Ready to transmit             */
629         int           nd_tx_work;          /* TX work waiting               */
630         ulong        nd_tx_time;          /* Last transmit time            */
631         ulong        nd_poll_time;        /* Next scheduled poll time      */
632
633         int           nd_delay;            /* Current TX delay              */
634         int           nd_rate;             /* Current TX rate               */
635         struct link_struct nd_link;             /* Link speed params.            */
636
637         int           nd_seq_in;           /* TX seq in ptr                 */
638         int           nd_seq_out;          /* TX seq out ptr                */
639         int           nd_unack;            /* Unacknowledged byte count     */
640         int           nd_remain;           /* Remaining receive bytes       */
641         int           nd_tx_module;        /* Current TX module #           */
642         int           nd_rx_module;        /* Current RX module #           */
643         char         *nd_error;            /* Protocol error message        */
644
645         int           nd_write_count;      /* drp_write() call count        */
646         int           nd_read_count;       /* drp_read() count              */
647         int           nd_send_count;       /* TCP message sent              */
648         int           nd_tx_byte;          /* Transmit byte count           */
649         int           nd_rx_byte;          /* Receive byte count            */
650
651         ulong        nd_mon_lbolt;       /* Monitor start time             */
652         int           nd_mon_flag;        /* Monitor flags                  */
653         int           nd_mon_in;          /* Monitor in pointer             */
654         int           nd_mon_out;         /* Monitor out pointer            */
655         wait_queue_head_t nd_mon_wqueue;  /* Monitor wait queue (on flags)  */
656         u8       *nd_mon_buf;         /* Monitor buffer                 */
657
658         ulong        nd_dpa_lbolt;      /* DPA start time             */
659         int          nd_dpa_flag;       /* DPA flags                  */
660         int          nd_dpa_in;         /* DPA in pointer             */
661         int          nd_dpa_out;        /* DPA out pointer            */
662         wait_queue_head_t nd_dpa_wqueue; /* DPA wait queue (on flags)  */
663         u8        *nd_dpa_buf;  /* DPA buffer                 */
664
665         uint         nd_dpa_debug;
666         uint         nd_dpa_port;
667
668         wait_queue_head_t nd_seq_wque[SEQ_MAX];   /* TX thread wait queues */
669         u8        nd_seq_wait[SEQ_MAX];   /* Transmit thread wait count */
670
671         ushort       nd_seq_size[SEQ_MAX];   /* Transmit seq packet size   */
672         ulong        nd_seq_time[SEQ_MAX];   /* Transmit seq packet time   */
673
674         ushort       nd_hw_ver;           /* HW version returned from PS   */
675         ushort       nd_sw_ver;           /* SW version returned from PS   */
676         uint         nd_hw_id;            /* HW ID returned from PS        */
677         u8        nd_ps_desc[MAX_DESC_LEN];  /* Description from PS     */
678         uint         nd_vpd_len;                /* VPD len, if any */
679         u8           nd_vpd[VPDSIZE];           /* VPD, if any */
680
681         ulong        nd_ttdriver_flags;   /* Registration status            */
682         struct tty_driver *nd_serial_ttdriver;  /* Linux TTYDRIVER structure */
683         struct tty_driver *nd_callout_ttdriver; /* Linux TTYDRIVER structure */
684         struct tty_driver *nd_xprint_ttdriver;  /* Linux TTYDRIVER structure */
685
686         u8           *nd_writebuf;              /* Used to cache data read
687                                                  * from user
688                                                  */
689         struct ch_struct nd_chan[CHAN_MAX];  /* Channel array               */
690         struct device *nd_class_dev;    /* Hang our sysfs stuff off of here */
691 };
692
693 #endif /* __DRP_H */