Hifn7751 based cards may stop working on certain motherboards due to
DMA errors.

Apply by doing:
       cd /usr/src
       patch -p0 < 004_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.103
retrieving revision 1.104
diff -u -r1.103 -r1.104
--- sys/dev/pci/hifn7751.c      2001/09/06 03:31:34     1.103
+++ sys/dev/pci/hifn7751.c      2001/11/04 18:31:42     1.104
@@ -154,6 +154,9 @@
       int rseg;
       caddr_t kva;

+       sc->sc_pci_pc = pa->pa_pc;
+       sc->sc_pci_tag = pa->pa_tag;
+
       if (PCI_VENDOR(pa->pa_id) == PCI_VENDOR_HIFN &&
           PCI_PRODUCT(pa->pa_id) == PCI_PRODUCT_HIFN_7951)
               sc->sc_flags = HIFN_HAS_RNG | HIFN_HAS_PUBLIC;
@@ -185,6 +188,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_dmamap_create(sc->sc_dmat, sizeof(*sc->sc_dma), 1,
           sizeof(*sc->sc_dma), 0, BUS_DMA_NOWAIT, &sc->sc_dmamap)) {
@@ -438,6 +445,8 @@
       struct hifn_softc *sc;
       int full;
{
+       u_int32_t reg;
+
       /*
        * Set polling in the DMA configuration register to zero.  0x7 avoids
        * resetting the board and zeros out the other fields.
@@ -468,6 +477,10 @@
           HIFN_DMACNFG_DMARESET | HIFN_DMACNFG_MODE);

       hifn_puc_wait(sc);
+
+       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
@@ -956,8 +969,13 @@
       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++)
               dma->cmdr[i].p = sc->sc_dmamap->dm_segs[0].ds_addr +
@@ -1539,6 +1557,7 @@
       restart = dmacsr & (HIFN_DMACSR_C_ABORT | HIFN_DMACSR_S_ABORT |
           HIFN_DMACSR_D_ABORT | HIFN_DMACSR_R_ABORT);
       if (restart) {
+               printf("%s: abort, resetting.\n");
               hifnstats.hst_abort++;
               hifn_abort(sc);
               return (1);
Index: sys/dev/pci/hifn7751reg.h
===================================================================
RCS file: /cvs/src/sys/dev/pci/hifn7751reg.h,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -r1.30 -r1.31
--- sys/dev/pci/hifn7751reg.h   2001/08/27 18:54:56     1.30
+++ sys/dev/pci/hifn7751reg.h   2001/11/04 18:31:42     1.31
@@ -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

/*
 * The values below should multiple of 4 -- and be large enough to handle
Index: sys/dev/pci/hifn7751var.h
===================================================================
RCS file: /cvs/src/sys/dev/pci/hifn7751var.h,v
retrieving revision 1.37
retrieving revision 1.38
diff -u -r1.37 -r1.38
--- sys/dev/pci/hifn7751var.h   2001/08/28 21:40:54     1.37
+++ sys/dev/pci/hifn7751var.h   2001/11/04 18:31:42     1.38
@@ -153,6 +153,8 @@
       int sc_rnghz;
       int sc_c_busy, sc_s_busy, sc_d_busy, sc_r_busy, sc_active;
       struct hifn_session sc_sessions[2048];
+       pci_chipset_tag_t sc_pci_pc;
+       pcitag_t sc_pci_tag;
};

#define        WRITE_REG_0(sc,reg,val) \