| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | /* | 
|  | 2 | * Racal-Interlan ni5010 Ethernet definitions | 
|  | 3 | * | 
|  | 4 | * This is an extension to the Linux operating system, and is covered by the | 
|  | 5 | * same GNU General Public License that covers that work. | 
|  | 6 | * | 
|  | 7 | * copyrights (c) 1996 by Jan-Pascal van Best (jvbest@wi.leidenuniv.nl) | 
|  | 8 | * | 
|  | 9 | * I have done a look in the following sources: | 
|  | 10 | *   crynwr-packet-driver by Russ Nelson | 
|  | 11 | */ | 
|  | 12 |  | 
|  | 13 | #define NI5010_BUFSIZE	2048	/* number of bytes in a buffer */ | 
|  | 14 |  | 
|  | 15 | #define NI5010_MAGICVAL0 0x00  /* magic-values for ni5010 card */ | 
|  | 16 | #define NI5010_MAGICVAL1 0x55 | 
|  | 17 | #define NI5010_MAGICVAL2 0xAA | 
|  | 18 |  | 
|  | 19 | #define SA_ADDR0 0x02 | 
|  | 20 | #define SA_ADDR1 0x07 | 
|  | 21 | #define SA_ADDR2 0x01 | 
|  | 22 |  | 
|  | 23 | /* The number of low I/O ports used by the ni5010 ethercard. */ | 
|  | 24 | #define NI5010_IO_EXTENT       32 | 
|  | 25 |  | 
|  | 26 | #define PRINTK(x) if (NI5010_DEBUG) printk x | 
|  | 27 | #define PRINTK2(x) if (NI5010_DEBUG>=2) printk x | 
|  | 28 | #define PRINTK3(x) if (NI5010_DEBUG>=3) printk x | 
|  | 29 |  | 
|  | 30 | /* The various IE command registers */ | 
|  | 31 | #define EDLC_XSTAT	(ioaddr + 0x00)	/* EDLC transmit csr */ | 
|  | 32 | #define EDLC_XCLR	(ioaddr + 0x00)	/* EDLC transmit "Clear IRQ" */ | 
|  | 33 | #define EDLC_XMASK	(ioaddr + 0x01)	/* EDLC transmit "IRQ Masks" */ | 
|  | 34 | #define EDLC_RSTAT	(ioaddr + 0x02)	/* EDLC receive csr */ | 
|  | 35 | #define EDLC_RCLR	(ioaddr + 0x02)	/* EDLC receive "Clear IRQ" */ | 
|  | 36 | #define EDLC_RMASK	(ioaddr + 0x03)	/* EDLC receive "IRQ Masks" */ | 
|  | 37 | #define EDLC_XMODE	(ioaddr + 0x04)	/* EDLC transmit Mode */ | 
|  | 38 | #define EDLC_RMODE	(ioaddr + 0x05)	/* EDLC receive Mode */ | 
|  | 39 | #define EDLC_RESET	(ioaddr + 0x06)	/* EDLC RESET register */ | 
|  | 40 | #define EDLC_TDR1	(ioaddr + 0x07)	/* "Time Domain Reflectometry" reg1 */ | 
|  | 41 | #define EDLC_ADDR	(ioaddr + 0x08)	/* EDLC station address, 6 bytes */ | 
|  | 42 | /* 0x0E doesn't exist for r/w */ | 
|  | 43 | #define EDLC_TDR2	(ioaddr + 0x0f)	/* "Time Domain Reflectometry" reg2 */ | 
|  | 44 | #define IE_GP		(ioaddr + 0x10)	/* GP pointer (word register) */ | 
|  | 45 | /* 0x11 is 2nd byte of GP Pointer */ | 
|  | 46 | #define IE_RCNT		(ioaddr + 0x10)	/* Count of bytes in rcv'd packet */ | 
|  | 47 | /* 0x11 is 2nd byte of "Byte Count" */ | 
|  | 48 | #define IE_MMODE	(ioaddr + 0x12)	/* Memory Mode register */ | 
|  | 49 | #define IE_DMA_RST	(ioaddr + 0x13)	/* IE DMA Reset.  write only */ | 
|  | 50 | #define IE_ISTAT	(ioaddr + 0x13)	/* IE Interrupt Status.  read only */ | 
|  | 51 | #define IE_RBUF		(ioaddr + 0x14)	/* IE Receive Buffer port */ | 
|  | 52 | #define IE_XBUF		(ioaddr + 0x15)	/* IE Transmit Buffer port */ | 
|  | 53 | #define IE_SAPROM	(ioaddr + 0x16)	/* window on station addr prom */ | 
|  | 54 | #define IE_RESET	(ioaddr + 0x17)	/* any write causes Board Reset */ | 
|  | 55 |  | 
|  | 56 | /* bits in EDLC_XSTAT, interrupt clear on write, status when read */ | 
|  | 57 | #define XS_TPOK		0x80	/* transmit packet successful */ | 
|  | 58 | #define XS_CS		0x40	/* carrier sense */ | 
|  | 59 | #define XS_RCVD		0x20	/* transmitted packet received */ | 
|  | 60 | #define XS_SHORT	0x10	/* transmission media is shorted */ | 
|  | 61 | #define XS_UFLW		0x08	/* underflow.  iff failed board */ | 
|  | 62 | #define XS_COLL		0x04	/* collision occurred */ | 
|  | 63 | #define XS_16COLL	0x02	/* 16th collision occurred */ | 
|  | 64 | #define XS_PERR		0x01	/* parity error */ | 
|  | 65 |  | 
|  | 66 | #define XS_CLR_UFLW	0x08	/* clear underflow */ | 
|  | 67 | #define XS_CLR_COLL	0x04	/* clear collision */ | 
|  | 68 | #define XS_CLR_16COLL	0x02	/* clear 16th collision */ | 
|  | 69 | #define XS_CLR_PERR	0x01	/* clear parity error */ | 
|  | 70 |  | 
|  | 71 | /* bits in EDLC_XMASK, mask/enable transmit interrupts.  register is r/w */ | 
|  | 72 | #define XM_TPOK		0x80	/* =1 to enable Xmt Pkt OK interrupts */ | 
|  | 73 | #define XM_RCVD		0x20	/* =1 to enable Xmt Pkt Rcvd ints */ | 
|  | 74 | #define XM_UFLW		0x08	/* =1 to enable Xmt Underflow ints */ | 
|  | 75 | #define XM_COLL		0x04	/* =1 to enable Xmt Collision ints */ | 
|  | 76 | #define XM_COLL16	0x02	/* =1 to enable Xmt 16th Coll ints */ | 
|  | 77 | #define XM_PERR		0x01	/* =1 to enable Xmt Parity Error ints */ | 
|  | 78 | /* note: always clear this bit */ | 
|  | 79 | #define XM_ALL		(XM_TPOK | XM_RCVD | XM_UFLW | XM_COLL | XM_COLL16) | 
|  | 80 |  | 
|  | 81 | /* bits in EDLC_RSTAT, interrupt clear on write, status when read */ | 
|  | 82 | #define RS_PKT_OK	0x80	/* received good packet */ | 
|  | 83 | #define RS_RST_PKT	0x10	/* RESET packet received */ | 
|  | 84 | #define RS_RUNT		0x08	/* Runt Pkt rcvd.  Len < 64 Bytes */ | 
|  | 85 | #define RS_ALIGN	0x04	/* Alignment error. not 8 bit aligned */ | 
|  | 86 | #define RS_CRC_ERR	0x02	/* Bad CRC on rcvd pkt */ | 
|  | 87 | #define RS_OFLW		0x01	/* overflow for rcv FIFO */ | 
|  | 88 | #define RS_VALID_BITS	( RS_PKT_OK | RS_RST_PKT | RS_RUNT | RS_ALIGN | RS_CRC_ERR | RS_OFLW ) | 
|  | 89 | /* all valid RSTAT bits */ | 
|  | 90 |  | 
|  | 91 | #define RS_CLR_PKT_OK	0x80	/* clear rcvd packet interrupt */ | 
|  | 92 | #define RS_CLR_RST_PKT	0x10	/* clear RESET packet received */ | 
|  | 93 | #define RS_CLR_RUNT	0x08	/* clear Runt Pckt received */ | 
|  | 94 | #define RS_CLR_ALIGN	0x04	/* clear Alignment error */ | 
|  | 95 | #define RS_CLR_CRC_ERR	0x02	/* clear CRC error */ | 
|  | 96 | #define RS_CLR_OFLW	0x01	/* clear rcv FIFO Overflow */ | 
|  | 97 |  | 
|  | 98 | /* bits in EDLC_RMASK, mask/enable receive interrupts.  register is r/w */ | 
|  | 99 | #define RM_PKT_OK	0x80	/* =1 to enable rcvd good packet ints */ | 
|  | 100 | #define RM_RST_PKT	0x10	/* =1 to enable RESET packet ints */ | 
|  | 101 | #define RM_RUNT		0x08	/* =1 to enable Runt Pkt rcvd ints */ | 
|  | 102 | #define RM_ALIGN	0x04	/* =1 to enable Alignment error ints */ | 
|  | 103 | #define RM_CRC_ERR	0x02	/* =1 to enable Bad CRC error ints */ | 
|  | 104 | #define RM_OFLW		0x01	/* =1 to enable overflow error ints */ | 
|  | 105 |  | 
|  | 106 | /* bits in EDLC_RMODE, set Receive Packet mode.  register is r/w */ | 
|  | 107 | #define RMD_TEST	0x80	/* =1 for Chip testing.  normally 0 */ | 
|  | 108 | #define RMD_ADD_SIZ	0x10	/* =1 5-byte addr match.  normally 0 */ | 
|  | 109 | #define RMD_EN_RUNT	0x08	/* =1 enable runt rcv.  normally 0 */ | 
|  | 110 | #define RMD_EN_RST	0x04	/* =1 to rcv RESET pkt.  normally 0 */ | 
|  | 111 |  | 
|  | 112 | #define RMD_PROMISC	0x03	/* receive *all* packets.  unusual */ | 
|  | 113 | #define RMD_MULTICAST	0x02	/* receive multicasts too.  unusual */ | 
|  | 114 | #define RMD_BROADCAST	0x01	/* receive broadcasts & normal. usual */ | 
|  | 115 | #define RMD_NO_PACKETS	0x00	/* don't receive any packets. unusual */ | 
|  | 116 |  | 
|  | 117 | /* bits in EDLC_XMODE, set Transmit Packet mode.  register is r/w */ | 
|  | 118 | #define XMD_COLL_CNT	0xf0	/* coll's since success.  read-only */ | 
|  | 119 | #define XMD_IG_PAR	0x08	/* =1 to ignore parity.  ALWAYS set */ | 
|  | 120 | #define XMD_T_MODE	0x04	/* =1 to power xcvr. ALWAYS set this */ | 
|  | 121 | #define XMD_LBC		0x02	/* =1 for loopbakc.  normally set */ | 
|  | 122 | #define XMD_DIS_C	0x01	/* =1 disables contention. normally 0 */ | 
|  | 123 |  | 
|  | 124 | /* bits in EDLC_RESET, write only */ | 
|  | 125 | #define RS_RESET	0x80	/* =1 to hold EDLC in reset state */ | 
|  | 126 |  | 
|  | 127 | /* bits in IE_MMODE, write only */ | 
|  | 128 | #define MM_EN_DMA	0x80	/* =1 begin DMA xfer, Cplt clrs it */ | 
|  | 129 | #define MM_EN_RCV	0x40	/* =1 allows Pkt rcv.  clr'd by rcv */ | 
|  | 130 | #define MM_EN_XMT	0x20	/* =1 begin Xmt pkt.  Cplt clrs it */ | 
|  | 131 | #define MM_BUS_PAGE	0x18	/* =00 ALWAYS.  Used when MUX=1 */ | 
|  | 132 | #define MM_NET_PAGE	0x06	/* =00 ALWAYS.  Used when MUX=0 */ | 
|  | 133 | #define MM_MUX		0x01	/* =1 means Rcv Buff on system bus */ | 
|  | 134 | /* =0 means Xmt Buff on system bus */ | 
|  | 135 |  | 
|  | 136 | /* bits in IE_ISTAT, read only */ | 
|  | 137 | #define IS_TDIAG	0x80	/* =1 if Diagnostic problem */ | 
|  | 138 | #define IS_EN_RCV	0x20	/* =1 until frame is rcv'd cplt */ | 
|  | 139 | #define IS_EN_XMT	0x10	/* =1 until frame is xmt'd cplt */ | 
|  | 140 | #define IS_EN_DMA	0x08	/* =1 until DMA is cplt or aborted */ | 
|  | 141 | #define IS_DMA_INT	0x04	/* =0 iff DMA done interrupt. */ | 
|  | 142 | #define IS_R_INT	0x02	/* =0 iff unmasked Rcv interrupt */ | 
|  | 143 | #define IS_X_INT	0x01	/* =0 iff unmasked Xmt interrupt */ | 
|  | 144 |  |