/*
 * NS16550 Serial Port
 * originally from linux source (arch/ppc/boot/ns16550.h)
 * modified slightly to
 * have addresses as offsets from CFG_ISA_BASE
 * added a few more definitions
 * added prototypes for ns16550.c
 * reduced no of com ports to 2
 * modifications (c) Rob Taylor, Flying Pig Systems. 2000.
 * further modified to support the 8245 duart
 * modifications (c) Paul Jimenez, Musenki, Inc. 2001.
 */


struct NS16550
 {
  unsigned char rbrthrdlb;  /* 0 */
  unsigned char ierdmb;     /* 1 */
  unsigned char iirfcrafr;  /* 2 */
  unsigned char lcr;         /* 3 */
  unsigned char mcr;         /* 4 */
  unsigned char lsr;         /* 5 */
  unsigned char msr;         /* 6 */
  unsigned char scr;         /* 7 */
  unsigned char reserved[2]; /* 8 & 9 */
  unsigned char dsr;         /* 10 */
  unsigned char dcr;         /* 11 */
 };


#define rbr rbrthrdlb
#define thr rbrthrdlb
#define dll rbrthrdlb
#define ier ierdmb
#define dlm ierdmb
#define iir iirfcrafr
#define fcr iirfcrafr
#define afr iirfcrafr

#define FCR_FIFO_EN     0x01    /*fifo enable*/
#define FCR_RXSR        0x02    /*reciever soft reset*/
#define FCR_TXSR        0x04    /*transmitter soft reset*/
#define FCR_DMS		0x08    /* DMA Mode Select */

#define MCR_RTS         0x02    /* Readyu to Send */
#define MCR_LOOP	0x10	/* Local loopback mode enable */
/* #define MCR_DTR         0x01    noton 8245 duart */
/* #define MCR_DMA_EN      0x04    noton 8245 duart */
/* #define MCR_TX_DFR      0x08    noton 8245 duart */

#define LCR_WLS_MSK 0x03    /* character length slect mask*/
#define LCR_WLS_5   0x00    /* 5 bit character length */
#define LCR_WLS_6   0x01    /* 6 bit character length */
#define LCR_WLS_7   0x02    /* 7 bit character length */
#define LCR_WLS_8   0x03    /* 8 bit character length */
#define LCR_STB     0x04    /* Number of stop Bits, off = 1, on = 1.5 or 2) */
#define LCR_PEN     0x08    /* Parity eneble*/
#define LCR_EPS     0x10    /* Even Parity Select*/
#define LCR_STKP    0x20    /* Stick Parity*/
#define LCR_SBRK    0x40    /* Set Break*/
#define LCR_BKSE    0x80    /* Bank select enable - aka DLAB on 8245 */

#define LSR_DR      0x01    /* Data ready */
#define LSR_OE      0x02    /* Overrun */
#define LSR_PE      0x04    /* Parity error */
#define LSR_FE      0x08    /* Framing error */
#define LSR_BI      0x10    /* Break */
#define LSR_THRE    0x20    /* Xmit holding register empty */
#define LSR_TEMT    0x40    /* Xmitter empty */
#define LSR_ERR     0x80    /* Error */

/* useful defaults for LCR*/
#define LCR_8N1     0x03


volatile struct NS16550 * NS16550_init(int chan, int baud_divisor);
void NS16550_putc(volatile struct NS16550 *com_port, unsigned char c);
unsigned char NS16550_getc(volatile struct NS16550 *com_port);
int NS16550_tstc(volatile struct NS16550 *com_port);
void NS16550_reinit(volatile struct NS16550 *com_port, int baud_divisor);

