xref: /minix3/minix/drivers/net/rtl8139/rtl8139.h (revision f7df02e7476731c31f12548e38bcadbaf0233f6a)
1 /*
2 ibm/rtl8139.h
3 
4 Created:	Aug 2003 by Philip Homburg <philip@cs.vu.nl>
5 */
6 
7 #include <minix/drivers.h>
8 #include <minix/netdriver.h>
9 #include <machine/pci.h>
10 #include <minix/ds.h>
11 #include <assert.h>
12 
13 #define	RL_IDR		0x00	/* Ethernet address
14 				 * Note: RL_9346CR_EEM_CONFIG mode is
15 				 * required the change the ethernet
16 				 * address.
17 				 * Note: 4-byte write access only.
18 				 */
19 #define		RL_N_TX		4	/* Number of transmit buffers */
20 #define	RL_TSD0	0x010	/* Transmit Status of Descriptor 0 */
21 #define		RL_TSD_CRS	0x80000000 /* Carrier Sense Lost */
22 #define		RL_TSD_TABT	0x40000000 /* Transmit Abort */
23 #define		RL_TSD_OWC	0x20000000 /* Out of Window Collision */
24 #define		RL_TSD_CDH	0x10000000 /* CD Heart Beat */
25 #define		RL_TSD_NCC_M	0x0F000000 /* Number of Collision Count */
26 #define		RL_TSD_RES	0x00C00000 /* Reserved */
27 #define		RL_TSD_ERTXTH_M	0x003F0000 /* Early Tx Threshold */
28 #define			RL_TSD_ERTXTH_S		16		/* shift */
29 #define			RL_TSD_ERTXTH_8		0x00000000	/* 8 bytes */
30 #define		RL_TSD_TOK	0x00008000 /* Transmit OK */
31 #define		RL_TSD_TUN	0x00004000 /* Transmit FIFO Underrun */
32 #define		RL_TSD_OWN	0x00002000 /* Controller (does not) Own Buf. */
33 #define		RL_TSD_SIZE	0x00001FFF /* Descriptor Size */
34 #define RL_TSAD0	0x20	/* Transmit Start Address of Descriptor 0 */
35 #define RL_RBSTART	0x30	/* Receive Buffer Start Address */
36 #define	RL_CR		0x37	/* Command Register */
37 #define		RL_CR_RES0	0xE0	/* Reserved */
38 #define		RL_CR_RST	0x10	/* Reset */
39 #define		RL_CR_RE	0x08	/* Receiver Enable */
40 #define		RL_CR_TE	0x04	/* Transmitter Enable *
41 					 * Note: start with transmit buffer
42 					 * 0 after RL_CR_TE has been reset.
43 					 */
44 #define		RL_CR_RES1	0x02	/* Reserved */
45 #define		RL_CR_BUFE	0x01	/* Receive Buffer Empty */
46 #define	RL_CAPR		0x38	/* Current Address of Packet Read */
47 #define		RL_CAPR_DATA_OFF	0x10	/* Packet Starts at Offset */
48 #define	RL_CBR		0x3A	/* Current Buffer Address */
49 #define	RL_IMR		0x3C	/* Interrupt Mask Register */
50 #define		RL_IMR_SERR	0x8000	/* System Error */
51 #define		RL_IMR_TIMEOUT	0x4000	/* Time Out */
52 #define		RL_IMR_LENCHG	0x2000	/* Cable Length Change */
53 #define		RL_IMR_RES	0x1F80	/* Reserved */
54 #define		RL_IMR_FOVW	0x0040	/* Rx FIFO Overflow */
55 #define		RL_IMR_PUN	0x0020	/* Packet Underrun / Link Change */
56 #define		RL_IMR_RXOVW	0x0010	/* Rx Buffer Overflow */
57 #define		RL_IMR_TER	0x0008	/* Transmit Error */
58 #define		RL_IMR_TOK	0x0004	/* Transmit OK */
59 #define		RL_IMR_RER	0x0002	/* Receive Error */
60 #define		RL_IMR_ROK	0x0001	/* Receive OK */
61 #define	RL_ISR		0x3E	/* Interrupt Status Register */
62 #define		RL_ISR_SERR	0x8000	/* System Error */
63 #define		RL_ISR_TIMEOUT	0x4000	/* Time Out */
64 #define		RL_ISR_LENCHG	0x2000	/* Cable Length Change */
65 #define		RL_ISR_RES	0x1F80	/* Reserved */
66 #define		RL_ISR_FOVW	0x0040	/* Rx FIFO Overflow */
67 #define		RL_ISR_PUN	0x0020	/* Packet Underrun / Link Change */
68 #define		RL_ISR_RXOVW	0x0010	/* Rx Buffer Overflow */
69 #define		RL_ISR_TER	0x0008	/* Transmit Error */
70 #define		RL_ISR_TOK	0x0004	/* Transmit OK */
71 #define		RL_ISR_RER	0x0002	/* Receive Error */
72 #define		RL_ISR_ROK	0x0001	/* Receive OK */
73 #define	RL_TCR		0x40	/* Transmit Configuration Register
74 				 * Note: RL_CR_TE has to be set to
75 				 * set/change RL_TCR.
76 				 */
77 #define		RL_TCR_RES0	0x80000000 /* Reserved */
78 #define		RL_TCR_HWVER_AM 0x7C000000 /* Hardware Version ID A */
79 #define		RL_TCR_IFG_M	0x03000000 /* Interframe Gap Time */
80 #define			RL_TCR_IFG_STD		0x03000000 /* IEEE 802.3 std */
81 #if 0
82 #undef RL_TCR_IFG_STD
83 #define			RL_TCR_IFG_STD		0x00000000
84 #endif
85 #define		RL_TCR_HWVER_BM	0x00C00000 /* Hardware Version ID B */
86 #define			RL_TCR_HWVER_RTL8139	0x60000000 /* RTL8139 */
87 #define			RL_TCR_HWVER_RTL8139A	0x70000000 /* RTL8139A */
88 #define			RL_TCR_HWVER_RTL8139AG	0x74000000 /* RTL8139A-G */
89 #define			RL_TCR_HWVER_RTL8139B	0x78000000 /* RTL8139B */
90 #define			RL_TCR_HWVER_RTL8130	0x78000000 /* RTL8130 (dup) */
91 #define			RL_TCR_HWVER_RTL8139C	0x74000000 /* RTL8139C (dup) */
92 #define			RL_TCR_HWVER_RTL8100	0x78800000 /* RTL8100 */
93 #define			RL_TCR_HWVER_RTL8100B	0x74400000 /* RTL8100B /
94 								RTL8139D */
95 #define			RL_TCR_HWVER_RTL8139CP	0x74800000 /* RTL8139C+ */
96 #define			RL_TCR_HWVER_RTL8101	0x74C00000 /* RTL8101 */
97 #define		RL_TCR_RES1	0x00380000 /* Reserved */
98 #define		RL_TCR_LBK_M	0x00060000 /* Loopback Test */
99 #define			RL_TCR_LBK_NORMAL	0x00000000 /* Normal */
100 #define			RL_TCR_LBK_LOOKBOCK	0x00060000 /* Loopback Mode */
101 #define		RL_TCR_CRC	0x00010000 /* (Do not) Append CRC */
102 #define		RL_TCR_RES2	0x0000F800 /* Reserved */
103 #define		RL_TCR_MXDMA_M	0x00000700 /* Max DMA Burst Size Tx */
104 #define			RL_TCR_MXDMA_16		0x00000000 /* 16 bytes */
105 #define			RL_TCR_MXDMA_32		0x00000100 /* 32 bytes */
106 #define			RL_TCR_MXDMA_64		0x00000200 /* 64 bytes */
107 #define			RL_TCR_MXDMA_128	0x00000300 /* 128 bytes */
108 #define			RL_TCR_MXDMA_128	0x00000300 /* 128 bytes */
109 #define			RL_TCR_MXDMA_256	0x00000400 /* 256 bytes */
110 #define			RL_TCR_MXDMA_512	0x00000500 /* 512 bytes */
111 #define			RL_TCR_MXDMA_1024	0x00000600 /* 1024 bytes */
112 #define			RL_TCR_MXDMA_2048	0x00000700 /* 2048 bytes */
113 #define		RL_TCR_TXRR_M	0x000000F0 /* Tx Retry Count */
114 #define		RL_TCR_RES3	0x0000000E /* Reserved */
115 #define		RL_TCR_CLRABT	0x00000001 /* Clear Abort */
116 #define RL_RCR		0x44	/* Receive Configuration Register
117 				 * Note: RL_CR_RE has to be set to
118 				 * set/change RL_RCR.
119 				 */
120 #define		RL_RCR_RES0	0xF0000000 /* Reserved */
121 #define		RL_RCR_ERTH_M	0x0F000000 /* Early Rx Threshold */
122 #define			RL_RCR_ERTH_0		0x00000000 /* No threshold */
123 #define			RL_RCR_ERTH_1		0x01000000 /* 1/16 */
124 #define			RL_RCR_ERTH_2		0x02000000 /* 2/16 */
125 #define			RL_RCR_ERTH_3		0x03000000 /* 3/16 */
126 #define			RL_RCR_ERTH_4		0x04000000 /* 4/16 */
127 #define			RL_RCR_ERTH_5		0x05000000 /* 5/16 */
128 #define			RL_RCR_ERTH_6		0x06000000 /* 6/16 */
129 #define			RL_RCR_ERTH_7		0x07000000 /* 7/16 */
130 #define			RL_RCR_ERTH_8		0x08000000 /* 8/16 */
131 #define			RL_RCR_ERTH_9		0x09000000 /* 9/16 */
132 #define			RL_RCR_ERTH_10		0x0A000000 /* 10/16 */
133 #define			RL_RCR_ERTH_11		0x0B000000 /* 11/16 */
134 #define			RL_RCR_ERTH_12		0x0C000000 /* 12/16 */
135 #define			RL_RCR_ERTH_13		0x0D000000 /* 13/16 */
136 #define			RL_RCR_ERTH_14		0x0E000000 /* 14/16 */
137 #define			RL_RCR_ERTH_15		0x0F000000 /* 15/16 */
138 #define		RL_RCR_RES1	0x00FC0000 /* Reserved */
139 #define		RL_RCR_MULERINT	0x00020000 /* Multiple Early Int Select */
140 #define		RL_RCR_RER8	0x00010000 /* Receive small error packet */
141 #define		RL_RCR_RXFTH_M	0x0000E000 /* Rx FIFO Threshold */
142 #define			RL_RCR_RXFTH_16		0x00000000 /* 16 bytes */
143 #define			RL_RCR_RXFTH_32		0x00002000 /* 32 bytes */
144 #define			RL_RCR_RXFTH_64		0x00004000 /* 64 bytes */
145 #define			RL_RCR_RXFTH_128	0x00006000 /* 128 bytes */
146 #define			RL_RCR_RXFTH_256	0x00008000 /* 256 bytes */
147 #define			RL_RCR_RXFTH_512	0x0000A000 /* 512 bytes */
148 #define			RL_RCR_RXFTH_1024	0x0000C000 /* 1024 bytes */
149 #define			RL_RCR_RXFTH_UNLIM	0x0000E000 /* unlimited */
150 #define		RL_RCR_RBLEM_M	0x00001800 /* Rx Buffer Length */
151 #define			RL_RCR_RBLEN_8K		0x00000000 /* 8KB + 16 bytes */
152 #define			RL_RCR_RBLEN_8K_SIZE	(8*1024)
153 #define			RL_RCR_RBLEN_16K	0x00000800 /* 16KB + 16 bytes */
154 #define			RL_RCR_RBLEN_16K_SIZE	(16*1024)
155 #define			RL_RCR_RBLEN_32K	0x00001000 /* 32KB + 16 bytes */
156 #define			RL_RCR_RBLEN_32K_SIZE	(32*1024)
157 #define			RL_RCR_RBLEN_64K	0x00001800 /* 64KB + 16 bytes */
158 #define			RL_RCR_RBLEN_64K_SIZE	(64*1024)
159 			/* Note: the documentation for the RTL8139C(L) or
160 			 * for the RTL8139D(L) claims that the buffer should
161 			 * be 16 bytes larger. Multiples of 8KB are the
162 			 * correct values.
163 			 */
164 #define		RL_RCR_MXDMA_M	0x00000700 /* Rx DMA burst size */
165 #define			RL_RCR_MXDMA_16		0x00000000 /* 16 bytes */
166 #define			RL_RCR_MXDMA_32		0x00000100 /* 32 bytes */
167 #define			RL_RCR_MXDMA_64		0x00000200 /* 64 bytes */
168 #define			RL_RCR_MXDMA_128	0x00000300 /* 128 bytes */
169 #define			RL_RCR_MXDMA_256	0x00000400 /* 256 bytes */
170 #define			RL_RCR_MXDMA_512	0x00000500 /* 512 bytes */
171 #define			RL_RCR_MXDMA_1024	0x00000600 /* 1024 bytes */
172 #define			RL_RCR_MXDMA_UNLIM	0x00000700 /* unlimited */
173 #define		RL_RCR_WRAP	0x00000080 /* (Do not) Wrap on receive */
174 #define		RL_RCR_RES2	0x00000040 /* EEPROM type? */
175 #define		RL_RCR_AER	0x00000020 /* Accept Error Packets */
176 #define		RL_RCR_AR	0x00000010 /* Accept Runt Packets */
177 #define		RL_RCR_AB	0x00000008 /* Accept Broadcast Packets */
178 #define		RL_RCR_AM	0x00000004 /* Accept Multicast Packets */
179 #define		RL_RCR_APM	0x00000002 /* Accept Physical Match Packets */
180 #define		RL_RCR_AAP	0x00000001 /* Accept All Packets */
181 #define	RL_MPC		0x4c	/* Missed Packet Counter */
182 #define	RL_9346CR	0x50	/* 93C46 Command Register */
183 #define		RL_9346CR_EEM_M	0xC0	/* Operating Mode */
184 #define			RL_9346CR_EEM_NORMAL	0x00 /* Normal Mode */
185 #define			RL_9346CR_EEM_AUTOLOAD	0x40 /* Load from 93C46 */
186 #define			RL_9346CR_EEM_PROG	0x80 /* 93C46 Programming */
187 #define			RL_9346CR_EEM_CONFIG	0xC0 /* Config Write Enable */
188 #define		RL_9346CR_RES	0x30	/* Reserved */
189 #define		RL_9346CR_EECS	0x08	/* EECS Pin */
190 #define		RL_9346CR_EESK	0x04	/* EESK Pin */
191 #define		RL_9346CR_EEDI	0x02	/* EEDI Pin */
192 #define		RL_9346CR_EEDO	0x01	/* EEDO Pin */
193 #define RL_CONFIG0	0x51	/* Configuration Register 0 */
194 #define RL_CONFIG1	0x52	/* Configuration Register 1 */
195 #define RL_MSR		0x58	/* Media Status Register */
196 #define		RL_MSR_TXFCE	0x80	/* Tx Flow Control Enable */
197 #define		RL_MSR_RXFCE	0x40	/* Rx Flow Control Enable */
198 #define		RL_MSR_RES	0x20	/* Reserved */
199 #define		RL_MSR_AUXSTAT	0x10	/* Aux. Power Present */
200 #define		RL_MSR_SPEED_10	0x08	/* In 10 Mbps mode */
201 #define		RL_MSR_LINKB	0x04	/* link Failed */
202 #define		RL_MSR_TXPF	0x02	/* Sent Pause Packet */
203 #define		RL_MSR_RXPF	0x01	/* Received Pause Packet */
204 #define RL_CONFIG3	0x59	/* Configuration Register 3 */
205 #define RL_CONFIG4	0x5A	/* Configuration Register 4 */
206 /*			0x5B */	/* Reserved */
207 #define RL_REVID	0x5E	/* PCI Revision ID */
208 /*			0x5F */	/* Reserved */
209 #define RL_TSAD		0x60	/* Transmit Status of All Descriptors */
210 #define		RL_TSAD_TOK3	0x8000	/* TOK bit of Descriptor 3 */
211 #define		RL_TSAD_TOK2	0x4000	/* TOK bit of Descriptor 2 */
212 #define		RL_TSAD_TOK1	0x2000	/* TOK bit of Descriptor 1 */
213 #define		RL_TSAD_TOK0	0x1000	/* TOK bit of Descriptor 0 */
214 #define		RL_TSAD_TUN3	0x0800	/* TUN bit of Descriptor 3 */
215 #define		RL_TSAD_TUN2	0x0400	/* TUN bit of Descriptor 2 */
216 #define		RL_TSAD_TUN1	0x0200	/* TUN bit of Descriptor 1 */
217 #define		RL_TSAD_TUN0	0x0100	/* TUN bit of Descriptor 0 */
218 #define		RL_TSAD_TABT3	0x0080	/* TABT bit of Descriptor 3 */
219 #define		RL_TSAD_TABT2	0x0040	/* TABT bit of Descriptor 2 */
220 #define		RL_TSAD_TABT1	0x0020	/* TABT bit of Descriptor 1 */
221 #define		RL_TSAD_TABT0	0x0010	/* TABT bit of Descriptor 0 */
222 #define		RL_TSAD_OWN3	0x0008	/* OWN bit of Descriptor 3 */
223 #define		RL_TSAD_OWN2	0x0004	/* OWN bit of Descriptor 2 */
224 #define		RL_TSAD_OWN1	0x0002	/* OWN bit of Descriptor 1 */
225 #define		RL_TSAD_OWN0	0x0001	/* OWN bit of Descriptor 0 */
226 #define RL_BMCR		0x62	/* Basic Mode Control Register (MII_CTRL) */
227 #define RL_BMSR		0x64	/* Basic Mode Status Register (MII_STATUS) */
228 #define	RL_ANAR		0x66	/* Auto-Neg Advertisement Register (MII_ANA) */
229 #define	RL_ANLPAR	0x68	/* Auto-Neg Link Partner Register (MII_ANLPA) */
230 #define	RL_ANER		0x6a	/* Auto-Neg Expansion Register (MII_ANE) */
231 #define	RL_NWAYTR	0x70	/* N-way Test Register */
232 #define	RL_CSCR		0x74	/* CS Configuration Register */
233 #define RL_CONFIG5	0xD8	/* Configuration Register 5 */
234 
235 /* Status word in receive buffer */
236 #define RL_RXS_LEN_M	0xFFFF0000	/* Length Field, Excl. Status word */
237 #define RL_RXS_LEN_S	16		/* Shift For Length */
238 #define RL_RXS_MAR	0x00008000	/* Multicast Address Received */
239 #define RL_RXS_PAR	0x00004000	/* Physical Address Matched */
240 #define RL_RXS_BAR	0x00002000	/* Broadcast Address Received */
241 #define RL_RXS_RES_M	0x00001FC0	/* Reserved */
242 #define RL_RXS_ISE	0x00000020	/* Invalid Symbol Error */
243 #define RL_RXS_RUNT	0x00000010	/* Runt Packet Received */
244 #define RL_RXS_LONG	0x00000008	/* Long (>4KB) Packet */
245 #define RL_RXS_CRC	0x00000004	/* CRC Error */
246 #define RL_RXS_FAE	0x00000002	/* Frame Alignment Error */
247 #define RL_RXS_ROK	0x00000001	/* Receive OK */
248 
249 /* Registers in the Machine Independent Interface (MII) to the PHY.
250  * IEEE 802.3 (2000 Edition) Clause 22.
251  */
252 #define MII_CTRL	0x0	/* Control Register (basic) */
253 #define		MII_CTRL_RST	0x8000	/* Reset PHY */
254 #define		MII_CTRL_LB	0x4000	/* Enable Loopback Mode */
255 #define		MII_CTRL_SP_LSB	0x2000	/* Speed Selection (LSB) */
256 #define		MII_CTRL_ANE	0x1000	/* Auto Negotiation Enable */
257 #define		MII_CTRL_PD	0x0800	/* Power Down */
258 #define		MII_CTRL_ISO	0x0400	/* Isolate */
259 #define		MII_CTRL_RAN	0x0200	/* Restart Auto-Negotiation Process */
260 #define		MII_CTRL_DM	0x0100	/* Full Duplex */
261 #define		MII_CTRL_CT	0x0080	/* Enable COL Signal Test */
262 #define		MII_CTRL_SP_MSB	0x0040	/* Speed Selection (MSB) */
263 #define			MII_CTRL_SP_10		0x0000	/* 10 Mb/s */
264 #define			MII_CTRL_SP_100		0x2000	/* 100 Mb/s */
265 #define			MII_CTRL_SP_1000	0x0040	/* 1000 Mb/s */
266 #define			MII_CTRL_SP_RES		0x2040	/* Reserved */
267 #define		MII_CTRL_RES	0x003F	/* Reserved */
268 #define MII_STATUS	0x1	/* Status Register (basic) */
269 #define		MII_STATUS_100T4	0x8000	/* 100Base-T4 support */
270 #define		MII_STATUS_100XFD	0x4000	/* 100Base-X FD support */
271 #define		MII_STATUS_100XHD	0x2000	/* 100Base-X HD support */
272 #define		MII_STATUS_10FD		0x1000	/* 10 Mb/s FD support */
273 #define		MII_STATUS_10HD		0x0800	/* 10 Mb/s HD support */
274 #define		MII_STATUS_100T2FD	0x0400	/* 100Base-T2 FD support */
275 #define		MII_STATUS_100T2HD	0x0200	/* 100Base-T2 HD support */
276 #define		MII_STATUS_EXT_STAT	0x0100	/* Supports MII_EXT_STATUS */
277 #define		MII_STATUS_RES		0x0080	/* Reserved */
278 #define		MII_STATUS_MFPS		0x0040	/* MF Preamble Suppression */
279 #define		MII_STATUS_ANC		0x0020	/* Auto-Negotiation Completed */
280 #define		MII_STATUS_RF		0x0010	/* Remote Fault Detected */
281 #define		MII_STATUS_ANA		0x0008	/* Auto-Negotiation Ability */
282 #define		MII_STATUS_LS		0x0004	/* Link Up */
283 #define		MII_STATUS_JD		0x0002	/* Jabber Condition Detected */
284 #define		MII_STATUS_EC		0x0001	/* Ext Register Capabilities */
285 #define MII_PHYID_H	0x2	/* PHY ID (high) */
286 #define MII_PHYID_L	0x3	/* PHY ID (low) */
287 #define MII_ANA		0x4	/* Auto-Negotiation Advertisement */
288 #define		MII_ANA_NP	0x8000	/* Next PAge */
289 #define		MII_ANA_RES	0x4000	/* Reserved */
290 #define		MII_ANA_RF	0x2000	/* Remote Fault */
291 #define		MII_ANA_TAF_M	0x1FE0	 /* Technology Ability Field */
292 #define		MII_ANA_TAF_S	5	 /* Shift */
293 #define			MII_ANA_TAF_RES		0x1000	/* Reserved */
294 #define			MII_ANA_PAUSE_ASYM	0x0800	/* Asym. Pause */
295 #define			MII_ANA_PAUSE_SYM	0x0400	/* Sym. Pause */
296 #define			MII_ANA_100T4		0x0200	/* 100Base-T4 */
297 #define			MII_ANA_100TXFD		0x0100	/* 100Base-TX FD */
298 #define			MII_ANA_100TXHD		0x0080	/* 100Base-TX HD */
299 #define			MII_ANA_10TFD		0x0040	/* 10Base-T FD */
300 #define			MII_ANA_10THD		0x0020	/* 10Base-T HD */
301 #define		MII_ANA_SEL_M	0x001F	 /* Selector Field */
302 #define			MII_ANA_SEL_802_3 0x0001 /* 802.3 */
303 #define MII_ANLPA	0x5	/* Auto-Neg Link Partner Ability Register */
304 #define		MII_ANLPA_NP	0x8000	/* Next Page */
305 #define		MII_ANLPA_ACK	0x4000	/* Acknowledge */
306 #define		MII_ANLPA_RF	0x2000	/* Remote Fault */
307 #define		MII_ANLPA_TAF_M	0x1FC0	 /* Technology Ability Field */
308 #define		MII_ANLPA_SEL_M	0x001F	 /* Selector Field */
309 #define MII_ANE		0x6	/* Auto-Negotiation Expansion */
310 #define		MII_ANE_RES	0xFFE0	/* Reserved */
311 #define		MII_ANE_PDF	0x0010	/* Parallel Detection Fault */
312 #define		MII_ANE_LPNPA	0x0008	/* Link Partner is Next Page Able */
313 #define		MII_ANE_NPA	0x0002	/* Local Device is Next Page Able */
314 #define		MII_ANE_PR	0x0002	/* New Page has been received */
315 #define		MII_ANE_LPANA	0x0001	/* Link Partner is Auto-Neg.able */
316 #define MII_ANNPT	0x7	/* Auto-Negotiation Next Page Transmit */
317 #define MII_ANLPRNP	0x8	/* Auto-Neg Link Partner Received Next Page */
318 #define MII_MS_CTRL	0x9	/* MASTER-SLAVE Control Register */
319 #define MII_MS_STATUS	0xA	/* MASTER-SLAVE Status Register */
320 /* 0xB ... 0xE */		/* Reserved */
321 #define MII_EXT_STATUS	0xF	/* Extended Status */
322 #define		MII_ESTAT_1000XFD	0x8000	/* 1000Base-X Full Duplex */
323 #define		MII_ESTAT_1000XHD	0x4000	/* 1000Base-X Half Duplex */
324 #define		MII_ESTAT_1000TFD	0x2000	/* 1000Base-T Full Duplex */
325 #define		MII_ESTAT_1000THD	0x1000	/* 1000Base-T Half Duplex */
326 #define		MII_ESTAT_RES		0x0FFF	/* Reserved */
327 /* 0x10 ... 0x1F */		/* Vendor Specific */
328 
329 #if 0
330 34-35	R	ERBCR		Early Receive (Rx) Byte Count Register
331 36	R	ERSR		Early Rx Status Register
332 	7-4			reserved
333 	3	R	ERGood	Early Rx Good packet
334 	2	R	ERBad	Early Rx Bad packet
335 	1	R	EROVW	Early Rx OverWrite
336 	0	R	EROK	Early Rx OK
337 51	R/W	CONFIG0		Configuration Register 0
338 	7	R	SCR	Scrambler Mode
339 	6	R	PCS	PCS Mode
340 	5	R	T10	10 Mbps Mode
341 	4-3	R	PL[1-0]	Select 10 Mbps medium type
342 	2-0	R	BS[2-0]	Select Boot ROM size
343 52	R/W	CONFIG1		Configuration Register 1
344 	7-6	R/W	LEDS[1-0] LED PIN
345 	5	R/W	DVRLOAD	Driver Load
346 	4	R/W	LWACT	LWAKE active mode
347 	3	R	MEMMAP	Memory Mapping
348 	2	R	IOMAP	I/O Mapping
349 	1	R/W	VPD	Set to enable Vital Product Data
350 	0	R/W	PMEn	Power Management Enable
351 59	R/W	CONFIG3		Configuration Register 3
352 	7	R	GNTSel	Gnt Select
353 	6	R/W	PARM_En	Parameter Enable
354 	5	R/W	Magic	Magic Packet
355 	4	R/W	LinkUp	Link Up
356 	3			reserved
357 	2	R	CLKRUN_En CLKRUN Enable
358 	1			reserved
359 	0	R	FBtBEn	Fast Back to Back Enable
360 5a	R/W	CONFIG4		Configuration Register 4
361 	7	R/W	RxFIFOAutoClr Auto Clear the Rx FIFO on overflow
362 	6	R/W	AnaOff	Analog Power Off
363 	5	R/W	LongWF	Long Wake-up Frame
364 	4	R/W	LWPME	LANWAKE vs PMEB
365 	3			reserved
366 	2	R/W	LWPTN	LWAKE pattern
367 	1			reserved
368 	0	R/W	PBWakeup Pre-Boot Wakeup
369 5c-5d	R/W	MULINT		Multiple Interrupt Select
370 	15-12			reserved
371 	11-0	R/W	MISR[11-0] Multiple Interrupt Select
372 68-69	R	ANLPAR		Auto-Negotiation Link Partnet Register
373 	15	R	NP	Next Page bit
374 	14	R	ACK	acknowledge received from link partner
375 	13	R/W	RF	received remote fault detection capability
376 	12-11			reserved
377 	10	R	Pause	Flow control is supported
378 	9	R	T4	100Base-T4 is supported
379 	8	R/W	TXFD	100Base-TX full duplex is supported
380 	7	R/W	TX	100Base-TX is supported
381 	6	R/W	10FD	10Base-T full duplex is supported
382 	5	R/W	10	10Base-T is supported
383 	4-0	R/W	Selector Binary encoded selector
384 6a-6b	R	ANER		Auto-Negotiation Expansion Register
385 	15-5			reserved
386 	4	R	MLF	Multiple link fault occured
387 	3	R	LP_NP_ABLE Link partner supports Next Page
388 	2	R	NP_ABLE	Local node is able to send add. Next Pages
389 	1	R	PAGE_RX	Link Code Word Page received
390 	0	R	LP_NW_ABLE Link partner supports NWay auto-negotiation
391 70-71	R/W	NWAYTR		N-way Test Register
392 	15-8			reserved
393 	7	R/W	NWLPBK	NWay loopback mode
394 	6-4			reserved
395 	3	R	ENNWLE	LED0 pin indicates linkpulse
396 	2	R	FLAGABD	Auto-neg experienced ability detect state
397 	1	R	FLAGPDF	Auto-neg exp. par. detection fault state
398 	0	R	FLAGLSC	Auto-neg experienced link status check state
399 74-75	R/W	CSCR		CS Configuration Register
400 	15	W	Testfun	Auto-neg speeds up internal timer
401 	14-10			reserved
402 	9	R/W	LD	Active low TPI link disable signal
403 	8	R/W	HEARTBEAT HEART BEAT enable
404 	7	R/W	JBEN	Enable jabber function
405 	6	R/W	F_LINK_100 Force 100 Mbps
406 	5	R/W	F_Conect Bypass disconnect function
407 	4			reserved
408 	3	R	Con_status Connected link detected
409 	2	R/W	Con_status_En Configures LED1 to indicate conn. stat.
410 	1			reserved
411 	0	R/W	PASS_SCR Bypass scramble
412 76-77				reserved
413 78-7b	R/W	PHY1_PARM	PHY parameter 1
414 7c-7f	R/W	TW_PARM		Twister parameter
415 80	R/W	PHY2_PARM	PHY parameter 2
416 81-83				reserved
417 84-8b	R/W	CRC[0-7]	Power Management CRC reg.[0-7] for frame[0-7]
418 8c-cb	R/W	Wakeup[0-7]	Power Management wakeup frame[0-7] (64 bit)
419 cc-d3	R/W	LSBCRC[0-7]	LSB of the mask byte of makeup frame[0-7]
420 d4-d7				reserved
421 d8	R/W	Config5		Configuration register 5
422 	7			reserved
423 	6	R/W	BWF	Broadcast Wakeup Frame
424 	5	R/W	MWF	Multicast Wakeup Frame
425 	4	R/W	UWF	Unicast Wakeup Frame
426 	3	R/W	FifoAddrPtr FIFO Address Pointer
427 	2	R/W	LDPS	Link Down Power Saving mode
428 	1	R/W	LANWake	LANWake Signal
429 	0	R/W	PME_STS	PME_Status bit
430 d9-ff				reserved
431 #endif
432 
433 #define vm_1phys2bus(p)		(p)
434 
435 #define RX_BUFSIZE	RL_RCR_RBLEN_64K_SIZE
436 #define RX_BUFBITS	RL_RCR_RBLEN_64K
437 #define N_TX_BUF	RL_N_TX
438 
439 /* Configuration */
440 #define RL_ENVVAR	"RTLETH"
441 
442 typedef struct re
443 {
444 	port_t re_base_port;
445 	int re_irq;
446 	int re_mode;
447 	int re_link_up;
448 	int re_got_int;
449 	int re_send_int;
450 	int re_report_link;
451 	int re_clear_rx;
452 	int re_need_reset;
453 	int re_tx_alive;
454 	int re_tx_busy;
455 	const char *re_model;
456 
457 	/* Rx */
458 	phys_bytes re_rx_buf;
459 	char  *v_re_rx_buf;
460 
461 	/* Tx */
462 	int re_tx_head;
463 	int re_tx_tail;
464 	struct
465 	{
466 		int ret_busy;
467 		phys_bytes ret_buf;
468 		char * v_ret_buf;
469 	} re_tx[N_TX_BUF];
470 	u32_t re_ertxth;	/* Early Tx Threshold */
471 
472 	int re_hook_id;			/* IRQ hook id at kernel */
473 } re_t;
474 
475 /*
476  * $PchId: rtl8139.h,v 1.1 2003/09/05 10:58:50 philip Exp $
477  */
478