1a08ef9120
Add Atmel serial drivers. uart clock-frequency is a FreeBSD-specific extention. Make it optional and allow the client uart drivers to decide if a frequency is required. Remove redundant declaration for uart devclass. Commit some unrelated, but harmless, FDT ifdefs. Add at91 NAND support, Fix comment. Remove obsolete options and fix comments
110 lines
3.9 KiB
C
110 lines
3.9 KiB
C
/*-
|
|
* Copyright (c) 2003 Marcel Moolenaar
|
|
* All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions
|
|
* are met:
|
|
*
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
|
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
|
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
|
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
|
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
|
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*
|
|
* $FreeBSD$
|
|
*/
|
|
|
|
#ifndef _DEV_UART_H_
|
|
#define _DEV_UART_H_
|
|
|
|
/*
|
|
* Bus access structure. This structure holds the minimum information needed
|
|
* to access the UART. The rclk field, although not important to actually
|
|
* access the UART, is important for baudrate programming, delay loops and
|
|
* other timing related computations.
|
|
*/
|
|
struct uart_bas {
|
|
bus_space_tag_t bst;
|
|
bus_space_handle_t bsh;
|
|
u_int chan;
|
|
u_int rclk;
|
|
u_int regshft;
|
|
};
|
|
|
|
#define uart_regofs(bas, reg) ((reg) << (bas)->regshft)
|
|
|
|
#define uart_getreg(bas, reg) \
|
|
bus_space_read_1((bas)->bst, (bas)->bsh, uart_regofs(bas, reg))
|
|
#define uart_setreg(bas, reg, value) \
|
|
bus_space_write_1((bas)->bst, (bas)->bsh, uart_regofs(bas, reg), value)
|
|
|
|
/*
|
|
* XXX we don't know the length of the bus space address range in use by
|
|
* the UART. Since barriers don't use the length field currently, we put
|
|
* a zero there for now.
|
|
*/
|
|
#define uart_barrier(bas) \
|
|
bus_space_barrier((bas)->bst, (bas)->bsh, 0, 0, \
|
|
BUS_SPACE_BARRIER_READ|BUS_SPACE_BARRIER_WRITE)
|
|
|
|
/*
|
|
* UART device classes.
|
|
*/
|
|
struct uart_class;
|
|
|
|
extern struct uart_class uart_imx_class __attribute__((weak));
|
|
extern struct uart_class uart_ns8250_class __attribute__((weak));
|
|
extern struct uart_class uart_quicc_class __attribute__((weak));
|
|
extern struct uart_class uart_s3c2410_class __attribute__((weak));
|
|
extern struct uart_class uart_sab82532_class __attribute__((weak));
|
|
extern struct uart_class uart_sbbc_class __attribute__((weak));
|
|
extern struct uart_class uart_z8530_class __attribute__((weak));
|
|
extern struct uart_class uart_lpc_class __attribute__((weak));
|
|
extern struct uart_class uart_pl011_class __attribute__((weak));
|
|
extern struct uart_class uart_cdnc_class __attribute__((weak));
|
|
extern struct uart_class uart_ti8250_class __attribute__((weak));
|
|
extern struct uart_class uart_vybrid_class __attribute__((weak));
|
|
extern struct uart_class at91_usart_class __attribute__((weak));
|
|
|
|
#ifdef FDT
|
|
struct ofw_compat_data;
|
|
extern const struct ofw_compat_data *uart_fdt_compat_data;
|
|
#endif
|
|
|
|
#ifdef PC98
|
|
struct uart_class *uart_pc98_getdev(u_long port);
|
|
#endif
|
|
|
|
/*
|
|
* Device flags.
|
|
*/
|
|
#define UART_FLAGS_CONSOLE(f) ((f) & 0x10)
|
|
#define UART_FLAGS_DBGPORT(f) ((f) & 0x80)
|
|
#define UART_FLAGS_FCR_RX_LOW(f) ((f) & 0x100)
|
|
#define UART_FLAGS_FCR_RX_MEDL(f) ((f) & 0x200)
|
|
#define UART_FLAGS_FCR_RX_MEDH(f) ((f) & 0x400)
|
|
#define UART_FLAGS_FCR_RX_HIGH(f) ((f) & 0x800)
|
|
|
|
/*
|
|
* Data parity values (magical numbers related to ns8250).
|
|
*/
|
|
#define UART_PARITY_NONE 0
|
|
#define UART_PARITY_ODD 1
|
|
#define UART_PARITY_EVEN 3
|
|
#define UART_PARITY_MARK 5
|
|
#define UART_PARITY_SPACE 7
|
|
|
|
#endif /* _DEV_UART_H_ */
|