1 |
1275 |
phoenix |
/*
|
2 |
|
|
* INET An implementation of the TCP/IP protocol suite for the LINUX
|
3 |
|
|
* operating system. NET is implemented using the BSD Socket
|
4 |
|
|
* interface as the means of communication with the user level.
|
5 |
|
|
*
|
6 |
|
|
* Definitions used by the ARCnet driver.
|
7 |
|
|
*
|
8 |
|
|
* Authors: Avery Pennarun and David Woodhouse
|
9 |
|
|
*
|
10 |
|
|
* This program is free software; you can redistribute it and/or
|
11 |
|
|
* modify it under the terms of the GNU General Public License
|
12 |
|
|
* as published by the Free Software Foundation; either version
|
13 |
|
|
* 2 of the License, or (at your option) any later version.
|
14 |
|
|
*
|
15 |
|
|
*/
|
16 |
|
|
#ifndef _LINUX_ARCDEVICE_H
|
17 |
|
|
#define _LINUX_ARCDEVICE_H
|
18 |
|
|
|
19 |
|
|
#include <asm/timex.h>
|
20 |
|
|
#include <linux/if_arcnet.h>
|
21 |
|
|
|
22 |
|
|
#ifdef __KERNEL__
|
23 |
|
|
|
24 |
|
|
#ifndef bool
|
25 |
|
|
#define bool int
|
26 |
|
|
#endif
|
27 |
|
|
|
28 |
|
|
|
29 |
|
|
/*
|
30 |
|
|
* RECON_THRESHOLD is the maximum number of RECON messages to receive
|
31 |
|
|
* within one minute before printing a "cabling problem" warning. The
|
32 |
|
|
* default value should be fine.
|
33 |
|
|
*
|
34 |
|
|
* After that, a "cabling restored" message will be printed on the next IRQ
|
35 |
|
|
* if no RECON messages have been received for 10 seconds.
|
36 |
|
|
*
|
37 |
|
|
* Do not define RECON_THRESHOLD at all if you want to disable this feature.
|
38 |
|
|
*/
|
39 |
|
|
#define RECON_THRESHOLD 30
|
40 |
|
|
|
41 |
|
|
|
42 |
|
|
/*
|
43 |
|
|
* Define this to the minimum "timeout" value. If a transmit takes longer
|
44 |
|
|
* than TX_TIMEOUT jiffies, Linux will abort the TX and retry. On a large
|
45 |
|
|
* network, or one with heavy network traffic, this timeout may need to be
|
46 |
|
|
* increased. The larger it is, though, the longer it will be between
|
47 |
|
|
* necessary transmits - don't set this too high.
|
48 |
|
|
*/
|
49 |
|
|
#define TX_TIMEOUT (HZ * 200 / 1000)
|
50 |
|
|
|
51 |
|
|
|
52 |
|
|
/* Display warnings about the driver being an ALPHA version. */
|
53 |
|
|
#undef ALPHA_WARNING
|
54 |
|
|
|
55 |
|
|
|
56 |
|
|
/*
|
57 |
|
|
* Debugging bitflags: each option can be enabled individually.
|
58 |
|
|
*
|
59 |
|
|
* Note: only debug flags included in the ARCNET_DEBUG_MAX define will
|
60 |
|
|
* actually be available. GCC will (at least, GCC 2.7.0 will) notice
|
61 |
|
|
* lines using a BUGLVL not in ARCNET_DEBUG_MAX and automatically optimize
|
62 |
|
|
* them out.
|
63 |
|
|
*/
|
64 |
|
|
#define D_NORMAL 1 /* important operational info */
|
65 |
|
|
#define D_EXTRA 2 /* useful, but non-vital information */
|
66 |
|
|
#define D_INIT 4 /* show init/probe messages */
|
67 |
|
|
#define D_INIT_REASONS 8 /* show reasons for discarding probes */
|
68 |
|
|
#define D_RECON 32 /* print a message whenever token is lost */
|
69 |
|
|
#define D_PROTO 64 /* debug auto-protocol support */
|
70 |
|
|
/* debug levels below give LOTS of output during normal operation! */
|
71 |
|
|
#define D_DURING 128 /* trace operations (including irq's) */
|
72 |
|
|
#define D_TX 256 /* show tx packets */
|
73 |
|
|
#define D_RX 512 /* show rx packets */
|
74 |
|
|
#define D_SKB 1024 /* show skb's */
|
75 |
|
|
#define D_SKB_SIZE 2048 /* show skb sizes */
|
76 |
|
|
#define D_TIMING 4096 /* show time needed to copy buffers to card */
|
77 |
|
|
|
78 |
|
|
#ifndef ARCNET_DEBUG_MAX
|
79 |
|
|
#define ARCNET_DEBUG_MAX (127) /* change to ~0 if you want detailed debugging */
|
80 |
|
|
#endif
|
81 |
|
|
|
82 |
|
|
#ifndef ARCNET_DEBUG
|
83 |
|
|
#define ARCNET_DEBUG (D_NORMAL|D_EXTRA)
|
84 |
|
|
#endif
|
85 |
|
|
extern int arcnet_debug;
|
86 |
|
|
|
87 |
|
|
/* macros to simplify debug checking */
|
88 |
|
|
#define BUGLVL(x) if ((ARCNET_DEBUG_MAX)&arcnet_debug&(x))
|
89 |
|
|
#define BUGMSG2(x,msg,args...) do { BUGLVL(x) printk(msg, ## args); } while (0)
|
90 |
|
|
#define BUGMSG(x,msg,args...) \
|
91 |
|
|
BUGMSG2(x, "%s%6s: " msg, \
|
92 |
|
|
x==D_NORMAL ? KERN_WARNING \
|
93 |
|
|
: x < D_DURING ? KERN_INFO : KERN_DEBUG, \
|
94 |
|
|
dev->name , ## args)
|
95 |
|
|
|
96 |
|
|
/* see how long a function call takes to run, expressed in CPU cycles */
|
97 |
|
|
#define TIME(name, bytes, call) BUGLVL(D_TIMING) { \
|
98 |
|
|
unsigned long _x, _y; \
|
99 |
|
|
_x = get_cycles(); \
|
100 |
|
|
call; \
|
101 |
|
|
_y = get_cycles(); \
|
102 |
|
|
BUGMSG(D_TIMING, \
|
103 |
|
|
"%s: %d bytes in %lu cycles == " \
|
104 |
|
|
"%lu Kbytes/100Mcycle\n",\
|
105 |
|
|
name, bytes, _y - _x, \
|
106 |
|
|
100000000 / 1024 * bytes / (_y - _x + 1));\
|
107 |
|
|
} \
|
108 |
|
|
else { \
|
109 |
|
|
call;\
|
110 |
|
|
}
|
111 |
|
|
|
112 |
|
|
|
113 |
|
|
/*
|
114 |
|
|
* Time needed to reset the card - in ms (milliseconds). This works on my
|
115 |
|
|
* SMC PC100. I can't find a reference that tells me just how long I
|
116 |
|
|
* should wait.
|
117 |
|
|
*/
|
118 |
|
|
#define RESETtime (300)
|
119 |
|
|
|
120 |
|
|
/*
|
121 |
|
|
* These are the max/min lengths of packet payload, not including the
|
122 |
|
|
* arc_hardware header, but definitely including the soft header.
|
123 |
|
|
*
|
124 |
|
|
* Note: packet sizes 254, 255, 256 are impossible because of the way
|
125 |
|
|
* ARCnet registers work That's why RFC1201 defines "exception" packets.
|
126 |
|
|
* In non-RFC1201 protocols, we have to just tack some extra bytes on the
|
127 |
|
|
* end.
|
128 |
|
|
*/
|
129 |
|
|
#define MTU 253 /* normal packet max size */
|
130 |
|
|
#define MinTU 257 /* extended packet min size */
|
131 |
|
|
#define XMTU 508 /* extended packet max size */
|
132 |
|
|
|
133 |
|
|
/* status/interrupt mask bit fields */
|
134 |
|
|
#define TXFREEflag 0x01 /* transmitter available */
|
135 |
|
|
#define TXACKflag 0x02 /* transmitted msg. ackd */
|
136 |
|
|
#define RECONflag 0x04 /* network reconfigured */
|
137 |
|
|
#define TESTflag 0x08 /* test flag */
|
138 |
|
|
#define RESETflag 0x10 /* power-on-reset */
|
139 |
|
|
#define RES1flag 0x20 /* reserved - usually set by jumper */
|
140 |
|
|
#define RES2flag 0x40 /* reserved - usually set by jumper */
|
141 |
|
|
#define NORXflag 0x80 /* receiver inhibited */
|
142 |
|
|
|
143 |
|
|
/* Flags used for IO-mapped memory operations */
|
144 |
|
|
#define AUTOINCflag 0x40 /* Increase location with each access */
|
145 |
|
|
#define IOMAPflag 0x02 /* (for 90xx) Use IO mapped memory, not mmap */
|
146 |
|
|
#define ENABLE16flag 0x80 /* (for 90xx) Enable 16-bit mode */
|
147 |
|
|
|
148 |
|
|
/* in the command register, the following bits have these meanings:
|
149 |
|
|
* 0-2 command
|
150 |
|
|
* 3-4 page number (for enable rcv/xmt command)
|
151 |
|
|
* 7 receive broadcasts
|
152 |
|
|
*/
|
153 |
|
|
#define NOTXcmd 0x01 /* disable transmitter */
|
154 |
|
|
#define NORXcmd 0x02 /* disable receiver */
|
155 |
|
|
#define TXcmd 0x03 /* enable transmitter */
|
156 |
|
|
#define RXcmd 0x04 /* enable receiver */
|
157 |
|
|
#define CONFIGcmd 0x05 /* define configuration */
|
158 |
|
|
#define CFLAGScmd 0x06 /* clear flags */
|
159 |
|
|
#define TESTcmd 0x07 /* load test flags */
|
160 |
|
|
|
161 |
|
|
/* flags for "clear flags" command */
|
162 |
|
|
#define RESETclear 0x08 /* power-on-reset */
|
163 |
|
|
#define CONFIGclear 0x10 /* system reconfigured */
|
164 |
|
|
|
165 |
|
|
/* flags for "load test flags" command */
|
166 |
|
|
#define TESTload 0x08 /* test flag (diagnostic) */
|
167 |
|
|
|
168 |
|
|
/* byte deposited into first address of buffers on reset */
|
169 |
|
|
#define TESTvalue 0321 /* that's octal for 0xD1 :) */
|
170 |
|
|
|
171 |
|
|
/* for "enable receiver" command */
|
172 |
|
|
#define RXbcasts 0x80 /* receive broadcasts */
|
173 |
|
|
|
174 |
|
|
/* flags for "define configuration" command */
|
175 |
|
|
#define NORMALconf 0x00 /* 1-249 byte packets */
|
176 |
|
|
#define EXTconf 0x08 /* 250-504 byte packets */
|
177 |
|
|
|
178 |
|
|
/* card feature flags, set during auto-detection.
|
179 |
|
|
* (currently only used by com20020pci)
|
180 |
|
|
*/
|
181 |
|
|
#define ARC_IS_5MBIT 1 /* card default speed is 5MBit */
|
182 |
|
|
#define ARC_CAN_10MBIT 2 /* card uses COM20022, supporting 10MBit,
|
183 |
|
|
but default is 2.5MBit. */
|
184 |
|
|
|
185 |
|
|
|
186 |
|
|
/* information needed to define an encapsulation driver */
|
187 |
|
|
struct ArcProto {
|
188 |
|
|
char suffix; /* a for RFC1201, e for ether-encap, etc. */
|
189 |
|
|
int mtu; /* largest possible packet */
|
190 |
|
|
|
191 |
|
|
void (*rx) (struct net_device * dev, int bufnum,
|
192 |
|
|
struct archdr * pkthdr, int length);
|
193 |
|
|
int (*build_header) (struct sk_buff * skb, struct net_device *dev,
|
194 |
|
|
unsigned short ethproto, uint8_t daddr);
|
195 |
|
|
|
196 |
|
|
/* these functions return '1' if the skb can now be freed */
|
197 |
|
|
int (*prepare_tx) (struct net_device * dev, struct archdr * pkt, int length,
|
198 |
|
|
int bufnum);
|
199 |
|
|
int (*continue_tx) (struct net_device * dev, int bufnum);
|
200 |
|
|
};
|
201 |
|
|
|
202 |
|
|
extern struct ArcProto *arc_proto_map[256], *arc_proto_default, *arc_bcast_proto;
|
203 |
|
|
extern struct ArcProto arc_proto_null;
|
204 |
|
|
|
205 |
|
|
|
206 |
|
|
/*
|
207 |
|
|
* "Incoming" is information needed for each address that could be sending
|
208 |
|
|
* to us. Mostly for partially-received split packets.
|
209 |
|
|
*/
|
210 |
|
|
struct Incoming {
|
211 |
|
|
struct sk_buff *skb; /* packet data buffer */
|
212 |
|
|
uint16_t sequence; /* sequence number of assembly */
|
213 |
|
|
uint8_t lastpacket, /* number of last packet (from 1) */
|
214 |
|
|
numpackets; /* number of packets in split */
|
215 |
|
|
};
|
216 |
|
|
|
217 |
|
|
|
218 |
|
|
/* only needed for RFC1201 */
|
219 |
|
|
struct Outgoing {
|
220 |
|
|
struct ArcProto *proto; /* protocol driver that owns this:
|
221 |
|
|
* if NULL, no packet is pending.
|
222 |
|
|
*/
|
223 |
|
|
struct sk_buff *skb; /* buffer from upper levels */
|
224 |
|
|
struct archdr *pkt; /* a pointer into the skb */
|
225 |
|
|
uint16_t length, /* bytes total */
|
226 |
|
|
dataleft, /* bytes left */
|
227 |
|
|
segnum, /* segment being sent */
|
228 |
|
|
numsegs; /* number of segments */
|
229 |
|
|
};
|
230 |
|
|
|
231 |
|
|
|
232 |
|
|
struct arcnet_local {
|
233 |
|
|
struct net_device_stats stats;
|
234 |
|
|
|
235 |
|
|
uint8_t config, /* current value of CONFIG register */
|
236 |
|
|
timeout, /* Extended timeout for COM20020 */
|
237 |
|
|
backplane, /* Backplane flag for COM20020 */
|
238 |
|
|
clockp, /* COM20020 clock divider */
|
239 |
|
|
clockm, /* COM20020 clock multiplier flag */
|
240 |
|
|
setup, /* Contents of setup1 register */
|
241 |
|
|
setup2, /* Contents of setup2 register */
|
242 |
|
|
intmask; /* current value of INTMASK register */
|
243 |
|
|
uint8_t default_proto[256]; /* default encap to use for each host */
|
244 |
|
|
int cur_tx, /* buffer used by current transmit, or -1 */
|
245 |
|
|
next_tx, /* buffer where a packet is ready to send */
|
246 |
|
|
cur_rx; /* current receive buffer */
|
247 |
|
|
int lastload_dest, /* can last loaded packet be acked? */
|
248 |
|
|
lasttrans_dest; /* can last TX'd packet be acked? */
|
249 |
|
|
int timed_out; /* need to process TX timeout and drop packet */
|
250 |
|
|
unsigned long last_timeout; /* time of last reported timeout */
|
251 |
|
|
char *card_name; /* card ident string */
|
252 |
|
|
int card_flags; /* special card features */
|
253 |
|
|
|
254 |
|
|
/*
|
255 |
|
|
* Buffer management: an ARCnet card has 4 x 512-byte buffers, each of
|
256 |
|
|
* which can be used for either sending or receiving. The new dynamic
|
257 |
|
|
* buffer management routines use a simple circular queue of available
|
258 |
|
|
* buffers, and take them as they're needed. This way, we simplify
|
259 |
|
|
* situations in which we (for example) want to pre-load a transmit
|
260 |
|
|
* buffer, or start receiving while we copy a received packet to
|
261 |
|
|
* memory.
|
262 |
|
|
*
|
263 |
|
|
* The rules: only the interrupt handler is allowed to _add_ buffers to
|
264 |
|
|
* the queue; thus, this doesn't require a lock. Both the interrupt
|
265 |
|
|
* handler and the transmit function will want to _remove_ buffers, so
|
266 |
|
|
* we need to handle the situation where they try to do it at the same
|
267 |
|
|
* time.
|
268 |
|
|
*
|
269 |
|
|
* If next_buf == first_free_buf, the queue is empty. Since there are
|
270 |
|
|
* only four possible buffers, the queue should never be full.
|
271 |
|
|
*/
|
272 |
|
|
atomic_t buf_lock;
|
273 |
|
|
int buf_queue[5];
|
274 |
|
|
int next_buf, first_free_buf;
|
275 |
|
|
|
276 |
|
|
/* network "reconfiguration" handling */
|
277 |
|
|
time_t first_recon, /* time of "first" RECON message to count */
|
278 |
|
|
last_recon; /* time of most recent RECON */
|
279 |
|
|
int num_recons; /* number of RECONs between first and last. */
|
280 |
|
|
bool network_down; /* do we think the network is down? */
|
281 |
|
|
|
282 |
|
|
struct {
|
283 |
|
|
uint16_t sequence; /* sequence number (incs with each packet) */
|
284 |
|
|
uint16_t aborted_seq;
|
285 |
|
|
|
286 |
|
|
struct Incoming incoming[256]; /* one from each address */
|
287 |
|
|
} rfc1201;
|
288 |
|
|
|
289 |
|
|
/* really only used by rfc1201, but we'll pretend it's not */
|
290 |
|
|
struct Outgoing outgoing; /* packet currently being sent */
|
291 |
|
|
|
292 |
|
|
/* hardware-specific functions */
|
293 |
|
|
struct {
|
294 |
|
|
void (*command) (struct net_device * dev, int cmd);
|
295 |
|
|
int (*status) (struct net_device * dev);
|
296 |
|
|
void (*intmask) (struct net_device * dev, int mask);
|
297 |
|
|
bool (*reset) (struct net_device * dev, bool really_reset);
|
298 |
|
|
void (*open_close) (struct net_device * dev, bool open);
|
299 |
|
|
void (*open_close_ll) (struct net_device * dev, bool open);
|
300 |
|
|
|
301 |
|
|
void (*copy_to_card) (struct net_device * dev, int bufnum, int offset,
|
302 |
|
|
void *buf, int count);
|
303 |
|
|
void (*copy_from_card) (struct net_device * dev, int bufnum, int offset,
|
304 |
|
|
void *buf, int count);
|
305 |
|
|
} hw;
|
306 |
|
|
|
307 |
|
|
void *mem_start; /* pointer to ioremap'ed MMIO */
|
308 |
|
|
};
|
309 |
|
|
|
310 |
|
|
|
311 |
|
|
#define ARCRESET(x) (lp->hw.reset(dev, (x)))
|
312 |
|
|
#define ACOMMAND(x) (lp->hw.command(dev, (x)))
|
313 |
|
|
#define ASTATUS() (lp->hw.status(dev))
|
314 |
|
|
#define AINTMASK(x) (lp->hw.intmask(dev, (x)))
|
315 |
|
|
#define ARCOPEN(x) (lp->hw.open_close(dev, (x)))
|
316 |
|
|
|
317 |
|
|
|
318 |
|
|
|
319 |
|
|
#if ARCNET_DEBUG_MAX & D_SKB
|
320 |
|
|
void arcnet_dump_skb(struct net_device *dev, struct sk_buff *skb, char *desc);
|
321 |
|
|
#else
|
322 |
|
|
#define arcnet_dump_skb(dev,skb,desc) ;
|
323 |
|
|
#endif
|
324 |
|
|
|
325 |
|
|
#if (ARCNET_DEBUG_MAX & D_RX) || (ARCNET_DEBUG_MAX & D_TX)
|
326 |
|
|
void arcnet_dump_packet(struct net_device *dev, int bufnum, char *desc);
|
327 |
|
|
#else
|
328 |
|
|
#define arcnet_dump_packet(dev, bufnum, desc) ;
|
329 |
|
|
#endif
|
330 |
|
|
|
331 |
|
|
void arcnet_unregister_proto(struct ArcProto *proto);
|
332 |
|
|
void arcnet_interrupt(int irq, void *dev_id, struct pt_regs *regs);
|
333 |
|
|
void arcdev_setup(struct net_device *dev);
|
334 |
|
|
void arcnet_rx(struct net_device *dev, int bufnum);
|
335 |
|
|
|
336 |
|
|
void arcnet_init(void);
|
337 |
|
|
|
338 |
|
|
void arcnet_rfc1201_init(void);
|
339 |
|
|
void arcnet_rfc1051_init(void);
|
340 |
|
|
void arcnet_raw_init(void);
|
341 |
|
|
|
342 |
|
|
int com90xx_probe(struct net_device *dev);
|
343 |
|
|
|
344 |
|
|
#endif /* __KERNEL__ */
|
345 |
|
|
|
346 |
|
|
#endif /* _LINUX_ARCDEVICE_H */
|