summaryrefslogtreecommitdiff
path: root/minix/drivers/net/dpeth/3c509.h
blob: 75316c5aab9f58ff7ff5fd81c594c00a9a4fa36e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
/*
**  File:	3c509.h		Jun. 01, 2000
**
**  Author:	Giovanni Falzoni <gfalzoni@inwind.it>
**
**  Interface description for 3Com Etherlink III board.
**
**  $Log$
**  Revision 1.1  2005/06/29 10:16:46  beng
**  Import of dpeth 3c501/3c509b/.. ethernet driver by
**  Giovanni Falzoni <fgalzoni@inwind.it>.
**
**  Revision 2.0  2005/06/26 16:16:46  lsodgf0
**  Initial revision for Minix 3.0.6
*/

/* Command codes */
#define	CMD_GlobalReset		0x0000	/* resets adapter (power up status) */
#define	CMD_SelectWindow       (1<<11)	/* select register window */
#define	CMD_StartIntXcvr       (2<<11)	/* start internal transciver */
#define	CMD_RxDisable	       (3<<11)	/* rx disable */
#define	CMD_RxEnable	       (4<<11)	/* rx enable */
#define	CMD_RxReset	       (5<<11)	/* rx reset */
#define	CMD_RxDiscard	       (8<<11)	/* rx discard top packet */
#define	CMD_TxEnable	       (9<<11)	/* tx enable */
#define	CMD_TxDisable	      (10<<11)	/* tx disable */
#define	CMD_TxReset	      (11<<11)	/* tx reset */
#define	CMD_Acknowledge	      (13<<11)	/* acknowledge interrupt */
#define	CMD_SetIntMask	      (14<<11)	/* set interrupt mask */
#define	CMD_SetStatusEnab     (15<<11)	/* set read zero mask */
#define	CMD_SetRxFilter	      (16<<11)	/* set rx filter */
#define	CMD_SetTxAvailable    (18<<11)	/* set tx available threshold */
#define	CMD_StatsEnable	      (21<<11)	/* statistics enable */
#define	CMD_StatsDisable      (22<<11)	/* statistics disable */
#define	CMD_StopIntXcvr	      (23<<11)	/* start internal transciver */

/* Status register bits (INT for interrupt sources, ST for the rest) */
#define	INT_Latch		0x0001	/* interrupt latch */
#define	INT_AdapterFail		0x0002	/* adapter failure */
#define	INT_TxComplete		0x0004	/* tx complete */
#define	INT_TxAvailable		0x0008	/* tx available */
#define	INT_RxComplete	 	0x0010	/* rx complete */
#define	INT_RxEarly		0x0020	/* rx early */
#define	INT_Requested		0x0040	/* interrupt requested */
#define	INT_UpdateStats		0x0080	/* update statistics */

/* Rx Status register bits */
#define	RXS_Error		0x4000	/* error in packet */
#define	RXS_Length		0x07FF	/* bytes in RxFIFO */
#define	RXS_ErrType		0x3800	/* Rx error type, bit 13-11 */
#define	RXS_Overrun		0x0000	/* overrun error */
#define	RXS_Oversize		0x0800	/* oversize packet error */
#define	RXS_Dribble		0x1000	/* dribble bit (not an error) */
#define	RXS_Runt		0x1800	/* runt packet error */
#define	RXS_Framing		0x2000	/* framing error */
#define	RXS_CRC			0x2800	/* CRC error */

/* Tx Status register bits */

/* Window Numbers */
#define	WNO_Setup		0x0000	/* setup/configuration */
#define	WNO_Operating		0x0001	/* operating set */
#define	WNO_StationAddress	0x0002	/* station address setup/read */
#define	WNO_Diagnostics		0x0004	/* diagnostics */
#define	WNO_Statistics		0x0006	/* statistics */

/* Register offsets - Window 1 (WNO_Operating) */
#define	REG_CmdStatus		0x000E	/* command/status */
#define	REG_TxFree		0x000C	/* free transmit bytes */
#define	REG_TxStatus		0x000B	/* transmit status (byte) */
#define	REG_RxStatus		0x0008	/* receive status */
#define	REG_RxFIFO		0x0000	/* RxFIFO read */
#define	REG_TxFIFO		0x0000	/* TxFIFO write */

/* Register offsets - Window 0 (WNO_Setup) */
#define	REG_CfgControl		0x0004	/* configuration control */

/* Register offsets - Window 2 (WNO_StationAddress) */
#define	REG_SA0_1		0x0000	/* station address bytes 0,1 */

/* Register offsets - Window 3 (WNO_FIFO) */

/* Register offsets - Window 4 (WNO_Diagnostics) */
#define	REG_MediaStatus		0x000A	/* media type/status */

/* Register offsets - Window 5 (WNO_Readable) */

/* Register offsets - Window 6 (WNO_Statistics) */
#define	REG_TxBytes		0x000C	/* tx bytes ok */
#define	REG_RxBytes		0x000A	/* rx bytes ok */
#define	REG_TxDefer		0x0008	/* tx frames deferred (byte) */
#define	REG_RxFrames		0x0007	/* rx frames ok (byte) */
#define	REG_TxFrames		0x0006	/* tx frames ok (byte) */
#define	REG_RxDiscarded		0x0005	/* rx frames discarded (byte) */
#define	REG_TxLate		0x0004	/* tx frames late coll. (byte) */
#define	REG_TxSingleColl	0x0003	/* tx frames one coll. (byte) */
#define	REG_TxMultColl		0x0002	/* tx frames mult. coll. (byte) */
#define	REG_TxNoCD		0x0001	/* tx frames no CDheartbt (byte) */
#define	REG_TxCarrierLost	0x0000	/* tx frames carrier lost (byte) */

/* Various command arguments */

#define	FilterIndividual	0x0001	/* individual address */
#define	FilterMulticast		0x0002	/* multicast/group addresses */
#define	FilterBroadcast		0x0004	/* broadcast address */
#define	FilterPromiscuous	0x0008	/* promiscuous mode */

/* Resource Configuration Register bits */
#define	EL3_CONFIG_IRQ_MASK	0xF000

/* Address Configuration Register bits */
#define	EL3_CONFIG_XCVR_MASK	0xC000
#define	EL3_CONFIG_IOBASE_MASK	0x001F

#define	TP_XCVR			0x0000
#define	BNC_XCVR		0xC000
#define	AUI_XCVR		0x4000

#define	EL3_IO_BASE_ADDR	0x200

/* Transmit Preamble */

/* Bits in various diagnostics registers */
#define	MediaLBeatEnable	0x0080	/* link beat enable (TP) */
#define	MediaJabberEnable	0x0040	/* jabber enable (TP) */

/* Board identification codes, byte swapped in Rev 0 */
#define	EL3_3COM_CODE		0x6D50	/* EISA manufacturer code */
#define	EL3_PRODUCT_ID		0x9050	/* Product ID for ISA board */

/* EEProm access */
#define	EE_3COM_NODE_ADDR	0x00
#define	EE_PROD_ID		0x03
#define	EE_MANUFACTURING_DATA	0x04
#define	EE_3COM_CODE		0x07
#define	EE_ADDR_CFG		0x08
#define	EE_RESOURCE_CFG		0x09
#define	EE_SW_CONFIG_INFO	0x0D
#define	EE_PROD_ID_MASK		0xF0FF	/* Mask off revision nibble */

/* Contention logic */
#define	EL3_READ_EEPROM		0x80
#define	EL3_ID_GLOBAL_RESET	0xC0
#define	EL3_SET_TAG_REGISTER	0xD0
#define	EL3_ACTIVATE_AND_SET_IO	0xE0
#define	EL3_ACTIVATE		0xFF

/* Software Configuration Register bits */

/* Configuration Control Register bits */
#define	EL3_EnableAdapter	0x01

/* EL3 access macros */
#define inb_el3(dep,reg) (inb((dep)->de_base_port+(reg)))
#define inw_el3(dep,reg) (inw((dep)->de_base_port+(reg)))
#define outb_el3(dep,reg,data) (outb((dep)->de_base_port+(reg),(data)))
#define outw_el3(dep,reg,data) (outw((dep)->de_base_port+(reg),(data)))

#define SetWindow(win)  \
  outw(dep->de_base_port+REG_CmdStatus,CMD_SelectWindow|(win))

/** 3c509.h **/