XenevaOS
Loading...
Searching...
No Matches
serial_8250.h
Go to the documentation of this file.
1/*
2 * DCL <linux/linux/serial_8250.h> -- assembled from mainline v7.2.
3 *
4 * include/linux/serial_8250.h
5 *
6 * Provenance, verbatim upstream:
7 * (unresolved)
8 *
9 * How this file was produced (python3 /tmp/mkbasehdr.py):
10 * - upstream text is copied as-is; these are layout-critical declarations
11 * and a hand-typed `struct uart_port` that disagrees with the vendor
12 * sources by one field would compile cleanly and then read the wrong
13 * offset at runtime, which is exactly the class of bug this whole
14 * exercise exists to avoid
15 * - <uapi/linux/X> content is inlined in place of its include: DCL has no
16 * uapi tree, BaseHdr is flat, and no vendored .c names a uapi path
17 * - the driver-local headers (8250.h, serial_base.h,
18 * serial_mctrl_gpio.h) are NOT here -- they are private to their driver
19 * and live in Vendored/ beside the .c that includes them, resolved by
20 * quoted-include rules
21 *
22 * Everything below this comment is mainline's. DCL-specific deviations are
23 * made where the errors demand them, not speculatively.
24 */
25
26/* SPDX-License-Identifier: GPL-2.0-or-later */
27/*
28 * linux/include/linux/serial_8250.h
29 *
30 * Copyright (C) 2004 Russell King
31 */
32#ifndef _LINUX_SERIAL_8250_H
33#define _LINUX_SERIAL_8250_H
34
35#include <linux/hrtimer.h>
36/*
37 * mainline's copy of this header has no <linux/hrtimer.h>: struct
38 * serial8250_em485 embeds two struct hrtimer by value, and upstream
39 * reaches the complete type through serial_core.h -> sched.h. DCL's
40 * serial_core.h is assembled from mainline but its include list is
41 * the subset BaseHdr actually has, so the dependency is named here
42 * instead of arriving by accident. One line added, nothing else.
43 */
44#include <linux/errno.h>
45#include <linux/serial_core.h>
46#include <linux/serial_reg.h>
48
49struct uart_8250_port;
50
51/*
52 * This is the platform device platform_data structure
53 *
54 * @mapsize: Port size for ioremap()
55 * @bugs: Port bugs
56 *
57 * @dl_read: ``u32 ()(struct uart_8250_port *up)``
58 *
59 * UART divisor latch read.
60 *
61 * @dl_write: ``void ()(struct uart_8250_port *up, u32 value)``
62 *
63 * Write @value into UART divisor latch.
64 *
65 * Locking: Caller holds port's lock.
66 */
68 unsigned long iobase; /* io base address */
69 void __iomem *membase; /* ioremap cookie or NULL */
70 resource_size_t mapbase; /* resource base */
72 unsigned int uartclk; /* UART clock rate */
73 unsigned int irq; /* interrupt number */
74 unsigned long irqflags; /* request_irq flags */
76 unsigned char regshift; /* register shift */
77 unsigned char iotype; /* UPIO_* */
78 unsigned char hub6;
79 unsigned char has_sysrq; /* supports magic SysRq */
80 unsigned int type; /* If UPF_FIXED_TYPE */
81 upf_t flags; /* UPF_* flags */
82 u16 bugs; /* port bugs */
83 u32 (*serial_in)(struct uart_port *, unsigned int offset);
84 void (*serial_out)(struct uart_port *, unsigned int offset, u32 val);
86 void (*dl_write)(struct uart_8250_port *up, u32 value);
87 void (*set_termios)(struct uart_port *,
88 struct ktermios *new,
89 const struct ktermios *old);
90 void (*set_ldisc)(struct uart_port *,
91 struct ktermios *);
92 unsigned int (*get_mctrl)(struct uart_port *);
93 int (*handle_irq)(struct uart_port *);
94 void (*pm)(struct uart_port *, unsigned int state,
95 unsigned old);
96 void (*handle_break)(struct uart_port *);
97};
98
99/*
100 * Allocate 8250 platform device IDs. Nothing is implied by
101 * the numbering here, except for the legacy entry being -1.
102 */
103enum {
115};
116
117struct uart_8250_dma;
118struct uart_8250_port;
119
129 int (*setup_irq)(struct uart_8250_port *);
130 void (*release_irq)(struct uart_8250_port *);
131 void (*setup_timer)(struct uart_8250_port *);
132};
133
135 struct hrtimer start_tx_timer; /* "rs485 start tx" timer */
136 struct hrtimer stop_tx_timer; /* "rs485 stop tx" timer */
137 struct hrtimer *active_timer; /* pointer to active timer */
138 struct uart_8250_port *port; /* for hrtimer callbacks */
139 unsigned int tx_stopped:1; /* tx is currently stopped */
140};
141
142/*
143 * This should be used by drivers which want to register
144 * their own 8250 ports without registering their own
145 * platform device. Using these will make your driver
146 * dependent on the 8250 driver.
147 *
148 * @dl_read: ``u32 ()(struct uart_8250_port *port)``
149 *
150 * UART divisor latch read.
151 *
152 * @dl_write: ``void ()(struct uart_8250_port *port, u32 value)``
153 *
154 * Write @value into UART divisor latch.
155 *
156 * Locking: Caller holds port's lock.
157 */
160 struct timer_list timer; /* "no irq" timer */
161 struct list_head list; /* ports on this IRQ */
162 u32 capabilities; /* port capabilities */
163 u16 bugs; /* port bugs */
164 unsigned int tx_loadsz; /* transmit fifo load size */
165 unsigned char acr;
166 unsigned char fcr;
167 unsigned char ier;
168 unsigned char lcr;
169 unsigned char mcr;
170 unsigned char cur_iotype; /* Running I/O type */
171 unsigned int rpm_tx_active;
172 unsigned char canary; /* non-zero during system sleep
173 * if no_console_suspend
174 */
175 unsigned char probe;
176 struct mctrl_gpios *gpios;
177#define UART_PROBE_RSA (1 << 0)
178
179 /*
180 * Some bits in registers are cleared on a read, so they must
181 * be saved whenever the register is read but the bits will not
182 * be immediately processed.
183 */
184#define LSR_SAVE_FLAGS UART_LSR_BRK_ERROR_BITS
187#define MSR_SAVE_FLAGS UART_MSR_ANY_DELTA
188 unsigned char msr_saved_flags;
189
190 struct uart_8250_dma *dma;
191 const struct uart_8250_ops *ops;
192
193 /* 8250 specific callbacks */
195 void (*dl_write)(struct uart_8250_port *up, u32 value);
196
198 void (*rs485_start_tx)(struct uart_8250_port *up, bool toggle_ier);
199 void (*rs485_stop_tx)(struct uart_8250_port *up, bool toggle_ier);
200
201 /* Serial port overrun backoff */
204};
205
206static inline struct uart_8250_port *up_to_u8250p(struct uart_port *up)
207{
208 return container_of(up, struct uart_8250_port, port);
209}
210
215
218
219void serial8250_update_uartclk(struct uart_port *port, unsigned int uartclk);
221 const struct ktermios *old);
226void serial8250_do_pm(struct uart_port *port, unsigned int state,
227 unsigned int oldstate);
228void serial8250_do_set_mctrl(struct uart_port *port, unsigned int mctrl);
229void serial8250_do_set_divisor(struct uart_port *port, unsigned int baud,
230 unsigned int quot);
232void serial8250_handle_irq_locked(struct uart_port *port, unsigned int iir);
233int serial8250_handle_irq(struct uart_port *port, unsigned int iir);
240void serial8250_console_write(struct uart_8250_port *up, const char *s,
241 unsigned int count);
244
246 u32 *capabilities));
247
248#ifdef CONFIG_SERIAL_8250_CONSOLE
249extern int hp300_setup_serial_console(void) __init;
250#else
251static inline int hp300_setup_serial_console(void) { return 0; }
252#endif
253
254#ifdef CONFIG_SERIAL_8250_RT288X
255int rt288x_setup(struct uart_port *p);
256int au_platform_setup(struct plat_serial8250_port *p);
257#else
258static inline int rt288x_setup(struct uart_port *p) { return -ENODEV; }
259static inline int au_platform_setup(struct plat_serial8250_port *p) { return -ENODEV; }
260#endif
261
262#endif
#define ENODEV
Definition acclib.h:197
#define __init
Definition aclinux.h:309
#define __iomem
Definition aclinux.h:312
#define container_of(ptr, type, member)
Definition container_of.h:19
size_t size_t offset
Definition drm_bridge.h:1299
uintptr_t resource_size_t
Definition kernel.h:41
uint16_t u16
Definition kernel.h:15
uint32_t u32
Definition kernel.h:16
@ options
Definition m_menu.c:234
@ up
Definition p_spec.h:261
void serial8250_init_port(struct uart_8250_port *up)
void serial8250_set_defaults(struct uart_8250_port *up)
void serial8250_do_pm(struct uart_port *port, unsigned int state, unsigned int oldstate)
int serial8250_console_exit(struct uart_port *port)
void serial8250_resume_port(int line)
int fsl8250_handle_irq(struct uart_port *port)
void serial8250_do_set_divisor(struct uart_port *port, unsigned int baud, unsigned int quot)
void serial8250_handle_irq_locked(struct uart_port *port, unsigned int iir)
int serial8250_handle_irq(struct uart_port *port, unsigned int iir)
int serial8250_do_startup(struct uart_port *port)
int early_serial8250_setup(struct earlycon_device *device, const char *options)
void serial8250_do_set_ldisc(struct uart_port *port, struct ktermios *termios)
void serial8250_do_set_mctrl(struct uart_port *port, unsigned int mctrl)
void serial8250_do_shutdown(struct uart_port *port)
void serial8250_tx_chars(struct uart_8250_port *up)
u16 serial8250_rx_chars(struct uart_8250_port *up, u16 lsr)
void serial8250_suspend_port(int line)
void serial8250_read_char(struct uart_8250_port *up, u16 lsr)
void serial8250_do_set_termios(struct uart_port *port, struct ktermios *termios, const struct ktermios *old)
int serial8250_register_8250_port(const struct uart_8250_port *)
void serial8250_update_uartclk(struct uart_port *port, unsigned int uartclk)
unsigned int serial8250_modem_status(struct uart_8250_port *up)
void serial8250_unregister_port(int line)
@ PLAT8250_DEV_ACCENT
Definition serial_8250.h:109
@ PLAT8250_DEV_BOCA
Definition serial_8250.h:110
@ PLAT8250_DEV_LEGACY
Definition serial_8250.h:104
@ PLAT8250_DEV_PLATFORM1
Definition serial_8250.h:106
@ PLAT8250_DEV_PLATFORM
Definition serial_8250.h:105
@ PLAT8250_DEV_FOURPORT
Definition serial_8250.h:108
@ PLAT8250_DEV_AU1X00
Definition serial_8250.h:113
@ PLAT8250_DEV_PLATFORM2
Definition serial_8250.h:107
@ PLAT8250_DEV_SM501
Definition serial_8250.h:114
@ PLAT8250_DEV_EXAR_ST16C554
Definition serial_8250.h:111
@ PLAT8250_DEV_HUB6
Definition serial_8250.h:112
void serial8250_set_isa_configurator(void(*v)(int port, struct uart_port *up, u32 *capabilities))
int serial8250_console_setup(struct uart_port *port, char *options, bool probe)
void serial8250_console_write(struct uart_8250_port *up, const char *s, unsigned int count)
unsigned int serial8250_do_get_mctrl(struct uart_port *port)
int early_serial_setup(struct uart_port *port)
u64 __bitwise upf_t
Definition serial_core.h:690
Definition workqueue.h:229
Definition fs.h:255
Definition serial_core.h:1329
Definition hrtimer.h:95
Definition termios.h:250
Definition list.h:11
Definition serial_8250.h:67
unsigned int(* get_mctrl)(struct uart_port *)
Definition serial_8250.h:92
unsigned int uartclk
Definition serial_8250.h:72
u16 bugs
Definition serial_8250.h:82
void(* set_termios)(struct uart_port *, struct ktermios *new, const struct ktermios *old)
Definition serial_8250.h:87
void * private_data
Definition serial_8250.h:75
void(* handle_break)(struct uart_port *)
Definition serial_8250.h:96
u32(* serial_in)(struct uart_port *, unsigned int offset)
Definition serial_8250.h:83
unsigned char iotype
Definition serial_8250.h:77
void(* serial_out)(struct uart_port *, unsigned int offset, u32 val)
Definition serial_8250.h:84
void __iomem * membase
Definition serial_8250.h:69
resource_size_t mapbase
Definition serial_8250.h:70
unsigned long iobase
Definition serial_8250.h:68
void(* pm)(struct uart_port *, unsigned int state, unsigned old)
Definition serial_8250.h:94
void(* dl_write)(struct uart_8250_port *up, u32 value)
Definition serial_8250.h:86
int(* handle_irq)(struct uart_port *)
Definition serial_8250.h:93
unsigned long irqflags
Definition serial_8250.h:74
void(* set_ldisc)(struct uart_port *, struct ktermios *)
Definition serial_8250.h:90
u32(* dl_read)(struct uart_8250_port *up)
Definition serial_8250.h:85
resource_size_t mapsize
Definition serial_8250.h:71
unsigned char regshift
Definition serial_8250.h:76
unsigned char hub6
Definition serial_8250.h:78
unsigned char has_sysrq
Definition serial_8250.h:79
unsigned int irq
Definition serial_8250.h:73
unsigned int type
Definition serial_8250.h:80
upf_t flags
Definition serial_8250.h:81
Definition termios.h:230
Definition timer.h:6
Definition serial_8250.h:134
unsigned int tx_stopped
Definition serial_8250.h:139
struct hrtimer start_tx_timer
Definition serial_8250.h:135
struct uart_8250_port * port
Definition serial_8250.h:138
struct hrtimer * active_timer
Definition serial_8250.h:137
struct hrtimer stop_tx_timer
Definition serial_8250.h:136
Definition serial_8250.h:128
void(* release_irq)(struct uart_8250_port *)
Definition serial_8250.h:130
int(* setup_irq)(struct uart_8250_port *)
Definition serial_8250.h:129
void(* setup_timer)(struct uart_8250_port *)
Definition serial_8250.h:131
Definition serial_8250.h:158
unsigned char mcr
Definition serial_8250.h:169
u16 bugs
Definition serial_8250.h:163
void(* dl_write)(struct uart_8250_port *up, u32 value)
Definition serial_8250.h:195
unsigned char lcr
Definition serial_8250.h:168
struct delayed_work overrun_backoff
Definition serial_8250.h:202
struct mctrl_gpios * gpios
Definition serial_8250.h:176
struct uart_port port
Definition serial_8250.h:159
unsigned int tx_loadsz
Definition serial_8250.h:164
struct list_head list
Definition serial_8250.h:161
struct timer_list timer
Definition serial_8250.h:160
void(* rs485_start_tx)(struct uart_8250_port *up, bool toggle_ier)
Definition serial_8250.h:198
struct uart_8250_dma * dma
Definition serial_8250.h:190
unsigned char acr
Definition serial_8250.h:165
unsigned char probe
Definition serial_8250.h:175
u16 lsr_saved_flags
Definition serial_8250.h:185
u16 lsr_save_mask
Definition serial_8250.h:186
unsigned char msr_saved_flags
Definition serial_8250.h:188
unsigned char fcr
Definition serial_8250.h:166
u32(* dl_read)(struct uart_8250_port *up)
Definition serial_8250.h:194
unsigned char ier
Definition serial_8250.h:167
void(* rs485_stop_tx)(struct uart_8250_port *up, bool toggle_ier)
Definition serial_8250.h:199
unsigned int rpm_tx_active
Definition serial_8250.h:171
struct uart_8250_em485 * em485
Definition serial_8250.h:197
const struct uart_8250_ops * ops
Definition serial_8250.h:191
unsigned char cur_iotype
Definition serial_8250.h:170
unsigned char canary
Definition serial_8250.h:172
u32 capabilities
Definition serial_8250.h:162
u32 overrun_backoff_time_ms
Definition serial_8250.h:203
Definition serial_core.h:705
#define state(x)