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 <machine/endian.h>

@@ -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;
};

/*