summaryrefslogtreecommitdiffstats
path: root/sys/dev/sound
diff options
context:
space:
mode:
authornyan <nyan@FreeBSD.org>2003-02-07 14:05:34 +0000
committernyan <nyan@FreeBSD.org>2003-02-07 14:05:34 +0000
commit3391eada81b7f6040f4ba8596e92787f4398bccd (patch)
treebb7186a3521199202c6d88ec66567221b0ead322 /sys/dev/sound
parente495da0cd39b3a144132e16be2f4cf8eed2d13b0 (diff)
downloadFreeBSD-src-3391eada81b7f6040f4ba8596e92787f4398bccd.zip
FreeBSD-src-3391eada81b7f6040f4ba8596e92787f4398bccd.tar.gz
- Clean up ISA DMA supports.
- Rename all sndbuf_isadma* functions to sndbuf_dma* and move them into sys/dev/sound/isa/sndbuf_dma.c. No response from: sound
Diffstat (limited to 'sys/dev/sound')
-rw-r--r--sys/dev/sound/isa/ad1816.c8
-rw-r--r--sys/dev/sound/isa/ess.c12
-rw-r--r--sys/dev/sound/isa/mss.c8
-rw-r--r--sys/dev/sound/isa/sb16.c32
-rw-r--r--sys/dev/sound/isa/sb8.c8
-rw-r--r--sys/dev/sound/isa/sbc.c2
-rw-r--r--sys/dev/sound/isa/sndbuf_dma.c103
-rw-r--r--sys/dev/sound/pcm/buffer.c95
-rw-r--r--sys/dev/sound/pcm/buffer.h38
-rw-r--r--sys/dev/sound/pcm/channel.c8
-rw-r--r--sys/dev/sound/pcm/sound.h7
11 files changed, 177 insertions, 144 deletions
diff --git a/sys/dev/sound/isa/ad1816.c b/sys/dev/sound/isa/ad1816.c
index 6f14d9a..2554af2 100644
--- a/sys/dev/sound/isa/ad1816.c
+++ b/sys/dev/sound/isa/ad1816.c
@@ -29,6 +29,8 @@
#include <dev/sound/pcm/sound.h>
#include <dev/sound/isa/ad1816.h>
+#include <isa/isavar.h>
+
#include "mixer_if.h"
SND_DECLARE_FILE("$FreeBSD$");
@@ -322,7 +324,7 @@ ad1816chan_setdir(kobj_t obj, void *data, int dir)
struct ad1816_chinfo *ch = data;
struct ad1816_info *ad1816 = ch->parent;
- sndbuf_isadmasetup(ch->buffer, (dir == PCMDIR_PLAY)? ad1816->drq1 : ad1816->drq2);
+ sndbuf_dmasetup(ch->buffer, (dir == PCMDIR_PLAY)? ad1816->drq1 : ad1816->drq2);
ch->dir = dir;
return 0;
}
@@ -407,7 +409,7 @@ ad1816chan_trigger(kobj_t obj, void *data, int go)
if (go == PCMTRIG_EMLDMAWR || go == PCMTRIG_EMLDMARD)
return 0;
- sndbuf_isadma(ch->buffer, go);
+ sndbuf_dma(ch->buffer, go);
wr = (ch->dir == PCMDIR_PLAY);
reg = wr? AD1816_PLAY : AD1816_CAPT;
ad1816_lock(ad1816);
@@ -453,7 +455,7 @@ static int
ad1816chan_getptr(kobj_t obj, void *data)
{
struct ad1816_chinfo *ch = data;
- return sndbuf_isadmaptr(ch->buffer);
+ return sndbuf_dmaptr(ch->buffer);
}
static struct pcmchan_caps *
diff --git a/sys/dev/sound/isa/ess.c b/sys/dev/sound/isa/ess.c
index 35c4fff..38e3198 100644
--- a/sys/dev/sound/isa/ess.c
+++ b/sys/dev/sound/isa/ess.c
@@ -34,6 +34,8 @@
#include <dev/sound/isa/sb.h>
#include <dev/sound/chip.h>
+#include <isa/isavar.h>
+
#include "mixer_if.h"
SND_DECLARE_FILE("$FreeBSD$");
@@ -367,7 +369,7 @@ ess_intr(void *arg)
chn_intr(sc->pch.channel);
if (sc->pch.stopping) {
sc->pch.run = 0;
- sndbuf_isadma(sc->pch.buffer, PCMTRIG_STOP);
+ sndbuf_dma(sc->pch.buffer, PCMTRIG_STOP);
sc->pch.stopping = 0;
if (sc->pch.hwch == 1)
ess_write(sc, 0xb8, ess_read(sc, 0xb8) & ~0x01);
@@ -381,7 +383,7 @@ ess_intr(void *arg)
chn_intr(sc->rch.channel);
if (sc->rch.stopping) {
sc->rch.run = 0;
- sndbuf_isadma(sc->rch.buffer, PCMTRIG_STOP);
+ sndbuf_dma(sc->rch.buffer, PCMTRIG_STOP);
sc->rch.stopping = 0;
/* XXX: will this stop audio2? */
ess_write(sc, 0xb8, ess_read(sc, 0xb8) & ~0x01);
@@ -565,7 +567,7 @@ esschan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b, struct pcm_channel *
ch->hwch = 1;
if ((dir == PCMDIR_PLAY) && (sc->duplex))
ch->hwch = 2;
- sndbuf_isadmasetup(ch->buffer, (ch->hwch == 1)? sc->drq1 : sc->drq2);
+ sndbuf_dmasetup(ch->buffer, (ch->hwch == 1)? sc->drq1 : sc->drq2);
return ch;
}
@@ -612,7 +614,7 @@ esschan_trigger(kobj_t obj, void *data, int go)
switch (go) {
case PCMTRIG_START:
ch->run = 1;
- sndbuf_isadma(ch->buffer, go);
+ sndbuf_dma(ch->buffer, go);
ess_start(ch);
break;
@@ -630,7 +632,7 @@ esschan_getptr(kobj_t obj, void *data)
{
struct ess_chinfo *ch = data;
- return sndbuf_isadmaptr(ch->buffer);
+ return sndbuf_dmaptr(ch->buffer);
}
static struct pcmchan_caps *
diff --git a/sys/dev/sound/isa/mss.c b/sys/dev/sound/isa/mss.c
index 8f7a378..dc0c43e 100644
--- a/sys/dev/sound/isa/mss.c
+++ b/sys/dev/sound/isa/mss.c
@@ -36,6 +36,8 @@ SND_DECLARE_FILE("$FreeBSD$");
#include <dev/sound/isa/sb.h>
#include <dev/sound/chip.h>
+#include <isa/isavar.h>
+
#include "mixer_if.h"
#define MSS_DEFAULT_BUFSZ (4096)
@@ -1127,7 +1129,7 @@ msschan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b, struct pcm_channel *
ch->buffer = b;
ch->dir = dir;
if (sndbuf_alloc(ch->buffer, mss->parent_dmat, mss->bufsize) == -1) return NULL;
- sndbuf_isadmasetup(ch->buffer, (dir == PCMDIR_PLAY)? mss->drq1 : mss->drq2);
+ sndbuf_dmasetup(ch->buffer, (dir == PCMDIR_PLAY)? mss->drq1 : mss->drq2);
return ch;
}
@@ -1177,7 +1179,7 @@ msschan_trigger(kobj_t obj, void *data, int go)
if (go == PCMTRIG_EMLDMAWR || go == PCMTRIG_EMLDMARD)
return 0;
- sndbuf_isadma(ch->buffer, go);
+ sndbuf_dma(ch->buffer, go);
mss_lock(mss);
mss_trigger(ch, go);
mss_unlock(mss);
@@ -1188,7 +1190,7 @@ static int
msschan_getptr(kobj_t obj, void *data)
{
struct mss_chinfo *ch = data;
- return sndbuf_isadmaptr(ch->buffer);
+ return sndbuf_dmaptr(ch->buffer);
}
static struct pcmchan_caps *
diff --git a/sys/dev/sound/isa/sb16.c b/sys/dev/sound/isa/sb16.c
index fa16701..4851eeb 100644
--- a/sys/dev/sound/isa/sb16.c
+++ b/sys/dev/sound/isa/sb16.c
@@ -34,6 +34,8 @@
#include <dev/sound/isa/sb.h>
#include <dev/sound/chip.h>
+#include <isa/isavar.h>
+
#include "mixer_if.h"
SND_DECLARE_FILE("$FreeBSD$");
@@ -540,43 +542,43 @@ sb_setup(struct sb_info *sb)
sb_lock(sb);
if (sb->bd_flags & BD_F_DMARUN)
- sndbuf_isadma(sb->pch.buffer, PCMTRIG_STOP);
+ sndbuf_dma(sb->pch.buffer, PCMTRIG_STOP);
if (sb->bd_flags & BD_F_DMARUN2)
- sndbuf_isadma(sb->rch.buffer, PCMTRIG_STOP);
+ sndbuf_dma(sb->rch.buffer, PCMTRIG_STOP);
sb->bd_flags &= ~(BD_F_DMARUN | BD_F_DMARUN2);
sb_reset_dsp(sb);
if (sb->bd_flags & BD_F_SB16X) {
pprio = sb->pch.run? 1 : 0;
- sndbuf_isadmasetup(sb->pch.buffer, pprio? sb->drq1 : NULL);
+ sndbuf_dmasetup(sb->pch.buffer, pprio? sb->drq1 : NULL);
sb->pch.dch = pprio? 1 : 0;
- sndbuf_isadmasetup(sb->rch.buffer, pprio? sb->drq2 : sb->drq1);
+ sndbuf_dmasetup(sb->rch.buffer, pprio? sb->drq2 : sb->drq1);
sb->rch.dch = pprio? 2 : 1;
} else {
if (sb->pch.run && sb->rch.run) {
pprio = (sb->rch.fmt & AFMT_16BIT)? 0 : 1;
- sndbuf_isadmasetup(sb->pch.buffer, pprio? sb->drq2 : sb->drq1);
+ sndbuf_dmasetup(sb->pch.buffer, pprio? sb->drq2 : sb->drq1);
sb->pch.dch = pprio? 2 : 1;
- sndbuf_isadmasetup(sb->rch.buffer, pprio? sb->drq1 : sb->drq2);
+ sndbuf_dmasetup(sb->rch.buffer, pprio? sb->drq1 : sb->drq2);
sb->rch.dch = pprio? 1 : 2;
} else {
if (sb->pch.run) {
- sndbuf_isadmasetup(sb->pch.buffer, (sb->pch.fmt & AFMT_16BIT)? sb->drq2 : sb->drq1);
+ sndbuf_dmasetup(sb->pch.buffer, (sb->pch.fmt & AFMT_16BIT)? sb->drq2 : sb->drq1);
sb->pch.dch = (sb->pch.fmt & AFMT_16BIT)? 2 : 1;
- sndbuf_isadmasetup(sb->rch.buffer, (sb->pch.fmt & AFMT_16BIT)? sb->drq1 : sb->drq2);
+ sndbuf_dmasetup(sb->rch.buffer, (sb->pch.fmt & AFMT_16BIT)? sb->drq1 : sb->drq2);
sb->rch.dch = (sb->pch.fmt & AFMT_16BIT)? 1 : 2;
} else if (sb->rch.run) {
- sndbuf_isadmasetup(sb->pch.buffer, (sb->rch.fmt & AFMT_16BIT)? sb->drq1 : sb->drq2);
+ sndbuf_dmasetup(sb->pch.buffer, (sb->rch.fmt & AFMT_16BIT)? sb->drq1 : sb->drq2);
sb->pch.dch = (sb->rch.fmt & AFMT_16BIT)? 1 : 2;
- sndbuf_isadmasetup(sb->rch.buffer, (sb->rch.fmt & AFMT_16BIT)? sb->drq2 : sb->drq1);
+ sndbuf_dmasetup(sb->rch.buffer, (sb->rch.fmt & AFMT_16BIT)? sb->drq2 : sb->drq1);
sb->rch.dch = (sb->rch.fmt & AFMT_16BIT)? 2 : 1;
}
}
}
- sndbuf_isadmasetdir(sb->pch.buffer, PCMDIR_PLAY);
- sndbuf_isadmasetdir(sb->rch.buffer, PCMDIR_REC);
+ sndbuf_dmasetdir(sb->pch.buffer, PCMDIR_PLAY);
+ sndbuf_dmasetdir(sb->rch.buffer, PCMDIR_REC);
/*
printf("setup: [pch = %d, pfmt = %d, pgo = %d] [rch = %d, rfmt = %d, rgo = %d]\n",
@@ -604,7 +606,7 @@ sb_setup(struct sb_info *sb)
v = (ch->fmt & AFMT_STEREO)? DSP_F16_STEREO : 0;
v |= (ch->fmt & AFMT_SIGNED)? DSP_F16_SIGNED : 0;
sb_cmd2(sb, v, l);
- sndbuf_isadma(ch->buffer, PCMTRIG_START);
+ sndbuf_dma(ch->buffer, PCMTRIG_START);
sb->bd_flags |= BD_F_DMARUN;
}
@@ -629,7 +631,7 @@ sb_setup(struct sb_info *sb)
v = (ch->fmt & AFMT_STEREO)? DSP_F16_STEREO : 0;
v |= (ch->fmt & AFMT_SIGNED)? DSP_F16_SIGNED : 0;
sb_cmd2(sb, v, l);
- sndbuf_isadma(ch->buffer, PCMTRIG_START);
+ sndbuf_dma(ch->buffer, PCMTRIG_START);
sb->bd_flags |= BD_F_DMARUN2;
}
sb_unlock(sb);
@@ -710,7 +712,7 @@ sb16chan_getptr(kobj_t obj, void *data)
{
struct sb_chinfo *ch = data;
- return sndbuf_isadmaptr(ch->buffer);
+ return sndbuf_dmaptr(ch->buffer);
}
static struct pcmchan_caps *
diff --git a/sys/dev/sound/isa/sb8.c b/sys/dev/sound/isa/sb8.c
index a57671e..095d817 100644
--- a/sys/dev/sound/isa/sb8.c
+++ b/sys/dev/sound/isa/sb8.c
@@ -34,6 +34,8 @@
#include <dev/sound/isa/sb.h>
#include <dev/sound/chip.h>
+#include <isa/isavar.h>
+
#include "mixer_if.h"
SND_DECLARE_FILE("$FreeBSD$");
@@ -582,7 +584,7 @@ sbchan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b, struct pcm_channel *c
ch->buffer = b;
if (sndbuf_alloc(ch->buffer, sb->parent_dmat, sb->bufsize) == -1)
return NULL;
- sndbuf_isadmasetup(ch->buffer, sb->drq);
+ sndbuf_dmasetup(ch->buffer, sb->drq);
return ch;
}
@@ -621,7 +623,7 @@ sbchan_trigger(kobj_t obj, void *data, int go)
if (go == PCMTRIG_EMLDMAWR || go == PCMTRIG_EMLDMARD)
return 0;
- sndbuf_isadma(ch->buffer, go);
+ sndbuf_dma(ch->buffer, go);
if (go == PCMTRIG_START)
sb_start(ch);
else
@@ -634,7 +636,7 @@ sbchan_getptr(kobj_t obj, void *data)
{
struct sb_chinfo *ch = data;
- return sndbuf_isadmaptr(ch->buffer);
+ return sndbuf_dmaptr(ch->buffer);
}
static struct pcmchan_caps *
diff --git a/sys/dev/sound/isa/sbc.c b/sys/dev/sound/isa/sbc.c
index 01f451c..21cb639 100644
--- a/sys/dev/sound/isa/sbc.c
+++ b/sys/dev/sound/isa/sbc.c
@@ -28,6 +28,8 @@
#include <dev/sound/pcm/sound.h>
#include <dev/sound/isa/sb.h>
+#include <isa/isavar.h>
+
SND_DECLARE_FILE("$FreeBSD$");
#define IO_MAX 3
diff --git a/sys/dev/sound/isa/sndbuf_dma.c b/sys/dev/sound/isa/sndbuf_dma.c
new file mode 100644
index 0000000..d07c301
--- /dev/null
+++ b/sys/dev/sound/isa/sndbuf_dma.c
@@ -0,0 +1,103 @@
+/*
+ * Copyright (c) 1999 Cameron Grant <gandalf@vilnya.demon.co.uk>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <dev/sound/pcm/sound.h>
+
+#include <isa/isavar.h>
+
+SND_DECLARE_FILE("$FreeBSD$");
+
+int
+sndbuf_dmasetup(struct snd_dbuf *b, struct resource *drq)
+{
+ /* should do isa_dma_acquire/isa_dma_release here */
+ if (drq == NULL) {
+ b->dmachan = -1;
+ } else {
+ sndbuf_setflags(b, SNDBUF_F_DMA, 1);
+ b->dmachan = rman_get_start(drq);
+ }
+ return 0;
+}
+
+int
+sndbuf_dmasetdir(struct snd_dbuf *b, int dir)
+{
+ KASSERT(b, ("sndbuf_dmasetdir called with b == NULL"));
+ KASSERT(sndbuf_getflags(b) & SNDBUF_F_DMA, ("sndbuf_dmasetdir called on non-ISA buffer"));
+
+ b->dir = (dir == PCMDIR_PLAY)? ISADMA_WRITE : ISADMA_READ;
+ return 0;
+}
+
+void
+sndbuf_dma(struct snd_dbuf *b, int go)
+{
+ KASSERT(b, ("sndbuf_dma called with b == NULL"));
+ KASSERT(sndbuf_getflags(b) & SNDBUF_F_DMA, ("sndbuf_dma called on non-ISA buffer"));
+
+ switch (go) {
+ case PCMTRIG_START:
+ /* isa_dmainit(b->chan, size); */
+ isa_dmastart(b->dir | ISADMA_RAW, b->buf, b->bufsize, b->dmachan);
+ break;
+
+ case PCMTRIG_STOP:
+ case PCMTRIG_ABORT:
+ isa_dmastop(b->dmachan);
+ isa_dmadone(b->dir | ISADMA_RAW, b->buf, b->bufsize, b->dmachan);
+ break;
+ }
+
+ DEB(printf("buf 0x%p ISA DMA %s, channel %d\n",
+ b,
+ (go == PCMTRIG_START)? "started" : "stopped",
+ b->dmachan));
+}
+
+int
+sndbuf_dmaptr(struct snd_dbuf *b)
+{
+ int i;
+
+ KASSERT(b, ("sndbuf_dmaptr called with b == NULL"));
+ KASSERT(sndbuf_getflags(b) & SNDBUF_F_DMA, ("sndbuf_dmaptr called on non-ISA buffer"));
+
+ if (!sndbuf_runsz(b))
+ return 0;
+ i = isa_dmastatus(b->dmachan);
+ KASSERT(i >= 0, ("isa_dmastatus returned %d", i));
+ return b->bufsize - i;
+}
+
+void
+sndbuf_dmabounce(struct snd_dbuf *b)
+{
+ KASSERT(b, ("sndbuf_dmabounce called with b == NULL"));
+ KASSERT(sndbuf_getflags(b) & SNDBUF_F_DMA, ("sndbuf_dmabounce called on non-ISA buffer"));
+
+ /* tell isa_dma to bounce data in/out */
+}
diff --git a/sys/dev/sound/pcm/buffer.c b/sys/dev/sound/pcm/buffer.c
index dd74271..645e3b3 100644
--- a/sys/dev/sound/pcm/buffer.c
+++ b/sys/dev/sound/pcm/buffer.c
@@ -30,27 +30,6 @@
SND_DECLARE_FILE("$FreeBSD$");
-#define SNDBUF_NAMELEN 48
-struct snd_dbuf {
- device_t dev;
- u_int8_t *buf, *tmpbuf;
- unsigned int bufsize, maxsize;
- volatile int dl; /* transfer size */
- volatile int rp; /* pointers to the ready area */
- volatile int rl; /* length of ready area */
- volatile int hp;
- volatile u_int32_t total, prev_total;
- int isadmachan, dir; /* dma channel */
- u_int32_t fmt, spd, bps;
- unsigned int blksz, blkcnt;
- int xrun;
- u_int32_t flags;
- bus_dmamap_t dmamap;
- bus_dma_tag_t dmatag;
- struct selinfo sel;
- char name[SNDBUF_NAMELEN];
-};
-
struct snd_dbuf *
sndbuf_create(device_t dev, char *drv, char *desc)
{
@@ -587,77 +566,3 @@ sndbuf_setflags(struct snd_dbuf *b, u_int32_t flags, int on)
b->flags |= flags;
}
-/************************************************************/
-
-int
-sndbuf_isadmasetup(struct snd_dbuf *b, struct resource *drq)
-{
- /* should do isa_dma_acquire/isa_dma_release here */
- if (drq == NULL) {
- b->isadmachan = -1;
- } else {
- sndbuf_setflags(b, SNDBUF_F_ISADMA, 1);
- b->isadmachan = rman_get_start(drq);
- }
- return 0;
-}
-
-int
-sndbuf_isadmasetdir(struct snd_dbuf *b, int dir)
-{
- KASSERT(b, ("sndbuf_isadmasetdir called with b == NULL"));
- KASSERT(sndbuf_getflags(b) & SNDBUF_F_ISADMA, ("sndbuf_isadmasetdir called on non-ISA buffer"));
-
- b->dir = (dir == PCMDIR_PLAY)? ISADMA_WRITE : ISADMA_READ;
- return 0;
-}
-
-void
-sndbuf_isadma(struct snd_dbuf *b, int go)
-{
- KASSERT(b, ("sndbuf_isadma called with b == NULL"));
- KASSERT(sndbuf_getflags(b) & SNDBUF_F_ISADMA, ("sndbuf_isadma called on non-ISA buffer"));
-
- switch (go) {
- case PCMTRIG_START:
- /* isa_dmainit(b->chan, size); */
- isa_dmastart(b->dir | ISADMA_RAW, b->buf, b->bufsize, b->isadmachan);
- break;
-
- case PCMTRIG_STOP:
- case PCMTRIG_ABORT:
- isa_dmastop(b->isadmachan);
- isa_dmadone(b->dir | ISADMA_RAW, b->buf, b->bufsize, b->isadmachan);
- break;
- }
-
- DEB(printf("buf 0x%p ISA DMA %s, channel %d\n",
- b,
- (go == PCMTRIG_START)? "started" : "stopped",
- b->isadmachan));
-}
-
-int
-sndbuf_isadmaptr(struct snd_dbuf *b)
-{
- int i;
-
- KASSERT(b, ("sndbuf_isadmaptr called with b == NULL"));
- KASSERT(sndbuf_getflags(b) & SNDBUF_F_ISADMA, ("sndbuf_isadmaptr called on non-ISA buffer"));
-
- if (!sndbuf_runsz(b))
- return 0;
- i = isa_dmastatus(b->isadmachan);
- KASSERT(i >= 0, ("isa_dmastatus returned %d", i));
- return b->bufsize - i;
-}
-
-void
-sndbuf_isadmabounce(struct snd_dbuf *b)
-{
- KASSERT(b, ("sndbuf_isadmabounce called with b == NULL"));
- KASSERT(sndbuf_getflags(b) & SNDBUF_F_ISADMA, ("sndbuf_isadmabounce called on non-ISA buffer"));
-
- /* tell isa_dma to bounce data in/out */
-}
-
diff --git a/sys/dev/sound/pcm/buffer.h b/sys/dev/sound/pcm/buffer.h
index 930d2e5..d25ceec 100644
--- a/sys/dev/sound/pcm/buffer.h
+++ b/sys/dev/sound/pcm/buffer.h
@@ -26,13 +26,35 @@
* $FreeBSD$
*/
-#define ISA_DMA(b) (sndbuf_getflags((b)) & SNDBUF_F_ISADMA)
+#define SND_DMA(b) (sndbuf_getflags((b)) & SNDBUF_F_DMA)
#define SNDBUF_LOCKASSERT(b)
-#define SNDBUF_F_ISADMA 0x00000001
+#define SNDBUF_F_DMA 0x00000001
#define SNDBUF_F_XRUN 0x00000002
#define SNDBUF_F_RUNNING 0x00000004
+#define SNDBUF_NAMELEN 48
+
+struct snd_dbuf {
+ device_t dev;
+ u_int8_t *buf, *tmpbuf;
+ unsigned int bufsize, maxsize;
+ volatile int dl; /* transfer size */
+ volatile int rp; /* pointers to the ready area */
+ volatile int rl; /* length of ready area */
+ volatile int hp;
+ volatile u_int32_t total, prev_total;
+ int dmachan, dir; /* dma channel */
+ u_int32_t fmt, spd, bps;
+ unsigned int blksz, blkcnt;
+ int xrun;
+ u_int32_t flags;
+ bus_dmamap_t dmamap;
+ bus_dma_tag_t dmatag;
+ struct selinfo sel;
+ char name[SNDBUF_NAMELEN];
+};
+
struct snd_dbuf *sndbuf_create(device_t dev, char *drv, char *desc);
void sndbuf_destroy(struct snd_dbuf *b);
@@ -87,10 +109,8 @@ int sndbuf_feed(struct snd_dbuf *from, struct snd_dbuf *to, struct pcm_channel *
u_int32_t sndbuf_getflags(struct snd_dbuf *b);
void sndbuf_setflags(struct snd_dbuf *b, u_int32_t flags, int on);
-int sndbuf_isadmasetup(struct snd_dbuf *b, struct resource *drq);
-int sndbuf_isadmasetdir(struct snd_dbuf *b, int dir);
-void sndbuf_isadma(struct snd_dbuf *b, int go);
-int sndbuf_isadmaptr(struct snd_dbuf *b);
-void sndbuf_isadmabounce(struct snd_dbuf *b);
-
-
+int sndbuf_dmasetup(struct snd_dbuf *b, struct resource *drq);
+int sndbuf_dmasetdir(struct snd_dbuf *b, int dir);
+void sndbuf_dma(struct snd_dbuf *b, int go);
+int sndbuf_dmaptr(struct snd_dbuf *b);
+void sndbuf_dmabounce(struct snd_dbuf *b);
diff --git a/sys/dev/sound/pcm/channel.c b/sys/dev/sound/pcm/channel.c
index 68fc573..8c139b0 100644
--- a/sys/dev/sound/pcm/channel.c
+++ b/sys/dev/sound/pcm/channel.c
@@ -767,8 +767,8 @@ chn_setdir(struct pcm_channel *c, int dir)
CHN_LOCKASSERT(c);
c->direction = dir;
r = CHANNEL_SETDIR(c->methods, c->devinfo, c->direction);
- if (!r && ISA_DMA(b))
- sndbuf_isadmasetdir(b, c->direction);
+ if (!r && SND_DMA(b))
+ sndbuf_dmasetdir(b, c->direction);
return r;
}
@@ -980,8 +980,8 @@ chn_trigger(struct pcm_channel *c, int go)
int ret;
CHN_LOCKASSERT(c);
- if (ISA_DMA(b) && (go == PCMTRIG_EMLDMAWR || go == PCMTRIG_EMLDMARD))
- sndbuf_isadmabounce(b);
+ if (SND_DMA(b) && (go == PCMTRIG_EMLDMAWR || go == PCMTRIG_EMLDMARD))
+ sndbuf_dmabounce(b);
ret = CHANNEL_TRIGGER(c->methods, c->devinfo, go);
return ret;
diff --git a/sys/dev/sound/pcm/sound.h b/sys/dev/sound/pcm/sound.h
index 5038a28..1daed2a 100644
--- a/sys/dev/sound/pcm/sound.h
+++ b/sys/dev/sound/pcm/sound.h
@@ -64,7 +64,6 @@
#include <sys/sbuf.h>
#include <sys/soundcard.h>
#include <sys/sysctl.h>
-#include <isa/isavar.h>
#include <sys/kobj.h>
#include <vm/vm.h>
#include <vm/pmap.h>
@@ -104,12 +103,6 @@ struct snd_mixer;
#define PCM_SOFTC_SIZE 512
#define SND_STATUSLEN 64
-/* descriptor of audio device */
-#ifndef ISADMA_WRITE
-#define ISADMA_WRITE B_WRITE
-#define ISADMA_READ B_READ
-#define ISADMA_RAW B_RAW
-#endif
#define PCM_MODVER 1
OpenPOWER on IntegriCloud