Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
include
sound
sb16_csp.h
Go to the documentation of this file.
1
#ifndef __SOUND_SB16_CSP_H
2
#define __SOUND_SB16_CSP_H
3
4
/*
5
* Copyright (c) 1999 by Uros Bizjak <
[email protected]
>
6
* Takashi Iwai <
[email protected]
>
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
struct
snd_sb_csp_mc_header
{
67
char
codec_name
[16];
/* id name of codec */
68
unsigned
short
func_req
;
/* requested function */
69
};
70
71
/* microcode to be loaded */
72
struct
snd_sb_csp_microcode
{
73
struct
snd_sb_csp_mc_header
info
;
74
unsigned
char
data
[
SNDRV_SB_CSP_MAX_MICROCODE_FILE_SIZE
];
75
};
76
77
/* start CSP with sample_width in mono/stereo */
78
struct
snd_sb_csp_start
{
79
int
sample_width
;
/* sample width, look above */
80
int
channels
;
/* channels, look above */
81
};
82
83
/* CSP information */
84
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
};
97
98
/* HWDEP controls */
99
/* get CSP information */
100
#define SNDRV_SB_CSP_IOCTL_INFO _IOR('H', 0x10, struct snd_sb_csp_info)
101
/* load microcode to CSP */
102
/* NOTE: struct snd_sb_csp_microcode overflows the max size (13 bits)
103
* defined for some architectures like MIPS, and it leads to build errors.
104
* (x86 and co have 14-bit size, thus it's valid, though.)
105
* As a workaround for skipping the size-limit check, here we don't use the
106
* normal _IOW() macro but _IOC() with the manual argument.
107
*/
108
#define SNDRV_SB_CSP_IOCTL_LOAD_CODE \
109
_IOC(_IOC_WRITE, 'H', 0x11, sizeof(struct snd_sb_csp_microcode))
110
/* unload microcode from CSP */
111
#define SNDRV_SB_CSP_IOCTL_UNLOAD_CODE _IO('H', 0x12)
112
/* start CSP */
113
#define SNDRV_SB_CSP_IOCTL_START _IOW('H', 0x13, struct snd_sb_csp_start)
114
/* stop CSP */
115
#define SNDRV_SB_CSP_IOCTL_STOP _IO('H', 0x14)
116
/* pause CSP and DMA transfer */
117
#define SNDRV_SB_CSP_IOCTL_PAUSE _IO('H', 0x15)
118
/* restart CSP and DMA transfer */
119
#define SNDRV_SB_CSP_IOCTL_RESTART _IO('H', 0x16)
120
121
#ifdef __KERNEL__
122
#include <
sound/sb.h
>
123
#include <
sound/hwdep.h
>
124
#include <
linux/firmware.h
>
125
126
struct
snd_sb_csp;
127
128
/* indices for the known CSP programs */
129
enum
{
130
CSP_PROGRAM_MULAW,
131
CSP_PROGRAM_ALAW,
132
CSP_PROGRAM_ADPCM_INIT,
133
CSP_PROGRAM_ADPCM_PLAYBACK,
134
CSP_PROGRAM_ADPCM_CAPTURE,
135
136
CSP_PROGRAM_COUNT
137
};
138
139
/*
140
* CSP operators
141
*/
142
struct
snd_sb_csp_ops {
143
int
(*csp_use) (
struct
snd_sb_csp *
p
);
144
int
(*csp_unuse) (
struct
snd_sb_csp *
p
);
145
int
(*csp_autoload) (
struct
snd_sb_csp *
p
,
int
pcm_sfmt,
int
play_rec_mode);
146
int
(*csp_start) (
struct
snd_sb_csp *
p
,
int
sample_width,
int
channels
);
147
int
(*csp_stop) (
struct
snd_sb_csp *
p
);
148
int
(*csp_qsound_transfer) (
struct
snd_sb_csp *
p
);
149
};
150
151
/*
152
* CSP private data
153
*/
154
struct
snd_sb_csp {
155
struct
snd_sb
*
chip
;
/* SB16 DSP */
156
int
used
;
/* usage flag - exclusive */
157
char
codec_name[16];
/* name of codec */
158
unsigned
short
func_nr;
/* function number */
159
unsigned
int
acc_format;
/* accepted PCM formats */
160
int
acc_channels;
/* accepted channels */
161
int
acc_width;
/* accepted sample width */
162
int
acc_rates;
/* accepted sample rates */
163
int
mode
;
/* MODE */
164
int
run_channels;
/* current CSP channels */
165
int
run_width;
/* current sample width */
166
int
version
;
/* CSP version (0x10 - 0x1f) */
167
int
running
;
/* running state */
168
169
struct
snd_sb_csp_ops
ops
;
/* operators */
170
171
spinlock_t
q_lock;
/* locking */
172
int
q_enabled;
/* enabled flag */
173
int
qpos_left;
/* left position */
174
int
qpos_right;
/* right position */
175
int
qpos_changed;
/* position changed flag */
176
177
struct
snd_kcontrol
*qsound_switch;
178
struct
snd_kcontrol
*qsound_space;
179
180
struct
mutex
access_mutex;
/* locking */
181
182
const
struct
firmware
*csp_programs[CSP_PROGRAM_COUNT];
183
};
184
185
int
snd_sb_csp_new
(
struct
snd_sb
*
chip
,
int
device
,
struct
snd_hwdep
** rhwdep);
186
#endif
187
188
#endif
/* __SOUND_SB16_CSP */
Generated on Thu Jan 10 2013 14:53:36 for Linux Kernel by
1.8.2