Lines Matching +full:- +full:d +full:-

1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
4 * Copyright (c) 2005-2009 Ariff Abdullah <ariff@FreeBSD.org>
5 * Portions Copyright (c) Ryan Beasley <ryan.beasley@gmail.com> - GSoC 2006
9 * Copyright (c) 2024-2025 The FreeBSD Foundation
51 int snd_unit = -1;
53 static int snd_unit_auto = -1;
97 struct snddev_info *d; in snd_setup_intr() local
101 d = device_get_softc(dev); in snd_setup_intr()
102 if (d != NULL && (flags & INTR_MPSAFE)) in snd_setup_intr()
103 d->flags |= SD_F_MPSAFE; in snd_setup_intr()
111 struct snddev_info *d; in sysctl_hw_snd_default_unit() local
116 if (error == 0 && req->newptr != NULL) { in sysctl_hw_snd_default_unit()
118 d = devclass_get_softc(pcm_devclass, unit); in sysctl_hw_snd_default_unit()
119 if (!PCM_REGISTERED(d) || CHN_EMPTY(d, channels.pcm)) { in sysctl_hw_snd_default_unit()
138 struct snddev_info *d = device_get_softc(dev); in pcm_addchan() local
142 PCM_LOCK(d); in pcm_addchan()
143 PCM_WAIT(d); in pcm_addchan()
144 PCM_ACQUIRE(d); in pcm_addchan()
145 ch = chn_init(d, NULL, cls, dir, devinfo); in pcm_addchan()
147 device_printf(d->dev, "chn_init(%s, %d, %p) failed\n", in pcm_addchan()
148 cls->name, dir, devinfo); in pcm_addchan()
151 PCM_RELEASE(d); in pcm_addchan()
152 PCM_UNLOCK(d); in pcm_addchan()
158 pcm_killchans(struct snddev_info *d) in pcm_killchans() argument
163 PCM_BUSYASSERT(d); in pcm_killchans()
164 KASSERT(!PCM_REGISTERED(d), ("%s(): still registered\n", __func__)); in pcm_killchans()
169 CHN_FOREACH(ch, d, channels.pcm) { in pcm_killchans()
171 if (ch->inprog == 0 && ch->sleeping == 0 && in pcm_killchans()
177 if (ch->direction == PCMDIR_PLAY) in pcm_killchans()
195 while (!CHN_EMPTY(d, channels.pcm)) { in pcm_killchans()
196 ch = CHN_FIRST(d, channels.pcm); in pcm_killchans()
200 if (d->p_unr != NULL) in pcm_killchans()
201 delete_unrhdr(d->p_unr); in pcm_killchans()
202 if (d->vp_unr != NULL) in pcm_killchans()
203 delete_unrhdr(d->vp_unr); in pcm_killchans()
204 if (d->r_unr != NULL) in pcm_killchans()
205 delete_unrhdr(d->r_unr); in pcm_killchans()
206 if (d->vr_unr != NULL) in pcm_killchans()
207 delete_unrhdr(d->vr_unr); in pcm_killchans()
213 struct snddev_info *d; in pcm_best_unit() local
216 best = -1; in pcm_best_unit()
217 bestprio = -100; in pcm_best_unit()
221 d = devclass_get_softc(pcm_devclass, i); in pcm_best_unit()
222 if (!PCM_REGISTERED(d)) in pcm_best_unit()
225 if (d->playcount == 0) in pcm_best_unit()
226 prio -= 10; in pcm_best_unit()
227 if (d->reccount == 0) in pcm_best_unit()
228 prio -= 2; in pcm_best_unit()
242 struct snddev_info *d = device_get_softc(dev); in pcm_getflags() local
244 return d->flags; in pcm_getflags()
250 struct snddev_info *d = device_get_softc(dev); in pcm_setflags() local
252 d->flags = val; in pcm_setflags()
258 struct snddev_info *d = device_get_softc(dev); in pcm_getdevinfo() local
260 return d->devinfo; in pcm_getdevinfo()
266 struct snddev_info *d = device_get_softc(dev); in pcm_getbuffersize() local
274 …device_printf(dev, "'buffersize=%d' hint is out of range (%d-%d), using %d\n", x, minbufsz, maxbuf… in pcm_getbuffersize()
281 device_printf(dev, "'buffersize=%d' hint is not a power of 2, using %d\n", sz, x); in pcm_getbuffersize()
288 d->bufsz = sz; in pcm_getbuffersize()
296 struct snddev_info *d; in sysctl_dev_pcm_bitperfect() local
299 d = oidp->oid_arg1; in sysctl_dev_pcm_bitperfect()
300 if (!PCM_REGISTERED(d)) in sysctl_dev_pcm_bitperfect()
303 PCM_LOCK(d); in sysctl_dev_pcm_bitperfect()
304 PCM_WAIT(d); in sysctl_dev_pcm_bitperfect()
305 val = (d->flags & SD_F_BITPERFECT) ? 1 : 0; in sysctl_dev_pcm_bitperfect()
306 PCM_ACQUIRE(d); in sysctl_dev_pcm_bitperfect()
307 PCM_UNLOCK(d); in sysctl_dev_pcm_bitperfect()
311 if (err == 0 && req->newptr != NULL) { in sysctl_dev_pcm_bitperfect()
313 PCM_RELEASE_QUICK(d); in sysctl_dev_pcm_bitperfect()
317 PCM_LOCK(d); in sysctl_dev_pcm_bitperfect()
319 d->flags &= ~SD_F_BITPERFECT; in sysctl_dev_pcm_bitperfect()
320 d->flags |= (val != 0) ? SD_F_BITPERFECT : 0; in sysctl_dev_pcm_bitperfect()
322 PCM_RELEASE(d); in sysctl_dev_pcm_bitperfect()
323 PCM_UNLOCK(d); in sysctl_dev_pcm_bitperfect()
325 PCM_RELEASE_QUICK(d); in sysctl_dev_pcm_bitperfect()
333 struct snddev_info *d; in sysctl_dev_pcm_mode() local
336 d = oidp->oid_arg1; in sysctl_dev_pcm_mode()
337 if (!PCM_REGISTERED(d)) in sysctl_dev_pcm_mode()
340 PCM_LOCK(d); in sysctl_dev_pcm_mode()
341 if (d->playcount > 0) in sysctl_dev_pcm_mode()
343 if (d->reccount > 0) in sysctl_dev_pcm_mode()
345 if (d->mixer_dev != NULL) in sysctl_dev_pcm_mode()
347 PCM_UNLOCK(d); in sysctl_dev_pcm_mode()
359 struct snddev_info *d; in pcm_init() local
362 d = device_get_softc(dev); in pcm_init()
363 d->dev = dev; in pcm_init()
364 d->lock = snd_mtxcreate(device_get_nameunit(dev), "sound cdev"); in pcm_init()
365 cv_init(&d->cv, device_get_nameunit(dev)); in pcm_init()
370 d->flags |= SD_F_VPC; in pcm_init()
374 d->flags |= SD_F_BITPERFECT; in pcm_init()
376 d->devinfo = devinfo; in pcm_init()
377 d->reccount = 0; in pcm_init()
378 d->playcount = 0; in pcm_init()
379 d->pvchancount = 0; in pcm_init()
380 d->rvchancount = 0; in pcm_init()
381 d->pvchanrate = 0; in pcm_init()
382 d->pvchanformat = 0; in pcm_init()
383 d->rvchanrate = 0; in pcm_init()
384 d->rvchanformat = 0; in pcm_init()
385 d->p_unr = new_unrhdr(0, INT_MAX, NULL); in pcm_init()
386 d->vp_unr = new_unrhdr(0, INT_MAX, NULL); in pcm_init()
387 d->r_unr = new_unrhdr(0, INT_MAX, NULL); in pcm_init()
388 d->vr_unr = new_unrhdr(0, INT_MAX, NULL); in pcm_init()
390 CHN_INIT(d, channels.pcm); in pcm_init()
391 CHN_INIT(d, channels.pcm.busy); in pcm_init()
392 CHN_INIT(d, channels.pcm.opened); in pcm_init()
393 CHN_INIT(d, channels.pcm.primary); in pcm_init()
399 struct snddev_info *d = device_get_softc(dev); in pcm_register() local
402 if (d->flags & SD_F_REGISTERED) in pcm_register()
405 if (d->playcount == 0 || d->reccount == 0) in pcm_register()
406 d->flags |= SD_F_SIMPLEX; in pcm_register()
407 if (d->playcount > 0) in pcm_register()
408 d->flags |= SD_F_PVCHANS; in pcm_register()
409 if (d->reccount > 0) in pcm_register()
410 d->flags |= SD_F_RVCHANS; in pcm_register()
412 strlcpy(d->status, str, SND_STATUSLEN); in pcm_register()
415 d->flags |= SD_F_REGISTERED; in pcm_register()
421 sysctl_ctx_init(&d->play_sysctl_ctx); in pcm_register()
422 d->play_sysctl_tree = SYSCTL_ADD_NODE(&d->play_sysctl_ctx, in pcm_register()
425 sysctl_ctx_init(&d->rec_sysctl_ctx); in pcm_register()
426 d->rec_sysctl_tree = SYSCTL_ADD_NODE(&d->rec_sysctl_ctx, in pcm_register()
434 OID_AUTO, "buffersize", CTLFLAG_RD, &d->bufsz, 0, in pcm_register()
438 "bitperfect", CTLTYPE_INT | CTLFLAG_RWTUN | CTLFLAG_MPSAFE, d, in pcm_register()
439 sizeof(d), sysctl_dev_pcm_bitperfect, "I", in pcm_register()
440 "bit-perfect playback/recording (0=disable, 1=enable)"); in pcm_register()
443 "mode", CTLTYPE_INT | CTLFLAG_RD | CTLFLAG_MPSAFE, d, sizeof(d), in pcm_register()
448 if (d->flags & SD_F_EQ) in pcm_register()
458 sndstat_register(dev, d->status); in pcm_register()
466 struct snddev_info *d; in pcm_unregister() local
468 d = device_get_softc(dev); in pcm_unregister()
470 if (!PCM_ALIVE(d)) { in pcm_unregister()
475 PCM_LOCK(d); in pcm_unregister()
476 PCM_WAIT(d); in pcm_unregister()
478 d->flags &= ~SD_F_REGISTERED; in pcm_unregister()
480 PCM_ACQUIRE(d); in pcm_unregister()
481 PCM_UNLOCK(d); in pcm_unregister()
483 pcm_killchans(d); in pcm_unregister()
485 PCM_RELEASE_QUICK(d); in pcm_unregister()
487 if (d->play_sysctl_tree != NULL) { in pcm_unregister()
488 sysctl_ctx_free(&d->play_sysctl_ctx); in pcm_unregister()
489 d->play_sysctl_tree = NULL; in pcm_unregister()
491 if (d->rec_sysctl_tree != NULL) { in pcm_unregister()
492 sysctl_ctx_free(&d->rec_sysctl_ctx); in pcm_unregister()
493 d->rec_sysctl_tree = NULL; in pcm_unregister()
500 cv_destroy(&d->cv); in pcm_unregister()
501 snd_mtxfree(d->lock); in pcm_unregister()
504 snd_unit = pcm_best_unit(-1); in pcm_unregister()
539 struct snddev_info *d; in sound_oss_sysinfo() local
544 strlcpy(si->product, si_product, sizeof(si->product)); in sound_oss_sysinfo()
545 strlcpy(si->version, si_version, sizeof(si->version)); in sound_oss_sysinfo()
546 si->versionnum = SOUND_VERSION; in sound_oss_sysinfo()
547 strlcpy(si->license, si_license, sizeof(si->license)); in sound_oss_sysinfo()
553 si->numaudioengines = 0; in sound_oss_sysinfo()
554 bzero((void *)&si->openedaudio, sizeof(si->openedaudio)); in sound_oss_sysinfo()
561 d = devclass_get_softc(pcm_devclass, i); in sound_oss_sysinfo()
562 if (!PCM_REGISTERED(d)) in sound_oss_sysinfo()
568 PCM_UNLOCKASSERT(d); in sound_oss_sysinfo()
569 PCM_LOCK(d); in sound_oss_sysinfo()
571 si->numaudioengines += PCM_CHANCOUNT(d); in sound_oss_sysinfo()
573 CHN_FOREACH(c, d, channels.pcm) { in sound_oss_sysinfo()
576 if (c->flags & CHN_F_BUSY) in sound_oss_sysinfo()
577 si->openedaudio[j / intnbits] |= in sound_oss_sysinfo()
583 PCM_UNLOCK(d); in sound_oss_sysinfo()
587 si->numsynths = 0; /* OSSv4 docs: this field is obsolete */ in sound_oss_sysinfo()
599 si->nummidis = 0; in sound_oss_sysinfo()
600 si->numtimers = 0; in sound_oss_sysinfo()
607 si->nummixers = devclass_get_maxunit(pcm_devclass); in sound_oss_sysinfo()
608 si->numcards = devclass_get_maxunit(pcm_devclass); in sound_oss_sysinfo()
609 si->numaudios = devclass_get_maxunit(pcm_devclass); in sound_oss_sysinfo()
618 * si->openedmidi = " MIDI devices in sound_oss_sysinfo()
620 bzero((void *)&si->openedmidi, sizeof(si->openedmidi)); in sound_oss_sysinfo()
623 * Si->filler is a reserved array, but according to docs each in sound_oss_sysinfo()
624 * element should be set to -1. in sound_oss_sysinfo()
626 for (i = 0; i < nitems(si->filler); i++) in sound_oss_sysinfo()
627 si->filler[i] = -1; in sound_oss_sysinfo()
633 struct snddev_info *d; in sound_oss_card_info() local
639 d = devclass_get_softc(pcm_devclass, i); in sound_oss_card_info()
640 if (i != si->card) in sound_oss_card_info()
643 if (!PCM_REGISTERED(d)) { in sound_oss_card_info()
644 snprintf(si->shortname, sizeof(si->shortname), in sound_oss_card_info()
645 "pcm%d (n/a)", i); in sound_oss_card_info()
646 strlcpy(si->longname, "Device unavailable", in sound_oss_card_info()
647 sizeof(si->longname)); in sound_oss_card_info()
648 si->hw_info[0] = '\0'; in sound_oss_card_info()
649 si->intr_count = si->ack_count = 0; in sound_oss_card_info()
651 PCM_UNLOCKASSERT(d); in sound_oss_card_info()
652 PCM_LOCK(d); in sound_oss_card_info()
654 strlcpy(si->shortname, device_get_nameunit(d->dev), in sound_oss_card_info()
655 sizeof(si->shortname)); in sound_oss_card_info()
656 strlcpy(si->longname, device_get_desc(d->dev), in sound_oss_card_info()
657 sizeof(si->longname)); in sound_oss_card_info()
658 strlcpy(si->hw_info, d->status, sizeof(si->hw_info)); in sound_oss_card_info()
659 si->intr_count = si->ack_count = 0; in sound_oss_card_info()
661 PCM_UNLOCK(d); in sound_oss_card_info()
681 snd_unit = -1; in sound_global_init()
707 printf("%s: snd_unit=%d snd_vchans_enable=%d " in sound_global_init()
708 "latency=%d " in sound_global_init()
709 "feeder_rate_min=%d feeder_rate_max=%d " in sound_global_init()
710 "feeder_rate_round=%d\n", in sound_global_init()