Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/sound/pcm/sound.c
Show All 12 Lines | |||||
return EINVAL; | return EINVAL; | ||||
snd_unit = unit; | snd_unit = unit; | ||||
snd_unit_auto = 0; | snd_unit_auto = 0; | ||||
} | } | ||||
return (error); | return (error); | ||||
} | } | ||||
/* XXX: do we need a way to let the user change the default unit? */ | /* XXX: do we need a way to let the user change the default unit? */ | ||||
SYSCTL_PROC(_hw_snd, OID_AUTO, default_unit, | SYSCTL_PROC(_hw_snd, OID_AUTO, default_unit, | ||||
CTLTYPE_INT | CTLFLAG_RWTUN | CTLFLAG_ANYBODY, | CTLTYPE_INT | CTLFLAG_RWTUN | CTLFLAG_ANYBODY | CTLFLAG_NEEDGIANT, | ||||
0, sizeof(int), sysctl_hw_snd_default_unit, "I", | 0, sizeof(int), sysctl_hw_snd_default_unit, "I", | ||||
"default sound device"); | "default sound device"); | ||||
static int | static int | ||||
sysctl_hw_snd_maxautovchans(SYSCTL_HANDLER_ARGS) | sysctl_hw_snd_maxautovchans(SYSCTL_HANDLER_ARGS) | ||||
{ | { | ||||
struct snddev_info *d; | struct snddev_info *d; | ||||
int i, v, error; | int i, v, error; | ||||
v = snd_maxautovchans; | v = snd_maxautovchans; | ||||
Show All 11 Lines | |||||
continue; | continue; | ||||
PCM_ACQUIRE_QUICK(d); | PCM_ACQUIRE_QUICK(d); | ||||
pcm_setmaxautovchans(d, v); | pcm_setmaxautovchans(d, v); | ||||
PCM_RELEASE_QUICK(d); | PCM_RELEASE_QUICK(d); | ||||
} | } | ||||
} | } | ||||
return (error); | return (error); | ||||
} | } | ||||
SYSCTL_PROC(_hw_snd, OID_AUTO, maxautovchans, CTLTYPE_INT | CTLFLAG_RWTUN, | SYSCTL_PROC(_hw_snd, OID_AUTO, maxautovchans, | ||||
0, sizeof(int), sysctl_hw_snd_maxautovchans, "I", "maximum virtual channel"); | CTLTYPE_INT | CTLFLAG_RWTUN | CTLFLAG_NEEDGIANT, | ||||
0, sizeof(int), sysctl_hw_snd_maxautovchans, "I", | |||||
"maximum virtual channel"); | |||||
struct pcm_channel * | struct pcm_channel * | ||||
pcm_chn_create(struct snddev_info *d, struct pcm_channel *parent, kobj_class_t cls, int dir, int num, void *devinfo) | pcm_chn_create(struct snddev_info *d, struct pcm_channel *parent, kobj_class_t cls, int dir, int num, void *devinfo) | ||||
{ | { | ||||
struct pcm_channel *ch; | struct pcm_channel *ch; | ||||
int direction, err, rpnum, *pnum, max; | int direction, err, rpnum, *pnum, max; | ||||
int udc, device, chan; | int udc, device, chan; | ||||
char *dirs, *devname, buf[CHN_NAMELEN]; | char *dirs, *devname, buf[CHN_NAMELEN]; | ||||
Show All 24 Lines | |||||
if (bootverbose != 0 || snd_verbose > 3) | if (bootverbose != 0 || snd_verbose > 3) | ||||
device_printf(d->dev, "clone gc: pruned=%d\n", | device_printf(d->dev, "clone gc: pruned=%d\n", | ||||
val); | val); | ||||
} | } | ||||
} | } | ||||
return (err); | return (err); | ||||
} | } | ||||
SYSCTL_PROC(_hw_snd, OID_AUTO, clone_gc, CTLTYPE_INT | CTLFLAG_RWTUN, | SYSCTL_PROC(_hw_snd, OID_AUTO, clone_gc, | ||||
CTLTYPE_INT | CTLFLAG_RWTUN | CTLFLAG_NEEDGIANT, | |||||
0, sizeof(int), sysctl_hw_snd_clone_gc, "I", | 0, sizeof(int), sysctl_hw_snd_clone_gc, "I", | ||||
"global clone garbage collector"); | "global clone garbage collector"); | ||||
#endif | #endif | ||||
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); | ||||
/* XXX: an user should be able to set this with a control tool, the | /* XXX: an 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, d, sizeof(d), | "bitperfect", | ||||
CTLTYPE_INT | CTLFLAG_RWTUN | CTLFLAG_NEEDGIANT, d, sizeof(d), | |||||
sysctl_dev_pcm_bitperfect, "I", | sysctl_dev_pcm_bitperfect, "I", | ||||
"bit-perfect playback/recording (0=disable, 1=enable)"); | "bit-perfect playback/recording (0=disable, 1=enable)"); | ||||
#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, d, sizeof(d), | "clone_flags", | ||||
CTLTYPE_UINT | CTLFLAG_RWTUN | CTLFLAG_NEEDGIANT, d, sizeof(d), | |||||
sysctl_dev_pcm_clone_flags, "IU", | 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, | ||||
"clone_deadline", CTLTYPE_INT | CTLFLAG_RWTUN, d, sizeof(d), | "clone_deadline", | ||||
CTLTYPE_INT | CTLFLAG_RWTUN | CTLFLAG_NEEDGIANT, d, sizeof(d), | |||||
sysctl_dev_pcm_clone_deadline, "I", | sysctl_dev_pcm_clone_deadline, "I", | ||||
"clone expiration deadline (ms)"); | "clone expiration deadline (ms)"); | ||||
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_gc", CTLTYPE_INT | CTLFLAG_RWTUN, d, sizeof(d), | "clone_gc", | ||||
CTLTYPE_INT | CTLFLAG_RWTUN | CTLFLAG_NEEDGIANT, d, sizeof(d), | |||||
sysctl_dev_pcm_clone_gc, "I", | sysctl_dev_pcm_clone_gc, "I", | ||||
"clone garbage collector"); | "clone garbage collector"); | ||||
#endif | #endif | ||||
if (d->flags & SD_F_AUTOVCHAN) | if (d->flags & SD_F_AUTOVCHAN) | ||||
vchan_initsys(dev); | vchan_initsys(dev); | ||||
if (d->flags & SD_F_EQ) | if (d->flags & SD_F_EQ) | ||||
feeder_eq_initsys(dev); | feeder_eq_initsys(dev); | ||||
} | } | ||||
Show All 12 Lines |