/*
 *-------------------------------------------------------------------
 *
 *   16550 -- header file for National Semiconducor's 16550 UART
 *
 * This file has been created by John S. Gwynne for the efi68k
 * project.
 * 
 *  The license and distribution terms for this file may in
 *  the file LICENSE in this distribution or at
 *  http://www.OARcorp.com/rtems/license.html.
 *
 *------------------------------------------------------------------
 *
 *  $Id$
 */

#ifndef _16550_H_
#define _16550_H_

/* base address is the physical location of register 0 */
#define UART_BASE_ADDRESS 0x0400001

/* definitions of register addresses and associate bits */

#define RBR (volatile unsigned char * const)(0*2+UART_BASE_ADDRESS)	
                                /* Receiver Buffer Register (w/DLAB=0)*/
				/*    8-bit data */

#define THR (volatile unsigned char * const)(0*2+UART_BASE_ADDRESS)	
                                /* Transmitter Holding Register (w/DLAB=0) */
				/*    8-bit data */

#define DLL (volatile unsigned char * const)(0*2+UART_BASE_ADDRESS)
                          	/* Divisor Latch (LS) (w/DLAB=1) */
				/*    LSB of Divisor */

#define DLM (volatile unsigned char * const)(1*2+UART_BASE_ADDRESS)
                                /* Divisor Latch (MS) (w/DLAB=1) */
				/*    MSB of Divisor */

#define IER (volatile unsigned char * const)(1*2+UART_BASE_ADDRESS)
                              	/* Interrupt Enable Register (w/DLAB=0) */
#define    ERBFI 0x01		/*    Enable Recv Data Available Interrupt */
#define    ETBEI 0x02		/*    Enable Trans Holding Reg Empty Inter */
#define    ELSI  0x04		/*    Enable Recv Line Status Interrupt */
#define    EDSSI 0x08		/*    Enable Modem Status Interrupt */

#define IIR (volatile unsigned char * const)(2*2+UART_BASE_ADDRESS)
                              	/* Interrupt Ident Register (read only) */
#define    NIP   0x01		/*    No Interrupt Pending */
#define    IID_MASK 0x0e	/*    Interrupt ID mask */
#define    FE_MASK 0xc0		/*    FIFO's Enabled */

#define FCR (volatile unsigned char * const)(2*2+UART_BASE_ADDRESS)
                             	/* FIFO Control Register (write only) */
#define    FIFO_E 0x01		/*    FIFO Enable */
#define    RFR   0x02		/*    RCVR FIFO Reset */
#define    XFR   0x04		/*    XMIT FIFO Reset */
#define    DMAMS 0x08		/*    DMA Mode Select */
#define    RCVRTG_MASK 0xC0	/*    RCVR Triger MSBit/LSBit */

#define LCR (volatile unsigned char * const)(3*2+UART_BASE_ADDRESS)
                               	/* Line Control Register */
#define    WLS_MASK 0x03	/*    Word Legth Select Mask */
#define       WL_5 0x00		/*       5 bits */
#define       WL_6 0x01		/*       6 bits */
#define       WL_7 0x02		/*       7 bits */
#define       WL_8 0x03		/*       8 bits */
#define    NSB   0x04		/*    Number of Stop Bits (set is 2/1.5) */
#define    PEN   0x08		/*    Parity Enable */
#define    EPS   0x10		/*    Even Parity Select */
#define    STP   0x20		/*    Stick Parity */
#define    SETBK 0x40		/*    Set Break */
#define    DLAB  0x80		/*    Divisor Latch Access Bit */

#define MCR (volatile unsigned char * const)(4*2+UART_BASE_ADDRESS)
                              	/* Modem Control Register */
#define    DTR   0x01		/*    Data Terminal Ready */
#define    RTS   0x02		/*    Request to Send */
#define    OUT1  0x04		/*    Out 1 */
#define    OUT2  0x08		/*    Out 2 */
#define    LOOP  0x10		/*    Loop */

#define LSR (volatile unsigned char * const)(5*2+UART_BASE_ADDRESS)
                           	/* Line Status Register */
#define    DR    0x01		/*    Data Ready */
#define    OE    0x02		/*    Overrun error */
#define    PE    0x04		/*    Parity error */
#define    FE    0x08		/*    Framing error */
#define    BI    0x10		/*    Break Interrupt */
#define    THRE  0x20		/*    Transmitter Holding Register */
#define    TEMT  0x40		/*    Transmitter Empty */
#define    RCVFIE 0x80		/*    Recv FIFO Error */

#define MDSR (volatile unsigned char * const)(6*2+UART_BASE_ADDRESS)
                           	/* Modem Status Register */
#define    DCTS  0x01		/*    Delta Clear to Send */
#define    DDSR  0x02		/*    Delta Data Set Ready */
#define    TERI  0x04		/*    Trailing Edge Ring Indicator */
#define    DDCD  0x08		/*    Delta Data Carrier Detect */
#define    CTS   0x10		/*    Clear to Send */
#define    DSR   0x20		/*    Data Set Ready */
#define    RI    0x40		/*    Ring Indicator */
#define    DCD   0x80		/*    Data Carrier Detect */

#define SCR (volatile unsigned char * const)(7*2+UART_BASE_ADDRESS)
                              	/* Scratch Register */
				/*    8-bit register */
#endif
