diff options
author | scottl <scottl@FreeBSD.org> | 2003-07-01 15:52:06 +0000 |
---|---|---|
committer | scottl <scottl@FreeBSD.org> | 2003-07-01 15:52:06 +0000 |
commit | 4d495abb9d6f6e6d703264c4133ce1f0c4e7df92 (patch) | |
tree | 1bbd76935b6d5917753df7328c69bd2f3c75f15a /sys/dev/sound/pci | |
parent | 40bbdc533036dcf851a5b4c44f1b64b82b887a5a (diff) | |
download | FreeBSD-src-4d495abb9d6f6e6d703264c4133ce1f0c4e7df92.zip FreeBSD-src-4d495abb9d6f6e6d703264c4133ce1f0c4e7df92.tar.gz |
Mega busdma API commit.
Add two new arguments to bus_dma_tag_create(): lockfunc and lockfuncarg.
Lockfunc allows a driver to provide a function for managing its locking
semantics while using busdma. At the moment, this is used for the
asynchronous busdma_swi and callback mechanism. Two lockfunc implementations
are provided: busdma_lock_mutex() performs standard mutex operations on the
mutex that is specified from lockfuncarg. dftl_lock() is a panic
implementation and is defaulted to when NULL, NULL are passed to
bus_dma_tag_create(). The only time that NULL, NULL should ever be used is
when the driver ensures that bus_dmamap_load() will not be deferred.
Drivers that do not provide their own locking can pass
busdma_lock_mutex,&Giant args in order to preserve the former behaviour.
sparc64 and powerpc do not provide real busdma_swi functions, so this is
largely a noop on those platforms. The busdma_swi on is64 is not properly
locked yet, so warnings will be emitted on this platform when busdma
callback deferrals happen.
If anyone gets panics or warnings from dflt_lock() being called, please
let me know right away.
Reviewed by: tmm, gibbs
Diffstat (limited to 'sys/dev/sound/pci')
-rw-r--r-- | sys/dev/sound/pci/als4000.c | 3 | ||||
-rw-r--r-- | sys/dev/sound/pci/au88x0.c | 2 | ||||
-rw-r--r-- | sys/dev/sound/pci/aureal.c | 3 | ||||
-rw-r--r-- | sys/dev/sound/pci/cmi.c | 2 | ||||
-rw-r--r-- | sys/dev/sound/pci/cs4281.c | 3 | ||||
-rw-r--r-- | sys/dev/sound/pci/csapcm.c | 3 | ||||
-rw-r--r-- | sys/dev/sound/pci/ds1.c | 6 | ||||
-rw-r--r-- | sys/dev/sound/pci/emu10k1.c | 3 | ||||
-rw-r--r-- | sys/dev/sound/pci/es137x.c | 3 | ||||
-rw-r--r-- | sys/dev/sound/pci/fm801.c | 3 | ||||
-rw-r--r-- | sys/dev/sound/pci/ich.c | 3 | ||||
-rw-r--r-- | sys/dev/sound/pci/maestro.c | 3 | ||||
-rw-r--r-- | sys/dev/sound/pci/maestro3.c | 3 | ||||
-rw-r--r-- | sys/dev/sound/pci/solo.c | 3 | ||||
-rw-r--r-- | sys/dev/sound/pci/t4dwave.c | 3 | ||||
-rw-r--r-- | sys/dev/sound/pci/via8233.c | 6 | ||||
-rw-r--r-- | sys/dev/sound/pci/via82c686.c | 6 | ||||
-rw-r--r-- | sys/dev/sound/pci/vibes.c | 3 |
18 files changed, 41 insertions, 20 deletions
diff --git a/sys/dev/sound/pci/als4000.c b/sys/dev/sound/pci/als4000.c index 3007736..77b3984 100644 --- a/sys/dev/sound/pci/als4000.c +++ b/sys/dev/sound/pci/als4000.c @@ -745,7 +745,8 @@ als_resource_grab(device_t dev, struct sc_info *sc) /*filter*/NULL, /*filterarg*/NULL, /*maxsize*/sc->bufsz, /*nsegments*/1, /*maxsegz*/0x3ffff, - /*flags*/0, &sc->parent_dmat) != 0) { + /*flags*/0, /*lockfunc*/busdma_lock_mutex, + /*lockarg*/&Giant, &sc->parent_dmat) != 0) { device_printf(dev, "unable to create dma tag\n"); goto bad; } diff --git a/sys/dev/sound/pci/au88x0.c b/sys/dev/sound/pci/au88x0.c index 3bf227b..81416dd 100644 --- a/sys/dev/sound/pci/au88x0.c +++ b/sys/dev/sound/pci/au88x0.c @@ -545,7 +545,7 @@ au88x0_pci_attach(device_t dev) BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, /* restrict to 4GB */ NULL, NULL, /* no filter */ aui->aui_bufsize, 1, aui->aui_bufsize, - 0, &aui->aui_dmat); + 0, busdma_lock_mutex, &Giant, &aui->aui_dmat); if (error != 0) { device_printf(dev, "failed to create DMA tag\n"); goto failed; diff --git a/sys/dev/sound/pci/aureal.c b/sys/dev/sound/pci/aureal.c index d301fd8..3630699 100644 --- a/sys/dev/sound/pci/aureal.c +++ b/sys/dev/sound/pci/aureal.c @@ -641,7 +641,8 @@ au_pci_attach(device_t dev) /*highaddr*/BUS_SPACE_MAXADDR, /*filter*/NULL, /*filterarg*/NULL, /*maxsize*/AU_BUFFSIZE, /*nsegments*/1, /*maxsegz*/0x3ffff, - /*flags*/0, &au->parent_dmat) != 0) { + /*flags*/0, /*lockfunc*/busdma_lock_mutex, + /*lockarg*/&Giant, &au->parent_dmat) != 0) { device_printf(dev, "unable to create dma tag\n"); goto bad; } diff --git a/sys/dev/sound/pci/cmi.c b/sys/dev/sound/pci/cmi.c index 14c6c8e..f466114 100644 --- a/sys/dev/sound/pci/cmi.c +++ b/sys/dev/sound/pci/cmi.c @@ -876,6 +876,8 @@ cmi_attach(device_t dev) /*filter*/NULL, /*filterarg*/NULL, /*maxsize*/sc->bufsz, /*nsegments*/1, /*maxsegz*/0x3ffff, /*flags*/0, + /*lockfunc*/busdma_lock_mutex, + /*lockfunc*/&Giant, &sc->parent_dmat) != 0) { device_printf(dev, "cmi_attach: Unable to create dma tag\n"); goto bad; diff --git a/sys/dev/sound/pci/cs4281.c b/sys/dev/sound/pci/cs4281.c index a700394..d9b91dd 100644 --- a/sys/dev/sound/pci/cs4281.c +++ b/sys/dev/sound/pci/cs4281.c @@ -830,7 +830,8 @@ cs4281_pci_attach(device_t dev) /*filter*/NULL, /*filterarg*/NULL, /*maxsize*/sc->bufsz, /*nsegments*/1, /*maxsegz*/0x3ffff, - /*flags*/0, &sc->parent_dmat) != 0) { + /*flags*/0, /*lockfunc*/busdma_lock_mutex, + /*lockarg*/&Giant, &sc->parent_dmat) != 0) { device_printf(dev, "unable to create dma tag\n"); goto bad; } diff --git a/sys/dev/sound/pci/csapcm.c b/sys/dev/sound/pci/csapcm.c index b445e48..d379528 100644 --- a/sys/dev/sound/pci/csapcm.c +++ b/sys/dev/sound/pci/csapcm.c @@ -679,7 +679,8 @@ csa_allocres(struct csa_info *csa, device_t dev) /*highaddr*/BUS_SPACE_MAXADDR, /*filter*/NULL, /*filterarg*/NULL, /*maxsize*/CS461x_BUFFSIZE, /*nsegments*/1, /*maxsegz*/0x3ffff, - /*flags*/0, &csa->parent_dmat) != 0) + /*flags*/0, /*lockfunc*/busdma_lock_mutex, + /*lockarg*/&Giant, &csa->parent_dmat) != 0) return (1); return (0); diff --git a/sys/dev/sound/pci/ds1.c b/sys/dev/sound/pci/ds1.c index 1f1a2fe..e3a9a6e 100644 --- a/sys/dev/sound/pci/ds1.c +++ b/sys/dev/sound/pci/ds1.c @@ -828,7 +828,8 @@ ds_init(struct sc_info *sc) if (sc->regbase == NULL) { if (bus_dma_tag_create(NULL, 2, 0, BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, - NULL, NULL, memsz, 1, memsz, 0, &sc->control_dmat)) + NULL, NULL, memsz, 1, memsz, 0, busdma_lock_mutex, + &Giant, &sc->control_dmat)) return -1; if (bus_dmamem_alloc(sc->control_dmat, &buf, BUS_DMA_NOWAIT, &sc->map)) return -1; @@ -968,7 +969,8 @@ ds_pci_attach(device_t dev) /*highaddr*/BUS_SPACE_MAXADDR, /*filter*/NULL, /*filterarg*/NULL, /*maxsize*/sc->bufsz, /*nsegments*/1, /*maxsegz*/0x3ffff, - /*flags*/0, &sc->buffer_dmat) != 0) { + /*flags*/0, /*lockfunc*/busdma_lock_mutex, + /*lockarg*/&Giant, &sc->buffer_dmat) != 0) { device_printf(dev, "unable to create dma tag\n"); goto bad; } diff --git a/sys/dev/sound/pci/emu10k1.c b/sys/dev/sound/pci/emu10k1.c index c847016..a0a986f 100644 --- a/sys/dev/sound/pci/emu10k1.c +++ b/sys/dev/sound/pci/emu10k1.c @@ -1494,7 +1494,8 @@ emu_pci_attach(device_t dev) /*highaddr*/BUS_SPACE_MAXADDR, /*filter*/NULL, /*filterarg*/NULL, /*maxsize*/sc->bufsz, /*nsegments*/1, /*maxsegz*/0x3ffff, - /*flags*/0, &sc->parent_dmat) != 0) { + /*flags*/0, /*lockfunc*/busdma_lock_mutex, + /*lockarg*/&Giant, &sc->parent_dmat) != 0) { device_printf(dev, "unable to create dma tag\n"); goto bad; } diff --git a/sys/dev/sound/pci/es137x.c b/sys/dev/sound/pci/es137x.c index f864b4a..9ae6606 100644 --- a/sys/dev/sound/pci/es137x.c +++ b/sys/dev/sound/pci/es137x.c @@ -902,7 +902,8 @@ es_pci_attach(device_t dev) /*highaddr*/BUS_SPACE_MAXADDR, /*filter*/NULL, /*filterarg*/NULL, /*maxsize*/es->bufsz, /*nsegments*/1, /*maxsegz*/0x3ffff, - /*flags*/0, &es->parent_dmat) != 0) { + /*flags*/0, /*lockfunc*/busdma_lock_mutex, + /*lockarg*/&Giant, &es->parent_dmat) != 0) { device_printf(dev, "unable to create dma tag\n"); goto bad; } diff --git a/sys/dev/sound/pci/fm801.c b/sys/dev/sound/pci/fm801.c index c42da08..417ed99 100644 --- a/sys/dev/sound/pci/fm801.c +++ b/sys/dev/sound/pci/fm801.c @@ -632,7 +632,8 @@ fm801_pci_attach(device_t dev) /*highaddr*/BUS_SPACE_MAXADDR, /*filter*/NULL, /*filterarg*/NULL, /*maxsize*/fm801->bufsz, /*nsegments*/1, /*maxsegz*/0x3ffff, - /*flags*/0, &fm801->parent_dmat) != 0) { + /*flags*/0, /*lockfunc*/busdma_lock_mutex, + /*lockarg*/&Giant, &fm801->parent_dmat) != 0) { device_printf(dev, "unable to create dma tag\n"); goto oops; } diff --git a/sys/dev/sound/pci/ich.c b/sys/dev/sound/pci/ich.c index aa5e856..7d5faa5 100644 --- a/sys/dev/sound/pci/ich.c +++ b/sys/dev/sound/pci/ich.c @@ -708,7 +708,8 @@ ich_pci_attach(device_t dev) sc->bufsz = pcm_getbuffersize(dev, 4096, ICH_DEFAULT_BUFSZ, ICH_MAX_BUFSZ); if (bus_dma_tag_create(NULL, 8, 0, BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, - NULL, NULL, sc->bufsz, 1, 0x3ffff, 0, &sc->dmat) != 0) { + NULL, NULL, sc->bufsz, 1, 0x3ffff, 0, + busdma_lock_mutex, &Giant, &sc->dmat) != 0) { device_printf(dev, "unable to create dma tag\n"); goto bad; } diff --git a/sys/dev/sound/pci/maestro.c b/sys/dev/sound/pci/maestro.c index c479171..10613ed 100644 --- a/sys/dev/sound/pci/maestro.c +++ b/sys/dev/sound/pci/maestro.c @@ -972,7 +972,8 @@ agg_attach(device_t dev) /*lowaddr*/MAESTRO_MAXADDR, /*highaddr*/BUS_SPACE_MAXADDR, /*filter*/NULL, /*filterarg*/NULL, /*maxsize*/ess->bufsz, /*nsegments*/1, /*maxsegz*/0x3ffff, - /*flags*/0, &ess->parent_dmat) != 0) { + /*flags*/0, /*lockfunc*/busdma_lock_mutex, + /*lockarg*/&Giant, &ess->parent_dmat) != 0) { device_printf(dev, "unable to create dma tag\n"); goto bad; } diff --git a/sys/dev/sound/pci/maestro3.c b/sys/dev/sound/pci/maestro3.c index ae679ca..2f9f802 100644 --- a/sys/dev/sound/pci/maestro3.c +++ b/sys/dev/sound/pci/maestro3.c @@ -1146,7 +1146,8 @@ m3_pci_attach(device_t dev) /*filter*/NULL, /*filterarg*/NULL, /*maxsize*/sc->bufsz, /*nsegments*/1, /*maxsegz*/0x3ffff, - /*flags*/0, &sc->parent_dmat) != 0) { + /*flags*/0, /*lockfunc*/busdma_lock_mutex, + /*lockarg*/&Giant, &sc->parent_dmat) != 0) { device_printf(dev, "unable to create dma tag\n"); goto bad; } diff --git a/sys/dev/sound/pci/solo.c b/sys/dev/sound/pci/solo.c index a077cca..e13da9f 100644 --- a/sys/dev/sound/pci/solo.c +++ b/sys/dev/sound/pci/solo.c @@ -991,7 +991,8 @@ ess_attach(device_t dev) /*filter*/NULL, /*filterarg*/NULL, /*maxsize*/sc->bufsz, /*nsegments*/1, /*maxsegz*/0x3ffff, - /*flags*/0, &sc->parent_dmat) != 0) { + /*flags*/0, /*lockfunc*/busdma_lock_mutex, + /*lockarg*/&Giant, &sc->parent_dmat) != 0) { device_printf(dev, "unable to create dma tag\n"); goto no; } diff --git a/sys/dev/sound/pci/t4dwave.c b/sys/dev/sound/pci/t4dwave.c index cd7de77..19a92dc 100644 --- a/sys/dev/sound/pci/t4dwave.c +++ b/sys/dev/sound/pci/t4dwave.c @@ -854,7 +854,8 @@ tr_pci_attach(device_t dev) /*highaddr*/BUS_SPACE_MAXADDR, /*filter*/NULL, /*filterarg*/NULL, /*maxsize*/tr->bufsz, /*nsegments*/1, /*maxsegz*/0x3ffff, - /*flags*/0, &tr->parent_dmat) != 0) { + /*flags*/0, /*lockfunc*/busdma_lock_mutex, + /*lockarg*/&Giant, &tr->parent_dmat) != 0) { device_printf(dev, "unable to create dma tag\n"); goto bad; } diff --git a/sys/dev/sound/pci/via8233.c b/sys/dev/sound/pci/via8233.c index f8f136e..598e88f 100644 --- a/sys/dev/sound/pci/via8233.c +++ b/sys/dev/sound/pci/via8233.c @@ -792,7 +792,8 @@ via_attach(device_t dev) /*highaddr*/BUS_SPACE_MAXADDR, /*filter*/NULL, /*filterarg*/NULL, /*maxsize*/via->bufsz, /*nsegments*/1, /*maxsegz*/0x3ffff, - /*flags*/0, &via->parent_dmat) != 0) { + /*flags*/0, /*lockfunc*/busdma_lock_mutex, + /*lockarg*/&Giant, &via->parent_dmat) != 0) { device_printf(dev, "unable to create dma tag\n"); goto bad; } @@ -808,7 +809,8 @@ via_attach(device_t dev) /*filter*/NULL, /*filterarg*/NULL, /*maxsize*/NSEGS * sizeof(struct via_dma_op), /*nsegments*/1, /*maxsegz*/0x3ffff, - /*flags*/0, &via->sgd_dmat) != 0) { + /*flags*/0, /*lockfunc*/busdma_lock_mutex, + /*lockarg*/&Giant, &via->sgd_dmat) != 0) { device_printf(dev, "unable to create dma tag\n"); goto bad; } diff --git a/sys/dev/sound/pci/via82c686.c b/sys/dev/sound/pci/via82c686.c index 2e958ac..95c20f1 100644 --- a/sys/dev/sound/pci/via82c686.c +++ b/sys/dev/sound/pci/via82c686.c @@ -544,7 +544,8 @@ via_attach(device_t dev) /*highaddr*/BUS_SPACE_MAXADDR, /*filter*/NULL, /*filterarg*/NULL, /*maxsize*/via->bufsz, /*nsegments*/1, /*maxsegz*/0x3ffff, - /*flags*/0, &via->parent_dmat) != 0) { + /*flags*/0, /*lockfunc*/busdma_lock_mutex, + /*lockarg*/&Giant, &via->parent_dmat) != 0) { device_printf(dev, "unable to create dma tag\n"); goto bad; } @@ -560,7 +561,8 @@ via_attach(device_t dev) /*filter*/NULL, /*filterarg*/NULL, /*maxsize*/NSEGS * sizeof(struct via_dma_op), /*nsegments*/1, /*maxsegz*/0x3ffff, - /*flags*/0, &via->sgd_dmat) != 0) { + /*flags*/0, /*lockfunc*/busdma_lock_mutex, + /*lockarg*/&Giant, &via->sgd_dmat) != 0) { device_printf(dev, "unable to create dma tag\n"); goto bad; } diff --git a/sys/dev/sound/pci/vibes.c b/sys/dev/sound/pci/vibes.c index 7eb4955..589be74 100644 --- a/sys/dev/sound/pci/vibes.c +++ b/sys/dev/sound/pci/vibes.c @@ -776,7 +776,8 @@ sv_attach(device_t dev) { /*filter*/NULL, /*filterarg*/NULL, /*maxsize*/sc->bufsz, /*nsegments*/1, /*maxsegz*/0x3ffff, /*flags*/0, - &sc->parent_dmat) != 0) { + /*lockfunc*/busdma_lock_mutex, + /*lockarg*/&Giant, &sc->parent_dmat) != 0) { device_printf(dev, "sv_attach: Unable to create dma tag\n"); goto fail; } |