diff options
| author | Linus Torvalds <torvalds@ppc970.osdl.org> | 2004-04-12 02:21:00 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2004-04-12 02:21:00 -0700 |
| commit | 0d61fc5ea78015def4d2fcf9b598ecfe25210cdd (patch) | |
| tree | a45aa0f67c6bbd200dc2a328e560042810307b1b /Documentation | |
| parent | f2eb250f07ba4695c2474cb8b6edbf64b5457d65 (diff) | |
| parent | eb880e5457f8b4a61ff7fd36d47dd14fe51cb030 (diff) | |
Merge bk://bk.arm.linux.org.uk/linux-2.6-rmk
into ppc970.osdl.org:/home/torvalds/v2.6/linux
Diffstat (limited to 'Documentation')
24 files changed, 1090 insertions, 207 deletions
diff --git a/Documentation/Changes b/Documentation/Changes index cbf22242b12d..22ec89259ee9 100644 --- a/Documentation/Changes +++ b/Documentation/Changes @@ -112,8 +112,8 @@ System utilities Architectural changes --------------------- -DevFS is now in the kernel. See Documentation/filesystems/devfs/* in -the kernel source tree for all the gory details. +DevFS has been obsoleted in favour of udev +(http://www.kernel.org/pub/linux/utils/kernel/hotplug/) 32-bit UID support is now in place. Have fun! @@ -400,8 +400,3 @@ NFS-Utils o <http://nfs.sourceforge.net/> -Suggestions and corrections -=========================== - -Please feel free to submit changes, corrections, gripes, flames, -money, etc. to me <chris.ricker@genetics.utah.edu>. Happy Linuxing! diff --git a/Documentation/CodingStyle b/Documentation/CodingStyle index dcef6d52de2c..7b256c12a5f5 100644 --- a/Documentation/CodingStyle +++ b/Documentation/CodingStyle @@ -254,6 +254,8 @@ values. To do the latter, you can stick the following in your .emacs file: (interactive) (c-mode) (c-set-style "K&R") + (setq tab-width 8) + (setq indent-tabs-mode t) (setq c-basic-offset 8)) This will define the M-x linux-c-mode command. When hacking on a diff --git a/Documentation/DocBook/kernel-hacking.tmpl b/Documentation/DocBook/kernel-hacking.tmpl index be80635aa0e0..9cf7cd0cdb57 100644 --- a/Documentation/DocBook/kernel-hacking.tmpl +++ b/Documentation/DocBook/kernel-hacking.tmpl @@ -204,11 +204,11 @@ </para> <para> - <filename class=headerfile>include/linux/interrupt.h</filename> lists the + <filename class="headerfile">include/linux/interrupt.h</filename> lists the different BH's. No matter how many CPUs you have, no two BHs will run at the same time. This made the transition to SMP simpler, but sucks hard for scalable performance. A very important bottom half is the timer - BH (<filename class=headerfile>include/linux/timer.h</filename>): you + BH (<filename class="headerfile">include/linux/timer.h</filename>): you can register to have it call functions for you in a given length of time. </para> @@ -224,7 +224,7 @@ </para> <para> - tasklets (<filename class=headerfile>include/linux/interrupt.h</filename>) + tasklets (<filename class="headerfile">include/linux/interrupt.h</filename>) are like softirqs, except they are dynamically-registrable (meaning you can have as many as you want), and they also guarantee that any tasklet will only run on one CPU at any time, although different tasklets can @@ -241,7 +241,7 @@ <para> You can tell you are in a softirq (or bottom half, or tasklet) using the <function>in_softirq()</function> macro - (<filename class=headerfile>include/asm/hardirq.h</filename>). + (<filename class="headerfile">include/asm/hardirq.h</filename>). </para> <caution> <para> @@ -330,7 +330,7 @@ asmlinkage long sys_mycall(int arg) You create a character device and implement an appropriate ioctl for it. This is much more flexible than system calls, doesn't have to be entered in every architecture's - <filename class=headerfile>include/asm/unistd.h</filename> and + <filename class="headerfile">include/asm/unistd.h</filename> and <filename>arch/kernel/entry.S</filename> file, and is much more likely to be accepted by Linus. </para> @@ -343,7 +343,7 @@ asmlinkage long sys_mycall(int arg) <para> Inside the ioctl you're in user context to a process. When a error occurs you return a negated errno (see - <filename class=headerfile>include/linux/errno.h</filename>), + <filename class="headerfile">include/linux/errno.h</filename>), otherwise you return <returnvalue>0</returnvalue>. </para> @@ -429,7 +429,7 @@ cond_resched(); /* Will sleep */ <sect1 id="routines-printk"> <title> <function>printk()</function> - <filename class=headerfile>include/linux/kernel.h</filename> + <filename class="headerfile">include/linux/kernel.h</filename> </title> <para> @@ -447,7 +447,7 @@ printk(KERN_INFO "i = %u\n", i); </programlisting> <para> - See <filename class=headerfile>include/linux/kernel.h</filename>; + See <filename class="headerfile">include/linux/kernel.h</filename>; for other KERN_ values; these are interpreted by syslog as the level. Special case: for printing an IP address use </para> @@ -487,7 +487,7 @@ printk(KERN_INFO "my ip: %d.%d.%d.%d\n", NIPQUAD(ipaddress)); <function>get_user()</function> / <function>put_user()</function> - <filename class=headerfile>include/asm/uaccess.h</filename> + <filename class="headerfile">include/asm/uaccess.h</filename> </title> <para> @@ -525,7 +525,7 @@ printk(KERN_INFO "my ip: %d.%d.%d.%d\n", NIPQUAD(ipaddress)); <sect1 id="routines-kmalloc"> <title><function>kmalloc()</function>/<function>kfree()</function> - <filename class=headerfile>include/linux/slab.h</filename></title> + <filename class="headerfile">include/linux/slab.h</filename></title> <para> <emphasis>[MAY SLEEP: SEE BELOW]</emphasis> @@ -593,10 +593,10 @@ printk(KERN_INFO "my ip: %d.%d.%d.%d\n", NIPQUAD(ipaddress)); <para> If you are allocating at least <constant>PAGE_SIZE</constant> - (<filename class=headerfile>include/asm/page.h</filename>) bytes, + (<filename class="headerfile">include/asm/page.h</filename>) bytes, consider using <function>__get_free_pages()</function> - (<filename class=headerfile>include/linux/mm.h</filename>). It + (<filename class="headerfile">include/linux/mm.h</filename>). It takes an order argument (0 for page sized, 1 for double page, 2 for four pages etc.) and the same memory priority flag word as above. @@ -619,13 +619,13 @@ printk(KERN_INFO "my ip: %d.%d.%d.%d\n", NIPQUAD(ipaddress)); <para> Before inventing your own cache of often-used objects consider using a slab cache in - <filename class=headerfile>include/linux/slab.h</filename> + <filename class="headerfile">include/linux/slab.h</filename> </para> </sect1> <sect1 id="routines-current"> <title><function>current</function> - <filename class=headerfile>include/asm/current.h</filename></title> + <filename class="headerfile">include/asm/current.h</filename></title> <para> This global variable (really a macro) contains a pointer to @@ -638,8 +638,8 @@ printk(KERN_INFO "my ip: %d.%d.%d.%d\n", NIPQUAD(ipaddress)); <sect1 id="routines-udelay"> <title><function>udelay()</function>/<function>mdelay()</function> - <filename class=headerfile>include/asm/delay.h</filename> - <filename class=headerfile>include/linux/delay.h</filename> + <filename class="headerfile">include/asm/delay.h</filename> + <filename class="headerfile">include/linux/delay.h</filename> </title> <para> @@ -652,7 +652,7 @@ printk(KERN_INFO "my ip: %d.%d.%d.%d\n", NIPQUAD(ipaddress)); <sect1 id="routines-endian"> <title><function>cpu_to_be32()</function>/<function>be32_to_cpu()</function>/<function>cpu_to_le32()</function>/<function>le32_to_cpu()</function> - <filename class=headerfile>include/asm/byteorder.h</filename> + <filename class="headerfile">include/asm/byteorder.h</filename> </title> <para> @@ -675,7 +675,7 @@ printk(KERN_INFO "my ip: %d.%d.%d.%d\n", NIPQUAD(ipaddress)); <sect1 id="routines-local-irqs"> <title><function>local_irq_save()</function>/<function>local_irq_restore()</function> - <filename class=headerfile>include/asm/system.h</filename> + <filename class="headerfile">include/asm/system.h</filename> </title> <para> @@ -690,7 +690,7 @@ printk(KERN_INFO "my ip: %d.%d.%d.%d\n", NIPQUAD(ipaddress)); <sect1 id="routines-softirqs"> <title><function>local_bh_disable()</function>/<function>local_bh_enable()</function> - <filename class=headerfile>include/linux/interrupt.h</filename></title> + <filename class="headerfile">include/linux/interrupt.h</filename></title> <para> These routines disable soft interrupts on the local CPU, and @@ -703,7 +703,7 @@ printk(KERN_INFO "my ip: %d.%d.%d.%d\n", NIPQUAD(ipaddress)); <sect1 id="routines-processorids"> <title><function>smp_processor_id</function>() - <filename class=headerfile>include/asm/smp.h</filename></title> + <filename class="headerfile">include/asm/smp.h</filename></title> <para> <function>smp_processor_id()</function> returns the current @@ -715,7 +715,7 @@ printk(KERN_INFO "my ip: %d.%d.%d.%d\n", NIPQUAD(ipaddress)); <sect1 id="routines-init"> <title><type>__init</type>/<type>__exit</type>/<type>__initdata</type> - <filename class=headerfile>include/linux/init.h</filename></title> + <filename class="headerfile">include/linux/init.h</filename></title> <para> After boot, the kernel frees up a special section; functions @@ -738,7 +738,7 @@ printk(KERN_INFO "my ip: %d.%d.%d.%d\n", NIPQUAD(ipaddress)); <sect1 id="routines-init-again"> <title><function>__initcall()</function>/<function>module_init()</function> - <filename class=headerfile>include/linux/init.h</filename></title> + <filename class="headerfile">include/linux/init.h</filename></title> <para> Many parts of the kernel are well served as a module (dynamically-loadable parts of the kernel). Using the @@ -768,7 +768,7 @@ printk(KERN_INFO "my ip: %d.%d.%d.%d\n", NIPQUAD(ipaddress)); <sect1 id="routines-moduleexit"> <title> <function>module_exit()</function> - <filename class=headerfile>include/linux/init.h</filename> </title> + <filename class="headerfile">include/linux/init.h</filename> </title> <para> This macro defines the function to be called at module removal @@ -781,7 +781,7 @@ printk(KERN_INFO "my ip: %d.%d.%d.%d\n", NIPQUAD(ipaddress)); <sect1 id="routines-module-use-counters"> <title> <function>MOD_INC_USE_COUNT</function>/<function>MOD_DEC_USE_COUNT</function> - <filename class=headerfile>include/linux/module.h</filename></title> + <filename class="headerfile">include/linux/module.h</filename></title> <para> These manipulate the module usage count, to protect against @@ -839,7 +839,7 @@ foo_open (...) <chapter id="queues"> <title>Wait Queues - <filename class=headerfile>include/linux/wait.h</filename> + <filename class="headerfile">include/linux/wait.h</filename> </title> <para> <emphasis>[SLEEPS]</emphasis> @@ -874,7 +874,7 @@ foo_open (...) There is a macro to do this: <function>wait_event_interruptible()</function> - <filename class=headerfile>include/linux/sched.h</filename> The + <filename class="headerfile">include/linux/sched.h</filename> The first argument is the wait queue head, and the second is an expression which is evaluated; the macro returns <returnvalue>0</returnvalue> when this expression is true, or @@ -900,7 +900,7 @@ foo_open (...) <para> Call <function>wake_up()</function> - <filename class=headerfile>include/linux/sched.h</filename>;, + <filename class="headerfile">include/linux/sched.h</filename>;, which will wake up every process in the queue. The exception is if one has <constant>TASK_EXCLUSIVE</constant> set, in which case the remainder of the queue will not be woken. @@ -915,7 +915,7 @@ foo_open (...) Certain operations are guaranteed atomic on all platforms. The first class of operations work on <type>atomic_t</type> - <filename class=headerfile>include/asm/atomic.h</filename>; this + <filename class="headerfile">include/asm/atomic.h</filename>; this contains a signed integer (at least 24 bits long), and you must use these functions to manipulate or read atomic_t variables. <function>atomic_read()</function> and @@ -943,7 +943,7 @@ foo_open (...) The second class of atomic operations is atomic bit operations on a <type>long</type>, defined in - <filename class=headerfile>include/asm/bitops.h</filename>. These + <filename class="headerfile">include/asm/bitops.h</filename>. These operations generally take a pointer to the bit pattern, and a bit number: 0 is the least significant bit. <function>set_bit()</function>, <function>clear_bit()</function> @@ -982,7 +982,7 @@ foo_open (...) <sect1 id="sym-exportsymbols"> <title><function>EXPORT_SYMBOL()</function> - <filename class=headerfile>include/linux/module.h</filename></title> + <filename class="headerfile">include/linux/module.h</filename></title> <para> This is the classic method of exporting a symbol, and it works @@ -995,7 +995,7 @@ foo_open (...) <sect1 id="sym-exportsymbols-gpl"> <title><function>EXPORT_SYMBOL_GPL()</function> - <filename class=headerfile>include/linux/module.h</filename></title> + <filename class="headerfile">include/linux/module.h</filename></title> <para> Similar to <function>EXPORT_SYMBOL()</function> except that the @@ -1012,7 +1012,7 @@ foo_open (...) <sect1 id="conventions-doublelinkedlist"> <title>Double-linked lists - <filename class=headerfile>include/linux/list.h</filename></title> + <filename class="headerfile">include/linux/list.h</filename></title> <para> There are three sets of linked-list routines in the kernel @@ -1039,7 +1039,7 @@ foo_open (...) <para> The filesystem code uses <function>ERR_PTR()</function> - <filename class=headerfile>include/linux/fs.h</filename>; to + <filename class="headerfile">include/linux/fs.h</filename>; to encode a negative error number into a pointer, and <function>IS_ERR()</function> and <function>PTR_ERR()</function> to get it back out again: avoids a separate pointer parameter for diff --git a/Documentation/DocBook/kernel-locking.tmpl b/Documentation/DocBook/kernel-locking.tmpl index 96d074d97fb6..4fd97de055ca 100644 --- a/Documentation/DocBook/kernel-locking.tmpl +++ b/Documentation/DocBook/kernel-locking.tmpl @@ -87,7 +87,7 @@ <table> <title>Expected Results</title> - <tgroup cols=2 align=left> + <tgroup cols="2" align="left"> <thead> <row> @@ -133,7 +133,7 @@ <table> <title>Possible Results</title> - <tgroup cols=2 align=left> + <tgroup cols="2" align="left"> <thead> <row> <entry>Instance 1</entry> @@ -222,14 +222,14 @@ <para> There are two main types of kernel locks. The fundamental type is the spinlock - (<filename class=headerfile>include/asm/spinlock.h</filename>), + (<filename class="headerfile">include/asm/spinlock.h</filename>), which is a very simple single-holder lock: if you can't get the spinlock, you keep trying (spinning) until you can. Spinlocks are very small and fast, and can be used anywhere. </para> <para> The second type is a semaphore - (<filename class=headerfile>include/asm/semaphore.h</filename>): it + (<filename class="headerfile">include/asm/semaphore.h</filename>): it can have more than one holder at any time (the number decided at initialization time), although it is most commonly used as a single-holder lock (a mutex). If you can't get a semaphore, @@ -315,7 +315,7 @@ user context can be interrupted by a softirq, and secondly, the critical region could be entered from another CPU. This is where <function>spin_lock_bh()</function> - (<filename class=headerfile>include/linux/spinlock.h</filename>) is + (<filename class="headerfile">include/linux/spinlock.h</filename>) is used. It disables softirqs on that CPU, then grabs the lock. <function>spin_unlock_bh()</function> does the reverse. (The '_bh' suffix is a historical reference to "Bottom Halves", the @@ -333,7 +333,7 @@ This works perfectly for <firstterm linkend="gloss-up"><acronym>UP </acronym></firstterm> as well: the spin lock vanishes, and this macro simply becomes <function>local_bh_disable()</function> - (<filename class=headerfile>include/linux/interrupt.h</filename>), which + (<filename class="headerfile">include/linux/interrupt.h</filename>), which protects you from the softirq being run. </para> </sect1> @@ -463,7 +463,7 @@ <para> This works perfectly for UP as well: the spin lock vanishes, and this macro simply becomes <function>local_irq_disable()</function> - (<filename class=headerfile>include/asm/smp.h</filename>), which + (<filename class="headerfile">include/asm/smp.h</filename>), which protects you from the softirq/tasklet/BH being run. </para> @@ -545,7 +545,7 @@ </para> <table> <title>Table of Locking Requirements</title> -<TGROUP COLS=11> +<TGROUP COLS="11"> <TBODY> <ROW> <ENTRY></ENTRY> @@ -1026,7 +1026,7 @@ In practice, <type>atomic_t</type> would usually be used for <structfield>refcnt</structfield>. There are a number of atomic operations defined in -<filename class=headerfile>include/asm/atomic.h</filename>: these are +<filename class="headerfile">include/asm/atomic.h</filename>: these are guaranteed to be seen atomically from all CPUs in the system, so no lock is required. In this case, it is simpler than using spinlocks, although for anything non-trivial using spinlocks is clearer. The @@ -1296,7 +1296,7 @@ as Alan Cox says, <quote>Lock data, not code</quote>. <table> <title>Consequences</title> - <tgroup cols=2 align=left> + <tgroup cols="2" align="left"> <thead> <row> @@ -1437,7 +1437,7 @@ as Alan Cox says, <quote>Lock data, not code</quote>. themselves (by calling <function>add_timer()</function> at the end of their timer function). Because this is a fairly common case which is prone to races, you should use <function>del_timer_sync()</function> - (<filename class=headerfile>include/linux/timer.h</filename>) + (<filename class="headerfile">include/linux/timer.h</filename>) to handle this case. It returns the number of times the timer had to be deleted before we finally stopped it from adding itself back in. @@ -1749,7 +1749,7 @@ machines due to caching. an exclusive lock. See <function>DEFINE_PER_CPU()</function>, <function>get_cpu_var()</function> and <function>put_cpu_var()</function> - (<filename class=headerfile>include/linux/percpu.h</filename>). + (<filename class="headerfile">include/linux/percpu.h</filename>). </para> <para> @@ -1757,7 +1757,7 @@ machines due to caching. <type>local_t</type> type, and the <function>cpu_local_inc()</function> and related functions, which are more efficient than simple code on some architectures - (<filename class=headerfile>include/asm/local.h</filename>). + (<filename class="headerfile">include/asm/local.h</filename>). </para> <para> diff --git a/Documentation/DocBook/lsm.tmpl b/Documentation/DocBook/lsm.tmpl index fa0570a23c04..635fa59da21f 100644 --- a/Documentation/DocBook/lsm.tmpl +++ b/Documentation/DocBook/lsm.tmpl @@ -27,7 +27,7 @@ <address><email>cvance@nai.com</email></address> </affiliation> </author> - </authorgroup + </authorgroup> </artheader> <sect1><title>Introduction</title> diff --git a/Documentation/DocBook/mousedrivers.tmpl b/Documentation/DocBook/mousedrivers.tmpl index 72946b2ddaa5..49a902fed766 100644 --- a/Documentation/DocBook/mousedrivers.tmpl +++ b/Documentation/DocBook/mousedrivers.tmpl @@ -88,9 +88,9 @@ Each read from a bus mouse interface device returns a block of data. The first three bytes of each read are defined as follows: - <table frame=all> + <table frame="all"> <title>Mouse Data Encoding</title> - <tgroup cols=2 align=left> + <tgroup cols="2" align="left"> <tbody> <row> <entry>Byte 0</entry> diff --git a/Documentation/DocBook/parportbook.tmpl b/Documentation/DocBook/parportbook.tmpl index 9259357884a2..8e22b018cd27 100644 --- a/Documentation/DocBook/parportbook.tmpl +++ b/Documentation/DocBook/parportbook.tmpl @@ -969,7 +969,7 @@ port->ops->write_data (port, d); <para> To recap, then:</para> - <itemizedlist spacing=compact> + <itemizedlist spacing="compact"> <listitem> <para> @@ -1387,7 +1387,7 @@ struct parport_operations { <filename>/dev/parport0</filename>) allows you to: </para> - <itemizedlist spacing=compact> + <itemizedlist spacing="compact"> <listitem> <para> @@ -1614,7 +1614,7 @@ struct parport_operations { <filename>incluce/linux/parport.h</filename> and include: </para> - <itemizedlist spacing=compact> + <itemizedlist spacing="compact"> <listitem><para> <constant>IEEE1284_MODE_COMPAT</constant></para></listitem> <listitem><para> @@ -1713,7 +1713,7 @@ struct parport_operations { affect future I/O operations. Available flags are: </para> - <itemizedlist spacing=compact> + <itemizedlist spacing="compact"> <listitem><para> <constant>PP_FASTWRITE</constant></para></listitem> <listitem><para> @@ -1759,7 +1759,7 @@ struct parport_operations { <filename>include/linux/parport.h</filename>: </para> - <itemizedlist spacing=compact> + <itemizedlist spacing="compact"> <listitem><para> <constant>PARPORT_CONTROL_STROBE</constant></para></listitem> <listitem><para> @@ -2729,9 +2729,6 @@ to permit their use in free software. </appendix> </book> -<!-- Additional function to be documented: ---! Ddrivers/parport/init.c (this file doesn't exist any more) ---> <!-- Local Variables: --> <!-- sgml-indent-step: 1 --> <!-- sgml-indent-data: 1 --> diff --git a/Documentation/DocBook/sis900.tmpl b/Documentation/DocBook/sis900.tmpl index 305b327c8a05..48aebc20e782 100644 --- a/Documentation/DocBook/sis900.tmpl +++ b/Documentation/DocBook/sis900.tmpl @@ -336,7 +336,7 @@ Those packages are listed in Document/Changes in kernel source distribution. If you have to install the driver other than those bundled in kernel release, you should have your driver file <filename>sis900.c</filename> and <filename>sis900.h</filename> -copied into <filename class=directory>/usr/src/linux/drivers/net/</filename> first. +copied into <filename class="directory">/usr/src/linux/drivers/net/</filename> first. There are two alternative ways to install the driver </Para> diff --git a/Documentation/DocBook/via-audio.tmpl b/Documentation/DocBook/via-audio.tmpl index 0471cceb740e..f91903c2a6e7 100644 --- a/Documentation/DocBook/via-audio.tmpl +++ b/Documentation/DocBook/via-audio.tmpl @@ -227,7 +227,7 @@ <sect1 id="version191"><title> Version 1.9.1 </title> - <itemizedlist spacing=compact> + <itemizedlist spacing="compact"> <listitem> <para> DSP read/write bugfixes from Thomas Sailer. @@ -252,7 +252,7 @@ Version 1.9.1 <sect1 id="version1115"><title> Version 1.1.15 </title> - <itemizedlist spacing=compact> + <itemizedlist spacing="compact"> <listitem> <para> Support for variable fragment size and variable fragment number (Rui @@ -325,7 +325,7 @@ Version 1.1.15 <sect1 id="version1114"><title> Version 1.1.14 </title> - <itemizedlist spacing=compact> + <itemizedlist spacing="compact"> <listitem> <para> Use VM_RESERVE when available, to eliminate unnecessary page faults. @@ -337,7 +337,7 @@ Version 1.1.14 <sect1 id="version1112"><title> Version 1.1.12 </title> - <itemizedlist spacing=compact> + <itemizedlist spacing="compact"> <listitem> <para> mmap bug fixes from Linus. @@ -349,7 +349,7 @@ Version 1.1.12 <sect1 id="version1111"><title> Version 1.1.11 </title> - <itemizedlist spacing=compact> + <itemizedlist spacing="compact"> <listitem> <para> Many more bug fixes. mmap enabled by default, but may still be buggy. @@ -368,7 +368,7 @@ Version 1.1.11 <sect1 id="version1110"><title> Version 1.1.10 </title> - <itemizedlist spacing=compact> + <itemizedlist spacing="compact"> <listitem> <para> Many bug fixes. mmap enabled by default, but may still be buggy. @@ -380,7 +380,7 @@ Version 1.1.10 <sect1 id="version119"><title> Version 1.1.9 </title> - <itemizedlist spacing=compact> + <itemizedlist spacing="compact"> <listitem> <para> Redesign and rewrite audio playback implementation. (faster and smaller, hopefully) @@ -478,7 +478,7 @@ Version 1.1.9 <sect1 id="version118"><title> Version 1.1.8 </title> - <itemizedlist spacing=compact> + <itemizedlist spacing="compact"> <listitem> <para> Clean up interrupt handler output. Fixes the following kernel error message: @@ -501,7 +501,7 @@ Version 1.1.8 <sect1 id="version117"><title> Version 1.1.7 </title> - <itemizedlist spacing=compact> + <itemizedlist spacing="compact"> <listitem> <para> Fix module unload bug where mixer device left registered @@ -514,7 +514,7 @@ Version 1.1.7 <sect1 id="version116"><title> Version 1.1.6 </title> - <itemizedlist spacing=compact> + <itemizedlist spacing="compact"> <listitem> <para> Rewrite via_set_rate to mimic ALSA basic AC97 rate setting @@ -546,7 +546,7 @@ Version 1.1.6 <sect1 id="version115"><title> Version 1.1.5 </title> - <itemizedlist spacing=compact> + <itemizedlist spacing="compact"> <listitem> <para> Disable some overly-verbose debugging code @@ -573,7 +573,7 @@ Version 1.1.5 <sect1 id="version114"><title> Version 1.1.4 </title> - <itemizedlist spacing=compact> + <itemizedlist spacing="compact"> <listitem> <para> Completed rewrite of driver. Eliminated SoundBlaster compatibility diff --git a/Documentation/DocBook/videobook.tmpl b/Documentation/DocBook/videobook.tmpl index 7a3f4623f49d..b942a25a4753 100644 --- a/Documentation/DocBook/videobook.tmpl +++ b/Documentation/DocBook/videobook.tmpl @@ -176,8 +176,8 @@ int __init myradio_init(struct video_init *v) <para> The types available are </para> - <table frame=all><title>Device Types</title> - <tgroup cols=3 align=left> + <table frame="all"><title>Device Types</title> + <tgroup cols="3" align="left"> <tbody> <row> <entry>VFL_TYPE_RADIO</><entry>/dev/radio{n}</><entry> @@ -299,8 +299,8 @@ static int radio_ioctl(struct video_device *dev, unsigned int cmd, void *arg) allows the applications to find out what sort of a card they have found and to figure out what they want to do about it. The fields in the structure are </para> - <table frame=all><title>struct video_capability fields</title> - <tgroup cols=2 align=left> + <table frame="all"><title>struct video_capability fields</title> + <tgroup cols="2" align="left"> <tbody> <row> <entry>name</><entry>The device text name. This is intended for the user.</> @@ -373,8 +373,8 @@ static int radio_ioctl(struct video_device *dev, unsigned int cmd, void *arg) <para> The video_tuner structure has the following fields </para> - <table frame=all><title>struct video_tuner fields</title> - <tgroup cols=2 align=left> + <table frame="all"><title>struct video_tuner fields</title> + <tgroup cols="2" align="left"> <tbody> <row> <entry>int tuner</><entry>The number of the tuner in question</entry> @@ -406,8 +406,8 @@ static int radio_ioctl(struct video_device *dev, unsigned int cmd, void *arg) </tgroup> </table> - <table frame=all><title>struct video_tuner flags</title> - <tgroup cols=2 align=left> + <table frame="all"><title>struct video_tuner flags</title> + <tgroup cols="2" align="left"> <tbody> <row> <entry>VIDEO_TUNER_PAL</><entry>A PAL TV tuner</entry> @@ -429,8 +429,8 @@ static int radio_ioctl(struct video_device *dev, unsigned int cmd, void *arg) </tgroup> </table> - <table frame=all><title>struct video_tuner modes</title> - <tgroup cols=2 align=left> + <table frame="all"><title>struct video_tuner modes</title> + <tgroup cols="2" align="left"> <tbody> <row> <entry>VIDEO_MODE_PAL</><entry>PAL Format</entry> @@ -580,8 +580,8 @@ static int current_volume=0; <para> Then we fill in the video_audio structure. This has the following format </para> - <table frame=all><title>struct video_audio fields</title> - <tgroup cols=2 align=left> + <table frame="all"><title>struct video_audio fields</title> + <tgroup cols="2" align="left"> <tbody> <row> <entry>audio</><entry>The input the user wishes to query</> @@ -615,8 +615,8 @@ static int current_volume=0; </tgroup> </table> - <table frame=all><title>struct video_audio flags</title> - <tgroup cols=2 align=left> + <table frame="all"><title>struct video_audio flags</title> + <tgroup cols="2" align="left"> <tbody> <row> <entry>VIDEO_AUDIO_MUTE</><entry>The audio is currently muted. We @@ -633,8 +633,8 @@ static int current_volume=0; </tgroup> </table> - <table frame=all><title>struct video_audio modes</title> - <tgroup cols=2 align=left> + <table frame="all"><title>struct video_audio modes</title> + <tgroup cols="2" align="left"> <tbody> <row> <entry>VIDEO_SOUND_MONO</><entry>Mono sound</entry> @@ -862,8 +862,8 @@ static struct video_device my_camera We use the extra video capability flags that did not apply to the radio interface. The video related flags are </para> - <table frame=all><title>Capture Capabilities</title> - <tgroup cols=2 align=left> + <table frame="all"><title>Capture Capabilities</title> + <tgroup cols="2" align="left"> <tbody> <row> <entry>VID_TYPE_CAPTURE</><entry>We support image capture</> @@ -1204,8 +1204,8 @@ static int camera_ioctl(struct video_device *dev, unsigned int cmd, void *arg) inputs to the video card). Our example card has a single camera input. The fields in the structure are </para> - <table frame=all><title>struct video_channel fields</title> - <tgroup cols=2 align=left> + <table frame="all"><title>struct video_channel fields</title> + <tgroup cols="2" align="left"> <tbody> <row> @@ -1227,8 +1227,8 @@ static int camera_ioctl(struct video_device *dev, unsigned int cmd, void *arg) </tbody> </tgroup> </table> - <table frame=all><title>struct video_channel flags</title> - <tgroup cols=2 align=left> + <table frame="all"><title>struct video_channel flags</title> + <tgroup cols="2" align="left"> <tbody> <row> <entry>VIDEO_VC_TUNER</><entry>Channel has a tuner.</entry> @@ -1238,8 +1238,8 @@ static int camera_ioctl(struct video_device *dev, unsigned int cmd, void *arg) </tbody> </tgroup> </table> - <table frame=all><title>struct video_channel types</title> - <tgroup cols=2 align=left> + <table frame="all"><title>struct video_channel types</title> + <tgroup cols="2" align="left"> <tbody> <row> <entry>VIDEO_TYPE_TV</><entry>Television input.</entry> @@ -1251,8 +1251,8 @@ static int camera_ioctl(struct video_device *dev, unsigned int cmd, void *arg) </tbody> </tgroup> </table> - <table frame=all><title>struct video_channel norms</title> - <tgroup cols=2 align=left> + <table frame="all"><title>struct video_channel norms</title> + <tgroup cols="2" align="left"> <tbody> <row> <entry>VIDEO_MODE_PAL</><entry>PAL encoded Television</entry> @@ -1337,8 +1337,8 @@ static int camera_ioctl(struct video_device *dev, unsigned int cmd, void *arg) for every other pixel in the image. The other common formats the interface defines are </para> - <table frame=all><title>Framebuffer Encodings</title> - <tgroup cols=2 align=left> + <table frame="all"><title>Framebuffer Encodings</title> + <tgroup cols="2" align="left"> <tbody> <row> <entry>GREY</><entry>Linear greyscale. This is for simple cameras and the @@ -1475,8 +1475,8 @@ static struct video_buffer capture_fb; display. The video_window structure is used to describe the way the image should be displayed. </para> - <table frame=all><title>struct video_window fields</title> - <tgroup cols=2 align=left> + <table frame="all"><title>struct video_window fields</title> + <tgroup cols="2" align="left"> <tbody> <row> <entry>width</><entry>The width in pixels of the desired image. The card @@ -1512,8 +1512,8 @@ static struct video_buffer capture_fb; <para> Each clip is a struct video_clip which has the following fields </para> - <table frame=all><title>video_clip fields</title> - <tgroup cols=2 align=left> + <table frame="all"><title>video_clip fields</title> + <tgroup cols="2" align="left"> <tbody> <row> <entry>x, y</><entry>Co-ordinates relative to the display</> diff --git a/Documentation/IPMI.txt b/Documentation/IPMI.txt index 825e83cb4acc..ec8a6fa2c34b 100644 --- a/Documentation/IPMI.txt +++ b/Documentation/IPMI.txt @@ -22,6 +22,58 @@ are not familiar with IPMI itself, see the web site at http://www.intel.com/design/servers/ipmi/index.htm. IPMI is a big subject and I can't cover it all here! +Configuration +------------- + +The LinuxIPMI driver is modular, which means you have to pick several +things to have it work right depending on your hardware. Most of +these are available in the 'Character Devices' menu. + +No matter what, you must pick 'IPMI top-level message handler' to use +IPMI. What you do beyond that depends on your needs and hardware. + +The message handler does not provide any user-level interfaces. +Kernel code (like the watchdog) can still use it. If you need access +from userland, you need to select 'Device interface for IPMI' if you +want access through a device driver. Another interface is also +available, you may select 'IPMI sockets' in the 'Networking Support' +main menu. This provides a socket interface to IPMI. You may select +both of these at the same time, they will both work together. + +The driver interface depends on your hardware. If you have a board +with a standard interface (These will generally be either "KCS", +"SMIC", or "BT", consult your hardware manual), choose the 'IPMI SI +handler' option. A driver also exists for direct I2C access to the +IPMI management controller. Some boards support this, but it is +unknown if it will work on every board. For this, choose 'IPMI SMBus +handler', but be ready to try to do some figuring to see if it will +work. + +There is also a KCS-only driver interface supplied, but it is +depracated in favor of the SI interface. + +You should generally enable ACPI on your system, as systems with IPMI +should have ACPI tables describing them. + +If you have a standard interface and the board manufacturer has done +their job correctly, the IPMI controller should be automatically +detect (via ACPI or SMBIOS tables) and should just work. Sadly, many +boards do not have this information. The driver attempts standard +defaults, but they may not work. If you fall into this situation, you +need to read the section below named 'The SI Driver' on how to +hand-configure your system. + +IPMI defines a standard watchdog timer. You can enable this with the +'IPMI Watchdog Timer' config option. If you compile the driver into +the kernel, then via a kernel command-line option you can have the +watchdog timer start as soon as it intitializes. It also have a lot +of other options, see the 'Watchdog' section below for more details. +Note that you can also have the watchdog continue to run if it is +closed (by default it is disabled on close). Go into the 'Watchdog +Cards' menu, enable 'Watchdog Timer Support', and enable the option +'Disable watchdog shutdown on close'. + + Basic Design ------------ @@ -41,18 +93,30 @@ ipmi_devintf - This provides a userland IOCTL interface for the IPMI driver, each open file for this device ties in to the message handler as an IPMI user. -ipmi_kcs_drv - A driver for the KCS SMI. Most system have a KCS -interface for IPMI. +ipmi_si - A driver for various system interfaces. This supports +KCS, SMIC, and may support BT in the future. Unless you have your own +custom interface, you probably need to use this. + +ipmi_smb - A driver for accessing BMCs on the SMBus. It uses the +I2C kernel driver's SMBus interfaces to send and receive IPMI messages +over the SMBus. + +af_ipmi - A network socket interface to IPMI. This doesn't take up +a character device in your system. +Note that the KCS-only interface ahs been removed. Much documentation for the interface is in the include files. The IPMI include files are: -ipmi.h - Contains the user interface and IOCTL interface for IPMI. +net/af_ipmi.h - Contains the socket interface. -ipmi_smi.h - Contains the interface for SMI drivers to use. +linux/ipmi.h - Contains the user interface and IOCTL interface for IPMI. -ipmi_msgdefs.h - General definitions for base IPMI messaging. +linux/ipmi_smi.h - Contains the interface for system management interfaces +(things that interface to IPMI controllers) to use. + +linux/ipmi_msgdefs.h - General definitions for base IPMI messaging. Addressing @@ -260,70 +324,131 @@ they register with the message handler. They are generally assigned in the order they register, although if an SMI unregisters and then another one registers, all bets are off. -The ipmi_smi.h defines the interface for SMIs, see that for more -details. +The ipmi_smi.h defines the interface for management interfaces, see +that for more details. -The KCS Driver --------------- +The SI Driver +------------- -The KCS driver allows up to 4 KCS interfaces to be configured in the -system. By default, the driver will register one KCS interface at the -spec-specified I/O port 0xca2 without interrupts. You can change this -at module load time (for a module) with: +The SI driver allows up to 4 KCS or SMIC interfaces to be configured +in the system. By default, scan the ACPI tables for interfaces, and +if it doesn't find any the driver will attempt to register one KCS +interface at the spec-specified I/O port 0xca2 without interrupts. +You can change this at module load time (for a module) with: + + modprobe ipmi_si.o type=<type1>,<type2>.... + ports=<port1>,<port2>... addrs=<addr1>,<addr2>... + irqs=<irq1>,<irq2>... trydefaults=[0|1] + +Each of these except si_trydefaults is a list, the first item for the +first interface, second item for the second interface, etc. - insmod ipmi_kcs_drv.o kcs_ports=<port1>,<port2>... kcs_addrs=<addr1>,<addr2> - kcs_irqs=<irq1>,<irq2>... kcs_trydefaults=[0|1] +The si_type may be either "kcs", "smic", or "bt". If you leave it blank, it +defaults to "kcs". -The KCS driver supports two types of interfaces, ports (for I/O port -based KCS interfaces) and memory addresses (for KCS interfaces in -memory). The driver will support both of them simultaneously, setting -the port to zero (or just not specifying it) will allow the memory -address to be used. The port will override the memory address if it -is specified and non-zero. kcs_trydefaults sets whether the standard -IPMI interface at 0xca2 and any interfaces specified by ACPE are -tried. By default, the driver tries it, set this value to zero to -turn this off. +If you specify si_addrs as non-zero for an interface, the driver will +use the memory address given as the address of the device. This +overrides si_ports. + +If you specify si_ports as non-zero for an interface, the driver will +use the I/O port given as the device address. + +If you specify si_irqs as non-zero for an interface, the driver will +attempt to use the given interrupt for the device. + +si_trydefaults sets whether the standard IPMI interface at 0xca2 and +any interfaces specified by ACPE are tried. By default, the driver +tries it, set this value to zero to turn this off. When compiled into the kernel, the addresses can be specified on the kernel command line as: - ipmi_kcs=<bmc1>:<irq1>,<bmc2>:<irq2>....,[nodefault] + ipmi_si.type=<type1>,<type2>... + ipmi_si.ports=<port1>,<port2>... ipmi_si.addrs=<addr1>,<addr2>... + ipmi_si.irqs=<irq1>,<irq2>... ipmi_si.trydefaults=[0|1] -The <bmcx> values is either "p<port>" or "m<addr>" for port or memory -addresses. So for instance, a KCS interface at port 0xca2 using -interrupt 9 and a memory interface at address 0xf9827341 with no -interrupt would be specified "ipmi_kcs=p0xca2:9,m0xf9827341". -If you specify zero for in irq or don't specify it, the driver will -run polled unless the software can detect the interrupt to use in the -ACPI tables. +It works the same as the module parameters of the same names. -By default, the driver will attempt to detect a KCS device at the -spec-specified 0xca2 address and any address specified by ACPI. If -you want to turn this off, use the "nodefault" option. +By default, the driver will attempt to detect any device specified by +ACPI, and if none of those then a KCS device at the spec-specified +0xca2. If you want to turn this off, set the "trydefaults" option to +false. If you have high-res timers compiled into the kernel, the driver will use them to provide much better performance. Note that if you do not have high-res timers enabled in the kernel and you don't have interrupts enabled, the driver will run VERY slowly. Don't blame me, -the KCS interface sucks. +these interfaces suck. + + +The SMBus Driver +---------------- + +The SMBus driver allows up to 4 SMBus devices to be configured in the +system. By default, the driver will register any SMBus interfaces it finds +in the I2C address range of 0x20 to 0x4f on any adapter. You can change this +at module load time (for a module) with: + + modprobe ipmi_smb.o + addr=<adapter1>,<i2caddr1>[,<adapter2>,<i2caddr2>[,...]] + dbg=<flags1>,<flags2>... + [defaultprobe=0] [dbg_probe=1] + +The addresses are specified in pairs, the first is the adapter ID and the +second is the I2C address on that adapter. + +The debug flags are bit flags for each BMC found, they are: +IPMI messages: 1, driver state: 2, timing: 4, I2C probe: 8 + +Setting smb_defaultprobe to zero disabled the default probing of SMBus +interfaces at address range 0x20 to 0x4f. This means that only the +BMCs specified on the smb_addr line will be detected. + +Setting smb_dbg_probe to 1 will enable debugging of the probing and +detection process for BMCs on the SMBusses. + +Discovering the IPMI compilant BMC on the SMBus can cause devices +on the I2C bus to fail. The SMBus driver writes a "Get Device ID" IPMI +message as a block write to the I2C bus and waits for a response. +This action can be detrimental to some I2C devices. It is highly recommended +that the known I2c address be given to the SMBus driver in the smb_addr +parameter. The default adrress range will not be used when a smb_addr +parameter is provided. + +When compiled into the kernel, the addresses can be specified on the +kernel command line as: + + ipmb_smb.addr=<adapter1>,<i2caddr1>[,<adapter2>,<i2caddr2>[,...]] + ipmi_smb.dbg=<flags1>,<flags2>... + ipmi_smb.defaultprobe=0 ipmi_smb.dbg_probe=1 + +These are the same options as on the module command line. + +Note that you might need some I2C changes if CONFIG_IPMI_PANIC_EVENT +is enabled along with this, so the I2C driver knows to run to +completion during sending a panic event. Other Pieces ------------ Watchdog +-------- A watchdog timer is provided that implements the Linux-standard watchdog timer interface. It has three module parameters that can be used to control it: - insmod ipmi_watchdog timeout=<t> pretimeout=<t> action=<action type> - preaction=<preaction type> preop=<preop type> + modprobe ipmi_watchdog timeout=<t> pretimeout=<t> action=<action type> + preaction=<preaction type> preop=<preop type> start_now=x The timeout is the number of seconds to the action, and the pretimeout is the amount of seconds before the reset that the pre-timeout panic will -occur (if pretimeout is zero, then pretimeout will not be enabled). +occur (if pretimeout is zero, then pretimeout will not be enabled). Note +that the pretimeout is the time before the final timeout. So if the +timeout is 50 seconds and the pretimeout is 10 seconds, then the pretimeout +will occur in 40 second (10 seconds before the timeout). The action may be "reset", "power_cycle", or "power_off", and specifies what to do when the timer times out, and defaults to @@ -344,16 +469,19 @@ When preop is set to "preop_give_data", one byte comes ready to read on the device when the pretimeout occurs. Select and fasync work on the device, as well. +If start_now is set to 1, the watchdog timer will start running as +soon as the driver is loaded. + When compiled into the kernel, the kernel command line is available for configuring the watchdog: - ipmi_wdog=<timeout>[,<pretimeout>[,<option>[,<options>....]]] + ipmi_watchdog.timeout=<t> ipmi_watchdog.pretimeout=<t> + ipmi_watchdog.action=<action type> + ipmi_watchdog.preaction=<preaction type> + ipmi_watchdog.preop=<preop type> + ipmi_watchdog.start_now=x -The options are the actions and preaction above (if an option -controlling the same thing is specified twice, the last is taken). An -options "start_now" is also there, if included, the watchdog will -start running immediately when all the drivers are ready, it doesn't -have to have a user hooked up to start it. +The options are the same as the module parameter options. The watchdog will panic and start a 120 second reset timeout if it gets a pre-action. During a panic or a reboot, the watchdog will diff --git a/Documentation/SubmittingPatches b/Documentation/SubmittingPatches index d77a5dc8f89c..3b25b96a5048 100644 --- a/Documentation/SubmittingPatches +++ b/Documentation/SubmittingPatches @@ -134,6 +134,21 @@ your change. Even if the maintainer did not respond in step #4, make sure to ALWAYS copy the maintainer when you change their code. +For small patches you may want to CC the Trivial Patch Monkey +trivial@rustcorp.com.au set up by Rusty Russell; which collects "trivial" +patches. Trivial patches must qualify for one of the following rules: + Spelling fixes in documentation + Spelling fixes which could break grep(1). + Warning fixes (cluttering with useless warnings is bad) + Compilation fixes (only if they are actually correct) + Runtime fixes (only if they actually fix things) + Removing use of deprecated functions/macros (eg. check_region). + Contact detail and documentation fixes + Non-portable code replaced by portable code (even in arch-specific, + since people copy, as long as it's trivial) + Any fix by the author/maintainer of the file. (ie. patch monkey + in re-transmission mode) + 6) No MIME, no links, no compression, no attachments. Just plain text. diff --git a/Documentation/early-userspace/README b/Documentation/early-userspace/README index 174cc7b4dd02..7d5661284f25 100644 --- a/Documentation/early-userspace/README +++ b/Documentation/early-userspace/README @@ -71,5 +71,31 @@ custom initramfs images that meet your needs exactly. For questions and help, you can sign up for the early userspace mailing list at http://www.zytor.com/mailman/listinfo/klibc +How does it work? +================= + +The kernel has currently 3 ways to mount the root filesystem: + +a) all required device and filesystem drivers compiled into the kernel, no + initrd. init/main.c:init() will call prepare_namespace() to mount the + final root filesystem, based on the root= option and optional init= to run + some other init binary than listed at the end of init/main.c:init(). + +b) some device and filesystem drivers built as modules and stored in an + initrd. The initrd must contain a binary '/linuxrc' which is supposed to + load these driver modules. It is also possible to mount the final root + filesystem via linuxrc and use the pivot_root syscall. The initrd is + mounted and executed via prepare_namespace(). + +c) using initramfs. The call to prepare_namespace() must be skipped. + This means that a binary must do all the work. Said binary can be stored + into initramfs either via modifying usr/gen_init_cpio.c or via the new + initrd format, an cpio archive. It must be called "/init". This binary + is responsible to do all the things prepare_namespace() would do. + + To remain backwards compatibility, the /init binary will only run if it + comes via an initramfs cpio archive. If this is not the case, + init/main.c:init() will run prepare_namespace() to mount the final root + and exec one of the predefined init binaries. Bryan O'Sullivan <bos@serpentine.com> diff --git a/Documentation/filesystems/proc.txt b/Documentation/filesystems/proc.txt index 22fd3adcc96e..378722d5bb70 100644 --- a/Documentation/filesystems/proc.txt +++ b/Documentation/filesystems/proc.txt @@ -38,6 +38,7 @@ Table of Contents 2.8 /proc/sys/net/ipv4 - IPV4 settings 2.9 Appletalk 2.10 IPX + 2.11 /proc/sys/fs/mqueue - POSIX message queues filesystem ------------------------------------------------------------------------------ Preface @@ -1814,6 +1815,30 @@ The /proc/net/ipx_route table holds a list of IPX routes. For each route it gives the destination network, the router node (or Directly) and the network address of the router (or Connected) for internal networks. +2.11 /proc/sys/fs/mqueue - POSIX message queues filesystem +---------------------------------------------------------- + +The "mqueue" filesystem provides the necessary kernel features to enable the +creation of a user space library that implements the POSIX message queues +API (as noted by the MSG tag in the POSIX 1003.1-2001 version of the System +Interfaces specification.) + +The "mqueue" filesystem contains values for determining/setting the amount of +resources used by the file system. + +/proc/sys/fs/mqueue/queues_max is a read/write file for setting/getting the +maximum number of message queues allowed on the system. + +/proc/sys/fs/mqueue/msg_max is a read/write file for setting/getting the +maximum number of messages in a queue value. In fact it is the limiting value +for another (user) limit which is set in mq_open invocation. This attribute of +a queue must be less or equal then msg_max. + +/proc/sys/fs/mqueue/msgsize_max is a read/write file for setting/getting the +maximum message size value (it is every message queue's attribute set during +its creation). + + ------------------------------------------------------------------------------ Summary ------------------------------------------------------------------------------ diff --git a/Documentation/firmware_class/README b/Documentation/firmware_class/README index d414e0493815..43e836c07ae8 100644 --- a/Documentation/firmware_class/README +++ b/Documentation/firmware_class/README @@ -60,9 +60,9 @@ HOTPLUG_FW_DIR=/usr/lib/hotplug/firmware/ - echo 1 > /sysfs/$DEVPATH/loading + echo 1 > /sys/$DEVPATH/loading cat $HOTPLUG_FW_DIR/$FIRMWARE > /sysfs/$DEVPATH/data - echo 0 > /sysfs/$DEVPATH/loading + echo 0 > /sys/$DEVPATH/loading Random notes: ============ diff --git a/Documentation/firmware_class/hotplug-script b/Documentation/firmware_class/hotplug-script index 0a31bcd6fa93..d6608e024b03 100644 --- a/Documentation/firmware_class/hotplug-script +++ b/Documentation/firmware_class/hotplug-script @@ -6,9 +6,9 @@ HOTPLUG_FW_DIR=/usr/lib/hotplug/firmware/ -echo 1 > /sysfs/$DEVPATH/loading +echo 1 > /sys/$DEVPATH/loading cat $HOTPLUG_FW_DIR/$FIRMWARE > /sysfs/$DEVPATH/data -echo 0 > /sysfs/$DEVPATH/loading +echo 0 > /sys/$DEVPATH/loading # To cancel the load in case of error: # diff --git a/Documentation/ide.txt b/Documentation/ide.txt index 6ed7eb16335e..07811d2df557 100644 --- a/Documentation/ide.txt +++ b/Documentation/ide.txt @@ -65,9 +65,7 @@ sixth.. ide5, usually PCI, probed To access devices on interfaces > ide0, device entries please make sure that device files for them are present in /dev. If not, please create such -entries, by simply running the included shell script: - - /usr/src/linux/scripts/MAKEDEV.ide +entries, by using /dev/MAKEDEV. This driver automatically probes for most IDE interfaces (including all PCI ones), for the drives/geometries attached to those interfaces, and for the IRQ @@ -344,7 +342,7 @@ The character device interface consists of the following devices: nht1 major 37, minor 129 second IDE tape, no rewind on close. ... -Run linux/scripts/MAKEDEV.ide to create the above entries. +Run /dev/MAKEDEV to create the above entries. The general magnetic tape commands compatible interface, as defined by include/linux/mtio.h, is accessible through the character device. diff --git a/Documentation/laptop-mode.txt b/Documentation/laptop-mode.txt new file mode 100644 index 000000000000..9df8d2677bef --- /dev/null +++ b/Documentation/laptop-mode.txt @@ -0,0 +1,665 @@ +How to conserve battery power using laptop-mode +----------------------------------------------- + +Document Author: Bart Samwel (bart@samwel.tk) +Date created: January 2, 2004 +Last modified: April 3, 2004 + +Introduction +------------ + +Laptopmode is used to minimize the time that the hard disk needs to be spun up, +to conserve battery power on laptops. It has been reported to cause significant +power savings. + +Contents +-------- + +* Introduction +* The short story +* Caveats +* The details +* Tips & Tricks +* Control script +* ACPI integration +* Monitoring tool + + +The short story +--------------- + +If you just want to use it, run the laptop_mode control script (which is included +at the end of this document) as follows: + +# laptop_mode start + +Then set your harddisk spindown time to a relatively low value with hdparm: + +hdparm -S 4 /dev/hda + +The value -S 4 means 20 seconds idle time before spindown. Your harddisk will +now only spin up when a disk cache miss occurs, or at least once every 10 +minutes to write back any pending changes. + +To stop laptop_mode, run "laptop_mode stop". + + +Caveats +------- + +* The downside of laptop mode is that you have a chance of losing up + to 10 minutes of work. If you cannot afford this, don't use it! It's + wise to turn OFF laptop mode when you're almost out of battery -- + although this will make the battery run out faster, at least you'll + lose less work when it actually runs out. I'm still looking for someone + to submit instructions on how to turn off laptop mode when battery is low, + e.g., using ACPI events. I don't have a laptop myself, so if you do and + you care to contribute such instructions, please do. + +* Most desktop hard drives have a very limited lifetime measured in spindown + cycles, typically about 50.000 times (it's usually listed on the spec sheet). + Check your drive's rating, and don't wear down your drive's lifetime if you + don't need to. + +* If you mount some of your ext3/reiserfs filesystems with the -n option, then + the control script will not be able to remount them correctly. You must set + DO_REMOUNTS=0 in the control script, otherwise it will remount them with the + wrong options -- or it will fail because it cannot write to /etc/mtab. + +* If you have your filesystems listed as type "auto" in fstab, like I did, then + the control script will not recognize them as filesystems that need remounting. + +* If you have XFS, make SURE that you set the XFS_HZ value in the control script + correctly, to the value of HZ of your running kernel. Laptop mode will not + work correctly if it is set too low, and you may lose data if it is set too + high. The reason for this problem is that XFS does not export its sysctl + variables in centisecs (like most other subsystems do) but in "jiffies", + which is an internal kernel measure. Once this is fixed things will get better. + + +The details +----------- + +Laptop-mode is controlled by the flag /proc/sys/vm/laptop_mode. When this +flag is set, any physical disk read operation (that might have caused the +hard disk to spin up) causes Linux to flush all dirty blocks. The result +of this is that after a disk has spun down, it will not be spun up anymore +to write dirty blocks, because those blocks had already been written +immediately after the most recent read operation + +To increase the effectiveness of the laptop_mode strategy, the laptop_mode +control script increases dirty_expire_centisecs and dirty_writeback_centisecs in +/proc/sys/vm to about 10 minutes (by default), which means that pages that are +dirtied are not forced to be written to disk as often. The control script also +changes the dirty background ratio, so that background writeback of dirty pages +is not done anymore. Combined with a higher commit value (also 10 minutes) for +ext3 or ReiserFS filesystems (also done automatically by the control script), +this results in concentration of disk activity in a small time interval which +occurs only once every 10 minutes, or whenever the disk is forced to spin up by +a cache miss. The disk can then be spun down in the periods of inactivity. + +If you want to find out which process caused the disk to spin up, you can +gather information by setting the flag /proc/sys/vm/block_dump. When this flag +is set, Linux reports all disk read and write operations that take place, and +all block dirtyings done to files. This makes it possible to debug why a disk +needs to spin up, and to increase battery life even more. The output of +block_dump is written to the kernel output, and it can be retrieved using +"dmesg". When you use block_dump, you may want to turn off klogd, otherwise +the output of block_dump will be logged, causing disk activity that is not +normally there. + +If 10 minutes is too much or too little downtime for you, you can configure +this downtime as follows. In the control script, set the MAX_AGE value to the +maximum number of seconds of disk downtime that you would like. You should +then set your filesystem's commit interval to the same value. The dirty ratio +is also configurable from the control script. + +If you don't like the idea of the control script remounting your filesystems +for you, you can change DO_REMOUNTS to 0 in the script. + +Thanks to Kiko Piris, the control script can be used to enable laptop mode on +both the Linux 2.4 and 2.6 series. + + +Tips & Tricks +------------- + +* Bartek Kania reports getting up to 50 minutes of extra battery life (on top + of his regular 3 to 3.5 hours) using very aggressive power management (hdparm + -B1) and a spindown time of 5 seconds (hdparm -S1). + +* You can spin down the disk while playing MP3, by setting the disk readahead + to 8MB (hdparm -a 16384). Effectively, the disk will read a complete MP3 at + once, and will then spin down while the MP3 is playing. (Thanks to Bartek + Kania.) + +* Drew Scott Daniels observed: "I don't know why, but when I decrease the number + of colours that my display uses it consumes less battery power. I've seen + this on powerbooks too. I hope that this is a piece of information that + might be useful to the Laptop Mode patch or it's users." + +* One thing which will cause disks to spin up is not-present application + and dynamic library text pages. The kernel will load program text off disk + on-demand, so each time you invoke an application feature for the first + time, the kernel needs to spin the disk up to go and fetch that part of the + application. + + So it is useful to increase the disk readahead parameter greatly, so that + the kernel will pull all of the executable's pages into memory on the first + pagefault. + + The supplied script does this. + +* In syslog.conf, you can prefix entries with a dash ``-'' to omit syncing the + file after every logging. When you're using laptop-mode and your disk doesn't + spin down, this is a likely culprit. + +* Richard Atterer observed that laptop mode does not work well with noflushd + (http://noflushd.sourceforge.net/), it seems that noflushd prevents laptop-mode + from doing its thing. + + +Control script +-------------- + +Please note that this control script works for the Linux 2.4 and 2.6 series. + +--------------------CONTROL SCRIPT BEGIN------------------------------------------ +#! /bin/sh + +# start or stop laptop_mode, best run by a power management daemon when +# ac gets connected/disconnected from a laptop +# +# install as /sbin/laptop_mode +# +# Contributors to this script: Kiko Piris +# Bart Samwel +# Micha Feigin +# Andrew Morton +# Dax Kelson +# +# Original Linux 2.4 version by: Jens Axboe + +# Remove an option (the first parameter) of the form option=<number> from +# a mount options string (the rest of the parameters). +parse_mount_opts () { + OPT="$1" + shift + echo "$*" | \ + sed 's/.*/,&,/' | \ + sed 's/,'"$OPT"'=[0-9]*,/,/g' | \ + sed 's/,,*/,/g' | \ + sed 's/^,//' | \ + sed 's/,$//' | \ + cat - +} + +# Remove an option (the first parameter) without any arguments from +# a mount option string (the rest of the parameters). +parse_nonumber_mount_opts () { + OPT="$1" + shift + echo "$*" | \ + sed 's/.*/,&,/' | \ + sed 's/,'"$OPT"',/,/g' | \ + sed 's/,,*/,/g' | \ + sed 's/^,//' | \ + sed 's/,$//' | \ + cat - +} + +# Find out the state of a yes/no option (e.g. "atime"/"noatime") in +# fstab for a given filesystem, and use this state to replace the +# value of the option in another mount options string. The device +# is the first argument, the option name the second, and the default +# value the third. The remainder is the mount options string. +# +# Example: +# parse_yesno_opts_wfstab /dev/hda1 atime atime defaults,noatime +# +# If fstab contains, say, "rw" for this filesystem, then the result +# will be "defaults,atime". +parse_yesno_opts_wfstab () { + L_DEV=$1 + shift + OPT=$1 + shift + DEF_OPT=$1 + shift + L_OPTS="$*" + PARSEDOPTS1="$(parse_nonumber_mount_opts $OPT $L_OPTS)" + PARSEDOPTS1="$(parse_nonumber_mount_opts no$OPT $PARSEDOPTS1)" + # Watch for a default atime in fstab + FSTAB_OPTS="$(cat /etc/fstab | sed 's/ / /g' | grep ^\ *"$L_DEV " | awk '{ print $4 }')" + if [ -z "$(echo "$FSTAB_OPTS" | grep "$OPT")" ] ; then + # option not specified in fstab -- choose the default. + echo "$PARSEDOPTS1,$DEF_OPT" + else + # option specified in fstab: extract the value and use it + if [ -z "$(echo "$FSTAB_OPTS" | grep "no$OPT")" ] ; then + # no$OPT not found -- so we must have $OPT. + echo "$PARSEDOPTS1,$OPT" + else + echo "$PARSEDOPTS1,no$OPT" + fi + fi +} + +# Find out the state of a numbered option (e.g. "commit=NNN") in +# fstab for a given filesystem, and use this state to replace the +# value of the option in another mount options string. The device +# is the first argument, and the option name the second. The +# remainder is the mount options string in which the replacement +# must be done. +# +# Example: +# parse_mount_opts_wfstab /dev/hda1 commit defaults,commit=7 +# +# If fstab contains, say, "commit=3,rw" for this filesystem, then the +# result will be "rw,commit=3". +parse_mount_opts_wfstab () { + L_DEV=$1 + shift + OPT=$1 + shift + L_OPTS="$*" + + PARSEDOPTS1="$(parse_mount_opts $OPT $L_OPTS)" + # Watch for a default commit in fstab + FSTAB_OPTS="$(cat /etc/fstab | sed 's/ / /g' | grep ^\ *"$L_DEV " | awk '{ print $4 }')" + if [ -z "$(echo "$FSTAB_OPTS" | grep "$OPT=")" ] ; then + # option not specified in fstab: set it to 0 + echo "$PARSEDOPTS1,$OPT=0" + else + # option specified in fstab: extract the value, and use it + echo -n "$PARSEDOPTS1,$OPT=" + echo "$FSTAB_OPTS" | \ + sed 's/.*/,&,/' | \ + sed 's/.*,'"$OPT"'=//' | \ + sed 's/,.*//' | \ + cat - + fi +} + +KLEVEL="$(uname -r | cut -c1-3)" +case "$KLEVEL" in + "2.4"|"2.6") + true + ;; + *) + echo "Unhandled kernel version: $KLEVEL ('uname -r' = '$(uname -r)')" + exit 1 + ;; +esac + +# Shall we remount journaled fs. with appropiate commit interval? (1=yes) +DO_REMOUNTS=1 + +# age time, in seconds. should be put into a sysconfig file +MAX_AGE=600 + +# Dirty synchronous ratio. At this percentage of dirty pages the process which +# calls write() does its own writeback +DIRTY_RATIO=40 + +# +# Allowed dirty background ratio, in percent. Once DIRTY_RATIO has been +# exceeded, the kernel will wake pdflush which will then reduce the amount +# of dirty memory to dirty_background_ratio. Set this nice and low, so once +# some writeout has commenced, we do a lot of it. +# +DIRTY_BACKGROUND_RATIO=5 + +READAHEAD=4096 # kilobytes + +# kernel default dirty buffer age +DEF_AGE=30 +DEF_UPDATE=5 +DEF_DIRTY_BACKGROUND_RATIO=10 +DEF_DIRTY_RATIO=40 +DEF_XFS_AGE_BUFFER=15 +DEF_XFS_SYNC_INTERVAL=30 + +# This must be adjusted manually to the value of HZ in the running kernel, +# until the XFS people change their external interfaces to work in centisecs +# like the rest of the external world. Unfortunately this cannot be automated. :( +XFS_HZ=1000 + +if [ ! -e /proc/sys/vm/laptop_mode ]; then + echo "Kernel is not patched with laptop_mode patch." + exit 1 +fi + +if [ ! -w /proc/sys/vm/laptop_mode ]; then + echo "You do not have enough privileges to enable laptop_mode." + exit 1 +fi + +case "$1" in + start) + AGE=$((100*$MAX_AGE)) + XFS_AGE=$(($XFS_HZ*$MAX_AGE)) + echo -n "Starting laptop_mode" + + if [ -d /proc/sys/vm/pagebuf ] ; then + # This only needs to be set, not reset -- it is only used when + # laptop mode is enabled. + echo $XFS_AGE > /proc/sys/vm/pagebuf/lm_flush_age + echo $XFS_AGE > /proc/sys/fs/xfs/lm_sync_interval + elif [ -f /proc/sys/fs/xfs/lm_age_buffer ] ; then + # The same goes for these. + echo $XFS_AGE > /proc/sys/fs/xfs/lm_age_buffer + echo $XFS_AGE > /proc/sys/fs/xfs/lm_sync_interval + elif [ -f /proc/sys/fs/xfs/age_buffer ] ; then + # But not for these -- they are also used in normal + # operation. + echo $XFS_AGE > /proc/sys/fs/xfs/age_buffer + echo $XFS_AGE > /proc/sys/fs/xfs/sync_interval + fi + + case "$KLEVEL" in + "2.4") + echo "1" > /proc/sys/vm/laptop_mode + echo "30 500 0 0 $AGE $AGE 60 20 0" > /proc/sys/vm/bdflush + ;; + "2.6") + echo "5" > /proc/sys/vm/laptop_mode + echo "$AGE" > /proc/sys/vm/dirty_writeback_centisecs + echo "$AGE" > /proc/sys/vm/dirty_expire_centisecs + echo "$DIRTY_RATIO" > /proc/sys/vm/dirty_ratio + echo "$DIRTY_BACKGROUND_RATIO" > /proc/sys/vm/dirty_background_ratio + ;; + esac + if [ $DO_REMOUNTS -eq 1 ]; then + cat /etc/mtab | while read DEV MP FST OPTS DUMP PASS ; do + PARSEDOPTS="$(parse_mount_opts "$OPTS")" + case "$FST" in + "ext3"|"reiserfs") + PARSEDOPTS="$(parse_mount_opts commit "$OPTS")" + mount $DEV -t $FST $MP -o remount,$PARSEDOPTS,commit=$MAX_AGE,noatime + ;; + "xfs") + mount $DEV -t $FST $MP -o remount,$OPTS,noatime + ;; + esac + if [ -b $DEV ] ; then + blockdev --setra $(($READAHEAD * 2)) $DEV + fi + done + fi + echo "." + ;; + stop) + U_AGE=$((100*$DEF_UPDATE)) + B_AGE=$((100*$DEF_AGE)) + echo -n "Stopping laptop_mode" + echo "0" > /proc/sys/vm/laptop_mode + if [ -f /proc/sys/fs/xfs/age_buffer ] && [ ! -f /proc/sys/fs/xfs/lm_age_buffer ] ; then + # These need to be restored though, if there are no lm_*. + echo "$(($XFS_HZ*$DEF_XFS_AGE_BUFFER))" > /proc/sys/fs/xfs/age_buffer + echo "$(($XFS_HZ*$DEF_XFS_SYNC_INTERVAL))" > /proc/sys/fs/xfs/sync_interval + fi + case "$KLEVEL" in + "2.4") + echo "30 500 0 0 $U_AGE $B_AGE 60 20 0" > /proc/sys/vm/bdflush + ;; + "2.6") + echo "$U_AGE" > /proc/sys/vm/dirty_writeback_centisecs + echo "$B_AGE" > /proc/sys/vm/dirty_expire_centisecs + echo "$DEF_DIRTY_RATIO" > /proc/sys/vm/dirty_ratio + echo "$DEF_DIRTY_BACKGROUND_RATIO" > /proc/sys/vm/dirty_background_ratio + ;; + esac + if [ $DO_REMOUNTS -eq 1 ]; then + cat /etc/mtab | while read DEV MP FST OPTS DUMP PASS ; do + # Reset commit and atime options to defaults. + case "$FST" in + "ext3"|"reiserfs") + PARSEDOPTS="$(parse_mount_opts_wfstab $DEV commit $OPTS)" + PARSEDOPTS="$(parse_yesno_opts_wfstab $DEV atime atime $PARSEDOPTS)" + mount $DEV -t $FST $MP -o remount,$PARSEDOPTS + ;; + "xfs") + PARSEDOPTS="$(parse_yesno_opts_wfstab $DEV atime atime $OPTS)" + mount $DEV -t $FST $MP -o remount,$PARSEDOPTS + ;; + esac + if [ -b $DEV ] ; then + blockdev --setra 256 $DEV + fi + done + fi + echo "." + ;; + *) + echo "Usage: $0 {start|stop}" + ;; + +esac + +exit 0 + +--------------------CONTROL SCRIPT END-------------------------------------------- + + +ACPI integration +---------------- + +Dax Kelson submitted this so that the ACPI acpid daemon will +kick off the laptop_mode script and run hdparm. + +---------------------------/etc/acpi/events/ac_adapter BEGIN------------------------------------------- +event=ac_adapter +action=/etc/acpi/actions/battery.sh +---------------------------/etc/acpi/events/ac_adapter END------------------------------------------- + +---------------------------/etc/acpi/actions/battery.sh BEGIN------------------------------------------- +#!/bin/sh + +# cpu throttling +# cat /proc/acpi/processor/CPU0/throttling for more info +ACAD_THR=0 +BATT_THR=2 + +# spindown time for HD (man hdparm for valid values) +# I prefer 2 hours for acad and 20 seconds for batt +ACAD_HD=244 +BATT_HD=4 + +# ac/battery event handler + +status=`awk '/^state: / { print $2 }' /proc/acpi/ac_adapter/AC/state` + +case $status in + "on-line") + echo "Setting HD spindown to 2 hours" + /sbin/laptop-mode stop + /sbin/hdparm -S $ACAD_HD /dev/hda > /dev/null 2>&1 + /sbin/hdparm -B 255 /dev/hda > /dev/null 2>&1 + #echo -n $ACAD_CPU:$ACAD_THR > /proc/acpi/processor/CPU0/limit + exit 0 + ;; + "off-line") + echo "Setting HD spindown to 20 seconds" + /sbin/laptop-mode start + /sbin/hdparm -S $BATT_HD /dev/hda > /dev/null 2>&1 + /sbin/hdparm -B 1 /dev/hda > /dev/null 2>&1 + #echo -n $BATT_CPU:$BATT_THR > /proc/acpi/processor/CPU0/limit + exit 0 + ;; +esac +---------------------------/etc/acpi/actions/battery.sh END------------------------------------------- + +Monitoring tool +--------------- + +Bartek Kania submitted this, it can be used to measure how much time your disk +spends spun up/down. + +---------------------------dslm.c BEGIN------------------------------------------- +/* + * Simple Disk Sleep Monitor + * by Bartek Kania + * Licenced under the GPL + */ +#include <unistd.h> +#include <stdlib.h> +#include <stdio.h> +#include <fcntl.h> +#include <errno.h> +#include <time.h> +#include <string.h> +#include <signal.h> +#include <sys/ioctl.h> +#include <linux/hdreg.h> + +#ifdef DEBUG +#define D(x) x +#else +#define D(x) +#endif + +int endit = 0; + +/* Check if the disk is in powersave-mode + * Most of the code is stolen from hdparm. + * 1 = active, 0 = standby/sleep, -1 = unknown */ +int check_powermode(int fd) +{ + unsigned char args[4] = {WIN_CHECKPOWERMODE1,0,0,0}; + int state; + + if (ioctl(fd, HDIO_DRIVE_CMD, &args) + && (args[0] = WIN_CHECKPOWERMODE2) /* try again with 0x98 */ + && ioctl(fd, HDIO_DRIVE_CMD, &args)) { + if (errno != EIO || args[0] != 0 || args[1] != 0) { + state = -1; /* "unknown"; */ + } else + state = 0; /* "sleeping"; */ + } else { + state = (args[2] == 255) ? 1 : 0; + } + D(printf(" drive state is: %d\n", state)); + + return state; +} + +char *state_name(int i) +{ + if (i == -1) return "unknown"; + if (i == 0) return "sleeping"; + if (i == 1) return "active"; + + return "internal error"; +} + +char *myctime(time_t time) +{ + char *ts = ctime(&time); + ts[strlen(ts) - 1] = 0; + + return ts; +} + +void measure(int fd) +{ + time_t start_time; + int last_state; + time_t last_time; + int curr_state; + time_t curr_time = 0; + time_t time_diff; + time_t active_time = 0; + time_t sleep_time = 0; + time_t unknown_time = 0; + time_t total_time = 0; + int changes = 0; + float tmp; + + printf("Starting measurements\n"); + + last_state = check_powermode(fd); + start_time = last_time = time(0); + printf(" System is in state %s\n\n", state_name(last_state)); + + while(!endit) { + sleep(1); + curr_state = check_powermode(fd); + + if (curr_state != last_state || endit) { + changes++; + curr_time = time(0); + time_diff = curr_time - last_time; + + if (last_state == 1) active_time += time_diff; + else if (last_state == 0) sleep_time += time_diff; + else unknown_time += time_diff; + + last_state = curr_state; + last_time = curr_time; + + printf("%s: State-change to %s\n", myctime(curr_time), + state_name(curr_state)); + } + } + changes--; /* Compensate for SIGINT */ + + total_time = time(0) - start_time; + printf("\nTotal running time: %lus\n", curr_time - start_time); + printf(" State changed %d times\n", changes); + + tmp = (float)sleep_time / (float)total_time * 100; + printf(" Time in sleep state: %lus (%.2f%%)\n", sleep_time, tmp); + tmp = (float)active_time / (float)total_time * 100; + printf(" Time in active state: %lus (%.2f%%)\n", active_time, tmp); + tmp = (float)unknown_time / (float)total_time * 100; + printf(" Time in unknown state: %lus (%.2f%%)\n", unknown_time, tmp); +} + +void ender(int s) +{ + endit = 1; +} + +void usage() +{ + puts("usage: dslm [-w <time>] <disk>"); + exit(0); +} + +int main(int ac, char **av) +{ + int fd; + char *disk = 0; + int settle_time = 60; + + /* Parse the simple command-line */ + if (ac == 2) + disk = av[1]; + else if (ac == 4) { + settle_time = atoi(av[2]); + disk = av[3]; + } else + usage(); + + if (!(fd = open(disk, O_RDONLY|O_NONBLOCK))) { + printf("Can't open %s, because: %s\n", disk, strerror(errno)); + exit(-1); + } + + if (settle_time) { + printf("Waiting %d seconds for the system to settle down to " + "'normal'\n", settle_time); + sleep(settle_time); + } else + puts("Not waiting for system to settle down"); + + signal(SIGINT, ender); + + measure(fd); + + close(fd); + + return 0; +} +---------------------------dslm.c END--------------------------------------------- diff --git a/Documentation/s390/s390dbf.txt b/Documentation/s390/s390dbf.txt index e7048364a9f9..692cc26cfc74 100644 --- a/Documentation/s390/s390dbf.txt +++ b/Documentation/s390/s390dbf.txt @@ -66,9 +66,9 @@ a view can be inspected simply by reading the corresponding proc file. All debug logs have an an actual debug level (range from 0 to 6). The default level is 3. Event and Exception functions have a 'level' parameter. Only debug entries with a level that is lower or equal -than the actual level are written to the log. This means that high -priority log entries should have a low level value whereas low priority -entries should have a high one. +than the actual level are written to the log. This means, when +writing events, high priority log entries should have a low level +value whereas low priority entries should have a high one. The actual debug level can be changed with the help of the proc-filesystem through writing a number string "x" to the 'level' proc file which is provided for every debug log. Debugging can be switched off completely diff --git a/Documentation/sound/alsa/ALSA-Configuration.txt b/Documentation/sound/alsa/ALSA-Configuration.txt index 0badcacd9dc0..addec50998e6 100644 --- a/Documentation/sound/alsa/ALSA-Configuration.txt +++ b/Documentation/sound/alsa/ALSA-Configuration.txt @@ -30,8 +30,7 @@ isapnptools. Creating ALSA devices ===================== -Use the MAKEDEV.snd script located in the directory named scripts -in the linux kernel tree. +Use the /dev/MAKEDEV script to create the nessecary device nodes. Module parameters diff --git a/Documentation/video4linux/CARDLIST.bttv b/Documentation/video4linux/CARDLIST.bttv index 64229aee1a3f..e46761c39e3f 100644 --- a/Documentation/video4linux/CARDLIST.bttv +++ b/Documentation/video4linux/CARDLIST.bttv @@ -113,3 +113,9 @@ card=111 - IVC-120G card=112 - pcHDTV HD-2000 TV card=113 - Twinhan DST + clones card=114 - Winfast VC100 +card=115 - Teppro TEV-560/InterVision IV-560 +card=116 - SIMUS GVC1100 +card=117 - NGS NGSTV+ +card=118 - LMLBT4 +card=119 - Tekram M205 PRO +card=120 - Conceptronic CONTVFMi diff --git a/Documentation/video4linux/CARDLIST.saa7134 b/Documentation/video4linux/CARDLIST.saa7134 index 619e07a8d942..117dd29599c8 100644 --- a/Documentation/video4linux/CARDLIST.saa7134 +++ b/Documentation/video4linux/CARDLIST.saa7134 @@ -1,23 +1,34 @@ 0 -> UNKNOWN/GENERIC 1 -> Proteus Pro [philips reference design] [1131:2001,1131:2001] - 2 -> LifeView FlyVIDEO3000 [5168:0138] + 2 -> LifeView FlyVIDEO3000 [5168:0138,4e42:0138] 3 -> LifeView FlyVIDEO2000 [5168:0138] 4 -> EMPRESS [1131:6752] 5 -> SKNet Monster TV [1131:4e85] 6 -> Tevion MD 9717 - 7 -> KNC One TV-Station RDS / Typhoon TV+Radio 90031 [1131:fe01] - 8 -> Terratec Cinergy 400 TV [153B:1142] - 9 -> Medion 5044 - 10 -> Kworld/KuroutoShikou SAA7130-TVPCI - 11 -> Terratec Cinergy 600 TV [153B:1143] - 12 -> Medion 7134 [16be:0003] - 13 -> ELSA EX-VISION 300TV [1048:226b] - 14 -> ELSA EX-VISION 500TV [1048:226b] - 15 -> ASUS TV-FM 7134 [PCI_VENDOR_ID_ASUSTEK:4842,PCI_VENDOR_ID_ASUSTEK:4830] - 16 -> AOPEN VA1000 POWER [1131:7133] - 17 -> 10MOONS PCI TV CAPTURE CARD [1131:2001] - 18 -> BMK MPEX No Tuner - 19 -> Compro VideoMate TV [185b:c100] - 20 -> Matrox CronosPlus [PCI_VENDOR_ID_MATROX:48d0] - 21 -> Medion 2819 [1461:a70b] - 22 -> BMK MPEX Tuner + 7 -> KNC One TV-Station RDS / Typhoon TV Tuner RDS [1131:fe01,1894:fe01] + 8 -> KNC One TV-Station DVR [1894:a006] + 9 -> Terratec Cinergy 400 TV [153B:1142] + 10 -> Medion 5044 + 11 -> Kworld/KuroutoShikou SAA7130-TVPCI + 12 -> Terratec Cinergy 600 TV [153B:1143] + 13 -> Medion 7134 [16be:0003] + 14 -> Typhoon TV+Radio 90031 + 15 -> ELSA EX-VISION 300TV [1048:226b] + 16 -> ELSA EX-VISION 500TV [1048:226b] + 17 -> ASUS TV-FM 7134 [1043:4842,1043:4830,1043:4840] + 18 -> AOPEN VA1000 POWER [1131:7133] + 19 -> 10MOONS PCI TV CAPTURE CARD [1131:2001] + 20 -> BMK MPEX No Tuner + 21 -> Compro VideoMate TV [185b:c100] + 22 -> Matrox CronosPlus [102B:48d0] + 23 -> Medion 2819/ AverMedia M156 [1461:a70b,1461:2115] + 24 -> BMK MPEX Tuner + 25 -> ASUS TV-FM 7133 [1043:4843] + 26 -> Pinnacle PCTV Stereo (saa7134) [11bd:002b] + 27 -> Manli MuchTV M-TV002 + 28 -> Manli MuchTV M-TV001 + 29 -> Nagase Sangyo TransGear 3000TV [1461:050c] + 30 -> Elitegroup ECS TVP3XP FM1216 Tuner Card(PAL-BG,FM) [1019:4cb4] + 31 -> Elitegroup ECS TVP3XP FM1236 Tuner Card (NTSC,FM) [1019:4cb5] + 32 -> AVACS SmartTV + 33 -> AVerMedia DVD EZMaker [1461:10ff] diff --git a/Documentation/video4linux/CARDLIST.tuner b/Documentation/video4linux/CARDLIST.tuner index 64e79fb8713e..f7bafe862ba0 100644 --- a/Documentation/video4linux/CARDLIST.tuner +++ b/Documentation/video4linux/CARDLIST.tuner @@ -31,7 +31,7 @@ tuner=29 - LG PAL_BG (TPI8PSB11D) tuner=30 - Temic PAL* auto + FM (4009 FN5) tuner=31 - SHARP NTSC_JP (2U5JF5540) tuner=32 - Samsung PAL TCPM9091PD27 -tuner=33 - MT2032 universal +tuner=33 - MT20xx universal tuner=34 - Temic PAL_BG (4106 FH5) tuner=35 - Temic PAL_DK/SECAM_L (4012 FY5) tuner=36 - Temic NTSC (4136 FY5) @@ -41,3 +41,6 @@ tuner=39 - LG NTSC (newer TAPC series) tuner=40 - HITACHI V7-J180AT tuner=41 - Philips PAL_MK (FI1216 MK) tuner=42 - Philips 1236D ATSC/NTSC daul in +tuner=43 - Philips NTSC MK3 (FM1236MK3 or FM1236/F) +tuner=44 - Philips 4 in 1 (ATI TV Wonder Pro/Conexant) +tuner=45 - Microtune 4049 FM5 diff --git a/Documentation/video4linux/README.cx88 b/Documentation/video4linux/README.cx88 index 1d23f0dff642..026acd207a20 100644 --- a/Documentation/video4linux/README.cx88 +++ b/Documentation/video4linux/README.cx88 @@ -9,20 +9,29 @@ current status ============== video - Basically works. Some minor quality glitches. For now - only capture, overlay support isn't completed yet. + - Basically works. + - Some minor image quality glitches. + - Red and blue are swapped sometimes for not-yet known + reasons (seems to depend on the image size, try to resize + your tv app window as workaround ...). + - For now only capture, overlay support isn't completed yet. audio - Doesn't work. Also the chip specs for the on-chip TV sound - decoder are next to useless :-/ - Most tuner chips do provide mono sound, which may or may not - be useable depending on the board design. With the Hauppauge - cards it works, so there is at least mono sound. Not nice, - but better than nothing. + - The chip specs for the on-chip TV sound decoder are next + to useless :-/ + - Neverless the builtin TV sound decoder starts working now, + at least for PAL-BG. Other TV norms need other code ... + FOR ANY REPORTS ON THIS PLEASE MENTION THE TV NORM YOU ARE + USING. + - Most tuner chips do provide mono sound, which may or may not + be useable depending on the board design. With the Hauppauge + cards it works, so there is mono sound available as fallback. + - audio data dma (i.e. recording without loopback cable to the + sound card) should be possible, but there is no code yet ... vbi - not implemented yet (but I don't expect problems here, just - found no time for that yet). + - some code present. Doesn't crash any more, but also doesn't + work yet ... how to add support for new cards @@ -38,18 +47,22 @@ like this one: 34xxx models [card=1,autodetected] If your card is listed as "board: UNKNOWN/GENERIC" it is unknown to -the driver. - -You can try to create a new entry yourself, or you can mail me the -config information. I need at least the following informations to -add the card: - - * the PCI Subsystem ID ("0070:3400" from the line above, "lspci -v" - output is fine too). - * the tuner type used by the card. You can try to find one by - trial-and-error using the tuner=<n> insmod option. If you - know which one the card has you can also have a look at the - list in CARDLIST.tuner +the driver. What to do then? + + (1) Try upgrading to the latest snapshot, maybe it has been added + meanwhile. + (2) You can try to create a new entry yourself, have a look at + cx88-cards.c. If that worked, mail me your changes as unified + diff ("diff -u"). + (3) Or you can mail me the config information. I need at least the + following informations to add the card: + + * the PCI Subsystem ID ("0070:3400" from the line above, + "lspci -v" output is fine too). + * the tuner type used by the card. You can try to find one by + trial-and-error using the tuner=<n> insmod option. If you + know which one the card has you can also have a look at the + list in CARDLIST.tuner Have fun, |
