History log of /haiku/src/add-ons/kernel/drivers/audio/hda/driver.h
Revision Date Author Comments
# 3b91d73b 16-Dec-2022 X512 <danger_mail@list.ru>

bus & drivers: drop PCI_x86

Change-Id: I494deaf24a4793a5e0fe9fa46ecdce32f65e616a
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6226
Reviewed-by: waddlesplash <waddlesplash@gmail.com>
Reviewed-by: Fredrik Holmqvist <fredrik.holmqvist@gmail.com>


# 69958ca2 24-Oct-2021 Jessica Hamilton <jessica.l.hamilton@gmail.com>

hda: subsystem is from the codec, not the PCI bus.

* Refactors so that we look for a codec subsystem ID, then the
Audio Function Group subsystem ID if not found.
* Moves the order around a bit so that the quirks are set early
enough.
* Also adds a quirk for MacBookAir 6,2, allows speakers to work.

Change-Id: I4c64f96936a82a5d7187d86d8558f28516fd4ecb
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4654
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>


# bfb040f0 22-Jul-2020 Michael Lotz <mmlr@mlotz.ch>

hda: Use B_32_BIT_CONTIGUOUS when controller is not 64 bit.

This ensures that the allocated physical memory uses 32 bit addresses.

Also avoid writing to the 64 bit address registers when the controller
is not 64 bit.

Change-Id: I58008d68bcd9579903534f824db2660f73e39160
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3065
Reviewed-by: waddlesplash <waddlesplash@gmail.com>


# 5caa9c86 15-Jun-2019 Murai Takashi <tmurai01@gmail.com>

drivers/audio/hda: Fix -Wformat=

Change-Id: Ifbc08eefc53cac2e23fc3ac4b003bf4d897265d7
Reviewed-on: https://review.haiku-os.org/c/1522
Reviewed-by: waddlesplash <waddlesplash@gmail.com>


# 8aea77d0 09-Sep-2018 Humdinger <humdingerb@gmail.com>

HDA driver: use optional settings file

Patch by Pete Goodeve, ticket #9134.
(Removed play_sample_rate and record_sample_rate as suggested in
patch review, adjusted hda.settings accordingly.)

Tune buffer size and buffer count with an optional settings file
/boot/home/config/settings/kernel/drivers/hda.settings. Same as
it's done for the auich driver.

Pete:
> I [...] request 4 buffers of 1024 frames, I get a nice 13-14ms latency.

Change-Id: I3c1c64375d22b525afb970d5e8379b22b8514438
Reviewed-on: https://review.haiku-os.org/521
Reviewed-by: Jérôme Duval <jerome.duval@gmail.com>


# 21c87a5d 09-Sep-2018 Jérôme Duval <jerome.duval@gmail.com>

drivers: remove some non-haiku support code.

Change-Id: Ic55bb4832adabeb807f763c87ad938e74fb3a97d
Reviewed-on: https://review.haiku-os.org/520
Reviewed-by: Axel Dörfler <axeld@pinc-software.de>
Reviewed-by: waddlesplash <waddlesplash@gmail.com>


# 85b0c320 26-Jun-2017 Jessica Hamilton <jessica.l.hamilton@gmail.com>

hda: increase max association count.

* On MacBook Air 6,2, HDA driver has an association count of 19. Prior
to this fix, this would corrupt the hda_multi pointer.


# 46098852 12-Oct-2015 Dario Casalinuovo <b.vitruvio@gmail.com>

Revert code which got mixed in 782ebbdf93e1a6fa13230efa01cbed373b41eebc

* Sorry about that.


# 782ebbdf 11-Oct-2015 Dario Casalinuovo <b.vitruvio@gmail.com>

Cortex: Check retrieved timesource, fixes #11391


# ec8fc5ee 02-Sep-2014 Julian Harnath <julian.harnath@rwth-aachen.de>

Use uncached memory areas if snooping is not possible

* Some chipsets do not support bus-snooping for the HDA data
transfers. So, when trying to enable snooping, verify that the
setting was accepted.

* When snooping is not possible, set memory areas for audio buffers,
buffer descriptor lists and command ring-buffers as uncached to
ensure memory coherency with the HDA controller.

* This fixes KDLs during booting on some systems where snooping
is not supported (seen on two systems with AMD chipsets, maybe
applies to others as well).
After setting up the buffer descriptor list for a stream, it was a
gamble whether these writes would be visible to the HDA controller
when subsequently enabling the stream. On some boots it was unlucky
and then the HDA controller's DMA engine would go haywire and start
overwriting random kernel memory with audio input data. The
scheduler was usually the first victim and caused page fault KDLs
due to corrupted data structures.


# 84dfba29 01-Sep-2014 Julian Harnath <julian.harnath@rwth-aachen.de>

Preserve reserved bits in registers

* Do read-modify-write cycle to preserve bits marked as RsvdP in the
following registers: WAKEEN, CORBWP, CORBCTL, CORBSIZE, RIRBWP,
RINTCNT, RIRBCTL, RIRBSIZE.


# 73ad2473 05-Nov-2013 Pawel Dziepak <pdziepak@quarnos.org>

Remove remaining unnecessary 'volatile' qualifiers


# 51b735b3 01-Sep-2013 Jérôme Duval <jerome.duval@gmail.com>

hdaudio: enable MSI support

* disabled for nVidia and Creative Technology devices.


# 45732903 20-Sep-2012 Axel Dörfler <axeld@pinc-software.de>

Implemented MSI support.

* Does not seem to change anything, though (I'm also a victim of bug
#8949)
* Minor cleanup.


# c95f35ce 09-Aug-2012 Axel Dörfler <axeld@pinc-software.de>

Fixed 64 bit issue for the buffer descriptor base.


# b14ae02b 12-Jun-2010 Jérôme Duval <korli@users.berlios.de>

some verbs use a 16 bits payload


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37114 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 9a0a4979 12-Jun-2010 Jérôme Duval <korli@users.berlios.de>

* add some helper functions to read/write verbs.
* try at support realtek alc888. alsa uses this init sequence.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37113 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 64d79eff 27-May-2010 Ingo Weinhold <ingo_weinhold@gmx.de>

* Changed physical_entry::{address,size} to phys_{addr,size}_t and changed
map_physical_memory()'s physicalAddress parameter type from void* to
phys_addr_t. This breaks source compatibility, but -- as long as
phys_{addr,size}_t remain 32 bit wide -- keeps binary compatibility with
BeOS.
* Adjusted all code using the affected interfaces (Oh what fun!). Added a few
TODOs in places where the wrong types (e.g. void* for physical addresses
are used). Looks like quite a few drivers aren't 64 bit safe and others
will break with PAE.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36960 a95241bf-73f2-0310-859d-f6bbb57e9c96


# e25dcf1a 15-Jan-2010 Jérôme Duval <korli@users.berlios.de>

* We now mute internal speakers when using headphones. We don't distinguish between headphones and mic jacks though.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35088 a95241bf-73f2-0310-859d-f6bbb57e9c96


# dfb72c78 21-Dec-2009 Jérôme Duval <korli@users.berlios.de>

* warn_count is unused.
* the last valid index should be written in HDAC_STREAM_LAST_VALID instead of the fragment count.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34730 a95241bf-73f2-0310-859d-f6bbb57e9c96


# e4e70475 20-Dec-2009 Jérôme Duval <korli@users.berlios.de>

* style cleanup
* added location to pin widget control name


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34729 a95241bf-73f2-0310-859d-f6bbb57e9c96


# f887c705 16-Dec-2009 Ingo Weinhold <ingo_weinhold@gmx.de>

Try to detect whether the stream's DMA position is broken and switch to using
the LPIB, if it is.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34684 a95241bf-73f2-0310-859d-f6bbb57e9c96


# e0a187dd 15-Dec-2009 Ingo Weinhold <ingo_weinhold@gmx.de>

* stream_handle_interrupt():
- Round the DMA position for the buffer cycle computation. Apparently some
chipsets trigger the interrupt before the position has been updated.
- Don't just assume that stream->buffer_length frames have been processed
at that time. Use the exact stream position at that time. This makes the
performance time computation more precise and immune to the interrupt
being delayed.
* Init hda_stream::frames_count.

Audio skips on I/O seem to be gone for me, now. Not obviously motivated skips
still happen.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34671 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 4aafe92a 29-Nov-2009 Jérôme Duval <korli@users.berlios.de>

* cleanup
* use gpio count for gpio quirks


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34355 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 144c4c62 29-Nov-2009 Jérôme Duval <korli@users.berlios.de>

* added vref and unsol responses definitions
* untested unsolicited response support
* added quirk support for vref and gpio
* vref are now enabled for all inputs, and gpio for some Apple Macs
* replaced dprintf with TRACE and ERROR macros


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34352 a95241bf-73f2-0310-859d-f6bbb57e9c96


# ba4d7ed2 13-Sep-2009 Jérôme Duval <korli@users.berlios.de>

* added input selector controls
* increased responses count
* only unmute active inputs on mixer widgets


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33120 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 1f5d96af 21-Aug-2009 Jérôme Duval <korli@users.berlios.de>

we now print a warning message in the log when the interrupt comes in the second half of a buffer: this should mean the interrupt comes earlier than expected.
Please report such warnings, they can help to investigate timing issues with some hda codecs.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32589 a95241bf-73f2-0310-859d-f6bbb57e9c96


# d936f5e3 28-Jul-2009 Jérôme Duval <korli@users.berlios.de>

* now uses only one buffer_ready semaphore, this way the buffer exchange is done asap, useful when rates/formats are different between playback and record.
* checked what offsets my hardware my hardware really had: it affected only playback, and was 192 for 16 bits and 256 for 20/24 bits. With these values, playback and record are crystal clear.
As I can't find any references for such offset values anywhere, sorry it's not supposed to work out of the box on all hardware. Maybe we could adjust the offset at runtime.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31875 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 0bd93b7d 07-Mar-2009 Stephan Aßmus <superstippi@gmx.de>

* Use a default buffer frame count that is adapted to the sample rate
of the audio group. This is supposed to keep the latency about the same
regardless of sample rate and lessen the requirements on the system
performance when using higher sample rates. Currently the multi-audio
addon uses the highest available rate.
* Added TODO about the highest sample rate seemingly being forgotten in one
place.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29421 a95241bf-73f2-0310-859d-f6bbb57e9c96


# c71a6614 01-Jan-2009 Jérôme Duval <korli@users.berlios.de>

* try to enable EAPD on capable pin widgets
* added a pin capabilities attribute instead of input and output pin attributes
* added ATI and nVidia vendor ids definitions
* uses "mic in" and "line in" when pin colors are undefined


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28839 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 34bda3ae 19-Nov-2008 Jérôme Duval <korli@users.berlios.de>

introduced a widget inside the audio function group to extract widget node attributes and reuse functions.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28697 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 3fa33c82 17-Nov-2008 Jérôme Duval <korli@users.berlios.de>

* store vendor, revision, stepping, revision, minor, major in the codec struct
* check specific node ids for nodes declared as inputs which are really beepers
* when unmuting/setting amp on the input amplifier, iterate on each input instead of only the first one
* also unmute/set amp on the output and input amplifiers for the input and output paths, respectively


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28683 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 8c3da8dd 16-Nov-2008 Jérôme Duval <korli@users.berlios.de>

added a mixer interface


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28677 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 6d3c6e76 09-Jul-2008 Jérôme Duval <korli@users.berlios.de>

reduced buffer size: with 4096, no buffer is received by the multiaudio addon


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26349 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 3787196a 08-Jul-2008 Jérôme Duval <korli@users.berlios.de>

* some methods to access stream registers were defined with wrong types
* use HDAC_BIDIR_STREAM_OFFSET and HDAC_OUTPUT_STREAM_OFFSET when applicable
* use a PAGE_ALIGN macro


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26330 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 359f758b 08-May-2008 Axel Dörfler <axeld@pinc-software.de>

* Added PCI_hd_audio sub-type in the PCI_multimedia base class.
* Fixed some minor typos.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25393 a95241bf-73f2-0310-859d-f6bbb57e9c96


# a9410600 07-May-2008 Axel Dörfler <axeld@pinc-software.de>

* Rewrote controller reset - it now performs a full reset, and does no longer
assume the driver to be in reset when started.
* Major cleanup of the register access: now hda_controller and hda_stream both
have member functions for this, the OREGx() and REGx() macros are gone.
* Made the register names and definitions more descriptive - the short names
of the specs are still mentioned in the comments.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25352 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 30f55bc9 12-Mar-2008 Axel Dörfler <axeld@pinc-software.de>

* Rewrote widget output path discovery, it's now very similar to what the
FreeBSD driver is doing.
* hda_codec_new_audio_group() did not free the audio group's widgets on
failure.
* No longer create the input stream for now.
* Reworked multiaudio-support to work regardless if there is only a playback
or record stream.
* With these changes, I hear nothing on my laptop anymore (before there was
noise), but on another system, I can finally hear something that sounds very
much like the sinus wave the multi_audio_test application produces; the
sound quality is pretty bad though (lots of periodical noise and glitches).
* Made B_MULTI_GET_DESCRIPTION safe to be called from userland.
* Minor other cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24383 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 17959555 11-Mar-2008 Axel Dörfler <axeld@pinc-software.de>

* Separated widget parsing and debug output a bit better.
* More generic supported parameter support, respect the
AUDIO_CAP_AMPLIFIER_OVERRIDE, and AUDIO_CAP_FORMAT_OVERRIDE bits.
* More cleanups.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24360 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 0e8c0240 03-Mar-2008 Axel Dörfler <axeld@pinc-software.de>

* Also print the codec's revision.
* Only print [Output] if it's an output.
* Further cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24215 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 340dd4fe 29-Feb-2008 Axel Dörfler <axeld@pinc-software.de>

Renamed .c to .cpp, and fixed all warnings.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24178 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 105152d1 29-Feb-2008 Axel Dörfler <axeld@pinc-software.de>

* Rewrote CORB/RIRB handling: the previous code did not use it as a ring
buffer and would thus overwrite foreign memory after a while resp. reading
invalid responses.
* Further cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24177 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 7ef3822c 26-Feb-2008 Axel Dörfler <axeld@pinc-software.de>

* No longer enable interrupts for all possible streams - they are now enabled
on a per-stream basis in hda_stream_start().
* Also, don't turn on interrupt generation in the stream before starting the
stream.
* Create space for the DMA position update and set it in the controller, not
yet tested.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24144 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 629ab634 25-Feb-2008 Axel Dörfler <axeld@pinc-software.de>

* Playback can now be restarted after B_MULTI_BUFFER_FORCE_STOP again; the
hda_stream::buffer_ready_sem was deleted but not recreated again. Moved its
maintenance to hda_stream_{start|stop}().
* Replaced snooze(10) with spin(10) because that's probably what's wanted here.
* Added hda_stream::type field.
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24122 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 4919a4dc 25-Feb-2008 Axel Dörfler <axeld@pinc-software.de>

Coding style cleanup, also fixed some minor bugs I found during that work:
* hda_widget_get_stream_support() did reference an out-of-bounds response for
the stream support parameter.
* Bit 18 in the PCM support parameter is 20bit sample support, not 18bit support.
* Enabled reporting B_FMT_FLOAT capability (not tested at all yet).
* Fixed B_FMT_FLOAT size (float is only 4 bytes, not 8).
* No longer clobbers the request_* parameters in B_MULTI_GET_BUFFERS.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24117 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 44f16897 05-Feb-2008 Axel Dörfler <axeld@pinc-software.de>

* Removed B_CAN_INTERRUPT from acquire_sem_etc() call in hda_send_verbs();
that doesn't look right to me (and since there is a 50 ms timeout anyway...).
* Minor coding style cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23872 a95241bf-73f2-0310-859d-f6bbb57e9c96


# e7d7efa1 11-Jan-2008 Ithamar R. Adema <ithamar.adema@team-embedded.nl>

Some minor fixes; lots of debugging output still in there; not perfect yet

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23404 a95241bf-73f2-0310-859d-f6bbb57e9c96


# afc104a0 09-Jan-2008 Ithamar R. Adema <ithamar.adema@team-embedded.nl>

[HDA] When controller has multiple codecs, make sure we try to use the one with audio features. This should improve laptop support. More to come ;)

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23295 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 2caa4397 06-Oct-2007 Jérôme Duval <korli@users.berlios.de>

switch from COMPILE_FOR_R5 to HAIKU_TARGET_PLATFORM_HAIKU


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22460 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 641541a4 19-May-2007 Ithamar R. Adema <ithamar.adema@team-embedded.nl>

* Fix some bad error handling
* Plug some leaks
* Initial code for input/output bus discovery



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21174 a95241bf-73f2-0310-859d-f6bbb57e9c96


# fa48b9d8 17-May-2007 Ithamar R. Adema <ithamar.adema@team-embedded.nl>

Fixed the problem of not being able to work from Haiku. The main problem was that although the multi_audio API on BeOS hands the driver the settings as made in the Media prefs, the Haiku one just gives maximum values and assumes the driver will scale the values down. I didn't do that.

If you run Haiku on HDA hardware, you should have sound now too! :)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21161 a95241bf-73f2-0310-859d-f6bbb57e9c96


# abc35492 17-May-2007 Ithamar R. Adema <ithamar.adema@team-embedded.nl>

* Made code more Coding Guidelines compliant
* Fixed several sem/area leaks when restarting media services.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21160 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 9432d609 16-May-2007 Ithamar R. Adema <ithamar.adema@team-embedded.nl>

Fixed:
* Prepare code for exposing multi_audio interface on Audio Function Group level
* Some minor cleanups.
Todo:
* Publish devfs entries based on available Function Groups instead of HDA cards.
* Publish all mixer controls / output busses through multi_audio interface.
* Make recording work :)
* Check why we need 4096 samples to play ok.
* Figure out problems with driver on Haiku... currently only successfully tested on R5.

As you can see, plenty of things left to do, but progressing nicely. At least people can have sound on R5 now!



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21159 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 7c8482e9 16-May-2007 Ithamar R. Adema <ithamar.adema@team-embedded.nl>

* Count samples, not bytes, stupid :P
* Don't try to bypass semaphore counting, it should just work(tm)
* Minor cleanups.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21158 a95241bf-73f2-0310-859d-f6bbb57e9c96


# b0d9cd6f 13-May-2007 Ithamar R. Adema <ithamar.adema@team-embedded.nl>

* Delete all local copies of multi_audio from source tree.
* Change name of header for Haiku specific multi_audio to hmulti_audio (in line with the rename of the media addon itself)



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21136 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 2a3d3b7a 13-May-2007 Ithamar R. Adema <ithamar.adema@team-embedded.nl>

* More buffer (cycle) handling
* Locking of stream info.
* Add compile-time support for Haiku/BeOS multi_audio API.

TODO: Need to check out why we have multiple (different) multi_audio.h files floating around in the source tree....



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21135 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 89db0a5b 13-May-2007 Ithamar R. Adema <ithamar.adema@team-embedded.nl>

*** WARNING: UNSTABLE CODE AHEAD :P ***

This is the first (sort-of) working incarnation of the High Definition Audio driver. This
driver still has quite some way to go before coming to a point that we could call it stable
and useful, so please use with care. It has been developed on R5, so it might even become
useful for people still stuck on R5.

This driver was inspired by both the BSD work on HDA support, as well as our own dr_evil's
work on the ich_ac97 driver.

Before you start bugging me about completing the driver, or adding features, please capture
the serial debug output and mail it to ithamar AT unet DOT nl, including hardware details,
and success/failure descriptions.

As a last note, DasJott, if you're reading this, the first music it played was...
'Prodigy: Smack Your Bitch Up' :)



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21127 a95241bf-73f2-0310-859d-f6bbb57e9c96


# ec8fc5ee39bac3272d3223f8bc66ff5bb48bfd92 02-Sep-2014 Julian Harnath <julian.harnath@rwth-aachen.de>

Use uncached memory areas if snooping is not possible

* Some chipsets do not support bus-snooping for the HDA data
transfers. So, when trying to enable snooping, verify that the
setting was accepted.

* When snooping is not possible, set memory areas for audio buffers,
buffer descriptor lists and command ring-buffers as uncached to
ensure memory coherency with the HDA controller.

* This fixes KDLs during booting on some systems where snooping
is not supported (seen on two systems with AMD chipsets, maybe
applies to others as well).
After setting up the buffer descriptor list for a stream, it was a
gamble whether these writes would be visible to the HDA controller
when subsequently enabling the stream. On some boots it was unlucky
and then the HDA controller's DMA engine would go haywire and start
overwriting random kernel memory with audio input data. The
scheduler was usually the first victim and caused page fault KDLs
due to corrupted data structures.


# 84dfba29725224ef05391486cd983eaa8d5466da 01-Sep-2014 Julian Harnath <julian.harnath@rwth-aachen.de>

Preserve reserved bits in registers

* Do read-modify-write cycle to preserve bits marked as RsvdP in the
following registers: WAKEEN, CORBWP, CORBCTL, CORBSIZE, RIRBWP,
RINTCNT, RIRBCTL, RIRBSIZE.


# 73ad2473e7874b3702cf5b0fdf4c81b747812ed9 05-Nov-2013 Pawel Dziepak <pdziepak@quarnos.org>

Remove remaining unnecessary 'volatile' qualifiers


# 51b735b342238e43cac59bb01f1654f57d6681fc 01-Sep-2013 Jérôme Duval <jerome.duval@gmail.com>

hdaudio: enable MSI support

* disabled for nVidia and Creative Technology devices.


# 45732903d07ccec4eec384d839327f47b1321912 20-Sep-2012 Axel Dörfler <axeld@pinc-software.de>

Implemented MSI support.

* Does not seem to change anything, though (I'm also a victim of bug
#8949)
* Minor cleanup.


# c95f35ce9de5f9e8ed86142b19beca3ce6cc3eea 09-Aug-2012 Axel Dörfler <axeld@pinc-software.de>

Fixed 64 bit issue for the buffer descriptor base.


# b14ae02b959b3dd6f1d681515c445e71df725042 12-Jun-2010 Jérôme Duval <korli@users.berlios.de>

some verbs use a 16 bits payload


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37114 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 9a0a4979d5dad3a3689e2f8420abec40fdbd2a91 12-Jun-2010 Jérôme Duval <korli@users.berlios.de>

* add some helper functions to read/write verbs.
* try at support realtek alc888. alsa uses this init sequence.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37113 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 64d79eff7290437d24b1a420537c3ed5c144ab96 27-May-2010 Ingo Weinhold <ingo_weinhold@gmx.de>

* Changed physical_entry::{address,size} to phys_{addr,size}_t and changed
map_physical_memory()'s physicalAddress parameter type from void* to
phys_addr_t. This breaks source compatibility, but -- as long as
phys_{addr,size}_t remain 32 bit wide -- keeps binary compatibility with
BeOS.
* Adjusted all code using the affected interfaces (Oh what fun!). Added a few
TODOs in places where the wrong types (e.g. void* for physical addresses
are used). Looks like quite a few drivers aren't 64 bit safe and others
will break with PAE.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36960 a95241bf-73f2-0310-859d-f6bbb57e9c96


# e25dcf1a96e0fcadf6ce67afae010f6d5e601acf 15-Jan-2010 Jérôme Duval <korli@users.berlios.de>

* We now mute internal speakers when using headphones. We don't distinguish between headphones and mic jacks though.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35088 a95241bf-73f2-0310-859d-f6bbb57e9c96


# dfb72c7888dc9f25d5868e7698c67706c5705fcb 21-Dec-2009 Jérôme Duval <korli@users.berlios.de>

* warn_count is unused.
* the last valid index should be written in HDAC_STREAM_LAST_VALID instead of the fragment count.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34730 a95241bf-73f2-0310-859d-f6bbb57e9c96


# e4e70475db3a28ceae499db7beed0848c1defbaf 20-Dec-2009 Jérôme Duval <korli@users.berlios.de>

* style cleanup
* added location to pin widget control name


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34729 a95241bf-73f2-0310-859d-f6bbb57e9c96


# f887c7059e3604ec8d9bfe77e29f97f0d31fdffe 16-Dec-2009 Ingo Weinhold <ingo_weinhold@gmx.de>

Try to detect whether the stream's DMA position is broken and switch to using
the LPIB, if it is.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34684 a95241bf-73f2-0310-859d-f6bbb57e9c96


# e0a187dd5931a6bf829ea306f80d28c2a4e3cff9 15-Dec-2009 Ingo Weinhold <ingo_weinhold@gmx.de>

* stream_handle_interrupt():
- Round the DMA position for the buffer cycle computation. Apparently some
chipsets trigger the interrupt before the position has been updated.
- Don't just assume that stream->buffer_length frames have been processed
at that time. Use the exact stream position at that time. This makes the
performance time computation more precise and immune to the interrupt
being delayed.
* Init hda_stream::frames_count.

Audio skips on I/O seem to be gone for me, now. Not obviously motivated skips
still happen.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34671 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 4aafe92a0e65a2d8ae667548be97a1af72c17abb 29-Nov-2009 Jérôme Duval <korli@users.berlios.de>

* cleanup
* use gpio count for gpio quirks


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34355 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 144c4c6240d02385fc69fe159ecdd253641da0a1 29-Nov-2009 Jérôme Duval <korli@users.berlios.de>

* added vref and unsol responses definitions
* untested unsolicited response support
* added quirk support for vref and gpio
* vref are now enabled for all inputs, and gpio for some Apple Macs
* replaced dprintf with TRACE and ERROR macros


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34352 a95241bf-73f2-0310-859d-f6bbb57e9c96


# ba4d7ed20dbd4cf97ca7e8a869e958ffd659b725 13-Sep-2009 Jérôme Duval <korli@users.berlios.de>

* added input selector controls
* increased responses count
* only unmute active inputs on mixer widgets


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33120 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 1f5d96afb85daf74cabf5eb517d56ff408ddc266 21-Aug-2009 Jérôme Duval <korli@users.berlios.de>

we now print a warning message in the log when the interrupt comes in the second half of a buffer: this should mean the interrupt comes earlier than expected.
Please report such warnings, they can help to investigate timing issues with some hda codecs.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32589 a95241bf-73f2-0310-859d-f6bbb57e9c96


# d936f5e31fa2e40a9da45dd4e129153a82b75d0b 28-Jul-2009 Jérôme Duval <korli@users.berlios.de>

* now uses only one buffer_ready semaphore, this way the buffer exchange is done asap, useful when rates/formats are different between playback and record.
* checked what offsets my hardware my hardware really had: it affected only playback, and was 192 for 16 bits and 256 for 20/24 bits. With these values, playback and record are crystal clear.
As I can't find any references for such offset values anywhere, sorry it's not supposed to work out of the box on all hardware. Maybe we could adjust the offset at runtime.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31875 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 0bd93b7def8c10073f2cec8dad5caeb844acdb78 07-Mar-2009 Stephan Aßmus <superstippi@gmx.de>

* Use a default buffer frame count that is adapted to the sample rate
of the audio group. This is supposed to keep the latency about the same
regardless of sample rate and lessen the requirements on the system
performance when using higher sample rates. Currently the multi-audio
addon uses the highest available rate.
* Added TODO about the highest sample rate seemingly being forgotten in one
place.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29421 a95241bf-73f2-0310-859d-f6bbb57e9c96


# c71a6614e2c46e35d1796191c8fb04d9fb1071b0 01-Jan-2009 Jérôme Duval <korli@users.berlios.de>

* try to enable EAPD on capable pin widgets
* added a pin capabilities attribute instead of input and output pin attributes
* added ATI and nVidia vendor ids definitions
* uses "mic in" and "line in" when pin colors are undefined


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28839 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 34bda3ae2d8cd0d57cf719b67d19f008964bb2ae 19-Nov-2008 Jérôme Duval <korli@users.berlios.de>

introduced a widget inside the audio function group to extract widget node attributes and reuse functions.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28697 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 3fa33c82a4e24a5395896a477931720ecbb8d45d 17-Nov-2008 Jérôme Duval <korli@users.berlios.de>

* store vendor, revision, stepping, revision, minor, major in the codec struct
* check specific node ids for nodes declared as inputs which are really beepers
* when unmuting/setting amp on the input amplifier, iterate on each input instead of only the first one
* also unmute/set amp on the output and input amplifiers for the input and output paths, respectively


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28683 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 8c3da8dd2ca2427d7efa609ef8708bdf7d07da92 16-Nov-2008 Jérôme Duval <korli@users.berlios.de>

added a mixer interface


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28677 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 6d3c6e761ab2fcf3c4fe80b7e629b61abf03e877 09-Jul-2008 Jérôme Duval <korli@users.berlios.de>

reduced buffer size: with 4096, no buffer is received by the multiaudio addon


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26349 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 3787196a5a32fc32657a90a062c7d5dc56d2fbd0 08-Jul-2008 Jérôme Duval <korli@users.berlios.de>

* some methods to access stream registers were defined with wrong types
* use HDAC_BIDIR_STREAM_OFFSET and HDAC_OUTPUT_STREAM_OFFSET when applicable
* use a PAGE_ALIGN macro


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26330 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 359f758bc40ae970625212ce6bf1a4173163e2ff 08-May-2008 Axel Dörfler <axeld@pinc-software.de>

* Added PCI_hd_audio sub-type in the PCI_multimedia base class.
* Fixed some minor typos.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25393 a95241bf-73f2-0310-859d-f6bbb57e9c96


# a9410600271a751844bc99f643977479d591c07d 07-May-2008 Axel Dörfler <axeld@pinc-software.de>

* Rewrote controller reset - it now performs a full reset, and does no longer
assume the driver to be in reset when started.
* Major cleanup of the register access: now hda_controller and hda_stream both
have member functions for this, the OREGx() and REGx() macros are gone.
* Made the register names and definitions more descriptive - the short names
of the specs are still mentioned in the comments.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25352 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 30f55bc9908b08803b0fdd7f9f10e3a9f132a63f 12-Mar-2008 Axel Dörfler <axeld@pinc-software.de>

* Rewrote widget output path discovery, it's now very similar to what the
FreeBSD driver is doing.
* hda_codec_new_audio_group() did not free the audio group's widgets on
failure.
* No longer create the input stream for now.
* Reworked multiaudio-support to work regardless if there is only a playback
or record stream.
* With these changes, I hear nothing on my laptop anymore (before there was
noise), but on another system, I can finally hear something that sounds very
much like the sinus wave the multi_audio_test application produces; the
sound quality is pretty bad though (lots of periodical noise and glitches).
* Made B_MULTI_GET_DESCRIPTION safe to be called from userland.
* Minor other cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24383 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 17959555c2332cf547a3d880b6c7ab99c5c856f1 11-Mar-2008 Axel Dörfler <axeld@pinc-software.de>

* Separated widget parsing and debug output a bit better.
* More generic supported parameter support, respect the
AUDIO_CAP_AMPLIFIER_OVERRIDE, and AUDIO_CAP_FORMAT_OVERRIDE bits.
* More cleanups.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24360 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 0e8c024030a7e2687f35cc2ef8a3778b862076fd 03-Mar-2008 Axel Dörfler <axeld@pinc-software.de>

* Also print the codec's revision.
* Only print [Output] if it's an output.
* Further cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24215 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 340dd4fe3db4608f82f8cd3599d1fe0117233afa 29-Feb-2008 Axel Dörfler <axeld@pinc-software.de>

Renamed .c to .cpp, and fixed all warnings.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24178 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 105152d1f565933dbd8236f1eaf5da5d4ae12f1e 29-Feb-2008 Axel Dörfler <axeld@pinc-software.de>

* Rewrote CORB/RIRB handling: the previous code did not use it as a ring
buffer and would thus overwrite foreign memory after a while resp. reading
invalid responses.
* Further cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24177 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 7ef3822c001e6db5b9964f376e437258bec69934 26-Feb-2008 Axel Dörfler <axeld@pinc-software.de>

* No longer enable interrupts for all possible streams - they are now enabled
on a per-stream basis in hda_stream_start().
* Also, don't turn on interrupt generation in the stream before starting the
stream.
* Create space for the DMA position update and set it in the controller, not
yet tested.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24144 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 629ab634f57a2322639b423f0b21dde156fae3b8 25-Feb-2008 Axel Dörfler <axeld@pinc-software.de>

* Playback can now be restarted after B_MULTI_BUFFER_FORCE_STOP again; the
hda_stream::buffer_ready_sem was deleted but not recreated again. Moved its
maintenance to hda_stream_{start|stop}().
* Replaced snooze(10) with spin(10) because that's probably what's wanted here.
* Added hda_stream::type field.
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24122 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 4919a4dc6fd129fc81720250a1f7ac199786b34d 25-Feb-2008 Axel Dörfler <axeld@pinc-software.de>

Coding style cleanup, also fixed some minor bugs I found during that work:
* hda_widget_get_stream_support() did reference an out-of-bounds response for
the stream support parameter.
* Bit 18 in the PCM support parameter is 20bit sample support, not 18bit support.
* Enabled reporting B_FMT_FLOAT capability (not tested at all yet).
* Fixed B_FMT_FLOAT size (float is only 4 bytes, not 8).
* No longer clobbers the request_* parameters in B_MULTI_GET_BUFFERS.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24117 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 44f16897021638e8e307f36d2b204524c48023c3 05-Feb-2008 Axel Dörfler <axeld@pinc-software.de>

* Removed B_CAN_INTERRUPT from acquire_sem_etc() call in hda_send_verbs();
that doesn't look right to me (and since there is a 50 ms timeout anyway...).
* Minor coding style cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23872 a95241bf-73f2-0310-859d-f6bbb57e9c96


# e7d7efa1c72bd671bd5aa5758443440279975cf0 11-Jan-2008 Ithamar R. Adema <ithamar.adema@team-embedded.nl>

Some minor fixes; lots of debugging output still in there; not perfect yet

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23404 a95241bf-73f2-0310-859d-f6bbb57e9c96


# afc104a0832826bf9400ce23970656586d5eec75 09-Jan-2008 Ithamar R. Adema <ithamar.adema@team-embedded.nl>

[HDA] When controller has multiple codecs, make sure we try to use the one with audio features. This should improve laptop support. More to come ;)

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@23295 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 2caa43976d2bd32d1fc21ae0c8cddc6b540baa57 06-Oct-2007 Jérôme Duval <korli@users.berlios.de>

switch from COMPILE_FOR_R5 to HAIKU_TARGET_PLATFORM_HAIKU


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22460 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 641541a4f34cbfcedbe0f4b18d6f4ed2ef15c5f1 19-May-2007 Ithamar R. Adema <ithamar.adema@team-embedded.nl>

* Fix some bad error handling
* Plug some leaks
* Initial code for input/output bus discovery



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21174 a95241bf-73f2-0310-859d-f6bbb57e9c96


# fa48b9d88548b5c63330f811aa57d07a9bf020ec 17-May-2007 Ithamar R. Adema <ithamar.adema@team-embedded.nl>

Fixed the problem of not being able to work from Haiku. The main problem was that although the multi_audio API on BeOS hands the driver the settings as made in the Media prefs, the Haiku one just gives maximum values and assumes the driver will scale the values down. I didn't do that.

If you run Haiku on HDA hardware, you should have sound now too! :)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21161 a95241bf-73f2-0310-859d-f6bbb57e9c96


# abc35492427ddf6dd932ab3992f750c990d37889 17-May-2007 Ithamar R. Adema <ithamar.adema@team-embedded.nl>

* Made code more Coding Guidelines compliant
* Fixed several sem/area leaks when restarting media services.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21160 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 9432d6099199523dc896b9ad690e8f32d1bfcd4e 16-May-2007 Ithamar R. Adema <ithamar.adema@team-embedded.nl>

Fixed:
* Prepare code for exposing multi_audio interface on Audio Function Group level
* Some minor cleanups.
Todo:
* Publish devfs entries based on available Function Groups instead of HDA cards.
* Publish all mixer controls / output busses through multi_audio interface.
* Make recording work :)
* Check why we need 4096 samples to play ok.
* Figure out problems with driver on Haiku... currently only successfully tested on R5.

As you can see, plenty of things left to do, but progressing nicely. At least people can have sound on R5 now!



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21159 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 7c8482e991585675146d52f5df3b1e98147f591d 16-May-2007 Ithamar R. Adema <ithamar.adema@team-embedded.nl>

* Count samples, not bytes, stupid :P
* Don't try to bypass semaphore counting, it should just work(tm)
* Minor cleanups.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21158 a95241bf-73f2-0310-859d-f6bbb57e9c96


# b0d9cd6f665066ef752801665f1b935187119362 13-May-2007 Ithamar R. Adema <ithamar.adema@team-embedded.nl>

* Delete all local copies of multi_audio from source tree.
* Change name of header for Haiku specific multi_audio to hmulti_audio (in line with the rename of the media addon itself)



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21136 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 2a3d3b7ad6380159f02b6ee5af3101e0d12ec67b 13-May-2007 Ithamar R. Adema <ithamar.adema@team-embedded.nl>

* More buffer (cycle) handling
* Locking of stream info.
* Add compile-time support for Haiku/BeOS multi_audio API.

TODO: Need to check out why we have multiple (different) multi_audio.h files floating around in the source tree....



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21135 a95241bf-73f2-0310-859d-f6bbb57e9c96


# 89db0a5bf7261730fcf8d988412b660ccbe1ffc8 13-May-2007 Ithamar R. Adema <ithamar.adema@team-embedded.nl>

*** WARNING: UNSTABLE CODE AHEAD :P ***

This is the first (sort-of) working incarnation of the High Definition Audio driver. This
driver still has quite some way to go before coming to a point that we could call it stable
and useful, so please use with care. It has been developed on R5, so it might even become
useful for people still stuck on R5.

This driver was inspired by both the BSD work on HDA support, as well as our own dr_evil's
work on the ich_ac97 driver.

Before you start bugging me about completing the driver, or adding features, please capture
the serial debug output and mail it to ithamar AT unet DOT nl, including hardware details,
and success/failure descriptions.

As a last note, DasJott, if you're reading this, the first music it played was...
'Prodigy: Smack Your Bitch Up' :)



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@21127 a95241bf-73f2-0310-859d-f6bbb57e9c96