This commit was manufactured by cvs2svn to create branch 'vserver'.
[linux-2.6.git] / drivers / net / wan / comx.h
1 /*
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;