diff options
Diffstat (limited to 'Documentation')
27 files changed, 449 insertions, 2249 deletions
diff --git a/Documentation/DocBook/kernel-api.tmpl b/Documentation/DocBook/kernel-api.tmpl index 49c745720f47..2b5ac604948c 100644 --- a/Documentation/DocBook/kernel-api.tmpl +++ b/Documentation/DocBook/kernel-api.tmpl | |||
@@ -158,6 +158,7 @@ X!Ilib/string.c | |||
158 | !Emm/filemap.c | 158 | !Emm/filemap.c |
159 | !Emm/memory.c | 159 | !Emm/memory.c |
160 | !Emm/vmalloc.c | 160 | !Emm/vmalloc.c |
161 | !Imm/page_alloc.c | ||
161 | !Emm/mempool.c | 162 | !Emm/mempool.c |
162 | !Emm/page-writeback.c | 163 | !Emm/page-writeback.c |
163 | !Emm/truncate.c | 164 | !Emm/truncate.c |
diff --git a/Documentation/DocBook/libata.tmpl b/Documentation/DocBook/libata.tmpl index c684abf0d3b2..07a635590b36 100644 --- a/Documentation/DocBook/libata.tmpl +++ b/Documentation/DocBook/libata.tmpl | |||
@@ -14,7 +14,7 @@ | |||
14 | </authorgroup> | 14 | </authorgroup> |
15 | 15 | ||
16 | <copyright> | 16 | <copyright> |
17 | <year>2003-2005</year> | 17 | <year>2003-2006</year> |
18 | <holder>Jeff Garzik</holder> | 18 | <holder>Jeff Garzik</holder> |
19 | </copyright> | 19 | </copyright> |
20 | 20 | ||
diff --git a/Documentation/RCU/checklist.txt b/Documentation/RCU/checklist.txt index 1d50cf0c905e..f4dffadbcb00 100644 --- a/Documentation/RCU/checklist.txt +++ b/Documentation/RCU/checklist.txt | |||
@@ -221,3 +221,41 @@ over a rather long period of time, but improvements are always welcome! | |||
221 | disable irq on a given acquisition of that lock will result in | 221 | disable irq on a given acquisition of that lock will result in |
222 | deadlock as soon as the RCU callback happens to interrupt that | 222 | deadlock as soon as the RCU callback happens to interrupt that |
223 | acquisition's critical section. | 223 | acquisition's critical section. |
224 | |||
225 | 13. SRCU (srcu_read_lock(), srcu_read_unlock(), and synchronize_srcu()) | ||
226 | may only be invoked from process context. Unlike other forms of | ||
227 | RCU, it -is- permissible to block in an SRCU read-side critical | ||
228 | section (demarked by srcu_read_lock() and srcu_read_unlock()), | ||
229 | hence the "SRCU": "sleepable RCU". Please note that if you | ||
230 | don't need to sleep in read-side critical sections, you should | ||
231 | be using RCU rather than SRCU, because RCU is almost always | ||
232 | faster and easier to use than is SRCU. | ||
233 | |||
234 | Also unlike other forms of RCU, explicit initialization | ||
235 | and cleanup is required via init_srcu_struct() and | ||
236 | cleanup_srcu_struct(). These are passed a "struct srcu_struct" | ||
237 | that defines the scope of a given SRCU domain. Once initialized, | ||
238 | the srcu_struct is passed to srcu_read_lock(), srcu_read_unlock() | ||
239 | and synchronize_srcu(). A given synchronize_srcu() waits only | ||
240 | for SRCU read-side critical sections governed by srcu_read_lock() | ||
241 | and srcu_read_unlock() calls that have been passd the same | ||
242 | srcu_struct. This property is what makes sleeping read-side | ||
243 | critical sections tolerable -- a given subsystem delays only | ||
244 | its own updates, not those of other subsystems using SRCU. | ||
245 | Therefore, SRCU is less prone to OOM the system than RCU would | ||
246 | be if RCU's read-side critical sections were permitted to | ||
247 | sleep. | ||
248 | |||
249 | The ability to sleep in read-side critical sections does not | ||
250 | come for free. First, corresponding srcu_read_lock() and | ||
251 | srcu_read_unlock() calls must be passed the same srcu_struct. | ||
252 | Second, grace-period-detection overhead is amortized only | ||
253 | over those updates sharing a given srcu_struct, rather than | ||
254 | being globally amortized as they are for other forms of RCU. | ||
255 | Therefore, SRCU should be used in preference to rw_semaphore | ||
256 | only in extremely read-intensive situations, or in situations | ||
257 | requiring SRCU's read-side deadlock immunity or low read-side | ||
258 | realtime latency. | ||
259 | |||
260 | Note that, rcu_assign_pointer() and rcu_dereference() relate to | ||
261 | SRCU just as they do to other forms of RCU. | ||
diff --git a/Documentation/RCU/rcu.txt b/Documentation/RCU/rcu.txt index 02e27bf1d365..f84407cba816 100644 --- a/Documentation/RCU/rcu.txt +++ b/Documentation/RCU/rcu.txt | |||
@@ -45,7 +45,8 @@ o How can I see where RCU is currently used in the Linux kernel? | |||
45 | 45 | ||
46 | Search for "rcu_read_lock", "rcu_read_unlock", "call_rcu", | 46 | Search for "rcu_read_lock", "rcu_read_unlock", "call_rcu", |
47 | "rcu_read_lock_bh", "rcu_read_unlock_bh", "call_rcu_bh", | 47 | "rcu_read_lock_bh", "rcu_read_unlock_bh", "call_rcu_bh", |
48 | "synchronize_rcu", and "synchronize_net". | 48 | "srcu_read_lock", "srcu_read_unlock", "synchronize_rcu", |
49 | "synchronize_net", and "synchronize_srcu". | ||
49 | 50 | ||
50 | o What guidelines should I follow when writing code that uses RCU? | 51 | o What guidelines should I follow when writing code that uses RCU? |
51 | 52 | ||
diff --git a/Documentation/RCU/torture.txt b/Documentation/RCU/torture.txt index a4948591607d..25a3c3f7d378 100644 --- a/Documentation/RCU/torture.txt +++ b/Documentation/RCU/torture.txt | |||
@@ -28,6 +28,15 @@ nreaders This is the number of RCU reading threads supported. | |||
28 | To properly exercise RCU implementations with preemptible | 28 | To properly exercise RCU implementations with preemptible |
29 | read-side critical sections. | 29 | read-side critical sections. |
30 | 30 | ||
31 | nfakewriters This is the number of RCU fake writer threads to run. Fake | ||
32 | writer threads repeatedly use the synchronous "wait for | ||
33 | current readers" function of the interface selected by | ||
34 | torture_type, with a delay between calls to allow for various | ||
35 | different numbers of writers running in parallel. | ||
36 | nfakewriters defaults to 4, which provides enough parallelism | ||
37 | to trigger special cases caused by multiple writers, such as | ||
38 | the synchronize_srcu() early return optimization. | ||
39 | |||
31 | stat_interval The number of seconds between output of torture | 40 | stat_interval The number of seconds between output of torture |
32 | statistics (via printk()). Regardless of the interval, | 41 | statistics (via printk()). Regardless of the interval, |
33 | statistics are printed when the module is unloaded. | 42 | statistics are printed when the module is unloaded. |
@@ -44,9 +53,12 @@ test_no_idle_hz Whether or not to test the ability of RCU to operate in | |||
44 | a kernel that disables the scheduling-clock interrupt to | 53 | a kernel that disables the scheduling-clock interrupt to |
45 | idle CPUs. Boolean parameter, "1" to test, "0" otherwise. | 54 | idle CPUs. Boolean parameter, "1" to test, "0" otherwise. |
46 | 55 | ||
47 | torture_type The type of RCU to test: "rcu" for the rcu_read_lock() | 56 | torture_type The type of RCU to test: "rcu" for the rcu_read_lock() API, |
48 | API, "rcu_bh" for the rcu_read_lock_bh() API, and "srcu" | 57 | "rcu_sync" for rcu_read_lock() with synchronous reclamation, |
49 | for the "srcu_read_lock()" API. | 58 | "rcu_bh" for the rcu_read_lock_bh() API, "rcu_bh_sync" for |
59 | rcu_read_lock_bh() with synchronous reclamation, "srcu" for | ||
60 | the "srcu_read_lock()" API, and "sched" for the use of | ||
61 | preempt_disable() together with synchronize_sched(). | ||
50 | 62 | ||
51 | verbose Enable debug printk()s. Default is disabled. | 63 | verbose Enable debug printk()s. Default is disabled. |
52 | 64 | ||
@@ -118,6 +130,21 @@ o "Free-Block Circulation": Shows the number of torture structures | |||
118 | as it is only incremented if a torture structure's counter | 130 | as it is only incremented if a torture structure's counter |
119 | somehow gets incremented farther than it should. | 131 | somehow gets incremented farther than it should. |
120 | 132 | ||
133 | Different implementations of RCU can provide implementation-specific | ||
134 | additional information. For example, SRCU provides the following: | ||
135 | |||
136 | srcu-torture: rtc: f8cf46a8 ver: 355 tfle: 0 rta: 356 rtaf: 0 rtf: 346 rtmbe: 0 | ||
137 | srcu-torture: Reader Pipe: 559738 939 0 0 0 0 0 0 0 0 0 | ||
138 | srcu-torture: Reader Batch: 560434 243 0 0 0 0 0 0 0 0 | ||
139 | srcu-torture: Free-Block Circulation: 355 354 353 352 351 350 349 348 347 346 0 | ||
140 | srcu-torture: per-CPU(idx=1): 0(0,1) 1(0,1) 2(0,0) 3(0,1) | ||
141 | |||
142 | The first four lines are similar to those for RCU. The last line shows | ||
143 | the per-CPU counter state. The numbers in parentheses are the values | ||
144 | of the "old" and "current" counters for the corresponding CPU. The | ||
145 | "idx" value maps the "old" and "current" values to the underlying array, | ||
146 | and is useful for debugging. | ||
147 | |||
121 | 148 | ||
122 | USAGE | 149 | USAGE |
123 | 150 | ||
diff --git a/Documentation/RCU/whatisRCU.txt b/Documentation/RCU/whatisRCU.txt index 820fee236967..e0d6d99b8f9b 100644 --- a/Documentation/RCU/whatisRCU.txt +++ b/Documentation/RCU/whatisRCU.txt | |||
@@ -778,6 +778,8 @@ Markers for RCU read-side critical sections: | |||
778 | rcu_read_unlock | 778 | rcu_read_unlock |
779 | rcu_read_lock_bh | 779 | rcu_read_lock_bh |
780 | rcu_read_unlock_bh | 780 | rcu_read_unlock_bh |
781 | srcu_read_lock | ||
782 | srcu_read_unlock | ||
781 | 783 | ||
782 | RCU pointer/list traversal: | 784 | RCU pointer/list traversal: |
783 | 785 | ||
@@ -804,6 +806,7 @@ RCU grace period: | |||
804 | synchronize_net | 806 | synchronize_net |
805 | synchronize_sched | 807 | synchronize_sched |
806 | synchronize_rcu | 808 | synchronize_rcu |
809 | synchronize_srcu | ||
807 | call_rcu | 810 | call_rcu |
808 | call_rcu_bh | 811 | call_rcu_bh |
809 | 812 | ||
diff --git a/Documentation/ecryptfs.txt b/Documentation/ecryptfs.txt new file mode 100644 index 000000000000..01d8a08351ac --- /dev/null +++ b/Documentation/ecryptfs.txt | |||
@@ -0,0 +1,77 @@ | |||
1 | eCryptfs: A stacked cryptographic filesystem for Linux | ||
2 | |||
3 | eCryptfs is free software. Please see the file COPYING for details. | ||
4 | For documentation, please see the files in the doc/ subdirectory. For | ||
5 | building and installation instructions please see the INSTALL file. | ||
6 | |||
7 | Maintainer: Phillip Hellewell | ||
8 | Lead developer: Michael A. Halcrow <mhalcrow@us.ibm.com> | ||
9 | Developers: Michael C. Thompson | ||
10 | Kent Yoder | ||
11 | Web Site: http://ecryptfs.sf.net | ||
12 | |||
13 | This software is currently undergoing development. Make sure to | ||
14 | maintain a backup copy of any data you write into eCryptfs. | ||
15 | |||
16 | eCryptfs requires the userspace tools downloadable from the | ||
17 | SourceForge site: | ||
18 | |||
19 | http://sourceforge.net/projects/ecryptfs/ | ||
20 | |||
21 | Userspace requirements include: | ||
22 | - David Howells' userspace keyring headers and libraries (version | ||
23 | 1.0 or higher), obtainable from | ||
24 | http://people.redhat.com/~dhowells/keyutils/ | ||
25 | - Libgcrypt | ||
26 | |||
27 | |||
28 | NOTES | ||
29 | |||
30 | In the beta/experimental releases of eCryptfs, when you upgrade | ||
31 | eCryptfs, you should copy the files to an unencrypted location and | ||
32 | then copy the files back into the new eCryptfs mount to migrate the | ||
33 | files. | ||
34 | |||
35 | |||
36 | MOUNT-WIDE PASSPHRASE | ||
37 | |||
38 | Create a new directory into which eCryptfs will write its encrypted | ||
39 | files (i.e., /root/crypt). Then, create the mount point directory | ||
40 | (i.e., /mnt/crypt). Now it's time to mount eCryptfs: | ||
41 | |||
42 | mount -t ecryptfs /root/crypt /mnt/crypt | ||
43 | |||
44 | You should be prompted for a passphrase and a salt (the salt may be | ||
45 | blank). | ||
46 | |||
47 | Try writing a new file: | ||
48 | |||
49 | echo "Hello, World" > /mnt/crypt/hello.txt | ||
50 | |||
51 | The operation will complete. Notice that there is a new file in | ||
52 | /root/crypt that is at least 12288 bytes in size (depending on your | ||
53 | host page size). This is the encrypted underlying file for what you | ||
54 | just wrote. To test reading, from start to finish, you need to clear | ||
55 | the user session keyring: | ||
56 | |||
57 | keyctl clear @u | ||
58 | |||
59 | Then umount /mnt/crypt and mount again per the instructions given | ||
60 | above. | ||
61 | |||
62 | cat /mnt/crypt/hello.txt | ||
63 | |||
64 | |||
65 | NOTES | ||
66 | |||
67 | eCryptfs version 0.1 should only be mounted on (1) empty directories | ||
68 | or (2) directories containing files only created by eCryptfs. If you | ||
69 | mount a directory that has pre-existing files not created by eCryptfs, | ||
70 | then behavior is undefined. Do not run eCryptfs in higher verbosity | ||
71 | levels unless you are doing so for the sole purpose of debugging or | ||
72 | development, since secret values will be written out to the system log | ||
73 | in that case. | ||
74 | |||
75 | |||
76 | Mike Halcrow | ||
77 | mhalcrow@us.ibm.com | ||
diff --git a/Documentation/feature-removal-schedule.txt b/Documentation/feature-removal-schedule.txt index 42b95e0ad558..24f3c63b3017 100644 --- a/Documentation/feature-removal-schedule.txt +++ b/Documentation/feature-removal-schedule.txt | |||
@@ -29,14 +29,6 @@ Who: Adrian Bunk <bunk@stusta.de> | |||
29 | 29 | ||
30 | --------------------------- | 30 | --------------------------- |
31 | 31 | ||
32 | What: drivers that were depending on OBSOLETE_OSS_DRIVER | ||
33 | (config options already removed) | ||
34 | When: before 2.6.19 | ||
35 | Why: OSS drivers with ALSA replacements | ||
36 | Who: Adrian Bunk <bunk@stusta.de> | ||
37 | |||
38 | --------------------------- | ||
39 | |||
40 | What: raw1394: requests of type RAW1394_REQ_ISO_SEND, RAW1394_REQ_ISO_LISTEN | 32 | What: raw1394: requests of type RAW1394_REQ_ISO_SEND, RAW1394_REQ_ISO_LISTEN |
41 | When: November 2006 | 33 | When: November 2006 |
42 | Why: Deprecated in favour of the new ioctl-based rawiso interface, which is | 34 | Why: Deprecated in favour of the new ioctl-based rawiso interface, which is |
diff --git a/Documentation/filesystems/gfs2.txt b/Documentation/filesystems/gfs2.txt new file mode 100644 index 000000000000..593004b6bbab --- /dev/null +++ b/Documentation/filesystems/gfs2.txt | |||
@@ -0,0 +1,43 @@ | |||
1 | Global File System | ||
2 | ------------------ | ||
3 | |||
4 | http://sources.redhat.com/cluster/ | ||
5 | |||
6 | GFS is a cluster file system. It allows a cluster of computers to | ||
7 | simultaneously use a block device that is shared between them (with FC, | ||
8 | iSCSI, NBD, etc). GFS reads and writes to the block device like a local | ||
9 | file system, but also uses a lock module to allow the computers coordinate | ||
10 | their I/O so file system consistency is maintained. One of the nifty | ||
11 | features of GFS is perfect consistency -- changes made to the file system | ||
12 | on one machine show up immediately on all other machines in the cluster. | ||
13 | |||
14 | GFS uses interchangable inter-node locking mechanisms. Different lock | ||
15 | modules can plug into GFS and each file system selects the appropriate | ||
16 | lock module at mount time. Lock modules include: | ||
17 | |||
18 | lock_nolock -- allows gfs to be used as a local file system | ||
19 | |||
20 | lock_dlm -- uses a distributed lock manager (dlm) for inter-node locking | ||
21 | The dlm is found at linux/fs/dlm/ | ||
22 | |||
23 | In addition to interfacing with an external locking manager, a gfs lock | ||
24 | module is responsible for interacting with external cluster management | ||
25 | systems. Lock_dlm depends on user space cluster management systems found | ||
26 | at the URL above. | ||
27 | |||
28 | To use gfs as a local file system, no external clustering systems are | ||
29 | needed, simply: | ||
30 | |||
31 | $ mkfs -t gfs2 -p lock_nolock -j 1 /dev/block_device | ||
32 | $ mount -t gfs2 /dev/block_device /dir | ||
33 | |||
34 | GFS2 is not on-disk compatible with previous versions of GFS. | ||
35 | |||
36 | The following man pages can be found at the URL above: | ||
37 | gfs2_fsck to repair a filesystem | ||
38 | gfs2_grow to expand a filesystem online | ||
39 | gfs2_jadd to add journals to a filesystem online | ||
40 | gfs2_tool to manipulate, examine and tune a filesystem | ||
41 | gfs2_quota to examine and change quota values in a filesystem | ||
42 | mount.gfs2 to help mount(8) mount a filesystem | ||
43 | mkfs.gfs2 to make a filesystem | ||
diff --git a/Documentation/kbuild/kconfig-language.txt b/Documentation/kbuild/kconfig-language.txt index 7f34778dd23b..125093c3ef76 100644 --- a/Documentation/kbuild/kconfig-language.txt +++ b/Documentation/kbuild/kconfig-language.txt | |||
@@ -1,7 +1,7 @@ | |||
1 | Introduction | 1 | Introduction |
2 | ------------ | 2 | ------------ |
3 | 3 | ||
4 | The configuration database is collection of configuration options | 4 | The configuration database is a collection of configuration options |
5 | organized in a tree structure: | 5 | organized in a tree structure: |
6 | 6 | ||
7 | +- Code maturity level options | 7 | +- Code maturity level options |
diff --git a/Documentation/kbuild/makefiles.txt b/Documentation/kbuild/makefiles.txt index e2cbd59cf2d0..50f4eddf899c 100644 --- a/Documentation/kbuild/makefiles.txt +++ b/Documentation/kbuild/makefiles.txt | |||
@@ -390,7 +390,7 @@ more details, with real examples. | |||
390 | The kernel may be built with several different versions of | 390 | The kernel may be built with several different versions of |
391 | $(CC), each supporting a unique set of features and options. | 391 | $(CC), each supporting a unique set of features and options. |
392 | kbuild provide basic support to check for valid options for $(CC). | 392 | kbuild provide basic support to check for valid options for $(CC). |
393 | $(CC) is useally the gcc compiler, but other alternatives are | 393 | $(CC) is usually the gcc compiler, but other alternatives are |
394 | available. | 394 | available. |
395 | 395 | ||
396 | as-option | 396 | as-option |
diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt index 12b3b24bfd2f..ff571f9298e0 100644 --- a/Documentation/kernel-parameters.txt +++ b/Documentation/kernel-parameters.txt | |||
@@ -289,9 +289,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
289 | 289 | ||
290 | autotest [IA64] | 290 | autotest [IA64] |
291 | 291 | ||
292 | awe= [HW,OSS] AWE32/SB32/AWE64 wave table synth | ||
293 | Format: <io>,<memsize>,<isapnp> | ||
294 | |||
295 | aztcd= [HW,CD] Aztech CD268 CDROM driver | 292 | aztcd= [HW,CD] Aztech CD268 CDROM driver |
296 | Format: <io>,0x79 (?) | 293 | Format: <io>,0x79 (?) |
297 | 294 | ||
@@ -536,10 +533,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
536 | Default value is 0. | 533 | Default value is 0. |
537 | Value can be changed at runtime via /selinux/enforce. | 534 | Value can be changed at runtime via /selinux/enforce. |
538 | 535 | ||
539 | es1370= [HW,OSS] | ||
540 | Format: <lineout>[,<micbias>] | ||
541 | See also header of sound/oss/es1370.c. | ||
542 | |||
543 | es1371= [HW,OSS] | 536 | es1371= [HW,OSS] |
544 | Format: <spdif>,[<nomix>,[<amplifier>]] | 537 | Format: <spdif>,[<nomix>,[<amplifier>]] |
545 | See also header of sound/oss/es1371.c. | 538 | See also header of sound/oss/es1371.c. |
@@ -580,9 +573,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
580 | gscd= [HW,CD] | 573 | gscd= [HW,CD] |
581 | Format: <io> | 574 | Format: <io> |
582 | 575 | ||
583 | gus= [HW,OSS] | ||
584 | Format: <io>,<irq>,<dma>,<dma16> | ||
585 | |||
586 | gvp11= [HW,SCSI] | 576 | gvp11= [HW,SCSI] |
587 | 577 | ||
588 | hashdist= [KNL,NUMA] Large hashes allocated during boot | 578 | hashdist= [KNL,NUMA] Large hashes allocated during boot |
@@ -841,12 +831,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
841 | (machvec) in a generic kernel. | 831 | (machvec) in a generic kernel. |
842 | Example: machvec=hpzx1_swiotlb | 832 | Example: machvec=hpzx1_swiotlb |
843 | 833 | ||
844 | mad16= [HW,OSS] Format: | ||
845 | <io>,<irq>,<dma>,<dma16>,<mpu_io>,<mpu_irq>,<joystick> | ||
846 | |||
847 | maui= [HW,OSS] | ||
848 | Format: <io>,<irq> | ||
849 | |||
850 | max_loop= [LOOP] Maximum number of loopback devices that can | 834 | max_loop= [LOOP] Maximum number of loopback devices that can |
851 | be mounted | 835 | be mounted |
852 | Format: <1-256> | 836 | Format: <1-256> |
@@ -1114,9 +1098,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1114 | opl3= [HW,OSS] | 1098 | opl3= [HW,OSS] |
1115 | Format: <io> | 1099 | Format: <io> |
1116 | 1100 | ||
1117 | opl3sa= [HW,OSS] | ||
1118 | Format: <io>,<irq>,<dma>,<dma2>,<mpu_io>,<mpu_irq> | ||
1119 | |||
1120 | opl3sa2= [HW,OSS] Format: | 1101 | opl3sa2= [HW,OSS] Format: |
1121 | <io>,<irq>,<dma>,<dma2>,<mss_io>,<mpu_io>,<ymode>,<loopback>[,<isapnp>,<multiple] | 1102 | <io>,<irq>,<dma>,<dma2>,<mss_io>,<mpu_io>,<ymode>,<loopback>[,<isapnp>,<multiple] |
1122 | 1103 | ||
@@ -1357,10 +1338,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1357 | rcu.qlowmark= [KNL,BOOT] Set threshold of queued | 1338 | rcu.qlowmark= [KNL,BOOT] Set threshold of queued |
1358 | RCU callbacks below which batch limiting is re-enabled. | 1339 | RCU callbacks below which batch limiting is re-enabled. |
1359 | 1340 | ||
1360 | rcu.rsinterval= [KNL,BOOT,SMP] Set the number of additional | ||
1361 | RCU callbacks to queued before forcing reschedule | ||
1362 | on all cpus. | ||
1363 | |||
1364 | rdinit= [KNL] | 1341 | rdinit= [KNL] |
1365 | Format: <full_path> | 1342 | Format: <full_path> |
1366 | Run specified binary instead of /init from the ramdisk, | 1343 | Run specified binary instead of /init from the ramdisk, |
@@ -1455,9 +1432,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1455 | 1432 | ||
1456 | sg_def_reserved_size= [SCSI] | 1433 | sg_def_reserved_size= [SCSI] |
1457 | 1434 | ||
1458 | sgalaxy= [HW,OSS] | ||
1459 | Format: <io>,<irq>,<dma>,<dma2>,<sgbase> | ||
1460 | |||
1461 | shapers= [NET] | 1435 | shapers= [NET] |
1462 | Maximal number of shapers. | 1436 | Maximal number of shapers. |
1463 | 1437 | ||
@@ -1598,9 +1572,6 @@ and is between 256 and 4096 characters. It is defined in the file | |||
1598 | 1572 | ||
1599 | snd-ymfpci= [HW,ALSA] | 1573 | snd-ymfpci= [HW,ALSA] |
1600 | 1574 | ||
1601 | sonicvibes= [HW,OSS] | ||
1602 | Format: <reverb> | ||
1603 | |||
1604 | sonycd535= [HW,CD] | 1575 | sonycd535= [HW,CD] |
1605 | Format: <io>[,<irq>] | 1576 | Format: <io>[,<irq>] |
1606 | 1577 | ||
diff --git a/Documentation/powerpc/booting-without-of.txt b/Documentation/powerpc/booting-without-of.txt index 1ccc8a515b44..27b457c09729 100644 --- a/Documentation/powerpc/booting-without-of.txt +++ b/Documentation/powerpc/booting-without-of.txt | |||
@@ -1440,6 +1440,258 @@ platforms are moved over to use the flattened-device-tree model. | |||
1440 | descriptor-types-mask = <012b0ebf>; | 1440 | descriptor-types-mask = <012b0ebf>; |
1441 | }; | 1441 | }; |
1442 | 1442 | ||
1443 | h) Board Control and Status (BCSR) | ||
1444 | |||
1445 | Required properties: | ||
1446 | |||
1447 | - device_type : Should be "board-control" | ||
1448 | - reg : Offset and length of the register set for the device | ||
1449 | |||
1450 | Example: | ||
1451 | |||
1452 | bcsr@f8000000 { | ||
1453 | device_type = "board-control"; | ||
1454 | reg = <f8000000 8000>; | ||
1455 | }; | ||
1456 | |||
1457 | i) Freescale QUICC Engine module (QE) | ||
1458 | This represents qe module that is installed on PowerQUICC II Pro. | ||
1459 | Hopefully it will merge backward compatibility with CPM/CPM2. | ||
1460 | Basically, it is a bus of devices, that could act more or less | ||
1461 | as a complete entity (UCC, USB etc ). All of them should be siblings on | ||
1462 | the "root" qe node, using the common properties from there. | ||
1463 | The description below applies to the the qe of MPC8360 and | ||
1464 | more nodes and properties would be extended in the future. | ||
1465 | |||
1466 | i) Root QE device | ||
1467 | |||
1468 | Required properties: | ||
1469 | - device_type : should be "qe"; | ||
1470 | - model : precise model of the QE, Can be "QE", "CPM", or "CPM2" | ||
1471 | - reg : offset and length of the device registers. | ||
1472 | - bus-frequency : the clock frequency for QUICC Engine. | ||
1473 | |||
1474 | Recommended properties | ||
1475 | - brg-frequency : the internal clock source frequency for baud-rate | ||
1476 | generators in Hz. | ||
1477 | |||
1478 | Example: | ||
1479 | qe@e0100000 { | ||
1480 | #address-cells = <1>; | ||
1481 | #size-cells = <1>; | ||
1482 | #interrupt-cells = <2>; | ||
1483 | device_type = "qe"; | ||
1484 | model = "QE"; | ||
1485 | ranges = <0 e0100000 00100000>; | ||
1486 | reg = <e0100000 480>; | ||
1487 | brg-frequency = <0>; | ||
1488 | bus-frequency = <179A7B00>; | ||
1489 | } | ||
1490 | |||
1491 | |||
1492 | ii) SPI (Serial Peripheral Interface) | ||
1493 | |||
1494 | Required properties: | ||
1495 | - device_type : should be "spi". | ||
1496 | - compatible : should be "fsl_spi". | ||
1497 | - mode : the spi operation mode, it can be "cpu" or "qe". | ||
1498 | - reg : Offset and length of the register set for the device | ||
1499 | - interrupts : <a b> where a is the interrupt number and b is a | ||
1500 | field that represents an encoding of the sense and level | ||
1501 | information for the interrupt. This should be encoded based on | ||
1502 | the information in section 2) depending on the type of interrupt | ||
1503 | controller you have. | ||
1504 | - interrupt-parent : the phandle for the interrupt controller that | ||
1505 | services interrupts for this device. | ||
1506 | |||
1507 | Example: | ||
1508 | spi@4c0 { | ||
1509 | device_type = "spi"; | ||
1510 | compatible = "fsl_spi"; | ||
1511 | reg = <4c0 40>; | ||
1512 | interrupts = <82 0>; | ||
1513 | interrupt-parent = <700>; | ||
1514 | mode = "cpu"; | ||
1515 | }; | ||
1516 | |||
1517 | |||
1518 | iii) USB (Universal Serial Bus Controller) | ||
1519 | |||
1520 | Required properties: | ||
1521 | - device_type : should be "usb". | ||
1522 | - compatible : could be "qe_udc" or "fhci-hcd". | ||
1523 | - mode : the could be "host" or "slave". | ||
1524 | - reg : Offset and length of the register set for the device | ||
1525 | - interrupts : <a b> where a is the interrupt number and b is a | ||
1526 | field that represents an encoding of the sense and level | ||
1527 | information for the interrupt. This should be encoded based on | ||
1528 | the information in section 2) depending on the type of interrupt | ||
1529 | controller you have. | ||
1530 | - interrupt-parent : the phandle for the interrupt controller that | ||
1531 | services interrupts for this device. | ||
1532 | |||
1533 | Example(slave): | ||
1534 | usb@6c0 { | ||
1535 | device_type = "usb"; | ||
1536 | compatible = "qe_udc"; | ||
1537 | reg = <6c0 40>; | ||
1538 | interrupts = <8b 0>; | ||
1539 | interrupt-parent = <700>; | ||
1540 | mode = "slave"; | ||
1541 | }; | ||
1542 | |||
1543 | |||
1544 | iv) UCC (Unified Communications Controllers) | ||
1545 | |||
1546 | Required properties: | ||
1547 | - device_type : should be "network", "hldc", "uart", "transparent" | ||
1548 | "bisync" or "atm". | ||
1549 | - compatible : could be "ucc_geth" or "fsl_atm" and so on. | ||
1550 | - model : should be "UCC". | ||
1551 | - device-id : the ucc number(1-8), corresponding to UCCx in UM. | ||
1552 | - reg : Offset and length of the register set for the device | ||
1553 | - interrupts : <a b> where a is the interrupt number and b is a | ||
1554 | field that represents an encoding of the sense and level | ||
1555 | information for the interrupt. This should be encoded based on | ||
1556 | the information in section 2) depending on the type of interrupt | ||
1557 | controller you have. | ||
1558 | - interrupt-parent : the phandle for the interrupt controller that | ||
1559 | services interrupts for this device. | ||
1560 | - pio-handle : The phandle for the Parallel I/O port configuration. | ||
1561 | - rx-clock : represents the UCC receive clock source. | ||
1562 | 0x00 : clock source is disabled; | ||
1563 | 0x1~0x10 : clock source is BRG1~BRG16 respectively; | ||
1564 | 0x11~0x28: clock source is QE_CLK1~QE_CLK24 respectively. | ||
1565 | - tx-clock: represents the UCC transmit clock source; | ||
1566 | 0x00 : clock source is disabled; | ||
1567 | 0x1~0x10 : clock source is BRG1~BRG16 respectively; | ||
1568 | 0x11~0x28: clock source is QE_CLK1~QE_CLK24 respectively. | ||
1569 | |||
1570 | Required properties for network device_type: | ||
1571 | - mac-address : list of bytes representing the ethernet address. | ||
1572 | - phy-handle : The phandle for the PHY connected to this controller. | ||
1573 | |||
1574 | Example: | ||
1575 | ucc@2000 { | ||
1576 | device_type = "network"; | ||
1577 | compatible = "ucc_geth"; | ||
1578 | model = "UCC"; | ||
1579 | device-id = <1>; | ||
1580 | reg = <2000 200>; | ||
1581 | interrupts = <a0 0>; | ||
1582 | interrupt-parent = <700>; | ||
1583 | mac-address = [ 00 04 9f 00 23 23 ]; | ||
1584 | rx-clock = "none"; | ||
1585 | tx-clock = "clk9"; | ||
1586 | phy-handle = <212000>; | ||
1587 | pio-handle = <140001>; | ||
1588 | }; | ||
1589 | |||
1590 | |||
1591 | v) Parallel I/O Ports | ||
1592 | |||
1593 | This node configures Parallel I/O ports for CPUs with QE support. | ||
1594 | The node should reside in the "soc" node of the tree. For each | ||
1595 | device that using parallel I/O ports, a child node should be created. | ||
1596 | See the definition of the Pin configuration nodes below for more | ||
1597 | information. | ||
1598 | |||
1599 | Required properties: | ||
1600 | - device_type : should be "par_io". | ||
1601 | - reg : offset to the register set and its length. | ||
1602 | - num-ports : number of Parallel I/O ports | ||
1603 | |||
1604 | Example: | ||
1605 | par_io@1400 { | ||
1606 | reg = <1400 100>; | ||
1607 | #address-cells = <1>; | ||
1608 | #size-cells = <0>; | ||
1609 | device_type = "par_io"; | ||
1610 | num-ports = <7>; | ||
1611 | ucc_pin@01 { | ||
1612 | ...... | ||
1613 | }; | ||
1614 | |||
1615 | |||
1616 | vi) Pin configuration nodes | ||
1617 | |||
1618 | Required properties: | ||
1619 | - linux,phandle : phandle of this node; likely referenced by a QE | ||
1620 | device. | ||
1621 | - pio-map : array of pin configurations. Each pin is defined by 6 | ||
1622 | integers. The six numbers are respectively: port, pin, dir, | ||
1623 | open_drain, assignment, has_irq. | ||
1624 | - port : port number of the pin; 0-6 represent port A-G in UM. | ||
1625 | - pin : pin number in the port. | ||
1626 | - dir : direction of the pin, should encode as follows: | ||
1627 | |||
1628 | 0 = The pin is disabled | ||
1629 | 1 = The pin is an output | ||
1630 | 2 = The pin is an input | ||
1631 | 3 = The pin is I/O | ||
1632 | |||
1633 | - open_drain : indicates the pin is normal or wired-OR: | ||
1634 | |||
1635 | 0 = The pin is actively driven as an output | ||
1636 | 1 = The pin is an open-drain driver. As an output, the pin is | ||
1637 | driven active-low, otherwise it is three-stated. | ||
1638 | |||
1639 | - assignment : function number of the pin according to the Pin Assignment | ||
1640 | tables in User Manual. Each pin can have up to 4 possible functions in | ||
1641 | QE and two options for CPM. | ||
1642 | - has_irq : indicates if the pin is used as source of exteral | ||
1643 | interrupts. | ||
1644 | |||
1645 | Example: | ||
1646 | ucc_pin@01 { | ||
1647 | linux,phandle = <140001>; | ||
1648 | pio-map = < | ||
1649 | /* port pin dir open_drain assignment has_irq */ | ||
1650 | 0 3 1 0 1 0 /* TxD0 */ | ||
1651 | 0 4 1 0 1 0 /* TxD1 */ | ||
1652 | 0 5 1 0 1 0 /* TxD2 */ | ||
1653 | 0 6 1 0 1 0 /* TxD3 */ | ||
1654 | 1 6 1 0 3 0 /* TxD4 */ | ||
1655 | 1 7 1 0 1 0 /* TxD5 */ | ||
1656 | 1 9 1 0 2 0 /* TxD6 */ | ||
1657 | 1 a 1 0 2 0 /* TxD7 */ | ||
1658 | 0 9 2 0 1 0 /* RxD0 */ | ||
1659 | 0 a 2 0 1 0 /* RxD1 */ | ||
1660 | 0 b 2 0 1 0 /* RxD2 */ | ||
1661 | 0 c 2 0 1 0 /* RxD3 */ | ||
1662 | 0 d 2 0 1 0 /* RxD4 */ | ||
1663 | 1 1 2 0 2 0 /* RxD5 */ | ||
1664 | 1 0 2 0 2 0 /* RxD6 */ | ||
1665 | 1 4 2 0 2 0 /* RxD7 */ | ||
1666 | 0 7 1 0 1 0 /* TX_EN */ | ||
1667 | 0 8 1 0 1 0 /* TX_ER */ | ||
1668 | 0 f 2 0 1 0 /* RX_DV */ | ||
1669 | 0 10 2 0 1 0 /* RX_ER */ | ||
1670 | 0 0 2 0 1 0 /* RX_CLK */ | ||
1671 | 2 9 1 0 3 0 /* GTX_CLK - CLK10 */ | ||
1672 | 2 8 2 0 1 0>; /* GTX125 - CLK9 */ | ||
1673 | }; | ||
1674 | |||
1675 | vii) Multi-User RAM (MURAM) | ||
1676 | |||
1677 | Required properties: | ||
1678 | - device_type : should be "muram". | ||
1679 | - mode : the could be "host" or "slave". | ||
1680 | - ranges : Should be defined as specified in 1) to describe the | ||
1681 | translation of MURAM addresses. | ||
1682 | - data-only : sub-node which defines the address area under MURAM | ||
1683 | bus that can be allocated as data/parameter | ||
1684 | |||
1685 | Example: | ||
1686 | |||
1687 | muram@10000 { | ||
1688 | device_type = "muram"; | ||
1689 | ranges = <0 00010000 0000c000>; | ||
1690 | |||
1691 | data-only@0{ | ||
1692 | reg = <0 c000>; | ||
1693 | }; | ||
1694 | }; | ||
1443 | 1695 | ||
1444 | More devices will be defined as this spec matures. | 1696 | More devices will be defined as this spec matures. |
1445 | 1697 | ||
diff --git a/Documentation/sound/oss/AWE32 b/Documentation/sound/oss/AWE32 deleted file mode 100644 index b5908a66ff55..000000000000 --- a/Documentation/sound/oss/AWE32 +++ /dev/null | |||
@@ -1,76 +0,0 @@ | |||
1 | Installing and using Creative AWE midi sound under Linux. | ||
2 | |||
3 | This documentation is devoted to the Creative Sound Blaster AWE32, AWE64 and | ||
4 | SB32. | ||
5 | |||
6 | 1) Make sure you have an ORIGINAL Creative SB32, AWE32 or AWE64 card. This | ||
7 | is important, because the driver works only with real Creative cards. | ||
8 | |||
9 | 2) The first thing you need to do is re-compile your kernel with support for | ||
10 | your sound card. Run your favourite tool to configure the kernel and when | ||
11 | you get to the "Sound" menu you should enable support for the following: | ||
12 | |||
13 | Sound card support, | ||
14 | OSS sound modules, | ||
15 | 100% Sound Blaster compatibles (SB16/32/64, ESS, Jazz16) support, | ||
16 | AWE32 synth | ||
17 | |||
18 | If your card is "Plug and Play" you will also need to enable these two | ||
19 | options, found under the "Plug and Play configuration" menu: | ||
20 | |||
21 | Plug and Play support | ||
22 | ISA Plug and Play support | ||
23 | |||
24 | Now compile and install the kernel in normal fashion. If you don't know | ||
25 | how to do this you can find instructions for this in the README file | ||
26 | located in the root directory of the kernel source. | ||
27 | |||
28 | 3) Before you can start playing midi files you will have to load a sound | ||
29 | bank file. The utility needed for doing this is called "sfxload", and it | ||
30 | is one of the utilities found in a package called "awesfx". If this | ||
31 | package is not available in your distribution you can download the AWE | ||
32 | snapshot from Creative Labs Open Source website: | ||
33 | |||
34 | http://www.opensource.creative.com/snapshot.html | ||
35 | |||
36 | Once you have unpacked the AWE snapshot you will see a "awesfx" | ||
37 | directory. Follow the instructions in awesfx/docs/INSTALL to install the | ||
38 | utilities in this package. After doing this, sfxload should be installed | ||
39 | as: | ||
40 | |||
41 | /usr/local/bin/sfxload | ||
42 | |||
43 | To enable AWE general midi synthesis you should also get the sound bank | ||
44 | file for general midi from: | ||
45 | |||
46 | http://members.xoom.com/yar/synthgm.sbk.gz | ||
47 | |||
48 | Copy it to a directory of your choice, and unpack it there. | ||
49 | |||
50 | 4) Edit /etc/modprobe.conf, and insert the following lines at the end of the | ||
51 | file: | ||
52 | |||
53 | alias sound-slot-0 sb | ||
54 | alias sound-service-0-1 awe_wave | ||
55 | install awe_wave /sbin/modprobe --first-time -i awe_wave && /usr/local/bin/sfxload PATH_TO_SOUND_BANK_FILE | ||
56 | |||
57 | You will of course have to change "PATH_TO_SOUND_BANK_FILE" to the full | ||
58 | path of the sound bank file. That will enable the Sound Blaster and AWE | ||
59 | wave synthesis. To play midi files you should get one of these programs if | ||
60 | you don't already have them: | ||
61 | |||
62 | Playmidi: http://playmidi.openprojects.net | ||
63 | |||
64 | AWEMidi Player (drvmidi) Included in the previously mentioned AWE | ||
65 | snapshot. | ||
66 | |||
67 | You will probably have to pass the "-e" switch to playmidi to have it use | ||
68 | your midi device. drvmidi should work without switches. | ||
69 | |||
70 | If something goes wrong please e-mail me. All comments and suggestions are | ||
71 | welcome. | ||
72 | |||
73 | Yaroslav Rosomakho (alons55@dialup.ptt.ru) | ||
74 | http://www.yar.opennet.ru | ||
75 | |||
76 | Last Updated: Feb 3 2001 | ||
diff --git a/Documentation/sound/oss/CMI8338 b/Documentation/sound/oss/CMI8338 deleted file mode 100644 index 387d058c3f95..000000000000 --- a/Documentation/sound/oss/CMI8338 +++ /dev/null | |||
@@ -1,85 +0,0 @@ | |||
1 | Audio driver for CM8338/CM8738 chips by Chen-Li Tien | ||
2 | |||
3 | |||
4 | HARDWARE SUPPORTED | ||
5 | ================================================================================ | ||
6 | C-Media CMI8338 | ||
7 | C-Media CMI8738 | ||
8 | On-board C-Media chips | ||
9 | |||
10 | |||
11 | STEPS TO BUILD DRIVER | ||
12 | ================================================================================ | ||
13 | |||
14 | 1. Backup the Config.in and Makefile in the sound driver directory | ||
15 | (/usr/src/linux/driver/sound). | ||
16 | The Configure.help provide help when you config driver in step | ||
17 | 4, please backup the original one (/usr/src/linux/Document) and | ||
18 | copy this file. | ||
19 | The cmpci is document for the driver in detail, please copy it | ||
20 | to /usr/src/linux/Document/sound so you can refer it. Backup if | ||
21 | there is already one. | ||
22 | |||
23 | 2. Extract the tar file by 'tar xvzf cmpci-xx.tar.gz' in the above | ||
24 | directory. | ||
25 | |||
26 | 3. Change directory to /usr/src/linux | ||
27 | |||
28 | 4. Config cm8338 driver by 'make menuconfig', 'make config' or | ||
29 | 'make xconfig' command. | ||
30 | |||
31 | 5. Please select Sound Card (CONFIG_SOUND=m) support and CMPCI | ||
32 | driver (CONFIG_SOUND_CMPCI=m) as modules. Resident mode not tested. | ||
33 | For driver option, please refer 'DRIVER PARAMETER' | ||
34 | |||
35 | 6. Compile the kernel if necessary. | ||
36 | |||
37 | 7. Compile the modules by 'make modules'. | ||
38 | |||
39 | 8. Install the modules by 'make modules_install' | ||
40 | |||
41 | |||
42 | INSTALL DRIVER | ||
43 | ================================================================================ | ||
44 | |||
45 | 1. Before first time to run the driver, create module dependency by | ||
46 | 'depmod -a' | ||
47 | |||
48 | 2. To install the driver manually, enter 'modprobe cmpci'. | ||
49 | |||
50 | 3. Driver installation for various distributions: | ||
51 | |||
52 | a. Slackware 4.0 | ||
53 | Add the 'modprobe cmpci' command in your /etc/rc.d/rc.modules | ||
54 | file.so you can start the driver automatically each time booting. | ||
55 | |||
56 | b. Caldera OpenLinux 2.2 | ||
57 | Use LISA to load the cmpci module. | ||
58 | |||
59 | c. RedHat 6.0 and S.u.S.E. 6.1 | ||
60 | Add following command in /etc/conf.modules: | ||
61 | |||
62 | alias sound cmpci | ||
63 | |||
64 | also visit http://www.cmedia.com.tw for installation instruction. | ||
65 | |||
66 | DRIVER PARAMETER | ||
67 | ================================================================================ | ||
68 | |||
69 | Some functions for the cm8738 can be configured in Kernel Configuration | ||
70 | or modules parameters. Set these parameters to 1 to enable. | ||
71 | |||
72 | mpuio: I/O ports base for MPU-401, 0 if disabled. | ||
73 | fmio: I/O ports base for OPL-3, 0 if disabled. | ||
74 | spdif_inverse:Inverse the S/PDIF-in signal, this depends on your | ||
75 | CD-ROM or DVD-ROM. | ||
76 | spdif_loop: Enable S/PDIF loop, this route S/PDIF-in to S/PDIF-out | ||
77 | directly. | ||
78 | speakers: Number of speakers used. | ||
79 | use_line_as_rear:Enable this if you want to use line-in as | ||
80 | rear-out. | ||
81 | use_line_as_bass:Enable this if you want to use line-in as | ||
82 | bass-out. | ||
83 | joystick: Enable joystick. You will need to install Linux joystick | ||
84 | driver. | ||
85 | |||
diff --git a/Documentation/sound/oss/INSTALL.awe b/Documentation/sound/oss/INSTALL.awe deleted file mode 100644 index 310f42ca1e83..000000000000 --- a/Documentation/sound/oss/INSTALL.awe +++ /dev/null | |||
@@ -1,134 +0,0 @@ | |||
1 | ================================================================ | ||
2 | INSTALLATION OF AWE32 SOUND DRIVER FOR LINUX | ||
3 | Takashi Iwai <iwai@ww.uni-erlangen.de> | ||
4 | ================================================================ | ||
5 | |||
6 | ---------------------------------------------------------------- | ||
7 | * Attention to SB-PnP Card Users | ||
8 | |||
9 | If you're using PnP cards, the initialization of PnP is required | ||
10 | before loading this driver. You have now three options: | ||
11 | 1. Use isapnptools. | ||
12 | 2. Use in-kernel isapnp support. | ||
13 | 3. Initialize PnP on DOS/Windows, then boot linux by loadlin. | ||
14 | In this document, only the case 1 case is treated. | ||
15 | |||
16 | ---------------------------------------------------------------- | ||
17 | * Installation on Red Hat 5.0 Sound Driver | ||
18 | |||
19 | Please use install-rh.sh under RedHat5.0 directory. | ||
20 | DO NOT USE install.sh below. | ||
21 | See INSTALL.RH for more details. | ||
22 | |||
23 | ---------------------------------------------------------------- | ||
24 | * Installation/Update by Shell Script | ||
25 | |||
26 | 1. Become root | ||
27 | |||
28 | % su | ||
29 | |||
30 | 2. If you have never configured the kernel tree yet, run make config | ||
31 | once (to make dependencies and symlinks). | ||
32 | |||
33 | # cd /usr/src/linux | ||
34 | # make xconfig | ||
35 | |||
36 | 3. Run install.sh script | ||
37 | |||
38 | # sh ./install.sh | ||
39 | |||
40 | 4. Configure your kernel | ||
41 | |||
42 | (for Linux 2.[01].x user) | ||
43 | # cd /usr/src/linux | ||
44 | # make xconfig (or make menuconfig) | ||
45 | |||
46 | (for Linux 1.2.x user) | ||
47 | # cd /usr/src/linux | ||
48 | # make config | ||
49 | |||
50 | Answer YES to both "lowlevel drivers" and "AWE32 wave synth" items | ||
51 | in Sound menu. ("lowlevel drivers" will appear only in 2.x | ||
52 | kernel.) | ||
53 | |||
54 | 5. Make your kernel (and modules), and install them as usual. | ||
55 | |||
56 | 5a. make kernel image | ||
57 | # make zImage | ||
58 | |||
59 | 5b. make modules and install them | ||
60 | # make modules && make modules_install | ||
61 | |||
62 | 5c. If you're using lilo, copy the kernel image and run lilo. | ||
63 | Otherwise, copy the kernel image to suitable directory or | ||
64 | media for your system. | ||
65 | |||
66 | 6. Reboot the kernel if necessary. | ||
67 | - If you updated only the modules, you don't have to reboot | ||
68 | the system. Just remove the old sound modules here. | ||
69 | in | ||
70 | # rmmod sound.o (linux-2.0 or OSS/Free) | ||
71 | # rmmod awe_wave.o (linux-2.1) | ||
72 | |||
73 | 7. If your AWE card is a PnP and not initialized yet, you'll have to | ||
74 | do it by isapnp tools. Otherwise, skip to 8. | ||
75 | |||
76 | This section described only a brief explanation. For more | ||
77 | details, please see the AWE64-Mini-HOWTO or isapnp tools FAQ. | ||
78 | |||
79 | 7a. If you have no isapnp.conf file, generate it by pnpdump. | ||
80 | Otherwise, skip to 7d. | ||
81 | # pnpdump > /etc/isapnp.conf | ||
82 | |||
83 | 7b. Edit isapnp.conf file. Comment out the appropriate | ||
84 | lines containing desirable I/O ports, DMA and IRQs. | ||
85 | Don't forget to enable (ACT Y) line. | ||
86 | |||
87 | 7c. Add two i/o ports (0xA20 and 0xE20) in WaveTable part. | ||
88 | ex) | ||
89 | (CONFIGURE CTL0048/58128 (LD 2 | ||
90 | # ANSI string -->WaveTable<-- | ||
91 | (IO 0 (BASE 0x0620)) | ||
92 | (IO 1 (BASE 0x0A20)) | ||
93 | (IO 2 (BASE 0x0E20)) | ||
94 | (ACT Y) | ||
95 | )) | ||
96 | |||
97 | 7d. Load the config file. | ||
98 | CAUTION: This will reset all PnP cards! | ||
99 | |||
100 | # isapnp /etc/isapnp.conf | ||
101 | |||
102 | 8. Load the sound module (if you configured it as a module): | ||
103 | |||
104 | for 2.0 kernel or OSS/Free monolithic module: | ||
105 | |||
106 | # modprobe sound.o | ||
107 | |||
108 | for 2.1 kernel: | ||
109 | |||
110 | # modprobe sound | ||
111 | # insmod uart401 | ||
112 | # insmod sb io=0x220 irq=5 dma=1 dma16=5 mpu_io=0x330 | ||
113 | (These values depend on your settings.) | ||
114 | # insmod awe_wave | ||
115 | (Be sure to load awe_wave after sb!) | ||
116 | |||
117 | See Documentation/sound/oss/AWE32 for | ||
118 | more details. | ||
119 | |||
120 | 9. (only for obsolete systems) If you don't have /dev/sequencer | ||
121 | device file, make it according to Readme.linux file on | ||
122 | /usr/src/linux/drivers/sound. (Run a shell script included in | ||
123 | that file). <-- This file no longer exists in the recent kernels! | ||
124 | |||
125 | 10. OK, load your own soundfont file, and enjoy MIDI! | ||
126 | |||
127 | % sfxload synthgm.sbk | ||
128 | % drvmidi foo.mid | ||
129 | |||
130 | 11. For more advanced use (eg. dynamic loading, virtual bank and | ||
131 | etc.), please read the awedrv FAQ or the instructions in awesfx | ||
132 | and awemidi packages. | ||
133 | |||
134 | Good luck! | ||
diff --git a/Documentation/sound/oss/MAD16 b/Documentation/sound/oss/MAD16 deleted file mode 100644 index 865dbd848742..000000000000 --- a/Documentation/sound/oss/MAD16 +++ /dev/null | |||
@@ -1,56 +0,0 @@ | |||
1 | (This recipe has been edited to update the configuration symbols, | ||
2 | and change over to modprobe.conf for 2.6) | ||
3 | |||
4 | From: Shaw Carruthers <shaw@shawc.demon.co.uk> | ||
5 | |||
6 | I have been using mad16 sound for some time now with no problems, current | ||
7 | kernel 2.1.89 | ||
8 | |||
9 | lsmod shows: | ||
10 | |||
11 | mad16 5176 0 | ||
12 | sb 22044 0 [mad16] | ||
13 | uart401 5576 0 [mad16 sb] | ||
14 | ad1848 14176 1 [mad16] | ||
15 | sound 61928 0 [mad16 sb uart401 ad1848] | ||
16 | |||
17 | .config has: | ||
18 | |||
19 | CONFIG_SOUND=m | ||
20 | CONFIG_SOUND_ADLIB=m | ||
21 | CONFIG_SOUND_MAD16=m | ||
22 | CONFIG_SOUND_YM3812=m | ||
23 | |||
24 | modprobe.conf has: | ||
25 | |||
26 | alias char-major-14-* mad16 | ||
27 | options sb mad16=1 | ||
28 | options mad16 io=0x530 irq=7 dma=0 dma16=1 && /usr/local/bin/aumix -w 15 -p 20 -m 0 -1 0 -2 0 -3 0 -i 0 | ||
29 | |||
30 | |||
31 | To get the built in mixer to work this needs to be: | ||
32 | |||
33 | options adlib_card io=0x388 # FM synthesizer | ||
34 | options sb mad16=1 | ||
35 | options mad16 io=0x530 irq=7 dma=0 dma16=1 mpu_io=816 mpu_irq=5 && /usr/local/bin/aumix -w 15 -p 20 -m 0 -1 0 -2 0 -3 0 -i 0 | ||
36 | |||
37 | The addition of the "mpu_io=816 mpu_irq=5" to the mad16 options line is | ||
38 | |||
39 | ------------------------------------------------------------------------ | ||
40 | The mad16 module in addition supports the following options: | ||
41 | |||
42 | option: meaning: default: | ||
43 | joystick=0,1 disabled, enabled disabled | ||
44 | cdtype=0x00,0x02,0x04, disabled, Sony CDU31A, disabled | ||
45 | 0x06,0x08,0x0a Mitsumi, Panasonic, | ||
46 | Secondary IDE, Primary IDE | ||
47 | cdport=0x340,0x320, 0x340 | ||
48 | 0x330,0x360 | ||
49 | cdirq=0,3,5,7,9,10,11 disabled, IRQ3, ... disabled | ||
50 | cddma=0,5,6,7 disabled, DMA5, ... DMA5 for Mitsumi or IDE | ||
51 | cddma=0,1,2,3 disabled, DMA1, ... DMA3 for Sony or Panasonic | ||
52 | opl4=0,1 OPL3, OPL4 OPL3 | ||
53 | |||
54 | for more details see linux/drivers/sound/mad16.c | ||
55 | |||
56 | Rui Sousa | ||
diff --git a/Documentation/sound/oss/Maestro b/Documentation/sound/oss/Maestro deleted file mode 100644 index 4a80eb3f8e00..000000000000 --- a/Documentation/sound/oss/Maestro +++ /dev/null | |||
@@ -1,123 +0,0 @@ | |||
1 | An OSS/Lite Driver for the ESS Maestro family of sound cards | ||
2 | |||
3 | Zach Brown, December 1999 | ||
4 | |||
5 | Driver Status and Availability | ||
6 | ------------------------------ | ||
7 | |||
8 | The most recent version of this driver will hopefully always be available at | ||
9 | http://www.zabbo.net/maestro/ | ||
10 | |||
11 | I will try and maintain the most recent stable version of the driver | ||
12 | in both the stable and development kernel lines. | ||
13 | |||
14 | ESS Maestro Chip Family | ||
15 | ----------------------- | ||
16 | |||
17 | There are 3 main variants of the ESS Maestro PCI sound chip. The first | ||
18 | is the Maestro 1. It was originally produced by Platform Tech as the | ||
19 | 'AGOGO'. It can be recognized by Platform Tech's PCI ID 0x1285 with | ||
20 | 0x0100 as the device ID. It was put on some sound boards and a few laptops. | ||
21 | ESS bought the design and cleaned it up as the Maestro 2. This starts | ||
22 | their marking with the ESS vendor ID 0x125D and the 'year' device IDs. | ||
23 | The Maestro 2 claims 0x1968 while the Maestro 2e has 0x1978. | ||
24 | |||
25 | The various families of Maestro are mostly identical as far as this | ||
26 | driver is concerned. It doesn't touch the DSP parts that differ (though | ||
27 | it could for FM synthesis). | ||
28 | |||
29 | Driver OSS Behavior | ||
30 | -------------------- | ||
31 | |||
32 | This OSS driver exports /dev/mixer and /dev/dsp to applications, which | ||
33 | mostly adhere to the OSS spec. This driver doesn't register itself | ||
34 | with /dev/sndstat, so don't expect information to appear there. | ||
35 | |||
36 | The /dev/dsp device exported behaves almost as expected. Playback is | ||
37 | supported in all the various lovely formats. 8/16bit stereo/mono from | ||
38 | 8khz to 48khz, and mmap()ing for playback behaves. Capture/recording | ||
39 | is limited due to oddities with the Maestro hardware. One can only | ||
40 | record in 16bit stereo. For recording the maestro uses non interleaved | ||
41 | stereo buffers so that mmap()ing the incoming data does not result in | ||
42 | a ring buffer of LRLR data. mmap()ing of the read buffers is therefore | ||
43 | disallowed until this can be cleaned up. | ||
44 | |||
45 | /dev/mixer is an interface to the AC'97 codec on the Maestro. It is | ||
46 | worth noting that there are a variety of AC'97s that can be wired to | ||
47 | the Maestro. Which is used is entirely up to the hardware implementor. | ||
48 | This should only be visible to the user by the presence, or lack, of | ||
49 | 'Bass' and 'Treble' sliders in the mixer. Not all AC'97s have them. | ||
50 | |||
51 | The driver doesn't support MIDI or FM playback at the moment. Typically | ||
52 | the Maestro is wired to an MPU MIDI chip, but some hardware implementations | ||
53 | don't. We need to assemble a white list of hardware implementations that | ||
54 | have MIDI wired properly before we can claim to support it safely. | ||
55 | |||
56 | Compiling and Installing | ||
57 | ------------------------ | ||
58 | |||
59 | With the drivers inclusion into the kernel, compiling and installing | ||
60 | is the same as most OSS/Lite modular sound drivers. Compilation | ||
61 | of the driver is enabled through the CONFIG_SOUND_MAESTRO variable | ||
62 | in the config system. | ||
63 | |||
64 | It may be modular or statically linked. If it is modular it should be | ||
65 | installed with the rest of the modules for the kernel on the system. | ||
66 | Typically this will be in /lib/modules/ somewhere. 'alias sound maestro' | ||
67 | should also be added to your module configs (typically /etc/conf.modules) | ||
68 | if you're using modular OSS/Lite sound and want to default to using a | ||
69 | maestro chip. | ||
70 | |||
71 | As this is a PCI device, the module does not need to be informed of | ||
72 | any IO or IRQ resources it should use, it devines these from the | ||
73 | system. Sometimes, on sucky PCs, the BIOS fails to allocated resources | ||
74 | for the maestro. This will result in a message like: | ||
75 | maestro: PCI subsystem reports IRQ 0, this might not be correct. | ||
76 | from the kernel. Should this happen the sound chip most likely will | ||
77 | not operate correctly. To solve this one has to dig through their BIOS | ||
78 | (typically entered by hitting a hot key at boot time) and figure out | ||
79 | what magic needs to happen so that the BIOS will reward the maestro with | ||
80 | an IRQ. This operation is incredibly system specific, so you're on your | ||
81 | own. Sometimes the magic lies in 'PNP Capable Operating System' settings. | ||
82 | |||
83 | There are very few options to the driver. One is 'debug' which will | ||
84 | tell the driver to print minimal debugging information as it runs. This | ||
85 | can be collected with 'dmesg' or through the klogd daemon. | ||
86 | |||
87 | The other, more interesting option, is 'dsps_order'. Typically at | ||
88 | install time the driver will only register one available /dev/dsp device | ||
89 | for its use. The 'dsps_order' module parameter allows for more devices | ||
90 | to be allocated, as a power of two. Up to 4 devices can be registered | ||
91 | ( dsps_order=2 ). These devices act as fully distinct units and use | ||
92 | separate channels in the maestro. | ||
93 | |||
94 | Power Management | ||
95 | ---------------- | ||
96 | |||
97 | As of version 0.14, this driver has a minimal understanding of PCI | ||
98 | Power Management. If it finds a valid power management capability | ||
99 | on the PCI device it will attempt to use the power management | ||
100 | functions of the maestro. It will only do this on Maestro 2Es and | ||
101 | only on machines that are known to function well. You can | ||
102 | force the use of power management by setting the 'use_pm' module | ||
103 | option to 1, or can disable it entirely by setting it to 0. | ||
104 | |||
105 | When using power management, the driver does a few things | ||
106 | differently. It will keep the chip in a lower power mode | ||
107 | when the module is inserted but /dev/dsp is not open. This | ||
108 | allows the mixer to function but turns off the clocks | ||
109 | on other parts of the chip. When /dev/dsp is opened the chip | ||
110 | is brought into full power mode, and brought back down | ||
111 | when it is closed. It also powers down the chip entirely | ||
112 | when the module is removed or the machine is shutdown. This | ||
113 | can have nonobvious consequences. CD audio may not work | ||
114 | after a power managing driver is removed. Also, software that | ||
115 | doesn't understand power management may not be able to talk | ||
116 | to the powered down chip until the machine goes through a hard | ||
117 | reboot to bring it back. | ||
118 | |||
119 | .. more details .. | ||
120 | ------------------ | ||
121 | |||
122 | drivers/sound/maestro.c contains comments that hopefully explain | ||
123 | the maestro implementation. | ||
diff --git a/Documentation/sound/oss/Maestro3 b/Documentation/sound/oss/Maestro3 deleted file mode 100644 index a113718e8034..000000000000 --- a/Documentation/sound/oss/Maestro3 +++ /dev/null | |||
@@ -1,92 +0,0 @@ | |||
1 | An OSS/Lite Driver for the ESS Maestro3 family of sound chips | ||
2 | |||
3 | Zach Brown, January 2001 | ||
4 | |||
5 | Driver Status and Availability | ||
6 | ------------------------------ | ||
7 | |||
8 | The most recent version of this driver will hopefully always be available at | ||
9 | http://www.zabbo.net/maestro3/ | ||
10 | |||
11 | I will try and maintain the most recent stable version of the driver | ||
12 | in both the stable and development kernel lines. | ||
13 | |||
14 | Historically I've sucked pretty hard at actually doing that, however. | ||
15 | |||
16 | ESS Maestro3 Chip Family | ||
17 | ----------------------- | ||
18 | |||
19 | The 'Maestro3' is much like the Maestro2 chip. The noted improvement | ||
20 | is the removal of the silicon in the '2' that did PCM mixing. All that | ||
21 | work is now done through a custom DSP called the ASSP, the Asynchronus | ||
22 | Specific Signal Processor. | ||
23 | |||
24 | The 'Allegro' is a baby version of the Maestro3. I'm not entirely clear | ||
25 | on the extent of the differences, but the driver supports them both :) | ||
26 | |||
27 | The 'Allegro' shows up as PCI ID 0x1988 and the Maestro3 as 0x1998, | ||
28 | both under ESS's vendor ID of 0x125D. The Maestro3 can also show up as | ||
29 | 0x199a when hardware strapping is used. | ||
30 | |||
31 | The chip can also act as a multi function device. The modem IDs follow | ||
32 | the audio multimedia device IDs. (so the modem part of an Allegro shows | ||
33 | up as 0x1989) | ||
34 | |||
35 | Driver OSS Behavior | ||
36 | -------------------- | ||
37 | |||
38 | This OSS driver exports /dev/mixer and /dev/dsp to applications, which | ||
39 | mostly adhere to the OSS spec. This driver doesn't register itself | ||
40 | with /dev/sndstat, so don't expect information to appear there. | ||
41 | |||
42 | The /dev/dsp device exported behaves as expected. Playback is | ||
43 | supported in all the various lovely formats. 8/16bit stereo/mono from | ||
44 | 8khz to 48khz, with both read()/write(), and mmap(). | ||
45 | |||
46 | /dev/mixer is an interface to the AC'97 codec on the Maestro3. It is | ||
47 | worth noting that there are a variety of AC'97s that can be wired to | ||
48 | the Maestro3. Which is used is entirely up to the hardware implementor. | ||
49 | This should only be visible to the user by the presence, or lack, of | ||
50 | 'Bass' and 'Treble' sliders in the mixer. Not all AC'97s have them. | ||
51 | The Allegro has an onchip AC'97. | ||
52 | |||
53 | The driver doesn't support MIDI or FM playback at the moment. | ||
54 | |||
55 | Compiling and Installing | ||
56 | ------------------------ | ||
57 | |||
58 | With the drivers inclusion into the kernel, compiling and installing | ||
59 | is the same as most OSS/Lite modular sound drivers. Compilation | ||
60 | of the driver is enabled through the CONFIG_SOUND_MAESTRO3 variable | ||
61 | in the config system. | ||
62 | |||
63 | It may be modular or statically linked. If it is modular it should be | ||
64 | installed with the rest of the modules for the kernel on the system. | ||
65 | Typically this will be in /lib/modules/ somewhere. 'alias sound-slot-0 | ||
66 | maestro3' should also be added to your module configs (typically | ||
67 | /etc/modprobe.conf) if you're using modular OSS/Lite sound and want to | ||
68 | default to using a maestro3 chip. | ||
69 | |||
70 | There are very few options to the driver. One is 'debug' which will | ||
71 | tell the driver to print minimal debugging information as it runs. This | ||
72 | can be collected with 'dmesg' or through the klogd daemon. | ||
73 | |||
74 | One is 'external_amp', which tells the driver to attempt to enable | ||
75 | an external amplifier. This defaults to '1', you can tell the driver | ||
76 | not to bother enabling such an amplifier by setting it to '0'. | ||
77 | |||
78 | And the last is 'gpio_pin', which tells the driver which GPIO pin number | ||
79 | the external amp uses (0-15), The Allegro uses 8 by default, all others 1. | ||
80 | If everything loads correctly and seems to be working but you get no sound, | ||
81 | try tweaking this value. | ||
82 | |||
83 | Systems known to need a different value | ||
84 | Panasonic ToughBook CF-72: gpio_pin=13 | ||
85 | |||
86 | Power Management | ||
87 | ---------------- | ||
88 | |||
89 | This driver has a minimal understanding of PCI Power Management. It will | ||
90 | try and power down the chip when the system is suspended, and power | ||
91 | it up with it is resumed. It will also try and power down the chip | ||
92 | when the machine is shut down. | ||
diff --git a/Documentation/sound/oss/NEWS b/Documentation/sound/oss/NEWS deleted file mode 100644 index a81e0ef72ae9..000000000000 --- a/Documentation/sound/oss/NEWS +++ /dev/null | |||
@@ -1,42 +0,0 @@ | |||
1 | Linux 2.4 Sound Changes | ||
2 | 2000-September-25 | ||
3 | Christoph Hellwig, <hch@infradead.org> | ||
4 | |||
5 | |||
6 | |||
7 | === isapnp support | ||
8 | |||
9 | The Linux 2.4 Kernel does have reliable in-kernel isapnp support. | ||
10 | Some drivers (sb.o, ad1816.o awe_wave.o) do now support automatically | ||
11 | detecting and configuring isapnp devices. | ||
12 | If you have a not yet supported isapnp soundcard, mail me the content | ||
13 | of '/proc/isapnp' on your system and some information about your card | ||
14 | and its driver(s) so I can try to get isapnp working for it. | ||
15 | |||
16 | |||
17 | |||
18 | === soundcard resources on kernel commandline | ||
19 | |||
20 | Before Linux 2.4 you had to specify the resources for sounddrivers | ||
21 | statically linked into the kernel at compile time | ||
22 | (in make config/menuconfig/xconfig). In Linux 2.4 the resources are | ||
23 | now specified at the boot-time kernel commandline (e.g. the lilo | ||
24 | 'append=' line or everything that's after the kernel name in grub). | ||
25 | Read the Configure.help entry for your card for the parameters. | ||
26 | |||
27 | |||
28 | === softoss is gone | ||
29 | |||
30 | In Linux 2.4 the softoss in-kernel software synthesizer is no more aviable. | ||
31 | Use a user space software synthesizer like timidity instead. | ||
32 | |||
33 | |||
34 | |||
35 | === /dev/sndstat and /proc/sound are gone | ||
36 | |||
37 | In older Linux versions those files exported some information about the | ||
38 | OSS/Free configuration to userspace. In Linux 2.3 they were removed because | ||
39 | they did not support the growing number of pci soundcards and there were | ||
40 | some general problems with this interface. | ||
41 | |||
42 | |||
diff --git a/Documentation/sound/oss/OPL3-SA b/Documentation/sound/oss/OPL3-SA deleted file mode 100644 index 66a91835d918..000000000000 --- a/Documentation/sound/oss/OPL3-SA +++ /dev/null | |||
@@ -1,52 +0,0 @@ | |||
1 | OPL3-SA1 sound driver (opl3sa.o) | ||
2 | |||
3 | --- | ||
4 | Note: This howto only describes how to setup the OPL3-SA1 chip; this info | ||
5 | does not apply to the SA2, SA3, or SA4. | ||
6 | --- | ||
7 | |||
8 | The Yamaha OPL3-SA1 sound chip is usually found built into motherboards, and | ||
9 | it's a decent little chip offering a WSS mode, a SB Pro emulation mode, MPU401 | ||
10 | and OPL3 FM Synth capabilities. | ||
11 | |||
12 | You can enable inclusion of the driver via CONFIG_SOUND_OPL3SA1=m, or | ||
13 | CONFIG_SOUND_OPL3SA1=y through 'make config/xconfig/menuconfig'. | ||
14 | |||
15 | You'll need to know all of the relevant info (irq, dma, and io port) for the | ||
16 | chip's WSS mode, since that is the mode the kernel sound driver uses, and of | ||
17 | course you'll also need to know about where the MPU401 and OPL3 ports and | ||
18 | IRQs are if you want to use those. | ||
19 | |||
20 | Here's the skinny on how to load it as a module: | ||
21 | |||
22 | modprobe opl3sa io=0x530 irq=11 dma=0 dma2=1 mpu_io=0x330 mpu_irq=5 | ||
23 | |||
24 | Module options in detail: | ||
25 | |||
26 | io: This is the WSS's port base. | ||
27 | irq: This is the WSS's IRQ. | ||
28 | dma: This is the WSS's DMA line. In my BIOS setup screen this was | ||
29 | listed as "WSS Play DMA" | ||
30 | dma2: This is the WSS's secondary DMA line. My BIOS calls it the | ||
31 | "WSS capture DMA" | ||
32 | |||
33 | mpu_io: This is the MPU401's port base. | ||
34 | mpu_irq: This is the MPU401's IRQ. | ||
35 | |||
36 | If you'd like to use the OPL3 FM Synthesizer, make sure you enable | ||
37 | CONFIG_SOUND_YM3812 (in 'make config'). That'll build the opl3.o module. | ||
38 | |||
39 | Then a simple 'insmod opl3 io=0x388', and you now have FM Synth. | ||
40 | |||
41 | You can also use the SoftOSS software synthesizer instead of the builtin OPL3. | ||
42 | Here's how: | ||
43 | |||
44 | Say 'y' or 'm' to "SoftOSS software wave table engine" in make config. | ||
45 | |||
46 | If you said yes, the software synth is available once you boot your new | ||
47 | kernel. | ||
48 | |||
49 | If you chose to build it as a module, just insmod the resulting softoss2.o | ||
50 | |||
51 | Questions? Comments? | ||
52 | <stiker@northlink.com> | ||
diff --git a/Documentation/sound/oss/README.awe b/Documentation/sound/oss/README.awe deleted file mode 100644 index 80054cd8fcde..000000000000 --- a/Documentation/sound/oss/README.awe +++ /dev/null | |||
@@ -1,218 +0,0 @@ | |||
1 | ================================================================ | ||
2 | AWE32 Sound Driver for Linux / FreeBSD | ||
3 | version 0.4.3; Nov. 1, 1998 | ||
4 | |||
5 | Takashi Iwai <iwai@ww.uni-erlangen.de> | ||
6 | ================================================================ | ||
7 | |||
8 | * GENERAL NOTES | ||
9 | |||
10 | This is a sound driver extension for SoundBlaster AWE32 and other | ||
11 | compatible cards (AWE32-PnP, SB32, SB32-PnP, AWE64 & etc) to enable | ||
12 | the wave synth operations. The driver is provided for Linux 1.2.x | ||
13 | and 2.[012].x kernels, as well as FreeBSD, on Intel x86 and DEC | ||
14 | Alpha systems. | ||
15 | |||
16 | This driver was written by Takashi Iwai <iwai@ww.uni-erlangen.de>, | ||
17 | and provided "as is". The original source (awedrv-0.4.3.tar.gz) and | ||
18 | binary packages are available on the following URL: | ||
19 | http://bahamut.mm.t.u-tokyo.ac.jp/~iwai/awedrv/ | ||
20 | Note that since the author is apart from this web site, the update is | ||
21 | not frequent now. | ||
22 | |||
23 | |||
24 | * NOTE TO LINUX USERS | ||
25 | |||
26 | To enable this driver on linux-2.[01].x kernels, you need turn on | ||
27 | "AWE32 synth" options in sound menu when configure your linux kernel | ||
28 | and modules. The precise installation procedure is described in the | ||
29 | AWE64-Mini-HOWTO and linux-kernel/Documetation/sound/AWE32. | ||
30 | |||
31 | If you're using PnP cards, the card must be initialized before loading | ||
32 | the sound driver. There're several options to do this: | ||
33 | - Initialize the card via ISA PnP tools, and load the sound module. | ||
34 | - Initialize the card on DOS, and load linux by loadlin.exe | ||
35 | - Use PnP kernel driver (for Linux-2.x.x) | ||
36 | The detailed instruction for the solution using isapnp tools is found | ||
37 | in many documents like above. A brief instruction is also included in | ||
38 | the installation document of this package. | ||
39 | For PnP driver project, please refer to the following URL: | ||
40 | http://www-jcr.lmh.ox.ac.uk/~pnp/ | ||
41 | |||
42 | |||
43 | * USING THE DRIVER | ||
44 | |||
45 | The awedrv has several different playing modes to realize easy channel | ||
46 | allocation for MIDI songs. To hear the exact sound quality, you need | ||
47 | to obtain the extended sequencer program, drvmidi or playmidi-2.5. | ||
48 | |||
49 | For playing MIDI files, you *MUST* load the soundfont file on the | ||
50 | driver previously by sfxload utility. Otherwise you'll here no sounds | ||
51 | at all! All the utilities and driver source packages are found in the | ||
52 | above URL. The sfxload program is included in the package | ||
53 | awesfx-0.4.3.tgz. Binary packages are available there, too. See the | ||
54 | instruction in each package for installation. | ||
55 | |||
56 | Loading a soundfont file is very simple. Just execute the command | ||
57 | |||
58 | % sfxload synthgm.sbk | ||
59 | |||
60 | Then, sfxload transfers the file "synthgm.sbk" to the driver. | ||
61 | Both SF1 and SF2 formats are accepted. | ||
62 | |||
63 | Now you can hear midi musics by a midi player. | ||
64 | |||
65 | % drvmidi foo.mid | ||
66 | |||
67 | If you run MIDI player after MOD player, you need to load soundfont | ||
68 | files again, since MOD player programs clear the previous loaded | ||
69 | samples by their own data. | ||
70 | |||
71 | If you have only 512kb on the sound card, I recommend to use dynamic | ||
72 | sample loading via -L option of drvmidi. 2MB GM/GS soundfont file is | ||
73 | available in most midi files. | ||
74 | |||
75 | % sfxload synthgm | ||
76 | % drvmidi -L 2mbgmgs foo.mid | ||
77 | |||
78 | This makes a big difference (believe me)! For more details, please | ||
79 | refer to the FAQ list which is available on the URL above. | ||
80 | |||
81 | The current chorus, reverb and equalizer status can be changed by | ||
82 | aweset utility program (included in awesfx package). Note that | ||
83 | some awedrv-native programs (like drvmidi and xmp) will change the | ||
84 | current settings by themselves. The aweset program is effective | ||
85 | only for other programs like playmidi. | ||
86 | |||
87 | Enjoy. | ||
88 | |||
89 | |||
90 | * COMPILE FLAGS | ||
91 | |||
92 | Compile conditions are defined in awe_config.h. | ||
93 | |||
94 | [Compatibility Conditions] | ||
95 | The following flags are defined automatically when using installation | ||
96 | shell script. | ||
97 | |||
98 | - AWE_MODULE_SUPPORT | ||
99 | indicates your Linux kernel supports module for each sound card | ||
100 | (in recent 2.1 or 2.2 kernels and unofficial patched 2.0 kernels | ||
101 | as distributed in the RH5.0 package). | ||
102 | This flag is automatically set when you're using 2.1.x kernels. | ||
103 | You can pass the base address and memory size via the following | ||
104 | module options, | ||
105 | io = base I/O port address (eg. 0x620) | ||
106 | memsize = DRAM size in kilobytes (eg. 512) | ||
107 | As default, AWE driver probes these values automatically. | ||
108 | |||
109 | |||
110 | [Hardware Conditions] | ||
111 | You DON'T have to define the following two values. | ||
112 | Define them only when the driver couldn't detect the card properly. | ||
113 | |||
114 | - AWE_DEFAULT_BASE_ADDR (default: not defined) | ||
115 | specifies the base port address of your AWE32 card. | ||
116 | 0 means to autodetect the address. | ||
117 | |||
118 | - AWE_DEFAULT_MEM_SIZE (default: not defined) | ||
119 | specifies the memory size of your AWE32 card in kilobytes. | ||
120 | -1 means to autodetect its size. | ||
121 | |||
122 | |||
123 | [Sample Table Size] | ||
124 | From ver.0.4.0, sample tables are allocated dynamically (except | ||
125 | Linux-1.2.x system), so you need NOT to touch these parameters. | ||
126 | Linux-1.2.x users may need to increase these values to appropriate size | ||
127 | if the sound card is equipped with more DRAM. | ||
128 | |||
129 | - AWE_MAX_SF_LISTS, AWE_MAX_SAMPLES, AWE_MAX_INFOS | ||
130 | |||
131 | |||
132 | [Other Conditions] | ||
133 | |||
134 | - AWE_ALWAYS_INIT_FM (default: not defined) | ||
135 | indicates the AWE driver always initialize FM passthrough even | ||
136 | without DRAM on board. Emu8000 chip has a restriction for playing | ||
137 | samples on DRAM that at least two channels must be occupied as | ||
138 | passthrough channels. | ||
139 | |||
140 | - AWE_DEBUG_ON (default: defined) | ||
141 | turns on debugging messages if defined. | ||
142 | |||
143 | - AWE_HAS_GUS_COMPATIBILITY (default: defined) | ||
144 | Enables GUS compatibility mode if defined, reading GUS patches and | ||
145 | GUS control commands. Define this option to use GMOD or other | ||
146 | GUS module players. | ||
147 | |||
148 | - CONFIG_AWE32_MIDIEMU (default: defined) | ||
149 | Adds a MIDI emulation device by Emu8000 wavetable. The emulation | ||
150 | device can be accessed as an external MIDI, and sends the MIDI | ||
151 | control codes directly. XG and GS sysex/NRPN are accepted. | ||
152 | No MIDI input is supported. | ||
153 | |||
154 | - CONFIG_AWE32_MIXER (default: not defined) | ||
155 | Adds a mixer device for AWE32 bass/treble equalizer control. | ||
156 | You can access this device using /dev/mixer?? (usually mixer01). | ||
157 | |||
158 | - AWE_USE_NEW_VOLUME_CALC (default: defined) | ||
159 | Use the new method to calculate the volume change as compatible | ||
160 | with DOS/Win drivers. This option can be toggled via aweset | ||
161 | program, or drvmidi player. | ||
162 | |||
163 | - AWE_CHECK_VTARGET (default: defined) | ||
164 | Check the current volume target value when searching for an | ||
165 | empty channel to allocate a new voice. This is experimentally | ||
166 | implemented in this version. (probably, this option doesn't | ||
167 | affect the sound quality severely...) | ||
168 | |||
169 | - AWE_ALLOW_SAMPLE_SHARING (default: defined) | ||
170 | Allow sample sharing for differently loaded patches. | ||
171 | This function is available only together with awesfx-0.4.3p3. | ||
172 | Note that this is still an experimental option. | ||
173 | |||
174 | - DEF_FM_CHORUS_DEPTH (default: 0x10) | ||
175 | The default strength to be sent to the chorus effect engine. | ||
176 | From 0 to 0xff. Larger numbers may often cause weird sounds. | ||
177 | |||
178 | - DEF_FM_REVERB_DEPTH (default: 0x10) | ||
179 | The default strength to be sent to the reverb effect engine. | ||
180 | From 0 to 0xff. Larger numbers may often cause weird sounds. | ||
181 | |||
182 | |||
183 | * ACKNOWLEDGMENTS | ||
184 | |||
185 | Thanks to Witold Jachimczyk (witek@xfactor.wpi.edu) for much advice | ||
186 | on programming of AWE32. Much code is brought from his AWE32-native | ||
187 | MOD player, ALMP. | ||
188 | The port of awedrv to FreeBSD is done by Randall Hopper | ||
189 | (rhh@ct.picker.com). | ||
190 | The new volume calculation routine was derived from Mark Weaver's | ||
191 | ADIP compatible routines. | ||
192 | I also thank linux-awe-ml members for their efforts | ||
193 | to reboot their system many times :-) | ||
194 | |||
195 | |||
196 | * TODO'S | ||
197 | |||
198 | - Complete DOS/Win compatibility | ||
199 | - DSP-like output | ||
200 | |||
201 | |||
202 | * COPYRIGHT | ||
203 | |||
204 | Copyright (C) 1996-1998 Takashi Iwai | ||
205 | |||
206 | This program is free software; you can redistribute it and/or modify | ||
207 | it under the terms of the GNU General Public License as published by | ||
208 | the Free Software Foundation; either version 2 of the License, or | ||
209 | (at your option) any later version. | ||
210 | |||
211 | This program is distributed in the hope that it will be useful, | ||
212 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
213 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
214 | GNU General Public License for more details. | ||
215 | |||
216 | You should have received a copy of the GNU General Public License | ||
217 | along with this program; if not, write to the Free Software | ||
218 | Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | ||
diff --git a/Documentation/sound/oss/Wavefront b/Documentation/sound/oss/Wavefront deleted file mode 100644 index 16f57ea43052..000000000000 --- a/Documentation/sound/oss/Wavefront +++ /dev/null | |||
@@ -1,339 +0,0 @@ | |||
1 | An OSS/Free Driver for WaveFront soundcards | ||
2 | (Turtle Beach Maui, Tropez, Tropez Plus) | ||
3 | |||
4 | Paul Barton-Davis, July 1998 | ||
5 | |||
6 | VERSION 0.2.5 | ||
7 | |||
8 | Driver Status | ||
9 | ------------- | ||
10 | |||
11 | Requires: Kernel 2.1.106 or later (the driver is included with kernels | ||
12 | 2.1.109 and above) | ||
13 | |||
14 | As of 7/22/1998, this driver is currently in *BETA* state. This means | ||
15 | that it compiles and runs, and that I use it on my system (Linux | ||
16 | 2.1.106) with some reasonably demanding applications and uses. I | ||
17 | believe the code is approaching an initial "finished" state that | ||
18 | provides bug-free support for the Tropez Plus. | ||
19 | |||
20 | Please note that to date, the driver has ONLY been tested on a Tropez | ||
21 | Plus. I would very much like to hear (and help out) people with Tropez | ||
22 | and Maui cards, since I think the driver can support those cards as | ||
23 | well. | ||
24 | |||
25 | Finally, the driver has not been tested (or even compiled) as a static | ||
26 | (non-modular) part of the kernel. Alan Cox's good work in modularizing | ||
27 | OSS/Free for Linux makes this rather unnecessary. | ||
28 | |||
29 | Some Questions | ||
30 | -------------- | ||
31 | |||
32 | ********************************************************************** | ||
33 | 0) What does this driver do that the maui driver did not ? | ||
34 | ********************************************************************** | ||
35 | |||
36 | * can fully initialize a WaveFront card from cold boot - no DOS | ||
37 | utilities needed | ||
38 | * working patch/sample/program loading and unloading (the maui | ||
39 | driver didn't document how to make this work, and assumed | ||
40 | user-level preparation of the patch data for writing | ||
41 | to the board. ick.) | ||
42 | * full user-level access to all WaveFront commands | ||
43 | * for the Tropez Plus, (primitive) control of the YSS225 FX processor | ||
44 | * Virtual MIDI mode supported - 2 MIDI devices accessible via the | ||
45 | WaveFront's MPU401/UART emulation. One | ||
46 | accesses the WaveFront synth, the other accesses the | ||
47 | external MIDI connector. Full MIDI read/write semantics | ||
48 | for both devices. | ||
49 | * OSS-compliant /dev/sequencer interface for the WaveFront synth, | ||
50 | including native and GUS-format patch downloading. | ||
51 | * semi-intelligent patch management (prototypical at this point) | ||
52 | |||
53 | ********************************************************************** | ||
54 | 1) What to do about MIDI interfaces ? | ||
55 | ********************************************************************** | ||
56 | |||
57 | The Tropez Plus (and perhaps other WF cards) can in theory support up | ||
58 | to 2 physical MIDI interfaces. One of these is connected to the | ||
59 | ICS2115 chip (the WaveFront synth itself) and is controlled by | ||
60 | MPU/UART-401 emulation code running as part of the WaveFront OS. The | ||
61 | other is controlled by the CS4232 chip present on the board. However, | ||
62 | physical access to the CS4232 connector is difficult, and it is | ||
63 | unlikely (though not impossible) that you will want to use it. | ||
64 | |||
65 | An older version of this driver introduced an additional kernel config | ||
66 | variable which controlled whether or not the CS4232 MIDI interface was | ||
67 | configured. Because of Alan Cox's work on modularizing the sound | ||
68 | drivers, and now backporting them to 2.0.34 kernels, there seems to be | ||
69 | little reason to support "static" configuration variables, and so this | ||
70 | has been abandoned in favor of *only* module parameters. Specifying | ||
71 | "mpuio" and "mpuirq" for the cs4232 parameter will result in the | ||
72 | CS4232 MIDI interface being configured; leaving them unspecified will | ||
73 | leave it unconfigured (and thus unusable). | ||
74 | |||
75 | BTW, I have heard from one Tropez+ user that the CS4232 interface is | ||
76 | more reliable than the ICS2115 one. I have had no problems with the | ||
77 | latter, and I don't have the right cable to test the former one | ||
78 | out. Reports welcome. | ||
79 | |||
80 | ********************************************************************** | ||
81 | 2) Why does line XXX of the code look like this .... ? | ||
82 | ********************************************************************** | ||
83 | |||
84 | Either because it's not finished yet, or because you're a better coder | ||
85 | than I am, or because you don't understand some aspect of how the card | ||
86 | or the code works. | ||
87 | |||
88 | I absolutely welcome comments, criticisms and suggestions about the | ||
89 | design and implementation of the driver. | ||
90 | |||
91 | ********************************************************************** | ||
92 | 3) What files are included ? | ||
93 | ********************************************************************** | ||
94 | |||
95 | drivers/sound/README.wavefront -- this file | ||
96 | |||
97 | drivers/sound/wavefront.patch -- patches for the 2.1.106 sound drivers | ||
98 | needed to make the rest of this work | ||
99 | DO NOT USE IF YOU'VE APPLIED THEM | ||
100 | BEFORE, OR HAVE 2.1.109 OR ABOVE | ||
101 | |||
102 | drivers/sound/wavfront.c -- the driver | ||
103 | drivers/sound/ys225.h -- data declarations for FX config | ||
104 | drivers/sound/ys225.c -- data definitions for FX config | ||
105 | drivers/sound/wf_midi.c -- the "uart401" driver | ||
106 | to support virtual MIDI mode. | ||
107 | include/wavefront.h -- the header file | ||
108 | Documentation/sound/oss/Tropez+ -- short docs on configuration | ||
109 | |||
110 | ********************************************************************** | ||
111 | 4) How do I compile/install/use it ? | ||
112 | ********************************************************************** | ||
113 | |||
114 | PART ONE: install the source code into your sound driver directory | ||
115 | |||
116 | cd <top-of-your-2.1.106-code-base-e.g.-/usr/src/linux> | ||
117 | tar -zxvf <where-you-put/wavefront.tar.gz> | ||
118 | |||
119 | PART TWO: apply the patches | ||
120 | |||
121 | DO THIS ONLY IF YOU HAVE A KERNEL VERSION BELOW 2.1.109 | ||
122 | AND HAVE NOT ALREADY INSTALLED THE PATCH(ES). | ||
123 | |||
124 | cd drivers/sound | ||
125 | patch < wavefront.patch | ||
126 | |||
127 | PART THREE: configure your kernel | ||
128 | |||
129 | cd <top of your kernel tree> | ||
130 | make xconfig (or whichever config option you use) | ||
131 | |||
132 | - choose YES for Sound Support | ||
133 | - choose MODULE (M) for OSS Sound Modules | ||
134 | - choose MODULE(M) to YM3812/OPL3 support | ||
135 | - choose MODULE(M) for WaveFront support | ||
136 | - choose MODULE(M) for CS4232 support | ||
137 | |||
138 | - choose "N" for everything else (unless you have other | ||
139 | soundcards you want support for) | ||
140 | |||
141 | |||
142 | make boot | ||
143 | . | ||
144 | . | ||
145 | . | ||
146 | <whatever you normally do for a kernel install> | ||
147 | make modules | ||
148 | . | ||
149 | . | ||
150 | . | ||
151 | make modules_install | ||
152 | |||
153 | Here's my autoconf.h SOUND section: | ||
154 | |||
155 | /* | ||
156 | * Sound | ||
157 | */ | ||
158 | #define CONFIG_SOUND 1 | ||
159 | #undef CONFIG_SOUND_OSS | ||
160 | #define CONFIG_SOUND_OSS_MODULE 1 | ||
161 | #undef CONFIG_SOUND_PAS | ||
162 | #undef CONFIG_SOUND_SB | ||
163 | #undef CONFIG_SOUND_ADLIB | ||
164 | #undef CONFIG_SOUND_GUS | ||
165 | #undef CONFIG_SOUND_MPU401 | ||
166 | #undef CONFIG_SOUND_PSS | ||
167 | #undef CONFIG_SOUND_MSS | ||
168 | #undef CONFIG_SOUND_SSCAPE | ||
169 | #undef CONFIG_SOUND_TRIX | ||
170 | #undef CONFIG_SOUND_MAD16 | ||
171 | #undef CONFIG_SOUND_WAVEFRONT | ||
172 | #define CONFIG_SOUND_WAVEFRONT_MODULE 1 | ||
173 | #undef CONFIG_SOUND_CS4232 | ||
174 | #define CONFIG_SOUND_CS4232_MODULE 1 | ||
175 | #undef CONFIG_SOUND_MAUI | ||
176 | #undef CONFIG_SOUND_SGALAXY | ||
177 | #undef CONFIG_SOUND_OPL3SA1 | ||
178 | #undef CONFIG_SOUND_SOFTOSS | ||
179 | #undef CONFIG_SOUND_YM3812 | ||
180 | #define CONFIG_SOUND_YM3812_MODULE 1 | ||
181 | #undef CONFIG_SOUND_VMIDI | ||
182 | #undef CONFIG_SOUND_UART6850 | ||
183 | /* | ||
184 | * Additional low level sound drivers | ||
185 | */ | ||
186 | #undef CONFIG_LOWLEVEL_SOUND | ||
187 | |||
188 | ************************************************************ | ||
189 | 6) How do I configure my card ? | ||
190 | ************************************************************ | ||
191 | |||
192 | You need to edit /etc/modprobe.conf. Here's mine (edited to show the | ||
193 | relevant details): | ||
194 | |||
195 | # Sound system | ||
196 | alias char-major-14-* wavefront | ||
197 | alias synth0 wavefront | ||
198 | alias mixer0 cs4232 | ||
199 | alias audio0 cs4232 | ||
200 | install wavefront /sbin/modprobe cs4232 && /sbin/modprobe -i wavefront && /sbin/modprobe opl3 | ||
201 | options wavefront io=0x200 irq=9 | ||
202 | options cs4232 synthirq=9 synthio=0x200 io=0x530 irq=5 dma=1 dma2=0 | ||
203 | options opl3 io=0x388 | ||
204 | |||
205 | Things to note: | ||
206 | |||
207 | the wavefront options "io" and "irq" ***MUST*** match the "synthio" | ||
208 | and "synthirq" cs4232 options. | ||
209 | |||
210 | you can do without the opl3 module if you don't | ||
211 | want to use the OPL/[34] FM synth on the soundcard | ||
212 | |||
213 | the opl3 io parameter is conventionally not adjustable. | ||
214 | In theory, any not-in-use IO port address would work, but | ||
215 | just use 0x388 and stick with the crowd. | ||
216 | |||
217 | ********************************************************************** | ||
218 | 7) What about firmware ? | ||
219 | ********************************************************************** | ||
220 | |||
221 | Turtle Beach have not given me permission to distribute their firmware | ||
222 | for the ICS2115. However, if you have a WaveFront card, then you | ||
223 | almost certainly have the firmware, and if not, its freely available | ||
224 | on their website, at: | ||
225 | |||
226 | http://www.tbeach.com/tbs/downloads/scardsdown.htm#tropezplus | ||
227 | |||
228 | The file is called WFOS2001.MOT (for the Tropez+). | ||
229 | |||
230 | This driver, however, doesn't use the pure firmware as distributed, | ||
231 | but instead relies on a somewhat processed form of it. You can | ||
232 | generate this very easily. Following an idea from Andrew Veliath's | ||
233 | Pinnacle driver, the following flex program will generate the | ||
234 | processed version: | ||
235 | |||
236 | ---- cut here ------------------------- | ||
237 | %option main | ||
238 | %% | ||
239 | ^S[28].*\r$ printf ("%c%.*s", yyleng-1,yyleng-1,yytext); | ||
240 | <<EOF>> { fputc ('\0', stdout); return; } | ||
241 | \n {} | ||
242 | . {} | ||
243 | ---- cut here ------------------------- | ||
244 | |||
245 | To use it, put the above in file (say, ws.l) compile it like this: | ||
246 | |||
247 | shell> flex -ows.c ws.l | ||
248 | shell> cc -o ws ws.c | ||
249 | |||
250 | and then use it like this: | ||
251 | |||
252 | ws < my-copy-of-the-oswf.mot-file > /etc/sound/wavefront.os | ||
253 | |||
254 | If you put it somewhere else, you'll always have to use the wf_ospath | ||
255 | module parameter (see below) or alter the source code. | ||
256 | |||
257 | ********************************************************************** | ||
258 | 7) How do I get it working ? | ||
259 | ********************************************************************** | ||
260 | |||
261 | Optionally, you can reboot with the "new" kernel (even though the only | ||
262 | changes have really been made to a module). | ||
263 | |||
264 | Then, as root do: | ||
265 | |||
266 | modprobe wavefront | ||
267 | |||
268 | You should get something like this in /var/log/messages: | ||
269 | |||
270 | WaveFront: firmware 1.20 already loaded. | ||
271 | |||
272 | or | ||
273 | |||
274 | WaveFront: no response to firmware probe, assume raw. | ||
275 | |||
276 | then: | ||
277 | |||
278 | WaveFront: waiting for memory configuration ... | ||
279 | WaveFront: hardware version 1.64 | ||
280 | WaveFront: available DRAM 8191k | ||
281 | WaveFront: 332 samples used (266 real, 13 aliases, 53 multi), 180 empty | ||
282 | WaveFront: 128 programs slots in use | ||
283 | WaveFront: 256 patch slots filled, 142 in use | ||
284 | |||
285 | The whole process takes about 16 seconds, the longest waits being | ||
286 | after reporting the hardware version (during the firmware download), | ||
287 | and after reporting program status (during patch status inquiry). Its | ||
288 | shorter (about 10 secs) if the firmware is already loaded (i.e. only | ||
289 | warm reboots since the last firmware load). | ||
290 | |||
291 | The "available DRAM" line will vary depending on how much added RAM | ||
292 | your card has. Mine has 8MB. | ||
293 | |||
294 | To check basically functionality, use play(1) or splay(1) to send a | ||
295 | .WAV or other audio file through the audio portion. Then use playmidi | ||
296 | to play a General MIDI file. Try the "-D 0" to hear the | ||
297 | difference between sending MIDI to the WaveFront and using the OPL/3, | ||
298 | which is the default (I think ...). If you have an external synth(s) | ||
299 | hooked to the soundcard, you can use "-e" to route to the | ||
300 | external synth(s) (in theory, -D 1 should work as well, but I think | ||
301 | there is a bug in playmidi which prevents this from doing what it | ||
302 | should). | ||
303 | |||
304 | ********************************************************************** | ||
305 | 8) What are the module parameters ? | ||
306 | ********************************************************************** | ||
307 | |||
308 | Its best to read wavefront.c for this, but here is a summary: | ||
309 | |||
310 | integers: | ||
311 | wf_raw - if set, ignore apparent presence of firmware | ||
312 | loaded onto the ICS2115, reset the whole | ||
313 | board, and initialize it from scratch. (default = 0) | ||
314 | |||
315 | fx_raw - if set, always initialize the YSS225 processor | ||
316 | on the Tropez plus. (default = 1) | ||
317 | |||
318 | < The next 4 are basically for kernel hackers to allow | ||
319 | tweaking the driver for testing purposes. > | ||
320 | |||
321 | wait_usecs - loop timer used when waiting for | ||
322 | status conditions on the board. | ||
323 | The default is 150. | ||
324 | |||
325 | debug_default - debugging flags. See sound/wavefront.h | ||
326 | for WF_DEBUG_* values. Default is zero. | ||
327 | Setting this allows you to debug the | ||
328 | driver during module installation. | ||
329 | strings: | ||
330 | ospath - path to get to the pre-processed OS firmware. | ||
331 | (default: /etc/sound/wavefront.os) | ||
332 | |||
333 | ********************************************************************** | ||
334 | 9) Who should I contact if I have problems? | ||
335 | ********************************************************************** | ||
336 | |||
337 | Just me: Paul Barton-Davis <pbd@op.net> | ||
338 | |||
339 | |||
diff --git a/Documentation/sound/oss/es1370 b/Documentation/sound/oss/es1370 deleted file mode 100644 index 7b38b1a096a3..000000000000 --- a/Documentation/sound/oss/es1370 +++ /dev/null | |||
@@ -1,70 +0,0 @@ | |||
1 | /proc/sound, /dev/sndstat | ||
2 | ------------------------- | ||
3 | |||
4 | /proc/sound and /dev/sndstat is not supported by the | ||
5 | driver. To find out whether the driver succeeded loading, | ||
6 | check the kernel log (dmesg). | ||
7 | |||
8 | |||
9 | ALaw/uLaw sample formats | ||
10 | ------------------------ | ||
11 | |||
12 | This driver does not support the ALaw/uLaw sample formats. | ||
13 | ALaw is the default mode when opening a sound device | ||
14 | using OSS/Free. The reason for the lack of support is | ||
15 | that the hardware does not support these formats, and adding | ||
16 | conversion routines to the kernel would lead to very ugly | ||
17 | code in the presence of the mmap interface to the driver. | ||
18 | And since xquake uses mmap, mmap is considered important :-) | ||
19 | and no sane application uses ALaw/uLaw these days anyway. | ||
20 | In short, playing a Sun .au file as follows: | ||
21 | |||
22 | cat my_file.au > /dev/dsp | ||
23 | |||
24 | does not work. Instead, you may use the play script from | ||
25 | Chris Bagwell's sox-12.14 package (available from the URL | ||
26 | below) to play many different audio file formats. | ||
27 | The script automatically determines the audio format | ||
28 | and does do audio conversions if necessary. | ||
29 | http://home.sprynet.com/sprynet/cbagwell/projects.html | ||
30 | |||
31 | |||
32 | Blocking vs. nonblocking IO | ||
33 | --------------------------- | ||
34 | |||
35 | Unlike OSS/Free this driver honours the O_NONBLOCK file flag | ||
36 | not only during open, but also during read and write. | ||
37 | This is an effort to make the sound driver interface more | ||
38 | regular. Timidity has problems with this; a patch | ||
39 | is available from http://www.ife.ee.ethz.ch/~sailer/linux/pciaudio.html. | ||
40 | (Timidity patched will also run on OSS/Free). | ||
41 | |||
42 | |||
43 | MIDI UART | ||
44 | --------- | ||
45 | |||
46 | The driver supports a simple MIDI UART interface, with | ||
47 | no ioctl's supported. | ||
48 | |||
49 | |||
50 | MIDI synthesizer | ||
51 | ---------------- | ||
52 | |||
53 | This soundcard does not have any hardware MIDI synthesizer; | ||
54 | MIDI synthesis has to be done in software. To allow this | ||
55 | the driver/soundcard supports two PCM (/dev/dsp) interfaces. | ||
56 | The second one goes to the mixer "synth" setting and supports | ||
57 | only a limited set of sampling rates (44100, 22050, 11025, 5512). | ||
58 | By setting lineout to 1 on the driver command line | ||
59 | (eg. insmod es1370 lineout=1) it is even possible on some | ||
60 | cards to convert the LINEIN jack into a second LINEOUT jack, thus | ||
61 | making it possible to output four independent audio channels! | ||
62 | |||
63 | There is a freely available software package that allows | ||
64 | MIDI file playback on this soundcard called Timidity. | ||
65 | See http://www.cgs.fi/~tt/timidity/. | ||
66 | |||
67 | |||
68 | |||
69 | Thomas Sailer | ||
70 | t.sailer@alumni.ethz.ch | ||
diff --git a/Documentation/sound/oss/rme96xx b/Documentation/sound/oss/rme96xx deleted file mode 100644 index 87d7b7b65fa1..000000000000 --- a/Documentation/sound/oss/rme96xx +++ /dev/null | |||
@@ -1,767 +0,0 @@ | |||
1 | Beta release of the rme96xx (driver for RME 96XX cards like the | ||
2 | "Hammerfall" and the "Hammerfall light") | ||
3 | |||
4 | Important: The driver module has to be installed on a freshly rebooted system, | ||
5 | otherwise the driver might not be able to acquire its buffers. | ||
6 | |||
7 | features: | ||
8 | |||
9 | - OSS programming interface (i.e. runs with standard OSS soundsoftware) | ||
10 | - OSS/Multichannel interface (OSS multichannel is done by just aquiring | ||
11 | more than 2 channels). The driver does not use more than one device | ||
12 | ( yet .. this feature may be implemented later ) | ||
13 | - more than one RME card supported | ||
14 | |||
15 | The driver uses a specific multichannel interface, which I will document | ||
16 | when the driver gets stable. (take a look at the defines in rme96xx.h, | ||
17 | which adds blocked multichannel formats i.e instead of | ||
18 | lrlrlrlr --> llllrrrr etc. | ||
19 | |||
20 | Use the "rmectrl" programm to look at the status of the card .. | ||
21 | or use xrmectrl, a GUI interface for the ctrl program. | ||
22 | |||
23 | What you can do with the rmectrl program is to set the stereo device for | ||
24 | OSS emulation (e.g. if you use SPDIF out). | ||
25 | |||
26 | You do: | ||
27 | |||
28 | ./ctrl offset 24 24 | ||
29 | |||
30 | which makes the stereo device use channels 25 and 26. | ||
31 | |||
32 | Guenter Geiger <geiger@epy.co.at> | ||
33 | |||
34 | copy the first part of the attached source code into rmectrl.c | ||
35 | and the second part into xrmectrl (or get the program from | ||
36 | http://gige.xdv.org/pages/soft/pages/rme) | ||
37 | |||
38 | to compile: gcc -o rmectrl rmectrl.c | ||
39 | ------------------------------ snip ------------------------------------ | ||
40 | |||
41 | #include <stdio.h> | ||
42 | #include <sys/types.h> | ||
43 | #include <sys/stat.h> | ||
44 | #include <sys/ioctl.h> | ||
45 | #include <fcntl.h> | ||
46 | #include <linux/soundcard.h> | ||
47 | #include <math.h> | ||
48 | #include <unistd.h> | ||
49 | #include <stdlib.h> | ||
50 | #include "rme96xx.h" | ||
51 | |||
52 | /* | ||
53 | remctrl.c | ||
54 | (C) 2000 Guenter Geiger <geiger@debian.org> | ||
55 | HP20020201 - Heiko Purnhagen <purnhage@tnt.uni-hannover.de> | ||
56 | */ | ||
57 | |||
58 | /* # define DEVICE_NAME "/dev/mixer" */ | ||
59 | # define DEVICE_NAME "/dev/mixer1" | ||
60 | |||
61 | |||
62 | void usage(void) | ||
63 | { | ||
64 | fprintf(stderr,"usage: rmectrl [/dev/mixer<n>] [command [options]]\n\n"); | ||
65 | fprintf(stderr,"where command is one of:\n"); | ||
66 | fprintf(stderr," help show this help\n"); | ||
67 | fprintf(stderr," status show status bits\n"); | ||
68 | fprintf(stderr," control show control bits\n"); | ||
69 | fprintf(stderr," mix show mixer/offset status\n"); | ||
70 | fprintf(stderr," master <n> set sync master\n"); | ||
71 | fprintf(stderr," pro <n> set spdif out pro\n"); | ||
72 | fprintf(stderr," emphasis <n> set spdif out emphasis\n"); | ||
73 | fprintf(stderr," dolby <n> set spdif out no audio\n"); | ||
74 | fprintf(stderr," optout <n> set spdif out optical\n"); | ||
75 | fprintf(stderr," wordclock <n> set sync wordclock\n"); | ||
76 | fprintf(stderr," spdifin <n> set spdif in (0=optical,1=coax,2=intern)\n"); | ||
77 | fprintf(stderr," syncref <n> set sync source (0=ADAT1,1=ADAT2,2=ADAT3,3=SPDIF)\n"); | ||
78 | fprintf(stderr," adat1cd <n> set ADAT1 on internal CD\n"); | ||
79 | fprintf(stderr," offset <devnr> <in> <out> set dev (0..3) offset (0..25)\n"); | ||
80 | exit(-1); | ||
81 | } | ||
82 | |||
83 | |||
84 | int main(int argc, char* argv[]) | ||
85 | { | ||
86 | int cards; | ||
87 | int ret; | ||
88 | int i; | ||
89 | double ft; | ||
90 | int fd, fdwr; | ||
91 | int param,orig; | ||
92 | rme_status_t stat; | ||
93 | rme_ctrl_t ctrl; | ||
94 | char *device; | ||
95 | int argidx; | ||
96 | |||
97 | if (argc < 2) | ||
98 | usage(); | ||
99 | |||
100 | if (*argv[1]=='/') { | ||
101 | device = argv[1]; | ||
102 | argidx = 2; | ||
103 | } | ||
104 | else { | ||
105 | device = DEVICE_NAME; | ||
106 | argidx = 1; | ||
107 | } | ||
108 | |||
109 | fprintf(stdout,"mixer device %s\n",device); | ||
110 | if ((fd = open(device,O_RDONLY)) < 0) { | ||
111 | fprintf(stdout,"opening device failed\n"); | ||
112 | exit(-1); | ||
113 | } | ||
114 | |||
115 | if ((fdwr = open(device,O_WRONLY)) < 0) { | ||
116 | fprintf(stdout,"opening device failed\n"); | ||
117 | exit(-1); | ||
118 | } | ||
119 | |||
120 | if (argc < argidx+1) | ||
121 | usage(); | ||
122 | |||
123 | if (!strcmp(argv[argidx],"help")) | ||
124 | usage(); | ||
125 | if (!strcmp(argv[argidx],"-h")) | ||
126 | usage(); | ||
127 | if (!strcmp(argv[argidx],"--help")) | ||
128 | usage(); | ||
129 | |||
130 | if (!strcmp(argv[argidx],"status")) { | ||
131 | ioctl(fd,SOUND_MIXER_PRIVATE2,&stat); | ||
132 | fprintf(stdout,"stat.irq %d\n",stat.irq); | ||
133 | fprintf(stdout,"stat.lockmask %d\n",stat.lockmask); | ||
134 | fprintf(stdout,"stat.sr48 %d\n",stat.sr48); | ||
135 | fprintf(stdout,"stat.wclock %d\n",stat.wclock); | ||
136 | fprintf(stdout,"stat.bufpoint %d\n",stat.bufpoint); | ||
137 | fprintf(stdout,"stat.syncmask %d\n",stat.syncmask); | ||
138 | fprintf(stdout,"stat.doublespeed %d\n",stat.doublespeed); | ||
139 | fprintf(stdout,"stat.tc_busy %d\n",stat.tc_busy); | ||
140 | fprintf(stdout,"stat.tc_out %d\n",stat.tc_out); | ||
141 | fprintf(stdout,"stat.crystalrate %d (0=64k 3=96k 4=88.2k 5=48k 6=44.1k 7=32k)\n",stat.crystalrate); | ||
142 | fprintf(stdout,"stat.spdif_error %d\n",stat.spdif_error); | ||
143 | fprintf(stdout,"stat.bufid %d\n",stat.bufid); | ||
144 | fprintf(stdout,"stat.tc_valid %d\n",stat.tc_valid); | ||
145 | exit (0); | ||
146 | } | ||
147 | |||
148 | if (!strcmp(argv[argidx],"control")) { | ||
149 | ioctl(fd,SOUND_MIXER_PRIVATE3,&ctrl); | ||
150 | fprintf(stdout,"ctrl.start %d\n",ctrl.start); | ||
151 | fprintf(stdout,"ctrl.latency %d (0=64 .. 7=8192)\n",ctrl.latency); | ||
152 | fprintf(stdout,"ctrl.master %d\n",ctrl.master); | ||
153 | fprintf(stdout,"ctrl.ie %d\n",ctrl.ie); | ||
154 | fprintf(stdout,"ctrl.sr48 %d\n",ctrl.sr48); | ||
155 | fprintf(stdout,"ctrl.spare %d\n",ctrl.spare); | ||
156 | fprintf(stdout,"ctrl.doublespeed %d\n",ctrl.doublespeed); | ||
157 | fprintf(stdout,"ctrl.pro %d\n",ctrl.pro); | ||
158 | fprintf(stdout,"ctrl.emphasis %d\n",ctrl.emphasis); | ||
159 | fprintf(stdout,"ctrl.dolby %d\n",ctrl.dolby); | ||
160 | fprintf(stdout,"ctrl.opt_out %d\n",ctrl.opt_out); | ||
161 | fprintf(stdout,"ctrl.wordclock %d\n",ctrl.wordclock); | ||
162 | fprintf(stdout,"ctrl.spdif_in %d (0=optical,1=coax,2=intern)\n",ctrl.spdif_in); | ||
163 | fprintf(stdout,"ctrl.sync_ref %d (0=ADAT1,1=ADAT2,2=ADAT3,3=SPDIF)\n",ctrl.sync_ref); | ||
164 | fprintf(stdout,"ctrl.spdif_reset %d\n",ctrl.spdif_reset); | ||
165 | fprintf(stdout,"ctrl.spdif_select %d\n",ctrl.spdif_select); | ||
166 | fprintf(stdout,"ctrl.spdif_clock %d\n",ctrl.spdif_clock); | ||
167 | fprintf(stdout,"ctrl.spdif_write %d\n",ctrl.spdif_write); | ||
168 | fprintf(stdout,"ctrl.adat1_cd %d\n",ctrl.adat1_cd); | ||
169 | exit (0); | ||
170 | } | ||
171 | |||
172 | if (!strcmp(argv[argidx],"mix")) { | ||
173 | rme_mixer mix; | ||
174 | int i; | ||
175 | |||
176 | for (i=0; i<4; i++) { | ||
177 | mix.devnr = i; | ||
178 | ioctl(fd,SOUND_MIXER_PRIVATE1,&mix); | ||
179 | if (mix.devnr == i) { | ||
180 | fprintf(stdout,"devnr %d\n",mix.devnr); | ||
181 | fprintf(stdout,"mix.i_offset %2d (0-25)\n",mix.i_offset); | ||
182 | fprintf(stdout,"mix.o_offset %2d (0-25)\n",mix.o_offset); | ||
183 | } | ||
184 | } | ||
185 | exit (0); | ||
186 | } | ||
187 | |||
188 | /* the control flags */ | ||
189 | |||
190 | if (argc < argidx+2) | ||
191 | usage(); | ||
192 | |||
193 | if (!strcmp(argv[argidx],"master")) { | ||
194 | int val = atoi(argv[argidx+1]); | ||
195 | ioctl(fd,SOUND_MIXER_PRIVATE3,&ctrl); | ||
196 | printf("master = %d\n",val); | ||
197 | ctrl.master = val; | ||
198 | ioctl(fdwr,SOUND_MIXER_PRIVATE3,&ctrl); | ||
199 | exit (0); | ||
200 | } | ||
201 | |||
202 | if (!strcmp(argv[argidx],"pro")) { | ||
203 | int val = atoi(argv[argidx+1]); | ||
204 | ioctl(fd,SOUND_MIXER_PRIVATE3,&ctrl); | ||
205 | printf("pro = %d\n",val); | ||
206 | ctrl.pro = val; | ||
207 | ioctl(fdwr,SOUND_MIXER_PRIVATE3,&ctrl); | ||
208 | exit (0); | ||
209 | } | ||
210 | |||
211 | if (!strcmp(argv[argidx],"emphasis")) { | ||
212 | int val = atoi(argv[argidx+1]); | ||
213 | ioctl(fd,SOUND_MIXER_PRIVATE3,&ctrl); | ||
214 | printf("emphasis = %d\n",val); | ||
215 | ctrl.emphasis = val; | ||
216 | ioctl(fdwr,SOUND_MIXER_PRIVATE3,&ctrl); | ||
217 | exit (0); | ||
218 | } | ||
219 | |||
220 | if (!strcmp(argv[argidx],"dolby")) { | ||
221 | int val = atoi(argv[argidx+1]); | ||
222 | ioctl(fd,SOUND_MIXER_PRIVATE3,&ctrl); | ||
223 | printf("dolby = %d\n",val); | ||
224 | ctrl.dolby = val; | ||
225 | ioctl(fdwr,SOUND_MIXER_PRIVATE3,&ctrl); | ||
226 | exit (0); | ||
227 | } | ||
228 | |||
229 | if (!strcmp(argv[argidx],"optout")) { | ||
230 | int val = atoi(argv[argidx+1]); | ||
231 | ioctl(fd,SOUND_MIXER_PRIVATE3,&ctrl); | ||
232 | printf("optout = %d\n",val); | ||
233 | ctrl.opt_out = val; | ||
234 | ioctl(fdwr,SOUND_MIXER_PRIVATE3,&ctrl); | ||
235 | exit (0); | ||
236 | } | ||
237 | |||
238 | if (!strcmp(argv[argidx],"wordclock")) { | ||
239 | int val = atoi(argv[argidx+1]); | ||
240 | ioctl(fd,SOUND_MIXER_PRIVATE3,&ctrl); | ||
241 | printf("wordclock = %d\n",val); | ||
242 | ctrl.wordclock = val; | ||
243 | ioctl(fdwr,SOUND_MIXER_PRIVATE3,&ctrl); | ||
244 | exit (0); | ||
245 | } | ||
246 | |||
247 | if (!strcmp(argv[argidx],"spdifin")) { | ||
248 | int val = atoi(argv[argidx+1]); | ||
249 | ioctl(fd,SOUND_MIXER_PRIVATE3,&ctrl); | ||
250 | printf("spdifin = %d\n",val); | ||
251 | ctrl.spdif_in = val; | ||
252 | ioctl(fdwr,SOUND_MIXER_PRIVATE3,&ctrl); | ||
253 | exit (0); | ||
254 | } | ||
255 | |||
256 | if (!strcmp(argv[argidx],"syncref")) { | ||
257 | int val = atoi(argv[argidx+1]); | ||
258 | ioctl(fd,SOUND_MIXER_PRIVATE3,&ctrl); | ||
259 | printf("syncref = %d\n",val); | ||
260 | ctrl.sync_ref = val; | ||
261 | ioctl(fdwr,SOUND_MIXER_PRIVATE3,&ctrl); | ||
262 | exit (0); | ||
263 | } | ||
264 | |||
265 | if (!strcmp(argv[argidx],"adat1cd")) { | ||
266 | int val = atoi(argv[argidx+1]); | ||
267 | ioctl(fd,SOUND_MIXER_PRIVATE3,&ctrl); | ||
268 | printf("adat1cd = %d\n",val); | ||
269 | ctrl.adat1_cd = val; | ||
270 | ioctl(fdwr,SOUND_MIXER_PRIVATE3,&ctrl); | ||
271 | exit (0); | ||
272 | } | ||
273 | |||
274 | /* setting offset */ | ||
275 | |||
276 | if (argc < argidx+4) | ||
277 | usage(); | ||
278 | |||
279 | if (!strcmp(argv[argidx],"offset")) { | ||
280 | rme_mixer mix; | ||
281 | |||
282 | mix.devnr = atoi(argv[argidx+1]); | ||
283 | |||
284 | mix.i_offset = atoi(argv[argidx+2]); | ||
285 | mix.o_offset = atoi(argv[argidx+3]); | ||
286 | ioctl(fdwr,SOUND_MIXER_PRIVATE1,&mix); | ||
287 | fprintf(stdout,"devnr %d\n",mix.devnr); | ||
288 | fprintf(stdout,"mix.i_offset to %d\n",mix.i_offset); | ||
289 | fprintf(stdout,"mix.o_offset to %d\n",mix.o_offset); | ||
290 | exit (0); | ||
291 | } | ||
292 | |||
293 | usage(); | ||
294 | exit (0); /* to avoid warning */ | ||
295 | } | ||
296 | |||
297 | |||
298 | ---------------------------- <snip> -------------------------------- | ||
299 | #!/usr/bin/wish | ||
300 | |||
301 | # xrmectrl | ||
302 | # (C) 2000 Guenter Geiger <geiger@debian.org> | ||
303 | # HP20020201 - Heiko Purnhagen <purnhage@tnt.uni-hannover.de> | ||
304 | |||
305 | #set defaults "-relief ridged" | ||
306 | set CTRLPROG "./rmectrl" | ||
307 | if {$argc} { | ||
308 | set CTRLPROG "$CTRLPROG $argv" | ||
309 | } | ||
310 | puts "CTRLPROG $CTRLPROG" | ||
311 | |||
312 | frame .butts | ||
313 | button .butts.exit -text "Exit" -command "exit" -relief ridge | ||
314 | #button .butts.state -text "State" -command "get_all" | ||
315 | |||
316 | pack .butts.exit -side left | ||
317 | pack .butts -side bottom | ||
318 | |||
319 | |||
320 | # | ||
321 | # STATUS | ||
322 | # | ||
323 | |||
324 | frame .status | ||
325 | |||
326 | # Sampling Rate | ||
327 | |||
328 | frame .status.sr | ||
329 | label .status.sr.text -text "Sampling Rate" -justify left | ||
330 | radiobutton .status.sr.441 -selectcolor red -text "44.1 kHz" -width 10 -anchor nw -variable srate -value 44100 -font times | ||
331 | radiobutton .status.sr.480 -selectcolor red -text "48 kHz" -width 10 -anchor nw -variable srate -value 48000 -font times | ||
332 | radiobutton .status.sr.882 -selectcolor red -text "88.2 kHz" -width 10 -anchor nw -variable srate -value 88200 -font times | ||
333 | radiobutton .status.sr.960 -selectcolor red -text "96 kHz" -width 10 -anchor nw -variable srate -value 96000 -font times | ||
334 | |||
335 | pack .status.sr.text .status.sr.441 .status.sr.480 .status.sr.882 .status.sr.960 -side top -padx 3 | ||
336 | |||
337 | # Lock | ||
338 | |||
339 | frame .status.lock | ||
340 | label .status.lock.text -text "Lock" -justify left | ||
341 | checkbutton .status.lock.adat1 -selectcolor red -text "ADAT1" -anchor nw -width 10 -variable adatlock1 -font times | ||
342 | checkbutton .status.lock.adat2 -selectcolor red -text "ADAT2" -anchor nw -width 10 -variable adatlock2 -font times | ||
343 | checkbutton .status.lock.adat3 -selectcolor red -text "ADAT3" -anchor nw -width 10 -variable adatlock3 -font times | ||
344 | |||
345 | pack .status.lock.text .status.lock.adat1 .status.lock.adat2 .status.lock.adat3 -side top -padx 3 | ||
346 | |||
347 | # Sync | ||
348 | |||
349 | frame .status.sync | ||
350 | label .status.sync.text -text "Sync" -justify left | ||
351 | checkbutton .status.sync.adat1 -selectcolor red -text "ADAT1" -anchor nw -width 10 -variable adatsync1 -font times | ||
352 | checkbutton .status.sync.adat2 -selectcolor red -text "ADAT2" -anchor nw -width 10 -variable adatsync2 -font times | ||
353 | checkbutton .status.sync.adat3 -selectcolor red -text "ADAT3" -anchor nw -width 10 -variable adatsync3 -font times | ||
354 | |||
355 | pack .status.sync.text .status.sync.adat1 .status.sync.adat2 .status.sync.adat3 -side top -padx 3 | ||
356 | |||
357 | # Timecode | ||
358 | |||
359 | frame .status.tc | ||
360 | label .status.tc.text -text "Timecode" -justify left | ||
361 | checkbutton .status.tc.busy -selectcolor red -text "busy" -anchor nw -width 10 -variable tcbusy -font times | ||
362 | checkbutton .status.tc.out -selectcolor red -text "out" -anchor nw -width 10 -variable tcout -font times | ||
363 | checkbutton .status.tc.valid -selectcolor red -text "valid" -anchor nw -width 10 -variable tcvalid -font times | ||
364 | |||
365 | pack .status.tc.text .status.tc.busy .status.tc.out .status.tc.valid -side top -padx 3 | ||
366 | |||
367 | # SPDIF In | ||
368 | |||
369 | frame .status.spdif | ||
370 | label .status.spdif.text -text "SPDIF In" -justify left | ||
371 | label .status.spdif.sr -text "--.- kHz" -anchor n -width 10 -font times | ||
372 | checkbutton .status.spdif.error -selectcolor red -text "Input Lock" -anchor nw -width 10 -variable spdiferr -font times | ||
373 | |||
374 | pack .status.spdif.text .status.spdif.sr .status.spdif.error -side top -padx 3 | ||
375 | |||
376 | pack .status.sr .status.lock .status.sync .status.tc .status.spdif -side left -fill x -anchor n -expand 1 | ||
377 | |||
378 | |||
379 | # | ||
380 | # CONTROL | ||
381 | # | ||
382 | |||
383 | proc setprof {} { | ||
384 | global CTRLPROG | ||
385 | global spprof | ||
386 | exec $CTRLPROG pro $spprof | ||
387 | } | ||
388 | |||
389 | proc setemph {} { | ||
390 | global CTRLPROG | ||
391 | global spemph | ||
392 | exec $CTRLPROG emphasis $spemph | ||
393 | } | ||
394 | |||
395 | proc setnoaud {} { | ||
396 | global CTRLPROG | ||
397 | global spnoaud | ||
398 | exec $CTRLPROG dolby $spnoaud | ||
399 | } | ||
400 | |||
401 | proc setoptical {} { | ||
402 | global CTRLPROG | ||
403 | global spoptical | ||
404 | exec $CTRLPROG optout $spoptical | ||
405 | } | ||
406 | |||
407 | proc setspdifin {} { | ||
408 | global CTRLPROG | ||
409 | global spdifin | ||
410 | exec $CTRLPROG spdifin [expr $spdifin - 1] | ||
411 | } | ||
412 | |||
413 | proc setsyncsource {} { | ||
414 | global CTRLPROG | ||
415 | global syncsource | ||
416 | exec $CTRLPROG syncref [expr $syncsource -1] | ||
417 | } | ||
418 | |||
419 | |||
420 | proc setmaster {} { | ||
421 | global CTRLPROG | ||
422 | global master | ||
423 | exec $CTRLPROG master $master | ||
424 | } | ||
425 | |||
426 | proc setwordclock {} { | ||
427 | global CTRLPROG | ||
428 | global wordclock | ||
429 | exec $CTRLPROG wordclock $wordclock | ||
430 | } | ||
431 | |||
432 | proc setadat1cd {} { | ||
433 | global CTRLPROG | ||
434 | global adat1cd | ||
435 | exec $CTRLPROG adat1cd $adat1cd | ||
436 | } | ||
437 | |||
438 | |||
439 | frame .control | ||
440 | |||
441 | # SPDIF In & SPDIF Out | ||
442 | |||
443 | |||
444 | frame .control.spdif | ||
445 | |||
446 | frame .control.spdif.in | ||
447 | label .control.spdif.in.text -text "SPDIF In" -justify left | ||
448 | radiobutton .control.spdif.in.input1 -text "Optical" -anchor nw -width 13 -variable spdifin -value 1 -command setspdifin -selectcolor blue -font times | ||
449 | radiobutton .control.spdif.in.input2 -text "Coaxial" -anchor nw -width 13 -variable spdifin -value 2 -command setspdifin -selectcolor blue -font times | ||
450 | radiobutton .control.spdif.in.input3 -text "Intern " -anchor nw -width 13 -variable spdifin -command setspdifin -value 3 -selectcolor blue -font times | ||
451 | |||
452 | checkbutton .control.spdif.in.adat1cd -text "ADAT1 Intern" -anchor nw -width 13 -variable adat1cd -command setadat1cd -selectcolor blue -font times | ||
453 | |||
454 | pack .control.spdif.in.text .control.spdif.in.input1 .control.spdif.in.input2 .control.spdif.in.input3 .control.spdif.in.adat1cd | ||
455 | |||
456 | label .control.spdif.space | ||
457 | |||
458 | frame .control.spdif.out | ||
459 | label .control.spdif.out.text -text "SPDIF Out" -justify left | ||
460 | checkbutton .control.spdif.out.pro -text "Professional" -anchor nw -width 13 -variable spprof -command setprof -selectcolor blue -font times | ||
461 | checkbutton .control.spdif.out.emphasis -text "Emphasis" -anchor nw -width 13 -variable spemph -command setemph -selectcolor blue -font times | ||
462 | checkbutton .control.spdif.out.dolby -text "NoAudio" -anchor nw -width 13 -variable spnoaud -command setnoaud -selectcolor blue -font times | ||
463 | checkbutton .control.spdif.out.optout -text "Optical Out" -anchor nw -width 13 -variable spoptical -command setoptical -selectcolor blue -font times | ||
464 | |||
465 | pack .control.spdif.out.optout .control.spdif.out.dolby .control.spdif.out.emphasis .control.spdif.out.pro .control.spdif.out.text -side bottom | ||
466 | |||
467 | pack .control.spdif.in .control.spdif.space .control.spdif.out -side top -fill y -padx 3 -expand 1 | ||
468 | |||
469 | # Sync Mode & Sync Source | ||
470 | |||
471 | frame .control.sync | ||
472 | frame .control.sync.mode | ||
473 | label .control.sync.mode.text -text "Sync Mode" -justify left | ||
474 | checkbutton .control.sync.mode.master -text "Master" -anchor nw -width 13 -variable master -command setmaster -selectcolor blue -font times | ||
475 | checkbutton .control.sync.mode.wc -text "Wordclock" -anchor nw -width 13 -variable wordclock -command setwordclock -selectcolor blue -font times | ||
476 | |||
477 | pack .control.sync.mode.text .control.sync.mode.master .control.sync.mode.wc | ||
478 | |||
479 | label .control.sync.space | ||
480 | |||
481 | frame .control.sync.src | ||
482 | label .control.sync.src.text -text "Sync Source" -justify left | ||
483 | radiobutton .control.sync.src.input1 -text "ADAT1" -anchor nw -width 13 -variable syncsource -value 1 -command setsyncsource -selectcolor blue -font times | ||
484 | radiobutton .control.sync.src.input2 -text "ADAT2" -anchor nw -width 13 -variable syncsource -value 2 -command setsyncsource -selectcolor blue -font times | ||
485 | radiobutton .control.sync.src.input3 -text "ADAT3" -anchor nw -width 13 -variable syncsource -command setsyncsource -value 3 -selectcolor blue -font times | ||
486 | radiobutton .control.sync.src.input4 -text "SPDIF" -anchor nw -width 13 -variable syncsource -command setsyncsource -value 4 -selectcolor blue -font times | ||
487 | |||
488 | pack .control.sync.src.input4 .control.sync.src.input3 .control.sync.src.input2 .control.sync.src.input1 .control.sync.src.text -side bottom | ||
489 | |||
490 | pack .control.sync.mode .control.sync.space .control.sync.src -side top -fill y -padx 3 -expand 1 | ||
491 | |||
492 | label .control.space -text "" -width 10 | ||
493 | |||
494 | # Buffer Size | ||
495 | |||
496 | frame .control.buf | ||
497 | label .control.buf.text -text "Buffer Size (Latency)" -justify left | ||
498 | radiobutton .control.buf.b1 -selectcolor red -text "64 (1.5 ms)" -width 13 -anchor nw -variable ssrate -value 1 -font times | ||
499 | radiobutton .control.buf.b2 -selectcolor red -text "128 (3 ms)" -width 13 -anchor nw -variable ssrate -value 2 -font times | ||
500 | radiobutton .control.buf.b3 -selectcolor red -text "256 (6 ms)" -width 13 -anchor nw -variable ssrate -value 3 -font times | ||
501 | radiobutton .control.buf.b4 -selectcolor red -text "512 (12 ms)" -width 13 -anchor nw -variable ssrate -value 4 -font times | ||
502 | radiobutton .control.buf.b5 -selectcolor red -text "1024 (23 ms)" -width 13 -anchor nw -variable ssrate -value 5 -font times | ||
503 | radiobutton .control.buf.b6 -selectcolor red -text "2048 (46 ms)" -width 13 -anchor nw -variable ssrate -value 6 -font times | ||
504 | radiobutton .control.buf.b7 -selectcolor red -text "4096 (93 ms)" -width 13 -anchor nw -variable ssrate -value 7 -font times | ||
505 | radiobutton .control.buf.b8 -selectcolor red -text "8192 (186 ms)" -width 13 -anchor nw -variable ssrate -value 8 -font times | ||
506 | |||
507 | pack .control.buf.text .control.buf.b1 .control.buf.b2 .control.buf.b3 .control.buf.b4 .control.buf.b5 .control.buf.b6 .control.buf.b7 .control.buf.b8 -side top -padx 3 | ||
508 | |||
509 | # Offset | ||
510 | |||
511 | frame .control.offset | ||
512 | |||
513 | frame .control.offset.in | ||
514 | label .control.offset.in.text -text "Offset In" -justify left | ||
515 | label .control.offset.in.off0 -text "dev\#0: -" -anchor nw -width 10 -font times | ||
516 | label .control.offset.in.off1 -text "dev\#1: -" -anchor nw -width 10 -font times | ||
517 | label .control.offset.in.off2 -text "dev\#2: -" -anchor nw -width 10 -font times | ||
518 | label .control.offset.in.off3 -text "dev\#3: -" -anchor nw -width 10 -font times | ||
519 | |||
520 | pack .control.offset.in.text .control.offset.in.off0 .control.offset.in.off1 .control.offset.in.off2 .control.offset.in.off3 | ||
521 | |||
522 | label .control.offset.space | ||
523 | |||
524 | frame .control.offset.out | ||
525 | label .control.offset.out.text -text "Offset Out" -justify left | ||
526 | label .control.offset.out.off0 -text "dev\#0: -" -anchor nw -width 10 -font times | ||
527 | label .control.offset.out.off1 -text "dev\#1: -" -anchor nw -width 10 -font times | ||
528 | label .control.offset.out.off2 -text "dev\#2: -" -anchor nw -width 10 -font times | ||
529 | label .control.offset.out.off3 -text "dev\#3: -" -anchor nw -width 10 -font times | ||
530 | |||
531 | pack .control.offset.out.off3 .control.offset.out.off2 .control.offset.out.off1 .control.offset.out.off0 .control.offset.out.text -side bottom | ||
532 | |||
533 | pack .control.offset.in .control.offset.space .control.offset.out -side top -fill y -padx 3 -expand 1 | ||
534 | |||
535 | |||
536 | pack .control.spdif .control.sync .control.space .control.buf .control.offset -side left -fill both -anchor n -expand 1 | ||
537 | |||
538 | |||
539 | label .statustext -text Status -justify center -relief ridge | ||
540 | label .controltext -text Control -justify center -relief ridge | ||
541 | |||
542 | label .statusspace | ||
543 | label .controlspace | ||
544 | |||
545 | pack .statustext .status .statusspace .controltext .control .controlspace -side top -anchor nw -fill both -expand 1 | ||
546 | |||
547 | |||
548 | proc get_bit {output sstr} { | ||
549 | set idx1 [string last [concat $sstr 1] $output] | ||
550 | set idx1 [expr $idx1 != -1] | ||
551 | return $idx1 | ||
552 | } | ||
553 | |||
554 | proc get_val {output sstr} { | ||
555 | set val [string wordend $output [string last $sstr $output]] | ||
556 | set val [string range $output $val [expr $val+1]] | ||
557 | return $val | ||
558 | } | ||
559 | |||
560 | proc get_val2 {output sstr} { | ||
561 | set val [string wordend $output [string first $sstr $output]] | ||
562 | set val [string range $output $val [expr $val+2]] | ||
563 | return $val | ||
564 | } | ||
565 | |||
566 | proc get_control {} { | ||
567 | global spprof | ||
568 | global spemph | ||
569 | global spnoaud | ||
570 | global spoptical | ||
571 | global spdifin | ||
572 | global ssrate | ||
573 | global master | ||
574 | global wordclock | ||
575 | global syncsource | ||
576 | global CTRLPROG | ||
577 | |||
578 | set f [open "| $CTRLPROG control" r+] | ||
579 | set ooo [read $f 1000] | ||
580 | close $f | ||
581 | # puts $ooo | ||
582 | |||
583 | set spprof [ get_bit $ooo "pro"] | ||
584 | set spemph [ get_bit $ooo "emphasis"] | ||
585 | set spnoaud [ get_bit $ooo "dolby"] | ||
586 | set spoptical [ get_bit $ooo "opt_out"] | ||
587 | set spdifin [ expr [ get_val $ooo "spdif_in"] + 1] | ||
588 | set ssrate [ expr [ get_val $ooo "latency"] + 1] | ||
589 | set master [ expr [ get_val $ooo "master"]] | ||
590 | set wordclock [ expr [ get_val $ooo "wordclock"]] | ||
591 | set syncsource [ expr [ get_val $ooo "sync_ref"] + 1] | ||
592 | } | ||
593 | |||
594 | proc get_status {} { | ||
595 | global srate | ||
596 | global ctrlcom | ||
597 | |||
598 | global adatlock1 | ||
599 | global adatlock2 | ||
600 | global adatlock3 | ||
601 | |||
602 | global adatsync1 | ||
603 | global adatsync2 | ||
604 | global adatsync3 | ||
605 | |||
606 | global tcbusy | ||
607 | global tcout | ||
608 | global tcvalid | ||
609 | |||
610 | global spdiferr | ||
611 | global crystal | ||
612 | global .status.spdif.text | ||
613 | global CTRLPROG | ||
614 | |||
615 | |||
616 | set f [open "| $CTRLPROG status" r+] | ||
617 | set ooo [read $f 1000] | ||
618 | close $f | ||
619 | # puts $ooo | ||
620 | |||
621 | # samplerate | ||
622 | |||
623 | set idx1 [string last "sr48 1" $ooo] | ||
624 | set idx2 [string last "doublespeed 1" $ooo] | ||
625 | if {$idx1 >= 0} { | ||
626 | set fact1 48000 | ||
627 | } else { | ||
628 | set fact1 44100 | ||
629 | } | ||
630 | |||
631 | if {$idx2 >= 0} { | ||
632 | set fact2 2 | ||
633 | } else { | ||
634 | set fact2 1 | ||
635 | } | ||
636 | set srate [expr $fact1 * $fact2] | ||
637 | # ADAT lock | ||
638 | |||
639 | set val [get_val $ooo lockmask] | ||
640 | set adatlock1 0 | ||
641 | set adatlock2 0 | ||
642 | set adatlock3 0 | ||
643 | if {[expr $val & 1]} { | ||
644 | set adatlock3 1 | ||
645 | } | ||
646 | if {[expr $val & 2]} { | ||
647 | set adatlock2 1 | ||
648 | } | ||
649 | if {[expr $val & 4]} { | ||
650 | set adatlock1 1 | ||
651 | } | ||
652 | |||
653 | # ADAT sync | ||
654 | set val [get_val $ooo syncmask] | ||
655 | set adatsync1 0 | ||
656 | set adatsync2 0 | ||
657 | set adatsync3 0 | ||
658 | |||
659 | if {[expr $val & 1]} { | ||
660 | set adatsync3 1 | ||
661 | } | ||
662 | if {[expr $val & 2]} { | ||
663 | set adatsync2 1 | ||
664 | } | ||
665 | if {[expr $val & 4]} { | ||
666 | set adatsync1 1 | ||
667 | } | ||
668 | |||
669 | # TC busy | ||
670 | |||
671 | set tcbusy [get_bit $ooo "busy"] | ||
672 | set tcout [get_bit $ooo "out"] | ||
673 | set tcvalid [get_bit $ooo "valid"] | ||
674 | set spdiferr [expr [get_bit $ooo "spdif_error"] == 0] | ||
675 | |||
676 | # 000=64kHz, 100=88.2kHz, 011=96kHz | ||
677 | # 111=32kHz, 110=44.1kHz, 101=48kHz | ||
678 | |||
679 | set val [get_val $ooo crystalrate] | ||
680 | |||
681 | set crystal "--.- kHz" | ||
682 | if {$val == 0} { | ||
683 | set crystal "64 kHz" | ||
684 | } | ||
685 | if {$val == 4} { | ||
686 | set crystal "88.2 kHz" | ||
687 | } | ||
688 | if {$val == 3} { | ||
689 | set crystal "96 kHz" | ||
690 | } | ||
691 | if {$val == 7} { | ||
692 | set crystal "32 kHz" | ||
693 | } | ||
694 | if {$val == 6} { | ||
695 | set crystal "44.1 kHz" | ||
696 | } | ||
697 | if {$val == 5} { | ||
698 | set crystal "48 kHz" | ||
699 | } | ||
700 | .status.spdif.sr configure -text $crystal | ||
701 | } | ||
702 | |||
703 | proc get_offset {} { | ||
704 | global inoffset | ||
705 | global outoffset | ||
706 | global CTRLPROG | ||
707 | |||
708 | set f [open "| $CTRLPROG mix" r+] | ||
709 | set ooo [read $f 1000] | ||
710 | close $f | ||
711 | # puts $ooo | ||
712 | |||
713 | if { [string match "*devnr*" $ooo] } { | ||
714 | set ooo [string range $ooo [string wordend $ooo [string first devnr $ooo]] end] | ||
715 | set val [get_val2 $ooo i_offset] | ||
716 | .control.offset.in.off0 configure -text "dev\#0: $val" | ||
717 | set val [get_val2 $ooo o_offset] | ||
718 | .control.offset.out.off0 configure -text "dev\#0: $val" | ||
719 | } else { | ||
720 | .control.offset.in.off0 configure -text "dev\#0: -" | ||
721 | .control.offset.out.off0 configure -text "dev\#0: -" | ||
722 | } | ||
723 | if { [string match "*devnr*" $ooo] } { | ||
724 | set ooo [string range $ooo [string wordend $ooo [string first devnr $ooo]] end] | ||
725 | set val [get_val2 $ooo i_offset] | ||
726 | .control.offset.in.off1 configure -text "dev\#1: $val" | ||
727 | set val [get_val2 $ooo o_offset] | ||
728 | .control.offset.out.off1 configure -text "dev\#1: $val" | ||
729 | } else { | ||
730 | .control.offset.in.off1 configure -text "dev\#1: -" | ||
731 | .control.offset.out.off1 configure -text "dev\#1: -" | ||
732 | } | ||
733 | if { [string match "*devnr*" $ooo] } { | ||
734 | set ooo [string range $ooo [string wordend $ooo [string first devnr $ooo]] end] | ||
735 | set val [get_val2 $ooo i_offset] | ||
736 | .control.offset.in.off2 configure -text "dev\#2: $val" | ||
737 | set val [get_val2 $ooo o_offset] | ||
738 | .control.offset.out.off2 configure -text "dev\#2: $val" | ||
739 | } else { | ||
740 | .control.offset.in.off2 configure -text "dev\#2: -" | ||
741 | .control.offset.out.off2 configure -text "dev\#2: -" | ||
742 | } | ||
743 | if { [string match "*devnr*" $ooo] } { | ||
744 | set ooo [string range $ooo [string wordend $ooo [string first devnr $ooo]] end] | ||
745 | set val [get_val2 $ooo i_offset] | ||
746 | .control.offset.in.off3 configure -text "dev\#3: $val" | ||
747 | set val [get_val2 $ooo o_offset] | ||
748 | .control.offset.out.off3 configure -text "dev\#3: $val" | ||
749 | } else { | ||
750 | .control.offset.in.off3 configure -text "dev\#3: -" | ||
751 | .control.offset.out.off3 configure -text "dev\#3: -" | ||
752 | } | ||
753 | } | ||
754 | |||
755 | |||
756 | proc get_all {} { | ||
757 | get_status | ||
758 | get_control | ||
759 | get_offset | ||
760 | } | ||
761 | |||
762 | # main | ||
763 | while {1} { | ||
764 | after 200 | ||
765 | get_all | ||
766 | update | ||
767 | } | ||
diff --git a/Documentation/sound/oss/solo1 b/Documentation/sound/oss/solo1 deleted file mode 100644 index 95c4c83422b3..000000000000 --- a/Documentation/sound/oss/solo1 +++ /dev/null | |||
@@ -1,70 +0,0 @@ | |||
1 | Recording | ||
2 | --------- | ||
3 | |||
4 | Recording does not work on the author's card, but there | ||
5 | is at least one report of it working on later silicon. | ||
6 | The chip behaves differently than described in the data sheet, | ||
7 | likely due to a chip bug. Working around this would require | ||
8 | the help of ESS (for example by publishing an errata sheet), | ||
9 | but ESS has not done so far. | ||
10 | |||
11 | Also, the chip only supports 24 bit addresses for recording, | ||
12 | which means it cannot work on some Alpha mainboards. | ||
13 | |||
14 | |||
15 | /proc/sound, /dev/sndstat | ||
16 | ------------------------- | ||
17 | |||
18 | /proc/sound and /dev/sndstat is not supported by the | ||
19 | driver. To find out whether the driver succeeded loading, | ||
20 | check the kernel log (dmesg). | ||
21 | |||
22 | |||
23 | ALaw/uLaw sample formats | ||
24 | ------------------------ | ||
25 | |||
26 | This driver does not support the ALaw/uLaw sample formats. | ||
27 | ALaw is the default mode when opening a sound device | ||
28 | using OSS/Free. The reason for the lack of support is | ||
29 | that the hardware does not support these formats, and adding | ||
30 | conversion routines to the kernel would lead to very ugly | ||
31 | code in the presence of the mmap interface to the driver. | ||
32 | And since xquake uses mmap, mmap is considered important :-) | ||
33 | and no sane application uses ALaw/uLaw these days anyway. | ||
34 | In short, playing a Sun .au file as follows: | ||
35 | |||
36 | cat my_file.au > /dev/dsp | ||
37 | |||
38 | does not work. Instead, you may use the play script from | ||
39 | Chris Bagwell's sox-12.14 package (or later, available from the URL | ||
40 | below) to play many different audio file formats. | ||
41 | The script automatically determines the audio format | ||
42 | and does do audio conversions if necessary. | ||
43 | http://home.sprynet.com/sprynet/cbagwell/projects.html | ||
44 | |||
45 | |||
46 | Blocking vs. nonblocking IO | ||
47 | --------------------------- | ||
48 | |||
49 | Unlike OSS/Free this driver honours the O_NONBLOCK file flag | ||
50 | not only during open, but also during read and write. | ||
51 | This is an effort to make the sound driver interface more | ||
52 | regular. Timidity has problems with this; a patch | ||
53 | is available from http://www.ife.ee.ethz.ch/~sailer/linux/pciaudio.html. | ||
54 | (Timidity patched will also run on OSS/Free). | ||
55 | |||
56 | |||
57 | MIDI UART | ||
58 | --------- | ||
59 | |||
60 | The driver supports a simple MIDI UART interface, with | ||
61 | no ioctl's supported. | ||
62 | |||
63 | |||
64 | MIDI synthesizer | ||
65 | ---------------- | ||
66 | |||
67 | The card has an OPL compatible FM synthesizer. | ||
68 | |||
69 | Thomas Sailer | ||
70 | t.sailer@alumni.ethz.ch | ||
diff --git a/Documentation/sound/oss/sonicvibes b/Documentation/sound/oss/sonicvibes deleted file mode 100644 index 84dee2e0b37d..000000000000 --- a/Documentation/sound/oss/sonicvibes +++ /dev/null | |||
@@ -1,81 +0,0 @@ | |||
1 | /proc/sound, /dev/sndstat | ||
2 | ------------------------- | ||
3 | |||
4 | /proc/sound and /dev/sndstat is not supported by the | ||
5 | driver. To find out whether the driver succeeded loading, | ||
6 | check the kernel log (dmesg). | ||
7 | |||
8 | |||
9 | ALaw/uLaw sample formats | ||
10 | ------------------------ | ||
11 | |||
12 | This driver does not support the ALaw/uLaw sample formats. | ||
13 | ALaw is the default mode when opening a sound device | ||
14 | using OSS/Free. The reason for the lack of support is | ||
15 | that the hardware does not support these formats, and adding | ||
16 | conversion routines to the kernel would lead to very ugly | ||
17 | code in the presence of the mmap interface to the driver. | ||
18 | And since xquake uses mmap, mmap is considered important :-) | ||
19 | and no sane application uses ALaw/uLaw these days anyway. | ||
20 | In short, playing a Sun .au file as follows: | ||
21 | |||
22 | cat my_file.au > /dev/dsp | ||
23 | |||
24 | does not work. Instead, you may use the play script from | ||
25 | Chris Bagwell's sox-12.14 package (available from the URL | ||
26 | below) to play many different audio file formats. | ||
27 | The script automatically determines the audio format | ||
28 | and does do audio conversions if necessary. | ||
29 | http://home.sprynet.com/sprynet/cbagwell/projects.html | ||
30 | |||
31 | |||
32 | Blocking vs. nonblocking IO | ||
33 | --------------------------- | ||
34 | |||
35 | Unlike OSS/Free this driver honours the O_NONBLOCK file flag | ||
36 | not only during open, but also during read and write. | ||
37 | This is an effort to make the sound driver interface more | ||
38 | regular. Timidity has problems with this; a patch | ||
39 | is available from http://www.ife.ee.ethz.ch/~sailer/linux/pciaudio.html. | ||
40 | (Timidity patched will also run on OSS/Free). | ||
41 | |||
42 | |||
43 | MIDI UART | ||
44 | --------- | ||
45 | |||
46 | The driver supports a simple MIDI UART interface, with | ||
47 | no ioctl's supported. | ||
48 | |||
49 | |||
50 | MIDI synthesizer | ||
51 | ---------------- | ||
52 | |||
53 | The card both has an OPL compatible FM synthesizer as well as | ||
54 | a wavetable synthesizer. | ||
55 | |||
56 | I haven't managed so far to get the OPL synth running. | ||
57 | |||
58 | Using the wavetable synthesizer requires allocating | ||
59 | 1-4MB of physically contiguous memory, which isn't possible | ||
60 | currently on Linux without ugly hacks like the bigphysarea | ||
61 | patch. Therefore, the driver doesn't support wavetable | ||
62 | synthesis. | ||
63 | |||
64 | |||
65 | No support from S3 | ||
66 | ------------------ | ||
67 | |||
68 | I do not get any support from S3. Therefore, the driver | ||
69 | still has many problems. For example, although the manual | ||
70 | states that the chip should be able to access the sample | ||
71 | buffer anywhere in 32bit address space, I haven't managed to | ||
72 | get it working with buffers above 16M. Therefore, the card | ||
73 | has the same disadvantages as ISA soundcards. | ||
74 | |||
75 | Given that the card is also very noisy, and if you haven't | ||
76 | already bought it, you should strongly opt for one of the | ||
77 | comparatively priced Ensoniq products. | ||
78 | |||
79 | |||
80 | Thomas Sailer | ||
81 | t.sailer@alumni.ethz.ch | ||