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