diff options
Diffstat (limited to 'include/sound/sb16_csp.h')
-rw-r--r-- | include/sound/sb16_csp.h | 167 |
1 files changed, 167 insertions, 0 deletions
diff --git a/include/sound/sb16_csp.h b/include/sound/sb16_csp.h new file mode 100644 index 000000000000..eb8368b56b16 --- /dev/null +++ b/include/sound/sb16_csp.h | |||
@@ -0,0 +1,167 @@ | |||
1 | #ifndef __SOUND_SB16_CSP_H | ||
2 | #define __SOUND_SB16_CSP_H | ||
3 | |||
4 | /* | ||
5 | * Copyright (c) 1999 by Uros Bizjak <uros@kss-loka.si> | ||
6 | * Takashi Iwai <tiwai@suse.de> | ||
7 | * | ||
8 | * SB16ASP/AWE32 CSP control | ||
9 | * | ||
10 | * This program is free software; you can redistribute it and/or modify | ||
11 | * it under the terms of the GNU General Public License as published by | ||
12 | * the Free Software Foundation; either version 2 of the License, or | ||
13 | * (at your option) any later version. | ||
14 | * | ||
15 | * This program is distributed in the hope that it will be useful, | ||
16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
18 | * GNU General Public License for more details. | ||
19 | * | ||
20 | * You should have received a copy of the GNU General Public License | ||
21 | * along with this program; if not, write to the Free Software | ||
22 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
23 | * | ||
24 | */ | ||
25 | |||
26 | /* CSP modes */ | ||
27 | #define SNDRV_SB_CSP_MODE_NONE 0x00 | ||
28 | #define SNDRV_SB_CSP_MODE_DSP_READ 0x01 /* Record from DSP */ | ||
29 | #define SNDRV_SB_CSP_MODE_DSP_WRITE 0x02 /* Play to DSP */ | ||
30 | #define SNDRV_SB_CSP_MODE_QSOUND 0x04 /* QSound */ | ||
31 | |||
32 | /* CSP load flags */ | ||
33 | #define SNDRV_SB_CSP_LOAD_FROMUSER 0x01 | ||
34 | #define SNDRV_SB_CSP_LOAD_INITBLOCK 0x02 | ||
35 | |||
36 | /* CSP sample width */ | ||
37 | #define SNDRV_SB_CSP_SAMPLE_8BIT 0x01 | ||
38 | #define SNDRV_SB_CSP_SAMPLE_16BIT 0x02 | ||
39 | |||
40 | /* CSP channels */ | ||
41 | #define SNDRV_SB_CSP_MONO 0x01 | ||
42 | #define SNDRV_SB_CSP_STEREO 0x02 | ||
43 | |||
44 | /* CSP rates */ | ||
45 | #define SNDRV_SB_CSP_RATE_8000 0x01 | ||
46 | #define SNDRV_SB_CSP_RATE_11025 0x02 | ||
47 | #define SNDRV_SB_CSP_RATE_22050 0x04 | ||
48 | #define SNDRV_SB_CSP_RATE_44100 0x08 | ||
49 | #define SNDRV_SB_CSP_RATE_ALL 0x0f | ||
50 | |||
51 | /* CSP running state */ | ||
52 | #define SNDRV_SB_CSP_ST_IDLE 0x00 | ||
53 | #define SNDRV_SB_CSP_ST_LOADED 0x01 | ||
54 | #define SNDRV_SB_CSP_ST_RUNNING 0x02 | ||
55 | #define SNDRV_SB_CSP_ST_PAUSED 0x04 | ||
56 | #define SNDRV_SB_CSP_ST_AUTO 0x08 | ||
57 | #define SNDRV_SB_CSP_ST_QSOUND 0x10 | ||
58 | |||
59 | /* maximum QSound value (180 degrees right) */ | ||
60 | #define SNDRV_SB_CSP_QSOUND_MAX_RIGHT 0x20 | ||
61 | |||
62 | /* maximum microcode RIFF file size */ | ||
63 | #define SNDRV_SB_CSP_MAX_MICROCODE_FILE_SIZE 0x3000 | ||
64 | |||
65 | /* microcode header */ | ||
66 | typedef struct snd_sb_csp_mc_header { | ||
67 | char codec_name[16]; /* id name of codec */ | ||
68 | unsigned short func_req; /* requested function */ | ||
69 | } snd_sb_csp_mc_header_t; | ||
70 | |||
71 | /* microcode to be loaded */ | ||
72 | typedef struct snd_sb_csp_microcode { | ||
73 | snd_sb_csp_mc_header_t info; | ||
74 | unsigned char data[SNDRV_SB_CSP_MAX_MICROCODE_FILE_SIZE]; | ||
75 | } snd_sb_csp_microcode_t; | ||
76 | |||
77 | /* start CSP with sample_width in mono/stereo */ | ||
78 | typedef struct snd_sb_csp_start { | ||
79 | int sample_width; /* sample width, look above */ | ||
80 | int channels; /* channels, look above */ | ||
81 | } snd_sb_csp_start_t; | ||
82 | |||
83 | /* CSP information */ | ||
84 | typedef struct snd_sb_csp_info { | ||
85 | char codec_name[16]; /* id name of codec */ | ||
86 | unsigned short func_nr; /* function number */ | ||
87 | unsigned int acc_format; /* accepted PCM formats */ | ||
88 | unsigned short acc_channels; /* accepted channels */ | ||
89 | unsigned short acc_width; /* accepted sample width */ | ||
90 | unsigned short acc_rates; /* accepted sample rates */ | ||
91 | unsigned short csp_mode; /* CSP mode, see above */ | ||
92 | unsigned short run_channels; /* current channels */ | ||
93 | unsigned short run_width; /* current sample width */ | ||
94 | unsigned short version; /* version id: 0x10 - 0x1f */ | ||
95 | unsigned short state; /* state bits */ | ||
96 | } snd_sb_csp_info_t; | ||
97 | |||
98 | /* HWDEP controls */ | ||
99 | /* get CSP information */ | ||
100 | #define SNDRV_SB_CSP_IOCTL_INFO _IOR('H', 0x10, snd_sb_csp_info_t) | ||
101 | /* load microcode to CSP */ | ||
102 | #define SNDRV_SB_CSP_IOCTL_LOAD_CODE _IOW('H', 0x11, snd_sb_csp_microcode_t) | ||
103 | /* unload microcode from CSP */ | ||
104 | #define SNDRV_SB_CSP_IOCTL_UNLOAD_CODE _IO('H', 0x12) | ||
105 | /* start CSP */ | ||
106 | #define SNDRV_SB_CSP_IOCTL_START _IOW('H', 0x13, snd_sb_csp_start_t) | ||
107 | /* stop CSP */ | ||
108 | #define SNDRV_SB_CSP_IOCTL_STOP _IO('H', 0x14) | ||
109 | /* pause CSP and DMA transfer */ | ||
110 | #define SNDRV_SB_CSP_IOCTL_PAUSE _IO('H', 0x15) | ||
111 | /* restart CSP and DMA transfer */ | ||
112 | #define SNDRV_SB_CSP_IOCTL_RESTART _IO('H', 0x16) | ||
113 | |||
114 | #ifdef __KERNEL__ | ||
115 | #include "sb.h" | ||
116 | #include "hwdep.h" | ||
117 | |||
118 | typedef struct snd_sb_csp snd_sb_csp_t; | ||
119 | |||
120 | /* | ||
121 | * CSP operators | ||
122 | */ | ||
123 | typedef struct { | ||
124 | int (*csp_use) (snd_sb_csp_t * p); | ||
125 | int (*csp_unuse) (snd_sb_csp_t * p); | ||
126 | int (*csp_autoload) (snd_sb_csp_t * p, int pcm_sfmt, int play_rec_mode); | ||
127 | int (*csp_start) (snd_sb_csp_t * p, int sample_width, int channels); | ||
128 | int (*csp_stop) (snd_sb_csp_t * p); | ||
129 | int (*csp_qsound_transfer) (snd_sb_csp_t * p); | ||
130 | } snd_sb_csp_ops_t; | ||
131 | |||
132 | /* | ||
133 | * CSP private data | ||
134 | */ | ||
135 | struct snd_sb_csp { | ||
136 | sb_t *chip; /* SB16 DSP */ | ||
137 | int used; /* usage flag - exclusive */ | ||
138 | char codec_name[16]; /* name of codec */ | ||
139 | unsigned short func_nr; /* function number */ | ||
140 | unsigned int acc_format; /* accepted PCM formats */ | ||
141 | int acc_channels; /* accepted channels */ | ||
142 | int acc_width; /* accepted sample width */ | ||
143 | int acc_rates; /* accepted sample rates */ | ||
144 | int mode; /* MODE */ | ||
145 | int run_channels; /* current CSP channels */ | ||
146 | int run_width; /* current sample width */ | ||
147 | int version; /* CSP version (0x10 - 0x1f) */ | ||
148 | int running; /* running state */ | ||
149 | |||
150 | snd_sb_csp_ops_t ops; /* operators */ | ||
151 | |||
152 | spinlock_t q_lock; /* locking */ | ||
153 | int q_enabled; /* enabled flag */ | ||
154 | int qpos_left; /* left position */ | ||
155 | int qpos_right; /* right position */ | ||
156 | int qpos_changed; /* position changed flag */ | ||
157 | |||
158 | snd_kcontrol_t *qsound_switch; | ||
159 | snd_kcontrol_t *qsound_space; | ||
160 | |||
161 | struct semaphore access_mutex; /* locking */ | ||
162 | }; | ||
163 | |||
164 | int snd_sb_csp_new(sb_t *chip, int device, snd_hwdep_t ** rhwdep); | ||
165 | #endif | ||
166 | |||
167 | #endif /* __SOUND_SB16_CSP */ | ||