diff options
author | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 18:20:36 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 18:20:36 -0400 |
commit | 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (patch) | |
tree | 0bba044c4ce775e45a88a51686b5d9f90697ea9d /drivers/serial/68328serial.h |
Linux-2.6.12-rc2v2.6.12-rc2
Initial git repository build. I'm not bothering with the full history,
even though we have it. We can create a separate "historical" git
archive of that later if we want to, and in the meantime it's about
3.2GB when imported into git - space that would just make the early
git days unnecessarily complicated, when we don't have a lot of good
infrastructure for it.
Let it rip!
Diffstat (limited to 'drivers/serial/68328serial.h')
-rw-r--r-- | drivers/serial/68328serial.h | 194 |
1 files changed, 194 insertions, 0 deletions
diff --git a/drivers/serial/68328serial.h b/drivers/serial/68328serial.h new file mode 100644 index 000000000000..978f8a609f3d --- /dev/null +++ b/drivers/serial/68328serial.h | |||
@@ -0,0 +1,194 @@ | |||
1 | /* 68328serial.h: Definitions for the mc68328 serial driver. | ||
2 | * | ||
3 | * Copyright (C) 1995 David S. Miller <davem@caip.rutgers.edu> | ||
4 | * Copyright (C) 1998 Kenneth Albanowski <kjahds@kjahds.com> | ||
5 | * Copyright (C) 1998, 1999 D. Jeff Dionne <jeff@uclinux.org> | ||
6 | * Copyright (C) 1999 Vladimir Gurevich <vgurevic@cisco.com> | ||
7 | * | ||
8 | * VZ Support/Fixes Evan Stawnyczy <e@lineo.ca> | ||
9 | */ | ||
10 | |||
11 | #ifndef _MC683XX_SERIAL_H | ||
12 | #define _MC683XX_SERIAL_H | ||
13 | |||
14 | #include <linux/config.h> | ||
15 | |||
16 | struct serial_struct { | ||
17 | int type; | ||
18 | int line; | ||
19 | int port; | ||
20 | int irq; | ||
21 | int flags; | ||
22 | int xmit_fifo_size; | ||
23 | int custom_divisor; | ||
24 | int baud_base; | ||
25 | unsigned short close_delay; | ||
26 | char reserved_char[2]; | ||
27 | int hub6; /* FIXME: We don't have AT&T Hub6 boards! */ | ||
28 | unsigned short closing_wait; /* time to wait before closing */ | ||
29 | unsigned short closing_wait2; /* no longer used... */ | ||
30 | int reserved[4]; | ||
31 | }; | ||
32 | |||
33 | /* | ||
34 | * For the close wait times, 0 means wait forever for serial port to | ||
35 | * flush its output. 65535 means don't wait at all. | ||
36 | */ | ||
37 | #define S_CLOSING_WAIT_INF 0 | ||
38 | #define S_CLOSING_WAIT_NONE 65535 | ||
39 | |||
40 | /* | ||
41 | * Definitions for S_struct (and serial_struct) flags field | ||
42 | */ | ||
43 | #define S_HUP_NOTIFY 0x0001 /* Notify getty on hangups and closes | ||
44 | on the callout port */ | ||
45 | #define S_FOURPORT 0x0002 /* Set OU1, OUT2 per AST Fourport settings */ | ||
46 | #define S_SAK 0x0004 /* Secure Attention Key (Orange book) */ | ||
47 | #define S_SPLIT_TERMIOS 0x0008 /* Separate termios for dialin/callout */ | ||
48 | |||
49 | #define S_SPD_MASK 0x0030 | ||
50 | #define S_SPD_HI 0x0010 /* Use 56000 instead of 38400 bps */ | ||
51 | |||
52 | #define S_SPD_VHI 0x0020 /* Use 115200 instead of 38400 bps */ | ||
53 | #define S_SPD_CUST 0x0030 /* Use user-specified divisor */ | ||
54 | |||
55 | #define S_SKIP_TEST 0x0040 /* Skip UART test during autoconfiguration */ | ||
56 | #define S_AUTO_IRQ 0x0080 /* Do automatic IRQ during autoconfiguration */ | ||
57 | #define S_SESSION_LOCKOUT 0x0100 /* Lock out cua opens based on session */ | ||
58 | #define S_PGRP_LOCKOUT 0x0200 /* Lock out cua opens based on pgrp */ | ||
59 | #define S_CALLOUT_NOHUP 0x0400 /* Don't do hangups for cua device */ | ||
60 | |||
61 | #define S_FLAGS 0x0FFF /* Possible legal S flags */ | ||
62 | #define S_USR_MASK 0x0430 /* Legal flags that non-privileged | ||
63 | * users can set or reset */ | ||
64 | |||
65 | /* Internal flags used only by kernel/chr_drv/serial.c */ | ||
66 | #define S_INITIALIZED 0x80000000 /* Serial port was initialized */ | ||
67 | #define S_CALLOUT_ACTIVE 0x40000000 /* Call out device is active */ | ||
68 | #define S_NORMAL_ACTIVE 0x20000000 /* Normal device is active */ | ||
69 | #define S_BOOT_AUTOCONF 0x10000000 /* Autoconfigure port on bootup */ | ||
70 | #define S_CLOSING 0x08000000 /* Serial port is closing */ | ||
71 | #define S_CTS_FLOW 0x04000000 /* Do CTS flow control */ | ||
72 | #define S_CHECK_CD 0x02000000 /* i.e., CLOCAL */ | ||
73 | |||
74 | /* Software state per channel */ | ||
75 | |||
76 | #ifdef __KERNEL__ | ||
77 | |||
78 | /* | ||
79 | * I believe this is the optimal setting that reduces the number of interrupts. | ||
80 | * At high speeds the output might become a little "bursted" (use USTCNT_TXHE | ||
81 | * if that bothers you), but in most cases it will not, since we try to | ||
82 | * transmit characters every time rs_interrupt is called. Thus, quite often | ||
83 | * you'll see that a receive interrupt occures before the transmit one. | ||
84 | * -- Vladimir Gurevich | ||
85 | */ | ||
86 | #define USTCNT_TX_INTR_MASK (USTCNT_TXEE) | ||
87 | |||
88 | /* | ||
89 | * 68328 and 68EZ328 UARTS are a little bit different. EZ328 has special | ||
90 | * "Old data interrupt" which occures whenever the data stay in the FIFO | ||
91 | * longer than 30 bits time. This allows us to use FIFO without compromising | ||
92 | * latency. '328 does not have this feature and without the real 328-based | ||
93 | * board I would assume that RXRE is the safest setting. | ||
94 | * | ||
95 | * For EZ328 I use RXHE (Half empty) interrupt to reduce the number of | ||
96 | * interrupts. RXFE (receive queue full) causes the system to lose data | ||
97 | * at least at 115200 baud | ||
98 | * | ||
99 | * If your board is busy doing other stuff, you might consider to use | ||
100 | * RXRE (data ready intrrupt) instead. | ||
101 | * | ||
102 | * The other option is to make these INTR masks run-time configurable, so | ||
103 | * that people can dynamically adapt them according to the current usage. | ||
104 | * -- Vladimir Gurevich | ||
105 | */ | ||
106 | |||
107 | /* (es) */ | ||
108 | #if defined(CONFIG_M68EZ328) || defined(CONFIG_M68VZ328) | ||
109 | #define USTCNT_RX_INTR_MASK (USTCNT_RXHE | USTCNT_ODEN) | ||
110 | #elif defined(CONFIG_M68328) | ||
111 | #define USTCNT_RX_INTR_MASK (USTCNT_RXRE) | ||
112 | #else | ||
113 | #error Please, define the Rx interrupt events for your CPU | ||
114 | #endif | ||
115 | /* (/es) */ | ||
116 | |||
117 | /* | ||
118 | * This is our internal structure for each serial port's state. | ||
119 | * | ||
120 | * Many fields are paralleled by the structure used by the serial_struct | ||
121 | * structure. | ||
122 | * | ||
123 | * For definitions of the flags field, see tty.h | ||
124 | */ | ||
125 | |||
126 | struct m68k_serial { | ||
127 | char soft_carrier; /* Use soft carrier on this channel */ | ||
128 | char break_abort; /* Is serial console in, so process brk/abrt */ | ||
129 | char is_cons; /* Is this our console. */ | ||
130 | |||
131 | /* We need to know the current clock divisor | ||
132 | * to read the bps rate the chip has currently | ||
133 | * loaded. | ||
134 | */ | ||
135 | unsigned char clk_divisor; /* May be 1, 16, 32, or 64 */ | ||
136 | int baud; | ||
137 | int magic; | ||
138 | int baud_base; | ||
139 | int port; | ||
140 | int irq; | ||
141 | int flags; /* defined in tty.h */ | ||
142 | int type; /* UART type */ | ||
143 | struct tty_struct *tty; | ||
144 | int read_status_mask; | ||
145 | int ignore_status_mask; | ||
146 | int timeout; | ||
147 | int xmit_fifo_size; | ||
148 | int custom_divisor; | ||
149 | int x_char; /* xon/xoff character */ | ||
150 | int close_delay; | ||
151 | unsigned short closing_wait; | ||
152 | unsigned short closing_wait2; | ||
153 | unsigned long event; | ||
154 | unsigned long last_active; | ||
155 | int line; | ||
156 | int count; /* # of fd on device */ | ||
157 | int blocked_open; /* # of blocked opens */ | ||
158 | unsigned char *xmit_buf; | ||
159 | int xmit_head; | ||
160 | int xmit_tail; | ||
161 | int xmit_cnt; | ||
162 | struct work_struct tqueue; | ||
163 | struct work_struct tqueue_hangup; | ||
164 | wait_queue_head_t open_wait; | ||
165 | wait_queue_head_t close_wait; | ||
166 | }; | ||
167 | |||
168 | |||
169 | #define SERIAL_MAGIC 0x5301 | ||
170 | |||
171 | /* | ||
172 | * The size of the serial xmit buffer is 1 page, or 4096 bytes | ||
173 | */ | ||
174 | #define SERIAL_XMIT_SIZE 4096 | ||
175 | |||
176 | /* | ||
177 | * Events are used to schedule things to happen at timer-interrupt | ||
178 | * time, instead of at rs interrupt time. | ||
179 | */ | ||
180 | #define RS_EVENT_WRITE_WAKEUP 0 | ||
181 | |||
182 | /* | ||
183 | * Define the number of ports supported and their irqs. | ||
184 | */ | ||
185 | #ifndef CONFIG_68328_SERIAL_UART2 | ||
186 | #define NR_PORTS 1 | ||
187 | #define UART_IRQ_DEFNS {UART_IRQ_NUM} | ||
188 | #else | ||
189 | #define NR_PORTS 2 | ||
190 | #define UART_IRQ_DEFNS {UART1_IRQ_NUM, UART2_IRQ_NUM} | ||
191 | #endif | ||
192 | |||
193 | #endif /* __KERNEL__ */ | ||
194 | #endif /* !(_MC683XX_SERIAL_H) */ | ||