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 **/
|