diff options
Diffstat (limited to 'drivers/net/ethernet/seeq/ether3.h')
| -rw-r--r-- | drivers/net/ethernet/seeq/ether3.h | 176 | 
1 files changed, 176 insertions, 0 deletions
diff --git a/drivers/net/ethernet/seeq/ether3.h b/drivers/net/ethernet/seeq/ether3.h new file mode 100644 index 00000000000..2db63b08bdf --- /dev/null +++ b/drivers/net/ethernet/seeq/ether3.h @@ -0,0 +1,176 @@ +/* + *  linux/drivers/acorn/net/ether3.h + * + *  Copyright (C) 1995-2000 Russell King + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + *  network driver for Acorn/ANT Ether3 cards + */ + +#ifndef _LINUX_ether3_H +#define _LINUX_ether3_H + +/* use 0 for production, 1 for verification, >2 for debug. debug flags: */ +#define DEBUG_TX	 2 +#define DEBUG_RX	 4 +#define DEBUG_INT	 8 +#define DEBUG_IC	16 +#ifndef NET_DEBUG +#define NET_DEBUG 	0 +#endif + +#define priv(dev)	((struct dev_priv *)netdev_priv(dev)) + +/* Command register definitions & bits */ +#define REG_COMMAND		(priv(dev)->seeq + 0x0000) +#define CMD_ENINTDMA		0x0001 +#define CMD_ENINTRX		0x0002 +#define CMD_ENINTTX		0x0004 +#define CMD_ENINTBUFWIN		0x0008 +#define CMD_ACKINTDMA		0x0010 +#define CMD_ACKINTRX		0x0020 +#define CMD_ACKINTTX		0x0040 +#define CMD_ACKINTBUFWIN	0x0080 +#define CMD_DMAON		0x0100 +#define CMD_RXON		0x0200 +#define CMD_TXON		0x0400 +#define CMD_DMAOFF		0x0800 +#define CMD_RXOFF		0x1000 +#define CMD_TXOFF		0x2000 +#define CMD_FIFOREAD		0x4000 +#define CMD_FIFOWRITE		0x8000 + +/* status register */ +#define REG_STATUS		(priv(dev)->seeq + 0x0000) +#define STAT_ENINTSTAT		0x0001 +#define STAT_ENINTRX		0x0002 +#define STAT_ENINTTX		0x0004 +#define STAT_ENINTBUFWIN	0x0008 +#define STAT_INTDMA		0x0010 +#define STAT_INTRX		0x0020 +#define STAT_INTTX		0x0040 +#define STAT_INTBUFWIN		0x0080 +#define STAT_DMAON		0x0100 +#define STAT_RXON		0x0200 +#define STAT_TXON		0x0400 +#define STAT_FIFOFULL		0x2000 +#define STAT_FIFOEMPTY		0x4000 +#define STAT_FIFODIR		0x8000 + +/* configuration register 1 */ +#define REG_CONFIG1		(priv(dev)->seeq + 0x0040) +#define CFG1_BUFSELSTAT0	0x0000 +#define CFG1_BUFSELSTAT1	0x0001 +#define CFG1_BUFSELSTAT2	0x0002 +#define CFG1_BUFSELSTAT3	0x0003 +#define CFG1_BUFSELSTAT4	0x0004 +#define CFG1_BUFSELSTAT5	0x0005 +#define CFG1_ADDRPROM		0x0006 +#define CFG1_TRANSEND		0x0007 +#define CFG1_LOCBUFMEM		0x0008 +#define CFG1_INTVECTOR		0x0009 +#define CFG1_RECVSPECONLY	0x0000 +#define CFG1_RECVSPECBROAD	0x4000 +#define CFG1_RECVSPECBRMULTI	0x8000 +#define CFG1_RECVPROMISC	0xC000 + +/* The following aren't in 8004 */ +#define CFG1_DMABURSTCONT	0x0000 +#define CFG1_DMABURST800NS	0x0010 +#define CFG1_DMABURST1600NS	0x0020 +#define CFG1_DMABURST3200NS	0x0030 +#define CFG1_DMABURST1		0x0000 +#define CFG1_DMABURST4		0x0040 +#define CFG1_DMABURST8		0x0080 +#define CFG1_DMABURST16		0x00C0 +#define CFG1_RECVCOMPSTAT0	0x0100 +#define CFG1_RECVCOMPSTAT1	0x0200 +#define CFG1_RECVCOMPSTAT2	0x0400 +#define CFG1_RECVCOMPSTAT3	0x0800 +#define CFG1_RECVCOMPSTAT4	0x1000 +#define CFG1_RECVCOMPSTAT5	0x2000 + +/* configuration register 2 */ +#define REG_CONFIG2		(priv(dev)->seeq + 0x0080) +#define CFG2_BYTESWAP		0x0001 +#define CFG2_ERRENCRC		0x0008 +#define CFG2_ERRENDRIBBLE	0x0010 +#define CFG2_ERRSHORTFRAME	0x0020 +#define CFG2_SLOTSELECT		0x0040 +#define CFG2_PREAMSELECT	0x0080 +#define CFG2_ADDRLENGTH		0x0100 +#define CFG2_RECVCRC		0x0200 +#define CFG2_XMITNOCRC		0x0400 +#define CFG2_LOOPBACK		0x0800 +#define CFG2_CTRLO		0x1000 +#define CFG2_RESET		0x8000 + +#define REG_RECVEND		(priv(dev)->seeq + 0x00c0) + +#define REG_BUFWIN		(priv(dev)->seeq + 0x0100) + +#define REG_RECVPTR		(priv(dev)->seeq + 0x0140) + +#define REG_TRANSMITPTR		(priv(dev)->seeq + 0x0180) + +#define REG_DMAADDR		(priv(dev)->seeq + 0x01c0) + +/* + * Cards transmit/receive headers + */ +#define TX_NEXT			(0xffff) +#define TXHDR_ENBABBLEINT	(1 << 16) +#define TXHDR_ENCOLLISIONINT	(1 << 17) +#define TXHDR_EN16COLLISION	(1 << 18) +#define TXHDR_ENSUCCESS		(1 << 19) +#define TXHDR_DATAFOLLOWS	(1 << 21) +#define TXHDR_CHAINCONTINUE	(1 << 22) +#define TXHDR_TRANSMIT		(1 << 23) +#define TXSTAT_BABBLED		(1 << 24) +#define TXSTAT_COLLISION	(1 << 25) +#define TXSTAT_16COLLISIONS	(1 << 26) +#define TXSTAT_DONE		(1 << 31) + +#define RX_NEXT			(0xffff) +#define RXHDR_CHAINCONTINUE	(1 << 6) +#define RXHDR_RECEIVE		(1 << 7) +#define RXSTAT_OVERSIZE		(1 << 8) +#define RXSTAT_CRCERROR		(1 << 9) +#define RXSTAT_DRIBBLEERROR	(1 << 10) +#define RXSTAT_SHORTPACKET	(1 << 11) +#define RXSTAT_DONE		(1 << 15) + + +#define TX_START	0x0000 +#define TX_END		0x6000 +#define RX_START	0x6000 +#define RX_LEN		0xA000 +#define RX_END		0x10000 +/* must be a power of 2 and greater than MAX_TX_BUFFERED */ +#define MAX_TXED	16 +#define MAX_TX_BUFFERED	10 + +struct dev_priv { +    void __iomem *base; +    void __iomem *seeq; +    struct { +	unsigned int command; +	unsigned int config1; +	unsigned int config2; +    } regs; +    unsigned char tx_head;		/* buffer nr to insert next packet	 */ +    unsigned char tx_tail;		/* buffer nr of transmitting packet	 */ +    unsigned int rx_head;		/* address to fetch next packet from	 */ +    struct timer_list timer; +    int broken;				/* 0 = ok, 1 = something went wrong	 */ +}; + +struct ether3_data { +	const char name[8]; +	unsigned long base_offset; +}; + +#endif  | 
