summaryrefslogtreecommitdiffstats
path: root/sys/dev/sound/pcm/buffer.c
diff options
context:
space:
mode:
authorcg <cg@FreeBSD.org>2002-01-26 22:13:24 +0000
committercg <cg@FreeBSD.org>2002-01-26 22:13:24 +0000
commit7119c584879890efe6e984d27f939052ff2d0d0c (patch)
tree7f5235e1606d17de8b16949b2ddbfff99e3ba640 /sys/dev/sound/pcm/buffer.c
parent94fe6c387a335887a3fa8b9073ac110ac597f6d7 (diff)
downloadFreeBSD-src-7119c584879890efe6e984d27f939052ff2d0d0c.zip
FreeBSD-src-7119c584879890efe6e984d27f939052ff2d0d0c.tar.gz
* improve error handling
* be more specific in verbose boot messages * allow the feeder subsystem to veto pcm* attaching if there is an error initialising the root feeder * don't free/malloc a new tmpbuf when resizing a snd_dbuf to the same size as it currently is * store the feeder description in the feeder structure instead of mallocing space for it
Diffstat (limited to 'sys/dev/sound/pcm/buffer.c')
-rw-r--r--sys/dev/sound/pcm/buffer.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/sys/dev/sound/pcm/buffer.c b/sys/dev/sound/pcm/buffer.c
index 1081fdf..1604b9d 100644
--- a/sys/dev/sound/pcm/buffer.c
+++ b/sys/dev/sound/pcm/buffer.c
@@ -34,6 +34,7 @@ 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 */
@@ -53,12 +54,14 @@ struct snd_dbuf {
};
struct snd_dbuf *
-sndbuf_create(char *drv, char *desc)
+sndbuf_create(device_t dev, char *drv, char *desc)
{
struct snd_dbuf *b;
b = malloc(sizeof(*b), M_DEVBUF, M_WAITOK | M_ZERO);
snprintf(b->name, SNDBUF_NAMELEN, "%s:%s", drv, desc);
+ b->dev = dev;
+
return b;
}
@@ -74,7 +77,7 @@ sndbuf_setmap(void *arg, bus_dma_segment_t *segs, int nseg, int error)
struct snd_dbuf *b = (struct snd_dbuf *)arg;
if (bootverbose) {
- printf("pcm: setmap %lx, %lx; ", (unsigned long)segs->ds_addr,
+ device_printf(b->dev, "sndbuf_setmap %lx, %lx; ", (unsigned long)segs->ds_addr,
(unsigned long)segs->ds_len);
printf("%p -> %lx\n", b->buf, (unsigned long)vtophys(b->buf));
}
@@ -133,6 +136,8 @@ sndbuf_resize(struct snd_dbuf *b, unsigned int blkcnt, unsigned int blksz)
blksz = b->blksz;
if (blkcnt < 2 || blksz < 16 || (blkcnt * blksz > b->maxsize))
return EINVAL;
+ if (blkcnt == b->blkcnt && blksz == b->blksz)
+ return 0;
b->blkcnt = blkcnt;
b->blksz = blksz;
b->bufsize = blkcnt * blksz;
OpenPOWER on IntegriCloud