Don't attempt to do transmit threshold tuning on the Lite-On PNCI; just
put it in Store-and-Forward mode right from the get-go. This eliminates the DMA underrun errors that prevented the receive filter setup from working and caused smashed packets to go out onto the wire. My NetGear FA310-TX board now works. There are still "filter setup failed to complete" messages, however they don't appear to indicate that the filter setup actually failed, since unicast and multicast packet reception work fine. I will address this problem shortly. Reading the log for the FreeBSD `pn' driver suggests that these chips are, in fact, pretty crappy, riddled with hardware bugs (for which more workarounds are coming).
This commit is contained in:
parent
480e8a1a1c
commit
e75ce8c0df
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: tulip.c,v 1.2 1999/09/01 05:07:03 thorpej Exp $ */
|
||||
/* $NetBSD: tulip.c,v 1.3 1999/09/01 20:11:19 thorpej Exp $ */
|
||||
|
||||
/*-
|
||||
* Copyright (c) 1998, 1999 The NetBSD Foundation, Inc.
|
||||
|
@ -111,6 +111,12 @@ const struct tulip_txthresh_tab tlp_10_100_txthresh_tab[] = {
|
|||
{ 0, NULL },
|
||||
};
|
||||
|
||||
#define TXTH_72 0
|
||||
#define TXTH_96 1
|
||||
#define TXTH_128 2
|
||||
#define TXTH_160 3
|
||||
#define TXTH_SF 4
|
||||
|
||||
void tlp_start __P((struct ifnet *));
|
||||
void tlp_watchdog __P((struct ifnet *));
|
||||
int tlp_ioctl __P((struct ifnet *, u_long, caddr_t));
|
||||
|
@ -206,6 +212,15 @@ tlp_attach(sc, name, enaddr)
|
|||
* Set up various chip-specific quirks.
|
||||
*/
|
||||
switch (sc->sc_chip) {
|
||||
case TULIP_CHIP_82C168:
|
||||
case TULIP_CHIP_82C169:
|
||||
/*
|
||||
* These chips seem to have busted DMA engines; just put them
|
||||
* in Store-and-Forward mode from the get-go.
|
||||
*/
|
||||
sc->sc_txthresh = TXTH_SF;
|
||||
break;
|
||||
|
||||
case TULIP_CHIP_WB89C840F:
|
||||
sc->sc_flags |= TULIPF_IC_FS;
|
||||
break;
|
||||
|
|
Loading…
Reference in New Issue