Merge branch 'writeback-for-2.6.34' into nfs-for-2.6.34
This commit is contained in:
commit
3fa04ecd72
|
@ -128,3 +128,17 @@ Description:
|
||||||
preferred request size for workloads where sustained
|
preferred request size for workloads where sustained
|
||||||
throughput is desired. If no optimal I/O size is
|
throughput is desired. If no optimal I/O size is
|
||||||
reported this file contains 0.
|
reported this file contains 0.
|
||||||
|
|
||||||
|
What: /sys/block/<disk>/queue/nomerges
|
||||||
|
Date: January 2010
|
||||||
|
Contact:
|
||||||
|
Description:
|
||||||
|
Standard I/O elevator operations include attempts to
|
||||||
|
merge contiguous I/Os. For known random I/O loads these
|
||||||
|
attempts will always fail and result in extra cycles
|
||||||
|
being spent in the kernel. This allows one to turn off
|
||||||
|
this behavior on one of two ways: When set to 1, complex
|
||||||
|
merge checks are disabled, but the simple one-shot merges
|
||||||
|
with the previous I/O request are enabled. When set to 2,
|
||||||
|
all merge tries are disabled. The default value is 0 -
|
||||||
|
which enables all types of merge tries.
|
||||||
|
|
|
@ -159,3 +159,14 @@ Description:
|
||||||
device. This is useful to ensure auto probing won't
|
device. This is useful to ensure auto probing won't
|
||||||
match the driver to the device. For example:
|
match the driver to the device. For example:
|
||||||
# echo "046d c315" > /sys/bus/usb/drivers/foo/remove_id
|
# echo "046d c315" > /sys/bus/usb/drivers/foo/remove_id
|
||||||
|
|
||||||
|
What: /sys/bus/usb/device/.../avoid_reset
|
||||||
|
Date: December 2009
|
||||||
|
Contact: Oliver Neukum <oliver@neukum.org>
|
||||||
|
Description:
|
||||||
|
Writing 1 to this file tells the kernel that this
|
||||||
|
device will morph into another mode when it is reset.
|
||||||
|
Drivers will not use reset for error handling for
|
||||||
|
such devices.
|
||||||
|
Users:
|
||||||
|
usb_modeswitch
|
||||||
|
|
79
Documentation/ABI/testing/sysfs-devices-power
Normal file
79
Documentation/ABI/testing/sysfs-devices-power
Normal file
|
@ -0,0 +1,79 @@
|
||||||
|
What: /sys/devices/.../power/
|
||||||
|
Date: January 2009
|
||||||
|
Contact: Rafael J. Wysocki <rjw@sisk.pl>
|
||||||
|
Description:
|
||||||
|
The /sys/devices/.../power directory contains attributes
|
||||||
|
allowing the user space to check and modify some power
|
||||||
|
management related properties of given device.
|
||||||
|
|
||||||
|
What: /sys/devices/.../power/wakeup
|
||||||
|
Date: January 2009
|
||||||
|
Contact: Rafael J. Wysocki <rjw@sisk.pl>
|
||||||
|
Description:
|
||||||
|
The /sys/devices/.../power/wakeup attribute allows the user
|
||||||
|
space to check if the device is enabled to wake up the system
|
||||||
|
from sleep states, such as the memory sleep state (suspend to
|
||||||
|
RAM) and hibernation (suspend to disk), and to enable or disable
|
||||||
|
it to do that as desired.
|
||||||
|
|
||||||
|
Some devices support "wakeup" events, which are hardware signals
|
||||||
|
used to activate the system from a sleep state. Such devices
|
||||||
|
have one of the following two values for the sysfs power/wakeup
|
||||||
|
file:
|
||||||
|
|
||||||
|
+ "enabled\n" to issue the events;
|
||||||
|
+ "disabled\n" not to do so;
|
||||||
|
|
||||||
|
In that cases the user space can change the setting represented
|
||||||
|
by the contents of this file by writing either "enabled", or
|
||||||
|
"disabled" to it.
|
||||||
|
|
||||||
|
For the devices that are not capable of generating system wakeup
|
||||||
|
events this file contains "\n". In that cases the user space
|
||||||
|
cannot modify the contents of this file and the device cannot be
|
||||||
|
enabled to wake up the system.
|
||||||
|
|
||||||
|
What: /sys/devices/.../power/control
|
||||||
|
Date: January 2009
|
||||||
|
Contact: Rafael J. Wysocki <rjw@sisk.pl>
|
||||||
|
Description:
|
||||||
|
The /sys/devices/.../power/control attribute allows the user
|
||||||
|
space to control the run-time power management of the device.
|
||||||
|
|
||||||
|
All devices have one of the following two values for the
|
||||||
|
power/control file:
|
||||||
|
|
||||||
|
+ "auto\n" to allow the device to be power managed at run time;
|
||||||
|
+ "on\n" to prevent the device from being power managed;
|
||||||
|
|
||||||
|
The default for all devices is "auto", which means that they may
|
||||||
|
be subject to automatic power management, depending on their
|
||||||
|
drivers. Changing this attribute to "on" prevents the driver
|
||||||
|
from power managing the device at run time. Doing that while
|
||||||
|
the device is suspended causes it to be woken up.
|
||||||
|
|
||||||
|
What: /sys/devices/.../power/async
|
||||||
|
Date: January 2009
|
||||||
|
Contact: Rafael J. Wysocki <rjw@sisk.pl>
|
||||||
|
Description:
|
||||||
|
The /sys/devices/.../async attribute allows the user space to
|
||||||
|
enable or diasble the device's suspend and resume callbacks to
|
||||||
|
be executed asynchronously (ie. in separate threads, in parallel
|
||||||
|
with the main suspend/resume thread) during system-wide power
|
||||||
|
transitions (eg. suspend to RAM, hibernation).
|
||||||
|
|
||||||
|
All devices have one of the following two values for the
|
||||||
|
power/async file:
|
||||||
|
|
||||||
|
+ "enabled\n" to permit the asynchronous suspend/resume;
|
||||||
|
+ "disabled\n" to forbid it;
|
||||||
|
|
||||||
|
The value of this attribute may be changed by writing either
|
||||||
|
"enabled", or "disabled" to it.
|
||||||
|
|
||||||
|
It generally is unsafe to permit the asynchronous suspend/resume
|
||||||
|
of a device unless it is certain that all of the PM dependencies
|
||||||
|
of the device are known to the PM core. However, for some
|
||||||
|
devices this attribute is set to "enabled" by bus type code or
|
||||||
|
device drivers and in that cases it should be safe to leave the
|
||||||
|
default value.
|
|
@ -1,4 +1,4 @@
|
||||||
What: /sys/devices/platform/asus-laptop/display
|
What: /sys/devices/platform/asus_laptop/display
|
||||||
Date: January 2007
|
Date: January 2007
|
||||||
KernelVersion: 2.6.20
|
KernelVersion: 2.6.20
|
||||||
Contact: "Corentin Chary" <corentincj@iksaif.net>
|
Contact: "Corentin Chary" <corentincj@iksaif.net>
|
||||||
|
@ -13,7 +13,7 @@ Description:
|
||||||
Ex: - 0 (0000b) means no display
|
Ex: - 0 (0000b) means no display
|
||||||
- 3 (0011b) CRT+LCD.
|
- 3 (0011b) CRT+LCD.
|
||||||
|
|
||||||
What: /sys/devices/platform/asus-laptop/gps
|
What: /sys/devices/platform/asus_laptop/gps
|
||||||
Date: January 2007
|
Date: January 2007
|
||||||
KernelVersion: 2.6.20
|
KernelVersion: 2.6.20
|
||||||
Contact: "Corentin Chary" <corentincj@iksaif.net>
|
Contact: "Corentin Chary" <corentincj@iksaif.net>
|
||||||
|
@ -21,7 +21,7 @@ Description:
|
||||||
Control the gps device. 1 means on, 0 means off.
|
Control the gps device. 1 means on, 0 means off.
|
||||||
Users: Lapsus
|
Users: Lapsus
|
||||||
|
|
||||||
What: /sys/devices/platform/asus-laptop/ledd
|
What: /sys/devices/platform/asus_laptop/ledd
|
||||||
Date: January 2007
|
Date: January 2007
|
||||||
KernelVersion: 2.6.20
|
KernelVersion: 2.6.20
|
||||||
Contact: "Corentin Chary" <corentincj@iksaif.net>
|
Contact: "Corentin Chary" <corentincj@iksaif.net>
|
||||||
|
@ -29,11 +29,11 @@ Description:
|
||||||
Some models like the W1N have a LED display that can be
|
Some models like the W1N have a LED display that can be
|
||||||
used to display several informations.
|
used to display several informations.
|
||||||
To control the LED display, use the following :
|
To control the LED display, use the following :
|
||||||
echo 0x0T000DDD > /sys/devices/platform/asus-laptop/
|
echo 0x0T000DDD > /sys/devices/platform/asus_laptop/
|
||||||
where T control the 3 letters display, and DDD the 3 digits display.
|
where T control the 3 letters display, and DDD the 3 digits display.
|
||||||
The DDD table can be found in Documentation/laptops/asus-laptop.txt
|
The DDD table can be found in Documentation/laptops/asus-laptop.txt
|
||||||
|
|
||||||
What: /sys/devices/platform/asus-laptop/bluetooth
|
What: /sys/devices/platform/asus_laptop/bluetooth
|
||||||
Date: January 2007
|
Date: January 2007
|
||||||
KernelVersion: 2.6.20
|
KernelVersion: 2.6.20
|
||||||
Contact: "Corentin Chary" <corentincj@iksaif.net>
|
Contact: "Corentin Chary" <corentincj@iksaif.net>
|
||||||
|
@ -42,7 +42,7 @@ Description:
|
||||||
This may control the led, the device or both.
|
This may control the led, the device or both.
|
||||||
Users: Lapsus
|
Users: Lapsus
|
||||||
|
|
||||||
What: /sys/devices/platform/asus-laptop/wlan
|
What: /sys/devices/platform/asus_laptop/wlan
|
||||||
Date: January 2007
|
Date: January 2007
|
||||||
KernelVersion: 2.6.20
|
KernelVersion: 2.6.20
|
||||||
Contact: "Corentin Chary" <corentincj@iksaif.net>
|
Contact: "Corentin Chary" <corentincj@iksaif.net>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
What: /sys/devices/platform/eeepc-laptop/disp
|
What: /sys/devices/platform/eeepc/disp
|
||||||
Date: May 2008
|
Date: May 2008
|
||||||
KernelVersion: 2.6.26
|
KernelVersion: 2.6.26
|
||||||
Contact: "Corentin Chary" <corentincj@iksaif.net>
|
Contact: "Corentin Chary" <corentincj@iksaif.net>
|
||||||
|
@ -9,21 +9,21 @@ Description:
|
||||||
- 3 = LCD+CRT
|
- 3 = LCD+CRT
|
||||||
If you run X11, you should use xrandr instead.
|
If you run X11, you should use xrandr instead.
|
||||||
|
|
||||||
What: /sys/devices/platform/eeepc-laptop/camera
|
What: /sys/devices/platform/eeepc/camera
|
||||||
Date: May 2008
|
Date: May 2008
|
||||||
KernelVersion: 2.6.26
|
KernelVersion: 2.6.26
|
||||||
Contact: "Corentin Chary" <corentincj@iksaif.net>
|
Contact: "Corentin Chary" <corentincj@iksaif.net>
|
||||||
Description:
|
Description:
|
||||||
Control the camera. 1 means on, 0 means off.
|
Control the camera. 1 means on, 0 means off.
|
||||||
|
|
||||||
What: /sys/devices/platform/eeepc-laptop/cardr
|
What: /sys/devices/platform/eeepc/cardr
|
||||||
Date: May 2008
|
Date: May 2008
|
||||||
KernelVersion: 2.6.26
|
KernelVersion: 2.6.26
|
||||||
Contact: "Corentin Chary" <corentincj@iksaif.net>
|
Contact: "Corentin Chary" <corentincj@iksaif.net>
|
||||||
Description:
|
Description:
|
||||||
Control the card reader. 1 means on, 0 means off.
|
Control the card reader. 1 means on, 0 means off.
|
||||||
|
|
||||||
What: /sys/devices/platform/eeepc-laptop/cpufv
|
What: /sys/devices/platform/eeepc/cpufv
|
||||||
Date: Jun 2009
|
Date: Jun 2009
|
||||||
KernelVersion: 2.6.31
|
KernelVersion: 2.6.31
|
||||||
Contact: "Corentin Chary" <corentincj@iksaif.net>
|
Contact: "Corentin Chary" <corentincj@iksaif.net>
|
||||||
|
@ -42,7 +42,7 @@ Description:
|
||||||
`------------ Availables modes
|
`------------ Availables modes
|
||||||
For example, 0x301 means: mode 1 selected, 3 available modes.
|
For example, 0x301 means: mode 1 selected, 3 available modes.
|
||||||
|
|
||||||
What: /sys/devices/platform/eeepc-laptop/available_cpufv
|
What: /sys/devices/platform/eeepc/available_cpufv
|
||||||
Date: Jun 2009
|
Date: Jun 2009
|
||||||
KernelVersion: 2.6.31
|
KernelVersion: 2.6.31
|
||||||
Contact: "Corentin Chary" <corentincj@iksaif.net>
|
Contact: "Corentin Chary" <corentincj@iksaif.net>
|
||||||
|
|
|
@ -101,3 +101,16 @@ Description:
|
||||||
|
|
||||||
CAUTION: Using it will cause your machine's real-time (CMOS)
|
CAUTION: Using it will cause your machine's real-time (CMOS)
|
||||||
clock to be set to a random invalid time after a resume.
|
clock to be set to a random invalid time after a resume.
|
||||||
|
|
||||||
|
What: /sys/power/pm_async
|
||||||
|
Date: January 2009
|
||||||
|
Contact: Rafael J. Wysocki <rjw@sisk.pl>
|
||||||
|
Description:
|
||||||
|
The /sys/power/pm_async file controls the switch allowing the
|
||||||
|
user space to enable or disable asynchronous suspend and resume
|
||||||
|
of devices. If enabled, this feature will cause some device
|
||||||
|
drivers' suspend and resume callbacks to be executed in parallel
|
||||||
|
with each other and with the main suspend thread. It is enabled
|
||||||
|
if this file contains "1", which is the default. It may be
|
||||||
|
disabled by writing "0" to this file, in which case all devices
|
||||||
|
will be suspended and resumed synchronously.
|
||||||
|
|
|
@ -45,7 +45,7 @@
|
||||||
</sect1>
|
</sect1>
|
||||||
|
|
||||||
<sect1><title>Atomic and pointer manipulation</title>
|
<sect1><title>Atomic and pointer manipulation</title>
|
||||||
!Iarch/x86/include/asm/atomic_32.h
|
!Iarch/x86/include/asm/atomic.h
|
||||||
!Iarch/x86/include/asm/unaligned.h
|
!Iarch/x86/include/asm/unaligned.h
|
||||||
</sect1>
|
</sect1>
|
||||||
|
|
||||||
|
|
|
@ -316,7 +316,7 @@ CPU B: spin_unlock_irqrestore(&dev_lock, flags)
|
||||||
|
|
||||||
<chapter id="pubfunctions">
|
<chapter id="pubfunctions">
|
||||||
<title>Public Functions Provided</title>
|
<title>Public Functions Provided</title>
|
||||||
!Iarch/x86/include/asm/io_32.h
|
!Iarch/x86/include/asm/io.h
|
||||||
!Elib/iomap.c
|
!Elib/iomap.c
|
||||||
</chapter>
|
</chapter>
|
||||||
|
|
||||||
|
|
|
@ -144,7 +144,7 @@ usage should require reading the full document.
|
||||||
this though and the recommendation to allow only a single
|
this though and the recommendation to allow only a single
|
||||||
interface in STA mode at first!
|
interface in STA mode at first!
|
||||||
</para>
|
</para>
|
||||||
!Finclude/net/mac80211.h ieee80211_if_init_conf
|
!Finclude/net/mac80211.h ieee80211_vif
|
||||||
</chapter>
|
</chapter>
|
||||||
|
|
||||||
<chapter id="rx-tx">
|
<chapter id="rx-tx">
|
||||||
|
@ -234,7 +234,6 @@ usage should require reading the full document.
|
||||||
<title>Multiple queues and QoS support</title>
|
<title>Multiple queues and QoS support</title>
|
||||||
<para>TBD</para>
|
<para>TBD</para>
|
||||||
!Finclude/net/mac80211.h ieee80211_tx_queue_params
|
!Finclude/net/mac80211.h ieee80211_tx_queue_params
|
||||||
!Finclude/net/mac80211.h ieee80211_tx_queue_stats
|
|
||||||
</chapter>
|
</chapter>
|
||||||
|
|
||||||
<chapter id="AP">
|
<chapter id="AP">
|
||||||
|
|
|
@ -589,7 +589,8 @@ number of a video input as in &v4l2-input; field
|
||||||
<entry></entry>
|
<entry></entry>
|
||||||
<entry>A place holder for future extensions and custom
|
<entry>A place holder for future extensions and custom
|
||||||
(driver defined) buffer types
|
(driver defined) buffer types
|
||||||
<constant>V4L2_BUF_TYPE_PRIVATE</constant> and higher.</entry>
|
<constant>V4L2_BUF_TYPE_PRIVATE</constant> and higher. Applications
|
||||||
|
should set this to 0.</entry>
|
||||||
</row>
|
</row>
|
||||||
</tbody>
|
</tbody>
|
||||||
</tgroup>
|
</tgroup>
|
||||||
|
|
|
@ -54,12 +54,10 @@ to enqueue an empty (capturing) or filled (output) buffer in the
|
||||||
driver's incoming queue. The semantics depend on the selected I/O
|
driver's incoming queue. The semantics depend on the selected I/O
|
||||||
method.</para>
|
method.</para>
|
||||||
|
|
||||||
<para>To enqueue a <link linkend="mmap">memory mapped</link>
|
<para>To enqueue a buffer applications set the <structfield>type</structfield>
|
||||||
buffer applications set the <structfield>type</structfield> field of a
|
field of a &v4l2-buffer; to the same buffer type as was previously used
|
||||||
&v4l2-buffer; to the same buffer type as previously &v4l2-format;
|
with &v4l2-format; <structfield>type</structfield> and &v4l2-requestbuffers;
|
||||||
<structfield>type</structfield> and &v4l2-requestbuffers;
|
<structfield>type</structfield>. Applications must also set the
|
||||||
<structfield>type</structfield>, the <structfield>memory</structfield>
|
|
||||||
field to <constant>V4L2_MEMORY_MMAP</constant> and the
|
|
||||||
<structfield>index</structfield> field. Valid index numbers range from
|
<structfield>index</structfield> field. Valid index numbers range from
|
||||||
zero to the number of buffers allocated with &VIDIOC-REQBUFS;
|
zero to the number of buffers allocated with &VIDIOC-REQBUFS;
|
||||||
(&v4l2-requestbuffers; <structfield>count</structfield>) minus one. The
|
(&v4l2-requestbuffers; <structfield>count</structfield>) minus one. The
|
||||||
|
@ -70,8 +68,19 @@ intended for output (<structfield>type</structfield> is
|
||||||
<constant>V4L2_BUF_TYPE_VBI_OUTPUT</constant>) applications must also
|
<constant>V4L2_BUF_TYPE_VBI_OUTPUT</constant>) applications must also
|
||||||
initialize the <structfield>bytesused</structfield>,
|
initialize the <structfield>bytesused</structfield>,
|
||||||
<structfield>field</structfield> and
|
<structfield>field</structfield> and
|
||||||
<structfield>timestamp</structfield> fields. See <xref
|
<structfield>timestamp</structfield> fields, see <xref
|
||||||
linkend="buffer" /> for details. When
|
linkend="buffer" /> for details.
|
||||||
|
Applications must also set <structfield>flags</structfield> to 0. If a driver
|
||||||
|
supports capturing from specific video inputs and you want to specify a video
|
||||||
|
input, then <structfield>flags</structfield> should be set to
|
||||||
|
<constant>V4L2_BUF_FLAG_INPUT</constant> and the field
|
||||||
|
<structfield>input</structfield> must be initialized to the desired input.
|
||||||
|
The <structfield>reserved</structfield> field must be set to 0.
|
||||||
|
</para>
|
||||||
|
|
||||||
|
<para>To enqueue a <link linkend="mmap">memory mapped</link>
|
||||||
|
buffer applications set the <structfield>memory</structfield>
|
||||||
|
field to <constant>V4L2_MEMORY_MMAP</constant>. When
|
||||||
<constant>VIDIOC_QBUF</constant> is called with a pointer to this
|
<constant>VIDIOC_QBUF</constant> is called with a pointer to this
|
||||||
structure the driver sets the
|
structure the driver sets the
|
||||||
<constant>V4L2_BUF_FLAG_MAPPED</constant> and
|
<constant>V4L2_BUF_FLAG_MAPPED</constant> and
|
||||||
|
@ -81,14 +90,10 @@ structure the driver sets the
|
||||||
&EINVAL;.</para>
|
&EINVAL;.</para>
|
||||||
|
|
||||||
<para>To enqueue a <link linkend="userp">user pointer</link>
|
<para>To enqueue a <link linkend="userp">user pointer</link>
|
||||||
buffer applications set the <structfield>type</structfield> field of a
|
buffer applications set the <structfield>memory</structfield>
|
||||||
&v4l2-buffer; to the same buffer type as previously &v4l2-format;
|
field to <constant>V4L2_MEMORY_USERPTR</constant>, the
|
||||||
<structfield>type</structfield> and &v4l2-requestbuffers;
|
|
||||||
<structfield>type</structfield>, the <structfield>memory</structfield>
|
|
||||||
field to <constant>V4L2_MEMORY_USERPTR</constant> and the
|
|
||||||
<structfield>m.userptr</structfield> field to the address of the
|
<structfield>m.userptr</structfield> field to the address of the
|
||||||
buffer and <structfield>length</structfield> to its size. When the
|
buffer and <structfield>length</structfield> to its size.
|
||||||
buffer is intended for output additional fields must be set as above.
|
|
||||||
When <constant>VIDIOC_QBUF</constant> is called with a pointer to this
|
When <constant>VIDIOC_QBUF</constant> is called with a pointer to this
|
||||||
structure the driver sets the <constant>V4L2_BUF_FLAG_QUEUED</constant>
|
structure the driver sets the <constant>V4L2_BUF_FLAG_QUEUED</constant>
|
||||||
flag and clears the <constant>V4L2_BUF_FLAG_MAPPED</constant> and
|
flag and clears the <constant>V4L2_BUF_FLAG_MAPPED</constant> and
|
||||||
|
@ -96,13 +101,14 @@ flag and clears the <constant>V4L2_BUF_FLAG_MAPPED</constant> and
|
||||||
<structfield>flags</structfield> field, or it returns an error code.
|
<structfield>flags</structfield> field, or it returns an error code.
|
||||||
This ioctl locks the memory pages of the buffer in physical memory,
|
This ioctl locks the memory pages of the buffer in physical memory,
|
||||||
they cannot be swapped out to disk. Buffers remain locked until
|
they cannot be swapped out to disk. Buffers remain locked until
|
||||||
dequeued, until the &VIDIOC-STREAMOFF; or &VIDIOC-REQBUFS; ioctl are
|
dequeued, until the &VIDIOC-STREAMOFF; or &VIDIOC-REQBUFS; ioctl is
|
||||||
called, or until the device is closed.</para>
|
called, or until the device is closed.</para>
|
||||||
|
|
||||||
<para>Applications call the <constant>VIDIOC_DQBUF</constant>
|
<para>Applications call the <constant>VIDIOC_DQBUF</constant>
|
||||||
ioctl to dequeue a filled (capturing) or displayed (output) buffer
|
ioctl to dequeue a filled (capturing) or displayed (output) buffer
|
||||||
from the driver's outgoing queue. They just set the
|
from the driver's outgoing queue. They just set the
|
||||||
<structfield>type</structfield> and <structfield>memory</structfield>
|
<structfield>type</structfield>, <structfield>memory</structfield>
|
||||||
|
and <structfield>reserved</structfield>
|
||||||
fields of a &v4l2-buffer; as above, when <constant>VIDIOC_DQBUF</constant>
|
fields of a &v4l2-buffer; as above, when <constant>VIDIOC_DQBUF</constant>
|
||||||
is called with a pointer to this structure the driver fills the
|
is called with a pointer to this structure the driver fills the
|
||||||
remaining fields or returns an error code.</para>
|
remaining fields or returns an error code.</para>
|
||||||
|
|
|
@ -54,12 +54,13 @@ buffer at any time after buffers have been allocated with the
|
||||||
&VIDIOC-REQBUFS; ioctl.</para>
|
&VIDIOC-REQBUFS; ioctl.</para>
|
||||||
|
|
||||||
<para>Applications set the <structfield>type</structfield> field
|
<para>Applications set the <structfield>type</structfield> field
|
||||||
of a &v4l2-buffer; to the same buffer type as previously
|
of a &v4l2-buffer; to the same buffer type as was previously used with
|
||||||
&v4l2-format; <structfield>type</structfield> and &v4l2-requestbuffers;
|
&v4l2-format; <structfield>type</structfield> and &v4l2-requestbuffers;
|
||||||
<structfield>type</structfield>, and the <structfield>index</structfield>
|
<structfield>type</structfield>, and the <structfield>index</structfield>
|
||||||
field. Valid index numbers range from zero
|
field. Valid index numbers range from zero
|
||||||
to the number of buffers allocated with &VIDIOC-REQBUFS;
|
to the number of buffers allocated with &VIDIOC-REQBUFS;
|
||||||
(&v4l2-requestbuffers; <structfield>count</structfield>) minus one.
|
(&v4l2-requestbuffers; <structfield>count</structfield>) minus one.
|
||||||
|
The <structfield>reserved</structfield> field should to set to 0.
|
||||||
After calling <constant>VIDIOC_QUERYBUF</constant> with a pointer to
|
After calling <constant>VIDIOC_QUERYBUF</constant> with a pointer to
|
||||||
this structure drivers return an error code or fill the rest of
|
this structure drivers return an error code or fill the rest of
|
||||||
the structure.</para>
|
the structure.</para>
|
||||||
|
@ -68,8 +69,8 @@ the structure.</para>
|
||||||
<constant>V4L2_BUF_FLAG_MAPPED</constant>,
|
<constant>V4L2_BUF_FLAG_MAPPED</constant>,
|
||||||
<constant>V4L2_BUF_FLAG_QUEUED</constant> and
|
<constant>V4L2_BUF_FLAG_QUEUED</constant> and
|
||||||
<constant>V4L2_BUF_FLAG_DONE</constant> flags will be valid. The
|
<constant>V4L2_BUF_FLAG_DONE</constant> flags will be valid. The
|
||||||
<structfield>memory</structfield> field will be set to
|
<structfield>memory</structfield> field will be set to the current
|
||||||
<constant>V4L2_MEMORY_MMAP</constant>, the <structfield>m.offset</structfield>
|
I/O method, the <structfield>m.offset</structfield>
|
||||||
contains the offset of the buffer from the start of the device memory,
|
contains the offset of the buffer from the start of the device memory,
|
||||||
the <structfield>length</structfield> field its size. The driver may
|
the <structfield>length</structfield> field its size. The driver may
|
||||||
or may not set the remaining fields and flags, they are meaningless in
|
or may not set the remaining fields and flags, they are meaningless in
|
||||||
|
|
|
@ -54,23 +54,23 @@ I/O. Memory mapped buffers are located in device memory and must be
|
||||||
allocated with this ioctl before they can be mapped into the
|
allocated with this ioctl before they can be mapped into the
|
||||||
application's address space. User buffers are allocated by
|
application's address space. User buffers are allocated by
|
||||||
applications themselves, and this ioctl is merely used to switch the
|
applications themselves, and this ioctl is merely used to switch the
|
||||||
driver into user pointer I/O mode.</para>
|
driver into user pointer I/O mode and to setup some internal structures.</para>
|
||||||
|
|
||||||
<para>To allocate device buffers applications initialize three
|
<para>To allocate device buffers applications initialize all
|
||||||
fields of a <structname>v4l2_requestbuffers</structname> structure.
|
fields of the <structname>v4l2_requestbuffers</structname> structure.
|
||||||
They set the <structfield>type</structfield> field to the respective
|
They set the <structfield>type</structfield> field to the respective
|
||||||
stream or buffer type, the <structfield>count</structfield> field to
|
stream or buffer type, the <structfield>count</structfield> field to
|
||||||
the desired number of buffers, and <structfield>memory</structfield>
|
the desired number of buffers, <structfield>memory</structfield>
|
||||||
must be set to <constant>V4L2_MEMORY_MMAP</constant>. When the ioctl
|
must be set to the requested I/O method and the reserved array
|
||||||
is called with a pointer to this structure the driver attempts to
|
must be zeroed. When the ioctl
|
||||||
allocate the requested number of buffers and stores the actual number
|
is called with a pointer to this structure the driver will attempt to allocate
|
||||||
|
the requested number of buffers and it stores the actual number
|
||||||
allocated in the <structfield>count</structfield> field. It can be
|
allocated in the <structfield>count</structfield> field. It can be
|
||||||
smaller than the number requested, even zero, when the driver runs out
|
smaller than the number requested, even zero, when the driver runs out
|
||||||
of free memory. A larger number is possible when the driver requires
|
of free memory. A larger number is also possible when the driver requires
|
||||||
more buffers to function correctly.<footnote>
|
more buffers to function correctly. For example video output requires at least two buffers,
|
||||||
<para>For example video output requires at least two buffers,
|
|
||||||
one displayed and one filled by the application.</para>
|
one displayed and one filled by the application.</para>
|
||||||
</footnote> When memory mapping I/O is not supported the ioctl
|
<para>When the I/O method is not supported the ioctl
|
||||||
returns an &EINVAL;.</para>
|
returns an &EINVAL;.</para>
|
||||||
|
|
||||||
<para>Applications can call <constant>VIDIOC_REQBUFS</constant>
|
<para>Applications can call <constant>VIDIOC_REQBUFS</constant>
|
||||||
|
@ -81,14 +81,6 @@ in progress, an implicit &VIDIOC-STREAMOFF;. <!-- mhs: I see no
|
||||||
reason why munmap()ping one or even all buffers must imply
|
reason why munmap()ping one or even all buffers must imply
|
||||||
streamoff.--></para>
|
streamoff.--></para>
|
||||||
|
|
||||||
<para>To negotiate user pointer I/O, applications initialize only
|
|
||||||
the <structfield>type</structfield> field and set
|
|
||||||
<structfield>memory</structfield> to
|
|
||||||
<constant>V4L2_MEMORY_USERPTR</constant>. When the ioctl is called
|
|
||||||
with a pointer to this structure the driver prepares for user pointer
|
|
||||||
I/O, when this I/O method is not supported the ioctl returns an
|
|
||||||
&EINVAL;.</para>
|
|
||||||
|
|
||||||
<table pgwide="1" frame="none" id="v4l2-requestbuffers">
|
<table pgwide="1" frame="none" id="v4l2-requestbuffers">
|
||||||
<title>struct <structname>v4l2_requestbuffers</structname></title>
|
<title>struct <structname>v4l2_requestbuffers</structname></title>
|
||||||
<tgroup cols="3">
|
<tgroup cols="3">
|
||||||
|
@ -97,9 +89,7 @@ I/O, when this I/O method is not supported the ioctl returns an
|
||||||
<row>
|
<row>
|
||||||
<entry>__u32</entry>
|
<entry>__u32</entry>
|
||||||
<entry><structfield>count</structfield></entry>
|
<entry><structfield>count</structfield></entry>
|
||||||
<entry>The number of buffers requested or granted. This
|
<entry>The number of buffers requested or granted.</entry>
|
||||||
field is only used when <structfield>memory</structfield> is set to
|
|
||||||
<constant>V4L2_MEMORY_MMAP</constant>.</entry>
|
|
||||||
</row>
|
</row>
|
||||||
<row>
|
<row>
|
||||||
<entry>&v4l2-buf-type;</entry>
|
<entry>&v4l2-buf-type;</entry>
|
||||||
|
@ -120,7 +110,7 @@ as the &v4l2-format; <structfield>type</structfield> field. See <xref
|
||||||
<entry><structfield>reserved</structfield>[2]</entry>
|
<entry><structfield>reserved</structfield>[2]</entry>
|
||||||
<entry>A place holder for future extensions and custom
|
<entry>A place holder for future extensions and custom
|
||||||
(driver defined) buffer types <constant>V4L2_BUF_TYPE_PRIVATE</constant> and
|
(driver defined) buffer types <constant>V4L2_BUF_TYPE_PRIVATE</constant> and
|
||||||
higher.</entry>
|
higher. This array should be zeroed by applications.</entry>
|
||||||
</row>
|
</row>
|
||||||
</tbody>
|
</tbody>
|
||||||
</tgroup>
|
</tgroup>
|
||||||
|
|
|
@ -6,16 +6,22 @@ checklist.txt
|
||||||
- Review Checklist for RCU Patches
|
- Review Checklist for RCU Patches
|
||||||
listRCU.txt
|
listRCU.txt
|
||||||
- Using RCU to Protect Read-Mostly Linked Lists
|
- Using RCU to Protect Read-Mostly Linked Lists
|
||||||
|
lockdep.txt
|
||||||
|
- RCU and lockdep checking
|
||||||
NMI-RCU.txt
|
NMI-RCU.txt
|
||||||
- Using RCU to Protect Dynamic NMI Handlers
|
- Using RCU to Protect Dynamic NMI Handlers
|
||||||
|
rcubarrier.txt
|
||||||
|
- RCU and Unloadable Modules
|
||||||
|
rculist_nulls.txt
|
||||||
|
- RCU list primitives for use with SLAB_DESTROY_BY_RCU
|
||||||
rcuref.txt
|
rcuref.txt
|
||||||
- Reference-count design for elements of lists/arrays protected by RCU
|
- Reference-count design for elements of lists/arrays protected by RCU
|
||||||
rcu.txt
|
rcu.txt
|
||||||
- RCU Concepts
|
- RCU Concepts
|
||||||
rcubarrier.txt
|
|
||||||
- Unloading modules that use RCU callbacks
|
|
||||||
RTFP.txt
|
RTFP.txt
|
||||||
- List of RCU papers (bibliography) going back to 1980.
|
- List of RCU papers (bibliography) going back to 1980.
|
||||||
|
stallwarn.txt
|
||||||
|
- RCU CPU stall warnings (CONFIG_RCU_CPU_STALL_DETECTOR)
|
||||||
torture.txt
|
torture.txt
|
||||||
- RCU Torture Test Operation (CONFIG_RCU_TORTURE_TEST)
|
- RCU Torture Test Operation (CONFIG_RCU_TORTURE_TEST)
|
||||||
trace.txt
|
trace.txt
|
||||||
|
|
|
@ -25,10 +25,10 @@ to be referencing the data structure. However, this mechanism was not
|
||||||
optimized for modern computer systems, which is not surprising given
|
optimized for modern computer systems, which is not surprising given
|
||||||
that these overheads were not so expensive in the mid-80s. Nonetheless,
|
that these overheads were not so expensive in the mid-80s. Nonetheless,
|
||||||
passive serialization appears to be the first deferred-destruction
|
passive serialization appears to be the first deferred-destruction
|
||||||
mechanism to be used in production. Furthermore, the relevant patent has
|
mechanism to be used in production. Furthermore, the relevant patent
|
||||||
lapsed, so this approach may be used in non-GPL software, if desired.
|
has lapsed, so this approach may be used in non-GPL software, if desired.
|
||||||
(In contrast, use of RCU is permitted only in software licensed under
|
(In contrast, implementation of RCU is permitted only in software licensed
|
||||||
GPL. Sorry!!!)
|
under either GPL or LGPL. Sorry!!!)
|
||||||
|
|
||||||
In 1990, Pugh [Pugh90] noted that explicitly tracking which threads
|
In 1990, Pugh [Pugh90] noted that explicitly tracking which threads
|
||||||
were reading a given data structure permitted deferred free to operate
|
were reading a given data structure permitted deferred free to operate
|
||||||
|
@ -150,6 +150,18 @@ preemptible RCU [PaulEMcKenney2007PreemptibleRCU], and the three-part
|
||||||
LWN "What is RCU?" series [PaulEMcKenney2007WhatIsRCUFundamentally,
|
LWN "What is RCU?" series [PaulEMcKenney2007WhatIsRCUFundamentally,
|
||||||
PaulEMcKenney2008WhatIsRCUUsage, and PaulEMcKenney2008WhatIsRCUAPI].
|
PaulEMcKenney2008WhatIsRCUUsage, and PaulEMcKenney2008WhatIsRCUAPI].
|
||||||
|
|
||||||
|
2008 saw a journal paper on real-time RCU [DinakarGuniguntala2008IBMSysJ],
|
||||||
|
a history of how Linux changed RCU more than RCU changed Linux
|
||||||
|
[PaulEMcKenney2008RCUOSR], and a design overview of hierarchical RCU
|
||||||
|
[PaulEMcKenney2008HierarchicalRCU].
|
||||||
|
|
||||||
|
2009 introduced user-level RCU algorithms [PaulEMcKenney2009MaliciousURCU],
|
||||||
|
which Mathieu Desnoyers is now maintaining [MathieuDesnoyers2009URCU]
|
||||||
|
[MathieuDesnoyersPhD]. TINY_RCU [PaulEMcKenney2009BloatWatchRCU] made
|
||||||
|
its appearance, as did expedited RCU [PaulEMcKenney2009expeditedRCU].
|
||||||
|
The problem of resizeable RCU-protected hash tables may now be on a path
|
||||||
|
to a solution [JoshTriplett2009RPHash].
|
||||||
|
|
||||||
Bibtex Entries
|
Bibtex Entries
|
||||||
|
|
||||||
@article{Kung80
|
@article{Kung80
|
||||||
|
@ -730,6 +742,11 @@ Revised:
|
||||||
"
|
"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#
|
||||||
|
# "What is RCU?" LWN series.
|
||||||
|
#
|
||||||
|
########################################################################
|
||||||
|
|
||||||
@article{DinakarGuniguntala2008IBMSysJ
|
@article{DinakarGuniguntala2008IBMSysJ
|
||||||
,author="D. Guniguntala and P. E. McKenney and J. Triplett and J. Walpole"
|
,author="D. Guniguntala and P. E. McKenney and J. Triplett and J. Walpole"
|
||||||
,title="The read-copy-update mechanism for supporting real-time applications on shared-memory multiprocessor systems with {Linux}"
|
,title="The read-copy-update mechanism for supporting real-time applications on shared-memory multiprocessor systems with {Linux}"
|
||||||
|
@ -820,3 +837,39 @@ Revised:
|
||||||
Uniprocessor assumptions allow simplified RCU implementation.
|
Uniprocessor assumptions allow simplified RCU implementation.
|
||||||
"
|
"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@unpublished{PaulEMcKenney2009expeditedRCU
|
||||||
|
,Author="Paul E. McKenney"
|
||||||
|
,Title="[{PATCH} -tip 0/3] expedited 'big hammer' {RCU} grace periods"
|
||||||
|
,month="June"
|
||||||
|
,day="25"
|
||||||
|
,year="2009"
|
||||||
|
,note="Available:
|
||||||
|
\url{http://lkml.org/lkml/2009/6/25/306}
|
||||||
|
[Viewed August 16, 2009]"
|
||||||
|
,annotation="
|
||||||
|
First posting of expedited RCU to be accepted into -tip.
|
||||||
|
"
|
||||||
|
}
|
||||||
|
|
||||||
|
@unpublished{JoshTriplett2009RPHash
|
||||||
|
,Author="Josh Triplett"
|
||||||
|
,Title="Scalable concurrent hash tables via relativistic programming"
|
||||||
|
,month="September"
|
||||||
|
,year="2009"
|
||||||
|
,note="Linux Plumbers Conference presentation"
|
||||||
|
,annotation="
|
||||||
|
RP fun with hash tables.
|
||||||
|
"
|
||||||
|
}
|
||||||
|
|
||||||
|
@phdthesis{MathieuDesnoyersPhD
|
||||||
|
, title = "Low-Impact Operating System Tracing"
|
||||||
|
, author = "Mathieu Desnoyers"
|
||||||
|
, school = "Ecole Polytechnique de Montr\'{e}al"
|
||||||
|
, month = "December"
|
||||||
|
, year = 2009
|
||||||
|
,note="Available:
|
||||||
|
\url{http://www.lttng.org/pub/thesis/desnoyers-dissertation-2009-12.pdf}
|
||||||
|
[Viewed December 9, 2009]"
|
||||||
|
}
|
||||||
|
|
|
@ -8,13 +8,12 @@ would cause. This list is based on experiences reviewing such patches
|
||||||
over a rather long period of time, but improvements are always welcome!
|
over a rather long period of time, but improvements are always welcome!
|
||||||
|
|
||||||
0. Is RCU being applied to a read-mostly situation? If the data
|
0. Is RCU being applied to a read-mostly situation? If the data
|
||||||
structure is updated more than about 10% of the time, then
|
structure is updated more than about 10% of the time, then you
|
||||||
you should strongly consider some other approach, unless
|
should strongly consider some other approach, unless detailed
|
||||||
detailed performance measurements show that RCU is nonetheless
|
performance measurements show that RCU is nonetheless the right
|
||||||
the right tool for the job. Yes, you might think of RCU
|
tool for the job. Yes, RCU does reduce read-side overhead by
|
||||||
as simply cutting overhead off of the readers and imposing it
|
increasing write-side overhead, which is exactly why normal uses
|
||||||
on the writers. That is exactly why normal uses of RCU will
|
of RCU will do much more reading than updating.
|
||||||
do much more reading than updating.
|
|
||||||
|
|
||||||
Another exception is where performance is not an issue, and RCU
|
Another exception is where performance is not an issue, and RCU
|
||||||
provides a simpler implementation. An example of this situation
|
provides a simpler implementation. An example of this situation
|
||||||
|
@ -35,13 +34,13 @@ over a rather long period of time, but improvements are always welcome!
|
||||||
|
|
||||||
If you choose #b, be prepared to describe how you have handled
|
If you choose #b, be prepared to describe how you have handled
|
||||||
memory barriers on weakly ordered machines (pretty much all of
|
memory barriers on weakly ordered machines (pretty much all of
|
||||||
them -- even x86 allows reads to be reordered), and be prepared
|
them -- even x86 allows later loads to be reordered to precede
|
||||||
to explain why this added complexity is worthwhile. If you
|
earlier stores), and be prepared to explain why this added
|
||||||
choose #c, be prepared to explain how this single task does not
|
complexity is worthwhile. If you choose #c, be prepared to
|
||||||
become a major bottleneck on big multiprocessor machines (for
|
explain how this single task does not become a major bottleneck on
|
||||||
example, if the task is updating information relating to itself
|
big multiprocessor machines (for example, if the task is updating
|
||||||
that other tasks can read, there by definition can be no
|
information relating to itself that other tasks can read, there
|
||||||
bottleneck).
|
by definition can be no bottleneck).
|
||||||
|
|
||||||
2. Do the RCU read-side critical sections make proper use of
|
2. Do the RCU read-side critical sections make proper use of
|
||||||
rcu_read_lock() and friends? These primitives are needed
|
rcu_read_lock() and friends? These primitives are needed
|
||||||
|
@ -51,8 +50,10 @@ over a rather long period of time, but improvements are always welcome!
|
||||||
actuarial risk of your kernel.
|
actuarial risk of your kernel.
|
||||||
|
|
||||||
As a rough rule of thumb, any dereference of an RCU-protected
|
As a rough rule of thumb, any dereference of an RCU-protected
|
||||||
pointer must be covered by rcu_read_lock() or rcu_read_lock_bh()
|
pointer must be covered by rcu_read_lock(), rcu_read_lock_bh(),
|
||||||
or by the appropriate update-side lock.
|
rcu_read_lock_sched(), or by the appropriate update-side lock.
|
||||||
|
Disabling of preemption can serve as rcu_read_lock_sched(), but
|
||||||
|
is less readable.
|
||||||
|
|
||||||
3. Does the update code tolerate concurrent accesses?
|
3. Does the update code tolerate concurrent accesses?
|
||||||
|
|
||||||
|
@ -62,25 +63,27 @@ over a rather long period of time, but improvements are always welcome!
|
||||||
of ways to handle this concurrency, depending on the situation:
|
of ways to handle this concurrency, depending on the situation:
|
||||||
|
|
||||||
a. Use the RCU variants of the list and hlist update
|
a. Use the RCU variants of the list and hlist update
|
||||||
primitives to add, remove, and replace elements on an
|
primitives to add, remove, and replace elements on
|
||||||
RCU-protected list. Alternatively, use the RCU-protected
|
an RCU-protected list. Alternatively, use the other
|
||||||
trees that have been added to the Linux kernel.
|
RCU-protected data structures that have been added to
|
||||||
|
the Linux kernel.
|
||||||
|
|
||||||
This is almost always the best approach.
|
This is almost always the best approach.
|
||||||
|
|
||||||
b. Proceed as in (a) above, but also maintain per-element
|
b. Proceed as in (a) above, but also maintain per-element
|
||||||
locks (that are acquired by both readers and writers)
|
locks (that are acquired by both readers and writers)
|
||||||
that guard per-element state. Of course, fields that
|
that guard per-element state. Of course, fields that
|
||||||
the readers refrain from accessing can be guarded by the
|
the readers refrain from accessing can be guarded by
|
||||||
update-side lock.
|
some other lock acquired only by updaters, if desired.
|
||||||
|
|
||||||
This works quite well, also.
|
This works quite well, also.
|
||||||
|
|
||||||
c. Make updates appear atomic to readers. For example,
|
c. Make updates appear atomic to readers. For example,
|
||||||
pointer updates to properly aligned fields will appear
|
pointer updates to properly aligned fields will
|
||||||
atomic, as will individual atomic primitives. Operations
|
appear atomic, as will individual atomic primitives.
|
||||||
performed under a lock and sequences of multiple atomic
|
Sequences of perations performed under a lock will -not-
|
||||||
primitives will -not- appear to be atomic.
|
appear to be atomic to RCU readers, nor will sequences
|
||||||
|
of multiple atomic primitives.
|
||||||
|
|
||||||
This can work, but is starting to get a bit tricky.
|
This can work, but is starting to get a bit tricky.
|
||||||
|
|
||||||
|
@ -98,9 +101,9 @@ over a rather long period of time, but improvements are always welcome!
|
||||||
a new structure containing updated values.
|
a new structure containing updated values.
|
||||||
|
|
||||||
4. Weakly ordered CPUs pose special challenges. Almost all CPUs
|
4. Weakly ordered CPUs pose special challenges. Almost all CPUs
|
||||||
are weakly ordered -- even i386 CPUs allow reads to be reordered.
|
are weakly ordered -- even x86 CPUs allow later loads to be
|
||||||
RCU code must take all of the following measures to prevent
|
reordered to precede earlier stores. RCU code must take all of
|
||||||
memory-corruption problems:
|
the following measures to prevent memory-corruption problems:
|
||||||
|
|
||||||
a. Readers must maintain proper ordering of their memory
|
a. Readers must maintain proper ordering of their memory
|
||||||
accesses. The rcu_dereference() primitive ensures that
|
accesses. The rcu_dereference() primitive ensures that
|
||||||
|
@ -113,14 +116,25 @@ over a rather long period of time, but improvements are always welcome!
|
||||||
The rcu_dereference() primitive is also an excellent
|
The rcu_dereference() primitive is also an excellent
|
||||||
documentation aid, letting the person reading the code
|
documentation aid, letting the person reading the code
|
||||||
know exactly which pointers are protected by RCU.
|
know exactly which pointers are protected by RCU.
|
||||||
|
Please note that compilers can also reorder code, and
|
||||||
|
they are becoming increasingly aggressive about doing
|
||||||
|
just that. The rcu_dereference() primitive therefore
|
||||||
|
also prevents destructive compiler optimizations.
|
||||||
|
|
||||||
The rcu_dereference() primitive is used by the various
|
The rcu_dereference() primitive is used by the
|
||||||
"_rcu()" list-traversal primitives, such as the
|
various "_rcu()" list-traversal primitives, such
|
||||||
list_for_each_entry_rcu(). Note that it is perfectly
|
as the list_for_each_entry_rcu(). Note that it is
|
||||||
legal (if redundant) for update-side code to use
|
perfectly legal (if redundant) for update-side code to
|
||||||
rcu_dereference() and the "_rcu()" list-traversal
|
use rcu_dereference() and the "_rcu()" list-traversal
|
||||||
primitives. This is particularly useful in code
|
primitives. This is particularly useful in code that
|
||||||
that is common to readers and updaters.
|
is common to readers and updaters. However, lockdep
|
||||||
|
will complain if you access rcu_dereference() outside
|
||||||
|
of an RCU read-side critical section. See lockdep.txt
|
||||||
|
to learn what to do about this.
|
||||||
|
|
||||||
|
Of course, neither rcu_dereference() nor the "_rcu()"
|
||||||
|
list-traversal primitives can substitute for a good
|
||||||
|
concurrency design coordinating among multiple updaters.
|
||||||
|
|
||||||
b. If the list macros are being used, the list_add_tail_rcu()
|
b. If the list macros are being used, the list_add_tail_rcu()
|
||||||
and list_add_rcu() primitives must be used in order
|
and list_add_rcu() primitives must be used in order
|
||||||
|
@ -135,11 +149,14 @@ over a rather long period of time, but improvements are always welcome!
|
||||||
readers. Similarly, if the hlist macros are being used,
|
readers. Similarly, if the hlist macros are being used,
|
||||||
the hlist_del_rcu() primitive is required.
|
the hlist_del_rcu() primitive is required.
|
||||||
|
|
||||||
The list_replace_rcu() primitive may be used to
|
The list_replace_rcu() and hlist_replace_rcu() primitives
|
||||||
replace an old structure with a new one in an
|
may be used to replace an old structure with a new one
|
||||||
RCU-protected list.
|
in their respective types of RCU-protected lists.
|
||||||
|
|
||||||
d. Updates must ensure that initialization of a given
|
d. Rules similar to (4b) and (4c) apply to the "hlist_nulls"
|
||||||
|
type of RCU-protected linked lists.
|
||||||
|
|
||||||
|
e. Updates must ensure that initialization of a given
|
||||||
structure happens before pointers to that structure are
|
structure happens before pointers to that structure are
|
||||||
publicized. Use the rcu_assign_pointer() primitive
|
publicized. Use the rcu_assign_pointer() primitive
|
||||||
when publicizing a pointer to a structure that can
|
when publicizing a pointer to a structure that can
|
||||||
|
@ -151,16 +168,31 @@ over a rather long period of time, but improvements are always welcome!
|
||||||
it cannot block.
|
it cannot block.
|
||||||
|
|
||||||
6. Since synchronize_rcu() can block, it cannot be called from
|
6. Since synchronize_rcu() can block, it cannot be called from
|
||||||
any sort of irq context. Ditto for synchronize_sched() and
|
any sort of irq context. The same rule applies for
|
||||||
synchronize_srcu().
|
synchronize_rcu_bh(), synchronize_sched(), synchronize_srcu(),
|
||||||
|
synchronize_rcu_expedited(), synchronize_rcu_bh_expedited(),
|
||||||
|
synchronize_sched_expedite(), and synchronize_srcu_expedited().
|
||||||
|
|
||||||
7. If the updater uses call_rcu(), then the corresponding readers
|
The expedited forms of these primitives have the same semantics
|
||||||
must use rcu_read_lock() and rcu_read_unlock(). If the updater
|
as the non-expedited forms, but expediting is both expensive
|
||||||
uses call_rcu_bh(), then the corresponding readers must use
|
and unfriendly to real-time workloads. Use of the expedited
|
||||||
rcu_read_lock_bh() and rcu_read_unlock_bh(). If the updater
|
primitives should be restricted to rare configuration-change
|
||||||
uses call_rcu_sched(), then the corresponding readers must
|
operations that would not normally be undertaken while a real-time
|
||||||
disable preemption. Mixing things up will result in confusion
|
workload is running.
|
||||||
and broken kernels.
|
|
||||||
|
7. If the updater uses call_rcu() or synchronize_rcu(), then the
|
||||||
|
corresponding readers must use rcu_read_lock() and
|
||||||
|
rcu_read_unlock(). If the updater uses call_rcu_bh() or
|
||||||
|
synchronize_rcu_bh(), then the corresponding readers must
|
||||||
|
use rcu_read_lock_bh() and rcu_read_unlock_bh(). If the
|
||||||
|
updater uses call_rcu_sched() or synchronize_sched(), then
|
||||||
|
the corresponding readers must disable preemption, possibly
|
||||||
|
by calling rcu_read_lock_sched() and rcu_read_unlock_sched().
|
||||||
|
If the updater uses synchronize_srcu(), the the corresponding
|
||||||
|
readers must use srcu_read_lock() and srcu_read_unlock(),
|
||||||
|
and with the same srcu_struct. The rules for the expedited
|
||||||
|
primitives are the same as for their non-expedited counterparts.
|
||||||
|
Mixing things up will result in confusion and broken kernels.
|
||||||
|
|
||||||
One exception to this rule: rcu_read_lock() and rcu_read_unlock()
|
One exception to this rule: rcu_read_lock() and rcu_read_unlock()
|
||||||
may be substituted for rcu_read_lock_bh() and rcu_read_unlock_bh()
|
may be substituted for rcu_read_lock_bh() and rcu_read_unlock_bh()
|
||||||
|
@ -212,6 +244,8 @@ over a rather long period of time, but improvements are always welcome!
|
||||||
e. Periodically invoke synchronize_rcu(), permitting a limited
|
e. Periodically invoke synchronize_rcu(), permitting a limited
|
||||||
number of updates per grace period.
|
number of updates per grace period.
|
||||||
|
|
||||||
|
The same cautions apply to call_rcu_bh() and call_rcu_sched().
|
||||||
|
|
||||||
9. All RCU list-traversal primitives, which include
|
9. All RCU list-traversal primitives, which include
|
||||||
rcu_dereference(), list_for_each_entry_rcu(),
|
rcu_dereference(), list_for_each_entry_rcu(),
|
||||||
list_for_each_continue_rcu(), and list_for_each_safe_rcu(),
|
list_for_each_continue_rcu(), and list_for_each_safe_rcu(),
|
||||||
|
@ -219,7 +253,9 @@ over a rather long period of time, but improvements are always welcome!
|
||||||
must be protected by appropriate update-side locks. RCU
|
must be protected by appropriate update-side locks. RCU
|
||||||
read-side critical sections are delimited by rcu_read_lock()
|
read-side critical sections are delimited by rcu_read_lock()
|
||||||
and rcu_read_unlock(), or by similar primitives such as
|
and rcu_read_unlock(), or by similar primitives such as
|
||||||
rcu_read_lock_bh() and rcu_read_unlock_bh().
|
rcu_read_lock_bh() and rcu_read_unlock_bh(), in which case
|
||||||
|
the matching rcu_dereference() primitive must be used in order
|
||||||
|
to keep lockdep happy, in this case, rcu_dereference_bh().
|
||||||
|
|
||||||
The reason that it is permissible to use RCU list-traversal
|
The reason that it is permissible to use RCU list-traversal
|
||||||
primitives when the update-side lock is held is that doing so
|
primitives when the update-side lock is held is that doing so
|
||||||
|
@ -229,7 +265,8 @@ over a rather long period of time, but improvements are always welcome!
|
||||||
10. Conversely, if you are in an RCU read-side critical section,
|
10. Conversely, if you are in an RCU read-side critical section,
|
||||||
and you don't hold the appropriate update-side lock, you -must-
|
and you don't hold the appropriate update-side lock, you -must-
|
||||||
use the "_rcu()" variants of the list macros. Failing to do so
|
use the "_rcu()" variants of the list macros. Failing to do so
|
||||||
will break Alpha and confuse people reading your code.
|
will break Alpha, cause aggressive compilers to generate bad code,
|
||||||
|
and confuse people trying to read your code.
|
||||||
|
|
||||||
11. Note that synchronize_rcu() -only- guarantees to wait until
|
11. Note that synchronize_rcu() -only- guarantees to wait until
|
||||||
all currently executing rcu_read_lock()-protected RCU read-side
|
all currently executing rcu_read_lock()-protected RCU read-side
|
||||||
|
@ -239,15 +276,21 @@ over a rather long period of time, but improvements are always welcome!
|
||||||
rcu_read_lock()-protected read-side critical sections, do -not-
|
rcu_read_lock()-protected read-side critical sections, do -not-
|
||||||
use synchronize_rcu().
|
use synchronize_rcu().
|
||||||
|
|
||||||
If you want to wait for some of these other things, you might
|
Similarly, disabling preemption is not an acceptable substitute
|
||||||
instead need to use synchronize_irq() or synchronize_sched().
|
for rcu_read_lock(). Code that attempts to use preemption
|
||||||
|
disabling where it should be using rcu_read_lock() will break
|
||||||
|
in real-time kernel builds.
|
||||||
|
|
||||||
|
If you want to wait for interrupt handlers, NMI handlers, and
|
||||||
|
code under the influence of preempt_disable(), you instead
|
||||||
|
need to use synchronize_irq() or synchronize_sched().
|
||||||
|
|
||||||
12. Any lock acquired by an RCU callback must be acquired elsewhere
|
12. Any lock acquired by an RCU callback must be acquired elsewhere
|
||||||
with softirq disabled, e.g., via spin_lock_irqsave(),
|
with softirq disabled, e.g., via spin_lock_irqsave(),
|
||||||
spin_lock_bh(), etc. Failing to disable irq on a given
|
spin_lock_bh(), etc. Failing to disable irq on a given
|
||||||
acquisition of that lock will result in deadlock as soon as the
|
acquisition of that lock will result in deadlock as soon as
|
||||||
RCU callback happens to interrupt that acquisition's critical
|
the RCU softirq handler happens to run your RCU callback while
|
||||||
section.
|
interrupting that acquisition's critical section.
|
||||||
|
|
||||||
13. RCU callbacks can be and are executed in parallel. In many cases,
|
13. RCU callbacks can be and are executed in parallel. In many cases,
|
||||||
the callback code simply wrappers around kfree(), so that this
|
the callback code simply wrappers around kfree(), so that this
|
||||||
|
@ -265,29 +308,30 @@ over a rather long period of time, but improvements are always welcome!
|
||||||
not the case, a self-spawning RCU callback would prevent the
|
not the case, a self-spawning RCU callback would prevent the
|
||||||
victim CPU from ever going offline.)
|
victim CPU from ever going offline.)
|
||||||
|
|
||||||
14. SRCU (srcu_read_lock(), srcu_read_unlock(), and synchronize_srcu())
|
14. SRCU (srcu_read_lock(), srcu_read_unlock(), srcu_dereference(),
|
||||||
may only be invoked from process context. Unlike other forms of
|
synchronize_srcu(), and synchronize_srcu_expedited()) may only
|
||||||
RCU, it -is- permissible to block in an SRCU read-side critical
|
be invoked from process context. Unlike other forms of RCU, it
|
||||||
section (demarked by srcu_read_lock() and srcu_read_unlock()),
|
-is- permissible to block in an SRCU read-side critical section
|
||||||
hence the "SRCU": "sleepable RCU". Please note that if you
|
(demarked by srcu_read_lock() and srcu_read_unlock()), hence the
|
||||||
don't need to sleep in read-side critical sections, you should
|
"SRCU": "sleepable RCU". Please note that if you don't need
|
||||||
be using RCU rather than SRCU, because RCU is almost always
|
to sleep in read-side critical sections, you should be using
|
||||||
faster and easier to use than is SRCU.
|
RCU rather than SRCU, because RCU is almost always faster and
|
||||||
|
easier to use than is SRCU.
|
||||||
|
|
||||||
Also unlike other forms of RCU, explicit initialization
|
Also unlike other forms of RCU, explicit initialization
|
||||||
and cleanup is required via init_srcu_struct() and
|
and cleanup is required via init_srcu_struct() and
|
||||||
cleanup_srcu_struct(). These are passed a "struct srcu_struct"
|
cleanup_srcu_struct(). These are passed a "struct srcu_struct"
|
||||||
that defines the scope of a given SRCU domain. Once initialized,
|
that defines the scope of a given SRCU domain. Once initialized,
|
||||||
the srcu_struct is passed to srcu_read_lock(), srcu_read_unlock()
|
the srcu_struct is passed to srcu_read_lock(), srcu_read_unlock()
|
||||||
and synchronize_srcu(). A given synchronize_srcu() waits only
|
synchronize_srcu(), and synchronize_srcu_expedited(). A given
|
||||||
for SRCU read-side critical sections governed by srcu_read_lock()
|
synchronize_srcu() waits only for SRCU read-side critical
|
||||||
and srcu_read_unlock() calls that have been passd the same
|
sections governed by srcu_read_lock() and srcu_read_unlock()
|
||||||
srcu_struct. This property is what makes sleeping read-side
|
calls that have been passed the same srcu_struct. This property
|
||||||
critical sections tolerable -- a given subsystem delays only
|
is what makes sleeping read-side critical sections tolerable --
|
||||||
its own updates, not those of other subsystems using SRCU.
|
a given subsystem delays only its own updates, not those of other
|
||||||
Therefore, SRCU is less prone to OOM the system than RCU would
|
subsystems using SRCU. Therefore, SRCU is less prone to OOM the
|
||||||
be if RCU's read-side critical sections were permitted to
|
system than RCU would be if RCU's read-side critical sections
|
||||||
sleep.
|
were permitted to sleep.
|
||||||
|
|
||||||
The ability to sleep in read-side critical sections does not
|
The ability to sleep in read-side critical sections does not
|
||||||
come for free. First, corresponding srcu_read_lock() and
|
come for free. First, corresponding srcu_read_lock() and
|
||||||
|
@ -311,12 +355,12 @@ over a rather long period of time, but improvements are always welcome!
|
||||||
destructive operation, and -only- -then- invoke call_rcu(),
|
destructive operation, and -only- -then- invoke call_rcu(),
|
||||||
synchronize_rcu(), or friends.
|
synchronize_rcu(), or friends.
|
||||||
|
|
||||||
Because these primitives only wait for pre-existing readers,
|
Because these primitives only wait for pre-existing readers, it
|
||||||
it is the caller's responsibility to guarantee safety to
|
is the caller's responsibility to guarantee that any subsequent
|
||||||
any subsequent readers.
|
readers will execute safely.
|
||||||
|
|
||||||
16. The various RCU read-side primitives do -not- contain memory
|
16. The various RCU read-side primitives do -not- necessarily contain
|
||||||
barriers. The CPU (and in some cases, the compiler) is free
|
memory barriers. You should therefore plan for the CPU
|
||||||
to reorder code into and out of RCU read-side critical sections.
|
and the compiler to freely reorder code into and out of RCU
|
||||||
It is the responsibility of the RCU update-side primitives to
|
read-side critical sections. It is the responsibility of the
|
||||||
deal with this.
|
RCU update-side primitives to deal with this.
|
||||||
|
|
67
Documentation/RCU/lockdep.txt
Normal file
67
Documentation/RCU/lockdep.txt
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
RCU and lockdep checking
|
||||||
|
|
||||||
|
All flavors of RCU have lockdep checking available, so that lockdep is
|
||||||
|
aware of when each task enters and leaves any flavor of RCU read-side
|
||||||
|
critical section. Each flavor of RCU is tracked separately (but note
|
||||||
|
that this is not the case in 2.6.32 and earlier). This allows lockdep's
|
||||||
|
tracking to include RCU state, which can sometimes help when debugging
|
||||||
|
deadlocks and the like.
|
||||||
|
|
||||||
|
In addition, RCU provides the following primitives that check lockdep's
|
||||||
|
state:
|
||||||
|
|
||||||
|
rcu_read_lock_held() for normal RCU.
|
||||||
|
rcu_read_lock_bh_held() for RCU-bh.
|
||||||
|
rcu_read_lock_sched_held() for RCU-sched.
|
||||||
|
srcu_read_lock_held() for SRCU.
|
||||||
|
|
||||||
|
These functions are conservative, and will therefore return 1 if they
|
||||||
|
aren't certain (for example, if CONFIG_DEBUG_LOCK_ALLOC is not set).
|
||||||
|
This prevents things like WARN_ON(!rcu_read_lock_held()) from giving false
|
||||||
|
positives when lockdep is disabled.
|
||||||
|
|
||||||
|
In addition, a separate kernel config parameter CONFIG_PROVE_RCU enables
|
||||||
|
checking of rcu_dereference() primitives:
|
||||||
|
|
||||||
|
rcu_dereference(p):
|
||||||
|
Check for RCU read-side critical section.
|
||||||
|
rcu_dereference_bh(p):
|
||||||
|
Check for RCU-bh read-side critical section.
|
||||||
|
rcu_dereference_sched(p):
|
||||||
|
Check for RCU-sched read-side critical section.
|
||||||
|
srcu_dereference(p, sp):
|
||||||
|
Check for SRCU read-side critical section.
|
||||||
|
rcu_dereference_check(p, c):
|
||||||
|
Use explicit check expression "c".
|
||||||
|
rcu_dereference_raw(p)
|
||||||
|
Don't check. (Use sparingly, if at all.)
|
||||||
|
|
||||||
|
The rcu_dereference_check() check expression can be any boolean
|
||||||
|
expression, but would normally include one of the rcu_read_lock_held()
|
||||||
|
family of functions and a lockdep expression. However, any boolean
|
||||||
|
expression can be used. For a moderately ornate example, consider
|
||||||
|
the following:
|
||||||
|
|
||||||
|
file = rcu_dereference_check(fdt->fd[fd],
|
||||||
|
rcu_read_lock_held() ||
|
||||||
|
lockdep_is_held(&files->file_lock) ||
|
||||||
|
atomic_read(&files->count) == 1);
|
||||||
|
|
||||||
|
This expression picks up the pointer "fdt->fd[fd]" in an RCU-safe manner,
|
||||||
|
and, if CONFIG_PROVE_RCU is configured, verifies that this expression
|
||||||
|
is used in:
|
||||||
|
|
||||||
|
1. An RCU read-side critical section, or
|
||||||
|
2. with files->file_lock held, or
|
||||||
|
3. on an unshared files_struct.
|
||||||
|
|
||||||
|
In case (1), the pointer is picked up in an RCU-safe manner for vanilla
|
||||||
|
RCU read-side critical sections, in case (2) the ->file_lock prevents
|
||||||
|
any change from taking place, and finally, in case (3) the current task
|
||||||
|
is the only task accessing the file_struct, again preventing any change
|
||||||
|
from taking place.
|
||||||
|
|
||||||
|
There are currently only "universal" versions of the rcu_assign_pointer()
|
||||||
|
and RCU list-/tree-traversal primitives, which do not (yet) check for
|
||||||
|
being in an RCU read-side critical section. In the future, separate
|
||||||
|
versions of these primitives might be created.
|
|
@ -75,6 +75,8 @@ o I hear that RCU is patented? What is with that?
|
||||||
search for the string "Patent" in RTFP.txt to find them.
|
search for the string "Patent" in RTFP.txt to find them.
|
||||||
Of these, one was allowed to lapse by the assignee, and the
|
Of these, one was allowed to lapse by the assignee, and the
|
||||||
others have been contributed to the Linux kernel under GPL.
|
others have been contributed to the Linux kernel under GPL.
|
||||||
|
There are now also LGPL implementations of user-level RCU
|
||||||
|
available (http://lttng.org/?q=node/18).
|
||||||
|
|
||||||
o I hear that RCU needs work in order to support realtime kernels?
|
o I hear that RCU needs work in order to support realtime kernels?
|
||||||
|
|
||||||
|
@ -91,48 +93,4 @@ o Where can I find more information on RCU?
|
||||||
|
|
||||||
o What are all these files in this directory?
|
o What are all these files in this directory?
|
||||||
|
|
||||||
|
See 00-INDEX for the list.
|
||||||
NMI-RCU.txt
|
|
||||||
|
|
||||||
Describes how to use RCU to implement dynamic
|
|
||||||
NMI handlers, which can be revectored on the fly,
|
|
||||||
without rebooting.
|
|
||||||
|
|
||||||
RTFP.txt
|
|
||||||
|
|
||||||
List of RCU-related publications and web sites.
|
|
||||||
|
|
||||||
UP.txt
|
|
||||||
|
|
||||||
Discussion of RCU usage in UP kernels.
|
|
||||||
|
|
||||||
arrayRCU.txt
|
|
||||||
|
|
||||||
Describes how to use RCU to protect arrays, with
|
|
||||||
resizeable arrays whose elements reference other
|
|
||||||
data structures being of the most interest.
|
|
||||||
|
|
||||||
checklist.txt
|
|
||||||
|
|
||||||
Lists things to check for when inspecting code that
|
|
||||||
uses RCU.
|
|
||||||
|
|
||||||
listRCU.txt
|
|
||||||
|
|
||||||
Describes how to use RCU to protect linked lists.
|
|
||||||
This is the simplest and most common use of RCU
|
|
||||||
in the Linux kernel.
|
|
||||||
|
|
||||||
rcu.txt
|
|
||||||
|
|
||||||
You are reading it!
|
|
||||||
|
|
||||||
rcuref.txt
|
|
||||||
|
|
||||||
Describes how to combine use of reference counts
|
|
||||||
with RCU.
|
|
||||||
|
|
||||||
whatisRCU.txt
|
|
||||||
|
|
||||||
Overview of how the RCU implementation works. Along
|
|
||||||
the way, presents a conceptual view of RCU.
|
|
||||||
|
|
58
Documentation/RCU/stallwarn.txt
Normal file
58
Documentation/RCU/stallwarn.txt
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
Using RCU's CPU Stall Detector
|
||||||
|
|
||||||
|
The CONFIG_RCU_CPU_STALL_DETECTOR kernel config parameter enables
|
||||||
|
RCU's CPU stall detector, which detects conditions that unduly delay
|
||||||
|
RCU grace periods. The stall detector's idea of what constitutes
|
||||||
|
"unduly delayed" is controlled by a pair of C preprocessor macros:
|
||||||
|
|
||||||
|
RCU_SECONDS_TILL_STALL_CHECK
|
||||||
|
|
||||||
|
This macro defines the period of time that RCU will wait from
|
||||||
|
the beginning of a grace period until it issues an RCU CPU
|
||||||
|
stall warning. It is normally ten seconds.
|
||||||
|
|
||||||
|
RCU_SECONDS_TILL_STALL_RECHECK
|
||||||
|
|
||||||
|
This macro defines the period of time that RCU will wait after
|
||||||
|
issuing a stall warning until it issues another stall warning.
|
||||||
|
It is normally set to thirty seconds.
|
||||||
|
|
||||||
|
RCU_STALL_RAT_DELAY
|
||||||
|
|
||||||
|
The CPU stall detector tries to make the offending CPU rat on itself,
|
||||||
|
as this often gives better-quality stack traces. However, if
|
||||||
|
the offending CPU does not detect its own stall in the number
|
||||||
|
of jiffies specified by RCU_STALL_RAT_DELAY, then other CPUs will
|
||||||
|
complain. This is normally set to two jiffies.
|
||||||
|
|
||||||
|
The following problems can result in an RCU CPU stall warning:
|
||||||
|
|
||||||
|
o A CPU looping in an RCU read-side critical section.
|
||||||
|
|
||||||
|
o A CPU looping with interrupts disabled.
|
||||||
|
|
||||||
|
o A CPU looping with preemption disabled.
|
||||||
|
|
||||||
|
o For !CONFIG_PREEMPT kernels, a CPU looping anywhere in the kernel
|
||||||
|
without invoking schedule().
|
||||||
|
|
||||||
|
o A bug in the RCU implementation.
|
||||||
|
|
||||||
|
o A hardware failure. This is quite unlikely, but has occurred
|
||||||
|
at least once in a former life. A CPU failed in a running system,
|
||||||
|
becoming unresponsive, but not causing an immediate crash.
|
||||||
|
This resulted in a series of RCU CPU stall warnings, eventually
|
||||||
|
leading the realization that the CPU had failed.
|
||||||
|
|
||||||
|
The RCU, RCU-sched, and RCU-bh implementations have CPU stall warning.
|
||||||
|
SRCU does not do so directly, but its calls to synchronize_sched() will
|
||||||
|
result in RCU-sched detecting any CPU stalls that might be occurring.
|
||||||
|
|
||||||
|
To diagnose the cause of the stall, inspect the stack traces. The offending
|
||||||
|
function will usually be near the top of the stack. If you have a series
|
||||||
|
of stall warnings from a single extended stall, comparing the stack traces
|
||||||
|
can often help determine where the stall is occurring, which will usually
|
||||||
|
be in the function nearest the top of the stack that stays the same from
|
||||||
|
trace to trace.
|
||||||
|
|
||||||
|
RCU bugs can often be debugged with the help of CONFIG_RCU_TRACE.
|
|
@ -30,6 +30,18 @@ MODULE PARAMETERS
|
||||||
|
|
||||||
This module has the following parameters:
|
This module has the following parameters:
|
||||||
|
|
||||||
|
fqs_duration Duration (in microseconds) of artificially induced bursts
|
||||||
|
of force_quiescent_state() invocations. In RCU
|
||||||
|
implementations having force_quiescent_state(), these
|
||||||
|
bursts help force races between forcing a given grace
|
||||||
|
period and that grace period ending on its own.
|
||||||
|
|
||||||
|
fqs_holdoff Holdoff time (in microseconds) between consecutive calls
|
||||||
|
to force_quiescent_state() within a burst.
|
||||||
|
|
||||||
|
fqs_stutter Wait time (in seconds) between consecutive bursts
|
||||||
|
of calls to force_quiescent_state().
|
||||||
|
|
||||||
irqreaders Says to invoke RCU readers from irq level. This is currently
|
irqreaders Says to invoke RCU readers from irq level. This is currently
|
||||||
done via timers. Defaults to "1" for variants of RCU that
|
done via timers. Defaults to "1" for variants of RCU that
|
||||||
permit this. (Or, more accurately, variants of RCU that do
|
permit this. (Or, more accurately, variants of RCU that do
|
||||||
|
|
|
@ -323,14 +323,17 @@ used as follows:
|
||||||
Defer Protect
|
Defer Protect
|
||||||
|
|
||||||
a. synchronize_rcu() rcu_read_lock() / rcu_read_unlock()
|
a. synchronize_rcu() rcu_read_lock() / rcu_read_unlock()
|
||||||
call_rcu()
|
call_rcu() rcu_dereference()
|
||||||
|
|
||||||
b. call_rcu_bh() rcu_read_lock_bh() / rcu_read_unlock_bh()
|
b. call_rcu_bh() rcu_read_lock_bh() / rcu_read_unlock_bh()
|
||||||
|
rcu_dereference_bh()
|
||||||
|
|
||||||
c. synchronize_sched() preempt_disable() / preempt_enable()
|
c. synchronize_sched() rcu_read_lock_sched() / rcu_read_unlock_sched()
|
||||||
|
preempt_disable() / preempt_enable()
|
||||||
local_irq_save() / local_irq_restore()
|
local_irq_save() / local_irq_restore()
|
||||||
hardirq enter / hardirq exit
|
hardirq enter / hardirq exit
|
||||||
NMI enter / NMI exit
|
NMI enter / NMI exit
|
||||||
|
rcu_dereference_sched()
|
||||||
|
|
||||||
These three mechanisms are used as follows:
|
These three mechanisms are used as follows:
|
||||||
|
|
||||||
|
@ -780,9 +783,8 @@ Linux-kernel source code, but it helps to have a full list of the
|
||||||
APIs, since there does not appear to be a way to categorize them
|
APIs, since there does not appear to be a way to categorize them
|
||||||
in docbook. Here is the list, by category.
|
in docbook. Here is the list, by category.
|
||||||
|
|
||||||
RCU pointer/list traversal:
|
RCU list traversal:
|
||||||
|
|
||||||
rcu_dereference
|
|
||||||
list_for_each_entry_rcu
|
list_for_each_entry_rcu
|
||||||
hlist_for_each_entry_rcu
|
hlist_for_each_entry_rcu
|
||||||
hlist_nulls_for_each_entry_rcu
|
hlist_nulls_for_each_entry_rcu
|
||||||
|
@ -808,7 +810,7 @@ RCU: Critical sections Grace period Barrier
|
||||||
|
|
||||||
rcu_read_lock synchronize_net rcu_barrier
|
rcu_read_lock synchronize_net rcu_barrier
|
||||||
rcu_read_unlock synchronize_rcu
|
rcu_read_unlock synchronize_rcu
|
||||||
synchronize_rcu_expedited
|
rcu_dereference synchronize_rcu_expedited
|
||||||
call_rcu
|
call_rcu
|
||||||
|
|
||||||
|
|
||||||
|
@ -816,7 +818,7 @@ bh: Critical sections Grace period Barrier
|
||||||
|
|
||||||
rcu_read_lock_bh call_rcu_bh rcu_barrier_bh
|
rcu_read_lock_bh call_rcu_bh rcu_barrier_bh
|
||||||
rcu_read_unlock_bh synchronize_rcu_bh
|
rcu_read_unlock_bh synchronize_rcu_bh
|
||||||
synchronize_rcu_bh_expedited
|
rcu_dereference_bh synchronize_rcu_bh_expedited
|
||||||
|
|
||||||
|
|
||||||
sched: Critical sections Grace period Barrier
|
sched: Critical sections Grace period Barrier
|
||||||
|
@ -825,12 +827,14 @@ sched: Critical sections Grace period Barrier
|
||||||
rcu_read_unlock_sched call_rcu_sched
|
rcu_read_unlock_sched call_rcu_sched
|
||||||
[preempt_disable] synchronize_sched_expedited
|
[preempt_disable] synchronize_sched_expedited
|
||||||
[and friends]
|
[and friends]
|
||||||
|
rcu_dereference_sched
|
||||||
|
|
||||||
|
|
||||||
SRCU: Critical sections Grace period Barrier
|
SRCU: Critical sections Grace period Barrier
|
||||||
|
|
||||||
srcu_read_lock synchronize_srcu N/A
|
srcu_read_lock synchronize_srcu N/A
|
||||||
srcu_read_unlock synchronize_srcu_expedited
|
srcu_read_unlock synchronize_srcu_expedited
|
||||||
|
srcu_dereference
|
||||||
|
|
||||||
SRCU: Initialization/cleanup
|
SRCU: Initialization/cleanup
|
||||||
init_srcu_struct
|
init_srcu_struct
|
||||||
|
|
|
@ -59,7 +59,11 @@ PAGE_OFFSET high_memory-1 Kernel direct-mapped RAM region.
|
||||||
This maps the platforms RAM, and typically
|
This maps the platforms RAM, and typically
|
||||||
maps all platform RAM in a 1:1 relationship.
|
maps all platform RAM in a 1:1 relationship.
|
||||||
|
|
||||||
TASK_SIZE PAGE_OFFSET-1 Kernel module space
|
PKMAP_BASE PAGE_OFFSET-1 Permanent kernel mappings
|
||||||
|
One way of mapping HIGHMEM pages into kernel
|
||||||
|
space.
|
||||||
|
|
||||||
|
MODULES_VADDR MODULES_END-1 Kernel module space
|
||||||
Kernel modules inserted via insmod are
|
Kernel modules inserted via insmod are
|
||||||
placed here using dynamic mappings.
|
placed here using dynamic mappings.
|
||||||
|
|
||||||
|
|
|
@ -25,11 +25,11 @@ size allowed by the hardware.
|
||||||
|
|
||||||
nomerges (RW)
|
nomerges (RW)
|
||||||
-------------
|
-------------
|
||||||
This enables the user to disable the lookup logic involved with IO merging
|
This enables the user to disable the lookup logic involved with IO
|
||||||
requests in the block layer. Merging may still occur through a direct
|
merging requests in the block layer. By default (0) all merges are
|
||||||
1-hit cache, since that comes for (almost) free. The IO scheduler will not
|
enabled. When set to 1 only simple one-hit merges will be tried. When
|
||||||
waste cycles doing tree/hash lookups for merges if nomerges is 1. Defaults
|
set to 2 no merge algorithms will be tried (including one-hit or more
|
||||||
to 0, enabling all merges.
|
complex tree/hash lookups).
|
||||||
|
|
||||||
nr_requests (RW)
|
nr_requests (RW)
|
||||||
----------------
|
----------------
|
||||||
|
|
|
@ -88,12 +88,12 @@ changes occur:
|
||||||
This is used primarily during fault processing.
|
This is used primarily during fault processing.
|
||||||
|
|
||||||
5) void update_mmu_cache(struct vm_area_struct *vma,
|
5) void update_mmu_cache(struct vm_area_struct *vma,
|
||||||
unsigned long address, pte_t pte)
|
unsigned long address, pte_t *ptep)
|
||||||
|
|
||||||
At the end of every page fault, this routine is invoked to
|
At the end of every page fault, this routine is invoked to
|
||||||
tell the architecture specific code that a translation
|
tell the architecture specific code that a translation
|
||||||
described by "pte" now exists at virtual address "address"
|
now exists at virtual address "address" for address space
|
||||||
for address space "vma->vm_mm", in the software page tables.
|
"vma->vm_mm", in the software page tables.
|
||||||
|
|
||||||
A port may use this information in any way it so chooses.
|
A port may use this information in any way it so chooses.
|
||||||
For example, it could use this event to pre-load TLB
|
For example, it could use this event to pre-load TLB
|
||||||
|
@ -377,3 +377,27 @@ maps this page at its virtual address.
|
||||||
All the functionality of flush_icache_page can be implemented in
|
All the functionality of flush_icache_page can be implemented in
|
||||||
flush_dcache_page and update_mmu_cache. In 2.7 the hope is to
|
flush_dcache_page and update_mmu_cache. In 2.7 the hope is to
|
||||||
remove this interface completely.
|
remove this interface completely.
|
||||||
|
|
||||||
|
The final category of APIs is for I/O to deliberately aliased address
|
||||||
|
ranges inside the kernel. Such aliases are set up by use of the
|
||||||
|
vmap/vmalloc API. Since kernel I/O goes via physical pages, the I/O
|
||||||
|
subsystem assumes that the user mapping and kernel offset mapping are
|
||||||
|
the only aliases. This isn't true for vmap aliases, so anything in
|
||||||
|
the kernel trying to do I/O to vmap areas must manually manage
|
||||||
|
coherency. It must do this by flushing the vmap range before doing
|
||||||
|
I/O and invalidating it after the I/O returns.
|
||||||
|
|
||||||
|
void flush_kernel_vmap_range(void *vaddr, int size)
|
||||||
|
flushes the kernel cache for a given virtual address range in
|
||||||
|
the vmap area. This is to make sure that any data the kernel
|
||||||
|
modified in the vmap range is made visible to the physical
|
||||||
|
page. The design is to make this area safe to perform I/O on.
|
||||||
|
Note that this API does *not* also flush the offset map alias
|
||||||
|
of the area.
|
||||||
|
|
||||||
|
void invalidate_kernel_vmap_range(void *vaddr, int size) invalidates
|
||||||
|
the cache for a given virtual address range in the vmap area
|
||||||
|
which prevents the processor from making the cache stale by
|
||||||
|
speculatively reading data while the I/O was occurring to the
|
||||||
|
physical pages. This is only necessary for data reads into the
|
||||||
|
vmap area.
|
||||||
|
|
|
@ -159,42 +159,7 @@ two arguments: the CDROM device, and the slot number to which you wish
|
||||||
to change. If the slot number is -1, the drive is unloaded.
|
to change. If the slot number is -1, the drive is unloaded.
|
||||||
|
|
||||||
|
|
||||||
4. Compilation options
|
4. Common problems
|
||||||
----------------------
|
|
||||||
|
|
||||||
There are a few additional options which can be set when compiling the
|
|
||||||
driver. Most people should not need to mess with any of these; they
|
|
||||||
are listed here simply for completeness. A compilation option can be
|
|
||||||
enabled by adding a line of the form `#define <option> 1' to the top
|
|
||||||
of ide-cd.c. All these options are disabled by default.
|
|
||||||
|
|
||||||
VERBOSE_IDE_CD_ERRORS
|
|
||||||
If this is set, ATAPI error codes will be translated into textual
|
|
||||||
descriptions. In addition, a dump is made of the command which
|
|
||||||
provoked the error. This is off by default to save the memory used
|
|
||||||
by the (somewhat long) table of error descriptions.
|
|
||||||
|
|
||||||
STANDARD_ATAPI
|
|
||||||
If this is set, the code needed to deal with certain drives which do
|
|
||||||
not properly implement the ATAPI spec will be disabled. If you know
|
|
||||||
your drive implements ATAPI properly, you can turn this on to get a
|
|
||||||
slightly smaller kernel.
|
|
||||||
|
|
||||||
NO_DOOR_LOCKING
|
|
||||||
If this is set, the driver will never attempt to lock the door of
|
|
||||||
the drive.
|
|
||||||
|
|
||||||
CDROM_NBLOCKS_BUFFER
|
|
||||||
This sets the size of the buffer to be used for a CDROMREADAUDIO
|
|
||||||
ioctl. The default is 8.
|
|
||||||
|
|
||||||
TEST
|
|
||||||
This currently enables an additional ioctl which enables a user-mode
|
|
||||||
program to execute an arbitrary packet command. See the source for
|
|
||||||
details. This should be left off unless you know what you're doing.
|
|
||||||
|
|
||||||
|
|
||||||
5. Common problems
|
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
This section discusses some common problems encountered when trying to
|
This section discusses some common problems encountered when trying to
|
||||||
|
@ -371,7 +336,7 @@ f. Data corruption.
|
||||||
expense of low system performance.
|
expense of low system performance.
|
||||||
|
|
||||||
|
|
||||||
6. cdchange.c
|
5. cdchange.c
|
||||||
-------------
|
-------------
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -69,7 +69,6 @@ av_permissions.h
|
||||||
bbootsect
|
bbootsect
|
||||||
bin2c
|
bin2c
|
||||||
binkernel.spec
|
binkernel.spec
|
||||||
binoffset
|
|
||||||
bootsect
|
bootsect
|
||||||
bounds.h
|
bounds.h
|
||||||
bsetup
|
bsetup
|
||||||
|
|
|
@ -26,7 +26,7 @@ use IO::Handle;
|
||||||
"dec3000s", "vp7041", "dibusb", "nxt2002", "nxt2004",
|
"dec3000s", "vp7041", "dibusb", "nxt2002", "nxt2004",
|
||||||
"or51211", "or51132_qam", "or51132_vsb", "bluebird",
|
"or51211", "or51132_qam", "or51132_vsb", "bluebird",
|
||||||
"opera1", "cx231xx", "cx18", "cx23885", "pvrusb2", "mpc718",
|
"opera1", "cx231xx", "cx18", "cx23885", "pvrusb2", "mpc718",
|
||||||
"af9015");
|
"af9015", "ngene");
|
||||||
|
|
||||||
# Check args
|
# Check args
|
||||||
syntax() if (scalar(@ARGV) != 1);
|
syntax() if (scalar(@ARGV) != 1);
|
||||||
|
@ -39,7 +39,7 @@ for ($i=0; $i < scalar(@components); $i++) {
|
||||||
die $@ if $@;
|
die $@ if $@;
|
||||||
print STDERR <<EOF;
|
print STDERR <<EOF;
|
||||||
Firmware(s) $outfile extracted successfully.
|
Firmware(s) $outfile extracted successfully.
|
||||||
Now copy it(they) to either /usr/lib/hotplug/firmware or /lib/firmware
|
Now copy it(them) to either /usr/lib/hotplug/firmware or /lib/firmware
|
||||||
(depending on configuration of firmware hotplug).
|
(depending on configuration of firmware hotplug).
|
||||||
EOF
|
EOF
|
||||||
exit(0);
|
exit(0);
|
||||||
|
@ -549,6 +549,24 @@ sub af9015 {
|
||||||
close INFILE;
|
close INFILE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub ngene {
|
||||||
|
my $url = "http://www.digitaldevices.de/download/";
|
||||||
|
my $file1 = "ngene_15.fw";
|
||||||
|
my $hash1 = "d798d5a757121174f0dbc5f2833c0c85";
|
||||||
|
my $file2 = "ngene_17.fw";
|
||||||
|
my $hash2 = "26b687136e127b8ac24b81e0eeafc20b";
|
||||||
|
|
||||||
|
checkstandard();
|
||||||
|
|
||||||
|
wgetfile($file1, $url . $file1);
|
||||||
|
verify($file1, $hash1);
|
||||||
|
|
||||||
|
wgetfile($file2, $url . $file2);
|
||||||
|
verify($file2, $hash2);
|
||||||
|
|
||||||
|
"$file1, $file2";
|
||||||
|
}
|
||||||
|
|
||||||
# ---------------------------------------------------------------
|
# ---------------------------------------------------------------
|
||||||
# Utilities
|
# Utilities
|
||||||
|
|
||||||
|
@ -667,6 +685,7 @@ sub delzero{
|
||||||
sub syntax() {
|
sub syntax() {
|
||||||
print STDERR "syntax: get_dvb_firmware <component>\n";
|
print STDERR "syntax: get_dvb_firmware <component>\n";
|
||||||
print STDERR "Supported components:\n";
|
print STDERR "Supported components:\n";
|
||||||
|
@components = sort @components;
|
||||||
for($i=0; $i < scalar(@components); $i++) {
|
for($i=0; $i < scalar(@components); $i++) {
|
||||||
print STDERR "\t" . $components[$i] . "\n";
|
print STDERR "\t" . $components[$i] . "\n";
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,21 +6,6 @@ be removed from this file.
|
||||||
|
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|
||||||
What: USER_SCHED
|
|
||||||
When: 2.6.34
|
|
||||||
|
|
||||||
Why: USER_SCHED was implemented as a proof of concept for group scheduling.
|
|
||||||
The effect of USER_SCHED can already be achieved from userspace with
|
|
||||||
the help of libcgroup. The removal of USER_SCHED will also simplify
|
|
||||||
the scheduler code with the removal of one major ifdef. There are also
|
|
||||||
issues USER_SCHED has with USER_NS. A decision was taken not to fix
|
|
||||||
those and instead remove USER_SCHED. Also new group scheduling
|
|
||||||
features will not be implemented for USER_SCHED.
|
|
||||||
|
|
||||||
Who: Dhaval Giani <dhaval@linux.vnet.ibm.com>
|
|
||||||
|
|
||||||
---------------------------
|
|
||||||
|
|
||||||
What: PRISM54
|
What: PRISM54
|
||||||
When: 2.6.34
|
When: 2.6.34
|
||||||
|
|
||||||
|
@ -64,6 +49,17 @@ Who: Robin Getz <rgetz@blackfin.uclinux.org> & Matt Mackall <mpm@selenic.com>
|
||||||
|
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|
||||||
|
What: Deprecated snapshot ioctls
|
||||||
|
When: 2.6.36
|
||||||
|
|
||||||
|
Why: The ioctls in kernel/power/user.c were marked as deprecated long time
|
||||||
|
ago. Now they notify users about that so that they need to replace
|
||||||
|
their userspace. After some more time, remove them completely.
|
||||||
|
|
||||||
|
Who: Jiri Slaby <jirislaby@gmail.com>
|
||||||
|
|
||||||
|
---------------------------
|
||||||
|
|
||||||
What: The ieee80211_regdom module parameter
|
What: The ieee80211_regdom module parameter
|
||||||
When: March 2010 / desktop catchup
|
When: March 2010 / desktop catchup
|
||||||
|
|
||||||
|
@ -88,27 +84,6 @@ Who: Luis R. Rodriguez <lrodriguez@atheros.com>
|
||||||
|
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|
||||||
What: CONFIG_WIRELESS_OLD_REGULATORY - old static regulatory information
|
|
||||||
When: March 2010 / desktop catchup
|
|
||||||
|
|
||||||
Why: The old regulatory infrastructure has been replaced with a new one
|
|
||||||
which does not require statically defined regulatory domains. We do
|
|
||||||
not want to keep static regulatory domains in the kernel due to the
|
|
||||||
the dynamic nature of regulatory law and localization. We kept around
|
|
||||||
the old static definitions for the regulatory domains of:
|
|
||||||
|
|
||||||
* US
|
|
||||||
* JP
|
|
||||||
* EU
|
|
||||||
|
|
||||||
and used by default the US when CONFIG_WIRELESS_OLD_REGULATORY was
|
|
||||||
set. We will remove this option once the standard Linux desktop catches
|
|
||||||
up with the new userspace APIs we have implemented.
|
|
||||||
|
|
||||||
Who: Luis R. Rodriguez <lrodriguez@atheros.com>
|
|
||||||
|
|
||||||
---------------------------
|
|
||||||
|
|
||||||
What: dev->power.power_state
|
What: dev->power.power_state
|
||||||
When: July 2007
|
When: July 2007
|
||||||
Why: Broken design for runtime control over driver power states, confusing
|
Why: Broken design for runtime control over driver power states, confusing
|
||||||
|
@ -142,19 +117,25 @@ Who: Mauro Carvalho Chehab <mchehab@infradead.org>
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|
||||||
What: PCMCIA control ioctl (needed for pcmcia-cs [cardmgr, cardctl])
|
What: PCMCIA control ioctl (needed for pcmcia-cs [cardmgr, cardctl])
|
||||||
When: November 2005
|
When: 2.6.35/2.6.36
|
||||||
Files: drivers/pcmcia/: pcmcia_ioctl.c
|
Files: drivers/pcmcia/: pcmcia_ioctl.c
|
||||||
Why: With the 16-bit PCMCIA subsystem now behaving (almost) like a
|
Why: With the 16-bit PCMCIA subsystem now behaving (almost) like a
|
||||||
normal hotpluggable bus, and with it using the default kernel
|
normal hotpluggable bus, and with it using the default kernel
|
||||||
infrastructure (hotplug, driver core, sysfs) keeping the PCMCIA
|
infrastructure (hotplug, driver core, sysfs) keeping the PCMCIA
|
||||||
control ioctl needed by cardmgr and cardctl from pcmcia-cs is
|
control ioctl needed by cardmgr and cardctl from pcmcia-cs is
|
||||||
unnecessary, and makes further cleanups and integration of the
|
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
|
PCMCIA subsystem into the Linux kernel device driver model more
|
||||||
difficult. The features provided by cardmgr and cardctl are either
|
difficult. The features provided by cardmgr and cardctl are either
|
||||||
handled by the kernel itself now or are available in the new
|
handled by the kernel itself now or are available in the new
|
||||||
pcmciautils package available at
|
pcmciautils package available at
|
||||||
http://kernel.org/pub/linux/utils/kernel/pcmcia/
|
http://kernel.org/pub/linux/utils/kernel/pcmcia/
|
||||||
Who: Dominik Brodowski <linux@brodo.de>
|
|
||||||
|
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>
|
||||||
|
|
||||||
---------------------------
|
---------------------------
|
||||||
|
|
||||||
|
@ -542,3 +523,36 @@ Why: Duplicate functionality with the gspca_zc3xx driver, zc0301 only
|
||||||
sensors) wich are also supported by the gspca_zc3xx driver
|
sensors) wich are also supported by the gspca_zc3xx driver
|
||||||
(which supports 53 USB-ID's in total)
|
(which supports 53 USB-ID's in total)
|
||||||
Who: Hans de Goede <hdegoede@redhat.com>
|
Who: Hans de Goede <hdegoede@redhat.com>
|
||||||
|
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
What: corgikbd, spitzkbd, tosakbd driver
|
||||||
|
When: 2.6.35
|
||||||
|
Files: drivers/input/keyboard/{corgi,spitz,tosa}kbd.c
|
||||||
|
Why: We now have a generic GPIO based matrix keyboard driver that
|
||||||
|
are fully capable of handling all the keys on these devices.
|
||||||
|
The original drivers manipulate the GPIO registers directly
|
||||||
|
and so are difficult to maintain.
|
||||||
|
Who: Eric Miao <eric.y.miao@gmail.com>
|
||||||
|
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
What: corgi_ssp and corgi_ts driver
|
||||||
|
When: 2.6.35
|
||||||
|
Files: arch/arm/mach-pxa/corgi_ssp.c, drivers/input/touchscreen/corgi_ts.c
|
||||||
|
Why: The corgi touchscreen is now deprecated in favour of the generic
|
||||||
|
ads7846.c driver. The noise reduction technique used in corgi_ts.c,
|
||||||
|
that's to wait till vsync before ADC sampling, is also integrated into
|
||||||
|
ads7846 driver now. Provided that the original driver is not generic
|
||||||
|
and is difficult to maintain, it will be removed later.
|
||||||
|
Who: Eric Miao <eric.y.miao@gmail.com>
|
||||||
|
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
What: capifs
|
||||||
|
When: February 2011
|
||||||
|
Files: drivers/isdn/capi/capifs.*
|
||||||
|
Why: udev fully replaces this special file system that only contains CAPI
|
||||||
|
NCCI TTY device nodes. User space (pppdcapiplugin) works without
|
||||||
|
noticing the difference.
|
||||||
|
Who: Jan Kiszka <jan.kiszka@web.de>
|
||||||
|
|
|
@ -62,7 +62,8 @@ changes are :
|
||||||
2. Insertion of a dentry into the hash table is done using
|
2. Insertion of a dentry into the hash table is done using
|
||||||
hlist_add_head_rcu() which take care of ordering the writes - the
|
hlist_add_head_rcu() which take care of ordering the writes - the
|
||||||
writes to the dentry must be visible before the dentry is
|
writes to the dentry must be visible before the dentry is
|
||||||
inserted. This works in conjunction with hlist_for_each_rcu() while
|
inserted. This works in conjunction with hlist_for_each_rcu(),
|
||||||
|
which has since been replaced by hlist_for_each_entry_rcu(), while
|
||||||
walking the hash chain. The only requirement is that all
|
walking the hash chain. The only requirement is that all
|
||||||
initialization to the dentry must be done before
|
initialization to the dentry must be done before
|
||||||
hlist_add_head_rcu() since we don't have dcache_lock protection
|
hlist_add_head_rcu() since we don't have dcache_lock protection
|
||||||
|
|
|
@ -74,6 +74,9 @@ norecovery Disable recovery of the filesystem on mount.
|
||||||
This disables every write access on the device for
|
This disables every write access on the device for
|
||||||
read-only mounts or snapshots. This option will fail
|
read-only mounts or snapshots. This option will fail
|
||||||
for r/w mounts on an unclean volume.
|
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.
|
||||||
|
|
||||||
NILFS2 usage
|
NILFS2 usage
|
||||||
============
|
============
|
||||||
|
|
|
@ -837,6 +837,9 @@ replicas continue to be exactly same.
|
||||||
individual lists does not affect propagation or the way propagation
|
individual lists does not affect propagation or the way propagation
|
||||||
tree is modified by operations.
|
tree is modified by operations.
|
||||||
|
|
||||||
|
All vfsmounts in a peer group have the same ->mnt_master. If it is
|
||||||
|
non-NULL, they form a contiguous (ordered) segment of slave list.
|
||||||
|
|
||||||
A example propagation tree looks as shown in the figure below.
|
A example propagation tree looks as shown in the figure below.
|
||||||
[ NOTE: Though it looks like a forest, if we consider all the shared
|
[ NOTE: Though it looks like a forest, if we consider all the shared
|
||||||
mounts as a conceptual entity called 'pnode', it becomes a tree]
|
mounts as a conceptual entity called 'pnode', it becomes a tree]
|
||||||
|
@ -874,8 +877,19 @@ replicas continue to be exactly same.
|
||||||
|
|
||||||
NOTE: The propagation tree is orthogonal to the mount tree.
|
NOTE: The propagation tree is orthogonal to the mount tree.
|
||||||
|
|
||||||
|
8B Locking:
|
||||||
|
|
||||||
8B Algorithm:
|
->mnt_share, ->mnt_slave, ->mnt_slave_list, ->mnt_master are protected
|
||||||
|
by namespace_sem (exclusive for modifications, shared for reading).
|
||||||
|
|
||||||
|
Normally we have ->mnt_flags modifications serialized by vfsmount_lock.
|
||||||
|
There are two exceptions: do_add_mount() and clone_mnt().
|
||||||
|
The former modifies a vfsmount that has not been visible in any shared
|
||||||
|
data structures yet.
|
||||||
|
The latter holds namespace_sem and the only references to vfsmount
|
||||||
|
are in lists that can't be traversed without namespace_sem.
|
||||||
|
|
||||||
|
8C Algorithm:
|
||||||
|
|
||||||
The crux of the implementation resides in rbind/move operation.
|
The crux of the implementation resides in rbind/move operation.
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,8 @@ Supported adapters:
|
||||||
* Intel 82801I (ICH9)
|
* Intel 82801I (ICH9)
|
||||||
* Intel EP80579 (Tolapai)
|
* Intel EP80579 (Tolapai)
|
||||||
* Intel 82801JI (ICH10)
|
* Intel 82801JI (ICH10)
|
||||||
* Intel PCH
|
* Intel 3400/5 Series (PCH)
|
||||||
|
* Intel Cougar Point (PCH)
|
||||||
Datasheets: Publicly available at the Intel website
|
Datasheets: Publicly available at the Intel website
|
||||||
|
|
||||||
Authors:
|
Authors:
|
||||||
|
|
|
@ -29,6 +29,9 @@ can be easily added when needed.
|
||||||
Earlier kernels defaulted to type=0 (Philips). But now, if the type
|
Earlier kernels defaulted to type=0 (Philips). But now, if the type
|
||||||
parameter is missing, the driver will simply fail to initialize.
|
parameter is missing, the driver will simply fail to initialize.
|
||||||
|
|
||||||
|
SMBus alert support is available on adapters which have this line properly
|
||||||
|
connected to the parallel port's interrupt pin.
|
||||||
|
|
||||||
|
|
||||||
Building your own adapter
|
Building your own adapter
|
||||||
-------------------------
|
-------------------------
|
||||||
|
|
|
@ -9,3 +9,14 @@ parport handling is not an option. The drawback is a reduced portability
|
||||||
and the impossibility to daisy-chain other parallel port devices.
|
and the impossibility to daisy-chain other parallel port devices.
|
||||||
|
|
||||||
Please see i2c-parport for documentation.
|
Please see i2c-parport for documentation.
|
||||||
|
|
||||||
|
Module parameters:
|
||||||
|
|
||||||
|
* type: type of adapter (see i2c-parport or modinfo)
|
||||||
|
|
||||||
|
* base: base I/O address
|
||||||
|
Default is 0x378 which is fairly common for parallel ports, at least on PC.
|
||||||
|
|
||||||
|
* irq: optional IRQ
|
||||||
|
This must be passed if you want SMBus alert support, assuming your adapter
|
||||||
|
actually supports this.
|
||||||
|
|
|
@ -185,6 +185,22 @@ the protocol. All ARP communications use slave address 0x61 and
|
||||||
require PEC checksums.
|
require PEC checksums.
|
||||||
|
|
||||||
|
|
||||||
|
SMBus Alert
|
||||||
|
===========
|
||||||
|
|
||||||
|
SMBus Alert was introduced in Revision 1.0 of the specification.
|
||||||
|
|
||||||
|
The SMBus alert protocol allows several SMBus slave devices to share a
|
||||||
|
single interrupt pin on the SMBus master, while still allowing the master
|
||||||
|
to know which slave triggered the interrupt.
|
||||||
|
|
||||||
|
This is implemented the following way in the Linux kernel:
|
||||||
|
* I2C bus drivers which support SMBus alert should call
|
||||||
|
i2c_setup_smbus_alert() to setup SMBus alert support.
|
||||||
|
* I2C drivers for devices which can trigger SMBus alerts should implement
|
||||||
|
the optional alert() callback.
|
||||||
|
|
||||||
|
|
||||||
I2C Block Transactions
|
I2C Block Transactions
|
||||||
======================
|
======================
|
||||||
|
|
||||||
|
|
|
@ -318,8 +318,9 @@ Plain I2C communication
|
||||||
These routines read and write some bytes from/to a client. The client
|
These routines read and write some bytes from/to a client. The client
|
||||||
contains the i2c address, so you do not have to include it. The second
|
contains the i2c address, so you do not have to include it. The second
|
||||||
parameter contains the bytes to read/write, the third the number of bytes
|
parameter contains the bytes to read/write, the third the number of bytes
|
||||||
to read/write (must be less than the length of the buffer.) Returned is
|
to read/write (must be less than the length of the buffer, also should be
|
||||||
the actual number of bytes read/written.
|
less than 64k since msg.len is u16.) Returned is the actual number of bytes
|
||||||
|
read/written.
|
||||||
|
|
||||||
int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msg,
|
int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msg,
|
||||||
int num);
|
int num);
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
Copyright (C) 2002-2008 Sentelic Corporation.
|
Copyright (C) 2002-2010 Sentelic Corporation.
|
||||||
Last update: Oct-31-2008
|
Last update: Jan-13-2010
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
* Finger Sensing Pad Intellimouse Mode(scrolling wheel, 4th and 5th buttons)
|
* Finger Sensing Pad Intellimouse Mode(scrolling wheel, 4th and 5th buttons)
|
||||||
|
@ -44,7 +44,7 @@ B) MSID 6: Horizontal and Vertical scrolling.
|
||||||
Packet 1
|
Packet 1
|
||||||
Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
|
Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
|
||||||
BYTE |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|
|
BYTE |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|
|
||||||
1 |Y|X|y|x|1|M|R|L| 2 |X|X|X|X|X|X|X|X| 3 |Y|Y|Y|Y|Y|Y|Y|Y| 4 | | |B|F|l|r|u|d|
|
1 |Y|X|y|x|1|M|R|L| 2 |X|X|X|X|X|X|X|X| 3 |Y|Y|Y|Y|Y|Y|Y|Y| 4 | | |B|F|r|l|u|d|
|
||||||
|---------------| |---------------| |---------------| |---------------|
|
|---------------| |---------------| |---------------| |---------------|
|
||||||
|
|
||||||
Byte 1: Bit7 => Y overflow
|
Byte 1: Bit7 => Y overflow
|
||||||
|
@ -59,15 +59,15 @@ Byte 2: X Movement(9-bit 2's complement integers)
|
||||||
Byte 3: Y Movement(9-bit 2's complement integers)
|
Byte 3: Y Movement(9-bit 2's complement integers)
|
||||||
Byte 4: Bit0 => the Vertical scrolling movement downward.
|
Byte 4: Bit0 => the Vertical scrolling movement downward.
|
||||||
Bit1 => the Vertical scrolling movement upward.
|
Bit1 => the Vertical scrolling movement upward.
|
||||||
Bit2 => the Vertical scrolling movement rightward.
|
Bit2 => the Horizontal scrolling movement leftward.
|
||||||
Bit3 => the Vertical scrolling movement leftward.
|
Bit3 => the Horizontal scrolling movement rightward.
|
||||||
Bit4 => 1 = 4th mouse button is pressed, Forward one page.
|
Bit4 => 1 = 4th mouse button is pressed, Forward one page.
|
||||||
0 = 4th mouse button is not pressed.
|
0 = 4th mouse button is not pressed.
|
||||||
Bit5 => 1 = 5th mouse button is pressed, Backward one page.
|
Bit5 => 1 = 5th mouse button is pressed, Backward one page.
|
||||||
0 = 5th mouse button is not pressed.
|
0 = 5th mouse button is not pressed.
|
||||||
|
|
||||||
C) MSID 7:
|
C) MSID 7:
|
||||||
# FSP uses 2 packets(8 Bytes) data to represent Absolute Position
|
# FSP uses 2 packets (8 Bytes) to represent Absolute Position.
|
||||||
so we have PACKET NUMBER to identify packets.
|
so we have PACKET NUMBER to identify packets.
|
||||||
If PACKET NUMBER is 0, the packet is Packet 1.
|
If PACKET NUMBER is 0, the packet is Packet 1.
|
||||||
If PACKET NUMBER is 1, the packet is Packet 2.
|
If PACKET NUMBER is 1, the packet is Packet 2.
|
||||||
|
@ -129,7 +129,7 @@ Byte 3: Message Type => 0x00 (Disabled)
|
||||||
Byte 4: Bit7~Bit0 => Don't Care
|
Byte 4: Bit7~Bit0 => Don't Care
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
* Absolute position for STL3888-A0.
|
* Absolute position for STL3888-Ax.
|
||||||
==============================================================================
|
==============================================================================
|
||||||
Packet 1 (ABSOLUTE POSITION)
|
Packet 1 (ABSOLUTE POSITION)
|
||||||
Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
|
Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
|
||||||
|
@ -179,14 +179,14 @@ Byte 4: Bit1~Bit0 => Y coordinate (xpos[1:0])
|
||||||
Bit5~Bit4 => y2_g
|
Bit5~Bit4 => y2_g
|
||||||
Bit7~Bit6 => x2_g
|
Bit7~Bit6 => x2_g
|
||||||
|
|
||||||
Notify Packet for STL3888-A0
|
Notify Packet for STL3888-Ax
|
||||||
Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
|
Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
|
||||||
BYTE |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|
|
BYTE |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|
|
||||||
1 |1|0|1|P|1|M|R|L| 2 |C|C|C|C|C|C|C|C| 3 |0|0|F|F|0|0|0|i| 4 |r|l|d|u|0|0|0|0|
|
1 |1|0|1|P|1|M|R|L| 2 |C|C|C|C|C|C|C|C| 3 |0|0|F|F|0|0|0|i| 4 |r|l|d|u|0|0|0|0|
|
||||||
|---------------| |---------------| |---------------| |---------------|
|
|---------------| |---------------| |---------------| |---------------|
|
||||||
|
|
||||||
Byte 1: Bit7~Bit6 => 00, Normal data packet
|
Byte 1: Bit7~Bit6 => 00, Normal data packet
|
||||||
=> 01, Absolute coordination packet
|
=> 01, Absolute coordinates packet
|
||||||
=> 10, Notify packet
|
=> 10, Notify packet
|
||||||
Bit5 => 1
|
Bit5 => 1
|
||||||
Bit4 => when in absolute coordinates mode (valid when EN_PKT_GO is 1):
|
Bit4 => when in absolute coordinates mode (valid when EN_PKT_GO is 1):
|
||||||
|
@ -205,15 +205,106 @@ Byte 4: Bit7 => scroll right button
|
||||||
Bit6 => scroll left button
|
Bit6 => scroll left button
|
||||||
Bit5 => scroll down button
|
Bit5 => scroll down button
|
||||||
Bit4 => scroll up button
|
Bit4 => scroll up button
|
||||||
* Note that if gesture and additional button (Bit4~Bit7)
|
* Note that if gesture and additional buttoni (Bit4~Bit7)
|
||||||
happen at the same time, the button information will not
|
happen at the same time, the button information will not
|
||||||
be sent.
|
be sent.
|
||||||
Bit3~Bit0 => Reserved
|
Bit3~Bit0 => Reserved
|
||||||
|
|
||||||
Sample sequence of Multi-finger, Multi-coordinate mode:
|
Sample sequence of Multi-finger, Multi-coordinate mode:
|
||||||
|
|
||||||
notify packet (valid bit == 1), abs pkt 1, abs pkt 2, abs pkt 1,
|
notify packet (valid bit == 1), abs pkt 1, abs pkt 2, abs pkt 1,
|
||||||
abs pkt 2, ..., notify packet(valid bit == 0)
|
abs pkt 2, ..., notify packet (valid bit == 0)
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
* Absolute position for STL3888-B0.
|
||||||
|
==============================================================================
|
||||||
|
Packet 1(ABSOLUTE POSITION)
|
||||||
|
Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
|
||||||
|
BYTE |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|
|
||||||
|
1 |0|1|V|F|1|0|R|L| 2 |X|X|X|X|X|X|X|X| 3 |Y|Y|Y|Y|Y|Y|Y|Y| 4 |r|l|u|d|X|X|Y|Y|
|
||||||
|
|---------------| |---------------| |---------------| |---------------|
|
||||||
|
|
||||||
|
Byte 1: Bit7~Bit6 => 00, Normal data packet
|
||||||
|
=> 01, Absolute coordinates packet
|
||||||
|
=> 10, Notify packet
|
||||||
|
Bit5 => Valid bit, 0 means that the coordinate is invalid or finger up.
|
||||||
|
When both fingers are up, the last two reports have zero valid
|
||||||
|
bit.
|
||||||
|
Bit4 => finger up/down information. 1: finger down, 0: finger up.
|
||||||
|
Bit3 => 1
|
||||||
|
Bit2 => finger index, 0 is the first finger, 1 is the second finger.
|
||||||
|
Bit1 => Right Button, 1 is pressed, 0 is not pressed.
|
||||||
|
Bit0 => Left Button, 1 is pressed, 0 is not pressed.
|
||||||
|
Byte 2: X coordinate (xpos[9:2])
|
||||||
|
Byte 3: Y coordinate (ypos[9:2])
|
||||||
|
Byte 4: Bit1~Bit0 => Y coordinate (xpos[1:0])
|
||||||
|
Bit3~Bit2 => X coordinate (ypos[1:0])
|
||||||
|
Bit4 => scroll down button
|
||||||
|
Bit5 => scroll up button
|
||||||
|
Bit6 => scroll left button
|
||||||
|
Bit7 => scroll right button
|
||||||
|
|
||||||
|
Packet 2 (ABSOLUTE POSITION)
|
||||||
|
Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
|
||||||
|
BYTE |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|
|
||||||
|
1 |0|1|V|F|1|1|R|L| 2 |X|X|X|X|X|X|X|X| 3 |Y|Y|Y|Y|Y|Y|Y|Y| 4 |r|l|u|d|X|X|Y|Y|
|
||||||
|
|---------------| |---------------| |---------------| |---------------|
|
||||||
|
|
||||||
|
Byte 1: Bit7~Bit6 => 00, Normal data packet
|
||||||
|
=> 01, Absolute coordination packet
|
||||||
|
=> 10, Notify packet
|
||||||
|
Bit5 => Valid bit, 0 means that the coordinate is invalid or finger up.
|
||||||
|
When both fingers are up, the last two reports have zero valid
|
||||||
|
bit.
|
||||||
|
Bit4 => finger up/down information. 1: finger down, 0: finger up.
|
||||||
|
Bit3 => 1
|
||||||
|
Bit2 => finger index, 0 is the first finger, 1 is the second finger.
|
||||||
|
Bit1 => Right Button, 1 is pressed, 0 is not pressed.
|
||||||
|
Bit0 => Left Button, 1 is pressed, 0 is not pressed.
|
||||||
|
Byte 2: X coordinate (xpos[9:2])
|
||||||
|
Byte 3: Y coordinate (ypos[9:2])
|
||||||
|
Byte 4: Bit1~Bit0 => Y coordinate (xpos[1:0])
|
||||||
|
Bit3~Bit2 => X coordinate (ypos[1:0])
|
||||||
|
Bit4 => scroll down button
|
||||||
|
Bit5 => scroll up button
|
||||||
|
Bit6 => scroll left button
|
||||||
|
Bit7 => scroll right button
|
||||||
|
|
||||||
|
Notify Packet for STL3888-B0
|
||||||
|
Bit 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0
|
||||||
|
BYTE |---------------|BYTE |---------------|BYTE|---------------|BYTE|---------------|
|
||||||
|
1 |1|0|1|P|1|M|R|L| 2 |C|C|C|C|C|C|C|C| 3 |0|0|F|F|0|0|0|i| 4 |r|l|u|d|0|0|0|0|
|
||||||
|
|---------------| |---------------| |---------------| |---------------|
|
||||||
|
|
||||||
|
Byte 1: Bit7~Bit6 => 00, Normal data packet
|
||||||
|
=> 01, Absolute coordination packet
|
||||||
|
=> 10, Notify packet
|
||||||
|
Bit5 => 1
|
||||||
|
Bit4 => when in absolute coordinate mode (valid when EN_PKT_GO is 1):
|
||||||
|
0: left button is generated by the on-pad command
|
||||||
|
1: left button is generated by the external button
|
||||||
|
Bit3 => 1
|
||||||
|
Bit2 => Middle Button, 1 is pressed, 0 is not pressed.
|
||||||
|
Bit1 => Right Button, 1 is pressed, 0 is not pressed.
|
||||||
|
Bit0 => Left Button, 1 is pressed, 0 is not pressed.
|
||||||
|
Byte 2: Message Type => 0xB7 (Multi Finger, Multi Coordinate mode)
|
||||||
|
Byte 3: Bit7~Bit6 => Don't care
|
||||||
|
Bit5~Bit4 => Number of fingers
|
||||||
|
Bit3~Bit1 => Reserved
|
||||||
|
Bit0 => 1: enter gesture mode; 0: leaving gesture mode
|
||||||
|
Byte 4: Bit7 => scroll right button
|
||||||
|
Bit6 => scroll left button
|
||||||
|
Bit5 => scroll up button
|
||||||
|
Bit4 => scroll down button
|
||||||
|
* Note that if gesture and additional button(Bit4~Bit7)
|
||||||
|
happen at the same time, the button information will not
|
||||||
|
be sent.
|
||||||
|
Bit3~Bit0 => Reserved
|
||||||
|
|
||||||
|
Sample sequence of Multi-finger, Multi-coordinate mode:
|
||||||
|
|
||||||
|
notify packet (valid bit == 1), abs pkt 1, abs pkt 2, abs pkt 1,
|
||||||
|
abs pkt 2, ..., notify packet (valid bit == 0)
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
* FSP Enable/Disable packet
|
* FSP Enable/Disable packet
|
||||||
|
@ -409,7 +500,8 @@ offset width default r/w name
|
||||||
0: read only, 1: read/write enable
|
0: read only, 1: read/write enable
|
||||||
(Note that following registers does not require clock gating being
|
(Note that following registers does not require clock gating being
|
||||||
enabled prior to write: 05 06 07 08 09 0c 0f 10 11 12 16 17 18 23 2e
|
enabled prior to write: 05 06 07 08 09 0c 0f 10 11 12 16 17 18 23 2e
|
||||||
40 41 42 43.)
|
40 41 42 43. In addition to that, this bit must be 1 when gesture
|
||||||
|
mode is enabled)
|
||||||
|
|
||||||
0x31 RW on-pad command detection
|
0x31 RW on-pad command detection
|
||||||
bit7 0 RW on-pad command left button down tag
|
bit7 0 RW on-pad command left button down tag
|
||||||
|
@ -463,6 +555,10 @@ offset width default r/w name
|
||||||
absolute coordinates; otherwise, host only receives packets with
|
absolute coordinates; otherwise, host only receives packets with
|
||||||
relative coordinate.)
|
relative coordinate.)
|
||||||
|
|
||||||
|
bit7 0 RW EN_PS2_F2: PS/2 gesture mode 2nd
|
||||||
|
finger packet enable
|
||||||
|
0: disable, 1: enable
|
||||||
|
|
||||||
0x43 RW on-pad control
|
0x43 RW on-pad control
|
||||||
bit0 0 RW on-pad control enable
|
bit0 0 RW on-pad control enable
|
||||||
0: disable, 1: enable
|
0: disable, 1: enable
|
||||||
|
|
|
@ -139,7 +139,6 @@ Code Seq#(hex) Include File Comments
|
||||||
'K' all linux/kd.h
|
'K' all linux/kd.h
|
||||||
'L' 00-1F linux/loop.h conflict!
|
'L' 00-1F linux/loop.h conflict!
|
||||||
'L' 10-1F drivers/scsi/mpt2sas/mpt2sas_ctl.h conflict!
|
'L' 10-1F drivers/scsi/mpt2sas/mpt2sas_ctl.h conflict!
|
||||||
'L' 20-2F linux/usb/vstusb.h
|
|
||||||
'L' E0-FF linux/ppdd.h encrypted disk device driver
|
'L' E0-FF linux/ppdd.h encrypted disk device driver
|
||||||
<http://linux01.gwdg.de/~alatham/ppdd.html>
|
<http://linux01.gwdg.de/~alatham/ppdd.html>
|
||||||
'M' all linux/soundcard.h conflict!
|
'M' all linux/soundcard.h conflict!
|
||||||
|
|
|
@ -149,10 +149,11 @@ char *(*procinfo)(struct capi_ctr *ctrlr)
|
||||||
pointer to a callback function returning the entry for the device in
|
pointer to a callback function returning the entry for the device in
|
||||||
the CAPI controller info table, /proc/capi/controller
|
the CAPI controller info table, /proc/capi/controller
|
||||||
|
|
||||||
read_proc_t *ctr_read_proc
|
const struct file_operations *proc_fops
|
||||||
pointer to the read_proc callback function for the device's proc file
|
pointers to callback functions for the device's proc file
|
||||||
system entry, /proc/capi/controllers/<n>; will be called with a
|
system entry, /proc/capi/controllers/<n>; pointer to the device's
|
||||||
pointer to the device's capi_ctr structure as the last (data) argument
|
capi_ctr structure is available from struct proc_dir_entry::data
|
||||||
|
which is available from struct inode.
|
||||||
|
|
||||||
Note: Callback functions except send_message() are never called in interrupt
|
Note: Callback functions except send_message() are never called in interrupt
|
||||||
context.
|
context.
|
||||||
|
|
|
@ -292,10 +292,10 @@ GigaSet 307x Device Driver
|
||||||
to /etc/modprobe.d/gigaset, /etc/modprobe.conf.local or a similar file.
|
to /etc/modprobe.d/gigaset, /etc/modprobe.conf.local or a similar file.
|
||||||
|
|
||||||
Problem:
|
Problem:
|
||||||
Your isdn script aborts with a message about isdnlog.
|
The isdnlog program emits error messages or just doesn't work.
|
||||||
Solution:
|
Solution:
|
||||||
Try deactivating (or commenting out) isdnlog. This driver does not
|
Isdnlog supports only the HiSax driver. Do not attempt to use it with
|
||||||
support it.
|
other drivers such as Gigaset.
|
||||||
|
|
||||||
Problem:
|
Problem:
|
||||||
You have two or more DECT data adapters (M101/M105) and only the
|
You have two or more DECT data adapters (M101/M105) and only the
|
||||||
|
@ -321,8 +321,8 @@ GigaSet 307x Device Driver
|
||||||
writing an appropriate value to /sys/module/gigaset/parameters/debug, e.g.
|
writing an appropriate value to /sys/module/gigaset/parameters/debug, e.g.
|
||||||
echo 0 > /sys/module/gigaset/parameters/debug
|
echo 0 > /sys/module/gigaset/parameters/debug
|
||||||
switches off debugging output completely,
|
switches off debugging output completely,
|
||||||
echo 0x10a020 > /sys/module/gigaset/parameters/debug
|
echo 0x302020 > /sys/module/gigaset/parameters/debug
|
||||||
enables the standard set of debugging output messages. These values are
|
enables a reasonable set of debugging output messages. These values are
|
||||||
bit patterns where every bit controls a certain type of debugging output.
|
bit patterns where every bit controls a certain type of debugging output.
|
||||||
See the constants DEBUG_* in the source file gigaset.h for details.
|
See the constants DEBUG_* in the source file gigaset.h for details.
|
||||||
|
|
||||||
|
|
|
@ -54,6 +54,7 @@ parameter is applicable:
|
||||||
IMA Integrity measurement architecture is enabled.
|
IMA Integrity measurement architecture is enabled.
|
||||||
IOSCHED More than one I/O scheduler is enabled.
|
IOSCHED More than one I/O scheduler is enabled.
|
||||||
IP_PNP IP DHCP, BOOTP, or RARP is enabled.
|
IP_PNP IP DHCP, BOOTP, or RARP is enabled.
|
||||||
|
IPV6 IPv6 support is enabled.
|
||||||
ISAPNP ISA PnP code is enabled.
|
ISAPNP ISA PnP code is enabled.
|
||||||
ISDN Appropriate ISDN support is enabled.
|
ISDN Appropriate ISDN support is enabled.
|
||||||
JOY Appropriate joystick support is enabled.
|
JOY Appropriate joystick support is enabled.
|
||||||
|
@ -199,6 +200,10 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
acpi_display_output=video
|
acpi_display_output=video
|
||||||
See above.
|
See above.
|
||||||
|
|
||||||
|
acpi_early_pdc_eval [HW,ACPI] Evaluate processor _PDC methods
|
||||||
|
early. Needed on some platforms to properly
|
||||||
|
initialize the EC.
|
||||||
|
|
||||||
acpi_irq_balance [HW,ACPI]
|
acpi_irq_balance [HW,ACPI]
|
||||||
ACPI will balance active IRQs
|
ACPI will balance active IRQs
|
||||||
default in APIC mode
|
default in APIC mode
|
||||||
|
@ -311,6 +316,11 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
aic79xx= [HW,SCSI]
|
aic79xx= [HW,SCSI]
|
||||||
See Documentation/scsi/aic79xx.txt.
|
See Documentation/scsi/aic79xx.txt.
|
||||||
|
|
||||||
|
alignment= [KNL,ARM]
|
||||||
|
Allow the default userspace alignment fault handler
|
||||||
|
behaviour to be specified. Bit 0 enables warnings,
|
||||||
|
bit 1 enables fixups, and bit 2 sends a segfault.
|
||||||
|
|
||||||
amd_iommu= [HW,X86-84]
|
amd_iommu= [HW,X86-84]
|
||||||
Pass parameters to the AMD IOMMU driver in the system.
|
Pass parameters to the AMD IOMMU driver in the system.
|
||||||
Possible values are:
|
Possible values are:
|
||||||
|
@ -347,6 +357,9 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
Change the amount of debugging information output
|
Change the amount of debugging information output
|
||||||
when initialising the APIC and IO-APIC components.
|
when initialising the APIC and IO-APIC components.
|
||||||
|
|
||||||
|
autoconf= [IPV6]
|
||||||
|
See Documentation/networking/ipv6.txt.
|
||||||
|
|
||||||
show_lapic= [APIC,X86] Advanced Programmable Interrupt Controller
|
show_lapic= [APIC,X86] Advanced Programmable Interrupt Controller
|
||||||
Limit apic dumping. The parameter defines the maximal
|
Limit apic dumping. The parameter defines the maximal
|
||||||
number of local apics being dumped. Also it is possible
|
number of local apics being dumped. Also it is possible
|
||||||
|
@ -629,6 +642,12 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
See drivers/char/README.epca and
|
See drivers/char/README.epca and
|
||||||
Documentation/serial/digiepca.txt.
|
Documentation/serial/digiepca.txt.
|
||||||
|
|
||||||
|
disable= [IPV6]
|
||||||
|
See Documentation/networking/ipv6.txt.
|
||||||
|
|
||||||
|
disable_ipv6= [IPV6]
|
||||||
|
See Documentation/networking/ipv6.txt.
|
||||||
|
|
||||||
disable_mtrr_cleanup [X86]
|
disable_mtrr_cleanup [X86]
|
||||||
The kernel tries to adjust MTRR layout from continuous
|
The kernel tries to adjust MTRR layout from continuous
|
||||||
to discrete, to make X server driver able to add WB
|
to discrete, to make X server driver able to add WB
|
||||||
|
@ -1729,6 +1748,9 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
nomfgpt [X86-32] Disable Multi-Function General Purpose
|
nomfgpt [X86-32] Disable Multi-Function General Purpose
|
||||||
Timer usage (for AMD Geode machines).
|
Timer usage (for AMD Geode machines).
|
||||||
|
|
||||||
|
nopat [X86] Disable PAT (page attribute table extension of
|
||||||
|
pagetables) support.
|
||||||
|
|
||||||
norandmaps Don't use address space randomization. Equivalent to
|
norandmaps Don't use address space randomization. Equivalent to
|
||||||
echo 0 > /proc/sys/kernel/randomize_va_space
|
echo 0 > /proc/sys/kernel/randomize_va_space
|
||||||
|
|
||||||
|
@ -1772,6 +1794,12 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
purges which is reported from either PAL_VM_SUMMARY or
|
purges which is reported from either PAL_VM_SUMMARY or
|
||||||
SAL PALO.
|
SAL PALO.
|
||||||
|
|
||||||
|
nr_cpus= [SMP] Maximum number of processors that an SMP kernel
|
||||||
|
could support. nr_cpus=n : n >= 1 limits the kernel to
|
||||||
|
supporting 'n' processors. Later in runtime you can not
|
||||||
|
use hotplug cpu feature to put more cpu back to online.
|
||||||
|
just like you compile the kernel NR_CPUS=n
|
||||||
|
|
||||||
nr_uarts= [SERIAL] maximum number of UARTs to be registered.
|
nr_uarts= [SERIAL] maximum number of UARTs to be registered.
|
||||||
|
|
||||||
numa_zonelist_order= [KNL, BOOT] Select zonelist order for NUMA.
|
numa_zonelist_order= [KNL, BOOT] Select zonelist order for NUMA.
|
||||||
|
@ -1939,8 +1967,12 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
IRQ routing is enabled.
|
IRQ routing is enabled.
|
||||||
noacpi [X86] Do not use ACPI for IRQ routing
|
noacpi [X86] Do not use ACPI for IRQ routing
|
||||||
or for PCI scanning.
|
or for PCI scanning.
|
||||||
use_crs [X86] Use _CRS for PCI resource
|
use_crs [X86] Use PCI host bridge window information
|
||||||
allocation.
|
from ACPI. On BIOSes from 2008 or later, this
|
||||||
|
is enabled by default. If you need to use this,
|
||||||
|
please report a bug.
|
||||||
|
nocrs [X86] Ignore PCI host bridge windows from ACPI.
|
||||||
|
If you need to use this, please report a bug.
|
||||||
routeirq Do IRQ routing for all PCI devices.
|
routeirq Do IRQ routing for all PCI devices.
|
||||||
This is normally done in pci_enable_device(),
|
This is normally done in pci_enable_device(),
|
||||||
so this option is a temporary workaround
|
so this option is a temporary workaround
|
||||||
|
@ -1989,6 +2021,14 @@ 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.
|
force Enable ASPM even on devices that claim not to support it.
|
||||||
WARNING: Forcing ASPM on may cause system lockups.
|
WARNING: Forcing ASPM on may cause system lockups.
|
||||||
|
|
||||||
|
pcie_pme= [PCIE,PM] Native PCIe PME signaling options:
|
||||||
|
off Do not use native PCIe PME signaling.
|
||||||
|
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).
|
||||||
|
|
||||||
pcmv= [HW,PCMCIA] BadgePAD 4
|
pcmv= [HW,PCMCIA] BadgePAD 4
|
||||||
|
|
||||||
pd. [PARIDE]
|
pd. [PARIDE]
|
||||||
|
@ -2694,6 +2734,13 @@ and is between 256 and 4096 characters. It is defined in the file
|
||||||
medium is write-protected).
|
medium is write-protected).
|
||||||
Example: quirks=0419:aaf5:rl,0421:0433:rc
|
Example: quirks=0419:aaf5:rl,0421:0433:rc
|
||||||
|
|
||||||
|
userpte=
|
||||||
|
[X86] Flags controlling user PTE allocations.
|
||||||
|
|
||||||
|
nohigh = do not allocate PTE pages in
|
||||||
|
HIGHMEM regardless of setting
|
||||||
|
of CONFIG_HIGHPTE.
|
||||||
|
|
||||||
vdso= [X86,SH]
|
vdso= [X86,SH]
|
||||||
vdso=2: enable compat VDSO (default with COMPAT_VDSO)
|
vdso=2: enable compat VDSO (default with COMPAT_VDSO)
|
||||||
vdso=1: enable VDSO (default)
|
vdso=1: enable VDSO (default)
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
Title : Kernel Probes (Kprobes)
|
Title : Kernel Probes (Kprobes)
|
||||||
Authors : Jim Keniston <jkenisto@us.ibm.com>
|
Authors : Jim Keniston <jkenisto@us.ibm.com>
|
||||||
: Prasanna S Panchamukhi <prasanna@in.ibm.com>
|
: Prasanna S Panchamukhi <prasanna.panchamukhi@gmail.com>
|
||||||
|
: Masami Hiramatsu <mhiramat@redhat.com>
|
||||||
|
|
||||||
CONTENTS
|
CONTENTS
|
||||||
|
|
||||||
|
@ -15,6 +16,7 @@ CONTENTS
|
||||||
9. Jprobes Example
|
9. Jprobes Example
|
||||||
10. Kretprobes Example
|
10. Kretprobes Example
|
||||||
Appendix A: The kprobes debugfs interface
|
Appendix A: The kprobes debugfs interface
|
||||||
|
Appendix B: The kprobes sysctl interface
|
||||||
|
|
||||||
1. Concepts: Kprobes, Jprobes, Return Probes
|
1. Concepts: Kprobes, Jprobes, Return Probes
|
||||||
|
|
||||||
|
@ -42,13 +44,13 @@ registration/unregistration of a group of *probes. These functions
|
||||||
can speed up unregistration process when you have to unregister
|
can speed up unregistration process when you have to unregister
|
||||||
a lot of probes at once.
|
a lot of probes at once.
|
||||||
|
|
||||||
The next three subsections explain how the different types of
|
The next four subsections explain how the different types of
|
||||||
probes work. They explain certain things that you'll need to
|
probes work and how jump optimization works. They explain certain
|
||||||
know in order to make the best use of Kprobes -- e.g., the
|
things that you'll need to know in order to make the best use of
|
||||||
difference between a pre_handler and a post_handler, and how
|
Kprobes -- e.g., the difference between a pre_handler and
|
||||||
to use the maxactive and nmissed fields of a kretprobe. But
|
a post_handler, and how to use the maxactive and nmissed fields of
|
||||||
if you're in a hurry to start using Kprobes, you can skip ahead
|
a kretprobe. But if you're in a hurry to start using Kprobes, you
|
||||||
to section 2.
|
can skip ahead to section 2.
|
||||||
|
|
||||||
1.1 How Does a Kprobe Work?
|
1.1 How Does a Kprobe Work?
|
||||||
|
|
||||||
|
@ -161,13 +163,125 @@ In case probed function is entered but there is no kretprobe_instance
|
||||||
object available, then in addition to incrementing the nmissed count,
|
object available, then in addition to incrementing the nmissed count,
|
||||||
the user entry_handler invocation is also skipped.
|
the user entry_handler invocation is also skipped.
|
||||||
|
|
||||||
|
1.4 How Does Jump Optimization Work?
|
||||||
|
|
||||||
|
If you configured your kernel with CONFIG_OPTPROBES=y (currently
|
||||||
|
this option is supported on x86/x86-64, non-preemptive kernel) and
|
||||||
|
the "debug.kprobes_optimization" kernel parameter is set to 1 (see
|
||||||
|
sysctl(8)), Kprobes tries to reduce probe-hit overhead by using a jump
|
||||||
|
instruction instead of a breakpoint instruction at each probepoint.
|
||||||
|
|
||||||
|
1.4.1 Init a Kprobe
|
||||||
|
|
||||||
|
When a probe is registered, before attempting this optimization,
|
||||||
|
Kprobes inserts an ordinary, breakpoint-based kprobe at the specified
|
||||||
|
address. So, even if it's not possible to optimize this particular
|
||||||
|
probepoint, there'll be a probe there.
|
||||||
|
|
||||||
|
1.4.2 Safety Check
|
||||||
|
|
||||||
|
Before optimizing a probe, Kprobes performs the following safety checks:
|
||||||
|
|
||||||
|
- Kprobes verifies that the region that will be replaced by the jump
|
||||||
|
instruction (the "optimized region") lies entirely within one function.
|
||||||
|
(A jump instruction is multiple bytes, and so may overlay multiple
|
||||||
|
instructions.)
|
||||||
|
|
||||||
|
- Kprobes analyzes the entire function and verifies that there is no
|
||||||
|
jump into the optimized region. Specifically:
|
||||||
|
- the function contains no indirect jump;
|
||||||
|
- the function contains no instruction that causes an exception (since
|
||||||
|
the fixup code triggered by the exception could jump back into the
|
||||||
|
optimized region -- Kprobes checks the exception tables to verify this);
|
||||||
|
and
|
||||||
|
- there is no near jump to the optimized region (other than to the first
|
||||||
|
byte).
|
||||||
|
|
||||||
|
- For each instruction in the optimized region, Kprobes verifies that
|
||||||
|
the instruction can be executed out of line.
|
||||||
|
|
||||||
|
1.4.3 Preparing Detour Buffer
|
||||||
|
|
||||||
|
Next, Kprobes prepares a "detour" buffer, which contains the following
|
||||||
|
instruction sequence:
|
||||||
|
- code to push the CPU's registers (emulating a breakpoint trap)
|
||||||
|
- a call to the trampoline code which calls user's probe handlers.
|
||||||
|
- code to restore registers
|
||||||
|
- the instructions from the optimized region
|
||||||
|
- a jump back to the original execution path.
|
||||||
|
|
||||||
|
1.4.4 Pre-optimization
|
||||||
|
|
||||||
|
After preparing the detour buffer, Kprobes verifies that none of the
|
||||||
|
following situations exist:
|
||||||
|
- The probe has either a break_handler (i.e., it's a jprobe) or a
|
||||||
|
post_handler.
|
||||||
|
- Other instructions in the optimized region are probed.
|
||||||
|
- The probe is disabled.
|
||||||
|
In any of the above cases, Kprobes won't start optimizing the probe.
|
||||||
|
Since these are temporary situations, Kprobes tries to start
|
||||||
|
optimizing it again if the situation is changed.
|
||||||
|
|
||||||
|
If the kprobe can be optimized, Kprobes enqueues the kprobe to an
|
||||||
|
optimizing list, and kicks the kprobe-optimizer workqueue to optimize
|
||||||
|
it. If the to-be-optimized probepoint is hit before being optimized,
|
||||||
|
Kprobes returns control to the original instruction path by setting
|
||||||
|
the CPU's instruction pointer to the copied code in the detour buffer
|
||||||
|
-- thus at least avoiding the single-step.
|
||||||
|
|
||||||
|
1.4.5 Optimization
|
||||||
|
|
||||||
|
The Kprobe-optimizer doesn't insert the jump instruction immediately;
|
||||||
|
rather, it calls synchronize_sched() for safety first, because it's
|
||||||
|
possible for a CPU to be interrupted in the middle of executing the
|
||||||
|
optimized region(*). As you know, synchronize_sched() can ensure
|
||||||
|
that all interruptions that were active when synchronize_sched()
|
||||||
|
was called are done, but only if CONFIG_PREEMPT=n. So, this version
|
||||||
|
of kprobe optimization supports only kernels with CONFIG_PREEMPT=n.(**)
|
||||||
|
|
||||||
|
After that, the Kprobe-optimizer calls stop_machine() to replace
|
||||||
|
the optimized region with a jump instruction to the detour buffer,
|
||||||
|
using text_poke_smp().
|
||||||
|
|
||||||
|
1.4.6 Unoptimization
|
||||||
|
|
||||||
|
When an optimized kprobe is unregistered, disabled, or blocked by
|
||||||
|
another kprobe, it will be unoptimized. If this happens before
|
||||||
|
the optimization is complete, the kprobe is just dequeued from the
|
||||||
|
optimized list. If the optimization has been done, the jump is
|
||||||
|
replaced with the original code (except for an int3 breakpoint in
|
||||||
|
the first byte) by using text_poke_smp().
|
||||||
|
|
||||||
|
(*)Please imagine that the 2nd instruction is interrupted and then
|
||||||
|
the optimizer replaces the 2nd instruction with the jump *address*
|
||||||
|
while the interrupt handler is running. When the interrupt
|
||||||
|
returns to original address, there is no valid instruction,
|
||||||
|
and it causes an unexpected result.
|
||||||
|
|
||||||
|
(**)This optimization-safety checking may be replaced with the
|
||||||
|
stop-machine method that ksplice uses for supporting a CONFIG_PREEMPT=y
|
||||||
|
kernel.
|
||||||
|
|
||||||
|
NOTE for geeks:
|
||||||
|
The jump optimization changes the kprobe's pre_handler behavior.
|
||||||
|
Without optimization, the pre_handler can change the kernel's execution
|
||||||
|
path by changing regs->ip and returning 1. However, when the probe
|
||||||
|
is optimized, that modification is ignored. Thus, if you want to
|
||||||
|
tweak the kernel's execution path, you need to suppress optimization,
|
||||||
|
using one of the following techniques:
|
||||||
|
- Specify an empty function for the kprobe's post_handler or break_handler.
|
||||||
|
or
|
||||||
|
- Config CONFIG_OPTPROBES=n.
|
||||||
|
or
|
||||||
|
- Execute 'sysctl -w debug.kprobes_optimization=n'
|
||||||
|
|
||||||
2. Architectures Supported
|
2. Architectures Supported
|
||||||
|
|
||||||
Kprobes, jprobes, and return probes are implemented on the following
|
Kprobes, jprobes, and return probes are implemented on the following
|
||||||
architectures:
|
architectures:
|
||||||
|
|
||||||
- i386
|
- i386 (Supports jump optimization)
|
||||||
- x86_64 (AMD-64, EM64T)
|
- x86_64 (AMD-64, EM64T) (Supports jump optimization)
|
||||||
- ppc64
|
- ppc64
|
||||||
- ia64 (Does not support probes on instruction slot1.)
|
- ia64 (Does not support probes on instruction slot1.)
|
||||||
- sparc64 (Return probes not yet implemented.)
|
- sparc64 (Return probes not yet implemented.)
|
||||||
|
@ -193,6 +307,10 @@ it useful to "Compile the kernel with debug info" (CONFIG_DEBUG_INFO),
|
||||||
so you can use "objdump -d -l vmlinux" to see the source-to-object
|
so you can use "objdump -d -l vmlinux" to see the source-to-object
|
||||||
code mapping.
|
code mapping.
|
||||||
|
|
||||||
|
If you want to reduce probing overhead, set "Kprobes jump optimization
|
||||||
|
support" (CONFIG_OPTPROBES) to "y". You can find this option under the
|
||||||
|
"Kprobes" line.
|
||||||
|
|
||||||
4. API Reference
|
4. API Reference
|
||||||
|
|
||||||
The Kprobes API includes a "register" function and an "unregister"
|
The Kprobes API includes a "register" function and an "unregister"
|
||||||
|
@ -389,7 +507,10 @@ the probe which has been registered.
|
||||||
|
|
||||||
Kprobes allows multiple probes at the same address. Currently,
|
Kprobes allows multiple probes at the same address. Currently,
|
||||||
however, there cannot be multiple jprobes on the same function at
|
however, there cannot be multiple jprobes on the same function at
|
||||||
the same time.
|
the same time. Also, a probepoint for which there is a jprobe or
|
||||||
|
a post_handler cannot be optimized. So if you install a jprobe,
|
||||||
|
or a kprobe with a post_handler, at an optimized probepoint, the
|
||||||
|
probepoint will be unoptimized automatically.
|
||||||
|
|
||||||
In general, you can install a probe anywhere in the kernel.
|
In general, you can install a probe anywhere in the kernel.
|
||||||
In particular, you can probe interrupt handlers. Known exceptions
|
In particular, you can probe interrupt handlers. Known exceptions
|
||||||
|
@ -453,6 +574,38 @@ reason, Kprobes doesn't support return probes (or kprobes or jprobes)
|
||||||
on the x86_64 version of __switch_to(); the registration functions
|
on the x86_64 version of __switch_to(); the registration functions
|
||||||
return -EINVAL.
|
return -EINVAL.
|
||||||
|
|
||||||
|
On x86/x86-64, since the Jump Optimization of Kprobes modifies
|
||||||
|
instructions widely, there are some limitations to optimization. To
|
||||||
|
explain it, we introduce some terminology. Imagine a 3-instruction
|
||||||
|
sequence consisting of a two 2-byte instructions and one 3-byte
|
||||||
|
instruction.
|
||||||
|
|
||||||
|
IA
|
||||||
|
|
|
||||||
|
[-2][-1][0][1][2][3][4][5][6][7]
|
||||||
|
[ins1][ins2][ ins3 ]
|
||||||
|
[<- DCR ->]
|
||||||
|
[<- JTPR ->]
|
||||||
|
|
||||||
|
ins1: 1st Instruction
|
||||||
|
ins2: 2nd Instruction
|
||||||
|
ins3: 3rd Instruction
|
||||||
|
IA: Insertion Address
|
||||||
|
JTPR: Jump Target Prohibition Region
|
||||||
|
DCR: Detoured Code Region
|
||||||
|
|
||||||
|
The instructions in DCR are copied to the out-of-line buffer
|
||||||
|
of the kprobe, because the bytes in DCR are replaced by
|
||||||
|
a 5-byte jump instruction. So there are several limitations.
|
||||||
|
|
||||||
|
a) The instructions in DCR must be relocatable.
|
||||||
|
b) The instructions in DCR must not include a call instruction.
|
||||||
|
c) JTPR must not be targeted by any jump or call instruction.
|
||||||
|
d) DCR must not straddle the border betweeen functions.
|
||||||
|
|
||||||
|
Anyway, these limitations are checked by the in-kernel instruction
|
||||||
|
decoder, so you don't need to worry about that.
|
||||||
|
|
||||||
6. Probe Overhead
|
6. Probe Overhead
|
||||||
|
|
||||||
On a typical CPU in use in 2005, a kprobe hit takes 0.5 to 1.0
|
On a typical CPU in use in 2005, a kprobe hit takes 0.5 to 1.0
|
||||||
|
@ -476,6 +629,19 @@ k = 0.49 usec; j = 0.76; r = 0.80; kr = 0.82; jr = 1.07
|
||||||
ppc64: POWER5 (gr), 1656 MHz (SMT disabled, 1 virtual CPU per physical CPU)
|
ppc64: POWER5 (gr), 1656 MHz (SMT disabled, 1 virtual CPU per physical CPU)
|
||||||
k = 0.77 usec; j = 1.31; r = 1.26; kr = 1.45; jr = 1.99
|
k = 0.77 usec; j = 1.31; r = 1.26; kr = 1.45; jr = 1.99
|
||||||
|
|
||||||
|
6.1 Optimized Probe Overhead
|
||||||
|
|
||||||
|
Typically, an optimized kprobe hit takes 0.07 to 0.1 microseconds to
|
||||||
|
process. Here are sample overhead figures (in usec) for x86 architectures.
|
||||||
|
k = unoptimized kprobe, b = boosted (single-step skipped), o = optimized kprobe,
|
||||||
|
r = unoptimized kretprobe, rb = boosted kretprobe, ro = optimized kretprobe.
|
||||||
|
|
||||||
|
i386: Intel(R) Xeon(R) E5410, 2.33GHz, 4656.90 bogomips
|
||||||
|
k = 0.80 usec; b = 0.33; o = 0.05; r = 1.10; rb = 0.61; ro = 0.33
|
||||||
|
|
||||||
|
x86-64: Intel(R) Xeon(R) E5410, 2.33GHz, 4656.90 bogomips
|
||||||
|
k = 0.99 usec; b = 0.43; o = 0.06; r = 1.24; rb = 0.68; ro = 0.30
|
||||||
|
|
||||||
7. TODO
|
7. TODO
|
||||||
|
|
||||||
a. SystemTap (http://sourceware.org/systemtap): Provides a simplified
|
a. SystemTap (http://sourceware.org/systemtap): Provides a simplified
|
||||||
|
@ -523,7 +689,8 @@ is also specified. Following columns show probe status. If the probe is on
|
||||||
a virtual address that is no longer valid (module init sections, module
|
a virtual address that is no longer valid (module init sections, module
|
||||||
virtual addresses that correspond to modules that've been unloaded),
|
virtual addresses that correspond to modules that've been unloaded),
|
||||||
such probes are marked with [GONE]. If the probe is temporarily disabled,
|
such probes are marked with [GONE]. If the probe is temporarily disabled,
|
||||||
such probes are marked with [DISABLED].
|
such probes are marked with [DISABLED]. If the probe is optimized, it is
|
||||||
|
marked with [OPTIMIZED].
|
||||||
|
|
||||||
/sys/kernel/debug/kprobes/enabled: Turn kprobes ON/OFF forcibly.
|
/sys/kernel/debug/kprobes/enabled: Turn kprobes ON/OFF forcibly.
|
||||||
|
|
||||||
|
@ -533,3 +700,19 @@ registered probes will be disarmed, till such time a "1" is echoed to this
|
||||||
file. Note that this knob just disarms and arms all kprobes and doesn't
|
file. Note that this knob just disarms and arms all kprobes and doesn't
|
||||||
change each probe's disabling state. This means that disabled kprobes (marked
|
change each probe's disabling state. This means that disabled kprobes (marked
|
||||||
[DISABLED]) will be not enabled if you turn ON all kprobes by this knob.
|
[DISABLED]) will be not enabled if you turn ON all kprobes by this knob.
|
||||||
|
|
||||||
|
|
||||||
|
Appendix B: The kprobes sysctl interface
|
||||||
|
|
||||||
|
/proc/sys/debug/kprobes-optimization: Turn kprobes optimization ON/OFF.
|
||||||
|
|
||||||
|
When CONFIG_OPTPROBES=y, this sysctl interface appears and it provides
|
||||||
|
a knob to globally and forcibly turn jump optimization (see section
|
||||||
|
1.4) ON or OFF. By default, jump optimization is allowed (ON).
|
||||||
|
If you echo "0" to this file or set "debug.kprobes_optimization" to
|
||||||
|
0 via sysctl, all optimized probes will be unoptimized, and any new
|
||||||
|
probes registered after that will not be optimized. Note that this
|
||||||
|
knob *changes* the optimized state. This means that optimized probes
|
||||||
|
(marked [OPTIMIZED]) will be unoptimized ([OPTIMIZED] tag will be
|
||||||
|
removed). If the knob is turned on, they will be optimized again.
|
||||||
|
|
||||||
|
|
|
@ -650,6 +650,10 @@ LCD, CRT or DVI (if available). The following commands are available:
|
||||||
echo expand_toggle > /proc/acpi/ibm/video
|
echo expand_toggle > /proc/acpi/ibm/video
|
||||||
echo video_switch > /proc/acpi/ibm/video
|
echo video_switch > /proc/acpi/ibm/video
|
||||||
|
|
||||||
|
NOTE: Access to this feature is restricted to processes owning the
|
||||||
|
CAP_SYS_ADMIN capability for safety reasons, as it can interact badly
|
||||||
|
enough with some versions of X.org to crash it.
|
||||||
|
|
||||||
Each video output device can be enabled or disabled individually.
|
Each video output device can be enabled or disabled individually.
|
||||||
Reading /proc/acpi/ibm/video shows the status of each device.
|
Reading /proc/acpi/ibm/video shows the status of each device.
|
||||||
|
|
||||||
|
|
|
@ -34,7 +34,6 @@
|
||||||
#include <sys/uio.h>
|
#include <sys/uio.h>
|
||||||
#include <termios.h>
|
#include <termios.h>
|
||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
#include <zlib.h>
|
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <sched.h>
|
#include <sched.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
|
|
|
@ -32,6 +32,8 @@ cs89x0.txt
|
||||||
- the Crystal LAN (CS8900/20-based) Ethernet ISA adapter driver
|
- the Crystal LAN (CS8900/20-based) Ethernet ISA adapter driver
|
||||||
cxacru.txt
|
cxacru.txt
|
||||||
- Conexant AccessRunner USB ADSL Modem
|
- Conexant AccessRunner USB ADSL Modem
|
||||||
|
cxacru-cf.py
|
||||||
|
- Conexant AccessRunner USB ADSL Modem configuration file parser
|
||||||
de4x5.txt
|
de4x5.txt
|
||||||
- the Digital EtherWORKS DE4?? and DE5?? PCI Ethernet driver
|
- the Digital EtherWORKS DE4?? and DE5?? PCI Ethernet driver
|
||||||
decnet.txt
|
decnet.txt
|
||||||
|
|
48
Documentation/networking/cxacru-cf.py
Normal file
48
Documentation/networking/cxacru-cf.py
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
#!/usr/bin/env python
|
||||||
|
# Copyright 2009 Simon Arlott
|
||||||
|
#
|
||||||
|
# This program is free software; you can redistribute it and/or modify it
|
||||||
|
# under the terms of the GNU General Public License as published by the Free
|
||||||
|
# Software Foundation; either version 2 of the License, or (at your option)
|
||||||
|
# any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful, but WITHOUT
|
||||||
|
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
|
# more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License along with
|
||||||
|
# this program; if not, write to the Free Software Foundation, Inc., 59
|
||||||
|
# Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
#
|
||||||
|
# Usage: cxacru-cf.py < cxacru-cf.bin
|
||||||
|
# Output: values string suitable for the sysfs adsl_config attribute
|
||||||
|
#
|
||||||
|
# Warning: cxacru-cf.bin with MD5 hash cdbac2689969d5ed5d4850f117702110
|
||||||
|
# contains mis-aligned values which will stop the modem from being able
|
||||||
|
# to make a connection. If the first and last two bytes are removed then
|
||||||
|
# the values become valid, but the modulation will be forced to ANSI
|
||||||
|
# T1.413 only which may not be appropriate.
|
||||||
|
#
|
||||||
|
# The original binary format is a packed list of le32 values.
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import struct
|
||||||
|
|
||||||
|
i = 0
|
||||||
|
while True:
|
||||||
|
buf = sys.stdin.read(4)
|
||||||
|
|
||||||
|
if len(buf) == 0:
|
||||||
|
break
|
||||||
|
elif len(buf) != 4:
|
||||||
|
sys.stdout.write("\n")
|
||||||
|
sys.stderr.write("Error: read {0} not 4 bytes\n".format(len(buf)))
|
||||||
|
sys.exit(1)
|
||||||
|
|
||||||
|
if i > 0:
|
||||||
|
sys.stdout.write(" ")
|
||||||
|
sys.stdout.write("{0:x}={1}".format(i, struct.unpack("<I", buf)[0]))
|
||||||
|
i += 1
|
||||||
|
|
||||||
|
sys.stdout.write("\n")
|
|
@ -4,6 +4,12 @@ While it is capable of managing/maintaining the ADSL connection without the
|
||||||
module loaded, the device will sometimes stop responding after unloading the
|
module loaded, the device will sometimes stop responding after unloading the
|
||||||
driver and it is necessary to unplug/remove power to the device to fix this.
|
driver and it is necessary to unplug/remove power to the device to fix this.
|
||||||
|
|
||||||
|
Note: support for cxacru-cf.bin has been removed. It was not loaded correctly
|
||||||
|
so it had no effect on the device configuration. Fixing it could have stopped
|
||||||
|
existing devices working when an invalid configuration is supplied.
|
||||||
|
|
||||||
|
There is a script cxacru-cf.py to convert an existing file to the sysfs form.
|
||||||
|
|
||||||
Detected devices will appear as ATM devices named "cxacru". In /sys/class/atm/
|
Detected devices will appear as ATM devices named "cxacru". In /sys/class/atm/
|
||||||
these are directories named cxacruN where N is the device number. A symlink
|
these are directories named cxacruN where N is the device number. A symlink
|
||||||
named device points to the USB interface device's directory which contains
|
named device points to the USB interface device's directory which contains
|
||||||
|
@ -15,6 +21,15 @@ several sysfs attribute files for retrieving device statistics:
|
||||||
* adsl_headend_environment
|
* adsl_headend_environment
|
||||||
Information about the remote headend.
|
Information about the remote headend.
|
||||||
|
|
||||||
|
* adsl_config
|
||||||
|
Configuration writing interface.
|
||||||
|
Write parameters in hexadecimal format <index>=<value>,
|
||||||
|
separated by whitespace, e.g.:
|
||||||
|
"1=0 a=5"
|
||||||
|
Up to 7 parameters at a time will be sent and the modem will restart
|
||||||
|
the ADSL connection when any value is set. These are logged for future
|
||||||
|
reference.
|
||||||
|
|
||||||
* downstream_attenuation (dB)
|
* downstream_attenuation (dB)
|
||||||
* downstream_bits_per_frame
|
* downstream_bits_per_frame
|
||||||
* downstream_rate (kbps)
|
* downstream_rate (kbps)
|
||||||
|
@ -61,6 +76,7 @@ several sysfs attribute files for retrieving device statistics:
|
||||||
* mac_address
|
* mac_address
|
||||||
|
|
||||||
* modulation
|
* modulation
|
||||||
|
"" (when not connected)
|
||||||
"ANSI T1.413"
|
"ANSI T1.413"
|
||||||
"ITU-T G.992.1 (G.DMT)"
|
"ITU-T G.992.1 (G.DMT)"
|
||||||
"ITU-T G.992.2 (G.LITE)"
|
"ITU-T G.992.2 (G.LITE)"
|
||||||
|
|
|
@ -58,8 +58,10 @@ DCCP_SOCKOPT_GET_CUR_MPS is read-only and retrieves the current maximum packet
|
||||||
size (application payload size) in bytes, see RFC 4340, section 14.
|
size (application payload size) in bytes, see RFC 4340, section 14.
|
||||||
|
|
||||||
DCCP_SOCKOPT_AVAILABLE_CCIDS is also read-only and returns the list of CCIDs
|
DCCP_SOCKOPT_AVAILABLE_CCIDS is also read-only and returns the list of CCIDs
|
||||||
supported by the endpoint (see include/linux/dccp.h for symbolic constants).
|
supported by the endpoint. The option value is an array of type uint8_t whose
|
||||||
The caller needs to provide a sufficiently large (> 2) array of type uint8_t.
|
size is passed as option length. The minimum array size is 4 elements, the
|
||||||
|
value returned in the optlen argument always reflects the true number of
|
||||||
|
built-in CCIDs.
|
||||||
|
|
||||||
DCCP_SOCKOPT_CCID is write-only and sets both the TX and RX CCIDs at the same
|
DCCP_SOCKOPT_CCID is write-only and sets both the TX and RX CCIDs at the same
|
||||||
time, combining the operation of the next two socket options. This option is
|
time, combining the operation of the next two socket options. This option is
|
||||||
|
|
|
@ -487,6 +487,30 @@ tcp_dma_copybreak - INTEGER
|
||||||
and CONFIG_NET_DMA is enabled.
|
and CONFIG_NET_DMA is enabled.
|
||||||
Default: 4096
|
Default: 4096
|
||||||
|
|
||||||
|
tcp_thin_linear_timeouts - BOOLEAN
|
||||||
|
Enable dynamic triggering of linear timeouts for thin streams.
|
||||||
|
If set, a check is performed upon retransmission by timeout to
|
||||||
|
determine if the stream is thin (less than 4 packets in flight).
|
||||||
|
As long as the stream is found to be thin, up to 6 linear
|
||||||
|
timeouts may be performed before exponential backoff mode is
|
||||||
|
initiated. This improves retransmission latency for
|
||||||
|
non-aggressive thin streams, often found to be time-dependent.
|
||||||
|
For more information on thin streams, see
|
||||||
|
Documentation/networking/tcp-thin.txt
|
||||||
|
Default: 0
|
||||||
|
|
||||||
|
tcp_thin_dupack - BOOLEAN
|
||||||
|
Enable dynamic triggering of retransmissions after one dupACK
|
||||||
|
for thin streams. If set, a check is performed upon reception
|
||||||
|
of a dupACK to determine if the stream is thin (less than 4
|
||||||
|
packets in flight). As long as the stream is found to be thin,
|
||||||
|
data is retransmitted on the first received dupACK. This
|
||||||
|
improves retransmission latency for non-aggressive thin
|
||||||
|
streams, often found to be time-dependent.
|
||||||
|
For more information on thin streams, see
|
||||||
|
Documentation/networking/tcp-thin.txt
|
||||||
|
Default: 0
|
||||||
|
|
||||||
UDP variables:
|
UDP variables:
|
||||||
|
|
||||||
udp_mem - vector of 3 INTEGERs: min, pressure, max
|
udp_mem - vector of 3 INTEGERs: min, pressure, max
|
||||||
|
@ -692,6 +716,25 @@ proxy_arp - BOOLEAN
|
||||||
conf/{all,interface}/proxy_arp is set to TRUE,
|
conf/{all,interface}/proxy_arp is set to TRUE,
|
||||||
it will be disabled otherwise
|
it will be disabled otherwise
|
||||||
|
|
||||||
|
proxy_arp_pvlan - BOOLEAN
|
||||||
|
Private VLAN proxy arp.
|
||||||
|
Basically allow proxy arp replies back to the same interface
|
||||||
|
(from which the ARP request/solicitation was received).
|
||||||
|
|
||||||
|
This is done to support (ethernet) switch features, like RFC
|
||||||
|
3069, where the individual ports are NOT allowed to
|
||||||
|
communicate with each other, but they are allowed to talk to
|
||||||
|
the upstream router. As described in RFC 3069, it is possible
|
||||||
|
to allow these hosts to communicate through the upstream
|
||||||
|
router by proxy_arp'ing. Don't need to be used together with
|
||||||
|
proxy_arp.
|
||||||
|
|
||||||
|
This technology is known by different names:
|
||||||
|
In RFC 3069 it is called VLAN Aggregation.
|
||||||
|
Cisco and Allied Telesyn call it Private VLAN.
|
||||||
|
Hewlett-Packard call it Source-Port filtering or port-isolation.
|
||||||
|
Ericsson call it MAC-Forced Forwarding (RFC Draft).
|
||||||
|
|
||||||
shared_media - BOOLEAN
|
shared_media - BOOLEAN
|
||||||
Send(router) or accept(host) RFC1620 shared media redirects.
|
Send(router) or accept(host) RFC1620 shared media redirects.
|
||||||
Overrides ip_secure_redirects.
|
Overrides ip_secure_redirects.
|
||||||
|
@ -833,9 +876,18 @@ arp_notify - BOOLEAN
|
||||||
or hardware address changes.
|
or hardware address changes.
|
||||||
|
|
||||||
arp_accept - BOOLEAN
|
arp_accept - BOOLEAN
|
||||||
Define behavior when gratuitous arp replies are received:
|
Define behavior for gratuitous ARP frames who's IP is not
|
||||||
0 - drop gratuitous arp frames
|
already present in the ARP table:
|
||||||
1 - accept gratuitous arp frames
|
0 - don't create new entries in the ARP table
|
||||||
|
1 - create new entries in the ARP table
|
||||||
|
|
||||||
|
Both replies and requests type gratuitous arp will trigger the
|
||||||
|
ARP table to be updated, if this setting is on.
|
||||||
|
|
||||||
|
If the ARP table already contains the IP address of the
|
||||||
|
gratuitous arp frame, the arp table will be updated regardless
|
||||||
|
if this setting is on or off.
|
||||||
|
|
||||||
|
|
||||||
app_solicit - INTEGER
|
app_solicit - INTEGER
|
||||||
The maximum number of probes to send to the user space ARP daemon
|
The maximum number of probes to send to the user space ARP daemon
|
||||||
|
@ -1074,10 +1126,10 @@ regen_max_retry - INTEGER
|
||||||
Default: 5
|
Default: 5
|
||||||
|
|
||||||
max_addresses - INTEGER
|
max_addresses - INTEGER
|
||||||
Number of maximum addresses per interface. 0 disables limitation.
|
Maximum number of autoconfigured addresses per interface. Setting
|
||||||
It is recommended not set too large value (or 0) because it would
|
to zero disables the limitation. It is not recommended to set this
|
||||||
be too easy way to crash kernel to allow to create too much of
|
value too large (or to zero) because it would be an easy way to
|
||||||
autoconfigured addresses.
|
crash the kernel by allowing too many addresses to be created.
|
||||||
Default: 16
|
Default: 16
|
||||||
|
|
||||||
disable_ipv6 - BOOLEAN
|
disable_ipv6 - BOOLEAN
|
||||||
|
|
90
Documentation/networking/ixgbevf.txt
Executable file
90
Documentation/networking/ixgbevf.txt
Executable file
|
@ -0,0 +1,90 @@
|
||||||
|
Linux* Base Driver for Intel(R) Network Connection
|
||||||
|
==================================================
|
||||||
|
|
||||||
|
November 24, 2009
|
||||||
|
|
||||||
|
Contents
|
||||||
|
========
|
||||||
|
|
||||||
|
- In This Release
|
||||||
|
- Identifying Your Adapter
|
||||||
|
- Known Issues/Troubleshooting
|
||||||
|
- Support
|
||||||
|
|
||||||
|
In This Release
|
||||||
|
===============
|
||||||
|
|
||||||
|
This file describes the ixgbevf Linux* Base Driver for Intel Network
|
||||||
|
Connection.
|
||||||
|
|
||||||
|
The ixgbevf driver supports 82599-based virtual function devices that can only
|
||||||
|
be activated on kernels with CONFIG_PCI_IOV enabled.
|
||||||
|
|
||||||
|
The ixgbevf driver supports virtual functions generated by the ixgbe driver
|
||||||
|
with a max_vfs value of 1 or greater.
|
||||||
|
|
||||||
|
The guest OS loading the ixgbevf driver must support MSI-X interrupts.
|
||||||
|
|
||||||
|
VLANs: There is a limit of a total of 32 shared VLANs to 1 or more VFs.
|
||||||
|
|
||||||
|
Identifying Your Adapter
|
||||||
|
========================
|
||||||
|
|
||||||
|
For more information on how to identify your adapter, go to the Adapter &
|
||||||
|
Driver ID Guide at:
|
||||||
|
|
||||||
|
http://support.intel.com/support/network/sb/CS-008441.htm
|
||||||
|
|
||||||
|
Known Issues/Troubleshooting
|
||||||
|
============================
|
||||||
|
|
||||||
|
Unloading Physical Function (PF) Driver Causes System Reboots When VM is
|
||||||
|
Running and VF is Loaded on the VM
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
Do not unload the PF driver (ixgbe) while VFs are assigned to guests.
|
||||||
|
|
||||||
|
Support
|
||||||
|
=======
|
||||||
|
|
||||||
|
For general information, go to the Intel support website at:
|
||||||
|
|
||||||
|
http://support.intel.com
|
||||||
|
|
||||||
|
or the Intel Wired Networking project hosted by Sourceforge at:
|
||||||
|
|
||||||
|
http://sourceforge.net/projects/e1000
|
||||||
|
|
||||||
|
If an issue is identified with the released source code on the supported
|
||||||
|
kernel with a supported adapter, email the specific information related
|
||||||
|
to the issue to e1000-devel@lists.sf.net
|
||||||
|
|
||||||
|
License
|
||||||
|
=======
|
||||||
|
|
||||||
|
Intel 10 Gigabit Linux driver.
|
||||||
|
Copyright(c) 1999 - 2009 Intel Corporation.
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify it
|
||||||
|
under the terms and conditions of the GNU General Public License,
|
||||||
|
version 2, as published by the Free Software Foundation.
|
||||||
|
|
||||||
|
This program is distributed in the hope it will be useful, but WITHOUT
|
||||||
|
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||||
|
more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License along with
|
||||||
|
this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
|
||||||
|
The full GNU General Public License is included in this distribution in
|
||||||
|
the file called "COPYING".
|
||||||
|
|
||||||
|
Trademarks
|
||||||
|
==========
|
||||||
|
|
||||||
|
Intel, Itanium, and Pentium are trademarks or registered trademarks of
|
||||||
|
Intel Corporation or its subsidiaries in the United States and other
|
||||||
|
countries.
|
||||||
|
|
||||||
|
* Other names and brands may be claimed as the property of others.
|
|
@ -2,7 +2,7 @@
|
||||||
+ ABSTRACT
|
+ ABSTRACT
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
This file documents the CONFIG_PACKET_MMAP option available with the PACKET
|
This file documents the mmap() facility available with the PACKET
|
||||||
socket interface on 2.4 and 2.6 kernels. This type of sockets is used for
|
socket interface on 2.4 and 2.6 kernels. This type of sockets is used for
|
||||||
capture network traffic with utilities like tcpdump or any other that needs
|
capture network traffic with utilities like tcpdump or any other that needs
|
||||||
raw access to network interface.
|
raw access to network interface.
|
||||||
|
@ -44,7 +44,7 @@ enabled. For transmission, check the MTU (Maximum Transmission Unit) used and
|
||||||
supported by devices of your network.
|
supported by devices of your network.
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
+ How to use CONFIG_PACKET_MMAP to improve capture process
|
+ How to use mmap() to improve capture process
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
From the user standpoint, you should use the higher level libpcap library, which
|
From the user standpoint, you should use the higher level libpcap library, which
|
||||||
|
@ -64,7 +64,7 @@ the low level details or want to improve libpcap by including PACKET_MMAP
|
||||||
support.
|
support.
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
+ How to use CONFIG_PACKET_MMAP directly to improve capture process
|
+ How to use mmap() directly to improve capture process
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
From the system calls stand point, the use of PACKET_MMAP involves
|
From the system calls stand point, the use of PACKET_MMAP involves
|
||||||
|
@ -105,7 +105,7 @@ also the mapping of the circular buffer in the user process and
|
||||||
the use of this buffer.
|
the use of this buffer.
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
+ How to use CONFIG_PACKET_MMAP directly to improve transmission process
|
+ How to use mmap() directly to improve transmission process
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
Transmission process is similar to capture as shown below.
|
Transmission process is similar to capture as shown below.
|
||||||
|
|
||||||
|
|
|
@ -188,3 +188,27 @@ Then in some part of your code after your wiphy has been registered:
|
||||||
&mydriver_jp_regdom.reg_rules[i],
|
&mydriver_jp_regdom.reg_rules[i],
|
||||||
sizeof(struct ieee80211_reg_rule));
|
sizeof(struct ieee80211_reg_rule));
|
||||||
regulatory_struct_hint(rd);
|
regulatory_struct_hint(rd);
|
||||||
|
|
||||||
|
Statically compiled regulatory database
|
||||||
|
---------------------------------------
|
||||||
|
|
||||||
|
In most situations the userland solution using CRDA as described
|
||||||
|
above is the preferred solution. However in some cases a set of
|
||||||
|
rules built into the kernel itself may be desirable. To account
|
||||||
|
for this situation, a configuration option has been provided
|
||||||
|
(i.e. CONFIG_CFG80211_INTERNAL_REGDB). With this option enabled,
|
||||||
|
the wireless database information contained in net/wireless/db.txt is
|
||||||
|
used to generate a data structure encoded in net/wireless/regdb.c.
|
||||||
|
That option also enables code in net/wireless/reg.c which queries
|
||||||
|
the data in regdb.c as an alternative to using CRDA.
|
||||||
|
|
||||||
|
The file net/wireless/db.txt should be kept up-to-date with the db.txt
|
||||||
|
file available in the git repository here:
|
||||||
|
|
||||||
|
git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-regdb.git
|
||||||
|
|
||||||
|
Again, most users in most situations should be using the CRDA package
|
||||||
|
provided with their distribution, and in most other situations users
|
||||||
|
should be building and using CRDA on their own rather than using
|
||||||
|
this option. If you are not absolutely sure that you should be using
|
||||||
|
CONFIG_CFG80211_INTERNAL_REGDB then _DO_NOT_USE_IT_.
|
||||||
|
|
47
Documentation/networking/tcp-thin.txt
Normal file
47
Documentation/networking/tcp-thin.txt
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
Thin-streams and TCP
|
||||||
|
====================
|
||||||
|
A wide range of Internet-based services that use reliable transport
|
||||||
|
protocols display what we call thin-stream properties. This means
|
||||||
|
that the application sends data with such a low rate that the
|
||||||
|
retransmission mechanisms of the transport protocol are not fully
|
||||||
|
effective. In time-dependent scenarios (like online games, control
|
||||||
|
systems, stock trading etc.) where the user experience depends
|
||||||
|
on the data delivery latency, packet loss can be devastating for
|
||||||
|
the service quality. Extreme latencies are caused by TCP's
|
||||||
|
dependency on the arrival of new data from the application to trigger
|
||||||
|
retransmissions effectively through fast retransmit instead of
|
||||||
|
waiting for long timeouts.
|
||||||
|
|
||||||
|
After analysing a large number of time-dependent interactive
|
||||||
|
applications, we have seen that they often produce thin streams
|
||||||
|
and also stay with this traffic pattern throughout its entire
|
||||||
|
lifespan. The combination of time-dependency and the fact that the
|
||||||
|
streams provoke high latencies when using TCP is unfortunate.
|
||||||
|
|
||||||
|
In order to reduce application-layer latency when packets are lost,
|
||||||
|
a set of mechanisms has been made, which address these latency issues
|
||||||
|
for thin streams. In short, if the kernel detects a thin stream,
|
||||||
|
the retransmission mechanisms are modified in the following manner:
|
||||||
|
|
||||||
|
1) If the stream is thin, fast retransmit on the first dupACK.
|
||||||
|
2) If the stream is thin, do not apply exponential backoff.
|
||||||
|
|
||||||
|
These enhancements are applied only if the stream is detected as
|
||||||
|
thin. This is accomplished by defining a threshold for the number
|
||||||
|
of packets in flight. If there are less than 4 packets in flight,
|
||||||
|
fast retransmissions can not be triggered, and the stream is prone
|
||||||
|
to experience high retransmission latencies.
|
||||||
|
|
||||||
|
Since these mechanisms are targeted at time-dependent applications,
|
||||||
|
they must be specifically activated by the application using the
|
||||||
|
TCP_THIN_LINEAR_TIMEOUTS and TCP_THIN_DUPACK IOCTLS or the
|
||||||
|
tcp_thin_linear_timeouts and tcp_thin_dupack sysctls. Both
|
||||||
|
modifications are turned off by default.
|
||||||
|
|
||||||
|
References
|
||||||
|
==========
|
||||||
|
More information on the modifications, as well as a wide range of
|
||||||
|
experimental data can be found here:
|
||||||
|
"Improving latency for interactive, thin-stream applications over
|
||||||
|
reliable transport"
|
||||||
|
http://simula.no/research/nd/publications/Simula.nd.477/simula_pdf_file
|
118
Documentation/pcmcia/locking.txt
Normal file
118
Documentation/pcmcia/locking.txt
Normal file
|
@ -0,0 +1,118 @@
|
||||||
|
This file explains the locking and exclusion scheme used in the PCCARD
|
||||||
|
and PCMCIA subsystems.
|
||||||
|
|
||||||
|
|
||||||
|
A) Overview, Locking Hierarchy:
|
||||||
|
===============================
|
||||||
|
|
||||||
|
pcmcia_socket_list_rwsem - protects only the list of sockets
|
||||||
|
- skt_mutex - serializes card insert / ejection
|
||||||
|
- ops_mutex - serializes socket operation
|
||||||
|
|
||||||
|
|
||||||
|
B) Exclusion
|
||||||
|
============
|
||||||
|
|
||||||
|
The following functions and callbacks to struct pcmcia_socket must
|
||||||
|
be called with "skt_mutex" held:
|
||||||
|
|
||||||
|
socket_detect_change()
|
||||||
|
send_event()
|
||||||
|
socket_reset()
|
||||||
|
socket_shutdown()
|
||||||
|
socket_setup()
|
||||||
|
socket_remove()
|
||||||
|
socket_insert()
|
||||||
|
socket_early_resume()
|
||||||
|
socket_late_resume()
|
||||||
|
socket_resume()
|
||||||
|
socket_suspend()
|
||||||
|
|
||||||
|
struct pcmcia_callback *callback
|
||||||
|
|
||||||
|
The following functions and callbacks to struct pcmcia_socket must
|
||||||
|
be called with "ops_mutex" held:
|
||||||
|
|
||||||
|
socket_reset()
|
||||||
|
socket_setup()
|
||||||
|
|
||||||
|
struct pccard_operations *ops
|
||||||
|
struct pccard_resource_ops *resource_ops;
|
||||||
|
|
||||||
|
Note that send_event() and struct pcmcia_callback *callback must not be
|
||||||
|
called with "ops_mutex" held.
|
||||||
|
|
||||||
|
|
||||||
|
C) Protection
|
||||||
|
=============
|
||||||
|
|
||||||
|
1. Global Data:
|
||||||
|
---------------
|
||||||
|
struct list_head pcmcia_socket_list;
|
||||||
|
|
||||||
|
protected by pcmcia_socket_list_rwsem;
|
||||||
|
|
||||||
|
|
||||||
|
2. Per-Socket Data:
|
||||||
|
-------------------
|
||||||
|
The resource_ops and their data are protected by ops_mutex.
|
||||||
|
|
||||||
|
The "main" struct pcmcia_socket is protected as follows (read-only fields
|
||||||
|
or single-use fields not mentioned):
|
||||||
|
|
||||||
|
- by pcmcia_socket_list_rwsem:
|
||||||
|
struct list_head socket_list;
|
||||||
|
|
||||||
|
- by thread_lock:
|
||||||
|
unsigned int thread_events;
|
||||||
|
|
||||||
|
- by skt_mutex:
|
||||||
|
u_int suspended_state;
|
||||||
|
void (*tune_bridge);
|
||||||
|
struct pcmcia_callback *callback;
|
||||||
|
int resume_status;
|
||||||
|
|
||||||
|
- by ops_mutex:
|
||||||
|
socket_state_t socket;
|
||||||
|
u_int state;
|
||||||
|
u_short lock_count;
|
||||||
|
pccard_mem_map cis_mem;
|
||||||
|
void __iomem *cis_virt;
|
||||||
|
struct { } irq;
|
||||||
|
io_window_t io[];
|
||||||
|
pccard_mem_map win[];
|
||||||
|
struct list_head cis_cache;
|
||||||
|
size_t fake_cis_len;
|
||||||
|
u8 *fake_cis;
|
||||||
|
u_int irq_mask;
|
||||||
|
void (*zoom_video);
|
||||||
|
int (*power_hook);
|
||||||
|
u8 resource...;
|
||||||
|
struct list_head devices_list;
|
||||||
|
u8 device_count;
|
||||||
|
struct pcmcia_state;
|
||||||
|
|
||||||
|
|
||||||
|
3. Per PCMCIA-device Data:
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
The "main" struct pcmcia_devie is protected as follows (read-only fields
|
||||||
|
or single-use fields not mentioned):
|
||||||
|
|
||||||
|
|
||||||
|
- by pcmcia_socket->ops_mutex:
|
||||||
|
struct list_head socket_device_list;
|
||||||
|
struct config_t *function_config;
|
||||||
|
u16 _irq:1;
|
||||||
|
u16 _io:1;
|
||||||
|
u16 _win:4;
|
||||||
|
u16 _locked:1;
|
||||||
|
u16 allow_func_id_match:1;
|
||||||
|
u16 suspended:1;
|
||||||
|
u16 _removed:1;
|
||||||
|
|
||||||
|
- by the PCMCIA driver:
|
||||||
|
io_req_t io;
|
||||||
|
irq_req_t irq;
|
||||||
|
config_req_t conf;
|
||||||
|
window_handle_t win;
|
53
Documentation/powerpc/dts-bindings/fsl/can.txt
Normal file
53
Documentation/powerpc/dts-bindings/fsl/can.txt
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
CAN Device Tree Bindings
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
(c) 2006-2009 Secret Lab Technologies Ltd
|
||||||
|
Grant Likely <grant.likely@secretlab.ca>
|
||||||
|
|
||||||
|
fsl,mpc5200-mscan nodes
|
||||||
|
-----------------------
|
||||||
|
In addition to the required compatible-, reg- and interrupt-properties, you can
|
||||||
|
also specify which clock source shall be used for the controller:
|
||||||
|
|
||||||
|
- fsl,mscan-clock-source : a string describing the clock source. Valid values
|
||||||
|
are: "ip" for ip bus clock
|
||||||
|
"ref" for reference clock (XTAL)
|
||||||
|
"ref" is default in case this property is not
|
||||||
|
present.
|
||||||
|
|
||||||
|
fsl,mpc5121-mscan nodes
|
||||||
|
-----------------------
|
||||||
|
In addition to the required compatible-, reg- and interrupt-properties, you can
|
||||||
|
also specify which clock source and divider shall be used for the controller:
|
||||||
|
|
||||||
|
- fsl,mscan-clock-source : a string describing the clock source. Valid values
|
||||||
|
are: "ip" for ip bus clock
|
||||||
|
"ref" for reference clock
|
||||||
|
"sys" for system clock
|
||||||
|
If this property is not present, an optimal CAN
|
||||||
|
clock source and frequency based on the system
|
||||||
|
clock will be selected. If this is not possible,
|
||||||
|
the reference clock will be used.
|
||||||
|
|
||||||
|
- fsl,mscan-clock-divider: for the reference and system clock, an additional
|
||||||
|
clock divider can be specified. By default, a
|
||||||
|
value of 1 is used.
|
||||||
|
|
||||||
|
Note that the MPC5121 Rev. 1 processor is not supported.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
can@1300 {
|
||||||
|
compatible = "fsl,mpc5121-mscan";
|
||||||
|
interrupts = <12 0x8>;
|
||||||
|
interrupt-parent = <&ipic>;
|
||||||
|
reg = <0x1300 0x80>;
|
||||||
|
};
|
||||||
|
|
||||||
|
can@1380 {
|
||||||
|
compatible = "fsl,mpc5121-mscan";
|
||||||
|
interrupts = <13 0x8>;
|
||||||
|
interrupt-parent = <&ipic>;
|
||||||
|
reg = <0x1380 0x80>;
|
||||||
|
fsl,mscan-clock-source = "ref";
|
||||||
|
fsl,mscan-clock-divider = <3>;
|
||||||
|
};
|
|
@ -44,21 +44,29 @@ Example:
|
||||||
compatible = "fsl,mpc8349-dma-channel", "fsl,elo-dma-channel";
|
compatible = "fsl,mpc8349-dma-channel", "fsl,elo-dma-channel";
|
||||||
cell-index = <0>;
|
cell-index = <0>;
|
||||||
reg = <0 0x80>;
|
reg = <0 0x80>;
|
||||||
|
interrupt-parent = <&ipic>;
|
||||||
|
interrupts = <71 8>;
|
||||||
};
|
};
|
||||||
dma-channel@80 {
|
dma-channel@80 {
|
||||||
compatible = "fsl,mpc8349-dma-channel", "fsl,elo-dma-channel";
|
compatible = "fsl,mpc8349-dma-channel", "fsl,elo-dma-channel";
|
||||||
cell-index = <1>;
|
cell-index = <1>;
|
||||||
reg = <0x80 0x80>;
|
reg = <0x80 0x80>;
|
||||||
|
interrupt-parent = <&ipic>;
|
||||||
|
interrupts = <71 8>;
|
||||||
};
|
};
|
||||||
dma-channel@100 {
|
dma-channel@100 {
|
||||||
compatible = "fsl,mpc8349-dma-channel", "fsl,elo-dma-channel";
|
compatible = "fsl,mpc8349-dma-channel", "fsl,elo-dma-channel";
|
||||||
cell-index = <2>;
|
cell-index = <2>;
|
||||||
reg = <0x100 0x80>;
|
reg = <0x100 0x80>;
|
||||||
|
interrupt-parent = <&ipic>;
|
||||||
|
interrupts = <71 8>;
|
||||||
};
|
};
|
||||||
dma-channel@180 {
|
dma-channel@180 {
|
||||||
compatible = "fsl,mpc8349-dma-channel", "fsl,elo-dma-channel";
|
compatible = "fsl,mpc8349-dma-channel", "fsl,elo-dma-channel";
|
||||||
cell-index = <3>;
|
cell-index = <3>;
|
||||||
reg = <0x180 0x80>;
|
reg = <0x180 0x80>;
|
||||||
|
interrupt-parent = <&ipic>;
|
||||||
|
interrupts = <71 8>;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
70
Documentation/powerpc/dts-bindings/fsl/mpc5121-psc.txt
Normal file
70
Documentation/powerpc/dts-bindings/fsl/mpc5121-psc.txt
Normal file
|
@ -0,0 +1,70 @@
|
||||||
|
MPC5121 PSC Device Tree Bindings
|
||||||
|
|
||||||
|
PSC in UART mode
|
||||||
|
----------------
|
||||||
|
|
||||||
|
For PSC in UART mode the needed PSC serial devices
|
||||||
|
are specified by fsl,mpc5121-psc-uart nodes in the
|
||||||
|
fsl,mpc5121-immr SoC node. Additionally the PSC FIFO
|
||||||
|
Controller node fsl,mpc5121-psc-fifo is requered there:
|
||||||
|
|
||||||
|
fsl,mpc5121-psc-uart nodes
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
Required properties :
|
||||||
|
- compatible : Should contain "fsl,mpc5121-psc-uart" and "fsl,mpc5121-psc"
|
||||||
|
- cell-index : Index of the PSC in hardware
|
||||||
|
- reg : Offset and length of the register set for the PSC device
|
||||||
|
- interrupts : <a b> where a is the interrupt number of the
|
||||||
|
PSC FIFO Controller and b is a field that represents an
|
||||||
|
encoding of the sense and level information for the interrupt.
|
||||||
|
- interrupt-parent : the phandle for the interrupt controller that
|
||||||
|
services interrupts for this device.
|
||||||
|
|
||||||
|
Recommended properties :
|
||||||
|
- fsl,rx-fifo-size : the size of the RX fifo slice (a multiple of 4)
|
||||||
|
- fsl,tx-fifo-size : the size of the TX fifo slice (a multiple of 4)
|
||||||
|
|
||||||
|
|
||||||
|
fsl,mpc5121-psc-fifo node
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
Required properties :
|
||||||
|
- compatible : Should be "fsl,mpc5121-psc-fifo"
|
||||||
|
- reg : Offset and length of the register set for the PSC
|
||||||
|
FIFO Controller
|
||||||
|
- interrupts : <a b> where a is the interrupt number of the
|
||||||
|
PSC FIFO Controller and b is a field that represents an
|
||||||
|
encoding of the sense and level information for the interrupt.
|
||||||
|
- interrupt-parent : the phandle for the interrupt controller that
|
||||||
|
services interrupts for this device.
|
||||||
|
|
||||||
|
|
||||||
|
Example for a board using PSC0 and PSC1 devices in serial mode:
|
||||||
|
|
||||||
|
serial@11000 {
|
||||||
|
compatible = "fsl,mpc5121-psc-uart", "fsl,mpc5121-psc";
|
||||||
|
cell-index = <0>;
|
||||||
|
reg = <0x11000 0x100>;
|
||||||
|
interrupts = <40 0x8>;
|
||||||
|
interrupt-parent = < &ipic >;
|
||||||
|
fsl,rx-fifo-size = <16>;
|
||||||
|
fsl,tx-fifo-size = <16>;
|
||||||
|
};
|
||||||
|
|
||||||
|
serial@11100 {
|
||||||
|
compatible = "fsl,mpc5121-psc-uart", "fsl,mpc5121-psc";
|
||||||
|
cell-index = <1>;
|
||||||
|
reg = <0x11100 0x100>;
|
||||||
|
interrupts = <40 0x8>;
|
||||||
|
interrupt-parent = < &ipic >;
|
||||||
|
fsl,rx-fifo-size = <16>;
|
||||||
|
fsl,tx-fifo-size = <16>;
|
||||||
|
};
|
||||||
|
|
||||||
|
pscfifo@11f00 {
|
||||||
|
compatible = "fsl,mpc5121-psc-fifo";
|
||||||
|
reg = <0x11f00 0x100>;
|
||||||
|
interrupts = <40 0x8>;
|
||||||
|
interrupt-parent = < &ipic >;
|
||||||
|
};
|
|
@ -195,11 +195,4 @@ External interrupts:
|
||||||
|
|
||||||
fsl,mpc5200-mscan nodes
|
fsl,mpc5200-mscan nodes
|
||||||
-----------------------
|
-----------------------
|
||||||
In addition to the required compatible-, reg- and interrupt-properites, you can
|
See file can.txt in this directory.
|
||||||
also specify which clock source shall be used for the controller:
|
|
||||||
|
|
||||||
- fsl,mscan-clock-source- a string describing the clock source. Valid values
|
|
||||||
are: "ip" for ip bus clock
|
|
||||||
"ref" for reference clock (XTAL)
|
|
||||||
"ref" is default in case this property is not
|
|
||||||
present.
|
|
||||||
|
|
|
@ -13,6 +13,11 @@ Required properties:
|
||||||
- interrupt-parent : the phandle for the interrupt controller that
|
- interrupt-parent : the phandle for the interrupt controller that
|
||||||
services interrupts for this device.
|
services interrupts for this device.
|
||||||
|
|
||||||
|
Optional properties:
|
||||||
|
- gpios : specifies the gpio pins to be used for chipselects.
|
||||||
|
The gpios will be referred to as reg = <index> in the SPI child nodes.
|
||||||
|
If unspecified, a single SPI device without a chip select can be used.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
spi@4c0 {
|
spi@4c0 {
|
||||||
cell-index = <0>;
|
cell-index = <0>;
|
||||||
|
@ -21,4 +26,6 @@ Example:
|
||||||
interrupts = <82 0>;
|
interrupts = <82 0>;
|
||||||
interrupt-parent = <700>;
|
interrupt-parent = <700>;
|
||||||
mode = "cpu";
|
mode = "cpu";
|
||||||
|
gpios = <&gpio 18 1 // device reg=<0>
|
||||||
|
&gpio 19 1>; // device reg=<1>
|
||||||
};
|
};
|
||||||
|
|
134
Documentation/powerpc/ptrace.txt
Normal file
134
Documentation/powerpc/ptrace.txt
Normal file
|
@ -0,0 +1,134 @@
|
||||||
|
GDB intends to support the following hardware debug features of BookE
|
||||||
|
processors:
|
||||||
|
|
||||||
|
4 hardware breakpoints (IAC)
|
||||||
|
2 hardware watchpoints (read, write and read-write) (DAC)
|
||||||
|
2 value conditions for the hardware watchpoints (DVC)
|
||||||
|
|
||||||
|
For that, we need to extend ptrace so that GDB can query and set these
|
||||||
|
resources. Since we're extending, we're trying to create an interface
|
||||||
|
that's extendable and that covers both BookE and server processors, so
|
||||||
|
that GDB doesn't need to special-case each of them. We added the
|
||||||
|
following 3 new ptrace requests.
|
||||||
|
|
||||||
|
1. PTRACE_PPC_GETHWDEBUGINFO
|
||||||
|
|
||||||
|
Query for GDB to discover the hardware debug features. The main info to
|
||||||
|
be returned here is the minimum alignment for the hardware watchpoints.
|
||||||
|
BookE processors don't have restrictions here, but server processors have
|
||||||
|
an 8-byte alignment restriction for hardware watchpoints. We'd like to avoid
|
||||||
|
adding special cases to GDB based on what it sees in AUXV.
|
||||||
|
|
||||||
|
Since we're at it, we added other useful info that the kernel can return to
|
||||||
|
GDB: this query will return the number of hardware breakpoints, hardware
|
||||||
|
watchpoints and whether it supports a range of addresses and a condition.
|
||||||
|
The query will fill the following structure provided by the requesting process:
|
||||||
|
|
||||||
|
struct ppc_debug_info {
|
||||||
|
unit32_t version;
|
||||||
|
unit32_t num_instruction_bps;
|
||||||
|
unit32_t num_data_bps;
|
||||||
|
unit32_t num_condition_regs;
|
||||||
|
unit32_t data_bp_alignment;
|
||||||
|
unit32_t sizeof_condition; /* size of the DVC register */
|
||||||
|
uint64_t features; /* bitmask of the individual flags */
|
||||||
|
};
|
||||||
|
|
||||||
|
features will have bits indicating whether there is support for:
|
||||||
|
|
||||||
|
#define PPC_DEBUG_FEATURE_INSN_BP_RANGE 0x1
|
||||||
|
#define PPC_DEBUG_FEATURE_INSN_BP_MASK 0x2
|
||||||
|
#define PPC_DEBUG_FEATURE_DATA_BP_RANGE 0x4
|
||||||
|
#define PPC_DEBUG_FEATURE_DATA_BP_MASK 0x8
|
||||||
|
|
||||||
|
2. PTRACE_SETHWDEBUG
|
||||||
|
|
||||||
|
Sets a hardware breakpoint or watchpoint, according to the provided structure:
|
||||||
|
|
||||||
|
struct ppc_hw_breakpoint {
|
||||||
|
uint32_t version;
|
||||||
|
#define PPC_BREAKPOINT_TRIGGER_EXECUTE 0x1
|
||||||
|
#define PPC_BREAKPOINT_TRIGGER_READ 0x2
|
||||||
|
#define PPC_BREAKPOINT_TRIGGER_WRITE 0x4
|
||||||
|
uint32_t trigger_type; /* only some combinations allowed */
|
||||||
|
#define PPC_BREAKPOINT_MODE_EXACT 0x0
|
||||||
|
#define PPC_BREAKPOINT_MODE_RANGE_INCLUSIVE 0x1
|
||||||
|
#define PPC_BREAKPOINT_MODE_RANGE_EXCLUSIVE 0x2
|
||||||
|
#define PPC_BREAKPOINT_MODE_MASK 0x3
|
||||||
|
uint32_t addr_mode; /* address match mode */
|
||||||
|
|
||||||
|
#define PPC_BREAKPOINT_CONDITION_MODE 0x3
|
||||||
|
#define PPC_BREAKPOINT_CONDITION_NONE 0x0
|
||||||
|
#define PPC_BREAKPOINT_CONDITION_AND 0x1
|
||||||
|
#define PPC_BREAKPOINT_CONDITION_EXACT 0x1 /* different name for the same thing as above */
|
||||||
|
#define PPC_BREAKPOINT_CONDITION_OR 0x2
|
||||||
|
#define PPC_BREAKPOINT_CONDITION_AND_OR 0x3
|
||||||
|
#define PPC_BREAKPOINT_CONDITION_BE_ALL 0x00ff0000 /* byte enable bits */
|
||||||
|
#define PPC_BREAKPOINT_CONDITION_BE(n) (1<<((n)+16))
|
||||||
|
uint32_t condition_mode; /* break/watchpoint condition flags */
|
||||||
|
|
||||||
|
uint64_t addr;
|
||||||
|
uint64_t addr2;
|
||||||
|
uint64_t condition_value;
|
||||||
|
};
|
||||||
|
|
||||||
|
A request specifies one event, not necessarily just one register to be set.
|
||||||
|
For instance, if the request is for a watchpoint with a condition, both the
|
||||||
|
DAC and DVC registers will be set in the same request.
|
||||||
|
|
||||||
|
With this GDB can ask for all kinds of hardware breakpoints and watchpoints
|
||||||
|
that the BookE supports. COMEFROM breakpoints available in server processors
|
||||||
|
are not contemplated, but that is out of the scope of this work.
|
||||||
|
|
||||||
|
ptrace will return an integer (handle) uniquely identifying the breakpoint or
|
||||||
|
watchpoint just created. This integer will be used in the PTRACE_DELHWDEBUG
|
||||||
|
request to ask for its removal. Return -ENOSPC if the requested breakpoint
|
||||||
|
can't be allocated on the registers.
|
||||||
|
|
||||||
|
Some examples of using the structure to:
|
||||||
|
|
||||||
|
- set a breakpoint in the first breakpoint register
|
||||||
|
|
||||||
|
p.version = PPC_DEBUG_CURRENT_VERSION;
|
||||||
|
p.trigger_type = PPC_BREAKPOINT_TRIGGER_EXECUTE;
|
||||||
|
p.addr_mode = PPC_BREAKPOINT_MODE_EXACT;
|
||||||
|
p.condition_mode = PPC_BREAKPOINT_CONDITION_NONE;
|
||||||
|
p.addr = (uint64_t) address;
|
||||||
|
p.addr2 = 0;
|
||||||
|
p.condition_value = 0;
|
||||||
|
|
||||||
|
- set a watchpoint which triggers on reads in the second watchpoint register
|
||||||
|
|
||||||
|
p.version = PPC_DEBUG_CURRENT_VERSION;
|
||||||
|
p.trigger_type = PPC_BREAKPOINT_TRIGGER_READ;
|
||||||
|
p.addr_mode = PPC_BREAKPOINT_MODE_EXACT;
|
||||||
|
p.condition_mode = PPC_BREAKPOINT_CONDITION_NONE;
|
||||||
|
p.addr = (uint64_t) address;
|
||||||
|
p.addr2 = 0;
|
||||||
|
p.condition_value = 0;
|
||||||
|
|
||||||
|
- set a watchpoint which triggers only with a specific value
|
||||||
|
|
||||||
|
p.version = PPC_DEBUG_CURRENT_VERSION;
|
||||||
|
p.trigger_type = PPC_BREAKPOINT_TRIGGER_READ;
|
||||||
|
p.addr_mode = PPC_BREAKPOINT_MODE_EXACT;
|
||||||
|
p.condition_mode = PPC_BREAKPOINT_CONDITION_AND | PPC_BREAKPOINT_CONDITION_BE_ALL;
|
||||||
|
p.addr = (uint64_t) address;
|
||||||
|
p.addr2 = 0;
|
||||||
|
p.condition_value = (uint64_t) condition;
|
||||||
|
|
||||||
|
- set a ranged hardware breakpoint
|
||||||
|
|
||||||
|
p.version = PPC_DEBUG_CURRENT_VERSION;
|
||||||
|
p.trigger_type = PPC_BREAKPOINT_TRIGGER_EXECUTE;
|
||||||
|
p.addr_mode = PPC_BREAKPOINT_MODE_RANGE_INCLUSIVE;
|
||||||
|
p.condition_mode = PPC_BREAKPOINT_CONDITION_NONE;
|
||||||
|
p.addr = (uint64_t) begin_range;
|
||||||
|
p.addr2 = (uint64_t) end_range;
|
||||||
|
p.condition_value = 0;
|
||||||
|
|
||||||
|
3. PTRACE_DELHWDEBUG
|
||||||
|
|
||||||
|
Takes an integer which identifies an existing breakpoint or watchpoint
|
||||||
|
(i.e., the value returned from PTRACE_SETHWDEBUG), and deletes the
|
||||||
|
corresponding breakpoint or watchpoint..
|
|
@ -87,6 +87,12 @@ Command line parameters
|
||||||
compatibility, by the device number in hexadecimal (0xabcd or abcd). Device
|
compatibility, by the device number in hexadecimal (0xabcd or abcd). Device
|
||||||
numbers given as 0xabcd will be interpreted as 0.0.abcd.
|
numbers given as 0xabcd will be interpreted as 0.0.abcd.
|
||||||
|
|
||||||
|
* /proc/cio_settle
|
||||||
|
|
||||||
|
A write request to this file is blocked until all queued cio actions are
|
||||||
|
handled. This will allow userspace to wait for pending work affecting
|
||||||
|
device availability after changing cio_ignore or the hardware configuration.
|
||||||
|
|
||||||
* For some of the information present in the /proc filesystem in 2.4 (namely,
|
* For some of the information present in the /proc filesystem in 2.4 (namely,
|
||||||
/proc/subchannels and /proc/chpids), see driver-model.txt.
|
/proc/subchannels and /proc/chpids), see driver-model.txt.
|
||||||
Information formerly in /proc/irq_count is now in /proc/interrupts.
|
Information formerly in /proc/irq_count is now in /proc/interrupts.
|
||||||
|
|
|
@ -223,8 +223,8 @@ touched by the driver - it should use the ccwgroup device's driver_data for its
|
||||||
private data.
|
private data.
|
||||||
|
|
||||||
To implement a ccwgroup driver, please refer to include/asm/ccwgroup.h. Keep in
|
To implement a ccwgroup driver, please refer to include/asm/ccwgroup.h. Keep in
|
||||||
mind that most drivers will need to implement both a ccwgroup and a ccw driver
|
mind that most drivers will need to implement both a ccwgroup and a ccw
|
||||||
(unless you have a meta ccw driver, like cu3088 for lcs and ctc).
|
driver.
|
||||||
|
|
||||||
|
|
||||||
2. Channel paths
|
2. Channel paths
|
||||||
|
|
|
@ -1,3 +1,19 @@
|
||||||
|
1 Release Date : Thur. Oct 29, 2009 09:12:45 PST 2009 -
|
||||||
|
(emaild-id:megaraidlinux@lsi.com)
|
||||||
|
Bo Yang
|
||||||
|
|
||||||
|
2 Current Version : 00.00.04.17.1-rc1
|
||||||
|
3 Older Version : 00.00.04.12
|
||||||
|
|
||||||
|
1. Add the pad_0 in mfi frame structure to 0 to fix the
|
||||||
|
context value larger than 32bit value issue.
|
||||||
|
|
||||||
|
2. Add the logic drive list to the driver. Driver will
|
||||||
|
keep the logic drive list internal after driver load.
|
||||||
|
|
||||||
|
3. driver fixed the device update issue after get the AEN
|
||||||
|
PD delete/ADD, LD add/delete from FW.
|
||||||
|
|
||||||
1 Release Date : Tues. July 28, 2009 10:12:45 PST 2009 -
|
1 Release Date : Tues. July 28, 2009 10:12:45 PST 2009 -
|
||||||
(emaild-id:megaraidlinux@lsi.com)
|
(emaild-id:megaraidlinux@lsi.com)
|
||||||
Bo Yang
|
Bo Yang
|
||||||
|
|
|
@ -482,6 +482,9 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
|
||||||
|
|
||||||
reference_rate - reference sample rate, 44100 or 48000 (default)
|
reference_rate - reference sample rate, 44100 or 48000 (default)
|
||||||
multiple - multiple to ref. sample rate, 1 or 2 (default)
|
multiple - multiple to ref. sample rate, 1 or 2 (default)
|
||||||
|
subsystem - override the PCI SSID for probing; the value
|
||||||
|
consists of SSVID << 16 | SSDID. The default is
|
||||||
|
zero, which means no override.
|
||||||
|
|
||||||
This module supports multiple cards.
|
This module supports multiple cards.
|
||||||
|
|
||||||
|
@ -1123,6 +1126,21 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
|
||||||
|
|
||||||
This module supports multiple cards, autoprobe and ISA PnP.
|
This module supports multiple cards, autoprobe and ISA PnP.
|
||||||
|
|
||||||
|
Module snd-jazz16
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
Module for Media Vision Jazz16 chipset. The chipset consists of 3 chips:
|
||||||
|
MVD1216 + MVA416 + MVA514.
|
||||||
|
|
||||||
|
port - port # for SB DSP chip (0x210,0x220,0x230,0x240,0x250,0x260)
|
||||||
|
irq - IRQ # for SB DSP chip (3,5,7,9,10,15)
|
||||||
|
dma8 - DMA # for SB DSP chip (1,3)
|
||||||
|
dma16 - DMA # for SB DSP chip (5,7)
|
||||||
|
mpu_port - MPU-401 port # (0x300,0x310,0x320,0x330)
|
||||||
|
mpu_irq - MPU-401 irq # (2,3,5,7)
|
||||||
|
|
||||||
|
This module supports multiple cards.
|
||||||
|
|
||||||
Module snd-korg1212
|
Module snd-korg1212
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
|
@ -1791,6 +1809,13 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
|
||||||
|
|
||||||
The power-management is supported.
|
The power-management is supported.
|
||||||
|
|
||||||
|
Module snd-ua101
|
||||||
|
----------------
|
||||||
|
|
||||||
|
Module for the Edirol UA-101 audio/MIDI interface.
|
||||||
|
|
||||||
|
This module supports multiple devices, autoprobe and hotplugging.
|
||||||
|
|
||||||
Module snd-usb-audio
|
Module snd-usb-audio
|
||||||
--------------------
|
--------------------
|
||||||
|
|
||||||
|
@ -1923,7 +1948,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
Module for sound cards based on the Asus AV100/AV200 chips,
|
Module for sound cards based on the Asus AV100/AV200 chips,
|
||||||
i.e., Xonar D1, DX, D2, D2X, HDAV1.3 (Deluxe), Essence ST
|
i.e., Xonar D1, DX, D2, D2X, DS, HDAV1.3 (Deluxe), Essence ST
|
||||||
(Deluxe) and Essence STX.
|
(Deluxe) and Essence STX.
|
||||||
|
|
||||||
This module supports autoprobe and multiple cards.
|
This module supports autoprobe and multiple cards.
|
||||||
|
|
|
@ -124,6 +124,8 @@ ALC882/883/885/888/889
|
||||||
asus-a7m ASUS A7M
|
asus-a7m ASUS A7M
|
||||||
macpro MacPro support
|
macpro MacPro support
|
||||||
mb5 Macbook 5,1
|
mb5 Macbook 5,1
|
||||||
|
macmini3 Macmini 3,1
|
||||||
|
mba21 Macbook Air 2,1
|
||||||
mbp3 Macbook Pro rev3
|
mbp3 Macbook Pro rev3
|
||||||
imac24 iMac 24'' with jack detection
|
imac24 iMac 24'' with jack detection
|
||||||
imac91 iMac 9,1
|
imac91 iMac 9,1
|
||||||
|
@ -279,13 +281,16 @@ Conexant 5051
|
||||||
laptop Basic Laptop config (default)
|
laptop Basic Laptop config (default)
|
||||||
hp HP Spartan laptop
|
hp HP Spartan laptop
|
||||||
hp-dv6736 HP dv6736
|
hp-dv6736 HP dv6736
|
||||||
|
hp-f700 HP Compaq Presario F700
|
||||||
lenovo-x200 Lenovo X200 laptop
|
lenovo-x200 Lenovo X200 laptop
|
||||||
|
toshiba Toshiba Satellite M300
|
||||||
|
|
||||||
Conexant 5066
|
Conexant 5066
|
||||||
=============
|
=============
|
||||||
laptop Basic Laptop config (default)
|
laptop Basic Laptop config (default)
|
||||||
dell-laptop Dell laptops
|
dell-laptop Dell laptops
|
||||||
olpc-xo-1_5 OLPC XO 1.5
|
olpc-xo-1_5 OLPC XO 1.5
|
||||||
|
ideapad Lenovo IdeaPad U150
|
||||||
|
|
||||||
STAC9200
|
STAC9200
|
||||||
========
|
========
|
||||||
|
|
|
@ -452,6 +452,33 @@ Similarly, the lines after `[verb]` are parsed as `init_verbs`
|
||||||
sysfs entries, and the lines after `[hint]` are parsed as `hints`
|
sysfs entries, and the lines after `[hint]` are parsed as `hints`
|
||||||
sysfs entries, respectively.
|
sysfs entries, respectively.
|
||||||
|
|
||||||
|
Another example to override the codec vendor id from 0x12345678 to
|
||||||
|
0xdeadbeef is like below:
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
[codec]
|
||||||
|
0x12345678 0xabcd1234 2
|
||||||
|
|
||||||
|
[vendor_id]
|
||||||
|
0xdeadbeef
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
|
In the similar way, you can override the codec subsystem_id via
|
||||||
|
`[subsystem_id]`, the revision id via `[revision_id]` line.
|
||||||
|
Also, the codec chip name can be rewritten via `[chip_name]` line.
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
[codec]
|
||||||
|
0x12345678 0xabcd1234 2
|
||||||
|
|
||||||
|
[subsystem_id]
|
||||||
|
0xffff1111
|
||||||
|
|
||||||
|
[revision_id]
|
||||||
|
0x10
|
||||||
|
|
||||||
|
[chip_name]
|
||||||
|
My-own NEWS-0002
|
||||||
|
------------------------------------------------------------------------
|
||||||
|
|
||||||
The hd-audio driver reads the file via request_firmware(). Thus,
|
The hd-audio driver reads the file via request_firmware(). Thus,
|
||||||
a patch file has to be located on the appropriate firmware path,
|
a patch file has to be located on the appropriate firmware path,
|
||||||
typically, /lib/firmware. For example, when you pass the option
|
typically, /lib/firmware. For example, when you pass the option
|
||||||
|
|
|
@ -238,11 +238,10 @@ HAVE_SYSCALL_TRACEPOINTS
|
||||||
|
|
||||||
You need very few things to get the syscalls tracing in an arch.
|
You need very few things to get the syscalls tracing in an arch.
|
||||||
|
|
||||||
|
- Support HAVE_ARCH_TRACEHOOK (see arch/Kconfig).
|
||||||
- Have a NR_syscalls variable in <asm/unistd.h> that provides the number
|
- Have a NR_syscalls variable in <asm/unistd.h> that provides the number
|
||||||
of syscalls supported by the arch.
|
of syscalls supported by the arch.
|
||||||
- Implement arch_syscall_addr() that resolves a syscall address from a
|
- Support the TIF_SYSCALL_TRACEPOINT thread flags.
|
||||||
syscall number.
|
|
||||||
- Support the TIF_SYSCALL_TRACEPOINT thread flags
|
|
||||||
- Put the trace_sys_enter() and trace_sys_exit() tracepoints calls from ptrace
|
- Put the trace_sys_enter() and trace_sys_exit() tracepoints calls from ptrace
|
||||||
in the ptrace syscalls tracing path.
|
in the ptrace syscalls tracing path.
|
||||||
- Tag this arch as HAVE_SYSCALL_TRACEPOINTS.
|
- Tag this arch as HAVE_SYSCALL_TRACEPOINTS.
|
||||||
|
|
|
@ -24,6 +24,7 @@ Synopsis of kprobe_events
|
||||||
-------------------------
|
-------------------------
|
||||||
p[:[GRP/]EVENT] SYMBOL[+offs]|MEMADDR [FETCHARGS] : Set a probe
|
p[:[GRP/]EVENT] SYMBOL[+offs]|MEMADDR [FETCHARGS] : Set a probe
|
||||||
r[:[GRP/]EVENT] SYMBOL[+0] [FETCHARGS] : Set a return probe
|
r[:[GRP/]EVENT] SYMBOL[+0] [FETCHARGS] : Set a return probe
|
||||||
|
-:[GRP/]EVENT : Clear a probe
|
||||||
|
|
||||||
GRP : Group name. If omitted, use "kprobes" for it.
|
GRP : Group name. If omitted, use "kprobes" for it.
|
||||||
EVENT : Event name. If omitted, the event name is generated
|
EVENT : Event name. If omitted, the event name is generated
|
||||||
|
@ -37,15 +38,12 @@ Synopsis of kprobe_events
|
||||||
@SYM[+|-offs] : Fetch memory at SYM +|- offs (SYM should be a data symbol)
|
@SYM[+|-offs] : Fetch memory at SYM +|- offs (SYM should be a data symbol)
|
||||||
$stackN : Fetch Nth entry of stack (N >= 0)
|
$stackN : Fetch Nth entry of stack (N >= 0)
|
||||||
$stack : Fetch stack address.
|
$stack : Fetch stack address.
|
||||||
$argN : Fetch function argument. (N >= 0)(*)
|
$retval : Fetch return value.(*)
|
||||||
$retval : Fetch return value.(**)
|
+|-offs(FETCHARG) : Fetch memory at FETCHARG +|- offs address.(**)
|
||||||
+|-offs(FETCHARG) : Fetch memory at FETCHARG +|- offs address.(***)
|
|
||||||
NAME=FETCHARG: Set NAME as the argument name of FETCHARG.
|
NAME=FETCHARG: Set NAME as the argument name of FETCHARG.
|
||||||
|
|
||||||
(*) aN may not correct on asmlinkaged functions and at the middle of
|
(*) only for return probe.
|
||||||
function body.
|
(**) this is useful for fetching a field of data structures.
|
||||||
(**) only for return probe.
|
|
||||||
(***) this is useful for fetching a field of data structures.
|
|
||||||
|
|
||||||
|
|
||||||
Per-Probe Event Filtering
|
Per-Probe Event Filtering
|
||||||
|
@ -82,13 +80,16 @@ Usage examples
|
||||||
To add a probe as a new event, write a new definition to kprobe_events
|
To add a probe as a new event, write a new definition to kprobe_events
|
||||||
as below.
|
as below.
|
||||||
|
|
||||||
echo p:myprobe do_sys_open dfd=$arg0 filename=$arg1 flags=$arg2 mode=$arg3 > /sys/kernel/debug/tracing/kprobe_events
|
echo 'p:myprobe do_sys_open dfd=%ax filename=%dx flags=%cx mode=+4($stack)' > /sys/kernel/debug/tracing/kprobe_events
|
||||||
|
|
||||||
This sets a kprobe on the top of do_sys_open() function with recording
|
This sets a kprobe on the top of do_sys_open() function with recording
|
||||||
1st to 4th arguments as "myprobe" event. As this example shows, users can
|
1st to 4th arguments as "myprobe" event. Note, which register/stack entry is
|
||||||
choose more familiar names for each arguments.
|
assigned to each function argument depends on arch-specific ABI. If you unsure
|
||||||
|
the ABI, please try to use probe subcommand of perf-tools (you can find it
|
||||||
|
under tools/perf/).
|
||||||
|
As this example shows, users can choose more familiar names for each arguments.
|
||||||
|
|
||||||
echo r:myretprobe do_sys_open $retval >> /sys/kernel/debug/tracing/kprobe_events
|
echo 'r:myretprobe do_sys_open $retval' >> /sys/kernel/debug/tracing/kprobe_events
|
||||||
|
|
||||||
This sets a kretprobe on the return point of do_sys_open() function with
|
This sets a kretprobe on the return point of do_sys_open() function with
|
||||||
recording return value as "myretprobe" event.
|
recording return value as "myretprobe" event.
|
||||||
|
@ -97,23 +98,24 @@ recording return value as "myretprobe" event.
|
||||||
|
|
||||||
cat /sys/kernel/debug/tracing/events/kprobes/myprobe/format
|
cat /sys/kernel/debug/tracing/events/kprobes/myprobe/format
|
||||||
name: myprobe
|
name: myprobe
|
||||||
ID: 75
|
ID: 780
|
||||||
format:
|
format:
|
||||||
field:unsigned short common_type; offset:0; size:2;
|
field:unsigned short common_type; offset:0; size:2; signed:0;
|
||||||
field:unsigned char common_flags; offset:2; size:1;
|
field:unsigned char common_flags; offset:2; size:1; signed:0;
|
||||||
field:unsigned char common_preempt_count; offset:3; size:1;
|
field:unsigned char common_preempt_count; offset:3; size:1;signed:0;
|
||||||
field:int common_pid; offset:4; size:4;
|
field:int common_pid; offset:4; size:4; signed:1;
|
||||||
field:int common_tgid; offset:8; size:4;
|
field:int common_lock_depth; offset:8; size:4; signed:1;
|
||||||
|
|
||||||
field: unsigned long ip; offset:16;tsize:8;
|
field:unsigned long __probe_ip; offset:12; size:4; signed:0;
|
||||||
field: int nargs; offset:24;tsize:4;
|
field:int __probe_nargs; offset:16; size:4; signed:1;
|
||||||
field: unsigned long dfd; offset:32;tsize:8;
|
field:unsigned long dfd; offset:20; size:4; signed:0;
|
||||||
field: unsigned long filename; offset:40;tsize:8;
|
field:unsigned long filename; offset:24; size:4; signed:0;
|
||||||
field: unsigned long flags; offset:48;tsize:8;
|
field:unsigned long flags; offset:28; size:4; signed:0;
|
||||||
field: unsigned long mode; offset:56;tsize:8;
|
field:unsigned long mode; offset:32; size:4; signed:0;
|
||||||
|
|
||||||
print fmt: "(%lx) dfd=%lx filename=%lx flags=%lx mode=%lx", REC->ip, REC->dfd, REC->filename, REC->flags, REC->mode
|
|
||||||
|
|
||||||
|
print fmt: "(%lx) dfd=%lx filename=%lx flags=%lx mode=%lx", REC->__probe_ip,
|
||||||
|
REC->dfd, REC->filename, REC->flags, REC->mode
|
||||||
|
|
||||||
You can see that the event has 4 arguments as in the expressions you specified.
|
You can see that the event has 4 arguments as in the expressions you specified.
|
||||||
|
|
||||||
|
@ -121,6 +123,12 @@ print fmt: "(%lx) dfd=%lx filename=%lx flags=%lx mode=%lx", REC->ip, REC->dfd, R
|
||||||
|
|
||||||
This clears all probe points.
|
This clears all probe points.
|
||||||
|
|
||||||
|
Or,
|
||||||
|
|
||||||
|
echo -:myprobe >> kprobe_events
|
||||||
|
|
||||||
|
This clears probe points selectively.
|
||||||
|
|
||||||
Right after definition, each event is disabled by default. For tracing these
|
Right after definition, each event is disabled by default. For tracing these
|
||||||
events, you need to enable it.
|
events, you need to enable it.
|
||||||
|
|
||||||
|
@ -146,4 +154,3 @@ events, you need to enable it.
|
||||||
returns from SYMBOL(e.g. "sys_open+0x1b/0x1d <- do_sys_open" means kernel
|
returns from SYMBOL(e.g. "sys_open+0x1b/0x1d <- do_sys_open" means kernel
|
||||||
returns from do_sys_open to sys_open+0x1b).
|
returns from do_sys_open to sys_open+0x1b).
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -41,8 +41,8 @@ USB-specific:
|
||||||
|
|
||||||
-EFBIG Host controller driver can't schedule that many ISO frames.
|
-EFBIG Host controller driver can't schedule that many ISO frames.
|
||||||
|
|
||||||
-EPIPE Specified endpoint is stalled. For non-control endpoints,
|
-EPIPE The pipe type specified in the URB doesn't match the
|
||||||
reset this status with usb_clear_halt().
|
endpoint's actual type.
|
||||||
|
|
||||||
-EMSGSIZE (a) endpoint maxpacket size is zero; it is not usable
|
-EMSGSIZE (a) endpoint maxpacket size is zero; it is not usable
|
||||||
in the current interface altsetting.
|
in the current interface altsetting.
|
||||||
|
@ -60,6 +60,8 @@ USB-specific:
|
||||||
|
|
||||||
-EHOSTUNREACH URB was rejected because the device is suspended.
|
-EHOSTUNREACH URB was rejected because the device is suspended.
|
||||||
|
|
||||||
|
-ENOEXEC A control URB doesn't contain a Setup packet.
|
||||||
|
|
||||||
|
|
||||||
**************************************************************************
|
**************************************************************************
|
||||||
* Error codes returned by in urb->status *
|
* Error codes returned by in urb->status *
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
Alan Stern <stern@rowland.harvard.edu>
|
Alan Stern <stern@rowland.harvard.edu>
|
||||||
|
|
||||||
November 10, 2009
|
December 11, 2009
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -29,9 +29,9 @@ covered to some extent (see Documentation/power/*.txt for more
|
||||||
information about system PM).
|
information about system PM).
|
||||||
|
|
||||||
Note: Dynamic PM support for USB is present only if the kernel was
|
Note: Dynamic PM support for USB is present only if the kernel was
|
||||||
built with CONFIG_USB_SUSPEND enabled. System PM support is present
|
built with CONFIG_USB_SUSPEND enabled (which depends on
|
||||||
only if the kernel was built with CONFIG_SUSPEND or CONFIG_HIBERNATION
|
CONFIG_PM_RUNTIME). System PM support is present only if the kernel
|
||||||
enabled.
|
was built with CONFIG_SUSPEND or CONFIG_HIBERNATION enabled.
|
||||||
|
|
||||||
|
|
||||||
What is Remote Wakeup?
|
What is Remote Wakeup?
|
||||||
|
@ -229,6 +229,11 @@ necessary operations by hand or add them to a udev script. You can
|
||||||
also change the idle-delay time; 2 seconds is not the best choice for
|
also change the idle-delay time; 2 seconds is not the best choice for
|
||||||
every device.
|
every device.
|
||||||
|
|
||||||
|
If a driver knows that its device has proper suspend/resume support,
|
||||||
|
it can enable autosuspend all by itself. For example, the video
|
||||||
|
driver for a laptop's webcam might do this, since these devices are
|
||||||
|
rarely used and so should normally be autosuspended.
|
||||||
|
|
||||||
Sometimes it turns out that even when a device does work okay with
|
Sometimes it turns out that even when a device does work okay with
|
||||||
autosuspend there are still problems. For example, there are
|
autosuspend there are still problems. For example, there are
|
||||||
experimental patches adding autosuspend support to the usbhid driver,
|
experimental patches adding autosuspend support to the usbhid driver,
|
||||||
|
@ -321,69 +326,81 @@ driver does so by calling these six functions:
|
||||||
void usb_autopm_get_interface_no_resume(struct usb_interface *intf);
|
void usb_autopm_get_interface_no_resume(struct usb_interface *intf);
|
||||||
void usb_autopm_put_interface_no_suspend(struct usb_interface *intf);
|
void usb_autopm_put_interface_no_suspend(struct usb_interface *intf);
|
||||||
|
|
||||||
The functions work by maintaining a counter in the usb_interface
|
The functions work by maintaining a usage counter in the
|
||||||
structure. When intf->pm_usage_count is > 0 then the interface is
|
usb_interface's embedded device structure. When the counter is > 0
|
||||||
deemed to be busy, and the kernel will not autosuspend the interface's
|
then the interface is deemed to be busy, and the kernel will not
|
||||||
device. When intf->pm_usage_count is <= 0 then the interface is
|
autosuspend the interface's device. When the usage counter is = 0
|
||||||
considered to be idle, and the kernel may autosuspend the device.
|
then the interface is considered to be idle, and the kernel may
|
||||||
|
autosuspend the device.
|
||||||
|
|
||||||
(There is a similar pm_usage_count field in struct usb_device,
|
(There is a similar usage counter field in struct usb_device,
|
||||||
associated with the device itself rather than any of its interfaces.
|
associated with the device itself rather than any of its interfaces.
|
||||||
This field is used only by the USB core.)
|
This counter is used only by the USB core.)
|
||||||
|
|
||||||
Drivers must not modify intf->pm_usage_count directly; its value
|
Drivers need not be concerned about balancing changes to the usage
|
||||||
should be changed only be using the functions listed above. Drivers
|
counter; the USB core will undo any remaining "get"s when a driver
|
||||||
are responsible for insuring that the overall change to pm_usage_count
|
is unbound from its interface. As a corollary, drivers must not call
|
||||||
during their lifetime balances out to 0 (it may be necessary for the
|
any of the usb_autopm_* functions after their diconnect() routine has
|
||||||
disconnect method to call usb_autopm_put_interface() one or more times
|
returned.
|
||||||
to fulfill this requirement). The first two routines use the PM mutex
|
|
||||||
in struct usb_device for mutual exclusion; drivers using the async
|
|
||||||
routines are responsible for their own synchronization and mutual
|
|
||||||
exclusion.
|
|
||||||
|
|
||||||
usb_autopm_get_interface() increments pm_usage_count and
|
Drivers using the async routines are responsible for their own
|
||||||
attempts an autoresume if the new value is > 0 and the
|
synchronization and mutual exclusion.
|
||||||
device is suspended.
|
|
||||||
|
|
||||||
usb_autopm_put_interface() decrements pm_usage_count and
|
usb_autopm_get_interface() increments the usage counter and
|
||||||
attempts an autosuspend if the new value is <= 0 and the
|
does an autoresume if the device is suspended. If the
|
||||||
device isn't suspended.
|
autoresume fails, the counter is decremented back.
|
||||||
|
|
||||||
|
usb_autopm_put_interface() decrements the usage counter and
|
||||||
|
attempts an autosuspend if the new value is = 0.
|
||||||
|
|
||||||
usb_autopm_get_interface_async() and
|
usb_autopm_get_interface_async() and
|
||||||
usb_autopm_put_interface_async() do almost the same things as
|
usb_autopm_put_interface_async() do almost the same things as
|
||||||
their non-async counterparts. The differences are: they do
|
their non-async counterparts. The big difference is that they
|
||||||
not acquire the PM mutex, and they use a workqueue to do their
|
use a workqueue to do the resume or suspend part of their
|
||||||
jobs. As a result they can be called in an atomic context,
|
jobs. As a result they can be called in an atomic context,
|
||||||
such as an URB's completion handler, but when they return the
|
such as an URB's completion handler, but when they return the
|
||||||
device will not generally not yet be in the desired state.
|
device will generally not yet be in the desired state.
|
||||||
|
|
||||||
usb_autopm_get_interface_no_resume() and
|
usb_autopm_get_interface_no_resume() and
|
||||||
usb_autopm_put_interface_no_suspend() merely increment or
|
usb_autopm_put_interface_no_suspend() merely increment or
|
||||||
decrement the pm_usage_count value; they do not attempt to
|
decrement the usage counter; they do not attempt to carry out
|
||||||
carry out an autoresume or an autosuspend. Hence they can be
|
an autoresume or an autosuspend. Hence they can be called in
|
||||||
called in an atomic context.
|
an atomic context.
|
||||||
|
|
||||||
The conventional usage pattern is that a driver calls
|
The simplest usage pattern is that a driver calls
|
||||||
usb_autopm_get_interface() in its open routine and
|
usb_autopm_get_interface() in its open routine and
|
||||||
usb_autopm_put_interface() in its close or release routine. But
|
usb_autopm_put_interface() in its close or release routine. But other
|
||||||
other patterns are possible.
|
patterns are possible.
|
||||||
|
|
||||||
The autosuspend attempts mentioned above will often fail for one
|
The autosuspend attempts mentioned above will often fail for one
|
||||||
reason or another. For example, the power/level attribute might be
|
reason or another. For example, the power/level attribute might be
|
||||||
set to "on", or another interface in the same device might not be
|
set to "on", or another interface in the same device might not be
|
||||||
idle. This is perfectly normal. If the reason for failure was that
|
idle. This is perfectly normal. If the reason for failure was that
|
||||||
the device hasn't been idle for long enough, a delayed workqueue
|
the device hasn't been idle for long enough, a timer is scheduled to
|
||||||
routine is automatically set up to carry out the operation when the
|
carry out the operation automatically when the autosuspend idle-delay
|
||||||
autosuspend idle-delay has expired.
|
has expired.
|
||||||
|
|
||||||
Autoresume attempts also can fail, although failure would mean that
|
Autoresume attempts also can fail, although failure would mean that
|
||||||
the device is no longer present or operating properly. Unlike
|
the device is no longer present or operating properly. Unlike
|
||||||
autosuspend, there's no delay for an autoresume.
|
autosuspend, there's no idle-delay for an autoresume.
|
||||||
|
|
||||||
|
|
||||||
Other parts of the driver interface
|
Other parts of the driver interface
|
||||||
-----------------------------------
|
-----------------------------------
|
||||||
|
|
||||||
|
Drivers can enable autosuspend for their devices by calling
|
||||||
|
|
||||||
|
usb_enable_autosuspend(struct usb_device *udev);
|
||||||
|
|
||||||
|
in their probe() routine, if they know that the device is capable of
|
||||||
|
suspending and resuming correctly. This is exactly equivalent to
|
||||||
|
writing "auto" to the device's power/level attribute. Likewise,
|
||||||
|
drivers can disable autosuspend by calling
|
||||||
|
|
||||||
|
usb_disable_autosuspend(struct usb_device *udev);
|
||||||
|
|
||||||
|
This is exactly the same as writing "on" to the power/level attribute.
|
||||||
|
|
||||||
Sometimes a driver needs to make sure that remote wakeup is enabled
|
Sometimes a driver needs to make sure that remote wakeup is enabled
|
||||||
during autosuspend. For example, there's not much point
|
during autosuspend. For example, there's not much point
|
||||||
autosuspending a keyboard if the user can't cause the keyboard to do a
|
autosuspending a keyboard if the user can't cause the keyboard to do a
|
||||||
|
@ -395,26 +412,27 @@ though, setting this flag won't cause the kernel to autoresume it.
|
||||||
Normally a driver would set this flag in its probe method, at which
|
Normally a driver would set this flag in its probe method, at which
|
||||||
time the device is guaranteed not to be autosuspended.)
|
time the device is guaranteed not to be autosuspended.)
|
||||||
|
|
||||||
The synchronous usb_autopm_* routines have to run in a sleepable
|
If a driver does its I/O asynchronously in interrupt context, it
|
||||||
process context; they must not be called from an interrupt handler or
|
should call usb_autopm_get_interface_async() before starting output and
|
||||||
while holding a spinlock. In fact, the entire autosuspend mechanism
|
usb_autopm_put_interface_async() when the output queue drains. When
|
||||||
is not well geared toward interrupt-driven operation. However there
|
it receives an input event, it should call
|
||||||
is one thing a driver can do in an interrupt handler:
|
|
||||||
|
|
||||||
usb_mark_last_busy(struct usb_device *udev);
|
usb_mark_last_busy(struct usb_device *udev);
|
||||||
|
|
||||||
This sets udev->last_busy to the current time. udev->last_busy is the
|
in the event handler. This sets udev->last_busy to the current time.
|
||||||
field used for idle-delay calculations; updating it will cause any
|
udev->last_busy is the field used for idle-delay calculations;
|
||||||
pending autosuspend to be moved back. The usb_autopm_* routines will
|
updating it will cause any pending autosuspend to be moved back. Most
|
||||||
also set the last_busy field to the current time.
|
of the usb_autopm_* routines will also set the last_busy field to the
|
||||||
|
current time.
|
||||||
|
|
||||||
Calling urb_mark_last_busy() from within an URB completion handler is
|
Asynchronous operation is always subject to races. For example, a
|
||||||
subject to races: The kernel may have just finished deciding the
|
driver may call one of the usb_autopm_*_interface_async() routines at
|
||||||
device has been idle for long enough but not yet gotten around to
|
a time when the core has just finished deciding the device has been
|
||||||
calling the driver's suspend method. The driver would have to be
|
idle for long enough but not yet gotten around to calling the driver's
|
||||||
responsible for synchronizing its suspend method with its URB
|
suspend method. The suspend method must be responsible for
|
||||||
completion handler and causing the autosuspend to fail with -EBUSY if
|
synchronizing with the output request routine and the URB completion
|
||||||
an URB had completed too recently.
|
handler; it should cause autosuspends to fail with -EBUSY if the
|
||||||
|
driver needs to use the device.
|
||||||
|
|
||||||
External suspend calls should never be allowed to fail in this way,
|
External suspend calls should never be allowed to fail in this way,
|
||||||
only autosuspend calls. The driver can tell them apart by checking
|
only autosuspend calls. The driver can tell them apart by checking
|
||||||
|
@ -422,75 +440,23 @@ the PM_EVENT_AUTO bit in the message.event argument to the suspend
|
||||||
method; this bit will be set for internal PM events (autosuspend) and
|
method; this bit will be set for internal PM events (autosuspend) and
|
||||||
clear for external PM events.
|
clear for external PM events.
|
||||||
|
|
||||||
Many of the ingredients in the autosuspend framework are oriented
|
|
||||||
towards interfaces: The usb_interface structure contains the
|
|
||||||
pm_usage_cnt field, and the usb_autopm_* routines take an interface
|
|
||||||
pointer as their argument. But somewhat confusingly, a few of the
|
|
||||||
pieces (i.e., usb_mark_last_busy()) use the usb_device structure
|
|
||||||
instead. Drivers need to keep this straight; they can call
|
|
||||||
interface_to_usbdev() to find the device structure for a given
|
|
||||||
interface.
|
|
||||||
|
|
||||||
|
Mutual exclusion
|
||||||
|
----------------
|
||||||
|
|
||||||
Locking requirements
|
For external events -- but not necessarily for autosuspend or
|
||||||
--------------------
|
autoresume -- the device semaphore (udev->dev.sem) will be held when a
|
||||||
|
suspend or resume method is called. This implies that external
|
||||||
All three suspend/resume methods are always called while holding the
|
suspend/resume events are mutually exclusive with calls to probe,
|
||||||
usb_device's PM mutex. For external events -- but not necessarily for
|
disconnect, pre_reset, and post_reset; the USB core guarantees that
|
||||||
autosuspend or autoresume -- the device semaphore (udev->dev.sem) will
|
this is true of autosuspend/autoresume events as well.
|
||||||
also be held. This implies that external suspend/resume events are
|
|
||||||
mutually exclusive with calls to probe, disconnect, pre_reset, and
|
|
||||||
post_reset; the USB core guarantees that this is true of internal
|
|
||||||
suspend/resume events as well.
|
|
||||||
|
|
||||||
If a driver wants to block all suspend/resume calls during some
|
If a driver wants to block all suspend/resume calls during some
|
||||||
critical section, it can simply acquire udev->pm_mutex. Note that
|
critical section, the best way is to lock the device and call
|
||||||
calls to resume may be triggered indirectly. Block IO due to memory
|
usb_autopm_get_interface() (and do the reverse at the end of the
|
||||||
allocations can make the vm subsystem resume a device. Thus while
|
critical section). Holding the device semaphore will block all
|
||||||
holding this lock you must not allocate memory with GFP_KERNEL or
|
external PM calls, and the usb_autopm_get_interface() will prevent any
|
||||||
GFP_NOFS.
|
internal PM calls, even if it fails. (Exercise: Why?)
|
||||||
|
|
||||||
Alternatively, if the critical section might call some of the
|
|
||||||
usb_autopm_* routines, the driver can avoid deadlock by doing:
|
|
||||||
|
|
||||||
down(&udev->dev.sem);
|
|
||||||
rc = usb_autopm_get_interface(intf);
|
|
||||||
|
|
||||||
and at the end of the critical section:
|
|
||||||
|
|
||||||
if (!rc)
|
|
||||||
usb_autopm_put_interface(intf);
|
|
||||||
up(&udev->dev.sem);
|
|
||||||
|
|
||||||
Holding the device semaphore will block all external PM calls, and the
|
|
||||||
usb_autopm_get_interface() will prevent any internal PM calls, even if
|
|
||||||
it fails. (Exercise: Why?)
|
|
||||||
|
|
||||||
The rules for locking order are:
|
|
||||||
|
|
||||||
Never acquire any device semaphore while holding any PM mutex.
|
|
||||||
|
|
||||||
Never acquire udev->pm_mutex while holding the PM mutex for
|
|
||||||
a device that isn't a descendant of udev.
|
|
||||||
|
|
||||||
In other words, PM mutexes should only be acquired going up the device
|
|
||||||
tree, and they should be acquired only after locking all the device
|
|
||||||
semaphores you need to hold. These rules don't matter to drivers very
|
|
||||||
much; they usually affect just the USB core.
|
|
||||||
|
|
||||||
Still, drivers do need to be careful. For example, many drivers use a
|
|
||||||
private mutex to synchronize their normal I/O activities with their
|
|
||||||
disconnect method. Now if the driver supports autosuspend then it
|
|
||||||
must call usb_autopm_put_interface() from somewhere -- maybe from its
|
|
||||||
close method. It should make the call while holding the private mutex,
|
|
||||||
since a driver shouldn't call any of the usb_autopm_* functions for an
|
|
||||||
interface from which it has been unbound.
|
|
||||||
|
|
||||||
But the usb_autpm_* routines always acquire the device's PM mutex, and
|
|
||||||
consequently the locking order has to be: private mutex first, PM
|
|
||||||
mutex second. Since the suspend method is always called with the PM
|
|
||||||
mutex held, it mustn't try to acquire the private mutex. It has to
|
|
||||||
synchronize with the driver's I/O activities in some other way.
|
|
||||||
|
|
||||||
|
|
||||||
Interaction between dynamic PM and system PM
|
Interaction between dynamic PM and system PM
|
||||||
|
@ -499,22 +465,11 @@ synchronize with the driver's I/O activities in some other way.
|
||||||
Dynamic power management and system power management can interact in
|
Dynamic power management and system power management can interact in
|
||||||
a couple of ways.
|
a couple of ways.
|
||||||
|
|
||||||
Firstly, a device may already be manually suspended or autosuspended
|
Firstly, a device may already be autosuspended when a system suspend
|
||||||
when a system suspend occurs. Since system suspends are supposed to
|
occurs. Since system suspends are supposed to be as transparent as
|
||||||
be as transparent as possible, the device should remain suspended
|
possible, the device should remain suspended following the system
|
||||||
following the system resume. The 2.6.23 kernel obeys this principle
|
resume. But this theory may not work out well in practice; over time
|
||||||
for manually suspended devices but not for autosuspended devices; they
|
the kernel's behavior in this regard has changed.
|
||||||
do get resumed when the system wakes up. (Presumably they will be
|
|
||||||
autosuspended again after their idle-delay time expires.) In later
|
|
||||||
kernels this behavior will be fixed.
|
|
||||||
|
|
||||||
(There is an exception. If a device would undergo a reset-resume
|
|
||||||
instead of a normal resume, and the device is enabled for remote
|
|
||||||
wakeup, then the reset-resume takes place even if the device was
|
|
||||||
already suspended when the system suspend began. The justification is
|
|
||||||
that a reset-resume is a kind of remote-wakeup event. Or to put it
|
|
||||||
another way, a device which needs a reset won't be able to generate
|
|
||||||
normal remote-wakeup signals, so it ought to be resumed immediately.)
|
|
||||||
|
|
||||||
Secondly, a dynamic power-management event may occur as a system
|
Secondly, a dynamic power-management event may occur as a system
|
||||||
suspend is underway. The window for this is short, since system
|
suspend is underway. The window for this is short, since system
|
||||||
|
|
|
@ -26,3 +26,4 @@
|
||||||
25 -> Compro VideoMate E800 [1858:e800]
|
25 -> Compro VideoMate E800 [1858:e800]
|
||||||
26 -> Hauppauge WinTV-HVR1290 [0070:8551]
|
26 -> Hauppauge WinTV-HVR1290 [0070:8551]
|
||||||
27 -> Mygica X8558 PRO DMB-TH [14f1:8578]
|
27 -> Mygica X8558 PRO DMB-TH [14f1:8578]
|
||||||
|
28 -> LEADTEK WinFast PxTV1200 [107d:6f22]
|
||||||
|
|
|
@ -174,3 +174,4 @@
|
||||||
173 -> Zolid Hybrid TV Tuner PCI [1131:2004]
|
173 -> Zolid Hybrid TV Tuner PCI [1131:2004]
|
||||||
174 -> Asus Europa Hybrid OEM [1043:4847]
|
174 -> Asus Europa Hybrid OEM [1043:4847]
|
||||||
175 -> Leadtek Winfast DTV1000S [107d:6655]
|
175 -> Leadtek Winfast DTV1000S [107d:6655]
|
||||||
|
176 -> Beholder BeholdTV 505 RDS [0000:5051]
|
||||||
|
|
|
@ -81,3 +81,4 @@ tuner=80 - Philips FQ1216LME MK3 PAL/SECAM w/active loopthrough
|
||||||
tuner=81 - Partsnic (Daewoo) PTI-5NF05
|
tuner=81 - Partsnic (Daewoo) PTI-5NF05
|
||||||
tuner=82 - Philips CU1216L
|
tuner=82 - Philips CU1216L
|
||||||
tuner=83 - NXP TDA18271
|
tuner=83 - NXP TDA18271
|
||||||
|
tuner=84 - Sony BTF-Pxn01Z
|
||||||
|
|
47
Documentation/video4linux/README.tlg2300
Normal file
47
Documentation/video4linux/README.tlg2300
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
tlg2300 release notes
|
||||||
|
====================
|
||||||
|
|
||||||
|
This is a v4l2/dvb device driver for the tlg2300 chip.
|
||||||
|
|
||||||
|
|
||||||
|
current status
|
||||||
|
==============
|
||||||
|
|
||||||
|
video
|
||||||
|
- support mmap and read().(no overlay)
|
||||||
|
|
||||||
|
audio
|
||||||
|
- The driver will register a ALSA card for the audio input.
|
||||||
|
|
||||||
|
vbi
|
||||||
|
- Works for almost TV norms.
|
||||||
|
|
||||||
|
dvb-t
|
||||||
|
- works for DVB-T
|
||||||
|
|
||||||
|
FM
|
||||||
|
- Works for radio.
|
||||||
|
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
TESTED APPLICATIONS:
|
||||||
|
|
||||||
|
-VLC1.0.4 test the video and dvb. The GUI is friendly to use.
|
||||||
|
|
||||||
|
-Mplayer test the video.
|
||||||
|
|
||||||
|
-Mplayer test the FM. The mplayer should be compiled with --enable-radio and
|
||||||
|
--enable-radio-capture.
|
||||||
|
The command runs as this(The alsa audio registers to card 1):
|
||||||
|
#mplayer radio://103.7/capture/ -radio adevice=hw=1,0:arate=48000 \
|
||||||
|
-rawaudio rate=48000:channels=2
|
||||||
|
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
KNOWN PROBLEMS:
|
||||||
|
about preemphasis:
|
||||||
|
You can set the preemphasis for radio by the following command:
|
||||||
|
#v4l2-ctl -d /dev/radio0 --set-ctrl=pre_emphasis_settings=1
|
||||||
|
|
||||||
|
"pre_emphasis_settings=1" means that you select the 50us. If you want
|
||||||
|
to select the 75us, please use "pre_emphasis_settings=2"
|
||||||
|
|
||||||
|
|
|
@ -42,6 +42,7 @@ ov519 041e:4064 Creative Live! VISTA VF0420
|
||||||
ov519 041e:4067 Creative Live! Cam Video IM (VF0350)
|
ov519 041e:4067 Creative Live! Cam Video IM (VF0350)
|
||||||
ov519 041e:4068 Creative Live! VISTA VF0470
|
ov519 041e:4068 Creative Live! VISTA VF0470
|
||||||
spca561 0458:7004 Genius VideoCAM Express V2
|
spca561 0458:7004 Genius VideoCAM Express V2
|
||||||
|
sn9c2028 0458:7005 Genius Smart 300, version 2
|
||||||
sunplus 0458:7006 Genius Dsc 1.3 Smart
|
sunplus 0458:7006 Genius Dsc 1.3 Smart
|
||||||
zc3xx 0458:7007 Genius VideoCam V2
|
zc3xx 0458:7007 Genius VideoCam V2
|
||||||
zc3xx 0458:700c Genius VideoCam V3
|
zc3xx 0458:700c Genius VideoCam V3
|
||||||
|
@ -109,6 +110,7 @@ sunplus 04a5:3003 Benq DC 1300
|
||||||
sunplus 04a5:3008 Benq DC 1500
|
sunplus 04a5:3008 Benq DC 1500
|
||||||
sunplus 04a5:300a Benq DC 3410
|
sunplus 04a5:300a Benq DC 3410
|
||||||
spca500 04a5:300c Benq DC 1016
|
spca500 04a5:300c Benq DC 1016
|
||||||
|
benq 04a5:3035 Benq DC E300
|
||||||
finepix 04cb:0104 Fujifilm FinePix 4800
|
finepix 04cb:0104 Fujifilm FinePix 4800
|
||||||
finepix 04cb:0109 Fujifilm FinePix A202
|
finepix 04cb:0109 Fujifilm FinePix A202
|
||||||
finepix 04cb:010b Fujifilm FinePix A203
|
finepix 04cb:010b Fujifilm FinePix A203
|
||||||
|
@ -142,6 +144,7 @@ sunplus 04fc:5360 Sunplus Generic
|
||||||
spca500 04fc:7333 PalmPixDC85
|
spca500 04fc:7333 PalmPixDC85
|
||||||
sunplus 04fc:ffff Pure DigitalDakota
|
sunplus 04fc:ffff Pure DigitalDakota
|
||||||
spca501 0506:00df 3Com HomeConnect Lite
|
spca501 0506:00df 3Com HomeConnect Lite
|
||||||
|
sunplus 052b:1507 Megapixel 5 Pretec DC-1007
|
||||||
sunplus 052b:1513 Megapix V4
|
sunplus 052b:1513 Megapix V4
|
||||||
sunplus 052b:1803 MegaImage VI
|
sunplus 052b:1803 MegaImage VI
|
||||||
tv8532 0545:808b Veo Stingray
|
tv8532 0545:808b Veo Stingray
|
||||||
|
@ -151,6 +154,7 @@ sunplus 0546:3191 Polaroid Ion 80
|
||||||
sunplus 0546:3273 Polaroid PDC2030
|
sunplus 0546:3273 Polaroid PDC2030
|
||||||
ov519 054c:0154 Sonny toy4
|
ov519 054c:0154 Sonny toy4
|
||||||
ov519 054c:0155 Sonny toy5
|
ov519 054c:0155 Sonny toy5
|
||||||
|
cpia1 0553:0002 CPIA CPiA (version1) based cameras
|
||||||
zc3xx 055f:c005 Mustek Wcam300A
|
zc3xx 055f:c005 Mustek Wcam300A
|
||||||
spca500 055f:c200 Mustek Gsmart 300
|
spca500 055f:c200 Mustek Gsmart 300
|
||||||
sunplus 055f:c211 Kowa Bs888e Microcamera
|
sunplus 055f:c211 Kowa Bs888e Microcamera
|
||||||
|
@ -188,8 +192,7 @@ spca500 06bd:0404 Agfa CL20
|
||||||
spca500 06be:0800 Optimedia
|
spca500 06be:0800 Optimedia
|
||||||
sunplus 06d6:0031 Trust 610 LCD PowerC@m Zoom
|
sunplus 06d6:0031 Trust 610 LCD PowerC@m Zoom
|
||||||
spca506 06e1:a190 ADS Instant VCD
|
spca506 06e1:a190 ADS Instant VCD
|
||||||
ov534 06f8:3002 Hercules Blog Webcam
|
ov534_9 06f8:3003 Hercules Dualpix HD Weblog
|
||||||
ov534 06f8:3003 Hercules Dualpix HD Weblog
|
|
||||||
sonixj 06f8:3004 Hercules Classic Silver
|
sonixj 06f8:3004 Hercules Classic Silver
|
||||||
sonixj 06f8:3008 Hercules Deluxe Optical Glass
|
sonixj 06f8:3008 Hercules Deluxe Optical Glass
|
||||||
pac7302 06f8:3009 Hercules Classic Link
|
pac7302 06f8:3009 Hercules Classic Link
|
||||||
|
@ -204,6 +207,7 @@ sunplus 0733:2221 Mercury Digital Pro 3.1p
|
||||||
sunplus 0733:3261 Concord 3045 spca536a
|
sunplus 0733:3261 Concord 3045 spca536a
|
||||||
sunplus 0733:3281 Cyberpix S550V
|
sunplus 0733:3281 Cyberpix S550V
|
||||||
spca506 0734:043b 3DeMon USB Capture aka
|
spca506 0734:043b 3DeMon USB Capture aka
|
||||||
|
cpia1 0813:0001 QX3 camera
|
||||||
ov519 0813:0002 Dual Mode USB Camera Plus
|
ov519 0813:0002 Dual Mode USB Camera Plus
|
||||||
spca500 084d:0003 D-Link DSC-350
|
spca500 084d:0003 D-Link DSC-350
|
||||||
spca500 08ca:0103 Aiptek PocketDV
|
spca500 08ca:0103 Aiptek PocketDV
|
||||||
|
@ -225,7 +229,8 @@ sunplus 08ca:2050 Medion MD 41437
|
||||||
sunplus 08ca:2060 Aiptek PocketDV5300
|
sunplus 08ca:2060 Aiptek PocketDV5300
|
||||||
tv8532 0923:010f ICM532 cams
|
tv8532 0923:010f ICM532 cams
|
||||||
mars 093a:050f Mars-Semi Pc-Camera
|
mars 093a:050f Mars-Semi Pc-Camera
|
||||||
mr97310a 093a:010f Sakar Digital no. 77379
|
mr97310a 093a:010e All known CIF cams with this ID
|
||||||
|
mr97310a 093a:010f All known VGA cams with this ID
|
||||||
pac207 093a:2460 Qtec Webcam 100
|
pac207 093a:2460 Qtec Webcam 100
|
||||||
pac207 093a:2461 HP Webcam
|
pac207 093a:2461 HP Webcam
|
||||||
pac207 093a:2463 Philips SPC 220 NC
|
pac207 093a:2463 Philips SPC 220 NC
|
||||||
|
@ -302,6 +307,7 @@ sonixj 0c45:613b Surfer SN-206
|
||||||
sonixj 0c45:613c Sonix Pccam168
|
sonixj 0c45:613c Sonix Pccam168
|
||||||
sonixj 0c45:6143 Sonix Pccam168
|
sonixj 0c45:6143 Sonix Pccam168
|
||||||
sonixj 0c45:6148 Digitus DA-70811/ZSMC USB PC Camera ZS211/Microdia
|
sonixj 0c45:6148 Digitus DA-70811/ZSMC USB PC Camera ZS211/Microdia
|
||||||
|
sonixj 0c45:614a Frontech E-Ccam (JIL-2225)
|
||||||
sn9c20x 0c45:6240 PC Camera (SN9C201 + MT9M001)
|
sn9c20x 0c45:6240 PC Camera (SN9C201 + MT9M001)
|
||||||
sn9c20x 0c45:6242 PC Camera (SN9C201 + MT9M111)
|
sn9c20x 0c45:6242 PC Camera (SN9C201 + MT9M111)
|
||||||
sn9c20x 0c45:6248 PC Camera (SN9C201 + OV9655)
|
sn9c20x 0c45:6248 PC Camera (SN9C201 + OV9655)
|
||||||
|
@ -324,6 +330,10 @@ sn9c20x 0c45:62b0 PC Camera (SN9C202 + MT9V011/MT9V111/MT9V112)
|
||||||
sn9c20x 0c45:62b3 PC Camera (SN9C202 + OV9655)
|
sn9c20x 0c45:62b3 PC Camera (SN9C202 + OV9655)
|
||||||
sn9c20x 0c45:62bb PC Camera (SN9C202 + OV7660)
|
sn9c20x 0c45:62bb PC Camera (SN9C202 + OV7660)
|
||||||
sn9c20x 0c45:62bc PC Camera (SN9C202 + HV7131R)
|
sn9c20x 0c45:62bc PC Camera (SN9C202 + HV7131R)
|
||||||
|
sn9c2028 0c45:8001 Wild Planet Digital Spy Camera
|
||||||
|
sn9c2028 0c45:8003 Sakar #11199, #6637x, #67480 keychain cams
|
||||||
|
sn9c2028 0c45:8008 Mini-Shotz ms-350
|
||||||
|
sn9c2028 0c45:800a Vivitar Vivicam 3350B
|
||||||
sunplus 0d64:0303 Sunplus FashionCam DXG
|
sunplus 0d64:0303 Sunplus FashionCam DXG
|
||||||
ov519 0e96:c001 TRUST 380 USB2 SPACEC@M
|
ov519 0e96:c001 TRUST 380 USB2 SPACEC@M
|
||||||
etoms 102c:6151 Qcam Sangha CIF
|
etoms 102c:6151 Qcam Sangha CIF
|
||||||
|
@ -341,10 +351,11 @@ spca501 1776:501c Arowana 300K CMOS Camera
|
||||||
t613 17a1:0128 TASCORP JPEG Webcam, NGS Cyclops
|
t613 17a1:0128 TASCORP JPEG Webcam, NGS Cyclops
|
||||||
vc032x 17ef:4802 Lenovo Vc0323+MI1310_SOC
|
vc032x 17ef:4802 Lenovo Vc0323+MI1310_SOC
|
||||||
pac207 2001:f115 D-Link DSB-C120
|
pac207 2001:f115 D-Link DSB-C120
|
||||||
sq905c 2770:9050 sq905c
|
sq905c 2770:9050 Disney pix micro (CIF)
|
||||||
sq905c 2770:905c DualCamera
|
sq905c 2770:9052 Disney pix micro 2 (VGA)
|
||||||
sq905 2770:9120 Argus Digital Camera DC1512
|
sq905c 2770:905c All 11 known cameras with this ID
|
||||||
sq905c 2770:913d sq905c
|
sq905 2770:9120 All 24 known cameras with this ID
|
||||||
|
sq905c 2770:913d All 4 known cameras with this ID
|
||||||
spca500 2899:012c Toptro Industrial
|
spca500 2899:012c Toptro Industrial
|
||||||
ov519 8020:ef04 ov519
|
ov519 8020:ef04 ov519
|
||||||
spca508 8086:0110 Intel Easy PC Camera
|
spca508 8086:0110 Intel Easy PC Camera
|
||||||
|
|
|
@ -599,99 +599,13 @@ video_device::minor fields.
|
||||||
video buffer helper functions
|
video buffer helper functions
|
||||||
-----------------------------
|
-----------------------------
|
||||||
|
|
||||||
The v4l2 core API provides a standard method for dealing with video
|
The v4l2 core API provides a set of standard methods (called "videobuf")
|
||||||
buffers. Those methods allow a driver to implement read(), mmap() and
|
for dealing with video buffers. Those methods allow a driver to implement
|
||||||
overlay() on a consistent way.
|
read(), mmap() and overlay() in a consistent way. There are currently
|
||||||
|
methods for using video buffers on devices that supports DMA with
|
||||||
|
scatter/gather method (videobuf-dma-sg), DMA with linear access
|
||||||
|
(videobuf-dma-contig), and vmalloced buffers, mostly used on USB drivers
|
||||||
|
(videobuf-vmalloc).
|
||||||
|
|
||||||
There are currently methods for using video buffers on devices that
|
Please see Documentation/video4linux/videobuf for more information on how
|
||||||
supports DMA with scatter/gather method (videobuf-dma-sg), DMA with
|
to use the videobuf layer.
|
||||||
linear access (videobuf-dma-contig), and vmalloced buffers, mostly
|
|
||||||
used on USB drivers (videobuf-vmalloc).
|
|
||||||
|
|
||||||
Any driver using videobuf should provide operations (callbacks) for
|
|
||||||
four handlers:
|
|
||||||
|
|
||||||
ops->buf_setup - calculates the size of the video buffers and avoid they
|
|
||||||
to waste more than some maximum limit of RAM;
|
|
||||||
ops->buf_prepare - fills the video buffer structs and calls
|
|
||||||
videobuf_iolock() to alloc and prepare mmaped memory;
|
|
||||||
ops->buf_queue - advices the driver that another buffer were
|
|
||||||
requested (by read() or by QBUF);
|
|
||||||
ops->buf_release - frees any buffer that were allocated.
|
|
||||||
|
|
||||||
In order to use it, the driver need to have a code (generally called at
|
|
||||||
interrupt context) that will properly handle the buffer request lists,
|
|
||||||
announcing that a new buffer were filled.
|
|
||||||
|
|
||||||
The irq handling code should handle the videobuf task lists, in order
|
|
||||||
to advice videobuf that a new frame were filled, in order to honor to a
|
|
||||||
request. The code is generally like this one:
|
|
||||||
if (list_empty(&dma_q->active))
|
|
||||||
return;
|
|
||||||
|
|
||||||
buf = list_entry(dma_q->active.next, struct vbuffer, vb.queue);
|
|
||||||
|
|
||||||
if (!waitqueue_active(&buf->vb.done))
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* Some logic to handle the buf may be needed here */
|
|
||||||
|
|
||||||
list_del(&buf->vb.queue);
|
|
||||||
do_gettimeofday(&buf->vb.ts);
|
|
||||||
wake_up(&buf->vb.done);
|
|
||||||
|
|
||||||
Those are the videobuffer functions used on drivers, implemented on
|
|
||||||
videobuf-core:
|
|
||||||
|
|
||||||
- Videobuf init functions
|
|
||||||
videobuf_queue_sg_init()
|
|
||||||
Initializes the videobuf infrastructure. This function should be
|
|
||||||
called before any other videobuf function on drivers that uses DMA
|
|
||||||
Scatter/Gather buffers.
|
|
||||||
|
|
||||||
videobuf_queue_dma_contig_init
|
|
||||||
Initializes the videobuf infrastructure. This function should be
|
|
||||||
called before any other videobuf function on drivers that need DMA
|
|
||||||
contiguous buffers.
|
|
||||||
|
|
||||||
videobuf_queue_vmalloc_init()
|
|
||||||
Initializes the videobuf infrastructure. This function should be
|
|
||||||
called before any other videobuf function on USB (and other drivers)
|
|
||||||
that need a vmalloced type of videobuf.
|
|
||||||
|
|
||||||
- videobuf_iolock()
|
|
||||||
Prepares the videobuf memory for the proper method (read, mmap, overlay).
|
|
||||||
|
|
||||||
- videobuf_queue_is_busy()
|
|
||||||
Checks if a videobuf is streaming.
|
|
||||||
|
|
||||||
- videobuf_queue_cancel()
|
|
||||||
Stops video handling.
|
|
||||||
|
|
||||||
- videobuf_mmap_free()
|
|
||||||
frees mmap buffers.
|
|
||||||
|
|
||||||
- videobuf_stop()
|
|
||||||
Stops video handling, ends mmap and frees mmap and other buffers.
|
|
||||||
|
|
||||||
- V4L2 api functions. Those functions correspond to VIDIOC_foo ioctls:
|
|
||||||
videobuf_reqbufs(), videobuf_querybuf(), videobuf_qbuf(),
|
|
||||||
videobuf_dqbuf(), videobuf_streamon(), videobuf_streamoff().
|
|
||||||
|
|
||||||
- V4L1 api function (corresponds to VIDIOCMBUF ioctl):
|
|
||||||
videobuf_cgmbuf()
|
|
||||||
This function is used to provide backward compatibility with V4L1
|
|
||||||
API.
|
|
||||||
|
|
||||||
- Some help functions for read()/poll() operations:
|
|
||||||
videobuf_read_stream()
|
|
||||||
For continuous stream read()
|
|
||||||
videobuf_read_one()
|
|
||||||
For snapshot read()
|
|
||||||
videobuf_poll_stream()
|
|
||||||
polling help function
|
|
||||||
|
|
||||||
The better way to understand it is to take a look at vivi driver. One
|
|
||||||
of the main reasons for vivi is to be a videobuf usage example. the
|
|
||||||
vivi_thread_tick() does the task that the IRQ callback would do on PCI
|
|
||||||
drivers (or the irq callback on USB).
|
|
||||||
|
|
360
Documentation/video4linux/videobuf
Normal file
360
Documentation/video4linux/videobuf
Normal file
|
@ -0,0 +1,360 @@
|
||||||
|
An introduction to the videobuf layer
|
||||||
|
Jonathan Corbet <corbet@lwn.net>
|
||||||
|
Current as of 2.6.33
|
||||||
|
|
||||||
|
The videobuf layer functions as a sort of glue layer between a V4L2 driver
|
||||||
|
and user space. It handles the allocation and management of buffers for
|
||||||
|
the storage of video frames. There is a set of functions which can be used
|
||||||
|
to implement many of the standard POSIX I/O system calls, including read(),
|
||||||
|
poll(), and, happily, mmap(). Another set of functions can be used to
|
||||||
|
implement the bulk of the V4L2 ioctl() calls related to streaming I/O,
|
||||||
|
including buffer allocation, queueing and dequeueing, and streaming
|
||||||
|
control. Using videobuf imposes a few design decisions on the driver
|
||||||
|
author, but the payback comes in the form of reduced code in the driver and
|
||||||
|
a consistent implementation of the V4L2 user-space API.
|
||||||
|
|
||||||
|
Buffer types
|
||||||
|
|
||||||
|
Not all video devices use the same kind of buffers. In fact, there are (at
|
||||||
|
least) three common variations:
|
||||||
|
|
||||||
|
- Buffers which are scattered in both the physical and (kernel) virtual
|
||||||
|
address spaces. (Almost) all user-space buffers are like this, but it
|
||||||
|
makes great sense to allocate kernel-space buffers this way as well when
|
||||||
|
it is possible. Unfortunately, it is not always possible; working with
|
||||||
|
this kind of buffer normally requires hardware which can do
|
||||||
|
scatter/gather DMA operations.
|
||||||
|
|
||||||
|
- Buffers which are physically scattered, but which are virtually
|
||||||
|
contiguous; buffers allocated with vmalloc(), in other words. These
|
||||||
|
buffers are just as hard to use for DMA operations, but they can be
|
||||||
|
useful in situations where DMA is not available but virtually-contiguous
|
||||||
|
buffers are convenient.
|
||||||
|
|
||||||
|
- Buffers which are physically contiguous. Allocation of this kind of
|
||||||
|
buffer can be unreliable on fragmented systems, but simpler DMA
|
||||||
|
controllers cannot deal with anything else.
|
||||||
|
|
||||||
|
Videobuf can work with all three types of buffers, but the driver author
|
||||||
|
must pick one at the outset and design the driver around that decision.
|
||||||
|
|
||||||
|
[It's worth noting that there's a fourth kind of buffer: "overlay" buffers
|
||||||
|
which are located within the system's video memory. The overlay
|
||||||
|
functionality is considered to be deprecated for most use, but it still
|
||||||
|
shows up occasionally in system-on-chip drivers where the performance
|
||||||
|
benefits merit the use of this technique. Overlay buffers can be handled
|
||||||
|
as a form of scattered buffer, but there are very few implementations in
|
||||||
|
the kernel and a description of this technique is currently beyond the
|
||||||
|
scope of this document.]
|
||||||
|
|
||||||
|
Data structures, callbacks, and initialization
|
||||||
|
|
||||||
|
Depending on which type of buffers are being used, the driver should
|
||||||
|
include one of the following files:
|
||||||
|
|
||||||
|
<media/videobuf-dma-sg.h> /* Physically scattered */
|
||||||
|
<media/videobuf-vmalloc.h> /* vmalloc() buffers */
|
||||||
|
<media/videobuf-dma-contig.h> /* Physically contiguous */
|
||||||
|
|
||||||
|
The driver's data structure describing a V4L2 device should include a
|
||||||
|
struct videobuf_queue instance for the management of the buffer queue,
|
||||||
|
along with a list_head for the queue of available buffers. There will also
|
||||||
|
need to be an interrupt-safe spinlock which is used to protect (at least)
|
||||||
|
the queue.
|
||||||
|
|
||||||
|
The next step is to write four simple callbacks to help videobuf deal with
|
||||||
|
the management of buffers:
|
||||||
|
|
||||||
|
struct videobuf_queue_ops {
|
||||||
|
int (*buf_setup)(struct videobuf_queue *q,
|
||||||
|
unsigned int *count, unsigned int *size);
|
||||||
|
int (*buf_prepare)(struct videobuf_queue *q,
|
||||||
|
struct videobuf_buffer *vb,
|
||||||
|
enum v4l2_field field);
|
||||||
|
void (*buf_queue)(struct videobuf_queue *q,
|
||||||
|
struct videobuf_buffer *vb);
|
||||||
|
void (*buf_release)(struct videobuf_queue *q,
|
||||||
|
struct videobuf_buffer *vb);
|
||||||
|
};
|
||||||
|
|
||||||
|
buf_setup() is called early in the I/O process, when streaming is being
|
||||||
|
initiated; its purpose is to tell videobuf about the I/O stream. The count
|
||||||
|
parameter will be a suggested number of buffers to use; the driver should
|
||||||
|
check it for rationality and adjust it if need be. As a practical rule, a
|
||||||
|
minimum of two buffers are needed for proper streaming, and there is
|
||||||
|
usually a maximum (which cannot exceed 32) which makes sense for each
|
||||||
|
device. The size parameter should be set to the expected (maximum) size
|
||||||
|
for each frame of data.
|
||||||
|
|
||||||
|
Each buffer (in the form of a struct videobuf_buffer pointer) will be
|
||||||
|
passed to buf_prepare(), which should set the buffer's size, width, height,
|
||||||
|
and field fields properly. If the buffer's state field is
|
||||||
|
VIDEOBUF_NEEDS_INIT, the driver should pass it to:
|
||||||
|
|
||||||
|
int videobuf_iolock(struct videobuf_queue* q, struct videobuf_buffer *vb,
|
||||||
|
struct v4l2_framebuffer *fbuf);
|
||||||
|
|
||||||
|
Among other things, this call will usually allocate memory for the buffer.
|
||||||
|
Finally, the buf_prepare() function should set the buffer's state to
|
||||||
|
VIDEOBUF_PREPARED.
|
||||||
|
|
||||||
|
When a buffer is queued for I/O, it is passed to buf_queue(), which should
|
||||||
|
put it onto the driver's list of available buffers and set its state to
|
||||||
|
VIDEOBUF_QUEUED. Note that this function is called with the queue spinlock
|
||||||
|
held; if it tries to acquire it as well things will come to a screeching
|
||||||
|
halt. Yes, this is the voice of experience. Note also that videobuf may
|
||||||
|
wait on the first buffer in the queue; placing other buffers in front of it
|
||||||
|
could again gum up the works. So use list_add_tail() to enqueue buffers.
|
||||||
|
|
||||||
|
Finally, buf_release() is called when a buffer is no longer intended to be
|
||||||
|
used. The driver should ensure that there is no I/O active on the buffer,
|
||||||
|
then pass it to the appropriate free routine(s):
|
||||||
|
|
||||||
|
/* Scatter/gather drivers */
|
||||||
|
int videobuf_dma_unmap(struct videobuf_queue *q,
|
||||||
|
struct videobuf_dmabuf *dma);
|
||||||
|
int videobuf_dma_free(struct videobuf_dmabuf *dma);
|
||||||
|
|
||||||
|
/* vmalloc drivers */
|
||||||
|
void videobuf_vmalloc_free (struct videobuf_buffer *buf);
|
||||||
|
|
||||||
|
/* Contiguous drivers */
|
||||||
|
void videobuf_dma_contig_free(struct videobuf_queue *q,
|
||||||
|
struct videobuf_buffer *buf);
|
||||||
|
|
||||||
|
One way to ensure that a buffer is no longer under I/O is to pass it to:
|
||||||
|
|
||||||
|
int videobuf_waiton(struct videobuf_buffer *vb, int non_blocking, int intr);
|
||||||
|
|
||||||
|
Here, vb is the buffer, non_blocking indicates whether non-blocking I/O
|
||||||
|
should be used (it should be zero in the buf_release() case), and intr
|
||||||
|
controls whether an interruptible wait is used.
|
||||||
|
|
||||||
|
File operations
|
||||||
|
|
||||||
|
At this point, much of the work is done; much of the rest is slipping
|
||||||
|
videobuf calls into the implementation of the other driver callbacks. The
|
||||||
|
first step is in the open() function, which must initialize the
|
||||||
|
videobuf queue. The function to use depends on the type of buffer used:
|
||||||
|
|
||||||
|
void videobuf_queue_sg_init(struct videobuf_queue *q,
|
||||||
|
struct videobuf_queue_ops *ops,
|
||||||
|
struct device *dev,
|
||||||
|
spinlock_t *irqlock,
|
||||||
|
enum v4l2_buf_type type,
|
||||||
|
enum v4l2_field field,
|
||||||
|
unsigned int msize,
|
||||||
|
void *priv);
|
||||||
|
|
||||||
|
void videobuf_queue_vmalloc_init(struct videobuf_queue *q,
|
||||||
|
struct videobuf_queue_ops *ops,
|
||||||
|
struct device *dev,
|
||||||
|
spinlock_t *irqlock,
|
||||||
|
enum v4l2_buf_type type,
|
||||||
|
enum v4l2_field field,
|
||||||
|
unsigned int msize,
|
||||||
|
void *priv);
|
||||||
|
|
||||||
|
void videobuf_queue_dma_contig_init(struct videobuf_queue *q,
|
||||||
|
struct videobuf_queue_ops *ops,
|
||||||
|
struct device *dev,
|
||||||
|
spinlock_t *irqlock,
|
||||||
|
enum v4l2_buf_type type,
|
||||||
|
enum v4l2_field field,
|
||||||
|
unsigned int msize,
|
||||||
|
void *priv);
|
||||||
|
|
||||||
|
In each case, the parameters are the same: q is the queue structure for the
|
||||||
|
device, ops is the set of callbacks as described above, dev is the device
|
||||||
|
structure for this video device, irqlock is an interrupt-safe spinlock to
|
||||||
|
protect access to the data structures, type is the buffer type used by the
|
||||||
|
device (cameras will use V4L2_BUF_TYPE_VIDEO_CAPTURE, for example), field
|
||||||
|
describes which field is being captured (often V4L2_FIELD_NONE for
|
||||||
|
progressive devices), msize is the size of any containing structure used
|
||||||
|
around struct videobuf_buffer, and priv is a private data pointer which
|
||||||
|
shows up in the priv_data field of struct videobuf_queue. Note that these
|
||||||
|
are void functions which, evidently, are immune to failure.
|
||||||
|
|
||||||
|
V4L2 capture drivers can be written to support either of two APIs: the
|
||||||
|
read() system call and the rather more complicated streaming mechanism. As
|
||||||
|
a general rule, it is necessary to support both to ensure that all
|
||||||
|
applications have a chance of working with the device. Videobuf makes it
|
||||||
|
easy to do that with the same code. To implement read(), the driver need
|
||||||
|
only make a call to one of:
|
||||||
|
|
||||||
|
ssize_t videobuf_read_one(struct videobuf_queue *q,
|
||||||
|
char __user *data, size_t count,
|
||||||
|
loff_t *ppos, int nonblocking);
|
||||||
|
|
||||||
|
ssize_t videobuf_read_stream(struct videobuf_queue *q,
|
||||||
|
char __user *data, size_t count,
|
||||||
|
loff_t *ppos, int vbihack, int nonblocking);
|
||||||
|
|
||||||
|
Either one of these functions will read frame data into data, returning the
|
||||||
|
amount actually read; the difference is that videobuf_read_one() will only
|
||||||
|
read a single frame, while videobuf_read_stream() will read multiple frames
|
||||||
|
if they are needed to satisfy the count requested by the application. A
|
||||||
|
typical driver read() implementation will start the capture engine, call
|
||||||
|
one of the above functions, then stop the engine before returning (though a
|
||||||
|
smarter implementation might leave the engine running for a little while in
|
||||||
|
anticipation of another read() call happening in the near future).
|
||||||
|
|
||||||
|
The poll() function can usually be implemented with a direct call to:
|
||||||
|
|
||||||
|
unsigned int videobuf_poll_stream(struct file *file,
|
||||||
|
struct videobuf_queue *q,
|
||||||
|
poll_table *wait);
|
||||||
|
|
||||||
|
Note that the actual wait queue eventually used will be the one associated
|
||||||
|
with the first available buffer.
|
||||||
|
|
||||||
|
When streaming I/O is done to kernel-space buffers, the driver must support
|
||||||
|
the mmap() system call to enable user space to access the data. In many
|
||||||
|
V4L2 drivers, the often-complex mmap() implementation simplifies to a
|
||||||
|
single call to:
|
||||||
|
|
||||||
|
int videobuf_mmap_mapper(struct videobuf_queue *q,
|
||||||
|
struct vm_area_struct *vma);
|
||||||
|
|
||||||
|
Everything else is handled by the videobuf code.
|
||||||
|
|
||||||
|
The release() function requires two separate videobuf calls:
|
||||||
|
|
||||||
|
void videobuf_stop(struct videobuf_queue *q);
|
||||||
|
int videobuf_mmap_free(struct videobuf_queue *q);
|
||||||
|
|
||||||
|
The call to videobuf_stop() terminates any I/O in progress - though it is
|
||||||
|
still up to the driver to stop the capture engine. The call to
|
||||||
|
videobuf_mmap_free() will ensure that all buffers have been unmapped; if
|
||||||
|
so, they will all be passed to the buf_release() callback. If buffers
|
||||||
|
remain mapped, videobuf_mmap_free() returns an error code instead. The
|
||||||
|
purpose is clearly to cause the closing of the file descriptor to fail if
|
||||||
|
buffers are still mapped, but every driver in the 2.6.32 kernel cheerfully
|
||||||
|
ignores its return value.
|
||||||
|
|
||||||
|
ioctl() operations
|
||||||
|
|
||||||
|
The V4L2 API includes a very long list of driver callbacks to respond to
|
||||||
|
the many ioctl() commands made available to user space. A number of these
|
||||||
|
- those associated with streaming I/O - turn almost directly into videobuf
|
||||||
|
calls. The relevant helper functions are:
|
||||||
|
|
||||||
|
int videobuf_reqbufs(struct videobuf_queue *q,
|
||||||
|
struct v4l2_requestbuffers *req);
|
||||||
|
int videobuf_querybuf(struct videobuf_queue *q, struct v4l2_buffer *b);
|
||||||
|
int videobuf_qbuf(struct videobuf_queue *q, struct v4l2_buffer *b);
|
||||||
|
int videobuf_dqbuf(struct videobuf_queue *q, struct v4l2_buffer *b,
|
||||||
|
int nonblocking);
|
||||||
|
int videobuf_streamon(struct videobuf_queue *q);
|
||||||
|
int videobuf_streamoff(struct videobuf_queue *q);
|
||||||
|
int videobuf_cgmbuf(struct videobuf_queue *q, struct video_mbuf *mbuf,
|
||||||
|
int count);
|
||||||
|
|
||||||
|
So, for example, a VIDIOC_REQBUFS call turns into a call to the driver's
|
||||||
|
vidioc_reqbufs() callback which, in turn, usually only needs to locate the
|
||||||
|
proper struct videobuf_queue pointer and pass it to videobuf_reqbufs().
|
||||||
|
These support functions can replace a great deal of buffer management
|
||||||
|
boilerplate in a lot of V4L2 drivers.
|
||||||
|
|
||||||
|
The vidioc_streamon() and vidioc_streamoff() functions will be a bit more
|
||||||
|
complex, of course, since they will also need to deal with starting and
|
||||||
|
stopping the capture engine. videobuf_cgmbuf(), called from the driver's
|
||||||
|
vidiocgmbuf() function, only exists if the V4L1 compatibility module has
|
||||||
|
been selected with CONFIG_VIDEO_V4L1_COMPAT, so its use must be surrounded
|
||||||
|
with #ifdef directives.
|
||||||
|
|
||||||
|
Buffer allocation
|
||||||
|
|
||||||
|
Thus far, we have talked about buffers, but have not looked at how they are
|
||||||
|
allocated. The scatter/gather case is the most complex on this front. For
|
||||||
|
allocation, the driver can leave buffer allocation entirely up to the
|
||||||
|
videobuf layer; in this case, buffers will be allocated as anonymous
|
||||||
|
user-space pages and will be very scattered indeed. If the application is
|
||||||
|
using user-space buffers, no allocation is needed; the videobuf layer will
|
||||||
|
take care of calling get_user_pages() and filling in the scatterlist array.
|
||||||
|
|
||||||
|
If the driver needs to do its own memory allocation, it should be done in
|
||||||
|
the vidioc_reqbufs() function, *after* calling videobuf_reqbufs(). The
|
||||||
|
first step is a call to:
|
||||||
|
|
||||||
|
struct videobuf_dmabuf *videobuf_to_dma(struct videobuf_buffer *buf);
|
||||||
|
|
||||||
|
The returned videobuf_dmabuf structure (defined in
|
||||||
|
<media/videobuf-dma-sg.h>) includes a couple of relevant fields:
|
||||||
|
|
||||||
|
struct scatterlist *sglist;
|
||||||
|
int sglen;
|
||||||
|
|
||||||
|
The driver must allocate an appropriately-sized scatterlist array and
|
||||||
|
populate it with pointers to the pieces of the allocated buffer; sglen
|
||||||
|
should be set to the length of the array.
|
||||||
|
|
||||||
|
Drivers using the vmalloc() method need not (and cannot) concern themselves
|
||||||
|
with buffer allocation at all; videobuf will handle those details. The
|
||||||
|
same is normally true of contiguous-DMA drivers as well; videobuf will
|
||||||
|
allocate the buffers (with dma_alloc_coherent()) when it sees fit. That
|
||||||
|
means that these drivers may be trying to do high-order allocations at any
|
||||||
|
time, an operation which is not always guaranteed to work. Some drivers
|
||||||
|
play tricks by allocating DMA space at system boot time; videobuf does not
|
||||||
|
currently play well with those drivers.
|
||||||
|
|
||||||
|
As of 2.6.31, contiguous-DMA drivers can work with a user-supplied buffer,
|
||||||
|
as long as that buffer is physically contiguous. Normal user-space
|
||||||
|
allocations will not meet that criterion, but buffers obtained from other
|
||||||
|
kernel drivers, or those contained within huge pages, will work with these
|
||||||
|
drivers.
|
||||||
|
|
||||||
|
Filling the buffers
|
||||||
|
|
||||||
|
The final part of a videobuf implementation has no direct callback - it's
|
||||||
|
the portion of the code which actually puts frame data into the buffers,
|
||||||
|
usually in response to interrupts from the device. For all types of
|
||||||
|
drivers, this process works approximately as follows:
|
||||||
|
|
||||||
|
- Obtain the next available buffer and make sure that somebody is actually
|
||||||
|
waiting for it.
|
||||||
|
|
||||||
|
- Get a pointer to the memory and put video data there.
|
||||||
|
|
||||||
|
- Mark the buffer as done and wake up the process waiting for it.
|
||||||
|
|
||||||
|
Step (1) above is done by looking at the driver-managed list_head structure
|
||||||
|
- the one which is filled in the buf_queue() callback. Because starting
|
||||||
|
the engine and enqueueing buffers are done in separate steps, it's possible
|
||||||
|
for the engine to be running without any buffers available - in the
|
||||||
|
vmalloc() case especially. So the driver should be prepared for the list
|
||||||
|
to be empty. It is equally possible that nobody is yet interested in the
|
||||||
|
buffer; the driver should not remove it from the list or fill it until a
|
||||||
|
process is waiting on it. That test can be done by examining the buffer's
|
||||||
|
done field (a wait_queue_head_t structure) with waitqueue_active().
|
||||||
|
|
||||||
|
A buffer's state should be set to VIDEOBUF_ACTIVE before being mapped for
|
||||||
|
DMA; that ensures that the videobuf layer will not try to do anything with
|
||||||
|
it while the device is transferring data.
|
||||||
|
|
||||||
|
For scatter/gather drivers, the needed memory pointers will be found in the
|
||||||
|
scatterlist structure described above. Drivers using the vmalloc() method
|
||||||
|
can get a memory pointer with:
|
||||||
|
|
||||||
|
void *videobuf_to_vmalloc(struct videobuf_buffer *buf);
|
||||||
|
|
||||||
|
For contiguous DMA drivers, the function to use is:
|
||||||
|
|
||||||
|
dma_addr_t videobuf_to_dma_contig(struct videobuf_buffer *buf);
|
||||||
|
|
||||||
|
The contiguous DMA API goes out of its way to hide the kernel-space address
|
||||||
|
of the DMA buffer from drivers.
|
||||||
|
|
||||||
|
The final step is to set the size field of the relevant videobuf_buffer
|
||||||
|
structure to the actual size of the captured image, set state to
|
||||||
|
VIDEOBUF_DONE, then call wake_up() on the done queue. At this point, the
|
||||||
|
buffer is owned by the videobuf layer and the driver should not touch it
|
||||||
|
again.
|
||||||
|
|
||||||
|
Developers who are interested in more information can go into the relevant
|
||||||
|
header files; there are a few low-level functions declared there which have
|
||||||
|
not been talked about here. Also worthwhile is the vivi driver
|
||||||
|
(drivers/media/video/vivi.c), which is maintained as an example of how V4L2
|
||||||
|
drivers should be written. Vivi only uses the vmalloc() API, but it's good
|
||||||
|
enough to get started with. Note also that all of these calls are exported
|
||||||
|
GPL-only, so they will not be available to non-GPL kernel modules.
|
|
@ -166,19 +166,13 @@ NUMA
|
||||||
|
|
||||||
numa=noacpi Don't parse the SRAT table for NUMA setup
|
numa=noacpi Don't parse the SRAT table for NUMA setup
|
||||||
|
|
||||||
numa=fake=CMDLINE
|
numa=fake=<size>[MG]
|
||||||
If a number, fakes CMDLINE nodes and ignores NUMA setup of the
|
If given as a memory unit, fills all system RAM with nodes of
|
||||||
actual machine. Otherwise, system memory is configured
|
size interleaved over physical nodes.
|
||||||
depending on the sizes and coefficients listed. For example:
|
|
||||||
numa=fake=2*512,1024,4*256,*128
|
numa=fake=<N>
|
||||||
gives two 512M nodes, a 1024M node, four 256M nodes, and the
|
If given as an integer, fills all system RAM with N fake nodes
|
||||||
rest split into 128M chunks. If the last character of CMDLINE
|
interleaved over physical nodes.
|
||||||
is a *, the remaining memory is divided up equally among its
|
|
||||||
coefficient:
|
|
||||||
numa=fake=2*512,2*
|
|
||||||
gives two 512M nodes and the rest split into two nodes.
|
|
||||||
Otherwise, the remaining system RAM is allocated to an
|
|
||||||
additional node.
|
|
||||||
|
|
||||||
ACPI
|
ACPI
|
||||||
|
|
||||||
|
|
125
MAINTAINERS
125
MAINTAINERS
|
@ -221,6 +221,7 @@ F: drivers/net/acenic*
|
||||||
|
|
||||||
ACER ASPIRE ONE TEMPERATURE AND FAN DRIVER
|
ACER ASPIRE ONE TEMPERATURE AND FAN DRIVER
|
||||||
M: Peter Feuerer <peter@piie.net>
|
M: Peter Feuerer <peter@piie.net>
|
||||||
|
L: platform-driver-x86@vger.kernel.org
|
||||||
W: http://piie.net/?section=acerhdf
|
W: http://piie.net/?section=acerhdf
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/platform/x86/acerhdf.c
|
F: drivers/platform/x86/acerhdf.c
|
||||||
|
@ -228,6 +229,7 @@ F: drivers/platform/x86/acerhdf.c
|
||||||
ACER WMI LAPTOP EXTRAS
|
ACER WMI LAPTOP EXTRAS
|
||||||
M: Carlos Corbacho <carlos@strangeworlds.co.uk>
|
M: Carlos Corbacho <carlos@strangeworlds.co.uk>
|
||||||
L: aceracpi@googlegroups.com (subscribers-only)
|
L: aceracpi@googlegroups.com (subscribers-only)
|
||||||
|
L: platform-driver-x86@vger.kernel.org
|
||||||
W: http://code.google.com/p/aceracpi
|
W: http://code.google.com/p/aceracpi
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/platform/x86/acer-wmi.c
|
F: drivers/platform/x86/acer-wmi.c
|
||||||
|
@ -288,7 +290,7 @@ F: drivers/acpi/video.c
|
||||||
|
|
||||||
ACPI WMI DRIVER
|
ACPI WMI DRIVER
|
||||||
M: Carlos Corbacho <carlos@strangeworlds.co.uk>
|
M: Carlos Corbacho <carlos@strangeworlds.co.uk>
|
||||||
L: linux-acpi@vger.kernel.org
|
L: platform-driver-x86@vger.kernel.org
|
||||||
W: http://www.lesswatts.org/projects/acpi/
|
W: http://www.lesswatts.org/projects/acpi/
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/platform/x86/wmi.c
|
F: drivers/platform/x86/wmi.c
|
||||||
|
@ -616,10 +618,10 @@ M: Richard Purdie <rpurdie@rpsys.net>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
|
||||||
ARM/CORTINA SYSTEMS GEMINI ARM ARCHITECTURE
|
ARM/CORTINA SYSTEMS GEMINI ARM ARCHITECTURE
|
||||||
M: Paulius Zaleckas <paulius.zaleckas@teltonika.lt>
|
M: Paulius Zaleckas <paulius.zaleckas@gmail.com>
|
||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
T: git git://gitorious.org/linux-gemini/mainline.git
|
T: git git://gitorious.org/linux-gemini/mainline.git
|
||||||
S: Maintained
|
S: Odd Fixes
|
||||||
F: arch/arm/mach-gemini/
|
F: arch/arm/mach-gemini/
|
||||||
|
|
||||||
ARM/EBSA110 MACHINE SUPPORT
|
ARM/EBSA110 MACHINE SUPPORT
|
||||||
|
@ -641,9 +643,9 @@ T: topgit git://git.openezx.org/openezx.git
|
||||||
F: arch/arm/mach-pxa/ezx.c
|
F: arch/arm/mach-pxa/ezx.c
|
||||||
|
|
||||||
ARM/FARADAY FA526 PORT
|
ARM/FARADAY FA526 PORT
|
||||||
M: Paulius Zaleckas <paulius.zaleckas@teltonika.lt>
|
M: Paulius Zaleckas <paulius.zaleckas@gmail.com>
|
||||||
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
|
||||||
S: Maintained
|
S: Odd Fixes
|
||||||
F: arch/arm/mm/*-fa*
|
F: arch/arm/mm/*-fa*
|
||||||
|
|
||||||
ARM/FOOTBRIDGE ARCHITECTURE
|
ARM/FOOTBRIDGE ARCHITECTURE
|
||||||
|
@ -968,6 +970,7 @@ ASUS ACPI EXTRAS DRIVER
|
||||||
M: Corentin Chary <corentincj@iksaif.net>
|
M: Corentin Chary <corentincj@iksaif.net>
|
||||||
M: Karol Kozimor <sziwan@users.sourceforge.net>
|
M: Karol Kozimor <sziwan@users.sourceforge.net>
|
||||||
L: acpi4asus-user@lists.sourceforge.net
|
L: acpi4asus-user@lists.sourceforge.net
|
||||||
|
L: platform-driver-x86@vger.kernel.org
|
||||||
W: http://acpi4asus.sf.net
|
W: http://acpi4asus.sf.net
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/platform/x86/asus_acpi.c
|
F: drivers/platform/x86/asus_acpi.c
|
||||||
|
@ -981,6 +984,7 @@ F: drivers/hwmon/asb100.c
|
||||||
ASUS LAPTOP EXTRAS DRIVER
|
ASUS LAPTOP EXTRAS DRIVER
|
||||||
M: Corentin Chary <corentincj@iksaif.net>
|
M: Corentin Chary <corentincj@iksaif.net>
|
||||||
L: acpi4asus-user@lists.sourceforge.net
|
L: acpi4asus-user@lists.sourceforge.net
|
||||||
|
L: platform-driver-x86@vger.kernel.org
|
||||||
W: http://acpi4asus.sf.net
|
W: http://acpi4asus.sf.net
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/platform/x86/asus-laptop.c
|
F: drivers/platform/x86/asus-laptop.c
|
||||||
|
@ -1473,6 +1477,7 @@ F: drivers/scsi/fnic/
|
||||||
CMPC ACPI DRIVER
|
CMPC ACPI DRIVER
|
||||||
M: Thadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
|
M: Thadeu Lima de Souza Cascardo <cascardo@holoscopio.com>
|
||||||
M: Daniel Oliveira Nascimento <don@syst.com.br>
|
M: Daniel Oliveira Nascimento <don@syst.com.br>
|
||||||
|
L: platform-driver-x86@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/platform/x86/classmate-laptop.c
|
F: drivers/platform/x86/classmate-laptop.c
|
||||||
|
|
||||||
|
@ -1516,6 +1521,7 @@ F: drivers/pci/hotplug/cpcihp_generic.c
|
||||||
|
|
||||||
COMPAL LAPTOP SUPPORT
|
COMPAL LAPTOP SUPPORT
|
||||||
M: Cezary Jackiewicz <cezary.jackiewicz@gmail.com>
|
M: Cezary Jackiewicz <cezary.jackiewicz@gmail.com>
|
||||||
|
L: platform-driver-x86@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/platform/x86/compal-laptop.c
|
F: drivers/platform/x86/compal-laptop.c
|
||||||
|
|
||||||
|
@ -1733,10 +1739,9 @@ F: include/linux/tfrc.h
|
||||||
F: net/dccp/
|
F: net/dccp/
|
||||||
|
|
||||||
DECnet NETWORK LAYER
|
DECnet NETWORK LAYER
|
||||||
M: Christine Caulfield <christine.caulfield@googlemail.com>
|
|
||||||
W: http://linux-decnet.sourceforge.net
|
W: http://linux-decnet.sourceforge.net
|
||||||
L: linux-decnet-user@lists.sourceforge.net
|
L: linux-decnet-user@lists.sourceforge.net
|
||||||
S: Maintained
|
S: Orphan
|
||||||
F: Documentation/networking/decnet.txt
|
F: Documentation/networking/decnet.txt
|
||||||
F: net/decnet/
|
F: net/decnet/
|
||||||
|
|
||||||
|
@ -1747,6 +1752,7 @@ F: drivers/net/defxx.*
|
||||||
|
|
||||||
DELL LAPTOP DRIVER
|
DELL LAPTOP DRIVER
|
||||||
M: Matthew Garrett <mjg59@srcf.ucam.org>
|
M: Matthew Garrett <mjg59@srcf.ucam.org>
|
||||||
|
L: platform-driver-x86@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/platform/x86/dell-laptop.c
|
F: drivers/platform/x86/dell-laptop.c
|
||||||
|
|
||||||
|
@ -2029,6 +2035,7 @@ F: drivers/edac/r82600_edac.c
|
||||||
EEEPC LAPTOP EXTRAS DRIVER
|
EEEPC LAPTOP EXTRAS DRIVER
|
||||||
M: Corentin Chary <corentincj@iksaif.net>
|
M: Corentin Chary <corentincj@iksaif.net>
|
||||||
L: acpi4asus-user@lists.sourceforge.net
|
L: acpi4asus-user@lists.sourceforge.net
|
||||||
|
L: platform-driver-x86@vger.kernel.org
|
||||||
W: http://acpi4asus.sf.net
|
W: http://acpi4asus.sf.net
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/platform/x86/eeepc-laptop.c
|
F: drivers/platform/x86/eeepc-laptop.c
|
||||||
|
@ -2142,6 +2149,17 @@ S: Supported
|
||||||
F: Documentation/fault-injection/
|
F: Documentation/fault-injection/
|
||||||
F: lib/fault-inject.c
|
F: lib/fault-inject.c
|
||||||
|
|
||||||
|
FCOE SUBSYSTEM (libfc, libfcoe, fcoe)
|
||||||
|
M: Robert Love <robert.w.love@intel.com>
|
||||||
|
L: devel@open-fcoe.org
|
||||||
|
W: www.Open-FCoE.org
|
||||||
|
S: Supported
|
||||||
|
F: drivers/scsi/libfc/
|
||||||
|
F: drivers/scsi/fcoe/
|
||||||
|
F: include/scsi/fc/
|
||||||
|
F: include/scsi/libfc.h
|
||||||
|
F: include/scsi/libfcoe.h
|
||||||
|
|
||||||
FILE LOCKING (flock() and fcntl()/lockf())
|
FILE LOCKING (flock() and fcntl()/lockf())
|
||||||
M: Matthew Wilcox <matthew@wil.cx>
|
M: Matthew Wilcox <matthew@wil.cx>
|
||||||
L: linux-fsdevel@vger.kernel.org
|
L: linux-fsdevel@vger.kernel.org
|
||||||
|
@ -2296,7 +2314,7 @@ F: arch/frv/
|
||||||
|
|
||||||
FUJITSU LAPTOP EXTRAS
|
FUJITSU LAPTOP EXTRAS
|
||||||
M: Jonathan Woithe <jwoithe@physics.adelaide.edu.au>
|
M: Jonathan Woithe <jwoithe@physics.adelaide.edu.au>
|
||||||
L: linux-acpi@vger.kernel.org
|
L: platform-driver-x86@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/platform/x86/fujitsu-laptop.c
|
F: drivers/platform/x86/fujitsu-laptop.c
|
||||||
|
|
||||||
|
@ -2373,6 +2391,12 @@ F: Documentation/isdn/README.gigaset
|
||||||
F: drivers/isdn/gigaset/
|
F: drivers/isdn/gigaset/
|
||||||
F: include/linux/gigaset_dev.h
|
F: include/linux/gigaset_dev.h
|
||||||
|
|
||||||
|
GRETH 10/100/1G Ethernet MAC device driver
|
||||||
|
M: Kristoffer Glembo <kristoffer@gaisler.com>
|
||||||
|
L: netdev@vger.kernel.org
|
||||||
|
S: Maintained
|
||||||
|
F: drivers/net/greth*
|
||||||
|
|
||||||
HARD DRIVE ACTIVE PROTECTION SYSTEM (HDAPS) DRIVER
|
HARD DRIVE ACTIVE PROTECTION SYSTEM (HDAPS) DRIVER
|
||||||
M: Frank Seidel <frank@f-seidel.de>
|
M: Frank Seidel <frank@f-seidel.de>
|
||||||
L: lm-sensors@lm-sensors.org
|
L: lm-sensors@lm-sensors.org
|
||||||
|
@ -2394,6 +2418,18 @@ L: linuxppc-dev@ozlabs.org
|
||||||
S: Odd Fixes
|
S: Odd Fixes
|
||||||
F: drivers/char/hvc_*
|
F: drivers/char/hvc_*
|
||||||
|
|
||||||
|
VIRTIO CONSOLE DRIVER
|
||||||
|
M: Amit Shah <amit.shah@redhat.com>
|
||||||
|
L: virtualization@lists.linux-foundation.org
|
||||||
|
S: Maintained
|
||||||
|
F: drivers/char/virtio_console.c
|
||||||
|
|
||||||
|
iSCSI BOOT FIRMWARE TABLE (iBFT) DRIVER
|
||||||
|
M: Peter Jones <pjones@redhat.com>
|
||||||
|
M: Konrad Rzeszutek Wilk <konrad@kernel.org>
|
||||||
|
S: Maintained
|
||||||
|
F: drivers/firmware/iscsi_ibft*
|
||||||
|
|
||||||
GSPCA FINEPIX SUBDRIVER
|
GSPCA FINEPIX SUBDRIVER
|
||||||
M: Frank Zago <frank@zago.net>
|
M: Frank Zago <frank@zago.net>
|
||||||
L: linux-media@vger.kernel.org
|
L: linux-media@vger.kernel.org
|
||||||
|
@ -2562,6 +2598,7 @@ F: drivers/net/wireless/hostap/
|
||||||
|
|
||||||
HP COMPAQ TC1100 TABLET WMI EXTRAS DRIVER
|
HP COMPAQ TC1100 TABLET WMI EXTRAS DRIVER
|
||||||
M: Carlos Corbacho <carlos@strangeworlds.co.uk>
|
M: Carlos Corbacho <carlos@strangeworlds.co.uk>
|
||||||
|
L: platform-driver-x86@vger.kernel.org
|
||||||
S: Odd Fixes
|
S: Odd Fixes
|
||||||
F: drivers/platform/x86/tc1100-wmi.c
|
F: drivers/platform/x86/tc1100-wmi.c
|
||||||
|
|
||||||
|
@ -2772,7 +2809,7 @@ F: drivers/video/i810/
|
||||||
|
|
||||||
INTEL MENLOW THERMAL DRIVER
|
INTEL MENLOW THERMAL DRIVER
|
||||||
M: Sujith Thomas <sujith.thomas@intel.com>
|
M: Sujith Thomas <sujith.thomas@intel.com>
|
||||||
L: linux-acpi@vger.kernel.org
|
L: platform-driver-x86@vger.kernel.org
|
||||||
W: http://www.lesswatts.org/projects/acpi/
|
W: http://www.lesswatts.org/projects/acpi/
|
||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/platform/x86/intel_menlow.c
|
F: drivers/platform/x86/intel_menlow.c
|
||||||
|
@ -3411,8 +3448,10 @@ S: Maintained
|
||||||
F: drivers/scsi/sym53c8xx_2/
|
F: drivers/scsi/sym53c8xx_2/
|
||||||
|
|
||||||
LTP (Linux Test Project)
|
LTP (Linux Test Project)
|
||||||
M: Subrata Modak <subrata@linux.vnet.ibm.com>
|
M: Rishikesh K Rajak <risrajak@linux.vnet.ibm.com>
|
||||||
M: Mike Frysinger <vapier@gentoo.org>
|
M: Garrett Cooper <yanegomi@gmail.com>
|
||||||
|
M: Mike Frysinger <vapier@gentoo.org>
|
||||||
|
M: Subrata Modak <subrata@linux.vnet.ibm.com>
|
||||||
L: ltp-list@lists.sourceforge.net (subscribers-only)
|
L: ltp-list@lists.sourceforge.net (subscribers-only)
|
||||||
W: http://ltp.sourceforge.net/
|
W: http://ltp.sourceforge.net/
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/galak/ltp.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/galak/ltp.git
|
||||||
|
@ -3488,16 +3527,16 @@ S: Maintained
|
||||||
F: drivers/net/wireless/libertas/
|
F: drivers/net/wireless/libertas/
|
||||||
|
|
||||||
MARVELL MV643XX ETHERNET DRIVER
|
MARVELL MV643XX ETHERNET DRIVER
|
||||||
M: Lennert Buytenhek <buytenh@marvell.com>
|
M: Lennert Buytenhek <buytenh@wantstofly.org>
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
S: Supported
|
S: Maintained
|
||||||
F: drivers/net/mv643xx_eth.*
|
F: drivers/net/mv643xx_eth.*
|
||||||
F: include/linux/mv643xx.h
|
F: include/linux/mv643xx.h
|
||||||
|
|
||||||
MARVELL MWL8K WIRELESS DRIVER
|
MARVELL MWL8K WIRELESS DRIVER
|
||||||
M: Lennert Buytenhek <buytenh@marvell.com>
|
M: Lennert Buytenhek <buytenh@wantstofly.org>
|
||||||
L: linux-wireless@vger.kernel.org
|
L: linux-wireless@vger.kernel.org
|
||||||
S: Supported
|
S: Maintained
|
||||||
F: drivers/net/wireless/mwl8k.c
|
F: drivers/net/wireless/mwl8k.c
|
||||||
|
|
||||||
MARVELL SOC MMC/SD/SDIO CONTROLLER DRIVER
|
MARVELL SOC MMC/SD/SDIO CONTROLLER DRIVER
|
||||||
|
@ -3636,6 +3675,7 @@ F: drivers/char/mxser.*
|
||||||
|
|
||||||
MSI LAPTOP SUPPORT
|
MSI LAPTOP SUPPORT
|
||||||
M: Lennart Poettering <mzxreary@0pointer.de>
|
M: Lennart Poettering <mzxreary@0pointer.de>
|
||||||
|
L: platform-driver-x86@vger.kernel.org
|
||||||
W: https://tango.0pointer.de/mailman/listinfo/s270-linux
|
W: https://tango.0pointer.de/mailman/listinfo/s270-linux
|
||||||
W: http://0pointer.de/lennart/tchibo.html
|
W: http://0pointer.de/lennart/tchibo.html
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
@ -3643,6 +3683,7 @@ F: drivers/platform/x86/msi-laptop.c
|
||||||
|
|
||||||
MSI WMI SUPPORT
|
MSI WMI SUPPORT
|
||||||
M: Anisse Astier <anisse@astier.eu>
|
M: Anisse Astier <anisse@astier.eu>
|
||||||
|
L: platform-driver-x86@vger.kernel.org
|
||||||
S: Supported
|
S: Supported
|
||||||
F: drivers/platform/x86/msi-wmi.c
|
F: drivers/platform/x86/msi-wmi.c
|
||||||
|
|
||||||
|
@ -3836,6 +3877,7 @@ NETWORKING DRIVERS
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
W: http://www.linuxfoundation.org/en/Net
|
W: http://www.linuxfoundation.org/en/Net
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-2.6.git
|
||||||
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6.git
|
||||||
S: Odd Fixes
|
S: Odd Fixes
|
||||||
F: drivers/net/
|
F: drivers/net/
|
||||||
F: include/linux/if_*
|
F: include/linux/if_*
|
||||||
|
@ -4094,6 +4136,7 @@ F: drivers/i2c/busses/i2c-pasemi.c
|
||||||
|
|
||||||
PANASONIC LAPTOP ACPI EXTRAS DRIVER
|
PANASONIC LAPTOP ACPI EXTRAS DRIVER
|
||||||
M: Harald Welte <laforge@gnumonks.org>
|
M: Harald Welte <laforge@gnumonks.org>
|
||||||
|
L: platform-driver-x86@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/platform/x86/panasonic-laptop.c
|
F: drivers/platform/x86/panasonic-laptop.c
|
||||||
|
|
||||||
|
@ -4443,6 +4486,13 @@ S: Supported
|
||||||
F: Documentation/networking/LICENSE.qla3xxx
|
F: Documentation/networking/LICENSE.qla3xxx
|
||||||
F: drivers/net/qla3xxx.*
|
F: drivers/net/qla3xxx.*
|
||||||
|
|
||||||
|
QLOGIC QLCNIC (1/10)Gb ETHERNET DRIVER
|
||||||
|
M: Amit Kumar Salecha <amit.salecha@qlogic.com>
|
||||||
|
M: linux-driver@qlogic.com
|
||||||
|
L: netdev@vger.kernel.org
|
||||||
|
S: Supported
|
||||||
|
F: drivers/net/qlcnic/
|
||||||
|
|
||||||
QLOGIC QLGE 10Gb ETHERNET DRIVER
|
QLOGIC QLGE 10Gb ETHERNET DRIVER
|
||||||
M: Ron Mercer <ron.mercer@qlogic.com>
|
M: Ron Mercer <ron.mercer@qlogic.com>
|
||||||
M: linux-driver@qlogic.com
|
M: linux-driver@qlogic.com
|
||||||
|
@ -4507,7 +4557,7 @@ F: drivers/net/wireless/ray*
|
||||||
RCUTORTURE MODULE
|
RCUTORTURE MODULE
|
||||||
M: Josh Triplett <josh@freedesktop.org>
|
M: Josh Triplett <josh@freedesktop.org>
|
||||||
M: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
|
M: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
|
||||||
S: Maintained
|
S: Supported
|
||||||
F: Documentation/RCU/torture.txt
|
F: Documentation/RCU/torture.txt
|
||||||
F: kernel/rcutorture.c
|
F: kernel/rcutorture.c
|
||||||
|
|
||||||
|
@ -4532,11 +4582,12 @@ M: Dipankar Sarma <dipankar@in.ibm.com>
|
||||||
M: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
|
M: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
|
||||||
W: http://www.rdrop.com/users/paulmck/rclock/
|
W: http://www.rdrop.com/users/paulmck/rclock/
|
||||||
S: Supported
|
S: Supported
|
||||||
F: Documentation/RCU/rcu.txt
|
F: Documentation/RCU/
|
||||||
F: Documentation/RCU/rcuref.txt
|
F: include/linux/rcu*
|
||||||
F: include/linux/rcupdate.h
|
F: include/linux/srcu*
|
||||||
F: include/linux/srcu.h
|
F: kernel/rcu*
|
||||||
F: kernel/rcupdate.c
|
F: kernel/srcu*
|
||||||
|
X: kernel/rcutorture.c
|
||||||
|
|
||||||
REAL TIME CLOCK DRIVER
|
REAL TIME CLOCK DRIVER
|
||||||
M: Paul Gortmaker <p_gortmaker@yahoo.com>
|
M: Paul Gortmaker <p_gortmaker@yahoo.com>
|
||||||
|
@ -4674,6 +4725,13 @@ F: drivers/media/common/saa7146*
|
||||||
F: drivers/media/video/*7146*
|
F: drivers/media/video/*7146*
|
||||||
F: include/media/*7146*
|
F: include/media/*7146*
|
||||||
|
|
||||||
|
TLG2300 VIDEO4LINUX-2 DRIVER
|
||||||
|
M: Huang Shijie <shijie8@gmail.com>
|
||||||
|
M: Kang Yong <kangyong@telegent.com>
|
||||||
|
M: Zhang Xiaobing <xbzhang@telegent.com>
|
||||||
|
S: Supported
|
||||||
|
F: drivers/media/video/tlg2300
|
||||||
|
|
||||||
SC1200 WDT DRIVER
|
SC1200 WDT DRIVER
|
||||||
M: Zwane Mwaikambo <zwane@arm.linux.org.uk>
|
M: Zwane Mwaikambo <zwane@arm.linux.org.uk>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
@ -4829,6 +4887,8 @@ F: drivers/scsi/be2iscsi/
|
||||||
SERVER ENGINES 10Gbps NIC - BladeEngine 2 DRIVER
|
SERVER ENGINES 10Gbps NIC - BladeEngine 2 DRIVER
|
||||||
M: Sathya Perla <sathyap@serverengines.com>
|
M: Sathya Perla <sathyap@serverengines.com>
|
||||||
M: Subbu Seetharaman <subbus@serverengines.com>
|
M: Subbu Seetharaman <subbus@serverengines.com>
|
||||||
|
M: Sarveshwar Bandi <sarveshwarb@serverengines.com>
|
||||||
|
M: Ajit Khaparde <ajitk@serverengines.com>
|
||||||
L: netdev@vger.kernel.org
|
L: netdev@vger.kernel.org
|
||||||
W: http://www.serverengines.com
|
W: http://www.serverengines.com
|
||||||
S: Supported
|
S: Supported
|
||||||
|
@ -5032,7 +5092,7 @@ F: include/linux/ssb/
|
||||||
|
|
||||||
SONY VAIO CONTROL DEVICE DRIVER
|
SONY VAIO CONTROL DEVICE DRIVER
|
||||||
M: Mattia Dongili <malattia@linux.it>
|
M: Mattia Dongili <malattia@linux.it>
|
||||||
L: linux-acpi@vger.kernel.org
|
L: platform-driver-x86@vger.kernel.org
|
||||||
W: http://www.linux.it/~malattia/wiki/index.php/Sony_drivers
|
W: http://www.linux.it/~malattia/wiki/index.php/Sony_drivers
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: Documentation/laptops/sony-laptop.txt
|
F: Documentation/laptops/sony-laptop.txt
|
||||||
|
@ -5238,6 +5298,7 @@ F: arch/xtensa/
|
||||||
THINKPAD ACPI EXTRAS DRIVER
|
THINKPAD ACPI EXTRAS DRIVER
|
||||||
M: Henrique de Moraes Holschuh <ibm-acpi@hmh.eng.br>
|
M: Henrique de Moraes Holschuh <ibm-acpi@hmh.eng.br>
|
||||||
L: ibm-acpi-devel@lists.sourceforge.net
|
L: ibm-acpi-devel@lists.sourceforge.net
|
||||||
|
L: platform-driver-x86@vger.kernel.org
|
||||||
W: http://ibm-acpi.sourceforge.net
|
W: http://ibm-acpi.sourceforge.net
|
||||||
W: http://thinkwiki.org/wiki/Ibm-acpi
|
W: http://thinkwiki.org/wiki/Ibm-acpi
|
||||||
T: git git://repo.or.cz/linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git
|
T: git git://repo.or.cz/linux-2.6/linux-acpi-2.6/ibm-acpi-2.6.git
|
||||||
|
@ -5291,10 +5352,12 @@ F: security/tomoyo/
|
||||||
|
|
||||||
TOPSTAR LAPTOP EXTRAS DRIVER
|
TOPSTAR LAPTOP EXTRAS DRIVER
|
||||||
M: Herton Ronaldo Krzesinski <herton@mandriva.com.br>
|
M: Herton Ronaldo Krzesinski <herton@mandriva.com.br>
|
||||||
|
L: platform-driver-x86@vger.kernel.org
|
||||||
S: Maintained
|
S: Maintained
|
||||||
F: drivers/platform/x86/topstar-laptop.c
|
F: drivers/platform/x86/topstar-laptop.c
|
||||||
|
|
||||||
TOSHIBA ACPI EXTRAS DRIVER
|
TOSHIBA ACPI EXTRAS DRIVER
|
||||||
|
L: platform-driver-x86@vger.kernel.org
|
||||||
S: Orphan
|
S: Orphan
|
||||||
F: drivers/platform/x86/toshiba_acpi.c
|
F: drivers/platform/x86/toshiba_acpi.c
|
||||||
|
|
||||||
|
@ -5794,6 +5857,15 @@ S: Maintained
|
||||||
F: Documentation/filesystems/vfat.txt
|
F: Documentation/filesystems/vfat.txt
|
||||||
F: fs/fat/
|
F: fs/fat/
|
||||||
|
|
||||||
|
VIRTIO HOST (VHOST)
|
||||||
|
M: "Michael S. Tsirkin" <mst@redhat.com>
|
||||||
|
L: kvm@vger.kernel.org
|
||||||
|
L: virtualization@lists.osdl.org
|
||||||
|
L: netdev@vger.kernel.org
|
||||||
|
S: Maintained
|
||||||
|
F: drivers/vhost/
|
||||||
|
F: include/linux/vhost.h
|
||||||
|
|
||||||
VIA RHINE NETWORK DRIVER
|
VIA RHINE NETWORK DRIVER
|
||||||
M: Roger Luethi <rl@hellgate.ch>
|
M: Roger Luethi <rl@hellgate.ch>
|
||||||
S: Maintained
|
S: Maintained
|
||||||
|
@ -5952,7 +6024,7 @@ S: Maintained
|
||||||
F: drivers/input/misc/wistron_btns.c
|
F: drivers/input/misc/wistron_btns.c
|
||||||
|
|
||||||
WL1251 WIRELESS DRIVER
|
WL1251 WIRELESS DRIVER
|
||||||
M: Kalle Valo <kalle.valo@nokia.com>
|
M: Kalle Valo <kalle.valo@iki.fi>
|
||||||
L: linux-wireless@vger.kernel.org
|
L: linux-wireless@vger.kernel.org
|
||||||
W: http://wireless.kernel.org
|
W: http://wireless.kernel.org
|
||||||
T: git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-testing.git
|
||||||
|
@ -6022,6 +6094,13 @@ S: Maintained
|
||||||
F: Documentation/x86/
|
F: Documentation/x86/
|
||||||
F: arch/x86/
|
F: arch/x86/
|
||||||
|
|
||||||
|
X86 PLATFORM DRIVERS
|
||||||
|
M: Matthew Garrett <mjg@redhat.com>
|
||||||
|
L: platform-driver-x86@vger.kernel.org
|
||||||
|
T: git git://git.kernel.org/pub/scm/linux/kernel/git/mjg59/platform-drivers-x86.git
|
||||||
|
S: Maintained
|
||||||
|
F: drivers/platform/x86
|
||||||
|
|
||||||
XEN HYPERVISOR INTERFACE
|
XEN HYPERVISOR INTERFACE
|
||||||
M: Jeremy Fitzhardinge <jeremy@xensource.com>
|
M: Jeremy Fitzhardinge <jeremy@xensource.com>
|
||||||
M: Chris Wright <chrisw@sous-sol.org>
|
M: Chris Wright <chrisw@sous-sol.org>
|
||||||
|
|
2
Makefile
2
Makefile
|
@ -1,7 +1,7 @@
|
||||||
VERSION = 2
|
VERSION = 2
|
||||||
PATCHLEVEL = 6
|
PATCHLEVEL = 6
|
||||||
SUBLEVEL = 33
|
SUBLEVEL = 33
|
||||||
EXTRAVERSION = -rc7
|
EXTRAVERSION =
|
||||||
NAME = Man-Eating Seals of Antiquity
|
NAME = Man-Eating Seals of Antiquity
|
||||||
|
|
||||||
# *DOCUMENTATION*
|
# *DOCUMENTATION*
|
||||||
|
|
39
arch/Kconfig
39
arch/Kconfig
|
@ -3,11 +3,9 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
config OPROFILE
|
config OPROFILE
|
||||||
tristate "OProfile system profiling (EXPERIMENTAL)"
|
tristate "OProfile system profiling"
|
||||||
depends on PROFILING
|
depends on PROFILING
|
||||||
depends on HAVE_OPROFILE
|
depends on HAVE_OPROFILE
|
||||||
depends on TRACING_SUPPORT
|
|
||||||
select TRACING
|
|
||||||
select RING_BUFFER
|
select RING_BUFFER
|
||||||
select RING_BUFFER_ALLOW_SWAP
|
select RING_BUFFER_ALLOW_SWAP
|
||||||
help
|
help
|
||||||
|
@ -17,20 +15,6 @@ config OPROFILE
|
||||||
|
|
||||||
If unsure, say N.
|
If unsure, say N.
|
||||||
|
|
||||||
config OPROFILE_IBS
|
|
||||||
bool "OProfile AMD IBS support (EXPERIMENTAL)"
|
|
||||||
default n
|
|
||||||
depends on OPROFILE && SMP && X86
|
|
||||||
help
|
|
||||||
Instruction-Based Sampling (IBS) is a new profiling
|
|
||||||
technique that provides rich, precise program performance
|
|
||||||
information. IBS is introduced by AMD Family10h processors
|
|
||||||
(AMD Opteron Quad-Core processor "Barcelona") to overcome
|
|
||||||
the limitations of conventional performance counter
|
|
||||||
sampling.
|
|
||||||
|
|
||||||
If unsure, say N.
|
|
||||||
|
|
||||||
config OPROFILE_EVENT_MULTIPLEX
|
config OPROFILE_EVENT_MULTIPLEX
|
||||||
bool "OProfile multiplexing support (EXPERIMENTAL)"
|
bool "OProfile multiplexing support (EXPERIMENTAL)"
|
||||||
default n
|
default n
|
||||||
|
@ -57,6 +41,17 @@ config KPROBES
|
||||||
for kernel debugging, non-intrusive instrumentation and testing.
|
for kernel debugging, non-intrusive instrumentation and testing.
|
||||||
If in doubt, say "N".
|
If in doubt, say "N".
|
||||||
|
|
||||||
|
config OPTPROBES
|
||||||
|
bool "Kprobes jump optimization support (EXPERIMENTAL)"
|
||||||
|
default y
|
||||||
|
depends on KPROBES
|
||||||
|
depends on !PREEMPT
|
||||||
|
depends on HAVE_OPTPROBES
|
||||||
|
select KALLSYMS_ALL
|
||||||
|
help
|
||||||
|
This option will allow kprobes to optimize breakpoint to
|
||||||
|
a jump for reducing its overhead.
|
||||||
|
|
||||||
config HAVE_EFFICIENT_UNALIGNED_ACCESS
|
config HAVE_EFFICIENT_UNALIGNED_ACCESS
|
||||||
bool
|
bool
|
||||||
help
|
help
|
||||||
|
@ -99,6 +94,8 @@ config HAVE_KPROBES
|
||||||
config HAVE_KRETPROBES
|
config HAVE_KRETPROBES
|
||||||
bool
|
bool
|
||||||
|
|
||||||
|
config HAVE_OPTPROBES
|
||||||
|
bool
|
||||||
#
|
#
|
||||||
# An arch should select this if it provides all these things:
|
# An arch should select this if it provides all these things:
|
||||||
#
|
#
|
||||||
|
@ -121,6 +118,14 @@ config HAVE_DMA_ATTRS
|
||||||
config USE_GENERIC_SMP_HELPERS
|
config USE_GENERIC_SMP_HELPERS
|
||||||
bool
|
bool
|
||||||
|
|
||||||
|
config HAVE_REGS_AND_STACK_ACCESS_API
|
||||||
|
bool
|
||||||
|
help
|
||||||
|
This symbol should be selected by an architecure if it supports
|
||||||
|
the API needed to access registers and stack entries from pt_regs,
|
||||||
|
declared in asm/ptrace.h
|
||||||
|
For example the kprobes-based event tracer needs this API.
|
||||||
|
|
||||||
config HAVE_CLK
|
config HAVE_CLK
|
||||||
bool
|
bool
|
||||||
help
|
help
|
||||||
|
|
|
@ -98,21 +98,4 @@ static __inline__ long local_sub_return(long i, local_t * l)
|
||||||
#define __local_add(i,l) ((l)->a.counter+=(i))
|
#define __local_add(i,l) ((l)->a.counter+=(i))
|
||||||
#define __local_sub(i,l) ((l)->a.counter-=(i))
|
#define __local_sub(i,l) ((l)->a.counter-=(i))
|
||||||
|
|
||||||
/* Use these for per-cpu local_t variables: on some archs they are
|
|
||||||
* much more efficient than these naive implementations. Note they take
|
|
||||||
* a variable, not an address.
|
|
||||||
*/
|
|
||||||
#define cpu_local_read(l) local_read(&__get_cpu_var(l))
|
|
||||||
#define cpu_local_set(l, i) local_set(&__get_cpu_var(l), (i))
|
|
||||||
|
|
||||||
#define cpu_local_inc(l) local_inc(&__get_cpu_var(l))
|
|
||||||
#define cpu_local_dec(l) local_dec(&__get_cpu_var(l))
|
|
||||||
#define cpu_local_add(i, l) local_add((i), &__get_cpu_var(l))
|
|
||||||
#define cpu_local_sub(i, l) local_sub((i), &__get_cpu_var(l))
|
|
||||||
|
|
||||||
#define __cpu_local_inc(l) __local_inc(&__get_cpu_var(l))
|
|
||||||
#define __cpu_local_dec(l) __local_dec(&__get_cpu_var(l))
|
|
||||||
#define __cpu_local_add(i, l) __local_add((i), &__get_cpu_var(l))
|
|
||||||
#define __cpu_local_sub(i, l) __local_sub((i), &__get_cpu_var(l))
|
|
||||||
|
|
||||||
#endif /* _ALPHA_LOCAL_H */
|
#endif /* _ALPHA_LOCAL_H */
|
||||||
|
|
|
@ -329,7 +329,7 @@ extern pgd_t swapper_pg_dir[1024];
|
||||||
* tables contain all the necessary information.
|
* tables contain all the necessary information.
|
||||||
*/
|
*/
|
||||||
extern inline void update_mmu_cache(struct vm_area_struct * vma,
|
extern inline void update_mmu_cache(struct vm_area_struct * vma,
|
||||||
unsigned long address, pte_t pte)
|
unsigned long address, pte_t *ptep)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -126,8 +126,8 @@ DECLARE_PCI_FIXUP_FINAL(PCI_ANY_ID, PCI_ANY_ID, pcibios_fixup_final);
|
||||||
#define MB (1024*KB)
|
#define MB (1024*KB)
|
||||||
#define GB (1024*MB)
|
#define GB (1024*MB)
|
||||||
|
|
||||||
void
|
resource_size_t
|
||||||
pcibios_align_resource(void *data, struct resource *res,
|
pcibios_align_resource(void *data, const struct resource *res,
|
||||||
resource_size_t size, resource_size_t align)
|
resource_size_t size, resource_size_t align)
|
||||||
{
|
{
|
||||||
struct pci_dev *dev = data;
|
struct pci_dev *dev = data;
|
||||||
|
@ -184,7 +184,7 @@ pcibios_align_resource(void *data, struct resource *res,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
res->start = start;
|
return start;
|
||||||
}
|
}
|
||||||
#undef KB
|
#undef KB
|
||||||
#undef MB
|
#undef MB
|
||||||
|
|
|
@ -12,6 +12,7 @@ config ARM
|
||||||
select HAVE_IDE
|
select HAVE_IDE
|
||||||
select RTC_LIB
|
select RTC_LIB
|
||||||
select SYS_SUPPORTS_APM_EMULATION
|
select SYS_SUPPORTS_APM_EMULATION
|
||||||
|
select GENERIC_ATOMIC64 if (!CPU_32v6K)
|
||||||
select HAVE_OPROFILE
|
select HAVE_OPROFILE
|
||||||
select HAVE_ARCH_KGDB
|
select HAVE_ARCH_KGDB
|
||||||
select HAVE_KPROBES if (!XIP_KERNEL)
|
select HAVE_KPROBES if (!XIP_KERNEL)
|
||||||
|
@ -20,6 +21,8 @@ config ARM
|
||||||
select HAVE_GENERIC_DMA_COHERENT
|
select HAVE_GENERIC_DMA_COHERENT
|
||||||
select HAVE_KERNEL_GZIP
|
select HAVE_KERNEL_GZIP
|
||||||
select HAVE_KERNEL_LZO
|
select HAVE_KERNEL_LZO
|
||||||
|
select HAVE_PERF_EVENTS
|
||||||
|
select PERF_USE_VMALLOC
|
||||||
help
|
help
|
||||||
The ARM series is a line of low-power-consumption RISC chip designs
|
The ARM series is a line of low-power-consumption RISC chip designs
|
||||||
licensed by ARM Ltd and targeted at embedded applications and
|
licensed by ARM Ltd and targeted at embedded applications and
|
||||||
|
@ -52,6 +55,9 @@ config HAVE_TCM
|
||||||
bool
|
bool
|
||||||
select GENERIC_ALLOCATOR
|
select GENERIC_ALLOCATOR
|
||||||
|
|
||||||
|
config HAVE_PROC_CPU
|
||||||
|
bool
|
||||||
|
|
||||||
config NO_IOPORT
|
config NO_IOPORT
|
||||||
bool
|
bool
|
||||||
|
|
||||||
|
@ -161,6 +167,11 @@ config ARCH_MTD_XIP
|
||||||
config GENERIC_HARDIRQS_NO__DO_IRQ
|
config GENERIC_HARDIRQS_NO__DO_IRQ
|
||||||
def_bool y
|
def_bool y
|
||||||
|
|
||||||
|
config ARM_L1_CACHE_SHIFT_6
|
||||||
|
bool
|
||||||
|
help
|
||||||
|
Setting ARM L1 cache line size to 64 Bytes.
|
||||||
|
|
||||||
if OPROFILE
|
if OPROFILE
|
||||||
|
|
||||||
config OPROFILE_ARMV6
|
config OPROFILE_ARMV6
|
||||||
|
@ -550,10 +561,20 @@ config ARCH_W90X900
|
||||||
<http://www.nuvoton.com/hq/enu/ProductAndSales/ProductLines/
|
<http://www.nuvoton.com/hq/enu/ProductAndSales/ProductLines/
|
||||||
ConsumerElectronicsIC/ARMMicrocontroller/ARMMicrocontroller>
|
ConsumerElectronicsIC/ARMMicrocontroller/ARMMicrocontroller>
|
||||||
|
|
||||||
|
config ARCH_NUC93X
|
||||||
|
bool "Nuvoton NUC93X CPU"
|
||||||
|
select CPU_ARM926T
|
||||||
|
select HAVE_CLK
|
||||||
|
select COMMON_CLKDEV
|
||||||
|
help
|
||||||
|
Support for Nuvoton (Winbond logic dept.) NUC93X MCU,The NUC93X is a
|
||||||
|
low-power and high performance MPEG-4/JPEG multimedia controller chip.
|
||||||
|
|
||||||
config ARCH_PNX4008
|
config ARCH_PNX4008
|
||||||
bool "Philips Nexperia PNX4008 Mobile"
|
bool "Philips Nexperia PNX4008 Mobile"
|
||||||
select CPU_ARM926T
|
select CPU_ARM926T
|
||||||
select HAVE_CLK
|
select HAVE_CLK
|
||||||
|
select COMMON_CLKDEV
|
||||||
help
|
help
|
||||||
This enables support for Philips PNX4008 mobile platform.
|
This enables support for Philips PNX4008 mobile platform.
|
||||||
|
|
||||||
|
@ -638,6 +659,7 @@ config ARCH_S5PC1XX
|
||||||
select GENERIC_GPIO
|
select GENERIC_GPIO
|
||||||
select HAVE_CLK
|
select HAVE_CLK
|
||||||
select CPU_V7
|
select CPU_V7
|
||||||
|
select ARM_L1_CACHE_SHIFT_6
|
||||||
help
|
help
|
||||||
Samsung S5PC1XX series based systems
|
Samsung S5PC1XX series based systems
|
||||||
|
|
||||||
|
@ -785,6 +807,8 @@ source "arch/arm/plat-nomadik/Kconfig"
|
||||||
|
|
||||||
source "arch/arm/mach-ns9xxx/Kconfig"
|
source "arch/arm/mach-ns9xxx/Kconfig"
|
||||||
|
|
||||||
|
source "arch/arm/mach-nuc93x/Kconfig"
|
||||||
|
|
||||||
source "arch/arm/plat-omap/Kconfig"
|
source "arch/arm/plat-omap/Kconfig"
|
||||||
|
|
||||||
source "arch/arm/mach-omap1/Kconfig"
|
source "arch/arm/mach-omap1/Kconfig"
|
||||||
|
@ -867,6 +891,11 @@ config XSCALE_PMU
|
||||||
depends on CPU_XSCALE && !XSCALE_PMU_TIMER
|
depends on CPU_XSCALE && !XSCALE_PMU_TIMER
|
||||||
default y
|
default y
|
||||||
|
|
||||||
|
config CPU_HAS_PMU
|
||||||
|
depends on CPU_V6 || CPU_V7 || XSCALE_PMU
|
||||||
|
default y
|
||||||
|
bool
|
||||||
|
|
||||||
if !MMU
|
if !MMU
|
||||||
source "arch/arm/Kconfig-nommu"
|
source "arch/arm/Kconfig-nommu"
|
||||||
endif
|
endif
|
||||||
|
@ -921,6 +950,19 @@ config ARM_ERRATA_460075
|
||||||
ACTLR register. Note that setting specific bits in the ACTLR register
|
ACTLR register. Note that setting specific bits in the ACTLR register
|
||||||
may not be available in non-secure mode.
|
may not be available in non-secure mode.
|
||||||
|
|
||||||
|
config PL310_ERRATA_588369
|
||||||
|
bool "Clean & Invalidate maintenance operations do not invalidate clean lines"
|
||||||
|
depends on CACHE_L2X0 && ARCH_OMAP4
|
||||||
|
help
|
||||||
|
The PL310 L2 cache controller implements three types of Clean &
|
||||||
|
Invalidate maintenance operations: by Physical Address
|
||||||
|
(offset 0x7F0), by Index/Way (0x7F8) and by Way (0x7FC).
|
||||||
|
They are architecturally defined to behave as the execution of a
|
||||||
|
clean operation followed immediately by an invalidate operation,
|
||||||
|
both performing to the same memory location. This functionality
|
||||||
|
is not correctly implemented in PL310 as clean lines are not
|
||||||
|
invalidated as a result of these operations. Note that this errata
|
||||||
|
uses Texas Instrument's secure monitor api.
|
||||||
endmenu
|
endmenu
|
||||||
|
|
||||||
source "arch/arm/common/Kconfig"
|
source "arch/arm/common/Kconfig"
|
||||||
|
@ -1171,6 +1213,14 @@ config HIGHPTE
|
||||||
depends on HIGHMEM
|
depends on HIGHMEM
|
||||||
depends on !OUTER_CACHE
|
depends on !OUTER_CACHE
|
||||||
|
|
||||||
|
config HW_PERF_EVENTS
|
||||||
|
bool "Enable hardware performance counter support for perf events"
|
||||||
|
depends on PERF_EVENTS && CPU_HAS_PMU && (CPU_V6 || CPU_V7)
|
||||||
|
default y
|
||||||
|
help
|
||||||
|
Enable hardware performance counter support for perf events. If
|
||||||
|
disabled, perf events will use software events only.
|
||||||
|
|
||||||
source "mm/Kconfig"
|
source "mm/Kconfig"
|
||||||
|
|
||||||
config LEDS
|
config LEDS
|
||||||
|
@ -1230,6 +1280,7 @@ config ALIGNMENT_TRAP
|
||||||
bool
|
bool
|
||||||
depends on CPU_CP15_MMU
|
depends on CPU_CP15_MMU
|
||||||
default y if !ARCH_EBSA110
|
default y if !ARCH_EBSA110
|
||||||
|
select HAVE_PROC_CPU if PROC_FS
|
||||||
help
|
help
|
||||||
ARM processors cannot fetch/store information which is not
|
ARM processors cannot fetch/store information which is not
|
||||||
naturally aligned on the bus, i.e., a 4 byte fetch must start at an
|
naturally aligned on the bus, i.e., a 4 byte fetch must start at an
|
||||||
|
|
|
@ -171,6 +171,7 @@ machine-$(CONFIG_ARCH_U300) := u300
|
||||||
machine-$(CONFIG_ARCH_U8500) := ux500
|
machine-$(CONFIG_ARCH_U8500) := ux500
|
||||||
machine-$(CONFIG_ARCH_VERSATILE) := versatile
|
machine-$(CONFIG_ARCH_VERSATILE) := versatile
|
||||||
machine-$(CONFIG_ARCH_W90X900) := w90x900
|
machine-$(CONFIG_ARCH_W90X900) := w90x900
|
||||||
|
machine-$(CONFIG_ARCH_NUC93X) := nuc93x
|
||||||
machine-$(CONFIG_FOOTBRIDGE) := footbridge
|
machine-$(CONFIG_FOOTBRIDGE) := footbridge
|
||||||
|
|
||||||
# Platform directory name. This list is sorted alphanumerically
|
# Platform directory name. This list is sorted alphanumerically
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
#
|
#
|
||||||
|
|
||||||
HEAD = head.o
|
HEAD = head.o
|
||||||
OBJS = misc.o
|
OBJS = misc.o decompress.o
|
||||||
FONTC = $(srctree)/drivers/video/console/font_acorn_8x8.c
|
FONTC = $(srctree)/drivers/video/console/font_acorn_8x8.c
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -106,10 +106,6 @@ lib1funcs = $(obj)/lib1funcs.o
|
||||||
$(obj)/lib1funcs.S: $(srctree)/arch/$(SRCARCH)/lib/lib1funcs.S FORCE
|
$(obj)/lib1funcs.S: $(srctree)/arch/$(SRCARCH)/lib/lib1funcs.S FORCE
|
||||||
$(call cmd,shipped)
|
$(call cmd,shipped)
|
||||||
|
|
||||||
# Don't allow any static data in misc.o, which
|
|
||||||
# would otherwise mess up our GOT table
|
|
||||||
CFLAGS_misc.o := -Dstatic=
|
|
||||||
|
|
||||||
$(obj)/vmlinux: $(obj)/vmlinux.lds $(obj)/$(HEAD) $(obj)/piggy.$(suffix_y).o \
|
$(obj)/vmlinux: $(obj)/vmlinux.lds $(obj)/$(HEAD) $(obj)/piggy.$(suffix_y).o \
|
||||||
$(addprefix $(obj)/, $(OBJS)) $(lib1funcs) FORCE
|
$(addprefix $(obj)/, $(OBJS)) $(lib1funcs) FORCE
|
||||||
$(call if_changed,ld)
|
$(call if_changed,ld)
|
||||||
|
|
45
arch/arm/boot/compressed/decompress.c
Normal file
45
arch/arm/boot/compressed/decompress.c
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
#define _LINUX_STRING_H_
|
||||||
|
|
||||||
|
#include <linux/compiler.h> /* for inline */
|
||||||
|
#include <linux/types.h> /* for size_t */
|
||||||
|
#include <linux/stddef.h> /* for NULL */
|
||||||
|
#include <linux/linkage.h>
|
||||||
|
#include <asm/string.h>
|
||||||
|
|
||||||
|
extern unsigned long free_mem_ptr;
|
||||||
|
extern unsigned long free_mem_end_ptr;
|
||||||
|
extern void error(char *);
|
||||||
|
|
||||||
|
#define STATIC static
|
||||||
|
|
||||||
|
#define ARCH_HAS_DECOMP_WDOG
|
||||||
|
|
||||||
|
/* Diagnostic functions */
|
||||||
|
#ifdef DEBUG
|
||||||
|
# define Assert(cond,msg) {if(!(cond)) error(msg);}
|
||||||
|
# define Trace(x) fprintf x
|
||||||
|
# define Tracev(x) {if (verbose) fprintf x ;}
|
||||||
|
# define Tracevv(x) {if (verbose>1) fprintf x ;}
|
||||||
|
# define Tracec(c,x) {if (verbose && (c)) fprintf x ;}
|
||||||
|
# define Tracecv(c,x) {if (verbose>1 && (c)) fprintf x ;}
|
||||||
|
#else
|
||||||
|
# define Assert(cond,msg)
|
||||||
|
# define Trace(x)
|
||||||
|
# define Tracev(x)
|
||||||
|
# define Tracevv(x)
|
||||||
|
# define Tracec(c,x)
|
||||||
|
# define Tracecv(c,x)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_KERNEL_GZIP
|
||||||
|
#include "../../../../lib/decompress_inflate.c"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_KERNEL_LZO
|
||||||
|
#include "../../../../lib/decompress_unlzo.c"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void do_decompress(u8 *input, int len, u8 *output, void (*error)(char *x))
|
||||||
|
{
|
||||||
|
decompress(input, len, NULL, NULL, output, NULL, error);
|
||||||
|
}
|
|
@ -22,13 +22,13 @@
|
||||||
#if defined(CONFIG_DEBUG_ICEDCC)
|
#if defined(CONFIG_DEBUG_ICEDCC)
|
||||||
|
|
||||||
#ifdef CONFIG_CPU_V6
|
#ifdef CONFIG_CPU_V6
|
||||||
.macro loadsp, rb
|
.macro loadsp, rb, tmp
|
||||||
.endm
|
.endm
|
||||||
.macro writeb, ch, rb
|
.macro writeb, ch, rb
|
||||||
mcr p14, 0, \ch, c0, c5, 0
|
mcr p14, 0, \ch, c0, c5, 0
|
||||||
.endm
|
.endm
|
||||||
#elif defined(CONFIG_CPU_V7)
|
#elif defined(CONFIG_CPU_V7)
|
||||||
.macro loadsp, rb
|
.macro loadsp, rb, tmp
|
||||||
.endm
|
.endm
|
||||||
.macro writeb, ch, rb
|
.macro writeb, ch, rb
|
||||||
wait: mrc p14, 0, pc, c0, c1, 0
|
wait: mrc p14, 0, pc, c0, c1, 0
|
||||||
|
@ -36,13 +36,13 @@ wait: mrc p14, 0, pc, c0, c1, 0
|
||||||
mcr p14, 0, \ch, c0, c5, 0
|
mcr p14, 0, \ch, c0, c5, 0
|
||||||
.endm
|
.endm
|
||||||
#elif defined(CONFIG_CPU_XSCALE)
|
#elif defined(CONFIG_CPU_XSCALE)
|
||||||
.macro loadsp, rb
|
.macro loadsp, rb, tmp
|
||||||
.endm
|
.endm
|
||||||
.macro writeb, ch, rb
|
.macro writeb, ch, rb
|
||||||
mcr p14, 0, \ch, c8, c0, 0
|
mcr p14, 0, \ch, c8, c0, 0
|
||||||
.endm
|
.endm
|
||||||
#else
|
#else
|
||||||
.macro loadsp, rb
|
.macro loadsp, rb, tmp
|
||||||
.endm
|
.endm
|
||||||
.macro writeb, ch, rb
|
.macro writeb, ch, rb
|
||||||
mcr p14, 0, \ch, c1, c0, 0
|
mcr p14, 0, \ch, c1, c0, 0
|
||||||
|
@ -58,7 +58,7 @@ wait: mrc p14, 0, pc, c0, c1, 0
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
#if defined(CONFIG_ARCH_SA1100)
|
#if defined(CONFIG_ARCH_SA1100)
|
||||||
.macro loadsp, rb
|
.macro loadsp, rb, tmp
|
||||||
mov \rb, #0x80000000 @ physical base address
|
mov \rb, #0x80000000 @ physical base address
|
||||||
#ifdef CONFIG_DEBUG_LL_SER3
|
#ifdef CONFIG_DEBUG_LL_SER3
|
||||||
add \rb, \rb, #0x00050000 @ Ser3
|
add \rb, \rb, #0x00050000 @ Ser3
|
||||||
|
@ -67,13 +67,13 @@ wait: mrc p14, 0, pc, c0, c1, 0
|
||||||
#endif
|
#endif
|
||||||
.endm
|
.endm
|
||||||
#elif defined(CONFIG_ARCH_S3C2410)
|
#elif defined(CONFIG_ARCH_S3C2410)
|
||||||
.macro loadsp, rb
|
.macro loadsp, rb, tmp
|
||||||
mov \rb, #0x50000000
|
mov \rb, #0x50000000
|
||||||
add \rb, \rb, #0x4000 * CONFIG_S3C_LOWLEVEL_UART_PORT
|
add \rb, \rb, #0x4000 * CONFIG_S3C_LOWLEVEL_UART_PORT
|
||||||
.endm
|
.endm
|
||||||
#else
|
#else
|
||||||
.macro loadsp, rb
|
.macro loadsp, rb, tmp
|
||||||
addruart \rb
|
addruart \rb, \tmp
|
||||||
.endm
|
.endm
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
@ -1025,7 +1025,7 @@ phex: adr r3, phexbuf
|
||||||
strb r2, [r3, r1]
|
strb r2, [r3, r1]
|
||||||
b 1b
|
b 1b
|
||||||
|
|
||||||
puts: loadsp r3
|
puts: loadsp r3, r1
|
||||||
1: ldrb r2, [r0], #1
|
1: ldrb r2, [r0], #1
|
||||||
teq r2, #0
|
teq r2, #0
|
||||||
moveq pc, lr
|
moveq pc, lr
|
||||||
|
@ -1042,7 +1042,7 @@ puts: loadsp r3
|
||||||
putc:
|
putc:
|
||||||
mov r2, r0
|
mov r2, r0
|
||||||
mov r0, #0
|
mov r0, #0
|
||||||
loadsp r3
|
loadsp r3, r1
|
||||||
b 2b
|
b 2b
|
||||||
|
|
||||||
memdump: mov r12, r0
|
memdump: mov r12, r0
|
||||||
|
|
|
@ -23,8 +23,8 @@ unsigned int __machine_arch_type;
|
||||||
#include <linux/compiler.h> /* for inline */
|
#include <linux/compiler.h> /* for inline */
|
||||||
#include <linux/types.h> /* for size_t */
|
#include <linux/types.h> /* for size_t */
|
||||||
#include <linux/stddef.h> /* for NULL */
|
#include <linux/stddef.h> /* for NULL */
|
||||||
#include <asm/string.h>
|
|
||||||
#include <linux/linkage.h>
|
#include <linux/linkage.h>
|
||||||
|
#include <asm/string.h>
|
||||||
|
|
||||||
#include <asm/unaligned.h>
|
#include <asm/unaligned.h>
|
||||||
|
|
||||||
|
@ -117,57 +117,7 @@ static void putstr(const char *ptr)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define __ptr_t void *
|
void *memcpy(void *__dest, __const void *__src, size_t __n)
|
||||||
|
|
||||||
#define memzero(s,n) __memzero(s,n)
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Optimised C version of memzero for the ARM.
|
|
||||||
*/
|
|
||||||
void __memzero (__ptr_t s, size_t n)
|
|
||||||
{
|
|
||||||
union { void *vp; unsigned long *ulp; unsigned char *ucp; } u;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
u.vp = s;
|
|
||||||
|
|
||||||
for (i = n >> 5; i > 0; i--) {
|
|
||||||
*u.ulp++ = 0;
|
|
||||||
*u.ulp++ = 0;
|
|
||||||
*u.ulp++ = 0;
|
|
||||||
*u.ulp++ = 0;
|
|
||||||
*u.ulp++ = 0;
|
|
||||||
*u.ulp++ = 0;
|
|
||||||
*u.ulp++ = 0;
|
|
||||||
*u.ulp++ = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (n & 1 << 4) {
|
|
||||||
*u.ulp++ = 0;
|
|
||||||
*u.ulp++ = 0;
|
|
||||||
*u.ulp++ = 0;
|
|
||||||
*u.ulp++ = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (n & 1 << 3) {
|
|
||||||
*u.ulp++ = 0;
|
|
||||||
*u.ulp++ = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (n & 1 << 2)
|
|
||||||
*u.ulp++ = 0;
|
|
||||||
|
|
||||||
if (n & 1 << 1) {
|
|
||||||
*u.ucp++ = 0;
|
|
||||||
*u.ucp++ = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (n & 1)
|
|
||||||
*u.ucp++ = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline __ptr_t memcpy(__ptr_t __dest, __const __ptr_t __src,
|
|
||||||
size_t __n)
|
|
||||||
{
|
{
|
||||||
int i = 0;
|
int i = 0;
|
||||||
unsigned char *d = (unsigned char *)__dest, *s = (unsigned char *)__src;
|
unsigned char *d = (unsigned char *)__dest, *s = (unsigned char *)__src;
|
||||||
|
@ -204,59 +154,20 @@ static inline __ptr_t memcpy(__ptr_t __dest, __const __ptr_t __src,
|
||||||
/*
|
/*
|
||||||
* gzip delarations
|
* gzip delarations
|
||||||
*/
|
*/
|
||||||
#define STATIC static
|
|
||||||
|
|
||||||
/* Diagnostic functions */
|
|
||||||
#ifdef DEBUG
|
|
||||||
# define Assert(cond,msg) {if(!(cond)) error(msg);}
|
|
||||||
# define Trace(x) fprintf x
|
|
||||||
# define Tracev(x) {if (verbose) fprintf x ;}
|
|
||||||
# define Tracevv(x) {if (verbose>1) fprintf x ;}
|
|
||||||
# define Tracec(c,x) {if (verbose && (c)) fprintf x ;}
|
|
||||||
# define Tracecv(c,x) {if (verbose>1 && (c)) fprintf x ;}
|
|
||||||
#else
|
|
||||||
# define Assert(cond,msg)
|
|
||||||
# define Trace(x)
|
|
||||||
# define Tracev(x)
|
|
||||||
# define Tracevv(x)
|
|
||||||
# define Tracec(c,x)
|
|
||||||
# define Tracecv(c,x)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static void error(char *m);
|
|
||||||
|
|
||||||
extern char input_data[];
|
extern char input_data[];
|
||||||
extern char input_data_end[];
|
extern char input_data_end[];
|
||||||
|
|
||||||
static unsigned char *output_data;
|
unsigned char *output_data;
|
||||||
static unsigned long output_ptr;
|
unsigned long output_ptr;
|
||||||
|
|
||||||
static void error(char *m);
|
unsigned long free_mem_ptr;
|
||||||
|
unsigned long free_mem_end_ptr;
|
||||||
static void putstr(const char *);
|
|
||||||
|
|
||||||
static unsigned long free_mem_ptr;
|
|
||||||
static unsigned long free_mem_end_ptr;
|
|
||||||
|
|
||||||
#ifdef STANDALONE_DEBUG
|
|
||||||
#define NO_INFLATE_MALLOC
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define ARCH_HAS_DECOMP_WDOG
|
|
||||||
|
|
||||||
#ifdef CONFIG_KERNEL_GZIP
|
|
||||||
#include "../../../../lib/decompress_inflate.c"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_KERNEL_LZO
|
|
||||||
#include "../../../../lib/decompress_unlzo.c"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef arch_error
|
#ifndef arch_error
|
||||||
#define arch_error(x)
|
#define arch_error(x)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static void error(char *x)
|
void error(char *x)
|
||||||
{
|
{
|
||||||
arch_error(x);
|
arch_error(x);
|
||||||
|
|
||||||
|
@ -272,6 +183,8 @@ asmlinkage void __div0(void)
|
||||||
error("Attempting division by 0!");
|
error("Attempting division by 0!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern void do_decompress(u8 *input, int len, u8 *output, void (*error)(char *x));
|
||||||
|
|
||||||
#ifndef STANDALONE_DEBUG
|
#ifndef STANDALONE_DEBUG
|
||||||
|
|
||||||
unsigned long
|
unsigned long
|
||||||
|
@ -292,8 +205,8 @@ decompress_kernel(unsigned long output_start, unsigned long free_mem_ptr_p,
|
||||||
output_ptr = get_unaligned_le32(tmp);
|
output_ptr = get_unaligned_le32(tmp);
|
||||||
|
|
||||||
putstr("Uncompressing Linux...");
|
putstr("Uncompressing Linux...");
|
||||||
decompress(input_data, input_data_end - input_data,
|
do_decompress(input_data, input_data_end - input_data,
|
||||||
NULL, NULL, output_data, NULL, error);
|
output_data, error);
|
||||||
putstr(" done, booting the kernel.\n");
|
putstr(" done, booting the kernel.\n");
|
||||||
return output_ptr;
|
return output_ptr;
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,6 +14,13 @@ SECTIONS
|
||||||
/DISCARD/ : {
|
/DISCARD/ : {
|
||||||
*(.ARM.exidx*)
|
*(.ARM.exidx*)
|
||||||
*(.ARM.extab*)
|
*(.ARM.extab*)
|
||||||
|
/*
|
||||||
|
* Discard any r/w data - this produces a link error if we have any,
|
||||||
|
* which is required for PIC decompression. Local data generates
|
||||||
|
* GOTOFF relocations, which prevents it being relocated independently
|
||||||
|
* of the text/got segments.
|
||||||
|
*/
|
||||||
|
*(.data)
|
||||||
}
|
}
|
||||||
|
|
||||||
. = TEXT_START;
|
. = TEXT_START;
|
||||||
|
@ -40,7 +47,6 @@ SECTIONS
|
||||||
.got : { *(.got) }
|
.got : { *(.got) }
|
||||||
_got_end = .;
|
_got_end = .;
|
||||||
.got.plt : { *(.got.plt) }
|
.got.plt : { *(.got.plt) }
|
||||||
.data : { *(.data) }
|
|
||||||
_edata = .;
|
_edata = .;
|
||||||
|
|
||||||
. = BSS_START;
|
. = BSS_START;
|
||||||
|
|
|
@ -99,6 +99,16 @@ void clkdev_add(struct clk_lookup *cl)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(clkdev_add);
|
EXPORT_SYMBOL(clkdev_add);
|
||||||
|
|
||||||
|
void __init clkdev_add_table(struct clk_lookup *cl, size_t num)
|
||||||
|
{
|
||||||
|
mutex_lock(&clocks_mutex);
|
||||||
|
while (num--) {
|
||||||
|
list_add_tail(&cl->node, &clocks);
|
||||||
|
cl++;
|
||||||
|
}
|
||||||
|
mutex_unlock(&clocks_mutex);
|
||||||
|
}
|
||||||
|
|
||||||
#define MAX_DEV_ID 20
|
#define MAX_DEV_ID 20
|
||||||
#define MAX_CON_ID 16
|
#define MAX_CON_ID 16
|
||||||
|
|
||||||
|
|
|
@ -277,7 +277,7 @@ static inline dma_addr_t map_single(struct device *dev, void *ptr, size_t size,
|
||||||
* We don't need to sync the DMA buffer since
|
* We don't need to sync the DMA buffer since
|
||||||
* it was allocated via the coherent allocators.
|
* it was allocated via the coherent allocators.
|
||||||
*/
|
*/
|
||||||
dma_cache_maint(ptr, size, dir);
|
__dma_single_cpu_to_dev(ptr, size, dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
return dma_addr;
|
return dma_addr;
|
||||||
|
@ -315,6 +315,8 @@ static inline void unmap_single(struct device *dev, dma_addr_t dma_addr,
|
||||||
__cpuc_flush_dcache_area(ptr, size);
|
__cpuc_flush_dcache_area(ptr, size);
|
||||||
}
|
}
|
||||||
free_safe_buffer(dev->archdata.dmabounce, buf);
|
free_safe_buffer(dev->archdata.dmabounce, buf);
|
||||||
|
} else {
|
||||||
|
__dma_single_dev_to_cpu(dma_to_virt(dev, dma_addr), size, dir);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/list.h>
|
#include <linux/list.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
|
@ -28,48 +29,6 @@
|
||||||
#include <asm/mach/irq.h>
|
#include <asm/mach/irq.h>
|
||||||
#include <asm/hardware/vic.h>
|
#include <asm/hardware/vic.h>
|
||||||
|
|
||||||
static void vic_ack_irq(unsigned int irq)
|
|
||||||
{
|
|
||||||
void __iomem *base = get_irq_chip_data(irq);
|
|
||||||
irq &= 31;
|
|
||||||
writel(1 << irq, base + VIC_INT_ENABLE_CLEAR);
|
|
||||||
/* moreover, clear the soft-triggered, in case it was the reason */
|
|
||||||
writel(1 << irq, base + VIC_INT_SOFT_CLEAR);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void vic_mask_irq(unsigned int irq)
|
|
||||||
{
|
|
||||||
void __iomem *base = get_irq_chip_data(irq);
|
|
||||||
irq &= 31;
|
|
||||||
writel(1 << irq, base + VIC_INT_ENABLE_CLEAR);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void vic_unmask_irq(unsigned int irq)
|
|
||||||
{
|
|
||||||
void __iomem *base = get_irq_chip_data(irq);
|
|
||||||
irq &= 31;
|
|
||||||
writel(1 << irq, base + VIC_INT_ENABLE);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* vic_init2 - common initialisation code
|
|
||||||
* @base: Base of the VIC.
|
|
||||||
*
|
|
||||||
* Common initialisation code for registeration
|
|
||||||
* and resume.
|
|
||||||
*/
|
|
||||||
static void vic_init2(void __iomem *base)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < 16; i++) {
|
|
||||||
void __iomem *reg = base + VIC_VECT_CNTL0 + (i * 4);
|
|
||||||
writel(VIC_VECT_CNTL_ENABLE | i, reg);
|
|
||||||
}
|
|
||||||
|
|
||||||
writel(32, base + VIC_PL190_DEF_VECT_ADDR);
|
|
||||||
}
|
|
||||||
|
|
||||||
#if defined(CONFIG_PM)
|
#if defined(CONFIG_PM)
|
||||||
/**
|
/**
|
||||||
* struct vic_device - VIC PM device
|
* struct vic_device - VIC PM device
|
||||||
|
@ -99,13 +58,34 @@ struct vic_device {
|
||||||
/* we cannot allocate memory when VICs are initially registered */
|
/* we cannot allocate memory when VICs are initially registered */
|
||||||
static struct vic_device vic_devices[CONFIG_ARM_VIC_NR];
|
static struct vic_device vic_devices[CONFIG_ARM_VIC_NR];
|
||||||
|
|
||||||
|
static int vic_id;
|
||||||
|
|
||||||
static inline struct vic_device *to_vic(struct sys_device *sys)
|
static inline struct vic_device *to_vic(struct sys_device *sys)
|
||||||
{
|
{
|
||||||
return container_of(sys, struct vic_device, sysdev);
|
return container_of(sys, struct vic_device, sysdev);
|
||||||
}
|
}
|
||||||
|
#endif /* CONFIG_PM */
|
||||||
|
|
||||||
static int vic_id;
|
/**
|
||||||
|
* vic_init2 - common initialisation code
|
||||||
|
* @base: Base of the VIC.
|
||||||
|
*
|
||||||
|
* Common initialisation code for registeration
|
||||||
|
* and resume.
|
||||||
|
*/
|
||||||
|
static void vic_init2(void __iomem *base)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for (i = 0; i < 16; i++) {
|
||||||
|
void __iomem *reg = base + VIC_VECT_CNTL0 + (i * 4);
|
||||||
|
writel(VIC_VECT_CNTL_ENABLE | i, reg);
|
||||||
|
}
|
||||||
|
|
||||||
|
writel(32, base + VIC_PL190_DEF_VECT_ADDR);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(CONFIG_PM)
|
||||||
static int vic_class_resume(struct sys_device *dev)
|
static int vic_class_resume(struct sys_device *dev)
|
||||||
{
|
{
|
||||||
struct vic_device *vic = to_vic(dev);
|
struct vic_device *vic = to_vic(dev);
|
||||||
|
@ -158,31 +138,6 @@ struct sysdev_class vic_class = {
|
||||||
.resume = vic_class_resume,
|
.resume = vic_class_resume,
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* vic_pm_register - Register a VIC for later power management control
|
|
||||||
* @base: The base address of the VIC.
|
|
||||||
* @irq: The base IRQ for the VIC.
|
|
||||||
* @resume_sources: bitmask of interrupts allowed for resume sources.
|
|
||||||
*
|
|
||||||
* Register the VIC with the system device tree so that it can be notified
|
|
||||||
* of suspend and resume requests and ensure that the correct actions are
|
|
||||||
* taken to re-instate the settings on resume.
|
|
||||||
*/
|
|
||||||
static void __init vic_pm_register(void __iomem *base, unsigned int irq, u32 resume_sources)
|
|
||||||
{
|
|
||||||
struct vic_device *v;
|
|
||||||
|
|
||||||
if (vic_id >= ARRAY_SIZE(vic_devices))
|
|
||||||
printk(KERN_ERR "%s: too few VICs, increase CONFIG_ARM_VIC_NR\n", __func__);
|
|
||||||
else {
|
|
||||||
v = &vic_devices[vic_id];
|
|
||||||
v->base = base;
|
|
||||||
v->resume_sources = resume_sources;
|
|
||||||
v->irq = irq;
|
|
||||||
vic_id++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* vic_pm_init - initicall to register VIC pm
|
* vic_pm_init - initicall to register VIC pm
|
||||||
*
|
*
|
||||||
|
@ -219,9 +174,60 @@ static int __init vic_pm_init(void)
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
late_initcall(vic_pm_init);
|
late_initcall(vic_pm_init);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* vic_pm_register - Register a VIC for later power management control
|
||||||
|
* @base: The base address of the VIC.
|
||||||
|
* @irq: The base IRQ for the VIC.
|
||||||
|
* @resume_sources: bitmask of interrupts allowed for resume sources.
|
||||||
|
*
|
||||||
|
* Register the VIC with the system device tree so that it can be notified
|
||||||
|
* of suspend and resume requests and ensure that the correct actions are
|
||||||
|
* taken to re-instate the settings on resume.
|
||||||
|
*/
|
||||||
|
static void __init vic_pm_register(void __iomem *base, unsigned int irq, u32 resume_sources)
|
||||||
|
{
|
||||||
|
struct vic_device *v;
|
||||||
|
|
||||||
|
if (vic_id >= ARRAY_SIZE(vic_devices))
|
||||||
|
printk(KERN_ERR "%s: too few VICs, increase CONFIG_ARM_VIC_NR\n", __func__);
|
||||||
|
else {
|
||||||
|
v = &vic_devices[vic_id];
|
||||||
|
v->base = base;
|
||||||
|
v->resume_sources = resume_sources;
|
||||||
|
v->irq = irq;
|
||||||
|
vic_id++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static inline void vic_pm_register(void __iomem *base, unsigned int irq, u32 arg1) { }
|
||||||
|
#endif /* CONFIG_PM */
|
||||||
|
|
||||||
|
static void vic_ack_irq(unsigned int irq)
|
||||||
|
{
|
||||||
|
void __iomem *base = get_irq_chip_data(irq);
|
||||||
|
irq &= 31;
|
||||||
|
writel(1 << irq, base + VIC_INT_ENABLE_CLEAR);
|
||||||
|
/* moreover, clear the soft-triggered, in case it was the reason */
|
||||||
|
writel(1 << irq, base + VIC_INT_SOFT_CLEAR);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void vic_mask_irq(unsigned int irq)
|
||||||
|
{
|
||||||
|
void __iomem *base = get_irq_chip_data(irq);
|
||||||
|
irq &= 31;
|
||||||
|
writel(1 << irq, base + VIC_INT_ENABLE_CLEAR);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void vic_unmask_irq(unsigned int irq)
|
||||||
|
{
|
||||||
|
void __iomem *base = get_irq_chip_data(irq);
|
||||||
|
irq &= 31;
|
||||||
|
writel(1 << irq, base + VIC_INT_ENABLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
#if defined(CONFIG_PM)
|
||||||
static struct vic_device *vic_from_irq(unsigned int irq)
|
static struct vic_device *vic_from_irq(unsigned int irq)
|
||||||
{
|
{
|
||||||
struct vic_device *v = vic_devices;
|
struct vic_device *v = vic_devices;
|
||||||
|
@ -255,10 +261,7 @@ static int vic_set_wake(unsigned int irq, unsigned int on)
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
#else
|
||||||
static inline void vic_pm_register(void __iomem *base, unsigned int irq, u32 arg1) { }
|
|
||||||
|
|
||||||
#define vic_set_wake NULL
|
#define vic_set_wake NULL
|
||||||
#endif /* CONFIG_PM */
|
#endif /* CONFIG_PM */
|
||||||
|
|
||||||
|
@ -270,80 +273,6 @@ static struct irq_chip vic_chip = {
|
||||||
.set_wake = vic_set_wake,
|
.set_wake = vic_set_wake,
|
||||||
};
|
};
|
||||||
|
|
||||||
/* The PL190 cell from ARM has been modified by ST, so handle both here */
|
|
||||||
static void vik_init_st(void __iomem *base, unsigned int irq_start,
|
|
||||||
u32 vic_sources);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* vic_init - initialise a vectored interrupt controller
|
|
||||||
* @base: iomem base address
|
|
||||||
* @irq_start: starting interrupt number, must be muliple of 32
|
|
||||||
* @vic_sources: bitmask of interrupt sources to allow
|
|
||||||
* @resume_sources: bitmask of interrupt sources to allow for resume
|
|
||||||
*/
|
|
||||||
void __init vic_init(void __iomem *base, unsigned int irq_start,
|
|
||||||
u32 vic_sources, u32 resume_sources)
|
|
||||||
{
|
|
||||||
unsigned int i;
|
|
||||||
u32 cellid = 0;
|
|
||||||
enum amba_vendor vendor;
|
|
||||||
|
|
||||||
/* Identify which VIC cell this one is, by reading the ID */
|
|
||||||
for (i = 0; i < 4; i++) {
|
|
||||||
u32 addr = ((u32)base & PAGE_MASK) + 0xfe0 + (i * 4);
|
|
||||||
cellid |= (readl(addr) & 0xff) << (8 * i);
|
|
||||||
}
|
|
||||||
vendor = (cellid >> 12) & 0xff;
|
|
||||||
printk(KERN_INFO "VIC @%p: id 0x%08x, vendor 0x%02x\n",
|
|
||||||
base, cellid, vendor);
|
|
||||||
|
|
||||||
switch(vendor) {
|
|
||||||
case AMBA_VENDOR_ST:
|
|
||||||
vik_init_st(base, irq_start, vic_sources);
|
|
||||||
return;
|
|
||||||
default:
|
|
||||||
printk(KERN_WARNING "VIC: unknown vendor, continuing anyways\n");
|
|
||||||
/* fall through */
|
|
||||||
case AMBA_VENDOR_ARM:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Disable all interrupts initially. */
|
|
||||||
|
|
||||||
writel(0, base + VIC_INT_SELECT);
|
|
||||||
writel(0, base + VIC_INT_ENABLE);
|
|
||||||
writel(~0, base + VIC_INT_ENABLE_CLEAR);
|
|
||||||
writel(0, base + VIC_IRQ_STATUS);
|
|
||||||
writel(0, base + VIC_ITCR);
|
|
||||||
writel(~0, base + VIC_INT_SOFT_CLEAR);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Make sure we clear all existing interrupts
|
|
||||||
*/
|
|
||||||
writel(0, base + VIC_PL190_VECT_ADDR);
|
|
||||||
for (i = 0; i < 19; i++) {
|
|
||||||
unsigned int value;
|
|
||||||
|
|
||||||
value = readl(base + VIC_PL190_VECT_ADDR);
|
|
||||||
writel(value, base + VIC_PL190_VECT_ADDR);
|
|
||||||
}
|
|
||||||
|
|
||||||
vic_init2(base);
|
|
||||||
|
|
||||||
for (i = 0; i < 32; i++) {
|
|
||||||
if (vic_sources & (1 << i)) {
|
|
||||||
unsigned int irq = irq_start + i;
|
|
||||||
|
|
||||||
set_irq_chip(irq, &vic_chip);
|
|
||||||
set_irq_chip_data(irq, base);
|
|
||||||
set_irq_handler(irq, handle_level_irq);
|
|
||||||
set_irq_flags(irq, IRQF_VALID | IRQF_PROBE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
vic_pm_register(base, irq_start, resume_sources);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The PL190 cell from ARM has been modified by ST to handle 64 interrupts.
|
* The PL190 cell from ARM has been modified by ST to handle 64 interrupts.
|
||||||
* The original cell has 32 interrupts, while the modified one has 64,
|
* The original cell has 32 interrupts, while the modified one has 64,
|
||||||
|
@ -351,7 +280,7 @@ void __init vic_init(void __iomem *base, unsigned int irq_start,
|
||||||
* the probe function is called twice, with base set to offset 000
|
* the probe function is called twice, with base set to offset 000
|
||||||
* and 020 within the page. We call this "second block".
|
* and 020 within the page. We call this "second block".
|
||||||
*/
|
*/
|
||||||
static void __init vik_init_st(void __iomem *base, unsigned int irq_start,
|
static void __init vic_init_st(void __iomem *base, unsigned int irq_start,
|
||||||
u32 vic_sources)
|
u32 vic_sources)
|
||||||
{
|
{
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
@ -400,3 +329,73 @@ static void __init vik_init_st(void __iomem *base, unsigned int irq_start,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* vic_init - initialise a vectored interrupt controller
|
||||||
|
* @base: iomem base address
|
||||||
|
* @irq_start: starting interrupt number, must be muliple of 32
|
||||||
|
* @vic_sources: bitmask of interrupt sources to allow
|
||||||
|
* @resume_sources: bitmask of interrupt sources to allow for resume
|
||||||
|
*/
|
||||||
|
void __init vic_init(void __iomem *base, unsigned int irq_start,
|
||||||
|
u32 vic_sources, u32 resume_sources)
|
||||||
|
{
|
||||||
|
unsigned int i;
|
||||||
|
u32 cellid = 0;
|
||||||
|
enum amba_vendor vendor;
|
||||||
|
|
||||||
|
/* Identify which VIC cell this one is, by reading the ID */
|
||||||
|
for (i = 0; i < 4; i++) {
|
||||||
|
u32 addr = ((u32)base & PAGE_MASK) + 0xfe0 + (i * 4);
|
||||||
|
cellid |= (readl(addr) & 0xff) << (8 * i);
|
||||||
|
}
|
||||||
|
vendor = (cellid >> 12) & 0xff;
|
||||||
|
printk(KERN_INFO "VIC @%p: id 0x%08x, vendor 0x%02x\n",
|
||||||
|
base, cellid, vendor);
|
||||||
|
|
||||||
|
switch(vendor) {
|
||||||
|
case AMBA_VENDOR_ST:
|
||||||
|
vic_init_st(base, irq_start, vic_sources);
|
||||||
|
return;
|
||||||
|
default:
|
||||||
|
printk(KERN_WARNING "VIC: unknown vendor, continuing anyways\n");
|
||||||
|
/* fall through */
|
||||||
|
case AMBA_VENDOR_ARM:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Disable all interrupts initially. */
|
||||||
|
|
||||||
|
writel(0, base + VIC_INT_SELECT);
|
||||||
|
writel(0, base + VIC_INT_ENABLE);
|
||||||
|
writel(~0, base + VIC_INT_ENABLE_CLEAR);
|
||||||
|
writel(0, base + VIC_IRQ_STATUS);
|
||||||
|
writel(0, base + VIC_ITCR);
|
||||||
|
writel(~0, base + VIC_INT_SOFT_CLEAR);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Make sure we clear all existing interrupts
|
||||||
|
*/
|
||||||
|
writel(0, base + VIC_PL190_VECT_ADDR);
|
||||||
|
for (i = 0; i < 19; i++) {
|
||||||
|
unsigned int value;
|
||||||
|
|
||||||
|
value = readl(base + VIC_PL190_VECT_ADDR);
|
||||||
|
writel(value, base + VIC_PL190_VECT_ADDR);
|
||||||
|
}
|
||||||
|
|
||||||
|
vic_init2(base);
|
||||||
|
|
||||||
|
for (i = 0; i < 32; i++) {
|
||||||
|
if (vic_sources & (1 << i)) {
|
||||||
|
unsigned int irq = irq_start + i;
|
||||||
|
|
||||||
|
set_irq_chip(irq, &vic_chip);
|
||||||
|
set_irq_chip_data(irq, base);
|
||||||
|
set_irq_handler(irq, handle_level_irq);
|
||||||
|
set_irq_flags(irq, IRQF_VALID | IRQF_PROBE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
vic_pm_register(base, irq_start, resume_sources);
|
||||||
|
}
|
||||||
|
|
|
@ -201,7 +201,7 @@ CONFIG_ARCH_OMAP3=y
|
||||||
# CONFIG_OMAP_DEBUG_POWERDOMAIN is not set
|
# CONFIG_OMAP_DEBUG_POWERDOMAIN is not set
|
||||||
# CONFIG_OMAP_DEBUG_CLOCKDOMAIN is not set
|
# CONFIG_OMAP_DEBUG_CLOCKDOMAIN is not set
|
||||||
CONFIG_OMAP_RESET_CLOCKS=y
|
CONFIG_OMAP_RESET_CLOCKS=y
|
||||||
# CONFIG_OMAP_MUX is not set
|
CONFIG_OMAP_MUX=y
|
||||||
# CONFIG_OMAP_MCBSP is not set
|
# CONFIG_OMAP_MCBSP is not set
|
||||||
# CONFIG_OMAP_MBOX_FWK is not set
|
# CONFIG_OMAP_MBOX_FWK is not set
|
||||||
# CONFIG_OMAP_MPU_TIMER is not set
|
# CONFIG_OMAP_MPU_TIMER is not set
|
||||||
|
@ -590,7 +590,46 @@ CONFIG_HW_RANDOM=y
|
||||||
# CONFIG_R3964 is not set
|
# CONFIG_R3964 is not set
|
||||||
# CONFIG_RAW_DRIVER is not set
|
# CONFIG_RAW_DRIVER is not set
|
||||||
# CONFIG_TCG_TPM is not set
|
# CONFIG_TCG_TPM is not set
|
||||||
# CONFIG_I2C is not set
|
CONFIG_I2C=y
|
||||||
|
CONFIG_I2C_BOARDINFO=y
|
||||||
|
CONFIG_I2C_COMPAT=y
|
||||||
|
CONFIG_I2C_CHARDEV=y
|
||||||
|
CONFIG_I2C_HELPER_AUTO=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# I2C Hardware Bus support
|
||||||
|
#
|
||||||
|
|
||||||
|
#
|
||||||
|
# I2C system bus drivers (mostly embedded / system-on-chip)
|
||||||
|
#
|
||||||
|
# CONFIG_I2C_DESIGNWARE is not set
|
||||||
|
# CONFIG_I2C_GPIO is not set
|
||||||
|
# CONFIG_I2C_OCORES is not set
|
||||||
|
CONFIG_I2C_OMAP=y
|
||||||
|
# CONFIG_I2C_SIMTEC is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# External I2C/SMBus adapter drivers
|
||||||
|
#
|
||||||
|
# CONFIG_I2C_PARPORT_LIGHT is not set
|
||||||
|
# CONFIG_I2C_TAOS_EVM is not set
|
||||||
|
# CONFIG_I2C_TINY_USB is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Other I2C/SMBus bus drivers
|
||||||
|
#
|
||||||
|
# CONFIG_I2C_PCA_PLATFORM is not set
|
||||||
|
# CONFIG_I2C_STUB is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Miscellaneous I2C Chip support
|
||||||
|
#
|
||||||
|
# CONFIG_SENSORS_TSL2550 is not set
|
||||||
|
# CONFIG_I2C_DEBUG_CORE is not set
|
||||||
|
# CONFIG_I2C_DEBUG_ALGO is not set
|
||||||
|
# CONFIG_I2C_DEBUG_BUS is not set
|
||||||
|
# CONFIG_I2C_DEBUG_CHIP is not set
|
||||||
# CONFIG_SPI is not set
|
# CONFIG_SPI is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
1640
arch/arm/configs/at572d940hfek_defconfig
Normal file
1640
arch/arm/configs/at572d940hfek_defconfig
Normal file
File diff suppressed because it is too large
Load diff
1889
arch/arm/configs/devkit8000_defconfig
Normal file
1889
arch/arm/configs/devkit8000_defconfig
Normal file
File diff suppressed because it is too large
Load diff
|
@ -1,7 +1,7 @@
|
||||||
#
|
#
|
||||||
# Automatically generated make config: don't edit
|
# Automatically generated make config: don't edit
|
||||||
# Linux kernel version: 2.6.32-rc6
|
# Linux kernel version: 2.6.33-rc3
|
||||||
# Fri Nov 13 12:01:17 2009
|
# Thu Jan 7 16:14:55 2010
|
||||||
#
|
#
|
||||||
CONFIG_ARM=y
|
CONFIG_ARM=y
|
||||||
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
|
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
|
||||||
|
@ -46,6 +46,7 @@ CONFIG_BSD_PROCESS_ACCT=y
|
||||||
#
|
#
|
||||||
CONFIG_TREE_RCU=y
|
CONFIG_TREE_RCU=y
|
||||||
# CONFIG_TREE_PREEMPT_RCU is not set
|
# CONFIG_TREE_PREEMPT_RCU is not set
|
||||||
|
# CONFIG_TINY_RCU is not set
|
||||||
# CONFIG_RCU_TRACE is not set
|
# CONFIG_RCU_TRACE is not set
|
||||||
CONFIG_RCU_FANOUT=32
|
CONFIG_RCU_FANOUT=32
|
||||||
# CONFIG_RCU_FANOUT_EXACT is not set
|
# CONFIG_RCU_FANOUT_EXACT is not set
|
||||||
|
@ -126,14 +127,41 @@ CONFIG_LBDAF=y
|
||||||
# IO Schedulers
|
# IO Schedulers
|
||||||
#
|
#
|
||||||
CONFIG_IOSCHED_NOOP=y
|
CONFIG_IOSCHED_NOOP=y
|
||||||
CONFIG_IOSCHED_AS=y
|
|
||||||
CONFIG_IOSCHED_DEADLINE=y
|
CONFIG_IOSCHED_DEADLINE=y
|
||||||
CONFIG_IOSCHED_CFQ=y
|
CONFIG_IOSCHED_CFQ=y
|
||||||
CONFIG_DEFAULT_AS=y
|
|
||||||
# CONFIG_DEFAULT_DEADLINE is not set
|
# CONFIG_DEFAULT_DEADLINE is not set
|
||||||
# CONFIG_DEFAULT_CFQ is not set
|
CONFIG_DEFAULT_CFQ=y
|
||||||
# CONFIG_DEFAULT_NOOP is not set
|
# CONFIG_DEFAULT_NOOP is not set
|
||||||
CONFIG_DEFAULT_IOSCHED="anticipatory"
|
CONFIG_DEFAULT_IOSCHED="cfq"
|
||||||
|
# CONFIG_INLINE_SPIN_TRYLOCK is not set
|
||||||
|
# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
|
||||||
|
# CONFIG_INLINE_SPIN_LOCK is not set
|
||||||
|
# CONFIG_INLINE_SPIN_LOCK_BH is not set
|
||||||
|
# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
|
||||||
|
# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
|
||||||
|
CONFIG_INLINE_SPIN_UNLOCK=y
|
||||||
|
# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
|
||||||
|
CONFIG_INLINE_SPIN_UNLOCK_IRQ=y
|
||||||
|
# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
|
||||||
|
# CONFIG_INLINE_READ_TRYLOCK is not set
|
||||||
|
# CONFIG_INLINE_READ_LOCK is not set
|
||||||
|
# CONFIG_INLINE_READ_LOCK_BH is not set
|
||||||
|
# CONFIG_INLINE_READ_LOCK_IRQ is not set
|
||||||
|
# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
|
||||||
|
CONFIG_INLINE_READ_UNLOCK=y
|
||||||
|
# CONFIG_INLINE_READ_UNLOCK_BH is not set
|
||||||
|
CONFIG_INLINE_READ_UNLOCK_IRQ=y
|
||||||
|
# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
|
||||||
|
# CONFIG_INLINE_WRITE_TRYLOCK is not set
|
||||||
|
# CONFIG_INLINE_WRITE_LOCK is not set
|
||||||
|
# CONFIG_INLINE_WRITE_LOCK_BH is not set
|
||||||
|
# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
|
||||||
|
# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
|
||||||
|
CONFIG_INLINE_WRITE_UNLOCK=y
|
||||||
|
# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
|
||||||
|
CONFIG_INLINE_WRITE_UNLOCK_IRQ=y
|
||||||
|
# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
|
||||||
|
# CONFIG_MUTEX_SPIN_ON_OWNER is not set
|
||||||
# CONFIG_FREEZER is not set
|
# CONFIG_FREEZER is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -162,6 +190,7 @@ CONFIG_MMU=y
|
||||||
# CONFIG_ARCH_IXP2000 is not set
|
# CONFIG_ARCH_IXP2000 is not set
|
||||||
# CONFIG_ARCH_IXP4XX is not set
|
# CONFIG_ARCH_IXP4XX is not set
|
||||||
# CONFIG_ARCH_L7200 is not set
|
# CONFIG_ARCH_L7200 is not set
|
||||||
|
# CONFIG_ARCH_DOVE is not set
|
||||||
# CONFIG_ARCH_KIRKWOOD is not set
|
# CONFIG_ARCH_KIRKWOOD is not set
|
||||||
# CONFIG_ARCH_LOKI is not set
|
# CONFIG_ARCH_LOKI is not set
|
||||||
# CONFIG_ARCH_MV78XX0 is not set
|
# CONFIG_ARCH_MV78XX0 is not set
|
||||||
|
@ -184,6 +213,7 @@ CONFIG_MMU=y
|
||||||
# CONFIG_ARCH_DAVINCI is not set
|
# CONFIG_ARCH_DAVINCI is not set
|
||||||
CONFIG_ARCH_OMAP=y
|
CONFIG_ARCH_OMAP=y
|
||||||
# CONFIG_ARCH_BCMRING is not set
|
# CONFIG_ARCH_BCMRING is not set
|
||||||
|
# CONFIG_ARCH_U8500 is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# TI OMAP Implementations
|
# TI OMAP Implementations
|
||||||
|
@ -197,12 +227,8 @@ CONFIG_ARCH_OMAP3=y
|
||||||
#
|
#
|
||||||
# OMAP Feature Selections
|
# OMAP Feature Selections
|
||||||
#
|
#
|
||||||
# CONFIG_OMAP_DEBUG_POWERDOMAIN is not set
|
CONFIG_OMAP_RESET_CLOCKS=y
|
||||||
# CONFIG_OMAP_DEBUG_CLOCKDOMAIN is not set
|
# CONFIG_OMAP_MUX is not set
|
||||||
# CONFIG_OMAP_RESET_CLOCKS is not set
|
|
||||||
CONFIG_OMAP_MUX=y
|
|
||||||
CONFIG_OMAP_MUX_DEBUG=y
|
|
||||||
CONFIG_OMAP_MUX_WARNINGS=y
|
|
||||||
CONFIG_OMAP_MCBSP=y
|
CONFIG_OMAP_MCBSP=y
|
||||||
# CONFIG_OMAP_MBOX_FWK is not set
|
# CONFIG_OMAP_MBOX_FWK is not set
|
||||||
# CONFIG_OMAP_MPU_TIMER is not set
|
# CONFIG_OMAP_MPU_TIMER is not set
|
||||||
|
@ -217,6 +243,7 @@ CONFIG_OMAP_LL_DEBUG_UART3=y
|
||||||
CONFIG_OMAP_PM_NOOP=y
|
CONFIG_OMAP_PM_NOOP=y
|
||||||
CONFIG_ARCH_OMAP34XX=y
|
CONFIG_ARCH_OMAP34XX=y
|
||||||
CONFIG_ARCH_OMAP3430=y
|
CONFIG_ARCH_OMAP3430=y
|
||||||
|
CONFIG_OMAP_PACKAGE_CBB=y
|
||||||
|
|
||||||
#
|
#
|
||||||
# OMAP Board Type
|
# OMAP Board Type
|
||||||
|
@ -227,13 +254,16 @@ CONFIG_ARCH_OMAP3430=y
|
||||||
# CONFIG_MACH_OMAP3EVM is not set
|
# CONFIG_MACH_OMAP3EVM is not set
|
||||||
# CONFIG_MACH_OMAP3517EVM is not set
|
# CONFIG_MACH_OMAP3517EVM is not set
|
||||||
# CONFIG_MACH_OMAP3_PANDORA is not set
|
# CONFIG_MACH_OMAP3_PANDORA is not set
|
||||||
|
# CONFIG_MACH_OMAP3_TOUCHBOOK is not set
|
||||||
# CONFIG_MACH_OMAP_3430SDP is not set
|
# CONFIG_MACH_OMAP_3430SDP is not set
|
||||||
# CONFIG_MACH_NOKIA_RX51 is not set
|
# CONFIG_MACH_NOKIA_RX51 is not set
|
||||||
# CONFIG_MACH_OMAP_ZOOM2 is not set
|
# CONFIG_MACH_OMAP_ZOOM2 is not set
|
||||||
# CONFIG_MACH_CM_T35 is not set
|
|
||||||
# CONFIG_MACH_OMAP_ZOOM3 is not set
|
# CONFIG_MACH_OMAP_ZOOM3 is not set
|
||||||
# CONFIG_MACH_OMAP_3630SDP is not set
|
# CONFIG_MACH_CM_T35 is not set
|
||||||
CONFIG_MACH_IGEP0020=y
|
CONFIG_MACH_IGEP0020=y
|
||||||
|
# CONFIG_MACH_OMAP_3630SDP is not set
|
||||||
|
# CONFIG_OMAP3_EMU is not set
|
||||||
|
# CONFIG_OMAP3_SDRC_AC_TIMING is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Processor Type
|
# Processor Type
|
||||||
|
@ -305,8 +335,6 @@ CONFIG_SPLIT_PTLOCK_CPUS=4
|
||||||
# CONFIG_PHYS_ADDR_T_64BIT is not set
|
# CONFIG_PHYS_ADDR_T_64BIT is not set
|
||||||
CONFIG_ZONE_DMA_FLAG=0
|
CONFIG_ZONE_DMA_FLAG=0
|
||||||
CONFIG_VIRT_TO_BUS=y
|
CONFIG_VIRT_TO_BUS=y
|
||||||
CONFIG_HAVE_MLOCK=y
|
|
||||||
CONFIG_HAVE_MLOCKED_PAGE_BIT=y
|
|
||||||
# CONFIG_KSM is not set
|
# CONFIG_KSM is not set
|
||||||
CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
|
CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
|
||||||
# CONFIG_LEDS is not set
|
# CONFIG_LEDS is not set
|
||||||
|
@ -440,35 +468,35 @@ CONFIG_BT_HIDP=m
|
||||||
#
|
#
|
||||||
# Bluetooth device drivers
|
# Bluetooth device drivers
|
||||||
#
|
#
|
||||||
CONFIG_BT_HCIBTUSB=m
|
# CONFIG_BT_HCIBTUSB is not set
|
||||||
# CONFIG_BT_HCIBTSDIO is not set
|
# CONFIG_BT_HCIBTSDIO is not set
|
||||||
CONFIG_BT_HCIUART=m
|
CONFIG_BT_HCIUART=m
|
||||||
CONFIG_BT_HCIUART_H4=y
|
CONFIG_BT_HCIUART_H4=y
|
||||||
CONFIG_BT_HCIUART_BCSP=y
|
CONFIG_BT_HCIUART_BCSP=y
|
||||||
CONFIG_BT_HCIUART_LL=y
|
CONFIG_BT_HCIUART_LL=y
|
||||||
CONFIG_BT_HCIBCM203X=m
|
# CONFIG_BT_HCIBCM203X is not set
|
||||||
CONFIG_BT_HCIBPA10X=m
|
# CONFIG_BT_HCIBPA10X is not set
|
||||||
CONFIG_BT_HCIBFUSB=m
|
# CONFIG_BT_HCIBFUSB is not set
|
||||||
CONFIG_BT_HCIVHCI=m
|
CONFIG_BT_HCIVHCI=m
|
||||||
CONFIG_BT_MRVL=m
|
CONFIG_BT_MRVL=m
|
||||||
CONFIG_BT_MRVL_SDIO=m
|
CONFIG_BT_MRVL_SDIO=m
|
||||||
# CONFIG_AF_RXRPC is not set
|
# CONFIG_AF_RXRPC is not set
|
||||||
CONFIG_WIRELESS=y
|
CONFIG_WIRELESS=y
|
||||||
CONFIG_CFG80211=m
|
CONFIG_WIRELESS_EXT=y
|
||||||
|
CONFIG_WEXT_CORE=y
|
||||||
|
CONFIG_WEXT_PROC=y
|
||||||
|
CONFIG_WEXT_SPY=y
|
||||||
|
CONFIG_CFG80211=y
|
||||||
# CONFIG_NL80211_TESTMODE is not set
|
# CONFIG_NL80211_TESTMODE is not set
|
||||||
# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set
|
# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set
|
||||||
# CONFIG_CFG80211_REG_DEBUG is not set
|
# CONFIG_CFG80211_REG_DEBUG is not set
|
||||||
CONFIG_CFG80211_DEFAULT_PS=y
|
CONFIG_CFG80211_DEFAULT_PS=y
|
||||||
CONFIG_CFG80211_DEFAULT_PS_VALUE=1
|
|
||||||
# CONFIG_WIRELESS_OLD_REGULATORY is not set
|
# CONFIG_WIRELESS_OLD_REGULATORY is not set
|
||||||
CONFIG_WIRELESS_EXT=y
|
CONFIG_CFG80211_WEXT=y
|
||||||
CONFIG_WIRELESS_EXT_SYSFS=y
|
CONFIG_WIRELESS_EXT_SYSFS=y
|
||||||
CONFIG_LIB80211=m
|
CONFIG_LIB80211=y
|
||||||
CONFIG_LIB80211_CRYPT_WEP=m
|
|
||||||
CONFIG_LIB80211_CRYPT_CCMP=m
|
|
||||||
CONFIG_LIB80211_CRYPT_TKIP=m
|
|
||||||
# CONFIG_LIB80211_DEBUG is not set
|
# CONFIG_LIB80211_DEBUG is not set
|
||||||
CONFIG_MAC80211=m
|
CONFIG_MAC80211=y
|
||||||
# CONFIG_MAC80211_RC_PID is not set
|
# CONFIG_MAC80211_RC_PID is not set
|
||||||
CONFIG_MAC80211_RC_MINSTREL=y
|
CONFIG_MAC80211_RC_MINSTREL=y
|
||||||
# CONFIG_MAC80211_RC_DEFAULT_PID is not set
|
# CONFIG_MAC80211_RC_DEFAULT_PID is not set
|
||||||
|
@ -500,12 +528,95 @@ CONFIG_EXTRA_FIRMWARE=""
|
||||||
# CONFIG_SYS_HYPERVISOR is not set
|
# CONFIG_SYS_HYPERVISOR is not set
|
||||||
CONFIG_CONNECTOR=y
|
CONFIG_CONNECTOR=y
|
||||||
CONFIG_PROC_EVENTS=y
|
CONFIG_PROC_EVENTS=y
|
||||||
# CONFIG_MTD is not set
|
CONFIG_MTD=y
|
||||||
|
# CONFIG_MTD_DEBUG is not set
|
||||||
|
# CONFIG_MTD_TESTS is not set
|
||||||
|
# CONFIG_MTD_CONCAT is not set
|
||||||
|
CONFIG_MTD_PARTITIONS=y
|
||||||
|
# CONFIG_MTD_REDBOOT_PARTS is not set
|
||||||
|
CONFIG_MTD_CMDLINE_PARTS=y
|
||||||
|
# CONFIG_MTD_AFS_PARTS is not set
|
||||||
|
# CONFIG_MTD_AR7_PARTS is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# User Modules And Translation Layers
|
||||||
|
#
|
||||||
|
CONFIG_MTD_CHAR=y
|
||||||
|
CONFIG_MTD_BLKDEVS=y
|
||||||
|
CONFIG_MTD_BLOCK=y
|
||||||
|
# CONFIG_FTL is not set
|
||||||
|
# CONFIG_NFTL is not set
|
||||||
|
# CONFIG_INFTL is not set
|
||||||
|
# CONFIG_RFD_FTL is not set
|
||||||
|
# CONFIG_SSFDC is not set
|
||||||
|
# CONFIG_MTD_OOPS is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# RAM/ROM/Flash chip drivers
|
||||||
|
#
|
||||||
|
# CONFIG_MTD_CFI is not set
|
||||||
|
# CONFIG_MTD_JEDECPROBE is not set
|
||||||
|
CONFIG_MTD_MAP_BANK_WIDTH_1=y
|
||||||
|
CONFIG_MTD_MAP_BANK_WIDTH_2=y
|
||||||
|
CONFIG_MTD_MAP_BANK_WIDTH_4=y
|
||||||
|
# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
|
||||||
|
# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
|
||||||
|
# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
|
||||||
|
CONFIG_MTD_CFI_I1=y
|
||||||
|
CONFIG_MTD_CFI_I2=y
|
||||||
|
# CONFIG_MTD_CFI_I4 is not set
|
||||||
|
# CONFIG_MTD_CFI_I8 is not set
|
||||||
|
# CONFIG_MTD_RAM is not set
|
||||||
|
# CONFIG_MTD_ROM is not set
|
||||||
|
# CONFIG_MTD_ABSENT is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Mapping drivers for chip access
|
||||||
|
#
|
||||||
|
# CONFIG_MTD_COMPLEX_MAPPINGS is not set
|
||||||
|
# CONFIG_MTD_PLATRAM is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Self-contained MTD device drivers
|
||||||
|
#
|
||||||
|
# CONFIG_MTD_DATAFLASH is not set
|
||||||
|
# CONFIG_MTD_M25P80 is not set
|
||||||
|
# CONFIG_MTD_SST25L is not set
|
||||||
|
# CONFIG_MTD_SLRAM is not set
|
||||||
|
# CONFIG_MTD_PHRAM is not set
|
||||||
|
# CONFIG_MTD_MTDRAM is not set
|
||||||
|
# CONFIG_MTD_BLOCK2MTD is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Disk-On-Chip Device Drivers
|
||||||
|
#
|
||||||
|
# CONFIG_MTD_DOC2000 is not set
|
||||||
|
# CONFIG_MTD_DOC2001 is not set
|
||||||
|
# CONFIG_MTD_DOC2001PLUS is not set
|
||||||
|
# CONFIG_MTD_NAND is not set
|
||||||
|
CONFIG_MTD_ONENAND=y
|
||||||
|
# CONFIG_MTD_ONENAND_VERIFY_WRITE is not set
|
||||||
|
# CONFIG_MTD_ONENAND_GENERIC is not set
|
||||||
|
CONFIG_MTD_ONENAND_OMAP2=y
|
||||||
|
# CONFIG_MTD_ONENAND_OTP is not set
|
||||||
|
CONFIG_MTD_ONENAND_2X_PROGRAM=y
|
||||||
|
# CONFIG_MTD_ONENAND_SIM is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# LPDDR flash memory drivers
|
||||||
|
#
|
||||||
|
# CONFIG_MTD_LPDDR is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# UBI - Unsorted block images
|
||||||
|
#
|
||||||
|
# CONFIG_MTD_UBI is not set
|
||||||
# CONFIG_PARPORT is not set
|
# CONFIG_PARPORT is not set
|
||||||
CONFIG_BLK_DEV=y
|
CONFIG_BLK_DEV=y
|
||||||
# CONFIG_BLK_DEV_COW_COMMON is not set
|
# CONFIG_BLK_DEV_COW_COMMON is not set
|
||||||
CONFIG_BLK_DEV_LOOP=y
|
CONFIG_BLK_DEV_LOOP=y
|
||||||
# CONFIG_BLK_DEV_CRYPTOLOOP is not set
|
# CONFIG_BLK_DEV_CRYPTOLOOP is not set
|
||||||
|
# CONFIG_BLK_DEV_DRBD is not set
|
||||||
# CONFIG_BLK_DEV_NBD is not set
|
# CONFIG_BLK_DEV_NBD is not set
|
||||||
# CONFIG_BLK_DEV_UB is not set
|
# CONFIG_BLK_DEV_UB is not set
|
||||||
CONFIG_BLK_DEV_RAM=y
|
CONFIG_BLK_DEV_RAM=y
|
||||||
|
@ -516,7 +627,6 @@ CONFIG_BLK_DEV_RAM_SIZE=16384
|
||||||
# CONFIG_ATA_OVER_ETH is not set
|
# CONFIG_ATA_OVER_ETH is not set
|
||||||
# CONFIG_MG_DISK is not set
|
# CONFIG_MG_DISK is not set
|
||||||
# CONFIG_MISC_DEVICES is not set
|
# CONFIG_MISC_DEVICES is not set
|
||||||
CONFIG_EEPROM_93CX6=m
|
|
||||||
CONFIG_HAVE_IDE=y
|
CONFIG_HAVE_IDE=y
|
||||||
# CONFIG_IDE is not set
|
# CONFIG_IDE is not set
|
||||||
|
|
||||||
|
@ -613,56 +723,26 @@ CONFIG_SMSC911X=y
|
||||||
# CONFIG_NETDEV_1000 is not set
|
# CONFIG_NETDEV_1000 is not set
|
||||||
# CONFIG_NETDEV_10000 is not set
|
# CONFIG_NETDEV_10000 is not set
|
||||||
CONFIG_WLAN=y
|
CONFIG_WLAN=y
|
||||||
# CONFIG_WLAN_PRE80211 is not set
|
# CONFIG_LIBERTAS_THINFIRM is not set
|
||||||
CONFIG_WLAN_80211=y
|
# CONFIG_AT76C50X_USB is not set
|
||||||
CONFIG_LIBERTAS=m
|
# CONFIG_USB_ZD1201 is not set
|
||||||
CONFIG_LIBERTAS_USB=m
|
# CONFIG_USB_NET_RNDIS_WLAN is not set
|
||||||
CONFIG_LIBERTAS_SDIO=m
|
# CONFIG_RTL8187 is not set
|
||||||
|
# CONFIG_MAC80211_HWSIM is not set
|
||||||
|
# CONFIG_ATH_COMMON is not set
|
||||||
|
# CONFIG_B43 is not set
|
||||||
|
# CONFIG_B43LEGACY is not set
|
||||||
|
# CONFIG_HOSTAP is not set
|
||||||
|
# CONFIG_IWM is not set
|
||||||
|
CONFIG_LIBERTAS=y
|
||||||
|
# CONFIG_LIBERTAS_USB is not set
|
||||||
|
CONFIG_LIBERTAS_SDIO=y
|
||||||
# CONFIG_LIBERTAS_SPI is not set
|
# CONFIG_LIBERTAS_SPI is not set
|
||||||
# CONFIG_LIBERTAS_DEBUG is not set
|
# CONFIG_LIBERTAS_DEBUG is not set
|
||||||
# CONFIG_LIBERTAS_THINFIRM is not set
|
# CONFIG_P54_COMMON is not set
|
||||||
CONFIG_AT76C50X_USB=m
|
# CONFIG_RT2X00 is not set
|
||||||
CONFIG_USB_ZD1201=m
|
# CONFIG_WL12XX is not set
|
||||||
CONFIG_USB_NET_RNDIS_WLAN=m
|
# CONFIG_ZD1211RW is not set
|
||||||
CONFIG_RTL8187=m
|
|
||||||
# CONFIG_MAC80211_HWSIM is not set
|
|
||||||
CONFIG_P54_COMMON=m
|
|
||||||
CONFIG_P54_USB=m
|
|
||||||
CONFIG_P54_SPI=m
|
|
||||||
CONFIG_ATH_COMMON=m
|
|
||||||
CONFIG_AR9170_USB=m
|
|
||||||
CONFIG_HOSTAP=m
|
|
||||||
CONFIG_HOSTAP_FIRMWARE=y
|
|
||||||
CONFIG_HOSTAP_FIRMWARE_NVRAM=y
|
|
||||||
CONFIG_B43=m
|
|
||||||
# CONFIG_B43_SDIO is not set
|
|
||||||
# CONFIG_B43_PHY_LP is not set
|
|
||||||
CONFIG_B43_HWRNG=y
|
|
||||||
# CONFIG_B43_DEBUG is not set
|
|
||||||
CONFIG_B43LEGACY=m
|
|
||||||
CONFIG_B43LEGACY_HWRNG=y
|
|
||||||
# CONFIG_B43LEGACY_DEBUG is not set
|
|
||||||
CONFIG_B43LEGACY_DMA=y
|
|
||||||
CONFIG_B43LEGACY_PIO=y
|
|
||||||
CONFIG_B43LEGACY_DMA_AND_PIO_MODE=y
|
|
||||||
# CONFIG_B43LEGACY_DMA_MODE is not set
|
|
||||||
# CONFIG_B43LEGACY_PIO_MODE is not set
|
|
||||||
CONFIG_ZD1211RW=m
|
|
||||||
# CONFIG_ZD1211RW_DEBUG is not set
|
|
||||||
CONFIG_RT2X00=m
|
|
||||||
CONFIG_RT2500USB=m
|
|
||||||
CONFIG_RT73USB=m
|
|
||||||
CONFIG_RT2800USB=m
|
|
||||||
CONFIG_RT2X00_LIB_USB=m
|
|
||||||
CONFIG_RT2X00_LIB=m
|
|
||||||
CONFIG_RT2X00_LIB_HT=y
|
|
||||||
CONFIG_RT2X00_LIB_FIRMWARE=y
|
|
||||||
CONFIG_RT2X00_LIB_CRYPTO=y
|
|
||||||
# CONFIG_RT2X00_DEBUG is not set
|
|
||||||
CONFIG_WL12XX=m
|
|
||||||
# CONFIG_WL1251 is not set
|
|
||||||
# CONFIG_WL1271 is not set
|
|
||||||
# CONFIG_IWM is not set
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Enable WiMAX (Networking options) to see the WiMAX drivers
|
# Enable WiMAX (Networking options) to see the WiMAX drivers
|
||||||
|
@ -672,29 +752,10 @@ CONFIG_WL12XX=m
|
||||||
# USB Network Adapters
|
# USB Network Adapters
|
||||||
#
|
#
|
||||||
# CONFIG_USB_CATC is not set
|
# CONFIG_USB_CATC is not set
|
||||||
CONFIG_USB_KAWETH=m
|
# CONFIG_USB_KAWETH is not set
|
||||||
CONFIG_USB_PEGASUS=m
|
# CONFIG_USB_PEGASUS is not set
|
||||||
# CONFIG_USB_RTL8150 is not set
|
# CONFIG_USB_RTL8150 is not set
|
||||||
CONFIG_USB_USBNET=m
|
# CONFIG_USB_USBNET is not set
|
||||||
CONFIG_USB_NET_AX8817X=m
|
|
||||||
CONFIG_USB_NET_CDCETHER=m
|
|
||||||
CONFIG_USB_NET_CDC_EEM=m
|
|
||||||
CONFIG_USB_NET_DM9601=m
|
|
||||||
CONFIG_USB_NET_SMSC95XX=m
|
|
||||||
CONFIG_USB_NET_GL620A=m
|
|
||||||
CONFIG_USB_NET_NET1080=m
|
|
||||||
CONFIG_USB_NET_PLUSB=m
|
|
||||||
CONFIG_USB_NET_MCS7830=m
|
|
||||||
CONFIG_USB_NET_RNDIS_HOST=m
|
|
||||||
CONFIG_USB_NET_CDC_SUBSET=m
|
|
||||||
# CONFIG_USB_ALI_M5632 is not set
|
|
||||||
# CONFIG_USB_AN2720 is not set
|
|
||||||
CONFIG_USB_BELKIN=y
|
|
||||||
CONFIG_USB_ARMLINUX=y
|
|
||||||
# CONFIG_USB_EPSON2888 is not set
|
|
||||||
# CONFIG_USB_KC2190 is not set
|
|
||||||
CONFIG_USB_NET_ZAURUS=m
|
|
||||||
# CONFIG_USB_NET_INT51X1 is not set
|
|
||||||
# CONFIG_WAN is not set
|
# CONFIG_WAN is not set
|
||||||
# CONFIG_PPP is not set
|
# CONFIG_PPP is not set
|
||||||
# CONFIG_SLIP is not set
|
# CONFIG_SLIP is not set
|
||||||
|
@ -710,6 +771,7 @@ CONFIG_USB_NET_ZAURUS=m
|
||||||
CONFIG_INPUT=y
|
CONFIG_INPUT=y
|
||||||
# CONFIG_INPUT_FF_MEMLESS is not set
|
# CONFIG_INPUT_FF_MEMLESS is not set
|
||||||
# CONFIG_INPUT_POLLDEV is not set
|
# CONFIG_INPUT_POLLDEV is not set
|
||||||
|
# CONFIG_INPUT_SPARSEKMAP is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Userland interfaces
|
# Userland interfaces
|
||||||
|
@ -809,7 +871,6 @@ CONFIG_I2C_OMAP=y
|
||||||
#
|
#
|
||||||
# Miscellaneous I2C Chip support
|
# Miscellaneous I2C Chip support
|
||||||
#
|
#
|
||||||
# CONFIG_DS1682 is not set
|
|
||||||
# CONFIG_SENSORS_TSL2550 is not set
|
# CONFIG_SENSORS_TSL2550 is not set
|
||||||
# CONFIG_I2C_DEBUG_CORE is not set
|
# CONFIG_I2C_DEBUG_CORE is not set
|
||||||
# CONFIG_I2C_DEBUG_ALGO is not set
|
# CONFIG_I2C_DEBUG_ALGO is not set
|
||||||
|
@ -825,6 +886,8 @@ CONFIG_SPI_MASTER=y
|
||||||
# CONFIG_SPI_BITBANG is not set
|
# CONFIG_SPI_BITBANG is not set
|
||||||
# CONFIG_SPI_GPIO is not set
|
# CONFIG_SPI_GPIO is not set
|
||||||
CONFIG_SPI_OMAP24XX=y
|
CONFIG_SPI_OMAP24XX=y
|
||||||
|
# CONFIG_SPI_XILINX is not set
|
||||||
|
# CONFIG_SPI_DESIGNWARE is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# SPI Protocol Masters
|
# SPI Protocol Masters
|
||||||
|
@ -892,7 +955,7 @@ CONFIG_SSB_SDIOHOST_POSSIBLE=y
|
||||||
#
|
#
|
||||||
# Multifunction device drivers
|
# Multifunction device drivers
|
||||||
#
|
#
|
||||||
# CONFIG_MFD_CORE is not set
|
CONFIG_MFD_CORE=y
|
||||||
# CONFIG_MFD_SM501 is not set
|
# CONFIG_MFD_SM501 is not set
|
||||||
# CONFIG_MFD_ASIC3 is not set
|
# CONFIG_MFD_ASIC3 is not set
|
||||||
# CONFIG_HTC_EGPIO is not set
|
# CONFIG_HTC_EGPIO is not set
|
||||||
|
@ -900,11 +963,13 @@ CONFIG_SSB_SDIOHOST_POSSIBLE=y
|
||||||
# CONFIG_TPS65010 is not set
|
# CONFIG_TPS65010 is not set
|
||||||
CONFIG_TWL4030_CORE=y
|
CONFIG_TWL4030_CORE=y
|
||||||
# CONFIG_TWL4030_POWER is not set
|
# CONFIG_TWL4030_POWER is not set
|
||||||
|
CONFIG_TWL4030_CODEC=y
|
||||||
# CONFIG_MFD_TMIO is not set
|
# CONFIG_MFD_TMIO is not set
|
||||||
# CONFIG_MFD_T7L66XB is not set
|
# CONFIG_MFD_T7L66XB is not set
|
||||||
# CONFIG_MFD_TC6387XB is not set
|
# CONFIG_MFD_TC6387XB is not set
|
||||||
# CONFIG_MFD_TC6393XB is not set
|
# CONFIG_MFD_TC6393XB is not set
|
||||||
# CONFIG_PMIC_DA903X is not set
|
# CONFIG_PMIC_DA903X is not set
|
||||||
|
# CONFIG_PMIC_ADP5520 is not set
|
||||||
# CONFIG_MFD_WM8400 is not set
|
# CONFIG_MFD_WM8400 is not set
|
||||||
# CONFIG_MFD_WM831X is not set
|
# CONFIG_MFD_WM831X is not set
|
||||||
# CONFIG_MFD_WM8350_I2C is not set
|
# CONFIG_MFD_WM8350_I2C is not set
|
||||||
|
@ -912,6 +977,8 @@ CONFIG_TWL4030_CORE=y
|
||||||
# CONFIG_MFD_MC13783 is not set
|
# CONFIG_MFD_MC13783 is not set
|
||||||
# CONFIG_AB3100_CORE is not set
|
# CONFIG_AB3100_CORE is not set
|
||||||
# CONFIG_EZX_PCAP is not set
|
# CONFIG_EZX_PCAP is not set
|
||||||
|
# CONFIG_MFD_88PM8607 is not set
|
||||||
|
# CONFIG_AB4500_CORE is not set
|
||||||
CONFIG_REGULATOR=y
|
CONFIG_REGULATOR=y
|
||||||
# CONFIG_REGULATOR_DEBUG is not set
|
# CONFIG_REGULATOR_DEBUG is not set
|
||||||
# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
|
# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
|
||||||
|
@ -919,6 +986,7 @@ CONFIG_REGULATOR=y
|
||||||
# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set
|
# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set
|
||||||
# CONFIG_REGULATOR_BQ24022 is not set
|
# CONFIG_REGULATOR_BQ24022 is not set
|
||||||
# CONFIG_REGULATOR_MAX1586 is not set
|
# CONFIG_REGULATOR_MAX1586 is not set
|
||||||
|
# CONFIG_REGULATOR_MAX8660 is not set
|
||||||
CONFIG_REGULATOR_TWL4030=y
|
CONFIG_REGULATOR_TWL4030=y
|
||||||
# CONFIG_REGULATOR_LP3971 is not set
|
# CONFIG_REGULATOR_LP3971 is not set
|
||||||
# CONFIG_REGULATOR_TPS65023 is not set
|
# CONFIG_REGULATOR_TPS65023 is not set
|
||||||
|
@ -930,65 +998,129 @@ CONFIG_REGULATOR_TWL4030=y
|
||||||
#
|
#
|
||||||
# CONFIG_VGASTATE is not set
|
# CONFIG_VGASTATE is not set
|
||||||
# CONFIG_VIDEO_OUTPUT_CONTROL is not set
|
# CONFIG_VIDEO_OUTPUT_CONTROL is not set
|
||||||
# CONFIG_FB is not set
|
CONFIG_FB=y
|
||||||
|
# CONFIG_FIRMWARE_EDID is not set
|
||||||
|
# CONFIG_FB_DDC is not set
|
||||||
|
# CONFIG_FB_BOOT_VESA_SUPPORT is not set
|
||||||
|
CONFIG_FB_CFB_FILLRECT=y
|
||||||
|
CONFIG_FB_CFB_COPYAREA=y
|
||||||
|
CONFIG_FB_CFB_IMAGEBLIT=y
|
||||||
|
# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
|
||||||
|
# CONFIG_FB_SYS_FILLRECT is not set
|
||||||
|
# CONFIG_FB_SYS_COPYAREA is not set
|
||||||
|
# CONFIG_FB_SYS_IMAGEBLIT is not set
|
||||||
|
# CONFIG_FB_FOREIGN_ENDIAN is not set
|
||||||
|
# CONFIG_FB_SYS_FOPS is not set
|
||||||
|
# CONFIG_FB_SVGALIB is not set
|
||||||
|
# CONFIG_FB_MACMODES is not set
|
||||||
|
# CONFIG_FB_BACKLIGHT is not set
|
||||||
|
CONFIG_FB_MODE_HELPERS=y
|
||||||
|
# CONFIG_FB_TILEBLITTING is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Frame buffer hardware drivers
|
||||||
|
#
|
||||||
|
# CONFIG_FB_UVESA is not set
|
||||||
|
# CONFIG_FB_S1D13XXX is not set
|
||||||
|
# CONFIG_FB_TMIO is not set
|
||||||
|
# CONFIG_FB_VIRTUAL is not set
|
||||||
|
# CONFIG_FB_METRONOME is not set
|
||||||
|
# CONFIG_FB_MB862XX is not set
|
||||||
|
# CONFIG_FB_BROADSHEET is not set
|
||||||
|
# CONFIG_FB_OMAP_BOOTLOADER_INIT is not set
|
||||||
|
CONFIG_OMAP2_VRAM=y
|
||||||
|
CONFIG_OMAP2_VRFB=y
|
||||||
|
CONFIG_OMAP2_DSS=y
|
||||||
|
CONFIG_OMAP2_VRAM_SIZE=14
|
||||||
|
# CONFIG_OMAP2_DSS_DEBUG_SUPPORT is not set
|
||||||
|
# CONFIG_OMAP2_DSS_RFBI is not set
|
||||||
|
# CONFIG_OMAP2_DSS_VENC is not set
|
||||||
|
# CONFIG_OMAP2_DSS_SDI is not set
|
||||||
|
CONFIG_OMAP2_DSS_DSI=y
|
||||||
|
CONFIG_OMAP2_DSS_USE_DSI_PLL=y
|
||||||
|
# CONFIG_OMAP2_DSS_FAKE_VSYNC is not set
|
||||||
|
CONFIG_OMAP2_DSS_MIN_FCK_PER_PCK=0
|
||||||
|
CONFIG_FB_OMAP2=y
|
||||||
|
# CONFIG_FB_OMAP2_DEBUG_SUPPORT is not set
|
||||||
|
# CONFIG_FB_OMAP2_FORCE_AUTO_UPDATE is not set
|
||||||
|
CONFIG_FB_OMAP2_NUM_FBS=3
|
||||||
|
|
||||||
|
#
|
||||||
|
# OMAP2/3 Display Device Drivers
|
||||||
|
#
|
||||||
|
CONFIG_PANEL_GENERIC=y
|
||||||
|
# CONFIG_PANEL_SHARP_LS037V7DW01 is not set
|
||||||
|
# CONFIG_PANEL_TAAL is not set
|
||||||
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
|
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Display device support
|
# Display device support
|
||||||
#
|
#
|
||||||
# CONFIG_DISPLAY_SUPPORT is not set
|
CONFIG_DISPLAY_SUPPORT=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# Display hardware drivers
|
||||||
|
#
|
||||||
|
|
||||||
#
|
#
|
||||||
# Console display driver support
|
# Console display driver support
|
||||||
#
|
#
|
||||||
# CONFIG_VGA_CONSOLE is not set
|
# CONFIG_VGA_CONSOLE is not set
|
||||||
CONFIG_DUMMY_CONSOLE=y
|
CONFIG_DUMMY_CONSOLE=y
|
||||||
# CONFIG_SOUND is not set
|
CONFIG_FRAMEBUFFER_CONSOLE=y
|
||||||
CONFIG_HID_SUPPORT=y
|
# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
|
||||||
CONFIG_HID=y
|
# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
|
||||||
# CONFIG_HIDRAW is not set
|
# CONFIG_FONTS is not set
|
||||||
|
CONFIG_FONT_8x8=y
|
||||||
#
|
CONFIG_FONT_8x16=y
|
||||||
# USB Input Devices
|
CONFIG_LOGO=y
|
||||||
#
|
# CONFIG_LOGO_LINUX_MONO is not set
|
||||||
CONFIG_USB_HID=y
|
# CONFIG_LOGO_LINUX_VGA16 is not set
|
||||||
# CONFIG_HID_PID is not set
|
CONFIG_LOGO_LINUX_CLUT224=y
|
||||||
# CONFIG_USB_HIDDEV is not set
|
CONFIG_SOUND=y
|
||||||
|
# CONFIG_SOUND_OSS_CORE is not set
|
||||||
#
|
CONFIG_SND=y
|
||||||
# Special HID drivers
|
CONFIG_SND_TIMER=y
|
||||||
#
|
CONFIG_SND_PCM=y
|
||||||
# CONFIG_HID_A4TECH is not set
|
CONFIG_SND_JACK=y
|
||||||
# CONFIG_HID_APPLE is not set
|
# CONFIG_SND_SEQUENCER is not set
|
||||||
# CONFIG_HID_BELKIN is not set
|
# CONFIG_SND_MIXER_OSS is not set
|
||||||
# CONFIG_HID_CHERRY is not set
|
# CONFIG_SND_PCM_OSS is not set
|
||||||
# CONFIG_HID_CHICONY is not set
|
# CONFIG_SND_HRTIMER is not set
|
||||||
# CONFIG_HID_CYPRESS is not set
|
# CONFIG_SND_DYNAMIC_MINORS is not set
|
||||||
# CONFIG_HID_DRAGONRISE is not set
|
# CONFIG_SND_SUPPORT_OLD_API is not set
|
||||||
# CONFIG_HID_EZKEY is not set
|
# CONFIG_SND_VERBOSE_PROCFS is not set
|
||||||
# CONFIG_HID_KYE is not set
|
# CONFIG_SND_VERBOSE_PRINTK is not set
|
||||||
# CONFIG_HID_GYRATION is not set
|
# CONFIG_SND_DEBUG is not set
|
||||||
# CONFIG_HID_TWINHAN is not set
|
# CONFIG_SND_RAWMIDI_SEQ is not set
|
||||||
# CONFIG_HID_KENSINGTON is not set
|
# CONFIG_SND_OPL3_LIB_SEQ is not set
|
||||||
# CONFIG_HID_LOGITECH is not set
|
# CONFIG_SND_OPL4_LIB_SEQ is not set
|
||||||
# CONFIG_HID_MICROSOFT is not set
|
# CONFIG_SND_SBAWE_SEQ is not set
|
||||||
# CONFIG_HID_MONTEREY is not set
|
# CONFIG_SND_EMU10K1_SEQ is not set
|
||||||
# CONFIG_HID_NTRIG is not set
|
CONFIG_SND_DRIVERS=y
|
||||||
# CONFIG_HID_PANTHERLORD is not set
|
# CONFIG_SND_DUMMY is not set
|
||||||
# CONFIG_HID_PETALYNX is not set
|
# CONFIG_SND_MTPAV is not set
|
||||||
# CONFIG_HID_SAMSUNG is not set
|
# CONFIG_SND_SERIAL_U16550 is not set
|
||||||
# CONFIG_HID_SONY is not set
|
# CONFIG_SND_MPU401 is not set
|
||||||
# CONFIG_HID_SUNPLUS is not set
|
CONFIG_SND_ARM=y
|
||||||
# CONFIG_HID_GREENASIA is not set
|
CONFIG_SND_SPI=y
|
||||||
# CONFIG_HID_SMARTJOYPLUS is not set
|
CONFIG_SND_USB=y
|
||||||
# CONFIG_HID_TOPSEED is not set
|
# CONFIG_SND_USB_AUDIO is not set
|
||||||
# CONFIG_HID_THRUSTMASTER is not set
|
# CONFIG_SND_USB_CAIAQ is not set
|
||||||
# CONFIG_HID_WACOM is not set
|
CONFIG_SND_SOC=y
|
||||||
# CONFIG_HID_ZEROPLUS is not set
|
CONFIG_SND_OMAP_SOC=y
|
||||||
|
CONFIG_SND_OMAP_SOC_MCBSP=y
|
||||||
|
CONFIG_SND_OMAP_SOC_IGEP0020=y
|
||||||
|
CONFIG_SND_SOC_I2C_AND_SPI=y
|
||||||
|
# CONFIG_SND_SOC_ALL_CODECS is not set
|
||||||
|
CONFIG_SND_SOC_TWL4030=y
|
||||||
|
# CONFIG_SOUND_PRIME is not set
|
||||||
|
# CONFIG_HID_SUPPORT is not set
|
||||||
|
CONFIG_HID=m
|
||||||
CONFIG_USB_SUPPORT=y
|
CONFIG_USB_SUPPORT=y
|
||||||
CONFIG_USB_ARCH_HAS_HCD=y
|
CONFIG_USB_ARCH_HAS_HCD=y
|
||||||
CONFIG_USB_ARCH_HAS_OHCI=y
|
CONFIG_USB_ARCH_HAS_OHCI=y
|
||||||
# CONFIG_USB_ARCH_HAS_EHCI is not set
|
CONFIG_USB_ARCH_HAS_EHCI=y
|
||||||
CONFIG_USB=y
|
CONFIG_USB=y
|
||||||
# CONFIG_USB_DEBUG is not set
|
# CONFIG_USB_DEBUG is not set
|
||||||
CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
|
CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
|
||||||
|
@ -997,12 +1129,12 @@ CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
|
||||||
# Miscellaneous USB options
|
# Miscellaneous USB options
|
||||||
#
|
#
|
||||||
# CONFIG_USB_DEVICEFS is not set
|
# CONFIG_USB_DEVICEFS is not set
|
||||||
# CONFIG_USB_DEVICE_CLASS is not set
|
CONFIG_USB_DEVICE_CLASS=y
|
||||||
# CONFIG_USB_DYNAMIC_MINORS is not set
|
# CONFIG_USB_DYNAMIC_MINORS is not set
|
||||||
# CONFIG_USB_OTG is not set
|
# CONFIG_USB_OTG is not set
|
||||||
# CONFIG_USB_OTG_WHITELIST is not set
|
# CONFIG_USB_OTG_WHITELIST is not set
|
||||||
# CONFIG_USB_OTG_BLACKLIST_HUB is not set
|
# CONFIG_USB_OTG_BLACKLIST_HUB is not set
|
||||||
CONFIG_USB_MON=m
|
# CONFIG_USB_MON is not set
|
||||||
# CONFIG_USB_WUSB is not set
|
# CONFIG_USB_WUSB is not set
|
||||||
# CONFIG_USB_WUSB_CBAF is not set
|
# CONFIG_USB_WUSB_CBAF is not set
|
||||||
|
|
||||||
|
@ -1010,29 +1142,21 @@ CONFIG_USB_MON=m
|
||||||
# USB Host Controller Drivers
|
# USB Host Controller Drivers
|
||||||
#
|
#
|
||||||
# CONFIG_USB_C67X00_HCD is not set
|
# CONFIG_USB_C67X00_HCD is not set
|
||||||
|
CONFIG_USB_EHCI_HCD=y
|
||||||
|
CONFIG_USB_EHCI_ROOT_HUB_TT=y
|
||||||
|
# CONFIG_USB_EHCI_TT_NEWSCHED is not set
|
||||||
# CONFIG_USB_OXU210HP_HCD is not set
|
# CONFIG_USB_OXU210HP_HCD is not set
|
||||||
# CONFIG_USB_ISP116X_HCD is not set
|
# CONFIG_USB_ISP116X_HCD is not set
|
||||||
# CONFIG_USB_ISP1760_HCD is not set
|
# CONFIG_USB_ISP1760_HCD is not set
|
||||||
# CONFIG_USB_ISP1362_HCD is not set
|
# CONFIG_USB_ISP1362_HCD is not set
|
||||||
# CONFIG_USB_OHCI_HCD is not set
|
CONFIG_USB_OHCI_HCD=y
|
||||||
|
# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
|
||||||
|
# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
|
||||||
|
CONFIG_USB_OHCI_LITTLE_ENDIAN=y
|
||||||
# CONFIG_USB_SL811_HCD is not set
|
# CONFIG_USB_SL811_HCD is not set
|
||||||
# CONFIG_USB_R8A66597_HCD is not set
|
# CONFIG_USB_R8A66597_HCD is not set
|
||||||
# CONFIG_USB_HWA_HCD is not set
|
# CONFIG_USB_HWA_HCD is not set
|
||||||
CONFIG_USB_MUSB_HDRC=y
|
# CONFIG_USB_MUSB_HDRC is not set
|
||||||
CONFIG_USB_MUSB_SOC=y
|
|
||||||
|
|
||||||
#
|
|
||||||
# OMAP 343x high speed USB support
|
|
||||||
#
|
|
||||||
CONFIG_USB_MUSB_HOST=y
|
|
||||||
# CONFIG_USB_MUSB_PERIPHERAL is not set
|
|
||||||
# CONFIG_USB_MUSB_OTG is not set
|
|
||||||
# CONFIG_USB_GADGET_MUSB_HDRC is not set
|
|
||||||
CONFIG_USB_MUSB_HDRC_HCD=y
|
|
||||||
# CONFIG_MUSB_PIO_ONLY is not set
|
|
||||||
CONFIG_USB_INVENTRA_DMA=y
|
|
||||||
# CONFIG_USB_TI_CPPI_DMA is not set
|
|
||||||
# CONFIG_USB_MUSB_DEBUG is not set
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# USB Device Class drivers
|
# USB Device Class drivers
|
||||||
|
@ -1049,19 +1173,7 @@ CONFIG_USB_INVENTRA_DMA=y
|
||||||
#
|
#
|
||||||
# also be needed; see USB_STORAGE Help for more info
|
# also be needed; see USB_STORAGE Help for more info
|
||||||
#
|
#
|
||||||
CONFIG_USB_STORAGE=m
|
# CONFIG_USB_STORAGE is not set
|
||||||
# CONFIG_USB_STORAGE_DEBUG is not set
|
|
||||||
# CONFIG_USB_STORAGE_DATAFAB is not set
|
|
||||||
# CONFIG_USB_STORAGE_FREECOM is not set
|
|
||||||
# CONFIG_USB_STORAGE_ISD200 is not set
|
|
||||||
# CONFIG_USB_STORAGE_USBAT is not set
|
|
||||||
# CONFIG_USB_STORAGE_SDDR09 is not set
|
|
||||||
# CONFIG_USB_STORAGE_SDDR55 is not set
|
|
||||||
# CONFIG_USB_STORAGE_JUMPSHOT is not set
|
|
||||||
# CONFIG_USB_STORAGE_ALAUDA is not set
|
|
||||||
# CONFIG_USB_STORAGE_ONETOUCH is not set
|
|
||||||
# CONFIG_USB_STORAGE_KARMA is not set
|
|
||||||
# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
|
|
||||||
# CONFIG_USB_LIBUSUAL is not set
|
# CONFIG_USB_LIBUSUAL is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -1099,41 +1211,7 @@ CONFIG_USB_STORAGE=m
|
||||||
# CONFIG_USB_TEST is not set
|
# CONFIG_USB_TEST is not set
|
||||||
# CONFIG_USB_ISIGHTFW is not set
|
# CONFIG_USB_ISIGHTFW is not set
|
||||||
# CONFIG_USB_VST is not set
|
# CONFIG_USB_VST is not set
|
||||||
CONFIG_USB_GADGET=y
|
# CONFIG_USB_GADGET is not set
|
||||||
CONFIG_USB_GADGET_DEBUG=y
|
|
||||||
CONFIG_USB_GADGET_DEBUG_FILES=y
|
|
||||||
CONFIG_USB_GADGET_VBUS_DRAW=2
|
|
||||||
CONFIG_USB_GADGET_SELECTED=y
|
|
||||||
# CONFIG_USB_GADGET_AT91 is not set
|
|
||||||
# CONFIG_USB_GADGET_ATMEL_USBA is not set
|
|
||||||
# CONFIG_USB_GADGET_FSL_USB2 is not set
|
|
||||||
# CONFIG_USB_GADGET_LH7A40X is not set
|
|
||||||
CONFIG_USB_GADGET_OMAP=y
|
|
||||||
CONFIG_USB_OMAP=y
|
|
||||||
# CONFIG_USB_GADGET_PXA25X is not set
|
|
||||||
# CONFIG_USB_GADGET_R8A66597 is not set
|
|
||||||
# CONFIG_USB_GADGET_PXA27X is not set
|
|
||||||
# CONFIG_USB_GADGET_S3C_HSOTG is not set
|
|
||||||
# CONFIG_USB_GADGET_IMX is not set
|
|
||||||
# CONFIG_USB_GADGET_S3C2410 is not set
|
|
||||||
# CONFIG_USB_GADGET_M66592 is not set
|
|
||||||
# CONFIG_USB_GADGET_AMD5536UDC is not set
|
|
||||||
# CONFIG_USB_GADGET_FSL_QE is not set
|
|
||||||
# CONFIG_USB_GADGET_CI13XXX is not set
|
|
||||||
# CONFIG_USB_GADGET_NET2280 is not set
|
|
||||||
# CONFIG_USB_GADGET_GOKU is not set
|
|
||||||
# CONFIG_USB_GADGET_LANGWELL is not set
|
|
||||||
# CONFIG_USB_GADGET_DUMMY_HCD is not set
|
|
||||||
# CONFIG_USB_GADGET_DUALSPEED is not set
|
|
||||||
CONFIG_USB_ZERO=m
|
|
||||||
# CONFIG_USB_AUDIO is not set
|
|
||||||
# CONFIG_USB_ETH is not set
|
|
||||||
# CONFIG_USB_GADGETFS is not set
|
|
||||||
# CONFIG_USB_FILE_STORAGE is not set
|
|
||||||
# CONFIG_USB_G_SERIAL is not set
|
|
||||||
# CONFIG_USB_MIDI_GADGET is not set
|
|
||||||
# CONFIG_USB_G_PRINTER is not set
|
|
||||||
# CONFIG_USB_CDC_COMPOSITE is not set
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# OTG and related infrastructure
|
# OTG and related infrastructure
|
||||||
|
@ -1141,10 +1219,11 @@ CONFIG_USB_ZERO=m
|
||||||
CONFIG_USB_OTG_UTILS=y
|
CONFIG_USB_OTG_UTILS=y
|
||||||
# CONFIG_USB_GPIO_VBUS is not set
|
# CONFIG_USB_GPIO_VBUS is not set
|
||||||
# CONFIG_ISP1301_OMAP is not set
|
# CONFIG_ISP1301_OMAP is not set
|
||||||
CONFIG_TWL4030_USB=y
|
# CONFIG_USB_ULPI is not set
|
||||||
|
# CONFIG_TWL4030_USB is not set
|
||||||
# CONFIG_NOP_USB_XCEIV is not set
|
# CONFIG_NOP_USB_XCEIV is not set
|
||||||
CONFIG_MMC=y
|
CONFIG_MMC=y
|
||||||
# CONFIG_MMC_DEBUG is not set
|
CONFIG_MMC_DEBUG=y
|
||||||
# CONFIG_MMC_UNSAFE_RESUME is not set
|
# CONFIG_MMC_UNSAFE_RESUME is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -1158,7 +1237,8 @@ CONFIG_MMC_BLOCK_BOUNCE=y
|
||||||
#
|
#
|
||||||
# MMC/SD/SDIO Host Controller Drivers
|
# MMC/SD/SDIO Host Controller Drivers
|
||||||
#
|
#
|
||||||
# CONFIG_MMC_SDHCI is not set
|
CONFIG_MMC_SDHCI=y
|
||||||
|
# CONFIG_MMC_SDHCI_PLTFM is not set
|
||||||
# CONFIG_MMC_OMAP is not set
|
# CONFIG_MMC_OMAP is not set
|
||||||
CONFIG_MMC_OMAP_HS=y
|
CONFIG_MMC_OMAP_HS=y
|
||||||
# CONFIG_MMC_AT91 is not set
|
# CONFIG_MMC_AT91 is not set
|
||||||
|
@ -1178,6 +1258,11 @@ CONFIG_RTC_LIB=y
|
||||||
#
|
#
|
||||||
# CONFIG_STAGING is not set
|
# CONFIG_STAGING is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# CBUS support
|
||||||
|
#
|
||||||
|
# CONFIG_CBUS is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# File systems
|
# File systems
|
||||||
#
|
#
|
||||||
|
@ -1253,6 +1338,7 @@ CONFIG_MISC_FILESYSTEMS=y
|
||||||
# CONFIG_BEFS_FS is not set
|
# CONFIG_BEFS_FS is not set
|
||||||
# CONFIG_BFS_FS is not set
|
# CONFIG_BFS_FS is not set
|
||||||
# CONFIG_EFS_FS is not set
|
# CONFIG_EFS_FS is not set
|
||||||
|
# CONFIG_JFFS2_FS is not set
|
||||||
# CONFIG_CRAMFS is not set
|
# CONFIG_CRAMFS is not set
|
||||||
# CONFIG_SQUASHFS is not set
|
# CONFIG_SQUASHFS is not set
|
||||||
# CONFIG_VXFS_FS is not set
|
# CONFIG_VXFS_FS is not set
|
||||||
|
@ -1401,6 +1487,7 @@ CONFIG_DEBUG_INFO=y
|
||||||
# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
|
# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
|
||||||
# CONFIG_FAULT_INJECTION is not set
|
# CONFIG_FAULT_INJECTION is not set
|
||||||
# CONFIG_LATENCYTOP is not set
|
# CONFIG_LATENCYTOP is not set
|
||||||
|
# CONFIG_SYSCTL_SYSCALL_CHECK is not set
|
||||||
# CONFIG_PAGE_POISONING is not set
|
# CONFIG_PAGE_POISONING is not set
|
||||||
CONFIG_HAVE_FUNCTION_TRACER=y
|
CONFIG_HAVE_FUNCTION_TRACER=y
|
||||||
CONFIG_TRACING_SUPPORT=y
|
CONFIG_TRACING_SUPPORT=y
|
||||||
|
@ -1425,7 +1512,9 @@ CONFIG_ARM_UNWIND=y
|
||||||
# CONFIG_DEBUG_ERRORS is not set
|
# CONFIG_DEBUG_ERRORS is not set
|
||||||
# CONFIG_DEBUG_STACK_USAGE is not set
|
# CONFIG_DEBUG_STACK_USAGE is not set
|
||||||
CONFIG_DEBUG_LL=y
|
CONFIG_DEBUG_LL=y
|
||||||
|
# CONFIG_EARLY_PRINTK is not set
|
||||||
# CONFIG_DEBUG_ICEDCC is not set
|
# CONFIG_DEBUG_ICEDCC is not set
|
||||||
|
# CONFIG_OC_ETM is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Security options
|
# Security options
|
||||||
|
@ -1433,7 +1522,11 @@ CONFIG_DEBUG_LL=y
|
||||||
# CONFIG_KEYS is not set
|
# CONFIG_KEYS is not set
|
||||||
# CONFIG_SECURITY is not set
|
# CONFIG_SECURITY is not set
|
||||||
# CONFIG_SECURITYFS is not set
|
# CONFIG_SECURITYFS is not set
|
||||||
# CONFIG_SECURITY_FILE_CAPABILITIES is not set
|
# CONFIG_DEFAULT_SECURITY_SELINUX is not set
|
||||||
|
# CONFIG_DEFAULT_SECURITY_SMACK is not set
|
||||||
|
# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
|
||||||
|
CONFIG_DEFAULT_SECURITY_DAC=y
|
||||||
|
CONFIG_DEFAULT_SECURITY=""
|
||||||
CONFIG_CRYPTO=y
|
CONFIG_CRYPTO=y
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
#
|
#
|
||||||
# Automatically generated make config: don't edit
|
# Automatically generated make config: don't edit
|
||||||
# Linux kernel version: 2.6.32-rc8
|
# Linux kernel version: 2.6.33-rc5
|
||||||
# Tue Dec 1 14:04:02 2009
|
# Tue Jan 26 11:05:31 2010
|
||||||
#
|
#
|
||||||
CONFIG_ARM=y
|
CONFIG_ARM=y
|
||||||
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
|
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
|
||||||
|
@ -20,6 +20,8 @@ CONFIG_ARCH_HAS_CPUFREQ=y
|
||||||
CONFIG_GENERIC_HWEIGHT=y
|
CONFIG_GENERIC_HWEIGHT=y
|
||||||
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
CONFIG_GENERIC_CALIBRATE_DELAY=y
|
||||||
CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
|
CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
|
||||||
|
CONFIG_OPROFILE_ARMV6=y
|
||||||
|
CONFIG_OPROFILE_ARM11_CORE=y
|
||||||
CONFIG_OPROFILE_ARMV7=y
|
CONFIG_OPROFILE_ARMV7=y
|
||||||
CONFIG_VECTORS_BASE=0xffff0000
|
CONFIG_VECTORS_BASE=0xffff0000
|
||||||
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
|
||||||
|
@ -33,6 +35,12 @@ CONFIG_BROKEN_ON_SMP=y
|
||||||
CONFIG_INIT_ENV_ARG_LIMIT=32
|
CONFIG_INIT_ENV_ARG_LIMIT=32
|
||||||
CONFIG_LOCALVERSION=""
|
CONFIG_LOCALVERSION=""
|
||||||
CONFIG_LOCALVERSION_AUTO=y
|
CONFIG_LOCALVERSION_AUTO=y
|
||||||
|
CONFIG_HAVE_KERNEL_GZIP=y
|
||||||
|
CONFIG_HAVE_KERNEL_LZO=y
|
||||||
|
CONFIG_KERNEL_GZIP=y
|
||||||
|
# CONFIG_KERNEL_BZIP2 is not set
|
||||||
|
# CONFIG_KERNEL_LZMA is not set
|
||||||
|
# CONFIG_KERNEL_LZO is not set
|
||||||
CONFIG_SWAP=y
|
CONFIG_SWAP=y
|
||||||
CONFIG_SYSVIPC=y
|
CONFIG_SYSVIPC=y
|
||||||
CONFIG_SYSVIPC_SYSCTL=y
|
CONFIG_SYSVIPC_SYSCTL=y
|
||||||
|
@ -48,6 +56,7 @@ CONFIG_BSD_PROCESS_ACCT=y
|
||||||
#
|
#
|
||||||
CONFIG_TREE_RCU=y
|
CONFIG_TREE_RCU=y
|
||||||
# CONFIG_TREE_PREEMPT_RCU is not set
|
# CONFIG_TREE_PREEMPT_RCU is not set
|
||||||
|
# CONFIG_TINY_RCU is not set
|
||||||
# CONFIG_RCU_TRACE is not set
|
# CONFIG_RCU_TRACE is not set
|
||||||
CONFIG_RCU_FANOUT=32
|
CONFIG_RCU_FANOUT=32
|
||||||
# CONFIG_RCU_FANOUT_EXACT is not set
|
# CONFIG_RCU_FANOUT_EXACT is not set
|
||||||
|
@ -69,6 +78,7 @@ CONFIG_INITRAMFS_SOURCE=""
|
||||||
CONFIG_RD_GZIP=y
|
CONFIG_RD_GZIP=y
|
||||||
# CONFIG_RD_BZIP2 is not set
|
# CONFIG_RD_BZIP2 is not set
|
||||||
# CONFIG_RD_LZMA is not set
|
# CONFIG_RD_LZMA is not set
|
||||||
|
# CONFIG_RD_LZO is not set
|
||||||
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
|
||||||
CONFIG_SYSCTL=y
|
CONFIG_SYSCTL=y
|
||||||
CONFIG_ANON_INODES=y
|
CONFIG_ANON_INODES=y
|
||||||
|
@ -133,14 +143,41 @@ CONFIG_LBDAF=y
|
||||||
# IO Schedulers
|
# IO Schedulers
|
||||||
#
|
#
|
||||||
CONFIG_IOSCHED_NOOP=y
|
CONFIG_IOSCHED_NOOP=y
|
||||||
CONFIG_IOSCHED_AS=y
|
|
||||||
CONFIG_IOSCHED_DEADLINE=y
|
CONFIG_IOSCHED_DEADLINE=y
|
||||||
CONFIG_IOSCHED_CFQ=y
|
CONFIG_IOSCHED_CFQ=y
|
||||||
# CONFIG_DEFAULT_AS is not set
|
|
||||||
# CONFIG_DEFAULT_DEADLINE is not set
|
# CONFIG_DEFAULT_DEADLINE is not set
|
||||||
CONFIG_DEFAULT_CFQ=y
|
CONFIG_DEFAULT_CFQ=y
|
||||||
# CONFIG_DEFAULT_NOOP is not set
|
# CONFIG_DEFAULT_NOOP is not set
|
||||||
CONFIG_DEFAULT_IOSCHED="cfq"
|
CONFIG_DEFAULT_IOSCHED="cfq"
|
||||||
|
# CONFIG_INLINE_SPIN_TRYLOCK is not set
|
||||||
|
# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
|
||||||
|
# CONFIG_INLINE_SPIN_LOCK is not set
|
||||||
|
# CONFIG_INLINE_SPIN_LOCK_BH is not set
|
||||||
|
# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
|
||||||
|
# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
|
||||||
|
# CONFIG_INLINE_SPIN_UNLOCK is not set
|
||||||
|
# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
|
||||||
|
# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set
|
||||||
|
# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
|
||||||
|
# CONFIG_INLINE_READ_TRYLOCK is not set
|
||||||
|
# CONFIG_INLINE_READ_LOCK is not set
|
||||||
|
# CONFIG_INLINE_READ_LOCK_BH is not set
|
||||||
|
# CONFIG_INLINE_READ_LOCK_IRQ is not set
|
||||||
|
# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
|
||||||
|
# CONFIG_INLINE_READ_UNLOCK is not set
|
||||||
|
# CONFIG_INLINE_READ_UNLOCK_BH is not set
|
||||||
|
# CONFIG_INLINE_READ_UNLOCK_IRQ is not set
|
||||||
|
# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
|
||||||
|
# CONFIG_INLINE_WRITE_TRYLOCK is not set
|
||||||
|
# CONFIG_INLINE_WRITE_LOCK is not set
|
||||||
|
# CONFIG_INLINE_WRITE_LOCK_BH is not set
|
||||||
|
# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
|
||||||
|
# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
|
||||||
|
# CONFIG_INLINE_WRITE_UNLOCK is not set
|
||||||
|
# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
|
||||||
|
# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set
|
||||||
|
# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
|
||||||
|
# CONFIG_MUTEX_SPIN_ON_OWNER is not set
|
||||||
CONFIG_FREEZER=y
|
CONFIG_FREEZER=y
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -169,6 +206,7 @@ CONFIG_MMU=y
|
||||||
# CONFIG_ARCH_IXP2000 is not set
|
# CONFIG_ARCH_IXP2000 is not set
|
||||||
# CONFIG_ARCH_IXP4XX is not set
|
# CONFIG_ARCH_IXP4XX is not set
|
||||||
# CONFIG_ARCH_L7200 is not set
|
# CONFIG_ARCH_L7200 is not set
|
||||||
|
# CONFIG_ARCH_DOVE is not set
|
||||||
# CONFIG_ARCH_KIRKWOOD is not set
|
# CONFIG_ARCH_KIRKWOOD is not set
|
||||||
# CONFIG_ARCH_LOKI is not set
|
# CONFIG_ARCH_LOKI is not set
|
||||||
# CONFIG_ARCH_MV78XX0 is not set
|
# CONFIG_ARCH_MV78XX0 is not set
|
||||||
|
@ -191,21 +229,23 @@ CONFIG_MMU=y
|
||||||
# CONFIG_ARCH_DAVINCI is not set
|
# CONFIG_ARCH_DAVINCI is not set
|
||||||
CONFIG_ARCH_OMAP=y
|
CONFIG_ARCH_OMAP=y
|
||||||
# CONFIG_ARCH_BCMRING is not set
|
# CONFIG_ARCH_BCMRING is not set
|
||||||
|
# CONFIG_ARCH_U8500 is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# TI OMAP Implementations
|
# TI OMAP Implementations
|
||||||
#
|
#
|
||||||
CONFIG_ARCH_OMAP_OTG=y
|
CONFIG_ARCH_OMAP_OTG=y
|
||||||
# CONFIG_ARCH_OMAP1 is not set
|
# CONFIG_ARCH_OMAP1 is not set
|
||||||
# CONFIG_ARCH_OMAP2 is not set
|
CONFIG_ARCH_OMAP2PLUS=y
|
||||||
|
CONFIG_ARCH_OMAP2=y
|
||||||
CONFIG_ARCH_OMAP3=y
|
CONFIG_ARCH_OMAP3=y
|
||||||
# CONFIG_ARCH_OMAP4 is not set
|
CONFIG_ARCH_OMAP4=y
|
||||||
|
|
||||||
#
|
#
|
||||||
# OMAP Feature Selections
|
# OMAP Feature Selections
|
||||||
#
|
#
|
||||||
# CONFIG_OMAP_DEBUG_POWERDOMAIN is not set
|
CONFIG_OMAP_DEBUG_DEVICES=y
|
||||||
# CONFIG_OMAP_DEBUG_CLOCKDOMAIN is not set
|
CONFIG_OMAP_DEBUG_LEDS=y
|
||||||
CONFIG_OMAP_RESET_CLOCKS=y
|
CONFIG_OMAP_RESET_CLOCKS=y
|
||||||
CONFIG_OMAP_MUX=y
|
CONFIG_OMAP_MUX=y
|
||||||
CONFIG_OMAP_MUX_DEBUG=y
|
CONFIG_OMAP_MUX_DEBUG=y
|
||||||
|
@ -216,43 +256,66 @@ CONFIG_OMAP_MCBSP=y
|
||||||
CONFIG_OMAP_32K_TIMER=y
|
CONFIG_OMAP_32K_TIMER=y
|
||||||
CONFIG_OMAP_32K_TIMER_HZ=128
|
CONFIG_OMAP_32K_TIMER_HZ=128
|
||||||
CONFIG_OMAP_DM_TIMER=y
|
CONFIG_OMAP_DM_TIMER=y
|
||||||
# CONFIG_OMAP_LL_DEBUG_UART1 is not set
|
|
||||||
# CONFIG_OMAP_LL_DEBUG_UART2 is not set
|
|
||||||
# CONFIG_OMAP_LL_DEBUG_UART3 is not set
|
|
||||||
CONFIG_OMAP_LL_DEBUG_NONE=y
|
|
||||||
# CONFIG_OMAP_PM_NONE is not set
|
# CONFIG_OMAP_PM_NONE is not set
|
||||||
CONFIG_OMAP_PM_NOOP=y
|
CONFIG_OMAP_PM_NOOP=y
|
||||||
CONFIG_ARCH_OMAP34XX=y
|
CONFIG_MACH_OMAP_GENERIC=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# OMAP Core Type
|
||||||
|
#
|
||||||
|
CONFIG_ARCH_OMAP2420=y
|
||||||
|
# CONFIG_ARCH_OMAP2430 is not set
|
||||||
CONFIG_ARCH_OMAP3430=y
|
CONFIG_ARCH_OMAP3430=y
|
||||||
|
CONFIG_OMAP_PACKAGE_CBB=y
|
||||||
|
CONFIG_OMAP_PACKAGE_CUS=y
|
||||||
|
CONFIG_OMAP_PACKAGE_CBP=y
|
||||||
|
|
||||||
#
|
#
|
||||||
# OMAP Board Type
|
# OMAP Board Type
|
||||||
#
|
#
|
||||||
|
CONFIG_MACH_OMAP2_TUSB6010=y
|
||||||
|
CONFIG_MACH_OMAP_H4=y
|
||||||
|
CONFIG_MACH_OMAP_APOLLON=y
|
||||||
|
# CONFIG_MACH_OMAP_2430SDP is not set
|
||||||
CONFIG_MACH_OMAP3_BEAGLE=y
|
CONFIG_MACH_OMAP3_BEAGLE=y
|
||||||
CONFIG_MACH_OMAP_LDP=y
|
CONFIG_MACH_OMAP_LDP=y
|
||||||
CONFIG_MACH_OVERO=y
|
CONFIG_MACH_OVERO=y
|
||||||
CONFIG_MACH_OMAP3EVM=y
|
CONFIG_MACH_OMAP3EVM=y
|
||||||
CONFIG_MACH_OMAP3517EVM=y
|
CONFIG_MACH_OMAP3517EVM=y
|
||||||
CONFIG_MACH_OMAP3_PANDORA=y
|
CONFIG_MACH_OMAP3_PANDORA=y
|
||||||
|
CONFIG_MACH_OMAP3_TOUCHBOOK=y
|
||||||
CONFIG_MACH_OMAP_3430SDP=y
|
CONFIG_MACH_OMAP_3430SDP=y
|
||||||
|
CONFIG_MACH_NOKIA_N800=y
|
||||||
|
CONFIG_MACH_NOKIA_N810=y
|
||||||
|
CONFIG_MACH_NOKIA_N810_WIMAX=y
|
||||||
|
CONFIG_MACH_NOKIA_N8X0=y
|
||||||
CONFIG_MACH_NOKIA_RX51=y
|
CONFIG_MACH_NOKIA_RX51=y
|
||||||
CONFIG_MACH_OMAP_ZOOM2=y
|
CONFIG_MACH_OMAP_ZOOM2=y
|
||||||
CONFIG_MACH_OMAP_ZOOM3=y
|
CONFIG_MACH_OMAP_ZOOM3=y
|
||||||
CONFIG_MACH_CM_T35=y
|
CONFIG_MACH_CM_T35=y
|
||||||
CONFIG_MACH_IGEP0020=y
|
CONFIG_MACH_IGEP0020=y
|
||||||
CONFIG_MACH_OMAP_3630SDP=y
|
CONFIG_MACH_OMAP_3630SDP=y
|
||||||
|
CONFIG_MACH_OMAP_4430SDP=y
|
||||||
|
# CONFIG_OMAP3_EMU is not set
|
||||||
|
# CONFIG_OMAP3_SDRC_AC_TIMING is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Processor Type
|
# Processor Type
|
||||||
#
|
#
|
||||||
CONFIG_CPU_32v6K=y
|
CONFIG_CPU_V6=y
|
||||||
|
# CONFIG_CPU_32v6K is not set
|
||||||
CONFIG_CPU_V7=y
|
CONFIG_CPU_V7=y
|
||||||
|
CONFIG_CPU_32v6=y
|
||||||
CONFIG_CPU_32v7=y
|
CONFIG_CPU_32v7=y
|
||||||
|
CONFIG_CPU_ABRT_EV6=y
|
||||||
CONFIG_CPU_ABRT_EV7=y
|
CONFIG_CPU_ABRT_EV7=y
|
||||||
|
CONFIG_CPU_PABRT_V6=y
|
||||||
CONFIG_CPU_PABRT_V7=y
|
CONFIG_CPU_PABRT_V7=y
|
||||||
|
CONFIG_CPU_CACHE_V6=y
|
||||||
CONFIG_CPU_CACHE_V7=y
|
CONFIG_CPU_CACHE_V7=y
|
||||||
CONFIG_CPU_CACHE_VIPT=y
|
CONFIG_CPU_CACHE_VIPT=y
|
||||||
CONFIG_CPU_COPY_V6=y
|
CONFIG_CPU_COPY_V6=y
|
||||||
|
CONFIG_CPU_TLB_V6=y
|
||||||
CONFIG_CPU_TLB_V7=y
|
CONFIG_CPU_TLB_V7=y
|
||||||
CONFIG_CPU_HAS_ASID=y
|
CONFIG_CPU_HAS_ASID=y
|
||||||
CONFIG_CPU_CP15=y
|
CONFIG_CPU_CP15=y
|
||||||
|
@ -268,9 +331,11 @@ CONFIG_ARM_THUMBEE=y
|
||||||
# CONFIG_CPU_BPREDICT_DISABLE is not set
|
# CONFIG_CPU_BPREDICT_DISABLE is not set
|
||||||
CONFIG_HAS_TLS_REG=y
|
CONFIG_HAS_TLS_REG=y
|
||||||
CONFIG_ARM_L1_CACHE_SHIFT=6
|
CONFIG_ARM_L1_CACHE_SHIFT=6
|
||||||
|
# CONFIG_ARM_ERRATA_411920 is not set
|
||||||
# CONFIG_ARM_ERRATA_430973 is not set
|
# CONFIG_ARM_ERRATA_430973 is not set
|
||||||
# CONFIG_ARM_ERRATA_458693 is not set
|
# CONFIG_ARM_ERRATA_458693 is not set
|
||||||
# CONFIG_ARM_ERRATA_460075 is not set
|
# CONFIG_ARM_ERRATA_460075 is not set
|
||||||
|
CONFIG_ARM_GIC=y
|
||||||
CONFIG_COMMON_CLKDEV=y
|
CONFIG_COMMON_CLKDEV=y
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -287,6 +352,7 @@ CONFIG_TICK_ONESHOT=y
|
||||||
CONFIG_NO_HZ=y
|
CONFIG_NO_HZ=y
|
||||||
CONFIG_HIGH_RES_TIMERS=y
|
CONFIG_HIGH_RES_TIMERS=y
|
||||||
CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
|
CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
|
||||||
|
# CONFIG_SMP is not set
|
||||||
CONFIG_VMSPLIT_3G=y
|
CONFIG_VMSPLIT_3G=y
|
||||||
# CONFIG_VMSPLIT_2G is not set
|
# CONFIG_VMSPLIT_2G is not set
|
||||||
# CONFIG_VMSPLIT_1G is not set
|
# CONFIG_VMSPLIT_1G is not set
|
||||||
|
@ -298,6 +364,7 @@ CONFIG_HZ=128
|
||||||
# CONFIG_THUMB2_KERNEL is not set
|
# CONFIG_THUMB2_KERNEL is not set
|
||||||
CONFIG_AEABI=y
|
CONFIG_AEABI=y
|
||||||
CONFIG_OABI_COMPAT=y
|
CONFIG_OABI_COMPAT=y
|
||||||
|
CONFIG_ARCH_HAS_HOLES_MEMORYMODEL=y
|
||||||
# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
|
# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
|
||||||
# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
|
# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
|
||||||
# CONFIG_HIGHMEM is not set
|
# CONFIG_HIGHMEM is not set
|
||||||
|
@ -308,12 +375,10 @@ CONFIG_FLATMEM_MANUAL=y
|
||||||
CONFIG_FLATMEM=y
|
CONFIG_FLATMEM=y
|
||||||
CONFIG_FLAT_NODE_MEM_MAP=y
|
CONFIG_FLAT_NODE_MEM_MAP=y
|
||||||
CONFIG_PAGEFLAGS_EXTENDED=y
|
CONFIG_PAGEFLAGS_EXTENDED=y
|
||||||
CONFIG_SPLIT_PTLOCK_CPUS=4
|
CONFIG_SPLIT_PTLOCK_CPUS=999999
|
||||||
# CONFIG_PHYS_ADDR_T_64BIT is not set
|
# CONFIG_PHYS_ADDR_T_64BIT is not set
|
||||||
CONFIG_ZONE_DMA_FLAG=0
|
CONFIG_ZONE_DMA_FLAG=0
|
||||||
CONFIG_VIRT_TO_BUS=y
|
CONFIG_VIRT_TO_BUS=y
|
||||||
CONFIG_HAVE_MLOCK=y
|
|
||||||
CONFIG_HAVE_MLOCKED_PAGE_BIT=y
|
|
||||||
# CONFIG_KSM is not set
|
# CONFIG_KSM is not set
|
||||||
CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
|
CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
|
||||||
CONFIG_LEDS=y
|
CONFIG_LEDS=y
|
||||||
|
@ -509,15 +574,18 @@ CONFIG_BT_HCIBPA10X=y
|
||||||
# CONFIG_BT_MRVL is not set
|
# CONFIG_BT_MRVL is not set
|
||||||
# CONFIG_AF_RXRPC is not set
|
# CONFIG_AF_RXRPC is not set
|
||||||
CONFIG_WIRELESS=y
|
CONFIG_WIRELESS=y
|
||||||
|
CONFIG_WIRELESS_EXT=y
|
||||||
|
CONFIG_WEXT_CORE=y
|
||||||
|
CONFIG_WEXT_PROC=y
|
||||||
|
CONFIG_WEXT_SPY=y
|
||||||
CONFIG_CFG80211=y
|
CONFIG_CFG80211=y
|
||||||
# CONFIG_NL80211_TESTMODE is not set
|
# CONFIG_NL80211_TESTMODE is not set
|
||||||
# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set
|
# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set
|
||||||
# CONFIG_CFG80211_REG_DEBUG is not set
|
# CONFIG_CFG80211_REG_DEBUG is not set
|
||||||
CONFIG_CFG80211_DEFAULT_PS=y
|
CONFIG_CFG80211_DEFAULT_PS=y
|
||||||
CONFIG_CFG80211_DEFAULT_PS_VALUE=1
|
|
||||||
# CONFIG_CFG80211_DEBUGFS is not set
|
# CONFIG_CFG80211_DEBUGFS is not set
|
||||||
CONFIG_WIRELESS_OLD_REGULATORY=y
|
CONFIG_WIRELESS_OLD_REGULATORY=y
|
||||||
CONFIG_WIRELESS_EXT=y
|
CONFIG_CFG80211_WEXT=y
|
||||||
CONFIG_WIRELESS_EXT_SYSFS=y
|
CONFIG_WIRELESS_EXT_SYSFS=y
|
||||||
CONFIG_LIB80211=y
|
CONFIG_LIB80211=y
|
||||||
# CONFIG_LIB80211_DEBUG is not set
|
# CONFIG_LIB80211_DEBUG is not set
|
||||||
|
@ -671,6 +739,7 @@ CONFIG_BLK_DEV=y
|
||||||
# CONFIG_BLK_DEV_COW_COMMON is not set
|
# CONFIG_BLK_DEV_COW_COMMON is not set
|
||||||
CONFIG_BLK_DEV_LOOP=y
|
CONFIG_BLK_DEV_LOOP=y
|
||||||
# CONFIG_BLK_DEV_CRYPTOLOOP is not set
|
# CONFIG_BLK_DEV_CRYPTOLOOP is not set
|
||||||
|
# CONFIG_BLK_DEV_DRBD is not set
|
||||||
# CONFIG_BLK_DEV_NBD is not set
|
# CONFIG_BLK_DEV_NBD is not set
|
||||||
# CONFIG_BLK_DEV_UB is not set
|
# CONFIG_BLK_DEV_UB is not set
|
||||||
CONFIG_BLK_DEV_RAM=y
|
CONFIG_BLK_DEV_RAM=y
|
||||||
|
@ -681,9 +750,12 @@ CONFIG_BLK_DEV_RAM_SIZE=16384
|
||||||
# CONFIG_ATA_OVER_ETH is not set
|
# CONFIG_ATA_OVER_ETH is not set
|
||||||
# CONFIG_MG_DISK is not set
|
# CONFIG_MG_DISK is not set
|
||||||
CONFIG_MISC_DEVICES=y
|
CONFIG_MISC_DEVICES=y
|
||||||
|
# CONFIG_AD525X_DPOT is not set
|
||||||
# CONFIG_ICS932S401 is not set
|
# CONFIG_ICS932S401 is not set
|
||||||
# CONFIG_ENCLOSURE_SERVICES is not set
|
# CONFIG_ENCLOSURE_SERVICES is not set
|
||||||
# CONFIG_ISL29003 is not set
|
# CONFIG_ISL29003 is not set
|
||||||
|
# CONFIG_DS1682 is not set
|
||||||
|
# CONFIG_TI_DAC7512 is not set
|
||||||
# CONFIG_C2PORT is not set
|
# CONFIG_C2PORT is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -694,6 +766,7 @@ CONFIG_MISC_DEVICES=y
|
||||||
CONFIG_EEPROM_LEGACY=y
|
CONFIG_EEPROM_LEGACY=y
|
||||||
# CONFIG_EEPROM_MAX6875 is not set
|
# CONFIG_EEPROM_MAX6875 is not set
|
||||||
# CONFIG_EEPROM_93CX6 is not set
|
# CONFIG_EEPROM_93CX6 is not set
|
||||||
|
# CONFIG_IWMC3200TOP is not set
|
||||||
CONFIG_HAVE_IDE=y
|
CONFIG_HAVE_IDE=y
|
||||||
# CONFIG_IDE is not set
|
# CONFIG_IDE is not set
|
||||||
|
|
||||||
|
@ -792,28 +865,26 @@ CONFIG_SMSC911X=y
|
||||||
CONFIG_NETDEV_1000=y
|
CONFIG_NETDEV_1000=y
|
||||||
CONFIG_NETDEV_10000=y
|
CONFIG_NETDEV_10000=y
|
||||||
CONFIG_WLAN=y
|
CONFIG_WLAN=y
|
||||||
# CONFIG_WLAN_PRE80211 is not set
|
|
||||||
CONFIG_WLAN_80211=y
|
|
||||||
CONFIG_LIBERTAS=y
|
|
||||||
CONFIG_LIBERTAS_USB=y
|
|
||||||
CONFIG_LIBERTAS_SDIO=y
|
|
||||||
# CONFIG_LIBERTAS_SPI is not set
|
|
||||||
CONFIG_LIBERTAS_DEBUG=y
|
|
||||||
# CONFIG_LIBERTAS_THINFIRM is not set
|
# CONFIG_LIBERTAS_THINFIRM is not set
|
||||||
# CONFIG_AT76C50X_USB is not set
|
# CONFIG_AT76C50X_USB is not set
|
||||||
# CONFIG_USB_ZD1201 is not set
|
# CONFIG_USB_ZD1201 is not set
|
||||||
# CONFIG_USB_NET_RNDIS_WLAN is not set
|
# CONFIG_USB_NET_RNDIS_WLAN is not set
|
||||||
# CONFIG_RTL8187 is not set
|
# CONFIG_RTL8187 is not set
|
||||||
# CONFIG_MAC80211_HWSIM is not set
|
# CONFIG_MAC80211_HWSIM is not set
|
||||||
# CONFIG_P54_COMMON is not set
|
|
||||||
# CONFIG_ATH_COMMON is not set
|
# CONFIG_ATH_COMMON is not set
|
||||||
# CONFIG_HOSTAP is not set
|
|
||||||
# CONFIG_B43 is not set
|
# CONFIG_B43 is not set
|
||||||
# CONFIG_B43LEGACY is not set
|
# CONFIG_B43LEGACY is not set
|
||||||
# CONFIG_ZD1211RW is not set
|
# CONFIG_HOSTAP is not set
|
||||||
|
# CONFIG_IWM is not set
|
||||||
|
CONFIG_LIBERTAS=y
|
||||||
|
CONFIG_LIBERTAS_USB=y
|
||||||
|
CONFIG_LIBERTAS_SDIO=y
|
||||||
|
# CONFIG_LIBERTAS_SPI is not set
|
||||||
|
CONFIG_LIBERTAS_DEBUG=y
|
||||||
|
# CONFIG_P54_COMMON is not set
|
||||||
# CONFIG_RT2X00 is not set
|
# CONFIG_RT2X00 is not set
|
||||||
# CONFIG_WL12XX is not set
|
# CONFIG_WL12XX is not set
|
||||||
# CONFIG_IWM is not set
|
# CONFIG_ZD1211RW is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Enable WiMAX (Networking options) to see the WiMAX drivers
|
# Enable WiMAX (Networking options) to see the WiMAX drivers
|
||||||
|
@ -861,6 +932,7 @@ CONFIG_USB_NET_ZAURUS=y
|
||||||
CONFIG_INPUT=y
|
CONFIG_INPUT=y
|
||||||
# CONFIG_INPUT_FF_MEMLESS is not set
|
# CONFIG_INPUT_FF_MEMLESS is not set
|
||||||
# CONFIG_INPUT_POLLDEV is not set
|
# CONFIG_INPUT_POLLDEV is not set
|
||||||
|
# CONFIG_INPUT_SPARSEKMAP is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Userland interfaces
|
# Userland interfaces
|
||||||
|
@ -889,6 +961,7 @@ CONFIG_KEYBOARD_GPIO=y
|
||||||
# CONFIG_KEYBOARD_OPENCORES is not set
|
# CONFIG_KEYBOARD_OPENCORES is not set
|
||||||
# CONFIG_KEYBOARD_STOWAWAY is not set
|
# CONFIG_KEYBOARD_STOWAWAY is not set
|
||||||
# CONFIG_KEYBOARD_SUNKBD is not set
|
# CONFIG_KEYBOARD_SUNKBD is not set
|
||||||
|
# CONFIG_KEYBOARD_OMAP is not set
|
||||||
CONFIG_KEYBOARD_TWL4030=y
|
CONFIG_KEYBOARD_TWL4030=y
|
||||||
# CONFIG_KEYBOARD_XTKBD is not set
|
# CONFIG_KEYBOARD_XTKBD is not set
|
||||||
CONFIG_INPUT_MOUSE=y
|
CONFIG_INPUT_MOUSE=y
|
||||||
|
@ -914,6 +987,7 @@ CONFIG_TOUCHSCREEN_ADS7846=y
|
||||||
# CONFIG_TOUCHSCREEN_AD7879_I2C is not set
|
# CONFIG_TOUCHSCREEN_AD7879_I2C is not set
|
||||||
# CONFIG_TOUCHSCREEN_AD7879_SPI is not set
|
# CONFIG_TOUCHSCREEN_AD7879_SPI is not set
|
||||||
# CONFIG_TOUCHSCREEN_AD7879 is not set
|
# CONFIG_TOUCHSCREEN_AD7879 is not set
|
||||||
|
# CONFIG_TOUCHSCREEN_DYNAPRO is not set
|
||||||
# CONFIG_TOUCHSCREEN_EETI is not set
|
# CONFIG_TOUCHSCREEN_EETI is not set
|
||||||
# CONFIG_TOUCHSCREEN_FUJITSU is not set
|
# CONFIG_TOUCHSCREEN_FUJITSU is not set
|
||||||
# CONFIG_TOUCHSCREEN_GUNZE is not set
|
# CONFIG_TOUCHSCREEN_GUNZE is not set
|
||||||
|
@ -948,6 +1022,7 @@ CONFIG_SERIO=y
|
||||||
CONFIG_SERIO_SERPORT=y
|
CONFIG_SERIO_SERPORT=y
|
||||||
CONFIG_SERIO_LIBPS2=y
|
CONFIG_SERIO_LIBPS2=y
|
||||||
# CONFIG_SERIO_RAW is not set
|
# CONFIG_SERIO_RAW is not set
|
||||||
|
# CONFIG_SERIO_ALTERA_PS2 is not set
|
||||||
# CONFIG_GAMEPORT is not set
|
# CONFIG_GAMEPORT is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -986,6 +1061,7 @@ CONFIG_UNIX98_PTYS=y
|
||||||
# CONFIG_IPMI_HANDLER is not set
|
# CONFIG_IPMI_HANDLER is not set
|
||||||
CONFIG_HW_RANDOM=y
|
CONFIG_HW_RANDOM=y
|
||||||
# CONFIG_HW_RANDOM_TIMERIOMEM is not set
|
# CONFIG_HW_RANDOM_TIMERIOMEM is not set
|
||||||
|
CONFIG_HW_RANDOM_OMAP=y
|
||||||
# CONFIG_R3964 is not set
|
# CONFIG_R3964 is not set
|
||||||
# CONFIG_RAW_DRIVER is not set
|
# CONFIG_RAW_DRIVER is not set
|
||||||
# CONFIG_TCG_TPM is not set
|
# CONFIG_TCG_TPM is not set
|
||||||
|
@ -1024,7 +1100,6 @@ CONFIG_I2C_OMAP=y
|
||||||
#
|
#
|
||||||
# Miscellaneous I2C Chip support
|
# Miscellaneous I2C Chip support
|
||||||
#
|
#
|
||||||
# CONFIG_DS1682 is not set
|
|
||||||
# CONFIG_SENSORS_TSL2550 is not set
|
# CONFIG_SENSORS_TSL2550 is not set
|
||||||
# CONFIG_I2C_DEBUG_CORE is not set
|
# CONFIG_I2C_DEBUG_CORE is not set
|
||||||
# CONFIG_I2C_DEBUG_ALGO is not set
|
# CONFIG_I2C_DEBUG_ALGO is not set
|
||||||
|
@ -1040,6 +1115,8 @@ CONFIG_SPI_MASTER=y
|
||||||
# CONFIG_SPI_BITBANG is not set
|
# CONFIG_SPI_BITBANG is not set
|
||||||
# CONFIG_SPI_GPIO is not set
|
# CONFIG_SPI_GPIO is not set
|
||||||
CONFIG_SPI_OMAP24XX=y
|
CONFIG_SPI_OMAP24XX=y
|
||||||
|
# CONFIG_SPI_XILINX is not set
|
||||||
|
# CONFIG_SPI_DESIGNWARE is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# SPI Protocol Masters
|
# SPI Protocol Masters
|
||||||
|
@ -1067,6 +1144,7 @@ CONFIG_GPIO_SYSFS=y
|
||||||
# CONFIG_GPIO_PCA953X is not set
|
# CONFIG_GPIO_PCA953X is not set
|
||||||
# CONFIG_GPIO_PCF857X is not set
|
# CONFIG_GPIO_PCF857X is not set
|
||||||
CONFIG_GPIO_TWL4030=y
|
CONFIG_GPIO_TWL4030=y
|
||||||
|
# CONFIG_GPIO_ADP5588 is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# PCI GPIO expanders:
|
# PCI GPIO expanders:
|
||||||
|
@ -1141,6 +1219,7 @@ CONFIG_HWMON=y
|
||||||
# CONFIG_SENSORS_IT87 is not set
|
# CONFIG_SENSORS_IT87 is not set
|
||||||
# CONFIG_SENSORS_LM63 is not set
|
# CONFIG_SENSORS_LM63 is not set
|
||||||
# CONFIG_SENSORS_LM70 is not set
|
# CONFIG_SENSORS_LM70 is not set
|
||||||
|
# CONFIG_SENSORS_LM73 is not set
|
||||||
# CONFIG_SENSORS_LM75 is not set
|
# CONFIG_SENSORS_LM75 is not set
|
||||||
# CONFIG_SENSORS_LM77 is not set
|
# CONFIG_SENSORS_LM77 is not set
|
||||||
# CONFIG_SENSORS_LM78 is not set
|
# CONFIG_SENSORS_LM78 is not set
|
||||||
|
@ -1166,6 +1245,7 @@ CONFIG_HWMON=y
|
||||||
# CONFIG_SENSORS_SMSC47M192 is not set
|
# CONFIG_SENSORS_SMSC47M192 is not set
|
||||||
# CONFIG_SENSORS_SMSC47B397 is not set
|
# CONFIG_SENSORS_SMSC47B397 is not set
|
||||||
# CONFIG_SENSORS_ADS7828 is not set
|
# CONFIG_SENSORS_ADS7828 is not set
|
||||||
|
# CONFIG_SENSORS_AMC6821 is not set
|
||||||
# CONFIG_SENSORS_THMC50 is not set
|
# CONFIG_SENSORS_THMC50 is not set
|
||||||
# CONFIG_SENSORS_TMP401 is not set
|
# CONFIG_SENSORS_TMP401 is not set
|
||||||
# CONFIG_SENSORS_TMP421 is not set
|
# CONFIG_SENSORS_TMP421 is not set
|
||||||
|
@ -1179,6 +1259,7 @@ CONFIG_HWMON=y
|
||||||
# CONFIG_SENSORS_W83627HF is not set
|
# CONFIG_SENSORS_W83627HF is not set
|
||||||
# CONFIG_SENSORS_W83627EHF is not set
|
# CONFIG_SENSORS_W83627EHF is not set
|
||||||
# CONFIG_SENSORS_LIS3_SPI is not set
|
# CONFIG_SENSORS_LIS3_SPI is not set
|
||||||
|
# CONFIG_SENSORS_LIS3_I2C is not set
|
||||||
# CONFIG_THERMAL is not set
|
# CONFIG_THERMAL is not set
|
||||||
CONFIG_WATCHDOG=y
|
CONFIG_WATCHDOG=y
|
||||||
CONFIG_WATCHDOG_NOWAYOUT=y
|
CONFIG_WATCHDOG_NOWAYOUT=y
|
||||||
|
@ -1204,20 +1285,22 @@ CONFIG_SSB_POSSIBLE=y
|
||||||
#
|
#
|
||||||
# Multifunction device drivers
|
# Multifunction device drivers
|
||||||
#
|
#
|
||||||
# CONFIG_MFD_CORE is not set
|
CONFIG_MFD_CORE=y
|
||||||
# CONFIG_MFD_SM501 is not set
|
# CONFIG_MFD_SM501 is not set
|
||||||
# CONFIG_MFD_ASIC3 is not set
|
# CONFIG_MFD_ASIC3 is not set
|
||||||
# CONFIG_HTC_EGPIO is not set
|
# CONFIG_HTC_EGPIO is not set
|
||||||
# CONFIG_HTC_PASIC3 is not set
|
# CONFIG_HTC_PASIC3 is not set
|
||||||
# CONFIG_TPS65010 is not set
|
# CONFIG_TPS65010 is not set
|
||||||
|
# CONFIG_MENELAUS is not set
|
||||||
CONFIG_TWL4030_CORE=y
|
CONFIG_TWL4030_CORE=y
|
||||||
# CONFIG_TWL4030_POWER is not set
|
# CONFIG_TWL4030_POWER is not set
|
||||||
# CONFIG_TWL4030_CODEC is not set
|
CONFIG_TWL4030_CODEC=y
|
||||||
# CONFIG_MFD_TMIO is not set
|
# CONFIG_MFD_TMIO is not set
|
||||||
# CONFIG_MFD_T7L66XB is not set
|
# CONFIG_MFD_T7L66XB is not set
|
||||||
# CONFIG_MFD_TC6387XB is not set
|
# CONFIG_MFD_TC6387XB is not set
|
||||||
# CONFIG_MFD_TC6393XB is not set
|
# CONFIG_MFD_TC6393XB is not set
|
||||||
# CONFIG_PMIC_DA903X is not set
|
# CONFIG_PMIC_DA903X is not set
|
||||||
|
# CONFIG_PMIC_ADP5520 is not set
|
||||||
# CONFIG_MFD_WM8400 is not set
|
# CONFIG_MFD_WM8400 is not set
|
||||||
# CONFIG_MFD_WM831X is not set
|
# CONFIG_MFD_WM831X is not set
|
||||||
# CONFIG_MFD_WM8350_I2C is not set
|
# CONFIG_MFD_WM8350_I2C is not set
|
||||||
|
@ -1225,6 +1308,8 @@ CONFIG_TWL4030_CORE=y
|
||||||
# CONFIG_MFD_MC13783 is not set
|
# CONFIG_MFD_MC13783 is not set
|
||||||
# CONFIG_AB3100_CORE is not set
|
# CONFIG_AB3100_CORE is not set
|
||||||
# CONFIG_EZX_PCAP is not set
|
# CONFIG_EZX_PCAP is not set
|
||||||
|
# CONFIG_MFD_88PM8607 is not set
|
||||||
|
# CONFIG_AB4500_CORE is not set
|
||||||
CONFIG_REGULATOR=y
|
CONFIG_REGULATOR=y
|
||||||
# CONFIG_REGULATOR_DEBUG is not set
|
# CONFIG_REGULATOR_DEBUG is not set
|
||||||
CONFIG_REGULATOR_FIXED_VOLTAGE=y
|
CONFIG_REGULATOR_FIXED_VOLTAGE=y
|
||||||
|
@ -1232,6 +1317,7 @@ CONFIG_REGULATOR_FIXED_VOLTAGE=y
|
||||||
# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set
|
# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set
|
||||||
# CONFIG_REGULATOR_BQ24022 is not set
|
# CONFIG_REGULATOR_BQ24022 is not set
|
||||||
# CONFIG_REGULATOR_MAX1586 is not set
|
# CONFIG_REGULATOR_MAX1586 is not set
|
||||||
|
# CONFIG_REGULATOR_MAX8660 is not set
|
||||||
CONFIG_REGULATOR_TWL4030=y
|
CONFIG_REGULATOR_TWL4030=y
|
||||||
# CONFIG_REGULATOR_LP3971 is not set
|
# CONFIG_REGULATOR_LP3971 is not set
|
||||||
# CONFIG_REGULATOR_TPS65023 is not set
|
# CONFIG_REGULATOR_TPS65023 is not set
|
||||||
|
@ -1267,6 +1353,7 @@ CONFIG_FB_TILEBLITTING=y
|
||||||
#
|
#
|
||||||
# CONFIG_FB_UVESA is not set
|
# CONFIG_FB_UVESA is not set
|
||||||
# CONFIG_FB_S1D13XXX is not set
|
# CONFIG_FB_S1D13XXX is not set
|
||||||
|
# CONFIG_FB_TMIO is not set
|
||||||
# CONFIG_FB_VIRTUAL is not set
|
# CONFIG_FB_VIRTUAL is not set
|
||||||
# CONFIG_FB_METRONOME is not set
|
# CONFIG_FB_METRONOME is not set
|
||||||
# CONFIG_FB_MB862XX is not set
|
# CONFIG_FB_MB862XX is not set
|
||||||
|
@ -1281,6 +1368,7 @@ CONFIG_FB_OMAP_079M3R=y
|
||||||
# CONFIG_FB_OMAP_LCD_MIPID is not set
|
# CONFIG_FB_OMAP_LCD_MIPID is not set
|
||||||
# CONFIG_FB_OMAP_BOOTLOADER_INIT is not set
|
# CONFIG_FB_OMAP_BOOTLOADER_INIT is not set
|
||||||
CONFIG_FB_OMAP_CONSISTENT_DMA_SIZE=2
|
CONFIG_FB_OMAP_CONSISTENT_DMA_SIZE=2
|
||||||
|
# CONFIG_OMAP2_DSS is not set
|
||||||
CONFIG_BACKLIGHT_LCD_SUPPORT=y
|
CONFIG_BACKLIGHT_LCD_SUPPORT=y
|
||||||
CONFIG_LCD_CLASS_DEVICE=y
|
CONFIG_LCD_CLASS_DEVICE=y
|
||||||
# CONFIG_LCD_LMS283GF05 is not set
|
# CONFIG_LCD_LMS283GF05 is not set
|
||||||
|
@ -1364,12 +1452,15 @@ CONFIG_SND_USB_AUDIO=y
|
||||||
CONFIG_SND_SOC=y
|
CONFIG_SND_SOC=y
|
||||||
CONFIG_SND_OMAP_SOC=y
|
CONFIG_SND_OMAP_SOC=y
|
||||||
CONFIG_SND_OMAP_SOC_MCBSP=y
|
CONFIG_SND_OMAP_SOC_MCBSP=y
|
||||||
|
# CONFIG_SND_OMAP_SOC_N810 is not set
|
||||||
# CONFIG_SND_OMAP_SOC_OVERO is not set
|
# CONFIG_SND_OMAP_SOC_OVERO is not set
|
||||||
# CONFIG_SND_OMAP_SOC_OMAP3EVM is not set
|
# CONFIG_SND_OMAP_SOC_OMAP3EVM is not set
|
||||||
|
# CONFIG_SND_OMAP_SOC_AM3517EVM is not set
|
||||||
# CONFIG_SND_OMAP_SOC_SDP3430 is not set
|
# CONFIG_SND_OMAP_SOC_SDP3430 is not set
|
||||||
CONFIG_SND_OMAP_SOC_OMAP3_PANDORA=y
|
CONFIG_SND_OMAP_SOC_OMAP3_PANDORA=y
|
||||||
# CONFIG_SND_OMAP_SOC_OMAP3_BEAGLE is not set
|
# CONFIG_SND_OMAP_SOC_OMAP3_BEAGLE is not set
|
||||||
# CONFIG_SND_OMAP_SOC_ZOOM2 is not set
|
# CONFIG_SND_OMAP_SOC_ZOOM2 is not set
|
||||||
|
# CONFIG_SND_OMAP_SOC_IGEP0020 is not set
|
||||||
CONFIG_SND_SOC_I2C_AND_SPI=y
|
CONFIG_SND_SOC_I2C_AND_SPI=y
|
||||||
# CONFIG_SND_SOC_ALL_CODECS is not set
|
# CONFIG_SND_SOC_ALL_CODECS is not set
|
||||||
CONFIG_SND_SOC_TWL4030=y
|
CONFIG_SND_SOC_TWL4030=y
|
||||||
|
@ -1418,7 +1509,7 @@ CONFIG_USB_HID=y
|
||||||
CONFIG_USB_SUPPORT=y
|
CONFIG_USB_SUPPORT=y
|
||||||
CONFIG_USB_ARCH_HAS_HCD=y
|
CONFIG_USB_ARCH_HAS_HCD=y
|
||||||
CONFIG_USB_ARCH_HAS_OHCI=y
|
CONFIG_USB_ARCH_HAS_OHCI=y
|
||||||
# CONFIG_USB_ARCH_HAS_EHCI is not set
|
CONFIG_USB_ARCH_HAS_EHCI=y
|
||||||
CONFIG_USB=y
|
CONFIG_USB=y
|
||||||
CONFIG_USB_DEBUG=y
|
CONFIG_USB_DEBUG=y
|
||||||
CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
|
CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
|
||||||
|
@ -1441,6 +1532,7 @@ CONFIG_USB_MON=y
|
||||||
# USB Host Controller Drivers
|
# USB Host Controller Drivers
|
||||||
#
|
#
|
||||||
# CONFIG_USB_C67X00_HCD is not set
|
# CONFIG_USB_C67X00_HCD is not set
|
||||||
|
# CONFIG_USB_EHCI_HCD is not set
|
||||||
# CONFIG_USB_OXU210HP_HCD is not set
|
# CONFIG_USB_OXU210HP_HCD is not set
|
||||||
# CONFIG_USB_ISP116X_HCD is not set
|
# CONFIG_USB_ISP116X_HCD is not set
|
||||||
# CONFIG_USB_ISP1760_HCD is not set
|
# CONFIG_USB_ISP1760_HCD is not set
|
||||||
|
@ -1556,16 +1648,18 @@ CONFIG_USB_GADGET_SELECTED=y
|
||||||
# CONFIG_USB_GADGET_LANGWELL is not set
|
# CONFIG_USB_GADGET_LANGWELL is not set
|
||||||
# CONFIG_USB_GADGET_DUMMY_HCD is not set
|
# CONFIG_USB_GADGET_DUMMY_HCD is not set
|
||||||
CONFIG_USB_GADGET_DUALSPEED=y
|
CONFIG_USB_GADGET_DUALSPEED=y
|
||||||
CONFIG_USB_ZERO=y
|
CONFIG_USB_ZERO=m
|
||||||
# CONFIG_USB_ZERO_HNPTEST is not set
|
# CONFIG_USB_ZERO_HNPTEST is not set
|
||||||
# CONFIG_USB_AUDIO is not set
|
# CONFIG_USB_AUDIO is not set
|
||||||
# CONFIG_USB_ETH is not set
|
# CONFIG_USB_ETH is not set
|
||||||
# CONFIG_USB_GADGETFS is not set
|
# CONFIG_USB_GADGETFS is not set
|
||||||
# CONFIG_USB_FILE_STORAGE is not set
|
# CONFIG_USB_FILE_STORAGE is not set
|
||||||
|
# CONFIG_USB_MASS_STORAGE is not set
|
||||||
# CONFIG_USB_G_SERIAL is not set
|
# CONFIG_USB_G_SERIAL is not set
|
||||||
# CONFIG_USB_MIDI_GADGET is not set
|
# CONFIG_USB_MIDI_GADGET is not set
|
||||||
# CONFIG_USB_G_PRINTER is not set
|
# CONFIG_USB_G_PRINTER is not set
|
||||||
# CONFIG_USB_CDC_COMPOSITE is not set
|
# CONFIG_USB_CDC_COMPOSITE is not set
|
||||||
|
# CONFIG_USB_G_MULTI is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# OTG and related infrastructure
|
# OTG and related infrastructure
|
||||||
|
@ -1573,6 +1667,7 @@ CONFIG_USB_ZERO=y
|
||||||
CONFIG_USB_OTG_UTILS=y
|
CONFIG_USB_OTG_UTILS=y
|
||||||
# CONFIG_USB_GPIO_VBUS is not set
|
# CONFIG_USB_GPIO_VBUS is not set
|
||||||
# CONFIG_ISP1301_OMAP is not set
|
# CONFIG_ISP1301_OMAP is not set
|
||||||
|
# CONFIG_USB_ULPI is not set
|
||||||
CONFIG_TWL4030_USB=y
|
CONFIG_TWL4030_USB=y
|
||||||
CONFIG_NOP_USB_XCEIV=y
|
CONFIG_NOP_USB_XCEIV=y
|
||||||
CONFIG_MMC=y
|
CONFIG_MMC=y
|
||||||
|
@ -1609,7 +1704,9 @@ CONFIG_LEDS_GPIO_PLATFORM=y
|
||||||
# CONFIG_LEDS_LP3944 is not set
|
# CONFIG_LEDS_LP3944 is not set
|
||||||
# CONFIG_LEDS_PCA955X is not set
|
# CONFIG_LEDS_PCA955X is not set
|
||||||
# CONFIG_LEDS_DAC124S085 is not set
|
# CONFIG_LEDS_DAC124S085 is not set
|
||||||
|
# CONFIG_LEDS_REGULATOR is not set
|
||||||
# CONFIG_LEDS_BD2802 is not set
|
# CONFIG_LEDS_BD2802 is not set
|
||||||
|
# CONFIG_LEDS_LT3593 is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# LED Triggers
|
# LED Triggers
|
||||||
|
@ -1653,6 +1750,7 @@ CONFIG_RTC_INTF_DEV=y
|
||||||
# CONFIG_RTC_DRV_PCF8563 is not set
|
# CONFIG_RTC_DRV_PCF8563 is not set
|
||||||
# CONFIG_RTC_DRV_PCF8583 is not set
|
# CONFIG_RTC_DRV_PCF8583 is not set
|
||||||
# CONFIG_RTC_DRV_M41T80 is not set
|
# CONFIG_RTC_DRV_M41T80 is not set
|
||||||
|
# CONFIG_RTC_DRV_BQ32K is not set
|
||||||
CONFIG_RTC_DRV_TWL4030=y
|
CONFIG_RTC_DRV_TWL4030=y
|
||||||
# CONFIG_RTC_DRV_S35390A is not set
|
# CONFIG_RTC_DRV_S35390A is not set
|
||||||
# CONFIG_RTC_DRV_FM3130 is not set
|
# CONFIG_RTC_DRV_FM3130 is not set
|
||||||
|
@ -1683,7 +1781,9 @@ CONFIG_RTC_DRV_TWL4030=y
|
||||||
# CONFIG_RTC_DRV_M48T86 is not set
|
# CONFIG_RTC_DRV_M48T86 is not set
|
||||||
# CONFIG_RTC_DRV_M48T35 is not set
|
# CONFIG_RTC_DRV_M48T35 is not set
|
||||||
# CONFIG_RTC_DRV_M48T59 is not set
|
# CONFIG_RTC_DRV_M48T59 is not set
|
||||||
|
# CONFIG_RTC_DRV_MSM6242 is not set
|
||||||
# CONFIG_RTC_DRV_BQ4802 is not set
|
# CONFIG_RTC_DRV_BQ4802 is not set
|
||||||
|
# CONFIG_RTC_DRV_RP5C01 is not set
|
||||||
# CONFIG_RTC_DRV_V3020 is not set
|
# CONFIG_RTC_DRV_V3020 is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -1951,6 +2051,7 @@ CONFIG_DEBUG_INFO=y
|
||||||
# CONFIG_LKDTM is not set
|
# CONFIG_LKDTM is not set
|
||||||
# CONFIG_FAULT_INJECTION is not set
|
# CONFIG_FAULT_INJECTION is not set
|
||||||
# CONFIG_LATENCYTOP is not set
|
# CONFIG_LATENCYTOP is not set
|
||||||
|
# CONFIG_SYSCTL_SYSCALL_CHECK is not set
|
||||||
# CONFIG_PAGE_POISONING is not set
|
# CONFIG_PAGE_POISONING is not set
|
||||||
CONFIG_NOP_TRACER=y
|
CONFIG_NOP_TRACER=y
|
||||||
CONFIG_HAVE_FUNCTION_TRACER=y
|
CONFIG_HAVE_FUNCTION_TRACER=y
|
||||||
|
@ -1983,7 +2084,9 @@ CONFIG_ARM_UNWIND=y
|
||||||
# CONFIG_DEBUG_ERRORS is not set
|
# CONFIG_DEBUG_ERRORS is not set
|
||||||
# CONFIG_DEBUG_STACK_USAGE is not set
|
# CONFIG_DEBUG_STACK_USAGE is not set
|
||||||
CONFIG_DEBUG_LL=y
|
CONFIG_DEBUG_LL=y
|
||||||
|
# CONFIG_EARLY_PRINTK is not set
|
||||||
# CONFIG_DEBUG_ICEDCC is not set
|
# CONFIG_DEBUG_ICEDCC is not set
|
||||||
|
# CONFIG_OC_ETM is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Security options
|
# Security options
|
||||||
|
@ -1993,9 +2096,12 @@ CONFIG_SECURITY=y
|
||||||
# CONFIG_SECURITYFS is not set
|
# CONFIG_SECURITYFS is not set
|
||||||
# CONFIG_SECURITY_NETWORK is not set
|
# CONFIG_SECURITY_NETWORK is not set
|
||||||
# CONFIG_SECURITY_PATH is not set
|
# CONFIG_SECURITY_PATH is not set
|
||||||
# CONFIG_SECURITY_FILE_CAPABILITIES is not set
|
|
||||||
# CONFIG_SECURITY_ROOTPLUG is not set
|
|
||||||
# CONFIG_SECURITY_TOMOYO is not set
|
# CONFIG_SECURITY_TOMOYO is not set
|
||||||
|
# CONFIG_DEFAULT_SECURITY_SELINUX is not set
|
||||||
|
# CONFIG_DEFAULT_SECURITY_SMACK is not set
|
||||||
|
# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
|
||||||
|
CONFIG_DEFAULT_SECURITY_DAC=y
|
||||||
|
CONFIG_DEFAULT_SECURITY=""
|
||||||
CONFIG_CRYPTO=y
|
CONFIG_CRYPTO=y
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
|
@ -187,6 +187,8 @@ CONFIG_ARCH_OMAP3=y
|
||||||
#
|
#
|
||||||
# OMAP Feature Selections
|
# OMAP Feature Selections
|
||||||
#
|
#
|
||||||
|
CONFIG_OMAP_SMARTREFLEX=y
|
||||||
|
# CONFIG_OMAP_SMARTREFLEX_TESTING is not set
|
||||||
# CONFIG_OMAP_DEBUG_POWERDOMAIN is not set
|
# CONFIG_OMAP_DEBUG_POWERDOMAIN is not set
|
||||||
# CONFIG_OMAP_DEBUG_CLOCKDOMAIN is not set
|
# CONFIG_OMAP_DEBUG_CLOCKDOMAIN is not set
|
||||||
CONFIG_OMAP_RESET_CLOCKS=y
|
CONFIG_OMAP_RESET_CLOCKS=y
|
||||||
|
@ -333,7 +335,7 @@ CONFIG_BINFMT_MISC=y
|
||||||
# Power management options
|
# Power management options
|
||||||
#
|
#
|
||||||
CONFIG_PM=y
|
CONFIG_PM=y
|
||||||
# CONFIG_PM_DEBUG is not set
|
CONFIG_PM_DEBUG=y
|
||||||
CONFIG_PM_SLEEP=y
|
CONFIG_PM_SLEEP=y
|
||||||
CONFIG_SUSPEND=y
|
CONFIG_SUSPEND=y
|
||||||
CONFIG_SUSPEND_FREEZER=y
|
CONFIG_SUSPEND_FREEZER=y
|
||||||
|
@ -1339,7 +1341,7 @@ CONFIG_ENABLE_MUST_CHECK=y
|
||||||
CONFIG_FRAME_WARN=1024
|
CONFIG_FRAME_WARN=1024
|
||||||
CONFIG_MAGIC_SYSRQ=y
|
CONFIG_MAGIC_SYSRQ=y
|
||||||
# CONFIG_UNUSED_SYMBOLS is not set
|
# CONFIG_UNUSED_SYMBOLS is not set
|
||||||
# CONFIG_DEBUG_FS is not set
|
CONFIG_DEBUG_FS=y
|
||||||
# CONFIG_HEADERS_CHECK is not set
|
# CONFIG_HEADERS_CHECK is not set
|
||||||
CONFIG_DEBUG_KERNEL=y
|
CONFIG_DEBUG_KERNEL=y
|
||||||
# CONFIG_DEBUG_SHIRQ is not set
|
# CONFIG_DEBUG_SHIRQ is not set
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue