d85568d9a3fc2136da89db9a0d32aa53b444d8f5
[dragonfly.git] / sys / dev / netif / rl / if_rl.c
1 /*
2  * Copyright (c) 1997, 1998
3  *      Bill Paul <wpaul@ctr.columbia.edu>.  All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  *    notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  *    notice, this list of conditions and the following disclaimer in the
12  *    documentation and/or other materials provided with the distribution.
13  * 3. All advertising materials mentioning features or use of this software
14  *    must display the following acknowledgement:
15  *      This product includes software developed by Bill Paul.
16  * 4. Neither the name of the author nor the names of any co-contributors
17  *    may be used to endorse or promote products derived from this software
18  *    without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY Bill Paul AND CONTRIBUTORS ``AS IS'' AND
21  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23  * ARE DISCLAIMED.  IN NO EVENT SHALL Bill Paul OR THE VOICES IN HIS HEAD
24  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
30  * THE POSSIBILITY OF SUCH DAMAGE.
31  *
32  * $FreeBSD: src/sys/pci/if_rl.c,v 1.38.2.16 2003/03/05 18:42:33 njl Exp $
33  */
34
35 /*
36  * RealTek 8129/8139 PCI NIC driver
37  *
38  * Supports several extremely cheap PCI 10/100 adapters based on
39  * the RealTek chipset. Datasheets can be obtained from
40  * www.realtek.com.tw.
41  *
42  * Written by Bill Paul <wpaul@ctr.columbia.edu>
43  * Electrical Engineering Department
44  * Columbia University, New York City
45  */
46
47 /*
48  * The RealTek 8139 PCI NIC redefines the meaning of 'low end.' This is
49  * probably the worst PCI ethernet controller ever made, with the possible
50  * exception of the FEAST chip made by SMC. The 8139 supports bus-master
51  * DMA, but it has a terrible interface that nullifies any performance
52  * gains that bus-master DMA usually offers.
53  *
54  * For transmission, the chip offers a series of four TX descriptor
55  * registers. Each transmit frame must be in a contiguous buffer, aligned
56  * on a longword (32-bit) boundary. This means we almost always have to
57  * do mbuf copies in order to transmit a frame, except in the unlikely
58  * case where a) the packet fits into a single mbuf, and b) the packet
59  * is 32-bit aligned within the mbuf's data area. The presence of only
60  * four descriptor registers means that we can never have more than four
61  * packets queued for transmission at any one time.
62  *
63  * Reception is not much better. The driver has to allocate a single large
64  * buffer area (up to 64K in size) into which the chip will DMA received
65  * frames. Because we don't know where within this region received packets
66  * will begin or end, we have no choice but to copy data from the buffer
67  * area into mbufs in order to pass the packets up to the higher protocol
68  * levels.
69  *
70  * It's impossible given this rotten design to really achieve decent
71  * performance at 100Mbps, unless you happen to have a 400Mhz PII or
72  * some equally overmuscled CPU to drive it.
73  *
74  * On the bright side, the 8139 does have a built-in PHY, although
75  * rather than using an MDIO serial interface like most other NICs, the
76  * PHY registers are directly accessible through the 8139's register
77  * space. The 8139 supports autonegotiation, as well as a 64-bit multicast
78  * filter.
79  *
80  * The 8129 chip is an older version of the 8139 that uses an external PHY
81  * chip. The 8129 has a serial MDIO interface for accessing the MII where
82  * the 8139 lets you directly access the on-board PHY registers. We need
83  * to select which interface to use depending on the chip type.
84  */
85
86 #include "opt_ifpoll.h"
87
88 #include <sys/param.h>
89 #include <sys/endian.h>
90 #include <sys/systm.h>
91 #include <sys/sockio.h>
92 #include <sys/mbuf.h>
93 #include <sys/malloc.h>
94 #include <sys/kernel.h>
95 #include <sys/module.h>
96 #include <sys/socket.h>
97 #include <sys/serialize.h>
98 #include <sys/bus.h>
99 #include <sys/rman.h>
100 #include <sys/thread2.h>
101 #include <sys/interrupt.h>
102
103 #include <net/if.h>
104 #include <net/ifq_var.h>
105 #include <net/if_arp.h>
106 #include <net/ethernet.h>
107 #include <net/if_dl.h>
108 #include <net/if_media.h>
109 #include <net/if_poll.h>
110
111 #include <net/bpf.h>
112
113 #include <dev/netif/mii_layer/mii.h>
114 #include <dev/netif/mii_layer/miivar.h>
115
116 #include <bus/pci/pcidevs.h>
117 #include <bus/pci/pcireg.h>
118 #include <bus/pci/pcivar.h>
119
120 /* "controller miibus0" required.  See GENERIC if you get errors here. */
121 #include "miibus_if.h"
122
123 /*
124  * Default to using PIO access for this driver. On SMP systems,
125  * there appear to be problems with memory mapped mode: it looks like
126  * doing too many memory mapped access back to back in rapid succession
127  * can hang the bus. I'm inclined to blame this on crummy design/construction
128  * on the part of RealTek. Memory mapped mode does appear to work on
129  * uniprocessor systems though.
130  */
131 #define RL_USEIOSPACE
132
133 #include <dev/netif/rl/if_rlreg.h>
134
135 /*
136  * Various supported device vendors/types and their names.
137  */
138 static struct rl_type {
139         uint16_t         rl_vid;
140         uint16_t         rl_did;
141         const char      *rl_name;
142 } rl_devs[] = {
143         { PCI_VENDOR_REALTEK, PCI_PRODUCT_REALTEK_RT8129,
144                 "RealTek 8129 10/100BaseTX" },
145         { PCI_VENDOR_REALTEK, PCI_PRODUCT_REALTEK_RT8139,
146                 "RealTek 8139 10/100BaseTX" },
147         { PCI_VENDOR_REALTEK, PCI_PRODUCT_REALTEK_RT8139B,
148                 "RealTek 8139 10/100BaseTX CardBus" },
149         { PCI_VENDOR_ACCTON, PCI_PRODUCT_ACCTON_MPX5030,
150                 "Accton MPX 5030/5038 10/100BaseTX" },
151         { PCI_VENDOR_DELTA, PCI_PRODUCT_DELTA_8139,
152                 "Delta Electronics 8139 10/100BaseTX" },
153         { PCI_VENDOR_ADDTRON, PCI_PRODUCT_ADDTRON_8139,
154                 "Addtron Technology 8139 10/100BaseTX" },
155         { PCI_VENDOR_DLINK, PCI_PRODUCT_DLINK_DFE530TXPLUS,
156                 "D-Link DFE-530TX+ 10/100BaseTX" },
157         { PCI_VENDOR_DLINK, PCI_PRODUCT_DLINK_DFE690TXD,
158                 "D-Link DFE-690TX 10/100BaseTX" },
159         { PCI_VENDOR_NORTEL, PCI_PRODUCT_NORTEL_BAYSTACK_21,
160                 "Nortel Networks 10/100BaseTX" },
161         { PCI_VENDOR_PEPPERCON, PCI_PRODUCT_PEPPERCON_ROLF,
162                 "Peppercon AG ROL/F" },
163         { PCI_VENDOR_COREGA, PCI_PRODUCT_COREGA_CB_TXD,
164                 "Corega FEther CB-TXD" },
165         { PCI_VENDOR_COREGA, PCI_PRODUCT_COREGA_2CB_TXD,
166                 "Corega FEtherII CB-TXD" },
167         { PCI_VENDOR_PLANEX, PCI_PRODUCT_PLANEX_FNW_3800_TX,
168                 "Planex FNW-3800-TX" },
169         { 0, 0, NULL }
170 };
171
172 static int      rl_probe(device_t);
173 static int      rl_attach(device_t);
174 static int      rl_detach(device_t);
175
176 static int      rl_encap(struct rl_softc *, struct mbuf * );
177
178 static void     rl_rxeof(struct rl_softc *);
179 static void     rl_txeof(struct rl_softc *);
180 static void     rl_intr(void *);
181 static void     rl_tick(void *);
182 static void     rl_start(struct ifnet *, struct ifaltq_subque *);
183 static int      rl_ioctl(struct ifnet *, u_long, caddr_t, struct ucred *);
184 static void     rl_init(void *);
185 static void     rl_stop (struct rl_softc *);
186 static void     rl_watchdog(struct ifnet *);
187 static int      rl_suspend(device_t);
188 static int      rl_resume(device_t);
189 static void     rl_shutdown(device_t);
190 static int      rl_ifmedia_upd(struct ifnet *);
191 static void     rl_ifmedia_sts(struct ifnet *, struct ifmediareq *);
192
193 static void     rl_eeprom_putbyte(struct rl_softc *, int);
194 static void     rl_eeprom_getword(struct rl_softc *, int, uint16_t *);
195 static void     rl_read_eeprom(struct rl_softc *, caddr_t, int, int, int);
196 static void     rl_mii_sync(struct rl_softc *);
197 static void     rl_mii_send(struct rl_softc *, uint32_t, int);
198 static int      rl_mii_readreg(struct rl_softc *, struct rl_mii_frame *);
199 static int      rl_mii_writereg(struct rl_softc *, struct rl_mii_frame *);
200
201 static int      rl_miibus_readreg(device_t, int, int);
202 static int      rl_miibus_writereg(device_t, int, int, int);
203 static void     rl_miibus_statchg(device_t);
204
205 static void     rl_setmulti(struct rl_softc *);
206 static void     rl_reset(struct rl_softc *);
207 static void     rl_list_tx_init(struct rl_softc *);
208
209 #ifdef IFPOLL_ENABLE
210 static void     rl_npoll(struct ifnet *, struct ifpoll_info *);
211 static void     rl_npoll_compat(struct ifnet *, void *, int);
212 #endif
213
214 static int      rl_dma_alloc(struct rl_softc *);
215 static void     rl_dma_free(struct rl_softc *);
216
217 #ifdef RL_USEIOSPACE
218 #define RL_RES                  SYS_RES_IOPORT
219 #define RL_RID                  RL_PCI_LOIO
220 #else
221 #define RL_RES                  SYS_RES_MEMORY
222 #define RL_RID                  RL_PCI_LOMEM
223 #endif
224
225 static device_method_t rl_methods[] = {
226         /* Device interface */
227         DEVMETHOD(device_probe,         rl_probe),
228         DEVMETHOD(device_attach,        rl_attach),
229         DEVMETHOD(device_detach,        rl_detach),
230         DEVMETHOD(device_suspend,       rl_suspend),
231         DEVMETHOD(device_resume,        rl_resume),
232         DEVMETHOD(device_shutdown,      rl_shutdown),
233
234         /* bus interface */
235         DEVMETHOD(bus_print_child,      bus_generic_print_child),
236         DEVMETHOD(bus_driver_added,     bus_generic_driver_added),
237
238         /* MII interface */
239         DEVMETHOD(miibus_readreg,       rl_miibus_readreg),
240         DEVMETHOD(miibus_writereg,      rl_miibus_writereg),
241         DEVMETHOD(miibus_statchg,       rl_miibus_statchg),
242
243         { 0, 0 }
244 };
245
246 static DEFINE_CLASS_0(rl, rl_driver, rl_methods, sizeof(struct rl_softc));
247 static devclass_t rl_devclass;
248
249 DECLARE_DUMMY_MODULE(if_rl);
250 DRIVER_MODULE(if_rl, pci, rl_driver, rl_devclass, NULL, NULL);
251 DRIVER_MODULE(if_rl, cardbus, rl_driver, rl_devclass, NULL, NULL);
252 DRIVER_MODULE(miibus, rl, miibus_driver, miibus_devclass, NULL, NULL);
253 MODULE_DEPEND(if_rl, miibus, 1, 1, 1);
254
255 #define EE_SET(x)                                       \
256         CSR_WRITE_1(sc, RL_EECMD, CSR_READ_1(sc, RL_EECMD) | (x))
257
258 #define EE_CLR(x)                                       \
259         CSR_WRITE_1(sc, RL_EECMD, CSR_READ_1(sc, RL_EECMD) & ~(x))
260
261 /*
262  * Send a read command and address to the EEPROM, check for ACK.
263  */
264 static void
265 rl_eeprom_putbyte(struct rl_softc *sc, int addr)
266 {
267         int d, i;
268
269         d = addr | sc->rl_eecmd_read;
270
271         /*
272          * Feed in each bit and strobe the clock.
273          */
274         for (i = 0x400; i; i >>= 1) {
275                 if (d & i)
276                         EE_SET(RL_EE_DATAIN);
277                 else
278                         EE_CLR(RL_EE_DATAIN);
279                 DELAY(100);
280                 EE_SET(RL_EE_CLK);
281                 DELAY(150);
282                 EE_CLR(RL_EE_CLK);
283                 DELAY(100);
284         }
285 }
286
287 /*
288  * Read a word of data stored in the EEPROM at address 'addr.'
289  */
290 static void
291 rl_eeprom_getword(struct rl_softc *sc, int addr, uint16_t *dest)
292 {
293         int i;
294         uint16_t word = 0;
295
296         /* Enter EEPROM access mode. */
297         CSR_WRITE_1(sc, RL_EECMD, RL_EEMODE_PROGRAM|RL_EE_SEL);
298
299         /*
300          * Send address of word we want to read.
301          */
302         rl_eeprom_putbyte(sc, addr);
303
304         CSR_WRITE_1(sc, RL_EECMD, RL_EEMODE_PROGRAM|RL_EE_SEL);
305
306         /*
307          * Start reading bits from EEPROM.
308          */
309         for (i = 0x8000; i; i >>= 1) {
310                 EE_SET(RL_EE_CLK);
311                 DELAY(100);
312                 if (CSR_READ_1(sc, RL_EECMD) & RL_EE_DATAOUT)
313                         word |= i;
314                 EE_CLR(RL_EE_CLK);
315                 DELAY(100);
316         }
317
318         /* Turn off EEPROM access mode. */
319         CSR_WRITE_1(sc, RL_EECMD, RL_EEMODE_OFF);
320
321         *dest = word;
322 }
323
324 /*
325  * Read a sequence of words from the EEPROM.
326  */
327 static void
328 rl_read_eeprom(struct rl_softc *sc, caddr_t dest, int off, int cnt, int swap)
329 {
330         int i;
331         u_int16_t word = 0, *ptr;
332
333         for (i = 0; i < cnt; i++) {
334                 rl_eeprom_getword(sc, off + i, &word);
335                 ptr = (u_int16_t *)(dest + (i * 2));
336                 if (swap)
337                         *ptr = ntohs(word);
338                 else
339                         *ptr = word;
340         }
341 }
342
343
344 /*
345  * MII access routines are provided for the 8129, which
346  * doesn't have a built-in PHY. For the 8139, we fake things
347  * up by diverting rl_phy_readreg()/rl_phy_writereg() to the
348  * direct access PHY registers.
349  */
350 #define MII_SET(x)                                                      \
351         CSR_WRITE_1(sc, RL_MII, CSR_READ_1(sc, RL_MII) | x)
352
353 #define MII_CLR(x)                                                      \
354         CSR_WRITE_1(sc, RL_MII, CSR_READ_1(sc, RL_MII) & ~x)
355
356 /*
357  * Sync the PHYs by setting data bit and strobing the clock 32 times.
358  */
359 static void
360 rl_mii_sync(struct rl_softc *sc)
361 {
362         int i;
363
364         MII_SET(RL_MII_DIR|RL_MII_DATAOUT);
365
366         for (i = 0; i < 32; i++) {
367                 MII_SET(RL_MII_CLK);
368                 DELAY(1);
369                 MII_CLR(RL_MII_CLK);
370                 DELAY(1);
371         }
372 }
373
374 /*
375  * Clock a series of bits through the MII.
376  */
377 static void
378 rl_mii_send(struct rl_softc *sc, uint32_t bits, int cnt)
379 {
380         int i;
381
382         MII_CLR(RL_MII_CLK);
383
384         for (i = (0x1 << (cnt - 1)); i; i >>= 1) {
385                 if (bits & i)
386                         MII_SET(RL_MII_DATAOUT);
387                 else
388                         MII_CLR(RL_MII_DATAOUT);
389                 DELAY(1);
390                 MII_CLR(RL_MII_CLK);
391                 DELAY(1);
392                 MII_SET(RL_MII_CLK);
393         }
394 }
395
396 /*
397  * Read an PHY register through the MII.
398  */
399 static int
400 rl_mii_readreg(struct rl_softc *sc, struct rl_mii_frame *frame) 
401 {
402         int ack, i;
403
404         /*
405          * Set up frame for RX.
406          */
407         frame->mii_stdelim = RL_MII_STARTDELIM;
408         frame->mii_opcode = RL_MII_READOP;
409         frame->mii_turnaround = 0;
410         frame->mii_data = 0;
411         
412         CSR_WRITE_2(sc, RL_MII, 0);
413
414         /*
415          * Turn on data xmit.
416          */
417         MII_SET(RL_MII_DIR);
418
419         rl_mii_sync(sc);
420
421         /*
422          * Send command/address info.
423          */
424         rl_mii_send(sc, frame->mii_stdelim, 2);
425         rl_mii_send(sc, frame->mii_opcode, 2);
426         rl_mii_send(sc, frame->mii_phyaddr, 5);
427         rl_mii_send(sc, frame->mii_regaddr, 5);
428
429         /* Idle bit */
430         MII_CLR((RL_MII_CLK|RL_MII_DATAOUT));
431         DELAY(1);
432         MII_SET(RL_MII_CLK);
433         DELAY(1);
434
435         /* Turn off xmit. */
436         MII_CLR(RL_MII_DIR);
437
438         /* Check for ack */
439         MII_CLR(RL_MII_CLK);
440         DELAY(1);
441         ack = CSR_READ_2(sc, RL_MII) & RL_MII_DATAIN;
442         MII_SET(RL_MII_CLK);
443         DELAY(1);
444
445         /*
446          * Now try reading data bits. If the ack failed, we still
447          * need to clock through 16 cycles to keep the PHY(s) in sync.
448          */
449         if (ack) {
450                 for(i = 0; i < 16; i++) {
451                         MII_CLR(RL_MII_CLK);
452                         DELAY(1);
453                         MII_SET(RL_MII_CLK);
454                         DELAY(1);
455                 }
456         } else {
457                 for (i = 0x8000; i; i >>= 1) {
458                         MII_CLR(RL_MII_CLK);
459                         DELAY(1);
460                         if (!ack) {
461                                 if (CSR_READ_2(sc, RL_MII) & RL_MII_DATAIN)
462                                         frame->mii_data |= i;
463                                 DELAY(1);
464                         }
465                         MII_SET(RL_MII_CLK);
466                         DELAY(1);
467                 }
468         }
469
470         MII_CLR(RL_MII_CLK);
471         DELAY(1);
472         MII_SET(RL_MII_CLK);
473         DELAY(1);
474
475         return(ack ? 1 : 0);
476 }
477
478 /*
479  * Write to a PHY register through the MII.
480  */
481 static int
482 rl_mii_writereg(struct rl_softc *sc, struct rl_mii_frame *frame)
483 {
484         /*
485          * Set up frame for TX.
486          */
487         frame->mii_stdelim = RL_MII_STARTDELIM;
488         frame->mii_opcode = RL_MII_WRITEOP;
489         frame->mii_turnaround = RL_MII_TURNAROUND;
490         
491         /*
492          * Turn on data output.
493          */
494         MII_SET(RL_MII_DIR);
495
496         rl_mii_sync(sc);
497
498         rl_mii_send(sc, frame->mii_stdelim, 2);
499         rl_mii_send(sc, frame->mii_opcode, 2);
500         rl_mii_send(sc, frame->mii_phyaddr, 5);
501         rl_mii_send(sc, frame->mii_regaddr, 5);
502         rl_mii_send(sc, frame->mii_turnaround, 2);
503         rl_mii_send(sc, frame->mii_data, 16);
504
505         /* Idle bit. */
506         MII_SET(RL_MII_CLK);
507         DELAY(1);
508         MII_CLR(RL_MII_CLK);
509         DELAY(1);
510
511         /*
512          * Turn off xmit.
513          */
514         MII_CLR(RL_MII_DIR);
515
516         return(0);
517 }
518
519 static int
520 rl_miibus_readreg(device_t dev, int phy, int reg)
521 {
522         struct rl_softc *sc;
523         struct rl_mii_frame frame;
524         uint16_t rval = 0;
525         uint16_t rl8139_reg = 0;
526
527         sc = device_get_softc(dev);
528
529         if (sc->rl_type == RL_8139) {
530                 /* Pretend the internal PHY is only at address 0 */
531                 if (phy)
532                         return(0);
533                 switch (reg) {
534                 case MII_BMCR:
535                         rl8139_reg = RL_BMCR;
536                         break;
537                 case MII_BMSR:
538                         rl8139_reg = RL_BMSR;
539                         break;
540                 case MII_ANAR:
541                         rl8139_reg = RL_ANAR;
542                         break;
543                 case MII_ANER:
544                         rl8139_reg = RL_ANER;
545                         break;
546                 case MII_ANLPAR:
547                         rl8139_reg = RL_LPAR;
548                         break;
549                 case MII_PHYIDR1:
550                 case MII_PHYIDR2:
551                         return(0);
552                         break;
553                 /*
554                  * Allow the rlphy driver to read the media status
555                  * register. If we have a link partner which does not
556                  * support NWAY, this is the register which will tell
557                  * us the results of parallel detection.
558                  */
559                 case RL_MEDIASTAT:
560                         rval = CSR_READ_1(sc, RL_MEDIASTAT);
561                         return(rval);
562                 default:
563                         device_printf(dev, "bad phy register\n");
564                         return(0);
565                 }
566                 rval = CSR_READ_2(sc, rl8139_reg);
567                 return(rval);
568         }
569
570         bzero(&frame, sizeof(frame));
571
572         frame.mii_phyaddr = phy;
573         frame.mii_regaddr = reg;
574         rl_mii_readreg(sc, &frame);
575
576         return(frame.mii_data);
577 }
578
579 static int
580 rl_miibus_writereg(device_t dev, int phy, int reg, int data)
581 {
582         struct rl_softc *sc;
583         struct rl_mii_frame frame;
584         u_int16_t rl8139_reg = 0;
585
586         sc = device_get_softc(dev);
587
588         if (sc->rl_type == RL_8139) {
589                 /* Pretend the internal PHY is only at address 0 */
590                 if (phy)
591                         return(0);
592                 switch (reg) {
593                 case MII_BMCR:
594                         rl8139_reg = RL_BMCR;
595                         break;
596                 case MII_BMSR:
597                         rl8139_reg = RL_BMSR;
598                         break;
599                 case MII_ANAR:
600                         rl8139_reg = RL_ANAR;
601                         break;
602                 case MII_ANER:
603                         rl8139_reg = RL_ANER;
604                         break;
605                 case MII_ANLPAR:
606                         rl8139_reg = RL_LPAR;
607                         break;
608                 case MII_PHYIDR1:
609                 case MII_PHYIDR2:
610                         return(0);
611                 default:
612                         device_printf(dev, "bad phy register\n");
613                         return(0);
614                 }
615                 CSR_WRITE_2(sc, rl8139_reg, data);
616                 return(0);
617         }
618
619         bzero(&frame, sizeof(frame));
620
621         frame.mii_phyaddr = phy;
622         frame.mii_regaddr = reg;
623         frame.mii_data = data;
624
625         rl_mii_writereg(sc, &frame);
626
627         return(0);
628 }
629
630 static void
631 rl_miibus_statchg(device_t dev)
632 {
633 }
634
635 /*
636  * Program the 64-bit multicast hash filter.
637  */
638 static void
639 rl_setmulti(struct rl_softc *sc)
640 {
641         struct ifnet *ifp;
642         int h = 0;
643         uint32_t hashes[2] = { 0, 0 };
644         struct ifmultiaddr *ifma;
645         uint32_t rxfilt;
646         int mcnt = 0;
647
648         ifp = &sc->arpcom.ac_if;
649
650         rxfilt = CSR_READ_4(sc, RL_RXCFG);
651
652         if (ifp->if_flags & IFF_ALLMULTI || ifp->if_flags & IFF_PROMISC) {
653                 rxfilt |= RL_RXCFG_RX_MULTI;
654                 CSR_WRITE_4(sc, RL_RXCFG, rxfilt);
655                 CSR_WRITE_4(sc, RL_MAR0, 0xFFFFFFFF);
656                 CSR_WRITE_4(sc, RL_MAR4, 0xFFFFFFFF);
657                 return;
658         }
659
660         /* first, zot all the existing hash bits */
661         CSR_WRITE_4(sc, RL_MAR0, 0);
662         CSR_WRITE_4(sc, RL_MAR4, 0);
663
664         /* now program new ones */
665         TAILQ_FOREACH(ifma, &ifp->if_multiaddrs, ifma_link) {
666                 if (ifma->ifma_addr->sa_family != AF_LINK)
667                         continue;
668                 h = ether_crc32_be(
669                     LLADDR((struct sockaddr_dl *)ifma->ifma_addr),
670                     ETHER_ADDR_LEN) >> 26;
671                 if (h < 32)
672                         hashes[0] |= (1 << h);
673                 else
674                         hashes[1] |= (1 << (h - 32));
675                 mcnt++;
676         }
677
678         if (mcnt)
679                 rxfilt |= RL_RXCFG_RX_MULTI;
680         else
681                 rxfilt &= ~RL_RXCFG_RX_MULTI;
682
683         CSR_WRITE_4(sc, RL_RXCFG, rxfilt);
684         CSR_WRITE_4(sc, RL_MAR0, hashes[0]);
685         CSR_WRITE_4(sc, RL_MAR4, hashes[1]);
686 }
687
688 static void
689 rl_reset(struct rl_softc *sc)
690 {
691         int i;
692
693         CSR_WRITE_1(sc, RL_COMMAND, RL_CMD_RESET);
694
695         for (i = 0; i < RL_TIMEOUT; i++) {
696                 DELAY(10);
697                 if (!(CSR_READ_1(sc, RL_COMMAND) & RL_CMD_RESET))
698                         break;
699         }
700         if (i == RL_TIMEOUT)
701                 device_printf(sc->rl_dev, "reset never completed!\n");
702 }
703
704 /*
705  * Probe for a RealTek 8129/8139 chip. Check the PCI vendor and device
706  * IDs against our list and return a device name if we find a match.
707  *
708  * Return with a value < 0 to give re(4) a change to attach.
709  */
710 static int
711 rl_probe(device_t dev)
712 {
713         struct rl_type *t;
714         uint16_t product = pci_get_device(dev);
715         uint16_t vendor = pci_get_vendor(dev);
716
717         for (t = rl_devs; t->rl_name != NULL; t++) {
718                 if (vendor == t->rl_vid && product == t->rl_did) {
719                         device_set_desc(dev, t->rl_name);
720                         return(-100);
721                 }
722         }
723
724         return(ENXIO);
725 }
726
727 /*
728  * Attach the interface. Allocate softc structures, do ifmedia
729  * setup and ethernet/BPF attach.
730  */
731 static int
732 rl_attach(device_t dev)
733 {
734         uint8_t eaddr[ETHER_ADDR_LEN];
735         uint16_t as[3];
736         struct rl_softc *sc;
737         struct ifnet *ifp;
738         uint16_t rl_did = 0;
739         int error = 0, rid, i;
740
741         sc = device_get_softc(dev);
742         sc->rl_dev = dev;
743
744         /*
745          * Handle power management nonsense.
746          */
747
748         if (pci_get_powerstate(dev) != PCI_POWERSTATE_D0) {
749                 uint32_t iobase, membase, irq;
750
751                 /* Save important PCI config data. */
752                 iobase = pci_read_config(dev, RL_PCI_LOIO, 4);
753                 membase = pci_read_config(dev, RL_PCI_LOMEM, 4);
754                 irq = pci_read_config(dev, RL_PCI_INTLINE, 4);
755
756                 /* Reset the power state. */
757                 device_printf(dev, "chip is in D%d power mode "
758                               "-- setting to D0\n", pci_get_powerstate(dev));
759                 pci_set_powerstate(dev, PCI_POWERSTATE_D0);
760
761                 /* Restore PCI config data. */
762                 pci_write_config(dev, RL_PCI_LOIO, iobase, 4);
763                 pci_write_config(dev, RL_PCI_LOMEM, membase, 4);
764                 pci_write_config(dev, RL_PCI_INTLINE, irq, 4);
765         }
766
767         pci_enable_busmaster(dev);
768
769         rid = RL_RID; 
770         sc->rl_res = bus_alloc_resource_any(dev, RL_RES, &rid, RF_ACTIVE);
771
772         if (sc->rl_res == NULL) {
773                 device_printf(dev, "couldn't map ports/memory\n");
774                 error = ENXIO;
775                 goto fail;
776         }
777
778         sc->rl_btag = rman_get_bustag(sc->rl_res);
779         sc->rl_bhandle = rman_get_bushandle(sc->rl_res);
780
781         rid = 0;
782         sc->rl_irq = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,
783                                             RF_SHAREABLE | RF_ACTIVE);
784
785         if (sc->rl_irq == NULL) {
786                 device_printf(dev, "couldn't map interrupt\n");
787                 error = ENXIO;
788                 goto fail;
789         }
790
791         callout_init(&sc->rl_stat_timer);
792
793         /* Reset the adapter. */
794         rl_reset(sc);
795
796         sc->rl_eecmd_read = RL_EECMD_READ_6BIT;
797         rl_read_eeprom(sc, (uint8_t *)&rl_did, 0, 1, 0);
798         if (rl_did != 0x8129)
799                 sc->rl_eecmd_read = RL_EECMD_READ_8BIT;
800
801         /*
802          * Get station address from the EEPROM.
803          */
804         rl_read_eeprom(sc, (caddr_t)as, RL_EE_EADDR, 3, 0);
805         for (i = 0; i < 3; i++) {
806                 eaddr[(i * 2) + 0] = as[i] & 0xff;
807                 eaddr[(i * 2) + 1] = as[i] >> 8;
808         }
809
810         /*
811          * Now read the exact device type from the EEPROM to find
812          * out if it's an 8129 or 8139.
813          */
814         rl_read_eeprom(sc, (caddr_t)&rl_did, RL_EE_PCI_DID, 1, 0);
815
816         if (rl_did == PCI_PRODUCT_REALTEK_RT8139 ||
817             rl_did == PCI_PRODUCT_ACCTON_MPX5030 ||
818             rl_did == PCI_PRODUCT_DELTA_8139 ||
819             rl_did == PCI_PRODUCT_ADDTRON_8139 ||
820             rl_did == PCI_PRODUCT_DLINK_DFE530TXPLUS ||
821             rl_did == PCI_PRODUCT_REALTEK_RT8139B ||
822             rl_did == PCI_PRODUCT_DLINK_DFE690TXD || 
823             rl_did == PCI_PRODUCT_COREGA_CB_TXD ||
824             rl_did == PCI_PRODUCT_COREGA_2CB_TXD ||
825             rl_did == PCI_PRODUCT_PLANEX_FNW_3800_TX) {
826                 sc->rl_type = RL_8139;
827         } else if (rl_did == PCI_PRODUCT_REALTEK_RT8129) {
828                 sc->rl_type = RL_8129;
829         } else {
830                 device_printf(dev, "unknown device ID: %x\n", rl_did);
831                 sc->rl_type = RL_8139;
832                 /*
833                  * Read RL_IDR register to get ethernet address as accessing
834                  * EEPROM may not extract correct address.
835                  */
836                 for (i = 0; i < ETHER_ADDR_LEN; i++)
837                         eaddr[i] = CSR_READ_1(sc, RL_IDR0 + i);
838         }
839
840         error = rl_dma_alloc(sc);
841         if (error)
842                 goto fail;
843
844         /* Do MII setup */
845         if (mii_phy_probe(dev, &sc->rl_miibus, rl_ifmedia_upd,
846                           rl_ifmedia_sts)) {
847                 device_printf(dev, "MII without any phy!\n");
848                 error = ENXIO;
849                 goto fail;
850         }
851
852         ifp = &sc->arpcom.ac_if;
853         ifp->if_softc = sc;
854         if_initname(ifp, device_get_name(dev), device_get_unit(dev));
855         ifp->if_mtu = ETHERMTU;
856         ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
857         ifp->if_ioctl = rl_ioctl;
858         ifp->if_start = rl_start;
859         ifp->if_watchdog = rl_watchdog;
860         ifp->if_init = rl_init;
861         ifp->if_baudrate = 10000000;
862         ifp->if_capabilities = IFCAP_VLAN_MTU;
863 #ifdef IFPOLL_ENABLE
864         ifp->if_npoll = rl_npoll;
865 #endif
866         ifq_set_maxlen(&ifp->if_snd, IFQ_MAXLEN);
867         ifq_set_ready(&ifp->if_snd);
868
869         /*
870          * Call MI attach routine.
871          */
872         ether_ifattach(ifp, eaddr, NULL);
873
874 #ifdef IFPOLL_ENABLE
875         ifpoll_compat_setup(&sc->rl_npoll, NULL, NULL, device_get_unit(dev),
876             ifp->if_serializer);
877 #endif
878
879         error = bus_setup_intr(dev, sc->rl_irq, INTR_MPSAFE, rl_intr,
880                                sc, &sc->rl_intrhand, ifp->if_serializer);
881
882         if (error) {
883                 device_printf(dev, "couldn't set up irq\n");
884                 ether_ifdetach(ifp);
885                 goto fail;
886         }
887
888         ifq_set_cpuid(&ifp->if_snd, rman_get_cpuid(sc->rl_irq));
889
890         return(0);
891
892 fail:
893         rl_detach(dev);
894         return(error);
895 }
896
897 static int
898 rl_detach(device_t dev)
899 {
900         struct rl_softc *sc;
901         struct ifnet *ifp;
902
903         sc = device_get_softc(dev);
904         ifp = &sc->arpcom.ac_if;
905
906         if (device_is_attached(dev)) {
907                 lwkt_serialize_enter(ifp->if_serializer);
908                 rl_stop(sc);
909                 bus_teardown_intr(dev, sc->rl_irq, sc->rl_intrhand);
910                 lwkt_serialize_exit(ifp->if_serializer);
911
912                 ether_ifdetach(ifp);
913         }
914
915         if (sc->rl_miibus)
916                 device_delete_child(dev, sc->rl_miibus);
917         bus_generic_detach(dev);
918
919         if (sc->rl_irq)
920                 bus_release_resource(dev, SYS_RES_IRQ, 0, sc->rl_irq);
921         if (sc->rl_res)
922                 bus_release_resource(dev, RL_RES, RL_RID, sc->rl_res);
923
924         rl_dma_free(sc);
925
926         return(0);
927 }
928
929 /*
930  * Initialize the transmit descriptors.
931  */
932 static void
933 rl_list_tx_init(struct rl_softc *sc)
934 {
935         struct rl_chain_data *cd;
936         int i;
937
938         cd = &sc->rl_cdata;
939         for (i = 0; i < RL_TX_LIST_CNT; i++) {
940                 cd->rl_tx_chain[i] = NULL;
941                 CSR_WRITE_4(sc, RL_TXADDR0 + (i * sizeof(uint32_t)),
942                             0x0000000);
943         }
944
945         sc->rl_cdata.cur_tx = 0;
946         sc->rl_cdata.last_tx = 0;
947 }
948
949 /*
950  * A frame has been uploaded: pass the resulting mbuf chain up to
951  * the higher level protocols.
952  *
953  * You know there's something wrong with a PCI bus-master chip design
954  * when you have to use m_devget().
955  *
956  * The receive operation is badly documented in the datasheet, so I'll
957  * attempt to document it here. The driver provides a buffer area and
958  * places its base address in the RX buffer start address register.
959  * The chip then begins copying frames into the RX buffer. Each frame
960  * is preceded by a 32-bit RX status word which specifies the length
961  * of the frame and certain other status bits. Each frame (starting with
962  * the status word) is also 32-bit aligned. The frame length is in the
963  * first 16 bits of the status word; the lower 15 bits correspond with
964  * the 'rx status register' mentioned in the datasheet.
965  *
966  * Note: to make the Alpha happy, the frame payload needs to be aligned
967  * on a 32-bit boundary. To achieve this, we cheat a bit by copying from
968  * the ring buffer starting at an address two bytes before the actual
969  * data location. We can then shave off the first two bytes using m_adj().
970  * The reason we do this is because m_devget() doesn't let us specify an
971  * offset into the mbuf storage space, so we have to artificially create
972  * one. The ring is allocated in such a way that there are a few unused
973  * bytes of space preceecing it so that it will be safe for us to do the
974  * 2-byte backstep even if reading from the ring at offset 0.
975  */
976 static void
977 rl_rxeof(struct rl_softc *sc)
978 {
979         struct mbuf *m;
980         struct ifnet *ifp;
981         int total_len = 0;
982         uint32_t rxstat;
983         caddr_t rxbufpos;
984         int wrap = 0, done = 0;
985         uint16_t cur_rx = 0, max_bytes = 0, rx_bytes = 0;
986
987         ifp = &sc->arpcom.ac_if;
988
989         while((CSR_READ_1(sc, RL_COMMAND) & RL_CMD_EMPTY_RXBUF) == 0) {
990                 if (!done) {
991                         uint16_t limit;
992
993                         done = 1;
994
995                         cur_rx = (CSR_READ_2(sc, RL_CURRXADDR) + 16) %
996                             RL_RXBUFLEN;
997
998                         /* Do not try to read past this point. */
999                         limit = CSR_READ_2(sc, RL_CURRXBUF) % RL_RXBUFLEN;
1000                         if (limit < cur_rx)
1001                                 max_bytes = (RL_RXBUFLEN - cur_rx) + limit;
1002                         else
1003                                 max_bytes = limit - cur_rx;
1004                 }
1005 #ifdef IFPOLL_ENABLE
1006                 if (ifp->if_flags & IFF_NPOLLING) {
1007                         if (sc->rxcycles <= 0)
1008                                 break;
1009                         sc->rxcycles--;
1010                 }
1011 #endif /* IFPOLL_ENABLE */
1012                 rxbufpos = sc->rl_cdata.rl_rx_buf + cur_rx;
1013                 rxstat = le32toh(*(uint32_t *)rxbufpos);
1014
1015                 /*
1016                  * Here's a totally undocumented fact for you. When the
1017                  * RealTek chip is in the process of copying a packet into
1018                  * RAM for you, the length will be 0xfff0. If you spot a
1019                  * packet header with this value, you need to stop. The
1020                  * datasheet makes absolutely no mention of this and
1021                  * RealTek should be shot for this.
1022                  */
1023                 if ((uint16_t)(rxstat >> 16) == RL_RXSTAT_UNFINISHED)
1024                         break;
1025         
1026                 if ((rxstat & RL_RXSTAT_RXOK) == 0) {
1027                         ifp->if_ierrors++;
1028                         rl_init(sc);
1029                         return;
1030                 }
1031
1032                 /* No errors; receive the packet. */    
1033                 total_len = rxstat >> 16;
1034                 rx_bytes += total_len + 4;
1035
1036                 /*
1037                  * XXX The RealTek chip includes the CRC with every
1038                  * received frame, and there's no way to turn this
1039                  * behavior off (at least, I can't find anything in
1040                  * the manual that explains how to do it) so we have
1041                  * to trim off the CRC manually.
1042                  */
1043                 total_len -= ETHER_CRC_LEN;
1044
1045                 /*
1046                  * Avoid trying to read more bytes than we know
1047                  * the chip has prepared for us.
1048                  */
1049                 if (rx_bytes > max_bytes)
1050                         break;
1051
1052                 rxbufpos = sc->rl_cdata.rl_rx_buf +
1053                         ((cur_rx + sizeof(uint32_t)) % RL_RXBUFLEN);
1054
1055                 if (rxbufpos == (sc->rl_cdata.rl_rx_buf + RL_RXBUFLEN))
1056                         rxbufpos = sc->rl_cdata.rl_rx_buf;
1057
1058                 wrap = (sc->rl_cdata.rl_rx_buf + RL_RXBUFLEN) - rxbufpos;
1059
1060                 if (total_len > wrap) {
1061                         /*
1062                          * Fool m_devget() into thinking we want to copy
1063                          * the whole buffer so we don't end up fragmenting
1064                          * the data.
1065                          */
1066                         m = m_devget(rxbufpos - RL_ETHER_ALIGN,
1067                             wrap + RL_ETHER_ALIGN, 0, ifp, NULL);
1068                         if (m == NULL) {
1069                                 ifp->if_ierrors++;
1070                         } else {
1071                                 m_adj(m, RL_ETHER_ALIGN);
1072                                 m_copyback(m, wrap, total_len - wrap,
1073                                         sc->rl_cdata.rl_rx_buf);
1074                         }
1075                         cur_rx = (total_len - wrap + ETHER_CRC_LEN);
1076                 } else {
1077                         m = m_devget(rxbufpos - RL_ETHER_ALIGN,
1078                             total_len + RL_ETHER_ALIGN, 0, ifp, NULL);
1079                         if (m == NULL) {
1080                                 ifp->if_ierrors++;
1081                         } else
1082                                 m_adj(m, RL_ETHER_ALIGN);
1083                         cur_rx += total_len + 4 + ETHER_CRC_LEN;
1084                 }
1085
1086                 /*
1087                  * Round up to 32-bit boundary.
1088                  */
1089                 cur_rx = (cur_rx + 3) & ~3;
1090                 CSR_WRITE_2(sc, RL_CURRXADDR, cur_rx - 16);
1091
1092                 if (m == NULL)
1093                         continue;
1094
1095                 ifp->if_ipackets++;
1096
1097                 ifp->if_input(ifp, m);
1098         }
1099 }
1100
1101 /*
1102  * A frame was downloaded to the chip. It's safe for us to clean up
1103  * the list buffers.
1104  */
1105 static void
1106 rl_txeof(struct rl_softc *sc)
1107 {
1108         struct ifnet *ifp;
1109         uint32_t txstat;
1110
1111         ifp = &sc->arpcom.ac_if;
1112
1113         /*
1114          * Go through our tx list and free mbufs for those
1115          * frames that have been uploaded.
1116          */
1117         do {
1118                 if (RL_LAST_TXMBUF(sc) == NULL)
1119                         break;
1120                 txstat = CSR_READ_4(sc, RL_LAST_TXSTAT(sc));
1121                 if ((txstat & (RL_TXSTAT_TX_OK | RL_TXSTAT_TX_UNDERRUN |
1122                                RL_TXSTAT_TXABRT)) == 0)
1123                         break;
1124
1125                 ifp->if_collisions += (txstat & RL_TXSTAT_COLLCNT) >> 24;
1126
1127                 bus_dmamap_unload(sc->rl_cdata.rl_tx_tag, RL_LAST_DMAMAP(sc));
1128                 m_freem(RL_LAST_TXMBUF(sc));
1129                 RL_LAST_TXMBUF(sc) = NULL;
1130                 RL_INC(sc->rl_cdata.last_tx);
1131
1132                 if (txstat & RL_TXSTAT_TX_UNDERRUN) {
1133                         sc->rl_txthresh += 32;
1134                         if (sc->rl_txthresh > RL_TX_THRESH_MAX)
1135                                 sc->rl_txthresh = RL_TX_THRESH_MAX;
1136                 }
1137
1138                 if (txstat & RL_TXSTAT_TX_OK) {
1139                         ifp->if_opackets++;
1140                 } else {
1141                         ifp->if_oerrors++;
1142                         if (txstat & (RL_TXSTAT_TXABRT | RL_TXSTAT_OUTOFWIN))
1143                                 CSR_WRITE_4(sc, RL_TXCFG, RL_TXCFG_CONFIG);
1144                 }
1145                 ifq_clr_oactive(&ifp->if_snd);
1146         } while (sc->rl_cdata.last_tx != sc->rl_cdata.cur_tx);
1147
1148         if (RL_LAST_TXMBUF(sc) == NULL)
1149                 ifp->if_timer = 0;
1150         else if (ifp->if_timer == 0)
1151                 ifp->if_timer = 5;
1152 }
1153
1154 static void
1155 rl_tick(void *xsc)
1156 {
1157         struct rl_softc *sc = xsc;
1158         struct mii_data *mii;
1159
1160         lwkt_serialize_enter(sc->arpcom.ac_if.if_serializer);
1161
1162         mii = device_get_softc(sc->rl_miibus);
1163         mii_tick(mii);
1164
1165         callout_reset(&sc->rl_stat_timer, hz, rl_tick, sc);
1166
1167         lwkt_serialize_exit(sc->arpcom.ac_if.if_serializer);
1168 }
1169
1170 #ifdef IFPOLL_ENABLE
1171
1172 static void
1173 rl_npoll_compat(struct ifnet *ifp, void *arg __unused, int count)
1174 {
1175         struct rl_softc *sc = ifp->if_softc;
1176
1177         ASSERT_SERIALIZED(ifp->if_serializer);
1178
1179         sc->rxcycles = count;
1180         rl_rxeof(sc);
1181         rl_txeof(sc);
1182         if (!ifq_is_empty(&ifp->if_snd))
1183                 if_devstart(ifp);
1184
1185         if (sc->rl_npoll.ifpc_stcount-- == 0) {
1186                 uint16_t status;
1187
1188                 sc->rl_npoll.ifpc_stcount = sc->rl_npoll.ifpc_stfrac;
1189  
1190                 status = CSR_READ_2(sc, RL_ISR);
1191                 if (status == 0xffff)
1192                         return;
1193                 if (status)
1194                         CSR_WRITE_2(sc, RL_ISR, status);
1195                  
1196                 /*
1197                  * XXX check behaviour on receiver stalls.
1198                  */
1199
1200                 if (status & RL_ISR_SYSTEM_ERR) {
1201                         rl_reset(sc);
1202                         rl_init(sc);
1203                 }
1204         }
1205 }
1206
1207 static void
1208 rl_npoll(struct ifnet *ifp, struct ifpoll_info *info)
1209 {
1210         struct rl_softc *sc = ifp->if_softc;
1211
1212         ASSERT_SERIALIZED(ifp->if_serializer);
1213
1214         if (info != NULL) {
1215                 int cpuid = sc->rl_npoll.ifpc_cpuid;
1216
1217                 info->ifpi_rx[cpuid].poll_func = rl_npoll_compat;
1218                 info->ifpi_rx[cpuid].arg = NULL;
1219                 info->ifpi_rx[cpuid].serializer = ifp->if_serializer;
1220
1221                 if (ifp->if_flags & IFF_RUNNING) {
1222                         /* disable interrupts */
1223                         CSR_WRITE_2(sc, RL_IMR, 0x0000);
1224                         sc->rl_npoll.ifpc_stcount = 0;
1225                 }
1226                 ifq_set_cpuid(&ifp->if_snd, cpuid);
1227         } else {
1228                 if (ifp->if_flags & IFF_RUNNING) {
1229                         /* enable interrupts */
1230                         CSR_WRITE_2(sc, RL_IMR, RL_INTRS);
1231                 }
1232                 ifq_set_cpuid(&ifp->if_snd, rman_get_cpuid(sc->rl_irq));
1233         }
1234 }
1235
1236 #endif /* IFPOLL_ENABLE */
1237
1238 static void
1239 rl_intr(void *arg)
1240 {
1241         struct rl_softc *sc;
1242         struct ifnet *ifp;
1243         uint16_t status;
1244
1245         sc = arg;
1246
1247         if (sc->suspended)
1248                 return;
1249
1250         ifp = &sc->arpcom.ac_if;
1251
1252         for (;;) {
1253                 status = CSR_READ_2(sc, RL_ISR);
1254                 /* If the card has gone away, the read returns 0xffff. */
1255                 if (status == 0xffff)
1256                         break;
1257
1258                 if (status != 0)
1259                         CSR_WRITE_2(sc, RL_ISR, status);
1260
1261                 if ((status & RL_INTRS) == 0)
1262                         break;
1263
1264                 if (status & RL_ISR_RX_OK)
1265                         rl_rxeof(sc);
1266
1267                 if (status & RL_ISR_RX_ERR)
1268                         rl_rxeof(sc);
1269
1270                 if ((status & RL_ISR_TX_OK) || (status & RL_ISR_TX_ERR))
1271                         rl_txeof(sc);
1272
1273                 if (status & RL_ISR_SYSTEM_ERR) {
1274                         rl_reset(sc);
1275                         rl_init(sc);
1276                 }
1277
1278         }
1279
1280         if (!ifq_is_empty(&ifp->if_snd))
1281                 if_devstart(ifp);
1282 }
1283
1284 /*
1285  * Encapsulate an mbuf chain in a descriptor by coupling the mbuf data
1286  * pointers to the fragment pointers.
1287  */
1288 static int
1289 rl_encap(struct rl_softc *sc, struct mbuf *m_head)
1290 {
1291         struct mbuf *m_new = NULL;
1292         bus_dma_segment_t seg;
1293         int nseg, error;
1294
1295         /*
1296          * The RealTek is brain damaged and wants longword-aligned
1297          * TX buffers, plus we can only have one fragment buffer
1298          * per packet.  We have to copy pretty much all the time.
1299          */
1300         m_new = m_defrag(m_head, MB_DONTWAIT);
1301         if (m_new == NULL) {
1302                 m_freem(m_head);
1303                 return ENOBUFS;
1304         }
1305         m_head = m_new;
1306
1307         /* Pad frames to at least 60 bytes. */
1308         if (m_head->m_pkthdr.len < RL_MIN_FRAMELEN) {
1309                 error = m_devpad(m_head, RL_MIN_FRAMELEN);
1310                 if (error) {
1311                         m_freem(m_head);
1312                         return error;
1313                 }
1314         }
1315
1316         /* Extract physical address. */
1317         error = bus_dmamap_load_mbuf_segment(sc->rl_cdata.rl_tx_tag,
1318                         RL_CUR_DMAMAP(sc), m_head,
1319                         &seg, 1, &nseg, BUS_DMA_NOWAIT);
1320         if (error) {
1321                 m_freem(m_head);
1322                 return error;
1323         }
1324
1325         /* Sync the loaded TX buffer. */
1326         bus_dmamap_sync(sc->rl_cdata.rl_tx_tag, RL_CUR_DMAMAP(sc),
1327                         BUS_DMASYNC_PREWRITE);
1328
1329         /* Transmit */
1330         CSR_WRITE_4(sc, RL_CUR_TXADDR(sc), seg.ds_addr);
1331         CSR_WRITE_4(sc, RL_CUR_TXSTAT(sc),
1332                     RL_TXTHRESH(sc->rl_txthresh) | seg.ds_len);
1333
1334         RL_CUR_TXMBUF(sc) = m_head;
1335         return 0;
1336 }
1337
1338 /*
1339  * Main transmit routine.
1340  */
1341
1342 static void
1343 rl_start(struct ifnet *ifp, struct ifaltq_subque *ifsq)
1344 {
1345         struct rl_softc *sc = ifp->if_softc;
1346         struct mbuf *m_head = NULL;
1347
1348         ASSERT_ALTQ_SQ_DEFAULT(ifp, ifsq);
1349
1350         if ((ifp->if_flags & IFF_RUNNING) == 0 || ifq_is_oactive(&ifp->if_snd))
1351                 return;
1352
1353         while (RL_CUR_TXMBUF(sc) == NULL) {
1354                 m_head = ifq_dequeue(&ifp->if_snd, NULL);
1355                 if (m_head == NULL)
1356                         break;
1357
1358                 if (rl_encap(sc, m_head))
1359                         continue;
1360
1361                 /*
1362                  * If there's a BPF listener, bounce a copy of this frame
1363                  * to him.
1364                  */
1365                 BPF_MTAP(ifp, RL_CUR_TXMBUF(sc));
1366
1367                 RL_INC(sc->rl_cdata.cur_tx);
1368
1369                 /*
1370                  * Set a timeout in case the chip goes out to lunch.
1371                  */
1372                 ifp->if_timer = 5;
1373         }
1374
1375         /*
1376          * We broke out of the loop because all our TX slots are
1377          * full. Mark the NIC as busy until it drains some of the
1378          * packets from the queue.
1379          */
1380         if (RL_CUR_TXMBUF(sc) != NULL)
1381                 ifq_set_oactive(&ifp->if_snd);
1382 }
1383
1384 static void
1385 rl_init(void *xsc)
1386 {
1387         struct rl_softc *sc = xsc;
1388         struct ifnet *ifp = &sc->arpcom.ac_if;
1389         struct mii_data *mii;
1390         uint32_t rxcfg = 0;
1391
1392         mii = device_get_softc(sc->rl_miibus);
1393
1394         /*
1395          * Cancel pending I/O and free all RX/TX buffers.
1396          */
1397         rl_stop(sc);
1398
1399         /*
1400          * Init our MAC address.  Even though the chipset documentation
1401          * doesn't mention it, we need to enter "Config register write enable"
1402          * mode to modify the ID registers.
1403          */
1404         CSR_WRITE_1(sc, RL_EECMD, RL_EEMODE_WRITECFG);
1405         CSR_WRITE_STREAM_4(sc, RL_IDR0,
1406                            *(uint32_t *)(&sc->arpcom.ac_enaddr[0]));
1407         CSR_WRITE_STREAM_4(sc, RL_IDR4,
1408                            *(uint32_t *)(&sc->arpcom.ac_enaddr[4]));
1409         CSR_WRITE_1(sc, RL_EECMD, RL_EEMODE_OFF);
1410
1411         /* Init the RX buffer pointer register. */
1412         CSR_WRITE_4(sc, RL_RXADDR, sc->rl_cdata.rl_rx_buf_paddr);
1413
1414         /* Init TX descriptors. */
1415         rl_list_tx_init(sc);
1416
1417         /*
1418          * Enable transmit and receive.
1419          */
1420         CSR_WRITE_1(sc, RL_COMMAND, RL_CMD_TX_ENB|RL_CMD_RX_ENB);
1421
1422         /*
1423          * Set the initial TX and RX configuration.
1424          */
1425         CSR_WRITE_4(sc, RL_TXCFG, RL_TXCFG_CONFIG);
1426         CSR_WRITE_4(sc, RL_RXCFG, RL_RXCFG_CONFIG);
1427
1428         /* Set the individual bit to receive frames for this host only. */
1429         rxcfg = CSR_READ_4(sc, RL_RXCFG);
1430         rxcfg |= RL_RXCFG_RX_INDIV;
1431
1432         /* If we want promiscuous mode, set the allframes bit. */
1433         if (ifp->if_flags & IFF_PROMISC) {
1434                 rxcfg |= RL_RXCFG_RX_ALLPHYS;
1435                 CSR_WRITE_4(sc, RL_RXCFG, rxcfg);
1436         } else {
1437                 rxcfg &= ~RL_RXCFG_RX_ALLPHYS;
1438                 CSR_WRITE_4(sc, RL_RXCFG, rxcfg);
1439         }
1440
1441         /*
1442          * Set capture broadcast bit to capture broadcast frames.
1443          */
1444         if (ifp->if_flags & IFF_BROADCAST) {
1445                 rxcfg |= RL_RXCFG_RX_BROAD;
1446                 CSR_WRITE_4(sc, RL_RXCFG, rxcfg);
1447         } else {
1448                 rxcfg &= ~RL_RXCFG_RX_BROAD;
1449                 CSR_WRITE_4(sc, RL_RXCFG, rxcfg);
1450         }
1451
1452         /*
1453          * Program the multicast filter, if necessary.
1454          */
1455         rl_setmulti(sc);
1456
1457 #ifdef IFPOLL_ENABLE
1458         /*
1459          * Only enable interrupts if we are polling, keep them off otherwise.
1460          */
1461         if (ifp->if_flags & IFF_NPOLLING) {
1462                 CSR_WRITE_2(sc, RL_IMR, 0);
1463                 sc->rl_npoll.ifpc_stcount = 0;
1464         } else
1465 #endif /* IFPOLL_ENABLE */
1466         /*
1467          * Enable interrupts.
1468          */
1469         CSR_WRITE_2(sc, RL_IMR, RL_INTRS);
1470
1471         /* Set initial TX threshold */
1472         sc->rl_txthresh = RL_TX_THRESH_INIT;
1473
1474         /* Start RX/TX process. */
1475         CSR_WRITE_4(sc, RL_MISSEDPKT, 0);
1476
1477         /* Enable receiver and transmitter. */
1478         CSR_WRITE_1(sc, RL_COMMAND, RL_CMD_TX_ENB|RL_CMD_RX_ENB);
1479
1480         mii_mediachg(mii);
1481
1482         CSR_WRITE_1(sc, RL_CFG1, RL_CFG1_DRVLOAD|RL_CFG1_FULLDUPLEX);
1483
1484         ifp->if_flags |= IFF_RUNNING;
1485         ifq_clr_oactive(&ifp->if_snd);
1486
1487         callout_reset(&sc->rl_stat_timer, hz, rl_tick, sc);
1488 }
1489
1490 /*
1491  * Set media options.
1492  */
1493 static int
1494 rl_ifmedia_upd(struct ifnet *ifp)
1495 {
1496         struct rl_softc *sc;
1497         struct mii_data *mii;
1498
1499         sc = ifp->if_softc;
1500         mii = device_get_softc(sc->rl_miibus);
1501         mii_mediachg(mii);
1502
1503         return(0);
1504 }
1505
1506 /*
1507  * Report current media status.
1508  */
1509 static void
1510 rl_ifmedia_sts(struct ifnet *ifp, struct ifmediareq *ifmr)
1511 {
1512         struct rl_softc *sc = ifp->if_softc;
1513         struct mii_data *mii = device_get_softc(sc->rl_miibus);
1514
1515         mii_pollstat(mii);
1516         ifmr->ifm_active = mii->mii_media_active;
1517         ifmr->ifm_status = mii->mii_media_status;
1518 }
1519
1520 static int
1521 rl_ioctl(struct ifnet *ifp, u_long command, caddr_t data, struct ucred *cr)
1522 {
1523         struct rl_softc *sc = ifp->if_softc;
1524         struct ifreq *ifr = (struct ifreq *) data;
1525         struct mii_data *mii;
1526         int error = 0;
1527
1528         switch (command) {
1529         case SIOCSIFFLAGS:
1530                 if (ifp->if_flags & IFF_UP) {
1531                         rl_init(sc);
1532                 } else {
1533                         if (ifp->if_flags & IFF_RUNNING)
1534                                 rl_stop(sc);
1535                 }
1536                 error = 0;
1537                 break;
1538         case SIOCADDMULTI:
1539         case SIOCDELMULTI:
1540                 rl_setmulti(sc);
1541                 error = 0;
1542                 break;
1543         case SIOCGIFMEDIA:
1544         case SIOCSIFMEDIA:
1545                 mii = device_get_softc(sc->rl_miibus);
1546                 error = ifmedia_ioctl(ifp, ifr, &mii->mii_media, command);
1547                 break;
1548         case SIOCSIFCAP:
1549                 break;
1550         default:
1551                 error = ether_ioctl(ifp, command, data);
1552                 break;
1553         }
1554
1555         return(error);
1556 }
1557
1558 static void
1559 rl_watchdog(struct ifnet *ifp)
1560 {
1561         struct rl_softc *sc = ifp->if_softc;
1562
1563         device_printf(sc->rl_dev, "watchdog timeout\n");
1564
1565         ifp->if_oerrors++;
1566
1567         rl_txeof(sc);
1568         rl_rxeof(sc);
1569         rl_init(sc);
1570 }
1571
1572 /*
1573  * Stop the adapter and free any mbufs allocated to the
1574  * RX and TX lists.
1575  */
1576 static void
1577 rl_stop(struct rl_softc *sc)
1578 {
1579         struct ifnet *ifp = &sc->arpcom.ac_if;
1580         int i;
1581
1582         ifp->if_timer = 0;
1583
1584         callout_stop(&sc->rl_stat_timer);
1585         ifp->if_flags &= ~IFF_RUNNING;
1586         ifq_clr_oactive(&ifp->if_snd);
1587
1588         CSR_WRITE_1(sc, RL_COMMAND, 0x00);
1589         CSR_WRITE_2(sc, RL_IMR, 0x0000);
1590
1591         /*
1592          * Free the TX list buffers.
1593          */
1594         for (i = 0; i < RL_TX_LIST_CNT; i++) {
1595                 if (sc->rl_cdata.rl_tx_chain[i] != NULL) {
1596                         bus_dmamap_unload(sc->rl_cdata.rl_tx_tag,
1597                                           sc->rl_cdata.rl_tx_dmamap[i]);
1598                         m_freem(sc->rl_cdata.rl_tx_chain[i]);
1599                         sc->rl_cdata.rl_tx_chain[i] = NULL;
1600                         CSR_WRITE_4(sc, RL_TXADDR0 + (i * sizeof(uint32_t)),
1601                                     0x0000000);
1602                 }
1603         }
1604 }
1605
1606 /*
1607  * Stop all chip I/O so that the kernel's probe routines don't
1608  * get confused by errant DMAs when rebooting.
1609  */
1610 static void
1611 rl_shutdown(device_t dev)
1612 {
1613         struct rl_softc *sc;
1614
1615         sc = device_get_softc(dev);
1616         lwkt_serialize_enter(sc->arpcom.ac_if.if_serializer);
1617         rl_stop(sc);
1618         lwkt_serialize_exit(sc->arpcom.ac_if.if_serializer);
1619 }
1620
1621 /*
1622  * Device suspend routine.  Stop the interface and save some PCI
1623  * settings in case the BIOS doesn't restore them properly on
1624  * resume.
1625  */
1626 static int
1627 rl_suspend(device_t dev)
1628 {
1629         struct rl_softc *sc = device_get_softc(dev);
1630         int i;
1631
1632         lwkt_serialize_enter(sc->arpcom.ac_if.if_serializer);
1633         rl_stop(sc);
1634
1635         for (i = 0; i < 5; i++)
1636                 sc->saved_maps[i] = pci_read_config(dev, PCIR_BAR(i), 4);
1637         sc->saved_biosaddr = pci_read_config(dev, PCIR_BIOS, 4);
1638         sc->saved_intline = pci_read_config(dev, PCIR_INTLINE, 1);
1639         sc->saved_cachelnsz = pci_read_config(dev, PCIR_CACHELNSZ, 1);
1640         sc->saved_lattimer = pci_read_config(dev, PCIR_LATTIMER, 1);
1641
1642         sc->suspended = 1;
1643
1644         lwkt_serialize_exit(sc->arpcom.ac_if.if_serializer);
1645         return (0);
1646 }
1647
1648 /*
1649  * Device resume routine.  Restore some PCI settings in case the BIOS
1650  * doesn't, re-enable busmastering, and restart the interface if
1651  * appropriate.
1652  */
1653 static int
1654 rl_resume(device_t dev)
1655 {
1656         struct rl_softc *sc = device_get_softc(dev);
1657         struct ifnet *ifp = &sc->arpcom.ac_if;
1658         int             i;
1659
1660         lwkt_serialize_enter(ifp->if_serializer);
1661
1662         /* better way to do this? */
1663         for (i = 0; i < 5; i++)
1664                 pci_write_config(dev, PCIR_BAR(i), sc->saved_maps[i], 4);
1665         pci_write_config(dev, PCIR_BIOS, sc->saved_biosaddr, 4);
1666         pci_write_config(dev, PCIR_INTLINE, sc->saved_intline, 1);
1667         pci_write_config(dev, PCIR_CACHELNSZ, sc->saved_cachelnsz, 1);
1668         pci_write_config(dev, PCIR_LATTIMER, sc->saved_lattimer, 1);
1669
1670         /* reenable busmastering */
1671         pci_enable_busmaster(dev);
1672         pci_enable_io(dev, RL_RES);
1673
1674         /* reinitialize interface if necessary */
1675         if (ifp->if_flags & IFF_UP)
1676                 rl_init(sc);
1677
1678         sc->suspended = 0;
1679         lwkt_serialize_exit(ifp->if_serializer);
1680         return (0);
1681 }
1682
1683 static int
1684 rl_dma_alloc(struct rl_softc *sc)
1685 {
1686         bus_dmamem_t dmem;
1687         int error, i;
1688
1689         error = bus_dma_tag_create(NULL,        /* parent */
1690                         1, 0,                   /* alignment, boundary */
1691                         BUS_SPACE_MAXADDR_32BIT,/* lowaddr */
1692                         BUS_SPACE_MAXADDR,      /* highaddr */
1693                         NULL, NULL,             /* filter, filterarg */
1694                         BUS_SPACE_MAXSIZE_32BIT,/* maxsize */
1695                         0,                      /* nsegments */
1696                         BUS_SPACE_MAXSIZE_32BIT,/* maxsegsize */
1697                         0,                      /* flags */
1698                         &sc->rl_parent_tag);
1699         if (error) {
1700                 device_printf(sc->rl_dev, "can't create parent tag\n");
1701                 return error;
1702         }
1703
1704         /* Allocate a chunk of coherent memory for RX */
1705         error = bus_dmamem_coherent(sc->rl_parent_tag, 1, 0,
1706                         BUS_SPACE_MAXADDR, BUS_SPACE_MAXADDR,
1707                         RL_RXBUFLEN + 1518, BUS_DMA_WAITOK, &dmem);
1708         if (error)
1709                 return error;
1710
1711         sc->rl_cdata.rl_rx_tag = dmem.dmem_tag;
1712         sc->rl_cdata.rl_rx_dmamap = dmem.dmem_map;
1713         sc->rl_cdata.rl_rx_buf_ptr = dmem.dmem_addr;
1714
1715         /* NOTE: Apply same adjustment to vaddr and paddr */
1716         sc->rl_cdata.rl_rx_buf = sc->rl_cdata.rl_rx_buf_ptr + sizeof(uint64_t);
1717         sc->rl_cdata.rl_rx_buf_paddr = dmem.dmem_busaddr + sizeof(uint64_t);
1718
1719         /*
1720          * Allocate TX mbuf's DMA tag and maps
1721          */
1722         error = bus_dma_tag_create(sc->rl_parent_tag,/* parent */
1723                         RL_TXBUF_ALIGN, 0,      /* alignment, boundary */
1724                         BUS_SPACE_MAXADDR,      /* lowaddr */
1725                         BUS_SPACE_MAXADDR,      /* highaddr */
1726                         NULL, NULL,             /* filter, filterarg */
1727                         MCLBYTES,               /* maxsize */
1728                         1,                      /* nsegments */
1729                         MCLBYTES,               /* maxsegsize */
1730                         BUS_DMA_ALLOCNOW | BUS_DMA_WAITOK |
1731                         BUS_DMA_ALIGNED,        /* flags */
1732                         &sc->rl_cdata.rl_tx_tag);
1733         if (error) {
1734                 device_printf(sc->rl_dev, "can't create TX mbuf tag\n");
1735                 return error;
1736         }
1737
1738         for (i = 0; i < RL_TX_LIST_CNT; ++i) {
1739                 error = bus_dmamap_create(sc->rl_cdata.rl_tx_tag,
1740                                 BUS_DMA_WAITOK, &sc->rl_cdata.rl_tx_dmamap[i]);
1741                 if (error) {
1742                         int j;
1743
1744                         for (j = 0; j < i; ++j) {
1745                                 bus_dmamap_destroy(sc->rl_cdata.rl_tx_tag,
1746                                         sc->rl_cdata.rl_tx_dmamap[j]);
1747                         }
1748                         bus_dma_tag_destroy(sc->rl_cdata.rl_tx_tag);
1749                         sc->rl_cdata.rl_tx_tag = NULL;
1750
1751                         device_printf(sc->rl_dev, "can't create TX mbuf map\n");
1752                         return error;
1753                 }
1754         }
1755         return 0;
1756 }
1757
1758 static void
1759 rl_dma_free(struct rl_softc *sc)
1760 {
1761         if (sc->rl_cdata.rl_tx_tag != NULL) {
1762                 int i;
1763
1764                 for (i = 0; i < RL_TX_LIST_CNT; ++i) {
1765                         bus_dmamap_destroy(sc->rl_cdata.rl_tx_tag,
1766                                            sc->rl_cdata.rl_tx_dmamap[i]);
1767                 }
1768                 bus_dma_tag_destroy(sc->rl_cdata.rl_tx_tag);
1769         }
1770
1771         if (sc->rl_cdata.rl_rx_tag != NULL) {
1772                 bus_dmamap_unload(sc->rl_cdata.rl_rx_tag,
1773                                   sc->rl_cdata.rl_rx_dmamap);
1774                 /* NOTE: Use rl_rx_buf_ptr here */
1775                 bus_dmamem_free(sc->rl_cdata.rl_rx_tag,
1776                                 sc->rl_cdata.rl_rx_buf_ptr,
1777                                 sc->rl_cdata.rl_rx_dmamap);
1778                 bus_dma_tag_destroy(sc->rl_cdata.rl_rx_tag);
1779         }
1780
1781         if (sc->rl_parent_tag)
1782                 bus_dma_tag_destroy(sc->rl_parent_tag);
1783 }