summaryrefslogtreecommitdiffstats
path: root/sys/dev/sound/isa
diff options
context:
space:
mode:
authorcg <cg@FreeBSD.org>2000-05-26 21:15:47 +0000
committercg <cg@FreeBSD.org>2000-05-26 21:15:47 +0000
commite7de7487d9f2c8301120a8d7b0764cff65dead8c (patch)
treeef0510b1c060f4f7b7834089dfe7d1fc9ed32632 /sys/dev/sound/isa
parent8c66999e1dece9580671edf7cd994284f29eacee (diff)
downloadFreeBSD-src-e7de7487d9f2c8301120a8d7b0764cff65dead8c.zip
FreeBSD-src-e7de7487d9f2c8301120a8d7b0764cff65dead8c.tar.gz
handle emulated dma reads
don't try to get sample size from snd_dbuf
Diffstat (limited to 'sys/dev/sound/isa')
-rw-r--r--sys/dev/sound/isa/ad1816.c4
-rw-r--r--sys/dev/sound/isa/ess.c2
-rw-r--r--sys/dev/sound/isa/mss.c16
-rw-r--r--sys/dev/sound/isa/sb.c2
-rw-r--r--sys/dev/sound/isa/sb16.c2
-rw-r--r--sys/dev/sound/isa/sb8.c2
6 files changed, 19 insertions, 9 deletions
diff --git a/sys/dev/sound/isa/ad1816.c b/sys/dev/sound/isa/ad1816.c
index 549ed51..bcf0715 100644
--- a/sys/dev/sound/isa/ad1816.c
+++ b/sys/dev/sound/isa/ad1816.c
@@ -403,7 +403,9 @@ ad1816chan_trigger(void *data, int go)
struct ad1816_info *ad1816 = ch->parent;
int wr, reg;
- if (go == PCMTRIG_EMLDMAWR) return 0;
+ if (go == PCMTRIG_EMLDMAWR || go == PCMTRIG_EMLDMARD)
+ return 0;
+
buf_isadma(ch->buffer, go);
wr = (ch->dir == PCMDIR_PLAY);
reg = wr? AD1816_PLAY : AD1816_CAPT;
diff --git a/sys/dev/sound/isa/ess.c b/sys/dev/sound/isa/ess.c
index 879c029..ffdad21 100644
--- a/sys/dev/sound/isa/ess.c
+++ b/sys/dev/sound/isa/ess.c
@@ -678,7 +678,7 @@ esschan_trigger(void *data, int go)
{
struct ess_chinfo *ch = data;
- if (go == PCMTRIG_EMLDMAWR)
+ if (go == PCMTRIG_EMLDMAWR || go == PCMTRIG_EMLDMARD)
return 0;
switch (go) {
diff --git a/sys/dev/sound/isa/mss.c b/sys/dev/sound/isa/mss.c
index 3094b9e..1db56c2 100644
--- a/sys/dev/sound/isa/mss.c
+++ b/sys/dev/sound/isa/mss.c
@@ -49,6 +49,7 @@ struct mss_chinfo {
pcm_channel *channel;
snd_dbuf *buffer;
int dir;
+ u_int32_t fmt;
};
struct mss_info {
@@ -1293,6 +1294,7 @@ mss_format(struct mss_chinfo *ch, u_int32_t format)
{AFMT_U8, AFMT_MU_LAW, AFMT_S16_LE, AFMT_A_LAW,
-1, AFMT_IMA_ADPCM, AFMT_U16_BE, -1};
+ ch->fmt = format;
for (i = 0; i < 8; i++) if (arg == fmts[i]) break;
arg = i << 1;
if (format & AFMT_STEREO) arg |= 1;
@@ -1309,13 +1311,17 @@ mss_trigger(struct mss_chinfo *ch, int go)
{
struct mss_info *mss = ch->parent;
u_char m;
- int retry, wr, cnt;
+ int retry, wr, cnt, ss;
- wr = (ch->dir == PCMDIR_PLAY)? 1 : 0;
+ ss = 1;
+ ss <<= (ch->fmt & AFMT_STEREO)? 1 : 0;
+ ss <<= (ch->fmt & AFMT_16BIT)? 1 : 0;
+
+ wr = (ch->dir == PCMDIR_PLAY)? 1 : 0;
m = ad_read(mss, 9);
switch (go) {
case PCMTRIG_START:
- cnt = (ch->buffer->dl / ch->buffer->sample_size) - 1;
+ cnt = (ch->buffer->dl / ss) - 1;
DEB(if (m & 4) printf("OUCH! reg 9 0x%02x\n", m););
m |= wr? I9_PEN : I9_CEN; /* enable DMA */
@@ -1768,7 +1774,9 @@ msschan_trigger(void *data, int go)
{
struct mss_chinfo *ch = data;
- if (go == PCMTRIG_EMLDMAWR) return 0;
+ if (go == PCMTRIG_EMLDMAWR || go == PCMTRIG_EMLDMARD)
+ return 0;
+
buf_isadma(ch->buffer, go);
mss_trigger(ch, go);
return 0;
diff --git a/sys/dev/sound/isa/sb.c b/sys/dev/sound/isa/sb.c
index 6b1aa4b..a784311 100644
--- a/sys/dev/sound/isa/sb.c
+++ b/sys/dev/sound/isa/sb.c
@@ -689,7 +689,7 @@ sbchan_trigger(void *data, int go)
{
struct sb_chinfo *ch = data;
- if (go == PCMTRIG_EMLDMAWR)
+ if (go == PCMTRIG_EMLDMAWR || go == PCMTRIG_EMLDMARD)
return 0;
buf_isadma(ch->buffer, go);
diff --git a/sys/dev/sound/isa/sb16.c b/sys/dev/sound/isa/sb16.c
index 6b1aa4b..a784311 100644
--- a/sys/dev/sound/isa/sb16.c
+++ b/sys/dev/sound/isa/sb16.c
@@ -689,7 +689,7 @@ sbchan_trigger(void *data, int go)
{
struct sb_chinfo *ch = data;
- if (go == PCMTRIG_EMLDMAWR)
+ if (go == PCMTRIG_EMLDMAWR || go == PCMTRIG_EMLDMARD)
return 0;
buf_isadma(ch->buffer, go);
diff --git a/sys/dev/sound/isa/sb8.c b/sys/dev/sound/isa/sb8.c
index 6b1aa4b..a784311 100644
--- a/sys/dev/sound/isa/sb8.c
+++ b/sys/dev/sound/isa/sb8.c
@@ -689,7 +689,7 @@ sbchan_trigger(void *data, int go)
{
struct sb_chinfo *ch = data;
- if (go == PCMTRIG_EMLDMAWR)
+ if (go == PCMTRIG_EMLDMAWR || go == PCMTRIG_EMLDMARD)
return 0;
buf_isadma(ch->buffer, go);
OpenPOWER on IntegriCloud