/*      $NetBSD: dzreg.h,v 1.4 2005/12/11 12:21:20 christos Exp $ */
/*
* Copyright (c) 1996  Ken C. Wellsch.  All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
*    notice, this list of conditions and the following disclaimer.
* 2. The name of the author may not be used to endorse or promote products
*    derived from this software without specific prior written permission
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/

#ifndef _DEV_DEC_DZREG_H
#define _DEV_DEC_DZREG_H

union w_b
{
       u_short word;
       struct {
               u_char byte_lo;
               u_char byte_hi;
       } bytes;
};

struct DZregs
{
       volatile u_short dz_csr;        /* Control/Status Register (R/W) */
       volatile u_short dz_rbuf;       /* Receive Buffer (R only) */
#define dz_lpr           dz_rbuf        /* Line Parameter Register (W only) */
       volatile union w_b u_tcr;       /* Transmit Control Register (R/W) */
       volatile union w_b u_msr;       /* Modem Status Register (R only) */
#define u_tdr            u_msr          /* Transmit Data Register (W only) */
};

#define dz_tcr          u_tcr.bytes.byte_lo     /* tx enable bits */
#define dz_dtr          u_tcr.bytes.byte_hi     /* DTR status bits */
#define dz_ring         u_msr.bytes.byte_lo     /* RI status bits */
#define dz_dcd          u_msr.bytes.byte_hi     /* DCD status bits */
#define dz_tbuf         u_tdr.bytes.byte_lo     /* transmit character */
#define dz_break        u_tdr.bytes.byte_hi     /* BREAK set/clr bits */

typedef struct DZregs dzregs;

struct  dz_regs {
       bus_addr_t dr_csr;
       bus_addr_t dr_rbuf;
#define dr_lpr     dr_rbuf
       bus_addr_t dr_dtr;
       bus_addr_t dr_break;
       bus_addr_t dr_tbuf;
       bus_addr_t dr_tcr;
       bus_addr_t dr_tcrw;
       bus_addr_t dr_ring;
       bus_addr_t dr_dcd;

       bus_addr_t dr_firstreg;
       bus_addr_t dr_winsize;
};
#define DZ_UBA_CSR      0
#define DZ_UBA_RBUF     2
#define DZ_UBA_DTR      5
#define DZ_UBA_BREAK    7
#define DZ_UBA_TBUF     6
#define DZ_UBA_TCR      4
#define DZ_UBA_DCD      7
#define DZ_UBA_RING     6

#define DZ_UBA_FIRSTREG 0
#define DZ_UBA_WINSIZE  8

/* CSR bits */

#define DZ_CSR_TX_READY         0100000 /* Transmitter Ready */
#define DZ_CSR_TXIE             0040000 /* Transmitter Interrupt Enable */
#define DZ_CSR_SA               0020000 /* Silo Alarm */
#define DZ_CSR_SAE              0010000 /* Silo Alarm Enable */
#define DZ_CSR_TX_LINE_MASK     0007400 /* Which TX line */

#define DZ_CSR_RX_DONE          0000200 /* Receiver Done */
#define DZ_CSR_RXIE             0000100 /* Receiver Interrupt Enable */
#define DZ_CSR_MSE              0000040 /* Master Scan Enable */
#define DZ_CSR_RESET            0000020 /* Clear (reset) Controller */
#define DZ_CSR_MAINTENANCE      0000010
#define DZ_CSR_UNUSED           0000007

/* RBUF bits */

#define DZ_RBUF_DATA_VALID      0100000
#define DZ_RBUF_OVERRUN_ERR     0040000
#define DZ_RBUF_FRAMING_ERR     0020000
#define DZ_RBUF_PARITY_ERR      0010000
#define DZ_RBUF_RX_LINE_MASK    0007400

/* LPR bits */

#define DZ_LPR_UNUSED           0160000
#define DZ_LPR_RX_ENABLE        0010000

#define DZ_LPR_B50              0x0
#define DZ_LPR_B75              0x1
#define DZ_LPR_B110             0x2
#define DZ_LPR_B134             0x3
#define DZ_LPR_B150             0x4
#define DZ_LPR_B300             0x5
#define DZ_LPR_B600             0x6
#define DZ_LPR_B1200            0x7
#define DZ_LPR_B1800            0x8
#define DZ_LPR_B2000            0x9
#define DZ_LPR_B2400            0xA
#define DZ_LPR_B3600            0xB
#define DZ_LPR_B4800            0xC
#define DZ_LPR_B7200            0xD
#define DZ_LPR_B9600            0xE
#define DZ_LPR_B19200           0xF

#define DZ_LPR_OPAR             0000200
#define DZ_LPR_PARENB           0000100
#define DZ_LPR_2_STOP           0000040

#define DZ_LPR_5_BIT_CHAR       0000000
#define DZ_LPR_6_BIT_CHAR       0000010
#define DZ_LPR_7_BIT_CHAR       0000020
#define DZ_LPR_8_BIT_CHAR       0000030

#define DZ_LPR_CHANNEL_MASK     0000007

#endif /* _DEV_DEC_DZREG_H */