diff options
Diffstat (limited to 'Documentation/sound/oss/MultiSound')
-rw-r--r-- | Documentation/sound/oss/MultiSound | 1137 |
1 files changed, 1137 insertions, 0 deletions
diff --git a/Documentation/sound/oss/MultiSound b/Documentation/sound/oss/MultiSound new file mode 100644 index 000000000000..e4a18bb7f73a --- /dev/null +++ b/Documentation/sound/oss/MultiSound | |||
@@ -0,0 +1,1137 @@ | |||
1 | #! /bin/sh | ||
2 | # | ||
3 | # Turtle Beach MultiSound Driver Notes | ||
4 | # -- Andrew Veliath <andrewtv@usa.net> | ||
5 | # | ||
6 | # Last update: September 10, 1998 | ||
7 | # Corresponding msnd driver: 0.8.3 | ||
8 | # | ||
9 | # ** This file is a README (top part) and shell archive (bottom part). | ||
10 | # The corresponding archived utility sources can be unpacked by | ||
11 | # running `sh MultiSound' (the utilities are only needed for the | ||
12 | # Pinnacle and Fiji cards). ** | ||
13 | # | ||
14 | # | ||
15 | # -=-=- Getting Firmware -=-=- | ||
16 | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
17 | # | ||
18 | # See the section `Obtaining and Creating Firmware Files' in this | ||
19 | # document for instructions on obtaining the necessary firmware | ||
20 | # files. | ||
21 | # | ||
22 | # | ||
23 | # Supported Features | ||
24 | # ~~~~~~~~~~~~~~~~~~ | ||
25 | # | ||
26 | # Currently, full-duplex digital audio (/dev/dsp only, /dev/audio is | ||
27 | # not currently available) and mixer functionality (/dev/mixer) are | ||
28 | # supported (memory mapped digital audio is not yet supported). | ||
29 | # Digital transfers and monitoring can be done as well if you have | ||
30 | # the digital daughterboard (see the section on using the S/PDIF port | ||
31 | # for more information). | ||
32 | # | ||
33 | # Support for the Turtle Beach MultiSound Hurricane architecture is | ||
34 | # composed of the following modules (these can also operate compiled | ||
35 | # into the kernel): | ||
36 | # | ||
37 | # msnd - MultiSound base (requires soundcore) | ||
38 | # | ||
39 | # msnd_classic - Base audio/mixer support for Classic, Monetery and | ||
40 | # Tahiti cards | ||
41 | # | ||
42 | # msnd_pinnacle - Base audio/mixer support for Pinnacle and Fiji cards | ||
43 | # | ||
44 | # | ||
45 | # Important Notes - Read Before Using | ||
46 | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
47 | # | ||
48 | # The firmware files are not included (may change in future). You | ||
49 | # must obtain these images from Turtle Beach (they are included in | ||
50 | # the MultiSound Development Kits), and place them in /etc/sound for | ||
51 | # example, and give the full paths in the Linux configuration. If | ||
52 | # you are compiling in support for the MultiSound driver rather than | ||
53 | # using it as a module, these firmware files must be accessible | ||
54 | # during kernel compilation. | ||
55 | # | ||
56 | # Please note these files must be binary files, not assembler. See | ||
57 | # the section later in this document for instructions to obtain these | ||
58 | # files. | ||
59 | # | ||
60 | # | ||
61 | # Configuring Card Resources | ||
62 | # ~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
63 | # | ||
64 | # ** This section is very important, as your card may not work at all | ||
65 | # or your machine may crash if you do not do this correctly. ** | ||
66 | # | ||
67 | # * Classic/Monterey/Tahiti | ||
68 | # | ||
69 | # These cards are configured through the driver msnd_classic. You must | ||
70 | # know the io port, then the driver will select the irq and memory resources | ||
71 | # on the card. It is up to you to know if these are free locations or now, | ||
72 | # a conflict can lock the machine up. | ||
73 | # | ||
74 | # * Pinnacle/Fiji | ||
75 | # | ||
76 | # The Pinnacle and Fiji cards have an extra config port, either | ||
77 | # 0x250, 0x260 or 0x270. This port can be disabled to have the card | ||
78 | # configured strictly through PnP, however you lose the ability to | ||
79 | # access the IDE controller and joystick devices on this card when | ||
80 | # using PnP. The included pinnaclecfg program in this shell archive | ||
81 | # can be used to configure the card in non-PnP mode, and in PnP mode | ||
82 | # you can use isapnptools. These are described briefly here. | ||
83 | # | ||
84 | # pinnaclecfg is not required; you can use the msnd_pinnacle module | ||
85 | # to fully configure the card as well. However, pinnaclecfg can be | ||
86 | # used to change the resource values of a particular device after the | ||
87 | # msnd_pinnacle module has been loaded. If you are compiling the | ||
88 | # driver into the kernel, you must set these values during compile | ||
89 | # time, however other peripheral resource values can be changed with | ||
90 | # the pinnaclecfg program after the kernel is loaded. | ||
91 | # | ||
92 | # | ||
93 | # *** PnP mode | ||
94 | # | ||
95 | # Use pnpdump to obtain a sample configuration if you can; I was able | ||
96 | # to obtain one with the command `pnpdump 1 0x203' -- this may vary | ||
97 | # for you (running pnpdump by itself did not work for me). Then, | ||
98 | # edit this file and use isapnp to uncomment and set the card values. | ||
99 | # Use these values when inserting the msnd_pinnacle module. Using | ||
100 | # this method, you can set the resources for the DSP and the Kurzweil | ||
101 | # synth (Pinnacle). Since Linux does not directly support PnP | ||
102 | # devices, you may have difficulty when using the card in PnP mode | ||
103 | # when it the driver is compiled into the kernel. Using non-PnP mode | ||
104 | # is preferable in this case. | ||
105 | # | ||
106 | # Here is an example mypinnacle.conf for isapnp that sets the card to | ||
107 | # io base 0x210, irq 5 and mem 0xd8000, and also sets the Kurzweil | ||
108 | # synth to 0x330 and irq 9 (may need editing for your system): | ||
109 | # | ||
110 | # (READPORT 0x0203) | ||
111 | # (CSN 2) | ||
112 | # (IDENTIFY *) | ||
113 | # | ||
114 | # # DSP | ||
115 | # (CONFIGURE BVJ0440/-1 (LD 0 | ||
116 | # (INT 0 (IRQ 5 (MODE +E))) (IO 0 (BASE 0x0210)) (MEM 0 (BASE 0x0d8000)) | ||
117 | # (ACT Y))) | ||
118 | # | ||
119 | # # Kurzweil Synth (Pinnacle Only) | ||
120 | # (CONFIGURE BVJ0440/-1 (LD 1 | ||
121 | # (IO 0 (BASE 0x0330)) (INT 0 (IRQ 9 (MODE +E))) | ||
122 | # (ACT Y))) | ||
123 | # | ||
124 | # (WAITFORKEY) | ||
125 | # | ||
126 | # | ||
127 | # *** Non-PnP mode | ||
128 | # | ||
129 | # The second way is by running the card in non-PnP mode. This | ||
130 | # actually has some advantages in that you can access some other | ||
131 | # devices on the card, such as the joystick and IDE controller. To | ||
132 | # configure the card, unpack this shell archive and build the | ||
133 | # pinnaclecfg program. Using this program, you can assign the | ||
134 | # resource values to the card's devices, or disable the devices. As | ||
135 | # an alternative to using pinnaclecfg, you can specify many of the | ||
136 | # configuration values when loading the msnd_pinnacle module (or | ||
137 | # during kernel configuration when compiling the driver into the | ||
138 | # kernel). | ||
139 | # | ||
140 | # If you specify cfg=0x250 for the msnd_pinnacle module, it | ||
141 | # automatically configure the card to the given io, irq and memory | ||
142 | # values using that config port (the config port is jumper selectable | ||
143 | # on the card to 0x250, 0x260 or 0x270). | ||
144 | # | ||
145 | # See the `msnd_pinnacle Additional Options' section below for more | ||
146 | # information on these parameters (also, if you compile the driver | ||
147 | # directly into the kernel, these extra parameters can be useful | ||
148 | # here). | ||
149 | # | ||
150 | # | ||
151 | # ** It is very easy to cause problems in your machine if you choose a | ||
152 | # resource value which is incorrect. ** | ||
153 | # | ||
154 | # | ||
155 | # Examples | ||
156 | # ~~~~~~~~ | ||
157 | # | ||
158 | # * MultiSound Classic/Monterey/Tahiti: | ||
159 | # | ||
160 | # modprobe soundcore | ||
161 | # insmod msnd | ||
162 | # insmod msnd_classic io=0x290 irq=7 mem=0xd0000 | ||
163 | # | ||
164 | # * MultiSound Pinnacle in PnP mode: | ||
165 | # | ||
166 | # modprobe soundcore | ||
167 | # insmod msnd | ||
168 | # isapnp mypinnacle.conf | ||
169 | # insmod msnd_pinnacle io=0x210 irq=5 mem=0xd8000 <-- match mypinnacle.conf values | ||
170 | # | ||
171 | # * MultiSound Pinnacle in non-PnP mode (replace 0x250 with your configuration port, | ||
172 | # one of 0x250, 0x260 or 0x270): | ||
173 | # | ||
174 | # insmod soundcore | ||
175 | # insmod msnd | ||
176 | # insmod msnd_pinnacle cfg=0x250 io=0x290 irq=5 mem=0xd0000 | ||
177 | # | ||
178 | # * To use the MPU-compatible Kurzweil synth on the Pinnacle in PnP | ||
179 | # mode, add the following (assumes you did `isapnp mypinnacle.conf'): | ||
180 | # | ||
181 | # insmod sound | ||
182 | # insmod mpu401 io=0x330 irq=9 <-- match mypinnacle.conf values | ||
183 | # | ||
184 | # * To use the MPU-compatible Kurzweil synth on the Pinnacle in non-PnP | ||
185 | # mode, add the following. Note how we first configure the peripheral's | ||
186 | # resources, _then_ install a Linux driver for it: | ||
187 | # | ||
188 | # insmod sound | ||
189 | # pinnaclecfg 0x250 mpu 0x330 9 | ||
190 | # insmod mpu401 io=0x330 irq=9 | ||
191 | # | ||
192 | # -- OR you can use the following sequence without pinnaclecfg in non-PnP mode: | ||
193 | # | ||
194 | # insmod soundcore | ||
195 | # insmod msnd | ||
196 | # insmod msnd_pinnacle cfg=0x250 io=0x290 irq=5 mem=0xd0000 mpu_io=0x330 mpu_irq=9 | ||
197 | # insmod sound | ||
198 | # insmod mpu401 io=0x330 irq=9 | ||
199 | # | ||
200 | # * To setup the joystick port on the Pinnacle in non-PnP mode (though | ||
201 | # you have to find the actual Linux joystick driver elsewhere), you | ||
202 | # can use pinnaclecfg: | ||
203 | # | ||
204 | # pinnaclecfg 0x250 joystick 0x200 | ||
205 | # | ||
206 | # -- OR you can configure this using msnd_pinnacle with the following: | ||
207 | # | ||
208 | # insmod soundcore | ||
209 | # insmod msnd | ||
210 | # insmod msnd_pinnacle cfg=0x250 io=0x290 irq=5 mem=0xd0000 joystick_io=0x200 | ||
211 | # | ||
212 | # | ||
213 | # msnd_classic, msnd_pinnacle Required Options | ||
214 | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
215 | # | ||
216 | # If the following options are not given, the module will not load. | ||
217 | # Examine the kernel message log for informative error messages. | ||
218 | # WARNING--probing isn't supported so try to make sure you have the | ||
219 | # correct shared memory area, otherwise you may experience problems. | ||
220 | # | ||
221 | # io I/O base of DSP, e.g. io=0x210 | ||
222 | # irq IRQ number, e.g. irq=5 | ||
223 | # mem Shared memory area, e.g. mem=0xd8000 | ||
224 | # | ||
225 | # | ||
226 | # msnd_classic, msnd_pinnacle Additional Options | ||
227 | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
228 | # | ||
229 | # fifosize The digital audio FIFOs, in kilobytes. If not | ||
230 | # specified, the default will be used. Increasing | ||
231 | # this value will reduce the chance of a FIFO | ||
232 | # underflow at the expense of increasing overall | ||
233 | # latency. For example, fifosize=512 will | ||
234 | # allocate 512kB read and write FIFOs (1MB total). | ||
235 | # While this may reduce dropouts, a heavy machine | ||
236 | # load will undoubtedly starve the FIFO of data | ||
237 | # and you will eventually get dropouts. One | ||
238 | # option is to alter the scheduling priority of | ||
239 | # the playback process, using `nice' or some form | ||
240 | # of POSIX soft real-time scheduling. | ||
241 | # | ||
242 | # calibrate_signal Setting this to one calibrates the ADCs to the | ||
243 | # signal, zero calibrates to the card (defaults | ||
244 | # to zero). | ||
245 | # | ||
246 | # | ||
247 | # msnd_pinnacle Additional Options | ||
248 | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
249 | # | ||
250 | # digital Specify digital=1 to enable the S/PDIF input | ||
251 | # if you have the digital daughterboard | ||
252 | # adapter. This will enable access to the | ||
253 | # DIGITAL1 input for the soundcard in the mixer. | ||
254 | # Some mixer programs might have trouble setting | ||
255 | # the DIGITAL1 source as an input. If you have | ||
256 | # trouble, you can try the setdigital.c program | ||
257 | # at the bottom of this document. | ||
258 | # | ||
259 | # cfg Non-PnP configuration port for the Pinnacle | ||
260 | # and Fiji (typically 0x250, 0x260 or 0x270, | ||
261 | # depending on the jumper configuration). If | ||
262 | # this option is omitted, then it is assumed | ||
263 | # that the card is in PnP mode, and that the | ||
264 | # specified DSP resource values are already | ||
265 | # configured with PnP (i.e. it won't attempt to | ||
266 | # do any sort of configuration). | ||
267 | # | ||
268 | # When the Pinnacle is in non-PnP mode, you can use the following | ||
269 | # options to configure particular devices. If a full specification | ||
270 | # for a device is not given, then the device is not configured. Note | ||
271 | # that you still must use a Linux driver for any of these devices | ||
272 | # once their resources are setup (such as the Linux joystick driver, | ||
273 | # or the MPU401 driver from OSS for the Kurzweil synth). | ||
274 | # | ||
275 | # mpu_io I/O port of MPU (on-board Kurzweil synth) | ||
276 | # mpu_irq IRQ of MPU (on-board Kurzweil synth) | ||
277 | # ide_io0 First I/O port of IDE controller | ||
278 | # ide_io1 Second I/O port of IDE controller | ||
279 | # ide_irq IRQ IDE controller | ||
280 | # joystick_io I/O port of joystick | ||
281 | # | ||
282 | # | ||
283 | # Obtaining and Creating Firmware Files | ||
284 | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
285 | # | ||
286 | # For the Classic/Tahiti/Monterey | ||
287 | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
288 | # | ||
289 | # Download to /tmp and unzip the following file from Turtle Beach: | ||
290 | # | ||
291 | # ftp://ftp.voyetra.com/pub/tbs/msndcl/msndvkit.zip | ||
292 | # | ||
293 | # When unzipped, unzip the file named MsndFiles.zip. Then copy the | ||
294 | # following firmware files to /etc/sound (note the file renaming): | ||
295 | # | ||
296 | # cp DSPCODE/MSNDINIT.BIN /etc/sound/msndinit.bin | ||
297 | # cp DSPCODE/MSNDPERM.REB /etc/sound/msndperm.bin | ||
298 | # | ||
299 | # When configuring the Linux kernel, specify /etc/sound/msndinit.bin and | ||
300 | # /etc/sound/msndperm.bin for the two firmware files (Linux kernel | ||
301 | # versions older than 2.2 do not ask for firmware paths, and are | ||
302 | # hardcoded to /etc/sound). | ||
303 | # | ||
304 | # If you are compiling the driver into the kernel, these files must | ||
305 | # be accessible during compilation, but will not be needed later. | ||
306 | # The files must remain, however, if the driver is used as a module. | ||
307 | # | ||
308 | # | ||
309 | # For the Pinnacle/Fiji | ||
310 | # ~~~~~~~~~~~~~~~~~~~~~ | ||
311 | # | ||
312 | # Download to /tmp and unzip the following file from Turtle Beach (be | ||
313 | # sure to use the entire URL; some have had trouble navigating to the | ||
314 | # URL): | ||
315 | # | ||
316 | # ftp://ftp.voyetra.com/pub/tbs/pinn/pnddk100.zip | ||
317 | # | ||
318 | # Unpack this shell archive, and run make in the created directory | ||
319 | # (you need a C compiler and flex to build the utilities). This | ||
320 | # should give you the executables conv, pinnaclecfg and setdigital. | ||
321 | # conv is only used temporarily here to create the firmware files, | ||
322 | # while pinnaclecfg is used to configure the Pinnacle or Fiji card in | ||
323 | # non-PnP mode, and setdigital can be used to set the S/PDIF input on | ||
324 | # the mixer (pinnaclecfg and setdigital should be copied to a | ||
325 | # convenient place, possibly run during system initialization). | ||
326 | # | ||
327 | # To generating the firmware files with the `conv' program, we create | ||
328 | # the binary firmware files by doing the following conversion | ||
329 | # (assuming the archive unpacked into a directory named PINNDDK): | ||
330 | # | ||
331 | # ./conv < PINNDDK/dspcode/pndspini.asm > /etc/sound/pndspini.bin | ||
332 | # ./conv < PINNDDK/dspcode/pndsperm.asm > /etc/sound/pndsperm.bin | ||
333 | # | ||
334 | # The conv (and conv.l) program is not needed after conversion and can | ||
335 | # be safely deleted. Then, when configuring the Linux kernel, specify | ||
336 | # /etc/sound/pndspini.bin and /etc/sound/pndsperm.bin for the two | ||
337 | # firmware files (Linux kernel versions older than 2.2 do not ask for | ||
338 | # firmware paths, and are hardcoded to /etc/sound). | ||
339 | # | ||
340 | # If you are compiling the driver into the kernel, these files must | ||
341 | # be accessible during compilation, but will not be needed later. | ||
342 | # The files must remain, however, if the driver is used as a module. | ||
343 | # | ||
344 | # | ||
345 | # Using Digital I/O with the S/PDIF Port | ||
346 | # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
347 | # | ||
348 | # If you have a Pinnacle or Fiji with the digital daughterboard and | ||
349 | # want to set it as the input source, you can use this program if you | ||
350 | # have trouble trying to do it with a mixer program (be sure to | ||
351 | # insert the module with the digital=1 option, or say Y to the option | ||
352 | # during compiled-in kernel operation). Upon selection of the S/PDIF | ||
353 | # port, you should be able monitor and record from it. | ||
354 | # | ||
355 | # There is something to note about using the S/PDIF port. Digital | ||
356 | # timing is taken from the digital signal, so if a signal is not | ||
357 | # connected to the port and it is selected as recording input, you | ||
358 | # will find PCM playback to be distorted in playback rate. Also, | ||
359 | # attempting to record at a sampling rate other than the DAT rate may | ||
360 | # be problematic (i.e. trying to record at 8000Hz when the DAT signal | ||
361 | # is 44100Hz). If you have a problem with this, set the recording | ||
362 | # input to analog if you need to record at a rate other than that of | ||
363 | # the DAT rate. | ||
364 | # | ||
365 | # | ||
366 | # -- Shell archive attached below, just run `sh MultiSound' to extract. | ||
367 | # Contains Pinnacle/Fiji utilities to convert firmware, configure | ||
368 | # in non-PnP mode, and select the DIGITAL1 input for the mixer. | ||
369 | # | ||
370 | # | ||
371 | #!/bin/sh | ||
372 | # This is a shell archive (produced by GNU sharutils 4.2). | ||
373 | # To extract the files from this archive, save it to some FILE, remove | ||
374 | # everything before the `!/bin/sh' line above, then type `sh FILE'. | ||
375 | # | ||
376 | # Made on 1998-12-04 10:07 EST by <andrewtv@ztransform.velsoft.com>. | ||
377 | # Source directory was `/home/andrewtv/programming/pinnacle/pinnacle'. | ||
378 | # | ||
379 | # Existing files will *not* be overwritten unless `-c' is specified. | ||
380 | # | ||
381 | # This shar contains: | ||
382 | # length mode name | ||
383 | # ------ ---------- ------------------------------------------ | ||
384 | # 2046 -rw-rw-r-- MultiSound.d/setdigital.c | ||
385 | # 10235 -rw-rw-r-- MultiSound.d/pinnaclecfg.c | ||
386 | # 106 -rw-rw-r-- MultiSound.d/Makefile | ||
387 | # 141 -rw-rw-r-- MultiSound.d/conv.l | ||
388 | # 1472 -rw-rw-r-- MultiSound.d/msndreset.c | ||
389 | # | ||
390 | save_IFS="${IFS}" | ||
391 | IFS="${IFS}:" | ||
392 | gettext_dir=FAILED | ||
393 | locale_dir=FAILED | ||
394 | first_param="$1" | ||
395 | for dir in $PATH | ||
396 | do | ||
397 | if test "$gettext_dir" = FAILED && test -f $dir/gettext \ | ||
398 | && ($dir/gettext --version >/dev/null 2>&1) | ||
399 | then | ||
400 | set `$dir/gettext --version 2>&1` | ||
401 | if test "$3" = GNU | ||
402 | then | ||
403 | gettext_dir=$dir | ||
404 | fi | ||
405 | fi | ||
406 | if test "$locale_dir" = FAILED && test -f $dir/shar \ | ||
407 | && ($dir/shar --print-text-domain-dir >/dev/null 2>&1) | ||
408 | then | ||
409 | locale_dir=`$dir/shar --print-text-domain-dir` | ||
410 | fi | ||
411 | done | ||
412 | IFS="$save_IFS" | ||
413 | if test "$locale_dir" = FAILED || test "$gettext_dir" = FAILED | ||
414 | then | ||
415 | echo=echo | ||
416 | else | ||
417 | TEXTDOMAINDIR=$locale_dir | ||
418 | export TEXTDOMAINDIR | ||
419 | TEXTDOMAIN=sharutils | ||
420 | export TEXTDOMAIN | ||
421 | echo="$gettext_dir/gettext -s" | ||
422 | fi | ||
423 | touch -am 1231235999 $$.touch >/dev/null 2>&1 | ||
424 | if test ! -f 1231235999 && test -f $$.touch; then | ||
425 | shar_touch=touch | ||
426 | else | ||
427 | shar_touch=: | ||
428 | echo | ||
429 | $echo 'WARNING: not restoring timestamps. Consider getting and' | ||
430 | $echo "installing GNU \`touch', distributed in GNU File Utilities..." | ||
431 | echo | ||
432 | fi | ||
433 | rm -f 1231235999 $$.touch | ||
434 | # | ||
435 | if mkdir _sh01426; then | ||
436 | $echo 'x -' 'creating lock directory' | ||
437 | else | ||
438 | $echo 'failed to create lock directory' | ||
439 | exit 1 | ||
440 | fi | ||
441 | # ============= MultiSound.d/setdigital.c ============== | ||
442 | if test ! -d 'MultiSound.d'; then | ||
443 | $echo 'x -' 'creating directory' 'MultiSound.d' | ||
444 | mkdir 'MultiSound.d' | ||
445 | fi | ||
446 | if test -f 'MultiSound.d/setdigital.c' && test "$first_param" != -c; then | ||
447 | $echo 'x -' SKIPPING 'MultiSound.d/setdigital.c' '(file already exists)' | ||
448 | else | ||
449 | $echo 'x -' extracting 'MultiSound.d/setdigital.c' '(text)' | ||
450 | sed 's/^X//' << 'SHAR_EOF' > 'MultiSound.d/setdigital.c' && | ||
451 | /********************************************************************* | ||
452 | X * | ||
453 | X * setdigital.c - sets the DIGITAL1 input for a mixer | ||
454 | X * | ||
455 | X * Copyright (C) 1998 Andrew Veliath | ||
456 | X * | ||
457 | X * This program is free software; you can redistribute it and/or modify | ||
458 | X * it under the terms of the GNU General Public License as published by | ||
459 | X * the Free Software Foundation; either version 2 of the License, or | ||
460 | X * (at your option) any later version. | ||
461 | X * | ||
462 | X * This program is distributed in the hope that it will be useful, | ||
463 | X * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
464 | X * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
465 | X * GNU General Public License for more details. | ||
466 | X * | ||
467 | X * You should have received a copy of the GNU General Public License | ||
468 | X * along with this program; if not, write to the Free Software | ||
469 | X * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
470 | X * | ||
471 | X ********************************************************************/ | ||
472 | X | ||
473 | #include <stdio.h> | ||
474 | #include <unistd.h> | ||
475 | #include <fcntl.h> | ||
476 | #include <sys/types.h> | ||
477 | #include <sys/stat.h> | ||
478 | #include <sys/ioctl.h> | ||
479 | #include <sys/soundcard.h> | ||
480 | X | ||
481 | int main(int argc, char *argv[]) | ||
482 | { | ||
483 | X int fd; | ||
484 | X unsigned long recmask, recsrc; | ||
485 | X | ||
486 | X if (argc != 2) { | ||
487 | X fprintf(stderr, "usage: setdigital <mixer device>\n"); | ||
488 | X exit(1); | ||
489 | X } | ||
490 | X | ||
491 | X if ((fd = open(argv[1], O_RDWR)) < 0) { | ||
492 | X perror(argv[1]); | ||
493 | X exit(1); | ||
494 | X } | ||
495 | X | ||
496 | X if (ioctl(fd, SOUND_MIXER_READ_RECMASK, &recmask) < 0) { | ||
497 | X fprintf(stderr, "error: ioctl read recording mask failed\n"); | ||
498 | X perror("ioctl"); | ||
499 | X close(fd); | ||
500 | X exit(1); | ||
501 | X } | ||
502 | X | ||
503 | X if (!(recmask & SOUND_MASK_DIGITAL1)) { | ||
504 | X fprintf(stderr, "error: cannot find DIGITAL1 device in mixer\n"); | ||
505 | X close(fd); | ||
506 | X exit(1); | ||
507 | X } | ||
508 | X | ||
509 | X if (ioctl(fd, SOUND_MIXER_READ_RECSRC, &recsrc) < 0) { | ||
510 | X fprintf(stderr, "error: ioctl read recording source failed\n"); | ||
511 | X perror("ioctl"); | ||
512 | X close(fd); | ||
513 | X exit(1); | ||
514 | X } | ||
515 | X | ||
516 | X recsrc |= SOUND_MASK_DIGITAL1; | ||
517 | X | ||
518 | X if (ioctl(fd, SOUND_MIXER_WRITE_RECSRC, &recsrc) < 0) { | ||
519 | X fprintf(stderr, "error: ioctl write recording source failed\n"); | ||
520 | X perror("ioctl"); | ||
521 | X close(fd); | ||
522 | X exit(1); | ||
523 | X } | ||
524 | X | ||
525 | X close(fd); | ||
526 | X | ||
527 | X return 0; | ||
528 | } | ||
529 | SHAR_EOF | ||
530 | $shar_touch -am 1204092598 'MultiSound.d/setdigital.c' && | ||
531 | chmod 0664 'MultiSound.d/setdigital.c' || | ||
532 | $echo 'restore of' 'MultiSound.d/setdigital.c' 'failed' | ||
533 | if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \ | ||
534 | && ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then | ||
535 | md5sum -c << SHAR_EOF >/dev/null 2>&1 \ | ||
536 | || $echo 'MultiSound.d/setdigital.c:' 'MD5 check failed' | ||
537 | e87217fc3e71288102ba41fd81f71ec4 MultiSound.d/setdigital.c | ||
538 | SHAR_EOF | ||
539 | else | ||
540 | shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'MultiSound.d/setdigital.c'`" | ||
541 | test 2046 -eq "$shar_count" || | ||
542 | $echo 'MultiSound.d/setdigital.c:' 'original size' '2046,' 'current size' "$shar_count!" | ||
543 | fi | ||
544 | fi | ||
545 | # ============= MultiSound.d/pinnaclecfg.c ============== | ||
546 | if test -f 'MultiSound.d/pinnaclecfg.c' && test "$first_param" != -c; then | ||
547 | $echo 'x -' SKIPPING 'MultiSound.d/pinnaclecfg.c' '(file already exists)' | ||
548 | else | ||
549 | $echo 'x -' extracting 'MultiSound.d/pinnaclecfg.c' '(text)' | ||
550 | sed 's/^X//' << 'SHAR_EOF' > 'MultiSound.d/pinnaclecfg.c' && | ||
551 | /********************************************************************* | ||
552 | X * | ||
553 | X * pinnaclecfg.c - Pinnacle/Fiji Device Configuration Program | ||
554 | X * | ||
555 | X * This is for NON-PnP mode only. For PnP mode, use isapnptools. | ||
556 | X * | ||
557 | X * This is Linux-specific, and must be run with root permissions. | ||
558 | X * | ||
559 | X * Part of the Turtle Beach MultiSound Sound Card Driver for Linux | ||
560 | X * | ||
561 | X * Copyright (C) 1998 Andrew Veliath | ||
562 | X * | ||
563 | X * This program is free software; you can redistribute it and/or modify | ||
564 | X * it under the terms of the GNU General Public License as published by | ||
565 | X * the Free Software Foundation; either version 2 of the License, or | ||
566 | X * (at your option) any later version. | ||
567 | X * | ||
568 | X * This program is distributed in the hope that it will be useful, | ||
569 | X * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
570 | X * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
571 | X * GNU General Public License for more details. | ||
572 | X * | ||
573 | X * You should have received a copy of the GNU General Public License | ||
574 | X * along with this program; if not, write to the Free Software | ||
575 | X * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
576 | X * | ||
577 | X ********************************************************************/ | ||
578 | X | ||
579 | #include <stdio.h> | ||
580 | #include <stdlib.h> | ||
581 | #include <string.h> | ||
582 | #include <errno.h> | ||
583 | #include <unistd.h> | ||
584 | #include <asm/io.h> | ||
585 | #include <asm/types.h> | ||
586 | X | ||
587 | #define IREG_LOGDEVICE 0x07 | ||
588 | #define IREG_ACTIVATE 0x30 | ||
589 | #define LD_ACTIVATE 0x01 | ||
590 | #define LD_DISACTIVATE 0x00 | ||
591 | #define IREG_EECONTROL 0x3F | ||
592 | #define IREG_MEMBASEHI 0x40 | ||
593 | #define IREG_MEMBASELO 0x41 | ||
594 | #define IREG_MEMCONTROL 0x42 | ||
595 | #define IREG_MEMRANGEHI 0x43 | ||
596 | #define IREG_MEMRANGELO 0x44 | ||
597 | #define MEMTYPE_8BIT 0x00 | ||
598 | #define MEMTYPE_16BIT 0x02 | ||
599 | #define MEMTYPE_RANGE 0x00 | ||
600 | #define MEMTYPE_HIADDR 0x01 | ||
601 | #define IREG_IO0_BASEHI 0x60 | ||
602 | #define IREG_IO0_BASELO 0x61 | ||
603 | #define IREG_IO1_BASEHI 0x62 | ||
604 | #define IREG_IO1_BASELO 0x63 | ||
605 | #define IREG_IRQ_NUMBER 0x70 | ||
606 | #define IREG_IRQ_TYPE 0x71 | ||
607 | #define IRQTYPE_HIGH 0x02 | ||
608 | #define IRQTYPE_LOW 0x00 | ||
609 | #define IRQTYPE_LEVEL 0x01 | ||
610 | #define IRQTYPE_EDGE 0x00 | ||
611 | X | ||
612 | #define HIBYTE(w) ((BYTE)(((WORD)(w) >> 8) & 0xFF)) | ||
613 | #define LOBYTE(w) ((BYTE)(w)) | ||
614 | #define MAKEWORD(low,hi) ((WORD)(((BYTE)(low))|(((WORD)((BYTE)(hi)))<<8))) | ||
615 | X | ||
616 | typedef __u8 BYTE; | ||
617 | typedef __u16 USHORT; | ||
618 | typedef __u16 WORD; | ||
619 | X | ||
620 | static int config_port = -1; | ||
621 | X | ||
622 | static int msnd_write_cfg(int cfg, int reg, int value) | ||
623 | { | ||
624 | X outb(reg, cfg); | ||
625 | X outb(value, cfg + 1); | ||
626 | X if (value != inb(cfg + 1)) { | ||
627 | X fprintf(stderr, "error: msnd_write_cfg: I/O error\n"); | ||
628 | X return -EIO; | ||
629 | X } | ||
630 | X return 0; | ||
631 | } | ||
632 | X | ||
633 | static int msnd_read_cfg(int cfg, int reg) | ||
634 | { | ||
635 | X outb(reg, cfg); | ||
636 | X return inb(cfg + 1); | ||
637 | } | ||
638 | X | ||
639 | static int msnd_write_cfg_io0(int cfg, int num, WORD io) | ||
640 | { | ||
641 | X if (msnd_write_cfg(cfg, IREG_LOGDEVICE, num)) | ||
642 | X return -EIO; | ||
643 | X if (msnd_write_cfg(cfg, IREG_IO0_BASEHI, HIBYTE(io))) | ||
644 | X return -EIO; | ||
645 | X if (msnd_write_cfg(cfg, IREG_IO0_BASELO, LOBYTE(io))) | ||
646 | X return -EIO; | ||
647 | X return 0; | ||
648 | } | ||
649 | X | ||
650 | static int msnd_read_cfg_io0(int cfg, int num, WORD *io) | ||
651 | { | ||
652 | X if (msnd_write_cfg(cfg, IREG_LOGDEVICE, num)) | ||
653 | X return -EIO; | ||
654 | X | ||
655 | X *io = MAKEWORD(msnd_read_cfg(cfg, IREG_IO0_BASELO), | ||
656 | X msnd_read_cfg(cfg, IREG_IO0_BASEHI)); | ||
657 | X | ||
658 | X return 0; | ||
659 | } | ||
660 | X | ||
661 | static int msnd_write_cfg_io1(int cfg, int num, WORD io) | ||
662 | { | ||
663 | X if (msnd_write_cfg(cfg, IREG_LOGDEVICE, num)) | ||
664 | X return -EIO; | ||
665 | X if (msnd_write_cfg(cfg, IREG_IO1_BASEHI, HIBYTE(io))) | ||
666 | X return -EIO; | ||
667 | X if (msnd_write_cfg(cfg, IREG_IO1_BASELO, LOBYTE(io))) | ||
668 | X return -EIO; | ||
669 | X return 0; | ||
670 | } | ||
671 | X | ||
672 | static int msnd_read_cfg_io1(int cfg, int num, WORD *io) | ||
673 | { | ||
674 | X if (msnd_write_cfg(cfg, IREG_LOGDEVICE, num)) | ||
675 | X return -EIO; | ||
676 | X | ||
677 | X *io = MAKEWORD(msnd_read_cfg(cfg, IREG_IO1_BASELO), | ||
678 | X msnd_read_cfg(cfg, IREG_IO1_BASEHI)); | ||
679 | X | ||
680 | X return 0; | ||
681 | } | ||
682 | X | ||
683 | static int msnd_write_cfg_irq(int cfg, int num, WORD irq) | ||
684 | { | ||
685 | X if (msnd_write_cfg(cfg, IREG_LOGDEVICE, num)) | ||
686 | X return -EIO; | ||
687 | X if (msnd_write_cfg(cfg, IREG_IRQ_NUMBER, LOBYTE(irq))) | ||
688 | X return -EIO; | ||
689 | X if (msnd_write_cfg(cfg, IREG_IRQ_TYPE, IRQTYPE_EDGE)) | ||
690 | X return -EIO; | ||
691 | X return 0; | ||
692 | } | ||
693 | X | ||
694 | static int msnd_read_cfg_irq(int cfg, int num, WORD *irq) | ||
695 | { | ||
696 | X if (msnd_write_cfg(cfg, IREG_LOGDEVICE, num)) | ||
697 | X return -EIO; | ||
698 | X | ||
699 | X *irq = msnd_read_cfg(cfg, IREG_IRQ_NUMBER); | ||
700 | X | ||
701 | X return 0; | ||
702 | } | ||
703 | X | ||
704 | static int msnd_write_cfg_mem(int cfg, int num, int mem) | ||
705 | { | ||
706 | X WORD wmem; | ||
707 | X | ||
708 | X mem >>= 8; | ||
709 | X mem &= 0xfff; | ||
710 | X wmem = (WORD)mem; | ||
711 | X if (msnd_write_cfg(cfg, IREG_LOGDEVICE, num)) | ||
712 | X return -EIO; | ||
713 | X if (msnd_write_cfg(cfg, IREG_MEMBASEHI, HIBYTE(wmem))) | ||
714 | X return -EIO; | ||
715 | X if (msnd_write_cfg(cfg, IREG_MEMBASELO, LOBYTE(wmem))) | ||
716 | X return -EIO; | ||
717 | X if (wmem && msnd_write_cfg(cfg, IREG_MEMCONTROL, (MEMTYPE_HIADDR | MEMTYPE_16BIT))) | ||
718 | X return -EIO; | ||
719 | X return 0; | ||
720 | } | ||
721 | X | ||
722 | static int msnd_read_cfg_mem(int cfg, int num, int *mem) | ||
723 | { | ||
724 | X if (msnd_write_cfg(cfg, IREG_LOGDEVICE, num)) | ||
725 | X return -EIO; | ||
726 | X | ||
727 | X *mem = MAKEWORD(msnd_read_cfg(cfg, IREG_MEMBASELO), | ||
728 | X msnd_read_cfg(cfg, IREG_MEMBASEHI)); | ||
729 | X *mem <<= 8; | ||
730 | X | ||
731 | X return 0; | ||
732 | } | ||
733 | X | ||
734 | static int msnd_activate_logical(int cfg, int num) | ||
735 | { | ||
736 | X if (msnd_write_cfg(cfg, IREG_LOGDEVICE, num)) | ||
737 | X return -EIO; | ||
738 | X if (msnd_write_cfg(cfg, IREG_ACTIVATE, LD_ACTIVATE)) | ||
739 | X return -EIO; | ||
740 | X return 0; | ||
741 | } | ||
742 | X | ||
743 | static int msnd_write_cfg_logical(int cfg, int num, WORD io0, WORD io1, WORD irq, int mem) | ||
744 | { | ||
745 | X if (msnd_write_cfg(cfg, IREG_LOGDEVICE, num)) | ||
746 | X return -EIO; | ||
747 | X if (msnd_write_cfg_io0(cfg, num, io0)) | ||
748 | X return -EIO; | ||
749 | X if (msnd_write_cfg_io1(cfg, num, io1)) | ||
750 | X return -EIO; | ||
751 | X if (msnd_write_cfg_irq(cfg, num, irq)) | ||
752 | X return -EIO; | ||
753 | X if (msnd_write_cfg_mem(cfg, num, mem)) | ||
754 | X return -EIO; | ||
755 | X if (msnd_activate_logical(cfg, num)) | ||
756 | X return -EIO; | ||
757 | X return 0; | ||
758 | } | ||
759 | X | ||
760 | static int msnd_read_cfg_logical(int cfg, int num, WORD *io0, WORD *io1, WORD *irq, int *mem) | ||
761 | { | ||
762 | X if (msnd_write_cfg(cfg, IREG_LOGDEVICE, num)) | ||
763 | X return -EIO; | ||
764 | X if (msnd_read_cfg_io0(cfg, num, io0)) | ||
765 | X return -EIO; | ||
766 | X if (msnd_read_cfg_io1(cfg, num, io1)) | ||
767 | X return -EIO; | ||
768 | X if (msnd_read_cfg_irq(cfg, num, irq)) | ||
769 | X return -EIO; | ||
770 | X if (msnd_read_cfg_mem(cfg, num, mem)) | ||
771 | X return -EIO; | ||
772 | X return 0; | ||
773 | } | ||
774 | X | ||
775 | static void usage(void) | ||
776 | { | ||
777 | X fprintf(stderr, | ||
778 | X "\n" | ||
779 | X "pinnaclecfg 1.0\n" | ||
780 | X "\n" | ||
781 | X "usage: pinnaclecfg <config port> [device config]\n" | ||
782 | X "\n" | ||
783 | X "This is for use with the card in NON-PnP mode only.\n" | ||
784 | X "\n" | ||
785 | X "Available devices (not all available for Fiji):\n" | ||
786 | X "\n" | ||
787 | X " Device Description\n" | ||
788 | X " -------------------------------------------------------------------\n" | ||
789 | X " reset Reset all devices (i.e. disable)\n" | ||
790 | X " show Display current device configurations\n" | ||
791 | X "\n" | ||
792 | X " dsp <io> <irq> <mem> Audio device\n" | ||
793 | X " mpu <io> <irq> Internal Kurzweil synth\n" | ||
794 | X " ide <io0> <io1> <irq> On-board IDE controller\n" | ||
795 | X " joystick <io> Joystick port\n" | ||
796 | X "\n"); | ||
797 | X exit(1); | ||
798 | } | ||
799 | X | ||
800 | static int cfg_reset(void) | ||
801 | { | ||
802 | X int i; | ||
803 | X | ||
804 | X for (i = 0; i < 4; ++i) | ||
805 | X msnd_write_cfg_logical(config_port, i, 0, 0, 0, 0); | ||
806 | X | ||
807 | X return 0; | ||
808 | } | ||
809 | X | ||
810 | static int cfg_show(void) | ||
811 | { | ||
812 | X int i; | ||
813 | X int count = 0; | ||
814 | X | ||
815 | X for (i = 0; i < 4; ++i) { | ||
816 | X WORD io0, io1, irq; | ||
817 | X int mem; | ||
818 | X msnd_read_cfg_logical(config_port, i, &io0, &io1, &irq, &mem); | ||
819 | X switch (i) { | ||
820 | X case 0: | ||
821 | X if (io0 || irq || mem) { | ||
822 | X printf("dsp 0x%x %d 0x%x\n", io0, irq, mem); | ||
823 | X ++count; | ||
824 | X } | ||
825 | X break; | ||
826 | X case 1: | ||
827 | X if (io0 || irq) { | ||
828 | X printf("mpu 0x%x %d\n", io0, irq); | ||
829 | X ++count; | ||
830 | X } | ||
831 | X break; | ||
832 | X case 2: | ||
833 | X if (io0 || io1 || irq) { | ||
834 | X printf("ide 0x%x 0x%x %d\n", io0, io1, irq); | ||
835 | X ++count; | ||
836 | X } | ||
837 | X break; | ||
838 | X case 3: | ||
839 | X if (io0) { | ||
840 | X printf("joystick 0x%x\n", io0); | ||
841 | X ++count; | ||
842 | X } | ||
843 | X break; | ||
844 | X } | ||
845 | X } | ||
846 | X | ||
847 | X if (count == 0) | ||
848 | X fprintf(stderr, "no devices configured\n"); | ||
849 | X | ||
850 | X return 0; | ||
851 | } | ||
852 | X | ||
853 | static int cfg_dsp(int argc, char *argv[]) | ||
854 | { | ||
855 | X int io, irq, mem; | ||
856 | X | ||
857 | X if (argc < 3 || | ||
858 | X sscanf(argv[0], "0x%x", &io) != 1 || | ||
859 | X sscanf(argv[1], "%d", &irq) != 1 || | ||
860 | X sscanf(argv[2], "0x%x", &mem) != 1) | ||
861 | X usage(); | ||
862 | X | ||
863 | X if (!(io == 0x290 || | ||
864 | X io == 0x260 || | ||
865 | X io == 0x250 || | ||
866 | X io == 0x240 || | ||
867 | X io == 0x230 || | ||
868 | X io == 0x220 || | ||
869 | X io == 0x210 || | ||
870 | X io == 0x3e0)) { | ||
871 | X fprintf(stderr, "error: io must be one of " | ||
872 | X "210, 220, 230, 240, 250, 260, 290, or 3E0\n"); | ||
873 | X usage(); | ||
874 | X } | ||
875 | X | ||
876 | X if (!(irq == 5 || | ||
877 | X irq == 7 || | ||
878 | X irq == 9 || | ||
879 | X irq == 10 || | ||
880 | X irq == 11 || | ||
881 | X irq == 12)) { | ||
882 | X fprintf(stderr, "error: irq must be one of " | ||
883 | X "5, 7, 9, 10, 11 or 12\n"); | ||
884 | X usage(); | ||
885 | X } | ||
886 | X | ||
887 | X if (!(mem == 0xb0000 || | ||
888 | X mem == 0xc8000 || | ||
889 | X mem == 0xd0000 || | ||
890 | X mem == 0xd8000 || | ||
891 | X mem == 0xe0000 || | ||
892 | X mem == 0xe8000)) { | ||
893 | X fprintf(stderr, "error: mem must be one of " | ||
894 | X "0xb0000, 0xc8000, 0xd0000, 0xd8000, 0xe0000 or 0xe8000\n"); | ||
895 | X usage(); | ||
896 | X } | ||
897 | X | ||
898 | X return msnd_write_cfg_logical(config_port, 0, io, 0, irq, mem); | ||
899 | } | ||
900 | X | ||
901 | static int cfg_mpu(int argc, char *argv[]) | ||
902 | { | ||
903 | X int io, irq; | ||
904 | X | ||
905 | X if (argc < 2 || | ||
906 | X sscanf(argv[0], "0x%x", &io) != 1 || | ||
907 | X sscanf(argv[1], "%d", &irq) != 1) | ||
908 | X usage(); | ||
909 | X | ||
910 | X return msnd_write_cfg_logical(config_port, 1, io, 0, irq, 0); | ||
911 | } | ||
912 | X | ||
913 | static int cfg_ide(int argc, char *argv[]) | ||
914 | { | ||
915 | X int io0, io1, irq; | ||
916 | X | ||
917 | X if (argc < 3 || | ||
918 | X sscanf(argv[0], "0x%x", &io0) != 1 || | ||
919 | X sscanf(argv[0], "0x%x", &io1) != 1 || | ||
920 | X sscanf(argv[1], "%d", &irq) != 1) | ||
921 | X usage(); | ||
922 | X | ||
923 | X return msnd_write_cfg_logical(config_port, 2, io0, io1, irq, 0); | ||
924 | } | ||
925 | X | ||
926 | static int cfg_joystick(int argc, char *argv[]) | ||
927 | { | ||
928 | X int io; | ||
929 | X | ||
930 | X if (argc < 1 || | ||
931 | X sscanf(argv[0], "0x%x", &io) != 1) | ||
932 | X usage(); | ||
933 | X | ||
934 | X return msnd_write_cfg_logical(config_port, 3, io, 0, 0, 0); | ||
935 | } | ||
936 | X | ||
937 | int main(int argc, char *argv[]) | ||
938 | { | ||
939 | X char *device; | ||
940 | X int rv = 0; | ||
941 | X | ||
942 | X --argc; ++argv; | ||
943 | X | ||
944 | X if (argc < 2) | ||
945 | X usage(); | ||
946 | X | ||
947 | X sscanf(argv[0], "0x%x", &config_port); | ||
948 | X if (config_port != 0x250 && config_port != 0x260 && config_port != 0x270) { | ||
949 | X fprintf(stderr, "error: <config port> must be 0x250, 0x260 or 0x270\n"); | ||
950 | X exit(1); | ||
951 | X } | ||
952 | X if (ioperm(config_port, 2, 1)) { | ||
953 | X perror("ioperm"); | ||
954 | X fprintf(stderr, "note: pinnaclecfg must be run as root\n"); | ||
955 | X exit(1); | ||
956 | X } | ||
957 | X device = argv[1]; | ||
958 | X | ||
959 | X argc -= 2; argv += 2; | ||
960 | X | ||
961 | X if (strcmp(device, "reset") == 0) | ||
962 | X rv = cfg_reset(); | ||
963 | X else if (strcmp(device, "show") == 0) | ||
964 | X rv = cfg_show(); | ||
965 | X else if (strcmp(device, "dsp") == 0) | ||
966 | X rv = cfg_dsp(argc, argv); | ||
967 | X else if (strcmp(device, "mpu") == 0) | ||
968 | X rv = cfg_mpu(argc, argv); | ||
969 | X else if (strcmp(device, "ide") == 0) | ||
970 | X rv = cfg_ide(argc, argv); | ||
971 | X else if (strcmp(device, "joystick") == 0) | ||
972 | X rv = cfg_joystick(argc, argv); | ||
973 | X else { | ||
974 | X fprintf(stderr, "error: unknown device %s\n", device); | ||
975 | X usage(); | ||
976 | X } | ||
977 | X | ||
978 | X if (rv) | ||
979 | X fprintf(stderr, "error: device configuration failed\n"); | ||
980 | X | ||
981 | X return 0; | ||
982 | } | ||
983 | SHAR_EOF | ||
984 | $shar_touch -am 1204092598 'MultiSound.d/pinnaclecfg.c' && | ||
985 | chmod 0664 'MultiSound.d/pinnaclecfg.c' || | ||
986 | $echo 'restore of' 'MultiSound.d/pinnaclecfg.c' 'failed' | ||
987 | if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \ | ||
988 | && ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then | ||
989 | md5sum -c << SHAR_EOF >/dev/null 2>&1 \ | ||
990 | || $echo 'MultiSound.d/pinnaclecfg.c:' 'MD5 check failed' | ||
991 | 366bdf27f0db767a3c7921d0a6db20fe MultiSound.d/pinnaclecfg.c | ||
992 | SHAR_EOF | ||
993 | else | ||
994 | shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'MultiSound.d/pinnaclecfg.c'`" | ||
995 | test 10235 -eq "$shar_count" || | ||
996 | $echo 'MultiSound.d/pinnaclecfg.c:' 'original size' '10235,' 'current size' "$shar_count!" | ||
997 | fi | ||
998 | fi | ||
999 | # ============= MultiSound.d/Makefile ============== | ||
1000 | if test -f 'MultiSound.d/Makefile' && test "$first_param" != -c; then | ||
1001 | $echo 'x -' SKIPPING 'MultiSound.d/Makefile' '(file already exists)' | ||
1002 | else | ||
1003 | $echo 'x -' extracting 'MultiSound.d/Makefile' '(text)' | ||
1004 | sed 's/^X//' << 'SHAR_EOF' > 'MultiSound.d/Makefile' && | ||
1005 | CC = gcc | ||
1006 | CFLAGS = -O | ||
1007 | PROGS = setdigital msndreset pinnaclecfg conv | ||
1008 | X | ||
1009 | all: $(PROGS) | ||
1010 | X | ||
1011 | clean: | ||
1012 | X rm -f $(PROGS) | ||
1013 | SHAR_EOF | ||
1014 | $shar_touch -am 1204092398 'MultiSound.d/Makefile' && | ||
1015 | chmod 0664 'MultiSound.d/Makefile' || | ||
1016 | $echo 'restore of' 'MultiSound.d/Makefile' 'failed' | ||
1017 | if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \ | ||
1018 | && ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then | ||
1019 | md5sum -c << SHAR_EOF >/dev/null 2>&1 \ | ||
1020 | || $echo 'MultiSound.d/Makefile:' 'MD5 check failed' | ||
1021 | 76ca8bb44e3882edcf79c97df6c81845 MultiSound.d/Makefile | ||
1022 | SHAR_EOF | ||
1023 | else | ||
1024 | shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'MultiSound.d/Makefile'`" | ||
1025 | test 106 -eq "$shar_count" || | ||
1026 | $echo 'MultiSound.d/Makefile:' 'original size' '106,' 'current size' "$shar_count!" | ||
1027 | fi | ||
1028 | fi | ||
1029 | # ============= MultiSound.d/conv.l ============== | ||
1030 | if test -f 'MultiSound.d/conv.l' && test "$first_param" != -c; then | ||
1031 | $echo 'x -' SKIPPING 'MultiSound.d/conv.l' '(file already exists)' | ||
1032 | else | ||
1033 | $echo 'x -' extracting 'MultiSound.d/conv.l' '(text)' | ||
1034 | sed 's/^X//' << 'SHAR_EOF' > 'MultiSound.d/conv.l' && | ||
1035 | %% | ||
1036 | [ \n\t,\r] | ||
1037 | \;.* | ||
1038 | DB | ||
1039 | [0-9A-Fa-f]+H { int n; sscanf(yytext, "%xH", &n); printf("%c", n); } | ||
1040 | %% | ||
1041 | int yywrap() { return 1; } | ||
1042 | main() { yylex(); } | ||
1043 | SHAR_EOF | ||
1044 | $shar_touch -am 0828231798 'MultiSound.d/conv.l' && | ||
1045 | chmod 0664 'MultiSound.d/conv.l' || | ||
1046 | $echo 'restore of' 'MultiSound.d/conv.l' 'failed' | ||
1047 | if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \ | ||
1048 | && ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then | ||
1049 | md5sum -c << SHAR_EOF >/dev/null 2>&1 \ | ||
1050 | || $echo 'MultiSound.d/conv.l:' 'MD5 check failed' | ||
1051 | d2411fc32cd71a00dcdc1f009e858dd2 MultiSound.d/conv.l | ||
1052 | SHAR_EOF | ||
1053 | else | ||
1054 | shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'MultiSound.d/conv.l'`" | ||
1055 | test 141 -eq "$shar_count" || | ||
1056 | $echo 'MultiSound.d/conv.l:' 'original size' '141,' 'current size' "$shar_count!" | ||
1057 | fi | ||
1058 | fi | ||
1059 | # ============= MultiSound.d/msndreset.c ============== | ||
1060 | if test -f 'MultiSound.d/msndreset.c' && test "$first_param" != -c; then | ||
1061 | $echo 'x -' SKIPPING 'MultiSound.d/msndreset.c' '(file already exists)' | ||
1062 | else | ||
1063 | $echo 'x -' extracting 'MultiSound.d/msndreset.c' '(text)' | ||
1064 | sed 's/^X//' << 'SHAR_EOF' > 'MultiSound.d/msndreset.c' && | ||
1065 | /********************************************************************* | ||
1066 | X * | ||
1067 | X * msndreset.c - resets the MultiSound card | ||
1068 | X * | ||
1069 | X * Copyright (C) 1998 Andrew Veliath | ||
1070 | X * | ||
1071 | X * This program is free software; you can redistribute it and/or modify | ||
1072 | X * it under the terms of the GNU General Public License as published by | ||
1073 | X * the Free Software Foundation; either version 2 of the License, or | ||
1074 | X * (at your option) any later version. | ||
1075 | X * | ||
1076 | X * This program is distributed in the hope that it will be useful, | ||
1077 | X * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
1078 | X * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
1079 | X * GNU General Public License for more details. | ||
1080 | X * | ||
1081 | X * You should have received a copy of the GNU General Public License | ||
1082 | X * along with this program; if not, write to the Free Software | ||
1083 | X * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
1084 | X * | ||
1085 | X ********************************************************************/ | ||
1086 | X | ||
1087 | #include <stdio.h> | ||
1088 | #include <unistd.h> | ||
1089 | #include <fcntl.h> | ||
1090 | #include <sys/types.h> | ||
1091 | #include <sys/stat.h> | ||
1092 | #include <sys/ioctl.h> | ||
1093 | #include <sys/soundcard.h> | ||
1094 | X | ||
1095 | int main(int argc, char *argv[]) | ||
1096 | { | ||
1097 | X int fd; | ||
1098 | X | ||
1099 | X if (argc != 2) { | ||
1100 | X fprintf(stderr, "usage: msndreset <mixer device>\n"); | ||
1101 | X exit(1); | ||
1102 | X } | ||
1103 | X | ||
1104 | X if ((fd = open(argv[1], O_RDWR)) < 0) { | ||
1105 | X perror(argv[1]); | ||
1106 | X exit(1); | ||
1107 | X } | ||
1108 | X | ||
1109 | X if (ioctl(fd, SOUND_MIXER_PRIVATE1, 0) < 0) { | ||
1110 | X fprintf(stderr, "error: msnd ioctl reset failed\n"); | ||
1111 | X perror("ioctl"); | ||
1112 | X close(fd); | ||
1113 | X exit(1); | ||
1114 | X } | ||
1115 | X | ||
1116 | X close(fd); | ||
1117 | X | ||
1118 | X return 0; | ||
1119 | } | ||
1120 | SHAR_EOF | ||
1121 | $shar_touch -am 1204100698 'MultiSound.d/msndreset.c' && | ||
1122 | chmod 0664 'MultiSound.d/msndreset.c' || | ||
1123 | $echo 'restore of' 'MultiSound.d/msndreset.c' 'failed' | ||
1124 | if ( md5sum --help 2>&1 | grep 'sage: md5sum \[' ) >/dev/null 2>&1 \ | ||
1125 | && ( md5sum --version 2>&1 | grep -v 'textutils 1.12' ) >/dev/null; then | ||
1126 | md5sum -c << SHAR_EOF >/dev/null 2>&1 \ | ||
1127 | || $echo 'MultiSound.d/msndreset.c:' 'MD5 check failed' | ||
1128 | c52f876521084e8eb25e12e01dcccb8a MultiSound.d/msndreset.c | ||
1129 | SHAR_EOF | ||
1130 | else | ||
1131 | shar_count="`LC_ALL= LC_CTYPE= LANG= wc -c < 'MultiSound.d/msndreset.c'`" | ||
1132 | test 1472 -eq "$shar_count" || | ||
1133 | $echo 'MultiSound.d/msndreset.c:' 'original size' '1472,' 'current size' "$shar_count!" | ||
1134 | fi | ||
1135 | fi | ||
1136 | rm -fr _sh01426 | ||
1137 | exit 0 | ||