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