162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0+ */ 262306a36Sopenharmony_ci/* Synopsys DesignWare 8250 library header file. */ 362306a36Sopenharmony_ci 462306a36Sopenharmony_ci#include <linux/io.h> 562306a36Sopenharmony_ci#include <linux/notifier.h> 662306a36Sopenharmony_ci#include <linux/types.h> 762306a36Sopenharmony_ci#include <linux/workqueue.h> 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#include "8250.h" 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_cistruct clk; 1262306a36Sopenharmony_cistruct reset_control; 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_cistruct dw8250_port_data { 1562306a36Sopenharmony_ci /* Port properties */ 1662306a36Sopenharmony_ci int line; 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci /* DMA operations */ 1962306a36Sopenharmony_ci struct uart_8250_dma dma; 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci /* Hardware configuration */ 2262306a36Sopenharmony_ci u8 dlf_size; 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci /* RS485 variables */ 2562306a36Sopenharmony_ci bool hw_rs485_support; 2662306a36Sopenharmony_ci}; 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_cistruct dw8250_platform_data { 2962306a36Sopenharmony_ci u8 usr_reg; 3062306a36Sopenharmony_ci u32 cpr_val; 3162306a36Sopenharmony_ci unsigned int quirks; 3262306a36Sopenharmony_ci}; 3362306a36Sopenharmony_ci 3462306a36Sopenharmony_cistruct dw8250_data { 3562306a36Sopenharmony_ci struct dw8250_port_data data; 3662306a36Sopenharmony_ci const struct dw8250_platform_data *pdata; 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ci int msr_mask_on; 3962306a36Sopenharmony_ci int msr_mask_off; 4062306a36Sopenharmony_ci struct clk *clk; 4162306a36Sopenharmony_ci struct clk *pclk; 4262306a36Sopenharmony_ci struct notifier_block clk_notifier; 4362306a36Sopenharmony_ci struct work_struct clk_work; 4462306a36Sopenharmony_ci struct reset_control *rst; 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ci unsigned int skip_autocfg:1; 4762306a36Sopenharmony_ci unsigned int uart_16550_compatible:1; 4862306a36Sopenharmony_ci}; 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_civoid dw8250_do_set_termios(struct uart_port *p, struct ktermios *termios, const struct ktermios *old); 5162306a36Sopenharmony_civoid dw8250_setup_port(struct uart_port *p); 5262306a36Sopenharmony_ci 5362306a36Sopenharmony_cistatic inline struct dw8250_data *to_dw8250_data(struct dw8250_port_data *data) 5462306a36Sopenharmony_ci{ 5562306a36Sopenharmony_ci return container_of(data, struct dw8250_data, data); 5662306a36Sopenharmony_ci} 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_cistatic inline u32 dw8250_readl_ext(struct uart_port *p, int offset) 5962306a36Sopenharmony_ci{ 6062306a36Sopenharmony_ci if (p->iotype == UPIO_MEM32BE) 6162306a36Sopenharmony_ci return ioread32be(p->membase + offset); 6262306a36Sopenharmony_ci return readl(p->membase + offset); 6362306a36Sopenharmony_ci} 6462306a36Sopenharmony_ci 6562306a36Sopenharmony_cistatic inline void dw8250_writel_ext(struct uart_port *p, int offset, u32 reg) 6662306a36Sopenharmony_ci{ 6762306a36Sopenharmony_ci if (p->iotype == UPIO_MEM32BE) 6862306a36Sopenharmony_ci iowrite32be(reg, p->membase + offset); 6962306a36Sopenharmony_ci else 7062306a36Sopenharmony_ci writel(reg, p->membase + offset); 7162306a36Sopenharmony_ci} 72