1*53ee8cc1Swenshuai.xi /* 2*53ee8cc1Swenshuai.xi * include/linux/serial.h 3*53ee8cc1Swenshuai.xi * 4*53ee8cc1Swenshuai.xi * Copyright (C) 1992 by Theodore Ts'o. 5*53ee8cc1Swenshuai.xi * 6*53ee8cc1Swenshuai.xi * Redistribution of this file is permitted under the terms of the GNU 7*53ee8cc1Swenshuai.xi * Public License (GPL) 8*53ee8cc1Swenshuai.xi */ 9*53ee8cc1Swenshuai.xi 10*53ee8cc1Swenshuai.xi #ifndef _LINUX_SERIAL_H 11*53ee8cc1Swenshuai.xi #define _LINUX_SERIAL_H 12*53ee8cc1Swenshuai.xi 13*53ee8cc1Swenshuai.xi 14*53ee8cc1Swenshuai.xi struct serial_struct { 15*53ee8cc1Swenshuai.xi int type; 16*53ee8cc1Swenshuai.xi int line; 17*53ee8cc1Swenshuai.xi unsigned int port; 18*53ee8cc1Swenshuai.xi int irq; 19*53ee8cc1Swenshuai.xi int flags; 20*53ee8cc1Swenshuai.xi int xmit_fifo_size; 21*53ee8cc1Swenshuai.xi int custom_divisor; 22*53ee8cc1Swenshuai.xi int baud_base; 23*53ee8cc1Swenshuai.xi unsigned short close_delay; 24*53ee8cc1Swenshuai.xi char io_type; 25*53ee8cc1Swenshuai.xi char reserved_char[1]; 26*53ee8cc1Swenshuai.xi int hub6; 27*53ee8cc1Swenshuai.xi unsigned short closing_wait; /* time to wait before closing */ 28*53ee8cc1Swenshuai.xi unsigned short closing_wait2; /* no longer used... */ 29*53ee8cc1Swenshuai.xi unsigned char *iomem_base; 30*53ee8cc1Swenshuai.xi unsigned short iomem_reg_shift; 31*53ee8cc1Swenshuai.xi unsigned int port_high; 32*53ee8cc1Swenshuai.xi unsigned long iomap_base; /* cookie passed into ioremap */ 33*53ee8cc1Swenshuai.xi }; 34*53ee8cc1Swenshuai.xi 35*53ee8cc1Swenshuai.xi /* 36*53ee8cc1Swenshuai.xi * For the close wait times, 0 means wait forever for serial port to 37*53ee8cc1Swenshuai.xi * flush its output. 65535 means don't wait at all. 38*53ee8cc1Swenshuai.xi */ 39*53ee8cc1Swenshuai.xi #define ASYNC_CLOSING_WAIT_INF 0 40*53ee8cc1Swenshuai.xi #define ASYNC_CLOSING_WAIT_NONE 65535 41*53ee8cc1Swenshuai.xi 42*53ee8cc1Swenshuai.xi /* 43*53ee8cc1Swenshuai.xi * These are the supported serial types. 44*53ee8cc1Swenshuai.xi */ 45*53ee8cc1Swenshuai.xi #define PORT_UNKNOWN 0 46*53ee8cc1Swenshuai.xi #define PORT_8250 1 47*53ee8cc1Swenshuai.xi #define PORT_16450 2 48*53ee8cc1Swenshuai.xi #define PORT_16550 3 49*53ee8cc1Swenshuai.xi #define PORT_16550A 4 50*53ee8cc1Swenshuai.xi #define PORT_CIRRUS 5 /* usurped by cyclades.c */ 51*53ee8cc1Swenshuai.xi #define PORT_16650 6 52*53ee8cc1Swenshuai.xi #define PORT_16650V2 7 53*53ee8cc1Swenshuai.xi #define PORT_16750 8 54*53ee8cc1Swenshuai.xi #define PORT_STARTECH 9 /* usurped by cyclades.c */ 55*53ee8cc1Swenshuai.xi #define PORT_16C950 10 /* Oxford Semiconductor */ 56*53ee8cc1Swenshuai.xi #define PORT_16654 11 57*53ee8cc1Swenshuai.xi #define PORT_16850 12 58*53ee8cc1Swenshuai.xi #define PORT_RSA 13 /* RSA-DV II/S card */ 59*53ee8cc1Swenshuai.xi #define PORT_MAX 13 60*53ee8cc1Swenshuai.xi 61*53ee8cc1Swenshuai.xi #define SERIAL_IO_PORT 0 62*53ee8cc1Swenshuai.xi #define SERIAL_IO_HUB6 1 63*53ee8cc1Swenshuai.xi #define SERIAL_IO_MEM 2 64*53ee8cc1Swenshuai.xi 65*53ee8cc1Swenshuai.xi struct serial_uart_config { 66*53ee8cc1Swenshuai.xi char *name; 67*53ee8cc1Swenshuai.xi int dfl_xmit_fifo_size; 68*53ee8cc1Swenshuai.xi int flags; 69*53ee8cc1Swenshuai.xi }; 70*53ee8cc1Swenshuai.xi 71*53ee8cc1Swenshuai.xi #define UART_CLEAR_FIFO 0x01 72*53ee8cc1Swenshuai.xi #define UART_USE_FIFO 0x02 73*53ee8cc1Swenshuai.xi #define UART_STARTECH 0x04 74*53ee8cc1Swenshuai.xi #define UART_NATSEMI 0x08 75*53ee8cc1Swenshuai.xi 76*53ee8cc1Swenshuai.xi /* 77*53ee8cc1Swenshuai.xi * Definitions for async_struct (and serial_struct) flags field 78*53ee8cc1Swenshuai.xi */ 79*53ee8cc1Swenshuai.xi #define ASYNC_HUP_NOTIFY 0x0001 /* Notify getty on hangups and closes 80*53ee8cc1Swenshuai.xi on the callout port */ 81*53ee8cc1Swenshuai.xi #define ASYNC_FOURPORT 0x0002 /* Set OU1, OUT2 per AST Fourport settings */ 82*53ee8cc1Swenshuai.xi #define ASYNC_SAK 0x0004 /* Secure Attention Key (Orange book) */ 83*53ee8cc1Swenshuai.xi #define ASYNC_SPLIT_TERMIOS 0x0008 /* Separate termios for dialin/callout */ 84*53ee8cc1Swenshuai.xi 85*53ee8cc1Swenshuai.xi #define ASYNC_SPD_MASK 0x1030 86*53ee8cc1Swenshuai.xi #define ASYNC_SPD_HI 0x0010 /* Use 56000 instead of 38400 bps */ 87*53ee8cc1Swenshuai.xi 88*53ee8cc1Swenshuai.xi #define ASYNC_SPD_VHI 0x0020 /* Use 115200 instead of 38400 bps */ 89*53ee8cc1Swenshuai.xi #define ASYNC_SPD_CUST 0x0030 /* Use user-specified divisor */ 90*53ee8cc1Swenshuai.xi 91*53ee8cc1Swenshuai.xi #define ASYNC_SKIP_TEST 0x0040 /* Skip UART test during autoconfiguration */ 92*53ee8cc1Swenshuai.xi #define ASYNC_AUTO_IRQ 0x0080 /* Do automatic IRQ during autoconfiguration */ 93*53ee8cc1Swenshuai.xi #define ASYNC_SESSION_LOCKOUT 0x0100 /* Lock out cua opens based on session */ 94*53ee8cc1Swenshuai.xi #define ASYNC_PGRP_LOCKOUT 0x0200 /* Lock out cua opens based on pgrp */ 95*53ee8cc1Swenshuai.xi #define ASYNC_CALLOUT_NOHUP 0x0400 /* Don't do hangups for cua device */ 96*53ee8cc1Swenshuai.xi 97*53ee8cc1Swenshuai.xi #define ASYNC_HARDPPS_CD 0x0800 /* Call hardpps when CD goes high */ 98*53ee8cc1Swenshuai.xi 99*53ee8cc1Swenshuai.xi #define ASYNC_SPD_SHI 0x1000 /* Use 230400 instead of 38400 bps */ 100*53ee8cc1Swenshuai.xi #define ASYNC_SPD_WARP 0x1010 /* Use 460800 instead of 38400 bps */ 101*53ee8cc1Swenshuai.xi 102*53ee8cc1Swenshuai.xi #define ASYNC_LOW_LATENCY 0x2000 /* Request low latency behaviour */ 103*53ee8cc1Swenshuai.xi 104*53ee8cc1Swenshuai.xi #define ASYNC_BUGGY_UART 0x4000 /* This is a buggy UART, skip some safety 105*53ee8cc1Swenshuai.xi * checks. Note: can be dangerous! */ 106*53ee8cc1Swenshuai.xi 107*53ee8cc1Swenshuai.xi #define ASYNC_AUTOPROBE 0x8000 /* Port was autoprobed by PCI or PNP code */ 108*53ee8cc1Swenshuai.xi 109*53ee8cc1Swenshuai.xi #define ASYNC_FLAGS 0x7FFF /* Possible legal async flags */ 110*53ee8cc1Swenshuai.xi #define ASYNC_USR_MASK 0x3430 /* Legal flags that non-privileged 111*53ee8cc1Swenshuai.xi * users can set or reset */ 112*53ee8cc1Swenshuai.xi 113*53ee8cc1Swenshuai.xi /* Internal flags used only by kernel/chr_drv/serial.c */ 114*53ee8cc1Swenshuai.xi #define ASYNC_INITIALIZED 0x80000000 /* Serial port was initialized */ 115*53ee8cc1Swenshuai.xi #define ASYNC_NORMAL_ACTIVE 0x20000000 /* Normal device is active */ 116*53ee8cc1Swenshuai.xi #define ASYNC_BOOT_AUTOCONF 0x10000000 /* Autoconfigure port on bootup */ 117*53ee8cc1Swenshuai.xi #define ASYNC_CLOSING 0x08000000 /* Serial port is closing */ 118*53ee8cc1Swenshuai.xi #define ASYNC_CTS_FLOW 0x04000000 /* Do CTS flow control */ 119*53ee8cc1Swenshuai.xi #define ASYNC_CHECK_CD 0x02000000 /* i.e., CLOCAL */ 120*53ee8cc1Swenshuai.xi #define ASYNC_SHARE_IRQ 0x01000000 /* for multifunction cards 121*53ee8cc1Swenshuai.xi --- no longer used */ 122*53ee8cc1Swenshuai.xi #define ASYNC_CONS_FLOW 0x00800000 /* flow control for console */ 123*53ee8cc1Swenshuai.xi 124*53ee8cc1Swenshuai.xi #define ASYNC_BOOT_ONLYMCA 0x00400000 /* Probe only if MCA bus */ 125*53ee8cc1Swenshuai.xi #define ASYNC_INTERNAL_FLAGS 0xFFC00000 /* Internal flags */ 126*53ee8cc1Swenshuai.xi 127*53ee8cc1Swenshuai.xi /* 128*53ee8cc1Swenshuai.xi * Multiport serial configuration structure --- external structure 129*53ee8cc1Swenshuai.xi */ 130*53ee8cc1Swenshuai.xi struct serial_multiport_struct { 131*53ee8cc1Swenshuai.xi int irq; 132*53ee8cc1Swenshuai.xi int port1; 133*53ee8cc1Swenshuai.xi unsigned char mask1, match1; 134*53ee8cc1Swenshuai.xi int port2; 135*53ee8cc1Swenshuai.xi unsigned char mask2, match2; 136*53ee8cc1Swenshuai.xi int port3; 137*53ee8cc1Swenshuai.xi unsigned char mask3, match3; 138*53ee8cc1Swenshuai.xi int port4; 139*53ee8cc1Swenshuai.xi unsigned char mask4, match4; 140*53ee8cc1Swenshuai.xi int port_monitor; 141*53ee8cc1Swenshuai.xi int reserved[32]; 142*53ee8cc1Swenshuai.xi }; 143*53ee8cc1Swenshuai.xi 144*53ee8cc1Swenshuai.xi /* 145*53ee8cc1Swenshuai.xi * Serial input interrupt line counters -- external structure 146*53ee8cc1Swenshuai.xi * Four lines can interrupt: CTS, DSR, RI, DCD 147*53ee8cc1Swenshuai.xi */ 148*53ee8cc1Swenshuai.xi struct serial_icounter_struct { 149*53ee8cc1Swenshuai.xi int cts, dsr, rng, dcd; 150*53ee8cc1Swenshuai.xi int rx, tx; 151*53ee8cc1Swenshuai.xi int frame, overrun, parity, brk; 152*53ee8cc1Swenshuai.xi int buf_overrun; 153*53ee8cc1Swenshuai.xi int reserved[9]; 154*53ee8cc1Swenshuai.xi }; 155*53ee8cc1Swenshuai.xi 156*53ee8cc1Swenshuai.xi 157*53ee8cc1Swenshuai.xi #endif /* _LINUX_SERIAL_H */ 158