summaryrefslogtreecommitdiffstats
path: root/sys/dev/sound/pci/fm801.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/sound/pci/fm801.c')
-rw-r--r--sys/dev/sound/pci/fm801.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/sys/dev/sound/pci/fm801.c b/sys/dev/sound/pci/fm801.c
index 485ca4d..639200a 100644
--- a/sys/dev/sound/pci/fm801.c
+++ b/sys/dev/sound/pci/fm801.c
@@ -96,7 +96,7 @@ SND_DECLARE_FILE("$FreeBSD$");
#define FM_INTSTATUS_VOL 0x4000
#define FM_INTSTATUS_MPU 0x8000
-#define FM801_BUFFSIZE 1024*4 /* Other values do not work!!! */
+#define FM801_DEFAULT_BUFSZ 4096 /* Other values do not work!!! */
/* debug purposes */
#define DPRINT if(0) printf
@@ -158,6 +158,8 @@ struct fm801_info {
rec_shift,
rec_size;
+ unsigned int bufsz;
+
struct fm801_chinfo pch, rch;
};
@@ -328,7 +330,7 @@ fm801ch_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, fm801->parent_dmat, FM801_BUFFSIZE) == -1) return NULL;
+ if (sndbuf_alloc(ch->buffer, fm801->parent_dmat, fm801->bufsz) == -1) return NULL;
return (void *)ch;
}
@@ -604,6 +606,8 @@ fm801_pci_attach(device_t dev)
goto oops;
}
+ fm801->bufsz = pcm_getbuffersize(dev, 4096, FM801_DEFAULT_BUFSZ, 65536);
+
fm801_init(fm801);
codec = AC97_CREATE(dev, fm801, fm801_ac97);
@@ -623,7 +627,7 @@ fm801_pci_attach(device_t dev)
/*lowaddr*/BUS_SPACE_MAXADDR_32BIT,
/*highaddr*/BUS_SPACE_MAXADDR,
/*filter*/NULL, /*filterarg*/NULL,
- /*maxsize*/FM801_BUFFSIZE, /*nsegments*/1, /*maxsegz*/0x3ffff,
+ /*maxsize*/fm801->bufsz, /*nsegments*/1, /*maxsegz*/0x3ffff,
/*flags*/0, &fm801->parent_dmat) != 0) {
device_printf(dev, "unable to create dma tag\n");
goto oops;
OpenPOWER on IntegriCloud