Blame view

kernel/linux-imx6_3.14.28/Documentation/sound/alsa/OSS-Emulation.txt 10.3 KB
6b13f685e   김민수   BSP 최초 추가
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
  		NOTES ON KERNEL OSS-EMULATION
  		=============================
  
  		Jan. 22, 2004  Takashi Iwai <tiwai@suse.de>
  
  
  Modules
  =======
  
  ALSA provides a powerful OSS emulation on the kernel.
  The OSS emulation for PCM, mixer and sequencer devices is implemented
  as add-on kernel modules, snd-pcm-oss, snd-mixer-oss and snd-seq-oss.
  When you need to access the OSS PCM, mixer or sequencer devices, the
  corresponding module has to be loaded.
  
  These modules are loaded automatically when the corresponding service
  is called.  The alias is defined sound-service-x-y, where x and y are
  the card number and the minor unit number.  Usually you don't have to
  define these aliases by yourself.
  
  Only necessary step for auto-loading of OSS modules is to define the
  card alias in /etc/modprobe.d/alsa.conf, such as
  
  	alias sound-slot-0 snd-emu10k1
  
  As the second card, define sound-slot-1 as well.
  Note that you can't use the aliased name as the target name (i.e.
  "alias sound-slot-0 snd-card-0" doesn't work any more like the old
  modutils).
  
  The currently available OSS configuration is shown in
  /proc/asound/oss/sndstat.  This shows in the same syntax of
  /dev/sndstat, which is available on the commercial OSS driver.
  On ALSA, you can symlink /dev/sndstat to this proc file.
  
  Please note that the devices listed in this proc file appear only
  after the corresponding OSS-emulation module is loaded.  Don't worry
  even if "NOT ENABLED IN CONFIG" is shown in it.
  
  
  Device Mapping
  ==============
  
  ALSA supports the following OSS device files:
  
  	PCM:
  		/dev/dspX
  		/dev/adspX
  
  	Mixer:
  		/dev/mixerX
  
  	MIDI:
  		/dev/midi0X
  		/dev/amidi0X
  
  	Sequencer:
  		/dev/sequencer
  		/dev/sequencer2 (aka /dev/music)
  
  where X is the card number from 0 to 7.
  
  (NOTE: Some distributions have the device files like /dev/midi0 and
         /dev/midi1.  They are NOT for OSS but for tclmidi, which is
         a totally different thing.)
  
  Unlike the real OSS, ALSA cannot use the device files more than the
  assigned ones.  For example, the first card cannot use /dev/dsp1 or
  /dev/dsp2, but only /dev/dsp0 and /dev/adsp0.
  
  As seen above, PCM and MIDI may have two devices.  Usually, the first
  PCM device (hw:0,0 in ALSA) is mapped to /dev/dsp and the secondary
  device (hw:0,1) to /dev/adsp (if available).  For MIDI, /dev/midi and
  /dev/amidi, respectively.
  
  You can change this device mapping via the module options of
  snd-pcm-oss and snd-rawmidi.  In the case of PCM, the following
  options are available for snd-pcm-oss:
  
  	dsp_map		PCM device number assigned to /dev/dspX
  			(default = 0)
  	adsp_map	PCM device number assigned to /dev/adspX
  			(default = 1)
  
  For example, to map the third PCM device (hw:0,2) to /dev/adsp0,
  define like this:
  
  	options snd-pcm-oss adsp_map=2
  
  The options take arrays.  For configuring the second card, specify
  two entries separated by comma.  For example, to map the third PCM
  device on the second card to /dev/adsp1, define like below:
  
  	options snd-pcm-oss adsp_map=0,2
  
  To change the mapping of MIDI devices, the following options are
  available for snd-rawmidi:
  
  	midi_map	MIDI device number assigned to /dev/midi0X
  			(default = 0)
  	amidi_map	MIDI device number assigned to /dev/amidi0X
  			(default = 1)
  
  For example, to assign the third MIDI device on the first card to
  /dev/midi00, define as follows:
  
  	options snd-rawmidi midi_map=2
  
  
  PCM Mode
  ========
  
  As default, ALSA emulates the OSS PCM with so-called plugin layer,
  i.e. tries to convert the sample format, rate or channels
  automatically when the card doesn't support it natively.
  This will lead to some problems for some applications like quake or
  wine, especially if they use the card only in the MMAP mode.
  
  In such a case, you can change the behavior of PCM per application by
  writing a command to the proc file.  There is a proc file for each PCM
  stream, /proc/asound/cardX/pcmY[cp]/oss, where X is the card number
  (zero-based), Y the PCM device number (zero-based), and 'p' is for
  playback and 'c' for capture, respectively.  Note that this proc file
  exists only after snd-pcm-oss module is loaded.
  
  The command sequence has the following syntax:
  
  	app_name fragments fragment_size [options]
  
  app_name is the name of application with (higher priority) or without
  path.
  fragments specifies the number of fragments or zero if no specific
  number is given.
  fragment_size is the size of fragment in bytes or zero if not given.
  options is the optional parameters.  The following options are
  available:
  
  	disable		the application tries to open a pcm device for
  			this channel but does not want to use it.
  	direct		don't use plugins
  	block		force block open mode
  	non-block	force non-block open mode
  	partial-frag	write also partial fragments (affects playback only)
  	no-silence	do not fill silence ahead to avoid clicks
  
  The disable option is useful when one stream direction (playback or
  capture) is not handled correctly by the application although the
  hardware itself does support both directions.
  The direct option is used, as mentioned above, to bypass the automatic
  conversion and useful for MMAP-applications.
  For example, to playback the first PCM device without plugins for
  quake, send a command via echo like the following:
  
  	% echo "quake 0 0 direct" > /proc/asound/card0/pcm0p/oss
  
  While quake wants only playback, you may append the second command
  to notify driver that only this direction is about to be allocated:
  
  	% echo "quake 0 0 disable" > /proc/asound/card0/pcm0c/oss
  
  The permission of proc files depend on the module options of snd.
  As default it's set as root, so you'll likely need to be superuser for
  sending the command above.
  
  The block and non-block options are used to change the behavior of
  opening the device file.
  
  As default, ALSA behaves as original OSS drivers, i.e. does not block
  the file when it's busy. The -EBUSY error is returned in this case.
  
  This blocking behavior can be changed globally via nonblock_open
  module option of snd-pcm-oss.  For using the blocking mode as default
  for OSS devices, define like the following:
  
  	options snd-pcm-oss nonblock_open=0
  
  The partial-frag and no-silence commands have been added recently.
  Both commands are for optimization use only.  The former command
  specifies to invoke the write transfer only when the whole fragment is
  filled.  The latter stops writing the silence data ahead
  automatically.  Both are disabled as default.
  
  You can check the currently defined configuration by reading the proc
  file.  The read image can be sent to the proc file again, hence you
  can save the current configuration
  
  	% cat /proc/asound/card0/pcm0p/oss > /somewhere/oss-cfg
  
  and restore it like
  
  	% cat /somewhere/oss-cfg > /proc/asound/card0/pcm0p/oss
  
  Also, for clearing all the current configuration, send "erase" command
  as below:
  
  	% echo "erase" > /proc/asound/card0/pcm0p/oss
  
  
  Mixer Elements
  ==============
  
  Since ALSA has completely different mixer interface, the emulation of
  OSS mixer is relatively complicated.  ALSA builds up a mixer element
  from several different ALSA (mixer) controls based on the name
  string.  For example, the volume element SOUND_MIXER_PCM is composed
  from "PCM Playback Volume" and "PCM Playback Switch" controls for the
  playback direction and from "PCM Capture Volume" and "PCM Capture
  Switch" for the capture directory (if exists).  When the PCM volume of
  OSS is changed, all the volume and switch controls above are adjusted
  automatically.
  
  As default, ALSA uses the following control for OSS volumes:
  
  	OSS volume		ALSA control		Index
  	-----------------------------------------------------
  	SOUND_MIXER_VOLUME 	Master			0
  	SOUND_MIXER_BASS	Tone Control - Bass	0
  	SOUND_MIXER_TREBLE	Tone Control - Treble	0
  	SOUND_MIXER_SYNTH	Synth			0
  	SOUND_MIXER_PCM		PCM			0
  	SOUND_MIXER_SPEAKER	PC Speaker 		0
  	SOUND_MIXER_LINE	Line			0
  	SOUND_MIXER_MIC		Mic 			0
  	SOUND_MIXER_CD		CD 			0
  	SOUND_MIXER_IMIX	Monitor Mix 		0
  	SOUND_MIXER_ALTPCM	PCM			1
  	SOUND_MIXER_RECLEV	(not assigned)
  	SOUND_MIXER_IGAIN	Capture			0
  	SOUND_MIXER_OGAIN	Playback		0
  	SOUND_MIXER_LINE1	Aux			0
  	SOUND_MIXER_LINE2	Aux			1
  	SOUND_MIXER_LINE3	Aux			2
  	SOUND_MIXER_DIGITAL1	Digital			0
  	SOUND_MIXER_DIGITAL2	Digital			1
  	SOUND_MIXER_DIGITAL3	Digital			2
  	SOUND_MIXER_PHONEIN	Phone			0
  	SOUND_MIXER_PHONEOUT	Phone			1
  	SOUND_MIXER_VIDEO	Video			0
  	SOUND_MIXER_RADIO	Radio			0
  	SOUND_MIXER_MONITOR	Monitor			0
  
  The second column is the base-string of the corresponding ALSA
  control.  In fact, the controls with "XXX [Playback|Capture]
  [Volume|Switch]" will be checked in addition.
  
  The current assignment of these mixer elements is listed in the proc
  file, /proc/asound/cardX/oss_mixer, which will be like the following
  
  	VOLUME "Master" 0
  	BASS "" 0
  	TREBLE "" 0
  	SYNTH "" 0
  	PCM "PCM" 0
  	...
  
  where the first column is the OSS volume element, the second column
  the base-string of the corresponding ALSA control, and the third the
  control index.  When the string is empty, it means that the
  corresponding OSS control is not available.
  
  For changing the assignment, you can write the configuration to this
  proc file.  For example, to map "Wave Playback" to the PCM volume,
  send the command like the following:
  
  	% echo 'VOLUME "Wave Playback" 0' > /proc/asound/card0/oss_mixer
  
  The command is exactly as same as listed in the proc file.  You can
  change one or more elements, one volume per line.  In the last
  example, both "Wave Playback Volume" and "Wave Playback Switch" will
  be affected when PCM volume is changed.
  
  Like the case of PCM proc file, the permission of proc files depend on
  the module options of snd.  you'll likely need to be superuser for
  sending the command above.
  
  As well as in the case of PCM proc file, you can save and restore the
  current mixer configuration by reading and writing the whole file
  image.
  
  
  Duplex Streams
  ==============
  
  Note that when attempting to use a single device file for playback and
  capture, the OSS API provides no way to set the format, sample rate or
  number of channels different in each direction.  Thus
  	io_handle = open("device", O_RDWR)
  will only function correctly if the values are the same in each direction.
  
  To use different values in the two directions, use both
  	input_handle = open("device", O_RDONLY)
  	output_handle = open("device", O_WRONLY)
  and set the values for the corresponding handle.
  
  
  Unsupported Features
  ====================
  
  MMAP on ICE1712 driver
  ----------------------
  ICE1712 supports only the unconventional format, interleaved
  10-channels 24bit (packed in 32bit) format.  Therefore you cannot mmap
  the buffer as the conventional (mono or 2-channels, 8 or 16bit) format
  on OSS.