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