125981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris/* SPDX-License-Identifier: GPL-1.0+ WITH Linux-syscall-note */
230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * include/linux/serial.h
430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *
530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Copyright (C) 1992 by Theodore Ts'o.
630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng *
730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Redistribution of this file is permitted under the terms of the GNU
830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Public License (GPL)
930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
1030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
1130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#ifndef _UAPI_LINUX_SERIAL_H
1230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define _UAPI_LINUX_SERIAL_H
1330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
1430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include <linux/types.h>
1530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
1630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#include <linux/tty_flags.h>
1730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
1830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
1930692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct serial_struct {
2030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int	type;
2130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int	line;
2230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned int	port;
2330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int	irq;
2430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int	flags;
2530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int	xmit_fifo_size;
2630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int	custom_divisor;
2730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int	baud_base;
2830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned short	close_delay;
2930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	char	io_type;
3030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	char	reserved_char[1];
3130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int	hub6;
3230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned short	closing_wait; /* time to wait before closing */
3330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned short	closing_wait2; /* no longer used... */
3430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned char	*iomem_base;
3530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned short	iomem_reg_shift;
3630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned int	port_high;
3730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned long	iomap_base;	/* cookie passed into ioremap */
3830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
3930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
4030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
4130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * For the close wait times, 0 means wait forever for serial port to
4230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * flush its output.  65535 means don't wait at all.
4330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
4430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define ASYNC_CLOSING_WAIT_INF	0
4530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define ASYNC_CLOSING_WAIT_NONE	65535
4630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
4730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
4830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * These are the supported serial types.
4930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
5030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define PORT_UNKNOWN	0
5130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define PORT_8250	1
5230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define PORT_16450	2
5330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define PORT_16550	3
5430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define PORT_16550A	4
5530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define PORT_CIRRUS     5	/* usurped by cyclades.c */
5630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define PORT_16650	6
5730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define PORT_16650V2	7
5830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define PORT_16750	8
5930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define PORT_STARTECH	9	/* usurped by cyclades.c */
6030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define PORT_16C950	10	/* Oxford Semiconductor */
6130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define PORT_16654	11
6230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define PORT_16850	12
6330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define PORT_RSA	13	/* RSA-DV II/S card */
6430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define PORT_MAX	13
6530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
6630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SERIAL_IO_PORT	0
6730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SERIAL_IO_HUB6	1
6830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SERIAL_IO_MEM	2
6912e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define SERIAL_IO_MEM32	  3
7012e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define SERIAL_IO_AU	  4
7112e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define SERIAL_IO_TSI	  5
7212e1f28cce28271eb109a5bae818a804f0c3bb27Christopher Ferris#define SERIAL_IO_MEM32BE 6
73ccfaccd726a369b7df72e251710755233d176e5aChristopher Ferris#define SERIAL_IO_MEM16	7
7430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
7530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define UART_CLEAR_FIFO		0x01
7630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define UART_USE_FIFO		0x02
7730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define UART_STARTECH		0x04
7830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define UART_NATSEMI		0x08
7930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
8030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
8130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
8230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Multiport serial configuration structure --- external structure
8330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
8430692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct serial_multiport_struct {
8530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int		irq;
8630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int		port1;
8730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned char	mask1, match1;
8830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int		port2;
8930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned char	mask2, match2;
9030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int		port3;
9130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned char	mask3, match3;
9230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int		port4;
9330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	unsigned char	mask4, match4;
9430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int		port_monitor;
9530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int	reserved[32];
9630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
9730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
9830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
9930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Serial input interrupt line counters -- external structure
10030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Four lines can interrupt: CTS, DSR, RI, DCD
10130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
10230692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct serial_icounter_struct {
10330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int cts, dsr, rng, dcd;
10430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int rx, tx;
10530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int frame, overrun, parity, brk;
10630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int buf_overrun;
10730692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	int reserved[9];
10830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
10930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
11030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng/*
11130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * Serial interface for controlling RS485 settings on chips with suitable
11230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * support. Set with TIOCSRS485 and get with TIOCGRS485 if supported by your
11330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * platform. The set function returns the new state, with any unsupported bits
11430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng * reverted appropriately.
11530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng */
11630692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
11730692c65c4174412c90e79489e98ab85c1a7412fBen Chengstruct serial_rs485 {
11830692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	flags;			/* RS485 feature flags */
11930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SER_RS485_ENABLED		(1 << 0)	/* If enabled */
12030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SER_RS485_RTS_ON_SEND		(1 << 1)	/* Logical level for
12130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng							   RTS pin when
12230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng							   sending */
12330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SER_RS485_RTS_AFTER_SEND	(1 << 2)	/* Logical level for
12430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng							   RTS pin after sent*/
12530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#define SER_RS485_RX_DURING_TX		(1 << 4)
12625981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris#define SER_RS485_TERMINATE_BUS		(1 << 5)	/* Enable bus
12725981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris							   termination
12825981136fb13bcacf5f475f3e0ec750341e1e671Christopher Ferris							   (if supported) */
12930692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	delay_rts_before_send;	/* Delay before send (milliseconds) */
13030692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	delay_rts_after_send;	/* Delay after send (milliseconds) */
13130692c65c4174412c90e79489e98ab85c1a7412fBen Cheng	__u32	padding[5];		/* Memory is cheap, new structs
13230692c65c4174412c90e79489e98ab85c1a7412fBen Cheng					   are a royal PITA .. */
13330692c65c4174412c90e79489e98ab85c1a7412fBen Cheng};
13430692c65c4174412c90e79489e98ab85c1a7412fBen Cheng
13530692c65c4174412c90e79489e98ab85c1a7412fBen Cheng#endif /* _UAPI_LINUX_SERIAL_H */
136