Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
drp.h
Go to the documentation of this file.
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  */
111 #define PORT_NUM(dev) ((dev) & 0x3f)
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  ************************************************************************/
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
132 #define DM_OUT1 0x04
133 #define DM_OUT2 0x08
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  ************************************************************************/
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  ************************************************************************/
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  ************************************************************************/
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  ************************************************************************/
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  ************************************************************************/
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  ************************************************************************/
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 */
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 */
245 #define UN_SKIP_TEST 0x0040 /* Skip UART test during autoconfiguration */
246 #define UN_AUTO_IRQ 0x0080 /* Do automatic IRQ during autoconfiguration */
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 */
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  */
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 
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 */
278  ushort un_open_count; /* Successful open count */
279  int un_flag; /* Unit flags */
280  ushort un_tbusy; /* Busy transmit count */
281 
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  */
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 */
336 #define CH_VIRT_CD 0x00004 /* Carrier was virtually present */
337 #define CH_PHYS_CD 0x00008 /* Carrier was physically present */
339 #define CH_CLOCAL 0x00010 /* CLOCAL set in cflags */
340 #define CH_BAUD0 0x00020 /* Baud rate zero hangup */
342 #define CH_FAST_READ 0x00040 /* Fast reads are enabled */
343 #define CH_FAST_WRITE 0x00080 /* Fast writes are enabled */
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  ************************************************************************/
365 #define OTYPE_IMMEDIATE 0 /* Immediate Open */
366 #define OTYPE_PERSISTENT 1 /* Persistent Open */
367 #define OTYPE_INCOMING 2 /* Incoming Open */
369 
370 /************************************************************************
371  * Request/Response flags.
372  ************************************************************************/
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 */
390 
391 /************************************************************************
392  * Channel information structure. struct ch_struct
393  ************************************************************************/
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 */
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 */
409  ulong ch_flag; /* CH_* flags */
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 */
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 */
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 */
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 */
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 */
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 */
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() */
505  int ch_custom_speed; /* Realport custom speed */
506  int ch_txcount; /* Running TX count */
507  int ch_rxcount; /* Running RX count */
508 };
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 
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  ************************************************************************/
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"
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  ************************************************************************/
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 */
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 */
599  char password[16]; /* Password for server, if needed */
600  int nd_tty_ref_cnt; /* Linux tty reference count */
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 */
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 */
619  u8 *nd_iobuf; /* Network R/W Buffer */
620  wait_queue_head_t nd_tx_waitq; /* Network select wait queue */
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. */
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 */
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 */
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 */
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 */
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 */
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+1]; /* 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 */