1. 04 Aug, 2018 1 commit
    • Jeffrey Lee's avatar
      Allow module initialisation to succeed if there is no audio device present · 0da194ee
      Jeffrey Lee authored
      Detail:
        Since we can cope with audio devices dynamically being added and removed once initialisation is complete, it seems sensible to also cope with the situation where no devices are available on startup.
        s/Sound0 - Rearrange Initialise_Module so that if no device is found on startup, the initial state of the module will be the same as if a device had been found but then went missing: configuration SWIs will continue to function, the next device to appear will automatically be selected as the active device (with sound automatically turning on), and manual Sound_Enable calls will produce an error saying no device is present. These changes should also allow the module to cope with situations where other support modules like DMAManager, RTSupport, or VFPSupport are (temporarily) unavailable on startup.
      Admin:
        Tested on iMX6
      
      
      Version 1.88. Tagged as 'Sound0HAL-1_88'
      0da194ee
  2. 01 Aug, 2018 1 commit
    • John Ballance's avatar
      Improved startup with transient HAL sound device · 01f225b8
      John Ballance authored
      Detail:
         A previous mod provided a compile time switch to leave SoundDMA present
         even when there was no HAL audio device. This has proved unnecessary,
         so has been removed. Instead, once the HAL device has been made available
         one should rmreinit in order; SoundDMA, SoundChannels, SoundScheduler,
         and then WaveSynth, Percussion, and StringLib. This ensures that the module
         dependant interactions are reinitialised.
         Additionally there was a possibility that if no HAL audio devices were
         available at startup it was possible to get a null pointer error under
         some circumstances.
      Admin:
         tested in iMx6 with other HAL audio devices both enabled and disabled
      
      Version 1.87. Tagged as 'Sound0HAL-1_87'
      01f225b8
  3. 13 May, 2018 1 commit
  4. 12 Jun, 2016 1 commit
    • Jeffrey Lee's avatar
      Use PSR manipulation macros. Add more ARMv6 optimisations to Sound0ARM. · 3ee869d8
      Jeffrey Lee authored
      Detail:
        s/Sound0 - Replace many manual MSR's with PSR manipulation macros, generally the new SEI/SetMode/etc. ones. Fix DMA completed callback restoring CPSR from wrong register.
        s/Sound0ARM - Replace manual MSR's with PSR manipulation macros. Optimise the buffer post-processing routines for ARMv6 by using SHADD16
      Admin:
        Tested on Raspberry Pi
      
      
      Version 1.85. Tagged as 'Sound0HAL-1_85'
      3ee869d8
  5. 08 Jun, 2016 1 commit
    • Jeffrey Lee's avatar
      Rename new device selection/enumeration SWIs. Add a way to query the supported... · 5b7df85d
      Jeffrey Lee authored
      Rename new device selection/enumeration SWIs. Add a way to query the supported sample rates of an arbitrary device. Add user-friendly names for the current HAL-based devices. Protect against level1 & level2 sound handlers that fail to preserve IRQ state.
      
      Detail:
        hdr/Sound, s/Sound0:
        - After some discussion it was decided that "Device" was a bit too generic for the device selection/enumeration SWIs (e.g. could be confusing when also referring to peripheral devices such as headphones or speakers), and so they've been renamed to use "Controller" instead.
        - Added a new reason code to Sound_ControllerInfo to read the supported sample rates for a controller, similar to Sound_SampleRate 0 & 2
        - Update IRQ handler to make sure IRQs are still off after calling level 1 (channel) & level 2 (scheduler) handlers - there's evidence that some third-party handlers fail to do this, which original IOMD versions of SoundDMA were tolerant of but newer versions were not.
        Resources/Germany/Messages, Resources/UK/Messages:
        - Added user-friendly, localisation-friendly names/descriptions for the current ROM-based devices which this module supports
      Admin:
        Tested on Raspberry Pi
        German messages in need of translation.
      
      
      Version 1.84. Tagged as 'Sound0HAL-1_84'
      5b7df85d
  6. 08 May, 2016 1 commit
  7. 12 Feb, 2016 1 commit
    • Jeffrey Lee's avatar
      Fix NEON detection · 0b77eff0
      Jeffrey Lee authored
      Detail:
        s/Sound0 - Add a missing condition code to the NEON detection code; FPSID bits must be set to indicate VFPv3+ (and MVFR0/1 availability) and MVFR1 bits must be set to indicate NEON availability
      Admin:
        Tested on Pandaboard
        Issue spotted by Sprow; old code would have been fine on all current machines, but could have failed on a hypothetical VFPv1/v2 machine which had non-standard MVFR registers
      
      
      Version 1.82. Tagged as 'Sound0HAL-1_82'
      0b77eff0
  8. 02 Dec, 2015 1 commit
    • Jeffrey Lee's avatar
      Fix ARM version of module · b3f79c87
      Jeffrey Lee authored
      Detail:
        s/Sound0 - Fix missing DoSoftMix symbol error when software mixer support is disabled
        s/Sound0ARM - Rename post-processing routines to match the names generated by the loop in Sound0
      Admin:
        Tested on Raspberry Pi
      
      
      Version 1.81. Retagged as 'Sound0HAL-1_81'
      b3f79c87
  9. 01 Dec, 2015 1 commit
    • Jeffrey Lee's avatar
      Add device enumeration and selection APIs. Make audio HAL device API more... · 8f5c46a4
      Jeffrey Lee authored
      Add device enumeration and selection APIs. Make audio HAL device API more flexible. Add a generic software mixer implementation that can be used for devices where no hardware mixer is available.
      
      Detail:
        Makefile - Include new source files. Export a C version of hdr/Sound.
        Resources/* - Add new error text to messages file and update command help text
        Version - Update MaxDeviceVersion. Add MinDeviceVersion definition to get rid of a magic constant from the code. Add new switch for whether software mixer support is enabled.
        hdr/AudioDevice - Extend with audio device API 3 features. Buffer size granularity can now be non-power of 2 values, and CustomDMA can be used in a synchronous manner instead of an asynchronous manner (asynchronous defers buffer filling to an RTSupport routine, synchronous performs it directly from within the callback from the device). Also correct a comment relating to AudioRateTable_Frequency.
        hdr/Sound - Add new SWIs and reason codes. Protect a portion of the header from being processed by Hdr2H (Hdr2H can't handle it)
        s/Sound0 - Change default sample rate & buffer size settings to 22050Hz (none of the hardware currently supported by this version of the module supports 20833Hz). Add implementations of the new SWIs and features. Tidy up a couple of other bits.
        s/Sound0NEON - Refactor post-processing code to add support for the software mixer - code is now generated by macros rather than copy & paste. Fix indentation of some other code sections.
        s/DeviceList - New file to contain code related to managing the list of audio devices that SoundDMA now keeps.
        s/SoftMix - New file containing the software mixer device implementation. Implements a single mixer channel to control the overall gain of the sound system. Mixing/volume scaling is performed by the buffer post-processing sequences in Sound0ARM/Sound0NEON, with the optimisation of skipping the processing for a gain of +0dB. Note however that Sound0ARM has yet to be updated and so software mixing is currently only available for the NEON version of the module.
      Admin:
        Tested in iMX6 ROM
        German resources are in need of translation
      
      
      Version 1.81. Tagged as 'Sound0HAL-1_81'
      8f5c46a4
  10. 06 Apr, 2015 2 commits
    • Robert Sprowson's avatar
      Fix for stack imbalance · d7c557d9
      Robert Sprowson authored
      If the RTSupport pollword says there's no work to do, SoundDMA would make a quick exit, but one instruction too early - trying to pop LR before it ever got pushed.
      
      Version 1.80. Tagged as 'Sound0HAL-1_80'
      d7c557d9
    • Robert Sprowson's avatar
      Rename exported flags · 68677cce
      Robert Sprowson authored
      Inspection of DMADevice/GPIODevice/RTCDevice suggests the equivalent of C structs become HALDeviceTHING and enums become THINGFlagName. Rename AudioDevice's flags ot match that pattern.
      No code change, not tagged.
      68677cce
  11. 28 Mar, 2015 1 commit
    • Jeffrey Lee's avatar
      Fix crash if HAL device fails to initialise · 6bd01a0c
      Jeffrey Lee authored
      Detail:
        s/Sound0 - Fix TryInitialise_Device not setting R0 to zero on exit if the HAL device fails to initialise. Whatever (non-zero) value was already in R0 would then be interpreted as an error pointer, most likely leading to a crash.
      Admin:
        Tested on Raspberry Pi
      
      
      Version 1.79. Tagged as 'Sound0HAL-1_79'
      6bd01a0c
  12. 15 Sep, 2014 1 commit
    • Jeffrey Lee's avatar
      Fix DoReverse flag aliasing the Level1 updated flag · bfda2f1b
      Jeffrey Lee authored
      Detail:
        s/Sound0 - Get rid of the two VIDC20-era Lin16 flag bits and shuffle the other flags down so that the top bit of the flags remains clear. In the buffer fill code the top bit is used to detect when the log-to-lin code needs recompiling, plus it's passed on to the level 1 handler so that it can detect updates, so having the bit permanently set if stereo reverse is in use could cause numerous issues.
      Admin:
        Tested on Raspberry Pi
        Fixes issue reported on forums:
        https://www.riscosopen.org/forum/forums/4/topics/2814
      
      
      Version 1.78. Tagged as 'Sound0HAL-1_78'
      bfda2f1b
  13. 22 Jun, 2014 1 commit
  14. 17 Dec, 2013 1 commit
  15. 09 Nov, 2012 1 commit
    • Jeffrey Lee's avatar
      Don't complain if sound mixer doesn't have a speaker channel · e81301eb
      Jeffrey Lee authored
      Detail:
        s/Sound0 - *Speaker / Sound_Speaker no longer complains if a mixer is present but there's no speaker channel, and instead reports that the speaker is on. This matches the behaviour for if the mixer isn't present, and the behaviour of previous versions of SoundDMA which lacked speaker control (e.g. IOMD)
      Admin:
        Tested on Raspberry Pi
        Fixes "Mixer channel not found" error from Zool & Twin World (although Twin World still lacks audio)
      
      
      Version 1.75. Tagged as 'Sound0HAL-1_75'
      e81301eb
  16. 22 Sep, 2012 1 commit
    • Jeffrey Lee's avatar
      Make sure initial buffer size doesn't violate any constraints · 9c6e907c
      Jeffrey Lee authored
      Detail:
        s/Sound0 - Rather than manually calling WorkOutVIDCParams & UpdateHALParams, module initialisation now branches into Sound0Config in order to make sure all buffer size/sample rate/channel count constraints are checked.
      Admin:
        Tested on Raspberry Pi
        Sound will probably partially work with latest firmware, but still die on the next settings change.
      
      
      Version 1.74. Tagged as 'Sound0HAL-1_74'
      9c6e907c
  17. 20 Aug, 2012 1 commit
    • Jeffrey Lee's avatar
      Fix building of NEON optimised version · 06c8e967
      Jeffrey Lee authored
      Detail:
        s/Sound0 - Limited ADR range prevented NEON version from building
      Admin:
        Tested on BB-xM with high processor vectors
      
      
      Version 1.73. Tagged as 'Sound0HAL-1_73'
      06c8e967
  18. 19 Aug, 2012 1 commit
    • Jeffrey Lee's avatar
      Add support for sound devices disappearing & re-appearing post-initialisation · f9ea8ff0
      Jeffrey Lee authored
      Detail:
        Version, s/Sound0 - Reworked code to allow the module to cope with sound devices vanishing and then re-appearing once the module has initialised.
        It's handled in the same way as the other dependencies; if the device vanishes while sound is active, SoundDMA will automatically re-enable sound once a replacement device is found.
        While there's no device available, Sound_SampleRate will claim that the system only supports one sample rate - the rate which was last in use. Other SWIs to set the sound system parameters (e.g. channel count, buffer size, stereo positions) will work as normal.
        Once a new device is activated SoundDMA will adjust its settings to make sure they match the capabilities of the new device.
        Currently the system assumes there's only one sound device available; if a device vanishes then SoundDMA won't check for any other devices which are already present. There's also still the requirement that a device must be present in order for the module to initialise.
        Also fixed CustomDMACallback to obey the spec on the wiki (SoundRMA ptr now taken in ATPCS-friendly r1 instead of r12)
      Admin:
        Tested on Raspberry Pi with high processor vectors
      
      
      Version 1.72. Tagged as 'Sound0HAL-1_72'
      f9ea8ff0
  19. 14 Aug, 2012 1 commit
    • Jeffrey Lee's avatar
      Update audio controller API to version 2 · ca7d781d
      Jeffrey Lee authored
      Detail:
        hdr/AudioDevice - extended audio device structure for API version 2. This adds support for controllers that don't use DMAManager, runtime selection of stereo reversal, and device-dictated buffer minimum size & granularity constraints
        Version, s/Sound0, s/Sound0ARM, s/Sound0NEON - Stripped out StereoReverse compile-time switch, adding support for runtime selection instead. Added support for other new features of device API version 2.
      Admin:
        Tested on Raspberry Pi with high processor vectors
      
      
      Version 1.71. Tagged as 'Sound0HAL-1_71'
      ca7d781d
  20. 29 Jun, 2012 2 commits
  21. 05 Apr, 2012 1 commit
    • Jeffrey Lee's avatar
      Fix oversampling buffer size checks · f1e8ff01
      Jeffrey Lee authored
      Detail:
        s/Sound0 - After oversampling each sample is 8 bytes, not 4
      Admin:
        Tested in OMAP3 ROM
        Playing MP3 files through DigitalCD/AudioMPEG no longer crashes
      
      
      Version 1.70. Tagged as 'Sound0HAL-1_70'
      f1e8ff01
  22. 01 Apr, 2012 1 commit
    • Jeffrey Lee's avatar
      Fix building of non-NEON version · c217ebdc
      Jeffrey Lee authored
      Detail:
        s/Sound0 - unguarded call to Finalise_NEON was causing an error if the NEON code was disabled
      Admin:
        Non-NEON version builds properly again
      
      
      Version 1.69. Retagged as 'Sound0HAL-1_69'
      c217ebdc
  23. 24 Mar, 2012 1 commit
    • Jeffrey Lee's avatar
      Major overhaul · cb8e2b28
      Jeffrey Lee authored
      Detail:
        s/Sound0ARM - Mulaw-to-linear and mono/oversampling code ripped out of s/Sound0 and moved to its own file. Minor optimisations for ARMv6+
        s/Sound0NEON - NEON-optimised Mulaw-to-linear and mono/oversampling code
        Version - Update UseLDRSH switch to depend on NoARMv4 arch flag. Add UseNEON switch.
        hdr/Sound - Added new sound start/stop/config changing service call & Sound_ReadSysInfo SWI definitions
        s/Sound0:
         - Added support for new service calls & Sound_ReadSysInfo SWI
         - Added support for oversampling
         - Fixed up stereo reversal to work if NoUnaligned is TRUE
         - Added support for using the new NEON-optimised buffer/manipulation fill routines. Currently whether to use NEON or not must be selected at compile time.
         - Added timing/profiling code, controlled via TimingCode switch. Uses a HAL timer to measure performance of various sections of the buffer fill/IRQ handling code
         - Updated buffer size constraints in Sound0Config to properly cope with oversampling and NEON code
         - Fixed Sound_SampleRate 3 corrupting the stored sound period value. This would cause Sound_Configure to switch to a different sample rate on next call (even if all 0 parameters were passed)
         - Fixed finalisation not releasing the DMA channel
         - Changed buffer fill code to run in an RTSupport routine instead of in the DMAManager DMASync callback (since we're not meant to be enabling IRQs from in there!). Old code resulted in buffer filling going out of sync with DMA if the IRQ timing was right.
         - Rewrote init/finalisation and sound enable/disable code so things don't fail horribly if one of the required modules (DMAManager, RTSupport, VFPSupport) dies.
         - Sound will be disabled if one of the required modules dies, but will automatically re-enable as the module(s) become available again.
        Resources/UK/Messages, Resources/Germany/Messages - New error messages
      Admin:
        Tested in ROM softload on BB-xM, in both ARM and NEON versions
        German resources are in need of translation
      
      
      Version 1.69. Tagged as 'Sound0HAL-1_69'
      cb8e2b28
  24. 10 Mar, 2012 1 commit
  25. 28 Feb, 2010 1 commit
    • Jeffrey Lee's avatar
      Fix the 'Module_VectorCode' IRQ handler to preserve R14_svc before calling any SWIs · 9da527e2
      Jeffrey Lee authored
      Detail:
        s/Sound0 - Module_VectorCode, which is currently used to respond to FIFO underflows in the OMAP3 sound driver, wasn't saving R14_svc before calling a SWI from IRQ mode, potentially leading to malfunction if the CPU was in SVC mode at the time of the interrupt. This has been fixed.
      Admin:
        Tested on rev C2 beagleboard
      
      
      Version 1.67. Tagged as 'Sound0HAL-1_67'
      9da527e2
  26. 16 Jan, 2010 2 commits
    • Jeffrey Lee's avatar
      Minor sSound0HAL update to ensure correct behaviour of devif device does not provide an IRQ · dacc4219
      Jeffrey Lee authored
      Version 1.66. Tagged as 'Sound0HAL-1_66'
      dacc4219
    • Jeffrey Lee's avatar
      Add initial version of new SoundDMA module, 'Sound0HAL' · 4adc5cfd
      Jeffrey Lee authored
      Detail:
        Based on the Sound0Trid source code, this version of SoundDMA makes use of a new version of the audio controller HAL device API. Briefly:
        * DMA is handled by the HALified DMAManager
        * The DMASync callback is used to trigger audio buffer filling
        * The set of available sample rates is dictated by the audio controller device
        * Basic support for resetting the audio when an error occurs (e.g. FIFO under/overflow causing stereo channels to be swapped)
        * Module is now ARMv6/7-safe, due to use of LDR(S)H instead of unaligned loads. This comes at the cost of losing RiscPC compatability. Can be disabled if needed via setting UseLDRSH to false.
        * To keep the code simple, it only accepts devices which use the new API version.
        * Sound0Enable now enables IRQs for most of its execution, to allow for supporting slow devices (e.g. IIC communications with the TPS65950). The PRMs describe Sound_Enable as having undefined reentrancy & IRQ state, so this should be OK with regards to code compatability.
        * The stereo reverse code still needs to be made ARMv6/v7-safe, as well as (preferably) being something that can be selectively enabled at runtime, depending on the audio controller in use
        * The oversampling code is disabled, much as it was in Sound0Trid.
        * The pipelining of sample rate changes that Sound0Trid performed is gone - partly to keep the code simple, and partly because it wouldn't work too well with the TPS65950 (due to the intermediate FIFO that the samples pass through, and the fact that the TPS audio codec must be turned off to change the sample rate)
      Admin:
        Tested on rev C2 beagleboard.
      
      
      Version 1.65. Tagged as 'Sound0HAL-1_65'
      4adc5cfd