diff options
| author | Ariff Abdullah <ariff@FreeBSD.org> | 2007-02-04 06:17:48 +0000 |
|---|---|---|
| committer | Ariff Abdullah <ariff@FreeBSD.org> | 2007-02-04 06:17:48 +0000 |
| commit | 7040bb9cb7e18a242be8519ab82a86693c932367 (patch) | |
| tree | 45b449578a1f9131cd33a9cedaf8731e26298fe3 /sys/dev/sound | |
| parent | 186c5813263e69224a6a1f3c031850bd43d0e784 (diff) | |
Notes
Diffstat (limited to 'sys/dev/sound')
| -rw-r--r-- | sys/dev/sound/pcm/buffer.c | 10 | ||||
| -rw-r--r-- | sys/dev/sound/pcm/buffer.h | 1 |
2 files changed, 11 insertions, 0 deletions
diff --git a/sys/dev/sound/pcm/buffer.c b/sys/dev/sound/pcm/buffer.c index b8570f7ad02a..bbfd6e339f8a 100644 --- a/sys/dev/sound/pcm/buffer.c +++ b/sys/dev/sound/pcm/buffer.c @@ -46,6 +46,10 @@ sndbuf_create(device_t dev, char *drv, char *desc, struct pcm_channel *channel) void sndbuf_destroy(struct snd_dbuf *b) { + if (b->tmpbuf) + free(b->tmpbuf, M_DEVBUF); + if (!(b->flags & SNDBUF_F_MANAGED) && b->buf) + free(b->buf, M_DEVBUF); free(b, M_DEVBUF); } @@ -85,6 +89,7 @@ sndbuf_alloc(struct snd_dbuf *b, bus_dma_tag_t dmatag, unsigned int size) b->maxsize = size; b->bufsize = b->maxsize; b->buf_addr = 0; + b->flags |= SNDBUF_F_MANAGED; if (bus_dmamem_alloc(b->dmatag, (void **)&b->buf, BUS_DMA_NOWAIT, &b->dmamap)) return (ENOMEM); @@ -104,6 +109,8 @@ sndbuf_alloc(struct snd_dbuf *b, bus_dma_tag_t dmatag, unsigned int size) int sndbuf_setup(struct snd_dbuf *b, void *buf, unsigned int size) { + if (buf) + b->flags |= SNDBUF_F_MANAGED; b->buf = buf; b->maxsize = size; b->bufsize = b->maxsize; @@ -117,6 +124,9 @@ sndbuf_free(struct snd_dbuf *b) free(b->tmpbuf, M_DEVBUF); b->tmpbuf = NULL; + if (!(b->flags & SNDBUF_F_MANAGED) && b->buf) + free(b->buf, M_DEVBUF); + if (b->dmamap) bus_dmamap_unload(b->dmatag, b->dmamap); diff --git a/sys/dev/sound/pcm/buffer.h b/sys/dev/sound/pcm/buffer.h index 7b2bffbe127b..44c4420721ce 100644 --- a/sys/dev/sound/pcm/buffer.h +++ b/sys/dev/sound/pcm/buffer.h @@ -32,6 +32,7 @@ #define SNDBUF_F_DMA 0x00000001 #define SNDBUF_F_XRUN 0x00000002 #define SNDBUF_F_RUNNING 0x00000004 +#define SNDBUF_F_MANAGED 0x00000008 #define SNDBUF_NAMELEN 48 |
