Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6
This commit is contained in:
commit
e199e6136c
@ -130,8 +130,6 @@ edac.txt
|
||||
- information on EDAC - Error Detection And Correction
|
||||
eisa.txt
|
||||
- info on EISA bus support.
|
||||
exception.txt
|
||||
- how Linux v2.2 handles exceptions without verify_area etc.
|
||||
fault-injection/
|
||||
- dir with docs about the fault injection capabilities infrastructure.
|
||||
fb/
|
||||
@ -234,6 +232,8 @@ memory.txt
|
||||
- info on typical Linux memory problems.
|
||||
mips/
|
||||
- directory with info about Linux on MIPS architecture.
|
||||
mmc/
|
||||
- directory with info about the MMC subsystem
|
||||
mono.txt
|
||||
- how to execute Mono-based .NET binaries with the help of BINFMT_MISC.
|
||||
mutex-design.txt
|
||||
|
@ -1,71 +0,0 @@
|
||||
What: /sys/kernel/debug/kmemtrace/
|
||||
Date: July 2008
|
||||
Contact: Eduard - Gabriel Munteanu <eduard.munteanu@linux360.ro>
|
||||
Description:
|
||||
|
||||
In kmemtrace-enabled kernels, the following files are created:
|
||||
|
||||
/sys/kernel/debug/kmemtrace/
|
||||
cpu<n> (0400) Per-CPU tracing data, see below. (binary)
|
||||
total_overruns (0400) Total number of bytes which were dropped from
|
||||
cpu<n> files because of full buffer condition,
|
||||
non-binary. (text)
|
||||
abi_version (0400) Kernel's kmemtrace ABI version. (text)
|
||||
|
||||
Each per-CPU file should be read according to the relay interface. That is,
|
||||
the reader should set affinity to that specific CPU and, as currently done by
|
||||
the userspace application (though there are other methods), use poll() with
|
||||
an infinite timeout before every read(). Otherwise, erroneous data may be
|
||||
read. The binary data has the following _core_ format:
|
||||
|
||||
Event ID (1 byte) Unsigned integer, one of:
|
||||
0 - represents an allocation (KMEMTRACE_EVENT_ALLOC)
|
||||
1 - represents a freeing of previously allocated memory
|
||||
(KMEMTRACE_EVENT_FREE)
|
||||
Type ID (1 byte) Unsigned integer, one of:
|
||||
0 - this is a kmalloc() / kfree()
|
||||
1 - this is a kmem_cache_alloc() / kmem_cache_free()
|
||||
2 - this is a __get_free_pages() et al.
|
||||
Event size (2 bytes) Unsigned integer representing the
|
||||
size of this event. Used to extend
|
||||
kmemtrace. Discard the bytes you
|
||||
don't know about.
|
||||
Sequence number (4 bytes) Signed integer used to reorder data
|
||||
logged on SMP machines. Wraparound
|
||||
must be taken into account, although
|
||||
it is unlikely.
|
||||
Caller address (8 bytes) Return address to the caller.
|
||||
Pointer to mem (8 bytes) Pointer to target memory area. Can be
|
||||
NULL, but not all such calls might be
|
||||
recorded.
|
||||
|
||||
In case of KMEMTRACE_EVENT_ALLOC events, the next fields follow:
|
||||
|
||||
Requested bytes (8 bytes) Total number of requested bytes,
|
||||
unsigned, must not be zero.
|
||||
Allocated bytes (8 bytes) Total number of actually allocated
|
||||
bytes, unsigned, must not be lower
|
||||
than requested bytes.
|
||||
Requested flags (4 bytes) GFP flags supplied by the caller.
|
||||
Target CPU (4 bytes) Signed integer, valid for event id 1.
|
||||
If equal to -1, target CPU is the same
|
||||
as origin CPU, but the reverse might
|
||||
not be true.
|
||||
|
||||
The data is made available in the same endianness the machine has.
|
||||
|
||||
Other event ids and type ids may be defined and added. Other fields may be
|
||||
added by increasing event size, but see below for details.
|
||||
Every modification to the ABI, including new id definitions, are followed
|
||||
by bumping the ABI version by one.
|
||||
|
||||
Adding new data to the packet (features) is done at the end of the mandatory
|
||||
data:
|
||||
Feature size (2 byte)
|
||||
Feature ID (1 byte)
|
||||
Feature data (Feature size - 3 bytes)
|
||||
|
||||
|
||||
Users:
|
||||
kmemtrace-user - git://repo.or.cz/kmemtrace-user.git
|
||||
|
21
Documentation/ABI/testing/sysfs-bus-i2c-devices-hm6352
Normal file
21
Documentation/ABI/testing/sysfs-bus-i2c-devices-hm6352
Normal file
@ -0,0 +1,21 @@
|
||||
Where: /sys/bus/i2c/devices/.../heading0_input
|
||||
Date: April 2010
|
||||
Kernel Version: 2.6.36?
|
||||
Contact: alan.cox@intel.com
|
||||
Description: Reports the current heading from the compass as a floating
|
||||
point value in degrees.
|
||||
|
||||
Where: /sys/bus/i2c/devices/.../power_state
|
||||
Date: April 2010
|
||||
Kernel Version: 2.6.36?
|
||||
Contact: alan.cox@intel.com
|
||||
Description: Sets the power state of the device. 0 sets the device into
|
||||
sleep mode, 1 wakes it up.
|
||||
|
||||
Where: /sys/bus/i2c/devices/.../calibration
|
||||
Date: April 2010
|
||||
Kernel Version: 2.6.36?
|
||||
Contact: alan.cox@intel.com
|
||||
Description: Sets the calibration on or off (1 = on, 0 = off). See the
|
||||
chip data sheet.
|
||||
|
@ -139,3 +139,30 @@ Contact: linux-pci@vger.kernel.org
|
||||
Description:
|
||||
This symbolic link points to the PCI hotplug controller driver
|
||||
module that manages the hotplug slot.
|
||||
|
||||
What: /sys/bus/pci/devices/.../label
|
||||
Date: July 2010
|
||||
Contact: Narendra K <narendra_k@dell.com>, linux-bugs@dell.com
|
||||
Description:
|
||||
Reading this attribute will provide the firmware
|
||||
given name(SMBIOS type 41 string) of the PCI device.
|
||||
The attribute will be created only if the firmware
|
||||
has given a name to the PCI device.
|
||||
Users:
|
||||
Userspace applications interested in knowing the
|
||||
firmware assigned name of the PCI device.
|
||||
|
||||
What: /sys/bus/pci/devices/.../index
|
||||
Date: July 2010
|
||||
Contact: Narendra K <narendra_k@dell.com>, linux-bugs@dell.com
|
||||
Description:
|
||||
Reading this attribute will provide the firmware
|
||||
given instance(SMBIOS type 41 device type instance)
|
||||
of the PCI device. The attribute will be created
|
||||
only if the firmware has given a device type instance
|
||||
to the PCI device.
|
||||
Users:
|
||||
Userspace applications interested in knowing the
|
||||
firmware assigned device type instance of the PCI
|
||||
device that can help in understanding the firmware
|
||||
intended order of the PCI device.
|
||||
|
@ -7,3 +7,15 @@ Description:
|
||||
0 -> resumed
|
||||
|
||||
(_UDC_ is the name of the USB Device Controller driver)
|
||||
|
||||
What: /sys/devices/platform/_UDC_/gadget/gadget-lunX/nofua
|
||||
Date: July 2010
|
||||
Contact: Andy Shevchenko <andy.shevchenko@gmail.com>
|
||||
Description:
|
||||
Show or set the reaction on the FUA (Force Unit Access) bit in
|
||||
the SCSI WRITE(10,12) commands when a gadget in USB Mass
|
||||
Storage mode.
|
||||
|
||||
Possible values are:
|
||||
1 -> ignore the FUA flag
|
||||
0 -> obey the FUA flag
|
||||
|
31
Documentation/ABI/testing/sysfs-i2c-bmp085
Normal file
31
Documentation/ABI/testing/sysfs-i2c-bmp085
Normal file
@ -0,0 +1,31 @@
|
||||
What: /sys/bus/i2c/devices/<busnum>-<devaddr>/pressure0_input
|
||||
Date: June 2010
|
||||
Contact: Christoph Mair <christoph.mair@gmail.com>
|
||||
Description: Start a pressure measurement and read the result. Values
|
||||
represent the ambient air pressure in pascal (0.01 millibar).
|
||||
|
||||
Reading: returns the current air pressure.
|
||||
|
||||
|
||||
What: /sys/bus/i2c/devices/<busnum>-<devaddr>/temp0_input
|
||||
Date: June 2010
|
||||
Contact: Christoph Mair <christoph.mair@gmail.com>
|
||||
Description: Measure the ambient temperature. The returned value represents
|
||||
the ambient temperature in units of 0.1 degree celsius.
|
||||
|
||||
Reading: returns the current temperature.
|
||||
|
||||
|
||||
What: /sys/bus/i2c/devices/<busnum>-<devaddr>/oversampling
|
||||
Date: June 2010
|
||||
Contact: Christoph Mair <christoph.mair@gmail.com>
|
||||
Description: Tell the bmp085 to use more samples to calculate a pressure
|
||||
value. When writing to this file the chip will use 2^x samples
|
||||
to calculate the next pressure value with x being the value
|
||||
written. Using this feature will decrease RMS noise and
|
||||
increase the measurement time.
|
||||
|
||||
Reading: returns the current oversampling setting.
|
||||
|
||||
Writing: sets a new oversampling setting.
|
||||
Accepted values: 0..3.
|
@ -738,21 +738,31 @@ to "Closing".
|
||||
CONFIG_NEED_SG_DMA_LENGTH if the architecture supports IOMMUs
|
||||
(including software IOMMU).
|
||||
|
||||
2) ARCH_KMALLOC_MINALIGN
|
||||
2) ARCH_DMA_MINALIGN
|
||||
|
||||
Architectures must ensure that kmalloc'ed buffer is
|
||||
DMA-safe. Drivers and subsystems depend on it. If an architecture
|
||||
isn't fully DMA-coherent (i.e. hardware doesn't ensure that data in
|
||||
the CPU cache is identical to data in main memory),
|
||||
ARCH_KMALLOC_MINALIGN must be set so that the memory allocator
|
||||
ARCH_DMA_MINALIGN must be set so that the memory allocator
|
||||
makes sure that kmalloc'ed buffer doesn't share a cache line with
|
||||
the others. See arch/arm/include/asm/cache.h as an example.
|
||||
|
||||
Note that ARCH_KMALLOC_MINALIGN is about DMA memory alignment
|
||||
Note that ARCH_DMA_MINALIGN is about DMA memory alignment
|
||||
constraints. You don't need to worry about the architecture data
|
||||
alignment constraints (e.g. the alignment constraints about 64-bit
|
||||
objects).
|
||||
|
||||
3) Supporting multiple types of IOMMUs
|
||||
|
||||
If your architecture needs to support multiple types of IOMMUs, you
|
||||
can use include/linux/asm-generic/dma-mapping-common.h. It's a
|
||||
library to support the DMA API with multiple types of IOMMUs. Lots
|
||||
of architectures (x86, powerpc, sh, alpha, ia64, microblaze and
|
||||
sparc) use it. Choose one to see how it can be used. If you need to
|
||||
support multiple types of IOMMUs in a single system, the example of
|
||||
x86 or powerpc helps.
|
||||
|
||||
Closing
|
||||
|
||||
This document, and the API itself, would not be in its current
|
||||
|
@ -455,12 +455,6 @@ Free memory allocated by the nonconsistent API. All parameters must
|
||||
be identical to those passed in (and returned by
|
||||
dma_alloc_noncoherent()).
|
||||
|
||||
int
|
||||
dma_is_consistent(struct device *dev, dma_addr_t dma_handle)
|
||||
|
||||
Returns true if the device dev is performing consistent DMA on the memory
|
||||
area pointed to by the dma_handle.
|
||||
|
||||
int
|
||||
dma_get_cache_alignment(void)
|
||||
|
||||
|
@ -35,7 +35,7 @@ PS_METHOD = $(prefer-db2x)
|
||||
PHONY += xmldocs sgmldocs psdocs pdfdocs htmldocs mandocs installmandocs cleandocs xmldoclinks
|
||||
|
||||
BOOKS := $(addprefix $(obj)/,$(DOCBOOKS))
|
||||
xmldocs: $(BOOKS) xmldoclinks
|
||||
xmldocs: $(BOOKS)
|
||||
sgmldocs: xmldocs
|
||||
|
||||
PS := $(patsubst %.xml, %.ps, $(BOOKS))
|
||||
@ -45,7 +45,7 @@ PDF := $(patsubst %.xml, %.pdf, $(BOOKS))
|
||||
pdfdocs: $(PDF)
|
||||
|
||||
HTML := $(sort $(patsubst %.xml, %.html, $(BOOKS)))
|
||||
htmldocs: $(HTML)
|
||||
htmldocs: $(HTML) xmldoclinks
|
||||
$(call build_main_index)
|
||||
$(call build_images)
|
||||
|
||||
@ -95,7 +95,7 @@ define rule_docproc
|
||||
) > $(dir $@).$(notdir $@).cmd
|
||||
endef
|
||||
|
||||
%.xml: %.tmpl FORCE
|
||||
%.xml: %.tmpl xmldoclinks FORCE
|
||||
$(call if_changed_rule,docproc)
|
||||
|
||||
###
|
||||
|
@ -111,6 +111,7 @@ X!Edrivers/base/attribute_container.c
|
||||
<!--
|
||||
X!Edrivers/base/interface.c
|
||||
-->
|
||||
!Iinclude/linux/platform_device.h
|
||||
!Edrivers/base/platform.c
|
||||
!Edrivers/base/bus.c
|
||||
</sect1>
|
||||
|
@ -132,7 +132,6 @@ X!Ilib/string.c
|
||||
<title>FIFO Buffer</title>
|
||||
<sect1><title>kfifo interface</title>
|
||||
!Iinclude/linux/kfifo.h
|
||||
!Ekernel/kfifo.c
|
||||
</sect1>
|
||||
</chapter>
|
||||
|
||||
|
@ -1922,9 +1922,12 @@ machines due to caching.
|
||||
<function>mutex_lock()</function>
|
||||
</para>
|
||||
<para>
|
||||
There is a <function>mutex_trylock()</function> which can be
|
||||
used inside interrupt context, as it will not sleep.
|
||||
There is a <function>mutex_trylock()</function> which does not
|
||||
sleep. Still, it must not be used inside interrupt context since
|
||||
its implementation is not safe for that.
|
||||
<function>mutex_unlock()</function> will also never sleep.
|
||||
It cannot be used in interrupt context either since a mutex
|
||||
must be released by the same task that acquired it.
|
||||
</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
@ -199,10 +199,33 @@
|
||||
may be configured as a kernel built-in or a kernel loadable module.
|
||||
You can only make use of <constant>kgdbwait</constant> and early
|
||||
debugging if you build kgdboc into the kernel as a built-in.
|
||||
<para>Optionally you can elect to activate kms (Kernel Mode
|
||||
Setting) integration. When you use kms with kgdboc and you have a
|
||||
video driver that has atomic mode setting hooks, it is possible to
|
||||
enter the debugger on the graphics console. When the kernel
|
||||
execution is resumed, the previous graphics mode will be restored.
|
||||
This integration can serve as a useful tool to aid in diagnosing
|
||||
crashes or doing analysis of memory with kdb while allowing the
|
||||
full graphics console applications to run.
|
||||
</para>
|
||||
</para>
|
||||
<sect2 id="kgdbocArgs">
|
||||
<title>kgdboc arguments</title>
|
||||
<para>Usage: <constant>kgdboc=[kbd][[,]serial_device][,baud]</constant></para>
|
||||
<para>Usage: <constant>kgdboc=[kms][[,]kbd][[,]serial_device][,baud]</constant></para>
|
||||
<para>The order listed above must be observed if you use any of the
|
||||
optional configurations together.
|
||||
</para>
|
||||
<para>Abbreviations:
|
||||
<itemizedlist>
|
||||
<listitem><para>kms = Kernel Mode Setting</para></listitem>
|
||||
<listitem><para>kbd = Keyboard</para></listitem>
|
||||
</itemizedlist>
|
||||
</para>
|
||||
<para>You can configure kgdboc to use the keyboard, and or a serial
|
||||
device depending on if you are using kdb and or kgdb, in one of the
|
||||
following scenarios. The order listed above must be observed if
|
||||
you use any of the optional configurations together. Using kms +
|
||||
only gdb is generally not a useful combination.</para>
|
||||
<sect3 id="kgdbocArgs1">
|
||||
<title>Using loadable module or built-in</title>
|
||||
<para>
|
||||
@ -212,7 +235,7 @@
|
||||
<listitem>
|
||||
<para>As a kernel loadable module:</para>
|
||||
<para>Use the command: <constant>modprobe kgdboc kgdboc=<tty-device>,[baud]</constant></para>
|
||||
<para>Here are two examples of how you might formate the kgdboc
|
||||
<para>Here are two examples of how you might format the kgdboc
|
||||
string. The first is for an x86 target using the first serial port.
|
||||
The second example is for the ARM Versatile AB using the second
|
||||
serial port.
|
||||
@ -240,6 +263,9 @@
|
||||
</sect3>
|
||||
<sect3 id="kgdbocArgs3">
|
||||
<title>More examples</title>
|
||||
<para>You can configure kgdboc to use the keyboard, and or a serial
|
||||
device depending on if you are using kdb and or kgdb, in one of the
|
||||
following scenarios.</para>
|
||||
<para>You can configure kgdboc to use the keyboard, and or a serial device
|
||||
depending on if you are using kdb and or kgdb, in one of the
|
||||
following scenarios.
|
||||
@ -255,6 +281,12 @@
|
||||
<listitem><para>kdb with a keyboard</para>
|
||||
<para><constant>kgdboc=kbd</constant></para>
|
||||
</listitem>
|
||||
<listitem><para>kdb with kernel mode setting</para>
|
||||
<para><constant>kgdboc=kms,kbd</constant></para>
|
||||
</listitem>
|
||||
<listitem><para>kdb with kernel mode setting and kgdb over a serial port</para>
|
||||
<para><constant>kgdboc=kms,kbd,ttyS0,115200</constant></para>
|
||||
</listitem>
|
||||
</orderedlist>
|
||||
</para>
|
||||
</sect3>
|
||||
@ -637,6 +669,8 @@ Task Addr Pid Parent [*] cpu State Thread Command
|
||||
<listitem><para>The logic to perform safe memory reads and writes to memory while using the debugger</para></listitem>
|
||||
<listitem><para>A full implementation for software breakpoints unless overridden by the arch</para></listitem>
|
||||
<listitem><para>The API to invoke either the kdb or kgdb frontend to the debug core.</para></listitem>
|
||||
<listitem><para>The structures and callback API for atomic kernel mode setting.</para>
|
||||
<para>NOTE: kgdboc is where the kms callbacks are invoked.</para></listitem>
|
||||
</itemizedlist>
|
||||
</para>
|
||||
</listitem>
|
||||
@ -747,6 +781,8 @@ Task Addr Pid Parent [*] cpu State Thread Command
|
||||
</sect1>
|
||||
<sect1 id="kgdbocDesign">
|
||||
<title>kgdboc internals</title>
|
||||
<sect2>
|
||||
<title>kgdboc and uarts</title>
|
||||
<para>
|
||||
The kgdboc driver is actually a very thin driver that relies on the
|
||||
underlying low level to the hardware driver having "polling hooks"
|
||||
@ -754,11 +790,8 @@ Task Addr Pid Parent [*] cpu State Thread Command
|
||||
implementation of kgdboc it the serial_core was changed to expose a
|
||||
low level UART hook for doing polled mode reading and writing of a
|
||||
single character while in an atomic context. When kgdb makes an I/O
|
||||
request to the debugger, kgdboc invokes a call back in the serial
|
||||
core which in turn uses the call back in the UART driver. It is
|
||||
certainly possible to extend kgdboc to work with non-UART based
|
||||
consoles in the future.
|
||||
</para>
|
||||
request to the debugger, kgdboc invokes a callback in the serial
|
||||
core which in turn uses the callback in the UART driver.</para>
|
||||
<para>
|
||||
When using kgdboc with a UART, the UART driver must implement two callbacks in the <constant>struct uart_ops</constant>. Example from drivers/8250.c:<programlisting>
|
||||
#ifdef CONFIG_CONSOLE_POLL
|
||||
@ -772,9 +805,68 @@ Task Addr Pid Parent [*] cpu State Thread Command
|
||||
that they can be called from an atomic context and have to restore
|
||||
the state of the UART chip on return such that the system can return
|
||||
to normal when the debugger detaches. You need to be very careful
|
||||
with any kind of lock you consider, because failing here is most
|
||||
with any kind of lock you consider, because failing here is most likely
|
||||
going to mean pressing the reset button.
|
||||
</para>
|
||||
</sect2>
|
||||
<sect2 id="kgdbocKbd">
|
||||
<title>kgdboc and keyboards</title>
|
||||
<para>The kgdboc driver contains logic to configure communications
|
||||
with an attached keyboard. The keyboard infrastructure is only
|
||||
compiled into the kernel when CONFIG_KDB_KEYBOARD=y is set in the
|
||||
kernel configuration.</para>
|
||||
<para>The core polled keyboard driver driver for PS/2 type keyboards
|
||||
is in drivers/char/kdb_keyboard.c. This driver is hooked into the
|
||||
debug core when kgdboc populates the callback in the array
|
||||
called <constant>kdb_poll_funcs[]</constant>. The
|
||||
kdb_get_kbd_char() is the top-level function which polls hardware
|
||||
for single character input.
|
||||
</para>
|
||||
</sect2>
|
||||
<sect2 id="kgdbocKms">
|
||||
<title>kgdboc and kms</title>
|
||||
<para>The kgdboc driver contains logic to request the graphics
|
||||
display to switch to a text context when you are using
|
||||
"kgdboc=kms,kbd", provided that you have a video driver which has a
|
||||
frame buffer console and atomic kernel mode setting support.</para>
|
||||
<para>
|
||||
Every time the kernel
|
||||
debugger is entered it calls kgdboc_pre_exp_handler() which in turn
|
||||
calls con_debug_enter() in the virtual console layer. On resuming kernel
|
||||
execution, the kernel debugger calls kgdboc_post_exp_handler() which
|
||||
in turn calls con_debug_leave().</para>
|
||||
<para>Any video driver that wants to be compatible with the kernel
|
||||
debugger and the atomic kms callbacks must implement the
|
||||
mode_set_base_atomic, fb_debug_enter and fb_debug_leave operations.
|
||||
For the fb_debug_enter and fb_debug_leave the option exists to use
|
||||
the generic drm fb helper functions or implement something custom for
|
||||
the hardware. The following example shows the initialization of the
|
||||
.mode_set_base_atomic operation in
|
||||
drivers/gpu/drm/i915/intel_display.c:
|
||||
<informalexample>
|
||||
<programlisting>
|
||||
static const struct drm_crtc_helper_funcs intel_helper_funcs = {
|
||||
[...]
|
||||
.mode_set_base_atomic = intel_pipe_set_base_atomic,
|
||||
[...]
|
||||
};
|
||||
</programlisting>
|
||||
</informalexample>
|
||||
</para>
|
||||
<para>Here is an example of how the i915 driver initializes the fb_debug_enter and fb_debug_leave functions to use the generic drm helpers in
|
||||
drivers/gpu/drm/i915/intel_fb.c:
|
||||
<informalexample>
|
||||
<programlisting>
|
||||
static struct fb_ops intelfb_ops = {
|
||||
[...]
|
||||
.fb_debug_enter = drm_fb_helper_debug_enter,
|
||||
.fb_debug_leave = drm_fb_helper_debug_leave,
|
||||
[...]
|
||||
};
|
||||
</programlisting>
|
||||
</informalexample>
|
||||
</para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
</chapter>
|
||||
<chapter id="credits">
|
||||
|
@ -6,4 +6,5 @@
|
||||
<param name="callout.graphics">0</param>
|
||||
<!-- <param name="paper.type">A4</param> -->
|
||||
<param name="generate.section.toc.level">2</param>
|
||||
<param name="use.id.as.filename">1</param>
|
||||
</stylesheet>
|
||||
|
@ -104,4 +104,9 @@
|
||||
<title>Block IO</title>
|
||||
!Iinclude/trace/events/block.h
|
||||
</chapter>
|
||||
|
||||
<chapter id="workqueue">
|
||||
<title>Workqueue</title>
|
||||
!Iinclude/trace/events/workqueue.h
|
||||
</chapter>
|
||||
</book>
|
||||
|
@ -229,6 +229,22 @@ on working with the default settings initially.</para>
|
||||
and LIRC_SETUP_END. Drivers can also choose to ignore these ioctls.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
<term>LIRC_SET_WIDEBAND_RECEIVER</term>
|
||||
<listitem>
|
||||
<para>Some receivers are equipped with special wide band receiver which is intended
|
||||
to be used to learn output of existing remote.
|
||||
Calling that ioctl with (1) will enable it, and with (0) disable it.
|
||||
This might be useful of receivers that have otherwise narrow band receiver
|
||||
that prevents them to be used with some remotes.
|
||||
Wide band receiver might also be more precise
|
||||
On the other hand its disadvantage it usually reduced range of reception.
|
||||
Note: wide band receiver might be implictly enabled if you enable
|
||||
carrier reports. In that case it will be disabled as soon as you disable
|
||||
carrier reports. Trying to disable wide band receiver while carrier
|
||||
reports are active will do nothing.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
|
||||
</section>
|
||||
|
@ -240,6 +240,45 @@ colorspace <constant>V4L2_COLORSPACE_SRGB</constant>.</para>
|
||||
<entry>r<subscript>1</subscript></entry>
|
||||
<entry>r<subscript>0</subscript></entry>
|
||||
</row>
|
||||
<row id="V4L2-PIX-FMT-BGR666">
|
||||
<entry><constant>V4L2_PIX_FMT_BGR666</constant></entry>
|
||||
<entry>'BGRH'</entry>
|
||||
<entry></entry>
|
||||
<entry>b<subscript>5</subscript></entry>
|
||||
<entry>b<subscript>4</subscript></entry>
|
||||
<entry>b<subscript>3</subscript></entry>
|
||||
<entry>b<subscript>2</subscript></entry>
|
||||
<entry>b<subscript>1</subscript></entry>
|
||||
<entry>b<subscript>0</subscript></entry>
|
||||
<entry>g<subscript>5</subscript></entry>
|
||||
<entry>g<subscript>4</subscript></entry>
|
||||
<entry></entry>
|
||||
<entry>g<subscript>3</subscript></entry>
|
||||
<entry>g<subscript>2</subscript></entry>
|
||||
<entry>g<subscript>1</subscript></entry>
|
||||
<entry>g<subscript>0</subscript></entry>
|
||||
<entry>r<subscript>5</subscript></entry>
|
||||
<entry>r<subscript>4</subscript></entry>
|
||||
<entry>r<subscript>3</subscript></entry>
|
||||
<entry>r<subscript>2</subscript></entry>
|
||||
<entry></entry>
|
||||
<entry>r<subscript>1</subscript></entry>
|
||||
<entry>r<subscript>0</subscript></entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row id="V4L2-PIX-FMT-BGR24">
|
||||
<entry><constant>V4L2_PIX_FMT_BGR24</constant></entry>
|
||||
<entry>'BGR3'</entry>
|
||||
@ -700,6 +739,45 @@ defined in error. Drivers may interpret them as in <xref
|
||||
<entry>b<subscript>1</subscript></entry>
|
||||
<entry>b<subscript>0</subscript></entry>
|
||||
</row>
|
||||
<row id="V4L2-PIX-FMT-BGR666">
|
||||
<entry><constant>V4L2_PIX_FMT_BGR666</constant></entry>
|
||||
<entry>'BGRH'</entry>
|
||||
<entry></entry>
|
||||
<entry>b<subscript>5</subscript></entry>
|
||||
<entry>b<subscript>4</subscript></entry>
|
||||
<entry>b<subscript>3</subscript></entry>
|
||||
<entry>b<subscript>2</subscript></entry>
|
||||
<entry>b<subscript>1</subscript></entry>
|
||||
<entry>b<subscript>0</subscript></entry>
|
||||
<entry>g<subscript>5</subscript></entry>
|
||||
<entry>g<subscript>4</subscript></entry>
|
||||
<entry></entry>
|
||||
<entry>g<subscript>3</subscript></entry>
|
||||
<entry>g<subscript>2</subscript></entry>
|
||||
<entry>g<subscript>1</subscript></entry>
|
||||
<entry>g<subscript>0</subscript></entry>
|
||||
<entry>r<subscript>5</subscript></entry>
|
||||
<entry>r<subscript>4</subscript></entry>
|
||||
<entry>r<subscript>3</subscript></entry>
|
||||
<entry>r<subscript>2</subscript></entry>
|
||||
<entry></entry>
|
||||
<entry>r<subscript>1</subscript></entry>
|
||||
<entry>r<subscript>0</subscript></entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
<entry></entry>
|
||||
</row>
|
||||
<row><!-- id="V4L2-PIX-FMT-BGR24" -->
|
||||
<entry><constant>V4L2_PIX_FMT_BGR24</constant></entry>
|
||||
<entry>'BGR3'</entry>
|
||||
|
@ -98,6 +98,17 @@ system, git, as a "commit log". See #15, below.
|
||||
If your description starts to get long, that's a sign that you probably
|
||||
need to split up your patch. See #3, next.
|
||||
|
||||
When you submit or resubmit a patch or patch series, include the
|
||||
complete patch description and justification for it. Don't just
|
||||
say that this is version N of the patch (series). Don't expect the
|
||||
patch merger to refer back to earlier patch versions or referenced
|
||||
URLs to find the patch description and put that into the patch.
|
||||
I.e., the patch (series) and its description should be self-contained.
|
||||
This benefits both the patch merger(s) and reviewers. Some reviewers
|
||||
probably didn't even receive earlier versions of the patch.
|
||||
|
||||
If the patch fixes a logged bug entry, refer to that bug entry by
|
||||
number and URL.
|
||||
|
||||
|
||||
3) Separate your changes.
|
||||
|
@ -19,6 +19,8 @@ Note: Only ACPI METHOD can be overridden, any other object types like
|
||||
"Device", "OperationRegion", are not recognized.
|
||||
Note: The same ACPI control method can be overridden for many times,
|
||||
and it's always the latest one that used by Linux/kernel.
|
||||
Note: To get the ACPI debug object output (Store (AAAA, Debug)),
|
||||
please run "echo 1 > /sys/module/acpi/parameters/aml_debug_output".
|
||||
|
||||
1. override an existing method
|
||||
a) get the ACPI table via ACPI sysfs I/F. e.g. to get the DSDT,
|
||||
|
@ -1,11 +1,8 @@
|
||||
00-INDEX
|
||||
- This file
|
||||
|
||||
cachefeatures.txt
|
||||
- Supported cache features.
|
||||
|
||||
Filesystems
|
||||
- Requirements for mounting the root file system.
|
||||
|
||||
bfin-gpio-note.txt
|
||||
bfin-gpio-notes.txt
|
||||
- Notes in developing/using bfin-gpio driver.
|
||||
|
||||
bfin-spi-notes.txt
|
||||
- Notes for using bfin spi bus driver.
|
||||
|
@ -1,169 +0,0 @@
|
||||
/*
|
||||
* File: Documentation/blackfin/Filesystems
|
||||
* Based on:
|
||||
* Author:
|
||||
*
|
||||
* Created:
|
||||
* Description: This file contains the simple DMA Implementation for Blackfin
|
||||
*
|
||||
* Rev: $Id: Filesystems 2384 2006-11-01 04:12:43Z magicyang $
|
||||
*
|
||||
* Modified:
|
||||
* Copyright 2004-2006 Analog Devices Inc.
|
||||
*
|
||||
* Bugs: Enter bugs at http://blackfin.uclinux.org/
|
||||
*
|
||||
*/
|
||||
|
||||
How to mount the root file system in uClinux/Blackfin
|
||||
-----------------------------------------------------
|
||||
|
||||
1 Mounting EXT3 File system.
|
||||
------------------------
|
||||
|
||||
Creating an EXT3 File system for uClinux/Blackfin:
|
||||
|
||||
|
||||
Please follow the steps to form the EXT3 File system and mount the same as root
|
||||
file system.
|
||||
|
||||
a Make an ext3 file system as large as you want the final root file
|
||||
system.
|
||||
|
||||
mkfs.ext3 /dev/ram0 <your-rootfs-size-in-1k-blocks>
|
||||
|
||||
b Mount this Empty file system on a free directory as:
|
||||
|
||||
mount -t ext3 /dev/ram0 ./test
|
||||
where ./test is the empty directory.
|
||||
|
||||
c Copy your root fs directory that you have so carefully made over.
|
||||
|
||||
cp -af /tmp/my_final_rootfs_files/* ./test
|
||||
|
||||
(For ex: cp -af uClinux-dist/romfs/* ./test)
|
||||
|
||||
d If you have done everything right till now you should be able to see
|
||||
the required "root" dir's (that's etc, root, bin, lib, sbin...)
|
||||
|
||||
e Now unmount the file system
|
||||
|
||||
umount ./test
|
||||
|
||||
f Create the root file system image.
|
||||
|
||||
dd if=/dev/ram0 bs=1k count=<your-rootfs-size-in-1k-blocks> \
|
||||
> ext3fs.img
|
||||
|
||||
|
||||
Now you have to tell the kernel that will be mounting this file system as
|
||||
rootfs.
|
||||
So do a make menuconfig under kernel and select the Ext3 journaling file system
|
||||
support under File system --> submenu.
|
||||
|
||||
|
||||
2. Mounting EXT2 File system.
|
||||
-------------------------
|
||||
|
||||
By default the ext2 file system image will be created if you invoke make from
|
||||
the top uClinux-dist directory.
|
||||
|
||||
|
||||
3. Mounting CRAMFS File System
|
||||
----------------------------
|
||||
|
||||
To create a CRAMFS file system image execute the command
|
||||
|
||||
mkfs.cramfs ./test cramfs.img
|
||||
|
||||
where ./test is the target directory.
|
||||
|
||||
|
||||
4. Mounting ROMFS File System
|
||||
--------------------------
|
||||
|
||||
To create a ROMFS file system image execute the command
|
||||
|
||||
genromfs -v -V "ROMdisk" -f romfs.img -d ./test
|
||||
|
||||
where ./test is the target directory
|
||||
|
||||
|
||||
5. Mounting the JFFS2 Filesystem
|
||||
-----------------------------
|
||||
|
||||
To create a compressed JFFS filesystem (JFFS2), please execute the command
|
||||
|
||||
mkfs.jffs2 -d ./test -o jffs2.img
|
||||
|
||||
where ./test is the target directory.
|
||||
|
||||
However, please make sure the following is in your kernel config.
|
||||
|
||||
/*
|
||||
* RAM/ROM/Flash chip drivers
|
||||
*/
|
||||
#define CONFIG_MTD_CFI 1
|
||||
#define CONFIG_MTD_ROM 1
|
||||
/*
|
||||
* Mapping drivers for chip access
|
||||
*/
|
||||
#define CONFIG_MTD_COMPLEX_MAPPINGS 1
|
||||
#define CONFIG_MTD_BF533 1
|
||||
#undef CONFIG_MTD_UCLINUX
|
||||
|
||||
Through the u-boot boot loader, use the jffs2.img in the corresponding
|
||||
partition made in linux-2.6.x/drivers/mtd/maps/bf533_flash.c.
|
||||
|
||||
NOTE - Currently the Flash driver is available only for EZKIT. Watch out for a
|
||||
STAMP driver soon.
|
||||
|
||||
|
||||
6. Mounting the NFS File system
|
||||
-----------------------------
|
||||
|
||||
For mounting the NFS please do the following in the kernel config.
|
||||
|
||||
In Networking Support --> Networking options --> TCP/IP networking -->
|
||||
IP: kernel level autoconfiguration
|
||||
|
||||
Enable BOOTP Support.
|
||||
|
||||
In Kernel hacking --> Compiled-in kernel boot parameter add the following
|
||||
|
||||
root=/dev/nfs rw ip=bootp
|
||||
|
||||
In File system --> Network File system, Enable
|
||||
|
||||
NFS file system support --> NFSv3 client support
|
||||
Root File system on NFS
|
||||
|
||||
in uClibc menuconfig, do the following
|
||||
In Networking Support
|
||||
enable Remote Procedure Call (RPC) support
|
||||
Full RPC Support
|
||||
|
||||
On the Host side, ensure that /etc/dhcpd.conf looks something like this
|
||||
|
||||
ddns-update-style ad-hoc;
|
||||
allow bootp;
|
||||
subnet 10.100.4.0 netmask 255.255.255.0 {
|
||||
default-lease-time 122209600;
|
||||
max-lease-time 31557600;
|
||||
group {
|
||||
host bf533 {
|
||||
hardware ethernet 00:CF:52:49:C3:01;
|
||||
fixed-address 10.100.4.50;
|
||||
option root-path "/home/nfsmount";
|
||||
}
|
||||
}
|
||||
|
||||
ensure that /etc/exports looks something like this
|
||||
/home/nfsmount *(rw,no_root_squash,no_all_squash)
|
||||
|
||||
run the following commands as root (may differ depending on your
|
||||
distribution) :
|
||||
- service nfs start
|
||||
- service portmap start
|
||||
- service dhcpd start
|
||||
- /usr/sbin/exportfs
|
14
Documentation/blackfin/bfin-spi-notes.txt
Normal file
14
Documentation/blackfin/bfin-spi-notes.txt
Normal file
@ -0,0 +1,14 @@
|
||||
SPI Chip Select behavior:
|
||||
|
||||
With the Blackfin on-chip SPI peripheral, there is some logic tied to the CPHA
|
||||
bit whether the Slave Select Line is controlled by hardware (CPHA=0) or
|
||||
controlled by software (CPHA=1). However, the Linux SPI bus driver assumes that
|
||||
the Slave Select is always under software control and being asserted during
|
||||
the entire SPI transfer. - And not just bits_per_word duration.
|
||||
|
||||
In most cases you can utilize SPI MODE_3 instead of MODE_0 to work-around this
|
||||
behavior. If your SPI slave device in question requires SPI MODE_0 or MODE_2
|
||||
timing, you can utilize the GPIO controlled SPI Slave Select option instead.
|
||||
|
||||
You can even use the same pin whose peripheral role is a SSEL,
|
||||
but use it as a GPIO instead.
|
@ -1,55 +0,0 @@
|
||||
/*
|
||||
* File: Documentation/blackfin/cachefeatures.txt
|
||||
* Based on:
|
||||
* Author:
|
||||
*
|
||||
* Created:
|
||||
* Description: This file contains the simple DMA Implementation for Blackfin
|
||||
*
|
||||
* Rev: $Id: cachefeatures.txt 2384 2006-11-01 04:12:43Z magicyang $
|
||||
*
|
||||
* Modified:
|
||||
* Copyright 2004-2006 Analog Devices Inc.
|
||||
*
|
||||
* Bugs: Enter bugs at http://blackfin.uclinux.org/
|
||||
*
|
||||
*/
|
||||
|
||||
- Instruction and Data cache initialization.
|
||||
icache_init();
|
||||
dcache_init();
|
||||
|
||||
- Instruction and Data cache Invalidation Routines, when flushing the
|
||||
same is not required.
|
||||
_icache_invalidate();
|
||||
_dcache_invalidate();
|
||||
|
||||
Also, for invalidating the entire instruction and data cache, the below
|
||||
routines are provided (another method for invalidation, refer page no 267 and 287 of
|
||||
ADSP-BF533 Hardware Reference manual)
|
||||
|
||||
invalidate_entire_dcache();
|
||||
invalidate_entire_icache();
|
||||
|
||||
-External Flushing of Instruction and data cache routines.
|
||||
|
||||
flush_instruction_cache();
|
||||
flush_data_cache();
|
||||
|
||||
- Internal Flushing of Instruction and Data Cache.
|
||||
|
||||
icplb_flush();
|
||||
dcplb_flush();
|
||||
|
||||
- Miscellaneous cache functions.
|
||||
|
||||
flush_cache_all();
|
||||
flush_cache_mm();
|
||||
invalidate_dcache_range();
|
||||
flush_dcache_range();
|
||||
flush_dcache_page();
|
||||
flush_cache_range();
|
||||
flush_cache_page();
|
||||
invalidate_dcache_range();
|
||||
flush_page_to_ram();
|
||||
|
@ -7,7 +7,7 @@ Notes Written on Jan 15, 2002:
|
||||
|
||||
Last Updated May 2, 2002
|
||||
September 2003: Updated I/O Scheduler portions
|
||||
Nick Piggin <piggin@cyberone.com.au>
|
||||
Nick Piggin <npiggin@kernel.dk>
|
||||
|
||||
Introduction:
|
||||
|
||||
|
258
Documentation/coccinelle.txt
Normal file
258
Documentation/coccinelle.txt
Normal file
@ -0,0 +1,258 @@
|
||||
Copyright 2010 Nicolas Palix <npalix@diku.dk>
|
||||
Copyright 2010 Julia Lawall <julia@diku.dk>
|
||||
Copyright 2010 Gilles Muller <Gilles.Muller@lip6.fr>
|
||||
|
||||
|
||||
Getting Coccinelle
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The semantic patches included in the kernel use the 'virtual rule'
|
||||
feature which was introduced in Coccinelle version 0.1.11.
|
||||
|
||||
Coccinelle (>=0.2.0) is available through the package manager
|
||||
of many distributions, e.g. :
|
||||
|
||||
- Debian (>=squeeze)
|
||||
- Fedora (>=13)
|
||||
- Ubuntu (>=10.04 Lucid Lynx)
|
||||
- OpenSUSE
|
||||
- Arch Linux
|
||||
- NetBSD
|
||||
- FreeBSD
|
||||
|
||||
|
||||
You can get the latest version released from the Coccinelle homepage at
|
||||
http://coccinelle.lip6.fr/
|
||||
|
||||
Once you have it, run the following command:
|
||||
|
||||
./configure
|
||||
make
|
||||
|
||||
as a regular user, and install it with
|
||||
|
||||
sudo make install
|
||||
|
||||
|
||||
Using Coccinelle on the Linux kernel
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
A Coccinelle-specific target is defined in the top level
|
||||
Makefile. This target is named 'coccicheck' and calls the 'coccicheck'
|
||||
front-end in the 'scripts' directory.
|
||||
|
||||
Four modes are defined: report, patch, context, and org. The mode to
|
||||
use is specified by setting the MODE variable with 'MODE=<mode>'.
|
||||
|
||||
'report' generates a list in the following format:
|
||||
file:line:column-column: message
|
||||
|
||||
'patch' proposes a fix, when possible.
|
||||
|
||||
'context' highlights lines of interest and their context in a
|
||||
diff-like style.Lines of interest are indicated with '-'.
|
||||
|
||||
'org' generates a report in the Org mode format of Emacs.
|
||||
|
||||
Note that not all semantic patches implement all modes.
|
||||
|
||||
To make a report for every semantic patch, run the following command:
|
||||
|
||||
make coccicheck MODE=report
|
||||
|
||||
NB: The 'report' mode is the default one.
|
||||
|
||||
To produce patches, run:
|
||||
|
||||
make coccicheck MODE=patch
|
||||
|
||||
|
||||
The coccicheck target applies every semantic patch available in the
|
||||
subdirectories of 'scripts/coccinelle' to the entire Linux kernel.
|
||||
|
||||
For each semantic patch, a changelog message is proposed. It gives a
|
||||
description of the problem being checked by the semantic patch, and
|
||||
includes a reference to Coccinelle.
|
||||
|
||||
As any static code analyzer, Coccinelle produces false
|
||||
positives. Thus, reports must be carefully checked, and patches
|
||||
reviewed.
|
||||
|
||||
|
||||
Using Coccinelle with a single semantic patch
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The optional make variable COCCI can be used to check a single
|
||||
semantic patch. In that case, the variable must be initialized with
|
||||
the name of the semantic patch to apply.
|
||||
|
||||
For instance:
|
||||
|
||||
make coccicheck COCCI=<my_SP.cocci> MODE=patch
|
||||
or
|
||||
make coccicheck COCCI=<my_SP.cocci> MODE=report
|
||||
|
||||
|
||||
Proposing new semantic patches
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
New semantic patches can be proposed and submitted by kernel
|
||||
developers. For sake of clarity, they should be organized in the
|
||||
subdirectories of 'scripts/coccinelle/'.
|
||||
|
||||
|
||||
Detailed description of the 'report' mode
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
'report' generates a list in the following format:
|
||||
file:line:column-column: message
|
||||
|
||||
Example:
|
||||
|
||||
Running
|
||||
|
||||
make coccicheck MODE=report COCCI=scripts/coccinelle/err_cast.cocci
|
||||
|
||||
will execute the following part of the SmPL script.
|
||||
|
||||
<smpl>
|
||||
@r depends on !context && !patch && (org || report)@
|
||||
expression x;
|
||||
position p;
|
||||
@@
|
||||
|
||||
ERR_PTR@p(PTR_ERR(x))
|
||||
|
||||
@script:python depends on report@
|
||||
p << r.p;
|
||||
x << r.x;
|
||||
@@
|
||||
|
||||
msg="ERR_CAST can be used with %s" % (x)
|
||||
coccilib.report.print_report(p[0], msg)
|
||||
</smpl>
|
||||
|
||||
This SmPL excerpt generates entries on the standard output, as
|
||||
illustrated below:
|
||||
|
||||
/home/user/linux/crypto/ctr.c:188:9-16: ERR_CAST can be used with alg
|
||||
/home/user/linux/crypto/authenc.c:619:9-16: ERR_CAST can be used with auth
|
||||
/home/user/linux/crypto/xts.c:227:9-16: ERR_CAST can be used with alg
|
||||
|
||||
|
||||
Detailed description of the 'patch' mode
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
When the 'patch' mode is available, it proposes a fix for each problem
|
||||
identified.
|
||||
|
||||
Example:
|
||||
|
||||
Running
|
||||
make coccicheck MODE=patch COCCI=scripts/coccinelle/err_cast.cocci
|
||||
|
||||
will execute the following part of the SmPL script.
|
||||
|
||||
<smpl>
|
||||
@ depends on !context && patch && !org && !report @
|
||||
expression x;
|
||||
@@
|
||||
|
||||
- ERR_PTR(PTR_ERR(x))
|
||||
+ ERR_CAST(x)
|
||||
</smpl>
|
||||
|
||||
This SmPL excerpt generates patch hunks on the standard output, as
|
||||
illustrated below:
|
||||
|
||||
diff -u -p a/crypto/ctr.c b/crypto/ctr.c
|
||||
--- a/crypto/ctr.c 2010-05-26 10:49:38.000000000 +0200
|
||||
+++ b/crypto/ctr.c 2010-06-03 23:44:49.000000000 +0200
|
||||
@@ -185,7 +185,7 @@ static struct crypto_instance *crypto_ct
|
||||
alg = crypto_attr_alg(tb[1], CRYPTO_ALG_TYPE_CIPHER,
|
||||
CRYPTO_ALG_TYPE_MASK);
|
||||
if (IS_ERR(alg))
|
||||
- return ERR_PTR(PTR_ERR(alg));
|
||||
+ return ERR_CAST(alg);
|
||||
|
||||
/* Block size must be >= 4 bytes. */
|
||||
err = -EINVAL;
|
||||
|
||||
Detailed description of the 'context' mode
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
'context' highlights lines of interest and their context
|
||||
in a diff-like style.
|
||||
|
||||
NOTE: The diff-like output generated is NOT an applicable patch. The
|
||||
intent of the 'context' mode is to highlight the important lines
|
||||
(annotated with minus, '-') and gives some surrounding context
|
||||
lines around. This output can be used with the diff mode of
|
||||
Emacs to review the code.
|
||||
|
||||
Example:
|
||||
|
||||
Running
|
||||
make coccicheck MODE=context COCCI=scripts/coccinelle/err_cast.cocci
|
||||
|
||||
will execute the following part of the SmPL script.
|
||||
|
||||
<smpl>
|
||||
@ depends on context && !patch && !org && !report@
|
||||
expression x;
|
||||
@@
|
||||
|
||||
* ERR_PTR(PTR_ERR(x))
|
||||
</smpl>
|
||||
|
||||
This SmPL excerpt generates diff hunks on the standard output, as
|
||||
illustrated below:
|
||||
|
||||
diff -u -p /home/user/linux/crypto/ctr.c /tmp/nothing
|
||||
--- /home/user/linux/crypto/ctr.c 2010-05-26 10:49:38.000000000 +0200
|
||||
+++ /tmp/nothing
|
||||
@@ -185,7 +185,6 @@ static struct crypto_instance *crypto_ct
|
||||
alg = crypto_attr_alg(tb[1], CRYPTO_ALG_TYPE_CIPHER,
|
||||
CRYPTO_ALG_TYPE_MASK);
|
||||
if (IS_ERR(alg))
|
||||
- return ERR_PTR(PTR_ERR(alg));
|
||||
|
||||
/* Block size must be >= 4 bytes. */
|
||||
err = -EINVAL;
|
||||
|
||||
Detailed description of the 'org' mode
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
'org' generates a report in the Org mode format of Emacs.
|
||||
|
||||
Example:
|
||||
|
||||
Running
|
||||
make coccicheck MODE=org COCCI=scripts/coccinelle/err_cast.cocci
|
||||
|
||||
will execute the following part of the SmPL script.
|
||||
|
||||
<smpl>
|
||||
@r depends on !context && !patch && (org || report)@
|
||||
expression x;
|
||||
position p;
|
||||
@@
|
||||
|
||||
ERR_PTR@p(PTR_ERR(x))
|
||||
|
||||
@script:python depends on org@
|
||||
p << r.p;
|
||||
x << r.x;
|
||||
@@
|
||||
|
||||
msg="ERR_CAST can be used with %s" % (x)
|
||||
msg_safe=msg.replace("[","@(").replace("]",")")
|
||||
coccilib.org.print_todo(p[0], msg_safe)
|
||||
</smpl>
|
||||
|
||||
This SmPL excerpt generates Org entries on the standard output, as
|
||||
illustrated below:
|
||||
|
||||
* TODO [[view:/home/user/linux/crypto/ctr.c::face=ovl-face1::linb=188::colb=9::cole=16][ERR_CAST can be used with alg]]
|
||||
* TODO [[view:/home/user/linux/crypto/authenc.c::face=ovl-face1::linb=619::colb=9::cole=16][ERR_CAST can be used with auth]]
|
||||
* TODO [[view:/home/user/linux/crypto/xts.c::face=ovl-face1::linb=227::colb=9::cole=16][ERR_CAST can be used with alg]]
|
@ -2,7 +2,7 @@
|
||||
|
||||
Maintainers:
|
||||
CPU Hotplug Core:
|
||||
Rusty Russell <rusty@rustycorp.com.au>
|
||||
Rusty Russell <rusty@rustcorp.com.au>
|
||||
Srivatsa Vaddagiri <vatsa@in.ibm.com>
|
||||
i386:
|
||||
Zwane Mwaikambo <zwane@arm.linux.org.uk>
|
||||
|
@ -445,6 +445,7 @@ Your cooperation is appreciated.
|
||||
233 = /dev/kmview View-OS A process with a view
|
||||
234 = /dev/btrfs-control Btrfs control device
|
||||
235 = /dev/autofs Autofs control device
|
||||
236 = /dev/mapper/control Device-Mapper control device
|
||||
240-254 Reserved for local use
|
||||
255 Reserved for MISC_DYNAMIC_MINOR
|
||||
|
||||
|
@ -116,29 +116,6 @@ Who: Mauro Carvalho Chehab <mchehab@infradead.org>
|
||||
|
||||
---------------------------
|
||||
|
||||
What: PCMCIA control ioctl (needed for pcmcia-cs [cardmgr, cardctl])
|
||||
When: 2.6.35/2.6.36
|
||||
Files: drivers/pcmcia/: pcmcia_ioctl.c
|
||||
Why: With the 16-bit PCMCIA subsystem now behaving (almost) like a
|
||||
normal hotpluggable bus, and with it using the default kernel
|
||||
infrastructure (hotplug, driver core, sysfs) keeping the PCMCIA
|
||||
control ioctl needed by cardmgr and cardctl from pcmcia-cs is
|
||||
unnecessary and potentially harmful (it does not provide for
|
||||
proper locking), and makes further cleanups and integration of the
|
||||
PCMCIA subsystem into the Linux kernel device driver model more
|
||||
difficult. The features provided by cardmgr and cardctl are either
|
||||
handled by the kernel itself now or are available in the new
|
||||
pcmciautils package available at
|
||||
http://kernel.org/pub/linux/utils/kernel/pcmcia/
|
||||
|
||||
For all architectures except ARM, the associated config symbol
|
||||
has been removed from kernel 2.6.34; for ARM, it will be likely
|
||||
be removed from kernel 2.6.35. The actual code will then likely
|
||||
be removed from kernel 2.6.36.
|
||||
Who: Dominik Brodowski <linux@dominikbrodowski.net>
|
||||
|
||||
---------------------------
|
||||
|
||||
What: sys_sysctl
|
||||
When: September 2010
|
||||
Option: CONFIG_SYSCTL_SYSCALL
|
||||
@ -174,6 +151,31 @@ Who: Eric Biederman <ebiederm@xmission.com>
|
||||
|
||||
---------------------------
|
||||
|
||||
What: /proc/<pid>/oom_adj
|
||||
When: August 2012
|
||||
Why: /proc/<pid>/oom_adj allows userspace to influence the oom killer's
|
||||
badness heuristic used to determine which task to kill when the kernel
|
||||
is out of memory.
|
||||
|
||||
The badness heuristic has since been rewritten since the introduction of
|
||||
this tunable such that its meaning is deprecated. The value was
|
||||
implemented as a bitshift on a score generated by the badness()
|
||||
function that did not have any precise units of measure. With the
|
||||
rewrite, the score is given as a proportion of available memory to the
|
||||
task allocating pages, so using a bitshift which grows the score
|
||||
exponentially is, thus, impossible to tune with fine granularity.
|
||||
|
||||
A much more powerful interface, /proc/<pid>/oom_score_adj, was
|
||||
introduced with the oom killer rewrite that allows users to increase or
|
||||
decrease the badness() score linearly. This interface will replace
|
||||
/proc/<pid>/oom_adj.
|
||||
|
||||
A warning will be emitted to the kernel log if an application uses this
|
||||
deprecated interface. After it is printed once, future warnings will be
|
||||
suppressed until the kernel is rebooted.
|
||||
|
||||
---------------------------
|
||||
|
||||
What: remove EXPORT_SYMBOL(kernel_thread)
|
||||
When: August 2006
|
||||
Files: arch/*/kernel/*_ksyms.c
|
||||
@ -358,14 +360,6 @@ When: 2.6.33
|
||||
Why: Should be implemented in userspace, policy daemon.
|
||||
Who: Johannes Berg <johannes@sipsolutions.net>
|
||||
|
||||
---------------------------
|
||||
|
||||
What: CONFIG_INOTIFY
|
||||
When: 2.6.33
|
||||
Why: last user (audit) will be converted to the newer more generic
|
||||
and more easily maintained fsnotify subsystem
|
||||
Who: Eric Paris <eparis@redhat.com>
|
||||
|
||||
----------------------------
|
||||
|
||||
What: sound-slot/service-* module aliases and related clutters in
|
||||
@ -468,16 +462,6 @@ Who: Jan Kiszka <jan.kiszka@web.de>
|
||||
|
||||
----------------------------
|
||||
|
||||
What: xtime, wall_to_monotonic
|
||||
When: 2.6.36+
|
||||
Files: kernel/time/timekeeping.c include/linux/time.h
|
||||
Why: Cleaning up timekeeping internal values. Please use
|
||||
existing timekeeping accessor functions to access
|
||||
the equivalent functionality.
|
||||
Who: John Stultz <johnstul@us.ibm.com>
|
||||
|
||||
----------------------------
|
||||
|
||||
What: KVM paravirt mmu host support
|
||||
When: January 2011
|
||||
Why: The paravirt mmu host support is slower than non-paravirt mmu, both
|
||||
@ -563,3 +547,20 @@ Why: superseded by acpi_sleep=nonvs
|
||||
Who: Rafael J. Wysocki <rjw@sisk.pl>
|
||||
|
||||
----------------------------
|
||||
|
||||
What: PCI DMA unmap state API
|
||||
When: August 2012
|
||||
Why: PCI DMA unmap state API (include/linux/pci-dma.h) was replaced
|
||||
with DMA unmap state API (DMA unmap state API can be used for
|
||||
any bus).
|
||||
Who: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
||||
|
||||
----------------------------
|
||||
|
||||
What: DMA_xxBIT_MASK macros
|
||||
When: Jun 2011
|
||||
Why: DMA_xxBIT_MASK macros were replaced with DMA_BIT_MASK() macros.
|
||||
Who: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
||||
|
||||
----------------------------
|
||||
|
||||
|
@ -92,8 +92,8 @@ prototypes:
|
||||
void (*destroy_inode)(struct inode *);
|
||||
void (*dirty_inode) (struct inode *);
|
||||
int (*write_inode) (struct inode *, int);
|
||||
void (*drop_inode) (struct inode *);
|
||||
void (*delete_inode) (struct inode *);
|
||||
int (*drop_inode) (struct inode *);
|
||||
void (*evict_inode) (struct inode *);
|
||||
void (*put_super) (struct super_block *);
|
||||
void (*write_super) (struct super_block *);
|
||||
int (*sync_fs)(struct super_block *sb, int wait);
|
||||
@ -101,14 +101,13 @@ prototypes:
|
||||
int (*unfreeze_fs) (struct super_block *);
|
||||
int (*statfs) (struct dentry *, struct kstatfs *);
|
||||
int (*remount_fs) (struct super_block *, int *, char *);
|
||||
void (*clear_inode) (struct inode *);
|
||||
void (*umount_begin) (struct super_block *);
|
||||
int (*show_options)(struct seq_file *, struct vfsmount *);
|
||||
ssize_t (*quota_read)(struct super_block *, int, char *, size_t, loff_t);
|
||||
ssize_t (*quota_write)(struct super_block *, int, const char *, size_t, loff_t);
|
||||
|
||||
locking rules:
|
||||
All may block.
|
||||
All may block [not true, see below]
|
||||
None have BKL
|
||||
s_umount
|
||||
alloc_inode:
|
||||
@ -116,22 +115,25 @@ destroy_inode:
|
||||
dirty_inode: (must not sleep)
|
||||
write_inode:
|
||||
drop_inode: !!!inode_lock!!!
|
||||
delete_inode:
|
||||
evict_inode:
|
||||
put_super: write
|
||||
write_super: read
|
||||
sync_fs: read
|
||||
freeze_fs: read
|
||||
unfreeze_fs: read
|
||||
statfs: no
|
||||
remount_fs: maybe (see below)
|
||||
clear_inode:
|
||||
statfs: maybe(read) (see below)
|
||||
remount_fs: write
|
||||
umount_begin: no
|
||||
show_options: no (namespace_sem)
|
||||
quota_read: no (see below)
|
||||
quota_write: no (see below)
|
||||
|
||||
->remount_fs() will have the s_umount exclusive lock if it's already mounted.
|
||||
When called from get_sb_single, it does NOT have the s_umount lock.
|
||||
->statfs() has s_umount (shared) when called by ustat(2) (native or
|
||||
compat), but that's an accident of bad API; s_umount is used to pin
|
||||
the superblock down when we only have dev_t given us by userland to
|
||||
identify the superblock. Everything else (statfs(), fstatfs(), etc.)
|
||||
doesn't hold it when calling ->statfs() - superblock is pinned down
|
||||
by resolving the pathname passed to syscall.
|
||||
->quota_read() and ->quota_write() functions are both guaranteed to
|
||||
be the only ones operating on the quota file by the quota code (via
|
||||
dqio_sem) (unless an admin really wants to screw up something and
|
||||
@ -372,8 +374,6 @@ prototypes:
|
||||
ssize_t (*aio_write) (struct kiocb *, const struct iovec *, unsigned long, loff_t);
|
||||
int (*readdir) (struct file *, void *, filldir_t);
|
||||
unsigned int (*poll) (struct file *, struct poll_table_struct *);
|
||||
int (*ioctl) (struct inode *, struct file *, unsigned int,
|
||||
unsigned long);
|
||||
long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
|
||||
long (*compat_ioctl) (struct file *, unsigned int, unsigned long);
|
||||
int (*mmap) (struct file *, struct vm_area_struct *);
|
||||
@ -407,8 +407,7 @@ write: no
|
||||
aio_write: no
|
||||
readdir: no
|
||||
poll: no
|
||||
ioctl: yes (see below)
|
||||
unlocked_ioctl: no (see below)
|
||||
unlocked_ioctl: no
|
||||
compat_ioctl: no
|
||||
mmap: no
|
||||
open: no
|
||||
@ -451,9 +450,6 @@ move ->readdir() to inode_operations and use a separate method for directory
|
||||
anything that resembles union-mount we won't have a struct file for all
|
||||
components. And there are other reasons why the current interface is a mess...
|
||||
|
||||
->ioctl() on regular files is superceded by the ->unlocked_ioctl() that
|
||||
doesn't take the BKL.
|
||||
|
||||
->read on directories probably must go away - we should just enforce -EISDIR
|
||||
in sys_read() and friends.
|
||||
|
||||
|
@ -343,8 +343,8 @@ This will look something like:
|
||||
[root@andromeda ~]# head /proc/fs/fscache/objects
|
||||
OBJECT PARENT STAT CHLDN OPS OOP IPR EX READS EM EV F S | NETFS_COOKIE_DEF TY FL NETFS_DATA OBJECT_KEY, AUX_DATA
|
||||
======== ======== ==== ===== === === === == ===== == == = = | ================ == == ================ ================
|
||||
17e4b 2 ACTV 0 0 0 0 0 0 7b 4 0 8 | NFS.fh DT 0 ffff88001dd82820 010006017edcf8bbc93b43298fdfbe71e50b57b13a172c0117f38472, e567634700000000000000000000000063f2404a000000000000000000000000c9030000000000000000000063f2404a
|
||||
1693a 2 ACTV 0 0 0 0 0 0 7b 4 0 8 | NFS.fh DT 0 ffff88002db23380 010006017edcf8bbc93b43298fdfbe71e50b57b1e0162c01a2df0ea6, 420ebc4a000000000000000000000000420ebc4a0000000000000000000000000e1801000000000000000000420ebc4a
|
||||
17e4b 2 ACTV 0 0 0 0 0 0 7b 4 0 0 | NFS.fh DT 0 ffff88001dd82820 010006017edcf8bbc93b43298fdfbe71e50b57b13a172c0117f38472, e567634700000000000000000000000063f2404a000000000000000000000000c9030000000000000000000063f2404a
|
||||
1693a 2 ACTV 0 0 0 0 0 0 7b 4 0 0 | NFS.fh DT 0 ffff88002db23380 010006017edcf8bbc93b43298fdfbe71e50b57b1e0162c01a2df0ea6, 420ebc4a000000000000000000000000420ebc4a0000000000000000000000000e1801000000000000000000420ebc4a
|
||||
|
||||
where the first set of columns before the '|' describe the object:
|
||||
|
||||
@ -362,7 +362,7 @@ where the first set of columns before the '|' describe the object:
|
||||
EM Object's event mask
|
||||
EV Events raised on this object
|
||||
F Object flags
|
||||
S Object slow-work work item flags
|
||||
S Object work item busy state mask (1:pending 2:running)
|
||||
|
||||
and the second set of columns describe the object's cookie, if present:
|
||||
|
||||
@ -395,8 +395,8 @@ and the following paired letters:
|
||||
w Show objects that don't have pending writes
|
||||
R Show objects that have outstanding reads
|
||||
r Show objects that don't have outstanding reads
|
||||
S Show objects that have slow work queued
|
||||
s Show objects that don't have slow work queued
|
||||
S Show objects that have work queued
|
||||
s Show objects that don't have work queued
|
||||
|
||||
If neither side of a letter pair is given, then both are implied. For example:
|
||||
|
||||
|
@ -49,7 +49,10 @@ Mount options
|
||||
NILFS2 supports the following mount options:
|
||||
(*) == default
|
||||
|
||||
nobarrier Disables barriers.
|
||||
barrier(*) This enables/disables the use of write barriers. This
|
||||
nobarrier requires an IO stack which can support barriers, and
|
||||
if nilfs gets an error on a barrier write, it will
|
||||
disable again with a warning.
|
||||
errors=continue Keep going on a filesystem error.
|
||||
errors=remount-ro(*) Remount the filesystem read-only on an error.
|
||||
errors=panic Panic and halt the machine if an error occurs.
|
||||
@ -74,9 +77,10 @@ norecovery Disable recovery of the filesystem on mount.
|
||||
This disables every write access on the device for
|
||||
read-only mounts or snapshots. This option will fail
|
||||
for r/w mounts on an unclean volume.
|
||||
discard Issue discard/TRIM commands to the underlying block
|
||||
device when blocks are freed. This is useful for SSD
|
||||
devices and sparse/thinly-provisioned LUNs.
|
||||
discard This enables/disables the use of discard/TRIM commands.
|
||||
nodiscard(*) The discard/TRIM commands are sent to the underlying
|
||||
block device when blocks are freed. This is useful
|
||||
for SSD devices and sparse/thinly-provisioned LUNs.
|
||||
|
||||
NILFS2 usage
|
||||
============
|
||||
|
@ -273,3 +273,48 @@ it's safe to remove it. If you don't need it, remove it.
|
||||
deliberate; as soon as struct block_device * is propagated in a reasonable
|
||||
way by that code fixing will become trivial; until then nothing can be
|
||||
done.
|
||||
|
||||
[mandatory]
|
||||
|
||||
block truncatation on error exit from ->write_begin, and ->direct_IO
|
||||
moved from generic methods (block_write_begin, cont_write_begin,
|
||||
nobh_write_begin, blockdev_direct_IO*) to callers. Take a look at
|
||||
ext2_write_failed and callers for an example.
|
||||
|
||||
[mandatory]
|
||||
|
||||
->truncate is going away. The whole truncate sequence needs to be
|
||||
implemented in ->setattr, which is now mandatory for filesystems
|
||||
implementing on-disk size changes. Start with a copy of the old inode_setattr
|
||||
and vmtruncate, and the reorder the vmtruncate + foofs_vmtruncate sequence to
|
||||
be in order of zeroing blocks using block_truncate_page or similar helpers,
|
||||
size update and on finally on-disk truncation which should not fail.
|
||||
inode_change_ok now includes the size checks for ATTR_SIZE and must be called
|
||||
in the beginning of ->setattr unconditionally.
|
||||
|
||||
[mandatory]
|
||||
|
||||
->clear_inode() and ->delete_inode() are gone; ->evict_inode() should
|
||||
be used instead. It gets called whenever the inode is evicted, whether it has
|
||||
remaining links or not. Caller does *not* evict the pagecache or inode-associated
|
||||
metadata buffers; getting rid of those is responsibility of method, as it had
|
||||
been for ->delete_inode().
|
||||
->drop_inode() returns int now; it's called on final iput() with inode_lock
|
||||
held and it returns true if filesystems wants the inode to be dropped. As before,
|
||||
generic_drop_inode() is still the default and it's been updated appropriately.
|
||||
generic_delete_inode() is also alive and it consists simply of return 1. Note that
|
||||
all actual eviction work is done by caller after ->drop_inode() returns.
|
||||
clear_inode() is gone; use end_writeback() instead. As before, it must
|
||||
be called exactly once on each call of ->evict_inode() (as it used to be for
|
||||
each call of ->delete_inode()). Unlike before, if you are using inode-associated
|
||||
metadata buffers (i.e. mark_buffer_dirty_inode()), it's your responsibility to
|
||||
call invalidate_inode_buffers() before end_writeback().
|
||||
No async writeback (and thus no calls of ->write_inode()) will happen
|
||||
after end_writeback() returns, so actions that should not overlap with ->write_inode()
|
||||
(e.g. freeing on-disk inode if i_nlink is 0) ought to be done after that call.
|
||||
|
||||
NOTE: checking i_nlink in the beginning of ->write_inode() and bailing out
|
||||
if it's zero is not *and* *never* *had* *been* enough. Final unlink() and iput()
|
||||
may happen while the inode is in the middle of ->write_inode(); e.g. if you blindly
|
||||
free the on-disk inode, you may end up doing that while ->write_inode() is writing
|
||||
to it.
|
||||
|
@ -33,7 +33,8 @@ Table of Contents
|
||||
2 Modifying System Parameters
|
||||
|
||||
3 Per-Process Parameters
|
||||
3.1 /proc/<pid>/oom_adj - Adjust the oom-killer score
|
||||
3.1 /proc/<pid>/oom_adj & /proc/<pid>/oom_score_adj - Adjust the oom-killer
|
||||
score
|
||||
3.2 /proc/<pid>/oom_score - Display current oom-killer score
|
||||
3.3 /proc/<pid>/io - Display the IO accounting fields
|
||||
3.4 /proc/<pid>/coredump_filter - Core dump filtering settings
|
||||
@ -1234,42 +1235,64 @@ of the kernel.
|
||||
CHAPTER 3: PER-PROCESS PARAMETERS
|
||||
------------------------------------------------------------------------------
|
||||
|
||||
3.1 /proc/<pid>/oom_adj - Adjust the oom-killer score
|
||||
------------------------------------------------------
|
||||
3.1 /proc/<pid>/oom_adj & /proc/<pid>/oom_score_adj- Adjust the oom-killer score
|
||||
--------------------------------------------------------------------------------
|
||||
|
||||
This file can be used to adjust the score used to select which processes
|
||||
should be killed in an out-of-memory situation. Giving it a high score will
|
||||
increase the likelihood of this process being killed by the oom-killer. Valid
|
||||
values are in the range -16 to +15, plus the special value -17, which disables
|
||||
oom-killing altogether for this process.
|
||||
These file can be used to adjust the badness heuristic used to select which
|
||||
process gets killed in out of memory conditions.
|
||||
|
||||
The process to be killed in an out-of-memory situation is selected among all others
|
||||
based on its badness score. This value equals the original memory size of the process
|
||||
and is then updated according to its CPU time (utime + stime) and the
|
||||
run time (uptime - start time). The longer it runs the smaller is the score.
|
||||
Badness score is divided by the square root of the CPU time and then by
|
||||
the double square root of the run time.
|
||||
The badness heuristic assigns a value to each candidate task ranging from 0
|
||||
(never kill) to 1000 (always kill) to determine which process is targeted. The
|
||||
units are roughly a proportion along that range of allowed memory the process
|
||||
may allocate from based on an estimation of its current memory and swap use.
|
||||
For example, if a task is using all allowed memory, its badness score will be
|
||||
1000. If it is using half of its allowed memory, its score will be 500.
|
||||
|
||||
Swapped out tasks are killed first. Half of each child's memory size is added to
|
||||
the parent's score if they do not share the same memory. Thus forking servers
|
||||
are the prime candidates to be killed. Having only one 'hungry' child will make
|
||||
parent less preferable than the child.
|
||||
There is an additional factor included in the badness score: root
|
||||
processes are given 3% extra memory over other tasks.
|
||||
|
||||
/proc/<pid>/oom_score shows process' current badness score.
|
||||
The amount of "allowed" memory depends on the context in which the oom killer
|
||||
was called. If it is due to the memory assigned to the allocating task's cpuset
|
||||
being exhausted, the allowed memory represents the set of mems assigned to that
|
||||
cpuset. If it is due to a mempolicy's node(s) being exhausted, the allowed
|
||||
memory represents the set of mempolicy nodes. If it is due to a memory
|
||||
limit (or swap limit) being reached, the allowed memory is that configured
|
||||
limit. Finally, if it is due to the entire system being out of memory, the
|
||||
allowed memory represents all allocatable resources.
|
||||
|
||||
The following heuristics are then applied:
|
||||
* if the task was reniced, its score doubles
|
||||
* superuser or direct hardware access tasks (CAP_SYS_ADMIN, CAP_SYS_RESOURCE
|
||||
or CAP_SYS_RAWIO) have their score divided by 4
|
||||
* if oom condition happened in one cpuset and checked process does not belong
|
||||
to it, its score is divided by 8
|
||||
* the resulting score is multiplied by two to the power of oom_adj, i.e.
|
||||
points <<= oom_adj when it is positive and
|
||||
points >>= -(oom_adj) otherwise
|
||||
The value of /proc/<pid>/oom_score_adj is added to the badness score before it
|
||||
is used to determine which task to kill. Acceptable values range from -1000
|
||||
(OOM_SCORE_ADJ_MIN) to +1000 (OOM_SCORE_ADJ_MAX). This allows userspace to
|
||||
polarize the preference for oom killing either by always preferring a certain
|
||||
task or completely disabling it. The lowest possible value, -1000, is
|
||||
equivalent to disabling oom killing entirely for that task since it will always
|
||||
report a badness score of 0.
|
||||
|
||||
Consequently, it is very simple for userspace to define the amount of memory to
|
||||
consider for each task. Setting a /proc/<pid>/oom_score_adj value of +500, for
|
||||
example, is roughly equivalent to allowing the remainder of tasks sharing the
|
||||
same system, cpuset, mempolicy, or memory controller resources to use at least
|
||||
50% more memory. A value of -500, on the other hand, would be roughly
|
||||
equivalent to discounting 50% of the task's allowed memory from being considered
|
||||
as scoring against the task.
|
||||
|
||||
For backwards compatibility with previous kernels, /proc/<pid>/oom_adj may also
|
||||
be used to tune the badness score. Its acceptable values range from -16
|
||||
(OOM_ADJUST_MIN) to +15 (OOM_ADJUST_MAX) and a special value of -17
|
||||
(OOM_DISABLE) to disable oom killing entirely for that task. Its value is
|
||||
scaled linearly with /proc/<pid>/oom_score_adj.
|
||||
|
||||
Writing to /proc/<pid>/oom_score_adj or /proc/<pid>/oom_adj will change the
|
||||
other with its scaled value.
|
||||
|
||||
NOTICE: /proc/<pid>/oom_adj is deprecated and will be removed, please see
|
||||
Documentation/feature-removal-schedule.txt.
|
||||
|
||||
Caveat: when a parent task is selected, the oom killer will sacrifice any first
|
||||
generation children with seperate address spaces instead, if possible. This
|
||||
avoids servers and important system daemons from being killed and loses the
|
||||
minimal amount of work.
|
||||
|
||||
The task with the highest badness score is then selected and its children
|
||||
are killed, process itself will be killed in an OOM situation when it does
|
||||
not have children or some of them disabled oom like described above.
|
||||
|
||||
3.2 /proc/<pid>/oom_score - Display current oom-killer score
|
||||
-------------------------------------------------------------
|
||||
|
@ -2,7 +2,7 @@ SQUASHFS 4.0 FILESYSTEM
|
||||
=======================
|
||||
|
||||
Squashfs is a compressed read-only filesystem for Linux.
|
||||
It uses zlib compression to compress files, inodes and directories.
|
||||
It uses zlib/lzo compression to compress files, inodes and directories.
|
||||
Inodes in the system are very small and all blocks are packed to minimise
|
||||
data overhead. Block sizes greater than 4K are supported up to a maximum
|
||||
of 1Mbytes (default block size 128K).
|
||||
|
@ -39,7 +39,7 @@ files, each with their own function.
|
||||
local_cpus nearby CPU mask (cpumask, ro)
|
||||
remove remove device from kernel's list (ascii, wo)
|
||||
resource PCI resource host addresses (ascii, ro)
|
||||
resource0..N PCI resource N, if present (binary, mmap)
|
||||
resource0..N PCI resource N, if present (binary, mmap, rw[1])
|
||||
resource0_wc..N_wc PCI WC map resource N, if prefetchable (binary, mmap)
|
||||
rom PCI ROM resource, if present (binary, ro)
|
||||
subsystem_device PCI subsystem device (ascii, ro)
|
||||
@ -54,13 +54,16 @@ files, each with their own function.
|
||||
binary - file contains binary data
|
||||
cpumask - file contains a cpumask type
|
||||
|
||||
[1] rw for RESOURCE_IO (I/O port) regions only
|
||||
|
||||
The read only files are informational, writes to them will be ignored, with
|
||||
the exception of the 'rom' file. Writable files can be used to perform
|
||||
actions on the device (e.g. changing config space, detaching a device).
|
||||
mmapable files are available via an mmap of the file at offset 0 and can be
|
||||
used to do actual device programming from userspace. Note that some platforms
|
||||
don't support mmapping of certain resources, so be sure to check the return
|
||||
value from any attempted mmap.
|
||||
value from any attempted mmap. The most notable of these are I/O port
|
||||
resources, which also provide read/write access.
|
||||
|
||||
The 'enable' file provides a counter that indicates how many times the device
|
||||
has been enabled. If the 'enable' file currently returns '4', and a '1' is
|
||||
|
@ -4,7 +4,7 @@ sysfs - _The_ filesystem for exporting kernel objects.
|
||||
Patrick Mochel <mochel@osdl.org>
|
||||
Mike Murphy <mamurph@cs.clemson.edu>
|
||||
|
||||
Revised: 22 February 2009
|
||||
Revised: 15 July 2010
|
||||
Original: 10 January 2003
|
||||
|
||||
|
||||
@ -124,7 +124,7 @@ show and store methods of the attribute owners.
|
||||
|
||||
struct sysfs_ops {
|
||||
ssize_t (*show)(struct kobject *, struct attribute *, char *);
|
||||
ssize_t (*store)(struct kobject *, struct attribute *, const char *);
|
||||
ssize_t (*store)(struct kobject *, struct attribute *, const char *, size_t);
|
||||
};
|
||||
|
||||
[ Subsystems should have already defined a struct kobj_type as a
|
||||
@ -139,18 +139,22 @@ calls the associated methods.
|
||||
|
||||
To illustrate:
|
||||
|
||||
#define to_dev(obj) container_of(obj, struct device, kobj)
|
||||
#define to_dev_attr(_attr) container_of(_attr, struct device_attribute, attr)
|
||||
#define to_dev(d) container_of(d, struct device, kobj)
|
||||
|
||||
static ssize_t
|
||||
dev_attr_show(struct kobject * kobj, struct attribute * attr, char * buf)
|
||||
static ssize_t dev_attr_show(struct kobject *kobj, struct attribute *attr,
|
||||
char *buf)
|
||||
{
|
||||
struct device_attribute * dev_attr = to_dev_attr(attr);
|
||||
struct device * dev = to_dev(kobj);
|
||||
ssize_t ret = 0;
|
||||
struct device_attribute *dev_attr = to_dev_attr(attr);
|
||||
struct device *dev = to_dev(kobj);
|
||||
ssize_t ret = -EIO;
|
||||
|
||||
if (dev_attr->show)
|
||||
ret = dev_attr->show(dev, buf);
|
||||
ret = dev_attr->show(dev, dev_attr, buf);
|
||||
if (ret >= (ssize_t)PAGE_SIZE) {
|
||||
print_symbol("dev_attr_show: %s returned bad count\n",
|
||||
(unsigned long)dev_attr->show);
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -163,10 +167,9 @@ To read or write attributes, show() or store() methods must be
|
||||
specified when declaring the attribute. The method types should be as
|
||||
simple as those defined for device attributes:
|
||||
|
||||
ssize_t (*show)(struct device * dev, struct device_attribute * attr,
|
||||
char * buf);
|
||||
ssize_t (*store)(struct device * dev, struct device_attribute * attr,
|
||||
const char * buf);
|
||||
ssize_t (*show)(struct device *dev, struct device_attribute *attr, char *buf);
|
||||
ssize_t (*store)(struct device *dev, struct device_attribute *attr,
|
||||
const char *buf, size_t count);
|
||||
|
||||
IOW, they should take only an object, an attribute, and a buffer as parameters.
|
||||
|
||||
@ -209,8 +212,8 @@ Other notes:
|
||||
|
||||
- show() should always use snprintf().
|
||||
|
||||
- store() should return the number of bytes used from the buffer. This
|
||||
can be done using strlen().
|
||||
- store() should return the number of bytes used from the buffer. If the
|
||||
entire buffer has been used, just return the count argument.
|
||||
|
||||
- show() or store() can always return errors. If a bad value comes
|
||||
through, be sure to return an error.
|
||||
@ -223,15 +226,18 @@ Other notes:
|
||||
|
||||
A very simple (and naive) implementation of a device attribute is:
|
||||
|
||||
static ssize_t show_name(struct device *dev, struct device_attribute *attr, char *buf)
|
||||
static ssize_t show_name(struct device *dev, struct device_attribute *attr,
|
||||
char *buf)
|
||||
{
|
||||
return snprintf(buf, PAGE_SIZE, "%s\n", dev->name);
|
||||
}
|
||||
|
||||
static ssize_t store_name(struct device * dev, const char * buf)
|
||||
static ssize_t store_name(struct device *dev, struct device_attribute *attr,
|
||||
const char *buf, size_t count)
|
||||
{
|
||||
sscanf(buf, "%20s", dev->name);
|
||||
return strnlen(buf, PAGE_SIZE);
|
||||
snprintf(dev->name, sizeof(dev->name), "%.*s",
|
||||
(int)min(count, sizeof(dev->name) - 1), buf);
|
||||
return count;
|
||||
}
|
||||
|
||||
static DEVICE_ATTR(name, S_IRUGO, show_name, store_name);
|
||||
@ -327,7 +333,7 @@ Structure:
|
||||
struct bus_attribute {
|
||||
struct attribute attr;
|
||||
ssize_t (*show)(struct bus_type *, char * buf);
|
||||
ssize_t (*store)(struct bus_type *, const char * buf);
|
||||
ssize_t (*store)(struct bus_type *, const char * buf, size_t count);
|
||||
};
|
||||
|
||||
Declaring:
|
||||
|
@ -727,7 +727,6 @@ struct file_operations {
|
||||
ssize_t (*aio_write) (struct kiocb *, const struct iovec *, unsigned long, loff_t);
|
||||
int (*readdir) (struct file *, void *, filldir_t);
|
||||
unsigned int (*poll) (struct file *, struct poll_table_struct *);
|
||||
int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);
|
||||
long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);
|
||||
long (*compat_ioctl) (struct file *, unsigned int, unsigned long);
|
||||
int (*mmap) (struct file *, struct vm_area_struct *);
|
||||
@ -768,10 +767,7 @@ otherwise noted.
|
||||
activity on this file and (optionally) go to sleep until there
|
||||
is activity. Called by the select(2) and poll(2) system calls
|
||||
|
||||
ioctl: called by the ioctl(2) system call
|
||||
|
||||
unlocked_ioctl: called by the ioctl(2) system call. Filesystems that do not
|
||||
require the BKL should use this method instead of the ioctl() above.
|
||||
unlocked_ioctl: called by the ioctl(2) system call.
|
||||
|
||||
compat_ioctl: called by the ioctl(2) system call when 32 bit system calls
|
||||
are used on 64 bit kernels.
|
||||
|
@ -6,11 +6,12 @@
|
||||
|
||||
HOTPLUG_FW_DIR=/usr/lib/hotplug/firmware/
|
||||
|
||||
echo 1 > /sys/$DEVPATH/loading
|
||||
cat $HOTPLUG_FW_DIR/$FIRMWARE > /sys/$DEVPATH/data
|
||||
echo 0 > /sys/$DEVPATH/loading
|
||||
|
||||
# To cancel the load in case of error:
|
||||
#
|
||||
# echo -1 > /sys/$DEVPATH/loading
|
||||
#
|
||||
if [ "$SUBSYSTEM" == "firmware" -a "$ACTION" == "add" ]; then
|
||||
if [ -f $HOTPLUG_FW_DIR/$FIRMWARE ]; then
|
||||
echo 1 > /sys/$DEVPATH/loading
|
||||
cat $HOTPLUG_FW_DIR/$FIRMWARE > /sys/$DEVPATH/data
|
||||
echo 0 > /sys/$DEVPATH/loading
|
||||
else
|
||||
echo -1 > /sys/$DEVPATH/loading
|
||||
fi
|
||||
fi
|
||||
|
@ -158,10 +158,11 @@ and configure pullups/pulldowns appropriately.)
|
||||
Spinlock-Safe GPIO access
|
||||
-------------------------
|
||||
Most GPIO controllers can be accessed with memory read/write instructions.
|
||||
That doesn't need to sleep, and can safely be done from inside IRQ handlers.
|
||||
(That includes hardirq contexts on RT kernels.)
|
||||
Those don't need to sleep, and can safely be done from inside hard
|
||||
(nonthreaded) IRQ handlers and similar contexts.
|
||||
|
||||
Use these calls to access such GPIOs:
|
||||
Use the following calls to access such GPIOs,
|
||||
for which gpio_cansleep() will always return false (see below):
|
||||
|
||||
/* GPIO INPUT: return zero or nonzero */
|
||||
int gpio_get_value(unsigned gpio);
|
||||
@ -210,9 +211,31 @@ To access such GPIOs, a different set of accessors is defined:
|
||||
/* GPIO OUTPUT, might sleep */
|
||||
void gpio_set_value_cansleep(unsigned gpio, int value);
|
||||
|
||||
Other than the fact that these calls might sleep, and will not be ignored
|
||||
for GPIOs that can't be accessed from IRQ handlers, these calls act the
|
||||
same as the spinlock-safe calls.
|
||||
|
||||
Accessing such GPIOs requires a context which may sleep, for example
|
||||
a threaded IRQ handler, and those accessors must be used instead of
|
||||
spinlock-safe accessors without the cansleep() name suffix.
|
||||
|
||||
Other than the fact that these accessors might sleep, and will work
|
||||
on GPIOs that can't be accessed from hardIRQ handlers, these calls act
|
||||
the same as the spinlock-safe calls.
|
||||
|
||||
** IN ADDITION ** calls to setup and configure such GPIOs must be made
|
||||
from contexts which may sleep, since they may need to access the GPIO
|
||||
controller chip too: (These setup calls are usually made from board
|
||||
setup or driver probe/teardown code, so this is an easy constraint.)
|
||||
|
||||
gpio_direction_input()
|
||||
gpio_direction_output()
|
||||
gpio_request()
|
||||
|
||||
## gpio_request_one()
|
||||
## gpio_request_array()
|
||||
## gpio_free_array()
|
||||
|
||||
gpio_free()
|
||||
gpio_set_debounce()
|
||||
|
||||
|
||||
|
||||
Claiming and Releasing GPIOs
|
||||
|
@ -21,8 +21,8 @@ Temperature is measured in degrees Celsius and measurement resolution is
|
||||
1 degree C. Valid temperatures are from 0 to TjMax degrees C, because
|
||||
the actual value of temperature register is in fact a delta from TjMax.
|
||||
|
||||
Temperature known as TjMax is the maximum junction temperature of processor.
|
||||
Intel defines this temperature as 85C or 100C. At this temperature, protection
|
||||
Temperature known as TjMax is the maximum junction temperature of processor,
|
||||
which depends on the CPU model. See table below. At this temperature, protection
|
||||
mechanism will perform actions to forcibly cool down the processor. Alarm
|
||||
may be raised, if the temperature grows enough (more than TjMax) to trigger
|
||||
the Out-Of-Spec bit. Following table summarizes the exported sysfs files:
|
||||
@ -38,3 +38,104 @@ temp1_label - Contains string "Core X", where X is processor
|
||||
The TjMax temperature is set to 85 degrees C if undocumented model specific
|
||||
register (UMSR) 0xee has bit 30 set. If not the TjMax is 100 degrees C as
|
||||
(sometimes) documented in processor datasheet.
|
||||
|
||||
Appendix A. Known TjMax lists (TBD):
|
||||
Some information comes from ark.intel.com
|
||||
|
||||
Process Processor TjMax(C)
|
||||
|
||||
32nm Core i3/i5/i7 Processors
|
||||
i7 660UM/640/620, 640LM/620, 620M, 610E 105
|
||||
i5 540UM/520/430, 540M/520/450/430 105
|
||||
i3 330E, 370M/350/330 90 rPGA, 105 BGA
|
||||
i3 330UM 105
|
||||
|
||||
32nm Core i7 Extreme Processors
|
||||
980X 100
|
||||
|
||||
32nm Celeron Processors
|
||||
U3400 105
|
||||
P4505/P4500 90
|
||||
|
||||
45nm Xeon Processors 5400 Quad-Core
|
||||
X5492, X5482, X5472, X5470, X5460, X5450 85
|
||||
E5472, E5462, E5450/40/30/20/10/05 85
|
||||
L5408 95
|
||||
L5430, L5420, L5410 70
|
||||
|
||||
45nm Xeon Processors 5200 Dual-Core
|
||||
X5282, X5272, X5270, X5260 90
|
||||
E5240 90
|
||||
E5205, E5220 70, 90
|
||||
L5240 70
|
||||
L5238, L5215 95
|
||||
|
||||
45nm Atom Processors
|
||||
D525/510/425/410 100
|
||||
Z560/550/540/530P/530/520PT/520/515/510PT/510P 90
|
||||
Z510/500 90
|
||||
N475/470/455/450 100
|
||||
N280/270 90
|
||||
330/230 125
|
||||
|
||||
45nm Core2 Processors
|
||||
Solo ULV SU3500/3300 100
|
||||
T9900/9800/9600/9550/9500/9400/9300/8300/8100 105
|
||||
T6670/6500/6400 105
|
||||
T6600 90
|
||||
SU9600/9400/9300 105
|
||||
SP9600/9400 105
|
||||
SL9600/9400/9380/9300 105
|
||||
P9700/9600/9500/8800/8700/8600/8400/7570 105
|
||||
P7550/7450 90
|
||||
|
||||
45nm Core2 Quad Processors
|
||||
Q9100/9000 100
|
||||
|
||||
45nm Core2 Extreme Processors
|
||||
X9100/9000 105
|
||||
QX9300 100
|
||||
|
||||
45nm Core i3/i5/i7 Processors
|
||||
i7 940XM/920 100
|
||||
i7 840QM/820/740/720 100
|
||||
|
||||
45nm Celeron Processors
|
||||
SU2300 100
|
||||
900 105
|
||||
|
||||
65nm Core2 Duo Processors
|
||||
Solo U2200, U2100 100
|
||||
U7700/7600/7500 100
|
||||
T7800/7700/7600/7500/7400/7300/7250/7200/7100 100
|
||||
T5870/5670/5600/5550/5500/5470/5450/5300/5270 100
|
||||
T5250 100
|
||||
T5800/5750/5200 85
|
||||
L7700/7500/7400/7300/7200 100
|
||||
|
||||
65nm Core2 Extreme Processors
|
||||
X7900/7800 100
|
||||
|
||||
65nm Core Duo Processors
|
||||
U2500/2400 100
|
||||
T2700/2600/2450/2400/2350/2300E/2300/2250/2050 100
|
||||
L2500/2400/2300 100
|
||||
|
||||
65nm Core Solo Processors
|
||||
U1500/1400/1300 100
|
||||
T1400/1350/1300/1250 100
|
||||
|
||||
65nm Xeon Processors 5000 Quad-Core
|
||||
X5000 90-95
|
||||
E5000 80
|
||||
L5000 70
|
||||
L5318 95
|
||||
|
||||
65nm Xeon Processors 5000 Dual-Core
|
||||
5080, 5063, 5060, 5050, 5030 80-90
|
||||
5160, 5150, 5148, 5140, 5130, 5120, 5110 80
|
||||
L5138 100
|
||||
|
||||
65nm Celeron Processors
|
||||
T1700/1600 100
|
||||
560/550/540/530 100
|
||||
|
33
Documentation/hwmon/emc2103
Normal file
33
Documentation/hwmon/emc2103
Normal file
@ -0,0 +1,33 @@
|
||||
Kernel driver emc2103
|
||||
======================
|
||||
|
||||
Supported chips:
|
||||
* SMSC EMC2103
|
||||
Addresses scanned: I2C 0x2e
|
||||
Prefix: 'emc2103'
|
||||
Datasheet: Not public
|
||||
|
||||
Authors:
|
||||
Steve Glendinning <steve.glendinning@smsc.com>
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
The Standard Microsystems Corporation (SMSC) EMC2103 chips
|
||||
contain up to 4 temperature sensors and a single fan controller.
|
||||
|
||||
Fan rotation speeds are reported in RPM (rotations per minute). An alarm is
|
||||
triggered if the rotation speed has dropped below a programmable limit. Fan
|
||||
readings can be divided by a programmable divider (1, 2, 4 or 8) to give
|
||||
the readings more range or accuracy. Not all RPM values can accurately be
|
||||
represented, so some rounding is done. With a divider of 1, the lowest
|
||||
representable value is 480 RPM.
|
||||
|
||||
This driver supports RPM based control, to use this a fan target
|
||||
should be written to fan1_target and pwm1_enable should be set to 3.
|
||||
|
||||
The 2103-2 and 2103-4 variants have a third temperature sensor, which can
|
||||
be connected to two anti-parallel diodes. These values can be read
|
||||
as temp3 and temp4. If only one diode is attached to this channel, temp4
|
||||
will show as "fault". The module parameter "apd=0" can be used to suppress
|
||||
this 4th channel when anti-parallel diodes are not fitted.
|
97
Documentation/hwmon/jc42
Normal file
97
Documentation/hwmon/jc42
Normal file
@ -0,0 +1,97 @@
|
||||
Kernel driver jc42
|
||||
==================
|
||||
|
||||
Supported chips:
|
||||
* Analog Devices ADT7408
|
||||
Prefix: 'adt7408'
|
||||
Addresses scanned: I2C 0x18 - 0x1f
|
||||
Datasheets:
|
||||
http://www.analog.com/static/imported-files/data_sheets/ADT7408.pdf
|
||||
* IDT TSE2002B3, TS3000B3
|
||||
Prefix: 'tse2002b3', 'ts3000b3'
|
||||
Addresses scanned: I2C 0x18 - 0x1f
|
||||
Datasheets:
|
||||
http://www.idt.com/products/getdoc.cfm?docid=18715691
|
||||
http://www.idt.com/products/getdoc.cfm?docid=18715692
|
||||
* Maxim MAX6604
|
||||
Prefix: 'max6604'
|
||||
Addresses scanned: I2C 0x18 - 0x1f
|
||||
Datasheets:
|
||||
http://datasheets.maxim-ic.com/en/ds/MAX6604.pdf
|
||||
* Microchip MCP9805, MCP98242, MCP98243, MCP9843
|
||||
Prefixes: 'mcp9805', 'mcp98242', 'mcp98243', 'mcp9843'
|
||||
Addresses scanned: I2C 0x18 - 0x1f
|
||||
Datasheets:
|
||||
http://ww1.microchip.com/downloads/en/DeviceDoc/21977b.pdf
|
||||
http://ww1.microchip.com/downloads/en/DeviceDoc/21996a.pdf
|
||||
http://ww1.microchip.com/downloads/en/DeviceDoc/22153c.pdf
|
||||
* NXP Semiconductors SE97, SE97B
|
||||
Prefix: 'se97'
|
||||
Addresses scanned: I2C 0x18 - 0x1f
|
||||
Datasheets:
|
||||
http://www.nxp.com/documents/data_sheet/SE97.pdf
|
||||
http://www.nxp.com/documents/data_sheet/SE97B.pdf
|
||||
* NXP Semiconductors SE98
|
||||
Prefix: 'se98'
|
||||
Addresses scanned: I2C 0x18 - 0x1f
|
||||
Datasheets:
|
||||
http://www.nxp.com/documents/data_sheet/SE98.pdf
|
||||
* ON Semiconductor CAT34TS02, CAT6095
|
||||
Prefix: 'cat34ts02', 'cat6095'
|
||||
Addresses scanned: I2C 0x18 - 0x1f
|
||||
Datasheet:
|
||||
http://www.onsemi.com/pub_link/Collateral/CAT34TS02-D.PDF
|
||||
http://www.onsemi.com/pub/Collateral/CAT6095-D.PDF
|
||||
* ST Microelectronics STTS424, STTS424E02
|
||||
Prefix: 'stts424'
|
||||
Addresses scanned: I2C 0x18 - 0x1f
|
||||
Datasheets:
|
||||
http://www.st.com/stonline/products/literature/ds/13447/stts424.pdf
|
||||
http://www.st.com/stonline/products/literature/ds/13448/stts424e02.pdf
|
||||
* JEDEC JC 42.4 compliant temperature sensor chips
|
||||
Prefix: 'jc42'
|
||||
Addresses scanned: I2C 0x18 - 0x1f
|
||||
Datasheet: -
|
||||
|
||||
Author:
|
||||
Guenter Roeck <guenter.roeck@ericsson.com>
|
||||
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
This driver implements support for JEDEC JC 42.4 compliant temperature sensors.
|
||||
The driver auto-detects the chips listed above, but can be manually instantiated
|
||||
to support other JC 42.4 compliant chips.
|
||||
|
||||
Example: the following will load the driver for a generic JC 42.4 compliant
|
||||
temperature sensor at address 0x18 on I2C bus #1:
|
||||
|
||||
# modprobe jc42
|
||||
# echo jc42 0x18 > /sys/bus/i2c/devices/i2c-1/new_device
|
||||
|
||||
A JC 42.4 compliant chip supports a single temperature sensor. Minimum, maximum,
|
||||
and critical temperature can be configured. There are alarms for high, low,
|
||||
and critical thresholds.
|
||||
|
||||
There is also an hysteresis to control the thresholds for resetting alarms.
|
||||
Per JC 42.4 specification, the hysteresis threshold can be configured to 0, 1.5,
|
||||
3.0, and 6.0 degrees C. Configured hysteresis values will be rounded to those
|
||||
limits. The chip supports only a single register to configure the hysteresis,
|
||||
which applies to all limits. This register can be written by writing into
|
||||
temp1_crit_hyst. Other hysteresis attributes are read-only.
|
||||
|
||||
Sysfs entries
|
||||
-------------
|
||||
|
||||
temp1_input Temperature (RO)
|
||||
temp1_min Minimum temperature (RW)
|
||||
temp1_max Maximum temperature (RW)
|
||||
temp1_crit Critical high temperature (RW)
|
||||
|
||||
temp1_crit_hyst Critical hysteresis temperature (RW)
|
||||
temp1_max_hyst Maximum hysteresis temperature (RO)
|
||||
|
||||
temp1_min_alarm Temperature low alarm
|
||||
temp1_max_alarm Temperature high alarm
|
||||
temp1_crit_alarm Temperature critical alarm
|
@ -72,9 +72,31 @@ in6_min_alarm 5v output undervoltage alarm
|
||||
in7_min_alarm 3v output undervoltage alarm
|
||||
in8_min_alarm Vee (-12v) output undervoltage alarm
|
||||
|
||||
in9_input GPIO voltage data
|
||||
in9_input GPIO voltage data (see note 1)
|
||||
in10_input GPIO voltage data (see note 1)
|
||||
in11_input GPIO voltage data (see note 1)
|
||||
|
||||
power1_input 12v power usage (mW)
|
||||
power2_input 5v power usage (mW)
|
||||
power3_input 3v power usage (mW)
|
||||
power4_input Vee (-12v) power usage (mW)
|
||||
|
||||
|
||||
Note 1
|
||||
------
|
||||
|
||||
If you have NOT configured the driver to sample all GPIO pins as analog
|
||||
voltages, then the in10_input and in11_input sysfs attributes will not be
|
||||
created. The driver will sample the GPIO pin that is currently connected to the
|
||||
ADC as an analog voltage, and report the value in in9_input.
|
||||
|
||||
If you have configured the driver to sample all GPIO pins as analog voltages,
|
||||
then they will be sampled in round-robin fashion. If userspace reads too
|
||||
slowly, -EAGAIN will be returned when you read the sysfs attribute containing
|
||||
the sensor reading.
|
||||
|
||||
The LTC4245 chip can be configured to sample all GPIO pins with two methods:
|
||||
1) platform data -- see include/linux/i2c/ltc4245.h
|
||||
2) OF device tree -- add the "ltc4245,use-extra-gpios" property to each chip
|
||||
|
||||
The default mode of operation is to sample a single GPIO pin.
|
||||
|
@ -18,10 +18,11 @@ Description
|
||||
|
||||
The National Semiconductor Super I/O chip includes complete hardware
|
||||
monitoring capabilities. It can monitor up to 18 voltages, 8 fans and
|
||||
6 temperature sensors. Only the fans are supported at the moment.
|
||||
6 temperature sensors. Only the fans and temperatures are supported at
|
||||
the moment, voltages aren't.
|
||||
|
||||
This chip also has fan controlling features, which are not yet supported
|
||||
by this driver either.
|
||||
This chip also has fan controlling features (up to 4 PWM outputs),
|
||||
which are partly supported by this driver.
|
||||
|
||||
The driver assumes that no more than one chip is present, which seems
|
||||
reasonable.
|
||||
@ -36,3 +37,23 @@ signal. Speeds down to 83 RPM can be measured.
|
||||
An alarm is triggered if the rotation speed drops below a programmable
|
||||
limit. Another alarm is triggered if the speed is too low to be measured
|
||||
(including stalled or missing fan).
|
||||
|
||||
|
||||
Fan Speed Control
|
||||
-----------------
|
||||
|
||||
Fan speed can be controlled by PWM outputs. There are 4 possible modes:
|
||||
always off, always on, manual and automatic. The latter isn't supported
|
||||
by the driver: you can only return to that mode if it was the original
|
||||
setting, and the configuration interface is missing.
|
||||
|
||||
|
||||
Temperature Monitoring
|
||||
----------------------
|
||||
|
||||
The PC87427 relies on external sensors (following the SensorPath
|
||||
standard), so the resolution and range depend on the type of sensor
|
||||
connected. The integer part can be 8-bit or 9-bit, and can be signed or
|
||||
not. I couldn't find a way to figure out the external sensor data
|
||||
temperature format, so user-space adjustment (typically by a factor 2)
|
||||
may be required.
|
||||
|
36
Documentation/hwmon/pkgtemp
Normal file
36
Documentation/hwmon/pkgtemp
Normal file
@ -0,0 +1,36 @@
|
||||
Kernel driver pkgtemp
|
||||
======================
|
||||
|
||||
Supported chips:
|
||||
* Intel family
|
||||
Prefix: 'pkgtemp'
|
||||
CPUID:
|
||||
Datasheet: Intel 64 and IA-32 Architectures Software Developer's Manual
|
||||
Volume 3A: System Programming Guide
|
||||
|
||||
Author: Fenghua Yu
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
This driver permits reading package level temperature sensor embedded inside
|
||||
Intel CPU package. The sensors can be in core, uncore, memory controller, or
|
||||
other components in a package. The feature is first implemented in Intel Sandy
|
||||
Bridge platform.
|
||||
|
||||
Temperature is measured in degrees Celsius and measurement resolution is
|
||||
1 degree C. Valid temperatures are from 0 to TjMax degrees C, because the actual
|
||||
value of temperature register is in fact a delta from TjMax.
|
||||
|
||||
Temperature known as TjMax is the maximum junction temperature of package.
|
||||
We get this from MSR_IA32_TEMPERATURE_TARGET. If the MSR is not accessible,
|
||||
we define TjMax as 100 degrees Celsius. At this temperature, protection
|
||||
mechanism will perform actions to forcibly cool down the package. Alarm
|
||||
may be raised, if the temperature grows enough (more than TjMax) to trigger
|
||||
the Out-Of-Spec bit. Following table summarizes the exported sysfs files:
|
||||
|
||||
temp1_input - Package temperature (in millidegrees Celsius).
|
||||
temp1_max - All cooling devices should be turned on.
|
||||
temp1_crit - Maximum junction temperature (in millidegrees Celsius).
|
||||
temp1_crit_alarm - Set when Out-of-spec bit is set, never clears.
|
||||
Correct CPU operation is no longer guaranteed.
|
157
Documentation/hwmon/smm665
Normal file
157
Documentation/hwmon/smm665
Normal file
@ -0,0 +1,157 @@
|
||||
Kernel driver smm665
|
||||
====================
|
||||
|
||||
Supported chips:
|
||||
* Summit Microelectronics SMM465
|
||||
Prefix: 'smm465'
|
||||
Addresses scanned: -
|
||||
Datasheet:
|
||||
http://www.summitmicro.com/prod_select/summary/SMM465/SMM465DS.pdf
|
||||
* Summit Microelectronics SMM665, SMM665B
|
||||
Prefix: 'smm665'
|
||||
Addresses scanned: -
|
||||
Datasheet:
|
||||
http://www.summitmicro.com/prod_select/summary/SMM665/SMM665B_2089_20.pdf
|
||||
* Summit Microelectronics SMM665C
|
||||
Prefix: 'smm665c'
|
||||
Addresses scanned: -
|
||||
Datasheet:
|
||||
http://www.summitmicro.com/prod_select/summary/SMM665C/SMM665C_2125.pdf
|
||||
* Summit Microelectronics SMM764
|
||||
Prefix: 'smm764'
|
||||
Addresses scanned: -
|
||||
Datasheet:
|
||||
http://www.summitmicro.com/prod_select/summary/SMM764/SMM764_2098.pdf
|
||||
* Summit Microelectronics SMM766, SMM766B
|
||||
Prefix: 'smm766'
|
||||
Addresses scanned: -
|
||||
Datasheets:
|
||||
http://www.summitmicro.com/prod_select/summary/SMM766/SMM766_2086.pdf
|
||||
http://www.summitmicro.com/prod_select/summary/SMM766B/SMM766B_2122.pdf
|
||||
|
||||
Author: Guenter Roeck <guenter.roeck@ericsson.com>
|
||||
|
||||
|
||||
Module Parameters
|
||||
-----------------
|
||||
|
||||
* vref: int
|
||||
Default: 1250 (mV)
|
||||
Reference voltage on VREF_ADC pin in mV. It should not be necessary to set
|
||||
this parameter unless a non-default reference voltage is used.
|
||||
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
[From datasheet] The SMM665 is an Active DC Output power supply Controller
|
||||
that monitors, margins and cascade sequences power. The part monitors six
|
||||
power supply channels as well as VDD, 12V input, two general-purpose analog
|
||||
inputs and an internal temperature sensor using a 10-bit ADC.
|
||||
|
||||
Each monitored channel has its own high and low limits, plus a critical
|
||||
limit.
|
||||
|
||||
Support for SMM465, SMM764, and SMM766 has been implemented but is untested.
|
||||
|
||||
|
||||
Usage Notes
|
||||
-----------
|
||||
|
||||
This driver does not probe for devices, since there is no register which
|
||||
can be safely used to identify the chip. You will have to instantiate
|
||||
the devices explicitly. When instantiating the device, you have to specify
|
||||
its configuration register address.
|
||||
|
||||
Example: the following will load the driver for an SMM665 at address 0x57
|
||||
on I2C bus #1:
|
||||
$ modprobe smm665
|
||||
$ echo smm665 0x57 > /sys/bus/i2c/devices/i2c-1/new_device
|
||||
|
||||
|
||||
Sysfs entries
|
||||
-------------
|
||||
|
||||
This driver uses the values in the datasheet to convert ADC register values
|
||||
into the values specified in the sysfs-interface document. All attributes are
|
||||
read only.
|
||||
|
||||
Min, max, lcrit, and crit values are used by the chip to trigger external signals
|
||||
and/or other activity. Triggered signals can include HEALTHY, RST, Power Off,
|
||||
or Fault depending on the chip configuration. The driver reports values as lcrit
|
||||
or crit if exceeding the limits triggers RST, Power Off, or Fault, and as min or
|
||||
max otherwise. For details please see the SMM665 datasheet.
|
||||
|
||||
For SMM465 and SMM764, values for Channel E and F are reported but undefined.
|
||||
|
||||
in1_input 12V input voltage (mV)
|
||||
in2_input 3.3V (VDD) input voltage (mV)
|
||||
in3_input Channel A voltage (mV)
|
||||
in4_input Channel B voltage (mV)
|
||||
in5_input Channel C voltage (mV)
|
||||
in6_input Channel D voltage (mV)
|
||||
in7_input Channel E voltage (mV)
|
||||
in8_input Channel F voltage (mV)
|
||||
in9_input AIN1 voltage (mV)
|
||||
in10_input AIN2 voltage (mV)
|
||||
|
||||
in1_min 12v input minimum voltage (mV)
|
||||
in2_min 3.3V (VDD) input minimum voltage (mV)
|
||||
in3_min Channel A minimum voltage (mV)
|
||||
in4_min Channel B minimum voltage (mV)
|
||||
in5_min Channel C minimum voltage (mV)
|
||||
in6_min Channel D minimum voltage (mV)
|
||||
in7_min Channel E minimum voltage (mV)
|
||||
in8_min Channel F minimum voltage (mV)
|
||||
in9_min AIN1 minimum voltage (mV)
|
||||
in10_min AIN2 minimum voltage (mV)
|
||||
|
||||
in1_max 12v input maximum voltage (mV)
|
||||
in2_max 3.3V (VDD) input maximum voltage (mV)
|
||||
in3_max Channel A maximum voltage (mV)
|
||||
in4_max Channel B maximum voltage (mV)
|
||||
in5_max Channel C maximum voltage (mV)
|
||||
in6_max Channel D maximum voltage (mV)
|
||||
in7_max Channel E maximum voltage (mV)
|
||||
in8_max Channel F maximum voltage (mV)
|
||||
in9_max AIN1 maximum voltage (mV)
|
||||
in10_max AIN2 maximum voltage (mV)
|
||||
|
||||
in1_lcrit 12v input critical minimum voltage (mV)
|
||||
in2_lcrit 3.3V (VDD) input critical minimum voltage (mV)
|
||||
in3_lcrit Channel A critical minimum voltage (mV)
|
||||
in4_lcrit Channel B critical minimum voltage (mV)
|
||||
in5_lcrit Channel C critical minimum voltage (mV)
|
||||
in6_lcrit Channel D critical minimum voltage (mV)
|
||||
in7_lcrit Channel E critical minimum voltage (mV)
|
||||
in8_lcrit Channel F critical minimum voltage (mV)
|
||||
in9_lcrit AIN1 critical minimum voltage (mV)
|
||||
in10_lcrit AIN2 critical minimum voltage (mV)
|
||||
|
||||
in1_crit 12v input critical maximum voltage (mV)
|
||||
in2_crit 3.3V (VDD) input critical maximum voltage (mV)
|
||||
in3_crit Channel A critical maximum voltage (mV)
|
||||
in4_crit Channel B critical maximum voltage (mV)
|
||||
in5_crit Channel C critical maximum voltage (mV)
|
||||
in6_crit Channel D critical maximum voltage (mV)
|
||||
in7_crit Channel E critical maximum voltage (mV)
|
||||
in8_crit Channel F critical maximum voltage (mV)
|
||||
in9_crit AIN1 critical maximum voltage (mV)
|
||||
in10_crit AIN2 critical maximum voltage (mV)
|
||||
|
||||
in1_crit_alarm 12v input critical alarm
|
||||
in2_crit_alarm 3.3V (VDD) input critical alarm
|
||||
in3_crit_alarm Channel A critical alarm
|
||||
in4_crit_alarm Channel B critical alarm
|
||||
in5_crit_alarm Channel C critical alarm
|
||||
in6_crit_alarm Channel D critical alarm
|
||||
in7_crit_alarm Channel E critical alarm
|
||||
in8_crit_alarm Channel F critical alarm
|
||||
in9_crit_alarm AIN1 critical alarm
|
||||
in10_crit_alarm AIN2 critical alarm
|
||||
|
||||
temp1_input Chip tempererature
|
||||
temp1_min Mimimum chip tempererature
|
||||
temp1_max Maximum chip tempererature
|
||||
temp1_crit Critical chip tempererature
|
||||
temp1_crit_alarm Temperature critical alarm
|
@ -107,10 +107,24 @@ in[0-*]_min Voltage min value.
|
||||
Unit: millivolt
|
||||
RW
|
||||
|
||||
in[0-*]_lcrit Voltage critical min value.
|
||||
Unit: millivolt
|
||||
RW
|
||||
If voltage drops to or below this limit, the system may
|
||||
take drastic action such as power down or reset. At the very
|
||||
least, it should report a fault.
|
||||
|
||||
in[0-*]_max Voltage max value.
|
||||
Unit: millivolt
|
||||
RW
|
||||
|
||||
in[0-*]_crit Voltage critical max value.
|
||||
Unit: millivolt
|
||||
RW
|
||||
If voltage reaches or exceeds this limit, the system may
|
||||
take drastic action such as power down or reset. At the very
|
||||
least, it should report a fault.
|
||||
|
||||
in[0-*]_input Voltage input value.
|
||||
Unit: millivolt
|
||||
RO
|
||||
@ -284,7 +298,7 @@ temp[1-*]_input Temperature input value.
|
||||
Unit: millidegree Celsius
|
||||
RO
|
||||
|
||||
temp[1-*]_crit Temperature critical value, typically greater than
|
||||
temp[1-*]_crit Temperature critical max value, typically greater than
|
||||
corresponding temp_max values.
|
||||
Unit: millidegree Celsius
|
||||
RW
|
||||
@ -296,6 +310,11 @@ temp[1-*]_crit_hyst
|
||||
from the critical value.
|
||||
RW
|
||||
|
||||
temp[1-*]_lcrit Temperature critical min value, typically lower than
|
||||
corresponding temp_min values.
|
||||
Unit: millidegree Celsius
|
||||
RW
|
||||
|
||||
temp[1-*]_offset
|
||||
Temperature offset which is added to the temperature reading
|
||||
by the chip.
|
||||
@ -344,9 +363,6 @@ Also see the Alarms section for status flags associated with temperatures.
|
||||
* Currents *
|
||||
************
|
||||
|
||||
Note that no known chip provides current measurements as of writing,
|
||||
so this part is theoretical, so to say.
|
||||
|
||||
curr[1-*]_max Current max value
|
||||
Unit: milliampere
|
||||
RW
|
||||
@ -471,6 +487,7 @@ limit-related alarms, not both. The driver should just reflect the hardware
|
||||
implementation.
|
||||
|
||||
in[0-*]_alarm
|
||||
curr[1-*]_alarm
|
||||
fan[1-*]_alarm
|
||||
temp[1-*]_alarm
|
||||
Channel alarm
|
||||
@ -482,6 +499,8 @@ OR
|
||||
|
||||
in[0-*]_min_alarm
|
||||
in[0-*]_max_alarm
|
||||
curr[1-*]_min_alarm
|
||||
curr[1-*]_max_alarm
|
||||
fan[1-*]_min_alarm
|
||||
fan[1-*]_max_alarm
|
||||
temp[1-*]_min_alarm
|
||||
@ -497,7 +516,6 @@ to notify open diodes, unconnected fans etc. where the hardware
|
||||
supports it. When this boolean has value 1, the measurement for that
|
||||
channel should not be trusted.
|
||||
|
||||
in[0-*]_fault
|
||||
fan[1-*]_fault
|
||||
temp[1-*]_fault
|
||||
Input fault condition
|
||||
@ -513,6 +531,7 @@ beep_enable Master beep enable
|
||||
RW
|
||||
|
||||
in[0-*]_beep
|
||||
curr[1-*]_beep
|
||||
fan[1-*]_beep
|
||||
temp[1-*]_beep
|
||||
Channel beep
|
||||
|
@ -20,6 +20,10 @@ Supported chips:
|
||||
Prefix: 'w83667hg'
|
||||
Addresses scanned: ISA address retrieved from Super I/O registers
|
||||
Datasheet: not available
|
||||
* Winbond W83667HG-B
|
||||
Prefix: 'w83667hg'
|
||||
Addresses scanned: ISA address retrieved from Super I/O registers
|
||||
Datasheet: Available from Nuvoton upon request
|
||||
|
||||
Authors:
|
||||
Jean Delvare <khali@linux-fr.org>
|
||||
@ -32,8 +36,8 @@ Description
|
||||
-----------
|
||||
|
||||
This driver implements support for the Winbond W83627EHF, W83627EHG,
|
||||
W83627DHG, W83627DHG-P and W83667HG super I/O chips. We will refer to them
|
||||
collectively as Winbond chips.
|
||||
W83627DHG, W83627DHG-P, W83667HG and W83667HG-B super I/O chips.
|
||||
We will refer to them collectively as Winbond chips.
|
||||
|
||||
The chips implement three temperature sensors, five fan rotation
|
||||
speed sensors, ten analog voltage sensors (only nine for the 627DHG), one
|
||||
@ -68,14 +72,15 @@ follows:
|
||||
temp1 -> pwm1
|
||||
temp2 -> pwm2
|
||||
temp3 -> pwm3
|
||||
prog -> pwm4 (not on 667HG; the programmable setting is not supported by
|
||||
the driver)
|
||||
prog -> pwm4 (not on 667HG and 667HG-B; the programmable setting is not
|
||||
supported by the driver)
|
||||
|
||||
/sys files
|
||||
----------
|
||||
|
||||
name - this is a standard hwmon device entry. For the W83627EHF and W83627EHG,
|
||||
it is set to "w83627ehf" and for the W83627DHG it is set to "w83627dhg"
|
||||
it is set to "w83627ehf", for the W83627DHG it is set to "w83627dhg",
|
||||
and for the W83667HG it is set to "w83667hg".
|
||||
|
||||
pwm[1-4] - this file stores PWM duty cycle or DC value (fan speed) in range:
|
||||
0 (stop) to 255 (full)
|
||||
|
@ -102,7 +102,7 @@ static int __devinit usb_hcd_pnx4008_probe(struct platform_device *pdev)
|
||||
memset(&i2c_info, 0, sizeof(struct i2c_board_info));
|
||||
strlcpy(i2c_info.name, "isp1301_pnx", I2C_NAME_SIZE);
|
||||
isp1301_i2c_client = i2c_new_probed_device(i2c_adap, &i2c_info,
|
||||
normal_i2c);
|
||||
normal_i2c, NULL);
|
||||
i2c_put_adapter(i2c_adap);
|
||||
(...)
|
||||
}
|
||||
|
@ -79,6 +79,7 @@ Code Seq#(hex) Include File Comments
|
||||
0x22 all scsi/sg.h
|
||||
'#' 00-3F IEEE 1394 Subsystem Block for the entire subsystem
|
||||
'$' 00-0F linux/perf_counter.h, linux/perf_event.h
|
||||
'&' 00-07 drivers/firewire/nosy-user.h
|
||||
'1' 00-1F <linux/timepps.h> PPS kit from Ulrich Windl
|
||||
<ftp://ftp.de.kernel.org/pub/linux/daemons/ntp/PPS/>
|
||||
'2' 01-04 linux/i2o.h
|
||||
|
@ -22,11 +22,33 @@ building C files and assembler files.
|
||||
|
||||
KAFLAGS
|
||||
--------------------------------------------------
|
||||
Additional options to the assembler.
|
||||
Additional options to the assembler (for built-in and modules).
|
||||
|
||||
AFLAGS_MODULE
|
||||
--------------------------------------------------
|
||||
Addtional module specific options to use for $(AS).
|
||||
|
||||
AFLAGS_KERNEL
|
||||
--------------------------------------------------
|
||||
Addtional options for $(AS) when used for assembler
|
||||
code for code that is compiled as built-in.
|
||||
|
||||
KCFLAGS
|
||||
--------------------------------------------------
|
||||
Additional options to the C compiler.
|
||||
Additional options to the C compiler (for built-in and modules).
|
||||
|
||||
CFLAGS_KERNEL
|
||||
--------------------------------------------------
|
||||
Addtional options for $(CC) when used to compile
|
||||
code that is compiled as built-in.
|
||||
|
||||
CFLAGS_MODULE
|
||||
--------------------------------------------------
|
||||
Addtional module specific options to use for $(CC).
|
||||
|
||||
LDFLAGS_MODULE
|
||||
--------------------------------------------------
|
||||
Additional options used for $(LD) when linking modules.
|
||||
|
||||
KBUILD_VERBOSE
|
||||
--------------------------------------------------
|
||||
@ -40,15 +62,15 @@ Set the directory to look for the kernel source when building external
|
||||
modules.
|
||||
The directory can be specified in several ways:
|
||||
1) Use "M=..." on the command line
|
||||
2) Environmnet variable KBUILD_EXTMOD
|
||||
3) Environmnet variable SUBDIRS
|
||||
2) Environment variable KBUILD_EXTMOD
|
||||
3) Environment variable SUBDIRS
|
||||
The possibilities are listed in the order they take precedence.
|
||||
Using "M=..." will always override the others.
|
||||
|
||||
KBUILD_OUTPUT
|
||||
--------------------------------------------------
|
||||
Specify the output directory when building the kernel.
|
||||
The output directory can also be specificed using "O=...".
|
||||
The output directory can also be specified using "O=...".
|
||||
Setting "O=..." takes precedence over KBUILD_OUTPUT.
|
||||
|
||||
ARCH
|
||||
@ -90,7 +112,7 @@ The script will be called with the following arguments:
|
||||
$3 - kernel map file
|
||||
$4 - default install path (use root directory if blank)
|
||||
|
||||
The implmentation of "make install" is architecture specific
|
||||
The implementation of "make install" is architecture specific
|
||||
and it may differ from the above.
|
||||
|
||||
INSTALLKERNEL is provided to enable the possibility to
|
||||
|
@ -65,7 +65,7 @@ also use the environment variable KCONFIG_ALLCONFIG as a flag or a
|
||||
filename that contains config symbols that the user requires to be
|
||||
set to a specific value. If KCONFIG_ALLCONFIG is used without a
|
||||
filename, "make *config" checks for a file named
|
||||
"all{yes/mod/no/random}.config" (corresponding to the *config command
|
||||
"all{yes/mod/no/def/random}.config" (corresponding to the *config command
|
||||
that was used) for symbol values that are to be forced. If this file
|
||||
is not found, it checks for a file named "all.config" to contain forced
|
||||
values.
|
||||
|
@ -45,7 +45,6 @@ This document describes the Linux kernel Makefiles.
|
||||
--- 7.1 header-y
|
||||
--- 7.2 objhdr-y
|
||||
--- 7.3 destination-y
|
||||
--- 7.4 unifdef-y (deprecated)
|
||||
|
||||
=== 8 Kbuild Variables
|
||||
=== 9 Makefile language
|
||||
@ -168,7 +167,7 @@ more details, with real examples.
|
||||
#drivers/isdn/i4l/Makefile
|
||||
# Makefile for the kernel ISDN subsystem and device drivers.
|
||||
# Each configuration option enables a list of files.
|
||||
obj-$(CONFIG_ISDN) += isdn.o
|
||||
obj-$(CONFIG_ISDN_I4L) += isdn.o
|
||||
obj-$(CONFIG_ISDN_PPP_BSDCOMP) += isdn_bsdcomp.o
|
||||
|
||||
--- 3.3 Loadable module goals - obj-m
|
||||
@ -187,34 +186,35 @@ more details, with real examples.
|
||||
Note: In this example $(CONFIG_ISDN_PPP_BSDCOMP) evaluates to 'm'
|
||||
|
||||
If a kernel module is built from several source files, you specify
|
||||
that you want to build a module in the same way as above.
|
||||
|
||||
Kbuild needs to know which the parts that you want to build your
|
||||
module from, so you have to tell it by setting an
|
||||
$(<module_name>-objs) variable.
|
||||
that you want to build a module in the same way as above; however,
|
||||
kbuild needs to know which object files you want to build your
|
||||
module from, so you have to tell it by setting a $(<module_name>-y)
|
||||
variable.
|
||||
|
||||
Example:
|
||||
#drivers/isdn/i4l/Makefile
|
||||
obj-$(CONFIG_ISDN) += isdn.o
|
||||
isdn-objs := isdn_net_lib.o isdn_v110.o isdn_common.o
|
||||
obj-$(CONFIG_ISDN_I4L) += isdn.o
|
||||
isdn-y := isdn_net_lib.o isdn_v110.o isdn_common.o
|
||||
|
||||
In this example, the module name will be isdn.o. Kbuild will
|
||||
compile the objects listed in $(isdn-objs) and then run
|
||||
compile the objects listed in $(isdn-y) and then run
|
||||
"$(LD) -r" on the list of these files to generate isdn.o.
|
||||
|
||||
Kbuild recognises objects used for composite objects by the suffix
|
||||
-objs, and the suffix -y. This allows the Makefiles to use
|
||||
the value of a CONFIG_ symbol to determine if an object is part
|
||||
of a composite object.
|
||||
Due to kbuild recognizing $(<module_name>-y) for composite objects,
|
||||
you can use the value of a CONFIG_ symbol to optionally include an
|
||||
object file as part of a composite object.
|
||||
|
||||
Example:
|
||||
#fs/ext2/Makefile
|
||||
obj-$(CONFIG_EXT2_FS) += ext2.o
|
||||
ext2-y := balloc.o bitmap.o
|
||||
ext2-$(CONFIG_EXT2_FS_XATTR) += xattr.o
|
||||
obj-$(CONFIG_EXT2_FS) += ext2.o
|
||||
ext2-y := balloc.o dir.o file.o ialloc.o inode.o ioctl.o \
|
||||
namei.o super.o symlink.o
|
||||
ext2-$(CONFIG_EXT2_FS_XATTR) += xattr.o xattr_user.o \
|
||||
xattr_trusted.o
|
||||
|
||||
In this example, xattr.o is only part of the composite object
|
||||
ext2.o if $(CONFIG_EXT2_FS_XATTR) evaluates to 'y'.
|
||||
In this example, xattr.o, xattr_user.o and xattr_trusted.o are only
|
||||
part of the composite object ext2.o if $(CONFIG_EXT2_FS_XATTR)
|
||||
evaluates to 'y'.
|
||||
|
||||
Note: Of course, when you are building objects into the kernel,
|
||||
the syntax above will also work. So, if you have CONFIG_EXT2_FS=y,
|
||||
@ -244,12 +244,12 @@ more details, with real examples.
|
||||
may contain both a built-in.o and a lib.a file.
|
||||
|
||||
Example:
|
||||
#arch/i386/lib/Makefile
|
||||
lib-y := checksum.o delay.o
|
||||
#arch/x86/lib/Makefile
|
||||
lib-y := delay.o
|
||||
|
||||
This will create a library lib.a based on checksum.o and delay.o.
|
||||
For kbuild to actually recognize that there is a lib.a being built,
|
||||
the directory shall be listed in libs-y.
|
||||
This will create a library lib.a based on delay.o. For kbuild to
|
||||
actually recognize that there is a lib.a being built, the directory
|
||||
shall be listed in libs-y.
|
||||
See also "6.3 List directories to visit when descending".
|
||||
|
||||
Use of lib-y is normally restricted to lib/ and arch/*/lib.
|
||||
@ -284,43 +284,40 @@ more details, with real examples.
|
||||
--- 3.7 Compilation flags
|
||||
|
||||
ccflags-y, asflags-y and ldflags-y
|
||||
The three flags listed above applies only to the kbuild makefile
|
||||
where they are assigned. They are used for all the normal
|
||||
cc, as and ld invocation happenign during a recursive build.
|
||||
These three flags apply only to the kbuild makefile in which they
|
||||
are assigned. They are used for all the normal cc, as and ld
|
||||
invocations happening during a recursive build.
|
||||
Note: Flags with the same behaviour were previously named:
|
||||
EXTRA_CFLAGS, EXTRA_AFLAGS and EXTRA_LDFLAGS.
|
||||
They are yet supported but their use are deprecated.
|
||||
They are still supported but their usage is deprecated.
|
||||
|
||||
ccflags-y specifies options for compiling C files with $(CC).
|
||||
ccflags-y specifies options for compiling with $(CC).
|
||||
|
||||
Example:
|
||||
# drivers/sound/emu10k1/Makefile
|
||||
ccflags-y += -I$(obj)
|
||||
ccflags-$(DEBUG) += -DEMU10K1_DEBUG
|
||||
|
||||
# drivers/acpi/Makefile
|
||||
ccflags-y := -Os
|
||||
ccflags-$(CONFIG_ACPI_DEBUG) += -DACPI_DEBUG_OUTPUT
|
||||
|
||||
This variable is necessary because the top Makefile owns the
|
||||
variable $(KBUILD_CFLAGS) and uses it for compilation flags for the
|
||||
entire tree.
|
||||
|
||||
asflags-y is a similar string for per-directory options
|
||||
when compiling assembly language source.
|
||||
asflags-y specifies options for assembling with $(AS).
|
||||
|
||||
Example:
|
||||
#arch/x86_64/kernel/Makefile
|
||||
asflags-y := -traditional
|
||||
#arch/sparc/kernel/Makefile
|
||||
asflags-y := -ansi
|
||||
|
||||
|
||||
ldflags-y is a string for per-directory options to $(LD).
|
||||
ldflags-y specifies options for linking with $(LD).
|
||||
|
||||
Example:
|
||||
#arch/m68k/fpsp040/Makefile
|
||||
ldflags-y := -x
|
||||
#arch/cris/boot/compressed/Makefile
|
||||
ldflags-y += -T $(srctree)/$(src)/decompress_$(arch-y).lds
|
||||
|
||||
subdir-ccflags-y, subdir-asflags-y
|
||||
The two flags listed above are similar to ccflags-y and as-falgs-y.
|
||||
The difference is that the subdir- variants has effect for the kbuild
|
||||
file where tey are present and all subdirectories.
|
||||
The two flags listed above are similar to ccflags-y and asflags-y.
|
||||
The difference is that the subdir- variants have effect for the kbuild
|
||||
file where they are present and all subdirectories.
|
||||
Options specified using subdir-* are added to the commandline before
|
||||
the options specified using the non-subdir variants.
|
||||
|
||||
@ -340,18 +337,18 @@ more details, with real examples.
|
||||
CFLAGS_aha152x.o = -DAHA152X_STAT -DAUTOCONF
|
||||
CFLAGS_gdth.o = # -DDEBUG_GDTH=2 -D__SERIAL__ -D__COM2__ \
|
||||
-DGDTH_STATISTICS
|
||||
CFLAGS_seagate.o = -DARBITRATE -DPARITY -DSEAGATE_USE_ASM
|
||||
|
||||
These three lines specify compilation flags for aha152x.o,
|
||||
gdth.o, and seagate.o
|
||||
These two lines specify compilation flags for aha152x.o and gdth.o.
|
||||
|
||||
$(AFLAGS_$@) is a similar feature for source files in assembly
|
||||
languages.
|
||||
|
||||
Example:
|
||||
# arch/arm/kernel/Makefile
|
||||
AFLAGS_head-armv.o := -DTEXTADDR=$(TEXTADDR) -traditional
|
||||
AFLAGS_head-armo.o := -DTEXTADDR=$(TEXTADDR) -traditional
|
||||
AFLAGS_head.o := -DTEXT_OFFSET=$(TEXT_OFFSET)
|
||||
AFLAGS_crunch-bits.o := -Wa,-mcpu=ep9312
|
||||
AFLAGS_iwmmxt.o := -Wa,-mcpu=iwmmxt
|
||||
|
||||
|
||||
--- 3.9 Dependency tracking
|
||||
|
||||
@ -923,16 +920,33 @@ When kbuild executes, the following steps are followed (roughly):
|
||||
The first example utilises the trick that a config option expands
|
||||
to 'y' when selected.
|
||||
|
||||
CFLAGS_KERNEL $(CC) options specific for built-in
|
||||
KBUILD_AFLAGS_KERNEL $(AS) options specific for built-in
|
||||
|
||||
$(CFLAGS_KERNEL) contains extra C compiler flags used to compile
|
||||
$(KBUILD_AFLAGS_KERNEL) contains extra C compiler flags used to compile
|
||||
resident kernel code.
|
||||
|
||||
CFLAGS_MODULE $(CC) options specific for modules
|
||||
KBUILD_AFLAGS_MODULE Options for $(AS) when building modules
|
||||
|
||||
$(CFLAGS_MODULE) contains extra C compiler flags used to compile code
|
||||
for loadable kernel modules.
|
||||
$(KBUILD_AFLAGS_MODULE) is used to add arch specific options that
|
||||
are used for $(AS).
|
||||
From commandline AFLAGS_MODULE shall be used (see kbuild.txt).
|
||||
|
||||
KBUILD_CFLAGS_KERNEL $(CC) options specific for built-in
|
||||
|
||||
$(KBUILD_CFLAGS_KERNEL) contains extra C compiler flags used to compile
|
||||
resident kernel code.
|
||||
|
||||
KBUILD_CFLAGS_MODULE Options for $(CC) when building modules
|
||||
|
||||
$(KBUILD_CFLAGS_MODULE) is used to add arch specific options that
|
||||
are used for $(CC).
|
||||
From commandline CFLAGS_MODULE shall be used (see kbuild.txt).
|
||||
|
||||
KBUILD_LDFLAGS_MODULE Options for $(LD) when linking modules
|
||||
|
||||
$(KBUILD_LDFLAGS_MODULE) is used to add arch specific options
|
||||
used when linking modules. This is often a linker script.
|
||||
From commandline LDFLAGS_MODULE shall be used (see kbuild.txt).
|
||||
|
||||
--- 6.2 Add prerequisites to archprepare:
|
||||
|
||||
@ -1176,14 +1190,14 @@ When kbuild executes, the following steps are followed (roughly):
|
||||
=== 7 Kbuild syntax for exported headers
|
||||
|
||||
The kernel include a set of headers that is exported to userspace.
|
||||
Many headers can be exported as-is but other headers requires a
|
||||
Many headers can be exported as-is but other headers require a
|
||||
minimal pre-processing before they are ready for user-space.
|
||||
The pre-processing does:
|
||||
- drop kernel specific annotations
|
||||
- drop include of compiler.h
|
||||
- drop all sections that is kernel internat (guarded by ifdef __KERNEL__)
|
||||
- drop all sections that are kernel internal (guarded by ifdef __KERNEL__)
|
||||
|
||||
Each relevant directory contain a file name "Kbuild" which specify the
|
||||
Each relevant directory contains a file name "Kbuild" which specifies the
|
||||
headers to be exported.
|
||||
See subsequent chapter for the syntax of the Kbuild file.
|
||||
|
||||
@ -1230,11 +1244,6 @@ See subsequent chapter for the syntax of the Kbuild file.
|
||||
will be located in the directory "include/linux" when exported.
|
||||
|
||||
|
||||
--- 7.4 unifdef-y (deprecated)
|
||||
|
||||
unifdef-y is deprecated. A direct replacement is header-y.
|
||||
|
||||
|
||||
=== 8 Kbuild Variables
|
||||
|
||||
The top Makefile exports the following variables:
|
||||
|
@ -73,7 +73,6 @@ parameter is applicable:
|
||||
MTD MTD (Memory Technology Device) support is enabled.
|
||||
NET Appropriate network support is enabled.
|
||||
NUMA NUMA support is enabled.
|
||||
GENERIC_TIME The generic timeofday code is enabled.
|
||||
NFS Appropriate NFS support is enabled.
|
||||
OSS OSS sound support is enabled.
|
||||
PV_OPS A paravirtualized kernel is enabled.
|
||||
@ -89,8 +88,8 @@ parameter is applicable:
|
||||
RAM RAM disk support is enabled.
|
||||
S390 S390 architecture is enabled.
|
||||
SCSI Appropriate SCSI support is enabled.
|
||||
A lot of drivers has their options described inside of
|
||||
Documentation/scsi/.
|
||||
A lot of drivers have their options described inside
|
||||
the Documentation/scsi/ sub-directory.
|
||||
SECURITY Different security models are enabled.
|
||||
SELINUX SELinux support is enabled.
|
||||
APPARMOR AppArmor support is enabled.
|
||||
@ -116,6 +115,7 @@ parameter is applicable:
|
||||
More X86-64 boot options can be found in
|
||||
Documentation/x86/x86_64/boot-options.txt .
|
||||
X86 Either 32bit or 64bit x86 (same as X86-32+X86-64)
|
||||
XEN Xen support is enabled
|
||||
|
||||
In addition, the following text indicates that the option:
|
||||
|
||||
@ -281,36 +281,17 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
no: ACPI OperationRegions are not marked as reserved,
|
||||
no further checks are performed.
|
||||
|
||||
ad1848= [HW,OSS]
|
||||
Format: <io>,<irq>,<dma>,<dma2>,<type>
|
||||
|
||||
add_efi_memmap [EFI; X86] Include EFI memory map in
|
||||
kernel's map of available physical RAM.
|
||||
|
||||
advansys= [HW,SCSI]
|
||||
See header of drivers/scsi/advansys.c.
|
||||
|
||||
aedsp16= [HW,OSS] Audio Excel DSP 16
|
||||
Format: <io>,<irq>,<dma>,<mss_io>,<mpu_io>,<mpu_irq>
|
||||
See also header of sound/oss/aedsp16.c.
|
||||
|
||||
agp= [AGP]
|
||||
{ off | try_unsupported }
|
||||
off: disable AGP support
|
||||
try_unsupported: try to drive unsupported chipsets
|
||||
(may crash computer or cause data corruption)
|
||||
|
||||
aha152x= [HW,SCSI]
|
||||
See Documentation/scsi/aha152x.txt.
|
||||
|
||||
aha1542= [HW,SCSI]
|
||||
Format: <portbase>[,<buson>,<busoff>[,<dmaspeed>]]
|
||||
|
||||
aic7xxx= [HW,SCSI]
|
||||
See Documentation/scsi/aic7xxx.txt.
|
||||
|
||||
aic79xx= [HW,SCSI]
|
||||
See Documentation/scsi/aic79xx.txt.
|
||||
ALSA [HW,ALSA]
|
||||
See Documentation/sound/alsa/alsa-parameters.txt
|
||||
|
||||
alignment= [KNL,ARM]
|
||||
Allow the default userspace alignment fault handler
|
||||
@ -372,8 +353,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
|
||||
atarimouse= [HW,MOUSE] Atari Mouse
|
||||
|
||||
atascsi= [HW,SCSI] Atari SCSI
|
||||
|
||||
atkbd.extra= [HW] Enable extra LEDs and keys on IBM RapidAccess,
|
||||
EzKey and similar keyboards
|
||||
|
||||
@ -423,10 +402,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
bttv.pll= See Documentation/video4linux/bttv/Insmod-options
|
||||
bttv.tuner= and Documentation/video4linux/bttv/CARDLIST
|
||||
|
||||
BusLogic= [HW,SCSI]
|
||||
See drivers/scsi/BusLogic.c, comment before function
|
||||
BusLogic_ParseDriverOptions().
|
||||
|
||||
c101= [NET] Moxa C101 synchronous serial card
|
||||
|
||||
cachesize= [BUGS=X86-32] Override level 2 CPU cache size detection.
|
||||
@ -469,7 +444,7 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
clocksource is not available, it defaults to PIT.
|
||||
Format: { pit | tsc | cyclone | pmtmr }
|
||||
|
||||
clocksource= [GENERIC_TIME] Override the default clocksource
|
||||
clocksource= Override the default clocksource
|
||||
Format: <string>
|
||||
Override the default clocksource and use the clocksource
|
||||
with the name specified.
|
||||
@ -656,8 +631,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
Disable PIN 1 of APIC timer
|
||||
Can be useful to work around chipset bugs.
|
||||
|
||||
dmasound= [HW,OSS] Sound subsystem buffers
|
||||
|
||||
dma_debug=off If the kernel is compiled with DMA_API_DEBUG support,
|
||||
this option disables the debugging code at boot.
|
||||
|
||||
@ -677,8 +650,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
|
||||
dscc4.setup= [NET]
|
||||
|
||||
dtc3181e= [HW,SCSI]
|
||||
|
||||
dynamic_printk Enables pr_debug()/dev_dbg() calls if
|
||||
CONFIG_DYNAMIC_PRINTK_DEBUG has been enabled.
|
||||
These can also be switched on/off via
|
||||
@ -687,8 +658,11 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
earlycon= [KNL] Output early console device and options.
|
||||
uart[8250],io,<addr>[,options]
|
||||
uart[8250],mmio,<addr>[,options]
|
||||
uart[8250],mmio32,<addr>[,options]
|
||||
Start an early, polled-mode console on the 8250/16550
|
||||
UART at the specified I/O port or MMIO address.
|
||||
MMIO inter-register address stride is either 8bit (mmio)
|
||||
or 32bit (mmio32).
|
||||
The options are the same as for ttyS, above.
|
||||
|
||||
earlyprintk= [X86,SH,BLACKFIN]
|
||||
@ -716,8 +690,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
This is desgined to be used in conjunction with
|
||||
the boot argument: earlyprintk=vga
|
||||
|
||||
eata= [HW,SCSI]
|
||||
|
||||
edd= [EDD]
|
||||
Format: {"off" | "on" | "skip[mbr]"}
|
||||
|
||||
@ -773,12 +745,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
Format: <interval>,<probability>,<space>,<times>
|
||||
See also /Documentation/fault-injection/.
|
||||
|
||||
fd_mcs= [HW,SCSI]
|
||||
See header of drivers/scsi/fd_mcs.c.
|
||||
|
||||
fdomain= [HW,SCSI]
|
||||
See header of drivers/scsi/fdomain.c.
|
||||
|
||||
floppy= [HW]
|
||||
See Documentation/blockdev/floppy.txt.
|
||||
|
||||
@ -838,14 +804,9 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
When zero, profiling data is discarded and associated
|
||||
debugfs files are removed at module unload time.
|
||||
|
||||
gdth= [HW,SCSI]
|
||||
See header of drivers/scsi/gdth.c.
|
||||
|
||||
gpt [EFI] Forces disk with valid GPT signature but
|
||||
invalid Protective MBR to be treated as GPT.
|
||||
|
||||
gvp11= [HW,SCSI]
|
||||
|
||||
hashdist= [KNL,NUMA] Large hashes allocated during boot
|
||||
are distributed across NUMA nodes. Defaults on
|
||||
for 64bit NUMA, off otherwise.
|
||||
@ -918,9 +879,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
controller
|
||||
i8042.nopnp [HW] Don't use ACPIPnP / PnPBIOS to discover KBD/AUX
|
||||
controllers
|
||||
i8042.panicblink=
|
||||
[HW] Frequency with which keyboard LEDs should blink
|
||||
when kernel panics (default is 0.5 sec)
|
||||
i8042.reset [HW] Reset the controller during init and cleanup
|
||||
i8042.unlock [HW] Unlock (ignore) the keylock
|
||||
|
||||
@ -937,9 +895,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
i8k.restricted [HW] Allow controlling fans only if SYS_ADMIN
|
||||
capability is set.
|
||||
|
||||
ibmmcascsi= [HW,MCA,SCSI] IBM MicroChannel SCSI adapter
|
||||
See Documentation/mca.txt.
|
||||
|
||||
icn= [HW,ISDN]
|
||||
Format: <io>[,<membase>[,<icn_id>[,<icn_id2>]]]
|
||||
|
||||
@ -989,9 +944,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
programs exec'd, files mmap'd for exec, and all files
|
||||
opened for read by uid=0.
|
||||
|
||||
in2000= [HW,SCSI]
|
||||
See header of drivers/scsi/in2000.c.
|
||||
|
||||
init= [KNL]
|
||||
Format: <full_path>
|
||||
Run specified binary instead of /sbin/init as init
|
||||
@ -1029,6 +981,12 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
result in a hardware IOTLB flush operation as opposed
|
||||
to batching them for performance.
|
||||
|
||||
intremap= [X86-64, Intel-IOMMU]
|
||||
Format: { on (default) | off | nosid }
|
||||
on enable Interrupt Remapping (default)
|
||||
off disable Interrupt Remapping
|
||||
nosid disable Source ID checking
|
||||
|
||||
inttest= [IA64]
|
||||
|
||||
iomem= Disable strict checking of access to MMIO memory
|
||||
@ -1069,9 +1027,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
See comment before ip2_setup() in
|
||||
drivers/char/ip2/ip2base.c.
|
||||
|
||||
ips= [HW,SCSI] Adaptec / IBM ServeRAID controller
|
||||
See header of drivers/scsi/ips.c.
|
||||
|
||||
irqfixup [HW]
|
||||
When an interrupt is not handled search all handlers
|
||||
for it. Intended to get systems with badly broken
|
||||
@ -1144,9 +1099,12 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
kgdboc= [KGDB,HW] kgdb over consoles.
|
||||
Requires a tty driver that supports console polling,
|
||||
or a supported polling keyboard driver (non-usb).
|
||||
Serial only format: <serial_device>[,baud]
|
||||
keyboard only format: kbd
|
||||
keyboard and serial format: kbd,<serial_device>[,baud]
|
||||
Serial only format: <serial_device>[,baud]
|
||||
keyboard only format: kbd
|
||||
keyboard and serial format: kbd,<serial_device>[,baud]
|
||||
Optional Kernel mode setting:
|
||||
kms, kbd format: kms,kbd
|
||||
kms, kbd and serial format: kms,kbd,<ser_dev>[,baud]
|
||||
|
||||
kgdbwait [KGDB] Stop kernel execution and enter the
|
||||
kernel debugger at the earliest opportunity.
|
||||
@ -1344,9 +1302,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
ltpc= [NET]
|
||||
Format: <io>,<irq>,<dma>
|
||||
|
||||
mac5380= [HW,SCSI] Format:
|
||||
<can_queue>,<cmd_per_lun>,<sg_tablesize>,<hostid>,<use_tags>
|
||||
|
||||
machvec= [IA64] Force the use of a particular machine-vector
|
||||
(machvec) in a generic kernel.
|
||||
Example: machvec=hpzx1_swiotlb
|
||||
@ -1368,13 +1323,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
be mounted
|
||||
Format: <1-256>
|
||||
|
||||
max_luns= [SCSI] Maximum number of LUNs to probe.
|
||||
Should be between 1 and 2^32-1.
|
||||
|
||||
max_report_luns=
|
||||
[SCSI] Maximum number of LUNs received.
|
||||
Should be between 1 and 16384.
|
||||
|
||||
mcatest= [IA-64]
|
||||
|
||||
mce [X86-32] Machine Check Exception
|
||||
@ -1524,9 +1472,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
that the amount of memory usable for all allocations
|
||||
is not too small.
|
||||
|
||||
mpu401= [HW,OSS]
|
||||
Format: <io>,<irq>
|
||||
|
||||
MTD_Partition= [MTD]
|
||||
Format: <name>,<region-number>,<size>,<offset>
|
||||
|
||||
@ -1574,19 +1519,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
|
||||
n2= [NET] SDL Inc. RISCom/N2 synchronous serial card
|
||||
|
||||
NCR_D700= [HW,SCSI]
|
||||
See header of drivers/scsi/NCR_D700.c.
|
||||
|
||||
ncr5380= [HW,SCSI]
|
||||
|
||||
ncr53c400= [HW,SCSI]
|
||||
|
||||
ncr53c400a= [HW,SCSI]
|
||||
|
||||
ncr53c406a= [HW,SCSI]
|
||||
|
||||
ncr53c8xx= [HW,SCSI]
|
||||
|
||||
netdev= [NET] Network devices parameters
|
||||
Format: <irq>,<io>,<mem_start>,<mem_end>,<name>
|
||||
Note that mem_start is often overloaded to mean
|
||||
@ -1755,6 +1687,7 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
|
||||
nointremap [X86-64, Intel-IOMMU] Do not enable interrupt
|
||||
remapping.
|
||||
[Deprecated - use intremap=off]
|
||||
|
||||
nointroute [IA-64]
|
||||
|
||||
@ -1812,6 +1745,8 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
|
||||
nousb [USB] Disable the USB subsystem
|
||||
|
||||
nowatchdog [KNL] Disable the lockup detector.
|
||||
|
||||
nowb [ARM]
|
||||
|
||||
nox2apic [X86-64,APIC] Do not enable x2APIC mode.
|
||||
@ -1849,9 +1784,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
For example, to override I2C bus2:
|
||||
omap_mux=i2c2_scl.i2c2_scl=0x100,i2c2_sda.i2c2_sda=0x100
|
||||
|
||||
opl3= [HW,OSS]
|
||||
Format: <io>
|
||||
|
||||
oprofile.timer= [HW]
|
||||
Use timer interrupt instead of performance counters
|
||||
|
||||
@ -1863,9 +1795,8 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
perfmon on Intel CPUs instead of the
|
||||
CPU specific event set.
|
||||
|
||||
osst= [HW,SCSI] SCSI Tape Driver
|
||||
Format: <buffer_size>,<write_threshold>
|
||||
See also Documentation/scsi/st.txt.
|
||||
OSS [HW,OSS]
|
||||
See Documentation/sound/oss/oss-parameters.txt
|
||||
|
||||
panic= [KNL] Kernel behaviour on panic
|
||||
Format: <timeout>
|
||||
@ -1899,12 +1830,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
Currently this function knows 686a and 8231 chips.
|
||||
Format: [spp|ps2|epp|ecp|ecpepp]
|
||||
|
||||
pas2= [HW,OSS] Format:
|
||||
<io>,<irq>,<dma>,<dma16>,<sb_io>,<sb_irq>,<sb_dma>,<sb_dma16>
|
||||
|
||||
pas16= [HW,SCSI]
|
||||
See header of drivers/scsi/pas16.c.
|
||||
|
||||
pause_on_oops=
|
||||
Halt all CPUs after the first oops has been printed for
|
||||
the specified number of seconds. This is to be used if
|
||||
@ -1970,6 +1895,8 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
norom [X86] Do not assign address space to
|
||||
expansion ROMs that do not already have
|
||||
BIOS assigned address ranges.
|
||||
nobar [X86] Do not assign address space to the
|
||||
BARs that weren't assigned by the BIOS.
|
||||
irqmask=0xMMMM [X86] Set a bit mask of IRQs allowed to be
|
||||
assigned automatically to PCI devices. You can
|
||||
make the kernel exclude IRQs of your ISA cards
|
||||
@ -2047,15 +1974,18 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
force Enable ASPM even on devices that claim not to support it.
|
||||
WARNING: Forcing ASPM on may cause system lockups.
|
||||
|
||||
pcie_ports= [PCIE] PCIe ports handling:
|
||||
auto Ask the BIOS whether or not to use native PCIe services
|
||||
associated with PCIe ports (PME, hot-plug, AER). Use
|
||||
them only if that is allowed by the BIOS.
|
||||
native Use native PCIe services associated with PCIe ports
|
||||
unconditionally.
|
||||
compat Treat PCIe ports as PCI-to-PCI bridges, disable the PCIe
|
||||
ports driver.
|
||||
|
||||
pcie_pme= [PCIE,PM] Native PCIe PME signaling options:
|
||||
Format: {auto|force}[,nomsi]
|
||||
auto Use native PCIe PME signaling if the BIOS allows the
|
||||
kernel to control PCIe config registers of root ports.
|
||||
force Use native PCIe PME signaling even if the BIOS refuses
|
||||
to allow the kernel to control the relevant PCIe config
|
||||
registers.
|
||||
nomsi Do not use MSI for native PCIe PME signaling (this makes
|
||||
all PCIe root ports use INTx for everything).
|
||||
all PCIe root ports use INTx for all services).
|
||||
|
||||
pcmv= [HW,PCMCIA] BadgePAD 4
|
||||
|
||||
@ -2171,10 +2101,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
[HW,MOUSE] Controls Logitech smartscroll autorepeat.
|
||||
0 = disabled, 1 = enabled (default).
|
||||
|
||||
pss= [HW,OSS] Personal Sound System (ECHO ESC614)
|
||||
Format:
|
||||
<io>,<mss_io>,<mss_irq>,<mss_dma>,<mpu_io>,<mpu_irq>
|
||||
|
||||
pt. [PARIDE]
|
||||
See Documentation/blockdev/paride.txt.
|
||||
|
||||
@ -2273,30 +2199,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
|
||||
sched_debug [KNL] Enables verbose scheduler debug messages.
|
||||
|
||||
scsi_debug_*= [SCSI]
|
||||
See drivers/scsi/scsi_debug.c.
|
||||
|
||||
scsi_default_dev_flags=
|
||||
[SCSI] SCSI default device flags
|
||||
Format: <integer>
|
||||
|
||||
scsi_dev_flags= [SCSI] Black/white list entry for vendor and model
|
||||
Format: <vendor>:<model>:<flags>
|
||||
(flags are integer value)
|
||||
|
||||
scsi_logging_level= [SCSI] a bit mask of logging levels
|
||||
See drivers/scsi/scsi_logging.h for bits. Also
|
||||
settable via sysctl at dev.scsi.logging_level
|
||||
(/proc/sys/dev/scsi/logging_level).
|
||||
There is also a nice 'scsi_logging_level' script in the
|
||||
S390-tools package, available for download at
|
||||
http://www-128.ibm.com/developerworks/linux/linux390/s390-tools-1.5.4.html
|
||||
|
||||
scsi_mod.scan= [SCSI] sync (default) scans SCSI busses as they are
|
||||
discovered. async scans them in kernel threads,
|
||||
allowing boot to proceed. none ignores them, expecting
|
||||
user space to do the scan.
|
||||
|
||||
security= [SECURITY] Choose a security module to enable at boot.
|
||||
If this boot parameter is not specified, only the first
|
||||
security module asking for security registration will be
|
||||
@ -2330,9 +2232,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
The parameter means the number of CPUs to show,
|
||||
for example 1 means boot CPU only.
|
||||
|
||||
sim710= [SCSI,HW]
|
||||
See header of drivers/scsi/sim710.c.
|
||||
|
||||
simeth= [IA-64]
|
||||
simscsi=
|
||||
|
||||
@ -2390,128 +2289,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
1: Fast pin select (default)
|
||||
2: ATC IRMode
|
||||
|
||||
snd-ad1816a= [HW,ALSA]
|
||||
|
||||
snd-ad1848= [HW,ALSA]
|
||||
|
||||
snd-ali5451= [HW,ALSA]
|
||||
|
||||
snd-als100= [HW,ALSA]
|
||||
|
||||
snd-als4000= [HW,ALSA]
|
||||
|
||||
snd-azt2320= [HW,ALSA]
|
||||
|
||||
snd-cmi8330= [HW,ALSA]
|
||||
|
||||
snd-cmipci= [HW,ALSA]
|
||||
|
||||
snd-cs4231= [HW,ALSA]
|
||||
|
||||
snd-cs4232= [HW,ALSA]
|
||||
|
||||
snd-cs4236= [HW,ALSA]
|
||||
|
||||
snd-cs4281= [HW,ALSA]
|
||||
|
||||
snd-cs46xx= [HW,ALSA]
|
||||
|
||||
snd-dt019x= [HW,ALSA]
|
||||
|
||||
snd-dummy= [HW,ALSA]
|
||||
|
||||
snd-emu10k1= [HW,ALSA]
|
||||
|
||||
snd-ens1370= [HW,ALSA]
|
||||
|
||||
snd-ens1371= [HW,ALSA]
|
||||
|
||||
snd-es968= [HW,ALSA]
|
||||
|
||||
snd-es1688= [HW,ALSA]
|
||||
|
||||
snd-es18xx= [HW,ALSA]
|
||||
|
||||
snd-es1938= [HW,ALSA]
|
||||
|
||||
snd-es1968= [HW,ALSA]
|
||||
|
||||
snd-fm801= [HW,ALSA]
|
||||
|
||||
snd-gusclassic= [HW,ALSA]
|
||||
|
||||
snd-gusextreme= [HW,ALSA]
|
||||
|
||||
snd-gusmax= [HW,ALSA]
|
||||
|
||||
snd-hdsp= [HW,ALSA]
|
||||
|
||||
snd-ice1712= [HW,ALSA]
|
||||
|
||||
snd-intel8x0= [HW,ALSA]
|
||||
|
||||
snd-interwave= [HW,ALSA]
|
||||
|
||||
snd-interwave-stb=
|
||||
[HW,ALSA]
|
||||
|
||||
snd-korg1212= [HW,ALSA]
|
||||
|
||||
snd-maestro3= [HW,ALSA]
|
||||
|
||||
snd-mpu401= [HW,ALSA]
|
||||
|
||||
snd-mtpav= [HW,ALSA]
|
||||
|
||||
snd-nm256= [HW,ALSA]
|
||||
|
||||
snd-opl3sa2= [HW,ALSA]
|
||||
|
||||
snd-opti92x-ad1848=
|
||||
[HW,ALSA]
|
||||
|
||||
snd-opti92x-cs4231=
|
||||
[HW,ALSA]
|
||||
|
||||
snd-opti93x= [HW,ALSA]
|
||||
|
||||
snd-pmac= [HW,ALSA]
|
||||
|
||||
snd-rme32= [HW,ALSA]
|
||||
|
||||
snd-rme96= [HW,ALSA]
|
||||
|
||||
snd-rme9652= [HW,ALSA]
|
||||
|
||||
snd-sb8= [HW,ALSA]
|
||||
|
||||
snd-sb16= [HW,ALSA]
|
||||
|
||||
snd-sbawe= [HW,ALSA]
|
||||
|
||||
snd-serial= [HW,ALSA]
|
||||
|
||||
snd-sgalaxy= [HW,ALSA]
|
||||
|
||||
snd-sonicvibes= [HW,ALSA]
|
||||
|
||||
snd-sun-amd7930=
|
||||
[HW,ALSA]
|
||||
|
||||
snd-sun-cs4231= [HW,ALSA]
|
||||
|
||||
snd-trident= [HW,ALSA]
|
||||
|
||||
snd-usb-audio= [HW,ALSA,USB]
|
||||
|
||||
snd-via82xx= [HW,ALSA]
|
||||
|
||||
snd-virmidi= [HW,ALSA]
|
||||
|
||||
snd-wavefront= [HW,ALSA]
|
||||
|
||||
snd-ymfpci= [HW,ALSA]
|
||||
|
||||
softlockup_panic=
|
||||
[KNL] Should the soft-lockup detector generate panics.
|
||||
|
||||
@ -2526,12 +2303,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
spia_pedr=
|
||||
spia_peddr=
|
||||
|
||||
sscape= [HW,OSS]
|
||||
Format: <io>,<irq>,<dma>,<mpu_io>,<mpu_irq>
|
||||
|
||||
st= [HW,SCSI] SCSI tape parameters (buffers, etc.)
|
||||
See Documentation/scsi/st.txt.
|
||||
|
||||
stacktrace [FTRACE]
|
||||
Enabled the stack tracer on boot up.
|
||||
|
||||
@ -2589,18 +2360,12 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
|
||||
switches= [HW,M68k]
|
||||
|
||||
sym53c416= [HW,SCSI]
|
||||
See header of drivers/scsi/sym53c416.c.
|
||||
|
||||
sysrq_always_enabled
|
||||
[KNL]
|
||||
Ignore sysrq setting - this boot parameter will
|
||||
neutralize any effect of /proc/sys/kernel/sysrq.
|
||||
Useful for debugging.
|
||||
|
||||
t128= [HW,SCSI]
|
||||
See header of drivers/scsi/t128.c.
|
||||
|
||||
tdfx= [HW,DRM]
|
||||
|
||||
test_suspend= [SUSPEND]
|
||||
@ -2637,10 +2402,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
<deci-seconds>: poll all this frequency
|
||||
0: no polling (default)
|
||||
|
||||
tmscsim= [HW,SCSI]
|
||||
See comment before function dc390_setup() in
|
||||
drivers/scsi/tmscsim.c.
|
||||
|
||||
topology= [S390]
|
||||
Format: {off | on}
|
||||
Specify if the kernel should make use of the cpu
|
||||
@ -2668,10 +2429,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
to facilitate early boot debugging.
|
||||
See also Documentation/trace/events.txt
|
||||
|
||||
trix= [HW,OSS] MediaTrix AudioTrix Pro
|
||||
Format:
|
||||
<io>,<irq>,<dma>,<dma2>,<sb_io>,<sb_irq>,<sb_dma>,<mpu_io>,<mpu_irq>
|
||||
|
||||
tsc= Disable clocksource-must-verify flag for TSC.
|
||||
Format: <string>
|
||||
[x86] reliable: mark tsc clocksource as reliable, this
|
||||
@ -2685,15 +2442,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
<port#>,<js1>,<js2>,<js3>,<js4>,<js5>,<js6>,<js7>
|
||||
See also Documentation/input/joystick-parport.txt
|
||||
|
||||
u14-34f= [HW,SCSI] UltraStor 14F/34F SCSI host adapter
|
||||
See header of drivers/scsi/u14-34f.c.
|
||||
|
||||
uart401= [HW,OSS]
|
||||
Format: <io>,<irq>
|
||||
|
||||
uart6850= [HW,OSS]
|
||||
Format: <io>,<irq>
|
||||
|
||||
uhash_entries= [KNL,NET]
|
||||
Set number of hash buckets for UDP/UDP-Lite connections
|
||||
|
||||
@ -2859,15 +2607,6 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
overridden by individual drivers. 0 will hide
|
||||
cursors, 1 will display them.
|
||||
|
||||
waveartist= [HW,OSS]
|
||||
Format: <io>,<irq>,<dma>,<dma2>
|
||||
|
||||
wd33c93= [HW,SCSI]
|
||||
See header of drivers/scsi/wd33c93.c.
|
||||
|
||||
wd7000= [HW,SCSI]
|
||||
See header of drivers/scsi/wd7000.c.
|
||||
|
||||
watchdog timers [HW,WDT] For information on watchdog timers,
|
||||
see Documentation/watchdog/watchdog-parameters.txt
|
||||
or other driver-specific files in the
|
||||
@ -2886,6 +2625,18 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||
xd= [HW,XT] Original XT pre-IDE (RLL encoded) disks.
|
||||
xd_geo= See header of drivers/block/xd.c.
|
||||
|
||||
xen_emul_unplug= [HW,X86,XEN]
|
||||
Unplug Xen emulated devices
|
||||
Format: [unplug0,][unplug1]
|
||||
ide-disks -- unplug primary master IDE devices
|
||||
aux-ide-disks -- unplug non-primary-master IDE devices
|
||||
nics -- unplug network devices
|
||||
all -- unplug all emulated devices (NICs and IDE disks)
|
||||
unnecessary -- unplugging emulated devices is
|
||||
unnecessary even if the host did not respond to
|
||||
the unplug protocol
|
||||
never -- do not unplug even if version check succeeds
|
||||
|
||||
xirc2ps_cs= [NET,PCMCIA]
|
||||
Format:
|
||||
<irq>,<irq_mask>,<io>,<full_duplex>,<do_sound>,<lockup_hack>[,<irq2>[,<irq3>[,<irq4>]]]
|
||||
@ -2894,5 +2645,4 @@ ______________________________________________________________________
|
||||
|
||||
TODO:
|
||||
|
||||
Add documentation for ALSA options.
|
||||
Add more DRM drivers.
|
||||
|
@ -285,6 +285,7 @@ architectures:
|
||||
- sparc64 (Return probes not yet implemented.)
|
||||
- arm
|
||||
- ppc
|
||||
- mips
|
||||
|
||||
3. Configuring Kprobes
|
||||
|
||||
|
@ -1024,6 +1024,10 @@ ThinkPad-specific interface. The driver will disable its native
|
||||
backlight brightness control interface if it detects that the standard
|
||||
ACPI interface is available in the ThinkPad.
|
||||
|
||||
If you want to use the thinkpad-acpi backlight brightness control
|
||||
instead of the generic ACPI video backlight brightness control for some
|
||||
reason, you should use the acpi_backlight=vendor kernel parameter.
|
||||
|
||||
The brightness_enable module parameter can be used to control whether
|
||||
the LCD brightness control feature will be enabled when available.
|
||||
brightness_enable=0 forces it to be disabled. brightness_enable=1
|
||||
|
@ -1,5 +1,6 @@
|
||||
# This creates the demonstration utility "lguest" which runs a Linux guest.
|
||||
CFLAGS:=-m32 -Wall -Wmissing-declarations -Wmissing-prototypes -O3 -I../../include -I../../arch/x86/include -U_FORTIFY_SOURCE
|
||||
# Missing headers? Add "-I../../include -I../../arch/x86/include"
|
||||
CFLAGS:=-m32 -Wall -Wmissing-declarations -Wmissing-prototypes -O3 -U_FORTIFY_SOURCE
|
||||
|
||||
all: lguest
|
||||
|
||||
|
@ -39,14 +39,14 @@
|
||||
#include <limits.h>
|
||||
#include <stddef.h>
|
||||
#include <signal.h>
|
||||
#include "linux/lguest_launcher.h"
|
||||
#include "linux/virtio_config.h"
|
||||
#include "linux/virtio_net.h"
|
||||
#include "linux/virtio_blk.h"
|
||||
#include "linux/virtio_console.h"
|
||||
#include "linux/virtio_rng.h"
|
||||
#include "linux/virtio_ring.h"
|
||||
#include "asm/bootparam.h"
|
||||
#include <linux/virtio_config.h>
|
||||
#include <linux/virtio_net.h>
|
||||
#include <linux/virtio_blk.h>
|
||||
#include <linux/virtio_console.h>
|
||||
#include <linux/virtio_rng.h>
|
||||
#include <linux/virtio_ring.h>
|
||||
#include <asm/bootparam.h>
|
||||
#include "../../include/linux/lguest_launcher.h"
|
||||
/*L:110
|
||||
* We can ignore the 42 include files we need for this program, but I do want
|
||||
* to draw attention to the use of kernel-style types.
|
||||
@ -1447,14 +1447,15 @@ static void add_to_bridge(int fd, const char *if_name, const char *br_name)
|
||||
static void configure_device(int fd, const char *tapif, u32 ipaddr)
|
||||
{
|
||||
struct ifreq ifr;
|
||||
struct sockaddr_in *sin = (struct sockaddr_in *)&ifr.ifr_addr;
|
||||
struct sockaddr_in sin;
|
||||
|
||||
memset(&ifr, 0, sizeof(ifr));
|
||||
strcpy(ifr.ifr_name, tapif);
|
||||
|
||||
/* Don't read these incantations. Just cut & paste them like I did! */
|
||||
sin->sin_family = AF_INET;
|
||||
sin->sin_addr.s_addr = htonl(ipaddr);
|
||||
sin.sin_family = AF_INET;
|
||||
sin.sin_addr.s_addr = htonl(ipaddr);
|
||||
memcpy(&ifr.ifr_addr, &sin, sizeof(sin));
|
||||
if (ioctl(fd, SIOCSIFADDR, &ifr) != 0)
|
||||
err(1, "Setting %s interface address", tapif);
|
||||
ifr.ifr_flags = IFF_UP;
|
||||
|
4
Documentation/mmc/00-INDEX
Normal file
4
Documentation/mmc/00-INDEX
Normal file
@ -0,0 +1,4 @@
|
||||
00-INDEX
|
||||
- this file
|
||||
mmc-dev-attrs.txt
|
||||
- info on SD and MMC device attributes
|
56
Documentation/mmc/mmc-dev-attrs.txt
Normal file
56
Documentation/mmc/mmc-dev-attrs.txt
Normal file
@ -0,0 +1,56 @@
|
||||
SD and MMC Device Attributes
|
||||
============================
|
||||
|
||||
All attributes are read-only.
|
||||
|
||||
cid Card Identifaction Register
|
||||
csd Card Specific Data Register
|
||||
scr SD Card Configuration Register (SD only)
|
||||
date Manufacturing Date (from CID Register)
|
||||
fwrev Firmware/Product Revision (from CID Register) (SD and MMCv1 only)
|
||||
hwrev Hardware/Product Revision (from CID Register) (SD and MMCv1 only)
|
||||
manfid Manufacturer ID (from CID Register)
|
||||
name Product Name (from CID Register)
|
||||
oemid OEM/Application ID (from CID Register)
|
||||
serial Product Serial Number (from CID Register)
|
||||
erase_size Erase group size
|
||||
preferred_erase_size Preferred erase size
|
||||
|
||||
Note on Erase Size and Preferred Erase Size:
|
||||
|
||||
"erase_size" is the minimum size, in bytes, of an erase
|
||||
operation. For MMC, "erase_size" is the erase group size
|
||||
reported by the card. Note that "erase_size" does not apply
|
||||
to trim or secure trim operations where the minimum size is
|
||||
always one 512 byte sector. For SD, "erase_size" is 512
|
||||
if the card is block-addressed, 0 otherwise.
|
||||
|
||||
SD/MMC cards can erase an arbitrarily large area up to and
|
||||
including the whole card. When erasing a large area it may
|
||||
be desirable to do it in smaller chunks for three reasons:
|
||||
1. A single erase command will make all other I/O on
|
||||
the card wait. This is not a problem if the whole card
|
||||
is being erased, but erasing one partition will make
|
||||
I/O for another partition on the same card wait for the
|
||||
duration of the erase - which could be a several
|
||||
minutes.
|
||||
2. To be able to inform the user of erase progress.
|
||||
3. The erase timeout becomes too large to be very
|
||||
useful. Because the erase timeout contains a margin
|
||||
which is multiplied by the size of the erase area,
|
||||
the value can end up being several minutes for large
|
||||
areas.
|
||||
|
||||
"erase_size" is not the most efficient unit to erase
|
||||
(especially for SD where it is just one sector),
|
||||
hence "preferred_erase_size" provides a good chunk
|
||||
size for erasing large areas.
|
||||
|
||||
For MMC, "preferred_erase_size" is the high-capacity
|
||||
erase size if a card specifies one, otherwise it is
|
||||
based on the capacity of the card.
|
||||
|
||||
For SD, "preferred_erase_size" is the allocation unit
|
||||
size specified by the card.
|
||||
|
||||
"preferred_erase_size" is in bytes.
|
146
Documentation/networking/dns_resolver.txt
Normal file
146
Documentation/networking/dns_resolver.txt
Normal file
@ -0,0 +1,146 @@
|
||||
===================
|
||||
DNS Resolver Module
|
||||
===================
|
||||
|
||||
Contents:
|
||||
|
||||
- Overview.
|
||||
- Compilation.
|
||||
- Setting up.
|
||||
- Usage.
|
||||
- Mechanism.
|
||||
- Debugging.
|
||||
|
||||
|
||||
========
|
||||
OVERVIEW
|
||||
========
|
||||
|
||||
The DNS resolver module provides a way for kernel services to make DNS queries
|
||||
by way of requesting a key of key type dns_resolver. These queries are
|
||||
upcalled to userspace through /sbin/request-key.
|
||||
|
||||
These routines must be supported by userspace tools dns.upcall, cifs.upcall and
|
||||
request-key. It is under development and does not yet provide the full feature
|
||||
set. The features it does support include:
|
||||
|
||||
(*) Implements the dns_resolver key_type to contact userspace.
|
||||
|
||||
It does not yet support the following AFS features:
|
||||
|
||||
(*) Dns query support for AFSDB resource record.
|
||||
|
||||
This code is extracted from the CIFS filesystem.
|
||||
|
||||
|
||||
===========
|
||||
COMPILATION
|
||||
===========
|
||||
|
||||
The module should be enabled by turning on the kernel configuration options:
|
||||
|
||||
CONFIG_DNS_RESOLVER - tristate "DNS Resolver support"
|
||||
|
||||
|
||||
==========
|
||||
SETTING UP
|
||||
==========
|
||||
|
||||
To set up this facility, the /etc/request-key.conf file must be altered so that
|
||||
/sbin/request-key can appropriately direct the upcalls. For example, to handle
|
||||
basic dname to IPv4/IPv6 address resolution, the following line should be
|
||||
added:
|
||||
|
||||
#OP TYPE DESC CO-INFO PROGRAM ARG1 ARG2 ARG3 ...
|
||||
#====== ============ ======= ======= ==========================
|
||||
create dns_resolver * * /usr/sbin/cifs.upcall %k
|
||||
|
||||
To direct a query for query type 'foo', a line of the following should be added
|
||||
before the more general line given above as the first match is the one taken.
|
||||
|
||||
create dns_resolver foo:* * /usr/sbin/dns.foo %k
|
||||
|
||||
|
||||
|
||||
=====
|
||||
USAGE
|
||||
=====
|
||||
|
||||
To make use of this facility, one of the following functions that are
|
||||
implemented in the module can be called after doing:
|
||||
|
||||
#include <linux/dns_resolver.h>
|
||||
|
||||
(1) int dns_query(const char *type, const char *name, size_t namelen,
|
||||
const char *options, char **_result, time_t *_expiry);
|
||||
|
||||
This is the basic access function. It looks for a cached DNS query and if
|
||||
it doesn't find it, it upcalls to userspace to make a new DNS query, which
|
||||
may then be cached. The key description is constructed as a string of the
|
||||
form:
|
||||
|
||||
[<type>:]<name>
|
||||
|
||||
where <type> optionally specifies the particular upcall program to invoke,
|
||||
and thus the type of query to do, and <name> specifies the string to be
|
||||
looked up. The default query type is a straight hostname to IP address
|
||||
set lookup.
|
||||
|
||||
The name parameter is not required to be a NUL-terminated string, and its
|
||||
length should be given by the namelen argument.
|
||||
|
||||
The options parameter may be NULL or it may be a set of options
|
||||
appropriate to the query type.
|
||||
|
||||
The return value is a string appropriate to the query type. For instance,
|
||||
for the default query type it is just a list of comma-separated IPv4 and
|
||||
IPv6 addresses. The caller must free the result.
|
||||
|
||||
The length of the result string is returned on success, and a negative
|
||||
error code is returned otherwise. -EKEYREJECTED will be returned if the
|
||||
DNS lookup failed.
|
||||
|
||||
If _expiry is non-NULL, the expiry time (TTL) of the result will be
|
||||
returned also.
|
||||
|
||||
|
||||
=========
|
||||
MECHANISM
|
||||
=========
|
||||
|
||||
The dnsresolver module registers a key type called "dns_resolver". Keys of
|
||||
this type are used to transport and cache DNS lookup results from userspace.
|
||||
|
||||
When dns_query() is invoked, it calls request_key() to search the local
|
||||
keyrings for a cached DNS result. If that fails to find one, it upcalls to
|
||||
userspace to get a new result.
|
||||
|
||||
Upcalls to userspace are made through the request_key() upcall vector, and are
|
||||
directed by means of configuration lines in /etc/request-key.conf that tell
|
||||
/sbin/request-key what program to run to instantiate the key.
|
||||
|
||||
The upcall handler program is responsible for querying the DNS, processing the
|
||||
result into a form suitable for passing to the keyctl_instantiate_key()
|
||||
routine. This then passes the data to dns_resolver_instantiate() which strips
|
||||
off and processes any options included in the data, and then attaches the
|
||||
remainder of the string to the key as its payload.
|
||||
|
||||
The upcall handler program should set the expiry time on the key to that of the
|
||||
lowest TTL of all the records it has extracted a result from. This means that
|
||||
the key will be discarded and recreated when the data it holds has expired.
|
||||
|
||||
dns_query() returns a copy of the value attached to the key, or an error if
|
||||
that is indicated instead.
|
||||
|
||||
See <file:Documentation/keys-request-key.txt> for further information about
|
||||
request-key function.
|
||||
|
||||
|
||||
=========
|
||||
DEBUGGING
|
||||
=========
|
||||
|
||||
Debugging messages can be turned on dynamically by writing a 1 into the
|
||||
following file:
|
||||
|
||||
/sys/module/dnsresolver/parameters/debug
|
@ -1,74 +0,0 @@
|
||||
The Wavelan drivers saga
|
||||
------------------------
|
||||
|
||||
By Jean Tourrilhes <jt@hpl.hp.com>
|
||||
|
||||
The Wavelan is a Radio network adapter designed by
|
||||
Lucent. Under this generic name is hidden quite a variety of hardware,
|
||||
and many Linux driver to support it.
|
||||
The get the full story on Wireless LANs, please consult :
|
||||
http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/
|
||||
|
||||
"wavelan" driver (old ISA Wavelan)
|
||||
----------------
|
||||
o Config : Network device -> Wireless LAN -> AT&T WaveLAN
|
||||
o Location : .../drivers/net/wireless/wavelan*
|
||||
o in-line doc : .../drivers/net/wireless/wavelan.p.h
|
||||
o on-line doc :
|
||||
http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Wavelan.html
|
||||
|
||||
This is the driver for the ISA version of the first generation
|
||||
of the Wavelan, now discontinued. The device is 2 Mb/s, composed of a
|
||||
Intel 82586 controller and a Lucent Modem, and is NOT 802.11 compliant.
|
||||
The driver has been tested with the following hardware :
|
||||
o Wavelan ISA 915 MHz (full length ISA card)
|
||||
o Wavelan ISA 915 MHz 2.0 (half length ISA card)
|
||||
o Wavelan ISA 2.4 GHz (full length ISA card, fixed frequency)
|
||||
o Wavelan ISA 2.4 GHz 2.0 (half length ISA card, frequency selectable)
|
||||
o Above cards with the optional DES encryption feature
|
||||
|
||||
"wavelan_cs" driver (old Pcmcia Wavelan)
|
||||
-------------------
|
||||
o Config : Network device -> PCMCIA network ->
|
||||
Pcmcia Wireless LAN -> AT&T/Lucent WaveLAN
|
||||
o Location : .../drivers/net/pcmcia/wavelan*
|
||||
o in-line doc : .../drivers/net/pcmcia/wavelan_cs.h
|
||||
o on-line doc :
|
||||
http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/Wavelan.html
|
||||
|
||||
This is the driver for the PCMCIA version of the first
|
||||
generation of the Wavelan, now discontinued. The device is 2 Mb/s,
|
||||
composed of a Intel 82593 controller (totally different from the 82586)
|
||||
and a Lucent Modem, and NOT 802.11 compatible.
|
||||
The driver has been tested with the following hardware :
|
||||
o Wavelan Pcmcia 915 MHz 2.0 (Pcmcia card + separate
|
||||
modem/antenna block)
|
||||
o Wavelan Pcmcia 2.4 GHz 2.0 (Pcmcia card + separate
|
||||
modem/antenna block)
|
||||
|
||||
"wvlan_cs" driver (Wavelan IEEE, GPL)
|
||||
-----------------
|
||||
o Config : Not yet in kernel
|
||||
o Location : Pcmcia package 3.1.10+
|
||||
o on-line doc :
|
||||
http://web.archive.org/web/*/http://www.fasta.fh-dortmund.de/users/andy/wvlan/
|
||||
|
||||
This is the driver for the current generation of Wavelan IEEE,
|
||||
which is 802.11 compatible. Depending on version, it is 2 Mb/s or 11
|
||||
Mb/s, with or without encryption, all implemented in Lucent specific
|
||||
DSP (the Hermes).
|
||||
This is a GPL full source PCMCIA driver (ISA is just a Pcmcia
|
||||
card with ISA-Pcmcia bridge).
|
||||
|
||||
"wavelan2_cs" driver (Wavelan IEEE, binary)
|
||||
--------------------
|
||||
o Config : Not yet in kernel
|
||||
o Location : ftp://sourceforge.org/pcmcia/contrib/
|
||||
|
||||
This driver support exactly the same hardware as the previous
|
||||
driver, the main difference is that it is based on a binary library
|
||||
and supported by Lucent.
|
||||
|
||||
I hope it clears the confusion ;-)
|
||||
|
||||
Jean
|
@ -19,7 +19,7 @@ overall control of how tasks are to be run:
|
||||
|
||||
The pcpumask describes which processors will be used to execute work
|
||||
submitted to this instance in parallel. The cbcpumask defines which
|
||||
processors are allowed to use as the serialization callback processor.
|
||||
processors are allowed to be used as the serialization callback processor.
|
||||
The workqueue wq is where the work will actually be done; it should be
|
||||
a multithreaded queue, naturally.
|
||||
|
||||
@ -30,10 +30,10 @@ cpumasks this helper function can be used:
|
||||
|
||||
Note: Padata maintains two kinds of cpumasks internally. The user supplied
|
||||
cpumasks, submitted by padata_alloc/padata_alloc_possible and the 'usable'
|
||||
cpumasks. The usable cpumasks are always the subset of active cpus in the
|
||||
user supplied cpumasks, these are the cpumasks padata actually use. So
|
||||
it is legal to supply a cpumask to padata that contains offline cpus.
|
||||
Once a offline cpu in the user supplied cpumask comes online, padata
|
||||
cpumasks. The usable cpumasks are always a subset of active CPUs in the
|
||||
user supplied cpumasks; these are the cpumasks padata actually uses. So
|
||||
it is legal to supply a cpumask to padata that contains offline CPUs.
|
||||
Once an offline CPU in the user supplied cpumask comes online, padata
|
||||
is going to use it.
|
||||
|
||||
There are functions for enabling and disabling the instance:
|
||||
@ -44,7 +44,7 @@ There are functions for enabling and disabling the instance:
|
||||
These functions are setting or clearing the "PADATA_INIT" flag;
|
||||
if that flag is not set, other functions will refuse to work.
|
||||
padata_start returns zero on success (flag set) or -EINVAL if the
|
||||
padata cpumask contains no active cpu (flag not set).
|
||||
padata cpumask contains no active CPU (flag not set).
|
||||
padata_stop clears the flag and blocks until the padata instance
|
||||
is unused.
|
||||
|
||||
@ -63,11 +63,11 @@ done with great frequency.
|
||||
|
||||
It's possible to change both cpumasks of a padata instance with
|
||||
padata_set_cpumasks by specifying the cpumasks for parallel execution (pcpumask)
|
||||
and for the serial callback function (cbcpumask). padata_set_cpumask is to
|
||||
and for the serial callback function (cbcpumask). padata_set_cpumask is used to
|
||||
change just one of the cpumasks. Here cpumask_type is one of PADATA_CPU_SERIAL,
|
||||
PADATA_CPU_PARALLEL and cpumask specifies the new cpumask to use.
|
||||
To simply add or remove one cpu from a certain cpumask the functions
|
||||
padata_add_cpu/padata_remove_cpu are used. cpu specifies the cpu to add or
|
||||
To simply add or remove one CPU from a certain cpumask the functions
|
||||
padata_add_cpu/padata_remove_cpu are used. cpu specifies the CPU to add or
|
||||
remove and mask is one of PADATA_CPU_SERIAL, PADATA_CPU_PARALLEL.
|
||||
|
||||
If a user is interested in padata cpumask changes, he can register to
|
||||
@ -82,7 +82,7 @@ To unregister from that notifier:
|
||||
struct notifier_block *nblock);
|
||||
|
||||
The padata cpumask change notifier notifies about changes of the usable
|
||||
cpumasks, i.e. the subset of active cpus in the user supplied cpumask.
|
||||
cpumasks, i.e. the subset of active CPUs in the user supplied cpumask.
|
||||
|
||||
Padata calls the notifier chain with:
|
||||
|
||||
@ -92,7 +92,7 @@ Padata calls the notifier chain with:
|
||||
|
||||
Here cpumask_change_notifier is registered notifier, notification_mask
|
||||
is one of PADATA_CPU_SERIAL, PADATA_CPU_PARALLEL and cpumask is a pointer
|
||||
to a struct padata_cpumask that contains the new cpumask informations.
|
||||
to a struct padata_cpumask that contains the new cpumask information.
|
||||
|
||||
Actually submitting work to the padata instance requires the creation of a
|
||||
padata_priv structure:
|
||||
@ -104,7 +104,7 @@ padata_priv structure:
|
||||
};
|
||||
|
||||
This structure will almost certainly be embedded within some larger
|
||||
structure specific to the work to be done. Most its fields are private to
|
||||
structure specific to the work to be done. Most of its fields are private to
|
||||
padata, but the structure should be zeroed at initialisation time, and the
|
||||
parallel() and serial() functions should be provided. Those functions will
|
||||
be called in the process of getting the work done as we will see
|
||||
|
@ -1,4 +1,16 @@
|
||||
This file details changes in 2.6 which affect PCMCIA card driver authors:
|
||||
* pcmcia_request_io changes (as of 2.6.36)
|
||||
Instead of io_req_t, drivers are now requested to fill out
|
||||
struct pcmcia_device *p_dev->resource[0,1] for up to two ioport
|
||||
ranges. After a call to pcmcia_request_io(), the ports found there
|
||||
are reserved, after calling pcmcia_request_configuration(), they may
|
||||
be used.
|
||||
|
||||
* No dev_info_t, no cs_types.h (as of 2.6.36)
|
||||
dev_info_t and a few other typedefs are removed. No longer use them
|
||||
in PCMCIA device drivers. Also, do not include pcmcia/cs_types.h, as
|
||||
this file is gone.
|
||||
|
||||
* No dev_node_t (as of 2.6.35)
|
||||
There is no more need to fill out a "dev_node_t" structure.
|
||||
|
||||
|
@ -49,40 +49,13 @@ Table of Contents
|
||||
f) MDIO on GPIOs
|
||||
g) SPI busses
|
||||
|
||||
VII - Marvell Discovery mv64[345]6x System Controller chips
|
||||
1) The /system-controller node
|
||||
2) Child nodes of /system-controller
|
||||
a) Marvell Discovery MDIO bus
|
||||
b) Marvell Discovery ethernet controller
|
||||
c) Marvell Discovery PHY nodes
|
||||
d) Marvell Discovery SDMA nodes
|
||||
e) Marvell Discovery BRG nodes
|
||||
f) Marvell Discovery CUNIT nodes
|
||||
g) Marvell Discovery MPSCROUTING nodes
|
||||
h) Marvell Discovery MPSCINTR nodes
|
||||
i) Marvell Discovery MPSC nodes
|
||||
j) Marvell Discovery Watch Dog Timer nodes
|
||||
k) Marvell Discovery I2C nodes
|
||||
l) Marvell Discovery PIC (Programmable Interrupt Controller) nodes
|
||||
m) Marvell Discovery MPP (Multipurpose Pins) multiplexing nodes
|
||||
n) Marvell Discovery GPP (General Purpose Pins) nodes
|
||||
o) Marvell Discovery PCI host bridge node
|
||||
p) Marvell Discovery CPU Error nodes
|
||||
q) Marvell Discovery SRAM Controller nodes
|
||||
r) Marvell Discovery PCI Error Handler nodes
|
||||
s) Marvell Discovery Memory Controller nodes
|
||||
|
||||
VIII - Specifying interrupt information for devices
|
||||
VII - Specifying interrupt information for devices
|
||||
1) interrupts property
|
||||
2) interrupt-parent property
|
||||
3) OpenPIC Interrupt Controllers
|
||||
4) ISA Interrupt Controllers
|
||||
|
||||
IX - Specifying GPIO information for devices
|
||||
1) gpios property
|
||||
2) gpio-controller nodes
|
||||
|
||||
X - Specifying device power management information (sleep property)
|
||||
VIII - Specifying device power management information (sleep property)
|
||||
|
||||
Appendix A - Sample SOC node for MPC8540
|
||||
|
||||
|
@ -4,10 +4,17 @@ The Freescale DIU is a LCD controller, with proper hardware, it can also
|
||||
drive DVI monitors.
|
||||
|
||||
Required properties:
|
||||
- compatible : should be "fsl-diu".
|
||||
- compatible : should be "fsl,diu" or "fsl,mpc5121-diu".
|
||||
- reg : should contain at least address and length of the DIU register
|
||||
set.
|
||||
- Interrupts : one DIU interrupt should be describe here.
|
||||
- interrupts : one DIU interrupt should be described here.
|
||||
- interrupt-parent : the phandle for the interrupt controller that
|
||||
services interrupts for this device.
|
||||
|
||||
Optional properties:
|
||||
- edid : verbatim EDID data block describing attached display.
|
||||
Data from the detailed timing descriptor will be used to
|
||||
program the display controller.
|
||||
|
||||
Example (MPC8610HPCD):
|
||||
display@2c000 {
|
||||
@ -16,3 +23,12 @@ Example (MPC8610HPCD):
|
||||
interrupts = <72 2>;
|
||||
interrupt-parent = <&mpic>;
|
||||
};
|
||||
|
||||
Example for MPC5121:
|
||||
display@2100 {
|
||||
compatible = "fsl,mpc5121-diu";
|
||||
reg = <0x2100 0x100>;
|
||||
interrupts = <64 0x8>;
|
||||
interrupt-parent = <&ipic>;
|
||||
edid = [edid-data];
|
||||
};
|
||||
|
@ -14,6 +14,8 @@ Required properties:
|
||||
reports inverted write-protect state;
|
||||
- sdhci,1-bit-only : (optional) specifies that a controller can
|
||||
only handle 1-bit data transfers.
|
||||
- sdhci,auto-cmd12: (optional) specifies that a controller can
|
||||
only handle auto CMD12.
|
||||
|
||||
Example:
|
||||
|
||||
|
@ -20,6 +20,7 @@ Recommended properties :
|
||||
- fsl,preserve-clocking : boolean; if defined, the clock settings
|
||||
from the bootloader are preserved (not touched).
|
||||
- clock-frequency : desired I2C bus clock frequency in Hz.
|
||||
- fsl,timeout : I2C bus timeout in microseconds.
|
||||
|
||||
Examples :
|
||||
|
||||
@ -59,4 +60,5 @@ Examples :
|
||||
interrupts = <43 2>;
|
||||
interrupt-parent = <&mpic>;
|
||||
clock-frequency = <400000>;
|
||||
fsl,timeout = <10000>;
|
||||
};
|
||||
|
@ -560,7 +560,7 @@ The proper channel for reporting bugs is either through the Linux OS
|
||||
distribution company that provided your OS or by posting issues to the
|
||||
PowerPC development mailing list at:
|
||||
|
||||
linuxppc-dev@ozlabs.org
|
||||
linuxppc-dev@lists.ozlabs.org
|
||||
|
||||
This request is to provide a documented and searchable public exchange
|
||||
of the problems and solutions surrounding this driver for the benefit of
|
||||
|
139
Documentation/scsi/scsi-parameters.txt
Normal file
139
Documentation/scsi/scsi-parameters.txt
Normal file
@ -0,0 +1,139 @@
|
||||
SCSI Kernel Parameters
|
||||
~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
See Documentation/kernel-parameters.txt for general information on
|
||||
specifying module parameters.
|
||||
|
||||
This document may not be entirely up to date and comprehensive. The command
|
||||
"modinfo -p ${modulename}" shows a current list of all parameters of a loadable
|
||||
module. Loadable modules, after being loaded into the running kernel, also
|
||||
reveal their parameters in /sys/module/${modulename}/parameters/. Some of these
|
||||
parameters may be changed at runtime by the command
|
||||
"echo -n ${value} > /sys/module/${modulename}/parameters/${parm}".
|
||||
|
||||
|
||||
advansys= [HW,SCSI]
|
||||
See header of drivers/scsi/advansys.c.
|
||||
|
||||
aha152x= [HW,SCSI]
|
||||
See Documentation/scsi/aha152x.txt.
|
||||
|
||||
aha1542= [HW,SCSI]
|
||||
Format: <portbase>[,<buson>,<busoff>[,<dmaspeed>]]
|
||||
|
||||
aic7xxx= [HW,SCSI]
|
||||
See Documentation/scsi/aic7xxx.txt.
|
||||
|
||||
aic79xx= [HW,SCSI]
|
||||
See Documentation/scsi/aic79xx.txt.
|
||||
|
||||
atascsi= [HW,SCSI] Atari SCSI
|
||||
|
||||
BusLogic= [HW,SCSI]
|
||||
See drivers/scsi/BusLogic.c, comment before function
|
||||
BusLogic_ParseDriverOptions().
|
||||
|
||||
dtc3181e= [HW,SCSI]
|
||||
|
||||
eata= [HW,SCSI]
|
||||
|
||||
fd_mcs= [HW,SCSI]
|
||||
See header of drivers/scsi/fd_mcs.c.
|
||||
|
||||
fdomain= [HW,SCSI]
|
||||
See header of drivers/scsi/fdomain.c.
|
||||
|
||||
gdth= [HW,SCSI]
|
||||
See header of drivers/scsi/gdth.c.
|
||||
|
||||
gvp11= [HW,SCSI]
|
||||
|
||||
ibmmcascsi= [HW,MCA,SCSI] IBM MicroChannel SCSI adapter
|
||||
See Documentation/mca.txt.
|
||||
|
||||
in2000= [HW,SCSI]
|
||||
See header of drivers/scsi/in2000.c.
|
||||
|
||||
ips= [HW,SCSI] Adaptec / IBM ServeRAID controller
|
||||
See header of drivers/scsi/ips.c.
|
||||
|
||||
mac5380= [HW,SCSI] Format:
|
||||
<can_queue>,<cmd_per_lun>,<sg_tablesize>,<hostid>,<use_tags>
|
||||
|
||||
max_luns= [SCSI] Maximum number of LUNs to probe.
|
||||
Should be between 1 and 2^32-1.
|
||||
|
||||
max_report_luns=
|
||||
[SCSI] Maximum number of LUNs received.
|
||||
Should be between 1 and 16384.
|
||||
|
||||
NCR_D700= [HW,SCSI]
|
||||
See header of drivers/scsi/NCR_D700.c.
|
||||
|
||||
ncr5380= [HW,SCSI]
|
||||
|
||||
ncr53c400= [HW,SCSI]
|
||||
|
||||
ncr53c400a= [HW,SCSI]
|
||||
|
||||
ncr53c406a= [HW,SCSI]
|
||||
|
||||
ncr53c8xx= [HW,SCSI]
|
||||
|
||||
nodisconnect [HW,SCSI,M68K] Disables SCSI disconnects.
|
||||
|
||||
osst= [HW,SCSI] SCSI Tape Driver
|
||||
Format: <buffer_size>,<write_threshold>
|
||||
See also Documentation/scsi/st.txt.
|
||||
|
||||
pas16= [HW,SCSI]
|
||||
See header of drivers/scsi/pas16.c.
|
||||
|
||||
scsi_debug_*= [SCSI]
|
||||
See drivers/scsi/scsi_debug.c.
|
||||
|
||||
scsi_default_dev_flags=
|
||||
[SCSI] SCSI default device flags
|
||||
Format: <integer>
|
||||
|
||||
scsi_dev_flags= [SCSI] Black/white list entry for vendor and model
|
||||
Format: <vendor>:<model>:<flags>
|
||||
(flags are integer value)
|
||||
|
||||
scsi_logging_level= [SCSI] a bit mask of logging levels
|
||||
See drivers/scsi/scsi_logging.h for bits. Also
|
||||
settable via sysctl at dev.scsi.logging_level
|
||||
(/proc/sys/dev/scsi/logging_level).
|
||||
There is also a nice 'scsi_logging_level' script in the
|
||||
S390-tools package, available for download at
|
||||
http://www-128.ibm.com/developerworks/linux/linux390/s390-tools-1.5.4.html
|
||||
|
||||
scsi_mod.scan= [SCSI] sync (default) scans SCSI busses as they are
|
||||
discovered. async scans them in kernel threads,
|
||||
allowing boot to proceed. none ignores them, expecting
|
||||
user space to do the scan.
|
||||
|
||||
sim710= [SCSI,HW]
|
||||
See header of drivers/scsi/sim710.c.
|
||||
|
||||
st= [HW,SCSI] SCSI tape parameters (buffers, etc.)
|
||||
See Documentation/scsi/st.txt.
|
||||
|
||||
sym53c416= [HW,SCSI]
|
||||
See header of drivers/scsi/sym53c416.c.
|
||||
|
||||
t128= [HW,SCSI]
|
||||
See header of drivers/scsi/t128.c.
|
||||
|
||||
tmscsim= [HW,SCSI]
|
||||
See comment before function dc390_setup() in
|
||||
drivers/scsi/tmscsim.c.
|
||||
|
||||
u14-34f= [HW,SCSI] UltraStor 14F/34F SCSI host adapter
|
||||
See header of drivers/scsi/u14-34f.c.
|
||||
|
||||
wd33c93= [HW,SCSI]
|
||||
See header of drivers/scsi/wd33c93.c.
|
||||
|
||||
wd7000= [HW,SCSI]
|
||||
See header of drivers/scsi/wd7000.c.
|
@ -1,322 +0,0 @@
|
||||
====================================
|
||||
SLOW WORK ITEM EXECUTION THREAD POOL
|
||||
====================================
|
||||
|
||||
By: David Howells <dhowells@redhat.com>
|
||||
|
||||
The slow work item execution thread pool is a pool of threads for performing
|
||||
things that take a relatively long time, such as making mkdir calls.
|
||||
Typically, when processing something, these items will spend a lot of time
|
||||
blocking a thread on I/O, thus making that thread unavailable for doing other
|
||||
work.
|
||||
|
||||
The standard workqueue model is unsuitable for this class of work item as that
|
||||
limits the owner to a single thread or a single thread per CPU. For some
|
||||
tasks, however, more threads - or fewer - are required.
|
||||
|
||||
There is just one pool per system. It contains no threads unless something
|
||||
wants to use it - and that something must register its interest first. When
|
||||
the pool is active, the number of threads it contains is dynamic, varying
|
||||
between a maximum and minimum setting, depending on the load.
|
||||
|
||||
|
||||
====================
|
||||
CLASSES OF WORK ITEM
|
||||
====================
|
||||
|
||||
This pool support two classes of work items:
|
||||
|
||||
(*) Slow work items.
|
||||
|
||||
(*) Very slow work items.
|
||||
|
||||
The former are expected to finish much quicker than the latter.
|
||||
|
||||
An operation of the very slow class may do a batch combination of several
|
||||
lookups, mkdirs, and a create for instance.
|
||||
|
||||
An operation of the ordinarily slow class may, for example, write stuff or
|
||||
expand files, provided the time taken to do so isn't too long.
|
||||
|
||||
Operations of both types may sleep during execution, thus tying up the thread
|
||||
loaned to it.
|
||||
|
||||
A further class of work item is available, based on the slow work item class:
|
||||
|
||||
(*) Delayed slow work items.
|
||||
|
||||
These are slow work items that have a timer to defer queueing of the item for
|
||||
a while.
|
||||
|
||||
|
||||
THREAD-TO-CLASS ALLOCATION
|
||||
--------------------------
|
||||
|
||||
Not all the threads in the pool are available to work on very slow work items.
|
||||
The number will be between one and one fewer than the number of active threads.
|
||||
This is configurable (see the "Pool Configuration" section).
|
||||
|
||||
All the threads are available to work on ordinarily slow work items, but a
|
||||
percentage of the threads will prefer to work on very slow work items.
|
||||
|
||||
The configuration ensures that at least one thread will be available to work on
|
||||
very slow work items, and at least one thread will be available that won't work
|
||||
on very slow work items at all.
|
||||
|
||||
|
||||
=====================
|
||||
USING SLOW WORK ITEMS
|
||||
=====================
|
||||
|
||||
Firstly, a module or subsystem wanting to make use of slow work items must
|
||||
register its interest:
|
||||
|
||||
int ret = slow_work_register_user(struct module *module);
|
||||
|
||||
This will return 0 if successful, or a -ve error upon failure. The module
|
||||
pointer should be the module interested in using this facility (almost
|
||||
certainly THIS_MODULE).
|
||||
|
||||
|
||||
Slow work items may then be set up by:
|
||||
|
||||
(1) Declaring a slow_work struct type variable:
|
||||
|
||||
#include <linux/slow-work.h>
|
||||
|
||||
struct slow_work myitem;
|
||||
|
||||
(2) Declaring the operations to be used for this item:
|
||||
|
||||
struct slow_work_ops myitem_ops = {
|
||||
.get_ref = myitem_get_ref,
|
||||
.put_ref = myitem_put_ref,
|
||||
.execute = myitem_execute,
|
||||
};
|
||||
|
||||
[*] For a description of the ops, see section "Item Operations".
|
||||
|
||||
(3) Initialising the item:
|
||||
|
||||
slow_work_init(&myitem, &myitem_ops);
|
||||
|
||||
or:
|
||||
|
||||
delayed_slow_work_init(&myitem, &myitem_ops);
|
||||
|
||||
or:
|
||||
|
||||
vslow_work_init(&myitem, &myitem_ops);
|
||||
|
||||
depending on its class.
|
||||
|
||||
A suitably set up work item can then be enqueued for processing:
|
||||
|
||||
int ret = slow_work_enqueue(&myitem);
|
||||
|
||||
This will return a -ve error if the thread pool is unable to gain a reference
|
||||
on the item, 0 otherwise, or (for delayed work):
|
||||
|
||||
int ret = delayed_slow_work_enqueue(&myitem, my_jiffy_delay);
|
||||
|
||||
|
||||
The items are reference counted, so there ought to be no need for a flush
|
||||
operation. But as the reference counting is optional, means to cancel
|
||||
existing work items are also included:
|
||||
|
||||
cancel_slow_work(&myitem);
|
||||
cancel_delayed_slow_work(&myitem);
|
||||
|
||||
can be used to cancel pending work. The above cancel function waits for
|
||||
existing work to have been executed (or prevent execution of them, depending
|
||||
on timing).
|
||||
|
||||
|
||||
When all a module's slow work items have been processed, and the
|
||||
module has no further interest in the facility, it should unregister its
|
||||
interest:
|
||||
|
||||
slow_work_unregister_user(struct module *module);
|
||||
|
||||
The module pointer is used to wait for all outstanding work items for that
|
||||
module before completing the unregistration. This prevents the put_ref() code
|
||||
from being taken away before it completes. module should almost certainly be
|
||||
THIS_MODULE.
|
||||
|
||||
|
||||
================
|
||||
HELPER FUNCTIONS
|
||||
================
|
||||
|
||||
The slow-work facility provides a function by which it can be determined
|
||||
whether or not an item is queued for later execution:
|
||||
|
||||
bool queued = slow_work_is_queued(struct slow_work *work);
|
||||
|
||||
If it returns false, then the item is not on the queue (it may be executing
|
||||
with a requeue pending). This can be used to work out whether an item on which
|
||||
another depends is on the queue, thus allowing a dependent item to be queued
|
||||
after it.
|
||||
|
||||
If the above shows an item on which another depends not to be queued, then the
|
||||
owner of the dependent item might need to wait. However, to avoid locking up
|
||||
the threads unnecessarily be sleeping in them, it can make sense under some
|
||||
circumstances to return the work item to the queue, thus deferring it until
|
||||
some other items have had a chance to make use of the yielded thread.
|
||||
|
||||
To yield a thread and defer an item, the work function should simply enqueue
|
||||
the work item again and return. However, this doesn't work if there's nothing
|
||||
actually on the queue, as the thread just vacated will jump straight back into
|
||||
the item's work function, thus busy waiting on a CPU.
|
||||
|
||||
Instead, the item should use the thread to wait for the dependency to go away,
|
||||
but rather than using schedule() or schedule_timeout() to sleep, it should use
|
||||
the following function:
|
||||
|
||||
bool requeue = slow_work_sleep_till_thread_needed(
|
||||
struct slow_work *work,
|
||||
signed long *_timeout);
|
||||
|
||||
This will add a second wait and then sleep, such that it will be woken up if
|
||||
either something appears on the queue that could usefully make use of the
|
||||
thread - and behind which this item can be queued, or if the event the caller
|
||||
set up to wait for happens. True will be returned if something else appeared
|
||||
on the queue and this work function should perhaps return, of false if
|
||||
something else woke it up. The timeout is as for schedule_timeout().
|
||||
|
||||
For example:
|
||||
|
||||
wq = bit_waitqueue(&my_flags, MY_BIT);
|
||||
init_wait(&wait);
|
||||
requeue = false;
|
||||
do {
|
||||
prepare_to_wait(wq, &wait, TASK_UNINTERRUPTIBLE);
|
||||
if (!test_bit(MY_BIT, &my_flags))
|
||||
break;
|
||||
requeue = slow_work_sleep_till_thread_needed(&my_work,
|
||||
&timeout);
|
||||
} while (timeout > 0 && !requeue);
|
||||
finish_wait(wq, &wait);
|
||||
if (!test_bit(MY_BIT, &my_flags)
|
||||
goto do_my_thing;
|
||||
if (requeue)
|
||||
return; // to slow_work
|
||||
|
||||
|
||||
===============
|
||||
ITEM OPERATIONS
|
||||
===============
|
||||
|
||||
Each work item requires a table of operations of type struct slow_work_ops.
|
||||
Only ->execute() is required; the getting and putting of a reference and the
|
||||
describing of an item are all optional.
|
||||
|
||||
(*) Get a reference on an item:
|
||||
|
||||
int (*get_ref)(struct slow_work *work);
|
||||
|
||||
This allows the thread pool to attempt to pin an item by getting a
|
||||
reference on it. This function should return 0 if the reference was
|
||||
granted, or a -ve error otherwise. If an error is returned,
|
||||
slow_work_enqueue() will fail.
|
||||
|
||||
The reference is held whilst the item is queued and whilst it is being
|
||||
executed. The item may then be requeued with the same reference held, or
|
||||
the reference will be released.
|
||||
|
||||
(*) Release a reference on an item:
|
||||
|
||||
void (*put_ref)(struct slow_work *work);
|
||||
|
||||
This allows the thread pool to unpin an item by releasing the reference on
|
||||
it. The thread pool will not touch the item again once this has been
|
||||
called.
|
||||
|
||||
(*) Execute an item:
|
||||
|
||||
void (*execute)(struct slow_work *work);
|
||||
|
||||
This should perform the work required of the item. It may sleep, it may
|
||||
perform disk I/O and it may wait for locks.
|
||||
|
||||
(*) View an item through /proc:
|
||||
|
||||
void (*desc)(struct slow_work *work, struct seq_file *m);
|
||||
|
||||
If supplied, this should print to 'm' a small string describing the work
|
||||
the item is to do. This should be no more than about 40 characters, and
|
||||
shouldn't include a newline character.
|
||||
|
||||
See the 'Viewing executing and queued items' section below.
|
||||
|
||||
|
||||
==================
|
||||
POOL CONFIGURATION
|
||||
==================
|
||||
|
||||
The slow-work thread pool has a number of configurables:
|
||||
|
||||
(*) /proc/sys/kernel/slow-work/min-threads
|
||||
|
||||
The minimum number of threads that should be in the pool whilst it is in
|
||||
use. This may be anywhere between 2 and max-threads.
|
||||
|
||||
(*) /proc/sys/kernel/slow-work/max-threads
|
||||
|
||||
The maximum number of threads that should in the pool. This may be
|
||||
anywhere between min-threads and 255 or NR_CPUS * 2, whichever is greater.
|
||||
|
||||
(*) /proc/sys/kernel/slow-work/vslow-percentage
|
||||
|
||||
The percentage of active threads in the pool that may be used to execute
|
||||
very slow work items. This may be between 1 and 99. The resultant number
|
||||
is bounded to between 1 and one fewer than the number of active threads.
|
||||
This ensures there is always at least one thread that can process very
|
||||
slow work items, and always at least one thread that won't.
|
||||
|
||||
|
||||
==================================
|
||||
VIEWING EXECUTING AND QUEUED ITEMS
|
||||
==================================
|
||||
|
||||
If CONFIG_SLOW_WORK_DEBUG is enabled, a debugfs file is made available:
|
||||
|
||||
/sys/kernel/debug/slow_work/runqueue
|
||||
|
||||
through which the list of work items being executed and the queues of items to
|
||||
be executed may be viewed. The owner of a work item is given the chance to
|
||||
add some information of its own.
|
||||
|
||||
The contents look something like the following:
|
||||
|
||||
THR PID ITEM ADDR FL MARK DESC
|
||||
=== ===== ================ == ===== ==========
|
||||
0 3005 ffff880023f52348 a 952ms FSC: OBJ17d3: LOOK
|
||||
1 3006 ffff880024e33668 2 160ms FSC: OBJ17e5 OP60d3b: Write1/Store fl=2
|
||||
2 3165 ffff8800296dd180 a 424ms FSC: OBJ17e4: LOOK
|
||||
3 4089 ffff8800262c8d78 a 212ms FSC: OBJ17ea: CRTN
|
||||
4 4090 ffff88002792bed8 2 388ms FSC: OBJ17e8 OP60d36: Write1/Store fl=2
|
||||
5 4092 ffff88002a0ef308 2 388ms FSC: OBJ17e7 OP60d2e: Write1/Store fl=2
|
||||
6 4094 ffff88002abaf4b8 2 132ms FSC: OBJ17e2 OP60d4e: Write1/Store fl=2
|
||||
7 4095 ffff88002bb188e0 a 388ms FSC: OBJ17e9: CRTN
|
||||
vsq - ffff880023d99668 1 308ms FSC: OBJ17e0 OP60f91: Write1/EnQ fl=2
|
||||
vsq - ffff8800295d1740 1 212ms FSC: OBJ16be OP4d4b6: Write1/EnQ fl=2
|
||||
vsq - ffff880025ba3308 1 160ms FSC: OBJ179a OP58dec: Write1/EnQ fl=2
|
||||
vsq - ffff880024ec83e0 1 160ms FSC: OBJ17ae OP599f2: Write1/EnQ fl=2
|
||||
vsq - ffff880026618e00 1 160ms FSC: OBJ17e6 OP60d33: Write1/EnQ fl=2
|
||||
vsq - ffff880025a2a4b8 1 132ms FSC: OBJ16a2 OP4d583: Write1/EnQ fl=2
|
||||
vsq - ffff880023cbe6d8 9 212ms FSC: OBJ17eb: LOOK
|
||||
vsq - ffff880024d37590 9 212ms FSC: OBJ17ec: LOOK
|
||||
vsq - ffff880027746cb0 9 212ms FSC: OBJ17ed: LOOK
|
||||
vsq - ffff880024d37ae8 9 212ms FSC: OBJ17ee: LOOK
|
||||
vsq - ffff880024d37cb0 9 212ms FSC: OBJ17ef: LOOK
|
||||
vsq - ffff880025036550 9 212ms FSC: OBJ17f0: LOOK
|
||||
vsq - ffff8800250368e0 9 212ms FSC: OBJ17f1: LOOK
|
||||
vsq - ffff880025036aa8 9 212ms FSC: OBJ17f2: LOOK
|
||||
|
||||
In the 'THR' column, executing items show the thread they're occupying and
|
||||
queued threads indicate which queue they're on. 'PID' shows the process ID of
|
||||
a slow-work thread that's executing something. 'FL' shows the work item flags.
|
||||
'MARK' indicates how long since an item was queued or began executing. Lastly,
|
||||
the 'DESC' column permits the owner of an item to give some information.
|
||||
|
@ -83,8 +83,8 @@ ALC269
|
||||
======
|
||||
basic Basic preset
|
||||
quanta Quanta FL1
|
||||
eeepc-p703 ASUS Eeepc P703 P900A
|
||||
eeepc-p901 ASUS Eeepc P901 S101
|
||||
laptop-amic Laptops with analog-mic input
|
||||
laptop-dmic Laptops with digital-mic input
|
||||
fujitsu FSC Amilo
|
||||
lifebook Fujitsu Lifebook S6420
|
||||
auto auto-config reading BIOS (default)
|
||||
@ -109,11 +109,18 @@ ALC662/663/272
|
||||
asus-mode4 ASUS
|
||||
asus-mode5 ASUS
|
||||
asus-mode6 ASUS
|
||||
asus-mode7 ASUS
|
||||
asus-mode8 ASUS
|
||||
dell Dell with ALC272
|
||||
dell-zm1 Dell ZM1 with ALC272
|
||||
samsung-nc10 Samsung NC10 mini notebook
|
||||
auto auto-config reading BIOS (default)
|
||||
|
||||
ALC680
|
||||
======
|
||||
base Base model (ASUS NX90)
|
||||
auto auto-config reading BIOS (default)
|
||||
|
||||
ALC882/883/885/888/889
|
||||
======================
|
||||
3stack-dig 3-jack with SPDIF I/O
|
||||
@ -282,6 +289,7 @@ Conexant 5051
|
||||
hp HP Spartan laptop
|
||||
hp-dv6736 HP dv6736
|
||||
hp-f700 HP Compaq Presario F700
|
||||
ideapad Lenovo IdeaPad laptop
|
||||
lenovo-x200 Lenovo X200 laptop
|
||||
toshiba Toshiba Satellite M300
|
||||
|
||||
@ -289,8 +297,10 @@ Conexant 5066
|
||||
=============
|
||||
laptop Basic Laptop config (default)
|
||||
dell-laptop Dell laptops
|
||||
dell-vostro Dell Vostro
|
||||
olpc-xo-1_5 OLPC XO 1.5
|
||||
ideapad Lenovo IdeaPad U150
|
||||
thinkpad Lenovo Thinkpad
|
||||
|
||||
STAC9200
|
||||
========
|
||||
@ -398,6 +408,7 @@ STAC92HD83*
|
||||
mic-ref Reference board with power management for ports
|
||||
dell-s14 Dell laptop
|
||||
hp HP laptops with (inverted) mute-LED
|
||||
hp-dv7-4000 HP dv-7 4000
|
||||
auto BIOS setup (default)
|
||||
|
||||
STAC9872
|
||||
@ -410,3 +421,7 @@ Cirrus Logic CS4206/4207
|
||||
mbp55 MacBook Pro 5,5
|
||||
imac27 IMac 27 Inch
|
||||
auto BIOS setup (default)
|
||||
|
||||
VIA VT17xx/VT18xx/VT20xx
|
||||
========================
|
||||
auto BIOS setup (default)
|
||||
|
@ -103,6 +103,8 @@ card*/pcm*/xrun_debug
|
||||
bit 2 = Enable additional jiffies check
|
||||
bit 3 = Log hwptr update at each period interrupt
|
||||
bit 4 = Log hwptr update at each snd_pcm_update_hw_ptr()
|
||||
bit 5 = Show last 10 positions on error
|
||||
bit 6 = Do above only once
|
||||
|
||||
When the bit 0 is set, the driver will show the messages to
|
||||
kernel log when an xrun is detected. The debug message is
|
||||
@ -122,6 +124,12 @@ card*/pcm*/xrun_debug
|
||||
Bits 3 and 4 are for logging the hwptr records. Note that
|
||||
these will give flood of kernel messages.
|
||||
|
||||
When bit 5 is set, the driver logs the last 10 xrun errors and
|
||||
the proc file shows each jiffies, position, period_size,
|
||||
buffer_size, old_hw_ptr, and hw_ptr_base values.
|
||||
|
||||
When bit 6 is set, the full xrun log is shown only once.
|
||||
|
||||
card*/pcm*/sub*/info
|
||||
The general information of this PCM sub-stream.
|
||||
|
||||
|
135
Documentation/sound/alsa/alsa-parameters.txt
Normal file
135
Documentation/sound/alsa/alsa-parameters.txt
Normal file
@ -0,0 +1,135 @@
|
||||
ALSA Kernel Parameters
|
||||
~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
See Documentation/kernel-parameters.txt for general information on
|
||||
specifying module parameters.
|
||||
|
||||
This document may not be entirely up to date and comprehensive. The command
|
||||
"modinfo -p ${modulename}" shows a current list of all parameters of a loadable
|
||||
module. Loadable modules, after being loaded into the running kernel, also
|
||||
reveal their parameters in /sys/module/${modulename}/parameters/. Some of these
|
||||
parameters may be changed at runtime by the command
|
||||
"echo -n ${value} > /sys/module/${modulename}/parameters/${parm}".
|
||||
|
||||
|
||||
snd-ad1816a= [HW,ALSA]
|
||||
|
||||
snd-ad1848= [HW,ALSA]
|
||||
|
||||
snd-ali5451= [HW,ALSA]
|
||||
|
||||
snd-als100= [HW,ALSA]
|
||||
|
||||
snd-als4000= [HW,ALSA]
|
||||
|
||||
snd-azt2320= [HW,ALSA]
|
||||
|
||||
snd-cmi8330= [HW,ALSA]
|
||||
|
||||
snd-cmipci= [HW,ALSA]
|
||||
|
||||
snd-cs4231= [HW,ALSA]
|
||||
|
||||
snd-cs4232= [HW,ALSA]
|
||||
|
||||
snd-cs4236= [HW,ALSA]
|
||||
|
||||
snd-cs4281= [HW,ALSA]
|
||||
|
||||
snd-cs46xx= [HW,ALSA]
|
||||
|
||||
snd-dt019x= [HW,ALSA]
|
||||
|
||||
snd-dummy= [HW,ALSA]
|
||||
|
||||
snd-emu10k1= [HW,ALSA]
|
||||
|
||||
snd-ens1370= [HW,ALSA]
|
||||
|
||||
snd-ens1371= [HW,ALSA]
|
||||
|
||||
snd-es968= [HW,ALSA]
|
||||
|
||||
snd-es1688= [HW,ALSA]
|
||||
|
||||
snd-es18xx= [HW,ALSA]
|
||||
|
||||
snd-es1938= [HW,ALSA]
|
||||
|
||||
snd-es1968= [HW,ALSA]
|
||||
|
||||
snd-fm801= [HW,ALSA]
|
||||
|
||||
snd-gusclassic= [HW,ALSA]
|
||||
|
||||
snd-gusextreme= [HW,ALSA]
|
||||
|
||||
snd-gusmax= [HW,ALSA]
|
||||
|
||||
snd-hdsp= [HW,ALSA]
|
||||
|
||||
snd-ice1712= [HW,ALSA]
|
||||
|
||||
snd-intel8x0= [HW,ALSA]
|
||||
|
||||
snd-interwave= [HW,ALSA]
|
||||
|
||||
snd-interwave-stb=
|
||||
[HW,ALSA]
|
||||
|
||||
snd-korg1212= [HW,ALSA]
|
||||
|
||||
snd-maestro3= [HW,ALSA]
|
||||
|
||||
snd-mpu401= [HW,ALSA]
|
||||
|
||||
snd-mtpav= [HW,ALSA]
|
||||
|
||||
snd-nm256= [HW,ALSA]
|
||||
|
||||
snd-opl3sa2= [HW,ALSA]
|
||||
|
||||
snd-opti92x-ad1848=
|
||||
[HW,ALSA]
|
||||
|
||||
snd-opti92x-cs4231=
|
||||
[HW,ALSA]
|
||||
|
||||
snd-opti93x= [HW,ALSA]
|
||||
|
||||
snd-pmac= [HW,ALSA]
|
||||
|
||||
snd-rme32= [HW,ALSA]
|
||||
|
||||
snd-rme96= [HW,ALSA]
|
||||
|
||||
snd-rme9652= [HW,ALSA]
|
||||
|
||||
snd-sb8= [HW,ALSA]
|
||||
|
||||
snd-sb16= [HW,ALSA]
|
||||
|
||||
snd-sbawe= [HW,ALSA]
|
||||
|
||||
snd-serial= [HW,ALSA]
|
||||
|
||||
snd-sgalaxy= [HW,ALSA]
|
||||
|
||||
snd-sonicvibes= [HW,ALSA]
|
||||
|
||||
snd-sun-amd7930=
|
||||
[HW,ALSA]
|
||||
|
||||
snd-sun-cs4231= [HW,ALSA]
|
||||
|
||||
snd-trident= [HW,ALSA]
|
||||
|
||||
snd-usb-audio= [HW,ALSA,USB]
|
||||
|
||||
snd-via82xx= [HW,ALSA]
|
||||
|
||||
snd-virmidi= [HW,ALSA]
|
||||
|
||||
snd-wavefront= [HW,ALSA]
|
||||
|
||||
snd-ymfpci= [HW,ALSA]
|
51
Documentation/sound/oss/oss-parameters.txt
Normal file
51
Documentation/sound/oss/oss-parameters.txt
Normal file
@ -0,0 +1,51 @@
|
||||
OSS Kernel Parameters
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
See Documentation/kernel-parameters.txt for general information on
|
||||
specifying module parameters.
|
||||
|
||||
This document may not be entirely up to date and comprehensive. The command
|
||||
"modinfo -p ${modulename}" shows a current list of all parameters of a loadable
|
||||
module. Loadable modules, after being loaded into the running kernel, also
|
||||
reveal their parameters in /sys/module/${modulename}/parameters/. Some of these
|
||||
parameters may be changed at runtime by the command
|
||||
"echo -n ${value} > /sys/module/${modulename}/parameters/${parm}".
|
||||
|
||||
|
||||
ad1848= [HW,OSS]
|
||||
Format: <io>,<irq>,<dma>,<dma2>,<type>
|
||||
|
||||
aedsp16= [HW,OSS] Audio Excel DSP 16
|
||||
Format: <io>,<irq>,<dma>,<mss_io>,<mpu_io>,<mpu_irq>
|
||||
See also header of sound/oss/aedsp16.c.
|
||||
|
||||
dmasound= [HW,OSS] Sound subsystem buffers
|
||||
|
||||
mpu401= [HW,OSS]
|
||||
Format: <io>,<irq>
|
||||
|
||||
opl3= [HW,OSS]
|
||||
Format: <io>
|
||||
|
||||
pas2= [HW,OSS] Format:
|
||||
<io>,<irq>,<dma>,<dma16>,<sb_io>,<sb_irq>,<sb_dma>,<sb_dma16>
|
||||
|
||||
pss= [HW,OSS] Personal Sound System (ECHO ESC614)
|
||||
Format:
|
||||
<io>,<mss_io>,<mss_irq>,<mss_dma>,<mpu_io>,<mpu_irq>
|
||||
|
||||
sscape= [HW,OSS]
|
||||
Format: <io>,<irq>,<dma>,<mpu_io>,<mpu_irq>
|
||||
|
||||
trix= [HW,OSS] MediaTrix AudioTrix Pro
|
||||
Format:
|
||||
<io>,<irq>,<dma>,<dma2>,<sb_io>,<sb_irq>,<sb_dma>,<mpu_io>,<mpu_irq>
|
||||
|
||||
uart401= [HW,OSS]
|
||||
Format: <io>,<irq>
|
||||
|
||||
uart6850= [HW,OSS]
|
||||
Format: <io>,<irq>
|
||||
|
||||
waveartist= [HW,OSS]
|
||||
Format: <io>,<irq>,<dma>,<dma2>
|
@ -511,7 +511,7 @@ information may not be desired.
|
||||
If this is set to non-zero, this information is shown whenever the
|
||||
OOM killer actually kills a memory-hogging task.
|
||||
|
||||
The default value is 0.
|
||||
The default value is 1 (enabled).
|
||||
|
||||
==============================================================
|
||||
|
||||
|
105
Documentation/timers/timers-howto.txt
Normal file
105
Documentation/timers/timers-howto.txt
Normal file
@ -0,0 +1,105 @@
|
||||
delays - Information on the various kernel delay / sleep mechanisms
|
||||
-------------------------------------------------------------------
|
||||
|
||||
This document seeks to answer the common question: "What is the
|
||||
RightWay (TM) to insert a delay?"
|
||||
|
||||
This question is most often faced by driver writers who have to
|
||||
deal with hardware delays and who may not be the most intimately
|
||||
familiar with the inner workings of the Linux Kernel.
|
||||
|
||||
|
||||
Inserting Delays
|
||||
----------------
|
||||
|
||||
The first, and most important, question you need to ask is "Is my
|
||||
code in an atomic context?" This should be followed closely by "Does
|
||||
it really need to delay in atomic context?" If so...
|
||||
|
||||
ATOMIC CONTEXT:
|
||||
You must use the *delay family of functions. These
|
||||
functions use the jiffie estimation of clock speed
|
||||
and will busy wait for enough loop cycles to achieve
|
||||
the desired delay:
|
||||
|
||||
ndelay(unsigned long nsecs)
|
||||
udelay(unsigned long usecs)
|
||||
mdelay(unsgined long msecs)
|
||||
|
||||
udelay is the generally preferred API; ndelay-level
|
||||
precision may not actually exist on many non-PC devices.
|
||||
|
||||
mdelay is macro wrapper around udelay, to account for
|
||||
possible overflow when passing large arguments to udelay.
|
||||
In general, use of mdelay is discouraged and code should
|
||||
be refactored to allow for the use of msleep.
|
||||
|
||||
NON-ATOMIC CONTEXT:
|
||||
You should use the *sleep[_range] family of functions.
|
||||
There are a few more options here, while any of them may
|
||||
work correctly, using the "right" sleep function will
|
||||
help the scheduler, power management, and just make your
|
||||
driver better :)
|
||||
|
||||
-- Backed by busy-wait loop:
|
||||
udelay(unsigned long usecs)
|
||||
-- Backed by hrtimers:
|
||||
usleep_range(unsigned long min, unsigned long max)
|
||||
-- Backed by jiffies / legacy_timers
|
||||
msleep(unsigned long msecs)
|
||||
msleep_interruptible(unsigned long msecs)
|
||||
|
||||
Unlike the *delay family, the underlying mechanism
|
||||
driving each of these calls varies, thus there are
|
||||
quirks you should be aware of.
|
||||
|
||||
|
||||
SLEEPING FOR "A FEW" USECS ( < ~10us? ):
|
||||
* Use udelay
|
||||
|
||||
- Why not usleep?
|
||||
On slower systems, (embedded, OR perhaps a speed-
|
||||
stepped PC!) the overhead of setting up the hrtimers
|
||||
for usleep *may* not be worth it. Such an evaluation
|
||||
will obviously depend on your specific situation, but
|
||||
it is something to be aware of.
|
||||
|
||||
SLEEPING FOR ~USECS OR SMALL MSECS ( 10us - 20ms):
|
||||
* Use usleep_range
|
||||
|
||||
- Why not msleep for (1ms - 20ms)?
|
||||
Explained originally here:
|
||||
http://lkml.org/lkml/2007/8/3/250
|
||||
msleep(1~20) may not do what the caller intends, and
|
||||
will often sleep longer (~20 ms actual sleep for any
|
||||
value given in the 1~20ms range). In many cases this
|
||||
is not the desired behavior.
|
||||
|
||||
- Why is there no "usleep" / What is a good range?
|
||||
Since usleep_range is built on top of hrtimers, the
|
||||
wakeup will be very precise (ish), thus a simple
|
||||
usleep function would likely introduce a large number
|
||||
of undesired interrupts.
|
||||
|
||||
With the introduction of a range, the scheduler is
|
||||
free to coalesce your wakeup with any other wakeup
|
||||
that may have happened for other reasons, or at the
|
||||
worst case, fire an interrupt for your upper bound.
|
||||
|
||||
The larger a range you supply, the greater a chance
|
||||
that you will not trigger an interrupt; this should
|
||||
be balanced with what is an acceptable upper bound on
|
||||
delay / performance for your specific code path. Exact
|
||||
tolerances here are very situation specific, thus it
|
||||
is left to the caller to determine a reasonable range.
|
||||
|
||||
SLEEPING FOR LARGER MSECS ( 10ms+ )
|
||||
* Use msleep or possibly msleep_interruptible
|
||||
|
||||
- What's the difference?
|
||||
msleep sets the current task to TASK_UNINTERRUPTIBLE
|
||||
whereas msleep_interruptible sets the current task to
|
||||
TASK_INTERRUPTIBLE before scheduling the sleep. In
|
||||
short, the difference is whether the sleep can be ended
|
||||
early by a signal. In general, just use msleep unless
|
||||
you know you have a need for the interruptible variant.
|
@ -13,6 +13,9 @@ Note that this focuses on architecture implementation details only. If you
|
||||
want more explanation of a feature in terms of common code, review the common
|
||||
ftrace.txt file.
|
||||
|
||||
Ideally, everyone who wishes to retain performance while supporting tracing in
|
||||
their kernel should make it all the way to dynamic ftrace support.
|
||||
|
||||
|
||||
Prerequisites
|
||||
-------------
|
||||
@ -215,7 +218,7 @@ An arch may pass in a unique value (frame pointer) to both the entering and
|
||||
exiting of a function. On exit, the value is compared and if it does not
|
||||
match, then it will panic the kernel. This is largely a sanity check for bad
|
||||
code generation with gcc. If gcc for your port sanely updates the frame
|
||||
pointer under different opitmization levels, then ignore this option.
|
||||
pointer under different optimization levels, then ignore this option.
|
||||
|
||||
However, adding support for it isn't terribly difficult. In your assembly code
|
||||
that calls prepare_ftrace_return(), pass the frame pointer as the 3rd argument.
|
||||
@ -234,7 +237,7 @@ If you can't trace NMI functions, then skip this option.
|
||||
|
||||
|
||||
HAVE_SYSCALL_TRACEPOINTS
|
||||
---------------------
|
||||
------------------------
|
||||
|
||||
You need very few things to get the syscalls tracing in an arch.
|
||||
|
||||
@ -250,12 +253,152 @@ You need very few things to get the syscalls tracing in an arch.
|
||||
HAVE_FTRACE_MCOUNT_RECORD
|
||||
-------------------------
|
||||
|
||||
See scripts/recordmcount.pl for more info.
|
||||
|
||||
<details to be filled>
|
||||
See scripts/recordmcount.pl for more info. Just fill in the arch-specific
|
||||
details for how to locate the addresses of mcount call sites via objdump.
|
||||
This option doesn't make much sense without also implementing dynamic ftrace.
|
||||
|
||||
|
||||
HAVE_DYNAMIC_FTRACE
|
||||
---------------------
|
||||
-------------------
|
||||
|
||||
You will first need HAVE_FTRACE_MCOUNT_RECORD and HAVE_FUNCTION_TRACER, so
|
||||
scroll your reader back up if you got over eager.
|
||||
|
||||
Once those are out of the way, you will need to implement:
|
||||
- asm/ftrace.h:
|
||||
- MCOUNT_ADDR
|
||||
- ftrace_call_adjust()
|
||||
- struct dyn_arch_ftrace{}
|
||||
- asm code:
|
||||
- mcount() (new stub)
|
||||
- ftrace_caller()
|
||||
- ftrace_call()
|
||||
- ftrace_stub()
|
||||
- C code:
|
||||
- ftrace_dyn_arch_init()
|
||||
- ftrace_make_nop()
|
||||
- ftrace_make_call()
|
||||
- ftrace_update_ftrace_func()
|
||||
|
||||
First you will need to fill out some arch details in your asm/ftrace.h.
|
||||
|
||||
Define MCOUNT_ADDR as the address of your mcount symbol similar to:
|
||||
#define MCOUNT_ADDR ((unsigned long)mcount)
|
||||
Since no one else will have a decl for that function, you will need to:
|
||||
extern void mcount(void);
|
||||
|
||||
You will also need the helper function ftrace_call_adjust(). Most people
|
||||
will be able to stub it out like so:
|
||||
static inline unsigned long ftrace_call_adjust(unsigned long addr)
|
||||
{
|
||||
return addr;
|
||||
}
|
||||
<details to be filled>
|
||||
|
||||
Lastly you will need the custom dyn_arch_ftrace structure. If you need
|
||||
some extra state when runtime patching arbitrary call sites, this is the
|
||||
place. For now though, create an empty struct:
|
||||
struct dyn_arch_ftrace {
|
||||
/* No extra data needed */
|
||||
};
|
||||
|
||||
With the header out of the way, we can fill out the assembly code. While we
|
||||
did already create a mcount() function earlier, dynamic ftrace only wants a
|
||||
stub function. This is because the mcount() will only be used during boot
|
||||
and then all references to it will be patched out never to return. Instead,
|
||||
the guts of the old mcount() will be used to create a new ftrace_caller()
|
||||
function. Because the two are hard to merge, it will most likely be a lot
|
||||
easier to have two separate definitions split up by #ifdefs. Same goes for
|
||||
the ftrace_stub() as that will now be inlined in ftrace_caller().
|
||||
|
||||
Before we get confused anymore, let's check out some pseudo code so you can
|
||||
implement your own stuff in assembly:
|
||||
|
||||
void mcount(void)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
void ftrace_caller(void)
|
||||
{
|
||||
/* implement HAVE_FUNCTION_TRACE_MCOUNT_TEST if you desire */
|
||||
|
||||
/* save all state needed by the ABI (see paragraph above) */
|
||||
|
||||
unsigned long frompc = ...;
|
||||
unsigned long selfpc = <return address> - MCOUNT_INSN_SIZE;
|
||||
|
||||
ftrace_call:
|
||||
ftrace_stub(frompc, selfpc);
|
||||
|
||||
/* restore all state needed by the ABI */
|
||||
|
||||
ftrace_stub:
|
||||
return;
|
||||
}
|
||||
|
||||
This might look a little odd at first, but keep in mind that we will be runtime
|
||||
patching multiple things. First, only functions that we actually want to trace
|
||||
will be patched to call ftrace_caller(). Second, since we only have one tracer
|
||||
active at a time, we will patch the ftrace_caller() function itself to call the
|
||||
specific tracer in question. That is the point of the ftrace_call label.
|
||||
|
||||
With that in mind, let's move on to the C code that will actually be doing the
|
||||
runtime patching. You'll need a little knowledge of your arch's opcodes in
|
||||
order to make it through the next section.
|
||||
|
||||
Every arch has an init callback function. If you need to do something early on
|
||||
to initialize some state, this is the time to do that. Otherwise, this simple
|
||||
function below should be sufficient for most people:
|
||||
|
||||
int __init ftrace_dyn_arch_init(void *data)
|
||||
{
|
||||
/* return value is done indirectly via data */
|
||||
*(unsigned long *)data = 0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
There are two functions that are used to do runtime patching of arbitrary
|
||||
functions. The first is used to turn the mcount call site into a nop (which
|
||||
is what helps us retain runtime performance when not tracing). The second is
|
||||
used to turn the mcount call site into a call to an arbitrary location (but
|
||||
typically that is ftracer_caller()). See the general function definition in
|
||||
linux/ftrace.h for the functions:
|
||||
ftrace_make_nop()
|
||||
ftrace_make_call()
|
||||
The rec->ip value is the address of the mcount call site that was collected
|
||||
by the scripts/recordmcount.pl during build time.
|
||||
|
||||
The last function is used to do runtime patching of the active tracer. This
|
||||
will be modifying the assembly code at the location of the ftrace_call symbol
|
||||
inside of the ftrace_caller() function. So you should have sufficient padding
|
||||
at that location to support the new function calls you'll be inserting. Some
|
||||
people will be using a "call" type instruction while others will be using a
|
||||
"branch" type instruction. Specifically, the function is:
|
||||
ftrace_update_ftrace_func()
|
||||
|
||||
|
||||
HAVE_DYNAMIC_FTRACE + HAVE_FUNCTION_GRAPH_TRACER
|
||||
------------------------------------------------
|
||||
|
||||
The function grapher needs a few tweaks in order to work with dynamic ftrace.
|
||||
Basically, you will need to:
|
||||
- update:
|
||||
- ftrace_caller()
|
||||
- ftrace_graph_call()
|
||||
- ftrace_graph_caller()
|
||||
- implement:
|
||||
- ftrace_enable_ftrace_graph_caller()
|
||||
- ftrace_disable_ftrace_graph_caller()
|
||||
|
||||
<details to be filled>
|
||||
Quick notes:
|
||||
- add a nop stub after the ftrace_call location named ftrace_graph_call;
|
||||
stub needs to be large enough to support a call to ftrace_graph_caller()
|
||||
- update ftrace_graph_caller() to work with being called by the new
|
||||
ftrace_caller() since some semantics may have changed
|
||||
- ftrace_enable_ftrace_graph_caller() will runtime patch the
|
||||
ftrace_graph_call location with a call to ftrace_graph_caller()
|
||||
- ftrace_disable_ftrace_graph_caller() will runtime patch the
|
||||
ftrace_graph_call location with nops
|
||||
|
@ -1,126 +0,0 @@
|
||||
kmemtrace - Kernel Memory Tracer
|
||||
|
||||
by Eduard - Gabriel Munteanu
|
||||
<eduard.munteanu@linux360.ro>
|
||||
|
||||
I. Introduction
|
||||
===============
|
||||
|
||||
kmemtrace helps kernel developers figure out two things:
|
||||
1) how different allocators (SLAB, SLUB etc.) perform
|
||||
2) how kernel code allocates memory and how much
|
||||
|
||||
To do this, we trace every allocation and export information to the userspace
|
||||
through the relay interface. We export things such as the number of requested
|
||||
bytes, the number of bytes actually allocated (i.e. including internal
|
||||
fragmentation), whether this is a slab allocation or a plain kmalloc() and so
|
||||
on.
|
||||
|
||||
The actual analysis is performed by a userspace tool (see section III for
|
||||
details on where to get it from). It logs the data exported by the kernel,
|
||||
processes it and (as of writing this) can provide the following information:
|
||||
- the total amount of memory allocated and fragmentation per call-site
|
||||
- the amount of memory allocated and fragmentation per allocation
|
||||
- total memory allocated and fragmentation in the collected dataset
|
||||
- number of cross-CPU allocation and frees (makes sense in NUMA environments)
|
||||
|
||||
Moreover, it can potentially find inconsistent and erroneous behavior in
|
||||
kernel code, such as using slab free functions on kmalloc'ed memory or
|
||||
allocating less memory than requested (but not truly failed allocations).
|
||||
|
||||
kmemtrace also makes provisions for tracing on some arch and analysing the
|
||||
data on another.
|
||||
|
||||
II. Design and goals
|
||||
====================
|
||||
|
||||
kmemtrace was designed to handle rather large amounts of data. Thus, it uses
|
||||
the relay interface to export whatever is logged to userspace, which then
|
||||
stores it. Analysis and reporting is done asynchronously, that is, after the
|
||||
data is collected and stored. By design, it allows one to log and analyse
|
||||
on different machines and different arches.
|
||||
|
||||
As of writing this, the ABI is not considered stable, though it might not
|
||||
change much. However, no guarantees are made about compatibility yet. When
|
||||
deemed stable, the ABI should still allow easy extension while maintaining
|
||||
backward compatibility. This is described further in Documentation/ABI.
|
||||
|
||||
Summary of design goals:
|
||||
- allow logging and analysis to be done across different machines
|
||||
- be fast and anticipate usage in high-load environments (*)
|
||||
- be reasonably extensible
|
||||
- make it possible for GNU/Linux distributions to have kmemtrace
|
||||
included in their repositories
|
||||
|
||||
(*) - one of the reasons Pekka Enberg's original userspace data analysis
|
||||
tool's code was rewritten from Perl to C (although this is more than a
|
||||
simple conversion)
|
||||
|
||||
|
||||
III. Quick usage guide
|
||||
======================
|
||||
|
||||
1) Get a kernel that supports kmemtrace and build it accordingly (i.e. enable
|
||||
CONFIG_KMEMTRACE).
|
||||
|
||||
2) Get the userspace tool and build it:
|
||||
$ git clone git://repo.or.cz/kmemtrace-user.git # current repository
|
||||
$ cd kmemtrace-user/
|
||||
$ ./autogen.sh
|
||||
$ ./configure
|
||||
$ make
|
||||
|
||||
3) Boot the kmemtrace-enabled kernel if you haven't, preferably in the
|
||||
'single' runlevel (so that relay buffers don't fill up easily), and run
|
||||
kmemtrace:
|
||||
# '$' does not mean user, but root here.
|
||||
$ mount -t debugfs none /sys/kernel/debug
|
||||
$ mount -t proc none /proc
|
||||
$ cd path/to/kmemtrace-user/
|
||||
$ ./kmemtraced
|
||||
Wait a bit, then stop it with CTRL+C.
|
||||
$ cat /sys/kernel/debug/kmemtrace/total_overruns # Check if we didn't
|
||||
# overrun, should
|
||||
# be zero.
|
||||
$ (Optionally) [Run kmemtrace_check separately on each cpu[0-9]*.out file to
|
||||
check its correctness]
|
||||
$ ./kmemtrace-report
|
||||
|
||||
Now you should have a nice and short summary of how the allocator performs.
|
||||
|
||||
IV. FAQ and known issues
|
||||
========================
|
||||
|
||||
Q: 'cat /sys/kernel/debug/kmemtrace/total_overruns' is non-zero, how do I fix
|
||||
this? Should I worry?
|
||||
A: If it's non-zero, this affects kmemtrace's accuracy, depending on how
|
||||
large the number is. You can fix it by supplying a higher
|
||||
'kmemtrace.subbufs=N' kernel parameter.
|
||||
---
|
||||
|
||||
Q: kmemtrace_check reports errors, how do I fix this? Should I worry?
|
||||
A: This is a bug and should be reported. It can occur for a variety of
|
||||
reasons:
|
||||
- possible bugs in relay code
|
||||
- possible misuse of relay by kmemtrace
|
||||
- timestamps being collected unorderly
|
||||
Or you may fix it yourself and send us a patch.
|
||||
---
|
||||
|
||||
Q: kmemtrace_report shows many errors, how do I fix this? Should I worry?
|
||||
A: This is a known issue and I'm working on it. These might be true errors
|
||||
in kernel code, which may have inconsistent behavior (e.g. allocating memory
|
||||
with kmem_cache_alloc() and freeing it with kfree()). Pekka Enberg pointed
|
||||
out this behavior may work with SLAB, but may fail with other allocators.
|
||||
|
||||
It may also be due to lack of tracing in some unusual allocator functions.
|
||||
|
||||
We don't want bug reports regarding this issue yet.
|
||||
---
|
||||
|
||||
V. See also
|
||||
===========
|
||||
|
||||
Documentation/kernel-parameters.txt
|
||||
Documentation/ABI/testing/debugfs-kmemtrace
|
||||
|
@ -42,7 +42,7 @@ Synopsis of kprobe_events
|
||||
+|-offs(FETCHARG) : Fetch memory at FETCHARG +|- offs address.(**)
|
||||
NAME=FETCHARG : Set NAME as the argument name of FETCHARG.
|
||||
FETCHARG:TYPE : Set TYPE as the type of FETCHARG. Currently, basic types
|
||||
(u8/u16/u32/u64/s8/s16/s32/s64) are supported.
|
||||
(u8/u16/u32/u64/s8/s16/s32/s64) and string are supported.
|
||||
|
||||
(*) only for return probe.
|
||||
(**) this is useful for fetching a field of data structures.
|
||||
|
686
Documentation/trace/postprocess/trace-vmscan-postprocess.pl
Normal file
686
Documentation/trace/postprocess/trace-vmscan-postprocess.pl
Normal file
@ -0,0 +1,686 @@
|
||||
#!/usr/bin/perl
|
||||
# This is a POC for reading the text representation of trace output related to
|
||||
# page reclaim. It makes an attempt to extract some high-level information on
|
||||
# what is going on. The accuracy of the parser may vary
|
||||
#
|
||||
# Example usage: trace-vmscan-postprocess.pl < /sys/kernel/debug/tracing/trace_pipe
|
||||
# other options
|
||||
# --read-procstat If the trace lacks process info, get it from /proc
|
||||
# --ignore-pid Aggregate processes of the same name together
|
||||
#
|
||||
# Copyright (c) IBM Corporation 2009
|
||||
# Author: Mel Gorman <mel@csn.ul.ie>
|
||||
use strict;
|
||||
use Getopt::Long;
|
||||
|
||||
# Tracepoint events
|
||||
use constant MM_VMSCAN_DIRECT_RECLAIM_BEGIN => 1;
|
||||
use constant MM_VMSCAN_DIRECT_RECLAIM_END => 2;
|
||||
use constant MM_VMSCAN_KSWAPD_WAKE => 3;
|
||||
use constant MM_VMSCAN_KSWAPD_SLEEP => 4;
|
||||
use constant MM_VMSCAN_LRU_SHRINK_ACTIVE => 5;
|
||||
use constant MM_VMSCAN_LRU_SHRINK_INACTIVE => 6;
|
||||
use constant MM_VMSCAN_LRU_ISOLATE => 7;
|
||||
use constant MM_VMSCAN_WRITEPAGE_FILE_SYNC => 8;
|
||||
use constant MM_VMSCAN_WRITEPAGE_ANON_SYNC => 9;
|
||||
use constant MM_VMSCAN_WRITEPAGE_FILE_ASYNC => 10;
|
||||
use constant MM_VMSCAN_WRITEPAGE_ANON_ASYNC => 11;
|
||||
use constant MM_VMSCAN_WRITEPAGE_ASYNC => 12;
|
||||
use constant EVENT_UNKNOWN => 13;
|
||||
|
||||
# Per-order events
|
||||
use constant MM_VMSCAN_DIRECT_RECLAIM_BEGIN_PERORDER => 11;
|
||||
use constant MM_VMSCAN_WAKEUP_KSWAPD_PERORDER => 12;
|
||||
use constant MM_VMSCAN_KSWAPD_WAKE_PERORDER => 13;
|
||||
use constant HIGH_KSWAPD_REWAKEUP_PERORDER => 14;
|
||||
|
||||
# Constants used to track state
|
||||
use constant STATE_DIRECT_BEGIN => 15;
|
||||
use constant STATE_DIRECT_ORDER => 16;
|
||||
use constant STATE_KSWAPD_BEGIN => 17;
|
||||
use constant STATE_KSWAPD_ORDER => 18;
|
||||
|
||||
# High-level events extrapolated from tracepoints
|
||||
use constant HIGH_DIRECT_RECLAIM_LATENCY => 19;
|
||||
use constant HIGH_KSWAPD_LATENCY => 20;
|
||||
use constant HIGH_KSWAPD_REWAKEUP => 21;
|
||||
use constant HIGH_NR_SCANNED => 22;
|
||||
use constant HIGH_NR_TAKEN => 23;
|
||||
use constant HIGH_NR_RECLAIM => 24;
|
||||
use constant HIGH_NR_CONTIG_DIRTY => 25;
|
||||
|
||||
my %perprocesspid;
|
||||
my %perprocess;
|
||||
my %last_procmap;
|
||||
my $opt_ignorepid;
|
||||
my $opt_read_procstat;
|
||||
|
||||
my $total_wakeup_kswapd;
|
||||
my ($total_direct_reclaim, $total_direct_nr_scanned);
|
||||
my ($total_direct_latency, $total_kswapd_latency);
|
||||
my ($total_direct_writepage_file_sync, $total_direct_writepage_file_async);
|
||||
my ($total_direct_writepage_anon_sync, $total_direct_writepage_anon_async);
|
||||
my ($total_kswapd_nr_scanned, $total_kswapd_wake);
|
||||
my ($total_kswapd_writepage_file_sync, $total_kswapd_writepage_file_async);
|
||||
my ($total_kswapd_writepage_anon_sync, $total_kswapd_writepage_anon_async);
|
||||
|
||||
# Catch sigint and exit on request
|
||||
my $sigint_report = 0;
|
||||
my $sigint_exit = 0;
|
||||
my $sigint_pending = 0;
|
||||
my $sigint_received = 0;
|
||||
sub sigint_handler {
|
||||
my $current_time = time;
|
||||
if ($current_time - 2 > $sigint_received) {
|
||||
print "SIGINT received, report pending. Hit ctrl-c again to exit\n";
|
||||
$sigint_report = 1;
|
||||
} else {
|
||||
if (!$sigint_exit) {
|
||||
print "Second SIGINT received quickly, exiting\n";
|
||||
}
|
||||
$sigint_exit++;
|
||||
}
|
||||
|
||||
if ($sigint_exit > 3) {
|
||||
print "Many SIGINTs received, exiting now without report\n";
|
||||
exit;
|
||||
}
|
||||
|
||||
$sigint_received = $current_time;
|
||||
$sigint_pending = 1;
|
||||
}
|
||||
$SIG{INT} = "sigint_handler";
|
||||
|
||||
# Parse command line options
|
||||
GetOptions(
|
||||
'ignore-pid' => \$opt_ignorepid,
|
||||
'read-procstat' => \$opt_read_procstat,
|
||||
);
|
||||
|
||||
# Defaults for dynamically discovered regex's
|
||||
my $regex_direct_begin_default = 'order=([0-9]*) may_writepage=([0-9]*) gfp_flags=([A-Z_|]*)';
|
||||
my $regex_direct_end_default = 'nr_reclaimed=([0-9]*)';
|
||||
my $regex_kswapd_wake_default = 'nid=([0-9]*) order=([0-9]*)';
|
||||
my $regex_kswapd_sleep_default = 'nid=([0-9]*)';
|
||||
my $regex_wakeup_kswapd_default = 'nid=([0-9]*) zid=([0-9]*) order=([0-9]*)';
|
||||
my $regex_lru_isolate_default = 'isolate_mode=([0-9]*) order=([0-9]*) nr_requested=([0-9]*) nr_scanned=([0-9]*) nr_taken=([0-9]*) contig_taken=([0-9]*) contig_dirty=([0-9]*) contig_failed=([0-9]*)';
|
||||
my $regex_lru_shrink_inactive_default = 'lru=([A-Z_]*) nr_scanned=([0-9]*) nr_reclaimed=([0-9]*) priority=([0-9]*)';
|
||||
my $regex_lru_shrink_active_default = 'lru=([A-Z_]*) nr_scanned=([0-9]*) nr_rotated=([0-9]*) priority=([0-9]*)';
|
||||
my $regex_writepage_default = 'page=([0-9a-f]*) pfn=([0-9]*) flags=([A-Z_|]*)';
|
||||
|
||||
# Dyanically discovered regex
|
||||
my $regex_direct_begin;
|
||||
my $regex_direct_end;
|
||||
my $regex_kswapd_wake;
|
||||
my $regex_kswapd_sleep;
|
||||
my $regex_wakeup_kswapd;
|
||||
my $regex_lru_isolate;
|
||||
my $regex_lru_shrink_inactive;
|
||||
my $regex_lru_shrink_active;
|
||||
my $regex_writepage;
|
||||
|
||||
# Static regex used. Specified like this for readability and for use with /o
|
||||
# (process_pid) (cpus ) ( time ) (tpoint ) (details)
|
||||
my $regex_traceevent = '\s*([a-zA-Z0-9-]*)\s*(\[[0-9]*\])\s*([0-9.]*):\s*([a-zA-Z_]*):\s*(.*)';
|
||||
my $regex_statname = '[-0-9]*\s\((.*)\).*';
|
||||
my $regex_statppid = '[-0-9]*\s\(.*\)\s[A-Za-z]\s([0-9]*).*';
|
||||
|
||||
sub generate_traceevent_regex {
|
||||
my $event = shift;
|
||||
my $default = shift;
|
||||
my $regex;
|
||||
|
||||
# Read the event format or use the default
|
||||
if (!open (FORMAT, "/sys/kernel/debug/tracing/events/$event/format")) {
|
||||
print("WARNING: Event $event format string not found\n");
|
||||
return $default;
|
||||
} else {
|
||||
my $line;
|
||||
while (!eof(FORMAT)) {
|
||||
$line = <FORMAT>;
|
||||
$line =~ s/, REC->.*//;
|
||||
if ($line =~ /^print fmt:\s"(.*)".*/) {
|
||||
$regex = $1;
|
||||
$regex =~ s/%s/\([0-9a-zA-Z|_]*\)/g;
|
||||
$regex =~ s/%p/\([0-9a-f]*\)/g;
|
||||
$regex =~ s/%d/\([-0-9]*\)/g;
|
||||
$regex =~ s/%ld/\([-0-9]*\)/g;
|
||||
$regex =~ s/%lu/\([0-9]*\)/g;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Can't handle the print_flags stuff but in the context of this
|
||||
# script, it really doesn't matter
|
||||
$regex =~ s/\(REC.*\) \? __print_flags.*//;
|
||||
|
||||
# Verify fields are in the right order
|
||||
my $tuple;
|
||||
foreach $tuple (split /\s/, $regex) {
|
||||
my ($key, $value) = split(/=/, $tuple);
|
||||
my $expected = shift;
|
||||
if ($key ne $expected) {
|
||||
print("WARNING: Format not as expected for event $event '$key' != '$expected'\n");
|
||||
$regex =~ s/$key=\((.*)\)/$key=$1/;
|
||||
}
|
||||
}
|
||||
|
||||
if (defined shift) {
|
||||
die("Fewer fields than expected in format");
|
||||
}
|
||||
|
||||
return $regex;
|
||||
}
|
||||
|
||||
$regex_direct_begin = generate_traceevent_regex(
|
||||
"vmscan/mm_vmscan_direct_reclaim_begin",
|
||||
$regex_direct_begin_default,
|
||||
"order", "may_writepage",
|
||||
"gfp_flags");
|
||||
$regex_direct_end = generate_traceevent_regex(
|
||||
"vmscan/mm_vmscan_direct_reclaim_end",
|
||||
$regex_direct_end_default,
|
||||
"nr_reclaimed");
|
||||
$regex_kswapd_wake = generate_traceevent_regex(
|
||||
"vmscan/mm_vmscan_kswapd_wake",
|
||||
$regex_kswapd_wake_default,
|
||||
"nid", "order");
|
||||
$regex_kswapd_sleep = generate_traceevent_regex(
|
||||
"vmscan/mm_vmscan_kswapd_sleep",
|
||||
$regex_kswapd_sleep_default,
|
||||
"nid");
|
||||
$regex_wakeup_kswapd = generate_traceevent_regex(
|
||||
"vmscan/mm_vmscan_wakeup_kswapd",
|
||||
$regex_wakeup_kswapd_default,
|
||||
"nid", "zid", "order");
|
||||
$regex_lru_isolate = generate_traceevent_regex(
|
||||
"vmscan/mm_vmscan_lru_isolate",
|
||||
$regex_lru_isolate_default,
|
||||
"isolate_mode", "order",
|
||||
"nr_requested", "nr_scanned", "nr_taken",
|
||||
"contig_taken", "contig_dirty", "contig_failed");
|
||||
$regex_lru_shrink_inactive = generate_traceevent_regex(
|
||||
"vmscan/mm_vmscan_lru_shrink_inactive",
|
||||
$regex_lru_shrink_inactive_default,
|
||||
"nid", "zid",
|
||||
"lru",
|
||||
"nr_scanned", "nr_reclaimed", "priority");
|
||||
$regex_lru_shrink_active = generate_traceevent_regex(
|
||||
"vmscan/mm_vmscan_lru_shrink_active",
|
||||
$regex_lru_shrink_active_default,
|
||||
"nid", "zid",
|
||||
"lru",
|
||||
"nr_scanned", "nr_rotated", "priority");
|
||||
$regex_writepage = generate_traceevent_regex(
|
||||
"vmscan/mm_vmscan_writepage",
|
||||
$regex_writepage_default,
|
||||
"page", "pfn", "flags");
|
||||
|
||||
sub read_statline($) {
|
||||
my $pid = $_[0];
|
||||
my $statline;
|
||||
|
||||
if (open(STAT, "/proc/$pid/stat")) {
|
||||
$statline = <STAT>;
|
||||
close(STAT);
|
||||
}
|
||||
|
||||
if ($statline eq '') {
|
||||
$statline = "-1 (UNKNOWN_PROCESS_NAME) R 0";
|
||||
}
|
||||
|
||||
return $statline;
|
||||
}
|
||||
|
||||
sub guess_process_pid($$) {
|
||||
my $pid = $_[0];
|
||||
my $statline = $_[1];
|
||||
|
||||
if ($pid == 0) {
|
||||
return "swapper-0";
|
||||
}
|
||||
|
||||
if ($statline !~ /$regex_statname/o) {
|
||||
die("Failed to math stat line for process name :: $statline");
|
||||
}
|
||||
return "$1-$pid";
|
||||
}
|
||||
|
||||
# Convert sec.usec timestamp format
|
||||
sub timestamp_to_ms($) {
|
||||
my $timestamp = $_[0];
|
||||
|
||||
my ($sec, $usec) = split (/\./, $timestamp);
|
||||
return ($sec * 1000) + ($usec / 1000);
|
||||
}
|
||||
|
||||
sub process_events {
|
||||
my $traceevent;
|
||||
my $process_pid;
|
||||
my $cpus;
|
||||
my $timestamp;
|
||||
my $tracepoint;
|
||||
my $details;
|
||||
my $statline;
|
||||
|
||||
# Read each line of the event log
|
||||
EVENT_PROCESS:
|
||||
while ($traceevent = <STDIN>) {
|
||||
if ($traceevent =~ /$regex_traceevent/o) {
|
||||
$process_pid = $1;
|
||||
$timestamp = $3;
|
||||
$tracepoint = $4;
|
||||
|
||||
$process_pid =~ /(.*)-([0-9]*)$/;
|
||||
my $process = $1;
|
||||
my $pid = $2;
|
||||
|
||||
if ($process eq "") {
|
||||
$process = $last_procmap{$pid};
|
||||
$process_pid = "$process-$pid";
|
||||
}
|
||||
$last_procmap{$pid} = $process;
|
||||
|
||||
if ($opt_read_procstat) {
|
||||
$statline = read_statline($pid);
|
||||
if ($opt_read_procstat && $process eq '') {
|
||||
$process_pid = guess_process_pid($pid, $statline);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
next;
|
||||
}
|
||||
|
||||
# Perl Switch() sucks majorly
|
||||
if ($tracepoint eq "mm_vmscan_direct_reclaim_begin") {
|
||||
$timestamp = timestamp_to_ms($timestamp);
|
||||
$perprocesspid{$process_pid}->{MM_VMSCAN_DIRECT_RECLAIM_BEGIN}++;
|
||||
$perprocesspid{$process_pid}->{STATE_DIRECT_BEGIN} = $timestamp;
|
||||
|
||||
$details = $5;
|
||||
if ($details !~ /$regex_direct_begin/o) {
|
||||
print "WARNING: Failed to parse mm_vmscan_direct_reclaim_begin as expected\n";
|
||||
print " $details\n";
|
||||
print " $regex_direct_begin\n";
|
||||
next;
|
||||
}
|
||||
my $order = $1;
|
||||
$perprocesspid{$process_pid}->{MM_VMSCAN_DIRECT_RECLAIM_BEGIN_PERORDER}[$order]++;
|
||||
$perprocesspid{$process_pid}->{STATE_DIRECT_ORDER} = $order;
|
||||
} elsif ($tracepoint eq "mm_vmscan_direct_reclaim_end") {
|
||||
# Count the event itself
|
||||
my $index = $perprocesspid{$process_pid}->{MM_VMSCAN_DIRECT_RECLAIM_END};
|
||||
$perprocesspid{$process_pid}->{MM_VMSCAN_DIRECT_RECLAIM_END}++;
|
||||
|
||||
# Record how long direct reclaim took this time
|
||||
if (defined $perprocesspid{$process_pid}->{STATE_DIRECT_BEGIN}) {
|
||||
$timestamp = timestamp_to_ms($timestamp);
|
||||
my $order = $perprocesspid{$process_pid}->{STATE_DIRECT_ORDER};
|
||||
my $latency = ($timestamp - $perprocesspid{$process_pid}->{STATE_DIRECT_BEGIN});
|
||||
$perprocesspid{$process_pid}->{HIGH_DIRECT_RECLAIM_LATENCY}[$index] = "$order-$latency";
|
||||
}
|
||||
} elsif ($tracepoint eq "mm_vmscan_kswapd_wake") {
|
||||
$details = $5;
|
||||
if ($details !~ /$regex_kswapd_wake/o) {
|
||||
print "WARNING: Failed to parse mm_vmscan_kswapd_wake as expected\n";
|
||||
print " $details\n";
|
||||
print " $regex_kswapd_wake\n";
|
||||
next;
|
||||
}
|
||||
|
||||
my $order = $2;
|
||||
$perprocesspid{$process_pid}->{STATE_KSWAPD_ORDER} = $order;
|
||||
if (!$perprocesspid{$process_pid}->{STATE_KSWAPD_BEGIN}) {
|
||||
$timestamp = timestamp_to_ms($timestamp);
|
||||
$perprocesspid{$process_pid}->{MM_VMSCAN_KSWAPD_WAKE}++;
|
||||
$perprocesspid{$process_pid}->{STATE_KSWAPD_BEGIN} = $timestamp;
|
||||
$perprocesspid{$process_pid}->{MM_VMSCAN_KSWAPD_WAKE_PERORDER}[$order]++;
|
||||
} else {
|
||||
$perprocesspid{$process_pid}->{HIGH_KSWAPD_REWAKEUP}++;
|
||||
$perprocesspid{$process_pid}->{HIGH_KSWAPD_REWAKEUP_PERORDER}[$order]++;
|
||||
}
|
||||
} elsif ($tracepoint eq "mm_vmscan_kswapd_sleep") {
|
||||
|
||||
# Count the event itself
|
||||
my $index = $perprocesspid{$process_pid}->{MM_VMSCAN_KSWAPD_SLEEP};
|
||||
$perprocesspid{$process_pid}->{MM_VMSCAN_KSWAPD_SLEEP}++;
|
||||
|
||||
# Record how long kswapd was awake
|
||||
$timestamp = timestamp_to_ms($timestamp);
|
||||
my $order = $perprocesspid{$process_pid}->{STATE_KSWAPD_ORDER};
|
||||
my $latency = ($timestamp - $perprocesspid{$process_pid}->{STATE_KSWAPD_BEGIN});
|
||||
$perprocesspid{$process_pid}->{HIGH_KSWAPD_LATENCY}[$index] = "$order-$latency";
|
||||
$perprocesspid{$process_pid}->{STATE_KSWAPD_BEGIN} = 0;
|
||||
} elsif ($tracepoint eq "mm_vmscan_wakeup_kswapd") {
|
||||
$perprocesspid{$process_pid}->{MM_VMSCAN_WAKEUP_KSWAPD}++;
|
||||
|
||||
$details = $5;
|
||||
if ($details !~ /$regex_wakeup_kswapd/o) {
|
||||
print "WARNING: Failed to parse mm_vmscan_wakeup_kswapd as expected\n";
|
||||
print " $details\n";
|
||||
print " $regex_wakeup_kswapd\n";
|
||||
next;
|
||||
}
|
||||
my $order = $3;
|
||||
$perprocesspid{$process_pid}->{MM_VMSCAN_WAKEUP_KSWAPD_PERORDER}[$order]++;
|
||||
} elsif ($tracepoint eq "mm_vmscan_lru_isolate") {
|
||||
$details = $5;
|
||||
if ($details !~ /$regex_lru_isolate/o) {
|
||||
print "WARNING: Failed to parse mm_vmscan_lru_isolate as expected\n";
|
||||
print " $details\n";
|
||||
print " $regex_lru_isolate/o\n";
|
||||
next;
|
||||
}
|
||||
my $nr_scanned = $4;
|
||||
my $nr_contig_dirty = $7;
|
||||
$perprocesspid{$process_pid}->{HIGH_NR_SCANNED} += $nr_scanned;
|
||||
$perprocesspid{$process_pid}->{HIGH_NR_CONTIG_DIRTY} += $nr_contig_dirty;
|
||||
} elsif ($tracepoint eq "mm_vmscan_writepage") {
|
||||
$details = $5;
|
||||
if ($details !~ /$regex_writepage/o) {
|
||||
print "WARNING: Failed to parse mm_vmscan_writepage as expected\n";
|
||||
print " $details\n";
|
||||
print " $regex_writepage\n";
|
||||
next;
|
||||
}
|
||||
|
||||
my $flags = $3;
|
||||
my $file = 0;
|
||||
my $sync_io = 0;
|
||||
if ($flags =~ /RECLAIM_WB_FILE/) {
|
||||
$file = 1;
|
||||
}
|
||||
if ($flags =~ /RECLAIM_WB_SYNC/) {
|
||||
$sync_io = 1;
|
||||
}
|
||||
if ($sync_io) {
|
||||
if ($file) {
|
||||
$perprocesspid{$process_pid}->{MM_VMSCAN_WRITEPAGE_FILE_SYNC}++;
|
||||
} else {
|
||||
$perprocesspid{$process_pid}->{MM_VMSCAN_WRITEPAGE_ANON_SYNC}++;
|
||||
}
|
||||
} else {
|
||||
if ($file) {
|
||||
$perprocesspid{$process_pid}->{MM_VMSCAN_WRITEPAGE_FILE_ASYNC}++;
|
||||
} else {
|
||||
$perprocesspid{$process_pid}->{MM_VMSCAN_WRITEPAGE_ANON_ASYNC}++;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
$perprocesspid{$process_pid}->{EVENT_UNKNOWN}++;
|
||||
}
|
||||
|
||||
if ($sigint_pending) {
|
||||
last EVENT_PROCESS;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub dump_stats {
|
||||
my $hashref = shift;
|
||||
my %stats = %$hashref;
|
||||
|
||||
# Dump per-process stats
|
||||
my $process_pid;
|
||||
my $max_strlen = 0;
|
||||
|
||||
# Get the maximum process name
|
||||
foreach $process_pid (keys %perprocesspid) {
|
||||
my $len = length($process_pid);
|
||||
if ($len > $max_strlen) {
|
||||
$max_strlen = $len;
|
||||
}
|
||||
}
|
||||
$max_strlen += 2;
|
||||
|
||||
# Work out latencies
|
||||
printf("\n") if !$opt_ignorepid;
|
||||
printf("Reclaim latencies expressed as order-latency_in_ms\n") if !$opt_ignorepid;
|
||||
foreach $process_pid (keys %stats) {
|
||||
|
||||
if (!$stats{$process_pid}->{HIGH_DIRECT_RECLAIM_LATENCY}[0] &&
|
||||
!$stats{$process_pid}->{HIGH_KSWAPD_LATENCY}[0]) {
|
||||
next;
|
||||
}
|
||||
|
||||
printf "%-" . $max_strlen . "s ", $process_pid if !$opt_ignorepid;
|
||||
my $index = 0;
|
||||
while (defined $stats{$process_pid}->{HIGH_DIRECT_RECLAIM_LATENCY}[$index] ||
|
||||
defined $stats{$process_pid}->{HIGH_KSWAPD_LATENCY}[$index]) {
|
||||
|
||||
if ($stats{$process_pid}->{HIGH_DIRECT_RECLAIM_LATENCY}[$index]) {
|
||||
printf("%s ", $stats{$process_pid}->{HIGH_DIRECT_RECLAIM_LATENCY}[$index]) if !$opt_ignorepid;
|
||||
my ($dummy, $latency) = split(/-/, $stats{$process_pid}->{HIGH_DIRECT_RECLAIM_LATENCY}[$index]);
|
||||
$total_direct_latency += $latency;
|
||||
} else {
|
||||
printf("%s ", $stats{$process_pid}->{HIGH_KSWAPD_LATENCY}[$index]) if !$opt_ignorepid;
|
||||
my ($dummy, $latency) = split(/-/, $stats{$process_pid}->{HIGH_KSWAPD_LATENCY}[$index]);
|
||||
$total_kswapd_latency += $latency;
|
||||
}
|
||||
$index++;
|
||||
}
|
||||
print "\n" if !$opt_ignorepid;
|
||||
}
|
||||
|
||||
# Print out process activity
|
||||
printf("\n");
|
||||
printf("%-" . $max_strlen . "s %8s %10s %8s %8s %8s %8s %8s\n", "Process", "Direct", "Wokeup", "Pages", "Pages", "Pages", "Time");
|
||||
printf("%-" . $max_strlen . "s %8s %10s %8s %8s %8s %8s %8s\n", "details", "Rclms", "Kswapd", "Scanned", "Sync-IO", "ASync-IO", "Stalled");
|
||||
foreach $process_pid (keys %stats) {
|
||||
|
||||
if (!$stats{$process_pid}->{MM_VMSCAN_DIRECT_RECLAIM_BEGIN}) {
|
||||
next;
|
||||
}
|
||||
|
||||
$total_direct_reclaim += $stats{$process_pid}->{MM_VMSCAN_DIRECT_RECLAIM_BEGIN};
|
||||
$total_wakeup_kswapd += $stats{$process_pid}->{MM_VMSCAN_WAKEUP_KSWAPD};
|
||||
$total_direct_nr_scanned += $stats{$process_pid}->{HIGH_NR_SCANNED};
|
||||
$total_direct_writepage_file_sync += $stats{$process_pid}->{MM_VMSCAN_WRITEPAGE_FILE_SYNC};
|
||||
$total_direct_writepage_anon_sync += $stats{$process_pid}->{MM_VMSCAN_WRITEPAGE_ANON_SYNC};
|
||||
$total_direct_writepage_file_async += $stats{$process_pid}->{MM_VMSCAN_WRITEPAGE_FILE_ASYNC};
|
||||
|
||||
$total_direct_writepage_anon_async += $stats{$process_pid}->{MM_VMSCAN_WRITEPAGE_ANON_ASYNC};
|
||||
|
||||
my $index = 0;
|
||||
my $this_reclaim_delay = 0;
|
||||
while (defined $stats{$process_pid}->{HIGH_DIRECT_RECLAIM_LATENCY}[$index]) {
|
||||
my ($dummy, $latency) = split(/-/, $stats{$process_pid}->{HIGH_DIRECT_RECLAIM_LATENCY}[$index]);
|
||||
$this_reclaim_delay += $latency;
|
||||
$index++;
|
||||
}
|
||||
|
||||
printf("%-" . $max_strlen . "s %8d %10d %8u %8u %8u %8.3f",
|
||||
$process_pid,
|
||||
$stats{$process_pid}->{MM_VMSCAN_DIRECT_RECLAIM_BEGIN},
|
||||
$stats{$process_pid}->{MM_VMSCAN_WAKEUP_KSWAPD},
|
||||
$stats{$process_pid}->{HIGH_NR_SCANNED},
|
||||
$stats{$process_pid}->{MM_VMSCAN_WRITEPAGE_FILE_SYNC} + $stats{$process_pid}->{MM_VMSCAN_WRITEPAGE_ANON_SYNC},
|
||||
$stats{$process_pid}->{MM_VMSCAN_WRITEPAGE_FILE_ASYNC} + $stats{$process_pid}->{MM_VMSCAN_WRITEPAGE_ANON_ASYNC},
|
||||
$this_reclaim_delay / 1000);
|
||||
|
||||
if ($stats{$process_pid}->{MM_VMSCAN_DIRECT_RECLAIM_BEGIN}) {
|
||||
print " ";
|
||||
for (my $order = 0; $order < 20; $order++) {
|
||||
my $count = $stats{$process_pid}->{MM_VMSCAN_DIRECT_RECLAIM_BEGIN_PERORDER}[$order];
|
||||
if ($count != 0) {
|
||||
print "direct-$order=$count ";
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($stats{$process_pid}->{MM_VMSCAN_WAKEUP_KSWAPD}) {
|
||||
print " ";
|
||||
for (my $order = 0; $order < 20; $order++) {
|
||||
my $count = $stats{$process_pid}->{MM_VMSCAN_WAKEUP_KSWAPD_PERORDER}[$order];
|
||||
if ($count != 0) {
|
||||
print "wakeup-$order=$count ";
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($stats{$process_pid}->{HIGH_NR_CONTIG_DIRTY}) {
|
||||
print " ";
|
||||
my $count = $stats{$process_pid}->{HIGH_NR_CONTIG_DIRTY};
|
||||
if ($count != 0) {
|
||||
print "contig-dirty=$count ";
|
||||
}
|
||||
}
|
||||
|
||||
print "\n";
|
||||
}
|
||||
|
||||
# Print out kswapd activity
|
||||
printf("\n");
|
||||
printf("%-" . $max_strlen . "s %8s %10s %8s %8s %8s %8s\n", "Kswapd", "Kswapd", "Order", "Pages", "Pages", "Pages");
|
||||
printf("%-" . $max_strlen . "s %8s %10s %8s %8s %8s %8s\n", "Instance", "Wakeups", "Re-wakeup", "Scanned", "Sync-IO", "ASync-IO");
|
||||
foreach $process_pid (keys %stats) {
|
||||
|
||||
if (!$stats{$process_pid}->{MM_VMSCAN_KSWAPD_WAKE}) {
|
||||
next;
|
||||
}
|
||||
|
||||
$total_kswapd_wake += $stats{$process_pid}->{MM_VMSCAN_KSWAPD_WAKE};
|
||||
$total_kswapd_nr_scanned += $stats{$process_pid}->{HIGH_NR_SCANNED};
|
||||
$total_kswapd_writepage_file_sync += $stats{$process_pid}->{MM_VMSCAN_WRITEPAGE_FILE_SYNC};
|
||||
$total_kswapd_writepage_anon_sync += $stats{$process_pid}->{MM_VMSCAN_WRITEPAGE_ANON_SYNC};
|
||||
$total_kswapd_writepage_file_async += $stats{$process_pid}->{MM_VMSCAN_WRITEPAGE_FILE_ASYNC};
|
||||
$total_kswapd_writepage_anon_async += $stats{$process_pid}->{MM_VMSCAN_WRITEPAGE_ANON_ASYNC};
|
||||
|
||||
printf("%-" . $max_strlen . "s %8d %10d %8u %8i %8u",
|
||||
$process_pid,
|
||||
$stats{$process_pid}->{MM_VMSCAN_KSWAPD_WAKE},
|
||||
$stats{$process_pid}->{HIGH_KSWAPD_REWAKEUP},
|
||||
$stats{$process_pid}->{HIGH_NR_SCANNED},
|
||||
$stats{$process_pid}->{MM_VMSCAN_WRITEPAGE_FILE_SYNC} + $stats{$process_pid}->{MM_VMSCAN_WRITEPAGE_ANON_SYNC},
|
||||
$stats{$process_pid}->{MM_VMSCAN_WRITEPAGE_FILE_ASYNC} + $stats{$process_pid}->{MM_VMSCAN_WRITEPAGE_ANON_ASYNC});
|
||||
|
||||
if ($stats{$process_pid}->{MM_VMSCAN_KSWAPD_WAKE}) {
|
||||
print " ";
|
||||
for (my $order = 0; $order < 20; $order++) {
|
||||
my $count = $stats{$process_pid}->{MM_VMSCAN_KSWAPD_WAKE_PERORDER}[$order];
|
||||
if ($count != 0) {
|
||||
print "wake-$order=$count ";
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($stats{$process_pid}->{HIGH_KSWAPD_REWAKEUP}) {
|
||||
print " ";
|
||||
for (my $order = 0; $order < 20; $order++) {
|
||||
my $count = $stats{$process_pid}->{HIGH_KSWAPD_REWAKEUP_PERORDER}[$order];
|
||||
if ($count != 0) {
|
||||
print "rewake-$order=$count ";
|
||||
}
|
||||
}
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
# Print out summaries
|
||||
$total_direct_latency /= 1000;
|
||||
$total_kswapd_latency /= 1000;
|
||||
print "\nSummary\n";
|
||||
print "Direct reclaims: $total_direct_reclaim\n";
|
||||
print "Direct reclaim pages scanned: $total_direct_nr_scanned\n";
|
||||
print "Direct reclaim write file sync I/O: $total_direct_writepage_file_sync\n";
|
||||
print "Direct reclaim write anon sync I/O: $total_direct_writepage_anon_sync\n";
|
||||
print "Direct reclaim write file async I/O: $total_direct_writepage_file_async\n";
|
||||
print "Direct reclaim write anon async I/O: $total_direct_writepage_anon_async\n";
|
||||
print "Wake kswapd requests: $total_wakeup_kswapd\n";
|
||||
printf "Time stalled direct reclaim: %-1.2f seconds\n", $total_direct_latency;
|
||||
print "\n";
|
||||
print "Kswapd wakeups: $total_kswapd_wake\n";
|
||||
print "Kswapd pages scanned: $total_kswapd_nr_scanned\n";
|
||||
print "Kswapd reclaim write file sync I/O: $total_kswapd_writepage_file_sync\n";
|
||||
print "Kswapd reclaim write anon sync I/O: $total_kswapd_writepage_anon_sync\n";
|
||||
print "Kswapd reclaim write file async I/O: $total_kswapd_writepage_file_async\n";
|
||||
print "Kswapd reclaim write anon async I/O: $total_kswapd_writepage_anon_async\n";
|
||||
printf "Time kswapd awake: %-1.2f seconds\n", $total_kswapd_latency;
|
||||
}
|
||||
|
||||
sub aggregate_perprocesspid() {
|
||||
my $process_pid;
|
||||
my $process;
|
||||
undef %perprocess;
|
||||
|
||||
foreach $process_pid (keys %perprocesspid) {
|
||||
$process = $process_pid;
|
||||
$process =~ s/-([0-9])*$//;
|
||||
if ($process eq '') {
|
||||
$process = "NO_PROCESS_NAME";
|
||||
}
|
||||
|
||||
$perprocess{$process}->{MM_VMSCAN_DIRECT_RECLAIM_BEGIN} += $perprocesspid{$process_pid}->{MM_VMSCAN_DIRECT_RECLAIM_BEGIN};
|
||||
$perprocess{$process}->{MM_VMSCAN_KSWAPD_WAKE} += $perprocesspid{$process_pid}->{MM_VMSCAN_KSWAPD_WAKE};
|
||||
$perprocess{$process}->{MM_VMSCAN_WAKEUP_KSWAPD} += $perprocesspid{$process_pid}->{MM_VMSCAN_WAKEUP_KSWAPD};
|
||||
$perprocess{$process}->{HIGH_KSWAPD_REWAKEUP} += $perprocesspid{$process_pid}->{HIGH_KSWAPD_REWAKEUP};
|
||||
$perprocess{$process}->{HIGH_NR_SCANNED} += $perprocesspid{$process_pid}->{HIGH_NR_SCANNED};
|
||||
$perprocess{$process}->{MM_VMSCAN_WRITEPAGE_FILE_SYNC} += $perprocesspid{$process_pid}->{MM_VMSCAN_WRITEPAGE_FILE_SYNC};
|
||||
$perprocess{$process}->{MM_VMSCAN_WRITEPAGE_ANON_SYNC} += $perprocesspid{$process_pid}->{MM_VMSCAN_WRITEPAGE_ANON_SYNC};
|
||||
$perprocess{$process}->{MM_VMSCAN_WRITEPAGE_FILE_ASYNC} += $perprocesspid{$process_pid}->{MM_VMSCAN_WRITEPAGE_FILE_ASYNC};
|
||||
$perprocess{$process}->{MM_VMSCAN_WRITEPAGE_ANON_ASYNC} += $perprocesspid{$process_pid}->{MM_VMSCAN_WRITEPAGE_ANON_ASYNC};
|
||||
|
||||
for (my $order = 0; $order < 20; $order++) {
|
||||
$perprocess{$process}->{MM_VMSCAN_DIRECT_RECLAIM_BEGIN_PERORDER}[$order] += $perprocesspid{$process_pid}->{MM_VMSCAN_DIRECT_RECLAIM_BEGIN_PERORDER}[$order];
|
||||
$perprocess{$process}->{MM_VMSCAN_WAKEUP_KSWAPD_PERORDER}[$order] += $perprocesspid{$process_pid}->{MM_VMSCAN_WAKEUP_KSWAPD_PERORDER}[$order];
|
||||
$perprocess{$process}->{MM_VMSCAN_KSWAPD_WAKE_PERORDER}[$order] += $perprocesspid{$process_pid}->{MM_VMSCAN_KSWAPD_WAKE_PERORDER}[$order];
|
||||
|
||||
}
|
||||
|
||||
# Aggregate direct reclaim latencies
|
||||
my $wr_index = $perprocess{$process}->{MM_VMSCAN_DIRECT_RECLAIM_END};
|
||||
my $rd_index = 0;
|
||||
while (defined $perprocesspid{$process_pid}->{HIGH_DIRECT_RECLAIM_LATENCY}[$rd_index]) {
|
||||
$perprocess{$process}->{HIGH_DIRECT_RECLAIM_LATENCY}[$wr_index] = $perprocesspid{$process_pid}->{HIGH_DIRECT_RECLAIM_LATENCY}[$rd_index];
|
||||
$rd_index++;
|
||||
$wr_index++;
|
||||
}
|
||||
$perprocess{$process}->{MM_VMSCAN_DIRECT_RECLAIM_END} = $wr_index;
|
||||
|
||||
# Aggregate kswapd latencies
|
||||
my $wr_index = $perprocess{$process}->{MM_VMSCAN_KSWAPD_SLEEP};
|
||||
my $rd_index = 0;
|
||||
while (defined $perprocesspid{$process_pid}->{HIGH_KSWAPD_LATENCY}[$rd_index]) {
|
||||
$perprocess{$process}->{HIGH_KSWAPD_LATENCY}[$wr_index] = $perprocesspid{$process_pid}->{HIGH_KSWAPD_LATENCY}[$rd_index];
|
||||
$rd_index++;
|
||||
$wr_index++;
|
||||
}
|
||||
$perprocess{$process}->{MM_VMSCAN_DIRECT_RECLAIM_END} = $wr_index;
|
||||
}
|
||||
}
|
||||
|
||||
sub report() {
|
||||
if (!$opt_ignorepid) {
|
||||
dump_stats(\%perprocesspid);
|
||||
} else {
|
||||
aggregate_perprocesspid();
|
||||
dump_stats(\%perprocess);
|
||||
}
|
||||
}
|
||||
|
||||
# Process events or signals until neither is available
|
||||
sub signal_loop() {
|
||||
my $sigint_processed;
|
||||
do {
|
||||
$sigint_processed = 0;
|
||||
process_events();
|
||||
|
||||
# Handle pending signals if any
|
||||
if ($sigint_pending) {
|
||||
my $current_time = time;
|
||||
|
||||
if ($sigint_exit) {
|
||||
print "Received exit signal\n";
|
||||
$sigint_pending = 0;
|
||||
}
|
||||
if ($sigint_report) {
|
||||
if ($current_time >= $sigint_received + 2) {
|
||||
report();
|
||||
$sigint_report = 0;
|
||||
$sigint_pending = 0;
|
||||
$sigint_processed = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
} while ($sigint_pending || $sigint_processed);
|
||||
}
|
||||
|
||||
signal_loop();
|
||||
report();
|
@ -9,7 +9,7 @@ compatible with the USB 1.1 standard. It defines three transfer speeds:
|
||||
- "Low Speed" 1.5 Mbit/sec
|
||||
|
||||
USB 1.1 only addressed full speed and low speed. High speed devices
|
||||
can be used on USB 1.1 systems, but they slow down to USB 1.1 speeds.
|
||||
can be used on USB 1.1 systems, but they slow down to USB 1.1 speeds.
|
||||
|
||||
USB 1.1 devices may also be used on USB 2.0 systems. When plugged
|
||||
into an EHCI controller, they are given to a USB 1.1 "companion"
|
||||
|
150
Documentation/usb/gadget_multi.txt
Normal file
150
Documentation/usb/gadget_multi.txt
Normal file
@ -0,0 +1,150 @@
|
||||
-*- org -*-
|
||||
|
||||
* Overview
|
||||
|
||||
The Multifunction Composite Gadget (or g_multi) is a composite gadget
|
||||
that makes extensive use of the composite framework to provide
|
||||
a... multifunction gadget.
|
||||
|
||||
In it's standard configuration it provides a single USB configuration
|
||||
with RNDIS[1] (that is Ethernet), USB CDC[2] ACM (that is serial) and
|
||||
USB Mass Storage functions.
|
||||
|
||||
A CDC ECM (Ethernet) function may be turned on via a Kconfig option
|
||||
and RNDIS can be turned off. If they are both enabled the gadget will
|
||||
have two configurations -- one with RNDIS and another with CDC ECM[3].
|
||||
|
||||
Please not that if you use non-standard configuration (that is enable
|
||||
CDC ECM) you may need to change vendor and/or product ID.
|
||||
|
||||
* Host drivers
|
||||
|
||||
To make use of the gadget one needs to make it work on host side --
|
||||
without that there's no hope of achieving anything with the gadget.
|
||||
As one might expect, things one need to do very from system to system.
|
||||
|
||||
** Linux host drivers
|
||||
|
||||
Since the gadget uses standard composite framework and appears as such
|
||||
to Linux host it does not need any additional drivers on Linux host
|
||||
side. All the functions are handled by respective drivers developed
|
||||
for them.
|
||||
|
||||
This is also true for two configuration set-up with RNDIS
|
||||
configuration being the first one. Linux host will use the second
|
||||
configuration with CDC ECM which should work better under Linux.
|
||||
|
||||
** Windows host drivers
|
||||
|
||||
For the gadget two work under Windows two conditions have to be met:
|
||||
|
||||
*** Detecting as composite gadget
|
||||
|
||||
First of all, Windows need to detect the gadget as an USB composite
|
||||
gadget which on its own have some conditions[4]. If they are met,
|
||||
Windows lets USB Generic Parent Driver[5] handle the device which then
|
||||
tries to much drivers for each individual interface (sort of, don't
|
||||
get into too many details).
|
||||
|
||||
The good news is: you do not have to worry about most of the
|
||||
conditions!
|
||||
|
||||
The only thing to worry is that the gadget has to have a single
|
||||
configuration so a dual RNDIS and CDC ECM gadget won't work unless you
|
||||
create a proper INF -- and of course, if you do submit it!
|
||||
|
||||
*** Installing drivers for each function
|
||||
|
||||
The other, trickier thing is making Windows install drivers for each
|
||||
individual function.
|
||||
|
||||
For mass storage it is trivial since Windows detect it's an interface
|
||||
implementing USB Mass Storage class and selects appropriate driver.
|
||||
|
||||
Things are harder with RDNIS and CDC ACM.
|
||||
|
||||
**** RNDIS
|
||||
|
||||
To make Windows select RNDIS drivers for the first function in the
|
||||
gadget, one needs to use the [[file:linux.inf]] file provided with this
|
||||
document. It "attaches" Window's RNDIS driver to the first interface
|
||||
of the gadget.
|
||||
|
||||
Please note, that while testing we encountered some issues[6] when
|
||||
RNDIS was not the first interface. You do not need to worry abut it
|
||||
unless you are trying to develop your own gadget in which case watch
|
||||
out for this bug.
|
||||
|
||||
**** CDC ACM
|
||||
|
||||
Similarly, [[file:linux-cdc-acm.inf]] is provided for CDC ACM.
|
||||
|
||||
**** Customising the gadget
|
||||
|
||||
If you intend to hack the g_multi gadget be advised that rearranging
|
||||
functions will obviously change interface numbers for each of the
|
||||
functionality. As an effect provided INFs won't work since they have
|
||||
interface numbers hard-coded in them (it's not hard to change those
|
||||
though[7]).
|
||||
|
||||
This also means, that after experimenting with g_multi and changing
|
||||
provided functions one should change gadget's vendor and/or product ID
|
||||
so there will be no collision with other customised gadgets or the
|
||||
original gadget.
|
||||
|
||||
Failing to comply may cause brain damage after wondering for hours why
|
||||
things don't work as intended before realising Windows have cached
|
||||
some drivers information (changing USB port may sometimes help plus
|
||||
you might try using USBDeview[8] to remove the phantom device).
|
||||
|
||||
**** INF testing
|
||||
|
||||
Provided INF files have been tested on Windows XP SP3, Windows Vista
|
||||
and Windows 7, all 32-bit versions. It should work on 64-bit versions
|
||||
as well. It most likely won't work on Windows prior to Windows XP
|
||||
SP2.
|
||||
|
||||
** Other systems
|
||||
|
||||
At this moment, drivers for any other systems have not been tested.
|
||||
Knowing how MacOS is based on BSD and BSD is an Open Source it is
|
||||
believed that it should (read: "I have no idea whether it will") work
|
||||
out-of-the-box.
|
||||
|
||||
For more exotic systems I have even less to say...
|
||||
|
||||
Any testing and drivers *are* *welcome*!
|
||||
|
||||
* Authors
|
||||
|
||||
This document has been written by Michal Nazarewicz
|
||||
([[mailto:mina86@mina86.com]]). INF files have been hacked with
|
||||
support of Marek Szyprowski ([[mailto:m.szyprowski@samsung.com]]) and
|
||||
Xiaofan Chen ([[mailto:xiaofanc@gmail.com]]) basing on the MS RNDIS
|
||||
template[9], Microchip's CDC ACM INF file and David Brownell's
|
||||
([[mailto:dbrownell@users.sourceforge.net]]) original INF files.
|
||||
|
||||
* Footnotes
|
||||
|
||||
[1] Remote Network Driver Interface Specification,
|
||||
[[http://msdn.microsoft.com/en-us/library/ee484414.aspx]].
|
||||
|
||||
[2] Communications Device Class Abstract Control Model, spec for this
|
||||
and other USB classes can be found at
|
||||
[[http://www.usb.org/developers/devclass_docs/]].
|
||||
|
||||
[3] CDC Ethernet Control Model.
|
||||
|
||||
[4] [[http://msdn.microsoft.com/en-us/library/ff537109(v=VS.85).aspx]]
|
||||
|
||||
[5] [[http://msdn.microsoft.com/en-us/library/ff539234(v=VS.85).aspx]]
|
||||
|
||||
[6] To put it in some other nice words, Windows failed to respond to
|
||||
any user input.
|
||||
|
||||
[7] You may find [[http://www.cygnal.org/ubb/Forum9/HTML/001050.html]]
|
||||
useful.
|
||||
|
||||
[8] http://www.nirsoft.net/utils/usb_devices_view.html
|
||||
|
||||
[9] [[http://msdn.microsoft.com/en-us/library/ff570620.aspx]]
|
@ -151,88 +151,23 @@ instructions below to install the host side driver.
|
||||
|
||||
Installing the Windows Host ACM Driver
|
||||
--------------------------------------
|
||||
To use the Windows ACM driver you must have the files "gserial.inf"
|
||||
and "usbser.sys" together in a folder on the Windows machine.
|
||||
|
||||
The "gserial.inf" file is given here.
|
||||
|
||||
-------------------- CUT HERE --------------------
|
||||
[Version]
|
||||
Signature="$Windows NT$"
|
||||
Class=Ports
|
||||
ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318}
|
||||
Provider=%LINUX%
|
||||
DriverVer=08/17/2004,0.0.2.0
|
||||
; Copyright (C) 2004 Al Borchers (alborchers@steinerpoint.com)
|
||||
|
||||
[Manufacturer]
|
||||
%LINUX%=GSerialDeviceList
|
||||
|
||||
[GSerialDeviceList]
|
||||
%GSERIAL%=GSerialInstall, USB\VID_0525&PID_A4A7
|
||||
|
||||
[DestinationDirs]
|
||||
DefaultDestDir=10,System32\Drivers
|
||||
|
||||
[GSerialInstall]
|
||||
CopyFiles=GSerialCopyFiles
|
||||
AddReg=GSerialAddReg
|
||||
|
||||
[GSerialCopyFiles]
|
||||
usbser.sys
|
||||
|
||||
[GSerialAddReg]
|
||||
HKR,,DevLoader,,*ntkern
|
||||
HKR,,NTMPDriver,,usbser.sys
|
||||
HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider"
|
||||
|
||||
[GSerialInstall.Services]
|
||||
AddService = usbser,0x0002,GSerialService
|
||||
|
||||
[GSerialService]
|
||||
DisplayName = %GSERIAL_DISPLAY_NAME%
|
||||
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
|
||||
StartType = 3 ; SERVICE_DEMAND_START
|
||||
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
|
||||
ServiceBinary = %10%\System32\Drivers\usbser.sys
|
||||
LoadOrderGroup = Base
|
||||
|
||||
[Strings]
|
||||
LINUX = "Linux"
|
||||
GSERIAL = "Gadget Serial"
|
||||
GSERIAL_DISPLAY_NAME = "USB Gadget Serial Driver"
|
||||
-------------------- CUT HERE --------------------
|
||||
|
||||
The "usbser.sys" file comes with various versions of Windows.
|
||||
For example, it can be found on Windows XP typically in
|
||||
|
||||
C:\WINDOWS\Driver Cache\i386\driver.cab
|
||||
|
||||
Or it can be found on the Windows 98SE CD in the "win98" folder
|
||||
in the "DRIVER11.CAB" through "DRIVER20.CAB" cab files. You will
|
||||
need the DOS "expand" program, the Cygwin "cabextract" program, or
|
||||
a similar program to unpack these cab files and extract "usbser.sys".
|
||||
|
||||
For example, to extract "usbser.sys" into the current directory
|
||||
on Windows XP, open a DOS window and run a command like
|
||||
|
||||
expand C:\WINDOWS\Driver~1\i386\driver.cab -F:usbser.sys .
|
||||
|
||||
(Thanks to Nishant Kamat for pointing out this DOS command.)
|
||||
To use the Windows ACM driver you must have the "linux-cdc-acm.inf"
|
||||
file (provided along this document) which supports all recent versions
|
||||
of Windows.
|
||||
|
||||
When the gadget serial driver is loaded and the USB device connected
|
||||
to the Windows host with a USB cable, Windows should recognize the
|
||||
gadget serial device and ask for a driver. Tell Windows to find the
|
||||
driver in the folder that contains "gserial.inf" and "usbser.sys".
|
||||
driver in the folder that contains the "linux-cdc-acm.inf" file.
|
||||
|
||||
For example, on Windows XP, when the gadget serial device is first
|
||||
plugged in, the "Found New Hardware Wizard" starts up. Select
|
||||
"Install from a list or specific location (Advanced)", then on
|
||||
the next screen select "Include this location in the search" and
|
||||
enter the path or browse to the folder containing "gserial.inf" and
|
||||
"usbser.sys". Windows will complain that the Gadget Serial driver
|
||||
has not passed Windows Logo testing, but select "Continue anyway"
|
||||
and finish the driver installation.
|
||||
"Install from a list or specific location (Advanced)", then on the
|
||||
next screen select "Include this location in the search" and enter the
|
||||
path or browse to the folder containing the "linux-cdc-acm.inf" file.
|
||||
Windows will complain that the Gadget Serial driver has not passed
|
||||
Windows Logo testing, but select "Continue anyway" and finish the
|
||||
driver installation.
|
||||
|
||||
On Windows XP, in the "Device Manager" (under "Control Panel",
|
||||
"System", "Hardware") expand the "Ports (COM & LPT)" entry and you
|
||||
@ -345,5 +280,3 @@ you should be able to send data back and forth between the gadget
|
||||
side and host side systems. Anything you type on the terminal
|
||||
window on the gadget side should appear in the terminal window on
|
||||
the host side and vice versa.
|
||||
|
||||
|
||||
|
@ -10,7 +10,7 @@ immediately usable. That means the system must do many things, including:
|
||||
|
||||
- Bind a driver to that device. Bus frameworks do that using a
|
||||
device driver's probe() routine.
|
||||
|
||||
|
||||
- Tell other subsystems to configure the new device. Print
|
||||
queues may need to be enabled, networks brought up, disk
|
||||
partitions mounted, and so on. In some cases these will
|
||||
@ -84,7 +84,7 @@ USB MODUTILS SUPPORT
|
||||
Current versions of module-init-tools will create a "modules.usbmap" file
|
||||
which contains the entries from each driver's MODULE_DEVICE_TABLE. Such
|
||||
files can be used by various user mode policy agents to make sure all the
|
||||
right driver modules get loaded, either at boot time or later.
|
||||
right driver modules get loaded, either at boot time or later.
|
||||
|
||||
See <linux/usb.h> for full information about such table entries; or look
|
||||
at existing drivers. Each table entry describes one or more criteria to
|
||||
|
107
Documentation/usb/linux-cdc-acm.inf
Normal file
107
Documentation/usb/linux-cdc-acm.inf
Normal file
@ -0,0 +1,107 @@
|
||||
; Windows USB CDC ACM Setup File
|
||||
|
||||
; Based on INF template which was:
|
||||
; Copyright (c) 2000 Microsoft Corporation
|
||||
; Copyright (c) 2007 Microchip Technology Inc.
|
||||
; likely to be covered by the MLPL as found at:
|
||||
; <http://msdn.microsoft.com/en-us/cc300389.aspx#MLPL>.
|
||||
; For use only on Windows operating systems.
|
||||
|
||||
[Version]
|
||||
Signature="$Windows NT$"
|
||||
Class=Ports
|
||||
ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318}
|
||||
Provider=%Linux%
|
||||
DriverVer=11/15/2007,5.1.2600.0
|
||||
|
||||
[Manufacturer]
|
||||
%Linux%=DeviceList, NTamd64
|
||||
|
||||
[DestinationDirs]
|
||||
DefaultDestDir=12
|
||||
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
; Windows 2000/XP/Vista-32bit Sections
|
||||
;------------------------------------------------------------------------------
|
||||
|
||||
[DriverInstall.nt]
|
||||
include=mdmcpq.inf
|
||||
CopyFiles=DriverCopyFiles.nt
|
||||
AddReg=DriverInstall.nt.AddReg
|
||||
|
||||
[DriverCopyFiles.nt]
|
||||
usbser.sys,,,0x20
|
||||
|
||||
[DriverInstall.nt.AddReg]
|
||||
HKR,,DevLoader,,*ntkern
|
||||
HKR,,NTMPDriver,,USBSER.sys
|
||||
HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider"
|
||||
|
||||
[DriverInstall.nt.Services]
|
||||
AddService=usbser, 0x00000002, DriverService.nt
|
||||
|
||||
[DriverService.nt]
|
||||
DisplayName=%SERVICE%
|
||||
ServiceType=1
|
||||
StartType=3
|
||||
ErrorControl=1
|
||||
ServiceBinary=%12%\USBSER.sys
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
; Vista-64bit Sections
|
||||
;------------------------------------------------------------------------------
|
||||
|
||||
[DriverInstall.NTamd64]
|
||||
include=mdmcpq.inf
|
||||
CopyFiles=DriverCopyFiles.NTamd64
|
||||
AddReg=DriverInstall.NTamd64.AddReg
|
||||
|
||||
[DriverCopyFiles.NTamd64]
|
||||
USBSER.sys,,,0x20
|
||||
|
||||
[DriverInstall.NTamd64.AddReg]
|
||||
HKR,,DevLoader,,*ntkern
|
||||
HKR,,NTMPDriver,,USBSER.sys
|
||||
HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider"
|
||||
|
||||
[DriverInstall.NTamd64.Services]
|
||||
AddService=usbser, 0x00000002, DriverService.NTamd64
|
||||
|
||||
[DriverService.NTamd64]
|
||||
DisplayName=%SERVICE%
|
||||
ServiceType=1
|
||||
StartType=3
|
||||
ErrorControl=1
|
||||
ServiceBinary=%12%\USBSER.sys
|
||||
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
; Vendor and Product ID Definitions
|
||||
;------------------------------------------------------------------------------
|
||||
; When developing your USB device, the VID and PID used in the PC side
|
||||
; application program and the firmware on the microcontroller must match.
|
||||
; Modify the below line to use your VID and PID. Use the format as shown
|
||||
; below.
|
||||
; Note: One INF file can be used for multiple devices with different
|
||||
; VID and PIDs. For each supported device, append
|
||||
; ",USB\VID_xxxx&PID_yyyy" to the end of the line.
|
||||
;------------------------------------------------------------------------------
|
||||
[SourceDisksFiles]
|
||||
[SourceDisksNames]
|
||||
[DeviceList]
|
||||
%DESCRIPTION%=DriverInstall, USB\VID_0525&PID_A4A7, USB\VID_0525&PID_A4AB&MI_02
|
||||
|
||||
[DeviceList.NTamd64]
|
||||
%DESCRIPTION%=DriverInstall, USB\VID_0525&PID_A4A7, USB\VID_0525&PID_A4AB&MI_02
|
||||
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
; String Definitions
|
||||
;------------------------------------------------------------------------------
|
||||
;Modify these strings to customize your device
|
||||
;------------------------------------------------------------------------------
|
||||
[Strings]
|
||||
Linux = "Linux Developer Community"
|
||||
DESCRIPTION = "Gadget Serial"
|
||||
SERVICE = "USB RS-232 Emulation Driver"
|
@ -1,200 +1,66 @@
|
||||
; MS-Windows driver config matching some basic modes of the
|
||||
; Linux-USB Ethernet/RNDIS gadget firmware:
|
||||
;
|
||||
; - RNDIS plus CDC Ethernet ... this may be familiar as a DOCSIS
|
||||
; cable modem profile, and supports most non-Microsoft USB hosts
|
||||
;
|
||||
; - RNDIS plus CDC Subset ... used by hardware that incapable of
|
||||
; full CDC Ethernet support.
|
||||
;
|
||||
; Microsoft only directly supports RNDIS drivers, and bundled them into XP.
|
||||
; The Microsoft "Remote NDIS USB Driver Kit" is currently found at:
|
||||
; http://www.microsoft.com/whdc/device/network/ndis/rmndis.mspx
|
||||
|
||||
; Based on template INF file found at
|
||||
; <http://msdn.microsoft.com/en-us/library/ff570620.aspx>
|
||||
; which was:
|
||||
; Copyright (c) Microsoft Corporation
|
||||
; and released under the MLPL as found at:
|
||||
; <http://msdn.microsoft.com/en-us/cc300389.aspx#MLPL>.
|
||||
; For use only on Windows operating systems.
|
||||
|
||||
[Version]
|
||||
Signature = "$CHICAGO$"
|
||||
Signature = "$Windows NT$"
|
||||
Class = Net
|
||||
ClassGUID = {4d36e972-e325-11ce-bfc1-08002be10318}
|
||||
Provider = %Linux%
|
||||
Compatible = 1
|
||||
MillenniumPreferred = .ME
|
||||
DriverVer = 03/30/2004,0.0.0.0
|
||||
; catalog file would be used by WHQL
|
||||
;CatalogFile = Linux.cat
|
||||
DriverVer = 06/21/2006,6.0.6000.16384
|
||||
|
||||
[Manufacturer]
|
||||
%Linux% = LinuxDevices,NT.5.1
|
||||
%Linux% = LinuxDevices,NTx86,NTamd64,NTia64
|
||||
|
||||
[LinuxDevices]
|
||||
; NetChip IDs, used by both firmware modes
|
||||
%LinuxDevice% = RNDIS, USB\VID_0525&PID_a4a2
|
||||
; Decoration for x86 architecture
|
||||
[LinuxDevices.NTx86]
|
||||
%LinuxDevice% = RNDIS.NT.5.1, USB\VID_0525&PID_a4a2, USB\VID_0525&PID_a4ab&MI_00
|
||||
|
||||
[LinuxDevices.NT.5.1]
|
||||
%LinuxDevice% = RNDIS.NT.5.1, USB\VID_0525&PID_a4a2
|
||||
; Decoration for x64 architecture
|
||||
[LinuxDevices.NTamd64]
|
||||
%LinuxDevice% = RNDIS.NT.5.1, USB\VID_0525&PID_a4a2, USB\VID_0525&PID_a4ab&MI_00
|
||||
|
||||
; Decoration for ia64 architecture
|
||||
[LinuxDevices.NTia64]
|
||||
%LinuxDevice% = RNDIS.NT.5.1, USB\VID_0525&PID_a4a2, USB\VID_0525&PID_a4ab&MI_00
|
||||
|
||||
;@@@ This is the common setting for setup
|
||||
[ControlFlags]
|
||||
ExcludeFromSelect=*
|
||||
|
||||
; Windows 98, Windows 98 Second Edition specific sections --------
|
||||
|
||||
[RNDIS]
|
||||
DeviceID = usb8023
|
||||
MaxInstance = 512
|
||||
DriverVer = 03/30/2004,0.0.0.0
|
||||
AddReg = RNDIS_AddReg_98, RNDIS_AddReg_Common
|
||||
|
||||
[RNDIS_AddReg_98]
|
||||
HKR, , DevLoader, 0, *ndis
|
||||
HKR, , DeviceVxDs, 0, usb8023.sys
|
||||
HKR, NDIS, LogDriverName, 0, "usb8023"
|
||||
HKR, NDIS, MajorNdisVersion, 1, 5
|
||||
HKR, NDIS, MinorNdisVersion, 1, 0
|
||||
HKR, Ndi\Interfaces, DefUpper, 0, "ndis3,ndis4,ndis5"
|
||||
HKR, Ndi\Interfaces, DefLower, 0, "ethernet"
|
||||
HKR, Ndi\Interfaces, UpperRange, 0, "ndis3,ndis4,ndis5"
|
||||
HKR, Ndi\Interfaces, LowerRange, 0, "ethernet"
|
||||
HKR, Ndi\Install, ndis3, 0, "RNDIS_Install_98"
|
||||
HKR, Ndi\Install, ndis4, 0, "RNDIS_Install_98"
|
||||
HKR, Ndi\Install, ndis5, 0, "RNDIS_Install_98"
|
||||
HKR, Ndi, DeviceId, 0, "USB\VID_0525&PID_a4a2"
|
||||
|
||||
[RNDIS_Install_98]
|
||||
CopyFiles=RNDIS_CopyFiles_98
|
||||
|
||||
[RNDIS_CopyFiles_98]
|
||||
usb8023.sys, usb8023w.sys, , 0
|
||||
rndismp.sys, rndismpw.sys, , 0
|
||||
|
||||
; Windows Millennium Edition specific sections --------------------
|
||||
|
||||
[RNDIS.ME]
|
||||
DeviceID = usb8023
|
||||
MaxInstance = 512
|
||||
DriverVer = 03/30/2004,0.0.0.0
|
||||
AddReg = RNDIS_AddReg_ME, RNDIS_AddReg_Common
|
||||
Characteristics = 0x84 ; NCF_PHYSICAL + NCF_HAS_UI
|
||||
BusType = 15
|
||||
|
||||
[RNDIS_AddReg_ME]
|
||||
HKR, , DevLoader, 0, *ndis
|
||||
HKR, , DeviceVxDs, 0, usb8023.sys
|
||||
HKR, NDIS, LogDriverName, 0, "usb8023"
|
||||
HKR, NDIS, MajorNdisVersion, 1, 5
|
||||
HKR, NDIS, MinorNdisVersion, 1, 0
|
||||
HKR, Ndi\Interfaces, DefUpper, 0, "ndis3,ndis4,ndis5"
|
||||
HKR, Ndi\Interfaces, DefLower, 0, "ethernet"
|
||||
HKR, Ndi\Interfaces, UpperRange, 0, "ndis3,ndis4,ndis5"
|
||||
HKR, Ndi\Interfaces, LowerRange, 0, "ethernet"
|
||||
HKR, Ndi\Install, ndis3, 0, "RNDIS_Install_ME"
|
||||
HKR, Ndi\Install, ndis4, 0, "RNDIS_Install_ME"
|
||||
HKR, Ndi\Install, ndis5, 0, "RNDIS_Install_ME"
|
||||
HKR, Ndi, DeviceId, 0, "USB\VID_0525&PID_a4a2"
|
||||
|
||||
[RNDIS_Install_ME]
|
||||
CopyFiles=RNDIS_CopyFiles_ME
|
||||
|
||||
[RNDIS_CopyFiles_ME]
|
||||
usb8023.sys, usb8023m.sys, , 0
|
||||
rndismp.sys, rndismpm.sys, , 0
|
||||
|
||||
; Windows 2000 specific sections ---------------------------------
|
||||
|
||||
[RNDIS.NT]
|
||||
Characteristics = 0x84 ; NCF_PHYSICAL + NCF_HAS_UI
|
||||
BusType = 15
|
||||
DriverVer = 03/30/2004,0.0.0.0
|
||||
AddReg = RNDIS_AddReg_NT, RNDIS_AddReg_Common
|
||||
CopyFiles = RNDIS_CopyFiles_NT
|
||||
|
||||
[RNDIS.NT.Services]
|
||||
AddService = USB_RNDIS, 2, RNDIS_ServiceInst_NT, RNDIS_EventLog
|
||||
|
||||
[RNDIS_CopyFiles_NT]
|
||||
; no rename of files on Windows 2000, use the 'k' names as is
|
||||
usb8023k.sys, , , 0
|
||||
rndismpk.sys, , , 0
|
||||
|
||||
[RNDIS_ServiceInst_NT]
|
||||
DisplayName = %ServiceDisplayName%
|
||||
ServiceType = 1
|
||||
StartType = 3
|
||||
ErrorControl = 1
|
||||
ServiceBinary = %12%\usb8023k.sys
|
||||
LoadOrderGroup = NDIS
|
||||
AddReg = RNDIS_WMI_AddReg_NT
|
||||
|
||||
[RNDIS_WMI_AddReg_NT]
|
||||
HKR, , MofImagePath, 0x00020000, "System32\drivers\rndismpk.sys"
|
||||
|
||||
; Windows XP specific sections -----------------------------------
|
||||
|
||||
; DDInstall section
|
||||
; References the in-build Netrndis.inf
|
||||
[RNDIS.NT.5.1]
|
||||
Characteristics = 0x84 ; NCF_PHYSICAL + NCF_HAS_UI
|
||||
BusType = 15
|
||||
DriverVer = 03/30/2004,0.0.0.0
|
||||
AddReg = RNDIS_AddReg_NT, RNDIS_AddReg_Common
|
||||
; no copyfiles - the files are already in place
|
||||
Characteristics = 0x84 ; NCF_PHYSICAL + NCF_HAS_UI
|
||||
BusType = 15
|
||||
; NEVER REMOVE THE FOLLOWING REFERENCE FOR NETRNDIS.INF
|
||||
include = netrndis.inf
|
||||
needs = Usb_Rndis.ndi
|
||||
AddReg = Rndis_AddReg_Vista
|
||||
|
||||
; DDInstal.Services section
|
||||
[RNDIS.NT.5.1.Services]
|
||||
AddService = USB_RNDIS, 2, RNDIS_ServiceInst_51, RNDIS_EventLog
|
||||
include = netrndis.inf
|
||||
needs = Usb_Rndis.ndi.Services
|
||||
|
||||
[RNDIS_ServiceInst_51]
|
||||
DisplayName = %ServiceDisplayName%
|
||||
ServiceType = 1
|
||||
StartType = 3
|
||||
ErrorControl = 1
|
||||
ServiceBinary = %12%\usb8023.sys
|
||||
LoadOrderGroup = NDIS
|
||||
AddReg = RNDIS_WMI_AddReg_51
|
||||
; Optional registry settings. You can modify as needed.
|
||||
[RNDIS_AddReg_Vista]
|
||||
HKR, NDI\params\VistaProperty, ParamDesc, 0, %Vista_Property%
|
||||
HKR, NDI\params\VistaProperty, type, 0, "edit"
|
||||
HKR, NDI\params\VistaProperty, LimitText, 0, "12"
|
||||
HKR, NDI\params\VistaProperty, UpperCase, 0, "1"
|
||||
HKR, NDI\params\VistaProperty, default, 0, " "
|
||||
HKR, NDI\params\VistaProperty, optional, 0, "1"
|
||||
|
||||
[RNDIS_WMI_AddReg_51]
|
||||
HKR, , MofImagePath, 0x00020000, "System32\drivers\rndismp.sys"
|
||||
|
||||
; Windows 2000 and Windows XP common sections --------------------
|
||||
|
||||
[RNDIS_AddReg_NT]
|
||||
HKR, Ndi, Service, 0, "USB_RNDIS"
|
||||
HKR, Ndi\Interfaces, UpperRange, 0, "ndis5"
|
||||
HKR, Ndi\Interfaces, LowerRange, 0, "ethernet"
|
||||
|
||||
[RNDIS_EventLog]
|
||||
AddReg = RNDIS_EventLog_AddReg
|
||||
|
||||
[RNDIS_EventLog_AddReg]
|
||||
HKR, , EventMessageFile, 0x00020000, "%%SystemRoot%%\System32\netevent.dll"
|
||||
HKR, , TypesSupported, 0x00010001, 7
|
||||
|
||||
; Common Sections -------------------------------------------------
|
||||
|
||||
[RNDIS_AddReg_Common]
|
||||
HKR, NDI\params\NetworkAddress, ParamDesc, 0, %NetworkAddress%
|
||||
HKR, NDI\params\NetworkAddress, type, 0, "edit"
|
||||
HKR, NDI\params\NetworkAddress, LimitText, 0, "12"
|
||||
HKR, NDI\params\NetworkAddress, UpperCase, 0, "1"
|
||||
HKR, NDI\params\NetworkAddress, default, 0, " "
|
||||
HKR, NDI\params\NetworkAddress, optional, 0, "1"
|
||||
|
||||
[SourceDisksNames]
|
||||
1=%SourceDisk%,,1
|
||||
|
||||
[SourceDisksFiles]
|
||||
usb8023m.sys=1
|
||||
rndismpm.sys=1
|
||||
usb8023w.sys=1
|
||||
rndismpw.sys=1
|
||||
usb8023k.sys=1
|
||||
rndismpk.sys=1
|
||||
|
||||
[DestinationDirs]
|
||||
RNDIS_CopyFiles_98 = 10, system32/drivers
|
||||
RNDIS_CopyFiles_ME = 10, system32/drivers
|
||||
RNDIS_CopyFiles_NT = 12
|
||||
; No sys copyfiles - the sys files are already in-build
|
||||
; (part of the operating system).
|
||||
; We do not support XP SP1-, 2003 SP1-, ME, 9x.
|
||||
|
||||
[Strings]
|
||||
ServiceDisplayName = "USB Remote NDIS Network Device Driver"
|
||||
NetworkAddress = "Network Address"
|
||||
Linux = "Linux Developer Community"
|
||||
LinuxDevice = "Linux USB Ethernet/RNDIS Gadget"
|
||||
SourceDisk = "Ethernet/RNDIS Gadget Driver Install Disk"
|
||||
|
||||
Vista_Property = "Optional Vista Property"
|
||||
|
648
Documentation/video4linux/v4l2-controls.txt
Normal file
648
Documentation/video4linux/v4l2-controls.txt
Normal file
@ -0,0 +1,648 @@
|
||||
Introduction
|
||||
============
|
||||
|
||||
The V4L2 control API seems simple enough, but quickly becomes very hard to
|
||||
implement correctly in drivers. But much of the code needed to handle controls
|
||||
is actually not driver specific and can be moved to the V4L core framework.
|
||||
|
||||
After all, the only part that a driver developer is interested in is:
|
||||
|
||||
1) How do I add a control?
|
||||
2) How do I set the control's value? (i.e. s_ctrl)
|
||||
|
||||
And occasionally:
|
||||
|
||||
3) How do I get the control's value? (i.e. g_volatile_ctrl)
|
||||
4) How do I validate the user's proposed control value? (i.e. try_ctrl)
|
||||
|
||||
All the rest is something that can be done centrally.
|
||||
|
||||
The control framework was created in order to implement all the rules of the
|
||||
V4L2 specification with respect to controls in a central place. And to make
|
||||
life as easy as possible for the driver developer.
|
||||
|
||||
Note that the control framework relies on the presence of a struct v4l2_device
|
||||
for V4L2 drivers and struct v4l2_subdev for sub-device drivers.
|
||||
|
||||
|
||||
Objects in the framework
|
||||
========================
|
||||
|
||||
There are two main objects:
|
||||
|
||||
The v4l2_ctrl object describes the control properties and keeps track of the
|
||||
control's value (both the current value and the proposed new value).
|
||||
|
||||
v4l2_ctrl_handler is the object that keeps track of controls. It maintains a
|
||||
list of v4l2_ctrl objects that it owns and another list of references to
|
||||
controls, possibly to controls owned by other handlers.
|
||||
|
||||
|
||||
Basic usage for V4L2 and sub-device drivers
|
||||
===========================================
|
||||
|
||||
1) Prepare the driver:
|
||||
|
||||
1.1) Add the handler to your driver's top-level struct:
|
||||
|
||||
struct foo_dev {
|
||||
...
|
||||
struct v4l2_ctrl_handler ctrl_handler;
|
||||
...
|
||||
};
|
||||
|
||||
struct foo_dev *foo;
|
||||
|
||||
1.2) Initialize the handler:
|
||||
|
||||
v4l2_ctrl_handler_init(&foo->ctrl_handler, nr_of_controls);
|
||||
|
||||
The second argument is a hint telling the function how many controls this
|
||||
handler is expected to handle. It will allocate a hashtable based on this
|
||||
information. It is a hint only.
|
||||
|
||||
1.3) Hook the control handler into the driver:
|
||||
|
||||
1.3.1) For V4L2 drivers do this:
|
||||
|
||||
struct foo_dev {
|
||||
...
|
||||
struct v4l2_device v4l2_dev;
|
||||
...
|
||||
struct v4l2_ctrl_handler ctrl_handler;
|
||||
...
|
||||
};
|
||||
|
||||
foo->v4l2_dev.ctrl_handler = &foo->ctrl_handler;
|
||||
|
||||
Where foo->v4l2_dev is of type struct v4l2_device.
|
||||
|
||||
Finally, remove all control functions from your v4l2_ioctl_ops:
|
||||
vidioc_queryctrl, vidioc_querymenu, vidioc_g_ctrl, vidioc_s_ctrl,
|
||||
vidioc_g_ext_ctrls, vidioc_try_ext_ctrls and vidioc_s_ext_ctrls.
|
||||
Those are now no longer needed.
|
||||
|
||||
1.3.2) For sub-device drivers do this:
|
||||
|
||||
struct foo_dev {
|
||||
...
|
||||
struct v4l2_subdev sd;
|
||||
...
|
||||
struct v4l2_ctrl_handler ctrl_handler;
|
||||
...
|
||||
};
|
||||
|
||||
foo->sd.ctrl_handler = &foo->ctrl_handler;
|
||||
|
||||
Where foo->sd is of type struct v4l2_subdev.
|
||||
|
||||
And set all core control ops in your struct v4l2_subdev_core_ops to these
|
||||
helpers:
|
||||
|
||||
.queryctrl = v4l2_subdev_queryctrl,
|
||||
.querymenu = v4l2_subdev_querymenu,
|
||||
.g_ctrl = v4l2_subdev_g_ctrl,
|
||||
.s_ctrl = v4l2_subdev_s_ctrl,
|
||||
.g_ext_ctrls = v4l2_subdev_g_ext_ctrls,
|
||||
.try_ext_ctrls = v4l2_subdev_try_ext_ctrls,
|
||||
.s_ext_ctrls = v4l2_subdev_s_ext_ctrls,
|
||||
|
||||
Note: this is a temporary solution only. Once all V4L2 drivers that depend
|
||||
on subdev drivers are converted to the control framework these helpers will
|
||||
no longer be needed.
|
||||
|
||||
1.4) Clean up the handler at the end:
|
||||
|
||||
v4l2_ctrl_handler_free(&foo->ctrl_handler);
|
||||
|
||||
|
||||
2) Add controls:
|
||||
|
||||
You add non-menu controls by calling v4l2_ctrl_new_std:
|
||||
|
||||
struct v4l2_ctrl *v4l2_ctrl_new_std(struct v4l2_ctrl_handler *hdl,
|
||||
const struct v4l2_ctrl_ops *ops,
|
||||
u32 id, s32 min, s32 max, u32 step, s32 def);
|
||||
|
||||
Menu controls are added by calling v4l2_ctrl_new_std_menu:
|
||||
|
||||
struct v4l2_ctrl *v4l2_ctrl_new_std_menu(struct v4l2_ctrl_handler *hdl,
|
||||
const struct v4l2_ctrl_ops *ops,
|
||||
u32 id, s32 max, s32 skip_mask, s32 def);
|
||||
|
||||
These functions are typically called right after the v4l2_ctrl_handler_init:
|
||||
|
||||
v4l2_ctrl_handler_init(&foo->ctrl_handler, nr_of_controls);
|
||||
v4l2_ctrl_new_std(&foo->ctrl_handler, &foo_ctrl_ops,
|
||||
V4L2_CID_BRIGHTNESS, 0, 255, 1, 128);
|
||||
v4l2_ctrl_new_std(&foo->ctrl_handler, &foo_ctrl_ops,
|
||||
V4L2_CID_CONTRAST, 0, 255, 1, 128);
|
||||
v4l2_ctrl_new_std_menu(&foo->ctrl_handler, &foo_ctrl_ops,
|
||||
V4L2_CID_POWER_LINE_FREQUENCY,
|
||||
V4L2_CID_POWER_LINE_FREQUENCY_60HZ, 0,
|
||||
V4L2_CID_POWER_LINE_FREQUENCY_DISABLED);
|
||||
...
|
||||
if (foo->ctrl_handler.error) {
|
||||
int err = foo->ctrl_handler.error;
|
||||
|
||||
v4l2_ctrl_handler_free(&foo->ctrl_handler);
|
||||
return err;
|
||||
}
|
||||
|
||||
The v4l2_ctrl_new_std function returns the v4l2_ctrl pointer to the new
|
||||
control, but if you do not need to access the pointer outside the control ops,
|
||||
then there is no need to store it.
|
||||
|
||||
The v4l2_ctrl_new_std function will fill in most fields based on the control
|
||||
ID except for the min, max, step and default values. These are passed in the
|
||||
last four arguments. These values are driver specific while control attributes
|
||||
like type, name, flags are all global. The control's current value will be set
|
||||
to the default value.
|
||||
|
||||
The v4l2_ctrl_new_std_menu function is very similar but it is used for menu
|
||||
controls. There is no min argument since that is always 0 for menu controls,
|
||||
and instead of a step there is a skip_mask argument: if bit X is 1, then menu
|
||||
item X is skipped.
|
||||
|
||||
Note that if something fails, the function will return NULL or an error and
|
||||
set ctrl_handler->error to the error code. If ctrl_handler->error was already
|
||||
set, then it will just return and do nothing. This is also true for
|
||||
v4l2_ctrl_handler_init if it cannot allocate the internal data structure.
|
||||
|
||||
This makes it easy to init the handler and just add all controls and only check
|
||||
the error code at the end. Saves a lot of repetitive error checking.
|
||||
|
||||
It is recommended to add controls in ascending control ID order: it will be
|
||||
a bit faster that way.
|
||||
|
||||
3) Optionally force initial control setup:
|
||||
|
||||
v4l2_ctrl_handler_setup(&foo->ctrl_handler);
|
||||
|
||||
This will call s_ctrl for all controls unconditionally. Effectively this
|
||||
initializes the hardware to the default control values. It is recommended
|
||||
that you do this as this ensures that both the internal data structures and
|
||||
the hardware are in sync.
|
||||
|
||||
4) Finally: implement the v4l2_ctrl_ops
|
||||
|
||||
static const struct v4l2_ctrl_ops foo_ctrl_ops = {
|
||||
.s_ctrl = foo_s_ctrl,
|
||||
};
|
||||
|
||||
Usually all you need is s_ctrl:
|
||||
|
||||
static int foo_s_ctrl(struct v4l2_ctrl *ctrl)
|
||||
{
|
||||
struct foo *state = container_of(ctrl->handler, struct foo, ctrl_handler);
|
||||
|
||||
switch (ctrl->id) {
|
||||
case V4L2_CID_BRIGHTNESS:
|
||||
write_reg(0x123, ctrl->val);
|
||||
break;
|
||||
case V4L2_CID_CONTRAST:
|
||||
write_reg(0x456, ctrl->val);
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
The control ops are called with the v4l2_ctrl pointer as argument.
|
||||
The new control value has already been validated, so all you need to do is
|
||||
to actually update the hardware registers.
|
||||
|
||||
You're done! And this is sufficient for most of the drivers we have. No need
|
||||
to do any validation of control values, or implement QUERYCTRL/QUERYMENU. And
|
||||
G/S_CTRL as well as G/TRY/S_EXT_CTRLS are automatically supported.
|
||||
|
||||
|
||||
==============================================================================
|
||||
|
||||
The remainder of this document deals with more advanced topics and scenarios.
|
||||
In practice the basic usage as described above is sufficient for most drivers.
|
||||
|
||||
===============================================================================
|
||||
|
||||
|
||||
Inheriting Controls
|
||||
===================
|
||||
|
||||
When a sub-device is registered with a V4L2 driver by calling
|
||||
v4l2_device_register_subdev() and the ctrl_handler fields of both v4l2_subdev
|
||||
and v4l2_device are set, then the controls of the subdev will become
|
||||
automatically available in the V4L2 driver as well. If the subdev driver
|
||||
contains controls that already exist in the V4L2 driver, then those will be
|
||||
skipped (so a V4L2 driver can always override a subdev control).
|
||||
|
||||
What happens here is that v4l2_device_register_subdev() calls
|
||||
v4l2_ctrl_add_handler() adding the controls of the subdev to the controls
|
||||
of v4l2_device.
|
||||
|
||||
|
||||
Accessing Control Values
|
||||
========================
|
||||
|
||||
The v4l2_ctrl struct contains these two unions:
|
||||
|
||||
/* The current control value. */
|
||||
union {
|
||||
s32 val;
|
||||
s64 val64;
|
||||
char *string;
|
||||
} cur;
|
||||
|
||||
/* The new control value. */
|
||||
union {
|
||||
s32 val;
|
||||
s64 val64;
|
||||
char *string;
|
||||
};
|
||||
|
||||
Within the control ops you can freely use these. The val and val64 speak for
|
||||
themselves. The string pointers point to character buffers of length
|
||||
ctrl->maximum + 1, and are always 0-terminated.
|
||||
|
||||
In most cases 'cur' contains the current cached control value. When you create
|
||||
a new control this value is made identical to the default value. After calling
|
||||
v4l2_ctrl_handler_setup() this value is passed to the hardware. It is generally
|
||||
a good idea to call this function.
|
||||
|
||||
Whenever a new value is set that new value is automatically cached. This means
|
||||
that most drivers do not need to implement the g_volatile_ctrl() op. The
|
||||
exception is for controls that return a volatile register such as a signal
|
||||
strength read-out that changes continuously. In that case you will need to
|
||||
implement g_volatile_ctrl like this:
|
||||
|
||||
static int foo_g_volatile_ctrl(struct v4l2_ctrl *ctrl)
|
||||
{
|
||||
switch (ctrl->id) {
|
||||
case V4L2_CID_BRIGHTNESS:
|
||||
ctrl->cur.val = read_reg(0x123);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
The 'new value' union is not used in g_volatile_ctrl. In general controls
|
||||
that need to implement g_volatile_ctrl are read-only controls.
|
||||
|
||||
To mark a control as volatile you have to set the is_volatile flag:
|
||||
|
||||
ctrl = v4l2_ctrl_new_std(&sd->ctrl_handler, ...);
|
||||
if (ctrl)
|
||||
ctrl->is_volatile = 1;
|
||||
|
||||
For try/s_ctrl the new values (i.e. as passed by the user) are filled in and
|
||||
you can modify them in try_ctrl or set them in s_ctrl. The 'cur' union
|
||||
contains the current value, which you can use (but not change!) as well.
|
||||
|
||||
If s_ctrl returns 0 (OK), then the control framework will copy the new final
|
||||
values to the 'cur' union.
|
||||
|
||||
While in g_volatile/s/try_ctrl you can access the value of all controls owned
|
||||
by the same handler since the handler's lock is held. If you need to access
|
||||
the value of controls owned by other handlers, then you have to be very careful
|
||||
not to introduce deadlocks.
|
||||
|
||||
Outside of the control ops you have to go through to helper functions to get
|
||||
or set a single control value safely in your driver:
|
||||
|
||||
s32 v4l2_ctrl_g_ctrl(struct v4l2_ctrl *ctrl);
|
||||
int v4l2_ctrl_s_ctrl(struct v4l2_ctrl *ctrl, s32 val);
|
||||
|
||||
These functions go through the control framework just as VIDIOC_G/S_CTRL ioctls
|
||||
do. Don't use these inside the control ops g_volatile/s/try_ctrl, though, that
|
||||
will result in a deadlock since these helpers lock the handler as well.
|
||||
|
||||
You can also take the handler lock yourself:
|
||||
|
||||
mutex_lock(&state->ctrl_handler.lock);
|
||||
printk(KERN_INFO "String value is '%s'\n", ctrl1->cur.string);
|
||||
printk(KERN_INFO "Integer value is '%s'\n", ctrl2->cur.val);
|
||||
mutex_unlock(&state->ctrl_handler.lock);
|
||||
|
||||
|
||||
Menu Controls
|
||||
=============
|
||||
|
||||
The v4l2_ctrl struct contains this union:
|
||||
|
||||
union {
|
||||
u32 step;
|
||||
u32 menu_skip_mask;
|
||||
};
|
||||
|
||||
For menu controls menu_skip_mask is used. What it does is that it allows you
|
||||
to easily exclude certain menu items. This is used in the VIDIOC_QUERYMENU
|
||||
implementation where you can return -EINVAL if a certain menu item is not
|
||||
present. Note that VIDIOC_QUERYCTRL always returns a step value of 1 for
|
||||
menu controls.
|
||||
|
||||
A good example is the MPEG Audio Layer II Bitrate menu control where the
|
||||
menu is a list of standardized possible bitrates. But in practice hardware
|
||||
implementations will only support a subset of those. By setting the skip
|
||||
mask you can tell the framework which menu items should be skipped. Setting
|
||||
it to 0 means that all menu items are supported.
|
||||
|
||||
You set this mask either through the v4l2_ctrl_config struct for a custom
|
||||
control, or by calling v4l2_ctrl_new_std_menu().
|
||||
|
||||
|
||||
Custom Controls
|
||||
===============
|
||||
|
||||
Driver specific controls can be created using v4l2_ctrl_new_custom():
|
||||
|
||||
static const struct v4l2_ctrl_config ctrl_filter = {
|
||||
.ops = &ctrl_custom_ops,
|
||||
.id = V4L2_CID_MPEG_CX2341X_VIDEO_SPATIAL_FILTER,
|
||||
.name = "Spatial Filter",
|
||||
.type = V4L2_CTRL_TYPE_INTEGER,
|
||||
.flags = V4L2_CTRL_FLAG_SLIDER,
|
||||
.max = 15,
|
||||
.step = 1,
|
||||
};
|
||||
|
||||
ctrl = v4l2_ctrl_new_custom(&foo->ctrl_handler, &ctrl_filter, NULL);
|
||||
|
||||
The last argument is the priv pointer which can be set to driver-specific
|
||||
private data.
|
||||
|
||||
The v4l2_ctrl_config struct also has fields to set the is_private and is_volatile
|
||||
flags.
|
||||
|
||||
If the name field is not set, then the framework will assume this is a standard
|
||||
control and will fill in the name, type and flags fields accordingly.
|
||||
|
||||
|
||||
Active and Grabbed Controls
|
||||
===========================
|
||||
|
||||
If you get more complex relationships between controls, then you may have to
|
||||
activate and deactivate controls. For example, if the Chroma AGC control is
|
||||
on, then the Chroma Gain control is inactive. That is, you may set it, but
|
||||
the value will not be used by the hardware as long as the automatic gain
|
||||
control is on. Typically user interfaces can disable such input fields.
|
||||
|
||||
You can set the 'active' status using v4l2_ctrl_activate(). By default all
|
||||
controls are active. Note that the framework does not check for this flag.
|
||||
It is meant purely for GUIs. The function is typically called from within
|
||||
s_ctrl.
|
||||
|
||||
The other flag is the 'grabbed' flag. A grabbed control means that you cannot
|
||||
change it because it is in use by some resource. Typical examples are MPEG
|
||||
bitrate controls that cannot be changed while capturing is in progress.
|
||||
|
||||
If a control is set to 'grabbed' using v4l2_ctrl_grab(), then the framework
|
||||
will return -EBUSY if an attempt is made to set this control. The
|
||||
v4l2_ctrl_grab() function is typically called from the driver when it
|
||||
starts or stops streaming.
|
||||
|
||||
|
||||
Control Clusters
|
||||
================
|
||||
|
||||
By default all controls are independent from the others. But in more
|
||||
complex scenarios you can get dependencies from one control to another.
|
||||
In that case you need to 'cluster' them:
|
||||
|
||||
struct foo {
|
||||
struct v4l2_ctrl_handler ctrl_handler;
|
||||
#define AUDIO_CL_VOLUME (0)
|
||||
#define AUDIO_CL_MUTE (1)
|
||||
struct v4l2_ctrl *audio_cluster[2];
|
||||
...
|
||||
};
|
||||
|
||||
state->audio_cluster[AUDIO_CL_VOLUME] =
|
||||
v4l2_ctrl_new_std(&state->ctrl_handler, ...);
|
||||
state->audio_cluster[AUDIO_CL_MUTE] =
|
||||
v4l2_ctrl_new_std(&state->ctrl_handler, ...);
|
||||
v4l2_ctrl_cluster(ARRAY_SIZE(state->audio_cluster), state->audio_cluster);
|
||||
|
||||
From now on whenever one or more of the controls belonging to the same
|
||||
cluster is set (or 'gotten', or 'tried'), only the control ops of the first
|
||||
control ('volume' in this example) is called. You effectively create a new
|
||||
composite control. Similar to how a 'struct' works in C.
|
||||
|
||||
So when s_ctrl is called with V4L2_CID_AUDIO_VOLUME as argument, you should set
|
||||
all two controls belonging to the audio_cluster:
|
||||
|
||||
static int foo_s_ctrl(struct v4l2_ctrl *ctrl)
|
||||
{
|
||||
struct foo *state = container_of(ctrl->handler, struct foo, ctrl_handler);
|
||||
|
||||
switch (ctrl->id) {
|
||||
case V4L2_CID_AUDIO_VOLUME: {
|
||||
struct v4l2_ctrl *mute = ctrl->cluster[AUDIO_CL_MUTE];
|
||||
|
||||
write_reg(0x123, mute->val ? 0 : ctrl->val);
|
||||
break;
|
||||
}
|
||||
case V4L2_CID_CONTRAST:
|
||||
write_reg(0x456, ctrl->val);
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
In the example above the following are equivalent for the VOLUME case:
|
||||
|
||||
ctrl == ctrl->cluster[AUDIO_CL_VOLUME] == state->audio_cluster[AUDIO_CL_VOLUME]
|
||||
ctrl->cluster[AUDIO_CL_MUTE] == state->audio_cluster[AUDIO_CL_MUTE]
|
||||
|
||||
Note that controls in a cluster may be NULL. For example, if for some
|
||||
reason mute was never added (because the hardware doesn't support that
|
||||
particular feature), then mute will be NULL. So in that case we have a
|
||||
cluster of 2 controls, of which only 1 is actually instantiated. The
|
||||
only restriction is that the first control of the cluster must always be
|
||||
present, since that is the 'master' control of the cluster. The master
|
||||
control is the one that identifies the cluster and that provides the
|
||||
pointer to the v4l2_ctrl_ops struct that is used for that cluster.
|
||||
|
||||
Obviously, all controls in the cluster array must be initialized to either
|
||||
a valid control or to NULL.
|
||||
|
||||
|
||||
VIDIOC_LOG_STATUS Support
|
||||
=========================
|
||||
|
||||
This ioctl allow you to dump the current status of a driver to the kernel log.
|
||||
The v4l2_ctrl_handler_log_status(ctrl_handler, prefix) can be used to dump the
|
||||
value of the controls owned by the given handler to the log. You can supply a
|
||||
prefix as well. If the prefix didn't end with a space, then ': ' will be added
|
||||
for you.
|
||||
|
||||
|
||||
Different Handlers for Different Video Nodes
|
||||
============================================
|
||||
|
||||
Usually the V4L2 driver has just one control handler that is global for
|
||||
all video nodes. But you can also specify different control handlers for
|
||||
different video nodes. You can do that by manually setting the ctrl_handler
|
||||
field of struct video_device.
|
||||
|
||||
That is no problem if there are no subdevs involved but if there are, then
|
||||
you need to block the automatic merging of subdev controls to the global
|
||||
control handler. You do that by simply setting the ctrl_handler field in
|
||||
struct v4l2_device to NULL. Now v4l2_device_register_subdev() will no longer
|
||||
merge subdev controls.
|
||||
|
||||
After each subdev was added, you will then have to call v4l2_ctrl_add_handler
|
||||
manually to add the subdev's control handler (sd->ctrl_handler) to the desired
|
||||
control handler. This control handler may be specific to the video_device or
|
||||
for a subset of video_device's. For example: the radio device nodes only have
|
||||
audio controls, while the video and vbi device nodes share the same control
|
||||
handler for the audio and video controls.
|
||||
|
||||
If you want to have one handler (e.g. for a radio device node) have a subset
|
||||
of another handler (e.g. for a video device node), then you should first add
|
||||
the controls to the first handler, add the other controls to the second
|
||||
handler and finally add the first handler to the second. For example:
|
||||
|
||||
v4l2_ctrl_new_std(&radio_ctrl_handler, &radio_ops, V4L2_CID_AUDIO_VOLUME, ...);
|
||||
v4l2_ctrl_new_std(&radio_ctrl_handler, &radio_ops, V4L2_CID_AUDIO_MUTE, ...);
|
||||
v4l2_ctrl_new_std(&video_ctrl_handler, &video_ops, V4L2_CID_BRIGHTNESS, ...);
|
||||
v4l2_ctrl_new_std(&video_ctrl_handler, &video_ops, V4L2_CID_CONTRAST, ...);
|
||||
v4l2_ctrl_add_handler(&video_ctrl_handler, &radio_ctrl_handler);
|
||||
|
||||
Or you can add specific controls to a handler:
|
||||
|
||||
volume = v4l2_ctrl_new_std(&video_ctrl_handler, &ops, V4L2_CID_AUDIO_VOLUME, ...);
|
||||
v4l2_ctrl_new_std(&video_ctrl_handler, &ops, V4L2_CID_BRIGHTNESS, ...);
|
||||
v4l2_ctrl_new_std(&video_ctrl_handler, &ops, V4L2_CID_CONTRAST, ...);
|
||||
v4l2_ctrl_add_ctrl(&radio_ctrl_handler, volume);
|
||||
|
||||
What you should not do is make two identical controls for two handlers.
|
||||
For example:
|
||||
|
||||
v4l2_ctrl_new_std(&radio_ctrl_handler, &radio_ops, V4L2_CID_AUDIO_MUTE, ...);
|
||||
v4l2_ctrl_new_std(&video_ctrl_handler, &video_ops, V4L2_CID_AUDIO_MUTE, ...);
|
||||
|
||||
This would be bad since muting the radio would not change the video mute
|
||||
control. The rule is to have one control for each hardware 'knob' that you
|
||||
can twiddle.
|
||||
|
||||
|
||||
Finding Controls
|
||||
================
|
||||
|
||||
Normally you have created the controls yourself and you can store the struct
|
||||
v4l2_ctrl pointer into your own struct.
|
||||
|
||||
But sometimes you need to find a control from another handler that you do
|
||||
not own. For example, if you have to find a volume control from a subdev.
|
||||
|
||||
You can do that by calling v4l2_ctrl_find:
|
||||
|
||||
struct v4l2_ctrl *volume;
|
||||
|
||||
volume = v4l2_ctrl_find(sd->ctrl_handler, V4L2_CID_AUDIO_VOLUME);
|
||||
|
||||
Since v4l2_ctrl_find will lock the handler you have to be careful where you
|
||||
use it. For example, this is not a good idea:
|
||||
|
||||
struct v4l2_ctrl_handler ctrl_handler;
|
||||
|
||||
v4l2_ctrl_new_std(&ctrl_handler, &video_ops, V4L2_CID_BRIGHTNESS, ...);
|
||||
v4l2_ctrl_new_std(&ctrl_handler, &video_ops, V4L2_CID_CONTRAST, ...);
|
||||
|
||||
...and in video_ops.s_ctrl:
|
||||
|
||||
case V4L2_CID_BRIGHTNESS:
|
||||
contrast = v4l2_find_ctrl(&ctrl_handler, V4L2_CID_CONTRAST);
|
||||
...
|
||||
|
||||
When s_ctrl is called by the framework the ctrl_handler.lock is already taken, so
|
||||
attempting to find another control from the same handler will deadlock.
|
||||
|
||||
It is recommended not to use this function from inside the control ops.
|
||||
|
||||
|
||||
Inheriting Controls
|
||||
===================
|
||||
|
||||
When one control handler is added to another using v4l2_ctrl_add_handler, then
|
||||
by default all controls from one are merged to the other. But a subdev might
|
||||
have low-level controls that make sense for some advanced embedded system, but
|
||||
not when it is used in consumer-level hardware. In that case you want to keep
|
||||
those low-level controls local to the subdev. You can do this by simply
|
||||
setting the 'is_private' flag of the control to 1:
|
||||
|
||||
static const struct v4l2_ctrl_config ctrl_private = {
|
||||
.ops = &ctrl_custom_ops,
|
||||
.id = V4L2_CID_...,
|
||||
.name = "Some Private Control",
|
||||
.type = V4L2_CTRL_TYPE_INTEGER,
|
||||
.max = 15,
|
||||
.step = 1,
|
||||
.is_private = 1,
|
||||
};
|
||||
|
||||
ctrl = v4l2_ctrl_new_custom(&foo->ctrl_handler, &ctrl_private, NULL);
|
||||
|
||||
These controls will now be skipped when v4l2_ctrl_add_handler is called.
|
||||
|
||||
|
||||
V4L2_CTRL_TYPE_CTRL_CLASS Controls
|
||||
==================================
|
||||
|
||||
Controls of this type can be used by GUIs to get the name of the control class.
|
||||
A fully featured GUI can make a dialog with multiple tabs with each tab
|
||||
containing the controls belonging to a particular control class. The name of
|
||||
each tab can be found by querying a special control with ID <control class | 1>.
|
||||
|
||||
Drivers do not have to care about this. The framework will automatically add
|
||||
a control of this type whenever the first control belonging to a new control
|
||||
class is added.
|
||||
|
||||
|
||||
Differences from the Spec
|
||||
=========================
|
||||
|
||||
There are a few places where the framework acts slightly differently from the
|
||||
V4L2 Specification. Those differences are described in this section. We will
|
||||
have to see whether we need to adjust the spec or not.
|
||||
|
||||
1) It is no longer required to have all controls contained in a
|
||||
v4l2_ext_control array be from the same control class. The framework will be
|
||||
able to handle any type of control in the array. You need to set ctrl_class
|
||||
to 0 in order to enable this. If ctrl_class is non-zero, then it will still
|
||||
check that all controls belong to that control class.
|
||||
|
||||
If you set ctrl_class to 0 and count to 0, then it will only return an error
|
||||
if there are no controls at all.
|
||||
|
||||
2) Clarified the way error_idx works. For get and set it will be equal to
|
||||
count if nothing was done yet. If it is less than count then only the controls
|
||||
up to error_idx-1 were successfully applied.
|
||||
|
||||
3) When attempting to read a button control the framework will return -EACCES
|
||||
instead of -EINVAL as stated in the spec. It seems to make more sense since
|
||||
button controls are write-only controls.
|
||||
|
||||
4) Attempting to write to a read-only control will return -EACCES instead of
|
||||
-EINVAL as the spec says.
|
||||
|
||||
5) The spec does not mention what should happen when you try to set/get a
|
||||
control class controls. ivtv currently returns -EINVAL (indicating that the
|
||||
control ID does not exist) while the framework will return -EACCES, which
|
||||
makes more sense.
|
||||
|
||||
|
||||
Proposals for Extensions
|
||||
========================
|
||||
|
||||
Some ideas for future extensions to the spec:
|
||||
|
||||
1) Add a V4L2_CTRL_FLAG_HEX to have values shown as hexadecimal instead of
|
||||
decimal. Useful for e.g. video_mute_yuv.
|
||||
|
||||
2) It is possible to mark in the controls array which controls have been
|
||||
successfully written and which failed by for example adding a bit to the
|
||||
control ID. Not sure if it is worth the effort, though.
|
||||
|
||||
3) Trying to set volatile inactive controls should result in -EACCESS.
|
||||
|
||||
4) Add a new flag to mark volatile controls. Any application that wants
|
||||
to store the state of the controls can then skip volatile inactive controls.
|
||||
Currently it is not possible to detect such controls.
|
@ -694,7 +694,7 @@ static void usage(void)
|
||||
#endif
|
||||
" -l|--list Show page details in ranges\n"
|
||||
" -L|--list-each Show page details one by one\n"
|
||||
" -N|--no-summary Don't show summay info\n"
|
||||
" -N|--no-summary Don't show summary info\n"
|
||||
" -X|--hwpoison hwpoison pages\n"
|
||||
" -x|--unpoison unpoison pages\n"
|
||||
" -h|--help Show this usage message\n"
|
||||
|
@ -18,6 +18,7 @@ Offset Proto Name Meaning
|
||||
080/010 ALL hd0_info hd0 disk parameter, OBSOLETE!!
|
||||
090/010 ALL hd1_info hd1 disk parameter, OBSOLETE!!
|
||||
0A0/010 ALL sys_desc_table System description table (struct sys_desc_table)
|
||||
0B0/010 ALL olpc_ofw_header OLPC's OpenFirmware CIF and friends
|
||||
140/080 ALL edid_info Video mode setup (struct edid_info)
|
||||
1C0/020 ALL efi_info EFI 32 information (struct efi_info)
|
||||
1E0/004 ALL alk_mem_k Alternative mem check, in KB
|
||||
|
254
MAINTAINERS
254
MAINTAINERS
@ -454,9 +454,20 @@ L: linux-rdma@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/infiniband/hw/amso1100/
|
||||
|
||||
ANALOG DEVICES INC ASOC DRIVERS
|
||||
L: uclinux-dist-devel@blackfin.uclinux.org
|
||||
L: alsa-devel@alsa-project.org (moderated for non-subscribers)
|
||||
W: http://blackfin.uclinux.org/
|
||||
S: Supported
|
||||
F: sound/soc/blackfin/*
|
||||
F: sound/soc/codecs/ad1*
|
||||
F: sound/soc/codecs/adau*
|
||||
F: sound/soc/codecs/adav*
|
||||
F: sound/soc/codecs/ssm*
|
||||
|
||||
AOA (Apple Onboard Audio) ALSA DRIVER
|
||||
M: Johannes Berg <johannes@sipsolutions.net>
|
||||
L: linuxppc-dev@ozlabs.org
|
||||
L: linuxppc-dev@lists.ozlabs.org
|
||||
L: alsa-devel@alsa-project.org (moderated for non-subscribers)
|
||||
S: Maintained
|
||||
F: sound/aoa/
|
||||
@ -574,7 +585,6 @@ L: linux-mtd@lists.infradead.org
|
||||
S: Maintained
|
||||
F: drivers/mtd/nand/bcm_umi_nand.c
|
||||
F: drivers/mtd/nand/bcm_umi_bch.c
|
||||
F: drivers/mtd/nand/bcm_umi_hamming.c
|
||||
F: drivers/mtd/nand/nand_bcm_umi.h
|
||||
|
||||
ARM/CAVIUM NETWORKS CNS3XXX MACHINE SUPPORT
|
||||
@ -617,10 +627,10 @@ M: Richard Purdie <rpurdie@rpsys.net>
|
||||
S: Maintained
|
||||
|
||||
ARM/CORTINA SYSTEMS GEMINI ARM ARCHITECTURE
|
||||
M: Paulius Zaleckas <paulius.zaleckas@gmail.com>
|
||||
M: Hans Ulli Kroll <ulli.kroll@googlemail.com>
|
||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||
T: git git://gitorious.org/linux-gemini/mainline.git
|
||||
S: Odd Fixes
|
||||
T: git git://git.berlios.de/gemini-board
|
||||
S: Maintained
|
||||
F: arch/arm/mach-gemini/
|
||||
|
||||
ARM/EBSA110 MACHINE SUPPORT
|
||||
@ -642,9 +652,10 @@ T: topgit git://git.openezx.org/openezx.git
|
||||
F: arch/arm/mach-pxa/ezx.c
|
||||
|
||||
ARM/FARADAY FA526 PORT
|
||||
M: Paulius Zaleckas <paulius.zaleckas@gmail.com>
|
||||
M: Hans Ulli Kroll <ulli.kroll@googlemail.com>
|
||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||
S: Odd Fixes
|
||||
S: Maintained
|
||||
T: git://git.berlios.de/gemini-board
|
||||
F: arch/arm/mm/*-fa*
|
||||
|
||||
ARM/FOOTBRIDGE ARCHITECTURE
|
||||
@ -693,6 +704,13 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/kristoffer/linux-hpc.git
|
||||
F: arch/arm/mach-sa1100/jornada720.c
|
||||
F: arch/arm/mach-sa1100/include/mach/jornada720.h
|
||||
|
||||
ARM/INCOME PXA270 SUPPORT
|
||||
M: Marek Vasut <marek.vasut@gmail.com>
|
||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||
S: Maintained
|
||||
F: arch/arm/mach-pxa/income.c
|
||||
F: arch/arm/mach-pxa/include/mach-pxa/income.h
|
||||
|
||||
ARM/INTEL IOP32X ARM ARCHITECTURE
|
||||
M: Lennert Buytenhek <kernel@wantstofly.org>
|
||||
M: Dan Williams <dan.j.williams@intel.com>
|
||||
@ -948,8 +966,9 @@ ARM/SHMOBILE ARM ARCHITECTURE
|
||||
M: Paul Mundt <lethal@linux-sh.org>
|
||||
M: Magnus Damm <magnus.damm@gmail.com>
|
||||
L: linux-sh@vger.kernel.org
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/lethal/genesis-2.6.git
|
||||
W: http://oss.renesas.com
|
||||
Q: http://patchwork.kernel.org/project/linux-sh/list/
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/lethal/genesis-2.6.git
|
||||
S: Supported
|
||||
F: arch/arm/mach-shmobile/
|
||||
F: drivers/sh/
|
||||
@ -975,12 +994,11 @@ F: drivers/input/keyboard/w90p910_keypad.c
|
||||
F: drivers/input/touchscreen/w90p910_ts.c
|
||||
F: drivers/watchdog/nuc900_wdt.c
|
||||
F: drivers/net/arm/w90p910_ether.c
|
||||
F: drivers/mtd/nand/w90p910_nand.c
|
||||
F: drivers/mtd/nand/nuc900_nand.c
|
||||
F: drivers/rtc/rtc-nuc900.c
|
||||
F: drivers/spi/spi_nuc900.c
|
||||
F: drivers/usb/host/ehci-w90x900.c
|
||||
F: drivers/video/nuc900fb.c
|
||||
F: drivers/sound/soc/nuc900/
|
||||
|
||||
ARM/U300 MACHINE SUPPORT
|
||||
M: Linus Walleij <linus.walleij@stericsson.com>
|
||||
@ -1010,14 +1028,14 @@ M: Marek Vasut <marek.vasut@gmail.com>
|
||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||
S: Maintained
|
||||
F: arch/arm/mach-pxa/vpac270.c
|
||||
F: arch/arm/mach-pxa/include/mach-pxa/vpac270.h
|
||||
F: arch/arm/mach-pxa/include/mach/vpac270.h
|
||||
|
||||
ARM/ZIPIT Z2 SUPPORT
|
||||
M: Marek Vasut <marek.vasut@gmail.com>
|
||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||
S: Maintained
|
||||
F: arch/arm/mach-pxa/z2.c
|
||||
F: arch/arm/mach-pxa/include/mach-pxa/z2.h
|
||||
F: arch/arm/mach-pxa/include/mach/z2.h
|
||||
|
||||
ASC7621 HARDWARE MONITOR DRIVER
|
||||
M: George Joseph <george.joseph@fairview5.com>
|
||||
@ -1252,8 +1270,7 @@ S: Maintained
|
||||
F: drivers/net/hamradio/baycom*
|
||||
|
||||
BEFS FILE SYSTEM
|
||||
M: "Sergey S. Kostyliov" <rathamahata@php4.ru>
|
||||
S: Maintained
|
||||
S: Orphan
|
||||
F: Documentation/filesystems/befs.txt
|
||||
F: fs/befs/
|
||||
|
||||
@ -1466,8 +1483,8 @@ F: include/linux/can/platform/
|
||||
|
||||
CELL BROADBAND ENGINE ARCHITECTURE
|
||||
M: Arnd Bergmann <arnd@arndb.de>
|
||||
L: linuxppc-dev@ozlabs.org
|
||||
L: cbe-oss-dev@ozlabs.org
|
||||
L: linuxppc-dev@lists.ozlabs.org
|
||||
L: cbe-oss-dev@lists.ozlabs.org
|
||||
W: http://www.ibm.com/developerworks/power/cell/
|
||||
S: Supported
|
||||
F: arch/powerpc/include/asm/cell*.h
|
||||
@ -1568,6 +1585,16 @@ L: platform-driver-x86@vger.kernel.org
|
||||
S: Supported
|
||||
F: drivers/platform/x86/classmate-laptop.c
|
||||
|
||||
COCCINELLE/Semantic Patches (SmPL)
|
||||
M: Julia Lawall <julia@diku.dk>
|
||||
M: Gilles Muller <Gilles.Muller@lip6.fr>
|
||||
M: Nicolas Palix <npalix@diku.dk>
|
||||
L: cocci@diku.dk (moderated for non-subscribers)
|
||||
W: http://coccinelle.lip6.fr/
|
||||
S: Supported
|
||||
F: scripts/coccinelle/
|
||||
F: scripts/coccicheck
|
||||
|
||||
CODA FILE SYSTEM
|
||||
M: Jan Harkes <jaharkes@cs.cmu.edu>
|
||||
M: coda@cs.cmu.edu
|
||||
@ -1649,8 +1676,7 @@ F: kernel/cgroup*
|
||||
F: mm/*cgroup*
|
||||
|
||||
CORETEMP HARDWARE MONITORING DRIVER
|
||||
M: Rudolf Marek <r.marek@assembler.cz>
|
||||
M: Huaxu Wan <huaxu.wan@intel.com>
|
||||
M: Fenghua Yu <fenghua.yu@intel.com>
|
||||
L: lm-sensors@lm-sensors.org
|
||||
S: Maintained
|
||||
F: Documentation/hwmon/coretemp
|
||||
@ -1723,6 +1749,8 @@ CRYPTOGRAPHIC RANDOM NUMBER GENERATOR
|
||||
M: Neil Horman <nhorman@tuxdriver.com>
|
||||
L: linux-crypto@vger.kernel.org
|
||||
S: Maintained
|
||||
F: crypto/ansi_cprng.c
|
||||
F: crypto/rng.c
|
||||
|
||||
CS5535 Audio ALSA driver
|
||||
M: Jaya Kumar <jayakumar.alsa@gmail.com>
|
||||
@ -1881,6 +1909,7 @@ F: drivers/firmware/dcdbas.*
|
||||
DELL WMI EXTRAS DRIVER
|
||||
M: Matthew Garrett <mjg59@srcf.ucam.org>
|
||||
S: Maintained
|
||||
F: drivers/platform/x86/dell-wmi.c
|
||||
|
||||
DEVICE NUMBER REGISTRY
|
||||
M: Torben Mathiasen <device@lanana.org>
|
||||
@ -2010,6 +2039,7 @@ L: dri-devel@lists.freedesktop.org
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/airlied/drm-2.6.git
|
||||
S: Maintained
|
||||
F: drivers/gpu/drm/
|
||||
F: include/drm/
|
||||
|
||||
DSCC4 DRIVER
|
||||
M: Francois Romieu <romieu@fr.zoreil.com>
|
||||
@ -2198,6 +2228,12 @@ F: drivers/misc/cb710/
|
||||
F: drivers/mmc/host/cb710-mmc.*
|
||||
F: include/linux/cb710.h
|
||||
|
||||
ENE KB2426 (ENE0100/ENE020XX) INFRARED RECEIVER
|
||||
M: Maxim Levitsky <maximlevitsky@gmail.com>
|
||||
S: Maintained
|
||||
F: drivers/media/IR/ene_ir.c
|
||||
F: drivers/media/IR/ene_ir.h
|
||||
|
||||
EPSON 1355 FRAMEBUFFER DRIVER
|
||||
M: Christopher Hoover <ch@murgatroid.com>
|
||||
M: Christopher Hoover <ch@hpl.hp.com>
|
||||
@ -2232,6 +2268,7 @@ S: Maintained
|
||||
F: drivers/net/eth16i.c
|
||||
|
||||
EXT2 FILE SYSTEM
|
||||
M: Jan Kara <jack@suse.cz>
|
||||
L: linux-ext4@vger.kernel.org
|
||||
S: Maintained
|
||||
F: Documentation/filesystems/ext2.txt
|
||||
@ -2239,8 +2276,9 @@ F: fs/ext2/
|
||||
F: include/linux/ext2*
|
||||
|
||||
EXT3 FILE SYSTEM
|
||||
M: Jan Kara <jack@suse.cz>
|
||||
M: Andrew Morton <akpm@linux-foundation.org>
|
||||
M: Andreas Dilger <adilger@sun.com>
|
||||
M: Andreas Dilger <adilger.kernel@dilger.ca>
|
||||
L: linux-ext4@vger.kernel.org
|
||||
S: Maintained
|
||||
F: Documentation/filesystems/ext3.txt
|
||||
@ -2249,7 +2287,7 @@ F: include/linux/ext3*
|
||||
|
||||
EXT4 FILE SYSTEM
|
||||
M: "Theodore Ts'o" <tytso@mit.edu>
|
||||
M: Andreas Dilger <adilger@sun.com>
|
||||
M: Andreas Dilger <adilger.kernel@dilger.ca>
|
||||
L: linux-ext4@vger.kernel.org
|
||||
W: http://ext4.wiki.kernel.org
|
||||
Q: http://patchwork.ozlabs.org/project/linux-ext4/list/
|
||||
@ -2264,6 +2302,12 @@ S: Maintained
|
||||
F: Documentation/hwmon/f71805f
|
||||
F: drivers/hwmon/f71805f.c
|
||||
|
||||
FANOTIFY
|
||||
M: Eric Paris <eparis@redhat.com>
|
||||
S: Maintained
|
||||
F: fs/notify/fanotify/
|
||||
F: include/linux/fanotify.h
|
||||
|
||||
FARSYNC SYNCHRONOUS DRIVER
|
||||
M: Kevin Curtis <kevin.curtis@farsite.co.uk>
|
||||
W: http://www.farsite.co.uk/
|
||||
@ -2317,6 +2361,7 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/ieee1394/linux1394-2.6.git
|
||||
S: Maintained
|
||||
F: drivers/firewire/
|
||||
F: include/linux/firewire*.h
|
||||
F: tools/firewire/
|
||||
|
||||
FIRMWARE LOADER (request_firmware)
|
||||
S: Orphan
|
||||
@ -2348,13 +2393,13 @@ F: include/linux/fb.h
|
||||
FREESCALE DMA DRIVER
|
||||
M: Li Yang <leoli@freescale.com>
|
||||
M: Zhang Wei <zw@zh-kernel.org>
|
||||
L: linuxppc-dev@ozlabs.org
|
||||
L: linuxppc-dev@lists.ozlabs.org
|
||||
S: Maintained
|
||||
F: drivers/dma/fsldma.*
|
||||
|
||||
FREESCALE I2C CPM DRIVER
|
||||
M: Jochen Friedrich <jochen@scram.de>
|
||||
L: linuxppc-dev@ozlabs.org
|
||||
L: linuxppc-dev@lists.ozlabs.org
|
||||
L: linux-i2c@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/i2c/busses/i2c-cpm.c
|
||||
@ -2370,7 +2415,7 @@ F: drivers/video/imxfb.c
|
||||
FREESCALE SOC FS_ENET DRIVER
|
||||
M: Pantelis Antoniou <pantelis.antoniou@gmail.com>
|
||||
M: Vitaly Bordug <vbordug@ru.mvista.com>
|
||||
L: linuxppc-dev@ozlabs.org
|
||||
L: linuxppc-dev@lists.ozlabs.org
|
||||
L: netdev@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/net/fs_enet/
|
||||
@ -2378,7 +2423,7 @@ F: include/linux/fs_enet_pd.h
|
||||
|
||||
FREESCALE QUICC ENGINE LIBRARY
|
||||
M: Timur Tabi <timur@freescale.com>
|
||||
L: linuxppc-dev@ozlabs.org
|
||||
L: linuxppc-dev@lists.ozlabs.org
|
||||
S: Supported
|
||||
F: arch/powerpc/sysdev/qe_lib/
|
||||
F: arch/powerpc/include/asm/*qe.h
|
||||
@ -2386,27 +2431,27 @@ F: arch/powerpc/include/asm/*qe.h
|
||||
FREESCALE USB PERIPHERAL DRIVERS
|
||||
M: Li Yang <leoli@freescale.com>
|
||||
L: linux-usb@vger.kernel.org
|
||||
L: linuxppc-dev@ozlabs.org
|
||||
L: linuxppc-dev@lists.ozlabs.org
|
||||
S: Maintained
|
||||
F: drivers/usb/gadget/fsl*
|
||||
|
||||
FREESCALE QUICC ENGINE UCC ETHERNET DRIVER
|
||||
M: Li Yang <leoli@freescale.com>
|
||||
L: netdev@vger.kernel.org
|
||||
L: linuxppc-dev@ozlabs.org
|
||||
L: linuxppc-dev@lists.ozlabs.org
|
||||
S: Maintained
|
||||
F: drivers/net/ucc_geth*
|
||||
|
||||
FREESCALE QUICC ENGINE UCC UART DRIVER
|
||||
M: Timur Tabi <timur@freescale.com>
|
||||
L: linuxppc-dev@ozlabs.org
|
||||
L: linuxppc-dev@lists.ozlabs.org
|
||||
S: Supported
|
||||
F: drivers/serial/ucc_uart.c
|
||||
|
||||
FREESCALE SOC SOUND DRIVERS
|
||||
M: Timur Tabi <timur@freescale.com>
|
||||
L: alsa-devel@alsa-project.org (moderated for non-subscribers)
|
||||
L: linuxppc-dev@ozlabs.org
|
||||
L: linuxppc-dev@lists.ozlabs.org
|
||||
S: Supported
|
||||
F: sound/soc/fsl/fsl*
|
||||
F: sound/soc/fsl/mpc8610_hpcd.c
|
||||
@ -2541,7 +2586,7 @@ F: mm/memory-failure.c
|
||||
F: mm/hwpoison-inject.c
|
||||
|
||||
HYPERVISOR VIRTUAL CONSOLE DRIVER
|
||||
L: linuxppc-dev@ozlabs.org
|
||||
L: linuxppc-dev@lists.ozlabs.org
|
||||
S: Odd Fixes
|
||||
F: drivers/char/hvc_*
|
||||
|
||||
@ -3202,6 +3247,13 @@ F: Documentation/video4linux/*.ivtv
|
||||
F: drivers/media/video/ivtv/
|
||||
F: include/linux/ivtv*
|
||||
|
||||
JC42.4 TEMPERATURE SENSOR DRIVER
|
||||
M: Guenter Roeck <linux@roeck-us.net>
|
||||
L: lm-sensors@lm-sensors.org
|
||||
S: Maintained
|
||||
F: drivers/hwmon/jc42.c
|
||||
F: Documentation/hwmon/jc42
|
||||
|
||||
JFS FILESYSTEM
|
||||
M: Dave Kleikamp <shaggy@linux.vnet.ibm.com>
|
||||
L: jfs-discussion@lists.sourceforge.net
|
||||
@ -3271,8 +3323,8 @@ F: fs/autofs4/
|
||||
|
||||
KERNEL BUILD + files below scripts/ (unless maintained elsewhere)
|
||||
M: Michal Marek <mmarek@suse.cz>
|
||||
T: git git://repo.or.cz/linux-kbuild.git for-next
|
||||
T: git git://repo.or.cz/linux-kbuild.git for-linus
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild-2.6.git for-next
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/mmarek/kbuild-2.6.git rc-fixes
|
||||
L: linux-kbuild@vger.kernel.org
|
||||
S: Maintained
|
||||
F: Documentation/kbuild/
|
||||
@ -3398,13 +3450,6 @@ F: include/linux/kmemleak.h
|
||||
F: mm/kmemleak.c
|
||||
F: mm/kmemleak-test.c
|
||||
|
||||
KMEMTRACE
|
||||
M: Eduard - Gabriel Munteanu <eduard.munteanu@linux360.ro>
|
||||
S: Maintained
|
||||
F: Documentation/trace/kmemtrace.txt
|
||||
F: include/linux/kmemtrace.h
|
||||
F: kernel/trace/kmemtrace.c
|
||||
|
||||
KPROBES
|
||||
M: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
|
||||
M: Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com>
|
||||
@ -3453,9 +3498,9 @@ F: drivers/usb/misc/legousbtower.c
|
||||
|
||||
LGUEST
|
||||
M: Rusty Russell <rusty@rustcorp.com.au>
|
||||
L: lguest@ozlabs.org
|
||||
L: lguest@lists.ozlabs.org
|
||||
W: http://lguest.ozlabs.org/
|
||||
S: Maintained
|
||||
S: Odd Fixes
|
||||
F: Documentation/lguest/
|
||||
F: arch/x86/lguest/
|
||||
F: drivers/lguest/
|
||||
@ -3472,7 +3517,7 @@ LINUX FOR POWERPC (32-BIT AND 64-BIT)
|
||||
M: Benjamin Herrenschmidt <benh@kernel.crashing.org>
|
||||
M: Paul Mackerras <paulus@samba.org>
|
||||
W: http://www.penguinppc.org/
|
||||
L: linuxppc-dev@ozlabs.org
|
||||
L: linuxppc-dev@lists.ozlabs.org
|
||||
Q: http://patchwork.ozlabs.org/project/linuxppc-dev/list/
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/benh/powerpc.git
|
||||
S: Supported
|
||||
@ -3482,14 +3527,14 @@ F: arch/powerpc/
|
||||
LINUX FOR POWER MACINTOSH
|
||||
M: Benjamin Herrenschmidt <benh@kernel.crashing.org>
|
||||
W: http://www.penguinppc.org/
|
||||
L: linuxppc-dev@ozlabs.org
|
||||
L: linuxppc-dev@lists.ozlabs.org
|
||||
S: Maintained
|
||||
F: arch/powerpc/platforms/powermac/
|
||||
F: drivers/macintosh/
|
||||
|
||||
LINUX FOR POWERPC EMBEDDED MPC5XXX
|
||||
M: Grant Likely <grant.likely@secretlab.ca>
|
||||
L: linuxppc-dev@ozlabs.org
|
||||
L: linuxppc-dev@lists.ozlabs.org
|
||||
T: git git://git.secretlab.ca/git/linux-2.6.git
|
||||
S: Maintained
|
||||
F: arch/powerpc/platforms/512x/
|
||||
@ -3499,7 +3544,7 @@ LINUX FOR POWERPC EMBEDDED PPC4XX
|
||||
M: Josh Boyer <jwboyer@linux.vnet.ibm.com>
|
||||
M: Matt Porter <mporter@kernel.crashing.org>
|
||||
W: http://www.penguinppc.org/
|
||||
L: linuxppc-dev@ozlabs.org
|
||||
L: linuxppc-dev@lists.ozlabs.org
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/jwboyer/powerpc-4xx.git
|
||||
S: Maintained
|
||||
F: arch/powerpc/platforms/40x/
|
||||
@ -3508,7 +3553,7 @@ F: arch/powerpc/platforms/44x/
|
||||
LINUX FOR POWERPC EMBEDDED XILINX VIRTEX
|
||||
M: Grant Likely <grant.likely@secretlab.ca>
|
||||
W: http://wiki.secretlab.ca/index.php/Linux_on_Xilinx_Virtex
|
||||
L: linuxppc-dev@ozlabs.org
|
||||
L: linuxppc-dev@lists.ozlabs.org
|
||||
T: git git://git.secretlab.ca/git/linux-2.6.git
|
||||
S: Maintained
|
||||
F: arch/powerpc/*/*virtex*
|
||||
@ -3518,19 +3563,20 @@ LINUX FOR POWERPC EMBEDDED PPC8XX
|
||||
M: Vitaly Bordug <vitb@kernel.crashing.org>
|
||||
M: Marcelo Tosatti <marcelo@kvack.org>
|
||||
W: http://www.penguinppc.org/
|
||||
L: linuxppc-dev@ozlabs.org
|
||||
L: linuxppc-dev@lists.ozlabs.org
|
||||
S: Maintained
|
||||
F: arch/powerpc/platforms/8xx/
|
||||
|
||||
LINUX FOR POWERPC EMBEDDED PPC83XX AND PPC85XX
|
||||
M: Kumar Gala <galak@kernel.crashing.org>
|
||||
W: http://www.penguinppc.org/
|
||||
L: linuxppc-dev@ozlabs.org
|
||||
L: linuxppc-dev@lists.ozlabs.org
|
||||
S: Maintained
|
||||
F: arch/powerpc/platforms/83xx/
|
||||
|
||||
LINUX FOR POWERPC PA SEMI PWRFICIENT
|
||||
M: Olof Johansson <olof@lixom.net>
|
||||
L: linuxppc-dev@ozlabs.org
|
||||
L: linuxppc-dev@lists.ozlabs.org
|
||||
S: Maintained
|
||||
F: arch/powerpc/platforms/pasemi/
|
||||
F: drivers/*/*pasemi*
|
||||
@ -3622,7 +3668,7 @@ M: Mike Frysinger <vapier@gentoo.org>
|
||||
M: Subrata Modak <subrata@linux.vnet.ibm.com>
|
||||
L: ltp-list@lists.sourceforge.net (subscribers-only)
|
||||
W: http://ltp.sourceforge.net/
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/galak/ltp.git
|
||||
T: git git://ltp.git.sourceforge.net/gitroot/ltp/ltp-dev
|
||||
S: Maintained
|
||||
|
||||
M32R ARCHITECTURE
|
||||
@ -3883,8 +3929,7 @@ F: Documentation/sound/oss/MultiSound
|
||||
F: sound/oss/msnd*
|
||||
|
||||
MULTITECH MULTIPORT CARD (ISICOM)
|
||||
M: Jiri Slaby <jirislaby@gmail.com>
|
||||
S: Maintained
|
||||
S: Orphan
|
||||
F: drivers/char/isicom.c
|
||||
F: include/linux/isicom.h
|
||||
|
||||
@ -4044,7 +4089,7 @@ F: net/rfkill/
|
||||
F: net/wireless/
|
||||
F: include/net/ieee80211*
|
||||
F: include/linux/wireless.h
|
||||
F: include/linux/iw_handler.h
|
||||
F: include/net/iw_handler.h
|
||||
F: drivers/net/wireless/
|
||||
|
||||
NETWORKING DRIVERS
|
||||
@ -4192,6 +4237,8 @@ M: David Brownell <dbrownell@users.sourceforge.net>
|
||||
L: linux-usb@vger.kernel.org
|
||||
L: linux-omap@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/usb/*/*omap*
|
||||
F: arch/arm/*omap*/usb*
|
||||
|
||||
OMFS FILESYSTEM
|
||||
M: Bob Copeland <me@bobcopeland.com>
|
||||
@ -4376,6 +4423,13 @@ M: Jim Cromie <jim.cromie@gmail.com>
|
||||
S: Maintained
|
||||
F: drivers/char/pc8736x_gpio.c
|
||||
|
||||
PC87427 HARDWARE MONITORING DRIVER
|
||||
M: Jean Delvare <khali@linux-fr.org>
|
||||
L: lm-sensors@lm-sensors.org
|
||||
S: Maintained
|
||||
F: Documentation/hwmon/pc87427
|
||||
F: drivers/hwmon/pc87427.c
|
||||
|
||||
PCA9532 LED DRIVER
|
||||
M: Riku Voipio <riku.voipio@iki.fi>
|
||||
S: Maintained
|
||||
@ -4532,7 +4586,7 @@ F: drivers/net/pppox.c
|
||||
PPP OVER L2TP
|
||||
M: James Chapman <jchapman@katalix.com>
|
||||
S: Maintained
|
||||
F: drivers/net/pppol2tp.c
|
||||
F: net/l2tp/l2tp_ppp.c
|
||||
F: include/linux/if_pppol2tp.h
|
||||
|
||||
PPS SUPPORT
|
||||
@ -4559,11 +4613,6 @@ W: http://wireless.kernel.org/en/users/Drivers/p54
|
||||
S: Obsolete
|
||||
F: drivers/net/wireless/prism54/
|
||||
|
||||
PROMISE DC4030 CACHING DISK CONTROLLER DRIVER
|
||||
M: Peter Denison <promise@pnd-pc.demon.co.uk>
|
||||
W: http://www.pnd-pc.demon.co.uk/promise/
|
||||
S: Maintained
|
||||
|
||||
PROMISE SATA TX2/TX4 CONTROLLER LIBATA DRIVER
|
||||
M: Mikael Pettersson <mikpe@it.uu.se>
|
||||
L: linux-ide@vger.kernel.org
|
||||
@ -4573,14 +4622,14 @@ F: drivers/ata/sata_promise.*
|
||||
PS3 NETWORK SUPPORT
|
||||
M: Geoff Levand <geoff@infradead.org>
|
||||
L: netdev@vger.kernel.org
|
||||
L: cbe-oss-dev@ozlabs.org
|
||||
L: cbe-oss-dev@lists.ozlabs.org
|
||||
S: Maintained
|
||||
F: drivers/net/ps3_gelic_net.*
|
||||
|
||||
PS3 PLATFORM SUPPORT
|
||||
M: Geoff Levand <geoff@infradead.org>
|
||||
L: linuxppc-dev@ozlabs.org
|
||||
L: cbe-oss-dev@ozlabs.org
|
||||
L: linuxppc-dev@lists.ozlabs.org
|
||||
L: cbe-oss-dev@lists.ozlabs.org
|
||||
S: Maintained
|
||||
F: arch/powerpc/boot/ps3*
|
||||
F: arch/powerpc/include/asm/lv1call.h
|
||||
@ -4594,8 +4643,9 @@ F: sound/ppc/snd_ps3*
|
||||
|
||||
PS3VRAM DRIVER
|
||||
M: Jim Paris <jim@jtan.com>
|
||||
L: cbe-oss-dev@ozlabs.org
|
||||
L: cbe-oss-dev@lists.ozlabs.org
|
||||
S: Maintained
|
||||
F: drivers/block/ps3vram.c
|
||||
|
||||
PTRACE SUPPORT
|
||||
M: Roland McGrath <roland@redhat.com>
|
||||
@ -4736,7 +4786,7 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/ivd/rt2x00.git
|
||||
F: drivers/net/wireless/rt2x00/
|
||||
|
||||
RAMDISK RAM BLOCK DEVICE DRIVER
|
||||
M: Nick Piggin <npiggin@suse.de>
|
||||
M: Nick Piggin <npiggin@kernel.dk>
|
||||
S: Maintained
|
||||
F: Documentation/blockdev/ramdisk.txt
|
||||
F: drivers/block/brd.c
|
||||
@ -4822,8 +4872,8 @@ F: net/rfkill/
|
||||
RICOH SMARTMEDIA/XD DRIVER
|
||||
M: Maxim Levitsky <maximlevitsky@gmail.com>
|
||||
S: Maintained
|
||||
F: drivers/mtd/nand/r822.c
|
||||
F: drivers/mtd/nand/r822.h
|
||||
F: drivers/mtd/nand/r852.c
|
||||
F: drivers/mtd/nand/r852.h
|
||||
|
||||
RISCOM8 DRIVER
|
||||
S: Orphan
|
||||
@ -5039,7 +5089,7 @@ F: drivers/mmc/host/sdhci.*
|
||||
|
||||
SECURE DIGITAL HOST CONTROLLER INTERFACE, OPEN FIRMWARE BINDINGS (SDHCI-OF)
|
||||
M: Anton Vorontsov <avorontsov@ru.mvista.com>
|
||||
L: linuxppc-dev@ozlabs.org
|
||||
L: linuxppc-dev@lists.ozlabs.org
|
||||
L: linux-mmc@vger.kernel.org
|
||||
S: Maintained
|
||||
F: drivers/mmc/host/sdhci-of.*
|
||||
@ -5250,6 +5300,20 @@ M: Nicolas Pitre <nico@fluxnic.net>
|
||||
S: Odd Fixes
|
||||
F: drivers/net/smc91x.*
|
||||
|
||||
SMM665 HARDWARE MONITOR DRIVER
|
||||
M: Guenter Roeck <linux@roeck-us.net>
|
||||
L: lm-sensors@lm-sensors.org
|
||||
S: Maintained
|
||||
F: Documentation/hwmon/smm665
|
||||
F: drivers/hwmon/smm665.c
|
||||
|
||||
SMSC EMC2103 HARDWARE MONITOR DRIVER
|
||||
M: Steve Glendinning <steve.glendinning@smsc.com>
|
||||
L: lm-sensors@lm-sensors.org
|
||||
S: Supported
|
||||
F: Documentation/hwmon/emc2103
|
||||
F: drivers/hwmon/emc2103.c
|
||||
|
||||
SMSC47B397 HARDWARE MONITOR DRIVER
|
||||
M: "Mark M. Hoffman" <mhoffman@lightlink.com>
|
||||
L: lm-sensors@lm-sensors.org
|
||||
@ -5270,11 +5334,6 @@ L: netdev@vger.kernel.org
|
||||
S: Supported
|
||||
F: drivers/net/smsc9420.*
|
||||
|
||||
SMX UIO Interface
|
||||
M: Ben Nizette <bn@niasdigital.com>
|
||||
S: Maintained
|
||||
F: drivers/uio/uio_smx.c
|
||||
|
||||
SN-IA64 (Itanium) SUB-PLATFORM
|
||||
M: Jes Sorensen <jes@sgi.com>
|
||||
L: linux-altix@sgi.com
|
||||
@ -5362,7 +5421,7 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-2.6.git
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc-next-2.6.git
|
||||
S: Maintained
|
||||
F: arch/sparc/
|
||||
F: drivers/sbus
|
||||
F: drivers/sbus/
|
||||
|
||||
SPARC SERIAL DRIVERS
|
||||
M: "David S. Miller" <davem@davemloft.net>
|
||||
@ -5404,7 +5463,8 @@ S: Maintained
|
||||
F: arch/arm/mach-spear*/clock.c
|
||||
F: arch/arm/mach-spear*/include/mach/clkdev.h
|
||||
F: arch/arm/plat-spear/clock.c
|
||||
F: arch/arm/plat-spear/include/plat/clock.h and clkdev.h
|
||||
F: arch/arm/plat-spear/include/plat/clkdev.h
|
||||
F: arch/arm/plat-spear/include/plat/clock.h
|
||||
|
||||
SPEAR PAD MULTIPLEXING SUPPORT
|
||||
M: Viresh Kumar <viresh.kumar@st.com>
|
||||
@ -5446,8 +5506,8 @@ F: drivers/net/spider_net*
|
||||
|
||||
SPU FILE SYSTEM
|
||||
M: Jeremy Kerr <jk@ozlabs.org>
|
||||
L: linuxppc-dev@ozlabs.org
|
||||
L: cbe-oss-dev@ozlabs.org
|
||||
L: linuxppc-dev@lists.ozlabs.org
|
||||
L: cbe-oss-dev@lists.ozlabs.org
|
||||
W: http://www.ibm.com/developerworks/power/cell/
|
||||
S: Supported
|
||||
F: Documentation/filesystems/spufs.txt
|
||||
@ -5484,11 +5544,6 @@ M: Ion Badulescu <ionut@badula.org>
|
||||
S: Odd Fixes
|
||||
F: drivers/net/starfire*
|
||||
|
||||
STARMODE RADIO IP (STRIP) PROTOCOL DRIVER
|
||||
S: Orphan
|
||||
F: drivers/staging/strip/strip.c
|
||||
F: include/linux/if_strip.h
|
||||
|
||||
STRADIS MPEG-2 DECODER DRIVER
|
||||
M: Nathan Laredo <laredo@gnu.org>
|
||||
W: http://www.stradis.com/
|
||||
@ -5564,6 +5619,15 @@ W: http://tcp-lp-mod.sourceforge.net/
|
||||
S: Maintained
|
||||
F: net/ipv4/tcp_lp.c
|
||||
|
||||
TEGRA SUPPORT
|
||||
M: Colin Cross <ccross@android.com>
|
||||
M: Erik Gilling <konkers@android.com>
|
||||
M: Olof Johansson <olof@lixom.net>
|
||||
L: linux-tegra@vger.kernel.org
|
||||
T: git git://android.git.kernel.org/kernel/tegra.git
|
||||
S: Supported
|
||||
F: arch/arm/mach-tegra
|
||||
|
||||
TEHUTI ETHERNET DRIVER
|
||||
M: Alexander Indenbaum <baum@tehutinetworks.net>
|
||||
M: Andy Gospodarek <andy@greyhouse.net>
|
||||
@ -5616,6 +5680,12 @@ F: include/linux/tipc*.h
|
||||
F: include/net/tipc/
|
||||
F: net/tipc/
|
||||
|
||||
TILE ARCHITECTURE
|
||||
M: Chris Metcalf <cmetcalf@tilera.com>
|
||||
W: http://www.tilera.com/scm/
|
||||
S: Supported
|
||||
F: arch/tile/
|
||||
|
||||
TLAN NETWORK DRIVER
|
||||
M: Samuel Chessman <chessman@tux.org>
|
||||
L: tlan-devel@lists.sourceforge.net (subscribers-only)
|
||||
@ -5680,7 +5750,7 @@ TRACING
|
||||
M: Steven Rostedt <rostedt@goodmis.org>
|
||||
M: Frederic Weisbecker <fweisbec@gmail.com>
|
||||
M: Ingo Molnar <mingo@redhat.com>
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip.git tracing/core
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip.git perf/core
|
||||
S: Maintained
|
||||
F: Documentation/trace/ftrace.txt
|
||||
F: arch/*/*/*/ftrace.h
|
||||
@ -5753,6 +5823,9 @@ UCLINUX FOR RENESAS H8/300 (H8300)
|
||||
M: Yoshinori Sato <ysato@users.sourceforge.jp>
|
||||
W: http://uclinux-h8.sourceforge.jp/
|
||||
S: Supported
|
||||
F: arch/h8300/
|
||||
F: drivers/ide/ide-h8300.c
|
||||
F: drivers/net/ne-h8300.c
|
||||
|
||||
UDF FILESYSTEM
|
||||
M: Jan Kara <jack@suse.cz>
|
||||
@ -6044,7 +6117,7 @@ F: drivers/net/usb/usbnet.c
|
||||
F: include/linux/usb/usbnet.h
|
||||
|
||||
USB VIDEO CLASS
|
||||
M: Laurent Pinchart <laurent.pinchart@skynet.be>
|
||||
M: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
|
||||
L: linux-uvc-devel@lists.berlios.de (subscribers-only)
|
||||
L: linux-media@vger.kernel.org
|
||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/mchehab/linux-2.6.git
|
||||
@ -6177,9 +6250,12 @@ F: drivers/mmc/host/via-sdmmc.c
|
||||
|
||||
VIA UNICHROME(PRO)/CHROME9 FRAMEBUFFER DRIVER
|
||||
M: Joseph Chan <JosephChan@via.com.tw>
|
||||
M: Scott Fang <ScottFang@viatech.com.cn>
|
||||
M: Florian Tobias Schandinat <FlorianSchandinat@gmx.de>
|
||||
L: linux-fbdev@vger.kernel.org
|
||||
S: Maintained
|
||||
F: include/linux/via-core.h
|
||||
F: include/linux/via-gpio.h
|
||||
F: include/linux/via_i2c.h
|
||||
F: drivers/video/via/
|
||||
|
||||
VIA VELOCITY NETWORK DRIVER
|
||||
@ -6293,6 +6369,11 @@ M: linux-wimax@intel.com
|
||||
L: wimax@linuxwimax.org
|
||||
S: Supported
|
||||
W: http://linuxwimax.org
|
||||
F: Documentation/wimax/README.wimax
|
||||
F: include/linux/wimax.h
|
||||
F: include/linux/wimax/debug.h
|
||||
F: include/net/wimax.h
|
||||
F: net/wimax/
|
||||
|
||||
WIMEDIA LLC PROTOCOL (WLP) SUBSYSTEM
|
||||
M: David Vrabel <david.vrabel@csr.com>
|
||||
@ -6342,8 +6423,9 @@ S: Supported
|
||||
F: drivers/input/touchscreen/*wm97*
|
||||
F: include/linux/wm97xx.h
|
||||
|
||||
WOLFSON MICROELECTRONICS PMIC DRIVERS
|
||||
WOLFSON MICROELECTRONICS DRIVERS
|
||||
M: Mark Brown <broonie@opensource.wolfsonmicro.com>
|
||||
M: Ian Lartey <ian@opensource.wolfsonmicro.com>
|
||||
T: git git://opensource.wolfsonmicro.com/linux-2.6-audioplus
|
||||
W: http://opensource.wolfsonmicro.com/node/8
|
||||
S: Supported
|
||||
@ -6358,8 +6440,8 @@ F: drivers/watchdog/wm83*_wdt.c
|
||||
F: include/linux/mfd/wm831x/
|
||||
F: include/linux/mfd/wm8350/
|
||||
F: include/linux/mfd/wm8400*
|
||||
F: sound/soc/codecs/wm8350.*
|
||||
F: sound/soc/codecs/wm8400.*
|
||||
F: include/sound/wm????.h
|
||||
F: sound/soc/codecs/wm*
|
||||
|
||||
X.25 NETWORK LAYER
|
||||
M: Andrew Hendry <andrew.hendry@gmail.com>
|
||||
|
46
Makefile
46
Makefile
@ -1,7 +1,7 @@
|
||||
VERSION = 2
|
||||
PATCHLEVEL = 6
|
||||
SUBLEVEL = 35
|
||||
EXTRAVERSION =
|
||||
SUBLEVEL = 36
|
||||
EXTRAVERSION = -rc3
|
||||
NAME = Sheep on Meth
|
||||
|
||||
# *DOCUMENTATION*
|
||||
@ -189,7 +189,6 @@ SUBARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ \
|
||||
# Note: Some architectures assign CROSS_COMPILE in their arch/*/Makefile
|
||||
export KBUILD_BUILDHOST := $(SUBARCH)
|
||||
ARCH ?= $(SUBARCH)
|
||||
CROSS_COMPILE ?=
|
||||
CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%)
|
||||
|
||||
# Architecture as present in compile.h
|
||||
@ -332,10 +331,9 @@ CHECK = sparse
|
||||
|
||||
CHECKFLAGS := -D__linux__ -Dlinux -D__STDC__ -Dunix -D__unix__ \
|
||||
-Wbitwise -Wno-return-void $(CF)
|
||||
MODFLAGS = -DMODULE
|
||||
CFLAGS_MODULE = $(MODFLAGS)
|
||||
AFLAGS_MODULE = $(MODFLAGS)
|
||||
LDFLAGS_MODULE = -T $(srctree)/scripts/module-common.lds
|
||||
CFLAGS_MODULE =
|
||||
AFLAGS_MODULE =
|
||||
LDFLAGS_MODULE =
|
||||
CFLAGS_KERNEL =
|
||||
AFLAGS_KERNEL =
|
||||
CFLAGS_GCOV = -fprofile-arcs -ftest-coverage
|
||||
@ -354,7 +352,12 @@ KBUILD_CFLAGS := -Wall -Wundef -Wstrict-prototypes -Wno-trigraphs \
|
||||
-Werror-implicit-function-declaration \
|
||||
-Wno-format-security \
|
||||
-fno-delete-null-pointer-checks
|
||||
KBUILD_AFLAGS_KERNEL :=
|
||||
KBUILD_CFLAGS_KERNEL :=
|
||||
KBUILD_AFLAGS := -D__ASSEMBLY__
|
||||
KBUILD_AFLAGS_MODULE := -DMODULE
|
||||
KBUILD_CFLAGS_MODULE := -DMODULE
|
||||
KBUILD_LDFLAGS_MODULE := -T $(srctree)/scripts/module-common.lds
|
||||
|
||||
# Read KERNELRELEASE from include/config/kernel.release (if it exists)
|
||||
KERNELRELEASE = $(shell cat include/config/kernel.release 2> /dev/null)
|
||||
@ -369,6 +372,8 @@ export HOSTCXX HOSTCXXFLAGS LDFLAGS_MODULE CHECK CHECKFLAGS
|
||||
export KBUILD_CPPFLAGS NOSTDINC_FLAGS LINUXINCLUDE OBJCOPYFLAGS LDFLAGS
|
||||
export KBUILD_CFLAGS CFLAGS_KERNEL CFLAGS_MODULE CFLAGS_GCOV
|
||||
export KBUILD_AFLAGS AFLAGS_KERNEL AFLAGS_MODULE
|
||||
export KBUILD_AFLAGS_MODULE KBUILD_CFLAGS_MODULE KBUILD_LDFLAGS_MODULE
|
||||
export KBUILD_AFLAGS_KERNEL KBUILD_CFLAGS_KERNEL
|
||||
|
||||
# When compiling out-of-tree modules, put MODVERDIR in the module
|
||||
# tree rather than in the kernel tree. The kernel tree might
|
||||
@ -412,9 +417,9 @@ endif
|
||||
# of make so .config is not included in this case either (for *config).
|
||||
|
||||
no-dot-config-targets := clean mrproper distclean \
|
||||
cscope TAGS tags help %docs check% \
|
||||
cscope TAGS tags help %docs check% coccicheck \
|
||||
include/linux/version.h headers_% \
|
||||
kernelrelease kernelversion
|
||||
kernelversion %src-pkg
|
||||
|
||||
config-targets := 0
|
||||
mixed-targets := 0
|
||||
@ -526,7 +531,7 @@ endif # $(dot-config)
|
||||
# The all: target is the default when no target is given on the
|
||||
# command line.
|
||||
# This allow a user to issue only 'make' to build a kernel including modules
|
||||
# Defaults vmlinux but it is usually overridden in the arch makefile
|
||||
# Defaults to vmlinux, but the arch makefile usually adds further targets
|
||||
all: vmlinux
|
||||
|
||||
ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
|
||||
@ -557,6 +562,10 @@ KBUILD_CFLAGS += -g
|
||||
KBUILD_AFLAGS += -gdwarf-2
|
||||
endif
|
||||
|
||||
ifdef CONFIG_DEBUG_INFO_REDUCED
|
||||
KBUILD_CFLAGS += $(call cc-option, -femit-struct-debug-baseonly)
|
||||
endif
|
||||
|
||||
ifdef CONFIG_FUNCTION_TRACER
|
||||
KBUILD_CFLAGS += -pg
|
||||
endif
|
||||
@ -603,7 +612,7 @@ endif
|
||||
# Use --build-id when available.
|
||||
LDFLAGS_BUILD_ID = $(patsubst -Wl$(comma)%,%,\
|
||||
$(call cc-ldoption, -Wl$(comma)--build-id,))
|
||||
LDFLAGS_MODULE += $(LDFLAGS_BUILD_ID)
|
||||
KBUILD_LDFLAGS_MODULE += $(LDFLAGS_BUILD_ID)
|
||||
LDFLAGS_vmlinux += $(LDFLAGS_BUILD_ID)
|
||||
|
||||
ifeq ($(CONFIG_STRIP_ASM_SYMS),y)
|
||||
@ -1158,6 +1167,8 @@ distclean: mrproper
|
||||
# rpm target kept for backward compatibility
|
||||
package-dir := $(srctree)/scripts/package
|
||||
|
||||
%src-pkg: FORCE
|
||||
$(Q)$(MAKE) $(build)=$(package-dir) $@
|
||||
%pkg: include/config/kernel.release FORCE
|
||||
$(Q)$(MAKE) $(build)=$(package-dir) $@
|
||||
rpm: include/config/kernel.release FORCE
|
||||
@ -1209,8 +1220,9 @@ help:
|
||||
@echo ' includecheck - Check for duplicate included header files'
|
||||
@echo ' export_report - List the usages of all exported symbols'
|
||||
@echo ' headers_check - Sanity check on exported headers'
|
||||
@echo ' headerdep - Detect inclusion cycles in headers'; \
|
||||
echo ''
|
||||
@echo ' headerdep - Detect inclusion cycles in headers'
|
||||
@$(MAKE) -f $(srctree)/scripts/Makefile.help checker-help
|
||||
@echo ''
|
||||
@echo 'Kernel packaging:'
|
||||
@$(MAKE) $(build)=$(package-dir) help
|
||||
@echo ''
|
||||
@ -1369,6 +1381,9 @@ versioncheck:
|
||||
-name '*.[hcS]' -type f -print | sort \
|
||||
| xargs $(PERL) -w $(srctree)/scripts/checkversion.pl
|
||||
|
||||
coccicheck:
|
||||
$(Q)$(CONFIG_SHELL) $(srctree)/scripts/$@
|
||||
|
||||
namespacecheck:
|
||||
$(PERL) $(srctree)/scripts/namespace.pl
|
||||
|
||||
@ -1394,8 +1409,8 @@ checkstack:
|
||||
$(PERL) $(src)/scripts/checkstack.pl $(CHECKSTACK_ARCH)
|
||||
|
||||
kernelrelease:
|
||||
$(if $(wildcard include/config/kernel.release), $(Q)echo $(KERNELRELEASE), \
|
||||
$(error kernelrelease not valid - run 'make prepare' to update it))
|
||||
@echo "$(KERNELVERSION)$$($(CONFIG_SHELL) $(srctree)/scripts/setlocalversion $(srctree))"
|
||||
|
||||
kernelversion:
|
||||
@echo $(KERNELVERSION)
|
||||
|
||||
@ -1472,6 +1487,7 @@ cmd_crmodverdir = $(Q)mkdir -p $(MODVERDIR) \
|
||||
$(if $(KBUILD_MODULES),; rm -f $(MODVERDIR)/*)
|
||||
|
||||
a_flags = -Wp,-MD,$(depfile) $(KBUILD_AFLAGS) $(AFLAGS_KERNEL) \
|
||||
$(KBUILD_AFLAGS_KERNEL) \
|
||||
$(NOSTDINC_FLAGS) $(LINUXINCLUDE) $(KBUILD_CPPFLAGS) \
|
||||
$(modkern_aflags) $(EXTRA_AFLAGS) $(AFLAGS_$(basetarget).o)
|
||||
|
||||
|
@ -151,4 +151,11 @@ config HAVE_MIXED_BREAKPOINTS_REGS
|
||||
config HAVE_USER_RETURN_NOTIFIER
|
||||
bool
|
||||
|
||||
config HAVE_PERF_EVENTS_NMI
|
||||
bool
|
||||
help
|
||||
System hardware can generate an NMI using the perf event
|
||||
subsystem. Also has support for calculating CPU cycle events
|
||||
to determine how many clock cycles in a given period.
|
||||
|
||||
source "kernel/gcov/Kconfig"
|
||||
|
@ -47,10 +47,6 @@ config GENERIC_CALIBRATE_DELAY
|
||||
bool
|
||||
default y
|
||||
|
||||
config GENERIC_TIME
|
||||
bool
|
||||
default y
|
||||
|
||||
config GENERIC_CMOS_UPDATE
|
||||
def_bool y
|
||||
|
||||
|
@ -1,926 +1,76 @@
|
||||
#
|
||||
# Automatically generated make config: don't edit
|
||||
# Linux kernel version: 2.6.9-rc2
|
||||
# Sat Sep 25 15:38:35 2004
|
||||
#
|
||||
CONFIG_ALPHA=y
|
||||
CONFIG_64BIT=y
|
||||
CONFIG_MMU=y
|
||||
CONFIG_RWSEM_XCHGADD_ALGORITHM=y
|
||||
CONFIG_GENERIC_ISA_DMA=y
|
||||
# CONFIG_GENERIC_IOMAP is not set
|
||||
|
||||
#
|
||||
# Code maturity level options
|
||||
#
|
||||
CONFIG_EXPERIMENTAL=y
|
||||
CONFIG_CLEAN_COMPILE=y
|
||||
CONFIG_BROKEN_ON_SMP=y
|
||||
|
||||
#
|
||||
# General setup
|
||||
#
|
||||
CONFIG_LOCALVERSION=""
|
||||
CONFIG_SWAP=y
|
||||
CONFIG_SYSVIPC=y
|
||||
CONFIG_POSIX_MQUEUE=y
|
||||
# CONFIG_BSD_PROCESS_ACCT is not set
|
||||
CONFIG_SYSCTL=y
|
||||
# CONFIG_AUDIT is not set
|
||||
CONFIG_LOG_BUF_SHIFT=14
|
||||
# CONFIG_HOTPLUG is not set
|
||||
# CONFIG_IKCONFIG is not set
|
||||
# CONFIG_EMBEDDED is not set
|
||||
CONFIG_KALLSYMS=y
|
||||
CONFIG_KALLSYMS_ALL=y
|
||||
# CONFIG_KALLSYMS_EXTRA_PASS is not set
|
||||
CONFIG_FUTEX=y
|
||||
CONFIG_EPOLL=y
|
||||
CONFIG_IOSCHED_NOOP=y
|
||||
CONFIG_IOSCHED_AS=y
|
||||
CONFIG_IOSCHED_DEADLINE=y
|
||||
CONFIG_IOSCHED_CFQ=y
|
||||
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
|
||||
CONFIG_SHMEM=y
|
||||
# CONFIG_TINY_SHMEM is not set
|
||||
|
||||
#
|
||||
# Loadable module support
|
||||
#
|
||||
CONFIG_KALLSYMS_ALL=y
|
||||
CONFIG_MODULES=y
|
||||
CONFIG_MODULE_UNLOAD=y
|
||||
# CONFIG_MODULE_FORCE_UNLOAD is not set
|
||||
CONFIG_OBSOLETE_MODPARM=y
|
||||
# CONFIG_MODVERSIONS is not set
|
||||
CONFIG_KMOD=y
|
||||
|
||||
#
|
||||
# System setup
|
||||
#
|
||||
CONFIG_ALPHA_GENERIC=y
|
||||
# CONFIG_ALPHA_ALCOR is not set
|
||||
# CONFIG_ALPHA_XL is not set
|
||||
# CONFIG_ALPHA_BOOK1 is not set
|
||||
# CONFIG_ALPHA_AVANTI_CH is not set
|
||||
# CONFIG_ALPHA_CABRIOLET is not set
|
||||
# CONFIG_ALPHA_DP264 is not set
|
||||
# CONFIG_ALPHA_EB164 is not set
|
||||
# CONFIG_ALPHA_EB64P_CH is not set
|
||||
# CONFIG_ALPHA_EB66 is not set
|
||||
# CONFIG_ALPHA_EB66P is not set
|
||||
# CONFIG_ALPHA_EIGER is not set
|
||||
# CONFIG_ALPHA_JENSEN is not set
|
||||
# CONFIG_ALPHA_LX164 is not set
|
||||
# CONFIG_ALPHA_LYNX is not set
|
||||
# CONFIG_ALPHA_MARVEL is not set
|
||||
# CONFIG_ALPHA_MIATA is not set
|
||||
# CONFIG_ALPHA_MIKASA is not set
|
||||
# CONFIG_ALPHA_NAUTILUS is not set
|
||||
# CONFIG_ALPHA_NONAME_CH is not set
|
||||
# CONFIG_ALPHA_NORITAKE is not set
|
||||
# CONFIG_ALPHA_PC164 is not set
|
||||
# CONFIG_ALPHA_P2K is not set
|
||||
# CONFIG_ALPHA_RAWHIDE is not set
|
||||
# CONFIG_ALPHA_RUFFIAN is not set
|
||||
# CONFIG_ALPHA_RX164 is not set
|
||||
# CONFIG_ALPHA_SX164 is not set
|
||||
# CONFIG_ALPHA_SABLE is not set
|
||||
# CONFIG_ALPHA_SHARK is not set
|
||||
# CONFIG_ALPHA_TAKARA is not set
|
||||
# CONFIG_ALPHA_TITAN is not set
|
||||
# CONFIG_ALPHA_WILDFIRE is not set
|
||||
CONFIG_ISA=y
|
||||
CONFIG_PCI=y
|
||||
CONFIG_PCI_DOMAINS=y
|
||||
CONFIG_ALPHA_CORE_AGP=y
|
||||
CONFIG_ALPHA_BROKEN_IRQ_MASK=y
|
||||
CONFIG_EISA=y
|
||||
# CONFIG_SMP is not set
|
||||
# CONFIG_ARCH_DISCONTIGMEM_ENABLE is not set
|
||||
CONFIG_VERBOSE_MCHECK=y
|
||||
CONFIG_VERBOSE_MCHECK_ON=1
|
||||
CONFIG_PCI_LEGACY_PROC=y
|
||||
CONFIG_PCI_NAMES=y
|
||||
CONFIG_EISA_PCI_EISA=y
|
||||
CONFIG_EISA_VIRTUAL_ROOT=y
|
||||
CONFIG_EISA_NAMES=y
|
||||
CONFIG_SRM_ENV=m
|
||||
CONFIG_BINFMT_ELF=y
|
||||
# CONFIG_BINFMT_AOUT is not set
|
||||
# CONFIG_BINFMT_EM86 is not set
|
||||
# CONFIG_BINFMT_MISC is not set
|
||||
|
||||
#
|
||||
# Device Drivers
|
||||
#
|
||||
|
||||
#
|
||||
# Generic Driver Options
|
||||
#
|
||||
CONFIG_STANDALONE=y
|
||||
CONFIG_PREVENT_FIRMWARE_BUILD=y
|
||||
# CONFIG_DEBUG_DRIVER is not set
|
||||
|
||||
#
|
||||
# Memory Technology Devices (MTD)
|
||||
#
|
||||
# CONFIG_MTD is not set
|
||||
|
||||
#
|
||||
# Parallel port support
|
||||
#
|
||||
# CONFIG_PARPORT is not set
|
||||
|
||||
#
|
||||
# Plug and Play support
|
||||
#
|
||||
CONFIG_PNP=y
|
||||
# CONFIG_PNP_DEBUG is not set
|
||||
|
||||
#
|
||||
# Protocols
|
||||
#
|
||||
CONFIG_ISAPNP=y
|
||||
|
||||
#
|
||||
# Block devices
|
||||
#
|
||||
CONFIG_BLK_DEV_FD=y
|
||||
# CONFIG_BLK_DEV_XD is not set
|
||||
# CONFIG_BLK_CPQ_DA is not set
|
||||
# CONFIG_BLK_CPQ_CISS_DA is not set
|
||||
# CONFIG_BLK_DEV_DAC960 is not set
|
||||
# CONFIG_BLK_DEV_UMEM is not set
|
||||
CONFIG_BLK_DEV_LOOP=m
|
||||
# CONFIG_BLK_DEV_CRYPTOLOOP is not set
|
||||
# CONFIG_BLK_DEV_NBD is not set
|
||||
# CONFIG_BLK_DEV_SX8 is not set
|
||||
# CONFIG_BLK_DEV_RAM is not set
|
||||
|
||||
#
|
||||
# ATA/ATAPI/MFM/RLL support
|
||||
#
|
||||
CONFIG_IDE=y
|
||||
CONFIG_IDE_MAX_HWIFS=4
|
||||
CONFIG_BLK_DEV_IDE=y
|
||||
|
||||
#
|
||||
# Please see Documentation/ide.txt for help/info on IDE drives
|
||||
#
|
||||
# CONFIG_BLK_DEV_IDE_SATA is not set
|
||||
CONFIG_BLK_DEV_IDEDISK=y
|
||||
CONFIG_IDEDISK_MULTI_MODE=y
|
||||
CONFIG_BLK_DEV_IDECD=y
|
||||
# CONFIG_BLK_DEV_IDETAPE is not set
|
||||
# CONFIG_BLK_DEV_IDEFLOPPY is not set
|
||||
# CONFIG_BLK_DEV_IDESCSI is not set
|
||||
# CONFIG_IDE_TASK_IOCTL is not set
|
||||
# CONFIG_IDE_TASKFILE_IO is not set
|
||||
|
||||
#
|
||||
# IDE chipset support/bugfixes
|
||||
#
|
||||
CONFIG_IDE_GENERIC=y
|
||||
# CONFIG_BLK_DEV_IDEPNP is not set
|
||||
CONFIG_BLK_DEV_IDEPCI=y
|
||||
# CONFIG_IDEPCI_SHARE_IRQ is not set
|
||||
# CONFIG_BLK_DEV_OFFBOARD is not set
|
||||
CONFIG_BLK_DEV_GENERIC=y
|
||||
# CONFIG_BLK_DEV_OPTI621 is not set
|
||||
CONFIG_BLK_DEV_IDEDMA_PCI=y
|
||||
# CONFIG_BLK_DEV_IDEDMA_FORCED is not set
|
||||
CONFIG_IDEDMA_PCI_AUTO=y
|
||||
# CONFIG_IDEDMA_ONLYDISK is not set
|
||||
# CONFIG_BLK_DEV_AEC62XX is not set
|
||||
CONFIG_BLK_DEV_ALI15X3=y
|
||||
# CONFIG_WDC_ALI15X3 is not set
|
||||
# CONFIG_BLK_DEV_AMD74XX is not set
|
||||
CONFIG_BLK_DEV_CMD64X=y
|
||||
# CONFIG_BLK_DEV_TRIFLEX is not set
|
||||
CONFIG_BLK_DEV_CY82C693=y
|
||||
# CONFIG_BLK_DEV_CS5520 is not set
|
||||
# CONFIG_BLK_DEV_CS5530 is not set
|
||||
# CONFIG_BLK_DEV_HPT34X is not set
|
||||
# CONFIG_BLK_DEV_HPT366 is not set
|
||||
# CONFIG_BLK_DEV_SC1200 is not set
|
||||
# CONFIG_BLK_DEV_PIIX is not set
|
||||
# CONFIG_BLK_DEV_NS87415 is not set
|
||||
# CONFIG_BLK_DEV_PDC202XX_OLD is not set
|
||||
# CONFIG_BLK_DEV_PDC202XX_NEW is not set
|
||||
# CONFIG_BLK_DEV_SVWKS is not set
|
||||
# CONFIG_BLK_DEV_SIIMAGE is not set
|
||||
# CONFIG_BLK_DEV_SLC90E66 is not set
|
||||
# CONFIG_BLK_DEV_TRM290 is not set
|
||||
# CONFIG_BLK_DEV_VIA82CXXX is not set
|
||||
# CONFIG_IDE_ARM is not set
|
||||
# CONFIG_IDE_CHIPSETS is not set
|
||||
CONFIG_BLK_DEV_IDEDMA=y
|
||||
# CONFIG_IDEDMA_IVB is not set
|
||||
CONFIG_IDEDMA_AUTO=y
|
||||
# CONFIG_BLK_DEV_HD is not set
|
||||
|
||||
#
|
||||
# SCSI device support
|
||||
#
|
||||
CONFIG_SCSI=y
|
||||
CONFIG_SCSI_PROC_FS=y
|
||||
|
||||
#
|
||||
# SCSI support type (disk, tape, CD-ROM)
|
||||
#
|
||||
CONFIG_BLK_DEV_SD=y
|
||||
# CONFIG_CHR_DEV_ST is not set
|
||||
# CONFIG_CHR_DEV_OSST is not set
|
||||
CONFIG_BLK_DEV_SR=y
|
||||
CONFIG_BLK_DEV_SR_VENDOR=y
|
||||
# CONFIG_CHR_DEV_SG is not set
|
||||
|
||||
#
|
||||
# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
|
||||
#
|
||||
# CONFIG_SCSI_MULTI_LUN is not set
|
||||
# CONFIG_SCSI_CONSTANTS is not set
|
||||
# CONFIG_SCSI_LOGGING is not set
|
||||
|
||||
#
|
||||
# SCSI Transport Attributes
|
||||
#
|
||||
# CONFIG_SCSI_SPI_ATTRS is not set
|
||||
# CONFIG_SCSI_FC_ATTRS is not set
|
||||
|
||||
#
|
||||
# SCSI low-level drivers
|
||||
#
|
||||
# CONFIG_BLK_DEV_3W_XXXX_RAID is not set
|
||||
# CONFIG_SCSI_3W_9XXX is not set
|
||||
# CONFIG_SCSI_7000FASST is not set
|
||||
# CONFIG_SCSI_ACARD is not set
|
||||
# CONFIG_SCSI_AHA1542 is not set
|
||||
# CONFIG_SCSI_AHA1740 is not set
|
||||
# CONFIG_SCSI_AACRAID is not set
|
||||
CONFIG_SCSI_AIC7XXX=m
|
||||
CONFIG_AIC7XXX_CMDS_PER_DEVICE=253
|
||||
CONFIG_AIC7XXX_RESET_DELAY_MS=5000
|
||||
# CONFIG_AIC7XXX_PROBE_EISA_VL is not set
|
||||
# CONFIG_AIC7XXX_DEBUG_ENABLE is not set
|
||||
CONFIG_AIC7XXX_DEBUG_MASK=0
|
||||
CONFIG_AIC7XXX_REG_PRETTY_PRINT=y
|
||||
# CONFIG_SCSI_AIC7XXX_OLD is not set
|
||||
# CONFIG_SCSI_AIC79XX is not set
|
||||
# CONFIG_SCSI_IN2000 is not set
|
||||
# CONFIG_MEGARAID_NEWGEN is not set
|
||||
# CONFIG_MEGARAID_LEGACY is not set
|
||||
# CONFIG_SCSI_SATA is not set
|
||||
# CONFIG_SCSI_BUSLOGIC is not set
|
||||
# CONFIG_SCSI_DMX3191D is not set
|
||||
# CONFIG_SCSI_DTC3280 is not set
|
||||
# CONFIG_SCSI_EATA is not set
|
||||
# CONFIG_SCSI_EATA_PIO is not set
|
||||
# CONFIG_SCSI_FUTURE_DOMAIN is not set
|
||||
# CONFIG_SCSI_GDTH is not set
|
||||
# CONFIG_SCSI_GENERIC_NCR5380 is not set
|
||||
# CONFIG_SCSI_GENERIC_NCR5380_MMIO is not set
|
||||
# CONFIG_SCSI_IPS is not set
|
||||
# CONFIG_SCSI_INIA100 is not set
|
||||
# CONFIG_SCSI_NCR53C406A is not set
|
||||
# CONFIG_SCSI_SYM53C8XX_2 is not set
|
||||
# CONFIG_SCSI_IPR is not set
|
||||
# CONFIG_SCSI_PAS16 is not set
|
||||
# CONFIG_SCSI_PSI240I is not set
|
||||
# CONFIG_SCSI_QLOGIC_FAS is not set
|
||||
# CONFIG_SCSI_QLOGIC_ISP is not set
|
||||
# CONFIG_SCSI_QLOGIC_FC is not set
|
||||
# CONFIG_SCSI_QLOGIC_1280 is not set
|
||||
CONFIG_SCSI_QLA2XXX=y
|
||||
# CONFIG_SCSI_QLA21XX is not set
|
||||
# CONFIG_SCSI_QLA22XX is not set
|
||||
# CONFIG_SCSI_QLA2300 is not set
|
||||
# CONFIG_SCSI_QLA2322 is not set
|
||||
# CONFIG_SCSI_QLA6312 is not set
|
||||
# CONFIG_SCSI_QLA6322 is not set
|
||||
# CONFIG_SCSI_SIM710 is not set
|
||||
# CONFIG_SCSI_SYM53C416 is not set
|
||||
# CONFIG_SCSI_DC395x is not set
|
||||
# CONFIG_SCSI_DC390T is not set
|
||||
# CONFIG_SCSI_T128 is not set
|
||||
# CONFIG_SCSI_U14_34F is not set
|
||||
# CONFIG_SCSI_DEBUG is not set
|
||||
|
||||
#
|
||||
# Old CD-ROM drivers (not SCSI, not IDE)
|
||||
#
|
||||
# CONFIG_CD_NO_IDESCSI is not set
|
||||
|
||||
#
|
||||
# Multi-device support (RAID and LVM)
|
||||
#
|
||||
# CONFIG_MD is not set
|
||||
|
||||
#
|
||||
# Fusion MPT device support
|
||||
#
|
||||
# CONFIG_FUSION is not set
|
||||
|
||||
#
|
||||
# IEEE 1394 (FireWire) support
|
||||
#
|
||||
# CONFIG_IEEE1394 is not set
|
||||
|
||||
#
|
||||
# I2O device support
|
||||
#
|
||||
# CONFIG_I2O is not set
|
||||
|
||||
#
|
||||
# Networking support
|
||||
#
|
||||
CONFIG_NET=y
|
||||
|
||||
#
|
||||
# Networking options
|
||||
#
|
||||
CONFIG_PACKET=y
|
||||
# CONFIG_PACKET_MMAP is not set
|
||||
CONFIG_NETLINK_DEV=y
|
||||
CONFIG_UNIX=y
|
||||
CONFIG_XFRM_USER=m
|
||||
CONFIG_NET_KEY=m
|
||||
CONFIG_INET=y
|
||||
CONFIG_IP_MULTICAST=y
|
||||
# CONFIG_IP_ADVANCED_ROUTER is not set
|
||||
# CONFIG_IP_PNP is not set
|
||||
# CONFIG_NET_IPIP is not set
|
||||
# CONFIG_NET_IPGRE is not set
|
||||
# CONFIG_IP_MROUTE is not set
|
||||
# CONFIG_ARPD is not set
|
||||
# CONFIG_SYN_COOKIES is not set
|
||||
CONFIG_INET_AH=m
|
||||
CONFIG_INET_ESP=m
|
||||
# CONFIG_INET_IPCOMP is not set
|
||||
# CONFIG_INET_TUNNEL is not set
|
||||
|
||||
#
|
||||
# IP: Virtual Server Configuration
|
||||
#
|
||||
# CONFIG_IP_VS is not set
|
||||
# CONFIG_IPV6 is not set
|
||||
CONFIG_NETFILTER=y
|
||||
# CONFIG_NETFILTER_DEBUG is not set
|
||||
|
||||
#
|
||||
# IP: Netfilter Configuration
|
||||
#
|
||||
CONFIG_IP_NF_CONNTRACK=m
|
||||
# CONFIG_IP_NF_CT_ACCT is not set
|
||||
# CONFIG_IP_NF_CT_PROTO_SCTP is not set
|
||||
CONFIG_IP_NF_FTP=m
|
||||
CONFIG_IP_NF_IRC=m
|
||||
# CONFIG_IP_NF_TFTP is not set
|
||||
# CONFIG_IP_NF_AMANDA is not set
|
||||
CONFIG_IP_NF_QUEUE=m
|
||||
CONFIG_IP_NF_IPTABLES=m
|
||||
# CONFIG_IP_NF_MATCH_LIMIT is not set
|
||||
# CONFIG_IP_NF_MATCH_IPRANGE is not set
|
||||
# CONFIG_IP_NF_MATCH_MAC is not set
|
||||
# CONFIG_IP_NF_MATCH_PKTTYPE is not set
|
||||
# CONFIG_IP_NF_MATCH_MARK is not set
|
||||
# CONFIG_IP_NF_MATCH_MULTIPORT is not set
|
||||
# CONFIG_IP_NF_MATCH_TOS is not set
|
||||
# CONFIG_IP_NF_MATCH_RECENT is not set
|
||||
# CONFIG_IP_NF_MATCH_ECN is not set
|
||||
# CONFIG_IP_NF_MATCH_DSCP is not set
|
||||
# CONFIG_IP_NF_MATCH_AH_ESP is not set
|
||||
# CONFIG_IP_NF_MATCH_LENGTH is not set
|
||||
# CONFIG_IP_NF_MATCH_TTL is not set
|
||||
# CONFIG_IP_NF_MATCH_TCPMSS is not set
|
||||
# CONFIG_IP_NF_MATCH_HELPER is not set
|
||||
# CONFIG_IP_NF_MATCH_STATE is not set
|
||||
# CONFIG_IP_NF_MATCH_CONNTRACK is not set
|
||||
# CONFIG_IP_NF_MATCH_OWNER is not set
|
||||
# CONFIG_IP_NF_MATCH_ADDRTYPE is not set
|
||||
# CONFIG_IP_NF_MATCH_REALM is not set
|
||||
# CONFIG_IP_NF_MATCH_SCTP is not set
|
||||
# CONFIG_IP_NF_MATCH_COMMENT is not set
|
||||
CONFIG_IP_NF_FILTER=m
|
||||
# CONFIG_IP_NF_TARGET_REJECT is not set
|
||||
# CONFIG_IP_NF_TARGET_LOG is not set
|
||||
# CONFIG_IP_NF_TARGET_ULOG is not set
|
||||
# CONFIG_IP_NF_TARGET_TCPMSS is not set
|
||||
CONFIG_IP_NF_NAT=m
|
||||
CONFIG_IP_NF_NAT_NEEDED=y
|
||||
CONFIG_IP_NF_TARGET_MASQUERADE=m
|
||||
# CONFIG_IP_NF_TARGET_REDIRECT is not set
|
||||
# CONFIG_IP_NF_TARGET_NETMAP is not set
|
||||
# CONFIG_IP_NF_TARGET_SAME is not set
|
||||
# CONFIG_IP_NF_NAT_SNMP_BASIC is not set
|
||||
CONFIG_IP_NF_NAT_IRC=m
|
||||
CONFIG_IP_NF_NAT_FTP=m
|
||||
# CONFIG_IP_NF_MANGLE is not set
|
||||
# CONFIG_IP_NF_RAW is not set
|
||||
# CONFIG_IP_NF_ARPTABLES is not set
|
||||
CONFIG_IP_NF_COMPAT_IPCHAINS=y
|
||||
CONFIG_XFRM=y
|
||||
CONFIG_XFRM_USER=m
|
||||
|
||||
#
|
||||
# SCTP Configuration (EXPERIMENTAL)
|
||||
#
|
||||
# CONFIG_IP_SCTP is not set
|
||||
# CONFIG_ATM is not set
|
||||
# CONFIG_BRIDGE is not set
|
||||
CONFIG_VLAN_8021Q=m
|
||||
# CONFIG_DECNET is not set
|
||||
# CONFIG_LLC2 is not set
|
||||
# CONFIG_IPX is not set
|
||||
# CONFIG_ATALK is not set
|
||||
# CONFIG_X25 is not set
|
||||
# CONFIG_LAPB is not set
|
||||
# CONFIG_NET_DIVERT is not set
|
||||
# CONFIG_ECONET is not set
|
||||
# CONFIG_WAN_ROUTER is not set
|
||||
# CONFIG_NET_HW_FLOWCONTROL is not set
|
||||
|
||||
#
|
||||
# QoS and/or fair queueing
|
||||
#
|
||||
# CONFIG_NET_SCHED is not set
|
||||
# CONFIG_NET_CLS_ROUTE is not set
|
||||
|
||||
#
|
||||
# Network testing
|
||||
#
|
||||
# CONFIG_NET_PKTGEN is not set
|
||||
# CONFIG_NETPOLL is not set
|
||||
# CONFIG_NET_POLL_CONTROLLER is not set
|
||||
# CONFIG_HAMRADIO is not set
|
||||
# CONFIG_IRDA is not set
|
||||
# CONFIG_BT is not set
|
||||
CONFIG_PNP=y
|
||||
CONFIG_ISAPNP=y
|
||||
CONFIG_BLK_DEV_FD=y
|
||||
CONFIG_BLK_DEV_LOOP=m
|
||||
CONFIG_IDE=y
|
||||
CONFIG_BLK_DEV_IDECD=y
|
||||
CONFIG_IDE_GENERIC=y
|
||||
CONFIG_BLK_DEV_GENERIC=y
|
||||
CONFIG_BLK_DEV_ALI15X3=y
|
||||
CONFIG_BLK_DEV_CMD64X=y
|
||||
CONFIG_BLK_DEV_CY82C693=y
|
||||
CONFIG_SCSI=y
|
||||
CONFIG_BLK_DEV_SD=y
|
||||
CONFIG_BLK_DEV_SR=y
|
||||
CONFIG_BLK_DEV_SR_VENDOR=y
|
||||
CONFIG_SCSI_AIC7XXX=m
|
||||
CONFIG_AIC7XXX_CMDS_PER_DEVICE=253
|
||||
# CONFIG_AIC7XXX_DEBUG_ENABLE is not set
|
||||
CONFIG_NETDEVICES=y
|
||||
CONFIG_DUMMY=m
|
||||
# CONFIG_BONDING is not set
|
||||
# CONFIG_EQUALIZER is not set
|
||||
# CONFIG_TUN is not set
|
||||
# CONFIG_ETHERTAP is not set
|
||||
# CONFIG_NET_SB1000 is not set
|
||||
|
||||
#
|
||||
# ARCnet devices
|
||||
#
|
||||
# CONFIG_ARCNET is not set
|
||||
|
||||
#
|
||||
# Ethernet (10 or 100Mbit)
|
||||
#
|
||||
CONFIG_NET_ETHERNET=y
|
||||
CONFIG_MII=y
|
||||
# CONFIG_HAPPYMEAL is not set
|
||||
# CONFIG_SUNGEM is not set
|
||||
CONFIG_NET_VENDOR_3COM=y
|
||||
# CONFIG_EL1 is not set
|
||||
# CONFIG_EL2 is not set
|
||||
# CONFIG_ELPLUS is not set
|
||||
# CONFIG_EL16 is not set
|
||||
# CONFIG_EL3 is not set
|
||||
# CONFIG_3C515 is not set
|
||||
CONFIG_VORTEX=y
|
||||
# CONFIG_TYPHOON is not set
|
||||
# CONFIG_LANCE is not set
|
||||
# CONFIG_NET_VENDOR_SMC is not set
|
||||
# CONFIG_NET_VENDOR_RACAL is not set
|
||||
|
||||
#
|
||||
# Tulip family network device support
|
||||
#
|
||||
CONFIG_NET_TULIP=y
|
||||
CONFIG_DE2104X=m
|
||||
CONFIG_TULIP=y
|
||||
# CONFIG_TULIP_MWI is not set
|
||||
CONFIG_TULIP_MMIO=y
|
||||
# CONFIG_TULIP_NAPI is not set
|
||||
# CONFIG_DE4X5 is not set
|
||||
# CONFIG_WINBOND_840 is not set
|
||||
# CONFIG_DM9102 is not set
|
||||
# CONFIG_AT1700 is not set
|
||||
# CONFIG_DEPCA is not set
|
||||
# CONFIG_HP100 is not set
|
||||
# CONFIG_NET_ISA is not set
|
||||
CONFIG_NET_PCI=y
|
||||
# CONFIG_PCNET32 is not set
|
||||
# CONFIG_AMD8111_ETH is not set
|
||||
# CONFIG_ADAPTEC_STARFIRE is not set
|
||||
# CONFIG_AC3200 is not set
|
||||
# CONFIG_APRICOT is not set
|
||||
# CONFIG_B44 is not set
|
||||
# CONFIG_FORCEDETH is not set
|
||||
# CONFIG_CS89x0 is not set
|
||||
# CONFIG_DGRS is not set
|
||||
# CONFIG_EEPRO100 is not set
|
||||
# CONFIG_E100 is not set
|
||||
# CONFIG_LNE390 is not set
|
||||
# CONFIG_FEALNX is not set
|
||||
# CONFIG_NATSEMI is not set
|
||||
# CONFIG_NE2K_PCI is not set
|
||||
# CONFIG_NE3210 is not set
|
||||
# CONFIG_ES3210 is not set
|
||||
# CONFIG_8139CP is not set
|
||||
# CONFIG_8139TOO is not set
|
||||
# CONFIG_SIS900 is not set
|
||||
# CONFIG_EPIC100 is not set
|
||||
# CONFIG_SUNDANCE is not set
|
||||
# CONFIG_VIA_RHINE is not set
|
||||
# CONFIG_VIA_VELOCITY is not set
|
||||
# CONFIG_NET_POCKET is not set
|
||||
|
||||
#
|
||||
# Ethernet (1000 Mbit)
|
||||
#
|
||||
# CONFIG_ACENIC is not set
|
||||
# CONFIG_DL2K is not set
|
||||
# CONFIG_E1000 is not set
|
||||
# CONFIG_NS83820 is not set
|
||||
# CONFIG_HAMACHI is not set
|
||||
CONFIG_YELLOWFIN=y
|
||||
# CONFIG_R8169 is not set
|
||||
# CONFIG_SK98LIN is not set
|
||||
# CONFIG_TIGON3 is not set
|
||||
|
||||
#
|
||||
# Ethernet (10000 Mbit)
|
||||
#
|
||||
# CONFIG_IXGB is not set
|
||||
# CONFIG_S2IO is not set
|
||||
|
||||
#
|
||||
# Token Ring devices
|
||||
#
|
||||
# CONFIG_TR is not set
|
||||
|
||||
#
|
||||
# Wireless LAN (non-hamradio)
|
||||
#
|
||||
# CONFIG_NET_RADIO is not set
|
||||
|
||||
#
|
||||
# Wan interfaces
|
||||
#
|
||||
# CONFIG_WAN is not set
|
||||
# CONFIG_FDDI is not set
|
||||
# CONFIG_HIPPI is not set
|
||||
# CONFIG_PPP is not set
|
||||
# CONFIG_SLIP is not set
|
||||
# CONFIG_NET_FC is not set
|
||||
# CONFIG_SHAPER is not set
|
||||
# CONFIG_NETCONSOLE is not set
|
||||
|
||||
#
|
||||
# ISDN subsystem
|
||||
#
|
||||
# CONFIG_ISDN is not set
|
||||
|
||||
#
|
||||
# Telephony Support
|
||||
#
|
||||
# CONFIG_PHONE is not set
|
||||
|
||||
#
|
||||
# Input device support
|
||||
#
|
||||
CONFIG_INPUT=y
|
||||
|
||||
#
|
||||
# Userland interfaces
|
||||
#
|
||||
CONFIG_INPUT_MOUSEDEV=y
|
||||
CONFIG_INPUT_MOUSEDEV_PSAUX=y
|
||||
CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
|
||||
CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
|
||||
# CONFIG_INPUT_JOYDEV is not set
|
||||
# CONFIG_INPUT_TSDEV is not set
|
||||
# CONFIG_INPUT_EVDEV is not set
|
||||
# CONFIG_INPUT_EVBUG is not set
|
||||
|
||||
#
|
||||
# Input I/O drivers
|
||||
#
|
||||
# CONFIG_GAMEPORT is not set
|
||||
CONFIG_SOUND_GAMEPORT=y
|
||||
CONFIG_SERIO=y
|
||||
CONFIG_SERIO_I8042=y
|
||||
CONFIG_SERIO_SERPORT=y
|
||||
# CONFIG_SERIO_CT82C710 is not set
|
||||
# CONFIG_SERIO_PCIPS2 is not set
|
||||
# CONFIG_SERIO_RAW is not set
|
||||
|
||||
#
|
||||
# Input Device Drivers
|
||||
#
|
||||
CONFIG_INPUT_KEYBOARD=y
|
||||
CONFIG_KEYBOARD_ATKBD=y
|
||||
# CONFIG_KEYBOARD_SUNKBD is not set
|
||||
# CONFIG_KEYBOARD_LKKBD is not set
|
||||
# CONFIG_KEYBOARD_XTKBD is not set
|
||||
# CONFIG_KEYBOARD_NEWTON is not set
|
||||
CONFIG_INPUT_MOUSE=y
|
||||
CONFIG_MOUSE_PS2=y
|
||||
# CONFIG_MOUSE_SERIAL is not set
|
||||
# CONFIG_MOUSE_INPORT is not set
|
||||
# CONFIG_MOUSE_LOGIBM is not set
|
||||
# CONFIG_MOUSE_PC110PAD is not set
|
||||
# CONFIG_MOUSE_VSXXXAA is not set
|
||||
# CONFIG_INPUT_JOYSTICK is not set
|
||||
# CONFIG_INPUT_TOUCHSCREEN is not set
|
||||
# CONFIG_INPUT_MISC is not set
|
||||
|
||||
#
|
||||
# Character devices
|
||||
#
|
||||
CONFIG_VT=y
|
||||
CONFIG_VT_CONSOLE=y
|
||||
CONFIG_HW_CONSOLE=y
|
||||
# CONFIG_SERIAL_NONSTANDARD is not set
|
||||
|
||||
#
|
||||
# Serial drivers
|
||||
#
|
||||
CONFIG_SERIAL_8250=y
|
||||
CONFIG_SERIAL_8250_CONSOLE=y
|
||||
CONFIG_SERIAL_8250_NR_UARTS=4
|
||||
# CONFIG_SERIAL_8250_EXTENDED is not set
|
||||
|
||||
#
|
||||
# Non-8250 serial port support
|
||||
#
|
||||
CONFIG_SERIAL_CORE=y
|
||||
CONFIG_SERIAL_CORE_CONSOLE=y
|
||||
CONFIG_UNIX98_PTYS=y
|
||||
CONFIG_LEGACY_PTYS=y
|
||||
CONFIG_LEGACY_PTY_COUNT=256
|
||||
|
||||
#
|
||||
# IPMI
|
||||
#
|
||||
# CONFIG_IPMI_HANDLER is not set
|
||||
|
||||
#
|
||||
# Watchdog Cards
|
||||
#
|
||||
# CONFIG_WATCHDOG is not set
|
||||
CONFIG_RTC=y
|
||||
# CONFIG_DTLK is not set
|
||||
# CONFIG_R3964 is not set
|
||||
# CONFIG_APPLICOM is not set
|
||||
|
||||
#
|
||||
# Ftape, the floppy tape device driver
|
||||
#
|
||||
# CONFIG_FTAPE is not set
|
||||
# CONFIG_AGP is not set
|
||||
# CONFIG_DRM is not set
|
||||
# CONFIG_RAW_DRIVER is not set
|
||||
|
||||
#
|
||||
# I2C support
|
||||
#
|
||||
# CONFIG_I2C is not set
|
||||
|
||||
#
|
||||
# Dallas's 1-wire bus
|
||||
#
|
||||
# CONFIG_W1 is not set
|
||||
|
||||
#
|
||||
# Misc devices
|
||||
#
|
||||
|
||||
#
|
||||
# Multimedia devices
|
||||
#
|
||||
# CONFIG_VIDEO_DEV is not set
|
||||
|
||||
#
|
||||
# Digital Video Broadcasting Devices
|
||||
#
|
||||
# CONFIG_DVB is not set
|
||||
|
||||
#
|
||||
# Graphics support
|
||||
#
|
||||
# CONFIG_FB is not set
|
||||
|
||||
#
|
||||
# Console display driver support
|
||||
#
|
||||
CONFIG_VGA_CONSOLE=y
|
||||
# CONFIG_MDA_CONSOLE is not set
|
||||
CONFIG_DUMMY_CONSOLE=y
|
||||
|
||||
#
|
||||
# Sound
|
||||
#
|
||||
# CONFIG_SOUND is not set
|
||||
|
||||
#
|
||||
# USB support
|
||||
#
|
||||
# CONFIG_USB is not set
|
||||
|
||||
#
|
||||
# USB Gadget Support
|
||||
#
|
||||
# CONFIG_USB_GADGET is not set
|
||||
|
||||
#
|
||||
# File systems
|
||||
#
|
||||
CONFIG_EXT2_FS=y
|
||||
# CONFIG_EXT2_FS_XATTR is not set
|
||||
# CONFIG_EXT3_FS is not set
|
||||
# CONFIG_JBD is not set
|
||||
CONFIG_REISERFS_FS=m
|
||||
# CONFIG_REISERFS_CHECK is not set
|
||||
# CONFIG_REISERFS_PROC_INFO is not set
|
||||
# CONFIG_REISERFS_FS_XATTR is not set
|
||||
# CONFIG_JFS_FS is not set
|
||||
# CONFIG_XFS_FS is not set
|
||||
# CONFIG_MINIX_FS is not set
|
||||
# CONFIG_ROMFS_FS is not set
|
||||
# CONFIG_QUOTA is not set
|
||||
CONFIG_AUTOFS_FS=m
|
||||
# CONFIG_AUTOFS4_FS is not set
|
||||
|
||||
#
|
||||
# CD-ROM/DVD Filesystems
|
||||
#
|
||||
CONFIG_ISO9660_FS=y
|
||||
# CONFIG_JOLIET is not set
|
||||
# CONFIG_ZISOFS is not set
|
||||
# CONFIG_UDF_FS is not set
|
||||
|
||||
#
|
||||
# DOS/FAT/NT Filesystems
|
||||
#
|
||||
CONFIG_FAT_FS=y
|
||||
CONFIG_MSDOS_FS=y
|
||||
CONFIG_VFAT_FS=y
|
||||
CONFIG_FAT_DEFAULT_CODEPAGE=437
|
||||
CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
|
||||
# CONFIG_NTFS_FS is not set
|
||||
|
||||
#
|
||||
# Pseudo filesystems
|
||||
#
|
||||
CONFIG_PROC_FS=y
|
||||
CONFIG_PROC_KCORE=y
|
||||
CONFIG_SYSFS=y
|
||||
# CONFIG_DEVFS_FS is not set
|
||||
# CONFIG_DEVPTS_FS_XATTR is not set
|
||||
CONFIG_TMPFS=y
|
||||
# CONFIG_HUGETLB_PAGE is not set
|
||||
CONFIG_RAMFS=y
|
||||
|
||||
#
|
||||
# Miscellaneous filesystems
|
||||
#
|
||||
# CONFIG_ADFS_FS is not set
|
||||
# CONFIG_AFFS_FS is not set
|
||||
# CONFIG_HFS_FS is not set
|
||||
# CONFIG_HFSPLUS_FS is not set
|
||||
# CONFIG_BEFS_FS is not set
|
||||
# CONFIG_BFS_FS is not set
|
||||
# CONFIG_EFS_FS is not set
|
||||
# CONFIG_CRAMFS is not set
|
||||
# CONFIG_VXFS_FS is not set
|
||||
# CONFIG_HPFS_FS is not set
|
||||
# CONFIG_QNX4FS_FS is not set
|
||||
# CONFIG_SYSV_FS is not set
|
||||
# CONFIG_UFS_FS is not set
|
||||
|
||||
#
|
||||
# Network File Systems
|
||||
#
|
||||
CONFIG_NFS_FS=m
|
||||
CONFIG_NFS_V3=y
|
||||
# CONFIG_NFS_V4 is not set
|
||||
# CONFIG_NFS_DIRECTIO is not set
|
||||
CONFIG_NFSD=m
|
||||
CONFIG_NFSD_V3=y
|
||||
# CONFIG_NFSD_V4 is not set
|
||||
CONFIG_NFSD_TCP=y
|
||||
CONFIG_LOCKD=m
|
||||
CONFIG_LOCKD_V4=y
|
||||
CONFIG_EXPORTFS=m
|
||||
CONFIG_SUNRPC=m
|
||||
# CONFIG_RPCSEC_GSS_KRB5 is not set
|
||||
# CONFIG_RPCSEC_GSS_SPKM3 is not set
|
||||
# CONFIG_SMB_FS is not set
|
||||
# CONFIG_CIFS is not set
|
||||
# CONFIG_NCP_FS is not set
|
||||
# CONFIG_CODA_FS is not set
|
||||
# CONFIG_AFS_FS is not set
|
||||
|
||||
#
|
||||
# Partition Types
|
||||
#
|
||||
# CONFIG_PARTITION_ADVANCED is not set
|
||||
CONFIG_OSF_PARTITION=y
|
||||
CONFIG_MSDOS_PARTITION=y
|
||||
|
||||
#
|
||||
# Native Language Support
|
||||
#
|
||||
CONFIG_NLS=y
|
||||
CONFIG_NLS_DEFAULT="iso8859-1"
|
||||
CONFIG_NLS_CODEPAGE_437=y
|
||||
# CONFIG_NLS_CODEPAGE_737 is not set
|
||||
# CONFIG_NLS_CODEPAGE_775 is not set
|
||||
# CONFIG_NLS_CODEPAGE_850 is not set
|
||||
# CONFIG_NLS_CODEPAGE_852 is not set
|
||||
# CONFIG_NLS_CODEPAGE_855 is not set
|
||||
# CONFIG_NLS_CODEPAGE_857 is not set
|
||||
# CONFIG_NLS_CODEPAGE_860 is not set
|
||||
# CONFIG_NLS_CODEPAGE_861 is not set
|
||||
# CONFIG_NLS_CODEPAGE_862 is not set
|
||||
# CONFIG_NLS_CODEPAGE_863 is not set
|
||||
# CONFIG_NLS_CODEPAGE_864 is not set
|
||||
# CONFIG_NLS_CODEPAGE_865 is not set
|
||||
# CONFIG_NLS_CODEPAGE_866 is not set
|
||||
# CONFIG_NLS_CODEPAGE_869 is not set
|
||||
# CONFIG_NLS_CODEPAGE_936 is not set
|
||||
# CONFIG_NLS_CODEPAGE_950 is not set
|
||||
# CONFIG_NLS_CODEPAGE_932 is not set
|
||||
# CONFIG_NLS_CODEPAGE_949 is not set
|
||||
# CONFIG_NLS_CODEPAGE_874 is not set
|
||||
# CONFIG_NLS_ISO8859_8 is not set
|
||||
# CONFIG_NLS_CODEPAGE_1250 is not set
|
||||
# CONFIG_NLS_CODEPAGE_1251 is not set
|
||||
# CONFIG_NLS_ASCII is not set
|
||||
# CONFIG_NLS_ISO8859_1 is not set
|
||||
# CONFIG_NLS_ISO8859_2 is not set
|
||||
# CONFIG_NLS_ISO8859_3 is not set
|
||||
# CONFIG_NLS_ISO8859_4 is not set
|
||||
# CONFIG_NLS_ISO8859_5 is not set
|
||||
# CONFIG_NLS_ISO8859_6 is not set
|
||||
# CONFIG_NLS_ISO8859_7 is not set
|
||||
# CONFIG_NLS_ISO8859_9 is not set
|
||||
# CONFIG_NLS_ISO8859_13 is not set
|
||||
# CONFIG_NLS_ISO8859_14 is not set
|
||||
# CONFIG_NLS_ISO8859_15 is not set
|
||||
# CONFIG_NLS_KOI8_R is not set
|
||||
# CONFIG_NLS_KOI8_U is not set
|
||||
# CONFIG_NLS_UTF8 is not set
|
||||
|
||||
#
|
||||
# Profiling support
|
||||
#
|
||||
# CONFIG_PROFILING is not set
|
||||
|
||||
#
|
||||
# Kernel hacking
|
||||
#
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_MAGIC_SYSRQ=y
|
||||
# CONFIG_DEBUG_SLAB is not set
|
||||
# CONFIG_DEBUG_SPINLOCK is not set
|
||||
CONFIG_DEBUG_KERNEL=y
|
||||
CONFIG_DEBUG_INFO=y
|
||||
CONFIG_EARLY_PRINTK=y
|
||||
# CONFIG_DEBUG_SEMAPHORE is not set
|
||||
CONFIG_ALPHA_LEGACY_START_ADDRESS=y
|
||||
CONFIG_MATHEMU=y
|
||||
|
||||
#
|
||||
# Security options
|
||||
#
|
||||
# CONFIG_SECURITY is not set
|
||||
|
||||
#
|
||||
# Cryptographic options
|
||||
#
|
||||
CONFIG_CRYPTO=y
|
||||
CONFIG_CRYPTO_HMAC=y
|
||||
# CONFIG_CRYPTO_NULL is not set
|
||||
# CONFIG_CRYPTO_MD4 is not set
|
||||
CONFIG_CRYPTO_MD5=m
|
||||
CONFIG_CRYPTO_SHA1=m
|
||||
# CONFIG_CRYPTO_SHA256 is not set
|
||||
# CONFIG_CRYPTO_SHA512 is not set
|
||||
# CONFIG_CRYPTO_WHIRLPOOL is not set
|
||||
CONFIG_CRYPTO_DES=m
|
||||
# CONFIG_CRYPTO_BLOWFISH is not set
|
||||
# CONFIG_CRYPTO_TWOFISH is not set
|
||||
# CONFIG_CRYPTO_SERPENT is not set
|
||||
# CONFIG_CRYPTO_AES is not set
|
||||
# CONFIG_CRYPTO_CAST5 is not set
|
||||
# CONFIG_CRYPTO_CAST6 is not set
|
||||
# CONFIG_CRYPTO_TEA is not set
|
||||
# CONFIG_CRYPTO_ARC4 is not set
|
||||
# CONFIG_CRYPTO_KHAZAD is not set
|
||||
# CONFIG_CRYPTO_DEFLATE is not set
|
||||
# CONFIG_CRYPTO_MICHAEL_MIC is not set
|
||||
# CONFIG_CRYPTO_CRC32C is not set
|
||||
# CONFIG_CRYPTO_TEST is not set
|
||||
|
||||
#
|
||||
# Library routines
|
||||
#
|
||||
# CONFIG_CRC_CCITT is not set
|
||||
CONFIG_CRC32=y
|
||||
# CONFIG_LIBCRC32C is not set
|
||||
|
@ -1,11 +1,10 @@
|
||||
include include/asm-generic/Kbuild.asm
|
||||
|
||||
header-y += compiler.h
|
||||
header-y += console.h
|
||||
header-y += fpu.h
|
||||
header-y += gentrap.h
|
||||
header-y += regdef.h
|
||||
header-y += pal.h
|
||||
header-y += reg.h
|
||||
|
||||
unifdef-y += console.h
|
||||
unifdef-y += fpu.h
|
||||
unifdef-y += sysinfo.h
|
||||
unifdef-y += compiler.h
|
||||
header-y += regdef.h
|
||||
header-y += sysinfo.h
|
||||
|
@ -17,7 +17,6 @@
|
||||
# define L1_CACHE_SHIFT 5
|
||||
#endif
|
||||
|
||||
#define L1_CACHE_ALIGN(x) (((x)+(L1_CACHE_BYTES-1))&~(L1_CACHE_BYTES-1))
|
||||
#define SMP_CACHE_BYTES L1_CACHE_BYTES
|
||||
|
||||
#endif
|
||||
|
@ -41,9 +41,7 @@ static inline int dma_set_mask(struct device *dev, u64 mask)
|
||||
|
||||
#define dma_alloc_noncoherent(d, s, h, f) dma_alloc_coherent(d, s, h, f)
|
||||
#define dma_free_noncoherent(d, s, v, h) dma_free_coherent(d, s, v, h)
|
||||
#define dma_is_consistent(d, h) (1)
|
||||
|
||||
#define dma_cache_sync(dev, va, size, dir) ((void)0)
|
||||
#define dma_get_cache_alignment() L1_CACHE_BYTES
|
||||
|
||||
#endif /* _ALPHA_DMA_MAPPING_H */
|
||||
|
@ -3,6 +3,7 @@
|
||||
|
||||
|
||||
extern volatile unsigned long irq_err_count;
|
||||
DECLARE_PER_CPU(unsigned long, irq_pmi_count);
|
||||
|
||||
#ifdef CONFIG_ALPHA_GENERIC
|
||||
#define ACTUAL_NR_IRQS alpha_mv.nr_irqs
|
||||
|
@ -80,6 +80,7 @@
|
||||
# define TIOCPKT_START 8
|
||||
# define TIOCPKT_NOSTOP 16
|
||||
# define TIOCPKT_DOSTOP 32
|
||||
# define TIOCPKT_IOCTL 64
|
||||
|
||||
|
||||
#define TIOCNOTTY 0x5422
|
||||
@ -91,6 +92,7 @@
|
||||
#define TIOCGSID 0x5429 /* Return the session ID of FD */
|
||||
#define TIOCGPTN _IOR('T',0x30, unsigned int) /* Get Pty Number (of pty-mux device) */
|
||||
#define TIOCSPTLCK _IOW('T',0x31, int) /* Lock/unlock Pty */
|
||||
#define TIOCSIG _IOW('T',0x36, int) /* Generate signal on Pty slave */
|
||||
|
||||
#define TIOCSERCONFIG 0x5453
|
||||
#define TIOCSERGWILD 0x5454
|
||||
@ -106,7 +108,5 @@
|
||||
|
||||
#define TIOCMIWAIT 0x545C /* wait for a change on serial input line(s) */
|
||||
#define TIOCGICOUNT 0x545D /* read serial port inline interrupt counts */
|
||||
#define TIOCGHAYESESP 0x545E /* Get Hayes ESP configuration */
|
||||
#define TIOCSHAYESESP 0x545F /* Set Hayes ESP configuration */
|
||||
|
||||
#endif /* _ASM_ALPHA_IOCTLS_H */
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user