1*f80ad8b4SAndroid Build Coastguard Worker /* SPDX-License-Identifier: GPL-1.0+ WITH Linux-syscall-note */ 2*f80ad8b4SAndroid Build Coastguard Worker /* 3*f80ad8b4SAndroid Build Coastguard Worker * include/linux/serial.h 4*f80ad8b4SAndroid Build Coastguard Worker * 5*f80ad8b4SAndroid Build Coastguard Worker * Copyright (C) 1992 by Theodore Ts'o. 6*f80ad8b4SAndroid Build Coastguard Worker * 7*f80ad8b4SAndroid Build Coastguard Worker * Redistribution of this file is permitted under the terms of the GNU 8*f80ad8b4SAndroid Build Coastguard Worker * Public License (GPL) 9*f80ad8b4SAndroid Build Coastguard Worker */ 10*f80ad8b4SAndroid Build Coastguard Worker 11*f80ad8b4SAndroid Build Coastguard Worker #ifndef _UAPI_LINUX_SERIAL_H 12*f80ad8b4SAndroid Build Coastguard Worker #define _UAPI_LINUX_SERIAL_H 13*f80ad8b4SAndroid Build Coastguard Worker 14*f80ad8b4SAndroid Build Coastguard Worker #include <linux/const.h> 15*f80ad8b4SAndroid Build Coastguard Worker #include <linux/types.h> 16*f80ad8b4SAndroid Build Coastguard Worker 17*f80ad8b4SAndroid Build Coastguard Worker #include <linux/tty_flags.h> 18*f80ad8b4SAndroid Build Coastguard Worker 19*f80ad8b4SAndroid Build Coastguard Worker 20*f80ad8b4SAndroid Build Coastguard Worker struct serial_struct { 21*f80ad8b4SAndroid Build Coastguard Worker int type; 22*f80ad8b4SAndroid Build Coastguard Worker int line; 23*f80ad8b4SAndroid Build Coastguard Worker unsigned int port; 24*f80ad8b4SAndroid Build Coastguard Worker int irq; 25*f80ad8b4SAndroid Build Coastguard Worker int flags; 26*f80ad8b4SAndroid Build Coastguard Worker int xmit_fifo_size; 27*f80ad8b4SAndroid Build Coastguard Worker int custom_divisor; 28*f80ad8b4SAndroid Build Coastguard Worker int baud_base; 29*f80ad8b4SAndroid Build Coastguard Worker unsigned short close_delay; 30*f80ad8b4SAndroid Build Coastguard Worker char io_type; 31*f80ad8b4SAndroid Build Coastguard Worker char reserved_char[1]; 32*f80ad8b4SAndroid Build Coastguard Worker int hub6; 33*f80ad8b4SAndroid Build Coastguard Worker unsigned short closing_wait; /* time to wait before closing */ 34*f80ad8b4SAndroid Build Coastguard Worker unsigned short closing_wait2; /* no longer used... */ 35*f80ad8b4SAndroid Build Coastguard Worker unsigned char *iomem_base; 36*f80ad8b4SAndroid Build Coastguard Worker unsigned short iomem_reg_shift; 37*f80ad8b4SAndroid Build Coastguard Worker unsigned int port_high; 38*f80ad8b4SAndroid Build Coastguard Worker unsigned long iomap_base; /* cookie passed into ioremap */ 39*f80ad8b4SAndroid Build Coastguard Worker }; 40*f80ad8b4SAndroid Build Coastguard Worker 41*f80ad8b4SAndroid Build Coastguard Worker /* 42*f80ad8b4SAndroid Build Coastguard Worker * For the close wait times, 0 means wait forever for serial port to 43*f80ad8b4SAndroid Build Coastguard Worker * flush its output. 65535 means don't wait at all. 44*f80ad8b4SAndroid Build Coastguard Worker */ 45*f80ad8b4SAndroid Build Coastguard Worker #define ASYNC_CLOSING_WAIT_INF 0 46*f80ad8b4SAndroid Build Coastguard Worker #define ASYNC_CLOSING_WAIT_NONE 65535 47*f80ad8b4SAndroid Build Coastguard Worker 48*f80ad8b4SAndroid Build Coastguard Worker /* 49*f80ad8b4SAndroid Build Coastguard Worker * These are the supported serial types. 50*f80ad8b4SAndroid Build Coastguard Worker */ 51*f80ad8b4SAndroid Build Coastguard Worker #define PORT_UNKNOWN 0 52*f80ad8b4SAndroid Build Coastguard Worker #define PORT_8250 1 53*f80ad8b4SAndroid Build Coastguard Worker #define PORT_16450 2 54*f80ad8b4SAndroid Build Coastguard Worker #define PORT_16550 3 55*f80ad8b4SAndroid Build Coastguard Worker #define PORT_16550A 4 56*f80ad8b4SAndroid Build Coastguard Worker #define PORT_CIRRUS 5 57*f80ad8b4SAndroid Build Coastguard Worker #define PORT_16650 6 58*f80ad8b4SAndroid Build Coastguard Worker #define PORT_16650V2 7 59*f80ad8b4SAndroid Build Coastguard Worker #define PORT_16750 8 60*f80ad8b4SAndroid Build Coastguard Worker #define PORT_STARTECH 9 61*f80ad8b4SAndroid Build Coastguard Worker #define PORT_16C950 10 /* Oxford Semiconductor */ 62*f80ad8b4SAndroid Build Coastguard Worker #define PORT_16654 11 63*f80ad8b4SAndroid Build Coastguard Worker #define PORT_16850 12 64*f80ad8b4SAndroid Build Coastguard Worker #define PORT_RSA 13 /* RSA-DV II/S card */ 65*f80ad8b4SAndroid Build Coastguard Worker #define PORT_MAX 13 66*f80ad8b4SAndroid Build Coastguard Worker 67*f80ad8b4SAndroid Build Coastguard Worker #define SERIAL_IO_PORT 0 68*f80ad8b4SAndroid Build Coastguard Worker #define SERIAL_IO_HUB6 1 69*f80ad8b4SAndroid Build Coastguard Worker #define SERIAL_IO_MEM 2 70*f80ad8b4SAndroid Build Coastguard Worker #define SERIAL_IO_MEM32 3 71*f80ad8b4SAndroid Build Coastguard Worker #define SERIAL_IO_AU 4 72*f80ad8b4SAndroid Build Coastguard Worker #define SERIAL_IO_TSI 5 73*f80ad8b4SAndroid Build Coastguard Worker #define SERIAL_IO_MEM32BE 6 74*f80ad8b4SAndroid Build Coastguard Worker #define SERIAL_IO_MEM16 7 75*f80ad8b4SAndroid Build Coastguard Worker 76*f80ad8b4SAndroid Build Coastguard Worker #define UART_CLEAR_FIFO 0x01 77*f80ad8b4SAndroid Build Coastguard Worker #define UART_USE_FIFO 0x02 78*f80ad8b4SAndroid Build Coastguard Worker #define UART_STARTECH 0x04 79*f80ad8b4SAndroid Build Coastguard Worker #define UART_NATSEMI 0x08 80*f80ad8b4SAndroid Build Coastguard Worker 81*f80ad8b4SAndroid Build Coastguard Worker 82*f80ad8b4SAndroid Build Coastguard Worker /* 83*f80ad8b4SAndroid Build Coastguard Worker * Multiport serial configuration structure --- external structure 84*f80ad8b4SAndroid Build Coastguard Worker */ 85*f80ad8b4SAndroid Build Coastguard Worker struct serial_multiport_struct { 86*f80ad8b4SAndroid Build Coastguard Worker int irq; 87*f80ad8b4SAndroid Build Coastguard Worker int port1; 88*f80ad8b4SAndroid Build Coastguard Worker unsigned char mask1, match1; 89*f80ad8b4SAndroid Build Coastguard Worker int port2; 90*f80ad8b4SAndroid Build Coastguard Worker unsigned char mask2, match2; 91*f80ad8b4SAndroid Build Coastguard Worker int port3; 92*f80ad8b4SAndroid Build Coastguard Worker unsigned char mask3, match3; 93*f80ad8b4SAndroid Build Coastguard Worker int port4; 94*f80ad8b4SAndroid Build Coastguard Worker unsigned char mask4, match4; 95*f80ad8b4SAndroid Build Coastguard Worker int port_monitor; 96*f80ad8b4SAndroid Build Coastguard Worker int reserved[32]; 97*f80ad8b4SAndroid Build Coastguard Worker }; 98*f80ad8b4SAndroid Build Coastguard Worker 99*f80ad8b4SAndroid Build Coastguard Worker /* 100*f80ad8b4SAndroid Build Coastguard Worker * Serial input interrupt line counters -- external structure 101*f80ad8b4SAndroid Build Coastguard Worker * Four lines can interrupt: CTS, DSR, RI, DCD 102*f80ad8b4SAndroid Build Coastguard Worker */ 103*f80ad8b4SAndroid Build Coastguard Worker struct serial_icounter_struct { 104*f80ad8b4SAndroid Build Coastguard Worker int cts, dsr, rng, dcd; 105*f80ad8b4SAndroid Build Coastguard Worker int rx, tx; 106*f80ad8b4SAndroid Build Coastguard Worker int frame, overrun, parity, brk; 107*f80ad8b4SAndroid Build Coastguard Worker int buf_overrun; 108*f80ad8b4SAndroid Build Coastguard Worker int reserved[9]; 109*f80ad8b4SAndroid Build Coastguard Worker }; 110*f80ad8b4SAndroid Build Coastguard Worker 111*f80ad8b4SAndroid Build Coastguard Worker /** 112*f80ad8b4SAndroid Build Coastguard Worker * struct serial_rs485 - serial interface for controlling RS485 settings. 113*f80ad8b4SAndroid Build Coastguard Worker * @flags: RS485 feature flags. 114*f80ad8b4SAndroid Build Coastguard Worker * @delay_rts_before_send: Delay before send (milliseconds). 115*f80ad8b4SAndroid Build Coastguard Worker * @delay_rts_after_send: Delay after send (milliseconds). 116*f80ad8b4SAndroid Build Coastguard Worker * @addr_recv: Receive filter for RS485 addressing mode 117*f80ad8b4SAndroid Build Coastguard Worker * (used only when %SER_RS485_ADDR_RECV is set). 118*f80ad8b4SAndroid Build Coastguard Worker * @addr_dest: Destination address for RS485 addressing mode 119*f80ad8b4SAndroid Build Coastguard Worker * (used only when %SER_RS485_ADDR_DEST is set). 120*f80ad8b4SAndroid Build Coastguard Worker * @padding0: Padding (set to zero). 121*f80ad8b4SAndroid Build Coastguard Worker * @padding1: Padding (set to zero). 122*f80ad8b4SAndroid Build Coastguard Worker * @padding: Deprecated, use @padding0 and @padding1 instead. 123*f80ad8b4SAndroid Build Coastguard Worker * Do not use with @addr_recv and @addr_dest (due to 124*f80ad8b4SAndroid Build Coastguard Worker * overlap). 125*f80ad8b4SAndroid Build Coastguard Worker * 126*f80ad8b4SAndroid Build Coastguard Worker * Serial interface for controlling RS485 settings on chips with suitable 127*f80ad8b4SAndroid Build Coastguard Worker * support. Set with TIOCSRS485 and get with TIOCGRS485 if supported by your 128*f80ad8b4SAndroid Build Coastguard Worker * platform. The set function returns the new state, with any unsupported bits 129*f80ad8b4SAndroid Build Coastguard Worker * reverted appropriately. 130*f80ad8b4SAndroid Build Coastguard Worker * 131*f80ad8b4SAndroid Build Coastguard Worker * The flag bits are: 132*f80ad8b4SAndroid Build Coastguard Worker * 133*f80ad8b4SAndroid Build Coastguard Worker * * %SER_RS485_ENABLED - RS485 enabled. 134*f80ad8b4SAndroid Build Coastguard Worker * * %SER_RS485_RTS_ON_SEND - Logical level for RTS pin when sending. 135*f80ad8b4SAndroid Build Coastguard Worker * * %SER_RS485_RTS_AFTER_SEND - Logical level for RTS pin after sent. 136*f80ad8b4SAndroid Build Coastguard Worker * * %SER_RS485_RX_DURING_TX - Full-duplex RS485 line. 137*f80ad8b4SAndroid Build Coastguard Worker * * %SER_RS485_TERMINATE_BUS - Enable bus termination (if supported). 138*f80ad8b4SAndroid Build Coastguard Worker * * %SER_RS485_ADDRB - Enable RS485 addressing mode. 139*f80ad8b4SAndroid Build Coastguard Worker * * %SER_RS485_ADDR_RECV - Receive address filter (enables @addr_recv). Requires %SER_RS485_ADDRB. 140*f80ad8b4SAndroid Build Coastguard Worker * * %SER_RS485_ADDR_DEST - Destination address (enables @addr_dest). Requires %SER_RS485_ADDRB. 141*f80ad8b4SAndroid Build Coastguard Worker * * %SER_RS485_MODE_RS422 - Enable RS422. Requires %SER_RS485_ENABLED. 142*f80ad8b4SAndroid Build Coastguard Worker */ 143*f80ad8b4SAndroid Build Coastguard Worker struct serial_rs485 { 144*f80ad8b4SAndroid Build Coastguard Worker __u32 flags; 145*f80ad8b4SAndroid Build Coastguard Worker #define SER_RS485_ENABLED _BITUL(0) 146*f80ad8b4SAndroid Build Coastguard Worker #define SER_RS485_RTS_ON_SEND _BITUL(1) 147*f80ad8b4SAndroid Build Coastguard Worker #define SER_RS485_RTS_AFTER_SEND _BITUL(2) 148*f80ad8b4SAndroid Build Coastguard Worker /* Placeholder for bit 3: SER_RS485_RTS_BEFORE_SEND, which isn't used anymore */ 149*f80ad8b4SAndroid Build Coastguard Worker #define SER_RS485_RX_DURING_TX _BITUL(4) 150*f80ad8b4SAndroid Build Coastguard Worker #define SER_RS485_TERMINATE_BUS _BITUL(5) 151*f80ad8b4SAndroid Build Coastguard Worker #define SER_RS485_ADDRB _BITUL(6) 152*f80ad8b4SAndroid Build Coastguard Worker #define SER_RS485_ADDR_RECV _BITUL(7) 153*f80ad8b4SAndroid Build Coastguard Worker #define SER_RS485_ADDR_DEST _BITUL(8) 154*f80ad8b4SAndroid Build Coastguard Worker #define SER_RS485_MODE_RS422 _BITUL(9) 155*f80ad8b4SAndroid Build Coastguard Worker 156*f80ad8b4SAndroid Build Coastguard Worker __u32 delay_rts_before_send; 157*f80ad8b4SAndroid Build Coastguard Worker __u32 delay_rts_after_send; 158*f80ad8b4SAndroid Build Coastguard Worker 159*f80ad8b4SAndroid Build Coastguard Worker /* The fields below are defined by flags */ 160*f80ad8b4SAndroid Build Coastguard Worker union { 161*f80ad8b4SAndroid Build Coastguard Worker __u32 padding[5]; /* Memory is cheap, new structs are a pain */ 162*f80ad8b4SAndroid Build Coastguard Worker 163*f80ad8b4SAndroid Build Coastguard Worker struct { 164*f80ad8b4SAndroid Build Coastguard Worker __u8 addr_recv; 165*f80ad8b4SAndroid Build Coastguard Worker __u8 addr_dest; 166*f80ad8b4SAndroid Build Coastguard Worker __u8 padding0[2]; 167*f80ad8b4SAndroid Build Coastguard Worker __u32 padding1[4]; 168*f80ad8b4SAndroid Build Coastguard Worker }; 169*f80ad8b4SAndroid Build Coastguard Worker }; 170*f80ad8b4SAndroid Build Coastguard Worker }; 171*f80ad8b4SAndroid Build Coastguard Worker 172*f80ad8b4SAndroid Build Coastguard Worker /* 173*f80ad8b4SAndroid Build Coastguard Worker * Serial interface for controlling ISO7816 settings on chips with suitable 174*f80ad8b4SAndroid Build Coastguard Worker * support. Set with TIOCSISO7816 and get with TIOCGISO7816 if supported by 175*f80ad8b4SAndroid Build Coastguard Worker * your platform. 176*f80ad8b4SAndroid Build Coastguard Worker */ 177*f80ad8b4SAndroid Build Coastguard Worker struct serial_iso7816 { 178*f80ad8b4SAndroid Build Coastguard Worker __u32 flags; /* ISO7816 feature flags */ 179*f80ad8b4SAndroid Build Coastguard Worker #define SER_ISO7816_ENABLED (1 << 0) 180*f80ad8b4SAndroid Build Coastguard Worker #define SER_ISO7816_T_PARAM (0x0f << 4) 181*f80ad8b4SAndroid Build Coastguard Worker #define SER_ISO7816_T(t) (((t) & 0x0f) << 4) 182*f80ad8b4SAndroid Build Coastguard Worker __u32 tg; 183*f80ad8b4SAndroid Build Coastguard Worker __u32 sc_fi; 184*f80ad8b4SAndroid Build Coastguard Worker __u32 sc_di; 185*f80ad8b4SAndroid Build Coastguard Worker __u32 clk; 186*f80ad8b4SAndroid Build Coastguard Worker __u32 reserved[5]; 187*f80ad8b4SAndroid Build Coastguard Worker }; 188*f80ad8b4SAndroid Build Coastguard Worker 189*f80ad8b4SAndroid Build Coastguard Worker #endif /* _UAPI_LINUX_SERIAL_H */ 190