RT-AC66 3.0.0.4.374.130 core
[tomato.git] / release / src-rt-6.x / linux / linux-2.6 / include / sound / cs46xx_dsp_task_types.h
blobb3076c487de6cd329884dbcc5d4bd3bba922fc39
1 /*
2 * The driver for the Cirrus Logic's Sound Fusion CS46XX based soundcards
3 * Copyright (c) by Jaroslav Kysela <perex@suse.cz>
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.
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.
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
21 * NOTE: comments are copy/paste from cwcemb80.lst
22 * provided by Tom Woller at Cirrus (my only
23 * documentation about the SP OS running inside
24 * the DSP)
27 #ifndef __CS46XX_DSP_TASK_TYPES_H__
28 #define __CS46XX_DSP_TASK_TYPES_H__
30 #include "cs46xx_dsp_scb_types.h"
32 /*********************************************************************************************
33 Example hierarchy of stream control blocks in the SP
35 hfgTree
36 Ptr____Call (c)
38 -------+------ ------------- ------------- ------------- -----
39 | SBlaster IF |______\| Foreground |___\| Middlegr'nd |___\| Background |___\| Nul |
40 | |Goto /| tree header |g /| tree header |g /| tree header |g /| SCB |r
41 -------------- (g) ------------- ------------- ------------- -----
42 |c |c |c |c
43 | | | |
44 \/ ------------- ------------- -------------
45 | Foreground |_\ | Middlegr'nd |_\ | Background |_\
46 | tree |g/ | tree |g/ | tree |g/
47 ------------- ------------- -------------
48 |c |c |c
49 | | |
50 \/ \/ \/
52 *********************************************************************************************/
54 #define HFG_FIRST_EXECUTE_MODE 0x0001
55 #define HFG_FIRST_EXECUTE_MODE_BIT 0
56 #define HFG_CONTEXT_SWITCH_MODE 0x0002
57 #define HFG_CONTEXT_SWITCH_MODE_BIT 1
59 #define MAX_FG_STACK_SIZE 32 /* THESE NEED TO BE COMPUTED PROPERLY */
60 #define MAX_MG_STACK_SIZE 16
61 #define MAX_BG_STACK_SIZE 9
62 #define MAX_HFG_STACK_SIZE 4
64 #define SLEEP_ACTIVE_INCREMENT 0 /* Enable task tree thread to go to sleep
65 This should only ever be used on the Background thread */
66 #define STANDARD_ACTIVE_INCREMENT 1 /* Task tree thread normal operation */
67 #define SUSPEND_ACTIVE_INCREMENT 2 /* Cause execution to suspend in the task tree thread
68 This should only ever be used on the Background thread */
70 #define HOSTFLAGS_DISABLE_BG_SLEEP 0 /* Host-controlled flag that determines whether we go to sleep
71 at the end of BG */
73 /* Minimal context save area for Hyper Forground */
74 struct dsp_hf_save_area {
75 u32 r10_save;
76 u32 r54_save;
77 u32 r98_save;
79 ___DSP_DUAL_16BIT_ALLOC(
80 status_save,
81 ind_save
84 ___DSP_DUAL_16BIT_ALLOC(
85 rci1_save,
86 rci0_save
89 u32 r32_save;
90 u32 r76_save;
91 u32 rsd2_save;
93 ___DSP_DUAL_16BIT_ALLOC(
94 rsi2_save, /* See TaskTreeParameterBlock for
95 remainder of registers */
96 rsa2Save
98 /* saved as part of HFG context */
102 /* Task link data structure */
103 struct dsp_tree_link {
104 ___DSP_DUAL_16BIT_ALLOC(
105 /* Pointer to sibling task control block */
106 next_scb,
107 /* Pointer to child task control block */
108 sub_ptr
111 ___DSP_DUAL_16BIT_ALLOC(
112 /* Pointer to code entry point */
113 entry_point,
114 /* Pointer to local data */
115 this_spb
120 struct dsp_task_tree_data {
121 ___DSP_DUAL_16BIT_ALLOC(
122 /* Initial tock count; controls task tree execution rate */
123 tock_count_limit,
124 /* Tock down counter */
125 tock_count
128 /* Add to ActiveCount when TockCountLimit reached:
129 Subtract on task tree termination */
130 ___DSP_DUAL_16BIT_ALLOC(
131 active_tncrement,
132 /* Number of pending activations for task tree */
133 active_count
136 ___DSP_DUAL_16BIT_ALLOC(
137 /* BitNumber to enable modification of correct bit in ActiveTaskFlags */
138 active_bit,
139 /* Pointer to OS location for indicating current activity on task level */
140 active_task_flags_ptr
143 /* Data structure for controlling movement of memory blocks:-
144 currently unused */
145 ___DSP_DUAL_16BIT_ALLOC(
146 mem_upd_ptr,
147 /* Data structure for controlling synchronous link update */
148 link_upd_ptr
151 ___DSP_DUAL_16BIT_ALLOC(
152 /* Save area for remainder of full context. */
153 save_area,
154 /* Address of start of local stack for data storage */
155 data_stack_base_ptr
161 struct dsp_interval_timer_data
163 /* These data items have the same relative locations to those */
164 ___DSP_DUAL_16BIT_ALLOC(
165 interval_timer_period,
166 itd_unused
169 /* used for this data in the SPOS control block for SPOS 1.0 */
170 ___DSP_DUAL_16BIT_ALLOC(
171 num_FG_ticks_this_interval,
172 num_intervals
177 /* This structure contains extra storage for the task tree
178 Currently, this additional data is related only to a full context save */
179 struct dsp_task_tree_context_block {
180 /* Up to 10 values are saved onto the stack. 8 for the task tree, 1 for
181 The access to the context switch (call or interrupt), and 1 spare that
182 users should never use. This last may be required by the system */
183 ___DSP_DUAL_16BIT_ALLOC(
184 stack1,
185 stack0
187 ___DSP_DUAL_16BIT_ALLOC(
188 stack3,
189 stack2
191 ___DSP_DUAL_16BIT_ALLOC(
192 stack5,
193 stack4
195 ___DSP_DUAL_16BIT_ALLOC(
196 stack7,
197 stack6
199 ___DSP_DUAL_16BIT_ALLOC(
200 stack9,
201 stack8
204 u32 saverfe;
206 /* Value may be overwriten by stack save algorithm.
207 Retain the size of the stack data saved here if used */
208 ___DSP_DUAL_16BIT_ALLOC(
209 reserved1,
210 stack_size
212 u32 saverba; /* (HFG) */
213 u32 saverdc;
214 u32 savers_config_23; /* (HFG) */
215 u32 savers_DMA23; /* (HFG) */
216 u32 saversa0;
217 u32 saversi0;
218 u32 saversa1;
219 u32 saversi1;
220 u32 saversa3;
221 u32 saversd0;
222 u32 saversd1;
223 u32 saversd3;
224 u32 savers_config01;
225 u32 savers_DMA01;
226 u32 saveacc0hl;
227 u32 saveacc1hl;
228 u32 saveacc0xacc1x;
229 u32 saveacc2hl;
230 u32 saveacc3hl;
231 u32 saveacc2xacc3x;
232 u32 saveaux0hl;
233 u32 saveaux1hl;
234 u32 saveaux0xaux1x;
235 u32 saveaux2hl;
236 u32 saveaux3hl;
237 u32 saveaux2xaux3x;
238 u32 savershouthl;
239 u32 savershoutxmacmode;
243 struct dsp_task_tree_control_block {
244 struct dsp_hf_save_area context;
245 struct dsp_tree_link links;
246 struct dsp_task_tree_data data;
247 struct dsp_task_tree_context_block context_blk;
248 struct dsp_interval_timer_data int_timer;
252 #endif /* __DSP_TASK_TYPES_H__ */