1*a9643ea8Slogwang /*-
2*a9643ea8Slogwang  * Copyright (c) 2010 Aleksandr Rybalko.
3*a9643ea8Slogwang  * All rights reserved.
4*a9643ea8Slogwang  *
5*a9643ea8Slogwang  * Redistribution and use in source and binary forms, with or
6*a9643ea8Slogwang  * without modification, are permitted provided that the following
7*a9643ea8Slogwang  * conditions are met:
8*a9643ea8Slogwang  * 1. Redistributions of source code must retain the above copyright
9*a9643ea8Slogwang  *    notice, this list of conditions and the following disclaimer.
10*a9643ea8Slogwang  * 2. Redistributions in binary form must reproduce the above
11*a9643ea8Slogwang  *    copyright notice, this list of conditions and the following
12*a9643ea8Slogwang  *    disclaimer in the documentation and/or other materials provided
13*a9643ea8Slogwang  *    with the distribution.
14*a9643ea8Slogwang  * 3. The names of the authors may not be used to endorse or promote
15*a9643ea8Slogwang  *    products derived from this software without specific prior
16*a9643ea8Slogwang  *    written permission.
17*a9643ea8Slogwang  *
18*a9643ea8Slogwang  * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY
19*a9643ea8Slogwang  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
20*a9643ea8Slogwang  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
21*a9643ea8Slogwang  * PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS
22*a9643ea8Slogwang  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
23*a9643ea8Slogwang  * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24*a9643ea8Slogwang  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
25*a9643ea8Slogwang  * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26*a9643ea8Slogwang  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
27*a9643ea8Slogwang  * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
28*a9643ea8Slogwang  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
29*a9643ea8Slogwang  * OF SUCH DAMAGE.
30*a9643ea8Slogwang  *
31*a9643ea8Slogwang  * $FreeBSD$
32*a9643ea8Slogwang  */
33*a9643ea8Slogwang #ifndef	_MTKUART_H
34*a9643ea8Slogwang #define	_MTKUART_H
35*a9643ea8Slogwang 
36*a9643ea8Slogwang #undef	uart_getreg
37*a9643ea8Slogwang #undef	uart_setreg
38*a9643ea8Slogwang #define	uart_getreg(bas, reg)		\
39*a9643ea8Slogwang 	bus_space_read_4((bas)->bst, (bas)->bsh, reg)
40*a9643ea8Slogwang #define	uart_setreg(bas, reg, value)	\
41*a9643ea8Slogwang 	bus_space_write_4((bas)->bst, (bas)->bsh, reg, value)
42*a9643ea8Slogwang 
43*a9643ea8Slogwang /* UART registers */
44*a9643ea8Slogwang #define	UART_RX_REG	0x00
45*a9643ea8Slogwang #define	UART_TX_REG	0x04
46*a9643ea8Slogwang 
47*a9643ea8Slogwang #define	UART_IER_REG	0x08
48*a9643ea8Slogwang #define		UART_IER_EDSSI		(1<<3) /* Only full UART */
49*a9643ea8Slogwang #define		UART_IER_ELSI		(1<<2)
50*a9643ea8Slogwang #define		UART_IER_ETBEI		(1<<1)
51*a9643ea8Slogwang #define		UART_IER_ERBFI		(1<<0)
52*a9643ea8Slogwang 
53*a9643ea8Slogwang #define	UART_IIR_REG	0x0c
54*a9643ea8Slogwang #define		UART_IIR_RXFIFO		(1<<7)
55*a9643ea8Slogwang #define		UART_IIR_TXFIFO		(1<<6)
56*a9643ea8Slogwang #define		UART_IIR_ID_MST		0
57*a9643ea8Slogwang #define		UART_IIR_ID_THRE	1
58*a9643ea8Slogwang #define		UART_IIR_ID_DR		2
59*a9643ea8Slogwang #define		UART_IIR_ID_LINESTATUS	3
60*a9643ea8Slogwang #define		UART_IIR_ID_DR2		6
61*a9643ea8Slogwang #define		UART_IIR_ID_SHIFT	1
62*a9643ea8Slogwang #define		UART_IIR_ID_MASK	0x0000000e
63*a9643ea8Slogwang #define		UART_IIR_INTP		(1<<0)
64*a9643ea8Slogwang 
65*a9643ea8Slogwang #define	UART_FCR_REG	0x10
66*a9643ea8Slogwang #define		UART_FCR_RXTGR_1	(0<<6)
67*a9643ea8Slogwang #define		UART_FCR_RXTGR_4	(1<<6)
68*a9643ea8Slogwang #define		UART_FCR_RXTGR_8	(2<<6)
69*a9643ea8Slogwang #define		UART_FCR_RXTGR_12	(3<<6)
70*a9643ea8Slogwang #define		UART_FCR_TXTGR_1	(0<<4)
71*a9643ea8Slogwang #define		UART_FCR_TXTGR_4	(1<<4)
72*a9643ea8Slogwang #define		UART_FCR_TXTGR_8	(2<<4)
73*a9643ea8Slogwang #define		UART_FCR_TXTGR_12	(3<<4)
74*a9643ea8Slogwang #define		UART_FCR_DMA		(1<<3)
75*a9643ea8Slogwang #define		UART_FCR_TXRST		(1<<2)
76*a9643ea8Slogwang #define		UART_FCR_RXRST		(1<<1)
77*a9643ea8Slogwang #define		UART_FCR_FIFOEN		(1<<0)
78*a9643ea8Slogwang 
79*a9643ea8Slogwang #define	UART_LCR_REG	0x14
80*a9643ea8Slogwang #define		UART_LCR_DLAB	(1<<7)
81*a9643ea8Slogwang #define		UART_LCR_BRK	(1<<6)
82*a9643ea8Slogwang #define		UART_LCR_FPAR	(1<<5)
83*a9643ea8Slogwang #define		UART_LCR_EVEN	(1<<4)
84*a9643ea8Slogwang #define		UART_LCR_PEN	(1<<3)
85*a9643ea8Slogwang #define		UART_LCR_STB_15	(1<<2)
86*a9643ea8Slogwang #define		UART_LCR_5B	0
87*a9643ea8Slogwang #define		UART_LCR_6B	1
88*a9643ea8Slogwang #define		UART_LCR_7B	2
89*a9643ea8Slogwang #define		UART_LCR_8B	3
90*a9643ea8Slogwang 
91*a9643ea8Slogwang #define	UART_MCR_REG	0x18
92*a9643ea8Slogwang #define		UART_MCR_LOOP	(1<<4)
93*a9643ea8Slogwang #define		UART_MCR_OUT2_L	(1<<3) /* Only full UART */
94*a9643ea8Slogwang #define		UART_MCR_OUT1_L	(1<<2) /* Only full UART */
95*a9643ea8Slogwang #define		UART_MCR_RTS_L	(1<<1) /* Only full UART */
96*a9643ea8Slogwang #define		UART_MCR_DTR_L	(1<<0) /* Only full UART */
97*a9643ea8Slogwang 
98*a9643ea8Slogwang #define	UART_LSR_REG	0x1c
99*a9643ea8Slogwang #define		UART_LSR_ERINF	(1<<7)
100*a9643ea8Slogwang #define		UART_LSR_TEMT	(1<<6)
101*a9643ea8Slogwang #define		UART_LSR_THRE	(1<<5)
102*a9643ea8Slogwang #define		UART_LSR_BI	(1<<4)
103*a9643ea8Slogwang #define		UART_LSR_FE	(1<<3)
104*a9643ea8Slogwang #define		UART_LSR_PE	(1<<2)
105*a9643ea8Slogwang #define		UART_LSR_OE	(1<<1)
106*a9643ea8Slogwang #define		UART_LSR_DR	(1<<0)
107*a9643ea8Slogwang 
108*a9643ea8Slogwang #define	UART_MSR_REG	0x20 	/* Only full UART */
109*a9643ea8Slogwang #define		UART_MSR_DCD	(1<<7) /* Only full UART */
110*a9643ea8Slogwang #define		UART_MSR_RI	(1<<6) /* Only full UART */
111*a9643ea8Slogwang #define		UART_MSR_DSR	(1<<5) /* Only full UART */
112*a9643ea8Slogwang #define		UART_MSR_CTS	(1<<4) /* Only full UART */
113*a9643ea8Slogwang #define		UART_MSR_DDCD	(1<<3) /* Only full UART */
114*a9643ea8Slogwang #define		UART_MSR_TERI	(1<<2) /* Only full UART */
115*a9643ea8Slogwang #define		UART_MSR_DDSR	(1<<1) /* Only full UART */
116*a9643ea8Slogwang #define		UART_MSR_DCTS	(1<<0) /* Only full UART */
117*a9643ea8Slogwang 
118*a9643ea8Slogwang #define	UART_CDDL_REG	0x28
119*a9643ea8Slogwang #define	UART_CDDLL_REG	0x2c
120*a9643ea8Slogwang #define	UART_CDDLH_REG	0x30
121*a9643ea8Slogwang 
122*a9643ea8Slogwang #define	UART_IFCTL_REG	0x34
123*a9643ea8Slogwang #define		UART_IFCTL_IFCTL	(1<<0)
124*a9643ea8Slogwang 
125*a9643ea8Slogwang int	uart_cnattach(void);
126*a9643ea8Slogwang #endif	/* _MTKUART_H */
127