/* Copyright 1987 by the Massachusetts Institute of Technology */

/*
 *------------------------------------------------------------------
 * $Source: /mit/cgw/src/gw/dev.vax/RCS/dhv.h,v $
 * $Revision: 1.1 $
 * $Date: 88/06/05 22:43:48 $
 * $Author: jon $
 *------------------------------------------------------------------
 */

#define LINES_PER_DH 8

/* device registers */
struct dhv_reg {
    unss csr;			/* control/status register */
    unss buf;			/* receive/transmit character buffer */
    unss lpr;			/* line parameter register */
    unss stat;			/* line status */
    unss lnctrl;		/* line control */
    unss addl;			/* transmit buffer address 1 (low) */
    unss addh;			/* transmit buffer address 2 (high) */
    unss cnt;			/* transmit buffer count */
};

/* CSR definitions */
#define LINE	0x000f		/* which channel to use */
#define RESET	0x0020		/* master reset */
#define RXIE	0x0040		/* receive interrupt enable */
#define RXDA	0x0080		/* receive data available */
#define TXLINE(c) ((c>>8)&0x0007) /* transmit line number */
#define DMAERR	0x1000		/* transmit DMA error */
#define DIAGFAIL 0x2000		/* diagnostic failure */
#define TXIE	0x4000		/* transmit interrupt enable */
#define TXACTION 0x8000		/* transmit action (cleared by reading CSR) */

/* RBUF definitions */
#define RXLINE(c) ((c>>8)&0x0007) /* line character came from */
#define PARITY	0x1000		/* parity error */
#define FRAME	0x2000		/* framing error (also break) */
#define OVERRUN	0x4000		/* characters lost due to overrun */
#define VALID	0x8000		/* FIFO is not empty */
#define FIFO_DIAG(rbuf) ((rbuf & 0x7001) == 0x7001) /* diagnostic info */
#define FIFO_MDM(rbuf) ((rbuf & 0x7001) == 0x7000) /* modem staus change */
#define FIFO_STAT(stat) (stat << 8)

/* LPR definitions */
#define NORM	0x0000		/* Normal operation */
#define BMP	0x0001		/* generate BMP reports */
#define DHCHAR5	0x0000		/* 5 bit characters */
#define DHCHAR6	0x0008		/* 6 bit characters */
#define DHCHAR7	0x0010		/* 7 bit characters */
#define DHCHAR8	0x0018		/* 8 bit characters */
#define PAREN	0x0020		/* parity enable */
#define PAREVN	0x0040		/* parity even */
#define DHSTOP1	0x0000		/* 1 stop bit */
#define DHSTOP2	0x0080		/* 2 stop bits */
#define RXSPEED(speed) (speed << 8) /* receive speed */
#define TXSPEED(speed) (speed << 12) /* transmit speed */

/* Baud rates (can use the numbers straight out of async.h) */
/* Pairs of lines must come from the same group (A or B)
BAUD_50		A
BAUD_75		B
BAUD_110	A&B
BAUD_134	A&B
BAUD_150	B
BAUD_300	A&B
BAUD_600	A&B
BAUD_1200	A&B
BAUD_1800	B
BAUD_2000	B
BAUD_2400	A&B
BAUD_4800	A&B
BAUD_7200	A
BAUD_9600	A&B
BAUD_19200	B
BAUD_38400	A
 */

/* STAT definitions */
#define CTS	0x0800		/* Clear To Send */
#define DCD	0x1000		/* Data Carrier Detect */
#define RI	0x2000		/* Ring Indicator */
#define DSR	0x8000		/* Data Set Ready */

/* LNCTRL definitions */
#define DMA_ABORT 0x0001	/* halt a DMA transmission */
#define IAUTO	0x0002		/* input XON/XOFF */
#define RXENA	0x0004		/* receive enable */
#define BREAK	0x0008		/* send break */
#define OAUTO	0x0010		/* output XON/XOFF */
#define XOFF	0x0020		/* send XOFF */
#define AUTOECHO 0x0040		/* Auto Echo mode */
#define LLOOP	0x0080		/* local loopback */
#define RLOOP	0x00c0		/* remote loopback */
#define DHMODEM	0x0100		/* connected to a modem */
#define DTR	0x0200		/* controls Data Terminal Ready */
#define RTS	0x1000		/* controls Request To Send */

/* Transmit Buffer Address 2 register. */
#define ADDRHI	0x003f		/* High bits of address */
#define DMASTART 0x0080		/* Starts the DMA transfer */
#define TXENA	0x8000		/* Enables transmission */
