rtl8169.c revision 1.157 1 /* $NetBSD: rtl8169.c,v 1.157 2019/01/22 03:42:26 msaitoh Exp $ */
2
3 /*
4 * Copyright (c) 1997, 1998-2003
5 * Bill Paul <wpaul (at) windriver.com>. 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, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 * 3. All advertising materials mentioning features or use of this software
16 * must display the following acknowledgement:
17 * This product includes software developed by Bill Paul.
18 * 4. Neither the name of the author nor the names of any co-contributors
19 * may be used to endorse or promote products derived from this software
20 * without specific prior written permission.
21 *
22 * THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND
23 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25 * ARE DISCLAIMED. IN NO EVENT SHALL Bill Paul OR THE VOICES IN HIS HEAD
26 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
27 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
28 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
29 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
30 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
31 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
32 * THE POSSIBILITY OF SUCH DAMAGE.
33 */
34
35 #include <sys/cdefs.h>
36 __KERNEL_RCSID(0, "$NetBSD: rtl8169.c,v 1.157 2019/01/22 03:42:26 msaitoh Exp $");
37 /* $FreeBSD: /repoman/r/ncvs/src/sys/dev/re/if_re.c,v 1.20 2004/04/11 20:34:08 ru Exp $ */
38
39 /*
40 * RealTek 8139C+/8169/8169S/8168/8110S PCI NIC driver
41 *
42 * Written by Bill Paul <wpaul (at) windriver.com>
43 * Senior Networking Software Engineer
44 * Wind River Systems
45 */
46
47 /*
48 * This driver is designed to support RealTek's next generation of
49 * 10/100 and 10/100/1000 PCI ethernet controllers. There are currently
50 * six devices in this family: the RTL8139C+, the RTL8169, the RTL8169S,
51 * RTL8110S, the RTL8168 and the RTL8111.
52 *
53 * The 8139C+ is a 10/100 ethernet chip. It is backwards compatible
54 * with the older 8139 family, however it also supports a special
55 * C+ mode of operation that provides several new performance enhancing
56 * features. These include:
57 *
58 * o Descriptor based DMA mechanism. Each descriptor represents
59 * a single packet fragment. Data buffers may be aligned on
60 * any byte boundary.
61 *
62 * o 64-bit DMA
63 *
64 * o TCP/IP checksum offload for both RX and TX
65 *
66 * o High and normal priority transmit DMA rings
67 *
68 * o VLAN tag insertion and extraction
69 *
70 * o TCP large send (segmentation offload)
71 *
72 * Like the 8139, the 8139C+ also has a built-in 10/100 PHY. The C+
73 * programming API is fairly straightforward. The RX filtering, EEPROM
74 * access and PHY access is the same as it is on the older 8139 series
75 * chips.
76 *
77 * The 8169 is a 64-bit 10/100/1000 gigabit ethernet MAC. It has almost the
78 * same programming API and feature set as the 8139C+ with the following
79 * differences and additions:
80 *
81 * o 1000Mbps mode
82 *
83 * o Jumbo frames
84 *
85 * o GMII and TBI ports/registers for interfacing with copper
86 * or fiber PHYs
87 *
88 * o RX and TX DMA rings can have up to 1024 descriptors
89 * (the 8139C+ allows a maximum of 64)
90 *
91 * o Slight differences in register layout from the 8139C+
92 *
93 * The TX start and timer interrupt registers are at different locations
94 * on the 8169 than they are on the 8139C+. Also, the status word in the
95 * RX descriptor has a slightly different bit layout. The 8169 does not
96 * have a built-in PHY. Most reference boards use a Marvell 88E1000 'Alaska'
97 * copper gigE PHY.
98 *
99 * The 8169S/8110S 10/100/1000 devices have built-in copper gigE PHYs
100 * (the 'S' stands for 'single-chip'). These devices have the same
101 * programming API as the older 8169, but also have some vendor-specific
102 * registers for the on-board PHY. The 8110S is a LAN-on-motherboard
103 * part designed to be pin-compatible with the RealTek 8100 10/100 chip.
104 *
105 * This driver takes advantage of the RX and TX checksum offload and
106 * VLAN tag insertion/extraction features. It also implements TX
107 * interrupt moderation using the timer interrupt registers, which
108 * significantly reduces TX interrupt load. There is also support
109 * for jumbo frames, however the 8169/8169S/8110S can not transmit
110 * jumbo frames larger than 7.5K, so the max MTU possible with this
111 * driver is 7500 bytes.
112 */
113
114
115 #include <sys/param.h>
116 #include <sys/endian.h>
117 #include <sys/systm.h>
118 #include <sys/sockio.h>
119 #include <sys/mbuf.h>
120 #include <sys/malloc.h>
121 #include <sys/kernel.h>
122 #include <sys/socket.h>
123 #include <sys/device.h>
124
125 #include <net/if.h>
126 #include <net/if_arp.h>
127 #include <net/if_dl.h>
128 #include <net/if_ether.h>
129 #include <net/if_media.h>
130 #include <net/if_vlanvar.h>
131
132 #include <netinet/in_systm.h> /* XXX for IP_MAXPACKET */
133 #include <netinet/in.h> /* XXX for IP_MAXPACKET */
134 #include <netinet/ip.h> /* XXX for IP_MAXPACKET */
135
136 #include <net/bpf.h>
137 #include <sys/rndsource.h>
138
139 #include <sys/bus.h>
140
141 #include <dev/mii/mii.h>
142 #include <dev/mii/miivar.h>
143
144 #include <dev/ic/rtl81x9reg.h>
145 #include <dev/ic/rtl81x9var.h>
146
147 #include <dev/ic/rtl8169var.h>
148
149 static inline void re_set_bufaddr(struct re_desc *, bus_addr_t);
150
151 static int re_newbuf(struct rtk_softc *, int, struct mbuf *);
152 static int re_rx_list_init(struct rtk_softc *);
153 static int re_tx_list_init(struct rtk_softc *);
154 static void re_rxeof(struct rtk_softc *);
155 static void re_txeof(struct rtk_softc *);
156 static void re_tick(void *);
157 static void re_start(struct ifnet *);
158 static int re_ioctl(struct ifnet *, u_long, void *);
159 static int re_init(struct ifnet *);
160 static void re_stop(struct ifnet *, int);
161 static void re_watchdog(struct ifnet *);
162
163 static int re_enable(struct rtk_softc *);
164 static void re_disable(struct rtk_softc *);
165
166 static int re_gmii_readreg(device_t, int, int, uint16_t *);
167 static int re_gmii_writereg(device_t, int, int, uint16_t);
168
169 static int re_miibus_readreg(device_t, int, int, uint16_t *);
170 static int re_miibus_writereg(device_t, int, int, uint16_t);
171 static void re_miibus_statchg(struct ifnet *);
172
173 static void re_reset(struct rtk_softc *);
174
175 static inline void
176 re_set_bufaddr(struct re_desc *d, bus_addr_t addr)
177 {
178
179 d->re_bufaddr_lo = htole32((uint32_t)addr);
180 if (sizeof(bus_addr_t) == sizeof(uint64_t))
181 d->re_bufaddr_hi = htole32((uint64_t)addr >> 32);
182 else
183 d->re_bufaddr_hi = 0;
184 }
185
186 static int
187 re_gmii_readreg(device_t dev, int phy, int reg, uint16_t *val)
188 {
189 struct rtk_softc *sc = device_private(dev);
190 uint32_t data;
191 int i;
192
193 if (phy != 7)
194 return -1;
195
196 /* Let the rgephy driver read the GMEDIASTAT register */
197
198 if (reg == RTK_GMEDIASTAT) {
199 *val = CSR_READ_1(sc, RTK_GMEDIASTAT);
200 return 0;
201 }
202
203 CSR_WRITE_4(sc, RTK_PHYAR, reg << 16);
204 DELAY(1000);
205
206 for (i = 0; i < RTK_TIMEOUT; i++) {
207 data = CSR_READ_4(sc, RTK_PHYAR);
208 if (data & RTK_PHYAR_BUSY)
209 break;
210 DELAY(100);
211 }
212
213 if (i == RTK_TIMEOUT) {
214 printf("%s: PHY read failed\n", device_xname(sc->sc_dev));
215 return ETIMEDOUT;
216 }
217
218 *val = data & RTK_PHYAR_PHYDATA;
219 return 0;
220 }
221
222 static int
223 re_gmii_writereg(device_t dev, int phy, int reg, uint16_t val)
224 {
225 struct rtk_softc *sc = device_private(dev);
226 uint32_t data;
227 int i;
228
229 CSR_WRITE_4(sc, RTK_PHYAR, (reg << 16) |
230 (val & RTK_PHYAR_PHYDATA) | RTK_PHYAR_BUSY);
231 DELAY(1000);
232
233 for (i = 0; i < RTK_TIMEOUT; i++) {
234 data = CSR_READ_4(sc, RTK_PHYAR);
235 if (!(data & RTK_PHYAR_BUSY))
236 break;
237 DELAY(100);
238 }
239
240 if (i == RTK_TIMEOUT) {
241 printf("%s: PHY write reg %x <- %hx failed\n",
242 device_xname(sc->sc_dev), reg, val);
243 return ETIMEDOUT;
244 }
245
246 return 0;
247 }
248
249 static int
250 re_miibus_readreg(device_t dev, int phy, int reg, uint16_t *val)
251 {
252 struct rtk_softc *sc = device_private(dev);
253 uint16_t re8139_reg = 0;
254 int s, rv = 0;
255
256 s = splnet();
257
258 if ((sc->sc_quirk & RTKQ_8139CPLUS) == 0) {
259 rv = re_gmii_readreg(dev, phy, reg, val);
260 splx(s);
261 return rv;
262 }
263
264 /* Pretend the internal PHY is only at address 0 */
265 if (phy) {
266 splx(s);
267 return -1;
268 }
269 switch (reg) {
270 case MII_BMCR:
271 re8139_reg = RTK_BMCR;
272 break;
273 case MII_BMSR:
274 re8139_reg = RTK_BMSR;
275 break;
276 case MII_ANAR:
277 re8139_reg = RTK_ANAR;
278 break;
279 case MII_ANER:
280 re8139_reg = RTK_ANER;
281 break;
282 case MII_ANLPAR:
283 re8139_reg = RTK_LPAR;
284 break;
285 case MII_PHYIDR1:
286 case MII_PHYIDR2:
287 *val = 0;
288 splx(s);
289 return 0;
290 /*
291 * Allow the rlphy driver to read the media status
292 * register. If we have a link partner which does not
293 * support NWAY, this is the register which will tell
294 * us the results of parallel detection.
295 */
296 case RTK_MEDIASTAT:
297 *val = CSR_READ_1(sc, RTK_MEDIASTAT);
298 splx(s);
299 return 0;
300 default:
301 printf("%s: bad phy register\n", device_xname(sc->sc_dev));
302 splx(s);
303 return -1;
304 }
305 *val = CSR_READ_2(sc, re8139_reg);
306 if ((sc->sc_quirk & RTKQ_8139CPLUS) != 0 && re8139_reg == RTK_BMCR) {
307 /* 8139C+ has different bit layout. */
308 *val &= ~(BMCR_LOOP | BMCR_ISO);
309 }
310 splx(s);
311 return 0;
312 }
313
314 static int
315 re_miibus_writereg(device_t dev, int phy, int reg, uint16_t val)
316 {
317 struct rtk_softc *sc = device_private(dev);
318 uint16_t re8139_reg = 0;
319 int s, rv;
320
321 s = splnet();
322
323 if ((sc->sc_quirk & RTKQ_8139CPLUS) == 0) {
324 rv = re_gmii_writereg(dev, phy, reg, val);
325 splx(s);
326 return rv;
327 }
328
329 /* Pretend the internal PHY is only at address 0 */
330 if (phy) {
331 splx(s);
332 return -1;
333 }
334 switch (reg) {
335 case MII_BMCR:
336 re8139_reg = RTK_BMCR;
337 if ((sc->sc_quirk & RTKQ_8139CPLUS) != 0) {
338 /* 8139C+ has different bit layout. */
339 val &= ~(BMCR_LOOP | BMCR_ISO);
340 }
341 break;
342 case MII_BMSR:
343 re8139_reg = RTK_BMSR;
344 break;
345 case MII_ANAR:
346 re8139_reg = RTK_ANAR;
347 break;
348 case MII_ANER:
349 re8139_reg = RTK_ANER;
350 break;
351 case MII_ANLPAR:
352 re8139_reg = RTK_LPAR;
353 break;
354 case MII_PHYIDR1:
355 case MII_PHYIDR2:
356 splx(s);
357 return 0;
358 break;
359 default:
360 printf("%s: bad phy register\n", device_xname(sc->sc_dev));
361 splx(s);
362 return -1;
363 }
364 CSR_WRITE_2(sc, re8139_reg, val);
365 splx(s);
366 return 0;
367 }
368
369 static void
370 re_miibus_statchg(struct ifnet *ifp)
371 {
372
373 return;
374 }
375
376 static void
377 re_reset(struct rtk_softc *sc)
378 {
379 int i;
380
381 CSR_WRITE_1(sc, RTK_COMMAND, RTK_CMD_RESET);
382
383 for (i = 0; i < RTK_TIMEOUT; i++) {
384 DELAY(10);
385 if ((CSR_READ_1(sc, RTK_COMMAND) & RTK_CMD_RESET) == 0)
386 break;
387 }
388 if (i == RTK_TIMEOUT)
389 printf("%s: reset never completed!\n",
390 device_xname(sc->sc_dev));
391
392 /*
393 * NB: Realtek-supplied FreeBSD driver does this only for MACFG_3,
394 * but also says "Rtl8169s sigle chip detected".
395 */
396 if ((sc->sc_quirk & RTKQ_MACLDPS) != 0)
397 CSR_WRITE_1(sc, RTK_LDPS, 1);
398
399 }
400
401 /*
402 * The following routine is designed to test for a defect on some
403 * 32-bit 8169 cards. Some of these NICs have the REQ64# and ACK64#
404 * lines connected to the bus, however for a 32-bit only card, they
405 * should be pulled high. The result of this defect is that the
406 * NIC will not work right if you plug it into a 64-bit slot: DMA
407 * operations will be done with 64-bit transfers, which will fail
408 * because the 64-bit data lines aren't connected.
409 *
410 * There's no way to work around this (short of talking a soldering
411 * iron to the board), however we can detect it. The method we use
412 * here is to put the NIC into digital loopback mode, set the receiver
413 * to promiscuous mode, and then try to send a frame. We then compare
414 * the frame data we sent to what was received. If the data matches,
415 * then the NIC is working correctly, otherwise we know the user has
416 * a defective NIC which has been mistakenly plugged into a 64-bit PCI
417 * slot. In the latter case, there's no way the NIC can work correctly,
418 * so we print out a message on the console and abort the device attach.
419 */
420
421 int
422 re_diag(struct rtk_softc *sc)
423 {
424 struct ifnet *ifp = &sc->ethercom.ec_if;
425 struct mbuf *m0;
426 struct ether_header *eh;
427 struct re_rxsoft *rxs;
428 struct re_desc *cur_rx;
429 bus_dmamap_t dmamap;
430 uint16_t status;
431 uint32_t rxstat;
432 int total_len, i, s, error = 0;
433 static const uint8_t dst[] = { 0x00, 'h', 'e', 'l', 'l', 'o' };
434 static const uint8_t src[] = { 0x00, 'w', 'o', 'r', 'l', 'd' };
435
436 /* Allocate a single mbuf */
437
438 MGETHDR(m0, M_DONTWAIT, MT_DATA);
439 if (m0 == NULL)
440 return ENOBUFS;
441
442 /*
443 * Initialize the NIC in test mode. This sets the chip up
444 * so that it can send and receive frames, but performs the
445 * following special functions:
446 * - Puts receiver in promiscuous mode
447 * - Enables digital loopback mode
448 * - Leaves interrupts turned off
449 */
450
451 ifp->if_flags |= IFF_PROMISC;
452 sc->re_testmode = 1;
453 re_init(ifp);
454 re_stop(ifp, 0);
455 DELAY(100000);
456 re_init(ifp);
457
458 /* Put some data in the mbuf */
459
460 eh = mtod(m0, struct ether_header *);
461 memcpy(eh->ether_dhost, &dst, ETHER_ADDR_LEN);
462 memcpy(eh->ether_shost, &src, ETHER_ADDR_LEN);
463 eh->ether_type = htons(ETHERTYPE_IP);
464 m0->m_pkthdr.len = m0->m_len = ETHER_MIN_LEN - ETHER_CRC_LEN;
465
466 /*
467 * Queue the packet, start transmission.
468 */
469
470 CSR_WRITE_2(sc, RTK_ISR, 0xFFFF);
471 s = splnet();
472 IF_ENQUEUE(&ifp->if_snd, m0);
473 re_start(ifp);
474 splx(s);
475 m0 = NULL;
476
477 /* Wait for it to propagate through the chip */
478
479 DELAY(100000);
480 for (i = 0; i < RTK_TIMEOUT; i++) {
481 status = CSR_READ_2(sc, RTK_ISR);
482 if ((status & (RTK_ISR_TIMEOUT_EXPIRED | RTK_ISR_RX_OK)) ==
483 (RTK_ISR_TIMEOUT_EXPIRED | RTK_ISR_RX_OK))
484 break;
485 DELAY(10);
486 }
487 if (i == RTK_TIMEOUT) {
488 aprint_error_dev(sc->sc_dev,
489 "diagnostic failed, failed to receive packet "
490 "in loopback mode\n");
491 error = EIO;
492 goto done;
493 }
494
495 /*
496 * The packet should have been dumped into the first
497 * entry in the RX DMA ring. Grab it from there.
498 */
499
500 rxs = &sc->re_ldata.re_rxsoft[0];
501 dmamap = rxs->rxs_dmamap;
502 bus_dmamap_sync(sc->sc_dmat, dmamap, 0, dmamap->dm_mapsize,
503 BUS_DMASYNC_POSTREAD);
504 bus_dmamap_unload(sc->sc_dmat, dmamap);
505
506 m0 = rxs->rxs_mbuf;
507 rxs->rxs_mbuf = NULL;
508 eh = mtod(m0, struct ether_header *);
509
510 RE_RXDESCSYNC(sc, 0, BUS_DMASYNC_POSTREAD|BUS_DMASYNC_POSTWRITE);
511 cur_rx = &sc->re_ldata.re_rx_list[0];
512 rxstat = le32toh(cur_rx->re_cmdstat);
513 total_len = rxstat & sc->re_rxlenmask;
514
515 if (total_len != ETHER_MIN_LEN) {
516 aprint_error_dev(sc->sc_dev,
517 "diagnostic failed, received short packet\n");
518 error = EIO;
519 goto done;
520 }
521
522 /* Test that the received packet data matches what we sent. */
523
524 if (memcmp(&eh->ether_dhost, &dst, ETHER_ADDR_LEN) ||
525 memcmp(&eh->ether_shost, &src, ETHER_ADDR_LEN) ||
526 ntohs(eh->ether_type) != ETHERTYPE_IP) {
527 aprint_error_dev(sc->sc_dev, "WARNING, DMA FAILURE!\n"
528 "expected TX data: %s/%s/0x%x\n"
529 "received RX data: %s/%s/0x%x\n"
530 "You may have a defective 32-bit NIC plugged "
531 "into a 64-bit PCI slot.\n"
532 "Please re-install the NIC in a 32-bit slot "
533 "for proper operation.\n"
534 "Read the re(4) man page for more details.\n" ,
535 ether_sprintf(dst), ether_sprintf(src), ETHERTYPE_IP,
536 ether_sprintf(eh->ether_dhost),
537 ether_sprintf(eh->ether_shost), ntohs(eh->ether_type));
538 error = EIO;
539 }
540
541 done:
542 /* Turn interface off, release resources */
543
544 sc->re_testmode = 0;
545 ifp->if_flags &= ~IFF_PROMISC;
546 re_stop(ifp, 0);
547 if (m0 != NULL)
548 m_freem(m0);
549
550 return error;
551 }
552
553
554 /*
555 * Attach the interface. Allocate softc structures, do ifmedia
556 * setup and ethernet/BPF attach.
557 */
558 void
559 re_attach(struct rtk_softc *sc)
560 {
561 uint8_t eaddr[ETHER_ADDR_LEN];
562 struct ifnet *ifp;
563 int error = 0, i;
564
565 if ((sc->sc_quirk & RTKQ_8139CPLUS) == 0) {
566 uint32_t hwrev;
567
568 /* Revision of 8169/8169S/8110s in bits 30..26, 23 */
569 hwrev = CSR_READ_4(sc, RTK_TXCFG) & RTK_TXCFG_HWREV;
570 switch (hwrev) {
571 case RTK_HWREV_8169:
572 sc->sc_quirk |= RTKQ_8169NONS;
573 break;
574 case RTK_HWREV_8169S:
575 case RTK_HWREV_8110S:
576 case RTK_HWREV_8169_8110SB:
577 case RTK_HWREV_8169_8110SBL:
578 case RTK_HWREV_8169_8110SC:
579 sc->sc_quirk |= RTKQ_MACLDPS;
580 break;
581 case RTK_HWREV_8168_SPIN1:
582 case RTK_HWREV_8168_SPIN2:
583 case RTK_HWREV_8168_SPIN3:
584 sc->sc_quirk |= RTKQ_MACSTAT;
585 break;
586 case RTK_HWREV_8168C:
587 case RTK_HWREV_8168C_SPIN2:
588 case RTK_HWREV_8168CP:
589 case RTK_HWREV_8168D:
590 case RTK_HWREV_8168DP:
591 sc->sc_quirk |= RTKQ_DESCV2 | RTKQ_NOEECMD |
592 RTKQ_MACSTAT | RTKQ_CMDSTOP;
593 /*
594 * From FreeBSD driver:
595 *
596 * These (8168/8111) controllers support jumbo frame
597 * but it seems that enabling it requires touching
598 * additional magic registers. Depending on MAC
599 * revisions some controllers need to disable
600 * checksum offload. So disable jumbo frame until
601 * I have better idea what it really requires to
602 * make it support.
603 * RTL8168C/CP : supports up to 6KB jumbo frame.
604 * RTL8111C/CP : supports up to 9KB jumbo frame.
605 */
606 sc->sc_quirk |= RTKQ_NOJUMBO;
607 break;
608 case RTK_HWREV_8168E:
609 case RTK_HWREV_8168H:
610 case RTK_HWREV_8168H_SPIN1:
611 sc->sc_quirk |= RTKQ_DESCV2 | RTKQ_NOEECMD |
612 RTKQ_MACSTAT | RTKQ_CMDSTOP | RTKQ_PHYWAKE_PM |
613 RTKQ_NOJUMBO;
614 break;
615 case RTK_HWREV_8168E_VL:
616 case RTK_HWREV_8168F:
617 sc->sc_quirk |= RTKQ_DESCV2 | RTKQ_NOEECMD |
618 RTKQ_MACSTAT | RTKQ_CMDSTOP | RTKQ_NOJUMBO;
619 break;
620 case RTK_HWREV_8168G:
621 case RTK_HWREV_8168G_SPIN1:
622 case RTK_HWREV_8168G_SPIN2:
623 case RTK_HWREV_8168G_SPIN4:
624 sc->sc_quirk |= RTKQ_DESCV2 | RTKQ_NOEECMD |
625 RTKQ_MACSTAT | RTKQ_CMDSTOP | RTKQ_NOJUMBO |
626 RTKQ_RXDV_GATED;
627 break;
628 case RTK_HWREV_8100E:
629 case RTK_HWREV_8100E_SPIN2:
630 case RTK_HWREV_8101E:
631 sc->sc_quirk |= RTKQ_NOJUMBO;
632 break;
633 case RTK_HWREV_8102E:
634 case RTK_HWREV_8102EL:
635 case RTK_HWREV_8103E:
636 sc->sc_quirk |= RTKQ_DESCV2 | RTKQ_NOEECMD |
637 RTKQ_MACSTAT | RTKQ_CMDSTOP | RTKQ_NOJUMBO;
638 break;
639 default:
640 aprint_normal_dev(sc->sc_dev,
641 "Unknown revision (0x%08x)\n", hwrev);
642 /* assume the latest features */
643 sc->sc_quirk |= RTKQ_DESCV2 | RTKQ_NOEECMD;
644 sc->sc_quirk |= RTKQ_NOJUMBO;
645 }
646
647 /* Set RX length mask */
648 sc->re_rxlenmask = RE_RDESC_STAT_GFRAGLEN;
649 sc->re_ldata.re_tx_desc_cnt = RE_TX_DESC_CNT_8169;
650 } else {
651 sc->sc_quirk |= RTKQ_NOJUMBO;
652
653 /* Set RX length mask */
654 sc->re_rxlenmask = RE_RDESC_STAT_FRAGLEN;
655 sc->re_ldata.re_tx_desc_cnt = RE_TX_DESC_CNT_8139;
656 }
657
658 /* Reset the adapter. */
659 re_reset(sc);
660
661 /*
662 * RTL81x9 chips automatically read EEPROM to init MAC address,
663 * and some NAS override its MAC address per own configuration,
664 * so no need to explicitely read EEPROM and set ID registers.
665 */
666 #ifdef RE_USE_EECMD
667 if ((sc->sc_quirk & RTKQ_NOEECMD) != 0) {
668 /*
669 * Get station address from ID registers.
670 */
671 for (i = 0; i < ETHER_ADDR_LEN; i++)
672 eaddr[i] = CSR_READ_1(sc, RTK_IDR0 + i);
673 } else {
674 uint16_t val;
675 int addr_len;
676
677 /*
678 * Get station address from the EEPROM.
679 */
680 if (rtk_read_eeprom(sc, RTK_EE_ID, RTK_EEADDR_LEN1) == 0x8129)
681 addr_len = RTK_EEADDR_LEN1;
682 else
683 addr_len = RTK_EEADDR_LEN0;
684
685 /*
686 * Get station address from the EEPROM.
687 */
688 for (i = 0; i < ETHER_ADDR_LEN / 2; i++) {
689 val = rtk_read_eeprom(sc, RTK_EE_EADDR0 + i, addr_len);
690 eaddr[(i * 2) + 0] = val & 0xff;
691 eaddr[(i * 2) + 1] = val >> 8;
692 }
693 }
694 #else
695 /*
696 * Get station address from ID registers.
697 */
698 for (i = 0; i < ETHER_ADDR_LEN; i++)
699 eaddr[i] = CSR_READ_1(sc, RTK_IDR0 + i);
700 #endif
701
702 /* Take PHY out of power down mode. */
703 if ((sc->sc_quirk & RTKQ_PHYWAKE_PM) != 0)
704 CSR_WRITE_1(sc, RTK_PMCH, CSR_READ_1(sc, RTK_PMCH) | 0x80);
705
706 aprint_normal_dev(sc->sc_dev, "Ethernet address %s\n",
707 ether_sprintf(eaddr));
708
709 if (sc->re_ldata.re_tx_desc_cnt >
710 PAGE_SIZE / sizeof(struct re_desc)) {
711 sc->re_ldata.re_tx_desc_cnt =
712 PAGE_SIZE / sizeof(struct re_desc);
713 }
714
715 aprint_verbose_dev(sc->sc_dev, "using %d tx descriptors\n",
716 sc->re_ldata.re_tx_desc_cnt);
717 KASSERT(RE_NEXT_TX_DESC(sc, RE_TX_DESC_CNT(sc) - 1) == 0);
718
719 /* Allocate DMA'able memory for the TX ring */
720 if ((error = bus_dmamem_alloc(sc->sc_dmat, RE_TX_LIST_SZ(sc),
721 RE_RING_ALIGN, 0, &sc->re_ldata.re_tx_listseg, 1,
722 &sc->re_ldata.re_tx_listnseg, BUS_DMA_NOWAIT)) != 0) {
723 aprint_error_dev(sc->sc_dev,
724 "can't allocate tx listseg, error = %d\n", error);
725 goto fail_0;
726 }
727
728 /* Load the map for the TX ring. */
729 if ((error = bus_dmamem_map(sc->sc_dmat, &sc->re_ldata.re_tx_listseg,
730 sc->re_ldata.re_tx_listnseg, RE_TX_LIST_SZ(sc),
731 (void **)&sc->re_ldata.re_tx_list,
732 BUS_DMA_COHERENT | BUS_DMA_NOWAIT)) != 0) {
733 aprint_error_dev(sc->sc_dev,
734 "can't map tx list, error = %d\n", error);
735 goto fail_1;
736 }
737 memset(sc->re_ldata.re_tx_list, 0, RE_TX_LIST_SZ(sc));
738
739 if ((error = bus_dmamap_create(sc->sc_dmat, RE_TX_LIST_SZ(sc), 1,
740 RE_TX_LIST_SZ(sc), 0, 0,
741 &sc->re_ldata.re_tx_list_map)) != 0) {
742 aprint_error_dev(sc->sc_dev,
743 "can't create tx list map, error = %d\n", error);
744 goto fail_2;
745 }
746
747
748 if ((error = bus_dmamap_load(sc->sc_dmat,
749 sc->re_ldata.re_tx_list_map, sc->re_ldata.re_tx_list,
750 RE_TX_LIST_SZ(sc), NULL, BUS_DMA_NOWAIT)) != 0) {
751 aprint_error_dev(sc->sc_dev,
752 "can't load tx list, error = %d\n", error);
753 goto fail_3;
754 }
755
756 /* Create DMA maps for TX buffers */
757 for (i = 0; i < RE_TX_QLEN; i++) {
758 error = bus_dmamap_create(sc->sc_dmat,
759 round_page(IP_MAXPACKET),
760 RE_TX_DESC_CNT(sc), RE_TDESC_CMD_FRAGLEN,
761 0, 0, &sc->re_ldata.re_txq[i].txq_dmamap);
762 if (error) {
763 aprint_error_dev(sc->sc_dev,
764 "can't create DMA map for TX\n");
765 goto fail_4;
766 }
767 }
768
769 /* Allocate DMA'able memory for the RX ring */
770 /* XXX see also a comment about RE_RX_DMAMEM_SZ in rtl81x9var.h */
771 if ((error = bus_dmamem_alloc(sc->sc_dmat,
772 RE_RX_DMAMEM_SZ, RE_RING_ALIGN, 0, &sc->re_ldata.re_rx_listseg, 1,
773 &sc->re_ldata.re_rx_listnseg, BUS_DMA_NOWAIT)) != 0) {
774 aprint_error_dev(sc->sc_dev,
775 "can't allocate rx listseg, error = %d\n", error);
776 goto fail_4;
777 }
778
779 /* Load the map for the RX ring. */
780 if ((error = bus_dmamem_map(sc->sc_dmat, &sc->re_ldata.re_rx_listseg,
781 sc->re_ldata.re_rx_listnseg, RE_RX_DMAMEM_SZ,
782 (void **)&sc->re_ldata.re_rx_list,
783 BUS_DMA_COHERENT | BUS_DMA_NOWAIT)) != 0) {
784 aprint_error_dev(sc->sc_dev,
785 "can't map rx list, error = %d\n", error);
786 goto fail_5;
787 }
788 memset(sc->re_ldata.re_rx_list, 0, RE_RX_DMAMEM_SZ);
789
790 if ((error = bus_dmamap_create(sc->sc_dmat,
791 RE_RX_DMAMEM_SZ, 1, RE_RX_DMAMEM_SZ, 0, 0,
792 &sc->re_ldata.re_rx_list_map)) != 0) {
793 aprint_error_dev(sc->sc_dev,
794 "can't create rx list map, error = %d\n", error);
795 goto fail_6;
796 }
797
798 if ((error = bus_dmamap_load(sc->sc_dmat,
799 sc->re_ldata.re_rx_list_map, sc->re_ldata.re_rx_list,
800 RE_RX_DMAMEM_SZ, NULL, BUS_DMA_NOWAIT)) != 0) {
801 aprint_error_dev(sc->sc_dev,
802 "can't load rx list, error = %d\n", error);
803 goto fail_7;
804 }
805
806 /* Create DMA maps for RX buffers */
807 for (i = 0; i < RE_RX_DESC_CNT; i++) {
808 error = bus_dmamap_create(sc->sc_dmat, MCLBYTES, 1, MCLBYTES,
809 0, 0, &sc->re_ldata.re_rxsoft[i].rxs_dmamap);
810 if (error) {
811 aprint_error_dev(sc->sc_dev,
812 "can't create DMA map for RX\n");
813 goto fail_8;
814 }
815 }
816
817 /*
818 * Record interface as attached. From here, we should not fail.
819 */
820 sc->sc_flags |= RTK_ATTACHED;
821
822 ifp = &sc->ethercom.ec_if;
823 ifp->if_softc = sc;
824 strlcpy(ifp->if_xname, device_xname(sc->sc_dev), IFNAMSIZ);
825 ifp->if_mtu = ETHERMTU;
826 ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
827 ifp->if_ioctl = re_ioctl;
828 sc->ethercom.ec_capabilities |=
829 ETHERCAP_VLAN_MTU | ETHERCAP_VLAN_HWTAGGING;
830 ifp->if_start = re_start;
831 ifp->if_stop = re_stop;
832
833 /*
834 * IFCAP_CSUM_IPv4_Tx on re(4) is broken for small packets,
835 * so we have a workaround to handle the bug by padding
836 * such packets manually.
837 */
838 ifp->if_capabilities |=
839 IFCAP_CSUM_IPv4_Tx | IFCAP_CSUM_IPv4_Rx |
840 IFCAP_CSUM_TCPv4_Tx | IFCAP_CSUM_TCPv4_Rx |
841 IFCAP_CSUM_UDPv4_Tx | IFCAP_CSUM_UDPv4_Rx |
842 IFCAP_TSOv4;
843
844 ifp->if_watchdog = re_watchdog;
845 ifp->if_init = re_init;
846 ifp->if_snd.ifq_maxlen = RE_IFQ_MAXLEN;
847 ifp->if_capenable = ifp->if_capabilities;
848 IFQ_SET_READY(&ifp->if_snd);
849
850 callout_init(&sc->rtk_tick_ch, 0);
851
852 /* Do MII setup */
853 sc->mii.mii_ifp = ifp;
854 sc->mii.mii_readreg = re_miibus_readreg;
855 sc->mii.mii_writereg = re_miibus_writereg;
856 sc->mii.mii_statchg = re_miibus_statchg;
857 sc->ethercom.ec_mii = &sc->mii;
858 ifmedia_init(&sc->mii.mii_media, IFM_IMASK, ether_mediachange,
859 ether_mediastatus);
860 mii_attach(sc->sc_dev, &sc->mii, 0xffffffff, MII_PHY_ANY,
861 MII_OFFSET_ANY, 0);
862 ifmedia_set(&sc->mii.mii_media, IFM_ETHER | IFM_AUTO);
863
864 /*
865 * Call MI attach routine.
866 */
867 if_attach(ifp);
868 if_deferred_start_init(ifp, NULL);
869 ether_ifattach(ifp, eaddr);
870
871 rnd_attach_source(&sc->rnd_source, device_xname(sc->sc_dev),
872 RND_TYPE_NET, RND_FLAG_DEFAULT);
873
874 if (pmf_device_register(sc->sc_dev, NULL, NULL))
875 pmf_class_network_register(sc->sc_dev, ifp);
876 else
877 aprint_error_dev(sc->sc_dev,
878 "couldn't establish power handler\n");
879
880 return;
881
882 fail_8:
883 /* Destroy DMA maps for RX buffers. */
884 for (i = 0; i < RE_RX_DESC_CNT; i++)
885 if (sc->re_ldata.re_rxsoft[i].rxs_dmamap != NULL)
886 bus_dmamap_destroy(sc->sc_dmat,
887 sc->re_ldata.re_rxsoft[i].rxs_dmamap);
888
889 /* Free DMA'able memory for the RX ring. */
890 bus_dmamap_unload(sc->sc_dmat, sc->re_ldata.re_rx_list_map);
891 fail_7:
892 bus_dmamap_destroy(sc->sc_dmat, sc->re_ldata.re_rx_list_map);
893 fail_6:
894 bus_dmamem_unmap(sc->sc_dmat,
895 (void *)sc->re_ldata.re_rx_list, RE_RX_DMAMEM_SZ);
896 fail_5:
897 bus_dmamem_free(sc->sc_dmat,
898 &sc->re_ldata.re_rx_listseg, sc->re_ldata.re_rx_listnseg);
899
900 fail_4:
901 /* Destroy DMA maps for TX buffers. */
902 for (i = 0; i < RE_TX_QLEN; i++)
903 if (sc->re_ldata.re_txq[i].txq_dmamap != NULL)
904 bus_dmamap_destroy(sc->sc_dmat,
905 sc->re_ldata.re_txq[i].txq_dmamap);
906
907 /* Free DMA'able memory for the TX ring. */
908 bus_dmamap_unload(sc->sc_dmat, sc->re_ldata.re_tx_list_map);
909 fail_3:
910 bus_dmamap_destroy(sc->sc_dmat, sc->re_ldata.re_tx_list_map);
911 fail_2:
912 bus_dmamem_unmap(sc->sc_dmat,
913 (void *)sc->re_ldata.re_tx_list, RE_TX_LIST_SZ(sc));
914 fail_1:
915 bus_dmamem_free(sc->sc_dmat,
916 &sc->re_ldata.re_tx_listseg, sc->re_ldata.re_tx_listnseg);
917 fail_0:
918 return;
919 }
920
921
922 /*
923 * re_activate:
924 * Handle device activation/deactivation requests.
925 */
926 int
927 re_activate(device_t self, enum devact act)
928 {
929 struct rtk_softc *sc = device_private(self);
930
931 switch (act) {
932 case DVACT_DEACTIVATE:
933 if_deactivate(&sc->ethercom.ec_if);
934 return 0;
935 default:
936 return EOPNOTSUPP;
937 }
938 }
939
940 /*
941 * re_detach:
942 * Detach a rtk interface.
943 */
944 int
945 re_detach(struct rtk_softc *sc)
946 {
947 struct ifnet *ifp = &sc->ethercom.ec_if;
948 int i;
949
950 /*
951 * Succeed now if there isn't any work to do.
952 */
953 if ((sc->sc_flags & RTK_ATTACHED) == 0)
954 return 0;
955
956 /* Unhook our tick handler. */
957 callout_stop(&sc->rtk_tick_ch);
958
959 /* Detach all PHYs. */
960 mii_detach(&sc->mii, MII_PHY_ANY, MII_OFFSET_ANY);
961
962 /* Delete all remaining media. */
963 ifmedia_delete_instance(&sc->mii.mii_media, IFM_INST_ANY);
964
965 rnd_detach_source(&sc->rnd_source);
966 ether_ifdetach(ifp);
967 if_detach(ifp);
968
969 /* Destroy DMA maps for RX buffers. */
970 for (i = 0; i < RE_RX_DESC_CNT; i++)
971 if (sc->re_ldata.re_rxsoft[i].rxs_dmamap != NULL)
972 bus_dmamap_destroy(sc->sc_dmat,
973 sc->re_ldata.re_rxsoft[i].rxs_dmamap);
974
975 /* Free DMA'able memory for the RX ring. */
976 bus_dmamap_unload(sc->sc_dmat, sc->re_ldata.re_rx_list_map);
977 bus_dmamap_destroy(sc->sc_dmat, sc->re_ldata.re_rx_list_map);
978 bus_dmamem_unmap(sc->sc_dmat,
979 (void *)sc->re_ldata.re_rx_list, RE_RX_DMAMEM_SZ);
980 bus_dmamem_free(sc->sc_dmat,
981 &sc->re_ldata.re_rx_listseg, sc->re_ldata.re_rx_listnseg);
982
983 /* Destroy DMA maps for TX buffers. */
984 for (i = 0; i < RE_TX_QLEN; i++)
985 if (sc->re_ldata.re_txq[i].txq_dmamap != NULL)
986 bus_dmamap_destroy(sc->sc_dmat,
987 sc->re_ldata.re_txq[i].txq_dmamap);
988
989 /* Free DMA'able memory for the TX ring. */
990 bus_dmamap_unload(sc->sc_dmat, sc->re_ldata.re_tx_list_map);
991 bus_dmamap_destroy(sc->sc_dmat, sc->re_ldata.re_tx_list_map);
992 bus_dmamem_unmap(sc->sc_dmat,
993 (void *)sc->re_ldata.re_tx_list, RE_TX_LIST_SZ(sc));
994 bus_dmamem_free(sc->sc_dmat,
995 &sc->re_ldata.re_tx_listseg, sc->re_ldata.re_tx_listnseg);
996
997 pmf_device_deregister(sc->sc_dev);
998
999 /* we don't want to run again */
1000 sc->sc_flags &= ~RTK_ATTACHED;
1001
1002 return 0;
1003 }
1004
1005 /*
1006 * re_enable:
1007 * Enable the RTL81X9 chip.
1008 */
1009 static int
1010 re_enable(struct rtk_softc *sc)
1011 {
1012
1013 if (RTK_IS_ENABLED(sc) == 0 && sc->sc_enable != NULL) {
1014 if ((*sc->sc_enable)(sc) != 0) {
1015 printf("%s: device enable failed\n",
1016 device_xname(sc->sc_dev));
1017 return EIO;
1018 }
1019 sc->sc_flags |= RTK_ENABLED;
1020 }
1021 return 0;
1022 }
1023
1024 /*
1025 * re_disable:
1026 * Disable the RTL81X9 chip.
1027 */
1028 static void
1029 re_disable(struct rtk_softc *sc)
1030 {
1031
1032 if (RTK_IS_ENABLED(sc) && sc->sc_disable != NULL) {
1033 (*sc->sc_disable)(sc);
1034 sc->sc_flags &= ~RTK_ENABLED;
1035 }
1036 }
1037
1038 static int
1039 re_newbuf(struct rtk_softc *sc, int idx, struct mbuf *m)
1040 {
1041 struct mbuf *n = NULL;
1042 bus_dmamap_t map;
1043 struct re_desc *d;
1044 struct re_rxsoft *rxs;
1045 uint32_t cmdstat;
1046 int error;
1047
1048 if (m == NULL) {
1049 MGETHDR(n, M_DONTWAIT, MT_DATA);
1050 if (n == NULL)
1051 return ENOBUFS;
1052
1053 MCLGET(n, M_DONTWAIT);
1054 if ((n->m_flags & M_EXT) == 0) {
1055 m_freem(n);
1056 return ENOBUFS;
1057 }
1058 m = n;
1059 } else
1060 m->m_data = m->m_ext.ext_buf;
1061
1062 /*
1063 * Initialize mbuf length fields and fixup
1064 * alignment so that the frame payload is
1065 * longword aligned.
1066 */
1067 m->m_len = m->m_pkthdr.len = MCLBYTES - RE_ETHER_ALIGN;
1068 m->m_data += RE_ETHER_ALIGN;
1069
1070 rxs = &sc->re_ldata.re_rxsoft[idx];
1071 map = rxs->rxs_dmamap;
1072 error = bus_dmamap_load_mbuf(sc->sc_dmat, map, m,
1073 BUS_DMA_READ|BUS_DMA_NOWAIT);
1074
1075 if (error)
1076 goto out;
1077
1078 bus_dmamap_sync(sc->sc_dmat, map, 0, map->dm_mapsize,
1079 BUS_DMASYNC_PREREAD);
1080
1081 d = &sc->re_ldata.re_rx_list[idx];
1082 #ifdef DIAGNOSTIC
1083 RE_RXDESCSYNC(sc, idx, BUS_DMASYNC_POSTREAD|BUS_DMASYNC_POSTWRITE);
1084 cmdstat = le32toh(d->re_cmdstat);
1085 RE_RXDESCSYNC(sc, idx, BUS_DMASYNC_PREREAD);
1086 if (cmdstat & RE_RDESC_STAT_OWN) {
1087 panic("%s: tried to map busy RX descriptor",
1088 device_xname(sc->sc_dev));
1089 }
1090 #endif
1091
1092 rxs->rxs_mbuf = m;
1093
1094 d->re_vlanctl = 0;
1095 cmdstat = map->dm_segs[0].ds_len;
1096 if (idx == (RE_RX_DESC_CNT - 1))
1097 cmdstat |= RE_RDESC_CMD_EOR;
1098 re_set_bufaddr(d, map->dm_segs[0].ds_addr);
1099 d->re_cmdstat = htole32(cmdstat);
1100 RE_RXDESCSYNC(sc, idx, BUS_DMASYNC_PREREAD|BUS_DMASYNC_PREWRITE);
1101 cmdstat |= RE_RDESC_CMD_OWN;
1102 d->re_cmdstat = htole32(cmdstat);
1103 RE_RXDESCSYNC(sc, idx, BUS_DMASYNC_PREREAD|BUS_DMASYNC_PREWRITE);
1104
1105 return 0;
1106 out:
1107 if (n != NULL)
1108 m_freem(n);
1109 return ENOMEM;
1110 }
1111
1112 static int
1113 re_tx_list_init(struct rtk_softc *sc)
1114 {
1115 int i;
1116
1117 memset(sc->re_ldata.re_tx_list, 0, RE_TX_LIST_SZ(sc));
1118 for (i = 0; i < RE_TX_QLEN; i++) {
1119 sc->re_ldata.re_txq[i].txq_mbuf = NULL;
1120 }
1121
1122 bus_dmamap_sync(sc->sc_dmat,
1123 sc->re_ldata.re_tx_list_map, 0,
1124 sc->re_ldata.re_tx_list_map->dm_mapsize,
1125 BUS_DMASYNC_PREREAD|BUS_DMASYNC_PREWRITE);
1126 sc->re_ldata.re_txq_prodidx = 0;
1127 sc->re_ldata.re_txq_considx = 0;
1128 sc->re_ldata.re_txq_free = RE_TX_QLEN;
1129 sc->re_ldata.re_tx_free = RE_TX_DESC_CNT(sc);
1130 sc->re_ldata.re_tx_nextfree = 0;
1131
1132 return 0;
1133 }
1134
1135 static int
1136 re_rx_list_init(struct rtk_softc *sc)
1137 {
1138 int i;
1139
1140 memset(sc->re_ldata.re_rx_list, 0, RE_RX_LIST_SZ);
1141
1142 for (i = 0; i < RE_RX_DESC_CNT; i++) {
1143 if (re_newbuf(sc, i, NULL) == ENOBUFS)
1144 return ENOBUFS;
1145 }
1146
1147 sc->re_ldata.re_rx_prodidx = 0;
1148 sc->re_head = sc->re_tail = NULL;
1149
1150 return 0;
1151 }
1152
1153 /*
1154 * RX handler for C+ and 8169. For the gigE chips, we support
1155 * the reception of jumbo frames that have been fragmented
1156 * across multiple 2K mbuf cluster buffers.
1157 */
1158 static void
1159 re_rxeof(struct rtk_softc *sc)
1160 {
1161 struct mbuf *m;
1162 struct ifnet *ifp;
1163 int i, total_len;
1164 struct re_desc *cur_rx;
1165 struct re_rxsoft *rxs;
1166 uint32_t rxstat, rxvlan;
1167
1168 ifp = &sc->ethercom.ec_if;
1169
1170 for (i = sc->re_ldata.re_rx_prodidx;; i = RE_NEXT_RX_DESC(sc, i)) {
1171 cur_rx = &sc->re_ldata.re_rx_list[i];
1172 RE_RXDESCSYNC(sc, i,
1173 BUS_DMASYNC_POSTREAD|BUS_DMASYNC_POSTWRITE);
1174 rxstat = le32toh(cur_rx->re_cmdstat);
1175 rxvlan = le32toh(cur_rx->re_vlanctl);
1176 RE_RXDESCSYNC(sc, i, BUS_DMASYNC_PREREAD);
1177 if ((rxstat & RE_RDESC_STAT_OWN) != 0) {
1178 break;
1179 }
1180 total_len = rxstat & sc->re_rxlenmask;
1181 rxs = &sc->re_ldata.re_rxsoft[i];
1182 m = rxs->rxs_mbuf;
1183
1184 /* Invalidate the RX mbuf and unload its map */
1185
1186 bus_dmamap_sync(sc->sc_dmat,
1187 rxs->rxs_dmamap, 0, rxs->rxs_dmamap->dm_mapsize,
1188 BUS_DMASYNC_POSTREAD);
1189 bus_dmamap_unload(sc->sc_dmat, rxs->rxs_dmamap);
1190
1191 if ((rxstat & RE_RDESC_STAT_EOF) == 0) {
1192 m->m_len = MCLBYTES - RE_ETHER_ALIGN;
1193 if (sc->re_head == NULL)
1194 sc->re_head = sc->re_tail = m;
1195 else {
1196 m_remove_pkthdr(m);
1197 sc->re_tail->m_next = m;
1198 sc->re_tail = m;
1199 }
1200 re_newbuf(sc, i, NULL);
1201 continue;
1202 }
1203
1204 /*
1205 * NOTE: for the 8139C+, the frame length field
1206 * is always 12 bits in size, but for the gigE chips,
1207 * it is 13 bits (since the max RX frame length is 16K).
1208 * Unfortunately, all 32 bits in the status word
1209 * were already used, so to make room for the extra
1210 * length bit, RealTek took out the 'frame alignment
1211 * error' bit and shifted the other status bits
1212 * over one slot. The OWN, EOR, FS and LS bits are
1213 * still in the same places. We have already extracted
1214 * the frame length and checked the OWN bit, so rather
1215 * than using an alternate bit mapping, we shift the
1216 * status bits one space to the right so we can evaluate
1217 * them using the 8169 status as though it was in the
1218 * same format as that of the 8139C+.
1219 */
1220 if ((sc->sc_quirk & RTKQ_8139CPLUS) == 0)
1221 rxstat >>= 1;
1222
1223 if (__predict_false((rxstat & RE_RDESC_STAT_RXERRSUM) != 0)) {
1224 #ifdef RE_DEBUG
1225 printf("%s: RX error (rxstat = 0x%08x)",
1226 device_xname(sc->sc_dev), rxstat);
1227 if (rxstat & RE_RDESC_STAT_FRALIGN)
1228 printf(", frame alignment error");
1229 if (rxstat & RE_RDESC_STAT_BUFOFLOW)
1230 printf(", out of buffer space");
1231 if (rxstat & RE_RDESC_STAT_FIFOOFLOW)
1232 printf(", FIFO overrun");
1233 if (rxstat & RE_RDESC_STAT_GIANT)
1234 printf(", giant packet");
1235 if (rxstat & RE_RDESC_STAT_RUNT)
1236 printf(", runt packet");
1237 if (rxstat & RE_RDESC_STAT_CRCERR)
1238 printf(", CRC error");
1239 printf("\n");
1240 #endif
1241 ifp->if_ierrors++;
1242 /*
1243 * If this is part of a multi-fragment packet,
1244 * discard all the pieces.
1245 */
1246 if (sc->re_head != NULL) {
1247 m_freem(sc->re_head);
1248 sc->re_head = sc->re_tail = NULL;
1249 }
1250 re_newbuf(sc, i, m);
1251 continue;
1252 }
1253
1254 /*
1255 * If allocating a replacement mbuf fails,
1256 * reload the current one.
1257 */
1258
1259 if (__predict_false(re_newbuf(sc, i, NULL) != 0)) {
1260 ifp->if_ierrors++;
1261 if (sc->re_head != NULL) {
1262 m_freem(sc->re_head);
1263 sc->re_head = sc->re_tail = NULL;
1264 }
1265 re_newbuf(sc, i, m);
1266 continue;
1267 }
1268
1269 if (sc->re_head != NULL) {
1270 m->m_len = total_len % (MCLBYTES - RE_ETHER_ALIGN);
1271 /*
1272 * Special case: if there's 4 bytes or less
1273 * in this buffer, the mbuf can be discarded:
1274 * the last 4 bytes is the CRC, which we don't
1275 * care about anyway.
1276 */
1277 if (m->m_len <= ETHER_CRC_LEN) {
1278 sc->re_tail->m_len -=
1279 (ETHER_CRC_LEN - m->m_len);
1280 m_freem(m);
1281 } else {
1282 m->m_len -= ETHER_CRC_LEN;
1283 m_remove_pkthdr(m);
1284 sc->re_tail->m_next = m;
1285 }
1286 m = sc->re_head;
1287 sc->re_head = sc->re_tail = NULL;
1288 m->m_pkthdr.len = total_len - ETHER_CRC_LEN;
1289 } else
1290 m->m_pkthdr.len = m->m_len =
1291 (total_len - ETHER_CRC_LEN);
1292
1293 m_set_rcvif(m, ifp);
1294
1295 /* Do RX checksumming */
1296 if ((sc->sc_quirk & RTKQ_DESCV2) == 0) {
1297 /* Check IP header checksum */
1298 if ((rxstat & RE_RDESC_STAT_PROTOID) != 0) {
1299 m->m_pkthdr.csum_flags |= M_CSUM_IPv4;
1300 if (rxstat & RE_RDESC_STAT_IPSUMBAD)
1301 m->m_pkthdr.csum_flags |=
1302 M_CSUM_IPv4_BAD;
1303
1304 /* Check TCP/UDP checksum */
1305 if (RE_TCPPKT(rxstat)) {
1306 m->m_pkthdr.csum_flags |= M_CSUM_TCPv4;
1307 if (rxstat & RE_RDESC_STAT_TCPSUMBAD)
1308 m->m_pkthdr.csum_flags |=
1309 M_CSUM_TCP_UDP_BAD;
1310 } else if (RE_UDPPKT(rxstat)) {
1311 m->m_pkthdr.csum_flags |= M_CSUM_UDPv4;
1312 if (rxstat & RE_RDESC_STAT_UDPSUMBAD) {
1313 /*
1314 * XXX: 8139C+ thinks UDP csum
1315 * 0xFFFF is bad, force software
1316 * calculation.
1317 */
1318 if (sc->sc_quirk & RTKQ_8139CPLUS)
1319 m->m_pkthdr.csum_flags
1320 &= ~M_CSUM_UDPv4;
1321 else
1322 m->m_pkthdr.csum_flags
1323 |= M_CSUM_TCP_UDP_BAD;
1324 }
1325 }
1326 }
1327 } else {
1328 /* Check IPv4 header checksum */
1329 if ((rxvlan & RE_RDESC_VLANCTL_IPV4) != 0) {
1330 m->m_pkthdr.csum_flags |= M_CSUM_IPv4;
1331 if (rxstat & RE_RDESC_STAT_IPSUMBAD)
1332 m->m_pkthdr.csum_flags |=
1333 M_CSUM_IPv4_BAD;
1334
1335 /* Check TCPv4/UDPv4 checksum */
1336 if (RE_TCPPKT(rxstat)) {
1337 m->m_pkthdr.csum_flags |= M_CSUM_TCPv4;
1338 if (rxstat & RE_RDESC_STAT_TCPSUMBAD)
1339 m->m_pkthdr.csum_flags |=
1340 M_CSUM_TCP_UDP_BAD;
1341 } else if (RE_UDPPKT(rxstat)) {
1342 m->m_pkthdr.csum_flags |= M_CSUM_UDPv4;
1343 if (rxstat & RE_RDESC_STAT_UDPSUMBAD)
1344 m->m_pkthdr.csum_flags |=
1345 M_CSUM_TCP_UDP_BAD;
1346 }
1347 }
1348 /* XXX Check TCPv6/UDPv6 checksum? */
1349 }
1350
1351 if (rxvlan & RE_RDESC_VLANCTL_TAG) {
1352 vlan_set_tag(m,
1353 bswap16(rxvlan & RE_RDESC_VLANCTL_DATA));
1354 }
1355 if_percpuq_enqueue(ifp->if_percpuq, m);
1356 }
1357
1358 sc->re_ldata.re_rx_prodidx = i;
1359 }
1360
1361 static void
1362 re_txeof(struct rtk_softc *sc)
1363 {
1364 struct ifnet *ifp;
1365 struct re_txq *txq;
1366 uint32_t txstat;
1367 int idx, descidx;
1368
1369 ifp = &sc->ethercom.ec_if;
1370
1371 for (idx = sc->re_ldata.re_txq_considx;
1372 sc->re_ldata.re_txq_free < RE_TX_QLEN;
1373 idx = RE_NEXT_TXQ(sc, idx), sc->re_ldata.re_txq_free++) {
1374 txq = &sc->re_ldata.re_txq[idx];
1375 KASSERT(txq->txq_mbuf != NULL);
1376
1377 descidx = txq->txq_descidx;
1378 RE_TXDESCSYNC(sc, descidx,
1379 BUS_DMASYNC_POSTREAD|BUS_DMASYNC_POSTWRITE);
1380 txstat =
1381 le32toh(sc->re_ldata.re_tx_list[descidx].re_cmdstat);
1382 RE_TXDESCSYNC(sc, descidx, BUS_DMASYNC_PREREAD);
1383 KASSERT((txstat & RE_TDESC_CMD_EOF) != 0);
1384 if (txstat & RE_TDESC_CMD_OWN) {
1385 break;
1386 }
1387
1388 sc->re_ldata.re_tx_free += txq->txq_nsegs;
1389 KASSERT(sc->re_ldata.re_tx_free <= RE_TX_DESC_CNT(sc));
1390 bus_dmamap_sync(sc->sc_dmat, txq->txq_dmamap,
1391 0, txq->txq_dmamap->dm_mapsize, BUS_DMASYNC_POSTWRITE);
1392 bus_dmamap_unload(sc->sc_dmat, txq->txq_dmamap);
1393 m_freem(txq->txq_mbuf);
1394 txq->txq_mbuf = NULL;
1395
1396 if (txstat & (RE_TDESC_STAT_EXCESSCOL | RE_TDESC_STAT_COLCNT))
1397 ifp->if_collisions++;
1398 if (txstat & RE_TDESC_STAT_TXERRSUM)
1399 ifp->if_oerrors++;
1400 else
1401 ifp->if_opackets++;
1402 }
1403
1404 sc->re_ldata.re_txq_considx = idx;
1405
1406 if (sc->re_ldata.re_txq_free > RE_NTXDESC_RSVD)
1407 ifp->if_flags &= ~IFF_OACTIVE;
1408
1409 /*
1410 * If not all descriptors have been released reaped yet,
1411 * reload the timer so that we will eventually get another
1412 * interrupt that will cause us to re-enter this routine.
1413 * This is done in case the transmitter has gone idle.
1414 */
1415 if (sc->re_ldata.re_txq_free < RE_TX_QLEN) {
1416 if ((sc->sc_quirk & RTKQ_IM_HW) == 0)
1417 CSR_WRITE_4(sc, RTK_TIMERCNT, 1);
1418 if ((sc->sc_quirk & RTKQ_PCIE) != 0) {
1419 /*
1420 * Some chips will ignore a second TX request
1421 * issued while an existing transmission is in
1422 * progress. If the transmitter goes idle but
1423 * there are still packets waiting to be sent,
1424 * we need to restart the channel here to flush
1425 * them out. This only seems to be required with
1426 * the PCIe devices.
1427 */
1428 CSR_WRITE_1(sc, RTK_GTXSTART, RTK_TXSTART_START);
1429 }
1430 } else
1431 ifp->if_timer = 0;
1432 }
1433
1434 static void
1435 re_tick(void *arg)
1436 {
1437 struct rtk_softc *sc = arg;
1438 int s;
1439
1440 /* XXX: just return for 8169S/8110S with rev 2 or newer phy */
1441 s = splnet();
1442
1443 mii_tick(&sc->mii);
1444 splx(s);
1445
1446 callout_reset(&sc->rtk_tick_ch, hz, re_tick, sc);
1447 }
1448
1449 int
1450 re_intr(void *arg)
1451 {
1452 struct rtk_softc *sc = arg;
1453 struct ifnet *ifp;
1454 uint16_t status;
1455 int handled = 0;
1456
1457 if (!device_has_power(sc->sc_dev))
1458 return 0;
1459
1460 ifp = &sc->ethercom.ec_if;
1461
1462 if ((ifp->if_flags & IFF_UP) == 0)
1463 return 0;
1464
1465 const uint16_t status_mask = (sc->sc_quirk & RTKQ_IM_HW) ?
1466 RTK_INTRS_IM_HW : RTK_INTRS_CPLUS;
1467
1468 for (;;) {
1469
1470 status = CSR_READ_2(sc, RTK_ISR);
1471 /* If the card has gone away the read returns 0xffff. */
1472 if (status == 0xffff)
1473 break;
1474 if (status) {
1475 handled = 1;
1476 CSR_WRITE_2(sc, RTK_ISR, status);
1477 }
1478
1479 if ((status & status_mask) == 0)
1480 break;
1481
1482 if (status & (RTK_ISR_RX_OK | RTK_ISR_RX_ERR))
1483 re_rxeof(sc);
1484
1485 if (status & (RTK_ISR_TIMEOUT_EXPIRED | RTK_ISR_TX_ERR |
1486 RTK_ISR_TX_DESC_UNAVAIL | RTK_ISR_TX_OK))
1487 re_txeof(sc);
1488
1489 if (status & RTK_ISR_SYSTEM_ERR) {
1490 re_init(ifp);
1491 }
1492
1493 if (status & RTK_ISR_LINKCHG) {
1494 callout_stop(&sc->rtk_tick_ch);
1495 re_tick(sc);
1496 }
1497 }
1498
1499 if (handled)
1500 if_schedule_deferred_start(ifp);
1501
1502 rnd_add_uint32(&sc->rnd_source, status);
1503
1504 return handled;
1505 }
1506
1507
1508
1509 /*
1510 * Main transmit routine for C+ and gigE NICs.
1511 */
1512
1513 static void
1514 re_start(struct ifnet *ifp)
1515 {
1516 struct rtk_softc *sc;
1517 struct mbuf *m;
1518 bus_dmamap_t map;
1519 struct re_txq *txq;
1520 struct re_desc *d;
1521 uint32_t cmdstat, re_flags, vlanctl;
1522 int ofree, idx, error, nsegs, seg;
1523 int startdesc, curdesc, lastdesc;
1524 bool pad;
1525
1526 sc = ifp->if_softc;
1527 ofree = sc->re_ldata.re_txq_free;
1528
1529 for (idx = sc->re_ldata.re_txq_prodidx;; idx = RE_NEXT_TXQ(sc, idx)) {
1530
1531 IFQ_POLL(&ifp->if_snd, m);
1532 if (m == NULL)
1533 break;
1534
1535 if (sc->re_ldata.re_txq_free == 0 ||
1536 sc->re_ldata.re_tx_free == 0) {
1537 /* no more free slots left */
1538 ifp->if_flags |= IFF_OACTIVE;
1539 break;
1540 }
1541
1542 /*
1543 * Set up checksum offload. Note: checksum offload bits must
1544 * appear in all descriptors of a multi-descriptor transmit
1545 * attempt. (This is according to testing done with an 8169
1546 * chip. I'm not sure if this is a requirement or a bug.)
1547 */
1548
1549 vlanctl = 0;
1550 if ((m->m_pkthdr.csum_flags & M_CSUM_TSOv4) != 0) {
1551 uint32_t segsz = m->m_pkthdr.segsz;
1552
1553 if ((sc->sc_quirk & RTKQ_DESCV2) == 0) {
1554 re_flags = RE_TDESC_CMD_LGSEND |
1555 (segsz << RE_TDESC_CMD_MSSVAL_SHIFT);
1556 } else {
1557 re_flags = RE_TDESC_CMD_LGSEND_V4;
1558 vlanctl |=
1559 (segsz << RE_TDESC_VLANCTL_MSSVAL_SHIFT);
1560 }
1561 } else {
1562 /*
1563 * set RE_TDESC_CMD_IPCSUM if any checksum offloading
1564 * is requested. otherwise, RE_TDESC_CMD_TCPCSUM/
1565 * RE_TDESC_CMD_UDPCSUM doesn't make effects.
1566 */
1567 re_flags = 0;
1568 if ((m->m_pkthdr.csum_flags &
1569 (M_CSUM_IPv4 | M_CSUM_TCPv4 | M_CSUM_UDPv4))
1570 != 0) {
1571 if ((sc->sc_quirk & RTKQ_DESCV2) == 0) {
1572 re_flags |= RE_TDESC_CMD_IPCSUM;
1573 if (m->m_pkthdr.csum_flags &
1574 M_CSUM_TCPv4) {
1575 re_flags |=
1576 RE_TDESC_CMD_TCPCSUM;
1577 } else if (m->m_pkthdr.csum_flags &
1578 M_CSUM_UDPv4) {
1579 re_flags |=
1580 RE_TDESC_CMD_UDPCSUM;
1581 }
1582 } else {
1583 vlanctl |= RE_TDESC_VLANCTL_IPCSUM;
1584 if (m->m_pkthdr.csum_flags &
1585 M_CSUM_TCPv4) {
1586 vlanctl |=
1587 RE_TDESC_VLANCTL_TCPCSUM;
1588 } else if (m->m_pkthdr.csum_flags &
1589 M_CSUM_UDPv4) {
1590 vlanctl |=
1591 RE_TDESC_VLANCTL_UDPCSUM;
1592 }
1593 }
1594 }
1595 }
1596
1597 txq = &sc->re_ldata.re_txq[idx];
1598 map = txq->txq_dmamap;
1599 error = bus_dmamap_load_mbuf(sc->sc_dmat, map, m,
1600 BUS_DMA_WRITE|BUS_DMA_NOWAIT);
1601
1602 if (__predict_false(error)) {
1603 /* XXX try to defrag if EFBIG? */
1604 printf("%s: can't map mbuf (error %d)\n",
1605 device_xname(sc->sc_dev), error);
1606
1607 IFQ_DEQUEUE(&ifp->if_snd, m);
1608 m_freem(m);
1609 ifp->if_oerrors++;
1610 continue;
1611 }
1612
1613 nsegs = map->dm_nsegs;
1614 pad = false;
1615 if (__predict_false(m->m_pkthdr.len <= RE_IP4CSUMTX_PADLEN &&
1616 (re_flags & RE_TDESC_CMD_IPCSUM) != 0 &&
1617 (sc->sc_quirk & RTKQ_DESCV2) == 0)) {
1618 pad = true;
1619 nsegs++;
1620 }
1621
1622 if (nsegs > sc->re_ldata.re_tx_free) {
1623 /*
1624 * Not enough free descriptors to transmit this packet.
1625 */
1626 ifp->if_flags |= IFF_OACTIVE;
1627 bus_dmamap_unload(sc->sc_dmat, map);
1628 break;
1629 }
1630
1631 IFQ_DEQUEUE(&ifp->if_snd, m);
1632
1633 /*
1634 * Make sure that the caches are synchronized before we
1635 * ask the chip to start DMA for the packet data.
1636 */
1637 bus_dmamap_sync(sc->sc_dmat, map, 0, map->dm_mapsize,
1638 BUS_DMASYNC_PREWRITE);
1639
1640 /*
1641 * Set up hardware VLAN tagging. Note: vlan tag info must
1642 * appear in all descriptors of a multi-descriptor
1643 * transmission attempt.
1644 */
1645 if (vlan_has_tag(m))
1646 vlanctl |= bswap16(vlan_get_tag(m)) |
1647 RE_TDESC_VLANCTL_TAG;
1648
1649 /*
1650 * Map the segment array into descriptors.
1651 * Note that we set the start-of-frame and
1652 * end-of-frame markers for either TX or RX,
1653 * but they really only have meaning in the TX case.
1654 * (In the RX case, it's the chip that tells us
1655 * where packets begin and end.)
1656 * We also keep track of the end of the ring
1657 * and set the end-of-ring bits as needed,
1658 * and we set the ownership bits in all except
1659 * the very first descriptor. (The caller will
1660 * set this descriptor later when it start
1661 * transmission or reception.)
1662 */
1663 curdesc = startdesc = sc->re_ldata.re_tx_nextfree;
1664 lastdesc = -1;
1665 for (seg = 0; seg < map->dm_nsegs;
1666 seg++, curdesc = RE_NEXT_TX_DESC(sc, curdesc)) {
1667 d = &sc->re_ldata.re_tx_list[curdesc];
1668 #ifdef DIAGNOSTIC
1669 RE_TXDESCSYNC(sc, curdesc,
1670 BUS_DMASYNC_POSTREAD|BUS_DMASYNC_POSTWRITE);
1671 cmdstat = le32toh(d->re_cmdstat);
1672 RE_TXDESCSYNC(sc, curdesc, BUS_DMASYNC_PREREAD);
1673 if (cmdstat & RE_TDESC_STAT_OWN) {
1674 panic("%s: tried to map busy TX descriptor",
1675 device_xname(sc->sc_dev));
1676 }
1677 #endif
1678
1679 d->re_vlanctl = htole32(vlanctl);
1680 re_set_bufaddr(d, map->dm_segs[seg].ds_addr);
1681 cmdstat = re_flags | map->dm_segs[seg].ds_len;
1682 if (seg == 0)
1683 cmdstat |= RE_TDESC_CMD_SOF;
1684 else
1685 cmdstat |= RE_TDESC_CMD_OWN;
1686 if (curdesc == (RE_TX_DESC_CNT(sc) - 1))
1687 cmdstat |= RE_TDESC_CMD_EOR;
1688 if (seg == nsegs - 1) {
1689 cmdstat |= RE_TDESC_CMD_EOF;
1690 lastdesc = curdesc;
1691 }
1692 d->re_cmdstat = htole32(cmdstat);
1693 RE_TXDESCSYNC(sc, curdesc,
1694 BUS_DMASYNC_PREREAD|BUS_DMASYNC_PREWRITE);
1695 }
1696 if (__predict_false(pad)) {
1697 d = &sc->re_ldata.re_tx_list[curdesc];
1698 d->re_vlanctl = htole32(vlanctl);
1699 re_set_bufaddr(d, RE_TXPADDADDR(sc));
1700 cmdstat = re_flags |
1701 RE_TDESC_CMD_OWN | RE_TDESC_CMD_EOF |
1702 (RE_IP4CSUMTX_PADLEN + 1 - m->m_pkthdr.len);
1703 if (curdesc == (RE_TX_DESC_CNT(sc) - 1))
1704 cmdstat |= RE_TDESC_CMD_EOR;
1705 d->re_cmdstat = htole32(cmdstat);
1706 RE_TXDESCSYNC(sc, curdesc,
1707 BUS_DMASYNC_PREREAD|BUS_DMASYNC_PREWRITE);
1708 lastdesc = curdesc;
1709 curdesc = RE_NEXT_TX_DESC(sc, curdesc);
1710 }
1711 KASSERT(lastdesc != -1);
1712
1713 /* Transfer ownership of packet to the chip. */
1714
1715 sc->re_ldata.re_tx_list[startdesc].re_cmdstat |=
1716 htole32(RE_TDESC_CMD_OWN);
1717 RE_TXDESCSYNC(sc, startdesc,
1718 BUS_DMASYNC_PREREAD|BUS_DMASYNC_PREWRITE);
1719
1720 /* update info of TX queue and descriptors */
1721 txq->txq_mbuf = m;
1722 txq->txq_descidx = lastdesc;
1723 txq->txq_nsegs = nsegs;
1724
1725 sc->re_ldata.re_txq_free--;
1726 sc->re_ldata.re_tx_free -= nsegs;
1727 sc->re_ldata.re_tx_nextfree = curdesc;
1728
1729 /*
1730 * If there's a BPF listener, bounce a copy of this frame
1731 * to him.
1732 */
1733 bpf_mtap(ifp, m, BPF_D_OUT);
1734 }
1735
1736 if (sc->re_ldata.re_txq_free < ofree) {
1737 /*
1738 * TX packets are enqueued.
1739 */
1740 sc->re_ldata.re_txq_prodidx = idx;
1741
1742 /*
1743 * Start the transmitter to poll.
1744 *
1745 * RealTek put the TX poll request register in a different
1746 * location on the 8169 gigE chip. I don't know why.
1747 */
1748 if ((sc->sc_quirk & RTKQ_8139CPLUS) != 0)
1749 CSR_WRITE_1(sc, RTK_TXSTART, RTK_TXSTART_START);
1750 else
1751 CSR_WRITE_1(sc, RTK_GTXSTART, RTK_TXSTART_START);
1752
1753 if ((sc->sc_quirk & RTKQ_IM_HW) == 0) {
1754 /*
1755 * Use the countdown timer for interrupt moderation.
1756 * 'TX done' interrupts are disabled. Instead, we reset
1757 * the countdown timer, which will begin counting until
1758 * it hits the value in the TIMERINT register, and then
1759 * trigger an interrupt. Each time we write to the
1760 * TIMERCNT register, the timer count is reset to 0.
1761 */
1762 CSR_WRITE_4(sc, RTK_TIMERCNT, 1);
1763 }
1764
1765 /*
1766 * Set a timeout in case the chip goes out to lunch.
1767 */
1768 ifp->if_timer = 5;
1769 }
1770 }
1771
1772 static int
1773 re_init(struct ifnet *ifp)
1774 {
1775 struct rtk_softc *sc = ifp->if_softc;
1776 uint32_t rxcfg = 0;
1777 uint16_t cfg;
1778 int error;
1779 #ifdef RE_USE_EECMD
1780 const uint8_t *enaddr;
1781 uint32_t reg;
1782 #endif
1783
1784 if ((error = re_enable(sc)) != 0)
1785 goto out;
1786
1787 /*
1788 * Cancel pending I/O and free all RX/TX buffers.
1789 */
1790 re_stop(ifp, 0);
1791
1792 re_reset(sc);
1793
1794 /*
1795 * Enable C+ RX and TX mode, as well as VLAN stripping and
1796 * RX checksum offload. We must configure the C+ register
1797 * before all others.
1798 */
1799 cfg = RE_CPLUSCMD_PCI_MRW;
1800
1801 /*
1802 * XXX: For old 8169 set bit 14.
1803 * For 8169S/8110S and above, do not set bit 14.
1804 */
1805 if ((sc->sc_quirk & RTKQ_8169NONS) != 0)
1806 cfg |= (0x1 << 14);
1807
1808 if ((sc->ethercom.ec_capenable & ETHERCAP_VLAN_HWTAGGING) != 0)
1809 cfg |= RE_CPLUSCMD_VLANSTRIP;
1810 if ((ifp->if_capenable & (IFCAP_CSUM_IPv4_Rx |
1811 IFCAP_CSUM_TCPv4_Rx | IFCAP_CSUM_UDPv4_Rx)) != 0)
1812 cfg |= RE_CPLUSCMD_RXCSUM_ENB;
1813 if ((sc->sc_quirk & RTKQ_MACSTAT) != 0) {
1814 cfg |= RE_CPLUSCMD_MACSTAT_DIS;
1815 cfg |= RE_CPLUSCMD_TXENB;
1816 } else
1817 cfg |= RE_CPLUSCMD_RXENB | RE_CPLUSCMD_TXENB;
1818
1819 CSR_WRITE_2(sc, RTK_CPLUS_CMD, cfg);
1820
1821 /* XXX: from Realtek-supplied Linux driver. Wholly undocumented. */
1822 if ((sc->sc_quirk & RTKQ_8139CPLUS) == 0) {
1823 if ((sc->sc_quirk & RTKQ_IM_HW) == 0) {
1824 CSR_WRITE_2(sc, RTK_IM, 0x0000);
1825 } else {
1826 CSR_WRITE_2(sc, RTK_IM, 0x5151);
1827 }
1828 }
1829
1830 DELAY(10000);
1831
1832 #ifdef RE_USE_EECMD
1833 /*
1834 * Init our MAC address. Even though the chipset
1835 * documentation doesn't mention it, we need to enter "Config
1836 * register write enable" mode to modify the ID registers.
1837 */
1838 CSR_WRITE_1(sc, RTK_EECMD, RTK_EEMODE_WRITECFG);
1839 enaddr = CLLADDR(ifp->if_sadl);
1840 reg = enaddr[0] | (enaddr[1] << 8) |
1841 (enaddr[2] << 16) | (enaddr[3] << 24);
1842 CSR_WRITE_4(sc, RTK_IDR0, reg);
1843 reg = enaddr[4] | (enaddr[5] << 8);
1844 CSR_WRITE_4(sc, RTK_IDR4, reg);
1845 CSR_WRITE_1(sc, RTK_EECMD, RTK_EEMODE_OFF);
1846 #endif
1847
1848 /*
1849 * For C+ mode, initialize the RX descriptors and mbufs.
1850 */
1851 re_rx_list_init(sc);
1852 re_tx_list_init(sc);
1853
1854 /*
1855 * Load the addresses of the RX and TX lists into the chip.
1856 */
1857 CSR_WRITE_4(sc, RTK_RXLIST_ADDR_HI,
1858 RE_ADDR_HI(sc->re_ldata.re_rx_list_map->dm_segs[0].ds_addr));
1859 CSR_WRITE_4(sc, RTK_RXLIST_ADDR_LO,
1860 RE_ADDR_LO(sc->re_ldata.re_rx_list_map->dm_segs[0].ds_addr));
1861
1862 CSR_WRITE_4(sc, RTK_TXLIST_ADDR_HI,
1863 RE_ADDR_HI(sc->re_ldata.re_tx_list_map->dm_segs[0].ds_addr));
1864 CSR_WRITE_4(sc, RTK_TXLIST_ADDR_LO,
1865 RE_ADDR_LO(sc->re_ldata.re_tx_list_map->dm_segs[0].ds_addr));
1866
1867 if (sc->sc_quirk & RTKQ_RXDV_GATED) {
1868 CSR_WRITE_4(sc, RTK_MISC,
1869 CSR_READ_4(sc, RTK_MISC) & ~RTK_MISC_RXDV_GATED_EN);
1870 }
1871
1872 /*
1873 * Enable transmit and receive.
1874 */
1875 CSR_WRITE_1(sc, RTK_COMMAND, RTK_CMD_TX_ENB | RTK_CMD_RX_ENB);
1876
1877 /*
1878 * Set the initial TX and RX configuration.
1879 */
1880 if (sc->re_testmode && (sc->sc_quirk & RTKQ_8169NONS) != 0) {
1881 /* test mode is needed only for old 8169 */
1882 CSR_WRITE_4(sc, RTK_TXCFG,
1883 RE_TXCFG_CONFIG | RTK_LOOPTEST_ON);
1884 } else
1885 CSR_WRITE_4(sc, RTK_TXCFG, RE_TXCFG_CONFIG);
1886
1887 CSR_WRITE_1(sc, RTK_EARLY_TX_THRESH, 16);
1888
1889 CSR_WRITE_4(sc, RTK_RXCFG, RE_RXCFG_CONFIG);
1890
1891 /* Set the individual bit to receive frames for this host only. */
1892 rxcfg = CSR_READ_4(sc, RTK_RXCFG);
1893 rxcfg |= RTK_RXCFG_RX_INDIV;
1894
1895 /* If we want promiscuous mode, set the allframes bit. */
1896 if (ifp->if_flags & IFF_PROMISC)
1897 rxcfg |= RTK_RXCFG_RX_ALLPHYS;
1898 else
1899 rxcfg &= ~RTK_RXCFG_RX_ALLPHYS;
1900 CSR_WRITE_4(sc, RTK_RXCFG, rxcfg);
1901
1902 /*
1903 * Set capture broadcast bit to capture broadcast frames.
1904 */
1905 if (ifp->if_flags & IFF_BROADCAST)
1906 rxcfg |= RTK_RXCFG_RX_BROAD;
1907 else
1908 rxcfg &= ~RTK_RXCFG_RX_BROAD;
1909 CSR_WRITE_4(sc, RTK_RXCFG, rxcfg);
1910
1911 /*
1912 * Program the multicast filter, if necessary.
1913 */
1914 rtk_setmulti(sc);
1915
1916 /*
1917 * Enable interrupts.
1918 */
1919 if (sc->re_testmode)
1920 CSR_WRITE_2(sc, RTK_IMR, 0);
1921 else if ((sc->sc_quirk & RTKQ_IM_HW) != 0)
1922 CSR_WRITE_2(sc, RTK_IMR, RTK_INTRS_IM_HW);
1923 else
1924 CSR_WRITE_2(sc, RTK_IMR, RTK_INTRS_CPLUS);
1925
1926 /* Start RX/TX process. */
1927 CSR_WRITE_4(sc, RTK_MISSEDPKT, 0);
1928 #ifdef notdef
1929 /* Enable receiver and transmitter. */
1930 CSR_WRITE_1(sc, RTK_COMMAND, RTK_CMD_TX_ENB | RTK_CMD_RX_ENB);
1931 #endif
1932
1933 /*
1934 * Initialize the timer interrupt register so that
1935 * a timer interrupt will be generated once the timer
1936 * reaches a certain number of ticks. The timer is
1937 * reloaded on each transmit. This gives us TX interrupt
1938 * moderation, which dramatically improves TX frame rate.
1939 */
1940
1941 unsigned defer; /* timer interval / ns */
1942 unsigned period; /* busclock period / ns */
1943
1944 /*
1945 * Maximum frame rate
1946 * 1500 byte PDU -> 81274 Hz
1947 * 46 byte PDU -> 1488096 Hz
1948 *
1949 * Deferring interrupts by up to 128us needs descriptors for
1950 * 1500 byte PDU -> 10.4 frames
1951 * 46 byte PDU -> 190.4 frames
1952 *
1953 */
1954 defer = 128000;
1955
1956 if ((sc->sc_quirk & RTKQ_IM_HW) != 0) {
1957 period = 1;
1958 defer = 0;
1959 } else if ((sc->sc_quirk & RTKQ_PCIE) != 0) {
1960 period = 8;
1961 } else {
1962 switch (CSR_READ_4(sc, RTK_CFG2_BUSFREQ) & 0x7) {
1963 case RTK_BUSFREQ_33MHZ:
1964 period = 30;
1965 break;
1966 case RTK_BUSFREQ_66MHZ:
1967 period = 15;
1968 break;
1969 default:
1970 /* lowest possible clock */
1971 period = 60;
1972 break;
1973 }
1974 }
1975
1976 /* Timer Interrupt register address varies */
1977 uint16_t re8139_reg;
1978 if ((sc->sc_quirk & RTKQ_8139CPLUS) != 0)
1979 re8139_reg = RTK_TIMERINT;
1980 else
1981 re8139_reg = RTK_TIMERINT_8169;
1982 CSR_WRITE_4(sc, re8139_reg, defer / period);
1983
1984 if ((sc->sc_quirk & RTKQ_8139CPLUS) == 0) {
1985 /*
1986 * For 8169 gigE NICs, set the max allowed RX packet
1987 * size so we can receive jumbo frames.
1988 */
1989 CSR_WRITE_2(sc, RTK_MAXRXPKTLEN, 16383);
1990 }
1991
1992 if (sc->re_testmode)
1993 return 0;
1994
1995 CSR_WRITE_1(sc, RTK_CFG1, RTK_CFG1_DRVLOAD);
1996
1997 ifp->if_flags |= IFF_RUNNING;
1998 ifp->if_flags &= ~IFF_OACTIVE;
1999
2000 callout_reset(&sc->rtk_tick_ch, hz, re_tick, sc);
2001
2002 out:
2003 if (error) {
2004 ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
2005 ifp->if_timer = 0;
2006 printf("%s: interface not running\n",
2007 device_xname(sc->sc_dev));
2008 }
2009
2010 return error;
2011 }
2012
2013 static int
2014 re_ioctl(struct ifnet *ifp, u_long command, void *data)
2015 {
2016 struct rtk_softc *sc = ifp->if_softc;
2017 struct ifreq *ifr = data;
2018 int s, error = 0;
2019
2020 s = splnet();
2021
2022 switch (command) {
2023 case SIOCSIFMTU:
2024 /*
2025 * Disable jumbo frames if it's not supported.
2026 */
2027 if ((sc->sc_quirk & RTKQ_NOJUMBO) != 0 &&
2028 ifr->ifr_mtu > ETHERMTU) {
2029 error = EINVAL;
2030 break;
2031 }
2032
2033 if (ifr->ifr_mtu < ETHERMIN || ifr->ifr_mtu > ETHERMTU_JUMBO)
2034 error = EINVAL;
2035 else if ((error = ifioctl_common(ifp, command, data)) ==
2036 ENETRESET)
2037 error = 0;
2038 break;
2039 default:
2040 if ((error = ether_ioctl(ifp, command, data)) != ENETRESET)
2041 break;
2042
2043 error = 0;
2044
2045 if (command == SIOCSIFCAP)
2046 error = (*ifp->if_init)(ifp);
2047 else if (command != SIOCADDMULTI && command != SIOCDELMULTI)
2048 ;
2049 else if (ifp->if_flags & IFF_RUNNING)
2050 rtk_setmulti(sc);
2051 break;
2052 }
2053
2054 splx(s);
2055
2056 return error;
2057 }
2058
2059 static void
2060 re_watchdog(struct ifnet *ifp)
2061 {
2062 struct rtk_softc *sc;
2063 int s;
2064
2065 sc = ifp->if_softc;
2066 s = splnet();
2067 printf("%s: watchdog timeout\n", device_xname(sc->sc_dev));
2068 ifp->if_oerrors++;
2069
2070 re_txeof(sc);
2071 re_rxeof(sc);
2072
2073 re_init(ifp);
2074
2075 splx(s);
2076 }
2077
2078 /*
2079 * Stop the adapter and free any mbufs allocated to the
2080 * RX and TX lists.
2081 */
2082 static void
2083 re_stop(struct ifnet *ifp, int disable)
2084 {
2085 int i;
2086 struct rtk_softc *sc = ifp->if_softc;
2087
2088 callout_stop(&sc->rtk_tick_ch);
2089
2090 mii_down(&sc->mii);
2091
2092 if ((sc->sc_quirk & RTKQ_CMDSTOP) != 0)
2093 CSR_WRITE_1(sc, RTK_COMMAND, RTK_CMD_STOPREQ | RTK_CMD_TX_ENB |
2094 RTK_CMD_RX_ENB);
2095 else
2096 CSR_WRITE_1(sc, RTK_COMMAND, 0x00);
2097 DELAY(1000);
2098 CSR_WRITE_2(sc, RTK_IMR, 0x0000);
2099 CSR_WRITE_2(sc, RTK_ISR, 0xFFFF);
2100
2101 if (sc->re_head != NULL) {
2102 m_freem(sc->re_head);
2103 sc->re_head = sc->re_tail = NULL;
2104 }
2105
2106 /* Free the TX list buffers. */
2107 for (i = 0; i < RE_TX_QLEN; i++) {
2108 if (sc->re_ldata.re_txq[i].txq_mbuf != NULL) {
2109 bus_dmamap_unload(sc->sc_dmat,
2110 sc->re_ldata.re_txq[i].txq_dmamap);
2111 m_freem(sc->re_ldata.re_txq[i].txq_mbuf);
2112 sc->re_ldata.re_txq[i].txq_mbuf = NULL;
2113 }
2114 }
2115
2116 /* Free the RX list buffers. */
2117 for (i = 0; i < RE_RX_DESC_CNT; i++) {
2118 if (sc->re_ldata.re_rxsoft[i].rxs_mbuf != NULL) {
2119 bus_dmamap_unload(sc->sc_dmat,
2120 sc->re_ldata.re_rxsoft[i].rxs_dmamap);
2121 m_freem(sc->re_ldata.re_rxsoft[i].rxs_mbuf);
2122 sc->re_ldata.re_rxsoft[i].rxs_mbuf = NULL;
2123 }
2124 }
2125
2126 if (disable)
2127 re_disable(sc);
2128
2129 ifp->if_flags &= ~(IFF_RUNNING | IFF_OACTIVE);
2130 ifp->if_timer = 0;
2131 }
2132