diff options
author | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 18:20:36 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-04-16 18:20:36 -0400 |
commit | 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 (patch) | |
tree | 0bba044c4ce775e45a88a51686b5d9f90697ea9d /include/linux/n_r3964.h |
Linux-2.6.12-rc2v2.6.12-rc2
Initial git repository build. I'm not bothering with the full history,
even though we have it. We can create a separate "historical" git
archive of that later if we want to, and in the meantime it's about
3.2GB when imported into git - space that would just make the early
git days unnecessarily complicated, when we don't have a lot of good
infrastructure for it.
Let it rip!
Diffstat (limited to 'include/linux/n_r3964.h')
-rw-r--r-- | include/linux/n_r3964.h | 226 |
1 files changed, 226 insertions, 0 deletions
diff --git a/include/linux/n_r3964.h b/include/linux/n_r3964.h new file mode 100644 index 000000000000..2352bcd31a06 --- /dev/null +++ b/include/linux/n_r3964.h | |||
@@ -0,0 +1,226 @@ | |||
1 | /* r3964 linediscipline for linux | ||
2 | * | ||
3 | * ----------------------------------------------------------- | ||
4 | * Copyright by | ||
5 | * Philips Automation Projects | ||
6 | * Kassel (Germany) | ||
7 | * http://www.pap-philips.de | ||
8 | * ----------------------------------------------------------- | ||
9 | * This software may be used and distributed according to the terms of | ||
10 | * the GNU General Public License, incorporated herein by reference. | ||
11 | * | ||
12 | * Author: | ||
13 | * L. Haag | ||
14 | * | ||
15 | * $Log: r3964.h,v $ | ||
16 | * Revision 1.3 2001/03/18 13:02:24 dwmw2 | ||
17 | * Fix timer usage, use spinlocks properly. | ||
18 | * | ||
19 | * Revision 1.2 2001/03/18 12:53:15 dwmw2 | ||
20 | * Merge changes in 2.4.2 | ||
21 | * | ||
22 | * Revision 1.1.1.1 1998/10/13 16:43:14 dwmw2 | ||
23 | * This'll screw the version control | ||
24 | * | ||
25 | * Revision 1.6 1998/09/30 00:40:38 dwmw2 | ||
26 | * Updated to use kernel's N_R3964 if available | ||
27 | * | ||
28 | * Revision 1.4 1998/04/02 20:29:44 lhaag | ||
29 | * select, blocking, ... | ||
30 | * | ||
31 | * Revision 1.3 1998/02/12 18:58:43 root | ||
32 | * fixed some memory leaks | ||
33 | * calculation of checksum characters | ||
34 | * | ||
35 | * Revision 1.2 1998/02/07 13:03:17 root | ||
36 | * ioctl read_telegram | ||
37 | * | ||
38 | * Revision 1.1 1998/02/06 19:19:43 root | ||
39 | * Initial revision | ||
40 | * | ||
41 | * | ||
42 | */ | ||
43 | |||
44 | #ifndef __LINUX_N_R3964_H__ | ||
45 | #define __LINUX_N_R3964_H__ | ||
46 | |||
47 | /* line disciplines for r3964 protocol */ | ||
48 | #include <asm/termios.h> | ||
49 | |||
50 | #ifdef __KERNEL__ | ||
51 | /* | ||
52 | * Common ascii handshake characters: | ||
53 | */ | ||
54 | |||
55 | #define STX 0x02 | ||
56 | #define ETX 0x03 | ||
57 | #define DLE 0x10 | ||
58 | #define NAK 0x15 | ||
59 | |||
60 | /* | ||
61 | * Timeouts (msecs/10 msecs per timer interrupt): | ||
62 | */ | ||
63 | |||
64 | #define R3964_TO_QVZ 550/10 | ||
65 | #define R3964_TO_ZVZ 220/10 | ||
66 | #define R3964_TO_NO_BUF 400/10 | ||
67 | #define R3964_NO_TX_ROOM 100/10 | ||
68 | #define R3964_TO_RX_PANIC 4000/10 | ||
69 | #define R3964_MAX_RETRIES 5 | ||
70 | |||
71 | #endif | ||
72 | |||
73 | /* | ||
74 | * Ioctl-commands | ||
75 | */ | ||
76 | |||
77 | #define R3964_ENABLE_SIGNALS 0x5301 | ||
78 | #define R3964_SETPRIORITY 0x5302 | ||
79 | #define R3964_USE_BCC 0x5303 | ||
80 | #define R3964_READ_TELEGRAM 0x5304 | ||
81 | |||
82 | /* Options for R3964_SETPRIORITY */ | ||
83 | #define R3964_MASTER 0 | ||
84 | #define R3964_SLAVE 1 | ||
85 | |||
86 | /* Options for R3964_ENABLE_SIGNALS */ | ||
87 | #define R3964_SIG_ACK 0x0001 | ||
88 | #define R3964_SIG_DATA 0x0002 | ||
89 | #define R3964_SIG_ALL 0x000f | ||
90 | #define R3964_SIG_NONE 0x0000 | ||
91 | #define R3964_USE_SIGIO 0x1000 | ||
92 | |||
93 | /* | ||
94 | * r3964 operation states: | ||
95 | */ | ||
96 | #ifdef __KERNEL__ | ||
97 | |||
98 | enum { R3964_IDLE, | ||
99 | R3964_TX_REQUEST, R3964_TRANSMITTING, | ||
100 | R3964_WAIT_ZVZ_BEFORE_TX_RETRY, R3964_WAIT_FOR_TX_ACK, | ||
101 | R3964_WAIT_FOR_RX_BUF, | ||
102 | R3964_RECEIVING, R3964_WAIT_FOR_BCC, R3964_WAIT_FOR_RX_REPEAT | ||
103 | }; | ||
104 | |||
105 | /* | ||
106 | * All open file-handles are 'clients' and are stored in a linked list: | ||
107 | */ | ||
108 | |||
109 | struct r3964_message; | ||
110 | |||
111 | struct r3964_client_info { | ||
112 | spinlock_t lock; | ||
113 | pid_t pid; | ||
114 | unsigned int sig_flags; | ||
115 | |||
116 | struct r3964_client_info *next; | ||
117 | |||
118 | struct r3964_message *first_msg; | ||
119 | struct r3964_message *last_msg; | ||
120 | struct r3964_block_header *next_block_to_read; | ||
121 | int msg_count; | ||
122 | }; | ||
123 | |||
124 | |||
125 | #endif | ||
126 | |||
127 | /* types for msg_id: */ | ||
128 | enum {R3964_MSG_ACK=1, R3964_MSG_DATA }; | ||
129 | |||
130 | #define R3964_MAX_MSG_COUNT 32 | ||
131 | |||
132 | /* error codes for client messages */ | ||
133 | #define R3964_OK 0 /* no error. */ | ||
134 | #define R3964_TX_FAIL -1 /* transmission error, block NOT sent */ | ||
135 | #define R3964_OVERFLOW -2 /* msg queue overflow */ | ||
136 | |||
137 | /* the client gets this struct when calling read(fd,...): */ | ||
138 | struct r3964_client_message { | ||
139 | int msg_id; | ||
140 | int arg; | ||
141 | int error_code; | ||
142 | }; | ||
143 | |||
144 | #define R3964_MTU 256 | ||
145 | |||
146 | |||
147 | #ifdef __KERNEL__ | ||
148 | |||
149 | struct r3964_block_header; | ||
150 | |||
151 | /* internal version of client_message: */ | ||
152 | struct r3964_message { | ||
153 | int msg_id; | ||
154 | int arg; | ||
155 | int error_code; | ||
156 | struct r3964_block_header *block; | ||
157 | struct r3964_message *next; | ||
158 | }; | ||
159 | |||
160 | /* | ||
161 | * Header of received block in rx_buf/tx_buf: | ||
162 | */ | ||
163 | |||
164 | struct r3964_block_header | ||
165 | { | ||
166 | unsigned int length; /* length in chars without header */ | ||
167 | unsigned char *data; /* usually data is located | ||
168 | immediately behind this struct */ | ||
169 | unsigned int locks; /* only used in rx_buffer */ | ||
170 | |||
171 | struct r3964_block_header *next; | ||
172 | struct r3964_client_info *owner; /* =NULL in rx_buffer */ | ||
173 | }; | ||
174 | |||
175 | /* | ||
176 | * If rx_buf hasn't enough space to store R3964_MTU chars, | ||
177 | * we will reject all incoming STX-requests by sending NAK. | ||
178 | */ | ||
179 | |||
180 | #define RX_BUF_SIZE 4000 | ||
181 | #define TX_BUF_SIZE 4000 | ||
182 | #define R3964_MAX_BLOCKS_IN_RX_QUEUE 100 | ||
183 | |||
184 | #define R3964_PARITY 0x0001 | ||
185 | #define R3964_FRAME 0x0002 | ||
186 | #define R3964_OVERRUN 0x0004 | ||
187 | #define R3964_UNKNOWN 0x0008 | ||
188 | #define R3964_BREAK 0x0010 | ||
189 | #define R3964_CHECKSUM 0x0020 | ||
190 | #define R3964_ERROR 0x003f | ||
191 | #define R3964_BCC 0x4000 | ||
192 | #define R3964_DEBUG 0x8000 | ||
193 | |||
194 | |||
195 | struct r3964_info { | ||
196 | spinlock_t lock; | ||
197 | struct tty_struct *tty; | ||
198 | unsigned char priority; | ||
199 | unsigned char *rx_buf; /* ring buffer */ | ||
200 | unsigned char *tx_buf; | ||
201 | |||
202 | wait_queue_head_t read_wait; | ||
203 | //struct wait_queue *read_wait; | ||
204 | |||
205 | struct r3964_block_header *rx_first; | ||
206 | struct r3964_block_header *rx_last; | ||
207 | struct r3964_block_header *tx_first; | ||
208 | struct r3964_block_header *tx_last; | ||
209 | unsigned int tx_position; | ||
210 | unsigned int rx_position; | ||
211 | unsigned char last_rx; | ||
212 | unsigned char bcc; | ||
213 | unsigned int blocks_in_rx_queue; | ||
214 | |||
215 | |||
216 | struct r3964_client_info *firstClient; | ||
217 | unsigned int state; | ||
218 | unsigned int flags; | ||
219 | |||
220 | struct timer_list tmr; | ||
221 | int nRetry; | ||
222 | }; | ||
223 | |||
224 | #endif | ||
225 | |||
226 | #endif | ||