summaryrefslogtreecommitdiffstats
path: root/sys/dev/ipw
diff options
context:
space:
mode:
authorscottl <scottl@FreeBSD.org>2012-03-12 18:15:08 +0000
committerscottl <scottl@FreeBSD.org>2012-03-12 18:15:08 +0000
commit2e7ae86807f43c9ea4f0469949d9d219439d4746 (patch)
tree4ced951e8f3d5eebc9a6faba8d843d83ec452288 /sys/dev/ipw
parent89dc636733d07508428d015c5099c0c98a11e8b8 (diff)
downloadFreeBSD-src-2e7ae86807f43c9ea4f0469949d9d219439d4746.zip
FreeBSD-src-2e7ae86807f43c9ea4f0469949d9d219439d4746.tar.gz
More conversions of drivers to use the PCI parent DMA tag.
Diffstat (limited to 'sys/dev/ipw')
-rw-r--r--sys/dev/ipw/if_ipw.c30
-rw-r--r--sys/dev/ipw/if_ipwvar.h1
2 files changed, 24 insertions, 7 deletions
diff --git a/sys/dev/ipw/if_ipw.c b/sys/dev/ipw/if_ipw.c
index e632451..bc3d593 100644
--- a/sys/dev/ipw/if_ipw.c
+++ b/sys/dev/ipw/if_ipw.c
@@ -528,9 +528,21 @@ ipw_dma_alloc(struct ipw_softc *sc)
int error, i;
/*
+ * Allocate parent DMA tag for subsequent allocations.
+ */
+ error = bus_dma_tag_create(bus_get_dma_tag(sc->sc_dev), 1, 0,
+ BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL,
+ BUS_SPACE_MAXSIZE_32BIT, BUS_SPACE_UNRESTRICTED,
+ BUS_SPACE_MAXSIZE_32BIT, 0, NULL, NULL, &sc->parent_dmat);
+ if (error != 0) {
+ device_printf(sc->sc_dev, "could not create parent DMA tag\n");
+ goto fail;
+ }
+
+ /*
* Allocate and map tx ring.
*/
- error = bus_dma_tag_create(NULL, 4, 0, BUS_SPACE_MAXADDR_32BIT,
+ error = bus_dma_tag_create(sc->parent_dmat, 4, 0, BUS_SPACE_MAXADDR_32BIT,
BUS_SPACE_MAXADDR, NULL, NULL, IPW_TBD_SZ, 1, IPW_TBD_SZ, 0, NULL,
NULL, &sc->tbd_dmat);
if (error != 0) {
@@ -556,7 +568,7 @@ ipw_dma_alloc(struct ipw_softc *sc)
/*
* Allocate and map rx ring.
*/
- error = bus_dma_tag_create(NULL, 4, 0, BUS_SPACE_MAXADDR_32BIT,
+ error = bus_dma_tag_create(sc->parent_dmat, 4, 0, BUS_SPACE_MAXADDR_32BIT,
BUS_SPACE_MAXADDR, NULL, NULL, IPW_RBD_SZ, 1, IPW_RBD_SZ, 0, NULL,
NULL, &sc->rbd_dmat);
if (error != 0) {
@@ -582,7 +594,7 @@ ipw_dma_alloc(struct ipw_softc *sc)
/*
* Allocate and map status ring.
*/
- error = bus_dma_tag_create(NULL, 4, 0, BUS_SPACE_MAXADDR_32BIT,
+ error = bus_dma_tag_create(sc->parent_dmat, 4, 0, BUS_SPACE_MAXADDR_32BIT,
BUS_SPACE_MAXADDR, NULL, NULL, IPW_STATUS_SZ, 1, IPW_STATUS_SZ, 0,
NULL, NULL, &sc->status_dmat);
if (error != 0) {
@@ -611,7 +623,7 @@ ipw_dma_alloc(struct ipw_softc *sc)
/*
* Allocate command DMA map.
*/
- error = bus_dma_tag_create(NULL, 1, 0, BUS_SPACE_MAXADDR_32BIT,
+ error = bus_dma_tag_create(sc->parent_dmat, 1, 0, BUS_SPACE_MAXADDR_32BIT,
BUS_SPACE_MAXADDR, NULL, NULL, sizeof (struct ipw_cmd), 1,
sizeof (struct ipw_cmd), 0, NULL, NULL, &sc->cmd_dmat);
if (error != 0) {
@@ -629,7 +641,7 @@ ipw_dma_alloc(struct ipw_softc *sc)
/*
* Allocate headers DMA maps.
*/
- error = bus_dma_tag_create(NULL, 1, 0, BUS_SPACE_MAXADDR_32BIT,
+ error = bus_dma_tag_create(sc->parent_dmat, 1, 0, BUS_SPACE_MAXADDR_32BIT,
BUS_SPACE_MAXADDR, NULL, NULL, sizeof (struct ipw_hdr), 1,
sizeof (struct ipw_hdr), 0, NULL, NULL, &sc->hdr_dmat);
if (error != 0) {
@@ -652,7 +664,7 @@ ipw_dma_alloc(struct ipw_softc *sc)
/*
* Allocate tx buffers DMA maps.
*/
- error = bus_dma_tag_create(NULL, 1, 0, BUS_SPACE_MAXADDR_32BIT,
+ error = bus_dma_tag_create(sc->parent_dmat, 1, 0, BUS_SPACE_MAXADDR_32BIT,
BUS_SPACE_MAXADDR, NULL, NULL, MCLBYTES, IPW_MAX_NSEG, MCLBYTES, 0,
NULL, NULL, &sc->txbuf_dmat);
if (error != 0) {
@@ -684,7 +696,7 @@ ipw_dma_alloc(struct ipw_softc *sc)
/*
* Pre-allocate rx buffers and DMA maps.
*/
- error = bus_dma_tag_create(NULL, 1, 0, BUS_SPACE_MAXADDR_32BIT,
+ error = bus_dma_tag_create(sc->parent_dmat, 1, 0, BUS_SPACE_MAXADDR_32BIT,
BUS_SPACE_MAXADDR, NULL, NULL, MCLBYTES, 1, MCLBYTES, 0, NULL,
NULL, &sc->rxbuf_dmat);
if (error != 0) {
@@ -741,6 +753,10 @@ ipw_release(struct ipw_softc *sc)
struct ipw_soft_buf *sbuf;
int i;
+ if (sc->parent_dmat != NULL) {
+ bus_dma_tag_destroy(sc->parent_dmat);
+ }
+
if (sc->tbd_dmat != NULL) {
if (sc->stbd_list != NULL) {
bus_dmamap_unload(sc->tbd_dmat, sc->tbd_map);
diff --git a/sys/dev/ipw/if_ipwvar.h b/sys/dev/ipw/if_ipwvar.h
index 89702d0..7a8cb8f 100644
--- a/sys/dev/ipw/if_ipwvar.h
+++ b/sys/dev/ipw/if_ipwvar.h
@@ -117,6 +117,7 @@ struct ipw_softc {
int sc_tx_timer;
int sc_scan_timer;
+ bus_dma_tag_t parent_dmat;
bus_dma_tag_t tbd_dmat;
bus_dma_tag_t rbd_dmat;
bus_dma_tag_t status_dmat;
OpenPOWER on IntegriCloud