Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/sound/pcm/sound.c
Show First 20 Lines • Show All 1,009 Lines • ▼ Show 20 Lines | sysctl_hw_snd_clone_gc(SYSCTL_HANDLER_ARGS) | ||||
return (err); | return (err); | ||||
} | } | ||||
SYSCTL_PROC(_hw_snd, OID_AUTO, clone_gc, | SYSCTL_PROC(_hw_snd, OID_AUTO, clone_gc, | ||||
CTLTYPE_INT | CTLFLAG_RWTUN | CTLFLAG_NEEDGIANT, 0, sizeof(int), | CTLTYPE_INT | CTLFLAG_RWTUN | CTLFLAG_NEEDGIANT, 0, sizeof(int), | ||||
sysctl_hw_snd_clone_gc, "I", | sysctl_hw_snd_clone_gc, "I", | ||||
"global clone garbage collector"); | "global clone garbage collector"); | ||||
#endif | #endif | ||||
static u_int8_t | |||||
pcm_mode_init(struct snddev_info *d) | |||||
{ | |||||
u_int8_t mode = 0; | |||||
if (d->playcount > 0) | |||||
mode |= PCM_MODE_PLAY; | |||||
if (d->reccount > 0) | |||||
mode |= PCM_MODE_REC; | |||||
if (d->mixer_dev != NULL) | |||||
mode |= PCM_MODE_MIXER; | |||||
return (mode); | |||||
} | |||||
static void | static void | ||||
pcm_sysinit(device_t dev) | pcm_sysinit(device_t dev) | ||||
{ | { | ||||
struct snddev_info *d = device_get_softc(dev); | struct snddev_info *d = device_get_softc(dev); | ||||
u_int8_t mode; | |||||
/* XXX: an user should be able to set this with a control tool, the | mode = pcm_mode_init(d); | ||||
/* XXX: a user should be able to set this with a control tool, the | |||||
sysadmin then needs min+max sysctls for this */ | sysadmin then needs min+max sysctls for this */ | ||||
SYSCTL_ADD_UINT(device_get_sysctl_ctx(dev), | SYSCTL_ADD_UINT(device_get_sysctl_ctx(dev), | ||||
SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), | SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), | ||||
OID_AUTO, "buffersize", CTLFLAG_RD, &d->bufsz, 0, "allocated buffer size"); | OID_AUTO, "buffersize", CTLFLAG_RD, &d->bufsz, 0, "allocated buffer size"); | ||||
SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev), | SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev), | ||||
SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), OID_AUTO, | SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), OID_AUTO, | ||||
"bitperfect", CTLTYPE_INT | CTLFLAG_RWTUN | CTLFLAG_NEEDGIANT, d, | "bitperfect", CTLTYPE_INT | CTLFLAG_RWTUN | CTLFLAG_NEEDGIANT, d, | ||||
sizeof(d), sysctl_dev_pcm_bitperfect, "I", | sizeof(d), sysctl_dev_pcm_bitperfect, "I", | ||||
"bit-perfect playback/recording (0=disable, 1=enable)"); | "bit-perfect playback/recording (0=disable, 1=enable)"); | ||||
SYSCTL_ADD_UINT(device_get_sysctl_ctx(dev), | |||||
SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), | |||||
OID_AUTO, "mode", CTLFLAG_RD, NULL, mode, | |||||
"mode (1=mixer, 2=play, 4=rec. The values are OR'ed if more than one" | |||||
"mode is supported)"); | |||||
#ifdef SND_DEBUG | #ifdef SND_DEBUG | ||||
SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev), | SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev), | ||||
SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), OID_AUTO, | SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), OID_AUTO, | ||||
"clone_flags", CTLTYPE_UINT | CTLFLAG_RWTUN | CTLFLAG_NEEDGIANT, | "clone_flags", CTLTYPE_UINT | CTLFLAG_RWTUN | CTLFLAG_NEEDGIANT, | ||||
d, sizeof(d), sysctl_dev_pcm_clone_flags, "IU", | d, sizeof(d), sysctl_dev_pcm_clone_flags, "IU", | ||||
"clone flags"); | "clone flags"); | ||||
SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev), | SYSCTL_ADD_PROC(device_get_sysctl_ctx(dev), | ||||
SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), OID_AUTO, | SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), OID_AUTO, | ||||
▲ Show 20 Lines • Show All 87 Lines • ▼ Show 20 Lines | #endif | ||||
sysctl_ctx_init(&d->play_sysctl_ctx); | sysctl_ctx_init(&d->play_sysctl_ctx); | ||||
d->play_sysctl_tree = SYSCTL_ADD_NODE(&d->play_sysctl_ctx, | d->play_sysctl_tree = SYSCTL_ADD_NODE(&d->play_sysctl_ctx, | ||||
SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), OID_AUTO, "play", | SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), OID_AUTO, "play", | ||||
CTLFLAG_RD | CTLFLAG_MPSAFE, 0, "playback channels node"); | CTLFLAG_RD | CTLFLAG_MPSAFE, 0, "playback channels node"); | ||||
sysctl_ctx_init(&d->rec_sysctl_ctx); | sysctl_ctx_init(&d->rec_sysctl_ctx); | ||||
d->rec_sysctl_tree = SYSCTL_ADD_NODE(&d->rec_sysctl_ctx, | d->rec_sysctl_tree = SYSCTL_ADD_NODE(&d->rec_sysctl_ctx, | ||||
SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), OID_AUTO, "rec", | SYSCTL_CHILDREN(device_get_sysctl_tree(dev)), OID_AUTO, "rec", | ||||
CTLFLAG_RD | CTLFLAG_MPSAFE, 0, "record channels node"); | CTLFLAG_RD | CTLFLAG_MPSAFE, 0, "recording channels node"); | ||||
if (numplay > 0 || numrec > 0) | if (numplay > 0 || numrec > 0) | ||||
d->flags |= SD_F_AUTOVCHAN; | d->flags |= SD_F_AUTOVCHAN; | ||||
sndstat_register(dev, d->status, sndstat_prepare_pcm); | sndstat_register(dev, d->status, sndstat_prepare_pcm); | ||||
return 0; | return 0; | ||||
} | } | ||||
▲ Show 20 Lines • Show All 289 Lines • Show Last 20 Lines |