summaryrefslogtreecommitdiff
path: root/sound/soc/tegra/tegra_sndfx.h
diff options
context:
space:
mode:
Diffstat (limited to 'sound/soc/tegra/tegra_sndfx.h')
-rw-r--r--sound/soc/tegra/tegra_sndfx.h541
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