Branch data Line data Source code
1 : : /* SPDX-License-Identifier: GPL-2.0-or-later */
2 : : /*
3 : : * linux/include/linux/serial_8250.h
4 : : *
5 : : * Copyright (C) 2004 Russell King
6 : : */
7 : : #ifndef _LINUX_SERIAL_8250_H
8 : : #define _LINUX_SERIAL_8250_H
9 : :
10 : : #include <linux/serial_core.h>
11 : : #include <linux/serial_reg.h>
12 : : #include <linux/platform_device.h>
13 : :
14 : : /*
15 : : * This is the platform device platform_data structure
16 : : */
17 : : struct plat_serial8250_port {
18 : : unsigned long iobase; /* io base address */
19 : : void __iomem *membase; /* ioremap cookie or NULL */
20 : : resource_size_t mapbase; /* resource base */
21 : : unsigned int irq; /* interrupt number */
22 : : unsigned long irqflags; /* request_irq flags */
23 : : unsigned int uartclk; /* UART clock rate */
24 : : void *private_data;
25 : : unsigned char regshift; /* register shift */
26 : : unsigned char iotype; /* UPIO_* */
27 : : unsigned char hub6;
28 : : unsigned char has_sysrq; /* supports magic SysRq */
29 : : upf_t flags; /* UPF_* flags */
30 : : unsigned int type; /* If UPF_FIXED_TYPE */
31 : : unsigned int (*serial_in)(struct uart_port *, int);
32 : : void (*serial_out)(struct uart_port *, int, int);
33 : : void (*set_termios)(struct uart_port *,
34 : : struct ktermios *new,
35 : : struct ktermios *old);
36 : : void (*set_ldisc)(struct uart_port *,
37 : : struct ktermios *);
38 : : unsigned int (*get_mctrl)(struct uart_port *);
39 : : int (*handle_irq)(struct uart_port *);
40 : : void (*pm)(struct uart_port *, unsigned int state,
41 : : unsigned old);
42 : : void (*handle_break)(struct uart_port *);
43 : : };
44 : :
45 : : /*
46 : : * Allocate 8250 platform device IDs. Nothing is implied by
47 : : * the numbering here, except for the legacy entry being -1.
48 : : */
49 : : enum {
50 : : PLAT8250_DEV_LEGACY = -1,
51 : : PLAT8250_DEV_PLATFORM,
52 : : PLAT8250_DEV_PLATFORM1,
53 : : PLAT8250_DEV_PLATFORM2,
54 : : PLAT8250_DEV_FOURPORT,
55 : : PLAT8250_DEV_ACCENT,
56 : : PLAT8250_DEV_BOCA,
57 : : PLAT8250_DEV_EXAR_ST16C554,
58 : : PLAT8250_DEV_HUB6,
59 : : PLAT8250_DEV_AU1X00,
60 : : PLAT8250_DEV_SM501,
61 : : };
62 : :
63 : : struct uart_8250_dma;
64 : : struct uart_8250_port;
65 : :
66 : : /**
67 : : * 8250 core driver operations
68 : : *
69 : : * @setup_irq() Setup irq handling. The universal 8250 driver links this
70 : : * port to the irq chain. Other drivers may @request_irq().
71 : : * @release_irq() Undo irq handling. The universal 8250 driver unlinks
72 : : * the port from the irq chain.
73 : : */
74 : : struct uart_8250_ops {
75 : : int (*setup_irq)(struct uart_8250_port *);
76 : : void (*release_irq)(struct uart_8250_port *);
77 : : };
78 : :
79 : : struct uart_8250_em485 {
80 : : struct hrtimer start_tx_timer; /* "rs485 start tx" timer */
81 : : struct hrtimer stop_tx_timer; /* "rs485 stop tx" timer */
82 : : struct hrtimer *active_timer; /* pointer to active timer */
83 : : struct uart_8250_port *port; /* for hrtimer callbacks */
84 : : };
85 : :
86 : : /*
87 : : * This should be used by drivers which want to register
88 : : * their own 8250 ports without registering their own
89 : : * platform device. Using these will make your driver
90 : : * dependent on the 8250 driver.
91 : : */
92 : :
93 : : struct uart_8250_port {
94 : : struct uart_port port;
95 : : struct timer_list timer; /* "no irq" timer */
96 : : struct list_head list; /* ports on this IRQ */
97 : : u32 capabilities; /* port capabilities */
98 : : unsigned short bugs; /* port bugs */
99 : : bool fifo_bug; /* min RX trigger if enabled */
100 : : unsigned int tx_loadsz; /* transmit fifo load size */
101 : : unsigned char acr;
102 : : unsigned char fcr;
103 : : unsigned char ier;
104 : : unsigned char lcr;
105 : : unsigned char mcr;
106 : : unsigned char mcr_mask; /* mask of user bits */
107 : : unsigned char mcr_force; /* mask of forced bits */
108 : : unsigned char cur_iotype; /* Running I/O type */
109 : : unsigned int rpm_tx_active;
110 : : unsigned char canary; /* non-zero during system sleep
111 : : * if no_console_suspend
112 : : */
113 : : unsigned char probe;
114 : : struct mctrl_gpios *gpios;
115 : : #define UART_PROBE_RSA (1 << 0)
116 : :
117 : : /*
118 : : * Some bits in registers are cleared on a read, so they must
119 : : * be saved whenever the register is read but the bits will not
120 : : * be immediately processed.
121 : : */
122 : : #define LSR_SAVE_FLAGS UART_LSR_BRK_ERROR_BITS
123 : : unsigned char lsr_saved_flags;
124 : : #define MSR_SAVE_FLAGS UART_MSR_ANY_DELTA
125 : : unsigned char msr_saved_flags;
126 : :
127 : : struct uart_8250_dma *dma;
128 : : const struct uart_8250_ops *ops;
129 : :
130 : : /* 8250 specific callbacks */
131 : : int (*dl_read)(struct uart_8250_port *);
132 : : void (*dl_write)(struct uart_8250_port *, int);
133 : :
134 : : struct uart_8250_em485 *em485;
135 : :
136 : : /* Serial port overrun backoff */
137 : : struct delayed_work overrun_backoff;
138 : : u32 overrun_backoff_time_ms;
139 : : };
140 : :
141 : 1378934 : static inline struct uart_8250_port *up_to_u8250p(struct uart_port *up)
142 : : {
143 [ - - - + : 1378934 : return container_of(up, struct uart_8250_port, port);
- - - + -
+ - - - +
- - - - -
+ - + + +
- - - - -
+ - - - -
- - - - -
+ ]
144 : : }
145 : :
146 : : int serial8250_register_8250_port(struct uart_8250_port *);
147 : : void serial8250_unregister_port(int line);
148 : : void serial8250_suspend_port(int line);
149 : : void serial8250_resume_port(int line);
150 : :
151 : : extern int early_serial_setup(struct uart_port *port);
152 : :
153 : : extern int early_serial8250_setup(struct earlycon_device *device,
154 : : const char *options);
155 : : extern void serial8250_do_set_termios(struct uart_port *port,
156 : : struct ktermios *termios, struct ktermios *old);
157 : : extern void serial8250_do_set_ldisc(struct uart_port *port,
158 : : struct ktermios *termios);
159 : : extern unsigned int serial8250_do_get_mctrl(struct uart_port *port);
160 : : extern int serial8250_do_startup(struct uart_port *port);
161 : : extern void serial8250_do_shutdown(struct uart_port *port);
162 : : extern void serial8250_do_pm(struct uart_port *port, unsigned int state,
163 : : unsigned int oldstate);
164 : : extern void serial8250_do_set_mctrl(struct uart_port *port, unsigned int mctrl);
165 : : extern void serial8250_do_set_divisor(struct uart_port *port, unsigned int baud,
166 : : unsigned int quot,
167 : : unsigned int quot_frac);
168 : : extern int fsl8250_handle_irq(struct uart_port *port);
169 : : int serial8250_handle_irq(struct uart_port *port, unsigned int iir);
170 : : unsigned char serial8250_rx_chars(struct uart_8250_port *up, unsigned char lsr);
171 : : void serial8250_read_char(struct uart_8250_port *up, unsigned char lsr);
172 : : void serial8250_tx_chars(struct uart_8250_port *up);
173 : : unsigned int serial8250_modem_status(struct uart_8250_port *up);
174 : : void serial8250_init_port(struct uart_8250_port *up);
175 : : void serial8250_set_defaults(struct uart_8250_port *up);
176 : : void serial8250_console_write(struct uart_8250_port *up, const char *s,
177 : : unsigned int count);
178 : : int serial8250_console_setup(struct uart_port *port, char *options, bool probe);
179 : :
180 : : extern void serial8250_set_isa_configurator(void (*v)
181 : : (int port, struct uart_port *up,
182 : : u32 *capabilities));
183 : :
184 : : #endif
|