if_vtereg.h revision 1.2 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 (at) 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