#ifndef _IMXUARTREG_H
#define _IMXUARTREG_H
#define IMX_URXD 0x00
#define IMX_UTXD 0x40
#define IMX_UCR1 0x80
#define IMX_UCR2 0x84
#define IMX_UCR3 0x88
#define IMX_UCR4 0x8c
#define IMX_UCRn(n) (IMX_UCR1 + ((n) << 2))
#define IMX_UFCR 0x90
#define IMX_USR1 0x94
#define IMX_USR2 0x98
#define IMX_USRn(n) (IMX_USR1 + ((n) << 2))
#define IMX_UESC 0x9c
#define IMX_UTIM 0xa0
#define IMX_UBIR 0xa4
#define IMX_UBMR 0xa8
#define IMX_UBRC 0xac
#define IMX_ONEMS 0xb0
#define IMX_UTS 0xb4
#define IMX_UART_SIZE 0xb8
#define IMX_URXD_RX_DATA __BITS(7,0)
#define IMX_URXD_RESV __BITS(9,8)
#define IMX_URXD_PRERR __BIT(10)
#define IMX_URXD_BRK __BIT(11)
#define IMX_URXD_FRMERR __BIT(12)
#define IMX_URXD_OVRRUN __BIT(13)
#define IMX_URXD_ERR __BIT(14)
#define IMX_URXD_CHARDY __BIT(15)
#define IMX_UTXD_TX_DATA __BITS(7,0)
#define IMX_UTXD_RESV __BITS(15,8)
#define IMX_UCR1_UARTEN __BIT(0)
#define IMX_UCR1_DOZE __BIT(1)
#define IMX_UCR1_ATDMAEN __BIT(2)
#define IMX_UCR1_TXDMAEN __BIT(3)
#define IMX_UCR1_SNDBRK __BIT(4)
#define IMX_UCR1_RTSDEN __BIT(5)
#define IMX_UCR1_TXMPTYEN __BIT(6)
#define IMX_UCR1_IREN __BIT(7)
#define IMX_UCR1_RXDMAEN __BIT(8)
#define IMX_UCR1_RRDYEN __BIT(9)
#define IMX_UCR1_ICD __BITS(11,10)
#define IMX_UCR1_IDEN __BIT(12)
#define IMX_UCR1_TRDYEN __BIT(13)
#define IMX_UCR1_ADBR __BIT(14)
#define IMX_UCR1_ADEN __BIT(15)
#define IMX_UCR2_SRST __BIT(0)
#define IMX_UCR2_RXEN __BIT(1)
#define IMX_UCR2_TXEN __BIT(2)
#define IMX_UCR2_ATEN __BIT(3)
#define IMX_UCR2_RTSEN __BIT(4)
#define IMX_UCR2_WS __BIT(5)
#define IMX_UCR2_STPB __BIT(6)
#define IMX_UCR2_PROE __BIT(7)
#define IMX_UCR2_PREN __BIT(8)
#define IMX_UCR2_RTEC __BITS(10,9)
#define IMX_UCR2_ESCEN __BIT(11)
#define IMX_UCR2_CTS __BIT(12)
#define IMX_UCR2_CTSC __BIT(13)
#define IMX_UCR2_IRTS __BIT(14)
#define IMX_UCR2_ESCI __BIT(15)
#define IMX_UCR3_ACIEN __BIT(0)
#define IMX_UCR3_INVT __BIT(1)
#define IMX_UCR3_RXDMUXSEL __BIT(2)
#define IMX_UCR3_DTRDEN __BIT(3)
#define IMX_UCR3_AWAKEN __BIT(4)
#define IMX_UCR3_AIRINTEN __BIT(5)
#define IMX_UCR3_RXDSEN __BIT(6)
#define IMX_UCR3_ADNIMP __BIT(7)
#define IMX_UCR3_RI __BIT(8)
#define IMX_UCR3_DCD __BIT(9)
#define IMX_UCR3_DSR __BIT(10)
#define IMX_UCR3_FRAERREN __BIT(11)
#define IMX_UCR3_PARERREN __BIT(12)
#define IMX_UCR3_DTREN __BIT(13)
#define IMX_UCR3_DPEC __BITS(15,14)
#define IMX_UCR4_DREN __BIT(0)
#define IMX_UCR4_OREN __BIT(1)
#define IMX_UCR4_BKEN __BIT(2)
#define IMX_UCR4_TCEN __BIT(3)
#define IMX_UCR4_LPBYP __BIT(4)
#define IMX_UCR4_IRSC __BIT(5)
#define IMX_UCR4_IDDMAEN __BIT(6)
#define IMX_UCR4_WKEN __BIT(7)
#define IMX_UCR4_ENIRI __BIT(8)
#define IMX_UCR4_INVR __BIT(9)
#define IMX_UCR4_CTSTL __BITS(15,10)
#define IMX_UFCR_RXTL_SHIFT 0
#define IMX_UFCR_RXTL __BITS(5,IMX_UFCR_RXTL_SHIFT)
#define IMX_UFCR_DCEDTE __BIT(6)
#define IMX_UFCR_RFDIV_SHIFT 7
#define IMX_UFCR_RFDIV __BITS(9,IMX_UFCR_RFDIV_SHIFT)
#define IMX_UFCR_TXTL_SHIFT 10
#define IMX_UFCR_TXTL __BITS(15,IMX_UFCR_TXTL_SHIFT)
#define IMX_UFCR_DIVIDER_TO_RFDIV(div) \
(((6 - div) % 7) & 0x7)
#define IMX_USR1_RESV __BITS(3,0)
#define IMX_USR1_AWAKE __BIT(4)
#define IMX_USR1_AIRINT __BIT(5)
#define IMX_USR1_RXDS __BIT(6)
#define IMX_USR1_DTRD __BIT(7)
#define IMX_USR1_AGTIM __BIT(8)
#define IMX_USR1_RRDY __BIT(9)
#define IMX_USR1_FRAMERR __BIT(10)
#define IMX_USR1_ESCF __BIT(11)
#define IMX_USR1_RTSD __BIT(12)
#define IMX_USR1_TRDY __BIT(13)
#define IMX_USR1_RTSS __BIT(14)
#define IMX_USR1_PARITYERR __BIT(15)
#define IMX_USR2_RDR __BIT(0)
#define IMX_USR2_ORE __BIT(1)
#define IMX_USR2_BRCD __BIT(2)
#define IMX_USR2_TXDC __BIT(3)
#define IMX_USR2_RTSF __BIT(4)
#define IMX_USR2_DCDIN __BIT(5)
#define IMX_USR2_DCDDELT __BIT(6)
#define IMX_USR2_WAKE __BIT(7)
#define IMX_USR2_IRINT __BIT(8)
#define IMX_USR2_RIIN __BIT(9)
#define IMX_USR2_RIDELT __BIT(10)
#define IMX_USR2_ACST __BIT(11)
#define IMX_USR2_IDLE __BIT(12)
#define IMX_USR2_DTRF __BIT(13)
#define IMX_USR2_TXFE __BIT(14)
#define IMX_USR2_ADET __BIT(15)
#define IMX_UESC_ESC_CHAR __BITS(7,0)
#define IMX_UESC_RESV __BITS(15,8)
#define IMX_UTIM_TIM __BITS(11,0)
#define IMX_UTIM_RESV __BITS(15,12)
#define IMX_UBIR_INC __BITS(15,0)
#define IMX_UBMR_MOD __BITS(15,0)
#define IMX_UBRC_BCNT __BITS(15,0)
#define IMX_ONEMS_ONEMS __BITS(15,0)
#define IMX_UTS_SOFTRST __BIT(0)
#define IMX_UTS_RESVa __BITS(2,1)
#define IMX_UTS_RXFULL __BIT(3)
#define IMX_UTS_TXFUL __BIT(4)
#define IMX_UTS_RXEMPTY __BIT(5)
#define IMX_UTS_TXEMPTY __BIT(5)
#define IMX_UTS_RESVb __BITS(8,7)
#define IMX_UTS_RXDBG __BIT(9)
#define IMX_UTS_LOOPIR __BIT(10)
#define IMX_UTS_DBGEN __BIT(11)
#define IMX_UTS_LOOP __BIT(12)
#define IMX_UTS_FRCPERR __BIT(13)
#define IMX_UTS_RESVc __BITS(15,14)
#define IMX_UTS_RESV (IMX_UTS_RESVa|IMX_UTS_RESVb|IMX_UTS_RESVc)
#ifndef __ASSEMBLER__
typedef enum {
RX_RRDY=0,
RX_ID,
RX_DR,
RX_RXDS,
RX_AT,
TX_TXMPTY,
TX_TRDY,
TX_TC,
MINT_OR,
MINT_BR,
MINT_WK,
MINT_AD,
MINT_ACI,
MINT_ESCI,
MINT_IRI,
MINT_AIRINT,
MINT_AWAK,
MINT_FRAERR,
MINT_PARERR,
MINT_RTSD,
MINT_RTS,
MINT_DCE_DTR,
MINT_DTE_RI,
MINT_DTE_DCE,
MINT_DTRD,
RX_DMAREQ_RXDMA,
RX_DMAREQ_ATDMA,
RX_DMAREQ_IDDMA,
RX_DMAREQ_TXDMA,
} imxuart_intrix_t;
typedef struct {
const uint32_t enb_bit;
const uint enb_reg;
const uint32_t flg_bit;
const uint flg_reg;
const char * name;
} imxuart_intrspec_t;
#define IMXUART_INTRSPEC(cv, cr, sv, sr) \
{ IMX_UCR##cr##_##cv, ((cr) - 1), IMX_USR##sr##_##sv, ((sr) - 1), #sv }
static const imxuart_intrspec_t imxuart_intrspec_tab[] = {
IMXUART_INTRSPEC(RRDYEN, 1, RRDY, 1),
IMXUART_INTRSPEC(IDEN, 1, IDLE, 2),
IMXUART_INTRSPEC(DREN, 4, RDR, 2),
IMXUART_INTRSPEC(RXDSEN, 3, RXDS, 1),
IMXUART_INTRSPEC(ATEN, 2, AGTIM, 1),
IMXUART_INTRSPEC(TXMPTYEN, 1, TXFE, 2),
IMXUART_INTRSPEC(TRDYEN, 1, TRDY, 1),
IMXUART_INTRSPEC(TCEN, 4, TXDC, 2),
IMXUART_INTRSPEC(OREN, 4, ORE, 2),
IMXUART_INTRSPEC(BKEN, 4, BRCD, 2),
IMXUART_INTRSPEC(WKEN, 4, WAKE, 2),
IMXUART_INTRSPEC(ADEN, 1, ADET, 2),
IMXUART_INTRSPEC(ACIEN, 3, ACST, 2),
IMXUART_INTRSPEC(ESCI, 2, ESCF, 1),
IMXUART_INTRSPEC(ENIRI, 4, IRINT, 2),
IMXUART_INTRSPEC(AIRINTEN, 3, AIRINT, 1),
IMXUART_INTRSPEC(AWAKEN, 3, AWAKE, 1),
IMXUART_INTRSPEC(FRAERREN, 3, FRAMERR, 1),
IMXUART_INTRSPEC(PARERREN, 3, PARITYERR, 1),
IMXUART_INTRSPEC(RTSDEN, 1, RTSD, 1),
IMXUART_INTRSPEC(RTSEN, 2, RTSF, 2),
IMXUART_INTRSPEC(DTREN, 3, DTRF, 2),
IMXUART_INTRSPEC(RI, 3, DTRF, 2),
IMXUART_INTRSPEC(DCD, 3, DCDDELT, 2),
IMXUART_INTRSPEC(DTRDEN, 3, DTRD, 1),
IMXUART_INTRSPEC(RXDMAEN, 1, RRDY, 1),
IMXUART_INTRSPEC(ATDMAEN, 1, AGTIM, 1),
IMXUART_INTRSPEC(IDDMAEN, 4, IDLE, 2),
IMXUART_INTRSPEC(TXDMAEN, 1, TRDY, 1),
};
#define IMXUART_INTRSPEC_TAB_SZ \
(sizeof(imxuart_intrspec_tab) / sizeof(imxuart_intrspec_tab[0]))
#endif
#define IMXUART_RXINTR_USR1 (IMX_USR1_RRDY|IMX_USR1_RXDS|IMX_USR1_AGTIM)
#define IMXUART_RXINTR_USR2 (IMX_USR2_IDLE|IMX_USR2_RDR)
#define IMXUART_TXINTR_USR1 (IMX_USR1_TRDY)
#define IMXUART_TXINTR_USR2 (IMX_USR2_TXFE|IMX_USR2_TXDC)
#define IMXUART_MINT_USR1 (IMX_USR1_ESCF|IMX_USR1_AIRINT||IMX_USR1_AWAKE \
|IMX_USR1_FRAMERR|IMX_USR1_PARITYERR \
|IMX_USR1_RTSD|IMX_USR1_DTRD)
#define IMXUART_MINT_USR2 (IMX_USR2_ORE|IMX_USR2_BRCD|IMX_USR2_WAKE \
|IMX_USR2_ADET|IMX_USR2_ACST|IMX_USR2_IRINT \
|IMX_USR2_RTSF|IMX_USR2_DTRF|IMX_USR2_DTRF \
|IMX_USR2_DCDDELT)
#define IMXUART_RXDMA_USR1 (IMX_USR1_RRDY|IMX_USR1_AGTIM)
#define IMXUART_RXDMA_USR2 (IMX_USR2_IDLE)
#define IMXUART_TXDMA_USR1 (IMX_USR1_TRDY)
#define IMXUART_TXDMA_USR2 (0)
#define IMXUART_INTRS_USR1 (IMXUART_RXINTR_USR1|IMXUART_TXINTR_USR1 \
|IMXUART_MINT_USR1|IMXUART_RXDMA_USR1 \
|IMXUART_TXDMA_USR1)
#define IMXUART_INTRS_USR2 (IMXUART_RXINTR_USR2|IMXUART_TXINTR_USR2 \
|IMXUART_MINT_USR2|IMXUART_RXDMA_USR2 \
|IMXUART_TXDMA_USR2)
#define IMXUART_INTRS_UCR1 (IMX_UCR1_RRDYEN|IMX_UCR1_IDEN \
|IMX_UCR1_TXMPTYEN|IMX_UCR1_TRDYEN \
|IMX_UCR1_ADEN|IMX_UCR1_RTSDEN \
|IMX_UCR1_RXDMAEN|IMX_UCR1_RXDMAEN \
|IMX_UCR1_ATDMAEN|IMX_UCR1_TXDMAEN)
#define IMXUART_INTRS_UCR2 (IMX_UCR2_ATEN|IMX_UCR2_ESCI|IMX_UCR2_RTSEN)
#define IMXUART_INTRS_UCR3 (IMX_UCR3_RXDSEN|IMX_UCR3_ACIEN \
|IMX_UCR3_AIRINTEN|IMX_UCR3_AWAKEN \
|IMX_UCR3_FRAERREN|IMX_UCR3_PARERREN \
|IMX_UCR3_DTREN|IMX_UCR3_RI \
|IMX_UCR3_DCD|IMX_UCR3_DTRDEN)
#define IMXUART_INTRS_UCR4 (IMX_UCR4_DREN|IMX_UCR4_TCEN|IMX_UCR4_OREN \
|IMX_UCR4_BKEN|IMX_UCR4_WKEN \
|IMX_UCR4_ENIRI|IMX_UCR4_IDDMAEN)
#endif