Merge tag 'stable/for-linus-3.7-rc0-tag' of git://git.kernel.org/pub/scm/linux/kernel...
[linux-2.6-block.git] / include / linux / serial.h
1 /*
2  * include/linux/serial.h
3  *
4  * Copyright (C) 1992 by Theodore Ts'o.
5  * 
6  * Redistribution of this file is permitted under the terms of the GNU 
7  * Public License (GPL)
8  */
9
10 #ifndef _LINUX_SERIAL_H
11 #define _LINUX_SERIAL_H
12
13 #include <linux/types.h>
14
15 #include <linux/tty_flags.h>
16
17 #ifdef __KERNEL__
18 #include <asm/page.h>
19
20
21 /*
22  * Counters of the input lines (CTS, DSR, RI, CD) interrupts
23  */
24
25 struct async_icount {
26         __u32   cts, dsr, rng, dcd, tx, rx;
27         __u32   frame, parity, overrun, brk;
28         __u32   buf_overrun;
29 };
30
31 /*
32  * The size of the serial xmit buffer is 1 page, or 4096 bytes
33  */
34 #define SERIAL_XMIT_SIZE PAGE_SIZE
35
36 #endif
37
38 struct serial_struct {
39         int     type;
40         int     line;
41         unsigned int    port;
42         int     irq;
43         int     flags;
44         int     xmit_fifo_size;
45         int     custom_divisor;
46         int     baud_base;
47         unsigned short  close_delay;
48         char    io_type;
49         char    reserved_char[1];
50         int     hub6;
51         unsigned short  closing_wait; /* time to wait before closing */
52         unsigned short  closing_wait2; /* no longer used... */
53         unsigned char   *iomem_base;
54         unsigned short  iomem_reg_shift;
55         unsigned int    port_high;
56         unsigned long   iomap_base;     /* cookie passed into ioremap */
57 };
58
59 /*
60  * For the close wait times, 0 means wait forever for serial port to
61  * flush its output.  65535 means don't wait at all.
62  */
63 #define ASYNC_CLOSING_WAIT_INF  0
64 #define ASYNC_CLOSING_WAIT_NONE 65535
65
66 /*
67  * These are the supported serial types.
68  */
69 #define PORT_UNKNOWN    0
70 #define PORT_8250       1
71 #define PORT_16450      2
72 #define PORT_16550      3
73 #define PORT_16550A     4
74 #define PORT_CIRRUS     5       /* usurped by cyclades.c */
75 #define PORT_16650      6
76 #define PORT_16650V2    7
77 #define PORT_16750      8
78 #define PORT_STARTECH   9       /* usurped by cyclades.c */
79 #define PORT_16C950     10      /* Oxford Semiconductor */
80 #define PORT_16654      11
81 #define PORT_16850      12
82 #define PORT_RSA        13      /* RSA-DV II/S card */
83 #define PORT_MAX        13
84
85 #define SERIAL_IO_PORT  0
86 #define SERIAL_IO_HUB6  1
87 #define SERIAL_IO_MEM   2
88
89 #define UART_CLEAR_FIFO         0x01
90 #define UART_USE_FIFO           0x02
91 #define UART_STARTECH           0x04
92 #define UART_NATSEMI            0x08
93
94
95 /*
96  * Multiport serial configuration structure --- external structure
97  */
98 struct serial_multiport_struct {
99         int             irq;
100         int             port1;
101         unsigned char   mask1, match1;
102         int             port2;
103         unsigned char   mask2, match2;
104         int             port3;
105         unsigned char   mask3, match3;
106         int             port4;
107         unsigned char   mask4, match4;
108         int             port_monitor;
109         int     reserved[32];
110 };
111
112 /*
113  * Serial input interrupt line counters -- external structure
114  * Four lines can interrupt: CTS, DSR, RI, DCD
115  */
116 struct serial_icounter_struct {
117         int cts, dsr, rng, dcd;
118         int rx, tx;
119         int frame, overrun, parity, brk;
120         int buf_overrun;
121         int reserved[9];
122 };
123
124 /*
125  * Serial interface for controlling RS485 settings on chips with suitable
126  * support. Set with TIOCSRS485 and get with TIOCGRS485 if supported by your
127  * platform. The set function returns the new state, with any unsupported bits
128  * reverted appropriately.
129  */
130
131 struct serial_rs485 {
132         __u32   flags;                  /* RS485 feature flags */
133 #define SER_RS485_ENABLED               (1 << 0)        /* If enabled */
134 #define SER_RS485_RTS_ON_SEND           (1 << 1)        /* Logical level for
135                                                            RTS pin when
136                                                            sending */
137 #define SER_RS485_RTS_AFTER_SEND        (1 << 2)        /* Logical level for
138                                                            RTS pin after sent*/
139 #define SER_RS485_RX_DURING_TX          (1 << 4)
140         __u32   delay_rts_before_send;  /* Delay before send (milliseconds) */
141         __u32   delay_rts_after_send;   /* Delay after send (milliseconds) */
142         __u32   padding[5];             /* Memory is cheap, new structs
143                                            are a royal PITA .. */
144 };
145
146 #ifdef __KERNEL__
147 #include <linux/compiler.h>
148
149 #endif /* __KERNEL__ */
150 #endif /* _LINUX_SERIAL_H */