OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [tags/] [LINUX_2_4_26_OR32/] [linux/] [linux-2.4/] [include/] [linux/] [n_r3964.h] - Blame information for rev 1275

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 1275 phoenix
/* 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: not supported by cvs2svn $
16
 * Revision 1.1.1.1  1998/10/13 16:43:14  dwmw2
17
 * This'll screw the version control
18
 *
19
 * Revision 1.6  1998/09/30 00:40:38  dwmw2
20
 * Updated to use kernel's N_R3964 if available
21
 *
22
 * Revision 1.4  1998/04/02 20:29:44  lhaag
23
 * select, blocking, ...
24
 *
25
 * Revision 1.3  1998/02/12 18:58:43  root
26
 * fixed some memory leaks
27
 * calculation of checksum characters
28
 *
29
 * Revision 1.2  1998/02/07 13:03:17  root
30
 * ioctl read_telegram
31
 *
32
 * Revision 1.1  1998/02/06 19:19:43  root
33
 * Initial revision
34
 *
35
 *
36
 */
37
 
38
#ifndef __LINUX_N_R3964_H__
39
#define __LINUX_N_R3964_H__
40
 
41
/* line disciplines for r3964 protocol */
42
#include <asm/termios.h>
43
 
44
#ifdef __KERNEL__
45
/*
46
 * Common ascii handshake characters:
47
 */
48
 
49
#define STX 0x02
50
#define ETX 0x03
51
#define DLE 0x10
52
#define NAK 0x15
53
 
54
/*
55
 * Timeouts (msecs/10 msecs per timer interrupt):
56
 */
57
 
58
#define R3964_TO_QVZ 550/10
59
#define R3964_TO_ZVZ 220/10
60
#define R3964_TO_NO_BUF 400/10
61
#define R3964_NO_TX_ROOM 100/10
62
#define R3964_TO_RX_PANIC 4000/10
63
#define R3964_MAX_RETRIES 5
64
 
65
#endif
66
 
67
/*
68
 * Ioctl-commands
69
 */
70
 
71
#define R3964_ENABLE_SIGNALS      0x5301
72
#define R3964_SETPRIORITY         0x5302
73
#define R3964_USE_BCC             0x5303
74
#define R3964_READ_TELEGRAM       0x5304
75
 
76
/* Options for R3964_SETPRIORITY */
77
#define R3964_MASTER   0
78
#define R3964_SLAVE    1
79
 
80
/* Options for R3964_ENABLE_SIGNALS */
81
#define R3964_SIG_ACK   0x0001
82
#define R3964_SIG_DATA  0x0002
83
#define R3964_SIG_ALL   0x000f
84
#define R3964_SIG_NONE  0x0000
85
#define R3964_USE_SIGIO 0x1000
86
 
87
/*
88
 * r3964 operation states:
89
 */
90
#ifdef __KERNEL__
91
 
92
enum { R3964_IDLE,
93
           R3964_TX_REQUEST, R3964_TRANSMITTING,
94
           R3964_WAIT_ZVZ_BEFORE_TX_RETRY, R3964_WAIT_FOR_TX_ACK,
95
           R3964_WAIT_FOR_RX_BUF,
96
           R3964_RECEIVING, R3964_WAIT_FOR_BCC, R3964_WAIT_FOR_RX_REPEAT
97
           };
98
 
99
/*
100
 * All open file-handles are 'clients' and are stored in a linked list:
101
 */
102
 
103
struct r3964_message;
104
 
105
struct r3964_client_info {
106
        pid_t          pid;
107
    unsigned int   sig_flags;
108
 
109
        struct r3964_client_info *next;
110
 
111
        struct r3964_message *first_msg;
112
        struct r3964_message *last_msg;
113
        struct r3964_block_header *next_block_to_read;
114
        int            msg_count;
115
};
116
 
117
 
118
#endif
119
 
120
/* types for msg_id: */
121
enum {R3964_MSG_ACK=1, R3964_MSG_DATA };
122
 
123
#define R3964_MAX_MSG_COUNT 32
124
 
125
/* error codes for client messages */
126
#define R3964_OK 0        /* no error. */
127
#define R3964_TX_FAIL -1  /* transmission error, block NOT sent */
128
#define R3964_OVERFLOW -2 /* msg queue overflow */
129
 
130
/* the client gets this struct when calling read(fd,...): */
131
struct r3964_client_message {
132
          int     msg_id;
133
          int     arg;
134
          int     error_code;
135
};
136
 
137
#define R3964_MTU      256
138
 
139
 
140
#ifdef __KERNEL__
141
 
142
struct r3964_block_header;
143
 
144
/* internal version of client_message: */
145
struct r3964_message {
146
          int     msg_id;
147
          int     arg;
148
          int     error_code;
149
          struct r3964_block_header *block;
150
          struct r3964_message *next;
151
};
152
 
153
/*
154
 * Header of received block in rx_buf/tx_buf:
155
 */
156
 
157
struct r3964_block_header
158
{
159
        unsigned int length;             /* length in chars without header */
160
        unsigned char *data;             /* usually data is located
161
                                        immediatly behind this struct */
162
        unsigned int locks;              /* only used in rx_buffer */
163
 
164
    struct r3964_block_header *next;
165
        struct r3964_client_info *owner;  /* =NULL in rx_buffer */
166
};
167
 
168
/*
169
 * If rx_buf hasn't enough space to store R3964_MTU chars,
170
 * we will reject all incoming STX-requests by sending NAK.
171
 */
172
 
173
#define RX_BUF_SIZE    4000
174
#define TX_BUF_SIZE    4000
175
#define R3964_MAX_BLOCKS_IN_RX_QUEUE 100
176
 
177
#define R3964_PARITY 0x0001
178
#define R3964_FRAME  0x0002
179
#define R3964_OVERRUN 0x0004
180
#define R3964_UNKNOWN 0x0008
181
#define R3964_BREAK   0x0010
182
#define R3964_CHECKSUM 0x0020
183
#define R3964_ERROR  0x003f
184
#define R3964_BCC   0x4000
185
#define R3964_DEBUG 0x8000
186
 
187
 
188
struct r3964_info {
189
        struct tty_struct *tty;
190
        unsigned char priority;
191
        unsigned char *rx_buf;            /* ring buffer */
192
        unsigned char *tx_buf;
193
 
194
        wait_queue_head_t read_wait;
195
        //struct wait_queue *read_wait;
196
 
197
        struct r3964_block_header *rx_first;
198
        struct r3964_block_header *rx_last;
199
        struct r3964_block_header *tx_first;
200
        struct r3964_block_header *tx_last;
201
        unsigned int tx_position;
202
        unsigned int rx_position;
203
        unsigned char last_rx;
204
        unsigned char bcc;
205
        unsigned int  blocks_in_rx_queue;
206
 
207
 
208
        struct r3964_client_info *firstClient;
209
        unsigned int state;
210
        unsigned int flags;
211
 
212
        int count_down;
213
    int nRetry;
214
 
215
    struct tq_struct bh_1;
216
    struct tq_struct bh_2;
217
};
218
 
219
#endif  
220
 
221
#endif

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.