123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234 |
- /*
- * The driver for the Cirrus Logic's Sound Fusion CS46XX based soundcards
- * Copyright (c) by Jaroslav Kysela <perex@perex.cz>
- *
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- *
- */
- #ifndef __CS46XX_DSP_SPOS_H__
- #define __CS46XX_DSP_SPOS_H__
- #include "cs46xx_dsp_scb_types.h"
- #include "cs46xx_dsp_task_types.h"
- #define SYMBOL_CONSTANT 0x0
- #define SYMBOL_SAMPLE 0x1
- #define SYMBOL_PARAMETER 0x2
- #define SYMBOL_CODE 0x3
- #define SEGTYPE_SP_PROGRAM 0x00000001
- #define SEGTYPE_SP_PARAMETER 0x00000002
- #define SEGTYPE_SP_SAMPLE 0x00000003
- #define SEGTYPE_SP_COEFFICIENT 0x00000004
- #define DSP_SPOS_UU 0x0deadul /* unused */
- #define DSP_SPOS_DC 0x0badul /* don't care */
- #define DSP_SPOS_DC_DC 0x0bad0badul /* don't care */
- #define DSP_SPOS_UUUU 0xdeadc0edul /* unused */
- #define DSP_SPOS_UUHI 0xdeadul
- #define DSP_SPOS_UULO 0xc0edul
- #define DSP_SPOS_DCDC 0x0badf1d0ul /* don't care */
- #define DSP_SPOS_DCDCHI 0x0badul
- #define DSP_SPOS_DCDCLO 0xf1d0ul
- #define DSP_MAX_TASK_NAME 60
- #define DSP_MAX_SYMBOL_NAME 100
- #define DSP_MAX_SCB_NAME 60
- #define DSP_MAX_SCB_DESC 200
- #define DSP_MAX_TASK_DESC 50
- #define DSP_MAX_PCM_CHANNELS 32
- #define DSP_MAX_SRC_NR 14
- #define DSP_PCM_MAIN_CHANNEL 1
- #define DSP_PCM_REAR_CHANNEL 2
- #define DSP_PCM_CENTER_LFE_CHANNEL 3
- #define DSP_PCM_S71_CHANNEL 4 /* surround 7.1 */
- #define DSP_IEC958_CHANNEL 5
- #define DSP_SPDIF_STATUS_OUTPUT_ENABLED 1
- #define DSP_SPDIF_STATUS_PLAYBACK_OPEN 2
- #define DSP_SPDIF_STATUS_HW_ENABLED 4
- #define DSP_SPDIF_STATUS_INPUT_CTRL_ENABLED 8
- struct dsp_symbol_entry {
- u32 address;
- char symbol_name[DSP_MAX_SYMBOL_NAME];
- int symbol_type;
- /* initialized by driver */
- struct dsp_module_desc * module;
- int deleted;
- };
- struct dsp_symbol_desc {
- int nsymbols;
- struct dsp_symbol_entry *symbols;
- /* initialized by driver */
- int highest_frag_index;
- };
- struct dsp_segment_desc {
- int segment_type;
- u32 offset;
- u32 size;
- u32 * data;
- };
- struct dsp_module_desc {
- char * module_name;
- struct dsp_symbol_desc symbol_table;
- int nsegments;
- struct dsp_segment_desc * segments;
- /* initialized by driver */
- u32 overlay_begin_address;
- u32 load_address;
- int nfixups;
- };
- struct dsp_scb_descriptor {
- char scb_name[DSP_MAX_SCB_NAME];
- u32 address;
- int index;
- u32 *data;
- struct dsp_scb_descriptor * sub_list_ptr;
- struct dsp_scb_descriptor * next_scb_ptr;
- struct dsp_scb_descriptor * parent_scb_ptr;
- struct dsp_symbol_entry * task_entry;
- struct dsp_symbol_entry * scb_symbol;
- struct snd_info_entry *proc_info;
- int ref_count;
- u16 volume[2];
- unsigned int deleted :1;
- unsigned int updated :1;
- unsigned int volume_set :1;
- };
- struct dsp_task_descriptor {
- char task_name[DSP_MAX_TASK_NAME];
- int size;
- u32 address;
- int index;
- u32 *data;
- };
- struct dsp_pcm_channel_descriptor {
- int active;
- int src_slot;
- int pcm_slot;
- u32 sample_rate;
- u32 unlinked;
- struct dsp_scb_descriptor * pcm_reader_scb;
- struct dsp_scb_descriptor * src_scb;
- struct dsp_scb_descriptor * mixer_scb;
- void * private_data;
- };
- struct dsp_spos_instance {
- struct dsp_symbol_desc symbol_table; /* currently available loaded symbols in SP */
- int nmodules;
- struct dsp_module_desc * modules; /* modules loaded into SP */
- struct dsp_segment_desc code;
- /* Main PCM playback mixer */
- struct dsp_scb_descriptor * master_mix_scb;
- u16 dac_volume_right;
- u16 dac_volume_left;
- /* Rear/surround PCM playback mixer */
- struct dsp_scb_descriptor * rear_mix_scb;
- /* Center/LFE mixer */
- struct dsp_scb_descriptor * center_lfe_mix_scb;
- int npcm_channels;
- int nsrc_scb;
- struct dsp_pcm_channel_descriptor pcm_channels[DSP_MAX_PCM_CHANNELS];
- int src_scb_slots[DSP_MAX_SRC_NR];
- /* cache this symbols */
- struct dsp_symbol_entry * null_algorithm; /* used by PCMreaderSCB's */
- struct dsp_symbol_entry * s16_up; /* used by SRCtaskSCB's */
- /* proc fs */
- struct snd_card *snd_card;
- struct snd_info_entry * proc_dsp_dir;
- struct snd_info_entry * proc_sym_info_entry;
- struct snd_info_entry * proc_modules_info_entry;
- struct snd_info_entry * proc_parameter_dump_info_entry;
- struct snd_info_entry * proc_sample_dump_info_entry;
- /* SCB's descriptors */
- int nscb;
- int scb_highest_frag_index;
- struct dsp_scb_descriptor scbs[DSP_MAX_SCB_DESC];
- struct snd_info_entry * proc_scb_info_entry;
- struct dsp_scb_descriptor * the_null_scb;
- /* Task's descriptors */
- int ntask;
- struct dsp_task_descriptor tasks[DSP_MAX_TASK_DESC];
- struct snd_info_entry * proc_task_info_entry;
- /* SPDIF status */
- int spdif_status_out;
- int spdif_status_in;
- u16 spdif_input_volume_right;
- u16 spdif_input_volume_left;
- /* spdif channel status,
- left right and user validity bits */
- unsigned int spdif_csuv_default;
- unsigned int spdif_csuv_stream;
- /* SPDIF input sample rate converter */
- struct dsp_scb_descriptor * spdif_in_src;
- /* SPDIF input asynch. receiver */
- struct dsp_scb_descriptor * asynch_rx_scb;
- /* Capture record mixer SCB */
- struct dsp_scb_descriptor * record_mixer_scb;
-
- /* CODEC input SCB */
- struct dsp_scb_descriptor * codec_in_scb;
- /* reference snooper */
- struct dsp_scb_descriptor * ref_snoop_scb;
- /* SPDIF output PCM reference */
- struct dsp_scb_descriptor * spdif_pcm_input_scb;
- /* asynch TX task */
- struct dsp_scb_descriptor * asynch_tx_scb;
- /* record sources */
- struct dsp_scb_descriptor * pcm_input;
- struct dsp_scb_descriptor * adc_input;
- int spdif_in_sample_rate;
- };
- #endif /* __DSP_SPOS_H__ */
|