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