patch-2.3.36 linux/include/linux/arcdevice.h

Next file: linux/include/linux/com20020.h
Previous file: linux/include/asm-sparc64/string.h
Back to the patch index
Back to the overall index

diff -u --recursive --new-file v2.3.35/linux/include/linux/arcdevice.h linux/include/linux/arcdevice.h
@@ -1,59 +1,35 @@
 /*
- * INET		An implementation of the TCP/IP protocol suite for the LINUX
- *		operating system.  NET  is implemented using the  BSD Socket
- *		interface as the means of communication with the user level.
- *
- *		Definitions for the ARCnet handlers.
- *
- * Version:	$Id: arcdevice.h,v 1.3 1997/11/09 11:05:05 mj Exp $
- *
- * Authors:	Avery Pennarun <apenwarr@bond.net>
- *              David Woodhouse <dwmw2@cam.ac.uk>
- *
- *		This program is free software; you can redistribute it and/or
- *		modify it under the terms of the GNU General Public License
- *		as published by the Free Software Foundation; either version
- *		2 of the License, or (at your option) any later version.
+ * INET         An implementation of the TCP/IP protocol suite for the LINUX
+ *              operating system.  NET  is implemented using the  BSD Socket
+ *              interface as the means of communication with the user level.
+ *
+ *              Definitions used by the ARCnet driver.
+ *
+ * Authors:     Avery Pennarun and David Woodhouse
+ *
+ *              This program is free software; you can redistribute it and/or
+ *              modify it under the terms of the GNU General Public License
+ *              as published by the Free Software Foundation; either version
+ *              2 of the License, or (at your option) any later version.
  *
  */
 #ifndef _LINUX_ARCDEVICE_H
 #define _LINUX_ARCDEVICE_H
 
-#include <linux/config.h>
+#include <asm/timex.h>
 #include <linux/if_arcnet.h>
 
 #ifdef __KERNEL__
 
-#define ARC_20020     1
-#define ARC_RIM_I     2
-#define ARC_90xx      3
-#define ARC_90xx_IO   4
-
-#define MAX_ARCNET_DEVS 8
-
-
-/* The card sends the reconfiguration signal when it loses the connection to
- * the rest of its network. It is a 'Hello, is anybody there?' cry.  This
- * usually happens when a new computer on the network is powered on or when
- * the cable is broken.
- *
- * Define DETECT_RECONFIGS if you want to detect network reconfigurations.
- * Recons may be a real nuisance on a larger ARCnet network; if you are a
- * network administrator you probably would like to count them.
- * Reconfigurations will be recorded in stats.tx_carrier_errors (the last
- * field of the /proc/net/dev file).
- *
- * Define SHOW_RECONFIGS if you really want to see a log message whenever
- * a RECON occurs.
- */
-#define DETECT_RECONFIGS
-#undef SHOW_RECONFIGS
+#ifndef bool
+#define bool int
+#endif
 
 
-/* RECON_THRESHOLD is the maximum number of RECON messages to receive within
- * one minute before printing a "cabling problem" warning.  You must have
- * DETECT_RECONFIGS enabled if you want to use this.  The default value
- * should be fine.
+/*
+ * RECON_THRESHOLD is the maximum number of RECON messages to receive
+ * within one minute before printing a "cabling problem" warning. The
+ * default value should be fine.
  *
  * After that, a "cabling restored" message will be printed on the next IRQ
  * if no RECON messages have been received for 10 seconds.
@@ -63,47 +39,43 @@
 #define RECON_THRESHOLD 30
 
 
-/* Define this to the minimum "timeout" value.  If a transmit takes longer
+/*
+ * Define this to the minimum "timeout" value.  If a transmit takes longer
  * than TX_TIMEOUT jiffies, Linux will abort the TX and retry.  On a large
  * network, or one with heavy network traffic, this timeout may need to be
  * increased.  The larger it is, though, the longer it will be between
- * necessary transmits - don't set this too large.
+ * necessary transmits - don't set this too high.
  */
-#define TX_TIMEOUT (20*HZ/100)
+#define TX_TIMEOUT (HZ * 200 / 1000)
 
 
-/* Display warnings about the driver being an ALPHA version.
- */
+/* Display warnings about the driver being an ALPHA version. */
 #undef ALPHA_WARNING
 
 
-/* New debugging bitflags: each option can be enabled individually.
- *
- * These can be set while the driver is running by typing:
- *	ifconfig arc0 down metric 1xxx HOSTNAME
- *		where 1xxx is 1000 + the debug level you want
- *		and HOSTNAME is your hostname/ip address
- * and then resetting your routes.
- *
- * An ioctl() should be used for this instead, someday.
- *
+/*
+ * Debugging bitflags: each option can be enabled individually.
+ * 
  * Note: only debug flags included in the ARCNET_DEBUG_MAX define will
  *   actually be available.  GCC will (at least, GCC 2.7.0 will) notice
  *   lines using a BUGLVL not in ARCNET_DEBUG_MAX and automatically optimize
  *   them out.
  */
-#define D_NORMAL	1	/* important operational info		*/
-#define D_EXTRA		2	/* useful, but non-vital information	*/
-#define	D_INIT		4	/* show init/probe messages		*/
-#define D_INIT_REASONS	8	/* show reasons for discarding probes	*/
+#define D_NORMAL	1	/* important operational info             */
+#define D_EXTRA		2	/* useful, but non-vital information      */
+#define	D_INIT		4	/* show init/probe messages               */
+#define D_INIT_REASONS	8	/* show reasons for discarding probes     */
+#define D_RECON		32	/* print a message whenever token is lost */
+#define D_PROTO		64	/* debug auto-protocol support            */
 /* debug levels below give LOTS of output during normal operation! */
-#define D_DURING	16	/* trace operations (including irq's)	*/
-#define D_TX		32	/* show tx packets			*/
-#define D_RX		64	/* show rx packets			*/
-#define D_SKB		128	/* show skb's				*/
+#define D_DURING	128	/* trace operations (including irq's)     */
+#define D_TX	        256	/* show tx packets                        */
+#define D_RX		512	/* show rx packets                        */
+#define D_SKB		1024	/* show skb's                             */
+#define D_TIMING	2048	/* show time needed to copy buffers to card */
 
 #ifndef ARCNET_DEBUG_MAX
-#define ARCNET_DEBUG_MAX (~0)		/* enable ALL debug messages	 */
+#define ARCNET_DEBUG_MAX (~0)	/* enable ALL debug messages       */
 #endif
 
 #ifndef ARCNET_DEBUG
@@ -115,240 +87,248 @@
 #define BUGLVL(x) if ((ARCNET_DEBUG_MAX)&arcnet_debug&(x))
 #define BUGMSG2(x,msg,args...) do { BUGLVL(x) printk(msg, ## args); } while (0)
 #define BUGMSG(x,msg,args...) \
-	BUGMSG2(x,"%s%6s: " msg, \
-            x==D_NORMAL	? KERN_WARNING : \
-      x<=D_INIT_REASONS	? KERN_INFO    : KERN_DEBUG , \
-	dev->name , ## args)
-
-
-#define SETMASK AINTMASK(lp->intmask)
-
-	/* Time needed to resetthe card - in jiffies.  This works on my SMC
-	 * PC100.  I can't find a reference that tells me just how long I
-	 * should wait.
-	 */
-#define RESETtime (HZ * 3 / 10)		/* reset */
-
-	/* these are the max/min lengths of packet data. (including
-	 * ClientData header)
-	 * note: packet sizes 250, 251, 252 are impossible (God knows why)
-	 *  so exception packets become necessary.
-	 *
-	 * These numbers are compared with the length of the full packet,
-	 * including ClientData header.
-	 */
-#define MTU	253	/* normal packet max size */
-#define MinTU	257	/* extended packet min size */
-#define XMTU	508	/* extended packet max size */
-
-	/* status/interrupt mask bit fields */
-#define TXFREEflag	0x01            /* transmitter available */
-#define TXACKflag       0x02            /* transmitted msg. ackd */
-#define RECONflag       0x04            /* system reconfigured */
-#define TESTflag        0x08            /* test flag */
-#define RESETflag       0x10            /* power-on-reset */
-#define RES1flag        0x20            /* reserved - usually set by jumper */
-#define RES2flag        0x40            /* reserved - usually set by jumper */
-#define NORXflag        0x80            /* receiver inhibited */
-
-       /* Flags used for IO-mapped memory operations */
-#define AUTOINCflag     0x40    /* Increase location with each access */
-#define IOMAPflag       0x02    /* (for 90xx) Use IO mapped memory, not mmap */
-#define ENABLE16flag    0x80    /* (for 90xx) Enable 16-bit mode */
-
-       /* in the command register, the following bits have these meanings:
-        *                0-2     command
-        *                3-4     page number (for enable rcv/xmt command)
-        *                 7      receive broadcasts
-        */
-#define NOTXcmd         0x01            /* disable transmitter */
-#define NORXcmd         0x02            /* disable receiver */
-#define TXcmd           0x03            /* enable transmitter */
-#define RXcmd           0x04            /* enable receiver */
-#define CONFIGcmd       0x05            /* define configuration */
-#define CFLAGScmd       0x06            /* clear flags */
-#define TESTcmd         0x07            /* load test flags */
-
-       /* flags for "clear flags" command */
-#define RESETclear      0x08            /* power-on-reset */
-#define CONFIGclear     0x10            /* system reconfigured */
-
-	/* flags for "load test flags" command */
-#define TESTload        0x08            /* test flag (diagnostic) */
-
-	/* byte deposited into first address of buffers on reset */
-#define TESTvalue       0321		 /* that's octal for 0xD1 :) */
-
-	/* for "enable receiver" command */
-#define RXbcasts        0x80            /* receive broadcasts */
-
-	/* flags for "define configuration" command */
-#define NORMALconf      0x00            /* 1-249 byte packets */
-#define EXTconf         0x08            /* 250-504 byte packets */
-
-	/* Starts receiving packets into recbuf.
-	 */
-#define EnableReceiver()	ACOMMAND(RXcmd|(recbuf<<3)|RXbcasts)
+	BUGMSG2(x, "%s%6s: " msg, \
+            x==D_NORMAL	? KERN_WARNING \
+            		: x < D_DURING ? KERN_INFO : KERN_DEBUG, \
+	    dev->name , ## args)
+
+/* see how long a function call takes to run, expressed in CPU cycles */
+#define TIME(name, bytes, call) BUGLVL(D_TIMING) { \
+	    cycles_t _x, _y; \
+	    _x = get_cycles(); \
+	    call; \
+	    _y = get_cycles(); \
+	    BUGMSG(D_TIMING, \
+	       "%s: %d bytes in %lu cycles == " \
+	       "%lu Kbytes/100Mcycle\n",\
+		   name, bytes, _y - _x, \
+		   100000000 / 1024 * bytes / (_y - _x + 1));\
+	} \
+	else { \
+		    call;\
+	}
+
+
+/*
+ * Time needed to reset the card - in ms (milliseconds).  This works on my
+ * SMC PC100.  I can't find a reference that tells me just how long I
+ * should wait.
+ */
+#define RESETtime (300)
 
+/*
+ * These are the max/min lengths of packet payload, not including the
+ * arc_hardware header, but definitely including the soft header.
+ *
+ * Note: packet sizes 254, 255, 256 are impossible because of the way
+ * ARCnet registers work  That's why RFC1201 defines "exception" packets.
+ * In non-RFC1201 protocols, we have to just tack some extra bytes on the
+ * end.
+ */
+#define MTU	253		/* normal packet max size */
+#define MinTU	257		/* extended packet min size */
+#define XMTU	508		/* extended packet max size */
+
+/* status/interrupt mask bit fields */
+#define TXFREEflag	0x01	/* transmitter available */
+#define TXACKflag       0x02	/* transmitted msg. ackd */
+#define RECONflag       0x04	/* network reconfigured */
+#define TESTflag        0x08	/* test flag */
+#define RESETflag       0x10	/* power-on-reset */
+#define RES1flag        0x20	/* reserved - usually set by jumper */
+#define RES2flag        0x40	/* reserved - usually set by jumper */
+#define NORXflag        0x80	/* receiver inhibited */
+
+/* Flags used for IO-mapped memory operations */
+#define AUTOINCflag     0x40	/* Increase location with each access */
+#define IOMAPflag       0x02	/* (for 90xx) Use IO mapped memory, not mmap */
+#define ENABLE16flag    0x80	/* (for 90xx) Enable 16-bit mode */
+
+/* in the command register, the following bits have these meanings:
+ *                0-2     command
+ *                3-4     page number (for enable rcv/xmt command)
+ *                 7      receive broadcasts
+ */
+#define NOTXcmd         0x01	/* disable transmitter */
+#define NORXcmd         0x02	/* disable receiver */
+#define TXcmd           0x03	/* enable transmitter */
+#define RXcmd           0x04	/* enable receiver */
+#define CONFIGcmd       0x05	/* define configuration */
+#define CFLAGScmd       0x06	/* clear flags */
+#define TESTcmd         0x07	/* load test flags */
+
+/* flags for "clear flags" command */
+#define RESETclear      0x08	/* power-on-reset */
+#define CONFIGclear     0x10	/* system reconfigured */
+
+/* flags for "load test flags" command */
+#define TESTload        0x08	/* test flag (diagnostic) */
+
+/* byte deposited into first address of buffers on reset */
+#define TESTvalue       0321	/* that's octal for 0xD1 :) */
+
+/* for "enable receiver" command */
+#define RXbcasts        0x80	/* receive broadcasts */
+
+/* flags for "define configuration" command */
+#define NORMALconf      0x00	/* 1-249 byte packets */
+#define EXTconf         0x08	/* 250-504 byte packets */
+
+
+/* information needed to define an encapsulation driver */
+struct ArcProto {
+	char suffix;		/* a for RFC1201, e for ether-encap, etc. */
+	int mtu;		/* largest possible packet */
+
+	void (*rx) (struct net_device * dev, int bufnum,
+		    struct archdr * pkthdr, int length);
+	int (*build_header) (struct sk_buff * skb, unsigned short ethproto,
+			     uint8_t daddr);
+
+	/* these functions return '1' if the skb can now be freed */
+	int (*prepare_tx) (struct net_device * dev, struct archdr * pkt, int length,
+			   int bufnum);
+	int (*continue_tx) (struct net_device * dev, int bufnum);
+};
 
+extern struct ArcProto *arc_proto_map[256], *arc_proto_default, *arc_bcast_proto;
+extern struct ArcProto arc_proto_null;
 
-#define JIFFER(time) for (delayval=jiffies+time; time_before(jiffies,delayval);) ;
 
-	/* a complete ARCnet packet */
-union ArcPacket
-{
-	struct archdr hardheader;	/* the hardware header */
-	u_char raw[512];		/* raw packet info, incl ClientData */
+/*
+ * "Incoming" is information needed for each address that could be sending
+ * to us.  Mostly for partially-received split packets.
+ */
+struct Incoming {
+	struct sk_buff *skb;	/* packet data buffer             */
+	uint16_t sequence;	/* sequence number of assembly    */
+	uint8_t lastpacket,	/* number of last packet (from 1) */
+		numpackets;	/* number of packets in split     */
 };
 
 
-	/* the "client data" header - RFC1201 information
-	 * notice that this screws up if it's not an even number of bytes
-	 * <sigh>
-	 */
-struct ClientData
-{
-	/* data that's NOT part of real packet - we MUST get rid of it before
-	 * actually sending!!
-	 */
-	u_char  saddr,		/* Source address - needed for IPX */
-		daddr;		/* Destination address */
-
-	/* data that IS part of real packet */
-	u_char	protocol_id,	/* ARC_P_IP, ARC_P_ARP, etc */
-		split_flag;	/* for use with split packets */
-	u_short	sequence;	/* sequence number */
+/* only needed for RFC1201 */
+struct Outgoing {
+	struct ArcProto *proto;	/* protocol driver that owns this:
+				 *   if NULL, no packet is pending.
+				 */
+	struct sk_buff *skb;	/* buffer from upper levels */
+	struct archdr *pkt;	/* a pointer into the skb */
+	uint16_t length,	/* bytes total */
+		dataleft,	/* bytes left */
+		segnum,		/* segment being sent */
+		numsegs;	/* number of segments */
 };
-#define EXTRA_CLIENTDATA (sizeof(struct ClientData)-4)
 
 
-	/* the "client data" header - RFC1051 information
-	 * this also screws up if it's not an even number of bytes
-	 * <sigh again>
-	 */
-struct S_ClientData
-{
-	/* data that's NOT part of real packet - we MUST get rid of it before
-	 * actually sending!!
-	 */
-	u_char  saddr,		/* Source address - needed for IPX */
-		daddr,		/* Destination address */
-		junk;		/* padding to make an even length */
-
-	/* data that IS part of real packet */
-	u_char	protocol_id;	/* ARC_P_IP, ARC_P_ARP, etc */
-};
-#define S_EXTRA_CLIENTDATA (sizeof(struct S_ClientData)-1)
+struct arcnet_local {
+	struct net_device_stats stats;
 
+	uint8_t config,		/* current value of CONFIG register */
+		timeout,	/* Extended timeout for COM20020 */
+		backplane,	/* Backplane flag for COM20020 */
+		clock,		/* COM20020 clock speed flag */
+		setup,		/* Contents of setup register */
+		intmask;	/* current value of INTMASK register */
+	uint8_t default_proto[256];	/* default encap to use for each host */
+	int cur_tx,		/* buffer used by current transmit, or -1 */
+		next_tx,	/* buffer where a packet is ready to send */
+		cur_rx;		/* current receive buffer */
+	int lastload_dest,	/* can last loaded packet be acked? */
+		lasttrans_dest;	/* can last TX'd packet be acked? */
+	int basename_len;	/* name length without suffix ('arc0e' -> 4) */
+
+	/*
+	 * Buffer management: an ARCnet card has 4 x 512-byte buffers, each of
+	 * which can be used for either sending or receiving.  The new dynamic
+	 * buffer management routines use a simple circular queue of available
+	 * buffers, and take them as they're needed.  This way, we simplify
+	 * situations in which we (for example) want to pre-load a transmit
+	 * buffer, or start receiving while we copy a received packet to
+	 * memory.
+	 * 
+	 * The rules: only the interrupt handler is allowed to _add_ buffers to
+	 * the queue; thus, this doesn't require a lock.  Both the interrupt
+	 * handler and the transmit function will want to _remove_ buffers, so
+	 * we need to handle the situation where they try to do it at the same
+	 * time.
+	 * 
+	 * If next_buf == first_free_buf, the queue is empty.  Since there are
+	 * only four possible buffers, the queue should never be full.
+	 */
+	atomic_t buf_lock;
+	int buf_queue[5];
+	int next_buf, first_free_buf;
+
+	/* network "reconfiguration" handling */
+	time_t first_recon,	/* time of "first" RECON message to count */
+		last_recon;	/* time of most recent RECON */
+	int num_recons;		/* number of RECONs between first and last. */
+	bool network_down;	/* do we think the network is down? */
+
+	struct {
+		uint16_t sequence;	/* sequence number (incs with each packet) */
+		uint16_t aborted_seq;
+
+		struct Incoming incoming[256];	/* one from each address */
+	} rfc1201;
+
+	/* really only used by rfc1201, but we'll pretend it's not */
+	struct Outgoing outgoing;	/* packet currently being sent */
+
+	/* hardware-specific functions */
+	struct {
+		void (*command) (struct net_device * dev, int cmd);
+		int (*status) (struct net_device * dev);
+		void (*intmask) (struct net_device * dev, int mask);
+		bool (*reset) (struct net_device * dev, bool really_reset);
+		void (*open_close) (struct net_device * dev, bool open);
+		void (*open_close_ll) (struct net_device * dev, bool open);
+
+		void (*copy_to_card) (struct net_device * dev, int bufnum, int offset,
+				      void *buf, int count);
+		void (*copy_from_card) (struct net_device * dev, int bufnum, int offset,
+					void *buf, int count);
+	} hw;
 
-/* "Incoming" is information needed for each address that could be sending
- * to us.  Mostly for partially-received split packets.
- */
-struct Incoming
-{
-	struct sk_buff *skb;		/* packet data buffer             */
-	unsigned char lastpacket,	/* number of last packet (from 1) */
-		      numpackets;	/* number of packets in split     */
-	u_short sequence;		/* sequence number of assembly	  */
+	void *mem_start;	/* pointer to ioremap'ed MMIO */
 };
 
-struct Outgoing
-{
-	struct sk_buff *skb;		/* buffer from upper levels */
-	struct ClientData *hdr;		/* clientdata of last packet */
-	u_char *data;			/* pointer to data in packet */
-	short length,			/* bytes total */
-	      dataleft,			/* bytes left */
-	      segnum,			/* segment being sent */
-	      numsegs,			/* number of segments */
-	      seglen;			/* length of segment */
-};
 
+#define ARCRESET(x)  (lp->hw.reset(dev, (x)))
+#define ACOMMAND(x)  (lp->hw.command(dev, (x)))
+#define ASTATUS()    (lp->hw.status(dev))
+#define AINTMASK(x)  (lp->hw.intmask(dev, (x)))
+#define ARCOPEN(x)   (lp->hw.open_close(dev, (x)))
 
-struct arcnet_local {
-  struct net_device_stats stats;
-  u_short sequence;	/* sequence number (incs with each packet) */
-  u_short aborted_seq;
-  u_char stationid,	/* our 8-bit station address */
-    recbuf,		/* receive buffer # (0 or 1) */
-    txbuf,		/* transmit buffer # (2 or 3) */
-    txready,		/* buffer where a packet is ready to send */
-    config,		/* current value of CONFIG register */
-    timeout,		/* Extended timeout for COM20020 */
-    backplane,		/* Backplane flag for COM20020 */     
-    setup,		/* Contents of setup register */
-    intmask;		/* current value of INTMASK register */
-  short intx,		/* in TX routine? */
-    in_txhandler,	/* in TX_IRQ handler? */
-    sending,		/* transmit in progress? */
-    lastload_dest,	/* can last loaded packet be acked? */
-    lasttrans_dest;	/* can last TX'd packet be acked? */
-  
-#if defined(DETECT_RECONFIGS) && defined(RECON_THRESHOLD)
-  time_t first_recon,	/* time of "first" RECON message to count */
-    last_recon;		/* time of most recent RECON */
-  int num_recons,	/* number of RECONs between first and last. */
-    network_down;	/* do we think the network is down? */
-#endif
-  
-  struct timer_list timer; /* the timer interrupt struct */
-  struct Incoming incoming[256];	/* one from each address */
-  struct Outgoing outgoing; /* packet currently being sent */
-  
-  int card_type;
-  char *card_type_str;
-  
-  void (*inthandler) (struct net_device *dev);
-  int (*arcnet_reset) (struct net_device *dev, int reset_delay);
-  void (*asetmask) (struct net_device *dev, u_char mask);
-  void (*acommand) (struct net_device *dev, u_char command);
-  u_char (*astatus) (struct net_device *dev);
-  void (*en_dis_able_TX) (struct net_device *dev, int enable); 
-  void (*prepare_tx)(struct net_device *dev,u_char *hdr,int hdrlen,
-		     char *data,int length,int daddr,int exceptA, int offset);
-  void (*openclose_device)(int open);  
-  
-  struct net_device *adev;	/* RFC1201 protocol device */
-  
-  /* These are last to ensure that the chipset drivers don't depend on the
-   * CONFIG_ARCNET_ETH and CONFIG_ARCNET_1051 options. 
-   */
-  
-#ifdef CONFIG_ARCNET_ETH
-  struct net_device *edev;	/* Ethernet-Encap device */
-#endif
-  
-#ifdef CONFIG_ARCNET_1051
-  struct net_device *sdev;	/* RFC1051 protocol device */
-#endif
-};
 
-/* Functions exported by arcnet.c
- */
 
 #if ARCNET_DEBUG_MAX & D_SKB
-extern void arcnet_dump_skb(struct net_device *dev,struct sk_buff *skb,
-			    char *desc);
+void arcnet_dump_skb(struct net_device *dev, struct sk_buff *skb, char *desc);
 #else
 #define arcnet_dump_skb(dev,skb,desc) ;
 #endif
 
 #if (ARCNET_DEBUG_MAX & D_RX) || (ARCNET_DEBUG_MAX & D_TX)
-extern void arcnet_dump_packet(struct net_device *dev,u_char *buffer,int ext,
-			       char *desc);
+void arcnet_dump_packet(struct net_device *dev, int bufnum, char *desc);
 #else
-#define arcnet_dump_packet(dev,buffer,ext,desc) ;
+#define arcnet_dump_packet(dev, bufnum, desc) ;
 #endif
 
-extern void arcnet_tx_done(struct net_device *dev, struct arcnet_local *lp);
-extern void arcnet_makename(char *device);
-extern void arcnet_interrupt(int irq,void *dev_id,struct pt_regs *regs);
-extern void arcnet_setup(struct net_device *dev);
-extern int arcnet_go_tx(struct net_device *dev,int enable_irq);
-extern void arcnetA_continue_tx(struct net_device *dev);
-extern void arcnet_rx(struct arcnet_local *lp, u_char *arcsoft, short length, int saddr, int daddr);
-extern void arcnet_use_count(int open);
+void arcnet_unregister_proto(struct ArcProto *proto);
+void arcnet_interrupt(int irq, void *dev_id, struct pt_regs *regs);
+void arcdev_setup(struct net_device *dev);
+void arcnet_rx(struct net_device *dev, int bufnum);
+
+void arcnet_init(void);
+
+void arcnet_rfc1201_init(void);
+void arcnet_rfc1051_init(void);
+void arcnet_raw_init(void);
+
+int com90xx_probe(struct net_device *dev);
+void com20020pci_probe_all(void);
 
+#endif				/* __KERNEL__ */
 
-#endif  /* __KERNEL__ */
-#endif	/* _LINUX_ARCDEVICE_H */
+#endif				/* _LINUX_ARCDEVICE_H */

FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)