#include <linux/bits.h>
#include <linux/serial_8250.h>
#include <linux/serial_core.h>
#include <linux/dmaengine.h>
#include "../serial_mctrl_gpio.h"
struct uart_8250_dma { … };
struct old_serial_port { … };
struct serial8250_config { … };
#define UART_CAP_FIFO …
#define UART_CAP_EFR …
#define UART_CAP_SLEEP …
#define UART_CAP_AFE …
#define UART_CAP_UUE …
#define UART_CAP_RTOIE …
#define UART_CAP_HFIFO …
#define UART_CAP_RPM …
#define UART_CAP_IRDA …
#define UART_CAP_MINI …
#define UART_CAP_NOTEMT …
#define UART_BUG_QUOT …
#define UART_BUG_TXEN …
#define UART_BUG_NOMSR …
#define UART_BUG_THRE …
#define UART_BUG_TXRACE …
#define UART_NR …
extern unsigned int nr_uarts;
#ifdef CONFIG_SERIAL_8250_SHARE_IRQ
#define SERIAL8250_SHARE_IRQS …
#else
#define SERIAL8250_SHARE_IRQS …
#endif
extern unsigned int share_irqs;
extern unsigned int skip_txen_test;
#define SERIAL8250_PORT_FLAGS(_base, _irq, _flags) …
#define SERIAL8250_PORT(_base, _irq) …
extern struct uart_driver serial8250_reg;
void serial8250_register_ports(struct uart_driver *drv, struct device *dev);
serial8250_isa_config_fn;
extern serial8250_isa_config_fn serial8250_isa_config;
void serial8250_isa_init_ports(void);
extern struct platform_device *serial8250_isa_devs;
extern const struct uart_ops *univ8250_port_base_ops;
extern struct uart_ops univ8250_port_ops;
static inline int serial_in(struct uart_8250_port *up, int offset)
{ … }
static inline void serial_out(struct uart_8250_port *up, int offset, int value)
{ … }
static inline u16 serial_lsr_in(struct uart_8250_port *up)
{ … }
static void serial_icr_write(struct uart_8250_port *up, int offset, int value)
{ … }
static unsigned int __maybe_unused serial_icr_read(struct uart_8250_port *up,
int offset)
{ … }
void serial8250_clear_and_reinit_fifos(struct uart_8250_port *p);
static inline u32 serial_dl_read(struct uart_8250_port *up)
{ … }
static inline void serial_dl_write(struct uart_8250_port *up, u32 value)
{ … }
static inline bool serial8250_set_THRI(struct uart_8250_port *up)
{ … }
static inline bool serial8250_clear_THRI(struct uart_8250_port *up)
{ … }
struct uart_8250_port *serial8250_setup_port(int index);
struct uart_8250_port *serial8250_get_port(int line);
void serial8250_rpm_get(struct uart_8250_port *p);
void serial8250_rpm_put(struct uart_8250_port *p);
void serial8250_rpm_get_tx(struct uart_8250_port *p);
void serial8250_rpm_put_tx(struct uart_8250_port *p);
int serial8250_em485_config(struct uart_port *port, struct ktermios *termios,
struct serial_rs485 *rs485);
void serial8250_em485_start_tx(struct uart_8250_port *p);
void serial8250_em485_stop_tx(struct uart_8250_port *p);
void serial8250_em485_destroy(struct uart_8250_port *p);
extern struct serial_rs485 serial8250_em485_supported;
static inline int serial8250_TIOCM_to_MCR(int tiocm)
{ … }
static inline int serial8250_MCR_to_TIOCM(int mcr)
{ … }
static inline int serial8250_MSR_to_TIOCM(int msr)
{ … }
static inline void serial8250_out_MCR(struct uart_8250_port *up, int value)
{ … }
static inline int serial8250_in_MCR(struct uart_8250_port *up)
{ … }
#ifdef CONFIG_SERIAL_8250_PNP
int serial8250_pnp_init(void);
void serial8250_pnp_exit(void);
#else
static inline int serial8250_pnp_init(void) { return 0; }
static inline void serial8250_pnp_exit(void) { }
#endif
#ifdef CONFIG_SERIAL_8250_RSA
void univ8250_rsa_support(struct uart_ops *ops);
#else
static inline void univ8250_rsa_support(struct uart_ops *ops) { }
#endif
#ifdef CONFIG_SERIAL_8250_FINTEK
int fintek_8250_probe(struct uart_8250_port *uart);
#else
static inline int fintek_8250_probe(struct uart_8250_port *uart) { return 0; }
#endif
#ifdef CONFIG_ARCH_OMAP1
#include <linux/soc/ti/omap1-soc.h>
static inline int is_omap1_8250(struct uart_8250_port *pt)
{
int res;
switch (pt->port.mapbase) {
case OMAP1_UART1_BASE:
case OMAP1_UART2_BASE:
case OMAP1_UART3_BASE:
res = 1;
break;
default:
res = 0;
break;
}
return res;
}
static inline int is_omap1510_8250(struct uart_8250_port *pt)
{
if (!cpu_is_omap1510())
return 0;
return is_omap1_8250(pt);
}
#else
static inline int is_omap1_8250(struct uart_8250_port *pt)
{ … }
static inline int is_omap1510_8250(struct uart_8250_port *pt)
{ … }
#endif
#ifdef CONFIG_SERIAL_8250_DMA
extern int serial8250_tx_dma(struct uart_8250_port *);
extern int serial8250_rx_dma(struct uart_8250_port *);
extern void serial8250_rx_dma_flush(struct uart_8250_port *);
extern int serial8250_request_dma(struct uart_8250_port *);
extern void serial8250_release_dma(struct uart_8250_port *);
static inline void serial8250_do_prepare_tx_dma(struct uart_8250_port *p)
{ … }
static inline void serial8250_do_prepare_rx_dma(struct uart_8250_port *p)
{ … }
static inline bool serial8250_tx_dma_running(struct uart_8250_port *p)
{ … }
#else
static inline int serial8250_tx_dma(struct uart_8250_port *p)
{
return -1;
}
static inline int serial8250_rx_dma(struct uart_8250_port *p)
{
return -1;
}
static inline void serial8250_rx_dma_flush(struct uart_8250_port *p) { }
static inline int serial8250_request_dma(struct uart_8250_port *p)
{
return -1;
}
static inline void serial8250_release_dma(struct uart_8250_port *p) { }
static inline bool serial8250_tx_dma_running(struct uart_8250_port *p)
{
return false;
}
#endif
static inline int ns16550a_goto_highspeed(struct uart_8250_port *up)
{ … }
static inline int serial_index(struct uart_port *port)
{ … }