8250_dwlib.h 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. /* SPDX-License-Identifier: GPL-2.0+ */
  2. /* Synopsys DesignWare 8250 library header file. */
  3. #include <linux/io.h>
  4. #include <linux/notifier.h>
  5. #include <linux/types.h>
  6. #include <linux/workqueue.h>
  7. #include "8250.h"
  8. struct clk;
  9. struct reset_control;
  10. struct dw8250_port_data {
  11. /* Port properties */
  12. int line;
  13. /* DMA operations */
  14. struct uart_8250_dma dma;
  15. /* Hardware configuration */
  16. u8 dlf_size;
  17. /* RS485 variables */
  18. bool hw_rs485_support;
  19. };
  20. struct dw8250_platform_data {
  21. u8 usr_reg;
  22. u32 cpr_val;
  23. unsigned int quirks;
  24. };
  25. struct dw8250_data {
  26. struct dw8250_port_data data;
  27. const struct dw8250_platform_data *pdata;
  28. int msr_mask_on;
  29. int msr_mask_off;
  30. struct clk *clk;
  31. struct clk *pclk;
  32. struct notifier_block clk_notifier;
  33. struct work_struct clk_work;
  34. struct reset_control *rst;
  35. unsigned int skip_autocfg:1;
  36. unsigned int uart_16550_compatible:1;
  37. };
  38. void dw8250_do_set_termios(struct uart_port *p, struct ktermios *termios, const struct ktermios *old);
  39. void dw8250_setup_port(struct uart_port *p);
  40. static inline struct dw8250_data *to_dw8250_data(struct dw8250_port_data *data)
  41. {
  42. return container_of(data, struct dw8250_data, data);
  43. }
  44. static inline u32 dw8250_readl_ext(struct uart_port *p, int offset)
  45. {
  46. if (p->iotype == UPIO_MEM32BE)
  47. return ioread32be(p->membase + offset);
  48. return readl(p->membase + offset);
  49. }
  50. static inline void dw8250_writel_ext(struct uart_port *p, int offset, u32 reg)
  51. {
  52. if (p->iotype == UPIO_MEM32BE)
  53. iowrite32be(reg, p->membase + offset);
  54. else
  55. writel(reg, p->membase + offset);
  56. }