linux/drivers/staging/dgrp/drp.h
<<
>>
Prefs
   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
 274struct 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
 303enum 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
 395struct 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
 515enum 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
 590struct 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+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 */
 694