diff options
author | cg <cg@FreeBSD.org> | 2002-01-26 22:13:24 +0000 |
---|---|---|
committer | cg <cg@FreeBSD.org> | 2002-01-26 22:13:24 +0000 |
commit | 7119c584879890efe6e984d27f939052ff2d0d0c (patch) | |
tree | 7f5235e1606d17de8b16949b2ddbfff99e3ba640 /sys/dev/sound/pcm/buffer.c | |
parent | 94fe6c387a335887a3fa8b9073ac110ac597f6d7 (diff) | |
download | FreeBSD-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.c | 9 |
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; |