| /* | 
 |  * 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 DUART in the Galileo eval board | 
 |  * modifications (c) Josh Huber <huber@mclx.com>, Mission Critical Linux, Inc. | 
 |  */ | 
 |  | 
 | #ifndef __NS16550_H__ | 
 | #define __NS16550_H__ | 
 |  | 
 | /* the padding is necessary because on the galileo board the UART is | 
 |    wired in with the 3 address lines shifted over by 2 bits */ | 
 | struct NS16550 | 
 | { | 
 | 	unsigned char rbr;  /* 0 = 0-3*/ | 
 | 	int pad1:24; | 
 |  | 
 | 	unsigned char ier;  /* 1 = 4-7*/ | 
 | 	int pad2:24; | 
 |  | 
 | 	unsigned char fcr;  /* 2 = 8-b*/ | 
 | 	int pad3:24; | 
 |  | 
 | 	unsigned char lcr;  /* 3 = c-f*/ | 
 | 	int pad4:24; | 
 |  | 
 | 	unsigned char mcr;  /* 4 = 10-13*/ | 
 | 	int pad5:24; | 
 |  | 
 | 	unsigned char lsr;  /* 5 = 14-17*/ | 
 | 	int pad6:24; | 
 |  | 
 | 	unsigned char msr;  /* 6 =18-1b*/ | 
 | 	int pad7:24; | 
 |  | 
 | 	unsigned char scr;  /* 7 =1c-1f*/ | 
 | 	int pad8:24; | 
 | } __attribute__ ((packed)); | 
 |  | 
 | /* aliases */ | 
 | #define thr rbr | 
 | #define iir fcr | 
 | #define dll rbr | 
 | #define dlm ier | 
 |  | 
 | #define FCR_FIFO_EN     0x01    /*fifo enable*/ | 
 | #define FCR_RXSR        0x02    /*reciever soft reset*/ | 
 | #define FCR_TXSR        0x04    /*transmitter soft reset*/ | 
 |  | 
 |  | 
 | #define MCR_DTR         0x01 | 
 | #define MCR_RTS         0x02 | 
 | #define MCR_DMA_EN      0x04 | 
 | #define MCR_TX_DFR      0x08 | 
 |  | 
 |  | 
 | #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*/ | 
 |  | 
 | #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 | 
 |  | 
 |  | 
 | #define COM1 0x03F8 | 
 | #define COM2 0x02F8 | 
 |  | 
 | 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); | 
 |  | 
 | typedef struct NS16550 *NS16550_t; | 
 |  | 
 | extern const NS16550_t COM_PORTS[]; | 
 |  | 
 | #endif |