Linux-2.6.12-rc2

Initial git repository build. I'm not bothering with the full history,
even though we have it. We can create a separate "historical" git
archive of that later if we want to, and in the meantime it's about
3.2GB when imported into git - space that would just make the early
git days unnecessarily complicated, when we don't have a lot of good
infrastructure for it.

Let it rip!
diff --git a/drivers/net/dgrs_ether.h b/drivers/net/dgrs_ether.h
new file mode 100644
index 0000000..51596ce
--- /dev/null
+++ b/drivers/net/dgrs_ether.h
@@ -0,0 +1,135 @@
+/*
+ *	A filtering function.  There are two filters/port.  Filter "0"
+ *	is the input filter, and filter "1" is the output filter.
+ */
+typedef int (FILTER_FUNC)(uchar *pktp, int pktlen, ulong *scratch, int port);
+#define	NFILTERS	2
+
+/*
+ *	The per port structure
+ */
+typedef struct
+{
+	int		chan;		/* Channel number (0-3) */
+	ulong		portaddr;	/* address of 596 port register */
+	volatile ulong	*ca;		/* address of 596 chan attention */
+	ulong		intmask;	/* Interrupt mask for this port */
+	ulong		intack;		/* Ack bit for this port */
+
+	uchar		ethaddr[6];	/* Ethernet address of this port */
+	int		is_promisc;	/* Port is promiscuous */
+
+	int		debug;		/* Debugging turned on */
+
+	I596_ISCP	*iscpp;		/* Uncached ISCP pointer */
+	I596_SCP	*scpp;		/* Uncached SCP pointer */
+	I596_SCB	*scbp;		/* Uncached SCB pointer */
+
+	I596_ISCP	iscp;
+	I596_SCB	scb;
+
+	/* Command Queue */
+	I596_CB		*cb0;
+	I596_CB		*cbN;
+	I596_CB		*cb_head;
+	I596_CB		*cb_tail;
+
+	/* Receive Queue */
+	I596_RFD	*rfd0;
+	I596_RFD	*rfdN;
+	I596_RFD	*rfd_head;
+	I596_RFD	*rfd_tail;
+
+	/* Receive Buffers */
+	I596_RBD	*rbd0;
+	I596_RBD	*rbdN;
+	I596_RBD	*rbd_head;
+	I596_RBD	*rbd_tail;
+	int		buf_size;	/* Size of an RBD buffer */
+	int		buf_cnt;	/* Total RBD's allocated */
+
+	/* Rx Statistics */
+	ulong		cnt_rx_cnt;	/* Total packets rcvd, good and bad */ 
+	ulong		cnt_rx_good;	/* Total good packets rcvd */
+	ulong		cnt_rx_bad;	/* Total of all bad packets rcvd */
+					/* Subtotals can be gotten from SCB */
+	ulong		cnt_rx_nores;	/* No resources */
+	ulong		cnt_rx_bytes;	/* Total bytes rcvd */
+
+	/* Tx Statistics */
+	ulong		cnt_tx_queued;
+	ulong		cnt_tx_done;
+	ulong		cnt_tx_freed;
+	ulong		cnt_tx_nores;	/* No resources */
+
+	ulong		cnt_tx_bad;
+	ulong		cnt_tx_err_late;
+	ulong		cnt_tx_err_nocrs;
+	ulong		cnt_tx_err_nocts;
+	ulong		cnt_tx_err_under;
+	ulong		cnt_tx_err_maxcol;
+	ulong		cnt_tx_collisions;
+
+	/* Special stuff for host */
+#	define		rfd_freed	cnt_rx_cnt
+	ulong		rbd_freed;
+	int		host_timer;
+
+	/* Added after first beta */
+	ulong		cnt_tx_races;	/* Counts race conditions */
+	int		spanstate;
+	ulong		cnt_st_tx;	/* send span tree pkts */
+	ulong		cnt_st_fail_tx;	/* Failures to send span tree pkts */
+	ulong		cnt_st_fail_rbd;/* Failures to send span tree pkts */
+	ulong		cnt_st_rx;	/* rcv span tree pkts */
+	ulong		cnt_st_rx_bad;	/* bogus st packets rcvd */
+	ulong		cnt_rx_fwd;	/* Rcvd packets that were forwarded */
+
+	ulong		cnt_rx_mcast;	/* Multicast pkts received */
+	ulong		cnt_tx_mcast;	/* Multicast pkts transmitted */
+	ulong		cnt_tx_bytes;	/* Bytes transmitted */
+
+	/*
+	 *	Packet filtering
+	 *	Filter 0: input filter
+	 *	Filter 1: output filter
+	 */
+	
+	ulong		*filter_space[NFILTERS];
+	FILTER_FUNC	*filter_func[NFILTERS];
+	ulong		filter_cnt[NFILTERS];
+	ulong		filter_len[NFILTERS];
+
+	ulong		pad[ (512-300) / 4];
+} PORT;
+
+/*
+ *	Port[0]			is host interface
+ *	Port[1..SE_NPORTS]	are external 10 Base T ports.  Fewer may be in
+ *				use, depending on whether this is an SE-4 or
+ *				an SE-6.
+ *	Port[SE_NPORTS]		Pseudo-port for Spanning tree and SNMP
+ */
+extern PORT	Port[1+SE_NPORTS+1];
+
+extern int	Nports;		/* Number of genuine ethernet controllers */
+extern int	Nchan;		/* ... plus one for host interface */
+
+extern int	FirstChan;	/* 0 or 1, depedning on whether host is used */
+extern int	NumChan;	/* 4 or 5 */
+
+/*
+ *	A few globals
+ */
+extern int	IsPromisc;
+extern int	MultiNicMode;
+
+/*
+ *	Functions
+ */
+extern void	eth_xmit_spew_on(PORT *p, int cnt);
+extern void	eth_xmit_spew_off(PORT *p);
+
+extern I596_RBD	*alloc_rbds(PORT *p, int num);
+
+extern I596_CB * eth_cb_alloc(PORT *p);