1 |
1275 |
phoenix |
/*
|
2 |
|
|
* General definitions for the COMX driver
|
3 |
|
|
*
|
4 |
|
|
* Original authors: Arpad Bakay <bakay.arpad@synergon.hu>,
|
5 |
|
|
* Peter Bajan <bajan.peter@synergon.hu>,
|
6 |
|
|
* Previous maintainer: Tivadar Szemethy <tiv@itc.hu>
|
7 |
|
|
* Currently maintained by: Gergely Madarasz <gorgo@itc.hu>
|
8 |
|
|
*
|
9 |
|
|
* Copyright (C) 1995-1999 ITConsult-Pro Co. <info@itc.hu>
|
10 |
|
|
*
|
11 |
|
|
* This program is free software; you can redistribute it and/or
|
12 |
|
|
* modify it under the terms of the GNU General Public License
|
13 |
|
|
* as published by the Free Software Foundation; either version
|
14 |
|
|
* 2 of the License, or (at your option) any later version.
|
15 |
|
|
*
|
16 |
|
|
*
|
17 |
|
|
* net_device_stats:
|
18 |
|
|
* rx_length_errors rec_len < 4 || rec_len > 2000
|
19 |
|
|
* rx_over_errors receive overrun (OVR)
|
20 |
|
|
* rx_crc_errors rx crc error
|
21 |
|
|
* rx_frame_errors aborts rec'd (ABO)
|
22 |
|
|
* rx_fifo_errors status fifo overrun (PBUFOVR)
|
23 |
|
|
* rx_missed_errors receive buffer overrun (BUFOVR)
|
24 |
|
|
* tx_aborted_errors ?
|
25 |
|
|
* tx_carrier_errors modem line status changes
|
26 |
|
|
* tx_fifo_errors tx underrun (locomx)
|
27 |
|
|
*/
|
28 |
|
|
#include <linux/config.h>
|
29 |
|
|
|
30 |
|
|
struct comx_protocol {
|
31 |
|
|
char *name;
|
32 |
|
|
char *version;
|
33 |
|
|
unsigned short encap_type;
|
34 |
|
|
int (*line_init)(struct net_device *dev);
|
35 |
|
|
int (*line_exit)(struct net_device *dev);
|
36 |
|
|
struct comx_protocol *next;
|
37 |
|
|
};
|
38 |
|
|
|
39 |
|
|
struct comx_hardware {
|
40 |
|
|
char *name;
|
41 |
|
|
char *version;
|
42 |
|
|
int (*hw_init)(struct net_device *dev);
|
43 |
|
|
int (*hw_exit)(struct net_device *dev);
|
44 |
|
|
int (*hw_dump)(struct net_device *dev);
|
45 |
|
|
struct comx_hardware *next;
|
46 |
|
|
};
|
47 |
|
|
|
48 |
|
|
struct comx_channel {
|
49 |
|
|
void *if_ptr; // General purpose pointer
|
50 |
|
|
struct net_device *dev; // Where we belong to
|
51 |
|
|
struct net_device *twin; // On dual-port cards
|
52 |
|
|
struct proc_dir_entry *procdir; // the directory
|
53 |
|
|
|
54 |
|
|
unsigned char init_status;
|
55 |
|
|
unsigned char line_status;
|
56 |
|
|
|
57 |
|
|
struct timer_list lineup_timer; // against line jitter
|
58 |
|
|
long int lineup_pending;
|
59 |
|
|
unsigned char lineup_delay;
|
60 |
|
|
|
61 |
|
|
#if 0
|
62 |
|
|
struct timer_list reset_timer; // for board resetting
|
63 |
|
|
long reset_pending;
|
64 |
|
|
int reset_timeout;
|
65 |
|
|
#endif
|
66 |
|
|
|
67 |
|
|
struct net_device_stats stats;
|
68 |
|
|
struct net_device_stats *current_stats;
|
69 |
|
|
#if 0
|
70 |
|
|
unsigned long board_resets;
|
71 |
|
|
#endif
|
72 |
|
|
unsigned long *avg_bytes;
|
73 |
|
|
int loadavg_counter, loadavg_size;
|
74 |
|
|
int loadavg[3];
|
75 |
|
|
struct timer_list loadavg_timer;
|
76 |
|
|
int debug_flags;
|
77 |
|
|
char *debug_area;
|
78 |
|
|
int debug_start, debug_end, debug_size;
|
79 |
|
|
struct proc_dir_entry *debug_file;
|
80 |
|
|
#ifdef CONFIG_COMX_DEBUG_RAW
|
81 |
|
|
char *raw;
|
82 |
|
|
int raw_len;
|
83 |
|
|
#endif
|
84 |
|
|
// LINE specific
|
85 |
|
|
struct comx_protocol *protocol;
|
86 |
|
|
void (*LINE_rx)(struct net_device *dev, struct sk_buff *skb);
|
87 |
|
|
int (*LINE_tx)(struct net_device *dev);
|
88 |
|
|
void (*LINE_status)(struct net_device *dev, u_short status);
|
89 |
|
|
int (*LINE_open)(struct net_device *dev);
|
90 |
|
|
int (*LINE_close)(struct net_device *dev);
|
91 |
|
|
int (*LINE_xmit)(struct sk_buff *skb, struct net_device *dev);
|
92 |
|
|
int (*LINE_header)(struct sk_buff *skb, struct net_device *dev,
|
93 |
|
|
u_short type,void *daddr, void *saddr,
|
94 |
|
|
unsigned len);
|
95 |
|
|
int (*LINE_rebuild_header)(struct sk_buff *skb);
|
96 |
|
|
int (*LINE_statistics)(struct net_device *dev, char *page);
|
97 |
|
|
int (*LINE_parameter_check)(struct net_device *dev);
|
98 |
|
|
int (*LINE_ioctl)(struct net_device *dev, struct ifreq *ifr,
|
99 |
|
|
int cmd);
|
100 |
|
|
void (*LINE_mod_use)(int);
|
101 |
|
|
void * LINE_privdata;
|
102 |
|
|
|
103 |
|
|
// HW specific
|
104 |
|
|
|
105 |
|
|
struct comx_hardware *hardware;
|
106 |
|
|
void (*HW_board_on)(struct net_device *dev);
|
107 |
|
|
void (*HW_board_off)(struct net_device *dev);
|
108 |
|
|
struct net_device *(*HW_access_board)(struct net_device *dev);
|
109 |
|
|
void (*HW_release_board)(struct net_device *dev, struct net_device *savep);
|
110 |
|
|
int (*HW_txe)(struct net_device *dev);
|
111 |
|
|
int (*HW_open)(struct net_device *dev);
|
112 |
|
|
int (*HW_close)(struct net_device *dev);
|
113 |
|
|
int (*HW_send_packet)(struct net_device *dev,struct sk_buff *skb);
|
114 |
|
|
int (*HW_statistics)(struct net_device *dev, char *page);
|
115 |
|
|
#if 0
|
116 |
|
|
int (*HW_reset)(struct net_device *dev, char *page);
|
117 |
|
|
#endif
|
118 |
|
|
int (*HW_load_board)(struct net_device *dev);
|
119 |
|
|
void (*HW_set_clock)(struct net_device *dev);
|
120 |
|
|
void *HW_privdata;
|
121 |
|
|
};
|
122 |
|
|
|
123 |
|
|
struct comx_debugflags_struct {
|
124 |
|
|
char *name;
|
125 |
|
|
int value;
|
126 |
|
|
};
|
127 |
|
|
|
128 |
|
|
#define COMX_ROOT_DIR_NAME "comx"
|
129 |
|
|
|
130 |
|
|
#define FILENAME_HARDWARE "boardtype"
|
131 |
|
|
#define FILENAME_HARDWARELIST "boardtypes"
|
132 |
|
|
#define FILENAME_PROTOCOL "protocol"
|
133 |
|
|
#define FILENAME_PROTOCOLLIST "protocols"
|
134 |
|
|
#define FILENAME_DEBUG "debug"
|
135 |
|
|
#define FILENAME_CLOCK "clock"
|
136 |
|
|
#define FILENAME_STATUS "status"
|
137 |
|
|
#define FILENAME_IO "io"
|
138 |
|
|
#define FILENAME_IRQ "irq"
|
139 |
|
|
#define FILENAME_KEEPALIVE "keepalive"
|
140 |
|
|
#define FILENAME_LINEUPDELAY "lineup_delay"
|
141 |
|
|
#define FILENAME_CHANNEL "channel"
|
142 |
|
|
#define FILENAME_FIRMWARE "firmware"
|
143 |
|
|
#define FILENAME_MEMADDR "memaddr"
|
144 |
|
|
#define FILENAME_TWIN "twin"
|
145 |
|
|
#define FILENAME_T1 "t1"
|
146 |
|
|
#define FILENAME_T2 "t2"
|
147 |
|
|
#define FILENAME_N2 "n2"
|
148 |
|
|
#define FILENAME_WINDOW "window"
|
149 |
|
|
#define FILENAME_MODE "mode"
|
150 |
|
|
#define FILENAME_DLCI "dlci"
|
151 |
|
|
#define FILENAME_MASTER "master"
|
152 |
|
|
#ifdef CONFIG_COMX_DEBUG_RAW
|
153 |
|
|
#define FILENAME_RAW "raw"
|
154 |
|
|
#endif
|
155 |
|
|
|
156 |
|
|
#define PROTONAME_NONE "none"
|
157 |
|
|
#define HWNAME_NONE "none"
|
158 |
|
|
#define KEEPALIVE_OFF "off"
|
159 |
|
|
|
160 |
|
|
#define FRAME_ACCEPTED 0 /* sending and xmitter busy */
|
161 |
|
|
#define FRAME_DROPPED 1
|
162 |
|
|
#define FRAME_ERROR 2 /* xmitter error */
|
163 |
|
|
#define FRAME_QUEUED 3 /* sending but more can come */
|
164 |
|
|
|
165 |
|
|
#define LINE_UP 1 /* Modem UP */
|
166 |
|
|
#define PROTO_UP 2
|
167 |
|
|
#define PROTO_LOOP 4
|
168 |
|
|
|
169 |
|
|
#define HW_OPEN 1
|
170 |
|
|
#define LINE_OPEN 2
|
171 |
|
|
#define FW_LOADED 4
|
172 |
|
|
#define IRQ_ALLOCATED 8
|
173 |
|
|
|
174 |
|
|
#define DEBUG_COMX_RX 2
|
175 |
|
|
#define DEBUG_COMX_TX 4
|
176 |
|
|
#define DEBUG_HW_TX 16
|
177 |
|
|
#define DEBUG_HW_RX 32
|
178 |
|
|
#define DEBUG_HDLC_KEEPALIVE 64
|
179 |
|
|
#define DEBUG_COMX_PPP 128
|
180 |
|
|
#define DEBUG_COMX_LAPB 256
|
181 |
|
|
#define DEBUG_COMX_DLCI 512
|
182 |
|
|
|
183 |
|
|
#define DEBUG_PAGESIZE 3072
|
184 |
|
|
#define DEFAULT_DEBUG_SIZE 4096
|
185 |
|
|
#define DEFAULT_LINEUP_DELAY 1
|
186 |
|
|
#define FILE_PAGESIZE 3072
|
187 |
|
|
|
188 |
|
|
#ifndef COMX_PPP_MAJOR
|
189 |
|
|
#define COMX_PPP_MAJOR 88
|
190 |
|
|
#endif
|
191 |
|
|
|
192 |
|
|
|
193 |
|
|
#define COMX_CHANNEL(dev) ((struct comx_channel*)dev->priv)
|
194 |
|
|
|
195 |
|
|
#define TWIN(dev) (COMX_CHANNEL(dev)->twin)
|
196 |
|
|
|
197 |
|
|
|
198 |
|
|
#ifndef byte
|
199 |
|
|
typedef u8 byte;
|
200 |
|
|
#endif
|
201 |
|
|
#ifndef word
|
202 |
|
|
typedef u16 word;
|
203 |
|
|
#endif
|
204 |
|
|
|
205 |
|
|
#ifndef SEEK_SET
|
206 |
|
|
#define SEEK_SET 0
|
207 |
|
|
#endif
|
208 |
|
|
#ifndef SEEK_CUR
|
209 |
|
|
#define SEEK_CUR 1
|
210 |
|
|
#endif
|
211 |
|
|
#ifndef SEEK_END
|
212 |
|
|
#define SEEK_END 2
|
213 |
|
|
#endif
|
214 |
|
|
|
215 |
|
|
extern struct proc_dir_entry * comx_root_dir;
|
216 |
|
|
|
217 |
|
|
extern int comx_register_hardware(struct comx_hardware *comx_hw);
|
218 |
|
|
extern int comx_unregister_hardware(char *name);
|
219 |
|
|
extern int comx_register_protocol(struct comx_protocol *comx_line);
|
220 |
|
|
extern int comx_unregister_protocol(char *name);
|
221 |
|
|
|
222 |
|
|
extern int comx_rx(struct net_device *dev, struct sk_buff *skb);
|
223 |
|
|
extern void comx_status(struct net_device *dev, int status);
|
224 |
|
|
extern void comx_lineup_func(unsigned long d);
|
225 |
|
|
|
226 |
|
|
extern int comx_debug(struct net_device *dev, char *fmt, ...);
|
227 |
|
|
extern int comx_debug_skb(struct net_device *dev, struct sk_buff *skb, char *msg);
|
228 |
|
|
extern int comx_debug_bytes(struct net_device *dev, unsigned char *bytes, int len,
|
229 |
|
|
char *msg);
|
230 |
|
|
extern int comx_strcasecmp(const char *cs, const char *ct);
|
231 |
|
|
|
232 |
|
|
extern struct inode_operations comx_normal_inode_ops;
|