1 /*
2  * Serial port driver for the ETRAX 100LX chip
3  *
4  *    Copyright (C) 1998-2007  Axis Communications AB
5  *
6  *    Many, many authors. Based once upon a time on serial.c for 16x50.
7  *
8  */
9 
10 static char *serial_version = "$Revision: 1.25 $";
11 
12 #include <linux/types.h>
13 #include <linux/errno.h>
14 #include <linux/signal.h>
15 #include <linux/sched.h>
16 #include <linux/timer.h>
17 #include <linux/interrupt.h>
18 #include <linux/tty.h>
19 #include <linux/tty_flip.h>
20 #include <linux/major.h>
21 #include <linux/string.h>
22 #include <linux/fcntl.h>
23 #include <linux/mm.h>
24 #include <linux/slab.h>
25 #include <linux/init.h>
26 #include <linux/kernel.h>
27 #include <linux/mutex.h>
28 #include <linux/bitops.h>
29 #include <linux/seq_file.h>
30 #include <linux/delay.h>
31 #include <linux/module.h>
32 #include <linux/uaccess.h>
33 #include <linux/io.h>
34 
35 #include <asm/irq.h>
36 #include <asm/dma.h>
37 
38 #include <arch/svinto.h>
39 #include <arch/system.h>
40 
41 /* non-arch dependent serial structures are in linux/serial.h */
42 #include <linux/serial.h>
43 /* while we keep our own stuff (struct e100_serial) in a local .h file */
44 #include "crisv10.h"
45 #include <asm/fasttimer.h>
46 #include <arch/io_interface_mux.h>
47 
48 #ifdef CONFIG_ETRAX_SERIAL_FAST_TIMER
49 #ifndef CONFIG_ETRAX_FAST_TIMER
50 #error "Enable FAST_TIMER to use SERIAL_FAST_TIMER"
51 #endif
52 #endif
53 
54 #if defined(CONFIG_ETRAX_SERIAL_RX_TIMEOUT_TICKS) && \
55            (CONFIG_ETRAX_SERIAL_RX_TIMEOUT_TICKS == 0)
56 #error "RX_TIMEOUT_TICKS == 0 not allowed, use 1"
57 #endif
58 
59 #if defined(CONFIG_ETRAX_RS485_ON_PA) && defined(CONFIG_ETRAX_RS485_ON_PORT_G)
60 #error "Disable either CONFIG_ETRAX_RS485_ON_PA or CONFIG_ETRAX_RS485_ON_PORT_G"
61 #endif
62 
63 /*
64  * All of the compatibilty code so we can compile serial.c against
65  * older kernels is hidden in serial_compat.h
66  */
67 #if defined(LOCAL_HEADERS)
68 #include "serial_compat.h"
69 #endif
70 
71 struct tty_driver *serial_driver;
72 
73 /* number of characters left in xmit buffer before we ask for more */
74 #define WAKEUP_CHARS 256
75 
76 //#define SERIAL_DEBUG_INTR
77 //#define SERIAL_DEBUG_OPEN
78 //#define SERIAL_DEBUG_FLOW
79 //#define SERIAL_DEBUG_DATA
80 //#define SERIAL_DEBUG_THROTTLE
81 //#define SERIAL_DEBUG_IO  /* Debug for Extra control and status pins */
82 //#define SERIAL_DEBUG_LINE 0 /* What serport we want to debug */
83 
84 /* Enable this to use serial interrupts to handle when you
85    expect the first received event on the serial port to
86    be an error, break or similar. Used to be able to flash IRMA
87    from eLinux */
88 #define SERIAL_HANDLE_EARLY_ERRORS
89 
90 /* Currently 16 descriptors x 128 bytes = 2048 bytes */
91 #define SERIAL_DESCR_BUF_SIZE 256
92 
93 #define SERIAL_PRESCALE_BASE 3125000 /* 3.125MHz */
94 #define DEF_BAUD_BASE SERIAL_PRESCALE_BASE
95 
96 /* We don't want to load the system with massive fast timer interrupt
97  * on high baudrates so limit it to 250 us (4kHz) */
98 #define MIN_FLUSH_TIME_USEC 250
99 
100 /* Add an x here to log a lot of timer stuff */
101 #define TIMERD(x)
102 /* Debug details of interrupt handling */
103 #define DINTR1(x)  /* irq on/off, errors */
104 #define DINTR2(x)    /* tx and rx */
105 /* Debug flip buffer stuff */
106 #define DFLIP(x)
107 /* Debug flow control and overview of data flow */
108 #define DFLOW(x)
109 #define DBAUD(x)
110 #define DLOG_INT_TRIG(x)
111 
112 //#define DEBUG_LOG_INCLUDED
113 #ifndef DEBUG_LOG_INCLUDED
114 #define DEBUG_LOG(line, string, value)
115 #else
116 struct debug_log_info
117 {
118 	unsigned long time;
119 	unsigned long timer_data;
120 //  int line;
121 	const char *string;
122 	int value;
123 };
124 #define DEBUG_LOG_SIZE 4096
125 
126 struct debug_log_info debug_log[DEBUG_LOG_SIZE];
127 int debug_log_pos = 0;
128 
129 #define DEBUG_LOG(_line, _string, _value) do { \
130   if ((_line) == SERIAL_DEBUG_LINE) {\
131     debug_log_func(_line, _string, _value); \
132   }\
133 }while(0)
134 
debug_log_func(int line,const char * string,int value)135 void debug_log_func(int line, const char *string, int value)
136 {
137 	if (debug_log_pos < DEBUG_LOG_SIZE) {
138 		debug_log[debug_log_pos].time = jiffies;
139 		debug_log[debug_log_pos].timer_data = *R_TIMER_DATA;
140 //    debug_log[debug_log_pos].line = line;
141 		debug_log[debug_log_pos].string = string;
142 		debug_log[debug_log_pos].value = value;
143 		debug_log_pos++;
144 	}
145 	/*printk(string, value);*/
146 }
147 #endif
148 
149 #ifndef CONFIG_ETRAX_SERIAL_RX_TIMEOUT_TICKS
150 /* Default number of timer ticks before flushing rx fifo
151  * When using "little data, low latency applications: use 0
152  * When using "much data applications (PPP)" use ~5
153  */
154 #define CONFIG_ETRAX_SERIAL_RX_TIMEOUT_TICKS 5
155 #endif
156 
157 unsigned long timer_data_to_ns(unsigned long timer_data);
158 
159 static void change_speed(struct e100_serial *info);
160 static void rs_throttle(struct tty_struct * tty);
161 static void rs_wait_until_sent(struct tty_struct *tty, int timeout);
162 static int rs_write(struct tty_struct *tty,
163 		const unsigned char *buf, int count);
164 #ifdef CONFIG_ETRAX_RS485
165 static int e100_write_rs485(struct tty_struct *tty,
166 		const unsigned char *buf, int count);
167 #endif
168 static int get_lsr_info(struct e100_serial *info, unsigned int *value);
169 
170 
171 #define DEF_BAUD 115200   /* 115.2 kbit/s */
172 #define STD_FLAGS (ASYNC_BOOT_AUTOCONF | ASYNC_SKIP_TEST)
173 #define DEF_RX 0x20  /* or SERIAL_CTRL_W >> 8 */
174 /* Default value of tx_ctrl register: has txd(bit 7)=1 (idle) as default */
175 #define DEF_TX 0x80  /* or SERIAL_CTRL_B */
176 
177 /* offsets from R_SERIALx_CTRL */
178 
179 #define REG_DATA 0
180 #define REG_DATA_STATUS32 0 /* this is the 32 bit register R_SERIALx_READ */
181 #define REG_TR_DATA 0
182 #define REG_STATUS 1
183 #define REG_TR_CTRL 1
184 #define REG_REC_CTRL 2
185 #define REG_BAUD 3
186 #define REG_XOFF 4  /* this is a 32 bit register */
187 
188 /* The bitfields are the same for all serial ports */
189 #define SER_RXD_MASK         IO_MASK(R_SERIAL0_STATUS, rxd)
190 #define SER_DATA_AVAIL_MASK  IO_MASK(R_SERIAL0_STATUS, data_avail)
191 #define SER_FRAMING_ERR_MASK IO_MASK(R_SERIAL0_STATUS, framing_err)
192 #define SER_PAR_ERR_MASK     IO_MASK(R_SERIAL0_STATUS, par_err)
193 #define SER_OVERRUN_MASK     IO_MASK(R_SERIAL0_STATUS, overrun)
194 
195 #define SER_ERROR_MASK (SER_OVERRUN_MASK | SER_PAR_ERR_MASK | SER_FRAMING_ERR_MASK)
196 
197 /* Values for info->errorcode */
198 #define ERRCODE_SET_BREAK    (TTY_BREAK)
199 #define ERRCODE_INSERT        0x100
200 #define ERRCODE_INSERT_BREAK (ERRCODE_INSERT | TTY_BREAK)
201 
202 #define FORCE_EOP(info)  *R_SET_EOP = 1U << info->iseteop;
203 
204 /*
205  * General note regarding the use of IO_* macros in this file:
206  *
207  * We will use the bits defined for DMA channel 6 when using various
208  * IO_* macros (e.g. IO_STATE, IO_MASK, IO_EXTRACT) and _assume_ they are
209  * the same for all channels (which of course they are).
210  *
211  * We will also use the bits defined for serial port 0 when writing commands
212  * to the different ports, as these bits too are the same for all ports.
213  */
214 
215 
216 /* Mask for the irqs possibly enabled in R_IRQ_MASK1_RD etc. */
217 static const unsigned long e100_ser_int_mask = 0
218 #ifdef CONFIG_ETRAX_SERIAL_PORT0
219 | IO_MASK(R_IRQ_MASK1_RD, ser0_data) | IO_MASK(R_IRQ_MASK1_RD, ser0_ready)
220 #endif
221 #ifdef CONFIG_ETRAX_SERIAL_PORT1
222 | IO_MASK(R_IRQ_MASK1_RD, ser1_data) | IO_MASK(R_IRQ_MASK1_RD, ser1_ready)
223 #endif
224 #ifdef CONFIG_ETRAX_SERIAL_PORT2
225 | IO_MASK(R_IRQ_MASK1_RD, ser2_data) | IO_MASK(R_IRQ_MASK1_RD, ser2_ready)
226 #endif
227 #ifdef CONFIG_ETRAX_SERIAL_PORT3
228 | IO_MASK(R_IRQ_MASK1_RD, ser3_data) | IO_MASK(R_IRQ_MASK1_RD, ser3_ready)
229 #endif
230 ;
231 unsigned long r_alt_ser_baudrate_shadow = 0;
232 
233 /* this is the data for the four serial ports in the etrax100 */
234 /*  DMA2(ser2), DMA4(ser3), DMA6(ser0) or DMA8(ser1) */
235 /* R_DMA_CHx_CLR_INTR, R_DMA_CHx_FIRST, R_DMA_CHx_CMD */
236 
237 static struct e100_serial rs_table[] = {
238 	{ .baud        = DEF_BAUD,
239 	  .ioport        = (unsigned char *)R_SERIAL0_CTRL,
240 	  .irq         = 1U << 12, /* uses DMA 6 and 7 */
241 	  .oclrintradr = R_DMA_CH6_CLR_INTR,
242 	  .ofirstadr   = R_DMA_CH6_FIRST,
243 	  .ocmdadr     = R_DMA_CH6_CMD,
244 	  .ostatusadr  = R_DMA_CH6_STATUS,
245 	  .iclrintradr = R_DMA_CH7_CLR_INTR,
246 	  .ifirstadr   = R_DMA_CH7_FIRST,
247 	  .icmdadr     = R_DMA_CH7_CMD,
248 	  .idescradr   = R_DMA_CH7_DESCR,
249 	  .flags       = STD_FLAGS,
250 	  .rx_ctrl     = DEF_RX,
251 	  .tx_ctrl     = DEF_TX,
252 	  .iseteop     = 2,
253 	  .dma_owner   = dma_ser0,
254 	  .io_if       = if_serial_0,
255 #ifdef CONFIG_ETRAX_SERIAL_PORT0
256           .enabled  = 1,
257 #ifdef CONFIG_ETRAX_SERIAL_PORT0_DMA6_OUT
258 	  .dma_out_enabled = 1,
259 	  .dma_out_nbr = SER0_TX_DMA_NBR,
260 	  .dma_out_irq_nbr = SER0_DMA_TX_IRQ_NBR,
261 	  .dma_out_irq_flags = 0,
262 	  .dma_out_irq_description = "serial 0 dma tr",
263 #else
264 	  .dma_out_enabled = 0,
265 	  .dma_out_nbr = UINT_MAX,
266 	  .dma_out_irq_nbr = 0,
267 	  .dma_out_irq_flags = 0,
268 	  .dma_out_irq_description = NULL,
269 #endif
270 #ifdef CONFIG_ETRAX_SERIAL_PORT0_DMA7_IN
271 	  .dma_in_enabled = 1,
272 	  .dma_in_nbr = SER0_RX_DMA_NBR,
273 	  .dma_in_irq_nbr = SER0_DMA_RX_IRQ_NBR,
274 	  .dma_in_irq_flags = 0,
275 	  .dma_in_irq_description = "serial 0 dma rec",
276 #else
277 	  .dma_in_enabled = 0,
278 	  .dma_in_nbr = UINT_MAX,
279 	  .dma_in_irq_nbr = 0,
280 	  .dma_in_irq_flags = 0,
281 	  .dma_in_irq_description = NULL,
282 #endif
283 #else
284           .enabled  = 0,
285 	  .io_if_description = NULL,
286 	  .dma_out_enabled = 0,
287 	  .dma_in_enabled = 0
288 #endif
289 
290 },  /* ttyS0 */
291 #ifndef CONFIG_SVINTO_SIM
292 	{ .baud        = DEF_BAUD,
293 	  .ioport        = (unsigned char *)R_SERIAL1_CTRL,
294 	  .irq         = 1U << 16, /* uses DMA 8 and 9 */
295 	  .oclrintradr = R_DMA_CH8_CLR_INTR,
296 	  .ofirstadr   = R_DMA_CH8_FIRST,
297 	  .ocmdadr     = R_DMA_CH8_CMD,
298 	  .ostatusadr  = R_DMA_CH8_STATUS,
299 	  .iclrintradr = R_DMA_CH9_CLR_INTR,
300 	  .ifirstadr   = R_DMA_CH9_FIRST,
301 	  .icmdadr     = R_DMA_CH9_CMD,
302 	  .idescradr   = R_DMA_CH9_DESCR,
303 	  .flags       = STD_FLAGS,
304 	  .rx_ctrl     = DEF_RX,
305 	  .tx_ctrl     = DEF_TX,
306 	  .iseteop     = 3,
307 	  .dma_owner   = dma_ser1,
308 	  .io_if       = if_serial_1,
309 #ifdef CONFIG_ETRAX_SERIAL_PORT1
310           .enabled  = 1,
311 	  .io_if_description = "ser1",
312 #ifdef CONFIG_ETRAX_SERIAL_PORT1_DMA8_OUT
313 	  .dma_out_enabled = 1,
314 	  .dma_out_nbr = SER1_TX_DMA_NBR,
315 	  .dma_out_irq_nbr = SER1_DMA_TX_IRQ_NBR,
316 	  .dma_out_irq_flags = 0,
317 	  .dma_out_irq_description = "serial 1 dma tr",
318 #else
319 	  .dma_out_enabled = 0,
320 	  .dma_out_nbr = UINT_MAX,
321 	  .dma_out_irq_nbr = 0,
322 	  .dma_out_irq_flags = 0,
323 	  .dma_out_irq_description = NULL,
324 #endif
325 #ifdef CONFIG_ETRAX_SERIAL_PORT1_DMA9_IN
326 	  .dma_in_enabled = 1,
327 	  .dma_in_nbr = SER1_RX_DMA_NBR,
328 	  .dma_in_irq_nbr = SER1_DMA_RX_IRQ_NBR,
329 	  .dma_in_irq_flags = 0,
330 	  .dma_in_irq_description = "serial 1 dma rec",
331 #else
332 	  .dma_in_enabled = 0,
333 	  .dma_in_enabled = 0,
334 	  .dma_in_nbr = UINT_MAX,
335 	  .dma_in_irq_nbr = 0,
336 	  .dma_in_irq_flags = 0,
337 	  .dma_in_irq_description = NULL,
338 #endif
339 #else
340           .enabled  = 0,
341 	  .io_if_description = NULL,
342 	  .dma_in_irq_nbr = 0,
343 	  .dma_out_enabled = 0,
344 	  .dma_in_enabled = 0
345 #endif
346 },  /* ttyS1 */
347 
348 	{ .baud        = DEF_BAUD,
349 	  .ioport        = (unsigned char *)R_SERIAL2_CTRL,
350 	  .irq         = 1U << 4,  /* uses DMA 2 and 3 */
351 	  .oclrintradr = R_DMA_CH2_CLR_INTR,
352 	  .ofirstadr   = R_DMA_CH2_FIRST,
353 	  .ocmdadr     = R_DMA_CH2_CMD,
354 	  .ostatusadr  = R_DMA_CH2_STATUS,
355 	  .iclrintradr = R_DMA_CH3_CLR_INTR,
356 	  .ifirstadr   = R_DMA_CH3_FIRST,
357 	  .icmdadr     = R_DMA_CH3_CMD,
358 	  .idescradr   = R_DMA_CH3_DESCR,
359 	  .flags       = STD_FLAGS,
360 	  .rx_ctrl     = DEF_RX,
361 	  .tx_ctrl     = DEF_TX,
362 	  .iseteop     = 0,
363 	  .dma_owner   = dma_ser2,
364 	  .io_if       = if_serial_2,
365 #ifdef CONFIG_ETRAX_SERIAL_PORT2
366           .enabled  = 1,
367 	  .io_if_description = "ser2",
368 #ifdef CONFIG_ETRAX_SERIAL_PORT2_DMA2_OUT
369 	  .dma_out_enabled = 1,
370 	  .dma_out_nbr = SER2_TX_DMA_NBR,
371 	  .dma_out_irq_nbr = SER2_DMA_TX_IRQ_NBR,
372 	  .dma_out_irq_flags = 0,
373 	  .dma_out_irq_description = "serial 2 dma tr",
374 #else
375 	  .dma_out_enabled = 0,
376 	  .dma_out_nbr = UINT_MAX,
377 	  .dma_out_irq_nbr = 0,
378 	  .dma_out_irq_flags = 0,
379 	  .dma_out_irq_description = NULL,
380 #endif
381 #ifdef CONFIG_ETRAX_SERIAL_PORT2_DMA3_IN
382 	  .dma_in_enabled = 1,
383 	  .dma_in_nbr = SER2_RX_DMA_NBR,
384 	  .dma_in_irq_nbr = SER2_DMA_RX_IRQ_NBR,
385 	  .dma_in_irq_flags = 0,
386 	  .dma_in_irq_description = "serial 2 dma rec",
387 #else
388 	  .dma_in_enabled = 0,
389 	  .dma_in_nbr = UINT_MAX,
390 	  .dma_in_irq_nbr = 0,
391 	  .dma_in_irq_flags = 0,
392 	  .dma_in_irq_description = NULL,
393 #endif
394 #else
395           .enabled  = 0,
396 	  .io_if_description = NULL,
397 	  .dma_out_enabled = 0,
398 	  .dma_in_enabled = 0
399 #endif
400  },  /* ttyS2 */
401 
402 	{ .baud        = DEF_BAUD,
403 	  .ioport        = (unsigned char *)R_SERIAL3_CTRL,
404 	  .irq         = 1U << 8,  /* uses DMA 4 and 5 */
405 	  .oclrintradr = R_DMA_CH4_CLR_INTR,
406 	  .ofirstadr   = R_DMA_CH4_FIRST,
407 	  .ocmdadr     = R_DMA_CH4_CMD,
408 	  .ostatusadr  = R_DMA_CH4_STATUS,
409 	  .iclrintradr = R_DMA_CH5_CLR_INTR,
410 	  .ifirstadr   = R_DMA_CH5_FIRST,
411 	  .icmdadr     = R_DMA_CH5_CMD,
412 	  .idescradr   = R_DMA_CH5_DESCR,
413 	  .flags       = STD_FLAGS,
414 	  .rx_ctrl     = DEF_RX,
415 	  .tx_ctrl     = DEF_TX,
416 	  .iseteop     = 1,
417 	  .dma_owner   = dma_ser3,
418 	  .io_if       = if_serial_3,
419 #ifdef CONFIG_ETRAX_SERIAL_PORT3
420           .enabled  = 1,
421 	  .io_if_description = "ser3",
422 #ifdef CONFIG_ETRAX_SERIAL_PORT3_DMA4_OUT
423 	  .dma_out_enabled = 1,
424 	  .dma_out_nbr = SER3_TX_DMA_NBR,
425 	  .dma_out_irq_nbr = SER3_DMA_TX_IRQ_NBR,
426 	  .dma_out_irq_flags = 0,
427 	  .dma_out_irq_description = "serial 3 dma tr",
428 #else
429 	  .dma_out_enabled = 0,
430 	  .dma_out_nbr = UINT_MAX,
431 	  .dma_out_irq_nbr = 0,
432 	  .dma_out_irq_flags = 0,
433 	  .dma_out_irq_description = NULL,
434 #endif
435 #ifdef CONFIG_ETRAX_SERIAL_PORT3_DMA5_IN
436 	  .dma_in_enabled = 1,
437 	  .dma_in_nbr = SER3_RX_DMA_NBR,
438 	  .dma_in_irq_nbr = SER3_DMA_RX_IRQ_NBR,
439 	  .dma_in_irq_flags = 0,
440 	  .dma_in_irq_description = "serial 3 dma rec",
441 #else
442 	  .dma_in_enabled = 0,
443 	  .dma_in_nbr = UINT_MAX,
444 	  .dma_in_irq_nbr = 0,
445 	  .dma_in_irq_flags = 0,
446 	  .dma_in_irq_description = NULL
447 #endif
448 #else
449           .enabled  = 0,
450 	  .io_if_description = NULL,
451 	  .dma_out_enabled = 0,
452 	  .dma_in_enabled = 0
453 #endif
454  }   /* ttyS3 */
455 #endif
456 };
457 
458 
459 #define NR_PORTS (sizeof(rs_table)/sizeof(struct e100_serial))
460 
461 #ifdef CONFIG_ETRAX_SERIAL_FAST_TIMER
462 static struct fast_timer fast_timers[NR_PORTS];
463 #endif
464 
465 #ifdef CONFIG_ETRAX_SERIAL_PROC_ENTRY
466 #define PROCSTAT(x) x
467 struct ser_statistics_type {
468 	int overrun_cnt;
469 	int early_errors_cnt;
470 	int ser_ints_ok_cnt;
471 	int errors_cnt;
472 	unsigned long int processing_flip;
473 	unsigned long processing_flip_still_room;
474 	unsigned long int timeout_flush_cnt;
475 	int rx_dma_ints;
476 	int tx_dma_ints;
477 	int rx_tot;
478 	int tx_tot;
479 };
480 
481 static struct ser_statistics_type ser_stat[NR_PORTS];
482 
483 #else
484 
485 #define PROCSTAT(x)
486 
487 #endif /* CONFIG_ETRAX_SERIAL_PROC_ENTRY */
488 
489 /* RS-485 */
490 #if defined(CONFIG_ETRAX_RS485)
491 #ifdef CONFIG_ETRAX_FAST_TIMER
492 static struct fast_timer fast_timers_rs485[NR_PORTS];
493 #endif
494 #if defined(CONFIG_ETRAX_RS485_ON_PA)
495 static int rs485_pa_bit = CONFIG_ETRAX_RS485_ON_PA_BIT;
496 #endif
497 #if defined(CONFIG_ETRAX_RS485_ON_PORT_G)
498 static int rs485_port_g_bit = CONFIG_ETRAX_RS485_ON_PORT_G_BIT;
499 #endif
500 #endif
501 
502 /* Info and macros needed for each ports extra control/status signals. */
503 #define E100_STRUCT_PORT(line, pinname) \
504  ((CONFIG_ETRAX_SER##line##_##pinname##_ON_PA_BIT >= 0)? \
505 		(R_PORT_PA_DATA): ( \
506  (CONFIG_ETRAX_SER##line##_##pinname##_ON_PB_BIT >= 0)? \
507 		(R_PORT_PB_DATA):&dummy_ser[line]))
508 
509 #define E100_STRUCT_SHADOW(line, pinname) \
510  ((CONFIG_ETRAX_SER##line##_##pinname##_ON_PA_BIT >= 0)? \
511 		(&port_pa_data_shadow): ( \
512  (CONFIG_ETRAX_SER##line##_##pinname##_ON_PB_BIT >= 0)? \
513 		(&port_pb_data_shadow):&dummy_ser[line]))
514 #define E100_STRUCT_MASK(line, pinname) \
515  ((CONFIG_ETRAX_SER##line##_##pinname##_ON_PA_BIT >= 0)? \
516 		(1<<CONFIG_ETRAX_SER##line##_##pinname##_ON_PA_BIT): ( \
517  (CONFIG_ETRAX_SER##line##_##pinname##_ON_PB_BIT >= 0)? \
518 		(1<<CONFIG_ETRAX_SER##line##_##pinname##_ON_PB_BIT):DUMMY_##pinname##_MASK))
519 
520 #define DUMMY_DTR_MASK 1
521 #define DUMMY_RI_MASK  2
522 #define DUMMY_DSR_MASK 4
523 #define DUMMY_CD_MASK  8
524 static unsigned char dummy_ser[NR_PORTS] = {0xFF, 0xFF, 0xFF,0xFF};
525 
526 /* If not all status pins are used or disabled, use mixed mode */
527 #ifdef CONFIG_ETRAX_SERIAL_PORT0
528 
529 #define SER0_PA_BITSUM (CONFIG_ETRAX_SER0_DTR_ON_PA_BIT+CONFIG_ETRAX_SER0_RI_ON_PA_BIT+CONFIG_ETRAX_SER0_DSR_ON_PA_BIT+CONFIG_ETRAX_SER0_CD_ON_PA_BIT)
530 
531 #if SER0_PA_BITSUM != -4
532 #  if CONFIG_ETRAX_SER0_DTR_ON_PA_BIT == -1
533 #    ifndef CONFIG_ETRAX_SER0_DTR_RI_DSR_CD_MIXED
534 #      define CONFIG_ETRAX_SER0_DTR_RI_DSR_CD_MIXED 1
535 #    endif
536 #   endif
537 # if CONFIG_ETRAX_SER0_RI_ON_PA_BIT == -1
538 #   ifndef CONFIG_ETRAX_SER0_DTR_RI_DSR_CD_MIXED
539 #     define CONFIG_ETRAX_SER0_DTR_RI_DSR_CD_MIXED 1
540 #   endif
541 #  endif
542 #  if CONFIG_ETRAX_SER0_DSR_ON_PA_BIT == -1
543 #    ifndef CONFIG_ETRAX_SER0_DTR_RI_DSR_CD_MIXED
544 #      define CONFIG_ETRAX_SER0_DTR_RI_DSR_CD_MIXED 1
545 #    endif
546 #  endif
547 #  if CONFIG_ETRAX_SER0_CD_ON_PA_BIT == -1
548 #    ifndef CONFIG_ETRAX_SER0_DTR_RI_DSR_CD_MIXED
549 #      define CONFIG_ETRAX_SER0_DTR_RI_DSR_CD_MIXED 1
550 #    endif
551 #  endif
552 #endif
553 
554 #define SER0_PB_BITSUM (CONFIG_ETRAX_SER0_DTR_ON_PB_BIT+CONFIG_ETRAX_SER0_RI_ON_PB_BIT+CONFIG_ETRAX_SER0_DSR_ON_PB_BIT+CONFIG_ETRAX_SER0_CD_ON_PB_BIT)
555 
556 #if SER0_PB_BITSUM != -4
557 #  if CONFIG_ETRAX_SER0_DTR_ON_PB_BIT == -1
558 #    ifndef CONFIG_ETRAX_SER0_DTR_RI_DSR_CD_MIXED
559 #      define CONFIG_ETRAX_SER0_DTR_RI_DSR_CD_MIXED 1
560 #    endif
561 #   endif
562 # if CONFIG_ETRAX_SER0_RI_ON_PB_BIT == -1
563 #   ifndef CONFIG_ETRAX_SER0_DTR_RI_DSR_CD_MIXED
564 #     define CONFIG_ETRAX_SER0_DTR_RI_DSR_CD_MIXED 1
565 #   endif
566 #  endif
567 #  if CONFIG_ETRAX_SER0_DSR_ON_PB_BIT == -1
568 #    ifndef CONFIG_ETRAX_SER0_DTR_RI_DSR_CD_MIXED
569 #      define CONFIG_ETRAX_SER0_DTR_RI_DSR_CD_MIXED 1
570 #    endif
571 #  endif
572 #  if CONFIG_ETRAX_SER0_CD_ON_PB_BIT == -1
573 #    ifndef CONFIG_ETRAX_SER0_DTR_RI_DSR_CD_MIXED
574 #      define CONFIG_ETRAX_SER0_DTR_RI_DSR_CD_MIXED 1
575 #    endif
576 #  endif
577 #endif
578 
579 #endif /* PORT0 */
580 
581 
582 #ifdef CONFIG_ETRAX_SERIAL_PORT1
583 
584 #define SER1_PA_BITSUM (CONFIG_ETRAX_SER1_DTR_ON_PA_BIT+CONFIG_ETRAX_SER1_RI_ON_PA_BIT+CONFIG_ETRAX_SER1_DSR_ON_PA_BIT+CONFIG_ETRAX_SER1_CD_ON_PA_BIT)
585 
586 #if SER1_PA_BITSUM != -4
587 #  if CONFIG_ETRAX_SER1_DTR_ON_PA_BIT == -1
588 #    ifndef CONFIG_ETRAX_SER1_DTR_RI_DSR_CD_MIXED
589 #      define CONFIG_ETRAX_SER1_DTR_RI_DSR_CD_MIXED 1
590 #    endif
591 #   endif
592 # if CONFIG_ETRAX_SER1_RI_ON_PA_BIT == -1
593 #   ifndef CONFIG_ETRAX_SER1_DTR_RI_DSR_CD_MIXED
594 #     define CONFIG_ETRAX_SER1_DTR_RI_DSR_CD_MIXED 1
595 #   endif
596 #  endif
597 #  if CONFIG_ETRAX_SER1_DSR_ON_PA_BIT == -1
598 #    ifndef CONFIG_ETRAX_SER1_DTR_RI_DSR_CD_MIXED
599 #      define CONFIG_ETRAX_SER1_DTR_RI_DSR_CD_MIXED 1
600 #    endif
601 #  endif
602 #  if CONFIG_ETRAX_SER1_CD_ON_PA_BIT == -1
603 #    ifndef CONFIG_ETRAX_SER1_DTR_RI_DSR_CD_MIXED
604 #      define CONFIG_ETRAX_SER1_DTR_RI_DSR_CD_MIXED 1
605 #    endif
606 #  endif
607 #endif
608 
609 #define SER1_PB_BITSUM (CONFIG_ETRAX_SER1_DTR_ON_PB_BIT+CONFIG_ETRAX_SER1_RI_ON_PB_BIT+CONFIG_ETRAX_SER1_DSR_ON_PB_BIT+CONFIG_ETRAX_SER1_CD_ON_PB_BIT)
610 
611 #if SER1_PB_BITSUM != -4
612 #  if CONFIG_ETRAX_SER1_DTR_ON_PB_BIT == -1
613 #    ifndef CONFIG_ETRAX_SER1_DTR_RI_DSR_CD_MIXED
614 #      define CONFIG_ETRAX_SER1_DTR_RI_DSR_CD_MIXED 1
615 #    endif
616 #   endif
617 # if CONFIG_ETRAX_SER1_RI_ON_PB_BIT == -1
618 #   ifndef CONFIG_ETRAX_SER1_DTR_RI_DSR_CD_MIXED
619 #     define CONFIG_ETRAX_SER1_DTR_RI_DSR_CD_MIXED 1
620 #   endif
621 #  endif
622 #  if CONFIG_ETRAX_SER1_DSR_ON_PB_BIT == -1
623 #    ifndef CONFIG_ETRAX_SER1_DTR_RI_DSR_CD_MIXED
624 #      define CONFIG_ETRAX_SER1_DTR_RI_DSR_CD_MIXED 1
625 #    endif
626 #  endif
627 #  if CONFIG_ETRAX_SER1_CD_ON_PB_BIT == -1
628 #    ifndef CONFIG_ETRAX_SER1_DTR_RI_DSR_CD_MIXED
629 #      define CONFIG_ETRAX_SER1_DTR_RI_DSR_CD_MIXED 1
630 #    endif
631 #  endif
632 #endif
633 
634 #endif /* PORT1 */
635 
636 #ifdef CONFIG_ETRAX_SERIAL_PORT2
637 
638 #define SER2_PA_BITSUM (CONFIG_ETRAX_SER2_DTR_ON_PA_BIT+CONFIG_ETRAX_SER2_RI_ON_PA_BIT+CONFIG_ETRAX_SER2_DSR_ON_PA_BIT+CONFIG_ETRAX_SER2_CD_ON_PA_BIT)
639 
640 #if SER2_PA_BITSUM != -4
641 #  if CONFIG_ETRAX_SER2_DTR_ON_PA_BIT == -1
642 #    ifndef CONFIG_ETRAX_SER2_DTR_RI_DSR_CD_MIXED
643 #      define CONFIG_ETRAX_SER2_DTR_RI_DSR_CD_MIXED 1
644 #    endif
645 #   endif
646 # if CONFIG_ETRAX_SER2_RI_ON_PA_BIT == -1
647 #   ifndef CONFIG_ETRAX_SER2_DTR_RI_DSR_CD_MIXED
648 #     define CONFIG_ETRAX_SER2_DTR_RI_DSR_CD_MIXED 1
649 #   endif
650 #  endif
651 #  if CONFIG_ETRAX_SER2_DSR_ON_PA_BIT == -1
652 #    ifndef CONFIG_ETRAX_SER2_DTR_RI_DSR_CD_MIXED
653 #      define CONFIG_ETRAX_SER2_DTR_RI_DSR_CD_MIXED 1
654 #    endif
655 #  endif
656 #  if CONFIG_ETRAX_SER2_CD_ON_PA_BIT == -1
657 #    ifndef CONFIG_ETRAX_SER2_DTR_RI_DSR_CD_MIXED
658 #      define CONFIG_ETRAX_SER2_DTR_RI_DSR_CD_MIXED 1
659 #    endif
660 #  endif
661 #endif
662 
663 #define SER2_PB_BITSUM (CONFIG_ETRAX_SER2_DTR_ON_PB_BIT+CONFIG_ETRAX_SER2_RI_ON_PB_BIT+CONFIG_ETRAX_SER2_DSR_ON_PB_BIT+CONFIG_ETRAX_SER2_CD_ON_PB_BIT)
664 
665 #if SER2_PB_BITSUM != -4
666 #  if CONFIG_ETRAX_SER2_DTR_ON_PB_BIT == -1
667 #    ifndef CONFIG_ETRAX_SER2_DTR_RI_DSR_CD_MIXED
668 #      define CONFIG_ETRAX_SER2_DTR_RI_DSR_CD_MIXED 1
669 #    endif
670 #   endif
671 # if CONFIG_ETRAX_SER2_RI_ON_PB_BIT == -1
672 #   ifndef CONFIG_ETRAX_SER2_DTR_RI_DSR_CD_MIXED
673 #     define CONFIG_ETRAX_SER2_DTR_RI_DSR_CD_MIXED 1
674 #   endif
675 #  endif
676 #  if CONFIG_ETRAX_SER2_DSR_ON_PB_BIT == -1
677 #    ifndef CONFIG_ETRAX_SER2_DTR_RI_DSR_CD_MIXED
678 #      define CONFIG_ETRAX_SER2_DTR_RI_DSR_CD_MIXED 1
679 #    endif
680 #  endif
681 #  if CONFIG_ETRAX_SER2_CD_ON_PB_BIT == -1
682 #    ifndef CONFIG_ETRAX_SER2_DTR_RI_DSR_CD_MIXED
683 #      define CONFIG_ETRAX_SER2_DTR_RI_DSR_CD_MIXED 1
684 #    endif
685 #  endif
686 #endif
687 
688 #endif /* PORT2 */
689 
690 #ifdef CONFIG_ETRAX_SERIAL_PORT3
691 
692 #define SER3_PA_BITSUM (CONFIG_ETRAX_SER3_DTR_ON_PA_BIT+CONFIG_ETRAX_SER3_RI_ON_PA_BIT+CONFIG_ETRAX_SER3_DSR_ON_PA_BIT+CONFIG_ETRAX_SER3_CD_ON_PA_BIT)
693 
694 #if SER3_PA_BITSUM != -4
695 #  if CONFIG_ETRAX_SER3_DTR_ON_PA_BIT == -1
696 #    ifndef CONFIG_ETRAX_SER3_DTR_RI_DSR_CD_MIXED
697 #      define CONFIG_ETRAX_SER3_DTR_RI_DSR_CD_MIXED 1
698 #    endif
699 #   endif
700 # if CONFIG_ETRAX_SER3_RI_ON_PA_BIT == -1
701 #   ifndef CONFIG_ETRAX_SER3_DTR_RI_DSR_CD_MIXED
702 #     define CONFIG_ETRAX_SER3_DTR_RI_DSR_CD_MIXED 1
703 #   endif
704 #  endif
705 #  if CONFIG_ETRAX_SER3_DSR_ON_PA_BIT == -1
706 #    ifndef CONFIG_ETRAX_SER3_DTR_RI_DSR_CD_MIXED
707 #      define CONFIG_ETRAX_SER3_DTR_RI_DSR_CD_MIXED 1
708 #    endif
709 #  endif
710 #  if CONFIG_ETRAX_SER3_CD_ON_PA_BIT == -1
711 #    ifndef CONFIG_ETRAX_SER3_DTR_RI_DSR_CD_MIXED
712 #      define CONFIG_ETRAX_SER3_DTR_RI_DSR_CD_MIXED 1
713 #    endif
714 #  endif
715 #endif
716 
717 #define SER3_PB_BITSUM (CONFIG_ETRAX_SER3_DTR_ON_PB_BIT+CONFIG_ETRAX_SER3_RI_ON_PB_BIT+CONFIG_ETRAX_SER3_DSR_ON_PB_BIT+CONFIG_ETRAX_SER3_CD_ON_PB_BIT)
718 
719 #if SER3_PB_BITSUM != -4
720 #  if CONFIG_ETRAX_SER3_DTR_ON_PB_BIT == -1
721 #    ifndef CONFIG_ETRAX_SER3_DTR_RI_DSR_CD_MIXED
722 #      define CONFIG_ETRAX_SER3_DTR_RI_DSR_CD_MIXED 1
723 #    endif
724 #   endif
725 # if CONFIG_ETRAX_SER3_RI_ON_PB_BIT == -1
726 #   ifndef CONFIG_ETRAX_SER3_DTR_RI_DSR_CD_MIXED
727 #     define CONFIG_ETRAX_SER3_DTR_RI_DSR_CD_MIXED 1
728 #   endif
729 #  endif
730 #  if CONFIG_ETRAX_SER3_DSR_ON_PB_BIT == -1
731 #    ifndef CONFIG_ETRAX_SER3_DTR_RI_DSR_CD_MIXED
732 #      define CONFIG_ETRAX_SER3_DTR_RI_DSR_CD_MIXED 1
733 #    endif
734 #  endif
735 #  if CONFIG_ETRAX_SER3_CD_ON_PB_BIT == -1
736 #    ifndef CONFIG_ETRAX_SER3_DTR_RI_DSR_CD_MIXED
737 #      define CONFIG_ETRAX_SER3_DTR_RI_DSR_CD_MIXED 1
738 #    endif
739 #  endif
740 #endif
741 
742 #endif /* PORT3 */
743 
744 
745 #if defined(CONFIG_ETRAX_SER0_DTR_RI_DSR_CD_MIXED) || \
746     defined(CONFIG_ETRAX_SER1_DTR_RI_DSR_CD_MIXED) || \
747     defined(CONFIG_ETRAX_SER2_DTR_RI_DSR_CD_MIXED) || \
748     defined(CONFIG_ETRAX_SER3_DTR_RI_DSR_CD_MIXED)
749 #define CONFIG_ETRAX_SERX_DTR_RI_DSR_CD_MIXED
750 #endif
751 
752 #ifdef CONFIG_ETRAX_SERX_DTR_RI_DSR_CD_MIXED
753 /* The pins can be mixed on PA and PB */
754 #define CONTROL_PINS_PORT_NOT_USED(line) \
755   &dummy_ser[line], &dummy_ser[line], \
756   &dummy_ser[line], &dummy_ser[line], \
757   &dummy_ser[line], &dummy_ser[line], \
758   &dummy_ser[line], &dummy_ser[line], \
759   DUMMY_DTR_MASK, DUMMY_RI_MASK, DUMMY_DSR_MASK, DUMMY_CD_MASK
760 
761 
762 struct control_pins
763 {
764 	volatile unsigned char *dtr_port;
765 	unsigned char          *dtr_shadow;
766 	volatile unsigned char *ri_port;
767 	unsigned char          *ri_shadow;
768 	volatile unsigned char *dsr_port;
769 	unsigned char          *dsr_shadow;
770 	volatile unsigned char *cd_port;
771 	unsigned char          *cd_shadow;
772 
773 	unsigned char dtr_mask;
774 	unsigned char ri_mask;
775 	unsigned char dsr_mask;
776 	unsigned char cd_mask;
777 };
778 
779 static const struct control_pins e100_modem_pins[NR_PORTS] =
780 {
781 	/* Ser 0 */
782 	{
783 #ifdef CONFIG_ETRAX_SERIAL_PORT0
784 	E100_STRUCT_PORT(0,DTR), E100_STRUCT_SHADOW(0,DTR),
785 	E100_STRUCT_PORT(0,RI),  E100_STRUCT_SHADOW(0,RI),
786 	E100_STRUCT_PORT(0,DSR), E100_STRUCT_SHADOW(0,DSR),
787 	E100_STRUCT_PORT(0,CD),  E100_STRUCT_SHADOW(0,CD),
788 	E100_STRUCT_MASK(0,DTR),
789 	E100_STRUCT_MASK(0,RI),
790 	E100_STRUCT_MASK(0,DSR),
791 	E100_STRUCT_MASK(0,CD)
792 #else
793 	CONTROL_PINS_PORT_NOT_USED(0)
794 #endif
795 	},
796 
797 	/* Ser 1 */
798 	{
799 #ifdef CONFIG_ETRAX_SERIAL_PORT1
800 	E100_STRUCT_PORT(1,DTR), E100_STRUCT_SHADOW(1,DTR),
801 	E100_STRUCT_PORT(1,RI),  E100_STRUCT_SHADOW(1,RI),
802 	E100_STRUCT_PORT(1,DSR), E100_STRUCT_SHADOW(1,DSR),
803 	E100_STRUCT_PORT(1,CD),  E100_STRUCT_SHADOW(1,CD),
804 	E100_STRUCT_MASK(1,DTR),
805 	E100_STRUCT_MASK(1,RI),
806 	E100_STRUCT_MASK(1,DSR),
807 	E100_STRUCT_MASK(1,CD)
808 #else
809 	CONTROL_PINS_PORT_NOT_USED(1)
810 #endif
811 	},
812 
813 	/* Ser 2 */
814 	{
815 #ifdef CONFIG_ETRAX_SERIAL_PORT2
816 	E100_STRUCT_PORT(2,DTR), E100_STRUCT_SHADOW(2,DTR),
817 	E100_STRUCT_PORT(2,RI),  E100_STRUCT_SHADOW(2,RI),
818 	E100_STRUCT_PORT(2,DSR), E100_STRUCT_SHADOW(2,DSR),
819 	E100_STRUCT_PORT(2,CD),  E100_STRUCT_SHADOW(2,CD),
820 	E100_STRUCT_MASK(2,DTR),
821 	E100_STRUCT_MASK(2,RI),
822 	E100_STRUCT_MASK(2,DSR),
823 	E100_STRUCT_MASK(2,CD)
824 #else
825 	CONTROL_PINS_PORT_NOT_USED(2)
826 #endif
827 	},
828 
829 	/* Ser 3 */
830 	{
831 #ifdef CONFIG_ETRAX_SERIAL_PORT3
832 	E100_STRUCT_PORT(3,DTR), E100_STRUCT_SHADOW(3,DTR),
833 	E100_STRUCT_PORT(3,RI),  E100_STRUCT_SHADOW(3,RI),
834 	E100_STRUCT_PORT(3,DSR), E100_STRUCT_SHADOW(3,DSR),
835 	E100_STRUCT_PORT(3,CD),  E100_STRUCT_SHADOW(3,CD),
836 	E100_STRUCT_MASK(3,DTR),
837 	E100_STRUCT_MASK(3,RI),
838 	E100_STRUCT_MASK(3,DSR),
839 	E100_STRUCT_MASK(3,CD)
840 #else
841 	CONTROL_PINS_PORT_NOT_USED(3)
842 #endif
843 	}
844 };
845 #else  /* CONFIG_ETRAX_SERX_DTR_RI_DSR_CD_MIXED */
846 
847 /* All pins are on either PA or PB for each serial port */
848 #define CONTROL_PINS_PORT_NOT_USED(line) \
849   &dummy_ser[line], &dummy_ser[line], \
850   DUMMY_DTR_MASK, DUMMY_RI_MASK, DUMMY_DSR_MASK, DUMMY_CD_MASK
851 
852 
853 struct control_pins
854 {
855 	volatile unsigned char *port;
856 	unsigned char          *shadow;
857 
858 	unsigned char dtr_mask;
859 	unsigned char ri_mask;
860 	unsigned char dsr_mask;
861 	unsigned char cd_mask;
862 };
863 
864 #define dtr_port port
865 #define dtr_shadow shadow
866 #define ri_port port
867 #define ri_shadow shadow
868 #define dsr_port port
869 #define dsr_shadow shadow
870 #define cd_port port
871 #define cd_shadow shadow
872 
873 static const struct control_pins e100_modem_pins[NR_PORTS] =
874 {
875 	/* Ser 0 */
876 	{
877 #ifdef CONFIG_ETRAX_SERIAL_PORT0
878 	E100_STRUCT_PORT(0,DTR), E100_STRUCT_SHADOW(0,DTR),
879 	E100_STRUCT_MASK(0,DTR),
880 	E100_STRUCT_MASK(0,RI),
881 	E100_STRUCT_MASK(0,DSR),
882 	E100_STRUCT_MASK(0,CD)
883 #else
884 	CONTROL_PINS_PORT_NOT_USED(0)
885 #endif
886 	},
887 
888 	/* Ser 1 */
889 	{
890 #ifdef CONFIG_ETRAX_SERIAL_PORT1
891 	E100_STRUCT_PORT(1,DTR), E100_STRUCT_SHADOW(1,DTR),
892 	E100_STRUCT_MASK(1,DTR),
893 	E100_STRUCT_MASK(1,RI),
894 	E100_STRUCT_MASK(1,DSR),
895 	E100_STRUCT_MASK(1,CD)
896 #else
897 	CONTROL_PINS_PORT_NOT_USED(1)
898 #endif
899 	},
900 
901 	/* Ser 2 */
902 	{
903 #ifdef CONFIG_ETRAX_SERIAL_PORT2
904 	E100_STRUCT_PORT(2,DTR), E100_STRUCT_SHADOW(2,DTR),
905 	E100_STRUCT_MASK(2,DTR),
906 	E100_STRUCT_MASK(2,RI),
907 	E100_STRUCT_MASK(2,DSR),
908 	E100_STRUCT_MASK(2,CD)
909 #else
910 	CONTROL_PINS_PORT_NOT_USED(2)
911 #endif
912 	},
913 
914 	/* Ser 3 */
915 	{
916 #ifdef CONFIG_ETRAX_SERIAL_PORT3
917 	E100_STRUCT_PORT(3,DTR), E100_STRUCT_SHADOW(3,DTR),
918 	E100_STRUCT_MASK(3,DTR),
919 	E100_STRUCT_MASK(3,RI),
920 	E100_STRUCT_MASK(3,DSR),
921 	E100_STRUCT_MASK(3,CD)
922 #else
923 	CONTROL_PINS_PORT_NOT_USED(3)
924 #endif
925 	}
926 };
927 #endif /* !CONFIG_ETRAX_SERX_DTR_RI_DSR_CD_MIXED */
928 
929 #define E100_RTS_MASK 0x20
930 #define E100_CTS_MASK 0x40
931 
932 /* All serial port signals are active low:
933  * active   = 0 -> 3.3V to RS-232 driver -> -12V on RS-232 level
934  * inactive = 1 -> 0V   to RS-232 driver -> +12V on RS-232 level
935  *
936  * These macros returns the pin value: 0=0V, >=1 = 3.3V on ETRAX chip
937  */
938 
939 /* Output */
940 #define E100_RTS_GET(info) ((info)->rx_ctrl & E100_RTS_MASK)
941 /* Input */
942 #define E100_CTS_GET(info) ((info)->ioport[REG_STATUS] & E100_CTS_MASK)
943 
944 /* These are typically PA or PB and 0 means 0V, 1 means 3.3V */
945 /* Is an output */
946 #define E100_DTR_GET(info) ((*e100_modem_pins[(info)->line].dtr_shadow) & e100_modem_pins[(info)->line].dtr_mask)
947 
948 /* Normally inputs */
949 #define E100_RI_GET(info) ((*e100_modem_pins[(info)->line].ri_port) & e100_modem_pins[(info)->line].ri_mask)
950 #define E100_CD_GET(info) ((*e100_modem_pins[(info)->line].cd_port) & e100_modem_pins[(info)->line].cd_mask)
951 
952 /* Input */
953 #define E100_DSR_GET(info) ((*e100_modem_pins[(info)->line].dsr_port) & e100_modem_pins[(info)->line].dsr_mask)
954 
955 
956 /*
957  * tmp_buf is used as a temporary buffer by serial_write.  We need to
958  * lock it in case the memcpy_fromfs blocks while swapping in a page,
959  * and some other program tries to do a serial write at the same time.
960  * Since the lock will only come under contention when the system is
961  * swapping and available memory is low, it makes sense to share one
962  * buffer across all the serial ports, since it significantly saves
963  * memory if large numbers of serial ports are open.
964  */
965 static unsigned char *tmp_buf;
966 static DEFINE_MUTEX(tmp_buf_mutex);
967 
968 /* Calculate the chartime depending on baudrate, numbor of bits etc. */
update_char_time(struct e100_serial * info)969 static void update_char_time(struct e100_serial * info)
970 {
971 	tcflag_t cflags = info->port.tty->termios->c_cflag;
972 	int bits;
973 
974 	/* calc. number of bits / data byte */
975 	/* databits + startbit and 1 stopbit */
976 	if ((cflags & CSIZE) == CS7)
977 		bits = 9;
978 	else
979 		bits = 10;
980 
981 	if (cflags & CSTOPB)     /* 2 stopbits ? */
982 		bits++;
983 
984 	if (cflags & PARENB)     /* parity bit ? */
985 		bits++;
986 
987 	/* calc timeout */
988 	info->char_time_usec = ((bits * 1000000) / info->baud) + 1;
989 	info->flush_time_usec = 4*info->char_time_usec;
990 	if (info->flush_time_usec < MIN_FLUSH_TIME_USEC)
991 		info->flush_time_usec = MIN_FLUSH_TIME_USEC;
992 
993 }
994 
995 /*
996  * This function maps from the Bxxxx defines in asm/termbits.h into real
997  * baud rates.
998  */
999 
1000 static int
cflag_to_baud(unsigned int cflag)1001 cflag_to_baud(unsigned int cflag)
1002 {
1003 	static int baud_table[] = {
1004 		0, 50, 75, 110, 134, 150, 200, 300, 600, 1200, 1800, 2400,
1005 		4800, 9600, 19200, 38400 };
1006 
1007 	static int ext_baud_table[] = {
1008 		0, 57600, 115200, 230400, 460800, 921600, 1843200, 6250000,
1009                 0, 0, 0, 0, 0, 0, 0, 0 };
1010 
1011 	if (cflag & CBAUDEX)
1012 		return ext_baud_table[(cflag & CBAUD) & ~CBAUDEX];
1013 	else
1014 		return baud_table[cflag & CBAUD];
1015 }
1016 
1017 /* and this maps to an etrax100 hardware baud constant */
1018 
1019 static unsigned char
cflag_to_etrax_baud(unsigned int cflag)1020 cflag_to_etrax_baud(unsigned int cflag)
1021 {
1022 	char retval;
1023 
1024 	static char baud_table[] = {
1025 		-1, -1, -1, -1, -1, -1, -1, 0, 1, 2, -1, 3, 4, 5, 6, 7 };
1026 
1027 	static char ext_baud_table[] = {
1028 		-1, 8, 9, 10, 11, 12, 13, 14, -1, -1, -1, -1, -1, -1, -1, -1 };
1029 
1030 	if (cflag & CBAUDEX)
1031 		retval = ext_baud_table[(cflag & CBAUD) & ~CBAUDEX];
1032 	else
1033 		retval = baud_table[cflag & CBAUD];
1034 
1035 	if (retval < 0) {
1036 		printk(KERN_WARNING "serdriver tried setting invalid baud rate, flags %x.\n", cflag);
1037 		retval = 5; /* choose default 9600 instead */
1038 	}
1039 
1040 	return retval | (retval << 4); /* choose same for both TX and RX */
1041 }
1042 
1043 
1044 /* Various static support functions */
1045 
1046 /* Functions to set or clear DTR/RTS on the requested line */
1047 /* It is complicated by the fact that RTS is a serial port register, while
1048  * DTR might not be implemented in the HW at all, and if it is, it can be on
1049  * any general port.
1050  */
1051 
1052 
1053 static inline void
e100_dtr(struct e100_serial * info,int set)1054 e100_dtr(struct e100_serial *info, int set)
1055 {
1056 #ifndef CONFIG_SVINTO_SIM
1057 	unsigned char mask = e100_modem_pins[info->line].dtr_mask;
1058 
1059 #ifdef SERIAL_DEBUG_IO
1060 	printk("ser%i dtr %i mask: 0x%02X\n", info->line, set, mask);
1061 	printk("ser%i shadow before 0x%02X get: %i\n",
1062 	       info->line, *e100_modem_pins[info->line].dtr_shadow,
1063 	       E100_DTR_GET(info));
1064 #endif
1065 	/* DTR is active low */
1066 	{
1067 		unsigned long flags;
1068 
1069 		local_irq_save(flags);
1070 		*e100_modem_pins[info->line].dtr_shadow &= ~mask;
1071 		*e100_modem_pins[info->line].dtr_shadow |= (set ? 0 : mask);
1072 		*e100_modem_pins[info->line].dtr_port = *e100_modem_pins[info->line].dtr_shadow;
1073 		local_irq_restore(flags);
1074 	}
1075 
1076 #ifdef SERIAL_DEBUG_IO
1077 	printk("ser%i shadow after 0x%02X get: %i\n",
1078 	       info->line, *e100_modem_pins[info->line].dtr_shadow,
1079 	       E100_DTR_GET(info));
1080 #endif
1081 #endif
1082 }
1083 
1084 /* set = 0 means 3.3V on the pin, bitvalue: 0=active, 1=inactive
1085  *                                          0=0V    , 1=3.3V
1086  */
1087 static inline void
e100_rts(struct e100_serial * info,int set)1088 e100_rts(struct e100_serial *info, int set)
1089 {
1090 #ifndef CONFIG_SVINTO_SIM
1091 	unsigned long flags;
1092 	local_irq_save(flags);
1093 	info->rx_ctrl &= ~E100_RTS_MASK;
1094 	info->rx_ctrl |= (set ? 0 : E100_RTS_MASK);  /* RTS is active low */
1095 	info->ioport[REG_REC_CTRL] = info->rx_ctrl;
1096 	local_irq_restore(flags);
1097 #ifdef SERIAL_DEBUG_IO
1098 	printk("ser%i rts %i\n", info->line, set);
1099 #endif
1100 #endif
1101 }
1102 
1103 
1104 /* If this behaves as a modem, RI and CD is an output */
1105 static inline void
e100_ri_out(struct e100_serial * info,int set)1106 e100_ri_out(struct e100_serial *info, int set)
1107 {
1108 #ifndef CONFIG_SVINTO_SIM
1109 	/* RI is active low */
1110 	{
1111 		unsigned char mask = e100_modem_pins[info->line].ri_mask;
1112 		unsigned long flags;
1113 
1114 		local_irq_save(flags);
1115 		*e100_modem_pins[info->line].ri_shadow &= ~mask;
1116 		*e100_modem_pins[info->line].ri_shadow |= (set ? 0 : mask);
1117 		*e100_modem_pins[info->line].ri_port = *e100_modem_pins[info->line].ri_shadow;
1118 		local_irq_restore(flags);
1119 	}
1120 #endif
1121 }
1122 static inline void
e100_cd_out(struct e100_serial * info,int set)1123 e100_cd_out(struct e100_serial *info, int set)
1124 {
1125 #ifndef CONFIG_SVINTO_SIM
1126 	/* CD is active low */
1127 	{
1128 		unsigned char mask = e100_modem_pins[info->line].cd_mask;
1129 		unsigned long flags;
1130 
1131 		local_irq_save(flags);
1132 		*e100_modem_pins[info->line].cd_shadow &= ~mask;
1133 		*e100_modem_pins[info->line].cd_shadow |= (set ? 0 : mask);
1134 		*e100_modem_pins[info->line].cd_port = *e100_modem_pins[info->line].cd_shadow;
1135 		local_irq_restore(flags);
1136 	}
1137 #endif
1138 }
1139 
1140 static inline void
e100_disable_rx(struct e100_serial * info)1141 e100_disable_rx(struct e100_serial *info)
1142 {
1143 #ifndef CONFIG_SVINTO_SIM
1144 	/* disable the receiver */
1145 	info->ioport[REG_REC_CTRL] =
1146 		(info->rx_ctrl &= ~IO_MASK(R_SERIAL0_REC_CTRL, rec_enable));
1147 #endif
1148 }
1149 
1150 static inline void
e100_enable_rx(struct e100_serial * info)1151 e100_enable_rx(struct e100_serial *info)
1152 {
1153 #ifndef CONFIG_SVINTO_SIM
1154 	/* enable the receiver */
1155 	info->ioport[REG_REC_CTRL] =
1156 		(info->rx_ctrl |= IO_MASK(R_SERIAL0_REC_CTRL, rec_enable));
1157 #endif
1158 }
1159 
1160 /* the rx DMA uses both the dma_descr and the dma_eop interrupts */
1161 
1162 static inline void
e100_disable_rxdma_irq(struct e100_serial * info)1163 e100_disable_rxdma_irq(struct e100_serial *info)
1164 {
1165 #ifdef SERIAL_DEBUG_INTR
1166 	printk("rxdma_irq(%d): 0\n",info->line);
1167 #endif
1168 	DINTR1(DEBUG_LOG(info->line,"IRQ disable_rxdma_irq %i\n", info->line));
1169 	*R_IRQ_MASK2_CLR = (info->irq << 2) | (info->irq << 3);
1170 }
1171 
1172 static inline void
e100_enable_rxdma_irq(struct e100_serial * info)1173 e100_enable_rxdma_irq(struct e100_serial *info)
1174 {
1175 #ifdef SERIAL_DEBUG_INTR
1176 	printk("rxdma_irq(%d): 1\n",info->line);
1177 #endif
1178 	DINTR1(DEBUG_LOG(info->line,"IRQ enable_rxdma_irq %i\n", info->line));
1179 	*R_IRQ_MASK2_SET = (info->irq << 2) | (info->irq << 3);
1180 }
1181 
1182 /* the tx DMA uses only dma_descr interrupt */
1183 
e100_disable_txdma_irq(struct e100_serial * info)1184 static void e100_disable_txdma_irq(struct e100_serial *info)
1185 {
1186 #ifdef SERIAL_DEBUG_INTR
1187 	printk("txdma_irq(%d): 0\n",info->line);
1188 #endif
1189 	DINTR1(DEBUG_LOG(info->line,"IRQ disable_txdma_irq %i\n", info->line));
1190 	*R_IRQ_MASK2_CLR = info->irq;
1191 }
1192 
e100_enable_txdma_irq(struct e100_serial * info)1193 static void e100_enable_txdma_irq(struct e100_serial *info)
1194 {
1195 #ifdef SERIAL_DEBUG_INTR
1196 	printk("txdma_irq(%d): 1\n",info->line);
1197 #endif
1198 	DINTR1(DEBUG_LOG(info->line,"IRQ enable_txdma_irq %i\n", info->line));
1199 	*R_IRQ_MASK2_SET = info->irq;
1200 }
1201 
e100_disable_txdma_channel(struct e100_serial * info)1202 static void e100_disable_txdma_channel(struct e100_serial *info)
1203 {
1204 	unsigned long flags;
1205 
1206 	/* Disable output DMA channel for the serial port in question
1207 	 * ( set to something other than serialX)
1208 	 */
1209 	local_irq_save(flags);
1210 	DFLOW(DEBUG_LOG(info->line, "disable_txdma_channel %i\n", info->line));
1211 	if (info->line == 0) {
1212 		if ((genconfig_shadow & IO_MASK(R_GEN_CONFIG, dma6)) ==
1213 		    IO_STATE(R_GEN_CONFIG, dma6, serial0)) {
1214 			genconfig_shadow &=  ~IO_MASK(R_GEN_CONFIG, dma6);
1215 			genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma6, unused);
1216 		}
1217 	} else if (info->line == 1) {
1218 		if ((genconfig_shadow & IO_MASK(R_GEN_CONFIG, dma8)) ==
1219 		    IO_STATE(R_GEN_CONFIG, dma8, serial1)) {
1220 			genconfig_shadow &=  ~IO_MASK(R_GEN_CONFIG, dma8);
1221 			genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma8, usb);
1222 		}
1223 	} else if (info->line == 2) {
1224 		if ((genconfig_shadow & IO_MASK(R_GEN_CONFIG, dma2)) ==
1225 		    IO_STATE(R_GEN_CONFIG, dma2, serial2)) {
1226 			genconfig_shadow &=  ~IO_MASK(R_GEN_CONFIG, dma2);
1227 			genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma2, par0);
1228 		}
1229 	} else if (info->line == 3) {
1230 		if ((genconfig_shadow & IO_MASK(R_GEN_CONFIG, dma4)) ==
1231 		    IO_STATE(R_GEN_CONFIG, dma4, serial3)) {
1232 			genconfig_shadow &=  ~IO_MASK(R_GEN_CONFIG, dma4);
1233 			genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma4, par1);
1234 		}
1235 	}
1236 	*R_GEN_CONFIG = genconfig_shadow;
1237 	local_irq_restore(flags);
1238 }
1239 
1240 
e100_enable_txdma_channel(struct e100_serial * info)1241 static void e100_enable_txdma_channel(struct e100_serial *info)
1242 {
1243 	unsigned long flags;
1244 
1245 	local_irq_save(flags);
1246 	DFLOW(DEBUG_LOG(info->line, "enable_txdma_channel %i\n", info->line));
1247 	/* Enable output DMA channel for the serial port in question */
1248 	if (info->line == 0) {
1249 		genconfig_shadow &=  ~IO_MASK(R_GEN_CONFIG, dma6);
1250 		genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma6, serial0);
1251 	} else if (info->line == 1) {
1252 		genconfig_shadow &=  ~IO_MASK(R_GEN_CONFIG, dma8);
1253 		genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma8, serial1);
1254 	} else if (info->line == 2) {
1255 		genconfig_shadow &=  ~IO_MASK(R_GEN_CONFIG, dma2);
1256 		genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma2, serial2);
1257 	} else if (info->line == 3) {
1258 		genconfig_shadow &=  ~IO_MASK(R_GEN_CONFIG, dma4);
1259 		genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma4, serial3);
1260 	}
1261 	*R_GEN_CONFIG = genconfig_shadow;
1262 	local_irq_restore(flags);
1263 }
1264 
e100_disable_rxdma_channel(struct e100_serial * info)1265 static void e100_disable_rxdma_channel(struct e100_serial *info)
1266 {
1267 	unsigned long flags;
1268 
1269 	/* Disable input DMA channel for the serial port in question
1270 	 * ( set to something other than serialX)
1271 	 */
1272 	local_irq_save(flags);
1273 	if (info->line == 0) {
1274 		if ((genconfig_shadow & IO_MASK(R_GEN_CONFIG, dma7)) ==
1275 		    IO_STATE(R_GEN_CONFIG, dma7, serial0)) {
1276 			genconfig_shadow &=  ~IO_MASK(R_GEN_CONFIG, dma7);
1277 			genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma7, unused);
1278 		}
1279 	} else if (info->line == 1) {
1280 		if ((genconfig_shadow & IO_MASK(R_GEN_CONFIG, dma9)) ==
1281 		    IO_STATE(R_GEN_CONFIG, dma9, serial1)) {
1282 			genconfig_shadow &=  ~IO_MASK(R_GEN_CONFIG, dma9);
1283 			genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma9, usb);
1284 		}
1285 	} else if (info->line == 2) {
1286 		if ((genconfig_shadow & IO_MASK(R_GEN_CONFIG, dma3)) ==
1287 		    IO_STATE(R_GEN_CONFIG, dma3, serial2)) {
1288 			genconfig_shadow &=  ~IO_MASK(R_GEN_CONFIG, dma3);
1289 			genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma3, par0);
1290 		}
1291 	} else if (info->line == 3) {
1292 		if ((genconfig_shadow & IO_MASK(R_GEN_CONFIG, dma5)) ==
1293 		    IO_STATE(R_GEN_CONFIG, dma5, serial3)) {
1294 			genconfig_shadow &=  ~IO_MASK(R_GEN_CONFIG, dma5);
1295 			genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma5, par1);
1296 		}
1297 	}
1298 	*R_GEN_CONFIG = genconfig_shadow;
1299 	local_irq_restore(flags);
1300 }
1301 
1302 
e100_enable_rxdma_channel(struct e100_serial * info)1303 static void e100_enable_rxdma_channel(struct e100_serial *info)
1304 {
1305 	unsigned long flags;
1306 
1307 	local_irq_save(flags);
1308 	/* Enable input DMA channel for the serial port in question */
1309 	if (info->line == 0) {
1310 		genconfig_shadow &=  ~IO_MASK(R_GEN_CONFIG, dma7);
1311 		genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma7, serial0);
1312 	} else if (info->line == 1) {
1313 		genconfig_shadow &=  ~IO_MASK(R_GEN_CONFIG, dma9);
1314 		genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma9, serial1);
1315 	} else if (info->line == 2) {
1316 		genconfig_shadow &=  ~IO_MASK(R_GEN_CONFIG, dma3);
1317 		genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma3, serial2);
1318 	} else if (info->line == 3) {
1319 		genconfig_shadow &=  ~IO_MASK(R_GEN_CONFIG, dma5);
1320 		genconfig_shadow |= IO_STATE(R_GEN_CONFIG, dma5, serial3);
1321 	}
1322 	*R_GEN_CONFIG = genconfig_shadow;
1323 	local_irq_restore(flags);
1324 }
1325 
1326 #ifdef SERIAL_HANDLE_EARLY_ERRORS
1327 /* in order to detect and fix errors on the first byte
1328    we have to use the serial interrupts as well. */
1329 
1330 static inline void
e100_disable_serial_data_irq(struct e100_serial * info)1331 e100_disable_serial_data_irq(struct e100_serial *info)
1332 {
1333 #ifdef SERIAL_DEBUG_INTR
1334 	printk("ser_irq(%d): 0\n",info->line);
1335 #endif
1336 	DINTR1(DEBUG_LOG(info->line,"IRQ disable data_irq %i\n", info->line));
1337 	*R_IRQ_MASK1_CLR = (1U << (8+2*info->line));
1338 }
1339 
1340 static inline void
e100_enable_serial_data_irq(struct e100_serial * info)1341 e100_enable_serial_data_irq(struct e100_serial *info)
1342 {
1343 #ifdef SERIAL_DEBUG_INTR
1344 	printk("ser_irq(%d): 1\n",info->line);
1345 	printk("**** %d = %d\n",
1346 	       (8+2*info->line),
1347 	       (1U << (8+2*info->line)));
1348 #endif
1349 	DINTR1(DEBUG_LOG(info->line,"IRQ enable data_irq %i\n", info->line));
1350 	*R_IRQ_MASK1_SET = (1U << (8+2*info->line));
1351 }
1352 #endif
1353 
1354 static inline void
e100_disable_serial_tx_ready_irq(struct e100_serial * info)1355 e100_disable_serial_tx_ready_irq(struct e100_serial *info)
1356 {
1357 #ifdef SERIAL_DEBUG_INTR
1358 	printk("ser_tx_irq(%d): 0\n",info->line);
1359 #endif
1360 	DINTR1(DEBUG_LOG(info->line,"IRQ disable ready_irq %i\n", info->line));
1361 	*R_IRQ_MASK1_CLR = (1U << (8+1+2*info->line));
1362 }
1363 
1364 static inline void
e100_enable_serial_tx_ready_irq(struct e100_serial * info)1365 e100_enable_serial_tx_ready_irq(struct e100_serial *info)
1366 {
1367 #ifdef SERIAL_DEBUG_INTR
1368 	printk("ser_tx_irq(%d): 1\n",info->line);
1369 	printk("**** %d = %d\n",
1370 	       (8+1+2*info->line),
1371 	       (1U << (8+1+2*info->line)));
1372 #endif
1373 	DINTR2(DEBUG_LOG(info->line,"IRQ enable ready_irq %i\n", info->line));
1374 	*R_IRQ_MASK1_SET = (1U << (8+1+2*info->line));
1375 }
1376 
e100_enable_rx_irq(struct e100_serial * info)1377 static inline void e100_enable_rx_irq(struct e100_serial *info)
1378 {
1379 	if (info->uses_dma_in)
1380 		e100_enable_rxdma_irq(info);
1381 	else
1382 		e100_enable_serial_data_irq(info);
1383 }
e100_disable_rx_irq(struct e100_serial * info)1384 static inline void e100_disable_rx_irq(struct e100_serial *info)
1385 {
1386 	if (info->uses_dma_in)
1387 		e100_disable_rxdma_irq(info);
1388 	else
1389 		e100_disable_serial_data_irq(info);
1390 }
1391 
1392 #if defined(CONFIG_ETRAX_RS485)
1393 /* Enable RS-485 mode on selected port. This is UGLY. */
1394 static int
e100_enable_rs485(struct tty_struct * tty,struct serial_rs485 * r)1395 e100_enable_rs485(struct tty_struct *tty, struct serial_rs485 *r)
1396 {
1397 	struct e100_serial * info = (struct e100_serial *)tty->driver_data;
1398 
1399 #if defined(CONFIG_ETRAX_RS485_ON_PA)
1400 	*R_PORT_PA_DATA = port_pa_data_shadow |= (1 << rs485_pa_bit);
1401 #endif
1402 #if defined(CONFIG_ETRAX_RS485_ON_PORT_G)
1403 	REG_SHADOW_SET(R_PORT_G_DATA,  port_g_data_shadow,
1404 		       rs485_port_g_bit, 1);
1405 #endif
1406 #if defined(CONFIG_ETRAX_RS485_LTC1387)
1407 	REG_SHADOW_SET(R_PORT_G_DATA, port_g_data_shadow,
1408 		       CONFIG_ETRAX_RS485_LTC1387_DXEN_PORT_G_BIT, 1);
1409 	REG_SHADOW_SET(R_PORT_G_DATA, port_g_data_shadow,
1410 		       CONFIG_ETRAX_RS485_LTC1387_RXEN_PORT_G_BIT, 1);
1411 #endif
1412 
1413 	info->rs485 = *r;
1414 
1415 	/* Maximum delay before RTS equal to 1000 */
1416 	if (info->rs485.delay_rts_before_send >= 1000)
1417 		info->rs485.delay_rts_before_send = 1000;
1418 
1419 /*	printk("rts: on send = %i, after = %i, enabled = %i",
1420 		    info->rs485.rts_on_send,
1421 		    info->rs485.rts_after_sent,
1422 		    info->rs485.enabled
1423 	);
1424 */
1425 	return 0;
1426 }
1427 
1428 static int
e100_write_rs485(struct tty_struct * tty,const unsigned char * buf,int count)1429 e100_write_rs485(struct tty_struct *tty,
1430                  const unsigned char *buf, int count)
1431 {
1432 	struct e100_serial * info = (struct e100_serial *)tty->driver_data;
1433 	int old_value = (info->rs485.flags) & SER_RS485_ENABLED;
1434 
1435 	/* rs485 is always implicitly enabled if we're using the ioctl()
1436 	 * but it doesn't have to be set in the serial_rs485
1437 	 * (to be backward compatible with old apps)
1438 	 * So we store, set and restore it.
1439 	 */
1440 	info->rs485.flags |= SER_RS485_ENABLED;
1441 	/* rs_write now deals with RS485 if enabled */
1442 	count = rs_write(tty, buf, count);
1443 	if (!old_value)
1444 		info->rs485.flags &= ~(SER_RS485_ENABLED);
1445 	return count;
1446 }
1447 
1448 #ifdef CONFIG_ETRAX_FAST_TIMER
1449 /* Timer function to toggle RTS when using FAST_TIMER */
rs485_toggle_rts_timer_function(unsigned long data)1450 static void rs485_toggle_rts_timer_function(unsigned long data)
1451 {
1452 	struct e100_serial *info = (struct e100_serial *)data;
1453 
1454 	fast_timers_rs485[info->line].function = NULL;
1455 	e100_rts(info, (info->rs485.flags & SER_RS485_RTS_AFTER_SEND));
1456 #if defined(CONFIG_ETRAX_RS485_DISABLE_RECEIVER)
1457 	e100_enable_rx(info);
1458 	e100_enable_rx_irq(info);
1459 #endif
1460 }
1461 #endif
1462 #endif /* CONFIG_ETRAX_RS485 */
1463 
1464 /*
1465  * ------------------------------------------------------------
1466  * rs_stop() and rs_start()
1467  *
1468  * This routines are called before setting or resetting tty->stopped.
1469  * They enable or disable transmitter using the XOFF registers, as necessary.
1470  * ------------------------------------------------------------
1471  */
1472 
1473 static void
rs_stop(struct tty_struct * tty)1474 rs_stop(struct tty_struct *tty)
1475 {
1476 	struct e100_serial *info = (struct e100_serial *)tty->driver_data;
1477 	if (info) {
1478 		unsigned long flags;
1479 		unsigned long xoff;
1480 
1481 		local_irq_save(flags);
1482 		DFLOW(DEBUG_LOG(info->line, "XOFF rs_stop xmit %i\n",
1483 				CIRC_CNT(info->xmit.head,
1484 					 info->xmit.tail,SERIAL_XMIT_SIZE)));
1485 
1486 		xoff = IO_FIELD(R_SERIAL0_XOFF, xoff_char,
1487 				STOP_CHAR(info->port.tty));
1488 		xoff |= IO_STATE(R_SERIAL0_XOFF, tx_stop, stop);
1489 		if (tty->termios->c_iflag & IXON ) {
1490 			xoff |= IO_STATE(R_SERIAL0_XOFF, auto_xoff, enable);
1491 		}
1492 
1493 		*((unsigned long *)&info->ioport[REG_XOFF]) = xoff;
1494 		local_irq_restore(flags);
1495 	}
1496 }
1497 
1498 static void
rs_start(struct tty_struct * tty)1499 rs_start(struct tty_struct *tty)
1500 {
1501 	struct e100_serial *info = (struct e100_serial *)tty->driver_data;
1502 	if (info) {
1503 		unsigned long flags;
1504 		unsigned long xoff;
1505 
1506 		local_irq_save(flags);
1507 		DFLOW(DEBUG_LOG(info->line, "XOFF rs_start xmit %i\n",
1508 				CIRC_CNT(info->xmit.head,
1509 					 info->xmit.tail,SERIAL_XMIT_SIZE)));
1510 		xoff = IO_FIELD(R_SERIAL0_XOFF, xoff_char, STOP_CHAR(tty));
1511 		xoff |= IO_STATE(R_SERIAL0_XOFF, tx_stop, enable);
1512 		if (tty->termios->c_iflag & IXON ) {
1513 			xoff |= IO_STATE(R_SERIAL0_XOFF, auto_xoff, enable);
1514 		}
1515 
1516 		*((unsigned long *)&info->ioport[REG_XOFF]) = xoff;
1517 		if (!info->uses_dma_out &&
1518 		    info->xmit.head != info->xmit.tail && info->xmit.buf)
1519 			e100_enable_serial_tx_ready_irq(info);
1520 
1521 		local_irq_restore(flags);
1522 	}
1523 }
1524 
1525 /*
1526  * ----------------------------------------------------------------------
1527  *
1528  * Here starts the interrupt handling routines.  All of the following
1529  * subroutines are declared as inline and are folded into
1530  * rs_interrupt().  They were separated out for readability's sake.
1531  *
1532  * Note: rs_interrupt() is a "fast" interrupt, which means that it
1533  * runs with interrupts turned off.  People who may want to modify
1534  * rs_interrupt() should try to keep the interrupt handler as fast as
1535  * possible.  After you are done making modifications, it is not a bad
1536  * idea to do:
1537  *
1538  * gcc -S -DKERNEL -Wall -Wstrict-prototypes -O6 -fomit-frame-pointer serial.c
1539  *
1540  * and look at the resulting assemble code in serial.s.
1541  *
1542  * 				- Ted Ts'o (tytso@mit.edu), 7-Mar-93
1543  * -----------------------------------------------------------------------
1544  */
1545 
1546 /*
1547  * This routine is used by the interrupt handler to schedule
1548  * processing in the software interrupt portion of the driver.
1549  */
rs_sched_event(struct e100_serial * info,int event)1550 static void rs_sched_event(struct e100_serial *info, int event)
1551 {
1552 	if (info->event & (1 << event))
1553 		return;
1554 	info->event |= 1 << event;
1555 	schedule_work(&info->work);
1556 }
1557 
1558 /* The output DMA channel is free - use it to send as many chars as possible
1559  * NOTES:
1560  *   We don't pay attention to info->x_char, which means if the TTY wants to
1561  *   use XON/XOFF it will set info->x_char but we won't send any X char!
1562  *
1563  *   To implement this, we'd just start a DMA send of 1 byte pointing at a
1564  *   buffer containing the X char, and skip updating xmit. We'd also have to
1565  *   check if the last sent char was the X char when we enter this function
1566  *   the next time, to avoid updating xmit with the sent X value.
1567  */
1568 
1569 static void
transmit_chars_dma(struct e100_serial * info)1570 transmit_chars_dma(struct e100_serial *info)
1571 {
1572 	unsigned int c, sentl;
1573 	struct etrax_dma_descr *descr;
1574 
1575 #ifdef CONFIG_SVINTO_SIM
1576 	/* This will output too little if tail is not 0 always since
1577 	 * we don't reloop to send the other part. Anyway this SHOULD be a
1578 	 * no-op - transmit_chars_dma would never really be called during sim
1579 	 * since rs_write does not write into the xmit buffer then.
1580 	 */
1581 	if (info->xmit.tail)
1582 		printk("Error in serial.c:transmit_chars-dma(), tail!=0\n");
1583 	if (info->xmit.head != info->xmit.tail) {
1584 		SIMCOUT(info->xmit.buf + info->xmit.tail,
1585 			CIRC_CNT(info->xmit.head,
1586 				 info->xmit.tail,
1587 				 SERIAL_XMIT_SIZE));
1588 		info->xmit.head = info->xmit.tail;  /* move back head */
1589 		info->tr_running = 0;
1590 	}
1591 	return;
1592 #endif
1593 	/* acknowledge both dma_descr and dma_eop irq in R_DMA_CHx_CLR_INTR */
1594 	*info->oclrintradr =
1595 		IO_STATE(R_DMA_CH6_CLR_INTR, clr_descr, do) |
1596 		IO_STATE(R_DMA_CH6_CLR_INTR, clr_eop, do);
1597 
1598 #ifdef SERIAL_DEBUG_INTR
1599 	if (info->line == SERIAL_DEBUG_LINE)
1600 		printk("tc\n");
1601 #endif
1602 	if (!info->tr_running) {
1603 		/* weirdo... we shouldn't get here! */
1604 		printk(KERN_WARNING "Achtung: transmit_chars_dma with !tr_running\n");
1605 		return;
1606 	}
1607 
1608 	descr = &info->tr_descr;
1609 
1610 	/* first get the amount of bytes sent during the last DMA transfer,
1611 	   and update xmit accordingly */
1612 
1613 	/* if the stop bit was not set, all data has been sent */
1614 	if (!(descr->status & d_stop)) {
1615 		sentl = descr->sw_len;
1616 	} else
1617 		/* otherwise we find the amount of data sent here */
1618 		sentl = descr->hw_len;
1619 
1620 	DFLOW(DEBUG_LOG(info->line, "TX %i done\n", sentl));
1621 
1622 	/* update stats */
1623 	info->icount.tx += sentl;
1624 
1625 	/* update xmit buffer */
1626 	info->xmit.tail = (info->xmit.tail + sentl) & (SERIAL_XMIT_SIZE - 1);
1627 
1628 	/* if there is only a few chars left in the buf, wake up the blocked
1629 	   write if any */
1630 	if (CIRC_CNT(info->xmit.head,
1631 		     info->xmit.tail,
1632 		     SERIAL_XMIT_SIZE) < WAKEUP_CHARS)
1633 		rs_sched_event(info, RS_EVENT_WRITE_WAKEUP);
1634 
1635 	/* find out the largest amount of consecutive bytes we want to send now */
1636 
1637 	c = CIRC_CNT_TO_END(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE);
1638 
1639 	/* Don't send all in one DMA transfer - divide it so we wake up
1640 	 * application before all is sent
1641 	 */
1642 
1643 	if (c >= 4*WAKEUP_CHARS)
1644 		c = c/2;
1645 
1646 	if (c <= 0) {
1647 		/* our job here is done, don't schedule any new DMA transfer */
1648 		info->tr_running = 0;
1649 
1650 #if defined(CONFIG_ETRAX_RS485) && defined(CONFIG_ETRAX_FAST_TIMER)
1651 		if (info->rs485.flags & SER_RS485_ENABLED) {
1652 			/* Set a short timer to toggle RTS */
1653 			start_one_shot_timer(&fast_timers_rs485[info->line],
1654 			                     rs485_toggle_rts_timer_function,
1655 			                     (unsigned long)info,
1656 			                     info->char_time_usec*2,
1657 			                     "RS-485");
1658 		}
1659 #endif /* RS485 */
1660 		return;
1661 	}
1662 
1663 	/* ok we can schedule a dma send of c chars starting at info->xmit.tail */
1664 	/* set up the descriptor correctly for output */
1665 	DFLOW(DEBUG_LOG(info->line, "TX %i\n", c));
1666 	descr->ctrl = d_int | d_eol | d_wait; /* Wait needed for tty_wait_until_sent() */
1667 	descr->sw_len = c;
1668 	descr->buf = virt_to_phys(info->xmit.buf + info->xmit.tail);
1669 	descr->status = 0;
1670 
1671 	*info->ofirstadr = virt_to_phys(descr); /* write to R_DMAx_FIRST */
1672 	*info->ocmdadr = IO_STATE(R_DMA_CH6_CMD, cmd, start);
1673 
1674 	/* DMA is now running (hopefully) */
1675 } /* transmit_chars_dma */
1676 
1677 static void
start_transmit(struct e100_serial * info)1678 start_transmit(struct e100_serial *info)
1679 {
1680 #if 0
1681 	if (info->line == SERIAL_DEBUG_LINE)
1682 		printk("x\n");
1683 #endif
1684 
1685 	info->tr_descr.sw_len = 0;
1686 	info->tr_descr.hw_len = 0;
1687 	info->tr_descr.status = 0;
1688 	info->tr_running = 1;
1689 	if (info->uses_dma_out)
1690 		transmit_chars_dma(info);
1691 	else
1692 		e100_enable_serial_tx_ready_irq(info);
1693 } /* start_transmit */
1694 
1695 #ifdef CONFIG_ETRAX_SERIAL_FAST_TIMER
1696 static int serial_fast_timer_started = 0;
1697 static int serial_fast_timer_expired = 0;
1698 static void flush_timeout_function(unsigned long data);
1699 #define START_FLUSH_FAST_TIMER_TIME(info, string, usec) {\
1700   unsigned long timer_flags; \
1701   local_irq_save(timer_flags); \
1702   if (fast_timers[info->line].function == NULL) { \
1703     serial_fast_timer_started++; \
1704     TIMERD(DEBUG_LOG(info->line, "start_timer %i ", info->line)); \
1705     TIMERD(DEBUG_LOG(info->line, "num started: %i\n", serial_fast_timer_started)); \
1706     start_one_shot_timer(&fast_timers[info->line], \
1707                          flush_timeout_function, \
1708                          (unsigned long)info, \
1709                          (usec), \
1710                          string); \
1711   } \
1712   else { \
1713     TIMERD(DEBUG_LOG(info->line, "timer %i already running\n", info->line)); \
1714   } \
1715   local_irq_restore(timer_flags); \
1716 }
1717 #define START_FLUSH_FAST_TIMER(info, string) START_FLUSH_FAST_TIMER_TIME(info, string, info->flush_time_usec)
1718 
1719 #else
1720 #define START_FLUSH_FAST_TIMER_TIME(info, string, usec)
1721 #define START_FLUSH_FAST_TIMER(info, string)
1722 #endif
1723 
1724 static struct etrax_recv_buffer *
alloc_recv_buffer(unsigned int size)1725 alloc_recv_buffer(unsigned int size)
1726 {
1727 	struct etrax_recv_buffer *buffer;
1728 
1729 	if (!(buffer = kmalloc(sizeof *buffer + size, GFP_ATOMIC)))
1730 		return NULL;
1731 
1732 	buffer->next = NULL;
1733 	buffer->length = 0;
1734 	buffer->error = TTY_NORMAL;
1735 
1736 	return buffer;
1737 }
1738 
1739 static void
append_recv_buffer(struct e100_serial * info,struct etrax_recv_buffer * buffer)1740 append_recv_buffer(struct e100_serial *info, struct etrax_recv_buffer *buffer)
1741 {
1742 	unsigned long flags;
1743 
1744 	local_irq_save(flags);
1745 
1746 	if (!info->first_recv_buffer)
1747 		info->first_recv_buffer = buffer;
1748 	else
1749 		info->last_recv_buffer->next = buffer;
1750 
1751 	info->last_recv_buffer = buffer;
1752 
1753 	info->recv_cnt += buffer->length;
1754 	if (info->recv_cnt > info->max_recv_cnt)
1755 		info->max_recv_cnt = info->recv_cnt;
1756 
1757 	local_irq_restore(flags);
1758 }
1759 
1760 static int
add_char_and_flag(struct e100_serial * info,unsigned char data,unsigned char flag)1761 add_char_and_flag(struct e100_serial *info, unsigned char data, unsigned char flag)
1762 {
1763 	struct etrax_recv_buffer *buffer;
1764 	if (info->uses_dma_in) {
1765 		if (!(buffer = alloc_recv_buffer(4)))
1766 			return 0;
1767 
1768 		buffer->length = 1;
1769 		buffer->error = flag;
1770 		buffer->buffer[0] = data;
1771 
1772 		append_recv_buffer(info, buffer);
1773 
1774 		info->icount.rx++;
1775 	} else {
1776 		struct tty_struct *tty = info->port.tty;
1777 		tty_insert_flip_char(tty, data, flag);
1778 		info->icount.rx++;
1779 	}
1780 
1781 	return 1;
1782 }
1783 
handle_descr_data(struct e100_serial * info,struct etrax_dma_descr * descr,unsigned int recvl)1784 static unsigned int handle_descr_data(struct e100_serial *info,
1785 				      struct etrax_dma_descr *descr,
1786 				      unsigned int recvl)
1787 {
1788 	struct etrax_recv_buffer *buffer = phys_to_virt(descr->buf) - sizeof *buffer;
1789 
1790 	if (info->recv_cnt + recvl > 65536) {
1791 		printk(KERN_WARNING
1792 		       "%s: Too much pending incoming serial data! Dropping %u bytes.\n", __func__, recvl);
1793 		return 0;
1794 	}
1795 
1796 	buffer->length = recvl;
1797 
1798 	if (info->errorcode == ERRCODE_SET_BREAK)
1799 		buffer->error = TTY_BREAK;
1800 	info->errorcode = 0;
1801 
1802 	append_recv_buffer(info, buffer);
1803 
1804 	if (!(buffer = alloc_recv_buffer(SERIAL_DESCR_BUF_SIZE)))
1805 		panic("%s: Failed to allocate memory for receive buffer!\n", __func__);
1806 
1807 	descr->buf = virt_to_phys(buffer->buffer);
1808 
1809 	return recvl;
1810 }
1811 
handle_all_descr_data(struct e100_serial * info)1812 static unsigned int handle_all_descr_data(struct e100_serial *info)
1813 {
1814 	struct etrax_dma_descr *descr;
1815 	unsigned int recvl;
1816 	unsigned int ret = 0;
1817 
1818 	while (1)
1819 	{
1820 		descr = &info->rec_descr[info->cur_rec_descr];
1821 
1822 		if (descr == phys_to_virt(*info->idescradr))
1823 			break;
1824 
1825 		if (++info->cur_rec_descr == SERIAL_RECV_DESCRIPTORS)
1826 			info->cur_rec_descr = 0;
1827 
1828 		/* find out how many bytes were read */
1829 
1830 		/* if the eop bit was not set, all data has been received */
1831 		if (!(descr->status & d_eop)) {
1832 			recvl = descr->sw_len;
1833 		} else {
1834 			/* otherwise we find the amount of data received here */
1835 			recvl = descr->hw_len;
1836 		}
1837 
1838 		/* Reset the status information */
1839 		descr->status = 0;
1840 
1841 		DFLOW(  DEBUG_LOG(info->line, "RX %lu\n", recvl);
1842 			if (info->port.tty->stopped) {
1843 				unsigned char *buf = phys_to_virt(descr->buf);
1844 				DEBUG_LOG(info->line, "rx 0x%02X\n", buf[0]);
1845 				DEBUG_LOG(info->line, "rx 0x%02X\n", buf[1]);
1846 				DEBUG_LOG(info->line, "rx 0x%02X\n", buf[2]);
1847 			}
1848 			);
1849 
1850 		/* update stats */
1851 		info->icount.rx += recvl;
1852 
1853 		ret += handle_descr_data(info, descr, recvl);
1854 	}
1855 
1856 	return ret;
1857 }
1858 
receive_chars_dma(struct e100_serial * info)1859 static void receive_chars_dma(struct e100_serial *info)
1860 {
1861 	struct tty_struct *tty;
1862 	unsigned char rstat;
1863 
1864 #ifdef CONFIG_SVINTO_SIM
1865 	/* No receive in the simulator.  Will probably be when the rest of
1866 	 * the serial interface works, and this piece will just be removed.
1867 	 */
1868 	return;
1869 #endif
1870 
1871 	/* Acknowledge both dma_descr and dma_eop irq in R_DMA_CHx_CLR_INTR */
1872 	*info->iclrintradr =
1873 		IO_STATE(R_DMA_CH6_CLR_INTR, clr_descr, do) |
1874 		IO_STATE(R_DMA_CH6_CLR_INTR, clr_eop, do);
1875 
1876 	tty = info->port.tty;
1877 	if (!tty) /* Something wrong... */
1878 		return;
1879 
1880 #ifdef SERIAL_HANDLE_EARLY_ERRORS
1881 	if (info->uses_dma_in)
1882 		e100_enable_serial_data_irq(info);
1883 #endif
1884 
1885 	if (info->errorcode == ERRCODE_INSERT_BREAK)
1886 		add_char_and_flag(info, '\0', TTY_BREAK);
1887 
1888 	handle_all_descr_data(info);
1889 
1890 	/* Read the status register to detect errors */
1891 	rstat = info->ioport[REG_STATUS];
1892 	if (rstat & IO_MASK(R_SERIAL0_STATUS, xoff_detect) ) {
1893 		DFLOW(DEBUG_LOG(info->line, "XOFF detect stat %x\n", rstat));
1894 	}
1895 
1896 	if (rstat & SER_ERROR_MASK) {
1897 		/* If we got an error, we must reset it by reading the
1898 		 * data_in field
1899 		 */
1900 		unsigned char data = info->ioport[REG_DATA];
1901 
1902 		PROCSTAT(ser_stat[info->line].errors_cnt++);
1903 		DEBUG_LOG(info->line, "#dERR: s d 0x%04X\n",
1904 			  ((rstat & SER_ERROR_MASK) << 8) | data);
1905 
1906 		if (rstat & SER_PAR_ERR_MASK)
1907 			add_char_and_flag(info, data, TTY_PARITY);
1908 		else if (rstat & SER_OVERRUN_MASK)
1909 			add_char_and_flag(info, data, TTY_OVERRUN);
1910 		else if (rstat & SER_FRAMING_ERR_MASK)
1911 			add_char_and_flag(info, data, TTY_FRAME);
1912 	}
1913 
1914 	START_FLUSH_FAST_TIMER(info, "receive_chars");
1915 
1916 	/* Restart the receiving DMA */
1917 	*info->icmdadr = IO_STATE(R_DMA_CH6_CMD, cmd, restart);
1918 }
1919 
start_recv_dma(struct e100_serial * info)1920 static int start_recv_dma(struct e100_serial *info)
1921 {
1922 	struct etrax_dma_descr *descr = info->rec_descr;
1923 	struct etrax_recv_buffer *buffer;
1924         int i;
1925 
1926 	/* Set up the receiving descriptors */
1927 	for (i = 0; i < SERIAL_RECV_DESCRIPTORS; i++) {
1928 		if (!(buffer = alloc_recv_buffer(SERIAL_DESCR_BUF_SIZE)))
1929 			panic("%s: Failed to allocate memory for receive buffer!\n", __func__);
1930 
1931 		descr[i].ctrl = d_int;
1932 		descr[i].buf = virt_to_phys(buffer->buffer);
1933 		descr[i].sw_len = SERIAL_DESCR_BUF_SIZE;
1934 		descr[i].hw_len = 0;
1935 		descr[i].status = 0;
1936 		descr[i].next = virt_to_phys(&descr[i+1]);
1937 	}
1938 
1939 	/* Link the last descriptor to the first */
1940 	descr[i-1].next = virt_to_phys(&descr[0]);
1941 
1942 	/* Start with the first descriptor in the list */
1943 	info->cur_rec_descr = 0;
1944 
1945 	/* Start the DMA */
1946 	*info->ifirstadr = virt_to_phys(&descr[info->cur_rec_descr]);
1947 	*info->icmdadr = IO_STATE(R_DMA_CH6_CMD, cmd, start);
1948 
1949 	/* Input DMA should be running now */
1950 	return 1;
1951 }
1952 
1953 static void
start_receive(struct e100_serial * info)1954 start_receive(struct e100_serial *info)
1955 {
1956 #ifdef CONFIG_SVINTO_SIM
1957 	/* No receive in the simulator.  Will probably be when the rest of
1958 	 * the serial interface works, and this piece will just be removed.
1959 	 */
1960 	return;
1961 #endif
1962 	if (info->uses_dma_in) {
1963 		/* reset the input dma channel to be sure it works */
1964 
1965 		*info->icmdadr = IO_STATE(R_DMA_CH6_CMD, cmd, reset);
1966 		while (IO_EXTRACT(R_DMA_CH6_CMD, cmd, *info->icmdadr) ==
1967 		       IO_STATE_VALUE(R_DMA_CH6_CMD, cmd, reset));
1968 
1969 		start_recv_dma(info);
1970 	}
1971 }
1972 
1973 
1974 /* the bits in the MASK2 register are laid out like this:
1975    DMAI_EOP DMAI_DESCR DMAO_EOP DMAO_DESCR
1976    where I is the input channel and O is the output channel for the port.
1977    info->irq is the bit number for the DMAO_DESCR so to check the others we
1978    shift info->irq to the left.
1979 */
1980 
1981 /* dma output channel interrupt handler
1982    this interrupt is called from DMA2(ser2), DMA4(ser3), DMA6(ser0) or
1983    DMA8(ser1) when they have finished a descriptor with the intr flag set.
1984 */
1985 
1986 static irqreturn_t
tr_interrupt(int irq,void * dev_id)1987 tr_interrupt(int irq, void *dev_id)
1988 {
1989 	struct e100_serial *info;
1990 	unsigned long ireg;
1991 	int i;
1992 	int handled = 0;
1993 
1994 #ifdef CONFIG_SVINTO_SIM
1995 	/* No receive in the simulator.  Will probably be when the rest of
1996 	 * the serial interface works, and this piece will just be removed.
1997 	 */
1998 	{
1999 		const char *s = "What? tr_interrupt in simulator??\n";
2000 		SIMCOUT(s,strlen(s));
2001 	}
2002 	return IRQ_HANDLED;
2003 #endif
2004 
2005 	/* find out the line that caused this irq and get it from rs_table */
2006 
2007 	ireg = *R_IRQ_MASK2_RD;  /* get the active irq bits for the dma channels */
2008 
2009 	for (i = 0; i < NR_PORTS; i++) {
2010 		info = rs_table + i;
2011 		if (!info->enabled || !info->uses_dma_out)
2012 			continue;
2013 		/* check for dma_descr (don't need to check for dma_eop in output dma for serial */
2014 		if (ireg & info->irq) {
2015 			handled = 1;
2016 			/* we can send a new dma bunch. make it so. */
2017 			DINTR2(DEBUG_LOG(info->line, "tr_interrupt %i\n", i));
2018 			/* Read jiffies_usec first,
2019 			 * we want this time to be as late as possible
2020 			 */
2021  			PROCSTAT(ser_stat[info->line].tx_dma_ints++);
2022 			info->last_tx_active_usec = GET_JIFFIES_USEC();
2023 			info->last_tx_active = jiffies;
2024 			transmit_chars_dma(info);
2025 		}
2026 
2027 		/* FIXME: here we should really check for a change in the
2028 		   status lines and if so call status_handle(info) */
2029 	}
2030 	return IRQ_RETVAL(handled);
2031 } /* tr_interrupt */
2032 
2033 /* dma input channel interrupt handler */
2034 
2035 static irqreturn_t
rec_interrupt(int irq,void * dev_id)2036 rec_interrupt(int irq, void *dev_id)
2037 {
2038 	struct e100_serial *info;
2039 	unsigned long ireg;
2040 	int i;
2041 	int handled = 0;
2042 
2043 #ifdef CONFIG_SVINTO_SIM
2044 	/* No receive in the simulator.  Will probably be when the rest of
2045 	 * the serial interface works, and this piece will just be removed.
2046 	 */
2047 	{
2048 		const char *s = "What? rec_interrupt in simulator??\n";
2049 		SIMCOUT(s,strlen(s));
2050 	}
2051 	return IRQ_HANDLED;
2052 #endif
2053 
2054 	/* find out the line that caused this irq and get it from rs_table */
2055 
2056 	ireg = *R_IRQ_MASK2_RD;  /* get the active irq bits for the dma channels */
2057 
2058 	for (i = 0; i < NR_PORTS; i++) {
2059 		info = rs_table + i;
2060 		if (!info->enabled || !info->uses_dma_in)
2061 			continue;
2062 		/* check for both dma_eop and dma_descr for the input dma channel */
2063 		if (ireg & ((info->irq << 2) | (info->irq << 3))) {
2064 			handled = 1;
2065 			/* we have received something */
2066 			receive_chars_dma(info);
2067 		}
2068 
2069 		/* FIXME: here we should really check for a change in the
2070 		   status lines and if so call status_handle(info) */
2071 	}
2072 	return IRQ_RETVAL(handled);
2073 } /* rec_interrupt */
2074 
force_eop_if_needed(struct e100_serial * info)2075 static int force_eop_if_needed(struct e100_serial *info)
2076 {
2077 	/* We check data_avail bit to determine if data has
2078 	 * arrived since last time
2079 	 */
2080 	unsigned char rstat = info->ioport[REG_STATUS];
2081 
2082 	/* error or datavail? */
2083 	if (rstat & SER_ERROR_MASK) {
2084 		/* Some error has occurred. If there has been valid data, an
2085 		 * EOP interrupt will be made automatically. If no data, the
2086 		 * normal ser_interrupt should be enabled and handle it.
2087 		 * So do nothing!
2088 		 */
2089 		DEBUG_LOG(info->line, "timeout err: rstat 0x%03X\n",
2090 		          rstat | (info->line << 8));
2091 		return 0;
2092 	}
2093 
2094 	if (rstat & SER_DATA_AVAIL_MASK) {
2095 		/* Ok data, no error, count it */
2096 		TIMERD(DEBUG_LOG(info->line, "timeout: rstat 0x%03X\n",
2097 		          rstat | (info->line << 8)));
2098 		/* Read data to clear status flags */
2099 		(void)info->ioport[REG_DATA];
2100 
2101 		info->forced_eop = 0;
2102 		START_FLUSH_FAST_TIMER(info, "magic");
2103 		return 0;
2104 	}
2105 
2106 	/* hit the timeout, force an EOP for the input
2107 	 * dma channel if we haven't already
2108 	 */
2109 	if (!info->forced_eop) {
2110 		info->forced_eop = 1;
2111 		PROCSTAT(ser_stat[info->line].timeout_flush_cnt++);
2112 		TIMERD(DEBUG_LOG(info->line, "timeout EOP %i\n", info->line));
2113 		FORCE_EOP(info);
2114 	}
2115 
2116 	return 1;
2117 }
2118 
flush_to_flip_buffer(struct e100_serial * info)2119 static void flush_to_flip_buffer(struct e100_serial *info)
2120 {
2121 	struct tty_struct *tty;
2122 	struct etrax_recv_buffer *buffer;
2123 	unsigned long flags;
2124 
2125 	local_irq_save(flags);
2126 	tty = info->port.tty;
2127 
2128 	if (!tty) {
2129 		local_irq_restore(flags);
2130 		return;
2131 	}
2132 
2133 	while ((buffer = info->first_recv_buffer) != NULL) {
2134 		unsigned int count = buffer->length;
2135 
2136 		tty_insert_flip_string(tty, buffer->buffer, count);
2137 		info->recv_cnt -= count;
2138 
2139 		if (count == buffer->length) {
2140 			info->first_recv_buffer = buffer->next;
2141 			kfree(buffer);
2142 		} else {
2143 			buffer->length -= count;
2144 			memmove(buffer->buffer, buffer->buffer + count, buffer->length);
2145 			buffer->error = TTY_NORMAL;
2146 		}
2147 	}
2148 
2149 	if (!info->first_recv_buffer)
2150 		info->last_recv_buffer = NULL;
2151 
2152 	local_irq_restore(flags);
2153 
2154 	/* This includes a check for low-latency */
2155 	tty_flip_buffer_push(tty);
2156 }
2157 
check_flush_timeout(struct e100_serial * info)2158 static void check_flush_timeout(struct e100_serial *info)
2159 {
2160 	/* Flip what we've got (if we can) */
2161 	flush_to_flip_buffer(info);
2162 
2163 	/* We might need to flip later, but not to fast
2164 	 * since the system is busy processing input... */
2165 	if (info->first_recv_buffer)
2166 		START_FLUSH_FAST_TIMER_TIME(info, "flip", 2000);
2167 
2168 	/* Force eop last, since data might have come while we're processing
2169 	 * and if we started the slow timer above, we won't start a fast
2170 	 * below.
2171 	 */
2172 	force_eop_if_needed(info);
2173 }
2174 
2175 #ifdef CONFIG_ETRAX_SERIAL_FAST_TIMER
flush_timeout_function(unsigned long data)2176 static void flush_timeout_function(unsigned long data)
2177 {
2178 	struct e100_serial *info = (struct e100_serial *)data;
2179 
2180 	fast_timers[info->line].function = NULL;
2181 	serial_fast_timer_expired++;
2182 	TIMERD(DEBUG_LOG(info->line, "flush_timout %i ", info->line));
2183 	TIMERD(DEBUG_LOG(info->line, "num expired: %i\n", serial_fast_timer_expired));
2184 	check_flush_timeout(info);
2185 }
2186 
2187 #else
2188 
2189 /* dma fifo/buffer timeout handler
2190    forces an end-of-packet for the dma input channel if no chars
2191    have been received for CONFIG_ETRAX_SERIAL_RX_TIMEOUT_TICKS/100 s.
2192 */
2193 
2194 static struct timer_list flush_timer;
2195 
2196 static void
timed_flush_handler(unsigned long ptr)2197 timed_flush_handler(unsigned long ptr)
2198 {
2199 	struct e100_serial *info;
2200 	int i;
2201 
2202 #ifdef CONFIG_SVINTO_SIM
2203 	return;
2204 #endif
2205 
2206 	for (i = 0; i < NR_PORTS; i++) {
2207 		info = rs_table + i;
2208 		if (info->uses_dma_in)
2209 			check_flush_timeout(info);
2210 	}
2211 
2212 	/* restart flush timer */
2213 	mod_timer(&flush_timer, jiffies + CONFIG_ETRAX_SERIAL_RX_TIMEOUT_TICKS);
2214 }
2215 #endif
2216 
2217 #ifdef SERIAL_HANDLE_EARLY_ERRORS
2218 
2219 /* If there is an error (ie break) when the DMA is running and
2220  * there are no bytes in the fifo the DMA is stopped and we get no
2221  * eop interrupt. Thus we have to monitor the first bytes on a DMA
2222  * transfer, and if it is without error we can turn the serial
2223  * interrupts off.
2224  */
2225 
2226 /*
2227 BREAK handling on ETRAX 100:
2228 ETRAX will generate interrupt although there is no stop bit between the
2229 characters.
2230 
2231 Depending on how long the break sequence is, the end of the breaksequence
2232 will look differently:
2233 | indicates start/end of a character.
2234 
2235 B= Break character (0x00) with framing error.
2236 E= Error byte with parity error received after B characters.
2237 F= "Faked" valid byte received immediately after B characters.
2238 V= Valid byte
2239 
2240 1.
2241     B          BL         ___________________________ V
2242 .._|__________|__________|                           |valid data |
2243 
2244 Multiple frame errors with data == 0x00 (B),
2245 the timing matches up "perfectly" so no extra ending char is detected.
2246 The RXD pin is 1 in the last interrupt, in that case
2247 we set info->errorcode = ERRCODE_INSERT_BREAK, but we can't really
2248 know if another byte will come and this really is case 2. below
2249 (e.g F=0xFF or 0xFE)
2250 If RXD pin is 0 we can expect another character (see 2. below).
2251 
2252 
2253 2.
2254 
2255     B          B          E or F__________________..__ V
2256 .._|__________|__________|______    |                 |valid data
2257                           "valid" or
2258                           parity error
2259 
2260 Multiple frame errors with data == 0x00 (B),
2261 but the part of the break trigs is interpreted as a start bit (and possibly
2262 some 0 bits followed by a number of 1 bits and a stop bit).
2263 Depending on parity settings etc. this last character can be either
2264 a fake "valid" char (F) or have a parity error (E).
2265 
2266 If the character is valid it will be put in the buffer,
2267 we set info->errorcode = ERRCODE_SET_BREAK so the receive interrupt
2268 will set the flags so the tty will handle it,
2269 if it's an error byte it will not be put in the buffer
2270 and we set info->errorcode = ERRCODE_INSERT_BREAK.
2271 
2272 To distinguish a V byte in 1. from an F byte in 2. we keep a timestamp
2273 of the last faulty char (B) and compares it with the current time:
2274 If the time elapsed time is less then 2*char_time_usec we will assume
2275 it's a faked F char and not a Valid char and set
2276 info->errorcode = ERRCODE_SET_BREAK.
2277 
2278 Flaws in the above solution:
2279 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2280 We use the timer to distinguish a F character from a V character,
2281 if a V character is to close after the break we might make the wrong decision.
2282 
2283 TODO: The break will be delayed until an F or V character is received.
2284 
2285 */
2286 
2287 static
handle_ser_rx_interrupt_no_dma(struct e100_serial * info)2288 struct e100_serial * handle_ser_rx_interrupt_no_dma(struct e100_serial *info)
2289 {
2290 	unsigned long data_read;
2291 	struct tty_struct *tty = info->port.tty;
2292 
2293 	if (!tty) {
2294 		printk("!NO TTY!\n");
2295 		return info;
2296 	}
2297 
2298 	/* Read data and status at the same time */
2299 	data_read = *((unsigned long *)&info->ioport[REG_DATA_STATUS32]);
2300 more_data:
2301 	if (data_read & IO_MASK(R_SERIAL0_READ, xoff_detect) ) {
2302 		DFLOW(DEBUG_LOG(info->line, "XOFF detect\n", 0));
2303 	}
2304 	DINTR2(DEBUG_LOG(info->line, "ser_rx   %c\n", IO_EXTRACT(R_SERIAL0_READ, data_in, data_read)));
2305 
2306 	if (data_read & ( IO_MASK(R_SERIAL0_READ, framing_err) |
2307 			  IO_MASK(R_SERIAL0_READ, par_err) |
2308 			  IO_MASK(R_SERIAL0_READ, overrun) )) {
2309 		/* An error */
2310 		info->last_rx_active_usec = GET_JIFFIES_USEC();
2311 		info->last_rx_active = jiffies;
2312 		DINTR1(DEBUG_LOG(info->line, "ser_rx err stat_data %04X\n", data_read));
2313 		DLOG_INT_TRIG(
2314 		if (!log_int_trig1_pos) {
2315 			log_int_trig1_pos = log_int_pos;
2316 			log_int(rdpc(), 0, 0);
2317 		}
2318 		);
2319 
2320 
2321 		if ( ((data_read & IO_MASK(R_SERIAL0_READ, data_in)) == 0) &&
2322 		     (data_read & IO_MASK(R_SERIAL0_READ, framing_err)) ) {
2323 			/* Most likely a break, but we get interrupts over and
2324 			 * over again.
2325 			 */
2326 
2327 			if (!info->break_detected_cnt) {
2328 				DEBUG_LOG(info->line, "#BRK start\n", 0);
2329 			}
2330 			if (data_read & IO_MASK(R_SERIAL0_READ, rxd)) {
2331 				/* The RX pin is high now, so the break
2332 				 * must be over, but....
2333 				 * we can't really know if we will get another
2334 				 * last byte ending the break or not.
2335 				 * And we don't know if the byte (if any) will
2336 				 * have an error or look valid.
2337 				 */
2338 				DEBUG_LOG(info->line, "# BL BRK\n", 0);
2339 				info->errorcode = ERRCODE_INSERT_BREAK;
2340 			}
2341 			info->break_detected_cnt++;
2342 		} else {
2343 			/* The error does not look like a break, but could be
2344 			 * the end of one
2345 			 */
2346 			if (info->break_detected_cnt) {
2347 				DEBUG_LOG(info->line, "EBRK %i\n", info->break_detected_cnt);
2348 				info->errorcode = ERRCODE_INSERT_BREAK;
2349 			} else {
2350 				unsigned char data = IO_EXTRACT(R_SERIAL0_READ,
2351 					data_in, data_read);
2352 				char flag = TTY_NORMAL;
2353 				if (info->errorcode == ERRCODE_INSERT_BREAK) {
2354 					struct tty_struct *tty = info->port.tty;
2355 					tty_insert_flip_char(tty, 0, flag);
2356 					info->icount.rx++;
2357 				}
2358 
2359 				if (data_read & IO_MASK(R_SERIAL0_READ, par_err)) {
2360 					info->icount.parity++;
2361 					flag = TTY_PARITY;
2362 				} else if (data_read & IO_MASK(R_SERIAL0_READ, overrun)) {
2363 					info->icount.overrun++;
2364 					flag = TTY_OVERRUN;
2365 				} else if (data_read & IO_MASK(R_SERIAL0_READ, framing_err)) {
2366 					info->icount.frame++;
2367 					flag = TTY_FRAME;
2368 				}
2369 				tty_insert_flip_char(tty, data, flag);
2370 				info->errorcode = 0;
2371 			}
2372 			info->break_detected_cnt = 0;
2373 		}
2374 	} else if (data_read & IO_MASK(R_SERIAL0_READ, data_avail)) {
2375 		/* No error */
2376 		DLOG_INT_TRIG(
2377 		if (!log_int_trig1_pos) {
2378 			if (log_int_pos >= log_int_size) {
2379 				log_int_pos = 0;
2380 			}
2381 			log_int_trig0_pos = log_int_pos;
2382 			log_int(rdpc(), 0, 0);
2383 		}
2384 		);
2385 		tty_insert_flip_char(tty,
2386 			IO_EXTRACT(R_SERIAL0_READ, data_in, data_read),
2387 			TTY_NORMAL);
2388 	} else {
2389 		DEBUG_LOG(info->line, "ser_rx int but no data_avail  %08lX\n", data_read);
2390 	}
2391 
2392 
2393 	info->icount.rx++;
2394 	data_read = *((unsigned long *)&info->ioport[REG_DATA_STATUS32]);
2395 	if (data_read & IO_MASK(R_SERIAL0_READ, data_avail)) {
2396 		DEBUG_LOG(info->line, "ser_rx   %c in loop\n", IO_EXTRACT(R_SERIAL0_READ, data_in, data_read));
2397 		goto more_data;
2398 	}
2399 
2400 	tty_flip_buffer_push(info->port.tty);
2401 	return info;
2402 }
2403 
handle_ser_rx_interrupt(struct e100_serial * info)2404 static struct e100_serial* handle_ser_rx_interrupt(struct e100_serial *info)
2405 {
2406 	unsigned char rstat;
2407 
2408 #ifdef SERIAL_DEBUG_INTR
2409 	printk("Interrupt from serport %d\n", i);
2410 #endif
2411 /*	DEBUG_LOG(info->line, "ser_interrupt stat %03X\n", rstat | (i << 8)); */
2412 	if (!info->uses_dma_in) {
2413 		return handle_ser_rx_interrupt_no_dma(info);
2414 	}
2415 	/* DMA is used */
2416 	rstat = info->ioport[REG_STATUS];
2417 	if (rstat & IO_MASK(R_SERIAL0_STATUS, xoff_detect) ) {
2418 		DFLOW(DEBUG_LOG(info->line, "XOFF detect\n", 0));
2419 	}
2420 
2421 	if (rstat & SER_ERROR_MASK) {
2422 		unsigned char data;
2423 
2424 		info->last_rx_active_usec = GET_JIFFIES_USEC();
2425 		info->last_rx_active = jiffies;
2426 		/* If we got an error, we must reset it by reading the
2427 		 * data_in field
2428 		 */
2429 		data = info->ioport[REG_DATA];
2430 		DINTR1(DEBUG_LOG(info->line, "ser_rx!  %c\n", data));
2431 		DINTR1(DEBUG_LOG(info->line, "ser_rx err stat %02X\n", rstat));
2432 		if (!data && (rstat & SER_FRAMING_ERR_MASK)) {
2433 			/* Most likely a break, but we get interrupts over and
2434 			 * over again.
2435 			 */
2436 
2437 			if (!info->break_detected_cnt) {
2438 				DEBUG_LOG(info->line, "#BRK start\n", 0);
2439 			}
2440 			if (rstat & SER_RXD_MASK) {
2441 				/* The RX pin is high now, so the break
2442 				 * must be over, but....
2443 				 * we can't really know if we will get another
2444 				 * last byte ending the break or not.
2445 				 * And we don't know if the byte (if any) will
2446 				 * have an error or look valid.
2447 				 */
2448 				DEBUG_LOG(info->line, "# BL BRK\n", 0);
2449 				info->errorcode = ERRCODE_INSERT_BREAK;
2450 			}
2451 			info->break_detected_cnt++;
2452 		} else {
2453 			/* The error does not look like a break, but could be
2454 			 * the end of one
2455 			 */
2456 			if (info->break_detected_cnt) {
2457 				DEBUG_LOG(info->line, "EBRK %i\n", info->break_detected_cnt);
2458 				info->errorcode = ERRCODE_INSERT_BREAK;
2459 			} else {
2460 				if (info->errorcode == ERRCODE_INSERT_BREAK) {
2461 					info->icount.brk++;
2462 					add_char_and_flag(info, '\0', TTY_BREAK);
2463 				}
2464 
2465 				if (rstat & SER_PAR_ERR_MASK) {
2466 					info->icount.parity++;
2467 					add_char_and_flag(info, data, TTY_PARITY);
2468 				} else if (rstat & SER_OVERRUN_MASK) {
2469 					info->icount.overrun++;
2470 					add_char_and_flag(info, data, TTY_OVERRUN);
2471 				} else if (rstat & SER_FRAMING_ERR_MASK) {
2472 					info->icount.frame++;
2473 					add_char_and_flag(info, data, TTY_FRAME);
2474 				}
2475 
2476 				info->errorcode = 0;
2477 			}
2478 			info->break_detected_cnt = 0;
2479 			DEBUG_LOG(info->line, "#iERR s d %04X\n",
2480 			          ((rstat & SER_ERROR_MASK) << 8) | data);
2481 		}
2482 		PROCSTAT(ser_stat[info->line].early_errors_cnt++);
2483 	} else { /* It was a valid byte, now let the DMA do the rest */
2484 		unsigned long curr_time_u = GET_JIFFIES_USEC();
2485 		unsigned long curr_time = jiffies;
2486 
2487 		if (info->break_detected_cnt) {
2488 			/* Detect if this character is a new valid char or the
2489 			 * last char in a break sequence: If LSBits are 0 and
2490 			 * MSBits are high AND the time is close to the
2491 			 * previous interrupt we should discard it.
2492 			 */
2493 			long elapsed_usec =
2494 			  (curr_time - info->last_rx_active) * (1000000/HZ) +
2495 			  curr_time_u - info->last_rx_active_usec;
2496 			if (elapsed_usec < 2*info->char_time_usec) {
2497 				DEBUG_LOG(info->line, "FBRK %i\n", info->line);
2498 				/* Report as BREAK (error) and let
2499 				 * receive_chars_dma() handle it
2500 				 */
2501 				info->errorcode = ERRCODE_SET_BREAK;
2502 			} else {
2503 				DEBUG_LOG(info->line, "Not end of BRK (V)%i\n", info->line);
2504 			}
2505 			DEBUG_LOG(info->line, "num brk %i\n", info->break_detected_cnt);
2506 		}
2507 
2508 #ifdef SERIAL_DEBUG_INTR
2509 		printk("** OK, disabling ser_interrupts\n");
2510 #endif
2511 		e100_disable_serial_data_irq(info);
2512 		DINTR2(DEBUG_LOG(info->line, "ser_rx OK %d\n", info->line));
2513 		info->break_detected_cnt = 0;
2514 
2515 		PROCSTAT(ser_stat[info->line].ser_ints_ok_cnt++);
2516 	}
2517 	/* Restarting the DMA never hurts */
2518 	*info->icmdadr = IO_STATE(R_DMA_CH6_CMD, cmd, restart);
2519 	START_FLUSH_FAST_TIMER(info, "ser_int");
2520 	return info;
2521 } /* handle_ser_rx_interrupt */
2522 
handle_ser_tx_interrupt(struct e100_serial * info)2523 static void handle_ser_tx_interrupt(struct e100_serial *info)
2524 {
2525 	unsigned long flags;
2526 
2527 	if (info->x_char) {
2528 		unsigned char rstat;
2529 		DFLOW(DEBUG_LOG(info->line, "tx_int: xchar 0x%02X\n", info->x_char));
2530 		local_irq_save(flags);
2531 		rstat = info->ioport[REG_STATUS];
2532 		DFLOW(DEBUG_LOG(info->line, "stat %x\n", rstat));
2533 
2534 		info->ioport[REG_TR_DATA] = info->x_char;
2535 		info->icount.tx++;
2536 		info->x_char = 0;
2537 		/* We must enable since it is disabled in ser_interrupt */
2538 		e100_enable_serial_tx_ready_irq(info);
2539 		local_irq_restore(flags);
2540 		return;
2541 	}
2542 	if (info->uses_dma_out) {
2543 		unsigned char rstat;
2544 		int i;
2545 		/* We only use normal tx interrupt when sending x_char */
2546 		DFLOW(DEBUG_LOG(info->line, "tx_int: xchar sent\n", 0));
2547 		local_irq_save(flags);
2548 		rstat = info->ioport[REG_STATUS];
2549 		DFLOW(DEBUG_LOG(info->line, "stat %x\n", rstat));
2550 		e100_disable_serial_tx_ready_irq(info);
2551 		if (info->port.tty->stopped)
2552 			rs_stop(info->port.tty);
2553 		/* Enable the DMA channel and tell it to continue */
2554 		e100_enable_txdma_channel(info);
2555 		/* Wait 12 cycles before doing the DMA command */
2556 		for(i = 6;  i > 0; i--)
2557 			nop();
2558 
2559 		*info->ocmdadr = IO_STATE(R_DMA_CH6_CMD, cmd, continue);
2560 		local_irq_restore(flags);
2561 		return;
2562 	}
2563 	/* Normal char-by-char interrupt */
2564 	if (info->xmit.head == info->xmit.tail
2565 	    || info->port.tty->stopped
2566 	    || info->port.tty->hw_stopped) {
2567 		DFLOW(DEBUG_LOG(info->line, "tx_int: stopped %i\n",
2568 				info->port.tty->stopped));
2569 		e100_disable_serial_tx_ready_irq(info);
2570 		info->tr_running = 0;
2571 		return;
2572 	}
2573 	DINTR2(DEBUG_LOG(info->line, "tx_int %c\n", info->xmit.buf[info->xmit.tail]));
2574 	/* Send a byte, rs485 timing is critical so turn of ints */
2575 	local_irq_save(flags);
2576 	info->ioport[REG_TR_DATA] = info->xmit.buf[info->xmit.tail];
2577 	info->xmit.tail = (info->xmit.tail + 1) & (SERIAL_XMIT_SIZE-1);
2578 	info->icount.tx++;
2579 	if (info->xmit.head == info->xmit.tail) {
2580 #if defined(CONFIG_ETRAX_RS485) && defined(CONFIG_ETRAX_FAST_TIMER)
2581 		if (info->rs485.flags & SER_RS485_ENABLED) {
2582 			/* Set a short timer to toggle RTS */
2583 			start_one_shot_timer(&fast_timers_rs485[info->line],
2584 			                     rs485_toggle_rts_timer_function,
2585 			                     (unsigned long)info,
2586 			                     info->char_time_usec*2,
2587 			                     "RS-485");
2588 		}
2589 #endif /* RS485 */
2590 		info->last_tx_active_usec = GET_JIFFIES_USEC();
2591 		info->last_tx_active = jiffies;
2592 		e100_disable_serial_tx_ready_irq(info);
2593 		info->tr_running = 0;
2594 		DFLOW(DEBUG_LOG(info->line, "tx_int: stop2\n", 0));
2595 	} else {
2596 		/* We must enable since it is disabled in ser_interrupt */
2597 		e100_enable_serial_tx_ready_irq(info);
2598 	}
2599 	local_irq_restore(flags);
2600 
2601 	if (CIRC_CNT(info->xmit.head,
2602 		     info->xmit.tail,
2603 		     SERIAL_XMIT_SIZE) < WAKEUP_CHARS)
2604 		rs_sched_event(info, RS_EVENT_WRITE_WAKEUP);
2605 
2606 } /* handle_ser_tx_interrupt */
2607 
2608 /* result of time measurements:
2609  * RX duration 54-60 us when doing something, otherwise 6-9 us
2610  * ser_int duration: just sending: 8-15 us normally, up to 73 us
2611  */
2612 static irqreturn_t
ser_interrupt(int irq,void * dev_id)2613 ser_interrupt(int irq, void *dev_id)
2614 {
2615 	static volatile int tx_started = 0;
2616 	struct e100_serial *info;
2617 	int i;
2618 	unsigned long flags;
2619 	unsigned long irq_mask1_rd;
2620 	unsigned long data_mask = (1 << (8+2*0)); /* ser0 data_avail */
2621 	int handled = 0;
2622 	static volatile unsigned long reentered_ready_mask = 0;
2623 
2624 	local_irq_save(flags);
2625 	irq_mask1_rd = *R_IRQ_MASK1_RD;
2626 	/* First handle all rx interrupts with ints disabled */
2627 	info = rs_table;
2628 	irq_mask1_rd &= e100_ser_int_mask;
2629 	for (i = 0; i < NR_PORTS; i++) {
2630 		/* Which line caused the data irq? */
2631 		if (irq_mask1_rd & data_mask) {
2632 			handled = 1;
2633 			handle_ser_rx_interrupt(info);
2634 		}
2635 		info += 1;
2636 		data_mask <<= 2;
2637 	}
2638 	/* Handle tx interrupts with interrupts enabled so we
2639 	 * can take care of new data interrupts while transmitting
2640 	 * We protect the tx part with the tx_started flag.
2641 	 * We disable the tr_ready interrupts we are about to handle and
2642 	 * unblock the serial interrupt so new serial interrupts may come.
2643 	 *
2644 	 * If we get a new interrupt:
2645 	 *  - it migth be due to synchronous serial ports.
2646 	 *  - serial irq will be blocked by general irq handler.
2647 	 *  - async data will be handled above (sync will be ignored).
2648 	 *  - tx_started flag will prevent us from trying to send again and
2649 	 *    we will exit fast - no need to unblock serial irq.
2650 	 *  - Next (sync) serial interrupt handler will be runned with
2651 	 *    disabled interrupt due to restore_flags() at end of function,
2652 	 *    so sync handler will not be preempted or reentered.
2653 	 */
2654 	if (!tx_started) {
2655 		unsigned long ready_mask;
2656 		unsigned long
2657 		tx_started = 1;
2658 		/* Only the tr_ready interrupts left */
2659 		irq_mask1_rd &= (IO_MASK(R_IRQ_MASK1_RD, ser0_ready) |
2660 				 IO_MASK(R_IRQ_MASK1_RD, ser1_ready) |
2661 				 IO_MASK(R_IRQ_MASK1_RD, ser2_ready) |
2662 				 IO_MASK(R_IRQ_MASK1_RD, ser3_ready));
2663 		while (irq_mask1_rd) {
2664 			/* Disable those we are about to handle */
2665 			*R_IRQ_MASK1_CLR = irq_mask1_rd;
2666 			/* Unblock the serial interrupt */
2667 			*R_VECT_MASK_SET = IO_STATE(R_VECT_MASK_SET, serial, set);
2668 
2669 			local_irq_enable();
2670 			ready_mask = (1 << (8+1+2*0)); /* ser0 tr_ready */
2671 			info = rs_table;
2672 			for (i = 0; i < NR_PORTS; i++) {
2673 				/* Which line caused the ready irq? */
2674 				if (irq_mask1_rd & ready_mask) {
2675 					handled = 1;
2676 					handle_ser_tx_interrupt(info);
2677 				}
2678 				info += 1;
2679 				ready_mask <<= 2;
2680 			}
2681 			/* handle_ser_tx_interrupt enables tr_ready interrupts */
2682 			local_irq_disable();
2683 			/* Handle reentered TX interrupt */
2684 			irq_mask1_rd = reentered_ready_mask;
2685 		}
2686 		local_irq_disable();
2687 		tx_started = 0;
2688 	} else {
2689 		unsigned long ready_mask;
2690 		ready_mask = irq_mask1_rd & (IO_MASK(R_IRQ_MASK1_RD, ser0_ready) |
2691 					     IO_MASK(R_IRQ_MASK1_RD, ser1_ready) |
2692 					     IO_MASK(R_IRQ_MASK1_RD, ser2_ready) |
2693 					     IO_MASK(R_IRQ_MASK1_RD, ser3_ready));
2694 		if (ready_mask) {
2695 			reentered_ready_mask |= ready_mask;
2696 			/* Disable those we are about to handle */
2697 			*R_IRQ_MASK1_CLR = ready_mask;
2698 			DFLOW(DEBUG_LOG(SERIAL_DEBUG_LINE, "ser_int reentered with TX %X\n", ready_mask));
2699 		}
2700 	}
2701 
2702 	local_irq_restore(flags);
2703 	return IRQ_RETVAL(handled);
2704 } /* ser_interrupt */
2705 #endif
2706 
2707 /*
2708  * -------------------------------------------------------------------
2709  * Here ends the serial interrupt routines.
2710  * -------------------------------------------------------------------
2711  */
2712 
2713 /*
2714  * This routine is used to handle the "bottom half" processing for the
2715  * serial driver, known also the "software interrupt" processing.
2716  * This processing is done at the kernel interrupt level, after the
2717  * rs_interrupt() has returned, BUT WITH INTERRUPTS TURNED ON.  This
2718  * is where time-consuming activities which can not be done in the
2719  * interrupt driver proper are done; the interrupt driver schedules
2720  * them using rs_sched_event(), and they get done here.
2721  */
2722 static void
do_softint(struct work_struct * work)2723 do_softint(struct work_struct *work)
2724 {
2725 	struct e100_serial	*info;
2726 	struct tty_struct	*tty;
2727 
2728 	info = container_of(work, struct e100_serial, work);
2729 
2730 	tty = info->port.tty;
2731 	if (!tty)
2732 		return;
2733 
2734 	if (test_and_clear_bit(RS_EVENT_WRITE_WAKEUP, &info->event))
2735 		tty_wakeup(tty);
2736 }
2737 
2738 static int
startup(struct e100_serial * info)2739 startup(struct e100_serial * info)
2740 {
2741 	unsigned long flags;
2742 	unsigned long xmit_page;
2743 	int i;
2744 
2745 	xmit_page = get_zeroed_page(GFP_KERNEL);
2746 	if (!xmit_page)
2747 		return -ENOMEM;
2748 
2749 	local_irq_save(flags);
2750 
2751 	/* if it was already initialized, skip this */
2752 
2753 	if (info->flags & ASYNC_INITIALIZED) {
2754 		local_irq_restore(flags);
2755 		free_page(xmit_page);
2756 		return 0;
2757 	}
2758 
2759 	if (info->xmit.buf)
2760 		free_page(xmit_page);
2761 	else
2762 		info->xmit.buf = (unsigned char *) xmit_page;
2763 
2764 #ifdef SERIAL_DEBUG_OPEN
2765 	printk("starting up ttyS%d (xmit_buf 0x%p)...\n", info->line, info->xmit.buf);
2766 #endif
2767 
2768 #ifdef CONFIG_SVINTO_SIM
2769 	/* Bits and pieces collected from below.  Better to have them
2770 	   in one ifdef:ed clause than to mix in a lot of ifdefs,
2771 	   right? */
2772 	if (info->port.tty)
2773 		clear_bit(TTY_IO_ERROR, &info->port.tty->flags);
2774 
2775 	info->xmit.head = info->xmit.tail = 0;
2776 	info->first_recv_buffer = info->last_recv_buffer = NULL;
2777 	info->recv_cnt = info->max_recv_cnt = 0;
2778 
2779 	for (i = 0; i < SERIAL_RECV_DESCRIPTORS; i++)
2780 		info->rec_descr[i].buf = NULL;
2781 
2782 	/* No real action in the simulator, but may set info important
2783 	   to ioctl. */
2784 	change_speed(info);
2785 #else
2786 
2787 	/*
2788 	 * Clear the FIFO buffers and disable them
2789 	 * (they will be reenabled in change_speed())
2790 	 */
2791 
2792 	/*
2793 	 * Reset the DMA channels and make sure their interrupts are cleared
2794 	 */
2795 
2796 	if (info->dma_in_enabled) {
2797 		info->uses_dma_in = 1;
2798 		e100_enable_rxdma_channel(info);
2799 
2800 		*info->icmdadr = IO_STATE(R_DMA_CH6_CMD, cmd, reset);
2801 
2802 		/* Wait until reset cycle is complete */
2803 		while (IO_EXTRACT(R_DMA_CH6_CMD, cmd, *info->icmdadr) ==
2804 		       IO_STATE_VALUE(R_DMA_CH6_CMD, cmd, reset));
2805 
2806 		/* Make sure the irqs are cleared */
2807 		*info->iclrintradr =
2808 			IO_STATE(R_DMA_CH6_CLR_INTR, clr_descr, do) |
2809 			IO_STATE(R_DMA_CH6_CLR_INTR, clr_eop, do);
2810 	} else {
2811 		e100_disable_rxdma_channel(info);
2812 	}
2813 
2814 	if (info->dma_out_enabled) {
2815 		info->uses_dma_out = 1;
2816 		e100_enable_txdma_channel(info);
2817 		*info->ocmdadr = IO_STATE(R_DMA_CH6_CMD, cmd, reset);
2818 
2819 		while (IO_EXTRACT(R_DMA_CH6_CMD, cmd, *info->ocmdadr) ==
2820 		       IO_STATE_VALUE(R_DMA_CH6_CMD, cmd, reset));
2821 
2822 		/* Make sure the irqs are cleared */
2823 		*info->oclrintradr =
2824 			IO_STATE(R_DMA_CH6_CLR_INTR, clr_descr, do) |
2825 			IO_STATE(R_DMA_CH6_CLR_INTR, clr_eop, do);
2826 	} else {
2827 		e100_disable_txdma_channel(info);
2828 	}
2829 
2830 	if (info->port.tty)
2831 		clear_bit(TTY_IO_ERROR, &info->port.tty->flags);
2832 
2833 	info->xmit.head = info->xmit.tail = 0;
2834 	info->first_recv_buffer = info->last_recv_buffer = NULL;
2835 	info->recv_cnt = info->max_recv_cnt = 0;
2836 
2837 	for (i = 0; i < SERIAL_RECV_DESCRIPTORS; i++)
2838 		info->rec_descr[i].buf = 0;
2839 
2840 	/*
2841 	 * and set the speed and other flags of the serial port
2842 	 * this will start the rx/tx as well
2843 	 */
2844 #ifdef SERIAL_HANDLE_EARLY_ERRORS
2845 	e100_enable_serial_data_irq(info);
2846 #endif
2847 	change_speed(info);
2848 
2849 	/* dummy read to reset any serial errors */
2850 
2851 	(void)info->ioport[REG_DATA];
2852 
2853 	/* enable the interrupts */
2854 	if (info->uses_dma_out)
2855 		e100_enable_txdma_irq(info);
2856 
2857 	e100_enable_rx_irq(info);
2858 
2859 	info->tr_running = 0; /* to be sure we don't lock up the transmitter */
2860 
2861 	/* setup the dma input descriptor and start dma */
2862 
2863 	start_receive(info);
2864 
2865 	/* for safety, make sure the descriptors last result is 0 bytes written */
2866 
2867 	info->tr_descr.sw_len = 0;
2868 	info->tr_descr.hw_len = 0;
2869 	info->tr_descr.status = 0;
2870 
2871 	/* enable RTS/DTR last */
2872 
2873 	e100_rts(info, 1);
2874 	e100_dtr(info, 1);
2875 
2876 #endif /* CONFIG_SVINTO_SIM */
2877 
2878 	info->flags |= ASYNC_INITIALIZED;
2879 
2880 	local_irq_restore(flags);
2881 	return 0;
2882 }
2883 
2884 /*
2885  * This routine will shutdown a serial port; interrupts are disabled, and
2886  * DTR is dropped if the hangup on close termio flag is on.
2887  */
2888 static void
shutdown(struct e100_serial * info)2889 shutdown(struct e100_serial * info)
2890 {
2891 	unsigned long flags;
2892 	struct etrax_dma_descr *descr = info->rec_descr;
2893 	struct etrax_recv_buffer *buffer;
2894 	int i;
2895 
2896 #ifndef CONFIG_SVINTO_SIM
2897 	/* shut down the transmitter and receiver */
2898 	DFLOW(DEBUG_LOG(info->line, "shutdown %i\n", info->line));
2899 	e100_disable_rx(info);
2900 	info->ioport[REG_TR_CTRL] = (info->tx_ctrl &= ~0x40);
2901 
2902 	/* disable interrupts, reset dma channels */
2903 	if (info->uses_dma_in) {
2904 		e100_disable_rxdma_irq(info);
2905 		*info->icmdadr = IO_STATE(R_DMA_CH6_CMD, cmd, reset);
2906 		info->uses_dma_in = 0;
2907 	} else {
2908 		e100_disable_serial_data_irq(info);
2909 	}
2910 
2911 	if (info->uses_dma_out) {
2912 		e100_disable_txdma_irq(info);
2913 		info->tr_running = 0;
2914 		*info->ocmdadr = IO_STATE(R_DMA_CH6_CMD, cmd, reset);
2915 		info->uses_dma_out = 0;
2916 	} else {
2917 		e100_disable_serial_tx_ready_irq(info);
2918 		info->tr_running = 0;
2919 	}
2920 
2921 #endif /* CONFIG_SVINTO_SIM */
2922 
2923 	if (!(info->flags & ASYNC_INITIALIZED))
2924 		return;
2925 
2926 #ifdef SERIAL_DEBUG_OPEN
2927 	printk("Shutting down serial port %d (irq %d)....\n", info->line,
2928 	       info->irq);
2929 #endif
2930 
2931 	local_irq_save(flags);
2932 
2933 	if (info->xmit.buf) {
2934 		free_page((unsigned long)info->xmit.buf);
2935 		info->xmit.buf = NULL;
2936 	}
2937 
2938 	for (i = 0; i < SERIAL_RECV_DESCRIPTORS; i++)
2939 		if (descr[i].buf) {
2940 			buffer = phys_to_virt(descr[i].buf) - sizeof *buffer;
2941 			kfree(buffer);
2942 			descr[i].buf = 0;
2943 		}
2944 
2945 	if (!info->port.tty || (info->port.tty->termios->c_cflag & HUPCL)) {
2946 		/* hang up DTR and RTS if HUPCL is enabled */
2947 		e100_dtr(info, 0);
2948 		e100_rts(info, 0); /* could check CRTSCTS before doing this */
2949 	}
2950 
2951 	if (info->port.tty)
2952 		set_bit(TTY_IO_ERROR, &info->port.tty->flags);
2953 
2954 	info->flags &= ~ASYNC_INITIALIZED;
2955 	local_irq_restore(flags);
2956 }
2957 
2958 
2959 /* change baud rate and other assorted parameters */
2960 
2961 static void
change_speed(struct e100_serial * info)2962 change_speed(struct e100_serial *info)
2963 {
2964 	unsigned int cflag;
2965 	unsigned long xoff;
2966 	unsigned long flags;
2967 	/* first some safety checks */
2968 
2969 	if (!info->port.tty || !info->port.tty->termios)
2970 		return;
2971 	if (!info->ioport)
2972 		return;
2973 
2974 	cflag = info->port.tty->termios->c_cflag;
2975 
2976 	/* possibly, the tx/rx should be disabled first to do this safely */
2977 
2978 	/* change baud-rate and write it to the hardware */
2979 	if ((info->flags & ASYNC_SPD_MASK) == ASYNC_SPD_CUST) {
2980 		/* Special baudrate */
2981 		u32 mask = 0xFF << (info->line*8); /* Each port has 8 bits */
2982 		unsigned long alt_source =
2983 				IO_STATE(R_ALT_SER_BAUDRATE, ser0_rec, normal) |
2984 				IO_STATE(R_ALT_SER_BAUDRATE, ser0_tr, normal);
2985 		/* R_ALT_SER_BAUDRATE selects the source */
2986 		DBAUD(printk("Custom baudrate: baud_base/divisor %lu/%i\n",
2987 		       (unsigned long)info->baud_base, info->custom_divisor));
2988 		if (info->baud_base == SERIAL_PRESCALE_BASE) {
2989 			/* 0, 2-65535 (0=65536) */
2990 			u16 divisor = info->custom_divisor;
2991 			/* R_SERIAL_PRESCALE (upper 16 bits of R_CLOCK_PRESCALE) */
2992 			/* baudrate is 3.125MHz/custom_divisor */
2993 			alt_source =
2994 				IO_STATE(R_ALT_SER_BAUDRATE, ser0_rec, prescale) |
2995 				IO_STATE(R_ALT_SER_BAUDRATE, ser0_tr, prescale);
2996 			alt_source = 0x11;
2997 			DBAUD(printk("Writing SERIAL_PRESCALE: divisor %i\n", divisor));
2998 			*R_SERIAL_PRESCALE = divisor;
2999 			info->baud = SERIAL_PRESCALE_BASE/divisor;
3000 		}
3001 #ifdef CONFIG_ETRAX_EXTERN_PB6CLK_ENABLED
3002 		else if ((info->baud_base==CONFIG_ETRAX_EXTERN_PB6CLK_FREQ/8 &&
3003 			  info->custom_divisor == 1) ||
3004 			 (info->baud_base==CONFIG_ETRAX_EXTERN_PB6CLK_FREQ &&
3005 			  info->custom_divisor == 8)) {
3006 				/* ext_clk selected */
3007 				alt_source =
3008 					IO_STATE(R_ALT_SER_BAUDRATE, ser0_rec, extern) |
3009 					IO_STATE(R_ALT_SER_BAUDRATE, ser0_tr, extern);
3010 				DBAUD(printk("using external baudrate: %lu\n", CONFIG_ETRAX_EXTERN_PB6CLK_FREQ/8));
3011 				info->baud = CONFIG_ETRAX_EXTERN_PB6CLK_FREQ/8;
3012 			}
3013 #endif
3014 		else
3015 		{
3016 			/* Bad baudbase, we don't support using timer0
3017 			 * for baudrate.
3018 			 */
3019 			printk(KERN_WARNING "Bad baud_base/custom_divisor: %lu/%i\n",
3020 			       (unsigned long)info->baud_base, info->custom_divisor);
3021 		}
3022 		r_alt_ser_baudrate_shadow &= ~mask;
3023 		r_alt_ser_baudrate_shadow |= (alt_source << (info->line*8));
3024 		*R_ALT_SER_BAUDRATE = r_alt_ser_baudrate_shadow;
3025 	} else {
3026 		/* Normal baudrate */
3027 		/* Make sure we use normal baudrate */
3028 		u32 mask = 0xFF << (info->line*8); /* Each port has 8 bits */
3029 		unsigned long alt_source =
3030 			IO_STATE(R_ALT_SER_BAUDRATE, ser0_rec, normal) |
3031 			IO_STATE(R_ALT_SER_BAUDRATE, ser0_tr, normal);
3032 		r_alt_ser_baudrate_shadow &= ~mask;
3033 		r_alt_ser_baudrate_shadow |= (alt_source << (info->line*8));
3034 #ifndef CONFIG_SVINTO_SIM
3035 		*R_ALT_SER_BAUDRATE = r_alt_ser_baudrate_shadow;
3036 #endif /* CONFIG_SVINTO_SIM */
3037 
3038 		info->baud = cflag_to_baud(cflag);
3039 #ifndef CONFIG_SVINTO_SIM
3040 		info->ioport[REG_BAUD] = cflag_to_etrax_baud(cflag);
3041 #endif /* CONFIG_SVINTO_SIM */
3042 	}
3043 
3044 #ifndef CONFIG_SVINTO_SIM
3045 	/* start with default settings and then fill in changes */
3046 	local_irq_save(flags);
3047 	/* 8 bit, no/even parity */
3048 	info->rx_ctrl &= ~(IO_MASK(R_SERIAL0_REC_CTRL, rec_bitnr) |
3049 			   IO_MASK(R_SERIAL0_REC_CTRL, rec_par_en) |
3050 			   IO_MASK(R_SERIAL0_REC_CTRL, rec_par));
3051 
3052 	/* 8 bit, no/even parity, 1 stop bit, no cts */
3053 	info->tx_ctrl &= ~(IO_MASK(R_SERIAL0_TR_CTRL, tr_bitnr) |
3054 			   IO_MASK(R_SERIAL0_TR_CTRL, tr_par_en) |
3055 			   IO_MASK(R_SERIAL0_TR_CTRL, tr_par) |
3056 			   IO_MASK(R_SERIAL0_TR_CTRL, stop_bits) |
3057 			   IO_MASK(R_SERIAL0_TR_CTRL, auto_cts));
3058 
3059 	if ((cflag & CSIZE) == CS7) {
3060 		/* set 7 bit mode */
3061 		info->tx_ctrl |= IO_STATE(R_SERIAL0_TR_CTRL, tr_bitnr, tr_7bit);
3062 		info->rx_ctrl |= IO_STATE(R_SERIAL0_REC_CTRL, rec_bitnr, rec_7bit);
3063 	}
3064 
3065 	if (cflag & CSTOPB) {
3066 		/* set 2 stop bit mode */
3067 		info->tx_ctrl |= IO_STATE(R_SERIAL0_TR_CTRL, stop_bits, two_bits);
3068 	}
3069 
3070 	if (cflag & PARENB) {
3071 		/* enable parity */
3072 		info->tx_ctrl |= IO_STATE(R_SERIAL0_TR_CTRL, tr_par_en, enable);
3073 		info->rx_ctrl |= IO_STATE(R_SERIAL0_REC_CTRL, rec_par_en, enable);
3074 	}
3075 
3076 	if (cflag & CMSPAR) {
3077 		/* enable stick parity, PARODD mean Mark which matches ETRAX */
3078 		info->tx_ctrl |= IO_STATE(R_SERIAL0_TR_CTRL, tr_stick_par, stick);
3079 		info->rx_ctrl |= IO_STATE(R_SERIAL0_REC_CTRL, rec_stick_par, stick);
3080 	}
3081 	if (cflag & PARODD) {
3082 		/* set odd parity (or Mark if CMSPAR) */
3083 		info->tx_ctrl |= IO_STATE(R_SERIAL0_TR_CTRL, tr_par, odd);
3084 		info->rx_ctrl |= IO_STATE(R_SERIAL0_REC_CTRL, rec_par, odd);
3085 	}
3086 
3087 	if (cflag & CRTSCTS) {
3088 		/* enable automatic CTS handling */
3089 		DFLOW(DEBUG_LOG(info->line, "FLOW auto_cts enabled\n", 0));
3090 		info->tx_ctrl |= IO_STATE(R_SERIAL0_TR_CTRL, auto_cts, active);
3091 	}
3092 
3093 	/* make sure the tx and rx are enabled */
3094 
3095 	info->tx_ctrl |= IO_STATE(R_SERIAL0_TR_CTRL, tr_enable, enable);
3096 	info->rx_ctrl |= IO_STATE(R_SERIAL0_REC_CTRL, rec_enable, enable);
3097 
3098 	/* actually write the control regs to the hardware */
3099 
3100 	info->ioport[REG_TR_CTRL] = info->tx_ctrl;
3101 	info->ioport[REG_REC_CTRL] = info->rx_ctrl;
3102 	xoff = IO_FIELD(R_SERIAL0_XOFF, xoff_char, STOP_CHAR(info->port.tty));
3103 	xoff |= IO_STATE(R_SERIAL0_XOFF, tx_stop, enable);
3104 	if (info->port.tty->termios->c_iflag & IXON ) {
3105 		DFLOW(DEBUG_LOG(info->line, "FLOW XOFF enabled 0x%02X\n",
3106 				STOP_CHAR(info->port.tty)));
3107 		xoff |= IO_STATE(R_SERIAL0_XOFF, auto_xoff, enable);
3108 	}
3109 
3110 	*((unsigned long *)&info->ioport[REG_XOFF]) = xoff;
3111 	local_irq_restore(flags);
3112 #endif /* !CONFIG_SVINTO_SIM */
3113 
3114 	update_char_time(info);
3115 
3116 } /* change_speed */
3117 
3118 /* start transmitting chars NOW */
3119 
3120 static void
rs_flush_chars(struct tty_struct * tty)3121 rs_flush_chars(struct tty_struct *tty)
3122 {
3123 	struct e100_serial *info = (struct e100_serial *)tty->driver_data;
3124 	unsigned long flags;
3125 
3126 	if (info->tr_running ||
3127 	    info->xmit.head == info->xmit.tail ||
3128 	    tty->stopped ||
3129 	    tty->hw_stopped ||
3130 	    !info->xmit.buf)
3131 		return;
3132 
3133 #ifdef SERIAL_DEBUG_FLOW
3134 	printk("rs_flush_chars\n");
3135 #endif
3136 
3137 	/* this protection might not exactly be necessary here */
3138 
3139 	local_irq_save(flags);
3140 	start_transmit(info);
3141 	local_irq_restore(flags);
3142 }
3143 
rs_raw_write(struct tty_struct * tty,const unsigned char * buf,int count)3144 static int rs_raw_write(struct tty_struct *tty,
3145 			const unsigned char *buf, int count)
3146 {
3147 	int	c, ret = 0;
3148 	struct e100_serial *info = (struct e100_serial *)tty->driver_data;
3149 	unsigned long flags;
3150 
3151 	/* first some sanity checks */
3152 
3153 	if (!tty || !info->xmit.buf || !tmp_buf)
3154 		return 0;
3155 
3156 #ifdef SERIAL_DEBUG_DATA
3157 	if (info->line == SERIAL_DEBUG_LINE)
3158 		printk("rs_raw_write (%d), status %d\n",
3159 		       count, info->ioport[REG_STATUS]);
3160 #endif
3161 
3162 #ifdef CONFIG_SVINTO_SIM
3163 	/* Really simple.  The output is here and now. */
3164 	SIMCOUT(buf, count);
3165 	return count;
3166 #endif
3167 	local_save_flags(flags);
3168 	DFLOW(DEBUG_LOG(info->line, "write count %i ", count));
3169 	DFLOW(DEBUG_LOG(info->line, "ldisc %i\n", tty->ldisc.chars_in_buffer(tty)));
3170 
3171 
3172 	/* The local_irq_disable/restore_flags pairs below are needed
3173 	 * because the DMA interrupt handler moves the info->xmit values.
3174 	 * the memcpy needs to be in the critical region unfortunately,
3175 	 * because we need to read xmit values, memcpy, write xmit values
3176 	 * in one atomic operation... this could perhaps be avoided by
3177 	 * more clever design.
3178 	 */
3179 	local_irq_disable();
3180 		while (count) {
3181 			c = CIRC_SPACE_TO_END(info->xmit.head,
3182 					      info->xmit.tail,
3183 					      SERIAL_XMIT_SIZE);
3184 
3185 			if (count < c)
3186 				c = count;
3187 			if (c <= 0)
3188 				break;
3189 
3190 			memcpy(info->xmit.buf + info->xmit.head, buf, c);
3191 			info->xmit.head = (info->xmit.head + c) &
3192 				(SERIAL_XMIT_SIZE-1);
3193 			buf += c;
3194 			count -= c;
3195 			ret += c;
3196 		}
3197 	local_irq_restore(flags);
3198 
3199 	/* enable transmitter if not running, unless the tty is stopped
3200 	 * this does not need IRQ protection since if tr_running == 0
3201 	 * the IRQ's are not running anyway for this port.
3202 	 */
3203 	DFLOW(DEBUG_LOG(info->line, "write ret %i\n", ret));
3204 
3205 	if (info->xmit.head != info->xmit.tail &&
3206 	    !tty->stopped &&
3207 	    !tty->hw_stopped &&
3208 	    !info->tr_running) {
3209 		start_transmit(info);
3210 	}
3211 
3212 	return ret;
3213 } /* raw_raw_write() */
3214 
3215 static int
rs_write(struct tty_struct * tty,const unsigned char * buf,int count)3216 rs_write(struct tty_struct *tty,
3217 	 const unsigned char *buf, int count)
3218 {
3219 #if defined(CONFIG_ETRAX_RS485)
3220 	struct e100_serial *info = (struct e100_serial *)tty->driver_data;
3221 
3222 	if (info->rs485.flags & SER_RS485_ENABLED)
3223 	{
3224 		/* If we are in RS-485 mode, we need to toggle RTS and disable
3225 		 * the receiver before initiating a DMA transfer
3226 		 */
3227 #ifdef CONFIG_ETRAX_FAST_TIMER
3228 		/* Abort any started timer */
3229 		fast_timers_rs485[info->line].function = NULL;
3230 		del_fast_timer(&fast_timers_rs485[info->line]);
3231 #endif
3232 		e100_rts(info, (info->rs485.flags & SER_RS485_RTS_ON_SEND));
3233 #if defined(CONFIG_ETRAX_RS485_DISABLE_RECEIVER)
3234 		e100_disable_rx(info);
3235 		e100_enable_rx_irq(info);
3236 #endif
3237 		if (info->rs485.delay_rts_before_send > 0)
3238 			msleep(info->rs485.delay_rts_before_send);
3239 	}
3240 #endif /* CONFIG_ETRAX_RS485 */
3241 
3242 	count = rs_raw_write(tty, buf, count);
3243 
3244 #if defined(CONFIG_ETRAX_RS485)
3245 	if (info->rs485.flags & SER_RS485_ENABLED)
3246 	{
3247 		unsigned int val;
3248 		/* If we are in RS-485 mode the following has to be done:
3249 		 * wait until DMA is ready
3250 		 * wait on transmit shift register
3251 		 * toggle RTS
3252 		 * enable the receiver
3253 		 */
3254 
3255 		/* Sleep until all sent */
3256 		tty_wait_until_sent(tty, 0);
3257 #ifdef CONFIG_ETRAX_FAST_TIMER
3258 		/* Now sleep a little more so that shift register is empty */
3259 		schedule_usleep(info->char_time_usec * 2);
3260 #endif
3261 		/* wait on transmit shift register */
3262 		do{
3263 			get_lsr_info(info, &val);
3264 		}while (!(val & TIOCSER_TEMT));
3265 
3266 		e100_rts(info, (info->rs485.flags & SER_RS485_RTS_AFTER_SEND));
3267 
3268 #if defined(CONFIG_ETRAX_RS485_DISABLE_RECEIVER)
3269 		e100_enable_rx(info);
3270 		e100_enable_rxdma_irq(info);
3271 #endif
3272 	}
3273 #endif /* CONFIG_ETRAX_RS485 */
3274 
3275 	return count;
3276 } /* rs_write */
3277 
3278 
3279 /* how much space is available in the xmit buffer? */
3280 
3281 static int
rs_write_room(struct tty_struct * tty)3282 rs_write_room(struct tty_struct *tty)
3283 {
3284 	struct e100_serial *info = (struct e100_serial *)tty->driver_data;
3285 
3286 	return CIRC_SPACE(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE);
3287 }
3288 
3289 /* How many chars are in the xmit buffer?
3290  * This does not include any chars in the transmitter FIFO.
3291  * Use wait_until_sent for waiting for FIFO drain.
3292  */
3293 
3294 static int
rs_chars_in_buffer(struct tty_struct * tty)3295 rs_chars_in_buffer(struct tty_struct *tty)
3296 {
3297 	struct e100_serial *info = (struct e100_serial *)tty->driver_data;
3298 
3299 	return CIRC_CNT(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE);
3300 }
3301 
3302 /* discard everything in the xmit buffer */
3303 
3304 static void
rs_flush_buffer(struct tty_struct * tty)3305 rs_flush_buffer(struct tty_struct *tty)
3306 {
3307 	struct e100_serial *info = (struct e100_serial *)tty->driver_data;
3308 	unsigned long flags;
3309 
3310 	local_irq_save(flags);
3311 	info->xmit.head = info->xmit.tail = 0;
3312 	local_irq_restore(flags);
3313 
3314 	tty_wakeup(tty);
3315 }
3316 
3317 /*
3318  * This function is used to send a high-priority XON/XOFF character to
3319  * the device
3320  *
3321  * Since we use DMA we don't check for info->x_char in transmit_chars_dma(),
3322  * but we do it in handle_ser_tx_interrupt().
3323  * We disable DMA channel and enable tx ready interrupt and write the
3324  * character when possible.
3325  */
rs_send_xchar(struct tty_struct * tty,char ch)3326 static void rs_send_xchar(struct tty_struct *tty, char ch)
3327 {
3328 	struct e100_serial *info = (struct e100_serial *)tty->driver_data;
3329 	unsigned long flags;
3330 	local_irq_save(flags);
3331 	if (info->uses_dma_out) {
3332 		/* Put the DMA on hold and disable the channel */
3333 		*info->ocmdadr = IO_STATE(R_DMA_CH6_CMD, cmd, hold);
3334 		while (IO_EXTRACT(R_DMA_CH6_CMD, cmd, *info->ocmdadr) !=
3335 		       IO_STATE_VALUE(R_DMA_CH6_CMD, cmd, hold));
3336 		e100_disable_txdma_channel(info);
3337 	}
3338 
3339 	/* Must make sure transmitter is not stopped before we can transmit */
3340 	if (tty->stopped)
3341 		rs_start(tty);
3342 
3343 	/* Enable manual transmit interrupt and send from there */
3344 	DFLOW(DEBUG_LOG(info->line, "rs_send_xchar 0x%02X\n", ch));
3345 	info->x_char = ch;
3346 	e100_enable_serial_tx_ready_irq(info);
3347 	local_irq_restore(flags);
3348 }
3349 
3350 /*
3351  * ------------------------------------------------------------
3352  * rs_throttle()
3353  *
3354  * This routine is called by the upper-layer tty layer to signal that
3355  * incoming characters should be throttled.
3356  * ------------------------------------------------------------
3357  */
3358 static void
rs_throttle(struct tty_struct * tty)3359 rs_throttle(struct tty_struct * tty)
3360 {
3361 	struct e100_serial *info = (struct e100_serial *)tty->driver_data;
3362 #ifdef SERIAL_DEBUG_THROTTLE
3363 	char	buf[64];
3364 
3365 	printk("throttle %s: %lu....\n", tty_name(tty, buf),
3366 	       (unsigned long)tty->ldisc.chars_in_buffer(tty));
3367 #endif
3368 	DFLOW(DEBUG_LOG(info->line,"rs_throttle %lu\n", tty->ldisc.chars_in_buffer(tty)));
3369 
3370 	/* Do RTS before XOFF since XOFF might take some time */
3371 	if (tty->termios->c_cflag & CRTSCTS) {
3372 		/* Turn off RTS line */
3373 		e100_rts(info, 0);
3374 	}
3375 	if (I_IXOFF(tty))
3376 		rs_send_xchar(tty, STOP_CHAR(tty));
3377 
3378 }
3379 
3380 static void
rs_unthrottle(struct tty_struct * tty)3381 rs_unthrottle(struct tty_struct * tty)
3382 {
3383 	struct e100_serial *info = (struct e100_serial *)tty->driver_data;
3384 #ifdef SERIAL_DEBUG_THROTTLE
3385 	char	buf[64];
3386 
3387 	printk("unthrottle %s: %lu....\n", tty_name(tty, buf),
3388 	       (unsigned long)tty->ldisc.chars_in_buffer(tty));
3389 #endif
3390 	DFLOW(DEBUG_LOG(info->line,"rs_unthrottle ldisc %d\n", tty->ldisc.chars_in_buffer(tty)));
3391 	DFLOW(DEBUG_LOG(info->line,"rs_unthrottle flip.count: %i\n", tty->flip.count));
3392 	/* Do RTS before XOFF since XOFF might take some time */
3393 	if (tty->termios->c_cflag & CRTSCTS) {
3394 		/* Assert RTS line  */
3395 		e100_rts(info, 1);
3396 	}
3397 
3398 	if (I_IXOFF(tty)) {
3399 		if (info->x_char)
3400 			info->x_char = 0;
3401 		else
3402 			rs_send_xchar(tty, START_CHAR(tty));
3403 	}
3404 
3405 }
3406 
3407 /*
3408  * ------------------------------------------------------------
3409  * rs_ioctl() and friends
3410  * ------------------------------------------------------------
3411  */
3412 
3413 static int
get_serial_info(struct e100_serial * info,struct serial_struct * retinfo)3414 get_serial_info(struct e100_serial * info,
3415 		struct serial_struct * retinfo)
3416 {
3417 	struct serial_struct tmp;
3418 
3419 	/* this is all probably wrong, there are a lot of fields
3420 	 * here that we don't have in e100_serial and maybe we
3421 	 * should set them to something else than 0.
3422 	 */
3423 
3424 	if (!retinfo)
3425 		return -EFAULT;
3426 	memset(&tmp, 0, sizeof(tmp));
3427 	tmp.type = info->type;
3428 	tmp.line = info->line;
3429 	tmp.port = (int)info->ioport;
3430 	tmp.irq = info->irq;
3431 	tmp.flags = info->flags;
3432 	tmp.baud_base = info->baud_base;
3433 	tmp.close_delay = info->close_delay;
3434 	tmp.closing_wait = info->closing_wait;
3435 	tmp.custom_divisor = info->custom_divisor;
3436 	if (copy_to_user(retinfo, &tmp, sizeof(*retinfo)))
3437 		return -EFAULT;
3438 	return 0;
3439 }
3440 
3441 static int
set_serial_info(struct e100_serial * info,struct serial_struct * new_info)3442 set_serial_info(struct e100_serial *info,
3443 		struct serial_struct *new_info)
3444 {
3445 	struct serial_struct new_serial;
3446 	struct e100_serial old_info;
3447 	int retval = 0;
3448 
3449 	if (copy_from_user(&new_serial, new_info, sizeof(new_serial)))
3450 		return -EFAULT;
3451 
3452 	old_info = *info;
3453 
3454 	if (!capable(CAP_SYS_ADMIN)) {
3455 		if ((new_serial.type != info->type) ||
3456 		    (new_serial.close_delay != info->close_delay) ||
3457 		    ((new_serial.flags & ~ASYNC_USR_MASK) !=
3458 		     (info->flags & ~ASYNC_USR_MASK)))
3459 			return -EPERM;
3460 		info->flags = ((info->flags & ~ASYNC_USR_MASK) |
3461 			       (new_serial.flags & ASYNC_USR_MASK));
3462 		goto check_and_exit;
3463 	}
3464 
3465 	if (info->count > 1)
3466 		return -EBUSY;
3467 
3468 	/*
3469 	 * OK, past this point, all the error checking has been done.
3470 	 * At this point, we start making changes.....
3471 	 */
3472 
3473 	info->baud_base = new_serial.baud_base;
3474 	info->flags = ((info->flags & ~ASYNC_FLAGS) |
3475 		       (new_serial.flags & ASYNC_FLAGS));
3476 	info->custom_divisor = new_serial.custom_divisor;
3477 	info->type = new_serial.type;
3478 	info->close_delay = new_serial.close_delay;
3479 	info->closing_wait = new_serial.closing_wait;
3480 	info->port.tty->low_latency = (info->flags & ASYNC_LOW_LATENCY) ? 1 : 0;
3481 
3482  check_and_exit:
3483 	if (info->flags & ASYNC_INITIALIZED) {
3484 		change_speed(info);
3485 	} else
3486 		retval = startup(info);
3487 	return retval;
3488 }
3489 
3490 /*
3491  * get_lsr_info - get line status register info
3492  *
3493  * Purpose: Let user call ioctl() to get info when the UART physically
3494  * 	    is emptied.  On bus types like RS485, the transmitter must
3495  * 	    release the bus after transmitting. This must be done when
3496  * 	    the transmit shift register is empty, not be done when the
3497  * 	    transmit holding register is empty.  This functionality
3498  * 	    allows an RS485 driver to be written in user space.
3499  */
3500 static int
get_lsr_info(struct e100_serial * info,unsigned int * value)3501 get_lsr_info(struct e100_serial * info, unsigned int *value)
3502 {
3503 	unsigned int result = TIOCSER_TEMT;
3504 #ifndef CONFIG_SVINTO_SIM
3505 	unsigned long curr_time = jiffies;
3506 	unsigned long curr_time_usec = GET_JIFFIES_USEC();
3507 	unsigned long elapsed_usec =
3508 		(curr_time - info->last_tx_active) * 1000000/HZ +
3509 		curr_time_usec - info->last_tx_active_usec;
3510 
3511 	if (info->xmit.head != info->xmit.tail ||
3512 	    elapsed_usec < 2*info->char_time_usec) {
3513 		result = 0;
3514 	}
3515 #endif
3516 
3517 	if (copy_to_user(value, &result, sizeof(int)))
3518 		return -EFAULT;
3519 	return 0;
3520 }
3521 
3522 #ifdef SERIAL_DEBUG_IO
3523 struct state_str
3524 {
3525 	int state;
3526 	const char *str;
3527 };
3528 
3529 const struct state_str control_state_str[] = {
3530 	{TIOCM_DTR, "DTR" },
3531 	{TIOCM_RTS, "RTS"},
3532 	{TIOCM_ST, "ST?" },
3533 	{TIOCM_SR, "SR?" },
3534 	{TIOCM_CTS, "CTS" },
3535 	{TIOCM_CD, "CD" },
3536 	{TIOCM_RI, "RI" },
3537 	{TIOCM_DSR, "DSR" },
3538 	{0, NULL }
3539 };
3540 
get_control_state_str(int MLines,char * s)3541 char *get_control_state_str(int MLines, char *s)
3542 {
3543 	int i = 0;
3544 
3545 	s[0]='\0';
3546 	while (control_state_str[i].str != NULL) {
3547 		if (MLines & control_state_str[i].state) {
3548 			if (s[0] != '\0') {
3549 				strcat(s, ", ");
3550 			}
3551 			strcat(s, control_state_str[i].str);
3552 		}
3553 		i++;
3554 	}
3555 	return s;
3556 }
3557 #endif
3558 
3559 static int
rs_break(struct tty_struct * tty,int break_state)3560 rs_break(struct tty_struct *tty, int break_state)
3561 {
3562 	struct e100_serial *info = (struct e100_serial *)tty->driver_data;
3563 	unsigned long flags;
3564 
3565 	if (!info->ioport)
3566 		return -EIO;
3567 
3568 	local_irq_save(flags);
3569 	if (break_state == -1) {
3570 		/* Go to manual mode and set the txd pin to 0 */
3571 		/* Clear bit 7 (txd) and 6 (tr_enable) */
3572 		info->tx_ctrl &= 0x3F;
3573 	} else {
3574 		/* Set bit 7 (txd) and 6 (tr_enable) */
3575 		info->tx_ctrl |= (0x80 | 0x40);
3576 	}
3577 	info->ioport[REG_TR_CTRL] = info->tx_ctrl;
3578 	local_irq_restore(flags);
3579 	return 0;
3580 }
3581 
3582 static int
rs_tiocmset(struct tty_struct * tty,unsigned int set,unsigned int clear)3583 rs_tiocmset(struct tty_struct *tty, unsigned int set, unsigned int clear)
3584 {
3585 	struct e100_serial *info = (struct e100_serial *)tty->driver_data;
3586 	unsigned long flags;
3587 
3588 	local_irq_save(flags);
3589 
3590 	if (clear & TIOCM_RTS)
3591 		e100_rts(info, 0);
3592 	if (clear & TIOCM_DTR)
3593 		e100_dtr(info, 0);
3594 	/* Handle FEMALE behaviour */
3595 	if (clear & TIOCM_RI)
3596 		e100_ri_out(info, 0);
3597 	if (clear & TIOCM_CD)
3598 		e100_cd_out(info, 0);
3599 
3600 	if (set & TIOCM_RTS)
3601 		e100_rts(info, 1);
3602 	if (set & TIOCM_DTR)
3603 		e100_dtr(info, 1);
3604 	/* Handle FEMALE behaviour */
3605 	if (set & TIOCM_RI)
3606 		e100_ri_out(info, 1);
3607 	if (set & TIOCM_CD)
3608 		e100_cd_out(info, 1);
3609 
3610 	local_irq_restore(flags);
3611 	return 0;
3612 }
3613 
3614 static int
rs_tiocmget(struct tty_struct * tty)3615 rs_tiocmget(struct tty_struct *tty)
3616 {
3617 	struct e100_serial *info = (struct e100_serial *)tty->driver_data;
3618 	unsigned int result;
3619 	unsigned long flags;
3620 
3621 	local_irq_save(flags);
3622 
3623 	result =
3624 		(!E100_RTS_GET(info) ? TIOCM_RTS : 0)
3625 		| (!E100_DTR_GET(info) ? TIOCM_DTR : 0)
3626 		| (!E100_RI_GET(info) ? TIOCM_RNG : 0)
3627 		| (!E100_DSR_GET(info) ? TIOCM_DSR : 0)
3628 		| (!E100_CD_GET(info) ? TIOCM_CAR : 0)
3629 		| (!E100_CTS_GET(info) ? TIOCM_CTS : 0);
3630 
3631 	local_irq_restore(flags);
3632 
3633 #ifdef SERIAL_DEBUG_IO
3634 	printk(KERN_DEBUG "ser%i: modem state: %i 0x%08X\n",
3635 		info->line, result, result);
3636 	{
3637 		char s[100];
3638 
3639 		get_control_state_str(result, s);
3640 		printk(KERN_DEBUG "state: %s\n", s);
3641 	}
3642 #endif
3643 	return result;
3644 
3645 }
3646 
3647 
3648 static int
rs_ioctl(struct tty_struct * tty,unsigned int cmd,unsigned long arg)3649 rs_ioctl(struct tty_struct *tty,
3650 	 unsigned int cmd, unsigned long arg)
3651 {
3652 	struct e100_serial * info = (struct e100_serial *)tty->driver_data;
3653 
3654 	if ((cmd != TIOCGSERIAL) && (cmd != TIOCSSERIAL) &&
3655 	    (cmd != TIOCSERCONFIG) && (cmd != TIOCSERGWILD)  &&
3656 	    (cmd != TIOCSERSWILD) && (cmd != TIOCSERGSTRUCT)) {
3657 		if (tty->flags & (1 << TTY_IO_ERROR))
3658 			return -EIO;
3659 	}
3660 
3661 	switch (cmd) {
3662 	case TIOCGSERIAL:
3663 		return get_serial_info(info,
3664 				       (struct serial_struct *) arg);
3665 	case TIOCSSERIAL:
3666 		return set_serial_info(info,
3667 				       (struct serial_struct *) arg);
3668 	case TIOCSERGETLSR: /* Get line status register */
3669 		return get_lsr_info(info, (unsigned int *) arg);
3670 
3671 	case TIOCSERGSTRUCT:
3672 		if (copy_to_user((struct e100_serial *) arg,
3673 				 info, sizeof(struct e100_serial)))
3674 			return -EFAULT;
3675 		return 0;
3676 
3677 #if defined(CONFIG_ETRAX_RS485)
3678 	case TIOCSERSETRS485:
3679 	{
3680 		/* In this ioctl we still use the old structure
3681 		 * rs485_control for backward compatibility
3682 		 * (if we use serial_rs485, then old user-level code
3683 		 * wouldn't work anymore...).
3684 		 * The use of this ioctl is deprecated: use TIOCSRS485
3685 		 * instead.*/
3686 		struct rs485_control rs485ctrl;
3687 		struct serial_rs485 rs485data;
3688 		printk(KERN_DEBUG "The use of this ioctl is deprecated. Use TIOCSRS485 instead\n");
3689 		if (copy_from_user(&rs485ctrl, (struct rs485_control *)arg,
3690 				sizeof(rs485ctrl)))
3691 			return -EFAULT;
3692 
3693 		rs485data.delay_rts_before_send = rs485ctrl.delay_rts_before_send;
3694 		rs485data.flags = 0;
3695 
3696 		if (rs485ctrl.enabled)
3697 			rs485data.flags |= SER_RS485_ENABLED;
3698 		else
3699 			rs485data.flags &= ~(SER_RS485_ENABLED);
3700 
3701 		if (rs485ctrl.rts_on_send)
3702 			rs485data.flags |= SER_RS485_RTS_ON_SEND;
3703 		else
3704 			rs485data.flags &= ~(SER_RS485_RTS_ON_SEND);
3705 
3706 		if (rs485ctrl.rts_after_sent)
3707 			rs485data.flags |= SER_RS485_RTS_AFTER_SEND;
3708 		else
3709 			rs485data.flags &= ~(SER_RS485_RTS_AFTER_SEND);
3710 
3711 		return e100_enable_rs485(tty, &rs485data);
3712 	}
3713 
3714 	case TIOCSRS485:
3715 	{
3716 		/* This is the new version of TIOCSRS485, with new
3717 		 * data structure serial_rs485 */
3718 		struct serial_rs485 rs485data;
3719 		if (copy_from_user(&rs485data, (struct rs485_control *)arg,
3720 				sizeof(rs485data)))
3721 			return -EFAULT;
3722 
3723 		return e100_enable_rs485(tty, &rs485data);
3724 	}
3725 
3726 	case TIOCGRS485:
3727 	{
3728 		struct serial_rs485 *rs485data =
3729 			&(((struct e100_serial *)tty->driver_data)->rs485);
3730 		/* This is the ioctl to get RS485 data from user-space */
3731 		if (copy_to_user((struct serial_rs485 *) arg,
3732 					rs485data,
3733 					sizeof(struct serial_rs485)))
3734 			return -EFAULT;
3735 		break;
3736 	}
3737 
3738 	case TIOCSERWRRS485:
3739 	{
3740 		struct rs485_write rs485wr;
3741 		if (copy_from_user(&rs485wr, (struct rs485_write *)arg,
3742 				sizeof(rs485wr)))
3743 			return -EFAULT;
3744 
3745 		return e100_write_rs485(tty, rs485wr.outc, rs485wr.outc_size);
3746 	}
3747 #endif
3748 
3749 	default:
3750 		return -ENOIOCTLCMD;
3751 	}
3752 	return 0;
3753 }
3754 
3755 static void
rs_set_termios(struct tty_struct * tty,struct ktermios * old_termios)3756 rs_set_termios(struct tty_struct *tty, struct ktermios *old_termios)
3757 {
3758 	struct e100_serial *info = (struct e100_serial *)tty->driver_data;
3759 
3760 	change_speed(info);
3761 
3762 	/* Handle turning off CRTSCTS */
3763 	if ((old_termios->c_cflag & CRTSCTS) &&
3764 	    !(tty->termios->c_cflag & CRTSCTS)) {
3765 		tty->hw_stopped = 0;
3766 		rs_start(tty);
3767 	}
3768 
3769 }
3770 
3771 /*
3772  * ------------------------------------------------------------
3773  * rs_close()
3774  *
3775  * This routine is called when the serial port gets closed.  First, we
3776  * wait for the last remaining data to be sent.  Then, we unlink its
3777  * S structure from the interrupt chain if necessary, and we free
3778  * that IRQ if nothing is left in the chain.
3779  * ------------------------------------------------------------
3780  */
3781 static void
rs_close(struct tty_struct * tty,struct file * filp)3782 rs_close(struct tty_struct *tty, struct file * filp)
3783 {
3784 	struct e100_serial * info = (struct e100_serial *)tty->driver_data;
3785 	unsigned long flags;
3786 
3787 	if (!info)
3788 		return;
3789 
3790 	/* interrupts are disabled for this entire function */
3791 
3792 	local_irq_save(flags);
3793 
3794 	if (tty_hung_up_p(filp)) {
3795 		local_irq_restore(flags);
3796 		return;
3797 	}
3798 
3799 #ifdef SERIAL_DEBUG_OPEN
3800 	printk("[%d] rs_close ttyS%d, count = %d\n", current->pid,
3801 	       info->line, info->count);
3802 #endif
3803 	if ((tty->count == 1) && (info->count != 1)) {
3804 		/*
3805 		 * Uh, oh.  tty->count is 1, which means that the tty
3806 		 * structure will be freed.  Info->count should always
3807 		 * be one in these conditions.  If it's greater than
3808 		 * one, we've got real problems, since it means the
3809 		 * serial port won't be shutdown.
3810 		 */
3811 		printk(KERN_ERR
3812 		       "rs_close: bad serial port count; tty->count is 1, "
3813 		       "info->count is %d\n", info->count);
3814 		info->count = 1;
3815 	}
3816 	if (--info->count < 0) {
3817 		printk(KERN_ERR "rs_close: bad serial port count for ttyS%d: %d\n",
3818 		       info->line, info->count);
3819 		info->count = 0;
3820 	}
3821 	if (info->count) {
3822 		local_irq_restore(flags);
3823 		return;
3824 	}
3825 	info->flags |= ASYNC_CLOSING;
3826 	/*
3827 	 * Save the termios structure, since this port may have
3828 	 * separate termios for callout and dialin.
3829 	 */
3830 	if (info->flags & ASYNC_NORMAL_ACTIVE)
3831 		info->normal_termios = *tty->termios;
3832 	/*
3833 	 * Now we wait for the transmit buffer to clear; and we notify
3834 	 * the line discipline to only process XON/XOFF characters.
3835 	 */
3836 	tty->closing = 1;
3837 	if (info->closing_wait != ASYNC_CLOSING_WAIT_NONE)
3838 		tty_wait_until_sent(tty, info->closing_wait);
3839 	/*
3840 	 * At this point we stop accepting input.  To do this, we
3841 	 * disable the serial receiver and the DMA receive interrupt.
3842 	 */
3843 #ifdef SERIAL_HANDLE_EARLY_ERRORS
3844 	e100_disable_serial_data_irq(info);
3845 #endif
3846 
3847 #ifndef CONFIG_SVINTO_SIM
3848 	e100_disable_rx(info);
3849 	e100_disable_rx_irq(info);
3850 
3851 	if (info->flags & ASYNC_INITIALIZED) {
3852 		/*
3853 		 * Before we drop DTR, make sure the UART transmitter
3854 		 * has completely drained; this is especially
3855 		 * important as we have a transmit FIFO!
3856 		 */
3857 		rs_wait_until_sent(tty, HZ);
3858 	}
3859 #endif
3860 
3861 	shutdown(info);
3862 	rs_flush_buffer(tty);
3863 	tty_ldisc_flush(tty);
3864 	tty->closing = 0;
3865 	info->event = 0;
3866 	info->port.tty = NULL;
3867 	if (info->blocked_open) {
3868 		if (info->close_delay)
3869 			schedule_timeout_interruptible(info->close_delay);
3870 		wake_up_interruptible(&info->open_wait);
3871 	}
3872 	info->flags &= ~(ASYNC_NORMAL_ACTIVE|ASYNC_CLOSING);
3873 	wake_up_interruptible(&info->close_wait);
3874 	local_irq_restore(flags);
3875 
3876 	/* port closed */
3877 
3878 #if defined(CONFIG_ETRAX_RS485)
3879 	if (info->rs485.flags & SER_RS485_ENABLED) {
3880 		info->rs485.flags &= ~(SER_RS485_ENABLED);
3881 #if defined(CONFIG_ETRAX_RS485_ON_PA)
3882 		*R_PORT_PA_DATA = port_pa_data_shadow &= ~(1 << rs485_pa_bit);
3883 #endif
3884 #if defined(CONFIG_ETRAX_RS485_ON_PORT_G)
3885 		REG_SHADOW_SET(R_PORT_G_DATA, port_g_data_shadow,
3886 			       rs485_port_g_bit, 0);
3887 #endif
3888 #if defined(CONFIG_ETRAX_RS485_LTC1387)
3889 		REG_SHADOW_SET(R_PORT_G_DATA, port_g_data_shadow,
3890 			       CONFIG_ETRAX_RS485_LTC1387_DXEN_PORT_G_BIT, 0);
3891 		REG_SHADOW_SET(R_PORT_G_DATA, port_g_data_shadow,
3892 			       CONFIG_ETRAX_RS485_LTC1387_RXEN_PORT_G_BIT, 0);
3893 #endif
3894 	}
3895 #endif
3896 
3897 	/*
3898 	 * Release any allocated DMA irq's.
3899 	 */
3900 	if (info->dma_in_enabled) {
3901 		free_irq(info->dma_in_irq_nbr, info);
3902 		cris_free_dma(info->dma_in_nbr, info->dma_in_irq_description);
3903 		info->uses_dma_in = 0;
3904 #ifdef SERIAL_DEBUG_OPEN
3905 		printk(KERN_DEBUG "DMA irq '%s' freed\n",
3906 			info->dma_in_irq_description);
3907 #endif
3908 	}
3909 	if (info->dma_out_enabled) {
3910 		free_irq(info->dma_out_irq_nbr, info);
3911 		cris_free_dma(info->dma_out_nbr, info->dma_out_irq_description);
3912 		info->uses_dma_out = 0;
3913 #ifdef SERIAL_DEBUG_OPEN
3914 		printk(KERN_DEBUG "DMA irq '%s' freed\n",
3915 			info->dma_out_irq_description);
3916 #endif
3917 	}
3918 }
3919 
3920 /*
3921  * rs_wait_until_sent() --- wait until the transmitter is empty
3922  */
rs_wait_until_sent(struct tty_struct * tty,int timeout)3923 static void rs_wait_until_sent(struct tty_struct *tty, int timeout)
3924 {
3925 	unsigned long orig_jiffies;
3926 	struct e100_serial *info = (struct e100_serial *)tty->driver_data;
3927 	unsigned long curr_time = jiffies;
3928 	unsigned long curr_time_usec = GET_JIFFIES_USEC();
3929 	long elapsed_usec =
3930 		(curr_time - info->last_tx_active) * (1000000/HZ) +
3931 		curr_time_usec - info->last_tx_active_usec;
3932 
3933 	/*
3934 	 * Check R_DMA_CHx_STATUS bit 0-6=number of available bytes in FIFO
3935 	 * R_DMA_CHx_HWSW bit 31-16=nbr of bytes left in DMA buffer (0=64k)
3936 	 */
3937 	orig_jiffies = jiffies;
3938 	while (info->xmit.head != info->xmit.tail || /* More in send queue */
3939 	       (*info->ostatusadr & 0x007f) ||  /* more in FIFO */
3940 	       (elapsed_usec < 2*info->char_time_usec)) {
3941 		schedule_timeout_interruptible(1);
3942 		if (signal_pending(current))
3943 			break;
3944 		if (timeout && time_after(jiffies, orig_jiffies + timeout))
3945 			break;
3946 		curr_time = jiffies;
3947 		curr_time_usec = GET_JIFFIES_USEC();
3948 		elapsed_usec =
3949 			(curr_time - info->last_tx_active) * (1000000/HZ) +
3950 			curr_time_usec - info->last_tx_active_usec;
3951 	}
3952 	set_current_state(TASK_RUNNING);
3953 }
3954 
3955 /*
3956  * rs_hangup() --- called by tty_hangup() when a hangup is signaled.
3957  */
3958 void
rs_hangup(struct tty_struct * tty)3959 rs_hangup(struct tty_struct *tty)
3960 {
3961 	struct e100_serial * info = (struct e100_serial *)tty->driver_data;
3962 
3963 	rs_flush_buffer(tty);
3964 	shutdown(info);
3965 	info->event = 0;
3966 	info->count = 0;
3967 	info->flags &= ~ASYNC_NORMAL_ACTIVE;
3968 	info->port.tty = NULL;
3969 	wake_up_interruptible(&info->open_wait);
3970 }
3971 
3972 /*
3973  * ------------------------------------------------------------
3974  * rs_open() and friends
3975  * ------------------------------------------------------------
3976  */
3977 static int
block_til_ready(struct tty_struct * tty,struct file * filp,struct e100_serial * info)3978 block_til_ready(struct tty_struct *tty, struct file * filp,
3979 		struct e100_serial *info)
3980 {
3981 	DECLARE_WAITQUEUE(wait, current);
3982 	unsigned long	flags;
3983 	int		retval;
3984 	int		do_clocal = 0, extra_count = 0;
3985 
3986 	/*
3987 	 * If the device is in the middle of being closed, then block
3988 	 * until it's done, and then try again.
3989 	 */
3990 	if (tty_hung_up_p(filp) ||
3991 	    (info->flags & ASYNC_CLOSING)) {
3992 		wait_event_interruptible_tty(info->close_wait,
3993 			!(info->flags & ASYNC_CLOSING));
3994 #ifdef SERIAL_DO_RESTART
3995 		if (info->flags & ASYNC_HUP_NOTIFY)
3996 			return -EAGAIN;
3997 		else
3998 			return -ERESTARTSYS;
3999 #else
4000 		return -EAGAIN;
4001 #endif
4002 	}
4003 
4004 	/*
4005 	 * If non-blocking mode is set, or the port is not enabled,
4006 	 * then make the check up front and then exit.
4007 	 */
4008 	if ((filp->f_flags & O_NONBLOCK) ||
4009 	    (tty->flags & (1 << TTY_IO_ERROR))) {
4010 		info->flags |= ASYNC_NORMAL_ACTIVE;
4011 		return 0;
4012 	}
4013 
4014 	if (tty->termios->c_cflag & CLOCAL) {
4015 			do_clocal = 1;
4016 	}
4017 
4018 	/*
4019 	 * Block waiting for the carrier detect and the line to become
4020 	 * free (i.e., not in use by the callout).  While we are in
4021 	 * this loop, info->count is dropped by one, so that
4022 	 * rs_close() knows when to free things.  We restore it upon
4023 	 * exit, either normal or abnormal.
4024 	 */
4025 	retval = 0;
4026 	add_wait_queue(&info->open_wait, &wait);
4027 #ifdef SERIAL_DEBUG_OPEN
4028 	printk("block_til_ready before block: ttyS%d, count = %d\n",
4029 	       info->line, info->count);
4030 #endif
4031 	local_irq_save(flags);
4032 	if (!tty_hung_up_p(filp)) {
4033 		extra_count++;
4034 		info->count--;
4035 	}
4036 	local_irq_restore(flags);
4037 	info->blocked_open++;
4038 	while (1) {
4039 		local_irq_save(flags);
4040 		/* assert RTS and DTR */
4041 		e100_rts(info, 1);
4042 		e100_dtr(info, 1);
4043 		local_irq_restore(flags);
4044 		set_current_state(TASK_INTERRUPTIBLE);
4045 		if (tty_hung_up_p(filp) ||
4046 		    !(info->flags & ASYNC_INITIALIZED)) {
4047 #ifdef SERIAL_DO_RESTART
4048 			if (info->flags & ASYNC_HUP_NOTIFY)
4049 				retval = -EAGAIN;
4050 			else
4051 				retval = -ERESTARTSYS;
4052 #else
4053 			retval = -EAGAIN;
4054 #endif
4055 			break;
4056 		}
4057 		if (!(info->flags & ASYNC_CLOSING) && do_clocal)
4058 			/* && (do_clocal || DCD_IS_ASSERTED) */
4059 			break;
4060 		if (signal_pending(current)) {
4061 			retval = -ERESTARTSYS;
4062 			break;
4063 		}
4064 #ifdef SERIAL_DEBUG_OPEN
4065 		printk("block_til_ready blocking: ttyS%d, count = %d\n",
4066 		       info->line, info->count);
4067 #endif
4068 		tty_unlock();
4069 		schedule();
4070 		tty_lock();
4071 	}
4072 	set_current_state(TASK_RUNNING);
4073 	remove_wait_queue(&info->open_wait, &wait);
4074 	if (extra_count)
4075 		info->count++;
4076 	info->blocked_open--;
4077 #ifdef SERIAL_DEBUG_OPEN
4078 	printk("block_til_ready after blocking: ttyS%d, count = %d\n",
4079 	       info->line, info->count);
4080 #endif
4081 	if (retval)
4082 		return retval;
4083 	info->flags |= ASYNC_NORMAL_ACTIVE;
4084 	return 0;
4085 }
4086 
4087 static void
deinit_port(struct e100_serial * info)4088 deinit_port(struct e100_serial *info)
4089 {
4090 	if (info->dma_out_enabled) {
4091 		cris_free_dma(info->dma_out_nbr, info->dma_out_irq_description);
4092 		free_irq(info->dma_out_irq_nbr, info);
4093 	}
4094 	if (info->dma_in_enabled) {
4095 		cris_free_dma(info->dma_in_nbr, info->dma_in_irq_description);
4096 		free_irq(info->dma_in_irq_nbr, info);
4097 	}
4098 }
4099 
4100 /*
4101  * This routine is called whenever a serial port is opened.
4102  * It performs the serial-specific initialization for the tty structure.
4103  */
4104 static int
rs_open(struct tty_struct * tty,struct file * filp)4105 rs_open(struct tty_struct *tty, struct file * filp)
4106 {
4107 	struct e100_serial	*info;
4108 	int 			retval;
4109 	unsigned long           page;
4110 	int                     allocated_resources = 0;
4111 
4112 	info = rs_table + tty->index;
4113 	if (!info->enabled)
4114 		return -ENODEV;
4115 
4116 #ifdef SERIAL_DEBUG_OPEN
4117         printk("[%d] rs_open %s, count = %d\n", current->pid, tty->name,
4118  	       info->count);
4119 #endif
4120 
4121 	info->count++;
4122 	tty->driver_data = info;
4123 	info->port.tty = tty;
4124 
4125 	tty->low_latency = !!(info->flags & ASYNC_LOW_LATENCY);
4126 
4127 	if (!tmp_buf) {
4128 		page = get_zeroed_page(GFP_KERNEL);
4129 		if (!page) {
4130 			return -ENOMEM;
4131 		}
4132 		if (tmp_buf)
4133 			free_page(page);
4134 		else
4135 			tmp_buf = (unsigned char *) page;
4136 	}
4137 
4138 	/*
4139 	 * If the port is in the middle of closing, bail out now
4140 	 */
4141 	if (tty_hung_up_p(filp) ||
4142 	    (info->flags & ASYNC_CLOSING)) {
4143 		wait_event_interruptible_tty(info->close_wait,
4144 			!(info->flags & ASYNC_CLOSING));
4145 #ifdef SERIAL_DO_RESTART
4146 		return ((info->flags & ASYNC_HUP_NOTIFY) ?
4147 			-EAGAIN : -ERESTARTSYS);
4148 #else
4149 		return -EAGAIN;
4150 #endif
4151 	}
4152 
4153 	/*
4154 	 * If DMA is enabled try to allocate the irq's.
4155 	 */
4156 	if (info->count == 1) {
4157 		allocated_resources = 1;
4158 		if (info->dma_in_enabled) {
4159 			if (request_irq(info->dma_in_irq_nbr,
4160 					rec_interrupt,
4161 					info->dma_in_irq_flags,
4162 					info->dma_in_irq_description,
4163 					info)) {
4164 				printk(KERN_WARNING "DMA irq '%s' busy; "
4165 					"falling back to non-DMA mode\n",
4166 					info->dma_in_irq_description);
4167 				/* Make sure we never try to use DMA in */
4168 				/* for the port again. */
4169 				info->dma_in_enabled = 0;
4170 			} else if (cris_request_dma(info->dma_in_nbr,
4171 					info->dma_in_irq_description,
4172 					DMA_VERBOSE_ON_ERROR,
4173 					info->dma_owner)) {
4174 				free_irq(info->dma_in_irq_nbr, info);
4175 				printk(KERN_WARNING "DMA '%s' busy; "
4176 					"falling back to non-DMA mode\n",
4177 					info->dma_in_irq_description);
4178 				/* Make sure we never try to use DMA in */
4179 				/* for the port again. */
4180 				info->dma_in_enabled = 0;
4181 			}
4182 #ifdef SERIAL_DEBUG_OPEN
4183 			else
4184 				printk(KERN_DEBUG "DMA irq '%s' allocated\n",
4185 					info->dma_in_irq_description);
4186 #endif
4187 		}
4188 		if (info->dma_out_enabled) {
4189 			if (request_irq(info->dma_out_irq_nbr,
4190 					       tr_interrupt,
4191 					       info->dma_out_irq_flags,
4192 					       info->dma_out_irq_description,
4193 					       info)) {
4194 				printk(KERN_WARNING "DMA irq '%s' busy; "
4195 					"falling back to non-DMA mode\n",
4196 					info->dma_out_irq_description);
4197 				/* Make sure we never try to use DMA out */
4198 				/* for the port again. */
4199 				info->dma_out_enabled = 0;
4200 			} else if (cris_request_dma(info->dma_out_nbr,
4201 					     info->dma_out_irq_description,
4202 					     DMA_VERBOSE_ON_ERROR,
4203 					     info->dma_owner)) {
4204 				free_irq(info->dma_out_irq_nbr, info);
4205 				printk(KERN_WARNING "DMA '%s' busy; "
4206 					"falling back to non-DMA mode\n",
4207 					info->dma_out_irq_description);
4208 				/* Make sure we never try to use DMA out */
4209 				/* for the port again. */
4210 				info->dma_out_enabled = 0;
4211 			}
4212 #ifdef SERIAL_DEBUG_OPEN
4213 			else
4214 				printk(KERN_DEBUG "DMA irq '%s' allocated\n",
4215 					info->dma_out_irq_description);
4216 #endif
4217 		}
4218 	}
4219 
4220 	/*
4221 	 * Start up the serial port
4222 	 */
4223 
4224 	retval = startup(info);
4225 	if (retval) {
4226 		if (allocated_resources)
4227 			deinit_port(info);
4228 
4229 		/* FIXME Decrease count info->count here too? */
4230 		return retval;
4231 	}
4232 
4233 
4234 	retval = block_til_ready(tty, filp, info);
4235 	if (retval) {
4236 #ifdef SERIAL_DEBUG_OPEN
4237 		printk("rs_open returning after block_til_ready with %d\n",
4238 		       retval);
4239 #endif
4240 		if (allocated_resources)
4241 			deinit_port(info);
4242 
4243 		return retval;
4244 	}
4245 
4246 	if ((info->count == 1) && (info->flags & ASYNC_SPLIT_TERMIOS)) {
4247 		*tty->termios = info->normal_termios;
4248 		change_speed(info);
4249 	}
4250 
4251 #ifdef SERIAL_DEBUG_OPEN
4252 	printk("rs_open ttyS%d successful...\n", info->line);
4253 #endif
4254 	DLOG_INT_TRIG( log_int_pos = 0);
4255 
4256 	DFLIP(	if (info->line == SERIAL_DEBUG_LINE) {
4257 			info->icount.rx = 0;
4258 		} );
4259 
4260 	return 0;
4261 }
4262 
4263 #ifdef CONFIG_PROC_FS
4264 /*
4265  * /proc fs routines....
4266  */
4267 
seq_line_info(struct seq_file * m,struct e100_serial * info)4268 static void seq_line_info(struct seq_file *m, struct e100_serial *info)
4269 {
4270 	unsigned long tmp;
4271 
4272 	seq_printf(m, "%d: uart:E100 port:%lX irq:%d",
4273 		   info->line, (unsigned long)info->ioport, info->irq);
4274 
4275 	if (!info->ioport || (info->type == PORT_UNKNOWN)) {
4276 		seq_printf(m, "\n");
4277 		return;
4278 	}
4279 
4280 	seq_printf(m, " baud:%d", info->baud);
4281 	seq_printf(m, " tx:%lu rx:%lu",
4282 		       (unsigned long)info->icount.tx,
4283 		       (unsigned long)info->icount.rx);
4284 	tmp = CIRC_CNT(info->xmit.head, info->xmit.tail, SERIAL_XMIT_SIZE);
4285 	if (tmp)
4286 		seq_printf(m, " tx_pend:%lu/%lu",
4287 			   (unsigned long)tmp,
4288 			   (unsigned long)SERIAL_XMIT_SIZE);
4289 
4290 	seq_printf(m, " rx_pend:%lu/%lu",
4291 		   (unsigned long)info->recv_cnt,
4292 		   (unsigned long)info->max_recv_cnt);
4293 
4294 #if 1
4295 	if (info->port.tty) {
4296 		if (info->port.tty->stopped)
4297 			seq_printf(m, " stopped:%i",
4298 				   (int)info->port.tty->stopped);
4299 		if (info->port.tty->hw_stopped)
4300 			seq_printf(m, " hw_stopped:%i",
4301 				   (int)info->port.tty->hw_stopped);
4302 	}
4303 
4304 	{
4305 		unsigned char rstat = info->ioport[REG_STATUS];
4306 		if (rstat & IO_MASK(R_SERIAL0_STATUS, xoff_detect))
4307 			seq_printf(m, " xoff_detect:1");
4308 	}
4309 
4310 #endif
4311 
4312 	if (info->icount.frame)
4313 		seq_printf(m, " fe:%lu", (unsigned long)info->icount.frame);
4314 
4315 	if (info->icount.parity)
4316 		seq_printf(m, " pe:%lu", (unsigned long)info->icount.parity);
4317 
4318 	if (info->icount.brk)
4319 		seq_printf(m, " brk:%lu", (unsigned long)info->icount.brk);
4320 
4321 	if (info->icount.overrun)
4322 		seq_printf(m, " oe:%lu", (unsigned long)info->icount.overrun);
4323 
4324 	/*
4325 	 * Last thing is the RS-232 status lines
4326 	 */
4327 	if (!E100_RTS_GET(info))
4328 		seq_puts(m, "|RTS");
4329 	if (!E100_CTS_GET(info))
4330 		seq_puts(m, "|CTS");
4331 	if (!E100_DTR_GET(info))
4332 		seq_puts(m, "|DTR");
4333 	if (!E100_DSR_GET(info))
4334 		seq_puts(m, "|DSR");
4335 	if (!E100_CD_GET(info))
4336 		seq_puts(m, "|CD");
4337 	if (!E100_RI_GET(info))
4338 		seq_puts(m, "|RI");
4339 	seq_puts(m, "\n");
4340 }
4341 
4342 
crisv10_proc_show(struct seq_file * m,void * v)4343 static int crisv10_proc_show(struct seq_file *m, void *v)
4344 {
4345 	int i;
4346 
4347 	seq_printf(m, "serinfo:1.0 driver:%s\n", serial_version);
4348 
4349 	for (i = 0; i < NR_PORTS; i++) {
4350 		if (!rs_table[i].enabled)
4351 			continue;
4352 		seq_line_info(m, &rs_table[i]);
4353 	}
4354 #ifdef DEBUG_LOG_INCLUDED
4355 	for (i = 0; i < debug_log_pos; i++) {
4356 		seq_printf(m, "%-4i %lu.%lu ",
4357 			 i, debug_log[i].time,
4358 			 timer_data_to_ns(debug_log[i].timer_data));
4359 		seq_printf(m, debug_log[i].string, debug_log[i].value);
4360 	}
4361 	seq_printf(m, "debug_log %i/%i\n", i, DEBUG_LOG_SIZE);
4362 	debug_log_pos = 0;
4363 #endif
4364 	return 0;
4365 }
4366 
crisv10_proc_open(struct inode * inode,struct file * file)4367 static int crisv10_proc_open(struct inode *inode, struct file *file)
4368 {
4369 	return single_open(file, crisv10_proc_show, NULL);
4370 }
4371 
4372 static const struct file_operations crisv10_proc_fops = {
4373 	.owner		= THIS_MODULE,
4374 	.open		= crisv10_proc_open,
4375 	.read		= seq_read,
4376 	.llseek		= seq_lseek,
4377 	.release	= single_release,
4378 };
4379 #endif
4380 
4381 
4382 /* Finally, routines used to initialize the serial driver. */
4383 
show_serial_version(void)4384 static void show_serial_version(void)
4385 {
4386 	printk(KERN_INFO
4387 	       "ETRAX 100LX serial-driver %s, "
4388 	       "(c) 2000-2004 Axis Communications AB\r\n",
4389 	       &serial_version[11]); /* "$Revision: x.yy" */
4390 }
4391 
4392 /* rs_init inits the driver at boot (using the module_init chain) */
4393 
4394 static const struct tty_operations rs_ops = {
4395 	.open = rs_open,
4396 	.close = rs_close,
4397 	.write = rs_write,
4398 	.flush_chars = rs_flush_chars,
4399 	.write_room = rs_write_room,
4400 	.chars_in_buffer = rs_chars_in_buffer,
4401 	.flush_buffer = rs_flush_buffer,
4402 	.ioctl = rs_ioctl,
4403 	.throttle = rs_throttle,
4404         .unthrottle = rs_unthrottle,
4405 	.set_termios = rs_set_termios,
4406 	.stop = rs_stop,
4407 	.start = rs_start,
4408 	.hangup = rs_hangup,
4409 	.break_ctl = rs_break,
4410 	.send_xchar = rs_send_xchar,
4411 	.wait_until_sent = rs_wait_until_sent,
4412 	.tiocmget = rs_tiocmget,
4413 	.tiocmset = rs_tiocmset,
4414 #ifdef CONFIG_PROC_FS
4415 	.proc_fops = &crisv10_proc_fops,
4416 #endif
4417 };
4418 
rs_init(void)4419 static int __init rs_init(void)
4420 {
4421 	int i;
4422 	struct e100_serial *info;
4423 	struct tty_driver *driver = alloc_tty_driver(NR_PORTS);
4424 
4425 	if (!driver)
4426 		return -ENOMEM;
4427 
4428 	show_serial_version();
4429 
4430 	/* Setup the timed flush handler system */
4431 
4432 #if !defined(CONFIG_ETRAX_SERIAL_FAST_TIMER)
4433 	setup_timer(&flush_timer, timed_flush_handler, 0);
4434 	mod_timer(&flush_timer, jiffies + 5);
4435 #endif
4436 
4437 #if defined(CONFIG_ETRAX_RS485)
4438 #if defined(CONFIG_ETRAX_RS485_ON_PA)
4439 	if (cris_io_interface_allocate_pins(if_serial_0, 'a', rs485_pa_bit,
4440 			rs485_pa_bit)) {
4441 		printk(KERN_ERR "ETRAX100LX serial: Could not allocate "
4442 			"RS485 pin\n");
4443 		put_tty_driver(driver);
4444 		return -EBUSY;
4445 	}
4446 #endif
4447 #if defined(CONFIG_ETRAX_RS485_ON_PORT_G)
4448 	if (cris_io_interface_allocate_pins(if_serial_0, 'g', rs485_pa_bit,
4449 			rs485_port_g_bit)) {
4450 		printk(KERN_ERR "ETRAX100LX serial: Could not allocate "
4451 			"RS485 pin\n");
4452 		put_tty_driver(driver);
4453 		return -EBUSY;
4454 	}
4455 #endif
4456 #endif
4457 
4458 	/* Initialize the tty_driver structure */
4459 
4460 	driver->driver_name = "serial";
4461 	driver->name = "ttyS";
4462 	driver->major = TTY_MAJOR;
4463 	driver->minor_start = 64;
4464 	driver->type = TTY_DRIVER_TYPE_SERIAL;
4465 	driver->subtype = SERIAL_TYPE_NORMAL;
4466 	driver->init_termios = tty_std_termios;
4467 	driver->init_termios.c_cflag =
4468 		B115200 | CS8 | CREAD | HUPCL | CLOCAL; /* is normally B9600 default... */
4469 	driver->init_termios.c_ispeed = 115200;
4470 	driver->init_termios.c_ospeed = 115200;
4471 	driver->flags = TTY_DRIVER_REAL_RAW | TTY_DRIVER_DYNAMIC_DEV;
4472 
4473 	tty_set_operations(driver, &rs_ops);
4474         serial_driver = driver;
4475 	if (tty_register_driver(driver))
4476 		panic("Couldn't register serial driver\n");
4477 	/* do some initializing for the separate ports */
4478 
4479 	for (i = 0, info = rs_table; i < NR_PORTS; i++,info++) {
4480 		if (info->enabled) {
4481 			if (cris_request_io_interface(info->io_if,
4482 					info->io_if_description)) {
4483 				printk(KERN_ERR "ETRAX100LX async serial: "
4484 					"Could not allocate IO pins for "
4485 					"%s, port %d\n",
4486 					info->io_if_description, i);
4487 				info->enabled = 0;
4488 			}
4489 		}
4490 		info->uses_dma_in = 0;
4491 		info->uses_dma_out = 0;
4492 		info->line = i;
4493 		info->port.tty = NULL;
4494 		info->type = PORT_ETRAX;
4495 		info->tr_running = 0;
4496 		info->forced_eop = 0;
4497 		info->baud_base = DEF_BAUD_BASE;
4498 		info->custom_divisor = 0;
4499 		info->flags = 0;
4500 		info->close_delay = 5*HZ/10;
4501 		info->closing_wait = 30*HZ;
4502 		info->x_char = 0;
4503 		info->event = 0;
4504 		info->count = 0;
4505 		info->blocked_open = 0;
4506 		info->normal_termios = driver->init_termios;
4507 		init_waitqueue_head(&info->open_wait);
4508 		init_waitqueue_head(&info->close_wait);
4509 		info->xmit.buf = NULL;
4510 		info->xmit.tail = info->xmit.head = 0;
4511 		info->first_recv_buffer = info->last_recv_buffer = NULL;
4512 		info->recv_cnt = info->max_recv_cnt = 0;
4513 		info->last_tx_active_usec = 0;
4514 		info->last_tx_active = 0;
4515 
4516 #if defined(CONFIG_ETRAX_RS485)
4517 		/* Set sane defaults */
4518 		info->rs485.flags &= ~(SER_RS485_RTS_ON_SEND);
4519 		info->rs485.flags |= SER_RS485_RTS_AFTER_SEND;
4520 		info->rs485.delay_rts_before_send = 0;
4521 		info->rs485.flags &= ~(SER_RS485_ENABLED);
4522 #endif
4523 		INIT_WORK(&info->work, do_softint);
4524 
4525 		if (info->enabled) {
4526 			printk(KERN_INFO "%s%d at %p is a builtin UART with DMA\n",
4527 			       serial_driver->name, info->line, info->ioport);
4528 		}
4529 	}
4530 #ifdef CONFIG_ETRAX_FAST_TIMER
4531 #ifdef CONFIG_ETRAX_SERIAL_FAST_TIMER
4532 	memset(fast_timers, 0, sizeof(fast_timers));
4533 #endif
4534 #ifdef CONFIG_ETRAX_RS485
4535 	memset(fast_timers_rs485, 0, sizeof(fast_timers_rs485));
4536 #endif
4537 	fast_timer_init();
4538 #endif
4539 
4540 #ifndef CONFIG_SVINTO_SIM
4541 #ifndef CONFIG_ETRAX_KGDB
4542 	/* Not needed in simulator.  May only complicate stuff. */
4543 	/* hook the irq's for DMA channel 6 and 7, serial output and input, and some more... */
4544 
4545 	if (request_irq(SERIAL_IRQ_NBR, ser_interrupt,
4546 			IRQF_SHARED, "serial ", driver))
4547 		panic("%s: Failed to request irq8", __func__);
4548 
4549 #endif
4550 #endif /* CONFIG_SVINTO_SIM */
4551 
4552 	return 0;
4553 }
4554 
4555 /* this makes sure that rs_init is called during kernel boot */
4556 
4557 module_init(rs_init);
4558