xref: /netbsd-src/sys/dev/pci/if_vtereg.h (revision f523d760b849c1f95771845eeb23de42860eb2b7)
1 /*	$NetBSD: if_vtereg.h,v 1.2 2011/04/28 17:32:48 bouyer Exp $	*/
2 
3 /*-
4  * Copyright (c) 2010, Pyun YongHyeon <yongari@FreeBSD.org>
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice unmodified, this list of conditions, and the following
12  *    disclaimer.
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in the
15  *    documentation and/or other materials provided with the distribution.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27  * SUCH DAMAGE.
28  *
29  * FreeBSD: src/sys/dev/vte/if_vtereg.h,v 1.1 2010/12/31 00:21:41 yongari Exp
30  */
31 
32 #ifndef	_IF_VTEREG_H
33 #define	_IF_VTEREG_H
34 
35 /* registers are mapped in i/o or memory space */
36 #define VTE_PCI_BIO	0x10
37 #define VTE_PCI_BMEM	0x14
38 
39 /* MAC control register 0 */
40 #define	VTE_MCR0			0x00
41 #define	MCR0_ACCPT_ERR			0x0001
42 #define	MCR0_RX_ENB			0x0002
43 #define	MCR0_ACCPT_RUNT			0x0004
44 #define	MCR0_ACCPT_LONG_PKT		0x0008
45 #define	MCR0_ACCPT_DRIBBLE		0x0010
46 #define	MCR0_PROMISC			0x0020
47 #define	MCR0_BROADCAST_DIS		0x0040
48 #define	MCR0_RX_EARLY_INTR		0x0080
49 #define	MCR0_MULTICAST			0x0100
50 #define	MCR0_FC_ENB			0x0200
51 #define	MCR0_TX_ENB			0x1000
52 #define	MCR0_TX_EARLY_INTR		0x4000
53 #define	MCR0_FULL_DUPLEX		0x8000
54 
55 /* MAC control register 1 */
56 #define	VTE_MCR1			0x04
57 #define	MCR1_MAC_RESET			0x0001
58 #define	MCR1_MAC_LOOPBACK		0x0002
59 #define	MCR1_EXCESS_COL_RETRANS_DIS	0x0004
60 #define	MCR1_AUTO_CHG_DUPLEX		0x0008
61 #define	MCR1_PKT_LENGTH_1518		0x0010
62 #define	MCR1_PKT_LENGTH_1522		0x0020
63 #define	MCR1_PKT_LENGTH_1534		0x0030
64 #define	MCR1_PKT_LENGTH_1537		0x0000
65 #define	MCR1_EARLY_INTR_THRESH_1129	0x0000
66 #define	MCR1_EARLY_INTR_THRESH_1257	0x0040
67 #define	MCR1_EARLY_INTR_THRESH_1385	0x0080
68 #define	MCR1_EARLY_INTR_THRESH_1513	0x00C0
69 #define	MCR1_EXCESS_COL_RETRY_16	0x0000
70 #define	MCR1_EXCESS_COL_RETRY_32	0x0100
71 #define	MCR1_FC_ACTIVE			0x0200
72 #define	MCR1_RX_DESC_HASH_IDX		0x4000
73 #define	MCR1_RX_UNICAST_HASH		0x8000
74 
75 #define	MCR1_PKT_LENGTH_MASK		0x0030
76 #define	MCR1_EARLY_INTR_THRESH_MASK	0x00C0
77 
78 /* MAC bus control register */
79 #define	VTE_MBCR			0x08
80 #define	MBCR_FIFO_XFER_LENGTH_4		0x0000
81 #define	MBCR_FIFO_XFER_LENGTH_8		0x0001
82 #define	MBCR_FIFO_XFER_LENGTH_16	0x0002
83 #define	MBCR_FIFO_XFER_LENGTH_32	0x0003
84 #define	MBCR_TX_FIFO_THRESH_16		0x0000
85 #define	MBCR_TX_FIFO_THRESH_32		0x0004
86 #define	MBCR_TX_FIFO_THRESH_64		0x0008
87 #define	MBCR_TX_FIFO_THRESH_96		0x000C
88 #define	MBCR_RX_FIFO_THRESH_8		0x0000
89 #define	MBCR_RX_FIFO_THRESH_16		0x0010
90 #define	MBCR_RX_FIFO_THRESH_32		0x0020
91 #define	MBCR_RX_FIFO_THRESH_64		0x0030
92 #define	MBCR_SDRAM_BUS_REQ_TIMER_MASK	0x1F00
93 #define	MBCR_SDRAM_BUS_REQ_TIMER_SHIFT	8
94 #define	MBCR_SDRAM_BUS_REQ_TIMER_DEFAULT	0x1F00
95 
96 /* MAC TX interrupt control register */
97 #define	VTE_MTICR			0x0C
98 #define	MTICR_TX_TIMER_MASK		0x001F
99 #define	MTICR_TX_BUNDLE_MASK		0x0F00
100 #define	VTE_IM_TX_TIMER_DEFAULT		0x7F
101 #define	VTE_IM_TX_BUNDLE_DEFAULT	15
102 
103 #define	VTE_IM_TIMER_MIN		0
104 #define	VTE_IM_TIMER_MAX		82
105 #define	VTE_IM_TIMER_MASK		0x001F
106 #define	VTE_IM_TIMER_SHIFT		0
107 #define	VTE_IM_BUNDLE_MIN		0
108 #define	VTE_IM_BUNDLE_MAX		15
109 #define	VTE_IM_BUNDLE_SHIFT		8
110 
111 /* MAC RX interrupt control register */
112 #define	VTE_MRICR			0x10
113 #define	MRICR_RX_TIMER_MASK		0x001F
114 #define	MRICR_RX_BUNDLE_MASK		0x0F00
115 #define	VTE_IM_RX_TIMER_DEFAULT		0x7F
116 #define	VTE_IM_RX_BUNDLE_DEFAULT	15
117 
118 /* MAC TX poll command register */
119 #define	VTE_TX_POLL			0x14
120 #define	TX_POLL_START			0x0001
121 
122 /* MAC RX buffer size register */
123 #define	VTE_MRBSR			0x18
124 #define	VTE_MRBSR_SIZE_MASK		0x03FF
125 
126 /* MAC RX descriptor control register */
127 #define	VTE_MRDCR			0x1A
128 #define	VTE_MRDCR_RESIDUE_MASK		0x00FF
129 #define	VTE_MRDCR_RX_PAUSE_THRESH_MASK	0xFF00
130 #define	VTE_MRDCR_RX_PAUSE_THRESH_SHIFT	8
131 
132 /* MAC Last status register */
133 #define	VTE_MLSR			0x1C
134 #define	MLSR_MULTICAST			0x0001
135 #define	MLSR_BROADCAST			0x0002
136 #define	MLSR_CRC_ERR			0x0004
137 #define	MLSR_RUNT			0x0008
138 #define	MLSR_LONG_PKT			0x0010
139 #define	MLSR_TRUNC			0x0020
140 #define	MLSR_DRIBBLE			0x0040
141 #define	MLSR_PHY_ERR			0x0080
142 #define	MLSR_TX_FIFO_UNDERRUN		0x0200
143 #define	MLSR_RX_DESC_UNAVAIL		0x0400
144 #define	MLSR_TX_EXCESS_COL		0x2000
145 #define	MLSR_TX_LATE_COL		0x4000
146 #define	MLSR_RX_FIFO_OVERRUN		0x8000
147 
148 /* MAC MDIO control register */
149 #define	VTE_MMDIO			0x20
150 #define	MMDIO_REG_ADDR_MASK		0x001F
151 #define	MMDIO_PHY_ADDR_MASK		0x1F00
152 #define	MMDIO_READ			0x2000
153 #define	MMDIO_WRITE			0x4000
154 #define	MMDIO_REG_ADDR_SHIFT		0
155 #define	MMDIO_PHY_ADDR_SHIFT		8
156 
157 /* MAC MDIO read data register */
158 #define	VTE_MMRD			0x24
159 #define	MMRD_DATA_MASK			0xFFFF
160 
161 /* MAC MDIO write data register */
162 #define	VTE_MMWD			0x28
163 #define	MMWD_DATA_MASK			0xFFFF
164 
165 /* MAC TX descriptor start address 0 */
166 #define	VTE_MTDSA0			0x2C
167 
168 /* MAC TX descriptor start address 1 */
169 #define	VTE_MTDSA1			0x30
170 
171 /* MAC RX descriptor start address 0 */
172 #define	VTE_MRDSA0			0x34
173 
174 /* MAC RX descriptor start address 1 */
175 #define	VTE_MRDSA1			0x38
176 
177 /* MAC Interrupt status register */
178 #define	VTE_MISR			0x3C
179 #define	MISR_RX_DONE			0x0001
180 #define	MISR_RX_DESC_UNAVAIL		0x0002
181 #define	MISR_RX_FIFO_FULL		0x0004
182 #define	MISR_RX_EARLY_INTR		0x0008
183 #define	MISR_TX_DONE			0x0010
184 #define	MISR_TX_EARLY_INTR		0x0080
185 #define	MISR_EVENT_CNT_OFLOW		0x0100
186 #define	MISR_PHY_MEDIA_CHG		0x0200
187 
188 /* MAC Interrupt enable register */
189 #define	VTE_MIER			0x40
190 
191 #define	VTE_INTRS							\
192 	(MISR_RX_DONE | MISR_RX_DESC_UNAVAIL | MISR_RX_FIFO_FULL |	\
193 	MISR_TX_DONE | MISR_EVENT_CNT_OFLOW)
194 
195 /* MAC Event counter interrupt status register */
196 #define	VTE_MECISR			0x44
197 #define	MECISR_EC_RX_DONE		0x0001
198 #define	MECISR_EC_MULTICAST		0x0002
199 #define	MECISR_EC_BROADCAST		0x0004
200 #define	MECISR_EC_CRC_ERR		0x0008
201 #define	MECISR_EC_RUNT			0x0010
202 #define	MESCIR_EC_LONG_PKT		0x0020
203 #define	MESCIR_EC_RX_DESC_UNAVAIL	0x0080
204 #define	MESCIR_EC_RX_FIFO_FULL		0x0100
205 #define	MESCIR_EC_TX_DONE		0x0200
206 #define	MESCIR_EC_LATE_COL		0x0400
207 #define	MESCIR_EC_TX_UNDERRUN		0x0800
208 
209 /* MAC Event counter interrupt enable register */
210 #define	VTE_MECIER			0x48
211 #define	VTE_MECIER_INTRS						 \
212 	(MECISR_EC_RX_DONE | MECISR_EC_MULTICAST | MECISR_EC_BROADCAST | \
213 	MECISR_EC_CRC_ERR | MECISR_EC_RUNT | MESCIR_EC_LONG_PKT |	 \
214 	MESCIR_EC_RX_DESC_UNAVAIL | MESCIR_EC_RX_FIFO_FULL |		 \
215 	MESCIR_EC_TX_DONE | MESCIR_EC_LATE_COL | MESCIR_EC_TX_UNDERRUN)
216 
217 #define	VTE_CNT_RX_DONE			0x50
218 
219 #define	VTE_CNT_MECNT0			0x52
220 
221 #define	VTE_CNT_MECNT1			0x54
222 
223 #define	VTE_CNT_MECNT2			0x56
224 
225 #define	VTE_CNT_MECNT3			0x58
226 
227 #define	VTE_CNT_TX_DONE			0x5A
228 
229 #define	VTE_CNT_MECNT4			0x5C
230 
231 #define	VTE_CNT_PAUSE			0x5E
232 
233 /* MAC Hash table register */
234 #define	VTE_MAR0			0x60
235 #define	VTE_MAR1			0x62
236 #define	VTE_MAR2			0x64
237 #define	VTE_MAR3			0x66
238 
239 /* MAC station address and multicast address register */
240 #define	VTE_MID0L			0x68
241 #define	VTE_MID0M			0x6A
242 #define	VTE_MID0H			0x6C
243 #define	VTE_MID1L			0x70
244 #define	VTE_MID1M			0x72
245 #define	VTE_MID1H			0x74
246 #define	VTE_MID2L			0x78
247 #define	VTE_MID2M			0x7A
248 #define	VTE_MID2H			0x7C
249 #define	VTE_MID3L			0x80
250 #define	VTE_MID3M			0x82
251 #define	VTE_MID3H			0x84
252 
253 #define	VTE_RXFILTER_PEEFECT_BASE	VTE_MID1L
254 #define	VTE_RXFILT_PERFECT_CNT		3
255 
256 /* MAC PHY status change configuration register */
257 #define	VTE_MPSCCR			0x88
258 #define	MPSCCR_TIMER_DIVIDER_MASK	0x0007
259 #define	MPSCCR_PHY_ADDR_MASK		0x1F00
260 #define	MPSCCR_PHY_STS_CHG_ENB		0x8000
261 #define	MPSCCR_PHY_ADDR_SHIFT		8
262 
263 /* MAC PHY status register2 */
264 #define	VTE_MPSR			0x8A
265 #define	MPSR_LINK_UP			0x0001
266 #define	MPSR_SPEED_100			0x0002
267 #define	MPSR_FULL_DUPLEX		0x0004
268 
269 /* MAC Status machine(undocumented). */
270 #define	VTE_MACSM			0xAC
271 
272 /* MDC Speed control register */
273 #define	VTE_MDCSC			0xB6
274 #define	MDCSC_DEFAULT			0x0030
275 
276 /* MAC Identifier and revision register */
277 #define	VTE_MACID_REV			0xBC
278 #define	VTE_MACID_REV_MASK		0x00FF
279 #define	VTE_MACID_MASK			0xFF00
280 #define	VTE_MACID_REV_SHIFT		0
281 #define	VTE_MACID_SHIFT			8
282 
283 /* MAC Identifier register */
284 #define	VTE_MACID			0xBE
285 
286 /*
287  * RX descriptor
288  * - Added one more uint16_t member to align it 4 on bytes boundary.
289  *   This does not affect operation of controller since it includes
290  *   next pointer address.
291  */
292 struct vte_rx_desc {
293 	uint16_t drst;
294 	uint16_t drlen;
295 	uint32_t drbp;
296 	uint32_t drnp;
297 	uint16_t hidx;
298 	uint16_t rsvd2;
299 	uint16_t rsvd3;
300 	uint16_t __pad;	/* Not actual descriptor member. */
301 };
302 
303 #define	VTE_DRST_MID_MASK	0x0003
304 #define	VTE_DRST_MID_HIT	0x0004
305 #define	VTE_DRST_MULTICAST_HIT	0x0008
306 #define	VTE_DRST_MULTICAST	0x0010
307 #define	VTE_DRST_BROADCAST	0x0020
308 #define	VTE_DRST_CRC_ERR	0x0040
309 #define	VTE_DRST_RUNT		0x0080
310 #define	VTE_DRST_LONG		0x0100
311 #define	VTE_DRST_TRUNC		0x0200
312 #define	VTE_DRST_DRIBBLE	0x0400
313 #define	VTE_DRST_PHY_ERR	0x0800
314 #define	VTE_DRST_RX_OK		0x4000
315 #define	VTE_DRST_RX_OWN		0x8000
316 
317 #define	VTE_RX_LEN(x)		((x) & 0x7FF)
318 
319 #define	VTE_RX_HIDX(x)		((x) & 0x3F)
320 
321 /*
322  * TX descriptor
323  * - Added one more uint32_t member to align it on 16 bytes boundary.
324  */
325 struct vte_tx_desc {
326 	uint16_t dtst;
327 	uint16_t dtlen;
328 	uint32_t dtbp;
329 	uint32_t dtnp;
330 	uint32_t __pad;	/* Not actual descriptor member. */
331 };
332 
333 #define	VTE_DTST_EXCESS_COL	0x0010
334 #define	VTE_DTST_LATE_COL	0x0020
335 #define	VTE_DTST_UNDERRUN	0x0040
336 #define	VTE_DTST_NO_CRC		0x2000
337 #define	VTE_DTST_TX_OK		0x4000
338 #define	VTE_DTST_TX_OWN		0x8000
339 
340 #define	VTE_TX_LEN(x)		((x) & 0x7FF)
341 
342 #endif	/* _IF_VTEREG_H */
343