aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/sound/pci
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/sound/pci')
-rw-r--r--sys/dev/sound/pci/als4000.c62
-rw-r--r--sys/dev/sound/pci/atiixp.c43
-rw-r--r--sys/dev/sound/pci/cmi.c62
-rw-r--r--sys/dev/sound/pci/cs4281.c10
-rw-r--r--sys/dev/sound/pci/csapcm.c8
-rw-r--r--sys/dev/sound/pci/emu10k1.c65
-rw-r--r--sys/dev/sound/pci/emu10kx-pcm.c59
-rw-r--r--sys/dev/sound/pci/envy24.c68
-rw-r--r--sys/dev/sound/pci/envy24ht.c69
-rw-r--r--sys/dev/sound/pci/es137x.c42
-rw-r--r--sys/dev/sound/pci/fm801.c2
-rw-r--r--sys/dev/sound/pci/hda/hdaa.c77
-rw-r--r--sys/dev/sound/pci/hda/hdaa_patches.c9
-rw-r--r--sys/dev/sound/pci/hda/hdac.c27
-rw-r--r--sys/dev/sound/pci/hda/hdac.h4
-rw-r--r--sys/dev/sound/pci/hda/hdac_private.h2
-rw-r--r--sys/dev/sound/pci/hda/hdacc.c6
-rw-r--r--sys/dev/sound/pci/hdsp-pcm.c30
-rw-r--r--sys/dev/sound/pci/hdsp.c35
-rw-r--r--sys/dev/sound/pci/hdsp.h2
-rw-r--r--sys/dev/sound/pci/hdspe-pcm.c30
-rw-r--r--sys/dev/sound/pci/hdspe.c35
-rw-r--r--sys/dev/sound/pci/hdspe.h2
-rw-r--r--sys/dev/sound/pci/ich.c32
-rw-r--r--sys/dev/sound/pci/maestro3.c41
-rw-r--r--sys/dev/sound/pci/neomagic.c2
-rw-r--r--sys/dev/sound/pci/solo.c21
-rw-r--r--sys/dev/sound/pci/spicds.c34
-rw-r--r--sys/dev/sound/pci/t4dwave.c39
-rw-r--r--sys/dev/sound/pci/via8233.c127
-rw-r--r--sys/dev/sound/pci/via82c686.c42
-rw-r--r--sys/dev/sound/pci/vibes.c14
32 files changed, 564 insertions, 537 deletions
diff --git a/sys/dev/sound/pci/als4000.c b/sys/dev/sound/pci/als4000.c
index 9d86713b379e..aea7cc6d3a64 100644
--- a/sys/dev/sound/pci/als4000.c
+++ b/sys/dev/sound/pci/als4000.c
@@ -79,7 +79,7 @@ struct sc_info {
struct resource *reg, *irq;
int regid, irqid;
void *ih;
- struct mtx *lock;
+ struct mtx lock;
unsigned int bufsz;
struct sc_chinfo pch, rch;
@@ -208,7 +208,7 @@ alschan_init(kobj_t obj, void *devinfo,
struct sc_info *sc = devinfo;
struct sc_chinfo *ch;
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
if (dir == PCMDIR_PLAY) {
ch = &sc->pch;
ch->gcr_fifo_status = ALS_GCR_FIFO0_STATUS;
@@ -221,9 +221,9 @@ alschan_init(kobj_t obj, void *devinfo,
ch->channel = c;
ch->bps = 1;
ch->format = SND_FORMAT(AFMT_U8, 1, 0);
- ch->speed = DSP_DEFAULT_SPEED;
+ ch->speed = 8000;
ch->buffer = b;
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
if (sndbuf_alloc(ch->buffer, sc->parent_dmat, 0, sc->bufsz) != 0)
return NULL;
@@ -278,10 +278,10 @@ alschan_getptr(kobj_t obj, void *data)
struct sc_info *sc = ch->parent;
int32_t pos, sz;
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
pos = als_gcr_rd(ch->parent, ch->gcr_fifo_status) & 0xffff;
- snd_mtxunlock(sc->lock);
- sz = sndbuf_getsize(ch->buffer);
+ mtx_unlock(&sc->lock);
+ 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;
@@ -397,7 +397,7 @@ alspchan_trigger(kobj_t obj, void *data, int go)
if (!PCMTRIG_COMMON(go))
return 0;
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
switch(go) {
case PCMTRIG_START:
als_playback_start(ch);
@@ -409,7 +409,7 @@ alspchan_trigger(kobj_t obj, void *data, int go)
default:
break;
}
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return 0;
}
@@ -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;
@@ -493,7 +493,7 @@ alsrchan_trigger(kobj_t obj, void *data, int go)
struct sc_chinfo *ch = data;
struct sc_info *sc = ch->parent;
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
switch(go) {
case PCMTRIG_START:
als_capture_start(ch);
@@ -503,7 +503,7 @@ alsrchan_trigger(kobj_t obj, void *data, int go)
als_capture_stop(ch);
break;
}
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return 0;
}
@@ -637,19 +637,19 @@ als_intr(void *p)
struct sc_info *sc = (struct sc_info *)p;
u_int8_t intr, sb_status;
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
intr = als_intr_rd(sc);
if (intr & 0x80) {
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
chn_intr(sc->pch.channel);
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
}
if (intr & 0x40) {
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
chn_intr(sc->rch.channel);
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
}
/* ACK interrupt in PCI core */
@@ -667,7 +667,7 @@ als_intr(void *p)
if (sb_status & ALS_IRQ_CR1E)
als_ack_read(sc, ALS_CR1E_ACK_PORT);
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return;
}
@@ -749,10 +749,7 @@ als_resource_free(device_t dev, struct sc_info *sc)
bus_dma_tag_destroy(sc->parent_dmat);
sc->parent_dmat = 0;
}
- if (sc->lock) {
- snd_mtxfree(sc->lock);
- sc->lock = NULL;
- }
+ mtx_destroy(&sc->lock);
}
static int
@@ -808,7 +805,8 @@ als_pci_attach(device_t dev)
char status[SND_STATUSLEN];
sc = malloc(sizeof(*sc), M_DEVBUF, M_WAITOK | M_ZERO);
- sc->lock = snd_mtxcreate(device_get_nameunit(dev), "snd_als4000 softc");
+ mtx_init(&sc->lock, device_get_nameunit(dev), "snd_als4000 softc",
+ MTX_DEF);
sc->dev = dev;
pci_enable_busmaster(dev);
@@ -882,11 +880,11 @@ als_pci_suspend(device_t dev)
{
struct sc_info *sc = pcm_getdevinfo(dev);
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
sc->pch.dma_was_active = als_playback_stop(&sc->pch);
sc->rch.dma_was_active = als_capture_stop(&sc->rch);
als_uninit(sc);
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return 0;
}
@@ -895,16 +893,16 @@ als_pci_resume(device_t dev)
{
struct sc_info *sc = pcm_getdevinfo(dev);
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
if (als_init(sc) != 0) {
device_printf(dev, "unable to reinitialize the card\n");
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return ENXIO;
}
if (mixer_reinit(dev) != 0) {
device_printf(dev, "unable to reinitialize the mixer\n");
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return ENXIO;
}
@@ -915,7 +913,7 @@ als_pci_resume(device_t dev)
if (sc->rch.dma_was_active) {
als_capture_start(&sc->rch);
}
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return 0;
}
diff --git a/sys/dev/sound/pci/atiixp.c b/sys/dev/sound/pci/atiixp.c
index 90e5742e6523..12906ecc6253 100644
--- a/sys/dev/sound/pci/atiixp.c
+++ b/sys/dev/sound/pci/atiixp.c
@@ -129,7 +129,7 @@ struct atiixp_info {
uint32_t blkcnt;
int registered_channels;
- struct mtx *lock;
+ struct mtx lock;
struct callout poll_timer;
int poll_ticks, polling;
};
@@ -139,9 +139,9 @@ struct atiixp_info {
#define atiixp_wr(_sc, _reg, _val) \
bus_space_write_4((_sc)->st, (_sc)->sh, _reg, _val)
-#define atiixp_lock(_sc) snd_mtxlock((_sc)->lock)
-#define atiixp_unlock(_sc) snd_mtxunlock((_sc)->lock)
-#define atiixp_assert(_sc) snd_mtxassert((_sc)->lock)
+#define atiixp_lock(_sc) mtx_lock(&(_sc)->lock)
+#define atiixp_unlock(_sc) mtx_unlock(&(_sc)->lock)
+#define atiixp_assert(_sc) mtx_assert(&(_sc)->lock, MA_OWNED)
static uint32_t atiixp_fmt_32bit[] = {
SND_FORMAT(AFMT_S16_LE, 2, 0),
@@ -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;
@@ -1020,7 +1019,7 @@ atiixp_chip_post_init(void *arg)
if (sc->codec_not_ready_bits == 0) {
/* wait for the interrupts to happen */
do {
- msleep(sc, sc->lock, PWAIT, "ixpslp", max(hz / 10, 1));
+ msleep(sc, &sc->lock, PWAIT, "ixpslp", max(hz / 10, 1));
if (sc->codec_not_ready_bits != 0)
break;
} while (--timeout);
@@ -1158,10 +1157,7 @@ atiixp_release_resource(struct atiixp_info *sc)
bus_dma_tag_destroy(sc->sgd_dmat);
sc->sgd_dmat = NULL;
}
- if (sc->lock) {
- snd_mtxfree(sc->lock);
- sc->lock = NULL;
- }
+ mtx_destroy(&sc->lock);
free(sc, M_DEVBUF);
}
@@ -1191,7 +1187,8 @@ atiixp_pci_attach(device_t dev)
int i;
sc = malloc(sizeof(*sc), M_DEVBUF, M_WAITOK | M_ZERO);
- sc->lock = snd_mtxcreate(device_get_nameunit(dev), "snd_atiixp softc");
+ mtx_init(&sc->lock, device_get_nameunit(dev), "snd_atiixp softc",
+ MTX_DEF);
sc->dev = dev;
callout_init(&sc->poll_timer, 1);
diff --git a/sys/dev/sound/pci/cmi.c b/sys/dev/sound/pci/cmi.c
index 22f1e76a4d1f..99925d236c08 100644
--- a/sys/dev/sound/pci/cmi.c
+++ b/sys/dev/sound/pci/cmi.c
@@ -116,7 +116,7 @@ struct sc_info {
struct resource *reg, *irq;
int regid, irqid;
void *ih;
- struct mtx *lock;
+ struct mtx lock;
int spdif_enabled;
unsigned int bufsz;
@@ -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);
@@ -352,7 +352,7 @@ cmichan_init(kobj_t obj, void *devinfo,
ch->channel = c;
ch->bps = 1;
ch->fmt = SND_FORMAT(AFMT_U8, 1, 0);
- ch->spd = DSP_DEFAULT_SPEED;
+ ch->spd = 8000;
ch->buffer = b;
ch->dma_active = 0;
if (sndbuf_alloc(ch->buffer, sc->parent_dmat, 0, sc->bufsz) != 0) {
@@ -361,13 +361,13 @@ cmichan_init(kobj_t obj, void *devinfo,
}
ch->dir = dir;
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
if (ch->dir == PCMDIR_PLAY) {
cmi_dma_prog(sc, ch, CMPCI_REG_DMA0_BASE);
} else {
cmi_dma_prog(sc, ch, CMPCI_REG_DMA1_BASE);
}
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return ch;
}
@@ -394,7 +394,7 @@ cmichan_setformat(kobj_t obj, void *data, u_int32_t format)
f |= CMPCI_REG_FORMAT_MONO;
}
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
if (ch->dir == PCMDIR_PLAY) {
cmi_partial_wr4(ch->parent,
CMPCI_REG_CHANNEL_FORMAT,
@@ -408,7 +408,7 @@ cmichan_setformat(kobj_t obj, void *data, u_int32_t format)
CMPCI_REG_CH1_FORMAT_MASK,
f);
}
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
ch->fmt = format;
return 0;
@@ -422,7 +422,7 @@ cmichan_setspeed(kobj_t obj, void *data, u_int32_t speed)
u_int32_t r, rsp __unused;
r = cmpci_rate_to_regvalue(speed);
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
if (ch->dir == PCMDIR_PLAY) {
if (speed < 44100) {
/* disable if req before rate change */
@@ -450,7 +450,7 @@ cmichan_setspeed(kobj_t obj, void *data, u_int32_t speed)
rsp >>= CMPCI_REG_ADC_FS_SHIFT;
rsp &= CMPCI_REG_ADC_FS_MASK;
}
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
ch->spd = cmpci_regvalue_to_rate(r);
DEB(printf("cmichan_setspeed (%s) %d -> %d (%d)\n",
@@ -484,7 +484,7 @@ cmichan_trigger(kobj_t obj, void *data, int go)
if (!PCMTRIG_COMMON(go))
return 0;
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
if (ch->dir == PCMDIR_PLAY) {
switch(go) {
case PCMTRIG_START:
@@ -506,7 +506,7 @@ cmichan_trigger(kobj_t obj, void *data, int go)
break;
}
}
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return 0;
}
@@ -517,15 +517,15 @@ cmichan_getptr(kobj_t obj, void *data)
struct sc_info *sc = ch->parent;
u_int32_t physptr, bufptr, sz;
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
if (ch->dir == PCMDIR_PLAY) {
physptr = cmi_rd(sc, CMPCI_REG_DMA0_BASE, 4);
} else {
physptr = cmi_rd(sc, CMPCI_REG_DMA1_BASE, 4);
}
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
- sz = sndbuf_getsize(ch->buffer);
+ sz = ch->buffer->bufsize;
bufptr = (physptr - ch->phys_buf + sz - ch->bps) % sz;
return bufptr;
@@ -538,7 +538,7 @@ cmi_intr(void *data)
u_int32_t intrstat;
u_int32_t toclear;
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
intrstat = cmi_rd(sc, CMPCI_REG_INTR_STATUS, 4);
if ((intrstat & CMPCI_REG_ANY_INTR) != 0) {
toclear = 0;
@@ -554,7 +554,7 @@ cmi_intr(void *data)
if (toclear) {
cmi_clr4(sc, CMPCI_REG_INTR_CTRL, toclear);
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
/* Signal interrupts to channel */
if (intrstat & CMPCI_REG_CH0_INTR) {
@@ -565,14 +565,14 @@ cmi_intr(void *data)
chn_intr(sc->rch.channel);
}
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
cmi_set4(sc, CMPCI_REG_INTR_CTRL, toclear);
}
}
if(sc->mpu_intr) {
(sc->mpu_intr)(sc->mpu);
}
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return;
}
@@ -799,10 +799,10 @@ cmi_muninit(struct mpu401 *arg, void *cookie)
{
struct sc_info *sc = cookie;
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
sc->mpu_intr = NULL;
sc->mpu = NULL;
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return 0;
}
@@ -933,7 +933,8 @@ cmi_attach(device_t dev)
char status[SND_STATUSLEN];
sc = malloc(sizeof(*sc), M_DEVBUF, M_WAITOK | M_ZERO);
- sc->lock = snd_mtxcreate(device_get_nameunit(dev), "snd_cmi softc");
+ mtx_init(&sc->lock, device_get_nameunit(dev), "snd_cmi softc",
+ MTX_DEF);
pci_enable_busmaster(dev);
sc->dev = dev;
@@ -1007,8 +1008,7 @@ cmi_attach(device_t dev)
bus_release_resource(dev, SYS_RES_IRQ, sc->irqid, sc->irq);
if (sc->reg)
bus_release_resource(dev, SYS_RES_IOPORT, sc->regid, sc->reg);
- if (sc->lock)
- snd_mtxfree(sc->lock);
+ mtx_destroy(&sc->lock);
if (sc)
free(sc, M_DEVBUF);
@@ -1037,7 +1037,7 @@ cmi_detach(device_t dev)
if (sc->mpu_reg)
bus_release_resource(dev, SYS_RES_IOPORT, sc->mpu_regid, sc->mpu_reg);
- snd_mtxfree(sc->lock);
+ mtx_destroy(&sc->lock);
free(sc, M_DEVBUF);
return 0;
@@ -1048,11 +1048,11 @@ cmi_suspend(device_t dev)
{
struct sc_info *sc = pcm_getdevinfo(dev);
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
sc->pch.dma_was_active = cmi_ch0_stop(sc, &sc->pch);
sc->rch.dma_was_active = cmi_ch1_stop(sc, &sc->rch);
cmi_power(sc, 3);
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return 0;
}
@@ -1061,17 +1061,17 @@ cmi_resume(device_t dev)
{
struct sc_info *sc = pcm_getdevinfo(dev);
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
cmi_power(sc, 0);
if (cmi_init(sc) != 0) {
device_printf(dev, "unable to reinitialize the card\n");
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return ENXIO;
}
if (mixer_reinit(dev) == -1) {
device_printf(dev, "unable to reinitialize the mixer\n");
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return ENXIO;
}
@@ -1086,7 +1086,7 @@ cmi_resume(device_t dev)
cmichan_setformat(NULL, &sc->rch, sc->rch.fmt);
cmi_ch1_start(sc, &sc->rch);
}
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return 0;
}
diff --git a/sys/dev/sound/pci/cs4281.c b/sys/dev/sound/pci/cs4281.c
index 7a25f7f4c08d..5b0b229a021b 100644
--- a/sys/dev/sound/pci/cs4281.c
+++ b/sys/dev/sound/pci/cs4281.c
@@ -326,9 +326,9 @@ cs4281chan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b, struct pcm_channe
ch->channel = c;
ch->fmt = SND_FORMAT(AFMT_U8, 1, 0);
- ch->spd = DSP_DEFAULT_SPEED;
+ ch->spd = 8000;
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..da2ddc99f5a1 100644
--- a/sys/dev/sound/pci/emu10k1.c
+++ b/sys/dev/sound/pci/emu10k1.c
@@ -218,7 +218,7 @@ struct sc_info {
struct resource *reg, *irq;
void *ih;
- struct mtx *lock;
+ struct mtx lock;
unsigned int bufsz;
int timer, timerinterval;
@@ -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;
@@ -820,10 +820,10 @@ emupchan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b,
ch->blksz = sc->bufsz / 2;
ch->fmt = SND_FORMAT(AFMT_U8, 1, 0);
ch->spd = 8000;
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
ch->master = emu_valloc(sc);
ch->slave = emu_valloc(sc);
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
r = (emu_vinit(sc, ch->master, ch->slave, sc->bufsz, ch->buffer))
? NULL : ch;
@@ -837,9 +837,9 @@ emupchan_free(kobj_t obj, void *data)
struct sc_info *sc = ch->parent;
int r;
- snd_mtxlock(sc->lock);
- r = emu_memfree(sc, sndbuf_getbuf(ch->buffer));
- snd_mtxunlock(sc->lock);
+ mtx_lock(&sc->lock);
+ r = emu_memfree(sc, ch->buffer->buf);
+ mtx_unlock(&sc->lock);
return r;
}
@@ -869,9 +869,9 @@ emupchan_setblocksize(kobj_t obj, void *data, u_int32_t blocksize)
struct sc_info *sc = ch->parent;
ch->blksz = blocksize;
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
emu_settimer(sc);
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return blocksize;
}
@@ -884,7 +884,7 @@ emupchan_trigger(kobj_t obj, void *data, int go)
if (!PCMTRIG_COMMON(go))
return 0;
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
if (go == PCMTRIG_START) {
emu_vsetup(ch);
emu_vwrite(sc, ch->master);
@@ -901,7 +901,7 @@ emupchan_trigger(kobj_t obj, void *data, int go)
}
ch->run = (go == PCMTRIG_START) ? 1 : 0;
emu_vtrigger(sc, ch->master, ch->run);
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return 0;
}
@@ -912,9 +912,9 @@ emupchan_getptr(kobj_t obj, void *data)
struct sc_info *sc = ch->parent;
int r;
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
r = emu_vpos(sc, ch->master);
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return r;
}
@@ -984,10 +984,10 @@ emurchan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b,
if (sndbuf_alloc(ch->buffer, sc->parent_dmat, 0, sc->bufsz) != 0)
return NULL;
else {
- snd_mtxlock(sc->lock);
- emu_wrptr(sc, 0, ch->basereg, sndbuf_getbufaddr(ch->buffer));
+ mtx_lock(&sc->lock);
+ emu_wrptr(sc, 0, ch->basereg, ch->buffer->buf_addr);
emu_wrptr(sc, 0, ch->sizereg, 0); /* off */
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return ch;
}
}
@@ -1027,9 +1027,9 @@ emurchan_setblocksize(kobj_t obj, void *data, u_int32_t blocksize)
struct sc_info *sc = ch->parent;
ch->blksz = blocksize;
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
emu_settimer(sc);
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return blocksize;
}
@@ -1069,7 +1069,7 @@ emurchan_trigger(kobj_t obj, void *data, int go)
sz = EMU_RECBS_BUFSIZE_4096;
}
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
switch(go) {
case PCMTRIG_START:
ch->run = 1;
@@ -1111,7 +1111,7 @@ emurchan_trigger(kobj_t obj, void *data, int go)
default:
break;
}
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return 0;
}
@@ -1123,9 +1123,9 @@ emurchan_getptr(kobj_t obj, void *data)
struct sc_info *sc = ch->parent;
int r;
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
r = emu_rdptr(sc, 0, ch->idxreg) & 0x0000ffff;
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return r;
}
@@ -1171,9 +1171,9 @@ emu_muninit(struct mpu401 *arg, void *cookie)
{
struct sc_info *sc = cookie;
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
sc->mpu_intr = NULL;
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return 0;
}
@@ -1216,7 +1216,7 @@ emu_intr(void *data)
struct sc_info *sc = data;
u_int32_t stat, ack, i, x;
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
while (1) {
stat = emu_rd(sc, EMU_IPR, 4);
if (stat == 0)
@@ -1262,7 +1262,7 @@ emu_intr(void *data)
emu_wr(sc, EMU_IPR, stat, 4);
if (ack) {
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
if (ack & EMU_IPR_INTERVALTIMER) {
x = 0;
@@ -1289,10 +1289,10 @@ emu_intr(void *data)
chn_intr(sc->rch[2].channel);
}
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
}
}
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
}
/* -------------------------------------------------------------------- */
@@ -2071,7 +2071,8 @@ emu_pci_attach(device_t dev)
char status[SND_STATUSLEN];
sc = malloc(sizeof(*sc), M_DEVBUF, M_WAITOK | M_ZERO);
- sc->lock = snd_mtxcreate(device_get_nameunit(dev), "snd_emu10k1 softc");
+ mtx_init(&sc->lock, device_get_nameunit(dev), "snd_emu10k1 softc",
+ MTX_DEF);
sc->dev = dev;
sc->type = pci_get_devid(dev);
sc->rev = pci_get_revid(dev);
@@ -2147,7 +2148,7 @@ bad:
if (sc->ih) bus_teardown_intr(dev, sc->irq, sc->ih);
if (sc->irq) bus_release_resource(dev, SYS_RES_IRQ, 0, sc->irq);
if (sc->parent_dmat) bus_dma_tag_destroy(sc->parent_dmat);
- if (sc->lock) snd_mtxfree(sc->lock);
+ mtx_destroy(&sc->lock);
free(sc, M_DEVBUF);
return ENXIO;
}
@@ -2170,7 +2171,7 @@ emu_pci_detach(device_t dev)
bus_teardown_intr(dev, sc->irq, sc->ih);
bus_release_resource(dev, SYS_RES_IRQ, 0, sc->irq);
bus_dma_tag_destroy(sc->parent_dmat);
- snd_mtxfree(sc->lock);
+ mtx_destroy(&sc->lock);
free(sc, M_DEVBUF);
return 0;
diff --git a/sys/dev/sound/pci/emu10kx-pcm.c b/sys/dev/sound/pci/emu10kx-pcm.c
index c280b64892f6..25b0006e4122 100644
--- a/sys/dev/sound/pci/emu10kx-pcm.c
+++ b/sys/dev/sound/pci/emu10kx-pcm.c
@@ -90,7 +90,7 @@ struct emu_pcm_rchinfo {
#endif
struct emu_pcm_info {
- struct mtx *lock;
+ struct mtx lock;
device_t dev; /* device information */
struct emu_sc_info *card;
struct emu_pcm_pchinfo pch[MAX_CHANNELS]; /* hardware channels */
@@ -771,10 +771,10 @@ emupchan_setblocksize(kobj_t obj __unused, void *c_devinfo, uint32_t blocksize)
if (blocksize > ch->pcm->bufsz)
blocksize = ch->pcm->bufsz;
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
ch->blksz = blocksize;
- emu_timer_set(sc->card, ch->timer, ch->blksz / sndbuf_getalign(ch->buffer));
- snd_mtxunlock(sc->lock);
+ emu_timer_set(sc->card, ch->timer, ch->blksz / ch->buffer->align);
+ mtx_unlock(&sc->lock);
return (ch->blksz);
}
@@ -787,7 +787,7 @@ emupchan_trigger(kobj_t obj __unused, void *c_devinfo, int go)
if (!PCMTRIG_COMMON(go))
return (0);
- snd_mtxlock(sc->lock); /* XXX can we trigger on parallel threads ? */
+ mtx_lock(&sc->lock); /* XXX can we trigger on parallel threads ? */
if (go == PCMTRIG_START) {
emu_vsetup(ch->master, ch->fmt, ch->spd);
if (AFMT_CHANNEL(ch->fmt) > 1)
@@ -795,13 +795,14 @@ 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 */
ch->run = (go == PCMTRIG_START) ? 1 : 0;
emu_vtrigger(sc->card, ch->master, ch->run);
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return (0);
}
@@ -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);
@@ -968,7 +970,7 @@ emurchan_trigger(kobj_t obj __unused, void *c_devinfo, int go)
sz = EMU_RECBS_BUFSIZE_4096;
}
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
switch (go) {
case PCMTRIG_START:
ch->run = 1;
@@ -997,7 +999,7 @@ emurchan_trigger(kobj_t obj __unused, void *c_devinfo, int go)
default:
break;
}
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return (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);
}
@@ -1128,7 +1130,7 @@ emufxrchan_trigger(kobj_t obj __unused, void *c_devinfo, int go)
sz = EMU_RECBS_BUFSIZE_4096;
}
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
switch (go) {
case PCMTRIG_START:
ch->run = 1;
@@ -1167,7 +1169,7 @@ emufxrchan_trigger(kobj_t obj __unused, void *c_devinfo, int go)
default:
break;
}
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return (0);
}
@@ -1232,24 +1234,24 @@ emu_pcm_intr(void *pcm, uint32_t stat)
ack = 0;
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
if (stat & EMU_IPR_INTERVALTIMER) {
ack |= EMU_IPR_INTERVALTIMER;
for (i = 0; i < MAX_CHANNELS; i++)
if (sc->pch[i].channel) {
if (sc->pch[i].run == 1) {
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
chn_intr(sc->pch[i].channel);
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
} else
emu_timer_enable(sc->card, sc->pch[i].timer, 0);
}
/* ADC may install timer to get low-latency interrupts */
if ((sc->rch_adc.channel) && (sc->rch_adc.run)) {
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
chn_intr(sc->rch_adc.channel);
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
}
/*
* EFX does not use timer, because it will fill
@@ -1260,21 +1262,21 @@ emu_pcm_intr(void *pcm, uint32_t stat)
if (stat & (EMU_IPR_ADCBUFFULL | EMU_IPR_ADCBUFHALFFULL)) {
ack |= stat & (EMU_IPR_ADCBUFFULL | EMU_IPR_ADCBUFHALFFULL);
if (sc->rch_adc.channel) {
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
chn_intr(sc->rch_adc.channel);
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
}
}
if (stat & (EMU_IPR_EFXBUFFULL | EMU_IPR_EFXBUFHALFFULL)) {
ack |= stat & (EMU_IPR_EFXBUFFULL | EMU_IPR_EFXBUFHALFFULL);
if (sc->rch_efx.channel) {
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
chn_intr(sc->rch_efx.channel);
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
}
}
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return (ack);
}
@@ -1347,7 +1349,8 @@ emu_pcm_attach(device_t dev)
return (ENXIO);
}
- sc->lock = snd_mtxcreate(device_get_nameunit(dev), "snd_emu10kx pcm softc");
+ mtx_init(&sc->lock, device_get_nameunit(dev), "snd_emu10kx pcm softc",
+ MTX_DEF);
sc->dev = dev;
BUS_READ_IVAR(device_get_parent(dev), dev, EMU_VAR_ISEMU10K1, &ivar);
@@ -1481,8 +1484,7 @@ emu_pcm_attach(device_t dev)
bad:
if (sc->codec)
ac97_destroy(sc->codec);
- if (sc->lock)
- snd_mtxfree(sc->lock);
+ mtx_destroy(&sc->lock);
free(sc, M_DEVBUF);
return (ENXIO);
}
@@ -1501,8 +1503,7 @@ emu_pcm_detach(device_t dev)
emu_pcm_uninit(sc);
- if (sc->lock)
- snd_mtxfree(sc->lock);
+ mtx_destroy(&sc->lock);
free(sc, M_DEVBUF);
return (0);
diff --git a/sys/dev/sound/pci/envy24.c b/sys/dev/sound/pci/envy24.c
index 51842bfdb480..3adb22254b72 100644
--- a/sys/dev/sound/pci/envy24.c
+++ b/sys/dev/sound/pci/envy24.c
@@ -116,7 +116,7 @@ struct cfg_info {
/* device private data */
struct sc_info {
device_t dev;
- struct mtx *lock;
+ struct mtx lock;
/* Control/Status registor */
struct resource *cs;
@@ -1567,10 +1567,10 @@ envy24chan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b, struct pcm_channe
#if(0)
device_printf(sc->dev, "envy24chan_init(obj, devinfo, b, c, %d)\n", dir);
#endif
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
if ((sc->chnum > ENVY24_CHAN_PLAY_SPDIF && dir != PCMDIR_REC) ||
(sc->chnum < ENVY24_CHAN_REC_ADC1 && dir != PCMDIR_PLAY)) {
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return NULL;
}
num = sc->chnum;
@@ -1589,14 +1589,14 @@ envy24chan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b, struct pcm_channe
ch->dir = dir;
/* set channel map */
ch->num = envy24_chanmap[num];
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
sndbuf_setup(ch->buffer, ch->data, ch->size);
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
/* these 2 values are dummy */
ch->unit = 4;
ch->blk = 10240;
}
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return ch;
}
@@ -1610,12 +1610,12 @@ envy24chan_free(kobj_t obj, void *data)
#if(0)
device_printf(sc->dev, "envy24chan_free()\n");
#endif
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
if (ch->data != NULL) {
free(ch->data, M_ENVY24);
ch->data = NULL;
}
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return 0;
}
@@ -1632,21 +1632,21 @@ envy24chan_setformat(kobj_t obj, void *data, u_int32_t format)
#if(0)
device_printf(sc->dev, "envy24chan_setformat(obj, data, 0x%08x)\n", format);
#endif
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
/* check and get format related information */
if (ch->dir == PCMDIR_PLAY)
emltab = envy24_pemltab;
else
emltab = envy24_remltab;
if (emltab == NULL) {
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return -1;
}
for (i = 0; emltab[i].format != 0; i++)
if (emltab[i].format == format)
break;
if (emltab[i].format == 0) {
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return -1;
}
@@ -1670,7 +1670,7 @@ envy24chan_setformat(kobj_t obj, void *data, u_int32_t format)
bcnt = ch->size / bsize;
sndbuf_resize(ch->buffer, bcnt, bsize);
#endif
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
#if(0)
device_printf(sc->dev, "envy24chan_setformat(): return 0x%08x\n", 0);
@@ -1723,7 +1723,7 @@ envy24chan_setblocksize(kobj_t obj, void *data, u_int32_t blocksize)
device_printf(sc->dev, "envy24chan_setblocksize(obj, data, %d)\n", blocksize);
#endif
prev = 0x7fffffff;
- /* snd_mtxlock(sc->lock); */
+ /* mtx_lock(&sc->lock); */
for (size = ch->size / 2; size > 0; size /= 2) {
if (abs(size - blocksize) < abs(prev - blocksize))
prev = size;
@@ -1745,7 +1745,7 @@ envy24chan_setblocksize(kobj_t obj, void *data, u_int32_t blocksize)
bsize *= ch->unit;
bcnt = ch->size / bsize;
sndbuf_resize(ch->buffer, bcnt, bsize);
- /* snd_mtxunlock(sc->lock); */
+ /* mtx_unlock(&sc->lock); */
#if(0)
device_printf(sc->dev, "envy24chan_setblocksize(): return %d\n", prev);
@@ -1767,7 +1767,7 @@ envy24chan_trigger(kobj_t obj, void *data, int go)
device_printf(sc->dev, "envy24chan_trigger(obj, data, %d)\n", go);
#endif
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
if (ch->dir == PCMDIR_PLAY)
slot = 0;
else
@@ -1862,7 +1862,7 @@ envy24chan_trigger(kobj_t obj, void *data, int go)
break;
}
fail:
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return (error);
}
@@ -1876,10 +1876,10 @@ envy24chan_getptr(kobj_t obj, void *data)
#if(0)
device_printf(sc->dev, "envy24chan_getptr()\n");
#endif
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
ptr = envy24_gethwptr(sc, ch->dir);
rtn = ptr * ch->unit;
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
#if(0)
device_printf(sc->dev, "envy24chan_getptr(): return %d\n",
@@ -1898,7 +1898,7 @@ envy24chan_getcaps(kobj_t obj, void *data)
#if(0)
device_printf(sc->dev, "envy24chan_getcaps()\n");
#endif
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
if (ch->dir == PCMDIR_PLAY) {
if (sc->run[0] == 0)
rtn = &envy24_playcaps;
@@ -1911,7 +1911,7 @@ envy24chan_getcaps(kobj_t obj, void *data)
else
rtn = &sc->caps[1];
}
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return rtn;
}
@@ -1945,12 +1945,12 @@ envy24mixer_init(struct snd_mixer *m)
return -1;
/* set volume control rate */
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
envy24_wrmt(sc, ENVY24_MT_VOLRATE, 0x30, 1); /* 0x30 is default value */
mix_setdevs(m, ENVY24_MIX_MASK);
mix_setrecdevs(m, ENVY24_MIX_REC_MASK);
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return 0;
}
@@ -2003,7 +2003,7 @@ envy24mixer_set(struct snd_mixer *m, unsigned dev, unsigned left, unsigned right
dev, left, right);
#endif
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
if (dev == 0) {
for (i = 0; i < sc->dacn; i++) {
sc->cfg->codec->setvolume(sc->dac[i], PCMDIR_PLAY, left, right);
@@ -2020,7 +2020,7 @@ envy24mixer_set(struct snd_mixer *m, unsigned dev, unsigned left, unsigned right
if (hwch > ENVY24_CHAN_PLAY_SPDIF || sc->chan[ch].run)
envy24_setvolume(sc, hwch);
}
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return right << 8 | left;
}
@@ -2063,7 +2063,7 @@ envy24_intr(void *p)
#if(0)
device_printf(sc->dev, "envy24_intr()\n");
#endif
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
if (envy24_checkintr(sc, PCMDIR_PLAY)) {
#if(0)
device_printf(sc->dev, "envy24_intr(): play\n");
@@ -2085,9 +2085,9 @@ envy24_intr(void *p)
device_printf(sc->dev, "envy24_intr(): chan[%d].blk = %d\n", i, ch->blk);
#endif
if (ch->run && ch->blk <= feed) {
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
chn_intr(ch->channel);
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
}
}
sc->intr[0] = ptr;
@@ -2104,15 +2104,15 @@ envy24_intr(void *p)
for (i = ENVY24_CHAN_REC_ADC1; i <= ENVY24_CHAN_REC_SPDIF; i++) {
ch = &sc->chan[i];
if (ch->run && ch->blk <= feed) {
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
chn_intr(ch->channel);
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
}
}
sc->intr[1] = ptr;
envy24_updintr(sc, PCMDIR_REC);
}
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return;
}
@@ -2551,7 +2551,8 @@ envy24_pci_attach(device_t dev)
}
bzero(sc, sizeof(*sc));
- sc->lock = snd_mtxcreate(device_get_nameunit(dev), "snd_envy24 softc");
+ mtx_init(&sc->lock, device_get_nameunit(dev), "snd_envy24 softc",
+ MTX_DEF);
sc->dev = dev;
/* initialize PCI interface */
@@ -2627,8 +2628,7 @@ bad:
bus_release_resource(dev, SYS_RES_IOPORT, sc->dsid, sc->ds);
if (sc->mt)
bus_release_resource(dev, SYS_RES_IOPORT, sc->mtid, sc->mt);
- if (sc->lock)
- snd_mtxfree(sc->lock);
+ mtx_destroy(&sc->lock);
free(sc, M_ENVY24);
return err;
}
@@ -2665,7 +2665,7 @@ envy24_pci_detach(device_t dev)
bus_release_resource(dev, SYS_RES_IOPORT, sc->ddmaid, sc->ddma);
bus_release_resource(dev, SYS_RES_IOPORT, sc->dsid, sc->ds);
bus_release_resource(dev, SYS_RES_IOPORT, sc->mtid, sc->mt);
- snd_mtxfree(sc->lock);
+ mtx_destroy(&sc->lock);
free(sc, M_ENVY24);
return 0;
}
diff --git a/sys/dev/sound/pci/envy24ht.c b/sys/dev/sound/pci/envy24ht.c
index b8202a9fa7cd..2396a340cd84 100644
--- a/sys/dev/sound/pci/envy24ht.c
+++ b/sys/dev/sound/pci/envy24ht.c
@@ -125,7 +125,7 @@ struct cfg_info {
/* device private data */
struct sc_info {
device_t dev;
- struct mtx *lock;
+ struct mtx lock;
/* Control/Status registor */
struct resource *cs;
@@ -1476,11 +1476,11 @@ envy24htchan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b, struct pcm_chan
#if(0)
device_printf(sc->dev, "envy24htchan_init(obj, devinfo, b, c, %d)\n", dir);
#endif
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
#if 0
if ((sc->chnum > ENVY24HT_CHAN_PLAY_SPDIF && dir != PCMDIR_REC) ||
(sc->chnum < ENVY24HT_CHAN_REC_ADC1 && dir != PCMDIR_PLAY)) {
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return NULL;
}
#endif
@@ -1500,14 +1500,14 @@ envy24htchan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b, struct pcm_chan
ch->dir = dir;
/* set channel map */
ch->num = envy24ht_chanmap[num];
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
sndbuf_setup(ch->buffer, ch->data, ch->size);
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
/* these 2 values are dummy */
ch->unit = 4;
ch->blk = 10240;
}
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return ch;
}
@@ -1521,12 +1521,12 @@ envy24htchan_free(kobj_t obj, void *data)
#if(0)
device_printf(sc->dev, "envy24htchan_free()\n");
#endif
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
if (ch->data != NULL) {
free(ch->data, M_ENVY24HT);
ch->data = NULL;
}
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return 0;
}
@@ -1543,21 +1543,21 @@ envy24htchan_setformat(kobj_t obj, void *data, u_int32_t format)
#if(0)
device_printf(sc->dev, "envy24htchan_setformat(obj, data, 0x%08x)\n", format);
#endif
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
/* check and get format related information */
if (ch->dir == PCMDIR_PLAY)
emltab = envy24ht_pemltab;
else
emltab = envy24ht_remltab;
if (emltab == NULL) {
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return -1;
}
for (i = 0; emltab[i].format != 0; i++)
if (emltab[i].format == format)
break;
if (emltab[i].format == 0) {
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return -1;
}
@@ -1581,7 +1581,7 @@ envy24htchan_setformat(kobj_t obj, void *data, u_int32_t format)
bcnt = ch->size / bsize;
sndbuf_resize(ch->buffer, bcnt, bsize);
#endif
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
#if(0)
device_printf(sc->dev, "envy24htchan_setformat(): return 0x%08x\n", 0);
@@ -1634,7 +1634,7 @@ envy24htchan_setblocksize(kobj_t obj, void *data, u_int32_t blocksize)
device_printf(sc->dev, "envy24htchan_setblocksize(obj, data, %d)\n", blocksize);
#endif
prev = 0x7fffffff;
- /* snd_mtxlock(sc->lock); */
+ /* mtx_lock(&sc->lock); */
for (size = ch->size / 2; size > 0; size /= 2) {
if (abs(size - blocksize) < abs(prev - blocksize))
prev = size;
@@ -1656,7 +1656,7 @@ envy24htchan_setblocksize(kobj_t obj, void *data, u_int32_t blocksize)
bsize *= ch->unit;
bcnt = ch->size / bsize;
sndbuf_resize(ch->buffer, bcnt, bsize);
- /* snd_mtxunlock(sc->lock); */
+ /* mtx_unlock(&sc->lock); */
#if(0)
device_printf(sc->dev, "envy24htchan_setblocksize(): return %d\n", prev);
@@ -1678,7 +1678,7 @@ envy24htchan_trigger(kobj_t obj, void *data, int go)
device_printf(sc->dev, "envy24htchan_trigger(obj, data, %d)\n", go);
#endif
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
if (ch->dir == PCMDIR_PLAY)
slot = 0;
else
@@ -1771,7 +1771,7 @@ envy24htchan_trigger(kobj_t obj, void *data, int go)
break;
}
fail:
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return (error);
}
@@ -1785,10 +1785,10 @@ envy24htchan_getptr(kobj_t obj, void *data)
#if(0)
device_printf(sc->dev, "envy24htchan_getptr()\n");
#endif
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
ptr = envy24ht_gethwptr(sc, ch->dir);
rtn = ptr * ch->unit;
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
#if(0)
device_printf(sc->dev, "envy24htchan_getptr(): return %d\n",
@@ -1807,7 +1807,7 @@ envy24htchan_getcaps(kobj_t obj, void *data)
#if(0)
device_printf(sc->dev, "envy24htchan_getcaps()\n");
#endif
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
if (ch->dir == PCMDIR_PLAY) {
if (sc->run[0] == 0)
rtn = &envy24ht_playcaps;
@@ -1820,7 +1820,7 @@ envy24htchan_getcaps(kobj_t obj, void *data)
else
rtn = &sc->caps[1];
}
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return rtn;
}
@@ -1854,7 +1854,7 @@ envy24htmixer_init(struct snd_mixer *m)
return -1;
/* set volume control rate */
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
#if 0
envy24ht_wrmt(sc, ENVY24HT_MT_VOLRATE, 0x30, 1); /* 0x30 is default value */
#endif
@@ -1864,7 +1864,7 @@ envy24htmixer_init(struct snd_mixer *m)
mix_setdevs(m, ENVY24HT_MIX_MASK);
mix_setrecdevs(m, ENVY24HT_MIX_REC_MASK);
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return 0;
}
@@ -1917,7 +1917,7 @@ envy24htmixer_set(struct snd_mixer *m, unsigned dev, unsigned left, unsigned rig
dev, left, right);
#endif
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
if (dev == 0) {
for (i = 0; i < sc->dacn; i++) {
sc->cfg->codec->setvolume(sc->dac[i], PCMDIR_PLAY, left, right);
@@ -1934,7 +1934,7 @@ envy24htmixer_set(struct snd_mixer *m, unsigned dev, unsigned left, unsigned rig
if (hwch > ENVY24HT_CHAN_PLAY_SPDIF || sc->chan[ch].run)
envy24ht_setvolume(sc, hwch);
}
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return right << 8 | left;
}
@@ -1977,7 +1977,7 @@ envy24ht_intr(void *p)
#if(0)
device_printf(sc->dev, "envy24ht_intr()\n");
#endif
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
if (envy24ht_checkintr(sc, PCMDIR_PLAY)) {
#if(0)
device_printf(sc->dev, "envy24ht_intr(): play\n");
@@ -1999,9 +1999,9 @@ envy24ht_intr(void *p)
device_printf(sc->dev, "envy24ht_intr(): chan[%d].blk = %d\n", i, ch->blk);
#endif
if (ch->run && ch->blk <= feed) {
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
chn_intr(ch->channel);
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
}
}
sc->intr[0] = ptr;
@@ -2018,15 +2018,15 @@ envy24ht_intr(void *p)
for (i = ENVY24HT_CHAN_REC_ADC1; i <= ENVY24HT_CHAN_REC_SPDIF; i++) {
ch = &sc->chan[i];
if (ch->run && ch->blk <= feed) {
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
chn_intr(ch->channel);
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
}
}
sc->intr[1] = ptr;
envy24ht_updintr(sc, PCMDIR_REC);
}
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return;
}
@@ -2455,8 +2455,8 @@ envy24ht_pci_attach(device_t dev)
}
bzero(sc, sizeof(*sc));
- sc->lock = snd_mtxcreate(device_get_nameunit(dev),
- "snd_envy24ht softc");
+ mtx_init(&sc->lock, device_get_nameunit(dev), "snd_eny24ht softc",
+ MTX_DEF);
sc->dev = dev;
/* initialize PCI interface */
@@ -2524,8 +2524,7 @@ bad:
bus_release_resource(dev, SYS_RES_IOPORT, sc->csid, sc->cs);
if (sc->mt)
bus_release_resource(dev, SYS_RES_IOPORT, sc->mtid, sc->mt);
- if (sc->lock)
- snd_mtxfree(sc->lock);
+ mtx_destroy(&sc->lock);
free(sc, M_ENVY24HT);
return err;
}
@@ -2560,7 +2559,7 @@ envy24ht_pci_detach(device_t dev)
bus_release_resource(dev, SYS_RES_IRQ, sc->irqid, sc->irq);
bus_release_resource(dev, SYS_RES_IOPORT, sc->csid, sc->cs);
bus_release_resource(dev, SYS_RES_IOPORT, sc->mtid, sc->mt);
- snd_mtxfree(sc->lock);
+ mtx_destroy(&sc->lock);
free(sc, M_ENVY24HT);
return 0;
}
diff --git a/sys/dev/sound/pci/es137x.c b/sys/dev/sound/pci/es137x.c
index 3c1bea09b5d1..cc51005309b0 100644
--- a/sys/dev/sound/pci/es137x.c
+++ b/sys/dev/sound/pci/es137x.c
@@ -224,14 +224,14 @@ struct es_info {
uint32_t sctrl;
uint32_t escfg;
struct es_chinfo ch[ES_NCHANS];
- struct mtx *lock;
+ struct mtx lock;
struct callout poll_timer;
int poll_ticks, polling;
};
-#define ES_LOCK(sc) snd_mtxlock((sc)->lock)
-#define ES_UNLOCK(sc) snd_mtxunlock((sc)->lock)
-#define ES_LOCK_ASSERT(sc) snd_mtxassert((sc)->lock)
+#define ES_LOCK(sc) mtx_lock(&(sc)->lock)
+#define ES_UNLOCK(sc) mtx_unlock(&(sc)->lock)
+#define ES_LOCK_ASSERT(sc) mtx_assert(&(sc)->lock, MA_OWNED)
/* prototypes */
static void es_intr(void *);
@@ -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)
@@ -987,7 +987,7 @@ es1370_init(struct es_info *es)
es->escfg = ES_SET_FIXED_RATE(es->escfg, fixed_rate);
else {
es->escfg = ES_SET_FIXED_RATE(es->escfg, 0);
- fixed_rate = DSP_DEFAULT_SPEED;
+ fixed_rate = 8000;
}
if (single_pcm)
es->escfg = ES_SET_SINGLE_PCM_MIX(es->escfg, 1);
@@ -1712,7 +1712,8 @@ es_pci_attach(device_t dev)
uint32_t devid;
es = malloc(sizeof *es, M_DEVBUF, M_WAITOK | M_ZERO);
- es->lock = snd_mtxcreate(device_get_nameunit(dev), "snd_es137x softc");
+ mtx_init(&es->lock, device_get_nameunit(dev), "snd_es137x softc",
+ MTX_DEF);
es->dev = dev;
es->escfg = 0;
mapped = 0;
@@ -1888,8 +1889,7 @@ bad:
ac97_destroy(codec);
if (es->reg)
bus_release_resource(dev, es->regtype, es->regid, es->reg);
- if (es->lock)
- snd_mtxfree(es->lock);
+ mtx_destroy(&es->lock);
if (es)
free(es, M_DEVBUF);
return (ENXIO);
@@ -1919,7 +1919,7 @@ es_pci_detach(device_t dev)
bus_release_resource(dev, SYS_RES_IRQ, es->irqid, es->irq);
bus_release_resource(dev, es->regtype, es->regid, es->reg);
bus_dma_tag_destroy(es->parent_dmat);
- snd_mtxfree(es->lock);
+ mtx_destroy(&es->lock);
free(es, M_DEVBUF);
return (0);
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 1e486b01b168..7dec437de944 100644
--- a/sys/dev/sound/pci/hda/hdaa.c
+++ b/sys/dev/sound/pci/hda/hdaa.c
@@ -47,9 +47,9 @@
#include "mixer_if.h"
-#define hdaa_lock(devinfo) snd_mtxlock((devinfo)->lock)
-#define hdaa_unlock(devinfo) snd_mtxunlock((devinfo)->lock)
-#define hdaa_lockassert(devinfo) snd_mtxassert((devinfo)->lock)
+#define hdaa_lock(devinfo) mtx_lock((devinfo)->lock)
+#define hdaa_unlock(devinfo) mtx_unlock((devinfo)->lock)
+#define hdaa_lockassert(devinfo) mtx_assert((devinfo)->lock, MA_OWNED)
static const struct {
const char *key;
@@ -532,9 +532,11 @@ static void
hdaa_presence_handler(struct hdaa_widget *w)
{
struct hdaa_devinfo *devinfo = w->devinfo;
- struct hdaa_audio_as *as;
+ struct hdaa_audio_as *as, *asp;
+ char buf[32];
uint32_t res;
- int connected, old;
+ int connected, old, i;
+ bool active;
if (w->enable == 0 || w->type !=
HDA_PARAM_AUDIO_WIDGET_CAP_TYPE_PIN_COMPLEX)
@@ -552,13 +554,6 @@ hdaa_presence_handler(struct hdaa_widget *w)
if (connected == old)
return;
w->wclass.pin.connected = connected;
- HDA_BOOTVERBOSE(
- if (connected || old != 2) {
- device_printf(devinfo->dev,
- "Pin sense: nid=%d sense=0x%08x (%sconnected)\n",
- w->nid, res, !connected ? "dis" : "");
- }
- );
as = &devinfo->as[w->bindas];
if (as->hpredir >= 0 && as->pins[15] == w->nid)
@@ -567,6 +562,38 @@ hdaa_presence_handler(struct hdaa_widget *w)
hdaa_autorecsrc_handler(as, w);
if (old != 2)
hdaa_channels_handler(as);
+
+ if (connected || old != 2) {
+ HDA_BOOTVERBOSE(
+ device_printf(devinfo->dev,
+ "Pin sense: nid=%d sense=0x%08x (%sconnected)\n",
+ w->nid, res, !connected ? "dis" : "");
+ );
+ if (as->hpredir >= 0)
+ return;
+ for (i = 0, active = false; i < devinfo->num_devs; i++) {
+ if (device_get_unit(devinfo->devs[i].dev) == snd_unit) {
+ active = true;
+ break;
+ }
+ }
+ /* Proceed only if we are currently using this codec. */
+ if (!active)
+ return;
+ for (i = 0; i < devinfo->ascnt; i++) {
+ asp = &devinfo->as[i];
+ if (!asp->enable)
+ continue;
+ if ((connected && asp->index == as->index) ||
+ (!connected && asp->dir == as->dir)) {
+ snprintf(buf, sizeof(buf), "cdev=dsp%d",
+ device_get_unit(asp->pdevinfo->dev));
+ devctl_notify("SND", "CONN",
+ asp->dir == HDAA_CTL_IN ? "IN" : "OUT", buf);
+ break;
+ }
+ }
+ }
}
/*
@@ -2054,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)
@@ -2065,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)
@@ -2074,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);
}
@@ -2142,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);
}
@@ -6194,15 +6221,15 @@ hdaa_configure(device_t dev)
);
hdaa_patch_direct(devinfo);
HDA_BOOTHVERBOSE(
- device_printf(dev, "Pin sense init...\n");
- );
- hdaa_sense_init(devinfo);
- HDA_BOOTHVERBOSE(
device_printf(dev, "Creating PCM devices...\n");
);
hdaa_unlock(devinfo);
hdaa_create_pcms(devinfo);
hdaa_lock(devinfo);
+ HDA_BOOTHVERBOSE(
+ device_printf(dev, "Pin sense init...\n");
+ );
+ hdaa_sense_init(devinfo);
HDA_BOOTVERBOSE(
if (devinfo->quirks != 0) {
diff --git a/sys/dev/sound/pci/hda/hdaa_patches.c b/sys/dev/sound/pci/hda/hdaa_patches.c
index 8967cb49125c..d4267aae80f8 100644
--- a/sys/dev/sound/pci/hda/hdaa_patches.c
+++ b/sys/dev/sound/pci/hda/hdaa_patches.c
@@ -341,7 +341,8 @@ hdac_pin_patch(struct hdaa_widget *w)
} else if (id == HDA_CODEC_ALC257 &&
(subid == LENOVO_L5AMD_SUBVENDOR ||
subid == LENOVO_L5INTEL_SUBVENDOR ||
- subid == LENOVO_IDEAPAD3_SUBVENDOR)) {
+ subid == LENOVO_IDEAPAD3_SUBVENDOR ||
+ subid == LENOVO_V15_SUBVENDOR)) {
switch (nid) {
case 20:
patch_str = "as=1 seq=0";
@@ -362,8 +363,10 @@ hdac_pin_patch(struct hdaa_widget *w)
patch_str = "as=3 seq=15 color=Black loc=Left";
break;
}
- } else if (id == HDA_CODEC_ALC295 &&
- subid == FRAMEWORK_LAPTOP_0005_SUBVENDOR) {
+ } else if ((id == HDA_CODEC_ALC295 &&
+ subid == FRAMEWORK_LAPTOP_0005_SUBVENDOR) ||
+ (id == HDA_CODEC_ALC285 &&
+ subid == FRAMEWORK_LAPTOP_000D_SUBVENDOR)) {
switch (nid) {
case 20:
/*
diff --git a/sys/dev/sound/pci/hda/hdac.c b/sys/dev/sound/pci/hda/hdac.c
index 900578b73de4..d1de81e7ba29 100644
--- a/sys/dev/sound/pci/hda/hdac.c
+++ b/sys/dev/sound/pci/hda/hdac.c
@@ -51,9 +51,9 @@
#define HDA_DRV_TEST_REV "20120126_0002"
-#define hdac_lock(sc) snd_mtxlock((sc)->lock)
-#define hdac_unlock(sc) snd_mtxunlock((sc)->lock)
-#define hdac_lockassert(sc) snd_mtxassert((sc)->lock)
+#define hdac_lock(sc) mtx_lock(&(sc)->lock)
+#define hdac_unlock(sc) mtx_unlock(&(sc)->lock)
+#define hdac_lockassert(sc) mtx_assert(&(sc)->lock, MA_OWNED)
#define HDAC_QUIRK_64BIT (1 << 0)
#define HDAC_QUIRK_DMAPOS (1 << 1)
@@ -133,6 +133,7 @@ static const struct {
{ HDA_INTEL_PCH, "Intel Ibex Peak", 0, 0 },
{ HDA_INTEL_PCH2, "Intel Ibex Peak", 0, 0 },
{ HDA_INTEL_ELLK, "Intel Elkhart Lake", 0, 0 },
+ { HDA_INTEL_ELLK2, "Intel Elkhart Lake", 0, 0 },
{ HDA_INTEL_JLK2, "Intel Jasper Lake", 0, 0 },
{ HDA_INTEL_BXTNP, "Intel Broxton-P", 0, 0 },
{ HDA_INTEL_SCH, "Intel SCH", 0, 0 },
@@ -169,6 +170,7 @@ static const struct {
{ HDA_NVIDIA_GF119, "NVIDIA GF119", 0, 0 },
{ HDA_NVIDIA_GF110_1, "NVIDIA GF110", 0, HDAC_QUIRK_MSI },
{ HDA_NVIDIA_GF110_2, "NVIDIA GF110", 0, HDAC_QUIRK_MSI },
+ { HDA_ATI_RAVEN, "ATI Raven", 0, 0 },
{ HDA_ATI_SB450, "ATI SB450", 0, 0 },
{ HDA_ATI_SB600, "ATI SB600", 0, 0 },
{ HDA_ATI_RS600, "ATI RS600", 0, 0 },
@@ -1169,7 +1171,8 @@ hdac_attach(device_t dev)
}
}
- sc->lock = snd_mtxcreate(device_get_nameunit(dev), "HDA driver mutex");
+ mtx_init(&sc->lock, device_get_nameunit(dev), "HDA driver mutex",
+ MTX_DEF);
sc->dev = dev;
TASK_INIT(&sc->unsolq_task, 0, hdac_unsolq_task, sc);
callout_init(&sc->poll_callout, 1);
@@ -1372,7 +1375,7 @@ hdac_attach_fail:
hdac_dma_free(sc, &sc->rirb_dma);
hdac_dma_free(sc, &sc->corb_dma);
hdac_mem_free(sc);
- snd_mtxfree(sc->lock);
+ mtx_destroy(&sc->lock);
return (ENXIO);
}
@@ -1773,17 +1776,17 @@ hdac_detach(device_t dev)
struct hdac_softc *sc = device_get_softc(dev);
int i, error;
+ callout_drain(&sc->poll_callout);
+ hdac_irq_free(sc);
+ taskqueue_drain(taskqueue_thread, &sc->unsolq_task);
+
error = bus_generic_detach(dev);
if (error != 0)
return (error);
hdac_lock(sc);
- callout_stop(&sc->poll_callout);
hdac_reset(sc, false);
hdac_unlock(sc);
- callout_drain(&sc->poll_callout);
- taskqueue_drain(taskqueue_thread, &sc->unsolq_task);
- hdac_irq_free(sc);
for (i = 0; i < sc->num_ss; i++)
hdac_dma_free(sc, &sc->streams[i].bdl);
@@ -1796,7 +1799,7 @@ hdac_detach(device_t dev)
sc->chan_dmat = NULL;
}
hdac_mem_free(sc);
- snd_mtxfree(sc->lock);
+ mtx_destroy(&sc->lock);
return (0);
}
@@ -1886,7 +1889,7 @@ hdac_get_mtx(device_t dev, device_t child)
{
struct hdac_softc *sc = device_get_softc(dev);
- return (sc->lock);
+ return (&sc->lock);
}
static uint32_t
@@ -2206,4 +2209,4 @@ static driver_t hdac_driver = {
sizeof(struct hdac_softc),
};
-DRIVER_MODULE(snd_hda, pci, hdac_driver, NULL, NULL);
+DRIVER_MODULE_ORDERED(snd_hda, pci, hdac_driver, NULL, NULL, SI_ORDER_ANY);
diff --git a/sys/dev/sound/pci/hda/hdac.h b/sys/dev/sound/pci/hda/hdac.h
index 223434a214b1..bc0ae651a3b6 100644
--- a/sys/dev/sound/pci/hda/hdac.h
+++ b/sys/dev/sound/pci/hda/hdac.h
@@ -66,6 +66,7 @@
#define HDA_INTEL_PCH HDA_MODEL_CONSTRUCT(INTEL, 0x3b56)
#define HDA_INTEL_PCH2 HDA_MODEL_CONSTRUCT(INTEL, 0x3b57)
#define HDA_INTEL_ELLK HDA_MODEL_CONSTRUCT(INTEL, 0x4b55)
+#define HDA_INTEL_ELLK2 HDA_MODEL_CONSTRUCT(INTEL, 0x4b58)
#define HDA_INTEL_JLK2 HDA_MODEL_CONSTRUCT(INTEL, 0x4dc8)
#define HDA_INTEL_BXTNP HDA_MODEL_CONSTRUCT(INTEL, 0x5a98)
#define HDA_INTEL_MACBOOKPRO92 HDA_MODEL_CONSTRUCT(INTEL, 0x7270)
@@ -153,6 +154,7 @@
/* ATI */
#define ATI_VENDORID 0x1002
+#define HDA_ATI_RAVEN HDA_MODEL_CONSTRUCT(ATI, 0x15de)
#define HDA_ATI_SB450 HDA_MODEL_CONSTRUCT(ATI, 0x437b)
#define HDA_ATI_SB600 HDA_MODEL_CONSTRUCT(ATI, 0x4383)
#define HDA_ATI_RS600 HDA_MODEL_CONSTRUCT(ATI, 0x793b)
@@ -388,6 +390,7 @@
#define LENOVO_3000_SUBVENDOR HDA_MODEL_CONSTRUCT(LENOVO, 0x384e)
#define LENOVO_IDEAPAD330_SUBVENDOR HDA_MODEL_CONSTRUCT(LENOVO, 0x3808)
#define LENOVO_IDEAPAD3_SUBVENDOR HDA_MODEL_CONSTRUCT(LENOVO, 0x3881)
+#define LENOVO_V15_SUBVENDOR HDA_MODEL_CONSTRUCT(LENOVO, 0x3886)
#define LENOVO_ALL_SUBVENDOR HDA_MODEL_CONSTRUCT(LENOVO, 0xffff)
/* Samsung */
@@ -535,6 +538,7 @@
#define FRAMEWORK_LAPTOP_0003_SUBVENDOR HDA_MODEL_CONSTRUCT(FRAMEWORK, 0x0003)
#define FRAMEWORK_LAPTOP_0005_SUBVENDOR HDA_MODEL_CONSTRUCT(FRAMEWORK, 0x0005)
#define FRAMEWORK_LAPTOP_0006_SUBVENDOR HDA_MODEL_CONSTRUCT(FRAMEWORK, 0x0006)
+#define FRAMEWORK_LAPTOP_000D_SUBVENDOR HDA_MODEL_CONSTRUCT(FRAMEWORK, 0x000d)
/* All codecs you can eat... */
#define HDA_CODEC_CONSTRUCT(vendor, id) \
diff --git a/sys/dev/sound/pci/hda/hdac_private.h b/sys/dev/sound/pci/hda/hdac_private.h
index c434bface240..0c6fe41fd5de 100644
--- a/sys/dev/sound/pci/hda/hdac_private.h
+++ b/sys/dev/sound/pci/hda/hdac_private.h
@@ -162,7 +162,7 @@ struct hdac_stream {
struct hdac_softc {
device_t dev;
- struct mtx *lock;
+ struct mtx lock;
struct intr_config_hook intrhook;
diff --git a/sys/dev/sound/pci/hda/hdacc.c b/sys/dev/sound/pci/hda/hdacc.c
index 4198982c9c2a..b001daa549b1 100644
--- a/sys/dev/sound/pci/hda/hdacc.c
+++ b/sys/dev/sound/pci/hda/hdacc.c
@@ -60,9 +60,9 @@ struct hdacc_softc {
struct hdacc_fg *fgs;
};
-#define hdacc_lock(codec) snd_mtxlock((codec)->lock)
-#define hdacc_unlock(codec) snd_mtxunlock((codec)->lock)
-#define hdacc_lockassert(codec) snd_mtxassert((codec)->lock)
+#define hdacc_lock(codec) mtx_lock((codec)->lock)
+#define hdacc_unlock(codec) mtx_unlock((codec)->lock)
+#define hdacc_lockassert(codec) mtx_assert((codec)->lock, MA_OWNED)
MALLOC_DEFINE(M_HDACC, "hdacc", "HDA CODEC");
diff --git a/sys/dev/sound/pci/hdsp-pcm.c b/sys/dev/sound/pci/hdsp-pcm.c
index 5ac571e64fde..b64cec281388 100644
--- a/sys/dev/sound/pci/hdsp-pcm.c
+++ b/sys/dev/sound/pci/hdsp-pcm.c
@@ -321,10 +321,10 @@ hdspmixer_init(struct snd_mixer *m)
if (hdsp_channel_rec_ports(scp->hc))
mask |= SOUND_MASK_RECLEV;
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
pcm_setflags(scp->dev, pcm_getflags(scp->dev) | SD_F_SOFTPCMVOL);
mix_setdevs(m, mask);
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return (0);
}
@@ -676,7 +676,7 @@ hdspchan_free(kobj_t obj, void *data)
device_printf(scp->dev, "hdspchan_free()\n");
#endif
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
if (ch->data != NULL) {
free(ch->data, M_HDSP);
ch->data = NULL;
@@ -685,7 +685,7 @@ hdspchan_free(kobj_t obj, void *data)
free(ch->caps, M_HDSP);
ch->caps = NULL;
}
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return (0);
}
@@ -702,7 +702,7 @@ hdspchan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b,
scp = devinfo;
sc = scp->sc;
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
num = scp->chnum;
ch = &scp->chan[num];
@@ -745,7 +745,7 @@ hdspchan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b,
ch->dir = dir;
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
if (sndbuf_setup(ch->buffer, ch->data, ch->size) != 0) {
device_printf(scp->dev, "Can't setup sndbuf.\n");
@@ -767,7 +767,7 @@ hdspchan_trigger(kobj_t obj, void *data, int go)
scp = ch->parent;
sc = scp->sc;
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
switch (go) {
case PCMTRIG_START:
#if 0
@@ -795,7 +795,7 @@ hdspchan_trigger(kobj_t obj, void *data, int go)
break;
}
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return (0);
}
@@ -812,9 +812,9 @@ hdspchan_getptr(kobj_t obj, void *data)
scp = ch->parent;
sc = scp->sc;
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
ret = hdsp_read_2(sc, HDSP_STATUS_REG);
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
pos = ret & HDSP_BUF_POSITION_MASK;
pos %= (2 * sc->period * sizeof(uint32_t)); /* Double buffer. */
@@ -951,12 +951,12 @@ hdspchan_setblocksize(kobj_t obj, void *data, uint32_t blocksize)
}
}
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
sc->ctrl_register &= ~HDSP_LAT_MASK;
sc->ctrl_register |= hdsp_encode_latency(hl->n);
hdsp_write_4(sc, HDSP_CONTROL_REG, sc->ctrl_register);
sc->period = hl->period;
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
#if 0
device_printf(scp->dev, "New period=%d\n", sc->period);
@@ -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[] = {
@@ -1034,9 +1034,9 @@ hdsp_pcm_intr(struct sc_pcminfo *scp)
for (i = 0; i < scp->chnum; i++) {
ch = &scp->chan[i];
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
chn_intr(ch->channel);
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
}
return (0);
diff --git a/sys/dev/sound/pci/hdsp.c b/sys/dev/sound/pci/hdsp.c
index 4ba23d22ebce..aefbb71807b6 100644
--- a/sys/dev/sound/pci/hdsp.c
+++ b/sys/dev/sound/pci/hdsp.c
@@ -109,7 +109,7 @@ hdsp_intr(void *p)
sc = (struct sc_info *)p;
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
status = hdsp_read_1(sc, HDSP_STATUS_REG);
if (status & HDSP_AUDIO_IRQ_PENDING) {
@@ -126,7 +126,7 @@ hdsp_intr(void *p)
free(devlist, M_TEMP);
}
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
}
static void
@@ -286,11 +286,11 @@ hdsp_sysctl_input_level(SYSCTL_HANDLER_ARGS)
/* Set input level in control register. */
control &= HDSP_INPUT_LEVEL_MASK;
if (control != (sc->ctrl_register & HDSP_INPUT_LEVEL_MASK)) {
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
sc->ctrl_register &= ~HDSP_INPUT_LEVEL_MASK;
sc->ctrl_register |= control;
hdsp_write_4(sc, HDSP_CONTROL_REG, sc->ctrl_register);
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
}
return (0);
}
@@ -350,11 +350,11 @@ hdsp_sysctl_output_level(SYSCTL_HANDLER_ARGS)
/* Set output level in control register. */
control &= HDSP_OUTPUT_LEVEL_MASK;
if (control != (sc->ctrl_register & HDSP_OUTPUT_LEVEL_MASK)) {
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
sc->ctrl_register &= ~HDSP_OUTPUT_LEVEL_MASK;
sc->ctrl_register |= control;
hdsp_write_4(sc, HDSP_CONTROL_REG, sc->ctrl_register);
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
}
return (0);
}
@@ -414,11 +414,11 @@ hdsp_sysctl_phones_level(SYSCTL_HANDLER_ARGS)
/* Set phones level in control register. */
control &= HDSP_PHONES_LEVEL_MASK;
if (control != (sc->ctrl_register & HDSP_PHONES_LEVEL_MASK)) {
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
sc->ctrl_register &= ~HDSP_PHONES_LEVEL_MASK;
sc->ctrl_register |= control;
hdsp_write_4(sc, HDSP_CONTROL_REG, sc->ctrl_register);
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
}
return (0);
}
@@ -549,11 +549,11 @@ hdsp_sysctl_clock_preference(SYSCTL_HANDLER_ARGS)
if (clock->name != NULL) {
control = hdsp_control_clock_preference(clock->type);
control &= HDSP_CONTROL_CLOCK_MASK;
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
sc->ctrl_register &= ~HDSP_CONTROL_CLOCK_MASK;
sc->ctrl_register |= control;
hdsp_write_4(sc, HDSP_CONTROL_REG, sc->ctrl_register);
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
}
return (0);
}
@@ -600,10 +600,10 @@ hdsp_sysctl_clock_source(SYSCTL_HANDLER_ARGS)
return (ENXIO);
/* Read current (autosync) clock source from status2 register. */
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
status2 = hdsp_read_4(sc, HDSP_STATUS2_REG);
status2 &= HDSP_STATUS2_CLOCK_MASK;
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
/* Translate status2 register value to clock source. */
for (clock = clock_table; clock->name != NULL; ++clock) {
@@ -720,10 +720,10 @@ hdsp_sysctl_sync_status(SYSCTL_HANDLER_ARGS)
return (ENXIO);
/* Read current lock and sync bits from status registers. */
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
status = hdsp_read_4(sc, HDSP_STATUS_REG);
status2 = hdsp_read_4(sc, HDSP_STATUS2_REG);
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
/* List clock sources with lock and sync state. */
for (clock = clock_table; clock->name != NULL; ++clock) {
@@ -857,8 +857,8 @@ hdsp_attach(device_t dev)
#endif
sc = device_get_softc(dev);
- sc->lock = snd_mtxcreate(device_get_nameunit(dev),
- "snd_hdsp softc");
+ mtx_init(&sc->lock, device_get_nameunit(dev), "snd_hdsp softc",
+ MTX_DEF);
sc->dev = dev;
pci_enable_busmaster(dev);
@@ -999,8 +999,7 @@ hdsp_detach(device_t dev)
bus_release_resource(dev, SYS_RES_IRQ, 0, sc->irq);
if (sc->cs)
bus_release_resource(dev, SYS_RES_MEMORY, PCIR_BAR(0), sc->cs);
- if (sc->lock)
- snd_mtxfree(sc->lock);
+ mtx_destroy(&sc->lock);
return (0);
}
diff --git a/sys/dev/sound/pci/hdsp.h b/sys/dev/sound/pci/hdsp.h
index 8ac438cd79f9..18737709ec3f 100644
--- a/sys/dev/sound/pci/hdsp.h
+++ b/sys/dev/sound/pci/hdsp.h
@@ -223,7 +223,7 @@ struct sc_pcminfo {
/* HDSP device private data */
struct sc_info {
device_t dev;
- struct mtx *lock;
+ struct mtx lock;
uint32_t ctrl_register;
uint32_t type;
diff --git a/sys/dev/sound/pci/hdspe-pcm.c b/sys/dev/sound/pci/hdspe-pcm.c
index 09bbbe22dacf..d78820732639 100644
--- a/sys/dev/sound/pci/hdspe-pcm.c
+++ b/sys/dev/sound/pci/hdspe-pcm.c
@@ -305,10 +305,10 @@ hdspemixer_init(struct snd_mixer *m)
if (hdspe_channel_rec_ports(scp->hc))
mask |= SOUND_MASK_RECLEV;
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
pcm_setflags(scp->dev, pcm_getflags(scp->dev) | SD_F_SOFTPCMVOL);
mix_setdevs(m, mask);
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return (0);
}
@@ -667,7 +667,7 @@ hdspechan_free(kobj_t obj, void *data)
device_printf(scp->dev, "hdspechan_free()\n");
#endif
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
if (ch->data != NULL) {
free(ch->data, M_HDSPE);
ch->data = NULL;
@@ -676,7 +676,7 @@ hdspechan_free(kobj_t obj, void *data)
free(ch->caps, M_HDSPE);
ch->caps = NULL;
}
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return (0);
}
@@ -693,7 +693,7 @@ hdspechan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b,
scp = devinfo;
sc = scp->sc;
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
num = scp->chnum;
ch = &scp->chan[num];
@@ -729,7 +729,7 @@ hdspechan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b,
ch->dir = dir;
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
if (sndbuf_setup(ch->buffer, ch->data, ch->size) != 0) {
device_printf(scp->dev, "Can't setup sndbuf.\n");
@@ -751,7 +751,7 @@ hdspechan_trigger(kobj_t obj, void *data, int go)
scp = ch->parent;
sc = scp->sc;
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
switch (go) {
case PCMTRIG_START:
#if 0
@@ -779,7 +779,7 @@ hdspechan_trigger(kobj_t obj, void *data, int go)
break;
}
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
return (0);
}
@@ -796,9 +796,9 @@ hdspechan_getptr(kobj_t obj, void *data)
scp = ch->parent;
sc = scp->sc;
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
ret = hdspe_read_2(sc, HDSPE_STATUS_REG);
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
pos = ret & HDSPE_BUF_POSITION_MASK;
pos *= AFMT_CHANNEL(ch->format); /* Hardbuf with multiple channels. */
@@ -946,12 +946,12 @@ hdspechan_setblocksize(kobj_t obj, void *data, uint32_t blocksize)
}
}
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
sc->ctrl_register &= ~HDSPE_LAT_MASK;
sc->ctrl_register |= hdspe_encode_latency(hl->n);
hdspe_write_4(sc, HDSPE_CONTROL_REG, sc->ctrl_register);
sc->period = hl->period;
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
#if 0
device_printf(scp->dev, "New period=%d\n", sc->period);
@@ -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[] = {
@@ -1025,9 +1025,9 @@ hdspe_pcm_intr(struct sc_pcminfo *scp)
for (i = 0; i < scp->chnum; i++) {
ch = &scp->chan[i];
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
chn_intr(ch->channel);
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
}
return (0);
diff --git a/sys/dev/sound/pci/hdspe.c b/sys/dev/sound/pci/hdspe.c
index c292b2ddef56..f468111cb16e 100644
--- a/sys/dev/sound/pci/hdspe.c
+++ b/sys/dev/sound/pci/hdspe.c
@@ -119,7 +119,7 @@ hdspe_intr(void *p)
sc = (struct sc_info *)p;
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
status = hdspe_read_1(sc, HDSPE_STATUS_REG);
if (status & HDSPE_AUDIO_IRQ_PENDING) {
@@ -136,7 +136,7 @@ hdspe_intr(void *p)
free(devlist, M_TEMP);
}
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
}
static void
@@ -301,11 +301,11 @@ hdspe_sysctl_input_level(SYSCTL_HANDLER_ARGS)
/* Set input level in settings register. */
settings &= HDSPE_INPUT_LEVEL_MASK;
if (settings != (sc->settings_register & HDSPE_INPUT_LEVEL_MASK)) {
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
sc->settings_register &= ~HDSPE_INPUT_LEVEL_MASK;
sc->settings_register |= settings;
hdspe_write_4(sc, HDSPE_SETTINGS_REG, sc->settings_register);
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
}
return (0);
}
@@ -365,11 +365,11 @@ hdspe_sysctl_output_level(SYSCTL_HANDLER_ARGS)
/* Set output level in settings register. */
settings &= HDSPE_OUTPUT_LEVEL_MASK;
if (settings != (sc->settings_register & HDSPE_OUTPUT_LEVEL_MASK)) {
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
sc->settings_register &= ~HDSPE_OUTPUT_LEVEL_MASK;
sc->settings_register |= settings;
hdspe_write_4(sc, HDSPE_SETTINGS_REG, sc->settings_register);
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
}
return (0);
}
@@ -429,11 +429,11 @@ hdspe_sysctl_phones_level(SYSCTL_HANDLER_ARGS)
/* Set phones level in settings register. */
settings &= HDSPE_PHONES_LEVEL_MASK;
if (settings != (sc->settings_register & HDSPE_PHONES_LEVEL_MASK)) {
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
sc->settings_register &= ~HDSPE_PHONES_LEVEL_MASK;
sc->settings_register |= settings;
hdspe_write_4(sc, HDSPE_SETTINGS_REG, sc->settings_register);
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
}
return (0);
}
@@ -540,11 +540,11 @@ hdspe_sysctl_clock_preference(SYSCTL_HANDLER_ARGS)
/* Set preferred clock source in settings register. */
if (clock->name != NULL) {
setting = clock->setting & HDSPE_SETTING_CLOCK_MASK;
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
sc->settings_register &= ~HDSPE_SETTING_CLOCK_MASK;
sc->settings_register |= setting;
hdspe_write_4(sc, HDSPE_SETTINGS_REG, sc->settings_register);
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
}
return (0);
}
@@ -568,10 +568,10 @@ hdspe_sysctl_clock_source(SYSCTL_HANDLER_ARGS)
return (ENXIO);
/* Read current (autosync) clock source from status register. */
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
status = hdspe_read_4(sc, HDSPE_STATUS1_REG);
status &= HDSPE_STATUS1_CLOCK_MASK;
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
/* Translate status register value to clock source. */
for (clock = clock_table; clock->name != NULL; ++clock) {
@@ -640,9 +640,9 @@ hdspe_sysctl_sync_status(SYSCTL_HANDLER_ARGS)
return (ENXIO);
/* Read current lock and sync bits from status register. */
- snd_mtxlock(sc->lock);
+ mtx_lock(&sc->lock);
status = hdspe_read_4(sc, HDSPE_STATUS1_REG);
- snd_mtxunlock(sc->lock);
+ mtx_unlock(&sc->lock);
/* List clock sources with lock and sync state. */
for (clock = clock_table; clock->name != NULL; ++clock) {
@@ -749,8 +749,8 @@ hdspe_attach(device_t dev)
#endif
sc = device_get_softc(dev);
- sc->lock = snd_mtxcreate(device_get_nameunit(dev),
- "snd_hdspe softc");
+ mtx_init(&sc->lock, device_get_nameunit(dev), "snd_hdspe softc",
+ MTX_DEF);
sc->dev = dev;
pci_enable_busmaster(dev);
@@ -891,8 +891,7 @@ hdspe_detach(device_t dev)
bus_release_resource(dev, SYS_RES_IRQ, 0, sc->irq);
if (sc->cs)
bus_release_resource(dev, SYS_RES_MEMORY, PCIR_BAR(0), sc->cs);
- if (sc->lock)
- snd_mtxfree(sc->lock);
+ mtx_destroy(&sc->lock);
return (0);
}
diff --git a/sys/dev/sound/pci/hdspe.h b/sys/dev/sound/pci/hdspe.h
index bced78758068..85acbe9f7374 100644
--- a/sys/dev/sound/pci/hdspe.h
+++ b/sys/dev/sound/pci/hdspe.h
@@ -214,7 +214,7 @@ struct sc_pcminfo {
/* HDSPe device private data */
struct sc_info {
device_t dev;
- struct mtx *lock;
+ struct mtx lock;
uint32_t ctrl_register;
uint32_t settings_register;
diff --git a/sys/dev/sound/pci/ich.c b/sys/dev/sound/pci/ich.c
index 500d6d95daac..7e7fe95dac8c 100644
--- a/sys/dev/sound/pci/ich.c
+++ b/sys/dev/sound/pci/ich.c
@@ -77,9 +77,9 @@
#define AMD_768 0x7445
#define AMD_8111 0x746d
-#define ICH_LOCK(sc) snd_mtxlock((sc)->ich_lock)
-#define ICH_UNLOCK(sc) snd_mtxunlock((sc)->ich_lock)
-#define ICH_LOCK_ASSERT(sc) snd_mtxassert((sc)->ich_lock)
+#define ICH_LOCK(sc) mtx_lock(&(sc)->ich_lock)
+#define ICH_UNLOCK(sc) mtx_unlock(&(sc)->ich_lock)
+#define ICH_LOCK_ASSERT(sc) mtx_assert(&(sc)->ich_lock, MA_OWNED)
#if 0
#define ICH_DEBUG(stmt) do { \
@@ -196,7 +196,7 @@ struct sc_info {
uint16_t vendor;
uint16_t devid;
uint32_t flags;
- struct mtx *ich_lock;
+ struct mtx ich_lock;
};
/* -------------------------------------------------------------------- */
@@ -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;
@@ -888,7 +888,8 @@ ich_pci_attach(device_t dev)
int i;
sc = malloc(sizeof(*sc), M_DEVBUF, M_WAITOK | M_ZERO);
- sc->ich_lock = snd_mtxcreate(device_get_nameunit(dev), "snd_ich softc");
+ mtx_init(&sc->ich_lock, device_get_nameunit(dev), "snd_ich softc",
+ MTX_DEF);
sc->dev = dev;
vendor = sc->vendor = pci_get_vendor(dev);
@@ -1111,8 +1112,7 @@ bad:
bus_dma_tag_destroy(sc->chan_dmat);
if (sc->dmat)
bus_dma_tag_destroy(sc->dmat);
- if (sc->ich_lock)
- snd_mtxfree(sc->ich_lock);
+ mtx_destroy(&sc->ich_lock);
free(sc, M_DEVBUF);
return (ENXIO);
}
@@ -1136,7 +1136,7 @@ ich_pci_detach(device_t dev)
bus_dmamem_free(sc->dmat, sc->dtbl, sc->dtmap);
bus_dma_tag_destroy(sc->chan_dmat);
bus_dma_tag_destroy(sc->dmat);
- snd_mtxfree(sc->ich_lock);
+ mtx_destroy(&sc->ich_lock);
free(sc, M_DEVBUF);
return (0);
}
diff --git a/sys/dev/sound/pci/maestro3.c b/sys/dev/sound/pci/maestro3.c
index 2d102fcd6dbe..a8a52601d1a2 100644
--- a/sys/dev/sound/pci/maestro3.c
+++ b/sys/dev/sound/pci/maestro3.c
@@ -156,12 +156,12 @@ struct sc_info {
unsigned int bufsz;
u_int16_t *savemem;
- struct mtx *sc_lock;
+ struct mtx sc_lock;
};
-#define M3_LOCK(_sc) snd_mtxlock((_sc)->sc_lock)
-#define M3_UNLOCK(_sc) snd_mtxunlock((_sc)->sc_lock)
-#define M3_LOCK_ASSERT(_sc) snd_mtxassert((_sc)->sc_lock)
+#define M3_LOCK(_sc) mtx_lock(&(_sc)->sc_lock)
+#define M3_UNLOCK(_sc) mtx_unlock(&(_sc)->sc_lock)
+#define M3_LOCK_ASSERT(_sc) mtx_assert(&(_sc)->sc_lock, MA_OWNED)
/* -------------------------------------------------------------------- */
@@ -437,17 +437,17 @@ m3_pchan_init(kobj_t kobj, void *devinfo, struct snd_dbuf *b, struct pcm_channel
ch->parent = sc;
ch->channel = c;
ch->fmt = SND_FORMAT(AFMT_U8, 1, 0);
- ch->spd = DSP_DEFAULT_SPEED;
+ ch->spd = 8000;
M3_UNLOCK(sc); /* XXX */
if (sndbuf_alloc(ch->buffer, sc->parent_dmat, 0, sc->bufsz) != 0) {
device_printf(sc->dev, "m3_pchan_init chn_allocbuf failed\n");
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);
@@ -816,17 +816,17 @@ m3_rchan_init(kobj_t kobj, void *devinfo, struct snd_dbuf *b, struct pcm_channel
ch->parent = sc;
ch->channel = c;
ch->fmt = SND_FORMAT(AFMT_U8, 1, 0);
- ch->spd = DSP_DEFAULT_SPEED;
+ ch->spd = 8000;
M3_UNLOCK(sc); /* XXX */
if (sndbuf_alloc(ch->buffer, sc->parent_dmat, 0, sc->bufsz) != 0) {
device_printf(sc->dev, "m3_rchan_init chn_allocbuf failed\n");
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);
@@ -1325,8 +1325,8 @@ m3_pci_attach(device_t dev)
sc = malloc(sizeof(*sc), M_DEVBUF, M_WAITOK | M_ZERO);
sc->dev = dev;
sc->type = pci_get_devid(dev);
- sc->sc_lock = snd_mtxcreate(device_get_nameunit(dev),
- "snd_maestro3 softc");
+ mtx_init(&sc->sc_lock, device_get_nameunit(dev), "snd_maestro3 softc",
+ MTX_DEF);
for (card = m3_card_types ; card->pci_id ; card++) {
if (sc->type == card->pci_id) {
sc->which = card->which;
@@ -1465,8 +1465,7 @@ m3_pci_attach(device_t dev)
bus_release_resource(dev, sc->regtype, sc->regid, sc->reg);
if (sc->parent_dmat)
bus_dma_tag_destroy(sc->parent_dmat);
- if (sc->sc_lock)
- snd_mtxfree(sc->sc_lock);
+ mtx_destroy(&sc->sc_lock);
free(sc, M_DEVBUF);
return ENXIO;
}
@@ -1494,7 +1493,7 @@ m3_pci_detach(device_t dev)
bus_dma_tag_destroy(sc->parent_dmat);
free(sc->savemem, M_DEVBUF);
- snd_mtxfree(sc->sc_lock);
+ mtx_destroy(&sc->sc_lock);
free(sc, M_DEVBUF);
return 0;
}
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..2b61b594a8f3 100644
--- a/sys/dev/sound/pci/solo.c
+++ b/sys/dev/sound/pci/solo.c
@@ -97,12 +97,12 @@ struct ess_info {
unsigned int bufsz;
struct ess_chinfo pch, rch;
- struct mtx *lock;
+ struct mtx lock;
};
-#define ess_lock(_ess) snd_mtxlock((_ess)->lock)
-#define ess_unlock(_ess) snd_mtxunlock((_ess)->lock)
-#define ess_lock_assert(_ess) snd_mtxassert((_ess)->lock)
+#define ess_lock(_ess) mtx_lock(&(_ess)->lock)
+#define ess_unlock(_ess) mtx_unlock(&(_ess)->lock)
+#define ess_lock_assert(_ess) mtx_assert(&(_ess)->lock, MA_OWNED)
static int ess_rd(struct ess_info *sc, int reg);
static void ess_wr(struct ess_info *sc, int reg, u_int8_t val);
@@ -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;
@@ -854,10 +855,7 @@ ess_release_resources(struct ess_info *sc, device_t dev)
sc->parent_dmat = 0;
}
- if (sc->lock) {
- snd_mtxfree(sc->lock);
- sc->lock = NULL;
- }
+ mtx_destroy(&sc->lock);
free(sc, M_DEVBUF);
}
@@ -886,10 +884,11 @@ ess_alloc_resources(struct ess_info *sc, device_t dev)
sc->irq = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,
RF_ACTIVE | RF_SHAREABLE);
- sc->lock = snd_mtxcreate(device_get_nameunit(dev), "snd_solo softc");
+ mtx_init(&sc->lock, device_get_nameunit(dev), "snd_solo softc",
+ MTX_DEF);
return (sc->irq && sc->io && sc->sb && sc->vc &&
- sc->mpu && sc->gp && sc->lock)? 0 : ENXIO;
+ sc->mpu && sc->gp)? 0 : ENXIO;
}
static int
diff --git a/sys/dev/sound/pci/spicds.c b/sys/dev/sound/pci/spicds.c
index da0e8d9da6d5..350034d8bafb 100644
--- a/sys/dev/sound/pci/spicds.c
+++ b/sys/dev/sound/pci/spicds.c
@@ -49,7 +49,7 @@ struct spicds_info {
unsigned int dvc; /* De-emphasis and Volume Control */
unsigned int left, right;
char name[SPICDS_NAMELEN];
- struct mtx *lock;
+ struct mtx lock;
};
static void
@@ -149,7 +149,7 @@ spicds_create(device_t dev, void *devinfo, int num, spicds_ctrl ctrl)
return NULL;
snprintf(codec->name, SPICDS_NAMELEN, "%s:spicds%d", device_get_nameunit(dev), num);
- codec->lock = snd_mtxcreate(codec->name, codec->name);
+ mtx_init(&codec->lock, codec->name, codec->name, MTX_DEF);
codec->dev = dev;
codec->ctrl = ctrl;
codec->devinfo = devinfo;
@@ -165,40 +165,40 @@ spicds_create(device_t dev, void *devinfo, int num, spicds_ctrl ctrl)
void
spicds_destroy(struct spicds_info *codec)
{
- snd_mtxfree(codec->lock);
+ mtx_destroy(&codec->lock);
free(codec, M_SPICDS);
}
void
spicds_settype(struct spicds_info *codec, unsigned int type)
{
- snd_mtxlock(codec->lock);
+ mtx_lock(&codec->lock);
codec->type = type;
- snd_mtxunlock(codec->lock);
+ mtx_unlock(&codec->lock);
}
void
spicds_setcif(struct spicds_info *codec, unsigned int cif)
{
- snd_mtxlock(codec->lock);
+ mtx_lock(&codec->lock);
codec->cif = cif;
- snd_mtxunlock(codec->lock);
+ mtx_unlock(&codec->lock);
}
void
spicds_setformat(struct spicds_info *codec, unsigned int format)
{
- snd_mtxlock(codec->lock);
+ mtx_lock(&codec->lock);
codec->format = format;
- snd_mtxunlock(codec->lock);
+ mtx_unlock(&codec->lock);
}
void
spicds_setdvc(struct spicds_info *codec, unsigned int dvc)
{
- snd_mtxlock(codec->lock);
+ mtx_lock(&codec->lock);
codec->dvc = dvc;
- snd_mtxunlock(codec->lock);
+ mtx_unlock(&codec->lock);
}
void
@@ -207,7 +207,7 @@ spicds_init(struct spicds_info *codec)
#if(0)
device_printf(codec->dev, "spicds_init(codec)\n");
#endif
- snd_mtxlock(codec->lock);
+ mtx_lock(&codec->lock);
if (codec->type == SPICDS_TYPE_AK4524 ||\
codec->type == SPICDS_TYPE_AK4528) {
/* power off */
@@ -244,13 +244,13 @@ spicds_init(struct spicds_info *codec)
spicds_wrcd(codec, 0x00, 0x8f); /* I2S, 24bit, power-up */
if (codec->type == SPICDS_TYPE_AK4396)
spicds_wrcd(codec, 0x00, 0x07); /* I2S, 24bit, power-up */
- snd_mtxunlock(codec->lock);
+ mtx_unlock(&codec->lock);
}
void
spicds_reinit(struct spicds_info *codec)
{
- snd_mtxlock(codec->lock);
+ mtx_lock(&codec->lock);
if (codec->type != SPICDS_TYPE_WM8770) {
/* reset */
spicds_wrcd(codec, AK4524_RESET, 0);
@@ -265,7 +265,7 @@ spicds_reinit(struct spicds_info *codec)
/* AK4358 reinit */
/* AK4381 reinit */
}
- snd_mtxunlock(codec->lock);
+ mtx_unlock(&codec->lock);
}
void
@@ -274,7 +274,7 @@ spicds_set(struct spicds_info *codec, int dir, unsigned int left, unsigned int r
#if(0)
device_printf(codec->dev, "spicds_set(codec, %d, %d, %d)\n", dir, left, right);
#endif
- snd_mtxlock(codec->lock);
+ mtx_lock(&codec->lock);
if (left >= 100)
if ((codec->type == SPICDS_TYPE_AK4381) || \
(codec->type == SPICDS_TYPE_AK4396))
@@ -362,7 +362,7 @@ spicds_set(struct spicds_info *codec, int dir, unsigned int left, unsigned int r
spicds_wrcd(codec, AK4396_ROATT, right);
}
- snd_mtxunlock(codec->lock);
+ mtx_unlock(&codec->lock);
}
MODULE_DEPEND(snd_spicds, sound, SOUND_MINVER, SOUND_PREFVER, SOUND_MAXVER);
diff --git a/sys/dev/sound/pci/t4dwave.c b/sys/dev/sound/pci/t4dwave.c
index 07b9e1004573..1b659118b840 100644
--- a/sys/dev/sound/pci/t4dwave.c
+++ b/sys/dev/sound/pci/t4dwave.c
@@ -99,7 +99,7 @@ struct tr_info {
int regtype, regid, irqid;
void *ih;
- struct mtx *lock;
+ struct mtx lock;
u_int32_t hwchns;
u_int32_t playchns;
@@ -209,7 +209,7 @@ tr_rdcd(kobj_t obj, void *devinfo, int regno)
i = j = 0;
regno &= 0x7f;
- snd_mtxlock(tr->lock);
+ mtx_lock(&tr->lock);
if (tr->type == ALI_PCI_ID) {
u_int32_t chk1, chk2;
j = trw;
@@ -229,7 +229,7 @@ tr_rdcd(kobj_t obj, void *devinfo, int regno)
for (i=TR_TIMEOUT_CDC; (i > 0) && (j & trw); i--)
j=tr_rd(tr, treg, 4);
}
- snd_mtxunlock(tr->lock);
+ mtx_unlock(&tr->lock);
if (i == 0) printf("codec timeout during read of register %x\n", regno);
return (j >> TR_CDC_DATA) & 0xffff;
}
@@ -266,7 +266,7 @@ tr_wrcd(kobj_t obj, void *devinfo, int regno, u_int32_t data)
printf("tr_wrcd: reg %x was %x", regno, tr_rdcd(devinfo, regno));
#endif
j=trw;
- snd_mtxlock(tr->lock);
+ mtx_lock(&tr->lock);
if (tr->type == ALI_PCI_ID) {
j = trw;
for (i = TR_TIMEOUT_CDC; (i > 0) && (j & trw); i--)
@@ -290,7 +290,7 @@ tr_wrcd(kobj_t obj, void *devinfo, int regno, u_int32_t data)
#if 0
printf(" - wrote %x, now %x\n", data, tr_rdcd(devinfo, regno));
#endif
- snd_mtxunlock(tr->lock);
+ mtx_unlock(&tr->lock);
if (i==0) printf("codec timeout writing %x, data %x\n", regno, data);
return (i > 0)? 0 : -1;
}
@@ -336,7 +336,7 @@ tr_enaint(struct tr_chinfo *ch, int enable)
u_int32_t i, reg;
int bank, chan;
- snd_mtxlock(tr->lock);
+ mtx_lock(&tr->lock);
bank = (ch->index & 0x20) ? 1 : 0;
chan = ch->index & 0x1f;
reg = bank? TR_REG_INTENB : TR_REG_INTENA;
@@ -347,7 +347,7 @@ tr_enaint(struct tr_chinfo *ch, int enable)
tr_clrint(ch);
tr_wr(tr, reg, i, 4);
- snd_mtxunlock(tr->lock);
+ mtx_unlock(&tr->lock);
}
/* playback channels */
@@ -429,11 +429,11 @@ tr_wrch(struct tr_chinfo *ch)
cr[3]|=(ch->alpha<<20) | (ch->fms<<16) | (ch->fmc<<14);
break;
}
- snd_mtxlock(tr->lock);
+ mtx_lock(&tr->lock);
tr_selch(ch);
for (i=0; i<TR_CHN_REGS; i++)
tr_wr(tr, TR_REG_CHNBASE+(i<<2), cr[i], 4);
- snd_mtxunlock(tr->lock);
+ mtx_unlock(&tr->lock);
}
static void
@@ -442,11 +442,11 @@ tr_rdch(struct tr_chinfo *ch)
struct tr_info *tr = ch->parent;
u_int32_t cr[5], i;
- snd_mtxlock(tr->lock);
+ mtx_lock(&tr->lock);
tr_selch(ch);
for (i=0; i<5; i++)
cr[i]=tr_rd(tr, TR_REG_CHNBASE+(i<<2), 4);
- snd_mtxunlock(tr->lock);
+ mtx_unlock(&tr->lock);
if (tr->type == ALI_PCI_ID)
ch->lba=(cr[1] & ALI_MAXADDR);
@@ -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 *
@@ -830,7 +830,8 @@ tr_pci_attach(device_t dev)
tr = malloc(sizeof(*tr), M_DEVBUF, M_WAITOK | M_ZERO);
tr->type = pci_get_devid(dev);
tr->rev = pci_get_revid(dev);
- tr->lock = snd_mtxcreate(device_get_nameunit(dev), "snd_t4dwave softc");
+ mtx_init(&tr->lock, device_get_nameunit(dev), "snd_t4dwave softc",
+ MTX_DEF);
if (resource_int_value(device_get_name(dev), device_get_unit(dev),
"dac", &i) == 0) {
@@ -936,7 +937,7 @@ bad:
if (tr->ih) bus_teardown_intr(dev, tr->irq, tr->ih);
if (tr->irq) bus_release_resource(dev, SYS_RES_IRQ, tr->irqid, tr->irq);
if (tr->parent_dmat) bus_dma_tag_destroy(tr->parent_dmat);
- if (tr->lock) snd_mtxfree(tr->lock);
+ mtx_destroy(&tr->lock);
free(tr, M_DEVBUF);
return ENXIO;
}
@@ -956,7 +957,7 @@ tr_pci_detach(device_t dev)
bus_teardown_intr(dev, tr->irq, tr->ih);
bus_release_resource(dev, SYS_RES_IRQ, tr->irqid, tr->irq);
bus_dma_tag_destroy(tr->parent_dmat);
- snd_mtxfree(tr->lock);
+ mtx_destroy(&tr->lock);
free(tr, M_DEVBUF);
return 0;
diff --git a/sys/dev/sound/pci/via8233.c b/sys/dev/sound/pci/via8233.c
index 243353805b94..6c59397756e0 100644
--- a/sys/dev/sound/pci/via8233.c
+++ b/sys/dev/sound/pci/via8233.c
@@ -121,7 +121,7 @@ struct via_info {
uint16_t codec_caps;
uint16_t n_dxs_registered;
int play_num, rec_num;
- struct mtx *lock;
+ struct mtx lock;
struct callout poll_timer;
int poll_ticks, polling;
};
@@ -164,9 +164,9 @@ sysctl_via8233_spdif_enable(SYSCTL_HANDLER_ARGS)
dev = oidp->oid_arg1;
via = pcm_getdevinfo(dev);
- snd_mtxlock(via->lock);
+ mtx_lock(&via->lock);
r = pci_read_config(dev, VIA_PCI_SPDIF, 1);
- snd_mtxunlock(via->lock);
+ mtx_unlock(&via->lock);
new_en = (r & VIA_SPDIF_EN) ? 1 : 0;
err = sysctl_handle_int(oidp, &new_en, 0, req);
@@ -179,9 +179,9 @@ sysctl_via8233_spdif_enable(SYSCTL_HANDLER_ARGS)
r |= VIA_SPDIF_EN;
else
r &= ~VIA_SPDIF_EN;
- snd_mtxlock(via->lock);
+ mtx_lock(&via->lock);
pci_write_config(dev, VIA_PCI_SPDIF, r, 1);
- snd_mtxunlock(via->lock);
+ mtx_unlock(&via->lock);
return (0);
}
@@ -195,9 +195,9 @@ sysctl_via8233_dxs_src(SYSCTL_HANDLER_ARGS)
dev = oidp->oid_arg1;
via = pcm_getdevinfo(dev);
- snd_mtxlock(via->lock);
+ mtx_lock(&via->lock);
val = via->dxs_src;
- snd_mtxunlock(via->lock);
+ mtx_unlock(&via->lock);
err = sysctl_handle_int(oidp, &val, 0, req);
if (err || req->newptr == NULL)
@@ -205,9 +205,9 @@ sysctl_via8233_dxs_src(SYSCTL_HANDLER_ARGS)
if (val < 0 || val > 1)
return (EINVAL);
- snd_mtxlock(via->lock);
+ mtx_lock(&via->lock);
via->dxs_src = val;
- snd_mtxunlock(via->lock);
+ mtx_unlock(&via->lock);
return (0);
}
@@ -223,9 +223,9 @@ sysctl_via_polling(SYSCTL_HANDLER_ARGS)
via = pcm_getdevinfo(dev);
if (via == NULL)
return (EINVAL);
- snd_mtxlock(via->lock);
+ mtx_lock(&via->lock);
val = via->polling;
- snd_mtxunlock(via->lock);
+ mtx_unlock(&via->lock);
err = sysctl_handle_int(oidp, &val, 0, req);
if (err || req->newptr == NULL)
@@ -233,7 +233,7 @@ sysctl_via_polling(SYSCTL_HANDLER_ARGS)
if (val < 0 || val > 1)
return (EINVAL);
- snd_mtxlock(via->lock);
+ mtx_lock(&via->lock);
if (val != via->polling) {
if (via_chan_active(via) != 0)
err = EBUSY;
@@ -242,7 +242,7 @@ sysctl_via_polling(SYSCTL_HANDLER_ARGS)
else
via->polling = 1;
}
- snd_mtxunlock(via->lock);
+ mtx_unlock(&via->lock);
return (err);
}
@@ -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;
@@ -411,9 +411,9 @@ via8233wr_setformat(kobj_t obj, void *data, uint32_t format)
f |= WR_FORMAT_STEREO;
if (format & AFMT_S16_LE)
f |= WR_FORMAT_16BIT;
- snd_mtxlock(via->lock);
+ mtx_lock(&via->lock);
via_wr(via, VIA_WR0_FORMAT, f, 4);
- snd_mtxunlock(via->lock);
+ mtx_unlock(&via->lock);
return (0);
}
@@ -426,7 +426,7 @@ via8233dxs_setformat(kobj_t obj, void *data, uint32_t format)
uint32_t r, v;
r = ch->rbase + VIA8233_RP_DXS_RATEFMT;
- snd_mtxlock(via->lock);
+ mtx_lock(&via->lock);
v = via_rd(via, r, 4);
v &= ~(VIA8233_DXS_RATEFMT_STEREO | VIA8233_DXS_RATEFMT_16BIT);
@@ -435,7 +435,7 @@ via8233dxs_setformat(kobj_t obj, void *data, uint32_t format)
if (format & AFMT_16BIT)
v |= VIA8233_DXS_RATEFMT_16BIT;
via_wr(via, r, v, 4);
- snd_mtxunlock(via->lock);
+ mtx_unlock(&via->lock);
return (0);
}
@@ -457,10 +457,10 @@ via8233msgd_setformat(kobj_t obj, void *data, uint32_t format)
s |= SLOT3(1) | SLOT4(1);
}
- snd_mtxlock(via->lock);
+ mtx_lock(&via->lock);
via_wr(via, VIA_MC_SLOT_SELECT, s, 4);
via_wr(via, VIA_MC_SGD_FORMAT, v, 1);
- snd_mtxunlock(via->lock);
+ mtx_unlock(&via->lock);
return (0);
}
@@ -488,14 +488,14 @@ via8233dxs_setspeed(kobj_t obj, void *data, uint32_t speed)
uint32_t r, v;
r = ch->rbase + VIA8233_RP_DXS_RATEFMT;
- snd_mtxlock(via->lock);
+ mtx_lock(&via->lock);
v = via_rd(via, r, 4) & ~VIA8233_DXS_RATEFMT_48K;
/* Careful to avoid overflow (divide by 48 per vt8233c docs) */
v |= VIA8233_DXS_RATEFMT_48K * (speed / 48) / (48000 / 48);
via_wr(via, r, v, 4);
- snd_mtxunlock(via->lock);
+ mtx_unlock(&via->lock);
return (speed);
}
@@ -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)
blkcnt = VIA_SEGS_MIN;
- while ((blksz * blkcnt) > sndbuf_getmaxsize(ch->buffer)) {
+ while ((blksz * blkcnt) > ch->buffer->maxsize) {
if ((blkcnt >> 1) >= VIA_SEGS_MIN)
blkcnt >>= 1;
else if ((blksz >> 1) >= VIA_BLK_MIN)
@@ -586,14 +586,14 @@ via8233chan_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(via->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);
}
@@ -616,13 +616,13 @@ via8233chan_getptr(kobj_t obj, void *data)
struct via_info *via = ch->parent;
uint32_t v, index, count, ptr;
- snd_mtxlock(via->lock);
+ mtx_lock(&via->lock);
if (via->polling != 0) {
ptr = ch->ptr;
- snd_mtxunlock(via->lock);
+ mtx_unlock(&via->lock);
} else {
v = via_rd(via, ch->rbase + VIA_RP_CURRENT_COUNT, 4);
- snd_mtxunlock(via->lock);
+ mtx_unlock(&via->lock);
index = v >> 24; /* Last completed buffer */
count = v & 0x00ffffff; /* Bytes remaining */
ptr = (index + 1) * ch->blksz - count;
@@ -660,7 +660,7 @@ via8233wr_init(kobj_t obj, void *devinfo, struct snd_dbuf *b,
struct via_chinfo *ch;
int num;
- snd_mtxlock(via->lock);
+ mtx_lock(&via->lock);
num = via->rec_num++;
ch = &via->rch[num];
ch->parent = via;
@@ -670,15 +670,15 @@ via8233wr_init(kobj_t obj, void *devinfo, struct snd_dbuf *b,
ch->blkcnt = via->blkcnt;
ch->rbase = VIA_WR_BASE(num);
via_wr(via, ch->rbase + VIA_WR_RP_SGD_FORMAT, WR_FIFO_ENABLE, 1);
- snd_mtxunlock(via->lock);
+ mtx_unlock(&via->lock);
if (sndbuf_alloc(ch->buffer, via->parent_dmat, 0, via->bufsz) != 0)
return (NULL);
- snd_mtxlock(via->lock);
+ mtx_lock(&via->lock);
via8233chan_sgdinit(via, ch, num);
via8233chan_reset(via, ch);
- snd_mtxunlock(via->lock);
+ mtx_unlock(&via->lock);
return (ch);
}
@@ -691,7 +691,7 @@ via8233dxs_init(kobj_t obj, void *devinfo, struct snd_dbuf *b,
struct via_chinfo *ch;
int num;
- snd_mtxlock(via->lock);
+ mtx_lock(&via->lock);
num = via->play_num++;
ch = &via->pch[num];
ch->parent = via;
@@ -707,15 +707,15 @@ via8233dxs_init(kobj_t obj, void *devinfo, struct snd_dbuf *b,
*/
ch->rbase = VIA_DXS_BASE(NDXSCHANS - 1 - via->n_dxs_registered);
via->n_dxs_registered++;
- snd_mtxunlock(via->lock);
+ mtx_unlock(&via->lock);
if (sndbuf_alloc(ch->buffer, via->parent_dmat, 0, via->bufsz) != 0)
return (NULL);
- snd_mtxlock(via->lock);
+ mtx_lock(&via->lock);
via8233chan_sgdinit(via, ch, NWRCHANS + num);
via8233chan_reset(via, ch);
- snd_mtxunlock(via->lock);
+ mtx_unlock(&via->lock);
return (ch);
}
@@ -728,7 +728,7 @@ via8233msgd_init(kobj_t obj, void *devinfo, struct snd_dbuf *b,
struct via_chinfo *ch;
int num;
- snd_mtxlock(via->lock);
+ mtx_lock(&via->lock);
num = via->play_num++;
ch = &via->pch[num];
ch->parent = via;
@@ -737,15 +737,15 @@ via8233msgd_init(kobj_t obj, void *devinfo, struct snd_dbuf *b,
ch->dir = dir;
ch->rbase = VIA_MC_SGD_STATUS;
ch->blkcnt = via->blkcnt;
- snd_mtxunlock(via->lock);
+ mtx_unlock(&via->lock);
if (sndbuf_alloc(ch->buffer, via->parent_dmat, 0, via->bufsz) != 0)
return (NULL);
- snd_mtxlock(via->lock);
+ mtx_lock(&via->lock);
via8233chan_sgdinit(via, ch, NWRCHANS + num);
via8233chan_reset(via, ch);
- snd_mtxunlock(via->lock);
+ mtx_unlock(&via->lock);
return (ch);
}
@@ -807,9 +807,9 @@ via_poll_callback(void *arg)
if (via == NULL)
return;
- snd_mtxlock(via->lock);
+ mtx_lock(&via->lock);
if (via->polling == 0 || via_chan_active(via) == 0) {
- snd_mtxunlock(via->lock);
+ mtx_unlock(&via->lock);
return;
}
@@ -825,7 +825,7 @@ via_poll_callback(void *arg)
callout_reset(&via->poll_timer, 1/*via->poll_ticks*/,
via_poll_callback, via);
- snd_mtxunlock(via->lock);
+ mtx_unlock(&via->lock);
for (i = 0; i < NDXSCHANS + NMSGDCHANS; i++) {
if (ptrigger & (1 << i))
@@ -850,8 +850,7 @@ via_poll_ticks(struct via_info *via)
if (ch->channel == NULL || ch->active == 0)
continue;
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;
@@ -866,8 +865,7 @@ via_poll_ticks(struct via_info *via)
if (ch->channel == NULL || ch->active == 0)
continue;
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;
@@ -890,7 +888,7 @@ via8233chan_trigger(kobj_t obj, void* data, int go)
if (!PCMTRIG_COMMON(go))
return (0);
- snd_mtxlock(via->lock);
+ mtx_lock(&via->lock);
switch(go) {
case PCMTRIG_START:
via_buildsgdt(ch);
@@ -900,8 +898,8 @@ via8233chan_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;
@@ -959,7 +957,7 @@ via8233chan_trigger(kobj_t obj, void* data, int go)
default:
break;
}
- snd_mtxunlock(via->lock);
+ mtx_unlock(&via->lock);
return (0);
}
@@ -1011,9 +1009,9 @@ via_intr(void *p)
uint32_t ptrigger = 0, rtrigger = 0;
int i, reg, stat;
- snd_mtxlock(via->lock);
+ mtx_lock(&via->lock);
if (via->polling != 0) {
- snd_mtxunlock(via->lock);
+ mtx_unlock(&via->lock);
return;
}
/* Poll playback channels */
@@ -1048,7 +1046,7 @@ via_intr(void *p)
rtrigger |= 1 << i;
}
}
- snd_mtxunlock(via->lock);
+ mtx_unlock(&via->lock);
for (i = 0; i < NDXSCHANS + NMSGDCHANS; i++) {
if (ptrigger & (1 << i))
@@ -1170,8 +1168,8 @@ via_attach(device_t dev)
uint32_t revid;
via = malloc(sizeof *via, M_DEVBUF, M_WAITOK | M_ZERO);
- via->lock = snd_mtxcreate(device_get_nameunit(dev),
- "snd_via8233 softc");
+ mtx_init(&via->lock, device_get_nameunit(dev), "snd_via8233 softc",
+ MTX_DEF);
via->dev = dev;
callout_init(&via->poll_timer, 1);
@@ -1386,8 +1384,7 @@ bad:
bus_dmamem_free(via->sgd_dmat, via->sgd_table, via->sgd_dmamap);
if (via->sgd_dmat)
bus_dma_tag_destroy(via->sgd_dmat);
- if (via->lock)
- snd_mtxfree(via->lock);
+ mtx_destroy(&via->lock);
if (via)
free(via, M_DEVBUF);
return (ENXIO);
@@ -1406,10 +1403,10 @@ via_detach(device_t dev)
via = pcm_getdevinfo(dev);
if (via != NULL && (via->play_num != 0 || via->rec_num != 0)) {
- snd_mtxlock(via->lock);
+ mtx_lock(&via->lock);
via->polling = 0;
callout_stop(&via->poll_timer);
- snd_mtxunlock(via->lock);
+ mtx_unlock(&via->lock);
callout_drain(&via->poll_timer);
}
@@ -1420,7 +1417,7 @@ via_detach(device_t dev)
bus_dmamap_unload(via->sgd_dmat, via->sgd_dmamap);
bus_dmamem_free(via->sgd_dmat, via->sgd_table, via->sgd_dmamap);
bus_dma_tag_destroy(via->sgd_dmat);
- snd_mtxfree(via->lock);
+ mtx_destroy(&via->lock);
free(via, M_DEVBUF);
return (0);
}
diff --git a/sys/dev/sound/pci/via82c686.c b/sys/dev/sound/pci/via82c686.c
index 40f3521a57a2..fe34583b1a25 100644
--- a/sys/dev/sound/pci/via82c686.c
+++ b/sys/dev/sound/pci/via82c686.c
@@ -90,7 +90,7 @@ struct via_info {
struct via_chinfo pch, rch;
struct via_dma_op *sgd_table;
u_int16_t codec_caps;
- struct mtx *lock;
+ struct mtx lock;
};
static u_int32_t via_fmt[] = {
@@ -226,8 +226,8 @@ via_buildsgdt(struct via_chinfo *ch)
* is feeding.
*/
seg_size = ch->blksz;
- segs = sndbuf_getsize(ch->buffer) / seg_size;
- phys_addr = sndbuf_getbufaddr(ch->buffer);
+ segs = ch->buffer->bufsize / seg_size;
+ phys_addr = ch->buffer->buf_addr;
for (i = 0; i < segs; i++) {
flag = (i == segs - 1)? VIA_DMAOP_EOL : VIA_DMAOP_FLAG;
@@ -245,7 +245,7 @@ viachan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b, struct pcm_channel *
struct via_info *via = devinfo;
struct via_chinfo *ch;
- snd_mtxlock(via->lock);
+ mtx_lock(&via->lock);
if (dir == PCMDIR_PLAY) {
ch = &via->pch;
ch->base = VIA_PLAY_DMAOPS_BASE;
@@ -268,7 +268,7 @@ viachan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b, struct pcm_channel *
ch->channel = c;
ch->buffer = b;
ch->dir = dir;
- snd_mtxunlock(via->lock);
+ mtx_unlock(&via->lock);
if (sndbuf_alloc(ch->buffer, via->parent_dmat, 0, via->bufsz) != 0)
return NULL;
@@ -290,12 +290,12 @@ viachan_setformat(kobj_t obj, void *data, u_int32_t format)
mode_set |= VIA_RPMODE_16BIT;
DEB(printf("set format: dir = %d, format=%x\n", ch->dir, format));
- snd_mtxlock(via->lock);
+ mtx_lock(&via->lock);
mode = via_rd(via, ch->mode, 1);
mode &= ~(VIA_RPMODE_16BIT | VIA_RPMODE_STEREO);
mode |= mode_set;
via_wr(via, ch->mode, mode, 1);
- snd_mtxunlock(via->lock);
+ mtx_unlock(&via->lock);
return 0;
}
@@ -346,14 +346,14 @@ viachan_trigger(kobj_t obj, void *data, int go)
DEB(printf("ado located at va=%p pa=%x\n", ch->sgd_table, sgd_addr));
- snd_mtxlock(via->lock);
+ mtx_lock(&via->lock);
if (go == PCMTRIG_START) {
via_buildsgdt(ch);
via_wr(via, ch->base, sgd_addr, 4);
via_wr(via, ch->ctrl, VIA_RPCTRL_START, 1);
} else
via_wr(via, ch->ctrl, VIA_RPCTRL_TERMINATE, 1);
- snd_mtxunlock(via->lock);
+ mtx_unlock(&via->lock);
DEB(printf("viachan_trigger: go=%d\n", go));
return 0;
@@ -367,13 +367,13 @@ viachan_getptr(kobj_t obj, void *data)
bus_addr_t sgd_addr = ch->sgd_addr;
u_int32_t ptr, base, base1, len, seg;
- snd_mtxlock(via->lock);
+ mtx_lock(&via->lock);
base1 = via_rd(via, ch->base, 4);
len = via_rd(via, ch->count, 4);
base = via_rd(via, ch->base, 4);
if (base != base1) /* Avoid race hazard */
len = via_rd(via, ch->count, 4);
- snd_mtxunlock(via->lock);
+ mtx_unlock(&via->lock);
DEB(printf("viachan_getptr: len / base = %x / %x\n", len, base));
@@ -385,7 +385,7 @@ viachan_getptr(kobj_t obj, void *data)
seg = SEGS_PER_CHAN;
/* Now work out offset: seg less count */
- ptr = (seg * sndbuf_getsize(ch->buffer) / SEGS_PER_CHAN) - len;
+ ptr = (seg * ch->buffer->bufsize / SEGS_PER_CHAN) - len;
if (ch->dir == PCMDIR_REC) {
/* DMA appears to operate on memory 'lines' of 32 bytes */
/* so don't return any part line - it isn't in RAM yet */
@@ -426,22 +426,22 @@ via_intr(void *p)
/* DEB(printf("viachan_intr\n")); */
/* Read channel */
- snd_mtxlock(via->lock);
+ mtx_lock(&via->lock);
if (via_rd(via, VIA_PLAY_STAT, 1) & VIA_RPSTAT_INTR) {
via_wr(via, VIA_PLAY_STAT, VIA_RPSTAT_INTR, 1);
- snd_mtxunlock(via->lock);
+ mtx_unlock(&via->lock);
chn_intr(via->pch.channel);
- snd_mtxlock(via->lock);
+ mtx_lock(&via->lock);
}
/* Write channel */
if (via_rd(via, VIA_RECORD_STAT, 1) & VIA_RPSTAT_INTR) {
via_wr(via, VIA_RECORD_STAT, VIA_RPSTAT_INTR, 1);
- snd_mtxunlock(via->lock);
+ mtx_unlock(&via->lock);
chn_intr(via->rch.channel);
return;
}
- snd_mtxunlock(via->lock);
+ mtx_unlock(&via->lock);
}
/*
@@ -472,8 +472,8 @@ via_attach(device_t dev)
u_int32_t data, cnt;
via = malloc(sizeof(*via), M_DEVBUF, M_WAITOK | M_ZERO);
- via->lock = snd_mtxcreate(device_get_nameunit(dev),
- "snd_via82c686 softc");
+ mtx_init(&via->lock, device_get_nameunit(dev), "snd_via82c686 softc",
+ MTX_DEF);
pci_enable_busmaster(dev);
@@ -600,7 +600,7 @@ bad:
if (via->sgd_addr) bus_dmamap_unload(via->sgd_dmat, via->sgd_dmamap);
if (via->sgd_table) bus_dmamem_free(via->sgd_dmat, via->sgd_table, via->sgd_dmamap);
if (via->sgd_dmat) bus_dma_tag_destroy(via->sgd_dmat);
- if (via->lock) snd_mtxfree(via->lock);
+ mtx_destroy(&via->lock);
if (via) free(via, M_DEVBUF);
return ENXIO;
}
@@ -623,7 +623,7 @@ via_detach(device_t dev)
bus_dmamap_unload(via->sgd_dmat, via->sgd_dmamap);
bus_dmamem_free(via->sgd_dmat, via->sgd_table, via->sgd_dmamap);
bus_dma_tag_destroy(via->sgd_dmat);
- snd_mtxfree(via->lock);
+ mtx_destroy(&via->lock);
free(via, M_DEVBUF);
return 0;
}
diff --git a/sys/dev/sound/pci/vibes.c b/sys/dev/sound/pci/vibes.c
index 7e908f188614..1b7353464503 100644
--- a/sys/dev/sound/pci/vibes.c
+++ b/sys/dev/sound/pci/vibes.c
@@ -204,7 +204,7 @@ svchan_init(kobj_t obj, void *devinfo, struct snd_dbuf *b, struct pcm_channel *c
}
ch->buffer = b;
ch->fmt = SND_FORMAT(AFMT_U8, 1, 0);
- ch->spd = DSP_DEFAULT_SPEED;
+ ch->spd = 8000;
ch->dma_active = ch->dma_was_active = 0;
return ch;
@@ -328,9 +328,9 @@ svrchan_trigger(kobj_t obj, void *data, int go)
sv_indirect_set(sc, SV_REG_FORMAT, v);
/* Program DMA */
- count = sndbuf_getsize(ch->buffer) / 2; /* DMAC uses words */
+ count = ch->buffer->bufsize / 2; /* DMAC uses words */
sv_dma_set_config(sc->dmac_st, sc->dmac_sh,
- sndbuf_getbufaddr(ch->buffer),
+ ch->buffer->buf_addr,
count - 1,
SV_DMA_MODE_AUTO | SV_DMA_MODE_RD);
count = count / SV_INTR_PER_BUFFER - 1;
@@ -360,7 +360,7 @@ svrchan_getptr(kobj_t obj, void *data)
struct sc_info *sc = ch->parent;
u_int32_t sz, remain;
- sz = sndbuf_getsize(ch->buffer);
+ sz = ch->buffer->bufsize;
/* DMAC uses words */
remain = (sv_dma_get_count(sc->dmac_st, sc->dmac_sh) + 1) * 2;
return sz - remain;
@@ -404,9 +404,9 @@ svpchan_trigger(kobj_t obj, void *data, int go)
sv_indirect_set(sc, SV_REG_FORMAT, v);
/* Program DMA */
- count = sndbuf_getsize(ch->buffer);
+ count = ch->buffer->bufsize;
sv_dma_set_config(sc->dmaa_st, sc->dmaa_sh,
- sndbuf_getbufaddr(ch->buffer),
+ ch->buffer->buf_addr,
count - 1,
SV_DMA_MODE_AUTO | SV_DMA_MODE_WR);
count = count / SV_INTR_PER_BUFFER - 1;
@@ -437,7 +437,7 @@ svpchan_getptr(kobj_t obj, void *data)
struct sc_info *sc = ch->parent;
u_int32_t sz, remain;
- sz = sndbuf_getsize(ch->buffer);
+ sz = ch->buffer->bufsize;
/* DMAA uses bytes */
remain = sv_dma_get_count(sc->dmaa_st, sc->dmaa_sh) + 1;
return (sz - remain);