History log of /openbsd-current/sys/dev/pci/fms.c
Revision (<<< Hide revision tags) (Show revision tags >>>) Date Author Comments
# 1.39 09-Jun-2024 jsg

remove prototypes with no matching function


# 1.38 24-May-2024 jsg

remove unneeded includes; ok miod@


# 1.37 13-May-2024 jsg

remove prototypes with no matching function
ok mpi@


Revision tags: OPENBSD_7_3_BASE OPENBSD_7_4_BASE OPENBSD_7_5_BASE
# 1.36 26-Oct-2022 kn

Make audio(9) get_props() optional, remove it from duplex drivers

The property bits of audio(9) are obsolete and ought to be removed
completely.

sys/dev/audio.c:audio_open() currently uses get_props() to bail out if
read *and* write was requested on a non-duplex driver.

Drivers that currently support playing but not recording need adjustment
before the API can be cleaned up.

Drivers that advertise themselves as full duplex, i.e. those that always
return AUDIO_PROP_FULLDUPLEX unconditionally in their get_props() currently
always succeed this check.

As this is the only property, losen audio_open()'s DIAGNOSTIC check and only
do the duplex check if the driver provides get_props().

This allows for simple removal of get_props() from full-duplex drivers
without adding any other code or without changing functionality.

This includes all audio drivers under sys/dev/pci/ (maestro(4) being the
only unfinished exception here).

Other drivers as well as the API change can then follow in smaller diffs.

This builds on amd64, arm64, i386, macppc and sparc64.
amd64 with azalia(4) still plays, records as well as plays and records
at the same time on my X230 as tested with

$ aucat -i play.wav [-o rec.wav]

alpha and hppa tests by miod
OK ratchov miod


# 1.35 19-Oct-2022 kn

Use C99 struct init for struct audio_hw_if

This audio(9) struct will lose a member, but drivers init their struct quite
inconsistently, most pre-C99 style.

Use C99 style everywhere, to get rid of all annoying differences and allow
for easy member removals/additions:
- don't change current order of members
- no explicit NULL members
- no comments or blank lines
- trailing comma in last member line

GENERIC.MP builds fine with this on arm64, amd64, i386 and sparc64.

macppc and alpha build-tested by miod
OK ratchov miod


# 1.34 18-Oct-2022 kn

Remove unused AUDIO_PROP_{MMAP,INDEPENDENT}

AUDIO_PROP_FULLDUPLEX is the only audio(9) in use, the other two died with
commit 1cf2860827c8ca659d8097d8da94a5ae5b888c53
Author: ratchov <ratchov@openbsd.org>
Date: Thu Jun 25 06:43:45 2015 +0000

Reimplement the audio driver in a simpler way, removing unused/unusable
functionality. Same API and ABI except for the removed bits and no
behaviour change for programs using libsndio. With help from armani@
and mpi@, thanks.

but remained defined and set in drivers.

and the following merely moved them when they were dead code already:

commit 9215aa3dfad387bca877a805534df6dcfe8722eb
Author: ratchov <ratchov@openbsd.org>
Date: Wed Aug 31 07:22:43 2016 +0000

Delete unused ioctls and associated macros. Move macros that are still
used internally by low-level drivers from sys/audioio.h to
dev/audio_if.h instead of deleting them.

None of this is used in base or ports; codesearch.debian.net only shows
AUDIO_PROP_{CAPTURE,PLAYBACK} in firefox-esr, mozjs and cubeb.

ratchov points out that audio_if.h and audioio.h are private interfaces
and the codesearch shows SunOS and NetBSD bits (#ifdef'd out on OpenBSD).

OK ratchov


Revision tags: OPENBSD_7_1_BASE OPENBSD_7_2_BASE
# 1.33 21-Mar-2022 miod

Constify struct {audio,midi,radio,video}_hw_if. No functional change.

ok mpi@ ratchov@ "More const is good" deraadt@


# 1.32 11-Mar-2022 mpi

Constify struct cfattach.


# 1.31 16-Feb-2022 anton

Make room for a cookie argument passed to audio_attach_mi(). Currently
unused but intended to be used to correlate audio and wskbd devices.

ok ratchov@


Revision tags: OPENBSD_6_1_BASE OPENBSD_6_2_BASE OPENBSD_6_3_BASE OPENBSD_6_4_BASE OPENBSD_6_5_BASE OPENBSD_6_6_BASE OPENBSD_6_7_BASE OPENBSD_6_8_BASE OPENBSD_6_9_BASE OPENBSD_7_0_BASE
# 1.30 20-Dec-2016 ratchov

Set free(9) size argument. From Michael W. Bombardieri <mb at ii.net>.
Thanks.


# 1.29 19-Sep-2016 ratchov

Remove unused getdev() audio driver functions.


# 1.28 14-Sep-2016 ratchov

Remove drain(), query_encoding(), mappage() and get_default_params()
methods from all audio drivers and from the audio_if structure as they
are never called.


Revision tags: OPENBSD_5_8_BASE OPENBSD_5_9_BASE OPENBSD_6_0_BASE
# 1.27 11-May-2015 ratchov

Remove all audio format conversion code from the kernel (btw holding
the kernel_lock), as we already do better conversions in
user-mode. Yet, no need for every single driver to fiddle with the
conversion code as they are done transparently by common MI code. With
help from armani and miod, support from mpi

ok armani@


Revision tags: OPENBSD_5_6_BASE OPENBSD_5_7_BASE
# 1.26 12-Jul-2014 tedu

add a size argument to free. will be used soon, but for now default to 0.
after discussions with beck deraadt kettenis.


Revision tags: OPENBSD_5_5_BASE
# 1.25 15-Nov-2013 brad

ansify some function definitions.
no functional change.

ok sthen@


Revision tags: OPENBSD_5_4_BASE
# 1.24 24-May-2013 ratchov

Since audio code is mp safe, establish isa and pci audio interrupts
with the IPL_MPSAFE flag. In certain circumstances, this prevents
interrupt handlers from waiting the global kernel_lock possibly (hold
by slower code) to be released.

ok kettenis


# 1.23 15-May-2013 ratchov

Introduce a global interrupt-aware mutex protecting data
structures (including sound-card registers) from concurent
access by syscall and interrupt code-paths. Since critical
sections remain the same, calls to splraise/spllower can be
safely replaced by calls to mtx_enter/mtx_leave with two
exceptions: (1) mutexes are not reentrant (the inner splraise
is thus removed), and (2) we're not allowed to sleep with a
mutex (either msleep is used or the mutex is released before
sleeping).

ok and help from kettenis, a lot of work from armani


Revision tags: OPENBSD_4_8_BASE OPENBSD_4_9_BASE OPENBSD_5_0_BASE OPENBSD_5_1_BASE OPENBSD_5_2_BASE OPENBSD_5_3_BASE
# 1.22 15-Jul-2010 jakemsr

add two new members to structs audio_encoding and audio_prinfo.
for both structs, the new members are 'bps' and 'msb', which
describe the number of bytes per sample and data alignment in the
sample, respectively. drivers must properly set these fields in
the 'query_encoding', 'set_parameters' and 'get_default_params'
hardware interface methods.

discussed with ratchov, deraadt


# 1.21 04-Apr-2010 jakemsr

configure conversion for the correct direction. I guess no one has
ever tried recording big endian samples with fms.


Revision tags: OPENBSD_4_4_BASE OPENBSD_4_5_BASE OPENBSD_4_6_BASE OPENBSD_4_7_BASE
# 1.20 26-Jun-2008 ray

First pass at removing clauses 3 and 4 from NetBSD licenses.

Not sure what's more surprising: how long it took for NetBSD to
catch up to the rest of the BSDs (including UCB), or the amount of
code that NetBSD has claimed for itself without attributing to the
actual authors.

OK deraadt@


# 1.19 29-May-2008 jakemsr

use ac97 default parameters for these ac97 based drivers.

this makes the emulation expansion factor 1 by default since there's no
emulation. previously the factor was 2 because these drivers emulate
8-bit ulaw playback with 16-bit linear encodings. having a factor
other than 1 by default creates block size and hiwat/lowat issues
with applications that set the block size and hiwat before other
parameters.

ok ratchov@


# 1.18 21-Apr-2008 jakemsr

allow low level audio drivers to specify a default sample format,
instead of 8-bit mono mulaw @ 8kHz.

this is just the infrastructure; no drivers are specifying a default
yet.

ok ratchov@, deanna@


Revision tags: OPENBSD_3_8_BASE OPENBSD_3_9_BASE OPENBSD_4_0_BASE OPENBSD_4_1_BASE OPENBSD_4_2_BASE OPENBSD_4_3_BASE
# 1.17 16-Apr-2005 mickey

do not provide round_buffer if not needed unless explained why in comments


# 1.16 14-Apr-2005 mickey

make sure round_blocksize does not produce 0 after alignment


Revision tags: OPENBSD_3_4_BASE OPENBSD_3_5_BASE OPENBSD_3_6_BASE OPENBSD_3_7_BASE SMP_SYNC_A SMP_SYNC_B UBC_SYNC_A
# 1.15 27-Apr-2003 ho

strcpy/sprintf cleanup of sys/dev. miod@, deraadt@ says to commit.


Revision tags: OPENBSD_3_3_BASE
# 1.14 19-Nov-2002 jason

Add a simplistic table driven lookup routine and use it where appropriate.


Revision tags: UBC_SYNC_B
# 1.13 13-Oct-2002 krw

Remove more '\n's from panic() statements. From Chris Kuethe.


Revision tags: OPENBSD_3_2_BASE
# 1.12 29-May-2002 mickey

there is no need to store ioaddr/iosize into the softc


# 1.11 29-May-2002 mickey

oops


# 1.10 28-May-2002 mickey

fix the fms attachment printfs and move out the radio parts to the fmsradio.c; from jumbo@ and some fixes from mickey@


# 1.9 06-May-2002 mickey

tuner driver for the fms cards.
attach radio at the fms(4), instead of a separate device,
which would never work out fine.
from Vladimir Popov <jumbo@narod.ru>
rework the radio config stuff (radio at radiobus, instead of radio at radio),
allowing to tag source files in the files.* files w/ radio attribute.
from mickey@


Revision tags: OPENBSD_3_1_BASE
# 1.8 14-Mar-2002 millert

Final __P removal plus some cosmetic fixups


# 1.7 14-Mar-2002 millert

First round of __P removal in sys


# 1.6 20-Jan-2002 ericj

make all audio drivers use the new allocm and round_buffersize decl's.
will ease porting, and generally cleans up a bit


Revision tags: UBC_BASE
# 1.5 31-Oct-2001 art

branches: 1.5.2;
Change the audio_hm_if->mappage interface to return paddr_t and take off_t
as the mmap offset.


Revision tags: OPENBSD_3_0_BASE
# 1.4 25-Aug-2001 art

Change pci_intr_map to take pci_attach_args as an argument.
All callers actually took all arguments to pci_intr_map from pci_attach_args
structs, so this simplifies code.
This also allows more complicated interrupt assignment schemes like the one
on sparc64.

This makes sparc64 pci interrupts work.

Inspired by the same change in NetBSD.


# 1.3 12-Jun-2001 niklas

Make pci_mapreg_map take an extra argument where we can
put a size limitation of the PCI region to map. That makes the PERC 3/Di
raid controller usable, as it publishes too much PCI memory for us to map
in the kernel virtual memory. As we only access the first 256 byte it is
of no use to map 128MB of kvm.


Revision tags: OPENBSD_2_8_BASE OPENBSD_2_9_BASE
# 1.2 14-Oct-2000 aaron

branches: 1.2.6;
Add $OpenBSD$ tags.


# 1.1 20-Jul-2000 deraadt

new auvia and fms drivers from netbsd (testing requests sent out, since i cannot find any of these devices)


# 1.38 24-May-2024 jsg

remove unneeded includes; ok miod@


# 1.37 13-May-2024 jsg

remove prototypes with no matching function
ok mpi@


Revision tags: OPENBSD_7_3_BASE OPENBSD_7_4_BASE OPENBSD_7_5_BASE
# 1.36 26-Oct-2022 kn

Make audio(9) get_props() optional, remove it from duplex drivers

The property bits of audio(9) are obsolete and ought to be removed
completely.

sys/dev/audio.c:audio_open() currently uses get_props() to bail out if
read *and* write was requested on a non-duplex driver.

Drivers that currently support playing but not recording need adjustment
before the API can be cleaned up.

Drivers that advertise themselves as full duplex, i.e. those that always
return AUDIO_PROP_FULLDUPLEX unconditionally in their get_props() currently
always succeed this check.

As this is the only property, losen audio_open()'s DIAGNOSTIC check and only
do the duplex check if the driver provides get_props().

This allows for simple removal of get_props() from full-duplex drivers
without adding any other code or without changing functionality.

This includes all audio drivers under sys/dev/pci/ (maestro(4) being the
only unfinished exception here).

Other drivers as well as the API change can then follow in smaller diffs.

This builds on amd64, arm64, i386, macppc and sparc64.
amd64 with azalia(4) still plays, records as well as plays and records
at the same time on my X230 as tested with

$ aucat -i play.wav [-o rec.wav]

alpha and hppa tests by miod
OK ratchov miod


# 1.35 19-Oct-2022 kn

Use C99 struct init for struct audio_hw_if

This audio(9) struct will lose a member, but drivers init their struct quite
inconsistently, most pre-C99 style.

Use C99 style everywhere, to get rid of all annoying differences and allow
for easy member removals/additions:
- don't change current order of members
- no explicit NULL members
- no comments or blank lines
- trailing comma in last member line

GENERIC.MP builds fine with this on arm64, amd64, i386 and sparc64.

macppc and alpha build-tested by miod
OK ratchov miod


# 1.34 18-Oct-2022 kn

Remove unused AUDIO_PROP_{MMAP,INDEPENDENT}

AUDIO_PROP_FULLDUPLEX is the only audio(9) in use, the other two died with
commit 1cf2860827c8ca659d8097d8da94a5ae5b888c53
Author: ratchov <ratchov@openbsd.org>
Date: Thu Jun 25 06:43:45 2015 +0000

Reimplement the audio driver in a simpler way, removing unused/unusable
functionality. Same API and ABI except for the removed bits and no
behaviour change for programs using libsndio. With help from armani@
and mpi@, thanks.

but remained defined and set in drivers.

and the following merely moved them when they were dead code already:

commit 9215aa3dfad387bca877a805534df6dcfe8722eb
Author: ratchov <ratchov@openbsd.org>
Date: Wed Aug 31 07:22:43 2016 +0000

Delete unused ioctls and associated macros. Move macros that are still
used internally by low-level drivers from sys/audioio.h to
dev/audio_if.h instead of deleting them.

None of this is used in base or ports; codesearch.debian.net only shows
AUDIO_PROP_{CAPTURE,PLAYBACK} in firefox-esr, mozjs and cubeb.

ratchov points out that audio_if.h and audioio.h are private interfaces
and the codesearch shows SunOS and NetBSD bits (#ifdef'd out on OpenBSD).

OK ratchov


Revision tags: OPENBSD_7_1_BASE OPENBSD_7_2_BASE
# 1.33 21-Mar-2022 miod

Constify struct {audio,midi,radio,video}_hw_if. No functional change.

ok mpi@ ratchov@ "More const is good" deraadt@


# 1.32 11-Mar-2022 mpi

Constify struct cfattach.


# 1.31 16-Feb-2022 anton

Make room for a cookie argument passed to audio_attach_mi(). Currently
unused but intended to be used to correlate audio and wskbd devices.

ok ratchov@


Revision tags: OPENBSD_6_1_BASE OPENBSD_6_2_BASE OPENBSD_6_3_BASE OPENBSD_6_4_BASE OPENBSD_6_5_BASE OPENBSD_6_6_BASE OPENBSD_6_7_BASE OPENBSD_6_8_BASE OPENBSD_6_9_BASE OPENBSD_7_0_BASE
# 1.30 20-Dec-2016 ratchov

Set free(9) size argument. From Michael W. Bombardieri <mb at ii.net>.
Thanks.


# 1.29 19-Sep-2016 ratchov

Remove unused getdev() audio driver functions.


# 1.28 14-Sep-2016 ratchov

Remove drain(), query_encoding(), mappage() and get_default_params()
methods from all audio drivers and from the audio_if structure as they
are never called.


Revision tags: OPENBSD_5_8_BASE OPENBSD_5_9_BASE OPENBSD_6_0_BASE
# 1.27 11-May-2015 ratchov

Remove all audio format conversion code from the kernel (btw holding
the kernel_lock), as we already do better conversions in
user-mode. Yet, no need for every single driver to fiddle with the
conversion code as they are done transparently by common MI code. With
help from armani and miod, support from mpi

ok armani@


Revision tags: OPENBSD_5_6_BASE OPENBSD_5_7_BASE
# 1.26 12-Jul-2014 tedu

add a size argument to free. will be used soon, but for now default to 0.
after discussions with beck deraadt kettenis.


Revision tags: OPENBSD_5_5_BASE
# 1.25 15-Nov-2013 brad

ansify some function definitions.
no functional change.

ok sthen@


Revision tags: OPENBSD_5_4_BASE
# 1.24 24-May-2013 ratchov

Since audio code is mp safe, establish isa and pci audio interrupts
with the IPL_MPSAFE flag. In certain circumstances, this prevents
interrupt handlers from waiting the global kernel_lock possibly (hold
by slower code) to be released.

ok kettenis


# 1.23 15-May-2013 ratchov

Introduce a global interrupt-aware mutex protecting data
structures (including sound-card registers) from concurent
access by syscall and interrupt code-paths. Since critical
sections remain the same, calls to splraise/spllower can be
safely replaced by calls to mtx_enter/mtx_leave with two
exceptions: (1) mutexes are not reentrant (the inner splraise
is thus removed), and (2) we're not allowed to sleep with a
mutex (either msleep is used or the mutex is released before
sleeping).

ok and help from kettenis, a lot of work from armani


Revision tags: OPENBSD_4_8_BASE OPENBSD_4_9_BASE OPENBSD_5_0_BASE OPENBSD_5_1_BASE OPENBSD_5_2_BASE OPENBSD_5_3_BASE
# 1.22 15-Jul-2010 jakemsr

add two new members to structs audio_encoding and audio_prinfo.
for both structs, the new members are 'bps' and 'msb', which
describe the number of bytes per sample and data alignment in the
sample, respectively. drivers must properly set these fields in
the 'query_encoding', 'set_parameters' and 'get_default_params'
hardware interface methods.

discussed with ratchov, deraadt


# 1.21 04-Apr-2010 jakemsr

configure conversion for the correct direction. I guess no one has
ever tried recording big endian samples with fms.


Revision tags: OPENBSD_4_4_BASE OPENBSD_4_5_BASE OPENBSD_4_6_BASE OPENBSD_4_7_BASE
# 1.20 26-Jun-2008 ray

First pass at removing clauses 3 and 4 from NetBSD licenses.

Not sure what's more surprising: how long it took for NetBSD to
catch up to the rest of the BSDs (including UCB), or the amount of
code that NetBSD has claimed for itself without attributing to the
actual authors.

OK deraadt@


# 1.19 29-May-2008 jakemsr

use ac97 default parameters for these ac97 based drivers.

this makes the emulation expansion factor 1 by default since there's no
emulation. previously the factor was 2 because these drivers emulate
8-bit ulaw playback with 16-bit linear encodings. having a factor
other than 1 by default creates block size and hiwat/lowat issues
with applications that set the block size and hiwat before other
parameters.

ok ratchov@


# 1.18 21-Apr-2008 jakemsr

allow low level audio drivers to specify a default sample format,
instead of 8-bit mono mulaw @ 8kHz.

this is just the infrastructure; no drivers are specifying a default
yet.

ok ratchov@, deanna@


Revision tags: OPENBSD_3_8_BASE OPENBSD_3_9_BASE OPENBSD_4_0_BASE OPENBSD_4_1_BASE OPENBSD_4_2_BASE OPENBSD_4_3_BASE
# 1.17 16-Apr-2005 mickey

do not provide round_buffer if not needed unless explained why in comments


# 1.16 14-Apr-2005 mickey

make sure round_blocksize does not produce 0 after alignment


Revision tags: OPENBSD_3_4_BASE OPENBSD_3_5_BASE OPENBSD_3_6_BASE OPENBSD_3_7_BASE SMP_SYNC_A SMP_SYNC_B UBC_SYNC_A
# 1.15 27-Apr-2003 ho

strcpy/sprintf cleanup of sys/dev. miod@, deraadt@ says to commit.


Revision tags: OPENBSD_3_3_BASE
# 1.14 19-Nov-2002 jason

Add a simplistic table driven lookup routine and use it where appropriate.


Revision tags: UBC_SYNC_B
# 1.13 13-Oct-2002 krw

Remove more '\n's from panic() statements. From Chris Kuethe.


Revision tags: OPENBSD_3_2_BASE
# 1.12 29-May-2002 mickey

there is no need to store ioaddr/iosize into the softc


# 1.11 29-May-2002 mickey

oops


# 1.10 28-May-2002 mickey

fix the fms attachment printfs and move out the radio parts to the fmsradio.c; from jumbo@ and some fixes from mickey@


# 1.9 06-May-2002 mickey

tuner driver for the fms cards.
attach radio at the fms(4), instead of a separate device,
which would never work out fine.
from Vladimir Popov <jumbo@narod.ru>
rework the radio config stuff (radio at radiobus, instead of radio at radio),
allowing to tag source files in the files.* files w/ radio attribute.
from mickey@


Revision tags: OPENBSD_3_1_BASE
# 1.8 14-Mar-2002 millert

Final __P removal plus some cosmetic fixups


# 1.7 14-Mar-2002 millert

First round of __P removal in sys


# 1.6 20-Jan-2002 ericj

make all audio drivers use the new allocm and round_buffersize decl's.
will ease porting, and generally cleans up a bit


Revision tags: UBC_BASE
# 1.5 31-Oct-2001 art

branches: 1.5.2;
Change the audio_hm_if->mappage interface to return paddr_t and take off_t
as the mmap offset.


Revision tags: OPENBSD_3_0_BASE
# 1.4 25-Aug-2001 art

Change pci_intr_map to take pci_attach_args as an argument.
All callers actually took all arguments to pci_intr_map from pci_attach_args
structs, so this simplifies code.
This also allows more complicated interrupt assignment schemes like the one
on sparc64.

This makes sparc64 pci interrupts work.

Inspired by the same change in NetBSD.


# 1.3 12-Jun-2001 niklas

Make pci_mapreg_map take an extra argument where we can
put a size limitation of the PCI region to map. That makes the PERC 3/Di
raid controller usable, as it publishes too much PCI memory for us to map
in the kernel virtual memory. As we only access the first 256 byte it is
of no use to map 128MB of kvm.


Revision tags: OPENBSD_2_8_BASE OPENBSD_2_9_BASE
# 1.2 14-Oct-2000 aaron

branches: 1.2.6;
Add $OpenBSD$ tags.


# 1.1 20-Jul-2000 deraadt

new auvia and fms drivers from netbsd (testing requests sent out, since i cannot find any of these devices)


# 1.37 13-May-2024 jsg

remove prototypes with no matching function
ok mpi@


Revision tags: OPENBSD_7_3_BASE OPENBSD_7_4_BASE OPENBSD_7_5_BASE
# 1.36 26-Oct-2022 kn

Make audio(9) get_props() optional, remove it from duplex drivers

The property bits of audio(9) are obsolete and ought to be removed
completely.

sys/dev/audio.c:audio_open() currently uses get_props() to bail out if
read *and* write was requested on a non-duplex driver.

Drivers that currently support playing but not recording need adjustment
before the API can be cleaned up.

Drivers that advertise themselves as full duplex, i.e. those that always
return AUDIO_PROP_FULLDUPLEX unconditionally in their get_props() currently
always succeed this check.

As this is the only property, losen audio_open()'s DIAGNOSTIC check and only
do the duplex check if the driver provides get_props().

This allows for simple removal of get_props() from full-duplex drivers
without adding any other code or without changing functionality.

This includes all audio drivers under sys/dev/pci/ (maestro(4) being the
only unfinished exception here).

Other drivers as well as the API change can then follow in smaller diffs.

This builds on amd64, arm64, i386, macppc and sparc64.
amd64 with azalia(4) still plays, records as well as plays and records
at the same time on my X230 as tested with

$ aucat -i play.wav [-o rec.wav]

alpha and hppa tests by miod
OK ratchov miod


# 1.35 19-Oct-2022 kn

Use C99 struct init for struct audio_hw_if

This audio(9) struct will lose a member, but drivers init their struct quite
inconsistently, most pre-C99 style.

Use C99 style everywhere, to get rid of all annoying differences and allow
for easy member removals/additions:
- don't change current order of members
- no explicit NULL members
- no comments or blank lines
- trailing comma in last member line

GENERIC.MP builds fine with this on arm64, amd64, i386 and sparc64.

macppc and alpha build-tested by miod
OK ratchov miod


# 1.34 18-Oct-2022 kn

Remove unused AUDIO_PROP_{MMAP,INDEPENDENT}

AUDIO_PROP_FULLDUPLEX is the only audio(9) in use, the other two died with
commit 1cf2860827c8ca659d8097d8da94a5ae5b888c53
Author: ratchov <ratchov@openbsd.org>
Date: Thu Jun 25 06:43:45 2015 +0000

Reimplement the audio driver in a simpler way, removing unused/unusable
functionality. Same API and ABI except for the removed bits and no
behaviour change for programs using libsndio. With help from armani@
and mpi@, thanks.

but remained defined and set in drivers.

and the following merely moved them when they were dead code already:

commit 9215aa3dfad387bca877a805534df6dcfe8722eb
Author: ratchov <ratchov@openbsd.org>
Date: Wed Aug 31 07:22:43 2016 +0000

Delete unused ioctls and associated macros. Move macros that are still
used internally by low-level drivers from sys/audioio.h to
dev/audio_if.h instead of deleting them.

None of this is used in base or ports; codesearch.debian.net only shows
AUDIO_PROP_{CAPTURE,PLAYBACK} in firefox-esr, mozjs and cubeb.

ratchov points out that audio_if.h and audioio.h are private interfaces
and the codesearch shows SunOS and NetBSD bits (#ifdef'd out on OpenBSD).

OK ratchov


Revision tags: OPENBSD_7_1_BASE OPENBSD_7_2_BASE
# 1.33 21-Mar-2022 miod

Constify struct {audio,midi,radio,video}_hw_if. No functional change.

ok mpi@ ratchov@ "More const is good" deraadt@


# 1.32 11-Mar-2022 mpi

Constify struct cfattach.


# 1.31 16-Feb-2022 anton

Make room for a cookie argument passed to audio_attach_mi(). Currently
unused but intended to be used to correlate audio and wskbd devices.

ok ratchov@


Revision tags: OPENBSD_6_1_BASE OPENBSD_6_2_BASE OPENBSD_6_3_BASE OPENBSD_6_4_BASE OPENBSD_6_5_BASE OPENBSD_6_6_BASE OPENBSD_6_7_BASE OPENBSD_6_8_BASE OPENBSD_6_9_BASE OPENBSD_7_0_BASE
# 1.30 20-Dec-2016 ratchov

Set free(9) size argument. From Michael W. Bombardieri <mb at ii.net>.
Thanks.


# 1.29 19-Sep-2016 ratchov

Remove unused getdev() audio driver functions.


# 1.28 14-Sep-2016 ratchov

Remove drain(), query_encoding(), mappage() and get_default_params()
methods from all audio drivers and from the audio_if structure as they
are never called.


Revision tags: OPENBSD_5_8_BASE OPENBSD_5_9_BASE OPENBSD_6_0_BASE
# 1.27 11-May-2015 ratchov

Remove all audio format conversion code from the kernel (btw holding
the kernel_lock), as we already do better conversions in
user-mode. Yet, no need for every single driver to fiddle with the
conversion code as they are done transparently by common MI code. With
help from armani and miod, support from mpi

ok armani@


Revision tags: OPENBSD_5_6_BASE OPENBSD_5_7_BASE
# 1.26 12-Jul-2014 tedu

add a size argument to free. will be used soon, but for now default to 0.
after discussions with beck deraadt kettenis.


Revision tags: OPENBSD_5_5_BASE
# 1.25 15-Nov-2013 brad

ansify some function definitions.
no functional change.

ok sthen@


Revision tags: OPENBSD_5_4_BASE
# 1.24 24-May-2013 ratchov

Since audio code is mp safe, establish isa and pci audio interrupts
with the IPL_MPSAFE flag. In certain circumstances, this prevents
interrupt handlers from waiting the global kernel_lock possibly (hold
by slower code) to be released.

ok kettenis


# 1.23 15-May-2013 ratchov

Introduce a global interrupt-aware mutex protecting data
structures (including sound-card registers) from concurent
access by syscall and interrupt code-paths. Since critical
sections remain the same, calls to splraise/spllower can be
safely replaced by calls to mtx_enter/mtx_leave with two
exceptions: (1) mutexes are not reentrant (the inner splraise
is thus removed), and (2) we're not allowed to sleep with a
mutex (either msleep is used or the mutex is released before
sleeping).

ok and help from kettenis, a lot of work from armani


Revision tags: OPENBSD_4_8_BASE OPENBSD_4_9_BASE OPENBSD_5_0_BASE OPENBSD_5_1_BASE OPENBSD_5_2_BASE OPENBSD_5_3_BASE
# 1.22 15-Jul-2010 jakemsr

add two new members to structs audio_encoding and audio_prinfo.
for both structs, the new members are 'bps' and 'msb', which
describe the number of bytes per sample and data alignment in the
sample, respectively. drivers must properly set these fields in
the 'query_encoding', 'set_parameters' and 'get_default_params'
hardware interface methods.

discussed with ratchov, deraadt


# 1.21 04-Apr-2010 jakemsr

configure conversion for the correct direction. I guess no one has
ever tried recording big endian samples with fms.


Revision tags: OPENBSD_4_4_BASE OPENBSD_4_5_BASE OPENBSD_4_6_BASE OPENBSD_4_7_BASE
# 1.20 26-Jun-2008 ray

First pass at removing clauses 3 and 4 from NetBSD licenses.

Not sure what's more surprising: how long it took for NetBSD to
catch up to the rest of the BSDs (including UCB), or the amount of
code that NetBSD has claimed for itself without attributing to the
actual authors.

OK deraadt@


# 1.19 29-May-2008 jakemsr

use ac97 default parameters for these ac97 based drivers.

this makes the emulation expansion factor 1 by default since there's no
emulation. previously the factor was 2 because these drivers emulate
8-bit ulaw playback with 16-bit linear encodings. having a factor
other than 1 by default creates block size and hiwat/lowat issues
with applications that set the block size and hiwat before other
parameters.

ok ratchov@


# 1.18 21-Apr-2008 jakemsr

allow low level audio drivers to specify a default sample format,
instead of 8-bit mono mulaw @ 8kHz.

this is just the infrastructure; no drivers are specifying a default
yet.

ok ratchov@, deanna@


Revision tags: OPENBSD_3_8_BASE OPENBSD_3_9_BASE OPENBSD_4_0_BASE OPENBSD_4_1_BASE OPENBSD_4_2_BASE OPENBSD_4_3_BASE
# 1.17 16-Apr-2005 mickey

do not provide round_buffer if not needed unless explained why in comments


# 1.16 14-Apr-2005 mickey

make sure round_blocksize does not produce 0 after alignment


Revision tags: OPENBSD_3_4_BASE OPENBSD_3_5_BASE OPENBSD_3_6_BASE OPENBSD_3_7_BASE SMP_SYNC_A SMP_SYNC_B UBC_SYNC_A
# 1.15 27-Apr-2003 ho

strcpy/sprintf cleanup of sys/dev. miod@, deraadt@ says to commit.


Revision tags: OPENBSD_3_3_BASE
# 1.14 19-Nov-2002 jason

Add a simplistic table driven lookup routine and use it where appropriate.


Revision tags: UBC_SYNC_B
# 1.13 13-Oct-2002 krw

Remove more '\n's from panic() statements. From Chris Kuethe.


Revision tags: OPENBSD_3_2_BASE
# 1.12 29-May-2002 mickey

there is no need to store ioaddr/iosize into the softc


# 1.11 29-May-2002 mickey

oops


# 1.10 28-May-2002 mickey

fix the fms attachment printfs and move out the radio parts to the fmsradio.c; from jumbo@ and some fixes from mickey@


# 1.9 06-May-2002 mickey

tuner driver for the fms cards.
attach radio at the fms(4), instead of a separate device,
which would never work out fine.
from Vladimir Popov <jumbo@narod.ru>
rework the radio config stuff (radio at radiobus, instead of radio at radio),
allowing to tag source files in the files.* files w/ radio attribute.
from mickey@


Revision tags: OPENBSD_3_1_BASE
# 1.8 14-Mar-2002 millert

Final __P removal plus some cosmetic fixups


# 1.7 14-Mar-2002 millert

First round of __P removal in sys


# 1.6 20-Jan-2002 ericj

make all audio drivers use the new allocm and round_buffersize decl's.
will ease porting, and generally cleans up a bit


Revision tags: UBC_BASE
# 1.5 31-Oct-2001 art

branches: 1.5.2;
Change the audio_hm_if->mappage interface to return paddr_t and take off_t
as the mmap offset.


Revision tags: OPENBSD_3_0_BASE
# 1.4 25-Aug-2001 art

Change pci_intr_map to take pci_attach_args as an argument.
All callers actually took all arguments to pci_intr_map from pci_attach_args
structs, so this simplifies code.
This also allows more complicated interrupt assignment schemes like the one
on sparc64.

This makes sparc64 pci interrupts work.

Inspired by the same change in NetBSD.


# 1.3 12-Jun-2001 niklas

Make pci_mapreg_map take an extra argument where we can
put a size limitation of the PCI region to map. That makes the PERC 3/Di
raid controller usable, as it publishes too much PCI memory for us to map
in the kernel virtual memory. As we only access the first 256 byte it is
of no use to map 128MB of kvm.


Revision tags: OPENBSD_2_8_BASE OPENBSD_2_9_BASE
# 1.2 14-Oct-2000 aaron

branches: 1.2.6;
Add $OpenBSD$ tags.


# 1.1 20-Jul-2000 deraadt

new auvia and fms drivers from netbsd (testing requests sent out, since i cannot find any of these devices)


# 1.36 26-Oct-2022 kn

Make audio(9) get_props() optional, remove it from duplex drivers

The property bits of audio(9) are obsolete and ought to be removed
completely.

sys/dev/audio.c:audio_open() currently uses get_props() to bail out if
read *and* write was requested on a non-duplex driver.

Drivers that currently support playing but not recording need adjustment
before the API can be cleaned up.

Drivers that advertise themselves as full duplex, i.e. those that always
return AUDIO_PROP_FULLDUPLEX unconditionally in their get_props() currently
always succeed this check.

As this is the only property, losen audio_open()'s DIAGNOSTIC check and only
do the duplex check if the driver provides get_props().

This allows for simple removal of get_props() from full-duplex drivers
without adding any other code or without changing functionality.

This includes all audio drivers under sys/dev/pci/ (maestro(4) being the
only unfinished exception here).

Other drivers as well as the API change can then follow in smaller diffs.

This builds on amd64, arm64, i386, macppc and sparc64.
amd64 with azalia(4) still plays, records as well as plays and records
at the same time on my X230 as tested with

$ aucat -i play.wav [-o rec.wav]

alpha and hppa tests by miod
OK ratchov miod


# 1.35 19-Oct-2022 kn

Use C99 struct init for struct audio_hw_if

This audio(9) struct will lose a member, but drivers init their struct quite
inconsistently, most pre-C99 style.

Use C99 style everywhere, to get rid of all annoying differences and allow
for easy member removals/additions:
- don't change current order of members
- no explicit NULL members
- no comments or blank lines
- trailing comma in last member line

GENERIC.MP builds fine with this on arm64, amd64, i386 and sparc64.

macppc and alpha build-tested by miod
OK ratchov miod


# 1.34 18-Oct-2022 kn

Remove unused AUDIO_PROP_{MMAP,INDEPENDENT}

AUDIO_PROP_FULLDUPLEX is the only audio(9) in use, the other two died with
commit 1cf2860827c8ca659d8097d8da94a5ae5b888c53
Author: ratchov <ratchov@openbsd.org>
Date: Thu Jun 25 06:43:45 2015 +0000

Reimplement the audio driver in a simpler way, removing unused/unusable
functionality. Same API and ABI except for the removed bits and no
behaviour change for programs using libsndio. With help from armani@
and mpi@, thanks.

but remained defined and set in drivers.

and the following merely moved them when they were dead code already:

commit 9215aa3dfad387bca877a805534df6dcfe8722eb
Author: ratchov <ratchov@openbsd.org>
Date: Wed Aug 31 07:22:43 2016 +0000

Delete unused ioctls and associated macros. Move macros that are still
used internally by low-level drivers from sys/audioio.h to
dev/audio_if.h instead of deleting them.

None of this is used in base or ports; codesearch.debian.net only shows
AUDIO_PROP_{CAPTURE,PLAYBACK} in firefox-esr, mozjs and cubeb.

ratchov points out that audio_if.h and audioio.h are private interfaces
and the codesearch shows SunOS and NetBSD bits (#ifdef'd out on OpenBSD).

OK ratchov


Revision tags: OPENBSD_7_1_BASE OPENBSD_7_2_BASE
# 1.33 21-Mar-2022 miod

Constify struct {audio,midi,radio,video}_hw_if. No functional change.

ok mpi@ ratchov@ "More const is good" deraadt@


# 1.32 11-Mar-2022 mpi

Constify struct cfattach.


# 1.31 16-Feb-2022 anton

Make room for a cookie argument passed to audio_attach_mi(). Currently
unused but intended to be used to correlate audio and wskbd devices.

ok ratchov@


Revision tags: OPENBSD_6_1_BASE OPENBSD_6_2_BASE OPENBSD_6_3_BASE OPENBSD_6_4_BASE OPENBSD_6_5_BASE OPENBSD_6_6_BASE OPENBSD_6_7_BASE OPENBSD_6_8_BASE OPENBSD_6_9_BASE OPENBSD_7_0_BASE
# 1.30 20-Dec-2016 ratchov

Set free(9) size argument. From Michael W. Bombardieri <mb at ii.net>.
Thanks.


# 1.29 19-Sep-2016 ratchov

Remove unused getdev() audio driver functions.


# 1.28 14-Sep-2016 ratchov

Remove drain(), query_encoding(), mappage() and get_default_params()
methods from all audio drivers and from the audio_if structure as they
are never called.


Revision tags: OPENBSD_5_8_BASE OPENBSD_5_9_BASE OPENBSD_6_0_BASE
# 1.27 11-May-2015 ratchov

Remove all audio format conversion code from the kernel (btw holding
the kernel_lock), as we already do better conversions in
user-mode. Yet, no need for every single driver to fiddle with the
conversion code as they are done transparently by common MI code. With
help from armani and miod, support from mpi

ok armani@


Revision tags: OPENBSD_5_6_BASE OPENBSD_5_7_BASE
# 1.26 12-Jul-2014 tedu

add a size argument to free. will be used soon, but for now default to 0.
after discussions with beck deraadt kettenis.


Revision tags: OPENBSD_5_5_BASE
# 1.25 15-Nov-2013 brad

ansify some function definitions.
no functional change.

ok sthen@


Revision tags: OPENBSD_5_4_BASE
# 1.24 24-May-2013 ratchov

Since audio code is mp safe, establish isa and pci audio interrupts
with the IPL_MPSAFE flag. In certain circumstances, this prevents
interrupt handlers from waiting the global kernel_lock possibly (hold
by slower code) to be released.

ok kettenis


# 1.23 15-May-2013 ratchov

Introduce a global interrupt-aware mutex protecting data
structures (including sound-card registers) from concurent
access by syscall and interrupt code-paths. Since critical
sections remain the same, calls to splraise/spllower can be
safely replaced by calls to mtx_enter/mtx_leave with two
exceptions: (1) mutexes are not reentrant (the inner splraise
is thus removed), and (2) we're not allowed to sleep with a
mutex (either msleep is used or the mutex is released before
sleeping).

ok and help from kettenis, a lot of work from armani


Revision tags: OPENBSD_4_8_BASE OPENBSD_4_9_BASE OPENBSD_5_0_BASE OPENBSD_5_1_BASE OPENBSD_5_2_BASE OPENBSD_5_3_BASE
# 1.22 15-Jul-2010 jakemsr

add two new members to structs audio_encoding and audio_prinfo.
for both structs, the new members are 'bps' and 'msb', which
describe the number of bytes per sample and data alignment in the
sample, respectively. drivers must properly set these fields in
the 'query_encoding', 'set_parameters' and 'get_default_params'
hardware interface methods.

discussed with ratchov, deraadt


# 1.21 04-Apr-2010 jakemsr

configure conversion for the correct direction. I guess no one has
ever tried recording big endian samples with fms.


Revision tags: OPENBSD_4_4_BASE OPENBSD_4_5_BASE OPENBSD_4_6_BASE OPENBSD_4_7_BASE
# 1.20 26-Jun-2008 ray

First pass at removing clauses 3 and 4 from NetBSD licenses.

Not sure what's more surprising: how long it took for NetBSD to
catch up to the rest of the BSDs (including UCB), or the amount of
code that NetBSD has claimed for itself without attributing to the
actual authors.

OK deraadt@


# 1.19 29-May-2008 jakemsr

use ac97 default parameters for these ac97 based drivers.

this makes the emulation expansion factor 1 by default since there's no
emulation. previously the factor was 2 because these drivers emulate
8-bit ulaw playback with 16-bit linear encodings. having a factor
other than 1 by default creates block size and hiwat/lowat issues
with applications that set the block size and hiwat before other
parameters.

ok ratchov@


# 1.18 21-Apr-2008 jakemsr

allow low level audio drivers to specify a default sample format,
instead of 8-bit mono mulaw @ 8kHz.

this is just the infrastructure; no drivers are specifying a default
yet.

ok ratchov@, deanna@


Revision tags: OPENBSD_3_8_BASE OPENBSD_3_9_BASE OPENBSD_4_0_BASE OPENBSD_4_1_BASE OPENBSD_4_2_BASE OPENBSD_4_3_BASE
# 1.17 16-Apr-2005 mickey

do not provide round_buffer if not needed unless explained why in comments


# 1.16 14-Apr-2005 mickey

make sure round_blocksize does not produce 0 after alignment


Revision tags: OPENBSD_3_4_BASE OPENBSD_3_5_BASE OPENBSD_3_6_BASE OPENBSD_3_7_BASE SMP_SYNC_A SMP_SYNC_B UBC_SYNC_A
# 1.15 27-Apr-2003 ho

strcpy/sprintf cleanup of sys/dev. miod@, deraadt@ says to commit.


Revision tags: OPENBSD_3_3_BASE
# 1.14 19-Nov-2002 jason

Add a simplistic table driven lookup routine and use it where appropriate.


Revision tags: UBC_SYNC_B
# 1.13 13-Oct-2002 krw

Remove more '\n's from panic() statements. From Chris Kuethe.


Revision tags: OPENBSD_3_2_BASE
# 1.12 29-May-2002 mickey

there is no need to store ioaddr/iosize into the softc


# 1.11 29-May-2002 mickey

oops


# 1.10 28-May-2002 mickey

fix the fms attachment printfs and move out the radio parts to the fmsradio.c; from jumbo@ and some fixes from mickey@


# 1.9 06-May-2002 mickey

tuner driver for the fms cards.
attach radio at the fms(4), instead of a separate device,
which would never work out fine.
from Vladimir Popov <jumbo@narod.ru>
rework the radio config stuff (radio at radiobus, instead of radio at radio),
allowing to tag source files in the files.* files w/ radio attribute.
from mickey@


Revision tags: OPENBSD_3_1_BASE
# 1.8 14-Mar-2002 millert

Final __P removal plus some cosmetic fixups


# 1.7 14-Mar-2002 millert

First round of __P removal in sys


# 1.6 20-Jan-2002 ericj

make all audio drivers use the new allocm and round_buffersize decl's.
will ease porting, and generally cleans up a bit


Revision tags: UBC_BASE
# 1.5 31-Oct-2001 art

branches: 1.5.2;
Change the audio_hm_if->mappage interface to return paddr_t and take off_t
as the mmap offset.


Revision tags: OPENBSD_3_0_BASE
# 1.4 25-Aug-2001 art

Change pci_intr_map to take pci_attach_args as an argument.
All callers actually took all arguments to pci_intr_map from pci_attach_args
structs, so this simplifies code.
This also allows more complicated interrupt assignment schemes like the one
on sparc64.

This makes sparc64 pci interrupts work.

Inspired by the same change in NetBSD.


# 1.3 12-Jun-2001 niklas

Make pci_mapreg_map take an extra argument where we can
put a size limitation of the PCI region to map. That makes the PERC 3/Di
raid controller usable, as it publishes too much PCI memory for us to map
in the kernel virtual memory. As we only access the first 256 byte it is
of no use to map 128MB of kvm.


Revision tags: OPENBSD_2_8_BASE OPENBSD_2_9_BASE
# 1.2 14-Oct-2000 aaron

branches: 1.2.6;
Add $OpenBSD$ tags.


# 1.1 20-Jul-2000 deraadt

new auvia and fms drivers from netbsd (testing requests sent out, since i cannot find any of these devices)


# 1.35 19-Oct-2022 kn

Use C99 struct init for struct audio_hw_if

This audio(9) struct will lose a member, but drivers init their struct quite
inconsistently, most pre-C99 style.

Use C99 style everywhere, to get rid of all annoying differences and allow
for easy member removals/additions:
- don't change current order of members
- no explicit NULL members
- no comments or blank lines
- trailing comma in last member line

GENERIC.MP builds fine with this on arm64, amd64, i386 and sparc64.

macppc and alpha build-tested by miod
OK ratchov miod


# 1.34 18-Oct-2022 kn

Remove unused AUDIO_PROP_{MMAP,INDEPENDENT}

AUDIO_PROP_FULLDUPLEX is the only audio(9) in use, the other two died with
commit 1cf2860827c8ca659d8097d8da94a5ae5b888c53
Author: ratchov <ratchov@openbsd.org>
Date: Thu Jun 25 06:43:45 2015 +0000

Reimplement the audio driver in a simpler way, removing unused/unusable
functionality. Same API and ABI except for the removed bits and no
behaviour change for programs using libsndio. With help from armani@
and mpi@, thanks.

but remained defined and set in drivers.

and the following merely moved them when they were dead code already:

commit 9215aa3dfad387bca877a805534df6dcfe8722eb
Author: ratchov <ratchov@openbsd.org>
Date: Wed Aug 31 07:22:43 2016 +0000

Delete unused ioctls and associated macros. Move macros that are still
used internally by low-level drivers from sys/audioio.h to
dev/audio_if.h instead of deleting them.

None of this is used in base or ports; codesearch.debian.net only shows
AUDIO_PROP_{CAPTURE,PLAYBACK} in firefox-esr, mozjs and cubeb.

ratchov points out that audio_if.h and audioio.h are private interfaces
and the codesearch shows SunOS and NetBSD bits (#ifdef'd out on OpenBSD).

OK ratchov


Revision tags: OPENBSD_7_1_BASE OPENBSD_7_2_BASE
# 1.33 21-Mar-2022 miod

Constify struct {audio,midi,radio,video}_hw_if. No functional change.

ok mpi@ ratchov@ "More const is good" deraadt@


# 1.32 11-Mar-2022 mpi

Constify struct cfattach.


# 1.31 16-Feb-2022 anton

Make room for a cookie argument passed to audio_attach_mi(). Currently
unused but intended to be used to correlate audio and wskbd devices.

ok ratchov@


Revision tags: OPENBSD_6_1_BASE OPENBSD_6_2_BASE OPENBSD_6_3_BASE OPENBSD_6_4_BASE OPENBSD_6_5_BASE OPENBSD_6_6_BASE OPENBSD_6_7_BASE OPENBSD_6_8_BASE OPENBSD_6_9_BASE OPENBSD_7_0_BASE
# 1.30 20-Dec-2016 ratchov

Set free(9) size argument. From Michael W. Bombardieri <mb at ii.net>.
Thanks.


# 1.29 19-Sep-2016 ratchov

Remove unused getdev() audio driver functions.


# 1.28 14-Sep-2016 ratchov

Remove drain(), query_encoding(), mappage() and get_default_params()
methods from all audio drivers and from the audio_if structure as they
are never called.


Revision tags: OPENBSD_5_8_BASE OPENBSD_5_9_BASE OPENBSD_6_0_BASE
# 1.27 11-May-2015 ratchov

Remove all audio format conversion code from the kernel (btw holding
the kernel_lock), as we already do better conversions in
user-mode. Yet, no need for every single driver to fiddle with the
conversion code as they are done transparently by common MI code. With
help from armani and miod, support from mpi

ok armani@


Revision tags: OPENBSD_5_6_BASE OPENBSD_5_7_BASE
# 1.26 12-Jul-2014 tedu

add a size argument to free. will be used soon, but for now default to 0.
after discussions with beck deraadt kettenis.


Revision tags: OPENBSD_5_5_BASE
# 1.25 15-Nov-2013 brad

ansify some function definitions.
no functional change.

ok sthen@


Revision tags: OPENBSD_5_4_BASE
# 1.24 24-May-2013 ratchov

Since audio code is mp safe, establish isa and pci audio interrupts
with the IPL_MPSAFE flag. In certain circumstances, this prevents
interrupt handlers from waiting the global kernel_lock possibly (hold
by slower code) to be released.

ok kettenis


# 1.23 15-May-2013 ratchov

Introduce a global interrupt-aware mutex protecting data
structures (including sound-card registers) from concurent
access by syscall and interrupt code-paths. Since critical
sections remain the same, calls to splraise/spllower can be
safely replaced by calls to mtx_enter/mtx_leave with two
exceptions: (1) mutexes are not reentrant (the inner splraise
is thus removed), and (2) we're not allowed to sleep with a
mutex (either msleep is used or the mutex is released before
sleeping).

ok and help from kettenis, a lot of work from armani


Revision tags: OPENBSD_4_8_BASE OPENBSD_4_9_BASE OPENBSD_5_0_BASE OPENBSD_5_1_BASE OPENBSD_5_2_BASE OPENBSD_5_3_BASE
# 1.22 15-Jul-2010 jakemsr

add two new members to structs audio_encoding and audio_prinfo.
for both structs, the new members are 'bps' and 'msb', which
describe the number of bytes per sample and data alignment in the
sample, respectively. drivers must properly set these fields in
the 'query_encoding', 'set_parameters' and 'get_default_params'
hardware interface methods.

discussed with ratchov, deraadt


# 1.21 04-Apr-2010 jakemsr

configure conversion for the correct direction. I guess no one has
ever tried recording big endian samples with fms.


Revision tags: OPENBSD_4_4_BASE OPENBSD_4_5_BASE OPENBSD_4_6_BASE OPENBSD_4_7_BASE
# 1.20 26-Jun-2008 ray

First pass at removing clauses 3 and 4 from NetBSD licenses.

Not sure what's more surprising: how long it took for NetBSD to
catch up to the rest of the BSDs (including UCB), or the amount of
code that NetBSD has claimed for itself without attributing to the
actual authors.

OK deraadt@


# 1.19 29-May-2008 jakemsr

use ac97 default parameters for these ac97 based drivers.

this makes the emulation expansion factor 1 by default since there's no
emulation. previously the factor was 2 because these drivers emulate
8-bit ulaw playback with 16-bit linear encodings. having a factor
other than 1 by default creates block size and hiwat/lowat issues
with applications that set the block size and hiwat before other
parameters.

ok ratchov@


# 1.18 21-Apr-2008 jakemsr

allow low level audio drivers to specify a default sample format,
instead of 8-bit mono mulaw @ 8kHz.

this is just the infrastructure; no drivers are specifying a default
yet.

ok ratchov@, deanna@


Revision tags: OPENBSD_3_8_BASE OPENBSD_3_9_BASE OPENBSD_4_0_BASE OPENBSD_4_1_BASE OPENBSD_4_2_BASE OPENBSD_4_3_BASE
# 1.17 16-Apr-2005 mickey

do not provide round_buffer if not needed unless explained why in comments


# 1.16 14-Apr-2005 mickey

make sure round_blocksize does not produce 0 after alignment


Revision tags: OPENBSD_3_4_BASE OPENBSD_3_5_BASE OPENBSD_3_6_BASE OPENBSD_3_7_BASE SMP_SYNC_A SMP_SYNC_B UBC_SYNC_A
# 1.15 27-Apr-2003 ho

strcpy/sprintf cleanup of sys/dev. miod@, deraadt@ says to commit.


Revision tags: OPENBSD_3_3_BASE
# 1.14 19-Nov-2002 jason

Add a simplistic table driven lookup routine and use it where appropriate.


Revision tags: UBC_SYNC_B
# 1.13 13-Oct-2002 krw

Remove more '\n's from panic() statements. From Chris Kuethe.


Revision tags: OPENBSD_3_2_BASE
# 1.12 29-May-2002 mickey

there is no need to store ioaddr/iosize into the softc


# 1.11 29-May-2002 mickey

oops


# 1.10 28-May-2002 mickey

fix the fms attachment printfs and move out the radio parts to the fmsradio.c; from jumbo@ and some fixes from mickey@


# 1.9 06-May-2002 mickey

tuner driver for the fms cards.
attach radio at the fms(4), instead of a separate device,
which would never work out fine.
from Vladimir Popov <jumbo@narod.ru>
rework the radio config stuff (radio at radiobus, instead of radio at radio),
allowing to tag source files in the files.* files w/ radio attribute.
from mickey@


Revision tags: OPENBSD_3_1_BASE
# 1.8 14-Mar-2002 millert

Final __P removal plus some cosmetic fixups


# 1.7 14-Mar-2002 millert

First round of __P removal in sys


# 1.6 20-Jan-2002 ericj

make all audio drivers use the new allocm and round_buffersize decl's.
will ease porting, and generally cleans up a bit


Revision tags: UBC_BASE
# 1.5 31-Oct-2001 art

branches: 1.5.2;
Change the audio_hm_if->mappage interface to return paddr_t and take off_t
as the mmap offset.


Revision tags: OPENBSD_3_0_BASE
# 1.4 25-Aug-2001 art

Change pci_intr_map to take pci_attach_args as an argument.
All callers actually took all arguments to pci_intr_map from pci_attach_args
structs, so this simplifies code.
This also allows more complicated interrupt assignment schemes like the one
on sparc64.

This makes sparc64 pci interrupts work.

Inspired by the same change in NetBSD.


# 1.3 12-Jun-2001 niklas

Make pci_mapreg_map take an extra argument where we can
put a size limitation of the PCI region to map. That makes the PERC 3/Di
raid controller usable, as it publishes too much PCI memory for us to map
in the kernel virtual memory. As we only access the first 256 byte it is
of no use to map 128MB of kvm.


Revision tags: OPENBSD_2_8_BASE OPENBSD_2_9_BASE
# 1.2 14-Oct-2000 aaron

branches: 1.2.6;
Add $OpenBSD$ tags.


# 1.1 20-Jul-2000 deraadt

new auvia and fms drivers from netbsd (testing requests sent out, since i cannot find any of these devices)


# 1.35 19-Oct-2022 kn

Use C99 struct init for struct audio_hw_if

This audio(9) struct will lose a member, but drivers init their struct quite
inconsistently, most pre-C99 style.

Use C99 style everywhere, to get rid of all annoying differences and allow
for easy member removals/additions:
- don't change current order of members
- no explicit NULL members
- no comments or blank lines
- trailing comma in last member line

GENERIC.MP builds fine with this on arm64, amd64, i386 and sparc64.

macppc and alpha build-tested by miod
OK ratchov miod


# 1.34 18-Oct-2022 kn

Remove unused AUDIO_PROP_{MMAP,INDEPENDENT}

AUDIO_PROP_FULLDUPLEX is the only audio(9) in use, the other two died with
commit 1cf2860827c8ca659d8097d8da94a5ae5b888c53
Author: ratchov <ratchov@openbsd.org>
Date: Thu Jun 25 06:43:45 2015 +0000

Reimplement the audio driver in a simpler way, removing unused/unusable
functionality. Same API and ABI except for the removed bits and no
behaviour change for programs using libsndio. With help from armani@
and mpi@, thanks.

but remained defined and set in drivers.

and the following merely moved them when they were dead code already:

commit 9215aa3dfad387bca877a805534df6dcfe8722eb
Author: ratchov <ratchov@openbsd.org>
Date: Wed Aug 31 07:22:43 2016 +0000

Delete unused ioctls and associated macros. Move macros that are still
used internally by low-level drivers from sys/audioio.h to
dev/audio_if.h instead of deleting them.

None of this is used in base or ports; codesearch.debian.net only shows
AUDIO_PROP_{CAPTURE,PLAYBACK} in firefox-esr, mozjs and cubeb.

ratchov points out that audio_if.h and audioio.h are private interfaces
and the codesearch shows SunOS and NetBSD bits (#ifdef'd out on OpenBSD).

OK ratchov


Revision tags: OPENBSD_7_1_BASE OPENBSD_7_2_BASE
# 1.33 21-Mar-2022 miod

Constify struct {audio,midi,radio,video}_hw_if. No functional change.

ok mpi@ ratchov@ "More const is good" deraadt@


# 1.32 11-Mar-2022 mpi

Constify struct cfattach.


# 1.31 16-Feb-2022 anton

Make room for a cookie argument passed to audio_attach_mi(). Currently
unused but intended to be used to correlate audio and wskbd devices.

ok ratchov@


Revision tags: OPENBSD_6_1_BASE OPENBSD_6_2_BASE OPENBSD_6_3_BASE OPENBSD_6_4_BASE OPENBSD_6_5_BASE OPENBSD_6_6_BASE OPENBSD_6_7_BASE OPENBSD_6_8_BASE OPENBSD_6_9_BASE OPENBSD_7_0_BASE
# 1.30 20-Dec-2016 ratchov

Set free(9) size argument. From Michael W. Bombardieri <mb at ii.net>.
Thanks.


# 1.29 19-Sep-2016 ratchov

Remove unused getdev() audio driver functions.


# 1.28 14-Sep-2016 ratchov

Remove drain(), query_encoding(), mappage() and get_default_params()
methods from all audio drivers and from the audio_if structure as they
are never called.


Revision tags: OPENBSD_5_8_BASE OPENBSD_5_9_BASE OPENBSD_6_0_BASE
# 1.27 11-May-2015 ratchov

Remove all audio format conversion code from the kernel (btw holding
the kernel_lock), as we already do better conversions in
user-mode. Yet, no need for every single driver to fiddle with the
conversion code as they are done transparently by common MI code. With
help from armani and miod, support from mpi

ok armani@


Revision tags: OPENBSD_5_6_BASE OPENBSD_5_7_BASE
# 1.26 12-Jul-2014 tedu

add a size argument to free. will be used soon, but for now default to 0.
after discussions with beck deraadt kettenis.


Revision tags: OPENBSD_5_5_BASE
# 1.25 15-Nov-2013 brad

ansify some function definitions.
no functional change.

ok sthen@


Revision tags: OPENBSD_5_4_BASE
# 1.24 24-May-2013 ratchov

Since audio code is mp safe, establish isa and pci audio interrupts
with the IPL_MPSAFE flag. In certain circumstances, this prevents
interrupt handlers from waiting the global kernel_lock possibly (hold
by slower code) to be released.

ok kettenis


# 1.23 15-May-2013 ratchov

Introduce a global interrupt-aware mutex protecting data
structures (including sound-card registers) from concurent
access by syscall and interrupt code-paths. Since critical
sections remain the same, calls to splraise/spllower can be
safely replaced by calls to mtx_enter/mtx_leave with two
exceptions: (1) mutexes are not reentrant (the inner splraise
is thus removed), and (2) we're not allowed to sleep with a
mutex (either msleep is used or the mutex is released before
sleeping).

ok and help from kettenis, a lot of work from armani


Revision tags: OPENBSD_4_8_BASE OPENBSD_4_9_BASE OPENBSD_5_0_BASE OPENBSD_5_1_BASE OPENBSD_5_2_BASE OPENBSD_5_3_BASE
# 1.22 15-Jul-2010 jakemsr

add two new members to structs audio_encoding and audio_prinfo.
for both structs, the new members are 'bps' and 'msb', which
describe the number of bytes per sample and data alignment in the
sample, respectively. drivers must properly set these fields in
the 'query_encoding', 'set_parameters' and 'get_default_params'
hardware interface methods.

discussed with ratchov, deraadt


# 1.21 04-Apr-2010 jakemsr

configure conversion for the correct direction. I guess no one has
ever tried recording big endian samples with fms.


Revision tags: OPENBSD_4_4_BASE OPENBSD_4_5_BASE OPENBSD_4_6_BASE OPENBSD_4_7_BASE
# 1.20 26-Jun-2008 ray

First pass at removing clauses 3 and 4 from NetBSD licenses.

Not sure what's more surprising: how long it took for NetBSD to
catch up to the rest of the BSDs (including UCB), or the amount of
code that NetBSD has claimed for itself without attributing to the
actual authors.

OK deraadt@


# 1.19 29-May-2008 jakemsr

use ac97 default parameters for these ac97 based drivers.

this makes the emulation expansion factor 1 by default since there's no
emulation. previously the factor was 2 because these drivers emulate
8-bit ulaw playback with 16-bit linear encodings. having a factor
other than 1 by default creates block size and hiwat/lowat issues
with applications that set the block size and hiwat before other
parameters.

ok ratchov@


# 1.18 21-Apr-2008 jakemsr

allow low level audio drivers to specify a default sample format,
instead of 8-bit mono mulaw @ 8kHz.

this is just the infrastructure; no drivers are specifying a default
yet.

ok ratchov@, deanna@


Revision tags: OPENBSD_3_8_BASE OPENBSD_3_9_BASE OPENBSD_4_0_BASE OPENBSD_4_1_BASE OPENBSD_4_2_BASE OPENBSD_4_3_BASE
# 1.17 16-Apr-2005 mickey

do not provide round_buffer if not needed unless explained why in comments


# 1.16 14-Apr-2005 mickey

make sure round_blocksize does not produce 0 after alignment


Revision tags: OPENBSD_3_4_BASE OPENBSD_3_5_BASE OPENBSD_3_6_BASE OPENBSD_3_7_BASE SMP_SYNC_A SMP_SYNC_B UBC_SYNC_A
# 1.15 27-Apr-2003 ho

strcpy/sprintf cleanup of sys/dev. miod@, deraadt@ says to commit.


Revision tags: OPENBSD_3_3_BASE
# 1.14 19-Nov-2002 jason

Add a simplistic table driven lookup routine and use it where appropriate.


Revision tags: UBC_SYNC_B
# 1.13 13-Oct-2002 krw

Remove more '\n's from panic() statements. From Chris Kuethe.


Revision tags: OPENBSD_3_2_BASE
# 1.12 29-May-2002 mickey

there is no need to store ioaddr/iosize into the softc


# 1.11 29-May-2002 mickey

oops


# 1.10 28-May-2002 mickey

fix the fms attachment printfs and move out the radio parts to the fmsradio.c; from jumbo@ and some fixes from mickey@


# 1.9 06-May-2002 mickey

tuner driver for the fms cards.
attach radio at the fms(4), instead of a separate device,
which would never work out fine.
from Vladimir Popov <jumbo@narod.ru>
rework the radio config stuff (radio at radiobus, instead of radio at radio),
allowing to tag source files in the files.* files w/ radio attribute.
from mickey@


Revision tags: OPENBSD_3_1_BASE
# 1.8 14-Mar-2002 millert

Final __P removal plus some cosmetic fixups


# 1.7 14-Mar-2002 millert

First round of __P removal in sys


# 1.6 20-Jan-2002 ericj

make all audio drivers use the new allocm and round_buffersize decl's.
will ease porting, and generally cleans up a bit


Revision tags: UBC_BASE
# 1.5 31-Oct-2001 art

branches: 1.5.2;
Change the audio_hm_if->mappage interface to return paddr_t and take off_t
as the mmap offset.


Revision tags: OPENBSD_3_0_BASE
# 1.4 25-Aug-2001 art

Change pci_intr_map to take pci_attach_args as an argument.
All callers actually took all arguments to pci_intr_map from pci_attach_args
structs, so this simplifies code.
This also allows more complicated interrupt assignment schemes like the one
on sparc64.

This makes sparc64 pci interrupts work.

Inspired by the same change in NetBSD.


# 1.3 12-Jun-2001 niklas

Make pci_mapreg_map take an extra argument where we can
put a size limitation of the PCI region to map. That makes the PERC 3/Di
raid controller usable, as it publishes too much PCI memory for us to map
in the kernel virtual memory. As we only access the first 256 byte it is
of no use to map 128MB of kvm.


Revision tags: OPENBSD_2_8_BASE OPENBSD_2_9_BASE
# 1.2 14-Oct-2000 aaron

branches: 1.2.6;
Add $OpenBSD$ tags.


# 1.1 20-Jul-2000 deraadt

new auvia and fms drivers from netbsd (testing requests sent out, since i cannot find any of these devices)


# 1.33 21-Mar-2022 miod

Constify struct {audio,midi,radio,video}_hw_if. No functional change.

ok mpi@ ratchov@ "More const is good" deraadt@


# 1.32 11-Mar-2022 mpi

Constify struct cfattach.


# 1.31 16-Feb-2022 anton

Make room for a cookie argument passed to audio_attach_mi(). Currently
unused but intended to be used to correlate audio and wskbd devices.

ok ratchov@


Revision tags: OPENBSD_6_1_BASE OPENBSD_6_2_BASE OPENBSD_6_3_BASE OPENBSD_6_4_BASE OPENBSD_6_5_BASE OPENBSD_6_6_BASE OPENBSD_6_7_BASE OPENBSD_6_8_BASE OPENBSD_6_9_BASE OPENBSD_7_0_BASE
# 1.30 20-Dec-2016 ratchov

Set free(9) size argument. From Michael W. Bombardieri <mb at ii.net>.
Thanks.


# 1.29 19-Sep-2016 ratchov

Remove unused getdev() audio driver functions.


# 1.28 14-Sep-2016 ratchov

Remove drain(), query_encoding(), mappage() and get_default_params()
methods from all audio drivers and from the audio_if structure as they
are never called.


Revision tags: OPENBSD_5_8_BASE OPENBSD_5_9_BASE OPENBSD_6_0_BASE
# 1.27 11-May-2015 ratchov

Remove all audio format conversion code from the kernel (btw holding
the kernel_lock), as we already do better conversions in
user-mode. Yet, no need for every single driver to fiddle with the
conversion code as they are done transparently by common MI code. With
help from armani and miod, support from mpi

ok armani@


Revision tags: OPENBSD_5_6_BASE OPENBSD_5_7_BASE
# 1.26 12-Jul-2014 tedu

add a size argument to free. will be used soon, but for now default to 0.
after discussions with beck deraadt kettenis.


Revision tags: OPENBSD_5_5_BASE
# 1.25 15-Nov-2013 brad

ansify some function definitions.
no functional change.

ok sthen@


Revision tags: OPENBSD_5_4_BASE
# 1.24 24-May-2013 ratchov

Since audio code is mp safe, establish isa and pci audio interrupts
with the IPL_MPSAFE flag. In certain circumstances, this prevents
interrupt handlers from waiting the global kernel_lock possibly (hold
by slower code) to be released.

ok kettenis


# 1.23 15-May-2013 ratchov

Introduce a global interrupt-aware mutex protecting data
structures (including sound-card registers) from concurent
access by syscall and interrupt code-paths. Since critical
sections remain the same, calls to splraise/spllower can be
safely replaced by calls to mtx_enter/mtx_leave with two
exceptions: (1) mutexes are not reentrant (the inner splraise
is thus removed), and (2) we're not allowed to sleep with a
mutex (either msleep is used or the mutex is released before
sleeping).

ok and help from kettenis, a lot of work from armani


Revision tags: OPENBSD_4_8_BASE OPENBSD_4_9_BASE OPENBSD_5_0_BASE OPENBSD_5_1_BASE OPENBSD_5_2_BASE OPENBSD_5_3_BASE
# 1.22 15-Jul-2010 jakemsr

add two new members to structs audio_encoding and audio_prinfo.
for both structs, the new members are 'bps' and 'msb', which
describe the number of bytes per sample and data alignment in the
sample, respectively. drivers must properly set these fields in
the 'query_encoding', 'set_parameters' and 'get_default_params'
hardware interface methods.

discussed with ratchov, deraadt


# 1.21 04-Apr-2010 jakemsr

configure conversion for the correct direction. I guess no one has
ever tried recording big endian samples with fms.


Revision tags: OPENBSD_4_4_BASE OPENBSD_4_5_BASE OPENBSD_4_6_BASE OPENBSD_4_7_BASE
# 1.20 26-Jun-2008 ray

First pass at removing clauses 3 and 4 from NetBSD licenses.

Not sure what's more surprising: how long it took for NetBSD to
catch up to the rest of the BSDs (including UCB), or the amount of
code that NetBSD has claimed for itself without attributing to the
actual authors.

OK deraadt@


# 1.19 29-May-2008 jakemsr

use ac97 default parameters for these ac97 based drivers.

this makes the emulation expansion factor 1 by default since there's no
emulation. previously the factor was 2 because these drivers emulate
8-bit ulaw playback with 16-bit linear encodings. having a factor
other than 1 by default creates block size and hiwat/lowat issues
with applications that set the block size and hiwat before other
parameters.

ok ratchov@


# 1.18 21-Apr-2008 jakemsr

allow low level audio drivers to specify a default sample format,
instead of 8-bit mono mulaw @ 8kHz.

this is just the infrastructure; no drivers are specifying a default
yet.

ok ratchov@, deanna@


Revision tags: OPENBSD_3_8_BASE OPENBSD_3_9_BASE OPENBSD_4_0_BASE OPENBSD_4_1_BASE OPENBSD_4_2_BASE OPENBSD_4_3_BASE
# 1.17 16-Apr-2005 mickey

do not provide round_buffer if not needed unless explained why in comments


# 1.16 14-Apr-2005 mickey

make sure round_blocksize does not produce 0 after alignment


Revision tags: OPENBSD_3_4_BASE OPENBSD_3_5_BASE OPENBSD_3_6_BASE OPENBSD_3_7_BASE SMP_SYNC_A SMP_SYNC_B UBC_SYNC_A
# 1.15 27-Apr-2003 ho

strcpy/sprintf cleanup of sys/dev. miod@, deraadt@ says to commit.


Revision tags: OPENBSD_3_3_BASE
# 1.14 19-Nov-2002 jason

Add a simplistic table driven lookup routine and use it where appropriate.


Revision tags: UBC_SYNC_B
# 1.13 13-Oct-2002 krw

Remove more '\n's from panic() statements. From Chris Kuethe.


Revision tags: OPENBSD_3_2_BASE
# 1.12 29-May-2002 mickey

there is no need to store ioaddr/iosize into the softc


# 1.11 29-May-2002 mickey

oops


# 1.10 28-May-2002 mickey

fix the fms attachment printfs and move out the radio parts to the fmsradio.c; from jumbo@ and some fixes from mickey@


# 1.9 06-May-2002 mickey

tuner driver for the fms cards.
attach radio at the fms(4), instead of a separate device,
which would never work out fine.
from Vladimir Popov <jumbo@narod.ru>
rework the radio config stuff (radio at radiobus, instead of radio at radio),
allowing to tag source files in the files.* files w/ radio attribute.
from mickey@


Revision tags: OPENBSD_3_1_BASE
# 1.8 14-Mar-2002 millert

Final __P removal plus some cosmetic fixups


# 1.7 14-Mar-2002 millert

First round of __P removal in sys


# 1.6 20-Jan-2002 ericj

make all audio drivers use the new allocm and round_buffersize decl's.
will ease porting, and generally cleans up a bit


Revision tags: UBC_BASE
# 1.5 31-Oct-2001 art

branches: 1.5.2;
Change the audio_hm_if->mappage interface to return paddr_t and take off_t
as the mmap offset.


Revision tags: OPENBSD_3_0_BASE
# 1.4 25-Aug-2001 art

Change pci_intr_map to take pci_attach_args as an argument.
All callers actually took all arguments to pci_intr_map from pci_attach_args
structs, so this simplifies code.
This also allows more complicated interrupt assignment schemes like the one
on sparc64.

This makes sparc64 pci interrupts work.

Inspired by the same change in NetBSD.


# 1.3 12-Jun-2001 niklas

Make pci_mapreg_map take an extra argument where we can
put a size limitation of the PCI region to map. That makes the PERC 3/Di
raid controller usable, as it publishes too much PCI memory for us to map
in the kernel virtual memory. As we only access the first 256 byte it is
of no use to map 128MB of kvm.


Revision tags: OPENBSD_2_8_BASE OPENBSD_2_9_BASE
# 1.2 14-Oct-2000 aaron

branches: 1.2.6;
Add $OpenBSD$ tags.


# 1.1 20-Jul-2000 deraadt

new auvia and fms drivers from netbsd (testing requests sent out, since i cannot find any of these devices)


# 1.32 11-Mar-2022 mpi

Constify struct cfattach.


# 1.31 16-Feb-2022 anton

Make room for a cookie argument passed to audio_attach_mi(). Currently
unused but intended to be used to correlate audio and wskbd devices.

ok ratchov@


Revision tags: OPENBSD_6_1_BASE OPENBSD_6_2_BASE OPENBSD_6_3_BASE OPENBSD_6_4_BASE OPENBSD_6_5_BASE OPENBSD_6_6_BASE OPENBSD_6_7_BASE OPENBSD_6_8_BASE OPENBSD_6_9_BASE OPENBSD_7_0_BASE
# 1.30 20-Dec-2016 ratchov

Set free(9) size argument. From Michael W. Bombardieri <mb at ii.net>.
Thanks.


# 1.29 19-Sep-2016 ratchov

Remove unused getdev() audio driver functions.


# 1.28 14-Sep-2016 ratchov

Remove drain(), query_encoding(), mappage() and get_default_params()
methods from all audio drivers and from the audio_if structure as they
are never called.


Revision tags: OPENBSD_5_8_BASE OPENBSD_5_9_BASE OPENBSD_6_0_BASE
# 1.27 11-May-2015 ratchov

Remove all audio format conversion code from the kernel (btw holding
the kernel_lock), as we already do better conversions in
user-mode. Yet, no need for every single driver to fiddle with the
conversion code as they are done transparently by common MI code. With
help from armani and miod, support from mpi

ok armani@


Revision tags: OPENBSD_5_6_BASE OPENBSD_5_7_BASE
# 1.26 12-Jul-2014 tedu

add a size argument to free. will be used soon, but for now default to 0.
after discussions with beck deraadt kettenis.


Revision tags: OPENBSD_5_5_BASE
# 1.25 15-Nov-2013 brad

ansify some function definitions.
no functional change.

ok sthen@


Revision tags: OPENBSD_5_4_BASE
# 1.24 24-May-2013 ratchov

Since audio code is mp safe, establish isa and pci audio interrupts
with the IPL_MPSAFE flag. In certain circumstances, this prevents
interrupt handlers from waiting the global kernel_lock possibly (hold
by slower code) to be released.

ok kettenis


# 1.23 15-May-2013 ratchov

Introduce a global interrupt-aware mutex protecting data
structures (including sound-card registers) from concurent
access by syscall and interrupt code-paths. Since critical
sections remain the same, calls to splraise/spllower can be
safely replaced by calls to mtx_enter/mtx_leave with two
exceptions: (1) mutexes are not reentrant (the inner splraise
is thus removed), and (2) we're not allowed to sleep with a
mutex (either msleep is used or the mutex is released before
sleeping).

ok and help from kettenis, a lot of work from armani


Revision tags: OPENBSD_4_8_BASE OPENBSD_4_9_BASE OPENBSD_5_0_BASE OPENBSD_5_1_BASE OPENBSD_5_2_BASE OPENBSD_5_3_BASE
# 1.22 15-Jul-2010 jakemsr

add two new members to structs audio_encoding and audio_prinfo.
for both structs, the new members are 'bps' and 'msb', which
describe the number of bytes per sample and data alignment in the
sample, respectively. drivers must properly set these fields in
the 'query_encoding', 'set_parameters' and 'get_default_params'
hardware interface methods.

discussed with ratchov, deraadt


# 1.21 04-Apr-2010 jakemsr

configure conversion for the correct direction. I guess no one has
ever tried recording big endian samples with fms.


Revision tags: OPENBSD_4_4_BASE OPENBSD_4_5_BASE OPENBSD_4_6_BASE OPENBSD_4_7_BASE
# 1.20 26-Jun-2008 ray

First pass at removing clauses 3 and 4 from NetBSD licenses.

Not sure what's more surprising: how long it took for NetBSD to
catch up to the rest of the BSDs (including UCB), or the amount of
code that NetBSD has claimed for itself without attributing to the
actual authors.

OK deraadt@


# 1.19 29-May-2008 jakemsr

use ac97 default parameters for these ac97 based drivers.

this makes the emulation expansion factor 1 by default since there's no
emulation. previously the factor was 2 because these drivers emulate
8-bit ulaw playback with 16-bit linear encodings. having a factor
other than 1 by default creates block size and hiwat/lowat issues
with applications that set the block size and hiwat before other
parameters.

ok ratchov@


# 1.18 21-Apr-2008 jakemsr

allow low level audio drivers to specify a default sample format,
instead of 8-bit mono mulaw @ 8kHz.

this is just the infrastructure; no drivers are specifying a default
yet.

ok ratchov@, deanna@


Revision tags: OPENBSD_3_8_BASE OPENBSD_3_9_BASE OPENBSD_4_0_BASE OPENBSD_4_1_BASE OPENBSD_4_2_BASE OPENBSD_4_3_BASE
# 1.17 16-Apr-2005 mickey

do not provide round_buffer if not needed unless explained why in comments


# 1.16 14-Apr-2005 mickey

make sure round_blocksize does not produce 0 after alignment


Revision tags: OPENBSD_3_4_BASE OPENBSD_3_5_BASE OPENBSD_3_6_BASE OPENBSD_3_7_BASE SMP_SYNC_A SMP_SYNC_B UBC_SYNC_A
# 1.15 27-Apr-2003 ho

strcpy/sprintf cleanup of sys/dev. miod@, deraadt@ says to commit.


Revision tags: OPENBSD_3_3_BASE
# 1.14 19-Nov-2002 jason

Add a simplistic table driven lookup routine and use it where appropriate.


Revision tags: UBC_SYNC_B
# 1.13 13-Oct-2002 krw

Remove more '\n's from panic() statements. From Chris Kuethe.


Revision tags: OPENBSD_3_2_BASE
# 1.12 29-May-2002 mickey

there is no need to store ioaddr/iosize into the softc


# 1.11 29-May-2002 mickey

oops


# 1.10 28-May-2002 mickey

fix the fms attachment printfs and move out the radio parts to the fmsradio.c; from jumbo@ and some fixes from mickey@


# 1.9 06-May-2002 mickey

tuner driver for the fms cards.
attach radio at the fms(4), instead of a separate device,
which would never work out fine.
from Vladimir Popov <jumbo@narod.ru>
rework the radio config stuff (radio at radiobus, instead of radio at radio),
allowing to tag source files in the files.* files w/ radio attribute.
from mickey@


Revision tags: OPENBSD_3_1_BASE
# 1.8 14-Mar-2002 millert

Final __P removal plus some cosmetic fixups


# 1.7 14-Mar-2002 millert

First round of __P removal in sys


# 1.6 20-Jan-2002 ericj

make all audio drivers use the new allocm and round_buffersize decl's.
will ease porting, and generally cleans up a bit


Revision tags: UBC_BASE
# 1.5 31-Oct-2001 art

branches: 1.5.2;
Change the audio_hm_if->mappage interface to return paddr_t and take off_t
as the mmap offset.


Revision tags: OPENBSD_3_0_BASE
# 1.4 25-Aug-2001 art

Change pci_intr_map to take pci_attach_args as an argument.
All callers actually took all arguments to pci_intr_map from pci_attach_args
structs, so this simplifies code.
This also allows more complicated interrupt assignment schemes like the one
on sparc64.

This makes sparc64 pci interrupts work.

Inspired by the same change in NetBSD.


# 1.3 12-Jun-2001 niklas

Make pci_mapreg_map take an extra argument where we can
put a size limitation of the PCI region to map. That makes the PERC 3/Di
raid controller usable, as it publishes too much PCI memory for us to map
in the kernel virtual memory. As we only access the first 256 byte it is
of no use to map 128MB of kvm.


Revision tags: OPENBSD_2_8_BASE OPENBSD_2_9_BASE
# 1.2 14-Oct-2000 aaron

branches: 1.2.6;
Add $OpenBSD$ tags.


# 1.1 20-Jul-2000 deraadt

new auvia and fms drivers from netbsd (testing requests sent out, since i cannot find any of these devices)


# 1.31 16-Feb-2022 anton

Make room for a cookie argument passed to audio_attach_mi(). Currently
unused but intended to be used to correlate audio and wskbd devices.

ok ratchov@


Revision tags: OPENBSD_6_1_BASE OPENBSD_6_2_BASE OPENBSD_6_3_BASE OPENBSD_6_4_BASE OPENBSD_6_5_BASE OPENBSD_6_6_BASE OPENBSD_6_7_BASE OPENBSD_6_8_BASE OPENBSD_6_9_BASE OPENBSD_7_0_BASE
# 1.30 20-Dec-2016 ratchov

Set free(9) size argument. From Michael W. Bombardieri <mb at ii.net>.
Thanks.


# 1.29 19-Sep-2016 ratchov

Remove unused getdev() audio driver functions.


# 1.28 14-Sep-2016 ratchov

Remove drain(), query_encoding(), mappage() and get_default_params()
methods from all audio drivers and from the audio_if structure as they
are never called.


Revision tags: OPENBSD_5_8_BASE OPENBSD_5_9_BASE OPENBSD_6_0_BASE
# 1.27 11-May-2015 ratchov

Remove all audio format conversion code from the kernel (btw holding
the kernel_lock), as we already do better conversions in
user-mode. Yet, no need for every single driver to fiddle with the
conversion code as they are done transparently by common MI code. With
help from armani and miod, support from mpi

ok armani@


Revision tags: OPENBSD_5_6_BASE OPENBSD_5_7_BASE
# 1.26 12-Jul-2014 tedu

add a size argument to free. will be used soon, but for now default to 0.
after discussions with beck deraadt kettenis.


Revision tags: OPENBSD_5_5_BASE
# 1.25 15-Nov-2013 brad

ansify some function definitions.
no functional change.

ok sthen@


Revision tags: OPENBSD_5_4_BASE
# 1.24 24-May-2013 ratchov

Since audio code is mp safe, establish isa and pci audio interrupts
with the IPL_MPSAFE flag. In certain circumstances, this prevents
interrupt handlers from waiting the global kernel_lock possibly (hold
by slower code) to be released.

ok kettenis


# 1.23 15-May-2013 ratchov

Introduce a global interrupt-aware mutex protecting data
structures (including sound-card registers) from concurent
access by syscall and interrupt code-paths. Since critical
sections remain the same, calls to splraise/spllower can be
safely replaced by calls to mtx_enter/mtx_leave with two
exceptions: (1) mutexes are not reentrant (the inner splraise
is thus removed), and (2) we're not allowed to sleep with a
mutex (either msleep is used or the mutex is released before
sleeping).

ok and help from kettenis, a lot of work from armani


Revision tags: OPENBSD_4_8_BASE OPENBSD_4_9_BASE OPENBSD_5_0_BASE OPENBSD_5_1_BASE OPENBSD_5_2_BASE OPENBSD_5_3_BASE
# 1.22 15-Jul-2010 jakemsr

add two new members to structs audio_encoding and audio_prinfo.
for both structs, the new members are 'bps' and 'msb', which
describe the number of bytes per sample and data alignment in the
sample, respectively. drivers must properly set these fields in
the 'query_encoding', 'set_parameters' and 'get_default_params'
hardware interface methods.

discussed with ratchov, deraadt


# 1.21 04-Apr-2010 jakemsr

configure conversion for the correct direction. I guess no one has
ever tried recording big endian samples with fms.


Revision tags: OPENBSD_4_4_BASE OPENBSD_4_5_BASE OPENBSD_4_6_BASE OPENBSD_4_7_BASE
# 1.20 26-Jun-2008 ray

First pass at removing clauses 3 and 4 from NetBSD licenses.

Not sure what's more surprising: how long it took for NetBSD to
catch up to the rest of the BSDs (including UCB), or the amount of
code that NetBSD has claimed for itself without attributing to the
actual authors.

OK deraadt@


# 1.19 29-May-2008 jakemsr

use ac97 default parameters for these ac97 based drivers.

this makes the emulation expansion factor 1 by default since there's no
emulation. previously the factor was 2 because these drivers emulate
8-bit ulaw playback with 16-bit linear encodings. having a factor
other than 1 by default creates block size and hiwat/lowat issues
with applications that set the block size and hiwat before other
parameters.

ok ratchov@


# 1.18 21-Apr-2008 jakemsr

allow low level audio drivers to specify a default sample format,
instead of 8-bit mono mulaw @ 8kHz.

this is just the infrastructure; no drivers are specifying a default
yet.

ok ratchov@, deanna@


Revision tags: OPENBSD_3_8_BASE OPENBSD_3_9_BASE OPENBSD_4_0_BASE OPENBSD_4_1_BASE OPENBSD_4_2_BASE OPENBSD_4_3_BASE
# 1.17 16-Apr-2005 mickey

do not provide round_buffer if not needed unless explained why in comments


# 1.16 14-Apr-2005 mickey

make sure round_blocksize does not produce 0 after alignment


Revision tags: OPENBSD_3_4_BASE OPENBSD_3_5_BASE OPENBSD_3_6_BASE OPENBSD_3_7_BASE SMP_SYNC_A SMP_SYNC_B UBC_SYNC_A
# 1.15 27-Apr-2003 ho

strcpy/sprintf cleanup of sys/dev. miod@, deraadt@ says to commit.


Revision tags: OPENBSD_3_3_BASE
# 1.14 19-Nov-2002 jason

Add a simplistic table driven lookup routine and use it where appropriate.


Revision tags: UBC_SYNC_B
# 1.13 13-Oct-2002 krw

Remove more '\n's from panic() statements. From Chris Kuethe.


Revision tags: OPENBSD_3_2_BASE
# 1.12 29-May-2002 mickey

there is no need to store ioaddr/iosize into the softc


# 1.11 29-May-2002 mickey

oops


# 1.10 28-May-2002 mickey

fix the fms attachment printfs and move out the radio parts to the fmsradio.c; from jumbo@ and some fixes from mickey@


# 1.9 06-May-2002 mickey

tuner driver for the fms cards.
attach radio at the fms(4), instead of a separate device,
which would never work out fine.
from Vladimir Popov <jumbo@narod.ru>
rework the radio config stuff (radio at radiobus, instead of radio at radio),
allowing to tag source files in the files.* files w/ radio attribute.
from mickey@


Revision tags: OPENBSD_3_1_BASE
# 1.8 14-Mar-2002 millert

Final __P removal plus some cosmetic fixups


# 1.7 14-Mar-2002 millert

First round of __P removal in sys


# 1.6 20-Jan-2002 ericj

make all audio drivers use the new allocm and round_buffersize decl's.
will ease porting, and generally cleans up a bit


Revision tags: UBC_BASE
# 1.5 31-Oct-2001 art

branches: 1.5.2;
Change the audio_hm_if->mappage interface to return paddr_t and take off_t
as the mmap offset.


Revision tags: OPENBSD_3_0_BASE
# 1.4 25-Aug-2001 art

Change pci_intr_map to take pci_attach_args as an argument.
All callers actually took all arguments to pci_intr_map from pci_attach_args
structs, so this simplifies code.
This also allows more complicated interrupt assignment schemes like the one
on sparc64.

This makes sparc64 pci interrupts work.

Inspired by the same change in NetBSD.


# 1.3 12-Jun-2001 niklas

Make pci_mapreg_map take an extra argument where we can
put a size limitation of the PCI region to map. That makes the PERC 3/Di
raid controller usable, as it publishes too much PCI memory for us to map
in the kernel virtual memory. As we only access the first 256 byte it is
of no use to map 128MB of kvm.


Revision tags: OPENBSD_2_8_BASE OPENBSD_2_9_BASE
# 1.2 14-Oct-2000 aaron

branches: 1.2.6;
Add $OpenBSD$ tags.


# 1.1 20-Jul-2000 deraadt

new auvia and fms drivers from netbsd (testing requests sent out, since i cannot find any of these devices)


Revision tags: OPENBSD_6_1_BASE OPENBSD_6_2_BASE
# 1.30 20-Dec-2016 ratchov

Set free(9) size argument. From Michael W. Bombardieri <mb at ii.net>.
Thanks.


# 1.29 19-Sep-2016 ratchov

Remove unused getdev() audio driver functions.


# 1.28 14-Sep-2016 ratchov

Remove drain(), query_encoding(), mappage() and get_default_params()
methods from all audio drivers and from the audio_if structure as they
are never called.


Revision tags: OPENBSD_5_8_BASE OPENBSD_5_9_BASE OPENBSD_6_0_BASE
# 1.27 11-May-2015 ratchov

Remove all audio format conversion code from the kernel (btw holding
the kernel_lock), as we already do better conversions in
user-mode. Yet, no need for every single driver to fiddle with the
conversion code as they are done transparently by common MI code. With
help from armani and miod, support from mpi

ok armani@


Revision tags: OPENBSD_5_6_BASE OPENBSD_5_7_BASE
# 1.26 12-Jul-2014 tedu

add a size argument to free. will be used soon, but for now default to 0.
after discussions with beck deraadt kettenis.


Revision tags: OPENBSD_5_5_BASE
# 1.25 15-Nov-2013 brad

ansify some function definitions.
no functional change.

ok sthen@


Revision tags: OPENBSD_5_4_BASE
# 1.24 24-May-2013 ratchov

Since audio code is mp safe, establish isa and pci audio interrupts
with the IPL_MPSAFE flag. In certain circumstances, this prevents
interrupt handlers from waiting the global kernel_lock possibly (hold
by slower code) to be released.

ok kettenis


# 1.23 15-May-2013 ratchov

Introduce a global interrupt-aware mutex protecting data
structures (including sound-card registers) from concurent
access by syscall and interrupt code-paths. Since critical
sections remain the same, calls to splraise/spllower can be
safely replaced by calls to mtx_enter/mtx_leave with two
exceptions: (1) mutexes are not reentrant (the inner splraise
is thus removed), and (2) we're not allowed to sleep with a
mutex (either msleep is used or the mutex is released before
sleeping).

ok and help from kettenis, a lot of work from armani


Revision tags: OPENBSD_4_8_BASE OPENBSD_4_9_BASE OPENBSD_5_0_BASE OPENBSD_5_1_BASE OPENBSD_5_2_BASE OPENBSD_5_3_BASE
# 1.22 15-Jul-2010 jakemsr

add two new members to structs audio_encoding and audio_prinfo.
for both structs, the new members are 'bps' and 'msb', which
describe the number of bytes per sample and data alignment in the
sample, respectively. drivers must properly set these fields in
the 'query_encoding', 'set_parameters' and 'get_default_params'
hardware interface methods.

discussed with ratchov, deraadt


# 1.21 04-Apr-2010 jakemsr

configure conversion for the correct direction. I guess no one has
ever tried recording big endian samples with fms.


Revision tags: OPENBSD_4_4_BASE OPENBSD_4_5_BASE OPENBSD_4_6_BASE OPENBSD_4_7_BASE
# 1.20 26-Jun-2008 ray

First pass at removing clauses 3 and 4 from NetBSD licenses.

Not sure what's more surprising: how long it took for NetBSD to
catch up to the rest of the BSDs (including UCB), or the amount of
code that NetBSD has claimed for itself without attributing to the
actual authors.

OK deraadt@


# 1.19 29-May-2008 jakemsr

use ac97 default parameters for these ac97 based drivers.

this makes the emulation expansion factor 1 by default since there's no
emulation. previously the factor was 2 because these drivers emulate
8-bit ulaw playback with 16-bit linear encodings. having a factor
other than 1 by default creates block size and hiwat/lowat issues
with applications that set the block size and hiwat before other
parameters.

ok ratchov@


# 1.18 21-Apr-2008 jakemsr

allow low level audio drivers to specify a default sample format,
instead of 8-bit mono mulaw @ 8kHz.

this is just the infrastructure; no drivers are specifying a default
yet.

ok ratchov@, deanna@


Revision tags: OPENBSD_3_8_BASE OPENBSD_3_9_BASE OPENBSD_4_0_BASE OPENBSD_4_1_BASE OPENBSD_4_2_BASE OPENBSD_4_3_BASE
# 1.17 16-Apr-2005 mickey

do not provide round_buffer if not needed unless explained why in comments


# 1.16 14-Apr-2005 mickey

make sure round_blocksize does not produce 0 after alignment


Revision tags: OPENBSD_3_4_BASE OPENBSD_3_5_BASE OPENBSD_3_6_BASE OPENBSD_3_7_BASE SMP_SYNC_A SMP_SYNC_B UBC_SYNC_A
# 1.15 27-Apr-2003 ho

strcpy/sprintf cleanup of sys/dev. miod@, deraadt@ says to commit.


Revision tags: OPENBSD_3_3_BASE
# 1.14 19-Nov-2002 jason

Add a simplistic table driven lookup routine and use it where appropriate.


Revision tags: UBC_SYNC_B
# 1.13 13-Oct-2002 krw

Remove more '\n's from panic() statements. From Chris Kuethe.


Revision tags: OPENBSD_3_2_BASE
# 1.12 29-May-2002 mickey

there is no need to store ioaddr/iosize into the softc


# 1.11 29-May-2002 mickey

oops


# 1.10 28-May-2002 mickey

fix the fms attachment printfs and move out the radio parts to the fmsradio.c; from jumbo@ and some fixes from mickey@


# 1.9 06-May-2002 mickey

tuner driver for the fms cards.
attach radio at the fms(4), instead of a separate device,
which would never work out fine.
from Vladimir Popov <jumbo@narod.ru>
rework the radio config stuff (radio at radiobus, instead of radio at radio),
allowing to tag source files in the files.* files w/ radio attribute.
from mickey@


Revision tags: OPENBSD_3_1_BASE
# 1.8 14-Mar-2002 millert

Final __P removal plus some cosmetic fixups


# 1.7 14-Mar-2002 millert

First round of __P removal in sys


# 1.6 20-Jan-2002 ericj

make all audio drivers use the new allocm and round_buffersize decl's.
will ease porting, and generally cleans up a bit


Revision tags: UBC_BASE
# 1.5 31-Oct-2001 art

branches: 1.5.2;
Change the audio_hm_if->mappage interface to return paddr_t and take off_t
as the mmap offset.


Revision tags: OPENBSD_3_0_BASE
# 1.4 25-Aug-2001 art

Change pci_intr_map to take pci_attach_args as an argument.
All callers actually took all arguments to pci_intr_map from pci_attach_args
structs, so this simplifies code.
This also allows more complicated interrupt assignment schemes like the one
on sparc64.

This makes sparc64 pci interrupts work.

Inspired by the same change in NetBSD.


# 1.3 12-Jun-2001 niklas

Make pci_mapreg_map take an extra argument where we can
put a size limitation of the PCI region to map. That makes the PERC 3/Di
raid controller usable, as it publishes too much PCI memory for us to map
in the kernel virtual memory. As we only access the first 256 byte it is
of no use to map 128MB of kvm.


Revision tags: OPENBSD_2_8_BASE OPENBSD_2_9_BASE
# 1.2 14-Oct-2000 aaron

branches: 1.2.6;
Add $OpenBSD$ tags.


# 1.1 20-Jul-2000 deraadt

new auvia and fms drivers from netbsd (testing requests sent out, since i cannot find any of these devices)