Root/
1 | /* |
2 | * serial.h: Arch-dep definitions for the Etrax100 serial driver. |
3 | * |
4 | * Copyright (C) 1998-2007 Axis Communications AB |
5 | */ |
6 | |
7 | #ifndef _ETRAX_SERIAL_H |
8 | #define _ETRAX_SERIAL_H |
9 | |
10 | #include <linux/circ_buf.h> |
11 | #include <asm/termios.h> |
12 | #include <asm/dma.h> |
13 | #include <arch/io_interface_mux.h> |
14 | |
15 | /* Software state per channel */ |
16 | |
17 | #ifdef __KERNEL__ |
18 | /* |
19 | * This is our internal structure for each serial port's state. |
20 | * |
21 | * Many fields are paralleled by the structure used by the serial_struct |
22 | * structure. |
23 | * |
24 | * For definitions of the flags field, see tty.h |
25 | */ |
26 | |
27 | #define SERIAL_RECV_DESCRIPTORS 8 |
28 | |
29 | struct etrax_recv_buffer { |
30 | struct etrax_recv_buffer *next; |
31 | unsigned short length; |
32 | unsigned char error; |
33 | unsigned char pad; |
34 | |
35 | unsigned char buffer[0]; |
36 | }; |
37 | |
38 | struct e100_serial { |
39 | struct tty_port port; |
40 | int baud; |
41 | volatile u8 *ioport; /* R_SERIALx_CTRL */ |
42 | u32 irq; /* bitnr in R_IRQ_MASK2 for dmaX_descr */ |
43 | |
44 | /* Output registers */ |
45 | volatile u8 *oclrintradr; /* adr to R_DMA_CHx_CLR_INTR */ |
46 | volatile u32 *ofirstadr; /* adr to R_DMA_CHx_FIRST */ |
47 | volatile u8 *ocmdadr; /* adr to R_DMA_CHx_CMD */ |
48 | const volatile u8 *ostatusadr; /* adr to R_DMA_CHx_STATUS */ |
49 | |
50 | /* Input registers */ |
51 | volatile u8 *iclrintradr; /* adr to R_DMA_CHx_CLR_INTR */ |
52 | volatile u32 *ifirstadr; /* adr to R_DMA_CHx_FIRST */ |
53 | volatile u8 *icmdadr; /* adr to R_DMA_CHx_CMD */ |
54 | volatile u32 *idescradr; /* adr to R_DMA_CHx_DESCR */ |
55 | |
56 | int flags; /* defined in tty.h */ |
57 | |
58 | u8 rx_ctrl; /* shadow for R_SERIALx_REC_CTRL */ |
59 | u8 tx_ctrl; /* shadow for R_SERIALx_TR_CTRL */ |
60 | u8 iseteop; /* bit number for R_SET_EOP for the input dma */ |
61 | int enabled; /* Set to 1 if the port is enabled in HW config */ |
62 | |
63 | u8 dma_out_enabled; /* Set to 1 if DMA should be used */ |
64 | u8 dma_in_enabled; /* Set to 1 if DMA should be used */ |
65 | |
66 | /* end of fields defined in rs_table[] in .c-file */ |
67 | int dma_owner; |
68 | unsigned int dma_in_nbr; |
69 | unsigned int dma_out_nbr; |
70 | unsigned int dma_in_irq_nbr; |
71 | unsigned int dma_out_irq_nbr; |
72 | unsigned long dma_in_irq_flags; |
73 | unsigned long dma_out_irq_flags; |
74 | char *dma_in_irq_description; |
75 | char *dma_out_irq_description; |
76 | |
77 | enum cris_io_interface io_if; |
78 | char *io_if_description; |
79 | |
80 | u8 uses_dma_in; /* Set to 1 if DMA is used */ |
81 | u8 uses_dma_out; /* Set to 1 if DMA is used */ |
82 | u8 forced_eop; /* a fifo eop has been forced */ |
83 | int baud_base; /* For special baudrates */ |
84 | int custom_divisor; /* For special baudrates */ |
85 | struct etrax_dma_descr tr_descr; |
86 | struct etrax_dma_descr rec_descr[SERIAL_RECV_DESCRIPTORS]; |
87 | int cur_rec_descr; |
88 | |
89 | volatile int tr_running; /* 1 if output is running */ |
90 | |
91 | struct tty_struct *tty; |
92 | int read_status_mask; |
93 | int ignore_status_mask; |
94 | int x_char; /* xon/xoff character */ |
95 | int close_delay; |
96 | unsigned short closing_wait; |
97 | unsigned short closing_wait2; |
98 | unsigned long event; |
99 | unsigned long last_active; |
100 | int line; |
101 | int type; /* PORT_ETRAX */ |
102 | int count; /* # of fd on device */ |
103 | int blocked_open; /* # of blocked opens */ |
104 | struct circ_buf xmit; |
105 | struct etrax_recv_buffer *first_recv_buffer; |
106 | struct etrax_recv_buffer *last_recv_buffer; |
107 | unsigned int recv_cnt; |
108 | unsigned int max_recv_cnt; |
109 | |
110 | struct work_struct work; |
111 | struct async_icount icount; /* error-statistics etc.*/ |
112 | struct ktermios normal_termios; |
113 | struct ktermios callout_termios; |
114 | wait_queue_head_t open_wait; |
115 | wait_queue_head_t close_wait; |
116 | |
117 | unsigned long char_time_usec; /* The time for 1 char, in usecs */ |
118 | unsigned long flush_time_usec; /* How often we should flush */ |
119 | unsigned long last_tx_active_usec; /* Last tx usec in the jiffies */ |
120 | unsigned long last_tx_active; /* Last tx time in jiffies */ |
121 | unsigned long last_rx_active_usec; /* Last rx usec in the jiffies */ |
122 | unsigned long last_rx_active; /* Last rx time in jiffies */ |
123 | |
124 | int break_detected_cnt; |
125 | int errorcode; |
126 | |
127 | #ifdef CONFIG_ETRAX_RS485 |
128 | struct serial_rs485 rs485; /* RS-485 support */ |
129 | #endif |
130 | }; |
131 | |
132 | /* this PORT is not in the standard serial.h. it's not actually used for |
133 | * anything since we only have one type of async serial-port anyway in this |
134 | * system. |
135 | */ |
136 | |
137 | #define PORT_ETRAX 1 |
138 | |
139 | /* |
140 | * Events are used to schedule things to happen at timer-interrupt |
141 | * time, instead of at rs interrupt time. |
142 | */ |
143 | #define RS_EVENT_WRITE_WAKEUP 0 |
144 | |
145 | #endif /* __KERNEL__ */ |
146 | |
147 | #endif /* !_ETRAX_SERIAL_H */ |
148 |
Branches:
ben-wpan
ben-wpan-stefan
javiroman/ks7010
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9