git: 1d9f05bd46bc - stable/15 - sound: Get rid of useless sndbuf getters and setters

From: Christos Margiolis <christos_at_FreeBSD.org>
Date: Tue, 18 Nov 2025 00:51:57 UTC
The branch stable/15 has been updated by christos:

URL: https://cgit.FreeBSD.org/src/commit/?id=1d9f05bd46bc496d695ed883274ee599fdde5538

commit 1d9f05bd46bc496d695ed883274ee599fdde5538
Author:     Christos Margiolis <christos@FreeBSD.org>
AuthorDate: 2025-11-11 12:05:34 +0000
Commit:     Christos Margiolis <christos@FreeBSD.org>
CommitDate: 2025-11-18 00:51:22 +0000

    sound: Get rid of useless sndbuf getters and setters
    
    No functional change intended.
    
    Sponsored by:   The FreeBSD Foundation
    MFC after:      1 week
    Differential Revision:  https://reviews.freebsd.org/D53528
    
    (cherry picked from commit 78c5026ae13b2d30b479f9bc892ecdb6f5a5bc0b)
---
 sys/arm/allwinner/a10_codec.c            |   2 +-
 sys/arm/allwinner/aw_i2s.c               |   8 +-
 sys/arm/broadcom/bcm2835/bcm2835_audio.c |   9 +-
 sys/arm/freescale/imx/imx6_ssi.c         |  10 +--
 sys/arm/freescale/vybrid/vf_sai.c        |   2 +-
 sys/arm64/rockchip/rk_i2s.c              |   8 +-
 sys/dev/sound/dummy.c                    |   8 +-
 sys/dev/sound/fdt/audio_soc.c            |   2 +-
 sys/dev/sound/macio/aoa.c                |   4 +-
 sys/dev/sound/pci/als4000.c              |  10 +--
 sys/dev/sound/pci/atiixp.c               |  25 +++---
 sys/dev/sound/pci/cmi.c                  |   6 +-
 sys/dev/sound/pci/cs4281.c               |   8 +-
 sys/dev/sound/pci/csapcm.c               |   8 +-
 sys/dev/sound/pci/emu10k1.c              |   8 +-
 sys/dev/sound/pci/emu10kx-pcm.c          |  12 +--
 sys/dev/sound/pci/es137x.c               |  24 +++---
 sys/dev/sound/pci/fm801.c                |   2 +-
 sys/dev/sound/pci/hda/hdaa.c             |  18 ++--
 sys/dev/sound/pci/hdsp-pcm.c             |   2 +-
 sys/dev/sound/pci/hdspe-pcm.c            |   2 +-
 sys/dev/sound/pci/ich.c                  |  16 ++--
 sys/dev/sound/pci/maestro3.c             |  20 ++---
 sys/dev/sound/pci/neomagic.c             |   2 +-
 sys/dev/sound/pci/solo.c                 |   3 +-
 sys/dev/sound/pci/t4dwave.c              |  10 +--
 sys/dev/sound/pci/via8233.c              |  26 +++---
 sys/dev/sound/pci/via82c686.c            |   6 +-
 sys/dev/sound/pci/vibes.c                |  12 +--
 sys/dev/sound/pcm/buffer.c               | 144 ++-----------------------------
 sys/dev/sound/pcm/buffer.h               |  22 -----
 sys/dev/sound/pcm/channel.c              | 133 ++++++++++++++--------------
 sys/dev/sound/pcm/dsp.c                  |  44 +++++-----
 sys/dev/sound/pcm/feeder.c               |   8 +-
 sys/dev/sound/pcm/feeder_chain.c         |   4 +-
 sys/dev/sound/pcm/feeder_mixer.c         |  14 +--
 sys/dev/sound/pcm/sndstat.c              |  55 ++++++------
 sys/dev/sound/pcm/vchan.c                |   4 +-
 sys/dev/sound/pcm/vchan.h                |   4 +-
 39 files changed, 272 insertions(+), 433 deletions(-)

diff --git a/sys/arm/allwinner/a10_codec.c b/sys/arm/allwinner/a10_codec.c
index 12d389d24243..0a4ba7aa31b2 100644
--- a/sys/arm/allwinner/a10_codec.c
+++ b/sys/arm/allwinner/a10_codec.c
@@ -680,7 +680,7 @@ a10codec_dmaintr(void *priv)
 	struct a10codec_chinfo *ch = priv;
 	unsigned bufsize;
 
-	bufsize = sndbuf_getsize(ch->buffer);
+	bufsize = ch->buffer->bufsize;
 
 	ch->pos += ch->blocksize;
 	if (ch->pos >= bufsize)
diff --git a/sys/arm/allwinner/aw_i2s.c b/sys/arm/allwinner/aw_i2s.c
index 87dfb109363f..31c6d9854171 100644
--- a/sys/arm/allwinner/aw_i2s.c
+++ b/sys/arm/allwinner/aw_i2s.c
@@ -530,10 +530,10 @@ aw_i2s_dai_intr(device_t dev, struct snd_dbuf *play_buf, struct snd_dbuf *rec_bu
 		val  = I2S_READ(sc, DA_FSTA);
 		empty = DA_FSTA_TXE_CNT(val);
 		count = sndbuf_getready(play_buf);
-		size = sndbuf_getsize(play_buf);
+		size = play_buf->bufsize;
 		readyptr = sndbuf_getreadyptr(play_buf);
 
-		samples = (uint8_t*)sndbuf_getbuf(play_buf);
+		samples = play_buf->buf;
 		written = 0;
 		if (empty > count / 2)
 			empty = count / 2;
@@ -556,9 +556,9 @@ aw_i2s_dai_intr(device_t dev, struct snd_dbuf *play_buf, struct snd_dbuf *rec_bu
 		available = DA_FSTA_RXA_CNT(val);
 
 		count = sndbuf_getfree(rec_buf);
-		size = sndbuf_getsize(rec_buf);
+		size = rec_buf->bufsize;
 		freeptr = sndbuf_getfreeptr(rec_buf);
-		samples = (uint8_t*)sndbuf_getbuf(rec_buf);
+		samples = rec_buf->buf;
 		recorded = 0;
 		if (available > count / 2)
 			available = count / 2;
diff --git a/sys/arm/broadcom/bcm2835/bcm2835_audio.c b/sys/arm/broadcom/bcm2835/bcm2835_audio.c
index 13f309dd3f11..4b138de58238 100644
--- a/sys/arm/broadcom/bcm2835/bcm2835_audio.c
+++ b/sys/arm/broadcom/bcm2835/bcm2835_audio.c
@@ -537,7 +537,7 @@ bcm2835_audio_worker(void *data)
 			continue;
 
 		count = sndbuf_getready(ch->buffer);
-		size = sndbuf_getsize(ch->buffer);
+		size = ch->buffer->bufsize;
 		readyptr = sndbuf_getreadyptr(ch->buffer);
 
 		BCM2835_AUDIO_LOCK(sc);
@@ -550,11 +550,12 @@ bcm2835_audio_worker(void *data)
 		if (count < VCHIQ_AUDIO_PACKET_SIZE)
 			continue;
 
-		buf = (uint8_t*)sndbuf_getbuf(ch->buffer) + readyptr;
+		buf = ch->buffer->buf + readyptr;
 
 		bcm2835_audio_write_samples(ch, buf, count);
 		BCM2835_AUDIO_LOCK(sc);
-		ch->unsubmittedptr = (ch->unsubmittedptr + count) % sndbuf_getsize(ch->buffer);
+		ch->unsubmittedptr = (ch->unsubmittedptr + count) %
+		    ch->buffer->bufsize;
 		ch->available_space -= count;
 		ch->submitted_samples += count;
 		KASSERT(ch->available_space >= 0, ("ch->available_space == %d\n", ch->available_space));
@@ -623,7 +624,7 @@ bcmchan_free(kobj_t obj, void *data)
 	struct bcm2835_audio_chinfo *ch = data;
 	void *buffer;
 
-	buffer = sndbuf_getbuf(ch->buffer);
+	buffer = ch->buffer->buf;
 	if (buffer)
 		free(buffer, M_DEVBUF);
 
diff --git a/sys/arm/freescale/imx/imx6_ssi.c b/sys/arm/freescale/imx/imx6_ssi.c
index cb77f1454e63..5a0e671f15a2 100644
--- a/sys/arm/freescale/imx/imx6_ssi.c
+++ b/sys/arm/freescale/imx/imx6_ssi.c
@@ -398,7 +398,7 @@ ssichan_setblocksize(kobj_t obj, void *data, uint32_t blocksize)
 
 	setup_dma(scp);
 
-	return (sndbuf_getblksz(ch->buffer));
+	return (ch->buffer->blksz);
 }
 
 uint32_t
@@ -415,7 +415,7 @@ ssi_dma_intr(void *arg, int chn)
 	sc = scp->sc;
 	conf = sc->conf;
 
-	bufsize = sndbuf_getsize(ch->buffer);
+	bufsize = ch->buffer->bufsize;
 
 	sc->pos += conf->period;
 	if (sc->pos >= bufsize)
@@ -487,8 +487,8 @@ setup_dma(struct sc_pcminfo *scp)
 	conf->saddr = sc->buf_base_phys;
 	conf->daddr = rman_get_start(sc->res[0]) + SSI_STX0;
 	conf->event = sc->sdma_ev_tx; /* SDMA TX event */
-	conf->period = sndbuf_getblksz(ch->buffer);
-	conf->num_bd = sndbuf_getblkcnt(ch->buffer);
+	conf->period = ch->buffer->blksz;
+	conf->num_bd = ch->buffer->blkcnt;
 
 	/*
 	 * Word Length
@@ -497,7 +497,7 @@ setup_dma(struct sc_pcminfo *scp)
 	 * SSI supports 24 at max.
 	 */
 
-	fmt = sndbuf_getfmt(ch->buffer);
+	fmt = ch->buffer->fmt;
 
 	if (fmt & AFMT_16BIT) {
 		conf->word_length = 16;
diff --git a/sys/arm/freescale/vybrid/vf_sai.c b/sys/arm/freescale/vybrid/vf_sai.c
index e895529c4810..9c0125768fee 100644
--- a/sys/arm/freescale/vybrid/vf_sai.c
+++ b/sys/arm/freescale/vybrid/vf_sai.c
@@ -369,7 +369,7 @@ saichan_setblocksize(kobj_t obj, void *data, uint32_t blocksize)
 
 	sndbuf_resize(ch->buffer, sc->dma_size / blocksize, blocksize);
 
-	sc->period = sndbuf_getblksz(ch->buffer);
+	sc->period = ch->buffer->blksz;
 	return (sc->period);
 }
 
diff --git a/sys/arm64/rockchip/rk_i2s.c b/sys/arm64/rockchip/rk_i2s.c
index 5f1b6bbdeabf..856fa20e6ce4 100644
--- a/sys/arm64/rockchip/rk_i2s.c
+++ b/sys/arm64/rockchip/rk_i2s.c
@@ -403,10 +403,10 @@ rk_i2s_dai_intr(device_t dev, struct snd_dbuf *play_buf, struct snd_dbuf *rec_bu
 		count = sndbuf_getready(play_buf);
 		if (count > FIFO_SIZE - 1)
 			count = FIFO_SIZE - 1;
-		size = sndbuf_getsize(play_buf);
+		size = play_buf->bufsize;
 		readyptr = sndbuf_getreadyptr(play_buf);
 
-		samples = (uint8_t*)sndbuf_getbuf(play_buf);
+		samples = play_buf->buf;
 		written = 0;
 		for (; level < count; level++) {
 			val  = (samples[readyptr++ % size] << 0);
@@ -426,9 +426,9 @@ rk_i2s_dai_intr(device_t dev, struct snd_dbuf *play_buf, struct snd_dbuf *rec_bu
 		uint8_t *samples;
 		uint32_t count, size, freeptr, recorded;
 		count = sndbuf_getfree(rec_buf);
-		size = sndbuf_getsize(rec_buf);
+		size = rec_buf->bufsize;
 		freeptr = sndbuf_getfreeptr(rec_buf);
-		samples = (uint8_t*)sndbuf_getbuf(rec_buf);
+		samples = rec_buf->buf;
 		recorded = 0;
 		if (level > count / 4)
 			level = count / 4;
diff --git a/sys/dev/sound/dummy.c b/sys/dev/sound/dummy.c
index 39214a141bf9..0a2717ec418c 100644
--- a/sys/dev/sound/dummy.c
+++ b/sys/dev/sound/dummy.c
@@ -105,8 +105,8 @@ dummy_chan_io(void *arg)
 		if (!ch->run)
 			continue;
 		if (ch->dir == PCMDIR_PLAY) {
-			ch->ptr += sndbuf_getblksz(ch->buf);
-			ch->ptr %= sndbuf_getsize(ch->buf);
+			ch->ptr += ch->buf->blksz;
+			ch->ptr %= ch->buf->bufsize;
 		} else
 			sndbuf_fillsilence(ch->buf);
 		snd_mtxunlock(sc->lock);
@@ -123,7 +123,7 @@ dummy_chan_free(kobj_t obj, void *data)
 	struct dummy_chan *ch =data;
 	uint8_t *buf;
 
-	buf = sndbuf_getbuf(ch->buf);
+	buf = ch->buf->buf;
 	if (buf != NULL)
 		free(buf, M_DEVBUF);
 
@@ -190,7 +190,7 @@ dummy_chan_setblocksize(kobj_t obj, void *data, uint32_t blocksize)
 {
 	struct dummy_chan *ch = data;
 
-	return (sndbuf_getblksz(ch->buf));
+	return (ch->buf->blksz);
 }
 
 static int
diff --git a/sys/dev/sound/fdt/audio_soc.c b/sys/dev/sound/fdt/audio_soc.c
index c2bdea399364..84867cb3d781 100644
--- a/sys/dev/sound/fdt/audio_soc.c
+++ b/sys/dev/sound/fdt/audio_soc.c
@@ -249,7 +249,7 @@ audio_soc_chan_free(kobj_t obj, void *data)
 
 	ausoc_chan = (struct audio_soc_channel *)data;
 
-	buffer = sndbuf_getbuf(ausoc_chan->buf);
+	buffer = ausoc_chan->buf->buf;
 	if (buffer)
 		free(buffer, M_DEVBUF);
 
diff --git a/sys/dev/sound/macio/aoa.c b/sys/dev/sound/macio/aoa.c
index 9861bbd92a0c..e0a6206c19a6 100644
--- a/sys/dev/sound/macio/aoa.c
+++ b/sys/dev/sound/macio/aoa.c
@@ -73,8 +73,8 @@ aoa_dma_set_program(struct aoa_dma *dma)
 	u_int32_t 		 addr;
 	int 			 i;
 
-	addr = (u_int32_t) sndbuf_getbufaddr(dma->buf);
-	KASSERT(dma->bufsz == sndbuf_getsize(dma->buf), ("bad size"));
+	addr = (u_int32_t)dma->buf->buf_addr;
+	KASSERT(dma->bufsz == dma->buf->bufsize, ("bad size"));
 
 	dma->slots = dma->bufsz / dma->blksz;
 
diff --git a/sys/dev/sound/pci/als4000.c b/sys/dev/sound/pci/als4000.c
index 9d86713b379e..75fbefe27633 100644
--- a/sys/dev/sound/pci/als4000.c
+++ b/sys/dev/sound/pci/als4000.c
@@ -281,7 +281,7 @@ alschan_getptr(kobj_t obj, void *data)
 	snd_mtxlock(sc->lock);
 	pos = als_gcr_rd(ch->parent, ch->gcr_fifo_status) & 0xffff;
 	snd_mtxunlock(sc->lock);
-	sz  = sndbuf_getsize(ch->buffer);
+	sz  = ch->buffer->bufsize;
 	return (2 * sz - pos - 1) % sz;
 }
 
@@ -348,8 +348,8 @@ als_playback_start(struct sc_chinfo *ch)
 	struct	sc_info *sc = ch->parent;
 	u_int32_t	buf, bufsz, count, dma_prog;
 
-	buf = sndbuf_getbufaddr(ch->buffer);
-	bufsz = sndbuf_getsize(ch->buffer);
+	buf = ch->buffer->buf_addr;
+	bufsz = ch->buffer->bufsize;
 	count = bufsz / 2;
 	if (ch->format & AFMT_16BIT)
 		count /= 2;
@@ -451,8 +451,8 @@ als_capture_start(struct sc_chinfo *ch)
 	struct	sc_info *sc = ch->parent;
 	u_int32_t	buf, bufsz, count, dma_prog;
 
-	buf = sndbuf_getbufaddr(ch->buffer);
-	bufsz = sndbuf_getsize(ch->buffer);
+	buf = ch->buffer->buf_addr;
+	bufsz = ch->buffer->bufsize;
 	count = bufsz / 2;
 	if (ch->format & AFMT_16BIT)
 		count /= 2;
diff --git a/sys/dev/sound/pci/atiixp.c b/sys/dev/sound/pci/atiixp.c
index 90e5742e6523..30f061fd9388 100644
--- a/sys/dev/sound/pci/atiixp.c
+++ b/sys/dev/sound/pci/atiixp.c
@@ -535,8 +535,8 @@ atiixp_chan_setfragments(kobj_t obj, void *data,
 
 	blksz &= ATI_IXP_BLK_ALIGN;
 
-	if (blksz > (sndbuf_getmaxsize(ch->buffer) / ATI_IXP_DMA_CHSEGS_MIN))
-		blksz = sndbuf_getmaxsize(ch->buffer) / ATI_IXP_DMA_CHSEGS_MIN;
+	if (blksz > (ch->buffer->maxsize / ATI_IXP_DMA_CHSEGS_MIN))
+		blksz = ch->buffer->maxsize / ATI_IXP_DMA_CHSEGS_MIN;
 	if (blksz < ATI_IXP_BLK_MIN)
 		blksz = ATI_IXP_BLK_MIN;
 	if (blkcnt > ATI_IXP_DMA_CHSEGS_MAX)
@@ -544,7 +544,7 @@ atiixp_chan_setfragments(kobj_t obj, void *data,
 	if (blkcnt < ATI_IXP_DMA_CHSEGS_MIN)
 		blkcnt = ATI_IXP_DMA_CHSEGS_MIN;
 
-	while ((blksz * blkcnt) > sndbuf_getmaxsize(ch->buffer)) {
+	while ((blksz * blkcnt) > ch->buffer->maxsize) {
 		if ((blkcnt >> 1) >= ATI_IXP_DMA_CHSEGS_MIN)
 			blkcnt >>= 1;
 		else if ((blksz >> 1) >= ATI_IXP_BLK_MIN)
@@ -553,14 +553,14 @@ atiixp_chan_setfragments(kobj_t obj, void *data,
 			break;
 	}
 
-	if ((sndbuf_getblksz(ch->buffer) != blksz ||
-	    sndbuf_getblkcnt(ch->buffer) != blkcnt) &&
+	if ((ch->buffer->blksz != blksz ||
+	    ch->buffer->blkcnt != blkcnt) &&
 	    sndbuf_resize(ch->buffer, blkcnt, blksz) != 0)
 		device_printf(sc->dev, "%s: failed blksz=%u blkcnt=%u\n",
 		    __func__, blksz, blkcnt);
 
-	ch->blksz = sndbuf_getblksz(ch->buffer);
-	ch->blkcnt = sndbuf_getblkcnt(ch->buffer);
+	ch->blksz = ch->buffer->blksz;
+	ch->blkcnt = ch->buffer->blkcnt;
 
 	return (0);
 }
@@ -583,7 +583,7 @@ atiixp_buildsgdt(struct atiixp_chinfo *ch)
 	uint32_t addr, blksz, blkcnt;
 	int i;
 
-	addr = sndbuf_getbufaddr(ch->buffer);
+	addr = ch->buffer->buf_addr;
 
 	if (sc->polling != 0) {
 		blksz = ch->blksz * ch->blkcnt;
@@ -610,7 +610,7 @@ atiixp_dmapos(struct atiixp_chinfo *ch)
 	volatile uint32_t ptr;
 
 	reg = ch->dt_cur_bit;
-	addr = sndbuf_getbufaddr(ch->buffer);
+	addr = ch->buffer->buf_addr;
 	sz = ch->blkcnt * ch->blksz;
 	retry = ATI_IXP_DMA_RETRY_MAX;
 
@@ -739,8 +739,7 @@ atiixp_chan_trigger(kobj_t obj, void *data, int go)
 			ch->ptr = 0;
 			ch->prevptr = 0;
 			pollticks = ((uint64_t)hz * ch->blksz) /
-			    ((uint64_t)sndbuf_getalign(ch->buffer) *
-			    sndbuf_getspd(ch->buffer));
+			    ((uint64_t)ch->buffer->align * ch->buffer->spd);
 			pollticks >>= 2;
 			if (pollticks > hz)
 				pollticks = hz;
@@ -781,8 +780,8 @@ atiixp_chan_trigger(kobj_t obj, void *data, int go)
 				else
 					ch = &sc->rch;
 				pollticks = ((uint64_t)hz * ch->blksz) /
-				    ((uint64_t)sndbuf_getalign(ch->buffer) *
-				    sndbuf_getspd(ch->buffer));
+				    ((uint64_t)ch->buffer->align *
+				    ch->buffer->spd);
 				pollticks >>= 2;
 				if (pollticks > hz)
 					pollticks = hz;
diff --git a/sys/dev/sound/pci/cmi.c b/sys/dev/sound/pci/cmi.c
index 22f1e76a4d1f..a1356f58b567 100644
--- a/sys/dev/sound/pci/cmi.c
+++ b/sys/dev/sound/pci/cmi.c
@@ -255,10 +255,10 @@ cmi_dma_prog(struct sc_info *sc, struct sc_chinfo *ch, u_int32_t base)
 {
 	u_int32_t s, i, sz;
 
-	ch->phys_buf = sndbuf_getbufaddr(ch->buffer);
+	ch->phys_buf = ch->buffer->buf_addr;
 
 	cmi_wr(sc, base, ch->phys_buf, 4);
-	sz = (u_int32_t)sndbuf_getsize(ch->buffer);
+	sz = (u_int32_t)ch->buffer->bufsize;
 
 	s = sz / ch->bps - 1;
 	cmi_wr(sc, base + 4, s, 2);
@@ -525,7 +525,7 @@ cmichan_getptr(kobj_t obj, void *data)
 	}
 	snd_mtxunlock(sc->lock);
 
-	sz = sndbuf_getsize(ch->buffer);
+	sz = ch->buffer->bufsize;
 	bufptr = (physptr - ch->phys_buf + sz - ch->bps) % sz;
 
 	return bufptr;
diff --git a/sys/dev/sound/pci/cs4281.c b/sys/dev/sound/pci/cs4281.c
index 7a25f7f4c08d..af2b4da76aba 100644
--- a/sys/dev/sound/pci/cs4281.c
+++ b/sys/dev/sound/pci/cs4281.c
@@ -328,7 +328,7 @@ cs4281chan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b, struct pcm_channe
     ch->fmt = SND_FORMAT(AFMT_U8, 1, 0);
     ch->spd = DSP_DEFAULT_SPEED;
     ch->bps = 1;
-    ch->blksz = sndbuf_getsize(ch->buffer);
+    ch->blksz = ch->buffer->bufsize;
 
     ch->dma_chan = (dir == PCMDIR_PLAY) ? CS4281_DMA_PLAY : CS4281_DMA_REC;
     ch->dma_setup = 0;
@@ -412,7 +412,7 @@ cs4281chan_getptr(kobj_t obj, void *data)
     u_int32_t  dba, dca, ptr;
     int sz;
 
-    sz  = sndbuf_getsize(ch->buffer);
+    sz  = ch->buffer->bufsize;
     dba = cs4281_rd(sc, CS4281PCI_DBA(ch->dma_chan));
     dca = cs4281_rd(sc, CS4281PCI_DCA(ch->dma_chan));
     ptr = (dca - dba + sz) % sz;
@@ -493,9 +493,9 @@ adcdac_prog(struct sc_chinfo *ch)
     if (!ch->dma_setup) {
 	go = adcdac_go(ch, 0);
 	cs4281_wr(sc, CS4281PCI_DBA(ch->dma_chan),
-		  sndbuf_getbufaddr(ch->buffer));
+		  ch->buffer->buf_addr);
 	cs4281_wr(sc, CS4281PCI_DBC(ch->dma_chan),
-		  sndbuf_getsize(ch->buffer) / ch->bps - 1);
+		  ch->buffer->bufsize / ch->bps - 1);
 	ch->dma_setup = 1;
 	adcdac_go(ch, go);
     }
diff --git a/sys/dev/sound/pci/csapcm.c b/sys/dev/sound/pci/csapcm.c
index a966a2e66402..688aee6400d8 100644
--- a/sys/dev/sound/pci/csapcm.c
+++ b/sys/dev/sound/pci/csapcm.c
@@ -483,7 +483,7 @@ csa_setupchan(struct csa_chinfo *ch)
 
 	if (ch->dir == PCMDIR_PLAY) {
 		/* direction */
-		csa_writemem(resp, BA1_PBA, sndbuf_getbufaddr(ch->buffer));
+		csa_writemem(resp, BA1_PBA, ch->buffer->buf_addr);
 
 		/* format */
 		csa->pfie = csa_readmem(resp, BA1_PFIE) & ~0x0000f03f;
@@ -512,7 +512,7 @@ csa_setupchan(struct csa_chinfo *ch)
 		csa_setplaysamplerate(resp, ch->spd);
 	} else if (ch->dir == PCMDIR_REC) {
 		/* direction */
-		csa_writemem(resp, BA1_CBA, sndbuf_getbufaddr(ch->buffer));
+		csa_writemem(resp, BA1_CBA, ch->buffer->buf_addr);
 
 		/* format */
 		csa_writemem(resp, BA1_CIE, (csa_readmem(resp, BA1_CIE) & ~0x0000003f) | 0x00000001);
@@ -602,11 +602,11 @@ csachan_getptr(kobj_t obj, void *data)
 	resp = &csa->res;
 
 	if (ch->dir == PCMDIR_PLAY) {
-		ptr = csa_readmem(resp, BA1_PBA) - sndbuf_getbufaddr(ch->buffer);
+		ptr = csa_readmem(resp, BA1_PBA) - ch->buffer->buf_addr;
 		if ((ch->fmt & AFMT_U8) != 0 || (ch->fmt & AFMT_S8) != 0)
 			ptr >>= 1;
 	} else {
-		ptr = csa_readmem(resp, BA1_CBA) - sndbuf_getbufaddr(ch->buffer);
+		ptr = csa_readmem(resp, BA1_CBA) - ch->buffer->buf_addr;
 		if ((ch->fmt & AFMT_U8) != 0 || (ch->fmt & AFMT_S8) != 0)
 			ptr >>= 1;
 	}
diff --git a/sys/dev/sound/pci/emu10k1.c b/sys/dev/sound/pci/emu10k1.c
index e4b2c22f4f07..a85031977f4b 100644
--- a/sys/dev/sound/pci/emu10k1.c
+++ b/sys/dev/sound/pci/emu10k1.c
@@ -413,7 +413,7 @@ emu_settimer(struct sc_info *sc)
 	for (i = 0; i < sc->nchans; i++) {
 		pch = &sc->pch[i];
 		if (pch->buffer) {
-			tmp = (pch->spd * sndbuf_getalign(pch->buffer))
+			tmp = (pch->spd * pch->buffer->align)
 			    / pch->blksz;
 			if (tmp > rate)
 				rate = tmp;
@@ -423,7 +423,7 @@ emu_settimer(struct sc_info *sc)
 	for (i = 0; i < 3; i++) {
 		rch = &sc->rch[i];
 		if (rch->buffer) {
-			tmp = (rch->spd * sndbuf_getalign(rch->buffer))
+			tmp = (rch->spd * rch->buffer->align)
 			    / rch->blksz;
 			if (tmp > rate)
 				rate = tmp;
@@ -838,7 +838,7 @@ emupchan_free(kobj_t obj, void *data)
 	int r;
 
 	snd_mtxlock(sc->lock);
-	r = emu_memfree(sc, sndbuf_getbuf(ch->buffer));
+	r = emu_memfree(sc, ch->buffer->buf);
 	snd_mtxunlock(sc->lock);
 
 	return r;
@@ -985,7 +985,7 @@ emurchan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b,
 		return NULL;
 	else {
 		snd_mtxlock(sc->lock);
-		emu_wrptr(sc, 0, ch->basereg, sndbuf_getbufaddr(ch->buffer));
+		emu_wrptr(sc, 0, ch->basereg, ch->buffer->buf_addr);
 		emu_wrptr(sc, 0, ch->sizereg, 0); /* off */
 		snd_mtxunlock(sc->lock);
 		return ch;
diff --git a/sys/dev/sound/pci/emu10kx-pcm.c b/sys/dev/sound/pci/emu10kx-pcm.c
index c280b64892f6..a93d48ba71b1 100644
--- a/sys/dev/sound/pci/emu10kx-pcm.c
+++ b/sys/dev/sound/pci/emu10kx-pcm.c
@@ -773,7 +773,7 @@ emupchan_setblocksize(kobj_t obj __unused, void *c_devinfo, uint32_t blocksize)
 		blocksize = ch->pcm->bufsz;
 	snd_mtxlock(sc->lock);
 	ch->blksz = blocksize;
-	emu_timer_set(sc->card, ch->timer, ch->blksz / sndbuf_getalign(ch->buffer));
+	emu_timer_set(sc->card, ch->timer, ch->blksz / ch->buffer->align);
 	snd_mtxunlock(sc->lock);
 	return (ch->blksz);
 }
@@ -795,7 +795,8 @@ emupchan_trigger(kobj_t obj __unused, void *c_devinfo, int go)
 		else
 			emu_vroute(sc->card, &(sc->rt_mono), ch->master);
 		emu_vwrite(sc->card, ch->master);
-		emu_timer_set(sc->card, ch->timer, ch->blksz / sndbuf_getalign(ch->buffer));
+		emu_timer_set(sc->card, ch->timer, ch->blksz /
+		    ch->buffer->align);
 		emu_timer_enable(sc->card, ch->timer, 1);
 	}
 	/* PCM interrupt handler will handle PCMTRIG_STOP event */
@@ -878,7 +879,7 @@ emurchan_init(kobj_t obj __unused, void *devinfo, struct snd_dbuf *b, struct pcm
 		return (NULL);
 	else {
 		ch->timer = emu_timer_create(sc->card);
-		emu_wrptr(sc->card, 0, ch->basereg, sndbuf_getbufaddr(ch->buffer));
+		emu_wrptr(sc->card, 0, ch->basereg, ch->buffer->buf_addr);
 		emu_wrptr(sc->card, 0, ch->sizereg, 0);	/* off */
 		return (ch);
 	}
@@ -930,7 +931,8 @@ emurchan_setblocksize(kobj_t obj __unused, void *c_devinfo, uint32_t blocksize)
 	 * (and use) timer interrupts. Otherwise channel will be marked dead.
 	 */
 	if (ch->blksz < (ch->pcm->bufsz / 2)) {
-		emu_timer_set(sc->card, ch->timer, ch->blksz / sndbuf_getalign(ch->buffer));
+		emu_timer_set(sc->card, ch->timer, ch->blksz /
+		    ch->buffer->align);
 		emu_timer_enable(sc->card, ch->timer, 1);
 	} else {
 		emu_timer_enable(sc->card, ch->timer, 0);
@@ -1059,7 +1061,7 @@ emufxrchan_init(kobj_t obj __unused, void *devinfo, struct snd_dbuf *b, struct p
 	if (sndbuf_alloc(ch->buffer, emu_gettag(sc->card), 0, sc->bufsz) != 0)
 		return (NULL);
 	else {
-		emu_wrptr(sc->card, 0, ch->basereg, sndbuf_getbufaddr(ch->buffer));
+		emu_wrptr(sc->card, 0, ch->basereg, ch->buffer->buf_addr);
 		emu_wrptr(sc->card, 0, ch->sizereg, 0);	/* off */
 		return (ch);
 	}
diff --git a/sys/dev/sound/pci/es137x.c b/sys/dev/sound/pci/es137x.c
index 3c1bea09b5d1..eb546de81f65 100644
--- a/sys/dev/sound/pci/es137x.c
+++ b/sys/dev/sound/pci/es137x.c
@@ -508,21 +508,21 @@ eschan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b,
 			es_wr(es, ES1370_REG_MEMPAGE,
 			    ES1370_REG_DAC1_FRAMEADR >> 8, 1);
 			es_wr(es, ES1370_REG_DAC1_FRAMEADR & 0xff,
-			    sndbuf_getbufaddr(ch->buffer), 4);
+			    ch->buffer->buf_addr, 4);
 			es_wr(es, ES1370_REG_DAC1_FRAMECNT & 0xff,
 			    (ch->bufsz >> 2) - 1, 4);
 		} else {
 			es_wr(es, ES1370_REG_MEMPAGE,
 			    ES1370_REG_DAC2_FRAMEADR >> 8, 1);
 			es_wr(es, ES1370_REG_DAC2_FRAMEADR & 0xff,
-			    sndbuf_getbufaddr(ch->buffer), 4);
+			    ch->buffer->buf_addr, 4);
 			es_wr(es, ES1370_REG_DAC2_FRAMECNT & 0xff,
 			    (ch->bufsz >> 2) - 1, 4);
 		}
 	} else {
 		es_wr(es, ES1370_REG_MEMPAGE, ES1370_REG_ADC_FRAMEADR >> 8, 1);
 		es_wr(es, ES1370_REG_ADC_FRAMEADR & 0xff,
-		    sndbuf_getbufaddr(ch->buffer), 4);
+		    ch->buffer->buf_addr, 4);
 		es_wr(es, ES1370_REG_ADC_FRAMECNT & 0xff,
 		    (ch->bufsz >> 2) - 1, 4);
 	}
@@ -637,8 +637,8 @@ eschan_setfragments(kobj_t obj, void *data, uint32_t blksz, uint32_t blkcnt)
 
 	blksz &= ES_BLK_ALIGN;
 
-	if (blksz > (sndbuf_getmaxsize(ch->buffer) / ES_DMA_SEGS_MIN))
-		blksz = sndbuf_getmaxsize(ch->buffer) / ES_DMA_SEGS_MIN;
+	if (blksz > (ch->buffer->maxsize / ES_DMA_SEGS_MIN))
+		blksz = ch->buffer->maxsize / ES_DMA_SEGS_MIN;
 	if (blksz < ES_BLK_MIN)
 		blksz = ES_BLK_MIN;
 	if (blkcnt > ES_DMA_SEGS_MAX)
@@ -646,7 +646,7 @@ eschan_setfragments(kobj_t obj, void *data, uint32_t blksz, uint32_t blkcnt)
 	if (blkcnt < ES_DMA_SEGS_MIN)
 		blkcnt = ES_DMA_SEGS_MIN;
 
-	while ((blksz * blkcnt) > sndbuf_getmaxsize(ch->buffer)) {
+	while ((blksz * blkcnt) > ch->buffer->maxsize) {
 		if ((blkcnt >> 1) >= ES_DMA_SEGS_MIN)
 			blkcnt >>= 1;
 		else if ((blksz >> 1) >= ES_BLK_MIN)
@@ -655,15 +655,15 @@ eschan_setfragments(kobj_t obj, void *data, uint32_t blksz, uint32_t blkcnt)
 			break;
 	}
 
-	if ((sndbuf_getblksz(ch->buffer) != blksz ||
-	    sndbuf_getblkcnt(ch->buffer) != blkcnt) &&
+	if ((ch->buffer->blksz != blksz ||
+	    ch->buffer->blkcnt != blkcnt) &&
 	    sndbuf_resize(ch->buffer, blkcnt, blksz) != 0)
 		device_printf(es->dev, "%s: failed blksz=%u blkcnt=%u\n",
 		    __func__, blksz, blkcnt);
 
-	ch->bufsz = sndbuf_getsize(ch->buffer);
-	ch->blksz = sndbuf_getblksz(ch->buffer);
-	ch->blkcnt = sndbuf_getblkcnt(ch->buffer);
+	ch->bufsz = ch->buffer->bufsize;
+	ch->blksz = ch->buffer->blksz;
+	ch->blkcnt = ch->buffer->blkcnt;
 
 	return (0);
 }
@@ -762,7 +762,7 @@ eschan_trigger(kobj_t obj, void *data, int go)
 		return 0;
 
 	ES_LOCK(es);
-	cnt = (ch->blksz / sndbuf_getalign(ch->buffer)) - 1;
+	cnt = (ch->blksz / ch->buffer->align) - 1;
 	if (ch->fmt & AFMT_16BIT)
 		b |= 0x02;
 	if (AFMT_CHANNEL(ch->fmt) > 1)
diff --git a/sys/dev/sound/pci/fm801.c b/sys/dev/sound/pci/fm801.c
index 3537c7807ded..39d12f8505d1 100644
--- a/sys/dev/sound/pci/fm801.c
+++ b/sys/dev/sound/pci/fm801.c
@@ -440,7 +440,7 @@ fm801ch_trigger(kobj_t obj, void *data, int go)
 {
 	struct fm801_chinfo *ch = data;
 	struct fm801_info *fm801 = ch->parent;
-	u_int32_t baseaddr = sndbuf_getbufaddr(ch->buffer);
+	u_int32_t baseaddr = ch->buffer->buf_addr;
 	u_int32_t k1;
 
 	DPRINT("fm801ch_trigger go %d , ", go);
diff --git a/sys/dev/sound/pci/hda/hdaa.c b/sys/dev/sound/pci/hda/hdaa.c
index 5dbb5c4f4453..14231107e17a 100644
--- a/sys/dev/sound/pci/hda/hdaa.c
+++ b/sys/dev/sound/pci/hda/hdaa.c
@@ -2081,10 +2081,10 @@ hdaa_channel_setfragments(kobj_t obj, void *data,
 {
 	struct hdaa_chan *ch = data;
 
-	blksz -= blksz % lcm(HDA_DMA_ALIGNMENT, sndbuf_getalign(ch->b));
+	blksz -= blksz % lcm(HDA_DMA_ALIGNMENT, ch->b->align);
 
-	if (blksz > (sndbuf_getmaxsize(ch->b) / HDA_BDL_MIN))
-		blksz = sndbuf_getmaxsize(ch->b) / HDA_BDL_MIN;
+	if (blksz > (ch->b->maxsize / HDA_BDL_MIN))
+		blksz = ch->b->maxsize / HDA_BDL_MIN;
 	if (blksz < HDA_BLK_MIN)
 		blksz = HDA_BLK_MIN;
 	if (blkcnt > HDA_BDL_MAX)
@@ -2092,7 +2092,7 @@ hdaa_channel_setfragments(kobj_t obj, void *data,
 	if (blkcnt < HDA_BDL_MIN)
 		blkcnt = HDA_BDL_MIN;
 
-	while ((blksz * blkcnt) > sndbuf_getmaxsize(ch->b)) {
+	while ((blksz * blkcnt) > ch->b->maxsize) {
 		if ((blkcnt >> 1) >= HDA_BDL_MIN)
 			blkcnt >>= 1;
 		else if ((blksz >> 1) >= HDA_BLK_MIN)
@@ -2101,14 +2101,14 @@ hdaa_channel_setfragments(kobj_t obj, void *data,
 			break;
 	}
 
-	if ((sndbuf_getblksz(ch->b) != blksz ||
-	    sndbuf_getblkcnt(ch->b) != blkcnt) &&
+	if ((ch->b->blksz != blksz ||
+	    ch->b->blkcnt != blkcnt) &&
 	    sndbuf_resize(ch->b, blkcnt, blksz) != 0)
 		device_printf(ch->devinfo->dev, "%s: failed blksz=%u blkcnt=%u\n",
 		    __func__, blksz, blkcnt);
 
-	ch->blksz = sndbuf_getblksz(ch->b);
-	ch->blkcnt = sndbuf_getblkcnt(ch->b);
+	ch->blksz = ch->b->blksz;
+	ch->blkcnt = ch->b->blkcnt;
 
 	return (0);
 }
@@ -2169,7 +2169,7 @@ hdaa_channel_start(struct hdaa_chan *ch)
 	    ch->dir == PCMDIR_PLAY ? 1 : 0, ch->sid);
 	HDAC_STREAM_START(device_get_parent(devinfo->dev), devinfo->dev,
 	    ch->dir == PCMDIR_PLAY ? 1 : 0, ch->sid,
-	    sndbuf_getbufaddr(ch->b), ch->blksz, ch->blkcnt);
+	    ch->b->buf_addr, ch->blksz, ch->blkcnt);
 	ch->flags |= HDAA_CHN_RUNNING;
 	return (0);
 }
diff --git a/sys/dev/sound/pci/hdsp-pcm.c b/sys/dev/sound/pci/hdsp-pcm.c
index 5ac571e64fde..bc11199f15e8 100644
--- a/sys/dev/sound/pci/hdsp-pcm.c
+++ b/sys/dev/sound/pci/hdsp-pcm.c
@@ -971,7 +971,7 @@ hdspchan_setblocksize(kobj_t obj, void *data, uint32_t blocksize)
 		hdsp_write_4(sc, HDSP_FREQ_REG, hdsp_freq_reg_value(sc->speed));
 end:
 
-	return (sndbuf_getblksz(ch->buffer));
+	return (ch->buffer->blksz);
 }
 
 static uint32_t hdsp_bkp_fmt[] = {
diff --git a/sys/dev/sound/pci/hdspe-pcm.c b/sys/dev/sound/pci/hdspe-pcm.c
index 09bbbe22dacf..1c0a92e45b7a 100644
--- a/sys/dev/sound/pci/hdspe-pcm.c
+++ b/sys/dev/sound/pci/hdspe-pcm.c
@@ -962,7 +962,7 @@ hdspechan_setblocksize(kobj_t obj, void *data, uint32_t blocksize)
 	    (sc->period * 4));
 end:
 
-	return (sndbuf_getblksz(ch->buffer));
+	return (ch->buffer->blksz);
 }
 
 static uint32_t hdspe_bkp_fmt[] = {
diff --git a/sys/dev/sound/pci/ich.c b/sys/dev/sound/pci/ich.c
index 500d6d95daac..53f4db3332a8 100644
--- a/sys/dev/sound/pci/ich.c
+++ b/sys/dev/sound/pci/ich.c
@@ -301,15 +301,15 @@ ich_filldtbl(struct sc_chinfo *ch)
 	uint32_t base;
 	int i;
 
-	base = sndbuf_getbufaddr(ch->buffer);
-	if ((ch->blksz * ch->blkcnt) > sndbuf_getmaxsize(ch->buffer))
-		ch->blksz = sndbuf_getmaxsize(ch->buffer) / ch->blkcnt;
-	if ((sndbuf_getblksz(ch->buffer) != ch->blksz ||
-	    sndbuf_getblkcnt(ch->buffer) != ch->blkcnt) &&
+	base = ch->buffer->buf_addr;
+	if ((ch->blksz * ch->blkcnt) > ch->buffer->maxsize)
+		ch->blksz = ch->buffer->maxsize / ch->blkcnt;
+	if ((ch->buffer->blksz != ch->blksz ||
+	    ch->buffer->blkcnt != ch->blkcnt) &&
 	    sndbuf_resize(ch->buffer, ch->blkcnt, ch->blksz) != 0)
 		device_printf(sc->dev, "%s: failed blksz=%u blkcnt=%u\n",
 		    __func__, ch->blksz, ch->blkcnt);
-	ch->blksz = sndbuf_getblksz(ch->buffer);
+	ch->blksz = ch->buffer->blksz;
 
 	for (i = 0; i < ICH_DTBL_LENGTH; i++) {
 		ch->dtbl[i].buffer = base + (ch->blksz * (i % ch->blkcnt));
@@ -491,7 +491,7 @@ ichchan_setblocksize(kobj_t obj, void *data, uint32_t blocksize)
 	);
 
 	if (sc->flags & ICH_HIGH_LATENCY)
-		blocksize = sndbuf_getmaxsize(ch->buffer) / ch->blkcnt;
+		blocksize = ch->buffer->maxsize / ch->blkcnt;
 
 	if (blocksize < ICH_MIN_BLKSZ)
 		blocksize = ICH_MIN_BLKSZ;
@@ -734,7 +734,7 @@ ich_calibrate(void *arg)
 	ch->blkcnt = 2;
 	sc->flags |= ICH_CALIBRATE_DONE;
 	ICH_UNLOCK(sc);
-	ichchan_setblocksize(0, ch, sndbuf_getmaxsize(ch->buffer) >> 1);
+	ichchan_setblocksize(0, ch, ch->buffer->maxsize >> 1);
 	ICH_LOCK(sc);
 	sc->flags &= ~ICH_CALIBRATE_DONE;
 
diff --git a/sys/dev/sound/pci/maestro3.c b/sys/dev/sound/pci/maestro3.c
index 2d102fcd6dbe..ee39f5f3c90d 100644
--- a/sys/dev/sound/pci/maestro3.c
+++ b/sys/dev/sound/pci/maestro3.c
@@ -444,10 +444,10 @@ m3_pchan_init(kobj_t kobj, void *devinfo, struct snd_dbuf *b, struct pcm_channel
 		return (NULL);
 	}
 	M3_LOCK(sc);
-	ch->bufsize = sndbuf_getsize(ch->buffer);
+	ch->bufsize = ch->buffer->bufsize;
 
 	/* host dma buffer pointers */
-	bus_addr = sndbuf_getbufaddr(ch->buffer);
+	bus_addr = ch->buffer->buf_addr;
 	if (bus_addr & 3) {
 		device_printf(sc->dev, "m3_pchan_init unaligned bus_addr\n");
 		bus_addr = (bus_addr + 4) & ~3;
@@ -595,7 +595,7 @@ m3_pchan_setblocksize(kobj_t kobj, void *chdata, u_int32_t blocksize)
 	M3_DEBUG(CHANGE, ("m3_pchan_setblocksize(dac=%d, blocksize=%d)\n",
 			  ch->dac_idx, blocksize));
 
-	return (sndbuf_getblksz(ch->buffer));
+	return (ch->buffer->blksz);
 }
 
 static int
@@ -709,7 +709,7 @@ m3_pchan_getptr_internal(struct sc_pchinfo *ch)
 	struct sc_info *sc = ch->parent;
 	u_int32_t hi, lo, bus_base, bus_crnt;
 
-	bus_base = sndbuf_getbufaddr(ch->buffer);
+	bus_base = ch->buffer->buf_addr;
 	hi = m3_rd_assp_data(sc, ch->dac_data + CDATA_HOST_SRC_CURRENTH);
         lo = m3_rd_assp_data(sc, ch->dac_data + CDATA_HOST_SRC_CURRENTL);
         bus_crnt = lo | (hi << 16);
@@ -823,10 +823,10 @@ m3_rchan_init(kobj_t kobj, void *devinfo, struct snd_dbuf *b, struct pcm_channel
 		return (NULL);
 	}
 	M3_LOCK(sc);
-	ch->bufsize = sndbuf_getsize(ch->buffer);
+	ch->bufsize = ch->buffer->bufsize;
 
 	/* host dma buffer pointers */
-	bus_addr = sndbuf_getbufaddr(ch->buffer);
+	bus_addr = ch->buffer->buf_addr;
 	if (bus_addr & 3) {
 		device_printf(sc->dev, "m3_rchan_init unaligned bus_addr\n");
 		bus_addr = (bus_addr + 4) & ~3;
@@ -968,7 +968,7 @@ m3_rchan_setblocksize(kobj_t kobj, void *chdata, u_int32_t blocksize)
 	M3_DEBUG(CHANGE, ("m3_rchan_setblocksize(adc=%d, blocksize=%d)\n",
 			  ch->adc_idx, blocksize));
 
-	return (sndbuf_getblksz(ch->buffer));
+	return (ch->buffer->blksz);
 }
 
 static int
@@ -1061,7 +1061,7 @@ m3_rchan_getptr_internal(struct sc_rchinfo *ch)
 	struct sc_info *sc = ch->parent;
 	u_int32_t hi, lo, bus_base, bus_crnt;
 
-	bus_base = sndbuf_getbufaddr(ch->buffer);
+	bus_base = ch->buffer->buf_addr;
 	hi = m3_rd_assp_data(sc, ch->adc_data + CDATA_HOST_SRC_CURRENTH);
         lo = m3_rd_assp_data(sc, ch->adc_data + CDATA_HOST_SRC_CURRENTL);
         bus_crnt = lo | (hi << 16);
@@ -1162,7 +1162,7 @@ m3_handle_channel_intr:
 			pch->ptr = m3_pchan_getptr_internal(pch);
 			delta = pch->bufsize + pch->ptr - pch->prevptr;
 			delta %= pch->bufsize;
-			if (delta < sndbuf_getblksz(pch->buffer))
+			if (delta < pch->buffer->blksz)
 				continue;
 			pch->prevptr = pch->ptr;
 			M3_UNLOCK(sc);
@@ -1176,7 +1176,7 @@ m3_handle_channel_intr:
 			rch->ptr = m3_rchan_getptr_internal(rch);
 			delta = rch->bufsize + rch->ptr - rch->prevptr;
 			delta %= rch->bufsize;
-			if (delta < sndbuf_getblksz(rch->buffer))
+			if (delta < rch->buffer->blksz)
 				continue;
 			rch->prevptr = rch->ptr;
 			M3_UNLOCK(sc);
diff --git a/sys/dev/sound/pci/neomagic.c b/sys/dev/sound/pci/neomagic.c
index d7824c990a52..1fee943d9364 100644
--- a/sys/dev/sound/pci/neomagic.c
+++ b/sys/dev/sound/pci/neomagic.c
@@ -362,7 +362,7 @@ nmchan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b, struct pcm_channel *c
 	sndbuf_setup(ch->buffer, (u_int8_t *)rman_get_virtual(sc->buf) + chnbuf, NM_BUFFSIZE);
 	if (bootverbose)
 		device_printf(sc->dev, "%s buf %p\n", (dir == PCMDIR_PLAY)?
-			      "play" : "rec", sndbuf_getbuf(ch->buffer));
+			      "play" : "rec", ch->buffer->buf);
 	ch->parent = sc;
 	ch->channel = c;
 	ch->dir = dir;
diff --git a/sys/dev/sound/pci/solo.c b/sys/dev/sound/pci/solo.c
index 90dd2e26ad41..8229b0cffdae 100644
--- a/sys/dev/sound/pci/solo.c
+++ b/sys/dev/sound/pci/solo.c
@@ -584,7 +584,8 @@ esschan_trigger(kobj_t obj, void *data, int go)
 	ess_lock(sc);
 	switch (go) {
 	case PCMTRIG_START:
-		ess_dmasetup(sc, ch->hwch, sndbuf_getbufaddr(ch->buffer), sndbuf_getsize(ch->buffer), ch->dir);
+		ess_dmasetup(sc, ch->hwch, ch->buffer->buf_addr,
+		    ch->buffer->bufsize, ch->dir);
 		ess_dmatrigger(sc, ch->hwch, 1);
 		ess_start(ch);
 		break;
diff --git a/sys/dev/sound/pci/t4dwave.c b/sys/dev/sound/pci/t4dwave.c
index 07b9e1004573..874d1c7a2e2a 100644
--- a/sys/dev/sound/pci/t4dwave.c
+++ b/sys/dev/sound/pci/t4dwave.c
@@ -555,9 +555,9 @@ trpchan_trigger(kobj_t obj, void *data, int go)
 		ch->fms = 0;
 		ch->ec = 0;
 		ch->alpha = 0;
-		ch->lba = sndbuf_getbufaddr(ch->buffer);
+		ch->lba = ch->buffer->buf_addr;
 		ch->cso = 0;
-		ch->eso = (sndbuf_getsize(ch->buffer) / sndbuf_getalign(ch->buffer)) - 1;
+		ch->eso = (ch->buffer->bufsize / ch->buffer->align) - 1;
 		ch->rvol = ch->cvol = 0x7f;
 		ch->gvsel = 0;
 		ch->pan = 0;
@@ -581,7 +581,7 @@ trpchan_getptr(kobj_t obj, void *data)
 	struct tr_chinfo *ch = data;
 
 	tr_rdch(ch);
-	return ch->cso * sndbuf_getalign(ch->buffer);
+	return ch->cso * ch->buffer->align;
 }
 
 static struct pcmchan_caps *
@@ -680,7 +680,7 @@ trrchan_trigger(kobj_t obj, void *data, int go)
 		i = tr_rd(tr, TR_REG_DMAR11, 1) & 0x03;
 		tr_wr(tr, TR_REG_DMAR11, i | 0x54, 1);
 		/* set up base address */
-	   	tr_wr(tr, TR_REG_DMAR0, sndbuf_getbufaddr(ch->buffer), 4);
+		tr_wr(tr, TR_REG_DMAR0, ch->buffer->buf_addr, 4);
 		/* set up buffer size */
 		i = tr_rd(tr, TR_REG_DMAR4, 4) & ~0x00ffffff;
 		tr_wr(tr, TR_REG_DMAR4, i | (sndbuf_runsz(ch->buffer) - 1), 4);
@@ -703,7 +703,7 @@ trrchan_getptr(kobj_t obj, void *data)
 	struct tr_info *tr = ch->parent;
 
 	/* return current byte offset of channel */
-	return tr_rd(tr, TR_REG_DMAR0, 4) - sndbuf_getbufaddr(ch->buffer);
+	return tr_rd(tr, TR_REG_DMAR0, 4) - ch->buffer->buf_addr;
 }
 
 static struct pcmchan_caps *
diff --git a/sys/dev/sound/pci/via8233.c b/sys/dev/sound/pci/via8233.c
index 243353805b94..47caa7ea4459 100644
--- a/sys/dev/sound/pci/via8233.c
+++ b/sys/dev/sound/pci/via8233.c
@@ -385,7 +385,7 @@ via_buildsgdt(struct via_chinfo *ch)
 	uint32_t phys_addr, flag;
 	int i;
 
-	phys_addr = sndbuf_getbufaddr(ch->buffer);
+	phys_addr = ch->buffer->buf_addr;
 
 	for (i = 0; i < ch->blkcnt; i++) {
 		flag = (i == ch->blkcnt - 1) ? VIA_DMAOP_EOL : VIA_DMAOP_FLAG;
@@ -568,8 +568,8 @@ via8233chan_setfragments(kobj_t obj, void *data,
 
 	blksz &= VIA_BLK_ALIGN;
 
-	if (blksz > (sndbuf_getmaxsize(ch->buffer) / VIA_SEGS_MIN))
-		blksz = sndbuf_getmaxsize(ch->buffer) / VIA_SEGS_MIN;
+	if (blksz > (ch->buffer->maxsize / VIA_SEGS_MIN))
+		blksz = ch->buffer->maxsize / VIA_SEGS_MIN;
 	if (blksz < VIA_BLK_MIN)
 		blksz = VIA_BLK_MIN;
 	if (blkcnt > VIA_SEGS_MAX)
@@ -577,7 +577,7 @@ via8233chan_setfragments(kobj_t obj, void *data,
 	if (blkcnt < VIA_SEGS_MIN)
*** 1197 LINES SKIPPED ***