Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/include/sound/cs46xx_dsp_spos.h
10820 views
1
/*
2
* The driver for the Cirrus Logic's Sound Fusion CS46XX based soundcards
3
* Copyright (c) by Jaroslav Kysela <[email protected]>
4
*
5
*
6
* This program is free software; you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License as published by
8
* the Free Software Foundation; either version 2 of the License, or
9
* (at your option) any later version.
10
*
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
* GNU General Public License for more details.
15
*
16
* You should have received a copy of the GNU General Public License
17
* along with this program; if not, write to the Free Software
18
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19
*
20
*/
21
22
#ifndef __CS46XX_DSP_SPOS_H__
23
#define __CS46XX_DSP_SPOS_H__
24
25
#include "cs46xx_dsp_scb_types.h"
26
#include "cs46xx_dsp_task_types.h"
27
28
#define SYMBOL_CONSTANT 0x0
29
#define SYMBOL_SAMPLE 0x1
30
#define SYMBOL_PARAMETER 0x2
31
#define SYMBOL_CODE 0x3
32
33
#define SEGTYPE_SP_PROGRAM 0x00000001
34
#define SEGTYPE_SP_PARAMETER 0x00000002
35
#define SEGTYPE_SP_SAMPLE 0x00000003
36
#define SEGTYPE_SP_COEFFICIENT 0x00000004
37
38
#define DSP_SPOS_UU 0x0deadul /* unused */
39
#define DSP_SPOS_DC 0x0badul /* don't care */
40
#define DSP_SPOS_DC_DC 0x0bad0badul /* don't care */
41
#define DSP_SPOS_UUUU 0xdeadc0edul /* unused */
42
#define DSP_SPOS_UUHI 0xdeadul
43
#define DSP_SPOS_UULO 0xc0edul
44
#define DSP_SPOS_DCDC 0x0badf1d0ul /* don't care */
45
#define DSP_SPOS_DCDCHI 0x0badul
46
#define DSP_SPOS_DCDCLO 0xf1d0ul
47
48
#define DSP_MAX_TASK_NAME 60
49
#define DSP_MAX_SYMBOL_NAME 100
50
#define DSP_MAX_SCB_NAME 60
51
#define DSP_MAX_SCB_DESC 200
52
#define DSP_MAX_TASK_DESC 50
53
54
#define DSP_MAX_PCM_CHANNELS 32
55
#define DSP_MAX_SRC_NR 14
56
57
#define DSP_PCM_MAIN_CHANNEL 1
58
#define DSP_PCM_REAR_CHANNEL 2
59
#define DSP_PCM_CENTER_LFE_CHANNEL 3
60
#define DSP_PCM_S71_CHANNEL 4 /* surround 7.1 */
61
#define DSP_IEC958_CHANNEL 5
62
63
#define DSP_SPDIF_STATUS_OUTPUT_ENABLED 1
64
#define DSP_SPDIF_STATUS_PLAYBACK_OPEN 2
65
#define DSP_SPDIF_STATUS_HW_ENABLED 4
66
#define DSP_SPDIF_STATUS_INPUT_CTRL_ENABLED 8
67
68
struct dsp_symbol_entry {
69
u32 address;
70
char symbol_name[DSP_MAX_SYMBOL_NAME];
71
int symbol_type;
72
73
/* initialized by driver */
74
struct dsp_module_desc * module;
75
int deleted;
76
};
77
78
struct dsp_symbol_desc {
79
int nsymbols;
80
81
struct dsp_symbol_entry *symbols;
82
83
/* initialized by driver */
84
int highest_frag_index;
85
};
86
87
struct dsp_segment_desc {
88
int segment_type;
89
u32 offset;
90
u32 size;
91
u32 * data;
92
};
93
94
struct dsp_module_desc {
95
char * module_name;
96
struct dsp_symbol_desc symbol_table;
97
int nsegments;
98
struct dsp_segment_desc * segments;
99
100
/* initialized by driver */
101
u32 overlay_begin_address;
102
u32 load_address;
103
int nfixups;
104
};
105
106
struct dsp_scb_descriptor {
107
char scb_name[DSP_MAX_SCB_NAME];
108
u32 address;
109
int index;
110
u32 *data;
111
112
struct dsp_scb_descriptor * sub_list_ptr;
113
struct dsp_scb_descriptor * next_scb_ptr;
114
struct dsp_scb_descriptor * parent_scb_ptr;
115
116
struct dsp_symbol_entry * task_entry;
117
struct dsp_symbol_entry * scb_symbol;
118
119
struct snd_info_entry *proc_info;
120
int ref_count;
121
122
u16 volume[2];
123
unsigned int deleted :1;
124
unsigned int updated :1;
125
unsigned int volume_set :1;
126
};
127
128
struct dsp_task_descriptor {
129
char task_name[DSP_MAX_TASK_NAME];
130
int size;
131
u32 address;
132
int index;
133
u32 *data;
134
};
135
136
struct dsp_pcm_channel_descriptor {
137
int active;
138
int src_slot;
139
int pcm_slot;
140
u32 sample_rate;
141
u32 unlinked;
142
struct dsp_scb_descriptor * pcm_reader_scb;
143
struct dsp_scb_descriptor * src_scb;
144
struct dsp_scb_descriptor * mixer_scb;
145
146
void * private_data;
147
};
148
149
struct dsp_spos_instance {
150
struct dsp_symbol_desc symbol_table; /* currently available loaded symbols in SP */
151
152
int nmodules;
153
struct dsp_module_desc * modules; /* modules loaded into SP */
154
155
struct dsp_segment_desc code;
156
157
/* Main PCM playback mixer */
158
struct dsp_scb_descriptor * master_mix_scb;
159
u16 dac_volume_right;
160
u16 dac_volume_left;
161
162
/* Rear/surround PCM playback mixer */
163
struct dsp_scb_descriptor * rear_mix_scb;
164
165
/* Center/LFE mixer */
166
struct dsp_scb_descriptor * center_lfe_mix_scb;
167
168
int npcm_channels;
169
int nsrc_scb;
170
struct dsp_pcm_channel_descriptor pcm_channels[DSP_MAX_PCM_CHANNELS];
171
int src_scb_slots[DSP_MAX_SRC_NR];
172
173
/* cache this symbols */
174
struct dsp_symbol_entry * null_algorithm; /* used by PCMreaderSCB's */
175
struct dsp_symbol_entry * s16_up; /* used by SRCtaskSCB's */
176
177
/* proc fs */
178
struct snd_card *snd_card;
179
struct snd_info_entry * proc_dsp_dir;
180
struct snd_info_entry * proc_sym_info_entry;
181
struct snd_info_entry * proc_modules_info_entry;
182
struct snd_info_entry * proc_parameter_dump_info_entry;
183
struct snd_info_entry * proc_sample_dump_info_entry;
184
185
/* SCB's descriptors */
186
int nscb;
187
int scb_highest_frag_index;
188
struct dsp_scb_descriptor scbs[DSP_MAX_SCB_DESC];
189
struct snd_info_entry * proc_scb_info_entry;
190
struct dsp_scb_descriptor * the_null_scb;
191
192
/* Task's descriptors */
193
int ntask;
194
struct dsp_task_descriptor tasks[DSP_MAX_TASK_DESC];
195
struct snd_info_entry * proc_task_info_entry;
196
197
/* SPDIF status */
198
int spdif_status_out;
199
int spdif_status_in;
200
u16 spdif_input_volume_right;
201
u16 spdif_input_volume_left;
202
/* spdif channel status,
203
left right and user validity bits */
204
unsigned int spdif_csuv_default;
205
unsigned int spdif_csuv_stream;
206
207
/* SPDIF input sample rate converter */
208
struct dsp_scb_descriptor * spdif_in_src;
209
/* SPDIF input asynch. receiver */
210
struct dsp_scb_descriptor * asynch_rx_scb;
211
212
/* Capture record mixer SCB */
213
struct dsp_scb_descriptor * record_mixer_scb;
214
215
/* CODEC input SCB */
216
struct dsp_scb_descriptor * codec_in_scb;
217
218
/* reference snooper */
219
struct dsp_scb_descriptor * ref_snoop_scb;
220
221
/* SPDIF output PCM reference */
222
struct dsp_scb_descriptor * spdif_pcm_input_scb;
223
224
/* asynch TX task */
225
struct dsp_scb_descriptor * asynch_tx_scb;
226
227
/* record sources */
228
struct dsp_scb_descriptor * pcm_input;
229
struct dsp_scb_descriptor * adc_input;
230
231
int spdif_in_sample_rate;
232
};
233
234
#endif /* __DSP_SPOS_H__ */
235
236