Linux Audio

Check our new training course

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