@ -16,102 +16,46 @@
* by Richard Danter ( richard . danter @ windriver . com ) , ( C ) 2005 Wind River Systems
*/
# if (CONFIG_SYS_NS16550_REG_SIZE == 1)
struct NS16550 {
unsigned char rbr ; /* 0 */
unsigned char ier ; /* 1 */
unsigned char fcr ; /* 2 */
unsigned char lcr ; /* 3 */
unsigned char mcr ; /* 4 */
unsigned char lsr ; /* 5 */
unsigned char msr ; /* 6 */
unsigned char scr ; /* 7 */
# if defined(CONFIG_OMAP730)
unsigned char mdr1 ; /* 8 */
unsigned char reg9 ; /* 9 */
unsigned char regA ; /* A */
unsigned char regB ; /* B */
unsigned char regC ; /* C */
unsigned char regD ; /* D */
unsigned char regE ; /* E */
unsigned char regF ; /* F */
unsigned char reg10 ; /* 10 */
unsigned char ssr ; /* 11*/
# endif
} __attribute__ ( ( packed ) ) ;
# elif (CONFIG_SYS_NS16550_REG_SIZE == 2)
struct NS16550 {
unsigned short rbr ; /* 0 */
unsigned short ier ; /* 1 */
unsigned short fcr ; /* 2 */
unsigned short lcr ; /* 3 */
unsigned short mcr ; /* 4 */
unsigned short lsr ; /* 5 */
unsigned short msr ; /* 6 */
unsigned short scr ; /* 7 */
} __attribute__ ( ( packed ) ) ;
# elif (CONFIG_SYS_NS16550_REG_SIZE == 4)
struct NS16550 {
unsigned long rbr ; /* 0 r */
unsigned long ier ; /* 1 rw */
unsigned long fcr ; /* 2 w */
unsigned long lcr ; /* 3 rw */
unsigned long mcr ; /* 4 rw */
unsigned long lsr ; /* 5 r */
unsigned long msr ; /* 6 r */
unsigned long scr ; /* 7 rw */
} ; /* No need to pack an already aligned struct */
# elif (CONFIG_SYS_NS16550_REG_SIZE == -4)
struct NS16550 {
unsigned char rbr ; /* 0 */
int pad1 : 24 ;
unsigned char ier ; /* 1 */
int pad2 : 24 ;
unsigned char fcr ; /* 2 */
int pad3 : 24 ;
unsigned char lcr ; /* 3 */
int pad4 : 24 ;
unsigned char mcr ; /* 4 */
int pad5 : 24 ;
unsigned char lsr ; /* 5 */
int pad6 : 24 ;
unsigned char msr ; /* 6 */
int pad7 : 24 ;
unsigned char scr ; /* 7 */
int pad8 : 24 ;
# if defined(CONFIG_OMAP)
unsigned char mdr1 ; /* mode select reset TL16C750*/
# endif
# ifdef CONFIG_OMAP1510
int pad9 : 24 ;
unsigned long pad [ 10 ] ;
unsigned char osc_12m_sel ;
int pad10 : 24 ;
# endif
} __attribute__ ( ( packed ) ) ;
# elif (CONFIG_SYS_NS16550_REG_SIZE == -8)
struct NS16550 {
unsigned char rbr ; /* 0 */
unsigned char pad0 [ 7 ] ;
unsigned char ier ; /* 1 */
unsigned char pad1 [ 7 ] ;
unsigned char fcr ; /* 2 */
unsigned char pad2 [ 7 ] ;
unsigned char lcr ; /* 3 */
unsigned char pad3 [ 7 ] ;
unsigned char mcr ; /* 4 */
unsigned char pad4 [ 7 ] ;
unsigned char lsr ; /* 5 */
unsigned char pad5 [ 7 ] ;
unsigned char msr ; /* 6 */
unsigned char pad6 [ 7 ] ;
unsigned char scr ; /* 7 */
unsigned char pad7 [ 7 ] ;
} __attribute__ ( ( packed ) ) ;
# else
/*
* Note that the following macro magic uses the fact that the compiler
* will not allocate storage for arrays of size 0
*/
# if !defined(CONFIG_SYS_NS16550_REG_SIZE) || (CONFIG_SYS_NS16550_REG_SIZE == 0)
# error "Please define NS16550 registers size."
# elif (CONFIG_SYS_NS16550_REG_SIZE > 0)
# define UART_REG(x) \
unsigned char prepad_ # # x [ CONFIG_SYS_NS16550_REG_SIZE - 1 ] ; \
unsigned char x ;
# elif (CONFIG_SYS_NS16550_REG_SIZE < 0)
# define UART_REG(x) \
unsigned char x ; \
unsigned char postpad_ # # x [ - CONFIG_SYS_NS16550_REG_SIZE - 1 ] ;
# endif
struct NS16550 {
UART_REG ( rbr ) ; /* 0 */
UART_REG ( ier ) ; /* 1 */
UART_REG ( fcr ) ; /* 2 */
UART_REG ( lcr ) ; /* 3 */
UART_REG ( mcr ) ; /* 4 */
UART_REG ( lsr ) ; /* 5 */
UART_REG ( msr ) ; /* 6 */
UART_REG ( spr ) ; /* 7 */
UART_REG ( mdr1 ) ; /* 8 */
UART_REG ( reg9 ) ; /* 9 */
UART_REG ( regA ) ; /* A */
UART_REG ( regB ) ; /* B */
UART_REG ( regC ) ; /* C */
UART_REG ( regD ) ; /* D */
UART_REG ( regE ) ; /* E */
UART_REG ( uasr ) ; /* F */
UART_REG ( scr ) ; /* 10*/
UART_REG ( ssr ) ; /* 11*/
UART_REG ( reg12 ) ; /* 12*/
UART_REG ( osc_12m_sel ) ; /* 13*/
} ;
# define thr rbr
# define iir fcr
# define dll rbr