summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorcg <cg@FreeBSD.org>1999-12-30 04:04:43 +0000
committercg <cg@FreeBSD.org>1999-12-30 04:04:43 +0000
commiteeb98c1804a27879147df08d1ebdfc3043811649 (patch)
tree05068ab04c04bcbf0ca918b57fbf5f82acd6761e
parent65f9d00aadcb6b9ffe8f85f4da8925487db929de (diff)
downloadFreeBSD-src-eeb98c1804a27879147df08d1ebdfc3043811649.zip
FreeBSD-src-eeb98c1804a27879147df08d1ebdfc3043811649.tar.gz
make ess cards use a 64k buffer again, by implementing esschan_init()
-rw-r--r--sys/dev/sound/isa/sb.c19
-rw-r--r--sys/dev/sound/isa/sb16.c19
-rw-r--r--sys/dev/sound/isa/sb8.c19
3 files changed, 39 insertions, 18 deletions
diff --git a/sys/dev/sound/isa/sb.c b/sys/dev/sound/isa/sb.c
index 7a0c1f1..12aced9 100644
--- a/sys/dev/sound/isa/sb.c
+++ b/sys/dev/sound/isa/sb.c
@@ -39,6 +39,8 @@
#include <dev/sound/isa/sb.h>
#include <dev/sound/chip.h>
+#define ESS_BUFFSIZE (65536 - 256)
+
/* channel interface */
static void *sbchan_init(void *devinfo, snd_dbuf *b, pcm_channel *c, int dir);
static int sbchan_setdir(void *data, int dir);
@@ -50,9 +52,7 @@ static int sbchan_getptr(void *data);
static pcmchan_caps *sbchan_getcaps(void *data);
/* channel interface for ESS */
-#ifdef notyet
static void *esschan_init(void *devinfo, snd_dbuf *b, pcm_channel *c, int dir);
-#endif
static int esschan_setdir(void *data, int dir);
static int esschan_setformat(void *data, u_int32_t format);
static int esschan_setspeed(void *data, u_int32_t speed);
@@ -127,7 +127,7 @@ static pcm_channel sb_chantemplate = {
};
static pcm_channel ess_chantemplate = {
- sbchan_init,
+ esschan_init,
esschan_setdir,
esschan_setformat,
esschan_setspeed,
@@ -888,13 +888,20 @@ sbchan_getcaps(void *data)
return (ch->buffer->chan >= 4)? &sb16_hcaps : &sb16_lcaps;
}
/* channel interface for ESS18xx */
-#ifdef notyet
static void *
esschan_init(void *devinfo, snd_dbuf *b, pcm_channel *c, int dir)
{
- /* the same as sbchan_init()? */
+ struct sb_info *sb = devinfo;
+ struct sb_chinfo *ch = (dir == PCMDIR_PLAY)? &sb->pch : &sb->rch;
+
+ ch->parent = sb;
+ ch->channel = c;
+ ch->buffer = b;
+ ch->buffer->bufsize = ESS_BUFFSIZE;
+ if (chn_allocbuf(ch->buffer, sb->parent_dmat) == -1) return NULL;
+ ch->buffer->chan = rman_get_start(sb->drq1);
+ return ch;
}
-#endif
static int
esschan_setdir(void *data, int dir)
diff --git a/sys/dev/sound/isa/sb16.c b/sys/dev/sound/isa/sb16.c
index 7a0c1f1..12aced9 100644
--- a/sys/dev/sound/isa/sb16.c
+++ b/sys/dev/sound/isa/sb16.c
@@ -39,6 +39,8 @@
#include <dev/sound/isa/sb.h>
#include <dev/sound/chip.h>
+#define ESS_BUFFSIZE (65536 - 256)
+
/* channel interface */
static void *sbchan_init(void *devinfo, snd_dbuf *b, pcm_channel *c, int dir);
static int sbchan_setdir(void *data, int dir);
@@ -50,9 +52,7 @@ static int sbchan_getptr(void *data);
static pcmchan_caps *sbchan_getcaps(void *data);
/* channel interface for ESS */
-#ifdef notyet
static void *esschan_init(void *devinfo, snd_dbuf *b, pcm_channel *c, int dir);
-#endif
static int esschan_setdir(void *data, int dir);
static int esschan_setformat(void *data, u_int32_t format);
static int esschan_setspeed(void *data, u_int32_t speed);
@@ -127,7 +127,7 @@ static pcm_channel sb_chantemplate = {
};
static pcm_channel ess_chantemplate = {
- sbchan_init,
+ esschan_init,
esschan_setdir,
esschan_setformat,
esschan_setspeed,
@@ -888,13 +888,20 @@ sbchan_getcaps(void *data)
return (ch->buffer->chan >= 4)? &sb16_hcaps : &sb16_lcaps;
}
/* channel interface for ESS18xx */
-#ifdef notyet
static void *
esschan_init(void *devinfo, snd_dbuf *b, pcm_channel *c, int dir)
{
- /* the same as sbchan_init()? */
+ struct sb_info *sb = devinfo;
+ struct sb_chinfo *ch = (dir == PCMDIR_PLAY)? &sb->pch : &sb->rch;
+
+ ch->parent = sb;
+ ch->channel = c;
+ ch->buffer = b;
+ ch->buffer->bufsize = ESS_BUFFSIZE;
+ if (chn_allocbuf(ch->buffer, sb->parent_dmat) == -1) return NULL;
+ ch->buffer->chan = rman_get_start(sb->drq1);
+ return ch;
}
-#endif
static int
esschan_setdir(void *data, int dir)
diff --git a/sys/dev/sound/isa/sb8.c b/sys/dev/sound/isa/sb8.c
index 7a0c1f1..12aced9 100644
--- a/sys/dev/sound/isa/sb8.c
+++ b/sys/dev/sound/isa/sb8.c
@@ -39,6 +39,8 @@
#include <dev/sound/isa/sb.h>
#include <dev/sound/chip.h>
+#define ESS_BUFFSIZE (65536 - 256)
+
/* channel interface */
static void *sbchan_init(void *devinfo, snd_dbuf *b, pcm_channel *c, int dir);
static int sbchan_setdir(void *data, int dir);
@@ -50,9 +52,7 @@ static int sbchan_getptr(void *data);
static pcmchan_caps *sbchan_getcaps(void *data);
/* channel interface for ESS */
-#ifdef notyet
static void *esschan_init(void *devinfo, snd_dbuf *b, pcm_channel *c, int dir);
-#endif
static int esschan_setdir(void *data, int dir);
static int esschan_setformat(void *data, u_int32_t format);
static int esschan_setspeed(void *data, u_int32_t speed);
@@ -127,7 +127,7 @@ static pcm_channel sb_chantemplate = {
};
static pcm_channel ess_chantemplate = {
- sbchan_init,
+ esschan_init,
esschan_setdir,
esschan_setformat,
esschan_setspeed,
@@ -888,13 +888,20 @@ sbchan_getcaps(void *data)
return (ch->buffer->chan >= 4)? &sb16_hcaps : &sb16_lcaps;
}
/* channel interface for ESS18xx */
-#ifdef notyet
static void *
esschan_init(void *devinfo, snd_dbuf *b, pcm_channel *c, int dir)
{
- /* the same as sbchan_init()? */
+ struct sb_info *sb = devinfo;
+ struct sb_chinfo *ch = (dir == PCMDIR_PLAY)? &sb->pch : &sb->rch;
+
+ ch->parent = sb;
+ ch->channel = c;
+ ch->buffer = b;
+ ch->buffer->bufsize = ESS_BUFFSIZE;
+ if (chn_allocbuf(ch->buffer, sb->parent_dmat) == -1) return NULL;
+ ch->buffer->chan = rman_get_start(sb->drq1);
+ return ch;
}
-#endif
static int
esschan_setdir(void *data, int dir)
OpenPOWER on IntegriCloud