Home | History | Annotate | Line # | Download | only in imx
      1  1.6  hkenken /* $NetBSD: imxuartvar.h,v 1.6 2017/09/08 05:29:12 hkenken Exp $ */
      2  1.2     matt /*
      3  1.2     matt  * driver include for Freescale i.MX31 and i.MX31L UARTs
      4  1.2     matt  */
      5  1.3      bsh /*
      6  1.3      bsh  * Copyright (c) 2009, 2010  Genetec Corporation.  All rights reserved.
      7  1.3      bsh  * Written by Hiroyuki Bessho for Genetec Corporation.
      8  1.3      bsh  *
      9  1.3      bsh  * Redistribution and use in source and binary forms, with or without
     10  1.3      bsh  * modification, are permitted provided that the following conditions
     11  1.3      bsh  * are met:
     12  1.3      bsh  * 1. Redistributions of source code must retain the above copyright
     13  1.3      bsh  *    notice, this list of conditions and the following disclaimer.
     14  1.3      bsh  * 2. Redistributions in binary form must reproduce the above copyright
     15  1.3      bsh  *    notice, this list of conditions and the following disclaimer in the
     16  1.3      bsh  *    documentation and/or other materials provided with the distribution.
     17  1.3      bsh  *
     18  1.3      bsh  * THIS SOFTWARE IS PROVIDED BY GENETEC CORPORATION ``AS IS'' AND
     19  1.3      bsh  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     20  1.3      bsh  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     21  1.3      bsh  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL GENETEC CORPORATION
     22  1.3      bsh  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     23  1.3      bsh  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     24  1.3      bsh  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     25  1.3      bsh  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     26  1.3      bsh  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     27  1.3      bsh  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     28  1.3      bsh  * POSSIBILITY OF SUCH DAMAGE.
     29  1.3      bsh  *
     30  1.3      bsh  */
     31  1.3      bsh #ifndef	_IMXUARTVAR_H
     32  1.3      bsh #define	_IMXUARTVAR_H
     33  1.3      bsh 
     34  1.3      bsh 
     35  1.3      bsh #include  <sys/cdefs.h>
     36  1.3      bsh #include  <sys/termios.h>	/* for tcflag_t */
     37  1.3      bsh 
     38  1.6  hkenken struct imxuart_softc {
     39  1.6  hkenken 	device_t	sc_dev;
     40  1.6  hkenken 
     41  1.6  hkenken 	int sc_unit;
     42  1.6  hkenken 	struct imxuart_regs {
     43  1.6  hkenken 		bus_space_tag_t		ur_iot;
     44  1.6  hkenken 		bus_space_handle_t	ur_ioh;
     45  1.6  hkenken 		bus_addr_t		ur_iobase;
     46  1.6  hkenken #if 0
     47  1.6  hkenken 		bus_size_t		ur_nports;
     48  1.6  hkenken 		bus_size_t		ur_map[16];
     49  1.6  hkenken #endif
     50  1.6  hkenken 	} sc_regs;
     51  1.6  hkenken 
     52  1.6  hkenken #define	sc_bt	sc_regs.ur_iot
     53  1.6  hkenken #define	sc_bh	sc_regs.ur_ioh
     54  1.6  hkenken 
     55  1.6  hkenken 	uint32_t		sc_intrspec_enb;
     56  1.6  hkenken 	uint32_t	sc_ucr2_d;	/* target value for UCR2 */
     57  1.6  hkenken 	uint32_t	sc_ucr[4];	/* cached value of UCRn */
     58  1.6  hkenken #define	sc_ucr1	sc_ucr[0]
     59  1.6  hkenken #define	sc_ucr2	sc_ucr[1]
     60  1.6  hkenken #define	sc_ucr3	sc_ucr[2]
     61  1.6  hkenken #define	sc_ucr4	sc_ucr[3]
     62  1.6  hkenken 
     63  1.6  hkenken 	uint			sc_init_cnt;
     64  1.6  hkenken 
     65  1.6  hkenken 	bus_addr_t		sc_addr;
     66  1.6  hkenken 	bus_size_t		sc_size;
     67  1.6  hkenken 	int			sc_intr;
     68  1.6  hkenken 
     69  1.6  hkenken 	u_char	sc_hwflags;
     70  1.6  hkenken /* Hardware flag masks */
     71  1.6  hkenken #define	IMXUART_HW_FLOW 	__BIT(0)
     72  1.6  hkenken #define	IMXUART_HW_DEV_OK	__BIT(1)
     73  1.6  hkenken #define	IMXUART_HW_CONSOLE	__BIT(2)
     74  1.6  hkenken #define	IMXUART_HW_KGDB 	__BIT(3)
     75  1.6  hkenken 
     76  1.6  hkenken 	bool	enabled;
     77  1.6  hkenken 
     78  1.6  hkenken 	u_char	sc_swflags;
     79  1.6  hkenken 
     80  1.6  hkenken 	u_char sc_rx_flags;
     81  1.6  hkenken #define	IMXUART_RX_TTY_BLOCKED  	__BIT(0)
     82  1.6  hkenken #define	IMXUART_RX_TTY_OVERFLOWED	__BIT(1)
     83  1.6  hkenken #define	IMXUART_RX_IBUF_BLOCKED 	__BIT(2)
     84  1.6  hkenken #define	IMXUART_RX_IBUF_OVERFLOWED	__BIT(3)
     85  1.6  hkenken #define	IMXUART_RX_ANY_BLOCK					\
     86  1.6  hkenken 	(IMXUART_RX_TTY_BLOCKED|IMXUART_RX_TTY_OVERFLOWED| 	\
     87  1.6  hkenken 	    IMXUART_RX_IBUF_BLOCKED|IMXUART_RX_IBUF_OVERFLOWED)
     88  1.6  hkenken 
     89  1.6  hkenken 	bool	sc_tx_busy, sc_tx_done, sc_tx_stopped;
     90  1.6  hkenken 	bool	sc_rx_ready,sc_st_check;
     91  1.6  hkenken 	u_short	sc_txfifo_len, sc_txfifo_thresh;
     92  1.6  hkenken 
     93  1.6  hkenken 	uint16_t	*sc_rbuf;
     94  1.6  hkenken 	u_int		sc_rbuf_size;
     95  1.6  hkenken 	u_int		sc_rbuf_in;
     96  1.6  hkenken 	u_int		sc_rbuf_out;
     97  1.6  hkenken #define	IMXUART_RBUF_AVAIL(sc)					\
     98  1.6  hkenken 	((sc->sc_rbuf_out <= sc->sc_rbuf_in) ?			\
     99  1.6  hkenken 	(sc->sc_rbuf_in - sc->sc_rbuf_out) :			\
    100  1.6  hkenken 	(sc->sc_rbuf_size - (sc->sc_rbuf_out - sc->sc_rbuf_in)))
    101  1.6  hkenken 
    102  1.6  hkenken #define	IMXUART_RBUF_SPACE(sc)	\
    103  1.6  hkenken 	((sc->sc_rbuf_in <= sc->sc_rbuf_out ?			    \
    104  1.6  hkenken 	    sc->sc_rbuf_size - (sc->sc_rbuf_out - sc->sc_rbuf_in) : \
    105  1.6  hkenken 	    sc->sc_rbuf_in - sc->sc_rbuf_out) - 1)
    106  1.6  hkenken /* increment ringbuffer pointer */
    107  1.6  hkenken #define	IMXUART_RBUF_INC(sc,v,i)	(((v) + (i))&((sc->sc_rbuf_size)-1))
    108  1.6  hkenken 	u_int	sc_r_lowat;
    109  1.6  hkenken 	u_int	sc_r_hiwat;
    110  1.6  hkenken 
    111  1.6  hkenken 	/* output chunk */
    112  1.6  hkenken  	u_char *sc_tba;
    113  1.6  hkenken  	u_int sc_tbc;
    114  1.6  hkenken 	u_int sc_heldtbc;
    115  1.6  hkenken 	/* pending parameter changes */
    116  1.6  hkenken 	u_char	sc_pending;
    117  1.6  hkenken #define	IMXUART_PEND_PARAM	__BIT(0)
    118  1.6  hkenken #define	IMXUART_PEND_SPEED	__BIT(1)
    119  1.6  hkenken 
    120  1.6  hkenken 
    121  1.6  hkenken 	struct callout sc_diag_callout;
    122  1.6  hkenken 	kmutex_t sc_lock;
    123  1.6  hkenken 	void *sc_ih;		/* interrupt handler */
    124  1.6  hkenken 	void *sc_si;		/* soft interrupt */
    125  1.6  hkenken 	struct tty		*sc_tty;
    126  1.6  hkenken 
    127  1.6  hkenken 	/* power management hooks */
    128  1.6  hkenken 	int (*enable)(struct imxuart_softc *);
    129  1.6  hkenken 	void (*disable)(struct imxuart_softc *);
    130  1.6  hkenken 
    131  1.6  hkenken 	struct {
    132  1.6  hkenken 		ulong err;
    133  1.6  hkenken 		ulong brk;
    134  1.6  hkenken 		ulong prerr;
    135  1.6  hkenken 		ulong frmerr;
    136  1.6  hkenken 		ulong ovrrun;
    137  1.6  hkenken 	}	sc_errors;
    138  1.6  hkenken 
    139  1.6  hkenken 	struct imxuart_baudrate_ratio {
    140  1.6  hkenken 		uint16_t numerator;	/* UBIR */
    141  1.6  hkenken 		uint16_t modulator;	/* UBMR */
    142  1.6  hkenken 	} sc_ratio;
    143  1.6  hkenken 
    144  1.6  hkenken };
    145  1.3      bsh 
    146  1.4      bsh void imxuart_attach_common(device_t parent, device_t self,
    147  1.3      bsh     bus_space_tag_t, paddr_t, size_t, int, int);
    148  1.3      bsh 
    149  1.3      bsh int imxuart_kgdb_attach(bus_space_tag_t, paddr_t, u_int, tcflag_t);
    150  1.6  hkenken int imxuart_cnattach(bus_space_tag_t, paddr_t, u_int, tcflag_t);
    151  1.2     matt 
    152  1.3      bsh int imxuart_is_console(bus_space_tag_t, bus_addr_t, bus_space_handle_t *);
    153  1.3      bsh 
    154  1.3      bsh /*
    155  1.3      bsh  * Set platform dependent values
    156  1.3      bsh  */
    157  1.3      bsh void imxuart_set_frequency(u_int, u_int);
    158  1.3      bsh 
    159  1.3      bsh /*
    160  1.3      bsh  * defined in imx51uart.c and imx31uart.c
    161  1.3      bsh  */
    162  1.5      chs int imxuart_match(device_t, cfdata_t, void *);
    163  1.5      chs void imxuart_attach(device_t, device_t, void *);
    164  1.2     matt 
    165  1.6  hkenken void imxuart_attach_subr(struct imxuart_softc *);
    166  1.6  hkenken 
    167  1.6  hkenken int imxuintr(void *);
    168  1.6  hkenken 
    169  1.3      bsh #endif	/* _IMXUARTVAR_H */
    170