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;
 };
 
 /*

