diff options
Diffstat (limited to 'sound/soc/tegra/tegra_sndfx.h')
-rw-r--r-- | sound/soc/tegra/tegra_sndfx.h | 541 |
1 files changed, 541 insertions, 0 deletions
diff --git a/sound/soc/tegra/tegra_sndfx.h b/sound/soc/tegra/tegra_sndfx.h new file mode 100644 index 000000000000..1e9bb82940a4 --- /dev/null +++ b/sound/soc/tegra/tegra_sndfx.h @@ -0,0 +1,541 @@ +/* + * Copyright (c) 2010 NVIDIA Corporation. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * Neither the name of the NVIDIA Corporation nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + */ + +#ifndef INCLUDED_nvddk_audiofx_H +#define INCLUDED_nvddk_audiofx_H + + +#if defined(__cplusplus) +extern "C" +{ +#endif + +#include "nvrm_module.h" +#include "nvrm_transport.h" +#include "nvrm_init.h" + +/** @file + * @brief <b>NVIDIA Driver Development Kit: NvAudioFx APIs</b> + * + * @b Description: Declares Interface for NvAudioFx APIs. + */ + +/** + * @brief API Object Handles. + * + * NvAudioFxObjectHandle is the base handle for every type in the API. + */ + +typedef struct NvAudioFxObjectRec *NvAudioFxObjectHandle; + +typedef struct NvAudioFxRec *NvAudioFxHandle; + +typedef struct NvAudioFxIoRec *NvAudioFxIoHandle; + +typedef struct NvAudioFxMixBufferRec *NvAudioFxMixBufferHandle; + +typedef struct NvAudioFxMixerRec *NvAudioFxMixerHandle; + +typedef struct NvAudioFxNotifierRec *NvAudioFxNotifierHandle; + +typedef struct NvAudioFxStreamRec *NvAudioFxStreamHandle; + +/** + * @brief Object IDs. + */ + +typedef NvS32 NvObjectId; +#define NvObjectNullId (0x0) +#define NvAudioFxObjectId (0x10000000) +#define NvAudioFxId (0x11000000) +#define NvAudioFxIoId (0x11100000) +#define NvAudioFxPluginId (0x11200000) +#define NvAudioFxMixBufferId (0x12000000) +#define NvAudioFx3dGroupId (0x14000000) +#define NvAudioFxNotifierId (0x30000000) +#define NvAudioFxConvertId (0x11000001) +#define NvAudioFxDrcId (0x11000002) +#define NvAudioFxEqId (0x11000003) +#define NvAudioFxMixerId (0x11000004) +#define NvAudioFxMixId (0x11000005) +#define NvAudioFxPeqId (0x11000006) +#define NvAudioFxResizeId (0x11000007) +#define NvAudioFxSplitId (0x11000008) +#define NvAudioFxSpreaderId (0x11000009) +#define NvAudioFxSrcId (0x1100000a) +#define NvAudioFxSwitchId (0x1100000b) +#define NvAudioFxVolumeId (0x1100000c) +#define NvAudioFxStreamId (0x11100001) +#define NvAudioFxI2sId (0x11100002) +#define NvAudioFxI2s2Id (0x11100002) +#define NvAudioFxSpdifId (0x11100003) +#define NvAudioFxDefaultPlaybackMixId (0x11300001) +#define NvAudioFxDefaultPlaybackSplitId (0x11300002) +#define NvAudioFxDefaultRecordMixId (0x11300003) +#define NvAudioFxDefaultRecordSplitId (0x11300004) +#define NvAudioFxI2sPlaybackMixId (0x11300005) +#define NvAudioFxI2sRecordSplitId (0x11300006) +#define NvAudioFxI2sLoopbackSplitId (0x11300007) +#define NvAudioFxI2s2PlaybackMixId (0x11300008) +#define NvAudioFxI2s2RecordSplitId (0x11300009) +#define NvAudioFxI2s2LoopbackSplitId (0x1130000a) +#define NvAudioFxSpdifPlaybackMixId (0x1130000b) +#define NvAudioFxSpdifRecordSplitId (0x1130000c) +#define NvAudioFxSpdifLoopbackSplitId (0x1130000d) +#define NvAudioFxMusicMixId (0x1130000e) +#define NvAudioFxMusicSplitId (0x1130000f) +#define NvAudioFxPhoneMixId (0x11300010) +#define NvAudioFxPhoneSplitId (0x11300011) + +// +// Mixer +// +------+ +// | | +// | FX |--@ ScratchSource ------------+ +// | | | +// +------+ | +// +// Source Sink +// +------+ +------+ +// Copy Sink @--| |--@ Loopback Copy Sink @--| |--@ Loopback +// | FX | | FX | +// ----> Sink @--| |--@ Source ------> Sink @--| |--@ Source ----> +// +------+ +------+ +// + +typedef NvS32 NvAudioFxPin; +#define NvAudioFxScratchSourcePin (-4) +#define NvAudioFxLoopbackPin (-3) +#define NvAudioFxCopySinkPin (-2) +#define NvAudioFxInvalidPin (-1) +#define NvAudioFxSinkPin (0) +#define NvAudioFxSourcePin (1) + +typedef enum +{ + NvAudioFxProperty_Attach, + NvAudioFxProperty_Detach, + NvAudioFxProperty_Format, + NvAudioFxProperty_Method, + NvAudioFxProperty_SampleRate, + NvAudioFxProperty_State, + NvAudioFxPinProperty_Format, + NvAudioFxDrcProperty_Drc, + NvAudioFxEqProperty_Eq, + NvAudioFxIoProperty_AddEvent, + NvAudioFxIoProperty_Position, + NvAudioFxIoProperty_RemoveEvent, + NvAudioFxIoProperty_SetMappedPositionBuffer, + NvAudioFxMixerProperty_ProcessBufferSize, + NvAudioFxMixProperty_Headroom, + NvAudioFxNotifierProperty_Connect, + NvAudioFxNotifierProperty_Disconnect, + NvAudioFxPeqProperty_Peq, + NvAudioFxResizeProperty_OutputSize, + NvAudioFxSpreaderProperty_Spreader, + NvAudioFxSrcProperty_SampleRateShift, + NvAudioFxVolumeProperty_Ramping, + NvAudioFxVolumeProperty_Volume, + NvAudioFxProperty_Num, + NvAudioFxProperty_Force32 = 0x7FFFFFFF +} NvAudioFxProperty; + +// Description of the NvAudioFxProperty_Attach and +// NvAudioFxProperty_Detach properties. + +typedef struct NvAudioFxConnectionDescriptorRec +{ + NvAudioFxPin SourcePin; + NvAudioFxHandle hSink; + NvAudioFxPin SinkPin; +} NvAudioFxConnectionDescriptor; + +// Audio format information of the stream or buffer. + +typedef struct NvAudioFxFormatRec +{ + NvU32 FormatTag; + NvU32 SampleRate; + NvU32 Channels; + NvU32 BitsPerSample; + NvU32 ChannelMask; +} NvAudioFxFormat; + +// Description of the NvAudioFxProperty_Method property. + +typedef enum +{ + NvAudioFxMethod_Sliced, + NvAudioFxMethod_Unsliced, + NvAudioFxMethod_Num, + NvAudioFxMethod_Force32 = 0x7FFFFFFF +} NvAudioFxMethod; + +// Description of the position property. + +typedef NvU64 NvAudioFxPosition; + +// Description of supported power states in AudioFx. + +typedef enum +{ + NvAudioFxPowerState_Low, + NvAudioFxPowerState_High, + NvAudioFxPowerState_Full, + NvAudioFxPowerState_Ready, + NvAudioFxPowerState_Off, + NvAudioFxPowerState_Num, + NvAudioFxPowerState_Force32 = 0x7FFFFFFF +} NvAudioFxPowerState; + +// Description of the supported priority states. + +typedef enum +{ + NvAudioFxPriority_Normal, + NvAudioFxPriority_Medium, + NvAudioFxPriority_High, + NvAudioFxPriority_Critical, + NvAudioFxPriority_Num, + NvAudioFxPriority_Force32 = 0x7FFFFFFF +} NvAudioFxPriority; + +// Description of the NvAudioFxProperty_State property. + +typedef enum +{ + NvAudioFxState_Uninitialized, + NvAudioFxState_Initialized, + NvAudioFxState_Stop, + NvAudioFxState_Run, + NvAudioFxState_Pause, + NvAudioFxState_Disable, + NvAudioFxState_Num, + NvAudioFxState_Force32 = 0x7FFFFFFF +} NvAudioFxState; + +// Audio DRC information. + +typedef struct NvAudioFxDrcDescriptorRec +{ + NvS32 EnableDrc; + NvS32 NoiseGateThreshold; + NvS32 LowerCompThreshold; + NvS32 UpperCompThreshold; + NvS32 ClippingThreshold; +} NvAudioFxDrcDescriptor; + +// Audio EQ information. +#define NvAudioFxEqNumFilters (5) +#define NvAudioFxEqNumChannels (2) + +typedef struct NvAudioFxEqDescriptorRec +{ + NvS32 dBGain[NvAudioFxEqNumChannels][NvAudioFxEqNumFilters]; + +}NvAudioFxEqDescriptor; + +// Audio Spreader information. + +typedef struct NvAudioFxSpreaderDescriptorRec +{ + NvU32 SpeakerWidth; +} NvAudioFxSpreaderDescriptor; + +// Parameteric EQ Filter types + +typedef enum +{ + NvAudioFxIirFilter_Undefined, + NvAudioFxIirFilter_Bandpass, + NvAudioFxIirFilter_Highpass, + NvAudioFxIirFilter_Lowpass, + NvAudioFxIirFilter_Num, + NvAudioFxIirFilter_Force32 = 0x7FFFFFFF +} NvAudioFxIirFilter; + +typedef struct NvAudioFxPeqDescriptorRec +{ + NvU32 Enable; + NvU32 FilterType[NvAudioFxIirFilter_Num]; + NvS32 CenterFrequency[NvAudioFxIirFilter_Num]; + NvS32 Bandwidth[NvAudioFxIirFilter_Num]; + NvS32 dBGain[NvAudioFxIirFilter_Num]; + +}NvAudioFxPeqDescriptor; + +// Audio pin-specific format information of the stream or buffer. + +typedef struct NvAudioFxPinFormatDescriptorRec +{ + NvAudioFxFormat Format; + NvAudioFxPin Pin; +} NvAudioFxPinFormatDescriptor; + +// Audio volume information of the stream or buffer. + +typedef struct NvAudioFxVolumeDescriptorRec +{ + NvS32 LeftVolume; + NvS32 RightVolume; + NvU32 Mute; +} NvAudioFxVolumeDescriptor; + +// Description of the NvAudioFxVoiceProperty_SetMappedPositionBuffer property. + +typedef struct NvAudioFxMappedBufferDescriptorRec +{ + NvAudioFxMixBufferHandle hMixBuffer; + NvU32 Offset; +} NvAudioFxMappedBufferDescriptor; + + /** + * @brief Defines the structure for adding a buffer to a stream. + */ + +typedef struct NvAudioFxBufferDescriptorRec +{ + + // A pointer which may be used for already mapped buffers. + void* pAddr; + + // A physical address for accessing the buffer. + NvRmPhysAddr PhysicalAddr; + + // The MixBuffer handle returned from NvAudioFxMixerMapBuffer. + NvAudioFxMixBufferHandle hMixBuffer; + + // Buffer offset in bytes. + NvU32 Offset; + + // Buffer size in bytes. + NvU32 Size; + + // Size of non-Zero Fill data in buffer, usually same as Size + NvU32 ValidSize; + + // The buffer format information. + NvAudioFxFormat Format; +} NvAudioFxBufferDescriptor; + +// Description of the NvAudioFxNotifierProperty_Connect property. + +typedef struct NvAudioFxNotifierConnectionDescriptorRec +{ + NvU8 PortName[16]; +} NvAudioFxNotifierConnectionDescriptor; + +// Description of the NvAudioFxProperty_AddEvent and +// NvAudioFxProperty_RemoveEvent properties. + +typedef NvS32 NvAudioFxEvent; +#define NvAudioFxEventBufferDone (0x1) +#define NvAudioFxEventStateChange (0x2) +#define NvAudioFxEventFormatChange (0x4) +#define NvAudioFxEventEndOfStream (0x8) +#define NvAudioFxEventPowerStateChange (0x10) +#define NvAudioFxEventAll (0xffffffff) + +typedef struct NvAudioFxMessageRec +{ + NvAudioFxEvent Event; + NvAudioFxHandle hFx; + void* pContext; +} NvAudioFxMessage; + +typedef struct NvAudioFxBufferDoneMessageRec +{ + NvAudioFxMessage m; + NvAudioFxPosition Position; +} NvAudioFxBufferDoneMessage; + +typedef struct NvAudioFxStateChangeMessageRec +{ + NvAudioFxMessage m; + NvAudioFxState State; +} NvAudioFxStateChangeMessage; + +typedef struct NvAudioFxFormatChangeMessageRec +{ + NvAudioFxMessage m; + NvAudioFxFormat Format; +} NvAudioFxFormatChangeMessage; + +typedef struct NvAudioFxPowerStateChangeMessageRec +{ + NvAudioFxMessage m; + NvAudioFxPowerState PowerState; +} NvAudioFxPowerStateChangeMessage; + + /** + * @brief Initializes and opens the AudioFX Mixer. + * + * @retval NvAudioFxMixerHandle A non-NULL value will be returned if the mixer + * is successfully opened. + */ + + NvAudioFxMixerHandle NvddkAudioFxMixerOpen( + void ); + + /** + * @brief Closes the AudioFX Mixer. This function frees the resources associated + * with the Mixer handle and cannot fail. + * + * @param hMixer A handle from NvAudioFxMixerOpen(). If hMixer is NULL or + * invalid, this API does nothing. + */ + + void NvddkAudioFxMixerClose( + NvAudioFxMixerHandle hMixer ); + + /** + * @brief Creates and initializes an AudioFX object. + * + * @param hMixer A handle from NvAudioFxMixerOpen(). If hMixer is NULL the + * object will be created by the Global Mixer. A NULL handle should only be + * used from the driver and not a normal client application. + * @param Id The ID of the object to create. + * + * @retval NvAudioFxObjectHandle A non-NULL value will be returned if the + * object is successfully created. + */ + + NvAudioFxObjectHandle NvddkAudioFxMixerCreateObject( + NvAudioFxMixerHandle hMixer, + NvObjectId Id ); + + /** + * @brief Destroys the AudioFX object. + * + * @param hObject A handle from NvAudioFxMixerCreateObject. If hObject is + * NULL, this API does nothing. + */ + + void NvddkAudioFxMixerDestroyObject( + NvAudioFxObjectHandle hObject ); + + /** + * @brief Maps a buffer to AudioFX address space. + */ + + NvAudioFxMixBufferHandle NvddkAudioFxMixerMapBuffer( + NvAudioFxMixerHandle hMixer, + NvU32 NvRmMemHandleId, + NvU32 Offset, + NvU32 Size ); + + /** + * @brief Unmaps a buffer from the AudioFX address space. + */ + + void NvddkAudioFxMixerUnmapBuffer( + NvAudioFxMixBufferHandle hMixBuffer ); + + /** + * @brief Adds a buffer to a Stream object. + * + * @param hStream Handle to the Stream object to add the buffer. + * @param pDescriptor Description of the buffer to add to the stream. + * + * @retval NvSuccess Indicates the operation succeeded. + */ + + NvError NvddkAudioFxStreamAddBuffer( + NvAudioFxStreamHandle hStream, + NvAudioFxBufferDescriptor * pDescriptor ); + +/** + * @brief Get the property value from an AudioFX object. + * + * @param hObject Handle of the object to get the property value. + * @param Property The property of interest. + * @param Size Size of the descriptor. + * @param pDescriptor Holds the value of the current property. + * + * @retval NvSuccess Indicates the operation succeeded. + */ + + NvError NvddkAudioFxGetProperty( + NvAudioFxObjectHandle hObject, + NvAudioFxProperty Property, + NvU32 Size, + void* pProperty ); + +/** + * @brief Set a property value on an AudioFX object. + * + * @param hObject Handle of the object to set the property on. + * @param Property The property of interest. + * @param Size Size of the property descriptor. + * @param pProperty Holds the value of the property to set. + * + * @retval NvSuccess Indicates the operation succeeded. + */ + + NvError NvddkAudioFxSetProperty( + NvAudioFxObjectHandle hObject, + NvAudioFxProperty Property, + NvU32 Size, + void* pProperty ); + +/** + * @brief AVP API Function Table + */ + +typedef struct NvddkAudioFxFxnTableRec +{ + NvAudioFxMixerHandle (*MixerOpen)(void); + void (*MixerClose)(NvAudioFxMixerHandle hMixer); + NvAudioFxObjectHandle (*MixerCreateObject)(NvAudioFxMixerHandle hMixer, NvObjectId Id); + void (*MixerDestroyObject)(NvAudioFxObjectHandle hObject); + NvAudioFxMixBufferHandle (*MixerMapBuffer)(NvAudioFxMixerHandle hMixer, NvU32 NvRmMemHandleId, NvU32 Offset, NvU32 Size); + void (*MixerUnmapBuffer)(NvAudioFxMixBufferHandle hMixBuffer); + NvError (*StreamAddBuffer)(NvAudioFxStreamHandle hStream, NvAudioFxBufferDescriptor* pDescriptor); + NvError (*GetProperty)(NvAudioFxObjectHandle hObject, NvAudioFxProperty Property, NvU32 Size, void* pProperty); + NvError (*SetProperty)(NvAudioFxObjectHandle hObject, NvAudioFxProperty Property, NvU32 Size, void* pProperty); + +} NvddkAudioFxFxnTable; + +static const NvU32 NvddkAudioFxFxnTableId = 0x6e766178; // 'nvax' + +typedef enum +{ + NvAudioFxIoctl_Generic = 5020, + NvAudioFxIoctl_ForceWord = 0x7FFFFFFF, + +} NvAudioFxIoctl; + +#if defined(__cplusplus) +} +#endif + +#endif |