/* SPDX-License-Identifier: GPL-2.0+ */ /* Synopsys DesignWare 8250 library header file. */ #include <linux/io.h> #include <linux/notifier.h> #include <linux/types.h> #include <linux/workqueue.h> #include "8250.h" struct clk; struct reset_control; struct dw8250_port_data { /* Port properties */ int line; /* DMA operations */ struct uart_8250_dma dma; /* Hardware configuration */ u8 dlf_size; /* RS485 variables */ bool hw_rs485_support; }; struct dw8250_platform_data { u8 usr_reg; u32 cpr_val; unsigned int quirks; }; struct dw8250_data { struct dw8250_port_data data; const struct dw8250_platform_data *pdata; int msr_mask_on; int msr_mask_off; struct clk *clk; struct clk *pclk; struct notifier_block clk_notifier; struct work_struct clk_work; struct reset_control *rst; unsigned int skip_autocfg:1; unsigned int uart_16550_compatible:1; }; void dw8250_do_set_termios(struct uart_port *p, struct ktermios *termios, const struct ktermios *old); void dw8250_setup_port(struct uart_port *p); static inline struct dw8250_data *to_dw8250_data(struct dw8250_port_data *data) { return container_of(data, struct dw8250_data, data); } static inline u32 dw8250_readl_ext(struct uart_port *p, int offset) { if (p->iotype == UPIO_MEM32BE) return ioread32be(p->membase + offset); return readl(p->membase + offset); } static inline void dw8250_writel_ext(struct uart_port *p, int offset, u32 reg) { if (p->iotype == UPIO_MEM32BE) iowrite32be(reg, p->membase + offset); else writel(reg, p->membase + offset); }