aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/sound/pci/via8233.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/dev/sound/pci/via8233.c')
-rw-r--r--sys/dev/sound/pci/via8233.c127
1 files changed, 62 insertions, 65 deletions
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);
}