summaryrefslogtreecommitdiffstats
path: root/sys/dev/sound/isa/mss.c
diff options
context:
space:
mode:
authorcg <cg@FreeBSD.org>2001-09-18 15:12:35 +0000
committercg <cg@FreeBSD.org>2001-09-18 15:12:35 +0000
commit30230e56a5b2ff594d354c7f46b553c0264925fc (patch)
tree9c5d2e8111198443bf24efc2539e359b6e8bdd01 /sys/dev/sound/isa/mss.c
parentfb1faed56b14faf0b069a11dbdbf0b43977ab10d (diff)
downloadFreeBSD-src-30230e56a5b2ff594d354c7f46b553c0264925fc.zip
FreeBSD-src-30230e56a5b2ff594d354c7f46b553c0264925fc.tar.gz
make buffer size adjustable.
Diffstat (limited to 'sys/dev/sound/isa/mss.c')
-rw-r--r--sys/dev/sound/isa/mss.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/sys/dev/sound/isa/mss.c b/sys/dev/sound/isa/mss.c
index e13e1ea..9e53958 100644
--- a/sys/dev/sound/isa/mss.c
+++ b/sys/dev/sound/isa/mss.c
@@ -37,7 +37,7 @@ SND_DECLARE_FILE("$FreeBSD$");
#include "mixer_if.h"
-#define MSS_BUFFSIZE (4096)
+#define MSS_DEFAULT_BUFSZ (4096)
#define abs(x) (((x) < 0) ? -(x) : (x))
#define MSS_INDEXED_REGS 0x20
#define OPL_INDEXED_REGS 0x19
@@ -79,6 +79,7 @@ struct mss_info {
int indir_rid;
int password; /* password for opti9xx cards */
int passwdreg; /* password register */
+ unsigned int bufsize;
struct mss_chinfo pch, rch;
};
@@ -328,12 +329,12 @@ mss_alloc_resources(struct mss_info *mss, device_t dev)
if (ok) {
pdma = rman_get_start(mss->drq1);
isa_dma_acquire(pdma);
- isa_dmainit(pdma, MSS_BUFFSIZE);
+ isa_dmainit(pdma, mss->bufsize);
mss->bd_flags &= ~BD_F_DUPLEX;
if (mss->drq2) {
rdma = rman_get_start(mss->drq2);
isa_dma_acquire(rdma);
- isa_dmainit(rdma, MSS_BUFFSIZE);
+ isa_dmainit(rdma, mss->bufsize);
mss->bd_flags |= BD_F_DUPLEX;
} else mss->drq2 = mss->drq1;
}
@@ -1120,7 +1121,7 @@ msschan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b, struct pcm_channel *
ch->channel = c;
ch->buffer = b;
ch->dir = dir;
- if (sndbuf_alloc(ch->buffer, mss->parent_dmat, MSS_BUFFSIZE) == -1) return NULL;
+ if (sndbuf_alloc(ch->buffer, mss->parent_dmat, mss->bufsize) == -1) return NULL;
sndbuf_isadmasetup(ch->buffer, (dir == PCMDIR_PLAY)? mss->drq1 : mss->drq2);
return ch;
}
@@ -1658,6 +1659,7 @@ mss_doattach(device_t dev, struct mss_info *mss)
char status[SND_STATUSLEN];
mss->lock = snd_mtxcreate(device_get_nameunit(dev));
+ mss->bufsize = pcm_getbuffersize(dev, 4096, MSS_DEFAULT_BUFSZ, 65536);
if (!mss_alloc_resources(mss, dev)) goto no;
mss_init(mss, dev);
pdma = rman_get_start(mss->drq1);
@@ -1708,7 +1710,7 @@ mss_doattach(device_t dev, struct mss_info *mss)
/*lowaddr*/BUS_SPACE_MAXADDR_24BIT,
/*highaddr*/BUS_SPACE_MAXADDR,
/*filter*/NULL, /*filterarg*/NULL,
- /*maxsize*/MSS_BUFFSIZE, /*nsegments*/1,
+ /*maxsize*/mss->bufsize, /*nsegments*/1,
/*maxsegz*/0x3ffff,
/*flags*/0, &mss->parent_dmat) != 0) {
device_printf(dev, "unable to create dma tag\n");
OpenPOWER on IntegriCloud