Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / drivers / staging / dgap / dgap.h
1 /*
2  * Copyright 2003 Digi International (www.digi.com)
3  *      Scott H Kilau <Scott_Kilau at digi dot com>
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License as published by
7  * the Free Software Foundation; either version 2, or (at your option)
8  * any later version.
9  *
10  * This program is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED; without even the
12  * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
13  * PURPOSE.  See the GNU General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18  *
19  *      NOTE: THIS IS A SHARED HEADER. DO NOT CHANGE CODING STYLE!!!
20  *
21  *************************************************************************
22  *
23  * Driver includes
24  *
25  *************************************************************************/
26
27 #ifndef __DGAP_DRIVER_H
28 #define __DGAP_DRIVER_H
29
30 #include <linux/types.h>        /* To pick up the varions Linux types */
31 #include <linux/tty.h>          /* To pick up the various tty structs/defines */
32 #include <linux/interrupt.h>    /* For irqreturn_t type */
33
34 #ifndef TRUE
35 # define TRUE 1
36 #endif
37
38 #ifndef FALSE
39 # define FALSE 0
40 #endif
41
42 #if !defined(TTY_FLIPBUF_SIZE)
43 # define TTY_FLIPBUF_SIZE 512
44 #endif
45
46 /*************************************************************************
47  *
48  * Driver defines
49  *
50  *************************************************************************/
51
52 /*
53  * Driver identification
54  */
55 #define DG_NAME         "dgap-1.3-16"
56 #define DG_PART         "40002347_C"
57 #define DRVSTR          "dgap"
58
59 /*
60  * defines from dgap_pci.h
61  */
62 #define PCIMAX 32                       /* maximum number of PCI boards */
63
64 #define DIGI_VID                0x114F
65
66 #define PCI_DEV_EPC_DID         0x0002
67 #define PCI_DEV_XEM_DID         0x0004
68 #define PCI_DEV_XR_DID          0x0005
69 #define PCI_DEV_CX_DID          0x0006
70 #define PCI_DEV_XRJ_DID         0x0009  /* PLX-based Xr adapter */
71 #define PCI_DEV_XR_IBM_DID      0x0011  /* IBM 8-port Async Adapter */
72 #define PCI_DEV_XR_BULL_DID     0x0013  /* BULL 8-port Async Adapter */
73 #define PCI_DEV_XR_SAIP_DID     0x001c  /* SAIP card - Xr adapter */
74 #define PCI_DEV_XR_422_DID      0x0012  /* Xr-422 */
75 #define PCI_DEV_920_2_DID       0x0034  /* XR-Plus 920 K, 2 port */
76 #define PCI_DEV_920_4_DID       0x0026  /* XR-Plus 920 K, 4 port */
77 #define PCI_DEV_920_8_DID       0x0027  /* XR-Plus 920 K, 8 port */
78 #define PCI_DEV_EPCJ_DID        0x000a  /* PLX 9060 chip for PCI  */
79 #define PCI_DEV_CX_IBM_DID      0x001b  /* IBM 128-port Async Adapter */
80 #define PCI_DEV_920_8_HP_DID    0x0058  /* HP XR-Plus 920 K, 8 port */
81 #define PCI_DEV_XEM_HP_DID      0x0059  /* HP Xem PCI */
82
83 #define PCI_DEV_XEM_NAME        "AccelePort XEM"
84 #define PCI_DEV_CX_NAME         "AccelePort CX"
85 #define PCI_DEV_XR_NAME         "AccelePort Xr"
86 #define PCI_DEV_XRJ_NAME        "AccelePort Xr (PLX)"
87 #define PCI_DEV_XR_SAIP_NAME    "AccelePort Xr (SAIP)"
88 #define PCI_DEV_920_2_NAME      "AccelePort Xr920 2 port"
89 #define PCI_DEV_920_4_NAME      "AccelePort Xr920 4 port"
90 #define PCI_DEV_920_8_NAME      "AccelePort Xr920 8 port"
91 #define PCI_DEV_XR_422_NAME     "AccelePort Xr 422"
92 #define PCI_DEV_EPCJ_NAME       "AccelePort EPC (PLX)"
93 #define PCI_DEV_XR_BULL_NAME    "AccelePort Xr (BULL)"
94 #define PCI_DEV_XR_IBM_NAME     "AccelePort Xr (IBM)"
95 #define PCI_DEV_CX_IBM_NAME     "AccelePort CX (IBM)"
96 #define PCI_DEV_920_8_HP_NAME   "AccelePort Xr920 8 port (HP)"
97 #define PCI_DEV_XEM_HP_NAME     "AccelePort XEM (HP)"
98
99 /*
100  * On the PCI boards, there is no IO space allocated
101  * The I/O registers will be in the first 3 bytes of the
102  * upper 2MB of the 4MB memory space.  The board memory
103  * will be mapped into the low 2MB of the 4MB memory space
104  */
105
106 /* Potential location of PCI Bios from E0000 to FFFFF*/
107 #define PCI_BIOS_SIZE           0x00020000
108
109 /* Size of Memory and I/O for PCI (4MB) */
110 #define PCI_RAM_SIZE            0x00400000
111
112 /* Size of Memory (2MB) */
113 #define PCI_MEM_SIZE            0x00200000
114
115 /* Max PCI Window Size (2MB) */
116 #define PCI_WIN_SIZE            0x00200000
117
118 #define PCI_WIN_SHIFT           21 /* 21 bits max */
119
120 /* Offset of I/0 in Memory (2MB) */
121 #define PCI_IO_OFFSET           0x00200000
122
123 /* Size of IO (2MB) */
124 #define PCI_IO_SIZE_DGAP        0x00200000
125
126 /* Number of boards we support at once. */
127 #define MAXBOARDS       32
128 #define MAXPORTS        224
129 #define MAXTTYNAMELEN   200
130
131 /* Our 3 magic numbers for our board, channel and unit structs */
132 #define DGAP_BOARD_MAGIC        0x5c6df104
133 #define DGAP_CHANNEL_MAGIC      0x6c6df104
134 #define DGAP_UNIT_MAGIC         0x7c6df104
135
136 /* Serial port types */
137 #define DGAP_SERIAL             0
138 #define DGAP_PRINT              1
139
140 #define SERIAL_TYPE_NORMAL      1
141
142 /* 4 extra for alignment play space */
143 #define WRITEBUFLEN             ((4096) + 4)
144 #define MYFLIPLEN               N_TTY_BUF_SIZE
145
146 #define SBREAK_TIME 0x25
147 #define U2BSIZE 0x400
148
149 #define dgap_jiffies_from_ms(a) (((a) * HZ) / 1000)
150
151 /*
152  * Our major for the mgmt devices.
153  *
154  * We can use 22, because Digi was allocated 22 and 23 for the epca driver.
155  * 22 has now become obsolete now that the "cu" devices have
156  * been removed from 2.6.
157  * Also, this *IS* the epca driver, just PCI only now.
158  */
159 #ifndef DIGI_DGAP_MAJOR
160 # define DIGI_DGAP_MAJOR         22
161 #endif
162
163 /*
164  * The parameters we use to define the periods of the moving averages.
165  */
166 #define         MA_PERIOD       (HZ / 10)
167 #define         SMA_DUR         (1 * HZ)
168 #define         EMA_DUR         (1 * HZ)
169 #define         SMA_NPERIODS    (SMA_DUR / MA_PERIOD)
170 #define         EMA_NPERIODS    (EMA_DUR / MA_PERIOD)
171
172 /*
173  * Define a local default termios struct. All ports will be created
174  * with this termios initially.  This is the same structure that is defined
175  * as the default in tty_io.c with the same settings overriden as in serial.c
176  *
177  * In short, this should match the internal serial ports' defaults.
178  */
179 #define DEFAULT_IFLAGS  (ICRNL | IXON)
180 #define DEFAULT_OFLAGS  (OPOST | ONLCR)
181 #define DEFAULT_CFLAGS  (B9600 | CS8 | CREAD | HUPCL | CLOCAL)
182 #define DEFAULT_LFLAGS  (ISIG | ICANON | ECHO | ECHOE | ECHOK | \
183                         ECHOCTL | ECHOKE | IEXTEN)
184
185 #ifndef _POSIX_VDISABLE
186 #define _POSIX_VDISABLE ('\0')
187 #endif
188
189 #define SNIFF_MAX       65536           /* Sniff buffer size (2^n) */
190 #define SNIFF_MASK      (SNIFF_MAX - 1) /* Sniff wrap mask */
191
192 #define VPDSIZE (512)
193
194 /************************************************************************
195  *      FEP memory offsets
196  ************************************************************************/
197 #define START           0x0004L         /* Execution start address      */
198
199 #define CMDBUF          0x0d10L         /* Command (cm_t) structure offset */
200 #define CMDSTART        0x0400L         /* Start of command buffer      */
201 #define CMDMAX          0x0800L         /* End of command buffer        */
202
203 #define EVBUF           0x0d18L         /* Event (ev_t) structure       */
204 #define EVSTART         0x0800L         /* Start of event buffer        */
205 #define EVMAX           0x0c00L         /* End of event buffer          */
206 #define FEP5_PLUS       0x0E40          /* ASCII '5' and ASCII 'A' is here  */
207 #define ECS_SEG         0x0E44          /* Segment of the extended      */
208                                         /* channel structure            */
209 #define LINE_SPEED      0x10            /* Offset into ECS_SEG for line */
210                                         /* speed if the fep has extended */
211                                         /* capabilities                 */
212
213 /* BIOS MAGIC SPOTS */
214 #define ERROR           0x0C14L         /* BIOS error code              */
215 #define SEQUENCE        0x0C12L         /* BIOS sequence indicator      */
216 #define POSTAREA        0x0C00L         /* POST complete message area   */
217
218 /* FEP MAGIC SPOTS */
219 #define FEPSTAT         POSTAREA        /* OS here when FEP comes up    */
220 #define NCHAN           0x0C02L         /* number of ports FEP sees     */
221 #define PANIC           0x0C10L         /* PANIC area for FEP           */
222 #define KMEMEM          0x0C30L         /* Memory for KME use           */
223 #define CONFIG          0x0CD0L         /* Concentrator configuration info */
224 #define CONFIGSIZE      0x0030          /* configuration info size      */
225 #define DOWNREQ         0x0D00          /* Download request buffer pointer */
226
227 #define CHANBUF         0x1000L         /* Async channel (bs_t) structs */
228 #define FEPOSSIZE       0x1FFF          /* 8K FEPOS                     */
229
230 #define XEMPORTS    0xC02       /*
231                                  * Offset in board memory where FEP5 stores
232                                  * how many ports it has detected.
233                                  * NOTE: FEP5 reports 64 ports when the user
234                                  * has the cable in EBI OUT instead of EBI IN.
235                                  */
236
237 #define FEPCLR      0x00
238 #define FEPMEM      0x02
239 #define FEPRST      0x04
240 #define FEPINT      0x08
241 #define FEPMASK     0x0e
242 #define FEPWIN      0x80
243
244 #define LOWMEM      0x0100
245 #define HIGHMEM     0x7f00
246
247 #define FEPTIMEOUT 200000
248
249 #define ENABLE_INTR     0x0e04          /* Enable interrupts flag */
250 #define FEPPOLL_MIN     1               /* minimum of 1 millisecond */
251 #define FEPPOLL_MAX     20              /* maximum of 20 milliseconds */
252 #define FEPPOLL         0x0c26          /* Fep event poll interval */
253
254 #define IALTPIN         0x0080          /* Input flag to swap DSR <-> DCD */
255
256 /************************************************************************
257  * FEP supported functions
258  ************************************************************************/
259 #define SRLOW           0xe0            /* Set receive low water        */
260 #define SRHIGH          0xe1            /* Set receive high water       */
261 #define FLUSHTX         0xe2            /* Flush transmit buffer        */
262 #define PAUSETX         0xe3            /* Pause data transmission      */
263 #define RESUMETX        0xe4            /* Resume data transmission     */
264 #define SMINT           0xe5            /* Set Modem Interrupt          */
265 #define SAFLOWC         0xe6            /* Set Aux. flow control chars  */
266 #define SBREAK          0xe8            /* Send break                   */
267 #define SMODEM          0xe9            /* Set 8530 modem control lines */
268 #define SIFLAG          0xea            /* Set UNIX iflags              */
269 #define SFLOWC          0xeb            /* Set flow control characters  */
270 #define STLOW           0xec            /* Set transmit low water mark  */
271 #define RPAUSE          0xee            /* Pause receive                */
272 #define RRESUME         0xef            /* Resume receive               */
273 #define CHRESET         0xf0            /* Reset Channel                */
274 #define BUFSETALL       0xf2            /* Set Tx & Rx buffer size avail*/
275 #define SOFLAG          0xf3            /* Set UNIX oflags              */
276 #define SHFLOW          0xf4            /* Set hardware handshake       */
277 #define SCFLAG          0xf5            /* Set UNIX cflags              */
278 #define SVNEXT          0xf6            /* Set VNEXT character          */
279 #define SPINTFC         0xfc            /* Reserved                     */
280 #define SCOMMODE        0xfd            /* Set RS232/422 mode           */
281
282 /************************************************************************
283  *      Modes for SCOMMODE
284  ************************************************************************/
285 #define MODE_232        0x00
286 #define MODE_422        0x01
287
288 /************************************************************************
289  *      Event flags.
290  ************************************************************************/
291 #define IFBREAK         0x01            /* Break received               */
292 #define IFTLW           0x02            /* Transmit low water           */
293 #define IFTEM           0x04            /* Transmitter empty            */
294 #define IFDATA          0x08            /* Receive data present         */
295 #define IFMODEM         0x20            /* Modem status change          */
296
297 /************************************************************************
298  *      Modem flags
299  ************************************************************************/
300 #       define  DM_RTS          0x02    /* Request to send              */
301 #       define  DM_CD           0x80    /* Carrier detect               */
302 #       define  DM_DSR          0x20    /* Data set ready               */
303 #       define  DM_CTS          0x10    /* Clear to send                */
304 #       define  DM_RI           0x40    /* Ring indicator               */
305 #       define  DM_DTR          0x01    /* Data terminal ready          */
306
307 /*
308  * defines from dgap_conf.h
309  */
310 #define NULLNODE 0              /* header node, not used */
311 #define BNODE 1                 /* Board node */
312 #define LNODE 2                 /* Line node */
313 #define CNODE 3                 /* Concentrator node */
314 #define MNODE 4                 /* EBI Module node */
315 #define TNODE 5                 /* tty name prefix node */
316 #define CUNODE 6                /* cu name prefix (non-SCO) */
317 #define PNODE 7                 /* trans. print prefix node */
318 #define JNODE 8                 /* maJor number node */
319 #define ANODE 9                 /* altpin */
320 #define TSNODE 10               /* tty structure size */
321 #define CSNODE 11               /* channel structure size */
322 #define BSNODE 12               /* board structure size */
323 #define USNODE 13               /* unit schedule structure size */
324 #define FSNODE 14               /* f2200 structure size */
325 #define VSNODE 15               /* size of VPIX structures */
326 #define INTRNODE 16             /* enable interrupt */
327
328 /* Enumeration of tokens */
329 #define BEGIN   1
330 #define END     2
331 #define BOARD   10
332
333 #define EPCFS   11 /* start of EPC family definitions */
334 #define ICX             11
335 #define MCX             13
336 #define PCX     14
337 #define IEPC    15
338 #define EEPC    16
339 #define MEPC    17
340 #define IPCM    18
341 #define EPCM    19
342 #define MPCM    20
343 #define PEPC    21
344 #define PPCM    22
345 #ifdef CP
346 #define ICP     23
347 #define ECP     24
348 #define MCP     25
349 #endif
350 #define EPCFE   25 /* end of EPC family definitions */
351 #define PC2E    26
352 #define PC4E    27
353 #define PC4E8K  28
354 #define PC8E    29
355 #define PC8E8K  30
356 #define PC16E   31
357 #define MC2E8K  34
358 #define MC4E8K  35
359 #define MC8E8K  36
360
361 #define AVANFS  42      /* start of Avanstar family definitions */
362 #define A8P     42
363 #define A16P    43
364 #define AVANFE  43      /* end of Avanstar family definitions */
365
366 #define DA2000FS        44 /* start of AccelePort 2000 family definitions */
367 #define DA22            44 /* AccelePort 2002 */
368 #define DA24            45 /* AccelePort 2004 */
369 #define DA28            46 /* AccelePort 2008 */
370 #define DA216           47 /* AccelePort 2016 */
371 #define DAR4            48 /* AccelePort RAS 4 port */
372 #define DAR8            49 /* AccelePort RAS 8 port */
373 #define DDR24           50 /* DataFire RAS 24 port */
374 #define DDR30           51 /* DataFire RAS 30 port */
375 #define DDR48           52 /* DataFire RAS 48 port */
376 #define DDR60           53 /* DataFire RAS 60 port */
377 #define DA2000FE        53 /* end of AccelePort 2000/RAS family definitions */
378
379 #define PCXRFS  106     /* start of PCXR family definitions */
380 #define APORT4  106
381 #define APORT8  107
382 #define PAPORT4 108
383 #define PAPORT8 109
384 #define APORT4_920I     110
385 #define APORT8_920I     111
386 #define APORT4_920P     112
387 #define APORT8_920P     113
388 #define APORT2_920P 114
389 #define PCXRFE  117     /* end of PCXR family definitions */
390
391 #define LINE    82
392 #ifdef T1
393 #define T1M     83
394 #define E1M     84
395 #endif
396 #define CONC    64
397 #define CX      65
398 #define EPC     66
399 #define MOD     67
400 #define PORTS   68
401 #define METHOD  69
402 #define CUSTOM  70
403 #define BASIC   71
404 #define STATUS  72
405 #define MODEM   73
406 /* The following tokens can appear in multiple places */
407 #define SPEED   74
408 #define NPORTS  75
409 #define ID      76
410 #define CABLE   77
411 #define CONNECT 78
412 #define IO      79
413 #define MEM     80
414 #define DPSZ    81
415
416 #define TTYN    90
417 #define CU      91
418 #define PRINT   92
419 #define XPRINT  93
420 #define CMAJOR   94
421 #define ALTPIN  95
422 #define STARTO 96
423 #define USEINTR  97
424 #define PCIINFO  98
425
426 #define TTSIZ   100
427 #define CHSIZ   101
428 #define BSSIZ   102
429 #define UNTSIZ  103
430 #define F2SIZ   104
431 #define VPSIZ   105
432
433 #define TOTAL_BOARD     2
434 #define CURRENT_BRD     4
435 #define BOARD_TYPE      6
436 #define IO_ADDRESS      8
437 #define MEM_ADDRESS     10
438
439 #define FIELDS_PER_PAGE 18
440
441 #define TB_FIELD        1
442 #define CB_FIELD        3
443 #define BT_FIELD        5
444 #define IO_FIELD        7
445 #define ID_FIELD        8
446 #define ME_FIELD        9
447 #define TTY_FIELD       11
448 #define CU_FIELD        13
449 #define PR_FIELD        15
450 #define MPR_FIELD       17
451
452 #define MAX_FIELD       512
453
454 #define INIT            0
455 #define NITEMS          128
456 #define MAX_ITEM        512
457
458 #define DSCRINST        1
459 #define DSCRNUM         3
460 #define ALTPINQ         5
461 #define SSAVE           7
462
463 #define DSCR            "32"
464 #define ONETONINE       "123456789"
465 #define ALL             "1234567890"
466
467 /*
468  * All the possible states the driver can be while being loaded.
469  */
470 enum {
471         DRIVER_INITIALIZED = 0,
472         DRIVER_READY
473 };
474
475 /*
476  * All the possible states the board can be while booting up.
477  */
478 enum {
479         BOARD_FAILED = 0,
480         BOARD_READY
481 };
482
483 /*
484  * All the possible states that a requested concentrator image can be in.
485  */
486 enum {
487         NO_PENDING_CONCENTRATOR_REQUESTS = 0,
488         NEED_CONCENTRATOR,
489         REQUESTED_CONCENTRATOR
490 };
491
492 /*
493  * Modem line constants are defined as macros because DSR and
494  * DCD are swapable using the ditty altpin option.
495  */
496 #define D_CD(ch)        ch->ch_cd       /* Carrier detect       */
497 #define D_DSR(ch)       ch->ch_dsr      /* Data set ready       */
498 #define D_RTS(ch)       DM_RTS          /* Request to send      */
499 #define D_CTS(ch)       DM_CTS          /* Clear to send        */
500 #define D_RI(ch)        DM_RI           /* Ring indicator       */
501 #define D_DTR(ch)       DM_DTR          /* Data terminal ready  */
502
503 /*************************************************************************
504  *
505  * Structures and closely related defines.
506  *
507  *************************************************************************/
508
509 /*
510  * A structure to hold a statistics counter.  We also
511  * compute moving averages for this counter.
512  */
513 struct macounter {
514         u32             cnt;    /* Total count */
515         ulong           accum;  /* Acuumulator per period */
516         ulong           sma;    /* Simple moving average */
517         ulong           ema;    /* Exponential moving average */
518 };
519
520 /************************************************************************
521  * Device flag definitions for bd_flags.
522  ************************************************************************/
523 #define BD_FEP5PLUS     0x0001          /* Supports FEP5 Plus commands */
524 #define BD_HAS_VPD      0x0002          /* Board has VPD info available */
525
526 /*
527  *      Per-board information
528  */
529 struct board_t {
530         int             magic;          /* Board Magic number.  */
531         int             boardnum;       /* Board number: 0-3 */
532
533         int             type;           /* Type of board */
534         char            *name;          /* Product Name */
535         struct pci_dev  *pdev;          /* Pointer to the pci_dev struct */
536         u16             vendor;         /* PCI vendor ID */
537         u16             device;         /* PCI device ID */
538         u16             subvendor;      /* PCI subsystem vendor ID */
539         u16             subdevice;      /* PCI subsystem device ID */
540         u8              rev;            /* PCI revision ID */
541         uint            pci_bus;        /* PCI bus value */
542         uint            pci_slot;       /* PCI slot value */
543         u16             maxports;       /* MAX ports this board can handle */
544         u8              vpd[VPDSIZE];   /* VPD of board, if found */
545         u32             bd_flags;       /* Board flags */
546
547         spinlock_t      bd_lock;        /* Used to protect board */
548
549         u32             state;          /* State of card. */
550         wait_queue_head_t state_wait;   /* Place to sleep on for state change */
551
552         struct          tasklet_struct helper_tasklet; /* Poll helper tasklet */
553
554         u32             wait_for_bios;
555         u32             wait_for_fep;
556
557         struct cnode    *bd_config;     /* Config of board */
558
559         u16             nasync;         /* Number of ports on card */
560
561         ulong           irq;            /* Interrupt request number */
562         ulong           intr_count;     /* Count of interrupts */
563         u32             intr_used;      /* Non-zero if using interrupts */
564         u32             intr_running;   /* Non-zero if FEP knows its doing */
565                                         /* interrupts */
566
567         ulong           port;           /* Start of base io port of the card */
568         ulong           port_end;       /* End of base io port of the card */
569         ulong           membase;        /* Start of base memory of the card */
570         ulong           membase_end;    /* End of base memory of the card */
571
572         u8 __iomem      *re_map_port;   /* Remapped io port of the card */
573         u8 __iomem      *re_map_membase;/* Remapped memory of the card */
574
575         u8              inhibit_poller; /* Tells the poller to leave us alone */
576
577         struct channel_t *channels[MAXPORTS]; /* array of pointers to our */
578                                               /* channels.                */
579
580         struct tty_driver       *serial_driver;
581         struct tty_port *serial_ports;
582         char            serial_name[200];
583         struct tty_driver       *print_driver;
584         struct tty_port *printer_ports;
585         char            print_name[200];
586
587         struct bs_t __iomem *bd_bs;     /* Base structure pointer         */
588
589         char    *flipbuf;               /* Our flip buffer, alloced if    */
590                                         /* board is found                 */
591         char    *flipflagbuf;           /* Our flip flag buffer, alloced  */
592                                         /* if board is found              */
593
594         u16             dpatype;        /* The board "type", as defined   */
595                                         /* by DPA                         */
596         u16             dpastatus;      /* The board "status", as defined */
597                                         /* by DPA                         */
598
599         u32             conc_dl_status; /* Status of any pending conc     */
600                                         /* download                       */
601 };
602
603 /************************************************************************
604  * Unit flag definitions for un_flags.
605  ************************************************************************/
606 #define UN_ISOPEN       0x0001          /* Device is open               */
607 #define UN_CLOSING      0x0002          /* Line is being closed         */
608 #define UN_IMM          0x0004          /* Service immediately          */
609 #define UN_BUSY         0x0008          /* Some work this channel       */
610 #define UN_BREAKI       0x0010          /* Input break received         */
611 #define UN_PWAIT        0x0020          /* Printer waiting for terminal */
612 #define UN_TIME         0x0040          /* Waiting on time              */
613 #define UN_EMPTY        0x0080          /* Waiting output queue empty   */
614 #define UN_LOW          0x0100          /* Waiting output low water mark*/
615 #define UN_EXCL_OPEN    0x0200          /* Open for exclusive use       */
616 #define UN_WOPEN        0x0400          /* Device waiting for open      */
617 #define UN_WIOCTL       0x0800          /* Device waiting for open      */
618 #define UN_HANGUP       0x8000          /* Carrier lost                 */
619
620 struct device;
621
622 /************************************************************************
623  * Structure for terminal or printer unit.
624  ************************************************************************/
625 struct un_t {
626         int     magic;          /* Unit Magic Number.                   */
627         struct  channel_t *un_ch;
628         u32     un_time;
629         u32     un_type;
630         int     un_open_count;  /* Counter of opens to port             */
631         struct tty_struct *un_tty;/* Pointer to unit tty structure      */
632         u32     un_flags;       /* Unit flags                           */
633         wait_queue_head_t un_flags_wait; /* Place to sleep to wait on unit */
634         u32     un_dev;         /* Minor device number                  */
635         tcflag_t un_oflag;      /* oflags being done on board           */
636         tcflag_t un_lflag;      /* lflags being done on board           */
637         struct device *un_sysfs;
638 };
639
640 /************************************************************************
641  * Device flag definitions for ch_flags.
642  ************************************************************************/
643 #define CH_PRON         0x0001          /* Printer on string                */
644 #define CH_OUT          0x0002          /* Dial-out device open             */
645 #define CH_STOP         0x0004          /* Output is stopped                */
646 #define CH_STOPI        0x0008          /* Input is stopped                 */
647 #define CH_CD           0x0010          /* Carrier is present               */
648 #define CH_FCAR         0x0020          /* Carrier forced on                */
649
650 #define CH_RXBLOCK      0x0080          /* Enable rx blocked flag           */
651 #define CH_WLOW         0x0100          /* Term waiting low event           */
652 #define CH_WEMPTY       0x0200          /* Term waiting empty event         */
653 #define CH_RENABLE      0x0400          /* Buffer just emptied          */
654 #define CH_RACTIVE      0x0800          /* Process active in xxread()   */
655 #define CH_RWAIT        0x1000          /* Process waiting in xxread()  */
656 #define CH_BAUD0        0x2000          /* Used for checking B0 transitions */
657 #define CH_HANGUP       0x8000          /* Hangup received                  */
658
659 /*
660  * Definitions for ch_sniff_flags
661  */
662 #define SNIFF_OPEN      0x1
663 #define SNIFF_WAIT_DATA 0x2
664 #define SNIFF_WAIT_SPACE 0x4
665
666 /************************************************************************
667  ***    Definitions for Digi ditty(1) command.
668  ************************************************************************/
669
670 /************************************************************************
671  * This module provides application access to special Digi
672  * serial line enhancements which are not standard UNIX(tm) features.
673  ************************************************************************/
674
675 #if !defined(TIOCMODG)
676
677 #define TIOCMODG        (('d'<<8) | 250)        /* get modem ctrl state */
678 #define TIOCMODS        (('d'<<8) | 251)        /* set modem ctrl state */
679
680 #ifndef TIOCM_LE
681 #define         TIOCM_LE        0x01            /* line enable          */
682 #define         TIOCM_DTR       0x02            /* data terminal ready  */
683 #define         TIOCM_RTS       0x04            /* request to send      */
684 #define         TIOCM_ST        0x08            /* secondary transmit   */
685 #define         TIOCM_SR        0x10            /* secondary receive    */
686 #define         TIOCM_CTS       0x20            /* clear to send        */
687 #define         TIOCM_CAR       0x40            /* carrier detect       */
688 #define         TIOCM_RNG       0x80            /* ring indicator       */
689 #define         TIOCM_DSR       0x100           /* data set ready       */
690 #define         TIOCM_RI        TIOCM_RNG       /* ring (alternate)     */
691 #define         TIOCM_CD        TIOCM_CAR       /* carrier detect (alt) */
692 #endif
693
694 #endif
695
696 #if !defined(TIOCMSET)
697 #define TIOCMSET        (('d'<<8) | 252)        /* set modem ctrl state */
698 #define TIOCMGET        (('d'<<8) | 253)        /* set modem ctrl state */
699 #endif
700
701 #if !defined(TIOCMBIC)
702 #define TIOCMBIC        (('d'<<8) | 254)        /* set modem ctrl state */
703 #define TIOCMBIS        (('d'<<8) | 255)        /* set modem ctrl state */
704 #endif
705
706 #if !defined(TIOCSDTR)
707 #define TIOCSDTR        (('e'<<8) | 0)          /* set DTR              */
708 #define TIOCCDTR        (('e'<<8) | 1)          /* clear DTR            */
709 #endif
710
711 /************************************************************************
712  * Ioctl command arguments for DIGI parameters.
713  ************************************************************************/
714 #define DIGI_GETA       (('e'<<8) | 94)         /* Read params          */
715
716 #define DIGI_SETA       (('e'<<8) | 95)         /* Set params           */
717 #define DIGI_SETAW      (('e'<<8) | 96)         /* Drain & set params   */
718 #define DIGI_SETAF      (('e'<<8) | 97)         /* Drain, flush & set params */
719
720 #define DIGI_KME        (('e'<<8) | 98)         /* Read/Write Host      */
721                                                 /* Adapter Memory       */
722
723 #define DIGI_GETFLOW    (('e'<<8) | 99)         /* Get startc/stopc flow */
724                                                 /* control characters    */
725 #define DIGI_SETFLOW    (('e'<<8) | 100)        /* Set startc/stopc flow */
726                                                 /* control characters    */
727 #define DIGI_GETAFLOW   (('e'<<8) | 101)        /* Get Aux. startc/stopc */
728                                                 /* flow control chars    */
729 #define DIGI_SETAFLOW   (('e'<<8) | 102)        /* Set Aux. startc/stopc */
730                                                 /* flow control chars    */
731
732 #define DIGI_GEDELAY    (('d'<<8) | 246)        /* Get edelay */
733 #define DIGI_SEDELAY    (('d'<<8) | 247)        /* Set edelay */
734
735 struct  digiflow_t {
736         unsigned char   startc;                 /* flow cntl start char */
737         unsigned char   stopc;                  /* flow cntl stop char  */
738 };
739
740 #ifdef  FLOW_2200
741 #define F2200_GETA      (('e'<<8) | 104)        /* Get 2x36 flow cntl flags */
742 #define F2200_SETAW     (('e'<<8) | 105)        /* Set 2x36 flow cntl flags */
743 #define         F2200_MASK      0x03            /* 2200 flow cntl bit mask  */
744 #define         FCNTL_2200      0x01            /* 2x36 terminal flow cntl  */
745 #define         PCNTL_2200      0x02            /* 2x36 printer flow cntl   */
746 #define F2200_XON       0xf8
747 #define P2200_XON       0xf9
748 #define F2200_XOFF      0xfa
749 #define P2200_XOFF      0xfb
750
751 #define FXOFF_MASK      0x03                    /* 2200 flow status mask    */
752 #define RCVD_FXOFF      0x01                    /* 2x36 Terminal XOFF rcvd  */
753 #define RCVD_PXOFF      0x02                    /* 2x36 Printer XOFF rcvd   */
754 #endif
755
756 /************************************************************************
757  * Values for digi_flags
758  ************************************************************************/
759 #define DIGI_IXON       0x0001          /* Handle IXON in the FEP       */
760 #define DIGI_FAST       0x0002          /* Fast baud rates              */
761 #define RTSPACE         0x0004          /* RTS input flow control       */
762 #define CTSPACE         0x0008          /* CTS output flow control      */
763 #define DSRPACE         0x0010          /* DSR output flow control      */
764 #define DCDPACE         0x0020          /* DCD output flow control      */
765 #define DTRPACE         0x0040          /* DTR input flow control       */
766 #define DIGI_COOK       0x0080          /* Cooked processing done in FEP */
767 #define DIGI_FORCEDCD   0x0100          /* Force carrier                */
768 #define DIGI_ALTPIN     0x0200          /* Alternate RJ-45 pin config   */
769 #define DIGI_AIXON      0x0400          /* Aux flow control in fep      */
770 #define DIGI_PRINTER    0x0800          /* Hold port open for flow cntrl*/
771 #define DIGI_PP_INPUT   0x1000          /* Change parallel port to input*/
772 #define DIGI_DTR_TOGGLE 0x2000          /* Support DTR Toggle           */
773 #define DIGI_422        0x4000          /* for 422/232 selectable panel */
774 #define DIGI_RTS_TOGGLE 0x8000          /* Support RTS Toggle           */
775
776 /************************************************************************
777  * These options are not supported on the comxi.
778  ************************************************************************/
779 #define DIGI_COMXI      (DIGI_FAST|DIGI_COOK|DSRPACE|DCDPACE|DTRPACE)
780
781 #define DIGI_PLEN       28              /* String length                */
782 #define DIGI_TSIZ       10              /* Terminal string len          */
783
784 /************************************************************************
785  * Structure used with ioctl commands for DIGI parameters.
786  ************************************************************************/
787 struct digi_t {
788         unsigned short  digi_flags;             /* Flags (see above)    */
789         unsigned short  digi_maxcps;            /* Max printer CPS      */
790         unsigned short  digi_maxchar;           /* Max chars in print queue */
791         unsigned short  digi_bufsize;           /* Buffer size          */
792         unsigned char   digi_onlen;             /* Length of ON string  */
793         unsigned char   digi_offlen;            /* Length of OFF string */
794         char            digi_onstr[DIGI_PLEN];  /* Printer on string    */
795         char            digi_offstr[DIGI_PLEN]; /* Printer off string   */
796         char            digi_term[DIGI_TSIZ];   /* terminal string      */
797 };
798
799 /************************************************************************
800  * KME definitions and structures.
801  ************************************************************************/
802 #define RW_IDLE         0       /* Operation complete                   */
803 #define RW_READ         1       /* Read Concentrator Memory             */
804 #define RW_WRITE        2       /* Write Concentrator Memory            */
805
806 struct rw_t {
807         unsigned char   rw_req;         /* Request type                 */
808         unsigned char   rw_board;       /* Host Adapter board number    */
809         unsigned char   rw_conc;        /* Concentrator number          */
810         unsigned char   rw_reserved;    /* Reserved for expansion       */
811         unsigned long   rw_addr;        /* Address in concentrator      */
812         unsigned short  rw_size;        /* Read/write request length    */
813         unsigned char   rw_data[128];   /* Data to read/write           */
814 };
815
816 /************************************************************************
817  * Structure to get driver status information
818  ************************************************************************/
819 struct digi_dinfo {
820         unsigned long   dinfo_nboards;          /* # boards configured  */
821         char            dinfo_reserved[12];     /* for future expansion */
822         char            dinfo_version[16];      /* driver version       */
823 };
824
825 #define DIGI_GETDD      (('d'<<8) | 248)        /* get driver info      */
826
827 /************************************************************************
828  * Structure used with ioctl commands for per-board information
829  *
830  * physsize and memsize differ when board has "windowed" memory
831  ************************************************************************/
832 struct digi_info {
833         unsigned long   info_bdnum;             /* Board number (0 based)  */
834         unsigned long   info_ioport;            /* io port address         */
835         unsigned long   info_physaddr;          /* memory address          */
836         unsigned long   info_physsize;          /* Size of host mem window */
837         unsigned long   info_memsize;           /* Amount of dual-port mem */
838                                                 /* on board                */
839         unsigned short  info_bdtype;            /* Board type              */
840         unsigned short  info_nports;            /* number of ports         */
841         char            info_bdstate;           /* board state             */
842         char            info_reserved[7];       /* for future expansion    */
843 };
844
845 #define DIGI_GETBD      (('d'<<8) | 249)        /* get board info          */
846
847 struct digi_stat {
848         unsigned int    info_chan;              /* Channel number (0 based)  */
849         unsigned int    info_brd;               /* Board number (0 based)  */
850         unsigned long   info_cflag;             /* cflag for channel       */
851         unsigned long   info_iflag;             /* iflag for channel       */
852         unsigned long   info_oflag;             /* oflag for channel       */
853         unsigned long   info_mstat;             /* mstat for channel       */
854         unsigned long   info_tx_data;           /* tx_data for channel       */
855         unsigned long   info_rx_data;           /* rx_data for channel       */
856         unsigned long   info_hflow;             /* hflow for channel       */
857         unsigned long   info_reserved[8];       /* for future expansion    */
858 };
859
860 #define DIGI_GETSTAT    (('d'<<8) | 244)        /* get board info          */
861 /************************************************************************
862  *
863  * Structure used with ioctl commands for per-channel information
864  *
865  ************************************************************************/
866 struct digi_ch {
867         unsigned long   info_bdnum;             /* Board number (0 based)  */
868         unsigned long   info_channel;           /* Channel index number    */
869         unsigned long   info_ch_cflag;          /* Channel cflag           */
870         unsigned long   info_ch_iflag;          /* Channel iflag           */
871         unsigned long   info_ch_oflag;          /* Channel oflag           */
872         unsigned long   info_chsize;            /* Channel structure size  */
873         unsigned long   info_sleep_stat;        /* sleep status            */
874         dev_t           info_dev;               /* device number           */
875         unsigned char   info_initstate;         /* Channel init state      */
876         unsigned char   info_running;           /* Channel running state   */
877         long            reserved[8];            /* reserved for future use */
878 };
879
880 /*
881 * This structure is used with the DIGI_FEPCMD ioctl to
882 * tell the driver which port to send the command for.
883 */
884 struct digi_cmd {
885         int     cmd;
886         int     word;
887         int     ncmds;
888         int     chan; /* channel index (zero based) */
889         int     bdid; /* board index (zero based) */
890 };
891
892 /*
893 *  info_sleep_stat defines
894 */
895 #define INFO_RUNWAIT    0x0001
896 #define INFO_WOPEN      0x0002
897 #define INFO_TTIOW      0x0004
898 #define INFO_CH_RWAIT   0x0008
899 #define INFO_CH_WEMPTY  0x0010
900 #define INFO_CH_WLOW    0x0020
901 #define INFO_XXBUF_BUSY 0x0040
902
903 #define DIGI_GETCH      (('d'<<8) | 245)        /* get board info          */
904
905 /* Board type definitions */
906
907 #define SUBTYPE         0007
908 #define T_PCXI          0000
909 #define T_PCXM          0001
910 #define T_PCXE          0002
911 #define T_PCXR          0003
912 #define T_SP            0004
913 #define T_SP_PLUS       0005
914 #       define T_HERC   0000
915 #       define T_HOU    0001
916 #       define T_LON    0002
917 #       define T_CHA    0003
918 #define FAMILY          0070
919 #define T_COMXI         0000
920 #define T_PCXX          0010
921 #define T_CX            0020
922 #define T_EPC           0030
923 #define T_PCLITE        0040
924 #define T_SPXX          0050
925 #define T_AVXX          0060
926 #define T_DXB           0070
927 #define T_A2K_4_8       0070
928 #define BUSTYPE         0700
929 #define T_ISABUS        0000
930 #define T_MCBUS         0100
931 #define T_EISABUS       0200
932 #define T_PCIBUS        0400
933
934 /* Board State Definitions */
935
936 #define BD_RUNNING      0x0
937 #define BD_REASON       0x7f
938 #define BD_NOTFOUND     0x1
939 #define BD_NOIOPORT     0x2
940 #define BD_NOMEM        0x3
941 #define BD_NOBIOS       0x4
942 #define BD_NOFEP        0x5
943 #define BD_FAILED       0x6
944 #define BD_ALLOCATED    0x7
945 #define BD_TRIBOOT      0x8
946 #define BD_BADKME       0x80
947
948 #define DIGI_LOOPBACK   (('d'<<8) | 252)        /* Enable/disable UART  */
949                                                 /* internal loopback    */
950 #define DIGI_SPOLL      (('d'<<8) | 254)        /* change poller rate   */
951
952 #define DIGI_SETCUSTOMBAUD _IOW('e', 106, int)  /* Set integer baud rate */
953 #define DIGI_GETCUSTOMBAUD _IOR('e', 107, int)  /* Get integer baud rate */
954 #define DIGI_RESET_PORT    (('e'<<8) | 93)      /* Reset port            */
955
956 /************************************************************************
957  * Channel information structure.
958  ************************************************************************/
959 struct channel_t {
960         int magic;                      /* Channel Magic Number         */
961         struct bs_t __iomem *ch_bs;     /* Base structure pointer       */
962         struct cm_t __iomem *ch_cm;     /* Command queue pointer        */
963         struct board_t *ch_bd;          /* Board structure pointer      */
964         u8 __iomem *ch_vaddr;           /* FEP memory origin            */
965         u8 __iomem *ch_taddr;           /* Write buffer origin          */
966         u8 __iomem *ch_raddr;           /* Read buffer origin           */
967         struct digi_t  ch_digi;         /* Transparent Print structure  */
968         struct un_t ch_tun;             /* Terminal unit info           */
969         struct un_t ch_pun;             /* Printer unit info            */
970
971         spinlock_t      ch_lock;        /* provide for serialization */
972         wait_queue_head_t ch_flags_wait;
973
974         u32     pscan_state;
975         u8      pscan_savechar;
976
977         u32 ch_portnum;                 /* Port number, 0 offset.       */
978         u32 ch_open_count;              /* open count                   */
979         u32     ch_flags;               /* Channel flags                */
980
981         u32     ch_cpstime;             /* Time for CPS calculations    */
982
983         tcflag_t ch_c_iflag;            /* channel iflags               */
984         tcflag_t ch_c_cflag;            /* channel cflags               */
985         tcflag_t ch_c_oflag;            /* channel oflags               */
986         tcflag_t ch_c_lflag;            /* channel lflags               */
987
988         u16  ch_fepiflag;               /* FEP tty iflags               */
989         u16  ch_fepcflag;               /* FEP tty cflags               */
990         u16  ch_fepoflag;               /* FEP tty oflags               */
991         u16  ch_wopen;                  /* Waiting for open process cnt */
992         u16  ch_tstart;                 /* Transmit buffer start        */
993         u16  ch_tsize;                  /* Transmit buffer size         */
994         u16  ch_rstart;                 /* Receive buffer start         */
995         u16  ch_rsize;                  /* Receive buffer size          */
996         u16  ch_rdelay;                 /* Receive delay time           */
997
998         u16     ch_tlw;                 /* Our currently set low water mark */
999
1000         u16  ch_cook;                   /* Output character mask        */
1001
1002         u8   ch_card;                   /* Card channel is on           */
1003         u8   ch_stopc;                  /* Stop character               */
1004         u8   ch_startc;                 /* Start character              */
1005
1006         u8   ch_mostat;                 /* FEP output modem status      */
1007         u8   ch_mistat;                 /* FEP input modem status       */
1008         u8   ch_mforce;                 /* Modem values to be forced    */
1009         u8   ch_mval;                   /* Force values                 */
1010         u8   ch_fepstopc;               /* FEP stop character           */
1011         u8   ch_fepstartc;              /* FEP start character          */
1012
1013         u8   ch_astopc;                 /* Auxiliary Stop character     */
1014         u8   ch_astartc;                /* Auxiliary Start character    */
1015         u8   ch_fepastopc;              /* Auxiliary FEP stop char      */
1016         u8   ch_fepastartc;             /* Auxiliary FEP start char     */
1017
1018         u8   ch_hflow;                  /* FEP hardware handshake       */
1019         u8   ch_dsr;                    /* stores real dsr value        */
1020         u8   ch_cd;                     /* stores real cd value         */
1021         u8   ch_tx_win;                 /* channel tx buffer window     */
1022         u8   ch_rx_win;                 /* channel rx buffer window     */
1023         uint    ch_custom_speed;        /* Custom baud, if set          */
1024         uint    ch_baud_info;           /* Current baud info for /proc output */
1025         ulong   ch_rxcount;             /* total of data received so far      */
1026         ulong   ch_txcount;             /* total of data transmitted so far   */
1027         ulong   ch_err_parity;          /* Count of parity errors on channel  */
1028         ulong   ch_err_frame;           /* Count of framing errors on channel */
1029         ulong   ch_err_break;           /* Count of breaks on channel   */
1030         ulong   ch_err_overrun;         /* Count of overruns on channel */
1031 };
1032
1033 /************************************************************************
1034  * Command structure definition.
1035  ************************************************************************/
1036 struct cm_t {
1037         unsigned short cm_head;         /* Command buffer head offset */
1038         unsigned short cm_tail;         /* Command buffer tail offset */
1039         unsigned short cm_start;        /* start offset of buffer     */
1040         unsigned short cm_max;          /* last offset of buffer      */
1041 };
1042
1043 /************************************************************************
1044  * Event structure definition.
1045  ************************************************************************/
1046 struct ev_t {
1047         unsigned short ev_head;         /* Command buffer head offset */
1048         unsigned short ev_tail;         /* Command buffer tail offset */
1049         unsigned short ev_start;        /* start offset of buffer     */
1050         unsigned short ev_max;          /* last offset of buffer      */
1051 };
1052
1053 /************************************************************************
1054  * Download buffer structure.
1055  ************************************************************************/
1056 struct downld_t {
1057         u8      dl_type;                /* Header                       */
1058         u8      dl_seq;                 /* Download sequence            */
1059         ushort  dl_srev;                /* Software revision number     */
1060         ushort  dl_lrev;                /* Low revision number          */
1061         ushort  dl_hrev;                /* High revision number         */
1062         ushort  dl_seg;                 /* Start segment address        */
1063         ushort  dl_size;                /* Number of bytes to download  */
1064         u8      dl_data[1024];          /* Download data                */
1065 };
1066
1067 /************************************************************************
1068  * Per channel buffer structure
1069  ************************************************************************
1070  *              Base Structure Entries Usage Meanings to Host           *
1071  *                                                                      *
1072  *        W = read write        R = read only                           *
1073  *        C = changed by commands only                                  *
1074  *        U = unknown (may be changed w/o notice)                       *
1075  ************************************************************************/
1076 struct bs_t {
1077         unsigned short  tp_jmp;         /* Transmit poll jump    */
1078         unsigned short  tc_jmp;         /* Cooked procedure jump */
1079         unsigned short  ri_jmp;         /* Not currently used    */
1080         unsigned short  rp_jmp;         /* Receive poll jump     */
1081
1082         unsigned short  tx_seg;         /* W Tx segment  */
1083         unsigned short  tx_head;        /* W Tx buffer head offset */
1084         unsigned short  tx_tail;        /* R Tx buffer tail offset */
1085         unsigned short  tx_max;         /* W Tx buffer size - 1    */
1086
1087         unsigned short  rx_seg;         /* W Rx segment     */
1088         unsigned short  rx_head;        /* W Rx buffer head offset */
1089         unsigned short  rx_tail;        /* R Rx buffer tail offset */
1090         unsigned short  rx_max;         /* W Rx buffer size - 1    */
1091
1092         unsigned short  tx_lw;          /* W Tx buffer low water mark */
1093         unsigned short  rx_lw;          /* W Rx buffer low water mark */
1094         unsigned short  rx_hw;          /* W Rx buffer high water mark*/
1095         unsigned short  incr;           /* W Increment to next channel*/
1096
1097         unsigned short  fepdev;         /* U SCC device base address  */
1098         unsigned short  edelay;         /* W Exception delay          */
1099         unsigned short  blen;           /* W Break length             */
1100         unsigned short  btime;          /* U Break complete time      */
1101
1102         unsigned short  iflag;          /* C UNIX input flags         */
1103         unsigned short  oflag;          /* C UNIX output flags        */
1104         unsigned short  cflag;          /* C UNIX control flags       */
1105         unsigned short  wfill[13];      /* U Reserved for expansion   */
1106
1107         unsigned char   num;            /* U Channel number           */
1108         unsigned char   ract;           /* U Receiver active counter  */
1109         unsigned char   bstat;          /* U Break status bits        */
1110         unsigned char   tbusy;          /* W Transmit busy            */
1111         unsigned char   iempty;         /* W Transmit empty event     */
1112                                         /* enable                     */
1113         unsigned char   ilow;           /* W Transmit low-water event */
1114                                         /* enable                     */
1115         unsigned char   idata;          /* W Receive data interrupt   */
1116                                         /* enable                     */
1117         unsigned char   eflag;          /* U Host event flags         */
1118
1119         unsigned char   tflag;          /* U Transmit flags           */
1120         unsigned char   rflag;          /* U Receive flags            */
1121         unsigned char   xmask;          /* U Transmit ready flags     */
1122         unsigned char   xval;           /* U Transmit ready value     */
1123         unsigned char   m_stat;         /* RC Modem status bits       */
1124         unsigned char   m_change;       /* U Modem bits which changed */
1125         unsigned char   m_int;          /* W Modem interrupt enable   */
1126                                         /* bits                       */
1127         unsigned char   m_last;         /* U Last modem status        */
1128
1129         unsigned char   mtran;          /* C Unreported modem trans   */
1130         unsigned char   orun;           /* C Buffer overrun occurred  */
1131         unsigned char   astartc;        /* W Auxiliary Xon char       */
1132         unsigned char   astopc;         /* W Auxiliary Xoff char      */
1133         unsigned char   startc;         /* W Xon character            */
1134         unsigned char   stopc;          /* W Xoff character           */
1135         unsigned char   vnextc;         /* W Vnext character          */
1136         unsigned char   hflow;          /* C Software flow control    */
1137
1138         unsigned char   fillc;          /* U Delay Fill character     */
1139         unsigned char   ochar;          /* U Saved output character   */
1140         unsigned char   omask;          /* U Output character mask    */
1141
1142         unsigned char   bfill[13];      /* U Reserved for expansion   */
1143
1144         unsigned char   scc[16];        /* U SCC registers            */
1145 };
1146
1147 struct cnode {
1148         struct cnode *next;
1149         int type;
1150         int numbrd;
1151
1152         union {
1153                 struct {
1154                         char  type;     /* Board Type           */
1155                         long  port;     /* I/O Address          */
1156                         char  *portstr; /* I/O Address in string */
1157                         long  addr;     /* Memory Address       */
1158                         char  *addrstr; /* Memory Address in string */
1159                         long  pcibus;   /* PCI BUS              */
1160                         char  *pcibusstr; /* PCI BUS in string */
1161                         long  pcislot;  /* PCI SLOT             */
1162                         char  *pcislotstr; /* PCI SLOT in string */
1163                         long  nport;    /* Number of Ports      */
1164                         char  *id;      /* tty id               */
1165                         long  start;    /* start of tty counting */
1166                         char  *method;  /* Install method       */
1167                         char  v_port;
1168                         char  v_addr;
1169                         char  v_pcibus;
1170                         char  v_pcislot;
1171                         char  v_nport;
1172                         char  v_id;
1173                         char  v_start;
1174                         char  v_method;
1175                         char  line1;
1176                         char  line2;
1177                         char  conc1;   /* total concs in line1 */
1178                         char  conc2;   /* total concs in line2 */
1179                         char  module1; /* total modules for line1 */
1180                         char  module2; /* total modules for line2 */
1181                         char  *status; /* config status */
1182                         char  *dimstatus;        /* Y/N */
1183                         int   status_index; /* field pointer */
1184                 } board;
1185
1186                 struct {
1187                         char  *cable;
1188                         char  v_cable;
1189                         long  speed;
1190                         char  v_speed;
1191                 } line;
1192
1193                 struct {
1194                         char  type;
1195                         char  *connect;
1196                         long  speed;
1197                         long  nport;
1198                         char  *id;
1199                         char  *idstr;
1200                         long  start;
1201                         char  v_connect;
1202                         char  v_speed;
1203                         char  v_nport;
1204                         char  v_id;
1205                         char  v_start;
1206                 } conc;
1207
1208                 struct {
1209                         char type;
1210                         long nport;
1211                         char *id;
1212                         char *idstr;
1213                         long start;
1214                         char v_nport;
1215                         char v_id;
1216                         char v_start;
1217                 } module;
1218
1219                 char *ttyname;
1220                 char *cuname;
1221                 char *printname;
1222                 long majornumber;
1223                 long altpin;
1224                 long ttysize;
1225                 long chsize;
1226                 long bssize;
1227                 long unsize;
1228                 long f2size;
1229                 long vpixsize;
1230                 long useintr;
1231         } u;
1232 };
1233 #endif