Lines Matching +full:0 +full:d
55 &snd_unit_auto, 0, "assign default unit to a newly attached device");
57 SYSCTL_NODE(_hw, OID_AUTO, snd, CTLFLAG_RD | CTLFLAG_MPSAFE, 0,
99 struct snddev_info *d; in snd_setup_intr() local
103 d = device_get_softc(dev); in snd_setup_intr()
104 if (d != NULL && (flags & INTR_MPSAFE)) in snd_setup_intr()
105 d->flags |= SD_F_MPSAFE; in snd_setup_intr()
113 struct snddev_info *d; in sysctl_hw_snd_default_unit() local
117 error = sysctl_handle_int(oidp, &unit, 0, req); in sysctl_hw_snd_default_unit()
118 if (error == 0 && req->newptr != NULL) { in sysctl_hw_snd_default_unit()
120 d = devclass_get_softc(pcm_devclass, unit); in sysctl_hw_snd_default_unit()
121 if (!PCM_REGISTERED(d) || CHN_EMPTY(d, channels.pcm)) { in sysctl_hw_snd_default_unit()
126 snd_unit_auto = 0; in sysctl_hw_snd_default_unit()
133 CTLTYPE_INT | CTLFLAG_RWTUN | CTLFLAG_ANYBODY | CTLFLAG_MPSAFE, 0,
140 struct snddev_info *d = device_get_softc(dev); in pcm_addchan() local
143 PCM_LOCK(d); in pcm_addchan()
144 PCM_WAIT(d); in pcm_addchan()
145 PCM_ACQUIRE(d); in pcm_addchan()
146 ch = chn_init(d, NULL, cls, dir, devinfo); in pcm_addchan()
148 device_printf(d->dev, "chn_init(%s, %d, %p) failed\n", in pcm_addchan()
150 PCM_UNLOCK(d); in pcm_addchan()
153 PCM_RELEASE(d); in pcm_addchan()
154 PCM_UNLOCK(d); in pcm_addchan()
156 return (0); in pcm_addchan()
160 pcm_killchans(struct snddev_info *d) in pcm_killchans() argument
165 PCM_BUSYASSERT(d); in pcm_killchans()
166 KASSERT(!PCM_REGISTERED(d), ("%s(): still registered\n", __func__)); in pcm_killchans()
171 CHN_FOREACH(ch, d, channels.pcm) { in pcm_killchans()
173 if (ch->inprog == 0 && ch->sleeping == 0 && in pcm_killchans()
191 pause_sbt("pcmkillchans", mstosbt(5), 0, 0); in pcm_killchans()
197 while (!CHN_EMPTY(d, channels.pcm)) { in pcm_killchans()
198 ch = CHN_FIRST(d, channels.pcm); in pcm_killchans()
202 if (d->p_unr != NULL) in pcm_killchans()
203 delete_unrhdr(d->p_unr); in pcm_killchans()
204 if (d->vp_unr != NULL) in pcm_killchans()
205 delete_unrhdr(d->vp_unr); in pcm_killchans()
206 if (d->r_unr != NULL) in pcm_killchans()
207 delete_unrhdr(d->r_unr); in pcm_killchans()
208 if (d->vr_unr != NULL) in pcm_killchans()
209 delete_unrhdr(d->vr_unr); in pcm_killchans()
215 struct snddev_info *d; in pcm_best_unit() local
221 for (i = 0; pcm_devclass != NULL && in pcm_best_unit()
223 d = devclass_get_softc(pcm_devclass, i); in pcm_best_unit()
224 if (!PCM_REGISTERED(d)) in pcm_best_unit()
226 prio = 0; in pcm_best_unit()
227 if (d->playcount == 0) in pcm_best_unit()
229 if (d->reccount == 0) in pcm_best_unit()
244 struct snddev_info *d = device_get_softc(dev); in pcm_getflags() local
246 return d->flags; in pcm_getflags()
252 struct snddev_info *d = device_get_softc(dev); in pcm_setflags() local
254 d->flags = val; in pcm_setflags()
260 struct snddev_info *d = device_get_softc(dev); in pcm_getdevinfo() local
262 return d->devinfo; in pcm_getdevinfo()
268 struct snddev_info *d = device_get_softc(dev); in pcm_getbuffersize() local
271 sz = 0; in pcm_getbuffersize()
272 if (resource_int_value(device_get_name(dev), device_get_unit(dev), "buffersize", &sz) == 0) { in pcm_getbuffersize()
276 …device_printf(dev, "'buffersize=%d' hint is out of range (%d-%d), using %d\n", x, minbufsz, maxbuf… in pcm_getbuffersize()
283 device_printf(dev, "'buffersize=%d' hint is not a power of 2, using %d\n", sz, x); in pcm_getbuffersize()
290 d->bufsz = sz; in pcm_getbuffersize()
298 struct snddev_info *d; in sysctl_dev_pcm_bitperfect() local
301 d = oidp->oid_arg1; in sysctl_dev_pcm_bitperfect()
302 if (!PCM_REGISTERED(d)) in sysctl_dev_pcm_bitperfect()
305 PCM_LOCK(d); in sysctl_dev_pcm_bitperfect()
306 PCM_WAIT(d); in sysctl_dev_pcm_bitperfect()
307 val = (d->flags & SD_F_BITPERFECT) ? 1 : 0; in sysctl_dev_pcm_bitperfect()
308 PCM_ACQUIRE(d); in sysctl_dev_pcm_bitperfect()
309 PCM_UNLOCK(d); in sysctl_dev_pcm_bitperfect()
311 err = sysctl_handle_int(oidp, &val, 0, req); in sysctl_dev_pcm_bitperfect()
313 if (err == 0 && req->newptr != NULL) { in sysctl_dev_pcm_bitperfect()
314 if (!(val == 0 || val == 1)) { in sysctl_dev_pcm_bitperfect()
315 PCM_RELEASE_QUICK(d); in sysctl_dev_pcm_bitperfect()
319 PCM_LOCK(d); in sysctl_dev_pcm_bitperfect()
321 d->flags &= ~SD_F_BITPERFECT; in sysctl_dev_pcm_bitperfect()
322 d->flags |= (val != 0) ? SD_F_BITPERFECT : 0; in sysctl_dev_pcm_bitperfect()
324 PCM_RELEASE(d); in sysctl_dev_pcm_bitperfect()
325 PCM_UNLOCK(d); in sysctl_dev_pcm_bitperfect()
327 PCM_RELEASE_QUICK(d); in sysctl_dev_pcm_bitperfect()
335 struct snddev_info *d; in sysctl_dev_pcm_mode() local
336 int mode = 0; in sysctl_dev_pcm_mode()
338 d = oidp->oid_arg1; in sysctl_dev_pcm_mode()
339 if (!PCM_REGISTERED(d)) in sysctl_dev_pcm_mode()
342 PCM_LOCK(d); in sysctl_dev_pcm_mode()
343 if (d->playcount > 0) in sysctl_dev_pcm_mode()
345 if (d->reccount > 0) in sysctl_dev_pcm_mode()
347 if (d->mixer_dev != NULL) in sysctl_dev_pcm_mode()
349 PCM_UNLOCK(d); in sysctl_dev_pcm_mode()
351 return (sysctl_handle_int(oidp, &mode, 0, req)); in sysctl_dev_pcm_mode()
357 struct snddev_info *d = device_get_softc(dev); in pcm_sysinit() local
359 sysctl_ctx_init(&d->play_sysctl_ctx); in pcm_sysinit()
360 d->play_sysctl_tree = SYSCTL_ADD_NODE(&d->play_sysctl_ctx, in pcm_sysinit()
362 CTLFLAG_RD | CTLFLAG_MPSAFE, 0, "playback channels node"); in pcm_sysinit()
363 sysctl_ctx_init(&d->rec_sysctl_ctx); in pcm_sysinit()
364 d->rec_sysctl_tree = SYSCTL_ADD_NODE(&d->rec_sysctl_ctx, in pcm_sysinit()
366 CTLFLAG_RD | CTLFLAG_MPSAFE, 0, "recording channels node"); in pcm_sysinit()
372 OID_AUTO, "buffersize", CTLFLAG_RD, &d->bufsz, 0, "allocated buffer size"); in pcm_sysinit()
375 "bitperfect", CTLTYPE_INT | CTLFLAG_RWTUN | CTLFLAG_MPSAFE, d, in pcm_sysinit()
376 sizeof(d), sysctl_dev_pcm_bitperfect, "I", in pcm_sysinit()
377 "bit-perfect playback/recording (0=disable, 1=enable)"); in pcm_sysinit()
380 "mode", CTLTYPE_INT | CTLFLAG_RD | CTLFLAG_MPSAFE, d, sizeof(d), in pcm_sysinit()
385 if (d->flags & SD_F_EQ) in pcm_sysinit()
396 struct snddev_info *d; in pcm_init() local
399 d = device_get_softc(dev); in pcm_init()
400 d->dev = dev; in pcm_init()
401 d->lock = snd_mtxcreate(device_get_nameunit(dev), "sound cdev"); in pcm_init()
402 cv_init(&d->cv, device_get_nameunit(dev)); in pcm_init()
404 i = 0; in pcm_init()
406 "vpc", &i) != 0 || i != 0) in pcm_init()
407 d->flags |= SD_F_VPC; in pcm_init()
410 "bitperfect", &i) == 0 && i != 0) in pcm_init()
411 d->flags |= SD_F_BITPERFECT; in pcm_init()
413 d->devinfo = devinfo; in pcm_init()
414 d->reccount = 0; in pcm_init()
415 d->playcount = 0; in pcm_init()
416 d->pvchancount = 0; in pcm_init()
417 d->rvchancount = 0; in pcm_init()
418 d->pvchanrate = 0; in pcm_init()
419 d->pvchanformat = 0; in pcm_init()
420 d->rvchanrate = 0; in pcm_init()
421 d->rvchanformat = 0; in pcm_init()
422 d->p_unr = new_unrhdr(0, INT_MAX, NULL); in pcm_init()
423 d->vp_unr = new_unrhdr(0, INT_MAX, NULL); in pcm_init()
424 d->r_unr = new_unrhdr(0, INT_MAX, NULL); in pcm_init()
425 d->vr_unr = new_unrhdr(0, INT_MAX, NULL); in pcm_init()
427 CHN_INIT(d, channels.pcm); in pcm_init()
428 CHN_INIT(d, channels.pcm.busy); in pcm_init()
429 CHN_INIT(d, channels.pcm.opened); in pcm_init()
430 CHN_INIT(d, channels.pcm.primary); in pcm_init()
436 struct snddev_info *d = device_get_softc(dev); in pcm_register() local
439 if (d->flags & SD_F_REGISTERED) in pcm_register()
442 if (d->playcount == 0 || d->reccount == 0) in pcm_register()
443 d->flags |= SD_F_SIMPLEX; in pcm_register()
444 if (d->playcount > 0) in pcm_register()
445 d->flags |= SD_F_PVCHANS; in pcm_register()
446 if (d->reccount > 0) in pcm_register()
447 d->flags |= SD_F_RVCHANS; in pcm_register()
449 strlcpy(d->status, str, SND_STATUSLEN); in pcm_register()
452 d->flags |= SD_F_REGISTERED; in pcm_register()
460 if (snd_unit_auto < 0) in pcm_register()
461 snd_unit_auto = (snd_unit < 0) ? 1 : 0; in pcm_register()
462 if (snd_unit < 0 || snd_unit_auto > 1) in pcm_register()
467 sndstat_register(dev, d->status); in pcm_register()
475 struct snddev_info *d; in pcm_unregister() local
477 d = device_get_softc(dev); in pcm_unregister()
479 if (!PCM_ALIVE(d)) { in pcm_unregister()
481 return (0); in pcm_unregister()
484 PCM_LOCK(d); in pcm_unregister()
485 PCM_WAIT(d); in pcm_unregister()
487 d->flags &= ~SD_F_REGISTERED; in pcm_unregister()
489 PCM_ACQUIRE(d); in pcm_unregister()
490 PCM_UNLOCK(d); in pcm_unregister()
492 pcm_killchans(d); in pcm_unregister()
494 PCM_RELEASE_QUICK(d); in pcm_unregister()
496 if (d->play_sysctl_tree != NULL) { in pcm_unregister()
497 sysctl_ctx_free(&d->play_sysctl_ctx); in pcm_unregister()
498 d->play_sysctl_tree = NULL; in pcm_unregister()
500 if (d->rec_sysctl_tree != NULL) { in pcm_unregister()
501 sysctl_ctx_free(&d->rec_sysctl_ctx); in pcm_unregister()
502 d->rec_sysctl_tree = NULL; in pcm_unregister()
509 cv_destroy(&d->cv); in pcm_unregister()
510 snd_mtxfree(d->lock); in pcm_unregister()
514 if (snd_unit_auto == 0) in pcm_unregister()
518 return (0); in pcm_unregister()
548 struct snddev_info *d; in sound_oss_sysinfo() local
562 si->numaudioengines = 0; in sound_oss_sysinfo()
565 j = 0; in sound_oss_sysinfo()
568 for (i = 0; pcm_devclass != NULL && in sound_oss_sysinfo()
570 d = devclass_get_softc(pcm_devclass, i); in sound_oss_sysinfo()
571 if (!PCM_REGISTERED(d)) in sound_oss_sysinfo()
577 PCM_UNLOCKASSERT(d); in sound_oss_sysinfo()
578 PCM_LOCK(d); in sound_oss_sysinfo()
580 si->numaudioengines += PCM_CHANCOUNT(d); in sound_oss_sysinfo()
582 CHN_FOREACH(c, d, channels.pcm) { in sound_oss_sysinfo()
592 PCM_UNLOCK(d); in sound_oss_sysinfo()
596 si->numsynths = 0; /* OSSv4 docs: this field is obsolete */ in sound_oss_sysinfo()
608 si->nummidis = 0; in sound_oss_sysinfo()
609 si->numtimers = 0; in sound_oss_sysinfo()
635 for (i = 0; i < nitems(si->filler); i++) in sound_oss_sysinfo()
642 struct snddev_info *d; in sound_oss_card_info() local
646 for (i = 0; pcm_devclass != NULL && in sound_oss_card_info()
648 d = devclass_get_softc(pcm_devclass, i); in sound_oss_card_info()
652 if (!PCM_REGISTERED(d)) { in sound_oss_card_info()
654 "pcm%d (n/a)", i); in sound_oss_card_info()
657 si->hw_info[0] = '\0'; in sound_oss_card_info()
658 si->intr_count = si->ack_count = 0; in sound_oss_card_info()
660 PCM_UNLOCKASSERT(d); in sound_oss_card_info()
661 PCM_LOCK(d); in sound_oss_card_info()
663 strlcpy(si->shortname, device_get_nameunit(d->dev), in sound_oss_card_info()
665 strlcpy(si->longname, device_get_desc(d->dev), in sound_oss_card_info()
667 strlcpy(si->hw_info, d->status, sizeof(si->hw_info)); in sound_oss_card_info()
668 si->intr_count = si->ack_count = 0; in sound_oss_card_info()
670 PCM_UNLOCK(d); in sound_oss_card_info()
674 return (0); in sound_oss_card_info()
686 if (snd_verbose < 0 || snd_verbose > 4) in sound_global_init()
689 if (snd_unit < 0) in sound_global_init()
716 printf("%s: snd_unit=%d snd_vchans_enable=%d " in sound_global_init()
717 "latency=%d " in sound_global_init()
718 "feeder_rate_min=%d feeder_rate_max=%d " in sound_global_init()
719 "feeder_rate_round=%d\n", in sound_global_init()
731 ret = 0; in sound_modevent()