There really is no excuse for using dma_alloc(9) if you have the
bus_dmatag_t available.
This re-uses tulip_busdma_allocmem(), which simplifies the code for
allocating the dmamap and such.
Unfortunately I can't test this myself right now.
Index: if_de.c
===================================================================
RCS file: /home/cvs/src/sys/dev/pci/if_de.c,v
retrieving revision 1.122
diff -u -p -r1.122 if_de.c
--- if_de.c 25 Jun 2015 18:35:48 -0000 1.122
+++ if_de.c 25 Jun 2015 19:14:49 -0000
@@ -4085,7 +4085,8 @@ tulip_txput_setup(tulip_softc_t * const
sc->tulip_if.if_start = tulip_ifstart;
return;
}
- bcopy(sc->tulip_setupdata, sc->tulip_setupdma,
sizeof(sc->tulip_setupdata));
+ bcopy(sc->tulip_setupdata, sc->tulip_setupbuf,
+ sizeof(sc->tulip_setupdata));
/*
* Clear WANTSETUP and set DOINGSETUP. Set know that WANTSETUP is
* set and DOINGSETUP is clear doing an XOR of the two will DTRT.
@@ -4356,19 +4357,12 @@ tulip_busdma_init(tulip_softc_t * const
{
int error = 0;
- sc->tulip_setupdma = dma_alloc(sizeof(sc->tulip_setupdata), PR_WAITOK);
-
/*
- * Allocate dmamap for setup descriptor
+ * Allocate space and dmamap for setup descriptor
*/
- error = bus_dmamap_create(sc->tulip_dmatag, TULIP_SETUP, 2,
- TULIP_SETUP, 0, BUS_DMA_NOWAIT, &sc->tulip_setupmap);
- if (error == 0) {
- error = bus_dmamap_load(sc->tulip_dmatag, sc->tulip_setupmap,
- sc->tulip_setupdma, TULIP_SETUP, NULL, BUS_DMA_NOWAIT);
- if (error)
- bus_dmamap_destroy(sc->tulip_dmatag, sc->tulip_setupmap);
- }
+ error = tulip_busdma_allocmem(sc, sizeof(sc->tulip_setupdata),
+ &sc->tulip_setupmap, &sc->tulip_setupbuf);
+
/*
* Allocate space and dmamap for transmit ring
*/
Index: if_devar.h
===================================================================
RCS file: /home/cvs/src/sys/dev/pci/if_devar.h,v
retrieving revision 1.34
diff -u -p -r1.34 if_devar.h
--- if_devar.h 25 Jun 2015 18:35:48 -0000 1.34
+++ if_devar.h 25 Jun 2015 19:07:19 -0000
@@ -601,7 +601,7 @@ struct _tulip_softc_t {
* filled.
*/
#define TULIP_SETUP 192
- u_int32_t *tulip_setupdma;
+ tulip_desc_t *tulip_setupbuf;
u_int32_t tulip_setupdata[TULIP_SETUP / sizeof(u_int32_t)];
char tulip_boardid[16]; /* buffer for board ID */