Hifn7751 based cards may stop working on certain motherboards due to DMA errors. Apply by doing: cd /usr/src patch -p0 < 018_hifn.patch And then rebuild your kernel. Index: sys/dev/pci/hifn7751.c =================================================================== RCS file: /cvs/src/sys/dev/pci/hifn7751.c,v retrieving revision 1.57 diff -u -r1.57 hifn7751.c --- sys/dev/pci/hifn7751.c 2001/04/06 16:27:46 1.57 +++ sys/dev/pci/hifn7751.c 2001/11/15 16:06:00 @@ -145,6 +145,9 @@ int rseg; caddr_t kva; + sc->sc_pci_pc = pa->pa_pc; + sc->sc_pci_tag = pa->pa_tag; + cmd = pci_conf_read(pc, pa->pa_tag, PCI_COMMAND_STATUS_REG); cmd |= PCI_COMMAND_MEM_ENABLE | PCI_COMMAND_MASTER_ENABLE; pci_conf_write(pc, pa->pa_tag, PCI_COMMAND_STATUS_REG, cmd); @@ -172,6 +175,10 @@ goto fail_io0; } + cmd = pci_conf_read(sc->sc_pci_pc, sc->sc_pci_tag, HIFN_RETRY_TIMEOUT); + cmd &= 0xffff0000; + pci_conf_write(sc->sc_pci_pc, sc->sc_pci_tag, HIFN_RETRY_TIMEOUT, cmd); + sc->sc_dmat = pa->pa_dmat; if (bus_dmamem_alloc(sc->sc_dmat, sizeof(*sc->sc_dma), PAGE_SIZE, 0, &seg, 1, &rseg, BUS_DMA_NOWAIT)) { @@ -310,6 +317,8 @@ hifn_reset_board(sc) struct hifn_softc *sc; { + u_int32_t reg; + /* * Set polling in the DMA configuration register to zero. 0x7 avoids * resetting the board and zeros out the other fields. @@ -344,6 +353,10 @@ * Wait another millisecond for the board to un-reset. */ DELAY(1000); + + reg = pci_conf_read(sc->sc_pci_pc, sc->sc_pci_tag, HIFN_RETRY_TIMEOUT); + reg &= 0xffff0000; + pci_conf_write(sc->sc_pci_pc, sc->sc_pci_tag, HIFN_RETRY_TIMEOUT, reg); } u_int32_t @@ -761,7 +774,12 @@ struct hifn_softc *sc; { struct hifn_dma *dma = sc->sc_dma; + u_int32_t reg; int i; + + reg = pci_conf_read(sc->sc_pci_pc, sc->sc_pci_tag, HIFN_RETRY_TIMEOUT); + reg &= 0xffff0000; + pci_conf_write(sc->sc_pci_pc, sc->sc_pci_tag, HIFN_RETRY_TIMEOUT, reg); /* initialize static pointer values */ for (i = 0; i < HIFN_D_CMD_RSIZE; i++) Index: sys/dev/pci/hifn7751reg.h =================================================================== RCS file: /cvs/src/sys/dev/pci/hifn7751reg.h,v retrieving revision 1.17 diff -u -r1.17 hifn7751reg.h --- sys/dev/pci/hifn7751reg.h 2000/12/12 21:30:34 1.17 +++ sys/dev/pci/hifn7751reg.h 2001/11/15 16:06:01 @@ -35,7 +35,7 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef __HIFN_H__ -#define __HIFN_H__ +#define __HIFN_H__ #include @@ -43,8 +43,10 @@ * Some PCI configuration space offset defines. The names were made * identical to the names used by the Linux kernel. */ -#define HIFN_BAR0 (PCI_MAPREG_START + 0) /* PUC register map */ -#define HIFN_BAR1 (PCI_MAPREG_START + 4) /* DMA register map */ +#define HIFN_BAR0 (PCI_MAPREG_START + 0) /* PUC register map */ +#define HIFN_BAR1 (PCI_MAPREG_START + 4) /* DMA register map */ +#define HIFN_RETRY_TIMEOUT 0x40 +#define HIFN_TRDY_TIMEOUT 0x41 /* * Some configurable values for the driver @@ -138,6 +140,8 @@ int sc_maxses; int sc_ramsize; struct hifn_session sc_sessions[2048]; + pci_chipset_tag_t sc_pci_pc; + pcitag_t sc_pci_tag; }; /*